rapier-markdown-kit 1.2.10 → 1.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/vendor/hyphen-en-us/SOURCE.json +3 -3
- package/dist/agent/vendor/hyphen-en-us/patterns.js +4 -3
- package/dist/kit/conformance/run.mjs +1 -0
- package/dist/kit/export-fonts.mjs +7 -0
- package/dist/kit/ledger/authorship.mjs +10 -19
- package/dist/kit/ledger/format.mjs +1 -1
- package/dist/kit/ledger/history.mjs +12 -3
- package/dist/kit/ledger/inverse-source.mjs +9 -126
- package/dist/kit/ledger/journal-records.mjs +2 -17
- package/dist/kit/ledger/source.mjs +323 -0
- package/dist/kit/pdf-glyphs.mjs +388 -96
- package/dist/kit/pdf-vectors.mjs +7 -6
- package/dist/kit/render-markdown.mjs +9 -6
- package/dist/kit/render-print.mjs +193 -51
- package/dist/kit/render-sanitize.mjs +7 -7
- package/dist/kit/render.mjs +16 -1
- package/dist/layout/preparation.mjs +1 -1
- package/dist/spec/md-assets.mjs +99 -8
- package/package.json +1 -1
- package/style.css +34 -8
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
}
|
|
22
22
|
],
|
|
23
23
|
"generator": "tools/compile-hyphens.mjs",
|
|
24
|
-
"generatorSha256": "
|
|
24
|
+
"generatorSha256": "26b3321fd19f114ca9abdf5380c8f7b34e6ce9ffe5c519946d006690e71e3a2b",
|
|
25
25
|
"policy": "Complete pinned data in a static prefix trie, with original MIT Rapier traversal and matcher; en and en-US ASCII words. Other regional English, non-ASCII words and other languages use the native offline hyphenator.",
|
|
26
26
|
"files": [
|
|
27
27
|
{
|
|
28
28
|
"output": "patterns.js",
|
|
29
|
-
"outputBytes":
|
|
30
|
-
"outputSha256": "
|
|
29
|
+
"outputBytes": 32776,
|
|
30
|
+
"outputSha256": "c92bcc1b9ca62aaffd4b46190c25e15386e3218b33bb07aaefe325159aa97b7e"
|
|
31
31
|
}
|
|
32
32
|
]
|
|
33
33
|
}
|
|
@@ -14,12 +14,13 @@ and exceptions described in the upstream file. No hyphenation implementation
|
|
|
14
14
|
from that repository or Justice is included. */
|
|
15
15
|
// Generated by tools/compile-hyphens.mjs; edit the pinned inputs only by reviewed intake.
|
|
16
16
|
// Original Rapier traversal is MIT licensed. Pattern data keep the notice above.
|
|
17
|
-
const starts = "²ËàðćĠıŃŕůųƂƙƫDŽǝǰDZȉȠȶɌɒɡɬɽʆʒʖʛʠʭʯʳʷʼʽʿ˂ˇˊː˔˙ˠ˦˪ˬˮ˯˷˾̢̧̙̙̲̲̺̻͈͔̆̇̈̐̔ͥͩͭͮ̚͞ͱͳͽͿͿΓΓΓΘΘΙΣΣΦΧΪβββδπσύϔϢϣϧϧϵϵϺϺЀЊЊЋЗЗЗЙЫЫЯЯпппхххѕѕћўѠѩѩѩѫѶѹ҃ҋҕҚҡҢҩҪҬҵҾӊӔӞӟӬӹԃԉԎԒԓԖԟԟԟԩԭԭԵԻԻԻԾԾՂՂՄՋՋՓՓՓ՝ՠգհմյչփփֈ։֊ׇׇֹֹֻּֽ֭֭֭֒֠֠גדוכס׳؊؊؊؋؋ؕجضػؼمٔٝٝ٠٠١١٤٧٪٫٬ٱٱٹٹٹڀڀڂڂڄڈډڍڍڍژڙڜڟګڬگگڿڿۀۅۈۈۗۜۜ۟ۥ۱۲۲۸܃܅܅ܐܐܐܚܚܚܛܞܬܻܻܳܳܵܵ݇݇ݎݔݥݦݯݱݽݽށނރޅޕޗޗޘޡާްްް߆ߋߐߑߙߚߢߢߤ߰߷ࠃࠈࠐࠐࠝࠤࠩ࠲࠷࠸࠹ࡄࡄࡄࡏࡏࡏ࡙ࡢࡢࡦࡦࡦࡲࡵࡹࡼࢄࢍࢍࢠࢣࢧࢩࢻࢽࣂࣄ࣓࣓ࣹࣙࣜ࣠ࣥࣴࣽअऋओखखङचततभभऽऽऽूॏ॒ॖग़ग़ॣ३४४ॵংঋঋততদদষষষিৣৣ২৫৯৺৺৾ਁਂਉਘਛਝਟਤਤਤਸ਼ਾੁ੦ੱઆઍઍઍગગગઞટદદનબબમલલલષષ઼ીુૃૄૅૉૉૌૌૐૢ૧૫ૺ૽૽૽ଁଃଅଆଇଈଌଓଔକଖଙଛଜଝଢଣତଥନବଭମଯଳଳଶହ଼ଽାିୀୁୂୄେୈ୍୕ଡ଼ଢ଼ୟୢ୧୫୯୲୴୶୷ஂஃஆஉஐஓகஙசஞஞடணநழழவஶஸஹாீுூெைௌ்ௐ௧௩௩௩௩௩௩௩௪௫௭௮௯௲௳௵௷௹௹௺ఃఅఉఋఌఐఔఘచతథదనరవస఼ాుుెెేౕౙౡౢ౧౩౩౫౬౷౸౼ಂ಄ಋಏಐಔಘಘಘಚಛಜಜಝಟಡಣದನಪಪಬಭಭಭಮಯಯರಱಲಳಶಹ಼ಾಾೀೃೇೇೋೕೠೢ೧೨೩೪೫೫೬೭೮೮ഀഁംഃആഋഋഋഎഏഏഏഒഗഘങഛഞടഠഡതതദദനബബഭരറററളഹാാീുൃൃൄെെൈൈ്ൎൔൖ൘൘൙൙൚൛൝൞ൢ൦൨൩൪൫൬൮൰൴൸ർൽൿංඃඅඇඊඊඌඎඏඑඑඑඑඒඒඒඓඓඔකඛඛගඝඝඟඡඥඥඦටඨඪතනපපමවශශශෂෂෂෂසෆෆ්ාැිුෙේේේේේෛෛෛෛෞෟ෧෩෭ෲෲෳขฃฅซฎฒตทธธบปผฝมรวศสหหหอฮิึืุุูู฿฿ใไๅๆ็๋๋ํ๏๏๐๐๐๑๒๕๖๙๚๛ກກຉຊຌຍຏຏຑຒຓບຢຢລຨສຫຫຫຬຬຬອຯຯະັັຳຶືຸູູົຼຽໃໄ໗໗໙ໝໞༀ༁༁༂༄༆་་༌༐༑༒༒༓༓༓༔༔༗༙༝༡༢༢༣༤༤༧༧༧༨༨༪༫༫༬༭༯༰༳༴༴༶༹༹༷༺༻༼༾༾༿གགྷགྷགྷཊཋཌཏཔཕབབྷམཙཛཛྷཛྷཞརརལཥསཧཧཧཨཨཀྵཪཫཱཱཱིུྲྀཷཹཹཹཹ྄ཱེོྀྃ྅ྉྉྊྋྋྌྍྏྏྐྒྔྔྕྙྚྚྚྚྜྜྷྠྡྷྡྷྤྥྦྷྪྪྪྪྪྫྮྮྰྱྱྶྸྺྺྻྼྼ྾྾྾྿྿࿀࿁࿂࿄࿅࿆࿇࿇࿐࿕࿖࿗࿘࿙ခဂငဆဈညဎတထဒဓပပဖမမမယလဝဝသအအအဢဥဦဧဪါီုုူေံ့းးျြွဿ၁၅၇၇၉၎၏ၑၑၒၓၔၕၙၚၜၜၜၝၞၠၢၢၢၣၤၥၩၩၪၬၭၯၯၳၶၶၼၽၽၾၿႀႀႂႄႈႉႊႋႌႌႎႏ႐႓႔ႚ႟႟႟႟ႢႤႦႧႧႧႩႩႩႬႭႮႮႱႲႲႳႴႵႶႹႻႼჀჁჅჍბვვზთილნსტშცძჳჵჷჷჺ჻ჾᄁᄃᄃᄄᄄᄅᄆᄇᄈᄊᄋᄋᄋᄌᄌᄌᄌᄍᄍᄍᄍᄍᄎᄏᄏᄐᄑᄑᄑᄓᄓᄗᄗᄘᄙᄙᄚᄚᄚᄛᄛᄜᄝᄝᄞᄞᄞᄠᄡᄣᄤᄥᄦᄩᄬᄭᄰᄱᄲᄲᄴᄴᄵᄶᄷᄹᄺᄻᄼᄿᅀᅅᅇᅌᅏᅑᅒᅒᅓᅔᅔᅙᅚᅠᅣᅦᅩᅩᅩᅭᅱᅲᅲᅳᅶᅷᅷᅹᅺᆀᆁᆃᆆᆇᆈᆊᆊᆋᆍᆎᆎᆒᆓᆕᆖᆙᆜᆠᆡᆣᆣᆤᆦᆨᆨᆨᆨᆨᆩᆫᆮᆯᆱᆱᆲᆲᆳᆵᆷᆷᆸᆼᆽᆾᆾᇀᇀᇂᇂᇂᇃᇄᇅᇇᇇᇊᇌᇌᇍᇒᇕᇖᇚᇝᇠᇡᇤᇤᇧᇨᇪᇫᇲᇳᇴᇵᇹᇹᇹᇹᇻᇻᇽሄህለሉሉላላሌሌልልሎሏሐሐሑሒሗሙማሜሞሞሟሠሡሦሪራራሬሬርሯሯሯሯሯሰሳሴሴሶሷሺሿቁቃቅቆቇቈቋቍቐቑቖቚቚቛቝበቢቤብብቦቦቪቯተቱቱቲታቶቸቻቼችቿኀኀኁኁኃኅኆኇኈኊኌኌኒኔንንኖኗኘኘኚኛኝኝኝኞኟኡኦኩኪካኮኯኰኲኲኳኳኵኹኹኺኻኽኾዀዅወወወዉዊዌዎዎዎዏዏዏዏዏዐዑዓዔዖዘዙዙዚዚዜዞዟዠዣዤዦዧየያዬይይዮዯደደዱዳዶዹዺዻዼዽዾዿጀጁጂጂጃጅገጉጋጌጎጏጒጓጞጟጢጣጣጧጧጧጪጬጰጴጵጷጹጻጼጽጿፀፄፅፊፌፎፏፐፒፒፓፔፕፕፗፙ፞፞፞፞።፦፧፮፯፰፲፳፴፶፹፺፺፻ᎁᎁᎁᎄᎆᎇᎊᎌᎏ᎐᎒᎓᎔᎔᎖᎖᎘ᎠᎠᎡᎡᎤᎤᎥᎦᎧᎫᎬᎰᎳᎳᎳᎳᎴᎴᎶᎸᎸᎺᎽᎾᏆᏈᏈᏉᏌᏒᏒᏕᏕᏕᏕᏕᏖᏙᏜᏞᏟᏠᏣᏤᏦᏨᏭᏮᏯᏯᏰᏲᏲᏳᏵᏸᏹᏺᏻ᐀ᐁᐂᐌᐏᐕᐖᐖᐗᐘᐘᐘᐙᐚᐛᐜᐜᐝᐝᐝᐞᐞᐞᐟᐟᐢᐥᐨᐪᐬᐮᐯᐱᐱᐲᐵᐺᐻᐽᑀᑀᑁᑂᑄᑅᑇᑉᑉᑊᑌᑎᑏᑐᑓᑓᑘᑙᑝᑟᑣᑤᑥᑧᑨᑨᑫᑮᑲᑵᑶᑺᑻᑻᑻᑽᒁᒁᒂᒂᒂᒃᒆᒇᒋᒌᒏᒑᒒᒖᒚᒚᒜᒜᒠᒤᒧᒧᒨᒩᒫᒬᒭᒯᒱᒱᒲᒴᒷᒷᒸᒼᓀᓁᓁᓃᓄᓆᓈᓉᓊᓍᓑᓓᓕᓗᓙᓜᓞᓞᓟᓣᓣᓤᓤᓨᓪᓬᓭᓮᓮᓲᓳᓴᓵᓵᓵᓷᓺᓻᔂᔅᔆᔆᔈᔉᔊᔋᔍᔎᔏᔕᔗᔗᔗᔘᔘᔙᔙᔜᔜᔡᔣᔤᔧᔧᔨᔨᔬᔯᔲᔵᔷᔺᔻᔻᔼᔼᔾᕀᕂᕃᕃᕆᕊᕑᕓᕗᕙᕚᕛᕜᕜᕜᕞᕢᕦᕦᕦᕧᕩᕪᕬᕯᕰᕲᕲᕳᕳᕳᕳᕴᕵᕶᕷᕷᕸᕹᕻᕽᕾᕿᖀᖁᖂᖇᖇᖊᖋᖍᖎᖑᖕᖗᖛᖜᖠᖢᖤᖤᖨᖩᖭᖮᖮᖯᖯᖰᖰᖰᖷᖷᖺᖻᗂᗃᗈᗋᗌᗍᗍᗎᗏᗏᗏᗑᗑᗒᗒᗓᗓᗔᗔᗔᗔᗖᗗᗘᗘᗚᗛᗜᗜᗝᗞᗤᗦᗨᗫᗰᗲᗴᗵᗵᗵᗶᗹᗹᗹᗼᗾᗿᗿᘁᘅᘆᘋᘋᘌᘒᘔᘕᘕᘕᘕᘕᘗᘚᘝᘝᘢᘢᘤᘧᘧᘪᘫᘬᘭᘮᘯᘱᘵᘷᘷᘽᘾᘾᘿᙁᙂᙆᙇᙇᙇᙇᙈᙉᙉᙊᙋᙌᙏᙒᙔᙔᙕᙗᙘᙝᙠᙤᙫ᙭᙮᙮᙮ᙯᙯᙰᙰᙱᙲᙲᙲᙲᙲᙲᙳᙴᙹᙹᙹᙹᙺᙺᙺᙺᙽᙽᙽᙽᙾ ᚄᚄᚄᚆᚇᚈᚈᚊᚋᚋᚋᚋᚋᚎᚒᚓᚔᚔᚕᚘᚙᚙᚙᚚ᚛᚜ᚠᚢᚣᚤᚥᚦᚩᚫᚫᚫᚬᚯᚰᚰᚱᚳᚴᚵᚵᚶᚷᚻᚼᚾᚾᚾᚾᚿᚿᚿᛀᛂᛂᛃᛅᛉᛊᛊᛊᛋᛍᛓᛔᛕᛖᛘᛙᛜᛜᛟᛠᛢᛤᛥᛥᛦᛨᛩ᛫ᛮᛳᛳᛸᛸᛸᛸᛸᛸᛸᜀᜁᜂᜃᜄᜅᜅᜅᜅᜉᜋᜑᜓ᜕ᜟᜢᜢᜣᜦᜩᜪᜪᜬᜬᜰᜱ᜴᜶ᝁᝂᝅᝆᝆᝇᝇᝇᝈᝉᝋᝋᝌᝍᝍᝎᝏᝏᝐᝐᝑᝒᝓᝓᝓᝠᝡᝡᝡᝡᝡᝡᝢᝣᝥᝥᝦᝧᝧᝧᝧᝨᝨᝨᝩᝪᝫᝬᝬᝬᝯᝯᝲᝳᝳកខខខខខគគគឃឃឃងឆឆឈឈឈឈញដដដដដឋឌឍតតថទធនបបផពភភមយររវឝឞឞសសហឡអអអឣឤឤឤឥឦឧឨឩឩឩឪឫឬឯឯឯឯឱឲឳ឴឴឴឴឵ិិិីីឹឺឺឺឺុុុុូួើើៀេែែែែៃៃៃៃោៅំះៈ៉់៌៎៏័៑្្៓។។៕៖៖៖៖ៗៗៗ៘៚៚៛៛ៜ៝០១២៣៤៥៥៦៦៧៨៨៩៰៱៲៳៴៴៵៷៸᠀᠀᠀᠀᠀᠀᠁᠂᠃᠄᠅᠅᠅᠆᠆᠇᠈᠉᠊᠊᠋᠍᠏᠏᠏᠏᠐᠑᠑᠑᠒᠓᠓᠔᠕᠕᠕᠕᠕᠕᠖᠖᠖᠖᠗᠘᠘᠘᠙᠙᠙᠙ᠠᠠᠡᠢᠣᠣᠤᠤᠤᠤᠤᠥᠦᠨᠩᠪᠪᠪᠫᠬᠬᠭᠮᠯᠰᠲᠳᠴᠵᠵᠶᠶᠶᠷᠷᠸᠸᠸᠹᠹᠻᠼᠼᠼᠽᠽᠽᠾᠿᡀᡁᡁᡂᡃᡃᡄᡄᡅᡅᡆᡊᡊᡊᡊᡊᡊᡊᡊᡊᡋᡌᡍᡍᡎᡎᡐᡐᡑᡒᡓᡔᡔᡕᡗᡗᡘᡙᡙᡚᡚᡚᡚᡛᡝᡞᡞᡟᡟᡠᡡᡡᡡᡣᡤᡤᡥᡥᡥᡥᡥᡦᡦᡧᡧᡧᡧᡧᡨᡨᡩᡩᡩᡩᡩᡩᡩᡩᡪᡪᡫᡬᡭᡭᡮᡮᡯᡰᡱᡳᡴᡴᡷᡸᡸᡸᡸᡸᡸᢀᢀᢁᢁᢂᢃᢃᢃᢃᢄᢇᢈᢈᢉᢉᢉᢉᢉᢉᢉᢉᢊᢊᢋᢌᢌᢌᢍᢍᢍᢎᢏᢐᢑᢒᢒᢓᢓᢓᢓᢓᢓᢓᢓᢓᢓᢓᢔᢔᢔᢕᢖᢖᢖᢗᢗᢘᢘᢘᢙᢚᢛᢛᢜᢝᢝᢟᢟᢡᢡᢢᢢᢣᢤᢤᢤᢥᢦᢦᢧᢨᢨᢨᢩᢪᢰᢰᢱᢱᢱᢱᢲᢲᢳᢵᢵᢵᢶᢷᢷᢸᢹᢹᢹᢻᢼᢾᢾᢾᢾᣁᣂᣂᣃᣄᣆᣆᣇᣇᣈᣉᣉᣉᣊᣊᣋᣋᣌᣌᣌᣌᣌᣌᣌᣍᣍᣎᣎᣎᣎᣏᣐᣐᣑᣒᣓᣕᣖᣘᣘᣘᣘᣘᣙᣙᣙᣙᣙᣚᣛᣛᣛᣜᣝᣞᣞᣞᣞᣞᣞᣟᣡᣢᣤᣥᣥᣥᣥᣥᣥᣦᣦᣧᣨᣨᣨᣨᣨᣨᣩᣪᣪᣪᣫᣫᣬᣬᣬᣬᣬᣭᣯᣰᣰᣱᣱᣱᣱᣱᣲᣳᣴᤁᤂᤃᤅᤅᤅᤆᤆᤆᤆᤆᤇᤈᤈᤈᤈᤈᤈᤉᤊᤋᤌᤍᤏᤐᤐᤑᤑᤓᤓᤓᤕᤘᤙᤙᤚᤚᤚᤚᤚᤚᤚᤛᤛᤛᤛᤜᤜᤞᤞᤠᤠᤠᤢᤢᤢᤢᤣᤣᤤᤥᤥᤦᤧᤧᤧᤩᤪᤪᤪᤪᤪᤫᤫᤰᤰᤰᤰᤰᤱᤲᤲᤳᤴᤴᤵᤵᤶᤷᤷᤷᤸᤸ᤹᤹᤺᥀᥄᥄᥄᥅᥇᥇᥈᥈᥈᥈᥉᥊᥋᥋᥌᥌᥌᥎᥎᥎᥎᥏᥏ᥐᥑᥑᥓᥓᥔᥕᥖᥖᥘᥙᥛᥜᥝᥝᥞᥞᥞᥞᥞᥞᥟᥟᥟᥟᥟᥟᥟᥡᥡᥡᥡᥡᥡᥡᥢᥣᥣᥥᥥᥦᥧᥧᥧᥧᥧᥨᥨᥨᥨᥨᥨᥨᥨᥨᥨᥨᥩᥩᥩᥩᥩᥪᥪᥪᥪᥪᥫᥬᥬᥭᥭᥰᥲᥳᥴᥴᦀᦀᦁᦁᦂᦂᦃᦃᦄᦅᦆᦈᦈᦈᦈᦉᦋᦌᦌᦍᦍᦍᦍᦎᦎᦎᦎᦎᦎᦎᦎᦏᦐᦐᦐᦐᦑᦒᦒᦓᦓᦓᦓᦔᦔᦕᦖᦖᦗᦗᦚᦛᦛᦜᦝᦟᦟᦠᦠᦡᦡᦢᦢᦣᦤᦥᦦᦧᦫᦫᦱᦲᦲᦲᦲᦳᦶᦶᦶᦶᦶᦶᦷᦸᦸᦸᦸᦹᦺᦻᦻᦻᦼᦽᦿᦿᧀᧀᧁᧂᧂᧂᧃᧃᧄᧄᧅᧆᧇᧈᧉ᧑᧒᧒᧓᧓᧔᧕᧕᧖᧗᧗᧘᧙᧙᧙᧞᧞᧞᧟᧟᧟᧠᧠᧢᧤᧥᧥᧥᧥᧥᧥᧥᧥᧥᧦᧦᧦᧦᧦᧦᧦᧧᧧᧨᧩᧩᧪᧪᧫᧫᧬᧭᧭᧭᧭᧭᧮᧯᧯᧯᧯᧰᧰᧰᧰᧳᧵᧵᧷᧷᧷᧸᧹᧹᧺᧺᧺᧺᧺᧺᧺᧻᧼᧽᧾᧾᧿ᨀᨁᨂᨂᨄᨅᨅᨆᨆᨆᨇᨇᨇᨇᨈᨈᨈᨈᨈᨈᨈᨈᨈᨉᨉᨋᨋᨋᨋᨋᨌᨌᨏᨏᨐᨑᨒᨒᨒᨒᨒᨒᨒᨒᨓᨓᨓᨓᨓᨓᨔᨔᨕᨕᨖᨖᨖᨘᨘᨗᨙᨙᨙᨙᨚᨚᨛᨛᨛ᨟᨟᨟ᨠᨠᨢᨢᨢᨣᨤᨥᨦᨦᨧᨧᨧᨨᨨᨨᨩᨪᨪᨪᨪᨫᨫᨬᨬᨬᨬᨬᨬᨬᨭᨮᨰᨱᨳᨴᨴᨵᨶᨶᨶᨸᨹᨺᨻᨼᨼᨽᨽᨽᨽᨽᨿᨿᨿᩁᩁᩁᩂᩂᩃᩄᩅᩅᩆᩆᩆᩇᩇᩇᩇᩇᩈᩈᩉᩊᩊᩊᩊᩊᩋᩋᩌᩍᩍᩎᩎᩏᩐᩐᩐᩑᩑᩑᩑᩑᩑᩑᩑᩒᩔᩕᩕᩖᩖᩗᩘᩘᩙᩚᩚᩚᩛᩛᩜᩝᩝᩝᩞᩞᩞ᩠᩠᩠᩠᩠᩠ᩡᩢᩢᩤᩤᩤᩦᩦᩦᩦᩦᩦᩨᩨᩨᩨᩨᩨᩩᩪᩪᩪᩪᩪᩪᩫᩬᩬᩬᩬᩬᩭᩮᩮᩰᩰᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩲᩳᩳᩳᩳᩴ᩿᩵᩶᩶᩷᩷᩷᩸᩹᩹᩹᩹᩹᩺᩺᩺᩺᩺᩺᩺᩻᩻᩼᩼᩼᩼᩼᩼᩼᪀᪁᪁᪂᪃᪄᪄᪄᪄᪅᪆᪆᪆᪈᪉᪉᪑᪑᪑᪑᪑᪒᪒᪒᪒᪒᪒᪓᪔᪔᪔᪔᪔᪔᪔᪔᪕᪕᪕᪕᪕᪖᪘᪘᪘᪘᪙᪙᪙᪙᪙᪡᪡᪡᪡᪢᪣᪣᪤᪤᪤᪥ᪧ᪨᪨᪨᪩᪪᪪᪪᪫᪫᪫᪫᪫᪭᪵᪵᪶᪶᪶᪶᪷᪸᪺᪽᪽᪽᪱᪱᪲᪲᪳᪳᪴᪴᪴᪻᪻᪻᪾᪾ᪿᫀ᫃᫃᫃᫄᫄᫊᫊᫁᫁᫅᫅᫅᫅᫅᫆᫈᫈᫈᫈᫈᫈᫉᫉᫉᫋᫋᫋᫋ᫌᫌᫍᫎᬀᬁᬂᬂᬃᬄᬄᬄᬅᬅᬅᬅᬅᬆᬆᬆᬆᬇᬇᬇᬈᬉᬊᬊᬋᬋᬋᬋᬋᬋᬋᬋᬌᬌᬎᬏᬏᬏᬐᬐᬐᬑᬑᬑᬑᬒᬒᬓᬓᬔᬔᬔᬕᬕᬗᬘᬙᬙᬜᬝᬞᬟᬡᬢᬢᬣᬣᬣᬣᬣᬥᬥᬥᬦᬦᬦᬪᬪᬫᬬᬬᬬᬬᬭᬮᬮᬮᬯᬰᬰᬱᬲᬳᬳ᬴ᬶᬷᬷᬺᬼᬼᬼᬽᬾᬿᬿᭀᭀᭁᭁᭃᭃᭃ᭄᭄ᭅᭆᭆᭇᭉᭉᭋᭌ᭓᭔᭕᭖᭗᭗᭘᭘᭙᭛᭛᭜᭜᭝᭝᭝᭝᭞᭟᭠᭠᭠᭡᭢᭣᭤᭤᭤᭤᭤᭥᭦᭦᭧᭨᭩᭩᭪᭪᭪᭪᭪᭪᭬᭫᭭᭮᭮᭮᭮᭯᭯᭱᭳᭳᭳᭴᭴᭴᭵᭵᭶᭶᭶᭶᭷᭷᭷᭷᭷᭸᭸᭸᭹᭹᭹᭺᭺᭺᭺᭺᭼᭼᭼᭼᭼᭽᭽᭽᭽᭾᭾ᮀᮂᮂᮂᮂᮂᮂᮂᮂᮂᮃᮃᮃᮄᮄᮄᮄᮄᮄᮅᮅᮆᮇᮇᮇᮈᮈᮉᮊᮊᮋᮋᮋᮌᮍᮍᮎᮎᮏᮐᮐᮐᮑᮑᮒᮓᮔᮗᮗᮗᮘᮙᮛᮜᮞᮞᮞᮞᮞᮞᮠᮠᮡᮡᮢᮣᮣᮣᮣᮤᮤᮤᮤᮥᮥᮦᮦᮧᮧᮩᮩ᮪᮫ᮬᮬᮭᮭᮭᮭᮭᮭᮮᮮᮮᮯᮯᮯᮯᮯ᮰᮱᮱᮲᮳᮳᮳᮴᮴᮶᮶᮷᮸᮹ᮺᮻᮼᮼᮼᮽᮽᮾᮾᮿᮿᯁᯁᯃᯄᯄᯄᯄᯄᯄᯄᯅᯅᯅᯅᯅᯆᯇᯇᯈᯈᯉᯉᯊᯋᯌᯌᯍᯍᯍᯎᯎᯎᯐᯐᯐᯐᯑᯒᯒᯓᯓᯔᯔᯖᯘᯘᯙᯚᯛᯛᯛᯛᯜᯜᯜᯜᯜᯝᯝᯝᯞᯟᯠᯡᯡᯣᯣᯤᯥ᯦᯦᯦ᯧᯧᯧᯨᯨᯨᯩᯩᯩᯩᯩᯩᯪᯫᯭᯮᯯᯯᯰᯰᯱ᯲᯲᯲᯲᯲᯲᯲᯲᯲᯳᯽᯽᯽᯽᯾᯾᯾᯾᯿᯿᯿᯿᯿ᰀᰀᰀᰁᰁᰅᰆᰆᰆᰆᰆᰇᰇᰇᰊᰊᰊᰋᰋᰌᰎᰎᰏᰑᰒᰔᰔᰗᰗᰗᰗᰘᰘᰙᰙᰚᰚᰚᰝᰞᰞᰟᰟᰠᰠᰡᰡᰢᰢᰢᰢᰤᰤᰥᰥᰦᰧᰧᰧᰫᰬᰭᰮᰯᰱᰲᰳᰳᰵᰵᰵᰵᰶ᰷᰷᰻᰼᰾᰾᰾᰿᰿᰿᱀᱁᱂᱃᱃᱄᱄᱄᱅᱆᱇᱇᱇᱉᱉᱉ᱍᱍᱍᱎᱎᱏ᱐᱐᱑᱑᱒᱒᱒᱒᱔᱕᱘᱘᱘᱘᱘᱘᱙᱙᱙᱙᱙᱙ᱚᱛᱝᱞᱟᱠᱡᱢᱢᱥᱦᱦᱦᱧᱨᱫᱬᱭᱭᱮᱮᱯᱯᱯᱯᱰᱱᱱᱲᱲᱲᱳᱳᱵᱶᱷᱷᱷᱷᱷᱸᱹᱹᱺᱼᱼ᱾᱿᱿᱿ᲁᲁᲂᲃᲄᲅᲅᲅᲅᲆᲇᲇᲈᲐᲐᲐᲐᲐᲐᲑᲒᲒᲒᲓᲓᲓᲔᲕᲗᲘᲙᲙᲛᲜᲝᲝᲝᲞᲞᲞᲞᲠᲡᲢᲢᲢᲢᲢᲢᲣᲤᲦᲧᲨᲩᲪᲫᲭᲮᲯᲯᲯᲯᲯᲰᲰᲰᲰᲰᲰᲰᲱᲱᲲᲲᲴᲴᲵᲷᲷᲷᲸᲸᲹᲺᲺᲺᲽᲾᲾᲾᲾᲾᲿ᳁᳂᳃᳅᳅᳆᳆᳆᳆᳇᳔᳔᳔᳕᳕᳖᳗᳗᳗᳘᳙᳙᳙᳜᳜᳜᳝᳞᳞᳟᳐᳑᳒᳚᳚᳛᳠᳠᳡᳡᳡᳡᳢᳢᳢᳢᳢᳢᳣᳤᳦᳦᳦᳦᳦᳦᳧᳧᳧᳨᳨ᳩᳩᳩᳪᳪ᳭ᳮᳮᳯᳯᳰᳰᳰᳰᳰᳰᳱᳱᳲᳲᳳ᳴ᳵᳵᳶ᳷᳷᳷᳷᳸᳸᳸᳹᳹ᳺᴀᴁᴂᴂᴂᴂᴂᴃᴃᴄᴄᴅᴆᴆᴆᴆᴇᴈᴉᴊᴊᴊᴊᴊᴊᴊᴊᴊᴊᴊᴋᴌᴍᴎᴏᴏᴏᴐᴐᴑᴓᴓᴔᴔᴔᴔᴕᴕᴕᴕᴖᴖᴖᴖᴖᴖᴖᴖᴗᴘᴘᴙᴙᴜᴝᴞᴞᴞᴞᴟᴟᴠᴠᴡᴢᴢᴤᴥᴥᴦᴧᴨᴨᴨᴨᴩᴪᴪᴪᴫᴬᴬᴭᴮᴮᴮᴮᴮᴰᴰᴰᴰᴲᴲᴲᴳᴴᴴᴴᴵᴵᴶᴶᴷᴷᴷᴸᴸᴹᴹᴺᴻᴼᴼᴼᴽᴾᴾᴿᵀᵁᵂᵃᵃᵄᵅᵅᵅᵇᵉᵉᵊᵌᵌᵎᵏᵏᵏᵏᵐᵐᵐᵑᵑᵑᵒᵓᵔᵔᵖᵙᵛᵛᵜᵝᵞᵞᵞᵞᵞᵟᵠᵠᵠᵡᵢᵣᵤᵤᵤᵥᵦᵦᵧᵧᵨᵩᵪᵫᵫᵬᵭᵮᵯᵯᵯᵯᵯᵰᵱᵱᵱᵲᵳᵳᵴᵴᵵᵶᵷᵸᵸᵸᵸᵸᵹᵹᵹᵻᵻᵻᵼᵽᵽᵽᵾᵿᵿᵿᵿᶀᶄᶅᶅᶅᶇᶈᶉᶉᶋᶌᶌᶎᶎᶏᶒᶓᶔᶔᶕᶖᶗᶗᶘᶙᶙᶙᶙᶙᶙᶙᶙᶚᶚᶛᶛᶜᶜᶝᶝᶞᶞᶞᶞᶞᶞᶟᶟᶟᶟᶠᶠᶠᶠᶡᶢᶣᶤᶤᶤᶤᶥᶥᶥᶥᶧᶧᶧᶧᶩᶪᶪᶪᶫᶫᶮᶯᶯᶰᶱᶱᶲᶳᶶᶶᶶᶷᶸᶹᶻᶾᶿᶿᶿᶿ᷐᷎᷎᷎᷎᷎᷺᷺᷺᷺᷺᷂᷂᷂᷊᷊᷊᷊᷊᷏᷹᷽᷿᷿᷷᷀᷀᷁᷁᷁᷃᷄᷄᷄᷄᷅᷅᷅᷆᷆᷆᷇᷇᷇᷇᷇᷈᷉᷋᷋᷋᷑᷑᷒᷒᷒᷒ᷓᷓᷔᷕᷖᷖᷖᷖᷗᷘᷙᷛᷜᷜᷝᷝᷝᷝᷝᷞᷟᷠᷠᷠᷠᷠᷡᷡᷡᷢᷤᷤᷥᷥᷦᷧᷨᷨᷨᷨᷩᷩᷩᷪᷫᷫᷬᷭᷭᷭᷭᷭᷮᷮᷮᷮᷮᷯᷰᷱᷲᷲᷲᷲᷲᷲᷳᷳᷳᷴᷴ᷵᷵᷵᷵᷵᷵᷵᷻᷻᷻᷾᷾᷾᷾᷶᷼᷼᷼᷍᷍᷍ḀḁḂḂḃḃḃḄḅḅḊḋḌḍḎḎḐḑḑḒḒḖḖḖḘḘḘḘḘḘḘḘḘḙḙḙḙḙḙḚḛḜḜḜḜḜḜḝḝḝḝḞḞḟḟḟḟḟḠḠḢḣḤḤḥḥḥḥḥḦḧḨḨḨḨḨḨḩḪḫḭḭḭḭḮḮḮḮḮḮḯḰḱḱḲḲḳḳḳḳḴḵḶḷḷḸḸḹḹḹḹḹḹḹḹḺḺḺḺḻḻḼḼḼḽḽḾḿḿḿḿṀṁṁṂṂṂṂṂṂṃṄṅṅṆṇṇṈṈṉṊṋṋṌṌṍṍṍṎṎṎṎṏṏṐṑṒṓṔṔṔṕṕṖṖṖṖṘṘṙṙṙṚṚṚṛṜṜṝṝṝṞṞṞṞṞṟṠṠṡṢṣṤṥṥṥṦṦṧṨṨṩṩṪṪṫṫṬṭṮṮṮṯṰṰṱṲṲṲṲṲṲṲṸṹṹṺṻṼṽṾṿṿṿṿṿṿẀẀẁẂẂẃẄẅẅẆẆẆẆẇẇẉẉẉẉẉẉẉẉẉẉẉẉẉẉẉẊẊẊẊẊẊẊẋẋẋẋẋẋẋẋẌẌẍẍẍẍẍẍẍẎẎẎẎẎẎẎẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẏẐẑẑẑẒẒẒẒẒẒẒẒẒẓẔẔẖẖẗẘẙẙẙẙẙẙẙẚẚẛẛẛẛẛẜẜẜẜẜẜẜẝẝẝẝẞẞẟẟẠẠẠạạẢẢẢẢẢẢẢẢẢẢẢảẤấấấẦẦẦẦẦẦẦẦẦẦầầầầầầầẨẨẨẨẨẨẨẨẨẨẨẨẨẨẨẨẩẩẫẫẬậậẮẮẮẮẮẮắắắắắắắẰằằằằẲẲẲẲẳẵẵẵẵẵẵẵẶẸẸẸẹẹẹẹẹẹẹẹẹẺẺẺẺẺẺẻẻẻẼẼẼẽẽẽẾếỀỀỀỀỀỀỀỀềềỂỂỂểểểểểỄỄỄễễễễễỆệệỈỈỈỉỉỊỊỊỊịỌỌỌỌỌỌọọỎỏỐỐỐỐỐỐỐỐỐỐỐỐốỒỒồỔổỖỗỗỗỗỗỗỘỘỘỘỘỘộộộộộộộộộộộộỚỚỜỜỜỜỜỜờờờờờờờờỞỞỞỞỞởỠỡỡỡỡỡỢỢợợợợợợỤỤỤụụụụụỦỦỦỦỦỦủủủủỨỨỨỨỨỨỨỨỨứỪừừừừừỬửỮỮỮỮỮỮỮỮỮữữữữữữữữỰỰỰỰỰựựựựựựựựựựựựỳỳỳỳỵỶỶỷỸỹỹỹỹỺỺỻỻỻỻỻỻỻỻỼỼỼỼỽỽỽỿỿỿỿỿỿἀἀἀἀἀἀἀἀἀἀἀἀἀἀἀἁἁἂἂἂἂἃἃἃἃἃἃἃἄἄἅἆἆἆἇἇἇἇἇἇἇἇἇἇἇἈἈἈἈἈἈἉἉἊἊἊἊἊἊἊἊἊἊἋἌἌἌἌἍἍἎἎἎἎἒἓἓἓἓἓἓἓἓἓἔἔἔἔἕἕἕἕἕἘἘἘἘἘἘἘἘἘἘἙἙἚἛἛἛἛἛἛἜἜἜἜἜἜἝἝἝἝἝἝἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἠἡἡἡἡἡἡἢἢἢἢἢἢἢἣἣἣἣἤἤἤἤἥἦἦἧἧἨἪἫἫἬἬἭἮἮἮἮἮἮἮἮἮἯἯἯἯἰἰἱἱἱἱἱἱἲἲἲἲἳἳἳἳἳἴἴἴἴἴἴἴἵἵἵἵἵἵἶἶἷἷἸἸἸἹἺἻἻἻἼἼἼἼἽἽἾἾἾἿἿἿὀὀὁὂὃὃὄὄὄὄὈὈὈὈὈὈὈὉὉὉὉὊὋὍὍὍὍὑὑὒὓὓὓὓὓὔὔὔὔὕὕὕὕὕὖὗὗὙὛὝὝὝὝὝὝὝὝὝὝὟὠὡὡὡὡὡὢὢὢὣὣὤὥὥὥὥὥὥὥὥὥὥὧὧὧὧὧὨὩὪὪὬὭὮὯὯὰὰάὲὲὲέέὴὴὴὶὶίὸὸὸὸὸόόὺύὼὼὼὼὼώώᾀᾀᾀᾀᾀᾁᾁᾁᾂᾂᾂᾂᾃᾃᾃᾄᾅᾆᾆᾇᾈᾈᾈᾈᾈᾈᾉᾊᾊᾊᾊᾊᾋᾋᾋᾋᾋᾋᾋᾋᾋᾋᾋᾌᾌᾍᾍᾎᾎᾏᾏᾏᾏᾐᾐᾒᾒᾓᾓᾔᾔᾔᾕᾕᾖᾖᾖᾖᾖᾖᾗᾗᾗᾗᾗᾗᾗᾗᾗᾗᾗᾘᾘᾙᾙᾙᾙᾚᾛᾝᾝᾝᾝᾞᾞᾞᾞᾞᾞᾞᾟᾟᾠᾠᾠᾠᾠᾡᾡᾡᾢᾢᾢᾢᾢᾣᾣᾤᾥᾥᾦᾧᾧᾨᾩᾩᾩᾩᾪᾪᾪᾪᾪᾪᾪᾫᾫᾬᾭᾮᾮᾮᾯᾯᾯᾯᾰᾰᾱᾲᾲᾲᾳᾳᾳᾳᾳᾳᾴᾶᾷᾸᾸᾸᾹᾺᾺᾺΆΆΆ᾽ι᾿᾿᾿᾿῀῀῁ῂῂῂῃῃῃῃῄῄῄῆῈΈῊῊῊῊῊΉΉῌῌῌῌῌῌῌῌ῍῍῎῏῏῏῏῏῏῏῏ῑῑῒῒῒῒῒΐΐΐῖῖῖῖῗῗῗῘῘῘῘῘῙῙῚΊΊ῝῝῝῝῞῟ῠῠῠῡῢῢΰΰῤῥῦῨῩῪῬῬῬῬ῭῭῭΅΅΅΅`````ῲῲῲῲῲῳῴῶῶῷῷῷῷῸῸῸῸῸΌΌῺΏΏΏΏῼῼῼῼ ‐‐‑‑‑‑‒–—――‖‖‗‘‘’‚‛‛‛‛‛‛‛“““””””„†††††‡‡‡‡‡‡••••‣‣‣․………‧\u2028\u2028\u2029 ‰‰‱‱′′′′′″‴‴‴‵‵‵‵‵‵‵‵‶‶‶‸‸‹‹‹›※‼‼‼‼‽‾‿‿‿‿⁀⁀⁀⁀⁀⁁⁁⁁⁁⁁⁁⁁⁁⁂⁃⁃⁃⁃⁄⁄⁄⁄⁅⁆⁇⁈⁈⁉⁊⁊⁋⁋⁌⁌⁌⁌⁌⁌⁌⁌⁍⁎⁏⁐⁒⁓⁓⁓⁓⁔⁔⁔⁔⁕⁖⁖⁖⁖⁖⁗⁘⁙⁙⁙⁙⁙⁙⁙⁚⁛⁜ ⁰⁰⁰⁰ⁱⁱⁱⁱⁱ⁴⁴⁴⁴⁴⁴⁴⁵⁵⁶⁶⁶⁷⁸⁸⁹⁹⁹⁺⁺⁻⁻⁻⁻⁻⁼⁽⁾⁾⁾ⁿⁿⁿⁿ₀₀₀₀₀₀₀₀₀₀₁₂₃₃₃₃₄₄₄₅₅₅₆₇₇₇₇₈₈₉₊₊₊₋₋₋₌₍₍₎₎₎₎₎₎₎₎₎₎₎₎₎₎₎₎₎ₐₐₑₒₒₒₒₒₓₔₔₔₔₔₔₔₔₔₔₔₕₕₕₖₖₖₗₗₗₗₗₗₗₗₗₘₘₙₚₚₛₛₛₛₛₛₛₛₛₛₛₜ₠₡₡₢₢₢₢₢₢₢₣₤₤₥₦₦₦₦₧₧₧₨₨₨₨₨₨₩₩₩₩₩₩₩₩₩₩₩₩₪₪₫₫₫₫₫₫₫€€₭₭₭₭₮₯₯₯₯₯₯₯₯₰₰₰₰₰₱₱₱₱₱₱₲₲₲₳₴₴₴₴₴₴₴₴₴₴₴₴₴₵₶₶₶₶₶₶₶₶₶₶₶₶₶₶₶₶₷₷₷₷₷₷₷₷₸₸₹₹₹₹₹₺₻₻₻₼₽₽₽₽₽₽₽₽₽₾₾₾₾₿₿₿₿⃀⃒⃒⃒⃓⃓⃓⃓⃓⃙⃙⃙⃚⃚⃚⃚⃚⃚⃚⃚⃐⃐⃐⃐⃔⃔⃔⃔⃕⃕⃖⃖⃖⃖⃖⃖⃖⃗⃗⃗⃗⃛⃛⃛⃛⃜⃜⃜⃜⃝⃞⃞⃞⃞⃞⃞⃟⃠⃠⃡⃢⃣⃣⃣⃣⃣⃤⃤⃤⃤⃤⃥⃦⃦⃦⃦⃦⃦⃦⃦⃦⃪⃪⃫⃫⃫⃫⃫⃫⃨⃨⃨⃨⃨⃨⃨⃨⃨⃨⃨⃨⃬⃭⃭⃭⃭⃭⃭⃭⃭⃭⃭⃭⃮⃮⃮⃮⃮⃮⃮⃮⃯⃧⃩⃩⃩⃩⃩⃩⃰⃰⃰⃰⃰⃰℀℀℀℀℀℀℁℁℁℁ℂℂℂℂ℃℃℃℄℄℄℅℆℆℆℆℆ℇ℈℈℈℈℈℈℈℈℈℉ℋℋℋℋℋℌℌℍℎℎℎℏℏℐℐℐℐℐℒℒℒℒℒℓℓℓℓℓℓℓℓℓℓℓℓ℔℔℔℔℔℔℔ℕℕℕℕℕℕ№№℗℗℘℘℘℘ℙℙℚℚℚℜℜℝℝ℟℟℟℟℟℟℟℠℠℠℠℡℡℡℡℡™™™℣ℤℤℤ℥℥℥℥Ω℧℧℧ℨℨℨℨℨℨℨ℩℩℩℩℩℩KKKÅÅÅÅÅÅÅÅℬℬℬℬℬℬℬℭℭℭℭ℮℮℮ℯℯℯℰℰℱℱℱℱℱℲℲℲℲℲℲℲℲℳℳℳℴℴℴℴℴℵℵℵℵℵℶℶℶℶℶℶℶℶℷℸℸℸℸℸℸℹℹℹℹℹℹℹℹℹℹ℺℻℻℻℻℻ℼℽℽℽℽℾℾℾℾℿℿℿ⅀⅀⅀⅀⅀⅀⅀⅁⅂⅂⅂⅂⅃⅃⅃⅃⅃⅄⅄⅄⅄ⅅⅅⅆⅆⅆⅆⅇⅇⅇⅇⅈ⅊⅊⅊⅊⅊⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅋⅌⅌⅌⅌⅍⅍⅍⅍⅍⅍ⅎⅎⅎⅎⅎⅎⅎⅎ", labels = ".abcdefghijklmnopqrstuvwxyzabcdefghijklmnoprstuvwybcdefghijklmnopqrstuvwxyzabdefhijklmnoprstuvwyacehiklnoqrstuyzabcdefghijklmnoprstuvwyabcdefghijklmnopqrstuvwxyabdefhilmnoprstuyabdeghilmnoprstuwyabefhiklmnoprstuwyabcdefghijklmnopqrstuvwxyzaeouabefhiklmnorstwabcdefghijklmnoprstuvwyabcefhiklmnoprstuwabcdefghijklmnopqrstuvwyzabcdefghijklmnopqrstuvwxyabdefghiklmnoprstuwuabcdefghijklmnoprstuvwyzabcdefghiklmnopqrstuvwyabcdefghilmnoprstuvwyzabcdefgijklmnoprstuvxzaeiovyabcehiklnoprstyacehiopqtuxabcdeghilmnoprstwabeilmotzcdflmnrstuvwaeruaehioeioruabeglnqrstuvyeoaeioaeiodmnrsuioaeiaeioueiodfrstueioraeioucehiptyaehiornprseieie.aeiloruaehirtudeilorsurfaeilnouyaeloaclnteadeilmoyaeiopadegiknostuaehilosuuabcdefimopqrs.ahiklopstuyaehiorstuybglnrstaeioailsiaesiz.cdglnrstzei.adglmnstvwybdeflnotaeiouedelmnorstuiouolorfglmnrst.sbcdghlnprstvhio.dilnprstw.aeiostacefgilmnopstziaeiyaegilmnprsuvwzaeiouaeiruwdfilmnprste.bcfglmnrtvyai.abcdefilmnpqrstvyaeiy.acdefglmnoprstvaeiouy.defglmnoprsuvwxaeiouypwyahaceglmnopnsbcdglmnrstveiracehilortuadegiorucdflmnpstxefiouaeinouyecdgmnrtuilaefilostuabeinopuyacdeinostuyzfgilprstuwaehilorstuuabcehimnostuwacehikmopstuwaehinoruyzcnprstaeiouaehipcesbcgilmrtu.abcdlmnrveilyacdglnstaeiouynrsaeiooyegmnrstflmnrstz.delnorstveloiot.acelmnorsuvzaeioyaeio.beginorsvaeiouthaeinstnrbcegilmnprstuzacdlmnoprstuxacglmnoprstvaoeadglmnorsuveohaeygmnstapslmnpsteiloruacehilortuadeilorudglnrst.aefiltaehilnorukaefilnotuvaeinopu.acdefgiklnostuy.glmnprstuehiruuadegimoru.acefhiklmopstuaehiortuzeiooaiocnprswpd.bgildeglnrst.clmnpseyeorsuvochlybcdgimnrstviehieirabcfgmnprsvyraeoabcdfgklmnoqstvzaaefioeio.abcfgmnoprstuvahilrceiaehiruabcefimnopsteabgmnsbcghilnprstai.dglmnorstv.adglnostzaaiocdegiklmnrstuvaehiotyhidlmnpubcgklmnrstuvaehioruaeituw.abcdglmnopqrstvwiaehilosuyaeabdefgkmnosteilreeeibcdegilmnprstuvwiruaceilmoptaeirsuadefimnotmpadlrstaeilruehilortudeioulnrtviaeilnruyacdfglnsteiadefiloptuvyabeimopacdegikostuvdkprsaehioruyaegimnoprstuyaciloptaehiobcelnveiodeinoiacdgilnprtvy.acdeklnort.aeilostuyacdeglnotaioucdegilnprstuaeoaeioehiaehioruwbeflmnrstaeibcdfilmnoprstuvzaioehiuai.abcdfgilnoprstuvwuyeilou.aabcdeglmnopqstv.ehlrseioaeiyaeioubcefklmnoprstvxaehioeioyacehiopwaehirsaegimnsteiocntsbcilnptuvwaehiloruy.acdgilmnprsuvwx.eiowbcdglnorstuvzeiyaeioaeiocfglmnprvaehilouacehilnptuw.abehilorsuwyabgilmnprioclnrt.bcdfgilmnprstuvwxhr.acdeglmnoprstuxy.aeilosyabcdefglmnoqstuvzaeioebcdfgilmnrstuwaeiouchweoruabdefimnprsahioalpebcdnrtveilailruydeiosuanralhilnrtvacdegilmostuvabiopaeistuyzrsueilptabcdefilnopstuaceilpstuaeilosmue.bcglmnprtu.dglnrstadfgklnoprstv.iklmrtbcgilmrstvadelrsvidlnrstzeiokmvaihlptcgmpscdriuacdmbaeuiacrtehoerstialoubepcdgixdgmnseiotuaiorceiostuhibrnprtalsmopewyhdttacgitstcpstodingnsrsitmnprtlitenrmorscticmrsrdeagsurhleesrsnoabrnmprstbenvlompceksurirlrcmtginpvgnotglnrgrtmsnrtocendtacdtthtdteotlsecntvemsgtqswdilmnrnhiaplnlmnnpquiacdekoueanrcbllnratalolbroreenooilmiraceotuewaucmiibnlougnel.yioenbdrinoaeeig.stzbgrstnrcflnnreglrteiloensuilcefmnopstuliatacgnptuvaiorwalrrtareilntclrseecdlmnptuvwahiraensilaemnozidnoaeahbniabctichherrmbclpcgnrsveo.abcfotgmpsokaehaelrhuidiehgnnregocryycdleikgeadeibioshrntktaeiiuioiuptirwioinriladegmruiruznt.nsnsnngiiba.adeinahounttsrfaiiteistaeiotilhealodeityeotyahiaaamnu.e.lceitaastabnadlmnrenotz.hibrriaaiaegoqnehitiramcmgrnioeaegtahilboeseaeistadtvfnstcepsdbnrcmortitaeiiyaisirhogdkyaioebbflioailo.ifio.ioaotuaiuhmns.ciotuioitbaetnfeaeaeigletiti.adseeaioiaidptogianbflpmpwpblaetlebpeeptieeoediaceiktpstehiueiolntdnasabfmtaulmnreaelrslabcmtzlniliiyatyrclntrslrbcnt.slrrlbfgsdehydna.cntwxabcdgnrsbcegmnostvaoacgphadgcgnltcegnszignilnmnhiaemrstwcelostuzgsvwahaf.raeootinlntenieohitibnrtlh.acilmnqstacenotuviobcrueelwtagarucnraecdgmnsuiilnaeiriaiorrbnooycdnrtnaeioamloeirpsalnrdlnvcgelnt.lrenlaitaholstratiodmrsensy.aehisuehilyadegnttgsnrwodtaeittaslllieiisa.ioeoionshiziyacioydmyihioyrunuowrionse.gslldsabgsbr.ctnomnrsadiio.dinpynsetfertaalhmturacdgiktaltadlptscnadraoiloparabenoypeanoheanelopresehnrtuiseaeaeaydnaituepseenprnosikttrehoecitesirurantiinmprsyuodnpycayeulmorinasaeotuemwoeadaent.ctcrercebrtblntirteirbdmrgrvabostzaqyrgrntdlntineluvelersraeilou.aostcsteu.hseraeihihiorrcelaeibcedflsidstzignelgrshraobdstasmiyaeaeilrs.bgmntrsiacglmnosmnayadl.lnrlotrtrnquaestgsidtylo.deghyshinaioieynnodetcgieaeianairsidsitt.ega.ceothraegiocqsaeersgmrstiiostuyaeieflahrbiopaeikgp.hieltwacglntlnsquwtndndaoieiouegideimaio.eotantbaintegnanriesrrhinpdabinkrstntaeoetahlindadilt.iuhgilvcetehitlnv.iyroto.adeistnstaehragiladegitutelthbrnrloseeegioyaoephfsrtaaenrsrsuvraratu.ateiticikceilmctaostersaeintuinsbeftzhcreraukaeaiioeoaeir.kptwienblnraobntavhpmbnpaliririeg.thiorrtnustavlelesioaeioyaeioacetanelebtesdgoceiabrbefnpeomnfnteiredetibrlnilaefladaeiolrelcotrcgsatrtnorestyioinbeefegtmotensenserstiacdfglnostvignrlbmnshltelcnrtacdnegnircnionsucosuedmrtupueimaeiidtdraenstns.glnaiswuaclnotuiefuehethiymleoretuahoainlrseicfssalhtcdnrastlelsidaetanmaetyuadeiehrreidvaiactnaimnotuveirnrscelnszbnrnaiyaeicnro.donhunsacegnim.mtneyiysanrdlnrtsyceflmnrstvenscfglstubbmmorecrertisv.rtnviohliftoeioeghiorehceiitaeibgfnnaebtmlaenlnrvwriorteiaeiyitiutiouiou.psteirtaeiohrtcnstnlbglaaeioenrtaiiaiopadeghl.chpaeiueiotoeia.dqgscnrnotrlrtycstvulorlpeieeeipaeitmteiiopshryaeuanrtncfosovnsstcrsvabncgbnoobdeglsveiohlnlnpktciilnrsycvgckrtaemotcdaaiuonptvdisiorenueifpuatswotelrefvaeioacdegitat.lovhtmeirvnopvelnrceineyaegnaeitnsttvlnlntletaadiuv.aghcdicincnoreoclnoyknrtaicslnstaaeglierglmnprtdrwe.acefnrecmnpraiycpllstiemcoihloioolaeikloiodtaelaceireyiuniceicdtetiei.eisaacdetecdginv.shlnaitclndgkorlsbntkouinyulpuaeiocnaemoptlaaen.dsterorcoabyaoyaiirtabcisvafmacmvflmnpsvishsirii.einoysaehraiaditlrnebtersvcestnimestienigmaebtheniansaieirulbilnrtrmnsvwaesranoiu.glseaerafnotzioseieehidnpiaracilerrbt.lnlnoszfgmnuiueuiouoiiiid.loyoudeimst.teylneiniacdglruoiouiryicraetviaiyaeleot.tteertnktvlteldgehsneepteeouiolieincdiremtftaotahcesdrcamacosarriconlhetmeiiyemaeamttpcaoalrgnoaictvbtimmiiyermotgmtdkoaoreoliitntyehecaaoatacaeieteoafteetlaeinytamtiecitutdefliiginbeeaogkaiosbteerdaalidatigldoutbfn.arneslirnndt.vc.taciotayoineyciisswteseiehizchororldenrborlauaitsteiegilaenstslntaint.naploho.antmnrmnuipgsatfbnoanyrureeaianiyagrzefzartrbhovadhpddtcitoldhqeieeidoenmntaicszyrmeisvlptnmiipoie.sveiucrtm.caizaercrrocntt.itaiocloegtuimyiubnaievnbvstnnlaimneqclnrsriicirclimrtt.znrid.srztroratlel.r.seoerruresclenifn.scssiyemsmpcaomnaaioeieieegtidiarae.arighib.aareihsziaotecxoitrshgearlctiecdhbbalsdielon.oacetstnknreastztruenrctvnentnuacrrebngmnourddleoiacfgsiltlogibgeshethuei.lntnraeltiieeseeretytacntszvnsztyzctea.neidhiito.eozzuahsvdnsmiy.eozernseeeehntiytpaaudrellseizzrtcseneliounetttviat.e.aaaaaclnrsuieon.aiteatbeytaeidalriasanieiyrtrafdteeun.vnnpinelns.yaiaiilaklemmtl..s.eotanmiyn.estaceelteenlvileieaant.ibo.rioor.rrtalaeocrahutgeeltscrz.teutpdgealsai.ieemyinpgniyaszsrinzyeszgaceoanceueailiiybaetaielstriryaaecstyeaszcels..nyeiaissiiscoriratithilme.oslsrtcrctzbricieeir.cz.aoropsleriglncszgqszlbrlmciiobsregpleeseggstmcttraedlittetioezsrtenertscte.og.heieioeihasr.aineoltyiiymoinfanrgmiiglhtaygnioryvpioyetlte.stos.aedienstnirtintalybglmilsriyilacenh.bgsaeinzio.agteideaatarabct.eptaieiomaaaeepsetoaeiieedalsreinitaleugointuoearyfloileegrrgraplmeastcrsaensiiarrziillrllg.sderctnzne.eibdrcrltlnuuhsgtailr.stlsalceeollt.gtir.ahdurilytuplynli.teirserorteotodtyrphpstltdndleonsdt.dsza.asoegchalhdmbctiyeiidrigetlthg.tnrnynaipdtt.inoakgkaeaedtybdriirmnielnonaigneatrzhcrstehirgrtnsaeceszi.eeasts.akeioeeiac.oil.mein..ragltezcrhittecileisieiiyhiopibssalanog.tdsyelnzrierghrbssaygohbrssgrb.trlinrsee.nriiegnaleezeveime.ilnseieheiri.dnstztpedberegrihnsiennaaetzdtsdeblrrtaon.rrseroiebllreivihtlrsemeieiyniereillrcribhmoltsamontacdprsvenolsgngutrrerbczhisas.elastovntetgtaoaz.lrrgiberrsn.dnrgabcso.s.tnicedoesce.rni.sfzdaohdnlaedilsaceents.vabsaoresptpa.e..s.sanaeiaceovdaoendlra..nssa.eiy.rrnrsair.zhecteaanrsn.loaysovrlmr.eegsinsnidrbdid.aszergasildro.ohy.aarirnconeaicnceagliy.e.ytstlmthnitnbtku.sita.kkitsaoiotoiyybvlliaic.svrnepozmzaeydcanrg.ze.nieivrigeosiore.ctlereeccltlntipbrahtcculnsttotcdntrseriogrsn.etrlpn.iblb.stuc..s.sdhernidhcwirlzdtaehtimt.twikyecznoolsslou.adslibauudsesi.shreogi.satsmcnnrtznnectyiteonrsh.sactuesleurtt..t.cgezatrdvgycntapuwepnrroorlyiraoirsasmnottrtbereeosr.egsiceatygageihn..mprcdarrggycaascs.rcl..iy.e.nirsise.zvetss.izroailrrateoeisydfesciiegueilircbdiwcwbhigtszriarse.meitiu.i.erao.ybartoitoe..reztzstyln.szn.aim.asstcogb", weights = " 1 1 0- 1& [ ;: 3G -#¾:G & Á3 -? 4( 342Ê)4- k; 4 T-)B : I -] -W4-4J 4--1 ; - B0- - & 4?& :&4&&4? C3/44(# D 0- 4(40 (4 - -- &W:; ?KD - ; 3 3((& 33 & -3? & *4 - (#-#-- D)- ;D3 3WC & -3J 3:J& ;44:? :3 &:-:4:GD&4&4W ( W -\\:)D B--J- IB && I0)3 10 - 0 4:# && À¿:C :0J; (0 -- -0# ( -- -B\\ - 0? ? GC1 0I;B4 -3 4&0%4;&: ;: 3:J4: Dk4& )& 3 (I 4 K% -( 0% ½) &#---(((-I-# --- G- B -2&3;*&4 D \"6 \" 6 + +6 66 6 8 6 6 6 + 66 \"6\"\"66 + \"& 6 &
3 &#\" 2K21 %((#() n 32 & & 1 & 3 \" 1 ( 2 0$ & # 1 & - 11# à $ 1 2 $ \" \"\" * 4#1 & \\ 4Ï X/ $ 0#/C4 0 % /# / s #%( # *\" Xg 3 / 4/ \"\"& 6 Ú /! & 33 ;*$ \" 63\" 8 6 1 %'%% / 4P\"* &3 ß /s* 3 ; %42( 622&% 21*Å / - -4 68 ? C?3/ *g% %/ # / \" &#%% 1i0 # # &* B 8 # 00 ( - 0 - -[V && 0 0 0 qç ) 4 ! * )!6 - 00 !- ( && V)0M( -\"% )1 - 23 22R 32 & B0I&- -3 # & ! )( \" - )- ( 4* \" & * & # 3 8\" 1$ 3 ì*0' 6 %1 & \" 3 &33 44 #1 \" *Ç- \" */ #*/\"4 /%# --/'*Ë 6* 8 % +#3 //KÆ # * % 0 ' -#\" Þ # 0 1 # % %# # 01\"1 \" -)- &3 : ! 1 %1 (& (& &n 1 %- !2 & $ 2 13 &3 3&&3;3 2&& -# % \" $ - 2 3 &/ K 12 1 33- & # \" # +# /() \"14# -\" *º % #\" & T! ( % #% & \" (1\"(0 6 /)) + /Ì - -+ 1 0# / & & %)%1 - -6! \" $& 4 && 3 3 & &30 04 3 #*$ \" 1 1 # # Ö & 06 0 1 1%) /6&#J \" 1 %11 -- - 3 003 4/ 0-4 ## -1\"\"P # \"--# 1 - \"\" k/& #& 4 \" \" #1 1$ 0 # 2# %( \"\"(+ - ( -\" å % ( (1 - % 4 \" -0 0 0 01 1 223 $ # 1 3 -2'- - 0 #1 & # ! 2 % 2 % %% 2 \"/&0[%\" 0& 0 &$*4$ % 0 # È #4% 1 1# 11 %+\"\" #0 *0 3 1 1 6#1 03 [ 2 ä 66 \"% - (& $% 2 %1 \" E 1 % \"( 1# 6 ' Y ( -#1-- -) - $ 0 # (# $ ; * - \" * 6 - &# 0* B * *3 \"&2 ;404 *4*& 1 ( / % &3 -L -%% 0 !3 ! 0 # V1 r %00 0 &&/ /3 X 0 \"3 %-& ;4\" 4# //&3 0 & 3 4 63 4;4* #44) )\"$ 3 6 4 %\"% ) \"2 6&Xl/ /:- &&3 #&\" -\"#B ( ((%! % /( # +- # 0 VB& (! - 0 1-R \"!! )-- ($ - \"2 0 ( 6 2 1 DU \"#+#*É \" / &&+ ( \"3- # /*\"/ 3 \" - (\" 6 \" ' % 8 \"\"(# o +%' 1 6\"!! % ($))1( )-\"#)( () \" !! *!^\" % $( ) (## %\"2 ]6##-\" %%# \"%, 8+ ', ,' +88 8\",\" , = \" + \" + \" \" ,' ++ .5 '\"\" 55+ .\" + =6+ '\"+ \" ,.\u003c\"6+\" \u003c \" . +8+ 55 \" 6 \" = =\" \" \" 6 , \"6 8 8''+5' )) ' $ % 2 (2( $# ( (()#$ #(! %\" \"&/ !(! ' 2!$%& u \" %&*/!$ $! 2) ( 2 )( ( 2U ` $( $( !0 #0# + &0#$$),! & $ . . $ +#)ă, # ( ## # $00N ( ,#0# , ((æ+%!# 2 ! !' ! #&)N2$ %1%% # !#!!$ 5$ ' 2$) $ !-/###! ' #8 \"+ ( \",5$$$$!2$ !$ !$ ! !# \" ' ! $ ) %, ( '+ \"*:'** ).# & , #$, $ *& ) 2, &'\" , & # .\" , & *//&/ & 'oV & */6& #Z'& #/% -*6,&$ & \"&,!# '* \"%+'$ #& \" ,''! * \"'%, \"\" ( \" * 0(#$! &, +..& &'NL. & ! !* $ $$,0%* '12 Z # 0 E' %/l $ 4 *'#2 *â1/ / Ý!#, ,+\"? & *\" , \"& ( - !( ##'( # ) +\" '6!(5 A '' %%% . % $\" 1 1 #%U\"8($ $2'%=%%++##,# %, / &,!# ć%%2),!((- \"+$)%\"#%% % ( *% )U- ) (1 w&,-)! 0#)!%%)1% \" ø%$ \" $%+ ))$ ( ))( $)*\"%$# $!( $ #)( ) , % (# % \" $ #$3 \" ,ª -&#\" $!)\"2 &$\" 1(!1 ( 11 LY \" #11 \\31\" ( 2 ,) (( $! $, !«1) 2$\"%\")%). (*$+#, K $ & , &*$#6 *%% L%C /\"&$ ' &*«0\" , \" \" \") ,.! !$,\"&*/$ ) &~,5 , & &&Ø$%*. &#(.$ # ' %. P »\"( * \"( +%T 1% % $Ä $ * %= &\" &,) !E,\"\") $ \" \" +' 6 ' ,+4/ cR )\",'% ( (Z y!#. % \"$\"\" \" , , ), #5\"!/, !\"84 . %2 ! \"} $$ &+X!, % !$ $L)&*&.%,&) 1%L*%#= #!(% \" )$2!(%$!\"5~\") -(- # (' ($$$ $!)'2R L (2,$0$ 30 $#!% & &#( A& ( &&& &&)%$2 M\"%$ 3),0 +!+!)#% #b$( \"%' %ā%! # Â \" !!$.$$ $\") & 0# 22 !& %ë(( # &
$ 1 3&& ! )$& !2 A& \" ' *,!E #%.% \")&), '( %,%$\" +/ \"+\" Y, !% # .* * &/ 4$# \"/P% */( &5%#0 # ! & %(( / %# / +#M%+ !\"1 (\"%)(((EE2Ā )) %, # )/ *\". +(, * \"# 3'() (%! (, + , $,$$8!# * +, )Ă !$) 0 # *. & 1 + \"8*5 Č) \"& Q \"ý1\" &\",/! #2 %\"\" %\"/ \"%, ' &Ô %& #= $ $5)/ ( \" U)! .# *%&#) #& ,+&+\")\" /\". ( 2# %) \" ]-( )\"0( +* *# !#&# 1\"3 &3& ) %( !2(2)%,! %5$#$#!#0) \"* % $ ($ , \"\" ), t #$ ' &\"'!/ 5 ! A\u003c, %#) \" ) 6 \" ! (2)$ 5\" '`)\"1 $ 5% % 5 $+ 5 ) # )%(¸$] %'3. , ( ) ( !% 8$ (#( E ) ) ) \"!$ $)!' 0# %( )2 %$ #( !( #2(2) ( , R!.''+(.'2 () )A '$ ,#? )2- (06) !/#, #)$# )Y \"# #0 % % } ((' $ ! 6# ( o $ ' ##\" , \" $# /n0 //\"H# % ! % %+ !8 # 2* // \", #)$*/$ $%,%,(0/ + &\",\"*!Ĉ= ##8#* %)((( + +s \" + 8 %t+ \" +\"*$ '3// $ ) \"# 1 %!2 ', \" %%\"1,( M#5%\" ,2$ *# 2 0$# !2! 2%,!% 6 #$((\"))\"&\"# + %&% 2! * '/ 1\"\"\"*0%\"(\" 0 + (2# 1 %%'( %(%(%)()ª((%+ $ 2 \"\" \" 4* +! \" ## % ( \"\"% \"\",,, ( $S)M5 %( ' !\" ( % ( #R$#$ . ) ( ((\" 2* ( \"!\"/ ! + \" .%&% % P .%, ,'/Y)+2** & &\" ' z :%\" !' \"2*2$/. 5,) * \"&1 (*' ( ( 5,) #5 ú *P,\" ''! *\" g31. , &% %,& 5( ) % # 11 M % 6(%)-%( *- % & 2!5+ 4' &! ! +& ! !\"&& \"! , 8 &,*! !/ ,*ù // 4!+á 4 '&& ,& / & & # &%Õ*/!* & 1 / ! $/\"!\" $\"$ ,// &0! 0\"$ &&0 *& + , '\"* 3\" +', % $# C/* '!, 5! !\" 6++%( \"#5$ ,- !)%#8%, ! -\", ' , -#) 2 &!!# ,##1 +# % ) ,&% %# # (2(-$ #,## ,))#$' )( ! 2,\"(&&& %h!' )% +# '8! ! ( #% % & ## * *! K1'&+E2! $$&+& #)*/' ,## ) '.)\"\"2 \" 5'\"5 \"/5#$ #'% \"!.!% + !\",,% 5 ! %%.%0'! $/$ , $$ ! '.+ \" 7','+ . \" . ++, f7 5+> \" İ' ® .Ęď + 5> +S \" 7. .±.. 5 5+'{ ' \" ' . 5, | ...5777 9 ±9.,. . + ' H.! ! !1!!))!'#!$\"!, !$)''$ #!&)h'! ^ !!\".'$/$,(,$# '(#))$#*S7#'+#9\u003c#ġ !( $(!.5'$) , 9 !$)!$( ) $)$. $$!$$$.$') ' $ !# $ c!'\"$!!\"$\" 7, \"2\"!!'0_$ f!$28 êe7*eģ,+\"'ĵó>>, ,', / +¥!$\" \"'+\"!' Ģ&' 5&!/ >'/!$$ *+ z/+)&&&+ *\"$+' +5 .* +G* \".,!)%5 ! /~ !,#? \u003c& '#9# ! ,č/! 70# ++$0+ # /!00.;/&!'$ . 0'&&\" '!'++ '\"\"5'5)+%%. ( !)%%% %$'%#$$ !A*( !)!, 9 $(^$( A! #$!$ !`!)* !!% $2!!!$!$ +!!( %%$%c!5ü& #('+!$! &$!$ *(\"$%#&*$+* !!! ' )$! $ #b9$!() !,> )\" !$!$! .!$5),)$.''$7> . )G( ($**!7 \" )+ /\"!'...#!'$&\"!!# ! !8**('.-: ,'j 7 !'& F/-\u003c5\"\"* .Q\" $!5\" F#) \"'5\".)\"9, + +5)'' !5!>' +j#'% % $!!!%%!$r$!+!\"#'( !'&$5\"%'#'$' !') $9$ ) ! $ + !$x\"'+#* !$' 9 #9##\" \"$) S$h! %%$$$A !)`*5 & (\" +ċ \"'\" ! &( ## a #* .!* #*#&'+ #\"+ +) !$ ' /+m* !'' .!79 5 ) + ' $!\"\"*'+ !\"!$ A*=$ ''\"7\")/+! $ĉ/Q )% \" ' 'Ċ ' '5 $ 9$& ! 7.9!+ % 0f> !!9\" '$ +%) )( $ #'.%/ ą)(2 $*\"/()$)+$ . ¬ / Q\"8 ) ' ħ ,9 # 5\"(A\u003c +\"Q.!e((%$ * $)! Ğ!, %)/+$! ! $89( (! $)$) , $ $ $$) \"7/!$# $ 997/))$ % )' $$$'$ $ ( $$ !! $! $!( . 5# 9$! *( +\" 9''\"! ! ,9\",#\"% % 7+!!.+# ! /*þ# !. ' , *4\u003c .' ,*'+ \" ( / ĭ5( H5ö Ħ + Ĩ ,$m '1+$.\" +/'& !+!) \"\"$! # $'# +M\"! # $#b$!#+ ! $('*#'$$'+*\"*. x +''+¡#-u!!$ē !!* \"t\"$+ # ' )!$\"'\"! 9,-%5,%%- +\".-,!)*+9 \" l!ĺ ÿ & #'))&& &+ !7/ *!&*. /!!87 >*f #$ )¹ ,/ ! )%$ \" ! .,T* *8 ).*$*5* /% % %! Ľ!Ĥ '' !i\"> !$Û&#\"' ,!= +/& + ( . $'+!!*! +# '/¤ $/)Ü $$'+$'9 . & '.& + #+ Z %^(!$$\"\"+' )*$$!#b#'>#A.!+ #.$ 'j'# '!$#0# , ($ ' !! - ++)* %(%+ /+\" +!**G**m+ '&! į! >\u003c \"q! 9 !, >© 7 $!$-((¼\"7\"@',,7. . \" @Ŕ\" Ň\"7+7.'īň. . 'Ő 77\u003cĠ'.'F \u003c ' ,OOŜO'ŋF. .v ķ@Ş,yc)Np%% d!\u003c %! )!#IJ!! ) !p, '' 6Ã\"¨¨ 6\"..'@*N.* * ĩ=*+ĚS \" C#Ń '#7.8'# Î.e Ĺ*ěr! !% .%!!!H!7,'&$ !&!%%%%%!!,ľ!@ )!Ł8F&. ¬ .66 ô* &&.ĸ.'\"ŝ .' '#\u003c ¯ ,´ ) *7\"O !'& % &Ð) 4 ®&œ Ŀ \"\"\".*.*Q@ ō0# S) *û¢! £ņ² & Œŗ*!/H ')ã \")Ė_!\"\"5ð Ŗ' ŕĶ' ė7!-$ ' ¥i|Ď #2!. 75\u003c!!!.. )!Ą!Š!!*\u003c(Ī &2!!! \u003c &!A)9 Ĝ'x.,è¦v.' a5*#..\" *#H'5 .ĥ8 ' . śĴ\"\" } _O!ï)¤' !#.! u!!'')''%_ $''2Ć O>7 ¦H% Ù7 ¡Ĕ \u003c6.. ò0*)T+FH 9wń O 7î * ő\u003cŢ! $\"í£ \"Ñ6'.*÷a*+ §.'a.. !=\",, ' ¶ #'* + '§ 5 5 '\"#@\"\" !'7 p'>Ó '9 FŊ '.. #@ .N@.'Ŭ .v,|F ʼn' +7ş!)0 Ŏ7=,! š×Z ŭ 2N Ť '=\u003c1)*5\u003cF@!! Į- ´Í{d ',d *é!!z Ļ.E.' !ę*Ò7!wŧ@ Ē©ūy '=6 ··ŏ -¢ 'Đqţ²ij ļ+! @µµŚ 5Ō7 * Ņ*ť8ŀ,ĕ Ŧ$8' 48řŨ5d³ů@³!)¯!!ĝ7)¶ğ**{Ū!ũ ĬŮõ 9đıñ9 °°Ř'łűŰ", values = [1280,16384,1024,768,64,4,20480,48,80,5,12288,262144,16,327680,3,512,32,256,2,1,196608,8192,5242880,4096,4194304,20,18,65536,131072,3145728,84,83886080,832,1040,50,532,16432,1048576,52,73728,528,530,1028,1312,16448,21760,67108864,67,1360,17152,151552,33,320,772,1044,16388,17408,20992,34,516,592,1344,9472,13056,81920,263168,328960,393216,1179648,4521984,82,85,272,288,564,773,816,1088,1104,1536,5120,13312,16389,17664,20560,24576,196656,197376,204800,208896,221184,266240,274432,282624,1064960,5263360,5308416,6356992,100663296,6,36,65,68,257,258,259,260,514,560,576,771,800,1026,1027,1074,1108,1285,5632,12304,12368,12800,16386,16387,17184,20485,20544,21792,65792,69632,69635,77824,78336,86016,90112,135168,155648,196688,262160,335872,397312,1057024,1069056,3146496,5308419,5570560,16781312,16797696,34603008,50331648,84213760,593690624,17,35,37,69,304,513,544,545,562,594,597,784,820,833,850,1025,1029,1042,1089,1091,1092,1281,1283,1284,1537,4099,4101,4112,4144,4160,4608,4609,4864,8193,8195,8197,8208,8210,8256,8704,9216,12293,12352,13824,16400,16416,16469,16896,17248,20481,20483,20484,20512,24672,65537,65584,66560,69637,69667,70144,78866,87043,131075,131120,131328,131584,143360,196609,197440,200704,201216,262149,262176,262208,262224,263424,274448,278528,327728,327760,328448,328451,331776,340992,344064,348160,348165,405504,413696,1048579,1048656,1048832,1049344,1052675,1052677,1056816,1060864,1060869,1114112,1114368,1126400,1445888,2097152,2122496,2162688,2163456,2166784,2228224,2293761,3145729,3145808,3158016,3159552,3212800,3219504,3276800,3342336,3407872,3538944,4259840,4390912,5243168,5243648,5243653,5244160,5246976,5251072,5255168,5255680,5439488,5505024,5636096,5636352,6291456,6291504,6303745,16777216,16777733,16777984,16778496,16789792,16797952,16842757,16859136,16867328,17104896,17104912,17170432,17825792,17826048,17838080,18874368,19202048,20975616,23068672,23068720,23134208,33554512,33816576,50332416,50335760,53477632,55574608,67121152,67502080,68158768,83906560,84082944,100663344,100859936,101712384,268436736,268448609,268632064,269484032,285224960,640679936,822104064,1076888576,1080033280,1342177280,1342189584,1342504960,1347420160,13690208256,68720525312];
|
|
17
|
+
let offset = 0;
|
|
18
|
+
const starts = Uint16Array.from("!\u003c8:618:233;%083::4\"9877'0,2*-%&&.#%%&\"#$&$'%&('%##\")()\"\")%&!\")&,!)\".-+(%%\"$#+#!-!!)!!&!\"+!$\"$)!!#-$+(/\"%!/!&!'+!\"-!!#3!%!1!!'!!1!'$#*!!#,$+)+&(\"(\"#**-++\"..+'&%\"$*!!+%!)'!!$!%!#(!)!!+$$.%\"%+!&\"\"'!#/!.!!-!#\"\"+!#\"$&\"#''+)((*!!\"!+(1+&\"*0*!$!\"!$$$\"\"&!)!!(!#!#%\"%!!,\"$$-\"$!1!\"&$!0&!$'-\"!',#!,!!+!!\"$/(!#!'!-!('2\"*#-!%\"\"#1#!\"*'*!!#\"&')&&\")\")!#-(-&)!.(&'$&\"\",!!,!!+*!%!!-$%$)*!$1$%#3#�!'$%&0&%)')$!$\"+!*!1!!&.$%%!*'\"!,.*!#&3!#!2!!)2%\"!/!&$%,!%$\"($''$##&!!.&)$&/*'\"!\"\",).(!!+!!(\"(!#\"$!#%!!&!$#%\"#\"\"\"!$!$!%\"!!%$&&&%(#!#!%$!!$\"#\"\"\"\"\"%#%\"\"\"\"$#\"\"&\"\"\"$%\"\"\"##!\"!#$\"\"!\"\"\"\"\"\"\"##\"\"&####&\"\"\"\"\"$&%%$##\"\"\"#\"\"%\"\"\"#$#\"%$#$\"\"%!\"#\"!\"#!$%\"(!\"\"#\"\"\"!!#\"#\"\"\"\"##\"$\"\"#\"\"'\"\"\"\"#\"\"#$!!!##!!!!!!\"\"#\"\"$\"###!\"%&#%#\"%%%#+\"\"#)&$###$!%\"!\"+\"\"#%#'\"$!!##!#\"%\"!\"\"\"#\"\"%'#(%\"\"$%!!#\"\"!\"###$#\"!\"!#\"!!\"\"!\"\"\"\"$$\"\"!\"#!#$##!##$\"!\"!\"#!#$%%#$#\"\"\"\"!\"\"\"!'!%\"\"\"\"\"!!!\"\"\"\"\"\"$&!!#\"\"!!$&\"\"#$\"\"\"$!#!#%!\"$\"!!#'&!#\"#!\"\"\"!#!&\"$\"\"!!\"##!\"!\"\"#\"%%#\"\"\"\"##%%%\"#\"#\"\"!!!\"#$!##\"#!!!\"!!\"!\"$$\"!\"\"!##%!\"\"\"#$%$!%'#\"!!\"!!!\"$!\"\"\"\"\"$\"\"##\"!!%\"!!!!\"!!!$\"#\"\"!!\"!\"!##%$\"!!!!\"!\"$\"!\"\"!\"\"!#!\"\"\"#\"#'$%$#\"!#\"\"\"%#%\"#\"!!#\"'#\"\"!\"!#!\"!\"\"!\"!%\"\"\"\"%!##!\"!!\"\"$\"$\"\"\"')!+#%\"\"#$!#'\"#\"#!#\"\"()!$\"##\"!!\"!!\"#!\"\"!#$\"\"\"!#\"\"\"\"%\"\"+!)!#%\"$\"\"\"$$#(\"\"#%\"%\"!\"##&!\"%\"\"!\"!!\"!$#%%\"!\"\"!$!!\"!#\"!\"\"#\"$\"!#\"#!\"\"\"#!\"$\"!!(\"\"$&\"\"\"\"\"#\"!#%!\"#\"\"!!\"!\"\"\"#\"!$##\"\"#!!!\"#&#\"\"%!\"\"!\"\"#!\"##!\"$!\"\"!!!#\"$#!#\"#$!!!!\"$!#\"!&##!\"\"!\"!\"!!\"!\"\"\"#\"\"\"!'$&\"\"\"\"#\"\"$\"\"\"!'\"\"!\"\"\"\"!\"\"\"\"%##!\"\"\"\"#\"####%#\"\"\"#!\"$!!\"#\"!\"$!!\"$\"\"$\"$\"!\"\"&\"\"!$\"\"##%#!#&\"#!\"\"\"\"%\"#!!\"\"##!!\"\"\"%!\"#\"#!%$!'\"!\"\"\"!##%\"\"\"\"!#\"\"$\"'&!!!$##\"!!#!!$\"\"!$\"!\"\"\"\"$#\"%\"%\"#\"\"!$\"\"!#%!\"\"\"##&\"'#\")##!$\"$$#!\"!\"\"\"\"#\"!!\"!!!\"!!!!\"\"!\"\"!!#!%!\"\"!\"!!\"!\"\"!\"!!#\"#\"\"\"$$\"$\"\"!#!\"\"\"#\"\"\"$\"&#&$#\"!\"\"!&\"'$$$!!%%\"!\"$\"!#\"'\"#$\"\"#!\"#\"!%\"#\"$$%\"#!\"##!!!!\"#$\"#!\"!\"##!\"%\"\"!#!#!!\"\"\"#!$#!\"&$\"%$$\"$!$\"#\"(\"\"\"%!!!#!#(\"$\"!#!\"!\"!\"\"\"!\"\"&##\"#!\"\"\"&%\"!\"!\"#!!!!\"$\"!#\"$&###\"\"\"$#\"!!#\"&\"#\"!\"#\"!###\"!\"!%&\"\"!\"\"$#$\"\"#\"!\"!##\"\"\"\"!\"#!#%#\"!\"\"\"!#\"#!!\"\"#&$\"\"$\"\"\"\"!\"!#\"\"#!\"\"#\"\"\"&#!\"!!\"\"##!!\"!!!!\"\"#\"#\"\"\"!\"!##\"\"$\"#\"\"$\"\"!\"\"\"!\"#$$\"\"\"\"\"\"\"\"\"!\"#$\"#\"#\"$\",\"$\"!%!!$#%%\"###\"\"#\"%\"&##\"\"#!\"\"\"!##$#!!!%%\"(\"\"#\"\"#$\"!\"$$!!$#\"$#$\"#\"\"!#!#$\"\"#!\"!\"!$!\"\"\"%\"%$!!!\"!##!#$\")#!\"$'!$!!!!\"$$#\"\"$\"##&\"\"!\"#!\"#\"!\"\"\"\"\"&\"\"+$'\"!\"\"!!\"\"\"\"!\"!!\"!!\"!$$$###\"#!\"$&\"#$!\"\"#\"##!\"##\"\"$!&\"%#%\"\"#\"!$$%$\"%\"!!#%!\"!!\"$\"%\"$#\"%%!#!%%$!\"\"#\"\"##!\"#$!\"%%\"!#\"##\"\"$%####$#!\"%!\"!%##\"\"!%\"\"\"!!#$\"($\"!#\"\"\"#\"\"'#!!\"!\"!$!&#\"$!\"!%$$$#$\"!\"!###\"!$%(#%#\"\"\"!!#%%!!\"#\"#$\"#!\"!!!\"\"\"\"!\"\"##\"\"\"\"\"&!$\"#\"$%#%\"%##!%\"%\"!\"!\"!!(!$\"(\"&$\"\"!\"\"!!#!\"!\"!\"!!!#\"\"!#\"\"!\"\"'##$&##\"!!\"$!!$#\"!#%\"&!\"'#\"!!!!#$$!&!#$!$\"\"\"\"\"#%#!'\"!\"#\"%\"!!!\"\"!\"\"\"$$#!\"#\"&$%(#\"!!\"!\"!\"\"!!!!!\"\"&!!!\"!!!$!!!\"#%!!#\"\"!#\"!!!!$%\"\"!\"$\"!!\"\"\"\"\"\"\"#\"\"\"\"$#!!\"$\"!\"#\"\"!\"\"%\"#!!!\"!!\"#!\"#%\"!!\"#'\"\"\"#\"$!$\"##\"!\"#\"#$&!&!!!!!!##$\"\"\"\"\"\"!!!%#'####!\"!\"%$!\"$$\"!#!%\"$#\"!#\"\"!\"\"\"\"#\"$\"!\"!!\"\"#!\"\"!\"\"!\"!\"\"\"!!\"!\"\"!!!\"!#\"!!!\"#!\"#\"!!!!!\"\"#!\"\"!!!\"!!\"\"\"\"!!\"!!!!#!#!\"\"!\"\"!!!!$!!#\"\"\"!!!!\"!\"!!!\"\"!!!!\"!!\"!!\"#!#!!!\"\"!!!!\"\"\"#!\"\"\"\"\"!\"\"\"!\"\"\"!#\"\"!\"!\"\"\"!!\"\"!!\"\"\"\"\"!!\"\"\"$!!!#\"\"\"!!!\"#!!\"!\"\"!!!\"!!!\"\"\"!#\"\"!!!\"!!!\"\"\"\"\"\"#\"#\"\"\"\"!\"\"!\"\"!!!\"!!\"#!\"!\"\"#!\"\"\"\"\"\"!\"!\"\"!\"#\"!\"\"\"\"\"\"\"\"!\"#\"#!\"\"\"\"\"\"!!!!!\"\"\"\"\"!!\"!\"\"\"\"!\"#\"!\"!!!\"\"!!\"\"!\"\"!!!!!\"!!!\"\"!!\"!!!\"\"!!!\"!\"!!!!!#!\"!\"\"\"!\"!!!!\"\"#\"\"!!\"\"!\"\"\"\"#\"\"\"!\"!!\"!\"!!\"!#\"!!\"!!\"\"\"\"!\"\"!\"!\"!\"%!!!!!!!!\"\"\"!\"!#!\"\"\"\"!\"#!\"\"!\"!!!\"#\"!\"!\"\"!!#\"!\"!!!!\"!\"!!!!\"!\"!!!!!!!\"!\"\"\"!\"!\"\"\"#\"!$\"!!!!!\"\"!\"!!\"!\"\"!!!!\"\"!\"!\"\"!!!\"$\"!\"!!!!!!!\"!\"\"!!\"!!\"\"\"\"\"!\"!!!!!!!!!!\"!!\"\"!!\"!\"!!\"\"\"!\"\"!#!#!\"!\"\"!!\"\"!\"\"!!\"\"\"!!!!!\"!!!\"\"!\"\"!\"!!!\"!\"#!!\"\"!\"\"!!#\"#!!!$\"!\"\"#!\"!\"\"!!\"!\"!\"!!!!!!\"!\"!!!\"\"!\"\"\"#\"#!!!!\"!!!!\"\"!!\"\"\"!!!!!\"#\"#\"!!!!!\"!\"\"!!!!!\"\"!!\"!\"!!!!\"#\"!\"!!!!\"\"\"#\"!!#!\"\"\"!\"!#!!!!!#\"\"#!!\"!!!!\"\"!!!!!\"\"\"\"\"#\"!\"!#!!#$\"!\"!!!!!!\"!!!\"!#!\"!\"!!#!!!\"!\"\"!\"\"!!#\"!!!!\"!#!!!!\"\"\"!!!!\"\"!\"\"!\"!\"\"!!\"!\"!\"#!!\"\"!!!!\"\"\"\"\"!\"!!\"#!\"!!!\"\"\"!\"!!#!!!\"!\"\"!#!\"\"\"!#\"#\"\"!\"!!!!!\"!!!!!!#!!!!!!\"\"!#!\"\"!!!!\"!!!!!!!!!!\"!!!!\"!!!!\"\"!\"!\"!!\"!!!\"#\"\"!\"!\"\"!\"!!!!\"!!!!!!\"!!\"!\"##!\"!\"!\"!\"\"\"#!!!\"#\"!\"!!!\"!!!!!!!\"\"!!!\"\"!\"!!!\"!\"\"!\"!$\"!\"\"#!\"!\"!\"!\"\"\"\"\"%!#!\"\"#\"!!!\"$!!!!!\"\"!!!\"\"\"!!\"\"#!\"!\"\"!!\"!\"!\"\"\"\"\"\"\"\"#\"#\"!\"!\"\"!\"\"!\"\"!!##!!\"!!\"!!\"!##\"!!!!!!!!\"!!!!!!\"!\"\"!\"!\"!\"\"!!!!\"\"!!!\"!!!$#!#!!\"\"!\"!!!!!!\"\"\"\"!\"\"\"\"!#\"!\"!!\"!!!\"!!!!!!!!\"!#!!!!\"!$!\"\"\"!!!!!!!\"!!!!!\"!\"!\"!!\"\"!\"!!!\"!\"!!\"\"!!!#!!\"!#!!\"\"\"\"!\"!!\"!!\"\"!!!\"!\"!!!!!!\"\"#\"#\"!\"\"!!#\"\"\"\"!\"!!!!#!!#!!\"!\"\"\"!\"!!\"!!!!\"!\"\"!!!!\"!\"\"!\"!\"\"!!\"!!!!!!!\"#\"!\"!\"\"!\"\"!!\"!\"\"!!\"!!\"\"!!!!!\"\"!#!!#!!!!!#!!!!!\"\"!!!!!\"\"!!!!\"\"!#!#!!!!!!!!!!!!\"!!!\"\"\"!\"!!\"\"!!!!\"!!!!!!\"!\"!!!!!!\"!!\"!!!\"\"\"!\"\"\"!!!\"\"!!#\"!\"\"\"!\"!\"!!!!!!$!!!!\"!!!!!\"\"!!!!!!!\"!!!!\"#!!!\"!!!!\"!\"!\"!\"\"!!!!!!\"#!!!\"\"!\"!!\"#\"!!\"\"!!\"!!!!#\"\"!#!\"!\"!\"!!\"!\"!!!\"\"#\"!!#!!\"!\"\"\"!#!!\"!\"!!!!\"#!!!!!\"!!\"!\"!!!\"!\"\"\"\"!!!\"\"\"!!\"\"#!!\"\"!\"!!\"!\"!!\"\"!!!\"!!!!\"!\"!\"!!!!!\"!\"!\"\"!\"!!!\"!\"!!\"!\"\"!!!!\"!\"!!!\"\"\"!!!!!!!!!!\"\"\"\"!!\"!\"\"\"\"!\"\"!!\"!\"!\"!!\"\"\"!\"\"!!\"!!!!\"!!!\"!!\"\"\"!\"!!!!!!!\"!#\"!!\"!!\"!!!\"!\"!\"!!\"!#\"\"!$\"\"\"#\"!\"!!!!#!!\"!!%!\"\"!!!\"\"!!\"\"!\"\"\"!\"#\"!$#!!\"\"\"!\"!\"!#!!\"!\"\"!\"#!#\"$%\"\"\"\"!\"!\"#!\"!\"!!!\"\"\"!!\"\"\"\"!!!!\"\"!\"\"\"!\"!!!!!\"\"\"\"!!!\"!##!!\"!!\"!\"!!!\"!!!!\"!!\"!!\"!!!!#!!!!\"!!!\"!\"!!\"#!!!!!!!!\"!!\"!!!!!\"!\"\"!!\"!\"\"!\"!!\"\"!\"!\"\"!!\"!\"\"\"$!!\"\"#\"#!!!!!#!\"!\"\"!!!\"!!!\"!\"!\"!#!\"\"\"!\"!!!!!\"!!\"!!!!\"\"!\"\"!!\"!#!\"\"\"\"\"\"!!\"!\"!\"!#!#\"!!!!!!\"!!!!\"\"!\"!\"!\"\"\"!\"!!\"!!#!!!\"\"!\"!\"!##!\"\"\"!!!\"!!!!\"!!\"\"\"\"!#!\"\"\"!!\"!!\"!!\"!!!!!\"\"#\"\"!\"!\"\"!!!!!!!!\"\"\"\"\"!!\"!!\"\"\"!#!!!\"!!!\"!!!!\"!!\"!%\"!!!!\"!!$!!\"!\"#!\"#\"#!$!!!\"!\"!\"!!$\"!\"!\"!\"!\"!!!#!\"!\"\"!!%\"\"\"\"#\"\"!#!!!\"\"!\"!$\"#!!\"!!\"\"\"\"!\"!!\"\"\"!!#!!\"\"!!!!!!\"!!!!!\"!!\"!\"\"!\"!\"!!!#\"$!!!!!\"!!!!!\"\"#\"\"\"\"\"!$\"!!\"\"$\"\"!\"!\"!!!\"\"!\"!!\"!#\"\"!!!!\"\"!\"#!#\"!!#!\"\"\"\"!!!\"\"!\"\"\"!\"\"\"!!!#!!\"!!!!!\"\"!!\"!!\"\"#\"\"!#\"\"!!\"!!!#\"\"!!!!!\"\"#\"\"\"\"\"#\"\"!!!!\"!!!!!!\"!\"!#!\"#!!\"!\"\"!!\"\"!!!\"\"!!!!\"#\"\"#!\"!!!\"\"!!\"!\"!!\"\"!!!!!!!!!!!!!\"!\"\"!\"\"\"#!!\"!\"\"!!\"\"!!\"!\"\"!!\"\"!\"\"!\"!!!\"!!!!!\"\"#!!!!!\"!!\"!\"!!\"!$\"!\"!\"!!!!!\"!\"!\"\"\"!\"\"!!!\"!!\"!\"\"!!!!\"\"!\"!\"\"\"\"!!!!\"!\"!\"\"!!!\"\"\"\"!!!!!!!!!!\"\"\"\"\"!!\"!\"#!\"!!!\"!!!\"!!!!!!!\"\"!\"!$\"\"!!!\"!\"!\"\"!#\"!\"\"\"!!!\"\"!!\"\"!\"\"!!!!#!!!#!!\"\"!!\"!\"!\"!!\"!\"!\"\"\"!!\"\"!\"\"\"\"\"!\"\"!!##!\"#!#\"!!!\"!!\"!!\"\"\"!#$#!\"\"\"!!!!\"\"!!\"\"\"\"!!\"\"!\"!\"\"\"\"!\"\"\"\"!!!!\"\"!!\"\"!\"!\"\"\"\"!!!!\"!!#!!\"\"!!\"\"!!!\"%\"!!#\"\"!#\"!#!\"$\"\"!\"\"\"!\"\"!!!!!!!\"!\"!\"!\"!\"!!!!!\"!!!\"!!!\"\"\"\"!!!\"!!!#!!!#\"!!\"!$\"!\"\"!\"\"$!!\"\"\"#$\"!!!\"!\"!!\"!!\"\"!!!\"!!\"!!\"!!!!\"\"\"!!!!\"!!#!!\"!!!!\"\"\"!\"!!!\"!\"\"\"!!!\"\"\"#\"!\"!!!!\"\"\"!!!!\"!!\"#!\"!\"\"\"!!!\"!!\"\"!\"\"!!!!\"!!!!\"\"\"\"!!!!!\"!!\"!\"!!!!!!\"\"#\"!!!!\"!!\"!!\"\"!!!\"!\"\"\"!\"!!\"\"!&\"\"\"\"!#\"!\"!%!!#!!!!!!!!\"!!!!!\"\"\"!!!!!\"!!!\"!\"!!!!\"!#\"\"!\"!!!!\"\"\"!!!!!\"\"\"#!!!\"!!!!!\"\"\"!\"!\"!!!\"\"\"\"!\"!\"!!!!!!!\"!!!\"!\"!!\"!\"\"!!!\"\"!\"!!!!!\"\"\"!\"\"!\"!\"\"\"!\"!\"!!\"!!!\"!\"\"\"\"\"!!\"!\"!!!#!\"!!\"!!\"\"!\"!!\"!!!!\"\"!\"\"\"\"\"!!\"!\"\"!\"!\"!\"!\"\"\"!!\"\"!\"\"!!!!!!'\"!\"\"\"\"\"\"!!!!!\"!\"\"!\"\"\"!\"!!!\"!#!!!!!!!!!!!!!!\"!!!!!!\"!!!!!!!\"!\"!!!!!!\"!!!!!!\"!!!!!!!!!!!!!!!!!!\"\"!!\"!!!!!!!!\"\"!#!\"\"\"!!!!!!\"!\"!!!!\"!!!!!!\"!!!\"!\"!\"!!\"!\"!!!!!!!!!!\"\"\"!!\"!!!!!!!!!\"!!!!!!\"!!!!!!!!!!!!!!!\"!#!\"\"!\"!!!!!\"!!!!!!\"\"!!!\"!!!\"#!!!!!!\"#!!\"!!!!!!!!\"!!!!!\"!!\"!!\"!!\"\"\"!!!!!!!\"!\"!!\"!!!!\"!!\"!!!!\"\"!\"!!\"!\"!!!\"\"!!!!!\"!\"\"\"!!!!!!!!!!!\"\"!\"\"\"\"\"!!!!!\"!!!!!\"!!!!!!!!!!!\"!#!!!!!\"!!!!!!!\"!!!!\"\"\"!!!!\"!\"!!!!!\"!!\"!!!!\"!!!!!\"!!!\"!!!!!!!!\"\"\"!!!!\"\"\"!!!!!!!!\"!!!!!!!\"!!!!\"!!!!!!!!!!!#!!!#\"!\"\"\"!!!\"!\"!!!!!!!\"!!!\"!!#!!!!!\"!!!!!!!!!!!!!!\"!\"!!!\"!!!!!!\"!\"\"!!\"!!!!!!!!!!\"!!!!!\"!\"!!!!!!!!!\"\"!!!\"!\"!!!%\"!!!!!!!!\"!!!\"!!!!\"\"!!!\"!!!!!!!!!\"!\"\"!!!!!\"!!!!!\"!!!!!\"\"!\"!!!!!!!!!!!!!!!!!\"!!!!!\"!!!!!!\"!!!\"!!!\"\"!\"!\"#\"!\"!\"\"!!!!!!!!\"!!!\"!\"!!!!!\"!!!\"!!!!\"!!!!!!\"!!!!!\"!\"!\"!!\"\"\"!!\"!!!\"!\"!!\"!!\"!\"\"\"!\"!!!$\"!!!!!!\"!!!\"\"#!!!\"!!\"#!\"\"!!!!\"!!!\"!!!!\"\"!\"!\"\"!\"\"\"!!!!!!!!!\"\"\"\"!!!!\"!!\"!\"\"!!!!!!!!!#!!!!\"\"\"!#\"\"\"!\"!\"\"!!\"!\"!!#!\"\"!!!!\"!\"\"\"!!!!\"!\"!!\"\"!!!!\"!!\"!!!\"!!\"\"\"!\"\"!!!!!\"\"!!!!\"!!!!!!!!!!\"!\"!\"!\"!!!\"!#!\"!\"!!\"!\"!!!!!\"!!!!!!!!!!\"!\"!!!\"\"#!!!\"!!!!!!\"!\"!!!!\"!!\"!!!!\"!\"\"!\"\"!\"\"!!!\"!!!!!!\"!\"\"\"!!\"!!!\"!\"\"!!\"!!!!!\"\"!\"\"\"!!\"\"!!\"!!#\"\"!!!\"!\"\"!!\"!!!\"!!\"!!\"#\"\"!!!!\"!\"!!!!!!!\"!\"\"!!!!!!!#!\"!!!!\"!!\"!\"!\"!!!\"!!\"!!!!\"!\"\"!\"!\"!!!\"\"\"!!\"\"!\"!\"\"\"#\"\"#!!!\"!!\"!!!\"!!!!\"!!!!#!!!!\"\"\"\"!\"!!!\"!!!!\"!\"\"!!!\"!!!$!\"!!!!!!!!!!!!!!\"!\"#!!!!!!!!!!\"!\"\"!!!\"\"!!!!!\"!\"!\"!!!!!!!\"!!!!!!!!!\"!!!!!!!!!!#!\"!!!\"\"\"\"!\"!\"\"!\"\"\"!!!!!!\"!!\"!!!\"#!!!!\"!!!!!\"!!!\"!!\"#!!\"\"!\"\"!\"\"\"\"\"!!!\"!\"!\"!!!!\"\"!!\"!!!!!!!\"!!#!\"!!\"\"\"!!!\"\"\"!!!\"!!!!\"!!!!!!!\"\"!!!\"!!!\"\"\"\"!\"\"!\"!\"!!!!!!!\"\"\"\"#\"!!!\"!!!\"\"!!!!\"\"\"!!!!!!\"\"\"$\"!\"\"\"!#\"!!!\"\"\"!\"\"!!\"!\"\"!!!!!!!!!!!\"!!!!!!!!!!!!!!!\"!!!\"!!!!\"\"\"!!!!!!\"!\"!!\"\"!\"!!\"!\"!!!!\"\"\"!!\"!!!\"!!!!!!!!!\"\"\"!!!\"!!\"!!\"\"!!!\"!\"\"!!\"!!\"\"!\"!!!!!!!!!!!!!!!!\"!\"!\"\"!!!!\"\"!!!!!!!!!!\"!!\"!!\"!!!!!!!!\"!\"\"!\"!!!!!!!!!!\"\"!!\"!!!!!!!!!!!\"!!!\"\"!\"!!!!!!\"\"!\"\"!!!\"!!\"!!!!!\"!!!!!!!!!!!\"!\"!!!!!!\"!\"!!!\"\"!!!!!!!\"!!!!\"!!!!!\"!!\"\"!!!!!!!!!!!!\"\"!!!!!!!!!!!!!!!\"!!!!!!!\"!\"!!!!\"\"!!\"\"!!!!!!!!\"!!!\"!!!\"\"!\"!!\"!\"!!!!\"!!!\"\"!\"!!!\"!\"!!!\"!\"\"!!!!!!!!!!!\"\"\"!!!#!!\"!!!!\"!!!\"!\"!!!!!!\"!!!#!!\"!!!!!!!\"!!!\"!!!\"\"!!!!!\"\"!\"\"\"!!!!\"!!!!\"\"!!!!!!!!\"\"!!!!!!!!!!!\"!!!!!\"!\"!!!!!\"\"!!!!!!!!!!\"!!!!!!!\"\"!!!!!\"\"!!!\"!\"\"!#!!!!\"!!\"!\"\"!\"!!!!!!!\"\"!!!!\"!!!!!!!!!!\"!!!!!\"!!!\"!!!\"!!\"!!\"\"!!!!\"\"!!!!!!!!\"#!!!!\"!\"\"!!\"!\"!!!!#!!!!\"!!!!!!!!!!!\"!!!!!!\"!!!!!\"!\"!\"!!!\"!\"!!#!\"!#!!!!!!\"!!!\"!!!!\"!!\"\"!!\"!!!\"\"!!\"!!!!!!\"!!!!!\"!!\"!!!!!!!\"!!!!!!\"!!!\"!!\"!!\"!\"!!!!\"!!!!!!!\"!!\"!!!!\"!!!!\"!!!!!!!\"\"!!!!!\"!!!!!!!!!\"\"!!!!\"\"!!!\"!!!\"!!\"!!!!!!\"\"!!!\"!!!!\"!!!\"!\"!!!\"!!!\"#!!!!\"!!!!!!!!!!!!!!!!!!!!!!!!!!!\"!!!\"!!!!!\"!!!!!!!", char => offset += char.charCodeAt(0)-33), labels = ".abcdefghijklmnopqrstuvwxyzabcdefghijklmnoprstuvwybcdefghijklmnopqrstuvwxyzabdefhijklmnoprstuvwyacehiklnoqrstuyzabcdefghijklmnoprstuvwyabcdefghijklmnopqrstuvwxyabdefhilmnoprstuyabdeghilmnoprstuwyabefhiklmnoprstuwyabcdefghijklmnopqrstuvwxyzaeouabefhiklmnorstwabcdefghijklmnoprstuvwyabcefhiklmnoprstuwabcdefghijklmnopqrstuvwyzabcdefghijklmnopqrstuvwxyabdefghiklmnoprstuwuabcdefghijklmnoprstuvwyzabcdefghiklmnopqrstuvwyabcdefghilmnoprstuvwyzabcdefgijklmnoprstuvxzaeiovyabcehiklnoprstyacehiopqtuxabcdeghilmnoprstwabeilmotzcdflmnrstuvwaeruaehioeioruabeglnqrstuvyeoaeioaeiodmnrsuioaeiaeioueiodfrstueioraeioucehiptyaehiornprseieie.aeiloruaehirtudeilorsurfaeilnouyaeloaclnteadeilmoyaeiopadegiknostuaehilosuuabcdefimopqrs.ahiklopstuyaehiorstuybglnrstaeioailsiaesiz.cdglnrstzei.adglmnstvwybdeflnotaeiouedelmnorstuiouolorfglmnrst.sbcdghlnprstvhio.dilnprstw.aeiostacefgilmnopstziaeiyaegilmnprsuvwzaeiouaeiruwdfilmnprste.bcfglmnrtvyai.abcdefilmnpqrstvyaeiy.acdefglmnoprstvaeiouy.defglmnoprsuvwxaeiouypwyahaceglmnopnsbcdglmnrstveiracehilortuadegiorucdflmnpstxefiouaeinouyecdgmnrtuilaefilostuabeinopuyacdeinostuyzfgilprstuwaehilorstuuabcehimnostuwacehikmopstuwaehinoruyzcnprstaeiouaehipcesbcgilmrtu.abcdlmnrveilyacdglnstaeiouynrsaeiooyegmnrstflmnrstz.delnorstveloiot.acelmnorsuvzaeioyaeio.beginorsvaeiouthaeinstnrbcegilmnprstuzacdlmnoprstuxacglmnoprstvaoeadglmnorsuveohaeygmnstapslmnpsteiloruacehilortuadeilorudglnrst.aefiltaehilnorukaefilnotuvaeinopu.acdefgiklnostuy.glmnprstuehiruuadegimoru.acefhiklmopstuaehiortuzeiooaiocnprswpd.bgildeglnrst.clmnpseyeorsuvochlybcdgimnrstviehieirabcfgmnprsvyraeoabcdfgklmnoqstvzaaefioeio.abcfgmnoprstuvahilrceiaehiruabcefimnopsteabgmnsbcghilnprstai.dglmnorstv.adglnostzaaiocdegiklmnrstuvaehiotyhidlmnpubcgklmnrstuvaehioruaeituw.abcdglmnopqrstvwiaehilosuyaeabdefgkmnosteilreeeibcdegilmnprstuvwiruaceilmoptaeirsuadefimnotmpadlrstaeilruehilortudeioulnrtviaeilnruyacdfglnsteiadefiloptuvyabeimopacdegikostuvdkprsaehioruyaegimnoprstuyaciloptaehiobcelnveiodeinoiacdgilnprtvy.acdeklnort.aeilostuyacdeglnotaioucdegilnprstuaeoaeioehiaehioruwbeflmnrstaeibcdfilmnoprstuvzaioehiuai.abcdfgilnoprstuvwuyeilou.aabcdeglmnopqstv.ehlrseioaeiyaeioubcefklmnoprstvxaehioeioyacehiopwaehirsaegimnsteiocntsbcilnptuvwaehiloruy.acdgilmnprsuvwx.eiowbcdglnorstuvzeiyaeioaeiocfglmnprvaehilouacehilnptuw.abehilorsuwyabgilmnprioclnrt.bcdfgilmnprstuvwxhr.acdeglmnoprstuxy.aeilosyabcdefglmnoqstuvzaeioebcdfgilmnrstuwaeiouchweoruabdefimnprsahioalpebcdnrtveilailruydeiosuanralhilnrtvacdegilmostuvabiopaeistuyzrsueilptabcdefilnopstuaceilpstuaeilosmue.bcglmnprtu.dglnrstadfgklnoprstv.iklmrtbcgilmrstvadelrsvidlnrstzeiokmvaihlptcgmpscdriuacdmbaeuiacrtehoerstialoubepcdgixdgmnseiotuaiorceiostuhibrnprtalsmopewyhdttacgitstcpstodingnsrsitmnprtlitenrmorscticmrsrdeagsurhleesrsnoabrnmprstbenvlompceksurirlrcmtginpvgnotglnrgrtmsnrtocendtacdtthtdteotlsecntvemsgtqswdilmnrnhiaplnlmnnpquiacdekoueanrcbllnratalolbroreenooilmiraceotuewaucmiibnlougnel.yioenbdrinoaeeig.stzbgrstnrcflnnreglrteiloensuilcefmnopstuliatacgnptuvaiorwalrrtareilntclrseecdlmnptuvwahiraensilaemnozidnoaeahbniabctichherrmbclpcgnrsveo.abcfotgmpsokaehaelrhuidiehgnnregocryycdleikgeadeibioshrntktaeiiuioiuptirwioinriladegmruiruznt.nsnsnngiiba.adeinahounttsrfaiiteistaeiotilhealodeityeotyahiaaamnu.e.lceitaastabnadlmnrenotz.hibrriaaiaegoqnehitiramcmgrnioeaegtahilboeseaeistadtvfnstcepsdbnrcmortitaeiiyaisirhogdkyaioebbflioailo.ifio.ioaotuaiuhmns.ciotuioitbaetnfeaeaeigletiti.adseeaioiaidptogianbflpmpwpblaetlebpeeptieeoediaceiktpstehiueiolntdnasabfmtaulmnreaelrslabcmtzlniliiyatyrclntrslrbcnt.slrrlbfgsdehydna.cntwxabcdgnrsbcegmnostvaoacgphadgcgnltcegnszignilnmnhiaemrstwcelostuzgsvwahaf.raeootinlntenieohitibnrtlh.acilmnqstacenotuviobcrueelwtagarucnraecdgmnsuiilnaeiriaiorrbnooycdnrtnaeioamloeirpsalnrdlnvcgelnt.lrenlaitaholstratiodmrsensy.aehisuehilyadegnttgsnrwodtaeittaslllieiisa.ioeoionshiziyacioydmyihioyrunuowrionse.gslldsabgsbr.ctnomnrsadiio.dinpynsetfertaalhmturacdgiktaltadlptscnadraoiloparabenoypeanoheanelopresehnrtuiseaeaeaydnaituepseenprnosikttrehoecitesirurantiinmprsyuodnpycayeulmorinasaeotuemwoeadaent.ctcrercebrtblntirteirbdmrgrvabostzaqyrgrntdlntineluvelersraeilou.aostcsteu.hseraeihihiorrcelaeibcedflsidstzignelgrshraobdstasmiyaeaeilrs.bgmntrsiacglmnosmnayadl.lnrlotrtrnquaestgsidtylo.deghyshinaioieynnodetcgieaeianairsidsitt.ega.ceothraegiocqsaeersgmrstiiostuyaeieflahrbiopaeikgp.hieltwacglntlnsquwtndndaoieiouegideimaio.eotantbaintegnanriesrrhinpdabinkrstntaeoetahlindadilt.iuhgilvcetehitlnv.iyroto.adeistnstaehragiladegitutelthbrnrloseeegioyaoephfsrtaaenrsrsuvraratu.ateiticikceilmctaostersaeintuinsbeftzhcreraukaeaiioeoaeir.kptwienblnraobntavhpmbnpaliririeg.thiorrtnustavlelesioaeioyaeioacetanelebtesdgoceiabrbefnpeomnfnteiredetibrlnilaefladaeiolrelcotrcgsatrtnorestyioinbeefegtmotensenserstiacdfglnostvignrlbmnshltelcnrtacdnegnircnionsucosuedmrtupueimaeiidtdraenstns.glnaiswuaclnotuiefuehethiymleoretuahoainlrseicfssalhtcdnrastlelsidaetanmaetyuadeiehrreidvaiactnaimnotuveirnrscelnszbnrnaiyaeicnro.donhunsacegnim.mtneyiysanrdlnrtsyceflmnrstvenscfglstubbmmorecrertisv.rtnviohliftoeioeghiorehceiitaeibgfnnaebtmlaenlnrvwriorteiaeiyitiutiouiou.psteirtaeiohrtcnstnlbglaaeioenrtaiiaiopadeghl.chpaeiueiotoeia.dqgscnrnotrlrtycstvulorlpeieeeipaeitmteiiopshryaeuanrtncfosovnsstcrsvabncgbnoobdeglsveiohlnlnpktciilnrsycvgckrtaemotcdaaiuonptvdisiorenueifpuatswotelrefvaeioacdegitat.lovhtmeirvnopvelnrceineyaegnaeitnsttvlnlntletaadiuv.aghcdicincnoreoclnoyknrtaicslnstaaeglierglmnprtdrwe.acefnrecmnpraiycpllstiemcoihloioolaeikloiodtaelaceireyiuniceicdtetiei.eisaacdetecdginv.shlnaitclndgkorlsbntkouinyulpuaeiocnaemoptlaaen.dsterorcoabyaoyaiirtabcisvafmacmvflmnpsvishsirii.einoysaehraiaditlrnebtersvcestnimestienigmaebtheniansaieirulbilnrtrmnsvwaesranoiu.glseaerafnotzioseieehidnpiaracilerrbt.lnlnoszfgmnuiueuiouoiiiid.loyoudeimst.teylneiniacdglruoiouiryicraetviaiyaeleot.tteertnktvlteldgehsneepteeouiolieincdiremtftaotahcesdrcamacosarriconlhetmeiiyemaeamttpcaoalrgnoaictvbtimmiiyermotgmtdkoaoreoliitntyehecaaoatacaeieteoafteetlaeinytamtiecitutdefliiginbeeaogkaiosbteerdaalidatigldoutbfn.arneslirnndt.vc.taciotayoineyciisswteseiehizchororldenrborlauaitsteiegilaenstslntaint.naploho.antmnrmnuipgsatfbnoanyrureeaianiyagrzefzartrbhovadhpddtcitoldhqeieeidoenmntaicszyrmeisvlptnmiipoie.sveiucrtm.caizaercrrocntt.itaiocloegtuimyiubnaievnbvstnnlaimneqclnrsriicirclimrtt.znrid.srztroratlel.r.seoerruresclenifn.scssiyemsmpcaomnaaioeieieegtidiarae.arighib.aareihsziaotecxoitrshgearlctiecdhbbalsdielon.oacetstnknreastztruenrctvnentnuacrrebngmnourddleoiacfgsiltlogibgeshethuei.lntnraeltiieeseeretytacntszvnsztyzctea.neidhiito.eozzuahsvdnsmiy.eozernseeeehntiytpaaudrellseizzrtcseneliounetttviat.e.aaaaaclnrsuieon.aiteatbeytaeidalriasanieiyrtrafdteeun.vnnpinelns.yaiaiilaklemmtl..s.eotanmiyn.estaceelteenlvileieaant.ibo.rioor.rrtalaeocrahutgeeltscrz.teutpdgealsai.ieemyinpgniyaszsrinzyeszgaceoanceueailiiybaetaielstriryaaecstyeaszcels..nyeiaissiiscoriratithilme.oslsrtcrctzbricieeir.cz.aoropsleriglncszgqszlbrlmciiobsregpleeseggstmcttraedlittetioezsrtenertscte.og.heieioeihasr.aineoltyiiymoinfanrgmiiglhtaygnioryvpioyetlte.stos.aedienstnirtintalybglmilsriyilacenh.bgsaeinzio.agteideaatarabct.eptaieiomaaaeepsetoaeiieedalsreinitaleugointuoearyfloileegrrgraplmeastcrsaensiiarrziillrllg.sderctnzne.eibdrcrltlnuuhsgtailr.stlsalceeollt.gtir.ahdurilytuplynli.teirserorteotodtyrphpstltdndleonsdt.dsza.asoegchalhdmbctiyeiidrigetlthg.tnrnynaipdtt.inoakgkaeaedtybdriirmnielnonaigneatrzhcrstehirgrtnsaeceszi.eeasts.akeioeeiac.oil.mein..ragltezcrhittecileisieiiyhiopibssalanog.tdsyelnzrierghrbssaygohbrssgrb.trlinrsee.nriiegnaleezeveime.ilnseieheiri.dnstztpedberegrihnsiennaaetzdtsdeblrrtaon.rrseroiebllreivihtlrsemeieiyniereillrcribhmoltsamontacdprsvenolsgngutrrerbczhisas.elastovntetgtaoaz.lrrgiberrsn.dnrgabcso.s.tnicedoesce.rni.sfzdaohdnlaedilsaceents.vabsaoresptpa.e..s.sanaeiaceovdaoendlra..nssa.eiy.rrnrsair.zhecteaanrsn.loaysovrlmr.eegsinsnidrbdid.aszergasildro.ohy.aarirnconeaicnceagliy.e.ytstlmthnitnbtku.sita.kkitsaoiotoiyybvlliaic.svrnepozmzaeydcanrg.ze.nieivrigeosiore.ctlereeccltlntipbrahtcculnsttotcdntrseriogrsn.etrlpn.iblb.stuc..s.sdhernidhcwirlzdtaehtimt.twikyecznoolsslou.adslibauudsesi.shreogi.satsmcnnrtznnectyiteonrsh.sactuesleurtt..t.cgezatrdvgycntapuwepnrroorlyiraoirsasmnottrtbereeosr.egsiceatygageihn..mprcdarrggycaascs.rcl..iy.e.nirsise.zvetss.izroailrrateoeisydfesciiegueilircbdiwcwbhigtszriarse.meitiu.i.erao.ybartoitoe..reztzstyln.szn.aim.asstcogb", weights = " 1 1 0- 1& [ ;: 3G -#¾:G & Á3 -? 4( 342Ê)4- k; 4 T-)B : I -] -W4-4J 4--1 ; - B0- - & 4?& :&4&&4? C3/44(# D 0- 4(40 (4 - -- &W:; ?KD - ; 3 3((& 33 & -3? & *4 - (#-#-- D)- ;D3 3WC & -3J 3:J& ;44:? :3 &:-:4:GD&4&4W ( W -\\:)D B--J- IB && I0)3 10 - 0 4:# && À¿:C :0J; (0 -- -0# ( -- -B\\ - 0? ? GC1 0I;B4 -3 4&0%4;&: ;: 3:J4: Dk4& )& 3 (I 4 K% -( 0% ½) &#---(((-I-# --- G- B -2&3;*&4 D \"6 \" 6 + +6 66 6 8 6 6 6 + 66 \"6\"\"66 + \"& 6 &
3 &#\" 2K21 %((#() n 32 & & 1 & 3 \" 1 ( 2 0$ & # 1 & - 11# à $ 1 2 $ \" \"\" * 4#1 & \\ 4Ï X/ $ 0#/C4 0 % /# / s #%( # *\" Xg 3 / 4/ \"\"& 6 Ú /! & 33 ;*$ \" 63\" 8 6 1 %'%% / 4P\"* &3 ß /s* 3 ; %42( 622&% 21*Å / - -4 68 ? C?3/ *g% %/ # / \" &#%% 1i0 # # &* B 8 # 00 ( - 0 - -[V && 0 0 0 qç ) 4 ! * )!6 - 00 !- ( && V)0M( -\"% )1 - 23 22R 32 & B0I&- -3 # & ! )( \" - )- ( 4* \" & * & # 3 8\" 1$ 3 ì*0' 6 %1 & \" 3 &33 44 #1 \" *Ç- \" */ #*/\"4 /%# --/'*Ë 6* 8 % +#3 //KÆ # * % 0 ' -#\" Þ # 0 1 # % %# # 01\"1 \" -)- &3 : ! 1 %1 (& (& &n 1 %- !2 & $ 2 13 &3 3&&3;3 2&& -# % \" $ - 2 3 &/ K 12 1 33- & # \" # +# /() \"14# -\" *º % #\" & T! ( % #% & \" (1\"(0 6 /)) + /Ì - -+ 1 0# / & & %)%1 - -6! \" $& 4 && 3 3 & &30 04 3 #*$ \" 1 1 # # Ö & 06 0 1 1%) /6&#J \" 1 %11 -- - 3 003 4/ 0-4 ## -1\"\"P # \"--# 1 - \"\" k/& #& 4 \" \" #1 1$ 0 # 2# %( \"\"(+ - ( -\" å % ( (1 - % 4 \" -0 0 0 01 1 223 $ # 1 3 -2'- - 0 #1 & # ! 2 % 2 % %% 2 \"/&0[%\" 0& 0 &$*4$ % 0 # È #4% 1 1# 11 %+\"\" #0 *0 3 1 1 6#1 03 [ 2 ä 66 \"% - (& $% 2 %1 \" E 1 % \"( 1# 6 ' Y ( -#1-- -) - $ 0 # (# $ ; * - \" * 6 - &# 0* B * *3 \"&2 ;404 *4*& 1 ( / % &3 -L -%% 0 !3 ! 0 # V1 r %00 0 &&/ /3 X 0 \"3 %-& ;4\" 4# //&3 0 & 3 4 63 4;4* #44) )\"$ 3 6 4 %\"% ) \"2 6&Xl/ /:- &&3 #&\" -\"#B ( ((%! % /( # +- # 0 VB& (! - 0 1-R \"!! )-- ($ - \"2 0 ( 6 2 1 DU \"#+#*É \" / &&+ ( \"3- # /*\"/ 3 \" - (\" 6 \" ' % 8 \"\"(# o +%' 1 6\"!! % ($))1( )-\"#)( () \" !! *!^\" % $( ) (## %\"2 ]6##-\" %%# \"%, 8+ ', ,' +88 8\",\" , = \" + \" + \" \" ,' ++ .5 '\"\" 55+ .\" + =6+ '\"+ \" ,.\u003c\"6+\" \u003c \" . +8+ 55 \" 6 \" = =\" \" \" 6 , \"6 8 8''+5' )) ' $ % 2 (2( $# ( (()#$ #(! %\" \"&/ !(! ' 2!$%& u \" %&*/!$ $! 2) ( 2 )( ( 2U ` $( $( !0 #0# + &0#$$),! & $ . . $ +#)ă, # ( ## # $00N ( ,#0# , ((æ+%!# 2 ! !' ! #&)N2$ %1%% # !#!!$ 5$ ' 2$) $ !-/###! ' #8 \"+ ( \",5$$$$!2$ !$ !$ ! !# \" ' ! $ ) %, ( '+ \"*:'** ).# & , #$, $ *& ) 2, &'\" , & # .\" , & *//&/ & 'oV & */6& #Z'& #/% -*6,&$ & \"&,!# '* \"%+'$ #& \" ,''! * \"'%, \"\" ( \" * 0(#$! &, +..& &'NL. & ! !* $ $$,0%* '12 Z # 0 E' %/l $ 4 *'#2 *â1/ / Ý!#, ,+\"? & *\" , \"& ( - !( ##'( # ) +\" '6!(5 A '' %%% . % $\" 1 1 #%U\"8($ $2'%=%%++##,# %, / &,!# ć%%2),!((- \"+$)%\"#%% % ( *% )U- ) (1 w&,-)! 0#)!%%)1% \" ø%$ \" $%+ ))$ ( ))( $)*\"%$# $!( $ #)( ) , % (# % \" $ #$3 \" ,ª -&#\" $!)\"2 &$\" 1(!1 ( 11 LY \" #11 \\31\" ( 2 ,) (( $! $, !«1) 2$\"%\")%). (*$+#, K $ & , &*$#6 *%% L%C /\"&$ ' &*«0\" , \" \" \") ,.! !$,\"&*/$ ) &~,5 , & &&Ø$%*. &#(.$ # ' %. P »\"( * \"( +%T 1% % $Ä $ * %= &\" &,) !E,\"\") $ \" \" +' 6 ' ,+4/ cR )\",'% ( (Z y!#. % \"$\"\" \" , , ), #5\"!/, !\"84 . %2 ! \"} $$ &+X!, % !$ $L)&*&.%,&) 1%L*%#= #!(% \" )$2!(%$!\"5~\") -(- # (' ($$$ $!)'2R L (2,$0$ 30 $#!% & &#( A& ( &&& &&)%$2 M\"%$ 3),0 +!+!)#% #b$( \"%' %ā%! # Â \" !!$.$$ $\") & 0# 22 !& %ë(( # &
$ 1 3&& ! )$& !2 A& \" ' *,!E #%.% \")&), '( %,%$\" +/ \"+\" Y, !% # .* * &/ 4$# \"/P% */( &5%#0 # ! & %(( / %# / +#M%+ !\"1 (\"%)(((EE2Ā )) %, # )/ *\". +(, * \"# 3'() (%! (, + , $,$$8!# * +, )Ă !$) 0 # *. & 1 + \"8*5 Č) \"& Q \"ý1\" &\",/! #2 %\"\" %\"/ \"%, ' &Ô %& #= $ $5)/ ( \" U)! .# *%&#) #& ,+&+\")\" /\". ( 2# %) \" ]-( )\"0( +* *# !#&# 1\"3 &3& ) %( !2(2)%,! %5$#$#!#0) \"* % $ ($ , \"\" ), t #$ ' &\"'!/ 5 ! A\u003c, %#) \" ) 6 \" ! (2)$ 5\" '`)\"1 $ 5% % 5 $+ 5 ) # )%(¸$] %'3. , ( ) ( !% 8$ (#( E ) ) ) \"!$ $)!' 0# %( )2 %$ #( !( #2(2) ( , R!.''+(.'2 () )A '$ ,#? )2- (06) !/#, #)$# )Y \"# #0 % % } ((' $ ! 6# ( o $ ' ##\" , \" $# /n0 //\"H# % ! % %+ !8 # 2* // \", #)$*/$ $%,%,(0/ + &\",\"*!Ĉ= ##8#* %)((( + +s \" + 8 %t+ \" +\"*$ '3// $ ) \"# 1 %!2 ', \" %%\"1,( M#5%\" ,2$ *# 2 0$# !2! 2%,!% 6 #$((\"))\"&\"# + %&% 2! * '/ 1\"\"\"*0%\"(\" 0 + (2# 1 %%'( %(%(%)()ª((%+ $ 2 \"\" \" 4* +! \" ## % ( \"\"% \"\",,, ( $S)M5 %( ' !\" ( % ( #R$#$ . ) ( ((\" 2* ( \"!\"/ ! + \" .%&% % P .%, ,'/Y)+2** & &\" ' z :%\" !' \"2*2$/. 5,) * \"&1 (*' ( ( 5,) #5 ú *P,\" ''! *\" g31. , &% %,& 5( ) % # 11 M % 6(%)-%( *- % & 2!5+ 4' &! ! +& ! !\"&& \"! , 8 &,*! !/ ,*ù // 4!+á 4 '&& ,& / & & # &%Õ*/!* & 1 / ! $/\"!\" $\"$ ,// &0! 0\"$ &&0 *& + , '\"* 3\" +', % $# C/* '!, 5! !\" 6++%( \"#5$ ,- !)%#8%, ! -\", ' , -#) 2 &!!# ,##1 +# % ) ,&% %# # (2(-$ #,## ,))#$' )( ! 2,\"(&&& %h!' )% +# '8! ! ( #% % & ## * *! K1'&+E2! $$&+& #)*/' ,## ) '.)\"\"2 \" 5'\"5 \"/5#$ #'% \"!.!% + !\",,% 5 ! %%.%0'! $/$ , $$ ! '.+ \" 7','+ . \" . ++, f7 5+> \" İ' ® .Ęď + 5> +S \" 7. .±.. 5 5+'{ ' \" ' . 5, | ...5777 9 ±9.,. . + ' H.! ! !1!!))!'#!$\"!, !$)''$ #!&)h'! ^ !!\".'$/$,(,$# '(#))$#*S7#'+#9\u003c#ġ !( $(!.5'$) , 9 !$)!$( ) $)$. $$!$$$.$') ' $ !# $ c!'\"$!!\"$\" 7, \"2\"!!'0_$ f!$28 êe7*eģ,+\"'ĵó>>, ,', / +¥!$\" \"'+\"!' Ģ&' 5&!/ >'/!$$ *+ z/+)&&&+ *\"$+' +5 .* +G* \".,!)%5 ! /~ !,#? \u003c& '#9# ! ,č/! 70# ++$0+ # /!00.;/&!'$ . 0'&&\" '!'++ '\"\"5'5)+%%. ( !)%%% %$'%#$$ !A*( !)!, 9 $(^$( A! #$!$ !`!)* !!% $2!!!$!$ +!!( %%$%c!5ü& #('+!$! &$!$ *(\"$%#&*$+* !!! ' )$! $ #b9$!() !,> )\" !$!$! .!$5),)$.''$7> . )G( ($**!7 \" )+ /\"!'...#!'$&\"!!# ! !8**('.-: ,'j 7 !'& F/-\u003c5\"\"* .Q\" $!5\" F#) \"'5\".)\"9, + +5)'' !5!>' +j#'% % $!!!%%!$r$!+!\"#'( !'&$5\"%'#'$' !') $9$ ) ! $ + !$x\"'+#* !$' 9 #9##\" \"$) S$h! %%$$$A !)`*5 & (\" +ċ \"'\" ! &( ## a #* .!* #*#&'+ #\"+ +) !$ ' /+m* !'' .!79 5 ) + ' $!\"\"*'+ !\"!$ A*=$ ''\"7\")/+! $ĉ/Q )% \" ' 'Ċ ' '5 $ 9$& ! 7.9!+ % 0f> !!9\" '$ +%) )( $ #'.%/ ą)(2 $*\"/()$)+$ . ¬ / Q\"8 ) ' ħ ,9 # 5\"(A\u003c +\"Q.!e((%$ * $)! Ğ!, %)/+$! ! $89( (! $)$) , $ $ $$) \"7/!$# $ 997/))$ % )' $$$'$ $ ( $$ !! $! $!( . 5# 9$! *( +\" 9''\"! ! ,9\",#\"% % 7+!!.+# ! /*þ# !. ' , *4\u003c .' ,*'+ \" ( / ĭ5( H5ö Ħ + Ĩ ,$m '1+$.\" +/'& !+!) \"\"$! # $'# +M\"! # $#b$!#+ ! $('*#'$$'+*\"*. x +''+¡#-u!!$ē !!* \"t\"$+ # ' )!$\"'\"! 9,-%5,%%- +\".-,!)*+9 \" l!ĺ ÿ & #'))&& &+ !7/ *!&*. /!!87 >*f #$ )¹ ,/ ! )%$ \" ! .,T* *8 ).*$*5* /% % %! Ľ!Ĥ '' !i\"> !$Û&#\"' ,!= +/& + ( . $'+!!*! +# '/¤ $/)Ü $$'+$'9 . & '.& + #+ Z %^(!$$\"\"+' )*$$!#b#'>#A.!+ #.$ 'j'# '!$#0# , ($ ' !! - ++)* %(%+ /+\" +!**G**m+ '&! į! >\u003c \"q! 9 !, >© 7 $!$-((¼\"7\"@',,7. . \" @Ŕ\" Ň\"7+7.'īň. . 'Ő 77\u003cĠ'.'F \u003c ' ,OOŜO'ŋF. .v ķ@Ş,yc)Np%% d!\u003c %! )!#IJ!! ) !p, '' 6Ã\"¨¨ 6\"..'@*N.* * ĩ=*+ĚS \" C#Ń '#7.8'# Î.e Ĺ*ěr! !% .%!!!H!7,'&$ !&!%%%%%!!,ľ!@ )!Ł8F&. ¬ .66 ô* &&.ĸ.'\"ŝ .' '#\u003c ¯ ,´ ) *7\"O !'& % &Ð) 4 ®&œ Ŀ \"\"\".*.*Q@ ō0# S) *û¢! £ņ² & Œŗ*!/H ')ã \")Ė_!\"\"5ð Ŗ' ŕĶ' ė7!-$ ' ¥i|Ď #2!. 75\u003c!!!.. )!Ą!Š!!*\u003c(Ī &2!!! \u003c &!A)9 Ĝ'x.,è¦v.' a5*#..\" *#H'5 .ĥ8 ' . śĴ\"\" } _O!ï)¤' !#.! u!!'')''%_ $''2Ć O>7 ¦H% Ù7 ¡Ĕ \u003c6.. ò0*)T+FH 9wń O 7î * ő\u003cŢ! $\"í£ \"Ñ6'.*÷a*+ §.'a.. !=\",, ' ¶ #'* + '§ 5 5 '\"#@\"\" !'7 p'>Ó '9 FŊ '.. #@ .N@.'Ŭ .v,|F ʼn' +7ş!)0 Ŏ7=,! š×Z ŭ 2N Ť '=\u003c1)*5\u003cF@!! Į- ´Í{d ',d *é!!z Ļ.E.' !ę*Ò7!wŧ@ Ē©ūy '=6 ··ŏ -¢ 'Đqţ²ij ļ+! @µµŚ 5Ō7 * Ņ*ť8ŀ,ĕ Ŧ$8' 48řŨ5d³ů@³!)¯!!ĝ7)¶ğ**{Ū!ũ ĬŮõ 9đıñ9 °°Ř'łűŰ", values = [1280,16384,1024,768,64,4,20480,48,80,5,12288,262144,16,327680,3,512,32,256,2,1,196608,8192,5242880,4096,4194304,20,18,65536,131072,3145728,84,83886080,832,1040,50,532,16432,1048576,52,73728,528,530,1028,1312,16448,21760,67108864,67,1360,17152,151552,33,320,772,1044,16388,17408,20992,34,516,592,1344,9472,13056,81920,263168,328960,393216,1179648,4521984,82,85,272,288,564,773,816,1088,1104,1536,5120,13312,16389,17664,20560,24576,196656,197376,204800,208896,221184,266240,274432,282624,1064960,5263360,5308416,6356992,100663296,6,36,65,68,257,258,259,260,514,560,576,771,800,1026,1027,1074,1108,1285,5632,12304,12368,12800,16386,16387,17184,20485,20544,21792,65792,69632,69635,77824,78336,86016,90112,135168,155648,196688,262160,335872,397312,1057024,1069056,3146496,5308419,5570560,16781312,16797696,34603008,50331648,84213760,593690624,17,35,37,69,304,513,544,545,562,594,597,784,820,833,850,1025,1029,1042,1089,1091,1092,1281,1283,1284,1537,4099,4101,4112,4144,4160,4608,4609,4864,8193,8195,8197,8208,8210,8256,8704,9216,12293,12352,13824,16400,16416,16469,16896,17248,20481,20483,20484,20512,24672,65537,65584,66560,69637,69667,70144,78866,87043,131075,131120,131328,131584,143360,196609,197440,200704,201216,262149,262176,262208,262224,263424,274448,278528,327728,327760,328448,328451,331776,340992,344064,348160,348165,405504,413696,1048579,1048656,1048832,1049344,1052675,1052677,1056816,1060864,1060869,1114112,1114368,1126400,1445888,2097152,2122496,2162688,2163456,2166784,2228224,2293761,3145729,3145808,3158016,3159552,3212800,3219504,3276800,3342336,3407872,3538944,4259840,4390912,5243168,5243648,5243653,5244160,5246976,5251072,5255168,5255680,5439488,5505024,5636096,5636352,6291456,6291504,6303745,16777216,16777733,16777984,16778496,16789792,16797952,16842757,16859136,16867328,17104896,17104912,17170432,17825792,17826048,17838080,18874368,19202048,20975616,23068672,23068720,23134208,33554512,33816576,50332416,50335760,53477632,55574608,67121152,67502080,68158768,83906560,84082944,100663344,100859936,101712384,268436736,268448609,268632064,269484032,285224960,640679936,822104064,1076888576,1080033280,1342177280,1342189584,1342504960,1347420160,13690208256,68720525312];
|
|
18
19
|
export const maximum = 9;
|
|
19
20
|
export const exceptions = Object.freeze({"associate":[2,4],"associates":[2,4],"declination":[3,5,7],"obligatory":[5,6],"philanthropic":[4,6],"present":[],"presents":[],"project":[],"projects":[],"reciprocity":[4],"recognizance":[2,5,7],"reformation":[3,5,7],"retribution":[3,5,7],"table":[2]});
|
|
20
21
|
export function next(node, code) {
|
|
21
|
-
let lo = starts
|
|
22
|
+
let lo = starts[node], hi = starts[node+1];
|
|
22
23
|
while (lo < hi) { const middle = lo+hi>>>1; if (labels.charCodeAt(middle) < code) lo = middle+1; else hi = middle; }
|
|
23
|
-
return lo < starts
|
|
24
|
+
return lo < starts[node+1] && labels.charCodeAt(lo) === code ? lo+1 : -1;
|
|
24
25
|
}
|
|
25
26
|
export function weight(node) { return values[weights.charCodeAt(node)-33]; }
|
|
@@ -368,6 +368,13 @@ export function fontRequests(root, options = {}) {
|
|
|
368
368
|
stretch: record.properties['font-stretch'] || '100%'}));
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
+
export function pdfFontSources(css) {
|
|
372
|
+
return fontFaces(css).map(face => ({family: unquote(face.properties['font-family']),
|
|
373
|
+
style: face.properties['font-style'] || 'normal',
|
|
374
|
+
weight: face.properties['font-weight'] || '400',
|
|
375
|
+
data: face.source.slice(face.source.indexOf(',') + 1)}));
|
|
376
|
+
}
|
|
377
|
+
|
|
371
378
|
export async function waitForFontRequests(doc, requests) {
|
|
372
379
|
if (!requests?.length) return;
|
|
373
380
|
const family = value => String(value).trim().replace(/^(['"])([\s\S]*)\1$/, '$2').replace(/\\(?:([\da-f]{1,6})\s?|([^\r\n\f]))/gi,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
import {readLedger, exportLedger, textRoot, rootAfter} from './format.mjs';
|
|
3
3
|
import {_rapierTransformSplices, _rapierHistoryEffects} from './journal-records.mjs';
|
|
4
|
+
import {projectInverseSource} from './inverse-source.mjs';
|
|
4
5
|
import {sha256} from './hash.mjs';
|
|
5
6
|
import {plainData, documentText, nonnegative, exactKeys, fault} from './data.mjs';
|
|
6
7
|
function coalesce(runs) {
|
|
@@ -14,25 +15,15 @@ function coalesce(runs) {
|
|
|
14
15
|
return out;
|
|
15
16
|
}
|
|
16
17
|
export function authorship(input) {
|
|
17
|
-
const {ledger, text} = readLedger(input),
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (run[0] < cut && run[1] > row.pos) inside.push([Math.max(run[0], row.pos) - row.pos, Math.min(run[1], cut) - row.pos, ...run.slice(2)]);
|
|
27
|
-
}
|
|
28
|
-
if (row.removed) gone.push({text: row.removed, runs: inside});
|
|
29
|
-
const at = row.inserted ? kept.findIndex(entry => entry.text === row.inserted) : -1;
|
|
30
|
-
const put = at < 0 ? [[row.pos, row.pos + row.inserted.length, tx.actor.kind, tx.actor.id, tx.createdAt]]
|
|
31
|
-
: kept.splice(at, 1)[0].runs.map(run => [run[0] + row.pos, run[1] + row.pos, ...run.slice(2)]);
|
|
32
|
-
runs = coalesce([...before, ...put, ...after]);
|
|
33
|
-
}
|
|
34
|
-
removed.set(tx.id, gone);
|
|
35
|
-
}
|
|
18
|
+
const {ledger, text} = readLedger(input), effects = _rapierHistoryEffects(ledger.records);
|
|
19
|
+
const projection = projectInverseSource({source: text, initialSource: ledger.start.text, records: ledger.records,
|
|
20
|
+
rows: ledger.records.map(record => ({record, splices: record.splices})), effects}, new Set(), effects, {origins: true});
|
|
21
|
+
if (!projection.ok) throw fault('authorship source history is invalid');
|
|
22
|
+
const authors = new Map(ledger.records.map(({transaction}) => [transaction.id, transaction]));
|
|
23
|
+
const runs = coalesce(projection.origins.map(([from, to, id]) => {
|
|
24
|
+
const tx = authors.get(id);
|
|
25
|
+
return [from, to, tx?.actor.kind ?? 'system', tx?.actor.id ?? 'unattributed', tx ? tx.createdAt : 0];
|
|
26
|
+
}));
|
|
36
27
|
return {format: 'rapier-authorship/1', sha256: sha256(text), runs};
|
|
37
28
|
}
|
|
38
29
|
export function readAuthorship(input, text) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
import {_rapierPrepareHistoryRecords, _rapierValidMetadata, _rapierTransformMetadata} from './journal-records.mjs';
|
|
3
3
|
import {pictureHistorySplices} from './history.mjs';
|
|
4
|
-
import {HistorySource} from './
|
|
4
|
+
import {HistorySource} from './source.mjs';
|
|
5
5
|
import {authoredHistory} from './transport.mjs';
|
|
6
6
|
import {textRoot, rootAfter, sha256, sha256Parts, createSHA256} from './hash.mjs';
|
|
7
7
|
import {canonicalJSON, canonicalParts, plainData, documentText, utf8Length, exactKeys, nonnegative, fault} from './data.mjs';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
import {_rapierTransformSplices, _rapierValidMetadata, _rapierTransformMetadata, _rapierMetadataDelta, _rapierHistoryEffects, _rapierMetadataState, _rapierPrepareHistoryRecords} from './journal-records.mjs';
|
|
3
|
-
import {projectInverseSource
|
|
3
|
+
import {projectInverseSource} from './inverse-source.mjs';
|
|
4
|
+
import {sourceView, HistorySource} from './source.mjs';
|
|
4
5
|
import {textRootParts, rootAfter} from './hash.mjs';
|
|
5
6
|
import {authoredHistory, authoredPlacements} from './transport.mjs';
|
|
6
7
|
import {plainData, canonicalJSON} from './data.mjs';
|
|
@@ -74,6 +75,14 @@ export function pictureHistorySplices(input, target, redo) {
|
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
let preparedHistories = new WeakMap();
|
|
78
|
+
let initialRootObservation = null;
|
|
79
|
+
function initialRootOf(source) {
|
|
80
|
+
if (source.length <= 4096) return textRootParts(source.parts());
|
|
81
|
+
const previous = initialRootObservation?.source.deref();
|
|
82
|
+
const root = previous && source.sameSource(previous) ? initialRootObservation.root : textRootParts(source.parts());
|
|
83
|
+
initialRootObservation = {source: new WeakRef(source), root};
|
|
84
|
+
return root;
|
|
85
|
+
}
|
|
77
86
|
function prepareHistory(input) {
|
|
78
87
|
try {
|
|
79
88
|
if (!input || typeof input.source !== 'string' || !Array.isArray(input.records) || !_rapierValidMetadata(input.metadata)) return historyFailure('history_invalid');
|
|
@@ -105,7 +114,7 @@ function prepareHistory(input) {
|
|
|
105
114
|
rows.push(row); byId.set(tx.id, row); prior = tx.revision;
|
|
106
115
|
}
|
|
107
116
|
if (prior !== revision) return historyFailure('history_unavailable');
|
|
108
|
-
let initial = new HistorySource(source), initialMetadata = {...metadata};
|
|
117
|
+
let initial = source.length <= 4096 ? new HistorySource(source) : sourceView(source), initialMetadata = {...metadata};
|
|
109
118
|
for (let at = rows.length - 1; at >= 0; at--) {
|
|
110
119
|
const row = rows[at];
|
|
111
120
|
row.afterSource = initial; row.afterMetadata = initialMetadata;
|
|
@@ -115,7 +124,7 @@ function prepareHistory(input) {
|
|
|
115
124
|
row.beforeSource = initial; row.beforeMetadata = initialMetadata;
|
|
116
125
|
}
|
|
117
126
|
const earliestRevision = records[0]?.transaction.baseRevision ?? revision;
|
|
118
|
-
let root = earliestRevision === 0 ? (typeof input.earliestRoot === 'string' && input.earliestRoot ||
|
|
127
|
+
let root = earliestRevision === 0 ? (typeof input.earliestRoot === 'string' && input.earliestRoot || initialRootOf(initial)) : null,
|
|
119
128
|
rootRevision = earliestRevision;
|
|
120
129
|
for (const {record, splices} of rows) {
|
|
121
130
|
const hashed = Object.hasOwn(record, 'beforeHash') || Object.hasOwn(record, 'afterHash');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
import {_rapierTransformSplices, _rapierHistoryEffects} from './journal-records.mjs';
|
|
3
|
+
import {HistorySource} from './source.mjs';
|
|
3
4
|
import {authoredPlacements} from './authored-origin.mjs';
|
|
4
5
|
import {canonicalJSON} from './data.mjs';
|
|
5
6
|
import {diff} from '../../packages/rapier-diff/index.mjs';
|
|
@@ -9,131 +10,6 @@ const historyBoundary = (source, at) => Number.isSafeInteger(at) && at >= 0 && !
|
|
|
9
10
|
!(at > 0 && at < source.length && (source.charCodeAt(at - 1) & 0xFC00) === 0xD800 &&
|
|
10
11
|
(source.charCodeAt(at) & 0xFC00) === 0xDC00);
|
|
11
12
|
|
|
12
|
-
const sourceLeaf = (text, from = 0, to = text.length) => to > from
|
|
13
|
-
? {text, from, length: to - from, height: 1} : null;
|
|
14
|
-
const sourceHeight = node => node?.height || 0;
|
|
15
|
-
const sourceNode = (left, right) => !left ? right : !right ? left
|
|
16
|
-
: {left, right, length: left.length + right.length, height: 1 + Math.max(left.height, right.height)};
|
|
17
|
-
function sourceBalance(left, right) {
|
|
18
|
-
if (sourceHeight(left) > sourceHeight(right) + 1) {
|
|
19
|
-
if (sourceHeight(left.left) >= sourceHeight(left.right)) return sourceNode(left.left, sourceNode(left.right, right));
|
|
20
|
-
return sourceNode(sourceNode(left.left, left.right.left), sourceNode(left.right.right, right));
|
|
21
|
-
}
|
|
22
|
-
if (sourceHeight(right) > sourceHeight(left) + 1) {
|
|
23
|
-
if (sourceHeight(right.right) >= sourceHeight(right.left)) return sourceNode(sourceNode(left, right.left), right.right);
|
|
24
|
-
return sourceNode(sourceNode(left, right.left.left), sourceNode(right.left.right, right.right));
|
|
25
|
-
}
|
|
26
|
-
return sourceNode(left, right);
|
|
27
|
-
}
|
|
28
|
-
function sourceJoin(left, right) {
|
|
29
|
-
if (!left || !right) return left || right;
|
|
30
|
-
if (left.height > right.height + 1) return sourceBalance(left.left, sourceJoin(left.right, right));
|
|
31
|
-
if (right.height > left.height + 1) return sourceBalance(sourceJoin(left, right.left), right.right);
|
|
32
|
-
return sourceNode(left, right);
|
|
33
|
-
}
|
|
34
|
-
function sourceSplit(node, at) {
|
|
35
|
-
if (!node || at === 0) return [null, node];
|
|
36
|
-
if (at === node.length) return [node, null];
|
|
37
|
-
if (node.text !== undefined) return [sourceLeaf(node.text, node.from, node.from + at), sourceLeaf(node.text, node.from + at, node.from + node.length)];
|
|
38
|
-
if (at < node.left.length) {
|
|
39
|
-
const [left, right] = sourceSplit(node.left, at);
|
|
40
|
-
return [left, sourceJoin(right, node.right)];
|
|
41
|
-
}
|
|
42
|
-
const [left, right] = sourceSplit(node.right, at - node.left.length);
|
|
43
|
-
return [sourceJoin(node.left, left), right];
|
|
44
|
-
}
|
|
45
|
-
function* sourceParts(node, from, to) {
|
|
46
|
-
if (!node || from >= to) return;
|
|
47
|
-
if (node.text !== undefined) {
|
|
48
|
-
yield node.from + from === 0 && node.from + to === node.text.length ? node.text : node.text.slice(node.from + from, node.from + to); return;
|
|
49
|
-
}
|
|
50
|
-
if (from < node.left.length) yield* sourceParts(node.left, from, Math.min(to, node.left.length));
|
|
51
|
-
if (to > node.left.length) yield* sourceParts(node.right, Math.max(0, from - node.left.length), to - node.left.length);
|
|
52
|
-
}
|
|
53
|
-
function* sourceLeaves(node) {
|
|
54
|
-
if (!node) return;
|
|
55
|
-
if (node.text !== undefined) { yield node; return; }
|
|
56
|
-
yield* sourceLeaves(node.left); yield* sourceLeaves(node.right);
|
|
57
|
-
}
|
|
58
|
-
export class HistorySource {
|
|
59
|
-
#root;
|
|
60
|
-
constructor(text, root = sourceLeaf(text)) { this.#root = root; }
|
|
61
|
-
static fromParts(parts) {
|
|
62
|
-
const leaves = Array.from(parts, text => sourceLeaf(text)).filter(Boolean);
|
|
63
|
-
const build = (from, to) => from === to ? null : to - from === 1 ? leaves[from]
|
|
64
|
-
: sourceNode(build(from, Math.floor((from + to) / 2)), build(Math.floor((from + to) / 2), to));
|
|
65
|
-
return new HistorySource('', build(0, leaves.length));
|
|
66
|
-
}
|
|
67
|
-
get length() { return this.#root?.length || 0; }
|
|
68
|
-
charCodeAt(at) {
|
|
69
|
-
if (at < 0 || at >= this.length) return NaN;
|
|
70
|
-
let node = this.#root;
|
|
71
|
-
while (node.text === undefined) {
|
|
72
|
-
if (at < node.left.length) node = node.left;
|
|
73
|
-
else { at -= node.left.length; node = node.right; }
|
|
74
|
-
}
|
|
75
|
-
return node.text.charCodeAt(node.from + at);
|
|
76
|
-
}
|
|
77
|
-
parts(from = 0, to = this.length) { return sourceParts(this.#root, from, to); }
|
|
78
|
-
slice(from = 0, to = this.length) {
|
|
79
|
-
const root = this.#root;
|
|
80
|
-
if (!root || from >= to) return '';
|
|
81
|
-
if (root.text !== undefined) return root.from + from === 0 && root.from + to === root.text.length
|
|
82
|
-
? root.text : root.text.slice(root.from + from, root.from + to);
|
|
83
|
-
return Array.from(this.parts(from, to)).join('');
|
|
84
|
-
}
|
|
85
|
-
matches(from, text) {
|
|
86
|
-
if (from < 0 || from + text.length > this.length) return false;
|
|
87
|
-
let at = 0;
|
|
88
|
-
for (const part of this.parts(from, from + text.length)) {
|
|
89
|
-
if (!text.startsWith(part, at)) return false;
|
|
90
|
-
at += part.length;
|
|
91
|
-
}
|
|
92
|
-
return at === text.length;
|
|
93
|
-
}
|
|
94
|
-
sameParts(parts) {
|
|
95
|
-
const leaves = sourceLeaves(this.#root);
|
|
96
|
-
let leaf = leaves.next().value, offset = 0;
|
|
97
|
-
for (const text of parts) for (let at = 0; at < text.length;) {
|
|
98
|
-
if (!leaf) return false;
|
|
99
|
-
const length = Math.min(leaf.length - offset, text.length - at), from = leaf.from + offset;
|
|
100
|
-
if ((leaf.text !== text || from !== at) && leaf.text.slice(from, from + length) !== text.slice(at, at + length)) return false;
|
|
101
|
-
offset += length; at += length;
|
|
102
|
-
if (offset === leaf.length) { leaf = leaves.next().value; offset = 0; }
|
|
103
|
-
}
|
|
104
|
-
return !leaf;
|
|
105
|
-
}
|
|
106
|
-
replace(pos, length, text) {
|
|
107
|
-
const [left, rest] = sourceSplit(this.#root, pos), [, right] = sourceSplit(rest, length);
|
|
108
|
-
return new HistorySource('', sourceJoin(sourceJoin(left, sourceLeaf(text)), right));
|
|
109
|
-
}
|
|
110
|
-
before(splices) {
|
|
111
|
-
let source = this;
|
|
112
|
-
for (let index = splices.length - 1; index >= 0; index--) {
|
|
113
|
-
const row = splices[index];
|
|
114
|
-
if (!row || !Number.isSafeInteger(row.pos) || row.pos < 0 || Object.is(row.pos, -0) ||
|
|
115
|
-
typeof row.removed !== 'string' || typeof row.inserted !== 'string' ||
|
|
116
|
-
/[\uD800-\uDFFF]/u.test(row.removed) || /[\uD800-\uDFFF]/u.test(row.inserted) || !source.matches(row.pos, row.inserted)) return null;
|
|
117
|
-
source = source.replace(row.pos, row.inserted.length, row.removed);
|
|
118
|
-
if (!historyBoundary(source, row.pos) || !historyBoundary(source, row.pos + row.removed.length)) return null;
|
|
119
|
-
}
|
|
120
|
-
return source;
|
|
121
|
-
}
|
|
122
|
-
apply(splices, inverse = false) {
|
|
123
|
-
if (!Array.isArray(splices)) return null;
|
|
124
|
-
let source = this;
|
|
125
|
-
for (let index = 0; index < splices.length; index++) {
|
|
126
|
-
const row = splices[inverse ? splices.length - 1 - index : index];
|
|
127
|
-
const removed = inverse ? row?.inserted : row?.removed, inserted = inverse ? row?.removed : row?.inserted;
|
|
128
|
-
if (typeof removed !== 'string' || typeof inserted !== 'string' ||
|
|
129
|
-
/[\uD800-\uDFFF]/u.test(removed) || /[\uD800-\uDFFF]/u.test(inserted) ||
|
|
130
|
-
!historyBoundary(source, row.pos) || !historyBoundary(source, row.pos + removed.length) || !source.matches(row.pos, removed)) return null;
|
|
131
|
-
source = source.replace(row.pos, removed.length, inserted);
|
|
132
|
-
}
|
|
133
|
-
return source;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
13
|
function minimalHistorySplice(before, after, pos = 0) {
|
|
138
14
|
let first = 0, a = before.length, b = after.length;
|
|
139
15
|
while (first < a && first < b && before[first] === after[first]) first++;
|
|
@@ -158,7 +34,7 @@ function historyHunks(row) {
|
|
|
158
34
|
|
|
159
35
|
export function projectInverseSource(prepared, selected, projectedEffects, options = {}) {
|
|
160
36
|
const records = prepared.records || prepared.rows.map(({record, splices}) => record.splices === splices ? record : {...record, splices});
|
|
161
|
-
if (!records.some(record => !prepared.effects.references.get(record.transaction.id)?.length &&
|
|
37
|
+
if (!options.origins && !records.some(record => !prepared.effects.references.get(record.transaction.id)?.length &&
|
|
162
38
|
prepared.effects.active.has(record.transaction.id) !== projectedEffects.active.has(record.transaction.id)))
|
|
163
39
|
return {ok: true, splices: [], after: prepared.source, superseded: [], overlaps: []};
|
|
164
40
|
try {
|
|
@@ -417,6 +293,13 @@ export function projectInverseSource(prepared, selected, projectedEffects, optio
|
|
|
417
293
|
}
|
|
418
294
|
}
|
|
419
295
|
if (!new HistorySource(prepared.source).sameParts(texts(pieces))) throw Error('head');
|
|
296
|
+
if (options.origins) {
|
|
297
|
+
let at = 0;
|
|
298
|
+
return {ok: true, origins: pieces.filter(piece => piece.text).map(piece => {
|
|
299
|
+
const from = at; at += piece.text.length;
|
|
300
|
+
return [from, at, byId.get(piece.owner)?.actId ?? null];
|
|
301
|
+
})};
|
|
302
|
+
}
|
|
420
303
|
const origins = new Map();
|
|
421
304
|
let offset = 0;
|
|
422
305
|
for (const piece of pieces) if (piece.text) { origins.set(piece, offset); offset += piece.text.length; }
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
import {fields, scalar, plainPrototype} from './data.mjs';
|
|
3
|
+
import {transformText} from './source.mjs';
|
|
3
4
|
|
|
4
5
|
const _RAPIER_TRANSACTION_ACTOR_LIMIT = 160;
|
|
5
6
|
const _RAPIER_TRANSACTION_OPERATION_LIMIT = 96;
|
|
@@ -8,23 +9,7 @@ const _RAPIER_TRANSACTION_REQUEST_LIMIT = 160;
|
|
|
8
9
|
function _rapierTransformSplices(text, splices, inverse = false) {
|
|
9
10
|
try {
|
|
10
11
|
if (!Array.isArray(splices)) return null;
|
|
11
|
-
|
|
12
|
-
const whole = text => typeof text === 'string' && !/[\uD800-\uDFFF]/u.test(text);
|
|
13
|
-
const splitsPair = at => at > 0 && at < value.length &&
|
|
14
|
-
(value.charCodeAt(at - 1) & 0xFC00) === 0xD800 &&
|
|
15
|
-
(value.charCodeAt(at) & 0xFC00) === 0xDC00;
|
|
16
|
-
const rows = inverse ? splices.slice().reverse() : splices;
|
|
17
|
-
for (const row of rows) {
|
|
18
|
-
if (!row || !Number.isSafeInteger(row.pos) || row.pos < 0 || Object.is(row.pos, -0)) return null;
|
|
19
|
-
const pos = row.pos;
|
|
20
|
-
const removed = inverse ? row.inserted : row.removed;
|
|
21
|
-
const inserted = inverse ? row.removed : row.inserted;
|
|
22
|
-
if (!whole(removed) || !whole(inserted) || pos > value.length ||
|
|
23
|
-
pos + removed.length > value.length || splitsPair(pos) || splitsPair(pos + removed.length) ||
|
|
24
|
-
value.slice(pos, pos + removed.length) !== removed) return null;
|
|
25
|
-
value = value.slice(0, pos) + inserted + value.slice(pos + removed.length);
|
|
26
|
-
}
|
|
27
|
-
return value;
|
|
12
|
+
return transformText(String(text == null ? '' : text), splices, inverse);
|
|
28
13
|
} catch (_) { return null; }
|
|
29
14
|
}
|
|
30
15
|
|