diff --git a/dm/games/0100FD8022DAA000/bf_want.tsv b/dm/games/0100FD8022DAA000/bf_want.tsv new file mode 100644 index 0000000..54caeb8 --- /dev/null +++ b/dm/games/0100FD8022DAA000/bf_want.tsv @@ -0,0 +1 @@ +# generated diff --git a/dm/games/0100FD8022DAA000/dmsh_chain.h b/dm/games/0100FD8022DAA000/dmsh_chain.h new file mode 100644 index 0000000..e9afbeb --- /dev/null +++ b/dm/games/0100FD8022DAA000/dmsh_chain.h @@ -0,0 +1,2 @@ +// Generated file (dm/gfx/tools/dmsh_chain.py --header, game 0100FD8022DAA000): the B shader library translation chain version this source tree expects (default options); the host loads only /b-/ +#define DMSH_CHAIN "349cb1de4c49" diff --git a/dm/games/0100FD8022DAA000/game.tsv b/dm/games/0100FD8022DAA000/game.tsv new file mode 100644 index 0000000..23ca915 --- /dev/null +++ b/dm/games/0100FD8022DAA000/game.tsv @@ -0,0 +1,46 @@ +# Super Mario Galaxy 2 (Switch, 2025; base game v0 + update 1.4.0 = v393216), SDK 18.3.5. +# NERD's "Hagi" Wii layer, as in Super Mario Galaxy (010099C022B96000): the Wii game's PowerPC code is statically recompiled into main, and Hagi stands in for the Wii +# hardware (GX → Vulkan with SPIR-V generated at run time, the DSP, DVD reads from the RomFS). main's bss is about 2.6 GB (the emulated memory). +# Renders with Vulkan: main imports 99 vk* functions, which subsdk4 (NVIDIA's Vulkan driver, on GLSLC in subsdk1) supplies; subsdk3 is NVIDIA's OpenGL driver, subsdk2 nn::pcm. +# The host implements the vk* functions on Metal itself (dm/gfx/vk/hle_vk.m), so only main, subsdk0 (NintendoSDK_movie) and sdk are loaded; subsdk0 and sdk are Galaxy's builds. +# Values marked "Galaxy's" are not measured for this game yet + +# ---- Identity ---- +title_id 0100FD8022DAA000 +program_id 0100FD8022DAA000 + +# ---- App ---- +name Super Mario Galaxy 2 +ipa SuperMarioGalaxy2.ipa +app_category public.app-category.action-games +pad_layout full +# handheld: the pointer (star bits, menus, the file select) is the touch screen; docked it is the Joy-Con gyro, which the host does not have +op_mode handheld + +# ---- Versions ---- +build v393216 1.4.0 main=4c4513d976582b4a7a766401a8ea6dbf subsdk0=8a72a4dcbfd375d2952288284259da94 sdk=6075151627016eef437c1312f2e3ed56 +package v393216 +shader_versions v393216 + +# ---- Graphics ---- +# main imports Vulkan, not NVN: the host's Vulkan layer (dm/gfx/vk/hle_vk.m). Hagi generates its GX shaders as SPIR-V at run time, and the RomFS has no SPIR-V file, +# so the NSP script captures them by booting the game on the Mac (vk_capture.tsv lists the keys); vk_shaders.py translates the capture + +# ---- Files ---- +# load order as on Horizon: main, subsdk*, sdk; subsdk1–4 (GLSLC, nn::pcm, NVIDIA's OpenGL and Vulkan drivers) are replaced by the host's Vulkan layer and not loaded +modules main subsdk0 sdk +romfs_marker hagi.config +zip_store .arc:.ast:.bmp:.cache:.har:.png:.szs:.zst:.metallib + +# ---- Memory ---- +# NPDM system resource 8 MB. As in Galaxy: no SetHeapSize, the game's memory is main's 2.6 GB bss. Unlike Galaxy, the movie player's StandardAllocator takes 384 MB of +# virtual address memory (main+0x62c280: Initialize(nullptr, 0x18000000)), which the alias region holds after the SDK's node area (cut to 62 MB in patch_nso.py for this sdk build). +# So the block is 1.25 GB = 256 MB in front + 512 MB alias region + 256 MB stack region + 256 MB heap region; with main's 2.7 GB image about 4 GB of address space, as Galaxy's. +# Footprint on the Mac (M4 Pro, the opening's first stage): 1.93 GB, flat from 2 to 5 minutes (Metal 1.0 GB) +mem_reserve 0x50000000 +mem_alias 0x20000000 +mem_stack 0x10000000 +app_pool 0xCD500000 + +# ---- Shader split ---- +shader_note Super Mario Galaxy 2 has no NVN shaders (its SPIR-V shaders go through the Vulkan layer) diff --git a/dm/games/0100FD8022DAA000/pso_manifest.tsv b/dm/games/0100FD8022DAA000/pso_manifest.tsv new file mode 100644 index 0000000..f2a9403 --- /dev/null +++ b/dm/games/0100FD8022DAA000/pso_manifest.tsv @@ -0,0 +1 @@ +# Prewarm seed list (shipped in the app, next to shader_map.tsv). Rows: Sshader keystage / Rrender pipeline key (pso_skey hex) / Ccompute shader key. diff --git a/dm/games/0100FD8022DAA000/shader_facts.tsv b/dm/games/0100FD8022DAA000/shader_facts.tsv new file mode 100644 index 0000000..e665d36 --- /dev/null +++ b/dm/games/0100FD8022DAA000/shader_facts.tsv @@ -0,0 +1 @@ +# Answer table for translation queries (generated by dm/gfx/tools/shader_split.py, do not edit): key fact JSON. This game has no PC version to pair with: only the thread group / shared memory of compute shaders (taken from the control section); other queries get the translator defaults diff --git a/dm/games/0100FD8022DAA000/shader_map.tsv b/dm/games/0100FD8022DAA000/shader_map.tsv new file mode 100644 index 0000000..f75dc2a --- /dev/null +++ b/dm/games/0100FD8022DAA000/shader_map.tsv @@ -0,0 +1,2 @@ +# kind: evidence Super Mario Galaxy 2 has no NVN shaders: the table stays empty (its SPIR-V shaders go through the Vulkan layer) +package index stage dm_ctl_sha16 source diff --git a/dm/games/0100FD8022DAA000/shader_map.tsv.conflicts.tsv b/dm/games/0100FD8022DAA000/shader_map.tsv.conflicts.tsv new file mode 100644 index 0000000..35c1b4d --- /dev/null +++ b/dm/games/0100FD8022DAA000/shader_map.tsv.conflicts.tsv @@ -0,0 +1,2 @@ +# kind: evidence control-section key conflict rulings: empty +dm_ctl_sha16 chosen_pc class candidates records diff --git a/dm/games/0100FD8022DAA000/shader_pairs.tsv b/dm/games/0100FD8022DAA000/shader_pairs.tsv new file mode 100644 index 0000000..ac32dd3 --- /dev/null +++ b/dm/games/0100FD8022DAA000/shader_pairs.tsv @@ -0,0 +1 @@ +# kind: evidence vertex / pixel shader pairs within BNSH variations (generated by dm/gfx/tools/shader_split.py, do not edit): vertex key pixel key diff --git a/dm/games/0100FD8022DAA000/vk_capture.tsv b/dm/games/0100FD8022DAA000/vk_capture.tsv new file mode 100644 index 0000000..2cbcdce --- /dev/null +++ b/dm/games/0100FD8022DAA000/vk_capture.tsv @@ -0,0 +1,3799 @@ +# SPIR-V modules Super Mario Galaxy 2 creates at run time (the Mac host's DM_VK_CAPTURE, booting to its title screen: built from the pipeline database during "Initializing system..."): key = sha256(SPIR-V)[:16]. +# The NSP script's Vulkan shader capture runs until every key here is captured; vk_shaders.py translates the capture with the RomFS +0027c151bf2237b0 +003a975c033ddc22 +004114d7405a2475 +005049f22e647db5 +005687d7d37b377a +005f1fdea6b0c68c +0070a206a0adb27e +0077f3ea52fd8a6a +007a1b66f8334848 +00884c687eeaa686 +0088cd7214f10ab4 +00932832e1c04b82 +00aadd8587cd514f +00cf4d55e96fdc6a +00d9d320a625c9c2 +00e5437c7e558e61 +00e907416aa23a1c +0127fcc6fee0c50f +01783ef47fdf1c5d +0185cd817ff791e8 +018d00617fe4edfd +019b0bf1c832cac8 +019e7b8bd318e2cc +01cc9f4a004477a4 +01d0cc16517f8c02 +01d6ea41b8f2844b +01fc8ed71e159cdb +025e4b683a0b006d +027f798e48b382fc +029db2793c1e5518 +029df56ba8e47a31 +02a269c32500bdbe +02d3f45cfbb067a0 +02dd20d788547511 +02e2db6acc810574 +02f9959b1f41939e +02fb26c335cc48fe +030750468f52f511 +031fcef816f05b28 +0321327702cbe5d0 +033ab4b0edd84310 +034333a602451e09 +034693d337251f87 +0389274f2ee2b651 +03921f1fc7a84de6 +039d27fd5c40c80d +039ff1f416d642c7 +03a5d0668b0457bf +03b6bc072c3d8c19 +03c44719c64c6e4e +03de114bb751c763 +03ef970b17f24834 +03ff8c3f35536805 +041f36a37ff96ac1 +042d73f1fb87fd35 +04571ae0407d5cd4 +045afc9b9f5fe730 +04625831b361d0be +0464074dbfb29b23 +047f69d9867ae0a4 +0488a7ec2666ee5e +04a96642570e1d9a +04d8ab8145839487 +04e6ac6ef0433b41 +04eb4b1f81d95ae5 +04ec2ef0f5146cdd +04f409ef76d25010 +04fa2b2a62530831 +04feea8eff459264 +0521debbfd342761 +05373e3d6c51cd8d +054add35bd116efd +0557d65ed4652129 +0570bb9c40813d19 +0574e2566e573100 +05950c27cae17344 +059c99e0a0d44338 +05b182f3319fd678 +05d5dd1ce0a7446d +05e4866dc0fb6da4 +05fe08ae98e4b525 +060d2af3a4026772 +0615f87ac42e395e +06265972197f8e2b +063dd0867b456211 +0641f7631c929f93 +065b5e225868cf06 +065dd4e5cce61f00 +066d8c3c4816e164 +0688edc2e0b79550 +068b26f2bec0ae01 +06b3fbe6165f292b +06b9cebc193e945d +0729ec1cd3df4d39 +072ae4783cc9053b +0742763a8a4880e1 +075ab5becfff7c05 +0766b2d57f7d97e2 +076c236ae5a82989 +07909c2f80ce8686 +07f8a4751f623a93 +080a2b0b167049b9 +080b5ba32c69e3b3 +080cf09fa003990c +080f87b3fa76b846 +081f3d5c5619d05e +0837488bbd82a68b +08394479c5ee3855 +08421cf0f3f09acb +0847b9a7fbab1130 +0883520a121d3235 +0885a1f4e606bfa9 +08a48add3bc77600 +08abf9e10146b35b +08aea64ab8613ab9 +08bb823fd95e2c27 +08c3196f1e310428 +08e6f1ee6e69bb36 +08f1f77161563572 +08f30ec81ea0902a +08fc1225c13d7aa1 +090d9f2dc174264d +09100d8fc3fa355e +091b7b437097525e +092d07d7768453e8 +094521c4151cc875 +094572ec7fce1a39 +094b63ba78465b54 +094da25ba038fd14 +096374497d9c5ffb +096cd15ad3f6536f +098dbecd44360d17 +09adc198ad040cbd +09b8e58bee04b8c2 +09c1b83a947e89d9 +09de5ab142824436 +09e1693b53a9a835 +0a182b2f2ea57c9f +0a1f3cf849718eaf +0a335a3a4d2b626b +0a5e70e8cb550b9c +0a6aca555d62984c +0a774cb32415b7cc +0a7f39bfcf74f8e7 +0a8b93c589763143 +0a8bbfdb999276e5 +0aa1e90a505ebc66 +0aa4522b98387fc4 +0aa8147f1de49e1b +0ab1b7b95f801f6f +0ab28f8d1f305dd3 +0acf0e984b0082f9 +0af54d1a54268cae +0af882d5e1309fac +0b0041c8c26e5f20 +0b29ed32e8738036 +0b5cc921f4664f61 +0b601a024ae5e8ec +0b65a3c9a132ad64 +0b69321e54dc0ee9 +0b874628e4361f84 +0b87af32889a9325 +0b93da08f3314661 +0bab5186cc0c4834 +0bcbc784d3ad55e7 +0bd58bca871dc1a3 +0bf1bbbfa04ba1c2 +0bf560eb46355edd +0c003b70e82b763d +0c1407eebc90a7ab +0c1561128ae673d8 +0c3dd8ad4995180c +0c3f85d2288bb09a +0c491856109d7805 +0c52a5e90f0dbb30 +0c5a58e0172a40d6 +0c7fcc768df3af85 +0c8a2ba464c88153 +0ca9e7a2f99f3910 +0ce1799b59443e05 +0cfc0647d141043a +0cfcda6247d8d3ac +0cffb9841636bf7c +0d0073abc9f4e1d4 +0d3823fd83e1d1c9 +0d47c8bd862ac894 +0d63d684e4817c2f +0d6511459e9d413b +0d7c27360503468d +0d8db04086550fc0 +0da79f4162cbfc3c +0db7e3aeedb8c080 +0dbe9208f1908970 +0dc114a78a8afc1e +0dd832ef0e4bbf3c +0ddb3a081463e2f5 +0dec2281aedca0ed +0dedc44e415dbdf7 +0e1f01885f22e9e0 +0e32ca57734dac68 +0e3927d241a4711a +0e4462f039762718 +0e4abf9912153dd5 +0e6034aa60917c00 +0e64b6c7cb466a01 +0e69a1fb511603e9 +0e6cbe6e99f34116 +0e83fdd719187be2 +0e8fd0c26f432ce8 +0e90209898936bd2 +0e9dd1e2bd0e66ac +0ea20b3958f34f16 +0eab6941af00bbb1 +0eba6cd65f34a5e2 +0ec0a8f3fbab84ad +0ec88db41be1297b +0ee04c6e10ebbbfd +0ee087e1581d3989 +0ef0c089ed1f2ae5 +0ef8dc9d28e2609f +0efcd773669bfa6b +0efedee60ca311e1 +0f0203e3a765685f +0f26154526c3caff +0f27b16df042eb16 +0f390f332cabbd62 +0f70594cd3ca93d0 +0f84a763ab96211e +0f95de0dd10f7bbf +0f9a450da3d69b4f +0fc62a763b90af3d +0fdb2478eba07831 +0fdd29021fdfde1d +0fe65e4e1ce7899a +0ff21b88a2821f93 +0ff7d7ced053b612 +0ffccc5a18c78986 +100d65f0525439fe +10247d1f33b3b135 +1030695c4822dee4 +104541e0ea46ca3c +105bb2fdd49235b8 +1073961125f2842c +10895599823b928f +109a72b44a9f9d27 +109d5dc028f1e95b +109f96da9da94e42 +10acd138454c62b4 +10e8bc795dba9078 +11399804c7a76391 +113acaec708d6354 +113d21edb618f63e +11720c84f2650c93 +117510c107caf580 +1188b91be5e6b203 +11b34695242576df +11ca77e87a8cd13e +11cced2e7d65c864 +11e3b1aa872e4765 +11ebd31ff9c4864e +120e067633d12aba +1210fea54174c870 +121bc434a67e76bb +121edf1007fed3a0 +1224e8b16942d53e +12264848de16d896 +12279ad1d38c539a +1249df3cab4fb0bd +126279f9dab28cc8 +126288b2d19927a9 +128effcaeacf2d71 +12ac162cd8013e94 +12c75f91154926de +12d72385d0266696 +12f57990b29c58a2 +12fc6d6be2f9adad +13106366002d066b +131aedb2e6fdf0b3 +131b16bad81c35ff +131c41c4f460bd87 +131f44f62202dd13 +132a3c7406fec394 +132a74dc216a9ace +133aa6666ea13100 +134cd6965a632126 +1357f7d3b8989690 +135c6e60226628c3 +138342abf4631528 +138650d22998274a +138839fff7efe24a +138b74fd880561a1 +1397a025276eb3f2 +13acbece393cf925 +13d94f3660d8081a +141a5ab5a64b3d95 +141b83f7d4e36acd +142e650c17349ab6 +143f4d52179cff12 +144099afc165a98e +144fe4b7f58d8a38 +1468946a599c90f6 +1472cf4145ecc3eb +1491e4fa087a5972 +149c53404775be23 +14a109f1ddf0c62e +14a46986f825474e +14b5e39068747643 +14b7ccaa5f85fecc +14c3072ffb932ab3 +14ddcc4e68f82560 +14de07354d0a066c +151179d2271f41b0 +15159b55c15649f0 +154d7856960e9716 +1577a3beb9e1fbba +157a8b0197f4abd3 +158b7e10ea56cd18 +15aa3546c96d9a2e +15b23684913bd7fd +15b43bacba33b8d7 +15b8c747eeaab140 +16178c303d971f19 +161acd452564dd4f +162313b03c8c0d5b +162c19dc1fd722ad +162e56b425a279c1 +167ce86f5e98cec2 +1683df48447f1d3f +168c11b5065df831 +1699c1c86b9aef3f +169b4d6dbca6959f +16c67efa5bfa7604 +16cce06e686fa20d +16d55e87d1f59471 +16d8250e69cb5037 +16dede04e72b3600 +16ea0dfab767cdc9 +16ec862fdefa711c +16ed7d679a0cfb98 +16f5aed296f13779 +171a58229e5c89c7 +1732682f3d22aa03 +17407c75402a5a4e +17456f871bb62c35 +1750038dfea62198 +17515e4ae512a03c +175deeb1cd510589 +177c9b49b304d5e3 +177ef06b85565a9f +178d3bb36e662f05 +17ac6cb55ffe93bc +17b26261cff87514 +17c03becc808456b +17c482d9bbd5c98c +17e971e82f557e71 +180b5317071237d2 +18156482ad7c4f65 +1828183560e3fd73 +1831c41a18d757ef +183f5c15463f9af9 +184b284601645bb7 +185d8b50a9767ef1 +188769a0bc63dafa +188acfbf1e827d40 +18a1e2db801cd47a +18a2aece1fa77843 +18a6815774fc1b9d +18aa4219fdce73b5 +18b28186b4e54869 +18b29542defb5939 +18c2032df0c025a1 +19015283f2364c9b +19126b03b2e60d39 +191ef3fe72daa18f +192d63949e58d309 +194224c12d7153e8 +1958eed0533ef443 +196e9e88ac74efb6 +1988ea3cb9986218 +19949d9c2b7b9095 +1997d5759416b45e +199ba85218982ab6 +19b876514233e505 +19be3295ee804b39 +19c0a279a1ffaca7 +19d342ad3b70bfd1 +19d49a887847b2c5 +19d8a16d4fff911f +19d948adc39ee1a1 +19dbd7818da70dbc +19f7eb1ca1993ce4 +1a0cf1e36a4d57f4 +1a0d94f5d1f975b6 +1a24c896d72486bd +1a29ffb6135d622a +1a4370da0b41b997 +1a4c3bb8fd5cb947 +1a65d34ea32ef330 +1a7e8435dded5412 +1a84f286b6f3bac5 +1a9d20b766274324 +1aae6c5817e5d76a +1ad4aebba2a7bbab +1ad87e9d808ed7b4 +1aeabbac99e32b21 +1afc0aa4aabe5852 +1b1208b667852a6c +1b4993a044a29cce +1b509a00f9df4664 +1b55be9358a6f1ea +1b56377073f7513c +1b5c1b1a7c136688 +1b7a45e17ac5d33f +1b7b139d43d35a4c +1b86518eee283eba +1ba0ea565d2eb8da +1bbe2e314900707c +1bc778367ea73a52 +1bc97172f12929a3 +1bd6180d09950a3e +1bd63a40ab323f8c +1c19557b4cd3b89e +1c5dc1abf41cde21 +1c5f6035313f1a0f +1c74b0295a6c35bd +1c8e714494e96749 +1caeab8e94f43ea5 +1caff138d848043f +1ce9286cf109e010 +1cebaab3b57f0138 +1d22e108d781ed40 +1d2f228ef7fb0455 +1d4d75558d0f8f13 +1d566be16301ca78 +1d65a3c51f71dc92 +1d86b32f4e299b90 +1d8be5685c9e105d +1d8f598d9cce5925 +1d908a6f67964b07 +1d91e6ae12671c47 +1dadb641f7a9a0d9 +1db9345e53a7493f +1dbbf9d0042f5929 +1dcf9070a444119d +1dfefb567ab06050 +1e082fbfc90c83c0 +1e392733ef8febd4 +1e3a5d0471e8b388 +1e5b61079fa4b8aa +1e88cb65e432b292 +1e8aa7acabe2c51c +1e90687efe48480b +1eb272ae796e495b +1ed0518f6a45e00a +1ee1f95f4ebf2c25 +1ee737d75469ea9e +1ef5e20e066879e6 +1f0d9a2e6d0d09ca +1f0f406a030b8b5d +1f2e1c2191eb0632 +1f48b6e1424523b0 +1f675ae744987382 +1f6daee8905636b1 +1f710fc1b88b61b6 +1f77fded9e233677 +1f92b653f416c153 +1fc190e823e5efb7 +1fc582cc739f521a +1fcdcf960464ed77 +1fcea9c69d43ed5f +1fd43fc81f3e5cfc +1fec6686c8a33406 +1feffa8614962592 +201f5b3a22bed4ce +204658e73d46e2e2 +2052530f966fa69b +205eb1c9dde50c2e +206327d9620ccafa +2073958ce4ee82de +207edbbdf2c3f6ec +20c132e996a3c68a +20cb1b7537cc3b65 +20cbaa3f302ea27f +20d1eed7ea4fde2e +20d2e725e1ab1d53 +20de17928793dba8 +20eb177d671af6a6 +20fdbb8bd064448e +21246f571dc8b250 +21261b2a2dd75d2a +2136a0f1a9205d3e +215419e382b9a019 +215e7a7fc4222674 +217d851340605344 +21979f99f13d2133 +21a34ca363154504 +21b0f3e92e28129f +21b223da42ca7156 +21d81a63644c5dc9 +21e53157bcd6cf9d +21e56bd1b3990d5c +220444375283f36d +220f1b79c970a5ea +221a3410cbc7474b +2236c1d443c4e218 +223889c04c8ef3f5 +223cff79d7c760d9 +2262b689e2634123 +2269a0114c9ab070 +2272a3f7502e6258 +2274ee40b42bfa65 +22aa2f87431aee39 +22b6cf0b45b2685c +22bbe37b48b6533c +22c25c0387d74e5d +22dfe10965454dba +22e125e8f21ac9a5 +2301080e8cec3050 +23071878a1da4dc2 +2308930c694b157e +231ef504b47222b4 +23531e717c40501c +2356d0e6bc3e3ac7 +23902ce553f762bd +2391cd1ce2edf664 +239216c0815de021 +239243ec0de0d6a2 +23e1b6a55b5c91fe +23e93bffcfa101a8 +23f1c84c5f16a9fd +23f6d39c0694b25b +23fcb896fb4e7981 +240edbd3f4a2d754 +242c2f29f188239f +242fe06d7cd8f2ce +243bde2d9e49228c +245da5ed346d2cd0 +245fc9585ac89fcd +2488648eb055ab31 +248d95316cf3e657 +24a01dcad72f1c89 +24aeb409f6a7f147 +24b2788ea33e4706 +24b8c522f612ffd9 +24c3516b3d8d3730 +24c54ffc939cb900 +24dfa6e10c76cacd +24e4ed9b78ac7514 +24ee9617c9897dfa +2515784dfe2ca2ef +25173fcd64189daf +251f57789b5ec002 +2562dadcad60e688 +257867e8f7595df2 +257cd612c4f18833 +258a819efb457cd8 +2595a14296b3cf59 +259e2350c4864831 +25cb623728cf61a5 +25dd7d3645852a28 +25e1f48d9676f946 +25ef055770d59c56 +260465c622a886b7 +2604b4d01b1e1dd4 +260b5aa4ccd7cced +2610422094cf417d +2625e4de88b16295 +2652ace310a87da3 +267b7aaa8c16a34a +269404bc322c12e6 +26a4479812ffc42d +26f2f5d442e73039 +2706ea24b5d04e6d +270e03c2eab0fdf7 +2717734d28163e3b +272a629468a1bb73 +272c615e0dddeacc +272ddeecdfae32b2 +273cd01f670e6a14 +273dbb194deb8e3b +274674b6444dcd22 +2759d4052023aef6 +2762348ac10cb307 +27693b4650624e57 +2797e2f4411da71b +27d08367c6a7dfb1 +27d3253f5b23854b +27e89fff6b15b196 +27ec66e176617f18 +27f6503fe663172a +282000888e34b89d +28343d63cd0b697a +28346ac615efd562 +28359aeec6b1822f +28417960555c2c65 +28668901a9747722 +2876d67189d2b52c +287a5559a5c03a82 +288550e7bbc80129 +28a8fcc32286a787 +28a904e64899a559 +28e344fcfa3fbcf9 +28facacdfbd84854 +29065635577117ca +29089cd971e00729 +290eca41f2a134e3 +29286ab13555d6d3 +292fbbdfeab806de +29316e75e926086a +29339eef39abf7a6 +294f30b9babd14c3 +294fcbf67de4b5cb +296de4425bc73051 +297ba198d584faf8 +29809c9c8ba894db +29883ace01717056 +2991d4eb93941722 +29931ffa477e06fc +2996174dd7aa860f +299fee7223ef67ca +29a0c941439f0702 +29a1782c10b62e14 +29ad765cb03318ef +29b99e689bd42f7f +29d0879b9af41f83 +29d384e215ae94f1 +29d7358a83a315b7 +29e27ec386afda1b +29f3543de96a516a +2a00b9b10dc377ae +2a01ce10a5de4f23 +2a0b7cb415ad6374 +2a2ff775b6e72e52 +2a3dd2173dbecb57 +2a54faaf3e13495e +2a573ed8f30cbda1 +2a7fd622b2e201b2 +2a8e326ee6e6af43 +2aaabf1b7fbe3e3b +2aac0fa111569cda +2abb7d8ea66de403 +2aff888fdc03ce5b +2b13b044509e676e +2b16c58b6c69bafd +2b25a14a7a565eaa +2b28b71aece7ba31 +2b29bbffafb9ba50 +2b4318ad92d40108 +2b489aa57ba16fc9 +2b4aad21b1f4b264 +2b4f0ff7beabffad +2b5f719b986ae0ce +2b965613b2616e92 +2ba238f45d9e5d9e +2bad0884317a585d +2be7c6aa72caf844 +2bed473b4bccb2b7 +2bf29b399331497d +2c06b064d266af7d +2c3896bcb8700e0f +2c4bde55c4b0a6c7 +2c94e1aab6ce839e +2c9f844d9fe0bbf0 +2ca6ecfb7fcc2ec3 +2cd457bfef49711c +2ce67948fea9ea33 +2d0c78807f4593a1 +2d1e693ebe2e9a37 +2d239f7bea882506 +2d2553c24416c444 +2d28c410857a4f88 +2d2e8a5812618a42 +2d3e6de7d974951d +2d48b309de20321b +2d4dda9ba96ce783 +2d5974cd962eb012 +2d6c9acc4eeba6cc +2d75d5a1294d800c +2d7e41b06e942d68 +2dacc2e3bf983c7f +2e08265f7e51bb96 +2e0ba9a52ef485f2 +2e0f10efeb76b111 +2e1b727464b74dbb +2e2de57b41ba341c +2e693742a399ba35 +2e857ac9814b03e7 +2e8fe8536e06607e +2e98d2ac4730c672 +2ebbde9e966894c8 +2ed8ec0eaf1d7ec4 +2eda4d7fefc609b8 +2eeb720eb0e7ae09 +2ef02b930c6f06e2 +2f035760290a8973 +2f1df8b11201570a +2f1e4f99728a19b3 +2f20948860ea24a4 +2f40c1624d41865b +2f47ce7b47b955f7 +2f4872dfdf821639 +2f5023e7d9f423a1 +2f506348996ed6bd +2f50b9644d435391 +2f6b67058c6eb1ec +2f6e497b1657bc79 +2f911465a60f1c05 +2f96c1bbc1c51845 +2fbf11729ba4ad8e +2fc5b43ebb086cd3 +2fd0228832828645 +2ff306099284884f +2ff99ec13e5c6e1e +302146f5aedfcc1c +302281802f640464 +3059e9690cc61bef +3064bdf165729aa5 +30733f3efbc30367 +3089e717980ff814 +3095efabb87840a6 +30abfb5faee45fc2 +30ac7c224518cff6 +30b2153ec921c423 +30cbfb9cf64d46f9 +30cf1f79ccd50ddc +30dfe5d22eb90b61 +30f122a46c7ceedc +30fe046e8db4256b +310ffd2170e3ef07 +3131ce2014edaa64 +31338476f19b0c45 +316e0a733aa0aca8 +31868989ed309d03 +319d392387e92685 +31a2aee9062dff52 +31b83122fbb459d1 +31cafbb8db3fce08 +31ccb5454bf0ad7b +31f8eb6a0ff891c6 +3226dffd1a60706c +322f8df330d5ff25 +3235f9d3904d1c32 +3237964837562ebe +323de22f356723ad +3244b54d6e39fba5 +326c79cf8a1230b5 +327170207950dc29 +327eacd421611cdc +328731cf52ceef57 +329d0c06c30221ee +32a1caa768e5ce9e +32aacbf5ae422f39 +32ac1568010efd49 +32d646a319f06ccb +32db5456b458b697 +32f69da51abe1da5 +33018d7a4a54c045 +330eda1ff18e4e1e +331181495e087e07 +3324dcb8aaba7dd8 +334b1b759c4fd4e7 +334baa3c03211270 +335210dbba7c1532 +335272d9de7768e0 +33531d2f0af1072f +3353ab3d911b0a14 +335e54d5a37f431c +3376815417dffc70 +338279137e321acf +3392a24da64f25c1 +33aab684ea067969 +33c07af4eb48afca +33c0e569e2ba2782 +33cdf6bca71a31e1 +33d840b945b11c3f +33f8f55526825541 +33fcedc52c975899 +340186b92821ee2b +341738732d101cc3 +342b0abf7a78145f +342c2937333c7a95 +3446f47e3e0884ce +34541a6303ac2620 +346177b75d4367a6 +3462d560df632485 +346816e54cf5a1a2 +349b3e1362b0581b +34a9d5d898ac4b66 +34bb0b0348787111 +34c9f07715418e32 +3502daad276b485e +351034c159994f53 +351979ac4e54a4cd +35315000dc896e03 +355466e60bd0f4f1 +357592e4cb216ddd +358f1367d622026c +35911621b62c1ecd +35a7db8cf83e0ee5 +35ac8e2a36864096 +35af17df5d20877f +35b0523bd0c38914 +35c30c86c818bcd0 +35c470e7b137b150 +35d8c87091ed7e8b +35f9b56c10cdcf85 +362c07023e6316ed +362c41fb13dc11f5 +362f6a0cdceea85e +36301cad09c64789 +3632ba62b80e8d51 +363c137e04c32cff +3658db693b9da312 +365e70d9c8d153fe +3679994513402660 +3695edb656d94005 +369a373540fd09af +36a2a8c2a851d657 +36adf0960861d973 +36b061b944af35e6 +36c49b24d0c06dd3 +36eeb43e87d32088 +36fc7bf72c08d6bb +37173a93be293412 +37284370e93953fd +372a4386302a0bf3 +3749a9a25798ef52 +374ffffa2ef19796 +375266553d1268b1 +3758f3ff698242d8 +3760fc40f68fbb21 +3774c6dcabc7edcf +379e6d869249273b +37aec4b968dfe9f6 +37b05acda019d96d +37dbb85fde37755c +37f68d68c79acd83 +37f7da064c3ce5d0 +380d72dbfa4d05b9 +3813863445ee47a2 +381b25c1f74f75b8 +382fc75bd75fafb6 +38388c270c6c9598 +384301a53ee34857 +38437e506159c9ea +38478814d5bb1cc4 +3857336f65dc9c05 +387574375f4f0476 +388602db371a7543 +388d76ed2c0a6bee +38eebf49fa5afbd6 +390671a5ed86da35 +392c0d46bbb0168a +3974f50223194bfb +399730b96f97eb7f +39994018e621bbf7 +39c644efae3cbfbc +39cf19ab61e9dff3 +39d3f7fd6bdfd5da +39d50e2e4694fdb8 +39d7d4b9b99ed974 +39dfa84653e33136 +39ef39b1b817f840 +39fb85efdea7d89d +3a120ad6671bba37 +3a171e3be5ee9aad +3a2592fd9ece73f9 +3a37a155a635b484 +3a675c33c291a0fe +3a6d766306f840a4 +3a90b1f3dfd3d405 +3a97cbb59b6694d3 +3a9eeafe183c8c85 +3aa00b91a9322a78 +3aacdb5f39b4c225 +3ac400e0ed00d43c +3ae47cde8456262f +3af1233cdf377d71 +3afa966a399e83ac +3afacc7f0205cc41 +3b041a7de4d0557b +3b1cf18e6a68f249 +3b6e2fbd627441ab +3b86d36340f8ce4d +3b8cdc9247ddf467 +3b91b348834ff5b7 +3ba49455a0e7ea4b +3ba4c1e3ca2eb2d2 +3baafde9d1a9c4d5 +3bbd337eb04ed691 +3bd0da7a7a5d275c +3be08c348b41341c +3bf0d13ef332c12c +3bf6a88fe693a97f +3bf941935a492505 +3bfae577811b65ce +3c02304ab817c16d +3c052d006c12af46 +3c30991790b35b09 +3c389c1b264295ea +3c459e0bac4325c1 +3c45a8c125392c3d +3c4e92eca14ded62 +3c71081a8354b116 +3c7a7b8af546b4f4 +3cb01403fa5239fd +3cb07d0df7702216 +3cbb7d5cc54c3666 +3cc52b77547505ec +3cc88318d1604fbd +3ced4b4d96bfcdd8 +3cffc6e1df197872 +3d0ff98685d27125 +3d16a1c05eae2cfe +3d240f19ab883c9f +3d30d0663a023ce5 +3d32245eac869130 +3d381ffb6a96dcbb +3d382e02b05ad1a0 +3d431891d6ad0959 +3d474c46db3e28bc +3d49efb2a595fd52 +3d606a494c6d6a0e +3d96560a1820232c +3dcc1e0fd545ed3a +3dce1e76e682d610 +3dd257c3477d4e38 +3dd4a16d1ba42bc1 +3ddafd2a2e45182a +3e2156299a6cf56b +3e2adbe2bffffaad +3e2b4968b5817e10 +3e2f10d8ceaaa9b9 +3e2fe5724344e459 +3e3a51eb828fe1d7 +3e584eb9b61fc318 +3e6be8a4a3723681 +3e830a911de8dc18 +3ed1f11f430903ed +3ed82f7a7b185d2c +3ed8f0a88055bc96 +3ee3664e948b3f08 +3f05b05ab9ebc45e +3f0e9f0cf70326f7 +3f2017586d730e5e +3f3cbe8ab43f4218 +3f43f273fa7bebd1 +3f5eb434b5544ff1 +3f650f1ae75d7552 +3f6e543a325ae8e4 +3f721870e9e3cf20 +3f772c74e4953aac +3f804e3551a36f79 +3f8af22224f19f1d +3fc34e8163b2e9f6 +3fc3eb5830b30661 +3fc8d2bddb9b9950 +3fd61cb9e3712d41 +3fe3fb95b4f2838d +3fe8139ef4b3c65c +3ff634b1bfdfaa96 +400502e208404260 +402f87777f27dd48 +4041c03672e2ef24 +4045f8648dda6fa9 +404696db7ed94df7 +404965ea04cff5b9 +40512d6cbefd22f8 +4053889952ca0641 +4056d7a07441c6c4 +40598d81f4969b7e +40673e4aecf16e87 +406c592300aec1af +407d34d5d2b2b387 +40a0e58fdabb95e0 +40a89e549d4575cd +40aca2b04bc2cc03 +40dd540475e134c4 +40e4ea43849779c0 +410993c8df53f58a +410f326ef574c2c2 +410f4332ae8d60d7 +410f99a3c038a86f +4122239fb937e0e4 +418f3a631f54dcbc +4194607267a65d10 +41b6cc5bd671baab +41cbc9b33b269a88 +420f89b2270e0c44 +4228abd2336f8b73 +423cc24b940c4b64 +4257ded0b93a732d +4264087ef43011a8 +426959744b9fc1d3 +427d09a936ec4350 +42a1e7ad5d7bec09 +42b56e9774566e0e +42b7f58703c8cbae +42cae6a5fa6cf8b1 +42d11366f0dcfa5b +42fdfd4cb46819c7 +43055b580ec536d6 +430d7f49e6fa075d +43117c120f10d9fe +431414e571515932 +431c4f82a32ccbf9 +43212ed0165dc360 +432656721bbf7c81 +4326db7f66f80915 +4328455081a851a0 +43375d1739bdffea +434812d4318ca10b +435540166ce13ade +436cc184af77e8e9 +4385ec28aecfdb0b +438913e23dada4b9 +43968232df130ba6 +43a4e4f9d7039fd5 +43c9ecf6e27f67d6 +43d291482b8b8c63 +440bca1e81fecc9d +440d5067e3d24817 +442698f2115fd0ff +442caa63a32defb3 +443315065edd204a +444f567b89121031 +444faa4489cdd1f0 +445785b8ca62c5b0 +447abb1372238e4a +4490554a371d60fe +44ad8c13f7f9fe53 +44b0604c12e64e1b +44b34f855b5c0cf7 +44bb1a03b8d33a98 +44c35ac4821b47c6 +44e5542ad5125289 +44e6d531f43cd206 +4512f7f00752bc81 +451f38b5f2e36500 +451f532520bc8c08 +4527cde82e1142cd +455f66c438550067 +456f1ae1110ae5ad +4583abe38c199939 +4586b71c20c5a9cb +4590ae3454ae20f5 +45ac474f93053600 +45b43c03927834ee +45e5d1eba6ee1bf6 +45ee279dd66942a5 +45f278cc5e5b1a3b +45f44f457e73f101 +45f517ecc7c84d18 +45fd4d745429fd60 +4616262f08bf00cf +461c5801638a888b +462970ca81ce524b +4634f93544cc9dc1 +4638255579a290b2 +4644821cfdd65fb7 +464ca4ab6ce946cc +4667c2c0d0b1ae6d +466dda0928bf087c +467e8c50aa5ad4f8 +4685057ccabcac5a +468b4b4433f16012 +469b4270851d691d +46a0aa01e4d5681b +46b36e512660b995 +46b9f04035a5d150 +46e36212727fde5c +46e6806eb2bbcc2e +46f512e3c2d1fa78 +47152d5eb0941142 +472d8a4d0a2c4128 +475814d93c50bc25 +475c4ae242afa48e +476c17168821217e +477529ff1e91457c +4780602fcce86e11 +479abc56b2ab2b51 +47d24552a5f88899 +47ef6d862025cd3f +47f6b0699347b220 +47f70893bee13d4d +481560619208df56 +48205ba04f8c404c +482fecd57534f939 +484d6d72165385d4 +48542f987c680d03 +4870393920d6adf8 +487e99c4c9542707 +48843d3816629261 +48984a917a16fb4d +48a86f4981ec2bc8 +48c2b60e4c98e66a +48e5c9edf71dcab3 +48f3014bb76185c9 +49035ac4defe3c9c +490380832328dc2f +4921c3ada6d6207f +4924f31f99a28ccb +4925633cd755ffd9 +492a5eda27d82fcb +492ab703e5c70dde +49393465e203d04c +496518c26b98575d +496e91d53162a18f +498c1604ba12d36c +4991107066c61fe5 +499e9037a2c9f46c +49b5c8fd9cb1f7d6 +49dfa184fcc244a6 +49e81e8f85190bee +49f81b0dfe790db9 +4a01b05b801e5b26 +4a1c61ea7a8a943b +4a29bcaef264218b +4a3ba864f72294d5 +4a465b1d13ffc365 +4a4eca6f2e78d081 +4a51aec326d859bb +4a60f032a82a9dd1 +4a64edcd0d48a6e5 +4a7de1c213e106fa +4aa60698e47f5074 +4acce439bfcf2a99 +4ae1bbab5be645b2 +4ae5355c03993c5e +4afeb4add097f975 +4b18018bc2780381 +4b1cabd637928cf0 +4b3a3520e0d5b7e7 +4b44120155432d91 +4b7880d02eadab58 +4b7c8ea726d939b6 +4b96bc7e7a0e9d94 +4b9e8d07989e5aa3 +4ba01d8f387f019b +4bc08f4dfc02f363 +4bda1e5a89c44ab5 +4bdc8249ebcd720b +4be7a9168432f7be +4bff6294a5ee3920 +4c2151592a31b7c2 +4c2aa9ed9de586c4 +4c2f4fc6916b2d14 +4c53392befb01f37 +4c554da5c77c19f8 +4c56ff5641dcacde +4c6af9cda292e45a +4c6ed707f323b7dd +4cc9c19ef8529d58 +4cca675053d68a6e +4ccb622146f5a2fe +4ccb8236822c0124 +4ccce51bb4934198 +4cd9abc96185cb92 +4cdcb18e06992494 +4ce8b724fd973145 +4cfad619bde6d757 +4cfbb3d6f701e57c +4cfece3c0bc1e49d +4d12a6d479e1dc39 +4d19362600a5550e +4d1eadfbd9729c94 +4d371cef810ebee0 +4d4c1e8e3f479292 +4d7123aa6d13a59f +4d74af9d4009483c +4d803a0283157f3e +4d884b6e5abb8c3f +4d9349a591b99b1a +4d9ce4062eedc882 +4da6d6abf2f34ff2 +4da8c050816dca4c +4daad4ae65208f05 +4db5150e4a5e2b0f +4dd074927f4a5637 +4dd8ebbea30eb46e +4df54fbdec793edb +4e4976da2668f50b +4e66380f46ff2867 +4e798a5b28feb85d +4e79a1c41daa72be +4e870c0e49e7ba2f +4e8e6132a36dfcfd +4e95680db16adf3d +4ea34d5e2abbec90 +4ec11dfce98ad3ec +4ec13f8e7aed1a65 +4ee466167c9e46a5 +4ee8c27e7888472a +4eea18ffeee308a3 +4eff39b70fba669c +4f0aae153adce566 +4f1e151c228f57a9 +4f4f423c3f93fc65 +4f510fe1abdb75f2 +4f5e45b4086101c2 +4f641c4fb04b24d0 +4f6807714ea49772 +4f717a0fcfa90344 +4f7fc0cdfce43b67 +4fa4ad037ab65905 +4fb19eb051afd4cb +4fb81ffbb90ec8fe +4fd45f39f92ce39b +4ffc547bfaf95c1a +50139ae72f796f9f +5014703c894961e7 +504f936b25897c2f +505d6c81d23c8b83 +5080159066bfde18 +508114ad7e8cd4f4 +50b7e512f2f9dc63 +50c3dd45dc3ebd70 +50ce58def2f0ca9d +50de99cb2f2e64d7 +50eb9d0a522d034f +51043b1e62845ed1 +5107412926c944cc +516283b8a0fb248d +5168c983f0dfcf47 +51877e146c90578c +51ac46c61e5c5f3d +51b9103505543e0f +51beecccfc2454a4 +51e6dc60b4b93484 +521be146ae2db91d +522f99fd6c655b2f +523b92bb677463dd +52693a2188335db3 +528014756f498553 +52a345f0c3657651 +52a8d7223de50494 +52c3bfd3427c7fcf +52cbd10d4cb70db7 +52d68ab4204c86ab +52e37ae5b2af64f8 +52e59b4ea418e350 +52fb90e7cca3994e +53106fcc9b1f183c +531e54565627573d +53251d62ff2c5e28 +532799840f2813be +5339db4cfd227eb5 +5344dfb5b0037bf0 +5386fcada001801a +539023e596851422 +53aa386e9c8d4045 +53c2fe164b4ad82c +53d55c237caf38f3 +53d97411b988dbca +53ed5901625a7fb3 +53f22f0fc6b687bb +54463c5a6a73ed2b +5457f253068bcd9d +54742270a5ed4c47 +547d8d2112a79b91 +5485588ded1b9fff +548f3e6b622c074c +54916f0650cd27f6 +54998396769c6890 +54cde011b13bae17 +54d92fbaaedaa8bf +54e53c8484655eff +54fba013b7041d8c +550776022d33f392 +5513fc8d779dacfb +553f7a700f85740d +5547d9324a04b94a +5572f75e27b4b079 +557898b732d42e5c +5579d301eb6251ed +55840adacc93925c +558536a762fcc23b +558ffdc5888c6906 +5594f50c725522a9 +5598f00cc1e705c4 +55a43138126b3739 +55a75d06ad8b9440 +55c9b19ed6139d7f +55e6089f72bff460 +55e7728a7961ac5c +55f09b8b387bce95 +55f4f2a6bc0b32b6 +56053993521e3dbe +560a7a10ab4b6213 +56109e93e19ec5ac +561877d184086c00 +5626ce85ff287b4b +564db8ee1adaa799 +5659f8e4fbb050e0 +565dea59c59248ee +565ecc590ec35b7f +567197cafb3da912 +567fc8a5c1f3b890 +568448d367962cf7 +56925070aa4a7381 +569ae86344933eaa +56b46398aedd4ef6 +56c3631d94effaea +56cfeeff4b2b3453 +56f146da29b265fb +570ea71e480a6ccd +571e327a1692759e +572e7aa0e3809db5 +5735ece56defcde1 +574c0f5bef6537dc +574ce9752b1c907f +574e711f98e53d02 +57597bee10bf5bca +5760fca7890b5d70 +5796d9ad6fdf83c6 +57d85d0f6d94e12d +57f2eb1ae50c9f03 +5811104288438952 +58150174ba3d16fd +581981e138a906e6 +583e36b1e75dc7d1 +583fd199bc58502d +584aa07c7e34e7e6 +5874eb5fcc573c7e +58ab365c5c3349d6 +58afecf519fb385a +58bc81e24978dd2b +58db81f0fe633594 +58fd8ee2ddfe27ae +5906a5d342e19a37 +5910e8a446d5379d +591782633f1d14f5 +591840bbad8d50ec +591eba4781b1a585 +5924760f5c9707bf +59288e9420032624 +59571f998db9f93a +5972781802f3f6a4 +5982906bdbaa09d9 +599ba45ded62b3e6 +599de8108b8d1d7a +59a43ea4adae7182 +59b4c6d697b36819 +59bd1d77c643c4d9 +59d4ac9d87e5b4dc +59e5bb1750e2ae67 +59eb216e3f458a25 +59ebba7027c18fbf +59f1a0299cabba99 +59f96ed4e1fcd62a +59fcb711c734c26d +5a0edfb272d0a2e1 +5a1a8f6afee6be82 +5a27124e49b7011b +5a41d1b3491fd502 +5a452e9dc43f14e1 +5a5687894006038b +5a590c64ac0e175f +5a5de11d63355ecd +5a6742da90cc32a7 +5a6adbc51e9f0104 +5a6f1775944daed0 +5a78677ce9e5e4c9 +5a8db5e3e6a6b13e +5a93a3318e0f8cd7 +5ab86243a8448072 +5ad0c0c10d0c8d8f +5ad64330b39a1a8c +5ae65406117d5d76 +5b0222e1aaced7c8 +5b05211e837c9eab +5b18024bb6927de5 +5b2b2768f2bc2f24 +5b37778e907f703b +5b5d74009d5c2abd +5b5def54d0ce4f3c +5b725955b5bf98ce +5b7c159b72bee87c +5b87d68cfea40a32 +5b8f489a216b2a00 +5b950a4d83522483 +5ba8eabad890e689 +5bb962bb150f86f4 +5bbc4da6f61d1b37 +5bce129243aee628 +5bd2f501a1ba1d4e +5beec395281cc40d +5bf30ee6ac586e27 +5c0866eca27717ce +5c0fc4803e7c22ad +5c1ba45f8c17bd9a +5c36e85eb81e054a +5c467b1ca4da7cdd +5c6269216afe273d +5c6cf9d98adb7288 +5c7b7055082af8bc +5c7f530e0e9f41f1 +5c8aee7cb77e0591 +5c8e44fad70f10d5 +5cb02233cec24c56 +5cb35cec552cf0fc +5ccd233f4c2e3a84 +5cd80706bb49e136 +5cf6df3aa13bd97a +5d1d96a685d0c3be +5d22a8fe45dc4776 +5d27dedf221f8d35 +5d310b5b1ef7ecba +5d38b4c3f59ca6c5 +5d68ca873381c927 +5d7a7f5d598aa2f8 +5d8d5745edbc4cb2 +5d9a6864084fe7b0 +5d9c4c63e8002679 +5d9fb4cb0047f86f +5dac1f05bb8e06c2 +5dda1ee366d29174 +5de7ba8a5dac635d +5df06e4f92fd38fe +5e0bb2d5e6ace99f +5e2cf41fcbe19376 +5e3b5e6d4d1fa861 +5e5614a97ea5532a +5e73e948b8e28d72 +5e940b18ec4b3f70 +5e984189ccc5b756 +5e9d45c209c37250 +5eaef6f49ac5b456 +5ec94e65694c5a25 +5eddbd3a408c31bf +5ee023d23cec9684 +5ef7e5321f6f6ada +5ef91d8c40b3cf89 +5f4da338921b7e77 +5f51f8259ba88dbb +5f6e023ba6f28879 +5f6e941f34b6cdcb +5f7709986cf7a78e +5f80ff20a2c1e08c +5f8bfdc20cd6dd84 +5f8da21498b3df61 +5f96b8d84ed45170 +5f9f89595fbaf7a9 +5fb8b0d28045da70 +5fc5e245a5f43d2a +5fcd1f50ba1e179a +5fe1b658b971e447 +5feaee3138a7a43e +5fefe27c370bd830 +6002475befdf4715 +60045a2b1c880640 +6010e12c251a4148 +60233e75d8aa7be4 +604d81d31b79cf63 +605ebf7d4f92f937 +6068ebd72e512341 +606f0c6592ec87a4 +60b6c8c555d160de +60c52bfc2f1b4196 +60e4d10cbe593e20 +60e9fc72718436db +610eaffe1837d250 +6121410f5ccb122c +614cdddfe3b403a3 +61713f17f1115c0b +618b0902fece49fd +6196b5b1c253fb3d +61c07d7f746a8ce3 +61d61a5eb7b74313 +61db28a3000429c7 +61edac9a772069db +61feb621d22e361b +6229ffbfdce37238 +622f71cfb6c732a8 +6242fc51bdb89892 +6246bf41f730e360 +624adc1dc0cf4c71 +6251eab91b4740f5 +6257e3e78184a9a4 +62a47f9957aeabe3 +62c459e7623ec824 +62d52bbeab32e22c +62ef24d2bcb86bd3 +62f5941a6b685e5f +62fe22854dc78877 +6300f7a3de36c13d +631bc200e14eccf8 +631dfee0a60e51f0 +634369c3a9a6c258 +63881cd493317752 +63a677e9d596cea7 +63cdd425135be6f4 +63d5a3a05c723f2b +63dc6cd859925158 +63e05d0cd9e19638 +63e286ebe15ea0ba +63f0e42fad46d6a1 +63f1ca4e4c70e196 +63f28b4282321b94 +6409d105367f2512 +64104d9f2dfad041 +642de6f0fd55a1f0 +643ed0b12f41932c +64696a826f34cb57 +646c6f705dbbb2c1 +6481a485b2460b52 +64918d4ae6494c90 +64a7529b74458add +65368c59c39c6812 +655510121bf3a407 +655f9f1db58bb54a +656c74f117ff4153 +6577037613c093e2 +659eefebe2e1f395 +65a35ba18997d93a +65ad39e019b61f2b +65b17df34fb9061b +65b9f3b0b41beb5b +65e29d2a7370f90a +65e37b08149b7952 +65f50e7c2eda65a1 +65f5fb61a4a73c01 +65fbed2e901c764c +65ff0801d6a49132 +6604c01d9ac4d1f9 +662e4d23c50768a2 +662f8066a5a7d663 +6630098f9cce2820 +6640ce4902bfc782 +6683b4e0295fee0f +668f41a6ed0a6439 +669435b30a511cbc +66abf0cd35f8b113 +66c469781b939228 +66d053f0020901a3 +66e59c398f2d06a7 +66ed3839ce54ca1a +6705f0f9a71ec8fc +6713e8850cc24bcf +671737894597959f +671b5a371b5e7df6 +6732bc8e3417da07 +673c3ad9281a92c8 +673c71d156c7e411 +67401848f3eb6655 +675de6b68521b206 +6761470f338ffd71 +677b3178f618c7fd +678f250b476f0822 +67caff896043d7fe +67cfad6a53eda1aa +67d6870d31ce96d5 +67de109375fcc1f7 +67e49d3b2aad94cb +67f270f0c420baa3 +68099c56b158bb82 +683511d2e4c8bcc6 +6835704ff014ccdf +684543fed310f656 +68519ea1cd1fe39f +686af1b664e4ef9b +686c04e3142fe63d +68759d895af6b74e +687728f08b174a2b +687c6d9b579b3981 +689b6260eb5c9ab4 +68a01c12dcc8c97a +68a15c9cc9c235c6 +68a7d2596121224a +68b350dab500d5e1 +68e1ce1bcf0c86b9 +68f3c4b222363249 +690d39cc06febcd7 +693c87e2dd288971 +694803bd49f5082b +696eb9e8c95e05ce +6973eb8a2087d425 +699ba3294f911a01 +69a076e5f7658c09 +69c5261b0235f82a +69c8cb8059fdf38b +69fe566afbe65f68 +6a0d9771f824a017 +6a1323886e42d458 +6a166712fdd5a35c +6a17dbd463122f8a +6a228b2699db8d07 +6a35a88df134fea6 +6a382a472b32576b +6a3e0b70a5d3e0b0 +6a552afb78506de9 +6a57cbd9d888d255 +6a6d89251ff9cb14 +6a77cbd7dfe5265d +6b0132e66071b8da +6b02b1d1eaecd609 +6b170f85bdd4b9f6 +6b1abf0a9b9b89c4 +6b2604abbd9b2ded +6b55ac22e15fba9c +6b8a8118ef55c4c5 +6b91c850212c749c +6b95dedbb32afd23 +6b9fcb744cfeb450 +6baf5acef7b2b578 +6bb05f9e201fc232 +6bb74d6738f06d11 +6bb88ae998421b72 +6bba7acfeca10154 +6bd5e76e03fd10df +6be650ea42ee3278 +6beee30b1a6b12c3 +6bf4bb93f269315c +6bfd1925acde1a1a +6c0b7fd148c07f4f +6c201280912e1243 +6c4d2d254bcbbb9a +6c72d41bffc5e97e +6c8a13020b83f110 +6c8b78a4b3b5f727 +6c951ff7cf35bce8 +6c9b5f48beed6ba2 +6ccd226dd41a7ef2 +6cea8af64f029f29 +6cec2e3e78e3b25f +6cedd2c5a39a1b1d +6d03cc9bf9c42075 +6d0fdd3fc65fb65d +6d188e15cf0a14ba +6d3ab34968eaeaa6 +6d6f3645aeea752f +6d88b17041fb6674 +6d8e30a9adf35d5f +6d97525c3aef87ea +6db5f6b45878eea0 +6db755692edc475b +6dbb0c6d86f3072b +6dbe473cf0d15b89 +6dc799f86644ccc0 +6dd5fd9036c05a50 +6dd61aaa78f16045 +6dda84a09d8b5a88 +6dfaff73caea4f10 +6dfee275be33aa67 +6e015bde5436a719 +6e35114dfde7ef24 +6e4599cbf08a6698 +6e654468b89535dc +6e6ac35ac4467be9 +6e72bf30d1ce6489 +6e74a70453933a1e +6e7bff49b0cec4fa +6e96bf96aa242067 +6eab589dbb4e0283 +6ed7d22aaf4088a8 +6ef289668dc73ccd +6f367cb4ef2e3891 +6f456037bc3d6855 +6f6069f9bd8c7523 +6f767b66d9b10028 +6f7add4ec38bac31 +6f864ada23cfb4b1 +6f926695555584a6 +6f9c1598a2704414 +6fb5b6418fb047d5 +6fb784e13e5418dc +6fc3a60de9b59192 +6ff858dbb4db32b8 +700ec3440fbc214c +70146ebfd646be54 +703903c35a8f66be +70411e54ed4914f5 +705008592b2cec34 +706eef575d6c7402 +707dc6125d5a4bb1 +7099c3eb2002da36 +70a1d9743bcc8506 +70ac7deb2809fcc2 +70ba601d1e9fad22 +70d520cbaaf93a70 +70da054251a427e5 +70f2bc8212c2def2 +70f3c25c0ad526d2 +70f3e524b0a89d59 +712169df8fb9116c +713490c85d2459ed +713b4dade589d838 +713d79de509740bf +7143841034c5729d +71463d10f065198f +7146582899ef253e +714dd5e3fddcff5d +71584dcb3d99074a +715e3db6ab6305ca +7161c6e264061706 +716ce13b97f349da +7175a29d924e676a +7176ee64cacf691b +71782b1df633696a +71791171c3858347 +7183eed05bb0ce2c +71871a636a966fc2 +71976c0fec7bfe81 +71b4c6bebea61300 +71d671ef77f1786c +71db53175ba6a27c +72172e050078f0cf +7219cf5b27512dda +721d983efddbde7c +722f0418952873ee +727163309a4fde1a +72744248acf044ad +7275795541dc8a16 +72a21c3f806f6bd0 +72b7e5cd07131a45 +72d793a6e662d8ca +72df55d74ec6882b +72e1ad485a964465 +72e304b1254ef84a +72eead8e3ad12a23 +72fe3c77798547a6 +730ccd299f58fdfb +73199b9f789fc0ab +732293dbbe3fcc7c +7325f0b2ed515a2b +7329d99833c69171 +734e6784eb1d5444 +7350ea5ab2de0f18 +7385874281407e7f +739d9d2bc6ce528d +73a06a2e1bef8736 +7415f65560529a9d +742633e961409c5d +74419c4b4421aa33 +744a24f882ba37d0 +7453fab35432712a +747525311c54f0de +74870641f925ffa2 +74903669ff2149c0 +7499482b8b97bd3f +74a99e74794ea9f0 +74bff143470fcaaf +74e46965d91259eb +75003ee52606c50a +75017cf75e406bf8 +7501b560ca0a7d78 +75313925d62c035b +753ea983e67b9269 +7560dfb8487c4edf +7572b6c0e2979dc0 +7574f71e4f0abed4 +7576c2a44293a078 +75770a4128c66881 +75775c62836fe159 +757d83038288af90 +757e4bb86b78c809 +75921f5a113624cc +759bf2673073e52d +75a3529732482ecc +75a69fbf1759c017 +75adec7ada33e878 +75b8734a1e0319bc +75d7cabb1a5e8292 +75eddeaf1dbbe86f +75efdde3c43bf9b3 +7603ce9dd7da3ac0 +7605e7493b088e10 +760c92994df60a94 +76132e6f90ddfc39 +761dd41d25c90868 +7622f8284ce1cd8d +7626274c0a0e4036 +762d15571562db5c +762fc51135a98960 +763c7bc411b86550 +764b6b377bf2d767 +764b758d7df23867 +764bdd68e6428b8e +768c19e4be85e9fe +769d5d2de72b78bf +76a3ff8add0fc357 +76c18707abf4ba11 +76cc1ac477f69a55 +76f3eb0ea73dbd41 +7706bc6cdd7c54f6 +770c04776182ab8d +7735295842bf5ba4 +773f45112cddf2b0 +7744b04248bf4ca4 +775fc6321ecacf5a +776af4d25dd417ad +776e573c58463663 +779e264e99e5795a +77e2f0863896005d +77f8ddf39488a2b6 +7814e368507fff25 +7819e5ff53fa6106 +781af788122785ce +781e97682bb84577 +7836ca999a59421c +7867cebd16ebfa58 +7869fca3201c3158 +786ed33b39ba264d +78b6f31d53b2bc9a +78d21dd4c9f5769e +78e6840eb87134d1 +78ef7b0e65d7c7be +7904eab51188cff2 +7907e025f3af5a93 +791150675be6f50e +795397705448d3d7 +795d8beec5df16c0 +797f5f813add3172 +7985a18e530e2830 +79904ce2024b8cb0 +79a53074c1a2be5f +79ac3ac963af2659 +79b49f88d1a21e3a +79bab1025de69ee6 +79c673b3a52050b4 +79c78064aa6431bd +79cc1e3a1f1b2898 +79dd7d68871b841d +79f6ada084046bc5 +7a0fe53b180f9b0f +7a19ccba935e1ae4 +7a219d49f7e73b94 +7a389e83e8c4e918 +7a3e839875b4f86b +7a6d1146808c82ba +7a74490b4049619e +7a88c8d243b2031d +7a9f47c4e27ad15e +7ac164959fadd85d +7adc546c5013c044 +7ae04e44ad9f366a +7ae0dd868d551991 +7b19f8dadf2c9fb5 +7b1d3cdf35df0127 +7b25a07507f9a312 +7b64db709f5d4e33 +7b6b524a8575cfde +7b9028479718944b +7bce30ab93600cfb +7bcec844fb994551 +7bd9ecf4e1a59569 +7bdb80d78acf4d46 +7bfd39ea90583da0 +7c1ed66f43d72833 +7c2116acf491dabf +7c6aadce9545ddee +7c81202d1b89b6c8 +7cac8e2f3dcb50d6 +7caeb105a556c073 +7cd74ac4ce79f1b3 +7d2c0be1bdb50ff8 +7d38da2952d725a3 +7d437ebf33f8a224 +7d6046616ac0c036 +7d88344a538903a3 +7d8a3148516e9073 +7d8dc954b9a3a0c0 +7d98b9898e0de46b +7da108611aa50158 +7da2e62453ce05fe +7dae9596c864bd11 +7db5ec981b186b2f +7dca777925dac15c +7de33dd8fd3153c6 +7debaffbcad640bb +7dfb289d33237b34 +7e02c3be320645cd +7e2546dc7ca032c2 +7e44e1586b258ac2 +7e85c613a468639c +7e88b5b4de37ea26 +7ea5c90705a44825 +7ece179a246f4b43 +7ed0fb8fada7b569 +7ed335cf9f4c5be3 +7ee18e03efee5497 +7f19ca1ae002eec1 +7f1f38b166dc3001 +7f2b790053599283 +7f3d24a5af2ff675 +7f3f5c1cdf2e3f18 +7f582952e3dab49e +7f5d254bb2636895 +7f80d847db6640d3 +7fbaa7160f1fa396 +7fbcff430101ddc6 +7fe47ea6e701bb62 +7fffc8c60b4dd77a +801db0158aff5b70 +801e0a75c25ed772 +8039f6e0c99bd2e5 +8053655a1f56d675 +805586d61c1bf46b +805b56950edfc27a +805e3d9e43081cab +805e5d69f62cd902 +8069b3050144f81c +806ae018f44817c8 +8075693f227187e3 +80852fad20254b29 +80ce746e5e687d71 +80dcbab333c5a841 +80ed8bb0a0ac0080 +80f830fd6b103b82 +80fe8b2b5a5c85d2 +810b8492b3bc23db +810da89a755b96a8 +81301befdcceae02 +8136d2e7dfbd6756 +813ac2b3df1dd398 +814022d6c64fc2e1 +8183fc555f1dc0a9 +818c36fd9b72f784 +819ba66398c06d64 +81a4269fc6f251e9 +81ad52ea0dd7de09 +81b45e0a9efda1e0 +81b5b7b09dcecfaf +81b60409fe4eee63 +81bdcad5f0594036 +81c4364f8ad6d206 +81c80acdf07740c2 +81cc9375fc76aee0 +8201af58fb06c2b0 +82190f28bcd2b96f +821fc25445d6f114 +82290d0d781d2697 +82543e2e014c72ee +825fff23a4cbf7cd +826b9b3525dbd405 +829d5280982bbaf7 +82f1e7563bf413cd +830570062bbf8117 +8309b1bed4311be8 +836ae1c7e69df5a6 +8391240de7dc06fc +8394bafe218623e5 +83a059ba2a61dd36 +83a40bf314c5cacc +83bcb5e39cf54472 +83c36897e6fdfc9a +83c6a37a0a5c5260 +83e2dc427b4bca5d +83faedae048b2d60 +841c2c5dd94934c8 +842ff7a9badaac42 +844d60a6ace53aa6 +845544cc63a81aca +84747daeb70429c9 +8477632530f3e6e8 +8494791ec797109b +849c7033b751e483 +84b18b7d5696507d +84db99439810ff4c +84f1c967dfef1af3 +84f2525f91cf20c7 +84fdefea103c4039 +85089b83c88a646e +850b480dc7b2e058 +8521c55ee7690587 +8524a225a5c3535a +852b0a0fb946d522 +85364f9905d51c32 +85526a20a84ec3c3 +85a048f9a57e4170 +85a10fc80d3ac710 +85a4d826116cff65 +85b6bf0418ad7afe +85bd9bca0338ca7e +85c25e4d958e068b +85d40bf7e2ef0e81 +85d9f1e35f15c814 +860732991d4eacb7 +860dc2669b694562 +8611e8a514011d2d +86163f73b5f097ef +8619491555fa44bf +863c3e83e31d3d56 +86566e74ecf09c08 +8657cff4bfc3b148 +865c14e8ec92357f +866b627dfbfdd62e +86863dc14619db26 +86bad1daf5fd06ec +86ccaaa0eb535a1b +86dcaac1897e35d6 +86e6d11c9e716afc +871bc13bb60e80ea +8723550e456cad03 +874e9838bd5ed5b3 +875b6b4fdc91e563 +875be9611682248e +876238c730ea2d5c +876e955ff0cd950e +8771e2c380f4c3f6 +877f545678f4b656 +8782f2a820fb2718 +878b693a36cef804 +87ae21d3e0ee1ff9 +87c14613819781e2 +87d40771b1ee989f +87de770814deaa30 +87edbb711075f2be +880531a4ffffd21c +882d971cc7221e32 +883d66762616196e +88611070de4694f7 +88675f60fdc189e0 +8869f760fdbbaf3f +88785e371ff317b4 +887ddcf0965bea8a +887f70cc79d678dc +888562ef593b1937 +8885e62d7164aa17 +888b063f05a75f75 +88918b0f9be5abca +889d7c749870f38c +889dda0c7b9af0a7 +88afd45db5a4db10 +88d14818824b65d1 +88d1b3ca4f2f1311 +88e444228339a029 +89122e4282c0822c +891c7b9e73acc418 +893d139a2361dff9 +894672134c509fdf +894f5fbf97e2484e +8950ee8e144e6385 +8967e7a190afdf86 +896b7aea4ab8fc3f +896bd0d585938280 +89721fb4b4b3b2a4 +897282dccee6158a +8976e4ec8e301aad +897949259ec59ffb +89a4bf320af495a3 +89b0782b5b827fa0 +89bb1f750d78af1d +89bc7c977f173689 +89bf8cf6114b1e70 +89cce0e5df67c814 +89d6801d91943044 +89dd9202c61f8f84 +89df7a0a5c27d201 +89e477c9f94e47f0 +8a004f009876702f +8a04b101970286eb +8a0df574d7f14635 +8a0f247737d88baf +8a30cd5bcec11a96 +8a33e5131f3134bd +8a423280ec056cf5 +8a527f6308683dd4 +8a744e1957d5e57c +8a79dc496bc6247a +8a9512d1ec8a0956 +8a99573eb89563b3 +8ab0f5d9db545d09 +8ab814576cba2234 +8abbdd76265d0456 +8ac54ff027634e0d +8ad11d8823f3efbb +8add690d52d683f1 +8ae12c20925a4749 +8b1aae97e5172cee +8b28f6bb5071a688 +8b31881790313b9d +8b3d996b7d796d36 +8b60fd86e6509bbc +8b6fde18683d6cd1 +8b7536b6460a5e8b +8b89bca4aea423cf +8b94a9e0f8025cb2 +8bac0c3be601a3e5 +8bded793c80e0b3f +8bdf67450cde7242 +8bee782dd6693efc +8c0154421fcc33d6 +8c0bb6b2364b614f +8c12e519778e4cff +8c35d9fc9b73ef50 +8c7362cc63687550 +8c7997b619d02972 +8ccd2168b5b4dd2d +8cd036a909189ae0 +8cd4307dd4264beb +8cdc9b748641ef7d +8cee11f3aa2d4506 +8ceeab37c389ae6c +8d2720fb6e3bfbc5 +8d3079fee6602124 +8d3c0f9d5a4b1bc4 +8d516dffe86277a6 +8d65697fa881ca94 +8d65b7888b06b13d +8d6e265a681b63cd +8d78bce1f4d90264 +8d7ad1c9166030f1 +8d8ed3e16d8aae03 +8d92a19105785652 +8da03ff2ee8321ee +8daaf415748f19e3 +8dc3b7ce026c4537 +8dcefdc460ad3480 +8dd633d781091aae +8dde46396142c0c7 +8dedff8574ccf281 +8df4acf3d25cd917 +8e00bc9699652d3a +8e065992aa97a719 +8e08f04712b5df37 +8e0b5dab0e3a3866 +8e1f19c28b26f93c +8e665f75f6138629 +8e722860351a0952 +8e899867dc7e60a8 +8e8e35abf8a46c08 +8eaaad6812cad36b +8ec7fa92e2dcbd90 +8ec85343b9452e49 +8ed2bd44ef36e4c5 +8ed537a3e1498ca4 +8f056fe387df2e6d +8f3c96e500a4d367 +8f6083a71d361ed2 +8f6a49242fba0ad2 +8f7eac029c8140f0 +8f872297a6bad001 +8f8f0185873c2e6b +8fbdc6d4ff280fca +8fd601c1bcdf4544 +8fdb3b8f8d500476 +8fea67042f54d2d7 +8fef8c0fe012ce72 +90009c2cd4b4527c +9009332f84387c09 +9014fca5c1df1d35 +90179ac5eca32769 +904a0d3406190200 +9078912141467086 +909092b7cfd583e1 +90af75309e8ac397 +90d7ca7b0109efc1 +90db3d427356cf4c +90ef077a00e09108 +910ec78c76babbf6 +911ea36547ba5674 +9122f96a9020143a +91240d392990edb7 +913260a1c916b9bc +9168da0cb9bb61f1 +91693cac80a13465 +9173b82c2c5bd223 +9174ad25bb647dda +9179313a10a6a9d4 +917b268fb54604a5 +919e4f578b4ab993 +91e0ac1f1c942f40 +921d5f6a1cf92221 +922c6c254647e6a3 +9230186734da71a7 +923e1c4780fbe942 +9244f0499a96c5fb +9258c4fab7094f31 +925c321e97d1861c +926e14a225ff8101 +926fa85bb95027ba +92724399306bb773 +92737cb361a58add +927c5f2f4146d841 +927de9d2c25e57ea +928af3d6c52f3dce +92a7eb7f59a6068e +92a7f86b1de0b234 +931cd461de11abc5 +9321e3d52786c5c4 +932580d21d9f9cae +933f47a06a5cb0a2 +934f6547a9c1140a +9375983d9ccd8cab +937fc8189e3207f2 +9385fef8bf023e2f +939528757c2c5a97 +93ab3dfd44515380 +93b1de98c4d21694 +93bee73e0b297741 +93bf7dee6590837a +93c420843a864df8 +93d202f99068e499 +93d730e156dc5e56 +93ef312b5c2b7b3c +93fc1431a1122cfd +9403f7603e8b958f +9429c6d27069b74b +942aa80373673118 +943e75f16dbf6ce8 +9455ef84748652b4 +94588cf204f67637 +946916f3239741d8 +946d43689899d6e3 +9477db795e4fba94 +9489465e9d34c8b6 +9499762e5f7eb925 +94a81cb52de714c9 +9501fe3857f9297f +951fd16ece8ef871 +952474603cf15873 +9533ab56eab0ccb8 +9548f160236a8586 +9573ccc529ea9708 +9578a7a75b29d5ff +95954ebfaec6e76a +959b5312e46f4841 +95af42cdf7ef05f4 +95b14612cb187c36 +95bdb490e3235155 +95cca6738400aa80 +95ef5e8a48b8af38 +95f6e20cb2e597df +95f7623a48812039 +95f9baae27695de6 +9609cd4756ed4980 +961c91326b81be4b +961eef1baef81f9c +96349763b17e0fdb +963ff6b47f6a4261 +96415ba460f20b78 +964e318d4e365987 +9664fc07cbe75491 +9664fcb811c9b08a +966d40d599119904 +9672407335c2cb98 +9672b8c9846c440c +9677da0c43428545 +967d220c4ad6cbcc +96807f8ea97d9261 +96860bebf5013a64 +9697972ccb0e1901 +96a03e26a7bb54c3 +96c3c265eb96e6d4 +96c50973f7bf9351 +96de9f5bd24e409d +96f02e8234ee87c0 +96fa04833c003f3f +97022dde91001245 +9718543e18d1b507 +977aef4bec7abfc2 +978a262a05d3e0f1 +97a2e28ce8826013 +97af9e82577ce812 +97bf83aa11818113 +97d8b03587c90c73 +97da0bc2293a3298 +97f29d9af0b060d1 +97f58039294b223a +97f8a84946a72a9d +9812c376f1ab9f8f +9818912e7e01db8f +982c375b56ddef6a +98497aaa5572d4e7 +9854ce53613978b0 +985dd271b9411e83 +985fba94ba7a72b6 +988bcfed9286a9de +9891200806d13419 +98a6934dd5894686 +98b1a886ec170c46 +98d11edb43fb910b +98de98aacde3d83f +98df834978da2ee2 +98ed6af382f1a445 +9901c82066ce0e4b +9917aac7810bfee5 +9928752913a20c0d +9929ae37585ce352 +993dbd4e2addb66a +993fca5b172657b7 +996248a20daf6b33 +996695701c4917bb +9969f0810e53d54f +9970e74ebabdeb2c +99918df717307d1f +999fdebc92061623 +99a2a61baf890ad8 +99ada49ff0532ba4 +99bb1971e2b204de +99bec945ca381f62 +99c8c5f37888a805 +99dec7612687437b +99df258ebf705059 +99e127d9b421a143 +99e6ca2ad85d0660 +9a01a4c459d5c3d6 +9a1acf3fc05a8fa3 +9a36f770838b2376 +9a394227d5f7f430 +9a44a7847ec1c456 +9a7341215bf86c75 +9a89ab6185f59a1a +9a93a77a49ff2eae +9a9bc03962ba2db6 +9ab79784e4845561 +9acb0c16322b9892 +9acf03f74a02a87a +9b09917b2830be7d +9b1cbc91a315da95 +9b1fcb67035a97cc +9b203d4acabf6e98 +9b2ac042fe08bca8 +9b3050ade61faae7 +9b382a387281f888 +9b3dcd99c191a5c0 +9b53cb2997769760 +9b56141b390a8305 +9b5743258a10ba71 +9b7f88332c594163 +9b7f8dd0c28c8860 +9ba411431b32d9c7 +9baf184d15747b01 +9bb1911aacb04479 +9bcf8573dc80e825 +9bd2c7d9da95c22d +9bf018b3159b26ee +9c0fc60ec40959f6 +9c114d603db2e4f4 +9c1344cd1364d962 +9c2e6f724169934f +9c4a47ab6c919749 +9c56102c71e5844a +9c5b252ac609f21f +9c671bfab5928496 +9cb88e1a6669dba2 +9cbf43fabf8e26e8 +9ccede297de41ad1 +9cd022541994a45d +9cd211271fda912a +9cd8f60dd9adad07 +9cded69992af8e2b +9cf53404e187b782 +9cfaafd970d1b60f +9cff50493d7c1c6d +9d0265f5527cf633 +9d1dadc6f68a5178 +9d312b595159eec2 +9d3665808b19e418 +9d38fe85a8bca3df +9d3a6cf290830945 +9d54e52bba57ce0d +9d5c630b2b85143a +9d60bd6ccdf917e6 +9d77e035570d1bdc +9d78556c905a592f +9d90fe3d1fdbcd44 +9d9b47279beaf5a4 +9da9a27104511d4e +9db6ee52e0d812c0 +9db6f363cd5fda58 +9db83457ec80d5c8 +9dbb57418a570e09 +9dbd6c04442e8040 +9dedfa300fc52bde +9def190cdac2a401 +9df2ba7402a866d1 +9e29088e96e6a10b +9e344b0e60f31093 +9e82a469d7068184 +9eb3389d4314b575 +9eb50e802b67bb45 +9eb9edd2efc37379 +9ec92dc647475009 +9efc17ce0fc33297 +9f2277b6068f3fd7 +9f46310f2129d3a7 +9f6dd914dd024998 +9f874f5932f71481 +9f89c447ba9e154c +9fcdd5701fbd30a7 +9fe226c18bc2a77b +9fed04f5691e6354 +9feeeaebb8de560d +a013c484c95723d6 +a02119e94e4e043e +a02598ecfdcc3e9a +a047bfc2dd691c8e +a04804d7cb8d14f3 +a053f3a0a353597f +a069c5cd4b599de0 +a06aac0611efc797 +a08dbe82b4a28c5a +a08fef4222aa1b5b +a09a656c2cf53fef +a0b08f9d9ba2479c +a0c69cd4196f823b +a108007b645a3975 +a10d612e4d6ca3e2 +a1362c7b2732ffee +a13e2f81e7680207 +a143b4ed3699c63b +a1469bd11c8a7265 +a1489d4323a5b004 +a1524a241f62e876 +a17779c80a92d893 +a186ef01b4d3d470 +a18f0af7a7357cde +a19df53973932746 +a1a935d9fd0294fe +a1b4a60ecf513729 +a1c781238a229206 +a1cea766657813c3 +a1f7f83d13e020f5 +a1f8fe3d7340d719 +a2054bac74528680 +a2142f874d8092d6 +a22593375045276a +a22ab61dfcab5e07 +a24d4bea5ad02b4e +a26ec5768a707c36 +a2745969089aeea7 +a27d289dfd10d975 +a2a8487f07cfd830 +a2ada3eaefc74a4f +a2c8e46b295f929c +a2d2cafa2258db4c +a2d9a8666012639a +a2dc7b519fa2f306 +a30a8e8b3ef49ef3 +a3473573899b1115 +a35535e1c7a7f0cf +a364710caf0a8797 +a370c57db465a46a +a38876b674c09899 +a3b5006c67acf128 +a3c15c1f3c5497f5 +a3db51d9d3d371ca +a3eed1d0880224e4 +a43a4d63877ca37b +a43c3a155c1614d7 +a43da220a5e4dd66 +a43dd033650bb439 +a444c491c652f4d7 +a4531d5a20cdf645 +a4802e42af4c2689 +a4832423ed312927 +a49455ea351fc628 +a49ecce6c3a9001f +a4a37aa1873ed876 +a502d2be85fe6654 +a540ceaa5d0629c2 +a552413da883dbbc +a558b9594727e631 +a58896fe40390c9e +a5893f0abcc692d0 +a5de105f598fe813 +a5eac4617387482c +a5edcac531eb07f0 +a5f527332d9eae48 +a61808cf80bd92ab +a61a37150a85c323 +a61be97f37652f35 +a6294f44a93729bd +a62aaedd20954b74 +a6429ddacb36e985 +a642f4c27175e1f1 +a65ba823def1fdeb +a67c3f379e7c9247 +a6804c9878e2b179 +a6898ff6ebfc3ab8 +a68eee57d3340170 +a68f37a9ce060297 +a6935985279b939d +a6a37c7defc2fc7d +a6a4df04507fbe3a +a6e4798cfac37f65 +a6ff0e3203254a98 +a70cb31a4efcef89 +a714187a5c6b51cb +a7371ba1011f9b38 +a74bca6ef4ac2b30 +a74f9d8f5a6f0c66 +a760b2c170ab5b2d +a7631930a128ee46 +a7720ebe71648c4e +a774e99d3e278dda +a77d64c127669a84 +a799210ec1a1f240 +a7c692cce41048ca +a7d8346371d7247b +a7d9fade6b961de5 +a7f30a21464917d0 +a7f7b874ccbb48db +a7faef1d818b5c0b +a80805005c087658 +a8125f2999dc7091 +a815e424e4628cf4 +a818e4854f7943e2 +a8192224531b945c +a84151c633247c65 +a8644325f3ec9af9 +a86b0cb4ce6a7d5a +a86c7221e2252927 +a86e5019766c5589 +a8768c144c4920fd +a87d8487190ab8a3 +a8801e76ce4303b0 +a8809cb331218a51 +a8942050aaf65a14 +a894b1ac03d6346d +a89ff88be5a4f84e +a8c00aa0db4acd64 +a8d49abc18df0b18 +a8e31ba517f6804f +a8e6ecc938f6d003 +a903f642576495a0 +a928aa0cdf748e27 +a957b770b06b520c +a95c6c9c85061bb0 +a9652335586a7984 +a98decbf8ba319f6 +a99a6a9d64ec5e1a +a9a744f7e76ab15f +a9b4cbdca147a8cd +a9b64cbbfba683a2 +a9bee2adc251a856 +a9c36a731b7b8876 +a9db14462194944f +a9f0cef1d5d21655 +a9f3ebdec6677be4 +a9fa0c5ecc753ad3 +aa1ab03bea1e7891 +aa1d8e89aed58bfb +aa3931069c81b321 +aa44971d87b7638a +aa46d2bfea015726 +aa594351480521b1 +aa7896955aaeb2dd +aa834c9bde892b6a +aa98dda632f665cd +aab382f49e87f11f +aac49cc2b16b0ceb +aac5c4a74e25f5b8 +aae273c9801f75ca +aaf3e9d27fbe8493 +ab0ac15aec26c24a +ab213e12f0e0cc01 +ab2cd5000d6a208e +ab300ad40a94ebe0 +ab391319b0cb78ad +ab53062ee126892e +ab5f1b0fdfe1351c +ab63e0b7cf284678 +ab8d2c92d956781a +ab901c700782fd9f +ab9f59b13b13bacb +aba25c3a84a231c9 +abd1e40855dd13e7 +abdcfe4384508b18 +abfc6c85302224eb +ac0e836f187843fd +ac4f73223543032a +ac524cd29f892921 +ac56cc6e23a91852 +ac83e7823442f41a +ac84287108036226 +ac85e82683501e09 +ac8d053af6ee7f4d +ac8ebc273eeef4eb +aca27a0150a8ef9e +aca6950004bc4ba0 +acaf9aeec44b8552 +acb77fe6dd098ddb +ace357b5f0d2740f +acf636e5bfa26bff +ad0faef367e723f0 +ad2665f7007e0733 +ad33ffce707d14d0 +ad3d3c797eeedf92 +ad3fda208e9a8e69 +ad411c5724a7ca01 +ad67a41d9c787b6b +ad836bd582e30ae9 +ada8355f42f6cf3d +adaa5163d7e30859 +adb5a6b705995c26 +add95a5ea114af6c +adde993cffc3f831 +ade0af2624dfcdaf +ae05b51096eb0c70 +ae0ceaa685a8a4ce +ae20803f4a2c480b +ae2b2d40756fc0cb +ae30d2517b38988a +ae3d15ad076f1b94 +ae4c5c5006b3b1dd +ae4f85277b7e65ac +ae5b6f178bd8fdfd +ae6e21d1eb1143bd +ae91634f9c379714 +ae93eb9f90bb2e42 +ae99fb45dc67205b +ae9d8b182de4d1f7 +aebcf5124334df85 +aed89409bf1459fe +aeee75d03c57f66b +aef18b212180a2e7 +af0288339791d729 +af098a89962dc240 +af1826237bf7de2b +af238dcaacc17adc +af4178b55e7a4383 +af428972b7f514f9 +af430089177cb1cc +af4f41aaf47d199f +af8a59abe1b1c72c +afae363b9fc15b4f +afbee4345e6bdd5a +afe0e81768aa5490 +afe9ba2759405725 +afec4e19a8adb779 +b0072d61e3bca861 +b0138349269091db +b0174b3c9f129b65 +b01f00bd93c57d18 +b045fd09f82fe097 +b05c6350f21e2e48 +b061b96b452df2b8 +b07195c899a4d387 +b074b44ae0a19e78 +b07d7020add681b6 +b0877deabec3f234 +b0878371d69d023a +b090fe3036826444 +b0a7fcbd8c422e4f +b0b5f9d756491312 +b0de30e2a27bf223 +b0e9dfecdd3475e8 +b0ecedb37233d34f +b0fcf8331c844308 +b1140f5f948ecfc4 +b13f3e69c52f47c6 +b15cd396c376964d +b170a213769841d1 +b199c66c19aa754d +b19e9eb23e262623 +b1a75aa31bf37742 +b1d6b80f677db591 +b1e8853e0244c2ce +b20edd89f68f5b8a +b21d9021be2a8796 +b24cf9bc80999f06 +b24d7a4eba7120ab +b25106fe8e770941 +b26c5c0d659a8d0b +b26f62004ea1e9cb +b27e5bef0f51a949 +b29cc466a280648a +b29f032fb7181e24 +b2a4443c73a0abae +b2ca91cd4b2d887a +b2e81fc903e2ad0e +b2e9bc039632014b +b2ec55fd9b3a1823 +b2ec8ab53e326621 +b30687a0b4ef39bc +b31bc77c6c837141 +b31d37dfd2939c88 +b31d8f7711e97b32 +b3375ad8b22e7c7c +b3446d4f8a6df7a5 +b3465518bfe2f9ad +b35a5ab24b45c77b +b38f8ea0950d4ab2 +b3b6065e72ef19f7 +b3c0a861e3f558f7 +b3d059627157b19e +b3e4b2f685788d30 +b3e587c2ae31283b +b4061b15272fb913 +b4088a9ee03c6a8a +b415175227cc0219 +b43461ea70f1ffc5 +b43f1efa6aa8f890 +b44913410820605b +b451966b224ae9e6 +b4581416b2a5d918 +b46bd1221cc3e7ad +b4841b82bdc040f0 +b4a0e5e6d82334ba +b4ea146610451799 +b4f458cdb58bec11 +b50362e9c15fe571 +b50d51c8b9cdc0b5 +b515dbd145a26fbd +b51691ce0662dc1d +b5254f29ff4c1189 +b5462a189f04e0bd +b54c1f64dc50172e +b596445c68d24d29 +b59e82eb9838c8a5 +b5b648b00336aa5e +b5c4b2574850af6e +b5c6d19f155b5402 +b615a59426e624b7 +b61b266ea6af80ee +b64a70ebdd85913d +b6a6ca8acd651e18 +b6af93eac7b3ea81 +b6b1177ecb775e6b +b6c1d901d50fc0b0 +b6c41db92f6fea4a +b6fb1c207058bf1b +b702b79c1be14658 +b7307be07289fb86 +b733d1f1d186d6f9 +b736b8d5909b1cb2 +b757d60b983239eb +b78796e6df8c4003 +b7a71aa686cffd57 +b7ac61d8a5b59369 +b7e742001e033288 +b7f7221084dc84c1 +b825b31563df2033 +b8263226f26d4d4b +b8309a9ce869bd36 +b83771502750d1da +b86f62fdc4d872a4 +b870f4c765f251f6 +b87f8463876328eb +b88b1ce3c15751dc +b8b92f9590443493 +b8bc48bb9cf78994 +b8d1ac30e0532125 +b8d840b4d2bdcf1b +b8dc8909db26c3d4 +b8e2eea2709a8262 +b8e6e98aa983f580 +b8eb5aeb1347ff26 +b8f6432c09e4e264 +b90648d493022475 +b93eb01d8b03ceef +b94d1b89568a4cfe +b961f7df6713f5fa +b973f275c7e4e3ba +b997e7876b18562c +b99b371a96ef50eb +b9c412b9c01ccb46 +b9c52b4d82424776 +b9ce5099afe2ec87 +b9d71d8f3f4af416 +b9eda2f7bd661aff +b9f438b2418d2295 +b9f558c1c03c62c5 +ba1a324d6dbb5d3d +ba1e85337e5b0c7e +ba2e47d9be50d07b +ba617d122c7d1f71 +baaba9f6ab017374 +bab8e0fae6522c92 +bad0b32e9e306e02 +bad54b81a8ffc7c1 +bad771ffa031491a +baded11455be2717 +bb0467d76421b5a9 +bb0776d2e2444c8f +bb3239357a5e7d71 +bb4bd4df10ad0e5a +bb4ff27e732c9dff +bb5fc7f0ca2d38a9 +bb7009bffa026308 +bb72e9d1a103dc3f +bb843f3533ae64b4 +bba2cc61ef57735a +bba7a176cb43d7d3 +bbbd188ab9155e0b +bbc1ae05bd13e65b +bbcfb3a477840991 +bbd42331df34e834 +bbf09fdd20f166d0 +bc15ac1264ebb235 +bc1bc2898cc55b82 +bc28cc04a4ff01ba +bc37b1ae9c1a2890 +bc39c00b18803538 +bc459322973dd1cb +bc8a6c00a9f84d45 +bc9533e6c5b2b85f +bc9d92ccafed1d00 +bc9db1dd51cb82a8 +bcbb0538bafb144c +bcccf15b106daee0 +bccdb4b45a691cb8 +bce04771bb758513 +bcee39bb58b3608c +bceefd4fe7f06f34 +bcf4b8b074088cb5 +bd16180aabbb9f5e +bd182dacb1ac6555 +bd2165f19e9a22a5 +bd24d531904b3f1e +bd357505c3e26751 +bd40afd1b8ecc70a +bd44f0bc44cc7963 +bd5592923a3c80b7 +bd568e210d88bbb4 +bd5ff09d423a007d +bd6bc581db1ca7d5 +bd72aa3af457dad5 +bd72b90ea216f578 +bd7dbe40cf49c8a0 +bd83107c3c2e7750 +bd83366232db2b35 +bd87240374f120aa +bd912530c7bf0d1d +bd96ac4a9af87ee6 +bd9ae551fac88e74 +bd9d16dc6cb23720 +bda065db95115d99 +bda94e2fe47ffbc2 +be00ca0828bcb3a3 +be17a54bb4eac5ff +be19952cb144dbad +be2c0ea70408fdca +be30081f2c8dd971 +be348f0608999c49 +be42bdeb29772c1c +be60621e337069f0 +be61921d65331149 +be6c242728d6ca6c +be88a0c869c2c389 +be8bc65b1e51a1ac +be96665e5d2468f0 +bebfd2a696180f1c +becbd2a46c8386b1 +bed1830d1d6d7f28 +bedb3f61a65e49fc +bef67e32ac30f9a4 +beffe3e7fa963ea5 +bf027a2c6224d2b0 +bf06113c9c0b12b0 +bf1c9f3cd3a1f7f9 +bf48fb64c5b847bd +bf5cddaae93571e0 +bf618ff6aaf479d1 +bf7e8fa4ef3e7e45 +bf83ba27e1621cb2 +bf9eddd7db5fb6df +bfb739bf66e076c9 +bfbbb608935b2a16 +bfc6389f2f2a7dec +bfcbbbf793d69952 +bfd7638fa901848d +bfe67ac1327c7b2e +c00038c0cd3dce88 +c0056c37be4bcd1c +c01e9ffc00cb8d2d +c024208c85f8dd5a +c0284f006bccc879 +c0398ebfe72f681e +c064d598b45fdcd9 +c0894a039e236349 +c09aaf25b5dfdfb4 +c0bdb3efbe1efed2 +c0df822aa8a18a1b +c1017d1f1bf9c6ed +c1189a2180c5c40f +c122727f5f189aa7 +c12ddc9a78cffe8a +c137028d141a6547 +c1437bdb437a84f9 +c15d2f57e5daf301 +c16b0a0886b4dc8e +c198480d1e94b260 +c1a3c5eb060c8bde +c1a91c698c1a88e4 +c1bc1431803d72ec +c1d98ceda84dc32f +c1f2d3914bf7a674 +c20644492a890c7f +c20fad4fafb2de30 +c223c0f80c7d4375 +c23482891d0ba341 +c25afd7a543d1ef0 +c274070e30db5ad4 +c280c1727c0251ba +c28c26eb436a4b61 +c28f0d6971662a1c +c2b15694a187180d +c2cc76d3799b0d5d +c2df2209e6806021 +c2f4835504371274 +c335a76b29ed5d27 +c336941d4344c39f +c338b4a076ff9fa7 +c351ed3d5adaabe0 +c355e6f0f2c85c8c +c36a762ec014ebc3 +c36b0c48b03cedff +c3769d2360710b95 +c37a85f168d0f7a1 +c38170231af0da63 +c381d10c3c83e7d3 +c3882213e9c784cb +c38f65092e0ff259 +c396027207ffc180 +c3abe177bfeae3f8 +c3ba210d562c1260 +c3c8288ba430e369 +c3c8a24825876b12 +c3ca709118f15f8f +c3e51c0be6f914a8 +c3f968621d65bd94 +c4024b96df701348 +c40d065ff6b9d2b4 +c42003c275d3dfa8 +c4259be901da08a8 +c42c5eb410d4ef10 +c4369cdf6a0fd7fc +c43ab8951f1b1a05 +c4409803caf679c3 +c455e42d9a43e2e0 +c469a0a2ea98908b +c4791d98864a62cd +c48d08ff0cdcd9ab +c49828559eb70a73 +c4994dd31b94739d +c49e50fdba5f9db3 +c4aa37c175f16b30 +c4b1c25d7fcd07ae +c4c249836ade268f +c4dfa53fec2dccd8 +c4ef50a7382ef7c9 +c537f4e1a543bf8e +c53f47108bcbb7a5 +c541774a18bbf1a0 +c54c2e7b4f96029b +c580c198ac55b3f4 +c593a6511f69b8ad +c5d9420606957a35 +c5f00999cae68f0e +c5f9a40c1b6f5c38 +c6093f51461f1a90 +c615b19287a83c5e +c61b932defb60691 +c6277f494d13a481 +c62cf962d8e9a80d +c63a450788b0e0c9 +c655d5430e983995 +c66c07945f9902f4 +c69acc442a3afd81 +c6a04c87c613f339 +c6a2474510e0b784 +c6a28152eb40062d +c6a4a50df761e6c7 +c6a95407c30371bd +c6b20018197d7ef4 +c6b3545f8116067c +c6b39fd320208a58 +c6b671a88d502035 +c6b7caacefe1c64c +c6be36cb6e3a3bc0 +c6e5fe4a18814446 +c7047531a5649a4a +c716e5d4fc34dd4e +c72b0f7170e8569c +c72d702ec5497c65 +c73b5d5dfd3bae6f +c73dd14e52e4c3fb +c74392f2ceb4109f +c765f772973b1822 +c7a04567b18884a1 +c7a089d99cf410f7 +c7a549b354c5be32 +c7b9eeceb714991e +c7c0643c423832d7 +c7df8bb03af936d3 +c7e12a03b1616f1e +c7f4cd7f0a69faf1 +c7f7847cb2f02b4f +c7f9f1ad01950392 +c808b463639d12ad +c82d80d5352abdc2 +c838c07875239cab +c8431befab766aca +c861842b15fc45ba +c8622c03ab51205f +c8661fbfc7a53f1e +c869315da5ec9c13 +c8c14bfe0ef3132b +c8cb550530226ac0 +c8cfbbed951db5a3 +c8d7944bebf8ec0e +c8ecb500199d873e +c922a95ea1aac3ae +c94a6e60ad0de5a6 +c953f1184ec114aa +c9545d3dd560ff24 +c967c61db85aa1aa +c972364aa6c4a1a4 +c9b8cbe3c5b95271 +c9c9b6ebb0767365 +c9cc6ff0d88427fc +c9cf8a4c4abe336a +c9d162ed00abb267 +ca0e391cc9720589 +ca2b21359c2919f5 +ca308d5bdde8794f +ca53b3d2f49e1108 +ca68c25ac27d62ab +ca92886c043a0f1c +ca97043a27fd2c80 +cab190ae39e380ac +cabe187e31facd8e +cad3656e8c12d150 +cade7a77b8deb9a2 +cae115134067c1d6 +cb05d2686e0245f4 +cb067956df7c4fb7 +cb53cf10fbd2eac8 +cb54571b071c9210 +cb55b100374e5b9d +cb65556d1305ce7b +cb65608e1a619342 +cb668aac48d57fd7 +cb67cc91d0bb2916 +cb7437b11854c464 +cb9a5aa5b025175e +cbb4e4b19111a8c3 +cbe2c2a3680dbff1 +cbe468d0b6af8ae7 +cbe6f2f044eaef00 +cbeab127b8bc269d +cbeb9c9a957011cb +cbf2ca4e1360bec7 +cc2fa9960a49630c +cc2fd9395fb85e1e +cc4a2e8affcd186c +cc4b3a4091151646 +cc53651b20024c64 +cc8093dc3418807d +cc857572d1778c88 +cc86a782a07986cd +cc95626b54e7a36f +cc9a5fe08c7fafa5 +ccaec2f587ef0ce8 +ccb5005d3a9a4cf6 +ccba23adb7f67559 +ccc623c1248d99db +ccf8de2df37c7e33 +cd0a5f7318843631 +cd212824dfe67c2e +cd3a2ee978a8a93e +cd7531225013d1d7 +cd7b83b5aa77e8bf +cd8229fa8e9086bb +cd9f5d387cbf3ab5 +cdad2bddc6c3e787 +cdb6e790cf2df99b +cde8a8b85f94b14d +cdf9fe5643b262ca +ce1bc7f29ce5c9df +ce623696f74890ab +ce6f5ac9c7912375 +ce781c5bb553f3d2 +ce7e1da734fd5f78 +ceb1a3635c49a85b +ceb57abfedfc030d +cecb70da3ad03290 +cecf2ad3e0ff989d +cedf34daede8ae98 +ceedc7dfe6c10303 +cef1129d19a7b41f +cef98ec069093c13 +cefd8f909667bcb8 +cf0e0632d52230e3 +cf10cda381408928 +cf14f86bc4c23647 +cf239c57cc5472e9 +cf4987233ad81408 +cf53f2050e51ab15 +cf5816f8dc169cb8 +cf77b76ab32c0b4e +cf7b9e14f96ce942 +cf7efcdfada9d179 +cf8a40b2ed21f54b +cf8c663b1e671c0f +cfb4a079ef0930e6 +cfb7376924ebc793 +cfd684f030179ab5 +cff7b566f2883163 +cfff4716f5f20e12 +d01727038194a4cf +d0180f6a4f6aa311 +d0345de5810d4f00 +d04b0c60cda9662a +d08715cf2e0800c5 +d095bdc53cebb700 +d097d3e657b19180 +d0a22b4d768d68fa +d0c44e5b2c8974b7 +d0e36831ae670901 +d0e80b298a9f78c5 +d0ef0fd1ddc25bee +d0f05ddc484072c9 +d10c457f1a7b6658 +d13e2c7977660ff3 +d13fd2598632fc90 +d141901a40caa77a +d14f33fb082d3402 +d1608e88bb4c36b4 +d177d58053ccdc4a +d17847c775bee384 +d1845619497f4eb2 +d1857f5a9b9a584b +d19639112f0e90c3 +d19e37133c11d331 +d1a120fda6fee5b1 +d1b41a1649babc6b +d1cac6e4a5d240e1 +d1d35df94ff727df +d1d801179817b60d +d1ed7430705e27b1 +d1f00b5889a18770 +d2002c38b69aa818 +d208aa03e6639885 +d214760fd621bd6e +d217dfe2a7259404 +d21f79be6f84efe7 +d2391ef7a185a7ee +d251d8b57c7a9452 +d260e0be4eee36ce +d2708781194011ab +d29d6848e1302cbe +d2a4c198c7ce2d6a +d2ad0969ff917168 +d2b1cd7045983069 +d2c9558a88981347 +d2c9f646595e3277 +d2cefda54631f716 +d33799138d3ce8c8 +d34dfd52e0ca4645 +d368e943a0fc77a9 +d36916a1499503a1 +d36dfb225d975ebe +d3738ae593d428b7 +d37db553716492cc +d3dc666eac380ea4 +d3de0bd3d41124c2 +d4036260ce841203 +d41b19ff5ca9d383 +d42d125853d75bfe +d45f29caee2eac48 +d46e556e1c90733f +d4885edf1590c39e +d4a0561d6868c376 +d4aeb77f77b35d56 +d4b4f9bc3c9abd53 +d4d198c1376b0c1d +d50bce3221f94c59 +d5281a5f64d55d23 +d53a97a12d494a42 +d56c5a88dd39b948 +d57cf153517382cb +d57d1f141cc5c0f7 +d5b1cf4f027975be +d5c58cf2d6b507f8 +d5eedd6b58332a41 +d5fcce1002e53d37 +d5ffbbadc621c870 +d627cfeb437f44e6 +d64259716c7f4d84 +d64acdb39b0bf7a6 +d650a18d2a2af0b1 +d6533bc4c993174f +d6583555b68c247e +d67df34b3568153f +d68abbfbf7a14784 +d68ee1edacc1a489 +d690c4fba110359b +d6c24a3811981239 +d6cbcc692a2d9c81 +d6f985246079b9e5 +d6fdfd1e8d7e7d9e +d71858878880b54b +d71b5bc2c980028c +d74892995ce53dc9 +d756e52f6b9047aa +d7659839006683a2 +d76b3532f93a4838 +d76bb1d8d2436dd5 +d76f7fb81fe567de +d78a9b35610d608f +d78c3c5d5e2e0456 +d7948f6ec73b76d6 +d7a1e20841770f47 +d7f145ab8f0d6d6a +d7fb238a7ab32ab8 +d8070da397b04c29 +d8135d3a6ffcfeb6 +d8151df48f53904b +d82b96a998dfbb21 +d84b7e8bd98ef3eb +d8511dd58800c80e +d854c9ebd97908b2 +d85f66ca31f3f357 +d8851f723099f3b8 +d8b6a53e34fce469 +d8d565ee5cf5dc4a +d8dc3313c90c3955 +d8fd6dcc90793b16 +d8ff7d6d5065ac9b +d90953ecae9111a1 +d909c1e5606b2abe +d913dd01f1b76206 +d9152c1f4e21a0b5 +d919b4d3b2a6aedc +d937d1a254855705 +d9490b55d1bc91bb +d949bc7b3828a7cf +d951421333145b9f +d95741e74dfebdae +d95c604bcbdc7144 +d9c523c0b2f60717 +d9cb580360e7a510 +d9d4f25d93005ba6 +d9d60cf92b09b81b +d9dbe28dea1be912 +d9e9137ed9c7c464 +d9eecfc9597429b8 +d9f4fa437d1b9778 +da0535fccdedb6b4 +da12171c7ac714f4 +da1296e0cd9020ff +da42d8fc2fee9664 +da6e1ca7eda0f024 +da7b6e265a7d0f4e +da88c5e0e63f3c0a +da8a8c78ff69dc6d +da94c90c2337626d +daaebb3a02109b81 +dab867829c5c4ebe +dac22083ce07531d +dad0c5cf882bf8f9 +dae3062b7fdcb89d +daeb6e2a21b05f04 +dafd7a78a5039f63 +dafdf384445a077b +db1202be025ca740 +db19f2d56e948acf +db1dd8890aeea353 +db4d9d6408756aaa +db614c1e91c37c71 +db6d95b261a6f7e7 +db734c5d4e8d3d67 +db8ac46f36998610 +db912fc6f10a47a1 +db983b2137f5a788 +dba81f49cd26e784 +dbb23b9cbefefe51 +dbc99ee01222d404 +dbf5009467e02126 +dc29e0a56fe5155e +dc33e5a68ee511c1 +dc47df860b5872e5 +dc7f9fcf7ea22630 +dc8ad72daf8de7f0 +dc95c06e181f2444 +dc9bbde2c1d0c14f +dcb0159fe4afafa0 +dce05e229f074227 +dcf14faccbedace3 +dd243223caa9960b +dd2a09f74ecc1bb6 +dd2a465bfd0b1298 +dd3b758a3b74799d +dd3d506dde884a68 +dd470014ccb721df +dd53b52d3b7ded9c +dd54b9b1949469ca +dd6b2730b2ed59b3 +dd72d61d8781d86a +dd92c02554cc8b48 +dda8295f75287438 +ddceb3ec050fb10c +ddd81ee43431c5e9 +ddd983749714beb8 +ddda97cacf207b6a +ddfa899123141c24 +de0ba2af4e812064 +de2aab128b583745 +de337b98189b77cb +de6dcb7041d22207 +de7b755b18e2c6dd +de7d4f9ee010a650 +de85f750458e4a1d +de895dafa869448b +de942d72d1035229 +dea7f15a5313e971 +debe5872fcba84f8 +dec2fce23074a15f +decc73d85dc7e977 +dee1584c2bf73b14 +def9ca90e1c82984 +defec3ae4e51943f +df04de8369cd5d73 +df071b5f09338948 +df18fcee809159d0 +df4f3687a8d6edb3 +dfaed2fa21b12568 +dfd08ed9f7c19717 +dfe045f7348372b0 +e01bdb08d53b7593 +e0205f5032d38ea6 +e02fb87586e5c3ba +e0303ec1f9584d61 +e04f8622777ff454 +e0626daea6fae6e4 +e06aa26d137ec9c1 +e06e9d6af322de09 +e07c05f0fca7d514 +e0905d60b11fb1c0 +e0b01d34a187bcea +e0b83f2b05281637 +e0cc0255fb897aac +e0d65eeb8535e544 +e0f8cb64152cc362 +e0fded5eaeb3b57b +e0febad61a47ecef +e110fdd3aa894f8c +e12d1322fab24c89 +e140de461f5bc054 +e150dee85f0eaa8c +e173f78ee1ad5548 +e1774b4e48ffb9d1 +e18ed5714a000341 +e190ebee3e9f2e50 +e1a2ca58c2b290d5 +e1ab88867f691a2d +e1b575d3bccc9be0 +e1ba2a95e86fe638 +e1bec50e7ee89ffe +e20c8b438c6ba450 +e22153940b62eca4 +e239c7ba854dfb5d +e242a1d71bb0aded +e269e575007e9410 +e26f3a64c399472f +e278c349dffcdb83 +e2888f7ab033579a +e28ef81ce369e94c +e2a54fd170d4ee70 +e2a68c0640ac5adc +e2ae1e5fb807c185 +e2b1cb94ba1a7837 +e2c0a5da7fb9343a +e2c9a16e0ef8c85b +e2ce1f0a2b42eeb5 +e2e64e7d5e04ba85 +e2f68874397b92e9 +e2fedefb6d2c2bec +e3231920e63b9044 +e33ae2ba7763adaa +e33cc4c478104771 +e343750985e51fad +e3471e5edd2cd0a0 +e3614b308e8ea1cd +e3856565fedec66e +e38cc6d705de945b +e3c7b0c04515073b +e3e065f14d4d0d74 +e3eba3d45c5ce827 +e3eef1fe12efc3cd +e41c4fd2df21c276 +e43be71e5752ddb8 +e46a0de79f8d91ef +e46b7cf7a0e9e5ba +e480aac56edd5a43 +e480da1dbf5b58d8 +e491689c61ce9ff6 +e4b200dd21357562 +e4c1f19eccc65748 +e4c3b09d074279f1 +e4dd160bc7b4ffe6 +e4e468ea3fdf8841 +e4e72e679b1eaafa +e4f06fe688ea3063 +e55b599350cee93a +e55e9400898dbc7f +e57ce1e52d84612d +e58275810f2d320c +e5fd3f21e54130ed +e603c0e687fa9374 +e604841f5f22f0d6 +e60b8ebc00131007 +e619e466572b8b97 +e6232713f0b91a82 +e6302ed7307b817f +e63a29cb7009a33d +e63c4eff91a3c4c4 +e6429f96c09b638a +e649fd4a6baedeb2 +e655d7b121c066d9 +e67024df6a26e1d6 +e6d1ef8b0d2310bb +e6d40e3140c8477b +e6d4b0f34991abca +e6dc01865cbaedf3 +e6e7a1d3ff2b3468 +e6f2e3f5941193b6 +e7094b99c279f4d7 +e722a30a7c1803d4 +e7263a4ede37f650 +e7287c531593caa4 +e72cf12bd6147502 +e74560cbecbe87ac +e74a7b1e4b57f61a +e750896f7657bc39 +e75b1c90bb357d9a +e76406fc5304810d +e777d6f13e8ad001 +e7879af15dc783aa +e78af00bda4a5b55 +e79d4b1ec59a714a +e7b3377818131e5c +e7bf0ccc66113ca4 +e7c338bb6d6f8d3e +e7f0249490703ab9 +e7f8beff019ce1aa +e7fedec52dbb14f5 +e80958f8db65fdd1 +e80be4ed3bcc48d0 +e8156d22b9611a43 +e81b67336d92696c +e82a4cf31e7cabbe +e842ea6c4b3f5d82 +e8444ec0f6b2364f +e846b3a46f413f99 +e847843efca86e03 +e84ba13e1928f99d +e85a4605a8f689d6 +e868d6b9991f05bf +e896b65dc288814f +e89b4912bfc33f40 +e8b4d51de1cc005b +e8c8d24f6d11426b +e8e9741b95ca5941 +e8f19167e07cfde4 +e8f8fdfaa8c95cda +e91655ff26015718 +e91fdf3ca6b5e169 +e924000bb5310712 +e92aff726028283b +e93f53c5413878f7 +e956ef900a8384ae +e96be9b38714ab54 +e976d14dd59a15b5 +e97b6af86727bad1 +e9a0780215177218 +e9ba08a26a1bb7a7 +e9c27ce3a88cf0ed +e9ccf12b30320bea +e9d15b0c6abfd76f +e9d1d271f3f85c35 +e9d39905cad8b72f +e9e08e3df7bb5df0 +e9e5c984397c3f37 +ea07e97ae4dcbaea +ea0eaecf80141ad7 +ea1190c34ea4b0fa +ea12bb204c9e737d +ea3424ecfbd9a391 +ea3733d6721398ca +ea37a340f2f7d17a +ea380ff59659d4d9 +ea3c9aba21198947 +ea40524374954bd5 +ea49161509be75e1 +ea49c5bde32f6767 +ea55bdd130deed80 +ea6e8366e0b094c7 +ea86df851ceb0076 +ea900e970b48bf1f +eaa8ecc913de74c9 +eaac5d48c75a0e14 +eac35bb1d26389e4 +eae07bb72e6b85b0 +eb08866e826a8495 +eb1df299b69bc617 +eb1f7266db624a17 +eb516dfa0ae6ac4d +eb5ac992ba6065bd +eb84f9f5d7d7e3ae +eb97c2043122b528 +eb9fc9d3da527284 +ebb92c416bf23321 +ebd1ef5cd6a91960 +ebe5ad4b4c997952 +ebf45de82b663319 +ebf8e12f23c17da4 +ebfc57eda778527a +ec2042b5f735d2a5 +ec4e37aba581a331 +ec55ae1f5ecbdeef +ec6250cf59456e1d +ec668e87b6d8021b +ec88f2fd460af4a3 +ec937e984e655476 +ecab0382da187f91 +ecbcee6c3bb2cf76 +ece1a20cb2ac3966 +ece9c35c09c0952c +ecec4784b5294340 +ed00012c25845948 +ed23d47c7db26182 +ed306f304d3b1c37 +ed47b0a41520a8a5 +ed49fffb9034111d +ed70d2c5f58eb030 +ed919c79779e5c48 +ed92a3c0516ad7f2 +ed971c31e99ff66b +edb7b332bf0bcc4b +edc516317d5a9aa2 +edfd10f0a40901bf +edff98f9a2c43cf4 +ee1c190e3d71db0d +ee2052a9667abd47 +ee22f993abd452b6 +ee2972087bacdc2e +ee2a80958ea19baa +ee3521c7b6fde961 +ee44d50fc7913c15 +ee8086c594ce1e4e +ee91b10be0b1c789 +eea3e0b1167d8e93 +eeade632f859b42c +eee428045506c675 +ef2485563033b766 +ef3aac05b0063c98 +ef3c740e877f8469 +ef5b1a5f4c59762a +ef618054debfde16 +ef644ab6f17de7cc +ef6ad6db64a7101f +efa665b731795879 +efb4fd3ad7f4f77d +efc5b241bc88c954 +efe11961ada0df61 +efe8f096015735f0 +f0063a8fe4310089 +f01432dae4d95267 +f021dd79c1bda590 +f032fb9363da7909 +f033d6a61da03384 +f0456c58bd8cf0ed +f04636c69dfd7afd +f04fb2ef52c13461 +f071023cf77553b1 +f089644307d46b94 +f097396576241db2 +f09756d72d1f4874 +f09c0048716e2217 +f09feac294af4396 +f0a3cfb3a6164be1 +f0a612afe70411ee +f0ac94108d54af5c +f0af3ea6876ae2ce +f0b0475ca9cbc902 +f0b0fa276f1ade03 +f0c5b19e09587468 +f0c68baa3028e3b3 +f0ce8ae8acb1cf9e +f0fc3e89ea4aa975 +f105173654257e8b +f106907a6780ef44 +f112f0b360d90368 +f1228d7a55f450bf +f1266774add53fdb +f12ab8eb3f51366f +f148b9e7d76c0d69 +f15b3537b46ca557 +f163ebe334173855 +f166d06eb5fa7856 +f170dc4e23a96a92 +f17e868cc8ca99f7 +f18accddb0aecc3e +f1b50c13733c2eaf +f1f9dd2304b04823 +f1fb3d9598fa0cfa +f2034a825a76e38b +f2188a81f7743297 +f229a77dc2288229 +f2455f4025a59bd4 +f26e680556f91c78 +f2774f75f83db3c4 +f2807acb10aa9b5a +f2a38831882e4da5 +f2bc0da339c63b98 +f2ce3f24cce65c7a +f2fe2e4e97ae2906 +f30e2d146dc19c15 +f323027db2a4ad9d +f3244534c444f43c +f32cd3d3f6c0e526 +f359deadba8ec3e6 +f35cd7e4dd6b423c +f366744900a33cc9 +f3682e14ac1e6398 +f3764ee781aa91b0 +f393ba352feefa7d +f3a18ab0558a02af +f3b541efda786588 +f3cb8edbde1161d8 +f3de61163cf9be86 +f3e2569f6437962d +f3e6c70888d7cd22 +f3f35f4d24a81286 +f3f8b13b79c5b706 +f3f927b0ed2649a8 +f40a744bc8073408 +f413575bf7f1329c +f41b6add3aee9dc1 +f42c4806573bfefb +f432796c16ca0218 +f43a5d929e2f8e9f +f459dfa9bd9c1cca +f45a313158a1aac6 +f464e8de539eb4c0 +f47870cee1e3e0ac +f4800b96aa4c4d3a +f49857ac5a630173 +f4b09aca61f25396 +f4dd7678cd79fc14 +f4ee24bc8e837fee +f4f4968b4565cd9f +f50e682df7496028 +f5134c25bd6cefed +f51de2721187d6c6 +f534f65cb39b9767 +f563bf8e62d9bc97 +f5699d71dc496825 +f57173cca3f17a4f +f5872d0436968e23 +f5a1886ee5928bd6 +f5b7e0b7e93cbda4 +f5d2321cf5e4a110 +f5d3c53f309be248 +f5e76eefde1edbf9 +f5e8c7d5fe591401 +f5f69a2b2852442b +f60d491689b8f379 +f61d72878f37c233 +f625685111417543 +f62e98812b1f084d +f63f535ce1b6ced9 +f64419773524d71a +f64eed768958dc34 +f6559cdf09790a05 +f66b3e4990489678 +f66b6fe52d958134 +f674b2aa7d9b0948 +f68bea97d7c4b0a9 +f690f89531e2ec87 +f6a799e6dcf9bc85 +f6e9b5d913e11918 +f6f4e9fd0cb8dd5b +f6f5fefcff1f1ba3 +f70519adbc8175d1 +f711be4cb516d237 +f72074f64e416f5c +f724fda14dd4d86c +f726db11e0a11278 +f73c4794b186ccf4 +f7606b6daa8d89fd +f76106d68a624a7f +f763e0e1e562c27b +f76d6aaddce03338 +f77f219221efa0e7 +f78ad716bf79744b +f78e559178e9b45f +f7d5eb7859ea4583 +f7dcf10d8eb9b770 +f7e1ecf13c04fda4 +f7edd34e990c52bc +f7f880aff3c03d58 +f7fce6d490f101c0 +f81ac6046df91bf0 +f82bf3870103fa5c +f82f310e64572969 +f8641242253b0c20 +f873a05936f4faab +f87c09bc236c40dc +f88dd2bda8ddc0c6 +f891347fbc1b1ef8 +f89f675c0544ebd2 +f8af6f58015f0793 +f8d32cf9e065ae83 +f8e00b7aba292bc3 +f8fb6949197735e3 +f901a8f2a51329c5 +f915e98acc6fc61e +f95a133639236529 +f960eb62103d0a68 +f96674db089f4df8 +f9896e20afbbf8c8 +f9b66062817d5aa2 +f9c58efdbbb8126a +f9c78c4522a97cf9 +f9e671789c6c032d +f9e6cb20f647deca +f9f8c345182f9726 +fa1044e76f6c89b9 +fa30696076cdec17 +fa3d83d7f6f1b3cb +fa5353ab837eb173 +fa5f91bbffdd7ca9 +fa6cb79148e730ff +fa6fa47a06b9b3c1 +fa7036c6ec9c18de +fa9462930d073a00 +fa9e41164ceaf002 +faaec7bcdd889981 +fab1fcd581c6fa1f +fabb0d1a1595cb96 +fadb66481f83d6a4 +fafd327878a5e2af +fb0b639e0c51f542 +fb112b096f7176b9 +fb23f4328f2a26b5 +fb6f3da9bedb7f3f +fbce75628993ba9f +fbcfb1b9b795e7d2 +fbd2b9d47a5d1ffd +fbe5bdf0c102b831 +fbef083dd945828e +fc05ad484744bb55 +fc283a413914bb81 +fc449f78b6e24ffa +fc56f1100e7f4172 +fc64cfc5e35f3126 +fc6b53689a00b84d +fcaabd71169d861d +fcab7f9d223718d0 +fcafd1e10744764f +fcbdb86004cf76d2 +fccc3dfed0931d42 +fcce740d89a40ab9 +fcd0844ae31dd9a5 +fcd44516db8f69f1 +fcd94d7474c8fcab +fced8803fb8b8054 +fcfd472a8b7e2746 +fd0cfe8cd9f71d10 +fd0e9304026f7162 +fd115571775b43a6 +fd20e867d9929348 +fd2efc2c2b40b0d3 +fd420f73752a3044 +fd5d635a4d998cc6 +fd5f2977c0694404 +fd6629bfc223de9f +fd66d82ed1b77a84 +fd720619778323ce +fd7709c80f5aece7 +fda4be07a6140bd6 +fdb4f71c8c010e19 +fdc22aed83a29f54 +fdc792069377921f +fdd16f110d06c04e +fdd7eaf6e07ae38a +fde1d8fdb0e0b71c +fde5a339064148ec +fdfdc015ee64e1fc +fe011685393e4f40 +fe2314e035c3b42b +fe26f67562564486 +fe4a831479640234 +fe5b1749e728889e +fe62e737a130c72b +fe71ebd54b9f88ae +fe73046455e11493 +fea4202aa42c046d +fec838eeb834917e +fedd828e6390af93 +fefd0c300ffb1b6c +ff2e93d138b6d975 +ff3ed797a102974a +ff3f08d4de0c2b93 +ff461a07c4bf2fab +ff5d6c34340894ba +ff6234d7a05ff61f +ffceea1f14c89e4d +ffd0e7f0115752c9 +ffe6a24e7b6bcb43 diff --git a/dm/tools/patch_nso.py b/dm/tools/patch_nso.py index a058c9d..3ff7e51 100644 --- a/dm/tools/patch_nso.py +++ b/dm/tools/patch_nso.py @@ -113,6 +113,13 @@ CUTS = { (0x1423fc, '08fca752', '087ca052', 'AddressRegionManager constructor: node area limit mov w8,#0x3fe00000 → mov w8,#0x3e00000'), (0x142468, '09fca752', '097ca052', 'AddressRegionManager constructor: length of the node area registered as an occupied region mov w9,#0x3fe00000 → mov w9,#0x3e00000'), ], + # Super Mario Galaxy 1.3.1 / Super Mario Galaxy 2 1.4.0 sdk (SDK 18.3.5, the same build in both): the same node area cut. Galaxy 2's movie player initializes its StandardAllocator with + # virtual address memory (main+0x62c280: Initialize(nullptr, 384 MB)), which aborted at its CentralHeap::Init: a 256 MB alias region holds no region after a 1 GB node area. + # The constructor is at sdk+0x13be3c (limit = alias start + 0x3fe00000 at +0x28, a unit heap of 0x30-byte nodes, the area then registered as occupied at +0x13bee0) + '6075151627016eef437c1312f2e3ed56': [ + (0x13be4c, '08fca752', '087ca052', 'AddressRegionManager constructor: node area limit mov w8,#0x3fe00000 → mov w8,#0x3e00000'), + (0x13bee0, '09fca752', '097ca052', 'AddressRegionManager constructor: length of the node area registered as an occupied region mov w9,#0x3fe00000 → mov w9,#0x3e00000'), + ], # Pokémon Legends: Z-A 2.0.2 (v393216) main: nninitStartup (main+0x1b2e650) initializes its StandardAllocator with virtual address memory over 12 GB of address space (main+0x1b3e3e4), which # the Switch's 64 GB alias region holds and an iPhone's single 6 GB reservation cannot. The allocator commits pages as it goes and the pool (3.2 GB) bounds what it maps (profile mem_map_limit); # its largest block is nninitStartup's own probe of pool − used (3.15 GB, allocated and freed at once), so 4 GB of address space holds it diff --git a/docs/agents/03-bringup.md b/docs/agents/03-bringup.md index 02b9167..8028e54 100644 --- a/docs/agents/03-bringup.md +++ b/docs/agents/03-bringup.md @@ -56,6 +56,7 @@ Each entry: symptom → root cause → fix (where the fix lives). Check these fi - **A null-based write minutes into play, at the pool size minus 0x20 (Engage: `addr=0x1fffe0` at `main+0x9a4664`)** → Unity's TLSF heap added a pool, and its low-level virtual allocator (vtable at `main+0x61ffeb0`; reserve `main+0x9aa0f4` → `nn::os::AllocateAddressRegion`) got no address region and returned 0. The alias region ran out of *address space*, not memory: the AddressRegionManager aligns each region by its size (64 KB under 2 MB, 2 MB under 4 MB, 4 MB under 32 MB, 32 MB under 1 GB, else 1 GB) and Unity asks for its block plus alignment slack, so a 2.25 MB block takes a 4 MB slot and a 16.25 MB block a 20 MB one. At the crash Engage held 4.17 of the 4.375 GB left after the node area (StandardAllocator 3.14 GB, Unity about 1.05 GB, the rest fragments). On hardware the alias region is 64 GB. → shrink the node area with a rewriter cut for that SDK build (`patch_nso.py`, Engage: the two `mov w8/w9, #0x3fe00000` in the constructor → 62 MB). To measure, probe the SDK's `VammManager::AllocateAddressRegion` at its success path (`ReleaseWriteLock` return: x21 = size, x22 = address) and `FreeAddressRegion` after its prologue (x1 = address), and sum the live regions by caller. - **Sizing the reservation for a title that uses virtual address memory (Engage)** → such a title may never call `SetHeapSize`: everything comes from `MapPhysicalMemory` in the alias region. The `[mem]` log lines report the alias high-water mark (one line per 256 MB), the total actually mapped (page bitmap) and every heap growth. What fills the alias region first is address space, not memory: StandardAllocator reserves the whole free pool (pool − 64 MB, 1 GB aligned) but Engage commits only 0.58 GB of it, and Unity's own regions commit 0.97 GB. So Engage's profile reports a 2.5 GB pool (`app_pool`) and uses a 4.375 GB alias region in a 5 GB block (reserved address space peaks at 3.47 GB of 4.31 GB). iOS without the extended-virtual-addressing entitlement allows a single 6 GB reservation, but Metal needs address space too; 5 GB is the total proven on a phone. To measure commits, probe `VammManager::AllocateMemoryPages` / `FreeMemoryPages` (x1 address, x2 size) and split them by region. - **`StandardAllocator::Initialize` aborts in `nninitStartup` on SDK 17, then the alias region fills in minutes** (Ace Attorney Investigations Collection, Unity 2022.3, SDK 17.5.3) → the same node area as Engage's SDK: `CentralHeap::Init(nullptr, pool − used)` got no 1 GB-aligned region for 3.14 GB after the 1 GB node area. The constructor is at `sdk+0x139458` on that build and takes the same cut. With Engage's 2.5 GB pool the game then ran, but probes on `VammManager::AllocateAddressRegion`'s success path (`sdk+0x1395a8`: x21 size, x22 address) and `FreeAddressRegion` (`sdk+0x139df0`) showed StandardAllocator's 2.44 GB reservation beside Unity's pools (1.06 GB live, from `main+0x40f1d4`) ending 4.37 GB into the 4.375 GB alias region after 140 s, while the `MapPhysicalMemory` log showed StandardAllocator committing 0.19 GB. The profile reports a 1 GB pool, a little less than the 1.02 GB the game maps at its peak (the host does not enforce the pool, and only `nninitStartup` reads it); ten minutes then peak at +2.85 GB of address space, against +3.91 GB with a 1.5 GB pool. +- **`nn::diag` abort from `StandardAllocator::Initialize` long after `nninitStartup`, right after the first Vulkan query pool** (Super Mario Galaxy 2, SDK 18.3.5: `sdk+0x12dad0` ← `main+0x62c52c`) → the movie player initializes its own allocator with virtual address memory, `Initialize(nullptr, 384 MB)` (`main+0x62c280`); Galaxy, on the same SDK, allocates that block from its main allocator first. The guessed 256 MB alias region holds no region after the 1 GB node area. The same node area cut for that `sdk` build (`sdk+0x13be4c` / `+0x13bee0`) and a 512 MB alias region: the region is 32 MB aligned, so it starts 64 MB in. - **Large resources silently skipped, later a null deref where the resource is used** → the game reserves "virtual address memory" (Mario: 1.75 GB in `HeapDef.byml`) and maps it into the alias region with `MapPhysicalMemory` on demand; the alias region left after the node area was too small. Also visible as `SetHeapSize` asking for much less than the pool. → repartition the guest block (`hle_svc.c` `mem_init`): Mario uses alias 2.875 GB, stacks 256 MB, heap 1.625 GB (it asks for 1.47 GB), 5 GB in total. Measure before sizing (`DM_SVC=1`: the `SetHeapSize` request and the highest `MapPhysicalMemory` address). On iOS without the extended-virtual-addressing entitlement a single 6 GB reservation succeeds and 7 GB fails, but Metal and the rest of the process need address space too; 5 GB is the total proven on a phone (D2R). - **`MapPhysicalMemory` faults on part of a page** → round to 16 KB host pages. - **`nnMain` returns right after `nv::InitializeGraphics`, with no error** (Hyrule Warriors: Age of Calamity) → the game's `nninitStartup` sizes its heap as total − used memory (`QueryMemoryInfo`), calls `SetMemoryHeapSize` and hands the block to its own malloc. The host reports 64 MB used beside the heap, but `SetHeapSize` checks a request against the real size of the loaded modules (66.6 MB here), so `SetHeapSize(pool − 64 MB)` failed with ResultLimitReached, `AllocateMemoryBlock` returned 0x1003, malloc was never set up, the 866 MB graphics heap allocation came back null and `nnMain` returned. Probe `DM_SVC=1`'s `svc 0x1` request and the `AllocateMemoryBlock` result. The profile key `mem_used` sets the used-memory figure (72 MB for this game: the image plus stacks). Monster Hunter Rise's modules take 320 MB (`main` alone 314 MB), so its `SetHeapSize(pool − 64 MB − bss)` failed the same way (`[mem] SetHeapSize … + modules … > app pool`); 328 MB gives a 2.88 GB heap. diff --git a/docs/development.md b/docs/development.md index 17f60f3..5cba269 100644 --- a/docs/development.md +++ b/docs/development.md @@ -262,6 +262,13 @@ The game's own work and its frame rate stay as they are; the host avoids work of - **Not yet:** GX points and lines (the geometry shaders), sampler LOD bias (GX uses it; Metal samplers have none, red line). The base NSP in hand was damaged (147 MB zeroed near its end: the two WebM prologue movies, which the storybook prologue does not use); it was packed with `--allow-damaged`. - **Mac input:** from a fresh save, `DM_KEYS="f1500:A,f1950:T0.373x0.70,f2300:A,f2700:A,f3200:A,f3600:LRight,f3800:A,f4200:T0.247x0.426,f4500:A,f4800:LRight,f5000:A,f5400:T0.659x0.366,f5800:A,f6200:LRight,f6400:A,f7000:A,f8000:A,f9000:A,f10000:A,f11000:A"` creates file 1 (Mario icon, Regular Mode) and plays the storybook prologue into the Star Festival (about frame 12,000). Screenshots of the handheld picture need `DM_NVN_SHOT_OUT=1280x720` (the raw swapchain image is 1920x1080 with the picture in its top-left 1280x720). +**Super Mario Galaxy 2 (`0100FD8022DAA000`)** +- **Engine:** the same Hagi layer as Super Mario Galaxy, update 1.4.0 (v393216), with Galaxy's `sdk` and movie module builds (SDK 18.3.5); `main`'s bss is 2.6 GB. Everything Galaxy needed from the Vulkan layer and the host carries over; the profile is Galaxy's with its own memory layout and shader list. +- **Memory:** the movie player initializes its own StandardAllocator with virtual address memory, 384 MB (`main+0x62c280`), which aborted the game at boot: the guessed 256 MB alias region holds nothing after the SDK's 1 GB address-region node area. A rewriter cut for this `sdk` build (shared with Galaxy) shrinks the node area to 62 MB, and the alias region is 512 MB; the guest block is 1.25 GB, about 4 GB of address space with `main`. Footprint on the Mac 1.93 GB, flat over five minutes (1.0 GB of it Metal). +- **Shaders:** 3,797 SPIR-V modules, all created about 7 s after launch (Galaxy: 3,089), captured by the NSP script as for Galaxy (`vk_capture.tsv`); the same two geometry shaders (GX points and lines) are skipped. +- **Damaged NSP:** the base NSP in hand fails the hash check on `data/texture_replace/MarioGalaxy.hix` and `MarioGalaxy_Sub.har`; it was packed with `--allow-damaged`. +- **Mac input:** from a fresh save, `DM_KEYS="f1600:A,f2000:T0.268x0.579,f2400:T0.641x0.778,f2800:T0.128x0.426,f3200:T0.641x0.778,f3600:T0.659x0.366,f4000:T0.8125x0.889,f4500:A*6/300,f6000:LRight+A~1.2*200/100,f6050:Y*200/100"` creates file 1 (Mario icon, Regular Mode), plays the opening and walks the first storybook stage to the spin tutorial and on (about frame 11,000). DM_KEYS runs its steps one after another, so a hold blocks the steps after it: walking and jumping go in one step (`LRight+A`). + **The Legend of Zelda: Tears of the Kingdom (`0100F2C0115B6000`)** - **60 fps at normal speed:** the game picks a present interval each frame (2 = 30 fps, 3 under load) and steps its game time by 60 / fps. Stubs in `patch_nso.py` (`FRAME_STEP`; the sites come from masagrator's FPSLocker config for this build) replace that logic with the host's frame step in whole vsyncs, as in Breath of the Wild: int fps = 60 / step. Prerendered movies hold 30. On the Mac (M4 Pro) the opening cave holds 60 at 1.000 of real time; with 12 ms added to every frame it drops to 30 after three late frames and stays at 1.000. `DM_FPS_TARGET=30` saves power, `0` gives the game's own step back (every stub then runs the original instructions). - **Before the host has decided a step** (the first frames): the stub steps by the measured frame time, capped at the target. Game time that ran ahead after a short frame is paid back by the next frames (the idea from OJZen/totk-mobile); frames longer than 1/15 s are not caught up.