[<prev] [next>] [day] [month] [year] [list]
Message-ID: <CABOYnLz7+hhiMTSsQ6mGVCUJ_xzX=Fh1Wq8z9in43Nk_h=h-fQ@mail.gmail.com>
Date: Sun, 11 Aug 2024 13:35:39 +0800
From: lee bruce <xrivendell7@...il.com>
To: syzbot+23786faffb695f17edaa@...kaller.appspotmail.com
Cc: bp@...en8.de, dave.hansen@...ux.intel.com, hpa@...or.com,
kvm@...r.kernel.org, linux-kernel@...r.kernel.org, mingo@...hat.com,
pbonzini@...hat.com, seanjc@...gle.com, syzkaller-bugs@...glegroups.com,
Thomas Gleixner <tglx@...utronix.de>, x86@...nel.org, kai.huang@...el.com,
wang1315768607@....com
Subject: Re: [syzbot] [kvm?] general protection fault in is_page_fault_stale
Sorry for containg HTML part, repeat.
Hello, Sean and Kai Huang.
First, I reproduced this bug and comfired in the latest upstream.
Second, I try your patch and test it with my reproducer.
If you fix this issue, please add the following tag to the commit and
CC these emails after:
Tested-by: xingwei lee <xrivendell7@...il.com>
Tested-by: yuxin wang <wang1315768607@....com>
Here are the reproducers:
=* repro.txt =*
r0 = openat$kvm(0xffffffffffffff9c, &(0x7f0000000140), 0x0, 0x0)
r1 = ioctl$KVM_CREATE_VM(r0, 0xae01, 0x0)
r2 = ioctl$KVM_CREATE_VCPU(r1, 0xae41, 0x0)
ioctl$KVM_SET_NESTED_STATE(r2, 0xc040aed5, &(0x7f0000000200)={{0x0,
0x0, 0x80, {0x1000000000000}},
"f90d366adbd2a9b552ed45bf030c9f0be15024f905fc22086fd1bd733a85e3a68c1ee7619208430ff89e6ab222b65fc69b713fb344d9635a76139533a965a7bdd4477d8d995e8a64bd3b719f72234a053303f0117fb9d5984750118c109cb644da61acf8dc8e27e4c2c8727ccdd6658bd91778cb5440fe1a36598886dd12e84f3bab5fa848182ef305f2eeb725dea9a879a0abc4ec8700a503938a262a06757b188396e611dda83acfa6c8c69a356fc2f7f1f21d531f87311bcb5f0546a7dec4c6178e4c70cf19a2c7a5689fdb8575007e38d6a58ce85956372179a12a337681202763fddc22b7846d1457436cffe7432a5b017c3d63d1b6a0fce425ee3359b92644c9dfea80e5cfc179fb34e2623ac691f9d27a14ed4eedbd807142c6153f93611d66f90bfcd7e5d43b102539cb7d5eba628e5e40e384d731c22324ebd1751e718b442d3a79e2914063919aeeef3e1b6b15e0f83b9b73461efe9bea9ef2610ce3e4ad833a39df41f662dba03fb3f76c533496edac28cf62745d88787b12e04b2dbb02cd6fb6b7d1e795686ed6bc9c4dd7716572e3ec521ea3d904b03387dd04005ff26b502e2c983d4f2fbc8906121e766df24b3642210de47b72242adc435cd58994e7b5effd57a715a2f777af77d48b20a5b0340a05996c54f5bbf36911f995ca43c8a34e7a1e3d5310c6d3ffca6583d9c70df181287cee3c281aa52d39004e4765190de5d6b162d6acfc7183395962d0cbae56cd5bafd419818702d6a270f2ddcbc38e371721a3171ff86ddbd7181737a82857805eb8fb9bd0dc582510deca4e3ba81af6469757b95da1b8fde036f33634f9b54c84c64530436a1ce9c43829a180bbcbe451c63364be9ff73dfd425d07deb27f5c424f13b3d516262359838b3a9529f5f038c701df10ab2edbd87bbc6d6f46a6d3102ee47dc811d37e7a719455fffed16d501059147877d47e8d1107f170712426c673e84fdc3f593f4bed7f2265ceda5d26e4d657f840fa90681d744e54e927b40934b1309b800960ffb37febc9edc963fe0b8c5a0b1a999c118b9a408f2f50a4f47db2c7793acd497be2e81abfd8ea9abcf823b603c24f15ef31f14064b8399417f27dc1dcf3a450480071f01c3b7d706f23553db85d0c77d621a9c88358ace88e4e431cb9492be35cf7407a35844a0f05cbcd52df3cdc40683b39ccca780cecade7933bdf4cd511b7067bbd161f7a9a1b463f416426cc57af5631fb1c94a919d20e46a5a684b437d15e5fc301eaae5642168a23d90fe1a38114e61999d60d7ac76a8a2404fb7da4fa4a07019ba9bf896451917517b7001199e586744d3a9a44b46e0ff4ff1769358a70f6b474aaab0467bdd5c4ef1bf250ab9f21161012f6aac09b425fcf7352dadb96d9761cc4a0df85f1c9199e723ca6add625e55eadda1c81a1e4900b3fa177a112ea8cabdf5d7c3c31cde2840241e067f150db66f61a0ca8a17496da2d9f9371c5ba86281aa836ecbf0720b853a21b25d42116a15146830adc774af8acc61e716becec9126a72607cba153e38d49f649e0d107882706738cf307f56d85691540b6829fe6d75ee39e10bd403851cf0e6b19d6466b6cecd54af05fc1c867fc6fc8a233fcbfabccc03b7526669d145f8b4fe89607ec586a0d0e3eb25b003134f2814c6221c2b3cd53121f24e7c5bcf95ddaed803bfb50f6444faa82d5df34a0c54ac2870730181feb0be7d2cd94f7556777e878d467f307ed547b70abda153e4cd337d9b73f06032e71c17a520afe4f2b56980348bcc397b10d6a6f922a72f0b617422b24e32f1a2a2cdbb55d08dfbd2e89a8035afed00524f02580a921dd428ccde714b6a9415340f17ef86cd6d5bd08b1e5140e7050cfb26a9defa3a0c2b4a1cfa5bfea046bb4448e963783649249d8a90cab7b1be2cb9ba4ba931b8eb1d6c4d832fa91e073c2c36bafaa0ab7bc9a594632f7e7571f6c75d51bd29a33dca2170edd0af382e8dd5cf99f2d181ed5ded290716bb6546b935a0f7e92e0b0c9f8bc839063cc8c366770d8db909297dc729d2dbb182c9acfa07a3aa65a03349bcdb06355aa965b75ea118a8febe7fbab8c501b7bbea39cd932f1fa518d7951482e26c6d6ac79bf154a4a03de9e49bbbcb9c060ba50738e4c80ca99fbe67f4e87a249755e999ef27c4cfc039fdf87492b84899b9eb7795f7e74cf993bd0b5757214489e7f5d7705a9d56de1c6ea70c5142eee2beffd24c8a0eb13dc33dec8df29b0989e8a5c30d3102f55a334b78e15dd696178f48a1e97de8736e5732742c2060aeaeb9499575b795f08cc729c181ecf913eb5280d6087fa7f6a65df45853757500c1f01b91f0200555935dd3b8bedd5f8c8eb2ff3ac44c96be73871ea26c5e5f3503e7c5dfdddfb929b26b1d2766df9bf419c5597ecf493a9f363e0d1fd1701f2b253af5afe04f8b23f8bf8e6935503a939ca3a9c1503474b3501ea50b44ef71a55f34f787d4f689a6d6721b82a8eb0d47d0f5dde98d12a225988b6399f7befae3b0cc2db13275ba092e9bde3ab3b47e47d36f69a94eee8c09ca78574bebceaf0ce4c23a5e7917e697fb76b0864accada8b301654c56b0d9629e85171c4860460022505a73d2acbcf5cd55686e9c62e550730a1d219f46ac23dbf13c6e101059380a4a3196e4db209b4129bd130227f349393efef9728609d4f2d4d1cbdf5605c5f25c9deb6a1db3b71e95e4b1c5af55f01f2330f2a6fd2b2c0f72580dc4da276c86dab19f817f90dfa7e6ff44fb90ebe9d5ceaf879e0a8973755bacd602744bd987397e6775fb65715a30dea88bab25b38e54a97b21d716e885a5d921970f81ab816d42d1ffee0a445d52f036f892dcaabc65f05cde9e3c3aaebf90168f3866d580d722a6bce399afb341948d17bed8cdbf725ef75e2c7d6da3844c1184709f748d2e18cf50ad9f94b2b936d6f6a483b0c490ac641c1c47064d144e559addaf1a162dc9013dab6589a08879b2c8140c4c1bc75783589ab966858bbd5d4706978ca65ca40c4954167c5dc9f9a0f0d858f2f1e5b1d79ecc281a2efe25146a236c7d312f166f440fece7e1618bee1d2244e884e23eea7568cee17a4c7262b450b8efd8b4e64e23b9f2756f4aeb495b9b604efbdf7c9b1d79f30f26ea5b2b655c3f9a931f54153f23fb064a9f1d2eb30b98373c180f76e72df20bcf5e99322e00bbe7b3a9e6a9ab273cba36596e880ee69c006e8098172e86ac8dcb6bf56c8557d7d0828245ce2c97b7eea5bbe6f6e61b2c70aada55e1eff782dfddb061760d26da0e08b5223f46e950661d31ed8161bf042c2836ff6903d560efb367c47bc67859e2e5bc18816aa5c31d7858a6e730a825800ff4174623dfd0fe0504227171c2f7bd18497889f902a3d80253c67111b55e6aec1ff5f2fac56dd0e4b515e56fafe53dc52c343aef85642380ef847fd117dc2f8ea66b6d202d628b7d088dd45e53226748df660197325e9c46e2bb0ed5a9b12be9f5e68594dfddde769ba90b59b4d37a893d7661763e053428e3fd5d4368a568c98208c6ab4908fdeb1c5afc84c8d18a83d9f379949ae50091a4105ed183f0cb1ae49c8da6c6433c2c9e573362265312db10202986bf564464caa0e0fd7131bdaf2209e3c8b60b2d4a5281e97b31f4b3ba1941dbed4568ed10bc68ed1132ea6852b23044165dc1d61be6537480f36a95896b18ef571e19be32b39ecd1ea3130648d618f71f96d061dd087f262f977da667329ac439bd7f844f99913a204a90b72f6730d6b67670476c5e654ae1a139eb98f4ef56908a6a209a1b9c0c89f350a9ce71905057268ba147cf352f4d8021e25d47a7a91885a71303e6cb55e85aaf4e2e9062beac40a8d427f44ff2156d2657889df23fe9ab4c2ba8703ca9d3a2b7c5504b05052dae4834324df86780bfe5d697eff15cd68820ea5f670a781ec9b1567cb2b478d2538c6f5d0416c4bf8a63c9800132c037994bb28717d7b2cec2754ef257bb3d9389be8d2ecfe6164d2d0bc4cd03473917c3cc45cc577144f5036920cbb9902909df41383ba9ee96eddd1a9e02495bdb7b4308083f8a6e526b2cf3c91621823775f39be51a38102414e683a5889ea4458ec785862db40f65415c182870cd247abbcc9d4d44a11fae610a58996c519677c006ec8d7959dfd709f5dd5222886de32c017a2d886e975274e3d64665e6f2faf61a440409eea675c7631031d6649dcb78e973bc2726583d18d007b787a72a6bc14028ab37fe7561b773d812778e80ecf5477c30e0be55ac59b8d07cf19475e49a81c1c923b6bdd97f5cef648d034d118a4913adf2dd3b58db4130fa35d2b44bbb30ffd3420812ec7e60b65dbf7686d7a01577b24e20132177a24cfe7c68b9316ba8bdd7712c1d398ee285d546d5d9f27210b1b7521754060dd69dfd0acf3324c3eeefe2dc4c08c01aee983582aed6f291ce8f349696bdc088ce3fdee9464b08e6dc3800afcb290d9546a422d792727cfb89f4cfd8bfad8a97460fc231b29901c024b9be09bd9e30d14b72bb4baca5bcd591dcf863dcde60ca648b56cd3b77c4f145cfbcd1172ba5f597fa2f2c7eee0291c68c111c7914d60d451987747138d788e87db355b8608887b997371eb88dd0e2319784f99d395712e15f611756d521776f78164c7cbaefafaa62aeee91e4dd1b1633099858d60b69a14f3cbc34ac55a7315c1784be2323a37a8f5f8aa881509c541517c791fa285994c83eebb1a66072ec4110328ad9f6c42f779d39717de6dfb3ece0256983ade964c92db53832a08aa30b112e6c9f62dfcf3d0abfcf380588504e3ce6f310c84a8ea82836c57f1e9bdd71064c7e498c92fe0d32369473ee92a56966c095e1662aa10b61262ecb9a40c7cfb12759f4a28e0076cb8bc1eba2e1115ce567e8447c0dfbe984f4a77810ffddaa0c72d23f398dce3da1884f62edb89d2ae9e4e14b309c893d82cdd0b46cda175ca9d52bde5622256d8a44a8fbf4a42635b2546566c192d0530398b5304dd7cecf10ded974434ce04371f9853a0122f18cf074e3df3fc385f0c895e19cdae76f2a3cf84edead7e79e3259159f0153f1aed834deceb4c03bb2206f6b51452a0b4ff4d163cf3b19c31b73fbd6c9eabb7ff2d21ce883723af94ac6931bf660878a18d00a6e34302fac8d95620f259bce99e40fdee59b57ab400b962dd741ae34678239034f9df8f3900dc679ecd9d1f24039fcf365f9fb12edffc899affd5ef97408cda92ddcf6058b0765246f0114daaf27f21d87b6002792bfd718abef6af81d0f4393170b86f6aa6216c33cb9a09ef8f02409320a2b7f7cdad16e7d35859c9f09ddaa51deed07730ac0515305dafe6ced7255982a675ac21f7af4cedbabc195dd44f6fe296381d158baea03e6205dfb4b732edbd4a3ea7d84700bd714a3b56f2ae5e179089d4c7bda52d3773f42ea1738036b60d14ebe287f16796ca21890dbcde334bae7562f59af230bf8495f6943839f8ea5f940692fba2ce96929e160b2005799e8967d6de02438afb168c812eabbb15698ceeacb44a05958acd47f0ee45b5d5ac118d58e53360441b6ed4a7476b9ffb223f223924013fc819353e100b6513c24a104653e0967d360b08d6a5a37430a244268bb8d521ee2b9a79a0abf0a6039d8e67ee4fc1a626bd30c2c47effd00deb2c423902fe02ce6821a2ea25e760955ebeecad35a604ffd3bb6bb1eaff23675e608684197182a1d223e0ca9e67b68ffe8f5e25347612ed736128809bdd76333c37b46e9423f6aa8046185",
"9c13a051ce6c80ce589cf40106f02c871dc934f52d1265e054062fdebd0ce35fe1d5552846337015012460082bec5af437f3298a2601833489e8af5ffc27db5534918d25e92e0e6d67d9c43d0a3c10798207a5d6dc93b5ccecad97c87f173e048e8a364382a6d16a76f96ef7ae2871bcbd8f3c2875d8114174a66f92fb1755c36b8a62825e0ce6adb40fd34b7d0e60f2886e25a7133f5f88cffbee571114f472074e78587397681ae780f2de4269a3a4193f1f743e292407b1904215ba61af7137042e50bc17203ca7a6d25cec20e39872fcbae4eaddc15928e9ac3815b493b7bfdfa3c2ff6dcd9f7d4e8d2453e7580d6d85879ef50ae507394683267c8126cc1af64ace013d93a4552de4be0223ee0f5ba646aa7c4ee95a9fc6192a87a28f3564c71a13e335866fa0a55a34b9bc79d1d2376e808fa0f58f8ff5f33bb4ed8138392df252eda7d2dcee73eb957f592227c8636c61c9d3ab93de72b1d9e0bfab3a5e6381ae73290f8f1ec025d60b692e7608f9ea079141cf5180ef6610103f043f9ff149247ea531c065809eb9f1655ad963f92f5cc2c83ba0da9d79fc2cdec161492257bb24802084c17fad571f23ffaf245ee647423edb08733f2dc75e514eff0274003749cc7d5b0bf2462f5f2fd76970ea2820734f5833392939263decd635d5969dbf4a28e6292d899a3aa36fecd6c2e4220b7d8cbfec8137f6272e12f2b947466c0582f22548720d52b06d6c7f27aacdbb6e5e311ec08bd84812616199f7644694117ed7ae3858db7dd5483694c6ab4ad082547b4db18dc3e467dd9f37e1d1ba2c50d3d7022467c6077b4571c4e56cfca9393c2fe73d84f3d5708c9d91be3a69b43bcd49a2032fd374b7c90d47c8049359aec0d80963964e9ee2e2efc9104c5d22313a0257d076e0f891fd6b343b32c97b702502d9bba814df9ae0ccba8f6bf01f198ad136a37a9eda83383d574468eef9334eda4d0d3258482c6f5e288d3a5aa169ed14a95201e237dcf0d00d0b8e3f9c760f5a0ef1017b844246b5f342f4d36c872c59fc0c430c74b7359ddf5fa3fa3eb1feaab1b5251be0ab4e97e1f4243a3c95a3e5a7a66c73153991d2b70cf866baaa2fa7f9d6d8b4220d121dddb62cd81d78867e6dc5665e34353344f90cf41e2b7fee4031d7220513928adbee54a54e0dcff0221acbff1ae8374f36ada5665859225bb8de3b6bebec84fd6c3ededcb6cbab76cfd43c6a69b1d7947bacec6481143189b7a341ca49fdfb595842ac901ea63ce34748aa09f182579f5bc09c47badeb2d23091e6c6691cad7e7ea36e68251c6918f8dec82f94aa5ef402f483f2d851e8ed356514162b78bb43e378b6a8ea9d6c5c5e6a6ccd572e53969ed53087256232aabd65294268f2471bf40fadfcd8631b1b411b7371a03475a7a18e563c242f2f5068fad7aabd09a195f7fe2981fab663321e2e7235d27300ce4d4706520b827fd37fee1be5993a748adfd1b980f89d0477ac0205c91ee4813de9864ea054f990c7deb2a7eea08472220a79cfa392dd75a8d46a5e60bc3fb60176b2b038c75a8a5caf0e9c02f642174a41eff4ecd35edb1480005049bd9c5af07c93e8ac972529dc94906015b37c12382e731033f992920938f0fb1c481f4532ee1eeef660a1fbb831f8d56eed5960f7d63d9257740bb189d555f9adcee5611f42630f6a125e5899ff3563bb040536fc85c12feca7141f328f3994e78ae341c88aac7c4901985d4565c100ba6b3a114360af218ea9569c34028ddc0a3af9efb2502f42777848891ef5fcc488503a14426231fa465c3dba01860c7476854041deec3b67187a2d053d7f2b60cb7effe35ef6db8160f47470937cd1effd1c762b4498eb60f81d6fad5f859d04814d612b37302c7a220ddb26eac4ebf6b36357b91001691dc9e143dc1f598a8f7a41678e4ee36bd6eb755cfd7003567b10182fd3e9014de85ba77e8d830d57d9056bcbae77ce33bfc1c910aba84a5af6be4ae8af57323a672f5e7880d33b0f120130daa9212042c43c0430911dd2fcf8f05624a896a57ca4ebb096666a6810c0e59a52e2cd5d2140c636bdd5286e3ca0cc6cdc99b2a87226b000d99dd6d6d004dee4863d9a0b363c9bef3e7ca58e0fcaf23dc3d96d03fcf7dc6c5c29cdc6e9544526e8786e56be986793e26182fdbd2b5832af2f1736e524d398442af0669b22a0ee41842557a2e352b5e78963a7ecf9b8f9d29581332762a7c2271e2df9a61357f064921f5446e8385c398aef7bf80fa4b6c308cdc686699e523c2c8ee49b95b3bd05ecb00f2aeb17804575fb4eccc062ee4136dc95e9bee16df5307c5e1e3b154b8db9b3bbbbcee1f9acf539861320f7eaed0898fe1cd314ba5ad78a5bf1489642bc0ab9d001defa0dd420543e9970ce40e6dc20d3d17b8c968f8c412c6effee326d6ee9859a6977498caae66bb95a7e81f5435f6145ced7ec5f996ab8ce5153487f14c725b8a51f4293e2d5c7d2ed4cfd2ab82bb9f92d9c3deaf7ad9d647db84b9dbab0aa96546be71de6fe22c096222a8807bbd26629aac6ec7b60b76079305e69abb4d966d1cbe7b877b929fb82ad832f090ed1d3ebe5eb132def25a8a765f20a15f63155b50cfd5f5c21bbd5b04e51df16e24e96bd6181e6577fec3f805fdfcb066bfec0cdc5db0c3db29b59111bf4fee4d9eb774366458582f527af973e61d19f2db7174ab255dd88ad4e4e1c588b76d1519e1bb4eb50a60b7ad78a956d59152438c5783fe0f0e0449c7551a5aceefbcc0c23eecbbf3ee9f47adfce14b136ce34c08ba9bcf1e994ff8f97a87e181d065770376df510f5d70fb83e44bfc54a306d1192210797e79808e3c4af8c9c3cf8d647028de80498c2661de5d9d31d27a74bd96e7e3632ccce08c9aa9554d4ddf333602d4e8104024d884e0fe3a531750d5664dd122c5f679b14e99c572de60cf71b5327ff16d1a5848e4d8a2ed96734c0ca15450d6fdb2467b8bcfff09ae428cb7719f328312169272d220a0f1ad736ca4e6da1e7fd5143e268553c1898b30f0ee23d502293660a06fca44dbefa005c78243b7ccfc9f84ecfe82ae220679110f753d3541abe0dd9740a825461a60cbc1d95259787541024da968773e62f4b3162e2eabf2e17911d1c6f29380b0562b1dbacdb370e054b04b4e442469f3002f36cabcaa9498b2ae61a115eaed2bdc9a5d6ba122b054eeebceb1096cc5e3ba9b352c86b2e6635c1f2bf2263d50d45cf5847b1a748e087f5d8b917a5b755a8130403c71eabea0acdc1580f3538aa8387414cddb9fa96c6cb91ad34f30869612726b86db7aaabea19bf0105cdb8eeab756521bf410ccd1f5865875a561f777ad792edec830e73aaacc51b1555217da8e681e37c22af4793183f4f2550e3a032455f3d8520d3ca91c43dbe421fb6b648f61cbac3bba321ee7a1e81bf269fd06b7d306687f50f68b5b40b7cbe0ed28985599b25ed84280927bc6d3595c65705b0f8ecd300e4bc55e8d6f67c5982c6f4460e1637cde1ab8df4f39d5bce0a834a26f96195b497527a744bd087aa0bf1dddd92d4939963e2f4fce1086fc85fadca2b493f7728592edff19e95c865e82061cb95bed78b8ee46d4726a2365c97b57ab933ca2553d59514a0c6decc33f773cb07dee239c353c868dbf461c1e8a7ddb7c2a18e98bc1427efa6bca2a1657237c72fab5793caffd9b143d2b1c8e4ca7c448ae86e3c68c2cef4d1b71bcca5402ff295a17edec75a0245a5767bcde5c0eb755185dab543a971314c9666c79e343388d2a753b5a16233ff2af95f52a8df77e39c54ee380eeabbb9f393ffadce49547938a03efa7bcc037e43d91cc438befe6d6dae25133fe0ac592b90e39a58a0d572dce6c23a40a1cbbaa62bb85ed2969a5fa7551df9741d043ef3fef99aff1cc87d4a837185d131671c73c31ab9b18c2c586eee892866ed7da101d55613f11cc153d6e866d59dc0e083f016792b4fd9cf50acfcf7a1c24bbdfcff6442116094a2badd6b0e77008ae39b5fa57ac30f7996a4cefa4b8d036d9c5492c20e731f967a9b80687848abe81a75dd63a7b33732d17370e2fe20fff9660f733591d32cb9d7c114e32f20e4b1a256e9aa7033715c96d70699a545fd72440c1266cf8b021e6b6ffd92d1b76f3d3f38fcdd439bbaa69d95aff860c06d4c0e1d19eafa651f60ce23590176ad791ab8da11581b5a03eec1cf50ca8d2a7e8a40ad2a09f5321a593ba653ef91a136ef2740726adf08eb3b4007b83c23475b136c5c7ee4eafb7e884ce355c410e0b5173ff2b91180b9c19eec34fa7ae9f87be09a1cd07f3fd9c78315b1b20a1476ac8ff7a55d6e0aecd94921714bc2bb66b95915c859e792d2ad16ce165fc334c4826dd8b1ef9dbf111ce3dec9b43e01c30f530558e62f2c24cf01577436a38de4f1e66298369b31d6d2cc61a5e4c0dfa0a1d9c70b14732b0d9b58939c082fb98aaee466ad35156ced6ae13490f5de0882f579c5431cc877a32ae4289db6e8d26999c6da20017427b832e0d52e108b2b8dcc962de6f49f7fa80ef26ecd41078c2ac047fd51efcab2df2f9ba5580bc73ede70480f89922d24c09b33e05671cfa9548580cfe524a5d7dbf305cf8c2c2da5d54ba72074d6d8327e3d1ec413af0bf1c5aa8e139656de3693dbf66ce83843fd1ecb70d03386b9be4f02151725d5397565c57e5eddf6ed437897c6f1835fd71e535659e822354109638cafbcfe580dfdfc088413bcf4114665694875766c7cbda8e286abcbb0e937bf2de560294c25c3d2f5766f781b01e9deb0fb5ac562bfcbf4d26f87636e8cae23f39420378d4a957d60815db8218d9e7be76ba8409900d07bd56be066127727cc820d9c11fc0456090dd81524e8968c871dc189f6970176d6d7351a6de20fe7474eac7b569688d4d676e60c0b4a9c52b6dbdf65deaf3f278c2326567087819dde99075db93b3be7228f129ff9340261961d310be6f01715a6c7c98de24cf330daf95e74cd1ffde514138be01d511974ec24dbb4730c0fcb5f11b9ac2c81504455f4a919c6eaaef17639834be28ba214c23dc4e568ef6264f3ef052b89e7ec205dd2d36c4473f17955427e9a5b8d154af49ecdb6743a7c55581074e192a0df0dc4eeb52bcb3a7c5c72bf227965dd30a2f85d1a1a5ba3361e3fb38f9340f75bdab161c6ad0cd076357883ca14e5d27978876d15056bfa49b14fd7764ab69fb4604c92b5810704cdc452e8ae1cd003d28944b060d65050fdc8655c1231fb5415ba5b887435bf9925e667bd39ce500914e6ba14b0525f17762875b03df2207e75a9ee0f6e7c6d0e69cad6708ad48b86f36f08c0cd98529844bedc9c5556bbc2aca68b7b45cec1cfc380ae6ca1e98e5674ab62bace8c85594b8bb1aa4071d4bcd1c282de92a8f57b983a8ca60f0a9cf7333074f09a02258d298c61bf480ddd10b063aff51e1b563898b7e974bfeb4f2fbec71362a160997218c7c4fd63f27133bf93871362e066802c4100e7230b3770d772e8ba5a9e630f389a28e39055001f9c80a50e753fef94189be3bd126d892e3bd3727753490de4efca8cd26bec4927dcdc053629135d79f846bad3eb333fc8e619c995072bed84c176a7d9947acdb93a91b72a1089237614d0bddbcc8b4dfc3ef36b56e23a977e6419b9d7459d3dddb737d94e34e8dfaaacf389f70df613ae1df19159b8af156ddee59f4151f0e603aec0f1165cdf9457ee4dcbb5b1793e524e33c34d043b66c3459957e4870fcb9e3ebcfa0f3525230d2d220198b64cbb71"})
(fail_nth: 4)
=* repro.c =*
#define _GNU_SOURCE
#include <dirent.h>
#include <endian.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/prctl.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
static void sleep_ms(uint64_t ms) { usleep(ms * 1000); }
static uint64_t current_time_ms(void) {
struct timespec ts;
if (clock_gettime(CLOCK_MONOTONIC, &ts)) exit(1);
return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
}
static bool write_file(const char* file, const char* what, ...) {
char buf[1024];
va_list args;
va_start(args, what);
vsnprintf(buf, sizeof(buf), what, args);
va_end(args);
buf[sizeof(buf) - 1] = 0;
int len = strlen(buf);
int fd = open(file, O_WRONLY | O_CLOEXEC);
if (fd == -1) return false;
if (write(fd, buf, len) != len) {
int err = errno;
close(fd);
errno = err;
return false;
}
close(fd);
return true;
}
static int inject_fault(int nth) {
int fd;
fd = open("/proc/thread-self/fail-nth", O_RDWR);
if (fd == -1) exit(1);
char buf[16];
sprintf(buf, "%d", nth);
if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) exit(1);
return fd;
}
static void kill_and_wait(int pid, int* status) {
kill(-pid, SIGKILL);
kill(pid, SIGKILL);
for (int i = 0; i < 100; i++) {
if (waitpid(-1, status, WNOHANG | __WALL) == pid) return;
usleep(1000);
}
DIR* dir = opendir("/sys/fs/fuse/connections");
if (dir) {
for (;;) {
struct dirent* ent = readdir(dir);
if (!ent) break;
if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
continue;
char abort[300];
snprintf(abort, sizeof(abort), "/sys/fs/fuse/connections/%s/abort",
ent->d_name);
int fd = open(abort, O_WRONLY);
if (fd == -1) {
continue;
}
if (write(fd, abort, 1) < 0) {
}
close(fd);
}
closedir(dir);
} else {
}
while (waitpid(-1, status, __WALL) != pid) {
}
}
static void setup_test() {
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
setpgrp();
write_file("/proc/self/oom_score_adj", "1000");
}
static void setup_fault() {
static struct {
const char* file;
const char* val;
bool fatal;
} files[] = {
{"/sys/kernel/debug/failslab/ignore-gfp-wait", "N", true},
{"/sys/kernel/debug/fail_futex/ignore-private", "N", false},
{"/sys/kernel/debug/fail_page_alloc/ignore-gfp-highmem", "N", false},
{"/sys/kernel/debug/fail_page_alloc/ignore-gfp-wait", "N", false},
{"/sys/kernel/debug/fail_page_alloc/min-order", "0", false},
};
unsigned i;
for (i = 0; i < sizeof(files) / sizeof(files[0]); i++) {
if (!write_file(files[i].file, files[i].val)) {
if (files[i].fatal) exit(1);
}
}
}
static void execute_one(void);
#define WAIT_FLAGS __WALL
static void loop(void) {
int iter = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0) exit(1);
if (pid == 0) {
setup_test();
execute_one();
exit(0);
}
int status = 0;
uint64_t start = current_time_ms();
for (;;) {
if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid) break;
sleep_ms(1);
if (current_time_ms() - start < 5000) continue;
kill_and_wait(pid, &status);
break;
}
}
}
uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff};
void execute_one(void) {
intptr_t res = 0;
memcpy((void*)0x20000140, "/dev/kvm\000", 9);
res = syscall(__NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x20000140ul,
/*flags=*/0ul, /*mode=*/0ul);
if (res != -1) r[0] = res;
res = syscall(__NR_ioctl, /*fd=*/r[0], /*cmd=*/0xae01, /*type=*/0ul);
if (res != -1) r[1] = res;
res = syscall(__NR_ioctl, /*fd=*/r[1], /*cmd=*/0xae41, /*id=*/0ul);
if (res != -1) r[2] = res;
*(uint16_t*)0x20000200 = 0;
*(uint16_t*)0x20000202 = 0;
*(uint32_t*)0x20000204 = 0x80;
*(uint64_t*)0x20000208 = 0x1000000000000;
*(uint64_t*)0x20000210 = 0;
*(uint16_t*)0x20000218 = 0;
memcpy(
(void*)0x20000280,
"\xf9\x0d\x36\x6a\xdb\xd2\xa9\xb5\x52\xed\x45\xbf\x03\x0c\x9f\x0b\xe1\x50"
"\x24\xf9\x05\xfc\x22\x08\x6f\xd1\xbd\x73\x3a\x85\xe3\xa6\x8c\x1e\xe7\x61"
"\x92\x08\x43\x0f\xf8\x9e\x6a\xb2\x22\xb6\x5f\xc6\x9b\x71\x3f\xb3\x44\xd9"
"\x63\x5a\x76\x13\x95\x33\xa9\x65\xa7\xbd\xd4\x47\x7d\x8d\x99\x5e\x8a\x64"
"\xbd\x3b\x71\x9f\x72\x23\x4a\x05\x33\x03\xf0\x11\x7f\xb9\xd5\x98\x47\x50"
"\x11\x8c\x10\x9c\xb6\x44\xda\x61\xac\xf8\xdc\x8e\x27\xe4\xc2\xc8\x72\x7c"
"\xcd\xd6\x65\x8b\xd9\x17\x78\xcb\x54\x40\xfe\x1a\x36\x59\x88\x86\xdd\x12"
"\xe8\x4f\x3b\xab\x5f\xa8\x48\x18\x2e\xf3\x05\xf2\xee\xb7\x25\xde\xa9\xa8"
"\x79\xa0\xab\xc4\xec\x87\x00\xa5\x03\x93\x8a\x26\x2a\x06\x75\x7b\x18\x83"
"\x96\xe6\x11\xdd\xa8\x3a\xcf\xa6\xc8\xc6\x9a\x35\x6f\xc2\xf7\xf1\xf2\x1d"
"\x53\x1f\x87\x31\x1b\xcb\x5f\x05\x46\xa7\xde\xc4\xc6\x17\x8e\x4c\x70\xcf"
"\x19\xa2\xc7\xa5\x68\x9f\xdb\x85\x75\x00\x7e\x38\xd6\xa5\x8c\xe8\x59\x56"
"\x37\x21\x79\xa1\x2a\x33\x76\x81\x20\x27\x63\xfd\xdc\x22\xb7\x84\x6d\x14"
"\x57\x43\x6c\xff\xe7\x43\x2a\x5b\x01\x7c\x3d\x63\xd1\xb6\xa0\xfc\xe4\x25"
"\xee\x33\x59\xb9\x26\x44\xc9\xdf\xea\x80\xe5\xcf\xc1\x79\xfb\x34\xe2\x62"
"\x3a\xc6\x91\xf9\xd2\x7a\x14\xed\x4e\xed\xbd\x80\x71\x42\xc6\x15\x3f\x93"
"\x61\x1d\x66\xf9\x0b\xfc\xd7\xe5\xd4\x3b\x10\x25\x39\xcb\x7d\x5e\xba\x62"
"\x8e\x5e\x40\xe3\x84\xd7\x31\xc2\x23\x24\xeb\xd1\x75\x1e\x71\x8b\x44\x2d"
"\x3a\x79\xe2\x91\x40\x63\x91\x9a\xee\xef\x3e\x1b\x6b\x15\xe0\xf8\x3b\x9b"
"\x73\x46\x1e\xfe\x9b\xea\x9e\xf2\x61\x0c\xe3\xe4\xad\x83\x3a\x39\xdf\x41"
"\xf6\x62\xdb\xa0\x3f\xb3\xf7\x6c\x53\x34\x96\xed\xac\x28\xcf\x62\x74\x5d"
"\x88\x78\x7b\x12\xe0\x4b\x2d\xbb\x02\xcd\x6f\xb6\xb7\xd1\xe7\x95\x68\x6e"
"\xd6\xbc\x9c\x4d\xd7\x71\x65\x72\xe3\xec\x52\x1e\xa3\xd9\x04\xb0\x33\x87"
"\xdd\x04\x00\x5f\xf2\x6b\x50\x2e\x2c\x98\x3d\x4f\x2f\xbc\x89\x06\x12\x1e"
"\x76\x6d\xf2\x4b\x36\x42\x21\x0d\xe4\x7b\x72\x24\x2a\xdc\x43\x5c\xd5\x89"
"\x94\xe7\xb5\xef\xfd\x57\xa7\x15\xa2\xf7\x77\xaf\x77\xd4\x8b\x20\xa5\xb0"
"\x34\x0a\x05\x99\x6c\x54\xf5\xbb\xf3\x69\x11\xf9\x95\xca\x43\xc8\xa3\x4e"
"\x7a\x1e\x3d\x53\x10\xc6\xd3\xff\xca\x65\x83\xd9\xc7\x0d\xf1\x81\x28\x7c"
"\xee\x3c\x28\x1a\xa5\x2d\x39\x00\x4e\x47\x65\x19\x0d\xe5\xd6\xb1\x62\xd6"
"\xac\xfc\x71\x83\x39\x59\x62\xd0\xcb\xae\x56\xcd\x5b\xaf\xd4\x19\x81\x87"
"\x02\xd6\xa2\x70\xf2\xdd\xcb\xc3\x8e\x37\x17\x21\xa3\x17\x1f\xf8\x6d\xdb"
"\xd7\x18\x17\x37\xa8\x28\x57\x80\x5e\xb8\xfb\x9b\xd0\xdc\x58\x25\x10\xde"
"\xca\x4e\x3b\xa8\x1a\xf6\x46\x97\x57\xb9\x5d\xa1\xb8\xfd\xe0\x36\xf3\x36"
"\x34\xf9\xb5\x4c\x84\xc6\x45\x30\x43\x6a\x1c\xe9\xc4\x38\x29\xa1\x80\xbb"
"\xcb\xe4\x51\xc6\x33\x64\xbe\x9f\xf7\x3d\xfd\x42\x5d\x07\xde\xb2\x7f\x5c"
"\x42\x4f\x13\xb3\xd5\x16\x26\x23\x59\x83\x8b\x3a\x95\x29\xf5\xf0\x38\xc7"
"\x01\xdf\x10\xab\x2e\xdb\xd8\x7b\xbc\x6d\x6f\x46\xa6\xd3\x10\x2e\xe4\x7d"
"\xc8\x11\xd3\x7e\x7a\x71\x94\x55\xff\xfe\xd1\x6d\x50\x10\x59\x14\x78\x77"
"\xd4\x7e\x8d\x11\x07\xf1\x70\x71\x24\x26\xc6\x73\xe8\x4f\xdc\x3f\x59\x3f"
"\x4b\xed\x7f\x22\x65\xce\xda\x5d\x26\xe4\xd6\x57\xf8\x40\xfa\x90\x68\x1d"
"\x74\x4e\x54\xe9\x27\xb4\x09\x34\xb1\x30\x9b\x80\x09\x60\xff\xb3\x7f\xeb"
"\xc9\xed\xc9\x63\xfe\x0b\x8c\x5a\x0b\x1a\x99\x9c\x11\x8b\x9a\x40\x8f\x2f"
"\x50\xa4\xf4\x7d\xb2\xc7\x79\x3a\xcd\x49\x7b\xe2\xe8\x1a\xbf\xd8\xea\x9a"
"\xbc\xf8\x23\xb6\x03\xc2\x4f\x15\xef\x31\xf1\x40\x64\xb8\x39\x94\x17\xf2"
"\x7d\xc1\xdc\xf3\xa4\x50\x48\x00\x71\xf0\x1c\x3b\x7d\x70\x6f\x23\x55\x3d"
"\xb8\x5d\x0c\x77\xd6\x21\xa9\xc8\x83\x58\xac\xe8\x8e\x4e\x43\x1c\xb9\x49"
"\x2b\xe3\x5c\xf7\x40\x7a\x35\x84\x4a\x0f\x05\xcb\xcd\x52\xdf\x3c\xdc\x40"
"\x68\x3b\x39\xcc\xca\x78\x0c\xec\xad\xe7\x93\x3b\xdf\x4c\xd5\x11\xb7\x06"
"\x7b\xbd\x16\x1f\x7a\x9a\x1b\x46\x3f\x41\x64\x26\xcc\x57\xaf\x56\x31\xfb"
"\x1c\x94\xa9\x19\xd2\x0e\x46\xa5\xa6\x84\xb4\x37\xd1\x5e\x5f\xc3\x01\xea"
"\xae\x56\x42\x16\x8a\x23\xd9\x0f\xe1\xa3\x81\x14\xe6\x19\x99\xd6\x0d\x7a"
"\xc7\x6a\x8a\x24\x04\xfb\x7d\xa4\xfa\x4a\x07\x01\x9b\xa9\xbf\x89\x64\x51"
"\x91\x75\x17\xb7\x00\x11\x99\xe5\x86\x74\x4d\x3a\x9a\x44\xb4\x6e\x0f\xf4"
"\xff\x17\x69\x35\x8a\x70\xf6\xb4\x74\xaa\xab\x04\x67\xbd\xd5\xc4\xef\x1b"
"\xf2\x50\xab\x9f\x21\x16\x10\x12\xf6\xaa\xc0\x9b\x42\x5f\xcf\x73\x52\xda"
"\xdb\x96\xd9\x76\x1c\xc4\xa0\xdf\x85\xf1\xc9\x19\x9e\x72\x3c\xa6\xad\xd6"
"\x25\xe5\x5e\xad\xda\x1c\x81\xa1\xe4\x90\x0b\x3f\xa1\x77\xa1\x12\xea\x8c"
"\xab\xdf\x5d\x7c\x3c\x31\xcd\xe2\x84\x02\x41\xe0\x67\xf1\x50\xdb\x66\xf6"
"\x1a\x0c\xa8\xa1\x74\x96\xda\x2d\x9f\x93\x71\xc5\xba\x86\x28\x1a\xa8\x36"
"\xec\xbf\x07\x20\xb8\x53\xa2\x1b\x25\xd4\x21\x16\xa1\x51\x46\x83\x0a\xdc"
"\x77\x4a\xf8\xac\xc6\x1e\x71\x6b\xec\xec\x91\x26\xa7\x26\x07\xcb\xa1\x53"
"\xe3\x8d\x49\xf6\x49\xe0\xd1\x07\x88\x27\x06\x73\x8c\xf3\x07\xf5\x6d\x85"
"\x69\x15\x40\xb6\x82\x9f\xe6\xd7\x5e\xe3\x9e\x10\xbd\x40\x38\x51\xcf\x0e"
"\x6b\x19\xd6\x46\x6b\x6c\xec\xd5\x4a\xf0\x5f\xc1\xc8\x67\xfc\x6f\xc8\xa2"
"\x33\xfc\xbf\xab\xcc\xc0\x3b\x75\x26\x66\x9d\x14\x5f\x8b\x4f\xe8\x96\x07"
"\xec\x58\x6a\x0d\x0e\x3e\xb2\x5b\x00\x31\x34\xf2\x81\x4c\x62\x21\xc2\xb3"
"\xcd\x53\x12\x1f\x24\xe7\xc5\xbc\xf9\x5d\xda\xed\x80\x3b\xfb\x50\xf6\x44"
"\x4f\xaa\x82\xd5\xdf\x34\xa0\xc5\x4a\xc2\x87\x07\x30\x18\x1f\xeb\x0b\xe7"
"\xd2\xcd\x94\xf7\x55\x67\x77\xe8\x78\xd4\x67\xf3\x07\xed\x54\x7b\x70\xab"
"\xda\x15\x3e\x4c\xd3\x37\xd9\xb7\x3f\x06\x03\x2e\x71\xc1\x7a\x52\x0a\xfe"
"\x4f\x2b\x56\x98\x03\x48\xbc\xc3\x97\xb1\x0d\x6a\x6f\x92\x2a\x72\xf0\xb6"
"\x17\x42\x2b\x24\xe3\x2f\x1a\x2a\x2c\xdb\xb5\x5d\x08\xdf\xbd\x2e\x89\xa8"
"\x03\x5a\xfe\xd0\x05\x24\xf0\x25\x80\xa9\x21\xdd\x42\x8c\xcd\xe7\x14\xb6"
"\xa9\x41\x53\x40\xf1\x7e\xf8\x6c\xd6\xd5\xbd\x08\xb1\xe5\x14\x0e\x70\x50"
"\xcf\xb2\x6a\x9d\xef\xa3\xa0\xc2\xb4\xa1\xcf\xa5\xbf\xea\x04\x6b\xb4\x44"
"\x8e\x96\x37\x83\x64\x92\x49\xd8\xa9\x0c\xab\x7b\x1b\xe2\xcb\x9b\xa4\xba"
"\x93\x1b\x8e\xb1\xd6\xc4\xd8\x32\xfa\x91\xe0\x73\xc2\xc3\x6b\xaf\xaa\x0a"
"\xb7\xbc\x9a\x59\x46\x32\xf7\xe7\x57\x1f\x6c\x75\xd5\x1b\xd2\x9a\x33\xdc"
"\xa2\x17\x0e\xdd\x0a\xf3\x82\xe8\xdd\x5c\xf9\x9f\x2d\x18\x1e\xd5\xde\xd2"
"\x90\x71\x6b\xb6\x54\x6b\x93\x5a\x0f\x7e\x92\xe0\xb0\xc9\xf8\xbc\x83\x90"
"\x63\xcc\x8c\x36\x67\x70\xd8\xdb\x90\x92\x97\xdc\x72\x9d\x2d\xbb\x18\x2c"
"\x9a\xcf\xa0\x7a\x3a\xa6\x5a\x03\x34\x9b\xcd\xb0\x63\x55\xaa\x96\x5b\x75"
"\xea\x11\x8a\x8f\xeb\xe7\xfb\xab\x8c\x50\x1b\x7b\xbe\xa3\x9c\xd9\x32\xf1"
"\xfa\x51\x8d\x79\x51\x48\x2e\x26\xc6\xd6\xac\x79\xbf\x15\x4a\x4a\x03\xde"
"\x9e\x49\xbb\xbc\xb9\xc0\x60\xba\x50\x73\x8e\x4c\x80\xca\x99\xfb\xe6\x7f"
"\x4e\x87\xa2\x49\x75\x5e\x99\x9e\xf2\x7c\x4c\xfc\x03\x9f\xdf\x87\x49\x2b"
"\x84\x89\x9b\x9e\xb7\x79\x5f\x7e\x74\xcf\x99\x3b\xd0\xb5\x75\x72\x14\x48"
"\x9e\x7f\x5d\x77\x05\xa9\xd5\x6d\xe1\xc6\xea\x70\xc5\x14\x2e\xee\x2b\xef"
"\xfd\x24\xc8\xa0\xeb\x13\xdc\x33\xde\xc8\xdf\x29\xb0\x98\x9e\x8a\x5c\x30"
"\xd3\x10\x2f\x55\xa3\x34\xb7\x8e\x15\xdd\x69\x61\x78\xf4\x8a\x1e\x97\xde"
"\x87\x36\xe5\x73\x27\x42\xc2\x06\x0a\xea\xeb\x94\x99\x57\x5b\x79\x5f\x08"
"\xcc\x72\x9c\x18\x1e\xcf\x91\x3e\xb5\x28\x0d\x60\x87\xfa\x7f\x6a\x65\xdf"
"\x45\x85\x37\x57\x50\x0c\x1f\x01\xb9\x1f\x02\x00\x55\x59\x35\xdd\x3b\x8b"
"\xed\xd5\xf8\xc8\xeb\x2f\xf3\xac\x44\xc9\x6b\xe7\x38\x71\xea\x26\xc5\xe5"
"\xf3\x50\x3e\x7c\x5d\xfd\xdd\xfb\x92\x9b\x26\xb1\xd2\x76\x6d\xf9\xbf\x41"
"\x9c\x55\x97\xec\xf4\x93\xa9\xf3\x63\xe0\xd1\xfd\x17\x01\xf2\xb2\x53\xaf"
"\x5a\xfe\x04\xf8\xb2\x3f\x8b\xf8\xe6\x93\x55\x03\xa9\x39\xca\x3a\x9c\x15"
"\x03\x47\x4b\x35\x01\xea\x50\xb4\x4e\xf7\x1a\x55\xf3\x4f\x78\x7d\x4f\x68"
"\x9a\x6d\x67\x21\xb8\x2a\x8e\xb0\xd4\x7d\x0f\x5d\xde\x98\xd1\x2a\x22\x59"
"\x88\xb6\x39\x9f\x7b\xef\xae\x3b\x0c\xc2\xdb\x13\x27\x5b\xa0\x92\xe9\xbd"
"\xe3\xab\x3b\x47\xe4\x7d\x36\xf6\x9a\x94\xee\xe8\xc0\x9c\xa7\x85\x74\xbe"
"\xbc\xea\xf0\xce\x4c\x23\xa5\xe7\x91\x7e\x69\x7f\xb7\x6b\x08\x64\xac\xca"
"\xda\x8b\x30\x16\x54\xc5\x6b\x0d\x96\x29\xe8\x51\x71\xc4\x86\x04\x60\x02"
"\x25\x05\xa7\x3d\x2a\xcb\xcf\x5c\xd5\x56\x86\xe9\xc6\x2e\x55\x07\x30\xa1"
"\xd2\x19\xf4\x6a\xc2\x3d\xbf\x13\xc6\xe1\x01\x05\x93\x80\xa4\xa3\x19\x6e"
"\x4d\xb2\x09\xb4\x12\x9b\xd1\x30\x22\x7f\x34\x93\x93\xef\xef\x97\x28\x60"
"\x9d\x4f\x2d\x4d\x1c\xbd\xf5\x60\x5c\x5f\x25\xc9\xde\xb6\xa1\xdb\x3b\x71"
"\xe9\x5e\x4b\x1c\x5a\xf5\x5f\x01\xf2\x33\x0f\x2a\x6f\xd2\xb2\xc0\xf7\x25"
"\x80\xdc\x4d\xa2\x76\xc8\x6d\xab\x19\xf8\x17\xf9\x0d\xfa\x7e\x6f\xf4\x4f"
"\xb9\x0e\xbe\x9d\x5c\xea\xf8\x79\xe0\xa8\x97\x37\x55\xba\xcd\x60\x27\x44"
"\xbd\x98\x73\x97\xe6\x77\x5f\xb6\x57\x15\xa3\x0d\xea\x88\xba\xb2\x5b\x38"
"\xe5\x4a\x97\xb2\x1d\x71\x6e\x88\x5a\x5d\x92\x19\x70\xf8\x1a\xb8\x16\xd4"
"\x2d\x1f\xfe\xe0\xa4\x45\xd5\x2f\x03\x6f\x89\x2d\xca\xab\xc6\x5f\x05\xcd"
"\xe9\xe3\xc3\xaa\xeb\xf9\x01\x68\xf3\x86\x6d\x58\x0d\x72\x2a\x6b\xce\x39"
"\x9a\xfb\x34\x19\x48\xd1\x7b\xed\x8c\xdb\xf7\x25\xef\x75\xe2\xc7\xd6\xda"
"\x38\x44\xc1\x18\x47\x09\xf7\x48\xd2\xe1\x8c\xf5\x0a\xd9\xf9\x4b\x2b\x93"
"\x6d\x6f\x6a\x48\x3b\x0c\x49\x0a\xc6\x41\xc1\xc4\x70\x64\xd1\x44\xe5\x59"
"\xad\xda\xf1\xa1\x62\xdc\x90\x13\xda\xb6\x58\x9a\x08\x87\x9b\x2c\x81\x40"
"\xc4\xc1\xbc\x75\x78\x35\x89\xab\x96\x68\x58\xbb\xd5\xd4\x70\x69\x78\xca"
"\x65\xca\x40\xc4\x95\x41\x67\xc5\xdc\x9f\x9a\x0f\x0d\x85\x8f\x2f\x1e\x5b"
"\x1d\x79\xec\xc2\x81\xa2\xef\xe2\x51\x46\xa2\x36\xc7\xd3\x12\xf1\x66\xf4"
"\x40\xfe\xce\x7e\x16\x18\xbe\xe1\xd2\x24\x4e\x88\x4e\x23\xee\xa7\x56\x8c"
"\xee\x17\xa4\xc7\x26\x2b\x45\x0b\x8e\xfd\x8b\x4e\x64\xe2\x3b\x9f\x27\x56"
"\xf4\xae\xb4\x95\xb9\xb6\x04\xef\xbd\xf7\xc9\xb1\xd7\x9f\x30\xf2\x6e\xa5"
"\xb2\xb6\x55\xc3\xf9\xa9\x31\xf5\x41\x53\xf2\x3f\xb0\x64\xa9\xf1\xd2\xeb"
"\x30\xb9\x83\x73\xc1\x80\xf7\x6e\x72\xdf\x20\xbc\xf5\xe9\x93\x22\xe0\x0b"
"\xbe\x7b\x3a\x9e\x6a\x9a\xb2\x73\xcb\xa3\x65\x96\xe8\x80\xee\x69\xc0\x06"
"\xe8\x09\x81\x72\xe8\x6a\xc8\xdc\xb6\xbf\x56\xc8\x55\x7d\x7d\x08\x28\x24"
"\x5c\xe2\xc9\x7b\x7e\xea\x5b\xbe\x6f\x6e\x61\xb2\xc7\x0a\xad\xa5\x5e\x1e"
"\xff\x78\x2d\xfd\xdb\x06\x17\x60\xd2\x6d\xa0\xe0\x8b\x52\x23\xf4\x6e\x95"
"\x06\x61\xd3\x1e\xd8\x16\x1b\xf0\x42\xc2\x83\x6f\xf6\x90\x3d\x56\x0e\xfb"
"\x36\x7c\x47\xbc\x67\x85\x9e\x2e\x5b\xc1\x88\x16\xaa\x5c\x31\xd7\x85\x8a"
"\x6e\x73\x0a\x82\x58\x00\xff\x41\x74\x62\x3d\xfd\x0f\xe0\x50\x42\x27\x17"
"\x1c\x2f\x7b\xd1\x84\x97\x88\x9f\x90\x2a\x3d\x80\x25\x3c\x67\x11\x1b\x55"
"\xe6\xae\xc1\xff\x5f\x2f\xac\x56\xdd\x0e\x4b\x51\x5e\x56\xfa\xfe\x53\xdc"
"\x52\xc3\x43\xae\xf8\x56\x42\x38\x0e\xf8\x47\xfd\x11\x7d\xc2\xf8\xea\x66"
"\xb6\xd2\x02\xd6\x28\xb7\xd0\x88\xdd\x45\xe5\x32\x26\x74\x8d\xf6\x60\x19"
"\x73\x25\xe9\xc4\x6e\x2b\xb0\xed\x5a\x9b\x12\xbe\x9f\x5e\x68\x59\x4d\xfd"
"\xdd\xe7\x69\xba\x90\xb5\x9b\x4d\x37\xa8\x93\xd7\x66\x17\x63\xe0\x53\x42"
"\x8e\x3f\xd5\xd4\x36\x8a\x56\x8c\x98\x20\x8c\x6a\xb4\x90\x8f\xde\xb1\xc5"
"\xaf\xc8\x4c\x8d\x18\xa8\x3d\x9f\x37\x99\x49\xae\x50\x09\x1a\x41\x05\xed"
"\x18\x3f\x0c\xb1\xae\x49\xc8\xda\x6c\x64\x33\xc2\xc9\xe5\x73\x36\x22\x65"
"\x31\x2d\xb1\x02\x02\x98\x6b\xf5\x64\x46\x4c\xaa\x0e\x0f\xd7\x13\x1b\xda"
"\xf2\x20\x9e\x3c\x8b\x60\xb2\xd4\xa5\x28\x1e\x97\xb3\x1f\x4b\x3b\xa1\x94"
"\x1d\xbe\xd4\x56\x8e\xd1\x0b\xc6\x8e\xd1\x13\x2e\xa6\x85\x2b\x23\x04\x41"
"\x65\xdc\x1d\x61\xbe\x65\x37\x48\x0f\x36\xa9\x58\x96\xb1\x8e\xf5\x71\xe1"
"\x9b\xe3\x2b\x39\xec\xd1\xea\x31\x30\x64\x8d\x61\x8f\x71\xf9\x6d\x06\x1d"
"\xd0\x87\xf2\x62\xf9\x77\xda\x66\x73\x29\xac\x43\x9b\xd7\xf8\x44\xf9\x99"
"\x13\xa2\x04\xa9\x0b\x72\xf6\x73\x0d\x6b\x67\x67\x04\x76\xc5\xe6\x54\xae"
"\x1a\x13\x9e\xb9\x8f\x4e\xf5\x69\x08\xa6\xa2\x09\xa1\xb9\xc0\xc8\x9f\x35"
"\x0a\x9c\xe7\x19\x05\x05\x72\x68\xba\x14\x7c\xf3\x52\xf4\xd8\x02\x1e\x25"
"\xd4\x7a\x7a\x91\x88\x5a\x71\x30\x3e\x6c\xb5\x5e\x85\xaa\xf4\xe2\xe9\x06"
"\x2b\xea\xc4\x0a\x8d\x42\x7f\x44\xff\x21\x56\xd2\x65\x78\x89\xdf\x23\xfe"
"\x9a\xb4\xc2\xba\x87\x03\xca\x9d\x3a\x2b\x7c\x55\x04\xb0\x50\x52\xda\xe4"
"\x83\x43\x24\xdf\x86\x78\x0b\xfe\x5d\x69\x7e\xff\x15\xcd\x68\x82\x0e\xa5"
"\xf6\x70\xa7\x81\xec\x9b\x15\x67\xcb\x2b\x47\x8d\x25\x38\xc6\xf5\xd0\x41"
"\x6c\x4b\xf8\xa6\x3c\x98\x00\x13\x2c\x03\x79\x94\xbb\x28\x71\x7d\x7b\x2c"
"\xec\x27\x54\xef\x25\x7b\xb3\xd9\x38\x9b\xe8\xd2\xec\xfe\x61\x64\xd2\xd0"
"\xbc\x4c\xd0\x34\x73\x91\x7c\x3c\xc4\x5c\xc5\x77\x14\x4f\x50\x36\x92\x0c"
"\xbb\x99\x02\x90\x9d\xf4\x13\x83\xba\x9e\xe9\x6e\xdd\xd1\xa9\xe0\x24\x95"
"\xbd\xb7\xb4\x30\x80\x83\xf8\xa6\xe5\x26\xb2\xcf\x3c\x91\x62\x18\x23\x77"
"\x5f\x39\xbe\x51\xa3\x81\x02\x41\x4e\x68\x3a\x58\x89\xea\x44\x58\xec\x78"
"\x58\x62\xdb\x40\xf6\x54\x15\xc1\x82\x87\x0c\xd2\x47\xab\xbc\xc9\xd4\xd4"
"\x4a\x11\xfa\xe6\x10\xa5\x89\x96\xc5\x19\x67\x7c\x00\x6e\xc8\xd7\x95\x9d"
"\xfd\x70\x9f\x5d\xd5\x22\x28\x86\xde\x32\xc0\x17\xa2\xd8\x86\xe9\x75\x27"
"\x4e\x3d\x64\x66\x5e\x6f\x2f\xaf\x61\xa4\x40\x40\x9e\xea\x67\x5c\x76\x31"
"\x03\x1d\x66\x49\xdc\xb7\x8e\x97\x3b\xc2\x72\x65\x83\xd1\x8d\x00\x7b\x78"
"\x7a\x72\xa6\xbc\x14\x02\x8a\xb3\x7f\xe7\x56\x1b\x77\x3d\x81\x27\x78\xe8"
"\x0e\xcf\x54\x77\xc3\x0e\x0b\xe5\x5a\xc5\x9b\x8d\x07\xcf\x19\x47\x5e\x49"
"\xa8\x1c\x1c\x92\x3b\x6b\xdd\x97\xf5\xce\xf6\x48\xd0\x34\xd1\x18\xa4\x91"
"\x3a\xdf\x2d\xd3\xb5\x8d\xb4\x13\x0f\xa3\x5d\x2b\x44\xbb\xb3\x0f\xfd\x34"
"\x20\x81\x2e\xc7\xe6\x0b\x65\xdb\xf7\x68\x6d\x7a\x01\x57\x7b\x24\xe2\x01"
"\x32\x17\x7a\x24\xcf\xe7\xc6\x8b\x93\x16\xba\x8b\xdd\x77\x12\xc1\xd3\x98"
"\xee\x28\x5d\x54\x6d\x5d\x9f\x27\x21\x0b\x1b\x75\x21\x75\x40\x60\xdd\x69"
"\xdf\xd0\xac\xf3\x32\x4c\x3e\xee\xfe\x2d\xc4\xc0\x8c\x01\xae\xe9\x83\x58"
"\x2a\xed\x6f\x29\x1c\xe8\xf3\x49\x69\x6b\xdc\x08\x8c\xe3\xfd\xee\x94\x64"
"\xb0\x8e\x6d\xc3\x80\x0a\xfc\xb2\x90\xd9\x54\x6a\x42\x2d\x79\x27\x27\xcf"
"\xb8\x9f\x4c\xfd\x8b\xfa\xd8\xa9\x74\x60\xfc\x23\x1b\x29\x90\x1c\x02\x4b"
"\x9b\xe0\x9b\xd9\xe3\x0d\x14\xb7\x2b\xb4\xba\xca\x5b\xcd\x59\x1d\xcf\x86"
"\x3d\xcd\xe6\x0c\xa6\x48\xb5\x6c\xd3\xb7\x7c\x4f\x14\x5c\xfb\xcd\x11\x72"
"\xba\x5f\x59\x7f\xa2\xf2\xc7\xee\xe0\x29\x1c\x68\xc1\x11\xc7\x91\x4d\x60"
"\xd4\x51\x98\x77\x47\x13\x8d\x78\x8e\x87\xdb\x35\x5b\x86\x08\x88\x7b\x99"
"\x73\x71\xeb\x88\xdd\x0e\x23\x19\x78\x4f\x99\xd3\x95\x71\x2e\x15\xf6\x11"
"\x75\x6d\x52\x17\x76\xf7\x81\x64\xc7\xcb\xae\xfa\xfa\xa6\x2a\xee\xe9\x1e"
"\x4d\xd1\xb1\x63\x30\x99\x85\x8d\x60\xb6\x9a\x14\xf3\xcb\xc3\x4a\xc5\x5a"
"\x73\x15\xc1\x78\x4b\xe2\x32\x3a\x37\xa8\xf5\xf8\xaa\x88\x15\x09\xc5\x41"
"\x51\x7c\x79\x1f\xa2\x85\x99\x4c\x83\xee\xbb\x1a\x66\x07\x2e\xc4\x11\x03"
"\x28\xad\x9f\x6c\x42\xf7\x79\xd3\x97\x17\xde\x6d\xfb\x3e\xce\x02\x56\x98"
"\x3a\xde\x96\x4c\x92\xdb\x53\x83\x2a\x08\xaa\x30\xb1\x12\xe6\xc9\xf6\x2d"
"\xfc\xf3\xd0\xab\xfc\xf3\x80\x58\x85\x04\xe3\xce\x6f\x31\x0c\x84\xa8\xea"
"\x82\x83\x6c\x57\xf1\xe9\xbd\xd7\x10\x64\xc7\xe4\x98\xc9\x2f\xe0\xd3\x23"
"\x69\x47\x3e\xe9\x2a\x56\x96\x6c\x09\x5e\x16\x62\xaa\x10\xb6\x12\x62\xec"
"\xb9\xa4\x0c\x7c\xfb\x12\x75\x9f\x4a\x28\xe0\x07\x6c\xb8\xbc\x1e\xba\x2e"
"\x11\x15\xce\x56\x7e\x84\x47\xc0\xdf\xbe\x98\x4f\x4a\x77\x81\x0f\xfd\xda"
"\xa0\xc7\x2d\x23\xf3\x98\xdc\xe3\xda\x18\x84\xf6\x2e\xdb\x89\xd2\xae\x9e"
"\x4e\x14\xb3\x09\xc8\x93\xd8\x2c\xdd\x0b\x46\xcd\xa1\x75\xca\x9d\x52\xbd"
"\xe5\x62\x22\x56\xd8\xa4\x4a\x8f\xbf\x4a\x42\x63\x5b\x25\x46\x56\x6c\x19"
"\x2d\x05\x30\x39\x8b\x53\x04\xdd\x7c\xec\xf1\x0d\xed\x97\x44\x34\xce\x04"
"\x37\x1f\x98\x53\xa0\x12\x2f\x18\xcf\x07\x4e\x3d\xf3\xfc\x38\x5f\x0c\x89"
"\x5e\x19\xcd\xae\x76\xf2\xa3\xcf\x84\xed\xea\xd7\xe7\x9e\x32\x59\x15\x9f"
"\x01\x53\xf1\xae\xd8\x34\xde\xce\xb4\xc0\x3b\xb2\x20\x6f\x6b\x51\x45\x2a"
"\x0b\x4f\xf4\xd1\x63\xcf\x3b\x19\xc3\x1b\x73\xfb\xd6\xc9\xea\xbb\x7f\xf2"
"\xd2\x1c\xe8\x83\x72\x3a\xf9\x4a\xc6\x93\x1b\xf6\x60\x87\x8a\x18\xd0\x0a"
"\x6e\x34\x30\x2f\xac\x8d\x95\x62\x0f\x25\x9b\xce\x99\xe4\x0f\xde\xe5\x9b"
"\x57\xab\x40\x0b\x96\x2d\xd7\x41\xae\x34\x67\x82\x39\x03\x4f\x9d\xf8\xf3"
"\x90\x0d\xc6\x79\xec\xd9\xd1\xf2\x40\x39\xfc\xf3\x65\xf9\xfb\x12\xed\xff"
"\xc8\x99\xaf\xfd\x5e\xf9\x74\x08\xcd\xa9\x2d\xdc\xf6\x05\x8b\x07\x65\x24"
"\x6f\x01\x14\xda\xaf\x27\xf2\x1d\x87\xb6\x00\x27\x92\xbf\xd7\x18\xab\xef"
"\x6a\xf8\x1d\x0f\x43\x93\x17\x0b\x86\xf6\xaa\x62\x16\xc3\x3c\xb9\xa0\x9e"
"\xf8\xf0\x24\x09\x32\x0a\x2b\x7f\x7c\xda\xd1\x6e\x7d\x35\x85\x9c\x9f\x09"
"\xdd\xaa\x51\xde\xed\x07\x73\x0a\xc0\x51\x53\x05\xda\xfe\x6c\xed\x72\x55"
"\x98\x2a\x67\x5a\xc2\x1f\x7a\xf4\xce\xdb\xab\xc1\x95\xdd\x44\xf6\xfe\x29"
"\x63\x81\xd1\x58\xba\xea\x03\xe6\x20\x5d\xfb\x4b\x73\x2e\xdb\xd4\xa3\xea"
"\x7d\x84\x70\x0b\xd7\x14\xa3\xb5\x6f\x2a\xe5\xe1\x79\x08\x9d\x4c\x7b\xda"
"\x52\xd3\x77\x3f\x42\xea\x17\x38\x03\x6b\x60\xd1\x4e\xbe\x28\x7f\x16\x79"
"\x6c\xa2\x18\x90\xdb\xcd\xe3\x34\xba\xe7\x56\x2f\x59\xaf\x23\x0b\xf8\x49"
"\x5f\x69\x43\x83\x9f\x8e\xa5\xf9\x40\x69\x2f\xba\x2c\xe9\x69\x29\xe1\x60"
"\xb2\x00\x57\x99\xe8\x96\x7d\x6d\xe0\x24\x38\xaf\xb1\x68\xc8\x12\xea\xbb"
"\xb1\x56\x98\xce\xea\xcb\x44\xa0\x59\x58\xac\xd4\x7f\x0e\xe4\x5b\x5d\x5a"
"\xc1\x18\xd5\x8e\x53\x36\x04\x41\xb6\xed\x4a\x74\x76\xb9\xff\xb2\x23\xf2"
"\x23\x92\x40\x13\xfc\x81\x93\x53\xe1\x00\xb6\x51\x3c\x24\xa1\x04\x65\x3e"
"\x09\x67\xd3\x60\xb0\x8d\x6a\x5a\x37\x43\x0a\x24\x42\x68\xbb\x8d\x52\x1e"
"\xe2\xb9\xa7\x9a\x0a\xbf\x0a\x60\x39\xd8\xe6\x7e\xe4\xfc\x1a\x62\x6b\xd3"
"\x0c\x2c\x47\xef\xfd\x00\xde\xb2\xc4\x23\x90\x2f\xe0\x2c\xe6\x82\x1a\x2e"
"\xa2\x5e\x76\x09\x55\xeb\xee\xca\xd3\x5a\x60\x4f\xfd\x3b\xb6\xbb\x1e\xaf"
"\xf2\x36\x75\xe6\x08\x68\x41\x97\x18\x2a\x1d\x22\x3e\x0c\xa9\xe6\x7b\x68"
"\xff\xe8\xf5\xe2\x53\x47\x61\x2e\xd7\x36\x12\x88\x09\xbd\xd7\x63\x33\xc3"
"\x7b\x46\xe9\x42\x3f\x6a\xa8\x04\x61\x85",
4096);
memcpy(
(void*)0x20001280,
"\x9c\x13\xa0\x51\xce\x6c\x80\xce\x58\x9c\xf4\x01\x06\xf0\x2c\x87\x1d\xc9"
"\x34\xf5\x2d\x12\x65\xe0\x54\x06\x2f\xde\xbd\x0c\xe3\x5f\xe1\xd5\x55\x28"
"\x46\x33\x70\x15\x01\x24\x60\x08\x2b\xec\x5a\xf4\x37\xf3\x29\x8a\x26\x01"
"\x83\x34\x89\xe8\xaf\x5f\xfc\x27\xdb\x55\x34\x91\x8d\x25\xe9\x2e\x0e\x6d"
"\x67\xd9\xc4\x3d\x0a\x3c\x10\x79\x82\x07\xa5\xd6\xdc\x93\xb5\xcc\xec\xad"
"\x97\xc8\x7f\x17\x3e\x04\x8e\x8a\x36\x43\x82\xa6\xd1\x6a\x76\xf9\x6e\xf7"
"\xae\x28\x71\xbc\xbd\x8f\x3c\x28\x75\xd8\x11\x41\x74\xa6\x6f\x92\xfb\x17"
"\x55\xc3\x6b\x8a\x62\x82\x5e\x0c\xe6\xad\xb4\x0f\xd3\x4b\x7d\x0e\x60\xf2"
"\x88\x6e\x25\xa7\x13\x3f\x5f\x88\xcf\xfb\xee\x57\x11\x14\xf4\x72\x07\x4e"
"\x78\x58\x73\x97\x68\x1a\xe7\x80\xf2\xde\x42\x69\xa3\xa4\x19\x3f\x1f\x74"
"\x3e\x29\x24\x07\xb1\x90\x42\x15\xba\x61\xaf\x71\x37\x04\x2e\x50\xbc\x17"
"\x20\x3c\xa7\xa6\xd2\x5c\xec\x20\xe3\x98\x72\xfc\xba\xe4\xea\xdd\xc1\x59"
"\x28\xe9\xac\x38\x15\xb4\x93\xb7\xbf\xdf\xa3\xc2\xff\x6d\xcd\x9f\x7d\x4e"
"\x8d\x24\x53\xe7\x58\x0d\x6d\x85\x87\x9e\xf5\x0a\xe5\x07\x39\x46\x83\x26"
"\x7c\x81\x26\xcc\x1a\xf6\x4a\xce\x01\x3d\x93\xa4\x55\x2d\xe4\xbe\x02\x23"
"\xee\x0f\x5b\xa6\x46\xaa\x7c\x4e\xe9\x5a\x9f\xc6\x19\x2a\x87\xa2\x8f\x35"
"\x64\xc7\x1a\x13\xe3\x35\x86\x6f\xa0\xa5\x5a\x34\xb9\xbc\x79\xd1\xd2\x37"
"\x6e\x80\x8f\xa0\xf5\x8f\x8f\xf5\xf3\x3b\xb4\xed\x81\x38\x39\x2d\xf2\x52"
"\xed\xa7\xd2\xdc\xee\x73\xeb\x95\x7f\x59\x22\x27\xc8\x63\x6c\x61\xc9\xd3"
"\xab\x93\xde\x72\xb1\xd9\xe0\xbf\xab\x3a\x5e\x63\x81\xae\x73\x29\x0f\x8f"
"\x1e\xc0\x25\xd6\x0b\x69\x2e\x76\x08\xf9\xea\x07\x91\x41\xcf\x51\x80\xef"
"\x66\x10\x10\x3f\x04\x3f\x9f\xf1\x49\x24\x7e\xa5\x31\xc0\x65\x80\x9e\xb9"
"\xf1\x65\x5a\xd9\x63\xf9\x2f\x5c\xc2\xc8\x3b\xa0\xda\x9d\x79\xfc\x2c\xde"
"\xc1\x61\x49\x22\x57\xbb\x24\x80\x20\x84\xc1\x7f\xad\x57\x1f\x23\xff\xaf"
"\x24\x5e\xe6\x47\x42\x3e\xdb\x08\x73\x3f\x2d\xc7\x5e\x51\x4e\xff\x02\x74"
"\x00\x37\x49\xcc\x7d\x5b\x0b\xf2\x46\x2f\x5f\x2f\xd7\x69\x70\xea\x28\x20"
"\x73\x4f\x58\x33\x39\x29\x39\x26\x3d\xec\xd6\x35\xd5\x96\x9d\xbf\x4a\x28"
"\xe6\x29\x2d\x89\x9a\x3a\xa3\x6f\xec\xd6\xc2\xe4\x22\x0b\x7d\x8c\xbf\xec"
"\x81\x37\xf6\x27\x2e\x12\xf2\xb9\x47\x46\x6c\x05\x82\xf2\x25\x48\x72\x0d"
"\x52\xb0\x6d\x6c\x7f\x27\xaa\xcd\xbb\x6e\x5e\x31\x1e\xc0\x8b\xd8\x48\x12"
"\x61\x61\x99\xf7\x64\x46\x94\x11\x7e\xd7\xae\x38\x58\xdb\x7d\xd5\x48\x36"
"\x94\xc6\xab\x4a\xd0\x82\x54\x7b\x4d\xb1\x8d\xc3\xe4\x67\xdd\x9f\x37\xe1"
"\xd1\xba\x2c\x50\xd3\xd7\x02\x24\x67\xc6\x07\x7b\x45\x71\xc4\xe5\x6c\xfc"
"\xa9\x39\x3c\x2f\xe7\x3d\x84\xf3\xd5\x70\x8c\x9d\x91\xbe\x3a\x69\xb4\x3b"
"\xcd\x49\xa2\x03\x2f\xd3\x74\xb7\xc9\x0d\x47\xc8\x04\x93\x59\xae\xc0\xd8"
"\x09\x63\x96\x4e\x9e\xe2\xe2\xef\xc9\x10\x4c\x5d\x22\x31\x3a\x02\x57\xd0"
"\x76\xe0\xf8\x91\xfd\x6b\x34\x3b\x32\xc9\x7b\x70\x25\x02\xd9\xbb\xa8\x14"
"\xdf\x9a\xe0\xcc\xba\x8f\x6b\xf0\x1f\x19\x8a\xd1\x36\xa3\x7a\x9e\xda\x83"
"\x38\x3d\x57\x44\x68\xee\xf9\x33\x4e\xda\x4d\x0d\x32\x58\x48\x2c\x6f\x5e"
"\x28\x8d\x3a\x5a\xa1\x69\xed\x14\xa9\x52\x01\xe2\x37\xdc\xf0\xd0\x0d\x0b"
"\x8e\x3f\x9c\x76\x0f\x5a\x0e\xf1\x01\x7b\x84\x42\x46\xb5\xf3\x42\xf4\xd3"
"\x6c\x87\x2c\x59\xfc\x0c\x43\x0c\x74\xb7\x35\x9d\xdf\x5f\xa3\xfa\x3e\xb1"
"\xfe\xaa\xb1\xb5\x25\x1b\xe0\xab\x4e\x97\xe1\xf4\x24\x3a\x3c\x95\xa3\xe5"
"\xa7\xa6\x6c\x73\x15\x39\x91\xd2\xb7\x0c\xf8\x66\xba\xaa\x2f\xa7\xf9\xd6"
"\xd8\xb4\x22\x0d\x12\x1d\xdd\xb6\x2c\xd8\x1d\x78\x86\x7e\x6d\xc5\x66\x5e"
"\x34\x35\x33\x44\xf9\x0c\xf4\x1e\x2b\x7f\xee\x40\x31\xd7\x22\x05\x13\x92"
"\x8a\xdb\xee\x54\xa5\x4e\x0d\xcf\xf0\x22\x1a\xcb\xff\x1a\xe8\x37\x4f\x36"
"\xad\xa5\x66\x58\x59\x22\x5b\xb8\xde\x3b\x6b\xeb\xec\x84\xfd\x6c\x3e\xde"
"\xdc\xb6\xcb\xab\x76\xcf\xd4\x3c\x6a\x69\xb1\xd7\x94\x7b\xac\xec\x64\x81"
"\x14\x31\x89\xb7\xa3\x41\xca\x49\xfd\xfb\x59\x58\x42\xac\x90\x1e\xa6\x3c"
"\xe3\x47\x48\xaa\x09\xf1\x82\x57\x9f\x5b\xc0\x9c\x47\xba\xde\xb2\xd2\x30"
"\x91\xe6\xc6\x69\x1c\xad\x7e\x7e\xa3\x6e\x68\x25\x1c\x69\x18\xf8\xde\xc8"
"\x2f\x94\xaa\x5e\xf4\x02\xf4\x83\xf2\xd8\x51\xe8\xed\x35\x65\x14\x16\x2b"
"\x78\xbb\x43\xe3\x78\xb6\xa8\xea\x9d\x6c\x5c\x5e\x6a\x6c\xcd\x57\x2e\x53"
"\x96\x9e\xd5\x30\x87\x25\x62\x32\xaa\xbd\x65\x29\x42\x68\xf2\x47\x1b\xf4"
"\x0f\xad\xfc\xd8\x63\x1b\x1b\x41\x1b\x73\x71\xa0\x34\x75\xa7\xa1\x8e\x56"
"\x3c\x24\x2f\x2f\x50\x68\xfa\xd7\xaa\xbd\x09\xa1\x95\xf7\xfe\x29\x81\xfa"
"\xb6\x63\x32\x1e\x2e\x72\x35\xd2\x73\x00\xce\x4d\x47\x06\x52\x0b\x82\x7f"
"\xd3\x7f\xee\x1b\xe5\x99\x3a\x74\x8a\xdf\xd1\xb9\x80\xf8\x9d\x04\x77\xac"
"\x02\x05\xc9\x1e\xe4\x81\x3d\xe9\x86\x4e\xa0\x54\xf9\x90\xc7\xde\xb2\xa7"
"\xee\xa0\x84\x72\x22\x0a\x79\xcf\xa3\x92\xdd\x75\xa8\xd4\x6a\x5e\x60\xbc"
"\x3f\xb6\x01\x76\xb2\xb0\x38\xc7\x5a\x8a\x5c\xaf\x0e\x9c\x02\xf6\x42\x17"
"\x4a\x41\xef\xf4\xec\xd3\x5e\xdb\x14\x80\x00\x50\x49\xbd\x9c\x5a\xf0\x7c"
"\x93\xe8\xac\x97\x25\x29\xdc\x94\x90\x60\x15\xb3\x7c\x12\x38\x2e\x73\x10"
"\x33\xf9\x92\x92\x09\x38\xf0\xfb\x1c\x48\x1f\x45\x32\xee\x1e\xee\xf6\x60"
"\xa1\xfb\xb8\x31\xf8\xd5\x6e\xed\x59\x60\xf7\xd6\x3d\x92\x57\x74\x0b\xb1"
"\x89\xd5\x55\xf9\xad\xce\xe5\x61\x1f\x42\x63\x0f\x6a\x12\x5e\x58\x99\xff"
"\x35\x63\xbb\x04\x05\x36\xfc\x85\xc1\x2f\xec\xa7\x14\x1f\x32\x8f\x39\x94"
"\xe7\x8a\xe3\x41\xc8\x8a\xac\x7c\x49\x01\x98\x5d\x45\x65\xc1\x00\xba\x6b"
"\x3a\x11\x43\x60\xaf\x21\x8e\xa9\x56\x9c\x34\x02\x8d\xdc\x0a\x3a\xf9\xef"
"\xb2\x50\x2f\x42\x77\x78\x48\x89\x1e\xf5\xfc\xc4\x88\x50\x3a\x14\x42\x62"
"\x31\xfa\x46\x5c\x3d\xba\x01\x86\x0c\x74\x76\x85\x40\x41\xde\xec\x3b\x67"
"\x18\x7a\x2d\x05\x3d\x7f\x2b\x60\xcb\x7e\xff\xe3\x5e\xf6\xdb\x81\x60\xf4"
"\x74\x70\x93\x7c\xd1\xef\xfd\x1c\x76\x2b\x44\x98\xeb\x60\xf8\x1d\x6f\xad"
"\x5f\x85\x9d\x04\x81\x4d\x61\x2b\x37\x30\x2c\x7a\x22\x0d\xdb\x26\xea\xc4"
"\xeb\xf6\xb3\x63\x57\xb9\x10\x01\x69\x1d\xc9\xe1\x43\xdc\x1f\x59\x8a\x8f"
"\x7a\x41\x67\x8e\x4e\xe3\x6b\xd6\xeb\x75\x5c\xfd\x70\x03\x56\x7b\x10\x18"
"\x2f\xd3\xe9\x01\x4d\xe8\x5b\xa7\x7e\x8d\x83\x0d\x57\xd9\x05\x6b\xcb\xae"
"\x77\xce\x33\xbf\xc1\xc9\x10\xab\xa8\x4a\x5a\xf6\xbe\x4a\xe8\xaf\x57\x32"
"\x3a\x67\x2f\x5e\x78\x80\xd3\x3b\x0f\x12\x01\x30\xda\xa9\x21\x20\x42\xc4"
"\x3c\x04\x30\x91\x1d\xd2\xfc\xf8\xf0\x56\x24\xa8\x96\xa5\x7c\xa4\xeb\xb0"
"\x96\x66\x6a\x68\x10\xc0\xe5\x9a\x52\xe2\xcd\x5d\x21\x40\xc6\x36\xbd\xd5"
"\x28\x6e\x3c\xa0\xcc\x6c\xdc\x99\xb2\xa8\x72\x26\xb0\x00\xd9\x9d\xd6\xd6"
"\xd0\x04\xde\xe4\x86\x3d\x9a\x0b\x36\x3c\x9b\xef\x3e\x7c\xa5\x8e\x0f\xca"
"\xf2\x3d\xc3\xd9\x6d\x03\xfc\xf7\xdc\x6c\x5c\x29\xcd\xc6\xe9\x54\x45\x26"
"\xe8\x78\x6e\x56\xbe\x98\x67\x93\xe2\x61\x82\xfd\xbd\x2b\x58\x32\xaf\x2f"
"\x17\x36\xe5\x24\xd3\x98\x44\x2a\xf0\x66\x9b\x22\xa0\xee\x41\x84\x25\x57"
"\xa2\xe3\x52\xb5\xe7\x89\x63\xa7\xec\xf9\xb8\xf9\xd2\x95\x81\x33\x27\x62"
"\xa7\xc2\x27\x1e\x2d\xf9\xa6\x13\x57\xf0\x64\x92\x1f\x54\x46\xe8\x38\x5c"
"\x39\x8a\xef\x7b\xf8\x0f\xa4\xb6\xc3\x08\xcd\xc6\x86\x69\x9e\x52\x3c\x2c"
"\x8e\xe4\x9b\x95\xb3\xbd\x05\xec\xb0\x0f\x2a\xeb\x17\x80\x45\x75\xfb\x4e"
"\xcc\xc0\x62\xee\x41\x36\xdc\x95\xe9\xbe\xe1\x6d\xf5\x30\x7c\x5e\x1e\x3b"
"\x15\x4b\x8d\xb9\xb3\xbb\xbb\xce\xe1\xf9\xac\xf5\x39\x86\x13\x20\xf7\xea"
"\xed\x08\x98\xfe\x1c\xd3\x14\xba\x5a\xd7\x8a\x5b\xf1\x48\x96\x42\xbc\x0a"
"\xb9\xd0\x01\xde\xfa\x0d\xd4\x20\x54\x3e\x99\x70\xce\x40\xe6\xdc\x20\xd3"
"\xd1\x7b\x8c\x96\x8f\x8c\x41\x2c\x6e\xff\xee\x32\x6d\x6e\xe9\x85\x9a\x69"
"\x77\x49\x8c\xaa\xe6\x6b\xb9\x5a\x7e\x81\xf5\x43\x5f\x61\x45\xce\xd7\xec"
"\x5f\x99\x6a\xb8\xce\x51\x53\x48\x7f\x14\xc7\x25\xb8\xa5\x1f\x42\x93\xe2"
"\xd5\xc7\xd2\xed\x4c\xfd\x2a\xb8\x2b\xb9\xf9\x2d\x9c\x3d\xea\xf7\xad\x9d"
"\x64\x7d\xb8\x4b\x9d\xba\xb0\xaa\x96\x54\x6b\xe7\x1d\xe6\xfe\x22\xc0\x96"
"\x22\x2a\x88\x07\xbb\xd2\x66\x29\xaa\xc6\xec\x7b\x60\xb7\x60\x79\x30\x5e"
"\x69\xab\xb4\xd9\x66\xd1\xcb\xe7\xb8\x77\xb9\x29\xfb\x82\xad\x83\x2f\x09"
"\x0e\xd1\xd3\xeb\xe5\xeb\x13\x2d\xef\x25\xa8\xa7\x65\xf2\x0a\x15\xf6\x31"
"\x55\xb5\x0c\xfd\x5f\x5c\x21\xbb\xd5\xb0\x4e\x51\xdf\x16\xe2\x4e\x96\xbd"
"\x61\x81\xe6\x57\x7f\xec\x3f\x80\x5f\xdf\xcb\x06\x6b\xfe\xc0\xcd\xc5\xdb"
"\x0c\x3d\xb2\x9b\x59\x11\x1b\xf4\xfe\xe4\xd9\xeb\x77\x43\x66\x45\x85\x82"
"\xf5\x27\xaf\x97\x3e\x61\xd1\x9f\x2d\xb7\x17\x4a\xb2\x55\xdd\x88\xad\x4e"
"\x4e\x1c\x58\x8b\x76\xd1\x51\x9e\x1b\xb4\xeb\x50\xa6\x0b\x7a\xd7\x8a\x95"
"\x6d\x59\x15\x24\x38\xc5\x78\x3f\xe0\xf0\xe0\x44\x9c\x75\x51\xa5\xac\xee"
"\xfb\xcc\x0c\x23\xee\xcb\xbf\x3e\xe9\xf4\x7a\xdf\xce\x14\xb1\x36\xce\x34"
"\xc0\x8b\xa9\xbc\xf1\xe9\x94\xff\x8f\x97\xa8\x7e\x18\x1d\x06\x57\x70\x37"
"\x6d\xf5\x10\xf5\xd7\x0f\xb8\x3e\x44\xbf\xc5\x4a\x30\x6d\x11\x92\x21\x07"
"\x97\xe7\x98\x08\xe3\xc4\xaf\x8c\x9c\x3c\xf8\xd6\x47\x02\x8d\xe8\x04\x98"
"\xc2\x66\x1d\xe5\xd9\xd3\x1d\x27\xa7\x4b\xd9\x6e\x7e\x36\x32\xcc\xce\x08"
"\xc9\xaa\x95\x54\xd4\xdd\xf3\x33\x60\x2d\x4e\x81\x04\x02\x4d\x88\x4e\x0f"
"\xe3\xa5\x31\x75\x0d\x56\x64\xdd\x12\x2c\x5f\x67\x9b\x14\xe9\x9c\x57\x2d"
"\xe6\x0c\xf7\x1b\x53\x27\xff\x16\xd1\xa5\x84\x8e\x4d\x8a\x2e\xd9\x67\x34"
"\xc0\xca\x15\x45\x0d\x6f\xdb\x24\x67\xb8\xbc\xff\xf0\x9a\xe4\x28\xcb\x77"
"\x19\xf3\x28\x31\x21\x69\x27\x2d\x22\x0a\x0f\x1a\xd7\x36\xca\x4e\x6d\xa1"
"\xe7\xfd\x51\x43\xe2\x68\x55\x3c\x18\x98\xb3\x0f\x0e\xe2\x3d\x50\x22\x93"
"\x66\x0a\x06\xfc\xa4\x4d\xbe\xfa\x00\x5c\x78\x24\x3b\x7c\xcf\xc9\xf8\x4e"
"\xcf\xe8\x2a\xe2\x20\x67\x91\x10\xf7\x53\xd3\x54\x1a\xbe\x0d\xd9\x74\x0a"
"\x82\x54\x61\xa6\x0c\xbc\x1d\x95\x25\x97\x87\x54\x10\x24\xda\x96\x87\x73"
"\xe6\x2f\x4b\x31\x62\xe2\xea\xbf\x2e\x17\x91\x1d\x1c\x6f\x29\x38\x0b\x05"
"\x62\xb1\xdb\xac\xdb\x37\x0e\x05\x4b\x04\xb4\xe4\x42\x46\x9f\x30\x02\xf3"
"\x6c\xab\xca\xa9\x49\x8b\x2a\xe6\x1a\x11\x5e\xae\xd2\xbd\xc9\xa5\xd6\xba"
"\x12\x2b\x05\x4e\xee\xbc\xeb\x10\x96\xcc\x5e\x3b\xa9\xb3\x52\xc8\x6b\x2e"
"\x66\x35\xc1\xf2\xbf\x22\x63\xd5\x0d\x45\xcf\x58\x47\xb1\xa7\x48\xe0\x87"
"\xf5\xd8\xb9\x17\xa5\xb7\x55\xa8\x13\x04\x03\xc7\x1e\xab\xea\x0a\xcd\xc1"
"\x58\x0f\x35\x38\xaa\x83\x87\x41\x4c\xdd\xb9\xfa\x96\xc6\xcb\x91\xad\x34"
"\xf3\x08\x69\x61\x27\x26\xb8\x6d\xb7\xaa\xab\xea\x19\xbf\x01\x05\xcd\xb8"
"\xee\xab\x75\x65\x21\xbf\x41\x0c\xcd\x1f\x58\x65\x87\x5a\x56\x1f\x77\x7a"
"\xd7\x92\xed\xec\x83\x0e\x73\xaa\xac\xc5\x1b\x15\x55\x21\x7d\xa8\xe6\x81"
"\xe3\x7c\x22\xaf\x47\x93\x18\x3f\x4f\x25\x50\xe3\xa0\x32\x45\x5f\x3d\x85"
"\x20\xd3\xca\x91\xc4\x3d\xbe\x42\x1f\xb6\xb6\x48\xf6\x1c\xba\xc3\xbb\xa3"
"\x21\xee\x7a\x1e\x81\xbf\x26\x9f\xd0\x6b\x7d\x30\x66\x87\xf5\x0f\x68\xb5"
"\xb4\x0b\x7c\xbe\x0e\xd2\x89\x85\x59\x9b\x25\xed\x84\x28\x09\x27\xbc\x6d"
"\x35\x95\xc6\x57\x05\xb0\xf8\xec\xd3\x00\xe4\xbc\x55\xe8\xd6\xf6\x7c\x59"
"\x82\xc6\xf4\x46\x0e\x16\x37\xcd\xe1\xab\x8d\xf4\xf3\x9d\x5b\xce\x0a\x83"
"\x4a\x26\xf9\x61\x95\xb4\x97\x52\x7a\x74\x4b\xd0\x87\xaa\x0b\xf1\xdd\xdd"
"\x92\xd4\x93\x99\x63\xe2\xf4\xfc\xe1\x08\x6f\xc8\x5f\xad\xca\x2b\x49\x3f"
"\x77\x28\x59\x2e\xdf\xf1\x9e\x95\xc8\x65\xe8\x20\x61\xcb\x95\xbe\xd7\x8b"
"\x8e\xe4\x6d\x47\x26\xa2\x36\x5c\x97\xb5\x7a\xb9\x33\xca\x25\x53\xd5\x95"
"\x14\xa0\xc6\xde\xcc\x33\xf7\x73\xcb\x07\xde\xe2\x39\xc3\x53\xc8\x68\xdb"
"\xf4\x61\xc1\xe8\xa7\xdd\xb7\xc2\xa1\x8e\x98\xbc\x14\x27\xef\xa6\xbc\xa2"
"\xa1\x65\x72\x37\xc7\x2f\xab\x57\x93\xca\xff\xd9\xb1\x43\xd2\xb1\xc8\xe4"
"\xca\x7c\x44\x8a\xe8\x6e\x3c\x68\xc2\xce\xf4\xd1\xb7\x1b\xcc\xa5\x40\x2f"
"\xf2\x95\xa1\x7e\xde\xc7\x5a\x02\x45\xa5\x76\x7b\xcd\xe5\xc0\xeb\x75\x51"
"\x85\xda\xb5\x43\xa9\x71\x31\x4c\x96\x66\xc7\x9e\x34\x33\x88\xd2\xa7\x53"
"\xb5\xa1\x62\x33\xff\x2a\xf9\x5f\x52\xa8\xdf\x77\xe3\x9c\x54\xee\x38\x0e"
"\xea\xbb\xb9\xf3\x93\xff\xad\xce\x49\x54\x79\x38\xa0\x3e\xfa\x7b\xcc\x03"
"\x7e\x43\xd9\x1c\xc4\x38\xbe\xfe\x6d\x6d\xae\x25\x13\x3f\xe0\xac\x59\x2b"
"\x90\xe3\x9a\x58\xa0\xd5\x72\xdc\xe6\xc2\x3a\x40\xa1\xcb\xba\xa6\x2b\xb8"
"\x5e\xd2\x96\x9a\x5f\xa7\x55\x1d\xf9\x74\x1d\x04\x3e\xf3\xfe\xf9\x9a\xff"
"\x1c\xc8\x7d\x4a\x83\x71\x85\xd1\x31\x67\x1c\x73\xc3\x1a\xb9\xb1\x8c\x2c"
"\x58\x6e\xee\x89\x28\x66\xed\x7d\xa1\x01\xd5\x56\x13\xf1\x1c\xc1\x53\xd6"
"\xe8\x66\xd5\x9d\xc0\xe0\x83\xf0\x16\x79\x2b\x4f\xd9\xcf\x50\xac\xfc\xf7"
"\xa1\xc2\x4b\xbd\xfc\xff\x64\x42\x11\x60\x94\xa2\xba\xdd\x6b\x0e\x77\x00"
"\x8a\xe3\x9b\x5f\xa5\x7a\xc3\x0f\x79\x96\xa4\xce\xfa\x4b\x8d\x03\x6d\x9c"
"\x54\x92\xc2\x0e\x73\x1f\x96\x7a\x9b\x80\x68\x78\x48\xab\xe8\x1a\x75\xdd"
"\x63\xa7\xb3\x37\x32\xd1\x73\x70\xe2\xfe\x20\xff\xf9\x66\x0f\x73\x35\x91"
"\xd3\x2c\xb9\xd7\xc1\x14\xe3\x2f\x20\xe4\xb1\xa2\x56\xe9\xaa\x70\x33\x71"
"\x5c\x96\xd7\x06\x99\xa5\x45\xfd\x72\x44\x0c\x12\x66\xcf\x8b\x02\x1e\x6b"
"\x6f\xfd\x92\xd1\xb7\x6f\x3d\x3f\x38\xfc\xdd\x43\x9b\xba\xa6\x9d\x95\xaf"
"\xf8\x60\xc0\x6d\x4c\x0e\x1d\x19\xea\xfa\x65\x1f\x60\xce\x23\x59\x01\x76"
"\xad\x79\x1a\xb8\xda\x11\x58\x1b\x5a\x03\xee\xc1\xcf\x50\xca\x8d\x2a\x7e"
"\x8a\x40\xad\x2a\x09\xf5\x32\x1a\x59\x3b\xa6\x53\xef\x91\xa1\x36\xef\x27"
"\x40\x72\x6a\xdf\x08\xeb\x3b\x40\x07\xb8\x3c\x23\x47\x5b\x13\x6c\x5c\x7e"
"\xe4\xea\xfb\x7e\x88\x4c\xe3\x55\xc4\x10\xe0\xb5\x17\x3f\xf2\xb9\x11\x80"
"\xb9\xc1\x9e\xec\x34\xfa\x7a\xe9\xf8\x7b\xe0\x9a\x1c\xd0\x7f\x3f\xd9\xc7"
"\x83\x15\xb1\xb2\x0a\x14\x76\xac\x8f\xf7\xa5\x5d\x6e\x0a\xec\xd9\x49\x21"
"\x71\x4b\xc2\xbb\x66\xb9\x59\x15\xc8\x59\xe7\x92\xd2\xad\x16\xce\x16\x5f"
"\xc3\x34\xc4\x82\x6d\xd8\xb1\xef\x9d\xbf\x11\x1c\xe3\xde\xc9\xb4\x3e\x01"
"\xc3\x0f\x53\x05\x58\xe6\x2f\x2c\x24\xcf\x01\x57\x74\x36\xa3\x8d\xe4\xf1"
"\xe6\x62\x98\x36\x9b\x31\xd6\xd2\xcc\x61\xa5\xe4\xc0\xdf\xa0\xa1\xd9\xc7"
"\x0b\x14\x73\x2b\x0d\x9b\x58\x93\x9c\x08\x2f\xb9\x8a\xae\xe4\x66\xad\x35"
"\x15\x6c\xed\x6a\xe1\x34\x90\xf5\xde\x08\x82\xf5\x79\xc5\x43\x1c\xc8\x77"
"\xa3\x2a\xe4\x28\x9d\xb6\xe8\xd2\x69\x99\xc6\xda\x20\x01\x74\x27\xb8\x32"
"\xe0\xd5\x2e\x10\x8b\x2b\x8d\xcc\x96\x2d\xe6\xf4\x9f\x7f\xa8\x0e\xf2\x6e"
"\xcd\x41\x07\x8c\x2a\xc0\x47\xfd\x51\xef\xca\xb2\xdf\x2f\x9b\xa5\x58\x0b"
"\xc7\x3e\xde\x70\x48\x0f\x89\x92\x2d\x24\xc0\x9b\x33\xe0\x56\x71\xcf\xa9"
"\x54\x85\x80\xcf\xe5\x24\xa5\xd7\xdb\xf3\x05\xcf\x8c\x2c\x2d\xa5\xd5\x4b"
"\xa7\x20\x74\xd6\xd8\x32\x7e\x3d\x1e\xc4\x13\xaf\x0b\xf1\xc5\xaa\x8e\x13"
"\x96\x56\xde\x36\x93\xdb\xf6\x6c\xe8\x38\x43\xfd\x1e\xcb\x70\xd0\x33\x86"
"\xb9\xbe\x4f\x02\x15\x17\x25\xd5\x39\x75\x65\xc5\x7e\x5e\xdd\xf6\xed\x43"
"\x78\x97\xc6\xf1\x83\x5f\xd7\x1e\x53\x56\x59\xe8\x22\x35\x41\x09\x63\x8c"
"\xaf\xbc\xfe\x58\x0d\xfd\xfc\x08\x84\x13\xbc\xf4\x11\x46\x65\x69\x48\x75"
"\x76\x6c\x7c\xbd\xa8\xe2\x86\xab\xcb\xb0\xe9\x37\xbf\x2d\xe5\x60\x29\x4c"
"\x25\xc3\xd2\xf5\x76\x6f\x78\x1b\x01\xe9\xde\xb0\xfb\x5a\xc5\x62\xbf\xcb"
"\xf4\xd2\x6f\x87\x63\x6e\x8c\xae\x23\xf3\x94\x20\x37\x8d\x4a\x95\x7d\x60"
"\x81\x5d\xb8\x21\x8d\x9e\x7b\xe7\x6b\xa8\x40\x99\x00\xd0\x7b\xd5\x6b\xe0"
"\x66\x12\x77\x27\xcc\x82\x0d\x9c\x11\xfc\x04\x56\x09\x0d\xd8\x15\x24\xe8"
"\x96\x8c\x87\x1d\xc1\x89\xf6\x97\x01\x76\xd6\xd7\x35\x1a\x6d\xe2\x0f\xe7"
"\x47\x4e\xac\x7b\x56\x96\x88\xd4\xd6\x76\xe6\x0c\x0b\x4a\x9c\x52\xb6\xdb"
"\xdf\x65\xde\xaf\x3f\x27\x8c\x23\x26\x56\x70\x87\x81\x9d\xde\x99\x07\x5d"
"\xb9\x3b\x3b\xe7\x22\x8f\x12\x9f\xf9\x34\x02\x61\x96\x1d\x31\x0b\xe6\xf0"
"\x17\x15\xa6\xc7\xc9\x8d\xe2\x4c\xf3\x30\xda\xf9\x5e\x74\xcd\x1f\xfd\xe5"
"\x14\x13\x8b\xe0\x1d\x51\x19\x74\xec\x24\xdb\xb4\x73\x0c\x0f\xcb\x5f\x11"
"\xb9\xac\x2c\x81\x50\x44\x55\xf4\xa9\x19\xc6\xea\xae\xf1\x76\x39\x83\x4b"
"\xe2\x8b\xa2\x14\xc2\x3d\xc4\xe5\x68\xef\x62\x64\xf3\xef\x05\x2b\x89\xe7"
"\xec\x20\x5d\xd2\xd3\x6c\x44\x73\xf1\x79\x55\x42\x7e\x9a\x5b\x8d\x15\x4a"
"\xf4\x9e\xcd\xb6\x74\x3a\x7c\x55\x58\x10\x74\xe1\x92\xa0\xdf\x0d\xc4\xee"
"\xb5\x2b\xcb\x3a\x7c\x5c\x72\xbf\x22\x79\x65\xdd\x30\xa2\xf8\x5d\x1a\x1a"
"\x5b\xa3\x36\x1e\x3f\xb3\x8f\x93\x40\xf7\x5b\xda\xb1\x61\xc6\xad\x0c\xd0"
"\x76\x35\x78\x83\xca\x14\xe5\xd2\x79\x78\x87\x6d\x15\x05\x6b\xfa\x49\xb1"
"\x4f\xd7\x76\x4a\xb6\x9f\xb4\x60\x4c\x92\xb5\x81\x07\x04\xcd\xc4\x52\xe8"
"\xae\x1c\xd0\x03\xd2\x89\x44\xb0\x60\xd6\x50\x50\xfd\xc8\x65\x5c\x12\x31"
"\xfb\x54\x15\xba\x5b\x88\x74\x35\xbf\x99\x25\xe6\x67\xbd\x39\xce\x50\x09"
"\x14\xe6\xba\x14\xb0\x52\x5f\x17\x76\x28\x75\xb0\x3d\xf2\x20\x7e\x75\xa9"
"\xee\x0f\x6e\x7c\x6d\x0e\x69\xca\xd6\x70\x8a\xd4\x8b\x86\xf3\x6f\x08\xc0"
"\xcd\x98\x52\x98\x44\xbe\xdc\x9c\x55\x56\xbb\xc2\xac\xa6\x8b\x7b\x45\xce"
"\xc1\xcf\xc3\x80\xae\x6c\xa1\xe9\x8e\x56\x74\xab\x62\xba\xce\x8c\x85\x59"
"\x4b\x8b\xb1\xaa\x40\x71\xd4\xbc\xd1\xc2\x82\xde\x92\xa8\xf5\x7b\x98\x3a"
"\x8c\xa6\x0f\x0a\x9c\xf7\x33\x30\x74\xf0\x9a\x02\x25\x8d\x29\x8c\x61\xbf"
"\x48\x0d\xdd\x10\xb0\x63\xaf\xf5\x1e\x1b\x56\x38\x98\xb7\xe9\x74\xbf\xeb"
"\x4f\x2f\xbe\xc7\x13\x62\xa1\x60\x99\x72\x18\xc7\xc4\xfd\x63\xf2\x71\x33"
"\xbf\x93\x87\x13\x62\xe0\x66\x80\x2c\x41\x00\xe7\x23\x0b\x37\x70\xd7\x72"
"\xe8\xba\x5a\x9e\x63\x0f\x38\x9a\x28\xe3\x90\x55\x00\x1f\x9c\x80\xa5\x0e"
"\x75\x3f\xef\x94\x18\x9b\xe3\xbd\x12\x6d\x89\x2e\x3b\xd3\x72\x77\x53\x49"
"\x0d\xe4\xef\xca\x8c\xd2\x6b\xec\x49\x27\xdc\xdc\x05\x36\x29\x13\x5d\x79"
"\xf8\x46\xba\xd3\xeb\x33\x3f\xc8\xe6\x19\xc9\x95\x07\x2b\xed\x84\xc1\x76"
"\xa7\xd9\x94\x7a\xcd\xb9\x3a\x91\xb7\x2a\x10\x89\x23\x76\x14\xd0\xbd\xdb"
"\xcc\x8b\x4d\xfc\x3e\xf3\x6b\x56\xe2\x3a\x97\x7e\x64\x19\xb9\xd7\x45\x9d"
"\x3d\xdd\xb7\x37\xd9\x4e\x34\xe8\xdf\xaa\xac\xf3\x89\xf7\x0d\xf6\x13\xae"
"\x1d\xf1\x91\x59\xb8\xaf\x15\x6d\xde\xe5\x9f\x41\x51\xf0\xe6\x03\xae\xc0"
"\xf1\x16\x5c\xdf\x94\x57\xee\x4d\xcb\xb5\xb1\x79\x3e\x52\x4e\x33\xc3\x4d"
"\x04\x3b\x66\xc3\x45\x99\x57\xe4\x87\x0f\xcb\x9e\x3e\xbc\xfa\x0f\x35\x25"
"\x23\x0d\x2d\x22\x01\x98\xb6\x4c\xbb\x71",
4096);
inject_fault(4);
syscall(__NR_ioctl, /*fd=*/r[2], /*cmd=*/0xc040aed5, /*arg=*/0x20000200ul);
}
int main(void) {
syscall(__NR_mmap, /*addr=*/0x1ffff000ul, /*len=*/0x1000ul, /*prot=*/0ul,
/*flags=*/0x32ul, /*fd=*/-1, /*offset=*/0ul);
syscall(__NR_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul, /*prot=*/7ul,
/*flags=*/0x32ul, /*fd=*/-1, /*offset=*/0ul);
syscall(__NR_mmap, /*addr=*/0x21000000ul, /*len=*/0x1000ul, /*prot=*/0ul,
/*flags=*/0x32ul, /*fd=*/-1, /*offset=*/0ul);
setup_fault();
loop();
return 0;
}
and see also https://gist.github.com/xrivendell7/f8d32211ddde603c43a09e2df23b2f35
Since the reproducer is in a loop and with fault injection, it is hard
to trigger in the production environment.
I ran reproducer for about 1 hour with your patch as below does not
trigger any crashes in the upstream commit
7846b618e0a4c3e08888099d1d4512722b39ca99 like in the syzbot instances:
diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
index 901be9e420a4..ee516baf3a31 100644
--- a/arch/x86/kvm/mmu/mmu.c
+++ b/arch/x86/kvm/mmu/mmu.c
@@ -4747,7 +4747,9 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
* reload is efficient when called repeatedly, so we can do it on
* every iteration.
*/
- kvm_mmu_reload(vcpu);
+ r = kvm_mmu_reload(vcpu);
+ if (r)
+ return r;
if (kvm_arch_has_private_mem(vcpu->kvm) &&
kvm_mem_is_private(vcpu->kvm, gpa_to_gfn(range->gpa)))
You can also test with the reproducer for future analysis.
I hope it helps.
Best regards
xingwei Lee
lee bruce <xrivendell7@...il.com> 于2024年8月11日周日 13:32写道:
>
> Hello, Sean and Kai Huang.
>
> First, I reproduced this bug and comfired in the latest upstream.
> Second, I try your patch and test it with my reproducer.
>
> If you fix this issue, please add the following tag to the commit and CC these emails after:
> Tested-by: xingwei lee <xrivendell7@...il.com>
> Tested-by: yuxin wang <wang1315768607@....com>
>
> Here are the reproducers:
>
> =* repro.txt =*
> r0 = openat$kvm(0xffffffffffffff9c, &(0x7f0000000140), 0x0, 0x0)
> r1 = ioctl$KVM_CREATE_VM(r0, 0xae01, 0x0)
> r2 = ioctl$KVM_CREATE_VCPU(r1, 0xae41, 0x0)
> ioctl$KVM_SET_NESTED_STATE(r2, 0xc040aed5, &(0x7f0000000200)={{0x0, 0x0, 0x80, {0x1000000000000}}, "f90d366adbd2a9b552ed45bf030c9f0be15024f905fc22086fd1bd733a85e3a68c1ee7619208430ff89e6ab222b65fc69b713fb344d9635a76139533a965a7bdd4477d8d995e8a64bd3b719f72234a053303f0117fb9d5984750118c109cb644da61acf8dc8e27e4c2c8727ccdd6658bd91778cb5440fe1a36598886dd12e84f3bab5fa848182ef305f2eeb725dea9a879a0abc4ec8700a503938a262a06757b188396e611dda83acfa6c8c69a356fc2f7f1f21d531f87311bcb5f0546a7dec4c6178e4c70cf19a2c7a5689fdb8575007e38d6a58ce85956372179a12a337681202763fddc22b7846d1457436cffe7432a5b017c3d63d1b6a0fce425ee3359b92644c9dfea80e5cfc179fb34e2623ac691f9d27a14ed4eedbd807142c6153f93611d66f90bfcd7e5d43b102539cb7d5eba628e5e40e384d731c22324ebd1751e718b442d3a79e2914063919aeeef3e1b6b15e0f83b9b73461efe9bea9ef2610ce3e4ad833a39df41f662dba03fb3f76c533496edac28cf62745d88787b12e04b2dbb02cd6fb6b7d1e795686ed6bc9c4dd7716572e3ec521ea3d904b03387dd04005ff26b502e2c983d4f2fbc8906121e766df24b3642210de47b72242adc435cd58994e7b5effd57a715a2f777af77d48b20a5b0340a05996c54f5bbf36911f995ca43c8a34e7a1e3d5310c6d3ffca6583d9c70df181287cee3c281aa52d39004e4765190de5d6b162d6acfc7183395962d0cbae56cd5bafd419818702d6a270f2ddcbc38e371721a3171ff86ddbd7181737a82857805eb8fb9bd0dc582510deca4e3ba81af6469757b95da1b8fde036f33634f9b54c84c64530436a1ce9c43829a180bbcbe451c63364be9ff73dfd425d07deb27f5c424f13b3d516262359838b3a9529f5f038c701df10ab2edbd87bbc6d6f46a6d3102ee47dc811d37e7a719455fffed16d501059147877d47e8d1107f170712426c673e84fdc3f593f4bed7f2265ceda5d26e4d657f840fa90681d744e54e927b40934b1309b800960ffb37febc9edc963fe0b8c5a0b1a999c118b9a408f2f50a4f47db2c7793acd497be2e81abfd8ea9abcf823b603c24f15ef31f14064b8399417f27dc1dcf3a450480071f01c3b7d706f23553db85d0c77d621a9c88358ace88e4e431cb9492be35cf7407a35844a0f05cbcd52df3cdc40683b39ccca780cecade7933bdf4cd511b7067bbd161f7a9a1b463f416426cc57af5631fb1c94a919d20e46a5a684b437d15e5fc301eaae5642168a23d90fe1a38114e61999d60d7ac76a8a2404fb7da4fa4a07019ba9bf896451917517b7001199e586744d3a9a44b46e0ff4ff1769358a70f6b474aaab0467bdd5c4ef1bf250ab9f21161012f6aac09b425fcf7352dadb96d9761cc4a0df85f1c9199e723ca6add625e55eadda1c81a1e4900b3fa177a112ea8cabdf5d7c3c31cde2840241e067f150db66f61a0ca8a17496da2d9f9371c5ba86281aa836ecbf0720b853a21b25d42116a15146830adc774af8acc61e716becec9126a72607cba153e38d49f649e0d107882706738cf307f56d85691540b6829fe6d75ee39e10bd403851cf0e6b19d6466b6cecd54af05fc1c867fc6fc8a233fcbfabccc03b7526669d145f8b4fe89607ec586a0d0e3eb25b003134f2814c6221c2b3cd53121f24e7c5bcf95ddaed803bfb50f6444faa82d5df34a0c54ac2870730181feb0be7d2cd94f7556777e878d467f307ed547b70abda153e4cd337d9b73f06032e71c17a520afe4f2b56980348bcc397b10d6a6f922a72f0b617422b24e32f1a2a2cdbb55d08dfbd2e89a8035afed00524f02580a921dd428ccde714b6a9415340f17ef86cd6d5bd08b1e5140e7050cfb26a9defa3a0c2b4a1cfa5bfea046bb4448e963783649249d8a90cab7b1be2cb9ba4ba931b8eb1d6c4d832fa91e073c2c36bafaa0ab7bc9a594632f7e7571f6c75d51bd29a33dca2170edd0af382e8dd5cf99f2d181ed5ded290716bb6546b935a0f7e92e0b0c9f8bc839063cc8c366770d8db909297dc729d2dbb182c9acfa07a3aa65a03349bcdb06355aa965b75ea118a8febe7fbab8c501b7bbea39cd932f1fa518d7951482e26c6d6ac79bf154a4a03de9e49bbbcb9c060ba50738e4c80ca99fbe67f4e87a249755e999ef27c4cfc039fdf87492b84899b9eb7795f7e74cf993bd0b5757214489e7f5d7705a9d56de1c6ea70c5142eee2beffd24c8a0eb13dc33dec8df29b0989e8a5c30d3102f55a334b78e15dd696178f48a1e97de8736e5732742c2060aeaeb9499575b795f08cc729c181ecf913eb5280d6087fa7f6a65df45853757500c1f01b91f0200555935dd3b8bedd5f8c8eb2ff3ac44c96be73871ea26c5e5f3503e7c5dfdddfb929b26b1d2766df9bf419c5597ecf493a9f363e0d1fd1701f2b253af5afe04f8b23f8bf8e6935503a939ca3a9c1503474b3501ea50b44ef71a55f34f787d4f689a6d6721b82a8eb0d47d0f5dde98d12a225988b6399f7befae3b0cc2db13275ba092e9bde3ab3b47e47d36f69a94eee8c09ca78574bebceaf0ce4c23a5e7917e697fb76b0864accada8b301654c56b0d9629e85171c4860460022505a73d2acbcf5cd55686e9c62e550730a1d219f46ac23dbf13c6e101059380a4a3196e4db209b4129bd130227f349393efef9728609d4f2d4d1cbdf5605c5f25c9deb6a1db3b71e95e4b1c5af55f01f2330f2a6fd2b2c0f72580dc4da276c86dab19f817f90dfa7e6ff44fb90ebe9d5ceaf879e0a8973755bacd602744bd987397e6775fb65715a30dea88bab25b38e54a97b21d716e885a5d921970f81ab816d42d1ffee0a445d52f036f892dcaabc65f05cde9e3c3aaebf90168f3866d580d722a6bce399afb341948d17bed8cdbf725ef75e2c7d6da3844c1184709f748d2e18cf50ad9f94b2b936d6f6a483b0c490ac641c1c47064d144e559addaf1a162dc9013dab6589a08879b2c8140c4c1bc75783589ab966858bbd5d4706978ca65ca40c4954167c5dc9f9a0f0d858f2f1e5b1d79ecc281a2efe25146a236c7d312f166f440fece7e1618bee1d2244e884e23eea7568cee17a4c7262b450b8efd8b4e64e23b9f2756f4aeb495b9b604efbdf7c9b1d79f30f26ea5b2b655c3f9a931f54153f23fb064a9f1d2eb30b98373c180f76e72df20bcf5e99322e00bbe7b3a9e6a9ab273cba36596e880ee69c006e8098172e86ac8dcb6bf56c8557d7d0828245ce2c97b7eea5bbe6f6e61b2c70aada55e1eff782dfddb061760d26da0e08b5223f46e950661d31ed8161bf042c2836ff6903d560efb367c47bc67859e2e5bc18816aa5c31d7858a6e730a825800ff4174623dfd0fe0504227171c2f7bd18497889f902a3d80253c67111b55e6aec1ff5f2fac56dd0e4b515e56fafe53dc52c343aef85642380ef847fd117dc2f8ea66b6d202d628b7d088dd45e53226748df660197325e9c46e2bb0ed5a9b12be9f5e68594dfddde769ba90b59b4d37a893d7661763e053428e3fd5d4368a568c98208c6ab4908fdeb1c5afc84c8d18a83d9f379949ae50091a4105ed183f0cb1ae49c8da6c6433c2c9e573362265312db10202986bf564464caa0e0fd7131bdaf2209e3c8b60b2d4a5281e97b31f4b3ba1941dbed4568ed10bc68ed1132ea6852b23044165dc1d61be6537480f36a95896b18ef571e19be32b39ecd1ea3130648d618f71f96d061dd087f262f977da667329ac439bd7f844f99913a204a90b72f6730d6b67670476c5e654ae1a139eb98f4ef56908a6a209a1b9c0c89f350a9ce71905057268ba147cf352f4d8021e25d47a7a91885a71303e6cb55e85aaf4e2e9062beac40a8d427f44ff2156d2657889df23fe9ab4c2ba8703ca9d3a2b7c5504b05052dae4834324df86780bfe5d697eff15cd68820ea5f670a781ec9b1567cb2b478d2538c6f5d0416c4bf8a63c9800132c037994bb28717d7b2cec2754ef257bb3d9389be8d2ecfe6164d2d0bc4cd03473917c3cc45cc577144f5036920cbb9902909df41383ba9ee96eddd1a9e02495bdb7b4308083f8a6e526b2cf3c91621823775f39be51a38102414e683a5889ea4458ec785862db40f65415c182870cd247abbcc9d4d44a11fae610a58996c519677c006ec8d7959dfd709f5dd5222886de32c017a2d886e975274e3d64665e6f2faf61a440409eea675c7631031d6649dcb78e973bc2726583d18d007b787a72a6bc14028ab37fe7561b773d812778e80ecf5477c30e0be55ac59b8d07cf19475e49a81c1c923b6bdd97f5cef648d034d118a4913adf2dd3b58db4130fa35d2b44bbb30ffd3420812ec7e60b65dbf7686d7a01577b24e20132177a24cfe7c68b9316ba8bdd7712c1d398ee285d546d5d9f27210b1b7521754060dd69dfd0acf3324c3eeefe2dc4c08c01aee983582aed6f291ce8f349696bdc088ce3fdee9464b08e6dc3800afcb290d9546a422d792727cfb89f4cfd8bfad8a97460fc231b29901c024b9be09bd9e30d14b72bb4baca5bcd591dcf863dcde60ca648b56cd3b77c4f145cfbcd1172ba5f597fa2f2c7eee0291c68c111c7914d60d451987747138d788e87db355b8608887b997371eb88dd0e2319784f99d395712e15f611756d521776f78164c7cbaefafaa62aeee91e4dd1b1633099858d60b69a14f3cbc34ac55a7315c1784be2323a37a8f5f8aa881509c541517c791fa285994c83eebb1a66072ec4110328ad9f6c42f779d39717de6dfb3ece0256983ade964c92db53832a08aa30b112e6c9f62dfcf3d0abfcf380588504e3ce6f310c84a8ea82836c57f1e9bdd71064c7e498c92fe0d32369473ee92a56966c095e1662aa10b61262ecb9a40c7cfb12759f4a28e0076cb8bc1eba2e1115ce567e8447c0dfbe984f4a77810ffddaa0c72d23f398dce3da1884f62edb89d2ae9e4e14b309c893d82cdd0b46cda175ca9d52bde5622256d8a44a8fbf4a42635b2546566c192d0530398b5304dd7cecf10ded974434ce04371f9853a0122f18cf074e3df3fc385f0c895e19cdae76f2a3cf84edead7e79e3259159f0153f1aed834deceb4c03bb2206f6b51452a0b4ff4d163cf3b19c31b73fbd6c9eabb7ff2d21ce883723af94ac6931bf660878a18d00a6e34302fac8d95620f259bce99e40fdee59b57ab400b962dd741ae34678239034f9df8f3900dc679ecd9d1f24039fcf365f9fb12edffc899affd5ef97408cda92ddcf6058b0765246f0114daaf27f21d87b6002792bfd718abef6af81d0f4393170b86f6aa6216c33cb9a09ef8f02409320a2b7f7cdad16e7d35859c9f09ddaa51deed07730ac0515305dafe6ced7255982a675ac21f7af4cedbabc195dd44f6fe296381d158baea03e6205dfb4b732edbd4a3ea7d84700bd714a3b56f2ae5e179089d4c7bda52d3773f42ea1738036b60d14ebe287f16796ca21890dbcde334bae7562f59af230bf8495f6943839f8ea5f940692fba2ce96929e160b2005799e8967d6de02438afb168c812eabbb15698ceeacb44a05958acd47f0ee45b5d5ac118d58e53360441b6ed4a7476b9ffb223f223924013fc819353e100b6513c24a104653e0967d360b08d6a5a37430a244268bb8d521ee2b9a79a0abf0a6039d8e67ee4fc1a626bd30c2c47effd00deb2c423902fe02ce6821a2ea25e760955ebeecad35a604ffd3bb6bb1eaff23675e608684197182a1d223e0ca9e67b68ffe8f5e25347612ed736128809bdd76333c37b46e9423f6aa8046185", "9c13a051ce6c80ce589cf40106f02c871dc934f52d1265e054062fdebd0ce35fe1d5552846337015012460082bec5af437f3298a2601833489e8af5ffc27db5534918d25e92e0e6d67d9c43d0a3c10798207a5d6dc93b5ccecad97c87f173e048e8a364382a6d16a76f96ef7ae2871bcbd8f3c2875d8114174a66f92fb1755c36b8a62825e0ce6adb40fd34b7d0e60f2886e25a7133f5f88cffbee571114f472074e78587397681ae780f2de4269a3a4193f1f743e292407b1904215ba61af7137042e50bc17203ca7a6d25cec20e39872fcbae4eaddc15928e9ac3815b493b7bfdfa3c2ff6dcd9f7d4e8d2453e7580d6d85879ef50ae507394683267c8126cc1af64ace013d93a4552de4be0223ee0f5ba646aa7c4ee95a9fc6192a87a28f3564c71a13e335866fa0a55a34b9bc79d1d2376e808fa0f58f8ff5f33bb4ed8138392df252eda7d2dcee73eb957f592227c8636c61c9d3ab93de72b1d9e0bfab3a5e6381ae73290f8f1ec025d60b692e7608f9ea079141cf5180ef6610103f043f9ff149247ea531c065809eb9f1655ad963f92f5cc2c83ba0da9d79fc2cdec161492257bb24802084c17fad571f23ffaf245ee647423edb08733f2dc75e514eff0274003749cc7d5b0bf2462f5f2fd76970ea2820734f5833392939263decd635d5969dbf4a28e6292d899a3aa36fecd6c2e4220b7d8cbfec8137f6272e12f2b947466c0582f22548720d52b06d6c7f27aacdbb6e5e311ec08bd84812616199f7644694117ed7ae3858db7dd5483694c6ab4ad082547b4db18dc3e467dd9f37e1d1ba2c50d3d7022467c6077b4571c4e56cfca9393c2fe73d84f3d5708c9d91be3a69b43bcd49a2032fd374b7c90d47c8049359aec0d80963964e9ee2e2efc9104c5d22313a0257d076e0f891fd6b343b32c97b702502d9bba814df9ae0ccba8f6bf01f198ad136a37a9eda83383d574468eef9334eda4d0d3258482c6f5e288d3a5aa169ed14a95201e237dcf0d00d0b8e3f9c760f5a0ef1017b844246b5f342f4d36c872c59fc0c430c74b7359ddf5fa3fa3eb1feaab1b5251be0ab4e97e1f4243a3c95a3e5a7a66c73153991d2b70cf866baaa2fa7f9d6d8b4220d121dddb62cd81d78867e6dc5665e34353344f90cf41e2b7fee4031d7220513928adbee54a54e0dcff0221acbff1ae8374f36ada5665859225bb8de3b6bebec84fd6c3ededcb6cbab76cfd43c6a69b1d7947bacec6481143189b7a341ca49fdfb595842ac901ea63ce34748aa09f182579f5bc09c47badeb2d23091e6c6691cad7e7ea36e68251c6918f8dec82f94aa5ef402f483f2d851e8ed356514162b78bb43e378b6a8ea9d6c5c5e6a6ccd572e53969ed53087256232aabd65294268f2471bf40fadfcd8631b1b411b7371a03475a7a18e563c242f2f5068fad7aabd09a195f7fe2981fab663321e2e7235d27300ce4d4706520b827fd37fee1be5993a748adfd1b980f89d0477ac0205c91ee4813de9864ea054f990c7deb2a7eea08472220a79cfa392dd75a8d46a5e60bc3fb60176b2b038c75a8a5caf0e9c02f642174a41eff4ecd35edb1480005049bd9c5af07c93e8ac972529dc94906015b37c12382e731033f992920938f0fb1c481f4532ee1eeef660a1fbb831f8d56eed5960f7d63d9257740bb189d555f9adcee5611f42630f6a125e5899ff3563bb040536fc85c12feca7141f328f3994e78ae341c88aac7c4901985d4565c100ba6b3a114360af218ea9569c34028ddc0a3af9efb2502f42777848891ef5fcc488503a14426231fa465c3dba01860c7476854041deec3b67187a2d053d7f2b60cb7effe35ef6db8160f47470937cd1effd1c762b4498eb60f81d6fad5f859d04814d612b37302c7a220ddb26eac4ebf6b36357b91001691dc9e143dc1f598a8f7a41678e4ee36bd6eb755cfd7003567b10182fd3e9014de85ba77e8d830d57d9056bcbae77ce33bfc1c910aba84a5af6be4ae8af57323a672f5e7880d33b0f120130daa9212042c43c0430911dd2fcf8f05624a896a57ca4ebb096666a6810c0e59a52e2cd5d2140c636bdd5286e3ca0cc6cdc99b2a87226b000d99dd6d6d004dee4863d9a0b363c9bef3e7ca58e0fcaf23dc3d96d03fcf7dc6c5c29cdc6e9544526e8786e56be986793e26182fdbd2b5832af2f1736e524d398442af0669b22a0ee41842557a2e352b5e78963a7ecf9b8f9d29581332762a7c2271e2df9a61357f064921f5446e8385c398aef7bf80fa4b6c308cdc686699e523c2c8ee49b95b3bd05ecb00f2aeb17804575fb4eccc062ee4136dc95e9bee16df5307c5e1e3b154b8db9b3bbbbcee1f9acf539861320f7eaed0898fe1cd314ba5ad78a5bf1489642bc0ab9d001defa0dd420543e9970ce40e6dc20d3d17b8c968f8c412c6effee326d6ee9859a6977498caae66bb95a7e81f5435f6145ced7ec5f996ab8ce5153487f14c725b8a51f4293e2d5c7d2ed4cfd2ab82bb9f92d9c3deaf7ad9d647db84b9dbab0aa96546be71de6fe22c096222a8807bbd26629aac6ec7b60b76079305e69abb4d966d1cbe7b877b929fb82ad832f090ed1d3ebe5eb132def25a8a765f20a15f63155b50cfd5f5c21bbd5b04e51df16e24e96bd6181e6577fec3f805fdfcb066bfec0cdc5db0c3db29b59111bf4fee4d9eb774366458582f527af973e61d19f2db7174ab255dd88ad4e4e1c588b76d1519e1bb4eb50a60b7ad78a956d59152438c5783fe0f0e0449c7551a5aceefbcc0c23eecbbf3ee9f47adfce14b136ce34c08ba9bcf1e994ff8f97a87e181d065770376df510f5d70fb83e44bfc54a306d1192210797e79808e3c4af8c9c3cf8d647028de80498c2661de5d9d31d27a74bd96e7e3632ccce08c9aa9554d4ddf333602d4e8104024d884e0fe3a531750d5664dd122c5f679b14e99c572de60cf71b5327ff16d1a5848e4d8a2ed96734c0ca15450d6fdb2467b8bcfff09ae428cb7719f328312169272d220a0f1ad736ca4e6da1e7fd5143e268553c1898b30f0ee23d502293660a06fca44dbefa005c78243b7ccfc9f84ecfe82ae220679110f753d3541abe0dd9740a825461a60cbc1d95259787541024da968773e62f4b3162e2eabf2e17911d1c6f29380b0562b1dbacdb370e054b04b4e442469f3002f36cabcaa9498b2ae61a115eaed2bdc9a5d6ba122b054eeebceb1096cc5e3ba9b352c86b2e6635c1f2bf2263d50d45cf5847b1a748e087f5d8b917a5b755a8130403c71eabea0acdc1580f3538aa8387414cddb9fa96c6cb91ad34f30869612726b86db7aaabea19bf0105cdb8eeab756521bf410ccd1f5865875a561f777ad792edec830e73aaacc51b1555217da8e681e37c22af4793183f4f2550e3a032455f3d8520d3ca91c43dbe421fb6b648f61cbac3bba321ee7a1e81bf269fd06b7d306687f50f68b5b40b7cbe0ed28985599b25ed84280927bc6d3595c65705b0f8ecd300e4bc55e8d6f67c5982c6f4460e1637cde1ab8df4f39d5bce0a834a26f96195b497527a744bd087aa0bf1dddd92d4939963e2f4fce1086fc85fadca2b493f7728592edff19e95c865e82061cb95bed78b8ee46d4726a2365c97b57ab933ca2553d59514a0c6decc33f773cb07dee239c353c868dbf461c1e8a7ddb7c2a18e98bc1427efa6bca2a1657237c72fab5793caffd9b143d2b1c8e4ca7c448ae86e3c68c2cef4d1b71bcca5402ff295a17edec75a0245a5767bcde5c0eb755185dab543a971314c9666c79e343388d2a753b5a16233ff2af95f52a8df77e39c54ee380eeabbb9f393ffadce49547938a03efa7bcc037e43d91cc438befe6d6dae25133fe0ac592b90e39a58a0d572dce6c23a40a1cbbaa62bb85ed2969a5fa7551df9741d043ef3fef99aff1cc87d4a837185d131671c73c31ab9b18c2c586eee892866ed7da101d55613f11cc153d6e866d59dc0e083f016792b4fd9cf50acfcf7a1c24bbdfcff6442116094a2badd6b0e77008ae39b5fa57ac30f7996a4cefa4b8d036d9c5492c20e731f967a9b80687848abe81a75dd63a7b33732d17370e2fe20fff9660f733591d32cb9d7c114e32f20e4b1a256e9aa7033715c96d70699a545fd72440c1266cf8b021e6b6ffd92d1b76f3d3f38fcdd439bbaa69d95aff860c06d4c0e1d19eafa651f60ce23590176ad791ab8da11581b5a03eec1cf50ca8d2a7e8a40ad2a09f5321a593ba653ef91a136ef2740726adf08eb3b4007b83c23475b136c5c7ee4eafb7e884ce355c410e0b5173ff2b91180b9c19eec34fa7ae9f87be09a1cd07f3fd9c78315b1b20a1476ac8ff7a55d6e0aecd94921714bc2bb66b95915c859e792d2ad16ce165fc334c4826dd8b1ef9dbf111ce3dec9b43e01c30f530558e62f2c24cf01577436a38de4f1e66298369b31d6d2cc61a5e4c0dfa0a1d9c70b14732b0d9b58939c082fb98aaee466ad35156ced6ae13490f5de0882f579c5431cc877a32ae4289db6e8d26999c6da20017427b832e0d52e108b2b8dcc962de6f49f7fa80ef26ecd41078c2ac047fd51efcab2df2f9ba5580bc73ede70480f89922d24c09b33e05671cfa9548580cfe524a5d7dbf305cf8c2c2da5d54ba72074d6d8327e3d1ec413af0bf1c5aa8e139656de3693dbf66ce83843fd1ecb70d03386b9be4f02151725d5397565c57e5eddf6ed437897c6f1835fd71e535659e822354109638cafbcfe580dfdfc088413bcf4114665694875766c7cbda8e286abcbb0e937bf2de560294c25c3d2f5766f781b01e9deb0fb5ac562bfcbf4d26f87636e8cae23f39420378d4a957d60815db8218d9e7be76ba8409900d07bd56be066127727cc820d9c11fc0456090dd81524e8968c871dc189f6970176d6d7351a6de20fe7474eac7b569688d4d676e60c0b4a9c52b6dbdf65deaf3f278c2326567087819dde99075db93b3be7228f129ff9340261961d310be6f01715a6c7c98de24cf330daf95e74cd1ffde514138be01d511974ec24dbb4730c0fcb5f11b9ac2c81504455f4a919c6eaaef17639834be28ba214c23dc4e568ef6264f3ef052b89e7ec205dd2d36c4473f17955427e9a5b8d154af49ecdb6743a7c55581074e192a0df0dc4eeb52bcb3a7c5c72bf227965dd30a2f85d1a1a5ba3361e3fb38f9340f75bdab161c6ad0cd076357883ca14e5d27978876d15056bfa49b14fd7764ab69fb4604c92b5810704cdc452e8ae1cd003d28944b060d65050fdc8655c1231fb5415ba5b887435bf9925e667bd39ce500914e6ba14b0525f17762875b03df2207e75a9ee0f6e7c6d0e69cad6708ad48b86f36f08c0cd98529844bedc9c5556bbc2aca68b7b45cec1cfc380ae6ca1e98e5674ab62bace8c85594b8bb1aa4071d4bcd1c282de92a8f57b983a8ca60f0a9cf7333074f09a02258d298c61bf480ddd10b063aff51e1b563898b7e974bfeb4f2fbec71362a160997218c7c4fd63f27133bf93871362e066802c4100e7230b3770d772e8ba5a9e630f389a28e39055001f9c80a50e753fef94189be3bd126d892e3bd3727753490de4efca8cd26bec4927dcdc053629135d79f846bad3eb333fc8e619c995072bed84c176a7d9947acdb93a91b72a1089237614d0bddbcc8b4dfc3ef36b56e23a977e6419b9d7459d3dddb737d94e34e8dfaaacf389f70df613ae1df19159b8af156ddee59f4151f0e603aec0f1165cdf9457ee4dcbb5b1793e524e33c34d043b66c3459957e4870fcb9e3ebcfa0f3525230d2d220198b64cbb71"}) (fail_nth: 4)
>
> =* repro.c =*
> #define _GNU_SOURCE
>
> #include <dirent.h>
> #include <endian.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <signal.h>
> #include <stdarg.h>
> #include <stdbool.h>
> #include <stdint.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <sys/prctl.h>
> #include <sys/stat.h>
> #include <sys/syscall.h>
> #include <sys/types.h>
> #include <sys/wait.h>
> #include <time.h>
> #include <unistd.h>
>
> static void sleep_ms(uint64_t ms) { usleep(ms * 1000); }
>
> static uint64_t current_time_ms(void) {
> struct timespec ts;
> if (clock_gettime(CLOCK_MONOTONIC, &ts)) exit(1);
> return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
> }
>
> static bool write_file(const char* file, const char* what, ...) {
> char buf[1024];
> va_list args;
> va_start(args, what);
> vsnprintf(buf, sizeof(buf), what, args);
> va_end(args);
> buf[sizeof(buf) - 1] = 0;
> int len = strlen(buf);
> int fd = open(file, O_WRONLY | O_CLOEXEC);
> if (fd == -1) return false;
> if (write(fd, buf, len) != len) {
> int err = errno;
> close(fd);
> errno = err;
> return false;
> }
> close(fd);
> return true;
> }
>
> static int inject_fault(int nth) {
> int fd;
> fd = open("/proc/thread-self/fail-nth", O_RDWR);
> if (fd == -1) exit(1);
> char buf[16];
> sprintf(buf, "%d", nth);
> if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) exit(1);
> return fd;
> }
>
> static void kill_and_wait(int pid, int* status) {
> kill(-pid, SIGKILL);
> kill(pid, SIGKILL);
> for (int i = 0; i < 100; i++) {
> if (waitpid(-1, status, WNOHANG | __WALL) == pid) return;
> usleep(1000);
> }
> DIR* dir = opendir("/sys/fs/fuse/connections");
> if (dir) {
> for (;;) {
> struct dirent* ent = readdir(dir);
> if (!ent) break;
> if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
> continue;
> char abort[300];
> snprintf(abort, sizeof(abort), "/sys/fs/fuse/connections/%s/abort",
> ent->d_name);
> int fd = open(abort, O_WRONLY);
> if (fd == -1) {
> continue;
> }
> if (write(fd, abort, 1) < 0) {
> }
> close(fd);
> }
> closedir(dir);
> } else {
> }
> while (waitpid(-1, status, __WALL) != pid) {
> }
> }
>
> static void setup_test() {
> prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
> setpgrp();
> write_file("/proc/self/oom_score_adj", "1000");
> }
>
> static void setup_fault() {
> static struct {
> const char* file;
> const char* val;
> bool fatal;
> } files[] = {
> {"/sys/kernel/debug/failslab/ignore-gfp-wait", "N", true},
> {"/sys/kernel/debug/fail_futex/ignore-private", "N", false},
> {"/sys/kernel/debug/fail_page_alloc/ignore-gfp-highmem", "N", false},
> {"/sys/kernel/debug/fail_page_alloc/ignore-gfp-wait", "N", false},
> {"/sys/kernel/debug/fail_page_alloc/min-order", "0", false},
> };
> unsigned i;
> for (i = 0; i < sizeof(files) / sizeof(files[0]); i++) {
> if (!write_file(files[i].file, files[i].val)) {
> if (files[i].fatal) exit(1);
> }
> }
> }
>
> static void execute_one(void);
>
> #define WAIT_FLAGS __WALL
>
> static void loop(void) {
> int iter = 0;
> for (;; iter++) {
> int pid = fork();
> if (pid < 0) exit(1);
> if (pid == 0) {
> setup_test();
> execute_one();
> exit(0);
> }
> int status = 0;
> uint64_t start = current_time_ms();
> for (;;) {
> if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid) break;
> sleep_ms(1);
> if (current_time_ms() - start < 5000) continue;
> kill_and_wait(pid, &status);
> break;
> }
> }
> }
>
> uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff};
>
> void execute_one(void) {
> intptr_t res = 0;
> memcpy((void*)0x20000140, "/dev/kvm\000", 9);
> res = syscall(__NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x20000140ul,
> /*flags=*/0ul, /*mode=*/0ul);
> if (res != -1) r[0] = res;
> res = syscall(__NR_ioctl, /*fd=*/r[0], /*cmd=*/0xae01, /*type=*/0ul);
> if (res != -1) r[1] = res;
> res = syscall(__NR_ioctl, /*fd=*/r[1], /*cmd=*/0xae41, /*id=*/0ul);
> if (res != -1) r[2] = res;
> *(uint16_t*)0x20000200 = 0;
> *(uint16_t*)0x20000202 = 0;
> *(uint32_t*)0x20000204 = 0x80;
> *(uint64_t*)0x20000208 = 0x1000000000000;
> *(uint64_t*)0x20000210 = 0;
> *(uint16_t*)0x20000218 = 0;
> memcpy(
> (void*)0x20000280,
> "\xf9\x0d\x36\x6a\xdb\xd2\xa9\xb5\x52\xed\x45\xbf\x03\x0c\x9f\x0b\xe1\x50"
> "\x24\xf9\x05\xfc\x22\x08\x6f\xd1\xbd\x73\x3a\x85\xe3\xa6\x8c\x1e\xe7\x61"
> "\x92\x08\x43\x0f\xf8\x9e\x6a\xb2\x22\xb6\x5f\xc6\x9b\x71\x3f\xb3\x44\xd9"
> "\x63\x5a\x76\x13\x95\x33\xa9\x65\xa7\xbd\xd4\x47\x7d\x8d\x99\x5e\x8a\x64"
> "\xbd\x3b\x71\x9f\x72\x23\x4a\x05\x33\x03\xf0\x11\x7f\xb9\xd5\x98\x47\x50"
> "\x11\x8c\x10\x9c\xb6\x44\xda\x61\xac\xf8\xdc\x8e\x27\xe4\xc2\xc8\x72\x7c"
> "\xcd\xd6\x65\x8b\xd9\x17\x78\xcb\x54\x40\xfe\x1a\x36\x59\x88\x86\xdd\x12"
> "\xe8\x4f\x3b\xab\x5f\xa8\x48\x18\x2e\xf3\x05\xf2\xee\xb7\x25\xde\xa9\xa8"
> "\x79\xa0\xab\xc4\xec\x87\x00\xa5\x03\x93\x8a\x26\x2a\x06\x75\x7b\x18\x83"
> "\x96\xe6\x11\xdd\xa8\x3a\xcf\xa6\xc8\xc6\x9a\x35\x6f\xc2\xf7\xf1\xf2\x1d"
> "\x53\x1f\x87\x31\x1b\xcb\x5f\x05\x46\xa7\xde\xc4\xc6\x17\x8e\x4c\x70\xcf"
> "\x19\xa2\xc7\xa5\x68\x9f\xdb\x85\x75\x00\x7e\x38\xd6\xa5\x8c\xe8\x59\x56"
> "\x37\x21\x79\xa1\x2a\x33\x76\x81\x20\x27\x63\xfd\xdc\x22\xb7\x84\x6d\x14"
> "\x57\x43\x6c\xff\xe7\x43\x2a\x5b\x01\x7c\x3d\x63\xd1\xb6\xa0\xfc\xe4\x25"
> "\xee\x33\x59\xb9\x26\x44\xc9\xdf\xea\x80\xe5\xcf\xc1\x79\xfb\x34\xe2\x62"
> "\x3a\xc6\x91\xf9\xd2\x7a\x14\xed\x4e\xed\xbd\x80\x71\x42\xc6\x15\x3f\x93"
> "\x61\x1d\x66\xf9\x0b\xfc\xd7\xe5\xd4\x3b\x10\x25\x39\xcb\x7d\x5e\xba\x62"
> "\x8e\x5e\x40\xe3\x84\xd7\x31\xc2\x23\x24\xeb\xd1\x75\x1e\x71\x8b\x44\x2d"
> "\x3a\x79\xe2\x91\x40\x63\x91\x9a\xee\xef\x3e\x1b\x6b\x15\xe0\xf8\x3b\x9b"
> "\x73\x46\x1e\xfe\x9b\xea\x9e\xf2\x61\x0c\xe3\xe4\xad\x83\x3a\x39\xdf\x41"
> "\xf6\x62\xdb\xa0\x3f\xb3\xf7\x6c\x53\x34\x96\xed\xac\x28\xcf\x62\x74\x5d"
> "\x88\x78\x7b\x12\xe0\x4b\x2d\xbb\x02\xcd\x6f\xb6\xb7\xd1\xe7\x95\x68\x6e"
> "\xd6\xbc\x9c\x4d\xd7\x71\x65\x72\xe3\xec\x52\x1e\xa3\xd9\x04\xb0\x33\x87"
> "\xdd\x04\x00\x5f\xf2\x6b\x50\x2e\x2c\x98\x3d\x4f\x2f\xbc\x89\x06\x12\x1e"
> "\x76\x6d\xf2\x4b\x36\x42\x21\x0d\xe4\x7b\x72\x24\x2a\xdc\x43\x5c\xd5\x89"
> "\x94\xe7\xb5\xef\xfd\x57\xa7\x15\xa2\xf7\x77\xaf\x77\xd4\x8b\x20\xa5\xb0"
> "\x34\x0a\x05\x99\x6c\x54\xf5\xbb\xf3\x69\x11\xf9\x95\xca\x43\xc8\xa3\x4e"
> "\x7a\x1e\x3d\x53\x10\xc6\xd3\xff\xca\x65\x83\xd9\xc7\x0d\xf1\x81\x28\x7c"
> "\xee\x3c\x28\x1a\xa5\x2d\x39\x00\x4e\x47\x65\x19\x0d\xe5\xd6\xb1\x62\xd6"
> "\xac\xfc\x71\x83\x39\x59\x62\xd0\xcb\xae\x56\xcd\x5b\xaf\xd4\x19\x81\x87"
> "\x02\xd6\xa2\x70\xf2\xdd\xcb\xc3\x8e\x37\x17\x21\xa3\x17\x1f\xf8\x6d\xdb"
> "\xd7\x18\x17\x37\xa8\x28\x57\x80\x5e\xb8\xfb\x9b\xd0\xdc\x58\x25\x10\xde"
> "\xca\x4e\x3b\xa8\x1a\xf6\x46\x97\x57\xb9\x5d\xa1\xb8\xfd\xe0\x36\xf3\x36"
> "\x34\xf9\xb5\x4c\x84\xc6\x45\x30\x43\x6a\x1c\xe9\xc4\x38\x29\xa1\x80\xbb"
> "\xcb\xe4\x51\xc6\x33\x64\xbe\x9f\xf7\x3d\xfd\x42\x5d\x07\xde\xb2\x7f\x5c"
> "\x42\x4f\x13\xb3\xd5\x16\x26\x23\x59\x83\x8b\x3a\x95\x29\xf5\xf0\x38\xc7"
> "\x01\xdf\x10\xab\x2e\xdb\xd8\x7b\xbc\x6d\x6f\x46\xa6\xd3\x10\x2e\xe4\x7d"
> "\xc8\x11\xd3\x7e\x7a\x71\x94\x55\xff\xfe\xd1\x6d\x50\x10\x59\x14\x78\x77"
> "\xd4\x7e\x8d\x11\x07\xf1\x70\x71\x24\x26\xc6\x73\xe8\x4f\xdc\x3f\x59\x3f"
> "\x4b\xed\x7f\x22\x65\xce\xda\x5d\x26\xe4\xd6\x57\xf8\x40\xfa\x90\x68\x1d"
> "\x74\x4e\x54\xe9\x27\xb4\x09\x34\xb1\x30\x9b\x80\x09\x60\xff\xb3\x7f\xeb"
> "\xc9\xed\xc9\x63\xfe\x0b\x8c\x5a\x0b\x1a\x99\x9c\x11\x8b\x9a\x40\x8f\x2f"
> "\x50\xa4\xf4\x7d\xb2\xc7\x79\x3a\xcd\x49\x7b\xe2\xe8\x1a\xbf\xd8\xea\x9a"
> "\xbc\xf8\x23\xb6\x03\xc2\x4f\x15\xef\x31\xf1\x40\x64\xb8\x39\x94\x17\xf2"
> "\x7d\xc1\xdc\xf3\xa4\x50\x48\x00\x71\xf0\x1c\x3b\x7d\x70\x6f\x23\x55\x3d"
> "\xb8\x5d\x0c\x77\xd6\x21\xa9\xc8\x83\x58\xac\xe8\x8e\x4e\x43\x1c\xb9\x49"
> "\x2b\xe3\x5c\xf7\x40\x7a\x35\x84\x4a\x0f\x05\xcb\xcd\x52\xdf\x3c\xdc\x40"
> "\x68\x3b\x39\xcc\xca\x78\x0c\xec\xad\xe7\x93\x3b\xdf\x4c\xd5\x11\xb7\x06"
> "\x7b\xbd\x16\x1f\x7a\x9a\x1b\x46\x3f\x41\x64\x26\xcc\x57\xaf\x56\x31\xfb"
> "\x1c\x94\xa9\x19\xd2\x0e\x46\xa5\xa6\x84\xb4\x37\xd1\x5e\x5f\xc3\x01\xea"
> "\xae\x56\x42\x16\x8a\x23\xd9\x0f\xe1\xa3\x81\x14\xe6\x19\x99\xd6\x0d\x7a"
> "\xc7\x6a\x8a\x24\x04\xfb\x7d\xa4\xfa\x4a\x07\x01\x9b\xa9\xbf\x89\x64\x51"
> "\x91\x75\x17\xb7\x00\x11\x99\xe5\x86\x74\x4d\x3a\x9a\x44\xb4\x6e\x0f\xf4"
> "\xff\x17\x69\x35\x8a\x70\xf6\xb4\x74\xaa\xab\x04\x67\xbd\xd5\xc4\xef\x1b"
> "\xf2\x50\xab\x9f\x21\x16\x10\x12\xf6\xaa\xc0\x9b\x42\x5f\xcf\x73\x52\xda"
> "\xdb\x96\xd9\x76\x1c\xc4\xa0\xdf\x85\xf1\xc9\x19\x9e\x72\x3c\xa6\xad\xd6"
> "\x25\xe5\x5e\xad\xda\x1c\x81\xa1\xe4\x90\x0b\x3f\xa1\x77\xa1\x12\xea\x8c"
> "\xab\xdf\x5d\x7c\x3c\x31\xcd\xe2\x84\x02\x41\xe0\x67\xf1\x50\xdb\x66\xf6"
> "\x1a\x0c\xa8\xa1\x74\x96\xda\x2d\x9f\x93\x71\xc5\xba\x86\x28\x1a\xa8\x36"
> "\xec\xbf\x07\x20\xb8\x53\xa2\x1b\x25\xd4\x21\x16\xa1\x51\x46\x83\x0a\xdc"
> "\x77\x4a\xf8\xac\xc6\x1e\x71\x6b\xec\xec\x91\x26\xa7\x26\x07\xcb\xa1\x53"
> "\xe3\x8d\x49\xf6\x49\xe0\xd1\x07\x88\x27\x06\x73\x8c\xf3\x07\xf5\x6d\x85"
> "\x69\x15\x40\xb6\x82\x9f\xe6\xd7\x5e\xe3\x9e\x10\xbd\x40\x38\x51\xcf\x0e"
> "\x6b\x19\xd6\x46\x6b\x6c\xec\xd5\x4a\xf0\x5f\xc1\xc8\x67\xfc\x6f\xc8\xa2"
> "\x33\xfc\xbf\xab\xcc\xc0\x3b\x75\x26\x66\x9d\x14\x5f\x8b\x4f\xe8\x96\x07"
> "\xec\x58\x6a\x0d\x0e\x3e\xb2\x5b\x00\x31\x34\xf2\x81\x4c\x62\x21\xc2\xb3"
> "\xcd\x53\x12\x1f\x24\xe7\xc5\xbc\xf9\x5d\xda\xed\x80\x3b\xfb\x50\xf6\x44"
> "\x4f\xaa\x82\xd5\xdf\x34\xa0\xc5\x4a\xc2\x87\x07\x30\x18\x1f\xeb\x0b\xe7"
> "\xd2\xcd\x94\xf7\x55\x67\x77\xe8\x78\xd4\x67\xf3\x07\xed\x54\x7b\x70\xab"
> "\xda\x15\x3e\x4c\xd3\x37\xd9\xb7\x3f\x06\x03\x2e\x71\xc1\x7a\x52\x0a\xfe"
> "\x4f\x2b\x56\x98\x03\x48\xbc\xc3\x97\xb1\x0d\x6a\x6f\x92\x2a\x72\xf0\xb6"
> "\x17\x42\x2b\x24\xe3\x2f\x1a\x2a\x2c\xdb\xb5\x5d\x08\xdf\xbd\x2e\x89\xa8"
> "\x03\x5a\xfe\xd0\x05\x24\xf0\x25\x80\xa9\x21\xdd\x42\x8c\xcd\xe7\x14\xb6"
> "\xa9\x41\x53\x40\xf1\x7e\xf8\x6c\xd6\xd5\xbd\x08\xb1\xe5\x14\x0e\x70\x50"
> "\xcf\xb2\x6a\x9d\xef\xa3\xa0\xc2\xb4\xa1\xcf\xa5\xbf\xea\x04\x6b\xb4\x44"
> "\x8e\x96\x37\x83\x64\x92\x49\xd8\xa9\x0c\xab\x7b\x1b\xe2\xcb\x9b\xa4\xba"
> "\x93\x1b\x8e\xb1\xd6\xc4\xd8\x32\xfa\x91\xe0\x73\xc2\xc3\x6b\xaf\xaa\x0a"
> "\xb7\xbc\x9a\x59\x46\x32\xf7\xe7\x57\x1f\x6c\x75\xd5\x1b\xd2\x9a\x33\xdc"
> "\xa2\x17\x0e\xdd\x0a\xf3\x82\xe8\xdd\x5c\xf9\x9f\x2d\x18\x1e\xd5\xde\xd2"
> "\x90\x71\x6b\xb6\x54\x6b\x93\x5a\x0f\x7e\x92\xe0\xb0\xc9\xf8\xbc\x83\x90"
> "\x63\xcc\x8c\x36\x67\x70\xd8\xdb\x90\x92\x97\xdc\x72\x9d\x2d\xbb\x18\x2c"
> "\x9a\xcf\xa0\x7a\x3a\xa6\x5a\x03\x34\x9b\xcd\xb0\x63\x55\xaa\x96\x5b\x75"
> "\xea\x11\x8a\x8f\xeb\xe7\xfb\xab\x8c\x50\x1b\x7b\xbe\xa3\x9c\xd9\x32\xf1"
> "\xfa\x51\x8d\x79\x51\x48\x2e\x26\xc6\xd6\xac\x79\xbf\x15\x4a\x4a\x03\xde"
> "\x9e\x49\xbb\xbc\xb9\xc0\x60\xba\x50\x73\x8e\x4c\x80\xca\x99\xfb\xe6\x7f"
> "\x4e\x87\xa2\x49\x75\x5e\x99\x9e\xf2\x7c\x4c\xfc\x03\x9f\xdf\x87\x49\x2b"
> "\x84\x89\x9b\x9e\xb7\x79\x5f\x7e\x74\xcf\x99\x3b\xd0\xb5\x75\x72\x14\x48"
> "\x9e\x7f\x5d\x77\x05\xa9\xd5\x6d\xe1\xc6\xea\x70\xc5\x14\x2e\xee\x2b\xef"
> "\xfd\x24\xc8\xa0\xeb\x13\xdc\x33\xde\xc8\xdf\x29\xb0\x98\x9e\x8a\x5c\x30"
> "\xd3\x10\x2f\x55\xa3\x34\xb7\x8e\x15\xdd\x69\x61\x78\xf4\x8a\x1e\x97\xde"
> "\x87\x36\xe5\x73\x27\x42\xc2\x06\x0a\xea\xeb\x94\x99\x57\x5b\x79\x5f\x08"
> "\xcc\x72\x9c\x18\x1e\xcf\x91\x3e\xb5\x28\x0d\x60\x87\xfa\x7f\x6a\x65\xdf"
> "\x45\x85\x37\x57\x50\x0c\x1f\x01\xb9\x1f\x02\x00\x55\x59\x35\xdd\x3b\x8b"
> "\xed\xd5\xf8\xc8\xeb\x2f\xf3\xac\x44\xc9\x6b\xe7\x38\x71\xea\x26\xc5\xe5"
> "\xf3\x50\x3e\x7c\x5d\xfd\xdd\xfb\x92\x9b\x26\xb1\xd2\x76\x6d\xf9\xbf\x41"
> "\x9c\x55\x97\xec\xf4\x93\xa9\xf3\x63\xe0\xd1\xfd\x17\x01\xf2\xb2\x53\xaf"
> "\x5a\xfe\x04\xf8\xb2\x3f\x8b\xf8\xe6\x93\x55\x03\xa9\x39\xca\x3a\x9c\x15"
> "\x03\x47\x4b\x35\x01\xea\x50\xb4\x4e\xf7\x1a\x55\xf3\x4f\x78\x7d\x4f\x68"
> "\x9a\x6d\x67\x21\xb8\x2a\x8e\xb0\xd4\x7d\x0f\x5d\xde\x98\xd1\x2a\x22\x59"
> "\x88\xb6\x39\x9f\x7b\xef\xae\x3b\x0c\xc2\xdb\x13\x27\x5b\xa0\x92\xe9\xbd"
> "\xe3\xab\x3b\x47\xe4\x7d\x36\xf6\x9a\x94\xee\xe8\xc0\x9c\xa7\x85\x74\xbe"
> "\xbc\xea\xf0\xce\x4c\x23\xa5\xe7\x91\x7e\x69\x7f\xb7\x6b\x08\x64\xac\xca"
> "\xda\x8b\x30\x16\x54\xc5\x6b\x0d\x96\x29\xe8\x51\x71\xc4\x86\x04\x60\x02"
> "\x25\x05\xa7\x3d\x2a\xcb\xcf\x5c\xd5\x56\x86\xe9\xc6\x2e\x55\x07\x30\xa1"
> "\xd2\x19\xf4\x6a\xc2\x3d\xbf\x13\xc6\xe1\x01\x05\x93\x80\xa4\xa3\x19\x6e"
> "\x4d\xb2\x09\xb4\x12\x9b\xd1\x30\x22\x7f\x34\x93\x93\xef\xef\x97\x28\x60"
> "\x9d\x4f\x2d\x4d\x1c\xbd\xf5\x60\x5c\x5f\x25\xc9\xde\xb6\xa1\xdb\x3b\x71"
> "\xe9\x5e\x4b\x1c\x5a\xf5\x5f\x01\xf2\x33\x0f\x2a\x6f\xd2\xb2\xc0\xf7\x25"
> "\x80\xdc\x4d\xa2\x76\xc8\x6d\xab\x19\xf8\x17\xf9\x0d\xfa\x7e\x6f\xf4\x4f"
> "\xb9\x0e\xbe\x9d\x5c\xea\xf8\x79\xe0\xa8\x97\x37\x55\xba\xcd\x60\x27\x44"
> "\xbd\x98\x73\x97\xe6\x77\x5f\xb6\x57\x15\xa3\x0d\xea\x88\xba\xb2\x5b\x38"
> "\xe5\x4a\x97\xb2\x1d\x71\x6e\x88\x5a\x5d\x92\x19\x70\xf8\x1a\xb8\x16\xd4"
> "\x2d\x1f\xfe\xe0\xa4\x45\xd5\x2f\x03\x6f\x89\x2d\xca\xab\xc6\x5f\x05\xcd"
> "\xe9\xe3\xc3\xaa\xeb\xf9\x01\x68\xf3\x86\x6d\x58\x0d\x72\x2a\x6b\xce\x39"
> "\x9a\xfb\x34\x19\x48\xd1\x7b\xed\x8c\xdb\xf7\x25\xef\x75\xe2\xc7\xd6\xda"
> "\x38\x44\xc1\x18\x47\x09\xf7\x48\xd2\xe1\x8c\xf5\x0a\xd9\xf9\x4b\x2b\x93"
> "\x6d\x6f\x6a\x48\x3b\x0c\x49\x0a\xc6\x41\xc1\xc4\x70\x64\xd1\x44\xe5\x59"
> "\xad\xda\xf1\xa1\x62\xdc\x90\x13\xda\xb6\x58\x9a\x08\x87\x9b\x2c\x81\x40"
> "\xc4\xc1\xbc\x75\x78\x35\x89\xab\x96\x68\x58\xbb\xd5\xd4\x70\x69\x78\xca"
> "\x65\xca\x40\xc4\x95\x41\x67\xc5\xdc\x9f\x9a\x0f\x0d\x85\x8f\x2f\x1e\x5b"
> "\x1d\x79\xec\xc2\x81\xa2\xef\xe2\x51\x46\xa2\x36\xc7\xd3\x12\xf1\x66\xf4"
> "\x40\xfe\xce\x7e\x16\x18\xbe\xe1\xd2\x24\x4e\x88\x4e\x23\xee\xa7\x56\x8c"
> "\xee\x17\xa4\xc7\x26\x2b\x45\x0b\x8e\xfd\x8b\x4e\x64\xe2\x3b\x9f\x27\x56"
> "\xf4\xae\xb4\x95\xb9\xb6\x04\xef\xbd\xf7\xc9\xb1\xd7\x9f\x30\xf2\x6e\xa5"
> "\xb2\xb6\x55\xc3\xf9\xa9\x31\xf5\x41\x53\xf2\x3f\xb0\x64\xa9\xf1\xd2\xeb"
> "\x30\xb9\x83\x73\xc1\x80\xf7\x6e\x72\xdf\x20\xbc\xf5\xe9\x93\x22\xe0\x0b"
> "\xbe\x7b\x3a\x9e\x6a\x9a\xb2\x73\xcb\xa3\x65\x96\xe8\x80\xee\x69\xc0\x06"
> "\xe8\x09\x81\x72\xe8\x6a\xc8\xdc\xb6\xbf\x56\xc8\x55\x7d\x7d\x08\x28\x24"
> "\x5c\xe2\xc9\x7b\x7e\xea\x5b\xbe\x6f\x6e\x61\xb2\xc7\x0a\xad\xa5\x5e\x1e"
> "\xff\x78\x2d\xfd\xdb\x06\x17\x60\xd2\x6d\xa0\xe0\x8b\x52\x23\xf4\x6e\x95"
> "\x06\x61\xd3\x1e\xd8\x16\x1b\xf0\x42\xc2\x83\x6f\xf6\x90\x3d\x56\x0e\xfb"
> "\x36\x7c\x47\xbc\x67\x85\x9e\x2e\x5b\xc1\x88\x16\xaa\x5c\x31\xd7\x85\x8a"
> "\x6e\x73\x0a\x82\x58\x00\xff\x41\x74\x62\x3d\xfd\x0f\xe0\x50\x42\x27\x17"
> "\x1c\x2f\x7b\xd1\x84\x97\x88\x9f\x90\x2a\x3d\x80\x25\x3c\x67\x11\x1b\x55"
> "\xe6\xae\xc1\xff\x5f\x2f\xac\x56\xdd\x0e\x4b\x51\x5e\x56\xfa\xfe\x53\xdc"
> "\x52\xc3\x43\xae\xf8\x56\x42\x38\x0e\xf8\x47\xfd\x11\x7d\xc2\xf8\xea\x66"
> "\xb6\xd2\x02\xd6\x28\xb7\xd0\x88\xdd\x45\xe5\x32\x26\x74\x8d\xf6\x60\x19"
> "\x73\x25\xe9\xc4\x6e\x2b\xb0\xed\x5a\x9b\x12\xbe\x9f\x5e\x68\x59\x4d\xfd"
> "\xdd\xe7\x69\xba\x90\xb5\x9b\x4d\x37\xa8\x93\xd7\x66\x17\x63\xe0\x53\x42"
> "\x8e\x3f\xd5\xd4\x36\x8a\x56\x8c\x98\x20\x8c\x6a\xb4\x90\x8f\xde\xb1\xc5"
> "\xaf\xc8\x4c\x8d\x18\xa8\x3d\x9f\x37\x99\x49\xae\x50\x09\x1a\x41\x05\xed"
> "\x18\x3f\x0c\xb1\xae\x49\xc8\xda\x6c\x64\x33\xc2\xc9\xe5\x73\x36\x22\x65"
> "\x31\x2d\xb1\x02\x02\x98\x6b\xf5\x64\x46\x4c\xaa\x0e\x0f\xd7\x13\x1b\xda"
> "\xf2\x20\x9e\x3c\x8b\x60\xb2\xd4\xa5\x28\x1e\x97\xb3\x1f\x4b\x3b\xa1\x94"
> "\x1d\xbe\xd4\x56\x8e\xd1\x0b\xc6\x8e\xd1\x13\x2e\xa6\x85\x2b\x23\x04\x41"
> "\x65\xdc\x1d\x61\xbe\x65\x37\x48\x0f\x36\xa9\x58\x96\xb1\x8e\xf5\x71\xe1"
> "\x9b\xe3\x2b\x39\xec\xd1\xea\x31\x30\x64\x8d\x61\x8f\x71\xf9\x6d\x06\x1d"
> "\xd0\x87\xf2\x62\xf9\x77\xda\x66\x73\x29\xac\x43\x9b\xd7\xf8\x44\xf9\x99"
> "\x13\xa2\x04\xa9\x0b\x72\xf6\x73\x0d\x6b\x67\x67\x04\x76\xc5\xe6\x54\xae"
> "\x1a\x13\x9e\xb9\x8f\x4e\xf5\x69\x08\xa6\xa2\x09\xa1\xb9\xc0\xc8\x9f\x35"
> "\x0a\x9c\xe7\x19\x05\x05\x72\x68\xba\x14\x7c\xf3\x52\xf4\xd8\x02\x1e\x25"
> "\xd4\x7a\x7a\x91\x88\x5a\x71\x30\x3e\x6c\xb5\x5e\x85\xaa\xf4\xe2\xe9\x06"
> "\x2b\xea\xc4\x0a\x8d\x42\x7f\x44\xff\x21\x56\xd2\x65\x78\x89\xdf\x23\xfe"
> "\x9a\xb4\xc2\xba\x87\x03\xca\x9d\x3a\x2b\x7c\x55\x04\xb0\x50\x52\xda\xe4"
> "\x83\x43\x24\xdf\x86\x78\x0b\xfe\x5d\x69\x7e\xff\x15\xcd\x68\x82\x0e\xa5"
> "\xf6\x70\xa7\x81\xec\x9b\x15\x67\xcb\x2b\x47\x8d\x25\x38\xc6\xf5\xd0\x41"
> "\x6c\x4b\xf8\xa6\x3c\x98\x00\x13\x2c\x03\x79\x94\xbb\x28\x71\x7d\x7b\x2c"
> "\xec\x27\x54\xef\x25\x7b\xb3\xd9\x38\x9b\xe8\xd2\xec\xfe\x61\x64\xd2\xd0"
> "\xbc\x4c\xd0\x34\x73\x91\x7c\x3c\xc4\x5c\xc5\x77\x14\x4f\x50\x36\x92\x0c"
> "\xbb\x99\x02\x90\x9d\xf4\x13\x83\xba\x9e\xe9\x6e\xdd\xd1\xa9\xe0\x24\x95"
> "\xbd\xb7\xb4\x30\x80\x83\xf8\xa6\xe5\x26\xb2\xcf\x3c\x91\x62\x18\x23\x77"
> "\x5f\x39\xbe\x51\xa3\x81\x02\x41\x4e\x68\x3a\x58\x89\xea\x44\x58\xec\x78"
> "\x58\x62\xdb\x40\xf6\x54\x15\xc1\x82\x87\x0c\xd2\x47\xab\xbc\xc9\xd4\xd4"
> "\x4a\x11\xfa\xe6\x10\xa5\x89\x96\xc5\x19\x67\x7c\x00\x6e\xc8\xd7\x95\x9d"
> "\xfd\x70\x9f\x5d\xd5\x22\x28\x86\xde\x32\xc0\x17\xa2\xd8\x86\xe9\x75\x27"
> "\x4e\x3d\x64\x66\x5e\x6f\x2f\xaf\x61\xa4\x40\x40\x9e\xea\x67\x5c\x76\x31"
> "\x03\x1d\x66\x49\xdc\xb7\x8e\x97\x3b\xc2\x72\x65\x83\xd1\x8d\x00\x7b\x78"
> "\x7a\x72\xa6\xbc\x14\x02\x8a\xb3\x7f\xe7\x56\x1b\x77\x3d\x81\x27\x78\xe8"
> "\x0e\xcf\x54\x77\xc3\x0e\x0b\xe5\x5a\xc5\x9b\x8d\x07\xcf\x19\x47\x5e\x49"
> "\xa8\x1c\x1c\x92\x3b\x6b\xdd\x97\xf5\xce\xf6\x48\xd0\x34\xd1\x18\xa4\x91"
> "\x3a\xdf\x2d\xd3\xb5\x8d\xb4\x13\x0f\xa3\x5d\x2b\x44\xbb\xb3\x0f\xfd\x34"
> "\x20\x81\x2e\xc7\xe6\x0b\x65\xdb\xf7\x68\x6d\x7a\x01\x57\x7b\x24\xe2\x01"
> "\x32\x17\x7a\x24\xcf\xe7\xc6\x8b\x93\x16\xba\x8b\xdd\x77\x12\xc1\xd3\x98"
> "\xee\x28\x5d\x54\x6d\x5d\x9f\x27\x21\x0b\x1b\x75\x21\x75\x40\x60\xdd\x69"
> "\xdf\xd0\xac\xf3\x32\x4c\x3e\xee\xfe\x2d\xc4\xc0\x8c\x01\xae\xe9\x83\x58"
> "\x2a\xed\x6f\x29\x1c\xe8\xf3\x49\x69\x6b\xdc\x08\x8c\xe3\xfd\xee\x94\x64"
> "\xb0\x8e\x6d\xc3\x80\x0a\xfc\xb2\x90\xd9\x54\x6a\x42\x2d\x79\x27\x27\xcf"
> "\xb8\x9f\x4c\xfd\x8b\xfa\xd8\xa9\x74\x60\xfc\x23\x1b\x29\x90\x1c\x02\x4b"
> "\x9b\xe0\x9b\xd9\xe3\x0d\x14\xb7\x2b\xb4\xba\xca\x5b\xcd\x59\x1d\xcf\x86"
> "\x3d\xcd\xe6\x0c\xa6\x48\xb5\x6c\xd3\xb7\x7c\x4f\x14\x5c\xfb\xcd\x11\x72"
> "\xba\x5f\x59\x7f\xa2\xf2\xc7\xee\xe0\x29\x1c\x68\xc1\x11\xc7\x91\x4d\x60"
> "\xd4\x51\x98\x77\x47\x13\x8d\x78\x8e\x87\xdb\x35\x5b\x86\x08\x88\x7b\x99"
> "\x73\x71\xeb\x88\xdd\x0e\x23\x19\x78\x4f\x99\xd3\x95\x71\x2e\x15\xf6\x11"
> "\x75\x6d\x52\x17\x76\xf7\x81\x64\xc7\xcb\xae\xfa\xfa\xa6\x2a\xee\xe9\x1e"
> "\x4d\xd1\xb1\x63\x30\x99\x85\x8d\x60\xb6\x9a\x14\xf3\xcb\xc3\x4a\xc5\x5a"
> "\x73\x15\xc1\x78\x4b\xe2\x32\x3a\x37\xa8\xf5\xf8\xaa\x88\x15\x09\xc5\x41"
> "\x51\x7c\x79\x1f\xa2\x85\x99\x4c\x83\xee\xbb\x1a\x66\x07\x2e\xc4\x11\x03"
> "\x28\xad\x9f\x6c\x42\xf7\x79\xd3\x97\x17\xde\x6d\xfb\x3e\xce\x02\x56\x98"
> "\x3a\xde\x96\x4c\x92\xdb\x53\x83\x2a\x08\xaa\x30\xb1\x12\xe6\xc9\xf6\x2d"
> "\xfc\xf3\xd0\xab\xfc\xf3\x80\x58\x85\x04\xe3\xce\x6f\x31\x0c\x84\xa8\xea"
> "\x82\x83\x6c\x57\xf1\xe9\xbd\xd7\x10\x64\xc7\xe4\x98\xc9\x2f\xe0\xd3\x23"
> "\x69\x47\x3e\xe9\x2a\x56\x96\x6c\x09\x5e\x16\x62\xaa\x10\xb6\x12\x62\xec"
> "\xb9\xa4\x0c\x7c\xfb\x12\x75\x9f\x4a\x28\xe0\x07\x6c\xb8\xbc\x1e\xba\x2e"
> "\x11\x15\xce\x56\x7e\x84\x47\xc0\xdf\xbe\x98\x4f\x4a\x77\x81\x0f\xfd\xda"
> "\xa0\xc7\x2d\x23\xf3\x98\xdc\xe3\xda\x18\x84\xf6\x2e\xdb\x89\xd2\xae\x9e"
> "\x4e\x14\xb3\x09\xc8\x93\xd8\x2c\xdd\x0b\x46\xcd\xa1\x75\xca\x9d\x52\xbd"
> "\xe5\x62\x22\x56\xd8\xa4\x4a\x8f\xbf\x4a\x42\x63\x5b\x25\x46\x56\x6c\x19"
> "\x2d\x05\x30\x39\x8b\x53\x04\xdd\x7c\xec\xf1\x0d\xed\x97\x44\x34\xce\x04"
> "\x37\x1f\x98\x53\xa0\x12\x2f\x18\xcf\x07\x4e\x3d\xf3\xfc\x38\x5f\x0c\x89"
> "\x5e\x19\xcd\xae\x76\xf2\xa3\xcf\x84\xed\xea\xd7\xe7\x9e\x32\x59\x15\x9f"
> "\x01\x53\xf1\xae\xd8\x34\xde\xce\xb4\xc0\x3b\xb2\x20\x6f\x6b\x51\x45\x2a"
> "\x0b\x4f\xf4\xd1\x63\xcf\x3b\x19\xc3\x1b\x73\xfb\xd6\xc9\xea\xbb\x7f\xf2"
> "\xd2\x1c\xe8\x83\x72\x3a\xf9\x4a\xc6\x93\x1b\xf6\x60\x87\x8a\x18\xd0\x0a"
> "\x6e\x34\x30\x2f\xac\x8d\x95\x62\x0f\x25\x9b\xce\x99\xe4\x0f\xde\xe5\x9b"
> "\x57\xab\x40\x0b\x96\x2d\xd7\x41\xae\x34\x67\x82\x39\x03\x4f\x9d\xf8\xf3"
> "\x90\x0d\xc6\x79\xec\xd9\xd1\xf2\x40\x39\xfc\xf3\x65\xf9\xfb\x12\xed\xff"
> "\xc8\x99\xaf\xfd\x5e\xf9\x74\x08\xcd\xa9\x2d\xdc\xf6\x05\x8b\x07\x65\x24"
> "\x6f\x01\x14\xda\xaf\x27\xf2\x1d\x87\xb6\x00\x27\x92\xbf\xd7\x18\xab\xef"
> "\x6a\xf8\x1d\x0f\x43\x93\x17\x0b\x86\xf6\xaa\x62\x16\xc3\x3c\xb9\xa0\x9e"
> "\xf8\xf0\x24\x09\x32\x0a\x2b\x7f\x7c\xda\xd1\x6e\x7d\x35\x85\x9c\x9f\x09"
> "\xdd\xaa\x51\xde\xed\x07\x73\x0a\xc0\x51\x53\x05\xda\xfe\x6c\xed\x72\x55"
> "\x98\x2a\x67\x5a\xc2\x1f\x7a\xf4\xce\xdb\xab\xc1\x95\xdd\x44\xf6\xfe\x29"
> "\x63\x81\xd1\x58\xba\xea\x03\xe6\x20\x5d\xfb\x4b\x73\x2e\xdb\xd4\xa3\xea"
> "\x7d\x84\x70\x0b\xd7\x14\xa3\xb5\x6f\x2a\xe5\xe1\x79\x08\x9d\x4c\x7b\xda"
> "\x52\xd3\x77\x3f\x42\xea\x17\x38\x03\x6b\x60\xd1\x4e\xbe\x28\x7f\x16\x79"
> "\x6c\xa2\x18\x90\xdb\xcd\xe3\x34\xba\xe7\x56\x2f\x59\xaf\x23\x0b\xf8\x49"
> "\x5f\x69\x43\x83\x9f\x8e\xa5\xf9\x40\x69\x2f\xba\x2c\xe9\x69\x29\xe1\x60"
> "\xb2\x00\x57\x99\xe8\x96\x7d\x6d\xe0\x24\x38\xaf\xb1\x68\xc8\x12\xea\xbb"
> "\xb1\x56\x98\xce\xea\xcb\x44\xa0\x59\x58\xac\xd4\x7f\x0e\xe4\x5b\x5d\x5a"
> "\xc1\x18\xd5\x8e\x53\x36\x04\x41\xb6\xed\x4a\x74\x76\xb9\xff\xb2\x23\xf2"
> "\x23\x92\x40\x13\xfc\x81\x93\x53\xe1\x00\xb6\x51\x3c\x24\xa1\x04\x65\x3e"
> "\x09\x67\xd3\x60\xb0\x8d\x6a\x5a\x37\x43\x0a\x24\x42\x68\xbb\x8d\x52\x1e"
> "\xe2\xb9\xa7\x9a\x0a\xbf\x0a\x60\x39\xd8\xe6\x7e\xe4\xfc\x1a\x62\x6b\xd3"
> "\x0c\x2c\x47\xef\xfd\x00\xde\xb2\xc4\x23\x90\x2f\xe0\x2c\xe6\x82\x1a\x2e"
> "\xa2\x5e\x76\x09\x55\xeb\xee\xca\xd3\x5a\x60\x4f\xfd\x3b\xb6\xbb\x1e\xaf"
> "\xf2\x36\x75\xe6\x08\x68\x41\x97\x18\x2a\x1d\x22\x3e\x0c\xa9\xe6\x7b\x68"
> "\xff\xe8\xf5\xe2\x53\x47\x61\x2e\xd7\x36\x12\x88\x09\xbd\xd7\x63\x33\xc3"
> "\x7b\x46\xe9\x42\x3f\x6a\xa8\x04\x61\x85",
> 4096);
> memcpy(
> (void*)0x20001280,
> "\x9c\x13\xa0\x51\xce\x6c\x80\xce\x58\x9c\xf4\x01\x06\xf0\x2c\x87\x1d\xc9"
> "\x34\xf5\x2d\x12\x65\xe0\x54\x06\x2f\xde\xbd\x0c\xe3\x5f\xe1\xd5\x55\x28"
> "\x46\x33\x70\x15\x01\x24\x60\x08\x2b\xec\x5a\xf4\x37\xf3\x29\x8a\x26\x01"
> "\x83\x34\x89\xe8\xaf\x5f\xfc\x27\xdb\x55\x34\x91\x8d\x25\xe9\x2e\x0e\x6d"
> "\x67\xd9\xc4\x3d\x0a\x3c\x10\x79\x82\x07\xa5\xd6\xdc\x93\xb5\xcc\xec\xad"
> "\x97\xc8\x7f\x17\x3e\x04\x8e\x8a\x36\x43\x82\xa6\xd1\x6a\x76\xf9\x6e\xf7"
> "\xae\x28\x71\xbc\xbd\x8f\x3c\x28\x75\xd8\x11\x41\x74\xa6\x6f\x92\xfb\x17"
> "\x55\xc3\x6b\x8a\x62\x82\x5e\x0c\xe6\xad\xb4\x0f\xd3\x4b\x7d\x0e\x60\xf2"
> "\x88\x6e\x25\xa7\x13\x3f\x5f\x88\xcf\xfb\xee\x57\x11\x14\xf4\x72\x07\x4e"
> "\x78\x58\x73\x97\x68\x1a\xe7\x80\xf2\xde\x42\x69\xa3\xa4\x19\x3f\x1f\x74"
> "\x3e\x29\x24\x07\xb1\x90\x42\x15\xba\x61\xaf\x71\x37\x04\x2e\x50\xbc\x17"
> "\x20\x3c\xa7\xa6\xd2\x5c\xec\x20\xe3\x98\x72\xfc\xba\xe4\xea\xdd\xc1\x59"
> "\x28\xe9\xac\x38\x15\xb4\x93\xb7\xbf\xdf\xa3\xc2\xff\x6d\xcd\x9f\x7d\x4e"
> "\x8d\x24\x53\xe7\x58\x0d\x6d\x85\x87\x9e\xf5\x0a\xe5\x07\x39\x46\x83\x26"
> "\x7c\x81\x26\xcc\x1a\xf6\x4a\xce\x01\x3d\x93\xa4\x55\x2d\xe4\xbe\x02\x23"
> "\xee\x0f\x5b\xa6\x46\xaa\x7c\x4e\xe9\x5a\x9f\xc6\x19\x2a\x87\xa2\x8f\x35"
> "\x64\xc7\x1a\x13\xe3\x35\x86\x6f\xa0\xa5\x5a\x34\xb9\xbc\x79\xd1\xd2\x37"
> "\x6e\x80\x8f\xa0\xf5\x8f\x8f\xf5\xf3\x3b\xb4\xed\x81\x38\x39\x2d\xf2\x52"
> "\xed\xa7\xd2\xdc\xee\x73\xeb\x95\x7f\x59\x22\x27\xc8\x63\x6c\x61\xc9\xd3"
> "\xab\x93\xde\x72\xb1\xd9\xe0\xbf\xab\x3a\x5e\x63\x81\xae\x73\x29\x0f\x8f"
> "\x1e\xc0\x25\xd6\x0b\x69\x2e\x76\x08\xf9\xea\x07\x91\x41\xcf\x51\x80\xef"
> "\x66\x10\x10\x3f\x04\x3f\x9f\xf1\x49\x24\x7e\xa5\x31\xc0\x65\x80\x9e\xb9"
> "\xf1\x65\x5a\xd9\x63\xf9\x2f\x5c\xc2\xc8\x3b\xa0\xda\x9d\x79\xfc\x2c\xde"
> "\xc1\x61\x49\x22\x57\xbb\x24\x80\x20\x84\xc1\x7f\xad\x57\x1f\x23\xff\xaf"
> "\x24\x5e\xe6\x47\x42\x3e\xdb\x08\x73\x3f\x2d\xc7\x5e\x51\x4e\xff\x02\x74"
> "\x00\x37\x49\xcc\x7d\x5b\x0b\xf2\x46\x2f\x5f\x2f\xd7\x69\x70\xea\x28\x20"
> "\x73\x4f\x58\x33\x39\x29\x39\x26\x3d\xec\xd6\x35\xd5\x96\x9d\xbf\x4a\x28"
> "\xe6\x29\x2d\x89\x9a\x3a\xa3\x6f\xec\xd6\xc2\xe4\x22\x0b\x7d\x8c\xbf\xec"
> "\x81\x37\xf6\x27\x2e\x12\xf2\xb9\x47\x46\x6c\x05\x82\xf2\x25\x48\x72\x0d"
> "\x52\xb0\x6d\x6c\x7f\x27\xaa\xcd\xbb\x6e\x5e\x31\x1e\xc0\x8b\xd8\x48\x12"
> "\x61\x61\x99\xf7\x64\x46\x94\x11\x7e\xd7\xae\x38\x58\xdb\x7d\xd5\x48\x36"
> "\x94\xc6\xab\x4a\xd0\x82\x54\x7b\x4d\xb1\x8d\xc3\xe4\x67\xdd\x9f\x37\xe1"
> "\xd1\xba\x2c\x50\xd3\xd7\x02\x24\x67\xc6\x07\x7b\x45\x71\xc4\xe5\x6c\xfc"
> "\xa9\x39\x3c\x2f\xe7\x3d\x84\xf3\xd5\x70\x8c\x9d\x91\xbe\x3a\x69\xb4\x3b"
> "\xcd\x49\xa2\x03\x2f\xd3\x74\xb7\xc9\x0d\x47\xc8\x04\x93\x59\xae\xc0\xd8"
> "\x09\x63\x96\x4e\x9e\xe2\xe2\xef\xc9\x10\x4c\x5d\x22\x31\x3a\x02\x57\xd0"
> "\x76\xe0\xf8\x91\xfd\x6b\x34\x3b\x32\xc9\x7b\x70\x25\x02\xd9\xbb\xa8\x14"
> "\xdf\x9a\xe0\xcc\xba\x8f\x6b\xf0\x1f\x19\x8a\xd1\x36\xa3\x7a\x9e\xda\x83"
> "\x38\x3d\x57\x44\x68\xee\xf9\x33\x4e\xda\x4d\x0d\x32\x58\x48\x2c\x6f\x5e"
> "\x28\x8d\x3a\x5a\xa1\x69\xed\x14\xa9\x52\x01\xe2\x37\xdc\xf0\xd0\x0d\x0b"
> "\x8e\x3f\x9c\x76\x0f\x5a\x0e\xf1\x01\x7b\x84\x42\x46\xb5\xf3\x42\xf4\xd3"
> "\x6c\x87\x2c\x59\xfc\x0c\x43\x0c\x74\xb7\x35\x9d\xdf\x5f\xa3\xfa\x3e\xb1"
> "\xfe\xaa\xb1\xb5\x25\x1b\xe0\xab\x4e\x97\xe1\xf4\x24\x3a\x3c\x95\xa3\xe5"
> "\xa7\xa6\x6c\x73\x15\x39\x91\xd2\xb7\x0c\xf8\x66\xba\xaa\x2f\xa7\xf9\xd6"
> "\xd8\xb4\x22\x0d\x12\x1d\xdd\xb6\x2c\xd8\x1d\x78\x86\x7e\x6d\xc5\x66\x5e"
> "\x34\x35\x33\x44\xf9\x0c\xf4\x1e\x2b\x7f\xee\x40\x31\xd7\x22\x05\x13\x92"
> "\x8a\xdb\xee\x54\xa5\x4e\x0d\xcf\xf0\x22\x1a\xcb\xff\x1a\xe8\x37\x4f\x36"
> "\xad\xa5\x66\x58\x59\x22\x5b\xb8\xde\x3b\x6b\xeb\xec\x84\xfd\x6c\x3e\xde"
> "\xdc\xb6\xcb\xab\x76\xcf\xd4\x3c\x6a\x69\xb1\xd7\x94\x7b\xac\xec\x64\x81"
> "\x14\x31\x89\xb7\xa3\x41\xca\x49\xfd\xfb\x59\x58\x42\xac\x90\x1e\xa6\x3c"
> "\xe3\x47\x48\xaa\x09\xf1\x82\x57\x9f\x5b\xc0\x9c\x47\xba\xde\xb2\xd2\x30"
> "\x91\xe6\xc6\x69\x1c\xad\x7e\x7e\xa3\x6e\x68\x25\x1c\x69\x18\xf8\xde\xc8"
> "\x2f\x94\xaa\x5e\xf4\x02\xf4\x83\xf2\xd8\x51\xe8\xed\x35\x65\x14\x16\x2b"
> "\x78\xbb\x43\xe3\x78\xb6\xa8\xea\x9d\x6c\x5c\x5e\x6a\x6c\xcd\x57\x2e\x53"
> "\x96\x9e\xd5\x30\x87\x25\x62\x32\xaa\xbd\x65\x29\x42\x68\xf2\x47\x1b\xf4"
> "\x0f\xad\xfc\xd8\x63\x1b\x1b\x41\x1b\x73\x71\xa0\x34\x75\xa7\xa1\x8e\x56"
> "\x3c\x24\x2f\x2f\x50\x68\xfa\xd7\xaa\xbd\x09\xa1\x95\xf7\xfe\x29\x81\xfa"
> "\xb6\x63\x32\x1e\x2e\x72\x35\xd2\x73\x00\xce\x4d\x47\x06\x52\x0b\x82\x7f"
> "\xd3\x7f\xee\x1b\xe5\x99\x3a\x74\x8a\xdf\xd1\xb9\x80\xf8\x9d\x04\x77\xac"
> "\x02\x05\xc9\x1e\xe4\x81\x3d\xe9\x86\x4e\xa0\x54\xf9\x90\xc7\xde\xb2\xa7"
> "\xee\xa0\x84\x72\x22\x0a\x79\xcf\xa3\x92\xdd\x75\xa8\xd4\x6a\x5e\x60\xbc"
> "\x3f\xb6\x01\x76\xb2\xb0\x38\xc7\x5a\x8a\x5c\xaf\x0e\x9c\x02\xf6\x42\x17"
> "\x4a\x41\xef\xf4\xec\xd3\x5e\xdb\x14\x80\x00\x50\x49\xbd\x9c\x5a\xf0\x7c"
> "\x93\xe8\xac\x97\x25\x29\xdc\x94\x90\x60\x15\xb3\x7c\x12\x38\x2e\x73\x10"
> "\x33\xf9\x92\x92\x09\x38\xf0\xfb\x1c\x48\x1f\x45\x32\xee\x1e\xee\xf6\x60"
> "\xa1\xfb\xb8\x31\xf8\xd5\x6e\xed\x59\x60\xf7\xd6\x3d\x92\x57\x74\x0b\xb1"
> "\x89\xd5\x55\xf9\xad\xce\xe5\x61\x1f\x42\x63\x0f\x6a\x12\x5e\x58\x99\xff"
> "\x35\x63\xbb\x04\x05\x36\xfc\x85\xc1\x2f\xec\xa7\x14\x1f\x32\x8f\x39\x94"
> "\xe7\x8a\xe3\x41\xc8\x8a\xac\x7c\x49\x01\x98\x5d\x45\x65\xc1\x00\xba\x6b"
> "\x3a\x11\x43\x60\xaf\x21\x8e\xa9\x56\x9c\x34\x02\x8d\xdc\x0a\x3a\xf9\xef"
> "\xb2\x50\x2f\x42\x77\x78\x48\x89\x1e\xf5\xfc\xc4\x88\x50\x3a\x14\x42\x62"
> "\x31\xfa\x46\x5c\x3d\xba\x01\x86\x0c\x74\x76\x85\x40\x41\xde\xec\x3b\x67"
> "\x18\x7a\x2d\x05\x3d\x7f\x2b\x60\xcb\x7e\xff\xe3\x5e\xf6\xdb\x81\x60\xf4"
> "\x74\x70\x93\x7c\xd1\xef\xfd\x1c\x76\x2b\x44\x98\xeb\x60\xf8\x1d\x6f\xad"
> "\x5f\x85\x9d\x04\x81\x4d\x61\x2b\x37\x30\x2c\x7a\x22\x0d\xdb\x26\xea\xc4"
> "\xeb\xf6\xb3\x63\x57\xb9\x10\x01\x69\x1d\xc9\xe1\x43\xdc\x1f\x59\x8a\x8f"
> "\x7a\x41\x67\x8e\x4e\xe3\x6b\xd6\xeb\x75\x5c\xfd\x70\x03\x56\x7b\x10\x18"
> "\x2f\xd3\xe9\x01\x4d\xe8\x5b\xa7\x7e\x8d\x83\x0d\x57\xd9\x05\x6b\xcb\xae"
> "\x77\xce\x33\xbf\xc1\xc9\x10\xab\xa8\x4a\x5a\xf6\xbe\x4a\xe8\xaf\x57\x32"
> "\x3a\x67\x2f\x5e\x78\x80\xd3\x3b\x0f\x12\x01\x30\xda\xa9\x21\x20\x42\xc4"
> "\x3c\x04\x30\x91\x1d\xd2\xfc\xf8\xf0\x56\x24\xa8\x96\xa5\x7c\xa4\xeb\xb0"
> "\x96\x66\x6a\x68\x10\xc0\xe5\x9a\x52\xe2\xcd\x5d\x21\x40\xc6\x36\xbd\xd5"
> "\x28\x6e\x3c\xa0\xcc\x6c\xdc\x99\xb2\xa8\x72\x26\xb0\x00\xd9\x9d\xd6\xd6"
> "\xd0\x04\xde\xe4\x86\x3d\x9a\x0b\x36\x3c\x9b\xef\x3e\x7c\xa5\x8e\x0f\xca"
> "\xf2\x3d\xc3\xd9\x6d\x03\xfc\xf7\xdc\x6c\x5c\x29\xcd\xc6\xe9\x54\x45\x26"
> "\xe8\x78\x6e\x56\xbe\x98\x67\x93\xe2\x61\x82\xfd\xbd\x2b\x58\x32\xaf\x2f"
> "\x17\x36\xe5\x24\xd3\x98\x44\x2a\xf0\x66\x9b\x22\xa0\xee\x41\x84\x25\x57"
> "\xa2\xe3\x52\xb5\xe7\x89\x63\xa7\xec\xf9\xb8\xf9\xd2\x95\x81\x33\x27\x62"
> "\xa7\xc2\x27\x1e\x2d\xf9\xa6\x13\x57\xf0\x64\x92\x1f\x54\x46\xe8\x38\x5c"
> "\x39\x8a\xef\x7b\xf8\x0f\xa4\xb6\xc3\x08\xcd\xc6\x86\x69\x9e\x52\x3c\x2c"
> "\x8e\xe4\x9b\x95\xb3\xbd\x05\xec\xb0\x0f\x2a\xeb\x17\x80\x45\x75\xfb\x4e"
> "\xcc\xc0\x62\xee\x41\x36\xdc\x95\xe9\xbe\xe1\x6d\xf5\x30\x7c\x5e\x1e\x3b"
> "\x15\x4b\x8d\xb9\xb3\xbb\xbb\xce\xe1\xf9\xac\xf5\x39\x86\x13\x20\xf7\xea"
> "\xed\x08\x98\xfe\x1c\xd3\x14\xba\x5a\xd7\x8a\x5b\xf1\x48\x96\x42\xbc\x0a"
> "\xb9\xd0\x01\xde\xfa\x0d\xd4\x20\x54\x3e\x99\x70\xce\x40\xe6\xdc\x20\xd3"
> "\xd1\x7b\x8c\x96\x8f\x8c\x41\x2c\x6e\xff\xee\x32\x6d\x6e\xe9\x85\x9a\x69"
> "\x77\x49\x8c\xaa\xe6\x6b\xb9\x5a\x7e\x81\xf5\x43\x5f\x61\x45\xce\xd7\xec"
> "\x5f\x99\x6a\xb8\xce\x51\x53\x48\x7f\x14\xc7\x25\xb8\xa5\x1f\x42\x93\xe2"
> "\xd5\xc7\xd2\xed\x4c\xfd\x2a\xb8\x2b\xb9\xf9\x2d\x9c\x3d\xea\xf7\xad\x9d"
> "\x64\x7d\xb8\x4b\x9d\xba\xb0\xaa\x96\x54\x6b\xe7\x1d\xe6\xfe\x22\xc0\x96"
> "\x22\x2a\x88\x07\xbb\xd2\x66\x29\xaa\xc6\xec\x7b\x60\xb7\x60\x79\x30\x5e"
> "\x69\xab\xb4\xd9\x66\xd1\xcb\xe7\xb8\x77\xb9\x29\xfb\x82\xad\x83\x2f\x09"
> "\x0e\xd1\xd3\xeb\xe5\xeb\x13\x2d\xef\x25\xa8\xa7\x65\xf2\x0a\x15\xf6\x31"
> "\x55\xb5\x0c\xfd\x5f\x5c\x21\xbb\xd5\xb0\x4e\x51\xdf\x16\xe2\x4e\x96\xbd"
> "\x61\x81\xe6\x57\x7f\xec\x3f\x80\x5f\xdf\xcb\x06\x6b\xfe\xc0\xcd\xc5\xdb"
> "\x0c\x3d\xb2\x9b\x59\x11\x1b\xf4\xfe\xe4\xd9\xeb\x77\x43\x66\x45\x85\x82"
> "\xf5\x27\xaf\x97\x3e\x61\xd1\x9f\x2d\xb7\x17\x4a\xb2\x55\xdd\x88\xad\x4e"
> "\x4e\x1c\x58\x8b\x76\xd1\x51\x9e\x1b\xb4\xeb\x50\xa6\x0b\x7a\xd7\x8a\x95"
> "\x6d\x59\x15\x24\x38\xc5\x78\x3f\xe0\xf0\xe0\x44\x9c\x75\x51\xa5\xac\xee"
> "\xfb\xcc\x0c\x23\xee\xcb\xbf\x3e\xe9\xf4\x7a\xdf\xce\x14\xb1\x36\xce\x34"
> "\xc0\x8b\xa9\xbc\xf1\xe9\x94\xff\x8f\x97\xa8\x7e\x18\x1d\x06\x57\x70\x37"
> "\x6d\xf5\x10\xf5\xd7\x0f\xb8\x3e\x44\xbf\xc5\x4a\x30\x6d\x11\x92\x21\x07"
> "\x97\xe7\x98\x08\xe3\xc4\xaf\x8c\x9c\x3c\xf8\xd6\x47\x02\x8d\xe8\x04\x98"
> "\xc2\x66\x1d\xe5\xd9\xd3\x1d\x27\xa7\x4b\xd9\x6e\x7e\x36\x32\xcc\xce\x08"
> "\xc9\xaa\x95\x54\xd4\xdd\xf3\x33\x60\x2d\x4e\x81\x04\x02\x4d\x88\x4e\x0f"
> "\xe3\xa5\x31\x75\x0d\x56\x64\xdd\x12\x2c\x5f\x67\x9b\x14\xe9\x9c\x57\x2d"
> "\xe6\x0c\xf7\x1b\x53\x27\xff\x16\xd1\xa5\x84\x8e\x4d\x8a\x2e\xd9\x67\x34"
> "\xc0\xca\x15\x45\x0d\x6f\xdb\x24\x67\xb8\xbc\xff\xf0\x9a\xe4\x28\xcb\x77"
> "\x19\xf3\x28\x31\x21\x69\x27\x2d\x22\x0a\x0f\x1a\xd7\x36\xca\x4e\x6d\xa1"
> "\xe7\xfd\x51\x43\xe2\x68\x55\x3c\x18\x98\xb3\x0f\x0e\xe2\x3d\x50\x22\x93"
> "\x66\x0a\x06\xfc\xa4\x4d\xbe\xfa\x00\x5c\x78\x24\x3b\x7c\xcf\xc9\xf8\x4e"
> "\xcf\xe8\x2a\xe2\x20\x67\x91\x10\xf7\x53\xd3\x54\x1a\xbe\x0d\xd9\x74\x0a"
> "\x82\x54\x61\xa6\x0c\xbc\x1d\x95\x25\x97\x87\x54\x10\x24\xda\x96\x87\x73"
> "\xe6\x2f\x4b\x31\x62\xe2\xea\xbf\x2e\x17\x91\x1d\x1c\x6f\x29\x38\x0b\x05"
> "\x62\xb1\xdb\xac\xdb\x37\x0e\x05\x4b\x04\xb4\xe4\x42\x46\x9f\x30\x02\xf3"
> "\x6c\xab\xca\xa9\x49\x8b\x2a\xe6\x1a\x11\x5e\xae\xd2\xbd\xc9\xa5\xd6\xba"
> "\x12\x2b\x05\x4e\xee\xbc\xeb\x10\x96\xcc\x5e\x3b\xa9\xb3\x52\xc8\x6b\x2e"
> "\x66\x35\xc1\xf2\xbf\x22\x63\xd5\x0d\x45\xcf\x58\x47\xb1\xa7\x48\xe0\x87"
> "\xf5\xd8\xb9\x17\xa5\xb7\x55\xa8\x13\x04\x03\xc7\x1e\xab\xea\x0a\xcd\xc1"
> "\x58\x0f\x35\x38\xaa\x83\x87\x41\x4c\xdd\xb9\xfa\x96\xc6\xcb\x91\xad\x34"
> "\xf3\x08\x69\x61\x27\x26\xb8\x6d\xb7\xaa\xab\xea\x19\xbf\x01\x05\xcd\xb8"
> "\xee\xab\x75\x65\x21\xbf\x41\x0c\xcd\x1f\x58\x65\x87\x5a\x56\x1f\x77\x7a"
> "\xd7\x92\xed\xec\x83\x0e\x73\xaa\xac\xc5\x1b\x15\x55\x21\x7d\xa8\xe6\x81"
> "\xe3\x7c\x22\xaf\x47\x93\x18\x3f\x4f\x25\x50\xe3\xa0\x32\x45\x5f\x3d\x85"
> "\x20\xd3\xca\x91\xc4\x3d\xbe\x42\x1f\xb6\xb6\x48\xf6\x1c\xba\xc3\xbb\xa3"
> "\x21\xee\x7a\x1e\x81\xbf\x26\x9f\xd0\x6b\x7d\x30\x66\x87\xf5\x0f\x68\xb5"
> "\xb4\x0b\x7c\xbe\x0e\xd2\x89\x85\x59\x9b\x25\xed\x84\x28\x09\x27\xbc\x6d"
> "\x35\x95\xc6\x57\x05\xb0\xf8\xec\xd3\x00\xe4\xbc\x55\xe8\xd6\xf6\x7c\x59"
> "\x82\xc6\xf4\x46\x0e\x16\x37\xcd\xe1\xab\x8d\xf4\xf3\x9d\x5b\xce\x0a\x83"
> "\x4a\x26\xf9\x61\x95\xb4\x97\x52\x7a\x74\x4b\xd0\x87\xaa\x0b\xf1\xdd\xdd"
> "\x92\xd4\x93\x99\x63\xe2\xf4\xfc\xe1\x08\x6f\xc8\x5f\xad\xca\x2b\x49\x3f"
> "\x77\x28\x59\x2e\xdf\xf1\x9e\x95\xc8\x65\xe8\x20\x61\xcb\x95\xbe\xd7\x8b"
> "\x8e\xe4\x6d\x47\x26\xa2\x36\x5c\x97\xb5\x7a\xb9\x33\xca\x25\x53\xd5\x95"
> "\x14\xa0\xc6\xde\xcc\x33\xf7\x73\xcb\x07\xde\xe2\x39\xc3\x53\xc8\x68\xdb"
> "\xf4\x61\xc1\xe8\xa7\xdd\xb7\xc2\xa1\x8e\x98\xbc\x14\x27\xef\xa6\xbc\xa2"
> "\xa1\x65\x72\x37\xc7\x2f\xab\x57\x93\xca\xff\xd9\xb1\x43\xd2\xb1\xc8\xe4"
> "\xca\x7c\x44\x8a\xe8\x6e\x3c\x68\xc2\xce\xf4\xd1\xb7\x1b\xcc\xa5\x40\x2f"
> "\xf2\x95\xa1\x7e\xde\xc7\x5a\x02\x45\xa5\x76\x7b\xcd\xe5\xc0\xeb\x75\x51"
> "\x85\xda\xb5\x43\xa9\x71\x31\x4c\x96\x66\xc7\x9e\x34\x33\x88\xd2\xa7\x53"
> "\xb5\xa1\x62\x33\xff\x2a\xf9\x5f\x52\xa8\xdf\x77\xe3\x9c\x54\xee\x38\x0e"
> "\xea\xbb\xb9\xf3\x93\xff\xad\xce\x49\x54\x79\x38\xa0\x3e\xfa\x7b\xcc\x03"
> "\x7e\x43\xd9\x1c\xc4\x38\xbe\xfe\x6d\x6d\xae\x25\x13\x3f\xe0\xac\x59\x2b"
> "\x90\xe3\x9a\x58\xa0\xd5\x72\xdc\xe6\xc2\x3a\x40\xa1\xcb\xba\xa6\x2b\xb8"
> "\x5e\xd2\x96\x9a\x5f\xa7\x55\x1d\xf9\x74\x1d\x04\x3e\xf3\xfe\xf9\x9a\xff"
> "\x1c\xc8\x7d\x4a\x83\x71\x85\xd1\x31\x67\x1c\x73\xc3\x1a\xb9\xb1\x8c\x2c"
> "\x58\x6e\xee\x89\x28\x66\xed\x7d\xa1\x01\xd5\x56\x13\xf1\x1c\xc1\x53\xd6"
> "\xe8\x66\xd5\x9d\xc0\xe0\x83\xf0\x16\x79\x2b\x4f\xd9\xcf\x50\xac\xfc\xf7"
> "\xa1\xc2\x4b\xbd\xfc\xff\x64\x42\x11\x60\x94\xa2\xba\xdd\x6b\x0e\x77\x00"
> "\x8a\xe3\x9b\x5f\xa5\x7a\xc3\x0f\x79\x96\xa4\xce\xfa\x4b\x8d\x03\x6d\x9c"
> "\x54\x92\xc2\x0e\x73\x1f\x96\x7a\x9b\x80\x68\x78\x48\xab\xe8\x1a\x75\xdd"
> "\x63\xa7\xb3\x37\x32\xd1\x73\x70\xe2\xfe\x20\xff\xf9\x66\x0f\x73\x35\x91"
> "\xd3\x2c\xb9\xd7\xc1\x14\xe3\x2f\x20\xe4\xb1\xa2\x56\xe9\xaa\x70\x33\x71"
> "\x5c\x96\xd7\x06\x99\xa5\x45\xfd\x72\x44\x0c\x12\x66\xcf\x8b\x02\x1e\x6b"
> "\x6f\xfd\x92\xd1\xb7\x6f\x3d\x3f\x38\xfc\xdd\x43\x9b\xba\xa6\x9d\x95\xaf"
> "\xf8\x60\xc0\x6d\x4c\x0e\x1d\x19\xea\xfa\x65\x1f\x60\xce\x23\x59\x01\x76"
> "\xad\x79\x1a\xb8\xda\x11\x58\x1b\x5a\x03\xee\xc1\xcf\x50\xca\x8d\x2a\x7e"
> "\x8a\x40\xad\x2a\x09\xf5\x32\x1a\x59\x3b\xa6\x53\xef\x91\xa1\x36\xef\x27"
> "\x40\x72\x6a\xdf\x08\xeb\x3b\x40\x07\xb8\x3c\x23\x47\x5b\x13\x6c\x5c\x7e"
> "\xe4\xea\xfb\x7e\x88\x4c\xe3\x55\xc4\x10\xe0\xb5\x17\x3f\xf2\xb9\x11\x80"
> "\xb9\xc1\x9e\xec\x34\xfa\x7a\xe9\xf8\x7b\xe0\x9a\x1c\xd0\x7f\x3f\xd9\xc7"
> "\x83\x15\xb1\xb2\x0a\x14\x76\xac\x8f\xf7\xa5\x5d\x6e\x0a\xec\xd9\x49\x21"
> "\x71\x4b\xc2\xbb\x66\xb9\x59\x15\xc8\x59\xe7\x92\xd2\xad\x16\xce\x16\x5f"
> "\xc3\x34\xc4\x82\x6d\xd8\xb1\xef\x9d\xbf\x11\x1c\xe3\xde\xc9\xb4\x3e\x01"
> "\xc3\x0f\x53\x05\x58\xe6\x2f\x2c\x24\xcf\x01\x57\x74\x36\xa3\x8d\xe4\xf1"
> "\xe6\x62\x98\x36\x9b\x31\xd6\xd2\xcc\x61\xa5\xe4\xc0\xdf\xa0\xa1\xd9\xc7"
> "\x0b\x14\x73\x2b\x0d\x9b\x58\x93\x9c\x08\x2f\xb9\x8a\xae\xe4\x66\xad\x35"
> "\x15\x6c\xed\x6a\xe1\x34\x90\xf5\xde\x08\x82\xf5\x79\xc5\x43\x1c\xc8\x77"
> "\xa3\x2a\xe4\x28\x9d\xb6\xe8\xd2\x69\x99\xc6\xda\x20\x01\x74\x27\xb8\x32"
> "\xe0\xd5\x2e\x10\x8b\x2b\x8d\xcc\x96\x2d\xe6\xf4\x9f\x7f\xa8\x0e\xf2\x6e"
> "\xcd\x41\x07\x8c\x2a\xc0\x47\xfd\x51\xef\xca\xb2\xdf\x2f\x9b\xa5\x58\x0b"
> "\xc7\x3e\xde\x70\x48\x0f\x89\x92\x2d\x24\xc0\x9b\x33\xe0\x56\x71\xcf\xa9"
> "\x54\x85\x80\xcf\xe5\x24\xa5\xd7\xdb\xf3\x05\xcf\x8c\x2c\x2d\xa5\xd5\x4b"
> "\xa7\x20\x74\xd6\xd8\x32\x7e\x3d\x1e\xc4\x13\xaf\x0b\xf1\xc5\xaa\x8e\x13"
> "\x96\x56\xde\x36\x93\xdb\xf6\x6c\xe8\x38\x43\xfd\x1e\xcb\x70\xd0\x33\x86"
> "\xb9\xbe\x4f\x02\x15\x17\x25\xd5\x39\x75\x65\xc5\x7e\x5e\xdd\xf6\xed\x43"
> "\x78\x97\xc6\xf1\x83\x5f\xd7\x1e\x53\x56\x59\xe8\x22\x35\x41\x09\x63\x8c"
> "\xaf\xbc\xfe\x58\x0d\xfd\xfc\x08\x84\x13\xbc\xf4\x11\x46\x65\x69\x48\x75"
> "\x76\x6c\x7c\xbd\xa8\xe2\x86\xab\xcb\xb0\xe9\x37\xbf\x2d\xe5\x60\x29\x4c"
> "\x25\xc3\xd2\xf5\x76\x6f\x78\x1b\x01\xe9\xde\xb0\xfb\x5a\xc5\x62\xbf\xcb"
> "\xf4\xd2\x6f\x87\x63\x6e\x8c\xae\x23\xf3\x94\x20\x37\x8d\x4a\x95\x7d\x60"
> "\x81\x5d\xb8\x21\x8d\x9e\x7b\xe7\x6b\xa8\x40\x99\x00\xd0\x7b\xd5\x6b\xe0"
> "\x66\x12\x77\x27\xcc\x82\x0d\x9c\x11\xfc\x04\x56\x09\x0d\xd8\x15\x24\xe8"
> "\x96\x8c\x87\x1d\xc1\x89\xf6\x97\x01\x76\xd6\xd7\x35\x1a\x6d\xe2\x0f\xe7"
> "\x47\x4e\xac\x7b\x56\x96\x88\xd4\xd6\x76\xe6\x0c\x0b\x4a\x9c\x52\xb6\xdb"
> "\xdf\x65\xde\xaf\x3f\x27\x8c\x23\x26\x56\x70\x87\x81\x9d\xde\x99\x07\x5d"
> "\xb9\x3b\x3b\xe7\x22\x8f\x12\x9f\xf9\x34\x02\x61\x96\x1d\x31\x0b\xe6\xf0"
> "\x17\x15\xa6\xc7\xc9\x8d\xe2\x4c\xf3\x30\xda\xf9\x5e\x74\xcd\x1f\xfd\xe5"
> "\x14\x13\x8b\xe0\x1d\x51\x19\x74\xec\x24\xdb\xb4\x73\x0c\x0f\xcb\x5f\x11"
> "\xb9\xac\x2c\x81\x50\x44\x55\xf4\xa9\x19\xc6\xea\xae\xf1\x76\x39\x83\x4b"
> "\xe2\x8b\xa2\x14\xc2\x3d\xc4\xe5\x68\xef\x62\x64\xf3\xef\x05\x2b\x89\xe7"
> "\xec\x20\x5d\xd2\xd3\x6c\x44\x73\xf1\x79\x55\x42\x7e\x9a\x5b\x8d\x15\x4a"
> "\xf4\x9e\xcd\xb6\x74\x3a\x7c\x55\x58\x10\x74\xe1\x92\xa0\xdf\x0d\xc4\xee"
> "\xb5\x2b\xcb\x3a\x7c\x5c\x72\xbf\x22\x79\x65\xdd\x30\xa2\xf8\x5d\x1a\x1a"
> "\x5b\xa3\x36\x1e\x3f\xb3\x8f\x93\x40\xf7\x5b\xda\xb1\x61\xc6\xad\x0c\xd0"
> "\x76\x35\x78\x83\xca\x14\xe5\xd2\x79\x78\x87\x6d\x15\x05\x6b\xfa\x49\xb1"
> "\x4f\xd7\x76\x4a\xb6\x9f\xb4\x60\x4c\x92\xb5\x81\x07\x04\xcd\xc4\x52\xe8"
> "\xae\x1c\xd0\x03\xd2\x89\x44\xb0\x60\xd6\x50\x50\xfd\xc8\x65\x5c\x12\x31"
> "\xfb\x54\x15\xba\x5b\x88\x74\x35\xbf\x99\x25\xe6\x67\xbd\x39\xce\x50\x09"
> "\x14\xe6\xba\x14\xb0\x52\x5f\x17\x76\x28\x75\xb0\x3d\xf2\x20\x7e\x75\xa9"
> "\xee\x0f\x6e\x7c\x6d\x0e\x69\xca\xd6\x70\x8a\xd4\x8b\x86\xf3\x6f\x08\xc0"
> "\xcd\x98\x52\x98\x44\xbe\xdc\x9c\x55\x56\xbb\xc2\xac\xa6\x8b\x7b\x45\xce"
> "\xc1\xcf\xc3\x80\xae\x6c\xa1\xe9\x8e\x56\x74\xab\x62\xba\xce\x8c\x85\x59"
> "\x4b\x8b\xb1\xaa\x40\x71\xd4\xbc\xd1\xc2\x82\xde\x92\xa8\xf5\x7b\x98\x3a"
> "\x8c\xa6\x0f\x0a\x9c\xf7\x33\x30\x74\xf0\x9a\x02\x25\x8d\x29\x8c\x61\xbf"
> "\x48\x0d\xdd\x10\xb0\x63\xaf\xf5\x1e\x1b\x56\x38\x98\xb7\xe9\x74\xbf\xeb"
> "\x4f\x2f\xbe\xc7\x13\x62\xa1\x60\x99\x72\x18\xc7\xc4\xfd\x63\xf2\x71\x33"
> "\xbf\x93\x87\x13\x62\xe0\x66\x80\x2c\x41\x00\xe7\x23\x0b\x37\x70\xd7\x72"
> "\xe8\xba\x5a\x9e\x63\x0f\x38\x9a\x28\xe3\x90\x55\x00\x1f\x9c\x80\xa5\x0e"
> "\x75\x3f\xef\x94\x18\x9b\xe3\xbd\x12\x6d\x89\x2e\x3b\xd3\x72\x77\x53\x49"
> "\x0d\xe4\xef\xca\x8c\xd2\x6b\xec\x49\x27\xdc\xdc\x05\x36\x29\x13\x5d\x79"
> "\xf8\x46\xba\xd3\xeb\x33\x3f\xc8\xe6\x19\xc9\x95\x07\x2b\xed\x84\xc1\x76"
> "\xa7\xd9\x94\x7a\xcd\xb9\x3a\x91\xb7\x2a\x10\x89\x23\x76\x14\xd0\xbd\xdb"
> "\xcc\x8b\x4d\xfc\x3e\xf3\x6b\x56\xe2\x3a\x97\x7e\x64\x19\xb9\xd7\x45\x9d"
> "\x3d\xdd\xb7\x37\xd9\x4e\x34\xe8\xdf\xaa\xac\xf3\x89\xf7\x0d\xf6\x13\xae"
> "\x1d\xf1\x91\x59\xb8\xaf\x15\x6d\xde\xe5\x9f\x41\x51\xf0\xe6\x03\xae\xc0"
> "\xf1\x16\x5c\xdf\x94\x57\xee\x4d\xcb\xb5\xb1\x79\x3e\x52\x4e\x33\xc3\x4d"
> "\x04\x3b\x66\xc3\x45\x99\x57\xe4\x87\x0f\xcb\x9e\x3e\xbc\xfa\x0f\x35\x25"
> "\x23\x0d\x2d\x22\x01\x98\xb6\x4c\xbb\x71",
> 4096);
> inject_fault(4);
> syscall(__NR_ioctl, /*fd=*/r[2], /*cmd=*/0xc040aed5, /*arg=*/0x20000200ul);
> }
> int main(void) {
> syscall(__NR_mmap, /*addr=*/0x1ffff000ul, /*len=*/0x1000ul, /*prot=*/0ul,
> /*flags=*/0x32ul, /*fd=*/-1, /*offset=*/0ul);
> syscall(__NR_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul, /*prot=*/7ul,
> /*flags=*/0x32ul, /*fd=*/-1, /*offset=*/0ul);
> syscall(__NR_mmap, /*addr=*/0x21000000ul, /*len=*/0x1000ul, /*prot=*/0ul,
> /*flags=*/0x32ul, /*fd=*/-1, /*offset=*/0ul);
> setup_fault();
> loop();
> return 0;
> }
>
> and see also https://gist.github.com/xrivendell7/f8d32211ddde603c43a09e2df23b2f35
>
> Since the reproducer is in a loop and with fault injection, it is hard to trigger in the production environment.
> I ran reproducer for about 1 hour with your patch as below does not trigger any crashes in the upstream commit 7846b618e0a4c3e08888099d1d4512722b39ca99 like in the syzbot instances:
>
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index 901be9e420a4..ee516baf3a31 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -4747,7 +4747,9 @@ long kvm_arch_vcpu_pre_fault_memory(struct kvm_vcpu *vcpu,
> * reload is efficient when called repeatedly, so we can do it on
> * every iteration.
> */
> - kvm_mmu_reload(vcpu);
> + r = kvm_mmu_reload(vcpu);
> + if (r)
> + return r;
>
> if (kvm_arch_has_private_mem(vcpu->kvm) &&
> kvm_mem_is_private(vcpu->kvm, gpa_to_gfn(range->gpa)))
>
> You can also test with the reproducer for future analysis.
>
> I hope it helps.
> Best regards
> xingwei Lee
Powered by blists - more mailing lists