diff --git a/vendor/hare-unicode/.gitignore b/vendor/hare-unicode/.gitignore new file mode 100644 index 0000000..6ed32b6 --- /dev/null +++ b/vendor/hare-unicode/.gitignore @@ -0,0 +1,2 @@ +*.zip +/.data diff --git a/vendor/hare-unicode/COPYING b/vendor/hare-unicode/COPYING new file mode 100644 index 0000000..c257317 --- /dev/null +++ b/vendor/hare-unicode/COPYING @@ -0,0 +1,367 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. diff --git a/vendor/hare-unicode/cmd/linebreak/main.ha b/vendor/hare-unicode/cmd/linebreak/main.ha new file mode 100644 index 0000000..1a2d897 --- /dev/null +++ b/vendor/hare-unicode/cmd/linebreak/main.ha @@ -0,0 +1,40 @@ +use encoding::hex; +use fmt; +use os; +use strings; +use unicode; + +export fn main() void = { + const input = os::args[1]; + const data = strings::toutf8(input); + hex::dump(os::stdout, data)!; + + fmt::println(input)!; + + let ix = 0u; + const lb = unicode::new_line_breaker(input); + for (const (pos, _, mand) => unicode::next_line_break(&lb)) { + for (ix < pos; ix += 1) { + fmt::print(' ')!; + }; + ix += 1; + + if (mand) { + fmt::println('|')!; + } else { + fmt::print('^')!; + }; + }; + + fmt::println()!; + fmt::println()!; + + fmt::println("Line break opportunities:")!; + const lb = unicode::new_line_breaker(input); + for (const (pos, bpos, mand) => unicode::next_line_break(&lb)) { + fmt::printfln("- {}:{} {} (before '{}'/0x{:x})", pos, bpos, + if (mand) "(mandatory)" else "", + strings::sub(input, pos, pos+1), + data[bpos])!; + }; +}; diff --git a/vendor/hare-unicode/cmd/ucdtest/main.ha b/vendor/hare-unicode/cmd/ucdtest/main.ha new file mode 100644 index 0000000..5185979 --- /dev/null +++ b/vendor/hare-unicode/cmd/ucdtest/main.ha @@ -0,0 +1,25 @@ +use fmt; +use os; +use strings; +use unicode; + +export fn main() void = { + const in = os::args[1]; + const iter = strings::iter(in); + + for (true) { + const rn = match (strings::next(&iter)) { + case let rn: rune => + yield rn; + case => break; + }; + const gc = unicode::rune_gc(rn); + const sc = unicode::rune_script(rn); + const lb = unicode::rune_line_break(rn); + fmt::printfln("'{}'/{:x}: {} : {} : {}", + rn, rn: u32, + unicode::gc_code(gc), + unicode::script_code(sc), + unicode::line_break_code(lb))!; + }; +}; diff --git a/vendor/hare-unicode/scripts/gen-ucd.py b/vendor/hare-unicode/scripts/gen-ucd.py new file mode 100755 index 0000000..0eecc68 --- /dev/null +++ b/vendor/hare-unicode/scripts/gen-ucd.py @@ -0,0 +1,860 @@ +#!/usr/bin/python3 +# Based on CPython's unicodedata generation script, +# Tools/unicode/makeunicodedata.py, forked and adapted for Hare +# +# PSF License +# +# (re)generate unicode property and type databases +# +# This script converts Unicode database files to Modules/unicodedata_db.h, +# Modules/unicodename_db.h, and Objects/unicodetype_db.h +# +# history: +# 2000-09-24 fl created (based on bits and pieces from unidb) +# 2000-09-25 fl merged tim's splitbin fixes, separate decomposition table +# 2000-09-25 fl added character type table +# 2000-09-26 fl added LINEBREAK, DECIMAL, and DIGIT flags/fields (2.0) +# 2000-11-03 fl expand first/last ranges +# 2001-01-19 fl added character name tables (2.1) +# 2001-01-21 fl added decomp compression; dynamic phrasebook threshold +# 2002-09-11 wd use string methods +# 2002-10-18 mvl update to Unicode 3.2 +# 2002-10-22 mvl generate NFC tables +# 2002-11-24 mvl expand all ranges, sort names version-independently +# 2002-11-25 mvl add UNIDATA_VERSION +# 2004-05-29 perky add east asian width information +# 2006-03-10 mvl update to Unicode 4.1; add UCD 3.2 delta +# 2008-06-11 gb add PRINTABLE_MASK for Atsuo Ishimoto's ascii() patch +# 2011-10-21 ezio add support for name aliases and named sequences +# 2012-01 benjamin add full case mappings +# +# written by Fredrik Lundh (fredrik@pythonware.com) +# + +import dataclasses +import os +import sys +import zipfile + +from functools import partial +from textwrap import dedent +from typing import Iterator, List, Optional, Set, Tuple + +SCRIPT = sys.argv[0] +VERSION = "3.3" + +# The Unicode Database +# -------------------- +# When changing UCD version please update +# * Doc/library/stdtypes.rst, and +# * Doc/library/unicodedata.rst +# * Doc/reference/lexical_analysis.rst (two occurrences) +UNIDATA_VERSION = "13.0.0" +UNICODE_DATA = "UnicodeData%s.txt" +COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" +EASTASIAN_WIDTH = "EastAsianWidth%s.txt" +UNIHAN = "Unihan%s.zip" +DERIVED_CORE_PROPERTIES = "DerivedCoreProperties%s.txt" +DERIVEDNORMALIZATION_PROPS = "DerivedNormalizationProps%s.txt" +LINE_BREAK = "LineBreak%s.txt" +NAME_ALIASES = "NameAliases%s.txt" +NAMED_SEQUENCES = "NamedSequences%s.txt" +SPECIAL_CASING = "SpecialCasing%s.txt" +CASE_FOLDING = "CaseFolding%s.txt" +SCRIPTS = "Scripts%s.txt" + +# Private Use Areas -- in planes 1, 15, 16 +PUA_1 = range(0xE000, 0xF900) +PUA_15 = range(0xF0000, 0xFFFFE) +PUA_16 = range(0x100000, 0x10FFFE) + +# we use this ranges of PUA_15 to store name aliases and named sequences +NAME_ALIASES_START = 0xF0000 +NAMED_SEQUENCES_START = 0xF0200 + +old_versions = [] + +# Order must match ucd.ha +CATEGORY_NAMES = [ + "Cc", "Cf", "Cn", "Co", "Cs", "Ll", "Lm", "Lo", "Lt", "Lu", "Mc", "Me", + "Mn", "Nd", "Nl", "No", "Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps", "Sc", + "Sk", "Sm", "So", "Zl", "Zp", "Zs", +] + +BIDIRECTIONAL_NAMES = [ "", "L", "LRE", "LRO", "R", "AL", "RLE", "RLO", + "PDF", "EN", "ES", "ET", "AN", "CS", "NSM", "BN", "B", "S", "WS", + "ON", "LRI", "RLI", "FSI", "PDI" ] + +EASTASIANWIDTH_NAMES = [ "F", "H", "W", "Na", "A", "N" ] + +MANDATORY_LINE_BREAKS = [ "BK", "CR", "LF", "NL" ] + +LINE_BREAKS = [ + "XX", "AI", "BK", "CJ", "CR", "LF", "NL", "SA", "SG", "SP", "OP", "CL", + "CP", "QU", "GL", "NS", "EX", "SY", "IS", "PR", "PO", "NU", "AL", "HL", + "ID", "IN", "HY", "BA", "BB", "B2", "ZW", "CM", "WJ", "H2", "H3", "JL", + "JV", "JT", "RI", "EB", "EM", "ZWJ", "CB", +] + +SCRIPT_NAMES = [ + "Common", + "Inherited", + "Unknown", + "Adlam", + "Caucasian_Albanian", + "Ahom", + "Arabic", + "Imperial_Aramaic", + "Armenian", + "Avestan", + "Balinese", + "Bamum", + "Bassa_Vah", + "Batak", + "Bengali", + "Bhaiksuki", + "Bopomofo", + "Brahmi", + "Braille", + "Buginese", + "Buhid", + "Chakma", + "Canadian_Aboriginal", + "Carian", + "Cham", + "Cherokee", + "Chorasmian", + "Coptic", + "Cypro_Minoan", + "Cypriot", + "Cyrillic", + "Devanagari", + "Dives_Akuru", + "Dogra", + "Deseret", + "Duployan", + "Egyptian_Hieroglyphs", + "Elbasan", + "Elymaic", + "Ethiopic", + "Georgian", + "Glagolitic", + "Gunjala_Gondi", + "Masaram_Gondi", + "Gothic", + "Grantha", + "Greek", + "Gujarati", + "Gurmukhi", + "Hangul", + "Han", + "Hanunoo", + "Hatran", + "Hebrew", + "Hiragana", + "Anatolian_Hieroglyphs", + "Pahawh_Hmong", + "Nyiakeng_Puachue_Hmong", + "Old_Hungarian", + "Old_Italic", + "Javanese", + "Kayah_Li", + "Katakana", + "Kawi", + "Kharoshthi", + "Khmer", + "Khojki", + "Khitan_Small_Script", + "Kannada", + "Kaithi", + "Tai_Tham", + "Lao", + "Latin", + "Lepcha", + "Limbu", + "Linear_A", + "Linear_B", + "Lisu", + "Lycian", + "Lydian", + "Mahajani", + "Makasar", + "Mandaic", + "Manichaean", + "Marchen", + "Medefaidrin", + "Mende_Kikakui", + "Meroitic_Cursive", + "Meroitic_Hieroglyphs", + "Malayalam", + "Modi", + "Mongolian", + "Mro", + "Meetei_Mayek", + "Multani", + "Myanmar", + "Nag_Mundari", + "Nandinagari", + "Old_North_Arabian", + "Nabataean", + "Newa", + "Nko", + "Nushu", + "Ogham", + "Ol_Chiki", + "Old_Turkic", + "Oriya", + "Osage", + "Osmanya", + "Old_Uyghur", + "Palmyrene", + "Pau_Cin_Hau", + "Old_Permic", + "Phags_Pa", + "Inscriptional_Pahlavi", + "Psalter_Pahlavi", + "Phoenician", + "Miao", + "Inscriptional_Parthian", + "Rejang", + "Hanifi_Rohingya", + "Runic", + "Samaritan", + "Old_South_Arabian", + "Saurashtra", + "SignWriting", + "Shavian", + "Sharada", + "Siddham", + "Khudawadi", + "Sinhala", + "Sogdian", + "Old_Sogdian", + "Sora_Sompeng", + "Soyombo", + "Sundanese", + "Syloti_Nagri", + "Syriac", + "Tagbanwa", + "Takri", + "Tai_Le", + "New_Tai_Lue", + "Tamil", + "Tangut", + "Tai_Viet", + "Telugu", + "Tifinagh", + "Tagalog", + "Thaana", + "Thai", + "Tibetan", + "Tirhuta", + "Tangsa", + "Toto", + "Ugaritic", + "Vai", + "Vithkuqi", + "Warang_Citi", + "Wancho", + "Old_Persian", + "Cuneiform", + "Yezidi", + "Yi", + "Zanabazar_Square", +] + +# note: should match definitions in Objects/unicodectype.c +ALPHA_MASK = 0x01 +DECIMAL_MASK = 0x02 +DIGIT_MASK = 0x04 +LOWER_MASK = 0x08 +LINEBREAK_MASK = 0x10 +SPACE_MASK = 0x20 +TITLE_MASK = 0x40 +UPPER_MASK = 0x80 +XID_START_MASK = 0x100 +XID_CONTINUE_MASK = 0x200 +PRINTABLE_MASK = 0x400 +NUMERIC_MASK = 0x800 +CASE_IGNORABLE_MASK = 0x1000 +CASED_MASK = 0x2000 +EXTENDED_CASE_MASK = 0x4000 + +# these ranges need to match unicodedata.c:is_unified_ideograph +cjk_ranges = [ + ('3400', '4DBF'), + ('4E00', '9FFC'), + ('20000', '2A6DD'), + ('2A700', '2B734'), + ('2B740', '2B81D'), + ('2B820', '2CEA1'), + ('2CEB0', '2EBE0'), + ('30000', '3134A'), +] + +def maketables(trace=0): + + print("--- Reading", UNICODE_DATA % "", "...") + + unicode = UnicodeData(UNIDATA_VERSION) + + print(len(list(filter(None, unicode.table))), "characters") + + makeunicodedata(unicode, trace) + + +# -------------------------------------------------------------------- +# unicode character properties + +def makeunicodedata(unicode, trace): + + dummy = (0, 0, 0, 0, 0, 0, 0) + table = [dummy] + cache = {0: dummy} + index = [0] * len(unicode.chars) + + FILE = "unicode/ucd_gen.ha" + + print("--- Preparing", FILE, "...") + + for char in unicode.chars: + record = unicode.table[char] + if record: + # extract database properties + category = CATEGORY_NAMES.index(record.general_category) + combining = int(record.canonical_combining_class) + bidirectional = BIDIRECTIONAL_NAMES.index(record.bidi_class) + mirrored = record.bidi_mirrored == "Y" + eastasianwidth = EASTASIANWIDTH_NAMES.index(record.east_asian_width) + script = SCRIPT_NAMES.index(record.script or "Unknown") + line_break = LINE_BREAKS.index(record.line_break) + item = ( + category, combining, bidirectional, + mirrored, eastasianwidth, script, + line_break, + ) + # add entry to index and item tables + i = cache.get(item) + if i is None: + cache[item] = i = len(table) + table.append(item) + index[char] = i + + print(len(table), "unique properties") + + print("--- Writing", FILE, "...") + + with open(FILE, "w") as fp: + fprint = partial(print, file=fp) + + fprint("// Generated by scripts/gen-ucd.py") + fprint() + fprint('// Unicode database version supported by this module') + fprint('export def UNIDATA_VERSION: str = "%s";' % UNIDATA_VERSION) + fprint('') + fprint("// List of unique database records") + fprint("const ucd_records: [_]ucd_encodedrec = [") + for item in table: + fprint(" (%d, %d, %d, %d, %d, %d, %d)," % item) + fprint("];") + fprint() + + # split record index table + index1, index2, shift = splitbins(index, trace) + + fprint("// index tables for the database records") + fprint("def UCD_RECORD_SHIFT: size = %d;" % shift) + Array("index1", index1).dump(fp, trace) + Array("index2", index2).dump(fp, trace) + + +DATA_DIR = os.path.join('.data') + +def open_data(template, version): + local = os.path.join(DATA_DIR, template % ('-'+version,)) + if not os.path.exists(local): + import urllib.request + if version == '3.2.0': + # irregular url structure + url = ('https://www.unicode.org/Public/3.2-Update/'+template) % ('-'+version,) + else: + url = ('https://www.unicode.org/Public/%s/ucd/'+template) % (version, '') + os.makedirs(DATA_DIR, exist_ok=True) + urllib.request.urlretrieve(url, filename=local) + if local.endswith('.txt'): + return open(local, encoding='utf-8') + else: + # Unihan.zip + return open(local, 'rb') + + +def expand_range(char_range: str) -> Iterator[int]: + ''' + Parses ranges of code points, as described in UAX #44: + https://www.unicode.org/reports/tr44/#Code_Point_Ranges + ''' + if '..' in char_range: + first, last = [int(c, 16) for c in char_range.split('..')] + else: + first = last = int(char_range, 16) + for char in range(first, last+1): + yield char + + +class UcdFile: + ''' + A file in the standard format of the UCD. + + See: https://www.unicode.org/reports/tr44/#Format_Conventions + + Note that, as described there, the Unihan data files have their + own separate format. + ''' + + def __init__(self, template: str, version: str) -> None: + self.template = template + self.version = version + + def records(self) -> Iterator[List[str]]: + with open_data(self.template, self.version) as file: + for line in file: + line = line.split('#', 1)[0].strip() + if not line: + continue + yield [field.strip() for field in line.split(';')] + + def __iter__(self) -> Iterator[List[str]]: + return self.records() + + def expanded(self) -> Iterator[Tuple[int, List[str]]]: + for record in self.records(): + char_range, rest = record[0], record[1:] + for char in expand_range(char_range): + yield char, rest + + +@dataclasses.dataclass +class UcdRecord: + # 15 fields from UnicodeData.txt . See: + # https://www.unicode.org/reports/tr44/#UnicodeData.txt + codepoint: str + name: str + general_category: str + canonical_combining_class: str + bidi_class: str + decomposition_type: str + decomposition_mapping: str + numeric_type: str + numeric_value: str + bidi_mirrored: str + unicode_1_name: str # obsolete + iso_comment: str # obsolete + simple_uppercase_mapping: str + simple_lowercase_mapping: str + simple_titlecase_mapping: str + + # https://www.unicode.org/reports/tr44/#EastAsianWidth.txt + east_asian_width: Optional[str] + + # Binary properties, as a set of those that are true. + # Taken from multiple files: + # https://www.unicode.org/reports/tr44/#DerivedCoreProperties.txt + # https://www.unicode.org/reports/tr44/#LineBreak.txt + binary_properties: Set[str] + + # The Quick_Check properties related to normalization: + # https://www.unicode.org/reports/tr44/#Decompositions_and_Normalization + # We store them as a bitmask. + quick_check: int + + # From Script.txt + script: str + + # From LineBreak.txt + line_break: str + + +def from_row(row: List[str]) -> UcdRecord: + return UcdRecord(*row, None, set(), 0, "Unknown", "XX") + + +# -------------------------------------------------------------------- +# the following support code is taken from the unidb utilities +# Copyright (c) 1999-2000 by Secret Labs AB + +# load a unicode-data file from disk + +class UnicodeData: + # table: List[Optional[UcdRecord]] # index is codepoint; None means unassigned + + def __init__(self, version, cjk_check=True): + self.changed = [] + table = [None] * 0x110000 + for s in UcdFile(UNICODE_DATA, version): + char = int(s[0], 16) + table[char] = from_row(s) + + cjk_ranges_found = [] + + # expand first-last ranges + field = None + for i in range(0, 0x110000): + # The file UnicodeData.txt has its own distinct way of + # expressing ranges. See: + # https://www.unicode.org/reports/tr44/#Code_Point_Ranges + s = table[i] + if s: + if s.name[-6:] == "First>": + s.name = "" + field = dataclasses.astuple(s)[:15] + elif s.name[-5:] == "Last>": + if s.name.startswith(">quickcheck_shift)&3 + quickchecks[char] |= quickcheck + for i in range(0, 0x110000): + if table[i] is not None: + table[i].quick_check = quickchecks[i] + + with open_data(UNIHAN, version) as file: + zip = zipfile.ZipFile(file) + if version == '3.2.0': + data = zip.open('Unihan-3.2.0.txt').read() + else: + data = zip.open('Unihan_NumericValues.txt').read() + for line in data.decode("utf-8").splitlines(): + if not line.startswith('U+'): + continue + code, tag, value = line.split(None, 3)[:3] + if tag not in ('kAccountingNumeric', 'kPrimaryNumeric', + 'kOtherNumeric'): + continue + value = value.strip().replace(',', '') + i = int(code[2:], 16) + # Patch the numeric field + if table[i] is not None: + table[i].numeric_value = value + + sc = self.special_casing = {} + for data in UcdFile(SPECIAL_CASING, version): + if data[4]: + # We ignore all conditionals (since they depend on + # languages) except for one, which is hardcoded. See + # handle_capital_sigma in unicodeobject.c. + continue + c = int(data[0], 16) + lower = [int(char, 16) for char in data[1].split()] + title = [int(char, 16) for char in data[2].split()] + upper = [int(char, 16) for char in data[3].split()] + sc[c] = (lower, title, upper) + + cf = self.case_folding = {} + if version != '3.2.0': + for data in UcdFile(CASE_FOLDING, version): + if data[1] in "CF": + c = int(data[0], 16) + cf[c] = [int(char, 16) for char in data[2].split()] + + def uselatin1(self): + # restrict character range to ISO Latin 1 + self.chars = list(range(256)) + + +# hash table tools + +# this is a straight-forward reimplementation of Python's built-in +# dictionary type, using a static data structure, and a custom string +# hash algorithm. + +def myhash(s, magic): + h = 0 + for c in map(ord, s.upper()): + h = (h * magic) + c + ix = h & 0xff000000 + if ix: + h = (h ^ ((ix>>24) & 0xff)) & 0x00ffffff + return h + + +SIZES = [ + (4,3), (8,3), (16,3), (32,5), (64,3), (128,3), (256,29), (512,17), + (1024,9), (2048,5), (4096,83), (8192,27), (16384,43), (32768,3), + (65536,45), (131072,9), (262144,39), (524288,39), (1048576,9), + (2097152,5), (4194304,3), (8388608,33), (16777216,27) +] + + +class Hash: + def __init__(self, name, data, magic): + # turn a (key, value) list into a static hash table structure + + # determine table size + for size, poly in SIZES: + if size > len(data): + poly = size + poly + break + else: + raise AssertionError("ran out of polynomials") + + print(size, "slots in hash table") + + table = [None] * size + + mask = size-1 + + n = 0 + + hash = myhash + + # initialize hash table + for key, value in data: + h = hash(key, magic) + i = (~h) & mask + v = table[i] + if v is None: + table[i] = value + continue + incr = (h ^ (h >> 3)) & mask + if not incr: + incr = mask + while 1: + n = n + 1 + i = (i + incr) & mask + v = table[i] + if v is None: + table[i] = value + break + incr = incr << 1 + if incr > mask: + incr = incr ^ poly + + print(n, "collisions") + self.collisions = n + + for i in range(len(table)): + if table[i] is None: + table[i] = 0 + + self.data = Array(name + "_hash", table) + self.magic = magic + self.name = name + self.size = size + self.poly = poly + + def dump(self, file, trace): + # write data to file, as a C array + self.data.dump(file, trace) + file.write("#define %s_magic %d\n" % (self.name, self.magic)) + file.write("#define %s_size %d\n" % (self.name, self.size)) + file.write("#define %s_poly %d\n" % (self.name, self.poly)) + + +# stuff to deal with arrays of unsigned integers + +class Array: + + def __init__(self, name, data): + self.name = name + self.data = data + + def dump(self, file, trace=0): + # write data to file, as a C array + size = getsize(self.data) + if trace: + print(self.name+":", size*len(self.data), "bytes", file=sys.stderr) + file.write("const " + self.name + ": [_]") + if size == 1: + file.write("u8") + elif size == 2: + file.write("u16") + else: + file.write("u32") + file.write(" = [\n") + if self.data: + s = " " + for item in self.data: + i = str(item) + ", " + if len(s) + len(i) > 78: + file.write(s.rstrip() + "\n") + s = " " + i + else: + s = s + i + if s.strip(): + file.write(s.rstrip() + "\n") + file.write("];\n\n") + + +def getsize(data): + # return smallest possible integer size for the given array + maxdata = max(data) + if maxdata < 256: + return 1 + elif maxdata < 65536: + return 2 + else: + return 4 + + +def splitbins(t, trace=0): + """t, trace=0 -> (t1, t2, shift). Split a table to save space. + + t is a sequence of ints. This function can be useful to save space if + many of the ints are the same. t1 and t2 are lists of ints, and shift + is an int, chosen to minimize the combined size of t1 and t2 (in C + code), and where for each i in range(len(t)), + t[i] == t2[(t1[i >> shift] << shift) + (i & mask)] + where mask is a bitmask isolating the last "shift" bits. + + If optional arg trace is non-zero (default zero), progress info + is printed to sys.stderr. The higher the value, the more info + you'll get. + """ + + if trace: + def dump(t1, t2, shift, bytes): + print("%d+%d bins at shift %d; %d bytes" % ( + len(t1), len(t2), shift, bytes), file=sys.stderr) + print("Size of original table:", len(t)*getsize(t), "bytes", + file=sys.stderr) + n = len(t)-1 # last valid index + maxshift = 0 # the most we can shift n and still have something left + if n > 0: + while n >> 1: + n >>= 1 + maxshift += 1 + del n + bytes = sys.maxsize # smallest total size so far + t = tuple(t) # so slices can be dict keys + for shift in range(maxshift + 1): + t1 = [] + t2 = [] + size = 2**shift + bincache = {} + for i in range(0, len(t), size): + bin = t[i:i+size] + index = bincache.get(bin) + if index is None: + index = len(t2) + bincache[bin] = index + t2.extend(bin) + t1.append(index >> shift) + # determine memory size + b = len(t1)*getsize(t1) + len(t2)*getsize(t2) + if trace > 1: + dump(t1, t2, shift, b) + if b < bytes: + best = t1, t2, shift + bytes = b + t1, t2, shift = best + if trace: + print("Best:", end=' ', file=sys.stderr) + dump(t1, t2, shift, bytes) + if __debug__: + # exhaustively verify that the decomposition is correct + mask = ~((~0) << shift) # i.e., low-bit mask of shift bits + for i in range(len(t)): + assert t[i] == t2[(t1[i >> shift] << shift) + (i & mask)] + return best + + +if __name__ == "__main__": + maketables(1) diff --git a/vendor/hare-unicode/unicode/linebreak.ha b/vendor/hare-unicode/unicode/linebreak.ha new file mode 100644 index 0000000..bc88087 --- /dev/null +++ b/vendor/hare-unicode/unicode/linebreak.ha @@ -0,0 +1,196 @@ +use encoding::utf8; +use strings; + +export type line_breaker = struct { + input: str, + iter: strings::iterator, + // Current position + pos: size, + // Current position, bytes + bpos: size, + // Current line break class + cur: line_break, + // Next line break class + next: line_break, + // State for specific rules + lb8a: bool, + lb21a: bool, + lb30a: uint, +}; + +// Creates a new line breaking algorithm state machine. See [[next_line_break]] +// to enumerate the line break opportunities in the input string. +export fn new_line_breaker(input: str) line_breaker = { + return line_breaker { + input = input, + ... + }; +}; + +// Returns the next line break opportunity as a tuple of the rune-wise index, +// byte-wise index, and a boolean indicating whether or not the break is +// mandatory at this location. The line break opportunity directly precedes the +// index returned from this function. +// +// Hello world! +// ^ Line break opportunity at index 6 +export fn next_line_break(lb: *line_breaker) ((size, size, bool) | done) = { + if (lb.pos == 0) { + if (len(lb.input) == 0) { + return done; // special case + }; + + lb.iter = strings::iter(lb.input); + + const (class, rn) = next_lb1_class(lb) as (line_break, rune); + class = resolve_lb2_class(class); + lb.cur = class; + lb.next = class; + lb.lb8a = class == line_break::ZWJ; + }; + + for (const (next, rn) => next_lb1_class(lb)) { + const prev = lb.next; + lb.next = next; + const rnsz = utf8::runesz(rn); + defer { + lb.pos += 1; + lb.bpos += rnsz; + }; + + const mandatory = lb.cur == line_break::BK + || (lb.cur == line_break::CR + && lb.next != line_break::LF); + if (mandatory) { + lb.cur = resolve_lb2_class(next); + return (lb.pos + 1, lb.bpos + rnsz, true); + }; + + lb.lb8a = next == line_break::ZWJ; + + let can_break = lb_simple_case(lb); + match (can_break) { + case bool => void; + case void => + can_break = lb_complex_case(lb, prev); + }; + + assert(can_break is bool); + const can_break = can_break as bool; + if (can_break) { + return (lb.pos + 1, lb.bpos + rnsz, false); + }; + }; + + return done; +}; + +// Applies LB1 suggested rules for resolving context-dependent classes. +fn next_lb1_class(lb: *line_breaker) ((line_break, rune) | done) = { + const rn = match (strings::next(&lb.iter)) { + case let rn: rune => + yield rn; + case done => + return done; + }; + + const class = rune_line_break(rn); + switch (class) { + case line_break::AI, line_break::SG, line_break::XX => + return (line_break::AL, rn); + case line_break::SA => + switch (rune_gc(rn)) { + case gc::Mn, gc::Mc => + return (line_break::CM, rn); + case => + return (line_break::AL, rn); + }; + case line_break::CJ => + return (line_break::NS, rn); + case => + return (class, rn); + }; +}; + +// Applies LB2 suggested rules for resolving the start-of-text line-break class. +fn resolve_lb2_class(lb: line_break) line_break = { + switch (lb) { + case line_break::LF, line_break::NL => + return line_break::BK; + case line_break::SP => + return line_break::WJ; + case => + return lb; + }; +}; + +// If this is a simple case, return whether or not this is a break opportunity +// as a boolean. Returns void for special cases. +fn lb_simple_case(lb: *line_breaker) (bool | void) = { + switch (lb.next) { + case line_break::SP => + return false; + case line_break::BK, line_break::LF, line_break::NL => + lb.cur = line_break::BK; + return false; + case line_break::CR => + lb.cur = line_break::CR; + return false; + case => + return; + }; +}; + +// Handles more complex rules, including pair table lookups via +// linebreak_table.ha. +fn lb_complex_case(lb: *line_breaker, prev: line_break) bool = { + let can_break = false; + + const ucur = lb.cur: uint - line_break::OP: uint; + const unext = lb.next: uint - line_break::OP: uint; + if (ucur < len(lb_pairs) && unext < len(lb_pairs[0])) { + switch (lb_pairs[ucur][unext]) { + case bo::DI => // Direct break + can_break = true; + case bo::IN => // Indirect break opportunity + can_break = prev == line_break::SP; + case bo::CI => // Indirect opportunity for combining marks + can_break = prev == line_break::SP; + if (!can_break) { + return false; + }; + case bo::CP => // Prohibited for combining marks + if (prev != line_break::SP) { + return false; + }; + case bo::PR => void; + }; + }; + + // Rule LB8a + if (lb.lb8a) { + can_break = false; + }; + + // Rule LB21a + if (lb.lb21a && (lb.cur == line_break::HY || lb.cur == line_break::BA)) { + can_break = false; + lb.lb21a = false; + } else { + lb.lb21a = lb.cur == line_break::HL; + }; + + // Rule LB30a + if (lb.cur == line_break::RI) { + lb.lb30a += 1; + if (lb.lb30a == 2 && lb.next == line_break::RI) { + can_break = true; + lb.lb30a = 0; + }; + } else { + lb.lb30a = 0; + }; + + lb.cur = lb.next; + return can_break; +}; diff --git a/vendor/hare-unicode/unicode/linebreak_table.ha b/vendor/hare-unicode/unicode/linebreak_table.ha new file mode 100644 index 0000000..73e9b50 --- /dev/null +++ b/vendor/hare-unicode/unicode/linebreak_table.ha @@ -0,0 +1,63 @@ +// Break opportunity +type bo = enum { + // Direct opportunity + DI, + // Indirect opportunity + IN, + // Indirect opportunity for combining marks + CI, + // Prohibited break for combining marks + CP, + // Prohibited break + PR, +}; + +// Based on JavaScript implementation here: +// +// https://github.com/foliojs/linebreak/blob/master/src/pairs.js +// +// This is itself based on the example pair table from Unicode, which was last +// published in revision 37 of the line break algorithm, and has since been +// touched up by the JavaScript maintainers to incorporate later changes to the +// algorithm. +// +// - ZWJ special processing for LB8a of Revision 41 +// - CB manually added as per Rule LB20 +// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45 +const lb_pairs = [ + //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB + [bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::CP, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR, bo::PR], // OP + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // CL + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // CP + [bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::PR, bo::CI, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN], // QU + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::PR, bo::CI, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN], // GL + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // NS + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // EX + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::IN, bo::DI, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // SY + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // IS + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI], // PR + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // PO + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // NU + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // AL + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // HL + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // ID + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // IN + [bo::DI, bo::PR, bo::PR, bo::IN, bo::DI, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // HY + [bo::DI, bo::PR, bo::PR, bo::IN, bo::DI, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // BA + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::PR, bo::CI, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI], // BB + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::PR, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // B2 + [bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI], // ZW + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // CM + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::PR, bo::CI, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN], // WJ + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // H2 + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // H3 + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // JL + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // JV + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // JT + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI, bo::DI, bo::IN, bo::DI], // RI + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::DI], // EB + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::DI, bo::IN, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // EM + [bo::IN, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::PR, bo::PR, bo::PR, bo::IN, bo::IN, bo::IN, bo::IN, bo::IN, bo::DI, bo::IN, bo::IN, bo::IN, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI], // ZWJ + [bo::DI, bo::PR, bo::PR, bo::IN, bo::IN, bo::DI, bo::PR, bo::PR, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::PR, bo::CI, bo::PR, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::DI, bo::IN, bo::DI] // CB +]; + diff --git a/vendor/hare-unicode/unicode/ucd.ha b/vendor/hare-unicode/unicode/ucd.ha new file mode 100644 index 0000000..fb75406 --- /dev/null +++ b/vendor/hare-unicode/unicode/ucd.ha @@ -0,0 +1,654 @@ +type ucd_encodedrec = (u8, u8, u8, u8, u8, u16, u8); + +type ucd_record = struct { + category: u8, + combining: u8, + bidirectional: u8, + mirrored: u8, + east_asian_width: u8, + script: u16, + line_break: u8, +}; + +fn get_ucdrecord(rn: rune) *ucd_record = { + const code = rn: u32; + let index = 0u16; + if (code < 0x110000) { + index = index1[(code>>UCD_RECORD_SHIFT)]; + index = index2[(index< return "Control"; + case gc::Cf => return "Format"; + case gc::Cn => return "Unassigned"; + case gc::Co => return "Private use"; + case gc::Cs => return "Surrogate"; + case gc::Ll => return "Lowercase letter"; + case gc::Lm => return "Modifier letter"; + case gc::Lo => return "Other letter"; + case gc::Lt => return "Titlecase letter"; + case gc::Lu => return "Uppercase letter"; + case gc::Mc => return "Spacing mark"; + case gc::Me => return "Enclosing mark"; + case gc::Mn => return "Non-spacing mark"; + case gc::Nd => return "Decimal number"; + case gc::Nl => return "Letter number"; + case gc::No => return "Other number"; + case gc::Pc => return "Connect punctuation"; + case gc::Pd => return "Dash punctuation"; + case gc::Pe => return "Close punctuation"; + case gc::Pf => return "Final punctuation"; + case gc::Pi => return "Initial punctuation"; + case gc::Po => return "Other punctuation"; + case gc::Ps => return "Open punctuation"; + case gc::Sc => return "Currency symbol"; + case gc::Sk => return "Modifier symbol"; + case gc::Sm => return "Math symbol"; + case gc::So => return "Other symbol"; + case gc::Zl => return "Line separator"; + case gc::Zp => return "Paragraph separator"; + case gc::Zs => return "Space separator"; + }; +}; + +// Returns the two-character code associated with a [[gc]] value. +export fn gc_code(v: gc) const str = { + switch (v) { + case gc::Cc => return "Cc"; + case gc::Cf => return "Cf"; + case gc::Cn => return "Cn"; + case gc::Co => return "Co"; + case gc::Cs => return "Cs"; + case gc::Ll => return "Ll"; + case gc::Lm => return "Lm"; + case gc::Lo => return "Lo"; + case gc::Lt => return "Lt"; + case gc::Lu => return "Lu"; + case gc::Mc => return "Mc"; + case gc::Me => return "Me"; + case gc::Mn => return "Mn"; + case gc::Nd => return "Nd"; + case gc::Nl => return "Nl"; + case gc::No => return "No"; + case gc::Pc => return "Pc"; + case gc::Pd => return "Pd"; + case gc::Pe => return "Pe"; + case gc::Pf => return "Pf"; + case gc::Pi => return "Pi"; + case gc::Po => return "Po"; + case gc::Ps => return "Ps"; + case gc::Sc => return "Sc"; + case gc::Sk => return "Sk"; + case gc::Sm => return "Sm"; + case gc::So => return "So"; + case gc::Zl => return "Zl"; + case gc::Zp => return "Zp"; + case gc::Zs => return "Zs"; + }; +}; + +// Bidirectional classification. +export type bidi = enum u8 { + UNKNOWN, + L, + LRE, + LRO, + R, + AL, + RLE, + RLO, + PDF, + EN, + ES, + ET, + AN, + CS, + NSM, + BN, + B, + S, + WS, + ON, + LRI, + RLI, + FSI, + PDI, +}; + +// Returns the [[bidi]] classification corresponding to this rune. +export fn rune_bidi(rn: rune) bidi = { + return get_ucdrecord(rn).bidirectional: bidi; +}; + +// Unicode character Script attribute. +export type script = enum u16 { + COMMON, // Zyyy + INHERITED, // Zinh + UNKNOWN, // Zzzz + ADLAM, // Adlm + CAUCASIAN_ALBANIAN, // Aghb + AHOM, // Ahom + ARABIC, // Arab + IMPERIAL_ARAMAIC, // Armi + ARMENIAN, // Armn + AVESTAN, // Avst + BALINESE, // Bali + BAMUM, // Bamu + BASSA_VAH, // Bass + BATAK, // Batk + BENGALI, // Beng + BHAIKSUKI, // Bhks + BOPOMOFO, // Bopo + BRAHMI, // Brah + BRAILLE, // Brai + BUGINESE, // Bugi + BUHID, // Buhd + CHAKMA, // Cakm + CANADIAN_SYLLABICS, // Cans + CARIAN, // Cari + CHAM, // Cham + CHEROKEE, // Cher + CHORASMIAN, // Chrs + COPTIC, // Copt + CYPRO_MINOAN, // Cpmn + CYPRIOT, // Cprt + CYRILLIC, // Cyrl + DEVANAGARI, // Deva + DIVES_AKURU, // Diak + DOGRA, // Dogr + DESERET, // Dsrt + DUPLOYAN, // Dupl + EGYPTIAN_HIEROGLYPHS, // Egyp + ELBASAN, // Elba + ELYMAIC, // Elym + ETHIOPIC, // Ethi + GEORGIAN, // Geor + GLAGOLITIC, // Glag + GUNJALA_GONDI, // Gong + MASARAM_GONDI, // Gonm + GOTHIC, // Goth + GRANTHA, // Gran + GREEK, // Grek + GUJARATI, // Gujr + GURMUKHI, // Guru + HANGUL, // Hang + HAN, // Hani + HANUNOO, // Hano + HATRAN, // Hatr + HEBREW, // Hebr + HIRAGANA, // Hira + ANATOLIAN_HIEROGLYPHS, // Hluw + PAHAWH_HMONG, // Hmng + NYIAKENG_PUACHUE_HMONG, // Hmnp + OLD_HUNGARIAN, // Hung + OLD_ITALIC, // Ital + JAVANESE, // Java + KAYAH_LI, // Kali + KATAKANA, // Kana + KAWI, // Kawi + KHAROSHTHI, // Khar + KHMER, // Khmr + KHOJKI, // Khoj + KHITAN_SMALL_SCRIPT, // Kits + KANNADA, // Knda + KAITHI, // Kthi + TAI_THAM, // Lana + LAO, // Laoo + LATIN, // Latn + LEPCHA, // Lepc + LIMBU, // Limb + LINEAR_A, // Lina + LINEAR_B, // Linb + LISU, // Lisu + LYCIAN, // Lyci + LYDIAN, // Lydi + MAHAJANI, // Mahj + MAKASAR, // Maka + MANDAIC, // Mand + MANICHAEAN, // Mani + MARCHEN, // Marc + MEDEFAIDRIN, // Medf + MENDE_KIKAKUI, // Mend + MEROITIC_CURSIVE, // Merc + MEROITIC_HIEROGLYPHS, // Mero + MALAYALAM, // Mlym + MODI, // Modi + MONGOLIAN, // Mong + MRO, // Mroo + MEETEI_MAYEK, // Mtei + MULTANI, // Mult + MYANMAR, // Mymr + NAG_MUNDARI, // Nagm + NANDINAGARI, // Nand + OLD_NORTH_ARABIAN, // Narb + NABATAEAN, // Nbat + NEWA, // Newa + NKO, // Nkoo + NUSHU, // Nshu + OGHAM, // Ogam + OL_CHIKI, // Olck + OLD_TURKIC, // Orkh + ORIYA, // Orya + OSAGE, // Osge + OSMANYA, // Osma + OLD_UYGHUR, // Ougr + PALMYRENE, // Palm + PAU_CIN_HAU, // Pauc + OLD_PERMIC, // Perm + PHAGS_PA, // Phag + INSCRIPTIONAL_PAHLAVI, // Phli + PSALTER_PAHLAVI, // Phlp + PHOENICIAN, // Phnx + MIAO, // Plrd + INSCRIPTIONAL_PARTHIAN, // Prti + REJANG, // Rjng + HANIFI_ROHINGYA, // Rohg + RUNIC, // Runr + SAMARITAN, // Samr + OLD_SOUTH_ARABIAN, // Sarb + SAURASHTRA, // Saur + SIGNWRITING, // Sgnw + SHAVIAN, // Shaw + SHARADA, // Shrd + SIDDHAM, // Sidd + KHUDAWADI, // Sind + SINHALA, // Sinh + SOGDIAN, // Sogd + OLD_SOGDIAN, // Sogo + SORA_SOMPENG, // Sora + SOYOMBO, // Soyo + SUNDANESE, // Sund + SYLOTI_NAGRI, // Sylo + SYRIAC, // Syrc + TAGBANWA, // Tagb + TAKRI, // Takr + TAI_LE, // Tale + NEW_TAI_LUE, // Talu + TAMIL, // Taml + TANGUT, // Tang + TAI_VIET, // Tavt + TELUGU, // Telu + TIFINAGH, // Tfng + TAGALOG, // Tglg + THAANA, // Thaa + THAI, // Thai + TIBETAN, // Tibt + TIRHUTA, // Tirh + TANGSA, // Tnsa + TOTO, // Toto + UGARITIC, // Ugar + VAI, // Vaii + VITHKUQI, // Vith + WARANG_CITI, // Wara + WANCHO, // Wcho + OLD_PERSIAN, // Xpeo + CUNEIFORM, // Xsux + YEZIDI, // Yezi + YI, // Yiii + ZANABAZAR_SQUARE, // Zanb + MATH, // Zmth +}; + +// Returns the [[script]] corresponding to this rune. +export fn rune_script(rn: rune) script = { + return get_ucdrecord(rn).script: script; +}; + +// Returns the four-character code associated with a [[script]] value. +export fn script_code(sc: script) const str = { + switch (sc) { + case script::COMMON => return "Zyyy"; + case script::INHERITED => return "Zinh"; + case script::UNKNOWN => return "Zzzz"; + case script::ARABIC => return "Arab"; + case script::ARMENIAN => return "Armn"; + case script::BENGALI => return "Beng"; + case script::CYRILLIC => return "Cyrl"; + case script::DEVANAGARI => return "Deva"; + case script::GEORGIAN => return "Geor"; + case script::GREEK => return "Grek"; + case script::GUJARATI => return "Gujr"; + case script::GURMUKHI => return "Guru"; + case script::HANGUL => return "Hang"; + case script::HAN => return "Hani"; + case script::HEBREW => return "Hebr"; + case script::HIRAGANA => return "Hira"; + case script::KANNADA => return "Knda"; + case script::KATAKANA => return "Kana"; + case script::LAO => return "Laoo"; + case script::LATIN => return "Latn"; + case script::MALAYALAM => return "Mlym"; + case script::ORIYA => return "Orya"; + case script::TAMIL => return "Taml"; + case script::TELUGU => return "Telu"; + case script::THAI => return "Thai"; + case script::TIBETAN => return "Tibt"; + case script::BOPOMOFO => return "Bopo"; + case script::BRAILLE => return "Brai"; + case script::CANADIAN_SYLLABICS => return "Cans"; + case script::CHEROKEE => return "Cher"; + case script::ETHIOPIC => return "Ethi"; + case script::KHMER => return "Khmr"; + case script::MONGOLIAN => return "Mong"; + case script::MYANMAR => return "Mymr"; + case script::OGHAM => return "Ogam"; + case script::RUNIC => return "Runr"; + case script::SINHALA => return "Sinh"; + case script::SYRIAC => return "Syrc"; + case script::THAANA => return "Thaa"; + case script::YI => return "Yiii"; + case script::DESERET => return "Dsrt"; + case script::GOTHIC => return "Goth"; + case script::OLD_ITALIC => return "Ital"; + case script::BUHID => return "Buhd"; + case script::HANUNOO => return "Hano"; + case script::TAGALOG => return "Tglg"; + case script::TAGBANWA => return "Tagb"; + case script::CYPRIOT => return "Cprt"; + case script::LIMBU => return "Limb"; + case script::LINEAR_B => return "Linb"; + case script::OSMANYA => return "Osma"; + case script::SHAVIAN => return "Shaw"; + case script::TAI_LE => return "Tale"; + case script::UGARITIC => return "Ugar"; + case script::BUGINESE => return "Bugi"; + case script::COPTIC => return "Copt"; + case script::GLAGOLITIC => return "Glag"; + case script::KHAROSHTHI => return "Khar"; + case script::NEW_TAI_LUE => return "Talu"; + case script::OLD_PERSIAN => return "Xpeo"; + case script::SYLOTI_NAGRI => return "Sylo"; + case script::TIFINAGH => return "Tfng"; + case script::BALINESE => return "Bali"; + case script::CUNEIFORM => return "Xsux"; + case script::NKO => return "Nkoo"; + case script::PHAGS_PA => return "Phag"; + case script::PHOENICIAN => return "Phnx"; + case script::CARIAN => return "Cari"; + case script::CHAM => return "Cham"; + case script::KAYAH_LI => return "Kali"; + case script::LEPCHA => return "Lepc"; + case script::LYCIAN => return "Lyci"; + case script::LYDIAN => return "Lydi"; + case script::OL_CHIKI => return "Olck"; + case script::REJANG => return "Rjng"; + case script::SAURASHTRA => return "Saur"; + case script::SUNDANESE => return "Sund"; + case script::VAI => return "Vaii"; + case script::AVESTAN => return "Avst"; + case script::BAMUM => return "Bamu"; + case script::EGYPTIAN_HIEROGLYPHS => return "Egyp"; + case script::IMPERIAL_ARAMAIC => return "Armi"; + case script::INSCRIPTIONAL_PAHLAVI => return "Phli"; + case script::INSCRIPTIONAL_PARTHIAN => return "Prti"; + case script::JAVANESE => return "Java"; + case script::KAITHI => return "Kthi"; + case script::LISU => return "Lisu"; + case script::MEETEI_MAYEK => return "Mtei"; + case script::OLD_SOUTH_ARABIAN => return "Sarb"; + case script::OLD_TURKIC => return "Orkh"; + case script::SAMARITAN => return "Samr"; + case script::TAI_THAM => return "Lana"; + case script::TAI_VIET => return "Tavt"; + case script::BATAK => return "Batk"; + case script::BRAHMI => return "Brah"; + case script::MANDAIC => return "Mand"; + case script::CHAKMA => return "Cakm"; + case script::MEROITIC_CURSIVE => return "Merc"; + case script::MEROITIC_HIEROGLYPHS => return "Mero"; + case script::MIAO => return "Plrd"; + case script::SHARADA => return "Shrd"; + case script::SORA_SOMPENG => return "Sora"; + case script::TAKRI => return "Takr"; + case script::BASSA_VAH => return "Bass"; + case script::CAUCASIAN_ALBANIAN => return "Aghb"; + case script::DUPLOYAN => return "Dupl"; + case script::ELBASAN => return "Elba"; + case script::GRANTHA => return "Gran"; + case script::KHOJKI => return "Khoj"; + case script::KHUDAWADI => return "Sind"; + case script::LINEAR_A => return "Lina"; + case script::MAHAJANI => return "Mahj"; + case script::MANICHAEAN => return "Mani"; + case script::MENDE_KIKAKUI => return "Mend"; + case script::MODI => return "Modi"; + case script::MRO => return "Mroo"; + case script::NABATAEAN => return "Nbat"; + case script::OLD_NORTH_ARABIAN => return "Narb"; + case script::OLD_PERMIC => return "Perm"; + case script::PAHAWH_HMONG => return "Hmng"; + case script::PALMYRENE => return "Palm"; + case script::PAU_CIN_HAU => return "Pauc"; + case script::PSALTER_PAHLAVI => return "Phlp"; + case script::SIDDHAM => return "Sidd"; + case script::TIRHUTA => return "Tirh"; + case script::WARANG_CITI => return "Wara"; + case script::AHOM => return "Ahom"; + case script::ANATOLIAN_HIEROGLYPHS => return "Hluw"; + case script::HATRAN => return "Hatr"; + case script::MULTANI => return "Mult"; + case script::OLD_HUNGARIAN => return "Hung"; + case script::SIGNWRITING => return "Sgnw"; + case script::ADLAM => return "Adlm"; + case script::BHAIKSUKI => return "Bhks"; + case script::MARCHEN => return "Marc"; + case script::OSAGE => return "Osge"; + case script::TANGUT => return "Tang"; + case script::NEWA => return "Newa"; + case script::MASARAM_GONDI => return "Gonm"; + case script::NUSHU => return "Nshu"; + case script::SOYOMBO => return "Soyo"; + case script::ZANABAZAR_SQUARE => return "Zanb"; + case script::DOGRA => return "Dogr"; + case script::GUNJALA_GONDI => return "Gong"; + case script::HANIFI_ROHINGYA => return "Rohg"; + case script::MAKASAR => return "Maka"; + case script::MEDEFAIDRIN => return "Medf"; + case script::OLD_SOGDIAN => return "Sogo"; + case script::SOGDIAN => return "Sogd"; + case script::ELYMAIC => return "Elym"; + case script::NANDINAGARI => return "Nand"; + case script::NYIAKENG_PUACHUE_HMONG => return "Hmnp"; + case script::WANCHO => return "Wcho"; + case script::CHORASMIAN => return "Chrs"; + case script::DIVES_AKURU => return "Diak"; + case script::KHITAN_SMALL_SCRIPT => return "Kits"; + case script::YEZIDI => return "Yezi"; + case script::CYPRO_MINOAN => return "Cpmn"; + case script::OLD_UYGHUR => return "Ougr"; + case script::TANGSA => return "Tnsa"; + case script::TOTO => return "Toto"; + case script::VITHKUQI => return "Vith"; + case script::MATH => return "Zmth"; + case script::KAWI => return "Kawi"; + case script::NAG_MUNDARI => return "Nagm"; + }; +}; + +// Line break classification. +export type line_break = enum u8 { + XX, + AI, + BK, + CJ, + CR, + LF, + NL, + SA, + SG, + SP, + OP, + CL, + CP, + QU, + GL, + NS, + EX, + SY, + IS, + PR, + PO, + NU, + AL, + HL, + ID, + IN, + HY, + BA, + BB, + B2, + ZW, + CM, + WJ, + H2, + H3, + JL, + JV, + JT, + RI, + EB, + EM, + ZWJ, + CB, +}; + +// Returns the [[line_break]] classification corresponding to this rune. +export fn rune_line_break(rn: rune) line_break = { + return get_ucdrecord(rn).line_break: line_break; +}; + +// Returns the two-character code associated with a [[line_break]] value. +export fn line_break_code(lb: line_break) const str = { + switch (lb) { + case line_break::XX => + return "XX"; + case line_break::AI => + return "AI"; + case line_break::AL => + return "AL"; + case line_break::B2 => + return "B2"; + case line_break::BA => + return "BA"; + case line_break::BB => + return "BB"; + case line_break::BK => + return "BK"; + case line_break::CB => + return "CB"; + case line_break::CJ => + return "CJ"; + case line_break::CL => + return "CL"; + case line_break::CM => + return "CM"; + case line_break::CP => + return "CP"; + case line_break::CR => + return "CR"; + case line_break::EB => + return "EB"; + case line_break::EM => + return "EM"; + case line_break::EX => + return "EX"; + case line_break::GL => + return "GL"; + case line_break::H2 => + return "H2"; + case line_break::H3 => + return "H3"; + case line_break::HL => + return "HL"; + case line_break::HY => + return "HY"; + case line_break::ID => + return "ID"; + case line_break::IN => + return "IN"; + case line_break::IS => + return "IS"; + case line_break::JL => + return "JL"; + case line_break::JT => + return "JT"; + case line_break::JV => + return "JV"; + case line_break::LF => + return "LF"; + case line_break::NL => + return "NL"; + case line_break::NS => + return "NS"; + case line_break::NU => + return "NU"; + case line_break::OP => + return "OP"; + case line_break::PO => + return "PO"; + case line_break::PR => + return "PR"; + case line_break::QU => + return "QU"; + case line_break::RI => + return "RI"; + case line_break::SA => + return "SA"; + case line_break::SG => + return "SG"; + case line_break::SP => + return "SP"; + case line_break::SY => + return "SY"; + case line_break::WJ => + return "WJ"; + case line_break::ZW => + return "ZW"; + case line_break::ZWJ => + return "ZWJ"; + }; +}; diff --git a/vendor/hare-unicode/unicode/ucd_gen.ha b/vendor/hare-unicode/unicode/ucd_gen.ha new file mode 100644 index 0000000..39839be --- /dev/null +++ b/vendor/hare-unicode/unicode/ucd_gen.ha @@ -0,0 +1,4122 @@ +// Generated by scripts/gen-ucd.py + +// Unicode database version supported by this module +export def UNIDATA_VERSION: str = "13.0.0"; + +// List of unique database records +const ucd_records: [_]ucd_encodedrec = [ + (0, 0, 0, 0, 0, 0, 0), + (0, 0, 15, 0, 5, 0, 31), + (0, 0, 17, 0, 5, 0, 27), + (0, 0, 16, 0, 5, 0, 5), + (0, 0, 17, 0, 5, 0, 2), + (0, 0, 18, 0, 5, 0, 2), + (0, 0, 16, 0, 5, 0, 4), + (0, 0, 16, 0, 5, 0, 31), + (0, 0, 17, 0, 5, 0, 31), + (29, 0, 18, 0, 3, 0, 9), + (21, 0, 19, 0, 3, 0, 16), + (21, 0, 19, 0, 3, 0, 13), + (21, 0, 11, 0, 3, 0, 22), + (23, 0, 11, 0, 3, 0, 19), + (21, 0, 11, 0, 3, 0, 20), + (21, 0, 19, 0, 3, 0, 22), + (22, 0, 19, 1, 3, 0, 10), + (18, 0, 19, 1, 3, 0, 12), + (25, 0, 10, 0, 3, 0, 19), + (21, 0, 13, 0, 3, 0, 18), + (17, 0, 10, 0, 3, 0, 26), + (21, 0, 13, 0, 3, 0, 17), + (13, 0, 9, 0, 3, 0, 21), + (21, 0, 19, 0, 3, 0, 18), + (25, 0, 19, 1, 3, 0, 22), + (25, 0, 19, 0, 3, 0, 22), + (9, 0, 1, 0, 3, 72, 22), + (21, 0, 19, 0, 3, 0, 19), + (24, 0, 19, 0, 3, 0, 22), + (16, 0, 19, 0, 3, 0, 22), + (5, 0, 1, 0, 3, 72, 22), + (25, 0, 19, 0, 3, 0, 27), + (18, 0, 19, 1, 3, 0, 11), + (0, 0, 16, 0, 5, 0, 6), + (29, 0, 13, 0, 5, 0, 14), + (21, 0, 19, 0, 4, 0, 10), + (23, 0, 11, 0, 3, 0, 20), + (23, 0, 11, 0, 4, 0, 19), + (26, 0, 19, 0, 3, 0, 22), + (21, 0, 19, 0, 4, 0, 1), + (24, 0, 19, 0, 4, 0, 1), + (26, 0, 19, 0, 5, 0, 22), + (7, 0, 1, 0, 4, 72, 1), + (20, 0, 19, 1, 5, 0, 13), + (1, 0, 15, 0, 4, 0, 27), + (26, 0, 19, 0, 4, 0, 22), + (26, 0, 11, 0, 4, 0, 20), + (25, 0, 11, 0, 4, 0, 19), + (15, 0, 9, 0, 4, 0, 1), + (24, 0, 19, 0, 4, 0, 28), + (5, 0, 1, 0, 5, 0, 22), + (19, 0, 19, 1, 5, 0, 13), + (15, 0, 19, 0, 4, 0, 1), + (9, 0, 1, 0, 5, 72, 22), + (9, 0, 1, 0, 4, 72, 22), + (25, 0, 19, 0, 4, 0, 1), + (5, 0, 1, 0, 4, 72, 22), + (5, 0, 1, 0, 5, 72, 22), + (7, 0, 1, 0, 5, 72, 22), + (8, 0, 1, 0, 5, 72, 22), + (6, 0, 1, 0, 5, 72, 22), + (6, 0, 19, 0, 5, 0, 22), + (6, 0, 1, 0, 5, 0, 22), + (24, 0, 19, 0, 5, 0, 22), + (24, 0, 19, 0, 4, 0, 22), + (6, 0, 19, 0, 4, 0, 1), + (6, 0, 19, 0, 5, 0, 28), + (6, 0, 1, 0, 4, 0, 1), + (24, 0, 19, 0, 5, 16, 22), + (12, 230, 14, 0, 4, 1, 31), + (12, 232, 14, 0, 4, 1, 31), + (12, 220, 14, 0, 4, 1, 31), + (12, 216, 14, 0, 4, 1, 31), + (12, 202, 14, 0, 4, 1, 31), + (12, 1, 14, 0, 4, 1, 31), + (12, 240, 14, 0, 4, 1, 31), + (12, 0, 14, 0, 4, 1, 14), + (12, 233, 14, 0, 4, 1, 14), + (12, 234, 14, 0, 4, 1, 14), + (9, 0, 1, 0, 5, 46, 22), + (5, 0, 1, 0, 5, 46, 22), + (24, 0, 19, 0, 5, 46, 22), + (6, 0, 1, 0, 5, 46, 22), + (21, 0, 19, 0, 5, 0, 18), + (21, 0, 19, 0, 5, 0, 22), + (9, 0, 1, 0, 4, 46, 22), + (5, 0, 1, 0, 4, 46, 22), + (9, 0, 1, 0, 5, 27, 22), + (5, 0, 1, 0, 5, 27, 22), + (25, 0, 19, 0, 5, 46, 22), + (9, 0, 1, 0, 5, 30, 22), + (9, 0, 1, 0, 4, 30, 22), + (5, 0, 1, 0, 4, 30, 22), + (5, 0, 1, 0, 5, 30, 22), + (26, 0, 1, 0, 5, 30, 22), + (12, 230, 14, 0, 5, 30, 31), + (12, 230, 14, 0, 5, 1, 31), + (11, 0, 14, 0, 5, 30, 31), + (9, 0, 1, 0, 5, 8, 22), + (6, 0, 1, 0, 5, 8, 22), + (21, 0, 1, 0, 5, 8, 22), + (5, 0, 1, 0, 5, 8, 22), + (21, 0, 1, 0, 5, 8, 18), + (17, 0, 19, 0, 5, 8, 27), + (26, 0, 19, 0, 5, 8, 22), + (23, 0, 11, 0, 5, 8, 19), + (12, 220, 14, 0, 5, 53, 31), + (12, 230, 14, 0, 5, 53, 31), + (12, 222, 14, 0, 5, 53, 31), + (12, 228, 14, 0, 5, 53, 31), + (12, 10, 14, 0, 5, 53, 31), + (12, 11, 14, 0, 5, 53, 31), + (12, 12, 14, 0, 5, 53, 31), + (12, 13, 14, 0, 5, 53, 31), + (12, 14, 14, 0, 5, 53, 31), + (12, 15, 14, 0, 5, 53, 31), + (12, 16, 14, 0, 5, 53, 31), + (12, 17, 14, 0, 5, 53, 31), + (12, 18, 14, 0, 5, 53, 31), + (12, 19, 14, 0, 5, 53, 31), + (12, 20, 14, 0, 5, 53, 31), + (12, 21, 14, 0, 5, 53, 31), + (12, 22, 14, 0, 5, 53, 31), + (17, 0, 4, 0, 5, 53, 27), + (12, 23, 14, 0, 5, 53, 31), + (21, 0, 4, 0, 5, 53, 22), + (12, 24, 14, 0, 5, 53, 31), + (12, 25, 14, 0, 5, 53, 31), + (21, 0, 4, 0, 5, 53, 16), + (7, 0, 4, 0, 5, 53, 23), + (1, 0, 12, 0, 5, 6, 22), + (1, 0, 12, 0, 5, 0, 22), + (25, 0, 19, 0, 5, 6, 22), + (25, 0, 5, 0, 5, 6, 22), + (21, 0, 11, 0, 5, 6, 20), + (23, 0, 5, 0, 5, 6, 20), + (21, 0, 13, 0, 5, 0, 18), + (21, 0, 5, 0, 5, 6, 18), + (26, 0, 19, 0, 5, 6, 22), + (12, 230, 14, 0, 5, 6, 31), + (12, 30, 14, 0, 5, 6, 31), + (12, 31, 14, 0, 5, 6, 31), + (12, 32, 14, 0, 5, 6, 31), + (21, 0, 5, 0, 5, 0, 16), + (1, 0, 5, 0, 5, 6, 31), + (21, 0, 5, 0, 5, 6, 16), + (7, 0, 5, 0, 5, 6, 22), + (6, 0, 5, 0, 5, 0, 22), + (12, 27, 14, 0, 5, 1, 31), + (12, 28, 14, 0, 5, 1, 31), + (12, 29, 14, 0, 5, 1, 31), + (12, 30, 14, 0, 5, 1, 31), + (12, 31, 14, 0, 5, 1, 31), + (12, 32, 14, 0, 5, 1, 31), + (12, 33, 14, 0, 5, 1, 31), + (12, 34, 14, 0, 5, 1, 31), + (12, 220, 14, 0, 5, 1, 31), + (12, 220, 14, 0, 5, 6, 31), + (13, 0, 12, 0, 5, 6, 21), + (21, 0, 12, 0, 5, 6, 21), + (21, 0, 5, 0, 5, 6, 22), + (12, 35, 14, 0, 5, 1, 31), + (6, 0, 5, 0, 5, 6, 22), + (13, 0, 9, 0, 5, 6, 21), + (26, 0, 5, 0, 5, 6, 22), + (21, 0, 5, 0, 5, 137, 22), + (1, 0, 5, 0, 5, 137, 22), + (7, 0, 5, 0, 5, 137, 22), + (12, 36, 14, 0, 5, 137, 31), + (12, 230, 14, 0, 5, 137, 31), + (12, 220, 14, 0, 5, 137, 31), + (7, 0, 5, 0, 5, 148, 22), + (12, 0, 14, 0, 5, 148, 31), + (13, 0, 4, 0, 5, 101, 21), + (7, 0, 4, 0, 5, 101, 22), + (12, 230, 14, 0, 5, 101, 31), + (12, 220, 14, 0, 5, 101, 31), + (6, 0, 4, 0, 5, 101, 22), + (26, 0, 19, 0, 5, 101, 22), + (21, 0, 19, 0, 5, 101, 22), + (21, 0, 19, 0, 5, 101, 18), + (21, 0, 19, 0, 5, 101, 16), + (23, 0, 4, 0, 5, 101, 19), + (7, 0, 4, 0, 5, 122, 22), + (12, 230, 14, 0, 5, 122, 31), + (6, 0, 4, 0, 5, 122, 22), + (21, 0, 4, 0, 5, 122, 22), + (7, 0, 4, 0, 5, 82, 22), + (12, 220, 14, 0, 5, 82, 31), + (21, 0, 4, 0, 5, 82, 22), + (12, 27, 14, 0, 5, 6, 31), + (12, 28, 14, 0, 5, 6, 31), + (12, 29, 14, 0, 5, 6, 31), + (12, 0, 14, 0, 5, 31, 31), + (10, 0, 1, 0, 5, 31, 31), + (7, 0, 1, 0, 5, 31, 22), + (12, 7, 14, 0, 5, 31, 31), + (12, 9, 14, 0, 5, 31, 31), + (21, 0, 1, 0, 5, 0, 27), + (13, 0, 1, 0, 5, 31, 21), + (21, 0, 1, 0, 5, 31, 22), + (6, 0, 1, 0, 5, 31, 22), + (7, 0, 1, 0, 5, 14, 22), + (12, 0, 14, 0, 5, 14, 31), + (10, 0, 1, 0, 5, 14, 31), + (12, 7, 14, 0, 5, 14, 31), + (12, 9, 14, 0, 5, 14, 31), + (13, 0, 1, 0, 5, 14, 21), + (23, 0, 11, 0, 5, 14, 20), + (15, 0, 1, 0, 5, 14, 22), + (15, 0, 1, 0, 5, 14, 20), + (26, 0, 1, 0, 5, 14, 22), + (23, 0, 11, 0, 5, 14, 19), + (21, 0, 1, 0, 5, 14, 22), + (12, 230, 14, 0, 5, 14, 31), + (12, 0, 14, 0, 5, 48, 31), + (10, 0, 1, 0, 5, 48, 31), + (7, 0, 1, 0, 5, 48, 22), + (12, 7, 14, 0, 5, 48, 31), + (12, 9, 14, 0, 5, 48, 31), + (13, 0, 1, 0, 5, 48, 21), + (21, 0, 1, 0, 5, 48, 22), + (12, 0, 14, 0, 5, 47, 31), + (10, 0, 1, 0, 5, 47, 31), + (7, 0, 1, 0, 5, 47, 22), + (12, 7, 14, 0, 5, 47, 31), + (12, 9, 14, 0, 5, 47, 31), + (13, 0, 1, 0, 5, 47, 21), + (21, 0, 1, 0, 5, 47, 22), + (23, 0, 11, 0, 5, 47, 19), + (12, 0, 14, 0, 5, 106, 31), + (10, 0, 1, 0, 5, 106, 31), + (7, 0, 1, 0, 5, 106, 22), + (12, 7, 14, 0, 5, 106, 31), + (12, 9, 14, 0, 5, 106, 31), + (13, 0, 1, 0, 5, 106, 21), + (26, 0, 1, 0, 5, 106, 22), + (15, 0, 1, 0, 5, 106, 22), + (12, 0, 14, 0, 5, 142, 31), + (7, 0, 1, 0, 5, 142, 22), + (10, 0, 1, 0, 5, 142, 31), + (12, 9, 14, 0, 5, 142, 31), + (13, 0, 1, 0, 5, 142, 21), + (15, 0, 1, 0, 5, 142, 22), + (26, 0, 19, 0, 5, 142, 22), + (23, 0, 11, 0, 5, 142, 19), + (12, 0, 14, 0, 5, 145, 31), + (10, 0, 1, 0, 5, 145, 31), + (7, 0, 1, 0, 5, 145, 22), + (12, 9, 14, 0, 5, 145, 31), + (12, 84, 14, 0, 5, 145, 31), + (12, 91, 14, 0, 5, 145, 31), + (13, 0, 1, 0, 5, 145, 21), + (21, 0, 1, 0, 5, 145, 28), + (15, 0, 19, 0, 5, 145, 22), + (26, 0, 1, 0, 5, 145, 22), + (7, 0, 1, 0, 5, 68, 22), + (12, 0, 14, 0, 5, 68, 31), + (10, 0, 1, 0, 5, 68, 31), + (21, 0, 1, 0, 5, 68, 28), + (12, 7, 14, 0, 5, 68, 31), + (12, 0, 1, 0, 5, 68, 31), + (12, 9, 14, 0, 5, 68, 31), + (13, 0, 1, 0, 5, 68, 21), + (12, 0, 14, 0, 5, 89, 31), + (10, 0, 1, 0, 5, 89, 31), + (7, 0, 1, 0, 5, 89, 22), + (12, 9, 14, 0, 5, 89, 31), + (26, 0, 1, 0, 5, 89, 22), + (15, 0, 1, 0, 5, 89, 22), + (13, 0, 1, 0, 5, 89, 21), + (26, 0, 1, 0, 5, 89, 20), + (12, 0, 14, 0, 5, 130, 31), + (10, 0, 1, 0, 5, 130, 31), + (7, 0, 1, 0, 5, 130, 22), + (12, 9, 14, 0, 5, 130, 31), + (13, 0, 1, 0, 5, 130, 21), + (21, 0, 1, 0, 5, 130, 22), + (7, 0, 1, 0, 5, 149, 7), + (12, 0, 14, 0, 5, 149, 7), + (12, 103, 14, 0, 5, 149, 7), + (12, 9, 14, 0, 5, 149, 7), + (23, 0, 11, 0, 5, 0, 19), + (6, 0, 1, 0, 5, 149, 7), + (12, 107, 14, 0, 5, 149, 7), + (21, 0, 1, 0, 5, 149, 22), + (13, 0, 1, 0, 5, 149, 21), + (21, 0, 1, 0, 5, 149, 27), + (7, 0, 1, 0, 5, 71, 7), + (12, 0, 14, 0, 5, 71, 7), + (12, 118, 14, 0, 5, 71, 7), + (12, 9, 14, 0, 5, 71, 7), + (6, 0, 1, 0, 5, 71, 7), + (12, 122, 14, 0, 5, 71, 7), + (13, 0, 1, 0, 5, 71, 21), + (7, 0, 1, 0, 5, 150, 22), + (26, 0, 1, 0, 5, 150, 28), + (21, 0, 1, 0, 5, 150, 28), + (21, 0, 1, 0, 5, 150, 22), + (21, 0, 1, 0, 5, 150, 14), + (21, 0, 1, 0, 5, 150, 27), + (21, 0, 1, 0, 5, 150, 16), + (26, 0, 1, 0, 5, 150, 22), + (12, 220, 14, 0, 5, 150, 31), + (13, 0, 1, 0, 5, 150, 21), + (15, 0, 1, 0, 5, 150, 22), + (26, 0, 1, 0, 5, 150, 27), + (12, 216, 14, 0, 5, 150, 31), + (22, 0, 19, 1, 5, 150, 10), + (18, 0, 19, 1, 5, 150, 11), + (10, 0, 1, 0, 5, 150, 31), + (12, 129, 14, 0, 5, 150, 31), + (12, 130, 14, 0, 5, 150, 31), + (12, 0, 14, 0, 5, 150, 31), + (12, 132, 14, 0, 5, 150, 31), + (10, 0, 1, 0, 5, 150, 27), + (12, 230, 14, 0, 5, 150, 31), + (12, 9, 14, 0, 5, 150, 31), + (26, 0, 1, 0, 5, 0, 22), + (7, 0, 1, 0, 5, 95, 7), + (10, 0, 1, 0, 5, 95, 7), + (12, 0, 14, 0, 5, 95, 7), + (12, 7, 14, 0, 5, 95, 7), + (12, 9, 14, 0, 5, 95, 7), + (13, 0, 1, 0, 5, 95, 21), + (21, 0, 1, 0, 5, 95, 27), + (21, 0, 1, 0, 5, 95, 22), + (12, 220, 14, 0, 5, 95, 7), + (26, 0, 1, 0, 5, 95, 7), + (9, 0, 1, 0, 5, 40, 22), + (5, 0, 1, 0, 5, 40, 22), + (21, 0, 1, 0, 5, 0, 22), + (6, 0, 1, 0, 5, 40, 22), + (7, 0, 1, 0, 2, 49, 35), + (7, 0, 1, 0, 5, 49, 36), + (7, 0, 1, 0, 5, 49, 37), + (7, 0, 1, 0, 5, 39, 22), + (12, 230, 14, 0, 5, 39, 31), + (21, 0, 1, 0, 5, 39, 22), + (21, 0, 1, 0, 5, 39, 27), + (15, 0, 1, 0, 5, 39, 22), + (26, 0, 19, 0, 5, 39, 22), + (9, 0, 1, 0, 5, 25, 22), + (5, 0, 1, 0, 5, 25, 22), + (17, 0, 19, 0, 5, 22, 27), + (7, 0, 1, 0, 5, 22, 22), + (26, 0, 1, 0, 5, 22, 22), + (21, 0, 1, 0, 5, 22, 22), + (29, 0, 18, 0, 5, 103, 27), + (7, 0, 1, 0, 5, 103, 22), + (22, 0, 19, 1, 5, 103, 10), + (18, 0, 19, 1, 5, 103, 11), + (7, 0, 1, 0, 5, 121, 22), + (14, 0, 1, 0, 5, 121, 22), + (7, 0, 1, 0, 5, 147, 22), + (12, 0, 14, 0, 5, 147, 31), + (12, 9, 14, 0, 5, 147, 31), + (7, 0, 1, 0, 5, 51, 22), + (12, 0, 14, 0, 5, 51, 31), + (12, 9, 14, 0, 5, 51, 31), + (7, 0, 1, 0, 5, 20, 22), + (12, 0, 14, 0, 5, 20, 31), + (7, 0, 1, 0, 5, 138, 22), + (12, 0, 14, 0, 5, 138, 31), + (7, 0, 1, 0, 5, 65, 7), + (12, 0, 14, 0, 5, 65, 7), + (10, 0, 1, 0, 5, 65, 7), + (12, 9, 14, 0, 5, 65, 7), + (21, 0, 1, 0, 5, 65, 27), + (21, 0, 1, 0, 5, 65, 15), + (6, 0, 1, 0, 5, 65, 7), + (21, 0, 1, 0, 5, 65, 22), + (23, 0, 11, 0, 5, 65, 19), + (12, 230, 14, 0, 5, 65, 7), + (13, 0, 1, 0, 5, 65, 21), + (15, 0, 19, 0, 5, 65, 22), + (21, 0, 19, 0, 5, 91, 22), + (21, 0, 19, 0, 5, 0, 16), + (21, 0, 19, 0, 5, 91, 27), + (21, 0, 19, 0, 5, 0, 27), + (17, 0, 19, 0, 5, 91, 28), + (21, 0, 19, 0, 5, 91, 16), + (12, 0, 14, 0, 5, 91, 31), + (1, 0, 15, 0, 5, 91, 14), + (13, 0, 1, 0, 5, 91, 21), + (7, 0, 1, 0, 5, 91, 22), + (6, 0, 1, 0, 5, 91, 22), + (12, 228, 14, 0, 5, 91, 31), + (7, 0, 1, 0, 5, 74, 22), + (12, 0, 14, 0, 5, 74, 31), + (10, 0, 1, 0, 5, 74, 31), + (12, 222, 14, 0, 5, 74, 31), + (12, 230, 14, 0, 5, 74, 31), + (12, 220, 14, 0, 5, 74, 31), + (26, 0, 19, 0, 5, 74, 22), + (21, 0, 19, 0, 5, 74, 16), + (13, 0, 1, 0, 5, 74, 21), + (7, 0, 1, 0, 5, 140, 7), + (7, 0, 1, 0, 5, 141, 7), + (13, 0, 1, 0, 5, 141, 21), + (15, 0, 1, 0, 5, 141, 7), + (26, 0, 19, 0, 5, 141, 7), + (26, 0, 19, 0, 5, 65, 22), + (7, 0, 1, 0, 5, 19, 22), + (12, 230, 14, 0, 5, 19, 31), + (12, 220, 14, 0, 5, 19, 31), + (10, 0, 1, 0, 5, 19, 31), + (12, 0, 14, 0, 5, 19, 31), + (21, 0, 1, 0, 5, 19, 22), + (7, 0, 1, 0, 5, 70, 7), + (10, 0, 1, 0, 5, 70, 7), + (12, 0, 14, 0, 5, 70, 7), + (12, 9, 14, 0, 5, 70, 7), + (12, 230, 14, 0, 5, 70, 7), + (12, 220, 14, 0, 5, 70, 31), + (13, 0, 1, 0, 5, 70, 21), + (21, 0, 1, 0, 5, 70, 7), + (6, 0, 1, 0, 5, 70, 7), + (11, 0, 14, 0, 5, 1, 31), + (12, 0, 14, 0, 5, 10, 31), + (10, 0, 1, 0, 5, 10, 31), + (7, 0, 1, 0, 5, 10, 22), + (12, 7, 14, 0, 5, 10, 31), + (10, 9, 1, 0, 5, 10, 31), + (13, 0, 1, 0, 5, 10, 21), + (21, 0, 1, 0, 5, 10, 27), + (21, 0, 1, 0, 5, 10, 22), + (26, 0, 1, 0, 5, 10, 22), + (12, 230, 14, 0, 5, 10, 31), + (12, 220, 14, 0, 5, 10, 31), + (12, 0, 14, 0, 5, 135, 31), + (10, 0, 1, 0, 5, 135, 31), + (7, 0, 1, 0, 5, 135, 22), + (10, 9, 1, 0, 5, 135, 31), + (12, 9, 14, 0, 5, 135, 31), + (13, 0, 1, 0, 5, 135, 21), + (7, 0, 1, 0, 5, 13, 22), + (12, 7, 14, 0, 5, 13, 31), + (10, 0, 1, 0, 5, 13, 31), + (12, 0, 14, 0, 5, 13, 31), + (10, 9, 1, 0, 5, 13, 31), + (21, 0, 1, 0, 5, 13, 22), + (7, 0, 1, 0, 5, 73, 22), + (10, 0, 1, 0, 5, 73, 31), + (12, 0, 14, 0, 5, 73, 31), + (12, 7, 14, 0, 5, 73, 31), + (21, 0, 1, 0, 5, 73, 27), + (13, 0, 1, 0, 5, 73, 21), + (13, 0, 1, 0, 5, 104, 21), + (7, 0, 1, 0, 5, 104, 22), + (6, 0, 1, 0, 5, 104, 22), + (21, 0, 1, 0, 5, 104, 27), + (21, 0, 1, 0, 5, 135, 22), + (12, 1, 14, 0, 5, 1, 31), + (10, 0, 1, 0, 5, 0, 31), + (7, 0, 1, 0, 5, 0, 22), + (6, 0, 1, 0, 5, 30, 22), + (12, 234, 14, 0, 5, 1, 31), + (12, 214, 14, 0, 5, 1, 31), + (12, 202, 14, 0, 5, 1, 31), + (12, 232, 14, 0, 5, 1, 31), + (12, 228, 14, 0, 5, 1, 31), + (12, 233, 14, 0, 5, 1, 31), + (8, 0, 1, 0, 5, 46, 22), + (24, 0, 19, 0, 5, 46, 28), + (29, 0, 18, 0, 5, 0, 27), + (29, 0, 18, 0, 5, 0, 14), + (1, 0, 15, 0, 5, 0, 30), + (1, 0, 15, 0, 5, 1, 31), + (1, 0, 15, 0, 5, 1, 41), + (1, 0, 1, 0, 5, 0, 31), + (1, 0, 4, 0, 5, 0, 31), + (17, 0, 19, 0, 4, 0, 27), + (17, 0, 19, 0, 5, 0, 14), + (17, 0, 19, 0, 5, 0, 27), + (17, 0, 19, 0, 4, 0, 29), + (17, 0, 19, 0, 4, 0, 1), + (20, 0, 19, 0, 4, 0, 13), + (19, 0, 19, 0, 4, 0, 13), + (22, 0, 19, 0, 5, 0, 10), + (20, 0, 19, 0, 5, 0, 13), + (21, 0, 19, 0, 4, 0, 22), + (21, 0, 19, 0, 4, 0, 25), + (21, 0, 19, 0, 4, 0, 27), + (27, 0, 18, 0, 5, 0, 2), + (28, 0, 16, 0, 5, 0, 2), + (1, 0, 2, 0, 5, 0, 31), + (1, 0, 6, 0, 5, 0, 31), + (1, 0, 8, 0, 5, 0, 31), + (1, 0, 3, 0, 5, 0, 31), + (1, 0, 7, 0, 5, 0, 31), + (21, 0, 11, 0, 4, 0, 20), + (21, 0, 11, 0, 5, 0, 20), + (21, 0, 19, 0, 4, 0, 20), + (21, 0, 19, 0, 5, 0, 20), + (21, 0, 19, 0, 5, 0, 15), + (16, 0, 19, 0, 5, 0, 22), + (25, 0, 13, 0, 5, 0, 18), + (22, 0, 19, 1, 5, 0, 10), + (18, 0, 19, 1, 5, 0, 11), + (25, 0, 19, 0, 5, 0, 22), + (1, 0, 15, 0, 5, 0, 32), + (1, 0, 15, 0, 5, 0, 22), + (1, 0, 20, 0, 5, 0, 31), + (1, 0, 21, 0, 5, 0, 31), + (1, 0, 22, 0, 5, 0, 31), + (1, 0, 23, 0, 5, 0, 31), + (1, 0, 15, 0, 5, 0, 31), + (15, 0, 9, 0, 5, 0, 22), + (25, 0, 10, 0, 5, 0, 22), + (6, 0, 1, 0, 4, 72, 1), + (23, 0, 11, 0, 5, 0, 20), + (23, 0, 11, 0, 1, 0, 19), + (9, 0, 1, 0, 5, 0, 22), + (26, 0, 19, 0, 4, 0, 20), + (26, 0, 19, 0, 4, 0, 1), + (5, 0, 1, 0, 4, 0, 1), + (26, 0, 19, 0, 4, 0, 19), + (9, 0, 1, 0, 4, 72, 1), + (26, 0, 11, 0, 5, 0, 22), + (25, 0, 19, 1, 5, 0, 22), + (15, 0, 19, 0, 5, 0, 22), + (15, 0, 19, 0, 4, 0, 22), + (15, 0, 19, 0, 5, 0, 1), + (14, 0, 1, 0, 4, 72, 1), + (14, 0, 1, 0, 5, 72, 22), + (25, 0, 19, 1, 4, 0, 1), + (25, 0, 10, 0, 5, 0, 19), + (25, 0, 11, 0, 5, 0, 19), + (25, 0, 19, 0, 5, 0, 25), + (26, 0, 19, 0, 2, 0, 24), + (22, 0, 19, 1, 2, 0, 10), + (18, 0, 19, 1, 2, 0, 11), + (26, 0, 19, 0, 2, 0, 22), + (26, 0, 19, 0, 5, 0, 24), + (26, 0, 1, 0, 4, 0, 1), + (26, 0, 19, 0, 5, 0, 1), + (25, 0, 19, 0, 2, 0, 22), + (26, 0, 19, 0, 4, 0, 24), + (26, 0, 19, 0, 5, 0, 39), + (26, 0, 19, 0, 4, 0, 39), + (26, 0, 19, 0, 2, 0, 39), + (26, 0, 19, 0, 2, 0, 1), + (26, 0, 19, 0, 5, 0, 13), + (26, 0, 19, 0, 5, 0, 16), + (26, 0, 1, 0, 5, 18, 22), + (26, 0, 19, 1, 5, 0, 22), + (9, 0, 1, 0, 5, 41, 22), + (5, 0, 1, 0, 5, 41, 22), + (26, 0, 19, 0, 5, 27, 22), + (12, 230, 14, 0, 5, 27, 31), + (21, 0, 19, 0, 5, 27, 16), + (21, 0, 19, 0, 5, 27, 27), + (15, 0, 19, 0, 5, 27, 22), + (7, 0, 1, 0, 5, 146, 22), + (6, 0, 1, 0, 5, 146, 22), + (21, 0, 1, 0, 5, 146, 27), + (12, 9, 14, 0, 5, 146, 31), + (21, 0, 19, 0, 5, 0, 13), + (21, 0, 19, 0, 5, 0, 10), + (17, 0, 19, 0, 5, 0, 22), + (17, 0, 19, 0, 5, 0, 29), + (26, 0, 19, 0, 2, 50, 24), + (29, 0, 18, 0, 0, 0, 27), + (21, 0, 19, 0, 2, 0, 11), + (21, 0, 19, 0, 2, 0, 24), + (6, 0, 1, 0, 2, 50, 15), + (7, 0, 1, 0, 2, 0, 24), + (14, 0, 1, 0, 2, 50, 24), + (17, 0, 19, 0, 2, 0, 15), + (22, 0, 19, 0, 2, 0, 10), + (18, 0, 19, 0, 2, 0, 11), + (12, 218, 14, 0, 2, 1, 31), + (12, 228, 14, 0, 2, 1, 31), + (12, 232, 14, 0, 2, 1, 31), + (12, 222, 14, 0, 2, 1, 31), + (10, 224, 1, 0, 2, 49, 31), + (17, 0, 19, 0, 2, 0, 24), + (6, 0, 1, 0, 2, 0, 24), + (6, 0, 1, 0, 2, 0, 31), + (7, 0, 1, 0, 2, 0, 15), + (7, 0, 1, 0, 2, 54, 3), + (7, 0, 1, 0, 2, 54, 24), + (12, 8, 14, 0, 2, 1, 31), + (24, 0, 19, 0, 2, 0, 15), + (6, 0, 1, 0, 2, 54, 15), + (7, 0, 1, 0, 2, 62, 3), + (7, 0, 1, 0, 2, 62, 24), + (21, 0, 19, 0, 2, 0, 15), + (6, 0, 1, 0, 2, 0, 3), + (6, 0, 1, 0, 2, 62, 15), + (7, 0, 1, 0, 2, 16, 24), + (7, 0, 1, 0, 2, 49, 24), + (26, 0, 1, 0, 2, 0, 24), + (15, 0, 1, 0, 2, 0, 24), + (26, 0, 1, 0, 2, 49, 24), + (26, 0, 19, 0, 2, 49, 24), + (15, 0, 1, 0, 4, 0, 1), + (15, 0, 19, 0, 2, 0, 24), + (26, 0, 1, 0, 2, 62, 24), + (7, 0, 1, 0, 2, 50, 24), + (7, 0, 1, 0, 2, 162, 24), + (6, 0, 1, 0, 2, 162, 15), + (26, 0, 19, 0, 2, 162, 24), + (7, 0, 1, 0, 5, 77, 22), + (6, 0, 1, 0, 5, 77, 22), + (21, 0, 1, 0, 5, 77, 27), + (7, 0, 1, 0, 5, 155, 22), + (6, 0, 1, 0, 5, 155, 22), + (21, 0, 19, 0, 5, 155, 27), + (21, 0, 19, 0, 5, 155, 16), + (13, 0, 1, 0, 5, 155, 21), + (7, 0, 1, 0, 5, 30, 22), + (21, 0, 19, 0, 5, 30, 22), + (6, 0, 19, 0, 5, 30, 22), + (7, 0, 1, 0, 5, 11, 22), + (14, 0, 1, 0, 5, 11, 22), + (12, 230, 14, 0, 5, 11, 31), + (21, 0, 1, 0, 5, 11, 22), + (21, 0, 1, 0, 5, 11, 27), + (24, 0, 1, 0, 5, 0, 22), + (7, 0, 1, 0, 5, 136, 22), + (12, 0, 14, 0, 5, 136, 31), + (12, 9, 14, 0, 5, 136, 31), + (10, 0, 1, 0, 5, 136, 31), + (26, 0, 19, 0, 5, 136, 22), + (15, 0, 1, 0, 5, 0, 22), + (7, 0, 1, 0, 5, 113, 22), + (21, 0, 19, 0, 5, 113, 28), + (21, 0, 19, 0, 5, 113, 16), + (10, 0, 1, 0, 5, 124, 31), + (7, 0, 1, 0, 5, 124, 22), + (12, 9, 14, 0, 5, 124, 31), + (12, 0, 14, 0, 5, 124, 31), + (21, 0, 1, 0, 5, 124, 27), + (13, 0, 1, 0, 5, 124, 21), + (12, 230, 14, 0, 5, 31, 31), + (21, 0, 1, 0, 5, 31, 28), + (13, 0, 1, 0, 5, 61, 21), + (7, 0, 1, 0, 5, 61, 22), + (12, 0, 14, 0, 5, 61, 31), + (12, 220, 14, 0, 5, 61, 31), + (21, 0, 1, 0, 5, 61, 27), + (7, 0, 1, 0, 5, 119, 22), + (12, 0, 14, 0, 5, 119, 31), + (10, 0, 1, 0, 5, 119, 31), + (10, 9, 1, 0, 5, 119, 31), + (21, 0, 1, 0, 5, 119, 22), + (12, 0, 14, 0, 5, 60, 31), + (10, 0, 1, 0, 5, 60, 31), + (7, 0, 1, 0, 5, 60, 22), + (12, 7, 14, 0, 5, 60, 31), + (10, 9, 1, 0, 5, 60, 31), + (21, 0, 1, 0, 5, 60, 22), + (21, 0, 1, 0, 5, 60, 27), + (13, 0, 1, 0, 5, 60, 21), + (6, 0, 1, 0, 5, 95, 7), + (7, 0, 1, 0, 5, 24, 22), + (12, 0, 14, 0, 5, 24, 31), + (10, 0, 1, 0, 5, 24, 31), + (13, 0, 1, 0, 5, 24, 21), + (21, 0, 1, 0, 5, 24, 22), + (21, 0, 1, 0, 5, 24, 27), + (7, 0, 1, 0, 5, 144, 7), + (12, 230, 14, 0, 5, 144, 7), + (12, 220, 14, 0, 5, 144, 7), + (6, 0, 1, 0, 5, 144, 7), + (21, 0, 1, 0, 5, 144, 7), + (7, 0, 1, 0, 5, 93, 22), + (10, 0, 1, 0, 5, 93, 31), + (12, 0, 14, 0, 5, 93, 31), + (21, 0, 1, 0, 5, 93, 27), + (6, 0, 1, 0, 5, 93, 22), + (12, 9, 14, 0, 5, 93, 31), + (13, 0, 1, 0, 5, 93, 21), + (7, 0, 1, 0, 2, 49, 33), + (7, 0, 1, 0, 2, 49, 34), + (4, 0, 1, 0, 5, 2, 8), + (3, 0, 1, 0, 4, 2, 0), + (12, 26, 14, 0, 5, 53, 31), + (25, 0, 10, 0, 5, 53, 22), + (24, 0, 5, 0, 5, 6, 22), + (18, 0, 19, 0, 5, 0, 11), + (12, 0, 14, 0, 4, 1, 31), + (21, 0, 19, 0, 2, 0, 18), + (21, 0, 19, 0, 2, 0, 16), + (21, 0, 19, 0, 2, 0, 25), + (16, 0, 19, 0, 2, 0, 24), + (21, 0, 13, 0, 2, 0, 11), + (21, 0, 13, 0, 2, 0, 15), + (21, 0, 11, 0, 2, 0, 24), + (25, 0, 10, 0, 2, 0, 24), + (17, 0, 10, 0, 2, 0, 24), + (25, 0, 19, 1, 2, 0, 24), + (25, 0, 19, 0, 2, 0, 24), + (23, 0, 11, 0, 2, 0, 19), + (21, 0, 11, 0, 2, 0, 20), + (21, 0, 19, 0, 0, 0, 16), + (21, 0, 19, 0, 0, 0, 24), + (21, 0, 11, 0, 0, 0, 24), + (23, 0, 11, 0, 0, 0, 19), + (21, 0, 11, 0, 0, 0, 20), + (22, 0, 19, 1, 0, 0, 10), + (18, 0, 19, 1, 0, 0, 11), + (25, 0, 10, 0, 0, 0, 24), + (21, 0, 13, 0, 0, 0, 11), + (17, 0, 10, 0, 0, 0, 24), + (21, 0, 13, 0, 0, 0, 24), + (13, 0, 9, 0, 0, 0, 24), + (21, 0, 13, 0, 0, 0, 15), + (21, 0, 19, 0, 0, 0, 15), + (25, 0, 19, 1, 0, 0, 24), + (25, 0, 19, 0, 0, 0, 24), + (9, 0, 1, 0, 0, 72, 24), + (24, 0, 19, 0, 0, 0, 24), + (16, 0, 19, 0, 0, 0, 24), + (5, 0, 1, 0, 0, 72, 24), + (21, 0, 19, 0, 1, 0, 11), + (22, 0, 19, 1, 1, 0, 10), + (18, 0, 19, 1, 1, 0, 11), + (21, 0, 19, 0, 1, 0, 15), + (7, 0, 1, 0, 1, 62, 24), + (7, 0, 1, 0, 1, 62, 3), + (6, 0, 1, 0, 1, 0, 3), + (6, 0, 1, 0, 1, 0, 15), + (7, 0, 1, 0, 1, 49, 24), + (23, 0, 11, 0, 0, 0, 20), + (26, 0, 19, 0, 0, 0, 24), + (26, 0, 19, 0, 1, 0, 22), + (25, 0, 19, 0, 1, 0, 22), + (1, 0, 19, 0, 5, 0, 31), + (26, 0, 19, 0, 5, 0, 42), + (7, 0, 1, 0, 5, 76, 22), + (14, 0, 19, 0, 5, 46, 22), + (15, 0, 19, 0, 5, 46, 22), + (26, 0, 19, 0, 5, 46, 22), + (26, 0, 1, 0, 5, 46, 22), + (7, 0, 1, 0, 5, 78, 22), + (7, 0, 1, 0, 5, 23, 22), + (7, 0, 1, 0, 5, 59, 22), + (15, 0, 1, 0, 5, 59, 22), + (7, 0, 1, 0, 5, 44, 22), + (14, 0, 1, 0, 5, 44, 22), + (7, 0, 1, 0, 5, 112, 22), + (12, 230, 14, 0, 5, 112, 31), + (7, 0, 1, 0, 5, 154, 22), + (21, 0, 1, 0, 5, 154, 27), + (7, 0, 1, 0, 5, 159, 22), + (21, 0, 1, 0, 5, 159, 27), + (14, 0, 1, 0, 5, 159, 22), + (9, 0, 1, 0, 5, 34, 22), + (5, 0, 1, 0, 5, 34, 22), + (7, 0, 1, 0, 5, 126, 22), + (7, 0, 1, 0, 5, 108, 22), + (13, 0, 1, 0, 5, 108, 21), + (9, 0, 1, 0, 5, 107, 22), + (5, 0, 1, 0, 5, 107, 22), + (7, 0, 1, 0, 5, 37, 22), + (7, 0, 1, 0, 5, 4, 22), + (21, 0, 1, 0, 5, 4, 22), + (7, 0, 1, 0, 5, 75, 22), + (7, 0, 4, 0, 5, 29, 22), + (7, 0, 4, 0, 5, 7, 22), + (21, 0, 4, 0, 5, 7, 27), + (15, 0, 4, 0, 5, 7, 22), + (7, 0, 4, 0, 5, 110, 22), + (26, 0, 4, 0, 5, 110, 22), + (15, 0, 4, 0, 5, 110, 22), + (7, 0, 4, 0, 5, 99, 22), + (15, 0, 4, 0, 5, 99, 22), + (7, 0, 4, 0, 5, 52, 22), + (15, 0, 4, 0, 5, 52, 22), + (7, 0, 4, 0, 5, 116, 22), + (15, 0, 4, 0, 5, 116, 22), + (21, 0, 19, 0, 5, 116, 27), + (7, 0, 4, 0, 5, 79, 22), + (21, 0, 4, 0, 5, 79, 22), + (7, 0, 4, 0, 5, 88, 22), + (7, 0, 4, 0, 5, 87, 22), + (15, 0, 4, 0, 5, 87, 22), + (7, 0, 4, 0, 5, 64, 22), + (12, 0, 14, 0, 5, 64, 31), + (12, 220, 14, 0, 5, 64, 31), + (12, 230, 14, 0, 5, 64, 31), + (12, 1, 14, 0, 5, 64, 31), + (12, 9, 14, 0, 5, 64, 31), + (15, 0, 4, 0, 5, 64, 22), + (21, 0, 4, 0, 5, 64, 27), + (21, 0, 4, 0, 5, 64, 22), + (7, 0, 4, 0, 5, 123, 22), + (15, 0, 4, 0, 5, 123, 22), + (21, 0, 4, 0, 5, 123, 22), + (7, 0, 4, 0, 5, 98, 22), + (15, 0, 4, 0, 5, 98, 22), + (7, 0, 4, 0, 5, 83, 22), + (26, 0, 4, 0, 5, 83, 22), + (12, 230, 14, 0, 5, 83, 31), + (12, 220, 14, 0, 5, 83, 31), + (15, 0, 4, 0, 5, 83, 22), + (21, 0, 4, 0, 5, 83, 27), + (21, 0, 4, 0, 5, 83, 25), + (7, 0, 4, 0, 5, 9, 22), + (21, 0, 19, 0, 5, 9, 27), + (7, 0, 4, 0, 5, 118, 22), + (15, 0, 4, 0, 5, 118, 22), + (7, 0, 4, 0, 5, 114, 22), + (15, 0, 4, 0, 5, 114, 22), + (7, 0, 4, 0, 5, 115, 22), + (21, 0, 4, 0, 5, 115, 22), + (15, 0, 4, 0, 5, 115, 22), + (7, 0, 4, 0, 5, 105, 22), + (9, 0, 4, 0, 5, 58, 22), + (5, 0, 4, 0, 5, 58, 22), + (15, 0, 4, 0, 5, 58, 22), + (7, 0, 5, 0, 5, 120, 22), + (12, 230, 14, 0, 5, 120, 31), + (13, 0, 12, 0, 5, 120, 21), + (15, 0, 12, 0, 5, 6, 22), + (7, 0, 4, 0, 5, 161, 22), + (12, 230, 14, 0, 5, 161, 31), + (17, 0, 4, 0, 5, 161, 27), + (7, 0, 4, 0, 5, 132, 22), + (15, 0, 4, 0, 5, 132, 22), + (7, 0, 5, 0, 5, 131, 22), + (12, 220, 14, 0, 5, 131, 31), + (12, 230, 14, 0, 5, 131, 31), + (15, 0, 5, 0, 5, 131, 22), + (21, 0, 5, 0, 5, 131, 22), + (7, 0, 4, 0, 5, 26, 22), + (15, 0, 4, 0, 5, 26, 22), + (7, 0, 4, 0, 5, 38, 22), + (10, 0, 1, 0, 5, 17, 31), + (12, 0, 14, 0, 5, 17, 31), + (7, 0, 1, 0, 5, 17, 22), + (12, 9, 14, 0, 5, 17, 31), + (21, 0, 1, 0, 5, 17, 27), + (21, 0, 1, 0, 5, 17, 22), + (15, 0, 19, 0, 5, 17, 22), + (13, 0, 1, 0, 5, 17, 21), + (12, 0, 14, 0, 5, 69, 31), + (10, 0, 1, 0, 5, 69, 31), + (7, 0, 1, 0, 5, 69, 22), + (12, 9, 14, 0, 5, 69, 31), + (12, 7, 14, 0, 5, 69, 31), + (21, 0, 1, 0, 5, 69, 22), + (1, 0, 1, 0, 5, 69, 22), + (21, 0, 1, 0, 5, 69, 27), + (7, 0, 1, 0, 5, 133, 22), + (13, 0, 1, 0, 5, 133, 21), + (12, 230, 14, 0, 5, 21, 31), + (7, 0, 1, 0, 5, 21, 22), + (12, 0, 14, 0, 5, 21, 31), + (10, 0, 1, 0, 5, 21, 31), + (12, 9, 14, 0, 5, 21, 31), + (13, 0, 1, 0, 5, 21, 21), + (21, 0, 1, 0, 5, 21, 27), + (7, 0, 1, 0, 5, 80, 22), + (12, 7, 14, 0, 5, 80, 31), + (21, 0, 1, 0, 5, 80, 22), + (21, 0, 1, 0, 5, 80, 28), + (12, 0, 14, 0, 5, 127, 31), + (10, 0, 1, 0, 5, 127, 31), + (7, 0, 1, 0, 5, 127, 22), + (10, 9, 1, 0, 5, 127, 31), + (21, 0, 1, 0, 5, 127, 27), + (21, 0, 1, 0, 5, 127, 22), + (12, 7, 14, 0, 5, 127, 31), + (13, 0, 1, 0, 5, 127, 21), + (21, 0, 1, 0, 5, 127, 28), + (15, 0, 1, 0, 5, 130, 22), + (7, 0, 1, 0, 5, 66, 22), + (10, 0, 1, 0, 5, 66, 31), + (12, 0, 14, 0, 5, 66, 31), + (10, 9, 1, 0, 5, 66, 31), + (12, 7, 14, 0, 5, 66, 31), + (21, 0, 1, 0, 5, 66, 27), + (21, 0, 1, 0, 5, 66, 22), + (7, 0, 1, 0, 5, 94, 22), + (21, 0, 1, 0, 5, 94, 27), + (7, 0, 1, 0, 5, 129, 22), + (12, 0, 14, 0, 5, 129, 31), + (10, 0, 1, 0, 5, 129, 31), + (12, 7, 14, 0, 5, 129, 31), + (12, 9, 14, 0, 5, 129, 31), + (13, 0, 1, 0, 5, 129, 21), + (12, 0, 14, 0, 5, 45, 31), + (10, 0, 1, 0, 5, 45, 31), + (7, 0, 1, 0, 5, 45, 22), + (12, 7, 14, 0, 5, 1, 31), + (12, 7, 14, 0, 5, 45, 31), + (10, 9, 1, 0, 5, 45, 31), + (12, 230, 14, 0, 5, 45, 31), + (7, 0, 1, 0, 5, 100, 22), + (10, 0, 1, 0, 5, 100, 31), + (12, 0, 14, 0, 5, 100, 31), + (12, 9, 14, 0, 5, 100, 31), + (12, 7, 14, 0, 5, 100, 31), + (21, 0, 1, 0, 5, 100, 27), + (21, 0, 1, 0, 5, 100, 22), + (13, 0, 1, 0, 5, 100, 21), + (12, 230, 14, 0, 5, 100, 31), + (7, 0, 1, 0, 5, 151, 22), + (10, 0, 1, 0, 5, 151, 31), + (12, 0, 14, 0, 5, 151, 31), + (12, 9, 14, 0, 5, 151, 31), + (12, 7, 14, 0, 5, 151, 31), + (21, 0, 1, 0, 5, 151, 22), + (13, 0, 1, 0, 5, 151, 21), + (7, 0, 1, 0, 5, 128, 22), + (10, 0, 1, 0, 5, 128, 31), + (12, 0, 14, 0, 5, 128, 31), + (12, 9, 14, 0, 5, 128, 31), + (12, 7, 14, 0, 5, 128, 31), + (21, 0, 1, 0, 5, 128, 28), + (21, 0, 1, 0, 5, 128, 27), + (21, 0, 1, 0, 5, 128, 16), + (21, 0, 1, 0, 5, 128, 22), + (7, 0, 1, 0, 5, 90, 22), + (10, 0, 1, 0, 5, 90, 31), + (12, 0, 14, 0, 5, 90, 31), + (12, 9, 14, 0, 5, 90, 31), + (21, 0, 1, 0, 5, 90, 27), + (21, 0, 1, 0, 5, 90, 22), + (13, 0, 1, 0, 5, 90, 21), + (21, 0, 19, 0, 5, 91, 28), + (7, 0, 1, 0, 5, 139, 22), + (12, 0, 14, 0, 5, 139, 31), + (10, 0, 1, 0, 5, 139, 31), + (10, 9, 1, 0, 5, 139, 31), + (12, 7, 14, 0, 5, 139, 31), + (13, 0, 1, 0, 5, 139, 21), + (7, 0, 1, 0, 5, 5, 7), + (12, 0, 14, 0, 5, 5, 7), + (10, 0, 1, 0, 5, 5, 7), + (12, 9, 14, 0, 5, 5, 7), + (13, 0, 1, 0, 5, 5, 21), + (15, 0, 1, 0, 5, 5, 7), + (21, 0, 1, 0, 5, 5, 27), + (26, 0, 1, 0, 5, 5, 7), + (7, 0, 1, 0, 5, 33, 22), + (10, 0, 1, 0, 5, 33, 31), + (12, 0, 14, 0, 5, 33, 31), + (12, 9, 14, 0, 5, 33, 31), + (12, 7, 14, 0, 5, 33, 31), + (21, 0, 1, 0, 5, 33, 22), + (9, 0, 1, 0, 5, 157, 22), + (5, 0, 1, 0, 5, 157, 22), + (13, 0, 1, 0, 5, 157, 21), + (15, 0, 1, 0, 5, 157, 22), + (7, 0, 1, 0, 5, 157, 22), + (7, 0, 1, 0, 5, 32, 22), + (10, 0, 1, 0, 5, 32, 31), + (12, 0, 14, 0, 5, 32, 31), + (10, 9, 1, 0, 5, 32, 31), + (12, 9, 14, 0, 5, 32, 31), + (12, 7, 14, 0, 5, 32, 31), + (21, 0, 1, 0, 5, 32, 27), + (13, 0, 1, 0, 5, 32, 21), + (7, 0, 1, 0, 5, 97, 22), + (10, 0, 1, 0, 5, 97, 31), + (12, 0, 14, 0, 5, 97, 31), + (12, 9, 14, 0, 5, 97, 31), + (21, 0, 1, 0, 5, 97, 28), + (7, 0, 1, 0, 5, 163, 22), + (12, 0, 14, 0, 5, 163, 31), + (12, 0, 1, 0, 5, 163, 31), + (12, 9, 14, 0, 5, 163, 31), + (10, 0, 1, 0, 5, 163, 31), + (21, 0, 1, 0, 5, 163, 28), + (21, 0, 1, 0, 5, 163, 22), + (21, 0, 1, 0, 5, 163, 27), + (7, 0, 1, 0, 5, 134, 22), + (12, 0, 14, 0, 5, 134, 31), + (10, 0, 1, 0, 5, 134, 31), + (12, 9, 14, 0, 5, 134, 31), + (21, 0, 1, 0, 5, 134, 27), + (21, 0, 1, 0, 5, 134, 28), + (7, 0, 1, 0, 5, 111, 22), + (7, 0, 1, 0, 5, 15, 22), + (10, 0, 1, 0, 5, 15, 31), + (12, 0, 14, 0, 5, 15, 31), + (12, 9, 1, 0, 5, 15, 31), + (21, 0, 1, 0, 5, 15, 27), + (13, 0, 1, 0, 5, 15, 21), + (15, 0, 1, 0, 5, 15, 22), + (21, 0, 1, 0, 5, 84, 28), + (21, 0, 1, 0, 5, 84, 16), + (7, 0, 1, 0, 5, 84, 22), + (12, 0, 14, 0, 5, 84, 31), + (10, 0, 1, 0, 5, 84, 31), + (7, 0, 1, 0, 5, 43, 22), + (12, 0, 14, 0, 5, 43, 31), + (12, 7, 14, 0, 5, 43, 31), + (12, 9, 14, 0, 5, 43, 31), + (13, 0, 1, 0, 5, 43, 21), + (7, 0, 1, 0, 5, 42, 22), + (10, 0, 1, 0, 5, 42, 31), + (12, 0, 14, 0, 5, 42, 31), + (12, 9, 14, 0, 5, 42, 31), + (13, 0, 1, 0, 5, 42, 21), + (7, 0, 1, 0, 5, 81, 22), + (12, 0, 14, 0, 5, 81, 31), + (10, 0, 1, 0, 5, 81, 31), + (21, 0, 1, 0, 5, 81, 22), + (23, 0, 11, 0, 5, 142, 20), + (21, 0, 1, 0, 5, 142, 27), + (7, 0, 1, 0, 5, 160, 22), + (14, 0, 1, 0, 5, 160, 22), + (21, 0, 1, 0, 5, 160, 27), + (7, 0, 1, 0, 5, 36, 22), + (7, 0, 1, 0, 5, 36, 10), + (7, 0, 1, 0, 5, 36, 11), + (1, 0, 1, 0, 5, 36, 14), + (1, 0, 1, 0, 5, 36, 10), + (1, 0, 1, 0, 5, 36, 11), + (7, 0, 1, 0, 5, 55, 22), + (7, 0, 1, 0, 5, 55, 10), + (7, 0, 1, 0, 5, 55, 11), + (7, 0, 1, 0, 5, 92, 22), + (13, 0, 1, 0, 5, 92, 21), + (21, 0, 1, 0, 5, 92, 27), + (7, 0, 1, 0, 5, 12, 22), + (12, 1, 14, 0, 5, 12, 31), + (21, 0, 1, 0, 5, 12, 27), + (7, 0, 1, 0, 5, 56, 22), + (12, 230, 14, 0, 5, 56, 31), + (21, 0, 1, 0, 5, 56, 27), + (21, 0, 1, 0, 5, 56, 22), + (26, 0, 1, 0, 5, 56, 22), + (6, 0, 1, 0, 5, 56, 22), + (13, 0, 1, 0, 5, 56, 21), + (15, 0, 1, 0, 5, 56, 22), + (9, 0, 1, 0, 5, 85, 22), + (5, 0, 1, 0, 5, 85, 22), + (15, 0, 1, 0, 5, 85, 22), + (21, 0, 1, 0, 5, 85, 27), + (21, 0, 1, 0, 5, 85, 22), + (7, 0, 1, 0, 5, 117, 22), + (12, 0, 14, 0, 5, 117, 31), + (10, 0, 1, 0, 5, 117, 31), + (6, 0, 1, 0, 5, 117, 22), + (6, 0, 1, 0, 2, 143, 15), + (6, 0, 1, 0, 2, 102, 15), + (6, 0, 1, 0, 2, 0, 15), + (12, 0, 14, 0, 2, 67, 14), + (10, 6, 1, 0, 2, 50, 31), + (7, 0, 1, 0, 2, 143, 24), + (7, 0, 1, 0, 2, 67, 22), + (7, 0, 1, 0, 2, 102, 24), + (7, 0, 1, 0, 5, 35, 22), + (26, 0, 1, 0, 5, 35, 22), + (12, 0, 14, 0, 5, 35, 31), + (12, 1, 14, 0, 5, 35, 31), + (21, 0, 1, 0, 5, 35, 27), + (10, 216, 1, 0, 5, 0, 31), + (10, 226, 1, 0, 5, 0, 31), + (12, 230, 14, 0, 5, 46, 31), + (25, 0, 1, 0, 5, 0, 22), + (13, 0, 9, 0, 5, 0, 21), + (26, 0, 1, 0, 5, 125, 22), + (12, 0, 14, 0, 5, 125, 31), + (21, 0, 1, 0, 5, 125, 27), + (21, 0, 1, 0, 5, 125, 22), + (12, 230, 14, 0, 5, 41, 31), + (7, 0, 1, 0, 5, 57, 22), + (12, 230, 14, 0, 5, 57, 31), + (6, 0, 1, 0, 5, 57, 22), + (13, 0, 1, 0, 5, 57, 21), + (26, 0, 1, 0, 5, 57, 22), + (7, 0, 1, 0, 5, 158, 22), + (12, 230, 14, 0, 5, 158, 31), + (13, 0, 1, 0, 5, 158, 21), + (23, 0, 11, 0, 5, 158, 19), + (7, 0, 4, 0, 5, 86, 22), + (15, 0, 4, 0, 5, 86, 22), + (12, 220, 14, 0, 5, 86, 31), + (9, 0, 4, 0, 5, 3, 22), + (5, 0, 4, 0, 5, 3, 22), + (12, 230, 14, 0, 5, 3, 31), + (12, 7, 14, 0, 5, 3, 31), + (6, 0, 4, 0, 5, 3, 22), + (13, 0, 4, 0, 5, 3, 21), + (21, 0, 4, 0, 5, 3, 10), + (15, 0, 5, 0, 5, 0, 22), + (26, 0, 5, 0, 5, 0, 20), + (23, 0, 5, 0, 5, 0, 20), + (26, 0, 5, 0, 5, 0, 22), + (26, 0, 1, 0, 2, 0, 1), + (26, 0, 1, 0, 5, 0, 38), + (26, 0, 1, 0, 2, 54, 24), + (24, 0, 19, 0, 2, 0, 40), + (26, 0, 19, 0, 5, 0, 15), +]; + +// index tables for the database records +def UCD_RECORD_SHIFT: size = 7; +const index1: [_]u16 = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 41, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 103, 104, 105, 105, 105, 105, 105, 105, 105, 105, 106, 107, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 120, 121, 122, 123, 124, 125, 126, 120, 121, 122, + 123, 124, 125, 126, 120, 121, 122, 123, 124, 125, 126, 120, 121, 122, + 123, 124, 125, 126, 120, 121, 122, 123, 124, 125, 126, 120, 121, 122, + 123, 124, 125, 126, 120, 121, 122, 123, 124, 125, 126, 120, 121, 122, + 123, 124, 125, 126, 120, 121, 122, 123, 124, 125, 126, 120, 121, 122, + 123, 124, 125, 126, 120, 121, 122, 123, 124, 125, 126, 120, 121, 122, + 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 101, 101, 130, + 131, 132, 133, 134, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 145, 152, 152, 153, 145, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 145, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 145, 176, 177, 145, 178, 179, + 180, 181, 145, 182, 183, 184, 185, 186, 187, 145, 145, 188, 189, 190, + 191, 145, 192, 145, 193, 194, 194, 194, 194, 194, 194, 194, 195, 196, + 194, 197, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 198, 198, 198, 198, 199, + 200, 201, 198, 202, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 203, 203, 203, 204, 205, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 206, 206, 206, 206, 207, + 208, 209, 210, 145, 145, 145, 145, 211, 212, 213, 214, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 216, 215, 215, 215, 215, 215, 215, 217, 217, 217, 218, 219, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 220, + 221, 222, 223, 223, 224, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 225, 226, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 227, 228, 229, 230, 231, 232, 233, + 145, 234, 235, 236, 237, 238, 239, 240, 241, 242, 242, 242, 242, 243, + 244, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 245, 145, 246, + 145, 145, 247, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 248, + 249, 250, 145, 145, 145, 145, 145, 251, 252, 253, 145, 254, 255, 145, + 145, 256, 257, 258, 259, 260, 145, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 145, 145, 145, + 145, 145, 145, 145, 145, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 279, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 280, 101, 281, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 282, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 283, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 101, 101, 101, + 101, 284, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 285, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 286, 145, 287, 288, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 289, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 289, +]; + +const index2: [_]u16 = [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 7, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 11, 16, 17, 15, 18, + 19, 20, 19, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 19, 23, 24, 25, + 24, 10, 15, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 16, 27, 17, 28, 29, 28, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 16, 31, 32, 25, 1, 1, 1, 1, 1, 1, 33, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 34, 35, 36, 13, 37, 13, 38, 39, 40, 41, 42, 43, 25, 44, 45, 28, 46, 47, + 48, 48, 49, 50, 39, 39, 40, 48, 42, 51, 52, 52, 52, 35, 53, 53, 53, 53, + 53, 53, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 53, 53, 53, 53, 53, + 53, 55, 54, 53, 53, 53, 53, 53, 54, 56, 56, 56, 57, 57, 57, 57, 56, 57, + 56, 56, 56, 57, 56, 56, 57, 57, 56, 57, 56, 56, 57, 57, 57, 55, 56, 56, + 56, 57, 56, 57, 56, 57, 53, 56, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 56, 53, 56, 53, 57, 53, 57, 53, 57, 53, 56, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 54, 56, 53, 57, 53, 56, 53, 57, 53, 57, + 53, 56, 54, 56, 53, 57, 53, 57, 56, 53, 57, 53, 57, 53, 57, 54, 56, 54, + 56, 53, 56, 53, 57, 53, 56, 56, 54, 56, 53, 56, 53, 57, 53, 57, 54, 56, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 54, 56, 53, 57, 53, 56, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 53, 57, 53, 57, 53, 57, 57, 57, 53, 53, 57, 53, 57, 53, 53, 57, 53, + 53, 53, 57, 57, 53, 53, 53, 53, 57, 53, 53, 57, 53, 53, 53, 57, 57, 57, + 53, 53, 57, 53, 53, 57, 53, 57, 53, 57, 53, 53, 57, 53, 57, 57, 53, 57, + 53, 53, 57, 53, 53, 53, 57, 53, 57, 53, 53, 57, 57, 58, 53, 57, 57, 57, + 58, 58, 58, 58, 53, 59, 57, 53, 59, 57, 53, 59, 57, 53, 56, 53, 56, 53, + 56, 53, 56, 53, 56, 53, 56, 53, 56, 53, 56, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 57, 53, 59, 57, 53, 57, + 53, 53, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 57, 57, 57, 57, 57, 57, 53, 53, 57, 53, + 53, 57, 57, 53, 57, 53, 53, 53, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 57, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 56, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 62, + 62, 62, 62, 62, 62, 62, 63, 63, 64, 63, 61, 65, 66, 65, 65, 65, 66, 65, + 61, 61, 67, 62, 63, 63, 63, 63, 63, 63, 40, 40, 40, 40, 63, 40, 63, 49, + 60, 60, 60, 60, 60, 63, 63, 63, 63, 63, 68, 68, 61, 63, 62, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, + 71, 71, 71, 71, 70, 72, 71, 71, 71, 71, 71, 73, 73, 71, 71, 71, 71, 73, + 73, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 74, 74, 74, 74, 74, 71, + 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 75, 69, 71, 71, 71, 69, 69, + 69, 71, 71, 76, 69, 69, 69, 71, 71, 71, 71, 69, 70, 71, 71, 69, 77, 78, + 78, 77, 78, 78, 77, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 79, 80, 79, 80, 61, 81, 79, 80, 0, 0, 82, 80, 80, 80, 83, 79, 0, 0, 0, 0, + 81, 63, 79, 84, 79, 79, 79, 0, 79, 0, 79, 79, 80, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 85, 85, 85, 85, 85, 85, + 85, 79, 79, 80, 80, 80, 80, 80, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 80, 86, 86, 86, 86, 86, 86, 86, 80, 80, 80, + 80, 80, 79, 80, 80, 79, 79, 79, 80, 80, 80, 79, 80, 79, 80, 79, 80, 79, + 80, 79, 80, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 80, + 80, 80, 80, 79, 80, 89, 79, 80, 79, 79, 80, 80, 79, 79, 79, 90, 91, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 93, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 94, 95, 95, 96, 96, 95, 97, 97, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 90, 93, 90, 93, 90, 93, 90, 93, + 90, 93, 90, 93, 90, 93, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 0, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 0, 0, 99, + 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 102, 103, 0, 0, 104, 104, 105, 0, 106, 107, 107, + 107, 107, 106, 107, 107, 107, 108, 106, 107, 107, 107, 107, 107, 107, + 106, 106, 106, 106, 106, 106, 107, 107, 106, 107, 107, 108, 109, 107, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 125, 107, 106, 128, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 0, 0, 0, + 0, 129, 129, 129, 129, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, + 130, 130, 130, 130, 131, 132, 132, 133, 134, 134, 135, 136, 137, 138, + 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, 141, 142, 143, 144, 0, + 145, 143, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 147, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 148, 149, 150, 151, 152, 153, 154, 155, 96, 96, 156, 157, + 139, 139, 139, 139, 139, 157, 139, 139, 157, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 134, 159, 159, 160, 146, 146, 161, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, + 146, 139, 139, 139, 139, 139, 139, 139, 131, 138, 139, 139, 139, 139, + 157, 139, 162, 162, 139, 139, 138, 157, 139, 139, 157, 146, 146, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 146, 146, 146, 164, 164, + 146, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 0, 166, 167, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 169, 170, 169, 169, 170, 169, 169, 170, + 170, 170, 169, 170, 170, 169, 170, 169, 169, 169, 170, 169, 170, 169, + 170, 169, 170, 169, 169, 0, 0, 167, 167, 167, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 176, 175, 177, + 177, 178, 179, 180, 181, 177, 0, 0, 176, 182, 182, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 184, 184, 184, 184, 185, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 185, 184, 184, 184, 185, 184, 184, 184, 184, 184, 0, + 0, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, + 186, 0, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, + 188, 0, 0, 189, 0, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 131, 157, 139, 139, 157, 139, 139, + 157, 139, 139, 139, 157, 157, 157, 190, 191, 192, 139, 139, 139, 157, + 139, 139, 157, 157, 139, 139, 139, 139, 139, 193, 193, 193, 194, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 193, 194, 196, + 195, 194, 194, 194, 193, 193, 193, 193, 193, 193, 193, 193, 194, 194, + 194, 194, 197, 194, 194, 195, 96, 156, 96, 96, 193, 193, 193, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 193, 193, 198, 198, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 200, 201, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 202, 203, 204, 204, 0, + 202, 202, 202, 202, 202, 202, 202, 202, 0, 0, 202, 202, 0, 0, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 0, 202, 202, 202, 202, 202, 202, 202, 0, + 202, 0, 0, 0, 202, 202, 202, 202, 0, 0, 205, 202, 204, 204, 204, 203, + 203, 203, 203, 0, 0, 204, 204, 0, 0, 204, 204, 206, 202, 0, 0, 0, 0, 0, + 0, 0, 0, 204, 0, 0, 0, 0, 202, 202, 0, 202, 202, 202, 203, 203, 0, 0, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 202, 202, 208, 208, + 209, 209, 209, 209, 209, 210, 211, 212, 202, 213, 214, 0, 0, 215, 215, + 216, 0, 217, 217, 217, 217, 217, 217, 0, 0, 0, 0, 217, 217, 0, 0, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 0, 217, 217, 217, 217, 217, 217, 217, + 0, 217, 217, 0, 217, 217, 0, 217, 217, 0, 0, 218, 0, 216, 216, 216, 215, + 215, 0, 0, 0, 0, 215, 215, 0, 0, 215, 215, 219, 0, 0, 0, 215, 0, 0, 0, 0, + 0, 0, 0, 217, 217, 217, 217, 0, 217, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 215, 215, 217, 217, 217, 215, 221, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 223, 0, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 0, 224, 224, 224, 224, 224, 224, 224, 0, 224, 224, 0, 224, 224, + 224, 224, 224, 0, 0, 225, 224, 223, 223, 223, 222, 222, 222, 222, 222, 0, + 222, 222, 223, 0, 223, 223, 226, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 224, 222, 222, 0, 0, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, 224, 222, 222, 222, + 222, 222, 222, 0, 230, 231, 231, 0, 232, 232, 232, 232, 232, 232, 232, + 232, 0, 0, 232, 232, 0, 0, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 0, 232, + 232, 232, 232, 232, 232, 232, 0, 232, 232, 0, 232, 232, 232, 232, 232, 0, + 0, 233, 232, 231, 230, 231, 230, 230, 230, 230, 0, 0, 231, 231, 0, 0, + 231, 231, 234, 0, 0, 0, 0, 0, 0, 0, 230, 230, 231, 0, 0, 0, 0, 232, 232, + 0, 232, 232, 232, 230, 230, 0, 0, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 236, 232, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 238, 239, 0, 239, 239, 239, 239, 239, 239, 0, 0, 0, 239, 239, 239, + 0, 239, 239, 239, 239, 0, 0, 0, 239, 239, 0, 239, 0, 239, 239, 0, 0, 0, + 239, 239, 0, 0, 0, 239, 239, 239, 0, 0, 0, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 0, 0, 0, 0, 240, 240, 238, 240, 240, 0, 0, + 0, 240, 240, 240, 0, 240, 240, 240, 241, 0, 0, 239, 0, 0, 0, 0, 0, 0, + 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 243, 243, 243, 244, 244, 244, 244, 244, 244, + 245, 244, 0, 0, 0, 0, 0, 246, 247, 247, 247, 246, 248, 248, 248, 248, + 248, 248, 248, 248, 0, 248, 248, 248, 0, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 0, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 0, 0, 0, 248, 246, 246, 246, 247, 247, 247, 247, + 0, 246, 246, 246, 0, 246, 246, 246, 249, 0, 0, 0, 0, 0, 0, 0, 250, 251, + 0, 248, 248, 248, 0, 0, 0, 0, 0, 248, 248, 246, 246, 0, 0, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 0, 0, 0, 0, 0, 0, 0, 253, 254, 254, + 254, 254, 254, 254, 254, 255, 256, 257, 258, 258, 259, 256, 256, 256, + 256, 256, 256, 256, 256, 0, 256, 256, 256, 0, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 0, 256, 256, 256, 256, 256, 0, 0, 260, 256, 258, 261, 258, 258, 258, 258, + 258, 0, 261, 258, 258, 0, 258, 258, 257, 262, 0, 0, 0, 0, 0, 0, 0, 258, + 258, 0, 0, 0, 0, 0, 0, 0, 256, 0, 256, 256, 257, 257, 0, 0, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 0, 256, 256, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 264, 264, 265, 265, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 0, 266, 266, 266, 0, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 267, 267, 266, 265, 265, 265, 264, 264, 264, + 264, 0, 265, 265, 265, 0, 265, 265, 265, 267, 266, 268, 0, 0, 0, 0, 266, + 266, 266, 265, 269, 269, 269, 269, 269, 269, 269, 266, 266, 266, 264, + 264, 0, 0, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 271, 266, 266, 266, 266, 266, 266, 0, + 272, 273, 273, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 0, 274, 274, 274, 274, 274, 274, 274, 274, 274, 0, + 274, 0, 0, 274, 274, 274, 274, 274, 274, 274, 0, 0, 0, 275, 0, 0, 0, 0, + 273, 273, 273, 272, 272, 272, 0, 272, 0, 273, 273, 273, 273, 273, 273, + 273, 273, 0, 0, 0, 0, 0, 0, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 0, 0, 273, 273, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 279, 278, 278, 279, 279, 279, 279, 280, 280, 281, 0, + 0, 0, 0, 282, 278, 278, 278, 278, 278, 278, 283, 279, 284, 284, 284, 284, + 279, 279, 279, 285, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 287, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 288, 0, 288, 0, 288, + 288, 288, 288, 288, 0, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 0, + 288, 0, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 289, 288, 288, + 289, 289, 289, 289, 290, 290, 291, 289, 289, 288, 0, 0, 288, 288, 288, + 288, 288, 0, 292, 0, 293, 293, 293, 293, 289, 289, 0, 0, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 0, 0, 288, 288, 288, 288, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 295, 296, 296, 296, 297, 298, 297, 297, 299, 297, 297, 300, + 299, 301, 301, 301, 301, 301, 299, 302, 301, 302, 302, 302, 303, 303, + 302, 302, 302, 302, 302, 302, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 303, + 302, 303, 302, 307, 308, 309, 308, 309, 310, 310, 295, 295, 295, 295, + 295, 295, 295, 295, 0, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 0, 0, 0, 0, + 311, 312, 313, 314, 313, 313, 313, 313, 313, 312, 312, 312, 312, 313, + 315, 312, 313, 316, 316, 317, 300, 316, 316, 295, 295, 295, 295, 295, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 0, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 0, 306, 306, 302, 302, 302, 302, 302, 302, 303, + 302, 302, 302, 302, 302, 302, 0, 302, 302, 297, 297, 300, 297, 298, 318, + 318, 318, 318, 299, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 319, + 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, + 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, + 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 320, + 320, 321, 321, 321, 321, 320, 321, 321, 321, 321, 321, 322, 320, 323, + 323, 320, 320, 321, 321, 319, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 325, 325, 326, 326, 326, 326, 319, 319, 319, 319, 319, 319, + 320, 320, 321, 321, 319, 319, 319, 319, 321, 321, 321, 319, 320, 320, + 320, 319, 319, 320, 320, 320, 320, 320, 320, 320, 319, 319, 319, 321, + 321, 321, 321, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, + 319, 319, 321, 320, 320, 321, 321, 320, 320, 320, 320, 320, 320, 327, + 319, 320, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 320, 320, + 320, 321, 328, 328, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 0, + 329, 0, 0, 0, 0, 0, 329, 0, 0, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 331, 332, 330, 330, 330, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 0, 336, 336, 336, 336, 0, 0, 336, 336, 336, 336, + 336, 336, 336, 0, 336, 0, 336, 336, 336, 336, 0, 0, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 0, 336, 336, 336, 336, 0, 0, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 0, 336, 336, 336, 336, 0, 0, 336, 336, 336, 336, + 336, 336, 336, 0, 336, 0, 336, 336, 336, 336, 0, 0, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 0, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 0, 336, 336, + 336, 336, 0, 0, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 0, + 0, 337, 337, 337, 338, 339, 338, 338, 338, 338, 338, 338, 338, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 0, 0, 0, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 0, 0, 0, 0, 0, 0, 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, 0, 0, 343, 343, 343, 343, 343, + 343, 0, 0, 344, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 346, 347, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 348, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 349, 349, 349, 350, 351, 0, 0, 0, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 198, 198, 198, 353, 353, 353, 352, 352, 352, 352, 352, 352, 352, + 352, 0, 0, 0, 0, 0, 0, 0, 354, 354, 354, 354, 354, 354, 354, 354, 354, + 354, 354, 354, 354, 0, 354, 354, 354, 354, 355, 355, 356, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 358, 358, 359, 198, 198, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, + 360, 360, 360, 360, 360, 360, 360, 361, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 0, 362, 362, 362, 0, 363, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 365, 365, 366, 365, 365, + 365, 365, 365, 365, 365, 366, 366, 366, 366, 366, 366, 366, 366, 365, + 366, 366, 365, 365, 365, 365, 365, 365, 365, 365, 365, 367, 365, 368, + 368, 369, 370, 368, 371, 368, 372, 364, 373, 0, 0, 374, 374, 374, 374, + 374, 374, 374, 374, 374, 374, 0, 0, 0, 0, 0, 0, 375, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 0, 0, 0, 0, 0, 0, 376, 376, 377, 377, 378, 379, + 380, 376, 381, 381, 376, 382, 382, 382, 383, 0, 384, 384, 384, 384, 384, + 384, 384, 384, 384, 384, 0, 0, 0, 0, 0, 0, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 386, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 0, 0, 0, + 0, 0, 0, 0, 385, 385, 385, 385, 385, 382, 382, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 387, 385, 0, 0, 0, 0, 0, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, + 388, 0, 389, 389, 389, 390, 390, 390, 390, 389, 389, 390, 390, 390, 0, 0, + 0, 0, 390, 390, 389, 390, 390, 390, 390, 390, 390, 391, 392, 393, 0, 0, + 0, 0, 394, 0, 0, 0, 395, 395, 396, 396, 396, 396, 396, 396, 396, 396, + 396, 396, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, + 397, 397, 397, 397, 0, 0, 397, 397, 397, 397, 397, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, + 398, 398, 398, 398, 0, 0, 0, 0, 398, 398, 398, 398, 398, 398, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, + 398, 398, 398, 398, 0, 0, 0, 0, 0, 0, 399, 399, 399, 399, 399, 399, 399, + 399, 399, 399, 400, 0, 0, 0, 401, 401, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 404, 405, 406, 406, 407, 0, 0, 408, 408, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 410, 411, 410, + 411, 411, 411, 411, 411, 411, 411, 0, 412, 410, 411, 410, 410, 411, 411, + 411, 411, 411, 411, 411, 411, 410, 410, 410, 410, 410, 410, 411, 411, + 413, 413, 413, 413, 413, 413, 413, 413, 0, 0, 414, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 0, 0, 0, 0, 0, 0, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 0, 0, 0, 0, 0, 0, 416, 416, 416, 416, 416, 416, + 416, 417, 416, 416, 416, 416, 416, 416, 0, 0, 96, 96, 96, 96, 96, 156, + 156, 156, 156, 156, 156, 96, 96, 156, 418, 156, 156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 419, 419, 419, 419, 420, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 422, 420, 419, 419, 419, 419, 419, 420, 419, 420, 420, 420, 420, 420, + 419, 420, 423, 421, 421, 421, 421, 421, 421, 421, 0, 0, 0, 0, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, 425, 425, 426, 425, 425, 425, + 425, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 428, 429, 428, + 428, 428, 428, 428, 428, 428, 427, 427, 427, 427, 427, 427, 427, 427, + 427, 0, 0, 0, 430, 430, 431, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 431, 430, 430, 430, 430, 431, 431, + 430, 430, 433, 434, 430, 430, 432, 432, 435, 435, 435, 435, 435, 435, + 435, 435, 435, 435, 432, 432, 432, 432, 432, 432, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 436, 437, 438, 439, 439, 438, 438, 438, 439, + 438, 439, 439, 439, 440, 440, 0, 0, 0, 0, 0, 0, 0, 0, 441, 441, 441, 441, + 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, 443, 443, 443, 443, 443, 443, + 443, 443, 444, 444, 444, 444, 444, 444, 444, 444, 443, 443, 444, 445, 0, + 0, 0, 446, 446, 446, 446, 446, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 0, 0, 0, 442, 442, 442, 448, 448, 448, 448, 448, 448, 448, 448, + 448, 448, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 450, 450, 450, 450, 450, 450, 451, 451, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, 0, 0, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 0, 0, 329, 329, 329, + 452, 452, 452, 452, 452, 452, 452, 452, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, + 96, 331, 453, 156, 156, 156, 156, 156, 96, 96, 156, 156, 156, 156, 96, + 454, 453, 453, 453, 453, 453, 453, 453, 455, 455, 455, 455, 156, 455, + 455, 455, 455, 455, 455, 96, 455, 455, 454, 96, 96, 455, 0, 0, 0, 0, 0, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 80, 80, 80, 80, 80, 93, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 82, 82, 82, 82, 82, 60, 60, 60, 60, 82, 82, 82, 82, 82, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 456, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 82, 96, 96, 156, 96, 96, 96, + 96, 96, 96, 96, 156, 96, 96, 457, 458, 156, 459, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 460, 461, 461, 156, + 0, 96, 462, 156, 96, 156, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 80, 80, 80, 80, 80, 80, 80, 80, + 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 0, 0, 79, 79, 79, + 79, 79, 79, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, + 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, + 80, 80, 80, 80, 80, 80, 0, 0, 79, 79, 79, 79, 79, 79, 0, 0, 80, 80, 80, + 80, 80, 80, 80, 80, 0, 79, 0, 79, 0, 79, 0, 79, 80, 80, 80, 80, 80, 80, + 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 463, 463, + 463, 463, 463, 463, 463, 463, 80, 80, 80, 80, 80, 80, 80, 80, 463, 463, + 463, 463, 463, 463, 463, 463, 80, 80, 80, 80, 80, 80, 80, 80, 463, 463, + 463, 463, 463, 463, 463, 463, 80, 80, 80, 80, 80, 0, 80, 80, 79, 79, 79, + 79, 463, 81, 80, 81, 81, 81, 80, 80, 80, 0, 80, 80, 79, 79, 79, 79, 463, + 81, 81, 81, 80, 80, 80, 80, 0, 0, 80, 80, 79, 79, 79, 79, 0, 81, 81, 81, + 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 81, 81, 81, 0, 0, 80, + 80, 80, 0, 80, 80, 79, 79, 79, 79, 463, 464, 81, 0, 465, 465, 465, 465, + 465, 465, 465, 466, 465, 465, 465, 467, 468, 469, 470, 471, 472, 473, + 474, 472, 475, 476, 39, 84, 477, 478, 479, 480, 477, 478, 479, 480, 39, + 39, 481, 84, 482, 482, 482, 483, 484, 485, 486, 487, 488, 489, 490, 34, + 491, 492, 491, 491, 492, 493, 494, 494, 84, 43, 51, 39, 495, 495, 481, + 496, 496, 84, 84, 84, 497, 498, 499, 495, 495, 495, 84, 84, 84, 84, 84, + 84, 84, 84, 500, 84, 496, 84, 379, 84, 379, 379, 379, 379, 84, 379, 379, + 465, 501, 502, 502, 502, 502, 0, 503, 504, 505, 506, 507, 507, 507, 507, + 507, 507, 508, 60, 0, 0, 48, 508, 508, 508, 508, 508, 509, 509, 500, 498, + 499, 510, 508, 48, 48, 48, 48, 508, 508, 508, 508, 508, 509, 509, 500, + 498, 499, 0, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 0, 0, 0, + 282, 282, 282, 282, 282, 282, 282, 511, 282, 512, 282, 282, 37, 282, 282, + 282, 282, 282, 282, 282, 282, 282, 511, 282, 282, 282, 282, 511, 282, + 282, 511, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, + 453, 453, 96, 96, 96, 96, 453, 453, 453, 96, 96, 418, 418, 418, 418, 96, + 418, 418, 418, 453, 453, 96, 156, 96, 453, 453, 156, 156, 156, 156, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 513, 514, 41, 515, + 41, 513, 41, 514, 50, 513, 513, 513, 50, 50, 513, 513, 513, 516, 41, 513, + 517, 41, 500, 513, 513, 513, 513, 513, 41, 41, 41, 515, 515, 41, 513, 41, + 85, 41, 513, 41, 53, 518, 513, 513, 519, 50, 513, 513, 53, 513, 50, 455, + 455, 455, 455, 50, 41, 41, 50, 50, 513, 513, 520, 500, 500, 500, 500, + 513, 50, 50, 50, 50, 41, 500, 41, 41, 57, 318, 521, 521, 521, 522, 52, + 523, 521, 521, 521, 521, 521, 52, 522, 522, 52, 521, 524, 524, 524, 524, + 524, 524, 524, 524, 524, 524, 524, 524, 525, 525, 525, 525, 524, 524, + 524, 524, 524, 524, 524, 524, 524, 524, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 53, 57, 525, 525, 525, 525, 52, 41, 41, 0, 0, 0, 0, 55, + 55, 55, 55, 55, 515, 515, 515, 515, 515, 500, 500, 41, 41, 41, 41, 500, + 41, 41, 500, 41, 41, 500, 41, 41, 41, 41, 41, 41, 41, 500, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 45, 45, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 500, 500, 41, 41, 55, 41, 55, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 45, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 55, 520, 526, 526, 520, 500, 500, 55, + 526, 520, 520, 526, 520, 520, 500, 55, 500, 526, 527, 528, 500, 526, 520, + 500, 500, 500, 526, 520, 520, 526, 55, 526, 526, 520, 520, 55, 520, 55, + 520, 55, 55, 55, 55, 526, 526, 520, 526, 520, 520, 520, 520, 520, 55, 55, + 55, 55, 500, 520, 500, 520, 526, 526, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 526, 520, 520, 520, 526, 500, 500, 500, 500, 500, 526, + 520, 520, 520, 500, 500, 500, 500, 500, 500, 500, 500, 500, 520, 526, 55, + 520, 500, 526, 526, 526, 526, 520, 520, 526, 526, 500, 500, 526, 526, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 526, 526, 520, 520, 526, 526, 520, 520, 520, 520, + 520, 500, 500, 520, 520, 520, 520, 500, 500, 55, 500, 500, 520, 55, 500, + 500, 500, 500, 500, 500, 500, 500, 520, 520, 500, 55, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 500, 500, 500, 500, 500, 520, 526, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 520, 520, 520, 520, 520, 500, 500, 520, 520, 500, 500, + 500, 500, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 500, 529, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 41, 41, 41, 41, 41, 41, 41, 41, 498, 499, 498, 499, 41, 41, 41, + 41, 41, 41, 515, 41, 41, 41, 41, 41, 41, 41, 530, 530, 41, 41, 41, 41, + 520, 520, 41, 41, 41, 41, 41, 41, 41, 531, 532, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 41, 500, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 318, 41, 41, 41, 41, 41, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 500, 500, 500, 500, 500, 500, 41, 41, 41, 41, 41, 41, 41, 533, 533, 533, + 533, 41, 41, 41, 530, 534, 534, 530, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 523, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 522, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 41, 41, 41, 41, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, + 515, 515, 536, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 41, 41, + 515, 515, 515, 515, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 515, 515, 41, + 515, 515, 515, 515, 515, 515, 515, 41, 41, 41, 41, 41, 41, 41, 41, 515, + 515, 41, 41, 515, 55, 41, 41, 41, 41, 515, 515, 41, 41, 515, 55, 41, 41, + 41, 41, 515, 515, 515, 41, 41, 515, 41, 41, 515, 515, 515, 515, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 515, 515, 515, + 515, 41, 41, 41, 41, 41, 41, 41, 41, 41, 515, 41, 41, 41, 41, 41, 41, 41, + 41, 500, 500, 500, 500, 500, 537, 537, 500, 534, 534, 534, 534, 41, 515, + 515, 41, 41, 515, 41, 41, 41, 41, 515, 515, 41, 41, 41, 41, 530, 530, + 536, 536, 534, 41, 534, 534, 538, 539, 538, 534, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 534, 534, 534, 41, 41, 41, 41, 515, 41, 515, 41, 41, 41, 41, 41, 533, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 515, 515, 41, 515, 515, 515, 41, 515, + 538, 515, 515, 41, 515, 515, 41, 55, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 530, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 533, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 515, 515, 41, 533, 41, 41, 41, 41, 41, 41, 41, 41, 533, 533, 318, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 530, 530, + 538, 534, 534, 534, 534, 530, 530, 538, 538, 538, 515, 515, 515, 515, + 538, 533, 538, 538, 538, 515, 538, 530, 515, 515, 515, 538, 538, 515, + 515, 538, 515, 515, 538, 538, 538, 41, 515, 41, 41, 41, 41, 515, 515, + 530, 515, 515, 515, 515, 515, 515, 538, 530, 530, 538, 530, 515, 538, + 538, 540, 530, 515, 515, 530, 538, 538, 534, 534, 534, 534, 534, 533, 41, + 41, 534, 534, 541, 541, 539, 539, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 533, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 45, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 533, 41, + 533, 41, 41, 41, 41, 533, 533, 533, 41, 542, 41, 41, 41, 543, 543, 543, + 543, 543, 543, 41, 544, 544, 534, 41, 41, 41, 498, 499, 498, 499, 498, + 499, 498, 499, 498, 499, 498, 499, 498, 499, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 41, 533, 533, 533, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 533, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 533, 520, 500, 500, 520, 520, 498, 499, 500, 520, 520, 500, 520, 520, + 520, 500, 500, 500, 500, 500, 520, 520, 520, 520, 500, 500, 500, 500, + 500, 520, 520, 520, 500, 500, 500, 520, 520, 520, 520, 16, 32, 16, 32, + 16, 32, 16, 32, 498, 499, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 498, 499, 16, 32, 498, 499, 498, 499, 498, 499, 498, 499, 498, 499, 498, + 499, 498, 499, 498, 499, 498, 499, 500, 500, 520, 520, 520, 520, 520, + 520, 500, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 500, 500, 500, 500, 500, 500, 500, 500, 520, 500, 500, 500, + 500, 500, 500, 500, 520, 520, 520, 520, 520, 520, 500, 500, 500, 520, + 500, 500, 500, 500, 520, 520, 520, 520, 520, 500, 520, 520, 500, 500, + 498, 499, 498, 499, 520, 500, 500, 500, 500, 520, 500, 520, 520, 520, + 500, 500, 520, 520, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 520, 520, 520, 520, 520, 520, 500, 500, 498, 499, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 500, + 520, 520, 520, 520, 500, 500, 520, 500, 520, 500, 500, 520, 500, 520, + 520, 520, 520, 500, 500, 500, 500, 500, 520, 520, 500, 500, 500, 500, + 500, 500, 520, 520, 520, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 520, 520, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 520, 520, 500, 500, 500, 500, 520, 520, 520, 520, 500, 520, 520, 500, + 500, 520, 520, 500, 500, 500, 500, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 500, 500, 520, 520, 520, 520, + 520, 520, 520, 520, 500, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 500, 500, 500, 500, 500, 520, 500, 520, 500, 500, 500, + 520, 520, 520, 520, 520, 500, 500, 500, 500, 500, 520, 520, 520, 500, + 500, 500, 500, 520, 500, 500, 500, 520, 520, 520, 520, 520, 500, 520, + 500, 500, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 533, 533, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 41, 41, 500, 500, 500, 500, 500, 500, 41, 41, 41, + 533, 41, 41, 41, 41, 542, 515, 515, 515, 515, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 546, 41, 547, 547, 547, + 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, + 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, + 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, + 547, 547, 0, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 0, 53, 57, 53, 53, 53, 57, 57, 53, 57, + 53, 57, 53, 57, 53, 53, 53, 53, 57, 53, 57, 57, 53, 57, 57, 57, 57, 57, + 57, 60, 60, 53, 53, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, + 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, + 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, + 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, + 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, + 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 87, 88, 88, 549, 549, + 549, 549, 549, 549, 87, 88, 87, 88, 550, 550, 550, 87, 88, 0, 0, 0, 0, 0, + 551, 552, 552, 552, 553, 551, 552, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 0, 330, 0, 0, 0, 0, 0, 330, 0, 0, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 0, 0, 0, 0, 0, 0, 0, 555, + 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 336, 336, 336, + 336, 336, 336, 0, 336, 336, 336, 336, 336, 336, 336, 0, 336, 336, 336, + 336, 336, 336, 336, 0, 336, 336, 336, 336, 336, 336, 336, 0, 336, 336, + 336, 336, 336, 336, 336, 0, 336, 336, 336, 336, 336, 336, 336, 0, 336, + 336, 336, 336, 336, 336, 336, 0, 336, 336, 336, 336, 336, 336, 336, 0, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 558, 558, 43, 51, + 43, 51, 558, 558, 558, 43, 51, 558, 43, 51, 379, 379, 379, 379, 379, 379, + 379, 379, 84, 474, 559, 379, 560, 84, 43, 51, 84, 84, 43, 51, 498, 499, + 498, 499, 498, 499, 498, 499, 379, 379, 379, 379, 377, 61, 379, 379, 84, + 379, 379, 84, 84, 84, 84, 84, 561, 561, 379, 379, 379, 84, 474, 379, 479, + 379, 379, 379, 379, 379, 379, 379, 379, 84, 379, 84, 379, 379, 41, 41, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 0, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, + 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 0, 0, 0, 0, 563, + 564, 564, 565, 530, 566, 567, 568, 531, 532, 531, 532, 531, 532, 531, + 532, 531, 532, 530, 530, 531, 532, 531, 532, 531, 532, 531, 532, 569, + 570, 571, 571, 530, 568, 568, 568, 568, 568, 568, 568, 568, 568, 572, + 573, 574, 575, 576, 576, 577, 578, 578, 578, 578, 579, 530, 530, 568, + 568, 568, 566, 580, 565, 530, 534, 0, 581, 582, 581, 582, 581, 582, 581, + 582, 581, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 581, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 581, 582, 581, 582, 581, 582, 582, 582, 582, 582, 582, + 581, 582, 582, 582, 582, 582, 582, 581, 581, 0, 0, 583, 583, 584, 584, + 585, 585, 582, 569, 586, 587, 586, 587, 586, 587, 586, 587, 586, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 586, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 586, 587, 586, 587, 586, 587, 587, 587, 587, 587, 587, 586, 587, 587, + 587, 587, 587, 587, 586, 586, 587, 587, 587, 587, 588, 589, 590, 590, + 587, 0, 0, 0, 0, 0, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 591, 0, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 0, 593, 593, 594, 594, 594, 594, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 586, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 596, 596, 0, 594, + 594, 594, 594, 594, 594, 594, 594, 594, 594, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 597, 597, 597, + 597, 597, 597, 597, 597, 530, 598, 598, 598, 598, 598, 598, 598, 598, + 598, 598, 598, 598, 598, 598, 598, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 596, 596, 596, 593, 594, 594, 594, + 594, 594, 594, 594, 594, 594, 594, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, + 598, 598, 598, 598, 598, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 530, 530, 530, 530, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 593, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, + 599, 599, 599, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 530, 530, 530, 530, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 530, 530, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 530, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 0, 0, 0, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 602, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 0, 0, 0, 603, 603, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 603, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 605, 605, + 605, 605, 605, 605, 606, 606, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 608, 609, 610, 609, 607, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 611, 611, + 611, 611, 611, 611, 611, 611, 611, 611, 607, 607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, + 93, 612, 95, 97, 97, 97, 613, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 613, 614, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, + 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 90, 93, 456, 456, 95, 95, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 617, 617, 618, 619, 619, + 619, 619, 619, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 63, 63, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 57, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 60, 57, 57, 57, + 57, 57, 57, 57, 57, 53, 57, 53, 57, 53, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 61, 620, 620, 53, 57, 53, 57, 58, 53, 57, 53, 57, 57, 57, 53, 57, + 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 53, 53, 53, 53, 57, 53, 53, 53, 53, 53, 57, 53, 57, 53, 57, 53, 57, + 53, 57, 53, 57, 0, 0, 53, 57, 53, 53, 53, 53, 57, 53, 57, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 57, 58, 60, 60, 57, 58, 58, + 58, 58, 58, 621, 621, 622, 621, 621, 621, 623, 621, 621, 621, 621, 622, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 621, 621, 621, 624, 624, 622, 622, 624, + 625, 625, 625, 625, 623, 0, 0, 0, 626, 626, 626, 626, 626, 626, 318, 318, + 511, 519, 0, 0, 0, 0, 0, 0, 627, 627, 627, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, + 627, 628, 628, 629, 629, 0, 0, 0, 0, 0, 0, 0, 0, 630, 630, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 630, 630, 630, 630, 630, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 632, 633, 0, 0, 0, 0, 0, 0, 0, 0, 634, + 634, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 0, 0, 0, 0, 0, 0, + 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, + 636, 636, 636, 636, 195, 195, 195, 195, 195, 195, 200, 200, 200, 195, + 637, 195, 195, 193, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, + 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, + 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, + 640, 640, 640, 640, 640, 641, 641, 641, 198, 642, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 644, 645, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 0, 0, 0, 648, + 648, 648, 649, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, 651, 649, 649, 648, 648, 648, + 648, 649, 649, 648, 648, 649, 649, 652, 653, 653, 653, 653, 653, 653, + 654, 654, 654, 653, 653, 653, 653, 0, 62, 655, 655, 655, 655, 655, 655, + 655, 655, 655, 655, 0, 0, 0, 0, 653, 653, 319, 319, 319, 319, 319, 321, + 656, 319, 319, 319, 319, 319, 319, 319, 319, 319, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 319, 319, 319, 319, 319, 0, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 658, 658, 658, 658, + 658, 658, 659, 659, 658, 658, 659, 659, 658, 658, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 657, 657, 657, 658, 657, 657, 657, 657, 657, 657, 657, 657, 658, 659, + 0, 0, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 0, 0, 661, 662, + 662, 662, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, + 319, 319, 319, 319, 656, 319, 319, 319, 319, 319, 319, 328, 328, 328, + 319, 320, 321, 320, 319, 319, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 664, 663, + 664, 664, 665, 663, 663, 664, 664, 663, 663, 663, 663, 663, 664, 664, + 663, 664, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 663, 663, 666, 667, 667, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 669, 670, 670, 669, 669, 671, 671, 668, 672, + 672, 669, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 336, 336, 336, 336, + 336, 0, 0, 336, 336, 336, 336, 336, 336, 0, 0, 336, 336, 336, 336, 336, + 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 336, 336, 336, 336, 336, 336, 0, + 336, 336, 336, 336, 336, 336, 336, 0, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 620, 60, + 60, 60, 60, 57, 57, 57, 57, 57, 80, 57, 57, 57, 60, 63, 63, 0, 0, 0, 0, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 668, 669, 669, 670, 669, 669, 670, 669, 669, 671, 669, 673, 0, + 0, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 0, 0, 0, 0, 0, 0, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 675, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 675, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 0, 0, 0, 0, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 0, 0, 0, 0, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 0, 0, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 57, + 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 101, 101, 101, 101, + 0, 0, 0, 0, 0, 129, 679, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 680, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 0, 129, 129, 129, 129, 129, 0, 129, 0, 129, 129, 0, 129, 129, 0, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 682, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 135, 138, 0, 0, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 684, 564, 564, 684, 684, 685, 685, 570, + 571, 686, 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, 96, 96, 96, 156, 156, 156, + 156, 156, 156, 156, 95, 95, 565, 577, 577, 687, 687, 570, 571, 570, 571, + 570, 571, 570, 571, 570, 571, 570, 571, 570, 571, 570, 571, 565, 565, + 570, 571, 565, 565, 565, 565, 687, 687, 687, 688, 565, 688, 0, 588, 689, + 685, 685, 577, 531, 532, 531, 532, 531, 532, 690, 565, 565, 691, 692, + 693, 693, 694, 0, 565, 695, 696, 565, 0, 0, 0, 0, 146, 146, 146, 146, + 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 501, 0, 697, 698, + 699, 700, 701, 698, 698, 702, 703, 698, 704, 705, 706, 705, 707, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 709, 710, 711, 712, 711, + 697, 698, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, + 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, + 702, 698, 703, 714, 715, 714, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 702, 712, 703, 712, 702, 703, 717, 718, 719, 717, + 720, 721, 722, 722, 722, 722, 722, 722, 722, 722, 722, 723, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 724, 724, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 725, 0, 0, 0, 725, 725, 725, 725, 725, 725, 0, + 0, 725, 725, 725, 725, 725, 725, 0, 0, 725, 725, 725, 725, 725, 725, 0, + 0, 725, 725, 725, 0, 0, 0, 726, 700, 712, 714, 727, 700, 700, 0, 728, + 729, 729, 729, 729, 728, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 730, + 730, 731, 515, 0, 0, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 0, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 0, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 0, 732, 732, 0, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 0, 0, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 0, 0, 0, 0, + 0, 198, 379, 198, 0, 0, 0, 0, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 0, 0, 0, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 733, 733, 734, 734, 734, 734, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 734, 734, 735, 736, 736, 0, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 735, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 737, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, + 737, 737, 737, 737, 737, 737, 737, 737, 0, 0, 0, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 0, 0, 0, 0, 739, + 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, + 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, + 739, 739, 739, 740, 740, 740, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 739, + 739, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, + 741, 741, 741, 741, 742, 741, 741, 741, 741, 741, 741, 741, 741, 742, 0, + 0, 0, 0, 0, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, + 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, + 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 744, 744, + 744, 744, 744, 0, 0, 0, 0, 0, 745, 745, 745, 745, 745, 745, 745, 745, + 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, + 745, 745, 745, 745, 745, 745, 745, 745, 0, 746, 747, 747, 747, 747, 747, + 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, + 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, + 747, 747, 747, 0, 0, 0, 0, 747, 747, 747, 747, 747, 747, 747, 747, 748, + 749, 749, 749, 749, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, + 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, + 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 751, + 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, + 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, + 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, + 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, + 753, 753, 753, 753, 753, 0, 0, 754, 754, 754, 754, 754, 754, 754, 754, + 754, 754, 0, 0, 0, 0, 0, 0, 755, 755, 755, 755, 755, 755, 755, 755, 755, + 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, + 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 0, 0, 0, + 0, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, + 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, 756, + 756, 756, 756, 756, 756, 756, 756, 756, 0, 0, 0, 0, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 757, 0, 0, 0, 0, 0, 0, 0, 0, 758, 758, + 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, + 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, + 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, + 758, 758, 758, 758, 758, 758, 758, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 760, 760, 760, 760, 760, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 760, 760, 760, 760, 760, 760, 760, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 761, 761, 761, 761, 761, + 0, 0, 761, 0, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 0, 761, 761, 0, 0, 0, 761, 0, 0, 761, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 0, 763, 764, 764, 764, 764, 764, 764, 764, 764, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, + 765, 765, 765, 765, 765, 765, 765, 765, 765, 766, 766, 767, 767, 767, + 767, 767, 767, 767, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 0, 0, 0, 0, 0, 0, 0, 0, 769, 769, 769, + 769, 769, 769, 769, 769, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 770, 770, 770, 770, 770, 770, 770, + 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 0, 770, 770, 0, 0, + 0, 0, 0, 771, 771, 771, 771, 771, 772, 772, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, + 773, 773, 773, 773, 773, 773, 0, 0, 0, 774, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, 778, 778, 778, 778, 778, 778, + 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, + 778, 778, 778, 778, 0, 0, 0, 0, 779, 779, 778, 778, 779, 779, 779, 779, + 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 0, 0, 779, + 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 779, 780, 781, 781, 781, 0, 781, 781, 0, 0, 0, 0, 0, 781, 782, + 781, 783, 780, 780, 780, 780, 0, 780, 780, 780, 0, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, 0, 0, 783, 784, + 782, 0, 0, 0, 0, 785, 786, 786, 786, 786, 786, 786, 786, 786, 786, 0, 0, + 0, 0, 0, 0, 0, 787, 787, 787, 787, 787, 787, 787, 787, 788, 0, 0, 0, 0, + 0, 0, 0, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, + 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, + 789, 789, 790, 790, 791, 792, 792, 792, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 792, 792, 792, 793, 793, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 794, + 794, 794, 794, 794, 794, 794, 794, 795, 794, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 796, 797, 0, 0, 0, 0, 798, 798, + 798, 798, 798, 799, 799, 799, 799, 799, 799, 800, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, + 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, + 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, + 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 801, 0, 0, 0, 802, + 802, 802, 802, 802, 802, 802, 803, 803, 803, 803, 803, 803, 803, 803, + 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 0, + 0, 804, 804, 804, 804, 804, 804, 804, 804, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, 0, 0, 0, + 0, 0, 806, 806, 806, 806, 806, 806, 806, 806, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 0, 0, 0, + 0, 0, 0, 0, 808, 808, 808, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 809, + 809, 809, 809, 809, 809, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, + 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 0, 0, 0, + 0, 0, 0, 0, 813, 813, 813, 813, 813, 813, 814, 814, 814, 814, 814, 814, + 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, + 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, + 814, 814, 815, 815, 815, 815, 0, 0, 0, 0, 0, 0, 0, 0, 816, 816, 816, 816, + 816, 816, 816, 816, 816, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, + 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, + 817, 817, 817, 817, 817, 817, 817, 0, 818, 818, 818, 818, 818, 818, 818, + 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, + 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, + 818, 818, 818, 818, 818, 818, 818, 0, 819, 819, 820, 0, 0, 818, 818, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, + 821, 0, 0, 0, 0, 0, 0, 0, 0, 823, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 824, + 824, 825, 825, 825, 824, 825, 824, 824, 824, 824, 826, 826, 826, 826, + 827, 827, 827, 827, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, + 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 829, 829, 829, 829, 829, 829, 829, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 832, 831, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 832, 832, 832, 832, + 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 834, 835, 835, 836, + 836, 836, 836, 836, 0, 0, 0, 0, 837, 837, 837, 837, 837, 837, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 838, 838, + 838, 838, 838, 838, 838, 838, 838, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 834, 839, 839, 840, 841, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 840, 840, 840, 839, 839, + 839, 839, 840, 840, 842, 843, 844, 844, 845, 846, 846, 846, 846, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, 847, 847, 847, 847, 847, 847, 847, + 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, + 847, 847, 847, 847, 0, 0, 0, 0, 0, 0, 0, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 0, 0, 0, 0, 0, 0, 849, 849, 849, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 851, 851, 851, 851, 851, 852, 851, 851, 851, 851, + 851, 851, 853, 853, 0, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, + 855, 855, 855, 855, 850, 852, 852, 850, 0, 0, 0, 0, 0, 0, 0, 0, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 857, 858, 859, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 860, 860, 861, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 861, 861, 861, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 861, 863, 862, 862, 862, 862, 864, + 864, 865, 864, 860, 866, 860, 860, 865, 861, 860, 867, 867, 867, 867, + 867, 867, 867, 867, 867, 867, 862, 868, 862, 864, 864, 864, 0, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 0, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 871, 871, 871, + 872, 872, 872, 871, 871, 872, 873, 874, 872, 875, 875, 876, 875, 875, + 876, 872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 877, 877, + 877, 877, 877, 877, 877, 0, 877, 0, 877, 877, 877, 877, 0, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 0, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 878, 0, 0, 0, 0, 0, 0, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + 879, 879, 879, 880, 881, 881, 881, 880, 880, 880, 880, 880, 880, 882, + 883, 0, 0, 0, 0, 0, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 0, + 0, 0, 0, 0, 0, 885, 885, 886, 886, 0, 887, 887, 887, 887, 887, 887, 887, + 887, 0, 0, 887, 887, 0, 0, 887, 887, 887, 887, 887, 887, 887, 887, 887, + 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 0, 887, + 887, 887, 887, 887, 887, 887, 0, 887, 887, 0, 887, 887, 887, 887, 887, 0, + 888, 889, 887, 886, 886, 885, 886, 886, 886, 886, 0, 0, 886, 886, 0, 0, + 886, 886, 890, 0, 0, 887, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 887, 887, + 887, 887, 887, 886, 886, 0, 0, 891, 891, 891, 891, 891, 891, 891, 0, 0, + 0, 891, 891, 891, 891, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 893, 893, 893, 894, 894, + 894, 894, 894, 894, 894, 894, 893, 893, 895, 894, 894, 893, 896, 892, + 892, 892, 892, 897, 897, 897, 897, 898, 899, 899, 899, 899, 899, 899, + 899, 899, 899, 899, 897, 897, 0, 898, 900, 892, 892, 892, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, + 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, + 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, + 901, 901, 901, 901, 901, 901, 902, 902, 902, 903, 903, 903, 903, 903, + 903, 902, 903, 902, 902, 902, 902, 903, 903, 902, 904, 905, 901, 901, + 906, 901, 0, 0, 0, 0, 0, 0, 0, 0, 907, 907, 907, 907, 907, 907, 907, 907, + 907, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 908, 908, 908, + 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, + 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, + 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, + 908, 909, 909, 909, 910, 910, 910, 910, 0, 0, 909, 909, 909, 909, 910, + 910, 909, 911, 912, 913, 914, 914, 915, 915, 916, 916, 916, 914, 914, + 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 908, + 908, 908, 908, 910, 910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 918, 918, 918, 919, 919, 919, 919, 919, 919, 919, 919, 918, + 918, 919, 918, 920, 919, 921, 921, 922, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 0, 0, 0, 0, 0, 0, + 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 926, 927, 926, 927, + 927, 926, 926, 926, 926, 926, 926, 928, 929, 925, 0, 0, 0, 0, 0, 0, 0, + 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 0, 0, 932, + 932, 932, 933, 933, 932, 932, 932, 932, 933, 932, 932, 932, 932, 934, 0, + 0, 0, 0, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 936, 936, 937, + 937, 937, 938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, 939, + 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, + 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, + 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, + 940, 940, 940, 941, 941, 941, 941, 941, 941, 941, 941, 941, 940, 942, + 943, 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, + 945, 945, 945, 945, 945, 945, 945, 945, 946, 946, 946, 946, 946, 946, + 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, + 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 947, 947, + 947, 947, 947, 947, 947, 947, 947, 947, 948, 948, 948, 948, 948, 948, + 948, 948, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, 950, 950, 950, + 950, 950, 950, 950, 0, 0, 950, 0, 0, 950, 950, 950, 950, 950, 950, 950, + 950, 0, 950, 950, 0, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, + 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, + 951, 951, 951, 951, 951, 951, 0, 951, 951, 0, 0, 952, 952, 953, 954, 950, + 951, 950, 951, 955, 956, 956, 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 958, 958, 958, 958, 958, 958, 958, 958, + 0, 0, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, + 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, + 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 959, 959, + 959, 960, 960, 960, 960, 0, 0, 960, 960, 959, 959, 959, 959, 961, 958, + 962, 958, 959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 963, 964, 964, 964, 964, 964, 964, 965, 965, 964, + 964, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, + 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, + 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 964, + 966, 964, 964, 964, 964, 967, 963, 964, 964, 964, 964, 968, 969, 970, + 970, 970, 970, 968, 969, 966, 0, 0, 0, 0, 0, 0, 0, 0, 971, 972, 972, 972, + 972, 972, 972, 973, 973, 972, 972, 972, 971, 971, 971, 971, 971, 971, + 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, + 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, + 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 972, 972, + 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 973, 972, 974, + 975, 975, 975, 971, 976, 976, 976, 975, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 0, 0, 0, + 0, 0, 0, 0, 978, 978, 978, 978, 978, 978, 978, 978, 978, 0, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 979, 980, 980, 980, 980, 980, 980, + 980, 0, 980, 980, 980, 980, 980, 980, 979, 981, 978, 982, 982, 982, 982, + 982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, + 984, 984, 984, 984, 984, 984, 984, 984, 0, 0, 0, 985, 986, 987, 987, 987, + 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, + 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 0, 0, + 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, + 988, 988, 988, 988, 988, 988, 988, 988, 0, 989, 988, 988, 988, 988, 988, + 988, 988, 989, 988, 988, 989, 988, 988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 990, 990, 990, 990, 990, 990, + 990, 0, 990, 990, 0, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, + 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, + 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, + 991, 991, 991, 991, 991, 991, 0, 0, 0, 991, 0, 991, 991, 0, 991, 991, + 991, 992, 991, 993, 993, 990, 991, 0, 0, 0, 0, 0, 0, 0, 0, 994, 994, 994, + 994, 994, 994, 994, 994, 994, 994, 0, 0, 0, 0, 0, 0, 995, 995, 995, 995, + 995, 995, 0, 995, 995, 0, 995, 995, 995, 995, 995, 995, 995, 995, 995, + 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, + 995, 995, 995, 995, 995, 995, 995, 995, 995, 996, 996, 996, 996, 996, 0, + 997, 997, 0, 996, 996, 997, 996, 998, 995, 0, 0, 0, 0, 0, 0, 0, 999, 999, + 999, 999, 999, 999, 999, 999, 999, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1001, 1001, 1002, + 1002, 1003, 1003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 244, 244, 244, 244, + 244, 244, 244, 244, 1004, 1004, 1004, 1004, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1005, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 0, 1008, 1008, + 1008, 1008, 1008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1010, + 1010, 1010, 1011, 1011, 1011, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1011, 1009, 1009, 1009, 1010, 1011, 1010, + 1011, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1010, 1011, 1011, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 0, 1012, 1012, 1012, 1012, 1012, + 1012, 1012, 1013, 1014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1016, 1017, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 0, 0, 0, 0, 0, 0, 0, 1018, 1018, 1018, 1018, 1018, 1018, 1018, + 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, + 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, + 0, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 0, 0, 0, + 0, 1020, 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 0, 0, 1022, 1022, + 1022, 1022, 1022, 1023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1025, 1025, 1025, + 1025, 1025, 1025, 1025, 1026, 1026, 1026, 1027, 1027, 1028, 1028, 1028, + 1028, 1029, 1029, 1029, 1029, 1026, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 0, 1031, + 1031, 1031, 1031, 1031, 1031, 1031, 0, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1035, 1035, 1036, + 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 0, 0, 0, 0, 1038, 1037, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 0, 0, 0, 0, 0, 0, 0, 1038, 1038, + 1038, 1038, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, + 1040, 1040, 1040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1041, + 1042, 588, 1043, 1044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1045, 1045, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1046, 0, 0, 0, 0, 0, 0, 0, 0, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, + 1047, 1047, 1047, 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 581, 581, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 586, 586, 586, 586, 0, 0, 0, 0, 0, 0, 0, 0, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 0, 0, 0, 0, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 0, 0, 0, 0, 0, 1049, 1049, 1049, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 0, 0, 0, 1049, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 0, 0, 0, 0, 0, 0, 0, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 0, 0, 1050, 1051, 1052, + 1053, 507, 507, 507, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 0, 0, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 1054, 1054, 453, 453, 453, 318, 318, 318, 1055, 1054, + 1054, 1054, 1054, 1054, 507, 507, 507, 507, 507, 507, 507, 507, 156, 156, + 156, 156, 156, 156, 156, 156, 318, 318, 96, 96, 96, 96, 96, 156, 156, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 96, 96, 96, 96, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 1056, 1056, 1056, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 0, 0, 0, 0, 0, 0, + 0, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 513, 0, 513, + 513, 0, 0, 513, 0, 0, 513, 513, 0, 0, 513, 513, 513, 513, 0, 513, 513, + 513, 513, 513, 513, 513, 513, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 513, 513, 0, 513, 513, 513, 513, 0, 0, 513, 513, 513, 513, 513, 513, + 513, 513, 0, 513, 513, 513, 513, 513, 513, 513, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 513, 513, 0, 513, 513, 513, 513, 0, 513, 513, 513, 513, 513, + 0, 513, 0, 0, 0, 513, 513, 513, 513, 513, 513, 513, 0, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 1057, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 520, 50, 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 1057, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 520, 50, + 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 1057, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 520, 50, 50, 50, 50, 50, 50, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 1057, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 520, 50, 50, 50, 50, 50, 50, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 1057, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 520, 50, 50, + 50, 50, 50, 50, 513, 50, 0, 0, 1058, 1058, 1058, 1058, 1058, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1059, 1059, + 1059, 1059, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1060, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, + 1059, 1059, 1059, 1060, 1059, 1059, 1061, 1061, 1061, 1061, 1062, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1060, 1060, 1060, 1060, 1060, 0, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 0, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 0, 0, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 0, 1063, 1063, 0, 1063, 1063, 1063, 1063, 1063, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1064, 1064, 1064, 1064, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, + 1064, 1064, 1064, 1064, 0, 0, 0, 1065, 1065, 1065, 1065, 1065, 1065, + 1065, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 0, 0, 1067, 1067, 1067, + 1067, 1067, 1067, 1067, 1067, 1067, 1067, 0, 0, 0, 0, 1064, 1068, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1069, 1069, 1069, 1069, 1069, + 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, + 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, + 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, + 1069, 1069, 1069, 1070, 1070, 1070, 1070, 1071, 1071, 1071, 1071, 1071, + 1071, 1071, 1071, 1071, 1071, 0, 0, 0, 0, 0, 1072, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1073, 0, 0, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, + 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, + 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, + 1078, 1078, 1078, 1078, 1078, 1078, 1079, 1080, 0, 0, 0, 0, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 0, 0, 0, 0, 1082, 1082, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1084, 1083, 1083, 1083, 1085, 1083, 1083, 1083, 1083, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1086, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, + 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 146, + 146, 0, 146, 0, 0, 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 0, 146, 146, 146, 146, 0, 146, 0, 146, 0, 0, 0, 0, 0, 0, 146, 0, 0, + 0, 0, 146, 0, 146, 0, 146, 0, 146, 146, 146, 0, 146, 146, 0, 146, 0, 0, + 146, 0, 146, 0, 146, 0, 146, 0, 146, 0, 146, 146, 0, 146, 0, 0, 146, 146, + 146, 146, 0, 146, 146, 146, 146, 146, 146, 146, 0, 146, 146, 146, 146, 0, + 146, 146, 146, 146, 0, 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 146, 146, 146, 0, 146, 146, 146, + 146, 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 534, 534, 534, 534, 530, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 530, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 523, 523, 534, 534, 534, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 318, 41, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 41, 41, 41, 534, 534, + 534, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 1087, 535, 535, 1087, 1087, 1087, 1087, 1087, 1087, 1087, + 1087, 1087, 1087, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, 1089, 593, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 0, + 0, 0, 0, 593, 593, 593, 593, 593, 593, 593, 593, 593, 0, 0, 0, 0, 0, 0, + 0, 593, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 530, 530, + 530, 530, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 534, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 534, 530, 530, 530, 530, 530, 530, 530, 541, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 534, 534, + 534, 534, 534, 534, 534, 534, 41, 41, 534, 534, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 533, 533, 530, 530, 530, 530, 530, 533, 530, 530, 530, 530, + 530, 541, 541, 541, 530, 530, 541, 530, 530, 541, 539, 539, 534, 534, + 530, 530, 530, 530, 530, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 534, 534, 534, 530, 534, 534, 534, 530, + 530, 530, 1090, 1090, 1090, 1090, 1090, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 534, 530, 534, 541, 541, 530, 530, 541, 541, 541, 541, 541, 541, + 541, 541, 541, 541, 541, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 541, 541, + 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, + 541, 541, 541, 530, 530, 530, 541, 530, 530, 530, 530, 541, 541, 541, + 530, 541, 541, 541, 530, 530, 530, 530, 530, 530, 530, 541, 530, 541, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 533, 530, 533, 530, 533, 530, 530, 530, 530, 530, 541, 530, 530, 530, + 530, 533, 530, 533, 533, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 534, 534, 530, 533, 533, + 533, 533, 533, 533, 533, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 533, 533, 533, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 533, 533, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 534, + 530, 530, 530, 530, 534, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 539, + 539, 534, 534, 534, 534, 541, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 539, + 534, 534, 534, 534, 541, 541, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 530, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 41, 41, 41, 41, + 41, 41, 41, 41, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 41, 41, + 41, 41, 41, 41, 534, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 541, 541, 541, 530, 530, 530, + 541, 541, 541, 541, 541, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 543, 543, 543, 1091, 1091, 1091, 41, 41, + 41, 41, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 541, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 541, 541, 541, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 541, 530, 530, 530, 530, + 530, 534, 534, 534, 534, 534, 534, 541, 534, 534, 534, 530, 530, 530, + 534, 534, 530, 530, 530, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 530, 530, 0, 0, 0, 534, 534, 534, 534, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 0, 0, 0, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 534, 534, 534, 534, 0, 0, 0, 0, 0, 0, 0, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 534, + 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 541, + 530, 530, 541, 530, 530, 530, 530, 530, 530, 530, 530, 541, 541, 541, + 541, 541, 541, 541, 541, 530, 530, 530, 530, 530, 530, 541, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 541, 541, 541, 541, 541, 541, 541, + 541, 541, 541, 530, 534, 541, 541, 541, 530, 530, 530, 530, 530, 530, + 530, 534, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 541, 530, 0, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 541, + 541, 530, 541, 541, 530, 541, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 0, 541, 541, 541, 530, 541, 541, + 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 0, 0, 530, 530, 530, 530, 530, 0, 0, 0, 530, + 530, 530, 0, 0, 0, 0, 0, 530, 530, 530, 530, 530, 530, 530, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 0, + 0, 0, 0, 0, 0, 0, 530, 530, 530, 530, 530, 530, 530, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 530, 530, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 530, + 530, 530, 530, 530, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 0, 0, 0, 0, 0, 0, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 0, + 0, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 0, 0, +]; +