From dfd5c5b32dbd5ea687ce443d4a2bb09c94060bf5 Mon Sep 17 00:00:00 2001 From: Cricial <2911646453@qq.com> Date: Sat, 18 Oct 2025 16:16:05 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=97=E4=BC=A0=E7=AE=97=E6=B3=95001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dataSources.local.xml | 7 +- .idea/dataSources.xml | 4 +- ... 3ce7b935-0ff7-47a3-aaa8-91063c963644.xml} | 867 ++-- .../_src_/schema/iiabmdb_20250925.Yu75yQ.meta | 0 .idea/misc.xml | 3 + GA_Agent_0925/SQL_analysis_risk_ga.sql | 21 + .../__pycache__/controller_db.cpython-38.pyc | Bin 0 -> 9554 bytes .../__pycache__/creating.cpython-38.pyc | Bin 0 -> 1530 bytes .../__pycache__/evaluate_func.cpython-38.pyc | Bin 0 -> 8210 bytes GA_Agent_0925/__pycache__/orm.cpython-38.pyc | Bin 0 -> 3755 bytes GA_Agent_0925/best_result_with_industry.json | 136 + GA_Agent_0925/conf_experiment.yaml | 12 + GA_Agent_0925/config.json | 15 + GA_Agent_0925/controller_db.py | 393 ++ GA_Agent_0925/count_dcp.csv | 4571 +++++++++++++++++ GA_Agent_0925/count_firm.csv | 204 + GA_Agent_0925/count_firm_prod.csv | 266 + GA_Agent_0925/count_prod.csv | 73 + GA_Agent_0925/creating.py | 56 + GA_Agent_0925/evaluate_func.py | 327 ++ GA_Agent_0925/g_bom.pkl | Bin 0 -> 11122 bytes GA_Agent_0925/ga.py | 116 - GA_Agent_0925/main.py | 109 + GA_Agent_0925/orm.py | 117 + GA_Agent_0925/risk_firm_count.py | 23 - GA_Agent_0925/多功能.py | 211 + GA_Agent_0925/{ => 废案}/GA_random.py | 157 +- GA_Agent_0925/进度.py | 43 + __pycache__/controller_db.cpython-38.pyc | Bin 9166 -> 9124 bytes __pycache__/firm.cpython-38.pyc | Bin 11795 -> 11852 bytes __pycache__/my_model.cpython-38.pyc | Bin 26613 -> 26862 bytes __pycache__/orm.cpython-38.pyc | Bin 3626 -> 3688 bytes best_result_with_industry.json | 192 + cache/firm_network_1009.pkl | Bin 0 -> 154627 bytes conf_experiment.yaml | 4 +- controller_db.py | 21 +- count_firm.csv | 1 + count_firm_prod.csv | 1 + count_prod.csv | 1 + firm.py | 8 +- firm_network.pkl | Bin 154627 -> 195547 bytes input_data/firm_industry_relation.csv | 680 +-- input_data/input_firm_data/firm_amended.csv | 609 +-- input_data/input_firm_data/firms_devices.csv | 110 +- .../input_firm_data/firms_materials.csv | 196 +- input_data/input_firm_data/firms_products.csv | 680 +-- main.py | 7 +- my_model.py | 54 +- orm.py | 3 + 49 files changed, 8473 insertions(+), 1825 deletions(-) rename .idea/dataSources/{753dde79-ca3d-42e1-8fb4-13124f46b86d.xml => 3ce7b935-0ff7-47a3-aaa8-91063c963644.xml} (64%) rename .idea/dataSources/{753dde79-ca3d-42e1-8fb4-13124f46b86d => 3ce7b935-0ff7-47a3-aaa8-91063c963644}/storage_v2/_src_/schema/iiabmdb_20250925.Yu75yQ.meta (100%) create mode 100644 GA_Agent_0925/SQL_analysis_risk_ga.sql create mode 100644 GA_Agent_0925/__pycache__/controller_db.cpython-38.pyc create mode 100644 GA_Agent_0925/__pycache__/creating.cpython-38.pyc create mode 100644 GA_Agent_0925/__pycache__/evaluate_func.cpython-38.pyc create mode 100644 GA_Agent_0925/__pycache__/orm.cpython-38.pyc create mode 100644 GA_Agent_0925/best_result_with_industry.json create mode 100644 GA_Agent_0925/conf_experiment.yaml create mode 100644 GA_Agent_0925/config.json create mode 100644 GA_Agent_0925/controller_db.py create mode 100644 GA_Agent_0925/count_dcp.csv create mode 100644 GA_Agent_0925/count_firm.csv create mode 100644 GA_Agent_0925/count_firm_prod.csv create mode 100644 GA_Agent_0925/count_prod.csv create mode 100644 GA_Agent_0925/creating.py create mode 100644 GA_Agent_0925/evaluate_func.py create mode 100644 GA_Agent_0925/g_bom.pkl delete mode 100644 GA_Agent_0925/ga.py create mode 100644 GA_Agent_0925/main.py create mode 100644 GA_Agent_0925/orm.py delete mode 100644 GA_Agent_0925/risk_firm_count.py create mode 100644 GA_Agent_0925/多功能.py rename GA_Agent_0925/{ => 废案}/GA_random.py (86%) create mode 100644 GA_Agent_0925/进度.py create mode 100644 best_result_with_industry.json create mode 100644 cache/firm_network_1009.pkl create mode 100644 count_firm.csv create mode 100644 count_firm_prod.csv create mode 100644 count_prod.csv diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml index c5eb274..068a6fe 100644 --- a/.idea/dataSources.local.xml +++ b/.idea/dataSources.local.xml @@ -1,7 +1,7 @@ - + #@ ` @@ -11,7 +11,10 @@ iiabm_user - + + + + diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 4c7bbe4..f57d0d4 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -1,11 +1,11 @@ - + mysql_aurora.aws_wrapper true software.amazon.jdbc.Driver - jdbc:aws-wrapper:mysql://localhost:3306/iiabmdb_20250925 + jdbc:aws-wrapper:mysql://localhost:3306 $ProjectFileDir$ diff --git a/.idea/dataSources/753dde79-ca3d-42e1-8fb4-13124f46b86d.xml b/.idea/dataSources/3ce7b935-0ff7-47a3-aaa8-91063c963644.xml similarity index 64% rename from .idea/dataSources/753dde79-ca3d-42e1-8fb4-13124f46b86d.xml rename to .idea/dataSources/3ce7b935-0ff7-47a3-aaa8-91063c963644.xml index 7f9d481..3410ade 100644 --- a/.idea/dataSources/753dde79-ca3d-42e1-8fb4-13124f46b86d.xml +++ b/.idea/dataSources/3ce7b935-0ff7-47a3-aaa8-91063c963644.xml @@ -1,5 +1,5 @@ - + lower/lower @@ -61,950 +61,949 @@ iiabmdb_20250926|schema||iiabm_user|localhost|TRIGGER|G iiabmdb_20250926|schema||iiabm_user|localhost|UPDATE|G 8.0.36 - - armscii8 - - + armscii8 1 - - ascii + + armscii8 - + ascii 1 - - big5 + + ascii - + big5 1 + + big5 + binary 1 - - cp1250 - - - cp1250 - - - cp1250 - - + cp1250 1 + + cp1250 + + + cp1250 + + + cp1250 + cp1250 - + cp1251 - + cp1251 - + + cp1251 + + cp1251 1 - + cp1251 - - cp1251 - - - cp1256 - - + cp1256 1 - + + cp1256 + + cp1257 - + + cp1257 + + cp1257 1 - - cp1257 - - - cp850 - - + cp850 1 - - cp852 + + cp850 - + cp852 1 - - cp866 + + cp852 - + cp866 1 - - cp932 + + cp866 - + cp932 1 - - dec8 + + cp932 - + dec8 1 - - eucjpms + + dec8 - + eucjpms 1 - - euckr + + eucjpms - + euckr 1 - - gb18030 + + euckr - + gb18030 1 + + gb18030 + gb18030 - - gb2312 - - + gb2312 1 - - gbk + + gb2312 - + gbk 1 - - geostd8 + + gbk - + geostd8 1 - - greek + + geostd8 - + greek 1 - - hebrew + + greek - + hebrew 1 - - hp8 + + hebrew - + hp8 1 - - keybcs2 + + hp8 - + keybcs2 1 - - koi8r + + keybcs2 - + koi8r 1 - - koi8u + + koi8r - + koi8u 1 - + + koi8u + + latin1 - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - - latin1 - - + latin1 1 - + + latin1 + + + latin1 + + + latin1 + + + latin1 + + + latin1 + + + latin1 + + latin2 - - latin2 - - - latin2 - - + latin2 1 - + latin2 - - latin5 + + latin2 - + + latin2 + + latin5 1 - + + latin5 + + latin7 - - latin7 - - + latin7 1 - + latin7 - - macce + + latin7 - + macce 1 - - macroman + + macce - + macroman 1 - - sjis + + macroman - + sjis 1 - - swe7 + + sjis - + swe7 1 - - tis620 + + swe7 - + tis620 1 - - ucs2 + + tis620 - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - - ucs2 - - + ucs2 1 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + ucs2 - + + ucs2 + + + ucs2 + + + ucs2 + + + ucs2 + + + ucs2 + + + ucs2 + + ucs2 ucs2 - + ucs2 - + ucs2 - - ujis - - + ujis 1 - - utf16 + + ujis - - utf16 - - - utf16 - - - utf16 - - - utf16 - - - utf16 - - + utf16 1 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + utf16 - + + utf16 + + + utf16 + + + utf16 + + + utf16 + + + utf16 + + + utf16 + + utf16 utf16 - - utf16le - - + utf16le 1 - - utf32 + + utf16le - - utf32 - - - utf32 - - - utf32 - - - utf32 - - - utf32 - - + utf32 1 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + utf32 - + + utf32 + + + utf32 + + + utf32 + + + utf32 + + + utf32 + + + utf32 + + utf32 utf32 - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - - utf8mb3 - - + utf8mb3 1 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + utf8mb3 - + + utf8mb3 + + + utf8mb3 + + + utf8mb3 + + + utf8mb3 + + + utf8mb3 + + + utf8mb3 + + utf8mb3 utf8mb3 - + utf8mb3 - + utf8mb3 - - utf8mb4 - 1 - - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + + utf8mb4 + + utf8mb4 utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + + utf8mb4 + 1 + + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - - utf8mb4 - - + utf8mb4 utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - + utf8mb4 - - utf8mb4_general_ci - - - 1 - 2025-09-27.15:34:40 - utf8mb4_0900_ai_ci - - - utf8mb4_0900_ai_ci - - + utf8mb3_general_ci - + + utf8mb4_0900_ai_ci + + + 2025-10-18.02:36:56 + utf8mb4_0900_ai_ci + + + utf8mb4_general_ci + + utf8mb4_0900_ai_ci localhost - +
InnoDButf8mb4_0900_ai_ci
- +
InnoDButf8mb4_0900_ai_ci
- +
InnoDButf8mb4_0900_ai_ci
- +
InnoDButf8mb4_0900_ai_ci
- +
InnoDButf8mb4_0900_ai_ci
- +
InnoDButf8mb4_0900_ai_ci
- +
InnoDButf8mb4_0900_ai_ci
@@ -1029,7 +1028,7 @@ iiabmdb_20250926|schema||iiabm_user|localhost|UPDATE|G PRIMARY - 3421 + 1 1 1 int|0s @@ -1115,7 +1114,7 @@ iiabmdb_20250926|schema||iiabm_user|localhost|UPDATE|G PRIMARY - 7150933 + 1 1 1 int|0s @@ -1165,7 +1164,7 @@ iiabmdb_20250926|schema||iiabm_user|localhost|UPDATE|G PRIMARY - 34201 + 1 1 1 int|0s @@ -1312,7 +1311,7 @@ iiabmdb_20250926|schema||iiabm_user|localhost|UPDATE|G PRIMARY - 213115 + 503 1 1 int|0s @@ -1342,82 +1341,86 @@ iiabmdb_20250926|schema||iiabm_user|localhost|UPDATE|G 6 varchar(5)|0s - + + 7 + varchar(50)|0s + + s_id id without_exp_sample - + id btree 1 - + s_id btree - + 1 1 PRIMARY - + 3631 1 1 int|0s - + 1 2 int|0s - + 1 3 int|0s - + 1 4 bigint|0s - + 1 5 int|0s - + 6 varchar(64)|0s - + 7 datetime|0s - + 8 int|0s - + 9 longtext|0s - + e_id id without_exp_experiment - + id btree 1 - + e_id btree - + 1 1 PRIMARY diff --git a/.idea/dataSources/753dde79-ca3d-42e1-8fb4-13124f46b86d/storage_v2/_src_/schema/iiabmdb_20250925.Yu75yQ.meta b/.idea/dataSources/3ce7b935-0ff7-47a3-aaa8-91063c963644/storage_v2/_src_/schema/iiabmdb_20250925.Yu75yQ.meta similarity index 100% rename from .idea/dataSources/753dde79-ca3d-42e1-8fb4-13124f46b86d/storage_v2/_src_/schema/iiabmdb_20250925.Yu75yQ.meta rename to .idea/dataSources/3ce7b935-0ff7-47a3-aaa8-91063c963644/storage_v2/_src_/schema/iiabmdb_20250925.Yu75yQ.meta diff --git a/.idea/misc.xml b/.idea/misc.xml index e557d17..21c5070 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,4 +4,7 @@
+ +
\ No newline at end of file diff --git a/GA_Agent_0925/SQL_analysis_risk_ga.sql b/GA_Agent_0925/SQL_analysis_risk_ga.sql new file mode 100644 index 0000000..5599228 --- /dev/null +++ b/GA_Agent_0925/SQL_analysis_risk_ga.sql @@ -0,0 +1,21 @@ +SELECT * +FROM ( + SELECT s_id, id_firm, id_product, MIN(ts) AS ts + FROM iiabmdb_20250925.without_exp_result + WHERE `status` = 'D' + AND ga_id = :ga_id + GROUP BY s_id, id_firm, id_product +) AS s_disrupt +WHERE s_id IN ( + SELECT s_id + FROM ( + SELECT s_id, id_firm, id_product, MIN(ts) AS ts + FROM iiabmdb_20250925.without_exp_result + WHERE `status` = 'D' + AND ga_id = :ga_id + GROUP BY s_id, id_firm, id_product + ) AS t + GROUP BY s_id + HAVING COUNT(*) > 1 +) +ORDER BY s_id; diff --git a/GA_Agent_0925/__pycache__/controller_db.cpython-38.pyc b/GA_Agent_0925/__pycache__/controller_db.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ade30f3a9052e1248aadcd40d9d29c5542613c8 GIT binary patch literal 9554 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 RkP-U;FM&i`kJL%U{2#j4kmmpZ literal 0 HcmV?d00001 diff --git a/GA_Agent_0925/__pycache__/evaluate_func.cpython-38.pyc b/GA_Agent_0925/__pycache__/evaluate_func.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f5c8ed84e6e7dad6a78cc167a0f8caaee03127a GIT binary patch literal 8210 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 HE?NH= self.batch_size: + self._commit_batch() + + # 辅助方法:批量提交 + def _commit_batch(self): + db_session.bulk_save_objects(self.experiment_data) + db_session.commit() + self.experiment_data.clear() # 清空队列 + + def finalize_insertion(self): + if self.experiment_data: + self._commit_batch() # 提交剩余的数据 + + def fill_sample_table(self): + rng = random.Random(self.dct_parameter['meta_seed']) + # 根据样本数目 设置 32 位随机整数 + lst_seed = [ + rng.getrandbits(32) + for _ in range(int(self.dct_parameter['n_sample'])) + ] + lst_exp = db_session.query(Experiment).all() + + lst_sample = [] + for experiment in lst_exp: + # idx_sample: 1-50 + for idx_sample in range(int(experiment.n_sample)): + s = Sample(e_id=experiment.id, + idx_sample=idx_sample + 1, + seed=lst_seed[idx_sample], + is_done_flag=-1) + lst_sample.append(s) + # 每当达到批量大小时提交一次 + if len(lst_sample) >= self.batch_size: + db_session.bulk_save_objects(lst_sample) + db_session.commit() + print(f'Inserted {len(lst_sample)} samples!') + lst_sample.clear() # 清空已提交的样本列表 + + # 提交剩余的样本 + if lst_sample: + db_session.bulk_save_objects(lst_sample) + db_session.commit() + print(f'Inserted {len(lst_sample)} samples!') + + def reset_db(self, force_drop=False): + # first, check if tables exist + lst_table_obj = [ + Base.metadata.tables[str_table] + for str_table in ins.get_table_names() + if str_table.startswith(self.db_name_prefix) + ] + self.is_exist = len(lst_table_obj) > 0 + if force_drop: + self.force_drop_db(lst_table_obj) + # while is_exist: + # a_table = random.choice(lst_table_obj) + # try: + # Base.metadata.drop_all(bind=engine, tables=[a_table]) + # except KeyError: + # pass + # except OperationalError: + # pass + # else: + # lst_table_obj.remove(a_table) + # print( + # f"Table {a_table.name} is dropped " + # f"for exp: {self.db_name_prefix}!!!" + # ) + # finally: + # is_exist = len(lst_table_obj) > 0 + + if self.is_exist: + print( + f"All tables exist. No need to reset " + f"for exp: {self.db_name_prefix}." + ) + # change the is_done_flag from 0 to -1 + # rerun the in-finished tasks + self.is_exist_reset_flag_resset_db() + # if self.reset_flag > 0: + # if self.reset_flag == 2: + # sample = db_session.query(Sample).filter( + # Sample.is_done_flag == 0) + # elif self.reset_flag == 1: + # sample = db_session.query(Sample).filter( + # Sample.is_done_flag == 0, + # Sample.computer_name == platform.node()) + # else: + # raise ValueError('Wrong reset flag') + # if sample.count() > 0: + # for s in sample: + # qry_result = db_session.query(Result).filter_by( + # s_id=s.id) + # if qry_result.count() > 0: + # db_session.query(Result).filter(s_id=s.id).delete() + # db_session.commit() + # s.is_done_flag = -1 + # db_session.commit() + # print(f"Reset the sample id {s.id} flag from 0 to -1") + + else: + # 不存在则重新生成所有的表结构 + Base.metadata.create_all(bind=engine) + self.init_tables() + print( + f"All tables are just created and initialized " + f"for exp: {self.db_name_prefix}." + ) + + def force_drop_db(self, lst_table_obj): + self.is_exist = len(lst_table_obj) > 0 + while self.is_exist: + a_table = random.choice(lst_table_obj) + try: + Base.metadata.drop_all(bind=engine, tables=[a_table]) + except KeyError: + pass + except OperationalError: + pass + else: + lst_table_obj.remove(a_table) + print( + f"Table {a_table.name} is dropped " + f"for exp: {self.db_name_prefix}!!!" + ) + finally: + self.is_exist = len(lst_table_obj) > 0 + + def is_exist_reset_flag_resset_db(self): + if self.reset_flag > 0: + if self.reset_flag == 2: + sample = db_session.query(Sample).filter( + Sample.is_done_flag == 0) + elif self.reset_flag == 1: + sample = db_session.query(Sample).filter( + Sample.is_done_flag == 0, + Sample.computer_name == platform.node()) + else: + raise ValueError('Wrong reset flag') + if sample.count() > 0: + for s in sample: + qry_result = db_session.query(Result).filter_by( + s_id=s.id) + if qry_result.count() > 0: + db_session.query(Result).filter(s_id=s.id).delete() + db_session.commit() + s.is_done_flag = -1 + db_session.commit() + print(f"Reset the sample id {s.id} flag from 0 to -1") + + def prepare_list_sample(self): + # 为了符合前面 重置表里面存在 重置本机 或者重置全部 或者不重置的部分 这个部分的 关于样本运行也得重新拿出来 + # 查找一个风险事件中 50 个样本 + res = db_session.execute( + text(f"SELECT count(*) FROM {self.db_name_prefix}_sample s, " + f"{self.db_name_prefix}_experiment e WHERE s.e_id=e.id" + )).scalar() + # 控制 n_sample数量 作为后面的参数 + n_sample = 0 if res is None else res + # print(f'There are a total of {n_sample} samples.') + # 查找 is_done_flag = -1 也就是没有运行的 样本 运行后会改为0 + res = db_session.execute( + text(f"SELECT id FROM {self.db_name_prefix}_sample " + f"WHERE is_done_flag = -1" + )) + for row in res: + s_id = row[0] + self.lst_saved_s_id.append(s_id) + + @staticmethod + def select_random_sample(lst_s_id): + temp_lst = lst_s_id[:] # 复制列表 + while temp_lst: + s_id = random.choice(temp_lst) + temp_lst.remove(s_id) # 从临时列表删除 + res = db_session.query(Sample).filter( + Sample.id == int(s_id), + Sample.is_done_flag == -1 + ) + if res.count() == 1: + return res[0] + # 尝试完所有样本都没找到 + return None + + def fetch_a_sample(self, s_id=None): + # 由Computation 调用 返回 sample对象 同时给出 2中 指定访问模式 抓取特定的 样本 通过s_id + # 默认访问 flag为-1的 lst_saved_s_id + if s_id is not None: + res = db_session.query(Sample).filter(Sample.id == int(s_id)) + if res.count() == 0: + return None + else: + return res[0] + + sample = self.select_random_sample(self.lst_saved_s_id) + if sample is not None: + return sample + + return None + + @staticmethod + def lock_the_sample(sample: Sample): + sample.is_done_flag, sample.computer_name = 0, platform.node() + db_session.commit() + + def reset_sample_db(self): + """ + 将 iiabmdb_20250925.without_exp_sample 表中 + 所有样本的 is_done_flag 更新为 -1 + """ + sql = text("UPDATE iiabmdb_20250925.without_exp_sample SET is_done_flag = -1") + db_session.execute(sql) + db_session.commit() + +if __name__ == '__main__': + print("Testing the database connection...") + try: + controller_db = ControllerDB('test') + Base.metadata.create_all(bind=engine) + except Exception as e: + print("Failed to connect to the database!") + print(e) + exit(1) diff --git a/GA_Agent_0925/count_dcp.csv b/GA_Agent_0925/count_dcp.csv new file mode 100644 index 0000000..d7f8093 --- /dev/null +++ b/GA_Agent_0925/count_dcp.csv @@ -0,0 +1,4571 @@ +up_id_firm,up_id_product,down_id_firm,down_id_product,count +340093034,95,532328014,99,108 +340093034,95,303926772,99,106 +395736790,95,303926772,99,104 +395736790,95,532328014,99,100 +29223617,95,303926772,99,93 +29223617,95,532328014,99,90 +2337727838,90,303926772,99,42 +2326722141,90,303926772,99,41 +331545755,90,303926772,99,41 +2326722141,90,532328014,99,39 +3191869223,91,303926772,99,38 +2337727838,90,532328014,99,38 +3191869223,91,532328014,99,36 +331545755,90,532328014,99,35 +2336923756,91,532328014,99,33 +3111603340,50,303926772,99,33 +214851100,51,303926772,99,32 +2336923756,91,303926772,99,32 +214851100,54,303926772,99,31 +214851100,51,532328014,99,31 +214851100,54,532328014,99,31 +3111603340,55,303926772,99,31 +517675473,92,303926772,99,30 +70634828,53,303926772,99,30 +517675473,92,532328014,99,30 +3111603340,52,532328014,99,30 +70634828,53,532328014,99,30 +214851100,50,303926772,99,30 +214851100,52,303926772,99,30 +3111603340,55,532328014,99,30 +214851100,52,532328014,99,30 +2327605629,94,532328014,99,30 +3111603340,50,532328014,99,29 +3111603340,52,303926772,99,29 +2327605629,94,303926772,99,29 +214851100,55,303926772,99,29 +214851100,50,532328014,99,29 +70634828,50,303926772,99,29 +3111603340,51,303926772,99,29 +214851100,53,532328014,99,29 +214851100,53,303926772,99,28 +591350440,91,532328014,99,28 +3111603340,53,532328014,99,28 +728969035,93,532328014,99,28 +2349705416,94,303926772,99,27 +70634828,55,303926772,99,27 +70634828,50,532328014,99,27 +70634828,51,532328014,99,27 +3111603340,51,532328014,99,27 +591350440,91,303926772,99,27 +214851100,55,532328014,99,26 +16210433,92,532328014,99,26 +2349179532,93,532328014,99,26 +70634828,55,532328014,99,26 +2349705416,94,532328014,99,26 +70634828,54,532328014,99,26 +3111603340,53,303926772,99,26 +70634828,51,303926772,99,26 +70634828,52,532328014,99,26 +70634828,54,303926772,99,25 +2349179532,93,303926772,99,25 +70634828,52,303926772,99,25 +16210433,92,303926772,99,24 +3111603340,49,303926772,99,24 +3111603340,54,303926772,99,24 +728969035,93,303926772,99,24 +340093034,95,29223617,95,23 +395736790,95,29223617,95,23 +3111603340,49,532328014,99,23 +3111603340,45,303926772,99,22 +471121089,93,532328014,99,22 +214851100,49,532328014,99,22 +471121089,93,303926772,99,22 +214851100,49,303926772,99,22 +3111603340,54,532328014,99,22 +25980377,42,532328014,99,22 +25980377,42,303926772,99,21 +16116663,92,303926772,99,21 +3111603340,49,3330358736,39,21 +70634828,45,303926772,99,21 +3191869223,91,29223617,95,21 +3330358736,41,532328014,99,21 +214851100,46,532328014,99,21 +3111603340,49,25980377,39,21 +214851100,46,303926772,99,21 +3111603340,45,532328014,99,21 +3330358736,42,532328014,99,20 +3111603340,47,303926772,99,20 +16116663,92,532328014,99,20 +25980377,41,303926772,99,20 +2336923756,91,29223617,95,20 +70634828,46,303926772,99,20 +70634828,46,532328014,99,20 +70634828,45,532328014,99,20 +591350440,91,29223617,95,20 +25980377,41,532328014,99,20 +331545755,90,29223617,95,20 +2337727838,90,29223617,95,19 +214851100,49,25980377,39,19 +214851100,46,25980377,43,19 +214851100,46,3330358736,43,19 +3111603340,47,532328014,99,19 +70634828,44,303926772,99,19 +3330358736,42,303926772,99,19 +2327605629,94,29223617,95,19 +3111603340,49,3330358736,43,19 +340093034,95,3330358736,43,19 +3330358736,41,303926772,99,18 +3111603340,48,303926772,99,18 +70634828,45,25980377,39,18 +214851100,44,303926772,99,18 +340093034,95,3330358736,39,18 +2326722141,90,29223617,95,18 +214851100,47,303926772,99,18 +214851100,48,303926772,99,18 +728969035,93,29223617,95,18 +70634828,48,303926772,99,18 +3111603340,47,3330358736,38,18 +214851100,47,532328014,99,18 +214851100,49,3330358736,39,18 +70634828,48,532328014,99,18 +3111603340,49,25980377,43,18 +70634828,44,532328014,99,18 +3111603340,44,303926772,99,18 +3111603340,45,3330358736,39,17 +70634828,45,3330358736,43,17 +70634828,45,3330358736,39,17 +517675473,92,29223617,95,17 +214851100,48,532328014,99,17 +70634828,46,3330358736,43,17 +29223617,95,3330358736,43,17 +25980377,42,3330358736,43,17 +70634828,49,303926772,99,17 +340093034,95,3330358736,38,17 +214851100,44,532328014,99,17 +214851100,49,3330358736,43,17 +3111603340,47,3330358736,43,17 +3111603340,45,25980377,39,17 +214851100,53,3330358736,43,16 +29223617,95,3330358736,39,16 +70634828,49,25980377,39,16 +340093034,95,3330358736,40,16 +3111603340,44,3330358736,40,16 +3111603340,44,532328014,99,16 +214851100,49,3330358736,40,16 +70634828,49,532328014,99,16 +3111603340,47,3330358736,39,16 +70634828,46,25980377,43,16 +3111603340,46,303926772,99,16 +3111603340,49,25980377,40,16 +25980377,42,3330358736,39,16 +3111603340,48,532328014,99,16 +25980377,42,3330358736,38,16 +395736790,95,3330358736,43,16 +214851100,54,3330358736,43,16 +3111603340,49,3330358736,38,16 +214851100,46,25980377,39,16 +3111603340,46,25980377,43,16 +3111603340,48,3330358736,43,16 +340093034,95,25980377,39,16 +3111603340,49,3330358736,40,16 +3111603340,45,3330358736,43,16 +3111603340,49,25980377,38,16 +70634828,46,3330358736,40,15 +70634828,49,3330358736,39,15 +70634828,46,25980377,39,15 +70634828,46,3330358736,38,15 +70634828,46,3330358736,39,15 +3111603340,51,25980377,39,15 +3111603340,51,3330358736,39,15 +395736790,95,3330358736,40,15 +395736790,95,3330358736,39,15 +214851100,51,3330358736,43,15 +395736790,95,3330358736,38,15 +70634828,48,3330358736,43,15 +395736790,95,25980377,39,15 +70634828,47,303926772,99,15 +25980377,42,25980377,43,15 +29223617,95,3330358736,38,15 +340093034,95,25980377,43,15 +29223617,95,25980377,39,15 +29223617,95,3330358736,40,15 +214851100,49,25980377,40,15 +214851100,49,3330358736,38,15 +70634828,53,25980377,39,15 +25980377,42,25980377,40,15 +3111603340,47,25980377,38,15 +25980377,42,25980377,39,15 +70634828,53,3330358736,39,15 +3330358736,42,3330358736,43,15 +3111603340,47,25980377,39,15 +3111603340,47,25980377,43,15 +25980377,42,3330358736,40,15 +25980377,41,3330358736,43,15 +70634828,54,3330358736,43,15 +70634828,54,3330358736,39,15 +214851100,46,3330358736,39,15 +3111603340,45,25980377,38,15 +3111603340,45,25980377,43,15 +70634828,54,3330358736,40,14 +70634828,54,3330358736,38,14 +214851100,53,25980377,39,14 +3111603340,47,331545755,90,14 +214851100,54,3330358736,39,14 +214851100,49,25980377,43,14 +214851100,50,3330358736,39,14 +214851100,47,25980377,39,14 +3111603340,55,3330358736,43,14 +214851100,50,25980377,39,14 +70634828,47,532328014,99,14 +3330358736,42,3330358736,38,14 +3111603340,45,3330358736,38,14 +214851100,55,3330358736,43,14 +3111603340,45,3330358736,40,14 +214851100,48,3330358736,43,14 +70634828,48,3330358736,38,14 +3111603340,46,3330358736,43,14 +70634828,48,3330358736,39,14 +3330358736,42,3330358736,40,14 +214851100,47,3330358736,43,14 +3111603340,49,331545755,90,14 +214851100,49,25980377,38,14 +70634828,54,25980377,39,14 +214851100,50,3330358736,43,14 +3111603340,47,3330358736,40,14 +3111603340,46,532328014,99,14 +3111603340,45,25980377,40,14 +214851100,51,3330358736,39,14 +214851100,51,25980377,40,14 +25980377,41,25980377,39,14 +25980377,41,3330358736,39,14 +214851100,44,25980377,40,14 +214851100,51,25980377,39,14 +70634828,45,25980377,43,14 +214851100,45,303926772,99,14 +214851100,53,3330358736,39,14 +25980377,41,3330358736,38,14 +70634828,45,3330358736,38,14 +25980377,42,25980377,38,14 +214851100,46,3330358736,38,14 +2349179532,93,29223617,95,14 +3111603340,48,25980377,39,14 +70634828,44,3330358736,38,14 +25980377,41,25980377,43,14 +3111603340,48,3330358736,38,14 +214851100,51,3330358736,40,14 +3111603340,48,3330358736,39,14 +3111603340,48,25980377,43,14 +29223617,95,25980377,43,14 +340093034,95,395736790,95,14 +340093034,95,25980377,40,14 +3191869223,91,395736790,95,14 +340093034,95,25980377,38,14 +70634828,53,3330358736,43,14 +70634828,44,3330358736,43,14 +214851100,54,25980377,39,14 +3330358736,41,3330358736,43,14 +3330358736,42,3330358736,39,13 +70634828,48,25980377,39,13 +70634828,48,25980377,38,13 +214851100,52,3330358736,43,13 +214851100,48,3330358736,38,13 +395736790,95,25980377,40,13 +70634828,44,3330358736,39,13 +2327605629,94,395736790,95,13 +2326722141,90,395736790,95,13 +3111603340,52,3330358736,40,13 +70634828,44,3330358736,40,13 +214851100,44,3330358736,40,13 +3111603340,54,3330358736,39,13 +214851100,47,331545755,90,13 +70634828,45,25980377,38,13 +70634828,45,3330358736,40,13 +214851100,51,3330358736,38,13 +214851100,45,3330358736,43,13 +214851100,45,532328014,99,13 +214851100,46,25980377,38,13 +214851100,46,25980377,40,13 +2349705416,94,29223617,95,13 +70634828,46,25980377,40,13 +214851100,46,3330358736,40,13 +214851100,47,25980377,38,13 +214851100,44,3330358736,43,13 +214851100,47,3330358736,38,13 +70634828,44,25980377,40,13 +395736790,95,2326722141,90,13 +214851100,47,3330358736,40,13 +70634828,44,331545755,90,13 +3330358736,42,25980377,39,13 +3330358736,42,25980377,40,13 +3330358736,42,25980377,43,13 +214851100,48,25980377,39,13 +3111603340,55,3330358736,40,13 +3111603340,55,3330358736,39,13 +214851100,52,25980377,40,13 +214851100,50,25980377,40,13 +3111603340,55,25980377,43,13 +70634828,44,25980377,39,13 +395736790,95,25980377,43,13 +3111603340,47,2326722141,90,13 +70634828,44,2326722141,90,13 +3111603340,44,3330358736,38,13 +3111603340,45,331545755,90,13 +70634828,55,3330358736,43,13 +70634828,55,3330358736,39,13 +3111603340,50,3330358736,39,13 +3111603340,47,25980377,40,13 +214851100,54,3330358736,38,13 +70634828,54,25980377,43,13 +214851100,54,25980377,43,13 +395736790,95,331545755,90,13 +3111603340,44,25980377,39,13 +16210433,92,29223617,95,13 +3111603340,49,2337727838,90,13 +3111603340,49,2326722141,90,13 +214851100,53,25980377,40,13 +214851100,53,25980377,43,13 +3111603340,48,3330358736,40,13 +25980377,39,3111603340,53,13 +3111603340,48,25980377,38,13 +214851100,53,3330358736,38,13 +3111603340,44,25980377,40,13 +214851100,53,3330358736,40,13 +29223617,95,25980377,38,13 +29223617,95,25980377,40,13 +214851100,55,25980377,43,13 +3111603340,51,3330358736,43,13 +214851100,54,25980377,40,12 +395736790,95,3111603340,53,12 +3111603340,55,3330358736,38,12 +214851100,52,25980377,39,12 +70634828,47,25980377,38,12 +340093034,95,2326722141,90,12 +214851100,46,331545755,90,12 +70634828,54,25980377,40,12 +2337727838,90,395736790,95,12 +214851100,52,3330358736,40,12 +395736790,95,25980377,38,12 +3111603340,52,3330358736,39,12 +3111603340,51,3330358736,38,12 +3111603340,47,2337727838,90,12 +214851100,47,2326722141,90,12 +70634828,47,3330358736,38,12 +214851100,47,2337727838,90,12 +25980377,41,25980377,38,12 +214851100,54,3330358736,40,12 +3111603340,55,25980377,39,12 +70634828,53,3330358736,40,12 +3111603340,51,3330358736,40,12 +395736790,95,2337727838,90,12 +214851100,47,25980377,43,12 +214851100,44,25980377,39,12 +340093034,95,331545755,90,12 +214851100,44,3330358736,39,12 +3111603340,52,25980377,39,12 +331545755,90,395736790,95,12 +340093034,95,3111603340,53,12 +214851100,51,25980377,43,12 +25980377,41,3330358736,40,12 +70634828,46,25980377,38,12 +70634828,49,3330358736,43,12 +70634828,44,25980377,43,12 +3330358736,41,25980377,39,12 +70634828,46,331545755,90,12 +3330358736,41,25980377,43,12 +70634828,49,3330358736,40,12 +3330358736,41,3330358736,38,12 +3330358736,41,3330358736,39,12 +214851100,47,25980377,40,12 +214851100,55,25980377,39,12 +3111603340,50,25980377,39,12 +70634828,55,3330358736,38,12 +70634828,48,25980377,43,12 +214851100,48,3330358736,39,12 +3111603340,50,3330358736,43,12 +214851100,48,2326722141,90,12 +214851100,48,25980377,40,12 +3111603340,44,3330358736,39,12 +3111603340,44,3330358736,43,12 +214851100,48,25980377,43,12 +214851100,50,25980377,43,12 +3111603340,53,3330358736,43,12 +70634828,49,25980377,40,12 +3111603340,45,2337727838,90,12 +3111603340,45,2326722141,90,12 +214851100,55,3330358736,39,12 +214851100,48,3330358736,40,12 +3111603340,52,3330358736,43,12 +3111603340,53,25980377,43,12 +2326722141,90,340093034,95,12 +3111603340,44,25980377,43,12 +214851100,50,3330358736,40,12 +3111603340,46,3330358736,38,12 +70634828,55,25980377,39,12 +214851100,47,3330358736,39,12 +214851100,52,3330358736,38,12 +3111603340,54,25980377,39,12 +3330358736,42,25980377,38,12 +214851100,49,2326722141,90,12 +70634828,52,3330358736,39,11 +70634828,52,29223617,95,11 +214851100,44,2326722141,90,11 +70634828,52,3330358736,38,11 +214851100,45,25980377,43,11 +214851100,45,25980377,39,11 +3330358736,39,3111603340,53,11 +70634828,45,25980377,40,11 +2327605629,94,340093034,95,11 +70634828,52,3330358736,40,11 +214851100,51,25980377,38,11 +29223617,95,2326722141,90,11 +214851100,44,2337727838,90,11 +471121089,93,29223617,95,11 +214851100,44,25980377,43,11 +214851100,44,3330358736,38,11 +214851100,55,3330358736,38,11 +728969035,93,395736790,95,11 +3330358736,40,70634828,50,11 +591350440,91,395736790,95,11 +214851100,55,3330358736,40,11 +70634828,55,3330358736,40,11 +3111603340,46,3330358736,39,11 +70634828,55,25980377,43,11 +214851100,50,3330358736,38,11 +3111603340,46,25980377,39,11 +2337727838,90,3330358736,40,11 +2337727838,90,3330358736,43,11 +3111603340,46,25980377,38,11 +29223617,95,331545755,90,11 +3111603340,44,25980377,38,11 +591350440,91,340093034,95,11 +2326722141,90,3330358736,43,11 +340093034,95,2337727838,90,11 +214851100,49,2337727838,90,11 +3330358736,41,214851100,52,11 +70634828,53,3330358736,38,11 +214851100,46,2337727838,90,11 +3330358736,41,3330358736,40,11 +214851100,49,331545755,90,11 +3330358736,41,3111603340,52,11 +29223617,95,3111603340,53,11 +3111603340,46,3330358736,40,11 +3330358736,41,25980377,40,11 +214851100,48,331545755,90,11 +3330358736,41,25980377,38,11 +70634828,53,25980377,43,11 +70634828,53,25980377,40,11 +70634828,54,25980377,38,11 +3111603340,52,25980377,43,11 +3111603340,54,3330358736,43,11 +214851100,53,25980377,38,11 +214851100,52,29223617,95,11 +3111603340,55,25980377,40,11 +3111603340,48,25980377,40,11 +70634828,48,3330358736,40,11 +3111603340,53,3330358736,39,11 +3111603340,51,25980377,38,11 +70634828,50,3330358736,43,11 +3111603340,51,25980377,40,11 +3111603340,51,25980377,43,11 +70634828,44,2337727838,90,11 +214851100,52,25980377,43,11 +70634828,47,3330358736,43,11 +214851100,52,3330358736,39,11 +3111603340,55,25980377,38,11 +70634828,44,25980377,38,11 +70634828,47,25980377,43,11 +70634828,46,2326722141,90,11 +3111603340,52,25980377,40,11 +25980377,41,214851100,52,11 +3111603340,50,25980377,43,11 +70634828,48,2326722141,90,11 +16116663,92,29223617,95,11 +214851100,52,25980377,38,11 +70634828,47,25980377,39,11 +3111603340,52,3330358736,38,11 +70634828,47,25980377,40,11 +70634828,49,25980377,43,11 +70634828,47,3330358736,40,10 +70634828,47,3330358736,39,10 +2337727838,90,25980377,39,10 +70634828,51,25980377,39,10 +2337727838,90,3111603340,53,10 +2337727838,90,25980377,43,10 +331545755,90,3111603340,53,10 +70634828,55,25980377,38,10 +2337727838,90,3330358736,39,10 +2337727838,90,340093034,95,10 +214851100,54,331545755,90,10 +2337727838,90,70634828,50,10 +25980377,43,3111603340,54,10 +395736790,95,3111603340,54,10 +214851100,54,25980377,38,10 +25980377,42,331545755,90,10 +2337727838,90,3330358736,38,10 +70634828,48,25980377,40,10 +70634828,55,25980377,40,10 +3111603340,44,331545755,90,10 +2326722141,90,25980377,39,10 +29223617,95,2337727838,90,10 +2326722141,90,3111603340,53,10 +214851100,52,395736790,95,10 +2326722141,90,3330358736,39,10 +29223617,95,3111603340,54,10 +29223617,95,70634828,50,10 +3111603340,44,2326722141,90,10 +2326722141,90,70634828,50,10 +3330358736,43,3111603340,54,10 +3111603340,53,25980377,39,10 +214851100,50,25980377,38,10 +2326722141,90,25980377,43,10 +3111603340,50,3330358736,38,10 +70634828,50,3330358736,38,10 +3330358736,42,3111603340,55,10 +70634828,50,3330358736,39,10 +70634828,48,331545755,90,10 +3111603340,45,70634828,50,10 +214851100,48,25980377,38,10 +214851100,48,2337727838,90,10 +214851100,46,2326722141,90,10 +3111603340,50,3330358736,40,10 +70634828,48,2337727838,90,10 +3330358736,42,2326722141,90,10 +3111603340,54,25980377,40,10 +25980377,42,3111603340,55,10 +70634828,52,3330358736,43,10 +517675473,92,340093034,95,10 +70634828,52,25980377,40,10 +70634828,51,3330358736,43,10 +3330358736,41,2326722141,90,10 +517675473,92,395736790,95,10 +340093034,95,70634828,50,10 +70634828,46,2337727838,90,10 +340093034,95,3111603340,54,10 +331545755,90,3330358736,43,10 +331545755,90,70634828,50,10 +3330358736,38,70634828,51,10 +214851100,45,3330358736,39,10 +214851100,45,3330358736,38,10 +25980377,42,214851100,55,10 +25980377,42,2326722141,90,10 +70634828,52,25980377,43,10 +70634828,52,25980377,39,10 +70634828,51,3330358736,40,10 +214851100,44,331545755,90,10 +70634828,45,331545755,90,10 +214851100,44,25980377,38,10 +70634828,51,3330358736,39,10 +3111603340,52,29223617,95,10 +25980377,42,3111603340,52,10 +25980377,40,3111603340,50,10 +25980377,41,3111603340,52,10 +3330358736,41,3111603340,55,10 +3111603340,48,331545755,90,10 +214851100,45,25980377,38,10 +25980377,41,25980377,40,10 +3111603340,49,3111603340,53,10 +395736790,95,70634828,50,10 +331545755,90,25980377,39,9 +3111603340,48,2337727838,90,9 +395736790,95,340093034,95,9 +3111603340,53,25980377,40,9 +3330358736,42,3111603340,52,9 +25980377,41,3111603340,53,9 +3111603340,45,3111603340,53,9 +3111603340,53,3330358736,40,9 +70634828,50,3330358736,40,9 +395736790,95,3111603340,50,9 +3330358736,42,70634828,50,9 +3330358736,42,331545755,90,9 +395736790,95,70634828,51,9 +3111603340,53,3330358736,38,9 +2349705416,94,395736790,95,9 +3111603340,53,25980377,38,9 +3111603340,52,70634828,50,9 +214851100,55,25980377,40,9 +2326722141,90,3111603340,50,9 +331545755,90,3111603340,54,9 +3111603340,52,25980377,38,9 +29223617,95,3111603340,50,9 +70634828,49,3330358736,38,9 +70634828,49,331545755,90,9 +2326722141,90,3111603340,54,9 +214851100,49,3111603340,53,9 +2326722141,90,3330358736,40,9 +70634828,52,25980377,38,9 +70634828,49,3111603340,53,9 +70634828,50,25980377,39,9 +331545755,90,3330358736,39,9 +29223617,95,70634828,51,9 +214851100,55,3111603340,53,9 +214851100,55,3111603340,54,9 +3111603340,48,2326722141,90,9 +70634828,50,25980377,40,9 +331545755,90,3330358736,40,9 +70634828,50,25980377,43,9 +214851100,52,70634828,50,9 +3330358736,42,70634828,55,9 +25980377,39,303926772,99,9 +331545755,90,3111603340,50,9 +3111603340,54,25980377,38,9 +3330358736,40,3111603340,50,9 +25980377,42,2337727838,90,9 +214851100,53,29223617,95,9 +70634828,45,2337727838,90,9 +471121089,93,340093034,95,9 +3111603340,55,29223617,95,9 +2337727838,90,3111603340,50,9 +2337727838,90,3111603340,54,9 +70634828,45,2326722141,90,9 +3111603340,50,25980377,38,9 +3111603340,55,3111603340,53,9 +3330358736,41,2337727838,90,9 +70634828,51,25980377,43,9 +340093034,95,70634828,51,9 +3111603340,49,70634828,50,9 +395736790,95,214851100,52,9 +214851100,53,2326722141,90,9 +70634828,44,3111603340,53,9 +214851100,46,3111603340,54,9 +214851100,54,2326722141,90,9 +70634828,47,2326722141,90,9 +16210433,92,395736790,95,9 +395736790,95,3111603340,55,9 +214851100,54,2337727838,90,9 +25980377,42,3111603340,53,9 +3111603340,55,70634828,50,9 +340093034,95,3111603340,50,9 +70634828,51,25980377,40,9 +3111603340,54,3330358736,38,9 +340093034,95,3111603340,52,9 +340093034,95,214851100,52,9 +3111603340,46,25980377,40,9 +3111603340,54,25980377,43,9 +3330358736,39,70634828,50,9 +70634828,55,3111603340,53,9 +3111603340,50,29223617,95,9 +214851100,51,2326722141,90,9 +3330358736,42,214851100,52,9 +3330358736,42,2337727838,90,9 +2336923756,91,340093034,95,9 +2336923756,91,395736790,95,9 +25980377,39,214851100,53,9 +3111603340,54,3330358736,40,9 +25980377,42,214851100,52,9 +214851100,55,29223617,95,8 +214851100,52,3111603340,53,8 +395736790,95,214851100,55,8 +3330358736,43,70634828,50,8 +395736790,95,214851100,53,8 +214851100,52,3111603340,54,8 +214851100,50,70634828,50,8 +395736790,95,3111603340,52,8 +532328014,99,3111603340,53,8 +3330358736,43,3111603340,53,8 +214851100,53,331545755,90,8 +340093034,95,214851100,53,8 +340093034,95,70634828,54,8 +214851100,50,331545755,90,8 +340093034,95,214851100,55,8 +214851100,55,70634828,50,8 +214851100,52,3111603340,50,8 +395736790,95,70634828,54,8 +214851100,53,2337727838,90,8 +340093034,95,3111603340,55,8 +214851100,51,331545755,90,8 +214851100,51,2337727838,90,8 +3111603340,47,3111603340,53,8 +3111603340,52,395736790,95,8 +2349705416,94,25980377,43,8 +3111603340,49,29223617,95,8 +3111603340,49,3111603340,52,8 +3111603340,49,3111603340,54,8 +3111603340,49,3111603340,55,8 +16210433,92,340093034,95,8 +70634828,51,29223617,95,8 +3111603340,50,25980377,40,8 +3111603340,51,2326722141,90,8 +3111603340,51,331545755,90,8 +3111603340,52,3111603340,53,8 +70634828,49,25980377,38,8 +70634828,49,2337727838,90,8 +214851100,49,70634828,50,8 +3111603340,53,29223617,95,8 +70634828,48,70634828,51,8 +3111603340,53,395736790,95,8 +70634828,48,3111603340,52,8 +3111603340,54,2326722141,90,8 +70634828,47,331545755,90,8 +3111603340,55,3111603340,54,8 +70634828,47,2337727838,90,8 +3111603340,55,331545755,90,8 +3191869223,91,25980377,39,8 +70634828,46,395736790,95,8 +2349705416,94,3330358736,43,8 +70634828,46,3111603340,54,8 +70634828,46,3111603340,53,8 +3111603340,49,214851100,55,8 +25980377,38,3111603340,53,8 +25980377,39,3111603340,54,8 +25980377,42,3111603340,50,8 +29223617,95,395736790,95,8 +29223617,95,70634828,54,8 +3111603340,44,2337727838,90,8 +3111603340,44,3111603340,53,8 +3111603340,45,3111603340,52,8 +3111603340,45,3111603340,55,8 +3111603340,46,3111603340,54,8 +70634828,54,331545755,90,8 +3111603340,47,3111603340,54,8 +25980377,43,3111603340,53,8 +3111603340,47,70634828,51,8 +70634828,53,331545755,90,8 +70634828,53,29223617,95,8 +70634828,51,3330358736,38,8 +70634828,53,25980377,38,8 +25980377,41,70634828,52,8 +70634828,52,395736790,95,8 +70634828,52,331545755,90,8 +70634828,52,3111603340,53,8 +25980377,41,331545755,90,8 +25980377,41,3111603340,55,8 +25980377,41,2326722141,90,8 +25980377,40,70634828,50,8 +25980377,40,303926772,99,8 +25980377,39,70634828,53,8 +25980377,39,70634828,50,8 +3191869223,91,25980377,43,8 +2349705416,94,25980377,39,8 +3330358736,41,70634828,52,8 +3330358736,38,70634828,50,8 +3330358736,41,29223617,95,8 +3330358736,42,3111603340,53,8 +331545755,90,340093034,95,8 +331545755,90,70634828,51,8 +214851100,46,3111603340,52,8 +2336923756,91,25980377,43,8 +70634828,44,70634828,50,8 +3330358736,38,3111603340,53,8 +2336923756,91,3330358736,43,8 +214851100,44,3111603340,50,8 +3330358736,39,214851100,53,8 +2336923756,91,25980377,39,8 +3330358736,39,303926772,99,8 +214851100,46,29223617,95,8 +3330358736,40,3111603340,53,8 +3330358736,41,331545755,90,8 +3330358736,42,214851100,55,8 +214851100,45,3330358736,40,8 +2326722141,90,70634828,51,8 +3330358736,41,214851100,55,8 +331545755,90,3330358736,38,8 +70634828,45,3111603340,53,8 +70634828,45,3111603340,54,8 +3191869223,91,3330358736,43,8 +331545755,90,25980377,43,8 +2337727838,90,70634828,51,8 +214851100,47,70634828,50,8 +3191869223,91,340093034,95,8 +214851100,49,395736790,95,8 +2326722141,90,3330358736,38,8 +517675473,92,3330358736,43,7 +25980377,43,214851100,54,7 +2336923756,91,3330358736,38,7 +29223617,95,214851100,54,7 +25980377,43,303926772,99,7 +471121089,93,395736790,95,7 +25980377,42,70634828,51,7 +25980377,41,395736790,95,7 +340093034,95,214851100,50,7 +517675473,92,25980377,39,7 +25980377,42,70634828,50,7 +517675473,92,25980377,43,7 +25980377,41,70634828,51,7 +340093034,95,214851100,51,7 +3330358736,43,70634828,51,7 +3330358736,43,70634828,54,7 +25980377,43,70634828,54,7 +532328014,99,303926772,99,7 +532328014,99,3111603340,50,7 +29223617,95,214851100,52,7 +29223617,95,214851100,51,7 +29223617,95,214851100,50,7 +2326722141,90,25980377,38,7 +303926772,99,3111603340,53,7 +214851100,55,331545755,90,7 +2326722141,90,214851100,50,7 +3111603340,44,70634828,50,7 +3111603340,45,214851100,52,7 +3111603340,45,214851100,55,7 +3111603340,45,3111603340,50,7 +3330358736,42,70634828,51,7 +3111603340,45,70634828,51,7 +3111603340,46,331545755,90,7 +3111603340,46,395736790,95,7 +3111603340,47,214851100,51,7 +3111603340,47,3111603340,52,7 +3330358736,42,3111603340,50,7 +532328014,99,70634828,50,7 +532328014,99,3111603340,54,7 +25980377,43,70634828,50,7 +2336923756,91,3330358736,39,7 +3191869223,91,3330358736,38,7 +395736790,95,70634828,55,7 +3111603340,55,395736790,95,7 +3330358736,38,3111603340,54,7 +3111603340,52,70634828,51,7 +3330358736,38,3111603340,50,7 +3330358736,38,214851100,51,7 +2349179532,93,395736790,95,7 +3111603340,54,2337727838,90,7 +3111603340,54,331545755,90,7 +3111603340,55,2326722141,90,7 +3111603340,55,2337727838,90,7 +3111603340,55,3111603340,50,7 +2349705416,94,340093034,95,7 +3111603340,52,3111603340,54,7 +331545755,90,25980377,40,7 +395736790,95,214851100,54,7 +331545755,90,25980377,38,7 +2349705416,94,3330358736,39,7 +395736790,95,214851100,51,7 +395736790,95,214851100,50,7 +331545755,90,214851100,50,7 +340093034,95,70634828,53,7 +2349705416,94,3330358736,38,7 +3191869223,91,3330358736,39,7 +3111603340,52,331545755,90,7 +3111603340,52,3111603340,50,7 +2337727838,90,214851100,50,7 +25980377,38,70634828,51,7 +3330358736,41,70634828,55,7 +25980377,41,214851100,55,7 +2337727838,90,25980377,38,7 +25980377,40,3111603340,53,7 +340093034,95,214851100,54,7 +395736790,95,70634828,53,7 +2337727838,90,25980377,40,7 +214851100,55,25980377,38,7 +3330358736,41,70634828,51,7 +3111603340,48,3111603340,53,7 +25980377,38,70634828,50,7 +3111603340,52,2326722141,90,7 +25980377,38,303926772,99,7 +3111603340,48,395736790,95,7 +3111603340,48,70634828,50,7 +3111603340,49,214851100,52,7 +3111603340,49,214851100,53,7 +3330358736,41,395736790,95,7 +3111603340,49,395736790,95,7 +3330358736,40,3111603340,54,7 +3330358736,40,303926772,99,7 +3111603340,51,2337727838,90,7 +2326722141,90,25980377,40,7 +29223617,95,214851100,53,7 +214851100,53,3111603340,50,7 +16116663,92,25980377,39,7 +214851100,44,70634828,50,7 +70634828,55,3111603340,50,7 +70634828,55,29223617,95,7 +16116663,92,3330358736,43,7 +214851100,51,70634828,50,7 +70634828,55,2326722141,90,7 +70634828,50,2326722141,90,7 +214851100,53,70634828,50,7 +70634828,44,3111603340,50,7 +70634828,44,70634828,51,7 +70634828,49,2326722141,90,7 +70634828,45,70634828,50,7 +70634828,44,3111603340,54,7 +16116663,92,25980377,43,7 +70634828,54,2337727838,90,7 +214851100,47,3111603340,53,7 +70634828,54,2326722141,90,7 +214851100,50,29223617,95,7 +70634828,46,29223617,95,7 +214851100,50,2337727838,90,7 +214851100,50,2326722141,90,7 +214851100,55,2326722141,90,7 +214851100,49,70634828,51,7 +70634828,53,3111603340,53,7 +70634828,53,2337727838,90,7 +70634828,52,2326722141,90,7 +70634828,53,2326722141,90,7 +214851100,49,214851100,53,7 +214851100,49,29223617,95,7 +214851100,49,3111603340,50,7 +214851100,47,3111603340,54,7 +70634828,52,3111603340,54,7 +214851100,46,70634828,54,7 +214851100,47,214851100,55,7 +214851100,52,331545755,90,7 +214851100,52,70634828,51,7 +214851100,46,395736790,95,7 +214851100,46,70634828,50,7 +214851100,46,214851100,52,7 +214851100,52,2337727838,90,7 +214851100,52,2326722141,90,7 +16210433,92,3330358736,43,7 +214851100,45,25980377,40,7 +214851100,46,214851100,54,7 +70634828,51,25980377,38,7 +16210433,92,25980377,43,7 +70634828,55,70634828,50,7 +16210433,92,25980377,39,7 +70634828,55,331545755,90,7 +214851100,46,214851100,55,7 +728969035,93,340093034,95,7 +214851100,46,3111603340,53,7 +70634828,50,331545755,90,7 +70634828,48,3111603340,53,6 +2326722141,90,214851100,51,6 +2326722141,90,214851100,53,6 +70634828,48,3111603340,50,6 +3111603340,51,29223617,95,6 +70634828,48,214851100,52,6 +3111603340,54,70634828,50,6 +214851100,52,70634828,54,6 +3111603340,55,214851100,50,6 +214851100,49,70634828,53,6 +214851100,50,3111603340,50,6 +70634828,47,70634828,51,6 +214851100,49,3111603340,55,6 +214851100,49,3111603340,54,6 +16210433,92,3330358736,39,6 +3111603340,49,340093034,95,6 +70634828,48,395736790,95,6 +3111603340,49,70634828,51,6 +340093034,95,3111603340,51,6 +70634828,50,395736790,95,6 +340093034,95,70634828,55,6 +70634828,50,25980377,38,6 +70634828,50,2337727838,90,6 +3111603340,50,331545755,90,6 +70634828,51,2337727838,90,6 +3111603340,49,70634828,55,6 +214851100,49,3111603340,52,6 +214851100,51,3111603340,50,6 +214851100,51,29223617,95,6 +70634828,49,70634828,50,6 +3330358736,43,70634828,53,6 +3111603340,49,70634828,53,6 +3111603340,52,340093034,95,6 +70634828,44,3111603340,52,6 +70634828,49,214851100,53,6 +214851100,52,340093034,95,6 +70634828,44,3111603340,55,6 +3111603340,53,2337727838,90,6 +3111603340,51,3111603340,53,6 +395736790,95,3111603340,51,6 +70634828,48,3111603340,55,6 +3111603340,51,70634828,50,6 +214851100,55,2337727838,90,6 +214851100,49,214851100,55,6 +2349179532,93,3330358736,43,6 +214851100,44,3111603340,55,6 +2349179532,93,25980377,43,6 +2349179532,93,25980377,39,6 +2336923756,91,3111603340,54,6 +331545755,90,70634828,54,6 +2336923756,91,3330358736,40,6 +214851100,47,3111603340,55,6 +3330358736,38,303926772,99,6 +3330358736,38,3111603340,51,6 +214851100,45,2326722141,90,6 +214851100,45,2337727838,90,6 +3330358736,39,3111603340,54,6 +2337727838,90,214851100,51,6 +2337727838,90,214851100,52,6 +2337727838,90,214851100,53,6 +3330358736,39,70634828,51,6 +214851100,47,3111603340,50,6 +3330358736,39,70634828,53,6 +214851100,47,29223617,95,6 +3330358736,40,214851100,50,6 +3330358736,40,70634828,51,6 +214851100,45,331545755,90,6 +70634828,45,214851100,55,6 +70634828,45,214851100,52,6 +214851100,46,70634828,51,6 +3330358736,41,3111603340,53,6 +214851100,46,340093034,95,6 +2337727838,90,70634828,54,6 +214851100,46,3111603340,55,6 +2336923756,91,25980377,38,6 +2349179532,93,340093034,95,6 +70634828,47,29223617,95,6 +2336923756,91,214851100,55,6 +3111603340,55,70634828,51,6 +2326722141,90,70634828,54,6 +3330358736,43,3111603340,50,6 +3191869223,91,214851100,55,6 +3191869223,91,25980377,38,6 +16210433,92,3330358736,38,6 +70634828,46,70634828,51,6 +2327605629,94,25980377,39,6 +2327605629,94,25980377,43,6 +2349705416,94,3330358736,40,6 +2349705416,94,3111603340,54,6 +70634828,46,3111603340,50,6 +2327605629,94,3330358736,39,6 +70634828,46,214851100,53,6 +2327605629,94,3330358736,43,6 +2349705416,94,25980377,38,6 +3191869223,91,3111603340,54,6 +3330358736,42,70634828,52,6 +70634828,46,214851100,50,6 +3191869223,91,3330358736,40,6 +331545755,90,214851100,51,6 +214851100,48,3111603340,55,6 +331545755,90,214851100,53,6 +70634828,45,395736790,95,6 +214851100,48,3111603340,50,6 +214851100,48,29223617,95,6 +3330358736,42,29223617,95,6 +214851100,48,214851100,52,6 +214851100,47,70634828,55,6 +3330358736,43,214851100,54,6 +70634828,50,29223617,95,6 +25980377,42,70634828,52,6 +16116663,92,3330358736,38,6 +70634828,51,395736790,95,6 +214851100,54,3111603340,54,6 +517675473,92,214851100,55,6 +25980377,39,70634828,54,6 +3111603340,45,70634828,54,6 +16116663,92,25980377,38,6 +25980377,39,70634828,51,6 +3111603340,47,214851100,55,6 +25980377,39,532328014,99,6 +3111603340,48,29223617,95,6 +25980377,42,70634828,55,6 +70634828,55,70634828,51,6 +3111603340,45,3111603340,54,6 +16116663,92,3111603340,54,6 +3111603340,45,29223617,95,6 +3111603340,48,3111603340,52,6 +25980377,39,3111603340,50,6 +517675473,92,25980377,38,6 +3111603340,48,3111603340,54,6 +3111603340,48,214851100,55,6 +3111603340,46,214851100,54,6 +3111603340,46,2326722141,90,6 +70634828,55,2337727838,90,6 +70634828,52,70634828,50,6 +70634828,52,340093034,95,6 +3111603340,47,214851100,50,6 +25980377,41,3111603340,54,6 +25980377,42,29223617,95,6 +3111603340,47,214851100,52,6 +70634828,52,2337727838,90,6 +25980377,42,3111603340,54,6 +25980377,41,29223617,95,6 +3111603340,46,2337727838,90,6 +532328014,99,70634828,51,6 +25980377,41,2337727838,90,6 +3111603340,46,29223617,95,6 +70634828,53,395736790,95,6 +3111603340,48,214851100,51,6 +25980377,42,395736790,95,6 +70634828,55,3111603340,54,6 +3111603340,48,214851100,52,6 +25980377,43,214851100,53,6 +214851100,55,70634828,51,6 +3111603340,44,3111603340,50,6 +70634828,51,331545755,90,6 +25980377,43,70634828,53,6 +303926772,99,70634828,51,6 +25980377,38,3111603340,50,6 +517675473,92,3330358736,38,6 +303926772,99,3111603340,54,6 +517675473,92,3330358736,39,6 +29223617,95,70634828,53,6 +3111603340,48,70634828,51,6 +70634828,54,3111603340,53,6 +214851100,55,3111603340,50,6 +29223617,95,3111603340,55,6 +29223617,95,3111603340,52,6 +16210433,92,214851100,55,6 +214851100,53,395736790,95,6 +16210433,92,25980377,38,6 +214851100,53,3111603340,54,6 +29223617,95,3111603340,51,6 +3111603340,49,3111603340,50,6 +29223617,95,214851100,55,6 +471121089,93,25980377,39,6 +25980377,41,70634828,50,6 +471121089,93,25980377,43,6 +3111603340,47,395736790,95,6 +471121089,93,3330358736,38,6 +16116663,92,3330358736,39,6 +3111603340,47,3111603340,51,6 +3111603340,47,29223617,95,6 +16116663,92,395736790,95,6 +3111603340,47,70634828,50,6 +70634828,54,3111603340,54,6 +25980377,38,3111603340,54,6 +25980377,43,3111603340,50,6 +214851100,54,29223617,95,6 +471121089,93,3330358736,43,6 +70634828,44,214851100,52,6 +3111603340,46,70634828,50,5 +70634828,55,214851100,50,5 +214851100,44,214851100,50,5 +3111603340,47,3111603340,50,5 +70634828,54,70634828,50,5 +331545755,90,214851100,52,5 +214851100,44,3111603340,52,5 +331545755,90,3111603340,55,5 +70634828,45,3111603340,55,5 +70634828,45,3111603340,52,5 +3111603340,47,3111603340,55,5 +331545755,90,3111603340,52,5 +214851100,44,214851100,55,5 +331545755,90,214851100,54,5 +331545755,90,3111603340,51,5 +70634828,54,395736790,95,5 +3111603340,45,70634828,55,5 +2349179532,93,3330358736,39,5 +2349179532,93,3330358736,38,5 +3111603340,44,70634828,51,5 +3330358736,40,214851100,53,5 +214851100,45,3111603340,54,5 +728969035,93,3330358736,38,5 +3330358736,41,214851100,51,5 +728969035,93,3330358736,43,5 +214851100,45,395736790,95,5 +3111603340,44,3111603340,54,5 +70634828,45,214851100,54,5 +70634828,45,214851100,53,5 +3330358736,41,3111603340,50,5 +3111603340,44,214851100,50,5 +303926772,99,70634828,50,5 +3330358736,41,3111603340,54,5 +29223617,95,70634828,55,5 +214851100,46,214851100,51,5 +29223617,95,70634828,52,5 +3111603340,45,214851100,51,5 +3111603340,45,214851100,53,5 +3111603340,45,214851100,54,5 +70634828,55,3111603340,52,5 +2349179532,93,3111603340,54,5 +214851100,44,3111603340,54,5 +3111603340,46,340093034,95,5 +70634828,45,3111603340,50,5 +70634828,55,214851100,53,5 +2349179532,93,214851100,55,5 +331545755,90,70634828,53,5 +3330358736,38,214851100,50,5 +728969035,93,25980377,43,5 +70634828,45,70634828,51,5 +3330358736,39,214851100,50,5 +3330358736,39,3111603340,50,5 +3111603340,45,70634828,52,5 +70634828,55,395736790,95,5 +3330358736,39,532328014,99,5 +728969035,93,25980377,39,5 +70634828,54,3111603340,50,5 +16210433,92,3111603340,54,5 +70634828,45,70634828,52,5 +70634828,49,3111603340,50,5 +3111603340,52,214851100,51,5 +3111603340,52,214851100,54,5 +3111603340,52,2337727838,90,5 +25980377,38,70634828,53,5 +70634828,50,214851100,50,5 +70634828,49,70634828,55,5 +25980377,39,214851100,54,5 +70634828,49,340093034,95,5 +70634828,49,29223617,95,5 +3111603340,51,70634828,51,5 +3111603340,48,3111603340,51,5 +3111603340,52,70634828,54,5 +3111603340,48,3111603340,50,5 +3111603340,53,2326722141,90,5 +70634828,48,70634828,52,5 +3111603340,53,331545755,90,5 +70634828,48,70634828,50,5 +70634828,48,3111603340,54,5 +3111603340,52,214851100,50,5 +16116663,92,3330358736,40,5 +16116663,92,214851100,55,5 +25980377,38,214851100,53,5 +16210433,92,3330358736,40,5 +70634828,51,3111603340,50,5 +3111603340,49,214851100,54,5 +16210433,92,214851100,52,5 +3111603340,49,70634828,52,5 +3111603340,49,214851100,51,5 +3111603340,49,70634828,54,5 +25980377,38,214851100,51,5 +3111603340,50,2326722141,90,5 +16116663,92,340093034,95,5 +3111603340,50,2337727838,90,5 +3111603340,48,340093034,95,5 +70634828,51,2326722141,90,5 +3111603340,50,3111603340,54,5 +25980377,38,3111603340,51,5 +3111603340,50,395736790,95,5 +3111603340,51,3111603340,54,5 +214851100,46,3111603340,50,5 +25980377,40,214851100,50,5 +25980377,40,214851100,53,5 +70634828,45,70634828,53,5 +70634828,46,214851100,55,5 +70634828,53,70634828,50,5 +3191869223,91,25980377,40,5 +70634828,46,70634828,50,5 +16210433,92,3111603340,53,5 +70634828,46,340093034,95,5 +70634828,46,3111603340,52,5 +2349705416,94,3111603340,53,5 +70634828,54,214851100,50,5 +70634828,46,214851100,54,5 +3191869223,91,214851100,52,5 +2349705416,94,25980377,40,5 +25980377,43,532328014,99,5 +25980377,43,70634828,51,5 +3191869223,91,3111603340,52,5 +3191869223,91,3111603340,53,5 +3191869223,91,3111603340,55,5 +70634828,54,29223617,95,5 +70634828,45,70634828,54,5 +70634828,53,3111603340,54,5 +25980377,42,214851100,53,5 +25980377,40,3111603340,54,5 +3111603340,55,214851100,54,5 +3111603340,54,214851100,52,5 +3111603340,48,214851100,54,5 +70634828,48,29223617,95,5 +70634828,48,214851100,55,5 +70634828,48,214851100,50,5 +25980377,40,70634828,51,5 +3111603340,48,214851100,50,5 +3111603340,55,214851100,53,5 +25980377,41,3111603340,50,5 +70634828,46,70634828,54,5 +70634828,47,395736790,95,5 +70634828,47,340093034,95,5 +70634828,47,3111603340,54,5 +70634828,52,3111603340,50,5 +70634828,47,3111603340,53,5 +25980377,41,340093034,95,5 +70634828,47,3111603340,52,5 +70634828,52,70634828,51,5 +3330358736,41,340093034,95,5 +471121089,93,3330358736,39,5 +471121089,93,25980377,38,5 +214851100,54,3111603340,53,5 +340093034,95,70634828,52,5 +532328014,99,214851100,53,5 +70634828,44,29223617,95,5 +214851100,54,3111603340,50,5 +214851100,51,395736790,95,5 +214851100,51,3111603340,54,5 +214851100,49,214851100,52,5 +214851100,54,3111603340,52,5 +214851100,53,3111603340,52,5 +70634828,44,214851100,53,5 +214851100,51,3111603340,53,5 +532328014,99,70634828,54,5 +3330358736,42,3111603340,54,5 +214851100,53,3111603340,53,5 +395736790,95,70634828,52,5 +517675473,92,214851100,52,5 +214851100,48,3111603340,54,5 +214851100,48,340093034,95,5 +532328014,99,214851100,50,5 +214851100,47,340093034,95,5 +2337727838,90,214851100,54,5 +2336923756,91,214851100,52,5 +214851100,47,70634828,53,5 +2336923756,91,25980377,40,5 +3330358736,41,70634828,50,5 +214851100,52,214851100,54,5 +3330358736,43,214851100,51,5 +214851100,47,70634828,51,5 +3330358736,43,303926772,99,5 +70634828,44,214851100,55,5 +2336923756,91,3111603340,52,5 +214851100,48,214851100,55,5 +517675473,92,3111603340,53,5 +2336923756,91,3111603340,53,5 +2336923756,91,3111603340,55,5 +517675473,92,3111603340,54,5 +2326722141,90,70634828,53,5 +517675473,92,3330358736,40,5 +3330358736,43,214851100,50,5 +214851100,48,70634828,55,5 +214851100,47,3111603340,51,5 +214851100,48,3111603340,53,5 +214851100,49,340093034,95,5 +2337727838,90,3111603340,51,5 +214851100,50,3111603340,54,5 +471121089,93,3330358736,40,5 +214851100,46,70634828,55,5 +70634828,44,70634828,54,5 +214851100,50,3111603340,53,5 +214851100,48,70634828,50,5 +214851100,48,70634828,51,5 +2326722141,90,214851100,52,5 +70634828,44,214851100,51,5 +214851100,46,70634828,52,5 +2326722141,90,214851100,54,5 +70634828,45,214851100,50,5 +2326722141,90,214851100,55,5 +2337727838,90,70634828,53,5 +214851100,55,214851100,52,5 +214851100,55,214851100,53,5 +214851100,55,214851100,54,5 +214851100,55,395736790,95,5 +2337727838,90,3111603340,55,5 +214851100,53,70634828,51,5 +214851100,55,70634828,53,5 +214851100,48,395736790,95,5 +214851100,47,214851100,54,5 +2326722141,90,3111603340,52,5 +214851100,47,214851100,53,5 +2327605629,94,3330358736,38,5 +2326722141,90,3111603340,51,5 +2327605629,94,3330358736,40,5 +214851100,55,70634828,54,5 +3330358736,43,214851100,53,5 +214851100,47,214851100,51,5 +214851100,54,395736790,95,5 +70634828,44,214851100,50,5 +214851100,47,214851100,52,5 +214851100,53,214851100,52,4 +214851100,52,3111603340,51,4 +16210433,92,3111603340,52,4 +25980377,38,214851100,54,4 +16210433,92,25980377,40,4 +214851100,52,70634828,53,4 +214851100,53,3111603340,55,4 +3111603340,48,70634828,55,4 +16210433,92,214851100,54,4 +3111603340,49,214851100,50,4 +214851100,53,214851100,55,4 +70634828,44,214851100,54,4 +70634828,51,3111603340,53,4 +16210433,92,3111603340,55,4 +214851100,53,340093034,95,4 +16210433,92,331545755,90,4 +214851100,46,3111603340,51,4 +214851100,52,214851100,55,4 +70634828,49,3111603340,55,4 +214851100,51,214851100,52,4 +214851100,50,70634828,54,4 +70634828,49,214851100,55,4 +3111603340,52,70634828,55,4 +3111603340,53,214851100,50,4 +214851100,50,395736790,95,4 +214851100,50,3111603340,55,4 +70634828,48,70634828,54,4 +70634828,48,70634828,53,4 +3111603340,53,3111603340,50,4 +3111603340,53,3111603340,52,4 +3111603340,53,3111603340,54,4 +70634828,48,340093034,95,4 +214851100,50,3111603340,52,4 +3330358736,43,532328014,99,4 +70634828,48,3111603340,51,4 +214851100,50,214851100,55,4 +70634828,49,3111603340,54,4 +70634828,49,395736790,95,4 +3111603340,50,214851100,52,4 +3111603340,52,3111603340,51,4 +16210433,92,70634828,55,4 +214851100,52,214851100,51,4 +214851100,52,214851100,50,4 +3111603340,50,3111603340,52,4 +3111603340,50,3111603340,53,4 +70634828,51,214851100,53,4 +70634828,51,214851100,50,4 +3111603340,50,70634828,50,4 +3111603340,51,214851100,55,4 +70634828,50,3111603340,54,4 +3111603340,51,3111603340,52,4 +471121089,93,214851100,55,4 +214851100,51,70634828,51,4 +3111603340,51,395736790,95,4 +3111603340,52,214851100,52,4 +214851100,51,3111603340,52,4 +70634828,44,3111603340,51,4 +3111603340,51,3111603340,55,4 +3111603340,47,70634828,54,4 +471121089,93,25980377,40,4 +591350440,91,214851100,55,4 +3111603340,45,340093034,95,4 +3111603340,45,395736790,95,4 +591350440,91,3330358736,38,4 +3111603340,45,70634828,53,4 +3111603340,46,214851100,50,4 +3111603340,46,214851100,51,4 +591350440,91,25980377,43,4 +591350440,91,25980377,39,4 +3111603340,46,3111603340,52,4 +591350440,91,3330358736,40,4 +532328014,99,70634828,53,4 +70634828,55,214851100,54,4 +532328014,99,3111603340,51,4 +70634828,55,214851100,52,4 +3111603340,46,70634828,55,4 +532328014,99,214851100,54,4 +70634828,54,70634828,55,4 +517675473,92,70634828,55,4 +591350440,91,3330358736,39,4 +728969035,93,214851100,52,4 +471121089,93,3111603340,53,4 +728969035,93,70634828,55,4 +214851100,55,3111603340,52,4 +214851100,55,214851100,51,4 +303926772,99,214851100,50,4 +303926772,99,3111603340,50,4 +214851100,55,214851100,50,4 +214851100,54,70634828,54,4 +303926772,99,70634828,54,4 +3111603340,44,214851100,55,4 +214851100,54,70634828,51,4 +728969035,93,214851100,55,4 +3111603340,44,3111603340,55,4 +214851100,54,70634828,50,4 +728969035,93,3330358736,40,4 +728969035,93,3330358736,39,4 +3111603340,44,70634828,55,4 +728969035,93,3111603340,55,4 +728969035,93,3111603340,52,4 +591350440,91,3330358736,43,4 +214851100,54,214851100,55,4 +70634828,54,3111603340,52,4 +214851100,54,214851100,52,4 +70634828,51,70634828,50,4 +25980377,41,70634828,55,4 +25980377,41,70634828,54,4 +70634828,52,70634828,54,4 +70634828,52,214851100,54,4 +25980377,41,214851100,54,4 +70634828,51,70634828,55,4 +3111603340,54,29223617,95,4 +25980377,40,3111603340,51,4 +70634828,51,340093034,95,4 +517675473,92,331545755,90,4 +16116663,92,214851100,54,4 +16116663,92,25980377,40,4 +16116663,92,3111603340,52,4 +16116663,92,3111603340,53,4 +16116663,92,3111603340,55,4 +25980377,39,214851100,50,4 +471121089,93,3111603340,54,4 +25980377,38,532328014,99,4 +25980377,42,214851100,50,4 +70634828,53,214851100,52,4 +70634828,53,214851100,55,4 +70634828,53,3111603340,50,4 +517675473,92,3111603340,55,4 +517675473,92,3111603340,52,4 +3111603340,47,340093034,95,4 +70634828,54,214851100,55,4 +70634828,54,214851100,53,4 +214851100,54,214851100,50,4 +25980377,43,3111603340,51,4 +70634828,54,214851100,52,4 +517675473,92,25980377,40,4 +214851100,53,70634828,54,4 +25980377,43,214851100,51,4 +25980377,43,214851100,50,4 +517675473,92,214851100,54,4 +70634828,53,70634828,51,4 +70634828,53,340093034,95,4 +70634828,53,3111603340,52,4 +25980377,42,3111603340,51,4 +70634828,48,214851100,53,4 +214851100,52,3111603340,52,4 +214851100,48,3111603340,52,4 +2349705416,94,214851100,54,4 +3330358736,38,532328014,99,4 +214851100,48,70634828,53,4 +3111603340,55,70634828,53,4 +214851100,45,214851100,52,4 +3330358736,38,70634828,53,4 +2326722141,90,70634828,52,4 +3330358736,42,214851100,51,4 +2349705416,94,214851100,55,4 +3330358736,39,214851100,51,4 +214851100,45,214851100,55,4 +2349179532,93,3330358736,40,4 +3330358736,39,214851100,54,4 +3111603340,55,340093034,95,4 +214851100,44,70634828,55,4 +3330358736,42,214851100,54,4 +2336923756,91,70634828,52,4 +214851100,47,70634828,54,4 +214851100,44,3111603340,53,4 +3330358736,42,214851100,50,4 +2336923756,91,70634828,55,4 +2337727838,90,214851100,55,4 +70634828,47,3111603340,50,4 +3330358736,39,70634828,54,4 +3330358736,40,214851100,51,4 +3111603340,55,3111603340,51,4 +2349179532,93,70634828,52,4 +214851100,45,214851100,50,4 +70634828,46,214851100,52,4 +214851100,49,214851100,54,4 +214851100,49,214851100,50,4 +2327605629,94,25980377,38,4 +2349179532,93,3111603340,52,4 +2349179532,93,25980377,38,4 +2327605629,94,25980377,40,4 +70634828,45,29223617,95,4 +214851100,44,70634828,51,4 +2349179532,93,214851100,52,4 +331545755,90,70634828,52,4 +2336923756,91,331545755,90,4 +214851100,47,395736790,95,4 +331545755,90,70634828,55,4 +70634828,46,3111603340,55,4 +2349705416,94,331545755,90,4 +3111603340,55,70634828,54,4 +2349179532,93,3111603340,53,4 +3330358736,38,214851100,53,4 +3191869223,91,214851100,54,4 +70634828,46,3111603340,51,4 +2327605629,94,3111603340,53,4 +2326722141,90,70634828,55,4 +2327605629,94,3111603340,54,4 +214851100,47,3111603340,52,4 +214851100,44,70634828,54,4 +2349179532,93,3111603340,55,4 +2349179532,93,331545755,90,4 +214851100,48,70634828,54,4 +70634828,44,340093034,95,4 +2336923756,91,214851100,54,4 +214851100,45,70634828,50,4 +3111603340,55,214851100,52,4 +3330358736,42,340093034,95,4 +3111603340,55,214851100,51,4 +214851100,49,70634828,54,4 +214851100,45,3111603340,52,4 +3191869223,91,70634828,52,4 +3111603340,54,70634828,51,4 +3111603340,54,3111603340,50,4 +214851100,49,70634828,55,4 +214851100,45,70634828,53,4 +3111603340,54,395736790,95,4 +3330358736,42,3111603340,51,4 +214851100,46,70634828,53,4 +3330358736,41,3111603340,51,4 +3191869223,91,70634828,55,4 +70634828,44,70634828,55,4 +214851100,46,214851100,53,4 +214851100,50,214851100,52,4 +2337727838,90,70634828,55,4 +70634828,48,214851100,51,4 +331545755,90,214851100,55,4 +3111603340,54,3111603340,53,4 +3111603340,54,3111603340,52,4 +70634828,45,214851100,51,4 +214851100,48,214851100,53,4 +70634828,44,70634828,53,4 +2326722141,90,3111603340,55,4 +3191869223,91,331545755,90,4 +70634828,47,3111603340,55,4 +70634828,45,70634828,55,4 +214851100,44,214851100,53,4 +214851100,48,214851100,51,4 +70634828,46,214851100,51,4 +3330358736,43,3111603340,51,4 +3330358736,41,214851100,50,4 +214851100,48,214851100,50,4 +2337727838,90,3111603340,52,4 +3330358736,40,70634828,53,4 +25980377,42,214851100,51,3 +70634828,44,70634828,52,3 +214851100,47,70634828,52,3 +25980377,40,70634828,53,3 +25980377,40,532328014,99,3 +515770253,9,2326722141,90,3 +25980377,40,70634828,54,3 +25980377,41,70634828,53,3 +3111603340,48,214851100,53,3 +70634828,45,3111603340,51,3 +3111603340,47,70634828,53,3 +3111603340,47,70634828,52,3 +16116663,92,214851100,52,3 +2336923756,91,214851100,53,3 +1452048,9,395736790,95,3 +214851100,44,29223617,95,3 +214851100,53,70634828,55,3 +25980377,42,214851100,54,3 +214851100,48,3111603340,51,3 +25980377,41,214851100,53,3 +3111603340,47,70634828,55,3 +70634828,45,340093034,95,3 +70634828,52,70634828,55,3 +70634828,53,70634828,52,3 +70634828,53,70634828,54,3 +70634828,52,3111603340,52,3 +70634828,53,70634828,55,3 +25980377,41,3111603340,51,3 +517675473,92,214851100,53,3 +25980377,42,70634828,53,3 +70634828,52,214851100,55,3 +214851100,44,214851100,52,3 +70634828,52,214851100,53,3 +70634828,52,214851100,52,3 +25980377,42,70634828,54,3 +70634828,53,3111603340,55,3 +515770253,9,2336923756,91,3 +515770253,9,2327605629,94,3 +70634828,52,214851100,51,3 +214851100,44,214851100,51,3 +25980377,42,340093034,95,3 +70634828,53,214851100,50,3 +214851100,50,214851100,54,3 +3330358736,42,214851100,53,3 +728969035,93,331545755,90,3 +214851100,47,214851100,50,3 +214851100,55,340093034,95,3 +3330358736,41,214851100,54,3 +3111603340,44,340093034,95,3 +3111603340,44,395736790,95,3 +3330358736,41,214851100,53,3 +3111603340,45,214851100,50,3 +728969035,93,3111603340,54,3 +728969035,93,70634828,52,3 +728969035,93,3111603340,53,3 +3330358736,40,532328014,99,3 +214851100,45,3111603340,53,3 +728969035,93,25980377,40,3 +3330358736,40,3111603340,51,3 +728969035,93,25980377,38,3 +214851100,45,3111603340,50,3 +214851100,45,70634828,51,3 +3111603340,44,3111603340,51,3 +214851100,55,70634828,55,3 +303926772,99,3111603340,51,3 +3330358736,41,70634828,53,3 +29223617,95,340093034,95,3 +214851100,55,3111603340,51,3 +2337727838,90,70634828,52,3 +303926772,99,214851100,51,3 +303926772,99,214851100,53,3 +303926772,99,214851100,54,3 +3330358736,41,70634828,54,3 +214851100,54,70634828,52,3 +214851100,45,70634828,54,3 +591350440,91,70634828,55,3 +3111603340,44,214851100,51,3 +3111603340,44,214851100,52,3 +3111603340,44,214851100,53,3 +214851100,45,70634828,52,3 +3111603340,44,29223617,95,3 +3111603340,45,3111603340,51,3 +214851100,45,29223617,95,3 +70634828,54,214851100,54,3 +3330358736,38,214851100,54,3 +3111603340,46,70634828,51,3 +25980377,40,214851100,51,3 +3111603340,46,70634828,54,3 +2336923756,91,70634828,50,3 +3111603340,47,214851100,53,3 +3111603340,47,214851100,54,3 +532328014,99,214851100,51,3 +70634828,54,70634828,51,3 +214851100,45,214851100,51,3 +214851100,44,70634828,53,3 +517675473,92,70634828,53,3 +517675473,92,70634828,52,3 +517675473,92,70634828,50,3 +214851100,44,70634828,52,3 +214851100,44,395736790,95,3 +2349179532,93,25980377,40,3 +70634828,55,214851100,51,3 +3111603340,46,3111603340,53,3 +70634828,55,70634828,54,3 +214851100,54,3111603340,55,3 +70634828,55,70634828,53,3 +70634828,55,70634828,52,3 +3330358736,40,214851100,54,3 +70634828,55,340093034,95,3 +591350440,91,3111603340,55,3 +591350440,91,3111603340,54,3 +591350440,91,3111603340,52,3 +2336923756,91,70634828,53,3 +3111603340,46,3111603340,51,3 +3111603340,46,214851100,52,3 +3111603340,46,214851100,55,3 +591350440,91,25980377,40,3 +70634828,55,3111603340,55,3 +591350440,91,25980377,38,3 +70634828,55,3111603340,51,3 +3111603340,46,3111603340,50,3 +3111603340,46,70634828,53,3 +2349705416,94,70634828,52,3 +2327605629,94,331545755,90,3 +214851100,51,70634828,55,3 +3111603340,50,214851100,55,3 +70634828,46,70634828,53,3 +214851100,52,214851100,53,3 +2327605629,94,214851100,53,3 +3111603340,53,214851100,52,3 +3111603340,53,214851100,51,3 +214851100,49,70634828,52,3 +214851100,50,70634828,51,3 +2349705416,94,70634828,53,3 +70634828,51,214851100,54,3 +3191869223,91,214851100,53,3 +214851100,51,70634828,54,3 +3111603340,52,70634828,53,3 +70634828,51,214851100,52,3 +3111603340,55,70634828,55,3 +70634828,50,70634828,51,3 +70634828,49,214851100,52,3 +3111603340,50,214851100,50,3 +3111603340,48,70634828,53,3 +214851100,49,214851100,51,3 +2349705416,94,214851100,53,3 +16210433,92,214851100,53,3 +3111603340,54,70634828,54,3 +3330358736,42,70634828,54,3 +3111603340,49,3111603340,51,3 +2349705416,94,3111603340,52,3 +2349705416,94,3111603340,55,3 +3111603340,54,70634828,55,3 +2327605629,94,214851100,54,3 +214851100,53,214851100,50,3 +214851100,52,70634828,55,3 +16210433,92,70634828,50,3 +16210433,92,70634828,52,3 +16210433,92,70634828,53,3 +214851100,52,3111603340,55,3 +2349705416,94,70634828,50,3 +214851100,50,70634828,52,3 +3111603340,50,340093034,95,3 +70634828,49,214851100,54,3 +70634828,50,214851100,52,3 +70634828,47,214851100,51,3 +70634828,49,70634828,53,3 +70634828,49,70634828,54,3 +214851100,51,214851100,55,3 +70634828,50,214851100,53,3 +3111603340,51,340093034,95,3 +70634828,47,214851100,53,3 +70634828,47,3111603340,51,3 +3111603340,50,70634828,51,3 +214851100,51,340093034,95,3 +3111603340,51,70634828,52,3 +3111603340,51,70634828,54,3 +214851100,51,3111603340,55,3 +70634828,47,214851100,55,3 +3111603340,52,214851100,53,3 +3111603340,55,3111603340,52,3 +214851100,51,70634828,53,3 +70634828,47,214851100,50,3 +70634828,46,70634828,55,3 +3111603340,51,3111603340,50,3 +3111603340,51,214851100,50,3 +3111603340,55,214851100,55,3 +3111603340,51,214851100,52,3 +70634828,47,70634828,50,3 +214851100,50,70634828,55,3 +214851100,51,214851100,50,3 +70634828,49,3111603340,52,3 +3111603340,52,3111603340,55,3 +214851100,51,214851100,53,3 +214851100,49,3111603340,51,3 +70634828,50,3111603340,53,3 +70634828,50,3111603340,52,3 +214851100,51,214851100,54,3 +70634828,50,3111603340,50,3 +70634828,49,70634828,52,3 +3111603340,48,70634828,54,3 +3111603340,52,214851100,55,3 +3111603340,48,70634828,52,3 +16116663,92,70634828,53,3 +16116663,92,70634828,52,3 +3111603340,48,3111603340,55,3 +16116663,92,70634828,50,3 +3111603340,53,340093034,95,3 +70634828,44,395736790,95,3 +3191869223,91,70634828,53,3 +471121089,93,331545755,90,3 +3330358736,42,395736790,95,3 +25980377,38,70634828,54,3 +70634828,47,70634828,54,3 +471121089,93,70634828,55,3 +471121089,93,70634828,50,3 +3111603340,53,70634828,50,3 +16116663,92,331545755,90,3 +3111603340,53,70634828,52,3 +25980377,39,214851100,51,3 +3111603340,53,70634828,55,3 +214851100,53,70634828,52,3 +3191869223,91,70634828,50,3 +2327605629,94,70634828,50,3 +3330358736,42,70634828,53,3 +16116663,92,70634828,55,3 +2349705416,94,214851100,52,3 +3111603340,54,3111603340,55,3 +471121089,93,214851100,54,3 +70634828,51,3111603340,54,3 +25980377,38,214851100,50,3 +471121089,93,214851100,52,3 +70634828,48,214851100,54,3 +80158773,69,70634828,51,2 +80158773,69,70634828,50,2 +3111603340,54,214851100,54,2 +80158773,69,214851100,54,2 +80158773,69,3111603340,53,2 +80158773,69,70634828,52,2 +80158773,69,70634828,53,2 +80158773,69,70634828,54,2 +80158773,69,70634828,55,2 +80158773,69,214851100,52,2 +80158773,69,214851100,51,2 +80158773,69,214851100,53,2 +80158773,69,532328014,99,2 +80158773,69,214851100,55,2 +80158773,69,3111603340,52,2 +70634828,49,70634828,51,2 +80158773,69,395736790,95,2 +80158773,69,29223617,95,2 +80158773,69,340093034,95,2 +80158773,69,303926772,99,2 +80158773,69,3111603340,55,2 +80158773,69,3111603340,50,2 +80158773,69,3111603340,54,2 +728969035,93,214851100,54,2 +728969035,93,214851100,53,2 +80158773,69,3111603340,51,2 +591350440,91,70634828,50,2 +3111603340,54,214851100,55,2 +3111603340,54,214851100,53,2 +3111603340,53,70634828,51,2 +6,10,29223617,95,2 +70634828,47,70634828,52,2 +70634828,48,70634828,55,2 +3111603340,44,3111603340,52,2 +70634828,47,70634828,53,2 +3392803162,9,331545755,90,2 +3392803162,9,395736790,95,2 +3111603340,53,3111603340,55,2 +3111603340,44,214851100,54,2 +8,37,395736790,95,2 +70634828,49,214851100,50,2 +70634828,50,214851100,51,2 +728969035,93,70634828,53,2 +3111603340,54,70634828,52,2 +3111603340,53,3111603340,51,2 +79938367,9,395736790,95,2 +8,37,29223617,95,2 +8,37,303926772,99,2 +33822284,9,340093034,95,2 +303926772,99,70634828,53,2 +3111603340,54,214851100,51,2 +3111603340,44,70634828,54,2 +3330358736,40,70634828,54,2 +80158773,69,214851100,50,2 +6,10,2337727838,90,2 +3111603340,54,214851100,50,2 +3111603340,53,70634828,53,2 +8,37,340093034,95,2 +70634828,47,70634828,55,2 +5971532,9,517675473,92,2 +728969035,93,70634828,51,2 +8,37,532328014,99,2 +303926772,99,532328014,99,2 +3111603340,53,214851100,53,2 +3111603340,53,214851100,54,2 +591350440,91,70634828,52,2 +3111603340,53,214851100,55,2 +728969035,93,70634828,50,2 +495782506,19,2336923756,91,2 +3111603340,50,70634828,52,2 +70634828,47,214851100,54,2 +471121089,93,70634828,53,2 +495782506,19,3111603340,55,2 +495782506,19,3191869223,91,2 +495782506,19,331545755,90,2 +495782506,19,340093034,95,2 +495782506,19,395736790,95,2 +495782506,19,471121089,93,2 +70634828,52,3111603340,51,2 +495782506,19,517675473,92,2 +70634828,52,3111603340,55,2 +495782506,19,532328014,99,2 +495782506,19,591350440,91,2 +495782506,19,70634828,50,2 +495782506,19,70634828,51,2 +70634828,52,70634828,53,2 +495782506,19,70634828,52,2 +471121089,93,3111603340,55,2 +471121089,93,3111603340,52,2 +495782506,19,70634828,53,2 +70634828,53,214851100,51,2 +70634828,53,214851100,53,2 +70634828,53,214851100,54,2 +3191869223,91,70634828,51,2 +70634828,52,214851100,50,2 +495782506,19,70634828,55,2 +495782506,19,16116663,92,2 +495782506,19,2327605629,94,2 +495782506,19,2326722141,90,2 +495782506,19,214851100,55,2 +495782506,19,2349179532,93,2 +331545755,90,2326722141,90,2 +495782506,19,214851100,54,2 +495782506,19,2349705416,94,2 +70634828,51,70634828,52,2 +495782506,19,29223617,95,2 +495782506,19,303926772,99,2 +495782506,19,214851100,53,2 +495782506,19,3111603340,50,2 +495782506,19,3111603340,51,2 +495782506,19,214851100,52,2 +70634828,51,70634828,53,2 +495782506,19,3111603340,52,2 +495782506,19,3111603340,53,2 +495782506,19,214851100,51,2 +495782506,19,214851100,50,2 +3191869223,91,70634828,54,2 +495782506,19,16210433,92,2 +495782506,19,70634828,54,2 +495782506,19,728969035,93,2 +70634828,47,214851100,52,2 +70634828,54,70634828,52,2 +37873062,9,532328014,99,2 +6,10,340093034,95,2 +37873062,9,395736790,95,2 +37873062,9,340093034,95,2 +3111603340,46,70634828,52,2 +495782506,19,2337727838,90,2 +3111603340,51,214851100,51,2 +6,10,3191869223,91,2 +3111603340,51,214851100,53,2 +70634828,55,214851100,55,2 +70634828,50,340093034,95,2 +37873062,9,3191869223,91,2 +3111603340,46,3111603340,55,2 +3330358736,38,70634828,54,2 +70634828,50,3111603340,51,2 +37873062,9,303926772,99,2 +591350440,91,214851100,52,2 +37873062,9,2337727838,90,2 +37873062,9,2336923756,91,2 +3330358736,39,29223617,95,2 +3111603340,46,214851100,53,2 +70634828,54,70634828,53,2 +70634828,51,214851100,55,2 +70634828,51,3111603340,55,2 +517675473,92,70634828,54,2 +471121089,93,214851100,53,2 +420984285,16,532328014,99,2 +420984285,16,395736790,95,2 +420984285,16,340093034,95,2 +420984285,16,303926772,99,2 +517675473,92,2326722141,90,2 +420984285,16,29223617,95,2 +70634828,51,3111603340,51,2 +517675473,92,2337727838,90,2 +70634828,54,214851100,51,2 +70634828,46,70634828,52,2 +6,10,728969035,93,2 +3111603340,50,214851100,51,2 +3111603340,50,214851100,53,2 +3111603340,50,214851100,54,2 +70634828,54,3111603340,51,2 +6,10,395736790,95,2 +70634828,54,3111603340,55,2 +3191869223,91,2337727838,90,2 +3191869223,91,2326722141,90,2 +70634828,54,340093034,95,2 +495782506,19,3111603340,54,2 +1,10,2326722141,90,2 +25980377,39,3111603340,51,2 +214851100,55,3111603340,55,2 +214851100,46,214851100,50,2 +214851100,45,70634828,55,2 +2327605629,94,214851100,52,2 +214851100,45,340093034,95,2 +214851100,45,3111603340,55,2 +214851100,45,3111603340,51,2 +2327605629,94,214851100,55,2 +214851100,45,214851100,54,2 +214851100,45,214851100,53,2 +214851100,44,340093034,95,2 +214851100,44,3111603340,51,2 +2327605629,94,3111603340,52,2 +2327605629,94,3111603340,55,2 +2327605629,94,70634828,52,2 +2336923756,91,2326722141,90,2 +2327605629,94,70634828,53,2 +214851100,54,70634828,55,2 +214851100,54,70634828,53,2 +2349179532,93,70634828,55,2 +2349179532,93,70634828,54,2 +2349179532,93,70634828,53,2 +2349179532,93,70634828,51,2 +2349179532,93,2337727838,90,2 +2349179532,93,2326722141,90,2 +2349179532,93,214851100,54,2 +2349179532,93,214851100,53,2 +2349705416,94,2326722141,90,2 +214851100,54,214851100,51,2 +2326722141,90,331545755,90,2 +214851100,48,214851100,54,2 +214851100,48,70634828,52,2 +214851100,50,214851100,53,2 +14913649,9,395736790,95,2 +16116663,11,16210433,92,2 +16116663,11,2336923756,91,2 +214851100,53,3111603340,51,2 +16116663,11,29223617,95,2 +214851100,53,214851100,54,2 +16116663,11,3191869223,91,2 +214851100,53,214851100,51,2 +16116663,11,340093034,95,2 +16116663,11,395736790,95,2 +214851100,52,70634828,52,2 +16116663,11,532328014,99,2 +16116663,11,591350440,91,2 +214851100,51,70634828,52,2 +16116663,92,214851100,53,2 +16116663,92,2326722141,90,2 +16116663,92,2337727838,90,2 +16116663,92,70634828,51,2 +16116663,92,70634828,54,2 +16210433,92,2326722141,90,2 +16210433,92,2337727838,90,2 +214851100,50,70634828,53,2 +1,10,591350440,91,2 +1,10,395736790,95,2 +1,10,3191869223,91,2 +214851100,50,340093034,95,2 +16210433,92,70634828,54,2 +2349705416,94,2337727838,90,2 +214851100,55,70634828,52,2 +214851100,54,3111603340,51,2 +25980377,41,214851100,50,2 +2337727838,90,331545755,90,2 +2337727838,90,2326722141,90,2 +2336923756,91,70634828,54,2 +2336923756,91,70634828,51,2 +25980377,41,214851100,51,2 +214851100,54,214851100,53,2 +2336923756,91,2337727838,90,2 +25980377,40,214851100,54,2 +2349705416,94,70634828,51,2 +2349705416,94,70634828,55,2 +2349705416,94,70634828,54,2 +25980377,39,29223617,95,2 +598808584,15,214851100,55,1 +648145286,35,29223617,95,1 +598808584,15,214851100,52,1 +598808584,15,214851100,51,1 +648145286,35,25980377,39,1 +598808584,15,214851100,49,1 +598808584,15,214851100,50,1 +598808584,15,2337727838,90,1 +598808584,15,214851100,48,1 +648145286,35,303926772,99,1 +598808584,15,214851100,47,1 +598808584,15,2326722141,90,1 +6,10,532328014,99,1 +648145286,35,214851100,53,1 +598808584,15,25980377,40,1 +648145286,35,214851100,49,1 +598808584,15,25980377,42,1 +598808584,15,29223617,95,1 +598808584,15,214851100,46,1 +644252759,61,728969035,93,1 +644252759,61,591350440,91,1 +598808584,15,303926772,99,1 +644252759,61,532328014,99,1 +598808584,15,3111603340,45,1 +644252759,61,471121089,93,1 +648145286,35,3111603340,49,1 +648145286,35,532328014,99,1 +648145286,35,3111603340,53,1 +598808584,15,214851100,44,1 +675729777,10,3191869223,91,1 +675729777,10,303926772,99,1 +675729777,10,2336923756,91,1 +675729777,10,16116663,92,1 +668539285,17,728969035,93,1 +668539285,17,591350440,91,1 +668539285,17,517675473,92,1 +668539285,17,471121089,93,1 +668539285,17,395736790,95,1 +668539285,17,340093034,95,1 +668539285,17,331545755,90,1 +668539285,17,3191869223,91,1 +668539285,17,303926772,99,1 +668539285,17,29223617,95,1 +668539285,17,2349705416,94,1 +668539285,17,2349179532,93,1 +668539285,17,2337727838,90,1 +668539285,17,2327605629,94,1 +668539285,17,2326722141,90,1 +668539285,17,16210433,92,1 +664591135,9,340093034,95,1 +648145286,35,70634828,53,1 +648145286,35,70634828,49,1 +644252759,61,395736790,95,1 +648145286,35,395736790,95,1 +648145286,35,340093034,95,1 +648145286,35,3330358736,39,1 +598808584,15,3111603340,47,1 +598808584,15,3111603340,50,1 +598808584,15,3111603340,48,1 +644252759,61,340093034,95,1 +598808584,15,70634828,46,1 +598808584,15,70634828,48,1 +6333996,66,532328014,99,1 +675729777,10,395736790,95,1 +6333996,66,517675473,92,1 +6333996,66,395736790,95,1 +598808584,15,70634828,50,1 +598808584,15,70634828,51,1 +6,10,2327605629,94,1 +214851100,54,70634828,44,1 +6,10,2349179532,93,1 +6,10,2349705416,94,1 +214851100,54,340093034,95,1 +6333996,66,340093034,95,1 +6333996,66,331545755,90,1 +6,10,303926772,99,1 +6333996,66,29223617,95,1 +6333996,66,2349179532,93,1 +6,10,331545755,90,1 +6333996,66,2337727838,90,1 +6333996,66,2336923756,91,1 +214851100,54,3111603340,45,1 +6333996,66,2327605629,94,1 +6333996,66,2326722141,90,1 +6333996,66,16210433,92,1 +618469306,9,331545755,90,1 +6,10,591350440,91,1 +598808584,15,70634828,44,1 +598808584,15,532328014,99,1 +598808584,15,395736790,95,1 +644252759,61,2336923756,91,1 +644252759,61,331545755,90,1 +598808584,15,3111603340,49,1 +598808584,15,3111603340,51,1 +598808584,15,3111603340,52,1 +598808584,15,3111603340,55,1 +644252759,61,3191869223,91,1 +598808584,15,331545755,90,1 +644252759,61,303926772,99,1 +644252759,61,29223617,95,1 +644252759,61,2349179532,93,1 +598808584,15,3330358736,38,1 +644252759,61,2337727838,90,1 +644252759,61,2327605629,94,1 +598808584,15,340093034,95,1 +598808584,15,3330358736,39,1 +644252759,61,2326722141,90,1 +643954924,9,2327605629,94,1 +640700057,9,728969035,93,1 +640700057,9,517675473,92,1 +640700057,9,3191869223,91,1 +598808584,15,3330358736,40,1 +6333996,66,728969035,93,1 +598808584,15,3330358736,41,1 +598808584,15,3330358736,42,1 +598808584,15,3330358736,43,1 +6333996,66,591350440,91,1 +675729777,10,340093034,95,1 +290636928,9,2336923756,91,1 +676597455,68,214851100,50,1 +203314437,22,532328014,99,1 +70634828,46,3111603340,44,1 +70634828,46,3111603340,45,1 +203314437,22,340093034,95,1 +203314437,22,3330358736,43,1 +203314437,22,3330358736,42,1 +203314437,22,3330358736,41,1 +203314437,22,3330358736,40,1 +203314437,22,3330358736,39,1 +203314437,22,3330358736,38,1 +203314437,22,331545755,90,1 +203314437,22,3111603340,55,1 +203314437,22,3111603340,54,1 +203314437,22,3111603340,53,1 +203314437,22,3111603340,52,1 +203314437,22,3111603340,51,1 +203314437,22,395736790,95,1 +203314437,22,70634828,44,1 +203314437,22,3111603340,49,1 +203314437,22,70634828,45,1 +205960791,63,214851100,55,1 +205960791,63,214851100,54,1 +205960791,63,214851100,51,1 +205960791,63,214851100,50,1 +70634828,46,214851100,44,1 +203314437,22,70634828,55,1 +203314437,22,70634828,54,1 +203314437,22,70634828,53,1 +203314437,22,70634828,52,1 +203314437,22,70634828,51,1 +203314437,22,70634828,50,1 +203314437,22,70634828,49,1 +203314437,22,70634828,48,1 +203314437,22,70634828,47,1 +203314437,22,70634828,46,1 +203314437,22,3111603340,50,1 +203314437,22,3111603340,48,1 +676597455,68,214851100,51,1 +203314437,22,214851100,52,1 +70634828,47,3111603340,45,1 +203314437,22,214851100,51,1 +203314437,22,214851100,50,1 +203314437,22,214851100,49,1 +203314437,22,214851100,48,1 +203314437,22,214851100,47,1 +203314437,22,214851100,46,1 +203314437,22,214851100,45,1 +203314437,22,214851100,44,1 +197362120,15,70634828,55,1 +197362120,15,70634828,49,1 +197362120,15,70634828,47,1 +197362120,15,70634828,46,1 +197362120,15,70634828,44,1 +197362120,15,532328014,99,1 +70634828,47,3111603340,44,1 +203314437,22,214851100,53,1 +203314437,22,3111603340,47,1 +203314437,22,214851100,54,1 +203314437,22,3111603340,46,1 +203314437,22,3111603340,45,1 +203314437,22,3111603340,44,1 +70634828,47,214851100,44,1 +203314437,22,303926772,99,1 +203314437,22,29223617,95,1 +203314437,22,25980377,43,1 +203314437,22,25980377,42,1 +203314437,22,25980377,41,1 +203314437,22,25980377,40,1 +203314437,22,25980377,39,1 +203314437,22,25980377,38,1 +203314437,22,2337727838,90,1 +203314437,22,2326722141,90,1 +203314437,22,214851100,55,1 +205960791,63,29223617,95,1 +205960791,63,303926772,99,1 +205960791,63,3111603340,50,1 +676597455,68,70634828,53,1 +688155470,30,303926772,99,1 +688155470,30,340093034,95,1 +688155470,30,395736790,95,1 +688155470,30,532328014,99,1 +696450846,9,3191869223,91,1 +70634828,44,214851100,44,1 +214851100,53,70634828,53,1 +214851100,53,70634828,45,1 +214851100,53,70634828,44,1 +214851100,53,3111603340,45,1 +214851100,52,70634828,45,1 +214851100,52,70634828,44,1 +214851100,52,3111603340,45,1 +214851100,51,70634828,45,1 +214851100,51,70634828,44,1 +5979030,9,2337727838,90,1 +676597455,68,70634828,52,1 +205960791,63,3111603340,51,1 +676597455,68,70634828,51,1 +676597455,68,214851100,52,1 +676597455,68,214851100,53,1 +676597455,68,214851100,54,1 +676597455,68,214851100,55,1 +676597455,68,2326722141,90,1 +676597455,68,2337727838,90,1 +676597455,68,29223617,95,1 +676597455,68,303926772,99,1 +676597455,68,3111603340,50,1 +676597455,68,3111603340,52,1 +676597455,68,3111603340,55,1 +676597455,68,331545755,90,1 +676597455,68,340093034,95,1 +676597455,68,395736790,95,1 +676597455,68,532328014,99,1 +70634828,44,3111603340,44,1 +70634828,44,3111603340,45,1 +214851100,51,3111603340,51,1 +214851100,51,3111603340,45,1 +214851100,45,3111603340,45,1 +214851100,44,70634828,45,1 +214851100,44,70634828,44,1 +70634828,45,3111603340,44,1 +70634828,45,3111603340,45,1 +214851100,44,3111603340,45,1 +214851100,44,214851100,54,1 +205960791,63,70634828,53,1 +205960791,63,70634828,51,1 +205960791,63,70634828,50,1 +205960791,63,532328014,99,1 +205960791,63,395736790,95,1 +205960791,63,340093034,95,1 +205960791,63,3111603340,55,1 +205960791,63,3111603340,53,1 +214851100,45,70634828,44,1 +214851100,45,70634828,45,1 +214851100,46,3111603340,45,1 +214851100,48,70634828,45,1 +214851100,50,70634828,45,1 +214851100,50,70634828,44,1 +214851100,50,3111603340,45,1 +214851100,49,70634828,45,1 +214851100,49,70634828,44,1 +214851100,49,3111603340,45,1 +214851100,48,70634828,44,1 +214851100,46,70634828,44,1 +214851100,48,3111603340,45,1 +214851100,47,70634828,45,1 +214851100,47,70634828,44,1 +214851100,47,3111603340,45,1 +214851100,46,70634828,45,1 +70634828,45,214851100,44,1 +688155470,30,29223617,95,1 +59234665,65,70634828,55,1 +5971532,9,532328014,99,1 +2310406050,60,70634828,45,1 +517675473,92,214851100,51,1 +2310406050,60,3111603340,49,1 +2310406050,60,3111603340,48,1 +2310406050,60,3111603340,47,1 +2310406050,60,3111603340,46,1 +2310406050,60,3111603340,45,1 +2310406050,60,303926772,99,1 +2310406050,60,29223617,95,1 +2310406050,60,25980377,43,1 +2310406050,60,25980377,42,1 +2310406050,60,25980377,41,1 +2310406050,60,25980377,39,1 +2310406050,60,25980377,38,1 +517675473,92,3111603340,50,1 +517675473,92,3111603340,51,1 +2310406050,60,2337727838,90,1 +2310406050,60,2326722141,90,1 +2310406050,60,3111603340,50,1 +2310406050,60,3111603340,51,1 +2310406050,60,3111603340,52,1 +2310406050,60,3111603340,54,1 +2310406050,60,395736790,95,1 +2310406050,60,340093034,95,1 +2310406050,60,3330358736,43,1 +2310406050,60,3330358736,41,1 +2310406050,60,3330358736,39,1 +2310406050,60,3330358736,38,1 +2310406050,60,331545755,90,1 +2310406050,60,3111603340,53,1 +507827038,10,728969035,93,1 +507827038,10,2327605629,94,1 +507827038,10,2336923756,91,1 +507827038,10,29223617,95,1 +507827038,10,331545755,90,1 +507827038,10,340093034,95,1 +507827038,10,395736790,95,1 +507827038,10,591350440,91,1 +2310406050,60,214851100,55,1 +2310406050,60,214851100,54,1 +2310406050,60,214851100,53,1 +214851100,7,532328014,99,1 +225958786,11,2327605629,94,1 +225958786,11,16116663,92,1 +214851100,7,70634828,54,1 +214851100,7,70634828,53,1 +214851100,7,70634828,50,1 +214851100,7,70634828,45,1 +214851100,7,70634828,44,1 +214851100,7,395736790,95,1 +225958786,11,2337727838,90,1 +543470507,8,16116663,92,1 +543470507,8,2326722141,90,1 +543470507,8,2327605629,94,1 +543470507,8,2336923756,91,1 +543470507,8,2337727838,90,1 +543470507,8,2349179532,93,1 +543470507,8,29223617,95,1 +225958786,11,2336923756,91,1 +225958786,11,2349179532,93,1 +2310406050,60,214851100,52,1 +517675473,92,70634828,51,1 +2310406050,60,214851100,51,1 +2310406050,60,214851100,49,1 +2310406050,60,214851100,48,1 +2310406050,60,214851100,46,1 +2310406050,60,214851100,45,1 +225958786,11,591350440,91,1 +225958786,11,395736790,95,1 +225958786,11,340093034,95,1 +225958786,11,2349705416,94,1 +225958786,11,3191869223,91,1 +225958786,11,303926772,99,1 +225958786,11,29223617,95,1 +518871190,9,2326722141,90,1 +518871190,9,2336923756,91,1 +518871190,9,340093034,95,1 +518871190,9,395736790,95,1 +2310406050,60,532328014,99,1 +2310406050,60,70634828,46,1 +214851100,54,70634828,45,1 +2310406050,60,70634828,47,1 +2310534839,64,70634828,50,1 +2310534839,64,70634828,49,1 +2310534839,64,70634828,45,1 +471121089,93,2326722141,90,1 +471121089,93,2337727838,90,1 +2310534839,64,532328014,99,1 +2310534839,64,395736790,95,1 +2310534839,64,340093034,95,1 +2310534839,64,3330358736,42,1 +2310534839,64,3330358736,41,1 +2310534839,64,3330358736,40,1 +471121089,93,3111603340,50,1 +471121089,93,3111603340,51,1 +2310534839,64,3330358736,39,1 +2310534839,64,3330358736,38,1 +2310534839,64,331545755,90,1 +2310534839,64,3111603340,55,1 +2310534839,64,70634828,51,1 +471121089,93,214851100,51,1 +466148111,9,340093034,95,1 +2310534839,64,70634828,55,1 +410030851,27,70634828,48,1 +410030851,27,70634828,50,1 +410030851,27,70634828,51,1 +410030851,27,70634828,53,1 +410030851,27,70634828,54,1 +410030851,27,70634828,55,1 +2311838590,97,29223617,95,1 +2310534839,64,70634828,54,1 +4607820,9,395736790,95,1 +2310534839,64,70634828,53,1 +2310534839,64,70634828,52,1 +441623911,79,303926772,99,1 +441623911,79,532328014,99,1 +4607820,9,2326722141,90,1 +4607820,9,331545755,90,1 +4607820,9,340093034,95,1 +2310534839,64,3111603340,54,1 +2310534839,64,3111603340,53,1 +2310534839,64,3111603340,52,1 +2310534839,64,214851100,47,1 +2310534839,64,214851100,54,1 +2310534839,64,214851100,53,1 +2310534839,64,214851100,52,1 +2310534839,64,214851100,51,1 +2310534839,64,214851100,50,1 +2310534839,64,214851100,49,1 +2310534839,64,214851100,48,1 +2310534839,64,214851100,44,1 +2310534839,64,2326722141,90,1 +2310406050,60,70634828,55,1 +2310406050,60,70634828,54,1 +2310406050,60,70634828,53,1 +2310406050,60,70634828,52,1 +2310406050,60,70634828,51,1 +2310406050,60,70634828,50,1 +2310406050,60,70634828,48,1 +2310534839,64,214851100,55,1 +2310534839,64,2337727838,90,1 +2310534839,64,3111603340,51,1 +2310534839,64,303926772,99,1 +2310534839,64,3111603340,50,1 +2310534839,64,3111603340,49,1 +2310534839,64,3111603340,47,1 +2310534839,64,3111603340,45,1 +2310534839,64,3111603340,44,1 +471121089,93,70634828,51,1 +471121089,93,70634828,52,1 +471121089,93,70634828,54,1 +2310534839,64,25980377,38,1 +2310534839,64,29223617,95,1 +493002466,9,331545755,90,1 +493002466,9,728969035,93,1 +2310534839,64,25980377,42,1 +2310534839,64,25980377,41,1 +2310534839,64,25980377,40,1 +2310534839,64,25980377,39,1 +543470507,8,303926772,99,1 +543470507,8,3191869223,91,1 +543470507,8,331545755,90,1 +543470507,8,340093034,95,1 +59234665,65,214851100,51,1 +59234665,65,214851100,52,1 +59234665,65,214851100,53,1 +59234665,65,214851100,54,1 +59234665,65,214851100,55,1 +59234665,65,2326722141,90,1 +59234665,65,2327605629,94,1 +59234665,65,2336923756,91,1 +59234665,65,2337727838,90,1 +59234665,65,2349705416,94,1 +59234665,65,25980377,38,1 +59234665,65,25980377,39,1 +59234665,65,25980377,40,1 +59234665,65,25980377,42,1 +59234665,65,25980377,43,1 +59234665,65,29223617,95,1 +59234665,65,303926772,99,1 +59234665,65,214851100,50,1 +59234665,65,214851100,49,1 +59234665,65,214851100,48,1 +214851100,55,70634828,44,1 +214851100,7,25980377,43,1 +214851100,7,25980377,40,1 +591350440,91,331545755,90,1 +214851100,7,25980377,39,1 +214851100,7,2337727838,90,1 +214851100,7,2326722141,90,1 +214851100,55,70634828,45,1 +214851100,55,3111603340,45,1 +59234665,65,214851100,47,1 +591350440,91,70634828,51,1 +591350440,91,70634828,53,1 +59234665,65,16116663,92,1 +59234665,65,16210433,92,1 +59234665,65,214851100,44,1 +59234665,65,214851100,45,1 +59234665,65,214851100,46,1 +59234665,65,3111603340,45,1 +59234665,65,3111603340,46,1 +59234665,65,3111603340,48,1 +197362120,15,340093034,95,1 +59234665,65,70634828,46,1 +59234665,65,70634828,48,1 +59234665,65,70634828,49,1 +59234665,65,70634828,50,1 +59234665,65,70634828,51,1 +59234665,65,70634828,53,1 +59234665,65,70634828,54,1 +59234665,65,728969035,93,1 +59234665,65,70634828,44,1 +596368303,12,29223617,95,1 +596368303,12,303926772,99,1 +596368303,12,340093034,95,1 +596368303,12,395736790,95,1 +596368303,12,532328014,99,1 +5971532,9,29223617,95,1 +5971532,9,340093034,95,1 +59234665,65,70634828,45,1 +59234665,65,591350440,91,1 +59234665,65,3111603340,49,1 +59234665,65,3330358736,38,1 +59234665,65,3111603340,50,1 +59234665,65,3111603340,52,1 +59234665,65,3111603340,53,1 +59234665,65,3111603340,54,1 +59234665,65,3111603340,55,1 +59234665,65,3191869223,91,1 +59234665,65,331545755,90,1 +59234665,65,3330358736,39,1 +59234665,65,532328014,99,1 +59234665,65,3330358736,40,1 +59234665,65,3330358736,42,1 +59234665,65,3330358736,43,1 +59234665,65,340093034,95,1 +59234665,65,395736790,95,1 +59234665,65,471121089,93,1 +59234665,65,517675473,92,1 +591350440,91,3111603340,53,1 +214851100,7,29223617,95,1 +591350440,91,3111603340,50,1 +562681526,25,3111603340,52,1 +562681526,25,25980377,42,1 +562681526,25,25980377,43,1 +562681526,25,29223617,95,1 +562681526,25,303926772,99,1 +562681526,25,3111603340,45,1 +562681526,25,3111603340,49,1 +562681526,25,3111603340,51,1 +562681526,25,3111603340,53,1 +562681526,25,25980377,39,1 +562681526,25,3111603340,54,1 +562681526,25,3111603340,55,1 +562681526,25,331545755,90,1 +562681526,25,3330358736,39,1 +562681526,25,3330358736,41,1 +562681526,25,3330358736,42,1 +562681526,25,3330358736,43,1 +562681526,25,25980377,41,1 +562681526,25,2337727838,90,1 +562681526,25,395736790,95,1 +562681526,25,214851100,44,1 +543470507,8,395736790,95,1 +543470507,8,517675473,92,1 +543470507,8,532328014,99,1 +543470507,8,591350440,91,1 +543470507,8,728969035,93,1 +551856519,33,214851100,47,1 +551856519,33,70634828,47,1 +562681526,25,214851100,45,1 +562681526,25,2326722141,90,1 +562681526,25,214851100,46,1 +562681526,25,214851100,48,1 +562681526,25,214851100,50,1 +562681526,25,214851100,52,1 +562681526,25,214851100,53,1 +562681526,25,214851100,54,1 +562681526,25,214851100,55,1 +562681526,25,340093034,95,1 +562681526,25,532328014,99,1 +214851100,7,303926772,99,1 +214851100,7,340093034,95,1 +5849940,36,303926772,99,1 +5849940,36,3111603340,52,1 +5849940,36,3330358736,41,1 +5849940,36,340093034,95,1 +5849940,36,395736790,95,1 +5849940,36,532328014,99,1 +5849940,36,70634828,52,1 +591350440,91,214851100,53,1 +5849940,36,25980377,41,1 +591350440,91,214851100,54,1 +214851100,7,3330358736,43,1 +214851100,7,3330358736,40,1 +214851100,7,331545755,90,1 +214851100,7,3111603340,54,1 +214851100,7,3111603340,50,1 +214851100,7,3111603340,45,1 +5849940,36,29223617,95,1 +5849940,36,214851100,52,1 +562681526,25,70634828,45,1 +578803019,10,16116663,92,1 +562681526,25,70634828,48,1 +562681526,25,70634828,49,1 +562681526,25,70634828,51,1 +562681526,25,70634828,52,1 +562681526,25,70634828,53,1 +562681526,25,70634828,54,1 +562681526,25,70634828,55,1 +578803019,10,2326722141,90,1 +5849940,26,532328014,99,1 +578803019,10,2337727838,90,1 +578803019,10,2349705416,94,1 +578803019,10,395736790,95,1 +5849940,26,29223617,95,1 +5849940,26,303926772,99,1 +5849940,26,340093034,95,1 +5849940,26,395736790,95,1 +197362120,15,395736790,95,1 +197362120,15,25980377,43,1 +197362120,15,3330358736,42,1 +78979697,61,395736790,95,1 +758879940,65,3111603340,54,1 +758879940,65,3111603340,55,1 +758879940,65,3191869223,91,1 +758879940,65,331545755,90,1 +758879940,65,3330358736,38,1 +758879940,65,3330358736,39,1 +758879940,65,3330358736,40,1 +758879940,65,3330358736,41,1 +758879940,65,3330358736,43,1 +758879940,65,340093034,95,1 +758879940,65,395736790,95,1 +758879940,65,471121089,93,1 +758879940,65,517675473,92,1 +758879940,65,532328014,99,1 +758879940,65,591350440,91,1 +758879940,65,70634828,45,1 +758879940,65,70634828,46,1 +758879940,65,3111603340,53,1 +758879940,65,3111603340,52,1 +758879940,65,3111603340,51,1 +758879940,65,25980377,42,1 +758879940,65,2337727838,90,1 +758879940,65,2349179532,93,1 +758879940,65,2349705416,94,1 +758879940,65,25980377,38,1 +758879940,65,25980377,39,1 +758879940,65,25980377,40,1 +758879940,65,25980377,41,1 +758879940,65,25980377,43,1 +758879940,65,3111603340,50,1 +758879940,65,29223617,95,1 +758879940,65,303926772,99,1 +758879940,65,3111603340,44,1 +758879940,65,3111603340,46,1 +758879940,65,3111603340,47,1 +758879940,65,3111603340,48,1 +758879940,65,3111603340,49,1 +758879940,65,70634828,47,1 +758879940,65,70634828,50,1 +758879940,65,70634828,52,1 +78979697,61,16210433,92,1 +771821595,31,517675473,92,1 +771821595,31,532328014,99,1 +771821595,31,591350440,91,1 +771821595,31,70634828,55,1 +771821595,31,728969035,93,1 +778745779,9,3191869223,91,1 +78576577,9,517675473,92,1 +78979697,61,2326722141,90,1 +771821595,31,395736790,95,1 +78979697,61,2327605629,94,1 +78979697,61,2336923756,91,1 +78979697,61,2337727838,90,1 +78979697,61,29223617,95,1 +78979697,61,303926772,99,1 +78979697,61,3191869223,91,1 +78979697,61,331545755,90,1 +771821595,31,471121089,93,1 +771821595,31,340093034,95,1 +758879940,65,70634828,53,1 +771821595,31,2336923756,91,1 +758879940,65,70634828,54,1 +762501019,9,2327605629,94,1 +771821595,31,16116663,92,1 +771821595,31,16210433,92,1 +771821595,31,214851100,52,1 +771821595,31,214851100,55,1 +771821595,31,2326722141,90,1 +771821595,31,2337727838,90,1 +771821595,31,3330358736,42,1 +771821595,31,25980377,42,1 +771821595,31,29223617,95,1 +771821595,31,3111603340,52,1 +771821595,31,3111603340,55,1 +771821595,31,3191869223,91,1 +771821595,31,331545755,90,1 +771821595,31,3330358736,41,1 +758879940,65,2336923756,91,1 +758879940,65,2326722141,90,1 +758879940,65,214851100,55,1 +11807506,9,532328014,99,1 +728969035,93,3111603340,50,1 +728969035,93,3111603340,51,1 +1208566436,62,214851100,53,1 +1208566436,62,214851100,52,1 +1208566436,62,214851100,51,1 +1208566436,62,16210433,92,1 +1208566436,62,16116663,92,1 +11807506,9,340093034,95,1 +1208566436,62,2327605629,94,1 +11807506,9,303926772,99,1 +11807506,9,29223617,95,1 +11807506,9,2336923756,91,1 +11807506,36,70634828,52,1 +11807506,36,532328014,99,1 +11807506,36,395736790,95,1 +11807506,36,340093034,95,1 +1208566436,62,2326722141,90,1 +1208566436,62,2336923756,91,1 +11807506,36,3111603340,52,1 +728969035,93,214851100,51,1 +71271700,27,70634828,45,1 +71271700,27,70634828,46,1 +71271700,27,70634828,47,1 +71271700,27,70634828,49,1 +71271700,27,70634828,50,1 +71271700,27,70634828,53,1 +71271700,27,70634828,54,1 +1208566436,62,3111603340,51,1 +1208566436,62,2337727838,90,1 +1208566436,62,3111603340,50,1 +1208566436,62,303926772,99,1 +1208566436,62,29223617,95,1 +728969035,93,2326722141,90,1 +728969035,93,2337727838,90,1 +1208566436,62,2349705416,94,1 +1208566436,62,2349179532,93,1 +11807506,36,3330358736,41,1 +728969035,93,70634828,54,1 +758879940,65,214851100,54,1 +758879940,65,214851100,44,1 +756272716,32,340093034,95,1 +756272716,32,395736790,95,1 +756272716,32,532328014,99,1 +756272716,32,70634828,46,1 +756272716,32,70634828,54,1 +758879940,65,16116663,92,1 +758879940,65,16210433,92,1 +758879940,65,214851100,45,1 +756272716,32,303926772,99,1 +758879940,65,214851100,46,1 +758879940,65,214851100,48,1 +758879940,65,214851100,49,1 +758879940,65,214851100,50,1 +758879940,65,214851100,51,1 +758879940,65,214851100,52,1 +758879940,65,214851100,53,1 +756272716,32,3111603340,46,1 +756272716,32,29223617,95,1 +11807506,36,303926772,99,1 +737770776,34,340093034,95,1 +733657390,10,3191869223,91,1 +733657390,10,340093034,95,1 +733657390,10,517675473,92,1 +737770776,34,214851100,48,1 +737770776,34,29223617,95,1 +737770776,34,303926772,99,1 +737770776,34,3111603340,48,1 +737770776,34,395736790,95,1 +756272716,32,25980377,43,1 +737770776,34,70634828,48,1 +742704658,9,2327605629,94,1 +742704658,9,340093034,95,1 +742704658,9,395736790,95,1 +742704658,9,532328014,99,1 +756272716,32,214851100,46,1 +756272716,32,214851100,54,1 +78979697,61,340093034,95,1 +78979697,61,471121089,93,1 +71271700,27,532328014,99,1 +78979697,61,532328014,99,1 +961017,23,214851100,55,1 +961017,23,2326722141,90,1 +961017,23,2327605629,94,1 +961017,23,2336923756,91,1 +961017,23,2337727838,90,1 +961017,23,2349179532,93,1 +961017,23,2349705416,94,1 +961017,23,25980377,39,1 +961017,23,25980377,40,1 +961017,23,25980377,41,1 +961017,23,25980377,42,1 +961017,23,25980377,43,1 +961017,23,29223617,95,1 +961017,23,303926772,99,1 +961017,23,3111603340,44,1 +961017,23,3111603340,45,1 +961017,23,3111603340,46,1 +961017,23,214851100,54,1 +961017,23,214851100,53,1 +961017,23,214851100,52,1 +907433543,10,331545755,90,1 +9032550,34,3111603340,48,1 +9032550,34,340093034,95,1 +9032550,34,70634828,48,1 +907433543,10,2327605629,94,1 +907433543,10,2349179532,93,1 +907433543,10,29223617,95,1 +907433543,10,303926772,99,1 +907433543,10,340093034,95,1 +961017,23,214851100,51,1 +907433543,10,517675473,92,1 +950849442,9,340093034,95,1 +961017,23,16116663,92,1 +961017,23,214851100,44,1 +961017,23,214851100,46,1 +961017,23,214851100,49,1 +961017,23,214851100,50,1 +961017,23,3111603340,47,1 +961017,23,3111603340,49,1 +961017,23,3111603340,50,1 +961017,23,70634828,55,1 +961017,23,70634828,48,1 +961017,23,70634828,49,1 +961017,23,70634828,50,1 +961017,23,70634828,51,1 +961017,23,70634828,52,1 +961017,23,70634828,53,1 +961017,23,70634828,54,1 +961017,23,728969035,93,1 +961017,23,70634828,46,1 +9620005,9,29223617,95,1 +9620005,9,517675473,92,1 +9620005,9,728969035,93,1 +9746245,97,29223617,95,1 +9746245,97,303926772,99,1 +9746245,97,340093034,95,1 +9746245,97,395736790,95,1 +961017,23,70634828,47,1 +961017,23,70634828,45,1 +961017,23,3111603340,51,1 +961017,23,3330358736,39,1 +961017,23,3111603340,52,1 +961017,23,3111603340,53,1 +961017,23,3111603340,54,1 +961017,23,3111603340,55,1 +961017,23,3191869223,91,1 +961017,23,331545755,90,1 +961017,23,3330358736,38,1 +961017,23,3330358736,40,1 +961017,23,70634828,44,1 +961017,23,3330358736,41,1 +961017,23,3330358736,42,1 +961017,23,3330358736,43,1 +961017,23,340093034,95,1 +961017,23,395736790,95,1 +961017,23,532328014,99,1 +961017,23,591350440,91,1 +9032550,34,214851100,48,1 +872394725,70,728969035,93,1 +872394725,70,591350440,91,1 +10437056,9,340093034,95,1 +1171244159,32,214851100,54,1 +1171244159,32,214851100,46,1 +1160497810,12,532328014,99,1 +1160497810,12,395736790,95,1 +1160497810,12,340093034,95,1 +1160497810,12,303926772,99,1 +1160497810,12,29223617,95,1 +10437056,9,2337727838,90,1 +1171244159,32,29223617,95,1 +10437056,9,2327605629,94,1 +10437056,9,2326722141,90,1 +1,10,303926772,99,1 +805940123,72,214851100,50,1 +805940123,72,214851100,52,1 +805940123,72,214851100,54,1 +805940123,72,214851100,55,1 +1171244159,32,25980377,43,1 +1171244159,32,303926772,99,1 +805940123,72,303926772,99,1 +11807506,36,25980377,41,1 +78979697,61,728969035,93,1 +78979697,74,29223617,95,1 +78979697,74,303926772,99,1 +78979697,74,340093034,95,1 +78979697,74,395736790,95,1 +78979697,74,532328014,99,1 +11807506,36,29223617,95,1 +11807506,36,214851100,52,1 +1171244159,32,3111603340,46,1 +1171244159,32,70634828,54,1 +1171244159,32,70634828,46,1 +1171244159,32,532328014,99,1 +1171244159,32,395736790,95,1 +1171244159,32,340093034,95,1 +1171244159,32,3330358736,43,1 +1171244159,32,3111603340,54,1 +805940123,72,29223617,95,1 +805940123,72,3111603340,50,1 +872394725,70,532328014,99,1 +872394725,70,16116663,92,1 +862404568,11,340093034,95,1 +862404568,11,395736790,95,1 +862404568,11,532328014,99,1 +862404568,11,591350440,91,1 +862404568,11,728969035,93,1 +863973253,9,2336923756,91,1 +863973253,9,728969035,93,1 +872394725,70,2327605629,94,1 +862404568,11,3191869223,91,1 +872394725,70,2349705416,94,1 +872394725,70,29223617,95,1 +872394725,70,3191869223,91,1 +872394725,70,340093034,95,1 +872394725,70,395736790,95,1 +872394725,70,471121089,93,1 +872394725,70,517675473,92,1 +862404568,11,331545755,90,1 +862404568,11,303926772,99,1 +805940123,72,3111603340,51,1 +805940123,72,70634828,55,1 +805940123,72,3111603340,53,1 +805940123,72,340093034,95,1 +805940123,72,395736790,95,1 +805940123,72,532328014,99,1 +805940123,72,70634828,50,1 +805940123,72,70634828,53,1 +805940123,72,70634828,54,1 +808524154,9,517675473,92,1 +862404568,11,29223617,95,1 +8114841,9,2337727838,90,1 +8114841,9,728969035,93,1 +862404568,11,2326722141,90,1 +862404568,11,2327605629,94,1 +862404568,11,2336923756,91,1 +862404568,11,2337727838,90,1 +862404568,11,2349705416,94,1 +71271700,27,70634828,44,1 +71271700,27,395736790,95,1 +197362120,15,3330358736,41,1 +157087137,73,395736790,95,1 +169978927,66,2349179532,93,1 +169978927,66,2337727838,90,1 +169978927,66,2326722141,90,1 +169978927,66,16116663,92,1 +1698501971,9,3191869223,91,1 +16715045,10,591350440,91,1 +16715045,10,395736790,95,1 +70634828,50,70634828,52,1 +70634828,50,70634828,53,1 +70634828,50,70634828,54,1 +70634828,50,70634828,55,1 +70634828,51,214851100,44,1 +16715045,10,331545755,90,1 +70634828,51,214851100,51,1 +16715045,10,3191869223,91,1 +16715045,10,2349705416,94,1 +16715045,10,2336923756,91,1 +169978927,66,2349705416,94,1 +169978927,66,29223617,95,1 +70634828,50,3111603340,55,1 +169978927,66,591350440,91,1 +178452970,25,214851100,50,1 +70634828,50,214851100,55,1 +178452970,25,214851100,49,1 +178452970,25,214851100,48,1 +178452970,25,214851100,47,1 +178452970,25,214851100,44,1 +169978927,9,331545755,90,1 +169978927,66,532328014,99,1 +169978927,66,303926772,99,1 +169978927,66,517675473,92,1 +70634828,50,3111603340,44,1 +70634828,50,3111603340,45,1 +169978927,66,395736790,95,1 +169978927,66,340093034,95,1 +169978927,66,331545755,90,1 +169978927,66,3191869223,91,1 +1651310523,9,532328014,99,1 +1651310523,9,395736790,95,1 +1651310523,9,340093034,95,1 +16116663,10,517675473,92,1 +16116663,11,2349179532,93,1 +16116663,11,2337727838,90,1 +16116663,11,2327605629,94,1 +16116663,11,16116663,92,1 +16116663,10,532328014,99,1 +70634828,52,3111603340,44,1 +70634828,52,3111603340,45,1 +16116663,10,471121089,93,1 +16116663,11,303926772,99,1 +16116663,10,395736790,95,1 +16116663,10,340093034,95,1 +16116663,10,303926772,99,1 +16116663,10,29223617,95,1 +16116663,10,2326722141,90,1 +16116663,10,16210433,92,1 +1605495,9,2326722141,90,1 +16116663,11,2349705416,94,1 +16116663,11,331545755,90,1 +1651310523,9,3191869223,91,1 +70634828,51,3111603340,52,1 +1651310523,9,303926772,99,1 +1651310523,9,29223617,95,1 +16210433,92,70634828,51,1 +16210433,92,3111603340,51,1 +70634828,51,3111603340,44,1 +70634828,51,3111603340,45,1 +16210433,92,3111603340,50,1 +16210433,92,214851100,51,1 +70634828,52,214851100,44,1 +16116663,92,3111603340,51,1 +16116663,92,3111603340,50,1 +16116663,92,214851100,51,1 +16116663,9,2327605629,94,1 +16116663,11,728969035,93,1 +70634828,51,70634828,54,1 +16116663,11,517675473,92,1 +178452970,25,214851100,51,1 +178452970,25,214851100,52,1 +178452970,25,214851100,53,1 +193814549,33,70634828,47,1 +197362120,15,214851100,53,1 +197362120,15,214851100,49,1 +197362120,15,214851100,48,1 +197362120,15,214851100,47,1 +197362120,15,214851100,46,1 +197362120,15,214851100,44,1 +193814549,33,70634828,51,1 +193814549,33,532328014,99,1 +70634828,48,3111603340,45,1 +193814549,33,395736790,95,1 +193814549,33,340093034,95,1 +193814549,33,3330358736,38,1 +193814549,33,3111603340,51,1 +193814549,33,3111603340,47,1 +193814549,33,303926772,99,1 +193814549,33,29223617,95,1 +197362120,15,214851100,55,1 +70634828,48,3111603340,44,1 +193814549,33,214851100,51,1 +197362120,15,3111603340,44,1 +197362120,15,3330358736,40,1 +197362120,15,331545755,90,1 +70634828,48,214851100,44,1 +197362120,15,3111603340,55,1 +197362120,15,3111603340,53,1 +197362120,15,3111603340,49,1 +197362120,15,3111603340,45,1 +197362120,15,303926772,99,1 +197362120,15,2326722141,90,1 +197362120,15,29223617,95,1 +410030851,27,70634828,46,1 +197362120,15,25980377,42,1 +197362120,15,25980377,40,1 +197362120,15,25980377,39,1 +197362120,15,25980377,38,1 +197362120,15,2337727838,90,1 +193814549,33,25980377,38,1 +193814549,33,214851100,47,1 +70634828,50,214851100,44,1 +178452970,25,3111603340,44,1 +178452970,25,3111603340,55,1 +178452970,25,3111603340,54,1 +178452970,25,3111603340,52,1 +178452970,25,3111603340,51,1 +178452970,25,3111603340,50,1 +178452970,25,3111603340,49,1 +178452970,25,3111603340,45,1 +178452970,25,303926772,99,1 +178452970,25,3330358736,38,1 +178452970,25,29223617,95,1 +178452970,25,25980377,42,1 +178452970,25,25980377,41,1 +178452970,25,25980377,40,1 +178452970,25,25980377,38,1 +178452970,25,2337727838,90,1 +178452970,25,2326722141,90,1 +178452970,25,331545755,90,1 +70634828,49,3111603340,51,1 +70634828,49,214851100,44,1 +178452970,25,70634828,47,1 +189427260,9,331545755,90,1 +70634828,49,214851100,51,1 +178452970,25,70634828,55,1 +178452970,25,70634828,52,1 +178452970,25,70634828,51,1 +178452970,25,70634828,50,1 +178452970,25,70634828,48,1 +178452970,25,70634828,44,1 +178452970,25,3330358736,40,1 +178452970,25,532328014,99,1 +178452970,25,395736790,95,1 +178452970,25,340093034,95,1 +178452970,25,3330358736,42,1 +178452970,25,3330358736,41,1 +70634828,49,3111603340,44,1 +70634828,49,3111603340,45,1 +157087137,73,532328014,99,1 +157087137,73,340093034,95,1 +71271700,27,340093034,95,1 +157087137,73,303926772,99,1 +1208566436,62,70634828,55,1 +1208566436,62,70634828,53,1 +1208566436,62,70634828,52,1 +1208566436,62,532328014,99,1 +1208566436,62,517675473,92,1 +1208566436,62,471121089,93,1 +1208566436,62,395736790,95,1 +1208566436,62,340093034,95,1 +1208566436,62,331545755,90,1 +1208566436,62,3191869223,91,1 +1208566436,62,3111603340,55,1 +1208566436,62,3111603340,54,1 +1208566436,62,3111603340,52,1 +70634828,7,214851100,44,1 +70634828,7,214851100,50,1 +70634828,7,214851100,53,1 +70634828,7,2326722141,90,1 +1208566436,62,728969035,93,1 +1247902451,9,29223617,95,1 +1247902451,9,340093034,95,1 +1444449910,20,214851100,47,1 +1444449910,20,214851100,54,1 +1444449910,20,214851100,53,1 +1444449910,20,214851100,52,1 +1444449910,20,214851100,51,1 +1444449910,20,214851100,50,1 +1444449910,20,214851100,49,1 +1444449910,20,214851100,48,1 +1444449910,20,214851100,46,1 +1247902451,9,395736790,95,1 +1444449910,20,16210433,92,1 +13854344,9,591350440,91,1 +1253552935,9,728969035,93,1 +70634828,55,3111603340,44,1 +70634828,55,3111603340,45,1 +1247902451,9,591350440,91,1 +1247902451,9,532328014,99,1 +70634828,7,2337727838,90,1 +70634828,7,25980377,39,1 +70634828,7,25980377,40,1 +71271700,27,3111603340,45,1 +71271700,27,2326722141,90,1 +71271700,27,2337727838,90,1 +71271700,27,25980377,39,1 +71271700,27,25980377,40,1 +71271700,27,29223617,95,1 +71271700,27,303926772,99,1 +71271700,27,3111603340,44,1 +71271700,27,3111603340,47,1 +71271700,27,214851100,53,1 +71271700,27,3111603340,49,1 +71271700,27,3111603340,51,1 +71271700,27,3111603340,52,1 +71271700,27,3111603340,54,1 +71271700,27,331545755,90,1 +71271700,27,3330358736,39,1 +71271700,27,3330358736,43,1 +71271700,27,214851100,54,1 +71271700,27,214851100,52,1 +70634828,7,29223617,95,1 +70634828,7,3330358736,40,1 +70634828,7,303926772,99,1 +70634828,7,3111603340,44,1 +70634828,7,3111603340,45,1 +70634828,7,3111603340,50,1 +70634828,7,3111603340,53,1 +70634828,7,331545755,90,1 +70634828,7,3330358736,39,1 +70634828,7,340093034,95,1 +71271700,27,214851100,51,1 +70634828,7,395736790,95,1 +70634828,7,532328014,99,1 +71271700,27,214851100,44,1 +71271700,27,214851100,47,1 +71271700,27,214851100,48,1 +71271700,27,214851100,49,1 +71271700,27,214851100,50,1 +1444449910,20,214851100,55,1 +1444449910,20,2326722141,90,1 +70634828,55,214851100,44,1 +1452048,11,2327605629,94,1 +70634828,53,3111603340,44,1 +70634828,53,3111603340,45,1 +1452048,11,29223617,95,1 +70634828,53,3111603340,51,1 +1452048,11,2349705416,94,1 +1452048,11,2349179532,93,1 +1452048,11,2336923756,91,1 +1452048,11,2326722141,90,1 +1452048,11,3191869223,91,1 +1444449910,20,728969035,93,1 +1444449910,20,70634828,55,1 +1444449910,20,70634828,54,1 +1444449910,20,70634828,53,1 +1444449910,20,70634828,52,1 +1444449910,20,70634828,51,1 +1444449910,20,70634828,50,1 +1452048,11,303926772,99,1 +1452048,11,331545755,90,1 +1444449910,20,70634828,46,1 +1476953321,10,2337727838,90,1 +157087137,73,29223617,95,1 +1524794108,9,2326722141,90,1 +1476953321,10,517675473,92,1 +1476953321,10,340093034,95,1 +1476953321,10,303926772,99,1 +70634828,53,214851100,44,1 +1476953321,10,29223617,95,1 +1476953321,10,2327605629,94,1 +1452048,11,340093034,95,1 +1452048,30,395736790,95,1 +1452048,30,340093034,95,1 +1452048,30,303926772,99,1 +1452048,30,29223617,95,1 +1452048,11,532328014,99,1 +1452048,11,517675473,92,1 +1452048,11,395736790,95,1 +1444449910,20,70634828,49,1 +1444449910,20,70634828,45,1 +1444449910,20,2327605629,94,1 +1444449910,20,25980377,43,1 +1444449910,20,3111603340,49,1 +1444449910,20,3111603340,48,1 +1444449910,20,3111603340,47,1 +1444449910,20,3111603340,45,1 +1444449910,20,3111603340,44,1 +1444449910,20,303926772,99,1 +1444449910,20,29223617,95,1 +1444449910,20,25980377,42,1 +1444449910,20,3111603340,51,1 +1444449910,20,25980377,41,1 +1444449910,20,25980377,40,1 +1444449910,20,25980377,39,1 +1444449910,20,2349705416,94,1 +1444449910,20,2349179532,93,1 +1444449910,20,2337727838,90,1 +1444449910,20,2336923756,91,1 +1444449910,20,3111603340,50,1 +70634828,54,3111603340,45,1 +1444449910,20,70634828,44,1 +1444449910,20,3330358736,40,1 +1444449910,20,532328014,99,1 +70634828,54,214851100,44,1 +1444449910,20,517675473,92,1 +1444449910,20,471121089,93,1 +1444449910,20,395736790,95,1 +1444449910,20,340093034,95,1 +1444449910,20,3330358736,43,1 +1444449910,20,3330358736,39,1 +70634828,54,3111603340,44,1 +1444449910,20,3330358736,38,1 +1444449910,20,331545755,90,1 +1444449910,20,3191869223,91,1 +1444449910,20,3111603340,55,1 +1444449910,20,3111603340,54,1 +1444449910,20,3111603340,53,1 +1444449910,20,3111603340,52,1 +410030851,27,70634828,47,1 +410030851,27,3111603340,47,1 +410030851,27,70634828,45,1 +3118140206,68,214851100,51,1 +247297633,18,214851100,48,1 +247297633,18,214851100,47,1 +247297633,18,214851100,46,1 +247297633,18,214851100,45,1 +247297633,18,16210433,92,1 +247297633,18,16116663,92,1 +3111603340,50,70634828,44,1 +3111603340,50,70634828,45,1 +2448521375,25,70634828,55,1 +2448521375,25,70634828,54,1 +2448521375,25,70634828,51,1 +3111603340,50,70634828,53,1 +3111603340,50,70634828,55,1 +3111603340,51,214851100,44,1 +3111603340,51,214851100,45,1 +2448521375,25,70634828,50,1 +2448521375,25,70634828,48,1 +247297633,18,214851100,51,1 +247297633,18,214851100,52,1 +3111603340,50,3111603340,55,1 +247297633,18,25980377,41,1 +247297633,18,3111603340,48,1 +247297633,18,3111603340,47,1 +247297633,18,3111603340,46,1 +247297633,18,3111603340,45,1 +247297633,18,303926772,99,1 +247297633,18,29223617,95,1 +247297633,18,25980377,43,1 +247297633,18,25980377,39,1 +247297633,18,214851100,54,1 +247297633,18,25980377,38,1 +247297633,18,2349705416,94,1 +247297633,18,2349179532,93,1 +247297633,18,2337727838,90,1 +247297633,18,2336923756,91,1 +247297633,18,2326722141,90,1 +247297633,18,214851100,55,1 +2448521375,25,70634828,47,1 +2448521375,25,70634828,46,1 +3111603340,51,214851100,54,1 +2448521375,25,25980377,38,1 +2448521375,25,25980377,43,1 +3111603340,51,70634828,44,1 +3111603340,51,70634828,45,1 +2448521375,25,25980377,42,1 +2448521375,25,25980377,41,1 +2448521375,25,25980377,40,1 +3111603340,51,70634828,53,1 +3111603340,51,70634828,55,1 +2448521375,25,303926772,99,1 +3111603340,52,214851100,44,1 +3111603340,52,214851100,45,1 +2448521375,25,2337727838,90,1 +2448521375,25,2326722141,90,1 +2448521375,25,214851100,54,1 +2448521375,25,214851100,53,1 +2448521375,25,214851100,52,1 +2448521375,25,29223617,95,1 +2448521375,25,3111603340,44,1 +2448521375,25,70634828,45,1 +2448521375,25,3330358736,38,1 +2448521375,25,532328014,99,1 +2448521375,25,395736790,95,1 +2448521375,25,340093034,95,1 +2448521375,25,3330358736,43,1 +2448521375,25,3330358736,42,1 +2448521375,25,3330358736,41,1 +2448521375,25,3330358736,40,1 +2448521375,25,331545755,90,1 +2448521375,25,3111603340,46,1 +2448521375,25,3111603340,55,1 +2448521375,25,3111603340,53,1 +2448521375,25,3111603340,52,1 +2448521375,25,3111603340,51,1 +2448521375,25,3111603340,50,1 +2448521375,25,3111603340,48,1 +2448521375,25,3111603340,47,1 +3111603340,50,214851100,45,1 +3111603340,50,214851100,44,1 +247297633,18,3111603340,49,1 +25980377,38,3111603340,55,1 +25980377,39,3111603340,55,1 +25980377,39,3111603340,52,1 +25980377,39,214851100,55,1 +25980377,39,214851100,52,1 +25980377,38,70634828,52,1 +25980377,38,395736790,95,1 +25980377,38,340093034,95,1 +25980377,38,3111603340,52,1 +25980377,39,340093034,95,1 +25980377,38,29223617,95,1 +25980377,38,214851100,55,1 +25980377,38,214851100,52,1 +3111603340,48,70634828,44,1 +3111603340,48,70634828,45,1 +25685135,11,532328014,99,1 +25685135,11,517675473,92,1 +25980377,39,3330358736,40,1 +25980377,39,395736790,95,1 +25685135,11,395736790,95,1 +25980377,40,70634828,52,1 +3111603340,47,70634828,45,1 +25980377,43,3111603340,52,1 +25980377,43,29223617,95,1 +25980377,43,214851100,55,1 +25980377,43,214851100,52,1 +3111603340,48,214851100,44,1 +3111603340,48,214851100,45,1 +25980377,40,395736790,95,1 +25980377,39,70634828,52,1 +25980377,40,340093034,95,1 +25980377,40,3330358736,40,1 +25980377,40,3111603340,55,1 +25980377,40,3111603340,52,1 +25980377,40,29223617,95,1 +25980377,40,214851100,55,1 +25980377,40,214851100,52,1 +25685135,11,471121089,93,1 +25685135,11,340093034,95,1 +247297633,18,3111603340,51,1 +247297633,18,3330358736,38,1 +247297633,18,517675473,92,1 +247297633,18,471121089,93,1 +247297633,18,395736790,95,1 +247297633,18,340093034,95,1 +247297633,18,3330358736,43,1 +247297633,18,3330358736,42,1 +247297633,18,3330358736,41,1 +247297633,18,331545755,90,1 +247297633,18,70634828,44,1 +247297633,18,3191869223,91,1 +3111603340,49,70634828,44,1 +3111603340,49,70634828,45,1 +247297633,18,3111603340,55,1 +247297633,18,3111603340,54,1 +247297633,18,3111603340,53,1 +247297633,18,3111603340,52,1 +247297633,18,532328014,99,1 +247297633,18,70634828,45,1 +25685135,11,3191869223,91,1 +25685135,11,2336923756,91,1 +3111603340,49,214851100,44,1 +3111603340,49,214851100,45,1 +25685135,11,303926772,99,1 +25685135,11,29223617,95,1 +25685135,11,2349705416,94,1 +25685135,11,2349179532,93,1 +25685135,11,2337727838,90,1 +25685135,11,2326722141,90,1 +247297633,18,70634828,47,1 +247297633,18,728969035,93,1 +247297633,18,70634828,55,1 +247297633,18,70634828,54,1 +247297633,18,70634828,53,1 +247297633,18,70634828,52,1 +247297633,18,70634828,51,1 +247297633,18,70634828,48,1 +2448521375,25,214851100,51,1 +2448521375,25,214851100,50,1 +2448521375,25,214851100,49,1 +2352421906,17,591350440,91,1 +3111603340,55,214851100,45,1 +2353389310,15,2326722141,90,1 +2353389310,15,214851100,51,1 +2353389310,15,214851100,49,1 +2353389310,15,214851100,47,1 +2353389310,15,214851100,46,1 +2352421906,17,728969035,93,1 +2352421906,17,517675473,92,1 +2353389310,15,2337727838,90,1 +2352421906,17,471121089,93,1 +2352421906,17,395736790,95,1 +2352421906,17,340093034,95,1 +2352421906,17,303926772,99,1 +2352421906,17,29223617,95,1 +2352421906,17,2349705416,94,1 +2352421906,17,2349179532,93,1 +3111603340,55,214851100,44,1 +2353389310,15,25980377,38,1 +2352421906,17,2336923756,91,1 +2353389310,15,3111603340,48,1 +2353389310,15,70634828,44,1 +2353389310,15,532328014,99,1 +2353389310,15,395736790,95,1 +2353389310,15,340093034,95,1 +2353389310,15,3330358736,38,1 +2353389310,15,331545755,90,1 +2353389310,15,3111603340,51,1 +3111603340,54,340093034,95,1 +3111603340,54,70634828,53,1 +2353389310,15,3111603340,47,1 +2353389310,15,3111603340,45,1 +3111603340,54,70634828,44,1 +3111603340,54,70634828,45,1 +2353389310,15,3111603340,44,1 +2353389310,15,303926772,99,1 +2353389310,15,29223617,95,1 +2352421906,17,2337727838,90,1 +2352421906,17,2327605629,94,1 +2353389310,15,70634828,46,1 +3111603340,7,303926772,99,1 +3111603340,7,2326722141,90,1 +3111603340,7,2337727838,90,1 +3111603340,7,25980377,38,1 +3111603340,7,25980377,39,1 +3111603340,7,25980377,40,1 +3111603340,7,25980377,43,1 +3111603340,7,29223617,95,1 +3111603340,7,331545755,90,1 +3111603340,7,214851100,50,1 +3111603340,7,3330358736,39,1 +3111603340,7,3330358736,40,1 +3111603340,7,340093034,95,1 +3111603340,7,395736790,95,1 +3111603340,7,70634828,44,1 +3111603340,7,70634828,45,1 +3111603340,7,70634828,50,1 +3111603340,7,214851100,51,1 +3111603340,7,214851100,45,1 +2352421906,17,16210433,92,1 +2351592628,10,2326722141,90,1 +2352421906,17,16116663,92,1 +2351592628,10,728969035,93,1 +2351592628,10,395736790,95,1 +2351592628,10,340093034,95,1 +2351592628,10,29223617,95,1 +2351592628,10,2337727838,90,1 +2351592628,10,2327605629,94,1 +3111603340,55,70634828,44,1 +3111603340,7,214851100,44,1 +3111603340,55,70634828,45,1 +2351592628,10,16210433,92,1 +2350544061,9,395736790,95,1 +3111603340,55,70634828,52,1 +2350544061,9,2327605629,94,1 +2350443114,74,532328014,99,1 +2350443114,74,395736790,95,1 +2353389310,15,70634828,45,1 +2353389310,15,70634828,48,1 +2448521375,25,214851100,45,1 +3111603340,53,214851100,45,1 +2353549582,23,591350440,91,1 +2353549582,23,532328014,99,1 +3111603340,52,70634828,52,1 +2353549582,23,517675473,92,1 +2353549582,23,471121089,93,1 +2353549582,23,395736790,95,1 +3111603340,53,214851100,44,1 +2353549582,23,340093034,95,1 +3111603340,52,70634828,44,1 +2353549582,23,3330358736,43,1 +2353549582,23,3330358736,42,1 +2353549582,23,3330358736,40,1 +2353549582,23,3330358736,39,1 +2353549582,23,3330358736,38,1 +2353549582,23,331545755,90,1 +2353549582,23,3191869223,91,1 +3111603340,52,70634828,45,1 +2353549582,23,70634828,44,1 +2353549582,23,3111603340,54,1 +2353549582,23,728969035,93,1 +2424229017,9,591350440,91,1 +2424229017,26,532328014,99,1 +2424229017,26,395736790,95,1 +2424229017,26,340093034,95,1 +2424229017,26,303926772,99,1 +2424229017,26,29223617,95,1 +2382390052,9,517675473,92,1 +2353549582,23,70634828,55,1 +2353549582,23,70634828,45,1 +2353549582,23,70634828,54,1 +2353549582,23,70634828,53,1 +2353549582,23,70634828,52,1 +2353549582,23,70634828,50,1 +2353549582,23,70634828,49,1 +2353549582,23,70634828,48,1 +2353549582,23,70634828,46,1 +2353549582,23,3111603340,55,1 +2353549582,23,3111603340,53,1 +2353389310,15,70634828,51,1 +2353549582,23,214851100,54,1 +2353549582,23,2336923756,91,1 +3111603340,53,70634828,54,1 +2353549582,23,2327605629,94,1 +3111603340,54,214851100,44,1 +3111603340,54,214851100,45,1 +2353549582,23,2326722141,90,1 +2353549582,23,214851100,55,1 +2353549582,23,214851100,53,1 +2353549582,23,2349179532,93,1 +2353549582,23,214851100,52,1 +2353549582,23,214851100,50,1 +2353549582,23,214851100,47,1 +2353549582,23,214851100,46,1 +2353549582,23,214851100,45,1 +2353549582,23,16210433,92,1 +2353549582,23,16116663,92,1 +2353549582,23,2337727838,90,1 +2353549582,23,2349705416,94,1 +2353549582,23,3111603340,52,1 +2353549582,23,3111603340,44,1 +2353549582,23,3111603340,51,1 +2353549582,23,3111603340,50,1 +2353549582,23,3111603340,49,1 +2353549582,23,3111603340,48,1 +2353549582,23,3111603340,47,1 +2353549582,23,3111603340,46,1 +2353549582,23,3111603340,45,1 +2353549582,23,303926772,99,1 +3111603340,53,70634828,45,1 +2353549582,23,29223617,95,1 +2353549582,23,25980377,43,1 +2353549582,23,25980377,42,1 +2353549582,23,25980377,41,1 +2353549582,23,25980377,39,1 +2353549582,23,25980377,38,1 +3111603340,53,70634828,44,1 +3111603340,47,70634828,44,1 +25980377,43,3111603340,55,1 +25980377,43,340093034,95,1 +29954548,18,25980377,42,1 +29954548,18,2336923756,91,1 +29954548,18,2337727838,90,1 +29954548,18,2349179532,93,1 +29954548,18,2349705416,94,1 +29954548,18,25980377,38,1 +29954548,18,25980377,39,1 +29954548,18,25980377,41,1 +29954548,18,25980377,43,1 +29954548,18,2326722141,90,1 +29954548,18,29223617,95,1 +29954548,18,3111603340,45,1 +29954548,18,3111603340,47,1 +29954548,18,3111603340,48,1 +29954548,18,3111603340,49,1 +29954548,18,3111603340,52,1 +29954548,18,3111603340,53,1 +29954548,18,2327605629,94,1 +29954548,18,214851100,55,1 +29954548,18,3111603340,55,1 +2989649772,71,70634828,54,1 +2989649772,71,395736790,95,1 +2989649772,71,532328014,99,1 +2989649772,71,70634828,44,1 +2989649772,71,70634828,47,1 +2989649772,71,70634828,48,1 +2989649772,71,70634828,50,1 +2989649772,71,70634828,52,1 +2989649772,71,70634828,55,1 +29954548,18,214851100,54,1 +29954548,18,16116663,92,1 +29954548,18,16210433,92,1 +29954548,18,214851100,46,1 +29954548,18,214851100,47,1 +29954548,18,214851100,49,1 +29954548,18,214851100,52,1 +29954548,18,214851100,53,1 +29954548,18,3111603340,54,1 +29954548,18,3191869223,91,1 +2989649772,71,3330358736,43,1 +300186799,11,2337727838,90,1 +300186799,10,395736790,95,1 +300186799,10,471121089,93,1 +300186799,10,532328014,99,1 +300186799,10,728969035,93,1 +300186799,11,16116663,92,1 +300186799,11,2326722141,90,1 +300186799,11,2336923756,91,1 +300186799,11,2349705416,94,1 +300186799,10,29223617,95,1 +300186799,11,29223617,95,1 +300186799,11,303926772,99,1 +300186799,11,3191869223,91,1 +300186799,11,331545755,90,1 +300186799,11,340093034,95,1 +300186799,11,395736790,95,1 +300186799,11,517675473,92,1 +300186799,10,340093034,95,1 +300186799,10,2349179532,93,1 +29954548,18,331545755,90,1 +29954548,18,70634828,44,1 +29954548,18,3330358736,39,1 +29954548,18,3330358736,41,1 +29954548,18,3330358736,43,1 +29954548,18,340093034,95,1 +29954548,18,395736790,95,1 +29954548,18,517675473,92,1 +29954548,18,532328014,99,1 +29954548,18,70634828,45,1 +300186799,10,2337727838,90,1 +29954548,18,70634828,46,1 +29954548,18,70634828,48,1 +29954548,18,70634828,52,1 +29954548,18,70634828,53,1 +29954548,18,70634828,54,1 +300186799,10,2326722141,90,1 +300186799,10,2327605629,94,1 +2989649772,71,340093034,95,1 +2989649772,71,3330358736,42,1 +3010580773,9,3191869223,91,1 +29452962,9,2336923756,91,1 +286335813,72,214851100,54,1 +286335813,72,214851100,52,1 +286335813,72,214851100,50,1 +280281699,60,70634828,55,1 +280281699,60,70634828,54,1 +280281699,60,70634828,53,1 +2944593082,9,2336923756,91,1 +2962064709,9,591350440,91,1 +286335813,72,29223617,95,1 +2978926070,8,16210433,92,1 +2978926070,8,2326722141,90,1 +2978926070,8,2327605629,94,1 +2978926070,8,2336923756,91,1 +2978926070,8,2337727838,90,1 +2978926070,8,2349705416,94,1 +2978926070,8,29223617,95,1 +286335813,72,214851100,55,1 +286335813,72,303926772,99,1 +2978926070,8,3191869223,91,1 +286335813,72,70634828,52,1 +28667694,10,517675473,92,1 +28667694,10,395736790,95,1 +28667694,10,340093034,95,1 +28667694,10,29223617,95,1 +28667694,10,2327605629,94,1 +286335813,72,70634828,55,1 +286335813,72,70634828,53,1 +286335813,72,70634828,51,1 +286335813,72,3111603340,50,1 +286335813,72,70634828,50,1 +286335813,72,532328014,99,1 +286335813,72,395736790,95,1 +286335813,72,340093034,95,1 +286335813,72,3111603340,55,1 +286335813,72,3111603340,54,1 +286335813,72,3111603340,53,1 +2978926070,8,303926772,99,1 +2978926070,8,331545755,90,1 +2989649772,71,3330358736,41,1 +2989649772,71,3111603340,49,1 +2989649772,71,25980377,42,1 +2989649772,71,25980377,43,1 +2989649772,71,29223617,95,1 +2989649772,71,303926772,99,1 +2989649772,71,3111603340,45,1 +2989649772,71,3111603340,46,1 +2989649772,71,3111603340,47,1 +2989649772,71,3111603340,50,1 +2989649772,71,25980377,40,1 +2989649772,71,3111603340,52,1 +2989649772,71,3111603340,53,1 +2989649772,71,3111603340,54,1 +2989649772,71,3111603340,55,1 +2989649772,71,331545755,90,1 +2989649772,71,3330358736,38,1 +2989649772,71,3330358736,39,1 +2989649772,71,25980377,41,1 +2989649772,71,25980377,38,1 +2978926070,8,340093034,95,1 +2989649772,71,214851100,46,1 +2978926070,8,395736790,95,1 +2978926070,8,471121089,93,1 +2978926070,8,517675473,92,1 +2978926070,8,532328014,99,1 +2978926070,8,591350440,91,1 +2989649772,71,214851100,44,1 +2989649772,71,214851100,45,1 +2989649772,71,214851100,48,1 +2989649772,71,2337727838,90,1 +2989649772,71,214851100,50,1 +2989649772,71,214851100,51,1 +2989649772,71,214851100,52,1 +2989649772,71,214851100,53,1 +2989649772,71,214851100,54,1 +2989649772,71,214851100,55,1 +2989649772,71,2326722141,90,1 +300186799,11,591350440,91,1 +3011933107,9,728969035,93,1 +25980377,43,395736790,95,1 +2728939,63,3111603340,55,1 +2728939,71,214851100,44,1 +2728939,63,70634828,53,1 +2728939,63,70634828,51,1 +2728939,63,70634828,50,1 +2728939,63,532328014,99,1 +2728939,63,395736790,95,1 +2728939,63,340093034,95,1 +2728939,63,3111603340,53,1 +2728939,71,214851100,47,1 +2728939,63,3111603340,51,1 +2728939,63,3111603340,50,1 +2728939,63,303926772,99,1 +2728939,63,29223617,95,1 +2728939,63,214851100,55,1 +2728939,63,214851100,54,1 +2728939,63,214851100,51,1 +2728939,71,214851100,46,1 +2728939,71,214851100,48,1 +27042865,9,395736790,95,1 +2728939,71,2337727838,90,1 +2728939,71,303926772,99,1 +2728939,71,29223617,95,1 +2728939,71,25980377,43,1 +3111603340,45,70634828,44,1 +3111603340,45,70634828,45,1 +2728939,71,25980377,42,1 +2728939,71,25980377,40,1 +2728939,71,2326722141,90,1 +2728939,71,214851100,50,1 +2728939,71,214851100,55,1 +2728939,71,214851100,54,1 +3111603340,46,214851100,44,1 +3111603340,46,214851100,45,1 +2728939,71,214851100,53,1 +2728939,71,214851100,52,1 +2728939,71,214851100,51,1 +2728939,63,214851100,50,1 +26895145,9,591350440,91,1 +2728939,71,3111603340,46,1 +26487185,62,2327605629,94,1 +26487185,62,3111603340,51,1 +26487185,62,3111603340,50,1 +26487185,62,29223617,95,1 +26487185,62,2349705416,94,1 +26487185,62,2349179532,93,1 +26487185,62,2337727838,90,1 +26487185,62,2336923756,91,1 +1,10,29223617,95,1 +26487185,62,3111603340,53,1 +26487185,62,2326722141,90,1 +26487185,62,214851100,54,1 +26487185,62,214851100,53,1 +26487185,62,214851100,50,1 +26487185,62,16210433,92,1 +26487185,62,16116663,92,1 +25980377,43,70634828,52,1 +26487185,62,3111603340,52,1 +26487185,62,3111603340,55,1 +26895145,9,395736790,95,1 +26487185,62,70634828,54,1 +26895145,9,340093034,95,1 +3111603340,46,70634828,44,1 +3111603340,46,70634828,45,1 +26895145,9,303926772,99,1 +265133300,9,3191869223,91,1 +26487185,62,728969035,93,1 +26487185,62,70634828,55,1 +26487185,62,70634828,51,1 +26487185,62,340093034,95,1 +3111603340,47,214851100,44,1 +3111603340,47,214851100,45,1 +26487185,62,70634828,50,1 +26487185,62,591350440,91,1 +26487185,62,532328014,99,1 +26487185,62,517675473,92,1 +26487185,62,395736790,95,1 +2728939,71,3111603340,44,1 +2728939,71,3111603340,47,1 +3031766093,9,29223617,95,1 +280281699,60,3111603340,48,1 +280281699,60,331545755,90,1 +280281699,60,3111603340,55,1 +280281699,60,3111603340,54,1 +280281699,60,3111603340,53,1 +280281699,60,3111603340,52,1 +280281699,60,3111603340,51,1 +280281699,60,3111603340,50,1 +280281699,60,3111603340,47,1 +280281699,60,3330358736,39,1 +280281699,60,3111603340,44,1 +280281699,60,303926772,99,1 +280281699,60,29223617,95,1 +280281699,60,25980377,42,1 +280281699,60,25980377,41,1 +280281699,60,25980377,39,1 +280281699,60,2337727838,90,1 +280281699,60,3330358736,38,1 +3111603340,44,214851100,45,1 +280281699,60,214851100,55,1 +280281699,60,70634828,45,1 +3031766093,9,340093034,95,1 +3031766093,9,591350440,91,1 +280281699,60,70634828,51,1 +280281699,60,70634828,50,1 +280281699,60,70634828,48,1 +280281699,60,70634828,46,1 +303926772,99,29223617,95,1 +280281699,60,70634828,44,1 +3111603340,44,214851100,44,1 +280281699,60,532328014,99,1 +280281699,60,395736790,95,1 +280281699,60,340093034,95,1 +280281699,60,3330358736,43,1 +280281699,60,3330358736,42,1 +280281699,60,3330358736,41,1 +280281699,60,3330358736,40,1 +280281699,60,2326722141,90,1 +280281699,60,214851100,54,1 +2728939,71,3111603340,48,1 +2728939,71,3330358736,38,1 +2728939,71,532328014,99,1 +2728939,71,395736790,95,1 +2728939,71,340093034,95,1 +2728939,71,3330358736,43,1 +2728939,71,3330358736,42,1 +2728939,71,3330358736,41,1 +2728939,71,3330358736,40,1 +2728939,71,331545755,90,1 +2728939,71,70634828,46,1 +2728939,71,3111603340,55,1 +2728939,71,3111603340,54,1 +2728939,71,3111603340,53,1 +2728939,71,3111603340,52,1 +2728939,71,3111603340,51,1 +2728939,71,3111603340,50,1 +2728939,71,3111603340,49,1 +2728939,71,70634828,44,1 +2728939,71,70634828,49,1 +280281699,60,214851100,53,1 +3111603340,44,70634828,45,1 +280281699,60,214851100,52,1 +280281699,60,214851100,51,1 +280281699,60,214851100,50,1 +280281699,60,214851100,49,1 +280281699,60,214851100,48,1 +280281699,60,214851100,45,1 +3111603340,44,70634828,44,1 +2728939,71,70634828,55,1 +2728939,71,70634828,50,1 +2728939,71,70634828,54,1 +3111603340,44,70634828,52,1 +2728939,71,70634828,53,1 +2728939,71,70634828,52,1 +3111603340,45,214851100,44,1 +3111603340,45,214851100,45,1 +2728939,71,70634828,51,1 +3118140206,68,214851100,50,1 +3118140206,68,214851100,52,1 +410030851,27,532328014,99,1 +3118140206,68,214851100,53,1 +3358892171,64,25980377,41,1 +3358892171,64,25980377,42,1 +3358892171,64,25980377,43,1 +3358892171,64,29223617,95,1 +3358892171,64,303926772,99,1 +3358892171,64,3111603340,44,1 +3358892171,64,3111603340,45,1 +3358892171,64,3111603340,47,1 +3358892171,64,3111603340,48,1 +3358892171,64,3111603340,49,1 +3358892171,64,3111603340,50,1 +3358892171,64,3111603340,51,1 +3358892171,64,3111603340,52,1 +3358892171,64,3111603340,53,1 +3358892171,64,3111603340,54,1 +3358892171,64,3111603340,55,1 +3358892171,64,331545755,90,1 +3358892171,64,25980377,40,1 +3358892171,64,25980377,39,1 +3358892171,64,25980377,38,1 +3358892171,64,214851100,46,1 +2326655246,9,340093034,95,1 +2326520912,10,728969035,93,1 +3330358736,43,70634828,52,1 +2326520912,10,395736790,95,1 +2326520912,10,3191869223,91,1 +3330358736,43,70634828,55,1 +3358892171,64,214851100,44,1 +3358892171,64,214851100,49,1 +3358892171,64,2337727838,90,1 +3358892171,64,214851100,50,1 +3358892171,64,214851100,51,1 +3358892171,64,214851100,52,1 +3358892171,64,214851100,53,1 +3358892171,64,214851100,54,1 +3358892171,64,214851100,55,1 +3358892171,64,2326722141,90,1 +3358892171,64,3330358736,38,1 +3358892171,64,3330358736,39,1 +3358892171,64,3330358736,40,1 +2326520912,10,16210433,92,1 +3378606529,9,2337727838,90,1 +3378606529,9,395736790,95,1 +33822284,9,29223617,95,1 +2326520912,10,29223617,95,1 +33822284,9,532328014,99,1 +2326520912,10,2336923756,91,1 +2326520912,10,2326722141,90,1 +2323069589,9,395736790,95,1 +3362063909,10,395736790,95,1 +2323069589,9,340093034,95,1 +2323069589,9,331545755,90,1 +2323069589,9,303926772,99,1 +2323069589,9,29223617,95,1 +2316150629,10,591350440,91,1 +2316150629,10,340093034,95,1 +2316150629,10,331545755,90,1 +3362063909,10,591350440,91,1 +3362063909,10,340093034,95,1 +3358892171,64,3330358736,42,1 +3358892171,64,70634828,48,1 +3358892171,64,3330358736,43,1 +3358892171,64,340093034,95,1 +3358892171,64,395736790,95,1 +3358892171,64,532328014,99,1 +3358892171,64,70634828,44,1 +3358892171,64,70634828,46,1 +3358892171,64,70634828,47,1 +3358892171,64,70634828,49,1 +3362063909,10,2349179532,93,1 +3358892171,64,70634828,50,1 +3358892171,64,70634828,51,1 +3358892171,64,70634828,52,1 +3358892171,64,70634828,53,1 +3358892171,64,70634828,54,1 +3358892171,64,70634828,55,1 +3362063909,10,16210433,92,1 +2326655246,9,395736790,95,1 +3330358736,43,395736790,95,1 +3330358736,43,340093034,95,1 +2337952436,24,591350440,91,1 +2345982379,67,214851100,46,1 +2345982379,67,214851100,45,1 +2345982379,67,214851100,44,1 +2344471631,9,591350440,91,1 +23421122,9,340093034,95,1 +2341774429,9,2337727838,90,1 +2337952436,24,728969035,93,1 +2337952436,24,532328014,99,1 +2345982379,67,214851100,49,1 +2337952436,24,517675473,92,1 +2337952436,24,395736790,95,1 +2337952436,24,340093034,95,1 +2337952436,24,331545755,90,1 +2337952436,24,3191869223,91,1 +2337952436,24,303926772,99,1 +2337952436,24,29223617,95,1 +2345982379,67,214851100,47,1 +2345982379,67,214851100,50,1 +2337952436,24,2349179532,93,1 +2345982379,67,25980377,39,1 +3330358736,40,340093034,95,1 +3330358736,40,395736790,95,1 +2345982379,67,303926772,99,1 +2345982379,67,29223617,95,1 +2345982379,67,25980377,42,1 +3330358736,40,70634828,52,1 +2345982379,67,25980377,40,1 +3330358736,40,70634828,55,1 +2345982379,67,214851100,51,1 +2345982379,67,25980377,38,1 +2345982379,67,2337727838,90,1 +2345982379,67,2326722141,90,1 +2345982379,67,214851100,55,1 +2345982379,67,214851100,54,1 +2345982379,67,214851100,53,1 +2345982379,67,214851100,52,1 +2337952436,24,2349705416,94,1 +2337952436,24,2336923756,91,1 +3330358736,43,3111603340,55,1 +2327605629,94,3111603340,50,1 +2333843479,70,2336923756,91,1 +2333843479,70,2327605629,94,1 +2333843479,70,16210433,92,1 +2333843479,70,16116663,92,1 +2327605629,94,70634828,55,1 +2327605629,94,70634828,54,1 +2327605629,94,70634828,51,1 +2327605629,94,2337727838,90,1 +2333843479,70,29223617,95,1 +3330358736,43,214851100,52,1 +2327605629,94,2326722141,90,1 +3330358736,43,29223617,95,1 +2326903290,9,395736790,95,1 +3330358736,43,3111603340,52,1 +2326722141,90,2337727838,90,1 +2326655246,9,517675473,92,1 +2333843479,70,2349179532,93,1 +2333843479,70,303926772,99,1 +2337952436,24,2327605629,94,1 +2334430421,73,303926772,99,1 +2337952436,24,16210433,92,1 +2336923756,91,3111603340,51,1 +2336923756,91,3111603340,50,1 +2336923756,91,214851100,51,1 +2334430421,73,532328014,99,1 +2334430421,73,395736790,95,1 +2334430421,73,340093034,95,1 +2334430421,73,29223617,95,1 +2333843479,70,3191869223,91,1 +2333843479,70,728969035,93,1 +2333843479,70,591350440,91,1 +2333843479,70,532328014,99,1 +2333843479,70,517675473,92,1 +2333843479,70,471121089,93,1 +2333843479,70,395736790,95,1 +2333843479,70,340093034,95,1 +2316150629,10,3191869223,91,1 +2316150629,10,29223617,95,1 +2316150629,10,2336923756,91,1 +2314659369,20,2327605629,94,1 +2314659369,20,25980377,41,1 +2314659369,20,25980377,40,1 +2314659369,20,25980377,39,1 +2314659369,20,25980377,38,1 +2314659369,20,2349705416,94,1 +2314659369,20,2337727838,90,1 +2314659369,20,2336923756,91,1 +2314659369,20,2326722141,90,1 +2314659369,20,25980377,43,1 +2314659369,20,214851100,55,1 +2314659369,20,214851100,54,1 +2314659369,20,214851100,53,1 +2314659369,20,214851100,52,1 +2314659369,20,214851100,51,1 +2314659369,20,214851100,50,1 +2314659369,20,214851100,49,1 +2314659369,20,25980377,42,1 +2314659369,20,29223617,95,1 +2314659369,20,214851100,46,1 +38852110,10,29223617,95,1 +385766513,24,340093034,95,1 +385766513,24,395736790,95,1 +385766513,24,471121089,93,1 +385766513,24,517675473,92,1 +385766513,24,532328014,99,1 +385766513,24,728969035,93,1 +38852110,10,2326722141,90,1 +38852110,10,395736790,95,1 +2314659369,20,303926772,99,1 +38852110,10,591350440,91,1 +2314659369,20,3111603340,49,1 +2314659369,20,3111603340,48,1 +2314659369,20,3111603340,47,1 +2314659369,20,3111603340,46,1 +2314659369,20,3111603340,45,1 +2314659369,20,3111603340,44,1 +2314659369,20,214851100,47,1 +2314659369,20,16210433,92,1 +385766513,24,3191869223,91,1 +410030851,27,3111603340,54,1 +410030851,27,303926772,99,1 +410030851,27,3111603340,46,1 +28667694,10,728969035,93,1 +410030851,27,3111603340,49,1 +410030851,27,3111603340,50,1 +410030851,27,3111603340,51,1 +410030851,27,3111603340,53,1 +410030851,27,3111603340,55,1 +410030851,27,25980377,43,1 +410030851,27,331545755,90,1 +410030851,27,3330358736,38,1 +410030851,27,3330358736,39,1 +410030851,27,3330358736,40,1 +410030851,27,3330358736,43,1 +410030851,27,340093034,95,1 +410030851,27,395736790,95,1 +410030851,27,29223617,95,1 +410030851,27,25980377,39,1 +2314659369,20,16116663,92,1 +410030851,27,214851100,48,1 +2311838590,97,395736790,95,1 +2311838590,97,340093034,95,1 +2311838590,97,303926772,99,1 +395739442,9,2337727838,90,1 +410030851,27,214851100,44,1 +410030851,27,214851100,45,1 +410030851,27,214851100,47,1 +410030851,27,214851100,49,1 +410030851,27,25980377,38,1 +410030851,27,214851100,50,1 +410030851,27,214851100,51,1 +410030851,27,214851100,53,1 +410030851,27,214851100,54,1 +410030851,27,214851100,55,1 +410030851,27,2326722141,90,1 +410030851,27,2337727838,90,1 +385766513,24,331545755,90,1 +385766513,24,303926772,99,1 +2314659369,20,70634828,55,1 +35404067,9,2336923756,91,1 +340603317,9,517675473,92,1 +3420061649,9,2337727838,90,1 +3429928077,9,331545755,90,1 +3462551351,13,29223617,95,1 +3462551351,13,340093034,95,1 +3462551351,13,395736790,95,1 +3462551351,13,532328014,99,1 +35404067,9,340093034,95,1 +2314659369,20,3330358736,38,1 +35404067,9,532328014,99,1 +35404067,9,728969035,93,1 +367669349,31,16210433,92,1 +367669349,31,214851100,52,1 +367669349,31,214851100,55,1 +367669349,31,2326722141,90,1 +367669349,31,2336923756,91,1 +2314659369,20,331545755,90,1 +2314659369,20,3330358736,39,1 +367669349,31,2349179532,93,1 +2314659369,20,70634828,46,1 +2314659369,20,70634828,54,1 +2314659369,20,70634828,53,1 +2314659369,20,70634828,52,1 +2314659369,20,70634828,51,1 +2314659369,20,70634828,50,1 +2314659369,20,70634828,49,1 +2314659369,20,70634828,47,1 +2314659369,20,70634828,45,1 +2314659369,20,3330358736,40,1 +2314659369,20,70634828,44,1 +2314659369,20,517675473,92,1 +2314659369,20,471121089,93,1 +2314659369,20,395736790,95,1 +2314659369,20,340093034,95,1 +2314659369,20,3330358736,43,1 +2314659369,20,3330358736,42,1 +367669349,31,2337727838,90,1 +367669349,31,25980377,41,1 +385766513,24,29223617,95,1 +382080545,9,303926772,99,1 +2314659369,20,3111603340,53,1 +2314659369,20,3111603340,52,1 +2314659369,20,3111603340,51,1 +2314659369,20,3111603340,50,1 +382080545,9,16210433,92,1 +382080545,9,2327605629,94,1 +382080545,9,29223617,95,1 +382080545,9,395736790,95,1 +37873062,9,29223617,95,1 +382080545,9,517675473,92,1 +382080545,9,532328014,99,1 +385766513,24,16116663,92,1 +385766513,24,2326722141,90,1 +385766513,24,2327605629,94,1 +385766513,24,2337727838,90,1 +385766513,24,2349705416,94,1 +2314659369,20,3111603340,54,1 +37873062,9,2349179532,93,1 +367669349,31,25980377,42,1 +367669349,31,340093034,95,1 +367669349,31,29223617,95,1 +367669349,31,303926772,99,1 +367669349,31,3111603340,52,1 +367669349,31,3111603340,55,1 +367669349,31,3191869223,91,1 +367669349,31,331545755,90,1 +367669349,31,3330358736,42,1 +367669349,31,395736790,95,1 +2314659369,20,3111603340,55,1 +367669349,31,517675473,92,1 +367669349,31,532328014,99,1 +367669349,31,591350440,91,1 +367669349,31,70634828,52,1 +367669349,31,70634828,55,1 +367669349,31,728969035,93,1 +2314659369,20,3191869223,91,1 +3330358736,40,3111603340,55,1 +2345982379,67,3111603340,45,1 +2345982379,67,3111603340,48,1 +3195293647,28,2327605629,94,1 +2349345463,59,2349179532,93,1 +3195293647,28,16116663,92,1 +3195293647,28,16210433,92,1 +3195293647,28,214851100,51,1 +3195293647,28,214851100,52,1 +3195293647,28,214851100,54,1 +3195293647,28,2326722141,90,1 +3195293647,28,2336923756,91,1 +2349345463,59,29223617,95,1 +3195293647,28,2337727838,90,1 +3195293647,28,2349705416,94,1 +3195293647,28,29223617,95,1 +3195293647,28,303926772,99,1 +3195293647,28,3111603340,50,1 +3195293647,28,3111603340,52,1 +3195293647,28,3111603340,53,1 +2349345463,59,2349705416,94,1 +2349345463,59,303926772,99,1 +3195293647,28,3111603340,55,1 +2349588257,10,2337727838,90,1 +2349705416,94,3111603340,51,1 +2349705416,94,3111603340,50,1 +3191869223,91,3111603340,50,1 +3191869223,91,3111603340,51,1 +2349705416,94,214851100,51,1 +2349588257,10,395736790,95,1 +2349588257,10,2349179532,93,1 +2349588257,10,16116663,92,1 +2349345463,59,3191869223,91,1 +2349349655,9,340093034,95,1 +2349345463,59,728969035,93,1 +2349345463,59,591350440,91,1 +2349345463,59,532328014,99,1 +2349345463,59,471121089,93,1 +2349345463,59,395736790,95,1 +2349345463,59,340093034,95,1 +3195293647,28,3111603340,54,1 +3195293647,28,3191869223,91,1 +2349742676,33,3111603340,47,1 +3226664625,13,340093034,95,1 +3222664794,9,2327605629,94,1 +3222821993,9,331545755,90,1 +3226232,10,29223617,95,1 +3226232,10,517675473,92,1 +3226232,10,728969035,93,1 +3226664625,13,29223617,95,1 +3226664625,13,303926772,99,1 +3226664625,13,395736790,95,1 +3203980088,10,591350440,91,1 +3226664625,13,532328014,99,1 +3226664625,28,16210433,92,1 +3226664625,28,214851100,50,1 +3226664625,28,214851100,51,1 +3226664625,28,214851100,54,1 +3226664625,28,214851100,55,1 +3226664625,28,2326722141,90,1 +3220049148,9,2337727838,90,1 +3203980088,10,471121089,93,1 +3195293647,28,331545755,90,1 +3195293647,28,70634828,54,1 +3195293647,28,340093034,95,1 +3195293647,28,395736790,95,1 +3195293647,28,471121089,93,1 +3195293647,28,517675473,92,1 +3195293647,28,532328014,99,1 +3195293647,28,70634828,50,1 +3195293647,28,70634828,51,1 +3195293647,28,70634828,55,1 +3203980088,10,395736790,95,1 +3195293647,28,728969035,93,1 +3196033145,9,2326722141,90,1 +3203980088,10,2349705416,94,1 +3203980088,10,29223617,95,1 +3203980088,10,3191869223,91,1 +3203980088,10,331545755,90,1 +3203980088,10,340093034,95,1 +2349742676,33,214851100,47,1 +2349746655,10,340093034,95,1 +3226664625,28,2349179532,93,1 +3147958370,12,395736790,95,1 +3145389278,9,340093034,95,1 +3145389278,9,395736790,95,1 +3145389278,9,532328014,99,1 +3145389278,9,591350440,91,1 +3147958370,12,29223617,95,1 +3147958370,12,303926772,99,1 +3147958370,12,340093034,95,1 +3147958370,12,532328014,99,1 +3135349256,9,591350440,91,1 +314846874,11,16116663,92,1 +314846874,11,2326722141,90,1 +314846874,11,2336923756,91,1 +314846874,11,2337727838,90,1 +314846874,11,2349179532,93,1 +314846874,11,29223617,95,1 +314846874,11,3191869223,91,1 +3145389278,9,2326722141,90,1 +3135349256,9,340093034,95,1 +314846874,11,340093034,95,1 +3118140206,68,3111603340,54,1 +3118140206,68,214851100,54,1 +3118140206,68,214851100,55,1 +3118140206,68,2326722141,90,1 +3118140206,68,29223617,95,1 +3118140206,68,303926772,99,1 +3118140206,68,3111603340,50,1 +3118140206,68,3111603340,52,1 +3118140206,68,3111603340,55,1 +3135349256,9,29223617,95,1 +3118140206,68,331545755,90,1 +3118140206,68,340093034,95,1 +3118140206,68,395736790,95,1 +3118140206,68,532328014,99,1 +3118140206,68,70634828,50,1 +3118140206,68,70634828,52,1 +3118140206,68,70634828,55,1 +314846874,11,331545755,90,1 +314846874,11,395736790,95,1 +2350443114,74,29223617,95,1 +31732840,29,395736790,95,1 +31732840,29,29223617,95,1 +31732840,29,303926772,99,1 +31732840,29,3111603340,50,1 +31732840,29,3111603340,51,1 +31732840,29,3111603340,52,1 +31732840,29,3111603340,55,1 +31732840,29,340093034,95,1 +31732840,29,532328014,99,1 +31732840,29,214851100,52,1 +31732840,29,70634828,50,1 +31732840,29,70634828,51,1 +31732840,29,70634828,52,1 +31732840,29,70634828,54,1 +3191869223,91,214851100,51,1 +2350443114,74,340093034,95,1 +2350443114,74,303926772,99,1 +31732840,29,214851100,54,1 +31732840,29,214851100,51,1 +314846874,11,471121089,93,1 +3151377261,29,3111603340,51,1 +314846874,11,591350440,91,1 +3151377261,29,214851100,50,1 +3151377261,29,214851100,51,1 +3151377261,29,214851100,52,1 +3151377261,29,214851100,55,1 +3151377261,29,29223617,95,1 +3151377261,29,3111603340,50,1 +3151377261,29,3111603340,52,1 +3151377261,29,70634828,54,1 +3151377261,29,3111603340,53,1 +3151377261,29,3111603340,55,1 +3151377261,29,340093034,95,1 +3151377261,29,395736790,95,1 +3151377261,29,532328014,99,1 +3151377261,29,70634828,51,1 +3151377261,29,70634828,52,1 +3226664625,28,2337727838,90,1 +3226664625,28,29223617,95,1 +3330358736,40,3111603340,52,1 +3330358736,38,29223617,95,1 +2348894245,11,532328014,99,1 +2348894245,11,517675473,92,1 +2348894245,11,395736790,95,1 +2348894245,11,340093034,95,1 +3330358736,38,214851100,52,1 +2348894245,11,331545755,90,1 +2348894245,11,3191869223,91,1 +2348894245,11,303926772,99,1 +2348987001,9,728969035,93,1 +2348894245,11,29223617,95,1 +2348894245,11,2349705416,94,1 +3330358736,38,3111603340,52,1 +2348894245,11,2327605629,94,1 +2348894245,11,2326722141,90,1 +3330358736,38,3111603340,55,1 +3330358736,38,340093034,95,1 +2348894245,11,591350440,91,1 +2349179532,93,214851100,51,1 +2348894245,11,16210433,92,1 +2349345463,35,3330358736,39,1 +2349345463,59,16210433,92,1 +2349345463,35,70634828,53,1 +2349345463,35,70634828,49,1 +2349345463,35,532328014,99,1 +331545755,90,2337727838,90,1 +2349345463,35,395736790,95,1 +2349345463,35,340093034,95,1 +2349345463,35,3111603340,53,1 +2349179532,93,3111603340,51,1 +2349345463,35,3111603340,49,1 +2349345463,35,303926772,99,1 +2349345463,35,29223617,95,1 +2349345463,35,25980377,39,1 +2349345463,35,214851100,53,1 +2349345463,35,214851100,49,1 +2349179532,93,70634828,50,1 +3330358736,38,395736790,95,1 +2348894245,11,16116663,92,1 +2349345463,59,2336923756,91,1 +2345982379,67,3111603340,55,1 +2345982379,67,3330358736,43,1 +2345982379,67,3330358736,42,1 +2345982379,67,3330358736,41,1 +3330358736,39,70634828,52,1 +2345982379,67,3330358736,39,1 +2345982379,67,331545755,90,1 +3330358736,39,70634828,55,1 +2345982379,67,3111603340,54,1 +3330358736,39,340093034,95,1 +3330358736,40,214851100,52,1 +2345982379,67,3111603340,53,1 +2345982379,67,3111603340,52,1 +3330358736,40,29223617,95,1 +2345982379,67,3111603340,51,1 +2345982379,67,3111603340,50,1 +2345982379,67,3111603340,49,1 +3330358736,39,395736790,95,1 +3330358736,39,3330358736,40,1 +2347561020,9,3191869223,91,1 +2345982379,67,70634828,51,1 +3330358736,38,70634828,52,1 +2345982379,67,70634828,55,1 +2345982379,67,70634828,54,1 +3330358736,38,70634828,55,1 +2345982379,67,70634828,53,1 +2345982379,67,70634828,52,1 +3330358736,39,214851100,52,1 +2345982379,67,70634828,49,1 +3330358736,39,3111603340,55,1 +2345982379,67,70634828,48,1 +2345982379,67,70634828,45,1 +2345982379,67,532328014,99,1 +3330358736,39,3111603340,51,1 +3330358736,39,3111603340,52,1 +2345982379,67,395736790,95,1 +2345982379,67,340093034,95,1 +2349345463,59,2327605629,94,1 +2349345463,59,2337727838,90,1 +3226664625,28,303926772,99,1 +3268669333,67,2337727838,90,1 +3268669333,67,214851100,50,1 +3268669333,67,214851100,51,1 +3268669333,67,214851100,52,1 +3268669333,67,214851100,53,1 +3268669333,67,214851100,54,1 +3268669333,67,214851100,55,1 +3268669333,67,2326722141,90,1 +3268669333,67,25980377,39,1 +3268669333,67,214851100,47,1 +3268669333,67,25980377,41,1 +3268669333,67,25980377,43,1 +3268669333,67,29223617,95,1 +3268669333,67,303926772,99,1 +3268669333,67,3111603340,44,1 +3268669333,67,3111603340,45,1 +3268669333,67,3111603340,46,1 +3268669333,67,214851100,49,1 +3268669333,67,214851100,46,1 +3268669333,67,3111603340,49,1 +3226664625,28,340093034,95,1 +3226664625,28,3111603340,50,1 +3226664625,28,3111603340,51,1 +3226664625,28,3111603340,52,1 +3226664625,28,3111603340,53,1 +3226664625,28,3111603340,55,1 +3226664625,28,3191869223,91,1 +3226664625,28,331545755,90,1 +3226664625,28,395736790,95,1 +3226664625,28,728969035,93,1 +3226664625,28,517675473,92,1 +3226664625,28,532328014,99,1 +3226664625,28,591350440,91,1 +3226664625,28,70634828,50,1 +3226664625,28,70634828,51,1 +3226664625,28,70634828,53,1 +3226664625,28,70634828,55,1 +3268669333,67,3111603340,48,1 +3268669333,67,3111603340,50,1 +3312358902,79,532328014,99,1 +3312358902,59,3191869223,91,1 +3312358902,59,2326722141,90,1 +3312358902,59,2327605629,94,1 +3312358902,59,2336923756,91,1 +3312358902,59,2349179532,93,1 +3312358902,59,2349705416,94,1 +3312358902,59,29223617,95,1 +3312358902,59,303926772,99,1 +3312358902,59,331545755,90,1 +3268669333,67,70634828,54,1 +3312358902,59,340093034,95,1 +3312358902,59,395736790,95,1 +3312358902,59,471121089,93,1 +3312358902,59,532328014,99,1 +3312358902,59,591350440,91,1 +3312358902,59,728969035,93,1 +3312358902,79,303926772,99,1 +3268669333,67,70634828,55,1 +3268669333,67,70634828,53,1 +3268669333,67,3111603340,52,1 +3268669333,67,3330358736,42,1 +3268669333,67,3111603340,53,1 +3268669333,67,3111603340,54,1 +3268669333,67,3111603340,55,1 +3268669333,67,331545755,90,1 +3268669333,67,3330358736,39,1 +3268669333,67,3330358736,40,1 +3268669333,67,3330358736,41,1 +3268669333,67,3330358736,43,1 +3268669333,67,70634828,52,1 +3268669333,67,340093034,95,1 +3268669333,67,395736790,95,1 +3268669333,67,532328014,99,1 +3268669333,67,70634828,45,1 +3268669333,67,70634828,49,1 +3268669333,67,70634828,50,1 +3268669333,67,70634828,51,1 +9746245,97,532328014,99,1 diff --git a/GA_Agent_0925/count_firm.csv b/GA_Agent_0925/count_firm.csv new file mode 100644 index 0000000..6b2d132 --- /dev/null +++ b/GA_Agent_0925/count_firm.csv @@ -0,0 +1,204 @@ +id_firm,count +214851100,1722 +3111603340,1654 +70634828,1548 +25980377,643 +340093034,616 +395736790,607 +3330358736,567 +29223617,564 +303926772,494 +532328014,488 +331545755,339 +2337727838,333 +2326722141,332 +3191869223,272 +728969035,240 +2327605629,237 +591350440,232 +517675473,226 +2336923756,223 +16116663,205 +2349705416,196 +16210433,168 +471121089,168 +2349179532,167 +1452048,22 +515770253,15 +2349345463,10 +495782506,10 +300186799,10 +3312358902,10 +33822284,10 +2728939,10 +420984285,10 +6,10 +37873062,10 +3226664625,10 +1,10 +80158773,10 +78979697,10 +8,10 +169978927,9 +5849940,9 +3392803162,8 +11807506,8 +79938367,8 +5971532,8 +2424229017,8 +314846874,7 +14913649,6 +3462551351,5 +872394725,5 +35404067,5 +805940123,5 +3362063909,5 +3358892171,5 +862404568,5 +6333996,5 +9032550,5 +367669349,5 +3268669333,5 +950849442,5 +3226232,5 +3203980088,5 +3195293647,5 +31732840,5 +961017,5 +3151377261,5 +3147958370,5 +9620005,5 +10437056,5 +907433543,5 +382080545,5 +598808584,5 +676597455,5 +640700057,5 +644252759,5 +596368303,5 +59234665,5 +648145286,5 +668539285,5 +675729777,5 +578803019,5 +3118140206,5 +551856519,5 +543470507,5 +688155470,5 +385766513,5 +71271700,5 +733657390,5 +737770776,5 +507827038,5 +756272716,5 +758879940,5 +4607820,5 +441623911,5 +771821595,5 +410030851,5 +38852110,5 +562681526,5 +9746245,5 +26487185,5 +197362120,5 +2333843479,5 +25685135,5 +247297633,5 +2448521375,5 +2353549582,5 +2353389310,5 +2352421906,5 +205960791,5 +2351592628,5 +225958786,5 +2350443114,5 +2310406050,5 +2310534839,5 +2349742676,5 +2349588257,5 +2349349655,5 +2311838590,5 +2348894245,5 +2314659369,5 +2316150629,5 +2345982379,5 +2326520912,5 +2337952436,5 +203314437,5 +2334430421,5 +193814549,5 +157087137,5 +1160497810,5 +1171244159,5 +3010580773,5 +29954548,5 +2989649772,5 +2978926070,5 +1208566436,5 +178452970,5 +1476953321,5 +1444449910,5 +280281699,5 +16715045,5 +26895145,5 +286335813,5 +28667694,5 +742704658,4 +2326903290,4 +2326655246,4 +1698501971,4 +2323069589,4 +1605495,4 +696450846,4 +1247902451,4 +1253552935,4 +664591135,4 +863973253,4 +1651310523,4 +8114841,4 +3135349256,4 +3145389278,4 +2348987001,4 +3420061649,4 +3031766093,4 +3196033145,4 +265133300,4 +2350544061,4 +3378606529,4 +3011933107,4 +493002466,4 +290636928,4 +518871190,4 +2347561020,4 +3222664794,4 +2344471631,4 +3220049148,4 +28665295,3 +78576577,3 +2341774429,3 +808524154,3 +2944593082,3 +1524794108,3 +29452962,3 +3222821993,3 +13854344,3 +778745779,3 +340603317,3 +762501019,3 +27042865,3 +5979030,3 +189427260,3 +3429928077,3 +2382390052,3 +395739442,3 +2349746655,3 +466148111,3 +643954924,3 +618469306,3 +23421122,3 +2962064709,3 +308365582,2 +1717102128,1 +2959520478,1 +3449575456,1 +2346894985,1 diff --git a/GA_Agent_0925/count_firm_prod.csv b/GA_Agent_0925/count_firm_prod.csv new file mode 100644 index 0000000..78dd3da --- /dev/null +++ b/GA_Agent_0925/count_firm_prod.csv @@ -0,0 +1,266 @@ +id_firm,id_product,count +340093034,95,616 +395736790,95,607 +29223617,95,564 +303926772,99,494 +532328014,99,488 +331545755,90,339 +2337727838,90,333 +2326722141,90,332 +3191869223,91,272 +728969035,93,240 +2327605629,94,237 +591350440,91,232 +517675473,92,226 +2336923756,91,223 +2349705416,94,196 +3111603340,53,193 +3111603340,55,192 +214851100,54,189 +214851100,55,188 +214851100,52,188 +16116663,92,187 +214851100,53,187 +214851100,50,187 +214851100,51,184 +3111603340,54,182 +3111603340,52,181 +70634828,53,179 +3111603340,51,178 +70634828,52,178 +70634828,54,178 +3111603340,50,178 +70634828,51,177 +70634828,55,171 +16210433,92,168 +471121089,93,168 +70634828,50,168 +2349179532,93,167 +25980377,39,115 +25980377,38,112 +25980377,43,108 +214851100,49,106 +25980377,41,105 +214851100,47,104 +3330358736,43,104 +25980377,40,102 +3330358736,38,102 +214851100,46,102 +25980377,42,101 +3111603340,47,100 +214851100,44,98 +3111603340,45,96 +3330358736,39,93 +214851100,48,93 +3330358736,41,92 +3330358736,40,92 +214851100,45,91 +70634828,47,90 +3111603340,46,89 +3111603340,49,89 +70634828,45,88 +3111603340,44,86 +3111603340,48,85 +3330358736,42,84 +70634828,46,81 +70634828,44,80 +70634828,48,77 +70634828,49,76 +515770253,9,15 +1452048,9,12 +6,10,10 +495782506,19,10 +420984285,16,10 +37873062,9,10 +33822284,9,10 +8,37,10 +80158773,69,10 +1,10,10 +16116663,11,10 +3392803162,9,8 +79938367,9,8 +5971532,9,8 +14913649,9,6 +950849442,9,5 +16116663,10,5 +382080545,9,5 +385766513,24,5 +38852110,10,5 +410030851,27,5 +169978927,66,5 +441623911,79,5 +4607820,9,5 +16715045,10,5 +507827038,10,5 +9620005,9,5 +543470507,8,5 +551856519,33,5 +562681526,25,5 +578803019,10,5 +367669349,31,5 +35404067,9,5 +3462551351,13,5 +214851100,7,5 +3226664625,28,5 +3268669333,67,5 +3312358902,59,5 +3312358902,79,5 +2310406050,60,5 +225958786,11,5 +205960791,63,5 +178452970,25,5 +203314437,22,5 +197362120,15,5 +193814549,33,5 +3358892171,64,5 +3362063909,10,5 +2349588257,10,5 +5849940,26,5 +59234665,65,5 +907433543,10,5 +78979697,74,5 +733657390,10,5 +737770776,34,5 +756272716,32,5 +758879940,65,5 +771821595,31,5 +78979697,61,5 +961017,23,5 +70634828,7,5 +1171244159,32,5 +1160497810,12,5 +805940123,72,5 +862404568,11,5 +872394725,70,5 +9032550,34,5 +71271700,27,5 +1208566436,62,5 +596368303,12,5 +668539285,17,5 +3226232,10,5 +598808584,15,5 +6333996,66,5 +640700057,9,5 +644252759,61,5 +648145286,35,5 +675729777,10,5 +1444449910,20,5 +676597455,68,5 +688155470,30,5 +157087137,73,5 +1476953321,10,5 +1452048,30,5 +1452048,11,5 +3226664625,13,5 +2349349655,9,5 +9746245,97,5 +2424229017,26,5 +2334430421,73,5 +2337952436,24,5 +2352421906,17,5 +2353389310,15,5 +2353549582,23,5 +3010580773,9,5 +300186799,11,5 +300186799,10,5 +29954548,18,5 +2989649772,71,5 +2978926070,8,5 +2448521375,25,5 +10437056,9,5 +28667694,10,5 +247297633,18,5 +286335813,72,5 +280281699,60,5 +2728939,71,5 +2728939,63,5 +25685135,11,5 +26895145,9,5 +26487185,62,5 +2349345463,35,5 +2345982379,67,5 +2333843479,70,5 +2348894245,11,5 +2326520912,10,5 +2350443114,74,5 +3118140206,68,5 +3147958370,12,5 +314846874,11,5 +2349742676,33,5 +3111603340,7,5 +2349345463,59,5 +2311838590,97,5 +3151377261,29,5 +31732840,29,5 +2310534839,64,5 +3195293647,28,5 +2316150629,10,5 +3203980088,10,5 +2314659369,20,5 +2351592628,10,5 +11807506,9,4 +664591135,9,4 +11807506,36,4 +3145389278,9,4 +2347561020,9,4 +742704658,9,4 +3196033145,9,4 +265133300,9,4 +696450846,9,4 +3220049148,9,4 +1247902451,9,4 +1253552935,9,4 +2344471631,9,4 +290636928,9,4 +1605495,9,4 +3031766093,9,4 +3011933107,9,4 +169978927,9,4 +863973253,9,4 +2326903290,9,4 +2323069589,9,4 +1698501971,9,4 +493002466,9,4 +8114841,9,4 +1651310523,9,4 +2350544061,9,4 +2348987001,9,4 +518871190,9,4 +3420061649,9,4 +5849940,36,4 +3378606529,9,4 +3222664794,9,4 +2326655246,9,4 +3135349256,9,4 +778745779,9,3 +762501019,9,3 +2349746655,10,3 +808524154,9,3 +2382390052,9,3 +2424229017,9,3 +78576577,9,3 +3222821993,9,3 +16116663,9,3 +2962064709,9,3 +189427260,9,3 +340603317,9,3 +3429928077,9,3 +395739442,9,3 +466148111,9,3 +2341774429,9,3 +13854344,9,3 +23421122,9,3 +5979030,9,3 +618469306,9,3 +29452962,9,3 +2944593082,9,3 +643954924,9,3 +28665295,9,3 +1524794108,9,3 +27042865,9,3 +308365582,9,2 +314846874,9,2 +2959520478,9,1 +1717102128,9,1 +3449575456,9,1 +2346894985,9,1 diff --git a/GA_Agent_0925/count_prod.csv b/GA_Agent_0925/count_prod.csv new file mode 100644 index 0000000..686c47f --- /dev/null +++ b/GA_Agent_0925/count_prod.csv @@ -0,0 +1,73 @@ +id_product,count +95,1787 +90,1004 +99,982 +91,727 +92,581 +93,575 +53,559 +55,551 +54,549 +52,547 +51,539 +50,533 +94,433 +9,338 +47,294 +45,275 +46,272 +49,271 +44,264 +48,255 +38,214 +43,212 +39,208 +41,197 +40,194 +42,185 +10,113 +11,45 +15,15 +12,15 +33,15 +7,15 +25,15 +69,10 +74,10 +68,10 +70,10 +71,10 +72,10 +73,10 +19,10 +79,10 +8,10 +66,10 +18,10 +17,10 +16,10 +13,10 +97,10 +67,10 +32,10 +65,10 +64,10 +34,10 +35,10 +37,10 +31,10 +30,10 +29,10 +28,10 +27,10 +26,10 +24,10 +23,10 +20,10 +59,10 +60,10 +62,10 +63,10 +61,10 +36,8 +22,5 diff --git a/GA_Agent_0925/creating.py b/GA_Agent_0925/creating.py new file mode 100644 index 0000000..e47aa65 --- /dev/null +++ b/GA_Agent_0925/creating.py @@ -0,0 +1,56 @@ +import random +from deap import creator, base, tools +from evaluate_func import fitness + +def creating(): + if "FitnessMax" not in creator.__dict__: + creator.create("FitnessMax", base.Fitness, weights=(1.0,)) + if "Individual" not in creator.__dict__: + creator.create("Individual", list, fitness=creator.FitnessMax) + + toolbox = base.Toolbox() + + # 基因注册 + toolbox.register("n_max_trial", random.randint, 1, 40) + toolbox.register("prf_size", random.uniform, 0.0, 1.0) + toolbox.register("prf_conn", random.uniform, 0.0, 1.0) + toolbox.register("cap_limit_prob_type", random.randint, 0, 1) + toolbox.register("cap_limit_level", random.randint, 5, 50) + toolbox.register("diff_new_conn", random.uniform, 0.0, 1.0) + toolbox.register("netw_prf_n", random.randint, 1, 20) + toolbox.register("s_r", random.uniform, 0.05, 0.5) + toolbox.register("S_r", random.uniform, 0.5, 1.0) + toolbox.register("x", random.uniform, 0.0, 1) + toolbox.register("k", random.uniform, 0.05, 2.0) + toolbox.register("production_increase_ratio", random.uniform, 0.5, 2.0) + + # 个体与种群注册 + toolbox.register( + "individual", + tools.initCycle, + creator.Individual, + ( + toolbox.n_max_trial, + toolbox.prf_size, + toolbox.prf_conn, + toolbox.cap_limit_prob_type, + toolbox.cap_limit_level, + toolbox.diff_new_conn, + toolbox.netw_prf_n, + toolbox.s_r, + toolbox.S_r, + toolbox.x, + toolbox.k, + toolbox.production_increase_ratio + ), + n=1 + ) + toolbox.register("population", tools.initRepeat, list, toolbox.individual) + + # 遗传算子 + toolbox.register("evaluate", fitness) + toolbox.register("mate", tools.cxTwoPoint) + toolbox.register("mutate", tools.mutShuffleIndexes, indpb=0.1) + toolbox.register("select", tools.selTournament, tournsize=3) + + return toolbox diff --git a/GA_Agent_0925/evaluate_func.py b/GA_Agent_0925/evaluate_func.py new file mode 100644 index 0000000..524ef30 --- /dev/null +++ b/GA_Agent_0925/evaluate_func.py @@ -0,0 +1,327 @@ +import os +import time +import traceback +import uuid +from datetime import datetime +from multiprocessing import Process + +import pandas as pd +from sqlalchemy import text +from sqlalchemy.orm import sessionmaker + +from my_model import MyModel +from orm import connection, engine + + +# 🎯 适应度函数(核心目标函数) +def fitness(individual, controller_db_obj): + """ + 遗传算法适应度函数:用于评估个体(模型参数)的优劣。 + + 参数: + individual : list + 个体参数列表: + [n_max_trial, prf_size, prf_conn, cap_limit_prob_type, cap_limit_level, + diff_new_conn, netw_prf_n, s_r, S_r, x, k, production_increase_ratio] + + 目标: + 使 ABM 模型生成的“脆弱产业集合”与目标产业集合尽可能相似。 + - fitness = -error + - error = 模拟结果集合与目标集合的差异度(越小越好) + """ + # 生成唯一 GA ID + ga_id = str(uuid.uuid4())[:8] # 简短随机ID + individual.ga_id = ga_id # 将 ga_id 绑定到个体上 + # ========== 1️⃣ 生成参数字典 ========== + dct_exp = { + 'n_max_trial': individual[0], + 'prf_size': individual[1], + 'prf_conn': individual[2], + 'cap_limit_prob_type': individual[3], + 'cap_limit_level': individual[4], + 'diff_new_conn': individual[5], + 'netw_prf_n': individual[6], + 's_r': individual[7], + 'S_r': individual[8], + 'x': individual[9], + 'k': individual[10], + 'production_increase_ratio': individual[11] + } + # 将 GA 染色体的值映射为实际 ABM 参数 + if dct_exp['cap_limit_prob_type'] == 0: + dct_exp['cap_limit_prob_type'] = "uniform" # 类型A(例如 uniform) + else: + dct_exp['cap_limit_prob_type'] = "normal" # 类型B(例如 normal) + + # 打印 GA ID 和参数 + print(f"\n 正在执行 GA 个体 {ga_id},参数如下:") + # for key, value in dct_exp.items(): + # print(f" {key}: {value}") + # ========== 2️⃣ 调用 ABM 模型 ========== + # 并行进程数目 + job=6 + + do_process(controller_db_obj,ga_id,dct_exp,job) + # ========== 3️⃣ 获取数据库连接并提取结果 ========== + simulated_vulnerable_industries = get_vulnerable100_code(connection,ga_id) + print(simulated_vulnerable_industries) + # ========== 4️⃣ 获取目标产业集合 ========== + target_vulnerable_industries = get_target_vulnerable_industries() + + # ========== 5️⃣ 计算误差(集合差异度) ========== + set_sim = set(simulated_vulnerable_industries) + set_target = set(target_vulnerable_industries) + error = len(set_sim.symmetric_difference(set_target)) + + simulated_set = set(simulated_vulnerable_industries) + target_set = set(target_vulnerable_industries) + + matching = simulated_set & target_set # 交集 + extra = simulated_set - target_set # 模拟多出的产业 + missing = target_set - simulated_set # 未覆盖产业 + + print(f"符合目标的产业数量: {len(matching)}") + print(matching) + print(f"模拟多出的产业数量: {len(extra)}") + print(f"未覆盖目标产业数量: {len(missing)}") + + # ========== 6️⃣ 返回适应度(越大越好) ========== + return (float(-error),) +# 目标产业集合 +def get_target_vulnerable_industries(): + """ + 获取行业列表中所有产业链编号的集合(整数形式)。 + 说明: + - 输入的 industry_list 是一个字典列表,每个字典包含: + {"product": 产品名称, "category": 产品类别, "chain_id": 产业链编号} + - 某些 chain_id 可能是复合编号,例如 "11 / 513742",需要拆分成单独整数。 + - 输出是一个 set,包含所有 chain_id(去重、整数形式)。 + + 参数: + industry_list : list of dict + 行业字典列表,每个字典必须包含 "chain_id" 键。 + + 返回: + set + 所有产业链编号的整数集合。 + """ + industry_list = [ + # ① 半导体设备类 + {"product": "离子注入机", "category": "离子注入设备", "chain_id": 34538}, + {"product": "刻蚀设备 / 湿法刻蚀设备", "category": "刻蚀机", "chain_id": 34529}, + {"product": "沉积设备", "category": "薄膜生长设备(CVD/PVD)", "chain_id": 34539}, + {"product": "CVD", "category": "薄膜生长设备", "chain_id": 34539}, + {"product": "PVD", "category": "薄膜生长设备", "chain_id": 34539}, + {"product": "CMP", "category": "化学机械抛光设备", "chain_id": 34530}, + {"product": "光刻机", "category": "光刻机", "chain_id": 34533}, + {"product": "涂胶显影机", "category": "涂胶显影设备", "chain_id": 34535}, + {"product": "晶圆清洗设备", "category": "晶圆清洗机", "chain_id": 34531}, + {"product": "测试设备", "category": "测试机", "chain_id": 34554}, + {"product": "外延生长设备", "category": "薄膜生长设备", "chain_id": 34539}, + + # ② 半导体材料与化学品类 + {"product": "三氯乙烯", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, + {"product": "丙酮", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, + {"product": "异丙醇", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, + {"product": "其他醇类", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, + {"product": "光刻胶", "category": "光刻胶及配套试剂", "chain_id": 32445}, + {"product": "显影液", "category": "显影液", "chain_id": 46504}, + {"product": "蚀刻液", "category": "蚀刻液", "chain_id": 56341}, + {"product": "光阻去除剂", "category": "光阻去除剂", "chain_id": 32442}, + + # ③ 晶圆制造类 + {"product": "晶圆", "category": "单晶硅片 / 多晶硅片", "chain_id": 32338}, + {"product": "硅衬底", "category": "硅衬底", "chain_id": 36914}, + {"product": "外延片", "category": "硅外延片 / GaN外延片 / SiC外延片等", "chain_id": 32338}, + + # ④ 封装与测试类 + {"product": "封装", "category": "IC封装", "chain_id": 10}, + {"product": "测试", "category": "芯片测试 / 晶圆测试", "chain_id": 513742}, + {"product": "测试", "category": "芯片测试 / 晶圆测试", "chain_id": 11}, + + # ⑤ 芯片与设计EDA类 + {"product": "芯片(通用)", "category": "集成电路制造", "chain_id": 317589}, + {"product": "DRAM", "category": "存储芯片 → 集成电路制造", "chain_id": 317589}, + {"product": "GPU", "category": "图形芯片 → 集成电路制造", "chain_id": 317589}, + {"product": "处理器(CPU/SoC)", "category": "芯片设计", "chain_id": 9}, + {"product": "高频芯片", "category": "芯片设计", "chain_id": 9}, + {"product": "光子芯片(含激光)", "category": "芯片设计 / 功率半导体器件", "chain_id": 9}, + {"product": "光子芯片(含激光)", "category": "芯片设计 / 功率半导体器件", "chain_id": 2717}, + {"product": "先进节点制造设备", "category": "集成电路制造", "chain_id": 317589}, + {"product": "EDA及IP服务", "category": "设计辅助", "chain_id": 2515}, + {"product": "MPW服务", "category": "多项目晶圆流片", "chain_id": 2514}, + {"product": "芯片设计验证", "category": "设计验证", "chain_id": 513738}, + {"product": "过程工艺检测", "category": "制程检测", "chain_id": 513740} + ] + # 手工转换 + industry_list_index = vulnerable100_index = \ + ['100', '58', '61', '9', '7', '98', '57', '8', '65', '68', '66', '38', + '90', '21', '96', '71', '27', '74', '99', '95', '11', '77', '59', '56', '97'] + # # 提取所有 chain_id,并去重 + # chain_ids = set() + # for item in industry_list: + # # 如果 chain_id 是字符串包含多个编号,用逗号或斜杠拆分 + # if isinstance(item["chain_id"], str): + # for cid in item["chain_id"].replace("/", ",").split(","): + # chain_ids.add(cid.strip()) + # else: + # chain_ids.add(str(item["chain_id"])) + + return industry_list_index +# 从数据库计算脆弱产业集合 +def get_vulnerable100_code(engine, ga_id): + """ + 计算最脆弱前100产品的 Code 列表(去重),只针对指定 ga_id。 + """ + # 生成新的 session + Session = sessionmaker(bind=engine) + session = Session() + # 1️⃣ 读取 SQL 文件 + base_dir = os.path.dirname(os.path.abspath(__file__)) + sql_file = os.path.join(base_dir, "..", "GA_Agent_0925", "SQL_analysis_risk_ga.sql") + sql_file = os.path.abspath(sql_file) + with open(sql_file, "r", encoding="utf-8") as f: + str_sql = f.read() # 注意这里是 str_sql,不是 tr_sql + print(f"[信息] 正在查询 ga_id={ga_id} 的脆弱产品数据...") + + # 2️⃣ 执行 SQL 查询 + # 2️⃣ 新建 connection + # 2️⃣ 新建 session,每次查询都用新的 session/connection + Session = sessionmaker(bind=engine) + with Session() as session: + # 使用 session.connection() 来保证 SQLAlchemy 执行原生 SQL + result = pd.read_sql( + sql=text(str_sql), + con=session.connection(), + params={"ga_id": ga_id} # 绑定参数 + ) + + # =============================== + # 2️⃣ 统计每个企业-产品组合出现次数 + # =============================== + count_firm_prod = result.value_counts(subset=['id_firm', 'id_product']) + count_firm_prod.name = 'count' + count_firm_prod = count_firm_prod.to_frame().reset_index() + count_firm_prod.to_csv('count_firm_prod.csv', index=False, encoding='utf-8-sig') + + # =============================== + # 3️⃣ 统计每个企业出现的总次数 + # =============================== + count_firm = count_firm_prod.groupby('id_firm')['count'].sum().reset_index() + count_firm.sort_values('count', ascending=False, inplace=True) + count_firm.to_csv('count_firm.csv', index=False, encoding='utf-8-sig') + + # =============================== + # 4️⃣ 统计每个产品出现的总次数 + # =============================== + count_prod = count_firm_prod.groupby('id_product')['count'].sum().reset_index() + count_prod.sort_values('count', ascending=False, inplace=True) + count_prod.to_csv('count_prod.csv', index=False, encoding='utf-8-sig') + + # =============================== + # 5️⃣ 选出最脆弱的前100个产品(出现次数最多) + # =============================== + vulnerable100_product = count_prod.nlargest(100, "count")["id_product"].tolist() + print(f"[信息] ga_id={ga_id} 查询完成,共找到 {len(vulnerable100_product)} 个脆弱产品") + + # =============================== + # # 6️⃣ 过滤 result,只保留前100脆弱产品 + # # =============================== + # result_vulnerable100 = result[result['id_product'].isin(vulnerable100_product)].copy() + # print(f"[信息] 筛选后剩余记录数: {len(result_vulnerable100)}") + # # =============================== + # # 7️⃣ 构造 DCP(Disruption Causing Probability) + # # =============================== + # result_dcp_list = [] + # for sid, group in result_vulnerable100.groupby('s_id'): + # ts_start = max(group['ts']) + # while ts_start >= 1: + # ts_end = ts_start - 1 + # while ts_end >= 0: + # up = group.loc[group['ts'] == ts_end, ['id_firm', 'id_product']] + # down = group.loc[group['ts'] == ts_start, ['id_firm', 'id_product']] + # for _, up_row in up.iterrows(): + # for _, down_row in down.iterrows(): + # result_dcp_list.append([sid] + up_row.tolist() + down_row.tolist()) + # ts_end -= 1 + # ts_start -= 1 + # + # # 转换为 DataFrame + # result_dcp = pd.DataFrame(result_dcp_list, columns=[ + # 's_id', 'up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product' + # ]) + # + # # =============================== + # # 8️⃣ 统计 DCP 出现次数 + # # =============================== + # count_dcp = result_dcp.value_counts( + # subset=['up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product'] + # ).reset_index(name='count') + # + # # 保存文件 + # count_dcp.to_csv('count_dcp.csv', index=False, encoding='utf-8-sig') + + # 输出结果 + return vulnerable100_product + +def run_ABM_samples(controller_db_obj,ga_id,dct_exp, str_code="GA",): + """ + 从数据库获取一个随机样本,锁定它,然后运行模型仿真。 + 参数: + controller_db: ControllerDB 对象 + str_code: 可选标识,用于打印 + 返回: + True 如果没有可用样本 + False 如果成功运行 + """ + # 1. 从数据库获取一个随机样本 + sample_random = controller_db_obj.fetch_a_sample(s_id=None) # s_id 可根据需要传入 + if sample_random is None: + #print(ga_id+"无样本") + return True # 没有样本,返回 True 表示结束 + # 2. 锁定该样本 + controller_db_obj.lock_the_sample(sample_random) + # print(f"Pid {pid} ({str_code}) is running sample {sample_random.id} at {datetime.now()}") + # print(f"Pid {pid} ({str_code})") + # print(f"[信息] 当前正在运行的 GA 个体 ID: {ga_id}, 时间: {datetime.now()}") + # 3. 获取 experiment 的所有列及其值 + dct_exp_new = {column: getattr(sample_random.experiment, column) + for column in sample_random.experiment.__table__.c.keys()} + # 删除不需要的主键 id + dct_exp_new.pop('id', None) + dct_exp_new = {'sample': sample_random, + 'seed': sample_random.seed, + **dct_exp_new} + try: + dct_sample_para = { + **dct_exp_new, + **dct_exp} + # 切换工作目录到项目根目录或 ABM 需要的目录 + project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + os.chdir(project_root) + + abm_model = MyModel(dct_sample_para) + abm_model.step() + abm_model.end(ga_id) + except Exception as e: + print(f"[❌ ABM运行错误] 错误:{e} ") + traceback.print_exc() + +def do_computation(controller_db_obj,ga_id,dct_exp,): + """每个进程执行 ABM 样本运行""" + pid = os.getpid() + print(f"[启动] 进程 {pid} 已启动 (PID={pid})") + while 1: + # time.sleep(random.uniform(0, 1)) + is_all_done = run_ABM_samples(controller_db_obj,ga_id,dct_exp,) + if is_all_done: + break + +def do_process(controller_db,ga_id,dct_exp,job): + process_list = [] + for i in range(job): + p = Process(target=do_computation, args=(controller_db,ga_id,dct_exp,)) + p.start() + process_list.append(p) + for i in process_list: + i.join() diff --git a/GA_Agent_0925/g_bom.pkl b/GA_Agent_0925/g_bom.pkl new file mode 100644 index 0000000000000000000000000000000000000000..330d8475415ce115beb27d863f5ef793d590e4a9 GIT binary patch literal 11122 zcmeI0>sM6Q6~NJ;ad33fX=!a~)7nR3VtmZp8Aj7*swTB#Qro6Yn}j3;sAyu^72}6| z$XbIq%!A<}+yO;iBM?X}f(DV!fc!D#+{dT<3*F~A`!La!tU9n#@ssE9JNv!&Id@`} z*;9Kf*uRg=J(+Edr{8aC_@JrLOlGRio`3g))2H6A|3@>dw($SdnVBu`{k^g2oLOh? zp(iSjzzQ~vpkW*`GnFsZpM_9ccj(vh{U%#)rB|BszYm>KU%esX1Dz@F@| zZx+mGMP~EqMl*WgJjiR_2BK;Y2SR3ZRmP{JIJtk3eAaCCMk|_kM4wP3Qwn5_HG2c} zx!GP&wzAZ#=@X{{>XeeNPU-TWRHT&e71rnC)Bz#z8HGuK9&lI}wMQ|*Q0O3a%41K( z+(eqBE=V~(#Yj0mVOZ~wF6}8vhHAqH!%P}UP1qk7tod6~nqM*oXso5oK6})($EJWG zU1>MoK_>bkR%H5P(%bT%SPTCv8NO}}bz6N`q?~UcIfg;y_{sPHgqJ2YnINe&Qu<8< zhZyW}dxk&@V!nkKgBkC0a#QZmHEXV5#U@cezKzMlRP`>B9&uWitbZ@t=4~?Ft?ZZ9 zeqSC5*BZe9i;Rk)WPU6eBNPs@$oRk)NT`U!Q?YZk@yzj)Zqk0uRtzcQ+HTKvYFx%}N`J8qY)xKYyk}7=alrDd- zBBgvUt(nddy}%wVVj&nEG|O&mz&5Auo#mS15jt()h*#AlYRr8Sqs1VaPC6)y;Rl!r zvVu|5Ml!o4!-pHF^V_2=P}$z%I1}+XC}B_6aL0k@7oz7oE02n{}xUA4PDGm5ykB66g!iiYp!BzAL&SwnMHc9&$c*YarlFm{vld%4un@J;gJBV zu4=d}?9N2-(3Po`!aOyXj^9_6qU~H!I3N^l&lD9|x7(eWtWdO_E7~p;!CNN;hhQ93 zs~)gBXP~C7(M!%nb+3O7@gX*1d~g{+w~)?)du1G5c-4puvw>BV?8XP&wyV12U5bZ} zV!82K^B0`fdF%3BvUF3g{GTE?$OjWi7My_?s`;NIhF|s`FcmPw{8}+En3&QU&VXLp z_VIcCwt%=H*S7IfkS}5AMhC5!Pc~d#nW>ZO+mXM3lNlvF{)(#DcXO^wI&|1=rOj@Jrn;C6~nG z;_N07WcHqiD@@A%iINQ^&#bOi4GzYFmwMG7$2^ni=XGLzIz{3WI{aG!v%$k37JfX( z+<#`AnHFkFCAe8H=*Wa4YL7Avvdk!5f;g<_QkZ_-71wf zBcPVGg_j#oM)KCsvcyhfj90zN2+3W7Bj{`542F4%UGoNg!{n8~cMua{Ve`R9pW8Y` za@R>bj-VAu6q90VbY63NlB9#(W^@Xj zz>Ijsai(jQ28S{y5yOY2c)F8h4_uE(ElJm(~C@d1(E#v z^jPB^PL@vp9_VpRSrVAi$#&s{K3mk0G_Kwp*`7m~pG8~2(tg$LzzeOae3 z-_V!XG5Wh3WP810tkTWRP({a=D&Bml%8M^+b+01&a#f{m#4CFLcx@C#bfbx)_iv&v zT_a^`Lf-#sX087;Ub8Xwr87{z>#=-3KNL=usWl#!`~0D(5$q(Nd1^ivXWm}@-BWr- z-TTEe_n!)?G~r`F)YJVB{4cNUH60_$Gak*-SSe2+R-93v3~EQ6QakE9LhYze3D^-K zET5yRyn0Yi-BmIA3VTxa45*SQcFb2U-T&7?TGIrro3hf5eXu*v%B!Y03(7HjxY6}e znfgg;jnpfBDv#xLw>UG(5zKo^SKi%|cu*IKm@I4R-G=RT^5IdYxR;I=k>>{$`ceg7 zWJehBmYg2^%-j01L0>k?<>$8k7ty+wjPOwPFW0RcRz9d57+>-=i}zNY18QSuedD95 SROLbys@hStTHkbj|9=65OHIiD literal 0 HcmV?d00001 diff --git a/GA_Agent_0925/ga.py b/GA_Agent_0925/ga.py deleted file mode 100644 index 24e961e..0000000 --- a/GA_Agent_0925/ga.py +++ /dev/null @@ -1,116 +0,0 @@ -import numpy as np # 引入NumPy库,用于高效的数值计算 -from pySOT.utils import round_vars # 引入用于四舍五入的函数 -from typing import TYPE_CHECKING # 引入类型检查工具 -if TYPE_CHECKING: - from policy import Policy - -class GeneticAlgorithm: # 定义一个遗传算法类 - def __init__(self, the_policy: 'Policy'): # 初始化方法,接收一个 Policy 对象 - self.n_variables = the_policy.dim # 从 policy 中获取问题的维度 - self.lower_boundary = the_policy.lb # 获取决策变量的下界 - self.upper_boundary = the_policy.ub # 获取决策变量的上界 - self.integer_variables = the_policy.int_var # 获取整数变量的索引 - - self.sigma = 0.2 # 设置变异操作的标准差 - self.p_mutation = 1.0 / the_policy.dim # 设置变异概率 - self.tournament_size = 5 # 设置锦标赛选择的大小 - self.p_cross = 0.9 # 设置交叉概率 - - pop_size = the_policy.arr_init_doe_points.shape[0] # 获取种群大小 - self.lst_value = the_policy.lst_y_init_doe_points # 初始化每个个体的适应度值 - - # 如果种群大小是奇数,生成一个随机个体来确保种群大小是偶数 - if pop_size % 2 == 1: - arr_random = np.random.rand(1, self.n_variables) # 生成一个随机的个体 - arr_one_random = self.lower_boundary + arr_random * (self.upper_boundary - self.lower_boundary) # 将随机个体约束在边界内 - self.lst_value.append(the_policy.eval(arr_one_random[0, :], is_init_points=True)) # 评估该个体的适应度 - self.population = np.vstack((the_policy.arr_init_doe_points, arr_one_random)) # 将该个体加入到种群中 - else: - self.population = np.copy(the_policy.arr_init_doe_points) # 直接使用初始种群 - - self.n_individuals = self.population.shape[0] # 获取种群中个体的数量 - assert self.n_individuals == pop_size or self.n_individuals == pop_size + 1, 'Wrong pop size' # 确保种群大小正确 - - # 如果有整数变量,需要进行位置四舍五入 - if len(self.integer_variables) > 0: - self.population[:, self.integer_variables] = np.round(self.population[:, self.integer_variables]) # 对整数变量四舍五入 - for i in self.integer_variables: - ind = np.where(self.population[:, i] < self.lower_boundary[i]) # 如果超出了下界,修正为下界 - self.population[ind, i] += 1 - ind = np.where(self.population[:, i] > self.upper_boundary[i]) # 如果超出了上界,修正为上界 - self.population[ind, i] -= 1 - - self.ind, self.best_individual, self.best_value = None, None, None # 初始化最优个体和最优值 - self.pop_next, self.lst_pop_next_is_evaluated = None, None # 初始化下一代种群和评估标志 - self.update_info() # 更新最优解信息 - - def update_info(self): - # 更新最优个体和适应度值 - self.ind = np.argmin(self.lst_value) # 获取适应度最小的个体(假设目标是最小化) - self.best_individual = np.copy(self.population[self.ind, :]) # 复制最优个体 - self.best_value = self.lst_value[self.ind] # 记录最优值 - - self.pop_next, self.lst_pop_next_is_evaluated = self._generate_next_population() # 生成下一代种群 - self.lst_value = [] # 清空当前种群的适应度值 - - def _generate_next_population(self): - # 生成下一代种群 - competitors = np.random.randint(0, self.n_individuals, (self.n_individuals, self.tournament_size)) # 随机选择竞赛个体 - ind = np.argmin(np.array(self.lst_value)[competitors], axis=1) # 选择每轮锦标赛中的最优个体 - winner_indices = np.zeros(self.n_individuals, dtype=int) # 用于存储胜利个体的索引 - for i in range(self.tournament_size): # 进行锦标赛选择 - winner_indices[np.where(ind == i)] = competitors[np.where(ind == i), i] - - # 按照锦标赛结果将种群分为父母 - parent1 = self.population[winner_indices[0: self.n_individuals // 2], :] - parent2 = self.population[winner_indices[self.n_individuals // 2: self.n_individuals], :] - - # 交叉操作:对父母个体进行交叉 - cross = np.where(np.random.rand(self.n_individuals // 2) < self.p_cross)[0] # 按照概率决定哪些个体进行交叉 - nn = len(cross) # 计算交叉个体的数量 - alpha = np.random.rand(nn, 1) # 生成交叉系数 - - # 创建新的染色体 - parent1_new = np.multiply(alpha, parent1[cross, :]) + np.multiply(1 - alpha, parent2[cross, :]) - parent2_new = np.multiply(alpha, parent2[cross, :]) + np.multiply(1 - alpha, parent1[cross, :]) - parent1[cross, :] = parent1_new - parent2[cross, :] = parent2_new - arr_new_population = np.concatenate((parent1, parent2)) # 合并两个父代得到新的种群 - - # 变异操作 - scale_factors = self.sigma * (self.upper_boundary - self.lower_boundary) # 计算变异的尺度 - perturbation = np.random.randn(self.n_individuals, self.n_variables) # 生成扰动 - perturbation = np.multiply(perturbation, scale_factors) # 根据尺度调整扰动 - perturbation = np.multiply( - perturbation, (np.random.rand(self.n_individuals, self.n_variables) < self.p_mutation) - ) # 根据变异概率决定哪些位置进行扰动 - - arr_new_population += perturbation # 将扰动添加到新种群 - arr_new_population = np.maximum(np.reshape(self.lower_boundary, (1, self.n_variables)), arr_new_population) # 确保不超过下界 - arr_new_population = np.minimum(np.reshape(self.upper_boundary, (1, self.n_variables)), arr_new_population) # 确保不超过上界 - - # 如果有整数变量,进行四舍五入 - if len(self.integer_variables) > 0: - arr_new_population = round_vars(arr_new_population, self.integer_variables, self.lower_boundary, - self.upper_boundary) - - assert arr_new_population.shape[0] == self.n_individuals, 'Wrong arr_new_population shape' # 确保新种群的大小正确 - return arr_new_population, [False] * self.n_individuals # 返回新种群和评估标志(都设为未评估) - - def select_next_point(self): - # 选择下一个要评估的个体 - for idx_ind, is_evaluated in enumerate(self.lst_pop_next_is_evaluated): - if not is_evaluated: # 如果该个体没有被评估 - return self.pop_next[idx_ind, :] # 返回该个体 - - def receive_sim_value(self, the_value): - # 接收评估结果,并更新适应度信息 - self.lst_value.append(the_value) # 将评估值添加到适应度列表 - idx_ind = 0 - for idx_ind, is_evaluated in enumerate(self.lst_pop_next_is_evaluated): - if not is_evaluated: # 找到未评估的个体 - self.lst_pop_next_is_evaluated[idx_ind] = True # 标记该个体为已评估 - break - if idx_ind == len(self.lst_pop_next_is_evaluated) - 1: - assert idx_ind == self.n_individuals - 1, 'Wrong index' # 确保所有个体都已评估 - self.update_info() # 更新最优解信息 diff --git a/GA_Agent_0925/main.py b/GA_Agent_0925/main.py new file mode 100644 index 0000000..70d6d3a --- /dev/null +++ b/GA_Agent_0925/main.py @@ -0,0 +1,109 @@ +import json +import random +from deap import tools +from sqlalchemy.orm import close_all_sessions +from tqdm import tqdm +import matplotlib.pyplot as plt + +from GA_Agent_0925.creating import creating +from GA_Agent_0925.orm import connection +from controller_db import ControllerDB +from evaluate_func import fitness, get_vulnerable100_code, get_target_vulnerable_industries + + +# ============================== +# 遗传算法主函数(单进程) +# ============================== +def main(): + # 1️⃣ 加载配置 + with open("config.json", "r", encoding="utf-8") as f: + cfg = json.load(f) + + random.seed(cfg["seed"]) + + print("\n📘 参数配置:") + for k, v in cfg.items(): + print(f" {k}: {v}") + print("-" * 40) + + # 2️⃣ 初始化 ControllerDB(数据库连接) + controller_db_obj = ControllerDB("without_exp", reset_flag=0) + controller_db_obj.reset_db(force_drop=True) + # 准备样本表 + controller_db_obj.prepare_list_sample() + # 2️⃣ 初始化工具箱 + toolbox = creating() + pop = toolbox.population(n=cfg["pop_size"]) + hof = tools.HallOfFame(1) + stats = tools.Statistics(lambda ind: ind.fitness.values) + stats.register("avg", lambda fits: sum(f[0] for f in fits) / len(fits)) + stats.register("max", lambda fits: max(f[0] for f in fits)) + + best_list = [] + avg_list = [] + + # ============================== + # 主进化循环 + # ============================== + for gen in tqdm(range(cfg["n_gen"]), desc="进化中", ncols=90): + # 计算未评估个体适应度 + invalid_ind = [ind for ind in pop if not ind.fitness.valid] + for ind in invalid_ind: + controller_db_obj.reset_sample_db() + controller_db_obj.prepare_list_sample() + ind.fitness.values = fitness(ind, controller_db_obj=controller_db_obj) + + # 选择、交叉、变异 + offspring = toolbox.select(pop, len(pop)) + offspring = list(map(toolbox.clone, offspring)) + + for child1, child2 in zip(offspring[::2], offspring[1::2]): + if random.random() < cfg["cx_prob"]: + toolbox.mate(child1, child2) + del child1.fitness.values, child2.fitness.values + + for mutant in offspring: + if random.random() < cfg["mut_prob"]: + toolbox.mutate(mutant) + del mutant.fitness.values + + # 更新适应度 + invalid_ind = [ind for ind in offspring if not ind.fitness.valid] + for ind in invalid_ind: + controller_db_obj.reset_sample_db() + controller_db_obj.prepare_list_sample() + ind.fitness.values = fitness(ind, controller_db_obj=controller_db_obj) + + pop[:] = offspring + hof.update(pop) + + record = stats.compile(pop) + best_list.append(record["max"]) + avg_list.append(record["avg"]) + + # ============================== + # 输出最优结果 + # ============================== + print("\n✅ 进化完成!") + print(f"🏆 最优个体: {hof[0]}") + print(f"🌟 最优适应度: {hof[0].fitness.values[0]:.4f}") + + # 绘制收敛曲线 + plt.figure(figsize=(8, 5)) + plt.plot(best_list, label="Best Fitness", linewidth=2) + plt.plot(avg_list, label="Average Fitness", linestyle="--") + plt.title("Genetic Algorithm Convergence") + plt.xlabel("Generation") + plt.ylabel("Fitness") + plt.legend() + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.show() + + # ============================== + # 最优个体产业匹配 + # ============================== + print("\n📊 计算最优个体产业匹配情况...") + +if __name__ == "__main__": + main() diff --git a/GA_Agent_0925/orm.py b/GA_Agent_0925/orm.py new file mode 100644 index 0000000..e197311 --- /dev/null +++ b/GA_Agent_0925/orm.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +from datetime import datetime +from sqlalchemy import create_engine, inspect, Inspector, Float +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import (Column, Integer, DECIMAL, String, ForeignKey, + BigInteger, DateTime, PickleType, Boolean, Text) +from sqlalchemy.sql import func +from sqlalchemy.orm import relationship, Session +from sqlalchemy.pool import NullPool +import yaml + +with open('../conf_db.yaml') as file: + dct_conf_db_all = yaml.full_load(file) + is_local_db = dct_conf_db_all['is_local_db'] + if is_local_db: + dct_conf_db = dct_conf_db_all['local'] + else: + dct_conf_db = dct_conf_db_all['remote'] + +with open('../conf_db_prefix.yaml') as file: + dct_conf_db_prefix = yaml.full_load(file) + db_name_prefix = dct_conf_db_prefix['db_name_prefix'] + +str_login = 'mysql://{}:{}@{}:{}/{}'.format(dct_conf_db['user_name'], + dct_conf_db['password'], + dct_conf_db['address'], + dct_conf_db['port'], + dct_conf_db['db_name']) +# print('DB is {}:{}/{}'.format(dct_conf_db['address'], dct_conf_db['port'], dct_conf_db['db_name'])) + +# must be null pool to avoid connection lost error +engine = create_engine(str_login, poolclass=NullPool) +connection = engine.connect() +ins: Inspector = inspect(engine) + +Base = declarative_base() + +db_session = Session(bind=engine) + + +class Experiment(Base): + __tablename__ = f"{db_name_prefix}_experiment" + id = Column(Integer, primary_key=True, autoincrement=True) + + idx_scenario = Column(Integer, nullable=False) + idx_init_removal = Column(Integer, nullable=False) + + # fixed parameters + n_sample = Column(Integer, nullable=False) + n_iter = Column(Integer, nullable=False) + + # variables + dct_lst_init_disrupt_firm_prod = Column(PickleType, nullable=False) + g_bom = Column(Text(4294000000), nullable=False) + + n_max_trial = Column(Integer, nullable=False) + prf_size = Column(Boolean, nullable=False) + prf_conn = Column(Boolean, nullable=False) + cap_limit_prob_type = Column(String(16), nullable=False) + cap_limit_level = Column(DECIMAL(8, 4), nullable=False) + diff_new_conn = Column(DECIMAL(8, 4), nullable=False) + remove_t = Column(Integer, nullable=False) + netw_prf_n = Column(Integer, nullable=False) + + sample = relationship( + 'Sample', back_populates='experiment', lazy='dynamic') + + def __repr__(self): + return f'' + + +class Sample(Base): + __tablename__ = f"{db_name_prefix}_sample" + id = Column(Integer, primary_key=True, autoincrement=True) + e_id = Column(Integer, ForeignKey('{}.id'.format( + f"{db_name_prefix}_experiment")), nullable=False) + + idx_sample = Column(Integer, nullable=False) + seed = Column(BigInteger, nullable=False) + # -1, waiting; 0, running; 1, done + is_done_flag = Column(Integer, nullable=False) + computer_name = Column(String(64), nullable=True) + ts_done = Column(DateTime(timezone=True), onupdate=func.now()) + stop_t = Column(Integer, nullable=True) + + g_firm = Column(Text(4294000000), nullable=True) + + experiment = relationship( + 'Experiment', back_populates='sample', uselist=False) + result = relationship('Result', back_populates='sample', lazy='dynamic') + + def __repr__(self): + return f'' + + +class Result(Base): + __tablename__ = f"{db_name_prefix}_result" + id = Column(Integer, primary_key=True, autoincrement=True) + s_id = Column(Integer, ForeignKey('{}.id'.format( + f"{db_name_prefix}_sample")), nullable=False) + + id_firm = Column(String(20), nullable=False) + id_product = Column(String(20), nullable=False) + ts = Column(Integer, nullable=False) + status = Column(String(5), nullable=False) + + sample = relationship('Sample', back_populates='result', uselist=False) + + # 💥 新增 GA 调用 ID,用于标记属于哪一次遗传算法运行 + ga_id = Column(String(50), nullable=True) + + def __repr__(self): + return f'' + +if __name__ == '__main__': + Base.metadata.drop_all() + Base.metadata.create_all() diff --git a/GA_Agent_0925/risk_firm_count.py b/GA_Agent_0925/risk_firm_count.py deleted file mode 100644 index 5069c70..0000000 --- a/GA_Agent_0925/risk_firm_count.py +++ /dev/null @@ -1,23 +0,0 @@ -from sqlalchemy import text - -import pandas as pd - -from orm import connection - -# SQL query -with open("../SQL_analysis_risk.sql", "r", encoding="utf-8") as f: - str_sql = text(f.read()) - -result = pd.read_sql(sql=str_sql, con=connection) -# Count firm product -count_firm_prod = result.value_counts(subset=['id_firm', 'id_product']) -count_firm_prod.name = 'count' -count_firm_prod = count_firm_prod.to_frame().reset_index() - -# Count product -count_prod = count_firm_prod.groupby('id_product')['count'].sum() -count_prod = count_prod.to_frame().reset_index() -count_prod.sort_values('count', inplace=True, ascending=False) -print(count_prod) -top100 = count_prod.head(100)['id_product'].tolist() - diff --git a/GA_Agent_0925/多功能.py b/GA_Agent_0925/多功能.py new file mode 100644 index 0000000..64f6e35 --- /dev/null +++ b/GA_Agent_0925/多功能.py @@ -0,0 +1,211 @@ +import json +import os +import pickle +import networkx as nx +from sqlalchemy import text + +import pandas as pd + +from orm import connection + +# """ +# 计算最脆弱前100产品的 Code 列表(去重)。 +# """ +# bom_file = r"../input_data/input_product_data/BomNodes.csv" +# mapping_df = pd.read_csv(bom_file) +# +# with open("../SQL_analysis_risk.sql", "r", encoding="utf-8") as f: +# str_sql = text(f.read()) +# +# result = pd.read_sql(sql=str_sql, con=connection) +# +# count_firm_prod = result.value_counts(subset=['id_firm', 'id_product']) +# count_firm_prod.name = 'count' +# count_firm_prod = count_firm_prod.to_frame().reset_index() +# +# count_prod = ( +# count_firm_prod.groupby("id_product")["count"].sum().reset_index() +# ) +# +# vulnerable100_index = count_prod.nsmallest(100, "count")["id_product"].tolist() +# # 确保 index_to_code 的 key 都是 int +# index_to_code = {int(k): v for k, v in zip(mapping_df["Index"], mapping_df["Code"])} +# +# # vulnerable100_index 也转成 int +# vulnerable100_index_int = [int(i) for i in vulnerable100_index] +# +# # 获取 code +# vulnerable100_code = [index_to_code[i] for i in vulnerable100_index_int if i in index_to_code] +# +# print(vulnerable100_code) + + +# 读取 SQL +ga_id="c943f2c6" +with open("SQL_analysis_risk_ga.sql", "r", encoding="utf-8") as f: + str_sql = text(f.read()) + print(str_sql[:300]) +print(f"[信息] 正在查询 ga_id={ga_id} 的脆弱产品数据...") + +# 执行 SQL 查询,并绑定参数 ga_id +result = pd.read_sql( + sql=str_sql, + con=connection, + params={"ga_id": ga_id} # 绑定参数 +) +# =============================== +# 2️⃣ 统计每个企业-产品组合出现次数 +# =============================== +count_firm_prod = result.value_counts(subset=['id_firm', 'id_product']) +count_firm_prod.name = 'count' +count_firm_prod = count_firm_prod.to_frame().reset_index() +count_firm_prod.to_csv('count_firm_prod.csv', index=False, encoding='utf-8-sig') + +# =============================== +# 3️⃣ 统计每个企业出现的总次数 +# =============================== +count_firm = count_firm_prod.groupby('id_firm')['count'].sum().reset_index() +count_firm.sort_values('count', ascending=False, inplace=True) +count_firm.to_csv('count_firm.csv', index=False, encoding='utf-8-sig') + +# =============================== +# 4️⃣ 统计每个产品出现的总次数 +# =============================== +count_prod = count_firm_prod.groupby('id_product')['count'].sum().reset_index() +count_prod.sort_values('count', ascending=False, inplace=True) +count_prod.to_csv('count_prod.csv', index=False, encoding='utf-8-sig') + +# =============================== +# 5️⃣ 选出最脆弱的前100个产品(出现次数最多) +# =============================== +vulnerable100_product = count_prod.nlargest(100, "count")["id_product"].tolist() +print(f"[信息] ga_id={ga_id} 查询完成,共找到 {len(vulnerable100_product)} 个脆弱产品") + +# =============================== +# 6️⃣ 过滤 result,只保留前100脆弱产品 +# =============================== +result_vulnerable100 = result[result['id_product'].isin(vulnerable100_product)].copy() +print(f"[信息] 筛选后剩余记录数: {len(result_vulnerable100)}") + +# =============================== +# 7️⃣ 构造 DCP(Disruption Causing Probability) +# =============================== +result_dcp_list = [] +for sid, group in result_vulnerable100.groupby('s_id'): + ts_start = max(group['ts']) + while ts_start >= 1: + ts_end = ts_start - 1 + while ts_end >= 0: + up = group.loc[group['ts'] == ts_end, ['id_firm', 'id_product']] + down = group.loc[group['ts'] == ts_start, ['id_firm', 'id_product']] + for _, up_row in up.iterrows(): + for _, down_row in down.iterrows(): + result_dcp_list.append([sid] + up_row.tolist() + down_row.tolist()) + ts_end -= 1 + ts_start -= 1 + +# 转换为 DataFrame +result_dcp = pd.DataFrame(result_dcp_list, columns=[ + 's_id', 'up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product' +]) + +# =============================== +# 8️⃣ 统计 DCP 出现次数 +# =============================== +count_dcp = result_dcp.value_counts( + subset=['up_id_firm', 'up_id_product', 'down_id_firm', 'down_id_product'] +).reset_index(name='count') + +# 保存文件 +count_dcp.to_csv('count_dcp.csv', index=False, encoding='utf-8-sig') + +# 输出结果 +print(count_dcp) +print(type(vulnerable100_product[0])) + +# industry_list = [ +# # ① 半导体设备类 +# {"product": "离子注入机", "category": "离子注入设备", "chain_id": 34538}, +# {"product": "刻蚀设备 / 湿法刻蚀设备", "category": "刻蚀机", "chain_id": 34529}, +# {"product": "沉积设备", "category": "薄膜生长设备(CVD/PVD)", "chain_id": 34539}, +# {"product": "CVD", "category": "薄膜生长设备", "chain_id": 34539}, +# {"product": "PVD", "category": "薄膜生长设备", "chain_id": 34539}, +# {"product": "CMP", "category": "化学机械抛光设备", "chain_id": 34530}, +# {"product": "光刻机", "category": "光刻机", "chain_id": 34533}, +# {"product": "涂胶显影机", "category": "涂胶显影设备", "chain_id": 34535}, +# {"product": "晶圆清洗设备", "category": "晶圆清洗机", "chain_id": 34531}, +# {"product": "测试设备", "category": "测试机", "chain_id": 34554}, +# {"product": "外延生长设备", "category": "薄膜生长设备", "chain_id": 34539}, +# +# # ② 半导体材料与化学品类 +# {"product": "三氯乙烯", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, +# {"product": "丙酮", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, +# {"product": "异丙醇", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, +# {"product": "其他醇类", "category": "清洗溶剂 → 通用湿电子化学品", "chain_id": 32438}, +# {"product": "光刻胶", "category": "光刻胶及配套试剂", "chain_id": 32445}, +# {"product": "显影液", "category": "显影液", "chain_id": 46504}, +# {"product": "蚀刻液", "category": "蚀刻液", "chain_id": 56341}, +# {"product": "光阻去除剂", "category": "光阻去除剂", "chain_id": 32442}, +# +# # ③ 晶圆制造类 +# {"product": "晶圆", "category": "单晶硅片 / 多晶硅片", "chain_id": 32338}, +# {"product": "硅衬底", "category": "硅衬底", "chain_id": 36914}, +# {"product": "外延片", "category": "硅外延片 / GaN外延片 / SiC外延片等", "chain_id": 32338}, +# +# # ④ 封装与测试类 +# {"product": "封装", "category": "IC封装", "chain_id": 10}, +# {"product": "测试", "category": "芯片测试 / 晶圆测试", "chain_id": 513742}, +# {"product": "测试", "category": "芯片测试 / 晶圆测试", "chain_id": 11}, +# +# # ⑤ 芯片与设计EDA类 +# {"product": "芯片(通用)", "category": "集成电路制造", "chain_id": 317589}, +# {"product": "DRAM", "category": "存储芯片 → 集成电路制造", "chain_id": 317589}, +# {"product": "GPU", "category": "图形芯片 → 集成电路制造", "chain_id": 317589}, +# {"product": "处理器(CPU/SoC)", "category": "芯片设计", "chain_id": 9}, +# {"product": "高频芯片", "category": "芯片设计", "chain_id": 9}, +# {"product": "光子芯片(含激光)", "category": "芯片设计 / 功率半导体器件", "chain_id": 9}, +# {"product": "光子芯片(含激光)", "category": "芯片设计 / 功率半导体器件", "chain_id": 2717}, +# {"product": "先进节点制造设备", "category": "集成电路制造", "chain_id": 317589}, +# {"product": "EDA及IP服务", "category": "设计辅助", "chain_id": 2515}, +# {"product": "MPW服务", "category": "多项目晶圆流片", "chain_id": 2514}, +# {"product": "芯片设计验证", "category": "设计验证", "chain_id": 513738}, +# {"product": "过程工艺检测", "category": "制程检测", "chain_id": 513740} +# ] +# # 提取所有 chain_id,并去重 +# chain_ids = set() +# for item in industry_list: +# # 如果 chain_id 是字符串包含多个编号,用逗号或斜杠拆分 +# if isinstance(item["chain_id"], str): +# for cid in item["chain_id"].replace("/", ",").split(","): +# chain_ids.add(cid.strip()) +# else: +# chain_ids.add(str(item["chain_id"])) +# print(list(chain_ids)) +# fill g_bom +# 结点属性值 相当于 图上点的 原始 产品名称 +# bom_nodes = pd.read_csv('../input_data/input_product_data/BomNodes.csv') +# bom_nodes['Code'] = bom_nodes['Code'].astype(str) +# bom_nodes.set_index('Index', inplace=True) +# +# bom_cate_net = pd.read_csv('../input_data/input_product_data/合成结点.csv') +# g_bom = nx.from_pandas_edgelist(bom_cate_net, source='UPID', target='ID', create_using=nx.MultiDiGraph()) +# # 填充每一个结点 的具体内容 通过 相同的 code 并且通过BomNodes.loc[code].to_dict()字典化 格式类似 格式 { code(0) : {level: 0 ,name: 工业互联网 }} +# bom_labels_dict = {} +# for index in g_bom.nodes: +# try: +# bom_labels_dict[index] = bom_nodes.loc[index].to_dict() +# # print(bom_labels_dict[index]) +# except KeyError: +# print(f"节点 {index} 不存在于 bom_nodes 中") +# # 分配属性 给每一个结点 获得类似 格式:{1: {'label': 'A', 'value': 10}, +# nx.set_node_attributes(g_bom, bom_labels_dict) +# # 改为json 格式 +# g_product_js = json.dumps(nx.adjacency_data(g_bom)) +# # 假设 g_bom 是你的 NetworkX 图 +# g_product_data = nx.adjacency_data(g_bom) +# +# # 保存为 pkl 文件 +# with open("g_bom.pkl", "wb") as f: +# pickle.dump(g_product_data, f) +# +# print("✅ 图数据已保存为 g_bom.pkl") diff --git a/GA_Agent_0925/GA_random.py b/GA_Agent_0925/废案/GA_random.py similarity index 86% rename from GA_Agent_0925/GA_random.py rename to GA_Agent_0925/废案/GA_random.py index 8c4a1bc..5c75385 100644 --- a/GA_Agent_0925/GA_random.py +++ b/GA_Agent_0925/废案/GA_random.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # 文件的编码格式设置为 UTF-8 from __future__ import division # 为了兼容 Python 2 和 3,保证除法始终返回浮点数 +import multiprocessing import random # 导入 random 库,用于生成随机数 from deap import base # 从 DEAP 库导入 base 模块,提供一些遗传算法相关的功能 @@ -11,6 +12,77 @@ from my_model import MyModel from sqlalchemy import text import pandas as pd from orm import connection + +def main(): + random.seed(42) # 可复现结果 + print("Start of evolution") + + ga = creating() + pop = ga.population(n=50) + CXPB, MUTPB, NGEN = 0.5, 0.2, 200 + + # # 并行计算 + # pool = multiprocessing.Pool() + # ga.register("map", pool.map) + + # 改为: + ga.register("map", map) # 单进程 + + # 评估初始种群 + fitnesses = list(ga.map(ga.evaluate, pop)) + for ind, fit in zip(pop, fitnesses): + ind.fitness.values = fit + print(f"Evaluated {len(pop)} individuals") + + best_log = [] + + for g in range(NGEN): + print(f"-- Generation {g} --") + + # 选择并克隆 + offspring = list(map(ga.clone, ga.select(pop, len(pop)))) + + # 交叉与变异 + for child1, child2 in zip(offspring[::2], offspring[1::2]): + if random.random() < CXPB: + ga.mate(child1, child2) + del child1.fitness.values + del child2.fitness.values + + for mutant in offspring: + if random.random() < MUTPB: + ga.mutate(mutant) + del mutant.fitness.values + + # 重新计算失效适应度 + invalid_ind = [ind for ind in offspring if not ind.fitness.valid] + fitnesses = list(ga.map(ga.evaluate, invalid_ind)) + for ind, fit in zip(invalid_ind, fitnesses): + ind.fitness.values = fit + + pop[:] = offspring + + # 最优个体 + best_ind = tools.selBest(pop, 1)[0] + best_log.append((g, best_ind.fitness.values[0])) + + print(f"Best individual {g}: {best_ind}, Fitness: {best_ind.fitness.values[0]:.3f}") + + # 写入数据库 + result_sql = text(f""" + INSERT INTO ga (generation, stu_beta, stu_nmb, gtu_mgf, gtu_discount, fitness, remark) + VALUES ({g}, {best_ind[0]}, {best_ind[1]}, {best_ind[2]}, {best_ind[3]}, {best_ind.fitness.values[0]}, 'Random2') + """) + with connection.connect() as conn: + conn.execute(result_sql) + conn.commit() + + # pool.close() + # pool.join() + + pd.DataFrame(best_log, columns=["generation", "fitness"]).to_csv("ga_log.csv", index=False) + print("-- End of (successful) evolution --") + # 目标函数(适应度函数),用于评估个体的适应度 def fitness(individual): """ @@ -77,6 +149,10 @@ def creating(): 创建遗传算法工具箱,用于优化 ABM 模型参数,使生成的脆弱产业集合 与目标产业集合误差最小化(fitness 最大化)。 """ + if "FitnessMax" not in creator.__dict__: + creator.create("FitnessMax", base.Fitness, weights=(1.0,)) + if "Individual" not in creator.__dict__: + creator.create("Individual", list, fitness=creator.FitnessMax) # 定义最大化适应度 creator.create("FitnessMax", base.Fitness, weights=(1.0,)) # 定义个体类 @@ -124,7 +200,7 @@ def creating(): toolbox.register("population", tools.initRepeat, list, toolbox.individual) # 注册 fitness 函数(需要在调用时传入目标产业集合) - # toolbox.register("evaluate", fitness) # 可以在 main 中使用 lambda 包装 target_chain_set + toolbox.register("evaluate", fitness) # 可以在 main 中使用 lambda 包装 target_chain_set # 交叉、变异和选择操作 toolbox.register("mate", tools.cxTwoPoint) @@ -133,76 +209,6 @@ def creating(): return toolbox -def main(): - # 创建遗传算法的工具箱 - ga = creating() - - # 初始化种群大小为 50 - pop = ga.population(n=50) - - # 交叉概率、变异概率和代数 - CXPB, MUTPB, NGEN = 0.5, 0.2, 500 - - print("Start of evolution") - - # 评估整个种群的适应度 - fitnesses = list(map(ga.evaluate, pop)) - for ind, fit in zip(pop, fitnesses): - ind.fitness.values = fit - - print(" Evaluated %i individuals" % len(pop)) - # my_sql = Sql() # 创建 Sql 类的实例,用于与数据库交互 - - # 开始演化 - for g in range(NGEN): - print("-- Generation %i --" % g) - - # 选择下一代的个体 - offspring = ga.select(pop, len(pop)) - # 克隆选择的个体 - offspring = list(map(ga.clone, offspring)) - - # 对后代进行交叉和变异 - for child1, child2 in zip(offspring[::2], offspring[1::2]): - # 以 CXPB 的概率交叉两个个体 - if random.random() < CXPB: - ga.mate(child1, child2) - - # 交叉后的适应度值需要重新计算 - del child1.fitness.values - del child2.fitness.values - - for mutant in offspring: - # 以 MUTPB 的概率变异个体 - if random.random() < MUTPB: - ga.mutate(mutant) - del mutant.fitness.values - - # 评估适应度无效的个体 - invalid_ind = [ind for ind in offspring if not ind.fitness.valid] - fitnesses = map(ga.evaluate, invalid_ind) - for ind, fit in zip(invalid_ind, fitnesses): - ind.fitness.values = fit - - print(" Evaluated %i individuals" % len(invalid_ind)) - - # 将种群完全替换为后代 - pop[:] = offspring - - # 收集所有个体的适应度并打印统计信息 - fits = [ind.fitness.values[0] for ind in pop] - - # 获取当前最好的个体并打印 - best_ind = tools.selBest(pop, 1)[0] - print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values)) - - # 将最优个体的信息插入数据库 - result_string = '''INSERT INTO ga (generation, stu_beta, stu_nmb, gtu_mgf, gtu_discount, fitness, remark) - VALUES ({}, {}, {}, {}, {}, {}, 'Random2')'''.format(g, best_ind[0], best_ind[1], best_ind[2], best_ind[3], best_ind.fitness.values[0]) - # my_sql.insert_one_row_and_return_new_id(result_string) - - print("-- End of (successful) evolution --") - def get_target_vulnerable_industries(): """ 获取行业列表中所有产业链编号的集合(整数形式)。 @@ -280,11 +286,6 @@ def get_target_vulnerable_industries(): return chain_ids - -import pandas as pd -from sqlalchemy import text # 用于 SQL 查询 - - def get_vulnerable100_code(connection): """ 计算最脆弱前100产品的 Code 列表(去重)。 @@ -294,11 +295,11 @@ def get_vulnerable100_code(connection): List[int]: 最脆弱前100产品对应的 Code 列表 """ # 读取映射表 - bom_file = r"../input_data/input_product_data/BomNodes.csv" # 直接给出路径 + bom_file = r"../../input_data/input_product_data/BomNodes.csv" # 直接给出路径 mapping_df = pd.read_csv(bom_file) # 执行 SQL 获取结果 - with open("../SQL_analysis_risk.sql", "r", encoding="utf-8") as f: + with open("../../SQL_analysis_risk.sql", "r", encoding="utf-8") as f: str_sql = text(f.read()) result = pd.read_sql(sql=str_sql, con=connection) diff --git a/GA_Agent_0925/进度.py b/GA_Agent_0925/进度.py new file mode 100644 index 0000000..7c31837 --- /dev/null +++ b/GA_Agent_0925/进度.py @@ -0,0 +1,43 @@ +from matplotlib import rcParams, pyplot as plt +from sqlalchemy import func +from orm import db_session, Sample + +# 🔹 全局创建绘图对象 +plt.ion() # 启用交互模式 +fig, ax = plt.subplots(figsize=(8, 5)) +rcParams['font.family'] = 'Microsoft YaHei' +rcParams['font.size'] = 12 + +# 初始化柱状图 +labels = ['未完成 (-1)', '计算中(0)', '完成 (1)'] +initial_values = [0, 0, 0] +bars = ax.bar(labels, initial_values, color=['red', 'orange', 'green']) +value_texts = [ax.text(bar.get_x() + bar.get_width()/2, 0, '0', + ha='center', va='bottom', fontsize=12) + for bar in bars] + +ax.set_title('任务进度分布', fontsize=16) +ax.set_xlabel('任务状态', fontsize=14) +ax.set_ylabel('数量', fontsize=14) +ax.tick_params(axis='both', labelsize=12) + +def visualize_progress(): + """ + 实时更新 Sample 表中 is_done_flag 的分布。 + """ + # 查询数据库 + result = db_session.query(Sample.is_done_flag, func.count(Sample.id))\ + .group_by(Sample.is_done_flag).all() + data = {flag: count for flag, count in result} + for flag in [-1, 0, 1]: + data.setdefault(flag, 0) + values = [data[-1], data[0], data[1]] + + # 更新柱子高度和文本 + for bar, new_val, txt in zip(bars, values, value_texts): + bar.set_height(new_val) + txt.set_y(new_val + 0.5) + txt.set_text(str(new_val)) + + plt.draw() + plt.pause(0.1) # 刷新图表 diff --git a/__pycache__/controller_db.cpython-38.pyc b/__pycache__/controller_db.cpython-38.pyc index 0e372669dbb6d6816f712ae06a9c8b55e688aab3..64f6a700212dfea831e48fb61393b655ffedeab7 100644 GIT binary patch delta 1143 zcmZ{i|7#O>7{~8PE|)Y-+GL4onlx?GvX+*vma>WzbQ@cBh=O3tu%wOG+_lY`-ld;A zsoGdUH@9VMjy>I~R%$DL+k}oT>o&*6{(yo0q(XiW6pL&Wk%B)dY@g?DxSw`Eym)_} zFZX#q&-2{ceR;Qk!0-18{QE`Q91pJg?>pcUZa7ZW7aRp4?NKDoiZOxHYq3)Ca_z%; zrwL{Bi81hFtJsHzcw*bLz5G9K_ofC6l^Ln&>FLxvsxe{e`BZmTcTeZ`M*Ca;thoN& zuaADiKbLPlURXhot348<62J>#2speD0|_GVidfp?`apsjyj}UNyX?xdtY(&Gec+5~ zJeui*JYkBkm5{@8)zi{2$v8#=oq_)%|MedXw0PK29#94q9|Xhrb>J?{;AC(@nxV8- zgr*S4rOn`501BODV*n>{C{hm}Vj=QJ%u27LApfY& zGHP03dOod;umO~7UW2*PnVN$jou%xr@JX~i@iKvZN?B57T+e1yCQ`&4_SC-GL${Yj zO`cR)HJ5Ep)WJq>^L z{%7w0KJCm#{*wHuyD_CrNv*ibhkl1yye?zdYy++C^&+6Te__Xod7Fs-3 zMW9)+eS~3LOh$JdB5CceOsa)&k#L@{K=_`c>@!T+%w{H4b6i*K3fIU<17ttpi)0bz z@uQ}b(I^@0rOC^hA{*=tvRubxb7<##B)bSc!p{V2k^C85Gnt;_J40(ZM~({|<%+%| P88vTab&VB}HK+aoCw?Rz delta 1314 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 delta 3521 zcmb7H>u(%a6`#8=ulMOV@jFe{k2)T|>ZGAbS}O#vTa=0fV;Uh`x6{qe*xq z%z544IrrS_KTN90_>FixqS4>D{kNIx8}TRlQuJVIrpRjrF(HKZY0dPR{x!|?TVmBe z;WGoD*Yw~HY&Ob&ZH6$} zue1_1!_&g7H6v@fC zd&%iHf4ukLoV00bgi^hl zt3R&3>NhV12$6qxr=Oj?VO!FkTv%9`9JTCOr&OLSSaxRM(%`wF$*G(y43_V>k>PyK zcCw{H`EsWk4J?nsS_VPFATbb@CBOmoZu;7QKBR?2?7urb#O^GDoFJn6TtTTcsd(_Z zUP}VEX1;8cWy$p1RD4lrGne&3zo^!Nn>}st;UgkXf)hmavu@CyFI&Ksgjk+^lZfU|_#-0X z3km-CLiCAjf426X7=%aNCwT?I%(PW>wuI{|o~wf4)((@{S}e=US@mJ$%1A4j$OhO& z-2h;f?U0-Ufjc)q+774bCIES+c*kJZwtNyw<7zqDEaGZ2n(p}w1Ps;}z#(_HURs6H zZOgFCY0Gd*Mt0tQd0WIDh>#arZNx|G+2#hR>jBPQM$|vzr;`=jxrVn@L*hzk44yxy zN~!16W+FM=MUPv%OAeqx4podTmr2QnvykS~WDXusD0zy=3j~oUOSFM(A>xWrJ?Z-M zR?%A@!|{}gB~wwZ)g%1H0sQpE$7P) zVBiKTZto<2=Mw?-Zhd>(Ea~Y&UaJ^Z`gc>kU%!4H&U8Ol$PLeAYzEcqBbYv}@!wJJ z9>3Z(gSWRpSdWupQVH;5P5n7_Ql%O?I11-o!PU;)wFst&Q*ttS15e(%D%L+$>nFyJ z5akz@D4o?DmXOyykb^1xQdtfCqD8&cFt~zB>Bl4^jxxB(T+uO#Mj^9kI5L;XORmcW zco_z{1SP*cUy#p(tI5uka#@S8$IH7Q=w3HimgLBT@FJurrylldi8{D-dD}76CmUPD zg8E|PP!n>b8gPx`uvh^}sE3Uw#K!i|8wY*j6m{ot=l{oiN2OclJ^_bYLaxFMpdkJM z_=8~llSI`P{t_Y_0q=hS?~xUD^~PQR`Q}I6f3V-ZUMGQt8_YRY!Is@nFGG;XWV04E zue9doEgBV!G;fgCp@VtB05bXvyj&yMc@K3I#|?SoU_ZnYVL;4#_bc#_2f42x3a2>QYe zXH3)EQ@mzwh;_X6CLK8RhrA8Ky+~`iM5n#iFB=eFBQg=i*B>_2Krf zpZI|gxg&N;akpQ1v zj13y)v5kQpS?vi1e76fG;)RT3VHX=}z5QGt8o&+P^EVAXknY3qYam!A4JFgYgzN_BTFo;?Vpe0$G7&uKn2M)ogM@|HUSj8_5U#Y5g7v*TVo;QgBv z9%!hoC)1~S18gFpgG-m+f-Iq;-K}Cs)pVp)uKV>1JQ@XG9B3}ZNo69!crtnuAz)~X zc`Z`u6SqlSJJTe_)YE6yE_@fkh3v&o)kAhBx8Fnhu!m;V-qS2@sG6R%8q+(TeF^3P zuM>3Qz0Jj2C5A_iT}_}?T2s=pXN>U)mC{eCpY@#IbAd!;-^Xx~euZ3&@0kz4a`0oA zkG;kj{9f-p$%_y?{`Q@wUe>Cvw@Hol22@|~dn>pqcsB{}8bgnI#0}tf=!U0csW5BZ zvAr2F4pkZyyJLiB4#UFxr4g391B539Zl$izv1JoX4x!eV&0CqGakI{vDoMIevph>gs=Eq?$Z6p~eI9r5EVpSQ&G~qmdpvx^Q?dst@{K z?Mgu<3vvhK>mYA|V7kd~gM3Hb8)$C$KG=sKKLkM{@~(O`aJ;3uyz3D1g~Crcx` n?+Uo4)O;#G!ZZg{v*GUxNwWh}{tZp{BbbV9y$ diff --git a/__pycache__/my_model.cpython-38.pyc b/__pycache__/my_model.cpython-38.pyc index b6ab2acf8ebf254a15fc55a62c07d851127bcd29..3b91b3dd08adcfa270459caeb1752e6992281033 100644 GIT binary patch delta 7374 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 delta 7345 zcmahu3v?7!mi4NttE)SmP6+w`1B9gc{{kp6AOVSd!XH8dHchIMbdvt?ssagih#wq5 zVF&l=pn%ZvGcz~}x>+4$on_8hcXrQ=yMET$nJLGk4kV1To^jPxXLQxQ_f@9@z0Pj; z>09^Rci(;Y-FNSO_f`M#b@J(}#Jf2&(=EW~JI-Hrw4Hp;`vh@|&|CsP;{)~*xstg+ zTX<0Lmuoj{6nri)jh&F!UC<>`+ zNBt&nI8n>(7tKkX)rrY*agZD%bg5Yr7qz^*#qZ|yOJ;4t7nit7-mOBNuwK|8v9W@hBgDgd&T6^fXFYb4S_q zRgamWXvA{FD9lJ}*hksBYMPMaR^%YMC2K)5NO4jdtU;^+Ky;{g923bp=E+^FtVQYu z7R)_2Wjml}iA8$T23cx-cQCwL3pShwj!)pnPS@wNTMG(UM_yF1XJBvV6_#8-ndPqU z4jE=^G#qQVz_RmOeAw?JmNOL5Lan-yHV^HB?hEjv-Ryz1mkh5|ql#cxER*_TH*LyK+!U`d8aEhp7u-N9C!ZbP~s0a}puaE@>= zX2~HV60{t8IA-=y++I+dEicS!tVP@#)U-eZmSF_iXf$j&I8JfXt?`Bqz6E{PE)6xO zl>mG$+Qg0*9^v)|i|oS=z6P%TVrV|Z8j3FS9i_R@v^+7YYdYB6h*AUe*G-?p9&$Sl zu41c-eYw|fAMJyl*Vv)rHv$^+=m^>XG{gKUThOgY?nm$~cAyo|0UC1U?nS1wIhFwJ zS3@tBOcyh*nS^~*R$JSiVh^RTu{}ax`4H*d?B?4`z$>+}!`M2GaL*O)(-otrSHj`!V<4166agIGlvE)Yin9#%$AEY{r@Xzd7wB3}tC zZ{im@DgII0u3}Y_CT681P+V^|+c@ct)kUN7M@{5HALNqHij=z@8)cy>TjfL6He{eH zf++YD?(g8971c#$wLrC_M%UVtQ8Vhr_p!~@Q*8(S9t!31mICG(da(KoAqV)*W!&Uq z>uZYUrd9!pgpvIW07!jqGinCA14d}Sp5`U9*`qZ_HX$250Kg(KUk06rP1K6sgES== zi|G-KPDILVPHF9kLZY*za3}(KOb1}}gn26PIqh9J!TM|GOneBq{c5*i!l@D6ZO=W3 zV)!~92CQi4joSCf0LC9b*m^KGz5n1NzdwI|6J)SmNJocw{~P!;gL3E$W6IfCz-{!j zCUbzDtA2<~n3-(8z+N;xNA%-Lil;sHXR1ptOWhxnKiraZu8C9`f-p2FTAfv8+|VAhm^ z)Lf%}_g(D&Yj$Z?QJV7|U{`0Yz4=k>23NuyklG=h8B*Sew&32F9`5ME_p^Po8&}}0 z5YlH+Sc2nLR%#e`ljIqeQvTSr?t2S;97mo8->aYaAfkL3`w{zbs+k&lg6*2Kb>R6_ z#|wagwl5-qAB%i+iv0{ur9!7d6ygy)-_TNMKne@CcHq&d>b-FK2BKY-xNmo}uZW*4 z+*7$lEJf4Xsjl1UlBXZc76aT<=+ihUCU1Hi!4D8{XW>52J)Bzw-JE_O!6OKsL9h^j zrG|rDx)!1aU4*oHq{&)OIOg-(j(-fve}iBMfIo-ZHAdO zDnus9g6ZvY(~k)hvqWeYLhzFyz4a^o&VF^95D{Ah&8=k|gp#*2Ynfe-XPe{VP*NWf z5|ZZ8S4JsrEn$eV4ROcFV?3}ki%I8^|(PzWS_%)H!Lr+ z)Kz-la!R9=E zaCd_o!ShkdN|vi0Cf9powBbYcK>cHxya$Kjp0Fi1O-jpJpEBd7!;J-~CI%ejT)o${ z7thl(w^*Lm$`1%F&=bRhLJJsX(4?5P=>!09TsE=A4Ta=(*3wX0X(1ga235IwZy|wO zVFh4USfb&~a$FCL>%cCwustUi>A@yW4C8tD{1X!RN;u$>UI$v%(80y8h~Pu(m#(Zs zfl#$8dxPCQx?w416r+@ezGZ9|(5At~8tSUomL9MRzN^UhmzZbU%zGQ{Y3TpSJfAaz zxUqVbecCu-U>nZhNAM@3^+>m@WCZFr*2iTcuJFQOJAt^PcNl3TN zG8mBuS{PFR5nSk8ZfWRy%ia`~cY#3PW3d&pGWbb3jO`Jqdvn>P6*YBs6KG&b8Lu&x zv_AwlJ>*K;05sw{+b$(d8!~u0_yh9&$EdXFb`xoTMDUlSY_+Al+hk7v2>Cw#e@EPA zkGS(zqh_qSP1)DVpgP`Tcx6oAKxzNRN>-Lk-H9l=wWYR&pehQ6b-EFnqcxGuicJ5- zf-9#K1rSYJ_Hv*#3_Y>ZAu1EFyPBO}{e1CQeV_7BOEyeB7G($4{B*@{k@H6g-bU~l zfM%#5d5(DpDHwY^l>9l#*8^Ax1>o}8+GAjNVgK#yp606b%hKo2b3eP-{JXi=OY>)I zA%phBOq9TbHYEmSeS<(?uddC%uAF+VxnRh-u7}JW(-@AZq}mdoxT>HDc?UIyC4{dL zc7A4vSOiJjO`IvtC1e><9_{aC&tL%Y>a9`o*}|NsRnGZhQizVTaf+^~-S?+F}=> zrSO#Ea-q=gh>LO31+_7}LLzaop2H#`A;+b-qYYjo5n)d$$RP>GAj)n5Nn*d!5?7$H zl8Xfq2?gIQ!C~ywNS8!u+?jBqfOak*sYG$V8do(DUU^AfB291=R86WE_9XVuJ#Cr{ z?~)ws-7V#8&8CuR+-vwA*j}UB_QQk6FBt*qmo^5dor;gM$2ZND@Q(hQO=U9Ll6|$Q zl1{Cy|kssabeG0d-gJG%d#3=1rLSyVSb(>x!>aP zNjnidiQqU}zO~NtpMY9o<1DyUG_mh&Er;{v$*s$lyTKg(oG_G|p@>fV0#x4v8Q(N$ z26l`KMM5SV>;a&LV&T+LoC-|(C5U~C&1lIdZnnH-yB{-xM*4{cTbgv8C9pCfL16F5 zpa>2lBt*cW7~*dQVb$4zAiNV_$ABW7@V=G6p#NKrM$0D!a6;uqtiC{u{cnDl~Esk!2ze{b}2HGK>2J z{W;L+ZvdPX{VHU=9ys^yZzVsZ-^@J^8@XIcn7ekTynYg5X3l1BduMAos_gWCpLfiLyJ z$iY;KKO+Lb1Yb2F$8<`Egig8Bp^>8`0iI|qyH{ufzt*IKD)cz9#E0}q=rR}q@B1;W z0p>!V)nptSaGMzk&mfflfM){qa%@~yip>Fzt@Qkk{lo4>JBPo2*U0Hp!#`oehmVdV zemrvO>8mFWUi~`;#F0}^UAgq=@G}p8_|lQ#Lyy?_$l*IiP947b;F&8Ie{l7_7e?;5 z^U8&b?>~Ba{zT+-;W%2`;PZ=z!U1uyj9WvlI9*wmd0RBm^(~oB81hesMzLLGwT3s;#(m13t zGigNV$CReT9dTKcjyhPCwyK=Fash5u)B||N6TPF%K_INNHv(s{Olcl?xb^wWhUR{(Eu;7Ff9Cv0sl4x@GW{1Thf-d zm>Vw+Jv_Ns61=|JiCW^)1!uA7R^>k_Su&nRl1e=A+@GYf3->~vf0mS!A| z|0~eN2>K8#L2xsI2M{bp@GyeEMbL-){aHl1VK#9rtvgrBhx034oM)XC~1)v0>aVl_+6RIAlWb)7n2ovJFTPo1rn zs`#l;tDvVq^{Ou5t)(c%S7rayL#>S^-3%l z(SinlEpEwS-3U?{cr7=gGmIGiP2j-67zGxq?5J|g;Mgr46%)BjVFBfrqBP9++;%{o Tcs-o&P)B)o`l8tj9Si>lz7qe? diff --git a/__pycache__/orm.cpython-38.pyc b/__pycache__/orm.cpython-38.pyc index 861af70663810cc4ecc693008e19115a4d116b52..0babf1e11d8140787d07a492c527e3d81545cf68 100644 GIT binary patch delta 211 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�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 z%0D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 agent 的快速映射字典 self.agent_map = {agent.unique_id: agent for agent in self.company_agents} @@ -717,13 +714,20 @@ class MyModel(Model): for firm in self.company_agents: if not firm.R: # 跳过没有资源的企业 continue - # 遍历资源列表,检查哪些资源需要补货 - for resource_id, resource_quantity in firm.R: - if resource_quantity <= firm.s_r: # 如果资源低于阈值,记录需求 - required_quantity = firm.S_r - resource_quantity + # purchase_material_firms 用于记录需要补充材料的企业 + purchase_material_firms = {} + + for i, (resource_id, resource_quantity) in enumerate(firm.R): + # 对应位置的初始值 + init_quantity = firm.R1[i][1] # R1[i] = [resource_id, 初始数量] + + if resource_quantity <= init_quantity * firm.s_r: # 判断阈值 + required_quantity = init_quantity * firm.S_r - resource_quantity + if firm not in purchase_material_firms: purchase_material_firms[firm] = [] + purchase_material_firms[firm].append((resource_id, required_quantity)) # 寻找供应商并处理补货 @@ -754,7 +758,7 @@ class MyModel(Model): # 检查设备残值,记录需要补充的设备 for equipment in firm.C: equipment_id, equipment_quantity, equipment_salvage = equipment - equipment_salvage -= firm.x # 减少设备残值 + equipment_salvage -= equipment_salvage*firm.x # 减少设备残值 if equipment_salvage <= 0: # 如果残值小于等于 0 equipment_quantity -= 1 required_quantity = 1 # 需要补充的设备数量 @@ -869,22 +873,29 @@ class MyModel(Model): else: self.int_stop_ts = self.t - def end(self): + def end(self, ga_id=None): """ 结束模型运行并保存结果。 - - 如果当前样本的结果未保存,则保存所有生产状态为非正常状态的结果。 - - 更新样本状态为完成,并记录相关信息。 + - 按照 (sample.id, ga_id) 双键标识每次运行。 + - 若该组合结果已存在,则不重复保存。 + - 更新样本状态。 """ - # 检查当前样本结果是否已存在 - if not db_session.query(Result).filter_by(s_id=self.sample.id).first(): - # 生成需要保存的结果列表 + # 1️⃣ 检查该 sample + ga_id 是否已有结果 + exists = db_session.query(Result).filter_by( + s_id=self.sample.id, + ga_id=ga_id + ).first() + + if not exists: + # 2️⃣ 构造要保存的结果列表 lst_result_info = [ Result( s_id=self.sample.id, id_firm=firm.unique_id, id_product=prod.unique_id, ts=ts, - status=status + status=status, + ga_id=ga_id, # 标记当前代次 ) for firm in self.company_agents for prod, dct_status_supply in firm.dct_prod_up_prod_stat.items() @@ -892,13 +903,14 @@ class MyModel(Model): for status, ts in dct_status_supply['p_stat'] ] - # 批量保存结果到数据库 + # 3️⃣ 插入结果 if lst_result_info: db_session.bulk_save_objects(lst_result_info) db_session.commit() - # 更新样本状态为已完成 + # 4️⃣ 更新样本状态 self.sample.is_done_flag = 1 self.sample.computer_name = platform.node() self.sample.stop_t = self.int_stop_ts db_session.commit() + diff --git a/orm.py b/orm.py index ffe995f..a02ccfa 100644 --- a/orm.py +++ b/orm.py @@ -105,6 +105,9 @@ class Result(Base): sample = relationship('Sample', back_populates='result', uselist=False) + # 💥 新增 GA 调用 ID,用于标记属于哪一次遗传算法运行 + ga_id = Column(String(50), nullable=True) + def __repr__(self): return f''