def build_file_train_model_produce_output( self, feature_names, n_gram_length, sentiment_processor, spotter, golden_saliency_by_entid_by_docid, dexter_dataset, wikipedia_dataset): feature_filename = FileLocations.get_dropbox_intermediate_path( ) + 'sentiment_simple_ngram_' + str(n_gram_length) + '.txt' document_to_feature_converter = SimpleSentiment( sentiment_processor, n_gram_length=n_gram_length) model_filename = FileLocations.get_dropbox_intermediate_path( ) + 'simple_sentiment_model_ngram_' + str(n_gram_length) + '.pickle' tosent_converter = SimpleGBRT(model_filename) test_docid_set = set(Const.TESTSET_DOCID_LIST) train_docid_set = set(Const.TRAINSET_DOCID_LIST) salience_by_entity_by_doc_id = smb.build_output_using_dexter_dataset( spotter, golden_saliency_by_entid_by_docid, feature_filename, document_to_feature_converter, tosent_converter, test_docid_set, train_docid_set) # if not os.path.isfile(model_filename): # build model self.train_model(feature_filename, feature_names, dexter_dataset, wikipedia_dataset, model_filename) trc = TrecReferenceCreator() prefix = str(n_gram_length) + '_n_gram_x_temp' trc.create_results_file(salience_by_entity_by_doc_id, prefix) report, ndcg, trec_by_id = trc.get_report( FileLocations.get_dropbox_intermediate_path() + 'trec_ground_truth.txt', prefix) trc.logger.info('\nTrec Eval Results:\n%s', report) return salience_by_entity_by_doc_id, ndcg, trec_by_id
def get_ndcg_and_trec_eval(self, feature_filename, model_filename, feature_names, docid_set, wikipediaDataset , dexterDataset, per_document_ndcg): self.logger.info('loading model %s', model_filename) with open(model_filename, 'rb') as handle: model = pickle.load(handle) salience_by_entity_by_doc_id = self.get_salience_by_entity_by_doc_id(feature_filename, model, docid_set, feature_names, dexterDataset, wikipediaDataset, filter_for_interesting=False) trc = TrecReferenceCreator() prefix = 'model_runner_x_temp' trc.create_results_file(salience_by_entity_by_doc_id, prefix) overall_report, overall_ndcg, overall_trec_val_by_name = trc.get_report(FileLocations.get_dropbox_intermediate_path() + 'trec_ground_truth.txt', prefix) ndcg_by_docid = {} trec_val_by_name_by_docid = {} if per_document_ndcg: skipped = [] for docid in docid_set: salience_by_entity_by_doc_id_b = {} if docid in salience_by_entity_by_doc_id: salience_by_entity_by_doc_id_b[docid] = salience_by_entity_by_doc_id[docid] trc = TrecReferenceCreator() prefix = 'model_runner_x_temp' trc.create_results_file(salience_by_entity_by_doc_id_b, prefix) report, ndcg, trec_val_by_name = trc.get_report(FileLocations.get_dropbox_intermediate_path() + 'trec_ground_truth.txt', prefix) trc.logger.info('\nTrec Eval Results:\n%s', report) ndcg_by_docid[docid] = ndcg trec_val_by_name_by_docid[docid] = trec_val_by_name else: self.logger.warning('No data for docid %d, skipping',docid) skipped.append(docid) self.logger.info('per doc ndcg : %s ', ndcg_by_docid) self.logger.info('skipped in the per doc ndcg : %s ', skipped) trc.logger.info('\n_____________________________________\nTrec Eval Results Overall:\n%s', overall_report) return overall_ndcg, ndcg_by_docid, overall_trec_val_by_name, trec_val_by_name_by_docid
def create_reference_file(self, zero_less_than_2): # load the data dd = DatasetDexter() document_list = dd.get_dexter_dataset( path=FileLocations.get_dropbox_dexter_path()) results = '' # process the data result_count = 0 doc_count = 0 for document in document_list: data = json.loads(document) saliency_by_ent_id_golden = self.extract_saliency_by_ent_id_golden( data) docid = data['docId'] sorted_list = self.get_ordered_list_from_dictionary( saliency_by_ent_id_golden) for item in sorted_list: entity_id = item[0] salience = item[1] if zero_less_than_2: if salience < 2.0: salience = 0.0 results = results + str(docid) + ' 0 ' + str( entity_id) + ' ' + str(salience) + '\n' result_count += 1 self.logger.info('Documents Processed %d Entities Processed %d ', doc_count, result_count) doc_count += 1 fn = FileLocations.get_dropbox_intermediate_path( ) + "trec_ground_truth.txt" self.logger.info('writing to %s ', fn) file = open(fn, "w") file.write(results) file.close()
from sellibrary.text_file_loader import join_feature_matrix from sellibrary.text_file_loader import load_feature_matrix from sellibrary.locations import FileLocations from sellibrary.sel.dexter_dataset import DatasetDexter from sellibrary.wiki.wikipedia_datasets import WikipediaDataset from sellibrary.filter_only_golden import FilterGolden from sellibrary.util.const import Const if __name__ == "__main__": const = Const() dropbox_intermediate_path = FileLocations.get_dropbox_intermediate_path() file_A_feature_names = const.get_sel_feature_names() filename_A = dropbox_intermediate_path + 'wp/wp.txt' file_B_feature_names = const.sent_feature_names filename_B = dropbox_intermediate_path + 'wp_sentiment_simple.txt' #'base_tf_simple_v2.txt' output_filename = dropbox_intermediate_path + 'wp_joined.txt' #'joined_sel_sent_and_tf.txt' # Load File A X1, y1, docid_array1, entity_id_array1 = load_feature_matrix( feature_filename=filename_A, feature_names=file_A_feature_names, entity_id_index=1, y_feature_index=2, first_feature_index=4, number_features_per_line=len(file_A_feature_names) + 4, tmp_filename='/tmp/temp_conversion_file.txt')
s = '%d %d 0 0 [ %f ]' % (docid, entity_id, sent) self.logger.info(s) file_contents = file_contents + s + '\n' file = open(output_filename, "w") file.write(file_contents) file.close() self.logger.info('processing complete') # def train_and_save_model(self, filename): # spotter = SpotlightCachingSpotter(False) # afinn_filename = '../sellibrary/resources/AFINN-111.txt' # sentiment_processor = SentimentProcessor() # self.train_model_using_dexter_dataset(sentiment_processor, spotter, afinn_filename) # sentiment_processor.save_model(filename) # return sentiment_processor if __name__ == "__main__": filename = FileLocations.get_dropbox_intermediate_path( ) + 'sentiment.pickle' dexter_feeder = DexterFeeder() spotter = SpotlightCachingSpotter(False) sentiment_processor = SentimentProcessor() sentiment_processor.load_model(filename) dexter_feeder.dexter_dataset_sentiment(sentiment_processor, spotter, '/tmp/sentiment_output.txt')
import logging from sklearn.ensemble import GradientBoostingRegressor from sellibrary.gbrt import GBRTWrapper from sellibrary.text_file_loader import load_feature_matrix from sellibrary.filter_only_golden import FilterGolden from sellibrary.sel.dexter_dataset import DatasetDexter from sellibrary.wiki.wikipedia_datasets import WikipediaDataset from sellibrary.locations import FileLocations INTERMEDIATE_PATH = FileLocations.get_dropbox_intermediate_path() # setup logging handler = logging.StreamHandler() handler.setFormatter( logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')) logger = logging.getLogger(__name__) logger.addHandler(handler) logger.propagate = False logger.setLevel(logging.INFO) feature_names = [ 'v1_graph_size', 'v1_graph_diameter', 'v1_node_degree', 'v1_degree_mean_median_ratio', 'v1_out_degree_mean_median_ratio', 'v1_degree_mean_median_ratio', 'v1_farness', 'v1_closeness', 'v1_centrality', 'v1_minus_low_relatedness_graph_size', 'v1_minus_low_relatedness_graph_diameter', 'v1_minus_low_relatedness_node_degree', 'v1_minus_low_relatedness_degree_mean_median_ratio', 'v1_minus_low_relatedness_out_degree_mean_median_ratio', 'v1_minus_low_relatedness_degree_mean_median_ratio',
self.logger.info('%s %d', docid, new_id) cmd = '/usr/bin/sed' param1 = '-i' param2 = ".old" param3 = "'s/" + docid + "/" + str(new_id) + "/g'" param4 = filename self.logger.info('%s %s %s %s %s', cmd, param1, param2, param3, param4) full_cmd = cmd + ' ' + param1 + ' ' + param2 + ' ' + param3 + ' ' + param4 process = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE) process.wait() self.logger.info('return code %d ', process.returncode) if __name__ == "__main__": # greps all the documents in the corpus against an ID list to build a file. This # file needs to be manually copied to the washingtonpost directory app = WashingtonPostSedder() app.replace_docid_articles(FileLocations.get_dropbox_intermediate_path() + 'wp/wp_minus_0.txt') app.replace_docid_articles(FileLocations.get_dropbox_intermediate_path() + 'wp_sentiment_simple.txt') app.replace_docid_articles(FileLocations.get_dropbox_intermediate_path() + 'wp_base_tf_simple_v2.txt')
verbose=0, warm_start=False) forest = forest.fit(X_train, y_train) print('oob score ' + str(forest.oob_score_)) with open(model_filename, 'wb') as handle: pickle.dump(forest, handle, protocol=pickle.HIGHEST_PROTOCOL) if __name__ == "__main__": use_dexter_dataset = False use_wahington_post_dataset = True output_filename = 'base_tf_simple_v2.txt' model_filename = FileLocations.get_dropbox_intermediate_path( ) + 'simple_tf.pickle' train_model = False filter_for_interesting = False train_docid_set = None # == ALL - filtered later train_docid_set = set(Const.TRAINSET_DOCID_LIST).union( Const.TESTSET_DOCID_LIST) report_docid_set = None #set(Const.TESTSET_DOCID_LIST).union(Const.TRAINSET_DOCID_LIST) # filters the outputfile - add Train data to get a full output files if (use_wahington_post_dataset): output_filename = 'wp_' + output_filename output_filename = FileLocations.get_dropbox_intermediate_path( ) + output_filename document_to_feature_converter = DocToTermFreqConverter() handler = logging.StreamHandler() handler.setFormatter(
return salience_by_entity_by_doc_id if __name__ == "__main__": min_docid = int(sys.argv[1]) max_docid = int(sys.argv[2]) break_early = False if len(sys.argv) >= 4: break_early = sys.argv[3].lower() == 'break_early' if break_early: SelModelBuilder.logger.warning('Break early is set to True') filename = FileLocations.get_dropbox_intermediate_path() + 'sel.pickle' build_model = False aws_util = AWSUtil() smb = SelModelBuilder() # if build_model: # sentiment_processor = smb.train_and_save_model(filename) # else: # sentiment_processor = SentimentProcessor() # sentiment_processor.load_model(filename) dd = smb.get_dexter_datset() wikipediaDataset = WikipediaDataset() document_list = dd.get_dexter_dataset(path=FileLocations.get_dropbox_dexter_path()) spotter = GoldenSpotter(document_list, wikipediaDataset)
file.write('\n') sentiment = features_by_entity_id[entity_id][0] salience_by_entity_by_doc_id[docid][entity_id] = sentiment self.logger.debug('sent %f', sentiment) if file is not None: file.close() self.logger.info('written to %s', output_filename) self.logger.info('processing complete') return salience_by_entity_by_doc_id if __name__ == "__main__": filename = FileLocations.get_dropbox_intermediate_path( ) + 'sentiment.pickle' smb = PWModelBuilder() sentiment_processor = SentimentProcessor() sentiment_processor.load_model(filename) phrase = ' one iraq three' # sent = sentiment_processor.get_doc_sentiment(phrase) # print(sent, phrase) smb.get_feature_list(sentiment_processor, ' one iraq three') smb.get_feature_list(sentiment_processor, 'abandon') smb.get_feature_list(sentiment_processor, 'outstanding') smb.get_feature_list(sentiment_processor, 'appeases') smb.get_feature_list(sentiment_processor, 'superb') smb.get_feature_list(sentiment_processor, 'prick')
'freq in last 3 sentences of body ', # 4 'freq in title ', # 4 'one occurrence capitalised', # 5 'maximum fraction of uppercase letters', # 6 'average spot length in words', # 8.1 : 'average spot length in characters', # 8.2 : 'is in title', # 11 : 'unambiguous entity frequency', # 14 : 1 entity frequency feature 'entity in_degree in wikipeada', # 20 : 'entity out_degree in wikipeada', # 20 : 'entity degree in wikipeada', # 20 : 'document length', # 22 : ] X, y, docid_array, entity_id_array = load_feature_matrix( feature_filename=FileLocations.get_dropbox_intermediate_path() + 'dexter_fset_02__1_to_604_light_output_all.txt', feature_names=feature_names, entity_id_index=1, y_feature_index=2, first_feature_index=4, number_features_per_line=27, tmp_filename='/tmp/temp_conversion_file.txt' ) # train only on records we have a golden salience for fg = FilterGolden() X2, y2, docid2, entityid2 = fg.get_only_golden_rows(X, y, docid_array, entity_id_array, dexterDataset= , wikipediaDataset=) wrapper = GBRTWrapper() splitter = DataSplitter() wrapper.train_model(X2, y2, entityid2, 0, n_estimators=40)
from sellibrary.locations import FileLocations from sellibrary.sel.dexter_dataset import DatasetDexter from sellibrary.sentiment.sentiment import SentimentProcessor from sellibrary.wiki.wikipedia_datasets import WikipediaDataset from sellibrary.converters.tosentiment.simple_gbrt import SimpleGBRT from sellibrary.converters.tosentiment.sel_features_to_sentiment import SelFeatToSent from sellibrary.trec.trec_util import TrecReferenceCreator from sellibrary.util.s3_util import AWSUtil from sellibrary.main.main_build_sel_model import SelModelBuilder if __name__ == "__main__": min_number = int(sys.argv[1]) max_number = int(sys.argv[2]) filename = FileLocations.get_dropbox_intermediate_path() + 'sel.pickle' build_model = False break_early = False aws_util = AWSUtil() smb = SelModelBuilder() # if build_model: # sentiment_processor = smb.train_and_save_model(filename) # else: # sentiment_processor = SentimentProcessor() # sentiment_processor.load_model(filename) dd = smb.get_dexter_datset() wikipediaDataset = WikipediaDataset()
salience_by_entity_by_doc_id[docid][entity_id] = sentiment self.logger.info('sent %f', sentiment) if file is not None: file.close() self.logger.info('written to %s', output_filename) self.logger.info('processing complete') return salience_by_entity_by_doc_id if __name__ == "__main__": filename = FileLocations.get_dropbox_intermediate_path( ) + 'sentiment.pickle' tosent_converter = SimpleGBRT( FileLocations.get_dropbox_intermediate_path() + 'simple_sentiment_GradientBoostingRegressor.pickle') build_model = False output_filename = FileLocations.get_dropbox_intermediate_path( ) + 'wp_sentiment_simple.txt' use_dexter_dataset = False use_wshington_post_dataset = True smb = SentimentModelBuilder() if build_model: sentiment_processor = smb.train_and_save_model(filename) else: sentiment_processor = SentimentProcessor()
class Const: light_feature_names = [ 'min_normalised_position', # 1 'max_normalised_position', # 1 'mean_normalised_position', # 1 'normalised_position_std_dev', # 1 'norm_first_position_within_first 3 sentences', # 2 'norm first positon within body middle', # 2 'norm_first_position_within last 3 sentences', # 2 'normed first position within title', # 2 'averaged normed position within sentences', # 3 'freq in first 3 sentences of body ', # 4 'freq in middle of body ', # 4 'freq in last 3 sentences of body ', # 4 'freq in title ', # 4 'one occurrence capitalised', # 5 'maximum fraction of uppercase letters', # 6 'average spot length in words', # 8.1 : 'average spot length in characters', # 8.2 : 'is in title', # 11 : 'unambiguous entity frequency', # 14 : 1 entity frequency feature 'entity in_degree in wikipeada', # 20 : 'entity out_degree in wikipeada', # 20 : 'entity degree in wikipeada', # 20 : 'document length', # 22 : ] heavy_feature_names = [ 'v1_graph_size', 'v1_graph_diameter', 'v1_node_degree', 'v1_degree_mean_median_ratio', 'v1_out_degree_mean_median_ratio', 'v1_degree_mean_median_ratio', 'v1_farness', 'v1_closeness', 'v1_centrality', 'v1_minus_low_relatedness_graph_size', 'v1_minus_low_relatedness_graph_diameter', 'v1_minus_low_relatedness_node_degree', 'v1_minus_low_relatedness_degree_mean_median_ratio', 'v1_minus_low_relatedness_out_degree_mean_median_ratio', 'v1_minus_low_relatedness_degree_mean_median_ratio', 'v1_minus_low_relatedness_farness', 'v1_minus_low_relatedness_closeness', 'v1_minus_low_relatedness_centrality', 'v0_graph_size', 'v0_graph_diameter', 'v0_node_degree', 'v0_degree_mean_median_ratio', 'v0_out_degree_mean_median_ratio', 'v0_degree_mean_median_ratio', 'v0_farness', 'v0_closeness', 'v0_centrality', 'v0_minus_low_relatedness_graph_size', 'v0_minus_low_relatedness_graph_diameter', 'v0_minus_low_relatedness_node_degree', 'v0_minus_low_relatedness_degree_mean_median_ratio', 'v0_minus_low_relatedness_out_degree_mean_median_ratio', 'v0_minus_low_relatedness_degree_mean_median_ratio', 'v0_minus_low_relatedness_farness', 'v0_minus_low_relatedness_closeness', 'v0_minus_low_relatedness_centrality' ] tf_feature_names = ['doc_freg', 'title_freq', 'body_freq'] def get_sel_feature_names(self): l = [] l.extend(Const.light_feature_names) l.extend(Const.heavy_feature_names) return l INTERMEDIATE_PATH = FileLocations.get_dropbox_intermediate_path() TEMP_PATH = FileLocations.get_temp_path() sent_feature_names = [ 'title_sentiment_ngram_20', 'title_neg_sent_ngram_20', 'title_pos_sent_ngram_20', 'body_sentiment_ngram_20', 'body_neg_sent_ngram_20', 'body_pos_sent_ngram_20' ] def get_joined_feature_names(self): l = [] l.extend(self.get_sel_feature_names()) l.extend(self.sent_feature_names) return l def get_joined_sel_sent_and_tf_feature_names(self): l = [] l.extend(self.get_sel_feature_names()) l.extend(self.sent_feature_names) l.extend(self.tf_feature_names) return l efficient_1_feature_names = [ 'freq in first 3 sentences of body ', 'title_freq', 'freq in title ', 'norm_first_position_within_first 3 sentences', 'normed first position within title', 'title_sentiment_ngram_20', 'title_neg_sent_ngram_20', 'title_pos_sent_ngram_20', 'normalised_position_std_dev', 'min_normalised_position', 'norm first positon within body middle', 'freq in middle of body ', 'body_neg_sent_ngram_20', 'body_sentiment_ngram_20', 'body_pos_sent_ngram_20', 'max_normalised_position', 'mean_normalised_position', 'norm_first_position_within last 3 sentences', 'freq in last 3 sentences of body ', 'averaged normed position within sentences', 'entity out_degree in wikipeada', 'average spot length in words', 'average spot length in characters', 'unambiguous entity frequency', 'entity degree in wikipeada', 'document length' ] efficient_2_feature_names = [ 'freq in first 3 sentences of body ', 'title_freq', 'freq in title ', 'norm_first_position_within_first 3 sentences', 'normed first position within title', 'title_sentiment_ngram_20', 'title_neg_sent_ngram_20', 'title_pos_sent_ngram_20', 'normalised_position_std_dev', 'min_normalised_position', 'norm first positon within body middle', 'freq in middle of body ', 'body_neg_sent_ngram_20', 'body_sentiment_ngram_20', 'body_pos_sent_ngram_20', 'max_normalised_position', 'mean_normalised_position', 'norm_first_position_within last 3 sentences', 'freq in last 3 sentences of body ', 'averaged normed position within sentences', 'entity out_degree in wikipeada', 'average spot length in words', 'average spot length in characters', 'unambiguous entity frequency', 'entity degree in wikipeada', 'document length', 'v0_node_degree', 'v0_closeness', 'v0_centrality', 'v0_farness', 'v0_minus_low_relatedness_node_degree', 'v0_minus_low_relatedness_farness', 'v0_minus_low_relatedness_closeness', 'v0_minus_low_relatedness_centrality', 'entity in_degree in wikipeada', 'v0_graph_diameter', 'v0_minus_low_relatedness_graph_size', 'v0_minus_low_relatedness_graph_diameter', 'v0_minus_low_relatedness_degree_mean_median_ratio', 'v0_graph_size', 'v0_degree_mean_median_ratio', 'v0_out_degree_mean_median_ratio', 'v0_minus_low_relatedness_out_degree_mean_median_ratio' ] TRAINSET_DOCID_LIST = [ 1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 16, 17, 22, 24, 26, 27, 28, 29, 31, 34, 36, 37, 38, 40, 41, 43, 44, 49, 54, 56, 57, 60, 62, 63, 71, 75, 78, 81, 86, 87, 89, 90, 91, 93, 94, 96, 98, 99, 101, 103, 108, 109, 110, 113, 114, 115, 116, 118, 123, 124, 125, 126, 136, 141, 144, 145, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 162, 163, 165, 166, 167, 170, 171, 172, 173, 174, 175, 178, 179, 182, 184, 189, 190, 191, 195, 196, 204, 206, 207, 208, 209, 210, 213, 217, 218, 219, 221, 222, 226, 229, 235, 236, 238, 241, 242, 245, 246, 247, 250, 254, 256, 257, 262, 265, 266, 267, 268, 270, 271, 272, 274, 275, 278, 283, 284, 285, 288, 290, 291, 294, 299, 301, 302, 308, 315, 317, 323, 327, 329, 330, 331, 332, 333, 338, 341, 530, 532, 534, 540, 541, 543, 544, 545, 548, 551, 552, 553, 561, 568, 569, 570, 572, 573, 574, 577, 578, 582, 583, 587, 588, 592, 594, 596, 597, 600, 601, 603, 604 ] TESTSET_DOCID_LIST = [ 3, 5, 8, 14, 18, 20, 21, 23, 25, 30, 32, 33, 35, 39, 42, 45, 46, 50, 51, 52, 53, 55, 58, 64, 66, 68, 70, 72, 73, 74, 76, 77, 80, 82, 83, 84, 85, 88, 95, 100, 104, 105, 106, 107, 111, 112, 119, 127, 129, 131, 132, 133, 134, 137, 138, 139, 140, 146, 160, 161, 168, 169, 177, 180, 181, 183, 185, 186, 187, 188, 192, 193, 194, 197, 198, 199, 200, 202, 203, 205, 211, 212, 214, 215, 216, 223, 224, 225, 227, 228, 230, 232, 233, 234, 237, 239, 240, 243, 244, 248, 249, 251, 252, 253, 255, 258, 259, 260, 261, 263, 264, 269, 273, 276, 277, 279, 280, 281, 282, 289, 292, 293, 295, 296, 298, 300, 303, 304, 305, 306, 307, 311, 312, 313, 314, 316, 318, 319, 320, 321, 324, 325, 326, 334, 336, 337, 339, 340, 527, 528, 531, 536, 538, 542, 546, 550, 555, 560, 562, 566, 567, 571, 575, 576, 579, 580, 581, 586, 589, 590, 591, 593, 595, 598, 599, 602 ] DOCID_BY_REASONBLE_ENTITY = { 9282173: [ 1, 32, 66, 85, 95, 106, 107, 108, 126, 136, 149, 154, 155, 157, 160, 177, 188, 191, 209, 210, 217, 279, 329, 579, 582, 583 ], 6705064: [ 1, 32, 66, 85, 95, 106, 107, 108, 126, 136, 149, 154, 155, 157, 160, 177, 188, 191, 209, 210, 217, 279, 329, 579, 582, 583 ], 31717: [ 1, 4, 17, 26, 30, 34, 40, 45, 46, 52, 54, 68, 83, 86, 99, 109, 111, 113, 124, 132, 134, 136, 144, 146, 158, 159, 165, 170, 175, 179, 181, 182, 187, 188, 189, 195, 199, 205, 209, 210, 211, 227, 242, 255, 256, 260, 277, 279, 285, 292, 293, 301, 311, 315, 327, 333, 337, 530, 534, 540, 542, 543, 544, 568, 578, 580, 586, 591, 595, 600, 602 ], 5843419: [ 1, 11, 26, 34, 40, 49, 52, 56, 66, 71, 86, 96, 98, 104, 106, 109, 127, 132, 134, 136, 141, 146, 159, 166, 172, 173, 174, 186, 189, 195, 198, 199, 203, 205, 207, 209, 210, 227, 260, 282, 292, 301, 306, 329, 333, 536, 542 ], 10545: [ 1, 11, 26, 34, 40, 49, 52, 56, 66, 71, 86, 96, 98, 104, 106, 109, 127, 132, 134, 136, 141, 146, 159, 166, 172, 173, 174, 186, 189, 195, 198, 199, 203, 205, 207, 209, 210, 227, 260, 282, 292, 301, 306, 329, 333, 536, 542 ], 21785: [1, 8, 16, 36, 51, 592], 6984: [1, 2], 57654: [1, 34, 44], 14653: [ 1, 33, 34, 36, 44, 77, 85, 90, 106, 107, 136, 156, 157, 160, 188, 191, 196, 209, 211, 228, 329, 581 ], 31956: [ 1, 10, 14, 34, 40, 44, 52, 66, 72, 75, 154, 155, 163, 209, 294, 313, 327, 333 ], 9239: [ 1, 11, 44, 73, 83, 96, 106, 109, 136, 150, 159, 165, 166, 167, 171, 205, 259, 284, 292, 326, 542, 592 ], 11867: [ 1, 34, 49, 98, 103, 109, 116, 124, 125, 127, 132, 136, 165, 166, 177, 191, 195, 210, 248, 292, 329, 333, 542, 599, 602 ], 11833: [ 1, 34, 49, 98, 103, 109, 116, 124, 125, 127, 132, 136, 165, 166, 177, 191, 195, 210, 248, 292, 329, 333, 542, 599, 602 ], 9317: [ 1, 6, 26, 34, 49, 50, 71, 73, 95, 116, 125, 127, 139, 191, 198, 199, 245, 255, 282, 316 ], 32293: [1, 2, 36, 141, 154, 175, 330], 3434750: [ 1, 3, 5, 6, 8, 16, 24, 25, 30, 31, 33, 34, 36, 38, 40, 42, 44, 45, 51, 52, 53, 56, 57, 58, 60, 62, 64, 66, 74, 75, 77, 80, 81, 83, 85, 87, 89, 90, 91, 94, 95, 98, 100, 101, 104, 105, 106, 107, 109, 110, 111, 112, 113, 119, 123, 124, 126, 132, 133, 134, 136, 140, 141, 145, 150, 151, 154, 155, 156, 157, 159, 161, 162, 168, 172, 174, 177, 178, 180, 181, 182, 184, 185, 188, 190, 193, 194, 195, 197, 198, 204, 206, 207, 209, 210, 211, 214, 215, 216, 222, 223, 227, 228, 230, 235, 239, 242, 245, 248, 251, 255, 257, 258, 259, 261, 266, 267, 275, 279, 281, 282, 284, 289, 290, 294, 298, 299, 300, 301, 302, 305, 307, 308, 314, 315, 318, 319, 321, 324, 325, 326, 330, 332, 338, 340, 341, 531, 536, 545, 548, 560, 562, 566, 568, 569, 572, 573, 574, 575, 577, 578, 579, 586, 587, 589, 592, 601, 602 ], 951976: [ 1, 3, 5, 6, 8, 16, 24, 25, 30, 31, 33, 34, 36, 38, 40, 42, 44, 45, 51, 52, 53, 56, 57, 58, 60, 62, 64, 66, 74, 75, 77, 80, 81, 83, 85, 87, 89, 90, 91, 94, 95, 98, 100, 101, 104, 105, 106, 107, 109, 110, 111, 112, 113, 119, 123, 124, 126, 132, 133, 134, 136, 140, 141, 145, 150, 151, 154, 155, 156, 157, 159, 161, 162, 168, 172, 174, 177, 178, 180, 181, 182, 184, 185, 188, 190, 193, 194, 195, 197, 198, 204, 206, 207, 209, 210, 211, 214, 215, 216, 222, 223, 227, 228, 230, 235, 239, 242, 245, 248, 251, 255, 257, 258, 259, 261, 266, 267, 275, 279, 281, 282, 284, 289, 290, 294, 298, 299, 300, 301, 302, 305, 307, 308, 314, 315, 318, 319, 321, 324, 325, 326, 330, 332, 338, 340, 341, 531, 536, 545, 548, 560, 562, 566, 568, 569, 572, 573, 574, 575, 577, 578, 579, 586, 587, 589, 592, 601, 602 ], 183895: [2, 5, 81], 18998750: [2, 29, 64, 70, 148, 163, 203, 241, 262, 548, 569], 7502981: [2, 29, 64, 70, 148, 163, 203, 241, 262, 548, 569], 3414021: [ 2, 9, 33, 34, 35, 42, 44, 45, 57, 60, 75, 80, 87, 90, 107, 109, 111, 112, 134, 150, 285, 548, 601 ], 24113: [2, 75, 190, 214, 575], 158177: [2, 5, 8, 16, 36, 40, 66, 111, 123, 141, 154, 155], 147301: [3, 87, 194, 574], 5122699: [3, 321, 569], 822290: [3, 321, 569], 19468510: [ 3, 9, 55, 57, 60, 81, 87, 112, 119, 161, 178, 190, 194, 204, 206, 223, 251, 275, 302, 304, 569, 574 ], 667130: [ 3, 9, 55, 57, 60, 81, 87, 112, 119, 161, 178, 190, 194, 204, 206, 223, 251, 275, 302, 304, 569, 574 ], 5043544: [ 3, 9, 42, 55, 57, 60, 80, 81, 87, 112, 118, 119, 161, 178, 185, 190, 194, 204, 206, 214, 223, 251, 266, 302, 325, 574 ], 4479450: [ 3, 9, 42, 55, 57, 60, 80, 81, 87, 112, 118, 119, 161, 178, 185, 190, 194, 204, 206, 214, 223, 251, 266, 302, 325, 574 ], 9316: [4, 54, 113, 144, 165, 215, 235, 256, 292, 530, 534, 572, 596, 600], 42622: [4, 337], 737: [ 5, 45, 46, 56, 74, 85, 91, 111, 124, 168, 193, 211, 259, 288, 577, 587, 595 ], 14034: [5, 555], 7701: [5, 6, 534, 555], 19457: [5, 90], 22713: [5, 56], 31756: [5, 13, 55, 87, 118, 258, 279, 304, 568, 574], 3383: [6, 172, 173, 174, 219, 245, 265, 324, 333, 531, 589, 593], 18951905: [6, 173, 177, 215, 219, 246, 531, 589], 13774: [7, 138, 183, 285], 29810: [7, 35, 55, 129, 138, 175, 183, 204, 285, 528, 604], 21255: [8, 16, 41, 51, 62, 74, 75, 85, 90, 94, 134, 274, 294], 5405: [ 8, 14, 40, 41, 44, 51, 52, 53, 62, 75, 84, 90, 94, 109, 124, 134, 165, 186, 193, 210, 268, 294, 307, 324, 326, 333, 599 ], 27019: [8, 21, 22, 29, 41, 53, 62, 72, 73, 134, 145, 182, 215, 294, 561], 47948: [8, 41, 94, 294], 15573: [ 8, 14, 22, 51, 53, 62, 64, 72, 75, 98, 124, 163, 180, 182, 227, 243, 264, 295, 326, 592 ], 15554: [ 8, 14, 22, 51, 53, 62, 64, 72, 75, 98, 124, 163, 180, 182, 227, 243, 264, 295, 326, 592 ], 689: [8, 106, 109, 592], 18933066: [9, 24, 39, 138, 239, 323], 33127: [9, 208], 33057: [9, 74, 87, 279, 307, 325, 592], 24909346: [9, 42, 57, 87, 112, 118, 161, 185, 190, 194, 251, 266, 275, 296, 574], 367653: [9, 42, 57, 87, 112, 118, 161, 185, 190, 194, 251, 266, 275, 296, 574], 32070: [ 9, 57, 74, 80, 87, 112, 119, 161, 178, 185, 190, 194, 214, 251, 266, 275, 296, 325, 574 ], 16844: [10, 72, 76], 5042916: [ 10, 74, 78, 98, 100, 106, 109, 115, 124, 137, 153, 171, 180, 182, 186, 197, 208, 211, 219, 245, 254, 255, 301, 311, 312, 332, 538, 545, 583, 587, 590, 598 ], 2274514: [ 10, 74, 78, 98, 100, 106, 109, 115, 124, 137, 153, 171, 180, 182, 186, 197, 208, 211, 219, 245, 254, 255, 301, 311, 312, 332, 538, 545, 583, 587, 590, 598 ], 8210131: [10, 34, 111, 114, 116, 208, 209, 214, 223, 290], 2320018: [10, 34, 111, 114, 116, 208, 209, 214, 223, 290], 31769: [ 10, 16, 34, 36, 37, 42, 44, 66, 72, 76, 95, 104, 116, 126, 154, 155, 157, 160, 163, 180, 181, 191, 198, 200, 202, 209, 211, 227, 255, 301, 313, 326, 327, 333, 548, 578, 579, 583, 586, 587 ], 31957: [10, 72, 191, 586], 26667: [ 11, 98, 106, 159, 172, 177, 198, 199, 205, 207, 212, 218, 219, 255, 311, 531 ], 19390: [11, 94], 19382: [11, 94], 25391: [ 11, 23, 30, 40, 52, 62, 75, 86, 90, 95, 99, 103, 124, 126, 136, 139, 141, 150, 160, 162, 167, 171, 177, 181, 188, 195, 210, 245, 278, 293, 294, 324, 333, 545, 586, 587, 588, 589, 593 ], 10577: [11, 46, 86, 96, 98, 127, 216, 337], 10536: [11, 46, 86, 96, 98, 127, 216, 337], 31750: [11, 50, 86, 125, 131, 139, 148, 156, 536, 586, 587, 588, 589], 1328236: [12, 64], 13270: [12, 51, 295, 300], 195149: [12, 75], 28679: [12, 269], 1359407: [12, 269], 23814944: [12, 269, 295], 10106: [12, 64, 269, 295], 14580: [12, 318], 31737: [13, 42, 185, 275, 566], 18949836: [13, 113, 133], 18603746: [14, 41, 84, 94, 165], 2113134: [14, 41, 84, 94, 165], 154099: [16, 274], 7987684: [16, 592], 208463: [16, 228], 5183633: [16, 204, 330, 573], 4913064: [17, 98, 180, 576], 812333: [17, 98, 180, 576], 4689709: [17, 111], 3890799: [17, 111], 11125639: [17, 70, 86, 156, 279, 329, 551, 569], 9271636: [17, 70, 86, 156, 279, 329, 551, 569], 4689264: [ 17, 22, 98, 106, 111, 115, 159, 177, 179, 180, 182, 184, 212, 238, 255, 293, 311, 315, 538, 546, 552, 553, 555, 570, 571, 576, 603 ], 15043: [18, 162, 171, 224, 258, 270, 271, 278, 323, 545, 593], 16642: [18, 43, 171, 278, 293, 545, 589, 593], 406573: [18, 171], 14532: [ 18, 49, 70, 71, 89, 159, 181, 182, 198, 212, 292, 308, 317, 337, 341, 560, 572, 592 ], 14482: [ 18, 49, 70, 71, 89, 159, 181, 182, 198, 212, 292, 308, 317, 337, 341, 560, 572, 592 ], 9792: [18, 224], 18426568: [ 18, 81, 129, 162, 171, 184, 224, 236, 252, 258, 270, 271, 278, 303, 545, 593, 599 ], 525884: [ 18, 81, 129, 162, 171, 184, 224, 236, 252, 258, 270, 271, 278, 303, 545, 593, 599 ], 10363: [18, 43, 129, 171, 599], 19331: [20, 252, 258], 38930: [20, 252], 21837: [21, 314], 2478598: [21, 247, 254, 561], 1010187: [23, 99, 103], 15624: [23, 93, 191, 598], 5211: [23, 82], 5067: [23, 82], 19004: [23, 103, 324], 8282374: [24, 138, 263, 268], 3073412: [24, 138, 263, 268], 303: [24, 57], 25453500: [24, 103, 184, 544, 545, 593], 1137594: [24, 103, 184, 544, 545, 593], 21076367: [24, 25, 35, 138, 197], 987125: [24, 25, 35, 138, 197], 15660: [24, 25, 39, 165], 18130: [24, 35, 105, 138, 194], 11969: [24, 35], 5042481: [25, 39, 53, 85, 90, 193, 548], 13373: [25, 39, 198, 200, 202, 312], 17867: [26, 34, 54, 82, 101, 144, 260, 277, 311, 542, 546, 572, 591, 597], 9974: [26, 73, 245, 282], 18247224: [26, 591], 3301347: [26, 68, 95, 578, 601], 1204298: [26, 68, 95, 578, 601], 9581: [26, 166], 22989: [26, 82, 132, 173, 174, 542], 38152: [27, 78], 31816: [28, 163], 27421: [28, 55, 76, 85, 90, 116, 134, 196, 200, 216], 605837: [28, 55, 76, 116, 134], 17320: [28, 76], 683270: [28, 76], 18935732: [29, 64, 140, 251, 260, 266, 586, 595], 3742592: [29, 64, 140, 251, 260, 266, 586, 595], 19344654: [29, 46, 54, 60, 123, 146, 170, 294, 543, 567, 580, 581, 601], 1317868: [29, 46, 54, 60, 123, 146, 170, 294, 543, 567, 580, 581, 601], 19159283: [29, 41, 62, 561], 23070: [30, 62, 295, 334], 4921404: [30, 103], 58353: [31, 190], 18450: [31, 257], 33209: [32, 108], 206984: [32, 149, 582], 1114732: [32, 88, 107, 108, 154, 155, 157, 583], 848569: [32, 95, 149, 154], 12047: [32, 95, 108, 154, 155, 157, 160, 217, 329], 56472: [32, 149, 329, 583], 2944: [32, 582], 7515849: [33, 40, 77, 82, 85, 90, 116, 160, 327, 329, 568, 569], 43998: [33, 274], 7515928: [ 33, 42, 45, 60, 80, 85, 87, 91, 111, 116, 144, 187, 276, 279, 315, 317 ], 645042: [34, 118, 132, 192, 300, 324, 333, 532], 21838: [34, 118, 132, 192, 300, 324, 333, 532], 14984: [34, 36, 37, 44, 52, 94, 188, 209, 331], 7907317: [34, 36, 44, 85, 91, 157, 175, 188, 191, 209], 243433: [34, 183], 22107: [34, 37, 44, 52, 209], 55866: [34, 36, 37], 102226: [34, 123, 266, 566], 171776: [34, 37, 339], 17416221: [36, 101, 115, 215, 219, 578], 2397252: [36, 101, 115, 215, 219, 578], 26230922: [37, 339], 1464426: [37, 339], 22158: [37, 188, 228], 14539: [38, 316, 336], 1092923: [38, 73, 133, 282], 19001: [38, 73, 96, 254, 282, 320, 324], 188213: [38, 282], 3966054: [39, 53, 57, 84, 159, 219, 324, 572, 589], 5468: [39, 100, 151], 22576: [41, 240, 311], 8238258: [41, 45], 19068: [41, 94], 367785: [42, 266], 14640471: [43, 129, 258], 9995267: [43, 129, 258], 180638: [43, 171, 593], 72671: [44, 103, 195], 22468: [45, 157], 22462: [45, 157], 1921: [45, 85, 104, 157, 193, 259, 541], 23235: [45, 126, 193, 235, 299, 330, 577], 194200: [46, 68], 14531: [46, 219], 21241: [46, 125, 126, 167, 182, 216, 219, 279, 590], 17514: [46, 125, 127], 17508: [46, 125, 127], 5573: [49, 240], 12108: [49, 70, 71, 84, 86, 89, 127, 136, 167, 199, 215, 217, 240, 317], 76972: [49, 96, 125, 127, 180, 181, 246, 255, 279], 3415: [49, 125, 127, 136, 180], 27338: [49, 83, 96, 125, 127, 199, 215], 26964606: [49, 125, 127, 205], 19260: [50, 217], 18717338: [50, 106, 112, 148, 161, 190, 194, 223, 272, 324, 325, 573], 151486: [50, 106, 112, 148, 161, 190, 194, 223, 272, 324, 325, 573], 585629: [50, 131], 1102876: [50, 148], 624: [51, 221, 251, 296], 37555: [52, 592], 385653: [52, 85, 91, 175, 188], 5407: [ 53, 55, 87, 118, 169, 178, 214, 223, 225, 236, 241, 275, 283, 298, 308, 318, 334 ], 25734: [53, 151], 21148: [53, 71, 96, 106, 116, 151, 166, 182, 198, 218, 219, 243, 292, 317], 22997: [53, 167], 13828: [54, 170, 601], 32113: [54, 146, 277, 601], 10396793: [55, 191], 166573: [55, 191], 1645518: [55, 178, 230, 298], 32432: [55, 114, 168, 197, 321], 21133: [56, 68, 150, 327, 333], 30635: [56, 68, 193, 530], 766900: [57, 87, 178, 206, 574], 22199: [57, 87, 208, 221], 343949: [58, 232], 14533: [ 58, 105, 109, 126, 182, 196, 232, 233, 234, 272, 299, 313, 318, 324, 333 ], 2377: [58, 105, 234], 4723094: [60, 276], 17349325: [60, 321, 575], 778814: [60, 321, 575], 2346975: [62, 72, 104, 126, 181, 200, 202, 227, 578], 40203: [63, 162, 236, 323], 31161: [64, 269, 295], 14579: [64, 104, 106, 116, 156, 182, 269, 534], 17771: [66, 77, 88, 123, 124, 203, 228, 333], 2195263: [66, 88, 123], 13919: [66, 106, 123, 160], 738: [70, 193], 5593: [71, 83, 160], 26748: [71, 98, 124, 166, 177, 205, 245, 308], 147575: [71, 83, 86, 96, 126, 127, 192, 205, 313], 23033: [71, 127, 159, 198, 205, 219, 263, 313], 162415: [72, 76, 104, 126], 3524766: [74, 113, 133], 21780: [74, 241], 10634933: [76, 163, 200, 202], 7255748: [76, 163, 200, 202], 5488: [76, 216], 52593: [76, 200, 202, 203], 440244: [77, 276], 349303: [77, 82, 107, 156, 180, 196, 228, 234, 551], 32759: [77, 251], 149536: [78, 598], 717: [78, 115], 24135: [78, 587], 3392: [78, 137], 241547: [78, 583, 587, 598], 145422: [80, 251, 298], 62273: [81, 249], 408971: [81, 178], 70896: [81, 222, 326], 17633: [82, 91, 200, 217, 316, 317, 327, 333, 341], 51884: [82, 154, 316, 339, 560], 13831: [82, 307, 546], 8087628: [ 82, 101, 107, 136, 154, 157, 160, 196, 217, 228, 316, 317, 326, 329, 330, 339, 560, 579 ], 30188: [82, 200, 240], 108956: [82, 107, 114, 118, 298], 6037917: [82, 93, 106, 108, 157, 163, 234, 299, 339], 14478: [82, 93, 106, 108, 157, 163, 234, 299, 339], 3343: [83, 93, 116, 125, 145, 159, 166, 171, 205, 219, 542, 592], 5058739: [83, 182, 212, 216, 219, 551, 590], 13275: [83, 125, 127, 148, 195, 199, 245, 262], 22936: [83, 125, 127, 131, 134, 150, 167, 195, 210, 240, 245], 77745: [84, 165], 29265: [86, 177, 240], 268796: [88, 123], 37428: [88, 203, 568], 48830: [89, 101, 222], 48767: [89, 101, 222], 3138: [89, 101, 253], 34399: [90, 216, 527], 202354: [90, 249], 32817: [90, 99, 103, 589], 53029: [91, 200, 217, 316, 317, 333], 606848: [93, 219, 337, 538], 7365: [93, 219, 337, 538], 3708: [93, 199, 542], 24150: [95, 586], 19323: [95, 106, 107, 196, 228, 315, 583], 232595: [95, 108, 154, 583], 13913: [95, 108, 155, 160], 26769: [96, 106], 21383: [100, 156, 163, 196, 215, 538], 64646: [100, 101, 115, 137, 311], 141010: [100, 587], 22218: [100, 115, 208], 18618509: [101, 536], 1134798: [101, 536], 3080: [101, 329], 557007: [104, 125, 134, 141, 172, 195], 358: [104, 215, 327], 5334607: [106, 196, 202, 216], 304: [106, 196, 202, 216], 30128: [106, 134, 318], 211583: [107, 248, 568], 16043: [108, 149], 13404: [109, 156, 180, 192, 213, 229], 27956: [110, 253, 579], 18859: [110, 119, 208, 604], 18746: [110, 119, 208, 604], 30395: [110, 230, 572], 21134: [110, 298], 43715: [110, 114, 134, 136, 284], 301237: [110, 114], 21216: [110, 266, 289], 380965: [111, 238], 1726480: [112, 223], 49728: [113, 133, 169, 241, 298, 561], 5043192: [114, 134, 175, 195, 209, 211, 330], 14849: [114, 145, 208], 18858: [114, 306], 18752: [114, 306], 534366: [ 114, 134, 150, 154, 161, 168, 175, 181, 184, 185, 190, 193, 194, 211, 222, 228, 258, 284, 298, 300, 302, 307, 313, 548, 568, 574, 578, 579, 592 ], 21883824: [114, 129, 221, 302, 304, 536], 16972533: [114, 129, 221, 302, 304, 536], 1930: [114, 572, 604], 1944: [115, 246, 555], 22219: [115, 137], 17391: [116, 124], 11127: [118, 175, 206, 532], 30680: [123, 149, 281, 305, 332, 573], 13076: [124, 181, 187, 195], 28222445: [125, 127], 26830: [125, 127, 159], 5321: [125, 134, 150, 590], 25445: [125, 127, 177, 198], 17675: [125, 127, 150], 8504: [126, 192], 46530: [126, 316], 19137: [127, 255, 316], 17515: [127, 159, 166, 205], 57180: [129, 221, 302, 304], 14998012: [132, 173], 9299498: [132, 173], 105927: [132, 542], 3970: [132, 568], 183050: [133, 602], 18856: [133, 602], 154549: [133, 602], 255317: [138, 239, 263], 53846: [138, 239], 48768: [139, 141], 376738: [139, 141], 3162905: [139, 141, 150, 181, 195, 210], 5399: [140, 221], 21883857: [140, 208, 562], 25433: [140, 573], 4492: [144, 279], 69328: [145, 207, 228], 6886: [145, 208], 10093: [146, 542], 19344515: [146, 279, 281, 332, 543, 580, 596], 9444919: [146, 279, 281, 332, 543, 580, 596], 270673: [146, 158, 280, 534, 580, 597, 602], 9472: [148, 166, 560], 3209047: [149, 582], 48569: [149, 210], 74656: [149, 583], 7954867: [153, 312], 27358: [156, 163, 167, 199, 200, 216, 255, 318], 188171: [156, 255], 26994: [158, 273, 280, 291, 543, 597], 6321: [158, 602], 68736: [158, 273], 23332: [161, 208, 604], 375219: [161, 190], 7279897: [162, 168, 548, 575], 60154: [163, 199], 3354: [165, 247], 23440: [167, 186, 268], 457235: [168, 595], 7930: [168, 251], 11955: [168, 184], 845943: [168, 204, 284], 17450998: [169, 225, 298], 92656: [169, 219, 225, 566, 604], 9988187: [169, 253, 281, 332, 527, 542, 553, 574, 586, 594, 598], 664: [171, 224], 656316: [171, 545], 27278: [172, 200, 202], 20740978: [172, 204, 274, 284], 164939: [172, 173], 89260: [173, 561], 698: [173, 174, 239, 263], 25936: [173, 174], 1173018: [173, 263, 281, 292, 588], 23042123: [173, 174], 21840: [174, 248, 561], 275895: [174, 203], 275894: [174, 203], 844215: [175, 188], 167378: [179, 212], 164910: [179, 212], 2441596: [179, 212], 33583: [180, 196], 59755: [181, 587], 662: [183, 184, 303], 52382: [183, 567], 51983: [184, 552], 25473: [184, 306, 567], 185232: [185, 566], 32927: [187, 191, 306, 319, 597], 240390: [189, 264], 240378: [189, 264], 3460: [193, 263], 4278615: [193, 548], 19291: [196, 207, 228, 560], 21650: [197, 267], 187749: [200, 202, 203], 20518076: [204, 575], 6190562: [204, 575], 25226624: [206, 574], 18950756: [207, 568], 151210: [210, 307], 419342: [211, 578, 586, 600], 397335: [213, 229], 60961: [214, 550], 33166: [218, 587], 31843: [219, 581], 22754875: [222, 251, 288, 296], 18110: [223, 257, 283, 572], 496028: [224, 270, 271], 189209: [224, 270, 271], 81326: [224, 323], 31666: [225, 604], 950939: [225, 604], 209014: [225, 604], 32090: [227, 341], 11121: [227, 575, 579], 7515964: [228, 579], 51299: [232, 233], 5807337: [232, 233], 19189: [234, 259, 299, 318], 20629: [234, 299], 13882056: [235, 530, 540], 18453: [238, 246, 546, 570], 314742: [238, 570], 761469: [238, 546], 556739: [238, 570], 61565: [238, 570], 171629: [238, 553], 165705: [238, 546, 570], 21638: [238, 555], 1495: [238, 246], 59051: [238, 555], 21927: [238, 570], 25027868: [239, 263], 10568: [240, 527, 531, 581], 856: [241, 305, 338], 25970423: [241, 247, 254], 25868376: [241, 247, 254], 7412236: [241, 305], 1563047: [241, 305], 18933277: [243, 568], 21654: [246, 555], 66936: [246, 604], 33613: [246, 555, 594], 38300245: [247, 254], 12610483: [247, 254], 62028: [251, 259, 579], 791: [258, 536], 21710449: [261, 267], 1467805: [261, 267, 289], 425483: [261, 267], 6941088: [261, 267], 1314336: [261, 267], 2019005: [261, 267], 1637067: [261, 267], 18600829: [261, 267, 289], 16716: [261, 594], 2148196: [261, 267], 166791: [261, 267], 1102404: [261, 267, 289], 173900: [269, 295], 631494: [269, 295], 21175: [270, 271], 11616263: [270, 271, 323], 28238: [270, 271, 323], 38458: [270, 271, 323], 25059577: [270, 271, 323], 13256: [270, 271], 5829815: [270, 271, 323], 211518: [272, 324], 226426: [273, 291], 3356: [274, 284, 578], 8690: [275, 284, 298], 7529378: [277, 288, 312, 324, 332, 552, 561, 576, 579], 5949664: [277, 288, 312, 324, 332, 552, 561, 576, 579], 8877168: [279, 281, 288, 321], 2701987: [280, 543], 21234593: [280, 543], 14339416: [280, 543], 97089: [281, 318], 26033941: [281, 288, 546], 26709: [283, 573], 19831: [285, 579], 2844938: [288, 324], 80949: [288, 595], 47737: [289, 572, 576], 495724: [294, 341], 6466: [298, 303], 21830215: [302, 304], 87956: [302, 304], 5600374: [302, 304, 594], 7954455: [305, 337], 22489: [308, 604], 26811621: [308, 604], 7515890: [315, 568], 31232: [316, 317], 204114: [316, 317, 327, 333, 341], 294894: [324, 573], 416551: [327, 341], 161041: [327, 586], 6293: [327, 330, 339], 18879: [331, 532], 354236: [337, 339], 23797577: [341, 580, 596], 286989: [528, 566], 33983258: [530, 577], 1236283: [530, 577], 2176142: [531, 581], 11049: [531, 581], 17306237: [546, 553, 576], 23551054: [546, 555], 497961: [552, 603], 81215: [552, 553, 555], 192093: [553, 576], 16619: [571, 592], 21492751: [578, 579], 5173624: [578, 579], 43983: [579, 582], 88314: [586, 587, 588, 589, 590], 2311504: [586, 587, 588, 589, 590], 38201760: [586, 587, 588, 589], 216355: [591, 600], 25423: [596, 598] }