From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6F59D6E231 for ; Mon, 20 Aug 2018 13:02:00 +0000 (UTC) From: Chris Wilson Date: Mon, 20 Aug 2018 14:01:44 +0100 Message-Id: <20180820130149.30566-2-chris@chris-wilson.co.uk> In-Reply-To: <20180820130149.30566-1-chris@chris-wilson.co.uk> References: <20180820130149.30566-1-chris@chris-wilson.co.uk> Subject: [igt-dev] [PATCH i-g-t 1/6] Initial import of minimal duktape (JavaScript) shell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0t LQogbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAxICsKIHNoZWxsL2R1 a3RhcGUvZHVrX3NvdXJjZV9tZXRhLmpzb24gfCAgMTg2OSArCiBzaGVsbC9kdWt0YXBlL2R1a3Rh cGUuYyAgICAgICAgICAgIHwgOTY2NTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzaGVs bC9pZ3QtYnVpbHRpbnMuYyAgICAgICAgICAgICAgIHwgICAyMjkgKwogc2hlbGwvaWd0LXNoZWxs LmMgICAgICAgICAgICAgICAgICB8ICAgMjkxICsKIHNoZWxsL2luY2x1ZGUvZHVrX2NvbmZpZy5o ICAgICAgICAgfCAgMzA4NyArCiBzaGVsbC9pbmNsdWRlL2R1a3RhcGUuaCAgICAgICAgICAgIHwg IDE0MTkgKwogc2hlbGwvaW5jbHVkZS9pZ3QtYnVpbHRpbnMuaCAgICAgICB8ICAgIDE3ICsKIHNo ZWxsL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgICAgNyArCiA5IGZpbGVzIGNoYW5n ZWQsIDEwMzU3NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwvZHVrdGFw ZS9kdWtfc291cmNlX21ldGEuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IHNoZWxsL2R1a3RhcGUv ZHVrdGFwZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwvaWd0LWJ1aWx0aW5zLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzaGVsbC9pZ3Qtc2hlbGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNoZWxs L2luY2x1ZGUvZHVrX2NvbmZpZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwvaW5jbHVkZS9k dWt0YXBlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzaGVsbC9pbmNsdWRlL2lndC1idWlsdGlucy5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgc2hlbGwvbWVzb24uYnVpbGQKCmRpZmYgLS1naXQgYS9tZXNv bi5idWlsZCBiL21lc29uLmJ1aWxkCmluZGV4IDcyNzhjNDM4My4uN2Q3MDcyYmQ1IDEwMDY0NAot LS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAtMjcxLDYgKzI3MSw3IEBAIGVs c2UKIGVuZGlmCiBzdWJkaXIoJ2JlbmNobWFya3MnKQogc3ViZGlyKCd0b29scycpCitzdWJkaXIo J3NoZWxsJykKIHN1YmRpcigncnVubmVyJykKIGlmIGxpYmRybV9pbnRlbC5mb3VuZCgpCiAJc3Vi ZGlyKCdhc3NlbWJsZXInKQpkaWZmIC0tZ2l0IGEvc2hlbGwvZHVrdGFwZS9kdWtfc291cmNlX21l dGEuanNvbiBiL3NoZWxsL2R1a3RhcGUvZHVrX3NvdXJjZV9tZXRhLmpzb24KbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi44YWNiNjcxOTAKLS0tIC9kZXYvbnVsbAorKysgYi9z aGVsbC9kdWt0YXBlL2R1a19zb3VyY2VfbWV0YS5qc29uCkBAIC0wLDAgKzEsMTg2OSBAQAorewor ICAgICJjb21tZW50IjogIk1ldGFkYXRhIGZvciBEdWt0YXBlIHNvdXJjZXMiLCAKKyAgICAiZHVr X3ZlcnNpb25fc3RyaW5nIjogIjIuMy45OSIsIAorICAgICJ0eXBlIjogImR1a19zb3VyY2VfbWV0 YSIsIAorICAgICJsaW5lX21hcCI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFs X2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTQzLCAKKyAgICAgICAg ICAgICJvcmlnaW5hbF9maWxlIjogImR1a19yZXBsYWNlbWVudHMuYyIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAi Y29tYmluZWRfbGluZSI6IDE1MiwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtf aW50ZXJuYWwuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5h bF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDE5NiwgCisgICAgICAg ICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfZGJsdW5pb24uaCIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29t YmluZWRfbGluZSI6IDYyMCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfcmVw bGFjZW1lbnRzLmgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2lu YWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA2NTAsIAorICAgICAg ICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2ptcGJ1Zi5oIgorICAgICAgICB9LCAKKyAgICAg ICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21i aW5lZF9saW5lIjogNjc1LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19leGNl cHRpb24uaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9s aW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDcwNiwgCisgICAgICAgICAg ICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfZm9yd2RlY2wuaCIKKyAgICAgICAgfSwgCisgICAgICAg IHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmlu ZWRfbGluZSI6IDg0MSwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfdHZhbC5o IgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAx LCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTQ3NCwgCisgICAgICAgICAgICAib3Jp Z2luYWxfZmlsZSI6ICJkdWtfYnVpbHRpbnMuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAg ICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogNTEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xp bmUiOiAyMjU0LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19pbnRlcm5hbC5o IgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAx LCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMjI1NiwgCisgICAgICAgICAgICAib3Jp Z2luYWxfZmlsZSI6ICJkdWtfdXRpbC5oIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog Mjk2NywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfc3RyaW5ncy5oIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAg ICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzEzNSwgCisgICAgICAgICAgICAib3JpZ2luYWxf ZmlsZSI6ICJkdWtfanNfYnl0ZWNvZGUuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAg ICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6 IDM2MTgsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2xleGVyLmgiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAg ICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA0MDU3LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9m aWxlIjogImR1a19qc19jb21waWxlci5oIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog NDI4NSwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfcmVnZXhwLmgiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAg ICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA0MzcwLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9m aWxlIjogImR1a19oZWFwaGRyLmgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA0Njc2 LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19yZWZjb3VudC5oIgorICAgICAg ICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAg ICAgICAgICJjb21iaW5lZF9saW5lIjogNTQwMiwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmls ZSI6ICJkdWtfYXBpX2ludGVybmFsLmgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA1 NzU5LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19oc3RyaW5nLmgiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAg ICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA2MDA1LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9m aWxlIjogImR1a19ob2JqZWN0LmgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA3MDA0 LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19oY29tcGZ1bmMuaCIKKyAgICAg ICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAg ICAgICAgICAiY29tYmluZWRfbGluZSI6IDcyNzUsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2Zp bGUiOiAiZHVrX2huYXRmdW5jLmgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA3MzA4 LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19oYm91bmRmdW5jLmgiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAg ICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA3MzQ5LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9m aWxlIjogImR1a19oYnVmb2JqLmgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA3NDkz LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19odGhyZWFkLmgiCisgICAgICAg IH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAg ICAgICAgImNvbWJpbmVkX2xpbmUiOiA3OTE1LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxl IjogImR1a19oYXJyYXkuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJv cmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDc5NjMsIAor ICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hlbnYuaCIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAi Y29tYmluZWRfbGluZSI6IDgwMTIsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVr X2hidWZmZXIuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5h bF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDgzNDEsIAorICAgICAg ICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hwcm94eS5oIgorICAgICAgICB9LCAKKyAgICAg ICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21i aW5lZF9saW5lIjogODM2OCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfaGVh cC5oIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUi OiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogOTA3OCwgCisgICAgICAgICAgICAi b3JpZ2luYWxfZmlsZSI6ICJkdWtfZGVidWdnZXIuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsK KyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRf bGluZSI6IDkyMzAsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2RlYnVnLmgi CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEs IAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA5NDE1LCAKKyAgICAgICAgICAgICJvcmln aW5hbF9maWxlIjogImR1a19lcnJvci5oIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog OTkzMywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfdW5pY29kZS5oIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAg ICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTAyMjMsIAorICAgICAgICAgICAgIm9yaWdpbmFs X2ZpbGUiOiAiZHVrX2pzb24uaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAg ICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDEwMjky LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19qcy5oIgorICAgICAgICB9LCAK KyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAg ICJjb21iaW5lZF9saW5lIjogMTA0MDYsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAi ZHVrX251bWNvbnYuaCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmln aW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDEwNTExLCAKKyAg ICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19iaV9wcm90b3MuaCIKKyAgICAgICAgfSwg CisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAg ICAiY29tYmluZWRfbGluZSI6IDEwNTkzLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjog ImR1a19zZWxmdGVzdC5oIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9y aWdpbmFsX2xpbmUiOiA4MiwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDEwNjA4LCAK KyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19pbnRlcm5hbC5oIgorICAgICAgICB9 LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxMCwgCisgICAgICAg ICAgICAiY29tYmluZWRfbGluZSI6IDEwNjEwLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxl IjogImR1a19yZXBsYWNlbWVudHMuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAg ICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDEw NjgzLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19kZWJ1Z19tYWNyb3MuYyIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwg CisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDEwNzc0LCAKKyAgICAgICAgICAgICJvcmln aW5hbF9maWxlIjogImR1a19idWlsdGlucy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5l IjogMTE2MDMsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2Vycm9yX21hY3Jv cy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUi OiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTE3NTgsIAorICAgICAgICAgICAg Im9yaWdpbmFsX2ZpbGUiOiAiZHVrX3VuaWNvZGVfc3VwcG9ydC5jIgorICAgICAgICB9LCAKKyAg ICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJj b21iaW5lZF9saW5lIjogMTI5MzksIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVr X3V0aWxfbWlzYy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdp bmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTMxMjIsIAorICAg ICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hvYmplY3RfY2xhc3MuYyIKKyAgICAgICAg fSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAg ICAgICAiY29tYmluZWRfbGluZSI6IDEzMjUxLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxl IjogImR1a19hbGxvY19kZWZhdWx0LmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAx MzI4NSwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfYXBpX2J1ZmZlci5jIgor ICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAK KyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTMzNTgsIAorICAgICAgICAgICAgIm9yaWdp bmFsX2ZpbGUiOiAiZHVrX2FwaV9ieXRlY29kZS5jIgorICAgICAgICB9LCAKKyAgICAgICAgewor ICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9s aW5lIjogMTQxMzIsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2FwaV9jYWxs LmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6 IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAxNDY1MywgCisgICAgICAgICAgICAi b3JpZ2luYWxfZmlsZSI6ICJkdWtfYXBpX2NvZGVjLmMiCisgICAgICAgIH0sIAorICAgICAgICB7 CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVk X2xpbmUiOiAxNTU2NSwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfYXBpX2Nv bXBpbGUuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9s aW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDE1NzM3LCAKKyAgICAgICAg ICAgICJvcmlnaW5hbF9maWxlIjogImR1a19hcGlfZGVidWcuYyIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29t YmluZWRfbGluZSI6IDE1OTk4LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19h cGlfaGVhcC5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFs X2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTYyMDMsIAorICAgICAg ICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2FwaV9pbnNwZWN0LmMiCisgICAgICAgIH0sIAor ICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAg ImNvbWJpbmVkX2xpbmUiOiAxNjQ0OCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJk dWtfYXBpX21lbW9yeS5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9y aWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMTY1MjgsIAor ICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2FwaV9vYmplY3QuYyIKKyAgICAgICAg fSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAg ICAgICAiY29tYmluZWRfbGluZSI6IDE3NDg5LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxl IjogImR1a19hcGlfcmFuZG9tLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAxNzQ5 OCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfYXBpX3N0YWNrLmMiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAg ICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAyNDM2OSwgCisgICAgICAgICAgICAib3JpZ2luYWxf ZmlsZSI6ICJkdWtfYXBpX3N0cmluZy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog MjQ3NDcsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2FwaV90aW1lLmMiCisg ICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAor ICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAyNDg1NywgCisgICAgICAgICAgICAib3JpZ2lu YWxfZmlsZSI6ICJkdWtfYmlfYXJyYXkuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAg ICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6 IDI2NTEzLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19iaV9ib29sZWFuLmMi CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEs IAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAyNjU4MiwgCisgICAgICAgICAgICAib3Jp Z2luYWxfZmlsZSI6ICJkdWtfYmlfYnVmZmVyLmMiCisgICAgICAgIH0sIAorICAgICAgICB7Cisg ICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xp bmUiOiAyOTUxNywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfYmlfZGF0ZS5j IgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAx LCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzEzMjcsIAorICAgICAgICAgICAgIm9y aWdpbmFsX2ZpbGUiOiAiZHVrX2JpX2RhdGVfdW5peC5jIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5l ZF9saW5lIjogMzE2NTYsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2JpX2Rh dGVfd2luZG93cy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdp bmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzE4NDksIAorICAg ICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2JpX2R1a3RhcGUuYyIKKyAgICAgICAgfSwg CisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAg ICAiY29tYmluZWRfbGluZSI6IDMyMDA3LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjog ImR1a19iaV9lbmNvZGluZy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAg Im9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzI1NDUs IAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2JpX2Vycm9yLmMiCisgICAgICAg IH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAg ICAgICAgImNvbWJpbmVkX2xpbmUiOiAzMjkzNywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmls ZSI6ICJkdWtfYmlfZnVuY3Rpb24uYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAg ICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDMz MzkwLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19iaV9nbG9iYWwuYyIKKyAg ICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisg ICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDM0MTIxLCAKKyAgICAgICAgICAgICJvcmlnaW5h bF9maWxlIjogImR1a19iaV9qc29uLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiAz NzM5MCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfYmlfbWF0aC5jIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAg ICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzc5MDgsIAorICAgICAgICAgICAgIm9yaWdpbmFs X2ZpbGUiOiAiZHVrX2JpX251bWJlci5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog MzgxODgsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2JpX29iamVjdC5jIgor ICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAK KyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzg5OTEsIAorICAgICAgICAgICAgIm9yaWdp bmFsX2ZpbGUiOiAiZHVrX2JpX3BlcmZvcm1hbmNlLmMiCisgICAgICAgIH0sIAorICAgICAgICB7 CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVk X2xpbmUiOiAzOTAyMiwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfYmlfcG9p bnRlci5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xp bmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzkwOTcsIAorICAgICAgICAg ICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2JpX3Byb21pc2UuYyIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29t YmluZWRfbGluZSI6IDM5MTQxLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19i aV9wcm94eS5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFs X2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogMzkyMzcsIAorICAgICAg ICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2JpX3JlZmxlY3QuYyIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAi Y29tYmluZWRfbGluZSI6IDM5MzM2LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1 a19iaV9yZWdleHAuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmln aW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDM5NTYyLCAKKyAg ICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19iaV9zdHJpbmcuYyIKKyAgICAgICAgfSwg CisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAg ICAiY29tYmluZWRfbGluZSI6IDQxMTQyLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjog ImR1a19iaV9zeW1ib2wuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJv cmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDQxMzEzLCAK KyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19iaV90aHJlYWQuYyIKKyAgICAgICAg fSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAg ICAgICAiY29tYmluZWRfbGluZSI6IDQxNjI3LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxl IjogImR1a19iaV90aHJvd2VyLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA0MTYz NiwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfZGVidWdfZml4ZWRidWZmZXIu YyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjog MSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDQxNzA1LCAKKyAgICAgICAgICAgICJv cmlnaW5hbF9maWxlIjogImR1a19kZWJ1Z192c25wcmludGYuYyIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29t YmluZWRfbGluZSI6IDQyNzU0LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19k ZWJ1Z2dlci5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFs X2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNDU2NjEsIAorICAgICAg ICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2Vycm9yX2F1Z21lbnQuYyIKKyAgICAgICAgfSwg CisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAg ICAiY29tYmluZWRfbGluZSI6IDQ2MjIzLCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjog ImR1a19lcnJvcl9sb25nam1wLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA0NjMy NiwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfZXJyb3JfbWlzYy5jIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAg ICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNDY1MDAsIAorICAgICAgICAgICAgIm9yaWdpbmFs X2ZpbGUiOiAiZHVrX2Vycm9yX3Rocm93LmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAg ICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUi OiA0NjY2MiwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfaGJ1ZmZlcl9hbGxv Yy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUi OiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNDY3OTQsIAorICAgICAgICAgICAg Im9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hidWZmZXJfb3BzLmMiCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDIsIAorICAgICAgICAgICAgImNvbWJp bmVkX2xpbmUiOiA0Njg3MywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfaGJ1 Zm9ial9taXNjLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2lu YWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA0Njg5MiwgCisgICAg ICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfaGVhcF9hbGxvYy5jIgorICAgICAgICB9LCAK KyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAg ICJjb21iaW5lZF9saW5lIjogNDgxMTMsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAi ZHVrX2hlYXBfZmluYWxpemUuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAg ICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDQ4NTU4 LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19oZWFwX2hhc2hzdHJpbmcuYyIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwg CisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDQ4Njc5LCAKKyAgICAgICAgICAgICJvcmln aW5hbF9maWxlIjogImR1a19oZWFwX21hcmthbmRzd2VlcC5jIgorICAgICAgICB9LCAKKyAgICAg ICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21i aW5lZF9saW5lIjogNTAxMTcsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hl YXBfbWVtb3J5LmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2lu YWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA1MDQ4MiwgCisgICAg ICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfaGVhcF9taXNjLmMiCisgICAgICAgIH0sIAor ICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAg ImNvbWJpbmVkX2xpbmUiOiA1MDY2MywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJk dWtfaGVhcF9yZWZjb3VudC5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAg Im9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNTE1MDUs IAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hlYXBfc3RyaW5nY2FjaGUuYyIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwg CisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDUxODE0LCAKKyAgICAgICAgICAgICJvcmln aW5hbF9maWxlIjogImR1a19oZWFwX3N0cmluZ3RhYmxlLmMiCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJp bmVkX2xpbmUiOiA1Mjg2MywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfaG9i amVjdF9hbGxvYy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdp bmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNTMxMzQsIAorICAg ICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hvYmplY3RfZW51bS5jIgorICAgICAgICB9 LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAg ICAgICJjb21iaW5lZF9saW5lIjogNTM4MzYsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUi OiAiZHVrX2hvYmplY3RfbWlzYy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAg ICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNTM4 ODksIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2hvYmplY3RfcGMybGluZS5j IgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAx LCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNTQxMzMsIAorICAgICAgICAgICAgIm9y aWdpbmFsX2ZpbGUiOiAiZHVrX2hvYmplY3RfcHJvcHMuYyIKKyAgICAgICAgfSwgCisgICAgICAg IHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmlu ZWRfbGluZSI6IDYwMjQ5LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19oc3Ry aW5nX21pc2MuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5h bF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDYwNDQ1LCAKKyAgICAg ICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19odGhyZWFkX2FsbG9jLmMiCisgICAgICAgIH0s IAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAg ICAgImNvbWJpbmVkX2xpbmUiOiA2MDUwNCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6 ICJkdWtfaHRocmVhZF9idWlsdGlucy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog NjEzODksIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2h0aHJlYWRfbWlzYy5j IgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAx LCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNjE0ODYsIAorICAgICAgICAgICAgIm9y aWdpbmFsX2ZpbGUiOiAiZHVrX2h0aHJlYWRfc3RhY2tzLmMiCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJp bmVkX2xpbmUiOiA2MTg5MywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfanNf YXJpdGguYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9s aW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDYyMDMwLCAKKyAgICAgICAg ICAgICJvcmlnaW5hbF9maWxlIjogImR1a19qc19jYWxsLmMiCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJp bmVkX2xpbmUiOiA2NDkxNSwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfanNf Y29tcGlsZXIuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5h bF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDczMDIyLCAKKyAgICAg ICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a19qc19leGVjdXRvci5jIgorICAgICAgICB9LCAK KyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAg ICJjb21iaW5lZF9saW5lIjogNzgyNDIsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAi ZHVrX2pzX29wcy5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdp bmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogNzk2OTksIAorICAg ICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX2pzX3Zhci5jIgorICAgICAgICB9LCAKKyAg ICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJj b21iaW5lZF9saW5lIjogODE0NTUsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVr X2xleGVyLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxf bGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA4MzkxNiwgCisgICAgICAg ICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfbnVtY29udi5jIgorICAgICAgICB9LCAKKyAgICAg ICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21i aW5lZF9saW5lIjogODYxOTIsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX3Jl Z2V4cF9jb21waWxlci5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9y aWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjogODc0ODIsIAor ICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX3JlZ2V4cF9leGVjdXRvci5jIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAg ICAgICAgICAgICJjb21iaW5lZF9saW5lIjogODg1MDgsIAorICAgICAgICAgICAgIm9yaWdpbmFs X2ZpbGUiOiAiZHVrX3NlbGZ0ZXN0LmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAib3JpZ2luYWxfbGluZSI6IDIsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA4 OTE1MywgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfdHZhbC5jIgorICAgICAg ICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAg ICAgICAgICJjb21iaW5lZF9saW5lIjogODkyOTQsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2Zp bGUiOiAiZHVrX3VuaWNvZGVfdGFibGVzLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAg ICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUi OiA5NTQ2MCwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfdXRpbF9iaXRkZWNv ZGVyLmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGlu ZSI6IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA5NTYyNiwgCisgICAgICAgICAg ICAib3JpZ2luYWxfZmlsZSI6ICJkdWtfdXRpbF9iaXRlbmNvZGVyLmMiCisgICAgICAgIH0sIAor ICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6IDEsIAorICAgICAgICAgICAg ImNvbWJpbmVkX2xpbmUiOiA5NTY2OSwgCisgICAgICAgICAgICAib3JpZ2luYWxfZmlsZSI6ICJk dWtfdXRpbF9idWZ3cml0ZXIuYyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAg ICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmluZWRfbGluZSI6IDk2MDI4 LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a191dGlsX2Nhc3QuYyIKKyAgICAg ICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAg ICAgICAgICAiY29tYmluZWRfbGluZSI6IDk2MTk2LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9m aWxlIjogImR1a191dGlsX2RvdWJsZS5jIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgIm9yaWdpbmFsX2xpbmUiOiAxLCAKKyAgICAgICAgICAgICJjb21iaW5lZF9saW5lIjog OTY0MzAsIAorICAgICAgICAgICAgIm9yaWdpbmFsX2ZpbGUiOiAiZHVrX3V0aWxfaGFzaGJ5dGVz LmMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAib3JpZ2luYWxfbGluZSI6 IDEsIAorICAgICAgICAgICAgImNvbWJpbmVkX2xpbmUiOiA5NjQ5MSwgCisgICAgICAgICAgICAi b3JpZ2luYWxfZmlsZSI6ICJkdWtfdXRpbF9tZW1vcnkuYyIKKyAgICAgICAgfSwgCisgICAgICAg IHsKKyAgICAgICAgICAgICJvcmlnaW5hbF9saW5lIjogMSwgCisgICAgICAgICAgICAiY29tYmlu ZWRfbGluZSI6IDk2NTI3LCAKKyAgICAgICAgICAgICJvcmlnaW5hbF9maWxlIjogImR1a191dGls X3RpbnlyYW5kb20uYyIKKyAgICAgICAgfQorICAgIF0sIAorICAgICJkdWtfdmVyc2lvbiI6IDIw Mzk5LCAKKyAgICAiZ2l0X2JyYW5jaCI6ICJtYXN0ZXIiLCAKKyAgICAiZ2l0X2NvbW1pdCI6ICJk MDQ0NTAwODNmNzk1YmNjNTgwMDhmOThiMTliYjJiNTcyN2YyNzExIiwgCisgICAgImJ1aWx0aW5f c3RyaW5nc19pbmZvIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiVW5kZWZp bmVkIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlZXNWtaV1pwYm1WayIsIAorICAgICAgICAg ICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1VDX1VOREVGSU5FRCIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJOdWxsIiwgCisgICAgICAgICAgICAiYmFzZTY0 IjogIlRuVnNiQT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVUNfTlVM TCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJTeW1ib2wi LCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiVTNsdFltOXMiLCAKKyAgICAgICAgICAgICJkZWZp bmUiOiAiRFVLX1NUUklEWF9VQ19TWU1CT0wiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAg ICAgICAgICAicGxhaW4iOiAiQXJndW1lbnRzIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlFY Sm5kVzFsYm5SeiIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1VDX0FSR1VN RU5UUyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJPYmpl Y3QiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiVDJKcVpXTjAiLCAKKyAgICAgICAgICAgICJk ZWZpbmUiOiAiRFVLX1NUUklEWF9VQ19PQkpFQ1QiCisgICAgICAgIH0sIAorICAgICAgICB7Cisg ICAgICAgICAgICAicGxhaW4iOiAiRnVuY3Rpb24iLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAi Um5WdVkzUnBiMjQ9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVUNfRlVO Q1RJT04iCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiQXJy YXkiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiUVhKeVlYaz0iLCAKKyAgICAgICAgICAgICJk ZWZpbmUiOiAiRFVLX1NUUklEWF9BUlJBWSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAg ICAgICAgICJwbGFpbiI6ICJTdHJpbmciLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiVTNSeWFX NW4iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9VQ19TVFJJTkciCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiQm9vbGVhbiIsIAorICAg ICAgICAgICAgImJhc2U2NCI6ICJRbTl2YkdWaGJnPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUi OiAiRFVLX1NUUklEWF9VQ19CT09MRUFOIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgInBsYWluIjogIk51bWJlciIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJUblZ0WW1W eSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1VDX05VTUJFUiIKKyAgICAg ICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJEYXRlIiwgCisgICAgICAg ICAgICAiYmFzZTY0IjogIlJHRjBaUT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19T VFJJRFhfREFURSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6 ICJSZWdFeHAiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiVW1WblJYaHciLCAKKyAgICAgICAg ICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9SRUdfRVhQIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogIkVycm9yIiwgCisgICAgICAgICAgICAiYmFzZTY0Ijog IlJYSnliM0k9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVUNfRVJST1Ii CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiTWF0aCIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJUV0YwYUE9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6 ICJEVUtfU1RSSURYX01BVEgiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAi cGxhaW4iOiAiSlNPTiIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJTbE5QVGc9PSIsIAorICAg ICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0pTT04iCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAicGxhaW4iOiAiIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIiIs IAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0VNUFRZX1NUUklORyIKKyAgICAg ICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJBcnJheUJ1ZmZlciIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJRWEp5WVhsQ2RXWm1aWEk9IiwgCisgICAgICAgICAgICAi ZGVmaW5lIjogIkRVS19TVFJJRFhfQVJSQVlfQlVGRkVSIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogIkRhdGFWaWV3IiwgCisgICAgICAgICAgICAiYmFzZTY0 IjogIlJHRjBZVlpwWlhjPSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0RB VEFfVklFVyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJJ bnQ4QXJyYXkiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiU1c1ME9FRnljbUY1IiwgCisgICAg ICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSU5UOF9BUlJBWSIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJVaW50OEFycmF5IiwgCisgICAgICAgICAg ICAiYmFzZTY0IjogIlZXbHVkRGhCY25KaGVRPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAi RFVLX1NUUklEWF9VSU5UOF9BUlJBWSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAg ICAgICJwbGFpbiI6ICJVaW50OENsYW1wZWRBcnJheSIsIAorICAgICAgICAgICAgImJhc2U2NCI6 ICJWV2x1ZERoRGJHRnRjR1ZrUVhKeVlYaz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVL X1NUUklEWF9VSU5UOF9DTEFNUEVEX0FSUkFZIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgInBsYWluIjogIkludDE2QXJyYXkiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAi U1c1ME1UWkJjbkpoZVE9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lO VDE2X0FSUkFZIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjog IlVpbnQxNkFycmF5IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlZXbHVkREUyUVhKeVlYaz0i LCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9VSU5UMTZfQVJSQVkiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiSW50MzJBcnJheSIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJTVzUwTXpKQmNuSmhlUT09IiwgCisgICAgICAgICAgICAi ZGVmaW5lIjogIkRVS19TVFJJRFhfSU5UMzJfQVJSQVkiCisgICAgICAgIH0sIAorICAgICAgICB7 CisgICAgICAgICAgICAicGxhaW4iOiAiVWludDMyQXJyYXkiLCAKKyAgICAgICAgICAgICJiYXNl NjQiOiAiVldsdWRETXlRWEp5WVhrPSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RS SURYX1VJTlQzMl9BUlJBWSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJw bGFpbiI6ICJGbG9hdDMyQXJyYXkiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiUm14dllYUXpN a0Z5Y21GNSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0ZMT0FUMzJfQVJS QVkiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiRmxvYXQ2 NEFycmF5IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlJteHZZWFEyTkVGeWNtRjUiLCAKKyAg ICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9GTE9BVDY0X0FSUkFZIgorICAgICAgICB9 LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogImdsb2JhbCIsIAorICAgICAgICAg ICAgImJhc2U2NCI6ICJaMnh2WW1GcyIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RS SURYX0dMT0JBTCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6 ICJPYmpFbnYiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiVDJKcVJXNTIiLCAKKyAgICAgICAg ICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9PQkpfRU5WIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogIkRlY0VudiIsIAorICAgICAgICAgICAgImJhc2U2NCI6 ICJSR1ZqUlc1MiIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0RFQ19FTlYi CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiQnVmZmVyIiwg CisgICAgICAgICAgICAiYmFzZTY0IjogIlFuVm1abVZ5IiwgCisgICAgICAgICAgICAiZGVmaW5l IjogIkRVS19TVFJJRFhfVUNfQlVGRkVSIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgInBsYWluIjogIlBvaW50ZXIiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiVUc5cGJu UmxjZz09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVUNfUE9JTlRFUiIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJUaHJlYWQiLCAK KyAgICAgICAgICAgICJiYXNlNjQiOiAiVkdoeVpXRmsiLCAKKyAgICAgICAgICAgICJkZWZpbmUi OiAiRFVLX1NUUklEWF9VQ19USFJFQUQiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAicGxhaW4iOiAiZXZhbCIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJaWFpoYkE9PSIs IAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0VWQUwiCisgICAgICAgIH0sIAor ICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAidmFsdWUiLCAKKyAgICAgICAgICAgICJi YXNlNjQiOiAiZG1Gc2RXVT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9W QUxVRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJ3cml0 YWJsZSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJkM0pwZEdGaWJHVT0iLCAKKyAgICAgICAg ICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9XUklUQUJMRSIKKyAgICAgICAgfSwgCisgICAgICAg IHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJjb25maWd1cmFibGUiLCAKKyAgICAgICAgICAgICJi YXNlNjQiOiAiWTI5dVptbG5kWEpoWW14bCIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtf U1RSSURYX0NPTkZJR1VSQUJMRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAg ICJwbGFpbiI6ICJlbnVtZXJhYmxlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlpXNTFiV1Z5 WVdKc1pRPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9FTlVNRVJBQkxF IgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogImpvaW4iLCAK KyAgICAgICAgICAgICJiYXNlNjQiOiAiYW05cGJnPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUi OiAiRFVLX1NUUklEWF9KT0lOIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAg InBsYWluIjogInRvTG9jYWxlU3RyaW5nIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImRHOU1i Mk5oYkdWVGRISnBibWM9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVE9f TE9DQUxFX1NUUklORyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFp biI6ICJ2YWx1ZU9mIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImRtRnNkV1ZQWmc9PSIsIAor ICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1ZBTFVFX09GIgorICAgICAgICB9LCAK KyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogInRvVVRDU3RyaW5nIiwgCisgICAgICAg ICAgICAiYmFzZTY0IjogImRHOVZWRU5UZEhKcGJtYz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUi OiAiRFVLX1NUUklEWF9UT19VVENfU1RSSU5HIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgInBsYWluIjogInRvSVNPU3RyaW5nIiwgCisgICAgICAgICAgICAiYmFzZTY0Ijog ImRHOUpVMDlUZEhKcGJtYz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9U T19JU09fU1RSSU5HIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWlu IjogInRvR01UU3RyaW5nIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImRHOUhUVlJUZEhKcGJt Yz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9UT19HTVRfU1RSSU5HIgor ICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogInNvdXJjZSIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJjMjkxY21ObCIsIAorICAgICAgICAgICAgImRlZmluZSI6 ICJEVUtfU1RSSURYX1NPVVJDRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAg ICJwbGFpbiI6ICJpZ25vcmVDYXNlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImFXZHViM0ps UTJGelpRPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9JR05PUkVfQ0FT RSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJtdWx0aWxp bmUiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiYlhWc2RHbHNhVzVsIiwgCisgICAgICAgICAg ICAiZGVmaW5lIjogIkRVS19TVFJJRFhfTVVMVElMSU5FIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogImxhc3RJbmRleCIsIAorICAgICAgICAgICAgImJhc2U2 NCI6ICJiR0Z6ZEVsdVpHVjQiLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9M QVNUX0lOREVYIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjog ImZsYWdzIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlpteGhaM009IiwgCisgICAgICAgICAg ICAiZGVmaW5lIjogIkRVS19TVFJJRFhfRkxBR1MiCisgICAgICAgIH0sIAorICAgICAgICB7Cisg ICAgICAgICAgICAicGxhaW4iOiAiaW5kZXgiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiYVc1 a1pYZz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9JTkRFWCIKKyAgICAg ICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJwcm90b3R5cGUiLCAKKyAg ICAgICAgICAgICJiYXNlNjQiOiAiY0hKdmRHOTBlWEJsIiwgCisgICAgICAgICAgICAiZGVmaW5l IjogIkRVS19TVFJJRFhfUFJPVE9UWVBFIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAg ICAgICAgInBsYWluIjogImNvbnN0cnVjdG9yIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlky OXVjM1J5ZFdOMGIzST0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9DT05T VFJVQ1RPUiIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJt ZXNzYWdlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImJXVnpjMkZuWlE9PSIsIAorICAgICAg ICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX01FU1NBR0UiCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAicGxhaW4iOiAiYm9vbGVhbiIsIAorICAgICAgICAgICAgImJhc2U2 NCI6ICJZbTl2YkdWaGJnPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9M Q19CT09MRUFOIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjog Im51bWJlciIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJiblZ0WW1WeSIsIAorICAgICAgICAg ICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0xDX05VTUJFUiIKKyAgICAgICAgfSwgCisgICAgICAg IHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJzdHJpbmciLCAKKyAgICAgICAgICAgICJiYXNlNjQi OiAiYzNSeWFXNW4iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9MQ19TVFJJ TkciCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAic3ltYm9s IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImMzbHRZbTlzIiwgCisgICAgICAgICAgICAiZGVm aW5lIjogIkRVS19TVFJJRFhfTENfU1lNQk9MIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgInBsYWluIjogIm9iamVjdCIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJiMkpx WldOMCIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0xDX09CSkVDVCIKKyAg ICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJ1bmRlZmluZWQiLCAK KyAgICAgICAgICAgICJiYXNlNjQiOiAiZFc1a1pXWnBibVZrIiwgCisgICAgICAgICAgICAiZGVm aW5lIjogIkRVS19TVFJJRFhfTENfVU5ERUZJTkVEIgorICAgICAgICB9LCAKKyAgICAgICAgewor ICAgICAgICAgICAgInBsYWluIjogIk5hTiIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJUbUZP IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfTkFOIgorICAgICAgICB9LCAK KyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIkluZmluaXR5IiwgCisgICAgICAgICAg ICAiYmFzZTY0IjogIlNXNW1hVzVwZEhrPSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtf U1RSSURYX0lORklOSVRZIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBs YWluIjogIi1JbmZpbml0eSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJMVWx1Wm1sdWFYUjUi LCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9NSU5VU19JTkZJTklUWSIKKyAg ICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICItMCIsIAorICAgICAg ICAgICAgImJhc2U2NCI6ICJMVEE9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJ RFhfTUlOVVNfWkVSTyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFp biI6ICIsIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIkxBPT0iLCAKKyAgICAgICAgICAgICJk ZWZpbmUiOiAiRFVLX1NUUklEWF9DT01NQSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAg ICAgICAgICJwbGFpbiI6ICJcbiAgICAiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiQ2lBZ0lD QT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9ORVdMSU5FXzRTUEFDRSIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJbLi4uXSIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJXeTR1TGwwPSIsIAorICAgICAgICAgICAgImRlZmluZSI6 ICJEVUtfU1RSSURYX0JSQUNLRVRFRF9FTExJUFNJUyIKKyAgICAgICAgfSwgCisgICAgICAgIHsK KyAgICAgICAgICAgICJwbGFpbiI6ICJJbnZhbGlkIERhdGUiLCAKKyAgICAgICAgICAgICJiYXNl NjQiOiAiU1c1MllXeHBaQ0JFWVhSbCIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RS SURYX0lOVkFMSURfREFURSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJw bGFpbiI6ICJhcmd1bWVudHMiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiWVhKbmRXMWxiblJ6 IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfTENfQVJHVU1FTlRTIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogImNhbGxlZSIsIAorICAg ICAgICAgICAgImJhc2U2NCI6ICJZMkZzYkdWbCIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJE VUtfU1RSSURYX0NBTExFRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJw bGFpbiI6ICJjYWxsZXIiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiWTJGc2JHVnkiLCAKKyAg ICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9DQUxMRVIiCisgICAgICAgIH0sIAorICAg ICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiYXBwbHkiLCAKKyAgICAgICAgICAgICJiYXNl NjQiOiAiWVhCd2JIaz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9BUFBM WSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJjb25zdHJ1 Y3QiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiWTI5dWMzUnlkV04wIiwgCisgICAgICAgICAg ICAiZGVmaW5lIjogIkRVS19TVFJJRFhfQ09OU1RSVUNUIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogImRlbGV0ZVByb3BlcnR5IiwgCisgICAgICAgICAgICAi YmFzZTY0IjogIlpHVnNaWFJsVUhKdmNHVnlkSGs9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjog IkRVS19TVFJJRFhfREVMRVRFX1BST1BFUlRZIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgInBsYWluIjogImdldCIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJaMlYwIiwg CisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfR0VUIgorICAgICAgICB9LCAKKyAg ICAgICAgeworICAgICAgICAgICAgInBsYWluIjogImhhcyIsIAorICAgICAgICAgICAgImJhc2U2 NCI6ICJhR0Z6IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSEFTIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIm93bktleXMiLCAKKyAg ICAgICAgICAgICJiYXNlNjQiOiAiYjNkdVMyVjVjdz09IiwgCisgICAgICAgICAgICAiZGVmaW5l IjogIkRVS19TVFJJRFhfT1dOX0tFWVMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAicGxhaW4iOiAiXHUwMDgxU3ltYm9sLnRvUHJpbWl0aXZlXHUwMGZmIiwgCisgICAgICAg ICAgICAiYmFzZTY0IjogImdWTjViV0p2YkM1MGIxQnlhVzFwZEdsMlpmOD0iLCAKKyAgICAgICAg ICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9XRUxMS05PV05fU1lNQk9MX1RPX1BSSU1JVElWRSIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJcdTAwODFTeW1i b2wuaGFzSW5zdGFuY2VcdTAwZmYiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiZ1ZONWJXSnZi QzVvWVhOSmJuTjBZVzVqWmY4PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURY X1dFTExLTk9XTl9TWU1CT0xfSEFTX0lOU1RBTkNFIgorICAgICAgICB9LCAKKyAgICAgICAgewor ICAgICAgICAgICAgInBsYWluIjogIlx1MDA4MVN5bWJvbC50b1N0cmluZ1RhZ1x1MDBmZiIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJnVk41YldKdmJDNTBiMU4wY21sdVoxUmhaLzg9IiwgCisg ICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfV0VMTEtOT1dOX1NZTUJPTF9UT19TVFJJ TkdfVEFHIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIlx1 MDA4MVN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVcdTAwZmYiLCAKKyAgICAgICAgICAgICJiYXNl NjQiOiAiZ1ZONWJXSnZiQzVwYzBOdmJtTmhkRk53Y21WaFpHRmliR1gvIiwgCisgICAgICAgICAg ICAiZGVmaW5lIjogIkRVS19TVFJJRFhfV0VMTEtOT1dOX1NZTUJPTF9JU19DT05DQVRfU1BSRUFE QUJMRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJzZXRQ cm90b3R5cGVPZiIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJjMlYwVUhKdmRHOTBlWEJsVDJZ PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1NFVF9QUk9UT1RZUEVfT0Yi CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiX19wcm90b19f IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlgxOXdjbTkwYjE5ZiIsIAorICAgICAgICAgICAg ImRlZmluZSI6ICJEVUtfU1RSSURYX19fUFJPVE9fXyIKKyAgICAgICAgfSwgCisgICAgICAgIHsK KyAgICAgICAgICAgICJwbGFpbiI6ICJ0b1N0cmluZyIsIAorICAgICAgICAgICAgImJhc2U2NCI6 ICJkRzlUZEhKcGJtYz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9UT19T VFJJTkciCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAidG9K U09OIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImRHOUtVMDlPIiwgCisgICAgICAgICAgICAi ZGVmaW5lIjogIkRVS19TVFJJRFhfVE9fSlNPTiIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAg ICAgICAgICAgICJwbGFpbiI6ICJ0eXBlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImRIbHda UT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVFlQRSIKKyAgICAgICAg fSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJkYXRhIiwgCisgICAgICAgICAg ICAiYmFzZTY0IjogIlpHRjBZUT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJ RFhfREFUQSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJs ZW5ndGgiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiYkdWdVozUm8iLCAKKyAgICAgICAgICAg ICJkZWZpbmUiOiAiRFVLX1NUUklEWF9MRU5HVEgiCisgICAgICAgIH0sIAorICAgICAgICB7Cisg ICAgICAgICAgICAicGxhaW4iOiAic2V0IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImMyVjAi LCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9TRVQiCisgICAgICAgIH0sIAor ICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAic3RhY2siLCAKKyAgICAgICAgICAgICJi YXNlNjQiOiAiYzNSaFkycz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9T VEFDSyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJwYyIs IAorICAgICAgICAgICAgImJhc2U2NCI6ICJjR009IiwgCisgICAgICAgICAgICAiZGVmaW5lIjog IkRVS19TVFJJRFhfUEMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxh aW4iOiAibGluZU51bWJlciIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJiR2x1WlU1MWJXSmxj Zz09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfTElORV9OVU1CRVIiCisg ICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiXHUwMDgyVHJhY2Vk YXRhIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImdsUnlZV05sWkdGMFlRPT0iLCAKKyAgICAg ICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9JTlRfVFJBQ0VEQVRBIgorICAgICAgICB9LCAK KyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIm5hbWUiLCAKKyAgICAgICAgICAgICJi YXNlNjQiOiAiYm1GdFpRPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9O QU1FIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogImZpbGVO YW1lIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlptbHNaVTVoYldVPSIsIAorICAgICAgICAg ICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0ZJTEVfTkFNRSIKKyAgICAgICAgfSwgCisgICAgICAg IHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJwb2ludGVyIiwgCisgICAgICAgICAgICAiYmFzZTY0 IjogImNHOXBiblJsY2c9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0xD X1BPSU5URVIiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAi XHUwMDgyVGFyZ2V0IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImdsUmhjbWRsZEE9PSIsIAor ICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lOVF9UQVJHRVQiCisgICAgICAgIH0s IAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiXHUwMDgyTmV4dCIsIAorICAgICAg ICAgICAgImJhc2U2NCI6ICJnazVsZUhRPSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtf U1RSSURYX0lOVF9ORVhUIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBs YWluIjogIlx1MDA4MkJ5dGVjb2RlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImdrSjVkR1Zq YjJSbCIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lOVF9CWVRFQ09ERSIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJcdTAwODJGb3Jt YWxzIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImdrWnZjbTFoYkhNPSIsIAorICAgICAgICAg ICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lOVF9GT1JNQUxTIgorICAgICAgICB9LCAKKyAgICAg ICAgeworICAgICAgICAgICAgInBsYWluIjogIlx1MDA4MlZhcm1hcCIsIAorICAgICAgICAgICAg ImJhc2U2NCI6ICJnbFpoY20xaGNBPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NU UklEWF9JTlRfVkFSTUFQIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBs YWluIjogIlx1MDA4MlNvdXJjZSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJnbE52ZFhKalpR PT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9JTlRfU09VUkNFIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIlx1MDA4MlBjMmxpbmUi LCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiZ2xCak1teHBibVU9IiwgCisgICAgICAgICAgICAi ZGVmaW5lIjogIkRVS19TVFJJRFhfSU5UX1BDMkxJTkUiCisgICAgICAgIH0sIAorICAgICAgICB7 CisgICAgICAgICAgICAicGxhaW4iOiAiXHUwMDgyTWFwIiwgCisgICAgICAgICAgICAiYmFzZTY0 IjogImdrMWhjQT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSU5UX01B UCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJcdTAwODJW YXJlbnYiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiZ2xaaGNtVnVkZz09IiwgCisgICAgICAg ICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSU5UX1ZBUkVOViIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJcdTAwODJGaW5hbGl6ZXIiLCAKKyAgICAgICAg ICAgICJiYXNlNjQiOiAiZ2tacGJtRnNhWHBsY2c9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6 ICJEVUtfU1RSSURYX0lOVF9GSU5BTElaRVIiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAg ICAgICAgICAicGxhaW4iOiAiXHUwMDgyVmFsdWUiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAi Z2xaaGJIVmwiLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9JTlRfVkFMVUUi CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiY29tcGlsZSIs IAorICAgICAgICAgICAgImJhc2U2NCI6ICJZMjl0Y0dsc1pRPT0iLCAKKyAgICAgICAgICAgICJk ZWZpbmUiOiAiRFVLX1NUUklEWF9DT01QSUxFIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgInBsYWluIjogImlucHV0IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImFXNXdk WFE9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSU5QVVQiCisgICAgICAg IH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiZXJyQ3JlYXRlIiwgCisgICAg ICAgICAgICAiYmFzZTY0IjogIlpYSnlRM0psWVhSbCIsIAorICAgICAgICAgICAgImRlZmluZSI6 ICJEVUtfU1RSSURYX0VSUl9DUkVBVEUiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAicGxhaW4iOiAiZXJyVGhyb3ciLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiWlhKeVZH aHliM2M9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfRVJSX1RIUk9XIgor ICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogImVudiIsIAorICAg ICAgICAgICAgImJhc2U2NCI6ICJaVzUyIiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19T VFJJRFhfRU5WIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjog ImhleCIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJhR1Y0IiwgCisgICAgICAgICAgICAiZGVm aW5lIjogIkRVS19TVFJJRFhfSEVYIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAg ICAgInBsYWluIjogImJhc2U2NCIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJZbUZ6WlRZMCIs IAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0JBU0U2NCIKKyAgICAgICAgfSwg CisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJqeCIsIAorICAgICAgICAgICAgImJh c2U2NCI6ICJhbmc9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSlgiCisg ICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiamMiLCAKKyAgICAg ICAgICAgICJiYXNlNjQiOiAiYW1NPSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RS SURYX0pDIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIntc Il91bmRlZlwiOnRydWV9IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImV5SmZkVzVrWldZaU9u UnlkV1Y5IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSlNPTl9FWFRfVU5E RUZJTkVEIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIntc Il9uYW5cIjp0cnVlfSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJleUpmYm1GdUlqcDBjblZs ZlE9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0pTT05fRVhUX05BTiIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJ7XCJfaW5mXCI6 dHJ1ZX0iLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiZXlKZmFXNW1JanAwY25WbGZRPT0iLCAK KyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9KU09OX0VYVF9QT1NJTkYiCisgICAg ICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAie1wiX25pbmZcIjp0cnVl fSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJleUpmYm1sdVppSTZkSEoxWlgwPSIsIAorICAg ICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0pTT05fRVhUX05FR0lORiIKKyAgICAgICAg fSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJ7XCJfZnVuY1wiOnRydWV9Iiwg CisgICAgICAgICAgICAiYmFzZTY0IjogImV5SmZablZ1WXlJNmRISjFaWDA9IiwgCisgICAgICAg ICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfSlNPTl9FWFRfRlVOQ1RJT04xIgorICAgICAgICB9 LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIntfZnVuYzp0cnVlfSIsIAorICAg ICAgICAgICAgImJhc2U2NCI6ICJlMTltZFc1ak9uUnlkV1Y5IiwgCisgICAgICAgICAgICAiZGVm aW5lIjogIkRVS19TVFJJRFhfSlNPTl9FWFRfRlVOQ1RJT04yIgorICAgICAgICB9LCAKKyAgICAg ICAgeworICAgICAgICAgICAgInBsYWluIjogImJyZWFrIiwgCisgICAgICAgICAgICAiYmFzZTY0 IjogIlluSmxZV3M9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfQlJFQUsi CisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiY2FzZSIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJZMkZ6WlE9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6 ICJEVUtfU1RSSURYX0NBU0UiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAi cGxhaW4iOiAiY2F0Y2giLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiWTJGMFkyZz0iLCAKKyAg ICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9DQVRDSCIKKyAgICAgICAgfSwgCisgICAg ICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJjb250aW51ZSIsIAorICAgICAgICAgICAgImJh c2U2NCI6ICJZMjl1ZEdsdWRXVT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklE WF9DT05USU5VRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6 ICJkZWJ1Z2dlciIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJaR1ZpZFdkblpYST0iLCAKKyAg ICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9ERUJVR0dFUiIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJkZWZhdWx0IiwgCisgICAgICAgICAgICAi YmFzZTY0IjogIlpHVm1ZWFZzZEE9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RS SURYX0RFRkFVTFQiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4i OiAiZGVsZXRlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlpHVnNaWFJsIiwgCisgICAgICAg ICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfREVMRVRFIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogImRvIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlpH OD0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9ETyIKKyAgICAgICAgfSwg CisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJlbHNlIiwgCisgICAgICAgICAgICAi YmFzZTY0IjogIlpXeHpaUT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhf RUxTRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJmaW5h bGx5IiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlptbHVZV3hzZVE9PSIsIAorICAgICAgICAg ICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0ZJTkFMTFkiCisgICAgICAgIH0sIAorICAgICAgICB7 CisgICAgICAgICAgICAicGxhaW4iOiAiZm9yIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlpt OXkiLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9GT1IiCisgICAgICAgIH0s IAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiZnVuY3Rpb24iLCAKKyAgICAgICAg ICAgICJiYXNlNjQiOiAiWm5WdVkzUnBiMjQ9IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRV S19TVFJJRFhfTENfRlVOQ1RJT04iCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAicGxhaW4iOiAiaWYiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiYVdZPSIsIAorICAgICAg ICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lGIgorICAgICAgICB9LCAKKyAgICAgICAgewor ICAgICAgICAgICAgInBsYWluIjogImluIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImFXND0i LCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9JTiIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJpbnN0YW5jZW9mIiwgCisgICAgICAgICAg ICAiYmFzZTY0IjogImFXNXpkR0Z1WTJWdlpnPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAi RFVLX1NUUklEWF9JTlNUQU5DRU9GIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAg ICAgInBsYWluIjogIm5ldyIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJibVYzIiwgCisgICAg ICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfTkVXIgorICAgICAgICB9LCAKKyAgICAgICAg eworICAgICAgICAgICAgInBsYWluIjogInJldHVybiIsIAorICAgICAgICAgICAgImJhc2U2NCI6 ICJjbVYwZFhKdSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1JFVFVSTiIK KyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJzd2l0Y2giLCAK KyAgICAgICAgICAgICJiYXNlNjQiOiAiYzNkcGRHTm8iLCAKKyAgICAgICAgICAgICJkZWZpbmUi OiAiRFVLX1NUUklEWF9TV0lUQ0giCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAg ICAicGxhaW4iOiAidGhpcyIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJkR2hwY3c9PSIsIAor ICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1RISVMiCisgICAgICAgIH0sIAorICAg ICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAidGhyb3ciLCAKKyAgICAgICAgICAgICJiYXNl NjQiOiAiZEdoeWIzYz0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9USFJP VyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJ0cnkiLCAK KyAgICAgICAgICAgICJiYXNlNjQiOiAiZEhKNSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJE VUtfU1RSSURYX1RSWSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFp biI6ICJ0eXBlb2YiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiZEhsd1pXOW0iLCAKKyAgICAg ICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9UWVBFT0YiCisgICAgICAgIH0sIAorICAgICAg ICB7CisgICAgICAgICAgICAicGxhaW4iOiAidmFyIiwgCisgICAgICAgICAgICAiYmFzZTY0Ijog ImRtRnkiLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9WQVIiCisgICAgICAg IH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiY29uc3QiLCAKKyAgICAgICAg ICAgICJiYXNlNjQiOiAiWTI5dWMzUT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NU UklEWF9DT05TVCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6 ICJ2b2lkIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImRtOXBaQT09IiwgCisgICAgICAgICAg ICAiZGVmaW5lIjogIkRVS19TVFJJRFhfVk9JRCIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAg ICAgICAgICAgICJwbGFpbiI6ICJ3aGlsZSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJkMmhw YkdVPSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1dISUxFIgorICAgICAg ICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogIndpdGgiLCAKKyAgICAgICAg ICAgICJiYXNlNjQiOiAiZDJsMGFBPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NU UklEWF9XSVRIIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjog ImNsYXNzIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogIlkyeGhjM009IiwgCisgICAgICAgICAg ICAiZGVmaW5lIjogIkRVS19TVFJJRFhfQ0xBU1MiCisgICAgICAgIH0sIAorICAgICAgICB7Cisg ICAgICAgICAgICAicGxhaW4iOiAiZW51bSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJaVzUx YlE9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0VOVU0iCisgICAgICAg IH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAiZXhwb3J0IiwgCisgICAgICAg ICAgICAiYmFzZTY0IjogIlpYaHdiM0owIiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19T VFJJRFhfRVhQT1JUIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWlu IjogImV4dGVuZHMiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiWlhoMFpXNWtjdz09IiwgCisg ICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfRVhURU5EUyIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJpbXBvcnQiLCAKKyAgICAgICAgICAgICJi YXNlNjQiOiAiYVcxd2IzSjAiLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9J TVBPUlQiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAic3Vw ZXIiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAiYzNWd1pYST0iLCAKKyAgICAgICAgICAgICJk ZWZpbmUiOiAiRFVLX1NUUklEWF9TVVBFUiIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAg ICAgICAgICJwbGFpbiI6ICJudWxsIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImJuVnNiQT09 IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfTENfTlVMTCIKKyAgICAgICAg fSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJ0cnVlIiwgCisgICAgICAgICAg ICAiYmFzZTY0IjogImRISjFaUT09IiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJ RFhfVFJVRSIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJm YWxzZSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJabUZzYzJVPSIsIAorICAgICAgICAgICAg ImRlZmluZSI6ICJEVUtfU1RSSURYX0ZBTFNFIgorICAgICAgICB9LCAKKyAgICAgICAgeworICAg ICAgICAgICAgInBsYWluIjogImltcGxlbWVudHMiLCAKKyAgICAgICAgICAgICJiYXNlNjQiOiAi YVcxd2JHVnRaVzUwY3c9PSIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lN UExFTUVOVFMiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAgICAgICAicGxhaW4iOiAi aW50ZXJmYWNlIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImFXNTBaWEptWVdObCIsIAorICAg ICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0lOVEVSRkFDRSIKKyAgICAgICAgfSwgCisg ICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJsZXQiLCAKKyAgICAgICAgICAgICJiYXNl NjQiOiAiYkdWMCIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX0xFVCIKKyAg ICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFpbiI6ICJwYWNrYWdlIiwgCisg ICAgICAgICAgICAiYmFzZTY0IjogImNHRmphMkZuWlE9PSIsIAorICAgICAgICAgICAgImRlZmlu ZSI6ICJEVUtfU1RSSURYX1BBQ0tBR0UiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAgICAg ICAgICAicGxhaW4iOiAicHJpdmF0ZSIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJjSEpwZG1G MFpRPT0iLCAKKyAgICAgICAgICAgICJkZWZpbmUiOiAiRFVLX1NUUklEWF9QUklWQVRFIgorICAg ICAgICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogInByb3RlY3RlZCIsIAor ICAgICAgICAgICAgImJhc2U2NCI6ICJjSEp2ZEdWamRHVmsiLCAKKyAgICAgICAgICAgICJkZWZp bmUiOiAiRFVLX1NUUklEWF9QUk9URUNURUQiCisgICAgICAgIH0sIAorICAgICAgICB7CisgICAg ICAgICAgICAicGxhaW4iOiAicHVibGljIiwgCisgICAgICAgICAgICAiYmFzZTY0IjogImNIVmli R2xqIiwgCisgICAgICAgICAgICAiZGVmaW5lIjogIkRVS19TVFJJRFhfUFVCTElDIgorICAgICAg ICB9LCAKKyAgICAgICAgeworICAgICAgICAgICAgInBsYWluIjogInN0YXRpYyIsIAorICAgICAg ICAgICAgImJhc2U2NCI6ICJjM1JoZEdsaiIsIAorICAgICAgICAgICAgImRlZmluZSI6ICJEVUtf U1RSSURYX1NUQVRJQyIKKyAgICAgICAgfSwgCisgICAgICAgIHsKKyAgICAgICAgICAgICJwbGFp biI6ICJ5aWVsZCIsIAorICAgICAgICAgICAgImJhc2U2NCI6ICJlV2xsYkdRPSIsIAorICAgICAg ICAgICAgImRlZmluZSI6ICJEVUtfU1RSSURYX1lJRUxEIgorICAgICAgICB9CisgICAgXSwgCisg ICAgImJ1aWx0aW5fc3RyaW5nc19iYXNlNjQiOiBbCisgICAgICAgICJWVzVrWldacGJtVmsiLCAK KyAgICAgICAgIlRuVnNiQT09IiwgCisgICAgICAgICJVM2x0WW05cyIsIAorICAgICAgICAiUVhK bmRXMWxiblJ6IiwgCisgICAgICAgICJUMkpxWldOMCIsIAorICAgICAgICAiUm5WdVkzUnBiMjQ9 IiwgCisgICAgICAgICJRWEp5WVhrPSIsIAorICAgICAgICAiVTNSeWFXNW4iLCAKKyAgICAgICAg IlFtOXZiR1ZoYmc9PSIsIAorICAgICAgICAiVG5WdFltVnkiLCAKKyAgICAgICAgIlJHRjBaUT09 IiwgCisgICAgICAgICJVbVZuUlhodyIsIAorICAgICAgICAiUlhKeWIzST0iLCAKKyAgICAgICAg IlRXRjBhQT09IiwgCisgICAgICAgICJTbE5QVGc9PSIsIAorICAgICAgICAiIiwgCisgICAgICAg ICJRWEp5WVhsQ2RXWm1aWEk9IiwgCisgICAgICAgICJSR0YwWVZacFpYYz0iLCAKKyAgICAgICAg IlNXNTBPRUZ5Y21GNSIsIAorICAgICAgICAiVldsdWREaEJjbkpoZVE9PSIsIAorICAgICAgICAi VldsdWREaERiR0Z0Y0dWa1FYSnlZWGs9IiwgCisgICAgICAgICJTVzUwTVRaQmNuSmhlUT09Iiwg CisgICAgICAgICJWV2x1ZERFMlFYSnlZWGs9IiwgCisgICAgICAgICJTVzUwTXpKQmNuSmhlUT09 IiwgCisgICAgICAgICJWV2x1ZERNeVFYSnlZWGs9IiwgCisgICAgICAgICJSbXh2WVhRek1rRnlj bUY1IiwgCisgICAgICAgICJSbXh2WVhRMk5FRnljbUY1IiwgCisgICAgICAgICJaMnh2WW1GcyIs IAorICAgICAgICAiVDJKcVJXNTIiLCAKKyAgICAgICAgIlJHVmpSVzUyIiwgCisgICAgICAgICJR blZtWm1WeSIsIAorICAgICAgICAiVUc5cGJuUmxjZz09IiwgCisgICAgICAgICJWR2h5WldGayIs IAorICAgICAgICAiWlhaaGJBPT0iLCAKKyAgICAgICAgImRtRnNkV1U9IiwgCisgICAgICAgICJk M0pwZEdGaWJHVT0iLCAKKyAgICAgICAgIlkyOXVabWxuZFhKaFlteGwiLCAKKyAgICAgICAgIlpX NTFiV1Z5WVdKc1pRPT0iLCAKKyAgICAgICAgImFtOXBiZz09IiwgCisgICAgICAgICJkRzlNYjJO aGJHVlRkSEpwYm1jPSIsIAorICAgICAgICAiZG1Gc2RXVlBaZz09IiwgCisgICAgICAgICJkRzlW VkVOVGRISnBibWM9IiwgCisgICAgICAgICJkRzlKVTA5VGRISnBibWM9IiwgCisgICAgICAgICJk RzlIVFZSVGRISnBibWM9IiwgCisgICAgICAgICJjMjkxY21ObCIsIAorICAgICAgICAiYVdkdWIz SmxRMkZ6WlE9PSIsIAorICAgICAgICAiYlhWc2RHbHNhVzVsIiwgCisgICAgICAgICJiR0Z6ZEVs dVpHVjQiLCAKKyAgICAgICAgIlpteGhaM009IiwgCisgICAgICAgICJhVzVrWlhnPSIsIAorICAg ICAgICAiY0hKdmRHOTBlWEJsIiwgCisgICAgICAgICJZMjl1YzNSeWRXTjBiM0k9IiwgCisgICAg ICAgICJiV1Z6YzJGblpRPT0iLCAKKyAgICAgICAgIlltOXZiR1ZoYmc9PSIsIAorICAgICAgICAi Ym5WdFltVnkiLCAKKyAgICAgICAgImMzUnlhVzVuIiwgCisgICAgICAgICJjM2x0WW05cyIsIAor ICAgICAgICAiYjJKcVpXTjAiLCAKKyAgICAgICAgImRXNWtaV1pwYm1WayIsIAorICAgICAgICAi VG1GTyIsIAorICAgICAgICAiU1c1bWFXNXBkSGs9IiwgCisgICAgICAgICJMVWx1Wm1sdWFYUjUi LCAKKyAgICAgICAgIkxUQT0iLCAKKyAgICAgICAgIkxBPT0iLCAKKyAgICAgICAgIkNpQWdJQ0E9 IiwgCisgICAgICAgICJXeTR1TGwwPSIsIAorICAgICAgICAiU1c1MllXeHBaQ0JFWVhSbCIsIAor ICAgICAgICAiWVhKbmRXMWxiblJ6IiwgCisgICAgICAgICJZMkZzYkdWbCIsIAorICAgICAgICAi WTJGc2JHVnkiLCAKKyAgICAgICAgIllYQndiSGs9IiwgCisgICAgICAgICJZMjl1YzNSeWRXTjAi LCAKKyAgICAgICAgIlpHVnNaWFJsVUhKdmNHVnlkSGs9IiwgCisgICAgICAgICJaMlYwIiwgCisg ICAgICAgICJhR0Z6IiwgCisgICAgICAgICJiM2R1UzJWNWN3PT0iLCAKKyAgICAgICAgImdWTjVi V0p2YkM1MGIxQnlhVzFwZEdsMlpmOD0iLCAKKyAgICAgICAgImdWTjViV0p2YkM1b1lYTkpibk4w WVc1alpmOD0iLCAKKyAgICAgICAgImdWTjViV0p2YkM1MGIxTjBjbWx1WjFSaFovOD0iLCAKKyAg ICAgICAgImdWTjViV0p2YkM1cGMwTnZibU5oZEZOd2NtVmhaR0ZpYkdYLyIsIAorICAgICAgICAi YzJWMFVISnZkRzkwZVhCbFQyWT0iLCAKKyAgICAgICAgIlgxOXdjbTkwYjE5ZiIsIAorICAgICAg ICAiZEc5VGRISnBibWM9IiwgCisgICAgICAgICJkRzlLVTA5TyIsIAorICAgICAgICAiZEhsd1pR PT0iLCAKKyAgICAgICAgIlpHRjBZUT09IiwgCisgICAgICAgICJiR1Z1WjNSbyIsIAorICAgICAg ICAiYzJWMCIsIAorICAgICAgICAiYzNSaFkycz0iLCAKKyAgICAgICAgImNHTT0iLCAKKyAgICAg ICAgImJHbHVaVTUxYldKbGNnPT0iLCAKKyAgICAgICAgImdsUnlZV05sWkdGMFlRPT0iLCAKKyAg ICAgICAgImJtRnRaUT09IiwgCisgICAgICAgICJabWxzWlU1aGJXVT0iLCAKKyAgICAgICAgImNH OXBiblJsY2c9PSIsIAorICAgICAgICAiZ2xSaGNtZGxkQT09IiwgCisgICAgICAgICJnazVsZUhR PSIsIAorICAgICAgICAiZ2tKNWRHVmpiMlJsIiwgCisgICAgICAgICJna1p2Y20xaGJITT0iLCAK KyAgICAgICAgImdsWmhjbTFoY0E9PSIsIAorICAgICAgICAiZ2xOdmRYSmpaUT09IiwgCisgICAg ICAgICJnbEJqTW14cGJtVT0iLCAKKyAgICAgICAgImdrMWhjQT09IiwgCisgICAgICAgICJnbFpo Y21WdWRnPT0iLCAKKyAgICAgICAgImdrWnBibUZzYVhwbGNnPT0iLCAKKyAgICAgICAgImdsWmhi SFZsIiwgCisgICAgICAgICJZMjl0Y0dsc1pRPT0iLCAKKyAgICAgICAgImFXNXdkWFE9IiwgCisg ICAgICAgICJaWEp5UTNKbFlYUmwiLCAKKyAgICAgICAgIlpYSnlWR2h5YjNjPSIsIAorICAgICAg ICAiWlc1MiIsIAorICAgICAgICAiYUdWNCIsIAorICAgICAgICAiWW1GelpUWTAiLCAKKyAgICAg ICAgImFuZz0iLCAKKyAgICAgICAgImFtTT0iLCAKKyAgICAgICAgImV5SmZkVzVrWldZaU9uUnlk V1Y5IiwgCisgICAgICAgICJleUpmYm1GdUlqcDBjblZsZlE9PSIsIAorICAgICAgICAiZXlKZmFX NW1JanAwY25WbGZRPT0iLCAKKyAgICAgICAgImV5SmZibWx1WmlJNmRISjFaWDA9IiwgCisgICAg ICAgICJleUpmWm5WdVl5STZkSEoxWlgwPSIsIAorICAgICAgICAiZTE5bWRXNWpPblJ5ZFdWOSIs IAorICAgICAgICAiWW5KbFlXcz0iLCAKKyAgICAgICAgIlkyRnpaUT09IiwgCisgICAgICAgICJZ MkYwWTJnPSIsIAorICAgICAgICAiWTI5dWRHbHVkV1U9IiwgCisgICAgICAgICJaR1ZpZFdkblpY ST0iLCAKKyAgICAgICAgIlpHVm1ZWFZzZEE9PSIsIAorICAgICAgICAiWkdWc1pYUmwiLCAKKyAg ICAgICAgIlpHOD0iLCAKKyAgICAgICAgIlpXeHpaUT09IiwgCisgICAgICAgICJabWx1WVd4c2VR PT0iLCAKKyAgICAgICAgIlptOXkiLCAKKyAgICAgICAgIlpuVnVZM1JwYjI0PSIsIAorICAgICAg ICAiYVdZPSIsIAorICAgICAgICAiYVc0PSIsIAorICAgICAgICAiYVc1emRHRnVZMlZ2Wmc9PSIs IAorICAgICAgICAiYm1WMyIsIAorICAgICAgICAiY21WMGRYSnUiLCAKKyAgICAgICAgImMzZHBk R05vIiwgCisgICAgICAgICJkR2hwY3c9PSIsIAorICAgICAgICAiZEdoeWIzYz0iLCAKKyAgICAg ICAgImRISjUiLCAKKyAgICAgICAgImRIbHdaVzltIiwgCisgICAgICAgICJkbUZ5IiwgCisgICAg ICAgICJZMjl1YzNRPSIsIAorICAgICAgICAiZG05cFpBPT0iLCAKKyAgICAgICAgImQyaHBiR1U9 IiwgCisgICAgICAgICJkMmwwYUE9PSIsIAorICAgICAgICAiWTJ4aGMzTT0iLCAKKyAgICAgICAg IlpXNTFiUT09IiwgCisgICAgICAgICJaWGh3YjNKMCIsIAorICAgICAgICAiWlhoMFpXNWtjdz09 IiwgCisgICAgICAgICJhVzF3YjNKMCIsIAorICAgICAgICAiYzNWd1pYST0iLCAKKyAgICAgICAg ImJuVnNiQT09IiwgCisgICAgICAgICJkSEoxWlE9PSIsIAorICAgICAgICAiWm1Gc2MyVT0iLCAK KyAgICAgICAgImFXMXdiR1Z0Wlc1MGN3PT0iLCAKKyAgICAgICAgImFXNTBaWEptWVdObCIsIAor ICAgICAgICAiYkdWMCIsIAorICAgICAgICAiY0dGamEyRm5aUT09IiwgCisgICAgICAgICJjSEpw ZG1GMFpRPT0iLCAKKyAgICAgICAgImNISnZkR1ZqZEdWayIsIAorICAgICAgICAiY0hWaWJHbGoi LCAKKyAgICAgICAgImMzUmhkR2xqIiwgCisgICAgICAgICJlV2xsYkdRPSIKKyAgICBdLCAKKyAg ICAiZ2l0X2Rlc2NyaWJlIjogInYyLjMuMC03LWdkMDQ0NTAwOCIsIAorICAgICJidWlsdGluX3N0 cmluZ3MiOiBbCisgICAgICAgICJVbmRlZmluZWQiLCAKKyAgICAgICAgIk51bGwiLCAKKyAgICAg ICAgIlN5bWJvbCIsIAorICAgICAgICAiQXJndW1lbnRzIiwgCisgICAgICAgICJPYmplY3QiLCAK KyAgICAgICAgIkZ1bmN0aW9uIiwgCisgICAgICAgICJBcnJheSIsIAorICAgICAgICAiU3RyaW5n IiwgCisgICAgICAgICJCb29sZWFuIiwgCisgICAgICAgICJOdW1iZXIiLCAKKyAgICAgICAgIkRh dGUiLCAKKyAgICAgICAgIlJlZ0V4cCIsIAorICAgICAgICAiRXJyb3IiLCAKKyAgICAgICAgIk1h dGgiLCAKKyAgICAgICAgIkpTT04iLCAKKyAgICAgICAgIiIsIAorICAgICAgICAiQXJyYXlCdWZm ZXIiLCAKKyAgICAgICAgIkRhdGFWaWV3IiwgCisgICAgICAgICJJbnQ4QXJyYXkiLCAKKyAgICAg ICAgIlVpbnQ4QXJyYXkiLCAKKyAgICAgICAgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgCisgICAgICAg ICJJbnQxNkFycmF5IiwgCisgICAgICAgICJVaW50MTZBcnJheSIsIAorICAgICAgICAiSW50MzJB cnJheSIsIAorICAgICAgICAiVWludDMyQXJyYXkiLCAKKyAgICAgICAgIkZsb2F0MzJBcnJheSIs IAorICAgICAgICAiRmxvYXQ2NEFycmF5IiwgCisgICAgICAgICJnbG9iYWwiLCAKKyAgICAgICAg Ik9iakVudiIsIAorICAgICAgICAiRGVjRW52IiwgCisgICAgICAgICJCdWZmZXIiLCAKKyAgICAg ICAgIlBvaW50ZXIiLCAKKyAgICAgICAgIlRocmVhZCIsIAorICAgICAgICAiZXZhbCIsIAorICAg ICAgICAidmFsdWUiLCAKKyAgICAgICAgIndyaXRhYmxlIiwgCisgICAgICAgICJjb25maWd1cmFi bGUiLCAKKyAgICAgICAgImVudW1lcmFibGUiLCAKKyAgICAgICAgImpvaW4iLCAKKyAgICAgICAg InRvTG9jYWxlU3RyaW5nIiwgCisgICAgICAgICJ2YWx1ZU9mIiwgCisgICAgICAgICJ0b1VUQ1N0 cmluZyIsIAorICAgICAgICAidG9JU09TdHJpbmciLCAKKyAgICAgICAgInRvR01UU3RyaW5nIiwg CisgICAgICAgICJzb3VyY2UiLCAKKyAgICAgICAgImlnbm9yZUNhc2UiLCAKKyAgICAgICAgIm11 bHRpbGluZSIsIAorICAgICAgICAibGFzdEluZGV4IiwgCisgICAgICAgICJmbGFncyIsIAorICAg ICAgICAiaW5kZXgiLCAKKyAgICAgICAgInByb3RvdHlwZSIsIAorICAgICAgICAiY29uc3RydWN0 b3IiLCAKKyAgICAgICAgIm1lc3NhZ2UiLCAKKyAgICAgICAgImJvb2xlYW4iLCAKKyAgICAgICAg Im51bWJlciIsIAorICAgICAgICAic3RyaW5nIiwgCisgICAgICAgICJzeW1ib2wiLCAKKyAgICAg ICAgIm9iamVjdCIsIAorICAgICAgICAidW5kZWZpbmVkIiwgCisgICAgICAgICJOYU4iLCAKKyAg ICAgICAgIkluZmluaXR5IiwgCisgICAgICAgICItSW5maW5pdHkiLCAKKyAgICAgICAgIi0wIiwg CisgICAgICAgICIsIiwgCisgICAgICAgICJcbiAgICAiLCAKKyAgICAgICAgIlsuLi5dIiwgCisg ICAgICAgICJJbnZhbGlkIERhdGUiLCAKKyAgICAgICAgImFyZ3VtZW50cyIsIAorICAgICAgICAi Y2FsbGVlIiwgCisgICAgICAgICJjYWxsZXIiLCAKKyAgICAgICAgImFwcGx5IiwgCisgICAgICAg ICJjb25zdHJ1Y3QiLCAKKyAgICAgICAgImRlbGV0ZVByb3BlcnR5IiwgCisgICAgICAgICJnZXQi LCAKKyAgICAgICAgImhhcyIsIAorICAgICAgICAib3duS2V5cyIsIAorICAgICAgICAiXHUwMDgx U3ltYm9sLnRvUHJpbWl0aXZlXHUwMGZmIiwgCisgICAgICAgICJcdTAwODFTeW1ib2wuaGFzSW5z dGFuY2VcdTAwZmYiLCAKKyAgICAgICAgIlx1MDA4MVN5bWJvbC50b1N0cmluZ1RhZ1x1MDBmZiIs IAorICAgICAgICAiXHUwMDgxU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZVx1MDBmZiIsIAorICAg ICAgICAic2V0UHJvdG90eXBlT2YiLCAKKyAgICAgICAgIl9fcHJvdG9fXyIsIAorICAgICAgICAi dG9TdHJpbmciLCAKKyAgICAgICAgInRvSlNPTiIsIAorICAgICAgICAidHlwZSIsIAorICAgICAg ICAiZGF0YSIsIAorICAgICAgICAibGVuZ3RoIiwgCisgICAgICAgICJzZXQiLCAKKyAgICAgICAg InN0YWNrIiwgCisgICAgICAgICJwYyIsIAorICAgICAgICAibGluZU51bWJlciIsIAorICAgICAg ICAiXHUwMDgyVHJhY2VkYXRhIiwgCisgICAgICAgICJuYW1lIiwgCisgICAgICAgICJmaWxlTmFt ZSIsIAorICAgICAgICAicG9pbnRlciIsIAorICAgICAgICAiXHUwMDgyVGFyZ2V0IiwgCisgICAg ICAgICJcdTAwODJOZXh0IiwgCisgICAgICAgICJcdTAwODJCeXRlY29kZSIsIAorICAgICAgICAi XHUwMDgyRm9ybWFscyIsIAorICAgICAgICAiXHUwMDgyVmFybWFwIiwgCisgICAgICAgICJcdTAw ODJTb3VyY2UiLCAKKyAgICAgICAgIlx1MDA4MlBjMmxpbmUiLCAKKyAgICAgICAgIlx1MDA4Mk1h cCIsIAorICAgICAgICAiXHUwMDgyVmFyZW52IiwgCisgICAgICAgICJcdTAwODJGaW5hbGl6ZXIi LCAKKyAgICAgICAgIlx1MDA4MlZhbHVlIiwgCisgICAgICAgICJjb21waWxlIiwgCisgICAgICAg ICJpbnB1dCIsIAorICAgICAgICAiZXJyQ3JlYXRlIiwgCisgICAgICAgICJlcnJUaHJvdyIsIAor ICAgICAgICAiZW52IiwgCisgICAgICAgICJoZXgiLCAKKyAgICAgICAgImJhc2U2NCIsIAorICAg ICAgICAiangiLCAKKyAgICAgICAgImpjIiwgCisgICAgICAgICJ7XCJfdW5kZWZcIjp0cnVlfSIs IAorICAgICAgICAie1wiX25hblwiOnRydWV9IiwgCisgICAgICAgICJ7XCJfaW5mXCI6dHJ1ZX0i LCAKKyAgICAgICAgIntcIl9uaW5mXCI6dHJ1ZX0iLCAKKyAgICAgICAgIntcIl9mdW5jXCI6dHJ1 ZX0iLCAKKyAgICAgICAgIntfZnVuYzp0cnVlfSIsIAorICAgICAgICAiYnJlYWsiLCAKKyAgICAg ICAgImNhc2UiLCAKKyAgICAgICAgImNhdGNoIiwgCisgICAgICAgICJjb250aW51ZSIsIAorICAg ICAgICAiZGVidWdnZXIiLCAKKyAgICAgICAgImRlZmF1bHQiLCAKKyAgICAgICAgImRlbGV0ZSIs IAorICAgICAgICAiZG8iLCAKKyAgICAgICAgImVsc2UiLCAKKyAgICAgICAgImZpbmFsbHkiLCAK KyAgICAgICAgImZvciIsIAorICAgICAgICAiZnVuY3Rpb24iLCAKKyAgICAgICAgImlmIiwgCisg ICAgICAgICJpbiIsIAorICAgICAgICAiaW5zdGFuY2VvZiIsIAorICAgICAgICAibmV3IiwgCisg ICAgICAgICJyZXR1cm4iLCAKKyAgICAgICAgInN3aXRjaCIsIAorICAgICAgICAidGhpcyIsIAor ICAgICAgICAidGhyb3ciLCAKKyAgICAgICAgInRyeSIsIAorICAgICAgICAidHlwZW9mIiwgCisg ICAgICAgICJ2YXIiLCAKKyAgICAgICAgImNvbnN0IiwgCisgICAgICAgICJ2b2lkIiwgCisgICAg ICAgICJ3aGlsZSIsIAorICAgICAgICAid2l0aCIsIAorICAgICAgICAiY2xhc3MiLCAKKyAgICAg ICAgImVudW0iLCAKKyAgICAgICAgImV4cG9ydCIsIAorICAgICAgICAiZXh0ZW5kcyIsIAorICAg ICAgICAiaW1wb3J0IiwgCisgICAgICAgICJzdXBlciIsIAorICAgICAgICAibnVsbCIsIAorICAg ICAgICAidHJ1ZSIsIAorICAgICAgICAiZmFsc2UiLCAKKyAgICAgICAgImltcGxlbWVudHMiLCAK KyAgICAgICAgImludGVyZmFjZSIsIAorICAgICAgICAibGV0IiwgCisgICAgICAgICJwYWNrYWdl IiwgCisgICAgICAgICJwcml2YXRlIiwgCisgICAgICAgICJwcm90ZWN0ZWQiLCAKKyAgICAgICAg InB1YmxpYyIsIAorICAgICAgICAic3RhdGljIiwgCisgICAgICAgICJ5aWVsZCIKKyAgICBdCit9 ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2hlbGwvZHVrdGFwZS9k dWt0YXBlLmMgYi9zaGVsbC9kdWt0YXBlL2R1a3RhcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjFmYjFiZDYwNwotLS0gL2Rldi9udWxsCisrKyBiL3NoZWxsL2R1a3Rh cGUvZHVrdGFwZS5jCkBAIC0wLDAgKzEsOTY2NTcgQEAKKy8qCisgKiAgU2luZ2xlIHNvdXJjZSBh dXRvZ2VuZXJhdGVkIGRpc3RyaWJ1dGFibGUgZm9yIER1a3RhcGUgMi4zLjk5LgorICoKKyAqICBH aXQgY29tbWl0IGQwNDQ1MDA4M2Y3OTViY2M1ODAwOGY5OGIxOWJiMmI1NzI3ZjI3MTEgKHYyLjMu MC03LWdkMDQ0NTAwOCkuCisgKiAgR2l0IGJyYW5jaCBtYXN0ZXIuCisgKgorICogIFNlZSBEdWt0 YXBlIEFVVEhPUlMucnN0IGFuZCBMSUNFTlNFLnR4dCBmb3IgY29weXJpZ2h0IGFuZAorICogIGxp Y2Vuc2luZyBpbmZvcm1hdGlvbi4KKyAqLworCisvKiBMSUNFTlNFLnR4dCAqLworLyoKKyogID09 PT09PT09PT09PT09PQorKiAgRHVrdGFwZSBsaWNlbnNlCisqICA9PT09PT09PT09PT09PT0KKyoK KyogIChodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKQorKgorKiAgQ29weXJpZ2h0 IChjKSAyMDEzLTIwMTggYnkgRHVrdGFwZSBhdXRob3JzIChzZWUgQVVUSE9SUy5yc3QpCisqCisq ICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYSBjb3B5CisqICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorKiAgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24gdGhlIHJpZ2h0cworKiAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorKiAgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisqICBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor KgorKiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyogIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKgorKiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyogIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisqICBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisqICBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORyBGUk9NLAorKiAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorKiAgVEhFIFNPRlRXQVJF LgorKi8KKworLyogQVVUSE9SUy5yc3QgKi8KKy8qCisqICA9PT09PT09PT09PT09PT0KKyogIER1 a3RhcGUgYXV0aG9ycworKiAgPT09PT09PT09PT09PT09CisqCisqICBDb3B5cmlnaHQKKyogID09 PT09PT09PQorKgorKiAgRHVrdGFwZSBjb3B5cmlnaHRzIGFyZSBoZWxkIGJ5IGl0cyBhdXRob3Jz LiAgRWFjaCBhdXRob3IgaGFzIGEgY29weXJpZ2h0CisqICB0byB0aGVpciBjb250cmlidXRpb24s IGFuZCBhZ3JlZXMgdG8gaXJyZXZvY2FibHkgbGljZW5zZSB0aGUgY29udHJpYnV0aW9uCisqICB1 bmRlciB0aGUgRHVrdGFwZSBgYExJQ0VOU0UudHh0YGAuCisqCisqICBBdXRob3JzCisqICA9PT09 PT09CisqCisqICBQbGVhc2UgaW5jbHVkZSBhbiBlLW1haWwgYWRkcmVzcywgYSBsaW5rIHRvIHlv dXIgR2l0SHViIHByb2ZpbGUsIG9yIHNvbWV0aGluZworKiAgc2ltaWxhciB0byBhbGxvdyB5b3Vy IGNvbnRyaWJ1dGlvbiB0byBiZSBpZGVudGlmaWVkIGFjY3VyYXRlbHkuCisqCisqICBUaGUgZm9s bG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIGNvZGUsIHdlYnNpdGUgY29udGVudHMsIG9y IFdpa2kgY29udGVudHMsCisqICBhbmQgYWdyZWVkIHRvIGlycmV2b2NhYmx5IGxpY2Vuc2UgdGhl aXIgY29udHJpYnV0aW9ucyB1bmRlciB0aGUgRHVrdGFwZQorKiAgYGBMSUNFTlNFLnR4dGBgIChp biBvcmRlciBvZiBhcHBlYXJhbmNlKToKKyoKKyogICogU2FtaSBWYWFyYWxhIDxzYW1pLnZhYXJh bGFAaWtpLmZpPgorKiAgKiBOaWtpIERvYnJldgorKiAgKiBBbmRyZWFzIFx1MDBkNm1hbiA8YW5k cmVhc0Bsb25lbHljb2Rlci5jb20+CisqICAqIExcdTAwZTFzemxcdTAwZjMgTGFuZ1x1MDBmMyA8 bGxhbmdvLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CisqICAqIExlZ2ltZXQgPGxlZ2lt ZXQuY2FsY0BnbWFpbC5jb20+CisqICAqIEthcmwgU2tvbXNraSA8a2FybEBza29tc2tpLmNvbT4K KyogICogQnJ1Y2UgUGFzY29lIDxmYXRjZXJiZXJ1czFAZ21haWwuY29tPgorKiAgKiBSZW5cdTAw ZTkgSG9sbGFuZGVyIDxyZW5lQHJlbmU4ODg4LmF0PgorKiAgKiBKdWxpZW4gSGFtYWlkZSAoaHR0 cHM6Ly9naXRodWIuY29tL2NyYXp5anVsKQorKiAgKiBTZWJhc3RpYW4gR1x1MDBmNnR0ZSAoaHR0 cHM6Ly9naXRodWIuY29tL2phc2VnKQorKiAgKiBUb21hc3ogTWFndWxza2kgKGh0dHBzOi8vZ2l0 aHViLmNvbS9tYWd1bCkKKyogICogXEQuIEJvaGRhbiAoaHR0cHM6Ly9naXRodWIuY29tL2Rib2hk YW4pCisqICAqIE9uZFx1MDE1OWVqIEppcm1hbiAoaHR0cHM6Ly9naXRodWIuY29tL21lZ291cykK KyogICogU2FcdTAwZmFsIEliYXJyYSBDb3JyZXRnXHUwMGU5IDxzYWdodWxAZ21haWwuY29tPgor KiAgKiBKZXJlbXkgSFUgPGh1eGluZ3lpQG1zbi5jb20+CisqICAqIE9sZSBBbmRyXHUwMGU5IFZh ZGxhIFJhdm5cdTAwZTVzIChodHRwczovL2dpdGh1Yi5jb20vb2xlYXZyKQorKiAgKiBIYXJvbGQg QnJlbmVzIChodHRwczovL2dpdGh1Yi5jb20vaGFyb2xkLWIpCisqICAqIE9saXZlciBDcm93ICho dHRwczovL2dpdGh1Yi5jb20vb2Nyb3cpCisqICAqIEpha3ViIENoXHUwMTQyYXBpXHUwMTQ0c2tp IChodHRwczovL2dpdGh1Yi5jb20vamNobGFwaW5za2kpCisqICAqIEJyZXR0IFZpY2tlcnMgKGh0 dHBzOi8vZ2l0aHViLmNvbS9iZWV2aWspCisqICAqIERvbWluaWsgT2t3aWVrYSAoaHR0cHM6Ly9n aXRodWIuY29tL29raXRlYykKKyogICogUmVta28gVHJvblx1MDBlN29uIChodHRwczovL2VsLXRy YW1vLmJlKQorKiAgKiBSb21lcm8gTWFsYXF1aWFzIChyYnNtQGljLnVmYWwuYnIpCisqICAqIE1p Y2hhZWwgRHJha2UgPG1pY2hhZWwuZHJha2VAY29kZXRoaW5rLmNvLnVrPgorKiAgKiBTdGV2ZW4g RG9uIChodHRwczovL2dpdGh1Yi5jb20vc2hkb24pCisqICAqIFNpbW9uIFN0b25lIChodHRwczov L2dpdGh1Yi5jb20vc3N0b25lMSkKKyogICogXEouIE1jQy4gKGh0dHBzOi8vZ2l0aHViLmNvbS9q bWhtY2NyKQorKiAgKiBKYWt1YiBOb3dha293c2tpIChodHRwczovL2dpdGh1Yi5jb20vamltdm9u bW9vbikKKyogICogVG9tbXkgTmd1eWVuIChodHRwczovL2dpdGh1Yi5jb20vdG4wNTAyKQorKiAg KiBGYWJyaWNlIEZvbnRhaW5lIChodHRwczovL2dpdGh1Yi5jb20vZmZvbnRhaW5lKQorKiAgKiBD aHJpc3RvcGhlciBIaWxsZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9ib25lc2t1bGwpCisqICAqIEdv bnphbG8gRGlldGhlbG0gKGh0dHBzOi8vZ2l0aHViLmNvbS9nb256dXMpCisqICAqIE1pY2hhbCBL YXNwZXJlayAoaHR0cHM6Ly9naXRodWIuY29tL21pY2hhbGthcykKKyogICogQW5kcmV3IEphbmtl IChodHRwczovL2dpdGh1Yi5jb20vYXBqYW5rZSkKKyogICogU3RldmUgRmFuIChodHRwczovL2dp dGh1Yi5jb20vc3RldmVmYW4xOTk5KQorKgorKiAgT3RoZXIgY29udHJpYnV0aW9ucworKiAgPT09 PT09PT09PT09PT09PT09PQorKgorKiAgVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb250cmli dXRlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBjb2RlIChlLmcuIHJlcG9ydGVkCisqICBidWdzLCBw cm92aWRlZCBpZGVhcywgZXRjOyByb3VnaGx5IGluIG9yZGVyIG9mIGFwcGVhcmFuY2UpOgorKgor KiAgKiBHcmVnIEJ1cm5zCisqICAqIEFudGhvbnkgUmFiaW5lCisqICAqIENhcmxvcyBDb3N0YQor KiAgKiBBdXJcdTAwZTlsaWVuIEJvdWlsbGFuZAorKiAgKiBQcmVldCBEZXNhaSAoUHJpcyBNYXRp YykKKyogICoganVkb2Z5ciAoaHR0cDovL3d3dy5yZWRkaXQuY29tL3VzZXIvanVkb2Z5cikKKyog ICogSmFzb24gV29vZmVuZGVuCisqICAqIE1pY2hhXHUwMTQyIFByenlieVx1MDE1YgorKiAgKiBB bnRob255IEhvd2UKKyogICogQ29ucmFkIFBhbmtvZmYKKyogICogSmltIFNjaGltcGYKKyogICog UmFqYXJhbiBHYXVua2VyIChodHRwczovL2dpdGh1Yi5jb20vemltYmFiYW8pCisqICAqIEFuZHJl YXMgXHUwMGQ2bWFuCisqICAqIERvdWcgU2FuZGVuCisqICAqIEpvc2ggRW5nZWJyZXRzb24gKGh0 dHBzOi8vZ2l0aHViLmNvbS9Kb3NoRW5nZWJyZXRzb24pCisqICAqIFJlbW8gRWljaGVuYmVyZ2Vy IChodHRwczovL2dpdGh1Yi5jb20vcmVtb2UpCisqICAqIE1hbW9kIE1laHlhciAoaHR0cHM6Ly9n aXRodWIuY29tL21hbW9kKQorKiAgKiBEYXZpZCBEZW1lbGllciAoaHR0cHM6Ly9naXRodWIuY29t L21hcmthbmQpCisqICAqIFRpbSBDYXN3ZWxsIChodHRwczovL2dpdGh1Yi5jb20vY3JlYXRpb25p eCkKKyogICogTWl0Y2hlbGwgQmxhbmsgSnIgKGh0dHBzOi8vZ2l0aHViLmNvbS9taXRjaGJsYW5r KQorKiAgKiBodHRwczovL2dpdGh1Yi5jb20veXVzaGxpCisqICAqIFNlbyBTYW5naHllb24gKGh0 dHBzOi8vZ2l0aHViLmNvbS9zYW54aXluKQorKiAgKiBIYW4gQ2hvb25nV29vIChodHRwczovL2dp dGh1Yi5jb20vdHVueikKKyogICogSm9zaHVhIFBlZWsgKGh0dHBzOi8vZ2l0aHViLmNvbS9qb3No KQorKiAgKiBCcnVjZSBFLiBQYXNjb2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9mYXRjZXJiZXJ1cykK KyogICogaHR0cHM6Ly9naXRodWIuY29tL0tlbGxlZGluCisqICAqIGh0dHBzOi8vZ2l0aHViLmNv bS9zc3RydWNodHJ1cAorKiAgKiBNaWNoYWVsIERyYWtlIChodHRwczovL2dpdGh1Yi5jb20vdGxz YSkKKyogICogaHR0cHM6Ly9naXRodWIuY29tL2NocmlzLXkKKyogICogTGF1cmVudCBadWJpYXVy IChodHRwczovL2dpdGh1Yi5jb20vbHp1YmlhdXIpCisqICAqIE5laWwgS29sYmFuIChodHRwczov L2dpdGh1Yi5jb20vbmtvbGJhbikKKyogICogV2lsaGVsbSBXYW5lY2VrIChodHRwczovL2dpdGh1 Yi5jb20vd2FuZWNlaykKKyogICogQW5kcmV3IEphbmtlIChodHRwczovL2dpdGh1Yi5jb20vYXBq YW5rZSkKKyoKKyogIElmIHlvdSBhcmUgYWNjaWRlbnRhbGx5IG1pc3NpbmcgZnJvbSB0aGlzIGxp c3QsIHNlbmQgbWUgYW4gZS1tYWlsCisqICAoYGBzYW1pLnZhYXJhbGFAaWtpLmZpYGApIGFuZCBJ J2xsIGZpeCB0aGUgb21pc3Npb24uCisqLworCisvKgorICogIFJlcGxhY2VtZW50cyBmb3IgbWlz c2luZyBwbGF0Zm9ybSBmdW5jdGlvbnMuCisgKgorICogIFVubGlrZSB0aGUgb3JpZ2luYWxzLCBm cGNsYXNzaWZ5KCkgYW5kIHNpZ25iaXQoKSByZXBsYWNlbWVudHMgZG9uJ3QKKyAqICB3b3JrIG9u IGFueSBmbG9hdGluZyBwb2ludCB0eXBlcywgb25seSBkb3VibGVzLiAgVGhlIEMgdHlwaW5nIGhl cmUKKyAqICBtaW1pY3MgdGhlIHN0YW5kYXJkIHByb3RvdHlwZXMuCisgKi8KKworLyogI2luY2x1 ZGUgZHVrX2ludGVybmFsLmggKi8KKy8qCisgKiAgVG9wLWxldmVsIGluY2x1ZGUgZmlsZSB0byBi ZSB1c2VkIGZvciBhbGwgKGludGVybmFsKSBzb3VyY2UgZmlsZXMuCisgKgorICogIFNvdXJjZSBm aWxlcyBzaG91bGQgbm90IGluY2x1ZGUgaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMsIGFzIHRoZXkK KyAqICBoYXZlIG5vdCBiZWVuIGRlc2lnbmVkIHRvIGJlIGluZGl2aWR1YWxseSBpbmNsdWRlZC4K KyAqLworCisjaWYgIWRlZmluZWQoRFVLX0lOVEVSTkFMX0hfSU5DTFVERUQpCisjZGVmaW5lIERV S19JTlRFUk5BTF9IX0lOQ0xVREVECisKKy8qCisgKiAgVGhlICdkdWt0YXBlLmgnIGhlYWRlciBw cm92aWRlcyB0aGUgcHVibGljIEFQSSwgYnV0IGFsc28gaGFuZGxlcyBhbGwKKyAqICBjb21waWxl ciBhbmQgcGxhdGZvcm0gc3BlY2lmaWMgZmVhdHVyZSBkZXRlY3Rpb24sIER1a3RhcGUgZmVhdHVy ZQorICogIHJlc29sdXRpb24sIGluY2x1c2lvbiBvZiBzeXN0ZW0gaGVhZGVycywgZXRjLiAgVGhl c2UgaGF2ZSBiZWVuIG1lcmdlZAorICogIGJlY2F1c2UgdGhlIHB1YmxpYyBBUEkgaXMgYWxzbyBk ZXBlbmRlbnQgb24gZS5nLiBkZXRlY3RpbmcgYXBwcm9wcmlhdGUKKyAqICBDIHR5cGVzIHdoaWNo IGlzIHF1aXRlIHBsYXRmb3JtL2NvbXBpbGVyIHNwZWNpZmljIGVzcGVjaWFsbHkgZm9yIGEgbm9u LUM5OQorICogIGJ1aWxkLiAgVGhlIHB1YmxpYyBBUEkgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhl IHJlc29sdmVkIGZlYXR1cmUgc2V0LgorICoKKyAqICBTb21lIGFjdGlvbnMgdGFrZW4gYnkgdGhl IG1lcmdlZCBoZWFkZXIgKHN1Y2ggYXMgaW5jbHVkaW5nIHN5c3RlbSBoZWFkZXJzKQorICogIGFy ZSBub3QgYXBwcm9wcmlhdGUgZm9yIGJ1aWxkaW5nIGEgdXNlciBhcHBsaWNhdGlvbi4gIFRoZSBk ZWZpbmUKKyAqICBEVUtfQ09NUElMSU5HX0RVS1RBUEUgYWxsb3dzIHRoZSBtZXJnZWQgaGVhZGVy IHRvIHNraXAvaW5jbHVkZSBzb21lCisgKiAgc2VjdGlvbnMgZGVwZW5kaW5nIG9uIHdoYXQgaXMg YmVpbmcgYnVpbHQuCisgKi8KKworI2RlZmluZSBEVUtfQ09NUElMSU5HX0RVS1RBUEUKKyNpbmNs dWRlICJkdWt0YXBlLmgiCisKKy8qCisgKiAgVXNlciBkZWNsYXJhdGlvbnMsIGUuZy4gcHJvdG90 eXBlcyBmb3IgdXNlciBmdW5jdGlvbnMgdXNlZCBieSBEdWt0YXBlCisgKiAgbWFjcm9zLgorICov CisKK0RVS19VU0VfVVNFUl9ERUNMQVJFKCkKKworLyoKKyAqICBEdWt0YXBlIGluY2x1ZGVzIChv dGhlciB0aGFuIGR1a19mZWF0dXJlcy5oKQorICoKKyAqICBUaGUgaGVhZGVyIGZpbGVzIGV4cGVj dCB0byBiZSBpbmNsdWRlZCBpbiBhbiBvcmRlciB3aGljaCBzYXRpc2ZpZXMgaGVhZGVyCisgKiAg ZGVwZW5kZW5jaWVzIGNvcnJlY3RseSAodGhlIGhlYWRlcnMgdGhlbXNlbHZlcyBkb24ndCBpbmNs dWRlIGFueSBvdGhlcgorICogIGluY2x1ZGVzKS4gIEZvcndhcmQgZGVjbGFyYXRpb25zIGFyZSB1 c2VkIHRvIGJyZWFrIGNpcmN1bGFyIHN0cnVjdC90eXBlZGVmCisgKiAgZGVwZW5kZW5jaWVzLgor ICovCisKKy8qICNpbmNsdWRlIGR1a19kYmx1bmlvbi5oICovCisvKgorICogIFVuaW9uIHRvIGFj Y2VzcyBJRUVFIGRvdWJsZSBtZW1vcnkgcmVwcmVzZW50YXRpb24sIGluZGV4ZXMgZm9yIGRvdWJs ZQorICogIG1lbW9yeSByZXByZXNlbnRhdGlvbiwgYW5kIHNvbWUgbWFjcm9zIGZvciBkb3VibGUg bWFuaXB1bGF0aW9uLgorICoKKyAqICBBbHNvIHVzZWQgYnkgcGFja2VkIGR1a190dmFsLiAgVXNl IGEgdW5pb24gZm9yIGJpdCBtYW5pcHVsYXRpb24gdG8KKyAqICBtaW5pbWl6ZSBhbGlhc2luZyBp c3N1ZXMgaW4gcHJhY3RpY2UuICBUaGUgQzk5IHN0YW5kYXJkIGRvZXMgbm90CisgKiAgZ3VhcmFu dGVlIHRoYXQgdGhpcyBzaG91bGQgd29yaywgYnV0IGl0J3MgYSB2ZXJ5IHdpZGVseSBzdXBwb3J0 ZWQKKyAqICBwcmFjdGljZSBmb3IgbG93IGxldmVsIG1hbmlwdWxhdGlvbi4KKyAqCisgKiAgSUVF RSBkb3VibGUgZm9ybWF0IHN1bW1hcnk6CisgKgorICogICAgc2VlZWVlZWUgZWVlZWZmZmYgZmZm ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYKKyAqICAg ICAgIEEgICAgICAgIEIgICAgICAgIEMgICAgICAgIEQgICAgICAgIEUgICAgICAgIEYgICAgICAg IEcgICAgICAgIEgKKyAqCisgKiAgICBzICAgICAgIHNpZ24gYml0CisgKiAgICBlZWUuLi4gIGV4 cG9uZW50IGZpZWxkCisgKiAgICBmZmYuLi4gIGZyYWN0aW9uCisgKgorICogIFNlZSBodHRwOi8v ZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvdWJsZV9wcmVjaXNpb25fZmxvYXRpbmctcG9pbnRfZm9y bWF0LgorICoKKyAqICBOYU5zIGFyZSByZXByZXNlbnRlZCBhcyBleHBvbmVudCAweDdmZiBhbmQg bWFudGlzc2EgIT0gMC4gIFRoZSBOYU4gaXMgYQorICogIHNpZ25hbGluZyBOYU4gd2hlbiB0aGUg aGlnaGVzdCBiaXQgb2YgdGhlIG1hbnRpc3NhIGlzIHplcm8sIGFuZCBhIHF1aWV0CisgKiAgTmFO IHdoZW4gdGhlIGhpZ2hlc3QgYml0IGlzIHNldC4KKyAqCisgKiAgQXQgbGVhc3QgdGhyZWUgbWVt b3J5IGxheW91dHMgYXJlIHJlbGV2YW50IGhlcmU6CisgKgorICogICAgQSBCIEMgRCBFIEYgRyBI ICAgIEJpZyBlbmRpYW4gKGUuZy4gNjhrKSAgICAgICAgICAgRFVLX1VTRV9ET1VCTEVfQkUKKyAq ICAgIEggRyBGIEUgRCBDIEIgQSAgICBMaXR0bGUgZW5kaWFuIChlLmcuIHg4NikgICAgICAgIERV S19VU0VfRE9VQkxFX0xFCisgKiAgICBEIEMgQiBBIEggRyBGIEUgICAgTWl4ZWQvY3Jvc3MgZW5k aWFuIChlLmcuIEFSTSkgICBEVUtfVVNFX0RPVUJMRV9NRQorICoKKyAqICBBUk0gaXMgYSBzcGVj aWFsIGNhc2U6IEFSTSBkb3VibGUgdmFsdWVzIGFyZSBpbiBtaXhlZC9jcm9zcyBlbmRpYW4KKyAq ICBmb3JtYXQgd2hpbGUgQVJNIGR1a191aW50NjRfdCB2YWx1ZXMgYXJlIGluIHN0YW5kYXJkIGxp dHRsZSBlbmRpYW4KKyAqICBmb3JtYXQgKEggRyBGIEUgRCBDIEIgQSkuICBXaGVuIGEgZG91Ymxl IGlzIHJlYWQgYXMgYSBkdWtfdWludDY0X3QKKyAqICBmcm9tIG1lbW9yeSwgdGhlIHJlZ2lzdGVy IHdpbGwgY29udGFpbiB0aGUgKGxvZ2ljYWwpIHZhbHVlCisgKiAgRSBGIEcgSCBBIEIgQyBELiAg VGhpcyByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcgYmVsb3cuCisgKgorICogIEluZGV4 ZXMgb2YgdmFyaW91cyB0eXBlcyAoOC1iaXQsIDE2LWJpdCwgMzItYml0KSBpbiBtZW1vcnkgcmVs YXRpdmUgdG8KKyAqICB0aGUgbG9naWNhbCAoYmlnIGVuZGlhbikgb3JkZXI6CisgKgorICogIGJ5 dGUgb3JkZXIgICAgICBkdWtfdWludDhfdCAgICBkdWtfdWludDE2X3QgICAgIGR1a191aW50MzJf dAorICogICAgQkUgICAgICAgICAgICAgMDEyMzQ1NjcgICAgICAgICAwMTIzICAgICAgICAgICAg ICAgMDEKKyAqICAgIExFICAgICAgICAgICAgIDc2NTQzMjEwICAgICAgICAgMzIxMCAgICAgICAg ICAgICAgIDEwCisgKiAgICBNRSAoQVJNKSAgICAgICAzMjEwNzY1NCAgICAgICAgIDEwMzIgICAg ICAgICAgICAgICAwMQorICoKKyAqICBTb21lIHByb2Nlc3NvcnMgbWF5IGFsdGVyIE5hTiB2YWx1 ZXMgaW4gYSBmbG9hdGluZyBwb2ludCBsb2FkK3N0b3JlLgorICogIEZvciBpbnN0YW5jZSwgb24g WDg2IGEgRkxEICsgRlNUUCBtYXkgY29udmVydCBhIHNpZ25hbGluZyBOYU4gdG8gYQorICogIHF1 aWV0IG9uZS4gIFRoaXMgaXMgY2F0YXN0cm9waGljIHdoZW4gTmFOIHNwYWNlIGlzIHVzZWQgaW4g cGFja2VkCisgKiAgZHVrX3R2YWwgdmFsdWVzLiAgU2VlOiBtaXNjL2NsYW5nX2FsaWFzaW5nLmMu CisgKi8KKworI2lmICFkZWZpbmVkKERVS19EQkxVTklPTl9IX0lOQ0xVREVEKQorI2RlZmluZSBE VUtfREJMVU5JT05fSF9JTkNMVURFRAorCisvKgorICogIFVuaW9uIGZvciBhY2Nlc3NpbmcgZG91 YmxlIHBhcnRzLCBhbHNvIHNlcnZlcyBhcyBwYWNrZWQgZHVrX3R2YWwKKyAqLworCit1bmlvbiBk dWtfZG91YmxlX3VuaW9uIHsKKwlkb3VibGUgZDsKKwlmbG9hdCBmWzJdOworI2lmIGRlZmluZWQo RFVLX1VTRV82NEJJVF9PUFMpCisJZHVrX3VpbnQ2NF90IHVsbFsxXTsKKyNlbmRpZgorCWR1a191 aW50MzJfdCB1aVsyXTsKKwlkdWtfdWludDE2X3QgdXNbNF07CisJZHVrX3VpbnQ4X3QgdWNbOF07 CisjaWYgZGVmaW5lZChEVUtfVVNFX1BBQ0tFRF9UVkFMKQorCXZvaWQgKnZwWzJdOyAgLyogdXNl ZCBieSBwYWNrZWQgZHVrX3R2YWwsIGFzc3VtZXMgc2l6ZW9mKHZvaWQgKikgPT0gNCAqLworI2Vu ZGlmCit9OworCit0eXBlZGVmIHVuaW9uIGR1a19kb3VibGVfdW5pb24gZHVrX2RvdWJsZV91bmlv bjsKKworLyoKKyAqICBJbmRleGVzIG9mIHZhcmlvdXMgdHlwZXMgd2l0aCByZXNwZWN0IHRvIGJp ZyBlbmRpYW4gKGxvZ2ljYWwpIGxheW91dAorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRE9V QkxFX0xFKQorI2lmIGRlZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisjZGVmaW5lIERVS19EQkxf SURYX1VMTDAgICAwCisjZW5kaWYKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUkwICAgIDEKKyNkZWZp bmUgRFVLX0RCTF9JRFhfVUkxICAgIDAKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVVMwICAgIDMKKyNk ZWZpbmUgRFVLX0RCTF9JRFhfVVMxICAgIDIKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVVMyICAgIDEK KyNkZWZpbmUgRFVLX0RCTF9JRFhfVVMzICAgIDAKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMwICAg IDcKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMxICAgIDYKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMy ICAgIDUKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMzICAgIDQKKyNkZWZpbmUgRFVLX0RCTF9JRFhf VUM0ICAgIDMKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUM1ICAgIDIKKyNkZWZpbmUgRFVLX0RCTF9J RFhfVUM2ICAgIDEKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUM3ICAgIDAKKyNkZWZpbmUgRFVLX0RC TF9JRFhfVlAwICAgIERVS19EQkxfSURYX1VJMCAgLyogcGFja2VkIHR2YWwgKi8KKyNkZWZpbmUg RFVLX0RCTF9JRFhfVlAxICAgIERVS19EQkxfSURYX1VJMSAgLyogcGFja2VkIHR2YWwgKi8KKyNl bGlmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfQkUpCisjaWYgZGVmaW5lZChEVUtfVVNFXzY0QklU X09QUykKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUxMMCAgIDAKKyNlbmRpZgorI2RlZmluZSBEVUtf REJMX0lEWF9VSTAgICAgMAorI2RlZmluZSBEVUtfREJMX0lEWF9VSTEgICAgMQorI2RlZmluZSBE VUtfREJMX0lEWF9VUzAgICAgMAorI2RlZmluZSBEVUtfREJMX0lEWF9VUzEgICAgMQorI2RlZmlu ZSBEVUtfREJMX0lEWF9VUzIgICAgMgorI2RlZmluZSBEVUtfREJMX0lEWF9VUzMgICAgMworI2Rl ZmluZSBEVUtfREJMX0lEWF9VQzAgICAgMAorI2RlZmluZSBEVUtfREJMX0lEWF9VQzEgICAgMQor I2RlZmluZSBEVUtfREJMX0lEWF9VQzIgICAgMgorI2RlZmluZSBEVUtfREJMX0lEWF9VQzMgICAg MworI2RlZmluZSBEVUtfREJMX0lEWF9VQzQgICAgNAorI2RlZmluZSBEVUtfREJMX0lEWF9VQzUg ICAgNQorI2RlZmluZSBEVUtfREJMX0lEWF9VQzYgICAgNgorI2RlZmluZSBEVUtfREJMX0lEWF9V QzcgICAgNworI2RlZmluZSBEVUtfREJMX0lEWF9WUDAgICAgRFVLX0RCTF9JRFhfVUkwICAvKiBw YWNrZWQgdHZhbCAqLworI2RlZmluZSBEVUtfREJMX0lEWF9WUDEgICAgRFVLX0RCTF9JRFhfVUkx ICAvKiBwYWNrZWQgdHZhbCAqLworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9NRSkKKyNp ZiBkZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorI2RlZmluZSBEVUtfREJMX0lEWF9VTEwwICAg MCAgLyogbm90IGRpcmVjdGx5IGFwcGxpY2FibGUsIGJ5dGUgb3JkZXIgZGlmZmVycyBmcm9tIGEg ZG91YmxlICovCisjZW5kaWYKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUkwICAgIDAKKyNkZWZpbmUg RFVLX0RCTF9JRFhfVUkxICAgIDEKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVVMwICAgIDEKKyNkZWZp bmUgRFVLX0RCTF9JRFhfVVMxICAgIDAKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVVMyICAgIDMKKyNk ZWZpbmUgRFVLX0RCTF9JRFhfVVMzICAgIDIKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMwICAgIDMK KyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMxICAgIDIKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMyICAg IDEKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUMzICAgIDAKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUM0 ICAgIDcKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUM1ICAgIDYKKyNkZWZpbmUgRFVLX0RCTF9JRFhf VUM2ICAgIDUKKyNkZWZpbmUgRFVLX0RCTF9JRFhfVUM3ICAgIDQKKyNkZWZpbmUgRFVLX0RCTF9J RFhfVlAwICAgIERVS19EQkxfSURYX1VJMCAgLyogcGFja2VkIHR2YWwgKi8KKyNkZWZpbmUgRFVL X0RCTF9JRFhfVlAxICAgIERVS19EQkxfSURYX1VJMSAgLyogcGFja2VkIHR2YWwgKi8KKyNlbHNl CisjZXJyb3IgaW50ZXJuYWwgZXJyb3IKKyNlbmRpZgorCisvKgorICogIEhlbHBlciBtYWNyb3Mg Zm9yIHJlYWRpbmcvd3JpdGluZyBtZW1vcnkgcmVwcmVzZW50YXRpb24gcGFydHMsIHVzZWQKKyAq ICBieSBkdWtfbnVtY29udi5jIGFuZCBkdWtfdHZhbC5oLgorICovCisKKyNkZWZpbmUgRFVLX0RC TFVOSU9OX1NFVF9ET1VCTEUodSx2KSAgZG8geyAgXAorCQkodSktPmQgPSAodik7IFwKKwl9IHdo aWxlICgwKQorCisjZGVmaW5lIERVS19EQkxVTklPTl9TRVRfSElHSDMyKHUsdikgIGRvIHsgIFwK KwkJKHUpLT51aVtEVUtfREJMX0lEWF9VSTBdID0gKGR1a191aW50MzJfdCkgKHYpOyBcCisJfSB3 aGlsZSAoMCkKKworI2lmIGRlZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisjaWYgZGVmaW5lZChE VUtfVVNFX0RPVUJMRV9NRSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX1NFVF9ISUdIMzJfWkVST19M T1czMih1LHYpICBkbyB7IFwKKwkJKHUpLT51bGxbRFVLX0RCTF9JRFhfVUxMMF0gPSAoZHVrX3Vp bnQ2NF90KSAodik7IFwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgRFVLX0RCTFVOSU9O X1NFVF9ISUdIMzJfWkVST19MT1czMih1LHYpICBkbyB7IFwKKwkJKHUpLT51bGxbRFVLX0RCTF9J RFhfVUxMMF0gPSAoKGR1a191aW50NjRfdCkgKHYpKSA8PCAzMjsgXAorCX0gd2hpbGUgKDApCisj ZW5kaWYKKyNlbHNlICAvKiBEVUtfVVNFXzY0QklUX09QUyAqLworI2RlZmluZSBEVUtfREJMVU5J T05fU0VUX0hJR0gzMl9aRVJPX0xPVzMyKHUsdikgIGRvIHsgXAorCQkodSktPnVpW0RVS19EQkxf SURYX1VJMF0gPSAoZHVrX3VpbnQzMl90KSAodik7IFwKKwkJKHUpLT51aVtEVUtfREJMX0lEWF9V STFdID0gKGR1a191aW50MzJfdCkgMDsgXAorCX0gd2hpbGUgKDApCisjZW5kaWYgIC8qIERVS19V U0VfNjRCSVRfT1BTICovCisKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX1NFVF9MT1czMih1LHYpICBk byB7ICBcCisJCSh1KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSA9IChkdWtfdWludDMyX3QpICh2KTsg XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX0dFVF9ET1VCTEUodSkgICgo dSktPmQpCisjZGVmaW5lIERVS19EQkxVTklPTl9HRVRfSElHSDMyKHUpICAoKHUpLT51aVtEVUtf REJMX0lEWF9VSTBdKQorI2RlZmluZSBEVUtfREJMVU5JT05fR0VUX0xPVzMyKHUpICAgKCh1KS0+ dWlbRFVLX0RCTF9JRFhfVUkxXSkKKworI2lmIGRlZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisj aWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9NRSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX1NFVF9V SU5UNjQodSx2KSAgZG8geyBcCisJCSh1KS0+dWlbRFVLX0RCTF9JRFhfVUkwXSA9IChkdWtfdWlu dDMyX3QpICgodikgPj4gMzIpOyBcCisJCSh1KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSA9IChkdWtf dWludDMyX3QpICh2KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19EQkxVTklPTl9HRVRf VUlOVDY0KHUpIFwKKwkoKCgoZHVrX3VpbnQ2NF90KSAodSktPnVpW0RVS19EQkxfSURYX1VJMF0p IDw8IDMyKSB8IFwKKwkgKChkdWtfdWludDY0X3QpICh1KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSkp CisjZWxzZQorI2RlZmluZSBEVUtfREJMVU5JT05fU0VUX1VJTlQ2NCh1LHYpICBkbyB7IFwKKwkJ KHUpLT51bGxbRFVLX0RCTF9JRFhfVUxMMF0gPSAoZHVrX3VpbnQ2NF90KSAodik7IFwKKwl9IHdo aWxlICgwKQorI2RlZmluZSBEVUtfREJMVU5JT05fR0VUX1VJTlQ2NCh1KSAgKCh1KS0+dWxsW0RV S19EQkxfSURYX1VMTDBdKQorI2VuZGlmCisjZGVmaW5lIERVS19EQkxVTklPTl9TRVRfSU5UNjQo dSx2KSBEVUtfREJMVU5JT05fU0VUX1VJTlQ2NCgodSksIChkdWtfdWludDY0X3QpICh2KSkKKyNk ZWZpbmUgRFVLX0RCTFVOSU9OX0dFVF9JTlQ2NCh1KSAgICgoZHVrX2ludDY0X3QpIERVS19EQkxV TklPTl9HRVRfVUlOVDY0KCh1KSkpCisjZW5kaWYgIC8qIERVS19VU0VfNjRCSVRfT1BTICovCisK Ky8qCisgKiAgRG91YmxlIE5hTiBtYW5pcHVsYXRpb24gbWFjcm9zIHJlbGF0ZWQgdG8gTmFOIG5v cm1hbGl6YXRpb24gbmVlZGVkIHdoZW4KKyAqICB1c2luZyB0aGUgcGFja2VkIGR1a190dmFsIHJl cHJlc2VudGF0aW9uLiAgTmFOIG5vcm1hbGl6YXRpb24gaXMgbmVjZXNzYXJ5CisgKiAgdG8ga2Vl cCBkb3VibGUgdmFsdWVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZHVrX3R2YWwgZm9ybWF0LgorICoK KyAqICBXaGVuIHBhY2tlZCBkdWtfdHZhbCBpcyB1c2VkLCB0aGUgTmFOIHNwYWNlIGlzIHVzZWQg dG8gc3RvcmUgcG9pbnRlcnMKKyAqICBhbmQgb3RoZXIgdGFnZ2VkIHZhbHVlcyBpbiBhZGRpdGlv biB0byBOYU5zLiAgQWN0dWFsIE5hTnMgYXJlIG5vcm1hbGl6ZWQKKyAqICB0byBhIHNwZWNpZmlj IHF1aWV0IE5hTi4gIFRoZSBtYWNyb3MgYmVsb3cgYXJlIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0 aW9uCisgKiAgdG8gY2hlY2sgYW5kIG5vcm1hbGl6ZSBOYU4gdmFsdWVzIHdoZW4gdGhleSBtaWdo dCBiZSBjcmVhdGVkLiAgVGhlIG1hY3JvcworICogIGFyZSBlc3NlbnRpYWxseSBOT1BzIHdoZW4g dGhlIG5vbi1wYWNrZWQgZHVrX3R2YWwgcmVwcmVzZW50YXRpb24gaXMgdXNlZC4KKyAqCisgKiAg QSBGVUxMIGNoZWNrIGlzIGV4YWN0IGFuZCBjaGVja3MgYWxsIGJpdHMuICBBIE5PVEZVTEwgY2hl Y2sgaXMgdXNlZCBieQorICogIHRoZSBwYWNrZWQgZHVrX3R2YWwgYW5kIHdvcmtzIGNvcnJlY3Rs eSBmb3IgYWxsIE5hTnMgZXhjZXB0IHRob3NlIHRoYXQKKyAqICBiZWdpbiB3aXRoIDB4N2ZmMC4g IFNpbmNlIHRoZSAnbm9ybWFsaXplZCBOYU4nIHZhbHVlcyB1c2VkIHdpdGggcGFja2VkCisgKiAg ZHVrX3R2YWwgYmVnaW4gd2l0aCAweDdmZjgsIHRoZSBwYXJ0aWFsIGNoZWNrIGlzIHJlbGlhYmxl IHdoZW4gcGFja2VkCisgKiAgZHVrX3R2YWwgaXMgdXNlZC4gIFRoZSAweDdmZjggcHJlZml4IG1l YW5zIHRoZSBub3JtYWxpemVkIE5hTiB3aWxsIGJlIGEKKyAqICBxdWlldCBOYU4gcmVnYXJkbGVz cyBvZiBpdHMgcmVtYWluaW5nIGxvd2VyIGJpdHMuCisgKgorICogIFRoZSBNRSB2YXJpYW50IGJl bG93IGlzIHNwZWNpZmljYWxseSBmb3IgQVJNIGJ5dGUgb3JkZXIsIHdoaWNoIGhhcyB0aGUKKyAq ICBmZWF0dXJlIHRoYXQgd2hpbGUgZG91YmxlcyBoYXZlIGEgbWl4ZWQgYnl0ZSBvcmRlciAoMzIx MDc2NTQpLCB1bnNpZ25lZAorICogIGxvbmcgbG9uZyB2YWx1ZXMgaGFzIGEgbGl0dGxlIGVuZGlh biBieXRlIG9yZGVyICg3NjU0MzIxMCkuICBXaGVuIHdyaXRpbmcKKyAqICBhIGxvZ2ljYWwgZG91 YmxlIHZhbHVlIHRocm91Z2ggYSBVTEwgcG9pbnRlciwgdGhlIDMyLWJpdCB3b3JkcyBuZWVkIHRv IGJlCisgKiAgc3dhcHBlZDsgaGVuY2UgdGhlICNpZiBkZWZpbmVkKClzIGJlbG93IGZvciBVTEwg d3JpdGVzIHdpdGggRFVLX1VTRV9ET1VCTEVfTUUuCisgKiAgVGhpcyBpcyBub3QgZnVsbCBBUk0g c3VwcG9ydCBidXQgc3VmZmljZXMgZm9yIHNvbWUgZW52aXJvbm1lbnRzLgorICovCisKKyNpZiBk ZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTUUp CisvKiBNYWNyb3MgZm9yIDY0LWJpdCBvcHMgKyBtaXhlZCBlbmRpYW4gZG91Ymxlcy4gKi8KKyNk ZWZpbmUgRFVLX19EQkxVTklPTl9TRVRfTkFOX0ZVTEwodSkgIGRvIHsgXAorCQkodSktPnVsbFtE VUtfREJMX0lEWF9VTEwwXSA9IERVS19VNjRfQ09OU1RBTlQoMHgwMDAwMDAwMDdmZjgwMDAwKTsg XAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfTkFOX0ZVTEwodSkgXAor CSgoKCh1KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdICYgRFVLX1U2NF9DT05TVEFOVCgweDAwMDAw MDAwN2ZmMDAwMDApKSA9PSBEVUtfVTY0X0NPTlNUQU5UKDB4MDAwMDAwMDA3ZmYwMDAwMCkpICYm IFwKKwkgKCgoKHUpLT51bGxbRFVLX0RCTF9JRFhfVUxMMF0pICYgRFVLX1U2NF9DT05TVEFOVCgw eGZmZmZmZmZmMDAwZmZmZmYpKSAhPSAwKSkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19OT1JN QUxJWkVEX05BTl9GVUxMKHUpIFwKKwkoKHUpLT51bGxbRFVLX0RCTF9JRFhfVUxMMF0gPT0gRFVL X1U2NF9DT05TVEFOVCgweDAwMDAwMDAwN2ZmODAwMDApKQorI2RlZmluZSBEVUtfX0RCTFVOSU9O X0lTX0FOWUlORih1KSBcCisJKCgodSktPnVsbFtEVUtfREJMX0lEWF9VTEwwXSAmIERVS19VNjRf Q09OU1RBTlQoMHhmZmZmZmZmZjdmZmZmZmZmKSkgPT0gRFVLX1U2NF9DT05TVEFOVCgweDAwMDAw MDAwN2ZmMDAwMDApKQorI2RlZmluZSBEVUtfX0RCTFVOSU9OX0lTX1BPU0lORih1KSBcCisJKCh1 KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdID09IERVS19VNjRfQ09OU1RBTlQoMHgwMDAwMDAwMDdm ZjAwMDAwKSkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19ORUdJTkYodSkgXAorCSgodSktPnVs bFtEVUtfREJMX0lEWF9VTEwwXSA9PSBEVUtfVTY0X0NPTlNUQU5UKDB4MDAwMDAwMDBmZmYwMDAw MCkpCisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfQU5ZWkVSTyh1KSBcCisJKCgodSktPnVsbFtE VUtfREJMX0lEWF9VTEwwXSAmIERVS19VNjRfQ09OU1RBTlQoMHhmZmZmZmZmZjdmZmZmZmZmKSkg PT0gRFVLX1U2NF9DT05TVEFOVCgweDAwMDAwMDAwMDAwMDAwMDApKQorI2RlZmluZSBEVUtfX0RC TFVOSU9OX0lTX1BPU1pFUk8odSkgXAorCSgodSktPnVsbFtEVUtfREJMX0lEWF9VTEwwXSA9PSBE VUtfVTY0X0NPTlNUQU5UKDB4MDAwMDAwMDAwMDAwMDAwMCkpCisjZGVmaW5lIERVS19fREJMVU5J T05fSVNfTkVHWkVSTyh1KSBcCisJKCh1KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdID09IERVS19V NjRfQ09OU1RBTlQoMHgwMDAwMDAwMDgwMDAwMDAwKSkKKyNlbHNlCisvKiBNYWNyb3MgZm9yIDY0 LWJpdCBvcHMgKyBiaWcvbGl0dGxlIGVuZGlhbiBkb3VibGVzLiAqLworI2RlZmluZSBEVUtfX0RC TFVOSU9OX1NFVF9OQU5fRlVMTCh1KSAgZG8geyBcCisJCSh1KS0+dWxsW0RVS19EQkxfSURYX1VM TDBdID0gRFVLX1U2NF9DT05TVEFOVCgweDdmZjgwMDAwMDAwMDAwMDApOyBcCisJfSB3aGlsZSAo MCkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19OQU5fRlVMTCh1KSBcCisJKCgoKHUpLT51bGxb RFVLX0RCTF9JRFhfVUxMMF0gJiBEVUtfVTY0X0NPTlNUQU5UKDB4N2ZmMDAwMDAwMDAwMDAwMCkp ID09IERVS19VNjRfQ09OU1RBTlQoMHg3ZmYwMDAwMDAwMDAwMDAwKSkgJiYgXAorCSAoKCgodSkt PnVsbFtEVUtfREJMX0lEWF9VTEwwXSkgJiBEVUtfVTY0X0NPTlNUQU5UKDB4MDAwZmZmZmZmZmZm ZmZmZikpICE9IDApKQorI2RlZmluZSBEVUtfX0RCTFVOSU9OX0lTX05PUk1BTElaRURfTkFOX0ZV TEwodSkgXAorCSgodSktPnVsbFtEVUtfREJMX0lEWF9VTEwwXSA9PSBEVUtfVTY0X0NPTlNUQU5U KDB4N2ZmODAwMDAwMDAwMDAwMCkpCisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfQU5ZSU5GKHUp IFwKKwkoKCh1KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdICYgRFVLX1U2NF9DT05TVEFOVCgweDdm ZmZmZmZmZmZmZmZmZmYpKSA9PSBEVUtfVTY0X0NPTlNUQU5UKDB4N2ZmMDAwMDAwMDAwMDAwMCkp CisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfUE9TSU5GKHUpIFwKKwkoKHUpLT51bGxbRFVLX0RC TF9JRFhfVUxMMF0gPT0gRFVLX1U2NF9DT05TVEFOVCgweDdmZjAwMDAwMDAwMDAwMDApKQorI2Rl ZmluZSBEVUtfX0RCTFVOSU9OX0lTX05FR0lORih1KSBcCisJKCh1KS0+dWxsW0RVS19EQkxfSURY X1VMTDBdID09IERVS19VNjRfQ09OU1RBTlQoMHhmZmYwMDAwMDAwMDAwMDAwKSkKKyNkZWZpbmUg RFVLX19EQkxVTklPTl9JU19BTllaRVJPKHUpIFwKKwkoKCh1KS0+dWxsW0RVS19EQkxfSURYX1VM TDBdICYgRFVLX1U2NF9DT05TVEFOVCgweDdmZmZmZmZmZmZmZmZmZmYpKSA9PSBEVUtfVTY0X0NP TlNUQU5UKDB4MDAwMDAwMDAwMDAwMDAwMCkpCisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfUE9T WkVSTyh1KSBcCisJKCh1KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdID09IERVS19VNjRfQ09OU1RB TlQoMHgwMDAwMDAwMDAwMDAwMDAwKSkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19ORUdaRVJP KHUpIFwKKwkoKHUpLT51bGxbRFVLX0RCTF9JRFhfVUxMMF0gPT0gRFVLX1U2NF9DT05TVEFOVCgw eDgwMDAwMDAwMDAwMDAwMDApKQorI2VuZGlmCisjZWxzZSAgLyogRFVLX1VTRV82NEJJVF9PUFMg Ki8KKy8qIE1hY3JvcyBmb3Igbm8gNjQtYml0IG9wcywgYW55IGVuZGlhbm5lc3MuICovCisjZGVm aW5lIERVS19fREJMVU5JT05fU0VUX05BTl9GVUxMKHUpICBkbyB7IFwKKwkJKHUpLT51aVtEVUtf REJMX0lEWF9VSTBdID0gKGR1a191aW50MzJfdCkgMHg3ZmY4MDAwMFVMOyBcCisJCSh1KS0+dWlb RFVLX0RCTF9JRFhfVUkxXSA9IChkdWtfdWludDMyX3QpIDB4MDAwMDAwMDBVTDsgXAorCX0gd2hp bGUgKDApCisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfTkFOX0ZVTEwodSkgXAorCSgoKCh1KS0+ dWlbRFVLX0RCTF9JRFhfVUkwXSAmIDB4N2ZmMDAwMDBVTCkgPT0gMHg3ZmYwMDAwMFVMKSAmJiBc CisJICgoKHUpLT51aVtEVUtfREJMX0lEWF9VSTBdICYgMHgwMDBmZmZmZlVMKSAhPSAwIHx8IFwK KyAgICAgICAgICAodSktPnVpW0RVS19EQkxfSURYX1VJMV0gIT0gMCkpCisjZGVmaW5lIERVS19f REJMVU5JT05fSVNfTk9STUFMSVpFRF9OQU5fRlVMTCh1KSBcCisJKCgodSktPnVpW0RVS19EQkxf SURYX1VJMF0gPT0gMHg3ZmY4MDAwMFVMKSAmJiBcCisJICgodSktPnVpW0RVS19EQkxfSURYX1VJ MV0gPT0gMHgwMDAwMDAwMFVMKSkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19BTllJTkYodSkg XAorCSgoKCh1KS0+dWlbRFVLX0RCTF9JRFhfVUkwXSAmIDB4N2ZmZmZmZmZVTCkgPT0gMHg3ZmYw MDAwMFVMKSAmJiBcCisJICgodSktPnVpW0RVS19EQkxfSURYX1VJMV0gPT0gMHgwMDAwMDAwMFVM KSkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19QT1NJTkYodSkgXAorCSgoKHUpLT51aVtEVUtf REJMX0lEWF9VSTBdID09IDB4N2ZmMDAwMDBVTCkgJiYgXAorCSAoKHUpLT51aVtEVUtfREJMX0lE WF9VSTFdID09IDB4MDAwMDAwMDBVTCkpCisjZGVmaW5lIERVS19fREJMVU5JT05fSVNfTkVHSU5G KHUpIFwKKwkoKCh1KS0+dWlbRFVLX0RCTF9JRFhfVUkwXSA9PSAweGZmZjAwMDAwVUwpICYmIFwK KwkgKCh1KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSA9PSAweDAwMDAwMDAwVUwpKQorI2RlZmluZSBE VUtfX0RCTFVOSU9OX0lTX0FOWVpFUk8odSkgXAorCSgoKCh1KS0+dWlbRFVLX0RCTF9JRFhfVUkw XSAmIDB4N2ZmZmZmZmZVTCkgPT0gMHgwMDAwMDAwMFVMKSAmJiBcCisJICgodSktPnVpW0RVS19E QkxfSURYX1VJMV0gPT0gMHgwMDAwMDAwMFVMKSkKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9JU19Q T1NaRVJPKHUpIFwKKwkoKCh1KS0+dWlbRFVLX0RCTF9JRFhfVUkwXSA9PSAweDAwMDAwMDAwVUwp ICYmIFwKKwkgKCh1KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSA9PSAweDAwMDAwMDAwVUwpKQorI2Rl ZmluZSBEVUtfX0RCTFVOSU9OX0lTX05FR1pFUk8odSkgXAorCSgoKHUpLT51aVtEVUtfREJMX0lE WF9VSTBdID09IDB4ODAwMDAwMDBVTCkgJiYgXAorCSAoKHUpLT51aVtEVUtfREJMX0lEWF9VSTFd ID09IDB4MDAwMDAwMDBVTCkpCisjZW5kaWYgIC8qIERVS19VU0VfNjRCSVRfT1BTICovCisKKyNk ZWZpbmUgRFVLX19EQkxVTklPTl9TRVRfTkFOX05PVEZVTEwodSkgIGRvIHsgXAorCQkodSktPnVz W0RVS19EQkxfSURYX1VTMF0gPSAweDdmZjhVTDsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUg RFVLX19EQkxVTklPTl9JU19OQU5fTk9URlVMTCh1KSBcCisJLyogRSA9PSAweDdmZiwgdG9wbW9z dCBmb3VyIGJpdHMgb2YgRiAhPSAwID0+IGFzc3VtZSBOYU4gKi8gXAorCSgoKCh1KS0+dXNbRFVL X0RCTF9JRFhfVVMwXSAmIDB4N2ZmMFVMKSA9PSAweDdmZjBVTCkgJiYgXAorCSAoKCh1KS0+dXNb RFVLX0RCTF9JRFhfVVMwXSAmIDB4MDAwZlVMKSAhPSAweDAwMDBVTCkpCisKKyNkZWZpbmUgRFVL X19EQkxVTklPTl9JU19OT1JNQUxJWkVEX05BTl9OT1RGVUxMKHUpIFwKKwkvKiBFID09IDB4N2Zm LCBGID09IDggPT4gbm9ybWFsaXplZCBOYU4gKi8gXAorCSgodSktPnVzW0RVS19EQkxfSURYX1VT MF0gPT0gMHg3ZmY4VUwpCisKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9OT1JNQUxJWkVfTkFOX0NI RUNLX0ZVTEwodSkgIGRvIHsgXAorCQlpZiAoRFVLX19EQkxVTklPTl9JU19OQU5fRlVMTCgodSkp KSB7IFwKKwkJCURVS19fREJMVU5JT05fU0VUX05BTl9GVUxMKCh1KSk7IFwKKwkJfSBcCisJfSB3 aGlsZSAoMCkKKworI2RlZmluZSBEVUtfX0RCTFVOSU9OX05PUk1BTElaRV9OQU5fQ0hFQ0tfTk9U RlVMTCh1KSAgZG8geyBcCisJCWlmIChEVUtfX0RCTFVOSU9OX0lTX05BTl9OT1RGVUxMKCh1KSkp IHsgXAorCQkJRFVLX19EQkxVTklPTl9TRVRfTkFOX05PVEZVTEwoKHUpKTsgXAorCQl9IFwKKwl9 IHdoaWxlICgwKQorCisvKiBDb25jcmV0ZSBtYWNyb3MgZm9yIE5hTiBoYW5kbGluZyB1c2VkIGJ5 IHRoZSBpbXBsZW1lbnRhdGlvbiBpbnRlcm5hbHMuCisgKiBDaG9zZW4gc28gdGhhdCB0aGV5IG1h dGNoIHRoZSBkdWtfdHZhbCByZXByZXNlbnRhdGlvbjogd2l0aCBhIHBhY2tlZAorICogZHVrX3R2 YWwsIGVuc3VyZSBOYU5zIGFyZSBwcm9wZXJseSBub3JtYWxpemVkOyB3aXRoIGEgbm9uLXBhY2tl ZCBkdWtfdHZhbAorICogdGhlc2UgYXJlIGVzc2VudGlhbGx5IE5PUHMuCisgKi8KKworI2lmIGRl ZmluZWQoRFVLX1VTRV9QQUNLRURfVFZBTCkKKyNpZiBkZWZpbmVkKERVS19VU0VfRlVMTF9UVkFM KQorI2RlZmluZSBEVUtfREJMVU5JT05fTk9STUFMSVpFX05BTl9DSEVDSyh1KSAgRFVLX19EQkxV TklPTl9OT1JNQUxJWkVfTkFOX0NIRUNLX0ZVTEwoKHUpKQorI2RlZmluZSBEVUtfREJMVU5JT05f SVNfTkFOKHUpICAgICAgICAgICAgICAgRFVLX19EQkxVTklPTl9JU19OQU5fRlVMTCgodSkpCisj ZGVmaW5lIERVS19EQkxVTklPTl9JU19OT1JNQUxJWkVEX05BTih1KSAgICBEVUtfX0RCTFVOSU9O X0lTX05PUk1BTElaRURfTkFOX0ZVTEwoKHUpKQorI2RlZmluZSBEVUtfREJMVU5JT05fU0VUX05B TihkKSAgICAgICAgICAgICAgRFVLX19EQkxVTklPTl9TRVRfTkFOX0ZVTEwoKGQpKQorI2Vsc2UK KyNkZWZpbmUgRFVLX0RCTFVOSU9OX05PUk1BTElaRV9OQU5fQ0hFQ0sodSkgIERVS19fREJMVU5J T05fTk9STUFMSVpFX05BTl9DSEVDS19OT1RGVUxMKCh1KSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9O X0lTX05BTih1KSAgICAgICAgICAgICAgIERVS19fREJMVU5JT05fSVNfTkFOX05PVEZVTEwoKHUp KQorI2RlZmluZSBEVUtfREJMVU5JT05fSVNfTk9STUFMSVpFRF9OQU4odSkgICAgRFVLX19EQkxV TklPTl9JU19OT1JNQUxJWkVEX05BTl9OT1RGVUxMKCh1KSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9O X1NFVF9OQU4oZCkgICAgICAgICAgICAgIERVS19fREJMVU5JT05fU0VUX05BTl9OT1RGVUxMKChk KSkKKyNlbmRpZgorI2RlZmluZSBEVUtfREJMVU5JT05fSVNfTk9STUFMSVpFRCh1KSBcCisJKCFE VUtfREJMVU5JT05fSVNfTkFOKCh1KSkgfHwgIC8qIGVpdGhlciBub3QgYSBOYU4gKi8gXAorCSBE VUtfREJMVU5JT05fSVNfTk9STUFMSVpFRF9OQU4oKHUpKSkgIC8qIG9yIGlzIGEgbm9ybWFsaXpl ZCBOYU4gKi8KKyNlbHNlICAvKiBEVUtfVVNFX1BBQ0tFRF9UVkFMICovCisjZGVmaW5lIERVS19E QkxVTklPTl9OT1JNQUxJWkVfTkFOX0NIRUNLKHUpICAvKiBub3A6IG5vIG5lZWQgdG8gbm9ybWFs aXplICovCisjZGVmaW5lIERVS19EQkxVTklPTl9JU19OQU4odSkgICAgICAgICAgICAgICBEVUtf X0RCTFVOSU9OX0lTX05BTl9GVUxMKCh1KSkgIC8qIChEVUtfSVNOQU4oKHUpLT5kKSkgKi8KKyNk ZWZpbmUgRFVLX0RCTFVOSU9OX0lTX05PUk1BTElaRURfTkFOKHUpICAgIERVS19fREJMVU5JT05f SVNfTkFOX0ZVTEwoKHUpKSAgLyogKERVS19JU05BTigodSktPmQpKSAqLworI2RlZmluZSBEVUtf REJMVU5JT05fSVNfTk9STUFMSVpFRCh1KSAgICAgICAgMSAgLyogYWxsIGRvdWJsZXMgYXJlIGNv bnNpZGVyZWQgbm9ybWFsaXplZCAqLworI2RlZmluZSBEVUtfREJMVU5JT05fU0VUX05BTih1KSAg ZG8geyBcCisJCS8qIGluIG5vbi1wYWNrZWQgcmVwcmVzZW50YXRpb24gd2UgZG9uJ3QgY2FyZSBh Ym91dCB3aGljaCBOYU4gaXMgdXNlZCAqLyBcCisJCSh1KS0+ZCA9IERVS19ET1VCTEVfTkFOOyBc CisJfSB3aGlsZSAoMCkKKyNlbmRpZiAgLyogRFVLX1VTRV9QQUNLRURfVFZBTCAqLworCisjZGVm aW5lIERVS19EQkxVTklPTl9JU19BTllJTkYodSkgRFVLX19EQkxVTklPTl9JU19BTllJTkYoKHUp KQorI2RlZmluZSBEVUtfREJMVU5JT05fSVNfUE9TSU5GKHUpIERVS19fREJMVU5JT05fSVNfUE9T SU5GKCh1KSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX0lTX05FR0lORih1KSBEVUtfX0RCTFVOSU9O X0lTX05FR0lORigodSkpCisKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX0lTX0FOWVpFUk8odSkgRFVL X19EQkxVTklPTl9JU19BTllaRVJPKCh1KSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX0lTX1BPU1pF Uk8odSkgRFVLX19EQkxVTklPTl9JU19QT1NaRVJPKCh1KSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9O X0lTX05FR1pFUk8odSkgRFVLX19EQkxVTklPTl9JU19ORUdaRVJPKCh1KSkKKworLyogWFhYOiBu YXRpdmUgNjQtYml0IGJ5dGVzd2FwcyB3aGVuIGF2YWlsYWJsZSAqLworCisvKiA2NC1iaXQgYnl0 ZXN3YXAsIHNhbWUgb3BlcmF0aW9uIGluZGVwZW5kZW50IG9mIHRhcmdldCBlbmRpYW5uZXNzLiAq LworI2RlZmluZSBEVUtfREJMVU5JT05fQlNXQVA2NCh1KSBkbyB7IFwKKwkJZHVrX3VpbnQzMl90 IGR1a19fYnN3YXB0bXAxLCBkdWtfX2Jzd2FwdG1wMjsgXAorCQlkdWtfX2Jzd2FwdG1wMSA9ICh1 KS0+dWlbMF07IFwKKwkJZHVrX19ic3dhcHRtcDIgPSAodSktPnVpWzFdOyBcCisJCWR1a19fYnN3 YXB0bXAxID0gRFVLX0JTV0FQMzIoZHVrX19ic3dhcHRtcDEpOyBcCisJCWR1a19fYnN3YXB0bXAy ID0gRFVLX0JTV0FQMzIoZHVrX19ic3dhcHRtcDIpOyBcCisJCSh1KS0+dWlbMF0gPSBkdWtfX2Jz d2FwdG1wMjsgXAorCQkodSktPnVpWzFdID0gZHVrX19ic3dhcHRtcDE7IFwKKwl9IHdoaWxlICgw KQorCisvKiBCeXRlc3dhcCBhbiBJRUVFIGRvdWJsZSBpbiB0aGUgZHVrX2RvdWJsZV91bmlvbiBm cm9tIGhvc3QgdG8gbmV0d29yaworICogb3JkZXIuICBGb3IgYSBiaWcgZW5kaWFuIHRhcmdldCB0 aGlzIGlzIGEgbm8tb3AuCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX0xFKQorI2Rl ZmluZSBEVUtfREJMVU5JT05fRE9VQkxFX0hUT04odSkgZG8geyBcCisJCWR1a191aW50MzJfdCBk dWtfX2Jzd2FwdG1wMSwgZHVrX19ic3dhcHRtcDI7IFwKKwkJZHVrX19ic3dhcHRtcDEgPSAodSkt PnVpWzBdOyBcCisJCWR1a19fYnN3YXB0bXAyID0gKHUpLT51aVsxXTsgXAorCQlkdWtfX2Jzd2Fw dG1wMSA9IERVS19CU1dBUDMyKGR1a19fYnN3YXB0bXAxKTsgXAorCQlkdWtfX2Jzd2FwdG1wMiA9 IERVS19CU1dBUDMyKGR1a19fYnN3YXB0bXAyKTsgXAorCQkodSktPnVpWzBdID0gZHVrX19ic3dh cHRtcDI7IFwKKwkJKHUpLT51aVsxXSA9IGR1a19fYnN3YXB0bXAxOyBcCisJfSB3aGlsZSAoMCkK KyNlbGlmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTUUpCisjZGVmaW5lIERVS19EQkxVTklPTl9E T1VCTEVfSFRPTih1KSBkbyB7IFwKKwkJZHVrX3VpbnQzMl90IGR1a19fYnN3YXB0bXAxLCBkdWtf X2Jzd2FwdG1wMjsgXAorCQlkdWtfX2Jzd2FwdG1wMSA9ICh1KS0+dWlbMF07IFwKKwkJZHVrX19i c3dhcHRtcDIgPSAodSktPnVpWzFdOyBcCisJCWR1a19fYnN3YXB0bXAxID0gRFVLX0JTV0FQMzIo ZHVrX19ic3dhcHRtcDEpOyBcCisJCWR1a19fYnN3YXB0bXAyID0gRFVLX0JTV0FQMzIoZHVrX19i c3dhcHRtcDIpOyBcCisJCSh1KS0+dWlbMF0gPSBkdWtfX2Jzd2FwdG1wMTsgXAorCQkodSktPnVp WzFdID0gZHVrX19ic3dhcHRtcDI7IFwKKwl9IHdoaWxlICgwKQorI2VsaWYgZGVmaW5lZChEVUtf VVNFX0RPVUJMRV9CRSkKKyNkZWZpbmUgRFVLX0RCTFVOSU9OX0RPVUJMRV9IVE9OKHUpIGRvIHsg fSB3aGlsZSAoMCkKKyNlbHNlCisjZXJyb3IgaW50ZXJuYWwgZXJyb3IsIGRvdWJsZSBlbmRpYW5u ZXNzIGluc2FuZQorI2VuZGlmCisKKy8qIFJldmVyc2Ugb3BlcmF0aW9uIGlzIHRoZSBzYW1lLiAq LworI2RlZmluZSBEVUtfREJMVU5JT05fRE9VQkxFX05UT0godSkgRFVLX0RCTFVOSU9OX0RPVUJM RV9IVE9OKCh1KSkKKworLyogU29tZSBzaWduIGJpdCBoZWxwZXJzLiAqLworI2lmIGRlZmluZWQo RFVLX1VTRV82NEJJVF9PUFMpCisjZGVmaW5lIERVS19EQkxVTklPTl9IQVNfU0lHTkJJVCh1KSAo KCh1KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdICYgRFVLX1U2NF9DT05TVEFOVCgweDgwMDAwMDAw MDAwMDAwMDApKSAhPSAwKQorI2RlZmluZSBEVUtfREJMVU5JT05fR0VUX1NJR05CSVQodSkgKCgo dSktPnVsbFtEVUtfREJMX0lEWF9VTEwwXSA+PiA2M1UpKQorI2Vsc2UKKyNkZWZpbmUgRFVLX0RC TFVOSU9OX0hBU19TSUdOQklUKHUpICgoKHUpLT51aVtEVUtfREJMX0lEWF9VSTBdICYgMHg4MDAw MDAwMFVMKSAhPSAwKQorI2RlZmluZSBEVUtfREJMVU5JT05fR0VUX1NJR05CSVQodSkgKCgodSkt PnVpW0RVS19EQkxfSURYX1VJMF0gPj4gMzFVKSkKKyNlbmRpZgorCisjZW5kaWYgIC8qIERVS19E QkxVTklPTl9IX0lOQ0xVREVEICovCisvKiAjaW5jbHVkZSBkdWtfcmVwbGFjZW1lbnRzLmggKi8K KyNpZiAhZGVmaW5lZChEVUtfUkVQTEFDRU1FTlRTX0hfSU5DTFVERUQpCisjZGVmaW5lIERVS19S RVBMQUNFTUVOVFNfSF9JTkNMVURFRAorCisjaWYgIWRlZmluZWQoRFVLX1NJTkdMRV9GSUxFKQor I2lmIGRlZmluZWQoRFVLX1VTRV9DT01QVVRFRF9JTkZJTklUWSkKK0RVS19JTlRFUk5BTF9ERUNM IGRvdWJsZSBkdWtfY29tcHV0ZWRfaW5maW5pdHk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19V U0VfQ09NUFVURURfTkFOKQorRFVLX0lOVEVSTkFMX0RFQ0wgZG91YmxlIGR1a19jb21wdXRlZF9u YW47CisjZW5kaWYKKyNlbmRpZiAgLyogIURVS19TSU5HTEVfRklMRSAqLworCisjaWYgZGVmaW5l ZChEVUtfVVNFX1JFUExfRlBDTEFTU0lGWSkKK0RVS19JTlRFUk5BTF9ERUNMIGludCBkdWtfcmVw bF9mcGNsYXNzaWZ5KGRvdWJsZSB4KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9SRVBM X1NJR05CSVQpCitEVUtfSU5URVJOQUxfREVDTCBpbnQgZHVrX3JlcGxfc2lnbmJpdChkb3VibGUg eCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVQTF9JU0ZJTklURSkKK0RVS19JTlRF Uk5BTF9ERUNMIGludCBkdWtfcmVwbF9pc2Zpbml0ZShkb3VibGUgeCk7CisjZW5kaWYKKyNpZiBk ZWZpbmVkKERVS19VU0VfUkVQTF9JU05BTikKK0RVS19JTlRFUk5BTF9ERUNMIGludCBkdWtfcmVw bF9pc25hbihkb3VibGUgeCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVQTF9JU0lO RikKK0RVS19JTlRFUk5BTF9ERUNMIGludCBkdWtfcmVwbF9pc2luZihkb3VibGUgeCk7CisjZW5k aWYKKworI2VuZGlmICAvKiBEVUtfUkVQTEFDRU1FTlRTX0hfSU5DTFVERUQgKi8KKy8qICNpbmNs dWRlIGR1a19qbXBidWYuaCAqLworLyoKKyAqICBXcmFwcGVyIGZvciBqbXBfYnVmLgorICoKKyAq ICBUaGlzIGlzIHVzZWQgYmVjYXVzZSBqbXBfYnVmIGlzIGFuIGFycmF5IHR5cGUgZm9yIGJhY2t3 YXJkIGNvbXBhdGliaWxpdHkuCisgKiAgV3JhcHBpbmcgam1wX2J1ZiBpbiBhIHN0cnVjdCBtYWtl cyBwb2ludGVyIHJlZmVyZW5jZXMsIHNpemVvZiwgZXRjLAorICogIGJlaGF2ZSBtb3JlIGludHVp dGl2ZWx5LgorICoKKyAqICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NldGptcC5oI01l bWJlcl90eXBlcworICovCisKKyNpZiAhZGVmaW5lZChEVUtfSk1QQlVGX0hfSU5DTFVERUQpCisj ZGVmaW5lIERVS19KTVBCVUZfSF9JTkNMVURFRAorCisjaWYgZGVmaW5lZChEVUtfVVNFX0NQUF9F WENFUFRJT05TKQorc3RydWN0IGR1a19qbXBidWYgeworCWR1a19zbWFsbF9pbnRfdCBkdW1teTsg IC8qIHVudXNlZCAqLworfTsKKyNlbHNlCitzdHJ1Y3QgZHVrX2ptcGJ1ZiB7CisJRFVLX0pNUEJV Rl9UWVBFIGpiOworfTsKKyNlbmRpZgorCisjZW5kaWYgIC8qIERVS19KTVBCVUZfSF9JTkNMVURF RCAqLworLyogI2luY2x1ZGUgZHVrX2V4Y2VwdGlvbi5oICovCisvKgorICogIEV4Y2VwdGlvbnMg Zm9yIER1a3RhcGUgaW50ZXJuYWwgdGhyb3dzIHdoZW4gQysrIGV4Y2VwdGlvbnMgYXJlIHVzZWQK KyAqICBmb3IgbG9uZyBjb250cm9sIHRyYW5zZmVycy4KKyAqLworCisjaWYgIWRlZmluZWQoRFVL X0VYQ0VQVElPTl9IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfRVhDRVBUSU9OX0hfSU5DTFVERUQK KworI2lmIGRlZmluZWQoRFVLX1VTRV9DUFBfRVhDRVBUSU9OUykKKy8qIEludGVybmFsIGV4Y2Vw dGlvbiB1c2VkIGFzIGEgc2V0am1wLWxvbmdqbXAgcmVwbGFjZW1lbnQuICBVc2VyIGNvZGUgc2hv dWxkCisgKiBORVZFUiBzZWUgb3IgY2F0Y2ggdGhpcyBleGNlcHRpb24sIHNvIGl0IGRvZXNuJ3Qg aW5oZXJpdCBmcm9tIGFueSBiYXNlCisgKiBjbGFzcyB3aGljaCBzaG91bGQgbWluaW1pemUgdGhl IGNoYW5jZSBvZiB1c2VyIGNvZGUgYWNjaWRlbnRhbGx5IGNhdGNoaW5nCisgKiB0aGUgZXhjZXB0 aW9uLgorICovCitjbGFzcyBkdWtfaW50ZXJuYWxfZXhjZXB0aW9uIHsKKwkvKiBpbnRlbnRpb25h bGx5IGVtcHR5ICovCit9OworCisvKiBGYXRhbCBlcnJvciwgdGhyb3duIGFzIGEgc3BlY2lmaWMg QysrIGV4Y2VwdGlvbiB3aXRoIEMrKyBleGNlcHRpb25zCisgKiBlbmFibGVkLiAgSXQgaXMgdW5z YWZlIHRvIGNvbnRpbnVlOyBkb2luZyBzbyBtYXkgY2F1c2UgY3Jhc2hlcyBvciBtZW1vcnkKKyAq IGxlYWtzLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBlaXRoZXIgdW5jYXVnaHQsIG9yIGNhdWdo dCBieSB1c2VyIGNvZGUKKyAqIGF3YXJlIG9mIHRoZSAidW5zYWZlIHRvIGNvbnRpbnVlIiBzZW1h bnRpY3MuCisgKi8KK2NsYXNzIGR1a19mYXRhbF9leGNlcHRpb24gOiBwdWJsaWMgdmlydHVhbCBz dGQ6OnJ1bnRpbWVfZXJyb3IgeworIHB1YmxpYzoKKwlkdWtfZmF0YWxfZXhjZXB0aW9uKGNvbnN0 IGNoYXIgKm1lc3NhZ2UpIDogc3RkOjpydW50aW1lX2Vycm9yKG1lc3NhZ2UpIHt9Cit9OworI2Vu ZGlmCisKKyNlbmRpZiAgLyogRFVLX0VYQ0VQVElPTl9IX0lOQ0xVREVEICovCisvKiAjaW5jbHVk ZSBkdWtfZm9yd2RlY2wuaCAqLworLyoKKyAqICBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgYWxs IER1a3RhcGUgc3RydWN0dXJlcy4KKyAqLworCisjaWYgIWRlZmluZWQoRFVLX0ZPUldERUNMX0hf SU5DTFVERUQpCisjZGVmaW5lIERVS19GT1JXREVDTF9IX0lOQ0xVREVECisKKy8qCisgKiAgRm9y d2FyZCBkZWNsYXJhdGlvbnMKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0NQUF9FWENFUFRJ T05TKQorY2xhc3MgZHVrX2ludGVybmFsX2V4Y2VwdGlvbjsKKyNlbHNlCitzdHJ1Y3QgZHVrX2pt cGJ1ZjsKKyNlbmRpZgorCisvKiBkdWtfdHZhbCBpbnRlbnRpb25hbGx5IHNraXBwZWQgKi8KK3N0 cnVjdCBkdWtfaGVhcGhkcjsKK3N0cnVjdCBkdWtfaGVhcGhkcl9zdHJpbmc7CitzdHJ1Y3QgZHVr X2hhcnJheTsKK3N0cnVjdCBkdWtfaHN0cmluZzsKK3N0cnVjdCBkdWtfaHN0cmluZ19leHRlcm5h bDsKK3N0cnVjdCBkdWtfaG9iamVjdDsKK3N0cnVjdCBkdWtfaGNvbXBmdW5jOworc3RydWN0IGR1 a19obmF0ZnVuYzsKK3N0cnVjdCBkdWtfaGJvdW5kZnVuYzsKK3N0cnVjdCBkdWtfaHRocmVhZDsK K3N0cnVjdCBkdWtfaGJ1Zm9iajsKK3N0cnVjdCBkdWtfaGRlY2VudjsKK3N0cnVjdCBkdWtfaG9i amVudjsKK3N0cnVjdCBkdWtfaHByb3h5Oworc3RydWN0IGR1a19oYnVmZmVyOworc3RydWN0IGR1 a19oYnVmZmVyX2ZpeGVkOworc3RydWN0IGR1a19oYnVmZmVyX2R5bmFtaWM7CitzdHJ1Y3QgZHVr X2hidWZmZXJfZXh0ZXJuYWw7CisKK3N0cnVjdCBkdWtfcHJvcGFjY2Vzc29yOwordW5pb24gZHVr X3Byb3B2YWx1ZTsKK3N0cnVjdCBkdWtfcHJvcGRlc2M7CisKK3N0cnVjdCBkdWtfaGVhcDsKK3N0 cnVjdCBkdWtfYnJlYWtwb2ludDsKKworc3RydWN0IGR1a19hY3RpdmF0aW9uOworc3RydWN0IGR1 a19jYXRjaGVyOworc3RydWN0IGR1a19sanN0YXRlOworc3RydWN0IGR1a19zdHJjYWNoZV9lbnRy eTsKK3N0cnVjdCBkdWtfbGl0Y2FjaGVfZW50cnk7CitzdHJ1Y3QgZHVrX3N0cnRhYl9lbnRyeTsK KworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKK3N0cnVjdCBkdWtfZml4ZWRidWZmZXI7Cisj ZW5kaWYKKworc3RydWN0IGR1a19iaXRkZWNvZGVyX2N0eDsKK3N0cnVjdCBkdWtfYml0ZW5jb2Rl cl9jdHg7CitzdHJ1Y3QgZHVrX2J1ZndyaXRlcl9jdHg7CisKK3N0cnVjdCBkdWtfdG9rZW47Citz dHJ1Y3QgZHVrX3JlX3Rva2VuOworc3RydWN0IGR1a19sZXhlcl9wb2ludDsKK3N0cnVjdCBkdWtf bGV4ZXJfY3R4Oworc3RydWN0IGR1a19sZXhlcl9jb2RlcG9pbnQ7CisKK3N0cnVjdCBkdWtfY29t cGlsZXJfaW5zdHI7CitzdHJ1Y3QgZHVrX2NvbXBpbGVyX2Z1bmM7CitzdHJ1Y3QgZHVrX2NvbXBp bGVyX2N0eDsKKworc3RydWN0IGR1a19yZV9tYXRjaGVyX2N0eDsKK3N0cnVjdCBkdWtfcmVfY29t cGlsZXJfY3R4OworCisjaWYgZGVmaW5lZChEVUtfVVNFX0NQUF9FWENFUFRJT05TKQorLyogbm8g dHlwZWRlZiAqLworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IGR1a19qbXBidWYgZHVrX2ptcGJ1ZjsK KyNlbmRpZgorCisvKiBkdWtfdHZhbCBpbnRlbnRpb25hbGx5IHNraXBwZWQgKi8KK3R5cGVkZWYg c3RydWN0IGR1a19oZWFwaGRyIGR1a19oZWFwaGRyOwordHlwZWRlZiBzdHJ1Y3QgZHVrX2hlYXBo ZHJfc3RyaW5nIGR1a19oZWFwaGRyX3N0cmluZzsKK3R5cGVkZWYgc3RydWN0IGR1a19oYXJyYXkg ZHVrX2hhcnJheTsKK3R5cGVkZWYgc3RydWN0IGR1a19oc3RyaW5nIGR1a19oc3RyaW5nOwordHlw ZWRlZiBzdHJ1Y3QgZHVrX2hzdHJpbmdfZXh0ZXJuYWwgZHVrX2hzdHJpbmdfZXh0ZXJuYWw7Cit0 eXBlZGVmIHN0cnVjdCBkdWtfaG9iamVjdCBkdWtfaG9iamVjdDsKK3R5cGVkZWYgc3RydWN0IGR1 a19oY29tcGZ1bmMgZHVrX2hjb21wZnVuYzsKK3R5cGVkZWYgc3RydWN0IGR1a19obmF0ZnVuYyBk dWtfaG5hdGZ1bmM7Cit0eXBlZGVmIHN0cnVjdCBkdWtfaGJvdW5kZnVuYyBkdWtfaGJvdW5kZnVu YzsKK3R5cGVkZWYgc3RydWN0IGR1a19odGhyZWFkIGR1a19odGhyZWFkOwordHlwZWRlZiBzdHJ1 Y3QgZHVrX2hidWZvYmogZHVrX2hidWZvYmo7Cit0eXBlZGVmIHN0cnVjdCBkdWtfaGRlY2VudiBk dWtfaGRlY2VudjsKK3R5cGVkZWYgc3RydWN0IGR1a19ob2JqZW52IGR1a19ob2JqZW52OwordHlw ZWRlZiBzdHJ1Y3QgZHVrX2hwcm94eSBkdWtfaHByb3h5OwordHlwZWRlZiBzdHJ1Y3QgZHVrX2hi dWZmZXIgZHVrX2hidWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBkdWtfaGJ1ZmZlcl9maXhlZCBkdWtf aGJ1ZmZlcl9maXhlZDsKK3R5cGVkZWYgc3RydWN0IGR1a19oYnVmZmVyX2R5bmFtaWMgZHVrX2hi dWZmZXJfZHluYW1pYzsKK3R5cGVkZWYgc3RydWN0IGR1a19oYnVmZmVyX2V4dGVybmFsIGR1a19o YnVmZmVyX2V4dGVybmFsOworCit0eXBlZGVmIHN0cnVjdCBkdWtfcHJvcGFjY2Vzc29yIGR1a19w cm9wYWNjZXNzb3I7Cit0eXBlZGVmIHVuaW9uIGR1a19wcm9wdmFsdWUgZHVrX3Byb3B2YWx1ZTsK K3R5cGVkZWYgc3RydWN0IGR1a19wcm9wZGVzYyBkdWtfcHJvcGRlc2M7CisKK3R5cGVkZWYgc3Ry dWN0IGR1a19oZWFwIGR1a19oZWFwOwordHlwZWRlZiBzdHJ1Y3QgZHVrX2JyZWFrcG9pbnQgZHVr X2JyZWFrcG9pbnQ7CisKK3R5cGVkZWYgc3RydWN0IGR1a19hY3RpdmF0aW9uIGR1a19hY3RpdmF0 aW9uOwordHlwZWRlZiBzdHJ1Y3QgZHVrX2NhdGNoZXIgZHVrX2NhdGNoZXI7Cit0eXBlZGVmIHN0 cnVjdCBkdWtfbGpzdGF0ZSBkdWtfbGpzdGF0ZTsKK3R5cGVkZWYgc3RydWN0IGR1a19zdHJjYWNo ZV9lbnRyeSBkdWtfc3RyY2FjaGVfZW50cnk7Cit0eXBlZGVmIHN0cnVjdCBkdWtfbGl0Y2FjaGVf ZW50cnkgZHVrX2xpdGNhY2hlX2VudHJ5OwordHlwZWRlZiBzdHJ1Y3QgZHVrX3N0cnRhYl9lbnRy eSBkdWtfc3RydGFiX2VudHJ5OworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQordHlwZWRl ZiBzdHJ1Y3QgZHVrX2ZpeGVkYnVmZmVyIGR1a19maXhlZGJ1ZmZlcjsKKyNlbmRpZgorCit0eXBl ZGVmIHN0cnVjdCBkdWtfYml0ZGVjb2Rlcl9jdHggZHVrX2JpdGRlY29kZXJfY3R4OwordHlwZWRl ZiBzdHJ1Y3QgZHVrX2JpdGVuY29kZXJfY3R4IGR1a19iaXRlbmNvZGVyX2N0eDsKK3R5cGVkZWYg c3RydWN0IGR1a19idWZ3cml0ZXJfY3R4IGR1a19idWZ3cml0ZXJfY3R4OworCit0eXBlZGVmIHN0 cnVjdCBkdWtfdG9rZW4gZHVrX3Rva2VuOwordHlwZWRlZiBzdHJ1Y3QgZHVrX3JlX3Rva2VuIGR1 a19yZV90b2tlbjsKK3R5cGVkZWYgc3RydWN0IGR1a19sZXhlcl9wb2ludCBkdWtfbGV4ZXJfcG9p bnQ7Cit0eXBlZGVmIHN0cnVjdCBkdWtfbGV4ZXJfY3R4IGR1a19sZXhlcl9jdHg7Cit0eXBlZGVm IHN0cnVjdCBkdWtfbGV4ZXJfY29kZXBvaW50IGR1a19sZXhlcl9jb2RlcG9pbnQ7CisKK3R5cGVk ZWYgc3RydWN0IGR1a19jb21waWxlcl9pbnN0ciBkdWtfY29tcGlsZXJfaW5zdHI7Cit0eXBlZGVm IHN0cnVjdCBkdWtfY29tcGlsZXJfZnVuYyBkdWtfY29tcGlsZXJfZnVuYzsKK3R5cGVkZWYgc3Ry dWN0IGR1a19jb21waWxlcl9jdHggZHVrX2NvbXBpbGVyX2N0eDsKKwordHlwZWRlZiBzdHJ1Y3Qg ZHVrX3JlX21hdGNoZXJfY3R4IGR1a19yZV9tYXRjaGVyX2N0eDsKK3R5cGVkZWYgc3RydWN0IGR1 a19yZV9jb21waWxlcl9jdHggZHVrX3JlX2NvbXBpbGVyX2N0eDsKKworI2VuZGlmICAvKiBEVUtf Rk9SV0RFQ0xfSF9JTkNMVURFRCAqLworLyogI2luY2x1ZGUgZHVrX3R2YWwuaCAqLworLyoKKyAq ICBUYWdnZWQgdHlwZSBkZWZpbml0aW9uIChkdWtfdHZhbCkgYW5kIGFjY2Vzc29yIG1hY3Jvcy4K KyAqCisgKiAgQWNjZXNzIGFsbCBmaWVsZHMgdGhyb3VnaCB0aGUgYWNjZXNzb3IgbWFjcm9zLCBh cyB0aGUgcmVwcmVzZW50YXRpb24KKyAqICBpcyBxdWl0ZSB0cmlja3kuCisgKgorICogIFRoZXJl IGFyZSB0d28gcGFja2VkIHR5cGUgYWx0ZXJuYXRpdmVzOiBhbiA4LWJ5dGUgcmVwcmVzZW50YXRp b24KKyAqICBiYXNlZCBvbiBhbiBJRUVFIGRvdWJsZSAocHJlZmVycmVkIGZvciBjb21wYWN0bmVz cyksIGFuZCBhIDEyLWJ5dGUKKyAqICByZXByZXNlbnRhdGlvbiAocG9ydGFiaWxpdHkpLiAgVGhl IGxhdHRlciBpcyBuZWVkZWQgYWxzbyBpbiBlLmcuCisgKiAgNjQtYml0IGVudmlyb25tZW50cyAo aXQgdXN1YWxseSBwYWRzIHRvIDE2IGJ5dGVzIHBlciB2YWx1ZSkuCisgKgorICogIFNlbGVjdGlu ZyB0aGUgdGFnZ2VkIHR5cGUgZm9ybWF0IGludm9sdmVzIG1hbnkgdHJhZGUtb2ZmcyAobWVtb3J5 CisgKiAgdXNlLCBzaXplIGFuZCBwZXJmb3JtYW5jZSBvZiBnZW5lcmF0ZWQgY29kZSwgcG9ydGFi aWxpdHksIGV0YykuCisgKgorICogIE5COiBiZWNhdXNlIG1hY3JvIGFyZ3VtZW50cyBhcmUgb2Z0 ZW4gZXhwcmVzc2lvbnMsIG1hY3JvcyBzaG91bGQKKyAqICBhdm9pZCBldmFsdWF0aW5nIHRoZWly IGFyZ3VtZW50IG1vcmUgdGhhbiBvbmNlLgorICovCisKKyNpZiAhZGVmaW5lZChEVUtfVFZBTF9I X0lOQ0xVREVEKQorI2RlZmluZSBEVUtfVFZBTF9IX0lOQ0xVREVECisKKy8qIHNhbml0eSAqLwor I2lmICFkZWZpbmVkKERVS19VU0VfRE9VQkxFX0xFKSAmJiAhZGVmaW5lZChEVUtfVVNFX0RPVUJM RV9NRSkgJiYgIWRlZmluZWQoRFVLX1VTRV9ET1VCTEVfQkUpCisjZXJyb3IgdW5zdXBwb3J0ZWQ6 IGNhbm5vdCBkZXRlcm1pbmUgYnl0ZSBvcmRlciB2YXJpYW50CisjZW5kaWYKKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9QQUNLRURfVFZBTCkKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICog IFBhY2tlZCA4LWJ5dGUgcmVwcmVzZW50YXRpb24KKyAqLworCisvKiB1c2UgZHVrX2RvdWJsZV91 bmlvbiBhcyBkdWtfdHZhbCBkaXJlY3RseSAqLwordHlwZWRlZiB1bmlvbiBkdWtfZG91YmxlX3Vu aW9uIGR1a190dmFsOwordHlwZWRlZiBzdHJ1Y3QgeworCWR1a191aW50MTZfdCBhOworCWR1a191 aW50MTZfdCBiOworCWR1a191aW50MTZfdCBjOworCWR1a191aW50MTZfdCBkOworfSBkdWtfdHZh bF91bnVzZWQ7CisKKy8qIHRhZ3MgKi8KKyNkZWZpbmUgRFVLX1RBR19OT1JNQUxJWkVEX05BTiAg ICAweDdmZjhVTCAgIC8qIHRoZSBOYU4gdmFyaWFudCB3ZSB1c2UgKi8KKy8qIGF2b2lkIHRhZyAw eGZmZjAsIG5vIHJpc2sgb2YgY29uZnVzaW9uIHdpdGggbmVnYXRpdmUgaW5maW5pdHkgKi8KKyNk ZWZpbmUgRFVLX1RBR19NSU4gICAgICAgICAgICAgICAweGZmZjFVTAorI2lmIGRlZmluZWQoRFVL X1VTRV9GQVNUSU5UKQorI2RlZmluZSBEVUtfVEFHX0ZBU1RJTlQgICAgICAgICAgIDB4ZmZmMVVM ICAgLyogZW1iZWQ6IGludGVnZXIgdmFsdWUgKi8KKyNlbmRpZgorI2RlZmluZSBEVUtfVEFHX1VO VVNFRCAgICAgICAgICAgIDB4ZmZmMlVMICAgLyogbWFya2VyOyBub3QgYWN0dWFsIHRhZ2dlZCB2 YWx1ZSAqLworI2RlZmluZSBEVUtfVEFHX1VOREVGSU5FRCAgICAgICAgIDB4ZmZmM1VMICAgLyog ZW1iZWQ6IG5vdGhpbmcgKi8KKyNkZWZpbmUgRFVLX1RBR19OVUxMICAgICAgICAgICAgICAweGZm ZjRVTCAgIC8qIGVtYmVkOiBub3RoaW5nICovCisjZGVmaW5lIERVS19UQUdfQk9PTEVBTiAgICAg ICAgICAgMHhmZmY1VUwgICAvKiBlbWJlZDogMCBvciAxIChmYWxzZSBvciB0cnVlKSAqLworLyog RFVLX1RBR19OVU1CRVIgd291bGQgbG9naWNhbGx5IGdvIGhlcmUsIGJ1dCBpdCBoYXMgbXVsdGlw bGUgJ3RhZ3MnICovCisjZGVmaW5lIERVS19UQUdfUE9JTlRFUiAgICAgICAgICAgMHhmZmY2VUwg ICAvKiBlbWJlZDogdm9pZCBwdHIgKi8KKyNkZWZpbmUgRFVLX1RBR19MSUdIVEZVTkMgICAgICAg ICAweGZmZjdVTCAgIC8qIGVtYmVkOiBmdW5jIHB0ciAqLworI2RlZmluZSBEVUtfVEFHX1NUUklO RyAgICAgICAgICAgIDB4ZmZmOFVMICAgLyogZW1iZWQ6IGR1a19oc3RyaW5nIHB0ciAqLworI2Rl ZmluZSBEVUtfVEFHX09CSkVDVCAgICAgICAgICAgIDB4ZmZmOVVMICAgLyogZW1iZWQ6IGR1a19o b2JqZWN0IHB0ciAqLworI2RlZmluZSBEVUtfVEFHX0JVRkZFUiAgICAgICAgICAgIDB4ZmZmYVVM ICAgLyogZW1iZWQ6IGR1a19oYnVmZmVyIHB0ciAqLworI2RlZmluZSBEVUtfVEFHX01BWCAgICAg ICAgICAgICAgIDB4ZmZmYVVMCisKKy8qIGZvciBjb252ZW5pZW5jZSAqLworI2RlZmluZSBEVUtf WFRBR19CT09MRUFOX0ZBTFNFICAgIDB4ZmZmNTAwMDBVTAorI2RlZmluZSBEVUtfWFRBR19CT09M RUFOX1RSVUUgICAgIDB4ZmZmNTAwMDFVTAorCisjZGVmaW5lIERVS19UVkFMX0lTX1ZBTElEX1RB Ryh0dikgXAorCShEVUtfVFZBTF9HRVRfVEFHKCh0dikpIC0gRFVLX1RBR19NSU4gPD0gRFVLX1RB R19NQVggLSBEVUtfVEFHX01JTikKKworLyogRFVLX1RWQUxfVU5VU0VEIGluaXRpYWxpemVyIGZv ciBkdWtfdHZhbF91bnVzZWQsIHdvcmtzIGZvciBhbnkgZW5kaWFubmVzcy4gKi8KKyNkZWZpbmUg RFVLX1RWQUxfVU5VU0VEX0lOSVRJQUxJWkVSKCkgXAorCXsgRFVLX1RBR19VTlVTRUQsIERVS19U QUdfVU5VU0VELCBEVUtfVEFHX1VOVVNFRCwgRFVLX1RBR19VTlVTRUQgfQorCisvKiB0d28gY2Fz dHMgdG8gYXZvaWQgZ2NjIHdhcm5pbmc6ICJ3YXJuaW5nOiBjYXN0IGZyb20gcG9pbnRlciB0byBp bnRlZ2VyIG9mIGRpZmZlcmVudCBzaXplIFstV3BvaW50ZXItdG8taW50LWNhc3RdIiAqLworI2lm IGRlZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisjaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9N RSkKKyNkZWZpbmUgRFVLX19UVkFMX1NFVF9UQUdHRURQT0lOVEVSKHR2LGgsdGFnKSAgZG8geyBc CisJCSh0diktPnVsbFtEVUtfREJMX0lEWF9VTEwwXSA9ICgoKGR1a191aW50NjRfdCkgKHRhZykp IDw8IDE2KSB8ICgoKGR1a191aW50NjRfdCkgKGR1a191aW50MzJfdCkgKGgpKSA8PCAzMik7IFwK Kwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgRFVLX19UVkFMX1NFVF9UQUdHRURQT0lOVEVS KHR2LGgsdGFnKSAgZG8geyBcCisJCSh0diktPnVsbFtEVUtfREJMX0lEWF9VTEwwXSA9ICgoKGR1 a191aW50NjRfdCkgKHRhZykpIDw8IDQ4KSB8ICgoZHVrX3VpbnQ2NF90KSAoZHVrX3VpbnQzMl90 KSAoaCkpOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorI2Vsc2UgIC8qIERVS19VU0VfNjRCSVRf T1BTICovCisjZGVmaW5lIERVS19fVFZBTF9TRVRfVEFHR0VEUE9JTlRFUih0dixoLHRhZykgIGRv IHsgXAorCQlkdWtfdHZhbCAqZHVrX190djsgXAorCQlkdWtfX3R2ID0gKHR2KTsgXAorCQlkdWtf X3R2LT51aVtEVUtfREJMX0lEWF9VSTBdID0gKChkdWtfdWludDMyX3QpICh0YWcpKSA8PCAxNjsg XAorCQlkdWtfX3R2LT51aVtEVUtfREJMX0lEWF9VSTFdID0gKGR1a191aW50MzJfdCkgKGgpOyBc CisJfSB3aGlsZSAoMCkKKyNlbmRpZiAgLyogRFVLX1VTRV82NEJJVF9PUFMgKi8KKworI2lmIGRl ZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisvKiBEb3VibGUgY2FzdGluZyBmb3IgcG9pbnRlciB0 byBhdm9pZCBnY2Mgd2FybmluZyAoY2FzdCBmcm9tIHBvaW50ZXIgdG8gaW50ZWdlciBvZiBkaWZm ZXJlbnQgc2l6ZSkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX01FKQorI2RlZmluZSBE VUtfX1RWQUxfU0VUX0xJR0hURlVOQyh0dixmcCxmbGFncykgIGRvIHsgXAorCQkodHYpLT51bGxb RFVLX0RCTF9JRFhfVUxMMF0gPSAoKChkdWtfdWludDY0X3QpIERVS19UQUdfTElHSFRGVU5DKSA8 PCAxNikgfCBcCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZHVrX3VpbnQ2NF90 KSAoZmxhZ3MpKSB8IFwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZHVrX3Vp bnQ2NF90KSAoZHVrX3VpbnQzMl90KSAoZnApKSA8PCAzMik7IFwKKwl9IHdoaWxlICgwKQorI2Vs c2UKKyNkZWZpbmUgRFVLX19UVkFMX1NFVF9MSUdIVEZVTkModHYsZnAsZmxhZ3MpICBkbyB7IFwK KwkJKHR2KS0+dWxsW0RVS19EQkxfSURYX1VMTDBdID0gKCgoZHVrX3VpbnQ2NF90KSBEVUtfVEFH X0xJR0hURlVOQykgPDwgNDgpIHwgXAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KChkdWtfdWludDY0X3QpIChmbGFncykpIDw8IDMyKSB8IFwKKwkJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKChkdWtfdWludDY0X3QpIChkdWtfdWludDMyX3QpIChmcCkpOyBcCisJfSB3 aGlsZSAoMCkKKyNlbmRpZgorI2Vsc2UgIC8qIERVS19VU0VfNjRCSVRfT1BTICovCisjZGVmaW5l IERVS19fVFZBTF9TRVRfTElHSFRGVU5DKHR2LGZwLGZsYWdzKSAgZG8geyBcCisJCWR1a190dmFs ICpkdWtfX3R2OyBcCisJCWR1a19fdHYgPSAodHYpOyBcCisJCWR1a19fdHYtPnVpW0RVS19EQkxf SURYX1VJMF0gPSAoKChkdWtfdWludDMyX3QpIERVS19UQUdfTElHSFRGVU5DKSA8PCAxNikgfCAo KGR1a191aW50MzJfdCkgKGZsYWdzKSk7IFwKKwkJZHVrX190di0+dWlbRFVLX0RCTF9JRFhfVUkx XSA9IChkdWtfdWludDMyX3QpIChmcCk7IFwKKwl9IHdoaWxlICgwKQorI2VuZGlmICAvKiBEVUtf VVNFXzY0QklUX09QUyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisvKiBOb3Rl OiBtYXNraW5nIGlzIGRvbmUgZm9yICdpJyB0byBkZWFsIHdpdGggbmVnYXRpdmUgbnVtYmVycyBj b3JyZWN0bHkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX01FKQorI2RlZmluZSBEVUtf X1RWQUxfU0VUX0k0OCh0dixpKSAgZG8geyBcCisJCWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1 a19fdHYgPSAodHYpOyBcCisJCWR1a19fdHYtPnVpW0RVS19EQkxfSURYX1VJMF0gPSAoKGR1a191 aW50MzJfdCkgRFVLX1RBR19GQVNUSU5UKSA8PCAxNiB8ICgoKGR1a191aW50MzJfdCkgKChpKSA+ PiAzMikpICYgMHgwMDAwZmZmZlVMKTsgXAorCQlkdWtfX3R2LT51aVtEVUtfREJMX0lEWF9VSTFd ID0gKGR1a191aW50MzJfdCkgKGkpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19UVkFM X1NFVF9VMzIodHYsaSkgIGRvIHsgXAorCQlkdWtfdHZhbCAqZHVrX190djsgXAorCQlkdWtfX3R2 ID0gKHR2KTsgXAorCQlkdWtfX3R2LT51aVtEVUtfREJMX0lEWF9VSTBdID0gKChkdWtfdWludDMy X3QpIERVS19UQUdfRkFTVElOVCkgPDwgMTY7IFwKKwkJZHVrX190di0+dWlbRFVLX0RCTF9JRFhf VUkxXSA9IChkdWtfdWludDMyX3QpIChpKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmlu ZSBEVUtfX1RWQUxfU0VUX0k0OCh0dixpKSAgZG8geyBcCisJCSh0diktPnVsbFtEVUtfREJMX0lE WF9VTEwwXSA9ICgoKGR1a191aW50NjRfdCkgRFVLX1RBR19GQVNUSU5UKSA8PCA0OCkgfCAoKChk dWtfdWludDY0X3QpIChpKSkgJiBEVUtfVTY0X0NPTlNUQU5UKDB4MDAwMGZmZmZmZmZmZmZmZikp OyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19UVkFMX1NFVF9VMzIodHYsaSkgIGRvIHsg XAorCQkodHYpLT51bGxbRFVLX0RCTF9JRFhfVUxMMF0gPSAoKChkdWtfdWludDY0X3QpIERVS19U QUdfRkFTVElOVCkgPDwgNDgpIHwgKGR1a191aW50NjRfdCkgKGkpOyBcCisJfSB3aGlsZSAoMCkK KyNlbmRpZgorCisvKiBUaGlzIG5lZWRzIHRvIGdvIHRocm91Z2ggYSBjYXN0IGJlY2F1c2Ugc2ln biBleHRlbnNpb24gaXMgbmVlZGVkLiAqLworI2RlZmluZSBEVUtfX1RWQUxfU0VUX0kzMih0dixp KSAgZG8geyBcCisJCWR1a19pbnQ2NF90IGR1a19fdG1wID0gKGR1a19pbnQ2NF90KSAoaSk7IFwK KwkJRFVLX1RWQUxfU0VUX0k0OCgodHYpLCBkdWtfX3RtcCk7IFwKKwl9IHdoaWxlICgwKQorCisv KiBYWFg6IENsdW1zeSBzaWduIGV4dGVuZCBhbmQgbWFza2luZyBvZiAxNiB0b3Btb3N0IGJpdHMu ICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9NRSkKKyNkZWZpbmUgRFVLX19UVkFMX0dF VF9GQVNUSU5UKHR2KSAgICAgICgoKGR1a19pbnQ2NF90KSAoKCgoZHVrX3VpbnQ2NF90KSAodHYp LT51aVtEVUtfREJMX0lEWF9VSTBdKSA8PCAzMikgfCAoKGR1a191aW50NjRfdCkgKHR2KS0+dWlb RFVLX0RCTF9JRFhfVUkxXSkpKSA8PCAxNiA+PiAxNikKKyNlbHNlCisjZGVmaW5lIERVS19fVFZB TF9HRVRfRkFTVElOVCh0dikgICAgICAoKCgoZHVrX2ludDY0X3QpICh0diktPnVsbFtEVUtfREJM X0lEWF9VTEwwXSkgPDwgMTYpID4+IDE2KQorI2VuZGlmCisjZGVmaW5lIERVS19fVFZBTF9HRVRf RkFTVElOVF9VMzIodHYpICAoKHR2KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSkKKyNkZWZpbmUgRFVL X19UVkFMX0dFVF9GQVNUSU5UX0kzMih0dikgICgoZHVrX2ludDMyX3QpICh0diktPnVpW0RVS19E QkxfSURYX1VJMV0pCisjZW5kaWYgIC8qIERVS19VU0VfRkFTVElOVCAqLworCisjZGVmaW5lIERV S19UVkFMX1NFVF9VTkRFRklORUQodHYpICBkbyB7IFwKKwkJKHR2KS0+dXNbRFVLX0RCTF9JRFhf VVMwXSA9IChkdWtfdWludDE2X3QpIERVS19UQUdfVU5ERUZJTkVEOyBcCisJfSB3aGlsZSAoMCkK KyNkZWZpbmUgRFVLX1RWQUxfU0VUX1VOVVNFRCh0dikgIGRvIHsgXAorCQkodHYpLT51c1tEVUtf REJMX0lEWF9VUzBdID0gKGR1a191aW50MTZfdCkgRFVLX1RBR19VTlVTRUQ7IFwKKwl9IHdoaWxl ICgwKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVMTCh0dikgIGRvIHsgXAorCQkodHYpLT51c1tE VUtfREJMX0lEWF9VUzBdID0gKGR1a191aW50MTZfdCkgRFVLX1RBR19OVUxMOyBcCisJfSB3aGls ZSAoMCkKKworI2RlZmluZSBEVUtfVFZBTF9TRVRfQk9PTEVBTih0dix2YWwpICAgICAgICAgRFVL X0RCTFVOSU9OX1NFVF9ISUdIMzIoKHR2KSwgKCgoZHVrX3VpbnQzMl90KSBEVUtfVEFHX0JPT0xF QU4pIDw8IDE2KSB8ICgoZHVrX3VpbnQzMl90KSAodmFsKSkpCisKKyNkZWZpbmUgRFVLX1RWQUxf U0VUX05BTih0dikgICAgICAgICAgICAgICAgIERVS19EQkxVTklPTl9TRVRfTkFOX0ZVTEwoKHR2 KSkKKworLyogQXNzdW1lcyB0aGF0IGNhbGxlciBoYXMgbm9ybWFsaXplZCBOYU5zLCBvdGhlcndp c2UgdHJvdWJsZSBhaGVhZC4gKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKyNkZWZp bmUgRFVLX1RWQUxfU0VUX0RPVUJMRSh0dixkKSAgZG8geyBcCisJCWR1a19kb3VibGVfdCBkdWtf X2RibHZhbDsgXAorCQlkdWtfX2RibHZhbCA9IChkKTsgXAorCQlEVUtfQVNTRVJUX0RPVUJMRV9J U19OT1JNQUxJWkVEKGR1a19fZGJsdmFsKTsgXAorCQlEVUtfREJMVU5JT05fU0VUX0RPVUJMRSgo dHYpLCBkdWtfX2RibHZhbCk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfVFZBTF9TRVRf STQ4KHR2LGkpICAgICAgICAgICAgICAgRFVLX19UVkFMX1NFVF9JNDgoKHR2KSwgKGkpKQorI2Rl ZmluZSBEVUtfVFZBTF9TRVRfSTMyKHR2LGkpICAgICAgICAgICAgICAgRFVLX19UVkFMX1NFVF9J MzIoKHR2KSwgKGkpKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfVTMyKHR2LGkpICAgICAgICAgICAg ICAgRFVLX19UVkFMX1NFVF9VMzIoKHR2KSwgKGkpKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVN QkVSX0NIS0ZBU1RfRkFTVCh0dixkKSAgZHVrX3R2YWxfc2V0X251bWJlcl9jaGtmYXN0X2Zhc3Qo KHR2KSwgKGQpKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVNQkVSX0NIS0ZBU1RfU0xPVyh0dixk KSAgZHVrX3R2YWxfc2V0X251bWJlcl9jaGtmYXN0X3Nsb3coKHR2KSwgKGQpKQorI2RlZmluZSBE VUtfVFZBTF9TRVRfTlVNQkVSKHR2LGQpICAgICAgICAgICAgRFVLX1RWQUxfU0VUX0RPVUJMRSgo dHYpLCAoZCkpCisjZGVmaW5lIERVS19UVkFMX0NIS0ZBU1RfSU5QTEFDRV9GQVNUKHR2KSAgZG8g eyBcCisJCWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1a19kb3VibGVfdCBkdWtfX2Q7IFwKKwkJ ZHVrX190diA9ICh0dik7IFwKKwkJaWYgKERVS19UVkFMX0lTX0RPVUJMRShkdWtfX3R2KSkgeyBc CisJCQlkdWtfX2QgPSBEVUtfVFZBTF9HRVRfRE9VQkxFKGR1a19fdHYpOyBcCisJCQlEVUtfVFZB TF9TRVRfTlVNQkVSX0NIS0ZBU1RfRkFTVChkdWtfX3R2LCBkdWtfX2QpOyBcCisJCX0gXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19UVkFMX0NIS0ZBU1RfSU5QTEFDRV9TTE9XKHR2KSAgZG8g eyBcCisJCWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1a19kb3VibGVfdCBkdWtfX2Q7IFwKKwkJ ZHVrX190diA9ICh0dik7IFwKKwkJaWYgKERVS19UVkFMX0lTX0RPVUJMRShkdWtfX3R2KSkgeyBc CisJCQlkdWtfX2QgPSBEVUtfVFZBTF9HRVRfRE9VQkxFKGR1a19fdHYpOyBcCisJCQlEVUtfVFZB TF9TRVRfTlVNQkVSX0NIS0ZBU1RfU0xPVyhkdWtfX3R2LCBkdWtfX2QpOyBcCisJCX0gXAorCX0g d2hpbGUgKDApCisjZWxzZSAgLyogRFVLX1VTRV9GQVNUSU5UICovCisjZGVmaW5lIERVS19UVkFM X1NFVF9ET1VCTEUodHYsZCkgIGRvIHsgXAorCQlkdWtfZG91YmxlX3QgZHVrX19kYmx2YWw7IFwK KwkJZHVrX19kYmx2YWwgPSAoZCk7IFwKKwkJRFVLX0FTU0VSVF9ET1VCTEVfSVNfTk9STUFMSVpF RChkdWtfX2RibHZhbCk7IFwKKwkJRFVLX0RCTFVOSU9OX1NFVF9ET1VCTEUoKHR2KSwgZHVrX19k Ymx2YWwpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0k0OCh0dixpKSAg ICAgICAgICAgICAgIERVS19UVkFMX1NFVF9ET1VCTEUoKHR2KSwgKGR1a19kb3VibGVfdCkgKGkp KSAgLyogWFhYOiBmYXN0IGludC10by1kb3VibGUgKi8KKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0kz Mih0dixpKSAgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9ET1VCTEUoKHR2KSwgKGR1a19kb3Vi bGVfdCkgKGkpKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfVTMyKHR2LGkpICAgICAgICAgICAgICAg RFVLX1RWQUxfU0VUX0RPVUJMRSgodHYpLCAoZHVrX2RvdWJsZV90KSAoaSkpCisjZGVmaW5lIERV S19UVkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9GQVNUKHR2LGQpICAgIERVS19UVkFMX1NFVF9ET1VC TEUoKHR2KSwgKGQpKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVNQkVSX0NIS0ZBU1RfU0xPVyh0 dixkKSAgICBEVUtfVFZBTF9TRVRfRE9VQkxFKCh0diksIChkKSkKKyNkZWZpbmUgRFVLX1RWQUxf U0VUX05VTUJFUih0dixkKSAgICAgICAgICAgIERVS19UVkFMX1NFVF9ET1VCTEUoKHR2KSwgKGQp KQorI2RlZmluZSBEVUtfVFZBTF9DSEtGQVNUX0lOUExBQ0VfRkFTVCh0dikgIGRvIHsgfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfQ0hLRkFTVF9JTlBMQUNFX1NMT1codHYpICBkbyB7IH0g d2hpbGUgKDApCisjZW5kaWYgIC8qIERVS19VU0VfRkFTVElOVCAqLworCisjZGVmaW5lIERVS19U VkFMX1NFVF9GQVNUSU5UKHR2LGkpICAgICAgICAgICBEVUtfVFZBTF9TRVRfSTQ4KCh0diksIChp KSkgIC8qIGFsaWFzICovCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0xJR0hURlVOQyh0dixmcCxm bGFncykgIERVS19fVFZBTF9TRVRfTElHSFRGVU5DKCh0diksIChmcCksIChmbGFncykpCisjZGVm aW5lIERVS19UVkFMX1NFVF9TVFJJTkcodHYsaCkgICAgICAgICAgICBEVUtfX1RWQUxfU0VUX1RB R0dFRFBPSU5URVIoKHR2KSwgKGgpLCBEVUtfVEFHX1NUUklORykKKyNkZWZpbmUgRFVLX1RWQUxf U0VUX09CSkVDVCh0dixoKSAgICAgICAgICAgIERVS19fVFZBTF9TRVRfVEFHR0VEUE9JTlRFUigo dHYpLCAoaCksIERVS19UQUdfT0JKRUNUKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfQlVGRkVSKHR2 LGgpICAgICAgICAgICAgRFVLX19UVkFMX1NFVF9UQUdHRURQT0lOVEVSKCh0diksIChoKSwgRFVL X1RBR19CVUZGRVIpCisjZGVmaW5lIERVS19UVkFMX1NFVF9QT0lOVEVSKHR2LHApICAgICAgICAg ICBEVUtfX1RWQUxfU0VUX1RBR0dFRFBPSU5URVIoKHR2KSwgKHApLCBEVUtfVEFHX1BPSU5URVIp CisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUwodHYseCkgICAgICAgICAgICAgIGRvIHsgKih0 dikgPSAqKHgpOyB9IHdoaWxlICgwKQorCisvKiBnZXR0ZXJzICovCisjZGVmaW5lIERVS19UVkFM X0dFVF9CT09MRUFOKHR2KSAgICAgICAgICAgICAoKGR1a19zbWFsbF91aW50X3QpICh0diktPnVz W0RVS19EQkxfSURYX1VTMV0pCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisjZGVmaW5l IERVS19UVkFMX0dFVF9ET1VCTEUodHYpICAgICAgICAgICAgICAoKHR2KS0+ZCkKKyNkZWZpbmUg RFVLX1RWQUxfR0VUX0ZBU1RJTlQodHYpICAgICAgICAgICAgIERVS19fVFZBTF9HRVRfRkFTVElO VCgodHYpKQorI2RlZmluZSBEVUtfVFZBTF9HRVRfRkFTVElOVF9VMzIodHYpICAgICAgICAgRFVL X19UVkFMX0dFVF9GQVNUSU5UX1UzMigodHYpKQorI2RlZmluZSBEVUtfVFZBTF9HRVRfRkFTVElO VF9JMzIodHYpICAgICAgICAgRFVLX19UVkFMX0dFVF9GQVNUSU5UX0kzMigodHYpKQorI2RlZmlu ZSBEVUtfVFZBTF9HRVRfTlVNQkVSKHR2KSAgICAgICAgICAgICAgZHVrX3R2YWxfZ2V0X251bWJl cl9wYWNrZWQoKHR2KSkKKyNlbHNlCisjZGVmaW5lIERVS19UVkFMX0dFVF9OVU1CRVIodHYpICAg ICAgICAgICAgICAoKHR2KS0+ZCkKKyNkZWZpbmUgRFVLX1RWQUxfR0VUX0RPVUJMRSh0dikgICAg ICAgICAgICAgICgodHYpLT5kKQorI2VuZGlmCisjZGVmaW5lIERVS19UVkFMX0dFVF9MSUdIVEZV TkModHYsb3V0X2ZwLG91dF9mbGFncykgIGRvIHsgXAorCQkob3V0X2ZsYWdzKSA9ICh0diktPnVp W0RVS19EQkxfSURYX1VJMF0gJiAweGZmZmZVTDsgXAorCQkob3V0X2ZwKSA9IChkdWtfY19mdW5j dGlvbikgKHR2KS0+dWlbRFVLX0RCTF9JRFhfVUkxXTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5l IERVS19UVkFMX0dFVF9MSUdIVEZVTkNfRlVOQ1BUUih0dikgICAoKGR1a19jX2Z1bmN0aW9uKSAo KHR2KS0+dWlbRFVLX0RCTF9JRFhfVUkxXSkpCisjZGVmaW5lIERVS19UVkFMX0dFVF9MSUdIVEZV TkNfRkxBR1ModHYpICAgICAoKChkdWtfc21hbGxfdWludF90KSAodHYpLT51aVtEVUtfREJMX0lE WF9VSTBdKSAmIDB4ZmZmZlVMKQorI2RlZmluZSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KSAgICAg ICAgICAgICAgKChkdWtfaHN0cmluZyAqKSAodHYpLT52cFtEVUtfREJMX0lEWF9WUDFdKQorI2Rl ZmluZSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KSAgICAgICAgICAgICAgKChkdWtfaG9iamVjdCAq KSAodHYpLT52cFtEVUtfREJMX0lEWF9WUDFdKQorI2RlZmluZSBEVUtfVFZBTF9HRVRfQlVGRkVS KHR2KSAgICAgICAgICAgICAgKChkdWtfaGJ1ZmZlciAqKSAodHYpLT52cFtEVUtfREJMX0lEWF9W UDFdKQorI2RlZmluZSBEVUtfVFZBTF9HRVRfUE9JTlRFUih0dikgICAgICAgICAgICAgKCh2b2lk ICopICh0diktPnZwW0RVS19EQkxfSURYX1ZQMV0pCisjZGVmaW5lIERVS19UVkFMX0dFVF9IRUFQ SERSKHR2KSAgICAgICAgICAgICAoKGR1a19oZWFwaGRyICopICh0diktPnZwW0RVS19EQkxfSURY X1ZQMV0pCisKKy8qIGRlY29kaW5nICovCisjZGVmaW5lIERVS19UVkFMX0dFVF9UQUcodHYpICAg ICAgICAgICAgICAgICAoKGR1a19zbWFsbF91aW50X3QpICh0diktPnVzW0RVS19EQkxfSURYX1VT MF0pCisKKyNkZWZpbmUgRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHR2KSAgICAgICAgICAgIChEVUtf VFZBTF9HRVRfVEFHKCh0dikpID09IERVS19UQUdfVU5ERUZJTkVEKQorI2RlZmluZSBEVUtfVFZB TF9JU19VTlVTRUQodHYpICAgICAgICAgICAgICAgKERVS19UVkFMX0dFVF9UQUcoKHR2KSkgPT0g RFVLX1RBR19VTlVTRUQpCisjZGVmaW5lIERVS19UVkFMX0lTX05VTEwodHYpICAgICAgICAgICAg ICAgICAoRFVLX1RWQUxfR0VUX1RBRygodHYpKSA9PSBEVUtfVEFHX05VTEwpCisjZGVmaW5lIERV S19UVkFMX0lTX0JPT0xFQU4odHYpICAgICAgICAgICAgICAoRFVLX1RWQUxfR0VUX1RBRygodHYp KSA9PSBEVUtfVEFHX0JPT0xFQU4pCisjZGVmaW5lIERVS19UVkFMX0lTX0JPT0xFQU5fVFJVRSh0 dikgICAgICAgICAoKHR2KS0+dWlbRFVLX0RCTF9JRFhfVUkwXSA9PSBEVUtfWFRBR19CT09MRUFO X1RSVUUpCisjZGVmaW5lIERVS19UVkFMX0lTX0JPT0xFQU5fRkFMU0UodHYpICAgICAgICAoKHR2 KS0+dWlbRFVLX0RCTF9JRFhfVUkwXSA9PSBEVUtfWFRBR19CT09MRUFOX0ZBTFNFKQorI2RlZmlu ZSBEVUtfVFZBTF9JU19MSUdIVEZVTkModHYpICAgICAgICAgICAgKERVS19UVkFMX0dFVF9UQUco KHR2KSkgPT0gRFVLX1RBR19MSUdIVEZVTkMpCisjZGVmaW5lIERVS19UVkFMX0lTX1NUUklORyh0 dikgICAgICAgICAgICAgICAoRFVLX1RWQUxfR0VUX1RBRygodHYpKSA9PSBEVUtfVEFHX1NUUklO RykKKyNkZWZpbmUgRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSAgICAgICAgICAgICAgIChEVUtfVFZB TF9HRVRfVEFHKCh0dikpID09IERVS19UQUdfT0JKRUNUKQorI2RlZmluZSBEVUtfVFZBTF9JU19C VUZGRVIodHYpICAgICAgICAgICAgICAgKERVS19UVkFMX0dFVF9UQUcoKHR2KSkgPT0gRFVLX1RB R19CVUZGRVIpCisjZGVmaW5lIERVS19UVkFMX0lTX1BPSU5URVIodHYpICAgICAgICAgICAgICAo RFVLX1RWQUxfR0VUX1RBRygodHYpKSA9PSBEVUtfVEFHX1BPSU5URVIpCisjaWYgZGVmaW5lZChE VUtfVVNFX0ZBU1RJTlQpCisvKiAweGZmZjAgaXMgLUluZmluaXR5ICovCisjZGVmaW5lIERVS19U VkFMX0lTX0RPVUJMRSh0dikgICAgICAgICAgICAgICAoRFVLX1RWQUxfR0VUX1RBRygodHYpKSA8 PSAweGZmZjBVTCkKKyNkZWZpbmUgRFVLX1RWQUxfSVNfRkFTVElOVCh0dikgICAgICAgICAgICAg IChEVUtfVFZBTF9HRVRfVEFHKCh0dikpID09IERVS19UQUdfRkFTVElOVCkKKyNkZWZpbmUgRFVL X1RWQUxfSVNfTlVNQkVSKHR2KSAgICAgICAgICAgICAgIChEVUtfVFZBTF9HRVRfVEFHKCh0dikp IDw9IDB4ZmZmMVVMKQorI2Vsc2UKKyNkZWZpbmUgRFVLX1RWQUxfSVNfTlVNQkVSKHR2KSAgICAg ICAgICAgICAgIChEVUtfVFZBTF9HRVRfVEFHKCh0dikpIDw9IDB4ZmZmMFVMKQorI2RlZmluZSBE VUtfVFZBTF9JU19ET1VCTEUodHYpICAgICAgICAgICAgICAgRFVLX1RWQUxfSVNfTlVNQkVSKCh0 dikpCisjZW5kaWYKKworLyogVGhpcyBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbCBiZWNhdXNlIGl0 IGFwcGVhcnMgaW4gZXZlcnkgREVDUkVGLiAqLworI2RlZmluZSBEVUtfVFZBTF9JU19IRUFQX0FM TE9DQVRFRCh0dikgICAgICAgKERVS19UVkFMX0dFVF9UQUcoKHR2KSkgPj0gRFVLX1RBR19TVFJJ TkcpCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19kb3VibGVfdCBkdWtfdHZhbF9nZXRfbnVtYmVyX3BhY2tlZChkdWtfdHZhbCAqdHYpOworI2Vu ZGlmCisKKyNlbHNlICAvKiBEVUtfVVNFX1BBQ0tFRF9UVkFMICovCisvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0gKi8KKworLyoKKyAqICBQb3J0YWJsZSAxMi1ieXRlIHJlcHJlc2VudGF0aW9uCisgKi8KKwor LyogTm90ZTogbm90IGluaXRpYWxpemluZyBhbGwgYnl0ZXMgaXMgbm9ybWFsbHkgbm90IGFuIGlz c3VlOiBEdWt0YXBlIHdvbid0CisgKiByZWFkIG9yIHVzZSB0aGUgdW5pbml0aWFsaXplZCBieXRl cyBzbyB2YWxncmluZCB3b24ndCBpc3N1ZSB3YXJuaW5ncy4KKyAqIEluIHNvbWUgc3BlY2lhbCBj YXNlcyBhIGhhcm1sZXNzIHZhbGdyaW5kIHdhcm5pbmcgbWF5IGJlIGlzc3VlZCB0aG91Z2guCisg KiBGb3IgZXhhbXBsZSwgdGhlIER1bXBIZWFwIGRlYnVnZ2VyIGNvbW1hbmQgd3JpdGVzIG91dCBh IGNvbXBpbGVkIGZ1bmN0aW9uJ3MKKyAqICdkYXRhJyBhcmVhIGFzIGlzLCBpbmNsdWRpbmcgYW55 IHVuaW5pdGlhbGl6ZWQgYnl0ZXMsIHdoaWNoIGNhdXNlcyBhCisgKiB2YWxncmluZCB3YXJuaW5n LgorICovCisKK3R5cGVkZWYgc3RydWN0IGR1a190dmFsX3N0cnVjdCBkdWtfdHZhbDsKKworc3Ry dWN0IGR1a190dmFsX3N0cnVjdCB7CisJZHVrX3NtYWxsX3VpbnRfdCB0OworCWR1a19zbWFsbF91 aW50X3Qgdl9leHRyYTsKKwl1bmlvbiB7CisJCWR1a19kb3VibGVfdCBkOworCQlkdWtfc21hbGxf aW50X3QgaTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwkJZHVrX2ludDY0X3QgZmk7 ICAvKiBpZiBwcmVzZW50LCBmb3JjZXMgMTYtYnl0ZSBkdWtfdHZhbCAqLworI2VuZGlmCisJCXZv aWQgKnZvaWRwdHI7CisJCWR1a19oc3RyaW5nICpoc3RyaW5nOworCQlkdWtfaG9iamVjdCAqaG9i amVjdDsKKwkJZHVrX2hjb21wZnVuYyAqaGNvbXBmdW5jOworCQlkdWtfaG5hdGZ1bmMgKmhuYXRm dW5jOworCQlkdWtfaHRocmVhZCAqaHRocmVhZDsKKwkJZHVrX2hidWZmZXIgKmhidWZmZXI7CisJ CWR1a19oZWFwaGRyICpoZWFwaGRyOworCQlkdWtfY19mdW5jdGlvbiBsaWdodGZ1bmM7CisJfSB2 OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWR1a19zbWFsbF91aW50X3QgdDsKKwlkdWtfc21h bGxfdWludF90IHZfZXh0cmE7CisJLyogVGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBkb24ndCBtYXR0 ZXIgZXhjZXB0IGZvciBkZWJ1ZyBkdW1wcyBhbmQgc3VjaAorCSAqIGZvciB3aGljaCBhIHBhcnRp YWwgaW5pdGlhbGl6ZXIgbWF5IHRyaWdnZXIgb3V0LW90LWJvdW5kcyBtZW1vcnkKKwkgKiByZWFk cy4gIEluY2x1ZGUgYSBkb3VibGUgZmllbGQgd2hpY2ggaXMgdXN1YWxseSBhcyBsYXJnZSBvciBs YXJnZXIKKwkgKiB0aGFuIHBvaW50ZXJzIChub3QgYWx3YXlzIGhvd2V2ZXIpLgorCSAqLworCWR1 a19kb3VibGVfdCBkOworfSBkdWtfdHZhbF91bnVzZWQ7CisKKyNkZWZpbmUgRFVLX1RWQUxfVU5V U0VEX0lOSVRJQUxJWkVSKCkgXAorCXsgRFVLX1RBR19VTlVTRUQsIDAsIDAuMCB9CisKKyNkZWZp bmUgRFVLX1RBR19NSU4gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBEVUtfVEFHX05VTUJF UiAgICAgICAgICAgICAgICAwICAvKiBEVUtfVEFHX05VTUJFUiBvbmx5IGRlZmluZWQgZm9yIG5v bi1wYWNrZWQgZHVrX3R2YWwgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKyNkZWZp bmUgRFVLX1RBR19GQVNUSU5UICAgICAgICAgICAgICAgMQorI2VuZGlmCisjZGVmaW5lIERVS19U QUdfVU5ERUZJTkVEICAgICAgICAgICAgIDIKKyNkZWZpbmUgRFVLX1RBR19OVUxMICAgICAgICAg ICAgICAgICAgMworI2RlZmluZSBEVUtfVEFHX0JPT0xFQU4gICAgICAgICAgICAgICA0CisjZGVm aW5lIERVS19UQUdfUE9JTlRFUiAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRFVLX1RBR19MSUdI VEZVTkMgICAgICAgICAgICAgNgorI2RlZmluZSBEVUtfVEFHX1VOVVNFRCAgICAgICAgICAgICAg ICA3ICAvKiBtYXJrZXI7IG5vdCBhY3R1YWwgdGFnZ2VkIHR5cGUgKi8KKyNkZWZpbmUgRFVLX1RB R19TVFJJTkcgICAgICAgICAgICAgICAgOCAgLyogZmlyc3QgaGVhcCBhbGxvY2F0ZWQsIG1hdGNo IGJpdCBib3VuZGFyeSAqLworI2RlZmluZSBEVUtfVEFHX09CSkVDVCAgICAgICAgICAgICAgICA5 CisjZGVmaW5lIERVS19UQUdfQlVGRkVSICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIERVS19U QUdfTUFYICAgICAgICAgICAgICAgICAgIDEwCisKKyNkZWZpbmUgRFVLX1RWQUxfSVNfVkFMSURf VEFHKHR2KSBcCisJKERVS19UVkFMX0dFVF9UQUcoKHR2KSkgLSBEVUtfVEFHX01JTiA8PSBEVUtf VEFHX01BWCAtIERVS19UQUdfTUlOKQorCisvKiBEVUtfVEFHX05VTUJFUiBpcyBpbnRlbnRpb25h bGx5IGZpcnN0LCBhcyBpdCBpcyB0aGUgZGVmYXVsdCBjbGF1c2UgaW4gY29kZQorICogdG8gc3Vw cG9ydCB0aGUgOC1ieXRlIHJlcHJlc2VudGF0aW9uLiAgRnVydGhlciwgaXQgaXMgYSBub24taGVh cC1hbGxvY2F0ZWQKKyAqIHR5cGUgc28gaXQgc2hvdWxkIGNvbWUgYmVmb3JlIERVS19UQUdfU1RS SU5HLiAgRmluYWxseSwgaXQgc2hvdWxkIG5vdCBicmVhaworICogdGhlIHRhZyB2YWx1ZSByYW5n ZXMgY292ZXJlZCBieSBjYXNlLWNsYXVzZXMgaW4gYSBzd2l0Y2gtY2FzZS4KKyAqLworCisvKiBz ZXR0ZXJzICovCisjZGVmaW5lIERVS19UVkFMX1NFVF9VTkRFRklORUQodHYpICBkbyB7IFwKKwkJ ZHVrX3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX190diA9ICh0dik7IFwKKwkJZHVrX190di0+dCA9 IERVS19UQUdfVU5ERUZJTkVEOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfVFZBTF9T RVRfVU5VU0VEKHR2KSAgZG8geyBcCisJCWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1a19fdHYg PSAodHYpOyBcCisJCWR1a19fdHYtPnQgPSBEVUtfVEFHX1VOVVNFRDsgXAorCX0gd2hpbGUgKDAp CisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX05VTEwodHYpICBkbyB7IFwKKwkJZHVrX3R2YWwgKmR1 a19fdHY7IFwKKwkJZHVrX190diA9ICh0dik7IFwKKwkJZHVrX190di0+dCA9IERVS19UQUdfTlVM TDsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0JPT0xFQU4odHYsdmFs KSAgZG8geyBcCisJCWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1a19fdHYgPSAodHYpOyBcCisJ CWR1a19fdHYtPnQgPSBEVUtfVEFHX0JPT0xFQU47IFwKKwkJZHVrX190di0+di5pID0gKGR1a19z bWFsbF9pbnRfdCkgKHZhbCk7IFwKKwl9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChEVUtfVVNF X0ZBU1RJTlQpCisjZGVmaW5lIERVS19UVkFMX1NFVF9ET1VCTEUodHYsdmFsKSAgZG8geyBcCisJ CWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1a19kb3VibGVfdCBkdWtfX2RibHZhbDsgXAorCQlk dWtfX2RibHZhbCA9ICh2YWwpOyBcCisJCURVS19BU1NFUlRfRE9VQkxFX0lTX05PUk1BTElaRUQo ZHVrX19kYmx2YWwpOyAvKiBub3AgZm9yIHVucGFja2VkIGR1a190dmFsICovIFwKKwkJZHVrX190 diA9ICh0dik7IFwKKwkJZHVrX190di0+dCA9IERVS19UQUdfTlVNQkVSOyBcCisJCWR1a19fdHYt PnYuZCA9IGR1a19fZGJsdmFsOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VU X0k0OCh0dix2YWwpICBkbyB7IFwKKwkJZHVrX3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX190diA9 ICh0dik7IFwKKwkJZHVrX190di0+dCA9IERVS19UQUdfRkFTVElOVDsgXAorCQlkdWtfX3R2LT52 LmZpID0gKHZhbCk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfVTMyKHR2 LHZhbCkgIGRvIHsgXAorCQlkdWtfdHZhbCAqZHVrX190djsgXAorCQlkdWtfX3R2ID0gKHR2KTsg XAorCQlkdWtfX3R2LT50ID0gRFVLX1RBR19GQVNUSU5UOyBcCisJCWR1a19fdHYtPnYuZmkgPSAo ZHVrX2ludDY0X3QpICh2YWwpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VU X0kzMih0dix2YWwpICBkbyB7IFwKKwkJZHVrX3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX190diA9 ICh0dik7IFwKKwkJZHVrX190di0+dCA9IERVS19UQUdfRkFTVElOVDsgXAorCQlkdWtfX3R2LT52 LmZpID0gKGR1a19pbnQ2NF90KSAodmFsKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19U VkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9GQVNUKHR2LGQpIFwKKwlkdWtfdHZhbF9zZXRfbnVtYmVy X2Noa2Zhc3RfZmFzdCgodHYpLCAoZCkpCisjZGVmaW5lIERVS19UVkFMX1NFVF9OVU1CRVJfQ0hL RkFTVF9TTE9XKHR2LGQpIFwKKwlkdWtfdHZhbF9zZXRfbnVtYmVyX2Noa2Zhc3Rfc2xvdygodHYp LCAoZCkpCisjZGVmaW5lIERVS19UVkFMX1NFVF9OVU1CRVIodHYsdmFsKSBcCisJRFVLX1RWQUxf U0VUX0RPVUJMRSgodHYpLCAodmFsKSkKKyNkZWZpbmUgRFVLX1RWQUxfQ0hLRkFTVF9JTlBMQUNF X0ZBU1QodHYpICBkbyB7IFwKKwkJZHVrX3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX2RvdWJsZV90 IGR1a19fZDsgXAorCQlkdWtfX3R2ID0gKHR2KTsgXAorCQlpZiAoRFVLX1RWQUxfSVNfRE9VQkxF KGR1a19fdHYpKSB7IFwKKwkJCWR1a19fZCA9IERVS19UVkFMX0dFVF9ET1VCTEUoZHVrX190dik7 IFwKKwkJCURVS19UVkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9GQVNUKGR1a19fdHYsIGR1a19fZCk7 IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfQ0hLRkFTVF9JTlBMQUNF X1NMT1codHYpICBkbyB7IFwKKwkJZHVrX3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX2RvdWJsZV90 IGR1a19fZDsgXAorCQlkdWtfX3R2ID0gKHR2KTsgXAorCQlpZiAoRFVLX1RWQUxfSVNfRE9VQkxF KGR1a19fdHYpKSB7IFwKKwkJCWR1a19fZCA9IERVS19UVkFMX0dFVF9ET1VCTEUoZHVrX190dik7 IFwKKwkJCURVS19UVkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9TTE9XKGR1a19fdHYsIGR1a19fZCk7 IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNlbHNlICAvKiBEVUtfVVNFX0ZBU1RJTlQgKi8KKyNk ZWZpbmUgRFVLX1RWQUxfU0VUX0RPVUJMRSh0dixkKSBcCisJRFVLX1RWQUxfU0VUX05VTUJFUigo dHYpLCAoZCkpCisjZGVmaW5lIERVS19UVkFMX1NFVF9JNDgodHYsdmFsKSBcCisJRFVLX1RWQUxf U0VUX05VTUJFUigodHYpLCAoZHVrX2RvdWJsZV90KSAodmFsKSkgIC8qIFhYWDogZmFzdCBpbnQt dG8tZG91YmxlICovCisjZGVmaW5lIERVS19UVkFMX1NFVF9VMzIodHYsdmFsKSBcCisJRFVLX1RW QUxfU0VUX05VTUJFUigodHYpLCAoZHVrX2RvdWJsZV90KSAodmFsKSkKKyNkZWZpbmUgRFVLX1RW QUxfU0VUX0kzMih0dix2YWwpIFwKKwlEVUtfVFZBTF9TRVRfTlVNQkVSKCh0diksIChkdWtfZG91 YmxlX3QpICh2YWwpKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVNQkVSKHR2LHZhbCkgIGRvIHsg XAorCQlkdWtfdHZhbCAqZHVrX190djsgXAorCQlkdWtfZG91YmxlX3QgZHVrX19kYmx2YWw7IFwK KwkJZHVrX19kYmx2YWwgPSAodmFsKTsgXAorCQlEVUtfQVNTRVJUX0RPVUJMRV9JU19OT1JNQUxJ WkVEKGR1a19fZGJsdmFsKTsgLyogbm9wIGZvciB1bnBhY2tlZCBkdWtfdHZhbCAqLyBcCisJCWR1 a19fdHYgPSAodHYpOyBcCisJCWR1a19fdHYtPnQgPSBEVUtfVEFHX05VTUJFUjsgXAorCQlkdWtf X3R2LT52LmQgPSBkdWtfX2RibHZhbDsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19UVkFM X1NFVF9OVU1CRVJfQ0hLRkFTVF9GQVNUKHR2LGQpIFwKKwlEVUtfVFZBTF9TRVRfTlVNQkVSKCh0 diksIChkKSkKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX05VTUJFUl9DSEtGQVNUX1NMT1codHYsZCkg XAorCURVS19UVkFMX1NFVF9OVU1CRVIoKHR2KSwgKGQpKQorI2RlZmluZSBEVUtfVFZBTF9DSEtG QVNUX0lOUExBQ0VfRkFTVCh0dikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxf Q0hLRkFTVF9JTlBMQUNFX1NMT1codHYpICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgIC8qIERV S19VU0VfRkFTVElOVCAqLworCisjZGVmaW5lIERVS19UVkFMX1NFVF9GQVNUSU5UKHR2LGkpIFwK KwlEVUtfVFZBTF9TRVRfSTQ4KCh0diksIChpKSkgIC8qIGFsaWFzICovCisKKyNkZWZpbmUgRFVL X1RWQUxfU0VUX1BPSU5URVIodHYsaHB0cikgIGRvIHsgXAorCQlkdWtfdHZhbCAqZHVrX190djsg XAorCQlkdWtfX3R2ID0gKHR2KTsgXAorCQlkdWtfX3R2LT50ID0gRFVLX1RBR19QT0lOVEVSOyBc CisJCWR1a19fdHYtPnYudm9pZHB0ciA9IChocHRyKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZp bmUgRFVLX1RWQUxfU0VUX0xJR0hURlVOQyh0dixmcCxmbGFncykgIGRvIHsgXAorCQlkdWtfdHZh bCAqZHVrX190djsgXAorCQlkdWtfX3R2ID0gKHR2KTsgXAorCQlkdWtfX3R2LT50ID0gRFVLX1RB R19MSUdIVEZVTkM7IFwKKwkJZHVrX190di0+dl9leHRyYSA9IChmbGFncyk7IFwKKwkJZHVrX190 di0+di5saWdodGZ1bmMgPSAoZHVrX2NfZnVuY3Rpb24pIChmcCk7IFwKKwl9IHdoaWxlICgwKQor CisjZGVmaW5lIERVS19UVkFMX1NFVF9TVFJJTkcodHYsaHB0cikgIGRvIHsgXAorCQlkdWtfdHZh bCAqZHVrX190djsgXAorCQlkdWtfX3R2ID0gKHR2KTsgXAorCQlkdWtfX3R2LT50ID0gRFVLX1RB R19TVFJJTkc7IFwKKwkJZHVrX190di0+di5oc3RyaW5nID0gKGhwdHIpOyBcCisJfSB3aGlsZSAo MCkKKworI2RlZmluZSBEVUtfVFZBTF9TRVRfT0JKRUNUKHR2LGhwdHIpICBkbyB7IFwKKwkJZHVr X3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX190diA9ICh0dik7IFwKKwkJZHVrX190di0+dCA9IERV S19UQUdfT0JKRUNUOyBcCisJCWR1a19fdHYtPnYuaG9iamVjdCA9IChocHRyKTsgXAorCX0gd2hp bGUgKDApCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0JVRkZFUih0dixocHRyKSAgZG8geyBcCisJ CWR1a190dmFsICpkdWtfX3R2OyBcCisJCWR1a19fdHYgPSAodHYpOyBcCisJCWR1a19fdHYtPnQg PSBEVUtfVEFHX0JVRkZFUjsgXAorCQlkdWtfX3R2LT52LmhidWZmZXIgPSAoaHB0cik7IFwKKwl9 IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19UVkFMX1NFVF9OQU4odHYpICBkbyB7IFwKKwkJLyog aW4gbm9uLXBhY2tlZCByZXByZXNlbnRhdGlvbiB3ZSBkb24ndCBjYXJlIGFib3V0IHdoaWNoIE5h TiBpcyB1c2VkICovIFwKKwkJZHVrX3R2YWwgKmR1a19fdHY7IFwKKwkJZHVrX190diA9ICh0dik7 IFwKKwkJZHVrX190di0+dCA9IERVS19UQUdfTlVNQkVSOyBcCisJCWR1a19fdHYtPnYuZCA9IERV S19ET1VCTEVfTkFOOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfVFZBTF9TRVRfVFZB TCh0dix4KSAgICAgICAgICAgIGRvIHsgKih0dikgPSAqKHgpOyB9IHdoaWxlICgwKQorCisvKiBn ZXR0ZXJzICovCisjZGVmaW5lIERVS19UVkFMX0dFVF9CT09MRUFOKHR2KSAgICAgICAgICAgKChk dWtfc21hbGxfdWludF90KSAodHYpLT52LmkpCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQp CisjZGVmaW5lIERVS19UVkFMX0dFVF9ET1VCTEUodHYpICAgICAgICAgICAgKCh0diktPnYuZCkK KyNkZWZpbmUgRFVLX1RWQUxfR0VUX0ZBU1RJTlQodHYpICAgICAgICAgICAoKHR2KS0+di5maSkK KyNkZWZpbmUgRFVLX1RWQUxfR0VUX0ZBU1RJTlRfVTMyKHR2KSAgICAgICAoKGR1a191aW50MzJf dCkgKCh0diktPnYuZmkpKQorI2RlZmluZSBEVUtfVFZBTF9HRVRfRkFTVElOVF9JMzIodHYpICAg ICAgICgoZHVrX2ludDMyX3QpICgodHYpLT52LmZpKSkKKyNpZiAwCisjZGVmaW5lIERVS19UVkFM X0dFVF9OVU1CRVIodHYpICAgICAgICAgICAgKERVS19UVkFMX0lTX0ZBU1RJTlQoKHR2KSkgPyBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfZG91 YmxlX3QpIERVS19UVkFMX0dFVF9GQVNUSU5UKCh0dikpIDogXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFZBTF9HRVRfRE9VQkxFKCh0dikpKQor I2RlZmluZSBEVUtfVFZBTF9HRVRfTlVNQkVSKHR2KSAgICAgICAgICAgIGR1a190dmFsX2dldF9u dW1iZXJfdW5wYWNrZWQoKHR2KSkKKyNlbHNlCisvKiBUaGlzIHNlZW1zIHJlYXNvbmFibGUgb3Zl cmFsbC4gKi8KKyNkZWZpbmUgRFVLX1RWQUxfR0VUX05VTUJFUih0dikgICAgICAgICAgICAoRFVL X1RWQUxfSVNfRkFTVElOVCgodHYpKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX3R2YWxfZ2V0X251bWJlcl91bnBhY2tlZF9mYXN0aW50KCh0 dikpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfVFZBTF9HRVRfRE9VQkxFKCh0dikpKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBEVUtfVFZB TF9HRVRfTlVNQkVSKHR2KSAgICAgICAgICAgICgodHYpLT52LmQpCisjZGVmaW5lIERVS19UVkFM X0dFVF9ET1VCTEUodHYpICAgICAgICAgICAgKCh0diktPnYuZCkKKyNlbmRpZiAgLyogRFVLX1VT RV9GQVNUSU5UICovCisjZGVmaW5lIERVS19UVkFMX0dFVF9QT0lOVEVSKHR2KSAgICAgICAgICAg KCh0diktPnYudm9pZHB0cikKKyNkZWZpbmUgRFVLX1RWQUxfR0VUX0xJR0hURlVOQyh0dixvdXRf ZnAsb3V0X2ZsYWdzKSAgZG8geyBcCisJCShvdXRfZmxhZ3MpID0gKGR1a191aW50MzJfdCkgKHR2 KS0+dl9leHRyYTsgXAorCQkob3V0X2ZwKSA9ICh0diktPnYubGlnaHRmdW5jOyBcCisJfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfR0VUX0xJR0hURlVOQ19GVU5DUFRSKHR2KSAoKHR2KS0+ di5saWdodGZ1bmMpCisjZGVmaW5lIERVS19UVkFMX0dFVF9MSUdIVEZVTkNfRkxBR1ModHYpICAg KChkdWtfc21hbGxfdWludF90KSAoKHR2KS0+dl9leHRyYSkpCisjZGVmaW5lIERVS19UVkFMX0dF VF9TVFJJTkcodHYpICAgICAgICAgICAgKCh0diktPnYuaHN0cmluZykKKyNkZWZpbmUgRFVLX1RW QUxfR0VUX09CSkVDVCh0dikgICAgICAgICAgICAoKHR2KS0+di5ob2JqZWN0KQorI2RlZmluZSBE VUtfVFZBTF9HRVRfQlVGRkVSKHR2KSAgICAgICAgICAgICgodHYpLT52LmhidWZmZXIpCisjZGVm aW5lIERVS19UVkFMX0dFVF9IRUFQSERSKHR2KSAgICAgICAgICAgKCh0diktPnYuaGVhcGhkcikK KworLyogZGVjb2RpbmcgKi8KKyNkZWZpbmUgRFVLX1RWQUxfR0VUX1RBRyh0dikgICAgICAgICAg ICAgICAoKHR2KS0+dCkKKyNkZWZpbmUgRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHR2KSAgICAgICAg ICAoKHR2KS0+dCA9PSBEVUtfVEFHX1VOREVGSU5FRCkKKyNkZWZpbmUgRFVLX1RWQUxfSVNfVU5V U0VEKHR2KSAgICAgICAgICAgICAoKHR2KS0+dCA9PSBEVUtfVEFHX1VOVVNFRCkKKyNkZWZpbmUg RFVLX1RWQUxfSVNfTlVMTCh0dikgICAgICAgICAgICAgICAoKHR2KS0+dCA9PSBEVUtfVEFHX05V TEwpCisjZGVmaW5lIERVS19UVkFMX0lTX0JPT0xFQU4odHYpICAgICAgICAgICAgKCh0diktPnQg PT0gRFVLX1RBR19CT09MRUFOKQorI2RlZmluZSBEVUtfVFZBTF9JU19CT09MRUFOX1RSVUUodHYp ICAgICAgICgoKHR2KS0+dCA9PSBEVUtfVEFHX0JPT0xFQU4pICYmICgodHYpLT52LmkgIT0gMCkp CisjZGVmaW5lIERVS19UVkFMX0lTX0JPT0xFQU5fRkFMU0UodHYpICAgICAgKCgodHYpLT50ID09 IERVS19UQUdfQk9PTEVBTikgJiYgKCh0diktPnYuaSA9PSAwKSkKKyNpZiBkZWZpbmVkKERVS19V U0VfRkFTVElOVCkKKyNkZWZpbmUgRFVLX1RWQUxfSVNfRE9VQkxFKHR2KSAgICAgICAgICAgICAo KHR2KS0+dCA9PSBEVUtfVEFHX05VTUJFUikKKyNkZWZpbmUgRFVLX1RWQUxfSVNfRkFTVElOVCh0 dikgICAgICAgICAgICAoKHR2KS0+dCA9PSBEVUtfVEFHX0ZBU1RJTlQpCisjZGVmaW5lIERVS19U VkFMX0lTX05VTUJFUih0dikgICAgICAgICAgICAgKCh0diktPnQgPT0gRFVLX1RBR19OVU1CRVIg fHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHYpLT50 ID09IERVS19UQUdfRkFTVElOVCkKKyNlbHNlCisjZGVmaW5lIERVS19UVkFMX0lTX05VTUJFUih0 dikgICAgICAgICAgICAgKCh0diktPnQgPT0gRFVLX1RBR19OVU1CRVIpCisjZGVmaW5lIERVS19U VkFMX0lTX0RPVUJMRSh0dikgICAgICAgICAgICAgRFVLX1RWQUxfSVNfTlVNQkVSKCh0dikpCisj ZW5kaWYgIC8qIERVS19VU0VfRkFTVElOVCAqLworI2RlZmluZSBEVUtfVFZBTF9JU19QT0lOVEVS KHR2KSAgICAgICAgICAgICgodHYpLT50ID09IERVS19UQUdfUE9JTlRFUikKKyNkZWZpbmUgRFVL X1RWQUxfSVNfTElHSFRGVU5DKHR2KSAgICAgICAgICAoKHR2KS0+dCA9PSBEVUtfVEFHX0xJR0hU RlVOQykKKyNkZWZpbmUgRFVLX1RWQUxfSVNfU1RSSU5HKHR2KSAgICAgICAgICAgICAoKHR2KS0+ dCA9PSBEVUtfVEFHX1NUUklORykKKyNkZWZpbmUgRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSAgICAg ICAgICAgICAoKHR2KS0+dCA9PSBEVUtfVEFHX09CSkVDVCkKKyNkZWZpbmUgRFVLX1RWQUxfSVNf QlVGRkVSKHR2KSAgICAgICAgICAgICAoKHR2KS0+dCA9PSBEVUtfVEFHX0JVRkZFUikKKworLyog VGhpcyBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbCBiZWNhdXNlIGl0J3MgbmVlZGVkIGZvciBldmVy eSBERUNSRUYuCisgKiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBmaXJzdCBo ZWFwIGFsbG9jYXRlZCB0YWcgaXMgOCwKKyAqIHNvIHRoYXQgYml0IDMgaXMgc2V0IGZvciBhbGwg aGVhcCBhbGxvY2F0ZWQgdGFncyAoYW5kIG5ldmVyIHNldCBmb3IKKyAqIG5vbi1oZWFwLWFsbG9j YXRlZCB0YWdzKS4KKyAqLworI2lmIDAKKyNkZWZpbmUgRFVLX1RWQUxfSVNfSEVBUF9BTExPQ0FU RUQodHYpICAgICAoKHR2KS0+dCA+PSBEVUtfVEFHX1NUUklORykKKyNlbmRpZgorI2RlZmluZSBE VUtfVFZBTF9JU19IRUFQX0FMTE9DQVRFRCh0dikgICAgICgodHYpLT50ICYgMHgwOCkKKworI2lm IGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorI2lmIDAKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19k b3VibGVfdCBkdWtfdHZhbF9nZXRfbnVtYmVyX3VucGFja2VkKGR1a190dmFsICp0dik7CisjZW5k aWYKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19kb3VibGVfdCBkdWtfdHZhbF9nZXRfbnVtYmVyX3Vu cGFja2VkX2Zhc3RpbnQoZHVrX3R2YWwgKnR2KTsKKyNlbmRpZgorCisjZW5kaWYgIC8qIERVS19V U0VfUEFDS0VEX1RWQUwgKi8KKworLyoKKyAqICBDb252ZW5pZW5jZSAoaW5kZXBlbmRlbnQgb2Yg cmVwcmVzZW50YXRpb24pCisgKi8KKworI2RlZmluZSBEVUtfVFZBTF9TRVRfQk9PTEVBTl9UUlVF KHR2KSAgICAgICAgRFVLX1RWQUxfU0VUX0JPT0xFQU4oKHR2KSwgMSkKKyNkZWZpbmUgRFVLX1RW QUxfU0VUX0JPT0xFQU5fRkFMU0UodHYpICAgICAgIERVS19UVkFMX1NFVF9CT09MRUFOKCh0diks IDApCisKKyNkZWZpbmUgRFVLX1RWQUxfU1RSSU5HX0lTX1NZTUJPTCh0dikgXAorCURVS19IU1RS SU5HX0hBU19TWU1CT0woRFVLX1RWQUxfR0VUX1NUUklORygodHYpKSkKKworLyogTGlnaHRmdW5j IGZsYWdzIHBhY2tpbmcgYW5kIHVucGFja2luZy4gKi8KKy8qIFNpZ24gZXh0ZW5kOiAweDAwMDAj IzAwIC0+IDB4IyMwMDAwMDAgLT4gc2lnbiBleHRlbmQgdG8gMHhzc3Nzc3MjIy4KKyAqIEF2b2lk IHNpZ25lZCBzaGlmdHMgZHVlIHRvIHBvcnRhYmlsaXR5IGxpbWl0YXRpb25zLgorICovCisjZGVm aW5lIERVS19MRlVOQ19GTEFHU19HRVRfTUFHSUMobGZfZmxhZ3MpIFwKKwkoKGR1a19pbnQzMl90 KSAoZHVrX2ludDhfdCkgKCgoZHVrX3VpbnQxNl90KSAobGZfZmxhZ3MpKSA+PiA4KSkKKyNkZWZp bmUgRFVLX0xGVU5DX0ZMQUdTX0dFVF9MRU5HVEgobGZfZmxhZ3MpIFwKKwkoKChsZl9mbGFncykg Pj4gNCkgJiAweDBmVSkKKyNkZWZpbmUgRFVLX0xGVU5DX0ZMQUdTX0dFVF9OQVJHUyhsZl9mbGFn cykgXAorCSgobGZfZmxhZ3MpICYgMHgwZlUpCisjZGVmaW5lIERVS19MRlVOQ19GTEFHU19QQUNL KG1hZ2ljLGxlbmd0aCxuYXJncykgXAorCSgoKChkdWtfc21hbGxfdWludF90KSAobWFnaWMpKSAm IDB4ZmZVKSA8PCA4KSB8ICgobGVuZ3RoKSA8PCA0KSB8IChuYXJncykKKworI2RlZmluZSBEVUtf TEZVTkNfTkFSR1NfVkFSQVJHUyAgICAgICAgICAgICAweDBmICAgLyogdmFyYXJncyBtYXJrZXIg Ki8KKyNkZWZpbmUgRFVLX0xGVU5DX05BUkdTX01JTiAgICAgICAgICAgICAgICAgMHgwMAorI2Rl ZmluZSBEVUtfTEZVTkNfTkFSR1NfTUFYICAgICAgICAgICAgICAgICAweDBlICAgLyogbWF4LCBl eGNsLiB2YXJhcmdzIG1hcmtlciAqLworI2RlZmluZSBEVUtfTEZVTkNfTEVOR1RIX01JTiAgICAg ICAgICAgICAgICAweDAwCisjZGVmaW5lIERVS19MRlVOQ19MRU5HVEhfTUFYICAgICAgICAgICAg ICAgIDB4MGYKKyNkZWZpbmUgRFVLX0xGVU5DX01BR0lDX01JTiAgICAgICAgICAgICAgICAgKC0w eDgwKQorI2RlZmluZSBEVUtfTEZVTkNfTUFHSUNfTUFYICAgICAgICAgICAgICAgICAweDdmCisK Ky8qIGZhc3RpbnQgY29uc3RhbnRzIGV0YyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5U KQorI2RlZmluZSBEVUtfRkFTVElOVF9NSU4gICAgICAgICAgIChEVUtfSTY0X0NPTlNUQU5UKC0w eDgwMDAwMDAwMDAwMCkpCisjZGVmaW5lIERVS19GQVNUSU5UX01BWCAgICAgICAgICAgKERVS19J NjRfQ09OU1RBTlQoMHg3ZmZmZmZmZmZmZmYpKQorI2RlZmluZSBEVUtfRkFTVElOVF9CSVRTICAg ICAgICAgIDQ4CisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3R2YWxfc2V0X251bWJlcl9j aGtmYXN0X2Zhc3QoZHVrX3R2YWwgKnR2LCBkdWtfZG91YmxlX3QgeCk7CitEVUtfSU5URVJOQUxf REVDTCB2b2lkIGR1a190dmFsX3NldF9udW1iZXJfY2hrZmFzdF9zbG93KGR1a190dmFsICp0diwg ZHVrX2RvdWJsZV90IHgpOworI2VuZGlmCisKKyNlbmRpZiAgLyogRFVLX1RWQUxfSF9JTkNMVURF RCAqLworLyogI2luY2x1ZGUgZHVrX2J1aWx0aW5zLmggKi8KKy8qCisgKiAgQXV0b21hdGljYWxs eSBnZW5lcmF0ZWQgYnkgZ2VuYnVpbHRpbnMucHksIGRvIG5vdCBlZGl0IQorICovCisKKyNpZiAh ZGVmaW5lZChEVUtfQlVJTFRJTlNfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX0JVSUxUSU5TX0hf SU5DTFVERUQKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01fU1RSSU5HUykKKyNlcnJvciBST00g c3VwcG9ydCBub3QgZW5hYmxlZCwgcmVydW4gY29uZmlndXJlLnB5IHdpdGggLS1yb20tc3VwcG9y dAorI2Vsc2UgIC8qIERVS19VU0VfUk9NX1NUUklOR1MgKi8KKyNkZWZpbmUgRFVLX1NUUklEWF9V Q19VTkRFRklORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogJ1VuZGVmaW5lZCcgKi8KKyNkZWZpbmUgRFVLX0hF QVBfU1RSSU5HX1VDX1VOREVGSU5FRChoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1VDX1VOREVGSU5FRCkKKyNkZWZp bmUgRFVLX0hUSFJFQURfU1RSSU5HX1VDX1VOREVGSU5FRCh0aHIpICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfVUNfVU5ERUZJ TkVEKQorI2RlZmluZSBEVUtfU1RSSURYX1VDX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnTnVs bCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1VDX05VTEwoaGVhcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURY X1VDX05VTEwpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19VQ19OVUxMKHRocikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtf U1RSSURYX1VDX05VTEwpCisjZGVmaW5lIERVS19TVFJJRFhfVUNfU1lNQk9MICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICdTeW1ib2wnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19VQ19TWU1CT0woaGVh cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVh cCksRFVLX1NUUklEWF9VQ19TWU1CT0wpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19VQ19T WU1CT0wodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NU UklORygodGhyKSxEVUtfU1RSSURYX1VDX1NZTUJPTCkKKyNkZWZpbmUgRFVLX1NUUklEWF9VQ19B UkdVTUVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogJ0FyZ3VtZW50cycgKi8KKyNkZWZpbmUgRFVLX0hFQVBf U1RSSU5HX1VDX0FSR1VNRU5UUyhoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1VDX0FSR1VNRU5UUykKKyNkZWZpbmUg RFVLX0hUSFJFQURfU1RSSU5HX1VDX0FSR1VNRU5UUyh0aHIpICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfVUNfQVJHVU1FTlRT KQorI2RlZmluZSBEVUtfU1RSSURYX1VDX09CSkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnT2JqZWN0 JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfVUNfT0JKRUNUKGhlYXApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhf VUNfT0JKRUNUKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfVUNfT0JKRUNUKHRocikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVL X1NUUklEWF9VQ19PQkpFQ1QpCisjZGVmaW5lIERVS19TVFJJRFhfVUNfRlVOQ1RJT04gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICdGdW5jdGlvbicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1VDX0ZVTkNU SU9OKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5H KChoZWFwKSxEVUtfU1RSSURYX1VDX0ZVTkNUSU9OKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJ TkdfVUNfRlVOQ1RJT04odGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFE X0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9VQ19GVU5DVElPTikKKyNkZWZpbmUgRFVLX1NU UklEWF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ0FycmF5JyAqLworI2RlZmluZSBEVUtf SEVBUF9TVFJJTkdfQVJSQVkoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfQVJSQVkpCisjZGVmaW5lIERV S19IVEhSRUFEX1NUUklOR19BUlJBWSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0FSUkFZKQorI2RlZmlu ZSBEVUtfU1RSSURYX1VDX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnU3RyaW5nJyAqLworI2Rl ZmluZSBEVUtfSEVBUF9TVFJJTkdfVUNfU1RSSU5HKGhlYXApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfVUNfU1RSSU5H KQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfVUNfU1RSSU5HKHRocikgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9V Q19TVFJJTkcpCisjZGVmaW5lIERVS19TVFJJRFhfVUNfQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICdCb29sZWFuJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfVUNfQk9PTEVBTihoZWFwKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERV S19TVFJJRFhfVUNfQk9PTEVBTikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1VDX0JPT0xF QU4odGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5H KCh0aHIpLERVS19TVFJJRFhfVUNfQk9PTEVBTikKKyNkZWZpbmUgRFVLX1NUUklEWF9VQ19OVU1C RVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogJ051bWJlcicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5H X1VDX05VTUJFUihoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9H RVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1VDX05VTUJFUikKKyNkZWZpbmUgRFVLX0hUSFJF QURfU1RSSU5HX1VDX05VTUJFUih0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfVUNfTlVNQkVSKQorI2RlZmluZSBE VUtfU1RSSURYX0RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnRGF0ZScgKi8KKyNkZWZpbmUg RFVLX0hFQVBfU1RSSU5HX0RBVEUoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0RBVEUpCisjZGVmaW5l IERVS19IVEhSRUFEX1NUUklOR19EQVRFKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0RBVEUpCisjZGVm aW5lIERVS19TVFJJRFhfUkVHX0VYUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdSZWdFeHAnICovCisj ZGVmaW5lIERVS19IRUFQX1NUUklOR19SRUdfRVhQKGhlYXApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9SRUdfRVhQ KQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfUkVHX0VYUCh0aHIpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9S RUdfRVhQKQorI2RlZmluZSBEVUtfU1RSSURYX1VDX0VSUk9SICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAn RXJyb3InICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19VQ19FUlJPUihoZWFwKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NU UklEWF9VQ19FUlJPUikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1VDX0VSUk9SKHRocikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIp LERVS19TVFJJRFhfVUNfRVJST1IpCisjZGVmaW5lIERVS19TVFJJRFhfTUFUSCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICdNYXRoJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfTUFUSChoZWFw KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkco KGhlYXApLERVS19TVFJJRFhfTUFUSCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX01BVEgo dGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RS SU5HKCh0aHIpLERVS19TVFJJRFhfTUFUSCkKKyNkZWZpbmUgRFVLX1NUUklEWF9KU09OICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogJ0pTT04nICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19KU09O KGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NU UklORygoaGVhcCksRFVLX1NUUklEWF9KU09OKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdf SlNPTih0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dF VF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9KU09OKQorI2RlZmluZSBEVUtfU1RSSURYX0VNUFRZ X1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAnJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfRU1Q VFlfU1RSSU5HKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9T VFJJTkcoKGhlYXApLERVS19TVFJJRFhfRU1QVFlfU1RSSU5HKQorI2RlZmluZSBEVUtfSFRIUkVB RF9TVFJJTkdfRU1QVFlfU1RSSU5HKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I VEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9FTVBUWV9TVFJJTkcpCisjZGVmaW5l IERVS19TVFJJRFhfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdBcnJheUJ1ZmZlcicgKi8K KyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0FSUkFZX0JVRkZFUihoZWFwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0FSUkFZ X0JVRkZFUikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0FSUkFZX0JVRkZFUih0aHIpICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19T VFJJRFhfQVJSQVlfQlVGRkVSKQorI2RlZmluZSBEVUtfU1RSSURYX0RBVEFfVklFVyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAnRGF0YVZpZXcnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19EQVRBX1ZJ RVcoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklO RygoaGVhcCksRFVLX1NUUklEWF9EQVRBX1ZJRVcpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklO R19EQVRBX1ZJRVcodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURf R0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0RBVEFfVklFVykKKyNkZWZpbmUgRFVLX1NUUklE WF9JTlQ4X0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ0ludDhBcnJheScgKi8KKyNkZWZpbmUgRFVL X0hFQVBfU1RSSU5HX0lOVDhfQVJSQVkoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0lOVDhfQVJSQVkpCisjZGVm aW5lIERVS19IVEhSRUFEX1NUUklOR19JTlQ4X0FSUkFZKHRocikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lOVDhfQVJS QVkpCisjZGVmaW5lIERVS19TVFJJRFhfVUlOVDhfQVJSQVkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdVaW50 OEFycmF5JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfVUlOVDhfQVJSQVkoaGVhcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19T VFJJRFhfVUlOVDhfQVJSQVkpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19VSU5UOF9BUlJB WSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygo dGhyKSxEVUtfU1RSSURYX1VJTlQ4X0FSUkFZKQorI2RlZmluZSBEVUtfU1RSSURYX1VJTlQ4X0NM QU1QRURfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAnVWludDhDbGFtcGVkQXJyYXknICovCisjZGVmaW5lIERVS19I RUFQX1NUUklOR19VSU5UOF9DTEFNUEVEX0FSUkFZKGhlYXApICAgICAgICAgICAgICAgICAgICAg RFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9VSU5UOF9DTEFNUEVEX0FSUkFZ KQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfVUlOVDhfQ0xBTVBFRF9BUlJBWSh0aHIpICAg ICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9V SU5UOF9DTEFNUEVEX0FSUkFZKQorI2RlZmluZSBEVUtfU1RSSURYX0lOVDE2X0FSUkFZICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAnSW50MTZBcnJheScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0lOVDE2 X0FSUkFZKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RS SU5HKChoZWFwKSxEVUtfU1RSSURYX0lOVDE2X0FSUkFZKQorI2RlZmluZSBEVUtfSFRIUkVBRF9T VFJJTkdfSU5UMTZfQVJSQVkodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhS RUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9JTlQxNl9BUlJBWSkKKyNkZWZpbmUgRFVL X1NUUklEWF9VSU5UMTZfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ1VpbnQxNkFycmF5JyAqLworI2Rl ZmluZSBEVUtfSEVBUF9TVFJJTkdfVUlOVDE2X0FSUkFZKGhlYXApICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfVUlOVDE2X0FS UkFZKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfVUlOVDE2X0FSUkFZKHRocikgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklE WF9VSU5UMTZfQVJSQVkpCisjZGVmaW5lIERVS19TVFJJRFhfSU5UMzJfQVJSQVkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICdJbnQzMkFycmF5JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSU5UMzJfQVJS QVkoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkco KGhlYXApLERVS19TVFJJRFhfSU5UMzJfQVJSQVkpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklO R19JTlQzMl9BUlJBWSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURf R0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lOVDMyX0FSUkFZKQorI2RlZmluZSBEVUtfU1RS SURYX1VJTlQzMl9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnVWludDMyQXJyYXknICovCisjZGVmaW5l IERVS19IRUFQX1NUUklOR19VSU5UMzJfQVJSQVkoaGVhcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9VSU5UMzJfQVJSQVkp CisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19VSU5UMzJfQVJSQVkodGhyKSAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1VJ TlQzMl9BUlJBWSkKKyNkZWZpbmUgRFVLX1NUUklEWF9GTE9BVDMyX0FSUkFZICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogJ0Zsb2F0MzJBcnJheScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0ZMT0FUMzJfQVJS QVkoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX0ZMT0FUMzJfQVJSQVkpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklO R19GTE9BVDMyX0FSUkFZKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURf R0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0ZMT0FUMzJfQVJSQVkpCisjZGVmaW5lIERVS19T VFJJRFhfRkxPQVQ2NF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdGbG9hdDY0QXJyYXknICovCisjZGVm aW5lIERVS19IRUFQX1NUUklOR19GTE9BVDY0X0FSUkFZKGhlYXApICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9GTE9BVDY0X0FS UkFZKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfRkxPQVQ2NF9BUlJBWSh0aHIpICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklE WF9GTE9BVDY0X0FSUkFZKQorI2RlZmluZSBEVUtfU1RSSURYX0dMT0JBTCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAnZ2xvYmFsJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfR0xPQkFMKGhlYXAp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhl YXApLERVS19TVFJJRFhfR0xPQkFMKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfR0xPQkFM KHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJ TkcoKHRociksRFVLX1NUUklEWF9HTE9CQUwpCisjZGVmaW5lIERVS19TVFJJRFhfT0JKX0VOViAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjggICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICdPYmpFbnYnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19P QkpfRU5WKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VU X1NUUklORygoaGVhcCksRFVLX1NUUklEWF9PQkpfRU5WKQorI2RlZmluZSBEVUtfSFRIUkVBRF9T VFJJTkdfT0JKX0VOVih0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhS RUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9PQkpfRU5WKQorI2RlZmluZSBEVUtfU1RS SURYX0RFQ19FTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnRGVjRW52JyAqLworI2RlZmluZSBEVUtf SEVBUF9TVFJJTkdfREVDX0VOVihoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfREVDX0VOVikKKyNkZWZpbmUg RFVLX0hUSFJFQURfU1RSSU5HX0RFQ19FTlYodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfREVDX0VOVikKKyNk ZWZpbmUgRFVLX1NUUklEWF9VQ19CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ0J1ZmZlcicgKi8K KyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1VDX0JVRkZFUihoZWFwKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1VDX0JV RkZFUikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1VDX0JVRkZFUih0aHIpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJ RFhfVUNfQlVGRkVSKQorI2RlZmluZSBEVUtfU1RSSURYX1VDX1BPSU5URVIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAnUG9pbnRlcicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1VDX1BPSU5URVIoaGVh cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFw KSxEVUtfU1RSSURYX1VDX1BPSU5URVIpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19VQ19Q T0lOVEVSKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NU UklORygodGhyKSxEVUtfU1RSSURYX1VDX1BPSU5URVIpCisjZGVmaW5lIERVS19TVFJJRFhfVUNf VEhSRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICdUaHJlYWQnICovCisjZGVmaW5lIERVS19IRUFQX1NU UklOR19VQ19USFJFQUQoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hF QVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9VQ19USFJFQUQpCisjZGVmaW5lIERVS19I VEhSRUFEX1NUUklOR19VQ19USFJFQUQodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1VDX1RIUkVBRCkKKyNkZWZp bmUgRFVLX1NUUklEWF9FVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2V2YWwnICovCisjZGVm aW5lIERVS19IRUFQX1NUUklOR19FVkFMKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9FVkFMKQorI2Rl ZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfRVZBTCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9FVkFMKQor I2RlZmluZSBEVUtfU1RSSURYX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAndmFsdWUnICov CisjZGVmaW5lIERVS19IRUFQX1NUUklOR19WQUxVRShoZWFwKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9WQUxV RSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1ZBTFVFKHRocikgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhf VkFMVUUpCisjZGVmaW5lIERVS19TVFJJRFhfV1JJVEFCTEUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd3 cml0YWJsZScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1dSSVRBQkxFKGhlYXApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtf U1RSSURYX1dSSVRBQkxFKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfV1JJVEFCTEUodGhy KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRo ciksRFVLX1NUUklEWF9XUklUQUJMRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9DT05GSUdVUkFCTEUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogJ2NvbmZpZ3VyYWJsZScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5H X0NPTkZJR1VSQUJMRShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9H RVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX0hU SFJFQURfU1RSSU5HX0NPTkZJR1VSQUJMRSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQ09ORklHVVJBQkxFKQorI2Rl ZmluZSBEVUtfU1RSSURYX0VOVU1FUkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnZW51bWVyYWJsZScg Ki8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0VOVU1FUkFCTEUoaGVhcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0VO VU1FUkFCTEUpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19FTlVNRVJBQkxFKHRocikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtf U1RSSURYX0VOVU1FUkFCTEUpCisjZGVmaW5lIERVS19TVFJJRFhfSk9JTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzggICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICdqb2luJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSk9JTihoZWFwKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhl YXApLERVS19TVFJJRFhfSk9JTikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0pPSU4odGhy KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5H KCh0aHIpLERVS19TVFJJRFhfSk9JTikKKyNkZWZpbmUgRFVLX1NUUklEWF9UT19MT0NBTEVfU1RS SU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogJ3RvTG9jYWxlU3RyaW5nJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJ TkdfVE9fTE9DQUxFX1NUUklORyhoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQ X0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfVE9fTE9DQUxFX1NUUklORykKKyNkZWZpbmUg RFVLX0hUSFJFQURfU1RSSU5HX1RPX0xPQ0FMRV9TVFJJTkcodGhyKSAgICAgICAgICAgICAgICAg ICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfVE9fTE9DQUxFX1NU UklORykKKyNkZWZpbmUgRFVLX1NUUklEWF9WQUxVRV9PRiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3Zh bHVlT2YnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19WQUxVRV9PRihoZWFwKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NU UklEWF9WQUxVRV9PRikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1ZBTFVFX09GKHRocikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIp LERVS19TVFJJRFhfVkFMVUVfT0YpCisjZGVmaW5lIERVS19TVFJJRFhfVE9fVVRDX1NUUklORyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICd0b1VUQ1N0cmluZycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1RP X1VUQ19TVFJJTkcoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRf U1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1RPX1VUQ19TVFJJTkcpCisjZGVmaW5lIERVS19IVEhS RUFEX1NUUklOR19UT19VVENfU1RSSU5HKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1RPX1VUQ19TVFJJTkcpCisjZGVm aW5lIERVS19TVFJJRFhfVE9fSVNPX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgNDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd0b0lTT1N0cmluZycg Ki8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1RPX0lTT19TVFJJTkcoaGVhcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1RP X0lTT19TVFJJTkcpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19UT19JU09fU1RSSU5HKHRo cikgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxE VUtfU1RSSURYX1RPX0lTT19TVFJJTkcpCisjZGVmaW5lIERVS19TVFJJRFhfVE9fR01UX1NUUklO RyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICd0b0dNVFN0cmluZycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5H X1RPX0dNVF9TVFJJTkcoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9H RVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1RPX0dNVF9TVFJJTkcpCisjZGVmaW5lIERVS19I VEhSRUFEX1NUUklOR19UT19HTVRfU1RSSU5HKHRocikgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1RPX0dNVF9TVFJJTkcpCisj ZGVmaW5lIERVS19TVFJJRFhfU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgNDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdzb3VyY2UnICov CisjZGVmaW5lIERVS19IRUFQX1NUUklOR19TT1VSQ0UoaGVhcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9TT1VS Q0UpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19TT1VSQ0UodGhyKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURY X1NPVVJDRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9JR05PUkVfQ0FTRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA0NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog J2lnbm9yZUNhc2UnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19JR05PUkVfQ0FTRShoZWFw KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCks RFVLX1NUUklEWF9JR05PUkVfQ0FTRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0lHTk9S RV9DQVNFKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RS SU5HKCh0aHIpLERVS19TVFJJRFhfSUdOT1JFX0NBU0UpCisjZGVmaW5lIERVS19TVFJJRFhfTVVM VElMSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICdtdWx0aWxpbmUnICovCisjZGVmaW5lIERVS19IRUFQ X1NUUklOR19NVUxUSUxJTkUoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9NVUxUSUxJTkUpCisjZGVmaW5lIERV S19IVEhSRUFEX1NUUklOR19NVUxUSUxJTkUodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX01VTFRJTElORSkKKyNk ZWZpbmUgRFVLX1NUUklEWF9MQVNUX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA0NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2xhc3RJbmRleCcg Ki8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0xBU1RfSU5ERVgoaGVhcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0xB U1RfSU5ERVgpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19MQVNUX0lOREVYKHRocikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtf U1RSSURYX0xBU1RfSU5ERVgpCisjZGVmaW5lIERVS19TVFJJRFhfRkxBR1MgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDggICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICdmbGFncycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0ZMQUdTKGhlYXAp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX0ZMQUdTKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfRkxBR1Mo dGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJ TkcoKHRociksRFVLX1NUUklEWF9GTEFHUykKKyNkZWZpbmUgRFVLX1NUUklEWF9JTkRFWCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogJ2luZGV4JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSU5E RVgoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9T VFJJTkcoKGhlYXApLERVS19TVFJJRFhfSU5ERVgpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklO R19JTkRFWCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURf R0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lOREVYKQorI2RlZmluZSBEVUtfU1RSSURYX1BS T1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAncHJvdG90eXBlJyAqLworI2RlZmluZSBEVUtfSEVB UF9TVFJJTkdfUFJPVE9UWVBFKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfUFJPVE9UWVBFKQorI2RlZmluZSBE VUtfSFRIUkVBRF9TVFJJTkdfUFJPVE9UWVBFKHRocikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9QUk9UT1RZUEUpCisj ZGVmaW5lIERVS19TVFJJRFhfQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgNTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdjb25zdHJ1Y3Rv cicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0NPTlNUUlVDVE9SKGhlYXApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURY X0NPTlNUUlVDVE9SKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfQ09OU1RSVUNUT1IodGhy KSAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociks RFVLX1NUUklEWF9DT05TVFJVQ1RPUikKKyNkZWZpbmUgRFVLX1NUUklEWF9NRVNTQUdFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogJ21lc3NhZ2UnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19NRVNT QUdFKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NU UklORygoaGVhcCksRFVLX1NUUklEWF9NRVNTQUdFKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJ TkdfTUVTU0FHRSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFE X0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9NRVNTQUdFKQorI2RlZmluZSBEVUtfU1RSSURY X0xDX0JPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnYm9vbGVhbicgKi8KKyNkZWZpbmUgRFVLX0hF QVBfU1RSSU5HX0xDX0JPT0xFQU4oaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0xDX0JPT0xFQU4pCisjZGVmaW5l IERVS19IVEhSRUFEX1NUUklOR19MQ19CT09MRUFOKHRocikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0xDX0JPT0xFQU4p CisjZGVmaW5lIERVS19TVFJJRFhfTENfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgNTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdudW1iZXIn ICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19MQ19OVU1CRVIoaGVhcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9M Q19OVU1CRVIpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19MQ19OVU1CRVIodGhyKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtf U1RSSURYX0xDX05VTUJFUikKKyNkZWZpbmUgRFVLX1NUUklEWF9MQ19TVFJJTkcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogJ3N0cmluZycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0xDX1NUUklORyho ZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX0xDX1NUUklORykKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0xD X1NUUklORyh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRf U1RSSU5HKCh0aHIpLERVS19TVFJJRFhfTENfU1RSSU5HKQorI2RlZmluZSBEVUtfU1RSSURYX0xD X1NZTUJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAnc3ltYm9sJyAqLworI2RlZmluZSBEVUtfSEVBUF9T VFJJTkdfTENfU1lNQk9MKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I RUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfTENfU1lNQk9MKQorI2RlZmluZSBEVUtf SFRIUkVBRF9TVFJJTkdfTENfU1lNQk9MKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9MQ19TWU1CT0wpCisjZGVm aW5lIERVS19TVFJJRFhfTENfT0JKRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgNTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdvYmplY3QnICovCisj ZGVmaW5lIERVS19IRUFQX1NUUklOR19MQ19PQkpFQ1QoaGVhcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9MQ19PQkpF Q1QpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19MQ19PQkpFQ1QodGhyKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURY X0xDX09CSkVDVCkKKyNkZWZpbmUgRFVLX1NUUklEWF9MQ19VTkRFRklORUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogJ3VuZGVmaW5lZCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0xDX1VOREVGSU5FRCho ZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFw KSxEVUtfU1RSSURYX0xDX1VOREVGSU5FRCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0xD X1VOREVGSU5FRCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRf U1RSSU5HKCh0aHIpLERVS19TVFJJRFhfTENfVU5ERUZJTkVEKQorI2RlZmluZSBEVUtfU1RSSURY X05BTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnTmFOJyAqLworI2RlZmluZSBEVUtfSEVBUF9T VFJJTkdfTkFOKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I RUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfTkFOKQorI2RlZmluZSBEVUtfSFRIUkVB RF9TVFJJTkdfTkFOKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I VEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9OQU4pCisjZGVmaW5lIERVS19TVFJJ RFhfSU5GSU5JVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdJbmZpbml0eScgKi8KKyNkZWZpbmUgRFVL X0hFQVBfU1RSSU5HX0lORklOSVRZKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0lORklOSVRZKQorI2RlZmlu ZSBEVUtfSFRIUkVBRF9TVFJJTkdfSU5GSU5JVFkodGhyKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9JTkZJTklUWSkK KyNkZWZpbmUgRFVLX1NUUklEWF9NSU5VU19JTkZJTklUWSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA2MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJy1JbmZpbml0 eScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX01JTlVTX0lORklOSVRZKGhlYXApICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURY X01JTlVTX0lORklOSVRZKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfTUlOVVNfSU5GSU5J VFkodGhyKSAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRo ciksRFVLX1NUUklEWF9NSU5VU19JTkZJTklUWSkKKyNkZWZpbmUgRFVLX1NUUklEWF9NSU5VU19a RVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogJy0wJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfTUlO VVNfWkVSTyhoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9T VFJJTkcoKGhlYXApLERVS19TVFJJRFhfTUlOVVNfWkVSTykKKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RSSU5HX01JTlVTX1pFUk8odGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRI UkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfTUlOVVNfWkVSTykKKyNkZWZpbmUgRFVL X1NUUklEWF9DT01NQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA2MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJywnICovCisjZGVmaW5lIERVS19I RUFQX1NUUklOR19DT01NQShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9DT01NQSkKKyNkZWZpbmUgRFVL X0hUSFJFQURfU1RSSU5HX0NPTU1BKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQ09NTUEpCisjZGVmaW5l IERVS19TVFJJRFhfTkVXTElORV80U1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdcbiAgICAnICovCisjZGVm aW5lIERVS19IRUFQX1NUUklOR19ORVdMSU5FXzRTUEFDRShoZWFwKSAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9ORVdMSU5FXzRT UEFDRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX05FV0xJTkVfNFNQQUNFKHRocikgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJ RFhfTkVXTElORV80U1BBQ0UpCisjZGVmaW5lIERVS19TVFJJRFhfQlJBQ0tFVEVEX0VMTElQU0lT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICdbLi4uXScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0JSQUNLRVRFRF9F TExJUFNJUyhoZWFwKSAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX0JSQUNLRVRFRF9FTExJUFNJUykKKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RSSU5HX0JSQUNLRVRFRF9FTExJUFNJUyh0aHIpICAgICAgICAgICAgICAgICAgICBEVUtfSFRI UkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQlJBQ0tFVEVEX0VMTElQU0lTKQorI2Rl ZmluZSBEVUtfU1RSSURYX0lOVkFMSURfREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnSW52YWxpZCBEYXRl JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSU5WQUxJRF9EQVRFKGhlYXApICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhf SU5WQUxJRF9EQVRFKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfSU5WQUxJRF9EQVRFKHRo cikgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociks RFVLX1NUUklEWF9JTlZBTElEX0RBVEUpCisjZGVmaW5lIERVS19TVFJJRFhfTENfQVJHVU1FTlRT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjcgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICdhcmd1bWVudHMnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19M Q19BUkdVTUVOVFMoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VU X1NUUklORygoaGVhcCksRFVLX1NUUklEWF9MQ19BUkdVTUVOVFMpCisjZGVmaW5lIERVS19IVEhS RUFEX1NUUklOR19MQ19BUkdVTUVOVFModGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0xDX0FSR1VNRU5UUykKKyNkZWZp bmUgRFVLX1NUUklEWF9DQUxMRUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA2OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2NhbGxlZScgKi8KKyNk ZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0NBTExFRShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0NBTExFRSkK KyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0NBTExFRSh0aHIpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQ0FM TEVFKQorI2RlZmluZSBEVUtfU1RSSURYX0NBTExFUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDY5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnY2Fs bGVyJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfQ0FMTEVSKGhlYXApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJ RFhfQ0FMTEVSKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfQ0FMTEVSKHRocikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVL X1NUUklEWF9DQUxMRVIpCisjZGVmaW5lIERVS19TVFJJRFhfQVBQTFkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICdhcHBseScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0FQUExZKGhlYXApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFw KSxEVUtfU1RSSURYX0FQUExZKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfQVBQTFkodGhy KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkco KHRociksRFVLX1NUUklEWF9BUFBMWSkKKyNkZWZpbmUgRFVLX1NUUklEWF9DT05TVFJVQ1QgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogJ2NvbnN0cnVjdCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0NP TlNUUlVDVChoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRf U1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0NPTlNUUlVDVCkKKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RSSU5HX0NPTlNUUlVDVCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRI UkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQ09OU1RSVUNUKQorI2RlZmluZSBEVUtf U1RSSURYX0RFTEVURV9QUk9QRVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDcyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnZGVsZXRlUHJvcGVydHknICovCisj ZGVmaW5lIERVS19IRUFQX1NUUklOR19ERUxFVEVfUFJPUEVSVFkoaGVhcCkgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9ERUxFVEVf UFJPUEVSVFkpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19ERUxFVEVfUFJPUEVSVFkodGhy KSAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtf U1RSSURYX0RFTEVURV9QUk9QRVJUWSkKKyNkZWZpbmUgRFVLX1NUUklEWF9HRVQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogJ2dldCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0dFVChoZWFw KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5H KChoZWFwKSxEVUtfU1RSSURYX0dFVCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0dFVCh0 aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RS SU5HKCh0aHIpLERVS19TVFJJRFhfR0VUKQorI2RlZmluZSBEVUtfU1RSSURYX0hBUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAnaGFzJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSEFTKGhl YXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJ TkcoKGhlYXApLERVS19TVFJJRFhfSEFTKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfSEFT KHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9T VFJJTkcoKHRociksRFVLX1NUUklEWF9IQVMpCisjZGVmaW5lIERVS19TVFJJRFhfT1dOX0tFWVMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICdvd25LZXlzJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdf T1dOX0tFWVMoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dF VF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfT1dOX0tFWVMpCisjZGVmaW5lIERVS19IVEhSRUFE X1NUUklOR19PV05fS0VZUyh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hU SFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX09XTl9LRVlTKQorI2RlZmluZSBEVUtf U1RSSURYX1dFTExLTk9XTl9TWU1CT0xfVE9fUFJJTUlUSVZFICAgICAgICAgICAgICAgICAgICAg IDc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnXHg4MVN5bWJvbC50b1ByaW1pdGl2 ZVx4ZmYnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19XRUxMS05PV05fU1lNQk9MX1RPX1BS SU1JVElWRShoZWFwKSAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NU UklEWF9XRUxMS05PV05fU1lNQk9MX1RPX1BSSU1JVElWRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RSSU5HX1dFTExLTk9XTl9TWU1CT0xfVE9fUFJJTUlUSVZFKHRocikgICAgICAgICBEVUtfSFRI UkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfV0VMTEtOT1dOX1NZTUJPTF9UT19QUklN SVRJVkUpCisjZGVmaW5lIERVS19TVFJJRFhfV0VMTEtOT1dOX1NZTUJPTF9IQVNfSU5TVEFOQ0Ug ICAgICAgICAgICAgICAgICAgICAgNzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdc eDgxU3ltYm9sLmhhc0luc3RhbmNlXHhmZicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1dF TExLTk9XTl9TWU1CT0xfSEFTX0lOU1RBTkNFKGhlYXApICAgICAgICAgICBEVUtfSEVBUF9HRVRf U1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1dFTExLTk9XTl9TWU1CT0xfSEFTX0lOU1RBTkNFKQor I2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfV0VMTEtOT1dOX1NZTUJPTF9IQVNfSU5TVEFOQ0Uo dGhyKSAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9XRUxM S05PV05fU1lNQk9MX0hBU19JTlNUQU5DRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9XRUxMS05PV05f U1lNQk9MX1RPX1NUUklOR19UQUcgICAgICAgICAgICAgICAgICAgICA3OCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogJ1x4ODFTeW1ib2wudG9TdHJpbmdUYWdceGZmJyAqLworI2RlZmlu ZSBEVUtfSEVBUF9TVFJJTkdfV0VMTEtOT1dOX1NZTUJPTF9UT19TVFJJTkdfVEFHKGhlYXApICAg ICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfV0VMTEtOT1dOX1NZ TUJPTF9UT19TVFJJTkdfVEFHKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfV0VMTEtOT1dO X1NZTUJPTF9UT19TVFJJTkdfVEFHKHRocikgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkco KHRociksRFVLX1NUUklEWF9XRUxMS05PV05fU1lNQk9MX1RPX1NUUklOR19UQUcpCisjZGVmaW5l IERVS19TVFJJRFhfV0VMTEtOT1dOX1NZTUJPTF9JU19DT05DQVRfU1BSRUFEQUJMRSAgICAgICAg ICAgICAgNzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdceDgxU3ltYm9sLmlzQ29u Y2F0U3ByZWFkYWJsZVx4ZmYnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19XRUxMS05PV05f U1lNQk9MX0lTX0NPTkNBVF9TUFJFQURBQkxFKGhlYXApICAgRFVLX0hFQVBfR0VUX1NUUklORygo aGVhcCksRFVLX1NUUklEWF9XRUxMS05PV05fU1lNQk9MX0lTX0NPTkNBVF9TUFJFQURBQkxFKQor I2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfV0VMTEtOT1dOX1NZTUJPTF9JU19DT05DQVRfU1BS RUFEQUJMRSh0aHIpICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfV0VM TEtOT1dOX1NZTUJPTF9JU19DT05DQVRfU1BSRUFEQUJMRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9T RVRfUFJPVE9UWVBFX09GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3NldFByb3RvdHlwZU9mJyAqLworI2RlZmluZSBE VUtfSEVBUF9TVFJJTkdfU0VUX1BST1RPVFlQRV9PRihoZWFwKSAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfU0VUX1BST1RPVFlQRV9P RikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1NFVF9QUk9UT1RZUEVfT0YodGhyKSAgICAg ICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhf U0VUX1BST1RPVFlQRV9PRikKKyNkZWZpbmUgRFVLX1NUUklEWF9fX1BST1RPX18gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogJ19fcHJvdG9fXycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX19fUFJPVE9f XyhoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5H KChoZWFwKSxEVUtfU1RSSURYX19fUFJPVE9fXykKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5H X19fUFJPVE9fXyh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9H RVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfX19QUk9UT19fKQorI2RlZmluZSBEVUtfU1RSSURY X1RPX1NUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAndG9TdHJpbmcnICovCisjZGVmaW5lIERVS19I RUFQX1NUUklOR19UT19TVFJJTkcoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9UT19TVFJJTkcpCisjZGVmaW5l IERVS19IVEhSRUFEX1NUUklOR19UT19TVFJJTkcodGhyKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1RPX1NUUklORykK KyNkZWZpbmUgRFVLX1NUUklEWF9UT19KU09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA4MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3RvSlNPTicg Ki8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1RPX0pTT04oaGVhcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1RP X0pTT04pCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19UT19KU09OKHRocikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RS SURYX1RPX0pTT04pCisjZGVmaW5lIERVS19TVFJJRFhfVFlQRSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgODQgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qICd0eXBlJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfVFlQRShoZWFwKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERV S19TVFJJRFhfVFlQRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1RZUEUodGhyKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIp LERVS19TVFJJRFhfVFlQRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9EQVRBICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogJ2RhdGEnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19EQVRBKGhlYXApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVh cCksRFVLX1NUUklEWF9EQVRBKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfREFUQSh0aHIp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkco KHRociksRFVLX1NUUklEWF9EQVRBKQorI2RlZmluZSBEVUtfU1RSSURYX0xFTkdUSCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg2ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAnbGVuZ3RoJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfTEVOR1RI KGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJ TkcoKGhlYXApLERVS19TVFJJRFhfTEVOR1RIKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdf TEVOR1RIKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dF VF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9MRU5HVEgpCisjZGVmaW5lIERVS19TVFJJRFhfU0VU ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODcgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICdzZXQnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklO R19TRVQoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBf R0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9TRVQpCisjZGVmaW5lIERVS19IVEhSRUFEX1NU UklOR19TRVQodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJF QURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1NFVCkKKyNkZWZpbmUgRFVLX1NUUklEWF9T VEFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3N0YWNrJyAqLworI2RlZmluZSBEVUtfSEVBUF9T VFJJTkdfU1RBQ0soaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I RUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfU1RBQ0spCisjZGVmaW5lIERVS19IVEhS RUFEX1NUUklOR19TVEFDSyh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1NUQUNLKQorI2RlZmluZSBEVUtf U1RSSURYX1BDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDg5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAncGMnICovCisjZGVmaW5lIERVS19I RUFQX1NUUklOR19QQyhoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9QQykKKyNkZWZpbmUgRFVLX0hU SFJFQURfU1RSSU5HX1BDKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfUEMpCisjZGVmaW5lIERVS19T VFJJRFhfTElORV9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdsaW5lTnVtYmVyJyAqLworI2RlZmlu ZSBEVUtfSEVBUF9TVFJJTkdfTElORV9OVU1CRVIoaGVhcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfTElORV9OVU1CRVIp CisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19MSU5FX05VTUJFUih0aHIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0xJ TkVfTlVNQkVSKQorI2RlZmluZSBEVUtfU1RSSURYX0lOVF9UUkFDRURBVEEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAnXHg4MlRyYWNlZGF0YScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0lOVF9UUkFDRURB VEEoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX0lOVF9UUkFDRURBVEEpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklO R19JTlRfVFJBQ0VEQVRBKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURf R0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lOVF9UUkFDRURBVEEpCisjZGVmaW5lIERVS19T VFJJRFhfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICduYW1lJyAqLworI2RlZmluZSBEVUtf SEVBUF9TVFJJTkdfTkFNRShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfTkFNRSkKKyNkZWZpbmUgRFVL X0hUSFJFQURfU1RSSU5HX05BTUUodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfTkFNRSkKKyNkZWZpbmUg RFVLX1NUUklEWF9GSUxFX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA5MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2ZpbGVOYW1lJyAqLworI2Rl ZmluZSBEVUtfSEVBUF9TVFJJTkdfRklMRV9OQU1FKGhlYXApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfRklMRV9OQU1F KQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfRklMRV9OQU1FKHRocikgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9G SUxFX05BTUUpCisjZGVmaW5lIERVS19TVFJJRFhfTENfUE9JTlRFUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICdwb2ludGVyJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfTENfUE9JTlRFUihoZWFwKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERV S19TVFJJRFhfTENfUE9JTlRFUikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0xDX1BPSU5U RVIodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5H KCh0aHIpLERVS19TVFJJRFhfTENfUE9JTlRFUikKKyNkZWZpbmUgRFVLX1NUUklEWF9JTlRfVEFS R0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogJ1x4ODJUYXJnZXQnICovCisjZGVmaW5lIERVS19IRUFQX1NU UklOR19JTlRfVEFSR0VUKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hF QVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9JTlRfVEFSR0VUKQorI2RlZmluZSBEVUtf SFRIUkVBRF9TVFJJTkdfSU5UX1RBUkdFVCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9JTlRfVEFSR0VUKQorI2Rl ZmluZSBEVUtfU1RSSURYX0lOVF9ORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnXHg4Mk5leHQnICov CisjZGVmaW5lIERVS19IRUFQX1NUUklOR19JTlRfTkVYVChoZWFwKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9JTlRf TkVYVCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0lOVF9ORVhUKHRocikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJ RFhfSU5UX05FWFQpCisjZGVmaW5lIERVS19TVFJJRFhfSU5UX0JZVEVDT0RFICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOTcgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qICdceDgyQnl0ZWNvZGUnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19JTlRfQllURUNP REUoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygo aGVhcCksRFVLX1NUUklEWF9JTlRfQllURUNPREUpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklO R19JTlRfQllURUNPREUodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURf R0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lOVF9CWVRFQ09ERSkKKyNkZWZpbmUgRFVLX1NU UklEWF9JTlRfRk9STUFMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5 OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ1x4ODJGb3JtYWxzJyAqLworI2RlZmlu ZSBEVUtfSEVBUF9TVFJJTkdfSU5UX0ZPUk1BTFMoaGVhcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfSU5UX0ZPUk1BTFMp CisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTlRfRk9STUFMUyh0aHIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lO VF9GT1JNQUxTKQorI2RlZmluZSBEVUtfU1RSSURYX0lOVF9WQVJNQVAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAnXHg4MlZhcm1hcCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0lOVF9WQVJNQVAoaGVh cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFw KSxEVUtfU1RSSURYX0lOVF9WQVJNQVApCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTlRf VkFSTUFQKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NU UklORygodGhyKSxEVUtfU1RSSURYX0lOVF9WQVJNQVApCisjZGVmaW5lIERVS19TVFJJRFhfSU5U X1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICdceDgyU291cmNlJyAqLworI2RlZmluZSBEVUtfSEVB UF9TVFJJTkdfSU5UX1NPVVJDRShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfSU5UX1NPVVJDRSkKKyNkZWZpbmUg RFVLX0hUSFJFQURfU1RSSU5HX0lOVF9TT1VSQ0UodGhyKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfSU5UX1NPVVJDRSkK KyNkZWZpbmUgRFVLX1NUUklEWF9JTlRfUEMyTElORSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ1x4ODJQYzJs aW5lJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSU5UX1BDMkxJTkUoaGVhcCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJ RFhfSU5UX1BDMkxJTkUpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTlRfUEMyTElORSh0 aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhy KSxEVUtfU1RSSURYX0lOVF9QQzJMSU5FKQorI2RlZmluZSBEVUtfU1RSSURYX0lOVF9NQVAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAnXHg4Mk1hcCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0lO VF9NQVAoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRf U1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0lOVF9NQVApCisjZGVmaW5lIERVS19IVEhSRUFEX1NU UklOR19JTlRfTUFQKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJF QURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lOVF9NQVApCisjZGVmaW5lIERVS19TVFJJ RFhfSU5UX1ZBUkVOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAz ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdceDgyVmFyZW52JyAqLworI2RlZmluZSBE VUtfSEVBUF9TVFJJTkdfSU5UX1ZBUkVOVihoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfSU5UX1ZBUkVOVikKKyNk ZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0lOVF9WQVJFTlYodGhyKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfSU5UX1ZB UkVOVikKKyNkZWZpbmUgRFVLX1NUUklEWF9JTlRfRklOQUxJWkVSICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ1x4 ODJGaW5hbGl6ZXInICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19JTlRfRklOQUxJWkVSKGhl YXApICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCks RFVLX1NUUklEWF9JTlRfRklOQUxJWkVSKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfSU5U X0ZJTkFMSVpFUih0aHIpICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9T VFJJTkcoKHRociksRFVLX1NUUklEWF9JTlRfRklOQUxJWkVSKQorI2RlZmluZSBEVUtfU1RSSURY X0lOVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnXHg4MlZhbHVlJyAqLworI2RlZmluZSBEVUtf SEVBUF9TVFJJTkdfSU5UX1ZBTFVFKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfSU5UX1ZBTFVFKQorI2RlZmlu ZSBEVUtfSFRIUkVBRF9TVFJJTkdfSU5UX1ZBTFVFKHRocikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9JTlRfVkFMVUUp CisjZGVmaW5lIERVS19TVFJJRFhfQ09NUElMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdjb21waWxl JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfQ09NUElMRShoZWFwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhf Q09NUElMRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0NPTVBJTEUodGhyKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19T VFJJRFhfQ09NUElMRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9JTlBVVCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogJ2lucHV0JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSU5QVVQoaGVhcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXAp LERVS19TVFJJRFhfSU5QVVQpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTlBVVCh0aHIp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygo dGhyKSxEVUtfU1RSSURYX0lOUFVUKQorI2RlZmluZSBEVUtfU1RSSURYX0VSUl9DUkVBVEUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAnZXJyQ3JlYXRlJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfRVJS X0NSRUFURShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9T VFJJTkcoKGhlYXApLERVS19TVFJJRFhfRVJSX0NSRUFURSkKKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RSSU5HX0VSUl9DUkVBVEUodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRI UkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfRVJSX0NSRUFURSkKKyNkZWZpbmUgRFVL X1NUUklEWF9FUlJfVEhST1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2VyclRocm93JyAqLworI2RlZmlu ZSBEVUtfSEVBUF9TVFJJTkdfRVJSX1RIUk9XKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfRVJSX1RIUk9XKQor I2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfRVJSX1RIUk9XKHRocikgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9FUlJf VEhST1cpCisjZGVmaW5lIERVS19TVFJJRFhfRU5WICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdl bnYnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19FTlYoaGVhcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklE WF9FTlYpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19FTlYodGhyKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RS SURYX0VOVikKKyNkZWZpbmUgRFVLX1NUUklEWF9IRVggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog J2hleCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0hFWChoZWFwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RS SURYX0hFWCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0hFWCh0aHIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19T VFJJRFhfSEVYKQorI2RlZmluZSBEVUtfU1RSSURYX0JBU0U2NCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAnYmFzZTY0JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfQkFTRTY0KGhlYXApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERV S19TVFJJRFhfQkFTRTY0KQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfQkFTRTY0KHRocikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRo ciksRFVLX1NUUklEWF9CQVNFNjQpCisjZGVmaW5lIERVS19TVFJJRFhfSlggICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICdqeCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0pYKGhlYXApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX0pYKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfSlgodGhyKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkco KHRociksRFVLX1NUUklEWF9KWCkKKyNkZWZpbmUgRFVLX1NUUklEWF9KQyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogJ2pjJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSkMoaGVhcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhl YXApLERVS19TVFJJRFhfSkMpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19KQyh0aHIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygo dGhyKSxEVUtfU1RSSURYX0pDKQorI2RlZmluZSBEVUtfU1RSSURYX0pTT05fRVhUX1VOREVGSU5F RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAneyJfdW5kZWYiOnRydWV9JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdf SlNPTl9FWFRfVU5ERUZJTkVEKGhlYXApICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dF VF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfSlNPTl9FWFRfVU5ERUZJTkVEKQorI2RlZmluZSBE VUtfSFRIUkVBRF9TVFJJTkdfSlNPTl9FWFRfVU5ERUZJTkVEKHRocikgICAgICAgICAgICAgICAg ICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9KU09OX0VYVF9VTkRF RklORUQpCisjZGVmaW5lIERVS19TVFJJRFhfSlNPTl9FWFRfTkFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd7 Il9uYW4iOnRydWV9JyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfSlNPTl9FWFRfTkFOKGhl YXApICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXAp LERVS19TVFJJRFhfSlNPTl9FWFRfTkFOKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfSlNP Tl9FWFRfTkFOKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9T VFJJTkcoKHRociksRFVLX1NUUklEWF9KU09OX0VYVF9OQU4pCisjZGVmaW5lIERVS19TVFJJRFhf SlNPTl9FWFRfUE9TSU5GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE3ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd7Il9pbmYiOnRydWV9JyAqLworI2RlZmluZSBE VUtfSEVBUF9TVFJJTkdfSlNPTl9FWFRfUE9TSU5GKGhlYXApICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfSlNPTl9FWFRfUE9TSU5G KQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfSlNPTl9FWFRfUE9TSU5GKHRocikgICAgICAg ICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9K U09OX0VYVF9QT1NJTkYpCisjZGVmaW5lIERVS19TVFJJRFhfSlNPTl9FWFRfTkVHSU5GICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICd7Il9uaW5mIjp0cnVlfScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0pTT05f RVhUX05FR0lORihoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RS SU5HKChoZWFwKSxEVUtfU1RSSURYX0pTT05fRVhUX05FR0lORikKKyNkZWZpbmUgRFVLX0hUSFJF QURfU1RSSU5HX0pTT05fRVhUX05FR0lORih0aHIpICAgICAgICAgICAgICAgICAgICAgICBEVUtf SFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfSlNPTl9FWFRfTkVHSU5GKQorI2Rl ZmluZSBEVUtfU1RSSURYX0pTT05fRVhUX0ZVTkNUSU9OMSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDExOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAneyJfZnVuYyI6dHJ1 ZX0nICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19KU09OX0VYVF9GVU5DVElPTjEoaGVhcCkg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklE WF9KU09OX0VYVF9GVU5DVElPTjEpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19KU09OX0VY VF9GVU5DVElPTjEodGhyKSAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklO RygodGhyKSxEVUtfU1RSSURYX0pTT05fRVhUX0ZVTkNUSU9OMSkKKyNkZWZpbmUgRFVLX1NUUklE WF9KU09OX0VYVF9GVU5DVElPTjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3tfZnVuYzp0cnVlfScgKi8KKyNkZWZpbmUg RFVLX0hFQVBfU1RSSU5HX0pTT05fRVhUX0ZVTkNUSU9OMihoZWFwKSAgICAgICAgICAgICAgICAg ICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0pTT05fRVhUX0ZVTkNU SU9OMikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0pTT05fRVhUX0ZVTkNUSU9OMih0aHIp ICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJ RFhfSlNPTl9FWFRfRlVOQ1RJT04yKQorI2RlZmluZSBEVUtfU1RSSURYX0JSRUFLICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAnYnJlYWsnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19CUkVBSyho ZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklO RygoaGVhcCksRFVLX1NUUklEWF9CUkVBSykKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0JS RUFLKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRf U1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQlJFQUspCisjZGVmaW5lIERVS19TVFJJRFhfQ0FTRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIyICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICdjYXNlJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdf Q0FTRShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dF VF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfQ0FTRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RS SU5HX0NBU0UodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVB RF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQ0FTRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9D QVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2NhdGNoJyAqLworI2RlZmluZSBEVUtfSEVBUF9T VFJJTkdfQ0FUQ0goaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I RUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfQ0FUQ0gpCisjZGVmaW5lIERVS19IVEhS RUFEX1NUUklOR19DQVRDSCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0NBVENIKQorI2RlZmluZSBEVUtf U1RSSURYX0NPTlRJTlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnY29udGludWUnICovCisjZGVmaW5l IERVS19IRUFQX1NUUklOR19DT05USU5VRShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9DT05USU5VRSkKKyNk ZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0NPTlRJTlVFKHRocikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfQ09OVElO VUUpCisjZGVmaW5lIERVS19TVFJJRFhfREVCVUdHRVIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdkZWJ1 Z2dlcicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0RFQlVHR0VSKGhlYXApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RS SURYX0RFQlVHR0VSKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfREVCVUdHRVIodGhyKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociks RFVLX1NUUklEWF9ERUJVR0dFUikKKyNkZWZpbmUgRFVLX1NUUklEWF9ERUZBVUxUICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogJ2RlZmF1bHQnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19ERUZBVUxU KGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklO RygoaGVhcCksRFVLX1NUUklEWF9ERUZBVUxUKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdf REVGQVVMVCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dF VF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9ERUZBVUxUKQorI2RlZmluZSBEVUtfU1RSSURYX0RF TEVURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAnZGVsZXRlJyAqLworI2RlZmluZSBEVUtfSEVBUF9T VFJJTkdfREVMRVRFKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I RUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfREVMRVRFKQorI2RlZmluZSBEVUtfSFRI UkVBRF9TVFJJTkdfREVMRVRFKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9ERUxFVEUpCisjZGVmaW5lIERV S19TVFJJRFhfRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdkbycgKi8KKyNkZWZpbmUgRFVL X0hFQVBfU1RSSU5HX0RPKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0RPKQorI2RlZmluZSBEVUtf SFRIUkVBRF9TVFJJTkdfRE8odGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9ETykKKyNkZWZpbmUgRFVL X1NUUklEWF9FTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2Vsc2UnICovCisjZGVmaW5lIERV S19IRUFQX1NUUklOR19FTFNFKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9FTFNFKQorI2RlZmluZSBE VUtfSFRIUkVBRF9TVFJJTkdfRUxTRSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9FTFNFKQorI2RlZmlu ZSBEVUtfU1RSSURYX0ZJTkFMTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnZmluYWxseScgKi8KKyNk ZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0ZJTkFMTFkoaGVhcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0ZJTkFMTFkp CisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19GSU5BTExZKHRocikgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0ZJ TkFMTFkpCisjZGVmaW5lIERVS19TVFJJRFhfRk9SICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdm b3InICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19GT1IoaGVhcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklE WF9GT1IpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19GT1IodGhyKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RS SURYX0ZPUikKKyNkZWZpbmUgRFVLX1NUUklEWF9MQ19GVU5DVElPTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog J2Z1bmN0aW9uJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfTENfRlVOQ1RJT04oaGVhcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERV S19TVFJJRFhfTENfRlVOQ1RJT04pCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19MQ19GVU5D VElPTih0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklO RygodGhyKSxEVUtfU1RSSURYX0xDX0ZVTkNUSU9OKQorI2RlZmluZSBEVUtfU1RSSURYX0lGICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAnaWYnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19J RihoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VU X1NUUklORygoaGVhcCksRFVLX1NUUklEWF9JRikKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5H X0lGKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9H RVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfSUYpCisjZGVmaW5lIERVS19TVFJJRFhfSU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICdpbicgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0lO KGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRf U1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0lOKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdf SU4odGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dF VF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9JTikKKyNkZWZpbmUgRFVLX1NUUklEWF9JTlNUQU5D RU9GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogJ2luc3RhbmNlb2YnICovCisjZGVmaW5lIERVS19IRUFQX1NU UklOR19JTlNUQU5DRU9GKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hF QVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9JTlNUQU5DRU9GKQorI2RlZmluZSBEVUtf SFRIUkVBRF9TVFJJTkdfSU5TVEFOQ0VPRih0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9JTlNUQU5DRU9GKQorI2Rl ZmluZSBEVUtfU1RSSURYX05FVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEzNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnbmV3JyAqLworI2Rl ZmluZSBEVUtfSEVBUF9TVFJJTkdfTkVXKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfTkVXKQorI2Rl ZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfTkVXKHRocikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9ORVcpCisj ZGVmaW5lIERVS19TVFJJRFhfUkVUVVJOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdyZXR1cm4nICov CisjZGVmaW5lIERVS19IRUFQX1NUUklOR19SRVRVUk4oaGVhcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9SRVRV Uk4pCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19SRVRVUk4odGhyKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURY X1JFVFVSTikKKyNkZWZpbmUgRFVLX1NUUklEWF9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMzggICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog J3N3aXRjaCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1NXSVRDSChoZWFwKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtf U1RSSURYX1NXSVRDSCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1NXSVRDSCh0aHIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIp LERVS19TVFJJRFhfU1dJVENIKQorI2RlZmluZSBEVUtfU1RSSURYX1RISVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAndGhpcycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1RISVMoaGVhcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKCho ZWFwKSxEVUtfU1RSSURYX1RISVMpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19USElTKHRo cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklO RygodGhyKSxEVUtfU1RSSURYX1RISVMpCisjZGVmaW5lIERVS19TVFJJRFhfVEhST1cgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQwICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICd0aHJvdycgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1RIUk9X KGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RS SU5HKChoZWFwKSxEVUtfU1RSSURYX1RIUk9XKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdf VEhST1codGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dF VF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9USFJPVykKKyNkZWZpbmUgRFVLX1NUUklEWF9UUlkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogJ3RyeScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5H X1RSWShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9H RVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1RSWSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RS SU5HX1RSWSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVB RF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfVFJZKQorI2RlZmluZSBEVUtfU1RSSURYX1RZ UEVPRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAndHlwZW9mJyAqLworI2RlZmluZSBEVUtfSEVBUF9T VFJJTkdfVFlQRU9GKGhlYXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I RUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfVFlQRU9GKQorI2RlZmluZSBEVUtfSFRI UkVBRF9TVFJJTkdfVFlQRU9GKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NUUklEWF9UWVBFT0YpCisjZGVmaW5lIERV S19TVFJJRFhfVkFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd2YXInICovCisjZGVmaW5lIERV S19IRUFQX1NUUklOR19WQVIoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9WQVIpCisjZGVmaW5lIERV S19IVEhSRUFEX1NUUklOR19WQVIodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1ZBUikKKyNkZWZpbmUg RFVLX1NUUklEWF9DT05TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxNDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ2NvbnN0JyAqLworI2RlZmlu ZSBEVUtfSEVBUF9TVFJJTkdfQ09OU1QoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfQ09OU1QpCisjZGVm aW5lIERVS19IVEhSRUFEX1NUUklOR19DT05TVCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0NPTlNUKQor I2RlZmluZSBEVUtfU1RSSURYX1ZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDE0NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAndm9pZCcgKi8K KyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1ZPSUQoaGVhcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1ZPSUQp CisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19WT0lEKHRocikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1ZP SUQpCisjZGVmaW5lIERVS19TVFJJRFhfV0hJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd3aGls ZScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1dISUxFKGhlYXApICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURY X1dISUxFKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfV0hJTEUodGhyKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociksRFVLX1NU UklEWF9XSElMRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9XSVRIICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxNDcgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogJ3dpdGgnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19XSVRIKGhlYXApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVL X1NUUklEWF9XSVRIKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfV0lUSCh0aHIpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9TVFJJTkcoKHRociks RFVLX1NUUklEWF9XSVRIKQorI2RlZmluZSBEVUtfU1RSSURYX0NMQVNTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAnY2xhc3MnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19DTEFTUyhoZWFwKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVh cCksRFVLX1NUUklEWF9DTEFTUykKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0NMQVNTKHRo cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5H KCh0aHIpLERVS19TVFJJRFhfQ0xBU1MpCisjZGVmaW5lIERVS19TVFJJRFhfRU5VTSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ5ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICdlbnVtJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfRU5VTSho ZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJ TkcoKGhlYXApLERVS19TVFJJRFhfRU5VTSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0VO VU0odGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRf U1RSSU5HKCh0aHIpLERVS19TVFJJRFhfRU5VTSkKKyNkZWZpbmUgRFVLX1NUUklEWF9FWFBPUlQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogJ2V4cG9ydCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5H X0VYUE9SVChoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9H RVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0VYUE9SVCkKKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RSSU5HX0VYUE9SVCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRI UkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfRVhQT1JUKQorI2RlZmluZSBEVUtfU1RS SURYX0VYVEVORFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1 MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnZXh0ZW5kcycgKi8KKyNkZWZpbmUgRFVL X0hFQVBfU1RSSU5HX0VYVEVORFMoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0VYVEVORFMpCisjZGVmaW5l IERVS19IVEhSRUFEX1NUUklOR19FWFRFTkRTKHRocikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0VYVEVORFMpCisj ZGVmaW5lIERVS19TVFJJRFhfSU1QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTUyICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdpbXBvcnQnICov CisjZGVmaW5lIERVS19IRUFQX1NUUklOR19JTVBPUlQoaGVhcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9JTVBP UlQpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTVBPUlQodGhyKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURY X0lNUE9SVCkKKyNkZWZpbmUgRFVLX1NUUklEWF9TVVBFUiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxNTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog J3N1cGVyJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfU1VQRVIoaGVhcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19T VFJJRFhfU1VQRVIpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19TVVBFUih0aHIpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxE VUtfU1RSSURYX1NVUEVSKQorI2RlZmluZSBEVUtfU1RSSURYX0xDX05VTEwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAnbnVsbCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0xDX05VTEwoaGVhcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFw KSxEVUtfU1RSSURYX0xDX05VTEwpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19MQ19OVUxM KHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklO RygodGhyKSxEVUtfU1RSSURYX0xDX05VTEwpCisjZGVmaW5lIERVS19TVFJJRFhfVFJVRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU1ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICd0cnVlJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfVFJV RShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9T VFJJTkcoKGhlYXApLERVS19TVFJJRFhfVFJVRSkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5H X1RSVUUodGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9H RVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfVFJVRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9GQUxT RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogJ2ZhbHNlJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJ TkdfRkFMU0UoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQ X0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfRkFMU0UpCisjZGVmaW5lIERVS19IVEhSRUFE X1NUUklOR19GQUxTRSh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hU SFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0ZBTFNFKQorI2RlZmluZSBEVUtfU1RS SURYX0lNUExFTUVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1 NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnaW1wbGVtZW50cycgKi8KKyNkZWZpbmUg RFVLX0hFQVBfU1RSSU5HX0lNUExFTUVOVFMoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX0lNUExFTUVOVFMpCisj ZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTVBMRU1FTlRTKHRocikgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX0lNUExF TUVOVFMpCisjZGVmaW5lIERVS19TVFJJRFhfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdp bnRlcmZhY2UnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklOR19JTlRFUkZBQ0UoaGVhcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBfR0VUX1NUUklORygoaGVhcCksRFVL X1NUUklEWF9JTlRFUkZBQ0UpCisjZGVmaW5lIERVS19IVEhSRUFEX1NUUklOR19JTlRFUkZBQ0Uo dGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygo dGhyKSxEVUtfU1RSSURYX0lOVEVSRkFDRSkKKyNkZWZpbmUgRFVLX1NUUklEWF9MRVQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogJ2xldCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX0xFVCho ZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RS SU5HKChoZWFwKSxEVUtfU1RSSURYX0xFVCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX0xF VCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRf U1RSSU5HKCh0aHIpLERVS19TVFJJRFhfTEVUKQorI2RlZmluZSBEVUtfU1RSSURYX1BBQ0tBR0Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAncGFja2FnZScgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5H X1BBQ0tBR0UoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9H RVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURYX1BBQ0tBR0UpCisjZGVmaW5lIERVS19IVEhSRUFE X1NUUklOR19QQUNLQUdFKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hU SFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1BBQ0tBR0UpCisjZGVmaW5lIERVS19T VFJJRFhfUFJJVkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTYxICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICdwcml2YXRlJyAqLworI2RlZmluZSBE VUtfSEVBUF9TVFJJTkdfUFJJVkFURShoZWFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfUFJJVkFURSkKKyNkZWZp bmUgRFVLX0hUSFJFQURfU1RSSU5HX1BSSVZBVEUodGhyKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERVS19TVFJJRFhfUFJJVkFURSkK KyNkZWZpbmUgRFVLX1NUUklEWF9QUk9URUNURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3Byb3RlY3Rl ZCcgKi8KKyNkZWZpbmUgRFVLX0hFQVBfU1RSSU5HX1BST1RFQ1RFRChoZWFwKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUF9HRVRfU1RSSU5HKChoZWFwKSxEVUtfU1RSSURY X1BST1RFQ1RFRCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfU1RSSU5HX1BST1RFQ1RFRCh0aHIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKCh0aHIpLERV S19TVFJJRFhfUFJPVEVDVEVEKQorI2RlZmluZSBEVUtfU1RSSURYX1BVQkxJQyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAncHVibGljJyAqLworI2RlZmluZSBEVUtfSEVBUF9TVFJJTkdfUFVCTElDKGhl YXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQX0dFVF9TVFJJTkco KGhlYXApLERVS19TVFJJRFhfUFVCTElDKQorI2RlZmluZSBEVUtfSFRIUkVBRF9TVFJJTkdfUFVC TElDKHRocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IVEhSRUFEX0dFVF9T VFJJTkcoKHRociksRFVLX1NUUklEWF9QVUJMSUMpCisjZGVmaW5lIERVS19TVFJJRFhfU1RBVElD ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICdzdGF0aWMnICovCisjZGVmaW5lIERVS19IRUFQX1NUUklO R19TVEFUSUMoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBf R0VUX1NUUklORygoaGVhcCksRFVLX1NUUklEWF9TVEFUSUMpCisjZGVmaW5lIERVS19IVEhSRUFE X1NUUklOR19TVEFUSUModGhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hU SFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1NUQVRJQykKKyNkZWZpbmUgRFVLX1NU UklEWF9ZSUVMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJ3lpZWxkJyAqLworI2RlZmluZSBEVUtf SEVBUF9TVFJJTkdfWUlFTEQoaGVhcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IRUFQX0dFVF9TVFJJTkcoKGhlYXApLERVS19TVFJJRFhfWUlFTEQpCisjZGVmaW5lIERV S19IVEhSRUFEX1NUUklOR19ZSUVMRCh0aHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hUSFJFQURfR0VUX1NUUklORygodGhyKSxEVUtfU1RSSURYX1lJRUxEKQorCisjZGVm aW5lIERVS19IRUFQX05VTV9TVFJJTkdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTY2CisjZGVmaW5lIERVS19TVFJJRFhfU1RBUlRfUkVTRVJWRUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIxCisjZGVmaW5lIERVS19TVFJJRFhfU1RBUlRf U1RSSUNUX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU3CisjZGVmaW5l IERVS19TVFJJRFhfRU5EX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4Y2x1c2l2ZSBlbmRwb2lu dCAqLworCisvKiBUbyBjb252ZXJ0IGEgaGVhcCBzdHJpZHggdG8gYSB0b2tlbiBudW1iZXIsIHN1 YnRyYWN0CisgKiBEVUtfU1RSSURYX1NUQVJUX1JFU0VSVkVEIGFuZCBhZGQgRFVLX1RPS19TVEFS VF9SRVNFUlZFRC4KKyAqLworI2lmICFkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKK0RVS19JTlRF Uk5BTF9ERUNMIGNvbnN0IGR1a191aW50OF90IGR1a19zdHJpbmdzX2RhdGFbOTY3XTsKKyNlbmRp ZiAgLyogIURVS19TSU5HTEVfRklMRSAqLworI2RlZmluZSBEVUtfU1RSREFUQV9NQVhfU1RSTEVO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIERVS19T VFJEQVRBX0RBVEFfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OTY3CisjZW5kaWYgIC8qIERVS19VU0VfUk9NX1NUUklOR1MgKi8KKworI2lmIGRlZmluZWQoRFVL X1VTRV9ST01fT0JKRUNUUykKKyNlcnJvciBSQU0gc3VwcG9ydCBub3QgZW5hYmxlZCwgcmVydW4g Y29uZmlndXJlLnB5IHdpdGggLS1yYW0tc3VwcG9ydAorI2Vsc2UgIC8qIERVS19VU0VfUk9NX09C SkVDVFMgKi8KK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2NvbnN0 cnVjdG9yKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1 a19iaV9mdW5jdGlvbl9jb25zdHJ1Y3RvcihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZnVuY3Rpb25fcHJvdG90eXBlKGR1a19jb250ZXh0ICpj dHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9hcnJheV9jb25zdHJ1Y3Rv cihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlf c3RyaW5nX2NvbnN0cnVjdG9yKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX3JldF90IGR1a19iaV9ib29sZWFuX2NvbnN0cnVjdG9yKGR1a19jb250ZXh0ICpjdHgpOwor RFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9udW1iZXJfY29uc3RydWN0b3IoZHVr X2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVf Y29uc3RydWN0b3IoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX3JlZ2V4cF9jb25zdHJ1Y3RvcihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZXJyb3JfY29uc3RydWN0b3Jfc2hhcmVkKGR1a19j b250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90eXBlX2Vy cm9yX3Rocm93ZXIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX2dsb2JhbF9vYmplY3RfcGFyc2VfaW50KGR1a19jb250ZXh0ICpjdHgpOworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9nbG9iYWxfb2JqZWN0X3BhcnNlX2Zsb2F0 KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90 aHJlYWRfY29uc3RydWN0b3IoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX3BvaW50ZXJfY29uc3RydWN0b3IoZHVrX2NvbnRleHQgKmN0eCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3Byb3h5X2NvbnN0cnVjdG9yKGR1a19j b250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9hcnJheWJ1 ZmZlcl9jb25zdHJ1Y3RvcihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19yZXRfdCBkdWtfYmlfZGF0YXZpZXdfY29uc3RydWN0b3IoZHVrX2NvbnRleHQgKmN0eCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3R5cGVkYXJyYXlfY29uc3RydWN0b3Io ZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX25v ZGVqc19idWZmZXJfY29uc3RydWN0b3IoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxf REVDTCBkdWtfcmV0X3QgZHVrX2JpX3RleHRlbmNvZGVyX2NvbnN0cnVjdG9yKGR1a19jb250ZXh0 ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90ZXh0ZGVjb2Rlcl9j b25zdHJ1Y3RvcihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRf dCBkdWtfYmlfZ2xvYmFsX29iamVjdF9ldmFsKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9nbG9iYWxfb2JqZWN0X2lzX25hbihkdWtfY29udGV4 dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZ2xvYmFsX29iamVj dF9pc19maW5pdGUoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX2dsb2JhbF9vYmplY3RfZGVjb2RlX3VyaShkdWtfY29udGV4dCAqY3R4KTsKK0RV S19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZ2xvYmFsX29iamVjdF9kZWNvZGVfdXJp X2NvbXBvbmVudChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRf dCBkdWtfYmlfZ2xvYmFsX29iamVjdF9lbmNvZGVfdXJpKGR1a19jb250ZXh0ICpjdHgpOworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9nbG9iYWxfb2JqZWN0X2VuY29kZV91cmlf Y29tcG9uZW50KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90 IGR1a19iaV9nbG9iYWxfb2JqZWN0X2VzY2FwZShkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZ2xvYmFsX29iamVjdF91bmVzY2FwZShkdWtfY29u dGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2dl dHByb3RvdHlwZV9zaGFyZWQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX29iamVjdF9zZXRwcm90b3R5cGVfc2hhcmVkKGR1a19jb250ZXh0ICpj dHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9vYmplY3RfY29uc3RydWN0 b3JfZ2V0X293bl9wcm9wZXJ0eV9kZXNjcmlwdG9yKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9vYmplY3RfY29uc3RydWN0b3Jfa2V5c19zaGFy ZWQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2Jp X29iamVjdF9jb25zdHJ1Y3Rvcl9hc3NpZ24oZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJO QUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9jcmVhdGUoZHVrX2Nv bnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9j b25zdHJ1Y3Rvcl9kZWZpbmVfcHJvcGVydHkoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJO QUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9kZWZpbmVfcHJvcGVy dGllcyhkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtf Ymlfb2JqZWN0X2NvbnN0cnVjdG9yX3NlYWxfZnJlZXplX3NoYXJlZChkdWtfY29udGV4dCAqY3R4 KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9y X3ByZXZlbnRfZXh0ZW5zaW9ucyhkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX2lzX3NlYWxlZF9mcm96ZW5fc2hh cmVkKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19i aV9vYmplY3RfY29uc3RydWN0b3JfaXNfZXh0ZW5zaWJsZShkdWtfY29udGV4dCAqY3R4KTsKK0RV S19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX2lzKGR1 a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9vYmpl Y3RfcHJvdG90eXBlX3RvX3N0cmluZyhkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9E RUNMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X3Byb3RvdHlwZV90b19sb2NhbGVfc3RyaW5nKGR1 a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9vYmpl Y3RfcHJvdG90eXBlX3ZhbHVlX29mKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX3JldF90IGR1a19iaV9vYmplY3RfcHJvdG90eXBlX2hhc19vd25fcHJvcGVydHkoZHVr X2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX29iamVj dF9wcm90b3R5cGVfaXNfcHJvdG90eXBlX29mKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9vYmplY3RfcHJvdG90eXBlX3Byb3BlcnR5X2lzX2Vu dW1lcmFibGUoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3Qg ZHVrX2JpX29iamVjdF9wcm90b3R5cGVfZGVmaW5lYWNjZXNzb3IoZHVrX2NvbnRleHQgKmN0eCk7 CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9wcm90b3R5cGVfbG9v a3VwYWNjZXNzb3IoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX2Z1bmN0aW9uX3Byb3RvdHlwZV90b19zdHJpbmcoZHVrX2NvbnRleHQgKmN0eCk7 CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2Z1bmN0aW9uX3Byb3RvdHlwZV9h cHBseShkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtf YmlfZnVuY3Rpb25fcHJvdG90eXBlX2NhbGwoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJO QUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2Z1bmN0aW9uX3Byb3RvdHlwZV9iaW5kKGR1a19jb250 ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9uYXRpdmVfZnVu Y3Rpb25fbGVuZ3RoKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3Jl dF90IGR1a19iaV9uYXRpdmVfZnVuY3Rpb25fbmFtZShkdWtfY29udGV4dCAqY3R4KTsKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlfY29uc3RydWN0b3JfaXNfYXJyYXko ZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2Fy cmF5X3Byb3RvdHlwZV90b19zdHJpbmcoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxf REVDTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9qb2luX3NoYXJlZChkdWtfY29u dGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlfcHJv dG90eXBlX2NvbmNhdChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19y ZXRfdCBkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3BvcChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3B1c2goZHVrX2Nv bnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3By b3RvdHlwZV9yZXZlcnNlKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVr X3JldF90IGR1a19iaV9hcnJheV9wcm90b3R5cGVfc2hpZnQoZHVrX2NvbnRleHQgKmN0eCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9zbGljZShk dWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfYXJy YXlfcHJvdG90eXBlX3NvcnQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9zcGxpY2UoZHVrX2NvbnRleHQgKmN0eCk7 CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV91bnNo aWZ0KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19i aV9hcnJheV9wcm90b3R5cGVfaW5kZXhvZl9zaGFyZWQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtf SU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9pdGVyX3NoYXJl ZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlf YXJyYXlfcHJvdG90eXBlX3JlZHVjZV9zaGFyZWQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3N0cmluZ19jb25zdHJ1Y3Rvcl9mcm9tX2NoYXJf Y29kZShkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtf Ymlfc3RyaW5nX2NvbnN0cnVjdG9yX2Zyb21fY29kZV9wb2ludChkdWtfY29udGV4dCAqY3R4KTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV90b19z dHJpbmcoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVr X2JpX3N0cmluZ19wcm90b3R5cGVfY2hhcl9hdChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9jaGFyX2NvZGVfYXQo ZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3N0 cmluZ19wcm90b3R5cGVfY29uY2F0KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX2luZGV4b2Zfc2hhcmVkKGR1a19j b250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9zdHJpbmdf cHJvdG90eXBlX2xvY2FsZV9jb21wYXJlKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX21hdGNoKGR1a19jb250ZXh0 ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfcHJvdG90 eXBlX3JlcGxhY2UoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfc2VhcmNoKGR1a19jb250ZXh0ICpjdHgpOworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX3NsaWNlKGR1 a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9zdHJp bmdfcHJvdG90eXBlX3NwbGl0KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX3JldF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX3N1YnN0cmluZyhkdWtfY29udGV4dCAq Y3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlw ZV9jYXNlY29udl9zaGFyZWQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfdHJpbShkdWtfY29udGV4dCAqY3R4KTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9yZXBl YXQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2Jp X3N0cmluZ19wcm90b3R5cGVfc3RhcnRzd2l0aF9lbmRzd2l0aChkdWtfY29udGV4dCAqY3R4KTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9pbmNs dWRlcyhkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtf Ymlfc3RyaW5nX3Byb3RvdHlwZV9zdWJzdHIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJO QUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2Jvb2xlYW5fcHJvdG90eXBlX3Rvc3RyaW5nX3NoYXJl ZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlf bnVtYmVyX2NoZWNrX3NoYXJlZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19yZXRfdCBkdWtfYmlfbnVtYmVyX3Byb3RvdHlwZV90b19zdHJpbmcoZHVrX2NvbnRleHQg KmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX251bWJlcl9wcm90b3R5 cGVfdG9fbG9jYWxlX3N0cmluZyhkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19yZXRfdCBkdWtfYmlfbnVtYmVyX3Byb3RvdHlwZV92YWx1ZV9vZihkdWtfY29udGV4dCAq Y3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfbnVtYmVyX3Byb3RvdHlw ZV90b19maXhlZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRf dCBkdWtfYmlfbnVtYmVyX3Byb3RvdHlwZV90b19leHBvbmVudGlhbChkdWtfY29udGV4dCAqY3R4 KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfbnVtYmVyX3Byb3RvdHlwZV90 b19wcmVjaXNpb24oZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX2RhdGVfY29uc3RydWN0b3JfcGFyc2UoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtf SU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVfY29uc3RydWN0b3JfdXRjKGR1a19j b250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9kYXRlX2Nv bnN0cnVjdG9yX25vdyhkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19y ZXRfdCBkdWtfYmlfZGF0ZV9wcm90b3R5cGVfdG9zdHJpbmdfc2hhcmVkKGR1a19jb250ZXh0ICpj dHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9kYXRlX3Byb3RvdHlwZV90 b19qc29uKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1 a19iaV9kYXRlX3Byb3RvdHlwZV92YWx1ZV9vZihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZGF0ZV9wcm90b3R5cGVfZ2V0X3NoYXJlZChkdWtf Y29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZGF0ZV9w cm90b3R5cGVfZ2V0X3RpbWV6b25lX29mZnNldChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZGF0ZV9wcm90b3R5cGVfc2V0X3RpbWUoZHVrX2Nv bnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVfcHJv dG90eXBlX3NldF9zaGFyZWQoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX3JlZ2V4cF9wcm90b3R5cGVfZXhlYyhkdWtfY29udGV4dCAqY3R4KTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfcmVnZXhwX3Byb3RvdHlwZV90ZXN0 KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9y ZWdleHBfcHJvdG90eXBlX3Rvc3RyaW5nKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX3JldF90IGR1a19iaV9yZWdleHBfcHJvdG90eXBlX2ZsYWdzKGR1a19jb250ZXh0 ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9yZWdleHBfcHJvdG90 eXBlX3NoYXJlZF9nZXR0ZXIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9zdGFja19nZXR0ZXIoZHVrX2NvbnRleHQg KmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlw ZV9zdGFja19zZXR0ZXIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtf cmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9maWxlbmFtZV9nZXR0ZXIoZHVrX2NvbnRleHQg KmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlw ZV9maWxlbmFtZV9zZXR0ZXIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9saW5lbnVtYmVyX2dldHRlcihkdWtfY29u dGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZXJyb3JfcHJv dG90eXBlX2xpbmVudW1iZXJfc2V0dGVyKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX3JldF90IGR1a19iaV9lcnJvcl9wcm90b3R5cGVfdG9fc3RyaW5nKGR1a19jb250 ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9tYXRoX29iamVj dF9vbmVhcmdfc2hhcmVkKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVr X3JldF90IGR1a19iaV9tYXRoX29iamVjdF90d29hcmdfc2hhcmVkKGR1a19jb250ZXh0ICpjdHgp OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9tYXRoX29iamVjdF9jbHozMihk dWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfbWF0 aF9vYmplY3RfaHlwb3QoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtf cmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X2ltdWwoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X21heChkdWtfY29udGV4dCAq Y3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfbWF0aF9vYmplY3RfbWlu KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9t YXRoX29iamVjdF9yYW5kb20oZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfcmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X3NpZ24oZHVrX2NvbnRleHQgKmN0eCk7CitEVUtf SU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2pzb25fb2JqZWN0X3BhcnNlKGR1a19jb250 ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9qc29uX29iamVj dF9zdHJpbmdpZnkoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0 X3QgZHVrX2JpX2R1a3RhcGVfb2JqZWN0X2luZm8oZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2R1a3RhcGVfb2JqZWN0X2FjdChkdWtfY29udGV4 dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfZHVrdGFwZV9vYmpl Y3RfZ2MoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVr X2JpX2R1a3RhcGVfb2JqZWN0X2ZpbihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9E RUNMIGR1a19yZXRfdCBkdWtfYmlfZHVrdGFwZV9vYmplY3RfZW5jKGR1a19jb250ZXh0ICpjdHgp OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9kdWt0YXBlX29iamVjdF9kZWMo ZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2R1 a3RhcGVfb2JqZWN0X2NvbXBhY3QoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVD TCBkdWtfcmV0X3QgZHVrX2JpX3RocmVhZF95aWVsZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfdGhyZWFkX3Jlc3VtZShkdWtfY29udGV4dCAq Y3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfdGhyZWFkX2N1cnJlbnQo ZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3Bv aW50ZXJfcHJvdG90eXBlX3Rvc3RyaW5nX3NoYXJlZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVjdF9hcHBseShkdWtfY29udGV4dCAq Y3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVjdF9jb25zdHJ1 Y3QoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2Jp X3JlZmxlY3Rfb2JqZWN0X2RlbGV0ZV9wcm9wZXJ0eShkdWtfY29udGV4dCAqY3R4KTsKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVjdF9vYmplY3RfZ2V0KGR1a19jb250 ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9yZWZsZWN0X29i amVjdF9oYXMoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3Qg ZHVrX2JpX3JlZmxlY3Rfb2JqZWN0X3NldChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlidWZmZXJfaXN2aWV3KGR1a19jb250ZXh0ICpj dHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90eXBlZGFycmF5X2J5dGVs ZW5ndGhfZ2V0dGVyKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3Jl dF90IGR1a19iaV9idWZmZXJfc2xpY2Vfc2hhcmVkKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90eXBlZGFycmF5X2J5dGVvZmZzZXRfZ2V0dGVy KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90 eXBlZGFycmF5X2J1ZmZlcl9nZXR0ZXIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxf REVDTCBkdWtfcmV0X3QgZHVrX2JpX2J1ZmZlcl9yZWFkZmllbGQoZHVrX2NvbnRleHQgKmN0eCk7 CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX2J1ZmZlcl93cml0ZWZpZWxkKGR1 a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV90eXBl ZGFycmF5X3NldChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRf dCBkdWtfYmlfdWludDhhcnJheV9hbGxvY3BsYWluKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV91aW50OGFycmF5X3BsYWlub2YoZHVrX2NvbnRl eHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX25vZGVqc19idWZm ZXJfY29uY2F0KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90 IGR1a19iaV9ub2RlanNfYnVmZmVyX2lzX2VuY29kaW5nKGR1a19jb250ZXh0ICpjdHgpOworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX2lzX2J1ZmZlcihk dWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfbm9k ZWpzX2J1ZmZlcl9ieXRlX2xlbmd0aChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5BTF9E RUNMIGR1a19yZXRfdCBkdWtfYmlfYnVmZmVyX2NvbXBhcmVfc2hhcmVkKGR1a19jb250ZXh0ICpj dHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX3Rv c3RyaW5nKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1 a19iaV9ub2RlanNfYnVmZmVyX3RvanNvbihkdWtfY29udGV4dCAqY3R4KTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19yZXRfdCBkdWtfYmlfbm9kZWpzX2J1ZmZlcl9maWxsKGR1a19jb250ZXh0ICpj dHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX2Nv cHkoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2Jp X25vZGVqc19idWZmZXJfd3JpdGUoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVD TCBkdWtfcmV0X3QgZHVrX2JpX3RleHRlbmNvZGVyX3Byb3RvdHlwZV9lbmNvZGluZ19nZXR0ZXIo ZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3Rl eHRlbmNvZGVyX3Byb3RvdHlwZV9lbmNvZGUoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfSU5URVJO QUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX3RleHRkZWNvZGVyX3Byb3RvdHlwZV9zaGFyZWRfZ2V0 dGVyKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19i aV90ZXh0ZGVjb2Rlcl9wcm90b3R5cGVfZGVjb2RlKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19iaV9wZXJmb3JtYW5jZV9ub3coZHVrX2NvbnRleHQg KmN0eCk7CisjaWYgIWRlZmluZWQoRFVLX1NJTkdMRV9GSUxFKQorRFVLX0lOVEVSTkFMX0RFQ0wg Y29uc3QgZHVrX2NfZnVuY3Rpb24gZHVrX2JpX25hdGl2ZV9mdW5jdGlvbnNbMTc3XTsKKyNlbmRp ZiAgLyogIURVS19TSU5HTEVfRklMRSAqLworI2RlZmluZSBEVUtfQklEWF9HTE9CQUwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX0JJ RFhfR0xPQkFMX0VOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx CisjZGVmaW5lIERVS19CSURYX09CSkVDVF9DT05TVFJVQ1RPUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMgorI2RlZmluZSBEVUtfQklEWF9PQkpFQ1RfUFJPVE9UWVBFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRFVLX0JJRFhfRlVOQ1RJ T05fQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5l IERVS19CSURYX0ZVTkNUSU9OX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNQorI2RlZmluZSBEVUtfQklEWF9OQVRJVkVfRlVOQ1RJT05fUFJPVE9UWVBFICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRFVLX0JJRFhfQVJSQVlfQ09OU1RSVUNU T1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIERVS19CSURY X0FSUkFZX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAor I2RlZmluZSBEVUtfQklEWF9TVFJJTkdfQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDkKKyNkZWZpbmUgRFVLX0JJRFhfU1RSSU5HX1BST1RPVFlQRSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBEVUtfQklEWF9CT09MRUFO X0NPTlNUUlVDVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5l IERVS19CSURYX0JPT0xFQU5fUFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTIKKyNkZWZpbmUgRFVLX0JJRFhfTlVNQkVSX0NPTlNUUlVDVE9SICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBEVUtfQklEWF9OVU1CRVJfUFJPVE9U WVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIERVS19C SURYX0RBVEVfQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTUKKyNkZWZpbmUgRFVLX0JJRFhfREFURV9QUk9UT1RZUEUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBEVUtfQklEWF9SRUdFWFBfQ09OU1RSVUNUT1Ig ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIERVS19CSURYX1JF R0VYUF9QUk9UT1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNk ZWZpbmUgRFVLX0JJRFhfRVJST1JfQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxOQorI2RlZmluZSBEVUtfQklEWF9FUlJPUl9QUk9UT1RZUEUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIERVS19CSURYX0VWQUxfRVJS T1JfQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUg RFVLX0JJRFhfRVZBTF9FUlJPUl9QUk9UT1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAyMgorI2RlZmluZSBEVUtfQklEWF9SQU5HRV9FUlJPUl9DT05TVFJVQ1RPUiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIERVS19CSURYX1JBTkdFX0VSUk9SX1BS T1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRFVLX0JJ RFhfUkVGRVJFTkNFX0VSUk9SX0NPTlNUUlVDVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAy NQorI2RlZmluZSBEVUtfQklEWF9SRUZFUkVOQ0VfRVJST1JfUFJPVE9UWVBFICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIERVS19CSURYX1NZTlRBWF9FUlJPUl9DT05TVFJV Q1RPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgRFVLX0JJRFhfU1lO VEFYX0VSUk9SX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2Rl ZmluZSBEVUtfQklEWF9UWVBFX0VSUk9SX0NPTlNUUlVDVE9SICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDI5CisjZGVmaW5lIERVS19CSURYX1RZUEVfRVJST1JfUFJPVE9UWVBFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgRFVLX0JJRFhfVVJJX0VSUk9S X0NPTlNUUlVDVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBE VUtfQklEWF9VUklfRVJST1JfUFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDMyCisjZGVmaW5lIERVS19CSURYX1RZUEVfRVJST1JfVEhST1dFUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgRFVLX0JJRFhfRFVLVEFQRSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBEVUtfQklE WF9USFJFQURfUFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1 CisjZGVmaW5lIERVS19CSURYX1BPSU5URVJfUFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgRFVLX0JJRFhfRE9VQkxFX0VSUk9SICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNworI2RlZmluZSBEVUtfQklEWF9TWU1C T0xfUFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4CisjZGVm aW5lIERVS19CSURYX0FSUkFZQlVGRkVSX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMzkKKyNkZWZpbmUgRFVLX0JJRFhfREFUQVZJRVdfUFJPVE9UWVBFICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA0MAorI2RlZmluZSBEVUtfQklEWF9JTlQ4QVJSQVlf UFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxCisjZGVmaW5lIERV S19CSURYX1VJTlQ4QVJSQVlfUFJPVE9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgNDIKKyNkZWZpbmUgRFVLX0JJRFhfVUlOVDhDTEFNUEVEQVJSQVlfUFJPVE9UWVBFICAgICAg ICAgICAgICAgICAgICAgICAgICA0MworI2RlZmluZSBEVUtfQklEWF9JTlQxNkFSUkFZX1BST1RP VFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIERVS19CSURY X1VJTlQxNkFSUkFZX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDUK KyNkZWZpbmUgRFVLX0JJRFhfSU5UMzJBUlJBWV9QUk9UT1RZUEUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA0NgorI2RlZmluZSBEVUtfQklEWF9VSU5UMzJBUlJBWV9QUk9UT1RZUEUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lIERVS19CSURYX0ZMT0FU MzJBUlJBWV9QUk9UT1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgKKyNkZWZp bmUgRFVLX0JJRFhfRkxPQVQ2NEFSUkFZX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA0OQorI2RlZmluZSBEVUtfQklEWF9OT0RFSlNfQlVGRkVSX1BST1RPVFlQRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIERVS19OVU1fQlVJTFRJTlMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgRFVL X05VTV9CSURYX0JVSUxUSU5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA1MQorI2RlZmluZSBEVUtfTlVNX0FMTF9CVUlMVElOUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDc4CisjaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9MRSkKKyNp ZiAhZGVmaW5lZChEVUtfU0lOR0xFX0ZJTEUpCitEVUtfSU5URVJOQUxfREVDTCBjb25zdCBkdWtf dWludDhfdCBkdWtfYnVpbHRpbnNfZGF0YVs0MTE2XTsKKyNlbmRpZiAgLyogIURVS19TSU5HTEVf RklMRSAqLworI2RlZmluZSBEVUtfQlVJTFRJTlNfREFUQV9MRU5HVEggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDQxMTYKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVf QkUpCisjaWYgIWRlZmluZWQoRFVLX1NJTkdMRV9GSUxFKQorRFVLX0lOVEVSTkFMX0RFQ0wgY29u c3QgZHVrX3VpbnQ4X3QgZHVrX2J1aWx0aW5zX2RhdGFbNDExNl07CisjZW5kaWYgIC8qICFEVUtf U0lOR0xFX0ZJTEUgKi8KKyNkZWZpbmUgRFVLX0JVSUxUSU5TX0RBVEFfTEVOR1RIICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTE2CisjZWxpZiBkZWZpbmVkKERVS19VU0Vf RE9VQkxFX01FKQorI2lmICFkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKK0RVS19JTlRFUk5BTF9E RUNMIGNvbnN0IGR1a191aW50OF90IGR1a19idWlsdGluc19kYXRhWzQxMTZdOworI2VuZGlmICAv KiAhRFVLX1NJTkdMRV9GSUxFICovCisjZGVmaW5lIERVS19CVUlMVElOU19EQVRBX0xFTkdUSCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDExNgorI2Vsc2UKKyNlcnJvciBp bnZhbGlkIGVuZGlhbm5lc3MgZGVmaW5lcworI2VuZGlmCisjZW5kaWYgIC8qIERVS19VU0VfUk9N X09CSkVDVFMgKi8KKyNlbmRpZiAgLyogRFVLX0JVSUxUSU5TX0hfSU5DTFVERUQgKi8KKworLyog I2luY2x1ZGUgZHVrX3V0aWwuaCAqLworLyoKKyAqICBVdGlsaXRpZXMKKyAqLworCisjaWYgIWRl ZmluZWQoRFVLX1VUSUxfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX1VUSUxfSF9JTkNMVURFRAor CisjaWYgZGVmaW5lZChEVUtfVVNFX0dFVF9SQU5ET01fRE9VQkxFKQorI2RlZmluZSBEVUtfVVRJ TF9HRVRfUkFORE9NX0RPVUJMRSh0aHIpIERVS19VU0VfR0VUX1JBTkRPTV9ET1VCTEUoKHRocikt PmhlYXBfdWRhdGEpCisjZWxzZQorI2RlZmluZSBEVUtfVVRJTF9HRVRfUkFORE9NX0RPVUJMRSh0 aHIpIGR1a191dGlsX3RpbnlyYW5kb21fZ2V0X2RvdWJsZSh0aHIpCisjZW5kaWYKKworLyoKKyAq ICBTb21lIHVzZWZ1bCBjb25zdGFudHMKKyAqLworCisjZGVmaW5lIERVS19ET1VCTEVfMlRPMzIg ICAgIDQyOTQ5NjcyOTYuMAorI2RlZmluZSBEVUtfRE9VQkxFXzJUTzMxICAgICAyMTQ3NDgzNjQ4 LjAKKyNkZWZpbmUgRFVLX0RPVUJMRV9MT0cyRSAgICAgMS40NDI2OTUwNDA4ODg5NjM0CisjZGVm aW5lIERVS19ET1VCTEVfTE9HMTBFICAgIDAuNDM0Mjk0NDgxOTAzMjUxOAorCisvKgorICogIEVu ZGlhbiBjb252ZXJzaW9uCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFR0VSX0xFKQor I2RlZmluZSBEVUtfSFRPTjMyKHgpIERVS19CU1dBUDMyKCh4KSkKKyNkZWZpbmUgRFVLX05UT0gz Mih4KSBEVUtfQlNXQVAzMigoeCkpCisjZGVmaW5lIERVS19IVE9OMTYoeCkgRFVLX0JTV0FQMTYo KHgpKQorI2RlZmluZSBEVUtfTlRPSDE2KHgpIERVS19CU1dBUDE2KCh4KSkKKyNlbGlmIGRlZmlu ZWQoRFVLX1VTRV9JTlRFR0VSX0JFKQorI2RlZmluZSBEVUtfSFRPTjMyKHgpICh4KQorI2RlZmlu ZSBEVUtfTlRPSDMyKHgpICh4KQorI2RlZmluZSBEVUtfSFRPTjE2KHgpICh4KQorI2RlZmluZSBE VUtfTlRPSDE2KHgpICh4KQorI2Vsc2UKKyNlcnJvciBpbnRlcm5hbCBlcnJvciwgZW5kaWFubmVz cyBkZWZpbmVzIGJyb2tlbgorI2VuZGlmCisKKy8qCisgKiAgQml0c3RyZWFtIGRlY29kZXIKKyAq LworCitzdHJ1Y3QgZHVrX2JpdGRlY29kZXJfY3R4IHsKKwljb25zdCBkdWtfdWludDhfdCAqZGF0 YTsKKwlkdWtfc2l6ZV90IG9mZnNldDsKKwlkdWtfc2l6ZV90IGxlbmd0aDsKKwlkdWtfdWludDMy X3QgY3VycnZhbDsKKwlkdWtfc21hbGxfaW50X3QgY3VycmJpdHM7Cit9OworCisjZGVmaW5lIERV S19CRF9CSVRQQUNLRURfU1RSSU5HX01BWExFTiAyNTYKKworLyoKKyAqICBCaXRzdHJlYW0gZW5j b2RlcgorICovCisKK3N0cnVjdCBkdWtfYml0ZW5jb2Rlcl9jdHggeworCWR1a191aW50OF90ICpk YXRhOworCWR1a19zaXplX3Qgb2Zmc2V0OworCWR1a19zaXplX3QgbGVuZ3RoOworCWR1a191aW50 MzJfdCBjdXJydmFsOworCWR1a19zbWFsbF9pbnRfdCBjdXJyYml0czsKKwlkdWtfc21hbGxfaW50 X3QgdHJ1bmNhdGVkOworfTsKKworLyoKKyAqICBSYXcgd3JpdGUvcmVhZCBtYWNyb3MgZm9yIGJp ZyBlbmRpYW4sIHVuYWxpZ25lZCBiYXNpYyB2YWx1ZXMuCisgKiAgQ2FsbGVyIGVuc3VyZXMgdGhl cmUncyBlbm91Z2ggc3BhY2UuICBUaGUgbWFjcm9zIHVwZGF0ZSB0aGUgcG9pbnRlcgorICogIGFy Z3VtZW50IGF1dG9tYXRpY2FsbHkgb24gcmVzaXplcy4gIFRoZSBpZGlvbSBzZWVtcyBhIGJpdCBv ZGQsIGJ1dAorICogIGxlYWRzIHRvIGNvbXBhY3QgY29kZS4KKyAqLworCisjZGVmaW5lIERVS19S QVdfV1JJVEVfVTgocHRyLHZhbCkgIGRvIHsgXAorCQkqKHB0cikrKyA9IChkdWtfdWludDhfdCkg KHZhbCk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfUkFXX1dSSVRFX1UxNl9CRShwdHIs dmFsKSBkdWtfcmF3X3dyaXRlX3UxNl9iZSgmKHB0ciksIChkdWtfdWludDE2X3QpICh2YWwpKQor I2RlZmluZSBEVUtfUkFXX1dSSVRFX1UzMl9CRShwdHIsdmFsKSBkdWtfcmF3X3dyaXRlX3UzMl9i ZSgmKHB0ciksIChkdWtfdWludDMyX3QpICh2YWwpKQorI2RlZmluZSBEVUtfUkFXX1dSSVRFX0RP VUJMRV9CRShwdHIsdmFsKSBkdWtfcmF3X3dyaXRlX2RvdWJsZV9iZSgmKHB0ciksIChkdWtfZG91 YmxlX3QpICh2YWwpKQorI2RlZmluZSBEVUtfUkFXX1dSSVRFX1hVVEY4KHB0cix2YWwpICBkbyB7 IFwKKwkJLyogJ3B0cicgaXMgZXZhbHVhdGVkIGJvdGggYXMgTEhTIGFuZCBSSFMuICovIFwKKwkJ ZHVrX3VpbnQ4X3QgKmR1a19fcHRyOyBcCisJCWR1a19zbWFsbF9pbnRfdCBkdWtfX2xlbjsgXAor CQlkdWtfX3B0ciA9IChkdWtfdWludDhfdCAqKSAocHRyKTsgXAorCQlkdWtfX2xlbiA9IGR1a191 bmljb2RlX2VuY29kZV94dXRmOCgoZHVrX3Vjb2RlcG9pbnRfdCkgKHZhbCksIGR1a19fcHRyKTsg XAorCQlkdWtfX3B0ciArPSBkdWtfX2xlbjsgXAorCQkocHRyKSA9IGR1a19fcHRyOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1JBV19XUklURV9DRVNVOChwdHIsdmFsKSAgZG8geyBcCisJ CS8qICdwdHInIGlzIGV2YWx1YXRlZCBib3RoIGFzIExIUyBhbmQgUkhTLiAqLyBcCisJCWR1a191 aW50OF90ICpkdWtfX3B0cjsgXAorCQlkdWtfc21hbGxfaW50X3QgZHVrX19sZW47IFwKKwkJZHVr X19wdHIgPSAoZHVrX3VpbnQ4X3QgKikgKHB0cik7IFwKKwkJZHVrX19sZW4gPSBkdWtfdW5pY29k ZV9lbmNvZGVfY2VzdTgoKGR1a191Y29kZXBvaW50X3QpICh2YWwpLCBkdWtfX3B0cik7IFwKKwkJ ZHVrX19wdHIgKz0gZHVrX19sZW47IFwKKwkJKHB0cikgPSBkdWtfX3B0cjsgXAorCX0gd2hpbGUg KDApCisKKyNkZWZpbmUgRFVLX1JBV19SRUFEX1U4KHB0cikgKChkdWtfdWludDhfdCkgKCoocHRy KSsrKSkKKyNkZWZpbmUgRFVLX1JBV19SRUFEX1UxNl9CRShwdHIpIGR1a19yYXdfcmVhZF91MTZf YmUoJihwdHIpKTsKKyNkZWZpbmUgRFVLX1JBV19SRUFEX1UzMl9CRShwdHIpIGR1a19yYXdfcmVh ZF91MzJfYmUoJihwdHIpKTsKKyNkZWZpbmUgRFVLX1JBV19SRUFEX0RPVUJMRV9CRShwdHIpIGR1 a19yYXdfcmVhZF9kb3VibGVfYmUoJihwdHIpKTsKKworLyoKKyAqICBCdWZmZXIgd3JpdGVyIChk eW5hbWljIGJ1ZmZlciBvbmx5KQorICoKKyAqICBIZWxwZXIgZm9yIHdyaXRpbmcgdG8gYSBkeW5h bWljIGJ1ZmZlciB3aXRoIGEgY29uY2VwdCBvZiBhICJzbGFjayIgYXJlYQorICogIHRvIHJlZHVj ZSByZXNpemVzLiAgWW91IGNhbiBlbnN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGJlZm9yZWhh bmQgYW5kCisgKiAgdGhlbiB3cml0ZSBmb3IgYSB3aGlsZSB3aXRob3V0IGZ1cnRoZXIgY2hlY2tz LCByZWx5aW5nIG9uIGEgc3RhYmxlIGRhdGEKKyAqICBwb2ludGVyLiAgU2xhY2sgaGFuZGxpbmcg aXMgYXV0b21hdGljIHNvIGNhbGwgc2l0ZXMgb25seSBpbmRpY2F0ZSBob3cKKyAqICBtdWNoIGRh dGEgdGhleSBuZWVkIHJpZ2h0IG5vdy4KKyAqCisgKiAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0 byB3cml0ZSB1c2luZyBidWZ3cml0ZXIuICBUaGUgYmVzdCBhcHByb2FjaAorICogIGRlcGVuZHMg bWFpbmx5IG9uIGhvdyBtdWNoIHBlcmZvcm1hbmNlIG1hdHRlcnMgb3ZlciBjb2RlIGZvb3Rwcmlu dC4KKyAqICBUaGUga2V5IGlzc3VlcyBhcmUgKDEpIGVuc3VyaW5nIHRoZXJlIGlzIHNwYWNlIGFu ZCAoMikga2VlcGluZyB0aGUKKyAqICBwb2ludGVycyBjb25zaXN0ZW50LiAgRmFzdCBjb2RlIHNo b3VsZCBlbnN1cmUgc3BhY2UgZm9yIG11bHRpcGxlIHdyaXRlcworICogIHdpdGggb25lIGVuc3Vy ZSBjYWxsLiAgRmFzdGVzdCBpbm5lciBsb29wIGNvZGUgY2FuIHRlbXBvcmFyaWx5IGJvcnJvdwor ICogIHRoZSAncCcgcG9pbnRlciBidXQgbXVzdCB3cml0ZSBpdCBiYWNrIGV2ZW50dWFsbHkuCisg KgorICogIEJlIGNhcmVmdWwgdG8gZW5zdXJlIGFsbCBtYWNybyBhcmd1bWVudHMgKG90aGVyIHRo YW4gc3RhdGljIHBvaW50ZXJzIGxpa2UKKyAqICAndGhyJyBhbmQgJ2J3X2N0eCcpIGFyZSBldmFs dWF0ZWQgZXhhY3RseSBvbmNlLCB1c2luZyB0ZW1wb3JhcmllcyBpZgorICogIG5lY2Vzc2FyeSAo aWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgdGhlcmUgc2hvdWxkIGJlIGEgbm90ZSBuZWFyIHRoZSBt YWNybykuCisgKiAgQnVmZmVyIHdyaXRlIGFyZ3VtZW50cyBvZnRlbiBjb250YWluIGFyaXRobWV0 aWMgZXRjIHNvIHRoaXMgaXMKKyAqICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGhlcmUuCisgKi8K KworLyogWFhYOiBNaWdyYXRlIGJ1ZndyaXRlciBhbmQgb3RoZXIgcmVhZC93cml0ZSBoZWxwZXJz IHRvIGl0cyBvd24gaGVhZGVyPyAqLworCitzdHJ1Y3QgZHVrX2J1ZndyaXRlcl9jdHggeworCWR1 a191aW50OF90ICpwOworCWR1a191aW50OF90ICpwX2Jhc2U7CisJZHVrX3VpbnQ4X3QgKnBfbGlt aXQ7CisJZHVrX2hidWZmZXJfZHluYW1pYyAqYnVmOworfTsKKworI2lmIGRlZmluZWQoRFVLX1VT RV9QUkVGRVJfU0laRSkKKyNkZWZpbmUgRFVLX0JXX1NMQUNLX0FERCAgICAgICAgICAgNjQKKyNk ZWZpbmUgRFVLX0JXX1NMQUNLX1NISUZUICAgICAgICAgNCAgICAvKiAyXjQgLT4gMS8xNiA9IDYu MjUlIHNsYWNrICovCisjZWxzZQorI2RlZmluZSBEVUtfQldfU0xBQ0tfQUREICAgICAgICAgICA2 NAorI2RlZmluZSBEVUtfQldfU0xBQ0tfU0hJRlQgICAgICAgICAyICAgIC8qIDJeMiAtPiAxLzQg PSAyNSUgc2xhY2sgKi8KKyNlbmRpZgorCisvKiBJbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0 aW9uIChjb21wYWN0aW9uKSwgY29udmVydGluZyB0byBvdGhlciB0eXBlcy4gKi8KKworI2RlZmlu ZSBEVUtfQldfSU5JVF9QVVNIQlVGKHRocixid19jdHgsc3opIGRvIHsgXAorCQlkdWtfYndfaW5p dF9wdXNoYnVmKCh0aHIpLCAoYndfY3R4KSwgKHN6KSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmlu ZSBEVUtfQldfSU5JVF9XSVRIQlVGKHRocixid19jdHgsYnVmKSBkbyB7IFwKKwkJZHVrX2J3X2lu aXQoKHRociksIChid19jdHgpLCAoYnVmKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtf QldfQ09NUEFDVCh0aHIsYndfY3R4KSBkbyB7IFwKKwkJLyogTWFrZSB1bmRlcmx5aW5nIGJ1ZmZl ciBjb21wYWN0IHRvIG1hdGNoIERVS19CV19HRVRfU0laRSgpLiAqLyBcCisJCWR1a19id19jb21w YWN0KCh0aHIpLCAoYndfY3R4KSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQldfUFVT SF9BU19TVFJJTkcodGhyLGJ3X2N0eCkgZG8geyBcCisJCWR1a19wdXNoX2xzdHJpbmcoKHRociks IFwKKwkJICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSAoYndfY3R4KS0+cF9iYXNlLCBc CisJCSAgICAgICAgICAgICAgICAgKGR1a19zaXplX3QpICgoYndfY3R4KS0+cCAtIChid19jdHgp LT5wX2Jhc2UpKTsgXAorCX0gd2hpbGUgKDApCisvKiBQb2ludGVycyBtYXkgYmUgTlVMTCBmb3Ig YSB3aGlsZSB3aGVuICdidWYnIHNpemUgaXMgemVybyBhbmQgYmVmb3JlIGFueQorICogRU5TVVJF IGNhbGxzIGhhdmUgYmVlbiBtYWRlLiAgT25jZSBhbiBFTlNVUkUgaGFzIGJlZW4gbWFkZSwgdGhl IHBvaW50ZXJzCisgKiBhcmUgcmVxdWlyZWQgdG8gYmUgbm9uLU5VTEwgc28gdGhhdCBpdCdzIGFs d2F5cyB2YWxpZCB0byB1c2UgbWVtY3B5KCkgYW5kCisgKiBtZW1tb3ZlKCksIGV2ZW4gZm9yIHpl cm8gc2l6ZS4KKyAqLworI2RlZmluZSBEVUtfQldfQVNTRVJUX1ZBTElEX0VYUFIodGhyLGJ3X2N0 eCkgXAorCURVS19BU1NFUlRfRVhQUigoYndfY3R4KSAhPSBOVUxMICYmIFwKKwkgICAgICAgICAg ICAgICAgKGJ3X2N0eCktPmJ1ZiAhPSBOVUxMICYmIFwKKwkJCSgoRFVLX0hCVUZGRVJfRFlOQU1J Q19HRVRfU0laRSgoYndfY3R4KS0+YnVmKSA9PSAwKSB8fCBcCisJCQkJKChid19jdHgpLT5wICE9 IE5VTEwgJiYgXAorCQkgICAgICAgICAgICAgICAgIChid19jdHgpLT5wX2Jhc2UgIT0gTlVMTCAm JiBcCisJCSAgICAgICAgICAgICAgICAgKGJ3X2N0eCktPnBfbGltaXQgIT0gTlVMTCAmJiBcCisJ CSAgICAgICAgICAgICAgICAgKGJ3X2N0eCktPnBfbGltaXQgPj0gKGJ3X2N0eCktPnBfYmFzZSAm JiBcCisJCSAgICAgICAgICAgICAgICAgKGJ3X2N0eCktPnAgPj0gKGJ3X2N0eCktPnBfYmFzZSAm JiBcCisJCSAgICAgICAgICAgICAgICAgKGJ3X2N0eCktPnAgPD0gKGJ3X2N0eCktPnBfbGltaXQp KSkKKyNkZWZpbmUgRFVLX0JXX0FTU0VSVF9WQUxJRCh0aHIsYndfY3R4KSBkbyB7IFwKKwkJRFVL X0JXX0FTU0VSVF9WQUxJRF9FWFBSKCh0aHIpLCAoYndfY3R4KSk7IFwKKwl9IHdoaWxlICgwKQor CisvKiBXb3JraW5nIHdpdGggdGhlIHBvaW50ZXIgYW5kIGN1cnJlbnQgc2l6ZS4gKi8KKworI2Rl ZmluZSBEVUtfQldfR0VUX1BUUih0aHIsYndfY3R4KSBcCisJKChid19jdHgpLT5wKQorI2RlZmlu ZSBEVUtfQldfU0VUX1BUUih0aHIsYndfY3R4LHB0cikgZG8geyBcCisJCShid19jdHgpLT5wID0g KHB0cik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQldfQUREX1BUUih0aHIsYndfY3R4 LGRlbHRhKSBkbyB7IFwKKwkJKGJ3X2N0eCktPnAgKz0gKGRlbHRhKTsgXAorCX0gd2hpbGUgKDAp CisjZGVmaW5lIERVS19CV19HRVRfQkFTRVBUUih0aHIsYndfY3R4KSBcCisJKChid19jdHgpLT5w X2Jhc2UpCisjZGVmaW5lIERVS19CV19HRVRfTElNSVRQVFIodGhyLGJ3X2N0eCkgXAorCSgoYndf Y3R4KS0+cF9saW1pdCkKKyNkZWZpbmUgRFVLX0JXX0dFVF9TSVpFKHRocixid19jdHgpIFwKKwko KGR1a19zaXplX3QpICgoYndfY3R4KS0+cCAtIChid19jdHgpLT5wX2Jhc2UpKQorI2RlZmluZSBE VUtfQldfU0VUX1NJWkUodGhyLGJ3X2N0eCxzeikgZG8geyBcCisJCURVS19BU1NFUlQoKGR1a19z aXplX3QpIChzeikgPD0gKGR1a19zaXplX3QpICgoYndfY3R4KS0+cCAtIChid19jdHgpLT5wX2Jh c2UpKTsgXAorCQkoYndfY3R4KS0+cCA9IChid19jdHgpLT5wX2Jhc2UgKyAoc3opOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JXX1JFU0VUX1NJWkUodGhyLGJ3X2N0eCkgZG8geyBcCisJ CS8qIFJlc2V0IHRvIHplcm8gc2l6ZSwga2VlcCBjdXJyZW50IGxpbWl0LiAqLyBcCisJCShid19j dHgpLT5wID0gKGJ3X2N0eCktPnBfYmFzZTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19C V19HRVRfQlVGRkVSKHRocixid19jdHgpIFwKKwkoKGJ3X2N0eCktPmJ1ZikKKworLyogRW5zdXJp bmcgKHJlc2VydmluZykgc3BhY2UuICovCisKKyNkZWZpbmUgRFVLX0JXX0VOU1VSRSh0aHIsYndf Y3R4LHN6KSBkbyB7IFwKKwkJZHVrX3NpemVfdCBkdWtfX3N6LCBkdWtfX3NwYWNlOyBcCisJCURV S19CV19BU1NFUlRfVkFMSUQoKHRociksIChid19jdHgpKTsgXAorCQlkdWtfX3N6ID0gKHN6KTsg XAorCQlkdWtfX3NwYWNlID0gKGR1a19zaXplX3QpICgoYndfY3R4KS0+cF9saW1pdCAtIChid19j dHgpLT5wKTsgXAorCQlpZiAoZHVrX19zcGFjZSA8IGR1a19fc3opIHsgXAorCQkJKHZvaWQpIGR1 a19id19yZXNpemUoKHRociksIChid19jdHgpLCBkdWtfX3N6KTsgXAorCQl9IFwKKwl9IHdoaWxl ICgwKQorLyogTk9URTogTXVsdGlwbGUgZXZhbHVhdGlvbiBvZiAncHRyJyBpbiB0aGlzIG1hY3Jv LiAqLworLyogWFhYOiBSZXdvcmsgdG8gdXNlIGFuIGFsd2F5cy1pbmxpbmUgZnVuY3Rpb24/ICov CisjZGVmaW5lIERVS19CV19FTlNVUkVfUkFXKHRocixid19jdHgsc3oscHRyKSBcCisJKCgoZHVr X3NpemVfdCkgKChid19jdHgpLT5wX2xpbWl0IC0gKHB0cikpID49IChzeikpID8gXAorCSAocHRy KSA6IFwKKwkgKChid19jdHgpLT5wID0gKHB0ciksIGR1a19id19yZXNpemUoKHRociksKGJ3X2N0 eCksKHN6KSkpKQorI2RlZmluZSBEVUtfQldfRU5TVVJFX0dFVFBUUih0aHIsYndfY3R4LHN6KSBc CisJRFVLX0JXX0VOU1VSRV9SQVcoKHRociksIChid19jdHgpLCAoc3opLCAoYndfY3R4KS0+cCkK KyNkZWZpbmUgRFVLX0JXX0FTU0VSVF9TUEFDRV9FWFBSKHRocixid19jdHgsc3opIFwKKwkoRFVL X0JXX0FTU0VSVF9WQUxJRF9FWFBSKCh0aHIpLCAoYndfY3R4KSksIFwKKwkgRFVLX0FTU0VSVF9F WFBSKChkdWtfc2l6ZV90KSAoKGJ3X2N0eCktPnBfbGltaXQgLSAoYndfY3R4KS0+cCkgPj0gKGR1 a19zaXplX3QpIChzeikpKQorI2RlZmluZSBEVUtfQldfQVNTRVJUX1NQQUNFKHRocixid19jdHgs c3opIGRvIHsgXAorCQlEVUtfQldfQVNTRVJUX1NQQUNFX0VYUFIoKHRociksIChid19jdHgpLCAo c3opKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIE1pc2NlbGxhbmVvdXMuICovCisKKyNkZWZpbmUg RFVLX0JXX1NFVFBUUl9BTkRfQ09NUEFDVCh0aHIsYndfY3R4LHB0cikgZG8geyBcCisJCShid19j dHgpLT5wID0gKHB0cik7IFwKKwkJZHVrX2J3X2NvbXBhY3QoKHRociksIChid19jdHgpKTsgXAor CX0gd2hpbGUgKDApCisKKy8qIEZhc3Qgd3JpdGUgY2FsbHMgd2hpY2ggYXNzdW1lIHlvdSBjb250 cm9sIHRoZSBzbGFjayBiZWZvcmVoYW5kLgorICogTXVsdGlieXRlIHdyaXRlIHZhcmlhbnRzIGV4 aXN0IGFuZCB1c2UgYSB0ZW1wb3Jhcnkgd3JpdGUgcG9pbnRlcgorICogYmVjYXVzZSBieXRlIHdy aXRlcyBhbGlhcyB3aXRoIGFueXRoaW5nOiB3aXRoIGEgc3RvcmVkIHBvaW50ZXIKKyAqIGV4cGxp Y2l0IHBvaW50ZXIgbG9hZC9zdG9yZXMgZ2V0IGdlbmVyYXRlZCAoZS5nLiBnY2MgLU9zKS4KKyAq LworCisjZGVmaW5lIERVS19CV19XUklURV9SQVdfVTgodGhyLGJ3X2N0eCx2YWwpIGRvIHsgXAor CQlEVUtfQldfQVNTRVJUX1NQQUNFKCh0aHIpLCAoYndfY3R4KSwgMSk7IFwKKwkJKihid19jdHgp LT5wKysgPSAoZHVrX3VpbnQ4X3QpICh2YWwpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVL X0JXX1dSSVRFX1JBV19VOF8yKHRocixid19jdHgsdmFsMSx2YWwyKSBkbyB7IFwKKwkJZHVrX3Vp bnQ4X3QgKmR1a19fcDsgXAorCQlEVUtfQldfQVNTRVJUX1NQQUNFKCh0aHIpLCAoYndfY3R4KSwg Mik7IFwKKwkJZHVrX19wID0gKGJ3X2N0eCktPnA7IFwKKwkJKmR1a19fcCsrID0gKGR1a191aW50 OF90KSAodmFsMSk7IFwKKwkJKmR1a19fcCsrID0gKGR1a191aW50OF90KSAodmFsMik7IFwKKwkJ KGJ3X2N0eCktPnAgPSBkdWtfX3A7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQldfV1JJ VEVfUkFXX1U4XzModGhyLGJ3X2N0eCx2YWwxLHZhbDIsdmFsMykgZG8geyBcCisJCWR1a191aW50 OF90ICpkdWtfX3A7IFwKKwkJRFVLX0JXX0FTU0VSVF9TUEFDRSgodGhyKSwgKGJ3X2N0eCksIDMp OyBcCisJCWR1a19fcCA9IChid19jdHgpLT5wOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhf dCkgKHZhbDEpOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDIpOyBcCisJCSpk dWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDMpOyBcCisJCShid19jdHgpLT5wID0gZHVrX19w OyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JXX1dSSVRFX1JBV19VOF80KHRocixid19j dHgsdmFsMSx2YWwyLHZhbDMsdmFsNCkgZG8geyBcCisJCWR1a191aW50OF90ICpkdWtfX3A7IFwK KwkJRFVLX0JXX0FTU0VSVF9TUEFDRSgodGhyKSwgKGJ3X2N0eCksIDQpOyBcCisJCWR1a19fcCA9 IChid19jdHgpLT5wOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDEpOyBcCisJ CSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDIpOyBcCisJCSpkdWtfX3ArKyA9IChkdWtf dWludDhfdCkgKHZhbDMpOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDQpOyBc CisJCShid19jdHgpLT5wID0gZHVrX19wOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JX X1dSSVRFX1JBV19VOF81KHRocixid19jdHgsdmFsMSx2YWwyLHZhbDMsdmFsNCx2YWw1KSBkbyB7 IFwKKwkJZHVrX3VpbnQ4X3QgKmR1a19fcDsgXAorCQlEVUtfQldfQVNTRVJUX1NQQUNFKCh0aHIp LCAoYndfY3R4KSwgNSk7IFwKKwkJZHVrX19wID0gKGJ3X2N0eCktPnA7IFwKKwkJKmR1a19fcCsr ID0gKGR1a191aW50OF90KSAodmFsMSk7IFwKKwkJKmR1a19fcCsrID0gKGR1a191aW50OF90KSAo dmFsMik7IFwKKwkJKmR1a19fcCsrID0gKGR1a191aW50OF90KSAodmFsMyk7IFwKKwkJKmR1a19f cCsrID0gKGR1a191aW50OF90KSAodmFsNCk7IFwKKwkJKmR1a19fcCsrID0gKGR1a191aW50OF90 KSAodmFsNSk7IFwKKwkJKGJ3X2N0eCktPnAgPSBkdWtfX3A7IFwKKwl9IHdoaWxlICgwKQorI2Rl ZmluZSBEVUtfQldfV1JJVEVfUkFXX1U4XzYodGhyLGJ3X2N0eCx2YWwxLHZhbDIsdmFsMyx2YWw0 LHZhbDUsdmFsNikgZG8geyBcCisJCWR1a191aW50OF90ICpkdWtfX3A7IFwKKwkJRFVLX0JXX0FT U0VSVF9TUEFDRSgodGhyKSwgKGJ3X2N0eCksIDYpOyBcCisJCWR1a19fcCA9IChid19jdHgpLT5w OyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDEpOyBcCisJCSpkdWtfX3ArKyA9 IChkdWtfdWludDhfdCkgKHZhbDIpOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZh bDMpOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkgKHZhbDQpOyBcCisJCSpkdWtfX3Ar KyA9IChkdWtfdWludDhfdCkgKHZhbDUpOyBcCisJCSpkdWtfX3ArKyA9IChkdWtfdWludDhfdCkg KHZhbDYpOyBcCisJCShid19jdHgpLT5wID0gZHVrX19wOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZp bmUgRFVLX0JXX1dSSVRFX1JBV19YVVRGOCh0aHIsYndfY3R4LGNwKSBkbyB7IFwKKwkJZHVrX3Vj b2RlcG9pbnRfdCBkdWtfX2NwOyBcCisJCWR1a19zbWFsbF9pbnRfdCBkdWtfX2VuY19sZW47IFwK KwkJZHVrX19jcCA9IChkdWtfdWNvZGVwb2ludF90KSAoY3ApOyBcCisJCURVS19CV19BU1NFUlRf U1BBQ0UoKHRociksIChid19jdHgpLCBkdWtfdW5pY29kZV9nZXRfeHV0ZjhfbGVuZ3RoKGR1a19f Y3ApKTsgXAorCQlkdWtfX2VuY19sZW4gPSBkdWtfdW5pY29kZV9lbmNvZGVfeHV0ZjgoZHVrX19j cCwgKGJ3X2N0eCktPnApOyBcCisJCShid19jdHgpLT5wICs9IGR1a19fZW5jX2xlbjsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19CV19XUklURV9SQVdfQ0VTVTgodGhyLGJ3X2N0eCxjcCkg ZG8geyBcCisJCWR1a191Y29kZXBvaW50X3QgZHVrX19jcDsgXAorCQlkdWtfc21hbGxfaW50X3Qg ZHVrX19lbmNfbGVuOyBcCisJCWR1a19fY3AgPSAoZHVrX3Vjb2RlcG9pbnRfdCkgKGNwKTsgXAor CQlEVUtfQldfQVNTRVJUX1NQQUNFKCh0aHIpLCAoYndfY3R4KSwgZHVrX3VuaWNvZGVfZ2V0X2Nl c3U4X2xlbmd0aChkdWtfX2NwKSk7IFwKKwkJZHVrX19lbmNfbGVuID0gZHVrX3VuaWNvZGVfZW5j b2RlX2Nlc3U4KGR1a19fY3AsIChid19jdHgpLT5wKTsgXAorCQkoYndfY3R4KS0+cCArPSBkdWtf X2VuY19sZW47IFwKKwl9IHdoaWxlICgwKQorLyogWFhYOiBhZGQgdGVtcG9yYXJ5IGR1a19fcCBw b2ludGVyIGhlcmUgdG9vOyBzaGFyaW5nICovCisvKiBYWFg6IGF2b2lkIHVuc2FmZSB2YXJpYW50 cyAqLworI2RlZmluZSBEVUtfQldfV1JJVEVfUkFXX0JZVEVTKHRocixid19jdHgsdmFscHRyLHZh bHN6KSBkbyB7IFwKKwkJY29uc3Qgdm9pZCAqZHVrX192YWxwdHI7IFwKKwkJZHVrX3NpemVfdCBk dWtfX3ZhbHN6OyBcCisJCWR1a19fdmFscHRyID0gKGNvbnN0IHZvaWQgKikgKHZhbHB0cik7IFwK KwkJZHVrX192YWxzeiA9IChkdWtfc2l6ZV90KSAodmFsc3opOyBcCisJCWR1a19tZW1jcHlfdW5z YWZlKCh2b2lkICopICgoYndfY3R4KS0+cCksIGR1a19fdmFscHRyLCBkdWtfX3ZhbHN6KTsgXAor CQkoYndfY3R4KS0+cCArPSBkdWtfX3ZhbHN6OyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVL X0JXX1dSSVRFX1JBV19DU1RSSU5HKHRocixid19jdHgsdmFsKSBkbyB7IFwKKwkJY29uc3QgZHVr X3VpbnQ4X3QgKmR1a19fdmFsOyBcCisJCWR1a19zaXplX3QgZHVrX192YWxfbGVuOyBcCisJCWR1 a19fdmFsID0gKGNvbnN0IGR1a191aW50OF90ICopICh2YWwpOyBcCisJCWR1a19fdmFsX2xlbiA9 IERVS19TVFJMRU4oKGNvbnN0IGNoYXIgKikgZHVrX192YWwpOyBcCisJCWR1a19tZW1jcHlfdW5z YWZlKCh2b2lkICopICgoYndfY3R4KS0+cCksIChjb25zdCB2b2lkICopIGR1a19fdmFsLCBkdWtf X3ZhbF9sZW4pOyBcCisJCShid19jdHgpLT5wICs9IGR1a19fdmFsX2xlbjsgXAorCX0gd2hpbGUg KDApCisjZGVmaW5lIERVS19CV19XUklURV9SQVdfSFNUUklORyh0aHIsYndfY3R4LHZhbCkgZG8g eyBcCisJCWR1a19zaXplX3QgZHVrX192YWxfbGVuOyBcCisJCWR1a19fdmFsX2xlbiA9IERVS19I U1RSSU5HX0dFVF9CWVRFTEVOKCh2YWwpKTsgXAorCQlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAq KSAoKGJ3X2N0eCktPnApLCAoY29uc3Qgdm9pZCAqKSBEVUtfSFNUUklOR19HRVRfREFUQSgodmFs KSksIGR1a19fdmFsX2xlbik7IFwKKwkJKGJ3X2N0eCktPnAgKz0gZHVrX192YWxfbGVuOyBcCisJ fSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JXX1dSSVRFX1JBV19IQlVGRkVSKHRocixid19jdHgs dmFsKSBkbyB7IFwKKwkJZHVrX3NpemVfdCBkdWtfX3ZhbF9sZW47IFwKKwkJZHVrX192YWxfbGVu ID0gRFVLX0hCVUZGRVJfR0VUX1NJWkUoKHZhbCkpOyBcCisJCWR1a19tZW1jcHlfdW5zYWZlKCh2 b2lkICopICgoYndfY3R4KS0+cCksIChjb25zdCB2b2lkICopIERVS19IQlVGRkVSX0dFVF9EQVRB X1BUUigodGhyKS0+aGVhcCwgKHZhbCkpLCBkdWtfX3ZhbF9sZW4pOyBcCisJCShid19jdHgpLT5w ICs9IGR1a19fdmFsX2xlbjsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19CV19XUklURV9S QVdfSEJVRkZFUl9GSVhFRCh0aHIsYndfY3R4LHZhbCkgZG8geyBcCisJCWR1a19zaXplX3QgZHVr X192YWxfbGVuOyBcCisJCWR1a19fdmFsX2xlbiA9IERVS19IQlVGRkVSX0ZJWEVEX0dFVF9TSVpF KCh2YWwpKTsgXAorCQlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSAoKGJ3X2N0eCktPnApLCAo Y29uc3Qgdm9pZCAqKSBEVUtfSEJVRkZFUl9GSVhFRF9HRVRfREFUQV9QVFIoKHRociktPmhlYXAs ICh2YWwpKSwgZHVrX192YWxfbGVuKTsgXAorCQkoYndfY3R4KS0+cCArPSBkdWtfX3ZhbF9sZW47 IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQldfV1JJVEVfUkFXX0hCVUZGRVJfRFlOQU1J Qyh0aHIsYndfY3R4LHZhbCkgZG8geyBcCisJCWR1a19zaXplX3QgZHVrX192YWxfbGVuOyBcCisJ CWR1a19fdmFsX2xlbiA9IERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX1NJWkUoKHZhbCkpOyBcCisJ CWR1a19tZW1jcHlfdW5zYWZlKCh2b2lkICopICgoYndfY3R4KS0+cCksIChjb25zdCB2b2lkICop IERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX0RBVEFfUFRSKCh0aHIpLT5oZWFwLCAodmFsKSksIGR1 a19fdmFsX2xlbik7IFwKKwkJKGJ3X2N0eCktPnAgKz0gZHVrX192YWxfbGVuOyBcCisJfSB3aGls ZSAoMCkKKworLyogQXBwZW5kIGJ5dGVzIGZyb20gYSBzbGljZSBhbHJlYWR5IGluIHRoZSBidWZm ZXIuICovCisjZGVmaW5lIERVS19CV19XUklURV9SQVdfU0xJQ0UodGhyLGJ3LGRzdF9vZmYsZHN0 X2xlbikgXAorCWR1a19id193cml0ZV9yYXdfc2xpY2UoKHRociksIChidyksIChkc3Rfb2ZmKSwg KGRzdF9sZW4pKQorCisvKiBJbnNlcnQgYnl0ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVy IGZyb20gYW4gZXh0ZXJuYWwgYnVmZmVyLiAqLworI2RlZmluZSBEVUtfQldfSU5TRVJUX1JBV19C WVRFUyh0aHIsYncsZHN0X29mZixidWYsbGVuKSBcCisJZHVrX2J3X2luc2VydF9yYXdfYnl0ZXMo KHRociksIChidyksIChkc3Rfb2ZmKSwgKGJ1ZiksIChsZW4pKQorCisvKiBJbnNlcnQgYnl0ZXMg aW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyIGZyb20gYSBzbGljZSBhbHJlYWR5CisgKiBpbiB0 aGUgYnVmZmVyLiAgU291cmNlIG9mZnNldCBpcyBpbnRlcnByZXRlZCAiYmVmb3JlIiB0aGUgb3Bl cmF0aW9uLgorICovCisjZGVmaW5lIERVS19CV19JTlNFUlRfUkFXX1NMSUNFKHRocixidyxkc3Rf b2ZmLHNyY19vZmYsbGVuKSBcCisJZHVrX2J3X2luc2VydF9yYXdfc2xpY2UoKHRociksIChidyks IChkc3Rfb2ZmKSwgKHNyY19vZmYpLCAobGVuKSkKKworLyogSW5zZXJ0IGEgcmVzZXJ2ZWQgYXJl YSBzb21ld2hlcmUgaW4gdGhlIGJ1ZmZlcjsgY2FsbGVyIGZpbGxzIGl0LgorICogRXZhbHVhdGVz IHRvIGEgKGR1a191aW50X3QgKikgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByZXNlcnZl ZAorICogYXJlYSBmb3IgY29udmVuaWVuY2UuCisgKi8KKyNkZWZpbmUgRFVLX0JXX0lOU0VSVF9S QVdfQVJFQSh0aHIsYncsb2ZmLGxlbikgXAorCWR1a19id19pbnNlcnRfcmF3X2FyZWEoKHRociks IChidyksIChvZmYpLCAobGVuKSkKKworLyogUmVtb3ZlIGEgc2xpY2UgZnJvbSBpbnNpZGUgYnVm ZmVyLiAqLworI2RlZmluZSBEVUtfQldfUkVNT1ZFX1JBV19TTElDRSh0aHIsYncsb2ZmLGxlbikg XAorCWR1a19id19yZW1vdmVfcmF3X3NsaWNlKCh0aHIpLCAoYncpLCAob2ZmKSwgKGxlbikpCisK Ky8qIFNhZmUgd3JpdGUgY2FsbHMgd2hpY2ggd2lsbCBlbnN1cmUgc3BhY2UgZmlyc3QuICovCisK KyNkZWZpbmUgRFVLX0JXX1dSSVRFX0VOU1VSRV9VOCh0aHIsYndfY3R4LHZhbCkgZG8geyBcCisJ CURVS19CV19FTlNVUkUoKHRociksIChid19jdHgpLCAxKTsgXAorCQlEVUtfQldfV1JJVEVfUkFX X1U4KCh0aHIpLCAoYndfY3R4KSwgKHZhbCkpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVL X0JXX1dSSVRFX0VOU1VSRV9VOF8yKHRocixid19jdHgsdmFsMSx2YWwyKSBkbyB7IFwKKwkJRFVL X0JXX0VOU1VSRSgodGhyKSwgKGJ3X2N0eCksIDIpOyBcCisJCURVS19CV19XUklURV9SQVdfVThf MigodGhyKSwgKGJ3X2N0eCksICh2YWwxKSwgKHZhbDIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVm aW5lIERVS19CV19XUklURV9FTlNVUkVfVThfMyh0aHIsYndfY3R4LHZhbDEsdmFsMix2YWwzKSBk byB7IFwKKwkJRFVLX0JXX0VOU1VSRSgodGhyKSwgKGJ3X2N0eCksIDMpOyBcCisJCURVS19CV19X UklURV9SQVdfVThfMygodGhyKSwgKGJ3X2N0eCksICh2YWwxKSwgKHZhbDIpLCAodmFsMykpOyBc CisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JXX1dSSVRFX0VOU1VSRV9VOF80KHRocixid19j dHgsdmFsMSx2YWwyLHZhbDMsdmFsNCkgZG8geyBcCisJCURVS19CV19FTlNVUkUoKHRociksIChi d19jdHgpLCA0KTsgXAorCQlEVUtfQldfV1JJVEVfUkFXX1U4XzQoKHRociksIChid19jdHgpLCAo dmFsMSksICh2YWwyKSwgKHZhbDMpLCAodmFsNCkpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUg RFVLX0JXX1dSSVRFX0VOU1VSRV9VOF81KHRocixid19jdHgsdmFsMSx2YWwyLHZhbDMsdmFsNCx2 YWw1KSBkbyB7IFwKKwkJRFVLX0JXX0VOU1VSRSgodGhyKSwgKGJ3X2N0eCksIDUpOyBcCisJCURV S19CV19XUklURV9SQVdfVThfNSgodGhyKSwgKGJ3X2N0eCksICh2YWwxKSwgKHZhbDIpLCAodmFs MyksICh2YWw0KSwgKHZhbDUpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19CV19XUklU RV9FTlNVUkVfVThfNih0aHIsYndfY3R4LHZhbDEsdmFsMix2YWwzLHZhbDQsdmFsNSx2YWw2KSBk byB7IFwKKwkJRFVLX0JXX0VOU1VSRSgodGhyKSwgKGJ3X2N0eCksIDYpOyBcCisJCURVS19CV19X UklURV9SQVdfVThfNigodGhyKSwgKGJ3X2N0eCksICh2YWwxKSwgKHZhbDIpLCAodmFsMyksICh2 YWw0KSwgKHZhbDUpLCAodmFsNikpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JXX1dS SVRFX0VOU1VSRV9YVVRGOCh0aHIsYndfY3R4LGNwKSBkbyB7IFwKKwkJRFVLX0JXX0VOU1VSRSgo dGhyKSwgKGJ3X2N0eCksIERVS19VTklDT0RFX01BWF9YVVRGOF9MRU5HVEgpOyBcCisJCURVS19C V19XUklURV9SQVdfWFVURjgoKHRociksIChid19jdHgpLCAoY3ApKTsgXAorCX0gd2hpbGUgKDAp CisjZGVmaW5lIERVS19CV19XUklURV9FTlNVUkVfQ0VTVTgodGhyLGJ3X2N0eCxjcCkgZG8geyBc CisJCURVS19CV19FTlNVUkUoKHRociksIChid19jdHgpLCBEVUtfVU5JQ09ERV9NQVhfQ0VTVThf TEVOR1RIKTsgXAorCQlEVUtfQldfV1JJVEVfUkFXX0NFU1U4KCh0aHIpLCAoYndfY3R4KSwgKGNw KSk7IFwKKwl9IHdoaWxlICgwKQorLyogWFhYOiBhZGQgdGVtcG9yYXJ5IGR1a19fcCBwb2ludGVy IGhlcmUgdG9vOyBzaGFyaW5nICovCisvKiBYWFg6IGF2b2lkIHVuc2FmZSAqLworI2RlZmluZSBE VUtfQldfV1JJVEVfRU5TVVJFX0JZVEVTKHRocixid19jdHgsdmFscHRyLHZhbHN6KSBkbyB7IFwK KwkJY29uc3Qgdm9pZCAqZHVrX192YWxwdHI7IFwKKwkJZHVrX3NpemVfdCBkdWtfX3ZhbHN6OyBc CisJCWR1a19fdmFscHRyID0gKGNvbnN0IHZvaWQgKikgKHZhbHB0cik7IFwKKwkJZHVrX192YWxz eiA9IChkdWtfc2l6ZV90KSAodmFsc3opOyBcCisJCURVS19CV19FTlNVUkUoKHRociksIChid19j dHgpLCBkdWtfX3ZhbHN6KTsgXAorCQlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSAoKGJ3X2N0 eCktPnApLCBkdWtfX3ZhbHB0ciwgZHVrX192YWxzeik7IFwKKwkJKGJ3X2N0eCktPnAgKz0gZHVr X192YWxzejsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19CV19XUklURV9FTlNVUkVfQ1NU UklORyh0aHIsYndfY3R4LHZhbCkgZG8geyBcCisJCWNvbnN0IGR1a191aW50OF90ICpkdWtfX3Zh bDsgXAorCQlkdWtfc2l6ZV90IGR1a19fdmFsX2xlbjsgXAorCQlkdWtfX3ZhbCA9IChjb25zdCBk dWtfdWludDhfdCAqKSAodmFsKTsgXAorCQlkdWtfX3ZhbF9sZW4gPSBEVUtfU1RSTEVOKChjb25z dCBjaGFyICopIGR1a19fdmFsKTsgXAorCQlEVUtfQldfRU5TVVJFKCh0aHIpLCAoYndfY3R4KSwg ZHVrX192YWxfbGVuKTsgXAorCQlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSAoKGJ3X2N0eCkt PnApLCAoY29uc3Qgdm9pZCAqKSBkdWtfX3ZhbCwgZHVrX192YWxfbGVuKTsgXAorCQkoYndfY3R4 KS0+cCArPSBkdWtfX3ZhbF9sZW47IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQldfV1JJ VEVfRU5TVVJFX0hTVFJJTkcodGhyLGJ3X2N0eCx2YWwpIGRvIHsgXAorCQlkdWtfc2l6ZV90IGR1 a19fdmFsX2xlbjsgXAorCQlkdWtfX3ZhbF9sZW4gPSBEVUtfSFNUUklOR19HRVRfQllURUxFTigo dmFsKSk7IFwKKwkJRFVLX0JXX0VOU1VSRSgodGhyKSwgKGJ3X2N0eCksIGR1a19fdmFsX2xlbik7 IFwKKwkJZHVrX21lbWNweV91bnNhZmUoKHZvaWQgKikgKChid19jdHgpLT5wKSwgKGNvbnN0IHZv aWQgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoKHZhbCkpLCBkdWtfX3ZhbF9sZW4pOyBcCisJCShi d19jdHgpLT5wICs9IGR1a19fdmFsX2xlbjsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19C V19XUklURV9FTlNVUkVfSEJVRkZFUih0aHIsYndfY3R4LHZhbCkgZG8geyBcCisJCWR1a19zaXpl X3QgZHVrX192YWxfbGVuOyBcCisJCWR1a19fdmFsX2xlbiA9IERVS19IQlVGRkVSX0dFVF9TSVpF KCh2YWwpKTsgXAorCQlEVUtfQldfRU5TVVJFKCh0aHIpLCAoYndfY3R4KSwgZHVrX192YWxfbGVu KTsgXAorCQlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSAoKGJ3X2N0eCktPnApLCAoY29uc3Qg dm9pZCAqKSBEVUtfSEJVRkZFUl9HRVRfREFUQV9QVFIoKHRociktPmhlYXAsICh2YWwpKSwgZHVr X192YWxfbGVuKTsgXAorCQkoYndfY3R4KS0+cCArPSBkdWtfX3ZhbF9sZW47IFwKKwl9IHdoaWxl ICgwKQorI2RlZmluZSBEVUtfQldfV1JJVEVfRU5TVVJFX0hCVUZGRVJfRklYRUQodGhyLGJ3X2N0 eCx2YWwpIGRvIHsgXAorCQlkdWtfc2l6ZV90IGR1a19fdmFsX2xlbjsgXAorCQlkdWtfX3ZhbF9s ZW4gPSBEVUtfSEJVRkZFUl9GSVhFRF9HRVRfU0laRSgodmFsKSk7IFwKKwkJRFVLX0JXX0VOU1VS RSgodGhyKSwgKGJ3X2N0eCksIGR1a19fdmFsX2xlbik7IFwKKwkJZHVrX21lbWNweV91bnNhZmUo KHZvaWQgKikgKChid19jdHgpLT5wKSwgKGNvbnN0IHZvaWQgKikgRFVLX0hCVUZGRVJfRklYRURf R0VUX0RBVEFfUFRSKCh0aHIpLT5oZWFwLCAodmFsKSksIGR1a19fdmFsX2xlbik7IFwKKwkJKGJ3 X2N0eCktPnAgKz0gZHVrX192YWxfbGVuOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0JX X1dSSVRFX0VOU1VSRV9IQlVGRkVSX0RZTkFNSUModGhyLGJ3X2N0eCx2YWwpIGRvIHsgXAorCQlk dWtfc2l6ZV90IGR1a19fdmFsX2xlbjsgXAorCQlkdWtfX3ZhbF9sZW4gPSBEVUtfSEJVRkZFUl9E WU5BTUlDX0dFVF9TSVpFKCh2YWwpKTsgXAorCQlEVUtfQldfRU5TVVJFKCh0aHIpLCAoYndfY3R4 KSwgZHVrX192YWxfbGVuKTsgXAorCQlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSAoKGJ3X2N0 eCktPnApLCAoY29uc3Qgdm9pZCAqKSBEVUtfSEJVRkZFUl9EWU5BTUlDX0dFVF9EQVRBX1BUUigo dGhyKS0+aGVhcCwgKHZhbCkpLCBkdWtfX3ZhbF9sZW4pOyBcCisJCShid19jdHgpLT5wICs9IGR1 a19fdmFsX2xlbjsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX0JXX1dSSVRFX0VOU1VS RV9TTElDRSh0aHIsYncsZHN0X29mZixkc3RfbGVuKSBcCisJZHVrX2J3X3dyaXRlX2Vuc3VyZV9z bGljZSgodGhyKSwgKGJ3KSwgKGRzdF9vZmYpLCAoZHN0X2xlbikpCisjZGVmaW5lIERVS19CV19J TlNFUlRfRU5TVVJFX0JZVEVTKHRocixidyxkc3Rfb2ZmLGJ1ZixsZW4pIFwKKwlkdWtfYndfaW5z ZXJ0X2Vuc3VyZV9ieXRlcygodGhyKSwgKGJ3KSwgKGRzdF9vZmYpLCAoYnVmKSwgKGxlbikpCisj ZGVmaW5lIERVS19CV19JTlNFUlRfRU5TVVJFX1NMSUNFKHRocixidyxkc3Rfb2ZmLHNyY19vZmYs bGVuKSBcCisJZHVrX2J3X2luc2VydF9lbnN1cmVfc2xpY2UoKHRociksIChidyksIChkc3Rfb2Zm KSwgKHNyY19vZmYpLCAobGVuKSkKKyNkZWZpbmUgRFVLX0JXX0lOU0VSVF9FTlNVUkVfQVJFQSh0 aHIsYncsb2ZmLGxlbikgXAorCS8qIEV2YWx1YXRlcyB0byAoZHVrX3VpbnQ4X3QgKikgcG9pbnRp bmcgdG8gc3RhcnQgb2YgYXJlYS4gKi8gXAorCWR1a19id19pbnNlcnRfZW5zdXJlX2FyZWEoKHRo ciksIChidyksIChvZmYpLCAobGVuKSkKKyNkZWZpbmUgRFVLX0JXX1JFTU9WRV9FTlNVUkVfU0xJ Q0UodGhyLGJ3LG9mZixsZW4pIFwKKwkvKiBObyBkaWZmZXJlbmNlIGJldHdlZW4gcmF3L2Vuc3Vy ZSBiZWNhdXNlIHRoZSBidWZmZXIgc2hyaW5rcy4gKi8gXAorCURVS19CV19SRU1PVkVfUkFXX1NM SUNFKCh0aHIpLCAoYncpLCAob2ZmKSwgKGxlbikpCisKKy8qCisgKiAgRXh0ZXJucyBhbmQgcHJv dG90eXBlcworICovCisKKyNpZiAhZGVmaW5lZChEVUtfU0lOR0xFX0ZJTEUpCitEVUtfSU5URVJO QUxfREVDTCBjb25zdCBkdWtfdWludDhfdCBkdWtfbGNfZGlnaXRzWzM2XTsKK0RVS19JTlRFUk5B TF9ERUNMIGNvbnN0IGR1a191aW50OF90IGR1a191Y19ueWJibGVzWzE2XTsKK0RVS19JTlRFUk5B TF9ERUNMIGNvbnN0IGR1a19pbnQ4X3QgZHVrX2hleF9kZWN0YWJbMjU2XTsKKyNpZiBkZWZpbmVk KERVS19VU0VfSEVYX0ZBU1RQQVRIKQorRFVLX0lOVEVSTkFMX0RFQ0wgY29uc3QgZHVrX2ludDE2 X3QgZHVrX2hleF9kZWN0YWJfc2hpZnQ0WzI1Nl07CitEVUtfSU5URVJOQUxfREVDTCBjb25zdCBk dWtfdWludDE2X3QgZHVrX2hleF9lbmN0YWJbMjU2XTsKKyNlbmRpZgorI2VuZGlmICAvKiAhRFVL X1NJTkdMRV9GSUxFICovCisKKy8qIE5vdGU6IGFzc3VtZXMgdGhhdCBkdWtfdXRpbF9wcm9iZV9z dGVwcyBzaXplIGlzIDMyICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJU KQorI2lmICFkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a191 aW50OF90IGR1a191dGlsX3Byb2JlX3N0ZXBzWzMyXTsKKyNlbmRpZiAgLyogIURVS19TSU5HTEVf RklMRSAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSSEFTSF9ERU5TRSkKK0RV S19JTlRFUk5BTF9ERUNMIGR1a191aW50MzJfdCBkdWtfdXRpbF9oYXNoYnl0ZXMoY29uc3QgZHVr X3VpbnQ4X3QgKmRhdGEsIGR1a19zaXplX3QgbGVuLCBkdWtfdWludDMyX3Qgc2VlZCk7CisjZW5k aWYKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnQzMl90IGR1a19iZF9kZWNvZGUoZHVrX2Jp dGRlY29kZXJfY3R4ICpjdHgsIGR1a19zbWFsbF9pbnRfdCBiaXRzKTsKK0RVS19JTlRFUk5BTF9E RUNMIGR1a19zbWFsbF91aW50X3QgZHVrX2JkX2RlY29kZV9mbGFnKGR1a19iaXRkZWNvZGVyX2N0 eCAqY3R4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a191aW50MzJfdCBkdWtfYmRfZGVjb2RlX2Zs YWdnZWQoZHVrX2JpdGRlY29kZXJfY3R4ICpjdHgsIGR1a19zbWFsbF9pbnRfdCBiaXRzLCBkdWtf dWludDMyX3QgZGVmX3ZhbHVlKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19pbnQzMl90IGR1a19i ZF9kZWNvZGVfZmxhZ2dlZF9zaWduZWQoZHVrX2JpdGRlY29kZXJfY3R4ICpjdHgsIGR1a19zbWFs bF9pbnRfdCBiaXRzLCBkdWtfaW50MzJfdCBkZWZfdmFsdWUpOworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX3VpbnQzMl90IGR1a19iZF9kZWNvZGVfdmFydWludChkdWtfYml0ZGVjb2Rlcl9jdHggKmN0 eCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfc21hbGxfdWludF90IGR1a19iZF9kZWNvZGVfYml0 cGFja2VkX3N0cmluZyhkdWtfYml0ZGVjb2Rlcl9jdHggKmJkLCBkdWtfdWludDhfdCAqb3V0KTsK KworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfYmVfZW5jb2RlKGR1a19iaXRlbmNvZGVyX2N0 eCAqY3R4LCBkdWtfdWludDMyX3QgZGF0YSwgZHVrX3NtYWxsX2ludF90IGJpdHMpOworRFVLX0lO VEVSTkFMX0RFQ0wgdm9pZCBkdWtfYmVfZmluaXNoKGR1a19iaXRlbmNvZGVyX2N0eCAqY3R4KTsK KworI2lmICFkZWZpbmVkKERVS19VU0VfR0VUX1JBTkRPTV9ET1VCTEUpCitEVUtfSU5URVJOQUxf REVDTCBkdWtfZG91YmxlX3QgZHVrX3V0aWxfdGlueXJhbmRvbV9nZXRfZG91YmxlKGR1a19odGhy ZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfdXRpbF90aW55cmFuZG9tX3By ZXBhcmVfc2VlZChkdWtfaHRocmVhZCAqdGhyKTsKKyNlbmRpZgorCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19id19pbml0KGR1a19odGhyZWFkICp0aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpi d19jdHgsIGR1a19oYnVmZmVyX2R5bmFtaWMgKmhfYnVmKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZv aWQgZHVrX2J3X2luaXRfcHVzaGJ1ZihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0 eCAqYndfY3R4LCBkdWtfc2l6ZV90IGJ1Zl9zaXplKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a191 aW50OF90ICpkdWtfYndfcmVzaXplKGR1a19odGhyZWFkICp0aHIsIGR1a19idWZ3cml0ZXJfY3R4 ICpid19jdHgsIGR1a19zaXplX3Qgc3opOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfYndf Y29tcGFjdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYndfY3R4KTsKK0RV S19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2J3X3dyaXRlX3Jhd19zbGljZShkdWtfaHRocmVhZCAq dGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYncsIGR1a19zaXplX3Qgc3JjX29mZiwgZHVrX3NpemVf dCBsZW4pOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfYndfd3JpdGVfZW5zdXJlX3NsaWNl KGR1a19odGhyZWFkICp0aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpidywgZHVrX3NpemVfdCBzcmNf b2ZmLCBkdWtfc2l6ZV90IGxlbik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19id19pbnNl cnRfcmF3X2J5dGVzKGR1a19odGhyZWFkICp0aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpidywgZHVr X3NpemVfdCBkc3Rfb2ZmLCBjb25zdCBkdWtfdWludDhfdCAqYnVmLCBkdWtfc2l6ZV90IGxlbik7 CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19id19pbnNlcnRfZW5zdXJlX2J5dGVzKGR1a19o dGhyZWFkICp0aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpidywgZHVrX3NpemVfdCBkc3Rfb2ZmLCBj b25zdCBkdWtfdWludDhfdCAqYnVmLCBkdWtfc2l6ZV90IGxlbik7CitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19id19pbnNlcnRfcmF3X3NsaWNlKGR1a19odGhyZWFkICp0aHIsIGR1a19idWZ3 cml0ZXJfY3R4ICpidywgZHVrX3NpemVfdCBkc3Rfb2ZmLCBkdWtfc2l6ZV90IHNyY19vZmYsIGR1 a19zaXplX3QgbGVuKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2J3X2luc2VydF9lbnN1 cmVfc2xpY2UoZHVrX2h0aHJlYWQgKnRociwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3LCBkdWtfc2l6 ZV90IGRzdF9vZmYsIGR1a19zaXplX3Qgc3JjX29mZiwgZHVrX3NpemVfdCBsZW4pOworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX3VpbnQ4X3QgKmR1a19id19pbnNlcnRfcmF3X2FyZWEoZHVrX2h0aHJl YWQgKnRociwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3LCBkdWtfc2l6ZV90IG9mZiwgZHVrX3NpemVf dCBsZW4pOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnQ4X3QgKmR1a19id19pbnNlcnRfZW5z dXJlX2FyZWEoZHVrX2h0aHJlYWQgKnRociwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3LCBkdWtfc2l6 ZV90IG9mZiwgZHVrX3NpemVfdCBsZW4pOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfYndf cmVtb3ZlX3Jhd19zbGljZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYncs IGR1a19zaXplX3Qgb2ZmLCBkdWtfc2l6ZV90IGxlbik7CisvKiBObyBkdWtfYndfcmVtb3ZlX2Vu c3VyZV9zbGljZSgpLCBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGlkZW50aWNhbC4gKi8KKworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnQxNl90IGR1a19yYXdfcmVhZF91MTZfYmUoZHVrX3VpbnQ4 X3QgKipwKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a191aW50MzJfdCBkdWtfcmF3X3JlYWRfdTMy X2JlKGR1a191aW50OF90ICoqcCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfZG91YmxlX3QgZHVr X3Jhd19yZWFkX2RvdWJsZV9iZShkdWtfdWludDhfdCAqKnApOworRFVLX0lOVEVSTkFMX0RFQ0wg dm9pZCBkdWtfcmF3X3dyaXRlX3UxNl9iZShkdWtfdWludDhfdCAqKnAsIGR1a191aW50MTZfdCB2 YWwpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmF3X3dyaXRlX3UzMl9iZShkdWtfdWlu dDhfdCAqKnAsIGR1a191aW50MzJfdCB2YWwpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtf cmF3X3dyaXRlX2RvdWJsZV9iZShkdWtfdWludDhfdCAqKnAsIGR1a19kb3VibGVfdCB2YWwpOwor CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpICAvKiBGb3Igbm93IG9ubHkg bmVlZGVkIGJ5IHRoZSBkZWJ1Z2dlci4gKi8KK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2J5 dGVzd2FwX2J5dGVzKGR1a191aW50OF90ICpwLCBkdWtfc21hbGxfdWludF90IGxlbik7CisjZW5k aWYKKworLyogbWVtY3B5KCksIG1lbW1vdmUoKSBldGMgd3JhcHBlcnMuICBUaGUgcGxhaW4gdmFy aWFudHMgbGlrZSBkdWtfbWVtY3B5KCkKKyAqIGFzc3VtZSBDOTkrIGFuZCAnc3JjJyBhbmQgJ2Rz dCcgcG9pbnRlcnMgbXVzdCBiZSBub24tTlVMTCBldmVuIHdoZW4gdGhlCisgKiBvcGVyYXRpb24g c2l6ZSBpcyB6ZXJvLiAgVGhlIHVuc2FmZSB2YXJpYW50cyBsaWtlIGR1a19tZW1jcHlfc2FmZSgp IGRlYWwKKyAqIHdpdGggdGhlIHplcm8gc2l6ZSBjYXNlIGV4cGxpY2l0bHksIGFuZCBhbGxvdyBO VUxMIHBvaW50ZXJzIGluIHRoYXQgY2FzZQorICogKHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlv ciBpbiBDOTkrKS4gIEZvciB0aGUgbWFqb3JpdHkgb2YgYWN0dWFsIHRhcmdldHMKKyAqIGEgTlVM TCBwb2ludGVyIHdpdGggYSB6ZXJvIGxlbmd0aCBpcyBmaW5lIGluIHByYWN0aWNlLiAgVGhlc2Ug d3JhcHBlcnMgYXJlCisgKiBtYWNyb3MgdG8gZm9yY2UgaW5saW5pbmc7IGJlY2F1c2UgdGhlcmUg YXJlIGh1bmRyZWRzIG9mIGNhbGwgc2l0ZXMsIGV2ZW4gYQorICogZmV3IGV4dHJhIGJ5dGVzIHBl ciBjYWxsIHNpdGUgYWRkcyB1cCB0byB+MWtCIGZvb3RwcmludC4KKyAqLworI2lmIGRlZmluZWQo RFVLX1VTRV9BTExPV19VTkRFRklORURfQkVIQVZJT1IpCisjZGVmaW5lIGR1a19tZW1jcHkoZHN0 LHNyYyxsZW4pICBkbyB7IFwKKwkJdm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQljb25zdCB2 b2lkICpkdWtfX3NyYyA9IChzcmMpOyBcCisJCWR1a19zaXplX3QgZHVrX19sZW4gPSAobGVuKTsg XAorCQlEVUtfQVNTRVJUKGR1a19fZHN0ICE9IE5VTEwgfHwgZHVrX19sZW4gPT0gMFUpOyBcCisJ CURVS19BU1NFUlQoZHVrX19zcmMgIT0gTlVMTCB8fCBkdWtfX2xlbiA9PSAwVSk7IFwKKwkJKHZv aWQpIERVS19NRU1DUFkoZHVrX19kc3QsIGR1a19fc3JjLCAoc2l6ZV90KSBkdWtfX2xlbik7IFwK Kwl9IHdoaWxlICgwKQorI2RlZmluZSBkdWtfbWVtY3B5X3Vuc2FmZShkc3Qsc3JjLGxlbikgIGR1 a19tZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSkKKyNkZWZpbmUgZHVrX21lbW1vdmUoZHN0LHNy YyxsZW4pICBkbyB7IFwKKwkJdm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQljb25zdCB2b2lk ICpkdWtfX3NyYyA9IChzcmMpOyBcCisJCWR1a19zaXplX3QgZHVrX19sZW4gPSAobGVuKTsgXAor CQlEVUtfQVNTRVJUKGR1a19fZHN0ICE9IE5VTEwgfHwgZHVrX19sZW4gPT0gMFUpOyBcCisJCURV S19BU1NFUlQoZHVrX19zcmMgIT0gTlVMTCB8fCBkdWtfX2xlbiA9PSAwVSk7IFwKKwkJKHZvaWQp IERVS19NRU1NT1ZFKGR1a19fZHN0LCBkdWtfX3NyYywgKHNpemVfdCkgZHVrX19sZW4pOyBcCisJ fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVrX21lbW1vdmVfdW5zYWZlKGRzdCxzcmMsbGVuKSAgZHVr X21lbW1vdmUoKGRzdCksIChzcmMpLCAobGVuKSkKKyNkZWZpbmUgZHVrX21lbXNldChkc3QsdmFs LGxlbikgIGRvIHsgXAorCQl2b2lkICpkdWtfX2RzdCA9IChkc3QpOyBcCisJCWR1a19zbWFsbF9p bnRfdCBkdWtfX3ZhbCA9ICh2YWwpOyBcCisJCWR1a19zaXplX3QgZHVrX19sZW4gPSAobGVuKTsg XAorCQlEVUtfQVNTRVJUKGR1a19fZHN0ICE9IE5VTEwgfHwgZHVrX19sZW4gPT0gMFUpOyBcCisJ CSh2b2lkKSBEVUtfTUVNU0VUKGR1a19fZHN0LCBkdWtfX3ZhbCwgKHNpemVfdCkgZHVrX19sZW4p OyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVrX21lbXNldF91bnNhZmUoZHN0LHZhbCxsZW4p ICBkdWtfbWVtc2V0KChkc3QpLCAodmFsKSwgKGxlbikpCisjZGVmaW5lIGR1a19tZW16ZXJvKGRz dCxsZW4pICBkbyB7IFwKKwkJdm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQlkdWtfc2l6ZV90 IGR1a19fbGVuID0gKGxlbik7IFwKKwkJRFVLX0FTU0VSVChkdWtfX2RzdCAhPSBOVUxMIHx8IGR1 a19fbGVuID09IDBVKTsgXAorCQkodm9pZCkgRFVLX01FTVpFUk8oZHVrX19kc3QsIChzaXplX3Qp IGR1a19fbGVuKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGR1a19tZW16ZXJvX3Vuc2FmZShk c3QsbGVuKSAgZHVrX21lbXplcm8oKGRzdCksIChsZW4pKQorI2Vsc2UgIC8qIERVS19VU0VfQUxM T1dfVU5ERUZJTkVEX0JFSEFWSU9SICovCisjZGVmaW5lIGR1a19tZW1jcHkoZHN0LHNyYyxsZW4p ICBkbyB7IFwKKwkJdm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQljb25zdCB2b2lkICpkdWtf X3NyYyA9IChzcmMpOyBcCisJCWR1a19zaXplX3QgZHVrX19sZW4gPSAobGVuKTsgXAorCQlEVUtf QVNTRVJUKGR1a19fZHN0ICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoZHVrX19zcmMgIT0gTlVM TCk7IFwKKwkJKHZvaWQpIERVS19NRU1DUFkoZHVrX19kc3QsIGR1a19fc3JjLCAoc2l6ZV90KSBk dWtfX2xlbik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBkdWtfbWVtY3B5X3Vuc2FmZShkc3Qs c3JjLGxlbikgIGRvIHsgXAorCQl2b2lkICpkdWtfX2RzdCA9IChkc3QpOyBcCisJCWNvbnN0IHZv aWQgKmR1a19fc3JjID0gKHNyYyk7IFwKKwkJZHVrX3NpemVfdCBkdWtfX2xlbiA9IChsZW4pOyBc CisJCURVS19BU1NFUlQoZHVrX19kc3QgIT0gTlVMTCB8fCBkdWtfX2xlbiA9PSAwVSk7IFwKKwkJ RFVLX0FTU0VSVChkdWtfX3NyYyAhPSBOVUxMIHx8IGR1a19fbGVuID09IDBVKTsgXAorCQlpZiAo RFVLX0xJS0VMWShkdWtfX2xlbiA+IDBVKSkgeyBcCisJCQlEVUtfQVNTRVJUKGR1a19fZHN0ICE9 IE5VTEwpOyBcCisJCQlEVUtfQVNTRVJUKGR1a19fc3JjICE9IE5VTEwpOyBcCisJCQkodm9pZCkg RFVLX01FTUNQWShkdWtfX2RzdCwgZHVrX19zcmMsIChzaXplX3QpIGR1a19fbGVuKTsgXAorCQl9 IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBkdWtfbWVtbW92ZShkc3Qsc3JjLGxlbikgIGRvIHsg XAorCQl2b2lkICpkdWtfX2RzdCA9IChkc3QpOyBcCisJCWNvbnN0IHZvaWQgKmR1a19fc3JjID0g KHNyYyk7IFwKKwkJZHVrX3NpemVfdCBkdWtfX2xlbiA9IChsZW4pOyBcCisJCURVS19BU1NFUlQo ZHVrX19kc3QgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVChkdWtfX3NyYyAhPSBOVUxMKTsgXAor CQkodm9pZCkgRFVLX01FTU1PVkUoZHVrX19kc3QsIGR1a19fc3JjLCAoc2l6ZV90KSBkdWtfX2xl bik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBkdWtfbWVtbW92ZV91bnNhZmUoZHN0LHNyYyxs ZW4pICBkbyB7IFwKKwkJdm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQljb25zdCB2b2lkICpk dWtfX3NyYyA9IChzcmMpOyBcCisJCWR1a19zaXplX3QgZHVrX19sZW4gPSAobGVuKTsgXAorCQlE VUtfQVNTRVJUKGR1a19fZHN0ICE9IE5VTEwgfHwgZHVrX19sZW4gPT0gMFUpOyBcCisJCURVS19B U1NFUlQoZHVrX19zcmMgIT0gTlVMTCB8fCBkdWtfX2xlbiA9PSAwVSk7IFwKKwkJaWYgKERVS19M SUtFTFkoZHVrX19sZW4gPiAwVSkpIHsgXAorCQkJRFVLX0FTU0VSVChkdWtfX2RzdCAhPSBOVUxM KTsgXAorCQkJRFVLX0FTU0VSVChkdWtfX3NyYyAhPSBOVUxMKTsgXAorCQkJKHZvaWQpIERVS19N RU1NT1ZFKGR1a19fZHN0LCBkdWtfX3NyYywgKHNpemVfdCkgZHVrX19sZW4pOyBcCisJCX0gXAor CX0gd2hpbGUgKDApCisjZGVmaW5lIGR1a19tZW1zZXQoZHN0LHZhbCxsZW4pICBkbyB7IFwKKwkJ dm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQlkdWtfc21hbGxfaW50X3QgZHVrX192YWwgPSAo dmFsKTsgXAorCQlkdWtfc2l6ZV90IGR1a19fbGVuID0gKGxlbik7IFwKKwkJRFVLX0FTU0VSVChk dWtfX2RzdCAhPSBOVUxMKTsgXAorCQkodm9pZCkgRFVLX01FTVNFVChkdWtfX2RzdCwgZHVrX192 YWwsIChzaXplX3QpIGR1a19fbGVuKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGR1a19tZW1z ZXRfdW5zYWZlKGRzdCx2YWwsbGVuKSAgZG8geyBcCisJCXZvaWQgKmR1a19fZHN0ID0gKGRzdCk7 IFwKKwkJZHVrX3NtYWxsX2ludF90IGR1a19fdmFsID0gKHZhbCk7IFwKKwkJZHVrX3NpemVfdCBk dWtfX2xlbiA9IChsZW4pOyBcCisJCURVS19BU1NFUlQoZHVrX19kc3QgIT0gTlVMTCB8fCBkdWtf X2xlbiA9PSAwVSk7IFwKKwkJaWYgKERVS19MSUtFTFkoZHVrX19sZW4gPiAwVSkpIHsgXAorCQkJ RFVLX0FTU0VSVChkdWtfX2RzdCAhPSBOVUxMKTsgXAorCQkJKHZvaWQpIERVS19NRU1TRVQoZHVr X19kc3QsIGR1a19fdmFsLCAoc2l6ZV90KSBkdWtfX2xlbik7IFwKKwkJfSBcCisJfSB3aGlsZSAo MCkKKyNkZWZpbmUgZHVrX21lbXplcm8oZHN0LGxlbikgIGRvIHsgXAorCQl2b2lkICpkdWtfX2Rz dCA9IChkc3QpOyBcCisJCWR1a19zaXplX3QgZHVrX19sZW4gPSAobGVuKTsgXAorCQlEVUtfQVNT RVJUKGR1a19fZHN0ICE9IE5VTEwpOyBcCisJCSh2b2lkKSBEVUtfTUVNWkVSTyhkdWtfX2RzdCwg KHNpemVfdCkgZHVrX19sZW4pOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVrX21lbXplcm9f dW5zYWZlKGRzdCxsZW4pICBkbyB7IFwKKwkJdm9pZCAqZHVrX19kc3QgPSAoZHN0KTsgXAorCQlk dWtfc2l6ZV90IGR1a19fbGVuID0gKGxlbik7IFwKKwkJRFVLX0FTU0VSVChkdWtfX2RzdCAhPSBO VUxMIHx8IGR1a19fbGVuID09IDBVKTsgXAorCQlpZiAoRFVLX0xJS0VMWShkdWtfX2xlbiA+IDBV KSkgeyBcCisJCQlEVUtfQVNTRVJUKGR1a19fZHN0ICE9IE5VTEwpOyBcCisJCQkodm9pZCkgRFVL X01FTVpFUk8oZHVrX19kc3QsIChzaXplX3QpIGR1a19fbGVuKTsgXAorCQl9IFwKKwl9IHdoaWxl ICgwKQorI2VuZGlmICAvKiBEVUtfVVNFX0FMTE9XX1VOREVGSU5FRF9CRUhBVklPUiAqLworCitE VUtfSU5URVJOQUxfREVDTCBkdWtfc21hbGxfaW50X3QgZHVrX21lbWNtcChjb25zdCB2b2lkICpz MSwgY29uc3Qgdm9pZCAqczIsIGR1a19zaXplX3QgbGVuKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19zbWFsbF9pbnRfdCBkdWtfbWVtY21wX3Vuc2FmZShjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9p ZCAqczIsIGR1a19zaXplX3QgbGVuKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBk dWtfaXNfd2hvbGVfZ2V0X2ludDMyX25vbmVnemVybyhkdWtfZG91YmxlX3QgeCwgZHVrX2ludDMy X3QgKml2YWwpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfd2hvbGVfZ2V0 X2ludDMyKGR1a19kb3VibGVfdCB4LCBkdWtfaW50MzJfdCAqaXZhbCk7CitEVUtfSU5URVJOQUxf REVDTCBkdWtfYm9vbF90IGR1a19kb3VibGVfaXNfYW55aW5mKGR1a19kb3VibGVfdCB4KTsKK0RV S19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2RvdWJsZV9pc19wb3NpbmYoZHVrX2RvdWJs ZV90IHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZG91YmxlX2lzX25lZ2lu ZihkdWtfZG91YmxlX3QgeCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kb3Vi bGVfaXNfbmFuKGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3Qg ZHVrX2RvdWJsZV9pc19uYW5fb3JfemVybyhkdWtfZG91YmxlX3QgeCk7CitEVUtfSU5URVJOQUxf REVDTCBkdWtfYm9vbF90IGR1a19kb3VibGVfaXNfbmFuX29yX2luZihkdWtfZG91YmxlX3QgeCk7 CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kb3VibGVfaXNfbmFuX3plcm9faW5m KGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19zbWFsbF91aW50X3QgZHVr X2RvdWJsZV9zaWduYml0KGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19k b3VibGVfdCBkdWtfZG91YmxlX3RydW5jX3Rvd2FyZHNfemVybyhkdWtfZG91YmxlX3QgeCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kb3VibGVfc2FtZV9zaWduKGR1a19kb3Vi bGVfdCB4LCBkdWtfZG91YmxlX3QgeSk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfZG91YmxlX3Qg ZHVrX2RvdWJsZV9mbWluKGR1a19kb3VibGVfdCB4LCBkdWtfZG91YmxlX3QgeSk7CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfZG91YmxlX3QgZHVrX2RvdWJsZV9mbWF4KGR1a19kb3VibGVfdCB4LCBk dWtfZG91YmxlX3QgeSk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kb3VibGVf aXNfZmluaXRlKGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3Qg ZHVrX2RvdWJsZV9pc19pbnRlZ2VyKGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19ib29sX3QgZHVrX2RvdWJsZV9pc19zYWZlX2ludGVnZXIoZHVrX2RvdWJsZV90IHgpOwor CitEVUtfSU5URVJOQUxfREVDTCBkdWtfZG91YmxlX3QgZHVrX2RvdWJsZV9kaXYoZHVrX2RvdWJs ZV90IHgsIGR1a19kb3VibGVfdCB5KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19pbnRfdCBkdWtf ZG91YmxlX3RvX2ludF90KGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a191 aW50X3QgZHVrX2RvdWJsZV90b191aW50X3QoZHVrX2RvdWJsZV90IHgpOworRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX2ludDMyX3QgZHVrX2RvdWJsZV90b19pbnQzMl90KGR1a19kb3VibGVfdCB4KTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a191aW50MzJfdCBkdWtfZG91YmxlX3RvX3VpbnQzMl90KGR1 a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19mbG9hdF90IGR1a19kb3VibGVf dG9fZmxvYXRfdChkdWtfZG91YmxlX3QgeCk7CisKKy8qCisgKiAgTWlzY2VsbGFuZW91cworICov CisKKy8qIEV4YW1wbGU6IHggICAgID0gMHgxMCA9IDBiMDAwMTAwMDAKKyAqICAgICAgICAgIHgg LSAxID0gMHgwZiA9IDBiMDAwMDExMTEKKyAqICAgICAgICAgIHggJiAoeCAtIDEpID09IDAKKyAq CisgKiAgICAgICAgICB4ICAgICA9IDB4MDcgPSAwYjAwMDAwMTExCisgKiAgICAgICAgICB4IC0g MSA9IDB4MDYgPSAwYjAwMDAwMTEwCisgKiAgICAgICAgICB4ICYgKHggLSAxKSAhPSAwCisgKgor ICogSG93ZXZlciwgaW5jb3JyZWN0bHkgdHJ1ZSBmb3IgeCA9PSAwIHNvIGNoZWNrIGZvciB0aGF0 IGV4cGxpY2l0bHkuCisgKi8KKyNkZWZpbmUgRFVLX0lTX1BPV0VSX09GX1RXTyh4KSBcCisJKCh4 KSAhPSAwVSAmJiAoKHgpICYgKCh4KSAtIDFVKSkgPT0gMFUpCisKKyNlbmRpZiAgLyogRFVLX1VU SUxfSF9JTkNMVURFRCAqLworLyogI2luY2x1ZGUgZHVrX3N0cmluZ3MuaCAqLworLyoKKyAqICBT aGFyZWQgc3RyaW5nIG1hY3Jvcy4KKyAqCisgKiAgVXNpbmcgc2hhcmVkIG1hY3JvcyBoZWxwcyBt aW5pbWl6ZSBzdHJpbmdzIGRhdGEgc2l6ZSBiZWNhdXNlIGl0J3MgZWFzeQorICogIHRvIGNoZWNr IGlmIGFuIGV4aXN0aW5nIHN0cmluZyBjb3VsZCBiZSB1c2VkLiAgU3RyaW5nIGNvbnN0YW50cyBk b24ndAorICogIG5lZWQgdG8gYmUgYWxsIGRlZmluZWQgaGVyZTsgZGVmaW5pbmcgYSBzdHJpbmcg aGVyZSBtYWtlcyBzZW5zZSBpZiB0aGVyZSdzCisgKiAgYSBoaWdoIGNoYW5jZSB0aGUgc3RyaW5n IGNvdWxkIGJlIHJldXNlZC4gIEFsc28sIHVzaW5nIG1hY3JvcyBhbGxvd3MKKyAqICBhIGNhbGwg c2l0ZSBleHByZXNzIHRoZSBleGFjdCBzdHJpbmcgbmVlZGVkLCBidXQgdGhlIG1hY3JvIG1heSBt YXAgdG8gYW4KKyAqICBhcHByb3hpbWF0ZSBzdHJpbmcgdG8gcmVkdWNlIHVuaXF1ZSBzdHJpbmcg Y291bnQuICBNYWNyb3MgY2FuIGFsc28gYmUKKyAqICBtb3JlIGVhc2lseSB0dW5lZCBmb3IgbG93 IG1lbW9yeSB0YXJnZXRzIHRoYW4gI2lmIGRlZmluZWQoKXMgdGhyb3VnaG91dAorICogIHRoZSBj b2RlIGJhc2UuCisgKgorICogIEJlY2F1c2UgZm9ybWF0IHN0cmluZ3MgYmVoYXZlIGRpZmZlcmVu dGx5IGluIHRoZSBjYWxsIHNpdGUgKHRoZXkgbmVlZCB0bworICogIGJlIGZvbGxvd2VkIGJ5IGZv cm1hdCBhcmd1bWVudHMpLCB0aGV5IHVzZSBhIHNwZWNpYWwgcHJlZml4IERVS19TVFJfRk1UXy4K KyAqCisgKiAgT24gc29tZSBjb21waWxlcnMgdXNpbmcgZXhwbGljaXQgc2hhcmVkIHN0cmluZ3Mg aXMgcHJlZmVyYWJsZTsgb24gb3RoZXJzCisgKiAgaXQgbWF5IGJlIGJldHRlciB0byB1c2Ugc3Ry YWlnaHQgbGl0ZXJhbHMgYmVjYXVzZSB0aGUgY29tcGlsZXIgd2lsbCBjb21iaW5lCisgKiAgdGhl bSBhbnl3YXksIGFuZCBzdWNoIHN0cmluZ3Mgd29uJ3QgZW5kIHVwIHVubmVjZXNzYXJpbHkgaW4g YSBzeW1ib2wgdGFibGUuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19FUlJNU0dfSF9JTkNMVURF RCkKKyNkZWZpbmUgRFVLX0VSUk1TR19IX0lOQ0xVREVECisKKy8qIE1vc3RseSBBUEkgYW5kIGJ1 aWx0LWluIG1ldGhvZCByZWxhdGVkICovCisjZGVmaW5lIERVS19TVFJfSU5URVJOQUxfRVJST1Ig ICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIgorI2RlZmluZSBEVUtfU1RSX1VOU1VQ UE9SVEVEICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCIKKyNkZWZpbmUgRFVLX1NU Ul9JTlZBTElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb3VudCIKKyNkZWZp bmUgRFVLX1NUUl9JTlZBTElEX0FSR1MgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBhcmdz IgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfU1RBVEUgICAgICAgICAgICAgICAgICAgICJpbnZh bGlkIHN0YXRlIgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfSU5QVVQgICAgICAgICAgICAgICAg ICAgICJpbnZhbGlkIGlucHV0IgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfTEVOR1RIICAgICAg ICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCIKKyNkZWZpbmUgRFVLX1NUUl9OT1RfQ09OU1RS VUNUQUJMRSAgICAgICAgICAgICAgICAibm90IGNvbnN0cnVjdGFibGUiCisjZGVmaW5lIERVS19T VFJfQ09OU1RSVUNUX09OTFkgICAgICAgICAgICAgICAgICAgImNvbnN0cnVjdG9yIHJlcXVpcmVz ICduZXcnIgorI2RlZmluZSBEVUtfU1RSX05PVF9DQUxMQUJMRSAgICAgICAgICAgICAgICAgICAg ICJub3QgY2FsbGFibGUiCisjZGVmaW5lIERVS19TVFJfTk9UX0VYVEVOU0lCTEUgICAgICAgICAg ICAgICAgICAgIm5vdCBleHRlbnNpYmxlIgorI2RlZmluZSBEVUtfU1RSX05PVF9XUklUQUJMRSAg ICAgICAgICAgICAgICAgICAgICJub3Qgd3JpdGFibGUiCisjZGVmaW5lIERVS19TVFJfTk9UX0NP TkZJR1VSQUJMRSAgICAgICAgICAgICAgICAgIm5vdCBjb25maWd1cmFibGUiCisjZGVmaW5lIERV S19TVFJfSU5WQUxJRF9DT05URVhUICAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGV4dCIK KyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0lOREVYICAgICAgICAgICAgICAgICAgICAiaW52YWxp ZCBhcmdzIgorI2RlZmluZSBEVUtfU1RSX1BVU0hfQkVZT05EX0FMTE9DX1NUQUNLICAgICAgICAg ICJjYW5ub3QgcHVzaCBiZXlvbmQgYWxsb2NhdGVkIHN0YWNrIgorI2RlZmluZSBEVUtfU1RSX05P VF9VTkRFRklORUQgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHR5cGUiCisjZGVmaW5l IERVS19TVFJfTk9UX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgdHlw ZSIKKyNkZWZpbmUgRFVLX1NUUl9OT1RfQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAidW5l eHBlY3RlZCB0eXBlIgorI2RlZmluZSBEVUtfU1RSX05PVF9OVU1CRVIgICAgICAgICAgICAgICAg ICAgICAgICJ1bmV4cGVjdGVkIHR5cGUiCisjZGVmaW5lIERVS19TVFJfTk9UX1NUUklORyAgICAg ICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgdHlwZSIKKyNkZWZpbmUgRFVLX1NUUl9OT1Rf T0JKRUNUICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCB0eXBlIgorI2RlZmluZSBE VUtfU1RSX05PVF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHR5cGUi CisjZGVmaW5lIERVS19TVFJfTk9UX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBi dWZmZXIiICAvKiBzdGlsbCBpbiB1c2Ugd2l0aCB2ZXJib3NlIG1lc3NhZ2VzICovCisjZGVmaW5l IERVS19TVFJfVU5FWFBFQ1RFRF9UWVBFICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgdHlw ZSIKKyNkZWZpbmUgRFVLX1NUUl9OT1RfVEhSRUFEICAgICAgICAgICAgICAgICAgICAgICAidW5l eHBlY3RlZCB0eXBlIgorI2RlZmluZSBEVUtfU1RSX05PVF9DT01QRlVOQyAgICAgICAgICAgICAg ICAgICAgICJ1bmV4cGVjdGVkIHR5cGUiCisjZGVmaW5lIERVS19TVFJfTk9UX05BVEZVTkMgICAg ICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgdHlwZSIKKyNkZWZpbmUgRFVLX1NUUl9OT1Rf Q19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCB0eXBlIgorI2RlZmluZSBE VUtfU1RSX05PVF9GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHR5cGUi CisjZGVmaW5lIERVS19TVFJfTk9UX1JFR0VYUCAgICAgICAgICAgICAgICAgICAgICAgInVuZXhw ZWN0ZWQgdHlwZSIKKyNkZWZpbmUgRFVLX1NUUl9UT1BSSU1JVElWRV9GQUlMRUQgICAgICAgICAg ICAgICAiY29lcmNpb24gdG8gcHJpbWl0aXZlIGZhaWxlZCIKKyNkZWZpbmUgRFVLX1NUUl9OVU1C RVJfT1VUU0lERV9SQU5HRSAgICAgICAgICAgICAibnVtYmVyIG91dHNpZGUgcmFuZ2UiCisjZGVm aW5lIERVS19TVFJfTk9UX09CSkVDVF9DT0VSQ0lCTEUgICAgICAgICAgICAgIm5vdCBvYmplY3Qg Y29lcmNpYmxlIgorI2RlZmluZSBEVUtfU1RSX0NBTk5PVF9OVU1CRVJfQ09FUkNFX1NZTUJPTCAg ICAgICJjYW5ub3QgbnVtYmVyIGNvZXJjZSBTeW1ib2wiCisjZGVmaW5lIERVS19TVFJfQ0FOTk9U X1NUUklOR19DT0VSQ0VfU1lNQk9MICAgICAgImNhbm5vdCBzdHJpbmcgY29lcmNlIFN5bWJvbCIK KyNkZWZpbmUgRFVLX1NUUl9TVFJJTkdfVE9PX0xPTkcgICAgICAgICAgICAgICAgICAic3RyaW5n IHRvbyBsb25nIgorI2RlZmluZSBEVUtfU1RSX0JVRkZFUl9UT09fTE9ORyAgICAgICAgICAgICAg ICAgICJidWZmZXIgdG9vIGxvbmciCisjZGVmaW5lIERVS19TVFJfQUxMT0NfRkFJTEVEICAgICAg ICAgICAgICAgICAgICAgImFsbG9jIGZhaWxlZCIKKyNkZWZpbmUgRFVLX1NUUl9XUk9OR19CVUZG RVJfVFlQRSAgICAgICAgICAgICAgICAid3JvbmcgYnVmZmVyIHR5cGUiCisjZGVmaW5lIERVS19T VFJfQkFTRTY0X0VOQ09ERV9GQUlMRUQgICAgICAgICAgICAgImJhc2U2NCBlbmNvZGUgZmFpbGVk IgorI2RlZmluZSBEVUtfU1RSX1NPVVJDRV9ERUNPREVfRkFJTEVEICAgICAgICAgICAgICJzb3Vy Y2UgZGVjb2RlIGZhaWxlZCIKKyNkZWZpbmUgRFVLX1NUUl9VVEY4X0RFQ09ERV9GQUlMRUQgICAg ICAgICAgICAgICAidXRmLTggZGVjb2RlIGZhaWxlZCIKKyNkZWZpbmUgRFVLX1NUUl9CQVNFNjRf REVDT0RFX0ZBSUxFRCAgICAgICAgICAgICAiYmFzZTY0IGRlY29kZSBmYWlsZWQiCisjZGVmaW5l IERVS19TVFJfSEVYX0RFQ09ERV9GQUlMRUQgICAgICAgICAgICAgICAgImhleCBkZWNvZGUgZmFp bGVkIgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfQllURUNPREUgICAgICAgICAgICAgICAgICJp bnZhbGlkIGJ5dGVjb2RlIgorI2RlZmluZSBEVUtfU1RSX05PX1NPVVJDRUNPREUgICAgICAgICAg ICAgICAgICAgICJubyBzb3VyY2Vjb2RlIgorI2RlZmluZSBEVUtfU1RSX1JFU1VMVF9UT09fTE9O RyAgICAgICAgICAgICAgICAgICJyZXN1bHQgdG9vIGxvbmciCisjZGVmaW5lIERVS19TVFJfSU5W QUxJRF9DRlVOQ19SQyAgICAgICAgICAgICAgICAgImludmFsaWQgQyBmdW5jdGlvbiByYyIKKyNk ZWZpbmUgRFVLX1NUUl9JTlZBTElEX0lOU1RBTkNFT0ZfUlZBTCAgICAgICAgICAiaW52YWxpZCBp bnN0YW5jZW9mIHJ2YWwiCisjZGVmaW5lIERVS19TVFJfSU5WQUxJRF9JTlNUQU5DRU9GX1JWQUxf Tk9QUk9UTyAgImluc3RhbmNlb2YgcnZhbCBoYXMgbm8gLnByb3RvdHlwZSIKKworLyogSlNPTiAq LworI2RlZmluZSBEVUtfU1RSX0ZNVF9QVFIgICAgICAgICAgICAgICAgICAgICAgICAgICIlcCIK KyNkZWZpbmUgRFVLX1NUUl9GTVRfSU5WQUxJRF9KU09OICAgICAgICAgICAgICAgICAiaW52YWxp ZCBqc29uIChhdCBvZmZzZXQgJWxkKSIKKyNkZWZpbmUgRFVLX1NUUl9KU09OREVDX1JFQ0xJTUlU ICAgICAgICAgICAgICAgICAianNvbiBkZWNvZGUgcmVjdXJzaW9uIGxpbWl0IgorI2RlZmluZSBE VUtfU1RSX0pTT05FTkNfUkVDTElNSVQgICAgICAgICAgICAgICAgICJqc29uIGVuY29kZSByZWN1 cnNpb24gbGltaXQiCisjZGVmaW5lIERVS19TVFJfQ1lDTElDX0lOUFVUICAgICAgICAgICAgICAg ICAgICAgImN5Y2xpYyBpbnB1dCIKKworLyogT2JqZWN0IHByb3BlcnR5IGFjY2VzcyAqLworI2Rl ZmluZSBEVUtfU1RSX0lOVkFMSURfQkFTRSAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGJh c2UgdmFsdWUiCisjZGVmaW5lIERVS19TVFJfU1RSSUNUX0NBTExFUl9SRUFEICAgICAgICAgICAg ICAgImNhbm5vdCByZWFkIHN0cmljdCAnY2FsbGVyJyIKKyNkZWZpbmUgRFVLX1NUUl9QUk9YWV9S RUpFQ1RFRCAgICAgICAgICAgICAgICAgICAicHJveHkgcmVqZWN0ZWQiCisjZGVmaW5lIERVS19T VFJfSU5WQUxJRF9BUlJBWV9MRU5HVEggICAgICAgICAgICAgImludmFsaWQgYXJyYXkgbGVuZ3Ro IgorI2RlZmluZSBEVUtfU1RSX1NFVFRFUl9VTkRFRklORUQgICAgICAgICAgICAgICAgICJzZXR0 ZXIgdW5kZWZpbmVkIgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfREVTQ1JJUFRPUiAgICAgICAg ICAgICAgICJpbnZhbGlkIGRlc2NyaXB0b3IiCisKKy8qIFByb3h5ICovCisjZGVmaW5lIERVS19T VFJfUFJPWFlfUkVWT0tFRCAgICAgICAgICAgICAgICAgICAgInByb3h5IHJldm9rZWQiCisjZGVm aW5lIERVS19TVFJfSU5WQUxJRF9UUkFQX1JFU1VMVCAgICAgICAgICAgICAgImludmFsaWQgdHJh cCByZXN1bHQiCisKKy8qIFZhcmlhYmxlcyAqLworCisvKiBMZXhlciAqLworI2RlZmluZSBEVUtf U1RSX0lOVkFMSURfRVNDQVBFICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGVzY2FwZSIKKyNk ZWZpbmUgRFVLX1NUUl9VTlRFUk1JTkFURURfU1RSSU5HICAgICAgICAgICAgICAidW50ZXJtaW5h dGVkIHN0cmluZyIKKyNkZWZpbmUgRFVLX1NUUl9VTlRFUk1JTkFURURfQ09NTUVOVCAgICAgICAg ICAgICAidW50ZXJtaW5hdGVkIGNvbW1lbnQiCisjZGVmaW5lIERVS19TVFJfVU5URVJNSU5BVEVE X1JFR0VYUCAgICAgICAgICAgICAgInVudGVybWluYXRlZCByZWdleHAiCisjZGVmaW5lIERVS19T VFJfVE9LRU5fTElNSVQgICAgICAgICAgICAgICAgICAgICAgInRva2VuIGxpbWl0IgorI2RlZmlu ZSBEVUtfU1RSX1JFR0VYUF9TVVBQT1JUX0RJU0FCTEVEICAgICAgICAgICJyZWdleHAgc3VwcG9y dCBkaXNhYmxlZCIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX05VTUJFUl9MSVRFUkFMICAgICAg ICAgICAiaW52YWxpZCBudW1iZXIgbGl0ZXJhbCIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX1RP S0VOICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB0b2tlbiIKKworLyogQ29tcGlsZXIgKi8K KyNkZWZpbmUgRFVLX1NUUl9QQVJTRV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAicGFyc2Ug ZXJyb3IiCisjZGVmaW5lIERVS19TVFJfRFVQTElDQVRFX0xBQkVMICAgICAgICAgICAgICAgICAg ImR1cGxpY2F0ZSBsYWJlbCIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0xBQkVMICAgICAgICAg ICAgICAgICAgICAiaW52YWxpZCBsYWJlbCIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0FSUkFZ X0xJVEVSQUwgICAgICAgICAgICAiaW52YWxpZCBhcnJheSBsaXRlcmFsIgorI2RlZmluZSBEVUtf U1RSX0lOVkFMSURfT0JKRUNUX0xJVEVSQUwgICAgICAgICAgICJpbnZhbGlkIG9iamVjdCBsaXRl cmFsIgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfVkFSX0RFQ0xBUkFUSU9OICAgICAgICAgICJp bnZhbGlkIHZhcmlhYmxlIGRlY2xhcmF0aW9uIgorI2RlZmluZSBEVUtfU1RSX0NBTk5PVF9ERUxF VEVfSURFTlRJRklFUiAgICAgICAgICJjYW5ub3QgZGVsZXRlIGlkZW50aWZpZXIiCisjZGVmaW5l IERVS19TVFJfSU5WQUxJRF9FWFBSRVNTSU9OICAgICAgICAgICAgICAgImludmFsaWQgZXhwcmVz c2lvbiIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0xWQUxVRSAgICAgICAgICAgICAgICAgICAi aW52YWxpZCBsdmFsdWUiCisjZGVmaW5lIERVS19TVFJfSU5WQUxJRF9ORVdUQVJHRVQgICAgICAg ICAgICAgICAgImludmFsaWQgbmV3LnRhcmdldCIKKyNkZWZpbmUgRFVLX1NUUl9FWFBFQ1RFRF9J REVOVElGSUVSICAgICAgICAgICAgICAiZXhwZWN0ZWQgaWRlbnRpZmllciIKKyNkZWZpbmUgRFVL X1NUUl9FTVBUWV9FWFBSX05PVF9BTExPV0VEICAgICAgICAgICAiZW1wdHkgZXhwcmVzc2lvbiBu b3QgYWxsb3dlZCIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0ZPUiAgICAgICAgICAgICAgICAg ICAgICAiaW52YWxpZCBmb3Igc3RhdGVtZW50IgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfU1dJ VENIICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHN3aXRjaCBzdGF0ZW1lbnQiCisjZGVmaW5l IERVS19TVFJfSU5WQUxJRF9CUkVBS19DT05UX0xBQkVMICAgICAgICAgImludmFsaWQgYnJlYWsv Y29udGludWUgbGFiZWwiCisjZGVmaW5lIERVS19TVFJfSU5WQUxJRF9SRVRVUk4gICAgICAgICAg ICAgICAgICAgImludmFsaWQgcmV0dXJuIgorI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfVFJZICAg ICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHRyeSIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElE X1RIUk9XICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB0aHJvdyIKKyNkZWZpbmUgRFVLX1NU Ul9XSVRIX0lOX1NUUklDVF9NT0RFICAgICAgICAgICAgICAid2l0aCBpbiBzdHJpY3QgbW9kZSIK KyNkZWZpbmUgRFVLX1NUUl9GVU5DX1NUTVRfTk9UX0FMTE9XRUQgICAgICAgICAgICAiZnVuY3Rp b24gc3RhdGVtZW50IG5vdCBhbGxvd2VkIgorI2RlZmluZSBEVUtfU1RSX1VOVEVSTUlOQVRFRF9T VE1UICAgICAgICAgICAgICAgICJ1bnRlcm1pbmF0ZWQgc3RhdGVtZW50IgorI2RlZmluZSBEVUtf U1RSX0lOVkFMSURfQVJHX05BTUUgICAgICAgICAgICAgICAgICJpbnZhbGlkIGFyZ3VtZW50IG5h bWUiCisjZGVmaW5lIERVS19TVFJfSU5WQUxJRF9GVU5DX05BTUUgICAgICAgICAgICAgICAgImlu dmFsaWQgZnVuY3Rpb24gbmFtZSIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0dFVFNFVF9OQU1F ICAgICAgICAgICAgICAiaW52YWxpZCBnZXR0ZXIvc2V0dGVyIG5hbWUiCisjZGVmaW5lIERVS19T VFJfRlVOQ19OQU1FX1JFUVVJUkVEICAgICAgICAgICAgICAgImZ1bmN0aW9uIG5hbWUgcmVxdWly ZWQiCisKKy8qIFJlZ0V4cCAqLworI2RlZmluZSBEVUtfU1RSX0lOVkFMSURfUVVBTlRJRklFUiAg ICAgICAgICAgICAgICJpbnZhbGlkIHJlZ2V4cCBxdWFudGlmaWVyIgorI2RlZmluZSBEVUtfU1RS X0lOVkFMSURfUVVBTlRJRklFUl9OT19BVE9NICAgICAgICJxdWFudGlmaWVyIHdpdGhvdXQgcHJl Y2VkaW5nIGF0b20iCisjZGVmaW5lIERVS19TVFJfSU5WQUxJRF9RVUFOVElGSUVSX1ZBTFVFUyAg ICAgICAgInF1YW50aWZpZXIgdmFsdWVzIGludmFsaWQgKHFtaW4gPiBxbWF4KSIKKyNkZWZpbmUg RFVLX1NUUl9RVUFOVElGSUVSX1RPT19NQU5ZX0NPUElFUyAgICAgICAicXVhbnRpZmllciByZXF1 aXJlcyB0b28gbWFueSBhdG9tIGNvcGllcyIKKyNkZWZpbmUgRFVLX1NUUl9VTkVYUEVDVEVEX0NM T1NJTkdfUEFSRU4gICAgICAgICAidW5leHBlY3RlZCBjbG9zaW5nIHBhcmVudGhlc2lzIgorI2Rl ZmluZSBEVUtfU1RSX1VORVhQRUNURURfRU5EX09GX1BBVFRFUk4gICAgICAgICJ1bmV4cGVjdGVk IGVuZCBvZiBwYXR0ZXJuIgorI2RlZmluZSBEVUtfU1RSX1VORVhQRUNURURfUkVHRVhQX1RPS0VO ICAgICAgICAgICJ1bmV4cGVjdGVkIHRva2VuIGluIHJlZ2V4cCIKKyNkZWZpbmUgRFVLX1NUUl9J TlZBTElEX1JFR0VYUF9GTEFHUyAgICAgICAgICAgICAiaW52YWxpZCByZWdleHAgZmxhZ3MiCisj ZGVmaW5lIERVS19TVFJfSU5WQUxJRF9SRUdFWFBfRVNDQVBFICAgICAgICAgICAgImludmFsaWQg cmVnZXhwIGVzY2FwZSIKKyNkZWZpbmUgRFVLX1NUUl9JTlZBTElEX0JBQ0tSRUZTICAgICAgICAg ICAgICAgICAiaW52YWxpZCBiYWNrcmVmZXJlbmNlKHMpIgorI2RlZmluZSBEVUtfU1RSX0lOVkFM SURfUkVHRVhQX0NIQVJBQ1RFUiAgICAgICAgICJpbnZhbGlkIHJlZ2V4cCBjaGFyYWN0ZXIiCisj ZGVmaW5lIERVS19TVFJfSU5WQUxJRF9SRUdFWFBfR1JPVVAgICAgICAgICAgICAgImludmFsaWQg cmVnZXhwIGdyb3VwIgorI2RlZmluZSBEVUtfU1RSX1VOVEVSTUlOQVRFRF9DSEFSQ0xBU1MgICAg ICAgICAgICJ1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIGNsYXNzIgorI2RlZmluZSBEVUtfU1RSX0lO VkFMSURfUkFOR0UgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJhbmdlIgorCisvKiBMaW1p dHMgKi8KKyNkZWZpbmUgRFVLX1NUUl9WQUxTVEFDS19MSU1JVCAgICAgICAgICAgICAgICAgICAi dmFsc3RhY2sgbGltaXQiCisjZGVmaW5lIERVS19TVFJfQ0FMTFNUQUNLX0xJTUlUICAgICAgICAg ICAgICAgICAgImNhbGxzdGFjayBsaW1pdCIKKyNkZWZpbmUgRFVLX1NUUl9QUk9UT1RZUEVfQ0hB SU5fTElNSVQgICAgICAgICAgICAicHJvdG90eXBlIGNoYWluIGxpbWl0IgorI2RlZmluZSBEVUtf U1RSX0JPVU5EX0NIQUlOX0xJTUlUICAgICAgICAgICAgICAgICJmdW5jdGlvbiBjYWxsIGJvdW5k IGNoYWluIGxpbWl0IgorI2RlZmluZSBEVUtfU1RSX0NfQ0FMTFNUQUNLX0xJTUlUICAgICAgICAg ICAgICAgICJDIGNhbGwgc3RhY2sgZGVwdGggbGltaXQiCisjZGVmaW5lIERVS19TVFJfQ09NUElM RVJfUkVDVVJTSU9OX0xJTUlUICAgICAgICAgImNvbXBpbGVyIHJlY3Vyc2lvbiBsaW1pdCIKKyNk ZWZpbmUgRFVLX1NUUl9CWVRFQ09ERV9MSU1JVCAgICAgICAgICAgICAgICAgICAiYnl0ZWNvZGUg bGltaXQiCisjZGVmaW5lIERVS19TVFJfUkVHX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAg InJlZ2lzdGVyIGxpbWl0IgorI2RlZmluZSBEVUtfU1RSX1RFTVBfTElNSVQgICAgICAgICAgICAg ICAgICAgICAgICJ0ZW1wIGxpbWl0IgorI2RlZmluZSBEVUtfU1RSX0NPTlNUX0xJTUlUICAgICAg ICAgICAgICAgICAgICAgICJjb25zdCBsaW1pdCIKKyNkZWZpbmUgRFVLX1NUUl9GVU5DX0xJTUlU ICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gbGltaXQiCisjZGVmaW5lIERVS19TVFJf UkVHRVhQX0NPTVBJTEVSX1JFQ1VSU0lPTl9MSU1JVCAgInJlZ2V4cCBjb21waWxlciByZWN1cnNp b24gbGltaXQiCisjZGVmaW5lIERVS19TVFJfUkVHRVhQX0VYRUNVVE9SX1JFQ1VSU0lPTl9MSU1J VCAgInJlZ2V4cCBleGVjdXRvciByZWN1cnNpb24gbGltaXQiCisjZGVmaW5lIERVS19TVFJfUkVH RVhQX0VYRUNVVE9SX1NURVBfTElNSVQgICAgICAgInJlZ2V4cCBzdGVwIGxpbWl0IgorCisjZW5k aWYgIC8qIERVS19FUlJNU0dfSF9JTkNMVURFRCAqLworLyogI2luY2x1ZGUgZHVrX2pzX2J5dGVj b2RlLmggKi8KKy8qCisgKiAgRUNNQVNjcmlwdCBieXRlY29kZQorICovCisKKyNpZiAhZGVmaW5l ZChEVUtfSlNfQllURUNPREVfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX0pTX0JZVEVDT0RFX0hf SU5DTFVERUQKKworLyoKKyAqICBCeXRlY29kZSBpbnN0cnVjdGlvbiBsYXlvdXQKKyAqICA9PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgSW5zdHJ1Y3Rpb25zIGFyZSB1bnNpZ25l ZCAzMi1iaXQgaW50ZWdlcnMgZGl2aWRlZCBhcyBmb2xsb3dzOgorICoKKyAqICAhMyEzITIhMiEy ITIhMiEyITIhMiEyITIhMSExITEhMSExITEhMSExITEhMSEgISAhICEgISAhICEgISAhICEgIQor ICogICExITAhOSE4ITchNiE1ITQhMyEyITEhMCE5ITghNyE2ITUhNCEzITIhMSEwITkhOCE3ITYh NSE0ITMhMiExITAhCisgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAqICAhICAgICAgIEMgICAgICAgISAgICAgICBC ICAgICAgICEgICAgICAgQSAgICAgICAhICAgICAgIE9QICAgICAgIQorICogICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisg KgorICogIE9QICg4IGJpdHMpOiAgb3Bjb2RlIChEVUtfT1BfKiksIGFjY2VzcyBzaG91bGQgYmUg ZmFzdGVzdAorICogICAgICAgICAgICAgICAgY29uc2VjdXRpdmUgb3Bjb2RlcyBhbGxvY2F0ZWQg d2hlbiBvcGNvZGUgbmVlZHMgZmxhZ3MKKyAqICAgQSAoOCBiaXRzKTogIHR5cGljYWxseSBhIHRh cmdldCByZWdpc3RlciBudW1iZXIKKyAqICAgQiAoOCBiaXRzKTogIHR5cGljYWxseSBmaXJzdCBz b3VyY2UgcmVnaXN0ZXIvY29uc3RhbnQgbnVtYmVyCisgKiAgIEMgKDggYml0cyk6ICB0eXBpY2Fs bHkgc2Vjb25kIHNvdXJjZSByZWdpc3Rlci9jb25zdGFudCBudW1iZXIKKyAqCisgKiAgU29tZSBp bnN0cnVjdGlvbnMgY29tYmluZSBCQyBvciBBQkMgdG9nZXRoZXIgZm9yIGxhcmdlciBwYXJhbWV0 ZXIgdmFsdWVzLgorICogIFNpZ25lZCBpbnRlZ2VycyAoZS5nLiBqdW1wIG9mZnNldHMpIGFyZSBl bmNvZGVkIGFzIHVuc2lnbmVkLCB3aXRoIGFuCisgKiAgb3Bjb2RlIHNwZWNpZmljIGJpYXMuCisg KgorICogIFNvbWUgb3Bjb2RlcyBoYXZlIGZsYWdzIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IGFsbG9j YXRpbmcgY29uc2VjdXRpdmUKKyAqICBvcGNvZGVzIHRvIG1ha2Ugc3BhY2UgZm9yIDEtTiBmbGFn cy4gIEZsYWdzIGNhbiBhbHNvIGJlIGUuZy4gaW4gdGhlICdBJworICogIGZpZWxkIHdoZW4gdGhl cmUncyByb29tIGZvciB0aGUgc3BlY2lmaWMgb3Bjb2RlLgorICoKKyAqICBGb3IgZXhhbXBsZSwg aWYgdGhyZWUgZmxhZ3Mgd2VyZSBuZWVkZWQsIHRoZXkgY291bGQgYmUgYWxsb2NhdGVkIGZyb20K KyAqICB0aGUgb3Bjb2RlIGZpZWxkIGFzIGZvbGxvd3M6CisgKgorICogICEzITMhMiEyITIhMiEy ITIhMiEyITIhMiExITEhMSExITEhMSExITEhMSExISAhICEgISAhICEgISAhICEgISAhCisgKiAg ITEhMCE5ITghNyE2ITUhNCEzITIhMSEwITkhOCE3ITYhNSE0ITMhMiExITAhOSE4ITchNiE1ITQh MyEyITEhMCEKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICogICEgICAgICAgQyAgICAgICAhICAgICAgIEIgICAg ICAgISAgICAgICBBICAgICAgICEgICAgT1AgICAhWiFZIVghCisgKiAgKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAqCisg KiAgU29tZSBvcGNvZGVzIGFjY2VwdCBhIHJlZy9jb25zdCBhcmd1bWVudCB3aGljaCBpcyBoYW5k bGVkIGJ5IGFsbG9jYXRpbmcKKyAqICBmbGFncyBpbiB0aGUgT1AgZmllbGQsIHNlZSBEVUtfQkNf SVNSRUcoKSBhbmQgRFVLX0JDX0lTQ09OU1QoKS4gIFRoZQorICogIGZvbGxvd2luZyBjb252ZW50 aW9uIGlzIHNoYXJlZCBieSBtb3N0IG9wY29kZXMsIHNvIHRoYXQgdGhlIGNvbXBpbGVyCisgKiAg Y2FuIGhhbmRsZSByZWcvY29uc3QgZmxhZ2dpbmcgd2l0aG91dCBvcGNvZGUgc3BlY2lmaWMgY29k ZSBwYXRoczoKKyAqCisgKiAgITMhMyEyITIhMiEyITIhMiEyITIhMiEyITEhMSExITEhMSExITEh MSExITEhICEgISAhICEgISAhICEgISAhICEKKyAqICAhMSEwITkhOCE3ITYhNSE0ITMhMiExITAh OSE4ITchNiE1ITQhMyEyITEhMCE5ITghNyE2ITUhNCEzITIhMSEwIQorICogICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisg KiAgISAgICAgICBDICAgICAgICEgICAgICAgQiAgICAgICAhICAgICAgIEEgICAgICAgISAgICAg T1AgICAgIVkhWCEKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICoKKyAqICAgIFggIDE9QiBpcyBjb25zdCwgMD1C IGlzIHJlZworICogICAgWSAgMT1DIGlzIGNvbnN0LCAwPUMgaXMgcmVnCisgKgorICogICAgSW4g ZWZmZWN0IE9QLCBPUCArIDEsIE9QICsgMiwgYW5kIE9QICsgMyBhcmUgYWxsb2NhdGVkIGZyb20g dGhlCisgKiAgICA4LWJpdCBvcGNvZGUgc3BhY2UgZm9yIGEgc2luZ2xlIGxvZ2ljYWwgb3Bjb2Rl LiAgVGhlIGJhc2Ugb3Bjb2RlCisgKiAgICBudW1iZXIgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0 LiAgSWYgdGhlIG9wY29kZSBpcyBjYWxsZWQgJ0ZPTycKKyAqICAgIHRoZSBmb2xsb3dpbmcgb3Bj b2RlIGNvbnN0YW50cyB3b3VsZCBiZSBkZWZpbmVkOgorICoKKyAqICAgICAgRFVLX09QX0ZPTyAg ICAgMTAwICAgICAgIC8vIGJhc2Ugb3Bjb2RlIG51bWJlcgorICogICAgICBEVUtfT1BfRk9PX1JS ICAxMDAgICAgICAgLy8gRk9PLCBCPXJlZywgQz1yZWcKKyAqICAgICAgRFVLX09QX0ZPT19DUiAg MTAxICAgICAgIC8vIEZPTywgQj1jb25zdCwgQz1yZWcKKyAqICAgICAgRFVLX09QX0ZPT19SQyAg MTAyICAgICAgIC8vIEZPTywgQj1yZWcsIEM9Y29uc3QKKyAqICAgICAgRFVLX09QX0ZPT19DQyAg MTAzICAgICAgIC8vIEZPTywgQj1jb25zdCwgQz1jb25zdAorICoKKyAqICBJZiBvbmx5IEIgb3Ig QyBpcyBhIHJlZy9jb25zdCwgdGhlIHVudXNlZCBvcGNvZGUgY29tYmluYXRpb25zIGNhbiBiZQor ICogIHVzZWQgZm9yIG90aGVyIG9wY29kZXMgKHdoaWNoIHRha2Ugbm8gcmVnL2NvbnN0IGFyZ3Vt ZW50KS4gIEhvd2V2ZXIsCisgKiAgc3VjaCBvcGNvZGUgdmFsdWVzIGFyZSBpbml0aWFsbHkgcmVz ZXJ2ZWQsIGF0IGxlYXN0IHdoaWxlIG9wY29kZSBzcGFjZQorICogIGlzIGF2YWlsYWJsZS4gIEZv ciBleGFtcGxlLCBpZiAnQkFSJyB1c2VzIEIgZm9yIGEgcmVnaXN0ZXIgZmllbGQgYW5kCisgKiAg QyBpcyBhIHJlZy9jb25zdDoKKyAqCisgKiAgICAgIERVS19PUF9CQVIgICAgICAgICAgICAxMTYg ICAgLy8gYmFzZSBvcGNvZGUgbnVtYmVyCisgKiAgICAgIERVS19PUF9CQVJfUlIgICAgICAgICAx MTYgICAgLy8gQkFSLCBCPXJlZywgQz1yZWcKKyAqICAgICAgRFVLX09QX0JBUl9DUl9VTlVTRUQg IDExNyAgICAvLyB1bnVzZWQsIGNvdWxkIGJlIHJlcHVycG9zZWQKKyAqICAgICAgRFVLX09QX0JB Ul9SQyAgICAgICAgIDExOCAgICAvLyBCQVIsIEI9cmVnLCBDPWNvbnN0CisgKiAgICAgIERVS19P UF9CQVJfQ0NfVU5VU0VEICAxMTkgICAgLy8gdW51c2VkLCBjb3VsZCBiZSByZXB1cnBvc2VkCisg KgorICogIE1hY3JvIG5hbWluZyBpcyBhIGJpdCBtaXNsZWFkaW5nLCBlLmcuICJBQkMiIGluIG1h Y3JvIG5hbWUgYnV0IHRoZQorICogIGZpZWxkIGxheW91dCBpcyBjb25jcmV0ZWx5ICJDQkEiIGlu IHRoZSByZWdpc3Rlci4KKyAqLworCit0eXBlZGVmIGR1a191aW50MzJfdCBkdWtfaW5zdHJfdDsK KworI2RlZmluZSBEVUtfQkNfU0hJRlRfT1AgICAgICAgICAgICAgMAorI2RlZmluZSBEVUtfQkNf U0hJRlRfQSAgICAgICAgICAgICAgOAorI2RlZmluZSBEVUtfQkNfU0hJRlRfQiAgICAgICAgICAg ICAgMTYKKyNkZWZpbmUgRFVLX0JDX1NISUZUX0MgICAgICAgICAgICAgIDI0CisjZGVmaW5lIERV S19CQ19TSElGVF9CQyAgICAgICAgICAgICBEVUtfQkNfU0hJRlRfQgorI2RlZmluZSBEVUtfQkNf U0hJRlRfQUJDICAgICAgICAgICAgRFVLX0JDX1NISUZUX0EKKworI2RlZmluZSBEVUtfQkNfVU5T SElGVEVEX01BU0tfT1AgICAgMHhmZlVMCisjZGVmaW5lIERVS19CQ19VTlNISUZURURfTUFTS19B ICAgICAweGZmVUwKKyNkZWZpbmUgRFVLX0JDX1VOU0hJRlRFRF9NQVNLX0IgICAgIDB4ZmZVTAor I2RlZmluZSBEVUtfQkNfVU5TSElGVEVEX01BU0tfQyAgICAgMHhmZlVMCisjZGVmaW5lIERVS19C Q19VTlNISUZURURfTUFTS19CQyAgICAweGZmZmZVTAorI2RlZmluZSBEVUtfQkNfVU5TSElGVEVE X01BU0tfQUJDICAgMHhmZmZmZmZVTAorCisjZGVmaW5lIERVS19CQ19TSElGVEVEX01BU0tfT1Ag ICAgICAoRFVLX0JDX1VOU0hJRlRFRF9NQVNLX09QIDw8IERVS19CQ19TSElGVF9PUCkKKyNkZWZp bmUgRFVLX0JDX1NISUZURURfTUFTS19BICAgICAgIChEVUtfQkNfVU5TSElGVEVEX01BU0tfQSA8 PCBEVUtfQkNfU0hJRlRfQSkKKyNkZWZpbmUgRFVLX0JDX1NISUZURURfTUFTS19CICAgICAgIChE VUtfQkNfVU5TSElGVEVEX01BU0tfQiA8PCBEVUtfQkNfU0hJRlRfQikKKyNkZWZpbmUgRFVLX0JD X1NISUZURURfTUFTS19DICAgICAgIChEVUtfQkNfVU5TSElGVEVEX01BU0tfQyA8PCBEVUtfQkNf U0hJRlRfQykKKyNkZWZpbmUgRFVLX0JDX1NISUZURURfTUFTS19CQyAgICAgIChEVUtfQkNfVU5T SElGVEVEX01BU0tfQkMgPDwgRFVLX0JDX1NISUZUX0JDKQorI2RlZmluZSBEVUtfQkNfU0hJRlRF RF9NQVNLX0FCQyAgICAgKERVS19CQ19VTlNISUZURURfTUFTS19BQkMgPDwgRFVLX0JDX1NISUZU X0FCQykKKworI2RlZmluZSBEVUtfREVDX09QKHgpICAgICAgICAgICAgICAgKCh4KSAmIDB4ZmZV TCkKKyNkZWZpbmUgRFVLX0RFQ19BKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhm ZlVMKQorI2RlZmluZSBEVUtfREVDX0IoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYg MHhmZlVMKQorI2RlZmluZSBEVUtfREVDX0MoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQp ICYgMHhmZlVMKQorI2RlZmluZSBEVUtfREVDX0JDKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4g MTYpICYgMHhmZmZmVUwpCisjZGVmaW5lIERVS19ERUNfQUJDKHgpICAgICAgICAgICAgICAoKCh4 KSA+PiA4KSAmIDB4ZmZmZmZmVUwpCisKKyNkZWZpbmUgRFVLX0VOQ19PUChvcCkgICAgICAgICAg ICAgICgoZHVrX2luc3RyX3QpIChvcCkpCisjZGVmaW5lIERVS19FTkNfT1BfQUJDKG9wLGFiYykg ICAgICAoKGR1a19pbnN0cl90KSAoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKChkdWtfaW5zdHJfdCkgKGFiYykpIDw8IDgpIHwgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoZHVrX2luc3RyX3QpIChvcCkpIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisjZGVmaW5lIERVS19FTkNfT1BfQV9CQyhv cCxhLGJjKSAgICAoKGR1a19pbnN0cl90KSAoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKChkdWtfaW5zdHJfdCkgKGJjKSkgPDwgMTYpIHwgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGR1a19pbnN0cl90KSAoYSkpIDw8IDgp IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZHVrX2luc3Ry X3QpIChvcCkpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisjZGVm aW5lIERVS19FTkNfT1BfQV9CX0Mob3AsYSxiLGMpICAoKGR1a19pbnN0cl90KSAoIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChkdWtfaW5zdHJfdCkgKGMpKSA8 PCAyNCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZHVr X2luc3RyX3QpIChiKSkgPDwgMTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoKGR1a19pbnN0cl90KSAoYSkpIDw8IDgpIHwgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoZHVrX2luc3RyX3QpIChvcCkpIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisjZGVmaW5lIERVS19FTkNfT1BfQV9CKG9w LGEsYikgICAgICBEVUtfRU5DX09QX0FfQl9DKChvcCksKGEpLChiKSwwKQorI2RlZmluZSBEVUtf RU5DX09QX0Eob3AsYSkgICAgICAgICAgRFVLX0VOQ19PUF9BX0JfQygob3ApLChhKSwwLDApCisj ZGVmaW5lIERVS19FTkNfT1BfQkMob3AsYmMpICAgICAgICBEVUtfRU5DX09QX0FfQkMoKG9wKSww LChiYykpCisKKy8qIEdldCBvcGNvZGUgYmFzZSB2YWx1ZSB3aXRoIEIvQyByZWcvY29uc3QgZmxh Z3MgY2xlYXJlZC4gKi8KKyNkZWZpbmUgRFVLX0JDX05PUkVHQ09OU1RfT1Aob3ApICAgICgob3Ap ICYgMHhmYykKKworLyogQ29uc3RhbnRzIHNob3VsZCBiZSBzaWduZWQgc28gdGhhdCBzaWduZWQg YXJpdGhtZXRpYyBpbnZvbHZpbmcgdGhlbQorICogd29uJ3QgY2F1c2UgdmFsdWVzIHRvIGJlIGNv ZXJjZWQgYWNjaWRlbnRhbGx5IHRvIHVuc2lnbmVkLgorICovCisjZGVmaW5lIERVS19CQ19PUF9N SU4gICAgICAgICAgICAgICAwCisjZGVmaW5lIERVS19CQ19PUF9NQVggICAgICAgICAgICAgICAw eGZmTAorI2RlZmluZSBEVUtfQkNfQV9NSU4gICAgICAgICAgICAgICAgMAorI2RlZmluZSBEVUtf QkNfQV9NQVggICAgICAgICAgICAgICAgMHhmZkwKKyNkZWZpbmUgRFVLX0JDX0JfTUlOICAgICAg ICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX0JDX0JfTUFYICAgICAgICAgICAgICAgIDB4ZmZMCisj ZGVmaW5lIERVS19CQ19DX01JTiAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERVS19CQ19DX01B WCAgICAgICAgICAgICAgICAweGZmTAorI2RlZmluZSBEVUtfQkNfQkNfTUlOICAgICAgICAgICAg ICAgMAorI2RlZmluZSBEVUtfQkNfQkNfTUFYICAgICAgICAgICAgICAgMHhmZmZmTAorI2RlZmlu ZSBEVUtfQkNfQUJDX01JTiAgICAgICAgICAgICAgMAorI2RlZmluZSBEVUtfQkNfQUJDX01BWCAg ICAgICAgICAgICAgMHhmZmZmZmZMCisKKy8qIE1hc2tzIGZvciBCL0MgcmVnL2NvbnN0IGluZGlj YXRvciBpbiBvcGNvZGUgZmllbGQuICovCisjZGVmaW5lIERVS19CQ19SRUdDT05TVF9CICAgICAg ICAgICAoMHgwMVVMKQorI2RlZmluZSBEVUtfQkNfUkVHQ09OU1RfQyAgICAgICAgICAgKDB4MDJV TCkKKworLyogTWlzYy4gbWFza3MgZm9yIG9wY29kZSBmaWVsZC4gKi8KKyNkZWZpbmUgRFVLX0JD X0lOQ0RFQ1BfRkxBR19ERUMgICAgICgweDA0VUwpCisjZGVmaW5lIERVS19CQ19JTkNERUNQX0ZM QUdfUE9TVCAgICAoMHgwOFVMKQorCisvKiBPcGNvZGVzLiAqLworI2RlZmluZSBEVUtfT1BfTERS RUcgICAgICAgICAgICAgICAgMAorI2RlZmluZSBEVUtfT1BfU1RSRUcgICAgICAgICAgICAgICAg MQorI2RlZmluZSBEVUtfT1BfSlVNUCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBEVUtfT1Bf TERDT05TVCAgICAgICAgICAgICAgMworI2RlZmluZSBEVUtfT1BfTERJTlQgICAgICAgICAgICAg ICAgNAorI2RlZmluZSBEVUtfT1BfTERJTlRYICAgICAgICAgICAgICAgNQorI2RlZmluZSBEVUtf T1BfTERUSElTICAgICAgICAgICAgICAgNgorI2RlZmluZSBEVUtfT1BfTERVTkRFRiAgICAgICAg ICAgICAgNworI2RlZmluZSBEVUtfT1BfTEROVUxMICAgICAgICAgICAgICAgOAorI2RlZmluZSBE VUtfT1BfTERUUlVFICAgICAgICAgICAgICAgOQorI2RlZmluZSBEVUtfT1BfTERGQUxTRSAgICAg ICAgICAgICAgMTAKKyNkZWZpbmUgRFVLX09QX0dFVFZBUiAgICAgICAgICAgICAgIDExCisjZGVm aW5lIERVS19PUF9CTk9UICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBEVUtfT1BfTE5PVCAg ICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRFVLX09QX1VOTSAgICAgICAgICAgICAgICAgIDE0 CisjZGVmaW5lIERVS19PUF9VTlAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBEVUtfT1Bf RVEgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRFVLX09QX0VRX1JSICAgICAgICAgICAg ICAgIDE2CisjZGVmaW5lIERVS19PUF9FUV9DUiAgICAgICAgICAgICAgICAxNworI2RlZmluZSBE VUtfT1BfRVFfUkMgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRFVLX09QX0VRX0NDICAgICAg ICAgICAgICAgIDE5CisjZGVmaW5lIERVS19PUF9ORVEgICAgICAgICAgICAgICAgICAyMAorI2Rl ZmluZSBEVUtfT1BfTkVRX1JSICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRFVLX09QX05FUV9D UiAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIERVS19PUF9ORVFfUkMgICAgICAgICAgICAgICAy MgorI2RlZmluZSBEVUtfT1BfTkVRX0NDICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgRFVLX09Q X1NFUSAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIERVS19PUF9TRVFfUlIgICAgICAgICAg ICAgICAyNAorI2RlZmluZSBEVUtfT1BfU0VRX0NSICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUg RFVLX09QX1NFUV9SQyAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIERVS19PUF9TRVFfQ0MgICAg ICAgICAgICAgICAyNworI2RlZmluZSBEVUtfT1BfU05FUSAgICAgICAgICAgICAgICAgMjgKKyNk ZWZpbmUgRFVLX09QX1NORVFfUlIgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERVS19PUF9TTkVR X0NSICAgICAgICAgICAgICAyOQorI2RlZmluZSBEVUtfT1BfU05FUV9SQyAgICAgICAgICAgICAg MzAKKyNkZWZpbmUgRFVLX09QX1NORVFfQ0MgICAgICAgICAgICAgIDMxCisjZGVmaW5lIERVS19P UF9HVCAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBEVUtfT1BfR1RfUlIgICAgICAgICAg ICAgICAgMzIKKyNkZWZpbmUgRFVLX09QX0dUX0NSICAgICAgICAgICAgICAgIDMzCisjZGVmaW5l IERVS19PUF9HVF9SQyAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBEVUtfT1BfR1RfQ0MgICAg ICAgICAgICAgICAgMzUKKyNkZWZpbmUgRFVLX09QX0dFICAgICAgICAgICAgICAgICAgIDM2Cisj ZGVmaW5lIERVS19PUF9HRV9SUiAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBEVUtfT1BfR0Vf Q1IgICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgRFVLX09QX0dFX1JDICAgICAgICAgICAgICAg IDM4CisjZGVmaW5lIERVS19PUF9HRV9DQyAgICAgICAgICAgICAgICAzOQorI2RlZmluZSBEVUtf T1BfTFQgICAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgRFVLX09QX0xUX1JSICAgICAgICAg ICAgICAgIDQwCisjZGVmaW5lIERVS19PUF9MVF9DUiAgICAgICAgICAgICAgICA0MQorI2RlZmlu ZSBEVUtfT1BfTFRfUkMgICAgICAgICAgICAgICAgNDIKKyNkZWZpbmUgRFVLX09QX0xUX0NDICAg ICAgICAgICAgICAgIDQzCisjZGVmaW5lIERVS19PUF9MRSAgICAgICAgICAgICAgICAgICA0NAor I2RlZmluZSBEVUtfT1BfTEVfUlIgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgRFVLX09QX0xF X0NSICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIERVS19PUF9MRV9SQyAgICAgICAgICAgICAg ICA0NgorI2RlZmluZSBEVUtfT1BfTEVfQ0MgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRFVL X09QX0lGVFJVRSAgICAgICAgICAgICAgIDQ4CisjZGVmaW5lIERVS19PUF9JRlRSVUVfUiAgICAg ICAgICAgICA0OAorI2RlZmluZSBEVUtfT1BfSUZUUlVFX0MgICAgICAgICAgICAgNDkKKyNkZWZp bmUgRFVLX09QX0lGRkFMU0UgICAgICAgICAgICAgIDUwCisjZGVmaW5lIERVS19PUF9JRkZBTFNF X1IgICAgICAgICAgICA1MAorI2RlZmluZSBEVUtfT1BfSUZGQUxTRV9DICAgICAgICAgICAgNTEK KyNkZWZpbmUgRFVLX09QX0FERCAgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIERVS19PUF9B RERfUlIgICAgICAgICAgICAgICA1MgorI2RlZmluZSBEVUtfT1BfQUREX0NSICAgICAgICAgICAg ICAgNTMKKyNkZWZpbmUgRFVLX09QX0FERF9SQyAgICAgICAgICAgICAgIDU0CisjZGVmaW5lIERV S19PUF9BRERfQ0MgICAgICAgICAgICAgICA1NQorI2RlZmluZSBEVUtfT1BfU1VCICAgICAgICAg ICAgICAgICAgNTYKKyNkZWZpbmUgRFVLX09QX1NVQl9SUiAgICAgICAgICAgICAgIDU2CisjZGVm aW5lIERVS19PUF9TVUJfQ1IgICAgICAgICAgICAgICA1NworI2RlZmluZSBEVUtfT1BfU1VCX1JD ICAgICAgICAgICAgICAgNTgKKyNkZWZpbmUgRFVLX09QX1NVQl9DQyAgICAgICAgICAgICAgIDU5 CisjZGVmaW5lIERVS19PUF9NVUwgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBEVUtfT1Bf TVVMX1JSICAgICAgICAgICAgICAgNjAKKyNkZWZpbmUgRFVLX09QX01VTF9DUiAgICAgICAgICAg ICAgIDYxCisjZGVmaW5lIERVS19PUF9NVUxfUkMgICAgICAgICAgICAgICA2MgorI2RlZmluZSBE VUtfT1BfTVVMX0NDICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRFVLX09QX0RJViAgICAgICAg ICAgICAgICAgIDY0CisjZGVmaW5lIERVS19PUF9ESVZfUlIgICAgICAgICAgICAgICA2NAorI2Rl ZmluZSBEVUtfT1BfRElWX0NSICAgICAgICAgICAgICAgNjUKKyNkZWZpbmUgRFVLX09QX0RJVl9S QyAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIERVS19PUF9ESVZfQ0MgICAgICAgICAgICAgICA2 NworI2RlZmluZSBEVUtfT1BfTU9EICAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgRFVLX09Q X01PRF9SUiAgICAgICAgICAgICAgIDY4CisjZGVmaW5lIERVS19PUF9NT0RfQ1IgICAgICAgICAg ICAgICA2OQorI2RlZmluZSBEVUtfT1BfTU9EX1JDICAgICAgICAgICAgICAgNzAKKyNkZWZpbmUg RFVLX09QX01PRF9DQyAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIERVS19PUF9FWFAgICAgICAg ICAgICAgICAgICA3MgorI2RlZmluZSBEVUtfT1BfRVhQX1JSICAgICAgICAgICAgICAgNzIKKyNk ZWZpbmUgRFVLX09QX0VYUF9DUiAgICAgICAgICAgICAgIDczCisjZGVmaW5lIERVS19PUF9FWFBf UkMgICAgICAgICAgICAgICA3NAorI2RlZmluZSBEVUtfT1BfRVhQX0NDICAgICAgICAgICAgICAg NzUKKyNkZWZpbmUgRFVLX09QX0JBTkQgICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIERVS19P UF9CQU5EX1JSICAgICAgICAgICAgICA3NgorI2RlZmluZSBEVUtfT1BfQkFORF9DUiAgICAgICAg ICAgICAgNzcKKyNkZWZpbmUgRFVLX09QX0JBTkRfUkMgICAgICAgICAgICAgIDc4CisjZGVmaW5l IERVS19PUF9CQU5EX0NDICAgICAgICAgICAgICA3OQorI2RlZmluZSBEVUtfT1BfQk9SICAgICAg ICAgICAgICAgICAgODAKKyNkZWZpbmUgRFVLX09QX0JPUl9SUiAgICAgICAgICAgICAgIDgwCisj ZGVmaW5lIERVS19PUF9CT1JfQ1IgICAgICAgICAgICAgICA4MQorI2RlZmluZSBEVUtfT1BfQk9S X1JDICAgICAgICAgICAgICAgODIKKyNkZWZpbmUgRFVLX09QX0JPUl9DQyAgICAgICAgICAgICAg IDgzCisjZGVmaW5lIERVS19PUF9CWE9SICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBEVUtf T1BfQlhPUl9SUiAgICAgICAgICAgICAgODQKKyNkZWZpbmUgRFVLX09QX0JYT1JfQ1IgICAgICAg ICAgICAgIDg1CisjZGVmaW5lIERVS19PUF9CWE9SX1JDICAgICAgICAgICAgICA4NgorI2RlZmlu ZSBEVUtfT1BfQlhPUl9DQyAgICAgICAgICAgICAgODcKKyNkZWZpbmUgRFVLX09QX0JBU0wgICAg ICAgICAgICAgICAgIDg4CisjZGVmaW5lIERVS19PUF9CQVNMX1JSICAgICAgICAgICAgICA4OAor I2RlZmluZSBEVUtfT1BfQkFTTF9DUiAgICAgICAgICAgICAgODkKKyNkZWZpbmUgRFVLX09QX0JB U0xfUkMgICAgICAgICAgICAgIDkwCisjZGVmaW5lIERVS19PUF9CQVNMX0NDICAgICAgICAgICAg ICA5MQorI2RlZmluZSBEVUtfT1BfQkxTUiAgICAgICAgICAgICAgICAgOTIKKyNkZWZpbmUgRFVL X09QX0JMU1JfUlIgICAgICAgICAgICAgIDkyCisjZGVmaW5lIERVS19PUF9CTFNSX0NSICAgICAg ICAgICAgICA5MworI2RlZmluZSBEVUtfT1BfQkxTUl9SQyAgICAgICAgICAgICAgOTQKKyNkZWZp bmUgRFVLX09QX0JMU1JfQ0MgICAgICAgICAgICAgIDk1CisjZGVmaW5lIERVS19PUF9CQVNSICAg ICAgICAgICAgICAgICA5NgorI2RlZmluZSBEVUtfT1BfQkFTUl9SUiAgICAgICAgICAgICAgOTYK KyNkZWZpbmUgRFVLX09QX0JBU1JfQ1IgICAgICAgICAgICAgIDk3CisjZGVmaW5lIERVS19PUF9C QVNSX1JDICAgICAgICAgICAgICA5OAorI2RlZmluZSBEVUtfT1BfQkFTUl9DQyAgICAgICAgICAg ICAgOTkKKyNkZWZpbmUgRFVLX09QX0lOU1RPRiAgICAgICAgICAgICAgIDEwMAorI2RlZmluZSBE VUtfT1BfSU5TVE9GX1JSICAgICAgICAgICAgMTAwCisjZGVmaW5lIERVS19PUF9JTlNUT0ZfQ1Ig ICAgICAgICAgICAxMDEKKyNkZWZpbmUgRFVLX09QX0lOU1RPRl9SQyAgICAgICAgICAgIDEwMgor I2RlZmluZSBEVUtfT1BfSU5TVE9GX0NDICAgICAgICAgICAgMTAzCisjZGVmaW5lIERVS19PUF9J TiAgICAgICAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgRFVLX09QX0lOX1JSICAgICAgICAgICAg ICAgIDEwNAorI2RlZmluZSBEVUtfT1BfSU5fQ1IgICAgICAgICAgICAgICAgMTA1CisjZGVmaW5l IERVS19PUF9JTl9SQyAgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgRFVLX09QX0lOX0NDICAg ICAgICAgICAgICAgIDEwNworI2RlZmluZSBEVUtfT1BfR0VUUFJPUCAgICAgICAgICAgICAgMTA4 CisjZGVmaW5lIERVS19PUF9HRVRQUk9QX1JSICAgICAgICAgICAxMDgKKyNkZWZpbmUgRFVLX09Q X0dFVFBST1BfQ1IgICAgICAgICAgIDEwOQorI2RlZmluZSBEVUtfT1BfR0VUUFJPUF9SQyAgICAg ICAgICAgMTEwCisjZGVmaW5lIERVS19PUF9HRVRQUk9QX0NDICAgICAgICAgICAxMTEKKyNkZWZp bmUgRFVLX09QX1BVVFBST1AgICAgICAgICAgICAgIDExMgorI2RlZmluZSBEVUtfT1BfUFVUUFJP UF9SUiAgICAgICAgICAgMTEyCisjZGVmaW5lIERVS19PUF9QVVRQUk9QX0NSICAgICAgICAgICAx MTMKKyNkZWZpbmUgRFVLX09QX1BVVFBST1BfUkMgICAgICAgICAgIDExNAorI2RlZmluZSBEVUtf T1BfUFVUUFJPUF9DQyAgICAgICAgICAgMTE1CisjZGVmaW5lIERVS19PUF9ERUxQUk9QICAgICAg ICAgICAgICAxMTYKKyNkZWZpbmUgRFVLX09QX0RFTFBST1BfUlIgICAgICAgICAgIDExNgorI2Rl ZmluZSBEVUtfT1BfREVMUFJPUF9DUl9VTlVTRUQgICAgMTE3ICAvKiB1bnVzZWQgbm93ICovCisj ZGVmaW5lIERVS19PUF9ERUxQUk9QX1JDICAgICAgICAgICAxMTgKKyNkZWZpbmUgRFVLX09QX0RF TFBST1BfQ0NfVU5VU0VEICAgIDExOSAgLyogdW51c2VkIG5vdyAqLworI2RlZmluZSBEVUtfT1Bf UFJFSU5DUiAgICAgICAgICAgICAgMTIwICAvKiBwcmUvcG9zdCBvcGNvZGUgdmFsdWVzIGhhdmUg Y29uc3RyYWludHMsICovCisjZGVmaW5lIERVS19PUF9QUkVERUNSICAgICAgICAgICAgICAxMjEg IC8qIHNlZSBkdWtfanNfZXhlY3V0b3IuYyBhbmQgZHVrX2pzX2NvbXBpbGVyLmMuICovCisjZGVm aW5lIERVS19PUF9QT1NUSU5DUiAgICAgICAgICAgICAxMjIKKyNkZWZpbmUgRFVLX09QX1BPU1RE RUNSICAgICAgICAgICAgIDEyMworI2RlZmluZSBEVUtfT1BfUFJFSU5DViAgICAgICAgICAgICAg MTI0CisjZGVmaW5lIERVS19PUF9QUkVERUNWICAgICAgICAgICAgICAxMjUKKyNkZWZpbmUgRFVL X09QX1BPU1RJTkNWICAgICAgICAgICAgIDEyNgorI2RlZmluZSBEVUtfT1BfUE9TVERFQ1YgICAg ICAgICAgICAgMTI3CisjZGVmaW5lIERVS19PUF9QUkVJTkNQICAgICAgICAgICAgICAxMjggIC8q IHByZS9wb3N0IGluYy9kZWMgcHJvcCBvcGNvZGVzIGhhdmUgY29uc3RyYWludHMgKi8KKyNkZWZp bmUgRFVLX09QX1BSRUlOQ1BfUlIgICAgICAgICAgIDEyOAorI2RlZmluZSBEVUtfT1BfUFJFSU5D UF9DUiAgICAgICAgICAgMTI5CisjZGVmaW5lIERVS19PUF9QUkVJTkNQX1JDICAgICAgICAgICAx MzAKKyNkZWZpbmUgRFVLX09QX1BSRUlOQ1BfQ0MgICAgICAgICAgIDEzMQorI2RlZmluZSBEVUtf T1BfUFJFREVDUCAgICAgICAgICAgICAgMTMyCisjZGVmaW5lIERVS19PUF9QUkVERUNQX1JSICAg ICAgICAgICAxMzIKKyNkZWZpbmUgRFVLX09QX1BSRURFQ1BfQ1IgICAgICAgICAgIDEzMworI2Rl ZmluZSBEVUtfT1BfUFJFREVDUF9SQyAgICAgICAgICAgMTM0CisjZGVmaW5lIERVS19PUF9QUkVE RUNQX0NDICAgICAgICAgICAxMzUKKyNkZWZpbmUgRFVLX09QX1BPU1RJTkNQICAgICAgICAgICAg IDEzNgorI2RlZmluZSBEVUtfT1BfUE9TVElOQ1BfUlIgICAgICAgICAgMTM2CisjZGVmaW5lIERV S19PUF9QT1NUSU5DUF9DUiAgICAgICAgICAxMzcKKyNkZWZpbmUgRFVLX09QX1BPU1RJTkNQX1JD ICAgICAgICAgIDEzOAorI2RlZmluZSBEVUtfT1BfUE9TVElOQ1BfQ0MgICAgICAgICAgMTM5Cisj ZGVmaW5lIERVS19PUF9QT1NUREVDUCAgICAgICAgICAgICAxNDAKKyNkZWZpbmUgRFVLX09QX1BP U1RERUNQX1JSICAgICAgICAgIDE0MAorI2RlZmluZSBEVUtfT1BfUE9TVERFQ1BfQ1IgICAgICAg ICAgMTQxCisjZGVmaW5lIERVS19PUF9QT1NUREVDUF9SQyAgICAgICAgICAxNDIKKyNkZWZpbmUg RFVLX09QX1BPU1RERUNQX0NDICAgICAgICAgIDE0MworI2RlZmluZSBEVUtfT1BfREVDTFZBUiAg ICAgICAgICAgICAgMTQ0CisjZGVmaW5lIERVS19PUF9ERUNMVkFSX1JSICAgICAgICAgICAxNDQK KyNkZWZpbmUgRFVLX09QX0RFQ0xWQVJfQ1IgICAgICAgICAgIDE0NQorI2RlZmluZSBEVUtfT1Bf REVDTFZBUl9SQyAgICAgICAgICAgMTQ2CisjZGVmaW5lIERVS19PUF9ERUNMVkFSX0NDICAgICAg ICAgICAxNDcKKyNkZWZpbmUgRFVLX09QX1JFR0VYUCAgICAgICAgICAgICAgIDE0OAorI2RlZmlu ZSBEVUtfT1BfUkVHRVhQX1JSICAgICAgICAgICAgMTQ4CisjZGVmaW5lIERVS19PUF9SRUdFWFBf Q1IgICAgICAgICAgICAxNDkKKyNkZWZpbmUgRFVLX09QX1JFR0VYUF9SQyAgICAgICAgICAgIDE1 MAorI2RlZmluZSBEVUtfT1BfUkVHRVhQX0NDICAgICAgICAgICAgMTUxCisjZGVmaW5lIERVS19P UF9DTE9TVVJFICAgICAgICAgICAgICAxNTIKKyNkZWZpbmUgRFVLX09QX1RZUEVPRiAgICAgICAg ICAgICAgIDE1MworI2RlZmluZSBEVUtfT1BfVFlQRU9GSUQgICAgICAgICAgICAgMTU0CisjZGVm aW5lIERVS19PUF9QVVRWQVIgICAgICAgICAgICAgICAxNTUKKyNkZWZpbmUgRFVLX09QX0RFTFZB UiAgICAgICAgICAgICAgIDE1NgorI2RlZmluZSBEVUtfT1BfUkVUUkVHICAgICAgICAgICAgICAg MTU3CisjZGVmaW5lIERVS19PUF9SRVRVTkRFRiAgICAgICAgICAgICAxNTgKKyNkZWZpbmUgRFVL X09QX1JFVENPTlNUICAgICAgICAgICAgIDE1OQorI2RlZmluZSBEVUtfT1BfUkVUQ09OU1ROICAg ICAgICAgICAgMTYwICAvKiByZXR1cm4gY29uc3Qgd2l0aG91dCBpbmNyZWYgKGUuZy4gbnVtYmVy KSAqLworI2RlZmluZSBEVUtfT1BfTEFCRUwgICAgICAgICAgICAgICAgMTYxCisjZGVmaW5lIERV S19PUF9FTkRMQUJFTCAgICAgICAgICAgICAxNjIKKyNkZWZpbmUgRFVLX09QX0JSRUFLICAgICAg ICAgICAgICAgIDE2MworI2RlZmluZSBEVUtfT1BfQ09OVElOVUUgICAgICAgICAgICAgMTY0Cisj ZGVmaW5lIERVS19PUF9UUllDQVRDSCAgICAgICAgICAgICAxNjUKKyNkZWZpbmUgRFVLX09QX0VO RFRSWSAgICAgICAgICAgICAgIDE2NgorI2RlZmluZSBEVUtfT1BfRU5EQ0FUQ0ggICAgICAgICAg ICAgMTY3CisjZGVmaW5lIERVS19PUF9FTkRGSU4gICAgICAgICAgICAgICAxNjgKKyNkZWZpbmUg RFVLX09QX1RIUk9XICAgICAgICAgICAgICAgIDE2OQorI2RlZmluZSBEVUtfT1BfSU5WTEhTICAg ICAgICAgICAgICAgMTcwCisjZGVmaW5lIERVS19PUF9DU1JFRyAgICAgICAgICAgICAgICAxNzEK KyNkZWZpbmUgRFVLX09QX0NTVkFSICAgICAgICAgICAgICAgIDE3MgorI2RlZmluZSBEVUtfT1Bf Q1NWQVJfUlIgICAgICAgICAgICAgMTcyCisjZGVmaW5lIERVS19PUF9DU1ZBUl9DUiAgICAgICAg ICAgICAxNzMKKyNkZWZpbmUgRFVLX09QX0NTVkFSX1JDICAgICAgICAgICAgIDE3NAorI2RlZmlu ZSBEVUtfT1BfQ1NWQVJfQ0MgICAgICAgICAgICAgMTc1CisjZGVmaW5lIERVS19PUF9DQUxMMCAg ICAgICAgICAgICAgICAxNzYgIC8qIERVS19PUF9DQUxMMCAmIDB4MEYgbXVzdCBiZSB6ZXJvLiAq LworI2RlZmluZSBEVUtfT1BfQ0FMTDEgICAgICAgICAgICAgICAgMTc3CisjZGVmaW5lIERVS19P UF9DQUxMMiAgICAgICAgICAgICAgICAxNzgKKyNkZWZpbmUgRFVLX09QX0NBTEwzICAgICAgICAg ICAgICAgIDE3OQorI2RlZmluZSBEVUtfT1BfQ0FMTDQgICAgICAgICAgICAgICAgMTgwCisjZGVm aW5lIERVS19PUF9DQUxMNSAgICAgICAgICAgICAgICAxODEKKyNkZWZpbmUgRFVLX09QX0NBTEw2 ICAgICAgICAgICAgICAgIDE4MgorI2RlZmluZSBEVUtfT1BfQ0FMTDcgICAgICAgICAgICAgICAg MTgzCisjZGVmaW5lIERVS19PUF9DQUxMOCAgICAgICAgICAgICAgICAxODQKKyNkZWZpbmUgRFVL X09QX0NBTEw5ICAgICAgICAgICAgICAgIDE4NQorI2RlZmluZSBEVUtfT1BfQ0FMTDEwICAgICAg ICAgICAgICAgMTg2CisjZGVmaW5lIERVS19PUF9DQUxMMTEgICAgICAgICAgICAgICAxODcKKyNk ZWZpbmUgRFVLX09QX0NBTEwxMiAgICAgICAgICAgICAgIDE4OAorI2RlZmluZSBEVUtfT1BfQ0FM TDEzICAgICAgICAgICAgICAgMTg5CisjZGVmaW5lIERVS19PUF9DQUxMMTQgICAgICAgICAgICAg ICAxOTAKKyNkZWZpbmUgRFVLX09QX0NBTEwxNSAgICAgICAgICAgICAgIDE5MQorI2RlZmluZSBE VUtfT1BfTkVXT0JKICAgICAgICAgICAgICAgMTkyCisjZGVmaW5lIERVS19PUF9ORVdBUlIgICAg ICAgICAgICAgICAxOTMKKyNkZWZpbmUgRFVLX09QX01QVVRPQkogICAgICAgICAgICAgIDE5NAor I2RlZmluZSBEVUtfT1BfTVBVVE9CSkkgICAgICAgICAgICAgMTk1CisjZGVmaW5lIERVS19PUF9J TklUU0VUICAgICAgICAgICAgICAxOTYKKyNkZWZpbmUgRFVLX09QX0lOSVRHRVQgICAgICAgICAg ICAgIDE5NworI2RlZmluZSBEVUtfT1BfTVBVVEFSUiAgICAgICAgICAgICAgMTk4CisjZGVmaW5l IERVS19PUF9NUFVUQVJSSSAgICAgICAgICAgICAxOTkKKyNkZWZpbmUgRFVLX09QX1NFVEFMRU4g ICAgICAgICAgICAgIDIwMAorI2RlZmluZSBEVUtfT1BfSU5JVEVOVU0gICAgICAgICAgICAgMjAx CisjZGVmaW5lIERVS19PUF9ORVhURU5VTSAgICAgICAgICAgICAyMDIKKyNkZWZpbmUgRFVLX09Q X05FV1RBUkdFVCAgICAgICAgICAgIDIwMworI2RlZmluZSBEVUtfT1BfREVCVUdHRVIgICAgICAg ICAgICAgMjA0CisjZGVmaW5lIERVS19PUF9OT1AgICAgICAgICAgICAgICAgICAyMDUKKyNkZWZp bmUgRFVLX09QX0lOVkFMSUQgICAgICAgICAgICAgIDIwNgorI2RlZmluZSBEVUtfT1BfVU5VU0VE MjA3ICAgICAgICAgICAgMjA3CisjZGVmaW5lIERVS19PUF9HRVRQUk9QQyAgICAgICAgICAgICAy MDgKKyNkZWZpbmUgRFVLX09QX0dFVFBST1BDX1JSICAgICAgICAgIDIwOAorI2RlZmluZSBEVUtf T1BfR0VUUFJPUENfQ1IgICAgICAgICAgMjA5CisjZGVmaW5lIERVS19PUF9HRVRQUk9QQ19SQyAg ICAgICAgICAyMTAKKyNkZWZpbmUgRFVLX09QX0dFVFBST1BDX0NDICAgICAgICAgIDIxMQorI2Rl ZmluZSBEVUtfT1BfVU5VU0VEMjEyICAgICAgICAgICAgMjEyCisjZGVmaW5lIERVS19PUF9VTlVT RUQyMTMgICAgICAgICAgICAyMTMKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDIxNCAgICAgICAgICAg IDIxNAorI2RlZmluZSBEVUtfT1BfVU5VU0VEMjE1ICAgICAgICAgICAgMjE1CisjZGVmaW5lIERV S19PUF9VTlVTRUQyMTYgICAgICAgICAgICAyMTYKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDIxNyAg ICAgICAgICAgIDIxNworI2RlZmluZSBEVUtfT1BfVU5VU0VEMjE4ICAgICAgICAgICAgMjE4Cisj ZGVmaW5lIERVS19PUF9VTlVTRUQyMTkgICAgICAgICAgICAyMTkKKyNkZWZpbmUgRFVLX09QX1VO VVNFRDIyMCAgICAgICAgICAgIDIyMAorI2RlZmluZSBEVUtfT1BfVU5VU0VEMjIxICAgICAgICAg ICAgMjIxCisjZGVmaW5lIERVS19PUF9VTlVTRUQyMjIgICAgICAgICAgICAyMjIKKyNkZWZpbmUg RFVLX09QX1VOVVNFRDIyMyAgICAgICAgICAgIDIyMworI2RlZmluZSBEVUtfT1BfVU5VU0VEMjI0 ICAgICAgICAgICAgMjI0CisjZGVmaW5lIERVS19PUF9VTlVTRUQyMjUgICAgICAgICAgICAyMjUK KyNkZWZpbmUgRFVLX09QX1VOVVNFRDIyNiAgICAgICAgICAgIDIyNgorI2RlZmluZSBEVUtfT1Bf VU5VU0VEMjI3ICAgICAgICAgICAgMjI3CisjZGVmaW5lIERVS19PUF9VTlVTRUQyMjggICAgICAg ICAgICAyMjgKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDIyOSAgICAgICAgICAgIDIyOQorI2RlZmlu ZSBEVUtfT1BfVU5VU0VEMjMwICAgICAgICAgICAgMjMwCisjZGVmaW5lIERVS19PUF9VTlVTRUQy MzEgICAgICAgICAgICAyMzEKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDIzMiAgICAgICAgICAgIDIz MgorI2RlZmluZSBEVUtfT1BfVU5VU0VEMjMzICAgICAgICAgICAgMjMzCisjZGVmaW5lIERVS19P UF9VTlVTRUQyMzQgICAgICAgICAgICAyMzQKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDIzNSAgICAg ICAgICAgIDIzNQorI2RlZmluZSBEVUtfT1BfVU5VU0VEMjM2ICAgICAgICAgICAgMjM2CisjZGVm aW5lIERVS19PUF9VTlVTRUQyMzcgICAgICAgICAgICAyMzcKKyNkZWZpbmUgRFVLX09QX1VOVVNF RDIzOCAgICAgICAgICAgIDIzOAorI2RlZmluZSBEVUtfT1BfVU5VU0VEMjM5ICAgICAgICAgICAg MjM5CisjZGVmaW5lIERVS19PUF9VTlVTRUQyNDAgICAgICAgICAgICAyNDAKKyNkZWZpbmUgRFVL X09QX1VOVVNFRDI0MSAgICAgICAgICAgIDI0MQorI2RlZmluZSBEVUtfT1BfVU5VU0VEMjQyICAg ICAgICAgICAgMjQyCisjZGVmaW5lIERVS19PUF9VTlVTRUQyNDMgICAgICAgICAgICAyNDMKKyNk ZWZpbmUgRFVLX09QX1VOVVNFRDI0NCAgICAgICAgICAgIDI0NAorI2RlZmluZSBEVUtfT1BfVU5V U0VEMjQ1ICAgICAgICAgICAgMjQ1CisjZGVmaW5lIERVS19PUF9VTlVTRUQyNDYgICAgICAgICAg ICAyNDYKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDI0NyAgICAgICAgICAgIDI0NworI2RlZmluZSBE VUtfT1BfVU5VU0VEMjQ4ICAgICAgICAgICAgMjQ4CisjZGVmaW5lIERVS19PUF9VTlVTRUQyNDkg ICAgICAgICAgICAyNDkKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDI1MCAgICAgICAgICAgIDI1MAor I2RlZmluZSBEVUtfT1BfVU5VU0VEMjUxICAgICAgICAgICAgMjUxCisjZGVmaW5lIERVS19PUF9V TlVTRUQyNTIgICAgICAgICAgICAyNTIKKyNkZWZpbmUgRFVLX09QX1VOVVNFRDI1MyAgICAgICAg ICAgIDI1MworI2RlZmluZSBEVUtfT1BfVU5VU0VEMjU0ICAgICAgICAgICAgMjU0CisjZGVmaW5l IERVS19PUF9VTlVTRUQyNTUgICAgICAgICAgICAyNTUKKyNkZWZpbmUgRFVLX09QX05PTkUgICAg ICAgICAgICAgICAgIDI1NiAgLyogZHVtbXkgdmFsdWUgdXNlZCBhcyBtYXJrZXIgKGRvZXNuJ3Qg Zml0IGluIDgtYml0IGZpZWxkKSAqLworCisvKiBYWFg6IEFsbG9jYXRlIGZsYWdzIGZyb20gb3Bj b2RlIGZpZWxkPyAgV291bGQgdGFrZSAxNiBvcGNvZGUgc2xvdHMKKyAqIGJ1dCBhdm9pZHMgc2h1 ZmZsaW5nIGluIG1vcmUgY2FzZXMuICBNYXliZSBub3Qgd29ydGggaXQuCisgKi8KKy8qIERVS19P UF9UUllDQVRDSCBmbGFncyBpbiBBLiAqLworI2RlZmluZSBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19I QVZFX0NBVENIICAgICAoMVUgPDwgMCkKKyNkZWZpbmUgRFVLX0JDX1RSWUNBVENIX0ZMQUdfSEFW RV9GSU5BTExZICAgKDFVIDw8IDEpCisjZGVmaW5lIERVS19CQ19UUllDQVRDSF9GTEFHX0NBVENI X0JJTkRJTkcgICgxVSA8PCAyKQorI2RlZmluZSBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19XSVRIX0JJ TkRJTkcgICAoMVUgPDwgMykKKworLyogRFVLX09QX0RFQ0xWQVIgZmxhZ3MgaW4gQTsgYm90dG9t IGJpdHMgYXJlIHJlc2VydmVkIGZvciBwcm9wZGVzYyBmbGFncworICogKERVS19QUk9QREVTQ19G TEFHX1hYWCkuCisgKi8KKyNkZWZpbmUgRFVLX0JDX0RFQ0xWQVJfRkxBR19GVU5DX0RFQ0wgICAg ICAgKDFVIDw8IDQpICAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiAqLworCisvKiBEVUtfT1BfQ0FM TG4gZmxhZ3MsIHBhcnQgb2Ygb3Bjb2RlIGZpZWxkLiAgVGhyZWUgbG93ZXN0IGJpdHMgbXVzdCBt YXRjaAorICogRFVLX0NBTExfRkxBR194eHggZGlyZWN0bHkuCisgKi8KKyNkZWZpbmUgRFVLX0JD X0NBTExfRkxBR19UQUlMQ0FMTCAgICAgICAgICAgKDFVIDw8IDApCisjZGVmaW5lIERVS19CQ19D QUxMX0ZMQUdfQ09OU1RSVUNUICAgICAgICAgICgxVSA8PCAxKQorI2RlZmluZSBEVUtfQkNfQ0FM TF9GTEFHX0NBTExFRF9BU19FVkFMICAgICAoMVUgPDwgMikKKyNkZWZpbmUgRFVLX0JDX0NBTExf RkxBR19JTkRJUkVDVCAgICAgICAgICAgKDFVIDw8IDMpCisKKy8qIE1pc2MgY29uc3RhbnRzIGFu ZCBoZWxwZXIgbWFjcm9zLiAqLworI2RlZmluZSBEVUtfQkNfTERJTlRfQklBUyAgICAgICAgICAg KDFMIDw8IDE1KQorI2RlZmluZSBEVUtfQkNfTERJTlRYX1NISUZUICAgICAgICAgMTYKKyNkZWZp bmUgRFVLX0JDX0pVTVBfQklBUyAgICAgICAgICAgICgxTCA8PCAyMykKKworI2VuZGlmICAvKiBE VUtfSlNfQllURUNPREVfSF9JTkNMVURFRCAqLworLyogI2luY2x1ZGUgZHVrX2xleGVyLmggKi8K Ky8qCisgKiAgTGV4ZXIgZGVmaW5lcy4KKyAqLworCisjaWYgIWRlZmluZWQoRFVLX0xFWEVSX0hf SU5DTFVERUQpCisjZGVmaW5lIERVS19MRVhFUl9IX0lOQ0xVREVECisKK3R5cGVkZWYgdm9pZCAo KmR1a19yZV9yYW5nZV9jYWxsYmFjaykodm9pZCAqdXNlciwgZHVrX2NvZGVwb2ludF90IHIxLCBk dWtfY29kZXBvaW50X3QgcjIsIGR1a19ib29sX3QgZGlyZWN0KTsKKworLyoKKyAqICBBIHRva2Vu IGlzIGludGVycHJldGVkIGFzIGFueSBwb3NzaWJsZSBwcm9kdWN0aW9uIG9mIElucHV0RWxlbWVu dERpdgorICogIGFuZCBJbnB1dEVsZW1lbnRSZWdFeHAsIHNlZSBFNSBTZWN0aW9uIDcgaW4gaXRz IGVudGlyZXR5LiAgTm90ZSB0aGF0CisgKiAgdGhlIEU1ICJUb2tlbiIgcHJvZHVjdGlvbiBkb2Vz IG5vdCBjb3ZlciBhbGwgYWN0dWFsIHRva2VucyBvZiB0aGUKKyAqICBsYW5ndWFnZSAod2hpY2gg aXMgZXhwbGljaXRseSBzdGF0ZWQgaW4gdGhlIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNy41KS4K KyAqICBOdWxsIGFuZCBib29sZWFuIGxpdGVyYWxzIGFyZSBkZWZpbmVkIGFzIHBhcnQgb2YgYm90 aCBSZXNlcnZlZFdvcmQKKyAqICAoRTUgU2VjdGlvbiA3LjYuMSkgYW5kIExpdGVyYWwgKEU1IFNl Y3Rpb24gNy44KSBwcm9kdWN0aW9ucy4gIEhlcmUsCisgKiAgbnVsbCBhbmQgYm9vbGVhbiB2YWx1 ZXMgaGF2ZSBsaXRlcmFsIHRva2VucywgYW5kIGFyZSBub3QgcmVzZXJ2ZWQKKyAqICB3b3Jkcy4K KyAqCisgKiAgRGVjaW1hbCBsaXRlcmFsIG5lZ2F0aXZlL3Bvc2l0aXZlIHNpZ24gaXMgLW5vdC0g cGFydCBvZiBEVUtfVE9LX05VTUJFUi4KKyAqICBUaGUgbnVtYmVyIHRva2VucyBhbHdheXMgaGF2 ZSBhIG5vbi1uZWdhdGl2ZSB2YWx1ZS4gIFRoZSB1bmFyeSBtaW51cworICogIG9wZXJhdG9yIGlu ICItMS4wIiBpcyBvcHRpbWl6ZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHRvIHlpZWxkIGEgc2luZ2xl CisgKiAgbmVnYXRpdmUgY29uc3RhbnQuCisgKgorICogIFRva2VuIG51bWJlcmluZyBpcyBmcmVl IGV4Y2VwdCB0aGF0IHJlc2VydmVkIHdvcmRzIGFyZSByZXF1aXJlZCB0byBiZQorICogIGluIGEg Y29udGludW91cyByYW5nZSBhbmQgaW4gYSBwYXJ0aWN1bGFyIG9yZGVyLiAgU2VlIGdlbnN0cmlu Z3MucHkuCisgKi8KKworI2RlZmluZSBEVUtfTEVYRVJfSU5JVENUWChjdHgpICAgICAgICBkdWtf bGV4ZXJfaW5pdGN0eCgoY3R4KSkKKworI2RlZmluZSBEVUtfTEVYRVJfU0VUUE9JTlQoY3R4LHB0 KSAgICBkdWtfbGV4ZXJfc2V0cG9pbnQoKGN0eCksIChwdCkpCisKKyNkZWZpbmUgRFVLX0xFWEVS X0dFVFBPSU5UKGN0eCxwdCkgICAgZHVrX2xleGVyX2dldHBvaW50KChjdHgpLCAocHQpKQorCisv KiBDdXJyZW50bHkgNiBjaGFyYWN0ZXJzIG9mIGxvb2t1cCBhcmUgYWN0dWFsbHkgbmVlZGVkIChk dWtfbGV4ZXIuYykuICovCisjZGVmaW5lIERVS19MRVhFUl9XSU5ET1dfU0laRSAgICAgICAgICAg ICAgICAgICAgIDYKKyNpZiBkZWZpbmVkKERVS19VU0VfTEVYRVJfU0xJRElOR19XSU5ET1cpCisj ZGVmaW5lIERVS19MRVhFUl9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgIDY0CisjZW5k aWYKKworI2RlZmluZSBEVUtfVE9LX01JTlZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAw CisKKy8qIHJldHVybmVkIGFmdGVyIEVPRiAoaW5maW5pdGUgYW1vdW50KSAqLworI2RlZmluZSBE VUtfVE9LX0VPRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIGlkZW50aWZp ZXIgbmFtZXMgKEU1IFNlY3Rpb24gNy42KSAqLworI2RlZmluZSBEVUtfVE9LX0lERU5USUZJRVIg ICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIHJlc2VydmVkIHdvcmRzOiBrZXl3b3JkcyAq LworI2RlZmluZSBEVUtfVE9LX1NUQVJUX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAyCisj ZGVmaW5lIERVS19UT0tfQlJFQUsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZp bmUgRFVLX1RPS19DQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBE VUtfVE9LX0NBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERVS19U T0tfQ09OVElOVUUgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRFVLX1RPS19E RUJVR0dFUiAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBEVUtfVE9LX0RFRkFV TFQgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIERVS19UT0tfREVMRVRFICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRFVLX1RPS19ETyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBEVUtfVE9LX0VMU0UgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBEVUtfVE9LX0ZJTkFMTFkgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMQorI2RlZmluZSBEVUtfVE9LX0ZPUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMgorI2RlZmluZSBEVUtfVE9LX0ZVTkNUSU9OICAgICAgICAgICAgICAgICAg ICAgICAgICAxMworI2RlZmluZSBEVUtfVE9LX0lGICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxNAorI2RlZmluZSBEVUtfVE9LX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxNQorI2RlZmluZSBEVUtfVE9LX0lOU1RBTkNFT0YgICAgICAgICAgICAgICAgICAgICAgICAx NgorI2RlZmluZSBEVUtfVE9LX05FVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwor I2RlZmluZSBEVUtfVE9LX1JFVFVSTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2Rl ZmluZSBEVUtfVE9LX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmlu ZSBEVUtfVE9LX1RISVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBE VUtfVE9LX1RIUk9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBEVUtf VE9LX1RSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBEVUtfVE9L X1RZUEVPRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBEVUtfVE9LX1ZB UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBEVUtfVE9LX0NPTlNU ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBEVUtfVE9LX1ZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBEVUtfVE9LX1dISUxFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBEVUtfVE9LX1dJVEggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAyOAorCisvKiByZXNlcnZlZCB3b3JkczogZnV0dXJlIHJlc2Vy dmVkIHdvcmRzICovCisjZGVmaW5lIERVS19UT0tfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDI5CisjZGVmaW5lIERVS19UT0tfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDMwCisjZGVmaW5lIERVS19UT0tfRVhQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAg IDMxCisjZGVmaW5lIERVS19UT0tfRVhURU5EUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDMy CisjZGVmaW5lIERVS19UT0tfSU1QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzCisj ZGVmaW5lIERVS19UT0tfU1VQRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0CisKKy8q ICJudWxsIiwgInRydWUiLCBhbmQgImZhbHNlIiBhcmUgYWx3YXlzIHJlc2VydmVkIHdvcmRzLgor ICogTm90ZSB0aGF0ICJnZXQiIGFuZCAic2V0IiBhcmUgbm90IQorICovCisjZGVmaW5lIERVS19U T0tfTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1CisjZGVmaW5lIERVS19UT0tf VFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2CisjZGVmaW5lIERVS19UT0tfRkFM U0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3CisKKy8qIHJlc2VydmVkIHdvcmRzOiBh ZGRpdGlvbmFsIGZ1dHVyZSByZXNlcnZlZCB3b3JkcyBpbiBzdHJpY3QgbW9kZSAqLworI2RlZmlu ZSBEVUtfVE9LX1NUQVJUX1NUUklDVF9SRVNFUlZFRCAgICAgICAgICAgICAzOCAgLyogaW5jbHVz aXZlICovCisjZGVmaW5lIERVS19UT0tfSU1QTEVNRU5UUyAgICAgICAgICAgICAgICAgICAgICAg IDM4CisjZGVmaW5lIERVS19UT0tfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgIDM5 CisjZGVmaW5lIERVS19UT0tfTEVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwCisj ZGVmaW5lIERVS19UT0tfUEFDS0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxCisjZGVm aW5lIERVS19UT0tfUFJJVkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyCisjZGVmaW5l IERVS19UT0tfUFJPVEVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIERV S19UT0tfUFVCTElDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIERVS19U T0tfU1RBVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIERVS19UT0tf WUlFTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2CisKKyNkZWZpbmUgRFVLX1RPS19F TkRfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgNDcgIC8qIGV4Y2x1c2l2ZSAqLworCisv KiAiZ2V0IiBhbmQgInNldCIgYXJlIHRva2VucyBidXQgTk9UIFJlc2VydmVkV29yZHMuICBUaGV5 IGFyZSBjdXJyZW50bHkKKyAqIHBhcnNlZCBhbmQgaWRlbnRpZmllcnMgYW5kIHRoZXNlIGRlZmlu ZXMgYXJlIGFjdHVhbGx5IG5vdyB1bnVzZWQuCisgKi8KKyNkZWZpbmUgRFVLX1RPS19HRVQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRFVLX1RPS19TRVQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgNDgKKworLyogcHVuY3R1YXRvcnMgKHVubGlrZSB0aGUg c3BlYywgYWxzbyBpbmNsdWRlcyAiLyIgYW5kICIvPSIpICovCisjZGVmaW5lIERVS19UT0tfTENV UkxZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5CisjZGVmaW5lIERVS19UT0tfUkNVUkxZ ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIERVS19UT0tfTEJSQUNLRVQg ICAgICAgICAgICAgICAgICAgICAgICAgIDUxCisjZGVmaW5lIERVS19UT0tfUkJSQUNLRVQgICAg ICAgICAgICAgICAgICAgICAgICAgIDUyCisjZGVmaW5lIERVS19UT0tfTFBBUkVOICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDUzCisjZGVmaW5lIERVS19UT0tfUlBBUkVOICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDU0CisjZGVmaW5lIERVS19UT0tfUEVSSU9EICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDU1CisjZGVmaW5lIERVS19UT0tfU0VNSUNPTE9OICAgICAgICAgICAgICAg ICAgICAgICAgIDU2CisjZGVmaW5lIERVS19UT0tfQ09NTUEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDU3CisjZGVmaW5lIERVS19UT0tfTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDU4CisjZGVmaW5lIERVS19UT0tfR1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDU5CisjZGVmaW5lIERVS19UT0tfTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYw CisjZGVmaW5lIERVS19UT0tfR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxCisj ZGVmaW5lIERVS19UT0tfRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyCisjZGVm aW5lIERVS19UT0tfTkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzCisjZGVmaW5l IERVS19UT0tfU0VRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIERV S19UT0tfU05FUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1CisjZGVmaW5lIERVS19U T0tfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIERVS19UT0tf U1VCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY3CisjZGVmaW5lIERVS19UT0tfTVVM ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4CisjZGVmaW5lIERVS19UT0tfRElWICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIERVS19UT0tfTU9EICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIERVS19UT0tfRVhQICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDcxCisjZGVmaW5lIERVS19UT0tfSU5DUkVNRU5UICAgICAg ICAgICAgICAgICAgICAgICAgIDcyCisjZGVmaW5lIERVS19UT0tfREVDUkVNRU5UICAgICAgICAg ICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIERVS19UT0tfQUxTSElGVCAgICAgICAgICAgICAg ICAgICAgICAgICAgIDc0ICAgLyogbmFtZWQgImFyaXRobWV0aWMiIGJlY2F1c2UgcmVzdWx0IGlz IHNpZ25lZCAqLworI2RlZmluZSBEVUtfVE9LX0FSU0hJRlQgICAgICAgICAgICAgICAgICAgICAg ICAgICA3NQorI2RlZmluZSBEVUtfVE9LX1JTSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICA3NgorI2RlZmluZSBEVUtfVE9LX0JBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3 NworI2RlZmluZSBEVUtfVE9LX0JPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OAor I2RlZmluZSBEVUtfVE9LX0JYT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OQorI2Rl ZmluZSBEVUtfVE9LX0xOT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MAorI2RlZmlu ZSBEVUtfVE9LX0JOT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MQorI2RlZmluZSBE VUtfVE9LX0xBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBEVUtf VE9LX0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MworI2RlZmluZSBEVUtfVE9L X1FVRVNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBEVUtfVE9LX0NP TE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NQorI2RlZmluZSBEVUtfVE9LX0VRVUFM U0lHTiAgICAgICAgICAgICAgICAgICAgICAgICA4NgorI2RlZmluZSBEVUtfVE9LX0FERF9FUSAg ICAgICAgICAgICAgICAgICAgICAgICAgICA4NworI2RlZmluZSBEVUtfVE9LX1NVQl9FUSAgICAg ICAgICAgICAgICAgICAgICAgICAgICA4OAorI2RlZmluZSBEVUtfVE9LX01VTF9FUSAgICAgICAg ICAgICAgICAgICAgICAgICAgICA4OQorI2RlZmluZSBEVUtfVE9LX0RJVl9FUSAgICAgICAgICAg ICAgICAgICAgICAgICAgICA5MAorI2RlZmluZSBEVUtfVE9LX01PRF9FUSAgICAgICAgICAgICAg ICAgICAgICAgICAgICA5MQorI2RlZmluZSBEVUtfVE9LX0VYUF9FUSAgICAgICAgICAgICAgICAg ICAgICAgICAgICA5MgorI2RlZmluZSBEVUtfVE9LX0FMU0hJRlRfRVEgICAgICAgICAgICAgICAg ICAgICAgICA5MworI2RlZmluZSBEVUtfVE9LX0FSU0hJRlRfRVEgICAgICAgICAgICAgICAgICAg ICAgICA5NAorI2RlZmluZSBEVUtfVE9LX1JTSElGVF9FUSAgICAgICAgICAgICAgICAgICAgICAg ICA5NQorI2RlZmluZSBEVUtfVE9LX0JBTkRfRVEgICAgICAgICAgICAgICAgICAgICAgICAgICA5 NgorI2RlZmluZSBEVUtfVE9LX0JPUl9FUSAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Nwor I2RlZmluZSBEVUtfVE9LX0JYT1JfRVEgICAgICAgICAgICAgICAgICAgICAgICAgICA5OAorCisv KiBsaXRlcmFscyAoRTUgU2VjdGlvbiA3LjgpLCBleGNlcHQgbnVsbCwgdHJ1ZSwgZmFsc2UsIHdo aWNoIGFyZSB0cmVhdGVkCisgKiBsaWtlIHJlc2VydmVkIHdvcmRzIChhYm92ZSkuCisgKi8KKyNk ZWZpbmUgRFVLX1RPS19OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTkKKyNkZWZp bmUgRFVLX1RPS19TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCisjZGVmaW5l IERVS19UT0tfUkVHRVhQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQorCisjZGVmaW5l IERVS19UT0tfTUFYVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMSAgLyogaW5jbHVz aXZlICovCisKKyNkZWZpbmUgRFVLX1RPS19JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX1NNQUxMX1VJTlRfTUFYCisKKy8qIENvbnZlcnQgaGVhcCBzdHJpbmcgaW5kZXggdG8g YSB0b2tlbiAocmVzZXJ2ZWQgd29yZHMpICovCisjZGVmaW5lIERVS19TVFJJRFhfVE9fVE9LKHgp ICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSAtIERVS19TVFJJRFhfU1RBUlRfUkVTRVJWRUQg KyBEVUtfVE9LX1NUQVJUX1JFU0VSVkVEKQorCisvKiBTYW5pdHkgY2hlY2sgKi8KKyNpZiAoRFVL X1RPS19NQVhWQUwgPiAyNTUpCisjZXJyb3IgRFVLX1RPS19NQVhWQUwgdG9vIGxhcmdlLCBjb2Rl IGFzc3VtZXMgaXQgZml0cyBpbnRvIDggYml0cworI2VuZGlmCisKKy8qIFNhbml0eSBjaGVja3Mg Zm9yIHN0cmluZyBhbmQgdG9rZW4gZGVmaW5lcyAqLworI2lmIChEVUtfU1RSSURYX1RPX1RPSyhE VUtfU1RSSURYX0JSRUFLKSAhPSBEVUtfVE9LX0JSRUFLKQorI2Vycm9yIG1pc21hdGNoIGluIHRv a2VuIGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX0NB U0UpICE9IERVS19UT0tfQ0FTRSkKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisj ZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9DQVRDSCkgIT0gRFVLX1RP S19DQVRDSCkKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAo RFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9DT05USU5VRSkgIT0gRFVLX1RPS19DT05USU5V RSkKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NU UklEWF9UT19UT0soRFVLX1NUUklEWF9ERUJVR0dFUikgIT0gRFVLX1RPS19ERUJVR0dFUikKKyNl cnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9U T19UT0soRFVLX1NUUklEWF9ERUZBVUxUKSAhPSBEVUtfVE9LX0RFRkFVTFQpCisjZXJyb3IgbWlz bWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERV S19TVFJJRFhfREVMRVRFKSAhPSBEVUtfVE9LX0RFTEVURSkKKyNlcnJvciBtaXNtYXRjaCBpbiB0 b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9E TykgIT0gRFVLX1RPS19ETykKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5k aWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9FTFNFKSAhPSBEVUtfVE9LX0VM U0UpCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19T VFJJRFhfVE9fVE9LKERVS19TVFJJRFhfRklOQUxMWSkgIT0gRFVLX1RPS19GSU5BTExZKQorI2Vy cm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RP X1RPSyhEVUtfU1RSSURYX0ZPUikgIT0gRFVLX1RPS19GT1IpCisjZXJyb3IgbWlzbWF0Y2ggaW4g dG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhf TENfRlVOQ1RJT04pICE9IERVS19UT0tfRlVOQ1RJT04pCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9r ZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhfSUYp ICE9IERVS19UT0tfSUYpCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlm CisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhfSU4pICE9IERVS19UT0tfSU4pCisj ZXJyb3IgbWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhf VE9fVE9LKERVS19TVFJJRFhfSU5TVEFOQ0VPRikgIT0gRFVLX1RPS19JTlNUQU5DRU9GKQorI2Vy cm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RP X1RPSyhEVUtfU1RSSURYX05FVykgIT0gRFVLX1RPS19ORVcpCisjZXJyb3IgbWlzbWF0Y2ggaW4g dG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhf UkVUVVJOKSAhPSBEVUtfVE9LX1JFVFVSTikKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZp bmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9TV0lUQ0gpICE9 IERVS19UT0tfU1dJVENIKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRp ZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX1RISVMpICE9IERVS19UT0tfVEhJ UykKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NU UklEWF9UT19UT0soRFVLX1NUUklEWF9USFJPVykgIT0gRFVLX1RPS19USFJPVykKKyNlcnJvciBt aXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0so RFVLX1NUUklEWF9UUlkpICE9IERVS19UT0tfVFJZKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2Vu IGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX1RZUEVP RikgIT0gRFVLX1RPS19UWVBFT0YpCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcwor I2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhfVkFSKSAhPSBEVUtfVE9L X1ZBUikKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVL X1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9WT0lEKSAhPSBEVUtfVE9LX1ZPSUQpCisjZXJyb3Ig bWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9L KERVS19TVFJJRFhfV0hJTEUpICE9IERVS19UT0tfV0hJTEUpCisjZXJyb3IgbWlzbWF0Y2ggaW4g dG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhf V0lUSCkgIT0gRFVLX1RPS19XSVRIKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMK KyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX0NMQVNTKSAhPSBEVUtf VE9LX0NMQVNTKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorI2lm IChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX0NPTlNUKSAhPSBEVUtfVE9LX0NPTlNUKQor I2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURY X1RPX1RPSyhEVUtfU1RSSURYX0VOVU0pICE9IERVS19UT0tfRU5VTSkKKyNlcnJvciBtaXNtYXRj aCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NU UklEWF9FWFBPUlQpICE9IERVS19UT0tfRVhQT1JUKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2Vu IGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX0VYVEVO RFMpICE9IERVS19UT0tfRVhURU5EUykKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVz CisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9JTVBPUlQpICE9IERV S19UT0tfSU1QT1JUKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgor I2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX1NVUEVSKSAhPSBEVUtfVE9LX1NVUEVS KQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RS SURYX1RPX1RPSyhEVUtfU1RSSURYX0xDX05VTEwpICE9IERVS19UT0tfTlVMTCkKKyNlcnJvciBt aXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0so RFVLX1NUUklEWF9UUlVFKSAhPSBEVUtfVE9LX1RSVUUpCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9r ZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhfRkFM U0UpICE9IERVS19UT0tfRkFMU0UpCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcwor I2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhfSU1QTEVNRU5UUykgIT0g RFVLX1RPS19JTVBMRU1FTlRTKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNl bmRpZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX0lOVEVSRkFDRSkgIT0gRFVL X1RPS19JTlRFUkZBQ0UpCisjZXJyb3IgbWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlm CisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhfTEVUKSAhPSBEVUtfVE9LX0xFVCkK KyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZpbmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklE WF9UT19UT0soRFVLX1NUUklEWF9QQUNLQUdFKSAhPSBEVUtfVE9LX1BBQ0tBR0UpCisjZXJyb3Ig bWlzbWF0Y2ggaW4gdG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9L KERVS19TVFJJRFhfUFJJVkFURSkgIT0gRFVLX1RPS19QUklWQVRFKQorI2Vycm9yIG1pc21hdGNo IGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RS SURYX1BST1RFQ1RFRCkgIT0gRFVLX1RPS19QUk9URUNURUQpCisjZXJyb3IgbWlzbWF0Y2ggaW4g dG9rZW4gZGVmaW5lcworI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVE9fVE9LKERVS19TVFJJRFhf UFVCTElDKSAhPSBEVUtfVE9LX1BVQkxJQykKKyNlcnJvciBtaXNtYXRjaCBpbiB0b2tlbiBkZWZp bmVzCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9UT19UT0soRFVLX1NUUklEWF9TVEFUSUMpICE9 IERVS19UT0tfU1RBVElDKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRp ZgorI2lmIChEVUtfU1RSSURYX1RPX1RPSyhEVUtfU1RSSURYX1lJRUxEKSAhPSBEVUtfVE9LX1lJ RUxEKQorI2Vycm9yIG1pc21hdGNoIGluIHRva2VuIGRlZmluZXMKKyNlbmRpZgorCisvKiBSZWdl eHAgdG9rZW5zICovCisjZGVmaW5lIERVS19SRVRPS19FT0YgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwCisjZGVmaW5lIERVS19SRVRPS19ESVNKVU5DVElPTiAgICAgICAgICAgICAgICAg ICAgICAxCisjZGVmaW5lIERVS19SRVRPS19RVUFOVElGSUVSICAgICAgICAgICAgICAgICAgICAg ICAyCisjZGVmaW5lIERVS19SRVRPS19BU1NFUlRfU1RBUlQgICAgICAgICAgICAgICAgICAgICAz CisjZGVmaW5lIERVS19SRVRPS19BU1NFUlRfRU5EICAgICAgICAgICAgICAgICAgICAgICA0Cisj ZGVmaW5lIERVS19SRVRPS19BU1NFUlRfV09SRF9CT1VOREFSWSAgICAgICAgICAgICA1CisjZGVm aW5lIERVS19SRVRPS19BU1NFUlRfTk9UX1dPUkRfQk9VTkRBUlkgICAgICAgICA2CisjZGVmaW5l IERVS19SRVRPS19BU1NFUlRfU1RBUlRfUE9TX0xPT0tBSEVBRCAgICAgICA3CisjZGVmaW5lIERV S19SRVRPS19BU1NFUlRfU1RBUlRfTkVHX0xPT0tBSEVBRCAgICAgICA4CisjZGVmaW5lIERVS19S RVRPS19BVE9NX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIERVS19SRVRP S19BVE9NX0NIQVIgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBEVUtfUkVUT0tf QVRPTV9ESUdJVCAgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIGFzc3VtcHRpb25zIGluIHJl Z2V4cCBjb21waWxlciAqLworI2RlZmluZSBEVUtfUkVUT0tfQVRPTV9OT1RfRElHSVQgICAgICAg ICAgICAgICAgICAgMTIgIC8qIC0iIi0gKi8KKyNkZWZpbmUgRFVLX1JFVE9LX0FUT01fV0hJVEUg ICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiAtIiItICovCisjZGVmaW5lIERVS19SRVRPS19B VE9NX05PVF9XSElURSAgICAgICAgICAgICAgICAgICAxNCAgLyogLSIiLSAqLworI2RlZmluZSBE VUtfUkVUT0tfQVRPTV9XT1JEX0NIQVIgICAgICAgICAgICAgICAgICAgMTUgIC8qIC0iIi0gKi8K KyNkZWZpbmUgRFVLX1JFVE9LX0FUT01fTk9UX1dPUkRfQ0hBUiAgICAgICAgICAgICAgIDE2ICAv KiAtIiItICovCisjZGVmaW5lIERVS19SRVRPS19BVE9NX0JBQ0tSRUZFUkVOQ0UgICAgICAgICAg ICAgICAxNworI2RlZmluZSBEVUtfUkVUT0tfQVRPTV9TVEFSVF9DQVBUVVJFX0dST1VQICAgICAg ICAgMTgKKyNkZWZpbmUgRFVLX1JFVE9LX0FUT01fU1RBUlRfTk9OQ0FQVFVSRV9HUk9VUCAgICAg IDE5CisjZGVmaW5lIERVS19SRVRPS19BVE9NX1NUQVJUX0NIQVJDTEFTUyAgICAgICAgICAgICAy MAorI2RlZmluZSBEVUtfUkVUT0tfQVRPTV9TVEFSVF9DSEFSQ0xBU1NfSU5WRVJURUQgICAgMjEK KyNkZWZpbmUgRFVLX1JFVE9LX0FUT01fRU5EX0dST1VQICAgICAgICAgICAgICAgICAgIDIyCisK Ky8qIENvbnN0YW50cyBmb3IgZHVrX2xleGVyX2N0eC5idWYuICovCisjZGVmaW5lIERVS19MRVhF Ul9URU1QX0JVRl9MSU1JVCAgICAgICAgICAgICAgICAgICAyNTYKKworLyogQSB0b2tlbiB2YWx1 ZS4gIENhbiBiZSBtZW1jcHkoKSdkLCBidXQgbm90ZSB0aGF0IHNsb3QxL3Nsb3QyIHZhbHVlcyBh cmUgb24gdGhlIHZhbHN0YWNrLgorICogU29tZSBmaWVsZHMgKGxpa2UgbnVtLCBzdHIxLCBzdHIy KSBhcmUgb25seSB2YWxpZCBmb3Igc3BlY2lmaWMgdG9rZW4gdHlwZXMgYW5kIG1heSBoYXZlCisg KiBzdGFsZSB2YWx1ZXMgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgZHVrX3Rva2VuIHsKKwlkdWtf c21hbGxfdWludF90IHQ7ICAgICAgICAgICAvKiB0b2tlbiB0eXBlICh3aXRoIHJlc2VydmVkIHdv cmQgaWRlbnRpZmljYXRpb24pICovCisJZHVrX3NtYWxsX3VpbnRfdCB0X25vcmVzOyAgICAgLyog dG9rZW4gdHlwZSAod2l0aCByZXNlcnZlZCB3b3JkcyBhcyBEVUtfVE9LX0lERU5USUZFUikgKi8K KwlkdWtfZG91YmxlX3QgbnVtOyAgICAgICAgICAgICAvKiBudW1lcmljIHZhbHVlIG9mIHRva2Vu ICovCisJZHVrX2hzdHJpbmcgKnN0cjE7ICAgICAgICAgICAgLyogc3RyaW5nIDEgb2YgdG9rZW4g KGJvcnJvd2VkLCBzdG9yZWQgdG8gY3R4LT5zbG90MV9pZHgpICovCisJZHVrX2hzdHJpbmcgKnN0 cjI7ICAgICAgICAgICAgLyogc3RyaW5nIDIgb2YgdG9rZW4gKGJvcnJvd2VkLCBzdG9yZWQgdG8g Y3R4LT5zbG90Ml9pZHgpICovCisJZHVrX3NpemVfdCBzdGFydF9vZmZzZXQ7ICAgICAgLyogc3Rh cnQgYnl0ZSBvZmZzZXQgb2YgdG9rZW4gaW4gbGV4ZXIgaW5wdXQgKi8KKwlkdWtfaW50X3Qgc3Rh cnRfbGluZTsgICAgICAgICAvKiBzdGFydCBsaW5lIG9mIHRva2VuIChmaXJzdCBjaGFyKSAqLwor CWR1a19pbnRfdCBudW1fZXNjYXBlczsgICAgICAgIC8qIG51bWJlciBvZiBlc2NhcGVzIGFuZCBs aW5lIGNvbnRpbnVhdGlvbnMgKGZvciBkaXJlY3RpdmUgcHJvbG9ndWUpICovCisJZHVrX2Jvb2xf dCBsaW5ldGVybTsgICAgICAgICAgLyogdG9rZW4gd2FzIHByZWNlZGVkIGJ5IGEgbGluZXRlcm0g Ki8KKwlkdWtfYm9vbF90IGFsbG93X2F1dG9fc2VtaTsgICAvKiB0b2tlbiBhbGxvd3MgYXV0b21h dGljIHNlbWljb2xvbiBpbnNlcnRpb24gKGVvZiBvciBwcmVjZWRlZCBieSBuZXdsaW5lKSAqLwor fTsKKworI2RlZmluZSBEVUtfUkVfUVVBTlRJRklFUl9JTkZJTklURSAgICAgICAgICgoZHVrX3Vp bnQzMl90KSAweGZmZmZmZmZmVUwpCisKKy8qIEEgcmVnZXhwIHRva2VuIHZhbHVlLiAqLworc3Ry dWN0IGR1a19yZV90b2tlbiB7CisJZHVrX3NtYWxsX3VpbnRfdCB0OyAgICAgICAgICAvKiB0b2tl biB0eXBlICovCisJZHVrX3NtYWxsX3VpbnRfdCBncmVlZHk7CisJZHVrX3VpbnQzMl90IG51bTsg ICAgICAgICAgICAvKiBudW1lcmljIHZhbHVlIChjaGFyYWN0ZXIsIGNvdW50KSAqLworCWR1a191 aW50MzJfdCBxbWluOworCWR1a191aW50MzJfdCBxbWF4OworfTsKKworLyogQSBzdHJ1Y3R1cmUg Zm9yICdzbmFwc2hvdHRpbmcnIGEgcG9pbnQgZm9yIHJld2luZGluZyAqLworc3RydWN0IGR1a19s ZXhlcl9wb2ludCB7CisJZHVrX3NpemVfdCBvZmZzZXQ7CisJZHVrX2ludF90IGxpbmU7Cit9Owor CisvKiBMZXhlciBjb2RlcG9pbnQgd2l0aCBhZGRpdGlvbmFsIGluZm8gbGlrZSBvZmZzZXQvbGlu ZSBudW1iZXIgKi8KK3N0cnVjdCBkdWtfbGV4ZXJfY29kZXBvaW50IHsKKwlkdWtfY29kZXBvaW50 X3QgY29kZXBvaW50OworCWR1a19zaXplX3Qgb2Zmc2V0OworCWR1a19pbnRfdCBsaW5lOworfTsK KworLyogTGV4ZXIgY29udGV4dC4gIFNhbWUgY29udGV4dCBpcyB1c2VkIGZvciBFQ01BU2NyaXB0 IGFuZCBSZWdleHAgcGFyc2luZy4gKi8KK3N0cnVjdCBkdWtfbGV4ZXJfY3R4IHsKKyNpZiBkZWZp bmVkKERVS19VU0VfTEVYRVJfU0xJRElOR19XSU5ET1cpCisJZHVrX2xleGVyX2NvZGVwb2ludCAq d2luZG93OyAvKiB1bmljb2RlIGNvZGUgcG9pbnRzLCB3aW5kb3dbMF0gaXMgYWx3YXlzIG5leHQs IHBvaW50cyB0byAnYnVmZmVyJyAqLworCWR1a19sZXhlcl9jb2RlcG9pbnQgYnVmZmVyW0RVS19M RVhFUl9CVUZGRVJfU0laRV07CisjZWxzZQorCWR1a19sZXhlcl9jb2RlcG9pbnQgd2luZG93W0RV S19MRVhFUl9XSU5ET1dfU0laRV07IC8qIHVuaWNvZGUgY29kZSBwb2ludHMsIHdpbmRvd1swXSBp cyBhbHdheXMgbmV4dCAqLworI2VuZGlmCisKKwlkdWtfaHRocmVhZCAqdGhyOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRocmVhZDsgbWluaW1pemVzIGFyZ3VtZW50IHBhc3Npbmcg Ki8KKworCWNvbnN0IGR1a191aW50OF90ICppbnB1dDsgICAgICAgICAgICAgICAgICAgICAgLyog aW5wdXQgc3RyaW5nIChtYXkgYmUgYSB1c2VyIHBvaW50ZXIpICovCisJZHVrX3NpemVfdCBpbnB1 dF9sZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnB1dCBieXRlIGxlbmd0aCAqLwor CWR1a19zaXplX3QgaW5wdXRfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgLyogaW5wdXQg b2Zmc2V0IGZvciB3aW5kb3cgbGVhZGluZyBlZGdlIChub3Qgd2luZG93WzBdKSAqLworCWR1a19p bnRfdCBpbnB1dF9saW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5wdXQgbGluZW51 bWJlciBhdCBpbnB1dF9vZmZzZXQgKG5vdCB3aW5kb3dbMF0pLCBpbml0IHRvIDEgKi8KKworCWR1 a19pZHhfdCBzbG90MV9pZHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsc3RhY2sg c2xvdCBmb3IgMXN0IHRva2VuIHZhbHVlICovCisJZHVrX2lkeF90IHNsb3QyX2lkeDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB2YWxzdGFjayBzbG90IGZvciAybmQgdG9rZW4gdmFsdWUg Ki8KKwlkdWtfaWR4X3QgYnVmX2lkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZh bHN0YWNrIHNsb3QgZm9yIHRlbXAgYnVmZmVyICovCisJZHVrX2hidWZmZXJfZHluYW1pYyAqYnVm OyAgICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wIGFjY3VtdWxhdGlvbiBidWZmZXIgKi8KKwlk dWtfYnVmd3JpdGVyX2N0eCBidzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1ZndyaXRl ciBmb3IgdGVtcCBhY2N1bXVsYXRpb24gKi8KKworCWR1a19pbnRfdCB0b2tlbl9jb3VudDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRva2VucyBwYXJzZWQgKi8KKwlkdWtf aW50X3QgdG9rZW5fbGltaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1heGltdW0gdG9r ZW4gY291bnQgYmVmb3JlIGVycm9yIChzYW5pdHkgYmFja3N0b3ApICovCisKKwlkdWtfc21hbGxf dWludF90IGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxleGVyIGZsYWdzLCB1c2Ug Y29tcGlsZXIgZmxhZyBkZWZpbmVzIGZvciBub3cgKi8KK307CisKKy8qCisgKiAgUHJvdG90eXBl cworICovCisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2xleGVyX2luaXRjdHgoZHVrX2xl eGVyX2N0eCAqbGV4X2N0eCk7CisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2xleGVyX2dl dHBvaW50KGR1a19sZXhlcl9jdHggKmxleF9jdHgsIGR1a19sZXhlcl9wb2ludCAqcHQpOworRFVL X0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfbGV4ZXJfc2V0cG9pbnQoZHVrX2xleGVyX2N0eCAqbGV4 X2N0eCwgZHVrX2xleGVyX3BvaW50ICpwdCk7CisKK0RVS19JTlRFUk5BTF9ERUNMCit2b2lkIGR1 a19sZXhlcl9wYXJzZV9qc19pbnB1dF9lbGVtZW50KGR1a19sZXhlcl9jdHggKmxleF9jdHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a190b2tlbiAqb3V0X3Rva2Vu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfYm9vbF90IHN0cmlj dF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfYm9vbF90 IHJlZ2V4cF9tb2RlKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19sZXhlcl9wYXJzZV9yZV90b2tlbihkdWtfbGV4ZXJfY3R4 ICpsZXhfY3R4LCBkdWtfcmVfdG9rZW4gKm91dF90b2tlbik7CitEVUtfSU5URVJOQUxfREVDTCB2 b2lkIGR1a19sZXhlcl9wYXJzZV9yZV9yYW5nZXMoZHVrX2xleGVyX2N0eCAqbGV4X2N0eCwgZHVr X3JlX3JhbmdlX2NhbGxiYWNrIGdlbl9yYW5nZSwgdm9pZCAqdXNlcmRhdGEpOworI2VuZGlmICAv KiBEVUtfVVNFX1JFR0VYUF9TVVBQT1JUICovCisKKyNlbmRpZiAgLyogRFVLX0xFWEVSX0hfSU5D TFVERUQgKi8KKy8qICNpbmNsdWRlIGR1a19qc19jb21waWxlci5oICovCisvKgorICogIEVDTUFT Y3JpcHQgY29tcGlsZXIuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19KU19DT01QSUxFUl9IX0lO Q0xVREVEKQorI2RlZmluZSBEVUtfSlNfQ09NUElMRVJfSF9JTkNMVURFRAorCisvKiBFQ01BU2Ny aXB0IGNvbXBpbGVyIGxpbWl0cyAqLworI2RlZmluZSBEVUtfQ09NUElMRVJfVE9LRU5fTElNSVQg ICAgICAgICAgIDEwMDAwMDAwMEwgIC8qIDFlODogcHJvdGVjdHMgYWdhaW5zdCBkZWVwbHkgbmVz dGVkIGlubmVyIGZ1bmN0aW9ucyAqLworCisvKiBtYXhpbXVtIGxvb3Bjb3VudCBmb3IgcGVlcGhv bGUgb3B0aW1pemF0aW9uICovCisjZGVmaW5lIERVS19DT01QSUxFUl9QRUVQSE9MRV9NQVhJVEVS ICAgICAgMworCisvKiBtYXhpbXVtIGJ5dGVjb2RlIGxlbmd0aCBpbiBpbnN0cnVjdGlvbnMgKi8K KyNkZWZpbmUgRFVLX0NPTVBJTEVSX01BWF9CWVRFQ09ERV9MRU5HVEggICAoMjU2TCAqIDEwMjRM ICogMTAyNEwpICAvKiAxIEdCICovCisKKy8qCisgKiAgQ29tcGlsZXIgaW50ZXJtZWRpYXRlIHZh bHVlcworICoKKyAqICBJbnRlcm1lZGlhdGUgdmFsdWVzIGRlc2NyaWJlIGVpdGhlciBwbGFpbiB2 YWx1ZXMgKGUuZy4gc3RyaW5ncyBvcgorICogIG51bWJlcnMpIG9yIGJpbmFyeSBvcGVyYXRpb25z IHdoaWNoIGhhdmUgbm90IHlldCBiZWVuIGNvZXJjZWQgaW50bworICogIGVpdGhlciBhIGxlZnQt aGFuZC1zaWRlIG9yIHJpZ2h0LWhhbmQtc2lkZSByb2xlIChlLmcuIG9iamVjdCBwcm9wZXJ0eSku CisgKi8KKworI2RlZmluZSBEVUtfSVZBTF9OT05FICAgICAgICAgIDAgICAvKiBubyB2YWx1ZSAq LworI2RlZmluZSBEVUtfSVZBTF9QTEFJTiAgICAgICAgIDEgICAvKiByZWdpc3RlciwgY29uc3Rh bnQsIG9yIHZhbHVlICovCisjZGVmaW5lIERVS19JVkFMX0FSSVRIICAgICAgICAgMiAgIC8qIGJp bmFyeSBhcml0aG1ldGljOyBEVUtfT1BfQURELCBEVUtfT1BfRVEsIG90aGVyIGJpbmFyeSBvcHMg Ki8KKyNkZWZpbmUgRFVLX0lWQUxfUFJPUCAgICAgICAgICAzICAgLyogcHJvcGVydHkgYWNjZXNz ICovCisjZGVmaW5lIERVS19JVkFMX1ZBUiAgICAgICAgICAgNCAgIC8qIHZhcmlhYmxlIGFjY2Vz cyAqLworCisjZGVmaW5lIERVS19JU1BFQ19OT05FICAgICAgICAgMCAgIC8qIG5vIHZhbHVlICov CisjZGVmaW5lIERVS19JU1BFQ19WQUxVRSAgICAgICAgMSAgIC8qIHZhbHVlIHJlc2lkZXMgaW4g J3ZhbHN0YWNrX2lkeCcgKi8KKyNkZWZpbmUgRFVLX0lTUEVDX1JFR0NPTlNUICAgICAyICAgLyog dmFsdWUgcmVzaWRlcyBpbiBhIHJlZ2lzdGVyIG9yIGNvbnN0YW50ICovCisKKy8qIEJpdCBtYXNr IHdoaWNoIGluZGljYXRlcyB0aGF0IGEgcmVnY29uc3QgaXMgYSBjb25zdGFudCBpbnN0ZWFkIG9m IGEgcmVnaXN0ZXIuCisgKiBDaG9zZW4gc28gdGhhdCB3aGVuIGEgcmVnY29uc3QgaXMgY2FzdCB0 byBkdWtfaW50MzJfdCwgYWxsIGNvbnN0cyBhcmUKKyAqIG5lZ2F0aXZlIHZhbHVlcy4KKyAqLwor I2RlZmluZSBEVUtfUkVHQ09OU1RfQ09OU1RfTUFSS0VSICAgIERVS19JTlQzMl9NSU4gIC8qID0g LTB4ODAwMDAwMDAgKi8KKworLyogVHlwZSB0byByZXByZXNlbnQgYSByZWcvY29uc3QgcmVmZXJl bmNlIGR1cmluZyBjb21waWxhdGlvbiwgd2l0aCA8MAorICogaW5kaWNhdGluZyBhIGNvbnN0YW50 LiAgU29tZSBjYWxsIHNpdGVzIGFsc28gdXNlIC0xIHRvIGluZGljYXRlICdub25lJy4KKyAqLwor dHlwZWRlZiBkdWtfaW50MzJfdCBkdWtfcmVnY29uc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgewor CWR1a19zbWFsbF91aW50X3QgdDsgICAgICAgICAgLyogRFVLX0lTUEVDX1hYWCAqLworCWR1a19y ZWdjb25zdF90IHJlZ2NvbnN0OworCWR1a19pZHhfdCB2YWxzdGFja19pZHg7ICAgICAgLyogYWx3 YXlzIHNldDsgcG9pbnRzIHRvIGEgcmVzZXJ2ZWQgdmFsc3RhY2sgc2xvdCAqLworfSBkdWtfaXNw ZWM7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKgorCSAqICBQTEFJTjogeDEKKwkgKiAgQVJJVEg6 IHgxIDxvcD4geDIKKwkgKiAgUFJPUDogeDEueDIKKwkgKiAgVkFSOiB4MSAobmFtZSkKKwkgKi8K KworCS8qIFhYWDogY2FuIGJlIG9wdGltaXplZCBmb3Igc21hbGxlciBmb290cHJpbnQgZXNwLiBv biAzMi1iaXQgZW52aXJvbm1lbnRzICovCisJZHVrX3NtYWxsX3VpbnRfdCB0OyAgICAgICAgICAv KiBEVUtfSVZBTF9YWFggKi8KKwlkdWtfc21hbGxfdWludF90IG9wOyAgICAgICAgIC8qIGJ5dGVj b2RlIG9wY29kZSBmb3IgYmluYXJ5IG9wcyAqLworCWR1a19pc3BlYyB4MTsKKwlkdWtfaXNwZWMg eDI7Cit9IGR1a19pdmFsdWU7CisKKy8qCisgKiAgQnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmVwcmVz ZW50YXRpb24gZHVyaW5nIGNvbXBpbGF0aW9uCisgKgorICogIENvbnRhaW5zIHRoZSBhY3R1YWwg aW5zdHJ1Y3Rpb24gYW5kIChvcHRpb25hbGx5KSBkZWJ1ZyBpbmZvLgorICovCisKK3N0cnVjdCBk dWtfY29tcGlsZXJfaW5zdHIgeworCWR1a19pbnN0cl90IGluczsKKyNpZiBkZWZpbmVkKERVS19V U0VfUEMyTElORSkKKwlkdWtfdWludDMyX3QgbGluZTsKKyNlbmRpZgorfTsKKworLyoKKyAqICBD b21waWxlciBzdGF0ZQorICovCisKKyNkZWZpbmUgRFVLX0xBQkVMX0ZMQUdfQUxMT1dfQlJFQUsg ICAgICAgKDFVIDw8IDApCisjZGVmaW5lIERVS19MQUJFTF9GTEFHX0FMTE9XX0NPTlRJTlVFICAg ICgxVSA8PCAxKQorCisjZGVmaW5lIERVS19ERUNMX1RZUEVfVkFSICAgICAgICAgICAgICAgIDAK KyNkZWZpbmUgRFVLX0RFQ0xfVFlQRV9GVU5DICAgICAgICAgICAgICAgMQorCisvKiBYWFg6IG9w dGltaXplIHRvIDE2IGJ5dGVzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZHVrX3NtYWxsX3VpbnRf dCBmbGFnczsKKwlkdWtfaW50X3QgbGFiZWxfaWQ7ICAgICAgICAgIC8qIG51bWVyaWMgbGFiZWxf aWQgKC0xIHJlc2VydmVkIGFzIG1hcmtlcikgKi8KKwlkdWtfaHN0cmluZyAqaF9sYWJlbDsgICAg ICAgIC8qIGJvcnJvd2VkIGxhYmVsIG5hbWUgKi8KKwlkdWtfaW50X3QgY2F0Y2hfZGVwdGg7ICAg ICAgIC8qIGNhdGNoIGRlcHRoIGF0IHBvaW50IG9mIGRlZmluaXRpb24gKi8KKwlkdWtfaW50X3Qg cGNfbGFiZWw7ICAgICAgICAgIC8qIHBjIG9mIGxhYmVsIHN0YXRlbWVudDoKKwkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIHBjKzE6IGJyZWFrIGp1bXAgc2l0ZQorCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogcGMrMjogY29udGludWUganVtcCBzaXRlCisJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi8KKworCS8qIEZhc3QganVtcHMgKHdoaWNoIGF2b2lkIGxv bmdqbXApIGp1bXAgZGlyZWN0bHkgdG8gdGhlIGp1bXAgc2l0ZXMKKwkgKiB3aGljaCBhcmUgYWx3 YXlzIGtub3duIGV2ZW4gd2hpbGUgdGhlIGl0ZXJhdGlvbi9zd2l0Y2ggc3RhdGVtZW50CisJICog aXMgc3RpbGwgYmVpbmcgcGFyc2VkLiAgQSBmaW5hbCBwZWVwaG9sZSBwYXNzICJzdHJhaWdodGVu cyBvdXQiCisJICogdGhlIGp1bXBzLgorCSAqLworfSBkdWtfbGFiZWxpbmZvOworCisvKiBDb21w aWxpbmcgc3RhdGUgb2Ygb25lIGZ1bmN0aW9uLCBldmVudHVhbGx5IGNvbnZlcnRlZCB0byBkdWtf aGNvbXBmdW5jICovCitzdHJ1Y3QgZHVrX2NvbXBpbGVyX2Z1bmMgeworCS8qIFRoZXNlIHBvaW50 ZXJzIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cnVjdCBzbyB0aGF0IHRoZXkgcGFjaworCSAq IG5pY2VseS4gIE1peGluZyBwb2ludGVycyBhbmQgaW50ZWdlciB2YWx1ZXMgaXMgYmFkIG9uIHNv bWUKKwkgKiBwbGF0Zm9ybXMgKGUuZy4gaWYgaW50IGlzIDMyIGJpdHMgYW5kIHBvaW50ZXJzIGFy ZSA2NCBiaXRzKS4KKwkgKi8KKworCWR1a19idWZ3cml0ZXJfY3R4IGJ3X2NvZGU7ICAgICAgICAg IC8qIGJ1ZndyaXRlciBmb3IgY29kZSAqLworCisJZHVrX2hzdHJpbmcgKmhfbmFtZTsgICAgICAg ICAgICAgICAgLyogZnVuY3Rpb24gbmFtZSAoYm9ycm93ZWQgcmVmZXJlbmNlKSwgZW5kcyB1cCBp biBfbmFtZSAqLworCS8qIGhfY29kZTogaGVsZCBpbiBid19jb2RlICovCisJZHVrX2hvYmplY3Qg KmhfY29uc3RzOyAgICAgICAgICAgICAgLyogYXJyYXkgKi8KKwlkdWtfaG9iamVjdCAqaF9mdW5j czsgICAgICAgICAgICAgICAvKiBhcnJheSBvZiBmdW5jdGlvbiB0ZW1wbGF0ZXM6IFtmdW5jMSwg b2Zmc2V0MSwgbGluZTEsIGZ1bmMyLCBvZmZzZXQyLCBsaW5lMl0KKwkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBvZmZzZXQvbGluZSBwb2ludHMgdG8gY2xvc2luZyBicmFj ZSB0byBhbGxvdyBza2lwcGluZyBvbiBwYXNzIDIKKwkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KKwlkdWtfaG9iamVjdCAqaF9kZWNsczsgICAgICAgICAgICAgICAvKiBh cnJheSBvZiBkZWNsYXJhdGlvbnM6IFsgbmFtZTEsIHZhbDEsIG5hbWUyLCB2YWwyLCAuLi4gXQor CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbE4gPSAodHlwZU4pIHwg KGZudW0gPDwgOCksIHdoZXJlIGZudW0gaXMgaW5uZXIgZnVuYyBudW1iZXIgKDAgZm9yIHZhcnMp CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVjb3JkIGZ1bmN0aW9u IGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW4gcGFzcyAxCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisJZHVrX2hvYmplY3QgKmhfbGFiZWxuYW1lczsgICAgICAg ICAgLyogYXJyYXkgb2YgYWN0aXZlIGxhYmVsIG5hbWVzICovCisJZHVrX2hidWZmZXJfZHluYW1p YyAqaF9sYWJlbGluZm9zOyAgLyogQyBhcnJheSBvZiBkdWtfbGFiZWxpbmZvICovCisJZHVrX2hv YmplY3QgKmhfYXJnbmFtZXM7ICAgICAgICAgICAgLyogYXJyYXkgb2YgZm9ybWFsIGFyZ3VtZW50 IG5hbWVzICgtPiBfRm9ybWFscykgKi8KKwlkdWtfaG9iamVjdCAqaF92YXJtYXA7ICAgICAgICAg ICAgICAvKiB2YXJpYWJsZSBtYXAgZm9yIHBhc3MgMiAoaWRlbnRpZmllciAtPiByZWdpc3RlciBu dW1iZXIgb3IgbnVsbCAodW5tYXBwZWQpKSAqLworCisJLyogVmFsdWUgc3RhY2sgaW5kaWNlcyBm b3IgdHJhY2tpbmcgb2JqZWN0cy4gKi8KKwkvKiBjb2RlX2lkeDogbm90IG5lZWRlZCAqLworCWR1 a19pZHhfdCBjb25zdHNfaWR4OworCWR1a19pZHhfdCBmdW5jc19pZHg7CisJZHVrX2lkeF90IGRl Y2xzX2lkeDsKKwlkdWtfaWR4X3QgbGFiZWxuYW1lc19pZHg7CisJZHVrX2lkeF90IGxhYmVsaW5m b3NfaWR4OworCWR1a19pZHhfdCBhcmduYW1lc19pZHg7CisJZHVrX2lkeF90IHZhcm1hcF9pZHg7 CisKKwkvKiBUZW1wIHJlZyBoYW5kbGluZy4gKi8KKwlkdWtfcmVnY29uc3RfdCB0ZW1wX2ZpcnN0 OyAgICAgICAgICAgLyogZmlyc3QgcmVnaXN0ZXIgdGhhdCBpcyBhIHRlbXBvcmFyeSAoYmVsb3c6 IHZhcmlhYmxlcykgKi8KKwlkdWtfcmVnY29uc3RfdCB0ZW1wX25leHQ7ICAgICAgICAgICAgLyog bmV4dCB0ZW1wb3JhcnkgcmVnaXN0ZXIgdG8gYWxsb2NhdGUgKi8KKwlkdWtfcmVnY29uc3RfdCB0 ZW1wX21heDsgICAgICAgICAgICAgLyogaGlnaGVzdCB2YWx1ZSBvZiB0ZW1wX3JlZyAodGVtcF9t YXggLSAxIGlzIGhpZ2hlc3QgdXNlZCByZWcpICovCisKKwkvKiBTaHVmZmxlIHJlZ2lzdGVycyBp ZiBsYXJnZSBudW1iZXIgb2YgcmVncy9jb25zdHMuICovCisJZHVrX3JlZ2NvbnN0X3Qgc2h1ZmZs ZTE7CisJZHVrX3JlZ2NvbnN0X3Qgc2h1ZmZsZTI7CisJZHVrX3JlZ2NvbnN0X3Qgc2h1ZmZsZTM7 CisKKwkvKiBTdGF0cyBmb3IgY3VycmVudCBleHByZXNzaW9uIGJlaW5nIHBhcnNlZC4gKi8KKwlk dWtfaW50X3QgbnVkX2NvdW50OworCWR1a19pbnRfdCBsZWRfY291bnQ7CisJZHVrX2ludF90IHBh cmVuX2xldmVsOyAgICAgICAgICAgICAgLyogcGFyZW50aGVzaXMgY291bnQsIDAgPSB0b3AgbGV2 ZWwgKi8KKwlkdWtfYm9vbF90IGV4cHJfbGhzOyAgICAgICAgICAgICAgICAvKiBleHByZXNzaW9u IGlzIGxlZnQtaGFuZC1zaWRlIGNvbXBhdGlibGUgKi8KKwlkdWtfYm9vbF90IGFsbG93X2luOyAg ICAgICAgICAgICAgICAvKiBjdXJyZW50IHBhcmVuIGxldmVsIGFsbG93cyAnaW4nIHRva2VuICov CisKKwkvKiBNaXNjLiAqLworCWR1a19pbnRfdCBzdG10X25leHQ7ICAgICAgICAgICAgICAgIC8q IHN0YXRlbWVudCBpZCBhbGxvY2F0aW9uIChydW5uaW5nIGNvdW50ZXIpICovCisJZHVrX2ludF90 IGxhYmVsX25leHQ7ICAgICAgICAgICAgICAgLyogbGFiZWwgaWQgYWxsb2NhdGlvbiAocnVubmlu ZyBjb3VudGVyKSAqLworCWR1a19pbnRfdCBjYXRjaF9kZXB0aDsgICAgICAgICAgICAgIC8qIGNh dGNoIHN0YWNrIGRlcHRoICovCisJZHVrX2ludF90IHdpdGhfZGVwdGg7ICAgICAgICAgICAgICAg Lyogd2l0aCBzdGFjayBkZXB0aCAoYWZmZWN0cyBpZGVudGlmaWVyIGxvb2t1cHMpICovCisJZHVr X2ludF90IGZudW1fbmV4dDsgICAgICAgICAgICAgICAgLyogaW5uZXIgZnVuY3Rpb24gbnVtYmVy aW5nICovCisJZHVrX2ludF90IG51bV9mb3JtYWxzOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9m IGZvcm1hbCBhcmd1bWVudHMgKi8KKwlkdWtfcmVnY29uc3RfdCByZWdfc3RtdF92YWx1ZTsgICAg ICAvKiByZWdpc3RlciBmb3Igd3JpdGluZyB2YWx1ZSBvZiAnbm9uLWVtcHR5JyBzdGF0ZW1lbnRz IChnbG9iYWwgb3IgZXZhbCBjb2RlKSwgLTEgaXMgbWFya2VyICovCisjaWYgZGVmaW5lZChEVUtf VVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJZHVrX2ludF90IG1pbl9saW5lOyAgICAgICAgICAgICAg ICAgLyogWFhYOiB0eXBpbmcgKGR1a19oY29tcGZ1bmMgaGFzIGR1a191aW50MzJfdCkgKi8KKwlk dWtfaW50X3QgbWF4X2xpbmU7CisjZW5kaWYKKworCS8qIFN0YXR1cyBib29sZWFucy4gKi8KKwlk dWtfdWludDhfdCBpc19mdW5jdGlvbjsgICAgICAgICAgICAgLyogaXMgYW4gYWN0dWFsIGZ1bmN0 aW9uIChub3QgZ2xvYmFsL2V2YWwgY29kZSkgKi8KKwlkdWtfdWludDhfdCBpc19ldmFsOyAgICAg ICAgICAgICAgICAgLyogaXMgZXZhbCBjb2RlICovCisJZHVrX3VpbnQ4X3QgaXNfZ2xvYmFsOyAg ICAgICAgICAgICAgIC8qIGlzIGdsb2JhbCBjb2RlICovCisJZHVrX3VpbnQ4X3QgaXNfbmFtZWJp bmRpbmc7ICAgICAgICAgIC8qIG5lZWRzIGEgbmFtZSBiaW5kaW5nICovCisJZHVrX3VpbnQ4X3Qg aXNfY29uc3RydWN0YWJsZTsgICAgICAgIC8qIHJlc3VsdCBpcyBjb25zdHJ1Y3RhYmxlICovCisJ ZHVrX3VpbnQ4X3QgaXNfc2V0Z2V0OyAgICAgICAgICAgICAgIC8qIGlzIGEgc2V0dGVyL2dldHRl ciAqLworCWR1a191aW50OF90IGlzX3N0cmljdDsgICAgICAgICAgICAgICAvKiBmdW5jdGlvbiBp cyBzdHJpY3QgKi8KKwlkdWtfdWludDhfdCBpc19ub3RhaWw7ICAgICAgICAgICAgICAgLyogZnVu Y3Rpb24gbXVzdCBub3QgYmUgdGFpbCBjYWxsZWQgKi8KKwlkdWtfdWludDhfdCBpbl9kaXJlY3Rp dmVfcHJvbG9ndWU7ICAgLyogcGFyc2luZyBpbiAiZGlyZWN0aXZlIHByb2xvZ3VlIiwgcmVjb2du aXplIGRpcmVjdGl2ZXMgKi8KKwlkdWtfdWludDhfdCBpbl9zY2FubmluZzsgICAgICAgICAgICAg LyogcGFyc2luZyBpbiAic2Nhbm5pbmciIHBoYXNlIChmaXJzdCBwYXNzKSAqLworCWR1a191aW50 OF90IG1heV9kaXJlY3RfZXZhbDsgICAgICAgICAvKiBmdW5jdGlvbiBtYXkgY2FsbCBkaXJlY3Qg ZXZhbCAqLworCWR1a191aW50OF90IGlkX2FjY2Vzc19hcmd1bWVudHM7ICAgICAvKiBmdW5jdGlv biByZWZlcnMgdG8gJ2FyZ3VtZW50cycgaWRlbnRpZmllciAqLworCWR1a191aW50OF90IGlkX2Fj Y2Vzc19zbG93OyAgICAgICAgICAvKiBmdW5jdGlvbiBtYWtlcyBvbmUgb3IgbW9yZSBzbG93IHBh dGggYWNjZXNzZXMgdGhhdCB3b24ndCBtYXRjaCBvd24gc3RhdGljIHZhcmlhYmxlcyAqLworCWR1 a191aW50OF90IGlkX2FjY2Vzc19zbG93X293bjsgICAgICAvKiBmdW5jdGlvbiBtYWtlcyBvbmUg b3IgbW9yZSBzbG93IHBhdGggYWNjZXNzZXMgdGhhdCBtYXkgbWF0Y2ggb3duIHN0YXRpYyB2YXJp YWJsZXMgKi8KKwlkdWtfdWludDhfdCBpc19hcmd1bWVudHNfc2hhZG93ZWQ7ICAgLyogYXJndW1l bnQvZnVuY3Rpb24gZGVjbGFyYXRpb24gc2hhZG93cyAnYXJndW1lbnRzJyAqLworCWR1a191aW50 OF90IG5lZWRzX3NodWZmbGU7ICAgICAgICAgICAvKiBmdW5jdGlvbiBuZWVkcyBzaHVmZmxlIHJl Z2lzdGVycyAqLworCWR1a191aW50OF90IHJlamVjdF9yZWdleHBfaW5fYWR2OyAgICAvKiByZWpl Y3QgUmVnRXhwIGxpdGVyYWwgb24gbmV4dCBhZHZhbmNlKCkgY2FsbDsgbmVlZGVkIGZvciBoYW5k bGluZyBJZGVudGlmaWVyTmFtZSBwcm9kdWN0aW9ucyAqLworCWR1a191aW50OF90IGFsbG93X3Jl Z2V4cF9pbl9hZHY7ICAgICAvKiBhbGxvdyBSZWdFeHAgbGl0ZXJhbCBvbiBuZXh0IGFkdmFuY2Uo KSBjYWxsICovCit9OworCitzdHJ1Y3QgZHVrX2NvbXBpbGVyX2N0eCB7CisJZHVrX2h0aHJlYWQg KnRocjsKKworCS8qIGZpbGVuYW1lIGJlaW5nIGNvbXBpbGVkIChlbmRzIHVwIGluIGZ1bmN0aW9u cycgJ19maWxlbmFtZScgcHJvcGVydHkpICovCisJZHVrX2hzdHJpbmcgKmhfZmlsZW5hbWU7ICAg ICAgICAgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisKKwkvKiBsZXhpbmcgKHRva2VuaXph dGlvbikgc3RhdGUgKGNvbnRhaW5zIHR3byB2YWxzdGFjayBzbG90IGluZGljZXMpICovCisJZHVr X2xleGVyX2N0eCBsZXg7CisKKwkvKiBjdXJyZW50IGFuZCBwcmV2aW91cyB0b2tlbiBmb3IgcGFy c2luZyAqLworCWR1a190b2tlbiBwcmV2X3Rva2VuOworCWR1a190b2tlbiBjdXJyX3Rva2VuOwor CWR1a19pZHhfdCB0b2sxMV9pZHg7ICAgICAgICAgICAgICAgIC8qIGN1cnJfdG9rZW4gc2xvdDEg KG1hdGNoZXMgJ2xleCcgc2xvdDFfaWR4KSAqLworCWR1a19pZHhfdCB0b2sxMl9pZHg7ICAgICAg ICAgICAgICAgIC8qIGN1cnJfdG9rZW4gc2xvdDIgKG1hdGNoZXMgJ2xleCcgc2xvdDJfaWR4KSAq LworCWR1a19pZHhfdCB0b2syMV9pZHg7ICAgICAgICAgICAgICAgIC8qIHByZXZfdG9rZW4gc2xv dDEgKi8KKwlkdWtfaWR4X3QgdG9rMjJfaWR4OyAgICAgICAgICAgICAgICAvKiBwcmV2X3Rva2Vu IHNsb3QyICovCisKKwkvKiByZWN1cnNpb24gbGltaXQgKi8KKwlkdWtfaW50X3QgcmVjdXJzaW9u X2RlcHRoOworCWR1a19pbnRfdCByZWN1cnNpb25fbGltaXQ7CisKKwkvKiBjb2RlIGVtaXNzaW9u IHRlbXBvcmFyeSAqLworCWR1a19pbnRfdCBlbWl0X2p1bXBzbG90X3BjOworCisJLyogY3VycmVu dCBmdW5jdGlvbiBiZWluZyBjb21waWxlZCAoZW1iZWRkZWQgaW5zdGVhZCBvZiBwb2ludGVyIGZv ciBtb3JlIGNvbXBhY3QgYWNjZXNzKSAqLworCWR1a19jb21waWxlcl9mdW5jIGN1cnJfZnVuYzsK K307CisKKy8qCisgKiAgUHJvdG90eXBlcworICovCisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX2pzX2NvbXBpbGUoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgZHVrX3VpbnQ4X3QgKnNyY19i dWZmZXIsIGR1a19zaXplX3Qgc3JjX2xlbmd0aCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncyk7CisK KyNlbmRpZiAgLyogRFVLX0pTX0NPTVBJTEVSX0hfSU5DTFVERUQgKi8KKy8qICNpbmNsdWRlIGR1 a19yZWdleHAuaCAqLworLyoKKyAqICBSZWd1bGFyIGV4cHJlc3Npb24gc3RydWN0cywgY29uc3Rh bnRzLCBhbmQgYnl0ZWNvZGUgZGVmaW5lcy4KKyAqLworCisjaWYgIWRlZmluZWQoRFVLX1JFR0VY UF9IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfUkVHRVhQX0hfSU5DTFVERUQKKworLyogbWF4aW11 bSBieXRlY29kZSBjb3BpZXMgZm9yIHtuLG19IHF1YW50aWZpZXJzICovCisjZGVmaW5lIERVS19S RV9NQVhfQVRPTV9DT1BJRVMgICAgICAgICAgICAgMTAwMAorCisvKiByZWdleHAgY29tcGlsYXRp b24gbGltaXRzICovCisjZGVmaW5lIERVS19SRV9DT01QSUxFX1RPS0VOX0xJTUlUICAgICAgICAg MTAwMDAwMDAwTCAgIC8qIDFlOCAqLworCisvKiByZWdleHAgZXhlY3V0aW9uIGxpbWl0cyAqLwor I2RlZmluZSBEVUtfUkVfRVhFQ1VURV9TVEVQU19MSU1JVCAgICAgICAgIDEwMDAwMDAwMDBMICAv KiAxZTkgKi8KKworLyogcmVnZXhwIG9wY29kZXMgKi8KKyNkZWZpbmUgRFVLX1JFT1BfTUFUQ0gg ICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERVS19SRU9QX0NIQVIgICAgICAgICAgICAg ICAgICAgICAgMgorI2RlZmluZSBEVUtfUkVPUF9QRVJJT0QgICAgICAgICAgICAgICAgICAgIDMK KyNkZWZpbmUgRFVLX1JFT1BfUkFOR0VTICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERV S19SRU9QX0lOVlJBTkdFUyAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBEVUtfUkVPUF9KVU1Q ICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRFVLX1JFT1BfU1BMSVQxICAgICAgICAg ICAgICAgICAgICA3CisjZGVmaW5lIERVS19SRU9QX1NQTElUMiAgICAgICAgICAgICAgICAgICAg OAorI2RlZmluZSBEVUtfUkVPUF9TUU1JTklNQUwgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUg RFVLX1JFT1BfU1FHUkVFRFkgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBEVUtfUkVPUF9T QVZFICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIERVS19SRU9QX1dJUEVSQU5HRSAg ICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRFVLX1JFT1BfTE9PS1BPUyAgICAgICAgICAgICAg ICAgICAxMworI2RlZmluZSBEVUtfUkVPUF9MT09LTkVHICAgICAgICAgICAgICAgICAgIDE0Cisj ZGVmaW5lIERVS19SRU9QX0JBQ0tSRUZFUkVOQ0UgICAgICAgICAgICAgMTUKKyNkZWZpbmUgRFVL X1JFT1BfQVNTRVJUX1NUQVJUICAgICAgICAgICAgICAxNgorI2RlZmluZSBEVUtfUkVPUF9BU1NF UlRfRU5EICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIERVS19SRU9QX0FTU0VSVF9XT1JEX0JP VU5EQVJZICAgICAgMTgKKyNkZWZpbmUgRFVLX1JFT1BfQVNTRVJUX05PVF9XT1JEX0JPVU5EQVJZ ICAxOQorCisvKiBmbGFncyAqLworI2RlZmluZSBEVUtfUkVfRkxBR19HTE9CQUwgICAgICAgICAg ICAgICAgICgxVSA8PCAwKQorI2RlZmluZSBEVUtfUkVfRkxBR19JR05PUkVfQ0FTRSAgICAgICAg ICAgICgxVSA8PCAxKQorI2RlZmluZSBEVUtfUkVfRkxBR19NVUxUSUxJTkUgICAgICAgICAgICAg ICgxVSA8PCAyKQorCitzdHJ1Y3QgZHVrX3JlX21hdGNoZXJfY3R4IHsKKwlkdWtfaHRocmVhZCAq dGhyOworCisJZHVrX3VpbnQzMl90IHJlX2ZsYWdzOworCWNvbnN0IGR1a191aW50OF90ICppbnB1 dDsKKwljb25zdCBkdWtfdWludDhfdCAqaW5wdXRfZW5kOworCWNvbnN0IGR1a191aW50OF90ICpi eXRlY29kZTsKKwljb25zdCBkdWtfdWludDhfdCAqYnl0ZWNvZGVfZW5kOworCWNvbnN0IGR1a191 aW50OF90ICoqc2F2ZWQ7ICAvKiBhbGxvY2F0ZWQgZnJvbSB2YWxzdGFjayAoZml4ZWQgYnVmZmVy KSAqLworCWR1a191aW50MzJfdCBuc2F2ZWQ7CisJZHVrX3VpbnQzMl90IHJlY3Vyc2lvbl9kZXB0 aDsKKwlkdWtfdWludDMyX3QgcmVjdXJzaW9uX2xpbWl0OworCWR1a191aW50MzJfdCBzdGVwc19j b3VudDsKKwlkdWtfdWludDMyX3Qgc3RlcHNfbGltaXQ7Cit9OworCitzdHJ1Y3QgZHVrX3JlX2Nv bXBpbGVyX2N0eCB7CisJZHVrX2h0aHJlYWQgKnRocjsKKworCWR1a191aW50MzJfdCByZV9mbGFn czsKKwlkdWtfbGV4ZXJfY3R4IGxleDsKKwlkdWtfcmVfdG9rZW4gY3Vycl90b2tlbjsKKwlkdWtf YnVmd3JpdGVyX2N0eCBidzsKKwlkdWtfdWludDMyX3QgY2FwdHVyZXM7ICAvKiBoaWdoZXN0IGNh cHR1cmUgbnVtYmVyIGVtaXR0ZWQgc28gZmFyICh1c2VkIGFzOiArK2NhcHR1cmVzKSAqLworCWR1 a191aW50MzJfdCBoaWdoZXN0X2JhY2tyZWY7CisJZHVrX3VpbnQzMl90IHJlY3Vyc2lvbl9kZXB0 aDsKKwlkdWtfdWludDMyX3QgcmVjdXJzaW9uX2xpbWl0OworCWR1a191aW50MzJfdCBucmFuZ2Vz OyAgLyogaW50ZXJuYWwgdGVtcG9yYXJ5IHZhbHVlLCB1c2VkIGZvciBjaGFyIGNsYXNzZXMgKi8K K307CisKKy8qCisgKiAgUHJvdG90eXBlcworICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVH RVhQX1NVUFBPUlQpCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19yZWdleHBfY29tcGlsZShk dWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3JlZ2V4cF9jcmVh dGVfaW5zdGFuY2UoZHVrX2h0aHJlYWQgKnRocik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1 a19yZWdleHBfbWF0Y2goZHVrX2h0aHJlYWQgKnRocik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lk IGR1a19yZWdleHBfbWF0Y2hfZm9yY2VfZ2xvYmFsKGR1a19odGhyZWFkICp0aHIpOyAgLyogaGFj a3kgaGVscGVyIGZvciBTdHJpbmcucHJvdG90eXBlLnNwbGl0KCkgKi8KKyNlbmRpZgorCisjZW5k aWYgIC8qIERVS19SRUdFWFBfSF9JTkNMVURFRCAqLworLyogI2luY2x1ZGUgZHVrX2hlYXBoZHIu aCAqLworLyoKKyAqICBIZWFwIGhlYWRlciBkZWZpbml0aW9uIGFuZCBhc3NvcnRlZCBtYWNyb3Ms IGluY2x1ZGluZyByZWYgY291bnRpbmcuCisgKiAgQWNjZXNzIGFsbCBmaWVsZHMgdGhyb3VnaCB0 aGUgYWNjZXNzb3IgbWFjcm9zLgorICovCisKKyNpZiAhZGVmaW5lZChEVUtfSEVBUEhEUl9IX0lO Q0xVREVEKQorI2RlZmluZSBEVUtfSEVBUEhEUl9IX0lOQ0xVREVECisKKy8qCisgKiAgQ29tbW9u IGhlYXAgaGVhZGVyCisgKgorICogIEFsbCBoZWFwIG9iamVjdHMgc2hhcmUgdGhlIHNhbWUgZmxh Z3MgYW5kIHJlZmNvdW50IGZpZWxkcy4gIE9iamVjdHMgb3RoZXIKKyAqICB0aGFuIHN0cmluZ3Mg YWxzbyBuZWVkIHRvIGhhdmUgYSBzaW5nbGUgb3IgZG91YmxlIGxpbmtlZCBsaXN0IHBvaW50ZXJz CisgKiAgZm9yIGluc2VydGlvbiBpbnRvIHRoZSAiaGVhcCBhbGxvY2F0ZWQiIGxpc3QuICBTdHJp bmdzIGhhdmUgc2luZ2xlIGxpbmtlZAorICogIGxpc3QgcG9pbnRlcnMgZm9yIHN0cmluZyB0YWJs ZSBjaGFpbmluZy4KKyAqCisgKiAgVGVjaG5pY2FsbHksICdoX3JlZmNvdW50JyBtdXN0IGJlIHdp ZGUgZW5vdWdoIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbm5vdAorICogIHdyYXA7IG90aGVyd2lz ZSBvYmplY3RzIG1pZ2h0IGJlIGZyZWVkIGluY29ycmVjdGx5IGFmdGVyIHdyYXBwaW5nLiAgVGhl CisgKiAgZGVmYXVsdCByZWZjb3VudCBmaWVsZCBpcyAzMiBiaXRzIGV2ZW4gb24gNjQtYml0IHN5 c3RlbXM6IHdoaWxlIHRoYXQncyBpbgorICogIHRoZW9yeSBpbmNvcnJlY3QsIHRoZSBEdWt0YXBl IGhlYXAgbmVlZHMgdG8gYmUgbGFyZ2VyIHRoYW4gNjRHQiBmb3IgdGhlCisgKiAgY291bnQgdG8g YWN0dWFsbHkgd3JhcCAoYXNzdW1pbmcgMTYtYnl0ZSBkdWtfdHZhbHMpLiAgVGhpcyBpcyB2ZXJ5 IHVubGlrZWx5CisgKiAgdG8gZXZlciBiZSBhbiBpc3N1ZSwgYnV0IGlmIGl0IGlzLCBkaXNhYmxp bmcgRFVLX1VTRV9SRUZDT1VOVDMyIGNhdXNlcworICogIER1a3RhcGUgdG8gdXNlIHNpemVfdCBm b3IgcmVmY291bnRzIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgc2FmZS4KKyAqCisgKiAgSGVhcCBo ZWFkZXIgc2l6ZSBvbiAzMi1iaXQgcGxhdGZvcm1zOiA4IGJ5dGVzIHdpdGhvdXQgcmVmZXJlbmNl IGNvdW50aW5nLAorICogIDE2IGJ5dGVzIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLgorICoKKyAq ICBOb3RlIHRoYXQgJ3JhdycgbWFjcm9zIHN1Y2ggYXMgRFVLX0hFQVBIRFJfR0VUX1JFRkNPVU5U KCkgYXJlIG5vdAorICogIGRlZmluZWQgd2l0aG91dCBEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElO Rywgc28gY2FsbGVyIG11c3QgI2lmIGRlZmluZWQoKQorICogIGFyb3VuZCB0aGVtLgorICovCisK Ky8qIFhYWDogbWFjcm8gZm9yIHNoYXJlZCBoZWFkZXIgZmllbGRzIChhdm9pZHMgc29tZSBwYWRk aW5nIGlzc3VlcykgKi8KKworc3RydWN0IGR1a19oZWFwaGRyIHsKKwlkdWtfdWludDMyX3QgaF9m bGFnczsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisjaWYgZGVm aW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJLyogV2hlbiBhc3NlcnRpb25zIGVuYWJsZWQsIHVz ZWQgYnkgbWFyay1hbmQtc3dlZXAgZm9yIHJlZmNvdW50CisJICogdmFsaWRhdGlvbi4gIExhcmdl c3QgcmVhc29uYWJsZSB0eXBlOyBhbHNvIGRldGVjdHMgb3ZlcmZsb3dzLgorCSAqLworCWR1a19z aXplX3QgaF9hc3NlcnRfcmVmY291bnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVG Q09VTlQxNikKKwlkdWtfdWludDE2X3QgaF9yZWZjb3VudDsKKyNlbGlmIGRlZmluZWQoRFVLX1VT RV9SRUZDT1VOVDMyKQorCWR1a191aW50MzJfdCBoX3JlZmNvdW50OworI2Vsc2UKKwlkdWtfc2l6 ZV90IGhfcmVmY291bnQ7CisjZW5kaWYKKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09V TlRJTkcgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQxNl90 IGhfbmV4dDE2OworI2Vsc2UKKwlkdWtfaGVhcGhkciAqaF9uZXh0OworI2VuZGlmCisKKyNpZiBk ZWZpbmVkKERVS19VU0VfRE9VQkxFX0xJTktFRF9IRUFQKQorCS8qIHJlZmNvdW50aW5nIHJlcXVp cmVzIGRpcmVjdCBoZWFwIGZyZWVzLCB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIGEgZHVhbCBsaW5r ZWQgaGVhcCAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQxNl90 IGhfcHJldjE2OworI2Vsc2UKKwlkdWtfaGVhcGhkciAqaF9wcmV2OworI2VuZGlmCisjZW5kaWYK KworCS8qIFdoZW4gRFVLX1VTRV9IRUFQUFRSMTYgKGFuZCBEVUtfVVNFX1JFRkNPVU5UMTYpIGlz IGluIHVzZSwgdGhlCisJICogc3RydWN0IHdvbid0IGFsaWduIG5pY2VseSB0byA0IGJ5dGVzLiAg VGhpcyAxNi1iaXQgZXh0cmEgZmllbGQKKwkgKiBpcyBhZGRlZCB0byBtYWtlIHRoZSBhbGlnbm1l bnQgY2xlYW47IHRoZSBmaWVsZCBjYW4gYmUgdXNlZCBieQorCSAqIGhlYXAgb2JqZWN0cyB3aGVu IDE2LWJpdCBwYWNraW5nIGlzIHVzZWQuICBUaGlzIGZpZWxkIGlzIG5vdworCSAqIGNvbmRpdGlv bmFsIHRvIERVS19VU0VfSEVBUFBUUjE2IG9ubHksIGJ1dCBpdCBpcyBpbnRlbmRlZCB0byBiZQor CSAqIHVzZWQgd2l0aCBEVUtfVVNFX1JFRkNPVU5UMTYgYW5kIERVS19VU0VfRE9VQkxFX0xJTktF RF9IRUFQOworCSAqIHRoaXMgb25seSBtYXR0ZXIgdG8gbG93IG1lbW9yeSBlbnZpcm9ubWVudHMg YW55d2F5LgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQx Nl90IGhfZXh0cmExNjsKKyNlbmRpZgorfTsKKworc3RydWN0IGR1a19oZWFwaGRyX3N0cmluZyB7 CisJLyogMTYgYml0cyB3b3VsZCBiZSBlbm91Z2ggZm9yIHNoYXJlZCBoZWFwaGRyIGZsYWdzIGFu ZCBkdWtfaHN0cmluZworCSAqIGZsYWdzLiAgVGhlIGluaXRpYWwgcGFydHMgb2YgZHVrX2hlYXBo ZHJfc3RyaW5nIGFuZCBkdWtfaGVhcGhkcgorCSAqIG11c3QgbWF0Y2ggc28gY2hhbmdpbmcgdGhl IGZsYWdzIGZpZWxkIHNpemUgaGVyZSB3b3VsZCBiZSBxdWl0ZQorCSAqIGF3a3dhcmQuICBIb3dl dmVyLCB0byBtaW5pbWl6ZSBzdHJ1Y3Qgc2l6ZSwgd2UgY2FuIHBhY2sgYXQgbGVhc3QKKwkgKiAx NiBiaXRzIG9mIGR1a19oc3RyaW5nIGRhdGEgaW50byB0aGUgZmxhZ3MgZmllbGQuCisJICovCisJ ZHVrX3VpbnQzMl90IGhfZmxhZ3M7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NP VU5USU5HKQorI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCS8qIFdoZW4gYXNzZXJ0 aW9ucyBlbmFibGVkLCB1c2VkIGJ5IG1hcmstYW5kLXN3ZWVwIGZvciByZWZjb3VudAorCSAqIHZh bGlkYXRpb24uICBMYXJnZXN0IHJlYXNvbmFibGUgdHlwZTsgYWxzbyBkZXRlY3RzIG92ZXJmbG93 cy4KKwkgKi8KKwlkdWtfc2l6ZV90IGhfYXNzZXJ0X3JlZmNvdW50OworI2VuZGlmCisjaWYgZGVm aW5lZChEVUtfVVNFX1JFRkNPVU5UMTYpCisJZHVrX3VpbnQxNl90IGhfcmVmY291bnQ7CisJZHVr X3VpbnQxNl90IGhfc3RyZXh0cmExNjsgIC8qIHJvdW5kIG91dCB0byA4IGJ5dGVzICovCisjZWxp ZiBkZWZpbmVkKERVS19VU0VfUkVGQ09VTlQzMikKKwlkdWtfdWludDMyX3QgaF9yZWZjb3VudDsK KyNlbHNlCisJZHVrX3NpemVfdCBoX3JlZmNvdW50OworI2VuZGlmCisjZWxzZQorCWR1a191aW50 MTZfdCBoX3N0cmV4dHJhMTY7CisjZW5kaWYgIC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5H ICovCisKKwlkdWtfaHN0cmluZyAqaF9uZXh0OworCS8qIE5vICdoX3ByZXYnIHBvaW50ZXIgZm9y IHN0cmluZ3MuICovCit9OworCisjZGVmaW5lIERVS19IRUFQSERSX0ZMQUdTX1RZUEVfTUFTSyAg ICAgIDB4MDAwMDAwMDNVTAorI2RlZmluZSBEVUtfSEVBUEhEUl9GTEFHU19GTEFHX01BU0sgICAg ICAofkRVS19IRUFQSERSX0ZMQUdTX1RZUEVfTUFTSykKKworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMiBiaXRzIGZvciBoZWFwIHR5cGUgKi8KKyNkZWZp bmUgRFVLX0hFQVBIRFJfRkxBR1NfSEVBUF9TVEFSVCAgICAgMiAgIC8qIDUgaGVhcCBmbGFncyAq LworI2RlZmluZSBEVUtfSEVBUEhEUl9GTEFHU19VU0VSX1NUQVJUICAgICA3ICAgLyogMjUgdXNl ciBmbGFncyAqLworCisjZGVmaW5lIERVS19IRUFQSERSX0hFQVBfRkxBR19OVU1CRVIobikgIChE VUtfSEVBUEhEUl9GTEFHU19IRUFQX1NUQVJUICsgKG4pKQorI2RlZmluZSBEVUtfSEVBUEhEUl9V U0VSX0ZMQUdfTlVNQkVSKG4pICAoRFVLX0hFQVBIRFJfRkxBR1NfVVNFUl9TVEFSVCArIChuKSkK KyNkZWZpbmUgRFVLX0hFQVBIRFJfSEVBUF9GTEFHKG4pICAgICAgICAgKDFVTCA8PCAoRFVLX0hF QVBIRFJfRkxBR1NfSEVBUF9TVEFSVCArIChuKSkpCisjZGVmaW5lIERVS19IRUFQSERSX1VTRVJf RkxBRyhuKSAgICAgICAgICgxVUwgPDwgKERVS19IRUFQSERSX0ZMQUdTX1VTRVJfU1RBUlQgKyAo bikpKQorCisjZGVmaW5lIERVS19IRUFQSERSX0ZMQUdfUkVBQ0hBQkxFICAgICAgIERVS19IRUFQ SERSX0hFQVBfRkxBRygwKSAgLyogbWFyay1hbmQtc3dlZXA6IHJlYWNoYWJsZSAqLworI2RlZmlu ZSBEVUtfSEVBUEhEUl9GTEFHX1RFTVBST09UICAgICAgICBEVUtfSEVBUEhEUl9IRUFQX0ZMQUco MSkgIC8qIG1hcmstYW5kLXN3ZWVwOiBjaGlsZHJlbiBub3QgcHJvY2Vzc2VkICovCisjZGVmaW5l IERVS19IRUFQSERSX0ZMQUdfRklOQUxJWkFCTEUgICAgIERVS19IRUFQSERSX0hFQVBfRkxBRygy KSAgLyogbWFyay1hbmQtc3dlZXA6IGZpbmFsaXphYmxlIChvbiBjdXJyZW50IHBhc3MpICovCisj ZGVmaW5lIERVS19IRUFQSERSX0ZMQUdfRklOQUxJWkVEICAgICAgIERVS19IRUFQSERSX0hFQVBf RkxBRygzKSAgLyogbWFyay1hbmQtc3dlZXA6IGZpbmFsaXplZCAob24gcHJldmlvdXMgcGFzcykg Ki8KKyNkZWZpbmUgRFVLX0hFQVBIRFJfRkxBR19SRUFET05MWSAgICAgICAgRFVLX0hFQVBIRFJf SEVBUF9GTEFHKDQpICAvKiByZWFkLW9ubHkgb2JqZWN0LCBpbiBjb2RlIHNlY3Rpb24gKi8KKwor I2RlZmluZSBEVUtfSFRZUEVfTUlOICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERVS19I VFlQRV9TVFJJTkcgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX0hUWVBFX09CSkVDVCAg ICAgICAgICAgICAgICAgMQorI2RlZmluZSBEVUtfSFRZUEVfQlVGRkVSICAgICAgICAgICAgICAg ICAyCisjZGVmaW5lIERVS19IVFlQRV9NQVggICAgICAgICAgICAgICAgICAgIDIKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisjZGVmaW5lIERVS19IRUFQSERSX0dFVF9ORVhUKGhl YXAsaCkgXAorCSgoZHVrX2hlYXBoZHIgKikgRFVLX1VTRV9IRUFQUFRSX0RFQzE2KChoZWFwKS0+ aGVhcF91ZGF0YSwgKGgpLT5oX25leHQxNikpCisjZGVmaW5lIERVS19IRUFQSERSX1NFVF9ORVhU KGhlYXAsaCx2YWwpICAgZG8geyBcCisJCShoKS0+aF9uZXh0MTYgPSBEVUtfVVNFX0hFQVBQVFJf RU5DMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAodm9pZCAqKSB2YWwpOyBcCisJfSB3aGlsZSAoMCkK KyNlbHNlCisjZGVmaW5lIERVS19IRUFQSERSX0dFVF9ORVhUKGhlYXAsaCkgICgoaCktPmhfbmV4 dCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfU0VUX05FWFQoaGVhcCxoLHZhbCkgICBkbyB7IFwKKwkJ KGgpLT5oX25leHQgPSAodmFsKTsgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ET1VCTEVfTElOS0VEX0hFQVApCisjaWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQ VFIxNikKKyNkZWZpbmUgRFVLX0hFQVBIRFJfR0VUX1BSRVYoaGVhcCxoKSBcCisJKChkdWtfaGVh cGhkciAqKSBEVUtfVVNFX0hFQVBQVFJfREVDMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAoaCktPmhf cHJldjE2KSkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfU0VUX1BSRVYoaGVhcCxoLHZhbCkgICBkbyB7 IFwKKwkJKGgpLT5oX3ByZXYxNiA9IERVS19VU0VfSEVBUFBUUl9FTkMxNigoaGVhcCktPmhlYXBf dWRhdGEsICh2b2lkICopICh2YWwpKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBE VUtfSEVBUEhEUl9HRVRfUFJFVihoZWFwLGgpICAgICAgICgoaCktPmhfcHJldikKKyNkZWZpbmUg RFVLX0hFQVBIRFJfU0VUX1BSRVYoaGVhcCxoLHZhbCkgICBkbyB7IFwKKwkJKGgpLT5oX3ByZXYg PSAodmFsKTsgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChE VUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKyNkZWZpbmUgRFVLX0hFQVBIRFJfR0VUX1JFRkNP VU5UKGgpICAgKChoKS0+aF9yZWZjb3VudCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfU0VUX1JFRkNP VU5UKGgsdmFsKSAgZG8geyBcCisJCShoKS0+aF9yZWZjb3VudCA9ICh2YWwpOyBcCisJCURVS19B U1NFUlQoKGgpLT5oX3JlZmNvdW50ID09ICh2YWwpKTsgIC8qIE5vIHRydW5jYXRpb24uICovIFwK Kwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSEVBUEhEUl9QUkVJTkNfUkVGQ09VTlQoaCkgICgr KyhoKS0+aF9yZWZjb3VudCkgIC8qIHJlc3VsdDogdXBkYXRlZCByZWZjb3VudCAqLworI2RlZmlu ZSBEVUtfSEVBUEhEUl9QUkVERUNfUkVGQ09VTlQoaCkgICgtLShoKS0+aF9yZWZjb3VudCkgIC8q IHJlc3VsdDogdXBkYXRlZCByZWZjb3VudCAqLworI2Vsc2UKKy8qIHJlZmNvdW50IG1hY3JvcyBu b3QgZGVmaW5lZCB3aXRob3V0IHJlZmNvdW50aW5nLCBjYWxsZXIgbXVzdCAjaWYgZGVmaW5lZCgp IG5vdyAqLworI2VuZGlmICAvKiBEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORyAqLworCisvKgor ICogIE5vdGU6IHR5cGUgaXMgdHJlYXRlZCBhcyBhIGZpZWxkIHNlcGFyYXRlIGZyb20gZmxhZ3Ms IHNvIHNvbWUgbWFza2luZyBpcworICogIGludm9sdmVkIGluIHRoZSBtYWNyb3MgYmVsb3cuCisg Ki8KKworI2RlZmluZSBEVUtfSEVBUEhEUl9HRVRfRkxBR1NfUkFXKGgpICAoKGgpLT5oX2ZsYWdz KQorI2RlZmluZSBEVUtfSEVBUEhEUl9TRVRfRkxBR1NfUkFXKGgsdmFsKSAgZG8geyBcCisJCSho KS0+aF9mbGFncyA9ICh2YWwpOyB9IFwKKwl9CisjZGVmaW5lIERVS19IRUFQSERSX0dFVF9GTEFH UyhoKSAgICAgICgoaCktPmhfZmxhZ3MgJiBEVUtfSEVBUEhEUl9GTEFHU19GTEFHX01BU0spCisj ZGVmaW5lIERVS19IRUFQSERSX1NFVF9GTEFHUyhoLHZhbCkgIGRvIHsgXAorCQkoaCktPmhfZmxh Z3MgPSAoKGgpLT5oX2ZsYWdzICYgfihEVUtfSEVBUEhEUl9GTEFHU19GTEFHX01BU0spKSB8ICh2 YWwpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfR0VUX1RZUEUoaCkgICAg ICAgKChoKS0+aF9mbGFncyAmIERVS19IRUFQSERSX0ZMQUdTX1RZUEVfTUFTSykKKyNkZWZpbmUg RFVLX0hFQVBIRFJfU0VUX1RZUEUoaCx2YWwpICAgZG8geyBcCisJCShoKS0+aF9mbGFncyA9ICgo aCktPmhfZmxhZ3MgJiB+KERVS19IRUFQSERSX0ZMQUdTX1RZUEVfTUFTSykpIHwgKHZhbCk7IFwK Kwl9IHdoaWxlICgwKQorCisvKiBDb21wYXJpc29uIGZvciB0eXBlID49IERVS19IVFlQRV9NSU4g c2tpcHBlZDsgYmVjYXVzZSBEVUtfSFRZUEVfTUlOIGlzIHplcm8KKyAqIGFuZCB0aGUgY29tcGFy aXNvbiBpcyB1bnNpZ25lZCwgaXQncyBhbHdheXMgdHJ1ZSBhbmQgZ2VuZXJhdGVzIHdhcm5pbmdz LgorICovCisjZGVmaW5lIERVS19IRUFQSERSX0hUWVBFX1ZBTElEKGgpICAgICggXAorCURVS19I RUFQSERSX0dFVF9UWVBFKChoKSkgPD0gRFVLX0hUWVBFX01BWCBcCisJKQorCisjZGVmaW5lIERV S19IRUFQSERSX1NFVF9UWVBFX0FORF9GTEFHUyhoLHR2YWwsZnZhbCkgIGRvIHsgXAorCQkoaCkt PmhfZmxhZ3MgPSAoKHR2YWwpICYgRFVLX0hFQVBIRFJfRkxBR1NfVFlQRV9NQVNLKSB8IFwKKwkJ ICAgICAgICAgICAgICAgKChmdmFsKSAmIERVS19IRUFQSERSX0ZMQUdTX0ZMQUdfTUFTSyk7IFwK Kwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19IRUFQSERSX1NFVF9GTEFHX0JJVFMoaCxiaXRz KSAgZG8geyBcCisJCURVS19BU1NFUlQoKChiaXRzKSAmIH4oRFVLX0hFQVBIRFJfRkxBR1NfRkxB R19NQVNLKSkgPT0gMCk7IFwKKwkJKGgpLT5oX2ZsYWdzIHw9IChiaXRzKTsgXAorCX0gd2hpbGUg KDApCisKKyNkZWZpbmUgRFVLX0hFQVBIRFJfQ0xFQVJfRkxBR19CSVRTKGgsYml0cykgIGRvIHsg XAorCQlEVUtfQVNTRVJUKCgoYml0cykgJiB+KERVS19IRUFQSERSX0ZMQUdTX0ZMQUdfTUFTSykp ID09IDApOyBcCisJCShoKS0+aF9mbGFncyAmPSB+KChiaXRzKSk7IFwKKwl9IHdoaWxlICgwKQor CisjZGVmaW5lIERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUyhoLGJpdHMpICAoKChoKS0+aF9m bGFncyAmIChiaXRzKSkgIT0gMCkKKworI2RlZmluZSBEVUtfSEVBUEhEUl9TRVRfUkVBQ0hBQkxF KGgpICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19S RUFDSEFCTEUpCisjZGVmaW5lIERVS19IRUFQSERSX0NMRUFSX1JFQUNIQUJMRShoKSAgICBEVUtf SEVBUEhEUl9DTEVBUl9GTEFHX0JJVFMoKGgpLERVS19IRUFQSERSX0ZMQUdfUkVBQ0hBQkxFKQor I2RlZmluZSBEVUtfSEVBUEhEUl9IQVNfUkVBQ0hBQkxFKGgpICAgICAgRFVLX0hFQVBIRFJfQ0hF Q0tfRkxBR19CSVRTKChoKSxEVUtfSEVBUEhEUl9GTEFHX1JFQUNIQUJMRSkKKworI2RlZmluZSBE VUtfSEVBUEhEUl9TRVRfVEVNUFJPT1QoaCkgICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklU UygoaCksRFVLX0hFQVBIRFJfRkxBR19URU1QUk9PVCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfQ0xF QVJfVEVNUFJPT1QoaCkgICAgIERVS19IRUFQSERSX0NMRUFSX0ZMQUdfQklUUygoaCksRFVLX0hF QVBIRFJfRkxBR19URU1QUk9PVCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfSEFTX1RFTVBST09UKGgp ICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19U RU1QUk9PVCkKKworI2RlZmluZSBEVUtfSEVBUEhEUl9TRVRfRklOQUxJWkFCTEUoaCkgICAgRFVL X0hFQVBIRFJfU0VUX0ZMQUdfQklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19GSU5BTElaQUJMRSkK KyNkZWZpbmUgRFVLX0hFQVBIRFJfQ0xFQVJfRklOQUxJWkFCTEUoaCkgIERVS19IRUFQSERSX0NM RUFSX0ZMQUdfQklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19GSU5BTElaQUJMRSkKKyNkZWZpbmUg RFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpBQkxFKGgpICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdf QklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19GSU5BTElaQUJMRSkKKworI2RlZmluZSBEVUtfSEVB UEhEUl9TRVRfRklOQUxJWkVEKGgpICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygoaCks RFVLX0hFQVBIRFJfRkxBR19GSU5BTElaRUQpCisjZGVmaW5lIERVS19IRUFQSERSX0NMRUFSX0ZJ TkFMSVpFRChoKSAgICBEVUtfSEVBUEhEUl9DTEVBUl9GTEFHX0JJVFMoKGgpLERVS19IRUFQSERS X0ZMQUdfRklOQUxJWkVEKQorI2RlZmluZSBEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkVEKGgpICAg ICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxBR19CSVRTKChoKSxEVUtfSEVBUEhEUl9GTEFHX0ZJTkFM SVpFRCkKKworI2RlZmluZSBEVUtfSEVBUEhEUl9TRVRfUkVBRE9OTFkoaCkgICAgICAgRFVLX0hF QVBIRFJfU0VUX0ZMQUdfQklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19SRUFET05MWSkKKyNkZWZp bmUgRFVLX0hFQVBIRFJfQ0xFQVJfUkVBRE9OTFkoaCkgICAgIERVS19IRUFQSERSX0NMRUFSX0ZM QUdfQklUUygoaCksRFVLX0hFQVBIRFJfRkxBR19SRUFET05MWSkKKyNkZWZpbmUgRFVLX0hFQVBI RFJfSEFTX1JFQURPTkxZKGgpICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygoaCks RFVLX0hFQVBIRFJfRkxBR19SRUFET05MWSkKKworLyogZ2V0IG9yIHNldCBhIHJhbmdlIG9mIGZs YWdzOyBtPWZpcnN0IGJpdCBudW1iZXIsIG49bnVtYmVyIG9mIGJpdHMgKi8KKyNkZWZpbmUgRFVL X0hFQVBIRFJfR0VUX0ZMQUdfUkFOR0UoaCxtLG4pICAoKChoKS0+aF9mbGFncyA+PiAobSkpICYg KCgxVUwgPDwgKG4pKSAtIDFVTCkpCisKKyNkZWZpbmUgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfUkFO R0UoaCxtLG4sdikgIGRvIHsgXAorCQkoaCktPmhfZmxhZ3MgPSBcCisJCQkoKGgpLT5oX2ZsYWdz ICYgKH4oKCgxVUwgPDwgKG4pKSAtIDFVTCkgPDwgKG0pKSkpIFwKKwkJCXwgKCh2KSA8PCAobSkp OyBcCisJfSB3aGlsZSAoMCkKKworLyogaW5pdCBwb2ludGVyIGZpZWxkcyB0byBudWxsICovCisj aWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9MSU5LRURfSEVBUCkKKyNkZWZpbmUgRFVLX0hFQVBI RFJfSU5JVF9OVUxMUyhoKSAgICAgICBkbyB7IFwKKwkJRFVLX0hFQVBIRFJfU0VUX05FWFQoKGgp LCAodm9pZCAqKSBOVUxMKTsgXAorCQlEVUtfSEVBUEhEUl9TRVRfUFJFVigoaCksICh2b2lkICop IE5VTEwpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19IRUFQSERSX0lOSVRf TlVMTFMoaCkgICAgICAgZG8geyBcCisJCURVS19IRUFQSERSX1NFVF9ORVhUKChoKSwgKHZvaWQg KikgTlVMTCk7IFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgRFVLX0hFQVBIRFJf U1RSSU5HX0lOSVRfTlVMTFMoaCkgIGRvIHsgXAorCQkoaCktPmhfbmV4dCA9IE5VTEw7IFwKKwl9 IHdoaWxlICgwKQorCisvKgorICogIFR5cGUgdGVzdHMKKyAqLworCisvKiBUYWtlIGFkdmFudGFn ZSBvZiB0aGUgZmFjdCB0aGF0IGZvciBEVUtfSFRZUEVfeHh4IG51bWJlcnMgdGhlIGxvd2VzdCBi aXQKKyAqIGlzIG9ubHkgc2V0IGZvciBEVUtfSFRZUEVfT0JKRUNUICg9IDEpLgorICovCisjaWYg MAorI2RlZmluZSBEVUtfSEVBUEhEUl9JU19PQkpFQ1QoaCkgKERVS19IRUFQSERSX0dFVF9UWVBF KChoKSkgPT0gRFVLX0hUWVBFX09CSkVDVCkKKyNlbmRpZgorI2RlZmluZSBEVUtfSEVBUEhEUl9J U19PQkpFQ1QoaCkgKChoKS0+aF9mbGFncyAmIDB4MDFVTCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJf SVNfU1RSSU5HKGgpIChEVUtfSEVBUEhEUl9HRVRfVFlQRSgoaCkpID09IERVS19IVFlQRV9TVFJJ TkcpCisjZGVmaW5lIERVS19IRUFQSERSX0lTX0JVRkZFUihoKSAoRFVLX0hFQVBIRFJfR0VUX1RZ UEUoKGgpKSA9PSBEVUtfSFRZUEVfQlVGRkVSKQorCisvKgorICogIEFzc2VydCBoZWxwZXJzCisg Ki8KKworLyogQ2hlY2sgdGhhdCBwcmV2L25leHQgbGlua3MgYXJlIGNvbnNpc3RlbnQ6IGlmIGUu Zy4gaC0+cHJldiBpcyAhPSBOVUxMLAorICogaC0+cHJldi0+bmV4dCBzaG91bGQgcG9pbnQgYmFj ayB0byBoLgorICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9MSU5LRURfSEVBUCkgJiYg ZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisjZGVmaW5lIERVS19BU1NFUlRfSEVBUEhEUl9M SU5LUyhoZWFwLGgpIGRvIHsgXAorCQlpZiAoKGgpICE9IE5VTEwpIHsgXAorCQkJZHVrX2hlYXBo ZHIgKmhfX3ByZXYsICpoX19uZXh0OyBcCisJCQloX19wcmV2ID0gRFVLX0hFQVBIRFJfR0VUX1BS RVYoKGhlYXApLCAoaCkpOyBcCisJCQloX19uZXh0ID0gRFVLX0hFQVBIRFJfR0VUX05FWFQoKGhl YXApLCAoaCkpOyBcCisJCQlEVUtfQVNTRVJUKGhfX3ByZXYgPT0gTlVMTCB8fCAoRFVLX0hFQVBI RFJfR0VUX05FWFQoKGhlYXApLCBoX19wcmV2KSA9PSAoaCkpKTsgXAorCQkJRFVLX0FTU0VSVCho X19uZXh0ID09IE5VTEwgfHwgKERVS19IRUFQSERSX0dFVF9QUkVWKChoZWFwKSwgaF9fbmV4dCkg PT0gKGgpKSk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19BU1NF UlRfSEVBUEhEUl9MSU5LUyhoZWFwLGgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZp bmUgRFVLX0FTU0VSVF9IRUFQSERSX1ZBTElEKGgpIGRvIHsgXAorCQlEVUtfQVNTRVJUKChoKSAh PSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hUWVBFX1ZBTElEKChoKSkpOyBc CisJfSB3aGlsZSAoMCkKKworI2VuZGlmICAvKiBEVUtfSEVBUEhEUl9IX0lOQ0xVREVEICovCisv KiAjaW5jbHVkZSBkdWtfcmVmY291bnQuaCAqLworLyoKKyAqICBSZWZlcmVuY2UgY291bnRpbmcg aGVscGVyIG1hY3Jvcy4gIFRoZSBtYWNyb3MgdGFrZSBhIHRocmVhZCBhcmd1bWVudAorICogIGFu ZCBtdXN0IHRodXMgYWx3YXlzIGJlIGV4ZWN1dGVkIGluIGEgc3BlY2lmaWMgdGhyZWFkIGNvbnRl eHQuICBUaGUKKyAqICB0aHJlYWQgYXJndW1lbnQgaXMgbm90IHJlYWxseSBuZWVkZWQgYW55bW9y ZTogREVDUkVGIGNhbiBvcGVyYXRlIHdpdGgKKyAqICBhIGhlYXAgcG9pbnRlciBvbmx5LCBhbmQg SU5DUkVGIG5lZWRzIG5laXRoZXIuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19SRUZDT1VOVF9I X0lOQ0xVREVEKQorI2RlZmluZSBEVUtfUkVGQ09VTlRfSF9JTkNMVURFRAorCisjaWYgZGVmaW5l ZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01f T0JKRUNUUykKKy8qIFdpdGggUk9NIG9iamVjdHMgIm5lZWRzIHJlZmNvdW50IHVwZGF0ZSIgaXMg dHJ1ZSB3aGVuIHRoZSB2YWx1ZSBpcworICogaGVhcCBhbGxvY2F0ZWQgYW5kIGlzIG5vdCBhIFJP TSBvYmplY3QuCisgKi8KKy8qIFhYWDogZG91YmxlIGV2YWx1YXRpb24gZm9yICd0dicgYXJndW1l bnQuICovCisjZGVmaW5lIERVS19UVkFMX05FRURTX1JFRkNPVU5UX1VQREFURSh0dikgXAorCShE VUtfVFZBTF9JU19IRUFQX0FMTE9DQVRFRCgodHYpKSAmJiAhRFVLX0hFQVBIRFJfSEFTX1JFQURP TkxZKERVS19UVkFMX0dFVF9IRUFQSERSKCh0dikpKSkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfTkVF RFNfUkVGQ09VTlRfVVBEQVRFKGgpICAoIURVS19IRUFQSERSX0hBU19SRUFET05MWSgoaCkpKQor I2Vsc2UgIC8qIERVS19VU0VfUk9NX09CSkVDVFMgKi8KKy8qIFdpdGhvdXQgUk9NIG9iamVjdHMg Im5lZWRzIHJlZmNvdW50IHVwZGF0ZSIgPT0gaXMgaGVhcCBhbGxvY2F0ZWQuICovCisjZGVmaW5l IERVS19UVkFMX05FRURTX1JFRkNPVU5UX1VQREFURSh0dikgICAgRFVLX1RWQUxfSVNfSEVBUF9B TExPQ0FURUQoKHR2KSkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfTkVFRFNfUkVGQ09VTlRfVVBEQVRF KGgpICAxCisjZW5kaWYgIC8qIERVS19VU0VfUk9NX09CSkVDVFMgKi8KKworLyogRmFzdCB2YXJp YW50cywgaW5saW5lIHJlZmNvdW50IG9wZXJhdGlvbnMgZXhjZXB0IGZvciByZWZ6ZXJvIGhhbmRs aW5nLgorICogQ2FuIGJlIHVzZWQgZXhwbGljaXRseSB3aGVuIHNwZWVkIGlzIGFsd2F5cyBtb3Jl IGltcG9ydGFudCB0aGFuIHNpemUuCisgKiBGb3IgYSBnb29kIGNvbXBpbGVyIGFuZCBhIHNpbmds ZSBmaWxlIGJ1aWxkLCB0aGVzZSBhcmUgYmFzaWNhbGx5IHRoZQorICogc2FtZSBhcyBhIGZvcmNl ZCBpbmxpbmUuCisgKi8KKyNkZWZpbmUgRFVLX1RWQUxfSU5DUkVGX0ZBU1QodGhyLHR2KSBkbyB7 IFwKKwkJZHVrX3R2YWwgKmR1a19fdHYgPSAodHYpOyBcCisJCURVS19BU1NFUlQoZHVrX190diAh PSBOVUxMKTsgXAorCQlpZiAoRFVLX1RWQUxfTkVFRFNfUkVGQ09VTlRfVVBEQVRFKGR1a19fdHYp KSB7IFwKKwkJCWR1a19oZWFwaGRyICpkdWtfX2ggPSBEVUtfVFZBTF9HRVRfSEVBUEhEUihkdWtf X3R2KTsgXAorCQkJRFVLX0FTU0VSVChkdWtfX2ggIT0gTlVMTCk7IFwKKwkJCURVS19BU1NFUlQo RFVLX0hFQVBIRFJfSFRZUEVfVkFMSUQoZHVrX19oKSk7IFwKKwkJCURVS19IRUFQSERSX1BSRUlO Q19SRUZDT1VOVChkdWtfX2gpOyBcCisJCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZD T1VOVChkdWtfX2gpICE9IDApOyAgLyogTm8gd3JhcHBpbmcuICovIFwKKwkJfSBcCisJfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfREVDUkVGX0ZBU1QodGhyLHR2KSBkbyB7IFwKKwkJZHVr X3R2YWwgKmR1a19fdHYgPSAodHYpOyBcCisJCURVS19BU1NFUlQoZHVrX190diAhPSBOVUxMKTsg XAorCQlpZiAoRFVLX1RWQUxfTkVFRFNfUkVGQ09VTlRfVVBEQVRFKGR1a19fdHYpKSB7IFwKKwkJ CWR1a19oZWFwaGRyICpkdWtfX2ggPSBEVUtfVFZBTF9HRVRfSEVBUEhEUihkdWtfX3R2KTsgXAor CQkJRFVLX0FTU0VSVChkdWtfX2ggIT0gTlVMTCk7IFwKKwkJCURVS19BU1NFUlQoRFVLX0hFQVBI RFJfSFRZUEVfVkFMSUQoZHVrX19oKSk7IFwKKwkJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfR0VU X1JFRkNPVU5UKGR1a19faCkgPiAwKTsgXAorCQkJaWYgKERVS19IRUFQSERSX1BSRURFQ19SRUZD T1VOVChkdWtfX2gpID09IDApIHsgXAorCQkJCWR1a19oZWFwaGRyX3JlZnplcm8oKHRociksIGR1 a19faCk7IFwKKwkJCX0gXAorCQl9IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfVFZBTF9E RUNSRUZfTk9SWl9GQVNUKHRocix0dikgZG8geyBcCisJCWR1a190dmFsICpkdWtfX3R2ID0gKHR2 KTsgXAorCQlEVUtfQVNTRVJUKGR1a19fdHYgIT0gTlVMTCk7IFwKKwkJaWYgKERVS19UVkFMX05F RURTX1JFRkNPVU5UX1VQREFURShkdWtfX3R2KSkgeyBcCisJCQlkdWtfaGVhcGhkciAqZHVrX19o ID0gRFVLX1RWQUxfR0VUX0hFQVBIRFIoZHVrX190dik7IFwKKwkJCURVS19BU1NFUlQoZHVrX19o ICE9IE5VTEwpOyBcCisJCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hUWVBFX1ZBTElEKGR1a19f aCkpOyBcCisJCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZDT1VOVChkdWtfX2gpID4g MCk7IFwKKwkJCWlmIChEVUtfSEVBUEhEUl9QUkVERUNfUkVGQ09VTlQoZHVrX19oKSA9PSAwKSB7 IFwKKwkJCQlkdWtfaGVhcGhkcl9yZWZ6ZXJvX25vcnooKHRociksIGR1a19faCk7IFwKKwkJCX0g XAorCQl9IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSEVBUEhEUl9JTkNSRUZfRkFTVCh0 aHIsaCkgZG8geyBcCisJCWR1a19oZWFwaGRyICpkdWtfX2ggPSAoZHVrX2hlYXBoZHIgKikgKGgp OyBcCisJCURVS19BU1NFUlQoZHVrX19oICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoRFVLX0hF QVBIRFJfSFRZUEVfVkFMSUQoZHVrX19oKSk7IFwKKwkJaWYgKERVS19IRUFQSERSX05FRURTX1JF RkNPVU5UX1VQREFURShkdWtfX2gpKSB7IFwKKwkJCURVS19IRUFQSERSX1BSRUlOQ19SRUZDT1VO VChkdWtfX2gpOyBcCisJCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZDT1VOVChkdWtf X2gpICE9IDApOyAgLyogTm8gd3JhcHBpbmcuICovIFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNk ZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFXKHRocixoLHJ6Y2FsbCxyemNhc3QpIGRv IHsgXAorCQlkdWtfaGVhcGhkciAqZHVrX19oID0gKGR1a19oZWFwaGRyICopIChoKTsgXAorCQlE VUtfQVNTRVJUKGR1a19faCAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hU WVBFX1ZBTElEKGR1a19faCkpOyBcCisJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfR0VUX1JFRkNP VU5UKGR1a19faCkgPiAwKTsgXAorCQlpZiAoRFVLX0hFQVBIRFJfTkVFRFNfUkVGQ09VTlRfVVBE QVRFKGR1a19faCkpIHsgXAorCQkJaWYgKERVS19IRUFQSERSX1BSRURFQ19SRUZDT1VOVChkdWtf X2gpID09IDApIHsgXAorCQkJCShyemNhbGwpKCh0aHIpLCAocnpjYXN0KSBkdWtfX2gpOyBcCisJ CQl9IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGX0ZB U1QodGhyLGgpIFwKKwlEVUtfSEVBUEhEUl9ERUNSRUZfRkFTVF9SQVcoKHRociksKGgpLGR1a19o ZWFwaGRyX3JlZnplcm8sZHVrX2hlYXBoZHIgKikKKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVG X05PUlpfRkFTVCh0aHIsaCkgXAorCURVS19IRUFQSERSX0RFQ1JFRl9GQVNUX1JBVygodGhyKSwo aCksZHVrX2hlYXBoZHJfcmVmemVyb19ub3J6LGR1a19oZWFwaGRyICopCisKKy8qIFNsb3cgdmFy aWFudHMsIGNhbGwgdG8gYSBoZWxwZXIgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKyAqIENhbiBiZSB1 c2VkIGV4cGxpY2l0bHkgd2hlbiBzaXplIGlzIGFsd2F5cyBtb3JlIGltcG9ydGFudCB0aGFuIHNw ZWVkLgorICovCisjZGVmaW5lIERVS19UVkFMX0lOQ1JFRl9TTE9XKHRocix0dikgICAgICAgICBk byB7IGR1a190dmFsX2luY3JlZigodHYpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxf REVDUkVGX1NMT1codGhyLHR2KSAgICAgICAgIGRvIHsgZHVrX3R2YWxfZGVjcmVmKCh0aHIpLCAo dHYpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfREVDUkVGX05PUlpfU0xPVyh0aHIs dHYpICAgIGRvIHsgZHVrX3R2YWxfZGVjcmVmX25vcnooKHRociksICh0dikpOyB9IHdoaWxlICgw KQorI2RlZmluZSBEVUtfSEVBUEhEUl9JTkNSRUZfU0xPVyh0aHIsaCkgICAgICAgZG8geyBkdWtf aGVhcGhkcl9pbmNyZWYoKGR1a19oZWFwaGRyICopIChoKSk7IH0gd2hpbGUgKDApCisjZGVmaW5l IERVS19IRUFQSERSX0RFQ1JFRl9TTE9XKHRocixoKSAgICAgICBkbyB7IGR1a19oZWFwaGRyX2Rl Y3JlZigodGhyKSwgKGR1a19oZWFwaGRyICopIChoKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIERV S19IRUFQSERSX0RFQ1JFRl9OT1JaX1NMT1codGhyLGgpICBkbyB7IGR1a19oZWFwaGRyX2RlY3Jl Zl9ub3J6KCh0aHIpLCAoZHVrX2hlYXBoZHIgKikgKGgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUg RFVLX0hTVFJJTkdfSU5DUkVGX1NMT1codGhyLGgpICAgICAgIGRvIHsgZHVrX2hlYXBoZHJfaW5j cmVmKChkdWtfaGVhcGhkciAqKSAoaCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSFNUUklO R19ERUNSRUZfU0xPVyh0aHIsaCkgICAgICAgZG8geyBkdWtfaGVhcGhkcl9kZWNyZWYoKHRociks IChkdWtfaGVhcGhkciAqKSAoaCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSFNUUklOR19E RUNSRUZfTk9SWl9TTE9XKHRocixoKSAgZG8geyBkdWtfaGVhcGhkcl9kZWNyZWZfbm9yeigodGhy KSwgKGR1a19oZWFwaGRyICopIChoKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVS X0lOQ1JFRl9TTE9XKHRocixoKSAgICAgICBkbyB7IGR1a19oZWFwaGRyX2luY3JlZigoZHVrX2hl YXBoZHIgKikgKGgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVDUkVGX1NM T1codGhyLGgpICAgICAgIGRvIHsgZHVrX2hlYXBoZHJfZGVjcmVmKCh0aHIpLCAoZHVrX2hlYXBo ZHIgKikgKGgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVDUkVGX05PUlpf U0xPVyh0aHIsaCkgIGRvIHsgZHVrX2hlYXBoZHJfZGVjcmVmX25vcnooKHRociksIChkdWtfaGVh cGhkciAqKSAoaCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSE9CSkVDVF9JTkNSRUZfU0xP Vyh0aHIsaCkgICAgICAgZG8geyBkdWtfaGVhcGhkcl9pbmNyZWYoKGR1a19oZWFwaGRyICopICho KSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IT0JKRUNUX0RFQ1JFRl9TTE9XKHRocixoKSAg ICAgICBkbyB7IGR1a19oZWFwaGRyX2RlY3JlZigodGhyKSwgKGR1a19oZWFwaGRyICopIChoKSk7 IH0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX1NMT1codGhyLGgp ICBkbyB7IGR1a19oZWFwaGRyX2RlY3JlZl9ub3J6KCh0aHIpLCAoZHVrX2hlYXBoZHIgKikgKGgp KTsgfSB3aGlsZSAoMCkKKworLyogRGVmYXVsdCB2YXJpYW50cy4gIFNlbGVjdGlvbiBkZXBlbmRz IG9uIHNwZWVkL3NpemUgcHJlZmVyZW5jZS4KKyAqIENvbmNyZXRlbHk6IHdpdGggZ2NjIDQuOC4x IC1PcyB4NjQgdGhlIGRpZmZlcmVuY2UgaW4gZmluYWwgYmluYXJ5CisgKiBpcyBhYm91dCArMWtC IGZvciBfRkFTVCB2YXJpYW50cy4KKyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUX1JFRkNP VU5UX0RFRkFVTFQpCisvKiBYWFg6IEl0IHdvdWxkIGJlIG5pY2UgdG8gc3BlY2lhbGl6ZSBmb3Ig c3BlY2lmaWMgZHVrX2hvYmplY3Qgc3VidHlwZXMKKyAqIGJ1dCBjdXJyZW50IHJlZnplcm8gcXVl dWUgaGFuZGxpbmcgcHJldmVudHMgdGhhdC4KKyAqLworI2RlZmluZSBEVUtfVFZBTF9JTkNSRUYo dGhyLHR2KSAgICAgICAgICAgICAgICBEVUtfVFZBTF9JTkNSRUZfRkFTVCgodGhyKSwodHYpKQor I2RlZmluZSBEVUtfVFZBTF9ERUNSRUYodGhyLHR2KSAgICAgICAgICAgICAgICBEVUtfVFZBTF9E RUNSRUZfRkFTVCgodGhyKSwodHYpKQorI2RlZmluZSBEVUtfVFZBTF9ERUNSRUZfTk9SWih0aHIs dHYpICAgICAgICAgICBEVUtfVFZBTF9ERUNSRUZfTk9SWl9GQVNUKCh0aHIpLCh0dikpCisjZGVm aW5lIERVS19IRUFQSERSX0lOQ1JFRih0aHIsaCkgICAgICAgICAgICAgIERVS19IRUFQSERSX0lO Q1JFRl9GQVNUKCh0aHIpLChoKSkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGKHRocixoKSAg ICAgICAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFXKCh0aHIpLChoKSxkdWtfaGVh cGhkcl9yZWZ6ZXJvLGR1a19oZWFwaGRyICopCisjZGVmaW5lIERVS19IRUFQSERSX0RFQ1JFRl9O T1JaKHRocixoKSAgICAgICAgIERVS19IRUFQSERSX0RFQ1JFRl9GQVNUX1JBVygodGhyKSwoaCks ZHVrX2hlYXBoZHJfcmVmemVyb19ub3J6LGR1a19oZWFwaGRyICopCisjZGVmaW5lIERVS19IU1RS SU5HX0lOQ1JFRih0aHIsaCkgICAgICAgICAgICAgIERVS19IRUFQSERSX0lOQ1JFRigodGhyKSwo ZHVrX2hlYXBoZHIgKikgKGgpKQorI2RlZmluZSBEVUtfSFNUUklOR19ERUNSRUYodGhyLGgpICAg ICAgICAgICAgICBEVUtfSEVBUEhEUl9ERUNSRUZfRkFTVF9SQVcoKHRociksKGgpLGR1a19oc3Ry aW5nX3JlZnplcm8sZHVrX2hzdHJpbmcgKikKKyNkZWZpbmUgRFVLX0hTVFJJTkdfREVDUkVGX05P UloodGhyLGgpICAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFXKCh0aHIpLChoKSxk dWtfaHN0cmluZ19yZWZ6ZXJvLGR1a19oc3RyaW5nICopICAvKiBubyAnbm9yeicgdmFyaWFudCAq LworI2RlZmluZSBEVUtfSE9CSkVDVF9JTkNSRUYodGhyLGgpICAgICAgICAgICAgICBEVUtfSEVB UEhEUl9JTkNSRUYoKHRociksKGR1a19oZWFwaGRyICopIChoKSkKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfREVDUkVGKHRocixoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFX KCh0aHIpLChoKSxkdWtfaG9iamVjdF9yZWZ6ZXJvLGR1a19ob2JqZWN0ICopCisjZGVmaW5lIERV S19IT0JKRUNUX0RFQ1JFRl9OT1JaKHRocixoKSAgICAgICAgIERVS19IRUFQSERSX0RFQ1JFRl9G QVNUX1JBVygodGhyKSwoaCksZHVrX2hvYmplY3RfcmVmemVyb19ub3J6LGR1a19ob2JqZWN0ICop CisjZGVmaW5lIERVS19IQlVGRkVSX0lOQ1JFRih0aHIsaCkgICAgICAgICAgICAgIERVS19IRUFQ SERSX0lOQ1JFRigodGhyKSwoZHVrX2hlYXBoZHIgKikgKGgpKQorI2RlZmluZSBEVUtfSEJVRkZF Ul9ERUNSRUYodGhyLGgpICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9ERUNSRUZfRkFTVF9SQVco KHRociksKGgpLGR1a19oYnVmZmVyX3JlZnplcm8sZHVrX2hidWZmZXIgKikKKyNkZWZpbmUgRFVL X0hCVUZGRVJfREVDUkVGX05PUloodGhyLGgpICAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX0ZB U1RfUkFXKCh0aHIpLChoKSxkdWtfaGJ1ZmZlcl9yZWZ6ZXJvLGR1a19oYnVmZmVyICopICAvKiBu byAnbm9yeicgdmFyaWFudCAqLworI2RlZmluZSBEVUtfSENPTVBGVU5DX0lOQ1JFRih0aHIsaCkg ICAgICAgICAgICBEVUtfSEVBUEhEUl9JTkNSRUYoKHRociksKGR1a19oZWFwaGRyICopICYoaCkt Pm9iaikKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19ERUNSRUYodGhyLGgpICAgICAgICAgICAgRFVL X0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFXKCh0aHIpLChoKSxkdWtfaG9iamVjdF9yZWZ6ZXJvLGR1 a19ob2JqZWN0ICopCisjZGVmaW5lIERVS19IQ09NUEZVTkNfREVDUkVGX05PUloodGhyLGgpICAg ICAgIERVS19IRUFQSERSX0RFQ1JFRl9GQVNUX1JBVygodGhyKSwoaCksZHVrX2hvYmplY3RfcmVm emVyb19ub3J6LGR1a19ob2JqZWN0ICopCisjZGVmaW5lIERVS19ITkFURlVOQ19JTkNSRUYodGhy LGgpICAgICAgICAgICAgIERVS19IRUFQSERSX0lOQ1JFRigodGhyKSwoZHVrX2hlYXBoZHIgKikg JihoKS0+b2JqKQorI2RlZmluZSBEVUtfSE5BVEZVTkNfREVDUkVGKHRocixoKSAgICAgICAgICAg ICBEVUtfSEVBUEhEUl9ERUNSRUZfRkFTVF9SQVcoKHRociksKGgpLGR1a19ob2JqZWN0X3JlZnpl cm8sZHVrX2hvYmplY3QgKikKKyNkZWZpbmUgRFVLX0hOQVRGVU5DX0RFQ1JFRl9OT1JaKHRocixo KSAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFXKCh0aHIpLChoKSxkdWtfaG9iamVj dF9yZWZ6ZXJvX25vcnosZHVrX2hvYmplY3QgKikKKyNkZWZpbmUgRFVLX0hCVUZPQkpfSU5DUkVG KHRocixoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfSU5DUkVGKCh0aHIpLChkdWtfaGVhcGhk ciAqKSAmKGgpLT5vYmopCisjZGVmaW5lIERVS19IQlVGT0JKX0RFQ1JFRih0aHIsaCkgICAgICAg ICAgICAgIERVS19IRUFQSERSX0RFQ1JFRl9GQVNUX1JBVygodGhyKSwoaCksZHVrX2hvYmplY3Rf cmVmemVybyxkdWtfaG9iamVjdCAqKQorI2RlZmluZSBEVUtfSEJVRk9CSl9ERUNSRUZfTk9SWih0 aHIsaCkgICAgICAgICBEVUtfSEVBUEhEUl9ERUNSRUZfRkFTVF9SQVcoKHRociksKGgpLGR1a19o b2JqZWN0X3JlZnplcm9fbm9yeixkdWtfaG9iamVjdCAqKQorI2RlZmluZSBEVUtfSFRIUkVBRF9J TkNSRUYodGhyLGgpICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9JTkNSRUYoKHRociksKGR1a19o ZWFwaGRyICopICYoaCktPm9iaikKKyNkZWZpbmUgRFVLX0hUSFJFQURfREVDUkVGKHRocixoKSAg ICAgICAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX0ZBU1RfUkFXKCh0aHIpLChoKSxkdWtfaG9i amVjdF9yZWZ6ZXJvLGR1a19ob2JqZWN0ICopCisjZGVmaW5lIERVS19IVEhSRUFEX0RFQ1JFRl9O T1JaKHRocixoKSAgICAgICAgIERVS19IRUFQSERSX0RFQ1JFRl9GQVNUX1JBVygodGhyKSwoaCks ZHVrX2hvYmplY3RfcmVmemVyb19ub3J6LGR1a19ob2JqZWN0ICopCisjZWxzZQorI2RlZmluZSBE VUtfVFZBTF9JTkNSRUYodGhyLHR2KSAgICAgICAgICAgICAgICBEVUtfVFZBTF9JTkNSRUZfU0xP VygodGhyKSwodHYpKQorI2RlZmluZSBEVUtfVFZBTF9ERUNSRUYodGhyLHR2KSAgICAgICAgICAg ICAgICBEVUtfVFZBTF9ERUNSRUZfU0xPVygodGhyKSwodHYpKQorI2RlZmluZSBEVUtfVFZBTF9E RUNSRUZfTk9SWih0aHIsdHYpICAgICAgICAgICBEVUtfVFZBTF9ERUNSRUZfTk9SWl9TTE9XKCh0 aHIpLCh0dikpCisjZGVmaW5lIERVS19IRUFQSERSX0lOQ1JFRih0aHIsaCkgICAgICAgICAgICAg IERVS19IRUFQSERSX0lOQ1JFRl9TTE9XKCh0aHIpLChoKSkKKyNkZWZpbmUgRFVLX0hFQVBIRFJf REVDUkVGKHRocixoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfREVDUkVGX1NMT1coKHRociks KGgpKQorI2RlZmluZSBEVUtfSEVBUEhEUl9ERUNSRUZfTk9SWih0aHIsaCkgICAgICAgICBEVUtf SEVBUEhEUl9ERUNSRUZfTk9SWl9TTE9XKCh0aHIpLChoKSkKKyNkZWZpbmUgRFVLX0hTVFJJTkdf SU5DUkVGKHRocixoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfSU5DUkVGKCh0aHIpLChkdWtf aGVhcGhkciAqKSAoaCkpCisjZGVmaW5lIERVS19IU1RSSU5HX0RFQ1JFRih0aHIsaCkgICAgICAg ICAgICAgIERVS19IU1RSSU5HX0RFQ1JFRl9TTE9XKCh0aHIpLChoKSkKKyNkZWZpbmUgRFVLX0hT VFJJTkdfREVDUkVGX05PUloodGhyLGgpICAgICAgICAgRFVLX0hTVFJJTkdfREVDUkVGX05PUlpf U0xPVygodGhyKSwoaCkpCisjZGVmaW5lIERVS19IT0JKRUNUX0lOQ1JFRih0aHIsaCkgICAgICAg ICAgICAgIERVS19IRUFQSERSX0lOQ1JFRigodGhyKSwoZHVrX2hlYXBoZHIgKikgKGgpKQorI2Rl ZmluZSBEVUtfSE9CSkVDVF9ERUNSRUYodGhyLGgpICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9E RUNSRUZfU0xPVygodGhyKSwoaCkpCisjZGVmaW5lIERVS19IT0JKRUNUX0RFQ1JFRl9OT1JaKHRo cixoKSAgICAgICAgIERVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX1NMT1coKHRociksKGgpKQorI2Rl ZmluZSBEVUtfSEJVRkZFUl9JTkNSRUYodGhyLGgpICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9J TkNSRUYoKHRociksKGR1a19oZWFwaGRyICopIChoKSkKKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVD UkVGKHRocixoKSAgICAgICAgICAgICAgRFVLX0hCVUZGRVJfREVDUkVGX1NMT1coKHRociksKGgp KQorI2RlZmluZSBEVUtfSEJVRkZFUl9ERUNSRUZfTk9SWih0aHIsaCkgICAgICAgICBEVUtfSEJV RkZFUl9ERUNSRUZfTk9SWl9TTE9XKCh0aHIpLChoKSkKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19J TkNSRUYodGhyLGgpICAgICAgICAgICAgRFVLX0hFQVBIRFJfSU5DUkVGKCh0aHIpLChkdWtfaGVh cGhkciAqKSAmKGgpLT5vYmopCisjZGVmaW5lIERVS19IQ09NUEZVTkNfREVDUkVGKHRocixoKSAg ICAgICAgICAgIERVS19IT0JKRUNUX0RFQ1JFRl9TTE9XKCh0aHIpLChkdWtfaG9iamVjdCAqKSAm KGgpLT5vYmopCisjZGVmaW5lIERVS19IQ09NUEZVTkNfREVDUkVGX05PUloodGhyLGgpICAgICAg IERVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX1NMT1coKHRociksKGR1a19ob2JqZWN0ICopICYoaCkt Pm9iaikKKyNkZWZpbmUgRFVLX0hOQVRGVU5DX0lOQ1JFRih0aHIsaCkgICAgICAgICAgICAgRFVL X0hFQVBIRFJfSU5DUkVGKCh0aHIpLChkdWtfaGVhcGhkciAqKSAmKGgpLT5vYmopCisjZGVmaW5l IERVS19ITkFURlVOQ19ERUNSRUYodGhyLGgpICAgICAgICAgICAgIERVS19IT0JKRUNUX0RFQ1JF Rl9TTE9XKCh0aHIpLChkdWtfaG9iamVjdCAqKSAmKGgpLT5vYmopCisjZGVmaW5lIERVS19ITkFU RlVOQ19ERUNSRUZfTk9SWih0aHIsaCkgICAgICAgIERVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX1NM T1coKHRociksKGR1a19ob2JqZWN0ICopICYoaCktPm9iaikKKyNkZWZpbmUgRFVLX0hCVUZPQkpf SU5DUkVGKHRocixoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfSU5DUkVGKCh0aHIpLChkdWtf aGVhcGhkciAqKSAmKGgpLT5vYmopCisjZGVmaW5lIERVS19IQlVGT0JKX0RFQ1JFRih0aHIsaCkg ICAgICAgICAgICAgIERVS19IT0JKRUNUX0RFQ1JFRl9TTE9XKCh0aHIpLChkdWtfaG9iamVjdCAq KSAmKGgpLT5vYmopCisjZGVmaW5lIERVS19IQlVGT0JfREVDUkVGX05PUloodGhyLGgpICAgICAg ICAgIERVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX1NMT1coKHRociksKGR1a19ob2JqZWN0ICopICYo aCktPm9iaikKKyNkZWZpbmUgRFVLX0hUSFJFQURfSU5DUkVGKHRocixoKSAgICAgICAgICAgICAg RFVLX0hFQVBIRFJfSU5DUkVGKCh0aHIpLChkdWtfaGVhcGhkciAqKSAmKGgpLT5vYmopCisjZGVm aW5lIERVS19IVEhSRUFEX0RFQ1JFRih0aHIsaCkgICAgICAgICAgICAgIERVS19IT0JKRUNUX0RF Q1JFRl9TTE9XKCh0aHIpLChkdWtfaG9iamVjdCAqKSAmKGgpLT5vYmopCisjZGVmaW5lIERVS19I VEhSRUFEX0RFQ1JFRl9OT1JaKHRocixoKSAgICAgICAgIERVS19IT0JKRUNUX0RFQ1JFRl9OT1Ja X1NMT1coKHRociksKGR1a19ob2JqZWN0ICopICYoaCktPm9iaikKKyNlbmRpZgorCisvKiBDb252 ZW5pZW5jZSBmb3Igc29tZSBzaXR1YXRpb25zOyB0aGUgYWJvdmUgbWFjcm9zIGRvbid0IGFsbG93 IE5VTExzCisgKiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIE1hY3JvcyBjb3ZlciBvbmx5IGFj dHVhbGx5IG5lZWRlZCBjYXNlcy4KKyAqLworI2RlZmluZSBEVUtfSEVBUEhEUl9JTkNSRUZfQUxM T1dOVUxMKHRocixoKSBkbyB7IFwKKwkJaWYgKChoKSAhPSBOVUxMKSB7IFwKKwkJCURVS19IRUFQ SERSX0lOQ1JFRigodGhyKSwgKGR1a19oZWFwaGRyICopIChoKSk7IFwKKwkJfSBcCisJfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGX0FMTE9XTlVMTCh0aHIsaCkgZG8geyBc CisJCWlmICgoaCkgIT0gTlVMTCkgeyBcCisJCQlEVUtfSEVBUEhEUl9ERUNSRUYoKHRociksIChk dWtfaGVhcGhkciAqKSAoaCkpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19I RUFQSERSX0RFQ1JFRl9OT1JaX0FMTE9XTlVMTCh0aHIsaCkgZG8geyBcCisJCWlmICgoaCkgIT0g TlVMTCkgeyBcCisJCQlEVUtfSEVBUEhEUl9ERUNSRUZfTk9SWigodGhyKSwgKGR1a19oZWFwaGRy ICopIChoKSk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSU5D UkVGX0FMTE9XTlVMTCh0aHIsaCkgZG8geyBcCisJCWlmICgoaCkgIT0gTlVMTCkgeyBcCisJCQlE VUtfSE9CSkVDVF9JTkNSRUYoKHRociksIChoKSk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfREVDUkVGX0FMTE9XTlVMTCh0aHIsaCkgZG8geyBcCisJCWlmICgo aCkgIT0gTlVMTCkgeyBcCisJCQlEVUtfSE9CSkVDVF9ERUNSRUYoKHRociksIChoKSk7IFwKKwkJ fSBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfREVDUkVGX05PUlpfQUxMT1dO VUxMKHRocixoKSBkbyB7IFwKKwkJaWYgKChoKSAhPSBOVUxMKSB7IFwKKwkJCURVS19IT0JKRUNU X0RFQ1JFRl9OT1JaKCh0aHIpLCAoaCkpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisjZGVmaW5l IERVS19IQlVGRkVSX0lOQ1JFRl9BTExPV05VTEwodGhyLGgpIGRvIHsgXAorCQlpZiAoKGgpICE9 IE5VTEwpIHsgXAorCQkJRFVLX0hCVUZGRVJfSU5DUkVGKCh0aHIpLCAoaCkpOyBcCisJCX0gXAor CX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVSX0RFQ1JFRl9BTExPV05VTEwodGhyLGgp IGRvIHsgXAorCQlpZiAoKGgpICE9IE5VTEwpIHsgXAorCQkJRFVLX0hCVUZGRVJfREVDUkVGKCh0 aHIpLCAoaCkpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVSX0RF Q1JFRl9OT1JaX0FMTE9XTlVMTCh0aHIsaCkgZG8geyBcCisJCWlmICgoaCkgIT0gTlVMTCkgeyBc CisJCQlEVUtfSEJVRkZFUl9ERUNSRUZfTk9SWigodGhyKSwgKGgpKTsgXAorCQl9IFwKKwl9IHdo aWxlICgwKQorI2RlZmluZSBEVUtfSFRIUkVBRF9JTkNSRUZfQUxMT1dOVUxMKHRocixoKSBkbyB7 IFwKKwkJaWYgKChoKSAhPSBOVUxMKSB7IFwKKwkJCURVS19IVEhSRUFEX0lOQ1JFRigodGhyKSwg KGgpKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSFRIUkVBRF9ERUNSRUZf QUxMT1dOVUxMKHRocixoKSBkbyB7IFwKKwkJaWYgKChoKSAhPSBOVUxMKSB7IFwKKwkJCURVS19I VEhSRUFEX0RFQ1JFRigodGhyKSwgKGgpKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorI2RlZmlu ZSBEVUtfSFRIUkVBRF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhyLGgpIGRvIHsgXAorCQlpZiAo KGgpICE9IE5VTEwpIHsgXAorCQkJRFVLX0hUSFJFQURfREVDUkVGX05PUlooKHRociksIChoKSk7 IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworLyogQ2FsbGVkIGFmdGVyIG9uZSBvciBtb3JlIERF Q1JFRiBOT1JaIGNhbGxzIHRvIGhhbmRsZSBwZW5kaW5nIHNpZGUgZWZmZWN0cy4KKyAqIEF0IHBy ZXNlbnQgREVDUkVGIE5PUlogZG9lcyBmcmVlaW5nIGlubGluZSBidXQgZG9lc24ndCBleGVjdXRl IGZpbmFsaXplcnMsCisgKiBzbyB0aGVzZSBtYWNyb3MgY2hlY2sgZm9yIHBlbmRpbmcgZmluYWxp emVycyBhbmQgZXhlY3V0ZSB0aGVtLiAgVGhlIEZBU1QKKyAqIHZhcmlhbnQgaXMgcGVyZm9ybWFu Y2UgY3JpdGljYWwuCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQp CisjZGVmaW5lIERVS19SRUZaRVJPX0NIRUNLX0ZBU1QodGhyKSBkbyB7IFwKKwkJZHVrX3JlZnpl cm9fY2hlY2tfZmFzdCgodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfUkVGWkVS T19DSEVDS19TTE9XKHRocikgZG8geyBcCisJCWR1a19yZWZ6ZXJvX2NoZWNrX3Nsb3coKHRocikp OyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlICAvKiBEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUICov CisjZGVmaW5lIERVS19SRUZaRVJPX0NIRUNLX0ZBU1QodGhyKSBkbyB7IH0gd2hpbGUgKDApCisj ZGVmaW5lIERVS19SRUZaRVJPX0NIRUNLX1NMT1codGhyKSBkbyB7IH0gd2hpbGUgKDApCisjZW5k aWYgIC8qIERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQgKi8KKworLyoKKyAqICBNYWNyb3MgdG8g c2V0IGEgZHVrX3R2YWwgYW5kIHVwZGF0ZSByZWZjb3VudCBvZiB0aGUgdGFyZ2V0IChkZWNyZWYg dGhlCisgKiAgb2xkIHZhbHVlIGFuZCBpbmNyZWYgdGhlIG5ldyB2YWx1ZSBpZiBuZWNlc3Nhcnkp LiAgVGhpcyBpcyBib3RoIHBlcmZvcm1hbmNlCisgKiAgYW5kIGZvb3RwcmludCBjcml0aWNhbDsg YW55IGNoYW5nZXMgbWFkZSBzaG91bGQgYmUgbWVhc3VyZWQgZm9yIHNpemUvc3BlZWQuCisgKi8K KworI2RlZmluZSBEVUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRl9BTFQwKHRocix0dnB0cl9k c3QpIGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdDsgZHVrX3R2YWwgdHZfX3RtcDsgdHZfX2Rz dCA9ICh0dnB0cl9kc3QpOyBcCisJCURVS19UVkFMX1NFVF9UVkFMKCZ0dl9fdG1wLCB0dl9fZHN0 KTsgXAorCQlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKHR2X19kc3QpOyBcCisJCURVS19UVkFMX0RF Q1JFRigodGhyKSwgJnR2X190bXApOyAgLyogc2lkZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgw KQorCisjZGVmaW5lIERVS19UVkFMX1NFVF9VTkRFRklORURfVVBEUkVGX05PUlpfQUxUMCh0aHIs dHZwdHJfZHN0KSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19kc3Q7IGR1a190dmFsIHR2X190bXA7 IHR2X19kc3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfVFZBTCgmdHZfX3RtcCwg dHZfX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dl9fZHN0KTsgXAorCQlEVUtf VFZBTF9ERUNSRUZfTk9SWigodGhyKSwgJnR2X190bXApOyBcCisJfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBEVUtfVFZBTF9TRVRfVU5VU0VEX1VQRFJFRl9BTFQwKHRocix0dnB0cl9kc3QpIGRvIHsg XAorCQlkdWtfdHZhbCAqdHZfX2RzdDsgZHVrX3R2YWwgdHZfX3RtcDsgdHZfX2RzdCA9ICh0dnB0 cl9kc3QpOyBcCisJCURVS19UVkFMX1NFVF9UVkFMKCZ0dl9fdG1wLCB0dl9fZHN0KTsgXAorCQlE VUtfVFZBTF9TRVRfVU5VU0VEKHR2X19kc3QpOyBcCisJCURVS19UVkFMX0RFQ1JFRigodGhyKSwg JnR2X190bXApOyAgLyogc2lkZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5l IERVS19UVkFMX1NFVF9OVUxMX1VQRFJFRl9BTFQwKHRocix0dnB0cl9kc3QpIGRvIHsgXAorCQlk dWtfdHZhbCAqdHZfX2RzdDsgZHVrX3R2YWwgdHZfX3RtcDsgdHZfX2RzdCA9ICh0dnB0cl9kc3Qp OyBcCisJCURVS19UVkFMX1NFVF9UVkFMKCZ0dl9fdG1wLCB0dl9fZHN0KTsgXAorCQlEVUtfVFZB TF9TRVRfTlVMTCh0dl9fZHN0KTsgXAorCQlEVUtfVFZBTF9ERUNSRUYoKHRociksICZ0dl9fdG1w KTsgIC8qIHNpZGUgZWZmZWN0cyAqLyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfVFZB TF9TRVRfQk9PTEVBTl9VUERSRUZfQUxUMCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJ CWR1a190dmFsICp0dl9fZHN0OyBkdWtfdHZhbCB0dl9fdG1wOyB0dl9fZHN0ID0gKHR2cHRyX2Rz dCk7IFwKKwkJRFVLX1RWQUxfU0VUX1RWQUwoJnR2X190bXAsIHR2X19kc3QpOyBcCisJCURVS19U VkFMX1NFVF9CT09MRUFOKHR2X19kc3QsIChuZXd2YWwpKTsgXAorCQlEVUtfVFZBTF9ERUNSRUYo KHRociksICZ0dl9fdG1wKTsgIC8qIHNpZGUgZWZmZWN0cyAqLyBcCisJfSB3aGlsZSAoMCkKKwor I2RlZmluZSBEVUtfVFZBTF9TRVRfTlVNQkVSX1VQRFJFRl9BTFQwKHRocix0dnB0cl9kc3QsbmV3 dmFsKSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19kc3Q7IGR1a190dmFsIHR2X190bXA7IHR2X19k c3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfVFZBTCgmdHZfX3RtcCwgdHZfX2Rz dCk7IFwKKwkJRFVLX1RWQUxfU0VUX05VTUJFUih0dl9fZHN0LCAobmV3dmFsKSk7IFwKKwkJRFVL X1RWQUxfREVDUkVGKCh0aHIpLCAmdHZfX3RtcCk7ICAvKiBzaWRlIGVmZmVjdHMgKi8gXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19UVkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9VUERSRUZfQUxU MCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJCWR1a190dmFsICp0dl9fZHN0OyBkdWtf dHZhbCB0dl9fdG1wOyB0dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX1RW QUwoJnR2X190bXAsIHR2X19kc3QpOyBcCisJCURVS19UVkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9G QVNUKHR2X19kc3QsIChuZXd2YWwpKTsgXAorCQlEVUtfVFZBTF9ERUNSRUYoKHRociksICZ0dl9f dG1wKTsgIC8qIHNpZGUgZWZmZWN0cyAqLyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RW QUxfU0VUX0RPVUJMRV9VUERSRUZfQUxUMCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJ CWR1a190dmFsICp0dl9fZHN0OyBkdWtfdHZhbCB0dl9fdG1wOyB0dl9fZHN0ID0gKHR2cHRyX2Rz dCk7IFwKKwkJRFVLX1RWQUxfU0VUX1RWQUwoJnR2X190bXAsIHR2X19kc3QpOyBcCisJCURVS19U VkFMX1NFVF9ET1VCTEUodHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19UVkFMX0RFQ1JFRigo dGhyKSwgJnR2X190bXApOyAgLyogc2lkZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgwKQorI2Rl ZmluZSBEVUtfVFZBTF9TRVRfTkFOX1VQRFJFRl9BTFQwKHRocix0dnB0cl9kc3QpIGRvIHsgXAor CQlkdWtfdHZhbCAqdHZfX2RzdDsgZHVrX3R2YWwgdHZfX3RtcDsgdHZfX2RzdCA9ICh0dnB0cl9k c3QpOyBcCisJCURVS19UVkFMX1NFVF9UVkFMKCZ0dl9fdG1wLCB0dl9fZHN0KTsgXAorCQlEVUtf VFZBTF9TRVRfTkFOKHR2X19kc3QpOyBcCisJCURVS19UVkFMX0RFQ1JFRigodGhyKSwgJnR2X190 bXApOyAgLyogc2lkZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgwKQorI2lmIGRlZmluZWQoRFVL X1VTRV9GQVNUSU5UKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfSTQ4X1VQRFJFRl9BTFQwKHRocix0 dnB0cl9kc3QsbmV3dmFsKSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19kc3Q7IGR1a190dmFsIHR2 X190bXA7IHR2X19kc3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfVFZBTCgmdHZf X3RtcCwgdHZfX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX0k0OCh0dl9fZHN0LCAobmV3dmFsKSk7 IFwKKwkJRFVLX1RWQUxfREVDUkVGKCh0aHIpLCAmdHZfX3RtcCk7ICAvKiBzaWRlIGVmZmVjdHMg Ki8gXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19UVkFMX1NFVF9JMzJfVVBEUkVGX0FMVDAo dGhyLHR2cHRyX2RzdCxuZXd2YWwpIGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdDsgZHVrX3R2 YWwgdHZfX3RtcDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJCURVS19UVkFMX1NFVF9UVkFM KCZ0dl9fdG1wLCB0dl9fZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfSTMyKHR2X19kc3QsIChuZXd2 YWwpKTsgXAorCQlEVUtfVFZBTF9ERUNSRUYoKHRociksICZ0dl9fdG1wKTsgIC8qIHNpZGUgZWZm ZWN0cyAqLyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1UzMl9VUERSRUZf QUxUMCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJCWR1a190dmFsICp0dl9fZHN0OyBk dWtfdHZhbCB0dl9fdG1wOyB0dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VU X1RWQUwoJnR2X190bXAsIHR2X19kc3QpOyBcCisJCURVS19UVkFMX1NFVF9VMzIodHZfX2RzdCwg KG5ld3ZhbCkpOyBcCisJCURVS19UVkFMX0RFQ1JFRigodGhyKSwgJnR2X190bXApOyAgLyogc2lk ZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgRFVLX1RWQUxfU0VU X0RPVUJMRV9DQVNUX1VQRFJFRih0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgXAorCURVS19UVkFMX1NF VF9ET1VCTEVfVVBEUkVGKCh0aHIpLCAodHZwdHJfZHN0KSwgKGR1a19kb3VibGVfdCkgKG5ld3Zh bCkpCisjZW5kaWYgIC8qIERVS19VU0VfRkFTVElOVCAqLworCisjZGVmaW5lIERVS19UVkFMX1NF VF9MSUdIVEZVTkNfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxsZl92LGxmX2ZwLGxmX2ZsYWdz KSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19kc3Q7IGR1a190dmFsIHR2X190bXA7IHR2X19kc3Qg PSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfVFZBTCgmdHZfX3RtcCwgdHZfX2RzdCk7 IFwKKwkJRFVLX1RWQUxfU0VUX0xJR0hURlVOQyh0dl9fZHN0LCAobGZfdiksIChsZl9mcCksIChs Zl9mbGFncykpOyBcCisJCURVS19UVkFMX0RFQ1JFRigodGhyKSwgJnR2X190bXApOyAgLyogc2lk ZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19UVkFMX1NFVF9TVFJJ TkdfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwpIGRvIHsgXAorCQlkdWtfdHZhbCAq dHZfX2RzdDsgZHVrX3R2YWwgdHZfX3RtcDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJCURV S19UVkFMX1NFVF9UVkFMKCZ0dl9fdG1wLCB0dl9fZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfU1RS SU5HKHR2X19kc3QsIChuZXd2YWwpKTsgXAorCQlEVUtfSFNUUklOR19JTkNSRUYoKHRociksIChu ZXd2YWwpKTsgXAorCQlEVUtfVFZBTF9ERUNSRUYoKHRociksICZ0dl9fdG1wKTsgIC8qIHNpZGUg ZWZmZWN0cyAqLyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfVFZBTF9TRVRfT0JKRUNU X1VQRFJFRl9BTFQwKHRocix0dnB0cl9kc3QsbmV3dmFsKSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2 X19kc3Q7IGR1a190dmFsIHR2X190bXA7IHR2X19kc3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtf VFZBTF9TRVRfVFZBTCgmdHZfX3RtcCwgdHZfX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX09CSkVD VCh0dl9fZHN0LCAobmV3dmFsKSk7IFwKKwkJRFVLX0hPQkpFQ1RfSU5DUkVGKCh0aHIpLCAobmV3 dmFsKSk7IFwKKwkJRFVLX1RWQUxfREVDUkVGKCh0aHIpLCAmdHZfX3RtcCk7ICAvKiBzaWRlIGVm ZmVjdHMgKi8gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0JVRkZFUl9V UERSRUZfQUxUMCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJCWR1a190dmFsICp0dl9f ZHN0OyBkdWtfdHZhbCB0dl9fdG1wOyB0dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RW QUxfU0VUX1RWQUwoJnR2X190bXAsIHR2X19kc3QpOyBcCisJCURVS19UVkFMX1NFVF9CVUZGRVIo dHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19IQlVGRkVSX0lOQ1JFRigodGhyKSwgKG5ld3Zh bCkpOyBcCisJCURVS19UVkFMX0RFQ1JFRigodGhyKSwgJnR2X190bXApOyAgLyogc2lkZSBlZmZl Y3RzICovIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19UVkFMX1NFVF9QT0lOVEVSX1VQ RFJFRl9BTFQwKHRocix0dnB0cl9kc3QsbmV3dmFsKSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19k c3Q7IGR1a190dmFsIHR2X190bXA7IHR2X19kc3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZB TF9TRVRfVFZBTCgmdHZfX3RtcCwgdHZfX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX1BPSU5URVIo dHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19UVkFMX0RFQ1JFRigodGhyKSwgJnR2X190bXAp OyAgLyogc2lkZSBlZmZlY3RzICovIFwKKwl9IHdoaWxlICgwKQorCisvKiBEVUtfVFZBTF9TRVRf VFZBTF9VUERSRUYoKSBpcyB1c2VkIGEgbG90IGluIGV4ZWN1dG9yLCBwcm9wZXJ0eSBsb29rdXBz LAorICogZXRjLCBzbyBpdCdzIHZlcnkgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4gIE1lYXN1 cmUgd2hlbiBjaGFuZ2luZy4KKyAqCisgKiBOT1RFOiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlv biBkdWtfdHZhbCBwb2ludGVycyBtYXkgYmUgdGhlIHNhbWUsIGFuZAorICogdGhlIG1hY3JvcyBN VVNUIGRlYWwgd2l0aCB0aGF0IGNvcnJlY3RseS4KKyAqLworCisvKiBPcmlnaW5hbCBpZGlvbSB1 c2VkLCBtaW5pbWFsIGNvZGUgc2l6ZS4gKi8KKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUxfVVBE UkVGX0FMVDAodGhyLHR2cHRyX2RzdCx0dnB0cl9zcmMpIGRvIHsgXAorCQlkdWtfdHZhbCAqdHZf X2RzdCwgKnR2X19zcmM7IGR1a190dmFsIHR2X190bXA7IFwKKwkJdHZfX2RzdCA9ICh0dnB0cl9k c3QpOyB0dl9fc3JjID0gKHR2cHRyX3NyYyk7IFwKKwkJRFVLX1RWQUxfU0VUX1RWQUwoJnR2X190 bXAsIHR2X19kc3QpOyBcCisJCURVS19UVkFMX1NFVF9UVkFMKHR2X19kc3QsIHR2X19zcmMpOyBc CisJCURVS19UVkFMX0lOQ1JFRigodGhyKSwgdHZfX3NyYyk7IFwKKwkJRFVLX1RWQUxfREVDUkVG KCh0aHIpLCAmdHZfX3RtcCk7ICAvKiBzaWRlIGVmZmVjdHMgKi8gXAorCX0gd2hpbGUgKDApCisK Ky8qIEZhc3RlciBhbHRlcm5hdGl2ZTogYXZvaWQgbWFraW5nIGEgdGVtcG9yYXJ5IGNvcHkgb2Yg dHZwdHJfZHN0IGFuZCB1c2UKKyAqIGZhc3QgaW5jcmVmL2RlY3JlZiBtYWNyb3MuCisgKi8KKyNk ZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGX0FMVDEodGhyLHR2cHRyX2RzdCx0dnB0cl9z cmMpIGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdCwgKnR2X19zcmM7IGR1a19oZWFwaGRyICpo X19vYmo7IFwKKwkJdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyB0dl9fc3JjID0gKHR2cHRyX3NyYyk7 IFwKKwkJRFVLX1RWQUxfSU5DUkVGX0ZBU1QoKHRociksIHR2X19zcmMpOyBcCisJCWlmIChEVUtf VFZBTF9ORUVEU19SRUZDT1VOVF9VUERBVEUodHZfX2RzdCkpIHsgXAorCQkJaF9fb2JqID0gRFVL X1RWQUxfR0VUX0hFQVBIRFIodHZfX2RzdCk7IFwKKwkJCURVS19BU1NFUlQoaF9fb2JqICE9IE5V TEwpOyBcCisJCQlEVUtfVFZBTF9TRVRfVFZBTCh0dl9fZHN0LCB0dl9fc3JjKTsgXAorCQkJRFVL X0hFQVBIRFJfREVDUkVGX0ZBU1QoKHRociksIGhfX29iaik7ICAvKiBzaWRlIGVmZmVjdHMgKi8g XAorCQl9IGVsc2UgeyBcCisJCQlEVUtfVFZBTF9TRVRfVFZBTCh0dl9fZHN0LCB0dl9fc3JjKTsg XAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisvKiBYWFg6IG5vIG9wdGltaXplZCB2YXJpYW50cyB5 ZXQgKi8KKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERSRUYgICAgICAgICBEVUtf VFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRl9BTFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9VTkRF RklORURfVVBEUkVGX05PUlogICAgRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERSRUZfTk9SWl9B TFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9VTlVTRURfVVBEUkVGICAgICAgICAgICAgRFVLX1RW QUxfU0VUX1VOVVNFRF9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVMTF9VUERS RUYgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9OVUxMX1VQRFJFRl9BTFQwCisjZGVmaW5lIERV S19UVkFMX1NFVF9CT09MRUFOX1VQRFJFRiAgICAgICAgICAgRFVLX1RWQUxfU0VUX0JPT0xFQU5f VVBEUkVGX0FMVDAKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX05VTUJFUl9VUERSRUYgICAgICAgICAg ICBEVUtfVFZBTF9TRVRfTlVNQkVSX1VQRFJFRl9BTFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9O VU1CRVJfQ0hLRkFTVF9VUERSRUYgICAgRFVLX1RWQUxfU0VUX05VTUJFUl9DSEtGQVNUX1VQRFJF Rl9BTFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9ET1VCTEVfVVBEUkVGICAgICAgICAgICAgRFVL X1RWQUxfU0VUX0RPVUJMRV9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9TRVRfTkFOX1VQ RFJFRiAgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9OQU5fVVBEUkVGX0FMVDAKKyNpZiBkZWZp bmVkKERVS19VU0VfRkFTVElOVCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0k0OF9VUERSRUYgICAg ICAgICAgICAgICBEVUtfVFZBTF9TRVRfSTQ4X1VQRFJFRl9BTFQwCisjZGVmaW5lIERVS19UVkFM X1NFVF9JMzJfVVBEUkVGICAgICAgICAgICAgICAgRFVLX1RWQUxfU0VUX0kzMl9VUERSRUZfQUxU MAorI2RlZmluZSBEVUtfVFZBTF9TRVRfVTMyX1VQRFJFRiAgICAgICAgICAgICAgIERVS19UVkFM X1NFVF9VMzJfVVBEUkVGX0FMVDAKKyNlbHNlCisjZGVmaW5lIERVS19UVkFMX1NFVF9JNDhfVVBE UkVGICAgICAgICAgICAgICAgRFVLX1RWQUxfU0VUX0RPVUJMRV9DQVNUX1VQRFJFRiAgLyogWFhY OiBmYXN0IGludC10by1kb3VibGUgKi8KKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0kzMl9VUERSRUYg ICAgICAgICAgICAgICBEVUtfVFZBTF9TRVRfRE9VQkxFX0NBU1RfVVBEUkVGCisjZGVmaW5lIERV S19UVkFMX1NFVF9VMzJfVVBEUkVGICAgICAgICAgICAgICAgRFVLX1RWQUxfU0VUX0RPVUJMRV9D QVNUX1VQRFJFRgorI2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJTlQgKi8KKyNkZWZpbmUgRFVLX1RW QUxfU0VUX0ZBU1RJTlRfVVBEUkVGICAgICAgICAgICBEVUtfVFZBTF9TRVRfSTQ4X1VQRFJFRiAg LyogY29udmVuaWVuY2UgKi8KKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0xJR0hURlVOQ19VUERSRUYg ICAgICAgICBEVUtfVFZBTF9TRVRfTElHSFRGVU5DX1VQRFJFRl9BTFQwCisjZGVmaW5lIERVS19U VkFMX1NFVF9TVFJJTkdfVVBEUkVGICAgICAgICAgICAgRFVLX1RWQUxfU0VUX1NUUklOR19VUERS RUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9TRVRfT0JKRUNUX1VQRFJFRiAgICAgICAgICAgIERV S19UVkFMX1NFVF9PQkpFQ1RfVVBEUkVGX0FMVDAKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0JVRkZF Ul9VUERSRUYgICAgICAgICAgICBEVUtfVFZBTF9TRVRfQlVGRkVSX1VQRFJFRl9BTFQwCisjZGVm aW5lIERVS19UVkFMX1NFVF9QT0lOVEVSX1VQRFJFRiAgICAgICAgICAgRFVLX1RWQUxfU0VUX1BP SU5URVJfVVBEUkVGX0FMVDAKKworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUX1JFRkNPVU5UX0RF RkFVTFQpCisvKiBPcHRpbWl6ZWQgZm9yIHNwZWVkLiAqLworI2RlZmluZSBEVUtfVFZBTF9TRVRf VFZBTF9VUERSRUYgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9BTFQxCisj ZGVmaW5lIERVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9GQVNUICAgICAgICAgRFVLX1RWQUxfU0VU X1RWQUxfVVBEUkVGX0FMVDEKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGX1NMT1cg ICAgICAgICBEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUZfQUxUMAorI2Vsc2UKKy8qIE9wdGltaXpl ZCBmb3Igc2l6ZS4gKi8KKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGICAgICAgICAg ICAgICBEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9TRVRf VFZBTF9VUERSRUZfRkFTVCAgICAgICAgIERVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9BTFQwCisj ZGVmaW5lIERVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9TTE9XICAgICAgICAgRFVLX1RWQUxfU0VU X1RWQUxfVVBEUkVGX0FMVDAKKyNlbmRpZgorCisjZWxzZSAgLyogRFVLX1VTRV9SRUZFUkVOQ0Vf Q09VTlRJTkcgKi8KKworI2RlZmluZSBEVUtfVFZBTF9ORUVEU19SRUZDT1VOVF9VUERBVEUodHYp ICAgICAwCisjZGVmaW5lIERVS19IRUFQSERSX05FRURTX1JFRkNPVU5UX1VQREFURShoKSAgIDAK KworI2RlZmluZSBEVUtfVFZBTF9JTkNSRUZfRkFTVCh0aHIsdikgICAgICAgICAgICBkbyB7fSB3 aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19UVkFMX0RFQ1JFRl9GQVNUKHRocix2KSAg ICAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX1RWQUxfREVD UkVGX05PUlpfRkFTVCh0aHIsdikgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2Rl ZmluZSBEVUtfVFZBTF9JTkNSRUZfU0xPVyh0aHIsdikgICAgICAgICAgICBkbyB7fSB3aGlsZSAo MCkgLyogbm9wICovCisjZGVmaW5lIERVS19UVkFMX0RFQ1JFRl9TTE9XKHRocix2KSAgICAgICAg ICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX1RWQUxfREVDUkVGX05P UlpfU0xPVyh0aHIsdikgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBE VUtfVFZBTF9JTkNSRUYodGhyLHYpICAgICAgICAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyog bm9wICovCisjZGVmaW5lIERVS19UVkFMX0RFQ1JFRih0aHIsdikgICAgICAgICAgICAgICAgIGRv IHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX1RWQUxfREVDUkVGX05PUloodGhy LHYpICAgICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSEVB UEhEUl9JTkNSRUZfRkFTVCh0aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICov CisjZGVmaW5lIERVS19IRUFQSERSX0RFQ1JFRl9GQVNUKHRocixoKSAgICAgICAgIGRvIHt9IHdo aWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGX05PUlpfRkFTVCh0 aHIsaCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSEVBUEhEUl9J TkNSRUZfU0xPVyh0aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVm aW5lIERVS19IRUFQSERSX0RFQ1JFRl9TTE9XKHRocixoKSAgICAgICAgIGRvIHt9IHdoaWxlICgw KSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGX05PUlpfU0xPVyh0aHIsaCkg ICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSEVBUEhEUl9JTkNSRUYo dGhyLGgpICAgICAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERV S19IRUFQSERSX0RFQ1JFRih0aHIsaCkgICAgICAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBu b3AgKi8KKyNkZWZpbmUgRFVLX0hFQVBIRFJfREVDUkVGX05PUloodGhyLGgpICAgICAgICAgZG8g e30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSFNUUklOR19JTkNSRUZfRkFTVCh0 aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19IU1RS SU5HX0RFQ1JFRl9GQVNUKHRocixoKSAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8K KyNkZWZpbmUgRFVLX0hTVFJJTkdfREVDUkVGX05PUlpfRkFTVCh0aHIsaCkgICAgZG8ge30gd2hp bGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSFNUUklOR19JTkNSRUZfU0xPVyh0aHIsaCkg ICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19IU1RSSU5HX0RF Q1JFRl9TTE9XKHRocixoKSAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZp bmUgRFVLX0hTVFJJTkdfREVDUkVGX05PUlpfU0xPVyh0aHIsaCkgICAgZG8ge30gd2hpbGUgKDAp IC8qIG5vcCAqLworI2RlZmluZSBEVUtfSFNUUklOR19JTkNSRUYodGhyLGgpICAgICAgICAgICAg ICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19IU1RSSU5HX0RFQ1JFRih0 aHIsaCkgICAgICAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVL X0hTVFJJTkdfREVDUkVGX05PUloodGhyLGgpICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5v cCAqLworI2RlZmluZSBEVUtfSE9CSkVDVF9JTkNSRUZfRkFTVCh0aHIsaCkgICAgICAgICBkbyB7 fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19IT0JKRUNUX0RFQ1JFRl9GQVNUKHRo cixoKSAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hPQkpF Q1RfREVDUkVGX05PUlpfRkFTVCh0aHIsaCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLwor I2RlZmluZSBEVUtfSE9CSkVDVF9JTkNSRUZfU0xPVyh0aHIsaCkgICAgICAgICBkbyB7fSB3aGls ZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19IT0JKRUNUX0RFQ1JFRl9TTE9XKHRocixoKSAg ICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfREVD UkVGX05PUlpfU0xPVyh0aHIsaCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmlu ZSBEVUtfSE9CSkVDVF9JTkNSRUYodGhyLGgpICAgICAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkg Lyogbm9wICovCisjZGVmaW5lIERVS19IT0JKRUNUX0RFQ1JFRih0aHIsaCkgICAgICAgICAgICAg IGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfREVDUkVGX05P UloodGhyLGgpICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtf SEJVRkZFUl9JTkNSRUZfRkFTVCh0aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9w ICovCisjZGVmaW5lIERVS19IQlVGRkVSX0RFQ1JFRl9GQVNUKHRocixoKSAgICAgICAgIGRvIHt9 IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVDUkVGX05PUlpfRkFT VCh0aHIsaCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSEJVRkZF Ul9JTkNSRUZfU0xPVyh0aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisj ZGVmaW5lIERVS19IQlVGRkVSX0RFQ1JFRl9TTE9XKHRocixoKSAgICAgICAgIGRvIHt9IHdoaWxl ICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVDUkVGX05PUlpfU0xPVyh0aHIs aCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSEJVRkZFUl9JTkNS RUYodGhyLGgpICAgICAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5l IERVS19IQlVGRkVSX0RFQ1JFRih0aHIsaCkgICAgICAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAv KiBub3AgKi8KKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVDUkVGX05PUloodGhyLGgpICAgICAgICAg ZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworCisjZGVmaW5lIERVS19IQ09NUEZVTkNfSU5DUkVG KHRocixoKSAgICAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVL X0hDT01QRlVOQ19ERUNSRUYodGhyLGgpICAgICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5v cCAqLworI2RlZmluZSBEVUtfSENPTVBGVU5DX0RFQ1JFRl9OT1JaKHRocixoKSAgICAgICBkbyB7 fSB3aGlsZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19ITkFURlVOQ19JTkNSRUYodGhyLGgp ICAgICAgICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hOQVRG VU5DX0RFQ1JFRih0aHIsaCkgICAgICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLwor I2RlZmluZSBEVUtfSE5BVEZVTkNfREVDUkVGX05PUloodGhyLGgpICAgICAgICBkbyB7fSB3aGls ZSAoMCkgLyogbm9wICovCisjZGVmaW5lIERVS19IQlVGT0JKX0lOQ1JFRih0aHIsaCkgICAgICAg ICAgICAgIGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hCVUZPQkpfREVD UkVGKHRocixoKSAgICAgICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmlu ZSBEVUtfSEJVRk9CSl9ERUNSRUZfTk9SWih0aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkg Lyogbm9wICovCisjZGVmaW5lIERVS19IVEhSRUFEX0lOQ1JFRih0aHIsaCkgICAgICAgICAgICAg IGRvIHt9IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hUSFJFQURfREVDUkVGKHRo cixoKSAgICAgICAgICAgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtf SFRIUkVBRF9ERUNSRUZfTk9SWih0aHIsaCkgICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9w ICovCisjZGVmaW5lIERVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwodGhyLGgpICAgIGRvIHt9 IHdoaWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfREVDUkVGX0FMTE9XTlVM TCh0aHIsaCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSE9CSkVD VF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhyLGgpICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICov CisjZGVmaW5lIERVS19IQlVGRkVSX0lOQ1JFRl9BTExPV05VTEwodGhyLGgpICAgIGRvIHt9IHdo aWxlICgwKSAvKiBub3AgKi8KKyNkZWZpbmUgRFVLX0hCVUZGRVJfREVDUkVGX0FMTE9XTlVMTCh0 aHIsaCkgICAgZG8ge30gd2hpbGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfSEJVRkZFUl9E RUNSRUZfTk9SWl9BTExPV05VTEwodGhyLGgpICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisK KyNkZWZpbmUgRFVLX1JFRlpFUk9fQ0hFQ0tfRkFTVCh0aHIpICAgICAgICAgICAgZG8ge30gd2hp bGUgKDApIC8qIG5vcCAqLworI2RlZmluZSBEVUtfUkVGWkVST19DSEVDS19TTE9XKHRocikgICAg ICAgICAgICBkbyB7fSB3aGlsZSAoMCkgLyogbm9wICovCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VU X1VOREVGSU5FRF9VUERSRUZfQUxUMCh0aHIsdHZwdHJfZHN0KSBkbyB7IFwKKwkJZHVrX3R2YWwg KnR2X19kc3Q7IHR2X19kc3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfVU5ERUZJ TkVEKHR2X19kc3QpOyBcCisJCURVS19VTlJFRigodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorCisj ZGVmaW5lIERVS19UVkFMX1NFVF9VTlVTRURfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCkgZG8g eyBcCisJCWR1a190dmFsICp0dl9fZHN0OyB0dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVL X1RWQUxfU0VUX1VOVVNFRCh0dl9fZHN0KTsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBcCisJfSB3 aGlsZSAoMCkKKworI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVMTF9VUERSRUZfQUxUMCh0aHIsdHZw dHJfZHN0KSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19kc3Q7IHR2X19kc3QgPSAodHZwdHJfZHN0 KTsgXAorCQlEVUtfVFZBTF9TRVRfTlVMTCh0dl9fZHN0KTsgXAorCQlEVUtfVU5SRUYoKHRocikp OyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfVFZBTF9TRVRfQk9PTEVBTl9VUERSRUZf QUxUMCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJCWR1a190dmFsICp0dl9fZHN0OyB0 dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX0JPT0xFQU4odHZfX2RzdCwg KG5ld3ZhbCkpOyBcCisJCURVS19VTlJFRigodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVm aW5lIERVS19UVkFMX1NFVF9OVU1CRVJfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwp IGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJ CURVS19UVkFMX1NFVF9OVU1CRVIodHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19VTlJFRigo dGhyKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVNQkVSX0NIS0ZB U1RfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwpIGRvIHsgXAorCQlkdWtfdHZhbCAq dHZfX2RzdDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJCURVS19UVkFMX1NFVF9OVU1CRVJf Q0hLRkFTVF9GQVNUKHR2X19kc3QsIChuZXd2YWwpKTsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBc CisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0RPVUJMRV9VUERSRUZfQUxUMCh0 aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJCWR1a190dmFsICp0dl9fZHN0OyB0dl9fZHN0 ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX0RPVUJMRSh0dl9fZHN0LCAobmV3dmFs KSk7IFwKKwkJRFVLX1VOUkVGKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19U VkFMX1NFVF9OQU5fVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCkgZG8geyBcCisJCWR1a190dmFs ICp0dl9fZHN0OyB0dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX05BTih0 dl9fZHN0KTsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKyNpZiBkZWZp bmVkKERVS19VU0VfRkFTVElOVCkKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX0k0OF9VUERSRUZfQUxU MCh0aHIsdHZwdHJfZHN0LG5ld3ZhbCkgZG8geyBcCisJCWR1a190dmFsICp0dl9fZHN0OyB0dl9f ZHN0ID0gKHR2cHRyX2RzdCk7IFwKKwkJRFVLX1RWQUxfU0VUX0k0OCh0dl9fZHN0LCAobmV3dmFs KSk7IFwKKwkJRFVLX1VOUkVGKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19U VkFMX1NFVF9JMzJfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwpIGRvIHsgXAorCQlk dWtfdHZhbCAqdHZfX2RzdDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJCURVS19UVkFMX1NF VF9JMzIodHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19VTlJFRigodGhyKSk7IFwKKwl9IHdo aWxlICgwKQorI2RlZmluZSBEVUtfVFZBTF9TRVRfVTMyX1VQRFJFRl9BTFQwKHRocix0dnB0cl9k c3QsbmV3dmFsKSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19kc3Q7IHR2X19kc3QgPSAodHZwdHJf ZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfVTMyKHR2X19kc3QsIChuZXd2YWwpKTsgXAorCQlEVUtf VU5SRUYoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19UVkFMX1NF VF9ET1VCTEVfQ0FTVF9VUERSRUYodGhyLHR2cHRyX2RzdCxuZXd2YWwpIFwKKwlEVUtfVFZBTF9T RVRfRE9VQkxFX1VQRFJFRigodGhyKSwgKHR2cHRyX2RzdCksIChkdWtfZG91YmxlX3QpIChuZXd2 YWwpKQorI2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJTlQgKi8KKworI2RlZmluZSBEVUtfVFZBTF9T RVRfTElHSFRGVU5DX1VQRFJFRl9BTFQwKHRocix0dnB0cl9kc3QsbGZfdixsZl9mcCxsZl9mbGFn cykgZG8geyBcCisJCWR1a190dmFsICp0dl9fZHN0OyB0dl9fZHN0ID0gKHR2cHRyX2RzdCk7IFwK KwkJRFVLX1RWQUxfU0VUX0xJR0hURlVOQyh0dl9fZHN0LCAobGZfdiksIChsZl9mcCksIChsZl9m bGFncykpOyBcCisJCURVS19VTlJFRigodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5l IERVS19UVkFMX1NFVF9TVFJJTkdfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwpIGRv IHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJCURV S19UVkFMX1NFVF9TVFJJTkcodHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19VTlJFRigodGhy KSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19UVkFMX1NFVF9PQkpFQ1RfVVBEUkVG X0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwpIGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdDsg dHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJCURVS19UVkFMX1NFVF9PQkpFQ1QodHZfX2RzdCwg KG5ld3ZhbCkpOyBcCisJCURVS19VTlJFRigodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVm aW5lIERVS19UVkFMX1NFVF9CVUZGRVJfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCxuZXd2YWwp IGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdDsgdHZfX2RzdCA9ICh0dnB0cl9kc3QpOyBcCisJ CURVS19UVkFMX1NFVF9CVUZGRVIodHZfX2RzdCwgKG5ld3ZhbCkpOyBcCisJCURVS19VTlJFRigo dGhyKSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19UVkFMX1NFVF9QT0lOVEVSX1VQ RFJFRl9BTFQwKHRocix0dnB0cl9kc3QsbmV3dmFsKSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X19k c3Q7IHR2X19kc3QgPSAodHZwdHJfZHN0KTsgXAorCQlEVUtfVFZBTF9TRVRfUE9JTlRFUih0dl9f ZHN0LCAobmV3dmFsKSk7IFwKKwkJRFVLX1VOUkVGKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisK KyNkZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGX0FMVDAodGhyLHR2cHRyX2RzdCx0dnB0 cl9zcmMpIGRvIHsgXAorCQlkdWtfdHZhbCAqdHZfX2RzdCwgKnR2X19zcmM7IFwKKwkJdHZfX2Rz dCA9ICh0dnB0cl9kc3QpOyB0dl9fc3JjID0gKHR2cHRyX3NyYyk7IFwKKwkJRFVLX1RWQUxfU0VU X1RWQUwodHZfX2RzdCwgdHZfX3NyYyk7IFwKKwkJRFVLX1VOUkVGKCh0aHIpKTsgXAorCX0gd2hp bGUgKDApCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERSRUYgICAgICAgICBE VUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRl9BTFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9V TkRFRklORURfVVBEUkVGX05PUlogICAgRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERSRUZfQUxU MAorI2RlZmluZSBEVUtfVFZBTF9TRVRfVU5VU0VEX1VQRFJFRiAgICAgICAgICAgIERVS19UVkFM X1NFVF9VTlVTRURfVVBEUkVGX0FMVDAKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX05VTExfVVBEUkVG ICAgICAgICAgICAgICBEVUtfVFZBTF9TRVRfTlVMTF9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtf VFZBTF9TRVRfQk9PTEVBTl9VUERSRUYgICAgICAgICAgIERVS19UVkFMX1NFVF9CT09MRUFOX1VQ RFJFRl9BTFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9OVU1CRVJfVVBEUkVGICAgICAgICAgICAg RFVLX1RWQUxfU0VUX05VTUJFUl9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9TRVRfTlVN QkVSX0NIS0ZBU1RfVVBEUkVGICAgIERVS19UVkFMX1NFVF9OVU1CRVJfQ0hLRkFTVF9VUERSRUZf QUxUMAorI2RlZmluZSBEVUtfVFZBTF9TRVRfRE9VQkxFX1VQRFJFRiAgICAgICAgICAgIERVS19U VkFMX1NFVF9ET1VCTEVfVVBEUkVGX0FMVDAKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX05BTl9VUERS RUYgICAgICAgICAgICAgICBEVUtfVFZBTF9TRVRfTkFOX1VQRFJFRl9BTFQwCisjaWYgZGVmaW5l ZChEVUtfVVNFX0ZBU1RJTlQpCisjZGVmaW5lIERVS19UVkFMX1NFVF9JNDhfVVBEUkVGICAgICAg ICAgICAgICAgRFVLX1RWQUxfU0VUX0k0OF9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9T RVRfSTMyX1VQRFJFRiAgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9JMzJfVVBEUkVGX0FMVDAK KyNkZWZpbmUgRFVLX1RWQUxfU0VUX1UzMl9VUERSRUYgICAgICAgICAgICAgICBEVUtfVFZBTF9T RVRfVTMyX1VQRFJFRl9BTFQwCisjZWxzZQorI2RlZmluZSBEVUtfVFZBTF9TRVRfSTQ4X1VQRFJF RiAgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9ET1VCTEVfQ0FTVF9VUERSRUYgIC8qIFhYWDog ZmFzdC1pbnQtdG8tZG91YmxlICovCisjZGVmaW5lIERVS19UVkFMX1NFVF9JMzJfVVBEUkVGICAg ICAgICAgICAgICAgRFVLX1RWQUxfU0VUX0RPVUJMRV9DQVNUX1VQRFJFRgorI2RlZmluZSBEVUtf VFZBTF9TRVRfVTMyX1VQRFJFRiAgICAgICAgICAgICAgIERVS19UVkFMX1NFVF9ET1VCTEVfQ0FT VF9VUERSRUYKKyNlbmRpZiAgLyogRFVLX1VTRV9GQVNUSU5UICovCisjZGVmaW5lIERVS19UVkFM X1NFVF9GQVNUSU5UX1VQRFJFRiAgICAgICAgICAgRFVLX1RWQUxfU0VUX0k0OF9VUERSRUYgIC8q IGNvbnZlbmllbmNlICovCisjZGVmaW5lIERVS19UVkFMX1NFVF9MSUdIVEZVTkNfVVBEUkVGICAg ICAgICAgRFVLX1RWQUxfU0VUX0xJR0hURlVOQ19VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZB TF9TRVRfU1RSSU5HX1VQRFJFRiAgICAgICAgICAgIERVS19UVkFMX1NFVF9TVFJJTkdfVVBEUkVG X0FMVDAKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX09CSkVDVF9VUERSRUYgICAgICAgICAgICBEVUtf VFZBTF9TRVRfT0JKRUNUX1VQRFJFRl9BTFQwCisjZGVmaW5lIERVS19UVkFMX1NFVF9CVUZGRVJf VVBEUkVGICAgICAgICAgICAgRFVLX1RWQUxfU0VUX0JVRkZFUl9VUERSRUZfQUxUMAorI2RlZmlu ZSBEVUtfVFZBTF9TRVRfUE9JTlRFUl9VUERSRUYgICAgICAgICAgIERVS19UVkFMX1NFVF9QT0lO VEVSX1VQRFJFRl9BTFQwCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGICAgICAg ICAgICAgICBEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUZfQUxUMAorI2RlZmluZSBEVUtfVFZBTF9T RVRfVFZBTF9VUERSRUZfRkFTVCAgICAgICAgIERVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9BTFQw CisjZGVmaW5lIERVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9TTE9XICAgICAgICAgRFVLX1RWQUxf U0VUX1RWQUxfVVBEUkVGX0FMVDAKKworI2VuZGlmICAvKiBEVUtfVVNFX1JFRkVSRU5DRV9DT1VO VElORyAqLworCisvKgorICogIFNvbWUgY29udmVuaWVuY2UgbWFjcm9zIHRoYXQgZG9uJ3QgaGF2 ZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zIG5vdy4KKyAqLworCisjZGVmaW5lIERVS19UVkFM X1NFVF9UVkFMX1VQRFJFRl9OT1JaKHRocix0dl9kc3QsdHZfc3JjKSBkbyB7IFwKKwkJZHVrX2h0 aHJlYWQgKmR1a19fdGhyID0gKHRocik7IFwKKwkJZHVrX3R2YWwgKmR1a19fZHN0ID0gKHR2X2Rz dCk7IFwKKwkJZHVrX3R2YWwgKmR1a19fc3JjID0gKHR2X3NyYyk7IFwKKwkJRFVLX1VOUkVGKGR1 a19fdGhyKTsgXAorCQlEVUtfVFZBTF9ERUNSRUZfTk9SWih0aHIsIGR1a19fZHN0KTsgXAorCQlE VUtfVFZBTF9TRVRfVFZBTChkdWtfX2RzdCwgZHVrX19zcmMpOyBcCisJCURVS19UVkFMX0lOQ1JF Rih0aHIsIGR1a19fZHN0KTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX1RWQUxfU0VU X1UzMl9VUERSRUZfTk9SWih0aHIsdHZfZHN0LHZhbCkgZG8geyBcCisJCWR1a19odGhyZWFkICpk dWtfX3RociA9ICh0aHIpOyBcCisJCWR1a190dmFsICpkdWtfX2RzdCA9ICh0dl9kc3QpOyBcCisJ CWR1a191aW50MzJfdCBkdWtfX3ZhbCA9IChkdWtfdWludDMyX3QpICh2YWwpOyBcCisJCURVS19V TlJFRihkdWtfX3Rocik7IFwKKwkJRFVLX1RWQUxfREVDUkVGX05PUloodGhyLCBkdWtfX2RzdCk7 IFwKKwkJRFVLX1RWQUxfU0VUX1UzMihkdWtfX2RzdCwgZHVrX192YWwpOyBcCisJfSB3aGlsZSAo MCkKKworLyoKKyAqICBQcm90b3R5cGVzCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZF UkVOQ0VfQ09VTlRJTkcpCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQor RFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVmemVyb19jaGVja19zbG93KGR1a19odGhyZWFk ICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVmemVyb19jaGVja19mYXN0KGR1 a19odGhyZWFkICp0aHIpOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19oZWFw aGRyX3JlZmNvdW50X2ZpbmFsaXplX25vcnooZHVrX2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpo ZHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaG9iamVjdF9yZWZjb3VudF9maW5hbGl6 ZV9ub3J6KGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqaCk7CisjaWYgMCAgLyogTm90IG5l ZWRlZDogZmFzdCBwYXRoIGhhbmRsZXMgaW5saW5lOyBzbG93IHBhdGggdXNlcyBkdWtfaGVhcGhk cl9kZWNyZWYoKSB3aGljaCBpcyBuZWVkZWQgYW55d2F5LiAqLworRFVLX0lOVEVSTkFMX0RFQ0wg dm9pZCBkdWtfaHN0cmluZ19kZWNyZWYoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hzdHJpbmcgKmgp OworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaHN0cmluZ19kZWNyZWZfbm9yeihkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaHN0cmluZyAqaCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19o YnVmZmVyX2RlY3JlZihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGJ1ZmZlciAqaCk7CitEVUtfSU5U RVJOQUxfREVDTCB2b2lkIGR1a19oYnVmZmVyX2RlY3JlZl9ub3J6KGR1a19odGhyZWFkICp0aHIs IGR1a19oYnVmZmVyICpoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hvYmplY3RfZGVj cmVmKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpoKTsKK0RVS19JTlRFUk5BTF9ERUNM IHZvaWQgZHVrX2hvYmplY3RfZGVjcmVmX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmpl Y3QgKmgpOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19oZWFwaGRyX3JlZnpl cm8oZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXBoZHIgKmgpOworRFVLX0lOVEVSTkFMX0RFQ0wg dm9pZCBkdWtfaGVhcGhkcl9yZWZ6ZXJvX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXBo ZHIgKmgpOworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUX1JFRkNPVU5UX0RFRkFVTFQpCitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19oc3RyaW5nX3JlZnplcm8oZHVrX2h0aHJlYWQgKnRociwg ZHVrX2hzdHJpbmcgKmgpOyAgLyogbm8gJ25vcnonIHZhcmlhbnQgKi8KK0RVS19JTlRFUk5BTF9E RUNMIHZvaWQgZHVrX2hidWZmZXJfcmVmemVybyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGJ1ZmZl ciAqaCk7ICAvKiBubyAnbm9yeicgdmFyaWFudCAqLworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBk dWtfaG9iamVjdF9yZWZ6ZXJvKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpoKTsKK0RV S19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hvYmplY3RfcmVmemVyb19ub3J6KGR1a19odGhyZWFk ICp0aHIsIGR1a19ob2JqZWN0ICpoKTsKKyNlbHNlCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1 a190dmFsX2luY3JlZihkdWtfdHZhbCAqdHYpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtf dHZhbF9kZWNyZWYoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2KTsKK0RVS19JTlRFUk5B TF9ERUNMIHZvaWQgZHVrX3R2YWxfZGVjcmVmX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2 YWwgKnR2KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hlYXBoZHJfaW5jcmVmKGR1a19o ZWFwaGRyICpoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hlYXBoZHJfZGVjcmVmKGR1 a19odGhyZWFkICp0aHIsIGR1a19oZWFwaGRyICpoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX2hlYXBoZHJfZGVjcmVmX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXBoZHIgKmgp OworI2VuZGlmCisjZWxzZSAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcgKi8KKy8qIG5v IHJlZmNvdW50aW5nICovCisjZW5kaWYgIC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HICov CisKKyNlbmRpZiAgLyogRFVLX1JFRkNPVU5UX0hfSU5DTFVERUQgKi8KKy8qICNpbmNsdWRlIGR1 a19hcGlfaW50ZXJuYWwuaCAqLworLyoKKyAqICBJbnRlcm5hbCBBUEkgY2FsbHMgd2hpY2ggaGF2 ZSAoc3RhY2sgYW5kIG90aGVyKSBzZW1hbnRpY3Mgc2ltaWxhcgorICogIHRvIHRoZSBwdWJsaWMg QVBJLgorICovCisKKyNpZiAhZGVmaW5lZChEVUtfQVBJX0lOVEVSTkFMX0hfSU5DTFVERUQpCisj ZGVmaW5lIERVS19BUElfSU5URVJOQUxfSF9JTkNMVURFRAorCisjZGVmaW5lIERVS19JTlRFUk5B TF9TWU1CT0woeCkgICAgICgiXHg4MiIgeCkKKworLyogZHVrX3B1c2hfc3ByaW50ZiBjb25zdGFu dHMgKi8KKyNkZWZpbmUgRFVLX1BVU0hfU1BSSU5URl9JTklUSUFMX1NJWkUgIDI1NkwKKyNkZWZp bmUgRFVLX1BVU0hfU1BSSU5URl9TQU5JVFlfTElNSVQgICgxTCAqIDEwMjRMICogMTAyNEwgKiAx MDI0TCkKKworLyogRmxhZyBPUmVkIHRvIGVycl9jb2RlIHRvIGluZGljYXRlIF9fRklMRV9fIC8g X19MSU5FX18gaXMgbm90CisgKiBibGFtZWQgYXMgc291cmNlIG9mIGVycm9yIGZvciBlcnJvciBm aWxlTmFtZSAvIGxpbmVOdW1iZXIuCisgKi8KKyNkZWZpbmUgRFVLX0VSUkNPREVfRkxBR19OT0JM QU1FX0ZJTEVMSU5FICAoMUwgPDwgMjQpCisKKy8qIEN1cnJlbnQgY29udmVudGlvbiBpcyB0byB1 c2UgZHVrX3NpemVfdCBmb3IgdmFsdWUgc3RhY2sgc2l6ZXMgYW5kIGdsb2JhbCBpbmRpY2VzLAor ICogYW5kIGR1a19pZHhfdCBmb3IgbG9jYWwgZnJhbWUgaW5kaWNlcy4KKyAqLworRFVLX0lOVEVS TkFMX0RFQ0wgdm9pZCBkdWtfdmFsc3RhY2tfZ3Jvd19jaGVja190aHJvdyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfc2l6ZV90IG1pbl9ieXRlcyk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90 IGR1a192YWxzdGFja19ncm93X2NoZWNrX25vdGhyb3coZHVrX2h0aHJlYWQgKnRociwgZHVrX3Np emVfdCBtaW5fYnl0ZXMpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfdmFsc3RhY2tfc2hy aW5rX2NoZWNrX25vdGhyb3coZHVrX2h0aHJlYWQgKnRociwgZHVrX2Jvb2xfdCBzbnVnKTsKKwor RFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfY29weV90dmFsc19pbmNyZWYoZHVrX2h0aHJlYWQg KnRociwgZHVrX3R2YWwgKnR2X2RzdCwgZHVrX3R2YWwgKnR2X3NyYywgZHVrX3NpemVfdCBjb3Vu dCk7CisKK0RVS19JTlRFUk5BTF9ERUNMIGR1a190dmFsICpkdWtfcmVzZXJ2ZV9nYXAoZHVrX2h0 aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeF9iYXNlLCBkdWtfaWR4X3QgY291bnQpOworCitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19zZXRfdG9wX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyLCBk dWtfaWR4X3QgaWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3NldF90b3BfYW5kX3dp cGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IHRvcCwgZHVrX2lkeF90IGlkeF93aXBlX3N0 YXJ0KTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZHVwXzAoZHVrX2h0aHJlYWQgKnRo cik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19kdXBfMShkdWtfaHRocmVhZCAqdGhyKTsK K0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2R1cF8yKGR1a19odGhyZWFkICp0aHIpOworLyog ZHVrX2R1cF9tMSgpIHdvdWxkIGJlIHNhbWUgYXMgZHVrX2R1cF90b3AoKSAqLworRFVLX0lOVEVS TkFMX0RFQ0wgdm9pZCBkdWtfZHVwX20yKGR1a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFM X0RFQ0wgdm9pZCBkdWtfZHVwX20zKGR1a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RF Q0wgdm9pZCBkdWtfZHVwX200KGR1a19odGhyZWFkICp0aHIpOworCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19yZW1vdmVfdW5zYWZlKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgp OworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVtb3ZlX20yKGR1a19odGhyZWFkICp0aHIp OworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVtb3ZlX24oZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IGlkeCwgZHVrX2lkeF90IGNvdW50KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX3JlbW92ZV9uX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtf aWR4X3QgY291bnQpOworCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX2dldF90eXBl X3R2YWwoZHVrX3R2YWwgKnR2KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a191aW50X3QgZHVrX2dl dF90eXBlX21hc2tfdHZhbChkdWtfdHZhbCAqdHYpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZF UkJPU0VfRVJST1JTKSAmJiBkZWZpbmVkKERVS19VU0VfUEFSQU5PSURfRVJST1JTKQorRFVLX0lO VEVSTkFMX0RFQ0wgY29uc3QgY2hhciAqZHVrX2dldF90eXBlX25hbWUoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IGlkeCk7CisjZW5kaWYKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19zbWFsbF91 aW50X3QgZHVrX2dldF9jbGFzc19udW1iZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlk eCk7CisKK0RVS19JTlRFUk5BTF9ERUNMIGR1a190dmFsICpkdWtfZ2V0X3R2YWwoZHVrX2h0aHJl YWQgKnRociwgZHVrX2lkeF90IGlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfdHZhbCAqZHVr X2dldF90dmFsX29yX3VudXNlZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsKK0RV S19JTlRFUk5BTF9ERUNMIGR1a190dmFsICpkdWtfcmVxdWlyZV90dmFsKGR1a19odGhyZWFkICp0 aHIsIGR1a19pZHhfdCBpZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF90dmFs KGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dik7CisKKy8qIFB1c2ggdGhlIGN1cnJlbnQg J3RoaXMnIGJpbmRpbmc7IHRocm93IFR5cGVFcnJvciBpZiBiaW5kaW5nIGlzIG5vdCBvYmplY3QK KyAqIGNvZXJjaWJsZSAoQ2hlY2tPYmplY3RDb2VyY2libGUpLgorICovCitEVUtfSU5URVJOQUxf REVDTCB2b2lkIGR1a19wdXNoX3RoaXNfY2hlY2tfb2JqZWN0X2NvZXJjaWJsZShkdWtfaHRocmVh ZCAqdGhyKTsKKworLyogZHVrX3B1c2hfdGhpcygpICsgQ2hlY2tPYmplY3RDb2VyY2libGUoKSAr IGR1a190b19vYmplY3QoKSAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hvYmplY3QgKmR1a19w dXNoX3RoaXNfY29lcmNpYmxlX3RvX29iamVjdChkdWtfaHRocmVhZCAqdGhyKTsKKworLyogZHVr X3B1c2hfdGhpcygpICsgQ2hlY2tPYmplY3RDb2VyY2libGUoKSArIGR1a190b19zdHJpbmcoKSAq LworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a19wdXNoX3RoaXNfY29lcmNpYmxl X3RvX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hz dHJpbmcgKmR1a19wdXNoX3VpbnRfdG9faHN0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWlu dF90IGkpOworCisvKiBHZXQgYSBib3Jyb3dlZCBkdWtfdHZhbCBwb2ludGVyIHRvIHRoZSBjdXJy ZW50ICd0aGlzJyBiaW5kaW5nLiAgQ2FsbGVyIG11c3QKKyAqIG1ha2Ugc3VyZSB0aGVyZSdzIGFu IGFjdGl2ZSBjYWxsc3RhY2sgZW50cnkuICBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHBvaW50ZXIK KyAqIGlzIHVuc3RhYmxlIHdpdGggcmVnYXJkcyB0byBzaWRlIGVmZmVjdHMuCisgKi8KK0RVS19J TlRFUk5BTF9ERUNMIGR1a190dmFsICpkdWtfZ2V0X2JvcnJvd2VkX3RoaXNfdHZhbChkdWtfaHRo cmVhZCAqdGhyKTsKKworLyogWFhYOiBhZGQgZmFzdGludCBzdXBwb3J0PyAqLworI2RlZmluZSBk dWtfcHVzaF91NjQodGhyLHZhbCkgXAorCWR1a19wdXNoX251bWJlcigodGhyKSwgKGR1a19kb3Vi bGVfdCkgKHZhbCkpCisjZGVmaW5lIGR1a19wdXNoX2k2NCh0aHIsdmFsKSBcCisJZHVrX3B1c2hf bnVtYmVyKCh0aHIpLCAoZHVrX2RvdWJsZV90KSAodmFsKSkKKworLyogZHVrX3B1c2hfKHUpaW50 KCkgaXMgZ3VhcmFudGVlZCB0byBzdXBwb3J0IGF0IGxlYXN0ICh1bilzaWduZWQgMzItYml0IHJh bmdlICovCisjZGVmaW5lIGR1a19wdXNoX3UzMih0aHIsdmFsKSBcCisJZHVrX3B1c2hfdWludCgo dGhyKSwgKGR1a191aW50X3QpICh2YWwpKQorI2RlZmluZSBkdWtfcHVzaF9pMzIodGhyLHZhbCkg XAorCWR1a19wdXNoX2ludCgodGhyKSwgKGR1a19pbnRfdCkgKHZhbCkpCisKKy8qIHNvbWV0aW1l cyBzdGFjayBhbmQgYXJyYXkgaW5kaWNlcyBuZWVkIHRvIGdvIG9uIHRoZSBzdGFjayAqLworI2Rl ZmluZSBkdWtfcHVzaF9pZHgodGhyLHZhbCkgXAorCWR1a19wdXNoX2ludCgodGhyKSwgKGR1a19p bnRfdCkgKHZhbCkpCisjZGVmaW5lIGR1a19wdXNoX3VhcnJpZHgodGhyLHZhbCkgXAorCWR1a19w dXNoX3VpbnQoKHRociksIChkdWtfdWludF90KSAodmFsKSkKKyNkZWZpbmUgZHVrX3B1c2hfc2l6 ZV90KHRocix2YWwpIFwKKwlkdWtfcHVzaF91aW50KCh0aHIpLCAoZHVrX3VpbnRfdCkgKHZhbCkp ICAvKiBYWFg6IGFzc3VtZWQgdG8gZml0IGZvciBub3cgKi8KKworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX2Jvb2xfdCBkdWtfaXNfc3RyaW5nX25vdHN5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3QgaWR4KTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfY2FsbGFi bGVfdHZhbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpOworCitEVUtfSU5URVJOQUxf REVDTCBkdWtfaHN0cmluZyAqZHVrX2dldF9oc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a19nZXRfaHN0cmlu Z19ub3RzeW1ib2woZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCk7CitEVUtfSU5URVJO QUxfREVDTCBjb25zdCBjaGFyICpkdWtfZ2V0X3N0cmluZ19ub3RzeW1ib2woZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IGlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVr X2dldF9ob2JqZWN0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX2hidWZmZXIgKmR1a19nZXRfaGJ1ZmZlcihkdWtfaHRocmVhZCAqdGhyLCBk dWtfaWR4X3QgaWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19odGhyZWFkICpkdWtfZ2V0X2h0 aHJlYWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCk7CitEVUtfSU5URVJOQUxfREVD TCBkdWtfaGNvbXBmdW5jICpkdWtfZ2V0X2hjb21wZnVuYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3QgaWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19obmF0ZnVuYyAqZHVrX2dldF9obmF0 ZnVuYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsKKworRFVLX0lOVEVSTkFMX0RF Q0wgdm9pZCAqZHVrX2dldF9idWZmZXJfZGF0YV9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUsIHZvaWQgKmRlZl9wdHIsIGR1a19zaXplX3Qg ZGVmX2xlbiwgZHVrX2Jvb2xfdCB0aHJvd19mbGFnLCBkdWtfYm9vbF90ICpvdXRfaXNidWZmZXIp OworCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVrX2dldF9ob2JqZWN0X3dpdGhf Y2xhc3MoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX3NtYWxsX3VpbnRfdCBj bGFzc251bSk7CisKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ob2JqZWN0ICpkdWtfZ2V0X2hvYmpl Y3RfcHJvbW90ZV9tYXNrKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a191aW50 X3QgdHlwZV9tYXNrKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ob2JqZWN0ICpkdWtfcmVxdWly ZV9ob2JqZWN0X3Byb21vdGVfbWFzayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBk dWtfdWludF90IHR5cGVfbWFzayk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVr X3JlcXVpcmVfaG9iamVjdF9hY2NlcHRfbWFzayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg aWR4LCBkdWtfdWludF90IHR5cGVfbWFzayk7CisjZGVmaW5lIGR1a19yZXF1aXJlX2hvYmplY3Rf cHJvbW90ZV9sZnVuYyh0aHIsaWR4KSBcCisJZHVrX3JlcXVpcmVfaG9iamVjdF9wcm9tb3RlX21h c2soKHRociksIChpZHgpLCBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQykKKyNkZWZpbmUgZHVrX2dl dF9ob2JqZWN0X3Byb21vdGVfbGZ1bmModGhyLGlkeCkgXAorCWR1a19nZXRfaG9iamVjdF9wcm9t b3RlX21hc2soKHRociksIChpZHgpLCBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQykKKworI2lmIDAg IC8qdW51c2VkKi8KK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgKmR1a19nZXRfdm9pZHB0cihkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsKKyNlbmRpZgorCitEVUtfSU5URVJOQUxfREVD TCBkdWtfaHN0cmluZyAqZHVrX2tub3duX2hzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVrX2tub3duX2hvYmpl Y3QoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfaGJ1ZmZlciAqZHVrX2tub3duX2hidWZmZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90 IGlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaGNvbXBmdW5jICpkdWtfa25vd25faGNvbXBm dW5jKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX2huYXRmdW5jICpkdWtfa25vd25faG5hdGZ1bmMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCk7CisKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19kb3VibGVfdCBkdWtfdG9fbnVtYmVy X3R2YWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2KTsKKworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX2hzdHJpbmcgKmR1a190b19oc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhf dCBpZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a190b19oc3RyaW5nX20x KGR1a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a190 b19oc3RyaW5nX2FjY2VwdHN5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsK KworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hvYmplY3QgKmR1a190b19ob2JqZWN0KGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpOworCitEVUtfSU5URVJOQUxfREVDTCBkdWtfZG91Ymxl X3QgZHVrX3RvX251bWJlcl9tMShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19kb3VibGVfdCBkdWtfdG9fbnVtYmVyX20yKGR1a19odGhyZWFkICp0aHIpOworCitEVUtf SU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a190b19ib29sZWFuX3RvcF9wb3AoZHVrX2h0aHJl YWQgKnRocik7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkgIC8qIG9u bHkgbmVlZGVkIGJ5IGRlYnVnZ2VyIGZvciBub3cgKi8KK0RVS19JTlRFUk5BTF9ERUNMIGR1a19o c3RyaW5nICpkdWtfc2FmZV90b19oc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19wdXNoX2NsYXNzX3N0cmlu Z190dmFsKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0diwgZHVrX2Jvb2xfdCBhdm9pZF9z aWRlX2VmZmVjdHMpOworCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX3RvX2ludF9j bGFtcGVkX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfaW50X3QgbWlu dmFsLCBkdWtfaW50X3QgbWF4dmFsLCBkdWtfYm9vbF90ICpvdXRfY2xhbXBlZCk7ICAvKiBvdXRf Y2xhbXBlZD1OVUxMLCBSYW5nZUVycm9yIGlmIG91dHNpZGUgcmFuZ2UgKi8KK0RVS19JTlRFUk5B TF9ERUNMIGR1a19pbnRfdCBkdWtfdG9faW50X2NsYW1wZWQoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGlkeCwgZHVrX2ludF90IG1pbnZhbCwgZHVrX2ludF90IG1heHZhbCk7CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX3RvX2ludF9jaGVja19yYW5nZShkdWtfaHRocmVhZCAq dGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfaW50X3QgbWludmFsLCBkdWtfaW50X3QgbWF4dmFsKTsK KyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUxf REVDTCBkdWtfdWludDhfdCBkdWtfdG9fdWludDhjbGFtcGVkKGR1a19odGhyZWFkICp0aHIsIGR1 a19pZHhfdCBpZHgpOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaHN0cmluZyAqZHVr X3RvX3Byb3BlcnR5X2tleV9oc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgp OworCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaHN0cmluZyAqZHVrX3JlcXVpcmVfaHN0cmluZyhk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19o c3RyaW5nICpkdWtfcmVxdWlyZV9oc3RyaW5nX25vdHN5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBk dWtfaWR4X3QgaWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGNvbnN0IGNoYXIgKmR1a19yZXF1aXJl X2xzdHJpbmdfbm90c3ltYm9sKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19z aXplX3QgKm91dF9sZW4pOworRFVLX0lOVEVSTkFMX0RFQ0wgY29uc3QgY2hhciAqZHVrX3JlcXVp cmVfc3RyaW5nX25vdHN5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsKK0RV S19JTlRFUk5BTF9ERUNMIGR1a19ob2JqZWN0ICpkdWtfcmVxdWlyZV9ob2JqZWN0KGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hidWZmZXIg KmR1a19yZXF1aXJlX2hidWZmZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfaHRocmVhZCAqZHVrX3JlcXVpcmVfaHRocmVhZChkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19oY29tcGZ1 bmMgKmR1a19yZXF1aXJlX2hjb21wZnVuYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4 KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19obmF0ZnVuYyAqZHVrX3JlcXVpcmVfaG5hdGZ1bmMo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCk7CisKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19ob2JqZWN0ICpkdWtfcmVxdWlyZV9ob2JqZWN0X3dpdGhfY2xhc3MoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IGlkeCwgZHVrX3NtYWxsX3VpbnRfdCBjbGFzc251bSk7CisKK0RVS19JTlRF Uk5BTF9ERUNMIHZvaWQgZHVrX3B1c2hfaHN0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaHN0 cmluZyAqaCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19wdXNoX2hzdHJpbmdfc3RyaWR4 KGR1a19odGhyZWFkICp0aHIsIGR1a19zbWFsbF91aW50X3Qgc3RyaWR4KTsKK0RVS19JTlRFUk5B TF9ERUNMIHZvaWQgZHVrX3B1c2hfaHN0cmluZ19lbXB0eShkdWtfaHRocmVhZCAqdGhyKTsKK0RV S19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3B1c2hfaG9iamVjdChkdWtfaHRocmVhZCAqdGhyLCBk dWtfaG9iamVjdCAqaCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19wdXNoX2hidWZmZXIo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXIgKmgpOworI2RlZmluZSBkdWtfcHVzaF9odGhy ZWFkKHRocixoKSBcCisJZHVrX3B1c2hfaG9iamVjdCgodGhyKSwgKGR1a19ob2JqZWN0ICopICho KSkKKyNkZWZpbmUgZHVrX3B1c2hfaG5hdGZ1bmModGhyLGgpIFwKKwlkdWtfcHVzaF9ob2JqZWN0 KCh0aHIpLCAoZHVrX2hvYmplY3QgKikgKGgpKQorRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtf cHVzaF9ob2JqZWN0X2JpZHgoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX2ludF90IGJ1aWx0 aW5faWR4KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ob2JqZWN0ICpkdWtfcHVzaF9vYmplY3Rf aGVscGVyKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgaG9iamVjdF9mbGFnc19hbmRfY2xh c3MsIGR1a19zbWFsbF9pbnRfdCBwcm90b3R5cGVfYmlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfaG9iamVjdCAqZHVrX3B1c2hfb2JqZWN0X2hlbHBlcl9wcm90byhkdWtfaHRocmVhZCAqdGhy LCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3NfYW5kX2NsYXNzLCBkdWtfaG9iamVjdCAqcHJvdG8p OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hjb21wZnVuYyAqZHVrX3B1c2hfaGNvbXBmdW5jKGR1 a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hib3VuZGZ1bmMgKmR1a19w dXNoX2hib3VuZGZ1bmMoZHVrX2h0aHJlYWQgKnRocik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lk IGR1a19wdXNoX2NfZnVuY3Rpb25fYnVpbHRpbihkdWtfaHRocmVhZCAqdGhyLCBkdWtfY19mdW5j dGlvbiBmdW5jLCBkdWtfaW50X3QgbmFyZ3MpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtf cHVzaF9jX2Z1bmN0aW9uX2J1aWx0aW5fbm9jb25zdHJ1Y3QoZHVrX2h0aHJlYWQgKnRociwgZHVr X2NfZnVuY3Rpb24gZnVuYywgZHVrX2ludF90IG5hcmdzKTsKKworLyogWFhYOiBkdWtfcHVzaF9o YXJyYXkoKSBhbmQgZHVrX3B1c2hfaGNvbXBmdW5jKCkgYXJlIGluY29uc2lzdGVudCB3aXRoCisg KiBkdWtfcHVzaF9ob2JqZWN0KCkgZXRjIHdoaWNoIGRvbid0IGNyZWF0ZSBhIG5ldyB2YWx1ZS4K KyAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hhcnJheSAqZHVrX3B1c2hfaGFycmF5KGR1a19o dGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hhcnJheSAqZHVrX3B1c2hfaGFy cmF5X3dpdGhfc2l6ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludDMyX3Qgc2l6ZSk7CitEVUtf SU5URVJOQUxfREVDTCBkdWtfdHZhbCAqZHVrX3B1c2hfaGFycmF5X3dpdGhfc2l6ZV9vdXRwdHIo ZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQzMl90IHNpemUpOworCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19wdXNoX3N0cmluZ19mdW5jcHRyKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50 OF90ICpwdHIsIGR1a19zaXplX3Qgc3opOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVz aF9saWdodGZ1bmNfbmFtZV9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2NfZnVuY3Rpb24gZnVu YywgZHVrX3NtYWxsX3VpbnRfdCBsZl9mbGFncyk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1 a19wdXNoX2xpZ2h0ZnVuY19uYW1lKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dik7CitE VUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19wdXNoX2xpZ2h0ZnVuY190b3N0cmluZyhkdWtfaHRo cmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpOworI2lmIDAgIC8qIG5vdCB1c2VkIHlldCAqLworRFVL X0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9obmF0ZnVuY19uYW1lKGR1a19odGhyZWFkICp0 aHIsIGR1a19obmF0ZnVuYyAqaCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVS T0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaGJ1Zm9iaiAqZHVrX3B1c2hf YnVmb2JqX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3NfYW5k X2NsYXNzLCBkdWtfc21hbGxfaW50X3QgcHJvdG90eXBlX2JpZHgpOworI2VuZGlmCisKK0RVS19J TlRFUk5BTF9ERUNMIHZvaWQgKmR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8oZHVrX2h0aHJl YWQgKnRociwgZHVrX3NpemVfdCBsZW4pOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX3B1 c2hfZml4ZWRfYnVmZmVyX3plcm8oZHVrX2h0aHJlYWQgKnRociwgZHVrX3NpemVfdCBsZW4pOwor CitEVUtfSU5URVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfcHVzaF9zdHJpbmdfcmVhZGFibGUo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCk7CitEVUtfSU5URVJOQUxfREVDTCBjb25z dCBjaGFyICpkdWtfcHVzaF9zdHJpbmdfdHZhbF9yZWFkYWJsZShkdWtfaHRocmVhZCAqdGhyLCBk dWtfdHZhbCAqdHYpOworRFVLX0lOVEVSTkFMX0RFQ0wgY29uc3QgY2hhciAqZHVrX3B1c2hfc3Ry aW5nX3R2YWxfcmVhZGFibGVfZXJyb3IoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2KTsK KworLyogVGhlIGR1a194eHhfcHJvcF9zdHJpZHhfc2hvcnQoKSB2YXJpYW50cyBleHBlY3QgdGhl aXIgYXJndW1lbnRzIHRvIGJlIHNob3J0CisgKiBlbm91Z2ggdG8gYmUgcGFja2VkIGludG8gYSBz aW5nbGUgMzItYml0IGludGVnZXIgYXJndW1lbnQuICBBcmd1bWVudCBsaW1pdHMKKyAqIHZhcnkg cGVyIGNhbGw7IHR5cGljYWxseSAxNiBiaXRzIGFyZSBhc3NpZ25lZCB0byB0aGUgc2lnbmVkIHZh bHVlIHN0YWNrIGluZGV4CisgKiBhbmQgdGhlIHN0cmlkeC4gIEluIHByYWN0aWNlIHRoZXNlIHdv cmsgd2VsbCBmb3IgZm9vdHByaW50IHdpdGggY29uc3RhbnQKKyAqIGFyZ3VtZW50cyBhbmQgc3Vj aCBjYWxsIHNpdGVzIGFyZSBhbHNvIGVhc2llc3QgdG8gdmVyaWZ5IHRvIGJlIGNvcnJlY3QuCisg Ki8KKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3Bfc3RyaWR4KGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfc21hbGxfdWludF90IHN0cmlk eCk7ICAgICAvKiBbXSAtPiBbdmFsXSAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBk dWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0X3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90 IHBhY2tlZF9hcmdzKTsKKyNkZWZpbmUgZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsb2Jq X2lkeCxzdHJpZHgpIFwKKwkoRFVLX0FTU0VSVF9FWFBSKChkdWtfaW50X3QpIChvYmpfaWR4KSA+ PSAtMHg4MDAwTCAmJiAoZHVrX2ludF90KSAob2JqX2lkeCkgPD0gMHg3ZmZmTCksIFwKKwkgRFVL X0FTU0VSVF9FWFBSKChkdWtfaW50X3QpIChzdHJpZHgpID49IDAgJiYgKGR1a19pbnRfdCkgKHN0 cmlkeCkgPD0gMHhmZmZmTCksIFwKKwkgZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydF9yYXcoKHRo ciksICgoKGR1a191aW50X3QpIChvYmpfaWR4KSkgPDwgMTYpICsgKChkdWtfdWludF90KSAoc3Ry aWR4KSkpKQorRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3Bfc3RyaWR4 X2Jvb2xlYW4oZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1a19zbWFsbF91 aW50X3Qgc3RyaWR4LCBkdWtfYm9vbF90ICpvdXRfaGFzX3Byb3ApOyAgLyogW10gLT4gW10gKi8K KworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfcHV0X3Byb3Bfc3RyaWR4KGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfc21hbGxfdWludF90IHN0cmlkeCk7 ICAgICAvKiBbdmFsXSAtPiBbXSAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf cHV0X3Byb3Bfc3RyaWR4X3Nob3J0X3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IHBh Y2tlZF9hcmdzKTsKKyNkZWZpbmUgZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsb2JqX2lk eCxzdHJpZHgpIFwKKwkoRFVLX0FTU0VSVF9FWFBSKChkdWtfaW50X3QpIChvYmpfaWR4KSA+PSAt MHg4MDAwTCAmJiAoZHVrX2ludF90KSAob2JqX2lkeCkgPD0gMHg3ZmZmTCksIFwKKwkgRFVLX0FT U0VSVF9FWFBSKChkdWtfaW50X3QpIChzdHJpZHgpID49IDAgJiYgKGR1a19pbnRfdCkgKHN0cmlk eCkgPD0gMHhmZmZmTCksIFwKKwkgZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydF9yYXcoKHRociks ICgoKGR1a191aW50X3QpIChvYmpfaWR4KSkgPDwgMTYpICsgKChkdWtfdWludF90KSAoc3RyaWR4 KSkpKQorCitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kZWxfcHJvcF9zdHJpZHgo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1a19zbWFsbF91aW50X3Qgc3Ry aWR4KTsgICAgIC8qIFtdIC0+IFtdICovCisjaWYgMCAgLyogVG9vIGZldyBjYWxsIHNpdGVzIHRv IGJlIHVzZWZ1bC4gKi8KK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2RlbF9wcm9w X3N0cmlkeF9zaG9ydF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBwYWNrZWRfYXJn cyk7CisjZGVmaW5lIGR1a19kZWxfcHJvcF9zdHJpZHhfc2hvcnQodGhyLG9ial9pZHgsc3RyaWR4 KSBcCisJKERVS19BU1NFUlRfRVhQUigob2JqX2lkeCkgPj0gLTB4ODAwMEwgJiYgKG9ial9pZHgp IDw9IDB4N2ZmZkwpLCBcCisJIERVS19BU1NFUlRfRVhQUigoc3RyaWR4KSA+PSAwICYmIChzdHJp ZHgpIDw9IDB4ZmZmZkwpLCBcCisJIGR1a19kZWxfcHJvcF9zdHJpZHhfc2hvcnRfcmF3KCh0aHIp LCAoKChkdWtfdWludF90KSAob2JqX2lkeCkpIDw8IDE2KSArICgoZHVrX3VpbnRfdCkgKHN0cmlk eCkpKSkKKyNlbmRpZgorI2RlZmluZSBkdWtfZGVsX3Byb3Bfc3RyaWR4X3Nob3J0KHRocixvYmpf aWR4LHN0cmlkeCkgXAorCWR1a19kZWxfcHJvcF9zdHJpZHgoKHRociksIChvYmpfaWR4KSwgKHN0 cmlkeCkpCisKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hhc19wcm9wX3N0cmlk eChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX3NtYWxsX3VpbnRfdCBz dHJpZHgpOyAgICAgLyogW10gLT4gW10gKi8KKyNpZiAwICAvKiBUb28gZmV3IGNhbGwgc2l0ZXMg dG8gYmUgdXNlZnVsLiAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaGFzX3By b3Bfc3RyaWR4X3Nob3J0X3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IHBhY2tlZF9h cmdzKTsKKyNkZWZpbmUgZHVrX2hhc19wcm9wX3N0cmlkeF9zaG9ydCh0aHIsb2JqX2lkeCxzdHJp ZHgpIFwKKwkoRFVLX0FTU0VSVF9FWFBSKChvYmpfaWR4KSA+PSAtMHg4MDAwTCAmJiAob2JqX2lk eCkgPD0gMHg3ZmZmTCksIFwKKwkgRFVLX0FTU0VSVF9FWFBSKChzdHJpZHgpID49IDAgJiYgKHN0 cmlkeCkgPD0gMHhmZmZmTCksIFwKKwkgZHVrX2hhc19wcm9wX3N0cmlkeF9zaG9ydF9yYXcoKHRo ciksICgoKGR1a191aW50X3QpIChvYmpfaWR4KSkgPDwgMTYpICsgKChkdWtfdWludF90KSAoc3Ry aWR4KSkpKQorI2VuZGlmCisjZGVmaW5lIGR1a19oYXNfcHJvcF9zdHJpZHhfc2hvcnQodGhyLG9i al9pZHgsc3RyaWR4KSBcCisJZHVrX2hhc19wcm9wX3N0cmlkeCgodGhyKSwgKG9ial9pZHgpLCAo c3RyaWR4KSkKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfeGRlZl9wcm9wKGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfc21hbGxfdWludF90IGRlc2NfZmxhZ3Mp OyAgLyogW2tleSB2YWxdIC0+IFtdICovCisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3hk ZWZfcHJvcF9pbmRleChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX3Vh cnJpZHhfdCBhcnJfaWR4LCBkdWtfc21hbGxfdWludF90IGRlc2NfZmxhZ3MpOyAgLyogW3ZhbF0g LT4gW10gKi8KKworLyogWFhYOiBCZWNhdXNlIHN0cmlkeCBhbmQgZGVzY19mbGFncyBoYXZlIGEg bGltaXRlZCByYW5nZSwgdGhpcyBjYWxsIGNvdWxkCisgKiBhbHdheXMgcGFjayBzdHJpZHggYW5k IGRlc2NfZmxhZ3MgaW50byBhIHNpbmdsZSBhcmd1bWVudC4KKyAqLworRFVLX0lOVEVSTkFMX0RF Q0wgdm9pZCBkdWtfeGRlZl9wcm9wX3N0cmlkeChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg b2JqX2lkeCwgZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHgsIGR1a19zbWFsbF91aW50X3QgZGVzY19m bGFncyk7ICAvKiBbdmFsXSAtPiBbXSAqLworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfeGRl Zl9wcm9wX3N0cmlkeF9zaG9ydF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBwYWNr ZWRfYXJncyk7CisjZGVmaW5lIGR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRocixvYmpfaWR4 LHN0cmlkeCxkZXNjX2ZsYWdzKSBcCisJKERVS19BU1NFUlRfRVhQUigoZHVrX2ludF90KSAob2Jq X2lkeCkgPj0gLTB4ODBMICYmIChkdWtfaW50X3QpIChvYmpfaWR4KSA8PSAweDdmTCksIFwKKwkg RFVLX0FTU0VSVF9FWFBSKChkdWtfaW50X3QpIChzdHJpZHgpID49IDAgJiYgKGR1a19pbnRfdCkg KHN0cmlkeCkgPD0gMHhmZmZmTCksIFwKKwkgRFVLX0FTU0VSVF9FWFBSKChkdWtfaW50X3QpIChk ZXNjX2ZsYWdzKSA+PSAwICYmIChkdWtfaW50X3QpIChkZXNjX2ZsYWdzKSA8PSAweGZmTCksIFwK KwkgZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnRfcmF3KCh0aHIpLCAoKChkdWtfdWludF90KSAo b2JqX2lkeCkpIDw8IDI0KSArICgoKGR1a191aW50X3QpIChzdHJpZHgpKSA8PCA4KSArIChkdWtf dWludF90KSAoZGVzY19mbGFncykpKQorCisjZGVmaW5lIGR1a194ZGVmX3Byb3Bfd2VjKHRocixv YmpfaWR4KSBcCisJZHVrX3hkZWZfcHJvcCgodGhyKSwgKG9ial9pZHgpLCBEVUtfUFJPUERFU0Nf RkxBR1NfV0VDKQorI2RlZmluZSBkdWtfeGRlZl9wcm9wX2luZGV4X3dlYyh0aHIsb2JqX2lkeCxh cnJfaWR4KSBcCisJZHVrX3hkZWZfcHJvcF9pbmRleCgodGhyKSwgKG9ial9pZHgpLCAoYXJyX2lk eCksIERVS19QUk9QREVTQ19GTEFHU19XRUMpCisjZGVmaW5lIGR1a194ZGVmX3Byb3Bfc3RyaWR4 X3dlYyh0aHIsb2JqX2lkeCxzdHJpZHgpIFwKKwlkdWtfeGRlZl9wcm9wX3N0cmlkeCgodGhyKSwg KG9ial9pZHgpLCAoc3RyaWR4KSwgRFVLX1BST1BERVNDX0ZMQUdTX1dFQykKKyNkZWZpbmUgZHVr X3hkZWZfcHJvcF9zdHJpZHhfc2hvcnRfd2VjKHRocixvYmpfaWR4LHN0cmlkeCkgXAorCWR1a194 ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KCh0aHIpLCAob2JqX2lkeCksIChzdHJpZHgpLCBEVUtfUFJP UERFU0NfRkxBR1NfV0VDKQorCisjaWYgMCAgLyp1bnVzZWQqLworRFVLX0lOVEVSTkFMX0RFQ0wg dm9pZCBkdWtfeGRlZl9wcm9wX3N0cmlkeF9idWlsdGluKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBvYmpfaWR4LCBkdWtfc21hbGxfdWludF90IHN0cmlkeCwgZHVrX3NtYWxsX2ludF90IGJ1 aWx0aW5faWR4LCBkdWtfc21hbGxfdWludF90IGRlc2NfZmxhZ3MpOyAgLyogW10gLT4gW10gKi8K KyNlbmRpZgorCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a194ZGVmX3Byb3Bfc3RyaWR4X3Ro cm93ZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1a19zbWFsbF91aW50 X3Qgc3RyaWR4KTsgIC8qIFtdIC0+IFtdICovCisKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29s X3QgZHVrX2dldF9tZXRob2Rfc3RyaWR4KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgs IGR1a19zbWFsbF91aW50X3Qgc3RyaWR4KTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtf cGFjayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgY291bnQpOworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX2lkeF90IGR1a191bnBhY2tfYXJyYXlfbGlrZShkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3QgaWR4KTsKKyNpZiAwCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a191bnBhY2soZHVr X2h0aHJlYWQgKnRocik7CisjZW5kaWYKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVx dWlyZV9jb25zdHJ1Y3Rvcl9jYWxsKGR1a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RF Q0wgdm9pZCBkdWtfcmVxdWlyZV9jb25zdHJ1Y3RhYmxlKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9zeW1ib2xfZGVzY3Jp cHRpdmVfc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpoKTsKKworRFVLX0lO VEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVzb2x2ZV9ub25ib3VuZF9mdW5jdGlvbihkdWtfaHRocmVh ZCAqdGhyKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2lkeF90IGR1a19nZXRfdG9wX3JlcXVp cmVfbWluKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBtaW5fdG9wKTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19pZHhfdCBkdWtfZ2V0X3RvcF9pbmRleF91bnNhZmUoZHVrX2h0aHJlYWQgKnRo cik7CisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3BvcF9uX3Vuc2FmZShkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3QgY291bnQpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcG9w X3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3Bv cF8yX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVr X3BvcF8zX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX3BvcF9uX25vZGVjcmVmX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgY291 bnQpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcG9wX25vZGVjcmVmX3Vuc2FmZShkdWtf aHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3BvcF8yX25vZGVjcmVm X3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX3Bv cF8zX25vZGVjcmVmX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNM IHZvaWQgZHVrX3BvcF91bmRlZmluZWQoZHVrX2h0aHJlYWQgKnRocik7CisKK0RVS19JTlRFUk5B TF9ERUNMIHZvaWQgZHVrX2NvbXBhY3RfbTEoZHVrX2h0aHJlYWQgKnRocik7CisKK0RVS19JTlRF Uk5BTF9ERUNMIHZvaWQgZHVrX3NlYWxfZnJlZXplX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3Qgb2JqX2lkeCwgZHVrX2Jvb2xfdCBpc19mcmVlemUpOworCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19pbnNlcnRfdW5kZWZpbmVkKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaW5zZXJ0X3VuZGVmaW5lZF9uKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19pZHhfdCBjb3VudCk7CisKK0RVS19JTlRF Uk5BTF9ERUNMIHZvaWQgZHVrX2NvbmNhdF8yKGR1a19odGhyZWFkICp0aHIpOworCitEVUtfSU5U RVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX3BjYWxsX21ldGhvZF9mbGFncyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfaWR4X3QgbmFyZ3MsIGR1a19zbWFsbF91aW50X3QgY2FsbF9mbGFncyk7CisKKyNp ZiBkZWZpbmVkKERVS19VU0VfU1lNQk9MX0JVSUxUSU4pCitEVUtfSU5URVJOQUxfREVDTCB2b2lk IGR1a190b19wcmltaXRpdmVfb3JkaW5hcnkoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlk eCwgZHVrX2ludF90IGhpbnQpOworI2VuZGlmCisKKy8qIFJhdyBpbnRlcm5hbCB2YWxzdGFjayBh Y2Nlc3MgbWFjcm9zOiBhY2Nlc3MgaXMgdW5zYWZlIHNvIGNhbGwgc2l0ZQorICogbXVzdCBoYXZl IGEgZ3VhcmFudGVlIHRoYXQgdGhlIGluZGV4IGlzIHZhbGlkLiAgV2hlbiB0aGF0IGlzIHRoZSBj YXNlLAorICogdXNpbmcgdGhlc2UgbWFjcm8gcmVzdWx0cyBpbiBmYXN0ZXIgYW5kIHNtYWxsZXIg Y29kZSB0aGFuIGR1a19nZXRfdHZhbCgpLgorICogQm90aCAnY3R4JyBhbmQgJ2lkeCcgYXJlIGV2 YWx1dGVkIG11bHRpcGxlIHRpbWVzLCBidXQgb25seSBmb3IgYXNzZXJ0cy4KKyAqLworI2RlZmlu ZSBEVUtfQVNTRVJUX1ZBTElEX05FR0lEWCh0aHIsaWR4KSBcCisJKERVS19BU1NFUlRfRVhQUigo ZHVrX2ludF90KSAoaWR4KSA8IDApLCBEVUtfQVNTRVJUX0VYUFIoZHVrX2lzX3ZhbGlkX2luZGV4 KCh0aHIpLCAoaWR4KSkpKQorI2RlZmluZSBEVUtfQVNTRVJUX1ZBTElEX1BPU0lEWCh0aHIsaWR4 KSBcCisJKERVS19BU1NFUlRfRVhQUigoZHVrX2ludF90KSAoaWR4KSA+PSAwKSwgRFVLX0FTU0VS VF9FWFBSKGR1a19pc192YWxpZF9pbmRleCgodGhyKSwgKGlkeCkpKSkKKyNkZWZpbmUgRFVLX0dF VF9UVkFMX05FR0lEWCh0aHIsaWR4KSBcCisJKERVS19BU1NFUlRfVkFMSURfTkVHSURYKCh0aHIp LChpZHgpKSwgKChkdWtfaHRocmVhZCAqKSAodGhyKSktPnZhbHN0YWNrX3RvcCArIChpZHgpKQor I2RlZmluZSBEVUtfR0VUX1RWQUxfUE9TSURYKHRocixpZHgpIFwKKwkoRFVLX0FTU0VSVF9WQUxJ RF9QT1NJRFgoKHRociksKGlkeCkpLCAoKGR1a19odGhyZWFkICopICh0aHIpKS0+dmFsc3RhY2tf Ym90dG9tICsgKGlkeCkpCisjZGVmaW5lIERVS19HRVRfSE9CSkVDVF9ORUdJRFgodGhyLGlkeCkg XAorCShEVUtfQVNTRVJUX1ZBTElEX05FR0lEWCgodGhyKSwoaWR4KSksIERVS19UVkFMX0dFVF9P QkpFQ1QoKChkdWtfaHRocmVhZCAqKSAodGhyKSktPnZhbHN0YWNrX3RvcCArIChpZHgpKSkKKyNk ZWZpbmUgRFVLX0dFVF9IT0JKRUNUX1BPU0lEWCh0aHIsaWR4KSBcCisJKERVS19BU1NFUlRfVkFM SURfUE9TSURYKCh0aHIpLChpZHgpKSwgRFVLX1RWQUxfR0VUX09CSkVDVCgoKGR1a19odGhyZWFk ICopICh0aHIpKS0+dmFsc3RhY2tfYm90dG9tICsgKGlkeCkpKQorCisjZGVmaW5lIERVS19HRVRf VEhJU19UVkFMX1BUUih0aHIpIFwKKwkoRFVLX0FTU0VSVF9FWFBSKCh0aHIpLT52YWxzdGFja19i b3R0b20gPiAodGhyKS0+dmFsc3RhY2spLCBcCisJICh0aHIpLT52YWxzdGFja19ib3R0b20gLSAx KQorCitEVUtfSU5URVJOQUxfREVDTCBkdWtfZG91YmxlX3QgZHVrX3RpbWVfZ2V0X2VjbWFzY3Jp cHRfdGltZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19kb3VibGVf dCBkdWtfdGltZV9nZXRfZWNtYXNjcmlwdF90aW1lX25vZnJhYyhkdWtfaHRocmVhZCAqdGhyKTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a19kb3VibGVfdCBkdWtfdGltZV9nZXRfbW9ub3RvbmljX3Rp bWUoZHVrX2h0aHJlYWQgKnRocik7CisKKyNlbmRpZiAgLyogRFVLX0FQSV9JTlRFUk5BTF9IX0lO Q0xVREVEICovCisvKiAjaW5jbHVkZSBkdWtfaHN0cmluZy5oICovCisvKgorICogIEhlYXAgc3Ry aW5nIHJlcHJlc2VudGF0aW9uLgorICoKKyAqICBTdHJpbmdzIGFyZSBieXRlIHNlcXVlbmNlcyBv cmRpbmFyaWx5IHN0b3JlZCBpbiBleHRlbmRlZCBVVEYtOCBmb3JtYXQsCisgKiAgYWxsb3dpbmcg dmFsdWVzIGxhcmdlciB0aGFuIHRoZSBvZmZpY2lhbCBVVEYtOCByYW5nZSAodXNlZCBpbnRlcm5h bGx5KQorICogIGFuZCBhbHNvIGFsbG93aW5nIFVURi04IGVuY29kaW5nIG9mIHN1cnJvZ2F0ZSBw YWlycyAoQ0VTVS04IGZvcm1hdCkuCisgKiAgU3RyaW5ncyBtYXkgYWxzbyBiZSBpbnZhbGlkIFVU Ri04IGFsdG9nZXRoZXIgd2hpY2ggaXMgdGhlIGNhc2UgZS5nLiB3aXRoCisgKiAgc3RyaW5ncyB1 c2VkIGFzIGludGVybmFsIHByb3BlcnR5IG5hbWVzIGFuZCByYXcgYnVmZmVycyBjb252ZXJ0ZWQg dG8KKyAqICBzdHJpbmdzLiAgSW4gc3VjaCBjYXNlcyB0aGUgJ2NsZW4nIGZpZWxkIGNvbnRhaW5z IGFuIGluYWNjdXJhdGUgdmFsdWUuCisgKgorICogIEVDTUFTY3JpcHQgcmVxdWlyZXMgc3VwcG9y dCBmb3IgMzItYml0IGxvbmcgc3RyaW5ncy4gIEhvd2V2ZXIsIHNpbmNlIGVhY2gKKyAqICAxNi1i aXQgY29kZXBvaW50IGNhbiB0YWtlIDMgYnl0ZXMgaW4gQ0VTVS04LCB0aGlzIHJlcHJlc2VudGF0 aW9uIGNhbiBvbmx5CisgKiAgc3VwcG9ydCBhYm91dCAxLjRHIGNvZGVwb2ludCBsb25nIHN0cmlu Z3MgaW4gZXh0cmVtZSBjYXNlcy4gIFRoaXMgaXMgbm90CisgKiAgcmVhbGx5IGEgcHJhY3RpY2Fs IGlzc3VlLgorICovCisKKyNpZiAhZGVmaW5lZChEVUtfSFNUUklOR19IX0lOQ0xVREVEKQorI2Rl ZmluZSBEVUtfSFNUUklOR19IX0lOQ0xVREVECisKKy8qIEltcG9zZSBhIG1heGltdW0gc3RyaW5n IGxlbmd0aCBmb3Igbm93LiAgUmVzdHJpY3RlZCBhcnRpZmljaWFsbHkgdG8KKyAqIGVuc3VyZSBh ZGRpbmcgYSBoZWFwIGhlYWRlciBsZW5ndGggd29uJ3Qgb3ZlcmZsb3cgc2l6ZV90LiAgVGhlIGxp bWl0CisgKiBzaG91bGQgYmUgc3luY2hyb25pemVkIHdpdGggRFVLX0hCVUZGRVJfTUFYX0JZVEVM RU4uCisgKgorICogRTUuMSBtYWtlcyBwcm92aXNpb25zIHRvIHN1cHBvcnQgc3RyaW5ncyBsb25n ZXIgdGhhbiA0RyBjaGFyYWN0ZXJzLgorICogVGhpcyBsaW1pdCBzaG91bGQgYmUgZWxpbWluYXRl ZCBvbiA2NC1iaXQgcGxhdGZvcm1zIChhbmQgaW5jcmVhc2VkCisgKiBjbG9zZXIgdG8gbWF4aW11 bSBzdXBwb3J0IG9uIDMyLWJpdCBwbGF0Zm9ybXMpLgorICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfU1RSTEVOMTYpCisjZGVmaW5lIERVS19IU1RSSU5HX01BWF9CWVRFTEVOICAgICAgICAgICAg ICAgICAgICAgKDB4MDAwMGZmZmZVTCkKKyNlbHNlCisjZGVmaW5lIERVS19IU1RSSU5HX01BWF9C WVRFTEVOICAgICAgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmZVTCkKKyNlbmRpZgorCisvKiBY WFg6IGNvdWxkIGFkZCBmbGFncyBmb3IgImlzIHZhbGlkIENFU1UtOCIgKEVDTUFTY3JpcHQgY29t cGF0aWJsZSBzdHJpbmdzKSwKKyAqICJpcyB2YWxpZCBVVEYtOCIsICJpcyB2YWxpZCBleHRlbmRl ZCBVVEYtOCIgKGludGVybmFsIHN0cmluZ3MgYXJlIG5vdCwKKyAqIHJlZ2V4cCBieXRlY29kZSBp cyksIGFuZCAiY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXJzIi4gIFRoZXNlIGFyZSBub3QKKyAq IG5lZWRlZCByaWdodCBub3cuCisgKi8KKworLyogV2l0aCBsb3dtZW0gYnVpbGRzIHRoZSBoaWdo IDE2IGJpdHMgb2YgZHVrX2hlYXBoZHIgYXJlIHVzZWQgZm9yIG90aGVyCisgKiBwdXJwb3Nlcywg c28gdGhpcyBsZWF2ZXMgNyBkdWtfaGVhcGhkciBmbGFncyBhbmQgOSBkdWtfaHN0cmluZyBmbGFn cy4KKyAqLworI2RlZmluZSBEVUtfSFNUUklOR19GTEFHX0FTQ0lJICAgICAgICAgICAgICAgICAg ICAgIERVS19IRUFQSERSX1VTRVJfRkxBRygwKSAgLyogc3RyaW5nIGlzIEFTQ0lJLCBjbGVuID09 IGJsZW4gKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdfRkxBR19BUlJJRFggICAgICAgICAgICAgICAg ICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoMSkgIC8qIHN0cmluZyBpcyBhIHZhbGlkIGFycmF5 IGluZGV4ICovCisjZGVmaW5lIERVS19IU1RSSU5HX0ZMQUdfU1lNQk9MICAgICAgICAgICAgICAg ICAgICAgRFVLX0hFQVBIRFJfVVNFUl9GTEFHKDIpICAvKiBzdHJpbmcgaXMgYSBzeW1ib2wgKGlu dmFsaWQgdXRmLTgpICovCisjZGVmaW5lIERVS19IU1RSSU5HX0ZMQUdfSElEREVOICAgICAgICAg ICAgICAgICAgICAgRFVLX0hFQVBIRFJfVVNFUl9GTEFHKDMpICAvKiBzdHJpbmcgaXMgYSBoaWRk ZW4gc3ltYm9sIChpbXBsaWVzIHN5bWJvbCwgRHVrdGFwZSAxLnggaW50ZXJuYWwgc3RyaW5nKSAq LworI2RlZmluZSBEVUtfSFNUUklOR19GTEFHX1JFU0VSVkVEX1dPUkQgICAgICAgICAgICAgIERV S19IRUFQSERSX1VTRVJfRkxBRyg0KSAgLyogc3RyaW5nIGlzIGEgcmVzZXJ2ZWQgd29yZCAobm9u LXN0cmljdCkgKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdfRkxBR19TVFJJQ1RfUkVTRVJWRURfV09S RCAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoNSkgIC8qIHN0cmluZyBpcyBhIHJlc2VydmVk IHdvcmQgKHN0cmljdCkgKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdfRkxBR19FVkFMX09SX0FSR1VN RU5UUyAgICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoNikgIC8qIHN0cmluZyBpcyAnZXZh bCcgb3IgJ2FyZ3VtZW50cycgKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdfRkxBR19FWFREQVRBICAg ICAgICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoNykgIC8qIHN0cmluZyBkYXRh IGlzIGV4dGVybmFsIChkdWtfaHN0cmluZ19leHRlcm5hbCkgKi8KKyNkZWZpbmUgRFVLX0hTVFJJ TkdfRkxBR19QSU5ORURfTElURVJBTCAgICAgICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUco OCkgIC8qIHN0cmluZyBpcyBhIGxpdGVyYWwsIGFuZCBwaW5uZWQgKi8KKworI2RlZmluZSBEVUtf SFNUUklOR19IQVNfQVNDSUkoeCkgICAgICAgICAgICAgICAgICAgIERVS19IRUFQSERSX0NIRUNL X0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IU1RSSU5HX0ZMQUdfQVNDSUkpCisjZGVmaW5lIERV S19IU1RSSU5HX0hBU19BUlJJRFgoeCkgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hF Q0tfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19BUlJJRFgpCisjZGVmaW5l IERVS19IU1RSSU5HX0hBU19TWU1CT0woeCkgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBIRFJf Q0hFQ0tfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19TWU1CT0wpCisjZGVm aW5lIERVS19IU1RSSU5HX0hBU19ISURERU4oeCkgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBI RFJfQ0hFQ0tfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19ISURERU4pCisj ZGVmaW5lIERVS19IU1RSSU5HX0hBU19SRVNFUlZFRF9XT1JEKHgpICAgICAgICAgICAgRFVLX0hF QVBIRFJfQ0hFQ0tfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19SRVNFUlZF RF9XT1JEKQorI2RlZmluZSBEVUtfSFNUUklOR19IQVNfU1RSSUNUX1JFU0VSVkVEX1dPUkQoeCkg ICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IU1RSSU5HX0ZM QUdfU1RSSUNUX1JFU0VSVkVEX1dPUkQpCisjZGVmaW5lIERVS19IU1RSSU5HX0hBU19FVkFMX09S X0FSR1VNRU5UUyh4KSAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxBR19CSVRTKCYoeCktPmhk ciwgRFVLX0hTVFJJTkdfRkxBR19FVkFMX09SX0FSR1VNRU5UUykKKyNkZWZpbmUgRFVLX0hTVFJJ TkdfSEFTX0VYVERBVEEoeCkgICAgICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9DSEVDS19GTEFH X0JJVFMoJih4KS0+aGRyLCBEVUtfSFNUUklOR19GTEFHX0VYVERBVEEpCisjZGVmaW5lIERVS19I U1RSSU5HX0hBU19QSU5ORURfTElURVJBTCh4KSAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tf RkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19QSU5ORURfTElURVJBTCkKKwor I2RlZmluZSBEVUtfSFNUUklOR19TRVRfQVNDSUkoeCkgICAgICAgICAgICAgICAgICAgIERVS19I RUFQSERSX1NFVF9GTEFHX0JJVFMoJih4KS0+aGRyLCBEVUtfSFNUUklOR19GTEFHX0FTQ0lJKQor I2RlZmluZSBEVUtfSFNUUklOR19TRVRfQVJSSURYKHgpICAgICAgICAgICAgICAgICAgIERVS19I RUFQSERSX1NFVF9GTEFHX0JJVFMoJih4KS0+aGRyLCBEVUtfSFNUUklOR19GTEFHX0FSUklEWCkK KyNkZWZpbmUgRFVLX0hTVFJJTkdfU0VUX1NZTUJPTCh4KSAgICAgICAgICAgICAgICAgICBEVUtf SEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19TWU1CT0wp CisjZGVmaW5lIERVS19IU1RSSU5HX1NFVF9ISURERU4oeCkgICAgICAgICAgICAgICAgICAgRFVL X0hFQVBIRFJfU0VUX0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IU1RSSU5HX0ZMQUdfSElEREVO KQorI2RlZmluZSBEVUtfSFNUUklOR19TRVRfUkVTRVJWRURfV09SRCh4KSAgICAgICAgICAgIERV S19IRUFQSERSX1NFVF9GTEFHX0JJVFMoJih4KS0+aGRyLCBEVUtfSFNUUklOR19GTEFHX1JFU0VS VkVEX1dPUkQpCisjZGVmaW5lIERVS19IU1RSSU5HX1NFVF9TVFJJQ1RfUkVTRVJWRURfV09SRCh4 KSAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IU1RSSU5HX0ZM QUdfU1RSSUNUX1JFU0VSVkVEX1dPUkQpCisjZGVmaW5lIERVS19IU1RSSU5HX1NFVF9FVkFMX09S X0FSR1VNRU5UUyh4KSAgICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygmKHgpLT5oZHIs IERVS19IU1RSSU5HX0ZMQUdfRVZBTF9PUl9BUkdVTUVOVFMpCisjZGVmaW5lIERVS19IU1RSSU5H X1NFVF9FWFREQVRBKHgpICAgICAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklU UygmKHgpLT5oZHIsIERVS19IU1RSSU5HX0ZMQUdfRVhUREFUQSkKKyNkZWZpbmUgRFVLX0hTVFJJ TkdfU0VUX1BJTk5FRF9MSVRFUkFMKHgpICAgICAgICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19C SVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19QSU5ORURfTElURVJBTCkKKworI2RlZmlu ZSBEVUtfSFNUUklOR19DTEVBUl9BU0NJSSh4KSAgICAgICAgICAgICAgICAgIERVS19IRUFQSERS X0NMRUFSX0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IU1RSSU5HX0ZMQUdfQVNDSUkpCisjZGVm aW5lIERVS19IU1RSSU5HX0NMRUFSX0FSUklEWCh4KSAgICAgICAgICAgICAgICAgRFVLX0hFQVBI RFJfQ0xFQVJfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19BUlJJRFgpCisj ZGVmaW5lIERVS19IU1RSSU5HX0NMRUFSX1NZTUJPTCh4KSAgICAgICAgICAgICAgICAgRFVLX0hF QVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19TWU1CT0wp CisjZGVmaW5lIERVS19IU1RSSU5HX0NMRUFSX0hJRERFTih4KSAgICAgICAgICAgICAgICAgRFVL X0hFQVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19ISURE RU4pCisjZGVmaW5lIERVS19IU1RSSU5HX0NMRUFSX1JFU0VSVkVEX1dPUkQoeCkgICAgICAgICAg RFVLX0hFQVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19S RVNFUlZFRF9XT1JEKQorI2RlZmluZSBEVUtfSFNUUklOR19DTEVBUl9TVFJJQ1RfUkVTRVJWRURf V09SRCh4KSAgIERVS19IRUFQSERSX0NMRUFSX0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IU1RS SU5HX0ZMQUdfU1RSSUNUX1JFU0VSVkVEX1dPUkQpCisjZGVmaW5lIERVS19IU1RSSU5HX0NMRUFS X0VWQUxfT1JfQVJHVU1FTlRTKHgpICAgICAgRFVLX0hFQVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYo eCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19FVkFMX09SX0FSR1VNRU5UUykKKyNkZWZpbmUgRFVL X0hTVFJJTkdfQ0xFQVJfRVhUREFUQSh4KSAgICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9DTEVB Ul9GTEFHX0JJVFMoJih4KS0+aGRyLCBEVUtfSFNUUklOR19GTEFHX0VYVERBVEEpCisjZGVmaW5l IERVS19IU1RSSU5HX0NMRUFSX1BJTk5FRF9MSVRFUkFMKHgpICAgICAgICAgRFVLX0hFQVBIRFJf Q0xFQVJfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hTVFJJTkdfRkxBR19QSU5ORURfTElURVJB TCkKKworI2lmIDAgIC8qIFNsaWdodGx5IHNtYWxsZXIgY29kZSB3aXRob3V0IGV4cGxpY2l0IGZs YWcsIGJ1dCBleHBsaWNpdCBmbGFnCisgICAgICAgICogaXMgdmVyeSB1c2VmdWwgd2hlbiAnY2xl bicgaXMgZHJvcHBlZC4KKyAgICAgICAgKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdfSVNfQVNDSUko eCkgICAgICAgICAgICAgICAgICAgICAoRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oKHgpKSA9PSBE VUtfSFNUUklOR19HRVRfQ0hBUkxFTigoeCkpKQorI2VuZGlmCisjZGVmaW5lIERVS19IU1RSSU5H X0lTX0FTQ0lJKHgpICAgICAgICAgICAgICAgICAgICAgRFVLX0hTVFJJTkdfSEFTX0FTQ0lJKCh4 KSkgIC8qIGxhemlseSBzZXQhICovCisjZGVmaW5lIERVS19IU1RSSU5HX0lTX0VNUFRZKHgpICAg ICAgICAgICAgICAgICAgICAgKERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKCh4KSkgPT0gMCkKKwor I2lmIGRlZmluZWQoRFVLX1VTRV9TVFJIQVNIMTYpCisjZGVmaW5lIERVS19IU1RSSU5HX0dFVF9I QVNIKHgpICAgICAgICAgICAgICAgICAgICAgKCh4KS0+aGRyLmhfZmxhZ3MgPj4gMTYpCisjZGVm aW5lIERVS19IU1RSSU5HX1NFVF9IQVNIKHgsdikgZG8geyBcCisJCSh4KS0+aGRyLmhfZmxhZ3Mg PSAoKHgpLT5oZHIuaF9mbGFncyAmIDB4MDAwMGZmZmZVTCkgfCAoKHYpIDw8IDE2KTsgXAorCX0g d2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEVUtfSFNUUklOR19HRVRfSEFTSCh4KSAgICAgICAg ICAgICAgICAgICAgICgoeCktPmhhc2gpCisjZGVmaW5lIERVS19IU1RSSU5HX1NFVF9IQVNIKHgs dikgZG8geyBcCisJCSh4KS0+aGFzaCA9ICh2KTsgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKwor I2lmIGRlZmluZWQoRFVLX1VTRV9TVFJMRU4xNikKKyNkZWZpbmUgRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oeCkgICAgICAgICAgICAgICAgICAoKHgpLT5oZHIuaF9zdHJleHRyYTE2KQorI2RlZmlu ZSBEVUtfSFNUUklOR19TRVRfQllURUxFTih4LHYpIGRvIHsgXAorCQkoeCktPmhkci5oX3N0cmV4 dHJhMTYgPSAodik7IFwKKwl9IHdoaWxlICgwKQorI2lmIGRlZmluZWQoRFVLX1VTRV9IU1RSSU5H X0NMRU4pCisjZGVmaW5lIERVS19IU1RSSU5HX0dFVF9DSEFSTEVOKHgpICAgICAgICAgICAgICAg ICAgZHVrX2hzdHJpbmdfZ2V0X2NoYXJsZW4oKHgpKQorI2RlZmluZSBEVUtfSFNUUklOR19TRVRf Q0hBUkxFTih4LHYpIGRvIHsgXAorCQkoeCktPmNsZW4xNiA9ICh2KTsgXAorCX0gd2hpbGUgKDAp CisjZWxzZQorI2RlZmluZSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTih4KSAgICAgICAgICAgICAg ICAgIGR1a19oc3RyaW5nX2dldF9jaGFybGVuKCh4KSkKKyNkZWZpbmUgRFVLX0hTVFJJTkdfU0VU X0NIQVJMRU4oeCx2KSBkbyB7IFwKKwkJRFVLX0FTU0VSVCgwKTsgIC8qIHNob3VsZCBuZXZlciBi ZSBjYWxsZWQgKi8gXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIERVS19I U1RSSU5HX0dFVF9CWVRFTEVOKHgpICAgICAgICAgICAgICAgICAgKCh4KS0+YmxlbikKKyNkZWZp bmUgRFVLX0hTVFJJTkdfU0VUX0JZVEVMRU4oeCx2KSBkbyB7IFwKKwkJKHgpLT5ibGVuID0gKHYp OyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oeCkgICAg ICAgICAgICAgICAgICBkdWtfaHN0cmluZ19nZXRfY2hhcmxlbigoeCkpCisjZGVmaW5lIERVS19I U1RSSU5HX1NFVF9DSEFSTEVOKHgsdikgZG8geyBcCisJCSh4KS0+Y2xlbiA9ICh2KTsgXAorCX0g d2hpbGUgKDApCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9IU1RSSU5HX0VYVERBVEEp CisjZGVmaW5lIERVS19IU1RSSU5HX0dFVF9FWFREQVRBKHgpIFwKKwkoKHgpLT5leHRkYXRhKQor I2RlZmluZSBEVUtfSFNUUklOR19HRVRfREFUQSh4KSBcCisJKERVS19IU1RSSU5HX0hBU19FWFRE QVRBKCh4KSkgPyBcCisJCURVS19IU1RSSU5HX0dFVF9FWFREQVRBKChjb25zdCBkdWtfaHN0cmlu Z19leHRlcm5hbCAqKSAoeCkpIDogKChjb25zdCBkdWtfdWludDhfdCAqKSAoKHgpICsgMSkpKQor I2Vsc2UKKyNkZWZpbmUgRFVLX0hTVFJJTkdfR0VUX0RBVEEoeCkgXAorCSgoY29uc3QgZHVrX3Vp bnQ4X3QgKikgKCh4KSArIDEpKQorI2VuZGlmCisKKyNkZWZpbmUgRFVLX0hTVFJJTkdfR0VUX0RB VEFfRU5EKHgpIFwKKwkoRFVLX0hTVFJJTkdfR0VUX0RBVEEoKHgpKSArICh4KS0+YmxlbikKKwor LyogTWFya2VyIHZhbHVlOyBpbiBFNSAyXjMyLTEgaXMgbm90IGEgdmFsaWQgYXJyYXkgaW5kZXgg KDJeMzItMiBpcyBoaWdoZXN0CisgKiB2YWxpZCkuCisgKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdf Tk9fQVJSQVlfSU5ERVggICgweGZmZmZmZmZmVUwpCisKKyNpZiBkZWZpbmVkKERVS19VU0VfSFNU UklOR19BUlJJRFgpCisjZGVmaW5lIERVS19IU1RSSU5HX0dFVF9BUlJJRFhfRkFTVChoKSAgKCho KS0+YXJyaWR4KQorI2RlZmluZSBEVUtfSFNUUklOR19HRVRfQVJSSURYX1NMT1coaCkgICgoaCkt PmFycmlkeCkKKyNlbHNlCisvKiBHZXQgYXJyYXkgaW5kZXggcmVsYXRlZCB0byBzdHJpbmcgKG9y IHJldHVybiBEVUtfSFNUUklOR19OT19BUlJBWV9JTkRFWCk7CisgKiBhdm9pZHMgaGVscGVyIGNh bGwgaWYgc3RyaW5nIGhhcyBubyBhcnJheSBpbmRleCB2YWx1ZS4KKyAqLworI2RlZmluZSBEVUtf SFNUUklOR19HRVRfQVJSSURYX0ZBU1QoaCkgIFwKKwkoRFVLX0hTVFJJTkdfSEFTX0FSUklEWCgo aCkpID8gZHVrX2pzX3RvX2FycmF5aW5kZXhfaHN0cmluZ19mYXN0X2tub3duKChoKSkgOiBEVUtf SFNUUklOR19OT19BUlJBWV9JTkRFWCkKKworLyogU2xvd2VyIGJ1dCBtb3JlIGNvbXBhY3QgdmFy aWFudC4gKi8KKyNkZWZpbmUgRFVLX0hTVFJJTkdfR0VUX0FSUklEWF9TTE9XKGgpICBcCisJKGR1 a19qc190b19hcnJheWluZGV4X2hzdHJpbmdfZmFzdCgoaCkpKQorI2VuZGlmCisKKy8qIFhYWDog dGhlc2UgYWN0dWFsbHkgZml0IGludG8gZHVrX2hzdHJpbmcgKi8KKyNkZWZpbmUgRFVLX1NZTUJP TF9UWVBFX0hJRERFTiAwCisjZGVmaW5lIERVS19TWU1CT0xfVFlQRV9HTE9CQUwgMQorI2RlZmlu ZSBEVUtfU1lNQk9MX1RZUEVfTE9DQUwgMgorI2RlZmluZSBEVUtfU1lNQk9MX1RZUEVfV0VMTEtO T1dOIDMKKworLyoKKyAqICBNaXNjCisgKi8KKworc3RydWN0IGR1a19oc3RyaW5nIHsKKwkvKiBT bWFsbGVyIGhlYXBoZHIgdGhhbiBmb3Igb3RoZXIgb2JqZWN0cywgYmVjYXVzZSBzdHJpbmdzIGFy ZSBoZWxkCisJICogaW4gc3RyaW5nIGludGVybiB0YWJsZSB3aGljaCByZXF1aXJlcyBubyBsaW5r IHBvaW50ZXJzLiAgTXVjaCBvZgorCSAqIHRoZSAzMi1iaXQgZmxhZ3MgZmllbGQgaXMgdW51c2Vk IGJ5IGZsYWdzLCBzbyB3ZSBjYW4gc3R1ZmYgYSAxNi1iaXQKKwkgKiBmaWVsZCBpbiB0aGVyZS4K KwkgKi8KKwlkdWtfaGVhcGhkcl9zdHJpbmcgaGRyOworCisJLyogU3RyaW5nIGhhc2guICovCisj aWYgZGVmaW5lZChEVUtfVVNFX1NUUkhBU0gxNikKKwkvKiBJZiAxNi1iaXQgaGFzaCBpcyBpbiB1 c2UsIHN0dWZmIGl0IGludG8gZHVrX2hlYXBoZHJfc3RyaW5nIGZsYWdzLiAqLworI2Vsc2UKKwlk dWtfdWludDMyX3QgaGFzaDsKKyNlbmRpZgorCisJLyogUHJlY29tcHV0ZWQgYXJyYXkgaW5kZXgg KG9yIERVS19IU1RSSU5HX05PX0FSUkFZX0lOREVYKS4gKi8KKyNpZiBkZWZpbmVkKERVS19VU0Vf SFNUUklOR19BUlJJRFgpCisJZHVrX3VhcnJpZHhfdCBhcnJpZHg7CisjZW5kaWYKKworCS8qIExl bmd0aCBpbiBieXRlcyAobm90IGNvdW50aW5nIE5VTCB0ZXJtKS4gKi8KKyNpZiBkZWZpbmVkKERV S19VU0VfU1RSTEVOMTYpCisJLyogcGxhY2VkIGluIGR1a19oZWFwaGRyX3N0cmluZyAqLworI2Vs c2UKKwlkdWtfdWludDMyX3QgYmxlbjsKKyNlbmRpZgorCisJLyogTGVuZ3RoIGluIGNvZGVwb2lu dHMgKG11c3QgYmUgRTUgY29tcGF0aWJsZSkuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUkxF TjE2KQorI2lmIGRlZmluZWQoRFVLX1VTRV9IU1RSSU5HX0NMRU4pCisJZHVrX3VpbnQxNl90IGNs ZW4xNjsKKyNlbHNlCisJLyogY29tcHV0ZWQgbGl2ZSAqLworI2VuZGlmCisjZWxzZQorCWR1a191 aW50MzJfdCBjbGVuOworI2VuZGlmCisKKwkvKgorCSAqICBTdHJpbmcgZGF0YSBvZiAnYmxlbisx JyBieXRlcyBmb2xsb3dzICgrMSBmb3IgTlVMIHRlcm1pbmF0aW9uCisJICogIGNvbnZlbmllbmNl IGZvciBDIEFQSSkuICBObyBhbGlnbm1lbnQgbmVlZHMgdG8gYmUgZ3VhcmFudGVlZAorCSAqICBm b3Igc3RyaW5ncywgYnV0IGZpZWxkcyBhYm92ZSBzaG91bGQgZ3VhcmFudGVlIGFsaWdubWVudC1i eS00CisJICogIChidXQgbm90IGFsaWdubWVudC1ieS04KS4KKwkgKi8KK307CisKKy8qIFRoZSBl eHRlcm5hbCBzdHJpbmcgc3RydWN0IGlzIGRlZmluZWQgZXZlbiB3aGVuIHRoZSBmZWF0dXJlIGlz IGluYWN0aXZlLiAqLworc3RydWN0IGR1a19oc3RyaW5nX2V4dGVybmFsIHsKKwlkdWtfaHN0cmlu ZyBzdHI7CisKKwkvKgorCSAqICBGb3IgYW4gZXh0ZXJuYWwgc3RyaW5nLCB0aGUgTlVMLXRlcm1p bmF0ZWQgc3RyaW5nIGRhdGEgaXMgc3RvcmVkCisJICogIGV4dGVybmFsbHkuICBUaGUgdXNlciBt dXN0IGd1YXJhbnRlZSB0aGF0IGRhdGEgYmVoaW5kIHRoaXMgcG9pbnRlcgorCSAqICBkb2Vzbid0 IGNoYW5nZSB3aGlsZSBpdCdzIHVzZWQuCisJICovCisKKwljb25zdCBkdWtfdWludDhfdCAqZXh0 ZGF0YTsKK307CisKKy8qCisgKiAgUHJvdG90eXBlcworICovCisKK0RVS19JTlRFUk5BTF9ERUNM IGR1a191Y29kZXBvaW50X3QgZHVrX2hzdHJpbmdfY2hhcl9jb2RlX2F0X3JhdyhkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaHN0cmluZyAqaCwgZHVrX3VpbnRfdCBwb3MsIGR1a19ib29sX3Qgc3Vycm9n YXRlX2F3YXJlKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hzdHJpbmdfZXF1 YWxzX2FzY2lpX2NzdHJpbmcoZHVrX2hzdHJpbmcgKmgsIGNvbnN0IGNoYXIgKmNzdHIpOworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX3NpemVfdCBkdWtfaHN0cmluZ19nZXRfY2hhcmxlbihkdWtfaHN0 cmluZyAqaCk7CisjaWYgIWRlZmluZWQoRFVLX1VTRV9IU1RSSU5HX0xBWllfQ0xFTikKK0RVS19J TlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hzdHJpbmdfaW5pdF9jaGFybGVuKGR1a19oc3RyaW5nICpo KTsKKyNlbmRpZgorCisjZW5kaWYgIC8qIERVS19IU1RSSU5HX0hfSU5DTFVERUQgKi8KKy8qICNp bmNsdWRlIGR1a19ob2JqZWN0LmggKi8KKy8qCisgKiAgSGVhcCBvYmplY3QgcmVwcmVzZW50YXRp b24uCisgKgorICogIEhlYXAgb2JqZWN0cyBhcmUgdXNlZCBmb3IgRUNNQVNjcmlwdCBvYmplY3Rz LCBhcnJheXMsIGFuZCBmdW5jdGlvbnMsCisgKiAgYnV0IGFsc28gZm9yIGludGVybmFsIGNvbnRy b2wgbGlrZSBkZWNsYXJhdGl2ZSBhbmQgb2JqZWN0IGVudmlyb25tZW50CisgKiAgcmVjb3Jkcy4g IENvbXBpbGVkIGZ1bmN0aW9ucywgbmF0aXZlIGZ1bmN0aW9ucywgYW5kIHRocmVhZHMgYXJlIGFs c28KKyAqICBvYmplY3RzIGJ1dCB3aXRoIGFuIGV4dGVuZGVkIEMgc3RydWN0LgorICoKKyAqICBP YmplY3RzIHByb3ZpZGUgdGhlIHJlcXVpcmVkIEVDTUFTY3JpcHQgc2VtYW50aWNzIGFuZCBleG90 aWMgYmVoYXZpb3JzCisgKiAgZXNwZWNpYWxseSBmb3IgcHJvcGVydHkgYWNjZXNzLgorICoKKyAq ICBQcm9wZXJ0aWVzIGFyZSBzdG9yZWQgaW4gdGhyZWUgY29uY2VwdHVhbCBwYXJ0czoKKyAqCisg KiAgICAxLiBBIGxpbmVhciAnZW50cnkgcGFydCcgY29udGFpbnMgb3JkZXJlZCBrZXktdmFsdWUt YXR0cmlidXRlcyB0cmlwbGVzCisgKiAgICAgICBhbmQgaXMgdGhlIG1haW4gbWV0aG9kIG9mIHN0 cmluZyBwcm9wZXJ0aWVzLgorICoKKyAqICAgIDIuIEFuIG9wdGlvbmFsIGxpbmVhciAnYXJyYXkg cGFydCcgaXMgdXNlZCBmb3IgYXJyYXkgb2JqZWN0cyB0byBzdG9yZSBhCisgKiAgICAgICAoZGVu c2UpIHJhbmdlIG9mIFswLE5bIGFycmF5IGluZGV4ZWQgZW50cmllcyB3aXRoIGRlZmF1bHQgYXR0 cmlidXRlcworICogICAgICAgKHdyaXRhYmxlLCBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUpLiAg SWYgdGhlIGFycmF5IHBhcnQgd291bGQgYmVjb21lCisgKiAgICAgICBzcGFyc2Ugb3Igbm9uLWRl ZmF1bHQgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQsIHRoZSBhcnJheSBwYXJ0IGlzCisgKiAgICAg ICBhYmFuZG9uZWQgYW5kIG1vdmVkIHRvIHRoZSAnZW50cnkgcGFydCcuCisgKgorICogICAgMy4g QW4gb3B0aW9uYWwgJ2hhc2ggcGFydCcgaXMgdXNlZCB0byBvcHRpbWl6ZSBsb29rdXBzIG9mIHRo ZSBlbnRyeQorICogICAgICAgcGFydDsgaXQgaXMgdXNlZCBvbmx5IGZvciBvYmplY3RzIHdpdGgg c3VmZmljaWVudGx5IG1hbnkgcHJvcGVydGllcworICogICAgICAgYW5kIGNhbiBiZSBhYmFuZG9u ZWQgd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLgorICoKKyAqICBUaGVzZSB0aHJlZSBjb25j ZXB0dWFsIHBhcnRzIGFyZSBzdG9yZWQgaW4gYSBzaW5nbGUgbWVtb3J5IGFsbG9jYXRlZCBhcmVh LgorICogIFRoaXMgbWluaW1pemVzIG1lbW9yeSBhbGxvY2F0aW9uIG92ZXJoZWFkIGJ1dCBhbHNv IG1lYW5zIHRoYXQgYWxsIHRocmVlCisgKiAgcGFydHMgYXJlIHJlc2l6ZWQgdG9nZXRoZXIsIGFu ZCBtYWtlcyBwcm9wZXJ0eSBhY2Nlc3MgYSBiaXQgY29tcGxpY2F0ZWQuCisgKi8KKworI2lmICFk ZWZpbmVkKERVS19IT0JKRUNUX0hfSU5DTFVERUQpCisjZGVmaW5lIERVS19IT0JKRUNUX0hfSU5D TFVERUQKKworLyogT2JqZWN0IGZsYWdzLiAgTWFrZSBzdXJlIHRoaXMgc3RheXMgaW4gc3luYyB3 aXRoIGRlYnVnZ2VyIG9iamVjdAorICogaW5zcGVjdGlvbiBjb2RlLgorICovCisKKy8qIFhYWDog c29tZSBmbGFncyBhcmUgb2JqZWN0IHN1YnR5cGUgc3BlY2lmaWMgKGUuZy4gY29tbW9uIHRvIGFs bCBmdW5jdGlvbgorICogc3VidHlwZXMsIGR1a19oYXJyYXksIGV0YykgYW5kIGNvdWxkIGJlIHJl dXNlZCBmb3IgZGlmZmVyZW50IHN1YnR5cGVzLgorICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZM QUdfRVhURU5TSUJMRSAgICAgICAgICAgIERVS19IRUFQSERSX1VTRVJfRkxBRygwKSAgIC8qIG9i amVjdCBpcyBleHRlbnNpYmxlICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfQ09OU1RSVUNU QUJMRSAgICAgICAgIERVS19IRUFQSERSX1VTRVJfRkxBRygxKSAgIC8qIG9iamVjdCBpcyBjb25z dHJ1Y3RhYmxlICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfQ0FMTEFCTEUgICAgICAgICAg ICAgIERVS19IRUFQSERSX1VTRVJfRkxBRygyKSAgIC8qIG9iamVjdCBpcyBjYWxsYWJsZSAqLwor I2RlZmluZSBEVUtfSE9CSkVDVF9GTEFHX0JPVU5ERlVOQyAgICAgICAgICAgICBEVUtfSEVBUEhE Ul9VU0VSX0ZMQUcoMykgICAvKiBvYmplY3QgZXN0YWJsaXNoZWQgdXNpbmcgRnVuY3Rpb24ucHJv dG90eXBlLmJpbmQoKSAqLworI2RlZmluZSBEVUtfSE9CSkVDVF9GTEFHX0NPTVBGVU5DICAgICAg ICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoNCkgICAvKiBvYmplY3QgaXMgYSBjb21waWxl ZCBmdW5jdGlvbiAoZHVrX2hjb21wZnVuYykgKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRkxBR19O QVRGVU5DICAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfVVNFUl9GTEFHKDUpICAgLyogb2JqZWN0 IGlzIGEgbmF0aXZlIGZ1bmN0aW9uIChkdWtfaG5hdGZ1bmMpICovCisjZGVmaW5lIERVS19IT0JK RUNUX0ZMQUdfQlVGT0JKICAgICAgICAgICAgICAgIERVS19IRUFQSERSX1VTRVJfRkxBRyg2KSAg IC8qIG9iamVjdCBpcyBhIGJ1ZmZlciBvYmplY3QgKGR1a19oYnVmb2JqKSAoYWx3YXlzIGV4b3Rp YykgKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUyAgICAgICAgICAgICAgRFVL X0hFQVBIRFJfVVNFUl9GTEFHKDcpICAgLyogb2JqZWN0IGhhcyBubyBmaWVsZHMgbmVlZGluZyBE RUNSRUYvbWFya2luZyBiZXlvbmQgYmFzZSBkdWtfaG9iamVjdCBoZWFkZXIgKi8KKyNkZWZpbmUg RFVLX0hPQkpFQ1RfRkxBR19BUlJBWV9QQVJUICAgICAgICAgICAgRFVLX0hFQVBIRFJfVVNFUl9G TEFHKDgpICAgLyogb2JqZWN0IGhhcyBhbiBhcnJheSBwYXJ0IChhX3NpemUgbWF5IHN0aWxsIGJl IDApICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfU1RSSUNUICAgICAgICAgICAgICAgIERV S19IRUFQSERSX1VTRVJfRkxBRyg5KSAgIC8qIGZ1bmN0aW9uOiBmdW5jdGlvbiBvYmplY3QgaXMg c3RyaWN0ICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfTk9UQUlMICAgICAgICAgICAgICAg IERVS19IRUFQSERSX1VTRVJfRkxBRygxMCkgIC8qIGZ1bmN0aW9uOiBmdW5jdGlvbiBtdXN0IG5v dCBiZSB0YWlsIGNhbGxlZCAqLworI2RlZmluZSBEVUtfSE9CSkVDVF9GTEFHX05FV0VOViAgICAg ICAgICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoMTEpICAvKiBmdW5jdGlvbjogY3JlYXRl IG5ldyBlbnZpcm9ubWVudCB3aGVuIGNhbGxlZCAoc2VlIGR1a19oY29tcGZ1bmMpICovCisjZGVm aW5lIERVS19IT0JKRUNUX0ZMQUdfTkFNRUJJTkRJTkcgICAgICAgICAgIERVS19IRUFQSERSX1VT RVJfRkxBRygxMikgIC8qIGZ1bmN0aW9uOiBjcmVhdGUgYmluZGluZyBmb3IgZnVuYyBuYW1lIChm dW5jdGlvbiB0ZW1wbGF0ZXMgb25seSwgdXNlZCBmb3IgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lv bnMpICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfQ1JFQVRFQVJHUyAgICAgICAgICAgIERV S19IRUFQSERSX1VTRVJfRkxBRygxMykgIC8qIGZ1bmN0aW9uOiBjcmVhdGUgYW4gYXJndW1lbnRz IG9iamVjdCBvbiBmdW5jdGlvbiBjYWxsICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfSEFW RV9GSU5BTElaRVIgICAgICAgIERVS19IRUFQSERSX1VTRVJfRkxBRygxNCkgIC8qIG9iamVjdCBo YXMgYSBjYWxsYWJsZSAob3duKSBmaW5hbGl6ZXIgcHJvcGVydHkgKi8KKyNkZWZpbmUgRFVLX0hP QkpFQ1RfRkxBR19FWE9USUNfQVJSQVkgICAgICAgICAgRFVLX0hFQVBIRFJfVVNFUl9GTEFHKDE1 KSAgLyogJ0FycmF5JyBvYmplY3QsIGFycmF5IGxlbmd0aCBhbmQgaW5kZXggZXhvdGljIGJlaGF2 aW9yICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfRVhPVElDX1NUUklOR09CSiAgICAgIERV S19IRUFQSERSX1VTRVJfRkxBRygxNikgIC8qICdTdHJpbmcnIG9iamVjdCwgYXJyYXkgaW5kZXgg ZXhvdGljIGJlaGF2aW9yICovCisjZGVmaW5lIERVS19IT0JKRUNUX0ZMQUdfRVhPVElDX0FSR1VN RU5UUyAgICAgIERVS19IRUFQSERSX1VTRVJfRkxBRygxNykgIC8qICdBcmd1bWVudHMnIG9iamVj dCBhbmQgaGFzIGFyZ3VtZW50cyBleG90aWMgYmVoYXZpb3IgKG5vbi1zdHJpY3QgY2FsbGVlKSAq LworI2RlZmluZSBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19QUk9YWU9CSiAgICAgICBEVUtfSEVB UEhEUl9VU0VSX0ZMQUcoMTgpICAvKiAnUHJveHknIG9iamVjdCAqLworI2RlZmluZSBEVUtfSE9C SkVDVF9GTEFHX1NQRUNJQUxfQ0FMTCAgICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoMTkp ICAvKiBzcGVjaWFsIGNhc2luZyBpbiBjYWxsIGJlaGF2aW9yLCBmb3IgLmNhbGwoKSwgLmFwcGx5 KCksIGV0Yy4gKi8KKworI2RlZmluZSBEVUtfSE9CSkVDVF9GTEFHX0NMQVNTX0JBU0UgICAgICAg ICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUdfTlVNQkVSKDIwKQorI2RlZmluZSBEVUtfSE9CSkVD VF9GTEFHX0NMQVNTX0JJVFMgICAgICAgICAgICA1CisKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfR0VU X0NMQVNTX05VTUJFUihoKSAgICAgICAgXAorCURVS19IRUFQSERSX0dFVF9GTEFHX1JBTkdFKCYo aCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19DTEFTU19CQVNFLCBEVUtfSE9CSkVDVF9GTEFHX0NM QVNTX0JJVFMpCisjZGVmaW5lIERVS19IT0JKRUNUX1NFVF9DTEFTU19OVU1CRVIoaCx2KSAgICAg IFwKKwlEVUtfSEVBUEhEUl9TRVRfRkxBR19SQU5HRSgmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZM QUdfQ0xBU1NfQkFTRSwgRFVLX0hPQkpFQ1RfRkxBR19DTEFTU19CSVRTLCAodikpCisKKyNkZWZp bmUgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX01BU0soaCkgICAgICAgICAgXAorCSgxVUwgPDwgRFVL X0hFQVBIRFJfR0VUX0ZMQUdfUkFOR0UoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0NMQVNT X0JBU0UsIERVS19IT0JKRUNUX0ZMQUdfQ0xBU1NfQklUUykpCisKKy8qIE1hY3JvIGZvciBjcmVh dGluZyBmbGFnIGluaXRpYWxpemVyIGZyb20gYSBjbGFzcyBudW1iZXIuCisgKiBVbnNpZ25lZCB0 eXBlIGNhc3QgaXMgbmVlZGVkIHRvIGF2b2lkIHdhcm5pbmdzIGFib3V0IGNvZXJjaW5nCisgKiBh IHNpZ25lZCBpbnRlZ2VyIHRvIGFuIHVuc2lnbmVkIG9uZTsgdGhlIGxhcmdlc3QgY2xhc3MgdmFs dWVzCisgKiBoYXZlIHRoZSBoaWdoZXN0IGJpdCAoYml0IDMxKSBzZXQgd2hpY2ggY2F1c2VzIHRo aXMuCisgKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1ModikgICAgICAgICAg KCgoZHVrX3VpbnRfdCkgKHYpKSA8PCBEVUtfSE9CSkVDVF9GTEFHX0NMQVNTX0JBU0UpCisKKy8q IEU1IFNlY3Rpb24gOC42LjIgKyBjdXN0b20gY2xhc3NlcyAqLworI2RlZmluZSBEVUtfSE9CSkVD VF9DTEFTU19OT05FICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNT X09CSkVDVCAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xBU1NfQVJSQVkg ICAgICAgICAgICAgICAgMgorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19GVU5DVElPTiAgICAg ICAgICAgICAzCisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX0FSR1VNRU5UUyAgICAgICAgICAg IDQKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xBU1NfQk9PTEVBTiAgICAgICAgICAgICAgNQorI2Rl ZmluZSBEVUtfSE9CSkVDVF9DTEFTU19EQVRFICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERV S19IT0JKRUNUX0NMQVNTX0VSUk9SICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfQ0xBU1NfSlNPTiAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFT U19NQVRIICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX05VTUJF UiAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCAgICAg ICAgICAgICAgIDExCisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX1NUUklORyAgICAgICAgICAg ICAgIDEyCisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX0dMT0JBTCAgICAgICAgICAgICAgIDEz CisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX1NZTUJPTCAgICAgICAgICAgICAgIDE0CisjZGVm aW5lIERVS19IT0JKRUNUX0NMQVNTX09CSkVOViAgICAgICAgICAgICAgIDE1ICAvKiBjdXN0b20g Ki8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xBU1NfREVDRU5WICAgICAgICAgICAgICAgMTYgIC8q IGN1c3RvbSAqLworI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19QT0lOVEVSICAgICAgICAgICAg ICAxNyAgLyogY3VzdG9tICovCisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX1RIUkVBRCAgICAg ICAgICAgICAgIDE4ICAvKiBjdXN0b207IGltcGxpZXMgRFVLX0hPQkpFQ1RfSVNfVEhSRUFEICov CisjZGVmaW5lIERVS19IT0JKRUNUX0NMQVNTX0JVRk9CSl9NSU4gICAgICAgICAgIDE5CisjZGVm aW5lIERVS19IT0JKRUNUX0NMQVNTX0FSUkFZQlVGRkVSICAgICAgICAgIDE5ICAvKiBpbXBsaWVz IERVS19IT0JKRUNUX0lTX0JVRk9CSiAqLworI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19EQVRB VklFVyAgICAgICAgICAgICAyMAorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19JTlQ4QVJSQVkg ICAgICAgICAgICAyMQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19VSU5UOEFSUkFZICAgICAg ICAgICAyMgorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19VSU5UOENMQU1QRURBUlJBWSAgICAy MworI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19JTlQxNkFSUkFZICAgICAgICAgICAyNAorI2Rl ZmluZSBEVUtfSE9CSkVDVF9DTEFTU19VSU5UMTZBUlJBWSAgICAgICAgICAyNQorI2RlZmluZSBE VUtfSE9CSkVDVF9DTEFTU19JTlQzMkFSUkFZICAgICAgICAgICAyNgorI2RlZmluZSBEVUtfSE9C SkVDVF9DTEFTU19VSU5UMzJBUlJBWSAgICAgICAgICAyNworI2RlZmluZSBEVUtfSE9CSkVDVF9D TEFTU19GTE9BVDMyQVJSQVkgICAgICAgICAyOAorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19G TE9BVDY0QVJSQVkgICAgICAgICAyOQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19CVUZPQkpf TUFYICAgICAgICAgICAyOQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEFTU19NQVggICAgICAgICAg ICAgICAgICAyOQorCisvKiBDbGFzcyBtYXNrcy4gKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01B U0tfQUxMICAgICAgICAgICAgICAgICAgKCgxVUwgPDwgKERVS19IT0JKRUNUX0NMQVNTX01BWCAr IDEpKSAtIDFVTCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tfTk9ORSAgICAgICAgICAgICAg ICAgKDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19OT05FKQorI2RlZmluZSBEVUtfSE9CSkVDVF9D TUFTS19BUkdVTUVOVFMgICAgICAgICAgICAoMVVMIDw8IERVS19IT0JKRUNUX0NMQVNTX0FSR1VN RU5UUykKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tfQVJSQVkgICAgICAgICAgICAgICAgKDFV TCA8PCBEVUtfSE9CSkVDVF9DTEFTU19BUlJBWSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tf Qk9PTEVBTiAgICAgICAgICAgICAgKDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19CT09MRUFOKQor I2RlZmluZSBEVUtfSE9CSkVDVF9DTUFTS19EQVRFICAgICAgICAgICAgICAgICAoMVVMIDw8IERV S19IT0JKRUNUX0NMQVNTX0RBVEUpCisjZGVmaW5lIERVS19IT0JKRUNUX0NNQVNLX0VSUk9SICAg ICAgICAgICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xBU1NfRVJST1IpCisjZGVmaW5lIERV S19IT0JKRUNUX0NNQVNLX0ZVTkNUSU9OICAgICAgICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1Rf Q0xBU1NfRlVOQ1RJT04pCisjZGVmaW5lIERVS19IT0JKRUNUX0NNQVNLX0pTT04gICAgICAgICAg ICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xBU1NfSlNPTikKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfQ01BU0tfTUFUSCAgICAgICAgICAgICAgICAgKDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19N QVRIKQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTUFTS19OVU1CRVIgICAgICAgICAgICAgICAoMVVM IDw8IERVS19IT0JKRUNUX0NMQVNTX05VTUJFUikKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tf T0JKRUNUICAgICAgICAgICAgICAgKDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19PQkpFQ1QpCisj ZGVmaW5lIERVS19IT0JKRUNUX0NNQVNLX1JFR0VYUCAgICAgICAgICAgICAgICgxVUwgPDwgRFVL X0hPQkpFQ1RfQ0xBU1NfUkVHRVhQKQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTUFTS19TVFJJTkcg ICAgICAgICAgICAgICAoMVVMIDw8IERVS19IT0JKRUNUX0NMQVNTX1NUUklORykKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfQ01BU0tfR0xPQkFMICAgICAgICAgICAgICAgKDFVTCA8PCBEVUtfSE9CSkVD VF9DTEFTU19HTE9CQUwpCisjZGVmaW5lIERVS19IT0JKRUNUX0NNQVNLX1NZTUJPTCAgICAgICAg ICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xBU1NfU1lNQk9MKQorI2RlZmluZSBEVUtfSE9C SkVDVF9DTUFTS19PQkpFTlYgICAgICAgICAgICAgICAoMVVMIDw8IERVS19IT0JKRUNUX0NMQVNT X09CSkVOVikKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tfREVDRU5WICAgICAgICAgICAgICAg KDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19ERUNFTlYpCisjZGVmaW5lIERVS19IT0JKRUNUX0NN QVNLX1BPSU5URVIgICAgICAgICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xBU1NfUE9JTlRF UikKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tfQVJSQVlCVUZGRVIgICAgICAgICAgKDFVTCA8 PCBEVUtfSE9CSkVDVF9DTEFTU19BUlJBWUJVRkZFUikKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01B U0tfREFUQVZJRVcgICAgICAgICAgICAgKDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19EQVRBVklF VykKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tfSU5UOEFSUkFZICAgICAgICAgICAgKDFVTCA8 PCBEVUtfSE9CSkVDVF9DTEFTU19JTlQ4QVJSQVkpCisjZGVmaW5lIERVS19IT0JKRUNUX0NNQVNL X1VJTlQ4QVJSQVkgICAgICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xBU1NfVUlOVDhBUlJB WSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ01BU0tfVUlOVDhDTEFNUEVEQVJSQVkgICAgKDFVTCA8 PCBEVUtfSE9CSkVDVF9DTEFTU19VSU5UOENMQU1QRURBUlJBWSkKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfQ01BU0tfSU5UMTZBUlJBWSAgICAgICAgICAgKDFVTCA8PCBEVUtfSE9CSkVDVF9DTEFTU19J TlQxNkFSUkFZKQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTUFTS19VSU5UMTZBUlJBWSAgICAgICAg ICAoMVVMIDw8IERVS19IT0JKRUNUX0NMQVNTX1VJTlQxNkFSUkFZKQorI2RlZmluZSBEVUtfSE9C SkVDVF9DTUFTS19JTlQzMkFSUkFZICAgICAgICAgICAoMVVMIDw8IERVS19IT0JKRUNUX0NMQVNT X0lOVDMyQVJSQVkpCisjZGVmaW5lIERVS19IT0JKRUNUX0NNQVNLX1VJTlQzMkFSUkFZICAgICAg ICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xBU1NfVUlOVDMyQVJSQVkpCisjZGVmaW5lIERVS19I T0JKRUNUX0NNQVNLX0ZMT0FUMzJBUlJBWSAgICAgICAgICgxVUwgPDwgRFVLX0hPQkpFQ1RfQ0xB U1NfRkxPQVQzMkFSUkFZKQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTUFTS19GTE9BVDY0QVJSQVkg ICAgICAgICAoMVVMIDw8IERVS19IT0JKRUNUX0NMQVNTX0ZMT0FUNjRBUlJBWSkKKworI2RlZmlu ZSBEVUtfSE9CSkVDVF9DTUFTS19BTExfQlVGT0JKUyBcCisJKERVS19IT0JKRUNUX0NNQVNLX0FS UkFZQlVGRkVSIHwgXAorCSBEVUtfSE9CSkVDVF9DTUFTS19EQVRBVklFVyB8IFwKKwkgRFVLX0hP QkpFQ1RfQ01BU0tfSU5UOEFSUkFZIHwgXAorCSBEVUtfSE9CSkVDVF9DTUFTS19VSU5UOEFSUkFZ IHwgXAorCSBEVUtfSE9CSkVDVF9DTUFTS19VSU5UOENMQU1QRURBUlJBWSB8IFwKKwkgRFVLX0hP QkpFQ1RfQ01BU0tfSU5UMTZBUlJBWSB8IFwKKwkgRFVLX0hPQkpFQ1RfQ01BU0tfVUlOVDE2QVJS QVkgfCBcCisJIERVS19IT0JKRUNUX0NNQVNLX0lOVDMyQVJSQVkgfCBcCisJIERVS19IT0JKRUNU X0NNQVNLX1VJTlQzMkFSUkFZIHwgXAorCSBEVUtfSE9CSkVDVF9DTUFTS19GTE9BVDMyQVJSQVkg fCBcCisJIERVS19IT0JKRUNUX0NNQVNLX0ZMT0FUNjRBUlJBWSkKKworI2RlZmluZSBEVUtfSE9C SkVDVF9JU19PQkpFTlYoaCkgICAgICAgICAgICAgICAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05V TUJFUigoaCkpID09IERVS19IT0JKRUNUX0NMQVNTX09CSkVOVikKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfSVNfREVDRU5WKGgpICAgICAgICAgICAgICAgKERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1C RVIoKGgpKSA9PSBEVUtfSE9CSkVDVF9DTEFTU19ERUNFTlYpCisjZGVmaW5lIERVS19IT0JKRUNU X0lTX0VOVihoKSAgICAgICAgICAgICAgICAgIChEVUtfSE9CSkVDVF9JU19PQkpFTlYoKGgpKSB8 fCBEVUtfSE9CSkVDVF9JU19ERUNFTlYoKGgpKSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSVNfQVJS QVkoaCkgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19BUlJBWSgoaCkpICAv KiBSZWx5IG9uIGNsYXNzIEFycmF5IDw9PiBleG90aWMgQXJyYXkgKi8KKyNkZWZpbmUgRFVLX0hP QkpFQ1RfSVNfQk9VTkRGVU5DKGgpICAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxBR19C SVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19CT1VOREZVTkMpCisjZGVmaW5lIERVS19I T0JKRUNUX0lTX0NPTVBGVU5DKGgpICAgICAgICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdf QklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfQ09NUEZVTkMpCisjZGVmaW5lIERVS19I T0JKRUNUX0lTX05BVEZVTkMoaCkgICAgICAgICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdf QklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfTkFURlVOQykKKyNpZiBkZWZpbmVkKERV S19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisjZGVmaW5lIERVS19IT0JKRUNUX0lTX0JVRk9C SihoKSAgICAgICAgICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygmKGgpLT5oZHIs IERVS19IT0JKRUNUX0ZMQUdfQlVGT0JKKQorI2Vsc2UKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSVNf QlVGT0JKKGgpICAgICAgICAgICAgICAgMAorI2VuZGlmCisjZGVmaW5lIERVS19IT0JKRUNUX0lT X1RIUkVBRChoKSAgICAgICAgICAgICAgIChEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKCho KSkgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfVEhSRUFEKQorI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZf UFJPWFkpCisjZGVmaW5lIERVS19IT0JKRUNUX0lTX1BST1hZKGgpICAgICAgICAgICAgICAgIERV S19IT0JKRUNUX0hBU19FWE9USUNfUFJPWFlPQkooKGgpKQorI2Vsc2UKKyNkZWZpbmUgRFVLX0hP QkpFQ1RfSVNfUFJPWFkoaCkgICAgICAgICAgICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgRFVL X0hPQkpFQ1RfSVNfTk9OQk9VTkRfRlVOQ1RJT04oaCkgICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxB R19CSVRTKCYoaCktPmhkciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0NPTVBGVU5DIHwgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9C SkVDVF9GTEFHX05BVEZVTkMpCisKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSVNfRlVOQ1RJT04oaCkg ICAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxBR19CSVRTKCYoaCktPmhkciwgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SE9CSkVDVF9GTEFHX0JPVU5ERlVOQyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19DT01QRlVOQyB8IFwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hPQkpFQ1RfRkxBR19OQVRGVU5DKQorCisjZGVmaW5lIERVS19IT0JKRUNUX0lTX0NBTExB QkxFKGgpICAgICAgICAgICAgIERVS19IT0JKRUNUX0hBU19DQUxMQUJMRSgoaCkpCisKKy8qIE9i amVjdCBoYXMgYW55IGV4b3RpYyBiZWhhdmlvcihzKS4gKi8KKyNkZWZpbmUgRFVLX0hPQkpFQ1Rf RVhPVElDX0JFSEFWSU9SX0ZMQUdTICAgICAgKERVS19IT0JKRUNUX0ZMQUdfRVhPVElDX0FSUkFZ IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hPQkpFQ1RfRkxBR19FWE9USUNfQVJHVU1FTlRTIHwgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNfU1RSSU5H T0JKIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hPQkpFQ1RfRkxBR19CVUZPQkogfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19QUk9YWU9CSikKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19CRUhBVklPUihoKSAgICAgRFVLX0hFQVBIRFJf Q0hFQ0tfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRVhPVElDX0JFSEFWSU9SX0ZM QUdTKQorCisvKiBPYmplY3QgaGFzIGFueSB2aXJ0dWFsIHByb3BlcnRpZXMgKG5vdCBjb3VudGlu ZyBQcm94eSBiZWhhdmlvcikuICovCisjZGVmaW5lIERVS19IT0JKRUNUX1ZJUlRVQUxfUFJPUEVS VFlfRkxBR1MgICAgIChEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19BUlJBWSB8IFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdf RVhPVElDX1NUUklOR09CSiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQlVGT0JKKQorI2RlZmluZSBEVUtfSE9CSkVD VF9IQVNfVklSVFVBTF9QUk9QRVJUSUVTKGgpICBEVUtfSEVBUEhEUl9DSEVDS19GTEFHX0JJVFMo JihoKS0+aGRyLCBEVUtfSE9CSkVDVF9WSVJUVUFMX1BST1BFUlRZX0ZMQUdTKQorCisjZGVmaW5l IERVS19IT0JKRUNUX0hBU19FWFRFTlNJQkxFKGgpICAgICAgICAgIERVS19IRUFQSERSX0NIRUNL X0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSkKKyNkZWZp bmUgRFVLX0hPQkpFQ1RfSEFTX0NPTlNUUlVDVEFCTEUoaCkgICAgICAgRFVLX0hFQVBIRFJfQ0hF Q0tfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19DT05TVFJVQ1RBQkxFKQor I2RlZmluZSBEVUtfSE9CSkVDVF9IQVNfQ0FMTEFCTEUoaCkgICAgICAgICAgICBEVUtfSEVBUEhE Ul9DSEVDS19GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0NBTExBQkxFKQor I2RlZmluZSBEVUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKGgpICAgICAgICAgICBEVUtfSEVBUEhE Ul9DSEVDS19GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0JPVU5ERlVOQykK KyNkZWZpbmUgRFVLX0hPQkpFQ1RfSEFTX0NPTVBGVU5DKGgpICAgICAgICAgICAgRFVLX0hFQVBI RFJfQ0hFQ0tfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19DT01QRlVOQykK KyNkZWZpbmUgRFVLX0hPQkpFQ1RfSEFTX05BVEZVTkMoaCkgICAgICAgICAgICAgRFVLX0hFQVBI RFJfQ0hFQ0tfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19OQVRGVU5DKQor I2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKyNkZWZpbmUgRFVLX0hP QkpFQ1RfSEFTX0JVRk9CSihoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxBR19C SVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19CVUZPQkopCisjZWxzZQorI2RlZmluZSBE VUtfSE9CSkVDVF9IQVNfQlVGT0JKKGgpICAgICAgICAgICAgICAwCisjZW5kaWYKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfSEFTX0ZBU1RSRUZTKGgpICAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tf RkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUykKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfSEFTX0FSUkFZX1BBUlQoaCkgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tf RkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19BUlJBWV9QQVJUKQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9IQVNfU1RSSUNUKGgpICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9DSEVD S19GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX1NUUklDVCkKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfSEFTX05PVEFJTChoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tf RkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19OT1RBSUwpCisjZGVmaW5lIERV S19IT0JKRUNUX0hBU19ORVdFTlYoaCkgICAgICAgICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZM QUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfTkVXRU5WKQorI2RlZmluZSBEVUtf SE9CSkVDVF9IQVNfTkFNRUJJTkRJTkcoaCkgICAgICAgICBEVUtfSEVBUEhEUl9DSEVDS19GTEFH X0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX05BTUVCSU5ESU5HKQorI2RlZmluZSBE VUtfSE9CSkVDVF9IQVNfQ1JFQVRFQVJHUyhoKSAgICAgICAgICBEVUtfSEVBUEhEUl9DSEVDS19G TEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0NSRUFURUFSR1MpCisjZGVmaW5l IERVS19IT0JKRUNUX0hBU19IQVZFX0ZJTkFMSVpFUihoKSAgICAgIERVS19IRUFQSERSX0NIRUNL X0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfSEFWRV9GSU5BTElaRVIpCisj ZGVmaW5lIERVS19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkoaCkgICAgICAgIERVS19IRUFQSERS X0NIRUNLX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfRVhPVElDX0FSUkFZ KQorI2RlZmluZSBEVUtfSE9CSkVDVF9IQVNfRVhPVElDX1NUUklOR09CSihoKSAgICBEVUtfSEVB UEhEUl9DSEVDS19GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19T VFJJTkdPQkopCisjZGVmaW5lIERVS19IT0JKRUNUX0hBU19FWE9USUNfQVJHVU1FTlRTKGgpICAg IERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdf RVhPVElDX0FSR1VNRU5UUykKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1BST1hZKQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9IQVNfRVhPVElDX1BST1hZT0JKKGgpICAgICBEVUtfSEVBUEhEUl9DSEVD S19GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19QUk9YWU9CSikK KyNlbHNlCisjZGVmaW5lIERVS19IT0JKRUNUX0hBU19FWE9USUNfUFJPWFlPQkooaCkgICAgIDAK KyNlbmRpZgorI2RlZmluZSBEVUtfSE9CSkVDVF9IQVNfU1BFQ0lBTF9DQUxMKGgpICAgICAgICBE VUtfSEVBUEhEUl9DSEVDS19GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX1NQ RUNJQUxfQ0FMTCkKKworI2RlZmluZSBEVUtfSE9CSkVDVF9TRVRfRVhURU5TSUJMRShoKSAgICAg ICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxB R19FWFRFTlNJQkxFKQorI2RlZmluZSBEVUtfSE9CSkVDVF9TRVRfQ09OU1RSVUNUQUJMRShoKSAg ICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxB R19DT05TVFJVQ1RBQkxFKQorI2RlZmluZSBEVUtfSE9CSkVDVF9TRVRfQ0FMTEFCTEUoaCkgICAg ICAgICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1Rf RkxBR19DQUxMQUJMRSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX0JPVU5ERlVOQyhoKSAgICAg ICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZM QUdfQk9VTkRGVU5DKQorI2RlZmluZSBEVUtfSE9CSkVDVF9TRVRfQ09NUEZVTkMoaCkgICAgICAg ICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxB R19DT01QRlVOQykKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX05BVEZVTkMoaCkgICAgICAgICAg ICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdf TkFURlVOQykKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisjZGVm aW5lIERVS19IT0JKRUNUX1NFVF9CVUZPQkooaCkgICAgICAgICAgICAgIERVS19IRUFQSERSX1NF VF9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0JVRk9CSikKKyNlbmRpZgor I2RlZmluZSBEVUtfSE9CSkVDVF9TRVRfRkFTVFJFRlMoaCkgICAgICAgICAgICBEVUtfSEVBUEhE Ul9TRVRfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUykKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX0FSUkFZX1BBUlQoaCkgICAgICAgICAgRFVLX0hFQVBIRFJf U0VUX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfQVJSQVlfUEFSVCkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX1NUUklDVChoKSAgICAgICAgICAgICAgRFVLX0hFQVBIRFJf U0VUX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfU1RSSUNUKQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9TRVRfTk9UQUlMKGgpICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9TRVRf RkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19OT1RBSUwpCisjZGVmaW5lIERV S19IT0JKRUNUX1NFVF9ORVdFTlYoaCkgICAgICAgICAgICAgIERVS19IRUFQSERSX1NFVF9GTEFH X0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX05FV0VOVikKKyNkZWZpbmUgRFVLX0hP QkpFQ1RfU0VUX05BTUVCSU5ESU5HKGgpICAgICAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklU UygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfTkFNRUJJTkRJTkcpCisjZGVmaW5lIERVS19I T0JKRUNUX1NFVF9DUkVBVEVBUkdTKGgpICAgICAgICAgIERVS19IRUFQSERSX1NFVF9GTEFHX0JJ VFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0NSRUFURUFSR1MpCisjZGVmaW5lIERVS19I T0JKRUNUX1NFVF9IQVZFX0ZJTkFMSVpFUihoKSAgICAgIERVS19IRUFQSERSX1NFVF9GTEFHX0JJ VFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0hBVkVfRklOQUxJWkVSKQorI2RlZmluZSBE VUtfSE9CSkVDVF9TRVRfRVhPVElDX0FSUkFZKGgpICAgICAgICBEVUtfSEVBUEhEUl9TRVRfRkxB R19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNfQVJSQVkpCisjZGVmaW5l IERVS19IT0JKRUNUX1NFVF9FWE9USUNfU1RSSU5HT0JKKGgpICAgIERVS19IRUFQSERSX1NFVF9G TEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19TVFJJTkdPQkopCisj ZGVmaW5lIERVS19IT0JKRUNUX1NFVF9FWE9USUNfQVJHVU1FTlRTKGgpICAgIERVS19IRUFQSERS X1NFVF9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19BUkdVTUVO VFMpCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1Rf U0VUX0VYT1RJQ19QUk9YWU9CSihoKSAgICAgRFVLX0hFQVBIRFJfU0VUX0ZMQUdfQklUUygmKGgp LT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfRVhPVElDX1BST1hZT0JKKQorI2VuZGlmCisjZGVmaW5l IERVS19IT0JKRUNUX1NFVF9TUEVDSUFMX0NBTEwoaCkgICAgICAgIERVS19IRUFQSERSX1NFVF9G TEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX1NQRUNJQUxfQ0FMTCkKKworI2Rl ZmluZSBEVUtfSE9CSkVDVF9DTEVBUl9FWFRFTlNJQkxFKGgpICAgICAgICBEVUtfSEVBUEhEUl9D TEVBUl9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUpCisj ZGVmaW5lIERVS19IT0JKRUNUX0NMRUFSX0NPTlNUUlVDVEFCTEUoaCkgICAgIERVS19IRUFQSERS X0NMRUFSX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfQ09OU1RSVUNUQUJM RSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xFQVJfQ0FMTEFCTEUoaCkgICAgICAgICAgRFVLX0hF QVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19DQUxMQUJM RSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xFQVJfQk9VTkRGVU5DKGgpICAgICAgICAgRFVLX0hF QVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19CT1VOREZV TkMpCisjZGVmaW5lIERVS19IT0JKRUNUX0NMRUFSX0NPTVBGVU5DKGgpICAgICAgICAgIERVS19I RUFQSERSX0NMRUFSX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfQ09NUEZV TkMpCisjZGVmaW5lIERVS19IT0JKRUNUX0NMRUFSX05BVEZVTkMoaCkgICAgICAgICAgIERVS19I RUFQSERSX0NMRUFSX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfTkFURlVO QykKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisjZGVmaW5lIERV S19IT0JKRUNUX0NMRUFSX0JVRk9CSihoKSAgICAgICAgICAgIERVS19IRUFQSERSX0NMRUFSX0ZM QUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfQlVGT0JKKQorI2VuZGlmCisjZGVm aW5lIERVS19IT0JKRUNUX0NMRUFSX0ZBU1RSRUZTKGgpICAgICAgICAgIERVS19IRUFQSERSX0NM RUFSX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMpCisjZGVm aW5lIERVS19IT0JKRUNUX0NMRUFSX0FSUkFZX1BBUlQoaCkgICAgICAgIERVS19IRUFQSERSX0NM RUFSX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfQVJSQVlfUEFSVCkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfQ0xFQVJfU1RSSUNUKGgpICAgICAgICAgICAgRFVLX0hFQVBIRFJf Q0xFQVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19TVFJJQ1QpCisjZGVm aW5lIERVS19IT0JKRUNUX0NMRUFSX05PVEFJTChoKSAgICAgICAgICAgIERVS19IRUFQSERSX0NM RUFSX0ZMQUdfQklUUygmKGgpLT5oZHIsIERVS19IT0JKRUNUX0ZMQUdfTk9UQUlMKQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9DTEVBUl9ORVdFTlYoaCkgICAgICAgICAgICBEVUtfSEVBUEhEUl9DTEVB Ul9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX05FV0VOVikKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfQ0xFQVJfTkFNRUJJTkRJTkcoaCkgICAgICAgRFVLX0hFQVBIRFJfQ0xFQVJf RkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19OQU1FQklORElORykKKyNkZWZp bmUgRFVLX0hPQkpFQ1RfQ0xFQVJfQ1JFQVRFQVJHUyhoKSAgICAgICAgRFVLX0hFQVBIRFJfQ0xF QVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19DUkVBVEVBUkdTKQorI2Rl ZmluZSBEVUtfSE9CSkVDVF9DTEVBUl9IQVZFX0ZJTkFMSVpFUihoKSAgICBEVUtfSEVBUEhEUl9D TEVBUl9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0hBVkVfRklOQUxJWkVS KQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEVBUl9FWE9USUNfQVJSQVkoaCkgICAgICBEVUtfSEVB UEhEUl9DTEVBUl9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19B UlJBWSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xFQVJfRVhPVElDX1NUUklOR09CSihoKSAgRFVL X0hFQVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19FWE9U SUNfU1RSSU5HT0JKKQorI2RlZmluZSBEVUtfSE9CSkVDVF9DTEVBUl9FWE9USUNfQVJHVU1FTlRT KGgpICBEVUtfSEVBUEhEUl9DTEVBUl9GTEFHX0JJVFMoJihoKS0+aGRyLCBEVUtfSE9CSkVDVF9G TEFHX0VYT1RJQ19BUkdVTUVOVFMpCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfQ0xFQVJfRVhPVElDX1BST1hZT0JKKGgpICAgRFVLX0hFQVBIRFJf Q0xFQVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNfUFJPWFlP QkopCisjZW5kaWYKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xFQVJfU1BFQ0lBTF9DQUxMKGgpICAg ICAgRFVLX0hFQVBIRFJfQ0xFQVJfRkxBR19CSVRTKCYoaCktPmhkciwgRFVLX0hPQkpFQ1RfRkxB R19TUEVDSUFMX0NBTEwpCisKKy8qIE9iamVjdCBjYW4vY2Fubm90IHVzZSBGQVNUUkVGUywgaS5l LiBoYXMgbm8gc3Ryb25nIHJlZmVyZW5jZSBmaWVsZHMgYmV5b25kCisgKiBkdWtfaG9iamVjdCBi YXNlIGhlYWRlci4gIFRoaXMgaXMgdXNlZCBqdXN0IGZvciBhc3NlcnRzIHNvIGRvZXNuJ3QgbmVl ZCB0bworICogYmUgb3B0aW1pemVkLgorICovCisjZGVmaW5lIERVS19IT0JKRUNUX1BST0hJQklU U19GQVNUUkVGUyhoKSBcCisJKERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKChoKSkgfHwgRFVLX0hP QkpFQ1RfSVNfREVDRU5WKChoKSkgfHwgRFVLX0hPQkpFQ1RfSVNfT0JKRU5WKChoKSkgfHwgXAor CSBEVUtfSE9CSkVDVF9JU19CVUZPQkooKGgpKSB8fCBEVUtfSE9CSkVDVF9JU19USFJFQUQoKGgp KSB8fCBEVUtfSE9CSkVDVF9JU19QUk9YWSgoaCkpIHx8IFwKKwkgRFVLX0hPQkpFQ1RfSVNfQk9V TkRGVU5DKChoKSkpCisjZGVmaW5lIERVS19IT0JKRUNUX0FMTE9XU19GQVNUUkVGUyhoKSAoIURV S19IT0JKRUNUX1BST0hJQklUU19GQVNUUkVGUygoaCkpKQorCisvKiBGbGFncyB1c2VkIGZvciBw cm9wZXJ0eSBhdHRyaWJ1dGVzIGluIGR1a19wcm9wZGVzYyBhbmQgcGFja2VkIGZsYWdzLgorICog TXVzdCBmaXQgaW50byA4IGJpdHMuCisgKi8KKyNkZWZpbmUgRFVLX1BST1BERVNDX0ZMQUdfV1JJ VEFCTEUgICAgICAgICAgICAgICgxVSA8PCAwKSAgICAvKiBFNSBTZWN0aW9uIDguNi4xICovCisj ZGVmaW5lIERVS19QUk9QREVTQ19GTEFHX0VOVU1FUkFCTEUgICAgICAgICAgICAoMVUgPDwgMSkg ICAgLyogRTUgU2VjdGlvbiA4LjYuMSAqLworI2RlZmluZSBEVUtfUFJPUERFU0NfRkxBR19DT05G SUdVUkFCTEUgICAgICAgICAgKDFVIDw8IDIpICAgIC8qIEU1IFNlY3Rpb24gOC42LjEgKi8KKyNk ZWZpbmUgRFVLX1BST1BERVNDX0ZMQUdfQUNDRVNTT1IgICAgICAgICAgICAgICgxVSA8PCAzKSAg ICAvKiBhY2Nlc3NvciAqLworI2RlZmluZSBEVUtfUFJPUERFU0NfRkxBR19WSVJUVUFMICAgICAg ICAgICAgICAgKDFVIDw8IDQpICAgIC8qIHByb3BlcnR5IGlzIHZpcnR1YWw6IHVzZWQgaW4gZHVr X3Byb3BkZXNjLCBuZXZlciBzdG9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICh1c2VkIGJ5IGUuZy4gYnVmZmVyIHZpcnR1 YWwgcHJvcGVydGllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVUtfUFJPUERFU0NfRkxBR1NfTUFTSyAg ICAgICAgICAgICAgICAgKERVS19QUk9QREVTQ19GTEFHX1dSSVRBQkxFIHwgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFH X0VOVU1FUkFCTEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFIHwgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFHX0FD Q0VTU09SKQorCisvKiBBZGRpdGlvbmFsIGZsYWdzIHdoaWNoIGFyZSBwYXNzZWQgaW4gdGhlIHNh bWUgZmxhZ3MgYXJndW1lbnQgYXMgcHJvcGVydHkKKyAqIGZsYWdzIGJ1dCBhcmUgbm90IHN0b3Jl ZCBpbiBvYmplY3QgcHJvcGVydGllcy4KKyAqLworI2RlZmluZSBEVUtfUFJPUERFU0NfRkxBR19O T19PVkVSV1JJVEUgICAgICAgICAgKDFVIDw8IDQpICAgIC8qIGludGVybmFsIGRlZmluZSBwcm9w ZXJ0eTogc2tpcCB3cml0ZSBzaWxlbnRseSBpZiBleGlzdHMgKi8KKworLyogQ29udmVuaWVuY2Ug ZGVmaW5lcyBmb3IgcHJvcGVydHkgYXR0cmlidXRlcy4gKi8KKyNkZWZpbmUgRFVLX1BST1BERVND X0ZMQUdTX05PTkUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX1BST1BERVNDX0ZMQUdT X1cgICAgICAgICAgICAgICAgICAgIChEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSkKKyNkZWZp bmUgRFVLX1BST1BERVNDX0ZMQUdTX0UgICAgICAgICAgICAgICAgICAgIChEVUtfUFJPUERFU0Nf RkxBR19FTlVNRVJBQkxFKQorI2RlZmluZSBEVUtfUFJPUERFU0NfRkxBR1NfQyAgICAgICAgICAg ICAgICAgICAgKERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX1BS T1BERVNDX0ZMQUdTX1dFICAgICAgICAgICAgICAgICAgIChEVUtfUFJPUERFU0NfRkxBR19XUklU QUJMRSB8IERVS19QUk9QREVTQ19GTEFHX0VOVU1FUkFCTEUpCisjZGVmaW5lIERVS19QUk9QREVT Q19GTEFHU19XQyAgICAgICAgICAgICAgICAgICAoRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEUg fCBEVUtfUFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEUpCisjZGVmaW5lIERVS19QUk9QREVTQ19G TEFHU19FQyAgICAgICAgICAgICAgICAgICAoRFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSB8 IERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX1BST1BERVNDX0ZM QUdTX1dFQyAgICAgICAgICAgICAgICAgIChEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSB8IFwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfUFJP UERFU0NfRkxBR19FTlVNRVJBQkxFIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkKKworLyog RmxhZ3MgZm9yIGR1a19ob2JqZWN0X2dldF9vd25fcHJvcGRlc2MoKSBhbmQgdmFyaWFudHMuICov CisjZGVmaW5lIERVS19HRVRERVNDX0ZMQUdfUFVTSF9WQUxVRSAgICAgICAgICAoMVUgPDwgMCkg IC8qIHB1c2ggdmFsdWUgdG8gc3RhY2sgKi8KKyNkZWZpbmUgRFVLX0dFVERFU0NfRkxBR19JR05P UkVfUFJPVE9MT09QICAgICgxVSA8PCAxKSAgLyogZG9uJ3QgdGhyb3cgZm9yIHByb3RvdHlwZSBs b29wICovCisKKy8qCisgKiAgTWFjcm8gZm9yIG9iamVjdCB2YWxpZGl0eSBjaGVjaworICoKKyAq ICBBc3NlcnQgZm9yIGN1cnJlbnRseSBndWFyYW50ZWVkIHJlbGF0aW9ucyBiZXR3ZWVuIGZsYWdz LCBmb3IgaW5zdGFuY2UuCisgKi8KKworI2RlZmluZSBEVUtfQVNTRVJUX0hPQkpFQ1RfVkFMSUQo aCkgZG8geyBcCisJCURVS19BU1NFUlQoKGgpICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoIURV S19IT0JKRUNUX0lTX0NBTExBQkxFKChoKSkgfHwgXAorCQkgICAgICAgICAgIERVS19IT0JKRUNU X0dFVF9DTEFTU19OVU1CRVIoKGgpKSA9PSBEVUtfSE9CSkVDVF9DTEFTU19GVU5DVElPTik7IFwK KwkJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSVNfQlVGT0JKKChoKSkgfHwgXAorCQkgICAgICAg ICAgIChEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKChoKSkgPT0gRFVLX0hPQkpFQ1RfQ0xB U1NfQVJSQVlCVUZGRVIgfHwgXAorCQkgICAgICAgICAgICBEVUtfSE9CSkVDVF9HRVRfQ0xBU1Nf TlVNQkVSKChoKSkgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfREFUQVZJRVcgfHwgXAorCQkgICAgICAg ICAgICBEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKChoKSkgPT0gRFVLX0hPQkpFQ1RfQ0xB U1NfSU5UOEFSUkFZIHx8IFwKKwkJICAgICAgICAgICAgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05V TUJFUigoaCkpID09IERVS19IT0JKRUNUX0NMQVNTX1VJTlQ4QVJSQVkgfHwgXAorCQkgICAgICAg ICAgICBEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKChoKSkgPT0gRFVLX0hPQkpFQ1RfQ0xB U1NfVUlOVDhDTEFNUEVEQVJSQVkgfHwgXAorCQkgICAgICAgICAgICBEVUtfSE9CSkVDVF9HRVRf Q0xBU1NfTlVNQkVSKChoKSkgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfSU5UMTZBUlJBWSB8fCBcCisJ CSAgICAgICAgICAgIERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoKGgpKSA9PSBEVUtfSE9C SkVDVF9DTEFTU19VSU5UMTZBUlJBWSB8fCBcCisJCSAgICAgICAgICAgIERVS19IT0JKRUNUX0dF VF9DTEFTU19OVU1CRVIoKGgpKSA9PSBEVUtfSE9CSkVDVF9DTEFTU19JTlQzMkFSUkFZIHx8IFwK KwkJICAgICAgICAgICAgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUigoaCkpID09IERVS19I T0JKRUNUX0NMQVNTX1VJTlQzMkFSUkFZIHx8IFwKKwkJICAgICAgICAgICAgRFVLX0hPQkpFQ1Rf R0VUX0NMQVNTX05VTUJFUigoaCkpID09IERVS19IT0JKRUNUX0NMQVNTX0ZMT0FUMzJBUlJBWSB8 fCBcCisJCSAgICAgICAgICAgIERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoKGgpKSA9PSBE VUtfSE9CSkVDVF9DTEFTU19GTE9BVDY0QVJSQVkpKTsgXAorCQkvKiBPYmplY3QgaXMgYW4gQXJy YXkgPD0+IG9iamVjdCBoYXMgZXhvdGljIGFycmF5IGJlaGF2aW9yICovIFwKKwkJRFVLX0FTU0VS VCgoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUigoaCkpID09IERVS19IT0JKRUNUX0NMQVNT X0FSUkFZICYmIERVS19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkoKGgpKSkgfHwgXAorCQkgICAg ICAgICAgIChEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKChoKSkgIT0gRFVLX0hPQkpFQ1Rf Q0xBU1NfQVJSQVkgJiYgIURVS19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkoKGgpKSkpOyBcCisJ fSB3aGlsZSAoMCkKKworLyoKKyAqICBNYWNyb3MgdG8gYWNjZXNzIHRoZSAncHJvcHMnIGFsbG9j YXRpb24uCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisjZGVmaW5lIERV S19IT0JKRUNUX0dFVF9QUk9QUyhoZWFwLGgpIFwKKwkoKGR1a191aW50OF90ICopIERVS19VU0Vf SEVBUFBUUl9ERUMxNigoaGVhcCktPmhlYXBfdWRhdGEsICgoZHVrX2hlYXBoZHIgKikgKGgpKS0+ aF9leHRyYTE2KSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX1BST1BTKGhlYXAsaCx4KSBkbyB7 IFwKKwkJKChkdWtfaGVhcGhkciAqKSAoaCkpLT5oX2V4dHJhMTYgPSBEVUtfVVNFX0hFQVBQVFJf RU5DMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAodm9pZCAqKSAoeCkpOyBcCisJfSB3aGlsZSAoMCkK KyNlbHNlCisjZGVmaW5lIERVS19IT0JKRUNUX0dFVF9QUk9QUyhoZWFwLGgpIFwKKwkoKGgpLT5w cm9wcykKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX1BST1BTKGhlYXAsaCx4KSBkbyB7IFwKKwkJ KGgpLT5wcm9wcyA9IChkdWtfdWludDhfdCAqKSAoeCk7IFwKKwl9IHdoaWxlICgwKQorI2VuZGlm CisKKyNpZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9MQVlPVVRfMSkKKy8qIExBWU9VVCAxICov CisjZGVmaW5lIERVS19IT0JKRUNUX0VfR0VUX0tFWV9CQVNFKGhlYXAsaCkgXAorCSgoZHVrX2hz dHJpbmcgKiopICh2b2lkICopICggXAorCQlEVUtfSE9CSkVDVF9HRVRfUFJPUFMoKGhlYXApLCAo aCkpIFwKKwkpKQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9CQVNFKGhlYXAsaCkg XAorCSgoZHVrX3Byb3B2YWx1ZSAqKSAodm9pZCAqKSAoIFwKKwkJRFVLX0hPQkpFQ1RfR0VUX1BS T1BTKChoZWFwKSwgKGgpKSArIFwKKwkJCURVS19IT0JKRUNUX0dFVF9FU0laRSgoaCkpICogc2l6 ZW9mKGR1a19oc3RyaW5nICopIFwKKwkpKQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX0dFVF9GTEFH U19CQVNFKGhlYXAsaCkgXAorCSgoZHVrX3VpbnQ4X3QgKikgKHZvaWQgKikgKCBcCisJCURVS19I T0JKRUNUX0dFVF9QUk9QUygoaGVhcCksIChoKSkgKyBEVUtfSE9CSkVDVF9HRVRfRVNJWkUoKGgp KSAqIChzaXplb2YoZHVrX2hzdHJpbmcgKikgKyBzaXplb2YoZHVrX3Byb3B2YWx1ZSkpIFwKKwkp KQorI2RlZmluZSBEVUtfSE9CSkVDVF9BX0dFVF9CQVNFKGhlYXAsaCkgXAorCSgoZHVrX3R2YWwg KikgKHZvaWQgKikgKCBcCisJCURVS19IT0JKRUNUX0dFVF9QUk9QUygoaGVhcCksIChoKSkgKyBc CisJCQlEVUtfSE9CSkVDVF9HRVRfRVNJWkUoKGgpKSAqIChzaXplb2YoZHVrX2hzdHJpbmcgKikg KyBzaXplb2YoZHVrX3Byb3B2YWx1ZSkgKyBzaXplb2YoZHVrX3VpbnQ4X3QpKSBcCisJKSkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfSF9HRVRfQkFTRShoZWFwLGgpIFwKKwkoKGR1a191aW50MzJfdCAq KSAodm9pZCAqKSAoIFwKKwkJRFVLX0hPQkpFQ1RfR0VUX1BST1BTKChoZWFwKSwgKGgpKSArIFwK KwkJCURVS19IT0JKRUNUX0dFVF9FU0laRSgoaCkpICogKHNpemVvZihkdWtfaHN0cmluZyAqKSAr IHNpemVvZihkdWtfcHJvcHZhbHVlKSArIHNpemVvZihkdWtfdWludDhfdCkpICsgXAorCQkJRFVL X0hPQkpFQ1RfR0VUX0FTSVpFKChoKSkgKiBzaXplb2YoZHVrX3R2YWwpIFwKKwkpKQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9QX0NPTVBVVEVfU0laRShuX2VudCxuX2FycixuX2hhc2gpIFwKKwkoIFwK KwkJKG5fZW50KSAqIChzaXplb2YoZHVrX2hzdHJpbmcgKikgKyBzaXplb2YoZHVrX3Byb3B2YWx1 ZSkgKyBzaXplb2YoZHVrX3VpbnQ4X3QpKSArIFwKKwkJKG5fYXJyKSAqIHNpemVvZihkdWtfdHZh bCkgKyBcCisJCShuX2hhc2gpICogc2l6ZW9mKGR1a191aW50MzJfdCkgXAorCSkKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfUF9TRVRfUkVBTExPQ19QVFJTKHBfYmFzZSxzZXRfZV9rLHNldF9lX3B2LHNl dF9lX2Ysc2V0X2Esc2V0X2gsbl9lbnQsbl9hcnIsbl9oYXNoKSAgZG8geyBcCisJCShzZXRfZV9r KSA9IChkdWtfaHN0cmluZyAqKikgKHZvaWQgKikgKHBfYmFzZSk7IFwKKwkJKHNldF9lX3B2KSA9 IChkdWtfcHJvcHZhbHVlICopICh2b2lkICopICgoc2V0X2VfaykgKyAobl9lbnQpKTsgXAorCQko c2V0X2VfZikgPSAoZHVrX3VpbnQ4X3QgKikgKHZvaWQgKikgKChzZXRfZV9wdikgKyAobl9lbnQp KTsgXAorCQkoc2V0X2EpID0gKGR1a190dmFsICopICh2b2lkICopICgoc2V0X2VfZikgKyAobl9l bnQpKTsgXAorCQkoc2V0X2gpID0gKGR1a191aW50MzJfdCAqKSAodm9pZCAqKSAoKHNldF9hKSAr IChuX2FycikpOyBcCisJfSB3aGlsZSAoMCkKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9IT0JKRUNU X0xBWU9VVF8yKQorLyogTEFZT1VUIDIgKi8KKyNpZiAoRFVLX1VTRV9BTElHTl9CWSA9PSA0KQor I2RlZmluZSBEVUtfSE9CSkVDVF9FX0ZMQUdfUEFERElORyhlX3N6KSAoKDQgLSAoZV9zeikpICYg MHgwMykKKyNlbGlmIChEVUtfVVNFX0FMSUdOX0JZID09IDgpCisjZGVmaW5lIERVS19IT0JKRUNU X0VfRkxBR19QQURESU5HKGVfc3opICgoOCAtIChlX3N6KSkgJiAweDA3KQorI2VsaWYgKERVS19V U0VfQUxJR05fQlkgPT0gMSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9GTEFHX1BBRERJTkcoZV9z eikgMAorI2Vsc2UKKyNlcnJvciBpbnZhbGlkIERVS19VU0VfQUxJR05fQlkKKyNlbmRpZgorI2Rl ZmluZSBEVUtfSE9CSkVDVF9FX0dFVF9LRVlfQkFTRShoZWFwLGgpIFwKKwkoKGR1a19oc3RyaW5n ICoqKSAodm9pZCAqKSAoIFwKKwkJRFVLX0hPQkpFQ1RfR0VUX1BST1BTKChoZWFwKSwgKGgpKSAr IFwKKwkJCURVS19IT0JKRUNUX0dFVF9FU0laRSgoaCkpICogc2l6ZW9mKGR1a19wcm9wdmFsdWUp IFwKKwkpKQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9CQVNFKGhlYXAsaCkgXAor CSgoZHVrX3Byb3B2YWx1ZSAqKSAodm9pZCAqKSAoIFwKKwkJRFVLX0hPQkpFQ1RfR0VUX1BST1BT KChoZWFwKSwgKGgpKSBcCisJKSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9HRVRfRkxBR1NfQkFT RShoZWFwLGgpIFwKKwkoKGR1a191aW50OF90ICopICh2b2lkICopICggXAorCQlEVUtfSE9CSkVD VF9HRVRfUFJPUFMoKGhlYXApLCAoaCkpICsgRFVLX0hPQkpFQ1RfR0VUX0VTSVpFKChoKSkgKiAo c2l6ZW9mKGR1a19oc3RyaW5nICopICsgc2l6ZW9mKGR1a19wcm9wdmFsdWUpKSBcCisJKSkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfQV9HRVRfQkFTRShoZWFwLGgpIFwKKwkoKGR1a190dmFsICopICh2 b2lkICopICggXAorCQlEVUtfSE9CSkVDVF9HRVRfUFJPUFMoKGhlYXApLCAoaCkpICsgXAorCQkJ RFVLX0hPQkpFQ1RfR0VUX0VTSVpFKChoKSkgKiAoc2l6ZW9mKGR1a19oc3RyaW5nICopICsgc2l6 ZW9mKGR1a19wcm9wdmFsdWUpICsgc2l6ZW9mKGR1a191aW50OF90KSkgKyBcCisJCQlEVUtfSE9C SkVDVF9FX0ZMQUdfUEFERElORyhEVUtfSE9CSkVDVF9HRVRfRVNJWkUoKGgpKSkgXAorCSkpCisj ZGVmaW5lIERVS19IT0JKRUNUX0hfR0VUX0JBU0UoaGVhcCxoKSBcCisJKChkdWtfdWludDMyX3Qg KikgKHZvaWQgKikgKCBcCisJCURVS19IT0JKRUNUX0dFVF9QUk9QUygoaGVhcCksIChoKSkgKyBc CisJCQlEVUtfSE9CSkVDVF9HRVRfRVNJWkUoKGgpKSAqIChzaXplb2YoZHVrX2hzdHJpbmcgKikg KyBzaXplb2YoZHVrX3Byb3B2YWx1ZSkgKyBzaXplb2YoZHVrX3VpbnQ4X3QpKSArIFwKKwkJCURV S19IT0JKRUNUX0VfRkxBR19QQURESU5HKERVS19IT0JKRUNUX0dFVF9FU0laRSgoaCkpKSArIFwK KwkJCURVS19IT0JKRUNUX0dFVF9BU0laRSgoaCkpICogc2l6ZW9mKGR1a190dmFsKSBcCisJKSkK KyNkZWZpbmUgRFVLX0hPQkpFQ1RfUF9DT01QVVRFX1NJWkUobl9lbnQsbl9hcnIsbl9oYXNoKSBc CisJKCBcCisJCShuX2VudCkgKiAoc2l6ZW9mKGR1a19oc3RyaW5nICopICsgc2l6ZW9mKGR1a19w cm9wdmFsdWUpICsgc2l6ZW9mKGR1a191aW50OF90KSkgKyBcCisJCURVS19IT0JKRUNUX0VfRkxB R19QQURESU5HKChuX2VudCkpICsgXAorCQkobl9hcnIpICogc2l6ZW9mKGR1a190dmFsKSArIFwK KwkJKG5faGFzaCkgKiBzaXplb2YoZHVrX3VpbnQzMl90KSBcCisJKQorI2RlZmluZSBEVUtfSE9C SkVDVF9QX1NFVF9SRUFMTE9DX1BUUlMocF9iYXNlLHNldF9lX2ssc2V0X2VfcHYsc2V0X2VfZixz ZXRfYSxzZXRfaCxuX2VudCxuX2FycixuX2hhc2gpICBkbyB7IFwKKwkJKHNldF9lX3B2KSA9IChk dWtfcHJvcHZhbHVlICopICh2b2lkICopIChwX2Jhc2UpOyBcCisJCShzZXRfZV9rKSA9IChkdWtf aHN0cmluZyAqKikgKHZvaWQgKikgKChzZXRfZV9wdikgKyAobl9lbnQpKTsgXAorCQkoc2V0X2Vf ZikgPSAoZHVrX3VpbnQ4X3QgKikgKHZvaWQgKikgKChzZXRfZV9rKSArIChuX2VudCkpOyBcCisJ CShzZXRfYSkgPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgKCgoZHVrX3VpbnQ4X3QgKikgKHNldF9l X2YpKSArIFwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a191 aW50OF90KSAqIChuX2VudCkgKyBcCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IT0JKRUNUX0VfRkxBR19QQURESU5HKChuX2VudCkpKTsgXAorCQkoc2V0X2gpID0gKGR1 a191aW50MzJfdCAqKSAodm9pZCAqKSAoKHNldF9hKSArIChuX2FycikpOyBcCisJfSB3aGlsZSAo MCkKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9IT0JKRUNUX0xBWU9VVF8zKQorLyogTEFZT1VUIDMg Ki8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9HRVRfS0VZX0JBU0UoaGVhcCxoKSBcCisJKChkdWtf aHN0cmluZyAqKikgKHZvaWQgKikgKCBcCisJCURVS19IT0JKRUNUX0dFVF9QUk9QUygoaGVhcCks IChoKSkgKyBcCisJCQlEVUtfSE9CSkVDVF9HRVRfRVNJWkUoKGgpKSAqIHNpemVvZihkdWtfcHJv cHZhbHVlKSArIFwKKwkJCURVS19IT0JKRUNUX0dFVF9BU0laRSgoaCkpICogc2l6ZW9mKGR1a190 dmFsKSBcCisJKSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfQkFTRShoZWFwLGgp IFwKKwkoKGR1a19wcm9wdmFsdWUgKikgKHZvaWQgKikgKCBcCisJCURVS19IT0JKRUNUX0dFVF9Q Uk9QUygoaGVhcCksIChoKSkgXAorCSkpCisjZGVmaW5lIERVS19IT0JKRUNUX0VfR0VUX0ZMQUdT X0JBU0UoaGVhcCxoKSBcCisJKChkdWtfdWludDhfdCAqKSAodm9pZCAqKSAoIFwKKwkJRFVLX0hP QkpFQ1RfR0VUX1BST1BTKChoZWFwKSwgKGgpKSArIFwKKwkJCURVS19IT0JKRUNUX0dFVF9FU0la RSgoaCkpICogKHNpemVvZihkdWtfcHJvcHZhbHVlKSArIHNpemVvZihkdWtfaHN0cmluZyAqKSkg KyBcCisJCQlEVUtfSE9CSkVDVF9HRVRfQVNJWkUoKGgpKSAqIHNpemVvZihkdWtfdHZhbCkgKyBc CisJCQlEVUtfSE9CSkVDVF9HRVRfSFNJWkUoKGgpKSAqIHNpemVvZihkdWtfdWludDMyX3QpIFwK KwkpKQorI2RlZmluZSBEVUtfSE9CSkVDVF9BX0dFVF9CQVNFKGhlYXAsaCkgXAorCSgoZHVrX3R2 YWwgKikgKHZvaWQgKikgKCBcCisJCURVS19IT0JKRUNUX0dFVF9QUk9QUygoaGVhcCksIChoKSkg KyBcCisJCQlEVUtfSE9CSkVDVF9HRVRfRVNJWkUoKGgpKSAqIHNpemVvZihkdWtfcHJvcHZhbHVl KSBcCisJKSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSF9HRVRfQkFTRShoZWFwLGgpIFwKKwkoKGR1 a191aW50MzJfdCAqKSAodm9pZCAqKSAoIFwKKwkJRFVLX0hPQkpFQ1RfR0VUX1BST1BTKChoZWFw KSwgKGgpKSArIFwKKwkJCURVS19IT0JKRUNUX0dFVF9FU0laRSgoaCkpICogKHNpemVvZihkdWtf cHJvcHZhbHVlKSArIHNpemVvZihkdWtfaHN0cmluZyAqKSkgKyBcCisJCQlEVUtfSE9CSkVDVF9H RVRfQVNJWkUoKGgpKSAqIHNpemVvZihkdWtfdHZhbCkgXAorCSkpCisjZGVmaW5lIERVS19IT0JK RUNUX1BfQ09NUFVURV9TSVpFKG5fZW50LG5fYXJyLG5faGFzaCkgXAorCSggXAorCQkobl9lbnQp ICogKHNpemVvZihkdWtfcHJvcHZhbHVlKSArIHNpemVvZihkdWtfaHN0cmluZyAqKSArIHNpemVv ZihkdWtfdWludDhfdCkpICsgXAorCQkobl9hcnIpICogc2l6ZW9mKGR1a190dmFsKSArIFwKKwkJ KG5faGFzaCkgKiBzaXplb2YoZHVrX3VpbnQzMl90KSBcCisJKQorI2RlZmluZSBEVUtfSE9CSkVD VF9QX1NFVF9SRUFMTE9DX1BUUlMocF9iYXNlLHNldF9lX2ssc2V0X2VfcHYsc2V0X2VfZixzZXRf YSxzZXRfaCxuX2VudCxuX2FycixuX2hhc2gpICBkbyB7IFwKKwkJKHNldF9lX3B2KSA9IChkdWtf cHJvcHZhbHVlICopICh2b2lkICopIChwX2Jhc2UpOyBcCisJCShzZXRfYSkgPSAoZHVrX3R2YWwg KikgKHZvaWQgKikgKChzZXRfZV9wdikgKyAobl9lbnQpKTsgXAorCQkoc2V0X2VfaykgPSAoZHVr X2hzdHJpbmcgKiopICh2b2lkICopICgoc2V0X2EpICsgKG5fYXJyKSk7IFwKKwkJKHNldF9oKSA9 IChkdWtfdWludDMyX3QgKikgKHZvaWQgKikgKChzZXRfZV9rKSArIChuX2VudCkpOyBcCisJCShz ZXRfZV9mKSA9IChkdWtfdWludDhfdCAqKSAodm9pZCAqKSAoKHNldF9oKSArIChuX2hhc2gpKTsg XAorCX0gd2hpbGUgKDApCisjZWxzZQorI2Vycm9yIGludmFsaWQgaG9iamVjdCBsYXlvdXQgZGVm aW5lcworI2VuZGlmICAvKiBob2JqZWN0IHByb3BlcnR5IGxheW91dCAqLworCisjZGVmaW5lIERV S19IT0JKRUNUX1BfQUxMT0NfU0laRShoKSBcCisJRFVLX0hPQkpFQ1RfUF9DT01QVVRFX1NJWkUo RFVLX0hPQkpFQ1RfR0VUX0VTSVpFKChoKSksIERVS19IT0JKRUNUX0dFVF9BU0laRSgoaCkpLCBE VUtfSE9CSkVDVF9HRVRfSFNJWkUoKGgpKSkKKworI2RlZmluZSBEVUtfSE9CSkVDVF9FX0dFVF9L RVkoaGVhcCxoLGkpICAgICAgICAgICAgICAoRFVLX0hPQkpFQ1RfRV9HRVRfS0VZX0JBU0UoKGhl YXApLCAoaCkpWyhpKV0pCisjZGVmaW5lIERVS19IT0JKRUNUX0VfR0VUX0tFWV9QVFIoaGVhcCxo LGkpICAgICAgICAgICgmRFVLX0hPQkpFQ1RfRV9HRVRfS0VZX0JBU0UoKGhlYXApLCAoaCkpWyhp KV0pCisjZGVmaW5lIERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFKGhlYXAsaCxpKSAgICAgICAgICAg IChEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9CQVNFKChoZWFwKSwgKGgpKVsoaSldKQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9QVFIoaGVhcCxoLGkpICAgICAgICAoJkRVS19IT0JK RUNUX0VfR0VUX1ZBTFVFX0JBU0UoKGhlYXApLCAoaCkpWyhpKV0pCisjZGVmaW5lIERVS19IT0JK RUNUX0VfR0VUX1ZBTFVFX1RWQUwoaGVhcCxoLGkpICAgICAgIChEVUtfSE9CSkVDVF9FX0dFVF9W QUxVRSgoaGVhcCksIChoKSwgKGkpKS52KQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxV RV9UVkFMX1BUUihoZWFwLGgsaSkgICAoJkRVS19IT0JKRUNUX0VfR0VUX1ZBTFVFKChoZWFwKSwg KGgpLCAoaSkpLnYpCisjZGVmaW5lIERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX0dFVFRFUihoZWFw LGgsaSkgICAgIChEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRSgoaGVhcCksIChoKSwgKGkpKS5hLmdl dCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfR0VUVEVSX1BUUihoZWFwLGgsaSkg KCZEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRSgoaGVhcCksIChoKSwgKGkpKS5hLmdldCkKKyNkZWZp bmUgRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfU0VUVEVSKGhlYXAsaCxpKSAgICAgKERVS19IT0JK RUNUX0VfR0VUX1ZBTFVFKChoZWFwKSwgKGgpLCAoaSkpLmEuc2V0KQorI2RlZmluZSBEVUtfSE9C SkVDVF9FX0dFVF9WQUxVRV9TRVRURVJfUFRSKGhlYXAsaCxpKSAoJkRVS19IT0JKRUNUX0VfR0VU X1ZBTFVFKChoZWFwKSwgKGgpLCAoaSkpLmEuc2V0KQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX0dF VF9GTEFHUyhoZWFwLGgsaSkgICAgICAgICAgICAoRFVLX0hPQkpFQ1RfRV9HRVRfRkxBR1NfQkFT RSgoaGVhcCksIChoKSlbKGkpXSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9HRVRfRkxBR1NfUFRS KGhlYXAsaCxpKSAgICAgICAgKCZEVUtfSE9CSkVDVF9FX0dFVF9GTEFHU19CQVNFKChoZWFwKSwg KGgpKVsoaSldKQorI2RlZmluZSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRShoZWFwLGgsaSkgICAg ICAgICAgICAoRFVLX0hPQkpFQ1RfQV9HRVRfQkFTRSgoaGVhcCksIChoKSlbKGkpXSkKKyNkZWZp bmUgRFVLX0hPQkpFQ1RfQV9HRVRfVkFMVUVfUFRSKGhlYXAsaCxpKSAgICAgICAgKCZEVUtfSE9C SkVDVF9BX0dFVF9CQVNFKChoZWFwKSwgKGgpKVsoaSldKQorI2RlZmluZSBEVUtfSE9CSkVDVF9I X0dFVF9JTkRFWChoZWFwLGgsaSkgICAgICAgICAgICAoRFVLX0hPQkpFQ1RfSF9HRVRfQkFTRSgo aGVhcCksIChoKSlbKGkpXSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSF9HRVRfSU5ERVhfUFRSKGhl YXAsaCxpKSAgICAgICAgKCZEVUtfSE9CSkVDVF9IX0dFVF9CQVNFKChoZWFwKSwgKGgpKVsoaSld KQorCisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0VUX0tFWShoZWFwLGgsaSxrKSAgZG8geyBcCisJ CURVS19IT0JKRUNUX0VfR0VUX0tFWSgoaGVhcCksIChoKSwgKGkpKSA9IChrKTsgXAorCX0gd2hp bGUgKDApCisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0VUX1ZBTFVFKGhlYXAsaCxpLHYpICBkbyB7 IFwKKwkJRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUUoKGhlYXApLCAoaCksIChpKSkgPSAodik7IFwK Kwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX1NFVF9WQUxVRV9UVkFMKGhlYXAs aCxpLHYpICBkbyB7IFwKKwkJRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUUoKGhlYXApLCAoaCksIChp KSkudiA9ICh2KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0VUX1ZB TFVFX0dFVFRFUihoZWFwLGgsaSx2KSAgZG8geyBcCisJCURVS19IT0JKRUNUX0VfR0VUX1ZBTFVF KChoZWFwKSwgKGgpLCAoaSkpLmEuZ2V0ID0gKHYpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfRV9TRVRfVkFMVUVfU0VUVEVSKGhlYXAsaCxpLHYpICBkbyB7IFwKKwkJRFVL X0hPQkpFQ1RfRV9HRVRfVkFMVUUoKGhlYXApLCAoaCksIChpKSkuYS5zZXQgPSAodik7IFwKKwl9 IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX1NFVF9GTEFHUyhoZWFwLGgsaSxmKSAg ZG8geyBcCisJCURVS19IT0JKRUNUX0VfR0VUX0ZMQUdTKChoZWFwKSwgKGgpLCAoaSkpID0gKGR1 a191aW50OF90KSAoZik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSE9CSkVDVF9BX1NF VF9WQUxVRShoZWFwLGgsaSx2KSAgZG8geyBcCisJCURVS19IT0JKRUNUX0FfR0VUX1ZBTFVFKCho ZWFwKSwgKGgpLCAoaSkpID0gKHYpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfQV9TRVRfVkFMVUVfVFZBTChoZWFwLGgsaSx2KSBcCisJRFVLX0hPQkpFQ1RfQV9TRVRfVkFM VUUoKGhlYXApLCAoaCksIChpKSwgKHYpKSAgLyogYWxpYXMgZm9yIGFib3ZlICovCisjZGVmaW5l IERVS19IT0JKRUNUX0hfU0VUX0lOREVYKGhlYXAsaCxpLHYpICBkbyB7IFwKKwkJRFVLX0hPQkpF Q1RfSF9HRVRfSU5ERVgoKGhlYXApLCAoaCksIChpKSkgPSAodik7IFwKKwl9IHdoaWxlICgwKQor CisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0VUX0ZMQUdfQklUUyhoZWFwLGgsaSxtYXNrKSAgZG8g eyBcCisJCURVS19IT0JKRUNUX0VfR0VUX0ZMQUdTX0JBU0UoKGhlYXApLCAoaCkpWyhpKV0gfD0g KG1hc2spOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfSE9CSkVDVF9FX0NMRUFSX0ZM QUdfQklUUyhoZWFwLGgsaSxtYXNrKSAgZG8geyBcCisJCURVS19IT0JKRUNUX0VfR0VUX0ZMQUdT X0JBU0UoKGhlYXApLCAoaCkpWyhpKV0gJj0gfihtYXNrKTsgXAorCX0gd2hpbGUgKDApCisKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfRV9TTE9UX0lTX1dSSVRBQkxFKGhlYXAsaCxpKSAgICAgKChEVUtf SE9CSkVDVF9FX0dFVF9GTEFHUygoaGVhcCksIChoKSwgKGkpKSAmIERVS19QUk9QREVTQ19GTEFH X1dSSVRBQkxFKSAhPSAwKQorI2RlZmluZSBEVUtfSE9CSkVDVF9FX1NMT1RfSVNfRU5VTUVSQUJM RShoZWFwLGgsaSkgICAoKERVS19IT0JKRUNUX0VfR0VUX0ZMQUdTKChoZWFwKSwgKGgpLCAoaSkp ICYgRFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSkgIT0gMCkKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfRV9TTE9UX0lTX0NPTkZJR1VSQUJMRShoZWFwLGgsaSkgKChEVUtfSE9CSkVDVF9FX0dFVF9G TEFHUygoaGVhcCksIChoKSwgKGkpKSAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkg IT0gMCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9TTE9UX0lTX0FDQ0VTU09SKGhlYXAsaCxpKSAg ICAgKChEVUtfSE9CSkVDVF9FX0dFVF9GTEFHUygoaGVhcCksIChoKSwgKGkpKSAmIERVS19QUk9Q REVTQ19GTEFHX0FDQ0VTU09SKSAhPSAwKQorCisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0xPVF9T RVRfV1JJVEFCTEUoaGVhcCxoLGkpICAgICAgICBEVUtfSE9CSkVDVF9FX1NFVF9GTEFHX0JJVFMo KGhlYXApLCAoaCksIChpKSxEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSkKKyNkZWZpbmUgRFVL X0hPQkpFQ1RfRV9TTE9UX1NFVF9FTlVNRVJBQkxFKGhlYXAsaCxpKSAgICAgIERVS19IT0JKRUNU X0VfU0VUX0ZMQUdfQklUUygoaGVhcCksIChoKSwgKGkpLERVS19QUk9QREVTQ19GTEFHX0VOVU1F UkFCTEUpCisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0xPVF9TRVRfQ09ORklHVVJBQkxFKGhlYXAs aCxpKSAgICBEVUtfSE9CSkVDVF9FX1NFVF9GTEFHX0JJVFMoKGhlYXApLCAoaCksIChpKSxEVUtf UFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEUpCisjZGVmaW5lIERVS19IT0JKRUNUX0VfU0xPVF9T RVRfQUNDRVNTT1IoaGVhcCxoLGkpICAgICAgICBEVUtfSE9CSkVDVF9FX1NFVF9GTEFHX0JJVFMo KGhlYXApLCAoaCksIChpKSxEVUtfUFJPUERFU0NfRkxBR19BQ0NFU1NPUikKKworI2RlZmluZSBE VUtfSE9CSkVDVF9FX1NMT1RfQ0xFQVJfV1JJVEFCTEUoaGVhcCxoLGkpICAgICAgRFVLX0hPQkpF Q1RfRV9DTEVBUl9GTEFHX0JJVFMoKGhlYXApLCAoaCksIChpKSxEVUtfUFJPUERFU0NfRkxBR19X UklUQUJMRSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9TTE9UX0NMRUFSX0VOVU1FUkFCTEUoaGVh cCxoLGkpICAgIERVS19IT0JKRUNUX0VfQ0xFQVJfRkxBR19CSVRTKChoZWFwKSwgKGgpLCAoaSks RFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfRV9TTE9U X0NMRUFSX0NPTkZJR1VSQUJMRShoZWFwLGgsaSkgIERVS19IT0JKRUNUX0VfQ0xFQVJfRkxBR19C SVRTKChoZWFwKSwgKGgpLCAoaSksRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKQorI2Rl ZmluZSBEVUtfSE9CSkVDVF9FX1NMT1RfQ0xFQVJfQUNDRVNTT1IoaGVhcCxoLGkpICAgICAgRFVL X0hPQkpFQ1RfRV9DTEVBUl9GTEFHX0JJVFMoKGhlYXApLCAoaCksIChpKSxEVUtfUFJPUERFU0Nf RkxBR19BQ0NFU1NPUikKKworI2RlZmluZSBEVUtfUFJPUERFU0NfSVNfV1JJVEFCTEUocCkgICAg ICAgICAgICAgKCgocCktPmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEUpICE9IDAp CisjZGVmaW5lIERVS19QUk9QREVTQ19JU19FTlVNRVJBQkxFKHApICAgICAgICAgICAoKChwKS0+ ZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19FTlVNRVJBQkxFKSAhPSAwKQorI2RlZmluZSBEVUtf UFJPUERFU0NfSVNfQ09ORklHVVJBQkxFKHApICAgICAgICAgKCgocCktPmZsYWdzICYgRFVLX1BS T1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKSAhPSAwKQorI2RlZmluZSBEVUtfUFJPUERFU0NfSVNf QUNDRVNTT1IocCkgICAgICAgICAgICAgKCgocCktPmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdf QUNDRVNTT1IpICE9IDApCisKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSEFTSElEWF9VTlVTRUQgICAg ICAgICAgICAgIDB4ZmZmZmZmZmZVTAorI2RlZmluZSBEVUtfSE9CSkVDVF9IQVNISURYX0RFTEVU RUQgICAgICAgICAgICAgMHhmZmZmZmZmZVVMCisKKy8qCisgKiAgTWFjcm9zIGZvciBhY2Nlc3Np bmcgc2l6ZSBmaWVsZHMKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX09CSlNJWkVTMTYpCisj ZGVmaW5lIERVS19IT0JKRUNUX0dFVF9FU0laRShoKSAoKGgpLT5lX3NpemUxNikKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfU0VUX0VTSVpFKGgsdikgZG8geyAoaCktPmVfc2l6ZTE2ID0gKHYpOyB9IHdo aWxlICgwKQorI2RlZmluZSBEVUtfSE9CSkVDVF9HRVRfRU5FWFQoaCkgKChoKS0+ZV9uZXh0MTYp CisjZGVmaW5lIERVS19IT0JKRUNUX1NFVF9FTkVYVChoLHYpIGRvIHsgKGgpLT5lX25leHQxNiA9 ICh2KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfUE9TVElOQ19FTkVYVChoKSAo KGgpLT5lX25leHQxNisrKQorI2RlZmluZSBEVUtfSE9CSkVDVF9HRVRfQVNJWkUoaCkgKChoKS0+ YV9zaXplMTYpCisjZGVmaW5lIERVS19IT0JKRUNUX1NFVF9BU0laRShoLHYpIGRvIHsgKGgpLT5h X3NpemUxNiA9ICh2KTsgfSB3aGlsZSAoMCkKKyNpZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9I QVNIX1BBUlQpCisjZGVmaW5lIERVS19IT0JKRUNUX0dFVF9IU0laRShoKSAoKGgpLT5oX3NpemUx NikKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX0hTSVpFKGgsdikgZG8geyAoaCktPmhfc2l6ZTE2 ID0gKHYpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfR0VUX0hTSVpF KGgpIDAKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX0hTSVpFKGgsdikgZG8geyBEVUtfQVNTRVJU KCh2KSA9PSAwKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfR0VUX0VTSVpFKGgpICgoaCktPmVfc2l6ZSkKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX0VT SVpFKGgsdikgZG8geyAoaCktPmVfc2l6ZSA9ICh2KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVL X0hPQkpFQ1RfR0VUX0VORVhUKGgpICgoaCktPmVfbmV4dCkKKyNkZWZpbmUgRFVLX0hPQkpFQ1Rf U0VUX0VORVhUKGgsdikgZG8geyAoaCktPmVfbmV4dCA9ICh2KTsgfSB3aGlsZSAoMCkKKyNkZWZp bmUgRFVLX0hPQkpFQ1RfUE9TVElOQ19FTkVYVChoKSAoKGgpLT5lX25leHQrKykKKyNkZWZpbmUg RFVLX0hPQkpFQ1RfR0VUX0FTSVpFKGgpICgoaCktPmFfc2l6ZSkKKyNkZWZpbmUgRFVLX0hPQkpF Q1RfU0VUX0FTSVpFKGgsdikgZG8geyAoaCktPmFfc2l6ZSA9ICh2KTsgfSB3aGlsZSAoMCkKKyNp ZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9IQVNIX1BBUlQpCisjZGVmaW5lIERVS19IT0JKRUNU X0dFVF9IU0laRShoKSAoKGgpLT5oX3NpemUpCisjZGVmaW5lIERVS19IT0JKRUNUX1NFVF9IU0la RShoLHYpIGRvIHsgKGgpLT5oX3NpemUgPSAodik7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmlu ZSBEVUtfSE9CSkVDVF9HRVRfSFNJWkUoaCkgMAorI2RlZmluZSBEVUtfSE9CSkVDVF9TRVRfSFNJ WkUoaCx2KSBkbyB7IERVS19BU1NFUlQoKHYpID09IDApOyB9IHdoaWxlICgwKQorI2VuZGlmCisj ZW5kaWYKKworLyoKKyAqICBNaXNjCisgKi8KKworLyogTWF4aW11bSBwcm90b3R5cGUgdHJhdmVy c2FsIGRlcHRoLiAgU2FuaXR5IGxpbWl0IHdoaWNoIGhhbmRsZXMgZS5nLgorICogcHJvdG90eXBl IGxvb3BzIChldmVuIGNvbXBsZXggb25lcyBsaWtlIDEtPjItPjMtPjQtPjItPjMtPjQtPjItPjMt PjQpLgorICovCisjZGVmaW5lIERVS19IT0JKRUNUX1BST1RPVFlQRV9DSEFJTl9TQU5JVFkgICAg ICAxMDAwMEwKKworLyoKKyAqICBFQ01BU2NyaXB0IFtbQ2xhc3NdXQorICovCisKKy8qIHJhbmdl IGNoZWNrIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSBhbGwgNC1iaXQgdmFsdWVzIGFyZSBtYXBwZWQg Ki8KKyNkZWZpbmUgRFVLX0hPQkpFQ1RfQ0xBU1NfTlVNQkVSX1RPX1NUUklEWChuKSAgZHVrX2Ns YXNzX251bWJlcl90b19zdHJpZHhbKG4pXQorCisjZGVmaW5lIERVS19IT0JKRUNUX0dFVF9DTEFT U19TVFJJTkcoaGVhcCxoKSAgICAgICAgICBcCisJRFVLX0hFQVBfR0VUX1NUUklORyggXAorCQko aGVhcCksIFwKKwkJRFVLX0hPQkpFQ1RfQ0xBU1NfTlVNQkVSX1RPX1NUUklEWChEVUtfSE9CSkVD VF9HRVRfQ0xBU1NfTlVNQkVSKChoKSkpIFwKKwkpCisKKy8qCisgKiAgTWFjcm9zIGZvciBwcm9w ZXJ0eSBoYW5kbGluZworICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfSEVBUFBUUjE2KQorI2Rl ZmluZSBEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKGhlYXAsaCkgXAorCSgoZHVrX2hvYmplY3Qg KikgRFVLX1VTRV9IRUFQUFRSX0RFQzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKGgpLT5wcm90b3R5 cGUxNikpCisjZGVmaW5lIERVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEUoaGVhcCxoLHgpIGRvIHsg XAorCQkoaCktPnByb3RvdHlwZTE2ID0gRFVLX1VTRV9IRUFQUFRSX0VOQzE2KChoZWFwKS0+aGVh cF91ZGF0YSwgKHZvaWQgKikgKHgpKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBE VUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKGhlYXAsaCkgXAorCSgoaCktPnByb3RvdHlwZSkKKyNk ZWZpbmUgRFVLX0hPQkpFQ1RfU0VUX1BST1RPVFlQRShoZWFwLGgseCkgZG8geyBcCisJCShoKS0+ cHJvdG90eXBlID0gKHgpOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBTZXQgcHJvdG90 eXBlLCBERUNSRUYgZWFybGllciB2YWx1ZSwgSU5DUkVGIG5ldyB2YWx1ZSAodG9sZXJhdGluZyBO VUxMcykuICovCisjZGVmaW5lIERVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEVfVVBEUkVGKHRocixo LHApICAgICAgIGR1a19ob2JqZWN0X3NldF9wcm90b3R5cGVfdXBkcmVmKCh0aHIpLCAoaCksIChw KSkKKworLyogU2V0IGluaXRpYWwgcHJvdG90eXBlLCBhc3N1bWUgTlVMTCBwcmV2aW91cyBwcm90 b3R5cGUsIElOQ1JFRiBuZXcgdmFsdWUsCisgKiB0b2xlcmF0ZSBOVUxMLgorICovCisjZGVmaW5l IERVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEVfSU5JVF9JTkNSRUYodGhyLGgscHJvdG8pIGRvIHsg XAorCQlkdWtfaHRocmVhZCAqZHVrX190aHIgPSAodGhyKTsgXAorCQlkdWtfaG9iamVjdCAqZHVr X19vYmogPSAoaCk7IFwKKwkJZHVrX2hvYmplY3QgKmR1a19fcHJvdG8gPSAocHJvdG8pOyBcCisJ CURVS19VTlJFRihkdWtfX3Rocik7IFwKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJP VE9UWVBFKGR1a19fdGhyLT5oZWFwLCBkdWtfX29iaikgPT0gTlVMTCk7IFwKKwkJRFVLX0hPQkpF Q1RfU0VUX1BST1RPVFlQRShkdWtfX3Roci0+aGVhcCwgZHVrX19vYmosIGR1a19fcHJvdG8pOyBc CisJCURVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwoZHVrX190aHIsIGR1a19fcHJvdG8pOyBc CisJfSB3aGlsZSAoMCkKKworLyoKKyAqICBGaW5hbGl6ZXIgY2hlY2sKKyAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX0hFQVBQVFIxNikKKyNkZWZpbmUgRFVLX0hPQkpFQ1RfSEFTX0ZJTkFMSVpF Ul9GQVNUKGhlYXAsaCkgZHVrX2hvYmplY3RfaGFzX2ZpbmFsaXplcl9mYXN0X3JhdygoaGVhcCks IChoKSkKKyNlbHNlCisjZGVmaW5lIERVS19IT0JKRUNUX0hBU19GSU5BTElaRVJfRkFTVChoZWFw LGgpIGR1a19ob2JqZWN0X2hhc19maW5hbGl6ZXJfZmFzdF9yYXcoKGgpKQorI2VuZGlmCisKKy8q CisgKiAgUmVzaXppbmcgYW5kIGhhc2ggYmVoYXZpb3IKKyAqLworCisvKiBTYW5pdHkgbGltaXQg b24gbWF4IG51bWJlciBvZiBwcm9wZXJ0aWVzIChhbGxvY2F0ZWQsIG5vdCBuZWNlc3NhcmlseSB1 c2VkKS4KKyAqIFRoaXMgaXMgc29tZXdoYXQgYXJiaXRyYXJ5LCBidXQgaWYgd2UncmUgY2xvc2Ug dG8gMioqMzIgcHJvcGVydGllcyBzb21lCisgKiBhbGdvcml0aG1zIHdpbGwgZmFpbCAoZS5nLiBo YXNoIHNpemUgc2VsZWN0aW9uLCBuZXh0IHByaW1lIHNlbGVjdGlvbikuCisgKiBBbHNvLCB3ZSB1 c2UgbmVnYXRpdmUgYXJyYXkvZW50cnkgdGFibGUgaW5kaWNlcyB0byBpbmRpY2F0ZSAnbm90IGZv dW5kJywKKyAqIHNvIGFueXRoaW5nIGFib3ZlIDB4ODAwMDAwMDAgd2lsbCBjYXVzZSB0cm91Ymxl IG5vdy4KKyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpTSVpFUzE2KQorI2RlZmluZSBEVUtf SE9CSkVDVF9NQVhfUFJPUEVSVElFUyAgICAgICAweDAwMDBmZmZmVUwKKyNlbHNlCisjZGVmaW5l IERVS19IT0JKRUNUX01BWF9QUk9QRVJUSUVTICAgICAgIDB4M2ZmZmZmZmZVTCAgIC8qIDIqKjMw LTEgfj0gMUcgcHJvcGVydGllcyAqLworI2VuZGlmCisKKy8qIGludGVybmFsIGFsaWduIHRhcmdl dCBmb3IgcHJvcHMgYWxsb2NhdGlvbiwgbXVzdCBiZSAyKm4gZm9yIHNvbWUgbiAqLworI2lmIChE VUtfVVNFX0FMSUdOX0JZID09IDQpCisjZGVmaW5lIERVS19IT0JKRUNUX0FMSUdOX1RBUkdFVCAg ICAgICAgIDQKKyNlbGlmIChEVUtfVVNFX0FMSUdOX0JZID09IDgpCisjZGVmaW5lIERVS19IT0JK RUNUX0FMSUdOX1RBUkdFVCAgICAgICAgIDgKKyNlbGlmIChEVUtfVVNFX0FMSUdOX0JZID09IDEp CisjZGVmaW5lIERVS19IT0JKRUNUX0FMSUdOX1RBUkdFVCAgICAgICAgIDEKKyNlbHNlCisjZXJy b3IgaW52YWxpZCBEVUtfVVNFX0FMSUdOX0JZCisjZW5kaWYKKworLyoKKyAqICBQQy10by1saW5l IGNvbnN0YW50cworICovCisKKyNkZWZpbmUgRFVLX1BDMkxJTkVfU0tJUCAgICA2NAorCisvKiBt YXhpbXVtIGxlbmd0aCBmb3IgYSBTS0lQLTEgZGlmZnN0cmVhbTogMzUgYml0cyBwZXIgZW50cnks IHJvdW5kZWQgdXAgdG8gYnl0ZXMgKi8KKyNkZWZpbmUgRFVLX1BDMkxJTkVfTUFYX0RJRkZfTEVO R1RIICAgICgoKERVS19QQzJMSU5FX1NLSVAgLSAxKSAqIDM1ICsgNykgLyA4KQorCisvKgorICog IFN0cnVjdCBkZWZzCisgKi8KKworc3RydWN0IGR1a19wcm9wYWNjZXNzb3IgeworCWR1a19ob2Jq ZWN0ICpnZXQ7CisJZHVrX2hvYmplY3QgKnNldDsKK307CisKK3VuaW9uIGR1a19wcm9wdmFsdWUg eworCS8qIFRoZSBnZXQvc2V0IHBvaW50ZXJzIGNvdWxkIGJlIDE2LWJpdCBwb2ludGVyIGNvbXBy ZXNzZWQgYnV0IGl0CisJICogd291bGQgbWFrZSBubyBkaWZmZXJlbmNlIG9uIDMyLWJpdCBwbGF0 Zm9ybXMgYmVjYXVzZSBkdWtfdHZhbCBpcworCSAqIDggYnl0ZXMgb3IgbW9yZSBhbnl3YXkuCisJ ICovCisJZHVrX3R2YWwgdjsKKwlkdWtfcHJvcGFjY2Vzc29yIGE7Cit9OworCitzdHJ1Y3QgZHVr X3Byb3BkZXNjIHsKKwkvKiByZWFkLW9ubHkgdmFsdWVzICdsaWZ0ZWQnIGZvciBlYXNlIG9mIHVz ZSAqLworCWR1a19zbWFsbF91aW50X3QgZmxhZ3M7CisJZHVrX2hvYmplY3QgKmdldDsKKwlkdWtf aG9iamVjdCAqc2V0OworCisJLyogZm9yIHVwZGF0aW5nIChhbGwgYXJlIHNldCB0byA8IDAgZm9y IHZpcnR1YWwgcHJvcGVydGllcykgKi8KKwlkdWtfaW50X3QgZV9pZHg7ICAvKiBwcm9wIGluZGV4 IGluICdlbnRyeSBwYXJ0JywgPCAwIGlmIG5vdCB0aGVyZSAqLworCWR1a19pbnRfdCBoX2lkeDsg IC8qIHByb3AgaW5kZXggaW4gJ2hhc2ggcGFydCcsIDwgMCBpZiBub3QgdGhlcmUgKi8KKwlkdWtf aW50X3QgYV9pZHg7ICAvKiBwcm9wIGluZGV4IGluICdhcnJheSBwYXJ0JywgPCAwIGlmIG5vdCB0 aGVyZSAqLworfTsKKworc3RydWN0IGR1a19ob2JqZWN0IHsKKwlkdWtfaGVhcGhkciBoZHI7CisK KwkvKgorCSAqICAncHJvcHMnIGNvbnRhaW5zIHtrZXksdmFsdWUsZmxhZ3N9IGVudHJpZXMsIG9w dGlvbmFsIGFycmF5IGVudHJpZXMsIGFuZAorCSAqICBhbiBvcHRpb25hbCBoYXNoIGxvb2t1cCB0 YWJsZSBmb3Igbm9uLWFycmF5IGVudHJpZXMgaW4gYSBzaW5nbGUgJ3NsaWNlZCcKKwkgKiAgYWxs b2NhdGlvbi4gIFRoZXJlIGFyZSBzZXZlcmFsIGxheW91dCBvcHRpb25zLCB3aGljaCBkaWZmZXIg c2xpZ2h0bHkgaW4KKwkgKiAgZ2VuZXJhdGVkIGNvZGUgc2l6ZS9zcGVlZCBhbmQgYWxpZ25tZW50 L3BhZGRpbmc7IGR1a19mZWF0dXJlcy5oIHNlbGVjdHMKKwkgKiAgdGhlIGxheW91dCB1c2VkLgor CSAqCisJICogIExheW91dCAxIChEVUtfVVNFX0hPQkpFQ1RfTEFZT1VUXzEpOgorCSAqCisJICog ICAgZV9zaXplICogc2l6ZW9mKGR1a19oc3RyaW5nICopICAgICAgICAgYnl0ZXMgb2YgICBlbnRy eSBrZXlzIChlX25leHQgZ2MgcmVhY2hhYmxlKQorCSAqICAgIGVfc2l6ZSAqIHNpemVvZihkdWtf cHJvcHZhbHVlKSAgICAgICAgIGJ5dGVzIG9mICAgZW50cnkgdmFsdWVzIChlX25leHQgZ2MgcmVh Y2hhYmxlKQorCSAqICAgIGVfc2l6ZSAqIHNpemVvZihkdWtfdWludDhfdCkgICAgICAgICAgIGJ5 dGVzIG9mICAgZW50cnkgZmxhZ3MgKGVfbmV4dCBnYyByZWFjaGFibGUpCisJICogICAgYV9zaXpl ICogc2l6ZW9mKGR1a190dmFsKSAgICAgICAgICAgICAgYnl0ZXMgb2YgICAob3B0KSBhcnJheSB2 YWx1ZXMgKHBsYWluIG9ubHkpIChhbGwgZ2MgcmVhY2hhYmxlKQorCSAqICAgIGhfc2l6ZSAqIHNp emVvZihkdWtfdWludDMyX3QpICAgICAgICAgIGJ5dGVzIG9mICAgKG9wdCkgaGFzaCBpbmRleGVz IHRvIGVudHJpZXMgKGVfc2l6ZSksCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmVUwgPSB1bnVzZWQsIDB4ZmZmZmZmZmVV TCA9IGRlbGV0ZWQKKwkgKgorCSAqICBMYXlvdXQgMiAoRFVLX1VTRV9IT0JKRUNUX0xBWU9VVF8y KToKKwkgKgorCSAqICAgIGVfc2l6ZSAqIHNpemVvZihkdWtfcHJvcHZhbHVlKSAgICAgICAgIGJ5 dGVzIG9mICAgZW50cnkgdmFsdWVzIChlX25leHQgZ2MgcmVhY2hhYmxlKQorCSAqICAgIGVfc2l6 ZSAqIHNpemVvZihkdWtfaHN0cmluZyAqKSAgICAgICAgIGJ5dGVzIG9mICAgZW50cnkga2V5cyAo ZV9uZXh0IGdjIHJlYWNoYWJsZSkKKwkgKiAgICBlX3NpemUgKiBzaXplb2YoZHVrX3VpbnQ4X3Qp ICsgcGFkICAgICBieXRlcyBvZiAgIGVudHJ5IGZsYWdzIChlX25leHQgZ2MgcmVhY2hhYmxlKQor CSAqICAgIGFfc2l6ZSAqIHNpemVvZihkdWtfdHZhbCkgICAgICAgICAgICAgIGJ5dGVzIG9mICAg KG9wdCkgYXJyYXkgdmFsdWVzIChwbGFpbiBvbmx5KSAoYWxsIGdjIHJlYWNoYWJsZSkKKwkgKiAg ICBoX3NpemUgKiBzaXplb2YoZHVrX3VpbnQzMl90KSAgICAgICAgICBieXRlcyBvZiAgIChvcHQp IGhhc2ggaW5kZXhlcyB0byBlbnRyaWVzIChlX3NpemUpLAorCSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZlVMID0gdW51c2Vk LCAweGZmZmZmZmZlVUwgPSBkZWxldGVkCisJICoKKwkgKiAgTGF5b3V0IDMgKERVS19VU0VfSE9C SkVDVF9MQVlPVVRfMyk6CisJICoKKwkgKiAgICBlX3NpemUgKiBzaXplb2YoZHVrX3Byb3B2YWx1 ZSkgICAgICAgICBieXRlcyBvZiAgIGVudHJ5IHZhbHVlcyAoZV9uZXh0IGdjIHJlYWNoYWJsZSkK KwkgKiAgICBhX3NpemUgKiBzaXplb2YoZHVrX3R2YWwpICAgICAgICAgICAgICBieXRlcyBvZiAg IChvcHQpIGFycmF5IHZhbHVlcyAocGxhaW4gb25seSkgKGFsbCBnYyByZWFjaGFibGUpCisJICog ICAgZV9zaXplICogc2l6ZW9mKGR1a19oc3RyaW5nICopICAgICAgICAgYnl0ZXMgb2YgICBlbnRy eSBrZXlzIChlX25leHQgZ2MgcmVhY2hhYmxlKQorCSAqICAgIGhfc2l6ZSAqIHNpemVvZihkdWtf dWludDMyX3QpICAgICAgICAgIGJ5dGVzIG9mICAgKG9wdCkgaGFzaCBpbmRleGVzIHRvIGVudHJp ZXMgKGVfc2l6ZSksCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweGZmZmZmZmZmVUwgPSB1bnVzZWQsIDB4ZmZmZmZmZmVVTCA9IGRlbGV0 ZWQKKwkgKiAgICBlX3NpemUgKiBzaXplb2YoZHVrX3VpbnQ4X3QpICAgICAgICAgICBieXRlcyBv ZiAgIGVudHJ5IGZsYWdzIChlX25leHQgZ2MgcmVhY2hhYmxlKQorCSAqCisJICogIEluIGxheW91 dCAxLCB0aGUgJ2VfbmV4dCcgY291bnQgaXMgcm91bmRlZCB0byA0IG9yIDggb24gcGxhdGZvcm1z CisJICogIHJlcXVpcmluZyA0IG9yIDggYnl0ZSBhbGlnbm1lbnQuICBUaGlzIGVuc3VyZXMgcHJv cGVyIGFsaWdubWVudAorCSAqICBmb3IgdGhlIGVudHJpZXMsIGF0IHRoZSBjb3N0IG9mIG1lbW9y eSBmb290cHJpbnQuICBIb3dldmVyLCBpdCdzCisJICogIHByb2JhYmx5IHByZWZlcmFibGUgdG8g dXNlIGFub3RoZXIgbGF5b3V0IG9uIHN1Y2ggcGxhdGZvcm1zIGluc3RlYWQuCisJICoKKwkgKiAg SW4gbGF5b3V0IDIsIHRoZSBrZXkgYW5kIHZhbHVlIHBhcnRzIGFyZSBzd2FwcGVkIHRvIGF2b2lk IHBhZGRpbmcKKwkgKiAgdGhlIGtleSBhcnJheSBvbiBwbGF0Zm9ybXMgcmVxdWlyaW5nIGFsaWdu bWVudCBieSA4LiAgVGhlIGZsYWdzIHBhcnQKKwkgKiAgaXMgcGFkZGVkIHRvIGdldCBhbGlnbm1l bnQgZm9yIGFycmF5IGVudHJpZXMuICBUaGUgJ2VfbmV4dCcgY291bnQgZG9lcworCSAqICBub3Qg bmVlZCB0byBiZSByb3VuZGVkIGFzIGluIGxheW91dCAxLgorCSAqCisJICogIEluIGxheW91dCAz LCBlbnRyeSB2YWx1ZXMgYW5kIGFycmF5IHZhbHVlcyBhcmUgYWx3YXlzIGFsaWduZWQgcHJvcGVy bHksCisJICogIGFuZCBhc3N1bWluZyBwb2ludGVycyBhcmUgYXQgbW9zdCA4IGJ5dGVzLCBzbyBh cmUgdGhlIGVudHJ5IGtleXMuICBIYXNoCisJICogIGluZGljZXMgd2lsbCBiZSBwcm9wZXJseSBh bGlnbmVkIChhc3N1bWluZyBwb2ludGVycyBhcmUgYXQgbGVhc3QgNCBieXRlcykuCisJICogIEZp bmFsbHksIGZsYWdzIGRvbid0IG5lZWQgYWRkaXRpb25hbCBhbGlnbm1lbnQuICBUaGlzIGxheW91 dCBwcm92aWRlcworCSAqICBjb21wYWN0IGFsbG9jYXRpb25zIHdpdGhvdXQgcGFkZGluZyAoZXZl biBvbiBwbGF0Zm9ybXMgd2l0aCBhbGlnbm1lbnQKKwkgKiAgcmVxdWlyZW1lbnRzKSBhdCB0aGUg Y29zdCBvZiBhIGJpdCBzbG93ZXIgbG9va3Vwcy4KKwkgKgorCSAqICBPYmplY3RzIHdpdGggZmV3 IGtleXMgZG9uJ3QgaGF2ZSBhIGhhc2ggaW5kZXg7IGtleXMgYXJlIGxvb2tlZCB1cCBsaW5lYXJs eSwKKwkgKiAgd2hpY2ggaXMgY2FjaGUgZWZmaWNpZW50IGJlY2F1c2UgdGhlIGtleXMgYXJlIGNv bnNlY3V0aXZlLiAgTGFyZ2VyIG9iamVjdHMKKwkgKiAgaGF2ZSBhIGhhc2ggaW5kZXggcGFydCB3 aGljaCBjb250YWlucyBpbnRlZ2VyIGluZGV4ZXMgdG8gdGhlIGVudHJpZXMgcGFydC4KKwkgKgor CSAqICBBIHNpbmdsZSBhbGxvY2F0aW9uIHJlZHVjZXMgbWVtb3J5IGFsbG9jYXRpb24gb3Zlcmhl YWQgYnV0IHJlcXVpcmVzIG1vcmUKKwkgKiAgd29yayB3aGVuIGFueSBwYXJ0IG5lZWRzIHRvIGJl IHJlc2l6ZWQuICBBIHNsaWNlZCBhbGxvY2F0aW9uIGZvciBlbnRyaWVzCisJICogIG1ha2VzIGxp bmVhciBrZXkgbWF0Y2hpbmcgZmFzdGVyIG9uIG1vc3QgcGxhdGZvcm1zIChtb3JlIGxvY2FsaXR5 KSBhbmQKKwkgKiAgc2tpbXBzIG9uIGZsYWdzIHNpemUgKHdoaWNoIHdvdWxkIGJlIGZvbGxvd2Vk IGJ5IDMgYnl0ZXMgb2YgcGFkZGluZyBpbgorCSAqICBtb3N0IGFyY2hpdGVjdHVyZXMgaWYgZW50 cmllcyB3ZXJlIHBsYWNlZCBpbiBhIHN0cnVjdCkuCisJICoKKwkgKiAgJ3Byb3BzJyBhbHNvIGNv bnRhaW5zIGludGVybmFsIHByb3BlcnRpZXMgZGlzdGluZ3Vpc2hlZCB3aXRoIGEgbm9uLUJNUAor CSAqICBwcmVmaXguICBPZnRlbiB1c2VkIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBsYWNlZCBlYXJs eSBpbiAncHJvcHMnIHdoZW5ldmVyCisJICogIHBvc3NpYmxlIHRvIG1ha2UgYWNjZXNzaW5nIHRo ZW0gYXMgZmFzdCBhIHBvc3NpYmxlLgorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQ VFIxNikKKwkvKiBMb2NhdGVkIGluIGR1a19oZWFwaGRyIGhfZXh0cmExNi4gIFN1YmNsYXNzZXMg b2YgZHVrX2hvYmplY3QgKGxpa2UKKwkgKiBkdWtfaGNvbXBmdW5jKSBhcmUgbm90IGZyZWUgdG8g dXNlIGhfZXh0cmExNiBmb3IgdGhpcyByZWFzb24uCisJICovCisjZWxzZQorCWR1a191aW50OF90 ICpwcm9wczsKKyNlbmRpZgorCisJLyogcHJvdG90eXBlOiB0aGUgb25seSBpbnRlcm5hbCBwcm9w ZXJ0eSBsaWZ0ZWQgb3V0c2lkZSAnZScgYXMgaXQgaXMgc28gY2VudHJhbCAqLworI2lmIGRlZmlu ZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQxNl90IHByb3RvdHlwZTE2OworI2Vsc2UK KwlkdWtfaG9iamVjdCAqcHJvdG90eXBlOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf T0JKU0laRVMxNikKKwlkdWtfdWludDE2X3QgZV9zaXplMTY7CisJZHVrX3VpbnQxNl90IGVfbmV4 dDE2OworCWR1a191aW50MTZfdCBhX3NpemUxNjsKKyNpZiBkZWZpbmVkKERVS19VU0VfSE9CSkVD VF9IQVNIX1BBUlQpCisJZHVrX3VpbnQxNl90IGhfc2l6ZTE2OworI2VuZGlmCisjZWxzZQorCWR1 a191aW50MzJfdCBlX3NpemU7ICAvKiBlbnRyeSBwYXJ0IHNpemUgKi8KKwlkdWtfdWludDMyX3Qg ZV9uZXh0OyAgLyogaW5kZXggZm9yIG5leHQgbmV3IGtleSAoWzAsZV9uZXh0WyBhcmUgZ2MgcmVh Y2hhYmxlKSAqLworCWR1a191aW50MzJfdCBhX3NpemU7ICAvKiBhcnJheSBwYXJ0IHNpemUgKGVu dGlyZWx5IGdjIHJlYWNoYWJsZSkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9IQVNI X1BBUlQpCisJZHVrX3VpbnQzMl90IGhfc2l6ZTsgIC8qIGhhc2ggcGFydCBzaXplIG9yIDAgaWYg dW51c2VkICovCisjZW5kaWYKKyNlbmRpZgorfTsKKworLyoKKyAqICBFeHBvc2VkIGRhdGEKKyAq LworCisjaWYgIWRlZmluZWQoRFVLX1NJTkdMRV9GSUxFKQorRFVLX0lOVEVSTkFMX0RFQ0wgZHVr X3VpbnQ4X3QgZHVrX2NsYXNzX251bWJlcl90b19zdHJpZHhbMzJdOworI2VuZGlmICAvKiAhRFVL X1NJTkdMRV9GSUxFICovCisKKy8qCisgKiAgUHJvdG90eXBlcworICovCisKKy8qIGFsbG9jIGFu ZCBpbml0ICovCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVrX2hvYmplY3RfYWxs b2NfdW5jaGVja2VkKGR1a19oZWFwICpoZWFwLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3MpOwor RFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hvYmplY3QgKmR1a19ob2JqZWN0X2FsbG9jKGR1a19odGhy ZWFkICp0aHIsIGR1a191aW50X3QgaG9iamVjdF9mbGFncyk7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfaGFycmF5ICpkdWtfaGFycmF5X2FsbG9jKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3Qg aG9iamVjdF9mbGFncyk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaGNvbXBmdW5jICpkdWtfaGNv bXBmdW5jX2FsbG9jKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgaG9iamVjdF9mbGFncyk7 CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG5hdGZ1bmMgKmR1a19obmF0ZnVuY19hbGxvYyhkdWtf aHRocmVhZCAqdGhyLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3MpOworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX2hib3VuZGZ1bmMgKmR1a19oYm91bmRmdW5jX2FsbG9jKGR1a19oZWFwICpoZWFwLCBk dWtfdWludF90IGhvYmplY3RfZmxhZ3MpOworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpF Q1RfU1VQUE9SVCkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19oYnVmb2JqICpkdWtfaGJ1Zm9ial9h bGxvYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3MpOworI2VuZGlm CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaHRocmVhZCAqZHVrX2h0aHJlYWRfYWxsb2NfdW5jaGVj a2VkKGR1a19oZWFwICpoZWFwLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3MpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX2h0aHJlYWQgKmR1a19odGhyZWFkX2FsbG9jKGR1a19odGhyZWFkICp0aHIs IGR1a191aW50X3QgaG9iamVjdF9mbGFncyk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaGRlY2Vu diAqZHVrX2hkZWNlbnZfYWxsb2MoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBob2JqZWN0 X2ZsYWdzKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ob2JqZW52ICpkdWtfaG9iamVudl9hbGxv YyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3MpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX2hwcm94eSAqZHVrX2hwcm94eV9hbGxvYyhkdWtfaHRocmVhZCAqdGhyLCBk dWtfdWludF90IGhvYmplY3RfZmxhZ3MpOworCisvKiByZXNpemUgKi8KK0RVS19JTlRFUk5BTF9E RUNMIHZvaWQgZHVrX2hvYmplY3RfcmVhbGxvY19wcm9wcyhkdWtfaHRocmVhZCAqdGhyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0 ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX3VpbnQzMl90IG5ld19lX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX3VpbnQzMl90IG5ld19hX3NpemUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VpbnQzMl90IG5ld19oX3Np emUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVr X2Jvb2xfdCBhYmFuZG9uX2FycmF5KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hvYmpl Y3RfcmVzaXplX2VudHJ5cGFydChkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0ICpvYmosCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VpbnQz Ml90IG5ld19lX3NpemUpOworI2lmIDAgIC8qdW51c2VkKi8KK0RVS19JTlRFUk5BTF9ERUNMIHZv aWQgZHVrX2hvYmplY3RfcmVzaXplX2FycmF5cGFydChkdWtfaHRocmVhZCAqdGhyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0 ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX3VpbnQzMl90IG5ld19hX3NpemUpOworI2VuZGlmCisKKy8qIGxvdy1sZXZlbCBwcm9w ZXJ0eSBmdW5jdGlvbnMgKi8KK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hvYmpl Y3RfZmluZF9leGlzdGluZ19lbnRyeShkdWtfaGVhcCAqaGVhcCwgZHVrX2hvYmplY3QgKm9iaiwg ZHVrX2hzdHJpbmcgKmtleSwgZHVrX2ludF90ICplX2lkeCwgZHVrX2ludF90ICpoX2lkeCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfdHZhbCAqZHVrX2hvYmplY3RfZmluZF9leGlzdGluZ19lbnRy eV90dmFsX3B0cihkdWtfaGVhcCAqaGVhcCwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcg KmtleSk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfdHZhbCAqZHVrX2hvYmplY3RfZmluZF9leGlz dGluZ19lbnRyeV90dmFsX3B0cl9hbmRfYXR0cnMoZHVrX2hlYXAgKmhlYXAsIGR1a19ob2JqZWN0 ICpvYmosIGR1a19oc3RyaW5nICprZXksIGR1a191aW50X3QgKm91dF9hdHRycyk7CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfdHZhbCAqZHVrX2hvYmplY3RfZmluZF9leGlzdGluZ19hcnJheV9lbnRy eV90dmFsX3B0cihkdWtfaGVhcCAqaGVhcCwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX3VhcnJpZHhf dCBpKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hvYmplY3RfZ2V0X293bl9w cm9wZGVzYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAq a2V5LCBkdWtfcHJvcGRlc2MgKm91dF9kZXNjLCBkdWtfc21hbGxfdWludF90IGZsYWdzKTsKKwor LyogWFhYOiB3aGVuIG9wdGltaXppbmcgZm9yIGd1YXJhbnRlZWQgcHJvcGVydHkgc2xvdHMsIHVz ZSBhIGd1YXJhbnRlZWQKKyAqIHNsb3QgZm9yIGludGVybmFsIHZhbHVlOyB0aGlzIGNhbGwgY2Fu IHRoZW4gYWNjZXNzIGl0IGRpcmVjdGx5LgorICovCisjZGVmaW5lIGR1a19ob2JqZWN0X2dldF9p bnRlcm5hbF92YWx1ZV90dmFsX3B0cihoZWFwLG9iaikgXAorCWR1a19ob2JqZWN0X2ZpbmRfZXhp c3RpbmdfZW50cnlfdHZhbF9wdHIoKGhlYXApLCAob2JqKSwgRFVLX0hFQVBfU1RSSU5HX0lOVF9W QUxVRSgoaGVhcCkpKQorCisvKiBjb3JlIHByb3BlcnR5IGZ1bmN0aW9ucyAqLworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9nZXRwcm9wKGR1a19odGhyZWFkICp0aHIs IGR1a190dmFsICp0dl9vYmosIGR1a190dmFsICp0dl9rZXkpOworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9wdXRwcm9wKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFs ICp0dl9vYmosIGR1a190dmFsICp0dl9rZXksIGR1a190dmFsICp0dl92YWwsIGR1a19ib29sX3Qg dGhyb3dfZmxhZyk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X2Rl bHByb3AoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2X29iaiwgZHVrX3R2YWwgKnR2X2tl eSwgZHVrX2Jvb2xfdCB0aHJvd19mbGFnKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3Qg ZHVrX2hvYmplY3RfaGFzcHJvcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZfb2JqLCBk dWtfdHZhbCAqdHZfa2V5KTsKKworLyogaW50ZXJuYWwgcHJvcGVydHkgZnVuY3Rpb25zICovCisj ZGVmaW5lIERVS19ERUxQUk9QX0ZMQUdfVEhST1cgICgxVSA8PCAwKQorI2RlZmluZSBEVUtfREVM UFJPUF9GTEFHX0ZPUkNFICAoMVUgPDwgMSkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3Qg ZHVrX2hvYmplY3RfZGVscHJvcF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9i aiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncyk7CitEVUtfSU5URVJO QUxfREVDTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X2hhc3Byb3BfcmF3KGR1a19odGhyZWFkICp0 aHIsIGR1a19ob2JqZWN0ICpvYmosIGR1a19oc3RyaW5nICprZXkpOworRFVLX0lOVEVSTkFMX0RF Q0wgdm9pZCBkdWtfaG9iamVjdF9kZWZpbmVfcHJvcGVydHlfaW50ZXJuYWwoZHVrX2h0aHJlYWQg KnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX3NtYWxsX3VpbnRf dCBmbGFncyk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19ob2JqZWN0X2RlZmluZV9wcm9w ZXJ0eV9pbnRlcm5hbF9hcnJpZHgoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9iaiwg ZHVrX3VhcnJpZHhfdCBhcnJfaWR4LCBkdWtfc21hbGxfdWludF90IGZsYWdzKTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19zaXplX3QgZHVrX2hvYmplY3RfZ2V0X2xlbmd0aChkdWtfaHRocmVhZCAq dGhyLCBkdWtfaG9iamVjdCAqb2JqKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfSEVBUFBUUjE2KQor RFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9oYXNfZmluYWxpemVyX2Zh c3RfcmF3KGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqb2JqKTsKKyNlbHNlCitEVUtfSU5U RVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X2hhc19maW5hbGl6ZXJfZmFzdF9yYXco ZHVrX2hvYmplY3QgKm9iaik7CisjZW5kaWYKKworLyogaGVscGVycyBmb3IgZGVmaW5lUHJvcGVy dHkoKSBhbmQgZGVmaW5lUHJvcGVydGllcygpICovCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1 a19ob2JqZWN0X3ByZXBhcmVfcHJvcGVydHlfZGVzY3JpcHRvcihkdWtfaHRocmVhZCAqdGhyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHVrX2lkeF90IGlkeF9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a191aW50X3QgKm91dF9kZWZwcm9wX2Zs YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX2lkeF90ICpvdXRfaWR4X3ZhbHVlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3Qg KipvdXRfZ2V0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3QgKipvdXRfc2V0dGVyKTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hvYmplY3RfZGVmaW5lX3Byb3BlcnR5X2hlbHBlcihk dWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a191aW50X3QgZGVmcHJvcF9mbGFncywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkdWtfaG9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19oc3RyaW5nICprZXksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVr X2lkeF90IGlkeF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqZ2V0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19o b2JqZWN0ICpzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xfdCB0aHJvd19mbGFnKTsKKworLyogT2JqZWN0 IGJ1aWx0LWluIG1ldGhvZHMgKi8KK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hvYmplY3Rf b2JqZWN0X2dldF9vd25fcHJvcGVydHlfZGVzY3JpcHRvcihkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3Qgb2JqX2lkeCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19ob2JqZWN0X29iamVj dF9zZWFsX2ZyZWV6ZV9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9iaiwg ZHVrX2Jvb2xfdCBpc19mcmVlemUpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf aG9iamVjdF9vYmplY3RfaXNfc2VhbGVkX2Zyb3plbl9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2hvYmplY3QgKm9iaiwgZHVrX2Jvb2xfdCBpc19mcm96ZW4pOworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9vYmplY3Rfb3ducHJvcF9oZWxwZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCByZXF1aXJlZF9kZXNjX2ZsYWdzKTsKKworLyogaW50 ZXJuYWwgcHJvcGVydGllcyAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaG9i amVjdF9nZXRfaW50ZXJuYWxfdmFsdWUoZHVrX2hlYXAgKmhlYXAsIGR1a19ob2JqZWN0ICpvYmos IGR1a190dmFsICp0dik7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaHN0cmluZyAqZHVrX2hvYmpl Y3RfZ2V0X2ludGVybmFsX3ZhbHVlX3N0cmluZyhkdWtfaGVhcCAqaGVhcCwgZHVrX2hvYmplY3Qg Km9iaik7CisKKy8qIGhvYmplY3QgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK0RVS19JTlRFUk5B TF9ERUNMIHZvaWQgZHVrX2hvYmplY3RfY29tcGFjdF9wcm9wcyhkdWtfaHRocmVhZCAqdGhyLCBk dWtfaG9iamVjdCAqb2JqKTsKKworLyogRVMyMDE1IHByb3h5ICovCisjaWYgZGVmaW5lZChEVUtf VVNFX0VTNl9QUk9YWSkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hvYmplY3Rf cHJveHlfY2hlY2soZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hvYmplY3QgKipvdXRfdGFyZ2V0LCBk dWtfaG9iamVjdCAqKm91dF9oYW5kbGVyKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ob2JqZWN0 ICpkdWtfaG9iamVjdF9yZXNvbHZlX3Byb3h5X3RhcmdldChkdWtfaG9iamVjdCAqb2JqKTsKKyNl bmRpZgorCisvKiBlbnVtZXJhdGlvbiAqLworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaG9i amVjdF9lbnVtZXJhdG9yX2NyZWF0ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21hbGxfdWludF90 IGVudW1fZmxhZ3MpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19ob2JqZWN0X2dl dF9lbnVtZXJhdGVkX2tleXMoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBlbnVt X2ZsYWdzKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hvYmplY3RfZW51bWVy YXRvcl9uZXh0KGR1a19odGhyZWFkICp0aHIsIGR1a19ib29sX3QgZ2V0X3ZhbHVlKTsKKworLyog bWFjcm9zICovCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19ob2JqZWN0X3NldF9wcm90b3R5 cGVfdXBkcmVmKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpoLCBkdWtfaG9iamVjdCAq cCk7CisKKy8qIHBjMmxpbmUgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfUEMyTElORSkKK0RVS19J TlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hvYmplY3RfcGMybGluZV9wYWNrKGR1a19odGhyZWFkICp0 aHIsIGR1a19jb21waWxlcl9pbnN0ciAqaW5zdHJzLCBkdWtfdWludF9mYXN0MzJfdCBsZW5ndGgp OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnRfZmFzdDMyX3QgZHVrX2hvYmplY3RfcGMybGlu ZV9xdWVyeShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4X2Z1bmMsIGR1a191aW50X2Zh c3QzMl90IHBjKTsKKyNlbmRpZgorCisvKiBtaXNjICovCitEVUtfSU5URVJOQUxfREVDTCBkdWtf Ym9vbF90IGR1a19ob2JqZWN0X3Byb3RvdHlwZV9jaGFpbl9jb250YWlucyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfaG9iamVjdCAqaCwgZHVrX2hvYmplY3QgKnAsIGR1a19ib29sX3QgaWdub3JlX2xv b3ApOworCisjaWYgIWRlZmluZWQoRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTikKKy8qIFRoZXNlIGRl Y2xhcmF0aW9ucyBhcmUgbmVlZGVkIHdoZW4gcmVsYXRlZCBidWlsdC1pbiBpcyBkaXNhYmxlZCBh bmQKKyAqIGdlbmJ1aWx0aW5zLnB5IHdvbid0IGF1dG9tYXRpY2FsbHkgZW1pdCB0aGUgZGVjbGVy YXRpb25zLgorICovCitEVUtfSU5URVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9w cm90b3R5cGVfdG9fc3RyaW5nKGR1a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wg ZHVrX3JldF90IGR1a19iaV9mdW5jdGlvbl9wcm90b3R5cGUoZHVrX2h0aHJlYWQgKnRocik7Cisj ZW5kaWYKKworI2VuZGlmICAvKiBEVUtfSE9CSkVDVF9IX0lOQ0xVREVEICovCisvKiAjaW5jbHVk ZSBkdWtfaGNvbXBmdW5jLmggKi8KKy8qCisgKiAgSGVhcCBjb21waWxlZCBmdW5jdGlvbiAoRUNN QVNjcmlwdCBmdW5jdGlvbikgcmVwcmVzZW50YXRpb24uCisgKgorICogIFRoZXJlIGlzIGEgc2lu Z2xlIGRhdGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIEVDTUFTY3JpcHQgZnVuY3Rpb24ncworICog IGJ5dGVjb2RlLCBjb25zdGFudHMsIGFuZCBpbm5lciBmdW5jdGlvbnMuCisgKi8KKworI2lmICFk ZWZpbmVkKERVS19IQ09NUEZVTkNfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19I X0lOQ0xVREVECisKKy8qCisgKiAgRmllbGQgYWNjZXNzb3IgbWFjcm9zCisgKi8KKworLyogWFhY OiBjYXN0cyBjb3VsZCBiZSBpbXByb3ZlZCwgZXNwZWNpYWxseSBmb3IgR0VUL1NFVCBEQVRBICov CisKKyNpZiBkZWZpbmVkKERVS19VU0VfSEVBUFBUUjE2KQorI2RlZmluZSBEVUtfSENPTVBGVU5D X0dFVF9EQVRBKGhlYXAsaCkgXAorCSgoZHVrX2hidWZmZXJfZml4ZWQgKikgKHZvaWQgKikgRFVL X1VTRV9IRUFQUFRSX0RFQzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKGgpLT5kYXRhMTYpKQorI2Rl ZmluZSBEVUtfSENPTVBGVU5DX1NFVF9EQVRBKGhlYXAsaCx2KSBkbyB7IFwKKwkJKGgpLT5kYXRh MTYgPSBEVUtfVVNFX0hFQVBQVFJfRU5DMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAodm9pZCAqKSAo dikpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1MoaGVh cCxoKSAgXAorCSgoZHVrX2hvYmplY3QgKiopICh2b2lkICopIChEVUtfVVNFX0hFQVBQVFJfREVD MTYoKGhlYXApLT5oZWFwX3VkYXRhLCAoaCktPmZ1bmNzMTYpKSkKKyNkZWZpbmUgRFVLX0hDT01Q RlVOQ19TRVRfRlVOQ1MoaGVhcCxoLHYpICBkbyB7IFwKKwkJKGgpLT5mdW5jczE2ID0gRFVLX1VT RV9IRUFQUFRSX0VOQzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKHZvaWQgKikgKHYpKTsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX0JZVEVDT0RFKGhlYXAsaCkgIFwK KwkoKGR1a19pbnN0cl90ICopICh2b2lkICopIChEVUtfVVNFX0hFQVBQVFJfREVDMTYoKGhlYXAp LT5oZWFwX3VkYXRhLCAoaCktPmJ5dGVjb2RlMTYpKSkKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19T RVRfQllURUNPREUoaGVhcCxoLHYpICBkbyB7IFwKKwkJKGgpLT5ieXRlY29kZTE2ID0gRFVLX1VT RV9IRUFQUFRSX0VOQzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKHZvaWQgKikgKHYpKTsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX0xFWEVOVihoZWFwLGgpICBcCisJ KChkdWtfaG9iamVjdCAqKSAodm9pZCAqKSAoRFVLX1VTRV9IRUFQUFRSX0RFQzE2KChoZWFwKS0+ aGVhcF91ZGF0YSwgKGgpLT5sZXhfZW52MTYpKSkKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19TRVRf TEVYRU5WKGhlYXAsaCx2KSAgZG8geyBcCisJCShoKS0+bGV4X2VudjE2ID0gRFVLX1VTRV9IRUFQ UFRSX0VOQzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKHZvaWQgKikgKHYpKTsgXAorCX0gd2hpbGUg KDApCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX1ZBUkVOVihoZWFwLGgpICBcCisJKChkdWtf aG9iamVjdCAqKSAodm9pZCAqKSAoRFVLX1VTRV9IRUFQUFRSX0RFQzE2KChoZWFwKS0+aGVhcF91 ZGF0YSwgKGgpLT52YXJfZW52MTYpKSkKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19TRVRfVkFSRU5W KGhlYXAsaCx2KSAgZG8geyBcCisJCShoKS0+dmFyX2VudjE2ID0gRFVLX1VTRV9IRUFQUFRSX0VO QzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKHZvaWQgKikgKHYpKTsgXAorCX0gd2hpbGUgKDApCisj ZWxzZQorI2RlZmluZSBEVUtfSENPTVBGVU5DX0dFVF9EQVRBKGhlYXAsaCkgICgoZHVrX2hidWZm ZXJfZml4ZWQgKikgKHZvaWQgKikgKGgpLT5kYXRhKQorI2RlZmluZSBEVUtfSENPTVBGVU5DX1NF VF9EQVRBKGhlYXAsaCx2KSBkbyB7IFwKKwkJKGgpLT5kYXRhID0gKGR1a19oYnVmZmVyICopICh2 KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX0ZVTkNTKGhlYXAs aCkgICgoaCktPmZ1bmNzKQorI2RlZmluZSBEVUtfSENPTVBGVU5DX1NFVF9GVU5DUyhoZWFwLGgs dikgIGRvIHsgXAorCQkoaCktPmZ1bmNzID0gKHYpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUg RFVLX0hDT01QRlVOQ19HRVRfQllURUNPREUoaGVhcCxoKSAgKChoKS0+Ynl0ZWNvZGUpCisjZGVm aW5lIERVS19IQ09NUEZVTkNfU0VUX0JZVEVDT0RFKGhlYXAsaCx2KSAgZG8geyBcCisJCShoKS0+ Ynl0ZWNvZGUgPSAodik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSENPTVBGVU5DX0dF VF9MRVhFTlYoaGVhcCxoKSAgKChoKS0+bGV4X2VudikKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19T RVRfTEVYRU5WKGhlYXAsaCx2KSAgZG8geyBcCisJCShoKS0+bGV4X2VudiA9ICh2KTsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX1ZBUkVOVihoZWFwLGgpICAoKGgp LT52YXJfZW52KQorI2RlZmluZSBEVUtfSENPTVBGVU5DX1NFVF9WQVJFTlYoaGVhcCxoLHYpICBk byB7IFwKKwkJKGgpLT52YXJfZW52ID0gKHYpOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisv KgorICogIEFjY2Vzc29yIG1hY3JvcyBmb3IgZnVuY3Rpb24gc3BlY2lmaWMgZGF0YSBhcmVhcwor ICovCisKKy8qIE5vdGU6IGFzc3VtZXMgJ2RhdGEnIGlzIGFsd2F5cyBhIGZpeGVkIGJ1ZmZlciAq LworI2RlZmluZSBEVUtfSENPTVBGVU5DX0dFVF9CVUZGRVJfQkFTRShoZWFwLGgpICBcCisJRFVL X0hCVUZGRVJfRklYRURfR0VUX0RBVEFfUFRSKChoZWFwKSwgRFVLX0hDT01QRlVOQ19HRVRfREFU QSgoaGVhcCksIChoKSkpCisKKyNkZWZpbmUgRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0JBU0Uo aGVhcCxoKSAgXAorCSgoZHVrX3R2YWwgKikgKHZvaWQgKikgRFVLX0hDT01QRlVOQ19HRVRfQlVG RkVSX0JBU0UoKGhlYXApLCAoaCkpKQorCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX0ZVTkNT X0JBU0UoaGVhcCxoKSAgXAorCURVS19IQ09NUEZVTkNfR0VUX0ZVTkNTKChoZWFwKSwgKGgpKQor CisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX0NPREVfQkFTRShoZWFwLGgpICBcCisJRFVLX0hD T01QRlVOQ19HRVRfQllURUNPREUoKGhlYXApLCAoaCkpCisKKyNkZWZpbmUgRFVLX0hDT01QRlVO Q19HRVRfQ09OU1RTX0VORChoZWFwLGgpICBcCisJKChkdWtfdHZhbCAqKSAodm9pZCAqKSBEVUtf SENPTVBGVU5DX0dFVF9GVU5DUygoaGVhcCksIChoKSkpCisKKyNkZWZpbmUgRFVLX0hDT01QRlVO Q19HRVRfRlVOQ1NfRU5EKGhlYXAsaCkgIFwKKwkoKGR1a19ob2JqZWN0ICoqKSAodm9pZCAqKSBE VUtfSENPTVBGVU5DX0dFVF9CWVRFQ09ERSgoaGVhcCksIChoKSkpCisKKy8qIFhYWDogZG91Ymxl IGV2YWx1YXRpb24gb2YgRFVLX0hDT01QRlVOQ19HRVRfREFUQSgpICovCisjZGVmaW5lIERVS19I Q09NUEZVTkNfR0VUX0NPREVfRU5EKGhlYXAsaCkgIFwKKwkoKGR1a19pbnN0cl90ICopICh2b2lk ICopIChEVUtfSEJVRkZFUl9GSVhFRF9HRVRfREFUQV9QVFIoKGhlYXApLCBEVUtfSENPTVBGVU5D X0dFVF9EQVRBKChoZWFwKSwgKGgpKSkgKyBcCisJICAgICAgICAgICAgICAgIERVS19IQlVGRkVS X0dFVF9TSVpFKChkdWtfaGJ1ZmZlciAqKSBEVUtfSENPTVBGVU5DX0dFVF9EQVRBKChoZWFwKSwg aCkpKSkKKworI2RlZmluZSBEVUtfSENPTVBGVU5DX0dFVF9DT05TVFNfU0laRShoZWFwLGgpICBc CisJKCBcCisJIChkdWtfc2l6ZV90KSBcCisJICggXAorCSAgICgoY29uc3QgZHVrX3VpbnQ4X3Qg KikgRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0VORCgoaGVhcCksIChoKSkpIC0gXAorCSAgICgo Y29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0JBU0UoKGhlYXAp LCAoaCkpKSBcCisJICkgXAorCSkKKworI2RlZmluZSBEVUtfSENPTVBGVU5DX0dFVF9GVU5DU19T SVpFKGhlYXAsaCkgIFwKKwkoIFwKKwkgKGR1a19zaXplX3QpIFwKKwkgKCBcCisJICAgKChjb25z dCBkdWtfdWludDhfdCAqKSBEVUtfSENPTVBGVU5DX0dFVF9GVU5DU19FTkQoKGhlYXApLCAoaCkp KSAtIFwKKwkgICAoKGNvbnN0IGR1a191aW50OF90ICopIERVS19IQ09NUEZVTkNfR0VUX0ZVTkNT X0JBU0UoKGhlYXApLCAoaCkpKSBcCisJICkgXAorCSkKKworI2RlZmluZSBEVUtfSENPTVBGVU5D X0dFVF9DT0RFX1NJWkUoaGVhcCxoKSAgXAorCSggXAorCSAoZHVrX3NpemVfdCkgXAorCSAoIFwK KwkgICAoKGNvbnN0IGR1a191aW50OF90ICopIERVS19IQ09NUEZVTkNfR0VUX0NPREVfRU5EKCho ZWFwKSwoaCkpKSAtIFwKKwkgICAoKGNvbnN0IGR1a191aW50OF90ICopIERVS19IQ09NUEZVTkNf R0VUX0NPREVfQkFTRSgoaGVhcCksKGgpKSkgXAorCSApIFwKKwkpCisKKyNkZWZpbmUgRFVLX0hD T01QRlVOQ19HRVRfQ09OU1RTX0NPVU5UKGhlYXAsaCkgIFwKKwkoKGR1a19zaXplX3QpIChEVUtf SENPTVBGVU5DX0dFVF9DT05TVFNfU0laRSgoaGVhcCksIChoKSkgLyBzaXplb2YoZHVrX3R2YWwp KSkKKworI2RlZmluZSBEVUtfSENPTVBGVU5DX0dFVF9GVU5DU19DT1VOVChoZWFwLGgpICBcCisJ KChkdWtfc2l6ZV90KSAoRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1NfU0laRSgoaGVhcCksIChoKSkg LyBzaXplb2YoZHVrX2hvYmplY3QgKikpKQorCisjZGVmaW5lIERVS19IQ09NUEZVTkNfR0VUX0NP REVfQ09VTlQoaGVhcCxoKSAgXAorCSgoZHVrX3NpemVfdCkgKERVS19IQ09NUEZVTkNfR0VUX0NP REVfU0laRSgoaGVhcCksIChoKSkgLyBzaXplb2YoZHVrX2luc3RyX3QpKSkKKworLyoKKyAqICBW YWxpZGl0eSBhc3NlcnQKKyAqLworCisjZGVmaW5lIERVS19BU1NFUlRfSENPTVBGVU5DX1ZBTElE KGgpIGRvIHsgXAorCQlEVUtfQVNTRVJUKChoKSAhPSBOVUxMKTsgXAorCX0gd2hpbGUgKDApCisK Ky8qCisgKiAgTWFpbiBzdHJ1Y3QKKyAqLworCitzdHJ1Y3QgZHVrX2hjb21wZnVuYyB7CisJLyog c2hhcmVkIG9iamVjdCBwYXJ0ICovCisJZHVrX2hvYmplY3Qgb2JqOworCisJLyoKKwkgKiAgUG9p bnRlcnMgdG8gZnVuY3Rpb24gZGF0YSBhcmVhIGZvciBmYXN0ZXIgYWNjZXNzLiAgRnVuY3Rpb24K KwkgKiAgZGF0YSBpcyBhIGJ1ZmZlciBzaGFyZWQgYmV0d2VlbiBhbGwgY2xvc3VyZXMgb2YgdGhl IHNhbWUKKwkgKiAgInRlbXBsYXRlIiBmdW5jdGlvbi4gIFRoZSBkYXRhIGJ1ZmZlciBpcyBhbHdh eXMgZml4ZWQgKG5vbi0KKwkgKiAgZHluYW1pYywgaGVuY2Ugc3RhYmxlKSwgd2l0aCBhIGxheW91 dCBhcyBmb2xsb3dzOgorCSAqCisJICogICAgY29uc3RhbnRzIChkdWtfdHZhbCkKKwkgKiAgICBp bm5lciBmdW5jdGlvbnMgKGR1a19ob2JqZWN0ICopCisJICogICAgYnl0ZWNvZGUgKGR1a19pbnN0 cl90KQorCSAqCisJICogIE5vdGU6IGJ5dGVjb2RlIGVuZCBhZGRyZXNzIGNhbiBiZSBjb21wdXRl ZCBmcm9tICdkYXRhJyBidWZmZXIKKwkgKiAgc2l6ZS4gIEl0IGlzIG5vdCBzdHJpY3RseSBuZWNl c3NhcnkgZnVuY3Rpb25hbGx5LCBhc3N1bWluZworCSAqICBieXRlY29kZSBuZXZlciBqdW1wcyBv dXRzaWRlIGl0cyBhbGxvY2F0ZWQgYXJlYS4gIEhvd2V2ZXIsCisJICogIGl0J3MgYSBzYWZldHkv cm9idXN0bmVzcyBmZWF0dXJlIGZvciBhdm9pZGluZyB0aGUgY2hhbmNlIG9mCisJICogIGV4ZWN1 dGluZyByYW5kb20gZGF0YSBhcyBieXRlY29kZSBkdWUgdG8gYSBjb21waWxlciBlcnJvci4KKwkg KgorCSAqICBOb3RlOiB2YWx1ZXMgaW4gdGhlIGRhdGEgYnVmZmVyIG11c3QgYmUgaW5jcmVmJ2Qg KHRoZXkgd2lsbAorCSAqICBiZSBkZWNyZWYnZCBvbiByZWxlYXNlKSBmb3IgZXZlcnkgY29tcGls ZWRmdW5jdGlvbiByZWZlcnJpbmcKKwkgKiAgdG8gdGhlICdkYXRhJyBlbGVtZW50LgorCSAqLwor CisJLyogRGF0YSBhcmVhLCBmaXhlZCBhbGxvY2F0aW9uLCBzdGFibGUgZGF0YSBwdHJzLiAqLwor I2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQxNl90IGRhdGExNjsKKyNl bHNlCisJZHVrX2hidWZmZXIgKmRhdGE7CisjZW5kaWYKKworCS8qIE5vIG5lZWQgZm9yIGNvbnN0 YW50cyBwb2ludGVyICg9IHNhbWUgYXMgZGF0YSkuCisJICoKKwkgKiBXaGVuIHVzaW5nIDE2LWJp dCBwYWNraW5nIGFsaWdubWVudCB0byA0IGlzIG5pY2UuICAnZnVuY3MnIHdpbGwgYmUKKwkgKiA0 LWJ5dGUgYWxpZ25lZCBiZWNhdXNlICdjb25zdGFudHMnIGFyZSBkdWtfdHZhbHMuICBGb3Igbm93 IHRoZQorCSAqIGlubmVyIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBub3QgY29tcHJlc3NlZCwgc28g dGhhdCAnYnl0ZWNvZGUnIHdpbGwKKwkgKiBhbHNvIGJlIDQtYnl0ZSBhbGlnbmVkLgorCSAqLwor I2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQxNl90IGZ1bmNzMTY7CisJ ZHVrX3VpbnQxNl90IGJ5dGVjb2RlMTY7CisjZWxzZQorCWR1a19ob2JqZWN0ICoqZnVuY3M7CisJ ZHVrX2luc3RyX3QgKmJ5dGVjb2RlOworI2VuZGlmCisKKwkvKiBMZXhlbnY6IGxleGljYWwgZW52 aXJvbm1lbnQgb2YgY2xvc3VyZSwgTlVMTCBmb3IgdGVtcGxhdGVzLgorCSAqIFZhcmVudjogdmFy aWFibGUgZW52aXJvbm1lbnQgb2YgY2xvc3VyZSwgTlVMTCBmb3IgdGVtcGxhdGVzLgorCSAqLwor I2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJZHVrX3VpbnQxNl90IGxleF9lbnYxNjsK KwlkdWtfdWludDE2X3QgdmFyX2VudjE2OworI2Vsc2UKKwlkdWtfaG9iamVjdCAqbGV4X2VudjsK KwlkdWtfaG9iamVjdCAqdmFyX2VudjsKKyNlbmRpZgorCisJLyoKKwkgKiAgJ25yZWdzJyByZWdp c3RlcnMgYXJlIGFsbG9jYXRlZCBvbiBmdW5jdGlvbiBlbnRyeSwgYXQgbW9zdCAnbmFyZ3MnCisJ ICogIGFyZSBpbml0aWFsaXplZCB0byBhcmd1bWVudHMsIGFuZCB0aGUgcmVzdCB0byB1bmRlZmlu ZWQuICBBcmd1bWVudHMKKwkgKiAgYWJvdmUgJ25yZWdzJyBhcmUgbm90IG1hcHBlZCB0byByZWdp c3RlcnMuICBBbGwgcmVnaXN0ZXJzIGluIHRoZQorCSAqICBhY3RpdmUgc3RhY2sgcmFuZ2UgbXVz dCBiZSBpbml0aWFsaXplZCBiZWNhdXNlIHRoZXkgYXJlIEdDIHJlYWNoYWJsZS4KKwkgKiAgJ25h cmdzJyBpcyBuZWVkZWQgc28gdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgZ2l2ZW4gbW9yZSB0aGFu ICduYXJncycKKwkgKiAgYXJndW1lbnRzLCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgZG8gbm90 ICdjbG9iYmVyJyByZWdpc3RlcnMKKwkgKiAgYmV5b25kICducmVncycgd2hpY2ggbXVzdCBiZSBj b25zaXN0ZW50bHkgaW5pdGlhbGl6ZWQgdG8gdW5kZWZpbmVkLgorCSAqCisJICogIFVzdWFsbHkg dGhlcmUgaXMgbm8gbmVlZCB0byBrbm93IHdoaWNoIHJlZ2lzdGVycyBhcmUgbWFwcGVkIHRvCisJ ICogIGxvY2FsIHZhcmlhYmxlcy4gIFJlZ2lzdGVycyBtYXkgYmUgYWxsb2NhdGVkIHRvIHZhcmlh YmxlIGluIGFueQorCSAqICB3YXkgKGV2ZW4gaW5jbHVkaW5nIGdhcHMpLiAgSG93ZXZlciwgYSBy ZWdpc3Rlci12YXJpYWJsZSBtYXBwaW5nCisJICogIG11c3QgYmUgdGhlIHNhbWUgZm9yIHRoZSBk dXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZXhlY3V0aW9uIGFuZAorCSAqICB0aGUgcmVnaXN0ZXIg Y2Fubm90IGJlIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuCisJICoKKwkgKiAgV2hlbiBsb29raW5n IHVwIHZhcmlhYmxlcyBieSBuYW1lLCB0aGUgJ19WYXJtYXAnIG1hcCBpcyB1c2VkLgorCSAqICBX aGVuIGFuIGFjdGl2YXRpb24gY2xvc2VzLCByZWdpc3RlcnMgbWFwcGVkIHRvIGFyZ3VtZW50cyBh cmUKKwkgKiAgY29waWVkIGludG8gdGhlIGVudmlyb25tZW50IHJlY29yZCBiYXNlZCBvbiB0aGUg c2FtZSBtYXAuICBUaGUKKwkgKiAgcmV2ZXJzZSBtYXAgKGZyb20gcmVnaXN0ZXIgdG8gdmFyaWFi bGUpIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkCisJICogIGF0IHJ1biB0aW1lLCBleGNlcHQgZm9y IGRlYnVnZ2luZywgc28gaXQgaXMgbm90IG1haW50YWluZWQuCisJICovCisKKwlkdWtfdWludDE2 X3QgbnJlZ3M7ICAgICAgICAgICAgICAgIC8qIHJlZ3MgdG8gYWxsb2NhdGUgKi8KKwlkdWtfdWlu dDE2X3QgbmFyZ3M7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBhcmd1bWVudHMgYWxsb2Nh dGVkIHRvIHJlZ3MgKi8KKworCS8qCisJICogIEFkZGl0aW9uYWwgY29udHJvbCBpbmZvcm1hdGlv biBpcyBwbGFjZWQgaW50byB0aGUgb2JqZWN0IGl0c2VsZgorCSAqICBhcyBpbnRlcm5hbCBwcm9w ZXJ0aWVzIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZpZWxkcyBmb3IgdGhlCisJICogIG1ham9yaXR5 IG9mIGZ1bmN0aW9ucy4gIFRoZSBjb21waWxlciB0cmllcyB0byBvbWl0IGludGVybmFsCisJICog IGNvbnRyb2wgZmllbGRzIHdoZW4gcG9zc2libGUuCisJICoKKwkgKiAgRnVuY3Rpb24gdGVtcGxh dGVzOgorCSAqCisJICogICAgeworCSAqICAgICAgbmFtZTogImZ1bmMiLCAgICAvLyBkZWNsYXJh dGlvbiwgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMKKwkgKiAgICAgIGZpbGVOYW1lOiA8ZGVi dWcgaW5mbyBmb3IgY3JlYXRpbmcgbmljZSBlcnJvcnM+CisJICogICAgICBfVmFybWFwOiB7ICJh cmcxIjogMCwgImFyZzIiOiAxLCAidmFybmFtZSI6IDIgfSwKKwkgKiAgICAgIF9Gb3JtYWxzOiBb ICJhcmcxIiwgImFyZzIiIF0sCisJICogICAgICBfU291cmNlOiAiZnVuY3Rpb24gZnVuYyhhcmcx LCBhcmcyKSB7IC4uLiB9IiwKKwkgKiAgICAgIF9QYzJsaW5lOiA8ZGVidWcgaW5mbyBmb3IgcGMt dG8tbGluZSBtYXBwaW5nPiwKKwkgKiAgICB9CisJICoKKwkgKiAgRnVuY3Rpb24gaW5zdGFuY2Vz OgorCSAqCisJICogICAgeworCSAqICAgICAgbGVuZ3RoOiAyLAorCSAqICAgICAgcHJvdG90eXBl OiB7IGNvbnN0cnVjdG9yOiA8ZnVuYz4gfSwKKwkgKiAgICAgIGNhbGxlcjogPHRocm93ZXI+LAor CSAqICAgICAgYXJndW1lbnRzOiA8dGhyb3dlcj4sCisJICogICAgICBuYW1lOiAiZnVuYyIsICAg IC8vIGRlY2xhcmF0aW9uLCBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9ucworCSAqICAgICAgZmls ZU5hbWU6IDxkZWJ1ZyBpbmZvIGZvciBjcmVhdGluZyBuaWNlIGVycm9ycz4KKwkgKiAgICAgIF9W YXJtYXA6IHsgImFyZzEiOiAwLCAiYXJnMiI6IDEsICJ2YXJuYW1lIjogMiB9LAorCSAqICAgICAg X0Zvcm1hbHM6IFsgImFyZzEiLCAiYXJnMiIgXSwKKwkgKiAgICAgIF9Tb3VyY2U6ICJmdW5jdGlv biBmdW5jKGFyZzEsIGFyZzIpIHsgLi4uIH0iLAorCSAqICAgICAgX1BjMmxpbmU6IDxkZWJ1ZyBp bmZvIGZvciBwYy10by1saW5lIG1hcHBpbmc+LAorCSAqICAgIH0KKwkgKgorCSAqICBNb3JlIGRl dGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGZvdW5kCisJICog IGluIHRoZSBkb2N1bWVudGF0aW9uLgorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVH R0VSX1NVUFBPUlQpCisJLyogTGluZSBudW1iZXIgcmFuZ2UgZm9yIGZ1bmN0aW9uLiAgTmVlZGVk IGR1cmluZyBkZWJ1Z2dpbmcgdG8KKwkgKiBkZXRlcm1pbmUgYWN0aXZlIGJyZWFrcG9pbnRzLgor CSAqLworCWR1a191aW50MzJfdCBzdGFydF9saW5lOworCWR1a191aW50MzJfdCBlbmRfbGluZTsK KyNlbmRpZgorfTsKKworI2VuZGlmICAvKiBEVUtfSENPTVBGVU5DX0hfSU5DTFVERUQgKi8KKy8q ICNpbmNsdWRlIGR1a19obmF0ZnVuYy5oICovCisvKgorICogIEhlYXAgbmF0aXZlIGZ1bmN0aW9u IHJlcHJlc2VudGF0aW9uLgorICovCisKKyNpZiAhZGVmaW5lZChEVUtfSE5BVEZVTkNfSF9JTkNM VURFRCkKKyNkZWZpbmUgRFVLX0hOQVRGVU5DX0hfSU5DTFVERUQKKworI2RlZmluZSBEVUtfSE5B VEZVTkNfTkFSR1NfVkFSQVJHUyAgKChkdWtfaW50MTZfdCkgLTEpCisjZGVmaW5lIERVS19ITkFU RlVOQ19OQVJHU19NQVggICAgICAoKGR1a19pbnQxNl90KSAweDdmZmYpCisKK3N0cnVjdCBkdWtf aG5hdGZ1bmMgeworCS8qIHNoYXJlZCBvYmplY3QgcGFydCAqLworCWR1a19ob2JqZWN0IG9iajsK KworCWR1a19jX2Z1bmN0aW9uIGZ1bmM7CisJZHVrX2ludDE2X3QgbmFyZ3M7CisJZHVrX2ludDE2 X3QgbWFnaWM7CisKKwkvKiBUaGUgJ21hZ2ljJyBmaWVsZCBhbGxvd3MgYW4gb3BhcXVlIDE2LWJp dCBmaWVsZCB0byBiZSBhY2Nlc3NlZCBieSB0aGUKKwkgKiBEdWt0YXBlL0MgZnVuY3Rpb24uICBU aGlzIGFsbG93cywgZm9yIGluc3RhbmNlLCB0aGUgc2FtZSBuYXRpdmUgZnVuY3Rpb24KKwkgKiB0 byBiZSB1c2VkIGZvciBhIHNldCBvZiB2ZXJ5IHNpbWlsYXIgZnVuY3Rpb25zLCB3aXRoIHRoZSAn bWFnaWMnIGZpZWxkCisJICogcHJvdmlkaW5nIHRoZSBuZWNlc3Nhcnkgbm9uLWFyZ3VtZW50IGZs YWdzIC8gdmFsdWVzIHRvIGd1aWRlIHRoZSBiZWhhdmlvcgorCSAqIG9mIHRoZSBuYXRpdmUgZnVu Y3Rpb24uICBUaGUgdmFsdWUgaXMgc2lnbmVkIG9uIHB1cnBvc2U6IGl0IGlzIGVhc2llciB0bwor CSAqIGNvbnZlcnQgYSBzaWduZWQgdmFsdWUgdG8gdW5zaWduZWQgKHNpbXBseSBBTkQgd2l0aCAw eGZmZmYpIHRoYW4gdmljZQorCSAqIHZlcnNhLgorCSAqCisJICogTm90ZTogY2Fubm90IHBsYWNl IG5hcmdzL21hZ2ljIGludG8gdGhlIGhlYXBoZHIgZmxhZ3MsIGJlY2F1c2UKKwkgKiBkdWtfaG9i amVjdCB0YWtlcyBhbG1vc3QgYWxsIGZsYWdzIGFscmVhZHkuCisJICovCit9OworCisjZW5kaWYg IC8qIERVS19ITkFURlVOQ19IX0lOQ0xVREVEICovCisvKiAjaW5jbHVkZSBkdWtfaGJvdW5kZnVu Yy5oICovCisvKgorICogIEJvdW5kIGZ1bmN0aW9uIHJlcHJlc2VudGF0aW9uLgorICovCisKKyNp ZiAhZGVmaW5lZChEVUtfSEJPVU5ERlVOQ19IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfSEJPVU5E RlVOQ19IX0lOQ0xVREVECisKKy8qIEFydGlmaWNpYWwgbGltaXQgZm9yIGFyZ3MgbGVuZ3RoLiAg RW5zdXJlcyBhcml0aG1ldGljIHdvbid0IG92ZXJmbG93CisgKiAzMiBiaXRzIHdoZW4gY29tYmlu aW5nIGJvdW5kIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBEVUtfSEJPVU5ERlVOQ19NQVhfQVJH UyAweDIwMDAwMDAwVUwKKworI2RlZmluZSBEVUtfQVNTRVJUX0hCT1VOREZVTkNfVkFMSUQoaCkg ZG8geyBcCisJCURVS19BU1NFUlQoKGgpICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoRFVLX0hP QkpFQ1RfSVNfQk9VTkRGVU5DKChkdWtfaG9iamVjdCAqKSAoaCkpKTsgXAorCQlEVUtfQVNTRVJU KERVS19UVkFMX0lTX0xJR0hURlVOQygmKGgpLT50YXJnZXQpIHx8IFwKKwkJICAgICAgICAgICAo RFVLX1RWQUxfSVNfT0JKRUNUKCYoaCktPnRhcmdldCkgJiYgXAorCQkgICAgICAgICAgICBEVUtf SE9CSkVDVF9JU19DQUxMQUJMRShEVUtfVFZBTF9HRVRfT0JKRUNUKCYoaCktPnRhcmdldCkpKSk7 IFwKKwkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNfVU5VU0VEKCYoaCktPnRoaXNfYmluZGluZykp OyBcCisJCURVS19BU1NFUlQoKGgpLT5uYXJncyA9PSAwIHx8IChoKS0+YXJncyAhPSBOVUxMKTsg XAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBkdWtfaGJvdW5kZnVuYyB7CisJLyogU2hhcmVkIG9i amVjdCBwYXJ0LiAqLworCWR1a19ob2JqZWN0IG9iajsKKworCS8qIEZpbmFsIHRhcmdldCBmdW5j dGlvbiwgc3RvcmVkIGFzIGR1a190dmFsIHNvIHRoYXQgbGlnaHRmdW5jIGNhbiBiZQorCSAqIHJl cHJlc2VudGVkIHRvby4KKwkgKi8KKwlkdWtfdHZhbCB0YXJnZXQ7CisKKwkvKiBUaGlzIGJpbmRp bmcuICovCisJZHVrX3R2YWwgdGhpc19iaW5kaW5nOworCisJLyogQXJndW1lbnRzIHRvIHByZXBl bmQuICovCisJZHVrX3R2YWwgKmFyZ3M7ICAvKiBTZXBhcmF0ZSBhbGxvY2F0aW9uLiAqLworCWR1 a19pZHhfdCBuYXJnczsKK307CisKKyNlbmRpZiAgLyogRFVLX0hCT1VOREZVTkNfSF9JTkNMVURF RCAqLworLyogI2luY2x1ZGUgZHVrX2hidWZvYmouaCAqLworLyoKKyAqICBIZWFwIEJ1ZmZlciBv YmplY3QgcmVwcmVzZW50YXRpb24uICBVc2VkIGZvciBhbGwgQnVmZmVyIHZhcmlhbnRzLgorICov CisKKyNpZiAhZGVmaW5lZChEVUtfSEJVRk9CSl9IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfSEJV Rk9CSl9IX0lOQ0xVREVECisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBP UlQpCisKKy8qIEFsbCBlbGVtZW50IGFjY2Vzc29ycyBhcmUgaG9zdCBlbmRpYW4gbm93IChkcml2 ZW4gYnkgVHlwZWRBcnJheSBzcGVjKS4gKi8KKyNkZWZpbmUgRFVLX0hCVUZPQkpfRUxFTV9VSU5U OCAgICAgICAgICAgMAorI2RlZmluZSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4Q0xBTVBFRCAgICAx CisjZGVmaW5lIERVS19IQlVGT0JKX0VMRU1fSU5UOCAgICAgICAgICAgIDIKKyNkZWZpbmUgRFVL X0hCVUZPQkpfRUxFTV9VSU5UMTYgICAgICAgICAgMworI2RlZmluZSBEVUtfSEJVRk9CSl9FTEVN X0lOVDE2ICAgICAgICAgICA0CisjZGVmaW5lIERVS19IQlVGT0JKX0VMRU1fVUlOVDMyICAgICAg ICAgIDUKKyNkZWZpbmUgRFVLX0hCVUZPQkpfRUxFTV9JTlQzMiAgICAgICAgICAgNgorI2RlZmlu ZSBEVUtfSEJVRk9CSl9FTEVNX0ZMT0FUMzIgICAgICAgICA3CisjZGVmaW5lIERVS19IQlVGT0JK X0VMRU1fRkxPQVQ2NCAgICAgICAgIDgKKyNkZWZpbmUgRFVLX0hCVUZPQkpfRUxFTV9NQVggICAg ICAgICAgICAgOAorCisjZGVmaW5lIERVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChoKSBkbyB7IFwK KwkJRFVLX0FTU0VSVCgoaCkgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVCgoaCktPnNoaWZ0IDw9 IDMpOyBcCisJCURVS19BU1NFUlQoKGgpLT5lbGVtX3R5cGUgPD0gRFVLX0hCVUZPQkpfRUxFTV9N QVgpOyBcCisJCURVS19BU1NFUlQoKChoKS0+c2hpZnQgPT0gMCAmJiAoaCktPmVsZW1fdHlwZSA9 PSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4KSB8fCBcCisJCSAgICAgICAgICAgKChoKS0+c2hpZnQg PT0gMCAmJiAoaCktPmVsZW1fdHlwZSA9PSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4Q0xBTVBFRCkg fHwgXAorCQkgICAgICAgICAgICgoaCktPnNoaWZ0ID09IDAgJiYgKGgpLT5lbGVtX3R5cGUgPT0g RFVLX0hCVUZPQkpfRUxFTV9JTlQ4KSB8fCBcCisJCSAgICAgICAgICAgKChoKS0+c2hpZnQgPT0g MSAmJiAoaCktPmVsZW1fdHlwZSA9PSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQxNikgfHwgXAorCQkg ICAgICAgICAgICgoaCktPnNoaWZ0ID09IDEgJiYgKGgpLT5lbGVtX3R5cGUgPT0gRFVLX0hCVUZP QkpfRUxFTV9JTlQxNikgfHwgXAorCQkgICAgICAgICAgICgoaCktPnNoaWZ0ID09IDIgJiYgKGgp LT5lbGVtX3R5cGUgPT0gRFVLX0hCVUZPQkpfRUxFTV9VSU5UMzIpIHx8IFwKKwkJICAgICAgICAg ICAoKGgpLT5zaGlmdCA9PSAyICYmIChoKS0+ZWxlbV90eXBlID09IERVS19IQlVGT0JKX0VMRU1f SU5UMzIpIHx8IFwKKwkJICAgICAgICAgICAoKGgpLT5zaGlmdCA9PSAyICYmIChoKS0+ZWxlbV90 eXBlID09IERVS19IQlVGT0JKX0VMRU1fRkxPQVQzMikgfHwgXAorCQkgICAgICAgICAgICgoaCkt PnNoaWZ0ID09IDMgJiYgKGgpLT5lbGVtX3R5cGUgPT0gRFVLX0hCVUZPQkpfRUxFTV9GTE9BVDY0 KSk7IFwKKwkJRFVLX0FTU0VSVCgoaCktPmlzX3R5cGVkYXJyYXkgPT0gMCB8fCAoaCktPmlzX3R5 cGVkYXJyYXkgPT0gMSk7IFwKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19CVUZPQkooKGR1 a19ob2JqZWN0ICopIChoKSkpOyBcCisJCWlmICgoaCktPmJ1ZiA9PSBOVUxMKSB7IFwKKwkJCURV S19BU1NFUlQoKGgpLT5vZmZzZXQgPT0gMCk7IFwKKwkJCURVS19BU1NFUlQoKGgpLT5sZW5ndGgg PT0gMCk7IFwKKwkJfSBlbHNlIHsgXAorCQkJLyogTm8gYXNzZXJ0aW9ucyBmb3Igb2Zmc2V0IG9y IGxlbmd0aDsgaW4gcGFydGljdWxhciwgXAorCQkJICogaXQncyBPSyBmb3IgbGVuZ3RoIHRvIGJl IGxvbmdlciB0aGFuIHVuZGVybHlpbmcgXAorCQkJICogYnVmZmVyLiAgSnVzdCBlbnN1cmUgdGhl eSBkb24ndCB3cmFwIHdoZW4gYWRkZWQuIFwKKwkJCSAqLyBcCisJCQlEVUtfQVNTRVJUKChoKS0+ b2Zmc2V0ICsgKGgpLT5sZW5ndGggPj0gKGgpLT5vZmZzZXQpOyBcCisJCX0gXAorCX0gd2hpbGUg KDApCisKKy8qIEdldCB0aGUgY3VycmVudCBkYXRhIHBvaW50ZXIgKGNhbGxlciBtdXN0IGVuc3Vy ZSBidWYgIT0gTlVMTCkgYXMgYQorICogZHVrX3VpbnQ4X3QgcHRyLiAgTm90ZSB0aGF0IHRoZSBy ZXN1bHQgbWF5IGJlIE5VTEwgaWYgdGhlIHVuZGVybHlpbmcKKyAqIGJ1ZmZlciBoYXMgemVybyBz aXplIGFuZCBpcyBub3QgYSBmaXhlZCBidWZmZXIuCisgKi8KKyNkZWZpbmUgRFVLX0hCVUZPQkpf R0VUX1NMSUNFX0JBU0UoaGVhcCxoKSBcCisJKERVS19BU1NFUlRfRVhQUigoaCkgIT0gTlVMTCks IERVS19BU1NFUlRfRVhQUigoaCktPmJ1ZiAhPSBOVUxMKSwgXAorCSgoKGR1a191aW50OF90ICop IERVS19IQlVGRkVSX0dFVF9EQVRBX1BUUigoaGVhcCksIChoKS0+YnVmKSkgKyAoaCktPm9mZnNl dCkpCisKKy8qIFRydWUgaWYgc2xpY2UgaXMgZnVsbCwgaS5lLiBvZmZzZXQgaXMgemVybyBhbmQg bGVuZ3RoIGNvdmVycyB0aGUgZW50aXJlCisgKiBidWZmZXIuICBUaGlzIHN0YXR1cyBtYXkgY2hh bmdlIGluZGVwZW5kZW50bHkgb2YgdGhlIGR1a19oYnVmb2JqIGlmCisgKiB0aGUgdW5kZXJseWlu ZyBidWZmZXIgaXMgZHluYW1pYyBhbmQgY2hhbmdlcyB3aXRob3V0IHRoZSBoYnVmb2JqCisgKiBi ZWluZyBjaGFuZ2VkLgorICovCisjZGVmaW5lIERVS19IQlVGT0JKX0ZVTExfU0xJQ0UoaCkgXAor CShEVUtfQVNTRVJUX0VYUFIoKGgpICE9IE5VTEwpLCBEVUtfQVNTRVJUX0VYUFIoKGgpLT5idWYg IT0gTlVMTCksIFwKKwkoKGgpLT5vZmZzZXQgPT0gMCAmJiAoaCktPmxlbmd0aCA9PSBEVUtfSEJV RkZFUl9HRVRfU0laRSgoaCktPmJ1ZikpKQorCisvKiBWYWxpZGF0ZSB0aGF0IHRoZSB3aG9sZSBz bGljZSBbMCxsZW5ndGhbIGlzIGNvbnRhaW5lZCBpbiB0aGUgdW5kZXJseWluZworICogYnVmZmVy LiAgQ2FsbGVyIG11c3QgZW5zdXJlICdidWYnICE9IE5VTEwuCisgKi8KKyNkZWZpbmUgRFVLX0hC VUZPQkpfVkFMSURfU0xJQ0UoaCkgXAorCShEVUtfQVNTRVJUX0VYUFIoKGgpICE9IE5VTEwpLCBE VUtfQVNTRVJUX0VYUFIoKGgpLT5idWYgIT0gTlVMTCksIFwKKwkoKGgpLT5vZmZzZXQgKyAoaCkt Pmxlbmd0aCA8PSBEVUtfSEJVRkZFUl9HRVRfU0laRSgoaCktPmJ1ZikpKQorCisvKiBWYWxpZGF0 ZSBieXRlIHJlYWQvd3JpdGUgZm9yIHZpcnR1YWwgJ29mZnNldCcsIGkuZS4gY2hlY2sgdGhhdCB0 aGUKKyAqIG9mZnNldCwgdGFraW5nIGludG8gYWNjb3VudCBoLT5vZmZzZXQsIGlzIHdpdGhpbiB0 aGUgdW5kZXJseWluZworICogYnVmZmVyIHNpemUuICBUaGlzIGlzIGEgc2FmZXR5IGNoZWNrIHdo aWNoIGlzIG5lZWRlZCB0byBlbnN1cmUKKyAqIHRoYXQgZXZlbiBhIG1pc2NvbmZpZ3VyZWQgZHVr X2hidWZvYmogbmV2ZXIgY2F1c2VzIG1lbW9yeSB1bnNhZmUKKyAqIGJlaGF2aW9yIChlLmcuIGlm IGFuIHVuZGVybHlpbmcgZHluYW1pYyBidWZmZXIgY2hhbmdlcyBhZnRlciBiZWluZworICogc2V0 dXApLiAgQ2FsbGVyIG11c3QgZW5zdXJlICdidWYnICE9IE5VTEwuCisgKi8KKyNkZWZpbmUgRFVL X0hCVUZPQkpfVkFMSURfQllURU9GRlNFVF9JTkNMKGgsb2ZmKSBcCisJKERVS19BU1NFUlRfRVhQ UigoaCkgIT0gTlVMTCksIERVS19BU1NFUlRfRVhQUigoaCktPmJ1ZiAhPSBOVUxMKSwgXAorCSgo aCktPm9mZnNldCArIChvZmYpIDwgRFVLX0hCVUZGRVJfR0VUX1NJWkUoKGgpLT5idWYpKSkKKwor I2RlZmluZSBEVUtfSEJVRk9CSl9WQUxJRF9CWVRFT0ZGU0VUX0VYQ0woaCxvZmYpIFwKKwkoRFVL X0FTU0VSVF9FWFBSKChoKSAhPSBOVUxMKSwgRFVLX0FTU0VSVF9FWFBSKChoKS0+YnVmICE9IE5V TEwpLCBcCisJKChoKS0+b2Zmc2V0ICsgKG9mZikgPD0gRFVLX0hCVUZGRVJfR0VUX1NJWkUoKGgp LT5idWYpKSkKKworLyogQ2xhbXAgYW4gaW5wdXQgYnl0ZSBsZW5ndGggKGFscmVhZHkgYXNzdW1l ZCB0byBiZSB3aXRoaW4gdGhlIG5vbWluYWwKKyAqIGR1a19oYnVmb2JqICdsZW5ndGgnKSB0byB0 aGUgY3VycmVudCBkeW5hbWljIGJ1ZmZlciBsaW1pdHMgdG8geWllbGQKKyAqIGEgYnl0ZSBsZW5n dGggbGltaXQgdGhhdCdzIHNhZmUgZm9yIG1lbW9yeSBhY2Nlc3Nlcy4gIFRoaXMgdmFsdWUgY2Fu CisgKiBiZSBpbnZhbGlkYXRlZCBieSBhbnkgc2lkZSBlZmZlY3QgYmVjYXVzZSBpdCBtYXkgdHJp Z2dlciBhIHVzZXIKKyAqIGNhbGxiYWNrIHRoYXQgcmVzaXplcyB0aGUgdW5kZXJseWluZyBidWZm ZXIuCisgKi8KKyNkZWZpbmUgRFVLX0hCVUZPQkpfQ0xBTVBfQllURUxFTkdUSChoLGxlbikgXAor CShEVUtfQVNTRVJUX0VYUFIoKGgpICE9IE5VTEwpLCBcCisJZHVrX2hidWZvYmpfY2xhbXBfYnl0 ZWxlbmd0aCgoaCksIChsZW4pKSkKKworLyogVHlwZWQgYXJyYXlzIGhhdmUgdmlydHVhbCBpbmRp Y2VzLCBBcnJheUJ1ZmZlciBhbmQgRGF0YVZpZXcgZG8gbm90LiAqLworI2RlZmluZSBEVUtfSEJV Rk9CSl9IQVNfVklSVFVBTF9JTkRJQ0VTKGgpICAoKGgpLT5pc190eXBlZGFycmF5KQorCitzdHJ1 Y3QgZHVrX2hidWZvYmogeworCS8qIFNoYXJlZCBvYmplY3QgcGFydC4gKi8KKwlkdWtfaG9iamVj dCBvYmo7CisKKwkvKiBVbmRlcmx5aW5nIGJ1ZmZlciAocmVmY291bnRlZCksIG1heSBiZSBOVUxM LiAqLworCWR1a19oYnVmZmVyICpidWY7CisKKwkvKiAuYnVmZmVyIHJlZmVyZW5jZSB0byBhbiBB cnJheUJ1ZmZlciwgbWF5IGJlIE5VTEwuICovCisJZHVrX2hvYmplY3QgKmJ1Zl9wcm9wOworCisJ LyogU2xpY2UgYW5kIGFjY2Vzc29yIGluZm9ybWF0aW9uLgorCSAqCisJICogQmVjYXVzZSB0aGUg dW5kZXJseWluZyBidWZmZXIgbWF5IGJlIGR5bmFtaWMsIHRoZXNlIG1heSBiZQorCSAqIGludmFs aWRhdGVkIGJ5IHRoZSBidWZmZXIgYmVpbmcgbW9kaWZpZWQgc28gdGhhdCBib3RoIG9mZnNldAor CSAqIGFuZCBsZW5ndGggc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgZXZlcnkgYWNjZXNzLiAg QmVoYXZpb3IKKwkgKiB3aGVuIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgY2hhbmdlZCBkb2Vz bid0IG5lZWQgdG8gYmUgY2xlYW46CisJICogdmlydHVhbCAnbGVuZ3RoJyBkb2Vzbid0IG5lZWQg dG8gYmUgYWZmZWN0ZWQsIHJlYWRzIGNhbiByZXR1cm4KKwkgKiB6ZXJvL05hTiwgYW5kIHdyaXRl cyBjYW4gYmUgaWdub3JlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCBhIGRhdGEgcG9pbnRlciBjYW5u b3QgYmUgcHJlY29tcHV0ZWQgYmVjYXVzZSAnYnVmJyBtYXkKKwkgKiBiZSBkeW5hbWljIGFuZCBp dHMgcG9pbnRlciB1bnN0YWJsZS4KKwkgKi8KKworCWR1a191aW50X3Qgb2Zmc2V0OyAgICAgICAv KiBieXRlIG9mZnNldCB0byBidWYgKi8KKwlkdWtfdWludF90IGxlbmd0aDsgICAgICAgLyogYnl0 ZSBpbmRleCBsaW1pdCBmb3IgZWxlbWVudCBhY2Nlc3MsIGV4Y2x1c2l2ZSAqLworCWR1a191aW50 OF90IHNoaWZ0OyAgICAgICAvKiBlbGVtZW50IHNpemUgc2hpZnQ6CisJICAgICAgICAgICAgICAg ICAgICAgICAgICAqICAgMCA9IHU4L2k4CisJICAgICAgICAgICAgICAgICAgICAgICAgICAqICAg MSA9IHUxNi9pMTYKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICogICAyID0gdTMyL2kzMi9m bG9hdAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIDMgPSBkb3VibGUKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisJZHVrX3VpbnQ4X3QgZWxlbV90eXBlOyAgIC8qIGVsZW1l bnQgdHlwZSAqLworCWR1a191aW50OF90IGlzX3R5cGVkYXJyYXk7Cit9OworCitEVUtfSU5URVJO QUxfREVDTCBkdWtfdWludF90IGR1a19oYnVmb2JqX2NsYW1wX2J5dGVsZW5ndGgoZHVrX2hidWZv YmogKmhfYnVmb2JqLCBkdWtfdWludF90IGxlbik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1 a19oYnVmb2JqX3B1c2hfdWludDhhcnJheV9mcm9tX3BsYWluKGR1a19odGhyZWFkICp0aHIsIGR1 a19oYnVmZmVyICpoX2J1Zik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19oYnVmb2JqX3B1 c2hfdmFsaWRhdGVkX3JlYWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZvYmogKmhfYnVmb2Jq LCBkdWtfdWludDhfdCAqcCwgZHVrX3NtYWxsX3VpbnRfdCBlbGVtX3NpemUpOworRFVLX0lOVEVS TkFMX0RFQ0wgdm9pZCBkdWtfaGJ1Zm9ial92YWxpZGF0ZWRfd3JpdGUoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2hidWZvYmogKmhfYnVmb2JqLCBkdWtfdWludDhfdCAqcCwgZHVrX3NtYWxsX3VpbnRf dCBlbGVtX3NpemUpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGJ1Zm9ial9wcm9tb3Rl X3BsYWluKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpOworCisjZW5kaWYgIC8qIERV S19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKyNlbmRpZiAgLyogRFVLX0hCVUZPQkpfSF9J TkNMVURFRCAqLworLyogI2luY2x1ZGUgZHVrX2h0aHJlYWQuaCAqLworLyoKKyAqICBIZWFwIHRo cmVhZCBvYmplY3QgcmVwcmVzZW50YXRpb24uCisgKgorICogIGR1a19odGhyZWFkIGlzIGFsc28g dGhlICdjb250ZXh0JyBmb3IgcHVibGljIEFQSSBmdW5jdGlvbnMgdmlhIGEKKyAqICBkaWZmZXJl bnQgdHlwZWRlZi4gIE1vc3QgQVBJIGNhbGxzIG9wZXJhdGUgb24gdGhlIHRvcG1vc3QgZnJhbWUK KyAqICBvZiB0aGUgdmFsdWUgc3RhY2sgb25seS4KKyAqLworCisjaWYgIWRlZmluZWQoRFVLX0hU SFJFQURfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX0hUSFJFQURfSF9JTkNMVURFRAorCisvKgor ICogIFN0YWNrIGNvbnN0YW50cworICovCisKKy8qIEluaXRpYWwgdmFsc3RhY2sgc2l6ZSwgcm91 Z2hseSAwLjdraUIuICovCisjZGVmaW5lIERVS19WQUxTVEFDS19JTklUSUFMX1NJWkUgICAgICAg OTZVCisKKy8qIEludGVybmFsIGV4dHJhIGVsZW1lbnRzIGFzc3VtZWQgb24gZnVuY3Rpb24gZW50 cnksIGFsd2F5cyBhZGRlZCB0bworICogdXNlci1kZWZpbmVkICdleHRyYScgZm9yIGUuZy4gdGhl IGR1a19jaGVja19zdGFjaygpIGNhbGwuCisgKi8KKyNkZWZpbmUgRFVLX1ZBTFNUQUNLX0lOVEVS TkFMX0VYVFJBICAgICAzMlUKKworLyogTnVtYmVyIG9mIGVsZW1lbnRzIGd1YXJhbnRlZWQgdG8g YmUgdXNlciBhY2Nlc3NpYmxlIChpbiBhZGRpdGlvbiB0byBjYWxsCisgKiBhcmd1bWVudHMpIG9u IER1a3RhcGUvQyBmdW5jdGlvbiBlbnRyeS4gIFRoaXMgaXMgdGhlIG1ham9yIHB1YmxpYyBBUEkK KyAqIGNvbW1pdG1lbnQuCisgKi8KKyNkZWZpbmUgRFVLX1ZBTFNUQUNLX0FQSV9FTlRSWV9NSU5J TVVNICBEVUtfQVBJX0VOVFJZX1NUQUNLCisKKy8qCisgKiAgQWN0aXZhdGlvbiBkZWZpbmVzCisg Ki8KKworI2RlZmluZSBEVUtfQUNUX0ZMQUdfU1RSSUNUICAgICAgICAgICAgICgxVSA8PCAwKSAg LyogZnVuY3Rpb24gZXhlY3V0ZXMgaW4gc3RyaWN0IG1vZGUgKi8KKyNkZWZpbmUgRFVLX0FDVF9G TEFHX1RBSUxDQUxMRUQgICAgICAgICAoMVUgPDwgMSkgIC8qIGFjdGl2YXRpb24gaGFzIHRhaWwg Y2FsbGVkIG9uZSBvciBtb3JlIHRpbWVzICovCisjZGVmaW5lIERVS19BQ1RfRkxBR19DT05TVFJV Q1QgICAgICAgICAgKDFVIDw8IDIpICAvKiBmdW5jdGlvbiBleGVjdXRlcyBhcyBhIGNvbnN0cnVj dG9yIChjYWxsZWQgdmlhICJuZXciKSAqLworI2RlZmluZSBEVUtfQUNUX0ZMQUdfUFJFVkVOVF9Z SUVMRCAgICAgICgxVSA8PCAzKSAgLyogYWN0aXZhdGlvbiBwcmV2ZW50cyB5aWVsZCAobmF0aXZl IGNhbGwgb3IgIm5ldyIpICovCisjZGVmaW5lIERVS19BQ1RfRkxBR19ESVJFQ1RfRVZBTCAgICAg ICAgKDFVIDw8IDQpICAvKiBhY3RpdmF0aW9uIGlzIGEgZGlyZWN0IGV2YWwgY2FsbCAqLworI2Rl ZmluZSBEVUtfQUNUX0ZMQUdfQ09OU1RSVUNUX1BST1hZICAgICgxVSA8PCA1KSAgLyogYWN0aXZh dGlvbiBpcyBmb3IgUHJveHkgJ2NvbnN0cnVjdCcgY2FsbCwgc3BlY2lhbCByZXR1cm4gdmFsdWUg aGFuZGxpbmcgKi8KKyNkZWZpbmUgRFVLX0FDVF9GTEFHX0JSRUFLUE9JTlRfQUNUSVZFICAoMVUg PDwgNikgIC8qIGFjdGl2YXRpb24gaGFzIGFjdGl2ZSBicmVha3BvaW50KHMpICovCisKKyNkZWZp bmUgRFVLX0FDVF9HRVRfRlVOQyhhY3QpICAgICAgICAgICAoKGFjdCktPmZ1bmMpCisKKy8qCisg KiAgRmxhZ3MgZm9yIF9fRklMRV9fIC8gX19MSU5FX18gcmVnaXN0ZXJlZCBpbnRvIHRyYWNlZGF0 YQorICovCisKKyNkZWZpbmUgRFVLX1RCX0ZMQUdfTk9CTEFNRV9GSUxFTElORSAgICAoMVUgPDwg MCkgIC8qIGRvbid0IHJlcG9ydCBfX0ZJTEVfXyAvIF9fTElORV9fIGFzIGZpbGVOYW1lL2xpbmVO dW1iZXIgKi8KKworLyoKKyAqICBDYXRjaGVyIGRlZmluZXMKKyAqLworCisvKiBYWFg6IHJlbW92 ZSBjYXRjaGVyIHR5cGUgZW50aXJlbHkgKi8KKworLyogZmxhZ3MgZmllbGQ6IExMTExMTEZULCBM ID0gbGFiZWwgKDI0IGJpdHMpLCBGID0gZmxhZ3MgKDQgYml0cyksIFQgPSB0eXBlICg0IGJpdHMp ICovCisjZGVmaW5lIERVS19DQVRfVFlQRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwZlVMCisj ZGVmaW5lIERVS19DQVRfVFlQRV9CSVRTICAgICAgICAgICAgNAorI2RlZmluZSBEVUtfQ0FUX0xB QkVMX01BU0sgICAgICAgICAgIDB4ZmZmZmZmMDBVTAorI2RlZmluZSBEVUtfQ0FUX0xBQkVMX0JJ VFMgICAgICAgICAgIDI0CisjZGVmaW5lIERVS19DQVRfTEFCRUxfU0hJRlQgICAgICAgICAgOAor CisjZGVmaW5lIERVS19DQVRfRkxBR19DQVRDSF9FTkFCTEVEICAgICAgICAgICgxVSA8PCA0KSAg IC8qIGNhdGNoIHBhcnQgd2lsbCBjYXRjaCAqLworI2RlZmluZSBEVUtfQ0FUX0ZMQUdfRklOQUxM WV9FTkFCTEVEICAgICAgICAoMVUgPDwgNSkgICAvKiBmaW5hbGx5IHBhcnQgd2lsbCBjYXRjaCAq LworI2RlZmluZSBEVUtfQ0FUX0ZMQUdfQ0FUQ0hfQklORElOR19FTkFCTEVEICAoMVUgPDwgNikg ICAvKiByZXF1ZXN0IHRvIGNyZWF0ZSBjYXRjaCBiaW5kaW5nICovCisjZGVmaW5lIERVS19DQVRf RkxBR19MRVhFTlZfQUNUSVZFICAgICAgICAgICgxVSA8PCA3KSAgIC8qIGNhdGNoIG9yIHdpdGgg YmluZGluZyBpcyBjdXJyZW50bHkgYWN0aXZlICovCisKKyNkZWZpbmUgRFVLX0NBVF9UWVBFX1VO S05PV04gICAgICAgICAwCisjZGVmaW5lIERVS19DQVRfVFlQRV9UQ0YgICAgICAgICAgICAgMQor I2RlZmluZSBEVUtfQ0FUX1RZUEVfTEFCRUwgICAgICAgICAgIDIKKworI2RlZmluZSBEVUtfQ0FU X0dFVF9UWVBFKGMpICAgICAgICAgICgoYyktPmZsYWdzICYgRFVLX0NBVF9UWVBFX01BU0spCisj ZGVmaW5lIERVS19DQVRfR0VUX0xBQkVMKGMpICAgICAgICAgKCgoYyktPmZsYWdzICYgRFVLX0NB VF9MQUJFTF9NQVNLKSA+PiBEVUtfQ0FUX0xBQkVMX1NISUZUKQorCisjZGVmaW5lIERVS19DQVRf SEFTX0NBVENIX0VOQUJMRUQoYykgICAgICAgICAgICgoYyktPmZsYWdzICYgRFVLX0NBVF9GTEFH X0NBVENIX0VOQUJMRUQpCisjZGVmaW5lIERVS19DQVRfSEFTX0ZJTkFMTFlfRU5BQkxFRChjKSAg ICAgICAgICgoYyktPmZsYWdzICYgRFVLX0NBVF9GTEFHX0ZJTkFMTFlfRU5BQkxFRCkKKyNkZWZp bmUgRFVLX0NBVF9IQVNfQ0FUQ0hfQklORElOR19FTkFCTEVEKGMpICAgKChjKS0+ZmxhZ3MgJiBE VUtfQ0FUX0ZMQUdfQ0FUQ0hfQklORElOR19FTkFCTEVEKQorI2RlZmluZSBEVUtfQ0FUX0hBU19M RVhFTlZfQUNUSVZFKGMpICAgICAgICAgICAoKGMpLT5mbGFncyAmIERVS19DQVRfRkxBR19MRVhF TlZfQUNUSVZFKQorCisjZGVmaW5lIERVS19DQVRfU0VUX0NBVENIX0VOQUJMRUQoYykgICAgZG8g eyBcCisJCShjKS0+ZmxhZ3MgfD0gRFVLX0NBVF9GTEFHX0NBVENIX0VOQUJMRUQ7IFwKKwl9IHdo aWxlICgwKQorI2RlZmluZSBEVUtfQ0FUX1NFVF9GSU5BTExZX0VOQUJMRUQoYykgIGRvIHsgXAor CQkoYyktPmZsYWdzIHw9IERVS19DQVRfRkxBR19GSU5BTExZX0VOQUJMRUQ7IFwKKwl9IHdoaWxl ICgwKQorI2RlZmluZSBEVUtfQ0FUX1NFVF9DQVRDSF9CSU5ESU5HX0VOQUJMRUQoYykgICAgZG8g eyBcCisJCShjKS0+ZmxhZ3MgfD0gRFVLX0NBVF9GTEFHX0NBVENIX0JJTkRJTkdfRU5BQkxFRDsg XAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19DQVRfU0VUX0xFWEVOVl9BQ1RJVkUoYykgICAg ZG8geyBcCisJCShjKS0+ZmxhZ3MgfD0gRFVLX0NBVF9GTEFHX0xFWEVOVl9BQ1RJVkU7IFwKKwl9 IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19DQVRfQ0xFQVJfQ0FUQ0hfRU5BQkxFRChjKSAgICBk byB7IFwKKwkJKGMpLT5mbGFncyAmPSB+RFVLX0NBVF9GTEFHX0NBVENIX0VOQUJMRUQ7IFwKKwl9 IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQ0FUX0NMRUFSX0ZJTkFMTFlfRU5BQkxFRChjKSAgZG8g eyBcCisJCShjKS0+ZmxhZ3MgJj0gfkRVS19DQVRfRkxBR19GSU5BTExZX0VOQUJMRUQ7IFwKKwl9 IHdoaWxlICgwKQorI2RlZmluZSBEVUtfQ0FUX0NMRUFSX0NBVENIX0JJTkRJTkdfRU5BQkxFRChj KSAgICBkbyB7IFwKKwkJKGMpLT5mbGFncyAmPSB+RFVLX0NBVF9GTEFHX0NBVENIX0JJTkRJTkdf RU5BQkxFRDsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19DQVRfQ0xFQVJfTEVYRU5WX0FD VElWRShjKSAgICBkbyB7IFwKKwkJKGMpLT5mbGFncyAmPSB+RFVLX0NBVF9GTEFHX0xFWEVOVl9B Q1RJVkU7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogIFRocmVhZCBkZWZpbmVzCisgKi8KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9ST01fU1RSSU5HUykKKyNkZWZpbmUgRFVLX0hUSFJFQURfR0VU X1NUUklORyh0aHIsaWR4KSBcCisJKChkdWtfaHN0cmluZyAqKSBEVUtfTE9TRV9DT05TVChkdWtf cm9tX3N0cmluZ3Nfc3RyaWR4WyhpZHgpXSkpCisjZWxzZSAgLyogRFVLX1VTRV9ST01fU1RSSU5H UyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisjZGVmaW5lIERVS19IVEhSRUFE X0dFVF9TVFJJTkcodGhyLGlkeCkgXAorCSgoZHVrX2hzdHJpbmcgKikgRFVLX1VTRV9IRUFQUFRS X0RFQzE2KCh0aHIpLT5oZWFwLT5oZWFwX3VkYXRhLCAodGhyKS0+c3RyczE2WyhpZHgpXSkpCisj ZWxzZQorI2RlZmluZSBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKHRocixpZHgpIFwKKwkoKHRocikt PnN0cnNbKGlkeCldKQorI2VuZGlmCisjZW5kaWYgIC8qIERVS19VU0VfUk9NX1NUUklOR1MgKi8K KworLyogdmFsdWVzIGZvciB0aGUgc3RhdGUgZmllbGQgKi8KKyNkZWZpbmUgRFVLX0hUSFJFQURf U1RBVEVfSU5BQ1RJVkUgICAgIDEgICAvKiB0aHJlYWQgbm90IGN1cnJlbnRseSBydW5uaW5nICov CisjZGVmaW5lIERVS19IVEhSRUFEX1NUQVRFX1JVTk5JTkcgICAgICAyICAgLyogdGhyZWFkIGN1 cnJlbnRseSBydW5uaW5nIChvbmx5IG9uZSBhdCBhIHRpbWUpICovCisjZGVmaW5lIERVS19IVEhS RUFEX1NUQVRFX1JFU1VNRUQgICAgICAzICAgLyogdGhyZWFkIHJlc3VtZWQgYW5vdGhlciB0aHJl YWQgKGFjdGl2ZSBidXQgbm90IHJ1bm5pbmcpICovCisjZGVmaW5lIERVS19IVEhSRUFEX1NUQVRF X1lJRUxERUQgICAgICA0ICAgLyogdGhyZWFkIGhhcyB5aWVsZGVkICovCisjZGVmaW5lIERVS19I VEhSRUFEX1NUQVRFX1RFUk1JTkFURUQgICA1ICAgLyogdGhyZWFkIGhhcyB0ZXJtaW5hdGVkICov CisKKy8qIEV4ZWN1dG9yIGludGVycnVwdCBkZWZhdWx0IGludGVydmFsIHdoZW4gbm90aGluZyBl bHNlIHJlcXVpcmVzIGEKKyAqIHNtYWxsZXIgdmFsdWUuICBUaGUgZGVmYXVsdCBpbnRlcnZhbCBt dXN0IGJlIHNtYWxsIGVub3VnaCB0byBhbGxvdworICogZm9yIHJlYXNvbmFibGUgZXhlY3V0aW9u IHRpbWVvdXQgY2hlY2tpbmcgYnV0IGxhcmdlIGVub3VnaCB0byBrZWVwCisgKiBpbXBhY3Qgb24g ZXhlY3V0aW9uIHBlcmZvcm1hbmNlIGxvdy4KKyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRF UlJVUFRfQ09VTlRFUikKKyNkZWZpbmUgRFVLX0hUSFJFQURfSU5UQ1RSX0RFRkFVTFQgICAgICgy NTZMICogMTAyNEwpCisjZW5kaWYKKworLyoKKyAqICBBc3NlcnQgY29udGV4dCBpcyB2YWxpZDog bm9uLU5VTEwgcG9pbnRlciwgZmllbGRzIGxvb2sgc2FuZS4KKyAqCisgKiAgVGhpcyBpcyB1c2Vk IGJ5IHB1YmxpYyBBUEkgY2FsbCBlbnRyeXBvaW50cyB0byBjYXRjaCBpbnZhbGlkICdjdHgnIHBv aW50ZXJzCisgKiAgYXMgZWFybHkgYXMgcG9zc2libGU7IGludmFsaWQgJ2N0eCcgcG9pbnRlcnMg Y2F1c2UgdmVyeSBvZGQgYW5kIGRpZmZpY3VsdCB0bworICogIGRpYWdub3NlIGJlaGF2aW9yIHNv IGl0J3Mgd29ydGggY2hlY2tpbmcgZXZlbiB3aGVuIHRoZSBjaGVjayBpcyBub3QgMTAwJS4KKyAq LworCisvKiBBc3NlcnRpb25zIGZvciBpbnRlcm5hbHMuICovCisjZGVmaW5lIERVS19BU1NFUlRf SFRIUkVBRF9WQUxJRCh0aHIpIGRvIHsgXAorCQlEVUtfQVNTRVJUKCh0aHIpICE9IE5VTEwpOyBc CisJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfR0VUX1RZUEUoKGR1a19oZWFwaGRyICopICh0aHIp KSA9PSBEVUtfSFRZUEVfT0JKRUNUKTsgXAorCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0lTX1RI UkVBRCgoZHVrX2hvYmplY3QgKikgKHRocikpKTsgXAorCQlEVUtfQVNTRVJUKCh0aHIpLT51bnVz ZWQxID09IDApOyBcCisJCURVS19BU1NFUlQoKHRociktPnVudXNlZDIgPT0gMCk7IFwKKwl9IHdo aWxlICgwKQorCisvKiBBc3NlcnRpb25zIGZvciBwdWJsaWMgQVBJIGNhbGxzOyBhIGJpdCBzdHJv bmdlci4gKi8KKyNkZWZpbmUgRFVLX0FTU0VSVF9DVFhfVkFMSUQodGhyKSBkbyB7IFwKKwkJRFVL X0FTU0VSVCgodGhyKSAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUX0hUSFJFQURfVkFMSUQoKHRo cikpOyBcCisJCURVS19BU1NFUlQoKHRociktPnZhbHN0YWNrICE9IE5VTEwpOyBcCisJCURVS19B U1NFUlQoKHRociktPnZhbHN0YWNrX2JvdHRvbSAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKCh0 aHIpLT52YWxzdGFja190b3AgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVCgodGhyKS0+dmFsc3Rh Y2tfZW5kICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoKHRociktPnZhbHN0YWNrX2FsbG9jX2Vu ZCAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKCh0aHIpLT52YWxzdGFja19hbGxvY19lbmQgPj0g KHRociktPnZhbHN0YWNrKTsgXAorCQlEVUtfQVNTRVJUKCh0aHIpLT52YWxzdGFja19lbmQgPj0g KHRociktPnZhbHN0YWNrKTsgXAorCQlEVUtfQVNTRVJUKCh0aHIpLT52YWxzdGFja190b3AgPj0g KHRociktPnZhbHN0YWNrKTsgXAorCQlEVUtfQVNTRVJUKCh0aHIpLT52YWxzdGFja190b3AgPj0g KHRociktPnZhbHN0YWNrX2JvdHRvbSk7IFwKKwkJRFVLX0FTU0VSVCgodGhyKS0+dmFsc3RhY2tf ZW5kID49ICh0aHIpLT52YWxzdGFja190b3ApOyBcCisJCURVS19BU1NFUlQoKHRociktPnZhbHN0 YWNrX2FsbG9jX2VuZCA+PSAodGhyKS0+dmFsc3RhY2tfZW5kKTsgXAorCX0gd2hpbGUgKDApCisK Ky8qIEFzc2VydGlvbnMgZm9yIEFQSSBjYWxsIGVudHJ5IHNwZWNpZmljYWxseS4gIENoZWNrcyAn Y3R4JyBidXQgYWxzbyBtYXkKKyAqIGNoZWNrIGludGVybmFsIHN0YXRlIChlLmcuIG5vdCBpbiBh IGRlYnVnZ2VyIHRyYW5zcG9ydCBjYWxsYmFjaykuCisgKi8KKyNkZWZpbmUgRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKSBkbyB7IFwKKwkJRFVLX0FTU0VSVF9DVFhfVkFMSUQoKHRocikpOyBcCisJ CURVS19BU1NFUlQoKHRociktPmhlYXAgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVCgodGhyKS0+ aGVhcC0+ZGJnX2NhbGxpbmdfdHJhbnNwb3J0ID09IDApOyBcCisJfSB3aGlsZSAoMCkKKworLyoK KyAqICBBc3NlcnRpb24gaGVscGVycy4KKyAqLworCisjZGVmaW5lIERVS19BU1NFUlRfU1RSSURY X1ZBTElEKHZhbCkgXAorCURVS19BU1NFUlQoKGR1a191aW50X3QpICh2YWwpIDwgRFVLX0hFQVBf TlVNX1NUUklOR1MpCisKKyNkZWZpbmUgRFVLX0FTU0VSVF9CSURYX1ZBTElEKHZhbCkgXAorCURV S19BU1NFUlQoKGR1a191aW50X3QpICh2YWwpIDwgRFVLX05VTV9CVUlMVElOUykKKworLyoKKyAq ICBNaXNjCisgKi8KKworLyogRmFzdCBhY2Nlc3MgdG8gJ3RoaXMnIGJpbmRpbmcuICBBc3N1bWVz IHRoZXJlJ3MgYSBjYWxsIGluIHByb2dyZXNzLiAqLworI2RlZmluZSBEVUtfSFRIUkVBRF9USElT X1BUUih0aHIpIFwKKwkoRFVLX0FTU0VSVF9FWFBSKCh0aHIpICE9IE5VTEwpLCBcCisJIERVS19B U1NFUlRfRVhQUigodGhyKS0+dmFsc3RhY2tfYm90dG9tID4gKHRociktPnZhbHN0YWNrKSwgXAor CSAodGhyKS0+dmFsc3RhY2tfYm90dG9tIC0gMSkKKworLyoKKyAqICBTdHJ1Y3QgZGVmaW5lcwor ICovCisKKy8qIEZpZWxkcyBhcmUgb3JkZXJlZCBmb3IgYWxpZ25tZW50L3BhY2tpbmcuICovCitz dHJ1Y3QgZHVrX2FjdGl2YXRpb24geworCWR1a190dmFsIHR2X2Z1bmM7ICAgICAgIC8qIGJvcnJv d2VkOiBmdWxsIGR1a190dmFsIGZvciBmdW5jdGlvbiBiZWluZyBleGVjdXRlZDsgZm9yIGxpZ2h0 ZnVuY3MgKi8KKwlkdWtfaG9iamVjdCAqZnVuYzsgICAgICAvKiBib3Jyb3dlZDogZnVuY3Rpb24g YmVpbmcgZXhlY3V0ZWQ7IGZvciBib3VuZCBmdW5jdGlvbiBjYWxscywgdGhpcyBpcyB0aGUgZmlu YWwsIHJlYWwgZnVuY3Rpb24sIE5VTEwgZm9yIGxpZ2h0ZnVuY3MgKi8KKwlkdWtfYWN0aXZhdGlv biAqcGFyZW50OyAvKiBwcmV2aW91cyAocGFyZW50KSBhY3RpdmF0aW9uIChvciBOVUxMIGlmIG5v bmUpICovCisJZHVrX2hvYmplY3QgKnZhcl9lbnY7ICAgLyogY3VycmVudCB2YXJpYWJsZSBlbnZp cm9ubWVudCAobWF5IGJlIE5VTEwgaWYgZGVsYXllZCkgKi8KKwlkdWtfaG9iamVjdCAqbGV4X2Vu djsgICAvKiBjdXJyZW50IGxleGljYWwgZW52aXJvbm1lbnQgKG1heSBiZSBOVUxMIGlmIGRlbGF5 ZWQpICovCisJZHVrX2NhdGNoZXIgKmNhdDsgICAgICAgLyogY3VycmVudCBjYXRjaGVyIChvciBO VUxMKSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX05PTlNURF9GVU5DX0NBTExFUl9QUk9QRVJU WSkKKwkvKiBQcmV2aW91cyB2YWx1ZSBvZiAnZnVuYycgY2FsbGVyLCByZXN0b3JlZCB3aGVuIHVu d291bmQuICBPbmx5IGluIHVzZQorCSAqIHdoZW4gJ2Z1bmMnIGlzIG5vbi1zdHJpY3QuCisJICov CisJZHVrX2hvYmplY3QgKnByZXZfY2FsbGVyOworI2VuZGlmCisKKwlkdWtfaW5zdHJfdCAqY3Vy cl9wYzsgICAvKiBuZXh0IGluc3RydWN0aW9uIHRvIGV4ZWN1dGUgKHBvaW50cyB0byAnZnVuYycg Ynl0ZWNvZGUsIHN0YWJsZSBwb2ludGVyKSwgTlVMTCBmb3IgbmF0aXZlIGNhbGxzICovCisKKwkv KiBib3R0b21fYnl0ZW9mZiBhbmQgcmV0dmFsX2J5dGVvZmYgYXJlIG9ubHkgdXNlZCBmb3IgYm9v ay1rZWVwaW5nCisJICogb2YgRUNNQVNjcmlwdC1pbml0aWF0ZWQgY2FsbHMsIHRvIGFsbG93IHJl dHVybmluZyB0byBhbiBFQ01BU2NyaXB0CisJICogZnVuY3Rpb24gcHJvcGVybHkuCisJICovCisK KwkvKiBCb3R0b20gb2YgdmFsc3RhY2sgZm9yIHRoaXMgYWN0aXZhdGlvbiwgdXNlZCB0byByZXNl dAorCSAqIHZhbHN0YWNrX2JvdHRvbSBvbiByZXR1cm47IG9mZnNldCBpcyBhYnNvbHV0ZS4gIFRo ZXJlJ3MKKwkgKiBubyBuZWVkIHRvIHRyYWNrICd0b3AnIGJlY2F1c2UgbmF0aXZlIGNhbGwgaGFu ZGxpbmcgZGVhbHMKKwkgKiB3aXRoIHRoYXQgdXNpbmcgbG9jYWxzLCBhbmQgZm9yIEVDTUFTY3Jp cHQgcmV0dXJucyAnbnJlZ3MnCisJICogaW5kaWNhdGVzIHRoZSBuZWNlc3NhcnkgdG9wLgorCSAq LworCWR1a19zaXplX3QgYm90dG9tX2J5dGVvZmY7CisKKwkvKiBSZXR1cm4gdmFsdWUgd2hlbiBy ZXR1cm5pbmcgdG8gdGhpcyBhY3RpdmF0aW9uIChwb2ludHMgdG8gY2FsbGVyCisJICogcmVnLCBu b3QgY2FsbGVlIHJlZyk7IG9mZnNldCBpcyBhYnNvbHV0ZSAob25seSBzZXQgaWYgYWN0aXZhdGlv biBpcworCSAqIG5vdCB0b3Btb3N0KS4KKwkgKgorCSAqIE5vdGU6IGJvdHRvbV9ieXRlb2ZmIGlz IGFsd2F5cyBzZXQsIHdoaWxlIHJldHZhbF9ieXRlb2ZmIGlzIG9ubHkKKwkgKiBhcHBsaWNhYmxl IGZvciBhY3RpdmF0aW9ucyBiZWxvdyB0aGUgdG9wbW9zdCBvbmUuICBDdXJyZW50bHkKKwkgKiBy ZXR2YWxfYnl0ZW9mZiBmb3IgdGhlIHRvcG1vc3QgYWN0aXZhdGlvbiBpcyBjb25zaWRlcmVkIGdh cmJhZ2UKKwkgKiAoYW5kIGl0IG5vdCBpbml0aWFsaXplZCBvbiBlbnRyeSBvciBjbGVhcmVkIG9u IHJldHVybjsgbWF5IGNvbnRhaW4KKwkgKiBwcmV2aW91cyBvciBnYXJiYWdlIHZhbHVlcykuCisJ ICovCisJZHVrX3NpemVfdCByZXR2YWxfYnl0ZW9mZjsKKworCS8qIEN1cnJlbnQgJ3RoaXMnIGJp bmRpbmcgaXMgdGhlIHZhbHVlIGp1c3QgYmVsb3cgYm90dG9tLgorCSAqIFByZXZpb3VzbHksICd0 aGlzJyBiaW5kaW5nIHdhcyBoYW5kbGVkIHdpdGggYW4gaW5kZXggdG8gdGhlCisJICogKGNhbGxp bmcpIHZhbHN0YWNrLiAgVGhpcyB3b3JrcyBmb3IgZXZlcnl0aGluZyBleGNlcHQgdGFpbAorCSAq IGNhbGxzLCB3aGljaCBtdXN0IG5vdCAiYWNjdW11bGF0ZSIgdmFsc3RhY2sgdGVtcHMuCisJICov CisKKwkvKiBWYWx1ZSBzdGFjayByZXNlcnZlICh2YWxzdGFja19lbmQpIGJ5dGUgb2Zmc2V0IHRv IGJlIHJlc3RvcmVkCisJICogd2hlbiByZXR1cm5pbmcgdG8gdGhpcyBhY3RpdmF0aW9uLiAgT25s eSB1c2VkIGJ5IHRoZSBieXRlY29kZQorCSAqIGV4ZWN1dG9yLgorCSAqLworCWR1a19zaXplX3Qg cmVzZXJ2ZV9ieXRlb2ZmOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQp CisJZHVrX3VpbnQzMl90IHByZXZfbGluZTsgLyogbmVlZGVkIGZvciBzdGVwcGluZyAqLworI2Vu ZGlmCisKKwlkdWtfc21hbGxfdWludF90IGZsYWdzOworfTsKKworc3RydWN0IGR1a19jYXRjaGVy IHsKKwlkdWtfY2F0Y2hlciAqcGFyZW50OyAgICAgICAgICAgIC8qIHByZXZpb3VzIChwYXJlbnQp IGNhdGNoZXIgKG9yIE5VTEwgaWYgbm9uZSkgKi8KKwlkdWtfaHN0cmluZyAqaF92YXJuYW1lOyAg ICAgICAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSB0byBjYXRjaCB2YXJpYWJsZSBuYW1lIChvciBO VUxMIGlmIG5vbmUpICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAocmVm ZXJlbmNlIGlzIHZhbGlkIGFzIGxvbmcgYWN0aXZhdGlvbiBleGlzdHMpICovCisJZHVrX2luc3Ry X3QgKnBjX2Jhc2U7ICAgICAgICAgICAvKiByZXN1bWUgZXhlY3V0aW9uIGZyb20gcGNfYmFzZSBv ciBwY19iYXNlKzEgKHBvaW50cyB0byAnZnVuYycgYnl0ZWNvZGUsIHN0YWJsZSBwb2ludGVyKSAq LworCWR1a19zaXplX3QgaWR4X2Jhc2U7ICAgICAgICAgICAgLyogaWR4X2Jhc2UgYW5kIGlkeF9i YXNlKzEgZ2V0IGNvbXBsZXRpb24gdmFsdWUgYW5kIHR5cGUgKi8KKwlkdWtfdWludDMyX3QgZmxh Z3M7ICAgICAgICAgICAgIC8qIHR5cGUgYW5kIGNvbnRyb2wgZmxhZ3MsIGxhYmVsIG51bWJlciAq LworCS8qIFhYWDogY291bGQgcGFjayAnZmxhZ3MnIGFuZCAnaWR4X2Jhc2UnIHRvIHNhbWUgdmFs dWUgaW4gcHJhY3RpY2UsCisJICogb24gMzItYml0IHRhcmdldHMgdGhpcyB3b3VsZCBtYWtlIGR1 a19jYXRjaGVyIDE2IGJ5dGVzLgorCSAqLworfTsKKworc3RydWN0IGR1a19odGhyZWFkIHsKKwkv KiBTaGFyZWQgb2JqZWN0IHBhcnQgKi8KKwlkdWtfaG9iamVjdCBvYmo7CisKKwkvKiBQb2ludGVy IHRvIGJ5dGVjb2RlIGV4ZWN1dG9yJ3MgJ2N1cnJfcGMnIHZhcmlhYmxlLiAgVXNlZCB0byBjb3B5 CisJICogdGhlIGN1cnJlbnQgUEMgYmFjayBpbnRvIHRoZSB0b3Btb3N0IGFjdGl2YXRpb24gd2hl biBhY3RpdmF0aW9uCisJICogc3RhdGUgaXMgYWJvdXQgdG8gY2hhbmdlIChvciAic3luY2luZyIg aXMgb3RoZXJ3aXNlIG5lZWRlZCkuICBUaGlzCisJICogaXMgcmF0aGVyIGF3a3dhcmQgYnV0IGlt cG9ydGFudCBmb3IgcGVyZm9ybWFuY2UsIHNlZSBleGVjdXRpb24ucnN0LgorCSAqLworCWR1a19p bnN0cl90ICoqcHRyX2N1cnJfcGM7CisKKwkvKiBCYWNrcG9pbnRlcnMuICovCisJZHVrX2hlYXAg KmhlYXA7CisKKwkvKiBDdXJyZW50IHN0cmljdG5lc3MgZmxhZzogYWZmZWN0cyBBUEkgY2FsbHMu ICovCisJZHVrX3VpbnQ4X3Qgc3RyaWN0OworCisJLyogVGhyZWFkIHN0YXRlLiAqLworCWR1a191 aW50OF90IHN0YXRlOworCWR1a191aW50OF90IHVudXNlZDE7CisJZHVrX3VpbnQ4X3QgdW51c2Vk MjsKKworCS8qIFhYWDogVmFsc3RhY2sgYW5kIGNhbGxzdGFjayBhcmUgY3VycmVudGx5IGFzc3Vt ZWQgdG8gaGF2ZSBub24tTlVMTAorCSAqIHBvaW50ZXJzLiAgUmVsYXhpbmcgdGhpcyB3b3VsZCBu b3QgbGVhZCB0byBiaWcgYmVuZWZpdHMgKGV4Y2VwdAorCSAqIHBlcmhhcHMgZm9yIHRlcm1pbmF0 ZWQgdGhyZWFkcykuCisJICovCisKKwkvKiBWYWx1ZSBzdGFjazogdGhlc2UgYXJlIGV4cHJlc3Nl ZCBhcyBwb2ludGVycyBmb3IgZmFzdGVyIHN0YWNrCisJICogbWFuaXB1bGF0aW9uLiAgW3ZhbHN0 YWNrLHZhbHN0YWNrX3RvcFsgaXMgR0MtcmVhY2hhYmxlLAorCSAqIFt2YWxzdGFja190b3AsdmFs c3RhY2tfYWxsb2NfZW5kWyBpcyBub3QgR0MtcmVhY2hhYmxlIGJ1dCBrZXB0CisJICogaW5pdGlh bGl6ZWQgYXMgJ3VuZGVmaW5lZCcuICBbdmFsc3RhY2ssdmFsc3RhY2tfZW5kWyBpcyB0aGUKKwkg KiBndWFyYW50ZWVkL3Jlc2VydmVkIHNwYWNlIGFuZCB0aGUgdmFsc3RhY2sgY2Fubm90IGJlIHJl c2l6ZWQgdG8KKwkgKiBhIHNtYWxsZXIgc2l6ZS4gIFt2YWxzdGFja19lbmQsdmFsc3RhY2tfYWxs b2NfZW5kWyBpcyBjdXJyZW50bHkKKwkgKiBhbGxvY2F0ZWQgc2xhY2sgdGhhdCBjYW4gYmUgdXNl ZCB0byBncm93IHRoZSBjdXJyZW50IGd1YXJhbnRlZWQKKwkgKiBzcGFjZSBidXQgbWF5IGJlIHNo cnVuayBhd2F5IHdpdGhvdXQgbm90aWNlLgorCSAqCisJICoKKwkgKiA8LS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gZ3VhcmFudGVlZCAtLS0+CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPC0tLS0gc2xhY2sgLS0tPgorCSAqICAgICAgICAgICAgICAgPC0tLSBmcmFt ZSAtLS0+CisJICogLi0tLS0tLS0tLS0tLS0rPT09PT09PT09PT09PSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLgorCSAqIHx4eHh4eHh4eHh4eHh4fHl5eXl5eXl5eXl5eXl8dXV1dXV1dXV1dXx1 dXV1dXV1dXV1dXV1dXwKKwkgKiBgLS0tLS0tLS0tLS0tLSs9PT09PT09PT09PT09Ky0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0nCisJICoKKwkgKiBeICAgICAgICAgICAgIF4gICAgICAgICAgICAg XiAgICAgICAgICBeICAgICAgICAgICAgICBeCisJICogfCAgICAgICAgICAgICB8ICAgICAgICAg ICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgfAorCSAqIHZhbHN0YWNrICAgICAgYm90dG9t ICAgICAgICB0b3AgICAgICAgIGVuZCAgICAgICAgICAgIGFsbG9jX2VuZAorCSAqCisJICogICAg IHh4eCA9IGFyYml0cmFyeSB2YWx1ZXMsIGJlbG93IGN1cnJlbnQgZnJhbWUKKwkgKiAgICAgeXl5 ID0gYXJiaXRyYXJ5IHZhbHVlcywgaW5zaWRlIGN1cnJlbnQgZnJhbWUKKwkgKiAgICAgdXV1ID0g b3V0c2lkZSBhY3RpdmUgdmFsdWUgc3RhY2ssIGluaXRpYWxpemVkIHRvICd1bmRlZmluZWQnCisJ ICovCisJZHVrX3R2YWwgKnZhbHN0YWNrOyAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IG9m IHZhbHN0YWNrIGFsbG9jYXRpb24gKi8KKwlkdWtfdHZhbCAqdmFsc3RhY2tfZW5kOyAgICAgICAg ICAgICAgICAgLyogZW5kIG9mIHZhbHN0YWNrIHJlc2VydmF0aW9uL2d1YXJhbnRlZSAoZXhjbHVz aXZlKSAqLworCWR1a190dmFsICp2YWxzdGFja19hbGxvY19lbmQ7ICAgICAgICAgICAvKiBlbmQg b2YgdmFsc3RhY2sgYWxsb2NhdGlvbiAqLworCWR1a190dmFsICp2YWxzdGFja19ib3R0b207ICAg ICAgICAgICAgICAvKiBib3R0b20gb2YgY3VycmVudCBmcmFtZSAqLworCWR1a190dmFsICp2YWxz dGFja190b3A7ICAgICAgICAgICAgICAgICAvKiB0b3Agb2YgY3VycmVudCBmcmFtZSAoZXhjbHVz aXZlKSAqLworCisJLyogQ2FsbCBzdGFjaywgcmVwcmVzZW50ZWQgYXMgYSBsaW5rZWQgbGlzdCBz dGFydGluZyBmcm9tIHRoZSBjdXJyZW50CisJICogYWN0aXZhdGlvbiAob3IgTlVMTCBpZiBub3Ro aW5nIGlzIGFjdGl2ZSkuCisJICovCisJZHVrX2FjdGl2YXRpb24gKmNhbGxzdGFja19jdXJyOyAg ICAgICAgIC8qIGN1cnJlbnQgYWN0aXZhdGlvbiAob3IgTlVMTCBpZiBub25lKSAqLworCWR1a19z aXplX3QgY2FsbHN0YWNrX3RvcDsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYWN0aXZhdGlv biByZWNvcmRzIGluIGNhbGxzdGFjayAoMCBpZiBub25lKSAqLworCWR1a19zaXplX3QgY2FsbHN0 YWNrX3ByZXZlbnRjb3VudDsgICAgICAvKiBudW1iZXIgb2YgYWN0aXZhdGlvbiByZWNvcmRzIGlu IGNhbGxzdGFjayBwcmV2ZW50aW5nIGEgeWllbGQgKi8KKworCS8qIFlpZWxkL3Jlc3VtZSBib29r LWtlZXBpbmcuICovCisJZHVrX2h0aHJlYWQgKnJlc3VtZXI7ICAgICAgICAgICAgICAgICAgIC8q IHdobyByZXN1bWVkIHVzIChpZiBhbnkpICovCisKKwkvKiBDdXJyZW50IGNvbXBpbGVyIHN0YXRl IChpZiBhbnkpLCB1c2VkIGZvciBhdWdtZW50aW5nIFN5bnRheEVycm9ycy4gKi8KKwlkdWtfY29t cGlsZXJfY3R4ICpjb21waWxlX2N0eDsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFUlJVUFRf Q09VTlRFUikKKwkvKiBJbnRlcnJ1cHQgY291bnRlciBmb3IgdHJpZ2dlcmluZyBhIHNsb3cgcGF0 aCBjaGVjayBmb3IgZXhlY3V0aW9uCisJICogdGltZW91dCwgZGVidWdnZXIgaW50ZXJhY3Rpb24g c3VjaCBhcyBicmVha3BvaW50cywgZXRjLiAgVGhlIHZhbHVlCisJICogaXMgdmFsaWQgZm9yIHRo ZSBjdXJyZW50IHJ1bm5pbmcgdGhyZWFkLCBhbmQgYm90aCB0aGUgaW5pdCBhbmQKKwkgKiBjb3Vu dGVyIHZhbHVlcyBhcmUgY29waWVkIHdoZW5ldmVyIGEgdGhyZWFkIHN3aXRjaCBvY2N1cnMuICBJ dCdzCisJICogaW1wb3J0YW50IGZvciB0aGUgY291bnRlciB0byBiZSBjb252ZW5pZW50bHkgYWNj ZXNzaWJsZSBmb3IgdGhlCisJICogYnl0ZWNvZGUgZXhlY3V0b3IgaW5uZXIgbG9vcCBmb3IgcGVy Zm9ybWFuY2UgcmVhc29ucy4KKwkgKi8KKwlkdWtfaW50X3QgaW50ZXJydXB0X2NvdW50ZXI7ICAg IC8qIGNvdW50ZG93biBzdGF0ZSAqLworCWR1a19pbnRfdCBpbnRlcnJ1cHRfaW5pdDsgICAgICAg Lyogc3RhcnQgdmFsdWUgZm9yIGN1cnJlbnQgY291bnRkb3duICovCisjZW5kaWYKKworCS8qIEJ1 aWx0aW4tb2JqZWN0czsgbWF5IG9yIG1heSBub3QgYmUgc2hhcmVkIHdpdGggb3RoZXIgdGhyZWFk cywKKwkgKiB0aHJlYWRzIGV4aXN0aW5nIGluIGRpZmZlcmVudCAiY29tcGFydG1lbnRzIiB3aWxs IGhhdmUgZGlmZmVyZW50CisJICogYnVpbHQtaW5zLiAgTXVzdCBiZSBzdG9yZWQgb24gYSBwZXIt dGhyZWFkIGJhc2lzIGJlY2F1c2UgdGhlcmUKKwkgKiBpcyBubyBpbnRlcm1lZGlhdGUgc3RydWN0 dXJlIGZvciBhIHRocmVhZCBncm91cCAvIGNvbXBhcnRtZW50LgorCSAqIFRoaXMgdGFrZXMgcXVp dGUgYSBsb3Qgb2Ygc3BhY2UsIGN1cnJlbnRseSA0M3g0ID0gMTcyIGJ5dGVzIG9uCisJICogMzIt Yml0IHBsYXRmb3Jtcy4KKwkgKgorCSAqIEluIHNvbWUgY2FzZXMgdGhlIGJ1aWx0aW5zIGFycmF5 IGNvdWxkIGJlIFJPTSBiYXNlZCwgYnV0IGl0J3MKKwkgKiBzb21ldGltZXMgZWRpdGVkIChlLmcu IGZvciBzYW5kYm94aW5nKSBzbyBpdCdzIGJldHRlciB0byBrZWVwCisJICogdGhpcyBhcnJheSBp biBSQU0uCisJICovCisJZHVrX2hvYmplY3QgKmJ1aWx0aW5zW0RVS19OVU1fQlVJTFRJTlNdOwor CisJLyogQ29udmVuaWVuY2UgY29waWVzIGZyb20gaGVhcC92bSBmb3IgZmFzdGVyIGFjY2Vzcy4g Ki8KKyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX1NUUklOR1MpCisJLyogTm8gZmllbGQgbmVlZGVk IHdoZW4gc3RyaW5ncyBhcmUgaW4gUk9NLiAqLworI2Vsc2UKKyNpZiBkZWZpbmVkKERVS19VU0Vf SEVBUFBUUjE2KQorCWR1a191aW50MTZfdCAqc3RyczE2OworI2Vsc2UKKwlkdWtfaHN0cmluZyAq KnN0cnM7CisjZW5kaWYKKyNlbmRpZgorfTsKKworLyoKKyAqICBQcm90b3R5cGVzCisgKi8KKwor RFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaHRocmVhZF9jb3B5X2J1aWx0aW5fb2JqZWN0cyhk dWtfaHRocmVhZCAqdGhyX2Zyb20sIGR1a19odGhyZWFkICp0aHJfdG8pOworRFVLX0lOVEVSTkFM X0RFQ0wgdm9pZCBkdWtfaHRocmVhZF9jcmVhdGVfYnVpbHRpbl9vYmplY3RzKGR1a19odGhyZWFk ICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaHRocmVhZF9pbml0X3N0 YWNrcyhkdWtfaGVhcCAqaGVhcCwgZHVrX2h0aHJlYWQgKnRocik7CitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19odGhyZWFkX3Rlcm1pbmF0ZShkdWtfaHRocmVhZCAqdGhyKTsKKworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX2FjdGl2YXRpb24gKmR1a19odGhyZWFkX2FjdGl2YXRpb25fYWxsb2Mo ZHVrX2h0aHJlYWQgKnRocik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19odGhyZWFkX2Fj dGl2YXRpb25fZnJlZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqYWN0KTsKK0RV S19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl91bndpbmRfbm9yeihk dWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2h0aHJlYWRfYWN0 aXZhdGlvbl91bndpbmRfcmV1c2Vfbm9yeihkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19hY3RpdmF0aW9uICpkdWtfaHRocmVhZF9nZXRfYWN0aXZhdGlvbl9mb3JfbGV2 ZWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX2ludF90IGxldmVsKTsKKworRFVLX0lOVEVSTkFMX0RF Q0wgZHVrX2NhdGNoZXIgKmR1a19odGhyZWFkX2NhdGNoZXJfYWxsb2MoZHVrX2h0aHJlYWQgKnRo cik7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19odGhyZWFkX2NhdGNoZXJfZnJlZShkdWtf aHRocmVhZCAqdGhyLCBkdWtfY2F0Y2hlciAqY2F0KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX2h0aHJlYWRfY2F0Y2hlcl91bndpbmRfbm9yeihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0 aXZhdGlvbiAqYWN0KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2h0aHJlYWRfY2F0Y2hl cl91bndpbmRfbm9sZXhlbnZfbm9yeihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAq YWN0KTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfVE9SVFVSRSkKK0RVS19JTlRF Uk5BTF9ERUNMIHZvaWQgZHVrX2h0aHJlYWRfdmFsc3RhY2tfdG9ydHVyZV9yZWFsbG9jKGR1a19o dGhyZWFkICp0aHIpOworI2VuZGlmCisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgKmR1a19odGhy ZWFkX2dldF92YWxzdGFja19wdHIoZHVrX2hlYXAgKmhlYXAsIHZvaWQgKnVkKTsgIC8qIGluZGly ZWN0IGFsbG9jcyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCitE VUtfSU5URVJOQUxfREVDTCBkdWtfdWludF9mYXN0MzJfdCBkdWtfaHRocmVhZF9nZXRfYWN0X2N1 cnJfcGMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2FjdGl2YXRpb24gKmFjdCk7CisjZW5kaWYKK0RV S19JTlRFUk5BTF9ERUNMIGR1a191aW50X2Zhc3QzMl90IGR1a19odGhyZWFkX2dldF9hY3RfcHJl dl9wYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqYWN0KTsKK0RVS19JTlRFUk5B TF9ERUNMIHZvaWQgZHVrX2h0aHJlYWRfc3luY19jdXJycGMoZHVrX2h0aHJlYWQgKnRocik7CitE VUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19odGhyZWFkX3N5bmNfYW5kX251bGxfY3VycnBjKGR1 a19odGhyZWFkICp0aHIpOworCisjZW5kaWYgIC8qIERVS19IVEhSRUFEX0hfSU5DTFVERUQgKi8K Ky8qICNpbmNsdWRlIGR1a19oYXJyYXkuaCAqLworLyoKKyAqICBBcnJheSBvYmplY3QgcmVwcmVz ZW50YXRpb24sIHVzZWQgZm9yIGFjdHVhbCBBcnJheSBpbnN0YW5jZXMuCisgKgorICogIEFsbCBv YmplY3RzIHdpdGggdGhlIGV4b3RpYyBhcnJheSBiZWhhdmlvciAod2hpY2ggbXVzdCBjb2luY2lk ZSB3aXRoIGhhdmluZworICogIGludGVybmFsIGNsYXNzIGFycmF5KSBNVVNUIGJlIGR1a19oYXJy YXlzLiAgTm8gb3RoZXIgb2JqZWN0IGNhbiBiZSBhCisgKiAgZHVrX2hhcnJheS4gIEhvd2V2ZXIs IGR1a19oYXJyYXlzIG1heSBub3QgYWx3YXlzIGhhdmUgYW4gYXJyYXkgcGFydC4KKyAqLworCisj aWYgIWRlZmluZWQoRFVLX0hBUlJBWV9IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfSEFSUkFZX0hf SU5DTFVERUQKKworI2RlZmluZSBEVUtfQVNTRVJUX0hBUlJBWV9WQUxJRChoKSBkbyB7IFwKKwkJ RFVLX0FTU0VSVCgoaCkgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19B UlJBWSgoZHVrX2hvYmplY3QgKikgKGgpKSk7IFwKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9I QVNfRVhPVElDX0FSUkFZKChkdWtfaG9iamVjdCAqKSAoaCkpKTsgXAorCX0gd2hpbGUgKDApCisK KyNkZWZpbmUgRFVLX0hBUlJBWV9MRU5HVEhfV1JJVEFCTEUoaCkgICAgICAgICAoIShoKS0+bGVu Z3RoX25vbndyaXRhYmxlKQorI2RlZmluZSBEVUtfSEFSUkFZX0xFTkdUSF9OT05XUklUQUJMRSho KSAgICAgICgoaCktPmxlbmd0aF9ub253cml0YWJsZSkKKyNkZWZpbmUgRFVLX0hBUlJBWV9TRVRf TEVOR1RIX1dSSVRBQkxFKGgpICAgICBkbyB7IChoKS0+bGVuZ3RoX25vbndyaXRhYmxlID0gMDsg fSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0hBUlJBWV9TRVRfTEVOR1RIX05PTldSSVRBQkxFKGgp ICBkbyB7IChoKS0+bGVuZ3RoX25vbndyaXRhYmxlID0gMTsgfSB3aGlsZSAoMCkKKworc3RydWN0 IGR1a19oYXJyYXkgeworCS8qIFNoYXJlZCBvYmplY3QgcGFydC4gKi8KKwlkdWtfaG9iamVjdCBv Ymo7CisKKwkvKiBBcnJheSAubGVuZ3RoLgorCSAqCisJICogQXQgcHJlc2VudCBBcnJheSAubGVu Z3RoIG1heSBiZSBzbWFsbGVyLCBlcXVhbCwgb3IgZXZlbiBsYXJnZXIKKwkgKiB0aGFuIHRoZSBh bGxvY2F0ZWQgdW5kZXJseWluZyBhcnJheSBwYXJ0LiAgRmFzdCBwYXRoIGNvZGUgbXVzdAorCSAq IGFsd2F5cyB0YWtlIHRoaXMgaW50byBhY2NvdW50IGNhcmVmdWxseS4KKwkgKi8KKwlkdWtfdWlu dDMyX3QgbGVuZ3RoOworCisJLyogQXJyYXkgLmxlbmd0aCBwcm9wZXJ0eSBhdHRyaWJ1dGVzLiAg VGhlIHByb3BlcnR5IGlzIGFsd2F5cworCSAqIG5vbi1lbnVtZXJhYmxlIGFuZCBub24tY29uZmln dXJhYmxlLiAgSXQncyBpbml0aWFsbHkgd3JpdGFibGUKKwkgKiBidXQgcGVyIE9iamVjdC5kZWZp bmVQcm9wZXJ0eSgpIHJ1bGVzIGl0IGNhbiBiZSBtYWRlIG5vbi13cml0YWJsZQorCSAqIGV2ZW4g aWYgaXQgaXMgbm9uLWNvbmZpZ3VyYWJsZS4gIFRodXMgd2UgbmVlZCB0byB0cmFjayB0aGUKKwkg KiB3cml0YWJpbGl0eSBleHBsaWNpdGx5LgorCSAqCisJICogWFhYOiB0aGlzIGZpZWxkIHRvIGJl IGVsaW1pbmF0ZWQgYW5kIG1vdmVkIGludG8gZHVrX2hvYmplY3QKKwkgKiBmbGFncyBmaWVsZCB0 byBzYXZlIHNwYWNlLgorCSAqLworCWR1a19ib29sX3QgbGVuZ3RoX25vbndyaXRhYmxlOworfTsK KworI2VuZGlmICAvKiBEVUtfSEFSUkFZX0hfSU5DTFVERUQgKi8KKy8qICNpbmNsdWRlIGR1a19o ZW52LmggKi8KKy8qCisgKiAgRW52aXJvbm1lbnQgb2JqZWN0IHJlcHJlc2VudGF0aW9uLgorICov CisKKyNpZiAhZGVmaW5lZChEVUtfSEVOVl9IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfSEVOVl9I X0lOQ0xVREVECisKKyNkZWZpbmUgRFVLX0FTU0VSVF9IREVDRU5WX1ZBTElEKGgpIGRvIHsgXAor CQlEVUtfQVNTRVJUKChoKSAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0lT X0RFQ0VOVigoZHVrX2hvYmplY3QgKikgKGgpKSk7IFwKKwkJRFVLX0FTU0VSVCgoaCktPnRocmVh ZCA9PSBOVUxMIHx8IChoKS0+dmFybWFwICE9IE5VTEwpOyBcCisJfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBEVUtfQVNTRVJUX0hPQkpFTlZfVkFMSUQoaCkgZG8geyBcCisJCURVS19BU1NFUlQoKGgp ICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfT0JKRU5WKChkdWtfaG9i amVjdCAqKSAoaCkpKTsgXAorCQlEVUtfQVNTRVJUKChoKS0+dGFyZ2V0ICE9IE5VTEwpOyBcCisJ CURVS19BU1NFUlQoKGgpLT5oYXNfdGhpcyA9PSAwIHx8IChoKS0+aGFzX3RoaXMgPT0gMSk7IFwK Kwl9IHdoaWxlICgwKQorCitzdHJ1Y3QgZHVrX2hkZWNlbnYgeworCS8qIFNoYXJlZCBvYmplY3Qg cGFydC4gKi8KKwlkdWtfaG9iamVjdCBvYmo7CisKKwkvKiBUaGVzZSBjb250cm9sIHZhcmlhYmxl cyBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBhY2Nlc3MgbGl2ZQorCSAqIHZhcmlhYmxl cyBmb3IgYSBjbG9zdXJlIHRoYXQgaXMgc3RpbGwgb3Blbi4gIElmIHRocmVhZCA9PSBOVUxMLAor CSAqIHRoZSByZWNvcmQgaXMgY2xvc2VkIGFuZCB0aGUgaWRlbnRpZmllcnMgYXJlIGluIHRoZSBw cm9wZXJ0eSB0YWJsZS4KKwkgKi8KKwlkdWtfaHRocmVhZCAqdGhyZWFkOworCWR1a19ob2JqZWN0 ICp2YXJtYXA7CisJZHVrX3NpemVfdCByZWdiYXNlX2J5dGVvZmY7Cit9OworCitzdHJ1Y3QgZHVr X2hvYmplbnYgeworCS8qIFNoYXJlZCBvYmplY3QgcGFydC4gKi8KKwlkdWtfaG9iamVjdCBvYmo7 CisKKwkvKiBUYXJnZXQgb2JqZWN0IGFuZCAndGhpcycgYmluZGluZyBmb3Igb2JqZWN0IGJpbmRp bmcuICovCisJZHVrX2hvYmplY3QgKnRhcmdldDsKKworCS8qIFRoZSAndGFyZ2V0JyBvYmplY3Qg aXMgdXNlZCBhcyBhIHRoaXMgYmluZGluZyBpbiBvbmx5IHNvbWUgb2JqZWN0CisJICogZW52aXJv bm1lbnRzLiAgRm9yIGV4YW1wbGUsIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgZG9lcyBub3QgcHJv dmlkZQorCSAqIGEgdGhpcyBiaW5kaW5nLCBidXQgYSB3aXRoIHN0YXRlbWVudCBkb2VzLgorCSAq LworCWR1a19ib29sX3QgaGFzX3RoaXM7Cit9OworCisjZW5kaWYgIC8qIERVS19IRU5WX0hfSU5D TFVERUQgKi8KKy8qICNpbmNsdWRlIGR1a19oYnVmZmVyLmggKi8KKy8qCisgKiAgSGVhcCBidWZm ZXIgcmVwcmVzZW50YXRpb24uCisgKgorICogIEhlYXAgYWxsb2NhdGVkIHVzZXIgZGF0YSBidWZm ZXIgd2hpY2ggaXMgZWl0aGVyOgorICoKKyAqICAgIDEuIEEgZml4ZWQgc2l6ZSBidWZmZXIgKGRh dGEgZm9sbG93cyBoZWFkZXIgc3RhdGljYWxseSkKKyAqICAgIDIuIEEgZHluYW1pYyBzaXplIGJ1 ZmZlciAoZGF0YSBwb2ludGVyIGZvbGxvd3MgaGVhZGVyKQorICoKKyAqICBUaGUgZGF0YSBwb2lu dGVyIGZvciBhIHZhcmlhYmxlIHNpemUgYnVmZmVyIG9mIHplcm8gc2l6ZSBtYXkgYmUgTlVMTC4K KyAqLworCisjaWYgIWRlZmluZWQoRFVLX0hCVUZGRVJfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVL X0hCVUZGRVJfSF9JTkNMVURFRAorCisvKgorICogIEZsYWdzCisgKgorICogIEZpeGVkIGJ1ZmZl cjogICAgIDAKKyAqICBEeW5hbWljIGJ1ZmZlcjogICBEVUtfSEJVRkZFUl9GTEFHX0RZTkFNSUMK KyAqICBFeHRlcm5hbCBidWZmZXI6ICBEVUtfSEJVRkZFUl9GTEFHX0RZTkFNSUMgfCBEVUtfSEJV RkZFUl9GTEFHX0VYVEVSTkFMCisgKi8KKworI2RlZmluZSBEVUtfSEJVRkZFUl9GTEFHX0RZTkFN SUMgICAgICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9VU0VSX0ZMQUcoMCkgICAgLyogYnVmZmVy IGlzIGJlaGluZCBhIHBvaW50ZXIsIGR5bmFtaWMgb3IgZXh0ZXJuYWwgKi8KKyNkZWZpbmUgRFVL X0hCVUZGRVJfRkxBR19FWFRFUk5BTCAgICAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfVVNFUl9G TEFHKDEpICAgIC8qIGJ1ZmZlciBwb2ludGVyIGlzIHRvIGFuIGV4dGVybmFsbHkgYWxsb2NhdGVk IGJ1ZmZlciAqLworCisjZGVmaW5lIERVS19IQlVGRkVSX0hBU19EWU5BTUlDKHgpICAgICAgICAg ICAgICAgIERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygmKHgpLT5oZHIsIERVS19IQlVGRkVS X0ZMQUdfRFlOQU1JQykKKyNkZWZpbmUgRFVLX0hCVUZGRVJfSEFTX0VYVEVSTkFMKHgpICAgICAg ICAgICAgICAgRFVLX0hFQVBIRFJfQ0hFQ0tfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hCVUZG RVJfRkxBR19FWFRFUk5BTCkKKworI2RlZmluZSBEVUtfSEJVRkZFUl9TRVRfRFlOQU1JQyh4KSAg ICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hC VUZGRVJfRkxBR19EWU5BTUlDKQorI2RlZmluZSBEVUtfSEJVRkZFUl9TRVRfRVhURVJOQUwoeCkg ICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9TRVRfRkxBR19CSVRTKCYoeCktPmhkciwgRFVLX0hC VUZGRVJfRkxBR19FWFRFUk5BTCkKKworI2RlZmluZSBEVUtfSEJVRkZFUl9DTEVBUl9EWU5BTUlD KHgpICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9DTEVBUl9GTEFHX0JJVFMoJih4KS0+aGRyLCBE VUtfSEJVRkZFUl9GTEFHX0RZTkFNSUMpCisjZGVmaW5lIERVS19IQlVGRkVSX0NMRUFSX0VYVEVS TkFMKHgpICAgICAgICAgICAgIERVS19IRUFQSERSX0NMRUFSX0ZMQUdfQklUUygmKHgpLT5oZHIs IERVS19IQlVGRkVSX0ZMQUdfRVhURVJOQUwpCisKKy8qCisgKiAgTWlzYyBkZWZpbmVzCisgKi8K KworLyogSW1wb3NlIGEgbWF4aW11bSBidWZmZXIgbGVuZ3RoIGZvciBub3cuICBSZXN0cmljdGVk IGFydGlmaWNpYWxseSB0bworICogZW5zdXJlIHJlc2l6ZSBjb21wdXRhdGlvbnMgb3IgYWRkaW5n IGEgaGVhcCBoZWFkZXIgbGVuZ3RoIHdvbid0CisgKiBvdmVyZmxvdyBzaXplX3QgYW5kIHRoYXQg YSBzaWduZWQgZHVrX2ludF90IGNhbiBob2xkIGEgYnVmZmVyCisgKiBsZW5ndGguICBUaGUgbGlt aXQgc2hvdWxkIGJlIHN5bmNocm9uaXplZCB3aXRoIERVS19IU1RSSU5HX01BWF9CWVRFTEVOLgor ICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGTEVOMTYpCisjZGVmaW5lIERVS19IQlVGRkVS X01BWF9CWVRFTEVOICAgICAgICAgICAgICAgICAgICgweDAwMDBmZmZmVUwpCisjZWxzZQorLyog SW50ZW50aW9uYWxseSBub3QgMHg3ZmZmZmZmZlVMOyBhdCBsZWFzdCBKU09OIGNvZGUgZXhwZWN0 cyB0aGF0CisgKiAyKmxlbiArIDIgZml0cyBpbiAzMiBiaXRzLgorICovCisjZGVmaW5lIERVS19I QlVGRkVSX01BWF9CWVRFTEVOICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZlVUwpCisjZW5k aWYKKworLyoKKyAqICBGaWVsZCBhY2Nlc3MKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JV RkxFTjE2KQorLyogc2l6ZSBzdG9yZWQgaW4gZHVrX2hlYXBoZHIgdW51c2VkIGZsYWcgYml0cyAq LworI2RlZmluZSBEVUtfSEJVRkZFUl9HRVRfU0laRSh4KSAgICAgKCh4KS0+aGRyLmhfZmxhZ3Mg Pj4gMTYpCisjZGVmaW5lIERVS19IQlVGRkVSX1NFVF9TSVpFKHgsdikgICBkbyB7IFwKKwkJZHVr X3NpemVfdCBkdWtfX3Y7IFwKKwkJZHVrX192ID0gKHYpOyBcCisJCURVS19BU1NFUlQoZHVrX192 IDw9IDB4ZmZmZlVMKTsgXAorCQkoeCktPmhkci5oX2ZsYWdzID0gKCh4KS0+aGRyLmhfZmxhZ3Mg JiAweDAwMDBmZmZmVUwpIHwgKCgoZHVrX3VpbnQzMl90KSBkdWtfX3YpIDw8IDE2KTsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVSX0FERF9TSVpFKHgsZHYpICBkbyB7IFwKKwkJ KHgpLT5oZHIuaF9mbGFncyArPSAoKGR2KSA8PCAxNik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmlu ZSBEVUtfSEJVRkZFUl9TVUJfU0laRSh4LGR2KSAgZG8geyBcCisJCSh4KS0+aGRyLmhfZmxhZ3Mg LT0gKChkdikgPDwgMTYpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19IQlVG RkVSX0dFVF9TSVpFKHgpICAgICAoKChkdWtfaGJ1ZmZlciAqKSAoeCkpLT5zaXplKQorI2RlZmlu ZSBEVUtfSEJVRkZFUl9TRVRfU0laRSh4LHYpICAgZG8geyBcCisJCSgoZHVrX2hidWZmZXIgKikg KHgpKS0+c2l6ZSA9ICh2KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVSX0FE RF9TSVpFKHgsZHYpICBkbyB7IFwKKwkJKHgpLT5zaXplICs9IChkdik7IFwKKwl9IHdoaWxlICgw KQorI2RlZmluZSBEVUtfSEJVRkZFUl9TVUJfU0laRSh4LGR2KSAgZG8geyBcCisJCSh4KS0+c2l6 ZSAtPSAoZHYpOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIERVS19IQlVGRkVS X0ZJWEVEX0dFVF9TSVpFKHgpICAgICAgIERVS19IQlVGRkVSX0dFVF9TSVpFKChkdWtfaGJ1ZmZl ciAqKSAoeCkpCisjZGVmaW5lIERVS19IQlVGRkVSX0ZJWEVEX1NFVF9TSVpFKHgsdikgICAgIERV S19IQlVGRkVSX1NFVF9TSVpFKChkdWtfaGJ1ZmZlciAqKSAoeCkpCisKKyNkZWZpbmUgRFVLX0hC VUZGRVJfRFlOQU1JQ19HRVRfU0laRSh4KSAgICAgRFVLX0hCVUZGRVJfR0VUX1NJWkUoKGR1a19o YnVmZmVyICopICh4KSkKKyNkZWZpbmUgRFVLX0hCVUZGRVJfRFlOQU1JQ19TRVRfU0laRSh4LHYp ICAgRFVLX0hCVUZGRVJfU0VUX1NJWkUoKGR1a19oYnVmZmVyICopICh4KSwgKHYpKQorI2RlZmlu ZSBEVUtfSEJVRkZFUl9EWU5BTUlDX0FERF9TSVpFKHgsZHYpICBEVUtfSEJVRkZFUl9BRERfU0la RSgoZHVrX2hidWZmZXIgKikgKHgpLCAoZHYpKQorI2RlZmluZSBEVUtfSEJVRkZFUl9EWU5BTUlD X1NVQl9TSVpFKHgsZHYpICBEVUtfSEJVRkZFUl9TVUJfU0laRSgoZHVrX2hidWZmZXIgKikgKHgp LCAoZHYpKQorCisjZGVmaW5lIERVS19IQlVGRkVSX0VYVEVSTkFMX0dFVF9TSVpFKHgpICAgIERV S19IQlVGRkVSX0dFVF9TSVpFKChkdWtfaGJ1ZmZlciAqKSAoeCkpCisjZGVmaW5lIERVS19IQlVG RkVSX0VYVEVSTkFMX1NFVF9TSVpFKHgsdikgIERVS19IQlVGRkVSX1NFVF9TSVpFKChkdWtfaGJ1 ZmZlciAqKSAoeCksICh2KSkKKworI2RlZmluZSBEVUtfSEJVRkZFUl9GSVhFRF9HRVRfREFUQV9Q VFIoaGVhcCx4KSAgICAoKGR1a191aW50OF90ICopICgoKGR1a19oYnVmZmVyX2ZpeGVkICopICh2 b2lkICopICh4KSkgKyAxKSkKKworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisjZGVm aW5lIERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX0RBVEFfUFRSKGhlYXAseCkgXAorCSgodm9pZCAq KSBEVUtfVVNFX0hFQVBQVFJfREVDMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAoKGR1a19oZWFwaGRy ICopICh4KSktPmhfZXh0cmExNikpCisjZGVmaW5lIERVS19IQlVGRkVSX0RZTkFNSUNfU0VUX0RB VEFfUFRSKGhlYXAseCx2KSAgICAgZG8geyBcCisJCSgoZHVrX2hlYXBoZHIgKikgKHgpKS0+aF9l eHRyYTE2ID0gRFVLX1VTRV9IRUFQUFRSX0VOQzE2KChoZWFwKS0+aGVhcF91ZGF0YSwgKHZvaWQg KikgKHYpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVSX0RZTkFNSUNfU0VU X0RBVEFfUFRSX05VTEwoaGVhcCx4KSAgZG8geyBcCisJCSgoZHVrX2hlYXBoZHIgKikgKHgpKS0+ aF9leHRyYTE2ID0gMDsgIC8qIGFzc3VtZSAwIDw9PiBOVUxMICovIFwKKwl9IHdoaWxlICgwKQor I2Vsc2UKKyNkZWZpbmUgRFVLX0hCVUZGRVJfRFlOQU1JQ19HRVRfREFUQV9QVFIoaGVhcCx4KSAg ICAgICAoKHgpLT5jdXJyX2FsbG9jKQorI2RlZmluZSBEVUtfSEJVRkZFUl9EWU5BTUlDX1NFVF9E QVRBX1BUUihoZWFwLHgsdikgICAgIGRvIHsgXAorCQkoeCktPmN1cnJfYWxsb2MgPSAodm9pZCAq KSAodik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfSEJVRkZFUl9EWU5BTUlDX1NFVF9E QVRBX1BUUl9OVUxMKGhlYXAseCkgIGRvIHsgXAorCQkoeCktPmN1cnJfYWxsb2MgPSAodm9pZCAq KSBOVUxMOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBObyBwb2ludGVyIGNvbXByZXNz aW9uIGJlY2F1c2UgcG9pbnRlciBpcyBwb3RlbnRpYWxseSBvdXRzaWRlIG9mCisgKiBEdWt0YXBl IGhlYXAuCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfSEVBUFBUUjE2KQorI2RlZmluZSBEVUtf SEJVRkZFUl9FWFRFUk5BTF9HRVRfREFUQV9QVFIoaGVhcCx4KSBcCisJKCh2b2lkICopICh4KS0+ Y3Vycl9hbGxvYykKKyNkZWZpbmUgRFVLX0hCVUZGRVJfRVhURVJOQUxfU0VUX0RBVEFfUFRSKGhl YXAseCx2KSAgICAgZG8geyBcCisJCSh4KS0+Y3Vycl9hbGxvYyA9ICh2b2lkICopICh2KTsgXAor CX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19IQlVGRkVSX0VYVEVSTkFMX1NFVF9EQVRBX1BUUl9O VUxMKGhlYXAseCkgIGRvIHsgXAorCQkoeCktPmN1cnJfYWxsb2MgPSAodm9pZCAqKSBOVUxMOyBc CisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19IQlVGRkVSX0VYVEVSTkFMX0dFVF9E QVRBX1BUUihoZWFwLHgpIFwKKwkoKHZvaWQgKikgKHgpLT5jdXJyX2FsbG9jKQorI2RlZmluZSBE VUtfSEJVRkZFUl9FWFRFUk5BTF9TRVRfREFUQV9QVFIoaGVhcCx4LHYpICAgICBkbyB7IFwKKwkJ KHgpLT5jdXJyX2FsbG9jID0gKHZvaWQgKikgKHYpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUg RFVLX0hCVUZGRVJfRVhURVJOQUxfU0VUX0RBVEFfUFRSX05VTEwoaGVhcCx4KSAgZG8geyBcCisJ CSh4KS0+Y3Vycl9hbGxvYyA9ICh2b2lkICopIE5VTEw7IFwKKwl9IHdoaWxlICgwKQorI2VuZGlm CisKKy8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIChtYXRj aGluZyBjdXJyZW50IGFsbG9jYXRpb24KKyAqIHNpemUpLiAgTWF5IGJlIE5VTEwgZm9yIHplcm8g c2l6ZSBkeW5hbWljL2V4dGVybmFsIGJ1ZmZlci4KKyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9I RUFQUFRSMTYpCisjZGVmaW5lIERVS19IQlVGRkVSX0dFVF9EQVRBX1BUUihoZWFwLHgpICAoIFwK KwlEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQygoeCkpID8gXAorCQkoIFwKKwkJCURVS19IQlVGRkVS X0hBU19FWFRFUk5BTCgoeCkpID8gXAorCQkJCURVS19IQlVGRkVSX0VYVEVSTkFMX0dFVF9EQVRB X1BUUigoaGVhcCksIChkdWtfaGJ1ZmZlcl9leHRlcm5hbCAqKSAoeCkpIDogXAorCQkJCURVS19I QlVGRkVSX0RZTkFNSUNfR0VUX0RBVEFfUFRSKChoZWFwKSwgKGR1a19oYnVmZmVyX2R5bmFtaWMg KikgKHgpKSBcCisJCSkgOiBcCisJCURVS19IQlVGRkVSX0ZJWEVEX0dFVF9EQVRBX1BUUigoaGVh cCksIChkdWtfaGJ1ZmZlcl9maXhlZCAqKSAodm9pZCAqKSAoeCkpIFwKKwkpCisjZWxzZQorLyog V2l0aG91dCBoZWFwIHBvaW50ZXIgY29tcHJlc3Npb24gZHVrX2hidWZmZXJfZHluYW1pYyBhbmQg ZHVrX2hidWZmZXJfZXh0ZXJuYWwKKyAqIGhhdmUgdGhlIHNhbWUgbGF5b3V0IHNvIGNoZWNraW5n IGZvciBmaXhlZCB2cy4gZHluYW1pYyAob3IgZXh0ZXJuYWwpIGlzIGVub3VnaC4KKyAqLworI2Rl ZmluZSBEVUtfSEJVRkZFUl9HRVRfREFUQV9QVFIoaGVhcCx4KSAgKCBcCisJRFVLX0hCVUZGRVJf SEFTX0RZTkFNSUMoKHgpKSA/IFwKKwkJRFVLX0hCVUZGRVJfRFlOQU1JQ19HRVRfREFUQV9QVFIo KGhlYXApLCAoZHVrX2hidWZmZXJfZHluYW1pYyAqKSAoeCkpIDogXAorCQlEVUtfSEJVRkZFUl9G SVhFRF9HRVRfREFUQV9QVFIoKGhlYXApLCAoZHVrX2hidWZmZXJfZml4ZWQgKikgKHZvaWQgKikg KHgpKSBcCisJKQorI2VuZGlmCisKKy8qCisgKiAgU3RydWN0cworICovCisKKy8qIFNoYXJlZCBw cmVmaXggZm9yIGFsbCBidWZmZXIgdHlwZXMuICovCitzdHJ1Y3QgZHVrX2hidWZmZXIgeworCWR1 a19oZWFwaGRyIGhkcjsKKworCS8qIEl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byB0cmFj ayB0aGUgY3VycmVudCBzaXplLCBidXQKKwkgKiBpdCBpcyB1c2VmdWwgZm9yIHdyaXRpbmcgcm9i dXN0IG5hdGl2ZSBjb2RlLgorCSAqLworCisJLyogQ3VycmVudCBzaXplLiAqLworI2lmIGRlZmlu ZWQoRFVLX1VTRV9CVUZMRU4xNikKKwkvKiBTdG9yZWQgaW4gZHVrX2hlYXBoZHIgdW51c2VkIGZs YWdzLiAqLworI2Vsc2UKKwlkdWtfc2l6ZV90IHNpemU7CisjZW5kaWYKKworCS8qCisJICogIERh dGEgZm9sbG93aW5nIHRoZSBoZWFkZXIgZGVwZW5kcyBvbiB0aGUgRFVLX0hCVUZGRVJfRkxBR19E WU5BTUlDCisJICogIGZsYWcuCisJICoKKwkgKiAgSWYgdGhlIGZsYWcgaXMgY2xlYXIgKHRoZSBi dWZmZXIgaXMgYSBmaXhlZCBzaXplIG9uZSksIHRoZSBidWZmZXIKKwkgKiAgZGF0YSBmb2xsb3dz IHRoZSBoZWFkZXIgZGlyZWN0bHksIGNvbnNpc3Rpbmcgb2YgJ3NpemUnIGJ5dGVzLgorCSAqCisJ ICogIElmIHRoZSBmbGFnIGlzIHNldCwgdGhlIGFjdHVhbCBidWZmZXIgaXMgYWxsb2NhdGVkIHNl cGFyYXRlbHksIGFuZAorCSAqICBhIGZldyBjb250cm9sIGZpZWxkcyBmb2xsb3cgdGhlIGhlYWRl ci4gIFNwZWNpZmljYWxseToKKwkgKgorCSAqICAgIC0gYSAidm9pZCAqIiBwb2ludGluZyB0byB0 aGUgY3VycmVudCBhbGxvY2F0aW9uCisJICogICAgLSBhIGR1a19zaXplX3QgaW5kaWNhdGluZyB0 aGUgZnVsbCBhbGxvY2F0ZWQgc2l6ZSAoYWx3YXlzID49ICdzaXplJykKKwkgKgorCSAqICBJZiBE VUtfSEJVRkZFUl9GTEFHX0VYVEVSTkFMIGlzIHNldCwgdGhlIGJ1ZmZlciBoYXMgYmVlbiBhbGxv Y2F0ZWQKKwkgKiAgYnkgdXNlciBjb2RlLCBzbyB0aGF0IER1a3RhcGUgd29uJ3QgYmUgYWJsZSB0 byByZXNpemUgaXQgYW5kIHdvbid0CisJICogIGZyZWUgaXQuICBUaGlzIGFsbG93cyBidWZmZXJz IHRvIHBvaW50IHRvIGUuZy4gYW4gZXh0ZXJuYWxseQorCSAqICBhbGxvY2F0ZWQgc3RydWN0dXJl IHN1Y2ggYXMgYSBmcmFtZSBidWZmZXIuCisJICoKKwkgKiAgVW5saWtlIHN0cmluZ3MsIG5vIHRl cm1pbmF0b3IgYnl0ZSAoTlVMKSBpcyBndWFyYW50ZWVkIGFmdGVyIHRoZQorCSAqICBkYXRhLiAg VGhpcyB3b3VsZCBiZSBjb252ZW5pZW50LCBidXQgd291bGQgcGFkIGFsaWduZWQgdXNlciBidWZm ZXJzCisJICogIHVubmVjZXNzYXJpbHkgdXB3YXJkcyBpbiBzaXplLiAgRm9yIGluc3RhbmNlLCBp ZiB1c2VyIGNvZGUgcmVxdWVzdGVkCisJICogIGEgNjQtYnl0ZSBkeW5hbWljIGJ1ZmZlciwgNjUg Ynl0ZXMgd291bGQgYWN0dWFsbHkgYmUgYWxsb2NhdGVkIHdoaWNoCisJICogIHdvdWxkIHRoZW4g cG90ZW50aWFsbHkgcm91bmQgdXB3YXJkcyB0byBwZXJoYXBzIDY4IG9yIDcyIGJ5dGVzLgorCSAq LworfTsKKworLyogRml4ZWQgYnVmZmVyOyBkYXRhIGZvbGxvd3Mgc3RydWN0LCB3aXRoIHByb3Bl ciBhbGlnbm1lbnQgZ3VhcmFudGVlZCBieQorICogc3RydWN0IHNpemUuCisgKi8KKyNpZiAoRFVL X1VTRV9BTElHTl9CWSA9PSA4KSAmJiBkZWZpbmVkKERVS19VU0VfUEFDS19NU1ZDX1BSQUdNQSkK KyNwcmFnbWEgcGFjayhwdXNoLCA4KQorI2VuZGlmCitzdHJ1Y3QgZHVrX2hidWZmZXJfZml4ZWQg eworCS8qIEEgdW5pb24gaXMgdXNlZCBoZXJlIGFzIGEgcG9ydGFibGUgc3RydWN0IHNpemUgLyBh bGlnbm1lbnQgdHJpY2s6CisJICogYnkgYWRkaW5nIGEgMzItYml0IG9yIGEgNjQtYml0ICh1bnVz ZWQpIHVuaW9uIG1lbWJlciwgdGhlIHNpemUgb2YKKwkgKiB0aGUgc3RydWN0IGlzIGVmZmVjdGl2 ZWx5IGZvcmNlZCB0byBiZSBhIG11bHRpcGxlIG9mIDQgb3IgOCBieXRlcworCSAqIChyZXNwZWN0 aXZlbHkpIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0IHVubGVzcwor CSAqIG5lY2Vzc2FyeS4KKwkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlkdWtfaGVhcGhk ciBoZHI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkxFTjE2KQorCQkJLyogU3RvcmVkIGluIGR1 a19oZWFwaGRyIHVudXNlZCBmbGFncy4gKi8KKyNlbHNlCisJCQlkdWtfc2l6ZV90IHNpemU7Cisj ZW5kaWYKKwkJfSBzOworI2lmIChEVUtfVVNFX0FMSUdOX0JZID09IDQpCisJCWR1a191aW50MzJf dCBkdW1teV9mb3JfYWxpZ240OworI2VsaWYgKERVS19VU0VfQUxJR05fQlkgPT0gOCkKKwkJZHVr X2RvdWJsZV90IGR1bW15X2Zvcl9hbGlnbjhfMTsKKyNpZiBkZWZpbmVkKERVS19VU0VfNjRCSVRf T1BTKQorCQlkdWtfdWludDY0X3QgZHVtbXlfZm9yX2FsaWduOF8yOworI2VuZGlmCisjZWxpZiAo RFVLX1VTRV9BTElHTl9CWSA9PSAxKQorCQkvKiBubyBleHRyYSBwYWRkaW5nICovCisjZWxzZQor I2Vycm9yIGludmFsaWQgRFVLX1VTRV9BTElHTl9CWQorI2VuZGlmCisJfSB1OworCisJLyoKKwkg KiAgRGF0YSBmb2xsb3dzIHRoZSBzdHJ1Y3QgaGVhZGVyLiAgVGhlIHN0cnVjdCBzaXplIGlzIHBh ZGRlZCBieSB0aGUKKwkgKiAgY29tcGlsZXIgYmFzZWQgb24gdGhlIHN0cnVjdCBtZW1iZXJzLiAg VGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlCisJICogIGJ1ZmZlciBkYXRhIHdpbGwgYmUgYWxpZ25l ZC1ieS00IGJ1dCBub3QgbmVjZXNzYXJpbHkgYWxpZ25lZC1ieS04LgorCSAqCisJICogIE9uIHBs YXRmb3JtcyB3aGVyZSBhbGlnbm1lbnQgZG9lcyBub3QgbWF0dGVyLCB0aGUgc3RydWN0IHBhZGRp bmcKKwkgKiAgY291bGQgYmUgcmVtb3ZlZCAoaWYgdGhlcmUgaXMgYW55KS4gIE9uIHBsYXRmb3Jt cyB3aGVyZSBhbGlnbm1lbnQKKwkgKiAgYnkgOCBpcyByZXF1aXJlZCwgdGhlIHN0cnVjdCBzaXpl IG11c3QgYmUgZm9yY2VkIHRvIGJlIGEgbXVsdGlwbGUKKwkgKiAgb2YgOCBieSBzb21lIG1lYW5z LiAgV2l0aG91dCBpdCwgc29tZSB1c2VyIGNvZGUgbWF5IGJyZWFrLCBhbmQgYWxzbworCSAqICBE dWt0YXBlIGl0c2VsZiBicmVha3MgKGUuZy4gdGhlIGNvbXBpbGVyIHN0b3JlcyBkdWtfdHZhbHMg aW4gYQorCSAqICBkeW5hbWljIGJ1ZmZlcikuCisJICovCit9CisjaWYgKERVS19VU0VfQUxJR05f QlkgPT0gOCkgJiYgZGVmaW5lZChEVUtfVVNFX1BBQ0tfR0NDX0FUVFIpCitfX2F0dHJpYnV0ZV9f ICgoYWxpZ25lZCAoOCkpKQorI2VsaWYgKERVS19VU0VfQUxJR05fQlkgPT0gOCkgJiYgZGVmaW5l ZChEVUtfVVNFX1BBQ0tfQ0xBTkdfQVRUUikKK19fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkp CisjZW5kaWYKKzsKKyNpZiAoRFVLX1VTRV9BTElHTl9CWSA9PSA4KSAmJiBkZWZpbmVkKERVS19V U0VfUEFDS19NU1ZDX1BSQUdNQSkKKyNwcmFnbWEgcGFjayhwb3ApCisjZW5kaWYKKworLyogRHlu YW1pYyBidWZmZXIgd2l0aCAnY3Vycl9hbGxvYycgcG9pbnRpbmcgdG8gYSBkeW5hbWljIGFyZWEg YWxsb2NhdGVkIHVzaW5nCisgKiBoZWFwIGFsbG9jYXRpb24gcHJpbWl0aXZlcy4gIEFsc28gdXNl ZCBmb3IgZXh0ZXJuYWwgYnVmZmVycyB3aGVuIGxvdyBtZW1vcnkKKyAqIG9wdGlvbnMgYXJlIG5v dCB1c2VkLgorICovCitzdHJ1Y3QgZHVrX2hidWZmZXJfZHluYW1pYyB7CisJZHVrX2hlYXBoZHIg aGRyOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkxFTjE2KQorCS8qIFN0b3JlZCBpbiBkdWtf aGVhcGhkciB1bnVzZWQgZmxhZ3MuICovCisjZWxzZQorCWR1a19zaXplX3Qgc2l6ZTsKKyNlbmRp ZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQVFIxNikKKwkvKiBTdG9yZWQgaW4gZHVrX2hl YXBoZHIgaF9leHRyYTE2LiAqLworI2Vsc2UKKwl2b2lkICpjdXJyX2FsbG9jOyAgLyogbWF5IGJl IE5VTEwgaWYgYWxsb2Nfc2l6ZSA9PSAwICovCisjZW5kaWYKKworCS8qCisJICogIEFsbG9jYXRp b24gc2l6ZSBmb3IgJ2N1cnJfYWxsb2MnIGlzIGFsbG9jX3NpemUuICBUaGVyZSBpcyBubworCSAq ICBhdXRvbWF0aWMgTlVMIHRlcm1pbmF0b3IgZm9yIGJ1ZmZlcnMgKHNlZSBhYm92ZSBmb3IgcmF0 aW9uYWxlKS4KKwkgKgorCSAqICAnY3Vycl9hbGxvYycgaXMgZXhwbGljaXRseSBhbGxvY2F0ZWQg d2l0aCBoZWFwIGFsbG9jYXRpb24KKwkgKiAgcHJpbWl0aXZlcyBhbmQgd2lsbCB0aHVzIGFsd2F5 cyBoYXZlIGFsaWdubWVudCBzdWl0YWJsZSBmb3IKKwkgKiAgZS5nLiBkdWtfdHZhbCBhbmQgYW4g SUVFRSBkb3VibGUuCisJICovCit9OworCisvKiBFeHRlcm5hbCBidWZmZXIgd2l0aCAnY3Vycl9h bGxvYycgbWFuYWdlZCBieSB1c2VyIGNvZGUgYW5kIHBvaW50aW5nIHRvIGFuCisgKiBhcmJpdHJh cnkgYWRkcmVzcy4gIFdoZW4gaGVhcCBwb2ludGVyIGNvbXByZXNzaW9uIGlzIG5vdCB1c2VkLCB0 aGlzIHN0cnVjdAorICogaGFzIHRoZSBzYW1lIGxheW91dCBhcyBkdWtfaGJ1ZmZlcl9keW5hbWlj LgorICovCitzdHJ1Y3QgZHVrX2hidWZmZXJfZXh0ZXJuYWwgeworCWR1a19oZWFwaGRyIGhkcjsK KworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZMRU4xNikKKwkvKiBTdG9yZWQgaW4gZHVrX2hlYXBo ZHIgdW51c2VkIGZsYWdzLiAqLworI2Vsc2UKKwlkdWtfc2l6ZV90IHNpemU7CisjZW5kaWYKKwor CS8qIENhbm5vdCBiZSBjb21wcmVzc2VkIGFzIGEgaGVhcCBwb2ludGVyIGJlY2F1c2UgbWF5IHBv aW50IHRvCisJICogYW4gYXJiaXRyYXJ5IGFkZHJlc3MuCisJICovCisJdm9pZCAqY3Vycl9hbGxv YzsgIC8qIG1heSBiZSBOVUxMIGlmIGFsbG9jX3NpemUgPT0gMCAqLworfTsKKworLyoKKyAqICBQ cm90b3R5cGVzCisgKi8KKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hidWZmZXIgKmR1a19oYnVm ZmVyX2FsbG9jKGR1a19oZWFwICpoZWFwLCBkdWtfc2l6ZV90IHNpemUsIGR1a19zbWFsbF91aW50 X3QgZmxhZ3MsIHZvaWQgKipvdXRfYnVmZGF0YSk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkICpk dWtfaGJ1ZmZlcl9nZXRfZHluYWxsb2NfcHRyKGR1a19oZWFwICpoZWFwLCB2b2lkICp1ZCk7ICAv KiBpbmRpcmVjdCBhbGxvY3MgKi8KKworLyogZHluYW1pYyBidWZmZXIgb3BzICovCitEVUtfSU5U RVJOQUxfREVDTCB2b2lkIGR1a19oYnVmZmVyX3Jlc2l6ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtf aGJ1ZmZlcl9keW5hbWljICpidWYsIGR1a19zaXplX3QgbmV3X3NpemUpOworRFVLX0lOVEVSTkFM X0RFQ0wgdm9pZCBkdWtfaGJ1ZmZlcl9yZXNldChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGJ1ZmZl cl9keW5hbWljICpidWYpOworCisjZW5kaWYgIC8qIERVS19IQlVGRkVSX0hfSU5DTFVERUQgKi8K Ky8qICNpbmNsdWRlIGR1a19ocHJveHkuaCAqLworLyoKKyAqICBQcm94eSBvYmplY3QgcmVwcmVz ZW50YXRpb24uCisgKi8KKworI2lmICFkZWZpbmVkKERVS19IUFJPWFlfSF9JTkNMVURFRCkKKyNk ZWZpbmUgRFVLX0hQUk9YWV9IX0lOQ0xVREVECisKKyNkZWZpbmUgRFVLX0FTU0VSVF9IUFJPWFlf VkFMSUQoaCkgZG8geyBcCisJCURVS19BU1NFUlQoKGgpICE9IE5VTEwpOyBcCisJCURVS19BU1NF UlQoKGgpLT50YXJnZXQgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVCgoaCktPmhhbmRsZXIgIT0g TlVMTCk7IFwKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfRVhPVElDX1BST1hZT0JKKChk dWtfaG9iamVjdCAqKSAoaCkpKTsgXAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBkdWtfaHByb3h5 IHsKKwkvKiBTaGFyZWQgb2JqZWN0IHBhcnQuICovCisJZHVrX2hvYmplY3Qgb2JqOworCisJLyog UHJveHkgdGFyZ2V0IG9iamVjdC4gKi8KKwlkdWtfaG9iamVjdCAqdGFyZ2V0OworCisJLyogUHJv eHkgaGFuZGxlcnMgKHRyYXBzKS4gKi8KKwlkdWtfaG9iamVjdCAqaGFuZGxlcjsKK307CisKKyNl bmRpZiAgLyogRFVLX0hQUk9YWV9IX0lOQ0xVREVEICovCisvKiAjaW5jbHVkZSBkdWtfaGVhcC5o ICovCisvKgorICogIEhlYXAgc3RydWN0dXJlLgorICoKKyAqICBIZWFwIGNvbnRhaW5zIGFsbG9j YXRlZCBoZWFwIG9iamVjdHMsIGludGVybmVkIHN0cmluZ3MsIGFuZCBidWlsdC1pbgorICogIHN0 cmluZ3MgZm9yIG9uZSBvciBtb3JlIHRocmVhZHMuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19I RUFQX0hfSU5DTFVERUQpCisjZGVmaW5lIERVS19IRUFQX0hfSU5DTFVERUQKKworLyogYWxsb2Mg ZnVuY3Rpb24gdHlwZWRlZnMgaW4gZHVrdGFwZS5oICovCisKKy8qCisgKiAgSGVhcCBmbGFncwor ICovCisKKyNkZWZpbmUgRFVLX0hFQVBfRkxBR19NQVJLQU5EU1dFRVBfUkVDTElNSVRfUkVBQ0hF RCAgICAgICAgICAgICgxVSA8PCAwKSAgLyogbWFyay1hbmQtc3dlZXAgbWFya2luZyByZWFjaGVk IGEgcmVjdXJzaW9uIGxpbWl0IGFuZCBtdXN0IHVzZSBtdWx0aS1wYXNzIG1hcmtpbmcgKi8KKyNk ZWZpbmUgRFVLX0hFQVBfRkxBR19JTlRFUlJVUFRfUlVOTklORyAgICAgICAgICAgICAgICAgICAg ICAgICgxVSA8PCAxKSAgLyogZXhlY3V0b3IgaW50ZXJydXB0IHJ1bm5pbmcgKHVzZWQgdG8gYXZv aWQgbmVzdGVkIGludGVycnVwdHMpICovCisjZGVmaW5lIERVS19IRUFQX0ZMQUdfRklOQUxJWkVS X05PUkVTQ1VFICAgICAgICAgICAgICAgICAgICAgICAoMVUgPDwgMikgIC8qIGhlYXAgZGVzdHJ1 Y3Rpb24gb25nb2luZywgZmluYWxpemVyIHJlc2N1ZSBubyBsb25nZXIgcG9zc2libGUgKi8KKyNk ZWZpbmUgRFVLX0hFQVBfRkxBR19ERUJVR0dFUl9QQVVTRUQgICAgICAgICAgICAgICAgICAgICAg ICAgICgxVSA8PCAzKSAgLyogZGVidWdnZXIgaXMgcGF1c2VkOiB0YWxrIHdpdGggZGVidWcgY2xp ZW50IHVudGlsIHN0ZXAvcmVzdW1lICovCisKKyNkZWZpbmUgRFVLX19IRUFQX0hBU19GTEFHUyho ZWFwLGJpdHMpICAgICAgICAgICAgICAgKChoZWFwKS0+ZmxhZ3MgJiAoYml0cykpCisjZGVmaW5l IERVS19fSEVBUF9TRVRfRkxBR1MoaGVhcCxiaXRzKSAgZG8geyBcCisJCShoZWFwKS0+ZmxhZ3Mg fD0gKGJpdHMpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19IRUFQX0NMRUFSX0ZMQUdT KGhlYXAsYml0cykgIGRvIHsgXAorCQkoaGVhcCktPmZsYWdzICY9IH4oYml0cyk7IFwKKwl9IHdo aWxlICgwKQorCisjZGVmaW5lIERVS19IRUFQX0hBU19NQVJLQU5EU1dFRVBfUkVDTElNSVRfUkVB Q0hFRChoZWFwKSAgIERVS19fSEVBUF9IQVNfRkxBR1MoKGhlYXApLCBEVUtfSEVBUF9GTEFHX01B UktBTkRTV0VFUF9SRUNMSU1JVF9SRUFDSEVEKQorI2RlZmluZSBEVUtfSEVBUF9IQVNfSU5URVJS VVBUX1JVTk5JTkcoaGVhcCkgICAgICAgICAgICAgICBEVUtfX0hFQVBfSEFTX0ZMQUdTKChoZWFw KSwgRFVLX0hFQVBfRkxBR19JTlRFUlJVUFRfUlVOTklORykKKyNkZWZpbmUgRFVLX0hFQVBfSEFT X0ZJTkFMSVpFUl9OT1JFU0NVRShoZWFwKSAgICAgICAgICAgICAgRFVLX19IRUFQX0hBU19GTEFH UygoaGVhcCksIERVS19IRUFQX0ZMQUdfRklOQUxJWkVSX05PUkVTQ1VFKQorI2RlZmluZSBEVUtf SEVBUF9IQVNfREVCVUdHRVJfUEFVU0VEKGhlYXApICAgICAgICAgICAgICAgICBEVUtfX0hFQVBf SEFTX0ZMQUdTKChoZWFwKSwgRFVLX0hFQVBfRkxBR19ERUJVR0dFUl9QQVVTRUQpCisKKyNkZWZp bmUgRFVLX0hFQVBfU0VUX01BUktBTkRTV0VFUF9SRUNMSU1JVF9SRUFDSEVEKGhlYXApICAgRFVL X19IRUFQX1NFVF9GTEFHUygoaGVhcCksIERVS19IRUFQX0ZMQUdfTUFSS0FORFNXRUVQX1JFQ0xJ TUlUX1JFQUNIRUQpCisjZGVmaW5lIERVS19IRUFQX1NFVF9JTlRFUlJVUFRfUlVOTklORyhoZWFw KSAgICAgICAgICAgICAgIERVS19fSEVBUF9TRVRfRkxBR1MoKGhlYXApLCBEVUtfSEVBUF9GTEFH X0lOVEVSUlVQVF9SVU5OSU5HKQorI2RlZmluZSBEVUtfSEVBUF9TRVRfRklOQUxJWkVSX05PUkVT Q1VFKGhlYXApICAgICAgICAgICAgICBEVUtfX0hFQVBfU0VUX0ZMQUdTKChoZWFwKSwgRFVLX0hF QVBfRkxBR19GSU5BTElaRVJfTk9SRVNDVUUpCisjZGVmaW5lIERVS19IRUFQX1NFVF9ERUJVR0dF Ul9QQVVTRUQoaGVhcCkgICAgICAgICAgICAgICAgIERVS19fSEVBUF9TRVRfRkxBR1MoKGhlYXAp LCBEVUtfSEVBUF9GTEFHX0RFQlVHR0VSX1BBVVNFRCkKKworI2RlZmluZSBEVUtfSEVBUF9DTEVB Ul9NQVJLQU5EU1dFRVBfUkVDTElNSVRfUkVBQ0hFRChoZWFwKSBEVUtfX0hFQVBfQ0xFQVJfRkxB R1MoKGhlYXApLCBEVUtfSEVBUF9GTEFHX01BUktBTkRTV0VFUF9SRUNMSU1JVF9SRUFDSEVEKQor I2RlZmluZSBEVUtfSEVBUF9DTEVBUl9JTlRFUlJVUFRfUlVOTklORyhoZWFwKSAgICAgICAgICAg ICBEVUtfX0hFQVBfQ0xFQVJfRkxBR1MoKGhlYXApLCBEVUtfSEVBUF9GTEFHX0lOVEVSUlVQVF9S VU5OSU5HKQorI2RlZmluZSBEVUtfSEVBUF9DTEVBUl9GSU5BTElaRVJfTk9SRVNDVUUoaGVhcCkg ICAgICAgICAgICBEVUtfX0hFQVBfQ0xFQVJfRkxBR1MoKGhlYXApLCBEVUtfSEVBUF9GTEFHX0ZJ TkFMSVpFUl9OT1JFU0NVRSkKKyNkZWZpbmUgRFVLX0hFQVBfQ0xFQVJfREVCVUdHRVJfUEFVU0VE KGhlYXApICAgICAgICAgICAgICAgRFVLX19IRUFQX0NMRUFSX0ZMQUdTKChoZWFwKSwgRFVLX0hF QVBfRkxBR19ERUJVR0dFUl9QQVVTRUQpCisKKy8qCisgKiAgTG9uZ2ptcCB0eXBlcywgYWxzbyBk b3VibGUgYXMgaWRlbnRpZnlpbmcgY29udGludWF0aW9uIHR5cGUgZm9yIGEgcmV0aHJvdyAoaW4g J2ZpbmFsbHknKQorICovCisKKyNkZWZpbmUgRFVLX0xKX1RZUEVfVU5LTk9XTiAgICAgIDAgICAg LyogdW51c2VkICovCisjZGVmaW5lIERVS19MSl9UWVBFX1RIUk9XICAgICAgICAxICAgIC8qIHZh bHVlMSAtPiBlcnJvciBvYmplY3QgKi8KKyNkZWZpbmUgRFVLX0xKX1RZUEVfWUlFTEQgICAgICAg IDIgICAgLyogdmFsdWUxIC0+IHlpZWxkIHZhbHVlLCBpc2Vycm9yIC0+IGVycm9yIC8gbm9ybWFs ICovCisjZGVmaW5lIERVS19MSl9UWVBFX1JFU1VNRSAgICAgICAzICAgIC8qIHZhbHVlMSAtPiBy ZXN1bWUgdmFsdWUsIHZhbHVlMiAtPiByZXN1bWVlIHRocmVhZCwgaXNlcnJvciAtPiBlcnJvci9u b3JtYWwgKi8KKyNkZWZpbmUgRFVLX0xKX1RZUEVfQlJFQUsgICAgICAgIDQgICAgLyogdmFsdWUx IC0+IGxhYmVsIG51bWJlciwgcHNldWRvLXR5cGUgdG8gaW5kaWNhdGUgYSBicmVhayBjb250aW51 YXRpb24gKGZvciBFTkRGSU4pICovCisjZGVmaW5lIERVS19MSl9UWVBFX0NPTlRJTlVFICAgICA1 ICAgIC8qIHZhbHVlMSAtPiBsYWJlbCBudW1iZXIsIHBzZXVkby10eXBlIHRvIGluZGljYXRlIGEg Y29udGludWUgY29udGludWF0aW9uIChmb3IgRU5ERklOKSAqLworI2RlZmluZSBEVUtfTEpfVFlQ RV9SRVRVUk4gICAgICAgNiAgICAvKiB2YWx1ZTEgLT4gcmV0dXJuIHZhbHVlLCBwc2V1ZG8tdHlw ZSB0byBpbmRpY2F0ZSBhIHJldHVybiBjb250aW51YXRpb24gKGZvciBFTkRGSU4pICovCisjZGVm aW5lIERVS19MSl9UWVBFX05PUk1BTCAgICAgICA3ICAgIC8qIG5vIHZhbHVlLCBwc2V1ZG8tdHlw ZSB0byBpbmRpY2F0ZSBhIG5vcm1hbCBjb250aW51YXRpb24gKGZvciBFTkRGSU4pICovCisKKy8q CisgKiAgTWFyay1hbmQtc3dlZXAgZmxhZ3MKKyAqCisgKiAgVGhlc2UgYXJlIHNlcGFyYXRlIGZy b20gaGVhcCBsZXZlbCBmbGFncyBub3cgYnV0IGNvdWxkIGJlIG1lcmdlZC4KKyAqICBUaGUgaGVh cCBzdHJ1Y3R1cmUgb25seSBjb250YWlucyBhICdiYXNlIG1hcmstYW5kLXN3ZWVwIGZsYWdzJwor ICogIGZpZWxkIGFuZCB0aGUgR0MgY2FsbGVyIGNhbiBpbXBvc2UgZnVydGhlciBmbGFncy4KKyAq LworCisvKiBFbWVyZ2VuY3kgbWFyay1hbmQtc3dlZXA6IHRyeSBleHRyYSBoYXJkLCBldmVuIGF0 IHRoZSBjb3N0IG9mCisgKiBwZXJmb3JtYW5jZS4KKyAqLworI2RlZmluZSBEVUtfTVNfRkxBR19F TUVSR0VOQ1kgICAgICAgICAgICAgICAgKDFVIDw8IDApCisKKy8qIFZvbHVudGFyeSBtYXJrLWFu ZC1zd2VlcDogdHJpZ2dlcmVkIHBlcmlvZGljYWxseS4gKi8KKyNkZWZpbmUgRFVLX01TX0ZMQUdf Vk9MVU5UQVJZICAgICAgICAgICAgICAgICgxVSA8PCAxKQorCisvKiBQb3N0cG9uZSByZXNjdWUg ZGVjaXNpb25zIGZvciByZWFjaGFibGUgb2JqZWN0cyB3aXRoIEZJTkFMSVpFRCBzZXQuCisgKiBV c2VkIGR1cmluZyBmaW5hbGl6ZV9saXN0IHByb2Nlc3NpbmcgdG8gYXZvaWQgaW5jb3JyZWN0IHJl c2N1ZQorICogZGVjaXNpb25zIGR1ZSB0byBmaW5hbGl6ZV9saXN0IGJlaW5nIGEgcmVhY2hhYmls aXR5IHJvb3QuCisgKi8KKyNkZWZpbmUgRFVLX01TX0ZMQUdfUE9TVFBPTkVfUkVTQ1VFICAgICAg ICAgICgxVSA8PCAyKQorCisvKiBEb24ndCBjb21wYWN0IG9iamVjdHM7IG5lZWRlZCBkdXJpbmcg b2JqZWN0IHByb3BlcnR5IHRhYmxlIHJlc2l6ZQorICogdG8gcHJldmVudCBhIHJlY3Vyc2l2ZSBy ZXNpemUuICBJdCB3b3VsZCBzdWZmaWNlIHRvIHByb3RlY3Qgb25seSB0aGUKKyAqIGN1cnJlbnQg b2JqZWN0IGJlaW5nIHJlc2l6ZWQsIGJ1dCB0aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisg Ki8KKyNkZWZpbmUgRFVLX01TX0ZMQUdfTk9fT0JKRUNUX0NPTVBBQ1RJT04gICAgICgxVSA8PCAz KQorCisvKgorICogIFRocmVhZCBzd2l0Y2hpbmcKKyAqCisgKiAgVG8gc3dpdGNoIGhlYXAtPmN1 cnJfdGhyZWFkLCB1c2UgdGhlIG1hY3JvIGJlbG93IHNvIHRoYXQgaW50ZXJydXB0IGNvdW50ZXJz CisgKiAgZ2V0IHVwZGF0ZWQgY29ycmVjdGx5LiAgVGhlIG1hY3JvIGFsbG93cyBhIE5VTEwgdGFy Z2V0IHRocmVhZCBiZWNhdXNlIHRoYXQKKyAqICBoYXBwZW5zIGUuZy4gaW4gY2FsbCBoYW5kbGlu Zy4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVSUlVQVF9DT1VOVEVSKQorI2RlZmlu ZSBEVUtfSEVBUF9TV0lUQ0hfVEhSRUFEKGhlYXAsbmV3dGhyKSAgZHVrX2hlYXBfc3dpdGNoX3Ro cmVhZCgoaGVhcCksIChuZXd0aHIpKQorI2Vsc2UKKyNkZWZpbmUgRFVLX0hFQVBfU1dJVENIX1RI UkVBRChoZWFwLG5ld3RocikgIGRvIHsgXAorCQkoaGVhcCktPmN1cnJfdGhyZWFkID0gKG5ld3Ro cik7IFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiAgU3RhdHMKKyAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorI2RlZmluZSBEVUtfU1RBVFNfSU5DKGhlYXAsZmllbGRu YW1lKSBkbyB7IFwKKwkJKGhlYXApLT5maWVsZG5hbWUgKz0gMTsgXAorCX0gd2hpbGUgKDApCisj ZWxzZQorI2RlZmluZSBEVUtfU1RBVFNfSU5DKGhlYXAsZmllbGRuYW1lKSBkbyB7fSB3aGlsZSAo MCkKKyNlbmRpZgorCisvKgorICogIE90aGVyIGhlYXAgcmVsYXRlZCBkZWZpbmVzCisgKi8KKwor LyogTWFyay1hbmQtc3dlZXAgaW50ZXJ2YWwgaXMgcmVsYXRpdmUgdG8gY29tYmluZWQgY291bnQg b2Ygb2JqZWN0cyBhbmQKKyAqIHN0cmluZ3Mga2VwdCBpbiB0aGUgaGVhcCBkdXJpbmcgdGhlIGxh dGVzdCBtYXJrLWFuZC1zd2VlcCBwYXNzLgorICogRml4ZWQgcG9pbnQgLjggbXVsdGlwbGllciBh bmQgLjAgYWRkZXIuICBUcmlnZ2VyIGNvdW50IChpbnRlcnZhbCkgaXMKKyAqIGRlY3JlYXNlZCBi eSBlYWNoIChyZSlhbGxvY2F0aW9uIGF0dGVtcHQgKHJlZ2FyZGxlc3Mgb2Ygc2l6ZSksIGFuZCBl YWNoCisgKiByZWZ6ZXJvIHByb2Nlc3NlZCBvYmplY3QuCisgKgorICogJ1NLSVAnIGluZGljYXRl cyBob3cgbWFueSAocmUpYWxsb2NhdGlvbnMgdG8gd2FpdCB1bnRpbCBhIHJldHJ5IGlmCisgKiBH QyBpcyBza2lwcGVkIGJlY2F1c2UgdGhlcmUgaXMgbm8gdGhyZWFkIGRvIGl0IHdpdGggeWV0ICho YXBwZW5zCisgKiBvbmx5IGR1cmluZyBpbml0IHBoYXNlcykuCisgKi8KKyNpZiBkZWZpbmVkKERV S19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorI2RlZmluZSBEVUtfSEVBUF9NQVJLX0FORF9TV0VF UF9UUklHR0VSX01VTFQgICAgICAgICAgICAgIDEyODAwTCAgLyogNTB4IGhlYXAgc2l6ZSAqLwor I2RlZmluZSBEVUtfSEVBUF9NQVJLX0FORF9TV0VFUF9UUklHR0VSX0FERCAgICAgICAgICAgICAg IDEwMjRMCisjZGVmaW5lIERVS19IRUFQX01BUktfQU5EX1NXRUVQX1RSSUdHRVJfU0tJUCAgICAg ICAgICAgICAgMjU2TAorI2Vsc2UKKyNkZWZpbmUgRFVLX0hFQVBfTUFSS19BTkRfU1dFRVBfVFJJ R0dFUl9NVUxUICAgICAgICAgICAgICAyNTZMICAgIC8qIDF4IGhlYXAgc2l6ZSAqLworI2RlZmlu ZSBEVUtfSEVBUF9NQVJLX0FORF9TV0VFUF9UUklHR0VSX0FERCAgICAgICAgICAgICAgIDEwMjRM CisjZGVmaW5lIERVS19IRUFQX01BUktfQU5EX1NXRUVQX1RSSUdHRVJfU0tJUCAgICAgICAgICAg ICAgMjU2TAorI2VuZGlmCisKKy8qIEdDIHRvcnR1cmUuICovCisjaWYgZGVmaW5lZChEVUtfVVNF X0dDX1RPUlRVUkUpCisjZGVmaW5lIERVS19HQ19UT1JUVVJFKGhlYXApIGRvIHsgZHVrX2hlYXBf bWFya19hbmRfc3dlZXAoKGhlYXApLCAwKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERV S19HQ19UT1JUVVJFKGhlYXApIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBTdHJpbmdj YWNoZSBpcyB1c2VkIGZvciBzcGVlZGluZyB1cCBjaGFyLW9mZnNldC10by1ieXRlLW9mZnNldAor ICogdHJhbnNsYXRpb25zIGZvciBub24tQVNDSUkgc3RyaW5ncy4KKyAqLworI2RlZmluZSBEVUtf SEVBUF9TVFJDQUNIRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUg RFVLX0hFQVBfU1RSSU5HQ0FDSEVfTk9DQUNIRV9MSU1JVCAgICAgICAgICAgICAgICAxNiAgLyog c3RyaW5ncyB1cCB0byB0aGUgdGhpcyBsZW5ndGggYXJlIG5vdCBjYWNoZWQgKi8KKworLyogU29t ZSBsaXN0IG1hbmFnZW1lbnQgbWFjcm9zLiAqLworI2RlZmluZSBEVUtfSEVBUF9JTlNFUlRfSU5U T19IRUFQX0FMTE9DQVRFRChoZWFwLGhkcikgICAgIGR1a19oZWFwX2luc2VydF9pbnRvX2hlYXBf YWxsb2NhdGVkKChoZWFwKSwgKGhkcikpCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9D T1VOVElORykKKyNkZWZpbmUgRFVLX0hFQVBfUkVNT1ZFX0ZST01fSEVBUF9BTExPQ0FURUQoaGVh cCxoZHIpICAgICBkdWtfaGVhcF9yZW1vdmVfZnJvbV9oZWFwX2FsbG9jYXRlZCgoaGVhcCksICho ZHIpKQorI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorI2Rl ZmluZSBEVUtfSEVBUF9JTlNFUlRfSU5UT19GSU5BTElaRV9MSVNUKGhlYXAsaGRyKSAgICAgIGR1 a19oZWFwX2luc2VydF9pbnRvX2ZpbmFsaXplX2xpc3QoKGhlYXApLCAoaGRyKSkKKyNkZWZpbmUg RFVLX0hFQVBfUkVNT1ZFX0ZST01fRklOQUxJWkVfTElTVChoZWFwLGhkcikgICAgICBkdWtfaGVh cF9yZW1vdmVfZnJvbV9maW5hbGl6ZV9saXN0KChoZWFwKSwgKGhkcikpCisjZW5kaWYKKworLyoK KyAqICBCdWlsdC1pbiBzdHJpbmdzCisgKi8KKworLyogaGVhcCBzdHJpbmcgaW5kaWNlcyBhcmUg YXV0b2dlbmVyYXRlZCBpbiBkdWtfc3RyaW5ncy5oICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1JP TV9TVFJJTkdTKQorI2RlZmluZSBEVUtfSEVBUF9HRVRfU1RSSU5HKGhlYXAsaWR4KSBcCisJKChk dWtfaHN0cmluZyAqKSBEVUtfTE9TRV9DT05TVChkdWtfcm9tX3N0cmluZ3Nfc3RyaWR4WyhpZHgp XSkpCisjZWxzZSAgLyogRFVLX1VTRV9ST01fU1RSSU5HUyAqLworI2lmIGRlZmluZWQoRFVLX1VT RV9IRUFQUFRSMTYpCisjZGVmaW5lIERVS19IRUFQX0dFVF9TVFJJTkcoaGVhcCxpZHgpIFwKKwko KGR1a19oc3RyaW5nICopIERVS19VU0VfSEVBUFBUUl9ERUMxNigoaGVhcCktPmhlYXBfdWRhdGEs IChoZWFwKS0+c3RyczE2WyhpZHgpXSkpCisjZWxzZQorI2RlZmluZSBEVUtfSEVBUF9HRVRfU1RS SU5HKGhlYXAsaWR4KSBcCisJKChoZWFwKS0+c3Ryc1soaWR4KV0pCisjZW5kaWYKKyNlbmRpZiAg LyogRFVLX1VTRV9ST01fU1RSSU5HUyAqLworCisvKgorICogIFJhdyBtZW1vcnkgY2FsbHM6IHJl bGF0aXZlIHRvIGhlYXAsIGJ1dCBubyBHQyBpbnRlcmFjdGlvbgorICovCisKKyNkZWZpbmUgRFVL X0FMTE9DX1JBVyhoZWFwLHNpemUpIFwKKwkoKGhlYXApLT5hbGxvY19mdW5jKChoZWFwKS0+aGVh cF91ZGF0YSwgKHNpemUpKSkKKworI2RlZmluZSBEVUtfUkVBTExPQ19SQVcoaGVhcCxwdHIsbmV3 c2l6ZSkgXAorCSgoaGVhcCktPnJlYWxsb2NfZnVuYygoaGVhcCktPmhlYXBfdWRhdGEsICh2b2lk ICopIChwdHIpLCAobmV3c2l6ZSkpKQorCisjZGVmaW5lIERVS19GUkVFX1JBVyhoZWFwLHB0cikg XAorCSgoaGVhcCktPmZyZWVfZnVuYygoaGVhcCktPmhlYXBfdWRhdGEsICh2b2lkICopIChwdHIp KSkKKworLyoKKyAqICBNZW1vcnkgY2FsbHM6IHJlbGF0aXZlIHRvIGhlYXAsIEdDIGludGVyYWN0 aW9uLCBidXQgbm8gZXJyb3IgdGhyb3dpbmcuCisgKgorICogIFhYWDogQ3VycmVudGx5IGEgbWFy ay1hbmQtc3dlZXAgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBhbGxvY2F0aW9uIHdpbGwgcnVuCisgKiAg dXNpbmcgdGhlIGhlYXAtPmhlYXBfdGhyZWFkLiAgVGhpcyB0aHJlYWQgaXMgYWxzbyB1c2VkIGZv ciBydW5uaW5nCisgKiAgbWFyay1hbmQtc3dlZXAgZmluYWxpemF0aW9uOyB0aGlzIGlzIG5vdCBp ZGVhbCBiZWNhdXNlIGl0IGJyZWFrcyB0aGUKKyAqICBpc29sYXRpb24gYmV0d2VlbiBtdWx0aXBs ZSBnbG9iYWwgZW52aXJvbm1lbnRzLgorICoKKyAqICBOb3RlczoKKyAqCisgKiAgICAtIERVS19G UkVFKCkgaXMgcmVxdWlyZWQgdG8gaWdub3JlIE5VTEwgYW5kIGFueSBvdGhlciBwb3NzaWJsZSBy ZXR1cm4KKyAqICAgICAgdmFsdWUgb2YgYSB6ZXJvLXNpemVkIGFsbG9jL3JlYWxsb2MgKHNhbWUg YXMgQU5TSSBDIGZyZWUoKSkuCisgKgorICogICAgLSBUaGVyZSBpcyBubyBEVUtfUkVBTExPQ19a RVJPRUQgYmVjYXVzZSB3ZSBkb24ndCBhc3N1bWUgdG8ga25vdyB0aGUKKyAqICAgICAgb2xkIHNp emUuICBDYWxsZXIgbXVzdCB6ZXJvIHRoZSByZWFsbG9jYXRlZCBtZW1vcnkuCisgKgorICogICAg LSBEVUtfUkVBTExPQ19JTkRJUkVDVCgpIG11c3QgYmUgdXNlZCB3aGVuIGEgbWFyay1hbmQtc3dl ZXAgdHJpZ2dlcmVkCisgKiAgICAgIGJ5IGFuIGFsbG9jYXRpb24gZmFpbHVyZSBtaWdodCBpbnZh bGlkYXRlIHRoZSBvcmlnaW5hbCAncHRyJywgdGh1cworICogICAgICBjYXVzaW5nIGEgcmVhbGxv YyByZXRyeSB0byB1c2UgYW4gaW52YWxpZCBwb2ludGVyLiAgRXhhbXBsZTogd2UncmUKKyAqICAg ICAgcmVhbGxvY2F0aW5nIHRoZSB2YWx1ZSBzdGFjayBhbmQgYSBmaW5hbGl6ZXIgcmVzaXplcyB0 aGUgc2FtZSB2YWx1ZQorICogICAgICBzdGFjayBkdXJpbmcgbWFyay1hbmQtc3dlZXAuICBUaGUg aW5kaXJlY3QgdmFyaWFudCByZXF1ZXN0cyBmb3IgdGhlCisgKiAgICAgIGN1cnJlbnQgbG9jYXRp b24gb2YgdGhlIHBvaW50ZXIgYmVpbmcgcmVhbGxvY2F0ZWQgdXNpbmcgYSBjYWxsYmFjaworICog ICAgICByaWdodCBiZWZvcmUgZXZlcnkgcmVhbGxvYyBhdHRlbXB0OyB0aGlzIGNpcmN1aXRvdXMg YXBwcm9hY2ggaXMgdXNlZAorICogICAgICB0byBhdm9pZCBzdHJpY3QgYWxpYXNpbmcgaXNzdWVz IGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgaW5kaXJlY3QKKyAqICAgICAgcG9pbnRlciAodm9p ZCAqKikgYXBwcm9hY2guICBOb3RlOiB0aGUgcG9pbnRlciBpbiB0aGUgc3RvcmFnZQorICogICAg ICBsb2NhdGlvbiBpcyByZWFkIGJ1dCBpcyBOT1QgdXBkYXRlZDsgdGhlIGNhbGxlciBtdXN0IGRv IHRoYXQuCisgKi8KKworLyogY2FsbGJhY2sgZm9yIGluZGlyZWN0IHJlYWxsb2NzLCByZXF1ZXN0 IGZvciBjdXJyZW50IHBvaW50ZXIgKi8KK3R5cGVkZWYgdm9pZCAqKCpkdWtfbWVtX2dldHB0ciko ZHVrX2hlYXAgKmhlYXAsIHZvaWQgKnVkKTsKKworI2RlZmluZSBEVUtfQUxMT0MoaGVhcCxzaXpl KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaGVhcF9tZW1fYWxsb2MoKGhlYXApLCAo c2l6ZSkpCisjZGVmaW5lIERVS19BTExPQ19aRVJPRUQoaGVhcCxzaXplKSAgICAgICAgICAgICAg ICAgICAgIGR1a19oZWFwX21lbV9hbGxvY196ZXJvZWQoKGhlYXApLCAoc2l6ZSkpCisjZGVmaW5l IERVS19SRUFMTE9DKGhlYXAscHRyLG5ld3NpemUpICAgICAgICAgICAgICAgICAgIGR1a19oZWFw X21lbV9yZWFsbG9jKChoZWFwKSwgKHB0ciksIChuZXdzaXplKSkKKyNkZWZpbmUgRFVLX1JFQUxM T0NfSU5ESVJFQ1QoaGVhcCxjYix1ZCxuZXdzaXplKSAgICAgICAgZHVrX2hlYXBfbWVtX3JlYWxs b2NfaW5kaXJlY3QoKGhlYXApLCAoY2IpLCAodWQpLCAobmV3c2l6ZSkpCisjZGVmaW5lIERVS19G UkVFKGhlYXAscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19oZWFwX21lbV9m cmVlKChoZWFwKSwgKHB0cikpCisKKy8qCisgKiAgQ2hlY2tlZCBhbGxvY2F0aW9uLCByZWxhdGl2 ZSB0byBhIHRocmVhZAorICoKKyAqICBEVUtfRlJFRV9DSEVDS0VEKCkgZG9lc24ndCBhY3R1YWxs eSB0aHJvdywgYnV0IGFjY2VwdHMgYSAndGhyJyBhcmd1bWVudAorICogIGZvciBjb252ZW5pZW5j ZS4KKyAqLworCisjZGVmaW5lIERVS19BTExPQ19DSEVDS0VEKHRocixzaXplKSAgICAgICAgICAg ICAgICAgICAgIGR1a19oZWFwX21lbV9hbGxvY19jaGVja2VkKCh0aHIpLCAoc2l6ZSkpCisjZGVm aW5lIERVS19BTExPQ19DSEVDS0VEX1pFUk9FRCh0aHIsc2l6ZSkgICAgICAgICAgICAgIGR1a19o ZWFwX21lbV9hbGxvY19jaGVja2VkX3plcm9lZCgodGhyKSwgKHNpemUpKQorI2RlZmluZSBEVUtf RlJFRV9DSEVDS0VEKHRocixwdHIpICAgICAgICAgICAgICAgICAgICAgICBkdWtfaGVhcF9tZW1f ZnJlZSgodGhyKS0+aGVhcCwgKHB0cikpCisKKy8qCisgKiAgTWVtb3J5IGNvbnN0YW50cworICov CisKKyNkZWZpbmUgRFVLX0hFQVBfQUxMT0NfRkFJTF9NQVJLQU5EU1dFRVBfTElNSVQgICAgICAg ICAgIDEwICAvKiBSZXRyeSBhbGxvY2F0aW9uIGFmdGVyIG1hcmstYW5kLXN3ZWVwIGZvciB0aGlz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogbWFueSB0aW1lcy4gIEEgc2luZ2xlIG1hcmstYW5kLXN3ZWVwIHJvdW5kIGlzCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogbm90IGd1YXJhbnRlZWQgdG8gZnJlZSBhbGwgdW5yZWZlcmVuY2VkIG1lbW9yeQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIGJlY2F1c2Ugb2YgZmluYWxpemF0aW9uIChpbiBmYWN0LCBBTlkgbnVtYmVyIG9mCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogcm91bmRzIGlzIHN0cmljdGx5IG5vdCBlbm91Z2gpLgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERV S19IRUFQX0FMTE9DX0ZBSUxfTUFSS0FORFNXRUVQX0VNRVJHRU5DWV9MSU1JVCAgMyAgLyogU3Rh cnRpbmcgZnJvbSB0aGlzIHJvdW5kLCB1c2UgZW1lcmdlbmN5IG1vZGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmb3IgbWFy ay1hbmQtc3dlZXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisKKy8qCisgKiAgRGVidWdnZXIgc3VwcG9ydAorICovCisK Ky8qIE1heGltdW0gbnVtYmVyIG9mIGJyZWFrcG9pbnRzLiAgT25seSBicmVha3BvaW50cyB0aGF0 IGFyZSBzZXQgYXJlCisgKiBjb25zdWx0ZWQgc28gaW5jcmVhc2luZyB0aGlzIGhhcyBubyBwZXJm b3JtYW5jZSBpbXBhY3QuCisgKi8KKyNkZWZpbmUgRFVLX0hFQVBfTUFYX0JSRUFLUE9JTlRTICAg ICAgICAgIDE2CisKKy8qIE9wY29kZSBpbnRlcnZhbCBmb3IgYSBEYXRlLWJhc2VkIHN0YXR1cy9w ZWVrIHJhdGUgbGltaXQgY2hlY2suICBPbmx5CisgKiByZWxldmFudCB3aGVuIGRlYnVnZ2VyIGlz IGF0dGFjaGVkLiAgUmVxdWVzdGluZyBhIHRpbWVzdGFtcCBtYXkgYmUgYQorICogc2xvdyBvcGVy YXRpb24gb24gc29tZSBwbGF0Zm9ybXMgc28gdGhpcyBzaG91bGRuJ3QgYmUgdG9vIGxvdy4gIE9u IHRoZQorICogb3RoZXIgaGFuZCBhIGhpZ2ggdmFsdWUgbWFrZXMgRHVrdGFwZSByZWFjdCB0byBh IHBhdXNlIHJlcXVlc3Qgc2xvd2x5LgorICovCisjZGVmaW5lIERVS19IRUFQX0RCR19SQVRFTElN SVRfT1BDT0RFUyAgICA0MDAwCisKKy8qIE1pbGxpc2Vjb25kcyBiZXR3ZWVuIHN0YXR1cyBub3Rp ZnkgYW5kIHRyYW5zcG9ydCBwZWVrcy4gKi8KKyNkZWZpbmUgRFVLX0hFQVBfREJHX1JBVEVMSU1J VF9NSUxMSVNFQ1MgIDIwMAorCisvKiBEZWJ1Z2dlciBwYXVzZSBmbGFncy4gKi8KKyNkZWZpbmUg RFVLX1BBVVNFX0ZMQUdfT05FX09QQ09ERSAgICAgICAgKDFVIDw8IDApICAgLyogcGF1c2Ugd2hl biBhIHNpbmdsZSBvcGNvZGUgaGFzIGJlZW4gZXhlY3V0ZWQgKi8KKyNkZWZpbmUgRFVLX1BBVVNF X0ZMQUdfT05FX09QQ09ERV9BQ1RJVkUgKDFVIDw8IDEpICAgLyogb25lIG9wY29kZSBwYXVzZSBh Y3R1YWxseSBhY3RpdmU7IGFydGlmYWN0IG9mIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gKi8KKyNk ZWZpbmUgRFVLX1BBVVNFX0ZMQUdfTElORV9DSEFOR0UgICAgICAgKDFVIDw8IDIpICAgLyogcGF1 c2Ugd2hlbiBjdXJyZW50IGxpbmUgbnVtYmVyIGNoYW5nZXMgKi8KKyNkZWZpbmUgRFVLX1BBVVNF X0ZMQUdfRlVOQ19FTlRSWSAgICAgICAgKDFVIDw8IDMpICAgLyogcGF1c2Ugd2hlbiBlbnRlcmlu ZyBhIGZ1bmN0aW9uICovCisjZGVmaW5lIERVS19QQVVTRV9GTEFHX0ZVTkNfRVhJVCAgICAgICAg ICgxVSA8PCA0KSAgIC8qIHBhdXNlIHdoZW4gZXhpdGluZyBjdXJyZW50IGZ1bmN0aW9uICovCisj ZGVmaW5lIERVS19QQVVTRV9GTEFHX0NBVUdIVF9FUlJPUiAgICAgICgxVSA8PCA1KSAgIC8qIHBh dXNlIHdoZW4gYWJvdXQgdG8gdGhyb3cgYW4gZXJyb3IgdGhhdCBpcyBjYXVnaHQgKi8KKyNkZWZp bmUgRFVLX1BBVVNFX0ZMQUdfVU5DQVVHSFRfRVJST1IgICAgKDFVIDw8IDYpICAgLyogcGF1c2Ug d2hlbiBhYm91dCB0byB0aHJvdyBhbiBlcnJvciB0aGF0IHdvbid0IGJlIGNhdWdodCAqLworCitz dHJ1Y3QgZHVrX2JyZWFrcG9pbnQgeworCWR1a19oc3RyaW5nICpmaWxlbmFtZTsKKwlkdWtfdWlu dDMyX3QgbGluZTsKK307CisKKy8qCisgKiAgU3RyaW5nIGNhY2hlIHNob3VsZCBpZGVhbGx5IGJl IGF0IGR1a19odGhyZWFkIGxldmVsLCBidXQgdGhhdCB3b3VsZAorICogIGNhdXNlIHN0cmluZyBm aW5hbGl6YXRpb24gdG8gc2xvdyBkb3duIHJlbGF0aXZlIHRvIHRoZSBudW1iZXIgb2YKKyAqICB0 aHJlYWRzOyBzdHJpbmcgZmluYWxpemF0aW9uIG11c3QgY2hlY2sgdGhlIHN0cmluZyBjYWNoZSBm b3IgIndlYWsiCisgKiAgcmVmZXJlbmNlcyB0byB0aGUgc3RyaW5nIGJlaW5nIGZpbmFsaXplZCB0 byBhdm9pZCBkZWFkIHBvaW50ZXJzLgorICoKKyAqICBUaHVzLCBzdHJpbmcgY2FjaGVzIGFyZSBu b3cgYXQgdGhlIGhlYXAgbGV2ZWwgbm93LgorICovCisKK3N0cnVjdCBkdWtfc3RyY2FjaGVfZW50 cnkgeworCWR1a19oc3RyaW5nICpoOworCWR1a191aW50MzJfdCBiaWR4OworCWR1a191aW50MzJf dCBjaWR4OworfTsKKworLyoKKyAqICBMb25nam1wIHN0YXRlLCBjb250YWlucyB0aGUgaW5mb3Jt YXRpb24gbmVlZGVkIHRvIHBlcmZvcm0gYSBsb25nam1wLgorICogIExvbmdqbXAgcmVsYXRlZCB2 YWx1ZXMgYXJlIHdyaXR0ZW4gdG8gdmFsdWUxLCB2YWx1ZTIsIGFuZCBpc2Vycm9yLgorICovCisK K3N0cnVjdCBkdWtfbGpzdGF0ZSB7CisJZHVrX2ptcGJ1ZiAqam1wYnVmX3B0cjsgICAvKiBjdXJy ZW50IHNldGptcCgpIGNhdGNocG9pbnQgKi8KKwlkdWtfc21hbGxfdWludF90IHR5cGU7ICAgIC8q IGxvbmdqbXAgdHlwZSAqLworCWR1a19ib29sX3QgaXNlcnJvcjsgICAgICAgLyogaXNFcnJvciBm bGFnIGZvciB5aWVsZCAqLworCWR1a190dmFsIHZhbHVlMTsgICAgICAgICAgLyogMXN0IHJlbGF0 ZWQgdmFsdWUgKHR5cGUgc3BlY2lmaWMpICovCisJZHVrX3R2YWwgdmFsdWUyOyAgICAgICAgICAv KiAybmQgcmVsYXRlZCB2YWx1ZSAodHlwZSBzcGVjaWZpYykgKi8KK307CisKKyNkZWZpbmUgRFVL X0FTU0VSVF9MSlNUQVRFX1VOU0VUKGhlYXApIGRvIHsgXAorCQlEVUtfQVNTRVJUKGhlYXAgIT0g TlVMTCk7IFwKKwkJRFVLX0FTU0VSVChoZWFwLT5sai50eXBlID09IERVS19MSl9UWVBFX1VOS05P V04pOyBcCisJCURVS19BU1NFUlQoaGVhcC0+bGouaXNlcnJvciA9PSAwKTsgXAorCQlEVUtfQVNT RVJUKERVS19UVkFMX0lTX1VOREVGSU5FRCgmaGVhcC0+bGoudmFsdWUxKSk7IFwKKwkJRFVLX0FT U0VSVChEVUtfVFZBTF9JU19VTkRFRklORUQoJmhlYXAtPmxqLnZhbHVlMikpOyBcCisJfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX0FTU0VSVF9MSlNUQVRFX1NFVChoZWFwKSBkbyB7IFwKKwkJRFVL X0FTU0VSVChoZWFwICE9IE5VTEwpOyBcCisJCURVS19BU1NFUlQoaGVhcC0+bGoudHlwZSAhPSBE VUtfTEpfVFlQRV9VTktOT1dOKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiAgTGl0ZXJhbCBp bnRlcm4gY2FjaGUKKyAqLworCitzdHJ1Y3QgZHVrX2xpdGNhY2hlX2VudHJ5IHsKKwljb25zdCBk dWtfdWludDhfdCAqYWRkcjsKKwlkdWtfaHN0cmluZyAqaDsKK307CisKKy8qCisgKiAgTWFpbiBo ZWFwIHN0cnVjdHVyZQorICovCisKK3N0cnVjdCBkdWtfaGVhcCB7CisJZHVrX3NtYWxsX3VpbnRf dCBmbGFnczsKKworCS8qIEFsbG9jYXRvciBmdW5jdGlvbnMuICovCisJZHVrX2FsbG9jX2Z1bmN0 aW9uIGFsbG9jX2Z1bmM7CisJZHVrX3JlYWxsb2NfZnVuY3Rpb24gcmVhbGxvY19mdW5jOworCWR1 a19mcmVlX2Z1bmN0aW9uIGZyZWVfZnVuYzsKKworCS8qIEhlYXAgdWRhdGEsIHVzZWQgZm9yIGFs bG9jYXRvciBmdW5jdGlvbnMgYnV0IGFsc28gZm9yIG90aGVyIGhlYXAKKwkgKiBsZXZlbCBjYWxs YmFja3MgbGlrZSBmYXRhbCBmdW5jdGlvbiwgcG9pbnRlciBjb21wcmVzc2lvbiwgZXRjLgorCSAq LworCXZvaWQgKmhlYXBfdWRhdGE7CisKKwkvKiBGYXRhbCBlcnJvciBoYW5kbGluZywgY2FsbGVk IGUuZy4gd2hlbiBhIGxvbmdqbXAoKSBpcyBuZWVkZWQgYnV0CisJICogbGouam1wYnVmX3B0ciBp cyBOVUxMLiAgZmF0YWxfZnVuYyBtdXN0IG5ldmVyIHJldHVybjsgaXQncyBub3QKKwkgKiBkZWNs YXJlZCBhcyAibm9yZXR1cm4iIGJlY2F1c2UgZG9pbmcgdGhhdCBmb3IgdHlwZWRlZnMgaXMgYSBi aXQKKwkgKiBjaGFsbGVuZ2luZyBwb3J0YWJpbGl0eS13aXNlLgorCSAqLworCWR1a19mYXRhbF9m dW5jdGlvbiBmYXRhbF9mdW5jOworCisJLyogTWFpbiBsaXN0IG9mIGFsbG9jYXRlZCBoZWFwIG9i amVjdHMuICBPYmplY3RzIGFyZSBlaXRoZXIgaGVyZSwKKwkgKiBpbiBmaW5hbGl6ZV9saXN0IHdh aXRpbmcgZm9yIHByb2Nlc3NpbmcsIG9yIGluIHJlZnplcm9fbGlzdAorCSAqIHRlbXBvcmFyaWx5 IHdoaWxlIGEgREVDUkVGIHJlZnplcm8gY2FzY2FkZSBmaW5pc2hlcy4KKwkgKi8KKwlkdWtfaGVh cGhkciAqaGVhcF9hbGxvY2F0ZWQ7CisKKwkvKiBUZW1wb3Jhcnkgd29yayBsaXN0IGZvciBmcmVl aW5nIGEgY2FzY2FkZSBvZiBvYmplY3RzIHdoZW4gYSBERUNSRUYKKwkgKiAob3IgREVDUkVGX05P UlopIGVuY291bnRlcnMgYSB6ZXJvIHJlZmNvdW50LiAgVXNpbmcgYSB3b3JrIGxpc3QKKwkgKiBh bGxvd3MgZml4ZWQgQyBzdGFjayBzaXplIHdoZW4gcmVmY291bnRzIGdvIHRvIHplcm8gZm9yIGEg Y2hhaW4gb2YKKwkgKiBvYmplY3RzLiAgT3V0c2lkZSBvZiBERUNSRUYgdGhpcyBpcyBhbHdheXMg YSBOVUxMIGJlY2F1c2UgREVDUkVGIGlzCisJICogcHJvY2Vzc2VkIHdpdGhvdXQgc2lkZSBlZmZl Y3RzIChvbmx5IG1lbW9yeSBmcmVlIGNhbGxzKS4KKwkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0Vf UkVGRVJFTkNFX0NPVU5USU5HKQorCWR1a19oZWFwaGRyICpyZWZ6ZXJvX2xpc3Q7CisjZW5kaWYK KworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCkKKwkvKiBXb3JrIGxpc3Qg Zm9yIG9iamVjdHMgdG8gYmUgZmluYWxpemVkLiAqLworCWR1a19oZWFwaGRyICpmaW5hbGl6ZV9s aXN0OworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCS8qIE9iamVjdCB3aG9zZSBm aW5hbGl6ZXIgaXMgZXhlY3V0aW5nIHJpZ2h0IG5vdyAobm8gbmVzdGluZykuICovCisJZHVrX2hl YXBoZHIgKmN1cnJlbnRseV9maW5hbGl6aW5nOworI2VuZGlmCisjZW5kaWYKKworCS8qIEZyZWVs aXN0IGZvciBkdWtfYWN0aXZhdGlvbnMgYW5kIGR1a19jYXRjaGVycy4gKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfQ0FDSEVfQUNUSVZBVElPTikKKwlkdWtfYWN0aXZhdGlvbiAqYWN0aXZhdGlvbl9m cmVlOworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0NBQ0hFX0NBVENIRVIpCisJZHVrX2Nh dGNoZXIgKmNhdGNoZXJfZnJlZTsKKyNlbmRpZgorCisJLyogVm9sdW50YXJ5IG1hcmstYW5kLXN3 ZWVwIHRyaWdnZXIgY291bnRlci4gIEludGVudGlvbmFsbHkgc2lnbmVkCisJICogYmVjYXVzZSB3 ZSBjb250aW51ZSBkZWNyZWFzaW5nIHRoZSB2YWx1ZSB3aGVuIHZvbHVudGFyeSBHQyBjYW5ub3QK KwkgKiBydW4uCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZPTFVOVEFSWV9HQykKKwlkdWtf aW50X3QgbXNfdHJpZ2dlcl9jb3VudGVyOworI2VuZGlmCisKKwkvKiBNYXJrLWFuZC1zd2VlcCBy ZWN1cnNpb24gY29udHJvbDogdG9vIGRlZXAgcmVjdXJzaW9uIGNhdXNlcworCSAqIG11bHRpLXBh c3MgcHJvY2Vzc2luZyB0byBhdm9pZCBncm93aW5nIEMgc3RhY2sgd2l0aG91dCBib3VuZC4KKwkg Ki8KKwlkdWtfdWludF90IG1zX3JlY3Vyc2lvbl9kZXB0aDsKKworCS8qIE1hcmstYW5kLXN3ZWVw IGZsYWdzIGF1dG9tYXRpY2FsbHkgYWN0aXZlICh1c2VkIGZvciBjcml0aWNhbCBzZWN0aW9ucyku ICovCisJZHVrX3NtYWxsX3VpbnRfdCBtc19iYXNlX2ZsYWdzOworCisJLyogTWFyay1hbmQtc3dl ZXAgcnVubmluZyBmbGFnLiAgUHJldmVudHMgcmUtZW50cnksIGFuZCBhbHNvIGNhdXNlcworCSAq IHJlZnplcm8gZXZlbnRzIHRvIGJlIGlnbm9yZWQgKD0gb2JqZWN0cyB3b24ndCBiZSBxdWV1ZWQg dG8gcmVmemVyb19saXN0KS4KKwkgKi8KKwlkdWtfdWludF90IG1zX3J1bm5pbmc7CisKKwkvKiBN YXJrLWFuZC1zd2VlcCBwcmV2ZW50IGNvdW50LCBzdGFja2luZy4gIFVzZWQgdG8gYXZvaWQgTSZT IHNpZGUKKwkgKiBlZmZlY3RzIChiZXNpZGVzIGZpbmFsaXplcnMgd2hpY2ggYXJlIGNvbnRyb2xs ZWQgc2VwYXJhdGVseSkgc3VjaAorCSAqIGFzIGNvbXBhY3RpbmcgdGhlIHN0cmluZyB0YWJsZSBv ciBvYmplY3QgcHJvcGVydHkgdGFibGVzLiAgVGhpcworCSAqIGlzIGFsc28gYnVtcGVkIHdoZW4g bXNfcnVubmluZyBpcyBzZXQgdG8gcHJldmVudCByZWN1cnNpdmUgcmUtZW50cnkuCisJICogQ2Fu IGFsc28gYmUgYnVtcGVkIHdoZW4gbWFyay1hbmQtc3dlZXAgaXMgbm90IHJ1bm5pbmcuCisJICov CisJZHVrX3VpbnRfdCBtc19wcmV2ZW50X2NvdW50OworCisJLyogRmluYWxpemVyIHByb2Nlc3Np bmcgcHJldmVudCBjb3VudCwgc3RhY2tpbmcuICBCdW1wZWQgd2hlbiBmaW5hbGl6ZXJzCisJICog YXJlIHByb2Nlc3NlZCB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBmaW5hbGl6ZXIgcHJvY2Vzc2luZyAo Zmlyc3QgY2FsbCBzaXRlCisJICogcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGhhbmRsZXMgYWxsIGZp bmFsaXplcnMgdW50aWwgdGhlIGxpc3QgaXMgZW1wdHkpLgorCSAqIENhbiBhbHNvIGJlIGJ1bXBl ZCBleHBsaWNpdGx5IHRvIHByZXZlbnQgZmluYWxpemVyIGV4ZWN1dGlvbi4KKwkgKi8KKwlkdWtf dWludF90IHBmX3ByZXZlbnRfY291bnQ7CisKKwkvKiBXaGVuIHByb2Nlc3NpbmcgZmluYWxpemVf bGlzdCwgZG9uJ3QgYWN0dWFsbHkgcnVuIGZpbmFsaXplcnMgYnV0CisJICogcXVldWUgZmluYWxp emFibGUgb2JqZWN0cyBiYWNrIHRvIGhlYXBfYWxsb2NhdGVkIGFzIGlzLiAgVGhpcyBpcworCSAq IHVzZWQgZHVyaW5nIGhlYXAgZGVzdHJ1Y3Rpb24gdG8gZGVhbCB3aXRoIGZpbmFsaXplcnMgdGhh dCBrZWVwCisJICogb24gY3JlYXRpbmcgbW9yZSBmaW5hbGl6YWJsZSBnYXJiYWdlLgorCSAqLwor CWR1a191aW50X3QgcGZfc2tpcF9maW5hbGl6ZXJzOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FT U0VSVElPTlMpCisJLyogU2V0IHdoZW4gd2UncmUgaW4gYSBjcml0aWNhbCBwYXRoIHdoZXJlIGFu IGVycm9yIHRocm93IHdvdWxkIGNhdXNlCisJICogZS5nLiBzYW5kYm94aW5nL3Byb3RlY3RlZCBj YWxsIHZpb2xhdGlvbnMgb3Igc3RhdGUgY29ycnVwdGlvbi4gIFRoaXMKKwkgKiBpcyBqdXN0IHVz ZWQgZm9yIGFzc2VydHMuCisJICovCisJZHVrX2Jvb2xfdCBlcnJvcl9ub3RfYWxsb3dlZDsKKyNl bmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJLyogU2V0IHdoZW4gaGVh cCBpcyBzdGlsbCBiZWluZyBpbml0aWFsaXplZCwgaGVscHMgd2l0aCB3cml0aW5nCisJICogc29t ZSBhc3NlcnRpb25zLgorCSAqLworCWR1a19ib29sX3QgaGVhcF9pbml0aWFsaXppbmc7CisjZW5k aWYKKworCS8qIE1hcmtlciBmb3IgZGV0ZWN0aW5nIGludGVybmFsICJkb3VibGUgZmF1bHRzIiwg ZXJyb3JzIHRocm93biB3aGVuCisJICogd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBhbiBlcnJvciBv YmplY3QsIHNlZSBkdWtfZXJyb3JfdGhyb3cuYy4KKwkgKi8KKwlkdWtfYm9vbF90IGNyZWF0aW5n X2Vycm9yOworCisJLyogTWFya2VyIGZvciBpbmRpY2F0aW5nIHdlJ3JlIGNhbGxpbmcgYSB1c2Vy IGVycm9yIGF1Z21lbnRhdGlvbgorCSAqIChlcnJDcmVhdGUvZXJyVGhyb3cpIGZ1bmN0aW9uLiAg RXJyb3JzIGNyZWF0ZWQvdGhyb3duIGR1cmluZworCSAqIHN1Y2ggYSBjYWxsIGFyZSBub3QgYXVn bWVudGVkLgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VSUk9SX1RIUk9XKSB8 fCBkZWZpbmVkKERVS19VU0VfQVVHTUVOVF9FUlJPUl9DUkVBVEUpCisJZHVrX2Jvb2xfdCBhdWdt ZW50aW5nX2Vycm9yOworI2VuZGlmCisKKwkvKiBMb25nam1wIHN0YXRlLiAqLworCWR1a19sanN0 YXRlIGxqOworCisJLyogSGVhcCB0aHJlYWQsIHVzZWQgaW50ZXJuYWxseSBhbmQgZm9yIGZpbmFs aXphdGlvbi4gKi8KKwlkdWtfaHRocmVhZCAqaGVhcF90aHJlYWQ7CisKKwkvKiBDdXJyZW50IHJ1 bm5pbmcgdGhyZWFkLiAqLworCWR1a19odGhyZWFkICpjdXJyX3RocmVhZDsKKworCS8qIEhlYXAg bGV2ZWwgInN0YXNoIiBvYmplY3QgKGUuZy4sIHZhcmlvdXMgcmVhY2hhYmlsaXR5IHJvb3RzKS4g Ki8KKwlkdWtfaG9iamVjdCAqaGVhcF9vYmplY3Q7CisKKwkvKiBkdWtfaGFuZGxlX2NhbGwgLyBk dWtfaGFuZGxlX3NhZmVfY2FsbCByZWN1cnNpb24gZGVwdGggbGltaXRpbmcgKi8KKwlkdWtfaW50 X3QgY2FsbF9yZWN1cnNpb25fZGVwdGg7CisJZHVrX2ludF90IGNhbGxfcmVjdXJzaW9uX2xpbWl0 OworCisJLyogTWl4LWluIHZhbHVlIGZvciBjb21wdXRpbmcgc3RyaW5nIGhhc2hlczsgc2hvdWxk IGJlIHJlYXNvbmFibHkgdW5wcmVkaWN0YWJsZS4gKi8KKwlkdWtfdWludDMyX3QgaGFzaF9zZWVk OworCisJLyogUmFuZG9tIG51bWJlciBzdGF0ZSBmb3IgZHVrX3V0aWxfdGlueXJhbmRvbS5jLiAq LworI2lmICFkZWZpbmVkKERVS19VU0VfR0VUX1JBTkRPTV9ET1VCTEUpCisjaWYgZGVmaW5lZChE VUtfVVNFX1BSRUZFUl9TSVpFKSB8fCAhZGVmaW5lZChEVUtfVVNFXzY0QklUX09QUykKKwlkdWtf dWludDMyX3Qgcm5kX3N0YXRlOyAgLyogU3RhdGUgZm9yIFNoYW1pcidzIHRocmVlLW9wIGFsZ29y aXRobSAqLworI2Vsc2UKKwlkdWtfdWludDY0X3Qgcm5kX3N0YXRlWzJdOyAgLyogU3RhdGUgZm9y IHhvcm9zaGlybzEyOCsgKi8KKyNlbmRpZgorI2VuZGlmCisKKwkvKiBDb3VudGVyIGZvciB1bmlx dWUgbG9jYWwgc3ltYm9sIGNyZWF0aW9uLiAqLworCS8qIFhYWDogV2hlbiA2NC1iaXQgdHlwZXMg YXJlIGF2YWlsYWJsZSwgaXQgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgdG8KKwkgKiB1c2UgYSBk dWtfdWludDY0X3QgYXQgbGVhc3QgZm9yIGluY3JlbWVudGluZyBidXQgbWF5YmUgYWxzbyBmb3IK KwkgKiBzdHJpbmcgZm9ybWF0dGluZyBpbiB0aGUgU3ltYm9sIGNvbnN0cnVjdG9yLgorCSAqLwor CWR1a191aW50MzJfdCBzeW1fY291bnRlclsyXTsKKworCS8qIEZvciBtYW51YWwgZGVidWdnaW5n OiBpbnN0cnVjdGlvbiBjb3VudCBiYXNlZCBvbiBleGVjdXRvciBhbmQKKwkgKiBpbnRlcnJ1cHQg Y291bnRlciBib29rLWtlZXBpbmcuICBJbnNwZWN0IGRlYnVnIGxvZ3MgdG8gc2VlIGhvdworCSAq IHRoZXkgbWF0Y2ggdXAuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVSUlVQVF9DT1VO VEVSKSAmJiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJZHVrX2ludF90IGluc3RfY291bnRfZXhl YzsKKwlkdWtfaW50X3QgaW5zdF9jb3VudF9pbnRlcnJ1cHQ7CisjZW5kaWYKKworCS8qIERlYnVn Z2VyIHN0YXRlLiAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorCS8q IENhbGxiYWNrcyBhbmQgdWRhdGE7IGRiZ19yZWFkX2NiICE9IE5VTEwgaXMgdXNlZCB0byBpbmRp Y2F0ZSBhdHRhY2hlZCBzdGF0ZS4gKi8KKwlkdWtfZGVidWdfcmVhZF9mdW5jdGlvbiBkYmdfcmVh ZF9jYjsgICAgICAgICAgICAgICAgLyogcmVxdWlyZWQsIE5VTEwgaW1wbGllcyBkZXRhY2hlZCAq LworCWR1a19kZWJ1Z193cml0ZV9mdW5jdGlvbiBkYmdfd3JpdGVfY2I7ICAgICAgICAgICAgICAv KiByZXF1aXJlZCAqLworCWR1a19kZWJ1Z19wZWVrX2Z1bmN0aW9uIGRiZ19wZWVrX2NiOworCWR1 a19kZWJ1Z19yZWFkX2ZsdXNoX2Z1bmN0aW9uIGRiZ19yZWFkX2ZsdXNoX2NiOworCWR1a19kZWJ1 Z193cml0ZV9mbHVzaF9mdW5jdGlvbiBkYmdfd3JpdGVfZmx1c2hfY2I7CisJZHVrX2RlYnVnX3Jl cXVlc3RfZnVuY3Rpb24gZGJnX3JlcXVlc3RfY2I7CisJZHVrX2RlYnVnX2RldGFjaGVkX2Z1bmN0 aW9uIGRiZ19kZXRhY2hlZF9jYjsKKwl2b2lkICpkYmdfdWRhdGE7CisKKwkvKiBUaGUgZm9sbG93 aW5nIGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gZGVidWdnZXIgaXMgYXR0YWNoZWQuICovCisJZHVr X2Jvb2xfdCBkYmdfcHJvY2Vzc2luZzsgICAgICAgICAgICAgIC8qIGN1cnJlbnRseSBwcm9jZXNz aW5nIG1lc3NhZ2VzIG9yIGJyZWFrcG9pbnRzOiBkb24ndCBlbnRlciBtZXNzYWdlIHByb2Nlc3Np bmcgcmVjdXJzaXZlbHkgKGUuZy4gbm8gYnJlYWtwb2ludHMgd2hlbiBwcm9jZXNzaW5nIGRlYnVn Z2VyIGV2YWwpICovCisJZHVrX2Jvb2xfdCBkYmdfc3RhdGVfZGlydHk7ICAgICAgICAgICAgIC8q IHJlc2VuZCBzdGF0ZSBuZXh0IHRpbWUgZXhlY3V0b3IgaXMgYWJvdXQgdG8gcnVuICovCisJZHVr X2Jvb2xfdCBkYmdfZm9yY2VfcmVzdGFydDsgICAgICAgICAgIC8qIGZvcmNlIGV4ZWN1dG9yIHJl c3RhcnQgdG8gcmVjaGVjayBicmVha3BvaW50czsgdXNlZCB0byBoYW5kbGUgZnVuY3Rpb24gcmV0 dXJucyAoc2VlIEdILTMwMykgKi8KKwlkdWtfYm9vbF90IGRiZ19kZXRhY2hpbmc7ICAgICAgICAg ICAgICAgLyogZGVidWdnZXIgZGV0YWNoaW5nOyB1c2VkIHRvIGF2b2lkIGNhbGxpbmcgZGV0YWNo IGhhbmRsZXIgcmVjdXJzaXZlbHkgKi8KKwlkdWtfc21hbGxfdWludF90IGRiZ19wYXVzZV9mbGFn czsgICAgICAgLyogZmxhZ3MgZm9yIGF1dG9tYXRpYyBwYXVzZSBiZWhhdmlvciAqLworCWR1a19h Y3RpdmF0aW9uICpkYmdfcGF1c2VfYWN0OyAgICAgICAgICAvKiBhY3RpdmF0aW9uIHJlbGF0ZWQg dG8gcGF1c2UgYmVoYXZpb3IgKHBhdXNlIG9uIGxpbmUgY2hhbmdlLCBmdW5jdGlvbiBlbnRyeS9l eGl0KSAqLworCWR1a191aW50MzJfdCBkYmdfcGF1c2Vfc3RhcnRsaW5lOyAgICAgICAvKiBzdGFy dGluZyBsaW5lIG51bWJlciBmb3IgbGluZSBjaGFuZ2UgcmVsYXRlZCBwYXVzZSBiZWhhdmlvciAq LworCWR1a19icmVha3BvaW50IGRiZ19icmVha3BvaW50c1tEVUtfSEVBUF9NQVhfQlJFQUtQT0lO VFNdOyAgLyogYnJlYWtwb2ludHM6IFswLGJyZWFrcG9pbnRfY291bnRbIGdjIHJlYWNoYWJsZSAq LworCWR1a19zbWFsbF91aW50X3QgZGJnX2JyZWFrcG9pbnRfY291bnQ7CisJZHVrX2JyZWFrcG9p bnQgKmRiZ19icmVha3BvaW50c19hY3RpdmVbRFVLX0hFQVBfTUFYX0JSRUFLUE9JTlRTICsgMV07 ICAvKiBjdXJyZW50bHkgYWN0aXZlIGJyZWFrcG9pbnRzOiBOVUxMIHRlcm0sIGJvcnJvd2VkIHBv aW50ZXJzICovCisJLyogWFhYOiBtYWtlIGFjdGl2ZSBicmVha3BvaW50cyBhY3R1YWwgY29waWVz IGluc3RlYWQgb2YgcG9pbnRlcnM/ICovCisKKwkvKiBUaGVzZSBhcmUgZm9yIHJhdGUgbGltaXRp bmcgU3RhdHVzIG5vdGlmaWNhdGlvbnMgYW5kIHRyYW5zcG9ydCBwZWVraW5nLiAqLworCWR1a191 aW50X3QgZGJnX2V4ZWNfY291bnRlcjsgICAgICAgICAgICAvKiBjdW11bGF0aXZlIG9wY29kZSBl eGVjdXRpb24gY291bnQgKG92ZXJmbG93cyBhcmUgT0spICovCisJZHVrX3VpbnRfdCBkYmdfbGFz dF9jb3VudGVyOyAgICAgICAgICAgIC8qIHZhbHVlIG9mIGRiZ19leGVjX2NvdW50ZXIgd2hlbiB3 ZSBsYXN0IGRpZCBhIERhdGUtYmFzZWQgY2hlY2sgKi8KKwlkdWtfZG91YmxlX3QgZGJnX2xhc3Rf dGltZTsgICAgICAgICAgICAgLyogdGltZSB3aGVuIHN0YXR1cy9wZWVrIHdhcyBsYXN0IGRvbmUg KERhdGUtYmFzZWQgcmF0ZSBsaW1pdCkgKi8KKworCS8qIFVzZWQgdG8gc3VwcG9ydCBzaW5nbGUt Ynl0ZSBzdHJlYW0gbG9va2FoZWFkLiAqLworCWR1a19ib29sX3QgZGJnX2hhdmVfbmV4dF9ieXRl OworCWR1a191aW50OF90IGRiZ19uZXh0X2J5dGU7CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUdH RVJfU1VQUE9SVCAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCWR1a19ib29s X3QgZGJnX2NhbGxpbmdfdHJhbnNwb3J0OyAgICAgICAvKiB0cmFuc3BvcnQgY2FsbCBpbiBwcm9n cmVzcywgY2FsbGluZyBpbnRvIER1a3RhcGUgZm9yYmlkZGVuICovCisjZW5kaWYKKworCS8qIFN0 cmluZyBpbnRlcm4gdGFibGUgKHdlYWsgcmVmcykuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1NU UlRBQl9QVFJDT01QKQorCWR1a191aW50MTZfdCAqc3RydGFibGUxNjsKKyNlbHNlCisJZHVrX2hz dHJpbmcgKipzdHJ0YWJsZTsKKyNlbmRpZgorCWR1a191aW50MzJfdCBzdF9tYXNrOyAgICAvKiBt YXNrIGZvciBsb29rdXAsIHN0X3NpemUgLSAxICovCisJZHVrX3VpbnQzMl90IHN0X3NpemU7ICAg IC8qIHN0cmluZ3RhYmxlIHNpemUgKi8KKyNpZiAoRFVLX1VTRV9TVFJUQUJfTUlOU0laRSAhPSBE VUtfVVNFX1NUUlRBQl9NQVhTSVpFKQorCWR1a191aW50MzJfdCBzdF9jb3VudDsgICAvKiBzdHJp bmcgY291bnQgZm9yIHJlc2l6ZSBsb2FkIGZhY3RvciBjaGVja3MgKi8KKyNlbmRpZgorCWR1a19i b29sX3Qgc3RfcmVzaXppbmc7ICAvKiBzdHJpbmcgdGFibGUgaXMgYmVpbmcgcmVzaXplZDsgYXZv aWQgcmVjdXJzaXZlIHJlc2l6ZSAqLworCisJLyogU3RyaW5nIGFjY2VzcyBjYWNoZSAoY29kZXBv aW50IG9mZnNldCAtPiBieXRlIG9mZnNldCkgZm9yIGZhc3Qgc3RyaW5nCisJICogY2hhcmFjdGVy IGxvb3Bpbmc7ICd3ZWFrJyByZWZlcmVuY2Ugd2hpY2ggbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBp biBHQy4KKwkgKi8KKwlkdWtfc3RyY2FjaGVfZW50cnkgc3RyY2FjaGVbRFVLX0hFQVBfU1RSQ0FD SEVfU0laRV07CisKKyNpZiBkZWZpbmVkKERVS19VU0VfTElUQ0FDSEVfU0laRSkKKwkvKiBMaXRl cmFsIGludGVybiBjYWNoZS4gIFdoZW4gZW5hYmxlZCwgc3RyaW5ncyBpbnRlcm5lZCBhcyBsaXRl cmFscworCSAqIChlLmcuIGR1a19wdXNoX2xpdGVyYWwoKSkgd2lsbCBiZSBwaW5uZWQgYW5kIGNh Y2hlZCBmb3IgdGhlIGxpZmV0aW1lCisJICogb2YgdGhlIGhlYXAuCisJICovCisJZHVrX2xpdGNh Y2hlX2VudHJ5IGxpdGNhY2hlW0RVS19VU0VfTElUQ0FDSEVfU0laRV07CisjZW5kaWYKKworCS8q IEJ1aWx0LWluIHN0cmluZ3MuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1JPTV9TVFJJTkdTKQor CS8qIE5vIGZpZWxkIG5lZWRlZCB3aGVuIHN0cmluZ3MgYXJlIGluIFJPTS4gKi8KKyNlbHNlCisj aWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQVFIxNikKKwlkdWtfdWludDE2X3Qgc3RyczE2W0RVS19I RUFQX05VTV9TVFJJTkdTXTsKKyNlbHNlCisJZHVrX2hzdHJpbmcgKnN0cnNbRFVLX0hFQVBfTlVN X1NUUklOR1NdOworI2VuZGlmCisjZW5kaWYKKworCS8qIFN0YXRzLiAqLworI2lmIGRlZmluZWQo RFVLX1VTRV9ERUJVRykKKwlkdWtfaW50X3Qgc3RhdHNfZXhlY19vcGNvZGVzOworCWR1a19pbnRf dCBzdGF0c19leGVjX2ludGVycnVwdDsKKwlkdWtfaW50X3Qgc3RhdHNfZXhlY190aHJvdzsKKwlk dWtfaW50X3Qgc3RhdHNfY2FsbF9hbGw7CisJZHVrX2ludF90IHN0YXRzX2NhbGxfdGFpbGNhbGw7 CisJZHVrX2ludF90IHN0YXRzX2NhbGxfZWNtYXRvZWNtYTsKKwlkdWtfaW50X3Qgc3RhdHNfc2Fm ZWNhbGxfYWxsOworCWR1a19pbnRfdCBzdGF0c19zYWZlY2FsbF9ub3Rocm93OworCWR1a19pbnRf dCBzdGF0c19zYWZlY2FsbF90aHJvdzsKKwlkdWtfaW50X3Qgc3RhdHNfbXNfdHJ5X2NvdW50Owor CWR1a19pbnRfdCBzdGF0c19tc19za2lwX2NvdW50OworCWR1a19pbnRfdCBzdGF0c19tc19lbWVy Z2VuY3lfY291bnQ7CisJZHVrX2ludF90IHN0YXRzX3N0cnRhYl9pbnRlcm5faGl0OworCWR1a19p bnRfdCBzdGF0c19zdHJ0YWJfaW50ZXJuX21pc3M7CisJZHVrX2ludF90IHN0YXRzX3N0cnRhYl9y ZXNpemVfY2hlY2s7CisJZHVrX2ludF90IHN0YXRzX3N0cnRhYl9yZXNpemVfZ3JvdzsKKwlkdWtf aW50X3Qgc3RhdHNfc3RydGFiX3Jlc2l6ZV9zaHJpbms7CisJZHVrX2ludF90IHN0YXRzX3N0cnRh Yl9saXRjYWNoZV9oaXQ7CisJZHVrX2ludF90IHN0YXRzX3N0cnRhYl9saXRjYWNoZV9taXNzOwor CWR1a19pbnRfdCBzdGF0c19zdHJ0YWJfbGl0Y2FjaGVfcGluOworCWR1a19pbnRfdCBzdGF0c19v YmplY3RfcmVhbGxvY19wcm9wczsKKwlkdWtfaW50X3Qgc3RhdHNfb2JqZWN0X2FiYW5kb25fYXJy YXk7CisJZHVrX2ludF90IHN0YXRzX2dldG93bnByb3BkZXNjX2NvdW50OworCWR1a19pbnRfdCBz dGF0c19nZXRvd25wcm9wZGVzY19oaXQ7CisJZHVrX2ludF90IHN0YXRzX2dldG93bnByb3BkZXNj X21pc3M7CisJZHVrX2ludF90IHN0YXRzX2dldHByb3BkZXNjX2NvdW50OworCWR1a19pbnRfdCBz dGF0c19nZXRwcm9wZGVzY19oaXQ7CisJZHVrX2ludF90IHN0YXRzX2dldHByb3BkZXNjX21pc3M7 CisJZHVrX2ludF90IHN0YXRzX2dldHByb3BfYWxsOworCWR1a19pbnRfdCBzdGF0c19nZXRwcm9w X2FycmF5aWR4OworCWR1a19pbnRfdCBzdGF0c19nZXRwcm9wX2J1Zm9iamlkeDsKKwlkdWtfaW50 X3Qgc3RhdHNfZ2V0cHJvcF9idWZmZXJpZHg7CisJZHVrX2ludF90IHN0YXRzX2dldHByb3BfYnVm ZmVybGVuOworCWR1a19pbnRfdCBzdGF0c19nZXRwcm9wX3N0cmluZ2lkeDsKKwlkdWtfaW50X3Qg c3RhdHNfZ2V0cHJvcF9zdHJpbmdsZW47CisJZHVrX2ludF90IHN0YXRzX2dldHByb3BfcHJveHk7 CisJZHVrX2ludF90IHN0YXRzX2dldHByb3BfYXJndW1lbnRzOworCWR1a19pbnRfdCBzdGF0c19w dXRwcm9wX2FsbDsKKwlkdWtfaW50X3Qgc3RhdHNfcHV0cHJvcF9hcnJheWlkeDsKKwlkdWtfaW50 X3Qgc3RhdHNfcHV0cHJvcF9idWZvYmppZHg7CisJZHVrX2ludF90IHN0YXRzX3B1dHByb3BfYnVm ZmVyaWR4OworCWR1a19pbnRfdCBzdGF0c19wdXRwcm9wX3Byb3h5OworCWR1a19pbnRfdCBzdGF0 c19nZXR2YXJfYWxsOworCWR1a19pbnRfdCBzdGF0c19wdXR2YXJfYWxsOworI2VuZGlmCit9Owor CisvKgorICogIFByb3RvdHlwZXMKKyAqLworCitEVUtfSU5URVJOQUxfREVDTAorZHVrX2hlYXAg KmR1a19oZWFwX2FsbG9jKGR1a19hbGxvY19mdW5jdGlvbiBhbGxvY19mdW5jLAorICAgICAgICAg ICAgICAgICAgICAgICAgIGR1a19yZWFsbG9jX2Z1bmN0aW9uIHJlYWxsb2NfZnVuYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICBkdWtfZnJlZV9mdW5jdGlvbiBmcmVlX2Z1bmMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqaGVhcF91ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBkdWtfZmF0YWxfZnVuY3Rpb24gZmF0YWxfZnVuYyk7CitEVUtfSU5URVJOQUxfREVDTCB2 b2lkIGR1a19oZWFwX2ZyZWUoZHVrX2hlYXAgKmhlYXApOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9p ZCBkdWtfZnJlZV9ob2JqZWN0KGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqaCk7CitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19mcmVlX2hidWZmZXIoZHVrX2hlYXAgKmhlYXAsIGR1a19o YnVmZmVyICpoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2ZyZWVfaHN0cmluZyhkdWtf aGVhcCAqaGVhcCwgZHVrX2hzdHJpbmcgKmgpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtf aGVhcF9mcmVlX2hlYXBoZHJfcmF3KGR1a19oZWFwICpoZWFwLCBkdWtfaGVhcGhkciAqaGRyKTsK KworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGVhcF9pbnNlcnRfaW50b19oZWFwX2FsbG9j YXRlZChkdWtfaGVhcCAqaGVhcCwgZHVrX2hlYXBoZHIgKmhkcik7CisjaWYgZGVmaW5lZChEVUtf VVNFX1JFRkVSRU5DRV9DT1VOVElORykKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hlYXBf cmVtb3ZlX2Zyb21faGVhcF9hbGxvY2F0ZWQoZHVrX2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpo ZHIpOworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorRFVL X0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGVhcF9pbnNlcnRfaW50b19maW5hbGl6ZV9saXN0KGR1 a19oZWFwICpoZWFwLCBkdWtfaGVhcGhkciAqaGRyKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX2hlYXBfcmVtb3ZlX2Zyb21fZmluYWxpemVfbGlzdChkdWtfaGVhcCAqaGVhcCwgZHVrX2hl YXBoZHIgKmhkcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKK0RV S19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2hlYXBfaW5faGVhcF9hbGxvY2F0ZWQoZHVr X2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpwdHIpOworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtf VVNFX0lOVEVSUlVQVF9DT1VOVEVSKQorRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGVhcF9z d2l0Y2hfdGhyZWFkKGR1a19oZWFwICpoZWFwLCBkdWtfaHRocmVhZCAqbmV3X3Rocik7CisjZW5k aWYKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a19oZWFwX3N0cnRhYmxlX2lu dGVybihkdWtfaGVhcCAqaGVhcCwgY29uc3QgZHVrX3VpbnQ4X3QgKnN0ciwgZHVrX3VpbnQzMl90 IGJsZW4pOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a19oZWFwX3N0cnRhYmxl X2ludGVybl9jaGVja2VkKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGR1a191aW50OF90ICpzdHIs IGR1a191aW50MzJfdCBsZW4pOworI2lmIGRlZmluZWQoRFVLX1VTRV9MSVRDQUNIRV9TSVpFKQor RFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hzdHJpbmcgKmR1a19oZWFwX3N0cnRhYmxlX2ludGVybl9s aXRlcmFsX2NoZWNrZWQoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgZHVrX3VpbnQ4X3QgKnN0ciwg ZHVrX3VpbnQzMl90IGJsZW4pOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaHN0cmlu ZyAqZHVrX2hlYXBfc3RydGFibGVfaW50ZXJuX3UzMihkdWtfaGVhcCAqaGVhcCwgZHVrX3VpbnQz Ml90IHZhbCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaHN0cmluZyAqZHVrX2hlYXBfc3RydGFi bGVfaW50ZXJuX3UzMl9jaGVja2VkKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50MzJfdCB2YWwp OworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCitEVUtfSU5URVJOQUxf REVDTCB2b2lkIGR1a19oZWFwX3N0cnRhYmxlX3VubGluayhkdWtfaGVhcCAqaGVhcCwgZHVrX2hz dHJpbmcgKmgpOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19oZWFwX3N0cnRh YmxlX3VubGlua19wcmV2KGR1a19oZWFwICpoZWFwLCBkdWtfaHN0cmluZyAqaCwgZHVrX2hzdHJp bmcgKnByZXYpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGVhcF9zdHJ0YWJsZV9mb3Jj ZV9yZXNpemUoZHVrX2hlYXAgKmhlYXApOworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBfc3Ry dGFibGVfZnJlZShkdWtfaGVhcCAqaGVhcCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQor RFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBfc3RydGFibGVfZHVtcChkdWtfaGVhcCAqaGVhcCk7 CisjZW5kaWYKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGVhcF9zdHJjYWNoZV9zdHJp bmdfcmVtb3ZlKGR1a19oZWFwICpoZWFwLCBkdWtfaHN0cmluZyAqaCk7CitEVUtfSU5URVJOQUxf REVDTCBkdWtfdWludF9mYXN0MzJfdCBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJieXRl KGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpoLCBkdWtfdWludF9mYXN0MzJfdCBjaGFy X29mZnNldCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUFJPVklERV9ERUZBVUxUX0FMTE9DX0ZV TkNUSU9OUykKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgKmR1a19kZWZhdWx0X2FsbG9jX2Z1bmN0 aW9uKHZvaWQgKnVkYXRhLCBkdWtfc2l6ZV90IHNpemUpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9p ZCAqZHVrX2RlZmF1bHRfcmVhbGxvY19mdW5jdGlvbih2b2lkICp1ZGF0YSwgdm9pZCAqcHRyLCBk dWtfc2l6ZV90IG5ld3NpemUpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVmYXVsdF9m cmVlX2Z1bmN0aW9uKHZvaWQgKnVkYXRhLCB2b2lkICpwdHIpOworI2VuZGlmCisKK0RVS19JTlRF Uk5BTF9ERUNMIHZvaWQgKmR1a19oZWFwX21lbV9hbGxvYyhkdWtfaGVhcCAqaGVhcCwgZHVrX3Np emVfdCBzaXplKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgKmR1a19oZWFwX21lbV9hbGxvY196 ZXJvZWQoZHVrX2hlYXAgKmhlYXAsIGR1a19zaXplX3Qgc2l6ZSk7CitEVUtfSU5URVJOQUxfREVD TCB2b2lkICpkdWtfaGVhcF9tZW1fYWxsb2NfY2hlY2tlZChkdWtfaHRocmVhZCAqdGhyLCBkdWtf c2l6ZV90IHNpemUpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX2hlYXBfbWVtX2FsbG9j X2NoZWNrZWRfemVyb2VkKGR1a19odGhyZWFkICp0aHIsIGR1a19zaXplX3Qgc2l6ZSk7CitEVUtf SU5URVJOQUxfREVDTCB2b2lkICpkdWtfaGVhcF9tZW1fcmVhbGxvYyhkdWtfaGVhcCAqaGVhcCwg dm9pZCAqcHRyLCBkdWtfc2l6ZV90IG5ld3NpemUpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCAq ZHVrX2hlYXBfbWVtX3JlYWxsb2NfaW5kaXJlY3QoZHVrX2hlYXAgKmhlYXAsIGR1a19tZW1fZ2V0 cHRyIGNiLCB2b2lkICp1ZCwgZHVrX3NpemVfdCBuZXdzaXplKTsKK0RVS19JTlRFUk5BTF9ERUNM IHZvaWQgZHVrX2hlYXBfbWVtX2ZyZWUoZHVrX2hlYXAgKmhlYXAsIHZvaWQgKnB0cik7CisKK0RV S19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hlYXBfZnJlZV9mcmVlbGlzdHMoZHVrX2hlYXAgKmhl YXApOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorRFVLX0lOVEVS TkFMX0RFQ0wgdm9pZCBkdWtfaGVhcF9ydW5fZmluYWxpemVyKGR1a19oZWFwICpoZWFwLCBkdWtf aG9iamVjdCAqb2JqKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2hlYXBfcHJvY2Vzc19m aW5hbGl6ZV9saXN0KGR1a19oZWFwICpoZWFwKTsKKyNlbmRpZiAgLyogRFVLX1VTRV9GSU5BTEla RVJfU1VQUE9SVCAqLworCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19oZWFwX21hcmtfYW5k X3N3ZWVwKGR1a19oZWFwICpoZWFwLCBkdWtfc21hbGxfdWludF90IGZsYWdzKTsKKworRFVLX0lO VEVSTkFMX0RFQ0wgZHVrX3VpbnQzMl90IGR1a19oZWFwX2hhc2hzdHJpbmcoZHVrX2hlYXAgKmhl YXAsIGNvbnN0IGR1a191aW50OF90ICpzdHIsIGR1a19zaXplX3QgbGVuKTsKKworI2VuZGlmICAv KiBEVUtfSEVBUF9IX0lOQ0xVREVEICovCisvKiAjaW5jbHVkZSBkdWtfZGVidWdnZXIuaCAqLwor I2lmICFkZWZpbmVkKERVS19ERUJVR0dFUl9IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfREVCVUdH RVJfSF9JTkNMVURFRAorCisvKiBEZWJ1Z2dlciBwcm90b2NvbCB2ZXJzaW9uIGlzIGRlZmluZWQg aW4gdGhlIHB1YmxpYyBBUEkgaGVhZGVyLiAqLworCisvKiBJbml0aWFsIGJ5dGVzIGZvciBtYXJr ZXJzLiAqLworI2RlZmluZSBEVUtfREJHX0lCX0VPTSAgICAgICAgICAgICAgICAgICAweDAwCisj ZGVmaW5lIERVS19EQkdfSUJfUkVRVUVTVCAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRFVL X0RCR19JQl9SRVBMWSAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBEVUtfREJHX0lCX0VS Uk9SICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIERVS19EQkdfSUJfTk9USUZZICAgICAg ICAgICAgICAgIDB4MDQKKworLyogT3RoZXIgaW5pdGlhbCBieXRlcy4gKi8KKyNkZWZpbmUgRFVL X0RCR19JQl9JTlQ0ICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBEVUtfREJHX0lCX1NU UjQgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIERVS19EQkdfSUJfU1RSMiAgICAgICAg ICAgICAgICAgIDB4MTIKKyNkZWZpbmUgRFVLX0RCR19JQl9CVUY0ICAgICAgICAgICAgICAgICAg MHgxMworI2RlZmluZSBEVUtfREJHX0lCX0JVRjIgICAgICAgICAgICAgICAgICAweDE0CisjZGVm aW5lIERVS19EQkdfSUJfVU5VU0VEICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgRFVLX0RC R19JQl9VTkRFRklORUQgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBEVUtfREJHX0lCX05VTEwg ICAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIERVS19EQkdfSUJfVFJVRSAgICAgICAgICAg ICAgICAgIDB4MTgKKyNkZWZpbmUgRFVLX0RCR19JQl9GQUxTRSAgICAgICAgICAgICAgICAgMHgx OQorI2RlZmluZSBEVUtfREJHX0lCX05VTUJFUiAgICAgICAgICAgICAgICAweDFhCisjZGVmaW5l IERVS19EQkdfSUJfT0JKRUNUICAgICAgICAgICAgICAgIDB4MWIKKyNkZWZpbmUgRFVLX0RCR19J Ql9QT0lOVEVSICAgICAgICAgICAgICAgMHgxYworI2RlZmluZSBEVUtfREJHX0lCX0xJR0hURlVO QyAgICAgICAgICAgICAweDFkCisjZGVmaW5lIERVS19EQkdfSUJfSEVBUFBUUiAgICAgICAgICAg ICAgIDB4MWUKKy8qIFRoZSBzaG9ydCBzdHJpbmcvaW50ZWdlciBpbml0aWFsIGJ5dGVzIHN0YXJ0 aW5nIGZyb20gMHg2MCBkb24ndCBoYXZlCisgKiBkZWZpbmVzIG5vdy4KKyAqLworCisvKiBFcnJv ciBjb2Rlcy4gKi8KKyNkZWZpbmUgRFVLX0RCR19FUlJfVU5LTk9XTiAgICAgICAgICAgICAgMHgw MAorI2RlZmluZSBEVUtfREJHX0VSUl9VTlNVUFBPUlRFRCAgICAgICAgICAweDAxCisjZGVmaW5l IERVS19EQkdfRVJSX1RPT01BTlkgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRFVLX0RCR19F UlJfTk9URk9VTkQgICAgICAgICAgICAgMHgwMworI2RlZmluZSBEVUtfREJHX0VSUl9BUFBMSUNB VElPTiAgICAgICAgICAweDA0CisKKy8qIENvbW1hbmRzIGFuZCBub3RpZnlzIGluaXRpYXRlZCBi eSBEdWt0YXBlLiAqLworI2RlZmluZSBEVUtfREJHX0NNRF9TVEFUVVMgICAgICAgICAgICAgICAw eDAxCisjZGVmaW5lIERVS19EQkdfQ01EX1VOVVNFRF8yICAgICAgICAgICAgIDB4MDIgIC8qIER1 a3RhcGUgMS54OiBwcmludCBub3RpZnkgKi8KKyNkZWZpbmUgRFVLX0RCR19DTURfVU5VU0VEXzMg ICAgICAgICAgICAgMHgwMyAgLyogRHVrdGFwZSAxLng6IGFsZXJ0IG5vdGlmeSAqLworI2RlZmlu ZSBEVUtfREJHX0NNRF9VTlVTRURfNCAgICAgICAgICAgICAweDA0ICAvKiBEdWt0YXBlIDEueDog bG9nIG5vdGlmeSAqLworI2RlZmluZSBEVUtfREJHX0NNRF9USFJPVyAgICAgICAgICAgICAgICAw eDA1CisjZGVmaW5lIERVS19EQkdfQ01EX0RFVEFDSElORyAgICAgICAgICAgIDB4MDYKKyNkZWZp bmUgRFVLX0RCR19DTURfQVBQTk9USUZZICAgICAgICAgICAgMHgwNworCisvKiBDb21tYW5kcyBp bml0aWF0ZWQgYnkgZGVidWcgY2xpZW50LiAqLworI2RlZmluZSBEVUtfREJHX0NNRF9CQVNJQ0lO Rk8gICAgICAgICAgICAweDEwCisjZGVmaW5lIERVS19EQkdfQ01EX1RSSUdHRVJTVEFUVVMgICAg ICAgIDB4MTEKKyNkZWZpbmUgRFVLX0RCR19DTURfUEFVU0UgICAgICAgICAgICAgICAgMHgxMgor I2RlZmluZSBEVUtfREJHX0NNRF9SRVNVTUUgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIERV S19EQkdfQ01EX1NURVBJTlRPICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgRFVLX0RCR19DTURf U1RFUE9WRVIgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBEVUtfREJHX0NNRF9TVEVQT1VUICAg ICAgICAgICAgICAweDE2CisjZGVmaW5lIERVS19EQkdfQ01EX0xJU1RCUkVBSyAgICAgICAgICAg IDB4MTcKKyNkZWZpbmUgRFVLX0RCR19DTURfQUREQlJFQUsgICAgICAgICAgICAgMHgxOAorI2Rl ZmluZSBEVUtfREJHX0NNRF9ERUxCUkVBSyAgICAgICAgICAgICAweDE5CisjZGVmaW5lIERVS19E QkdfQ01EX0dFVFZBUiAgICAgICAgICAgICAgIDB4MWEKKyNkZWZpbmUgRFVLX0RCR19DTURfUFVU VkFSICAgICAgICAgICAgICAgMHgxYgorI2RlZmluZSBEVUtfREJHX0NNRF9HRVRDQUxMU1RBQ0sg ICAgICAgICAweDFjCisjZGVmaW5lIERVS19EQkdfQ01EX0dFVExPQ0FMUyAgICAgICAgICAgIDB4 MWQKKyNkZWZpbmUgRFVLX0RCR19DTURfRVZBTCAgICAgICAgICAgICAgICAgMHgxZQorI2RlZmlu ZSBEVUtfREJHX0NNRF9ERVRBQ0ggICAgICAgICAgICAgICAweDFmCisjZGVmaW5lIERVS19EQkdf Q01EX0RVTVBIRUFQICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRFVLX0RCR19DTURfR0VUQllU RUNPREUgICAgICAgICAgMHgyMQorI2RlZmluZSBEVUtfREJHX0NNRF9BUFBSRVFVRVNUICAgICAg ICAgICAweDIyCisjZGVmaW5lIERVS19EQkdfQ01EX0dFVEhFQVBPQkpJTkZPICAgICAgIDB4MjMK KyNkZWZpbmUgRFVLX0RCR19DTURfR0VUT0JKUFJPUERFU0MgICAgICAgMHgyNAorI2RlZmluZSBE VUtfREJHX0NNRF9HRVRPQkpQUk9QREVTQ1JBTkdFICAweDI1CisKKy8qIFRoZSBsb3cgOCBiaXRz IG1hcCBkaXJlY3RseSB0byBkdWtfaG9iamVjdC5oIERVS19QUk9QREVTQ19GTEFHX3h4eC4KKyAq IFRoZSByZW1haW5pbmcgZmxhZ3MgYXJlIHNwZWNpZmljIHRvIHRoZSBkZWJ1Z2dlci4KKyAqLwor I2RlZmluZSBEVUtfREJHX1BST1BGTEFHX1NZTUJPTCAgICAgICAgICAoMVUgPDwgOCkKKyNkZWZp bmUgRFVLX0RCR19QUk9QRkxBR19ISURERU4gICAgICAgICAgKDFVIDw8IDkpCisKKyNpZiBkZWZp bmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVr X2RlYnVnX2RvX2RldGFjaChkdWtfaGVhcCAqaGVhcCk7CisKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19ib29sX3QgZHVrX2RlYnVnX3JlYWRfcGVlayhkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRF Uk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX2ZsdXNoKGR1a19odGhyZWFkICp0aHIpOwor CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1Z19za2lwX2J5dGVzKGR1a19odGhyZWFk ICp0aHIsIGR1a19zaXplX3QgbGVuZ3RoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Rl YnVnX3NraXBfYnl0ZShkdWtfaHRocmVhZCAqdGhyKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9p ZCBkdWtfZGVidWdfcmVhZF9ieXRlcyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludDhfdCAqZGF0 YSwgZHVrX3NpemVfdCBsZW5ndGgpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnQ4X3QgZHVr X2RlYnVnX3JlYWRfYnl0ZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19pbnQzMl90IGR1a19kZWJ1Z19yZWFkX2ludChkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19oc3RyaW5nICpkdWtfZGVidWdfcmVhZF9oc3RyaW5nKGR1a19odGhyZWFk ICp0aHIpOworLyogWFhYOiBleHBvc2VkIGR1a19kZWJ1Z19yZWFkX3BvaW50ZXIgKi8KKy8qIFhY WDogZXhwb3NlZCBkdWtfZGVidWdfcmVhZF9idWZmZXIgKi8KKy8qIFhYWDogZXhwb3NlZCBkdWtf ZGVidWdfcmVhZF9oYnVmZmVyICovCisjaWYgMAorRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2hlYXBo ZHIgKmR1a19kZWJ1Z19yZWFkX2hlYXBwdHIoZHVrX2h0aHJlYWQgKnRocik7CisjZW5kaWYKKyNp ZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfSU5TUEVDVCkKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19oZWFwaGRyICpkdWtfZGVidWdfcmVhZF9hbnlfcHRyKGR1a19odGhyZWFkICp0aHIpOworI2Vu ZGlmCitEVUtfSU5URVJOQUxfREVDTCBkdWtfdHZhbCAqZHVrX2RlYnVnX3JlYWRfdHZhbChkdWtf aHRocmVhZCAqdGhyKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVidWdfd3JpdGVf Ynl0ZXMoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgZHVrX3VpbnQ4X3QgKmRhdGEsIGR1a19zaXpl X3QgbGVuZ3RoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX2J5dGUo ZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQ4X3QgeCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lk IGR1a19kZWJ1Z193cml0ZV91bnVzZWQoZHVrX2h0aHJlYWQgKnRocik7CitEVUtfSU5URVJOQUxf REVDTCB2b2lkIGR1a19kZWJ1Z193cml0ZV91bmRlZmluZWQoZHVrX2h0aHJlYWQgKnRocik7Cisj aWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX0lOU1BFQ1QpCitEVUtfSU5URVJOQUxfREVDTCB2 b2lkIGR1a19kZWJ1Z193cml0ZV9udWxsKGR1a19odGhyZWFkICp0aHIpOworI2VuZGlmCitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1Z193cml0ZV9ib29sZWFuKGR1a19odGhyZWFkICp0 aHIsIGR1a191aW50X3QgdmFsKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dy aXRlX2ludChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaW50MzJfdCB4KTsKK0RVS19JTlRFUk5BTF9E RUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX3VpbnQoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQz Ml90IHgpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVidWdfd3JpdGVfc3RyaW5nKGR1 a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmRhdGEsIGR1a19zaXplX3QgbGVuZ3RoKTsKK0RV S19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX2NzdHJpbmcoZHVrX2h0aHJlYWQg KnRociwgY29uc3QgY2hhciAqZGF0YSk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1 Z193cml0ZV9oc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpoKTsKK0RVS19J TlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX2J1ZmZlcihkdWtfaHRocmVhZCAqdGhy LCBjb25zdCBjaGFyICpkYXRhLCBkdWtfc2l6ZV90IGxlbmd0aCk7CitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19kZWJ1Z193cml0ZV9oYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19oYnVm ZmVyICpoKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX3BvaW50ZXIo ZHVrX2h0aHJlYWQgKnRociwgdm9pZCAqcHRyKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdH RVJfRFVNUEhFQVApIHx8IGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9JTlNQRUNUKQorRFVLX0lO VEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVidWdfd3JpdGVfaGVhcHB0cihkdWtfaHRocmVhZCAqdGhy LCBkdWtfaGVhcGhkciAqaCk7CisjZW5kaWYKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Rl YnVnX3dyaXRlX2hvYmplY3QoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9iaik7CitE VUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1Z193cml0ZV90dmFsKGR1a19odGhyZWFkICp0 aHIsIGR1a190dmFsICp0dik7CisjaWYgMCAgLyogdW51c2VkICovCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19kZWJ1Z193cml0ZV9yZXF1ZXN0KGR1a19odGhyZWFkICp0aHIsIGR1a19zbWFs bF91aW50X3QgY29tbWFuZCk7CisjZW5kaWYKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Rl YnVnX3dyaXRlX3JlcGx5KGR1a19odGhyZWFkICp0aHIpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9p ZCBkdWtfZGVidWdfd3JpdGVfZXJyb3JfZW9tKGR1a19odGhyZWFkICp0aHIsIGR1a19zbWFsbF91 aW50X3QgZXJyX2NvZGUsIGNvbnN0IGNoYXIgKm1zZyk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lk IGR1a19kZWJ1Z193cml0ZV9ub3RpZnkoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRf dCBjb21tYW5kKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX2VvbShk dWtfaHRocmVhZCAqdGhyKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnRfZmFzdDMyX3Qg ZHVrX2RlYnVnX2N1cnJfbGluZShkdWtfaHRocmVhZCAqdGhyKTsKK0RVS19JTlRFUk5BTF9ERUNM IHZvaWQgZHVrX2RlYnVnX3NlbmRfc3RhdHVzKGR1a19odGhyZWFkICp0aHIpOworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ERUJVR0dFUl9USFJPV19OT1RJRlkpCitEVUtfSU5URVJOQUxfREVDTCB2b2lk IGR1a19kZWJ1Z19zZW5kX3Rocm93KGR1a19odGhyZWFkICp0aHIsIGR1a19ib29sX3QgZmF0YWwp OworI2VuZGlmCisKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX2hhbHRfZXhlY3V0 aW9uKGR1a19odGhyZWFkICp0aHIsIGR1a19ib29sX3QgdXNlX3ByZXZfcGMpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZGVidWdfcHJvY2Vzc19tZXNzYWdlcyhkdWtfaHRocmVh ZCAqdGhyLCBkdWtfYm9vbF90IG5vX2Jsb2NrKTsKKworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3Nt YWxsX2ludF90IGR1a19kZWJ1Z19hZGRfYnJlYWtwb2ludChkdWtfaHRocmVhZCAqdGhyLCBkdWtf aHN0cmluZyAqZmlsZW5hbWUsIGR1a191aW50MzJfdCBsaW5lKTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19ib29sX3QgZHVrX2RlYnVnX3JlbW92ZV9icmVha3BvaW50KGR1a19odGhyZWFkICp0aHIs IGR1a19zbWFsbF91aW50X3QgYnJlYWtwb2ludF9pbmRleCk7CisKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19ib29sX3QgZHVrX2RlYnVnX2lzX2F0dGFjaGVkKGR1a19oZWFwICpoZWFwKTsKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2RlYnVnX2lzX3BhdXNlZChkdWtfaGVhcCAqaGVh cCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1Z19zZXRfcGF1c2VkKGR1a19oZWFw ICpoZWFwKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnX2NsZWFyX3BhdXNlZChk dWtfaGVhcCAqaGVhcCk7CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1Z19jbGVhcl9w YXVzZV9zdGF0ZShkdWtfaGVhcCAqaGVhcCk7CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUdHRVJf U1VQUE9SVCAqLworCisjZW5kaWYgIC8qIERVS19ERUJVR0dFUl9IX0lOQ0xVREVEICovCisvKiAj aW5jbHVkZSBkdWtfZGVidWcuaCAqLworLyoKKyAqICBEZWJ1Z2dpbmcgbWFjcm9zLCBEVUtfRFBS SU5UKCkgYW5kIGl0cyB2YXJpYW50cyBpbiBwYXJ0aWN1bGFyLgorICoKKyAqICBEVUtfRFBSSU5U KCkgYWxsb3dzIGZvcm1hdHRlZCBkZWJ1ZyBwcmludHMsIGFuZCBzdXBwb3J0cyBzdGFuZGFyZAor ICogIGFuZCBEdWt0YXBlIHNwZWNpZmljIGZvcm1hdHRlcnMuICBTZWUgZHVrX2RlYnVnX3ZzbnBy aW50Zi5jIGZvciBkZXRhaWxzLgorICoKKyAqICBEVUtfRCh4KSwgRFVLX0REKHgpLCBhbmQgRFVL X0RERCh4KSBhcmUgdXNlZCB0b2dldGhlciB3aXRoIGxvZyBtYWNyb3MKKyAqICBmb3IgdGVjaG5p Y2FsIHJlYXNvbnMuICBUaGV5IGFyZSBjb25jcmV0ZWx5IHVzZWQgdG8gaGlkZSAneCcgZnJvbSB0 aGUKKyAqICBjb21waWxlciB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGxvZyBsZXZlbCBpcyBkaXNh YmxlZC4gIFRoaXMgYWxsb3dzCisgKiAgY2xlYW4gYnVpbGRzIG9uIG5vbi1DOTkgY29tcGlsZXJz LCBhdCB0aGUgY29zdCBvZiBtb3JlIHZlcmJvc2UgY29kZS4KKyAqICBFeGFtcGxlczoKKyAqCisg KiAgICBEVUtfRChEVUtfRFBSSU5UKCJmb28iKSk7CisgKiAgICBEVUtfREQoRFVLX0REUFJJTlQo ImZvbyIpKTsKKyAqICAgIERVS19EREQoRFVLX0RERFBSSU5UKCJmb28iKSk7CisgKgorICogIFRo aXMgYXBwcm9hY2ggaXMgcHJlZmVyYWJsZSB0byB0aGUgb2xkICJkb3VibGUgcGFyZW50aGVzZXMi IGhhY2sgYmVjYXVzZQorICogIGRvdWJsZSBwYXJlbnRoZXNlcyBtYWtlIHRoZSBDOTkgc29sdXRp b24gd29yc2U6IF9fRklMRV9fIGFuZCBfX0xJTkVfXyBjYW4KKyAqICBubyBsb25nZXIgYmUgYWRk ZWQgdHJhbnNwYXJlbnRseSB3aXRob3V0IGdvaW5nIHRocm91Z2ggZ2xvYmFscywgd2hpY2gKKyAq ICB3b3JrcyBwb29ybHkgd2l0aCB0aHJlYWRpbmcuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19E RUJVR19IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfREVCVUdfSF9JTkNMVURFRAorCisjaWYgZGVm aW5lZChEVUtfVVNFX0RFQlVHKQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAm JiAoRFVLX1VTRV9ERUJVR19MRVZFTCA+PSAwKQorI2RlZmluZSBEVUtfRCh4KSB4CisjZWxzZQor I2RlZmluZSBEVUtfRCh4KSBkbyB7IH0gd2hpbGUgKDApIC8qIG9taXQgKi8KKyNlbmRpZgorCisj aWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAmJiAoRFVLX1VTRV9ERUJVR19MRVZFTCA+ PSAxKQorI2RlZmluZSBEVUtfREQoeCkgeAorI2Vsc2UKKyNkZWZpbmUgRFVLX0REKHgpIGRvIHsg fSB3aGlsZSAoMCkgLyogb21pdCAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVC VUdfTEVWRUwpICYmIChEVUtfVVNFX0RFQlVHX0xFVkVMID49IDIpCisjZGVmaW5lIERVS19EREQo eCkgeAorI2Vsc2UKKyNkZWZpbmUgRFVLX0RERCh4KSBkbyB7IH0gd2hpbGUgKDApIC8qIG9taXQg Ki8KKyNlbmRpZgorCisvKgorICogIEV4cG9zZWQgZGVidWcgbWFjcm9zOiBkZWJ1Z2dpbmcgZW5h YmxlZAorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfVkFSSUFESUNfTUFDUk9TKQorCisvKiBO b3RlOiBjb21iaW5pbmcgX19GSUxFX18sIF9fTElORV9fLCBhbmQgX19mdW5jX18gaW50byBmbXQg d291bGQgYmUKKyAqIHBvc3NpYmxlIGNvbXBpbGUgdGltZSwgYnV0IHdhc3RlIHNvbWUgc3BhY2Ug d2l0aCBzaGFyZWQgZnVuY3Rpb24gbmFtZXMuCisgKi8KKyNkZWZpbmUgRFVLX19ERUJVR19MT0co bGV2LC4uLikgIGR1a19kZWJ1Z19sb2coKGR1a19pbnRfdCkgKGxldiksIERVS19GSUxFX01BQ1JP LCAoZHVrX2ludF90KSBEVUtfTElORV9NQUNSTywgRFVLX0ZVTkNfTUFDUk8sIF9fVkFfQVJHU19f KTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR19MRVZFTCkgJiYgKERVS19VU0VfREVCVUdf TEVWRUwgPj0gMCkKKyNkZWZpbmUgRFVLX0RQUklOVCguLi4pICAgICAgICAgIERVS19fREVCVUdf TE9HKERVS19MRVZFTF9ERUJVRywgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBEVUtfRFBS SU5UKC4uLikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAmJiAo RFVLX1VTRV9ERUJVR19MRVZFTCA+PSAxKQorI2RlZmluZSBEVUtfRERQUklOVCguLi4pICAgICAg ICAgRFVLX19ERUJVR19MT0coRFVLX0xFVkVMX0RERUJVRywgX19WQV9BUkdTX18pCisjZWxzZQor I2RlZmluZSBEVUtfRERQUklOVCguLi4pCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9E RUJVR19MRVZFTCkgJiYgKERVS19VU0VfREVCVUdfTEVWRUwgPj0gMikKKyNkZWZpbmUgRFVLX0RE RFBSSU5UKC4uLikgICAgICAgIERVS19fREVCVUdfTE9HKERVS19MRVZFTF9ERERFQlVHLCBfX1ZB X0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIERVS19ERERQUklOVCguLi4pCisjZW5kaWYKKworI2Vs c2UgIC8qIERVS19VU0VfVkFSSUFESUNfTUFDUk9TICovCisKKyNkZWZpbmUgRFVLX19ERUJVR19T VEFTSChsZXYpICAgIFwKKwkodm9pZCkgRFVLX1NOUFJJTlRGKGR1a19kZWJ1Z19maWxlX3N0YXNo LCBEVUtfREVCVUdfU1RBU0hfU0laRSwgIiVzIiwgKGNvbnN0IGNoYXIgKikgRFVLX0ZJTEVfTUFD Uk8pLCBcCisJKHZvaWQpIChkdWtfZGVidWdfZmlsZV9zdGFzaFtEVUtfREVCVUdfU1RBU0hfU0la RSAtIDFdID0gKGNoYXIpIDApLCBcCisJKHZvaWQpIChkdWtfZGVidWdfbGluZV9zdGFzaCA9IChk dWtfaW50X3QpIERVS19MSU5FX01BQ1JPKSwgXAorCSh2b2lkKSBEVUtfU05QUklOVEYoZHVrX2Rl YnVnX2Z1bmNfc3Rhc2gsIERVS19ERUJVR19TVEFTSF9TSVpFLCAiJXMiLCAoY29uc3QgY2hhciAq KSBEVUtfRlVOQ19NQUNSTyksIFwKKwkodm9pZCkgKGR1a19kZWJ1Z19mdW5jX3N0YXNoW0RVS19E RUJVR19TVEFTSF9TSVpFIC0gMV0gPSAoY2hhcikgMCksIFwKKwkodm9pZCkgKGR1a19kZWJ1Z19s ZXZlbF9zdGFzaCA9IChsZXYpKQorCisvKiBXaXRob3V0IHZhcmlhZGljIG1hY3JvcyByZXNvcnQg dG8gY29tbWEgZXhwcmVzc2lvbiB0cmlja2VyeSB0byBoYW5kbGUgZGVidWcKKyAqIHByaW50cy4g IFRoaXMgZ2VuZXJhdGVzIGEgbG90IG9mIGhhcm1sZXNzIHdhcm5pbmdzLiAgVGhlc2UgaGFja3Mg YXJlIG5vdAorICogbmVlZGVkIG5vcm1hbGx5IGJlY2F1c2UgRFVLX0QoKSBhbmQgZnJpZW5kcyB3 aWxsIGhpZGUgdGhlIGVudGlyZSBkZWJ1ZyBsb2cKKyAqIHN0YXRlbWVudCBmcm9tIHRoZSBjb21w aWxlci4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAmJiAoRFVLX1VT RV9ERUJVR19MRVZFTCA+PSAwKQorI2RlZmluZSBEVUtfRFBSSU5UICBEVUtfX0RFQlVHX1NUQVNI KERVS19MRVZFTF9ERUJVRyksICh2b2lkKSBkdWtfZGVidWdfbG9nICAvKiBhcmdzIGdvIGhlcmUg aW4gcGFyZW5zICovCisjZWxzZQorI2RlZmluZSBEVUtfRFBSSU5UICAwICYmIC8qIGFyZ3MgZ28g aGVyZSBhcyBhIGNvbW1hIGV4cHJlc3Npb24gaW4gcGFyZW5zICovCisjZW5kaWYKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9ERUJVR19MRVZFTCkgJiYgKERVS19VU0VfREVCVUdfTEVWRUwgPj0gMSkK KyNkZWZpbmUgRFVLX0REUFJJTlQgIERVS19fREVCVUdfU1RBU0goRFVLX0xFVkVMX0RERUJVRyks ICh2b2lkKSBkdWtfZGVidWdfbG9nICAvKiBhcmdzIGdvIGhlcmUgaW4gcGFyZW5zICovCisjZWxz ZQorI2RlZmluZSBEVUtfRERQUklOVCAgMCAmJiAvKiBhcmdzICovCisjZW5kaWYKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9ERUJVR19MRVZFTCkgJiYgKERVS19VU0VfREVCVUdfTEVWRUwgPj0gMikK KyNkZWZpbmUgRFVLX0RERFBSSU5UICBEVUtfX0RFQlVHX1NUQVNIKERVS19MRVZFTF9ERERFQlVH KSwgKHZvaWQpIGR1a19kZWJ1Z19sb2cgIC8qIGFyZ3MgZ28gaGVyZSBpbiBwYXJlbnMgKi8KKyNl bHNlCisjZGVmaW5lIERVS19ERERQUklOVCAgMCAmJiAvKiBhcmdzICovCisjZW5kaWYKKworI2Vu ZGlmICAvKiBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUyAqLworCisjZWxzZSAgLyogRFVLX1VTRV9E RUJVRyAqLworCisvKgorICogIEV4cG9zZWQgZGVidWcgbWFjcm9zOiBkZWJ1Z2dpbmcgZGlzYWJs ZWQKKyAqLworCisjZGVmaW5lIERVS19EKHgpIGRvIHsgfSB3aGlsZSAoMCkgLyogb21pdCAqLwor I2RlZmluZSBEVUtfREQoeCkgZG8geyB9IHdoaWxlICgwKSAvKiBvbWl0ICovCisjZGVmaW5lIERV S19EREQoeCkgZG8geyB9IHdoaWxlICgwKSAvKiBvbWl0ICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfVkFSSUFESUNfTUFDUk9TKQorCisjZGVmaW5lIERVS19EUFJJTlQoLi4uKQorI2RlZmluZSBE VUtfRERQUklOVCguLi4pCisjZGVmaW5lIERVS19ERERQUklOVCguLi4pCisKKyNlbHNlICAvKiBE VUtfVVNFX1ZBUklBRElDX01BQ1JPUyAqLworCisjZGVmaW5lIERVS19EUFJJTlQgICAgMCAmJiAv KiBhcmdzIGdvIGhlcmUgYXMgYSBjb21tYSBleHByZXNzaW9uIGluIHBhcmVucyAqLworI2RlZmlu ZSBEVUtfRERQUklOVCAgIDAgJiYgLyogYXJncyAqLworI2RlZmluZSBEVUtfREREUFJJTlQgIDAg JiYgLyogYXJncyAqLworCisjZW5kaWYgIC8qIERVS19VU0VfVkFSSUFESUNfTUFDUk9TICovCisK KyNlbmRpZiAgLyogRFVLX1VTRV9ERUJVRyAqLworCisvKgorICogIFN0cnVjdHMKKyAqLworCisj aWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorc3RydWN0IGR1a19maXhlZGJ1ZmZlciB7CisJZHVr X3VpbnQ4X3QgKmJ1ZmZlcjsKKwlkdWtfc2l6ZV90IGxlbmd0aDsKKwlkdWtfc2l6ZV90IG9mZnNl dDsKKwlkdWtfYm9vbF90IHRydW5jYXRlZDsKK307CisjZW5kaWYKKworLyoKKyAqICBQcm90b3R5 cGVzCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19pbnRfdCBkdWtfZGVidWdfdnNucHJpbnRmKGNoYXIgKnN0ciwgZHVrX3NpemVfdCBzaXpl LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApOworI2lmIDAgIC8qdW51c2VkKi8KK0RV S19JTlRFUk5BTF9ERUNMIGR1a19pbnRfdCBkdWtfZGVidWdfc25wcmludGYoY2hhciAqc3RyLCBk dWtfc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyNlbmRpZgorRFVLX0lO VEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVidWdfZm9ybWF0X2Z1bmNwdHIoY2hhciAqYnVmLCBkdWtf c2l6ZV90IGJ1Zl9zaXplLCBkdWtfdWludDhfdCAqZnB0ciwgZHVrX3NpemVfdCBmcHRyX3NpemUp OworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZBUklBRElDX01BQ1JPUykKK0RVS19JTlRFUk5BTF9E RUNMIHZvaWQgZHVrX2RlYnVnX2xvZyhkdWtfaW50X3QgbGV2ZWwsIGNvbnN0IGNoYXIgKmZpbGUs IGR1a19pbnRfdCBsaW5lLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmbXQsIC4uLik7 CisjZWxzZSAgLyogRFVLX1VTRV9WQVJJQURJQ19NQUNST1MgKi8KKy8qIHBhcmFtZXRlciBwYXNz aW5nLCBub3QgdGhyZWFkIHNhZmUgKi8KKyNkZWZpbmUgRFVLX0RFQlVHX1NUQVNIX1NJWkUgIDEy OAorI2lmICFkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKK0RVS19JTlRFUk5BTF9ERUNMIGNoYXIg ZHVrX2RlYnVnX2ZpbGVfc3Rhc2hbRFVLX0RFQlVHX1NUQVNIX1NJWkVdOworRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX2ludF90IGR1a19kZWJ1Z19saW5lX3N0YXNoOworRFVLX0lOVEVSTkFMX0RFQ0wg Y2hhciBkdWtfZGVidWdfZnVuY19zdGFzaFtEVUtfREVCVUdfU1RBU0hfU0laRV07CitEVUtfSU5U RVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX2RlYnVnX2xldmVsX3N0YXNoOworI2VuZGlmCitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19kZWJ1Z19sb2coY29uc3QgY2hhciAqZm10LCAuLi4pOwor I2VuZGlmICAvKiBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUyAqLworCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19mYl9wdXRfYnl0ZXMoZHVrX2ZpeGVkYnVmZmVyICpmYiwgY29uc3QgZHVrX3Vp bnQ4X3QgKmJ1ZmZlciwgZHVrX3NpemVfdCBsZW5ndGgpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9p ZCBkdWtfZmJfcHV0X2J5dGUoZHVrX2ZpeGVkYnVmZmVyICpmYiwgZHVrX3VpbnQ4X3QgeCk7CitE VUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19mYl9wdXRfY3N0cmluZyhkdWtfZml4ZWRidWZmZXIg KmZiLCBjb25zdCBjaGFyICp4KTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2ZiX3Nwcmlu dGYoZHVrX2ZpeGVkYnVmZmVyICpmYiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworRFVLX0lOVEVS TkFMX0RFQ0wgdm9pZCBkdWtfZmJfcHV0X2Z1bmNwdHIoZHVrX2ZpeGVkYnVmZmVyICpmYiwgZHVr X3VpbnQ4X3QgKmZwdHIsIGR1a19zaXplX3QgZnB0cl9zaXplKTsKK0RVS19JTlRFUk5BTF9ERUNM IGR1a19ib29sX3QgZHVrX2ZiX2lzX2Z1bGwoZHVrX2ZpeGVkYnVmZmVyICpmYik7CisKKyNlbmRp ZiAgLyogRFVLX1VTRV9ERUJVRyAqLworCisjZW5kaWYgIC8qIERVS19ERUJVR19IX0lOQ0xVREVE ICovCisvKiAjaW5jbHVkZSBkdWtfZXJyb3IuaCAqLworLyoKKyAqICBFcnJvciBoYW5kbGluZyBt YWNyb3MsIGFzc2VydGlvbiBtYWNybywgZXJyb3IgY29kZXMuCisgKgorICogIFRoZXJlIGFyZSB0 aHJlZSB0eXBlcyBvZiAnZXJyb3JzJzoKKyAqCisgKiAgICAxLiBPcmRpbmFyeSBlcnJvcnMgcmVs YXRpdmUgdG8gYSB0aHJlYWQsIGNhdXNlIGEgbG9uZ2ptcCwgY2F0Y2hhYmxlLgorICogICAgMi4g RmF0YWwgZXJyb3JzIHJlbGF0aXZlIHRvIGEgaGVhcCwgY2F1c2UgZmF0YWwgaGFuZGxlciB0byBi ZSBjYWxsZWQuCisgKiAgICAzLiBGYXRhbCBlcnJvcnMgd2l0aG91dCBjb250ZXh0LCBjYXVzZSB0 aGUgZGVmYXVsdCAobm90IGhlYXAgc3BlY2lmaWMpCisgKiAgICAgICBmYXRhbCBoYW5kbGVyIHRv IGJlIGNhbGxlZC4KKyAqCisgKiAgRmF0YWwgZXJyb3JzIHdpdGhvdXQgY29udGV4dCBhcmUgdXNl ZCBieSBkZWJ1ZyBjb2RlIHN1Y2ggYXMgYXNzZXJ0aW9ucy4KKyAqICBCeSBwcm92aWRpbmcgYSBm YXRhbCBlcnJvciBoYW5kbGVyIGZvciBhIER1a3RhcGUgaGVhcCwgdXNlciBjb2RlIGNhbgorICog IGF2b2lkIGZhdGFsIGVycm9ycyB3aXRob3V0IGNvbnRleHQgaW4gbm9uLWRlYnVnIGJ1aWxkcy4K KyAqLworCisjaWYgIWRlZmluZWQoRFVLX0VSUk9SX0hfSU5DTFVERUQpCisjZGVmaW5lIERVS19F UlJPUl9IX0lOQ0xVREVECisKKy8qCisgKiAgRXJyb3IgY29kZXM6IGRlZmluZWQgaW4gZHVrdGFw ZS5oCisgKgorICogIEVycm9yIGNvZGVzIGFyZSB1c2VkIGFzIGEgc2hvcnRoYW5kIHRvIHRocm93 IGV4Y2VwdGlvbnMgZnJvbSBpbnNpZGUKKyAqICB0aGUgaW1wbGVtZW50YXRpb24uICBUaGUgYXBw cm9wcmlhdGUgRUNNQVNjcmlwdCBvYmplY3QgaXMgY29uc3RydWN0ZWQKKyAqICBiYXNlZCBvbiB0 aGUgY29kZS4gIEVDTUFTY3JpcHQgY29kZSB0aHJvd3Mgb2JqZWN0cyBkaXJlY3RseS4gIFRoZSBl cnJvcgorICogIGNvZGVzIGFyZSBkZWZpbmVkIGluIHRoZSBwdWJsaWMgQVBJIGhlYWRlciBiZWNh dXNlIHRoZXkgYXJlIGFsc28gdXNlZAorICogIGJ5IGNhbGxpbmcgY29kZS4KKyAqLworCisvKgor ICogIE5vcm1hbCBlcnJvcgorICoKKyAqICBOb3JtYWwgZXJyb3IgaXMgdGhyb3duIHdpdGggYSBs b25nam1wKCkgdGhyb3VnaCB0aGUgY3VycmVudCBzZXRqbXAoKQorICogIGNhdGNocG9pbnQgcmVj b3JkIGluIHRoZSBkdWtfaGVhcC4gIFRoZSAnY3Vycl90aHJlYWQnIG9mIHRoZSBkdWtfaGVhcAor ICogIGlkZW50aWZpZXMgdGhlIHRocm93aW5nIHRocmVhZC4KKyAqCisgKiAgRXJyb3IgZm9ybWF0 dGluZyBpcyB1c3VhbGx5IHVubmVjZXNzYXJ5LiAgVGhlIGVycm9yIG1hY3JvcyBwcm92aWRlIGEK KyAqICB6ZXJvIGFyZ3VtZW50IHZlcnNpb24gKG5vIGZvcm1hdHRpbmcpIGFuZCBzZXBhcmF0ZSBt YWNyb3MgZm9yIHNtYWxsCisgKiAgYXJndW1lbnQgY291bnRzLiAgVmFyaWFkaWMgbWFjcm9zIGFy ZSBub3QgdXNlZCB0byBhdm9pZCBwb3J0YWJpbGl0eQorICogIGlzc3VlcyBhbmQgYXZvaWQgdGhl IG5lZWQgZm9yIHN0YXNoLWJhc2VkIHdvcmthcm91bmRzIHdoZW4gdGhleSdyZSBub3QKKyAqICBh dmFpbGFibGUuICBWYXJhcmcgY2FsbHMgYXJlIGF2b2lkZWQgZm9yIG5vbi1mb3JtYXR0ZWQgZXJy b3IgY2FsbHMKKyAqICBiZWNhdXNlIHZhcmFyZyBjYWxsIHNpdGVzIGFyZSBsYXJnZXIgdGhhbiBu b3JtYWwsIGFuZCB0aGVyZSBhcmUgYSBsb3QKKyAqICBvZiBjYWxsIHNpdGVzIHdpdGggbm8gZm9y bWF0dGluZy4KKyAqCisgKiAgTm90ZSB0aGF0IHNwZWNpYWwgZm9ybWF0dGluZyBwcm92aWRlZCBi eSBkZWJ1ZyBtYWNyb3MgaXMgTk9UIGF2YWlsYWJsZS4KKyAqCisgKiAgVGhlIF9SQVcgdmFyaWFu dHMgYWxsb3cgdGhlIGNhbGxlciB0byBzcGVjaWZ5IGZpbGUgYW5kIGxpbmUuICBUaGlzIG1ha2Vz CisgKiAgaXQgZWFzaWVyIHRvIHdyaXRlIGNoZWNrZWQgY2FsbHMgd2hpY2ggd2FudCB0byB1c2Ug dGhlIGNhbGwgc2l0ZSBvZiB0aGUKKyAqICBjaGVja2VkIGZ1bmN0aW9uLCBub3QgdGhlIGVycm9y IG1hY3JvIGNhbGwgaW5zaWRlIHRoZSBjaGVja2VkIGZ1bmN0aW9uLgorICovCisKKyNpZiBkZWZp bmVkKERVS19VU0VfVkVSQk9TRV9FUlJPUlMpCisKKy8qIEJlY2F1c2UgdGhlcmUgYXJlIHF1aXRl IG1hbnkgY2FsbCBzaXRlcywgcGFjayBlcnJvciBjb2RlIChyZXF1aXJlIGF0IG1vc3QKKyAqIDgt Yml0KSBpbnRvIGEgc2luZ2xlIGFyZ3VtZW50LgorICovCisjZGVmaW5lIERVS19FUlJPUih0aHIs ZXJyLG1zZykgZG8geyBcCisJCWR1a19lcnJjb2RlX3QgZHVrX19lcnIgPSAoZXJyKTsgZHVrX2lu dF90IGR1a19fbGluZSA9IChkdWtfaW50X3QpIERVS19MSU5FX01BQ1JPOyBcCisJCURVS19BU1NF UlQoZHVrX19lcnIgPj0gMCAmJiBkdWtfX2VyciA8PSAweGZmKTsgRFVLX0FTU0VSVChkdWtfX2xp bmUgPj0gMCAmJiBkdWtfX2xpbmUgPD0gMHgwMGZmZmZmZkwpOyBcCisJCWR1a19lcnJfaGFuZGxl X2Vycm9yKCh0aHIpLCBEVUtfRklMRV9NQUNSTywgKCgoZHVrX3VpbnRfdCkgZHVrX19lcnIpIDw8 IDI0KSB8ICgoZHVrX3VpbnRfdCkgZHVrX19saW5lKSwgKG1zZykpOyBcCisJfSB3aGlsZSAoMCkK KyNkZWZpbmUgRFVLX0VSUk9SX1JBVyh0aHIsZmlsZSxsaW5lLGVycixtc2cpIGRvIHsgXAorCQlk dWtfZXJyY29kZV90IGR1a19fZXJyID0gKGVycik7IGR1a19pbnRfdCBkdWtfX2xpbmUgPSAoZHVr X2ludF90KSAobGluZSk7IFwKKwkJRFVLX0FTU0VSVChkdWtfX2VyciA+PSAwICYmIGR1a19fZXJy IDw9IDB4ZmYpOyBEVUtfQVNTRVJUKGR1a19fbGluZSA+PSAwICYmIGR1a19fbGluZSA8PSAweDAw ZmZmZmZmTCk7IFwKKwkJZHVrX2Vycl9oYW5kbGVfZXJyb3IoKHRociksIChmaWxlKSwgKCgoZHVr X3VpbnRfdCkgZHVrX19lcnIpIDw8IDI0KSB8ICgoZHVrX3VpbnRfdCkgZHVrX19saW5lKSwgKG1z ZykpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfRVJST1JfRk1UMSh0aHIsZXJyLGZt dCxhcmcxKSBkbyB7IFwKKwkJZHVrX2VycmNvZGVfdCBkdWtfX2VyciA9IChlcnIpOyBkdWtfaW50 X3QgZHVrX19saW5lID0gKGR1a19pbnRfdCkgRFVLX0xJTkVfTUFDUk87IFwKKwkJRFVLX0FTU0VS VChkdWtfX2VyciA+PSAwICYmIGR1a19fZXJyIDw9IDB4ZmYpOyBEVUtfQVNTRVJUKGR1a19fbGlu ZSA+PSAwICYmIGR1a19fbGluZSA8PSAweDAwZmZmZmZmTCk7IFwKKwkJZHVrX2Vycl9oYW5kbGVf ZXJyb3JfZm10KCh0aHIpLCBEVUtfRklMRV9NQUNSTywgKCgoZHVrX3VpbnRfdCkgZHVrX19lcnIp IDw8IDI0KSB8ICgoZHVrX3VpbnRfdCkgZHVrX19saW5lKSwgKGZtdCksIChhcmcxKSk7IFwKKwl9 IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfUkFXX0ZNVDEodGhyLGZpbGUsbGluZSxlcnIs Zm10LGFyZzEpIGRvIHsgXAorCQlkdWtfZXJyY29kZV90IGR1a19fZXJyID0gKGVycik7IGR1a19p bnRfdCBkdWtfX2xpbmUgPSAoZHVrX2ludF90KSAobGluZSk7IFwKKwkJRFVLX0FTU0VSVChkdWtf X2VyciA+PSAwICYmIGR1a19fZXJyIDw9IDB4ZmYpOyBEVUtfQVNTRVJUKGR1a19fbGluZSA+PSAw ICYmIGR1a19fbGluZSA8PSAweDAwZmZmZmZmTCk7IFwKKwkJZHVrX2Vycl9oYW5kbGVfZXJyb3Jf Zm10KCh0aHIpLCAoZmlsZSksICgoKGR1a191aW50X3QpIGR1a19fZXJyKSA8PCAyNCkgfCAoKGR1 a191aW50X3QpIGR1a19fbGluZSksIChmbXQpLCAoYXJnMSkpOyBcCisJfSB3aGlsZSAoMCkKKwor I2RlZmluZSBEVUtfRVJST1JfRk1UMih0aHIsZXJyLGZtdCxhcmcxLGFyZzIpIGRvIHsgXAorCQlk dWtfZXJyY29kZV90IGR1a19fZXJyID0gKGVycik7IGR1a19pbnRfdCBkdWtfX2xpbmUgPSAoZHVr X2ludF90KSBEVUtfTElORV9NQUNSTzsgXAorCQlEVUtfQVNTRVJUKGR1a19fZXJyID49IDAgJiYg ZHVrX19lcnIgPD0gMHhmZik7IERVS19BU1NFUlQoZHVrX19saW5lID49IDAgJiYgZHVrX19saW5l IDw9IDB4MDBmZmZmZmZMKTsgXAorCQlkdWtfZXJyX2hhbmRsZV9lcnJvcl9mbXQoKHRociksIERV S19GSUxFX01BQ1JPLCAoKChkdWtfdWludF90KSBkdWtfX2VycikgPDwgMjQpIHwgKChkdWtfdWlu dF90KSBkdWtfX2xpbmUpLCAoZm10KSwgKGFyZzEpLCAoYXJnMikpOyBcCisJfSB3aGlsZSAoMCkK KyNkZWZpbmUgRFVLX0VSUk9SX1JBV19GTVQyKHRocixmaWxlLGxpbmUsZXJyLGZtdCxhcmcxLGFy ZzIpIGRvIHsgXAorCQlkdWtfZXJyY29kZV90IGR1a19fZXJyID0gKGVycik7IGR1a19pbnRfdCBk dWtfX2xpbmUgPSAoZHVrX2ludF90KSAobGluZSk7IFwKKwkJRFVLX0FTU0VSVChkdWtfX2VyciA+ PSAwICYmIGR1a19fZXJyIDw9IDB4ZmYpOyBEVUtfQVNTRVJUKGR1a19fbGluZSA+PSAwICYmIGR1 a19fbGluZSA8PSAweDAwZmZmZmZmTCk7IFwKKwkJZHVrX2Vycl9oYW5kbGVfZXJyb3JfZm10KCh0 aHIpLCAoZmlsZSksICgoKGR1a191aW50X3QpIGR1a19fZXJyKSA8PCAyNCkgfCAoKGR1a191aW50 X3QpIGR1a19fbGluZSksIChmbXQpLCAoYXJnMSksIChhcmcyKSk7IFwKKwl9IHdoaWxlICgwKQor CisjZGVmaW5lIERVS19FUlJPUl9GTVQzKHRocixlcnIsZm10LGFyZzEsYXJnMixhcmczKSBkbyB7 IFwKKwkJZHVrX2VycmNvZGVfdCBkdWtfX2VyciA9IChlcnIpOyBkdWtfaW50X3QgZHVrX19saW5l ID0gKGR1a19pbnRfdCkgRFVLX0xJTkVfTUFDUk87IFwKKwkJRFVLX0FTU0VSVChkdWtfX2VyciA+ PSAwICYmIGR1a19fZXJyIDw9IDB4ZmYpOyBEVUtfQVNTRVJUKGR1a19fbGluZSA+PSAwICYmIGR1 a19fbGluZSA8PSAweDAwZmZmZmZmTCk7IFwKKwkJZHVrX2Vycl9oYW5kbGVfZXJyb3JfZm10KCh0 aHIpLCBEVUtfRklMRV9NQUNSTywgKCgoZHVrX3VpbnRfdCkgZHVrX19lcnIpIDw8IDI0KSB8ICgo ZHVrX3VpbnRfdCkgZHVrX19saW5lKSwgKGZtdCksIChhcmcxKSwgKGFyZzIpLCAoYXJnMykpOyBc CisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1JBV19GTVQzKHRocixmaWxlLGxpbmUs ZXJyLGZtdCxhcmcxLGFyZzIsYXJnMykgZG8geyBcCisJCWR1a19lcnJjb2RlX3QgZHVrX19lcnIg PSAoZXJyKTsgZHVrX2ludF90IGR1a19fbGluZSA9IChkdWtfaW50X3QpIChsaW5lKTsgXAorCQlE VUtfQVNTRVJUKGR1a19fZXJyID49IDAgJiYgZHVrX19lcnIgPD0gMHhmZik7IERVS19BU1NFUlQo ZHVrX19saW5lID49IDAgJiYgZHVrX19saW5lIDw9IDB4MDBmZmZmZmZMKTsgXAorCQlkdWtfZXJy X2hhbmRsZV9lcnJvcl9mbXQoKHRociksIChmaWxlKSwgKCgoZHVrX3VpbnRfdCkgZHVrX19lcnIp IDw8IDI0KSB8ICgoZHVrX3VpbnRfdCkgZHVrX19saW5lKSwgKGZtdCksIChhcmcxKSwgKGFyZzIp LCAoYXJnMykpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEVUtfRVJST1JfRk1UNCh0aHIs ZXJyLGZtdCxhcmcxLGFyZzIsYXJnMyxhcmc0KSBkbyB7IFwKKwkJZHVrX2VycmNvZGVfdCBkdWtf X2VyciA9IChlcnIpOyBkdWtfaW50X3QgZHVrX19saW5lID0gKGR1a19pbnRfdCkgRFVLX0xJTkVf TUFDUk87IFwKKwkJRFVLX0FTU0VSVChkdWtfX2VyciA+PSAwICYmIGR1a19fZXJyIDw9IDB4ZmYp OyBEVUtfQVNTRVJUKGR1a19fbGluZSA+PSAwICYmIGR1a19fbGluZSA8PSAweDAwZmZmZmZmTCk7 IFwKKwkJZHVrX2Vycl9oYW5kbGVfZXJyb3JfZm10KCh0aHIpLCBEVUtfRklMRV9NQUNSTywgKCgo ZHVrX3VpbnRfdCkgZHVrX19lcnIpIDw8IDI0KSB8ICgoZHVrX3VpbnRfdCkgZHVrX19saW5lKSwg KGZtdCksIChhcmcxKSwgKGFyZzIpLCAoYXJnMyksIChhcmc0KSk7IFwKKwl9IHdoaWxlICgwKQor I2RlZmluZSBEVUtfRVJST1JfUkFXX0ZNVDQodGhyLGZpbGUsbGluZSxlcnIsZm10LGFyZzEsYXJn MixhcmczLGFyZzQpIGRvIHsgXAorCQlkdWtfZXJyY29kZV90IGR1a19fZXJyID0gKGVycik7IGR1 a19pbnRfdCBkdWtfX2xpbmUgPSAoZHVrX2ludF90KSAobGluZSk7IFwKKwkJRFVLX0FTU0VSVChk dWtfX2VyciA+PSAwICYmIGR1a19fZXJyIDw9IDB4ZmYpOyBEVUtfQVNTRVJUKGR1a19fbGluZSA+ PSAwICYmIGR1a19fbGluZSA8PSAweDAwZmZmZmZmTCk7IFwKKwkJZHVrX2Vycl9oYW5kbGVfZXJy b3JfZm10KCh0aHIpLCAoZmlsZSksICgoKGR1a191aW50X3QpIGR1a19fZXJyKSA8PCAyNCkgfCAo KGR1a191aW50X3QpIGR1a19fbGluZSksIChmbXQpLCAoYXJnMSksIChhcmcyKSwgKGFyZzMpLCAo YXJnNCkpOyBcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UgIC8qIERVS19VU0VfVkVSQk9TRV9FUlJP UlMgKi8KKworI2RlZmluZSBEVUtfRVJST1IodGhyLGVycixtc2cpICAgICAgICAgICAgICAgICAg ICBkdWtfZXJyX2hhbmRsZV9lcnJvcigodGhyKSwgKGVycikpCisjZGVmaW5lIERVS19FUlJPUl9S QVcodGhyLGZpbGUsbGluZSxlcnIsbXNnKSAgICAgIGR1a19lcnJfaGFuZGxlX2Vycm9yKCh0aHIp LCAoZXJyKSkKKworI2RlZmluZSBEVUtfRVJST1JfRk1UMSh0aHIsZXJyLGZtdCxhcmcxKSBEVUtf RVJST1IoKHRociksKGVyciksKGZtdCkpCisjZGVmaW5lIERVS19FUlJPUl9SQVdfRk1UMSh0aHIs ZmlsZSxsaW5lLGVycixmbXQsYXJnMSkgRFVLX0VSUk9SX1JBVygodGhyKSwoZmlsZSksKGxpbmUp LChlcnIpLChmbXQpKQorCisjZGVmaW5lIERVS19FUlJPUl9GTVQyKHRocixlcnIsZm10LGFyZzEs YXJnMikgRFVLX0VSUk9SKCh0aHIpLChlcnIpLChmbXQpKQorI2RlZmluZSBEVUtfRVJST1JfUkFX X0ZNVDIodGhyLGZpbGUsbGluZSxlcnIsZm10LGFyZzEsYXJnMikgRFVLX0VSUk9SX1JBVygodGhy KSwoZmlsZSksKGxpbmUpLChlcnIpLChmbXQpKQorCisjZGVmaW5lIERVS19FUlJPUl9GTVQzKHRo cixlcnIsZm10LGFyZzEsYXJnMixhcmczKSBEVUtfRVJST1IoKHRociksKGVyciksKGZtdCkpCisj ZGVmaW5lIERVS19FUlJPUl9SQVdfRk1UMyh0aHIsZmlsZSxsaW5lLGVycixmbXQsYXJnMSxhcmcy LGFyZzMpIERVS19FUlJPUl9SQVcoKHRociksKGZpbGUpLChsaW5lKSwoZXJyKSwoZm10KSkKKwor I2RlZmluZSBEVUtfRVJST1JfRk1UNCh0aHIsZXJyLGZtdCxhcmcxLGFyZzIsYXJnMyxhcmc0KSBE VUtfRVJST1IoKHRociksKGVyciksKGZtdCkpCisjZGVmaW5lIERVS19FUlJPUl9SQVdfRk1UNCh0 aHIsZmlsZSxsaW5lLGVycixmbXQsYXJnMSxhcmcyLGFyZzMsYXJnNCkgRFVLX0VSUk9SX1JBVygo dGhyKSwoZmlsZSksKGxpbmUpLChlcnIpLChmbXQpKQorCisjZW5kaWYgIC8qIERVS19VU0VfVkVS Qk9TRV9FUlJPUlMgKi8KKworLyoKKyAqICBGYXRhbCBlcnJvciB3aXRob3V0IGNvbnRleHQKKyAq CisgKiAgVGhlIG1hY3JvIGlzIGFuIGV4cHJlc3Npb24gdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdp dGggRFVLX0FTU0VSVF9FWFBSKCkuCisgKi8KKworI2RlZmluZSBEVUtfRkFUQUxfV0lUSE9VVF9D T05URVhUKG1zZykgXAorCWR1a19kZWZhdWx0X2ZhdGFsX2hhbmRsZXIoTlVMTCwgKG1zZykpCisK Ky8qCisgKiAgRXJyb3IgdGhyb3dpbmcgaGVscGVycworICoKKyAqICBUaGUgZ29hbCBpcyB0byBw cm92aWRlIHZlcmJvc2UgYW5kIGNvbmZpZ3VyYWJsZSBlcnJvciBtZXNzYWdlcy4gIENhbGwKKyAq ICBzaXRlcyBzaG91bGQgYmUgY2xlYW4gaW4gc291cmNlIGNvZGUgYW5kIGNvbXBpbGUgdG8gYSBz bWFsbCBmb290cHJpbnQuCisgKiAgU21hbGwgZm9vdHByaW50IGlzIGFsc28gdXNlZnVsIGZvciBw ZXJmb3JtYW5jZSBiZWNhdXNlIHNtYWxsIGNvbGQgcGF0aHMKKyAqICByZWR1Y2UgY29kZSBjYWNo ZSBwcmVzc3VyZS4gIEFkZGluZyBtYWNyb3MgaGVyZSBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZXJl CisgKiAgYXJlIGVub3VnaCBjYWxsIHNpdGVzIHRvIGdldCBjb25jcmV0ZSBiZW5lZml0cy4KKyAq CisgKiAgRFVLX0VSUk9SX3h4eCgpIG1hY3JvcyBhcmUgZ2VuZXJpYyBhbmQgY2FuIGJlIHVzZWQg YW55d2hlcmUuCisgKgorICogIERVS19EQ0VSUk9SX3h4eCgpIG1hY3JvcyBjYW4gb25seSBiZSB1 c2VkIGluIER1a3RhcGUvQyBmdW5jdGlvbnMgd2hlcmUKKyAqICB0aGUgInJldHVybiBEVUtfUkVU X3h4eDsiIHNob3J0aGFuZCBpcyBhdmFpbGFibGUgZm9yIGxvdyBtZW1vcnkgdGFyZ2V0cy4KKyAq ICBUaGUgRFVLX0RDRVJST1JfeHh4KCkgbWFjcm9zIGFsd2F5cyBlaXRoZXIgdGhyb3cgb3IgcGVy Zm9ybSBhCisgKiAgJ3JldHVybiBEVUtfUkVUX3h4eCcgZnJvbSB0aGUgY2FsbGluZyBmdW5jdGlv bi4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JTKQorLyogVmVyYm9z ZSBlcnJvcnMgd2l0aCBrZXkvdmFsdWUgc3VtbWFyaWVzIChub24tcGFyYW5vaWQpIG9yIHdpdGhv dXQga2V5L3ZhbHVlCisgKiBzdW1tYXJpZXMgKHBhcmFub2lkLCBmb3Igc29tZSBzZWN1cml0eSBz ZW5zaXRpdmUgZW52aXJvbm1lbnRzKSwgdGhlIHBhcmFub2lkCisgKiB2cy4gbm9uLXBhcmFub2lk IGRpc3RpbmN0aW9uIGFmZmVjdHMgb25seSBhIGZldyBzcGVjaWZpYyBlcnJvcnMuCisgKi8KKyNp ZiBkZWZpbmVkKERVS19VU0VfUEFSQU5PSURfRVJST1JTKQorI2RlZmluZSBEVUtfRVJST1JfUkVR VUlSRV9UWVBFX0lOREVYKHRocixpZHgsZXhwZWN0bmFtZSxsb3dtZW1zdHIpIGRvIHsgXAorCQlk dWtfZXJyX3JlcXVpcmVfdHlwZV9pbmRleCgodGhyKSwgRFVLX0ZJTEVfTUFDUk8sIChkdWtfaW50 X3QpIERVS19MSU5FX01BQ1JPLCAoaWR4KSwgKGV4cGVjdG5hbWUpKTsgXAorCX0gd2hpbGUgKDAp CisjZWxzZSAgLyogRFVLX1VTRV9QQVJBTk9JRF9FUlJPUlMgKi8KKyNkZWZpbmUgRFVLX0VSUk9S X1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsaWR4LGV4cGVjdG5hbWUsbG93bWVtc3RyKSBkbyB7IFwK KwkJZHVrX2Vycl9yZXF1aXJlX3R5cGVfaW5kZXgoKHRociksIERVS19GSUxFX01BQ1JPLCAoZHVr X2ludF90KSBEVUtfTElORV9NQUNSTywgKGlkeCksIChleHBlY3RuYW1lKSk7IFwKKwl9IHdoaWxl ICgwKQorI2VuZGlmICAvKiBEVUtfVVNFX1BBUkFOT0lEX0VSUk9SUyAqLworCisjZGVmaW5lIERV S19FUlJPUl9JTlRFUk5BTCh0aHIpIGRvIHsgXAorCQlkdWtfZXJyX2Vycm9yX2ludGVybmFsKCh0 aHIpLCBEVUtfRklMRV9NQUNSTywgKGR1a19pbnRfdCkgRFVLX0xJTkVfTUFDUk8pOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0RDRVJST1JfSU5URVJOQUwodGhyKSBkbyB7IFwKKwkJRFVL X0VSUk9SX0lOVEVSTkFMKCh0aHIpKTsgXAorCQlyZXR1cm4gMDsgXAorCX0gd2hpbGUgKDApCisj ZGVmaW5lIERVS19FUlJPUl9BTExPQ19GQUlMRUQodGhyKSBkbyB7IFwKKwkJZHVrX2Vycl9lcnJv cl9hbGxvY19mYWlsZWQoKHRociksIERVS19GSUxFX01BQ1JPLCAoZHVrX2ludF90KSBEVUtfTElO RV9NQUNSTyk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfVU5TVVBQT1JURUQo dGhyKSBkbyB7IFwKKwkJRFVLX0VSUk9SKCh0aHIpLCBEVUtfRVJSX0VSUk9SLCBEVUtfU1RSX1VO U1VQUE9SVEVEKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19FUlJPUl9FUlJPUih0aHIs bXNnKSBkbyB7IFwKKwkJZHVrX2Vycl9lcnJvcigodGhyKSwgRFVLX0ZJTEVfTUFDUk8sIChkdWtf aW50X3QpIERVS19MSU5FX01BQ1JPLCAobXNnKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBE VUtfRVJST1JfUkFOR0VfSU5ERVgodGhyLGlkeCkgZG8geyBcCisJCWR1a19lcnJfcmFuZ2VfaW5k ZXgoKHRociksIERVS19GSUxFX01BQ1JPLCAoZHVrX2ludF90KSBEVUtfTElORV9NQUNSTywgKGlk eCkpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1JBTkdFX1BVU0hfQkVZT05E KHRocikgZG8geyBcCisJCWR1a19lcnJfcmFuZ2VfcHVzaF9iZXlvbmQoKHRociksIERVS19GSUxF X01BQ1JPLCAoZHVrX2ludF90KSBEVUtfTElORV9NQUNSTyk7IFwKKwl9IHdoaWxlICgwKQorI2Rl ZmluZSBEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9BUkdTKHRocikgZG8geyBcCisJCURVS19FUlJP Ul9SQU5HRSgodGhyKSwgRFVLX1NUUl9JTlZBTElEX0FSR1MpOyBcCisJfSB3aGlsZSAoMCkKKyNk ZWZpbmUgRFVLX0RDRVJST1JfUkFOR0VfSU5WQUxJRF9BUkdTKHRocikgZG8geyBcCisJCURVS19F UlJPUl9SQU5HRV9JTlZBTElEX0FSR1MoKHRocikpOyBcCisJCXJldHVybiAwOyBcCisJfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1JBTkdFX0lOVkFMSURfQ09VTlQodGhyKSBkbyB7IFwK KwkJRFVLX0VSUk9SX1JBTkdFKCh0aHIpLCBEVUtfU1RSX0lOVkFMSURfQ09VTlQpOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0RDRVJST1JfUkFOR0VfSU5WQUxJRF9DT1VOVCh0aHIpIGRv IHsgXAorCQlEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9DT1VOVCgodGhyKSk7IFwKKwkJcmV0dXJu IDA7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9MRU5H VEgodGhyKSBkbyB7IFwKKwkJRFVLX0VSUk9SX1JBTkdFKCh0aHIpLCBEVUtfU1RSX0lOVkFMSURf TEVOR1RIKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19EQ0VSUk9SX1JBTkdFX0lOVkFM SURfTEVOR1RIKHRocikgZG8geyBcCisJCURVS19FUlJPUl9SQU5HRV9JTlZBTElEX0xFTkdUSCgo dGhyKSk7IFwKKwkJcmV0dXJuIDA7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1Jf UkFOR0UodGhyLG1zZykgZG8geyBcCisJCWR1a19lcnJfcmFuZ2UoKHRociksIERVS19GSUxFX01B Q1JPLCAoZHVrX2ludF90KSBEVUtfTElORV9NQUNSTywgKG1zZykpOyBcCisJfSB3aGlsZSAoMCkK KyNkZWZpbmUgRFVLX0VSUk9SX0VWQUwodGhyLG1zZykgZG8geyBcCisJCURVS19FUlJPUigodGhy KSwgRFVLX0VSUl9FVkFMX0VSUk9SLCAobXNnKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBE VUtfRVJST1JfUkVGRVJFTkNFKHRocixtc2cpIGRvIHsgXAorCQlEVUtfRVJST1IoKHRociksIERV S19FUlJfUkVGRVJFTkNFX0VSUk9SLCAobXNnKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBE VUtfRVJST1JfU1lOVEFYKHRocixtc2cpIGRvIHsgXAorCQlEVUtfRVJST1IoKHRociksIERVS19F UlJfU1lOVEFYX0VSUk9SLCAobXNnKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJS T1JfVFlQRV9JTlZBTElEX0FSR1ModGhyKSBkbyB7IFwKKwkJZHVrX2Vycl90eXBlX2ludmFsaWRf YXJncygodGhyKSwgRFVLX0ZJTEVfTUFDUk8sIChkdWtfaW50X3QpIERVS19MSU5FX01BQ1JPKTsg XAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRo cikgZG8geyBcCisJCURVS19FUlJPUl9UWVBFX0lOVkFMSURfQVJHUygodGhyKSk7IFwKKwkJcmV0 dXJuIDA7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfVFlQRV9JTlZBTElEX1NU QVRFKHRocikgZG8geyBcCisJCWR1a19lcnJfdHlwZV9pbnZhbGlkX3N0YXRlKCh0aHIpLCBEVUtf RklMRV9NQUNSTywgKGR1a19pbnRfdCkgRFVLX0xJTkVfTUFDUk8pOyBcCisJfSB3aGlsZSAoMCkK KyNkZWZpbmUgRFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX1NUQVRFKHRocikgZG8geyBcCisJCURV S19FUlJPUl9UWVBFX0lOVkFMSURfU1RBVEUoKHRocikpOyBcCisJCXJldHVybiAwOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9UUkFQX1JFU1VMVCh0aHIp IGRvIHsgXAorCQlkdWtfZXJyX3R5cGVfaW52YWxpZF90cmFwX3Jlc3VsdCgodGhyKSwgRFVLX0ZJ TEVfTUFDUk8sIChkdWtfaW50X3QpIERVS19MSU5FX01BQ1JPKTsgXAorCX0gd2hpbGUgKDApCisj ZGVmaW5lIERVS19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9UUkFQX1JFU1VMVCh0aHIpIGRvIHsgXAor CQlEVUtfRVJST1JfVFlQRSgodGhyKSwgRFVLX1NUUl9JTlZBTElEX1RSQVBfUkVTVUxUKTsgXAor CX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19FUlJPUl9UWVBFKHRocixtc2cpIGRvIHsgXAorCQlE VUtfRVJST1IoKHRociksIERVS19FUlJfVFlQRV9FUlJPUiwgKG1zZykpOyBcCisJfSB3aGlsZSAo MCkKKyNkZWZpbmUgRFVLX0VSUk9SX1VSSSh0aHIsbXNnKSBkbyB7IFwKKwkJRFVLX0VSUk9SKCh0 aHIpLCBEVUtfRVJSX1VSSV9FUlJPUiwgKG1zZykpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlICAv KiBEVUtfVVNFX1ZFUkJPU0VfRVJST1JTICovCisvKiBOb24tdmVyYm9zZSBlcnJvcnMgZm9yIGxv dyBtZW1vcnkgdGFyZ2V0czogbm8gZmlsZSwgbGluZSwgb3IgbWVzc2FnZS4gKi8KKworI2RlZmlu ZSBEVUtfRVJST1JfUkVRVUlSRV9UWVBFX0lOREVYKHRocixpZHgsZXhwZWN0bmFtZSxsb3dtZW1z dHIpIGRvIHsgXAorCQlkdWtfZXJyX3R5cGUoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBEVUtfRVJST1JfSU5URVJOQUwodGhyKSBkbyB7IFwKKwkJZHVrX2Vycl9lcnJvcigodGhy KSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRENFUlJPUl9JTlRFUk5BTCh0aHIpIGRv IHsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBcCisJCXJldHVybiBEVUtfUkVUX0VSUk9SOyBcCisJ fSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX0FMTE9DX0ZBSUxFRCh0aHIpIGRvIHsgXAor CQlkdWtfZXJyX2Vycm9yKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19FUlJP Ul9VTlNVUFBPUlRFRCh0aHIpIGRvIHsgXAorCQlkdWtfZXJyX2Vycm9yKCh0aHIpKTsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIERVS19FUlJPUl9FUlJPUih0aHIsbXNnKSBkbyB7IFwKKwkJZHVr X2Vycl9lcnJvcigodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfUkFO R0VfSU5ERVgodGhyLGlkeCkgZG8geyBcCisJCWR1a19lcnJfcmFuZ2UoKHRocikpOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1JBTkdFX1BVU0hfQkVZT05EKHRocikgZG8geyBc CisJCWR1a19lcnJfcmFuZ2UoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VS Uk9SX1JBTkdFX0lOVkFMSURfQVJHUyh0aHIpIGRvIHsgXAorCQlkdWtfZXJyX3JhbmdlKCh0aHIp KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19EQ0VSUk9SX1JBTkdFX0lOVkFMSURfQVJH Uyh0aHIpIGRvIHsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBcCisJCXJldHVybiBEVUtfUkVUX1JB TkdFX0VSUk9SOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1JBTkdFX0lOVkFM SURfQ09VTlQodGhyKSBkbyB7IFwKKwkJZHVrX2Vycl9yYW5nZSgodGhyKSk7IFwKKwl9IHdoaWxl ICgwKQorI2RlZmluZSBEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElEX0NPVU5UKHRocikgZG8geyBc CisJCURVS19VTlJFRigodGhyKSk7IFwKKwkJcmV0dXJuIERVS19SRVRfUkFOR0VfRVJST1I7IFwK Kwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9MRU5HVEgodGhy KSBkbyB7IFwKKwkJZHVrX2Vycl9yYW5nZSgodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmlu ZSBEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElEX0xFTkdUSCh0aHIpIGRvIHsgXAorCQlEVUtfVU5S RUYoKHRocikpOyBcCisJCXJldHVybiBEVUtfUkVUX1JBTkdFX0VSUk9SOyBcCisJfSB3aGlsZSAo MCkKKyNkZWZpbmUgRFVLX0VSUk9SX1JBTkdFKHRocixtc2cpIGRvIHsgXAorCQlkdWtfZXJyX3Jh bmdlKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19FUlJPUl9FVkFMKHRocixt c2cpIGRvIHsgXAorCQlkdWtfZXJyX2V2YWwoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZp bmUgRFVLX0VSUk9SX1JFRkVSRU5DRSh0aHIsbXNnKSBkbyB7IFwKKwkJZHVrX2Vycl9yZWZlcmVu Y2UoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX0VSUk9SX1NZTlRBWCh0aHIs bXNnKSBkbyB7IFwKKwkJZHVrX2Vycl9zeW50YXgoKHRocikpOyBcCisJfSB3aGlsZSAoMCkKKyNk ZWZpbmUgRFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocikgZG8geyBcCisJCWR1a19lcnJf dHlwZSgodGhyKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRENFUlJPUl9UWVBFX0lO VkFMSURfQVJHUyh0aHIpIGRvIHsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBcCisJCXJldHVybiBE VUtfUkVUX1RZUEVfRVJST1I7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfVFlQ RV9JTlZBTElEX1NUQVRFKHRocikgZG8geyBcCisJCWR1a19lcnJfdHlwZSgodGhyKSk7IFwKKwl9 IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRENFUlJPUl9UWVBFX0lOVkFMSURfU1RBVEUodGhyKSBk byB7IFwKKwkJZHVrX2Vycl90eXBlKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERV S19FUlJPUl9UWVBFX0lOVkFMSURfVFJBUF9SRVNVTFQodGhyKSBkbyB7IFwKKwkJZHVrX2Vycl90 eXBlKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19EQ0VSUk9SX1RZUEVfSU5W QUxJRF9UUkFQX1JFU1VMVCh0aHIpIGRvIHsgXAorCQlEVUtfVU5SRUYoKHRocikpOyBcCisJCXJl dHVybiBEVUtfUkVUX1RZUEVfRVJST1I7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJS T1JfVFlQRV9JTlZBTElEX1RSQVBfUkVTVUxUKHRocikgZG8geyBcCisJCWR1a19lcnJfdHlwZSgo dGhyKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfRVJST1JfVFlQRSh0aHIsbXNnKSBk byB7IFwKKwkJZHVrX2Vycl90eXBlKCh0aHIpKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERV S19FUlJPUl9VUkkodGhyLG1zZykgZG8geyBcCisJCWR1a19lcnJfdXJpKCh0aHIpKTsgXAorCX0g d2hpbGUgKDApCisjZW5kaWYgIC8qIERVS19VU0VfVkVSQk9TRV9FUlJPUlMgKi8KKworLyoKKyAq ICBBc3NlcnQgbWFjcm86IGZhaWx1cmUgY2F1c2VzIGEgZmF0YWwgZXJyb3IuCisgKgorICogIE5P VEU6IHNpbmNlIHRoZSBhc3NlcnQgbWFjcm8gZG9lc24ndCB0YWtlIGEgaGVhcC9jb250ZXh0IGFy Z3VtZW50LCB0aGVyZSdzCisgKiAgbm8gd2F5IHRvIGxvb2sgdXAgYSBoZWFwL2NvbnRleHQgc3Bl Y2lmaWMgZmF0YWwgZXJyb3IgaGFuZGxlciB3aGljaCBtYXkgaGF2ZQorICogIGJlZW4gZ2l2ZW4g YnkgdGhlIGFwcGxpY2F0aW9uLiAgSW5zdGVhZCwgYXNzZXJ0aW9uIGZhaWx1cmVzIGFsd2F5cyB1 c2UgdGhlCisgKiAgaW50ZXJuYWwgZGVmYXVsdCBmYXRhbCBlcnJvciBoYW5kbGVyOyBpdCBjYW4g YmUgcmVwbGFjZWQgdmlhIGR1a19jb25maWcuaAorICogIGFuZCB0aGVuIGFwcGxpZXMgdG8gYWxs IER1a3RhcGUgaGVhcHMuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQor CisvKiBUaGUgbWVzc2FnZSBzaG91bGQgYmUgYSBjb21waWxlIHRpbWUgY29uc3RhbnQgd2l0aG91 dCBmb3JtYXR0aW5nIChsZXNzIHJpc2spOworICogd2UgZG9uJ3QgY2FyZSBhYm91dCBhc3NlcnRp b24gdGV4dCBzaXplIGJlY2F1c2UgdGhleSdyZSBub3QgdXNlZCBpbiBwcm9kdWN0aW9uCisgKiBi dWlsZHMuCisgKi8KKyNkZWZpbmUgRFVLX0FTU0VSVCh4KSAgZG8geyBcCisJaWYgKCEoeCkpIHsg XAorCQlEVUtfRkFUQUxfV0lUSE9VVF9DT05URVhUKCJhc3NlcnRpb24gZmFpbGVkOiAiICN4IFwK KwkJCSIgKCIgRFVLX0ZJTEVfTUFDUk8gIjoiIERVS19NQUNST19TVFJJTkdJRlkoRFVLX0xJTkVf TUFDUk8pICIpIik7IFwKKwl9IFwKKwl9IHdoaWxlICgwKQorCisvKiBBc3NlcnRpb24gY29tcGF0 aWJsZSBpbnNpZGUgYSBjb21tYSBleHByZXNzaW9uLCBldmFsdWF0ZXMgdG8gdm9pZC4gKi8KKyNk ZWZpbmUgRFVLX0FTU0VSVF9FWFBSKHgpIFwKKwkoKHZvaWQpICgoeCkgPyAwIDogKERVS19GQVRB TF9XSVRIT1VUX0NPTlRFWFQoImFzc2VydGlvbiBmYWlsZWQ6ICIgI3ggXAorCQkJCSIgKCIgRFVL X0ZJTEVfTUFDUk8gIjoiIERVS19NQUNST19TVFJJTkdJRlkoRFVLX0xJTkVfTUFDUk8pICIpIiks IDApKSkKKworI2Vsc2UgIC8qIERVS19VU0VfQVNTRVJUSU9OUyAqLworCisjZGVmaW5lIERVS19B U1NFUlQoeCkgIGRvIHsgLyogYXNzZXJ0aW9uIG9taXR0ZWQgKi8gfSB3aGlsZSAoMCkKKworI2Rl ZmluZSBEVUtfQVNTRVJUX0VYUFIoeCkgICgodm9pZCkgMCkKKworI2VuZGlmICAvKiBEVUtfVVNF X0FTU0VSVElPTlMgKi8KKworLyogdGhpcyB2YXJpYW50IGlzIHVzZWQgd2hlbiBhbiBhc3NlcnQg d291bGQgZ2VuZXJhdGUgYSBjb21waWxlIHdhcm5pbmcgYnkKKyAqIGJlaW5nIGFsd2F5cyB0cnVl IChlLmcuID49IDAgY29tcGFyaXNvbiBmb3IgYW4gdW5zaWduZWQgdmFsdWUKKyAqLworI2RlZmlu ZSBEVUtfQVNTRVJUX0RJU0FCTEUoeCkgIGRvIHsgLyogYXNzZXJ0aW9uIGRpc2FibGVkICovIH0g d2hpbGUgKDApCisKKy8qCisgKiAgQXNzZXJ0aW9uIGhlbHBlcnMKKyAqLworCisjaWYgZGVmaW5l ZChEVUtfVVNFX0FTU0VSVElPTlMpICYmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJ TkcpCisjZGVmaW5lIERVS19BU1NFUlRfUkVGQ09VTlRfTk9OWkVST19IRUFQSERSKGgpICBkbyB7 IFwKKwkJRFVLX0FTU0VSVCgoaCkgPT0gTlVMTCB8fCBEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQo KGR1a19oZWFwaGRyICopIChoKSkgPiAwKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19B U1NFUlRfUkVGQ09VTlRfTk9OWkVST19UVkFMKHR2KSAgZG8geyBcCisJCWlmICgodHYpICE9IE5V TEwgJiYgRFVLX1RWQUxfSVNfSEVBUF9BTExPQ0FURUQoKHR2KSkpIHsgXAorCQkJRFVLX0FTU0VS VChEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoRFVLX1RWQUxfR0VUX0hFQVBIRFIoKHR2KSkpID4g MCk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19BU1NFUlRfUkVG Q09VTlRfTk9OWkVST19IRUFQSERSKGgpICAvKiBubyByZWZjb3VudCBjaGVjayAqLworI2RlZmlu ZSBEVUtfQVNTRVJUX1JFRkNPVU5UX05PTlpFUk9fVFZBTCh0dikgICAgLyogbm8gcmVmY291bnQg Y2hlY2sgKi8KKyNlbmRpZgorCisjZGVmaW5lIERVS19BU1NFUlRfVE9QKGN0eCxuKSAgRFVLX0FT U0VSVCgoZHVrX2lkeF90KSBkdWtfZ2V0X3RvcCgoY3R4KSkgPT0gKGR1a19pZHhfdCkgKG4pKQor CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpICYmIGRlZmluZWQoRFVLX1VTRV9QQUNL RURfVFZBTCkKKyNkZWZpbmUgRFVLX0FTU0VSVF9ET1VCTEVfSVNfTk9STUFMSVpFRChkdmFsKSAg ZG8geyBcCisJCWR1a19kb3VibGVfdW5pb24gZHVrX19hc3NlcnRfdG1wX2R1OyBcCisJCWR1a19f YXNzZXJ0X3RtcF9kdS5kID0gKGR2YWwpOyBcCisJCURVS19BU1NFUlQoRFVLX0RCTFVOSU9OX0lT X05PUk1BTElaRUQoJmR1a19fYXNzZXJ0X3RtcF9kdSkpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNl CisjZGVmaW5lIERVS19BU1NFUlRfRE9VQkxFX0lTX05PUk1BTElaRUQoZHZhbCkgIC8qIG5vcCAq LworI2VuZGlmCisKKyNkZWZpbmUgRFVLX0FTU0VSVF9WU19TUEFDRSh0aHIpIFwKKwlEVUtfQVNT RVJUKHRoci0+dmFsc3RhY2tfdG9wIDwgdGhyLT52YWxzdGFja19lbmQpCisKKy8qCisgKiAgSGVs cGVyIHRvIGluaXRpYWxpemUgYSBtZW1vcnkgYXJlYSAoZS5nLiBzdHJ1Y3QpIHdpdGggZ2FyYmFn ZSB3aGVuCisgKiAgYXNzZXJ0aW9ucyBlbmFibGVkLgorICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfQVNTRVJUSU9OUykKKyNkZWZpbmUgRFVLX0FTU0VSVF9TRVRfR0FSQkFHRShwdHIsc2l6ZSkg ZG8geyBcCisJCWR1a19tZW1zZXRfdW5zYWZlKCh2b2lkICopIChwdHIpLCAweDVhLCBzaXplKTsg XAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEVUtfQVNTRVJUX1NFVF9HQVJCQUdFKHB0 cixzaXplKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogIEhlbHBlciBmb3IgdmFs c3RhY2sgc3BhY2UKKyAqCisgKiAgQ2FsbGVyIG9mIERVS19BU1NFUlRfVkFMU1RBQ0tfU1BBQ0Uo KSBlc3RpbWF0ZXMgdGhlIG51bWJlciBvZiBmcmVlIHN0YWNrIGVudHJpZXMKKyAqICByZXF1aXJl ZCBmb3IgaXRzIG93biB1c2UsIGFuZCBhbnkgY2hpbGQgY2FsbHMgd2hpY2ggYXJlIG5vdCAoYSkg RHVrdGFwZSBBUEkgY2FsbHMKKyAqICBvciAoYikgRHVrdGFwZSBjYWxscyB3aGljaCBpbnZvbHZl IGV4dGVuZGluZyB0aGUgdmFsc3RhY2sgKGUuZy4gZ2V0dGVyIGNhbGwpLgorICovCisKKyNkZWZp bmUgRFVLX1ZBTFNUQUNLX0FTU0VSVF9FWFRSQSAgNSAgLyogdGhpcyBpcyBhZGRlZCB0byBjaGVj a3MgdG8gYWxsb3cgZm9yIER1a3RhcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogQVBJIGNhbGxzIGluIGFkZGl0aW9uIHRvIGZ1bmN0aW9uJ3Mgb3duIHVzZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKERVS19V U0VfQVNTRVJUSU9OUykKKyNkZWZpbmUgRFVLX0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIsbikg ICBkbyB7IFwKKwkJRFVLX0FTU0VSVCgodGhyKSAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKCh0 aHIpLT52YWxzdGFja19lbmQgLSAodGhyKS0+dmFsc3RhY2tfdG9wID49IChuKSArIERVS19WQUxT VEFDS19BU1NFUlRfRVhUUkEpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19B U1NFUlRfVkFMU1RBQ0tfU1BBQ0UodGhyLG4pICAgLyogbm8gdmFsc3RhY2sgc3BhY2UgY2hlY2sg Ki8KKyNlbmRpZgorCisvKgorICogIFByb3RvdHlwZXMKKyAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX1ZFUkJPU0VfRVJST1JTKQorRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZvaWQg ZHVrX2Vycl9oYW5kbGVfZXJyb3IoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5h bWUsIGR1a191aW50X3QgbGluZV9hbmRfY29kZSwgY29uc3QgY2hhciAqbXNnKSk7CitEVUtfTk9S RVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2hhbmRsZV9lcnJvcl9mbXQoZHVr X2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a191aW50X3QgbGluZV9hbmRf Y29kZSwgY29uc3QgY2hhciAqZm10LCAuLi4pKTsKKyNlbHNlICAvKiBEVUtfVVNFX1ZFUkJPU0Vf RVJST1JTICovCitEVUtfTk9SRVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2hh bmRsZV9lcnJvcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfZXJyY29kZV90IGNvZGUpKTsKKyNlbmRp ZiAgLyogRFVLX1VTRV9WRVJCT1NFX0VSUk9SUyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZF UkJPU0VfRVJST1JTKQorRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Vy cl9jcmVhdGVfYW5kX3Rocm93KGR1a19odGhyZWFkICp0aHIsIGR1a19lcnJjb2RlX3QgY29kZSwg Y29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmUpKTsK KyNlbHNlCitEVUtfTk9SRVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2NyZWF0 ZV9hbmRfdGhyb3coZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBjb2RlKSk7CisjZW5k aWYKKworRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Vycm9yX3Rocm93 X2Zyb21fbmVnYXRpdmVfcmMoZHVrX2h0aHJlYWQgKnRociwgZHVrX3JldF90IHJjKSk7CisKKyNk ZWZpbmUgRFVLX0FVR01FTlRfRkxBR19OT0JMQU1FX0ZJTEVMSU5FICAoMVUgPDwgMCkgIC8qIGlm IHNldCwgZG9uJ3QgYmxhbWUgQyBmaWxlL2xpbmUgZm9yIC5maWxlTmFtZSBhbmQgLmxpbmVOdW1i ZXIgKi8KKyNkZWZpbmUgRFVLX0FVR01FTlRfRkxBR19TS0lQX09ORSAgICAgICAgICAoMVUgPDwg MSkgIC8qIGlmIHNldCwgc2tpcCB0b3Btb3N0IGFjdGl2YXRpb24gaW4gdHJhY2ViYWNrIGNvbnN0 cnVjdGlvbiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJST1JfQ1JFQVRFKQor RFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2F1Z21lbnRfZXJyb3JfY3JlYXRlKGR1a19o dGhyZWFkICp0aHIsIGR1a19odGhyZWFkICp0aHJfY2FsbHN0YWNrLCBjb25zdCBjaGFyICpmaWxl bmFtZSwgZHVrX2ludF90IGxpbmUsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpOworI2VuZGlmCisj aWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJST1JfVEhST1cpCitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19lcnJfYXVnbWVudF9lcnJvcl90aHJvdyhkdWtfaHRocmVhZCAqdGhyKTsKKyNl bmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JTKQorI2lmIGRlZmluZWQo RFVLX1VTRV9QQVJBTk9JRF9FUlJPUlMpCitEVUtfTk9SRVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wg dm9pZCBkdWtfZXJyX3JlcXVpcmVfdHlwZV9pbmRleChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBj aGFyICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmVudW1iZXIsIGR1a19pZHhfdCBpZHgsIGNvbnN0 IGNoYXIgKmV4cGVjdF9uYW1lKSk7CisjZWxzZQorRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9E RUNMIHZvaWQgZHVrX2Vycl9yZXF1aXJlX3R5cGVfaW5kZXgoZHVrX2h0aHJlYWQgKnRociwgY29u c3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lbnVtYmVyLCBkdWtfaWR4X3QgaWR4LCBj b25zdCBjaGFyICpleHBlY3RfbmFtZSkpOworI2VuZGlmCitEVUtfTk9SRVRVUk4oRFVLX0lOVEVS TkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2Vycm9yX2ludGVybmFsKGR1a19odGhyZWFkICp0aHIsIGNv bnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlcikpOworRFVLX05PUkVUVVJO KERVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Vycl9lcnJvcl9hbGxvY19mYWlsZWQoZHVrX2h0 aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lbnVtYmVyKSk7 CitEVUtfTk9SRVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2Vycm9yKGR1a19o dGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlciwg Y29uc3QgY2hhciAqbWVzc2FnZSkpOworRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZv aWQgZHVrX2Vycl9yYW5nZV9pbmRleChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpmaWxl bmFtZSwgZHVrX2ludF90IGxpbmVudW1iZXIsIGR1a19pZHhfdCBpZHgpKTsKK0RVS19OT1JFVFVS TihEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19lcnJfcmFuZ2VfcHVzaF9iZXlvbmQoZHVrX2h0 aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lbnVtYmVyKSk7 CitEVUtfTk9SRVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX3JhbmdlKGR1a19o dGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlciwg Y29uc3QgY2hhciAqbWVzc2FnZSkpOworRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZv aWQgZHVrX2Vycl90eXBlX2ludmFsaWRfYXJncyhkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFy ICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmVudW1iZXIpKTsKK0RVS19OT1JFVFVSTihEVUtfSU5U RVJOQUxfREVDTCB2b2lkIGR1a19lcnJfdHlwZV9pbnZhbGlkX3N0YXRlKGR1a19odGhyZWFkICp0 aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlcikpOworRFVLX05P UkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Vycl90eXBlX2ludmFsaWRfdHJhcF9y ZXN1bHQoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBs aW5lbnVtYmVyKSk7CisjZWxzZSAgLyogRFVLX1ZFUkJPU0VfRVJST1JTICovCitEVUtfTk9SRVRV Uk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyX2Vycm9yKGR1a19odGhyZWFkICp0aHIp KTsKK0RVS19OT1JFVFVSTihEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19lcnJfcmFuZ2UoZHVr X2h0aHJlYWQgKnRocikpOworRFVLX05PUkVUVVJOKERVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVr X2Vycl9ldmFsKGR1a19odGhyZWFkICp0aHIpKTsKK0RVS19OT1JFVFVSTihEVUtfSU5URVJOQUxf REVDTCB2b2lkIGR1a19lcnJfcmVmZXJlbmNlKGR1a19odGhyZWFkICp0aHIpKTsKK0RVS19OT1JF VFVSTihEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19lcnJfc3ludGF4KGR1a19odGhyZWFkICp0 aHIpKTsKK0RVS19OT1JFVFVSTihEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19lcnJfdHlwZShk dWtfaHRocmVhZCAqdGhyKSk7CitEVUtfTk9SRVRVUk4oRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBk dWtfZXJyX3VyaShkdWtfaHRocmVhZCAqdGhyKSk7CisjZW5kaWYgLyogRFVLX1ZFUkJPU0VfRVJS T1JTICovCisKK0RVS19OT1JFVFVSTihEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19lcnJfbG9u Z2ptcChkdWtfaHRocmVhZCAqdGhyKSk7CisKK0RVS19OT1JFVFVSTihEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19kZWZhdWx0X2ZhdGFsX2hhbmRsZXIodm9pZCAqdWRhdGEsIGNvbnN0IGNoYXIg Km1zZykpOworCitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19lcnJfc2V0dXBfbGpzdGF0ZTEo ZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBsal90eXBlLCBkdWtfdHZhbCAqdHZf dmFsKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKK0RVS19JTlRFUk5B TF9ERUNMIHZvaWQgZHVrX2Vycl9jaGVja19kZWJ1Z2dlcl9pbnRlZ3JhdGlvbihkdWtfaHRocmVh ZCAqdGhyKTsKKyNlbmRpZgorCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVrX2Vy cm9yX3Byb3RvdHlwZV9mcm9tX2NvZGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBl cnJfY29kZSk7CisKKyNlbmRpZiAgLyogRFVLX0VSUk9SX0hfSU5DTFVERUQgKi8KKy8qICNpbmNs dWRlIGR1a191bmljb2RlLmggKi8KKy8qCisgKiAgVW5pY29kZSBoZWxwZXJzCisgKi8KKworI2lm ICFkZWZpbmVkKERVS19VTklDT0RFX0hfSU5DTFVERUQpCisjZGVmaW5lIERVS19VTklDT0RFX0hf SU5DTFVERUQKKworLyoKKyAqICBVVEYtOCAvIFhVVEYtOCAvIENFU1UtOCBjb25zdGFudHMKKyAq LworCisjZGVmaW5lIERVS19VTklDT0RFX01BWF9YVVRGOF9MRU5HVEggICAgICA3ICAgLyogdXAg dG8gMzYgYml0IGNvZGVwb2ludHMgKi8KKyNkZWZpbmUgRFVLX1VOSUNPREVfTUFYX1hVVEY4X0JN UF9MRU5HVEggIDMgICAvKiBhbGwgY29kZXBvaW50cyB1cCB0byBVK0ZGRkYgKi8KKyNkZWZpbmUg RFVLX1VOSUNPREVfTUFYX0NFU1U4X0xFTkdUSCAgICAgIDYgICAvKiBhbGwgY29kZXBvaW50cyB1 cCB0byBVKzEwRkZGRiAqLworI2RlZmluZSBEVUtfVU5JQ09ERV9NQVhfQ0VTVThfQk1QX0xFTkdU SCAgMyAgIC8qIGFsbCBjb2RlcG9pbnRzIHVwIHRvIFUrRkZGRiAqLworCisvKgorICogIFVzZWZ1 bCBVbmljb2RlIGNvZGVwb2ludHMKKyAqCisgKiAgSW50ZWdlciBjb25zdGFudHMgbXVzdCBiZSBz aWduZWQgdG8gYXZvaWQgdW5leHBlY3RlZCBjb2VyY2lvbnMKKyAqICBpbiBjb21wYXJpc29ucy4K KyAqLworCisjZGVmaW5lIERVS19VTklDT0RFX0NQX1pXTkogICAgICAgICAgICAgICAgICAgMHgy MDBjTCAgLyogemVyby13aWR0aCBub24tam9pbmVyICovCisjZGVmaW5lIERVS19VTklDT0RFX0NQ X1pXSiAgICAgICAgICAgICAgICAgICAgMHgyMDBkTCAgLyogemVyby13aWR0aCBqb2luZXIgKi8K KyNkZWZpbmUgRFVLX1VOSUNPREVfQ1BfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSICAweGZmZmRMICAv KiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcGxhY2VtZW50X2NoYXJhY3RlciNSZXBs YWNlbWVudF9jaGFyYWN0ZXIgKi8KKworLyoKKyAqICBBU0NJSSBjaGFyYWN0ZXIgY29uc3RhbnRz CisgKgorICogIEMgY2hhcmFjdGVyIGxpdGVyYWxzIGxpa2UgJ3gnIGhhdmUgYSBwbGF0Zm9ybSBz cGVjaWZpYyB2YWx1ZSBhbmQgZG8KKyAqICBub3QgbWF0Y2ggQVNDSUkgKFVURi04KSB2YWx1ZXMg b24gZS5nLiBFQkNESUMgcGxhdGZvcm1zLiAgU28sIHVzZQorICogIHRoZXNlIChhZG1pdHRlZGx5 IGF3a3dhcmQpIGNvbnN0YW50cyBpbnN0ZWFkLiAgVGhlc2UgY29uc3RhbnRzIG11c3QKKyAqICBh bHNvIGhhdmUgc2lnbmVkIHZhbHVlcyB0byBhdm9pZCB1bmV4cGVjdGVkIGNvZXJjaW9ucyBpbiBj b21wYXJpc29ucy4KKyAqCisgKiAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BU0NJSQor ICovCisKKyNkZWZpbmUgRFVLX0FTQ19OVUwgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgRFVL X0FTQ19TT0ggICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRFVLX0FTQ19TVFggICAgICAgICAg ICAgIDB4MDIKKyNkZWZpbmUgRFVLX0FTQ19FVFggICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUg RFVLX0FTQ19FT1QgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRFVLX0FTQ19FTlEgICAgICAg ICAgICAgIDB4MDUKKyNkZWZpbmUgRFVLX0FTQ19BQ0sgICAgICAgICAgICAgIDB4MDYKKyNkZWZp bmUgRFVLX0FTQ19CRUwgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgRFVLX0FTQ19CUyAgICAg ICAgICAgICAgIDB4MDgKKyNkZWZpbmUgRFVLX0FTQ19IVCAgICAgICAgICAgICAgIDB4MDkKKyNk ZWZpbmUgRFVLX0FTQ19MRiAgICAgICAgICAgICAgIDB4MGEKKyNkZWZpbmUgRFVLX0FTQ19WVCAg ICAgICAgICAgICAgIDB4MGIKKyNkZWZpbmUgRFVLX0FTQ19GRiAgICAgICAgICAgICAgIDB4MGMK KyNkZWZpbmUgRFVLX0FTQ19DUiAgICAgICAgICAgICAgIDB4MGQKKyNkZWZpbmUgRFVLX0FTQ19T TyAgICAgICAgICAgICAgIDB4MGUKKyNkZWZpbmUgRFVLX0FTQ19TSSAgICAgICAgICAgICAgIDB4 MGYKKyNkZWZpbmUgRFVLX0FTQ19ETEUgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRFVLX0FT Q19EQzEgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgRFVLX0FTQ19EQzIgICAgICAgICAgICAg IDB4MTIKKyNkZWZpbmUgRFVLX0FTQ19EQzMgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgRFVL X0FTQ19EQzQgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgRFVLX0FTQ19OQUsgICAgICAgICAg ICAgIDB4MTUKKyNkZWZpbmUgRFVLX0FTQ19TWU4gICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUg RFVLX0FTQ19FVEIgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgRFVLX0FTQ19DQU4gICAgICAg ICAgICAgIDB4MTgKKyNkZWZpbmUgRFVLX0FTQ19FTSAgICAgICAgICAgICAgIDB4MTkKKyNkZWZp bmUgRFVLX0FTQ19TVUIgICAgICAgICAgICAgIDB4MWEKKyNkZWZpbmUgRFVLX0FTQ19FU0MgICAg ICAgICAgICAgIDB4MWIKKyNkZWZpbmUgRFVLX0FTQ19GUyAgICAgICAgICAgICAgIDB4MWMKKyNk ZWZpbmUgRFVLX0FTQ19HUyAgICAgICAgICAgICAgIDB4MWQKKyNkZWZpbmUgRFVLX0FTQ19SUyAg ICAgICAgICAgICAgIDB4MWUKKyNkZWZpbmUgRFVLX0FTQ19VUyAgICAgICAgICAgICAgIDB4MWYK KyNkZWZpbmUgRFVLX0FTQ19TUEFDRSAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRFVLX0FTQ19F WENMQU1BVElPTiAgICAgIDB4MjEKKyNkZWZpbmUgRFVLX0FTQ19ET1VCTEVRVU9URSAgICAgIDB4 MjIKKyNkZWZpbmUgRFVLX0FTQ19IQVNIICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgRFVLX0FT Q19ET0xMQVIgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgRFVLX0FTQ19QRVJDRU5UICAgICAgICAg IDB4MjUKKyNkZWZpbmUgRFVLX0FTQ19BTVAgICAgICAgICAgICAgIDB4MjYKKyNkZWZpbmUgRFVL X0FTQ19TSU5HTEVRVU9URSAgICAgIDB4MjcKKyNkZWZpbmUgRFVLX0FTQ19MUEFSRU4gICAgICAg ICAgIDB4MjgKKyNkZWZpbmUgRFVLX0FTQ19SUEFSRU4gICAgICAgICAgIDB4MjkKKyNkZWZpbmUg RFVLX0FTQ19TVEFSICAgICAgICAgICAgIDB4MmEKKyNkZWZpbmUgRFVLX0FTQ19QTFVTICAgICAg ICAgICAgIDB4MmIKKyNkZWZpbmUgRFVLX0FTQ19DT01NQSAgICAgICAgICAgIDB4MmMKKyNkZWZp bmUgRFVLX0FTQ19NSU5VUyAgICAgICAgICAgIDB4MmQKKyNkZWZpbmUgRFVLX0FTQ19QRVJJT0Qg ICAgICAgICAgIDB4MmUKKyNkZWZpbmUgRFVLX0FTQ19TTEFTSCAgICAgICAgICAgIDB4MmYKKyNk ZWZpbmUgRFVLX0FTQ18wICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgRFVLX0FTQ18xICAg ICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgRFVLX0FTQ18yICAgICAgICAgICAgICAgIDB4MzIK KyNkZWZpbmUgRFVLX0FTQ18zICAgICAgICAgICAgICAgIDB4MzMKKyNkZWZpbmUgRFVLX0FTQ180 ICAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgRFVLX0FTQ181ICAgICAgICAgICAgICAgIDB4 MzUKKyNkZWZpbmUgRFVLX0FTQ182ICAgICAgICAgICAgICAgIDB4MzYKKyNkZWZpbmUgRFVLX0FT Q183ICAgICAgICAgICAgICAgIDB4MzcKKyNkZWZpbmUgRFVLX0FTQ184ICAgICAgICAgICAgICAg IDB4MzgKKyNkZWZpbmUgRFVLX0FTQ185ICAgICAgICAgICAgICAgIDB4MzkKKyNkZWZpbmUgRFVL X0FTQ19DT0xPTiAgICAgICAgICAgIDB4M2EKKyNkZWZpbmUgRFVLX0FTQ19TRU1JQ09MT04gICAg ICAgIDB4M2IKKyNkZWZpbmUgRFVLX0FTQ19MQU5HTEUgICAgICAgICAgIDB4M2MKKyNkZWZpbmUg RFVLX0FTQ19FUVVBTFMgICAgICAgICAgIDB4M2QKKyNkZWZpbmUgRFVLX0FTQ19SQU5HTEUgICAg ICAgICAgIDB4M2UKKyNkZWZpbmUgRFVLX0FTQ19RVUVTVElPTiAgICAgICAgIDB4M2YKKyNkZWZp bmUgRFVLX0FTQ19BVFNJR04gICAgICAgICAgIDB4NDAKKyNkZWZpbmUgRFVLX0FTQ19VQ19BICAg ICAgICAgICAgIDB4NDEKKyNkZWZpbmUgRFVLX0FTQ19VQ19CICAgICAgICAgICAgIDB4NDIKKyNk ZWZpbmUgRFVLX0FTQ19VQ19DICAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgRFVLX0FTQ19VQ19E ICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgRFVLX0FTQ19VQ19FICAgICAgICAgICAgIDB4NDUK KyNkZWZpbmUgRFVLX0FTQ19VQ19GICAgICAgICAgICAgIDB4NDYKKyNkZWZpbmUgRFVLX0FTQ19V Q19HICAgICAgICAgICAgIDB4NDcKKyNkZWZpbmUgRFVLX0FTQ19VQ19IICAgICAgICAgICAgIDB4 NDgKKyNkZWZpbmUgRFVLX0FTQ19VQ19JICAgICAgICAgICAgIDB4NDkKKyNkZWZpbmUgRFVLX0FT Q19VQ19KICAgICAgICAgICAgIDB4NGEKKyNkZWZpbmUgRFVLX0FTQ19VQ19LICAgICAgICAgICAg IDB4NGIKKyNkZWZpbmUgRFVLX0FTQ19VQ19MICAgICAgICAgICAgIDB4NGMKKyNkZWZpbmUgRFVL X0FTQ19VQ19NICAgICAgICAgICAgIDB4NGQKKyNkZWZpbmUgRFVLX0FTQ19VQ19OICAgICAgICAg ICAgIDB4NGUKKyNkZWZpbmUgRFVLX0FTQ19VQ19PICAgICAgICAgICAgIDB4NGYKKyNkZWZpbmUg RFVLX0FTQ19VQ19QICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgRFVLX0FTQ19VQ19RICAgICAg ICAgICAgIDB4NTEKKyNkZWZpbmUgRFVLX0FTQ19VQ19SICAgICAgICAgICAgIDB4NTIKKyNkZWZp bmUgRFVLX0FTQ19VQ19TICAgICAgICAgICAgIDB4NTMKKyNkZWZpbmUgRFVLX0FTQ19VQ19UICAg ICAgICAgICAgIDB4NTQKKyNkZWZpbmUgRFVLX0FTQ19VQ19VICAgICAgICAgICAgIDB4NTUKKyNk ZWZpbmUgRFVLX0FTQ19VQ19WICAgICAgICAgICAgIDB4NTYKKyNkZWZpbmUgRFVLX0FTQ19VQ19X ICAgICAgICAgICAgIDB4NTcKKyNkZWZpbmUgRFVLX0FTQ19VQ19YICAgICAgICAgICAgIDB4NTgK KyNkZWZpbmUgRFVLX0FTQ19VQ19ZICAgICAgICAgICAgIDB4NTkKKyNkZWZpbmUgRFVLX0FTQ19V Q19aICAgICAgICAgICAgIDB4NWEKKyNkZWZpbmUgRFVLX0FTQ19MQlJBQ0tFVCAgICAgICAgIDB4 NWIKKyNkZWZpbmUgRFVLX0FTQ19CQUNLU0xBU0ggICAgICAgIDB4NWMKKyNkZWZpbmUgRFVLX0FT Q19SQlJBQ0tFVCAgICAgICAgIDB4NWQKKyNkZWZpbmUgRFVLX0FTQ19DQVJFVCAgICAgICAgICAg IDB4NWUKKyNkZWZpbmUgRFVLX0FTQ19VTkRFUlNDT1JFICAgICAgIDB4NWYKKyNkZWZpbmUgRFVL X0FTQ19HUkFWRSAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgRFVLX0FTQ19MQ19BICAgICAgICAg ICAgIDB4NjEKKyNkZWZpbmUgRFVLX0FTQ19MQ19CICAgICAgICAgICAgIDB4NjIKKyNkZWZpbmUg RFVLX0FTQ19MQ19DICAgICAgICAgICAgIDB4NjMKKyNkZWZpbmUgRFVLX0FTQ19MQ19EICAgICAg ICAgICAgIDB4NjQKKyNkZWZpbmUgRFVLX0FTQ19MQ19FICAgICAgICAgICAgIDB4NjUKKyNkZWZp bmUgRFVLX0FTQ19MQ19GICAgICAgICAgICAgIDB4NjYKKyNkZWZpbmUgRFVLX0FTQ19MQ19HICAg ICAgICAgICAgIDB4NjcKKyNkZWZpbmUgRFVLX0FTQ19MQ19IICAgICAgICAgICAgIDB4NjgKKyNk ZWZpbmUgRFVLX0FTQ19MQ19JICAgICAgICAgICAgIDB4NjkKKyNkZWZpbmUgRFVLX0FTQ19MQ19K ICAgICAgICAgICAgIDB4NmEKKyNkZWZpbmUgRFVLX0FTQ19MQ19LICAgICAgICAgICAgIDB4NmIK KyNkZWZpbmUgRFVLX0FTQ19MQ19MICAgICAgICAgICAgIDB4NmMKKyNkZWZpbmUgRFVLX0FTQ19M Q19NICAgICAgICAgICAgIDB4NmQKKyNkZWZpbmUgRFVLX0FTQ19MQ19OICAgICAgICAgICAgIDB4 NmUKKyNkZWZpbmUgRFVLX0FTQ19MQ19PICAgICAgICAgICAgIDB4NmYKKyNkZWZpbmUgRFVLX0FT Q19MQ19QICAgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgRFVLX0FTQ19MQ19RICAgICAgICAgICAg IDB4NzEKKyNkZWZpbmUgRFVLX0FTQ19MQ19SICAgICAgICAgICAgIDB4NzIKKyNkZWZpbmUgRFVL X0FTQ19MQ19TICAgICAgICAgICAgIDB4NzMKKyNkZWZpbmUgRFVLX0FTQ19MQ19UICAgICAgICAg ICAgIDB4NzQKKyNkZWZpbmUgRFVLX0FTQ19MQ19VICAgICAgICAgICAgIDB4NzUKKyNkZWZpbmUg RFVLX0FTQ19MQ19WICAgICAgICAgICAgIDB4NzYKKyNkZWZpbmUgRFVLX0FTQ19MQ19XICAgICAg ICAgICAgIDB4NzcKKyNkZWZpbmUgRFVLX0FTQ19MQ19YICAgICAgICAgICAgIDB4NzgKKyNkZWZp bmUgRFVLX0FTQ19MQ19ZICAgICAgICAgICAgIDB4NzkKKyNkZWZpbmUgRFVLX0FTQ19MQ19aICAg ICAgICAgICAgIDB4N2EKKyNkZWZpbmUgRFVLX0FTQ19MQ1VSTFkgICAgICAgICAgIDB4N2IKKyNk ZWZpbmUgRFVLX0FTQ19QSVBFICAgICAgICAgICAgIDB4N2MKKyNkZWZpbmUgRFVLX0FTQ19SQ1VS TFkgICAgICAgICAgIDB4N2QKKyNkZWZpbmUgRFVLX0FTQ19USUxERSAgICAgICAgICAgIDB4N2UK KyNkZWZpbmUgRFVLX0FTQ19ERUwgICAgICAgICAgICAgIDB4N2YKKworLyoKKyAqICBNaXNjZWxs YW5lb3VzCisgKi8KKworLyogVXBwZXJjYXNlIEEgaXMgMHg0MSwgbG93ZXJjYXNlIGEgaXMgMHg2 MTsgT1IgMHgyMCB0byBjb252ZXJ0IHVwcGVyY2FzZQorICogdG8gbG93ZXJjYXNlLgorICovCisj ZGVmaW5lIERVS19MT1dFUkNBU0VfQ0hBUl9BU0NJSSh4KSAgKCh4KSB8IDB4MjApCisKKy8qCisg KiAgVW5pY29kZSB0YWJsZXMKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NPVVJDRV9OT05C TVApCisvKgorICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGV4dHJhY3RfY2hhcnMucHks IGRvIG5vdCBlZGl0IQorICovCisKK2V4dGVybiBjb25zdCBkdWtfdWludDhfdCBkdWtfdW5pY29k ZV9pZHNfbm9hWzEwNjNdOworI2Vsc2UKKy8qCisgKiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg YnkgZXh0cmFjdF9jaGFycy5weSwgZG8gbm90IGVkaXQhCisgKi8KKworZXh0ZXJuIGNvbnN0IGR1 a191aW50OF90IGR1a191bmljb2RlX2lkc19ub2FibXBbNjI2XTsKKyNlbmRpZgorCisjaWYgZGVm aW5lZChEVUtfVVNFX1NPVVJDRV9OT05CTVApCisvKgorICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJh dGVkIGJ5IGV4dHJhY3RfY2hhcnMucHksIGRvIG5vdCBlZGl0IQorICovCisKK2V4dGVybiBjb25z dCBkdWtfdWludDhfdCBkdWtfdW5pY29kZV9pZHNfbV9sZXRfbm9hWzQyXTsKKyNlbHNlCisvKgor ICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGV4dHJhY3RfY2hhcnMucHksIGRvIG5vdCBl ZGl0IQorICovCisKK2V4dGVybiBjb25zdCBkdWtfdWludDhfdCBkdWtfdW5pY29kZV9pZHNfbV9s ZXRfbm9hYm1wWzI0XTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1NPVVJDRV9OT05C TVApCisvKgorICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGV4dHJhY3RfY2hhcnMucHks IGRvIG5vdCBlZGl0IQorICovCisKK2V4dGVybiBjb25zdCBkdWtfdWludDhfdCBkdWtfdW5pY29k ZV9pZHBfbV9pZHNfbm9hWzU0OV07CisjZWxzZQorLyoKKyAqICBBdXRvbWF0aWNhbGx5IGdlbmVy YXRlZCBieSBleHRyYWN0X2NoYXJzLnB5LCBkbyBub3QgZWRpdCEKKyAqLworCitleHRlcm4gY29u c3QgZHVrX3VpbnQ4X3QgZHVrX3VuaWNvZGVfaWRwX21faWRzX25vYWJtcFszNThdOworI2VuZGlm CisKKy8qCisgKiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgZXh0cmFjdF9jYXNlY29udi5w eSwgZG8gbm90IGVkaXQhCisgKi8KKworZXh0ZXJuIGNvbnN0IGR1a191aW50OF90IGR1a191bmlj b2RlX2Nhc2Vjb252X3VjWzEzODZdOworZXh0ZXJuIGNvbnN0IGR1a191aW50OF90IGR1a191bmlj b2RlX2Nhc2Vjb252X2xjWzY4MF07CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX0NBTk9O X1dPUktBUk9VTkQpCisvKgorICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGV4dHJhY3Rf Y2FzZWNvbnYucHksIGRvIG5vdCBlZGl0IQorICovCisKK2V4dGVybiBjb25zdCBkdWtfdWludDE2 X3QgZHVrX3VuaWNvZGVfcmVfY2Fub25fbG9va3VwWzY1NTM2XTsKKyNlbmRpZgorCisjaWYgZGVm aW5lZChEVUtfVVNFX1JFR0VYUF9DQU5PTl9CSVRNQVApCisvKgorICogIEF1dG9tYXRpY2FsbHkg Z2VuZXJhdGVkIGJ5IGV4dHJhY3RfY2FzZWNvbnYucHksIGRvIG5vdCBlZGl0IQorICovCisKKyNk ZWZpbmUgRFVLX0NBTk9OX0JJVE1BUF9CTEtTSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAzMgorI2RlZmluZSBEVUtfQ0FOT05fQklUTUFQX0JMS1NISUZUICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRFVLX0NBTk9OX0JJVE1BUF9C TEtNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorZXh0ZXJuIGNv bnN0IGR1a191aW50OF90IGR1a191bmljb2RlX3JlX2Nhbm9uX2JpdG1hcFsyNTZdOworI2VuZGlm CisKKy8qCisgKiAgRXh0ZXJuCisgKi8KKworLyogZHVrX3VuaWNvZGVfc3VwcG9ydC5jICovCisj aWYgIWRlZmluZWQoRFVLX1NJTkdMRV9GSUxFKQorRFVLX0lOVEVSTkFMX0RFQ0wgY29uc3QgZHVr X3VpbnQ4X3QgZHVrX3VuaWNvZGVfeHV0ZjhfbWFya2Vyc1s3XTsKK0RVS19JTlRFUk5BTF9ERUNM IGNvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29kZV9yZV9yYW5nZXNfZGlnaXRbMl07CitEVUtf SU5URVJOQUxfREVDTCBjb25zdCBkdWtfdWludDE2X3QgZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX3do aXRlWzIyXTsKK0RVS19JTlRFUk5BTF9ERUNMIGNvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29k ZV9yZV9yYW5nZXNfd29yZGNoYXJbOF07CitEVUtfSU5URVJOQUxfREVDTCBjb25zdCBkdWtfdWlu dDE2X3QgZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX25vdF9kaWdpdFs0XTsKK0RVS19JTlRFUk5BTF9E RUNMIGNvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29kZV9yZV9yYW5nZXNfbm90X3doaXRlWzI0 XTsKK0RVS19JTlRFUk5BTF9ERUNMIGNvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29kZV9yZV9y YW5nZXNfbm90X3dvcmRjaGFyWzEwXTsKK0RVS19JTlRFUk5BTF9ERUNMIGNvbnN0IGR1a19pbnQ4 X3QgZHVrX2lzX2lkY2hhcl90YWJbMTI4XTsKKyNlbmRpZiAgLyogIURVS19TSU5HTEVfRklMRSAq LworCisvKgorICogIFByb3RvdHlwZXMKKyAqLworCitEVUtfSU5URVJOQUxfREVDTCBkdWtfc21h bGxfaW50X3QgZHVrX3VuaWNvZGVfZ2V0X3h1dGY4X2xlbmd0aChkdWtfdWNvZGVwb2ludF90IGNw KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19zbWFsbF9pbnRfdCBkdWtfdW5pY29kZV9nZXRfY2VzdThfbGVuZ3RoKGR1a191Y29kZXBvaW50 X3QgY3ApOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCBkdWtfc21hbGxfaW50X3QgZHVrX3Vu aWNvZGVfZW5jb2RlX3h1dGY4KGR1a191Y29kZXBvaW50X3QgY3AsIGR1a191aW50OF90ICpvdXQp OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3NtYWxsX2ludF90IGR1a191bmljb2RlX2VuY29kZV9j ZXN1OChkdWtfdWNvZGVwb2ludF90IGNwLCBkdWtfdWludDhfdCAqb3V0KTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19zbWFsbF9pbnRfdCBkdWtfdW5pY29kZV9kZWNvZGVfeHV0ZjgoZHVrX2h0aHJl YWQgKnRociwgY29uc3QgZHVrX3VpbnQ4X3QgKipwdHIsIGNvbnN0IGR1a191aW50OF90ICpwdHJf c3RhcnQsIGNvbnN0IGR1a191aW50OF90ICpwdHJfZW5kLCBkdWtfdWNvZGVwb2ludF90ICpvdXRf Y3ApOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3Vjb2RlcG9pbnRfdCBkdWtfdW5pY29kZV9kZWNv ZGVfeHV0ZjhfY2hlY2tlZChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBkdWtfdWludDhfdCAqKnB0 ciwgY29uc3QgZHVrX3VpbnQ4X3QgKnB0cl9zdGFydCwgY29uc3QgZHVrX3VpbnQ4X3QgKnB0cl9l bmQpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3NpemVfdCBkdWtfdW5pY29kZV91bnZhbGlkYXRl ZF91dGY4X2xlbmd0aChjb25zdCBkdWtfdWludDhfdCAqZGF0YSwgZHVrX3NpemVfdCBibGVuKTsK K0RVS19JTlRFUk5BTF9ERUNMIGR1a19zbWFsbF9pbnRfdCBkdWtfdW5pY29kZV9pc193aGl0ZXNw YWNlKGR1a19jb2RlcG9pbnRfdCBjcCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfc21hbGxfaW50 X3QgZHVrX3VuaWNvZGVfaXNfbGluZV90ZXJtaW5hdG9yKGR1a19jb2RlcG9pbnRfdCBjcCk7CitE VUtfSU5URVJOQUxfREVDTCBkdWtfc21hbGxfaW50X3QgZHVrX3VuaWNvZGVfaXNfaWRlbnRpZmll cl9zdGFydChkdWtfY29kZXBvaW50X3QgY3ApOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3NtYWxs X2ludF90IGR1a191bmljb2RlX2lzX2lkZW50aWZpZXJfcGFydChkdWtfY29kZXBvaW50X3QgY3Ap OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3NtYWxsX2ludF90IGR1a191bmljb2RlX2lzX2xldHRl cihkdWtfY29kZXBvaW50X3QgY3ApOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfdW5pY29k ZV9jYXNlX2NvbnZlcnRfc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19ib29sX3QgdXBwZXJj YXNlKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCitEVUtfSU5URVJOQUxf REVDTCBkdWtfY29kZXBvaW50X3QgZHVrX3VuaWNvZGVfcmVfY2Fub25pY2FsaXplX2NoYXIoZHVr X2h0aHJlYWQgKnRociwgZHVrX2NvZGVwb2ludF90IGNwKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19zbWFsbF9pbnRfdCBkdWtfdW5pY29kZV9yZV9pc193b3JkY2hhcihkdWtfY29kZXBvaW50X3Qg Y3ApOworI2VuZGlmCisKKyNlbmRpZiAgLyogRFVLX1VOSUNPREVfSF9JTkNMVURFRCAqLworLyog I2luY2x1ZGUgZHVrX2pzb24uaCAqLworLyoKKyAqICBEZWZpbmVzIGZvciBKU09OLCBlc3BlY2lh bGx5IGR1a19iaV9qc29uLmMuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19KU09OX0hfSU5DTFVE RUQpCisjZGVmaW5lIERVS19KU09OX0hfSU5DTFVERUQKKworLyogRW5jb2RpbmcvZGVjb2Rpbmcg ZmxhZ3MgKi8KKyNkZWZpbmUgRFVLX0pTT05fRkxBR19BU0NJSV9PTkxZICAgICAgICAgICAgICAo MVUgPDwgMCkgIC8qIGVzY2FwZSBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUg RFVLX0pTT05fRkxBR19BVk9JRF9LRVlfUVVPVEVTICAgICAgICAoMVUgPDwgMSkgIC8qIGF2b2lk IGtleSBxdW90ZXMgd2hlbiBrZXkgaXMgYW4gQVNDSUkgSWRlbnRpZmllciAqLworI2RlZmluZSBE VUtfSlNPTl9GTEFHX0VYVF9DVVNUT00gICAgICAgICAgICAgICgxVSA8PCAyKSAgLyogZXh0ZW5k ZWQgdHlwZXM6IGN1c3RvbSBlbmNvZGluZyAqLworI2RlZmluZSBEVUtfSlNPTl9GTEFHX0VYVF9D T01QQVRJQkxFICAgICAgICAgICgxVSA8PCAzKSAgLyogZXh0ZW5kZWQgdHlwZXM6IGNvbXBhdGli bGUgZW5jb2RpbmcgKi8KKworLyogSG93IG11Y2ggc3RhY2sgdG8gcmVxdWlyZSBvbiBlbnRyeSB0 byBvYmplY3QvYXJyYXkgZW5jb2RlICovCisjZGVmaW5lIERVS19KU09OX0VOQ19SRVFTVEFDSyAg ICAgICAgICAgICAgICAgMzIKKworLyogSG93IG11Y2ggc3RhY2sgdG8gcmVxdWlyZSBvbiBlbnRy eSB0byBvYmplY3QvYXJyYXkgZGVjb2RlICovCisjZGVmaW5lIERVS19KU09OX0RFQ19SRVFTVEFD SyAgICAgICAgICAgICAgICAgMzIKKworLyogSG93IGxhcmdlIGEgbG9vcCBkZXRlY3Rpb24gc3Rh Y2sgdG8gdXNlICovCisjZGVmaW5lIERVS19KU09OX0VOQ19MT09QQVJSQVkgICAgICAgICAgICAg ICAgNjQKKworLyogRW5jb2Rpbmcgc3RhdGUuICBIZWFwIG9iamVjdCByZWZlcmVuY2VzIGFyZSBh bGwgYm9ycm93ZWQuICovCit0eXBlZGVmIHN0cnVjdCB7CisJZHVrX2h0aHJlYWQgKnRocjsKKwlk dWtfYnVmd3JpdGVyX2N0eCBidzsgICAgICAgIC8qIG91dHB1dCBidWZ3cml0ZXIgKi8KKwlkdWtf aG9iamVjdCAqaF9yZXBsYWNlcjsgICAgIC8qIHJlcGxhY2VyIGZ1bmN0aW9uICovCisJZHVrX2hz dHJpbmcgKmhfZ2FwOyAgICAgICAgICAvKiBnYXAgKGlmIGVtcHR5IHN0cmluZywgTlVMTCkgKi8K KwlkdWtfaWR4X3QgaWR4X3Byb3BsaXN0OyAgICAgIC8qIGV4cGxpY2l0IFByb3BlcnR5TGlzdCAq LworCWR1a19pZHhfdCBpZHhfbG9vcDsgICAgICAgICAgLyogdmFsc3RhY2sgaW5kZXggb2YgbG9v cCBkZXRlY3Rpb24gb2JqZWN0ICovCisJZHVrX3NtYWxsX3VpbnRfdCBmbGFnczsKKwlkdWtfc21h bGxfdWludF90IGZsYWdfYXNjaWlfb25seTsKKwlkdWtfc21hbGxfdWludF90IGZsYWdfYXZvaWRf a2V5X3F1b3RlczsKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmluZWQoRFVLX1VTRV9K QykKKwlkdWtfc21hbGxfdWludF90IGZsYWdfZXh0X2N1c3RvbTsKKwlkdWtfc21hbGxfdWludF90 IGZsYWdfZXh0X2NvbXBhdGlibGU7CisJZHVrX3NtYWxsX3VpbnRfdCBmbGFnX2V4dF9jdXN0b21f b3JfY29tcGF0aWJsZTsKKyNlbmRpZgorCWR1a191aW50X3QgcmVjdXJzaW9uX2RlcHRoOworCWR1 a191aW50X3QgcmVjdXJzaW9uX2xpbWl0OworCWR1a191aW50X3QgbWFza19mb3JfdW5kZWZpbmVk OyAgICAgIC8qIHR5cGUgYml0IG1hc2s6IHR5cGVzIHdoaWNoIGNlcnRhaW5seSBwcm9kdWNlICd1 bmRlZmluZWQnICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0pYKSB8fCBkZWZpbmVkKERVS19VU0Vf SkMpCisJZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHhfY3VzdG9tX3VuZGVmaW5lZDsKKwlkdWtfc21h bGxfdWludF90IHN0cmlkeF9jdXN0b21fbmFuOworCWR1a19zbWFsbF91aW50X3Qgc3RyaWR4X2N1 c3RvbV9uZWdpbmY7CisJZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHhfY3VzdG9tX3Bvc2luZjsKKwlk dWtfc21hbGxfdWludF90IHN0cmlkeF9jdXN0b21fZnVuY3Rpb247CisjZW5kaWYKKwlkdWtfaG9i amVjdCAqdmlzaXRpbmdbRFVLX0pTT05fRU5DX0xPT1BBUlJBWV07ICAvKiBpbmRleGVkIGJ5IHJl Y3Vyc2lvbl9kZXB0aCAqLworfSBkdWtfanNvbl9lbmNfY3R4OworCit0eXBlZGVmIHN0cnVjdCB7 CisJZHVrX2h0aHJlYWQgKnRocjsKKwljb25zdCBkdWtfdWludDhfdCAqcDsKKwljb25zdCBkdWtf dWludDhfdCAqcF9zdGFydDsKKwljb25zdCBkdWtfdWludDhfdCAqcF9lbmQ7CisJZHVrX2lkeF90 IGlkeF9yZXZpdmVyOworCWR1a19zbWFsbF91aW50X3QgZmxhZ3M7CisjaWYgZGVmaW5lZChEVUtf VVNFX0pYKSB8fCBkZWZpbmVkKERVS19VU0VfSkMpCisJZHVrX3NtYWxsX3VpbnRfdCBmbGFnX2V4 dF9jdXN0b207CisJZHVrX3NtYWxsX3VpbnRfdCBmbGFnX2V4dF9jb21wYXRpYmxlOworCWR1a19z bWFsbF91aW50X3QgZmxhZ19leHRfY3VzdG9tX29yX2NvbXBhdGlibGU7CisjZW5kaWYKKwlkdWtf aW50X3QgcmVjdXJzaW9uX2RlcHRoOworCWR1a19pbnRfdCByZWN1cnNpb25fbGltaXQ7Cit9IGR1 a19qc29uX2RlY19jdHg7CisKKyNlbmRpZiAgLyogRFVLX0pTT05fSF9JTkNMVURFRCAqLworLyog I2luY2x1ZGUgZHVrX2pzLmggKi8KKy8qCisgKiAgRUNNQVNjcmlwdCBleGVjdXRpb24sIHN1cHBv cnQgcHJpbWl0aXZlcy4KKyAqLworCisjaWYgIWRlZmluZWQoRFVLX0pTX0hfSU5DTFVERUQpCisj ZGVmaW5lIERVS19KU19IX0lOQ0xVREVECisKKy8qIEZsYWdzIGZvciBjYWxsIGhhbmRsaW5nLiAg TG93ZXN0IGZsYWdzIG11c3QgbWF0Y2ggYnl0ZWNvZGUgRFVLX0JDX0NBTExfRkxBR194eHggMTox LiAqLworI2RlZmluZSBEVUtfQ0FMTF9GTEFHX1RBSUxDQUxMICAgICAgICAgICAgICAgICAoMVUg PDwgMCkgIC8qIHNldHVwIGZvciBhIHRhaWwgY2FsbCAqLworI2RlZmluZSBEVUtfQ0FMTF9GTEFH X0NPTlNUUlVDVCAgICAgICAgICAgICAgICAoMVUgPDwgMSkgIC8qIGNvbnN0cnVjdG9yIGNhbGwg KGkuZS4gY2FsbGVkIGFzICduZXcgRm9vKCknKSAqLworI2RlZmluZSBEVUtfQ0FMTF9GTEFHX0NB TExFRF9BU19FVkFMICAgICAgICAgICAoMVUgPDwgMikgIC8qIGNhbGwgd2FzIG1hZGUgdXNpbmcg dGhlIGlkZW50aWZpZXIgJ2V2YWwnICovCisjZGVmaW5lIERVS19DQUxMX0ZMQUdfQUxMT1dfRUNN QVRPRUNNQSAgICAgICAgICgxVSA8PCAzKSAgLyogZWNtYS10by1lY21hIGNhbGwgd2l0aCBleGVj dXRvciByZXVzZSBpcyBwb3NzaWJsZSAqLworI2RlZmluZSBEVUtfQ0FMTF9GTEFHX0RJUkVDVF9F VkFMICAgICAgICAgICAgICAoMVUgPDwgNCkgIC8qIGNhbGwgaXMgYSBkaXJlY3QgZXZhbCBjYWxs ICovCisjZGVmaW5lIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUX1BST1hZICAgICAgICAgICgxVSA8 PCA1KSAgLyogaGFuZGxlZCB2aWEgJ2NvbnN0cnVjdCcgcHJveHkgdHJhcCwgY2hlY2sgcmV0dXJu IHZhbHVlIGludmFyaWFudChzKSAqLworI2RlZmluZSBEVUtfQ0FMTF9GTEFHX0RFRkFVTFRfSU5T VEFOQ0VfVVBEQVRFRCAoMVUgPDwgNikgIC8qIHByb3RvdHlwZSBvZiAnZGVmYXVsdCBpbnN0YW5j ZScgdXBkYXRlZCwgdGVtcG9yYXJ5IGZsYWcgaW4gY2FsbCBoYW5kbGluZyAqLworCisvKiBGbGFn cyBmb3IgZHVrX2pzX2VxdWFsc19oZWxwZXIoKS4gKi8KKyNkZWZpbmUgRFVLX0VRVUFMU19GTEFH X1NBTUVWQUxVRSAgICAgICAgICAgICgxVSA8PCAwKSAgLyogdXNlIFNhbWVWYWx1ZSBpbnN0ZWFk IG9mIG5vbi1zdHJpY3QgZXF1YWxpdHkgKi8KKyNkZWZpbmUgRFVLX0VRVUFMU19GTEFHX1NUUklD VCAgICAgICAgICAgICAgICgxVSA8PCAxKSAgLyogdXNlIHN0cmljdCBlcXVhbGl0eSBpbnN0ZWFk IG9mIG5vbi1zdHJpY3QgZXF1YWxpdHkgKi8KKworLyogRmxhZ3MgZm9yIGR1a19qc19jb21wYXJl X2hlbHBlcigpLiAqLworI2RlZmluZSBEVUtfQ09NUEFSRV9GTEFHX05FR0FURSAgICAgICAgICAg ICAgKDFVIDw8IDApICAvKiBuZWdhdGUgcmVzdWx0ICovCisjZGVmaW5lIERVS19DT01QQVJFX0ZM QUdfRVZBTF9MRUZUX0ZJUlNUICAgICAoMVUgPDwgMSkgIC8qIGV2YWwgbGVmdCBhcmd1bWVudCBm aXJzdCAqLworCisvKiBjb252ZXJzaW9ucywgY29lcmNpb25zLCBjb21wYXJpc29uLCBldGMgKi8K K0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2pzX3RvYm9vbGVhbihkdWtfdHZhbCAq dHYpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2RvdWJsZV90IGR1a19qc190b251bWJlcihkdWtf aHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2RvdWJs ZV90IGR1a19qc190b2ludGVnZXJfbnVtYmVyKGR1a19kb3VibGVfdCB4KTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19kb3VibGVfdCBkdWtfanNfdG9pbnRlZ2VyKGR1a19odGhyZWFkICp0aHIsIGR1 a190dmFsICp0dik7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfdWludDMyX3QgZHVrX2pzX3RvdWlu dDMyKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dik7CitEVUtfSU5URVJOQUxfREVDTCBk dWtfaW50MzJfdCBkdWtfanNfdG9pbnQzMihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYp OworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VpbnQxNl90IGR1a19qc190b3VpbnQxNihkdWtfaHRo cmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3VhcnJpZHhf dCBkdWtfanNfdG9fYXJyYXlpbmRleF9zdHJpbmcoY29uc3QgZHVrX3VpbnQ4X3QgKnN0ciwgZHVr X3VpbnQzMl90IGJsZW4pOworI2lmICFkZWZpbmVkKERVS19VU0VfSFNUUklOR19BUlJJRFgpCitE VUtfSU5URVJOQUxfREVDTCBkdWtfdWFycmlkeF90IGR1a19qc190b19hcnJheWluZGV4X2hzdHJp bmdfZmFzdF9rbm93bihkdWtfaHN0cmluZyAqaCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfdWFy cmlkeF90IGR1a19qc190b19hcnJheWluZGV4X2hzdHJpbmdfZmFzdChkdWtfaHN0cmluZyAqaCk7 CisjZW5kaWYKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2pzX2VxdWFsc19oZWxw ZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2X3gsIGR1a190dmFsICp0dl95LCBkdWtf c21hbGxfdWludF90IGZsYWdzKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19zbWFsbF9pbnRfdCBk dWtfanNfZGF0YV9jb21wYXJlKGNvbnN0IGR1a191aW50OF90ICpidWYxLCBjb25zdCBkdWtfdWlu dDhfdCAqYnVmMiwgZHVrX3NpemVfdCBsZW4xLCBkdWtfc2l6ZV90IGxlbjIpOworRFVLX0lOVEVS TkFMX0RFQ0wgZHVrX3NtYWxsX2ludF90IGR1a19qc19zdHJpbmdfY29tcGFyZShkdWtfaHN0cmlu ZyAqaDEsIGR1a19oc3RyaW5nICpoMik7CisjaWYgMCAgLyogdW51c2VkICovCitEVUtfSU5URVJO QUxfREVDTCBkdWtfc21hbGxfaW50X3QgZHVrX2pzX2J1ZmZlcl9jb21wYXJlKGR1a19oZWFwICpo ZWFwLCBkdWtfaGJ1ZmZlciAqaDEsIGR1a19oYnVmZmVyICpoMik7CisjZW5kaWYKK0RVS19JTlRF Uk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2pzX2NvbXBhcmVfaGVscGVyKGR1a19odGhyZWFkICp0 aHIsIGR1a190dmFsICp0dl94LCBkdWtfdHZhbCAqdHZfeSwgZHVrX3NtYWxsX3VpbnRfdCBmbGFn cyk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19qc19pbnN0YW5jZW9mKGR1a19o dGhyZWFkICp0aHIsIGR1a190dmFsICp0dl94LCBkdWtfdHZhbCAqdHZfeSk7CisjaWYgZGVmaW5l ZChEVUtfVVNFX1NZTUJPTF9CVUlMVElOKQorRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBk dWtfanNfaW5zdGFuY2VvZl9vcmRpbmFyeShkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZf eCwgZHVrX3R2YWwgKnR2X3kpOworI2VuZGlmCitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90 IGR1a19qc19pbihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZfeCwgZHVrX3R2YWwgKnR2 X3kpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX3NtYWxsX3VpbnRfdCBkdWtfanNfdHlwZW9mX3N0 cmlkeChkdWtfdHZhbCAqdHZfeCk7CisKKy8qIGFyaXRobWV0aWMgKi8KK0RVS19JTlRFUk5BTF9E RUNMIGRvdWJsZSBkdWtfanNfYXJpdGhfcG93KGRvdWJsZSB4LCBkb3VibGUgeSk7CitEVUtfSU5U RVJOQUxfREVDTCBkb3VibGUgZHVrX2pzX2FyaXRoX21vZChkb3VibGUgeCwgZG91YmxlIHkpOwor CisjZGVmaW5lIGR1a19qc19lcXVhbHModGhyLHR2X3gsdHZfeSkgXAorCWR1a19qc19lcXVhbHNf aGVscGVyKCh0aHIpLCAodHZfeCksICh0dl95KSwgMCkKKyNkZWZpbmUgZHVrX2pzX3N0cmljdF9l cXVhbHModHZfeCx0dl95KSBcCisJZHVrX2pzX2VxdWFsc19oZWxwZXIoTlVMTCwgKHR2X3gpLCAo dHZfeSksIERVS19FUVVBTFNfRkxBR19TVFJJQ1QpCisjZGVmaW5lIGR1a19qc19zYW1ldmFsdWUo dHZfeCx0dl95KSBcCisJZHVrX2pzX2VxdWFsc19oZWxwZXIoTlVMTCwgKHR2X3gpLCAodHZfeSks IERVS19FUVVBTFNfRkxBR19TQU1FVkFMVUUpCisKKy8qIEU1IFNlY3Rpb25zIDExLjguMSwgMTEu OC41OyB4IDwgeSAqLworI2RlZmluZSBkdWtfanNfbGVzc3RoYW4odGhyLHR2X3gsdHZfeSkgXAor CWR1a19qc19jb21wYXJlX2hlbHBlcigodGhyKSwgKHR2X3gpLCAodHZfWSksIERVS19DT01QQVJF X0ZMQUdfRVZBTF9MRUZUX0ZJUlNUKQorCisvKiBFNSBTZWN0aW9ucyAxMS44LjIsIDExLjguNTsg eCA+IHkgIC0tPiAgeSA8IHggKi8KKyNkZWZpbmUgZHVrX2pzX2dyZWF0ZXJ0aGFuKHRocix0dl94 LHR2X3kpIFwKKwlkdWtfanNfY29tcGFyZV9oZWxwZXIoKHRociksICh0dl95KSwgKHR2X3gpLCAw KQorCisvKiBFNSBTZWN0aW9ucyAxMS44LjMsIDExLjguNTsgeCA8PSB5ICAtLT4gIG5vdCAoeCA+ IHkpICAtLT4gIG5vdCAoeSA8IHgpICovCisjZGVmaW5lIGR1a19qc19sZXNzdGhhbm9yZXF1YWwo dGhyLHR2X3gsdHZfeSkgXAorCWR1a19qc19jb21wYXJlX2hlbHBlcigodGhyKSwgKHR2X3kpLCAo dHZfeCksIERVS19DT01QQVJFX0ZMQUdfTkVHQVRFKQorCisvKiBFNSBTZWN0aW9ucyAxMS44LjQs IDExLjguNTsgeCA+PSB5ICAtLT4gIG5vdCAoeCA8IHkpICovCisjZGVmaW5lIGR1a19qc19ncmVh dGVydGhhbm9yZXF1YWwodGhyLHR2X3gsdHZfeSkgXAorCWR1a19qc19jb21wYXJlX2hlbHBlcigo dGhyKSwgKHR2X3gpLCAodHZfeSksIERVS19DT01QQVJFX0ZMQUdfRVZBTF9MRUZUX0ZJUlNUIHwg RFVLX0NPTVBBUkVfRkxBR19ORUdBVEUpCisKKy8qIGlkZW50aWZpZXJzIGFuZCBlbnZpcm9ubWVu dCBoYW5kbGluZyAqLworI2lmIDAgIC8qdW51c2VkKi8KK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90 IGR1a19qc19oYXN2YXJfZW52cmVjKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICplbnYs IGR1a19oc3RyaW5nICpuYW1lKTsKKyNlbmRpZgorRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfanNfZ2V0dmFyX2VudnJlYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqZW52 LCBkdWtfaHN0cmluZyAqbmFtZSwgZHVrX2Jvb2xfdCB0aHJvd19mbGFnKTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19ib29sX3QgZHVrX2pzX2dldHZhcl9hY3RpdmF0aW9uKGR1a19odGhyZWFkICp0 aHIsIGR1a19hY3RpdmF0aW9uICphY3QsIGR1a19oc3RyaW5nICpuYW1lLCBkdWtfYm9vbF90IHRo cm93X2ZsYWcpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfanNfcHV0dmFyX2VudnJlYyhk dWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqZW52LCBkdWtfaHN0cmluZyAqbmFtZSwgZHVr X3R2YWwgKnZhbCwgZHVrX2Jvb2xfdCBzdHJpY3QpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBk dWtfanNfcHV0dmFyX2FjdGl2YXRpb24oZHVrX2h0aHJlYWQgKnRociwgZHVrX2FjdGl2YXRpb24g KmFjdCwgZHVrX2hzdHJpbmcgKm5hbWUsIGR1a190dmFsICp2YWwsIGR1a19ib29sX3Qgc3RyaWN0 KTsKKyNpZiAwICAvKnVudXNlZCovCitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19q c19kZWx2YXJfZW52cmVjKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICplbnYsIGR1a19o c3RyaW5nICpuYW1lKTsKKyNlbmRpZgorRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf anNfZGVsdmFyX2FjdGl2YXRpb24oZHVrX2h0aHJlYWQgKnRociwgZHVrX2FjdGl2YXRpb24gKmFj dCwgZHVrX2hzdHJpbmcgKm5hbWUpOworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf anNfZGVjbHZhcl9hY3RpdmF0aW9uKGR1a19odGhyZWFkICp0aHIsIGR1a19hY3RpdmF0aW9uICph Y3QsIGR1a19oc3RyaW5nICpuYW1lLCBkdWtfdHZhbCAqdmFsLCBkdWtfc21hbGxfdWludF90IHBy b3BfZmxhZ3MsIGR1a19ib29sX3QgaXNfZnVuY19kZWNsKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZv aWQgZHVrX2pzX2luaXRfYWN0aXZhdGlvbl9lbnZpcm9ubWVudF9yZWNvcmRzX2RlbGF5ZWQoZHVr X2h0aHJlYWQgKnRociwgZHVrX2FjdGl2YXRpb24gKmFjdCk7CitEVUtfSU5URVJOQUxfREVDTCB2 b2lkIGR1a19qc19jbG9zZV9lbnZpcm9ubWVudF9yZWNvcmQoZHVrX2h0aHJlYWQgKnRociwgZHVr X2hvYmplY3QgKmVudik7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaG9iamVjdCAqZHVrX2NyZWF0 ZV9hY3RpdmF0aW9uX2Vudmlyb25tZW50X3JlY29yZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9i amVjdCAqZnVuYywgZHVrX3NpemVfdCBib3R0b21fYnl0ZW9mZik7CitEVUtfSU5URVJOQUxfREVD TCB2b2lkIGR1a19qc19wdXNoX2Nsb3N1cmUoZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaGNvbXBmdW5jICpmdW5fdGVtcCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAq b3V0ZXJfdmFyX2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkdWtfaG9iamVjdCAqb3V0ZXJfbGV4X2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfYm9vbF90IGFkZF9hdXRvX3Byb3RvKTsKKworLyogY2FsbCBo YW5kbGluZyAqLworRFVLX0lOVEVSTkFMX0RFQ0wgZHVrX2ludF90IGR1a19oYW5kbGVfY2FsbF91 bnByb3RlY3RlZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4X2Z1bmMsIGR1a19zbWFs bF91aW50X3QgY2FsbF9mbGFncyk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX2hh bmRsZV9jYWxsX3VucHJvdGVjdGVkX25hcmdzKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBu YXJncywgZHVrX3NtYWxsX3VpbnRfdCBjYWxsX2ZsYWdzKTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1 a19pbnRfdCBkdWtfaGFuZGxlX3NhZmVfY2FsbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfc2FmZV9j YWxsX2Z1bmN0aW9uIGZ1bmMsIHZvaWQgKnVkYXRhLCBkdWtfaWR4X3QgbnVtX3N0YWNrX2FyZ3Ms IGR1a19pZHhfdCBudW1fc3RhY2tfcmVzKTsKK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2Nh bGxfY29uc3RydWN0X3Bvc3Rwcm9jZXNzKGR1a19odGhyZWFkICp0aHIsIGR1a19zbWFsbF91aW50 X3QgcHJveHlfaW52YXJpYW50KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfVkVSQk9TRV9FUlJPUlMp CitEVUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19jYWxsX3NldHVwX3Byb3BjYWxsX2Vycm9yKGR1 a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dl90YXJnLCBkdWtfdHZhbCAqdHZfYmFzZSwgZHVr X3R2YWwgKnR2X2tleSk7CisjZW5kaWYKKworLyogYnl0ZWNvZGUgZXhlY3V0aW9uICovCitEVUtf SU5URVJOQUxfREVDTCB2b2lkIGR1a19qc19leGVjdXRlX2J5dGVjb2RlKGR1a19odGhyZWFkICpl eGVjX3Rocik7CisKKyNlbmRpZiAgLyogRFVLX0pTX0hfSU5DTFVERUQgKi8KKy8qICNpbmNsdWRl IGR1a19udW1jb252LmggKi8KKy8qCisgKiAgTnVtYmVyLXRvLXN0cmluZyBjb252ZXJzaW9uLiAg VGhlIHNlbWFudGljcyBvZiB0aGVzZSBpcyB2ZXJ5IHRpZ2h0bHkKKyAqICBib3VuZCB3aXRoIHRo ZSBFQ01BU2NyaXB0IHNlbWFudGljcyByZXF1aXJlZCBmb3IgY2FsbCBzaXRlcy4KKyAqLworCisj aWYgIWRlZmluZWQoRFVLX05VTUNPTlZfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX05VTUNPTlZf SF9JTkNMVURFRAorCisvKiBPdXRwdXQgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRpZ2l0cyBpbnN0 ZWFkIG9mIHVzaW5nIHRoZSBzaG9ydGVzdAorICogZm9ybS4gIFVzZWQgZm9yIHRvUHJlY2lzaW9u KCkgYW5kIHRvRml4ZWQoKS4KKyAqLworI2RlZmluZSBEVUtfTjJTX0ZMQUdfRklYRURfRk9STUFU ICAgICAgICAgKDFVIDw8IDApCisKKy8qIEZvcmNlIGV4cG9uZW50aWFsIGZvcm1hdC4gIFVzZWQg Zm9yIHRvRXhwb25lbnRpYWwoKS4gKi8KKyNkZWZpbmUgRFVLX04yU19GTEFHX0ZPUkNFX0VYUCAg ICAgICAgICAgICgxVSA8PCAxKQorCisvKiBJZiBudW1iZXIgd291bGQgbmVlZCB6ZXJvIHBhZGRp bmcgKGZvciB3aG9sZSBudW1iZXIgcGFydCksIHVzZQorICogZXhwb25lbnRpYWwgZm9ybWF0IGlu c3RlYWQuICBFLmcuIGlmIGlucHV0IG51bWJlciBpcyAxMjMwMCwgMworICogZGlnaXRzIGFyZSBn ZW5lcmF0ZWQgKCIxMjMiKSwgb3V0cHV0ICIxLjIzZSs0IiBpbnN0ZWFkIG9mICIxMjMwMCIuCisg KiBVc2VkIGZvciB0b1ByZWNpc2lvbigpLgorICovCisjZGVmaW5lIERVS19OMlNfRkxBR19OT19a RVJPX1BBRCAgICAgICAgICAoMVUgPDwgMikKKworLyogRGlnaXQgY291bnQgaW5kaWNhdGVzIG51 bWJlciBvZiBmcmFjdGlvbnMgKGkuZS4gYW4gYWJzb2x1dGUKKyAqIGRpZ2l0IGluZGV4IGluc3Rl YWQgb2YgYSByZWxhdGl2ZSBvbmUpLiAgVXNlZCB0b2dldGhlciB3aXRoCisgKiBEVUtfTjJTX0ZM QUdfRklYRURfRk9STUFUIGZvciB0b0ZpeGVkKCkuCisgKi8KKyNkZWZpbmUgRFVLX04yU19GTEFH X0ZSQUNUSU9OX0RJR0lUUyAgICAgICgxVSA8PCAzKQorCisvKgorICogIFN0cmluZy10by1udW1i ZXIgY29udmVyc2lvbgorICovCisKKy8qIE1heGltdW0gZXhwb25lbnQgdmFsdWUgd2hlbiBwYXJz aW5nIG51bWJlcnMuICBUaGlzIGlzIG5vdCBzdHJpY3RseQorICogY29tcGxpYW50IGFzIHRoZXJl IHNob3VsZCBiZSBubyB1cHBlciBsaW1pdCwgYnV0IGFzIHdlIHBhcnNlIHRoZQorICogZXhwb25l bnQgd2l0aG91dCBhIGJpZ2ludCwgaW1wb3NlIHNvbWUgbGltaXQuICBUaGUgbGltaXQgc2hvdWxk IGJlCisgKiBzbWFsbCBlbm91Z2ggdGhhdCBtdWx0aXBseWluZyBpdCAob3IgbGltaXQtMSB0byBi ZSBwcmVjaXNlKSB3b24ndAorICogb3ZlcmZsb3cgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHJhbmdl LiAgRXhwb25lbnQgaXMgb25seSBwYXJzZWQgd2l0aAorICogcmFkaXggMTAsIGJ1dCB3aXRoIG1h eGltdW0gcmFkaXggKDM2KSBhIHNhZmUgbGltaXQgaXM6CisgKiAoMTAwMDAwMDAqMzYpLnRvU3Ry aW5nKDE2KSAtPiAnMTU3NTJhMDAnCisgKi8KKyNkZWZpbmUgRFVLX1MyTl9NQVhfRVhQT05FTlQg ICAgICAgICAgICAgIDEwMDAwMDAwTAorCisvKiBUcmltIHdoaXRlIHNwYWNlICg9IGFsbG93IGxl YWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UpICovCisjZGVmaW5lIERVS19TMk5fRkxBR19U UklNX1dISVRFICAgICAgICAgICAoMVUgPDwgMCkKKworLyogQWxsb3cgZXhwb25lbnQgKi8KKyNk ZWZpbmUgRFVLX1MyTl9GTEFHX0FMTE9XX0VYUCAgICAgICAgICAgICgxVSA8PCAxKQorCisvKiBB bGxvdyB0cmFpbGluZyBnYXJiYWdlIChlLmcuIHRyZWF0ICIxMjNmb28iIGFzICIxMjMpICovCisj ZGVmaW5lIERVS19TMk5fRkxBR19BTExPV19HQVJCQUdFICAgICAgICAoMVUgPDwgMikKKworLyog QWxsb3cgbGVhZGluZyBwbHVzIHNpZ24gKi8KKyNkZWZpbmUgRFVLX1MyTl9GTEFHX0FMTE9XX1BM VVMgICAgICAgICAgICgxVSA8PCAzKQorCisvKiBBbGxvdyBsZWFkaW5nIG1pbnVzIHNpZ24gKi8K KyNkZWZpbmUgRFVLX1MyTl9GTEFHX0FMTE9XX01JTlVTICAgICAgICAgICgxVSA8PCA0KQorCisv KiBBbGxvdyAnSW5maW5pdHknICovCisjZGVmaW5lIERVS19TMk5fRkxBR19BTExPV19JTkYgICAg ICAgICAgICAoMVUgPDwgNSkKKworLyogQWxsb3cgZnJhY3Rpb24gcGFydCAqLworI2RlZmluZSBE VUtfUzJOX0ZMQUdfQUxMT1dfRlJBQyAgICAgICAgICAgKDFVIDw8IDYpCisKKy8qIEFsbG93IG5h a2VkIGZyYWN0aW9uIChlLmcuICIuMTIzIikgKi8KKyNkZWZpbmUgRFVLX1MyTl9GTEFHX0FMTE9X X05BS0VEX0ZSQUMgICAgICgxVSA8PCA3KQorCisvKiBBbGxvdyBlbXB0eSBmcmFjdGlvbiAoZS5n LiAiMTIzLiIpICovCisjZGVmaW5lIERVS19TMk5fRkxBR19BTExPV19FTVBUWV9GUkFDICAgICAo MVUgPDwgOCkKKworLyogQWxsb3cgZW1wdHkgc3RyaW5nIHRvIGJlIGludGVycHJldGVkIGFzIDAg Ki8KKyNkZWZpbmUgRFVLX1MyTl9GTEFHX0FMTE9XX0VNUFRZX0FTX1pFUk8gICgxVSA8PCA5KQor CisvKiBBbGxvdyBsZWFkaW5nIHplcm9lcyAoZS5nLiAiMDEyMyIgLT4gIjEyMyIpICovCisjZGVm aW5lIERVS19TMk5fRkxBR19BTExPV19MRUFESU5HX1pFUk8gICAoMVUgPDwgMTApCisKKy8qIEFs bG93IGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgaGV4IGJhc2UgKCIweCIgb3IgIjBYIiBwcmVmaXgp LAorICogb3ZlcnJpZGVzIHJhZGl4IGFyZ3VtZW50IGFuZCBmb3JjZXMgaW50ZWdlciBtb2RlLgor ICovCisjZGVmaW5lIERVS19TMk5fRkxBR19BTExPV19BVVRPX0hFWF9JTlQgICAoMVUgPDwgMTEp CisKKy8qIEFsbG93IGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgbGVnYWN5IG9jdGFsIGJhc2UgKCIw biIpLAorICogb3ZlcnJpZGVzIHJhZGl4IGFyZ3VtZW50IGFuZCBmb3JjZXMgaW50ZWdlciBtb2Rl LgorICovCisjZGVmaW5lIERVS19TMk5fRkxBR19BTExPV19BVVRPX0xFR0FDWV9PQ1RfSU5UICAg KDFVIDw8IDEyKQorCisvKiBBbGxvdyBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIEVTMjAxNSBvY3Rh bCBiYXNlICgiMG8xMjMiKSwKKyAqIG92ZXJyaWRlcyByYWRpeCBhcmd1bWVudCBhbmQgZm9yY2Vz IGludGVnZXIgbW9kZS4KKyAqLworI2RlZmluZSBEVUtfUzJOX0ZMQUdfQUxMT1dfQVVUT19PQ1Rf SU5UICAgKDFVIDw8IDEzKQorCisvKiBBbGxvdyBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIEVTMjAx NSBiaW5hcnkgYmFzZSAoIjBiMTAwMDEiKSwKKyAqIG92ZXJyaWRlcyByYWRpeCBhcmd1bWVudCBh bmQgZm9yY2VzIGludGVnZXIgbW9kZS4KKyAqLworI2RlZmluZSBEVUtfUzJOX0ZMQUdfQUxMT1df QVVUT19CSU5fSU5UICAgKDFVIDw8IDE0KQorCisvKgorICogIFByb3RvdHlwZXMKKyAqLworCitE VUtfSU5URVJOQUxfREVDTCB2b2lkIGR1a19udW1jb252X3N0cmluZ2lmeShkdWtfaHRocmVhZCAq dGhyLCBkdWtfc21hbGxfaW50X3QgcmFkaXgsIGR1a19zbWFsbF9pbnRfdCBkaWdpdHMsIGR1a19z bWFsbF91aW50X3QgZmxhZ3MpOworRFVLX0lOVEVSTkFMX0RFQ0wgdm9pZCBkdWtfbnVtY29udl9w YXJzZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21hbGxfaW50X3QgcmFkaXgsIGR1a19zbWFsbF91 aW50X3QgZmxhZ3MpOworCisjZW5kaWYgIC8qIERVS19OVU1DT05WX0hfSU5DTFVERUQgKi8KKy8q ICNpbmNsdWRlIGR1a19iaV9wcm90b3MuaCAqLworLyoKKyAqICBQcm90b3R5cGVzIGZvciBidWls dC1pbiBmdW5jdGlvbnMgbm90IGF1dG9tYXRpY2FsbHkgY292ZXJlZCBieSB0aGUKKyAqICBoZWFk ZXIgZGVjbGFyYXRpb25zIGVtaXR0ZWQgYnkgZ2VuYnVpbHRpbnMucHkuCisgKi8KKworI2lmICFk ZWZpbmVkKERVS19CVUlMVElOX1BST1RPU19IX0lOQ0xVREVEKQorI2RlZmluZSBEVUtfQlVJTFRJ Tl9QUk9UT1NfSF9JTkNMVURFRAorCisvKiBCdWZmZXIgc2l6ZSBuZWVkZWQgZm9yIElTTyA4NjAx IGZvcm1hdHRpbmcuCisgKiBBY2N1cmF0ZSB2YWx1ZSBpcyAzMiArIDEgZm9yIE5VTCB0ZXJtaW5h dGlvbjoKKyAqICAgPj4+IGxlbignKzEyMzQ1Ni0wMS0yM1QxMjozNDo1Ni4xMjMrMTI6MzQnKQor ICogICAzMgorICogSW5jbHVkZSBhZGRpdGlvbmFsIHNwYWNlIHRvIGJlIHNhZmUuCisgKi8KKyNk ZWZpbmUgIERVS19CSV9EQVRFX0lTTzg2MDFfQlVGU0laRSAgNDAKKworLyogSGVscGVycyBleHBv c2VkIGZvciBpbnRlcm5hbCB1c2UgKi8KK0RVS19JTlRFUk5BTF9ERUNMIHZvaWQgZHVrX2JpX2Rh dGVfdGltZXZhbF90b19wYXJ0cyhkdWtfZG91YmxlX3QgZCwgZHVrX2ludF90ICpwYXJ0cywgZHVr X2RvdWJsZV90ICpkcGFydHMsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpOworRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX2RvdWJsZV90IGR1a19iaV9kYXRlX2dldF90aW1ldmFsX2Zyb21fZHBhcnRzKGR1 a19kb3VibGVfdCAqZHBhcnRzLCBkdWtfc21hbGxfdWludF90IGZsYWdzKTsKK0RVS19JTlRFUk5B TF9ERUNMIGR1a19ib29sX3QgZHVrX2JpX2RhdGVfaXNfbGVhcF95ZWFyKGR1a19pbnRfdCB5ZWFy KTsKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2JpX2RhdGVfdGltZXZhbF9pbl92 YWxpZF9yYW5nZShkdWtfZG91YmxlX3QgeCk7CitEVUtfSU5URVJOQUxfREVDTCBkdWtfYm9vbF90 IGR1a19iaV9kYXRlX3llYXJfaW5fdmFsaWRfcmFuZ2UoZHVrX2RvdWJsZV90IHllYXIpOworRFVL X0lOVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfYmlfZGF0ZV90aW1ldmFsX2luX2xlZXdheV9y YW5nZShkdWtfZG91YmxlX3QgeCk7CisvKiBCdWlsdC1pbiBwcm92aWRlcnMgKi8KKyNpZiBkZWZp bmVkKERVS19VU0VfREFURV9OT1dfR0VUVElNRU9GREFZKQorRFVLX0lOVEVSTkFMX0RFQ0wgZHVr X2RvdWJsZV90IGR1a19iaV9kYXRlX2dldF9ub3dfZ2V0dGltZW9mZGF5KHZvaWQpOworI2VuZGlm CisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1RJTUUpCitEVUtfSU5URVJOQUxfREVDTCBk dWtfZG91YmxlX3QgZHVrX2JpX2RhdGVfZ2V0X25vd190aW1lKHZvaWQpOworI2VuZGlmCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1dJTkRPV1MpCitEVUtfSU5URVJOQUxfREVDTCBkdWtf ZG91YmxlX3QgZHVrX2JpX2RhdGVfZ2V0X25vd193aW5kb3dzKHZvaWQpOworI2VuZGlmCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1dJTkRPV1NfU1VCTVMpCitEVUtfSU5URVJOQUxfREVD TCBkdWtfZG91YmxlX3QgZHVrX2JpX2RhdGVfZ2V0X25vd193aW5kb3dzX3N1Ym1zKHZvaWQpOwor I2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SKSB8fCBkZWZpbmVk KERVS19VU0VfREFURV9UWk9fR01USU1FX1MpIHx8IGRlZmluZWQoRFVLX1VTRV9EQVRFX1RaT19H TVRJTUUpCitEVUtfSU5URVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX2JpX2RhdGVfZ2V0X2xvY2Fs X3R6b2Zmc2V0X2dtdGltZShkdWtfZG91YmxlX3QgZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERV S19VU0VfREFURV9UWk9fV0lORE9XUykKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19pbnRfdCBkdWtf YmlfZGF0ZV9nZXRfbG9jYWxfdHpvZmZzZXRfd2luZG93cyhkdWtfZG91YmxlX3QgZCk7CisjZW5k aWYKKyNpZiBkZWZpbmVkKERVS19VU0VfREFURV9UWk9fV0lORE9XU19OT19EU1QpCitEVUtfSU5U RVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX2JpX2RhdGVfZ2V0X2xvY2FsX3R6b2Zmc2V0X3dpbmRv d3Nfbm9fZHN0KGR1a19kb3VibGVfdCBkKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9E QVRFX1BSU19TVFJQVElNRSkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2JpX2Rh dGVfcGFyc2Vfc3RyaW5nX3N0cnB0aW1lKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKnN0 cik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfREFURV9QUlNfR0VUREFURSkKK0RVS19J TlRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2JpX2RhdGVfcGFyc2Vfc3RyaW5nX2dldGRhdGUo ZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqc3RyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQo RFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElNRSkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19ib29sX3Qg ZHVrX2JpX2RhdGVfZm9ybWF0X3BhcnRzX3N0cmZ0aW1lKGR1a19odGhyZWFkICp0aHIsIGR1a19p bnRfdCAqcGFydHMsIGR1a19pbnRfdCB0em9mZnNldCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncyk7 CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9HRVRfTU9OT1RPTklDX1RJTUVfQ0xPQ0tf R0VUVElNRSkKK0RVS19JTlRFUk5BTF9ERUNMIGR1a19kb3VibGVfdCBkdWtfYmlfZGF0ZV9nZXRf bW9ub3RvbmljX3RpbWVfY2xvY2tfZ2V0dGltZSh2b2lkKTsKKyNlbmRpZgorI2lmIGRlZmluZWQo RFVLX1VTRV9HRVRfTU9OT1RPTklDX1RJTUVfV0lORE9XU19RUEMpCitEVUtfSU5URVJOQUxfREVD TCBkdWtfZG91YmxlX3QgZHVrX2JpX2RhdGVfZ2V0X21vbm90b25pY190aW1lX3dpbmRvd3NfcXBj KHZvaWQpOworI2VuZGlmCisKK0RVS19JTlRFUk5BTF9ERUNMCit2b2lkIGR1a19iaV9qc29uX3Bh cnNlX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX2lkeF90IGlkeF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1 a19pZHhfdCBpZHhfcmV2aXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19z bWFsbF91aW50X3QgZmxhZ3MpOworRFVLX0lOVEVSTkFMX0RFQ0wKK3ZvaWQgZHVrX2JpX2pzb25f c3RyaW5naWZ5X2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19pZHhfdCBpZHhfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX2lkeF90IGlkeF9yZXBsYWNlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X3NwYWNlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpOworCitEVUtfSU5URVJOQUxfREVD TCBkdWtfcmV0X3QgZHVrX3RleHRkZWNvZGVyX2RlY29kZV91dGY4X25vZGVqcyhkdWtfaHRocmVh ZCAqdGhyKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCitEVUtfSU5URVJOQUxf REVDTCB2b2lkIGR1a19wcm94eV9vd25rZXlzX3Bvc3Rwcm9jZXNzKGR1a19odGhyZWFkICp0aHIs IGR1a19ob2JqZWN0ICpoX3Byb3h5X3RhcmdldCwgZHVrX3VpbnRfdCBmbGFncyk7CisjZW5kaWYK KworI2VuZGlmICAvKiBEVUtfQlVJTFRJTl9QUk9UT1NfSF9JTkNMVURFRCAqLworLyogI2luY2x1 ZGUgZHVrX3NlbGZ0ZXN0LmggKi8KKy8qCisgKiAgU2VsZnRlc3QgY29kZQorICovCisKKyNpZiAh ZGVmaW5lZChEVUtfU0VMRlRFU1RfSF9JTkNMVURFRCkKKyNkZWZpbmUgRFVLX1NFTEZURVNUX0hf SU5DTFVERUQKKworI2lmIGRlZmluZWQoRFVLX1VTRV9TRUxGX1RFU1RTKQorRFVLX0lOVEVSTkFM X0RFQ0wgZHVrX3VpbnRfdCBkdWtfc2VsZnRlc3RfcnVuX3Rlc3RzKGR1a19hbGxvY19mdW5jdGlv biBhbGxvY19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGR1a19yZWFsbG9jX2Z1bmN0aW9uIHJlYWxsb2NfZnVuYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfZnJlZV9mdW5jdGlv biBmcmVlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqdWRhdGEpOworI2VuZGlmCisKKyNlbmRpZiAgLyogRFVLX1NFTEZURVNU X0hfSU5DTFVERUQgKi8KKworI2VuZGlmICAvKiBEVUtfSU5URVJOQUxfSF9JTkNMVURFRCAqLwor CisjaWYgZGVmaW5lZChEVUtfVVNFX0NPTVBVVEVEX05BTikKK0RVS19JTlRFUk5BTCBkb3VibGUg ZHVrX2NvbXB1dGVkX25hbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0NPTVBVVEVE X0lORklOSVRZKQorRFVLX0lOVEVSTkFMIGRvdWJsZSBkdWtfY29tcHV0ZWRfaW5maW5pdHk7Cisj ZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRVBMX0ZQQ0xBU1NJRlkpCitEVUtfSU5URVJO QUwgaW50IGR1a19yZXBsX2ZwY2xhc3NpZnkoZG91YmxlIHgpIHsKKwlkdWtfZG91YmxlX3VuaW9u IHU7CisJZHVrX3VpbnRfZmFzdDE2X3QgZXhwdDsKKwlkdWtfc21hbGxfaW50X3QgbXplcm87CisK Kwl1LmQgPSB4OworCWV4cHQgPSAoZHVrX3VpbnRfZmFzdDE2X3QpICh1LnVzW0RVS19EQkxfSURY X1VTMF0gJiAweDdmZjBVTCk7CisJaWYgKGV4cHQgPiAweDAwMDBVTCAmJiBleHB0IDwgMHg3ZmYw VUwpIHsKKwkJLyogZXhwdCB2YWx1ZXMgWzB4MDAxLDB4N2ZlXSA9IG5vcm1hbCAqLworCQlyZXR1 cm4gRFVLX0ZQX05PUk1BTDsKKwl9CisKKwltemVybyA9ICh1LnVpW0RVS19EQkxfSURYX1VJMV0g PT0gMCAmJiAodS51aVtEVUtfREJMX0lEWF9VSTBdICYgMHgwMDBmZmZmZlVMKSA9PSAwKTsKKwlp ZiAoZXhwdCA9PSAweDAwMDBVTCkgeworCQkvKiBleHB0IDB4MDAwIGlzIHplcm8vc3Vibm9ybWFs ICovCisJCWlmIChtemVybykgeworCQkJcmV0dXJuIERVS19GUF9aRVJPOworCQl9IGVsc2Ugewor CQkJcmV0dXJuIERVS19GUF9TVUJOT1JNQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHB0IDB4 ZmZmIGlzIGluZmluaXRlL25hbiAqLworCQlpZiAobXplcm8pIHsKKwkJCXJldHVybiBEVUtfRlBf SU5GSU5JVEU7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gRFVLX0ZQX05BTjsKKwkJfQorCX0KK30K KyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFUExfU0lHTkJJVCkKK0RVS19JTlRFUk5B TCBpbnQgZHVrX3JlcGxfc2lnbmJpdChkb3VibGUgeCkgeworCWR1a19kb3VibGVfdW5pb24gdTsK Kwl1LmQgPSB4OworCXJldHVybiAoaW50KSAodS51Y1tEVUtfREJMX0lEWF9VQzBdICYgMHg4MFVM KTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFUExfSVNGSU5JVEUpCitEVUtf SU5URVJOQUwgaW50IGR1a19yZXBsX2lzZmluaXRlKGRvdWJsZSB4KSB7CisJaW50IGMgPSBEVUtf RlBDTEFTU0lGWSh4KTsKKwlpZiAoYyA9PSBEVUtfRlBfTkFOIHx8IGMgPT0gRFVLX0ZQX0lORklO SVRFKSB7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAxOworCX0KK30KKyNlbmRp ZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFUExfSVNOQU4pCitEVUtfSU5URVJOQUwgaW50IGR1 a19yZXBsX2lzbmFuKGRvdWJsZSB4KSB7CisJaW50IGMgPSBEVUtfRlBDTEFTU0lGWSh4KTsKKwly ZXR1cm4gKGMgPT0gRFVLX0ZQX05BTik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VT RV9SRVBMX0lTSU5GKQorRFVLX0lOVEVSTkFMIGludCBkdWtfcmVwbF9pc2luZihkb3VibGUgeCkg eworCWludCBjID0gRFVLX0ZQQ0xBU1NJRlkoeCk7CisJcmV0dXJuIChjID09IERVS19GUF9JTkZJ TklURSk7Cit9CisjZW5kaWYKKy8qCisgKiAgRGVidWdnaW5nIG1hY3JvIGNhbGxzLgorICovCisK Ky8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKworLyoKKyAqICBEZWJ1Z2dpbmcgZW5hYmxlZAorICov CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 ZGFyZy5oPgorCisjaWYgIWRlZmluZWQoRFVLX1VTRV9ERUJVR19XUklURSkKKyNlcnJvciBkZWJ1 Z2dpbmcgZW5hYmxlZCAoRFVLX1VTRV9ERUJVRykgYnV0IERVS19VU0VfREVCVUdfV1JJVEUgbm90 IGRlZmluZWQKKyNlbmRpZgorCisjZGVmaW5lIERVS19fREVCVUdfQlVGU0laRSAgRFVLX1VTRV9E RUJVR19CVUZTSVpFCisKKyNpZiBkZWZpbmVkKERVS19VU0VfVkFSSUFESUNfTUFDUk9TKQorCitE VUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfbG9nKGR1a19pbnRfdCBsZXZlbCwgY29uc3QgY2hh ciAqZmlsZSwgZHVrX2ludF90IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZt dCwgLi4uKSB7CisJdmFfbGlzdCBhcDsKKwlsb25nIGFyZ19sZXZlbDsKKwljb25zdCBjaGFyICph cmdfZmlsZTsKKwlsb25nIGFyZ19saW5lOworCWNvbnN0IGNoYXIgKmFyZ19mdW5jOworCWNvbnN0 IGNoYXIgKmFyZ19tc2c7CisJY2hhciBidWZbRFVLX19ERUJVR19CVUZTSVpFXTsKKworCXZhX3N0 YXJ0KGFwLCBmbXQpOworCisJZHVrX21lbXplcm8oKHZvaWQgKikgYnVmLCAoc2l6ZV90KSBEVUtf X0RFQlVHX0JVRlNJWkUpOworCWR1a19kZWJ1Z192c25wcmludGYoYnVmLCBEVUtfX0RFQlVHX0JV RlNJWkUgLSAxLCBmbXQsIGFwKTsKKworCWFyZ19sZXZlbCA9IChsb25nKSBsZXZlbDsKKwlhcmdf ZmlsZSA9IChjb25zdCBjaGFyICopIGZpbGU7CisJYXJnX2xpbmUgPSAobG9uZykgbGluZTsKKwlh cmdfZnVuYyA9IChjb25zdCBjaGFyICopIGZ1bmM7CisJYXJnX21zZyA9IChjb25zdCBjaGFyICop IGJ1ZjsKKwlEVUtfVVNFX0RFQlVHX1dSSVRFKGFyZ19sZXZlbCwgYXJnX2ZpbGUsIGFyZ19saW5l LCBhcmdfZnVuYywgYXJnX21zZyk7CisKKwl2YV9lbmQoYXApOworfQorCisjZWxzZSAgLyogRFVL X1VTRV9WQVJJQURJQ19NQUNST1MgKi8KKworRFVLX0lOVEVSTkFMIGNoYXIgZHVrX2RlYnVnX2Zp bGVfc3Rhc2hbRFVLX0RFQlVHX1NUQVNIX1NJWkVdOworRFVLX0lOVEVSTkFMIGR1a19pbnRfdCBk dWtfZGVidWdfbGluZV9zdGFzaDsKK0RVS19JTlRFUk5BTCBjaGFyIGR1a19kZWJ1Z19mdW5jX3N0 YXNoW0RVS19ERUJVR19TVEFTSF9TSVpFXTsKK0RVS19JTlRFUk5BTCBkdWtfaW50X3QgZHVrX2Rl YnVnX2xldmVsX3N0YXNoOworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfbG9nKGNvbnN0 IGNoYXIgKmZtdCwgLi4uKSB7CisJdmFfbGlzdCBhcDsKKwlsb25nIGFyZ19sZXZlbDsKKwljb25z dCBjaGFyICphcmdfZmlsZTsKKwlsb25nIGFyZ19saW5lOworCWNvbnN0IGNoYXIgKmFyZ19mdW5j OworCWNvbnN0IGNoYXIgKmFyZ19tc2c7CisJY2hhciBidWZbRFVLX19ERUJVR19CVUZTSVpFXTsK KworCXZhX3N0YXJ0KGFwLCBmbXQpOworCisJZHVrX21lbXplcm8oKHZvaWQgKikgYnVmLCAoc2l6 ZV90KSBEVUtfX0RFQlVHX0JVRlNJWkUpOworCWR1a19kZWJ1Z192c25wcmludGYoYnVmLCBEVUtf X0RFQlVHX0JVRlNJWkUgLSAxLCBmbXQsIGFwKTsKKworCWFyZ19sZXZlbCA9IChsb25nKSBkdWtf ZGVidWdfbGV2ZWxfc3Rhc2g7CisJYXJnX2ZpbGUgPSAoY29uc3QgY2hhciAqKSBkdWtfZGVidWdf ZmlsZV9zdGFzaDsKKwlhcmdfbGluZSA9IChsb25nKSBkdWtfZGVidWdfbGluZV9zdGFzaDsKKwlh cmdfZnVuYyA9IChjb25zdCBjaGFyICopIGR1a19kZWJ1Z19mdW5jX3N0YXNoOworCWFyZ19tc2cg PSAoY29uc3QgY2hhciAqKSBidWY7CisJRFVLX1VTRV9ERUJVR19XUklURShhcmdfbGV2ZWwsIGFy Z19maWxlLCBhcmdfbGluZSwgYXJnX2Z1bmMsIGFyZ19tc2cpOworCisJdmFfZW5kKGFwKTsKK30K KworI2VuZGlmICAvKiBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUyAqLworCisjZWxzZSAgLyogRFVL X1VTRV9ERUJVRyAqLworCisvKgorICogIERlYnVnZ2luZyBkaXNhYmxlZAorICovCisKKyNlbmRp ZiAgLyogRFVLX1VTRV9ERUJVRyAqLworCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYg RFVLX19ERUJVR19CVUZTSVpFCisvKgorICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGdl bmJ1aWx0aW5zLnB5LCBkbyBub3QgZWRpdCEKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJu YWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJU SU9OUykKKyNkZWZpbmUgRFVLX19SRUZDSU5JVChyZWZjKSAwIC8qaF9hc3NlcnRfcmVmY291bnQq LywgKHJlZmMpIC8qYWN0dWFsKi8KKyNlbHNlCisjZGVmaW5lIERVS19fUkVGQ0lOSVQocmVmYykg KHJlZmMpIC8qYWN0dWFsKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1JPTV9TVFJJ TkdTKQorI2Vycm9yIFJPTSBzdXBwb3J0IG5vdCBlbmFibGVkLCByZXJ1biBjb25maWd1cmUucHkg d2l0aCAtLXJvbS1zdXBwb3J0CisjZWxzZSAgLyogRFVLX1VTRV9ST01fU1RSSU5HUyAqLworRFVL X0lOVEVSTkFMIGNvbnN0IGR1a191aW50OF90IGR1a19zdHJpbmdzX2RhdGFbOTY3XSA9IHsKKzc5 LDQwLDIwOSwxNDQsMTY4LDEwNSw2LDc4LDU0LDEzOSw4OSwxODUsNDQsNDgsNDYsOTAsMTIwLDgs MTU0LDE0MCwzNSwxMDMsCiszNSwxMTMsMTkzLDczLDUsNTIsMTEyLDE4MCwxMDQsMTY2LDEzNSw1 MiwxODgsNCw5OCwxMiwyNywxNDYsMTU2LDgwLDIxMSwzMSwKKzEyOSwxMTUsMTUwLDY0LDUyLDIy MCwxMDksMjQsMTgsNjgsMTU2LDI0LDM4LDY3LDExNCwzNiw1NSw5LDExOSwxNTEsMTMyLAorMTQw LDkzLDE4LDExMywxMjgsMTUzLDIwMSwyMTIsMjAxLDIwNSwyLDI0OCw4LDE5NiwyNCwyMjQsMTA0 LDgyLDE0Niw0MCwyMjQsCisxOTMsNDgsMTE0LDE2OCwzNywxNDcsMTk2LDU0LDEyMywyOCw0LDk4 LDEyLDQzLDE0OCw2NywxMDMsMTc3LDE5Miw3MCwzMiwKKzE5NiwxMjEsNjgsNTQsMTIzLDI4LDE4 LDE5MiwxOTksMTQ0LDEyNCw0LDk4LDEyLDQzLDEzNiwxMDgsMjQ0LDExNywxODQsOCwKKzE5Niwy NCw5NSw0MCwxMzQsMjA3LDcxLDkxLDEyOCwxNDAsNjUsMTMzLDExMywxMywxNTgsMTU4LDE1MSwx LDI0LDEzMSwxMSwKKzIyOSwxNiwyMTcsMjMzLDIzMywxMTIsMTcsMTM2LDQ4LDIwNiwyMSwxMTAs NCwyNDQsMjQ0LDE4NCw4LDE5NiwyNCwxMDMsMTAsCisxODMsMiwxMjIsMjE4LDE1Niw0LDk4LDEy LDI0LDIwMywxMTIsNjQsMTc5LDExMywxOTMsNzksOCwyMTgsMTU1LDEzMSwzMiwKKzE4NCw3MCwy MTIsMjIwLDEzLDEwLDgyLDY4LDI1MiwxMjMsMTQ0LDIxNywxNDYsMzgsMjI4LDIwNywxOCwwLDEw MCwzNyw2NCwKKzE3OCwyMTIsMTEsMTYxLDE3LDEwNCwxNjIsOTYsMTAsMjAwLDE5Myw1NywxNjUs NjUsMTY5LDE2LDUsMTAwLDgxLDI3LDcwLDE4LAorMzIsMTAsMjAwLDY4LDE4NSwxMywxMTYsMjIx LDE5NywxODQsNjQsODksNTcsNDEsMTk3LDEzLDQ5LDIzNCw1LDIwOCwxNTYsCisxMTMsODcsNTUs MTE4LDE0NywyMCwxODcsNTYsMTYxLDE2Niw5MiwyMjEsMjEyLDczLDIxMCwyMzYsMjI2LDEzNCwx NTMsMTE1LAorMTE5LDc2LDIwMSwyMDMsMTc5LDEzOCwyNiw5OSw3MywyMTIsMTM2LDEzNiwxNjQs MjUsMTc0LDEzNyw1NiwzMiw3MiwxMzcsCisxMDEsMjMsNTIsNDUsMTMsMzQsODYsOSw3OSwxMzYs MTA0LDIwMSwxMTQsMTQ5LDk2LDUyLDEzOCwxMzQsMTQwLDE1MSw3NSwKKzIyNiwyMzMsMTg2LDEy MCwxMjEsMjIsMzksNTQsODMsMTQxLDUsNTUsNjgsMjM2LDM2LDE2NCwzLDE2LDIyNSwxMTUsMTUw LDY0LAorNTIsMjA1LDE2MywyLDcyLDE1NCw4MywxMzgsMjYsOTksNzUsMTIsMTEsMTUwLDEwMyw1 LDM2LDIwLDIxMSw3MCwxNDAsMTMzLAorNjcsNzIsNDksMjQxLDE2MCwyMjcsODEsMTk2LDUyLDE2 OCwxMDYsMzksMTMyLDI1MiwxODMsMTM2LDEwNSw4MCwyMTIsNzksMiwKKzI0OSwxMTAsMTI4LDEy Niw4OCw5NSwxMzMsMTA5LDIzNywyMzcsMjM3LDE1MSwyMzUsMTI3LDQ2LDI0OSwxMTksMjAzLDE5 MCwKKzE4NiwyMDYsMzMsMTgxLDIsMjA4LDYxLDE5MCwxMiwxOSwzNCw2NSwxOSw4MSwxMzIsMTA4 LDIyOCw5NywxLDEwNywzMywxMiwKKzMyLDQ1LDEwMCwxMzcsNjQsMjQ3LDE3NSw5LDE5LDE1NSw0 MSwxOTgsMTMwLDE1NSwxMzQsNjksMTQ2LDEwMCwyMjcsMjI2LAorMjMxLDE0Niw1MSwxOTIsMjA0 LDczLDE0MCwyMjQsMTQ1LDIyMSwxMDIsMjQxLDY4LDE5NiwxNjksMjQ4LDMwLDc1LDEyLDExLAor MTUxLDI0MiwyMzMsMTg3LDE0MywxMzgsMjQsMTM3LDE2MiwxNjQsMjU1LDI1Myw2MywzLDIwMSw5 NywxMjksMTE0LDI1NCw5MiwKKzExMiw3NSwxMzYsMTA4LDE2Niw2LDEzNiwxNTksMjU1LDE2Nywy MjQsMTIxLDQ0LDQ4LDQ2LDk1LDIwMywxNjYsMjM4LDc0LAorMTEzLDY3LDc3LDIwMSwxMjgsMjIz LDI1NSwyMjMsMjI0LDEyMSw0NCw0OCw0Niw5NSwyMDMsMTQ1LDQ2LDksMjA1LDE2LDM5LAorMjAx LDYyLDM2LDAsMTkyLDIxLDE0NywyNTUsMjM4LDE0NSwzOSwxOTksMTk3LDIxMSwxMTYsMjQwLDI0 MiwxMTMsMTk3LDc4LAorMjE0LDIxMSwyMjYsMjMzLDE4NywxMDcsMTA1LDE5LDExOSwzNyw1Niwx NjEsMTY2LDUyLDIyMSwyMTIsMjAxLDIwNSwzNiwyNDAsCisyNDIsMTYsOTYsMTUyLDEyLDE3OCw1 MiwyMTEsNTYsMjI4LDczLDE1MCw4MywwLDE0OCwzOSwxMzcsNzUsNjcsNzMsMTk4LDIwOSwKKzEy OSwzNiw4NSwxODUsMjAxLDE5NiwyLDMyLDE5Myw0OCwxNywxNjAsOTcsMTYsODQsNDQsMTU2LDEw NCwyNCw2NywxODksMjAwLAorMTA4LDIwMSwxOSwyMzgsMTE0LDk2LDEzNywxMzcsNTAsMjM4LDEx MywxNjQsMTg4LDIxMSwxODUsMTkyLDIyNiwxMDAsMTksCisxMzQsNjgsMTEwLDExMiwxNzQsMTM5 LDAsMTg1LDMxLDExNSwxNDksNCw4OCw3LDE1OSwxMTUsMTQ2LDExNywzNCwzNCwzNSwKKzExNSwx NDMsMjIsMTQ2LDIwOCwyMTAsMTksMTE1LDE0MCwzLDIwNywxODUsMjAyLDEzMCwzNiwxMDksODUs MTg1LDE5NCwxNjEsCisxNjAsOTAsNTAsNzIsMTU1LDExNSwxNDksMiwyMzIsNjcsMTM3LDIwNCwx MjIsMjIsNjYsMTYxLDE3NSwxNjQsMjEwLDcyLDE5OSwKKzEzMCwxMzcsMSw1MCwzMiwxNDUsMTQz LDM4LDEyMCwxODYsMTk1LDM1LDEwNiw1MSwxNDYsMjMwLDgsMzYsNzcsMTA5LDY1LDM4LAorMjI2 LDcyLDE1OSwxOTEsMTg5LDE4MSw3MCwxNDAsMTMzLDIyMiwyNDksMjEyLDIyNyw2NiwxMjUsMjQ1 LDE4NywyNTEsMjE5LAorNzcsMywxMTksMTkwLDExNyw1NiwyMDgsMTU5LDEyNSwxMTAsMjU0LDI0 NiwyMTAsMjYsOTMsMjM5LDE1Nyw3OCw1MiwzOSwyMjMsCis5MywxOTEsMTg5LDE4MCwyMTIsNTIs MTg3LDIyMyw1OCwxNTYsMTA0LDc5LDE5MCwxODcsMTI3LDEyMywxMDQsMTgwLDEwNCwKKzE4Mywx OTAsMTE3LDU2LDIwOCwxNTksMTI1LDEwMiwyNTQsMjA5LDEwNCwyMDksMTI0LDIzNCwxMTMsMTYx LDYyLDI1MCw4MCwKKzE5NiwxMjgsODEsNCw5LDE2LDE2Miw0LDE5NiwxMTYsOSwyMDUsMTU0LDI3 LDY2LDMyLDEwMCwxMywxMiw5OCw2OCwyMjcsMzMsCis2NSw2OSwyMDQsMTk1LDM0LDIwMSw1MCw4 LDExMCwzMywyMywzNCwyOCwxNjgsMTA0LDIyLDE4OCwxMiwxNzQsMTM4LDExLDcwLAorMTM4LDEw NCwxMTUsNjgsMTMwLDEzNywxMyw4MiwyNyw0MSwxMjksMTYyLDM1LDEzOCw1NCwxNDYsMTk4LDEz NywzOSw3MiwxODAsCisyMTAsMTc4LDM4LDM1LDE0NiwxMDMsNjgsMTM5LDUxLDE5NywyMTQsMjgs MjI3LDEzMSw3OSwxNSwzNSwxMzgsNTgsMTMwLDM3LAorMTksMTU1LDQxLDE0NiwxNzQsNjQsMjAz LDk5LDE2MSwxMDAsMzcsMTQ1LDUxLDE0OCw3NSw0LDE2NCw2Niw1NCwxNDAsNDksNDYsCisyNDcs NzAsMTAzLDM3LDIzMCw3MCwxNDIsNzAsNjcsMzAsMjMyLDIwNCwxNzgsMTYzLDIwMSwxOCw1NCwx MzksODksMzksMjYsCisxNiwxNjUsMiwyMjgsNjksMzMsMTQzLDg5LDI0LDcwLDIwNiw3Myw2Nywx MDIsNzIsMTQ4LDIsMzIsMjE0LDczLDE1NywyMjQsCisxOCwxMjgsOTgsMjksMjQxLDY5LDY1LDUw LDM3LDI0MSwxMTYsMjAwLDQxLDE0NCwxMDIsMTI1LDIsMTgwLDgsMjEwLDE1MiwzOCwKKzEyOSwy Myw4LDM0LDE5OCwKK307CisjZW5kaWYgIC8qIERVS19VU0VfUk9NX1NUUklOR1MgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9ST01fT0JKRUNUUykKKyNlcnJvciBST00gc3VwcG9ydCBub3QgZW5h YmxlZCwgcmVydW4gY29uZmlndXJlLnB5IHdpdGggLS1yb20tc3VwcG9ydAorI2Vsc2UgIC8qIERV S19VU0VfUk9NX09CSkVDVFMgKi8KKy8qIG5hdGl2ZSBmdW5jdGlvbnM6IDE3NyAqLworRFVLX0lO VEVSTkFMIGNvbnN0IGR1a19jX2Z1bmN0aW9uIGR1a19iaV9uYXRpdmVfZnVuY3Rpb25zWzE3N10g PSB7CisJTlVMTCwKKwlkdWtfYmlfYXJyYXlfY29uc3RydWN0b3IsCisJZHVrX2JpX2FycmF5X2Nv bnN0cnVjdG9yX2lzX2FycmF5LAorCWR1a19iaV9hcnJheV9wcm90b3R5cGVfY29uY2F0LAorCWR1 a19iaV9hcnJheV9wcm90b3R5cGVfaW5kZXhvZl9zaGFyZWQsCisJZHVrX2JpX2FycmF5X3Byb3Rv dHlwZV9pdGVyX3NoYXJlZCwKKwlkdWtfYmlfYXJyYXlfcHJvdG90eXBlX2pvaW5fc2hhcmVkLAor CWR1a19iaV9hcnJheV9wcm90b3R5cGVfcG9wLAorCWR1a19iaV9hcnJheV9wcm90b3R5cGVfcHVz aCwKKwlkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3JlZHVjZV9zaGFyZWQsCisJZHVrX2JpX2FycmF5 X3Byb3RvdHlwZV9yZXZlcnNlLAorCWR1a19iaV9hcnJheV9wcm90b3R5cGVfc2hpZnQsCisJZHVr X2JpX2FycmF5X3Byb3RvdHlwZV9zbGljZSwKKwlkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3NvcnQs CisJZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9zcGxpY2UsCisJZHVrX2JpX2FycmF5X3Byb3RvdHlw ZV90b19zdHJpbmcsCisJZHVrX2JpX2FycmF5X3Byb3RvdHlwZV91bnNoaWZ0LAorCWR1a19iaV9h cnJheWJ1ZmZlcl9jb25zdHJ1Y3RvciwKKwlkdWtfYmlfYXJyYXlidWZmZXJfaXN2aWV3LAorCWR1 a19iaV9ib29sZWFuX2NvbnN0cnVjdG9yLAorCWR1a19iaV9ib29sZWFuX3Byb3RvdHlwZV90b3N0 cmluZ19zaGFyZWQsCisJZHVrX2JpX2J1ZmZlcl9jb21wYXJlX3NoYXJlZCwKKwlkdWtfYmlfYnVm ZmVyX3JlYWRmaWVsZCwKKwlkdWtfYmlfYnVmZmVyX3NsaWNlX3NoYXJlZCwKKwlkdWtfYmlfYnVm ZmVyX3dyaXRlZmllbGQsCisJZHVrX2JpX2RhdGF2aWV3X2NvbnN0cnVjdG9yLAorCWR1a19iaV9k YXRlX2NvbnN0cnVjdG9yLAorCWR1a19iaV9kYXRlX2NvbnN0cnVjdG9yX25vdywKKwlkdWtfYmlf ZGF0ZV9jb25zdHJ1Y3Rvcl9wYXJzZSwKKwlkdWtfYmlfZGF0ZV9jb25zdHJ1Y3Rvcl91dGMsCisJ ZHVrX2JpX2RhdGVfcHJvdG90eXBlX2dldF9zaGFyZWQsCisJZHVrX2JpX2RhdGVfcHJvdG90eXBl X2dldF90aW1lem9uZV9vZmZzZXQsCisJZHVrX2JpX2RhdGVfcHJvdG90eXBlX3NldF9zaGFyZWQs CisJZHVrX2JpX2RhdGVfcHJvdG90eXBlX3NldF90aW1lLAorCWR1a19iaV9kYXRlX3Byb3RvdHlw ZV90b19qc29uLAorCWR1a19iaV9kYXRlX3Byb3RvdHlwZV90b3N0cmluZ19zaGFyZWQsCisJZHVr X2JpX2RhdGVfcHJvdG90eXBlX3ZhbHVlX29mLAorCWR1a19iaV9kdWt0YXBlX29iamVjdF9hY3Qs CisJZHVrX2JpX2R1a3RhcGVfb2JqZWN0X2NvbXBhY3QsCisJZHVrX2JpX2R1a3RhcGVfb2JqZWN0 X2RlYywKKwlkdWtfYmlfZHVrdGFwZV9vYmplY3RfZW5jLAorCWR1a19iaV9kdWt0YXBlX29iamVj dF9maW4sCisJZHVrX2JpX2R1a3RhcGVfb2JqZWN0X2djLAorCWR1a19iaV9kdWt0YXBlX29iamVj dF9pbmZvLAorCWR1a19iaV9lcnJvcl9jb25zdHJ1Y3Rvcl9zaGFyZWQsCisJZHVrX2JpX2Vycm9y X3Byb3RvdHlwZV9maWxlbmFtZV9nZXR0ZXIsCisJZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9maWxl bmFtZV9zZXR0ZXIsCisJZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9saW5lbnVtYmVyX2dldHRlciwK KwlkdWtfYmlfZXJyb3JfcHJvdG90eXBlX2xpbmVudW1iZXJfc2V0dGVyLAorCWR1a19iaV9lcnJv cl9wcm90b3R5cGVfc3RhY2tfZ2V0dGVyLAorCWR1a19iaV9lcnJvcl9wcm90b3R5cGVfc3RhY2tf c2V0dGVyLAorCWR1a19iaV9lcnJvcl9wcm90b3R5cGVfdG9fc3RyaW5nLAorCWR1a19iaV9mdW5j dGlvbl9jb25zdHJ1Y3RvciwKKwlkdWtfYmlfZnVuY3Rpb25fcHJvdG90eXBlLAorCWR1a19iaV9m dW5jdGlvbl9wcm90b3R5cGVfYXBwbHksCisJZHVrX2JpX2Z1bmN0aW9uX3Byb3RvdHlwZV9iaW5k LAorCWR1a19iaV9mdW5jdGlvbl9wcm90b3R5cGVfY2FsbCwKKwlkdWtfYmlfZnVuY3Rpb25fcHJv dG90eXBlX3RvX3N0cmluZywKKwlkdWtfYmlfZ2xvYmFsX29iamVjdF9kZWNvZGVfdXJpLAorCWR1 a19iaV9nbG9iYWxfb2JqZWN0X2RlY29kZV91cmlfY29tcG9uZW50LAorCWR1a19iaV9nbG9iYWxf b2JqZWN0X2VuY29kZV91cmksCisJZHVrX2JpX2dsb2JhbF9vYmplY3RfZW5jb2RlX3VyaV9jb21w b25lbnQsCisJZHVrX2JpX2dsb2JhbF9vYmplY3RfZXNjYXBlLAorCWR1a19iaV9nbG9iYWxfb2Jq ZWN0X2V2YWwsCisJZHVrX2JpX2dsb2JhbF9vYmplY3RfaXNfZmluaXRlLAorCWR1a19iaV9nbG9i YWxfb2JqZWN0X2lzX25hbiwKKwlkdWtfYmlfZ2xvYmFsX29iamVjdF9wYXJzZV9mbG9hdCwKKwlk dWtfYmlfZ2xvYmFsX29iamVjdF9wYXJzZV9pbnQsCisJZHVrX2JpX2dsb2JhbF9vYmplY3RfdW5l c2NhcGUsCisJZHVrX2JpX2pzb25fb2JqZWN0X3BhcnNlLAorCWR1a19iaV9qc29uX29iamVjdF9z dHJpbmdpZnksCisJZHVrX2JpX21hdGhfb2JqZWN0X2NsejMyLAorCWR1a19iaV9tYXRoX29iamVj dF9oeXBvdCwKKwlkdWtfYmlfbWF0aF9vYmplY3RfaW11bCwKKwlkdWtfYmlfbWF0aF9vYmplY3Rf bWF4LAorCWR1a19iaV9tYXRoX29iamVjdF9taW4sCisJZHVrX2JpX21hdGhfb2JqZWN0X29uZWFy Z19zaGFyZWQsCisJZHVrX2JpX21hdGhfb2JqZWN0X3JhbmRvbSwKKwlkdWtfYmlfbWF0aF9vYmpl Y3Rfc2lnbiwKKwlkdWtfYmlfbWF0aF9vYmplY3RfdHdvYXJnX3NoYXJlZCwKKwlkdWtfYmlfbmF0 aXZlX2Z1bmN0aW9uX2xlbmd0aCwKKwlkdWtfYmlfbmF0aXZlX2Z1bmN0aW9uX25hbWUsCisJZHVr X2JpX25vZGVqc19idWZmZXJfYnl0ZV9sZW5ndGgsCisJZHVrX2JpX25vZGVqc19idWZmZXJfY29u Y2F0LAorCWR1a19iaV9ub2RlanNfYnVmZmVyX2NvbnN0cnVjdG9yLAorCWR1a19iaV9ub2RlanNf YnVmZmVyX2NvcHksCisJZHVrX2JpX25vZGVqc19idWZmZXJfZmlsbCwKKwlkdWtfYmlfbm9kZWpz X2J1ZmZlcl9pc19idWZmZXIsCisJZHVrX2JpX25vZGVqc19idWZmZXJfaXNfZW5jb2RpbmcsCisJ ZHVrX2JpX25vZGVqc19idWZmZXJfdG9qc29uLAorCWR1a19iaV9ub2RlanNfYnVmZmVyX3Rvc3Ry aW5nLAorCWR1a19iaV9ub2RlanNfYnVmZmVyX3dyaXRlLAorCWR1a19iaV9udW1iZXJfY2hlY2tf c2hhcmVkLAorCWR1a19iaV9udW1iZXJfY29uc3RydWN0b3IsCisJZHVrX2JpX251bWJlcl9wcm90 b3R5cGVfdG9fZXhwb25lbnRpYWwsCisJZHVrX2JpX251bWJlcl9wcm90b3R5cGVfdG9fZml4ZWQs CisJZHVrX2JpX251bWJlcl9wcm90b3R5cGVfdG9fbG9jYWxlX3N0cmluZywKKwlkdWtfYmlfbnVt YmVyX3Byb3RvdHlwZV90b19wcmVjaXNpb24sCisJZHVrX2JpX251bWJlcl9wcm90b3R5cGVfdG9f c3RyaW5nLAorCWR1a19iaV9udW1iZXJfcHJvdG90eXBlX3ZhbHVlX29mLAorCWR1a19iaV9vYmpl Y3RfY29uc3RydWN0b3IsCisJZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9hc3NpZ24sCisJZHVr X2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9jcmVhdGUsCisJZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rv cl9kZWZpbmVfcHJvcGVydGllcywKKwlkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX2RlZmluZV9w cm9wZXJ0eSwKKwlkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX2dldF9vd25fcHJvcGVydHlfZGVz Y3JpcHRvciwKKwlkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX2lzLAorCWR1a19iaV9vYmplY3Rf Y29uc3RydWN0b3JfaXNfZXh0ZW5zaWJsZSwKKwlkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX2lz X3NlYWxlZF9mcm96ZW5fc2hhcmVkLAorCWR1a19iaV9vYmplY3RfY29uc3RydWN0b3Jfa2V5c19z aGFyZWQsCisJZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9wcmV2ZW50X2V4dGVuc2lvbnMsCisJ ZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9zZWFsX2ZyZWV6ZV9zaGFyZWQsCisJZHVrX2JpX29i amVjdF9nZXRwcm90b3R5cGVfc2hhcmVkLAorCWR1a19iaV9vYmplY3RfcHJvdG90eXBlX2RlZmlu ZWFjY2Vzc29yLAorCWR1a19iaV9vYmplY3RfcHJvdG90eXBlX2hhc19vd25fcHJvcGVydHksCisJ ZHVrX2JpX29iamVjdF9wcm90b3R5cGVfaXNfcHJvdG90eXBlX29mLAorCWR1a19iaV9vYmplY3Rf cHJvdG90eXBlX2xvb2t1cGFjY2Vzc29yLAorCWR1a19iaV9vYmplY3RfcHJvdG90eXBlX3Byb3Bl cnR5X2lzX2VudW1lcmFibGUsCisJZHVrX2JpX29iamVjdF9wcm90b3R5cGVfdG9fbG9jYWxlX3N0 cmluZywKKwlkdWtfYmlfb2JqZWN0X3Byb3RvdHlwZV90b19zdHJpbmcsCisJZHVrX2JpX29iamVj dF9wcm90b3R5cGVfdmFsdWVfb2YsCisJZHVrX2JpX29iamVjdF9zZXRwcm90b3R5cGVfc2hhcmVk LAorCWR1a19iaV9wZXJmb3JtYW5jZV9ub3csCisJZHVrX2JpX3BvaW50ZXJfY29uc3RydWN0b3Is CisJZHVrX2JpX3BvaW50ZXJfcHJvdG90eXBlX3Rvc3RyaW5nX3NoYXJlZCwKKwlkdWtfYmlfcHJv eHlfY29uc3RydWN0b3IsCisJZHVrX2JpX3JlZmxlY3RfYXBwbHksCisJZHVrX2JpX3JlZmxlY3Rf Y29uc3RydWN0LAorCWR1a19iaV9yZWZsZWN0X29iamVjdF9kZWxldGVfcHJvcGVydHksCisJZHVr X2JpX3JlZmxlY3Rfb2JqZWN0X2dldCwKKwlkdWtfYmlfcmVmbGVjdF9vYmplY3RfaGFzLAorCWR1 a19iaV9yZWZsZWN0X29iamVjdF9zZXQsCisJZHVrX2JpX3JlZ2V4cF9jb25zdHJ1Y3RvciwKKwlk dWtfYmlfcmVnZXhwX3Byb3RvdHlwZV9leGVjLAorCWR1a19iaV9yZWdleHBfcHJvdG90eXBlX2Zs YWdzLAorCWR1a19iaV9yZWdleHBfcHJvdG90eXBlX3NoYXJlZF9nZXR0ZXIsCisJZHVrX2JpX3Jl Z2V4cF9wcm90b3R5cGVfdGVzdCwKKwlkdWtfYmlfcmVnZXhwX3Byb3RvdHlwZV90b3N0cmluZywK KwlkdWtfYmlfc3RyaW5nX2NvbnN0cnVjdG9yLAorCWR1a19iaV9zdHJpbmdfY29uc3RydWN0b3Jf ZnJvbV9jaGFyX2NvZGUsCisJZHVrX2JpX3N0cmluZ19jb25zdHJ1Y3Rvcl9mcm9tX2NvZGVfcG9p bnQsCisJZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfY2FzZWNvbnZfc2hhcmVkLAorCWR1a19iaV9z dHJpbmdfcHJvdG90eXBlX2NoYXJfYXQsCisJZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfY2hhcl9j b2RlX2F0LAorCWR1a19iaV9zdHJpbmdfcHJvdG90eXBlX2NvbmNhdCwKKwlkdWtfYmlfc3RyaW5n X3Byb3RvdHlwZV9pbmNsdWRlcywKKwlkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9pbmRleG9mX3No YXJlZCwKKwlkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9sb2NhbGVfY29tcGFyZSwKKwlkdWtfYmlf c3RyaW5nX3Byb3RvdHlwZV9tYXRjaCwKKwlkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9yZXBlYXQs CisJZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfcmVwbGFjZSwKKwlkdWtfYmlfc3RyaW5nX3Byb3Rv dHlwZV9zZWFyY2gsCisJZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfc2xpY2UsCisJZHVrX2JpX3N0 cmluZ19wcm90b3R5cGVfc3BsaXQsCisJZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfc3RhcnRzd2l0 aF9lbmRzd2l0aCwKKwlkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9zdWJzdHIsCisJZHVrX2JpX3N0 cmluZ19wcm90b3R5cGVfc3Vic3RyaW5nLAorCWR1a19iaV9zdHJpbmdfcHJvdG90eXBlX3RvX3N0 cmluZywKKwlkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV90cmltLAorCWR1a19iaV90ZXh0ZGVjb2Rl cl9jb25zdHJ1Y3RvciwKKwlkdWtfYmlfdGV4dGRlY29kZXJfcHJvdG90eXBlX2RlY29kZSwKKwlk dWtfYmlfdGV4dGRlY29kZXJfcHJvdG90eXBlX3NoYXJlZF9nZXR0ZXIsCisJZHVrX2JpX3RleHRl bmNvZGVyX2NvbnN0cnVjdG9yLAorCWR1a19iaV90ZXh0ZW5jb2Rlcl9wcm90b3R5cGVfZW5jb2Rl LAorCWR1a19iaV90ZXh0ZW5jb2Rlcl9wcm90b3R5cGVfZW5jb2RpbmdfZ2V0dGVyLAorCWR1a19i aV90aHJlYWRfY29uc3RydWN0b3IsCisJZHVrX2JpX3RocmVhZF9jdXJyZW50LAorCWR1a19iaV90 aHJlYWRfcmVzdW1lLAorCWR1a19iaV90aHJlYWRfeWllbGQsCisJZHVrX2JpX3R5cGVfZXJyb3Jf dGhyb3dlciwKKwlkdWtfYmlfdHlwZWRhcnJheV9idWZmZXJfZ2V0dGVyLAorCWR1a19iaV90eXBl ZGFycmF5X2J5dGVsZW5ndGhfZ2V0dGVyLAorCWR1a19iaV90eXBlZGFycmF5X2J5dGVvZmZzZXRf Z2V0dGVyLAorCWR1a19iaV90eXBlZGFycmF5X2NvbnN0cnVjdG9yLAorCWR1a19iaV90eXBlZGFy cmF5X3NldCwKKwlkdWtfYmlfdWludDhhcnJheV9hbGxvY3BsYWluLAorCWR1a19iaV91aW50OGFy cmF5X3BsYWlub2YsCit9OworI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTEUpCitEVUtfSU5U RVJOQUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX2J1aWx0aW5zX2RhdGFbNDExNl0gPSB7CisxNDQs MTQ4LDEwNSwyMjQsMzIsNjgsNTIsMjI4LDYyLDEyLDEwNCwyMDAsMTY1LDEzMiw1MiwxNjcsMTk0 LDEzOCwxMDUsMjQzLAorMTI0LDU3LDI4LDIxMSw1NywxOCw2NCw1MiwyMzgsMTI2LDQ0LDEzOCwx MTEsMTcxLDI0MSwxNjQsMTksODcsMTI5LDMwLDMzLAorMTY3LDE2LDE0NSwxNTksOCwyMTEsMTM2 LDksMjI1LDQyLDUsMjQwLDE0NSwxMzksMTYzLDE2Myw4LDIxMSwxMzYsMTAsMjI4LAorNjQsMjEx LDE5LDEzMiwxNDAsOTMsMjksNTYsNzAsMTU2LDY0LDExOSwzNCw2NiwxNDYsMzYsMTA0LDEzNywx OTQsNzAsNDYsCisxNDIsMTcyLDM1LDc4LDMyLDQ3LDE0NiwxOTUsMTAyLDExLDI0MCwxNDUsMTM5 LDE2MywxNzUsOCwyMTEsMTM2LDksMjI4LDI0MCwKKzI0MiwxMTIsMTQ1LDEzOSwxNjMsMTc5LDgs MjExLDEzNiw4LDIzNywzNCwxMzAsMTE4LDQ5LDExNiwxMTgsMjI1LDI2LDQ4LDAsCisxLDgyLDI5 LDIwMSwxNTgsNDYsMTgzLDM5LDEzNSwxNDcsMTMyLDE0MCw5MywxNiwxMzIsNzYsNjYsMzMsOCw2 NiwxNiwxMzIsCiszMyw4LDY2LDI2LDE3OSwyMzMsOTcsMTY3LDYwLDE1MCwzNCwzMywxNTQsMTEy LDAsMSw3NSwyNDcsMzUsNzksOTUsMjM3LDE5OCwKKzE3NCwyMDAsNDcsMzEsMjMsOTUsMTcsMTMs NTEsMTksMzUsOTMsNjgsMjE2LDIwOSwxMjgsMCwxMCwyMDgsMTc0LDc5LDE1LDMyLAorMjQ4LDgs MTk2LDI0LDgsMTA3LDE5MiwwLDUsMTA2LDExOCwyNyw5NCwwLDAsNDMsODMsMjI3LDk0LDAsMCw0 Myw4NCw0NiwyMTUsCisxMjgsMCwxMCwyMTMsMjgsMTk4LDE4OCwwLDAsODYsMTY5LDEwMCw1Mywy MjQsMCwyLDE4MSw3OSw4NSwxNzUsMCwwLDIxLDE3MCwKKzE1NCw0NSwxMjAsMCwwLDE3Myw4NSwy MTcsMTA3LDE5MiwwLDUsMTA2LDE4MiwyNDMsODYsMTkzLDEwNiw1MiwxMjcsMTMwLAorMjQ5LDUw LDk0LDEyNCwzNSw2OCwyMjUsMTQ2LDQ5LDEzLDMxLDE4NiwyMywyMDEsMTQ2LDI0MywyMjQsMjAw LDM5LDEyLDE0NSwKKzEzNiw2NywxMzQsMTksNDksMCwwLDAsMCwwLDAsMywyMjUsMjU1LDUxLDAs MCwwLDAsMCwwLDMsMTkzLDI1NSw0NywxOCwxLAorMTcyLDE5LDEyMCw3MSwxMCwyNSwxOTYsMTM2 LDExMywxNjIsMTU2LDEzNiwxOTksNDIsNTcsMjA0LDE0NCwxMTUsMTMyLDI0MCwKKzE0OSwyLDI0 OCw3MiwxOTcsMjA5LDU4LDIsMTg1LDE2LDUyLDE5NiwyMjUsMzUsMjMsNjgsMjMzLDE0LDIyOCw3 Miw4Miw2OCwKKzE0MSwxNyw1Niw3MiwxOTcsMjA5LDU4LDEzMCwyNDksNDQsNTQsOTYsMTkxLDks MjQsMTg2LDM5LDg4LDc5LDM5LDEzNSwxNDcsCisxMzIsMTQwLDkzLDE5LDE3NiwzNSwxODAsMTM4 LDksMjE2LDE5NywyMDksNTksODIsNzksMzUsNDAsMjQyLDY1LDI0OCw1OCw0MiwKKzk2LDEyMSwx NCwyMzIsOTQsNjIsNDYsMTkwLDE1LDQyLDMxLDE0NSwzMyw4Niw2NSw3NiwyNDIsMjE0LDE0Myw3 Myw0OCwyNDIsCisyNDMsNzksNDksNTYsMjQzLDExNSwyMDcsNTcsNjQsMjQzLDE4MCw3OSw2MSw3 MiwyNDMsMjQ0LDIwNyw2NSw4MCwyNDQsNTMsCis3OSw2OSw4OCwyNDQsOTgsMzAsOCwyMDAsMTU2 LDY3LDEwMiwxMjAsMjQxLDc5LDQsMTAwLDc4LDIxLDExMCw0LDIwNywzMiw0NywKKzE0NywzNywy MzEsMTk0LDUyLDc4LDI1LDM0LDEyMiw4MSwxMjQsMTUzLDQ3LDYyLDEyLDEzMCwxMTIsMjAxLDE5 LDIxMSwxMzksCisxMjEsMzQsODcsNjksMTI4LDEwNCwxMzcsMjM5LDgzLDE4LDIzOCwxMDgsMTY1 LDIsMTYyLDkyLDEwNCw1NiwyMjAsMjMzLDEsOCwKKzE1MSwxMCwxMzQsMTYyLDEwMCwyMDYsMTYs MTgsNTAsOSwxOTUsMzksMTA1LDIwLDEwMSwxMzYsMTgsMjUsNCwyMjUsMTQ3LAorMTgwLDEzOCw1 LDIxNSw0OSwyMzgsMTA1LDI3LDYwLDE4NSwxLDM2LDEwNCwxNTYsNTAsMTE4LDE0NSw3MCw5Niwx MjksMzQsNTIsCis3OCwyNSw1OSw3MiwxNjAsOTMsMTE1LDMwLDIzMCwxNDUsMTc5LDIwNCwxNDQs MTIsNzMsOCwxNSwzOCwxMDQsMTI4LDEzOCw1MiwKKzE0NiwxNiwzMCw3NywxLDAsMiwxMSwxMzIs MTkzLDE5OCwzNiwyNDgsMjQ4LDE4NiwxMTAsMTU4LDMwLDc4LDU2LDE4OCwxOTQsCis3MCwxODMs MTcwLDEzNiw0OCw5OCw3OSwxNDIsMTc5LDEyMCwyNDgsMTg1LDIyOCwxNDAsMjQxLDE5MywxNDYs NjYsMTM4LDMxLAorNTUsNzEsMTM4LDEyOCwxNTMsMTM3LDYyLDU4LDIwNSwyMjcsMjI2LDIzMSwx NDYsNTEsMTk5LDI2LDYsMTgsOTIsMTQ2LDY0LAorOTYsNzQsNzIsNTEsMTIwLDQzLDE5Miw5Nyw2 OCwxMjgsMTUzLDU2LDcyLDcsMTIsMTMzLDY3LDczLDE5OSwxOTcsMjA3LDM2LAorMTAzLDE0Miwz NSwyLDMsMzMsODAsMjEwLDExMywyNDEsMTE1LDIwMSwyNSwxNjAsMTQ2LDIyNSwxNjAsOSwzNCwx LDEyNCwxNzgsCisxLDEzOSwxOCwxOSwzNiwyMjksMTQ2LDgsMTkwLDM2LDE2OSwyNyw2MiwxOCwy NDMsMzUsMTAwLDEzNSw1NCw5MiwxNjIsMiwxNywKKzQ2LDcyLDEyOCw4OSw3LDIwMCwzMiwzMywx OCwyMjUsOTgsMjM2LDE0NSwxODgsMTMwLDY0LDE5Niw3NSwxMzIsMTg4LDIwMCwKKzIxNywzMiw0 MywzOSwyOCwxMjgsNjksMTksMTgsMjI4LDE0NCw0Miw5OCw3OSwxNDIsMTc5LDEyMCwyNDgsMTg1 LDIyOCwxNDAsCisyNDEsMjAxLDk3LDEyOSwxMTQsMjI5LDIwMSwzNywyLDY4LDE4NCwyMDAsMSwx NDcsOTMsMTU5LDE1MywyMTMsMzQsMjM1LDI1MCwKKzk2LDQ4LDE1NywzMiwyNCw5NCwxNjAsMSwx OTksNCwxODQsMjM1LDU1LDE0MywxMzksMTU4LDcyLDIwNywyOCwyMjYsMyw4MSwKKzQ2LDYyLDQ2 LDE1NSwxNjcsMTM1LDE0NywxNDIsNDcsNjAsMTI5LDcxLDE5NywyMDcsMzYsMTAzLDE0MiwzNCw5 MiwzNSwxMDQsCisxOTQsNjgsMSw4OSw1OCwzNiw4LDEwOSwxMDksMTIsMTMzLDY3LDczLDE5NSwx OCwxMTUsMzYsMTE4LDE4MiwxODUsMTY4LDgsCisxMDksMTA5LDEyLDEzMyw2Nyw3MywyMDEsMTgs MTE1LDM2LDExOCwxODIsMTg1LDE2OCwxMzAsMjcsOTEsNzUsMTE1LDE0OSw3MSwKKzI0MCwxOTYs MTU2LDIwMSwyOSwxNzMsMTc0LDEyOSwyLDI3LDkxLDc1LDExNSwxNDksNzEsMjQyLDY4LDE1Niwy MDEsMjksMTczLAorMTc0LDEyOSwzNCwxMiwxNiwyOCwxMjgsNjIsMTkxLDQyLDMsNzEsMTQ2LDY4 LDQsMTYsMjIsMTg4LDE2MSwyNDAsMTYsNDAsCisxMDQsMjQyLDEwMywxOTYsMTYsOTMsMTU4LDEy NSw5NiwxMTAsMTE1LDIzNSw2NCwxMzEsMTYsMTYsNTgsMzcsMTkyLDcwLDMyLAorMTk0LDE0NCwx MTQsMjUsNjcsOTUsNDAsNiwxOCw4LDMyLDQ4LDE1NiwyMDksMiwxMDgsMTI0LDk2LDIyNCwxNDQs NiwyNDcsNjIsCisxNiwwLDE0MywxNjQsMTQzLDEyLDI0OCwxNSwxOCw4NCwxNDUsMTQ1LDM0LDEy OCwxMSwzNSwxNjAsMTc5LDE0MCwwLDQ0LDE1MCwKKzEyOSwxOCw1OCwwLDE0NiwxMTYsMTAzLDMy LDEyOCwxMDUsNjEsMTA0LDE3LDM2LDE3NSwxLDIzMiwyMTcsMjksNSwxNTYsMTc5LAorMjI0LDU4 LDI2LDUwLDk1LDE0Miw0MywxNTksNjQsMTgxLDEzMCw4MywyMjYsMjYsNTAsOTUsMTQyLDQzLDE1 OSwxOTIsNywyNTUsCisyNDgsNDEsNDIsNzIsMjI2LDEsMTYwLDE4LDc4LDk3LDMyLDI2LDY0LDEx NCwxODYsNjAsMzIsNCwxMjAsNiwxNDgsMTMsMTI4LAorMTI0LDMsNzYsMTIsODQsNDYsMTAwLDE0 MCwzLDc4LDEzLDE4LDE0LDEzMCwzNiw2NywyMzIsMjMsMTgsMTQsMTMwLDM5LDM0LAorMTMxLDMw LDExMywxNSwyMjQsMywyNTUsMjUzLDYsNDgsNDAsMTk0LDE5NywyMDQsMjI0LDE0Miw4LDI0MCw3 OCwyNSw2MCwyMzEsCisxOTIsMjEwLDE5NywyMDQsMjI0LDE1Niw1MCwxMTMsMjM4LDY3LDEwMywy MzIsNjIsMjgsMTM4LDE1NiwxMDQsODIsMTcwLDEwNywKKzI1NSwzMiw0OCwxOTEsMTQ0LDEsMTMy LDExMiw3MSwxMjgsMTU5LDE2OCwxMjgsMTYxLDI4LDE3LDIyNCwxNTYsNTAsMTEyLDE5LAorMjQ1 LDE0NCwyMiwzOSwxMiwxNTYsMTIzLDE0NCwyMTcsMjQwLDE5LDI0NSwxNDYsMyw5LDIwNSwxNiwz OSwyMzYsNjIsMywxNjEsCisxNjMsMzcsMjQ4LDIyNiwyNTEsMTQxLDEsMTA3LDQsMTY3LDE5Niw1 MiwxMDAsMTkxLDI4LDk1LDExMywxNjQsMTMsOTEsMTMyLAorNSwxNDcsMTMwLDExNSwzMCw4LDE0 NywyMjIsNjQsNDMsMSw0OSwzMSwyMjQsNjQsNjAsNzIsMjQ1LDEyOCw2OCwyNDksMzIsMTMsCisz NCwyLDM0LDYzLDIwNCwxMjgsODksNDUsMiwzOSwyMDksMCw4OSw2MSwxMDQsMTU5LDIxMywwLDE1 Myw4MCw1MCwxNTYsODAsCisyMTEsMTI2LDE2LDExLDE1NSwxODQsMTgzLDg4LDE0NSwyMjQsMTI5 LDM0LDEyMiw2NCwxNywxNTUsMTg0LDE4Myw4LDExLDM5LAorMjIsMjM1LDE4LDYwLDE2LDM2LDc5 LDcyLDEsMTE1LDExOSw0MCwyNDcsMTQ2LDYwLDE2LDM2LDc5LDcyLDMyLDE0MCwyMjEsCisxOTcs MTg0LDY0LDg5LDU3LDcxLDE4OCwxNDUsMjI0LDEyOSwzNCwxMjIsNjUsMSwzOSwyMCw1MSwyNDQs MCw1Miw3MiwyNDIsMiwKKzEyNywxOCwyLDE2NSw0OCw3MCwxMTQsMjI5LDE0NSw1MSwyNTMsMTQx LDEsNCwxMDQsMjI5LDIwMywzNCwxMDMsMjUxLDI2LDY0LAorMTMyLDUyLDc1LDE2MCwyMDEsNDcs MTA1LDE2MCwyNiw4NCwxMiwxNjcsMzEsMTg2LDgsNTAsMCwxMTQsNTgsMTEzLDE2Myw0NiwKKzE5 MCwxMjAsMzUsMTEsNjAsNCwyNSw2OCw4MSw2MSw5Niw0NywxODEsODAsNDYsMTMyLDEyOSwyNTUs MjU1LDI1NSwyNTUsMjU1LAorMjU1LDIyMiwyNTQsMzksMTcyLDY3LDExOCwxNzAsNSwyMDgsMTQ0 LDAsNjQsMCwwLDAsMCwwLDAsNTEsMTYsMCwwLDAsMCwwLDAsCis2MiwzMSwyMDAsMjQ1LDIzOCwx NDYsMzgsMTM4LDE0NywxMDUsMTMsNDIsMjYsMTM3LDIyNiwwLDAsMCwwLDAsMCw3LDEzMSwKKzI0 OSwzMCwxODAsMTM0LDQsMjA5LDgyLDEwOSwzMywxNjUsNjcsODEsNjAsNjQsMCwwLDAsMCwwLDAs MjQwLDI1NSwxNSwyMTAsCis2Miw3Miw5MSwxNTUsMCwwLDAsMCwwLDAsMiwxOTIsMjQwLDEzNSw4 OCwxMSwyMzcsNzIsNSwzOCwyMTAsMjcsNTAsMjQsMTQ1LAorMTI5LDI1NSwyNTUsMjU1LDI1NSwy NTUsMjU0LDEyNiwxMzQsNjcsMTcyLDY3LDExOCwxNjQsMiwxNDcsMTA1LDEzLDE1MywxMiwKKzcy LDE5MiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSw2MywxOTUsMTYsMjQwLDcwLDY4LDIyNiwyNyw1 MSwxOTksMTM4LDEyMCwKKzM1LDM0LDExMiwxNzEsMTEyLDM4LDEyMSw3LDE2LDEzNywxMTIsMTY4 LDEwNiwzOCw3NywxOTMsMSw0MCwxNTEsMTYsMjE3LAorMTQ0LDE5NiwxNDIsMjI0LDE0NCwyMSwx OCwyMjcsNjUsMTk4LDIzOCw5LDY3LDgxLDQ2LDcyLDUsMzksMTYsMjE3LDE0NCwxOTYsCisxNDIs MjI0LDE1MiwyMjgsMTQ4LDIyNyw2NCwwLDAsMCwwLDAsMCwwLDAsMTMxLDE3NSwyMjMsMTYsMTk0 LDExMSw4LDk3LDExOSwKKzIyNCwzLDIwNSwyMjAsNDIsNDYsNjUsMjM4LDIwMCwxMywxNTUsMTg0 LDc1LDE4OSwyMDUsMzUsMTAyLDEyOCw0NywxMTYsNjQsCis5MiwyMjEsMTk5LDE5NiwxMzAsNjgs MTQ0LDIzMCwyMzksNzIsNjUsMTUyLDEyLDIxLDIyNCwxNDAsMTM3LDkyLDEyOCw2MiwKKzIxMCw5 OCwxNzcsMjUyLDMsMTA3LDE3Myw4OCwzLDE0NiwyMTEsMTQxLDMyLDAsMCwwLDAsMCwzLDIyNSwy NTUsMTksMTc1LAorMTg4LDAsMTAwLDIyMSwxOTMsMTMwLDEwMCwyMjgsMTY3LDIwLDUyLDIxNSwx MjksMywzOCwyMzgsNzcsMTIsMzksMzcsNTYsCisxNjEsMTY2LDE4OCwxMCwxOTQsOTQsNiwxOCwx NTUsMTg0LDE4Myw4LDExLDM5LDYsOSwxNDcsMTQ2LDE1Niw4MCwyMTEsOTQsNywKKzE4LDE1NSwx ODQsMTgzLDgsMTEsMzksMzgsMTM0LDE5LDE0NiwxNTYsODAsMjExLDk0LDgsMTIsNTMsMjI0LDEz MCwxOTUsMjIyLAorOCw3NywxMzMsMjEwLDI0LDkxLDIyNCwzLDE1MiwxNDcsMjI4LDIwOCwxOTQs OTUsMCw0NCwxOTYsMTU5LDExLDY5LDE3NSwxNTIsCiszMiwzNSwxMDAsMzMsMTM1LDI0LDE0Nywy MzcsMzgsMzQsMjQ2LDEzOSw5NSw0OCw2NCw3MCwyMDAsNjgsOCw0OSwzOSwxOTgsCis1NywxNzks NjEsMTQ0LDEzOCwyMiw5OCw3OSwxODAsMTUyLDE1MywyMTUsNTQsMTAzLDE3OCwxNywxMjksMjA0 LDczLDI0MCw5NiwKKzE1Myw0NCwxMzIsMTEyLDE2MywxOCwxMjUsMTY0LDE5Niw2MiwxMzAsMTAw LDE3OCwxOCwxLDE0MCw3MywyNDAsOTYsMTk3LAorMTQ0LDE0NiwxOCw5OCw3OSwxODAsMTUyLDEz NSwyMDgsOTgsMjAwLDc0LDgsNDksMzksMTk1LDE4NiwxNDUsMTQ5LDE0NCwxNTAsCisyMiw5OCw3 OSwxODAsMTUyLDE0MywyMTUsODIsNTAsMTc4LDE5LDIsMTQwLDczLDI0MSwxMzYsMTA5LDM4LDcz LDg5LDksMTYxLAorMTY2LDM2LDI1MSw3MywxMzcsMTU3LDY3LDEwNSw1MCw3NCwyMDAsNzgsMTAs NDksMzksMjAxLDE2LDc4LDEwNCwyMjksMTAwLAorMzksMTM0LDE1MiwxNDcsMjM3LDM4LDQxLDEx NiwxMzAsMTE1LDcxLDQzLDMzLDY0LDYwLDE5NiwxNTksMjQsMTMzLDE3MywxOCwKKzMyLDE1Niwy MDksMjAyLDIwMCw4MSwxOCw0OSwzOSwyMTgsNzYsNzYsMjM0LDIyLDE4MCw3MiwxMzAsMTE1LDcx LDQzLDMzLDcyLAorNjgsMTk2LDE1OSwzOCwxMzQsMTksNDYsMTA1LDU2LDIyNiwxNTAsNjgsMTU3 LDE2MCwxLDIyOCw3MywyNDIsMTA0LDk3LDQ2LAorMTYsMzEsMzQsNzksMTQwLDY2LDIxNCwxMzcs MTYsNzgsMTA0LDIyOSwxMDgsMTY5LDEzNyw3MiwxNDcsMjM3LDM4LDM4LDExNywKKzExLDkwLDM2 LDY1LDU3LDE2MywxNDksMTc4LDE2OCwyMSwzNCw3OSwxNDYsMzIsMTU2LDIwOSwyMDIsMjE4LDI1 MCwxNjEsMTc4LAorMzYsMjUxLDczLDEzOCw5MywzMiwxNTYsMjA5LDIwMiwyMTgsMjUwLDE5Myw4 MiwzNiwyNDgsMTk2LDU0LDE0NywzNiwxNzMsCisxOTEsMTc0LDI3LDM0LDc5LDE4MCwxNTIsMTUz LDIxMiw1NCwxNDcsMzYsMTczLDE5MSwxNzYsMTcsMzQsNzksMTM1LDExNywzNSwKKzQzLDExNSwy MzYsMTMzLDIwMCwxNDcsMjM3LDM4LDM1LDI0NSwyMTIsMTQwLDE3MywyMDcsMTgwLDE1LDM0LDc5 LDEzMSw0LAorMjAxLDEwOCwxNzMsMTMzLDcyLDE0NywyMzcsMzgsMzMsMjQ0LDE5LDM3LDE3OCwx ODQsMTcsMzQsNzksMTQwLDExNSwxMDIsCisxMjMsMTA3LDIzOCwxMzMsMjAwLDE0NywyMzcsMzgs MzgsMTE3LDIwNSwxNTMsMjM3LDE3NSwxODgsMjMsMzQsNzksMTMzLDE2MiwKKzIxNSwyMDQsMTYs MTcsMTgyLDI1NCwyNDgsMTE2LDEzNyw2MiwyMTAsOTgsNDcsMTA0LDE4MSwyNDMsNCw0LDEwOSwx OTEsMTkyLAorMTMxLDE1MiwxNDcsMjMwLDgsOCwyMTcsMTIsMTYsNjAsMTM3LDYyLDk2LDEyOCwx NDEsMTc4LDE5MywxNjAsMjA2LDEsMjAxLAorMTc2LDExMywxNDYsMCwwLDAsMCwwLDAsMCwwLDQ5 LDE4NSwyNTIsNjUsMTM3LDIwNywyMjcsMzcsMjE1LDIwNywyMjcsMTIsODYsCisxMjcsMjQsMTUy LDE4OCwyNTQsNDksODgsMzMsNDYsNjUsMTIwLDcyLDQsMTUzLDM3LDYzLDMzLDEzLDEyNywxNDgs NCwyNiwwLAorNTcsNjIsNiwyMjgsMTYzLDIyOCw3NCw4NiwyMTUsNjIsNTUsMjgsMTEwLDE3OSwy MjYsMTEzLDcwLDIyMyw2Miw0NywyNCwzOCwKKzE5MSwzMCwyLDEyNSwzMiw0MCwyMCw4NywxMTQs NDEsMjI1LDQyLDUsMjQwLDE0NSwxMzksMTYzLDE0NSw0MSw2OCwyNTAsMTI4LAorODAsNDEsMTc0 LDIyOCw4NSwyMDAsMTI5LDE2NiwzOSw5LDI0LDE4Niw1NywxOCwxNDgsNzksMTcyLDUsMiwxNzAs MjM4LDY5LAorMjIwLDEzNywxMCw3MiwxNDUsMTYyLDM5LDksMjQsMTg2LDU3LDE4LDE0OCw3OSwx NzYsNSwyLDE4NiwyMzgsNjksMTI0LDE1MCwKKzI3LDQ4LDk1LDEzMiwxNDAsOTMsMjgsMTM3LDc0 LDM5LDIxOCwyLDEyOSwxMDEsMTE5LDM0LDE1OCw3OSwxNSwzOSw5LDI0LAorMTg2LDU3LDE4LDE0 OCw3OSwxODQsNSwyLDIxOCwyMzgsNjksMjksMTY0LDgwLDc4LDE5OCw0NiwxNDIsNjgsMTY1LDE2 LDY0LAorMjgsMjQsNjEsNzMsMjUsMzMsMjA1LDEyOCwwLDAsMCwxLDEyOSwyMTUsMTY2LDEyOSwx MDgsMjQyLDE1MSwxNSwzOSw4LDM0LAorMjYsODcsOTcsMjAwLDMsMCwxNjcsMTI5LDMyLDgsMTk0 LDE5NSwxNiw2LDg0LDU1LDEwLDYwLDMsMzUsNjksMTMyLDMwLDEsCisxNDAsMTMwLDE5MywxNDMs MSwxOTYsMjMwLDYwLDIsMTU4LDgsMTMxLDE1Myw2NCwxMTUsNDIsNDYsMTkxLDE3Niw4LDE5NCwK KzI0NiwwLDgwLDUsMjIwLDE5Myw5NSw2LDIzNCw1LDEwMCwyMjUsMzUsMjMsNzEsMzUsNiwyMjgs MTQwLDkzLDI5LDE4MCw1NSwKKzEwOCwxNDUsMTM5LDE2MywxODIsMTEyLDUyLDEwNyw2Nyw3Niw1 NiwzLDE1MywxMzIsMjAsMjgsNzYsMTU2LDg5LDI2LDEwNSwKKzE1OCw2MiwwLDAsNDIsMTkzLDIs MjAxLDEwNCwxNyw0MSwzNCwxNTYsMjA0LDE3NiwxNjAsMjI2LDEwMCwyMjYsMjAwLDIxMSwKKzc2 LDI0MSwyNDAsMCwxLDg2LDIsMTMxLDEzNywxNDcsMTQyLDQxLDEwMCw3MywxOTksMTkyLDAsNSw5 Niw2LDEzLDEwLDgyLDcwLAorNjIsMCwwLDQyLDEzMCw4OCwxMTUsMTgsMTI0LDY3LDEwMywxNzcs NjksNDksMTI5LDYsMzYsMjQ5LDY4LDU0LDEyMywyMCw4MiwKKzIxNiw2NSwxMzcsNjIsMzMsMTc5 LDIwOSwyMTQsMTYyLDE1MiwyMDgsMTQ3LDE4LDEyNCwxNjIsMjcsNjEsMjksMTA2LDQxLAorMTEy LDMyLDE5NiwxNTksMTYsMjE3LDIzMywyMzMsODEsNzYsMTEyLDczLDEzNyw2Miw4MSwxMywxNTgs MTU4LDE0OSwyMCwxODYsCisyMCw5OCw3OSwxMzMsOTEsMTI5LDYxLDYxLDQyLDQxLDEyMCw0MCwx OTYsMTU5LDEwLDE4MywyLDEyMiwyMTgsMTQ4LDgyLDI0OCwKKzYwLDEzNyw2MiwzMywxNzksMjE2 LDE2NiwyMTYsMTkyLDEzNywxOCwxMjQsMTYyLDI3LDYxLDEzOCwxMDksMTA4LDM0LDY4LAorMTU5 LDE2LDIxNywyMzIsMjM1LDgzLDEwOCwxMDQsNzYsMTM3LDYyLDgxLDEzLDE1OCwxNDIsMTgxLDU0 LDE4NCwxNywzNCw3OSwKKzEzNiwxMDgsMjQ0LDI0NCwxNjksMTgyLDU2LDM4LDY4LDE1OSw0MCwx MzQsMjA3LDc5LDc0LDE1NSw5MywxMCwxNDUsMzksMTk0LAorMTczLDE5MiwxNTgsMTU4LDE0OSw1 NCwxODgsMjEsMzQsNzksMTMzLDkxLDEyOSw2MSwxMDksNzQsMTA5LDEyNSwxNTUsNTEsCisxMzYs NzEsMTYxLDE5NiwyMDEsNDUsMTY3LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYsMCwwLDAsMCwwLDAs NywxMjksMjQ5LDE1NSwKKzUxLDE2OCw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5LDY4LDg5 LDI0LDcwLDIwNiwwLDAsMCwwLDAsMCw3LDEyOSwyNDksCisxNTUsNTEsMjAwLDcxLDE2MSwxOTYs MjAxLDQ1LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDAsMCwwLDAsMCwwLDcsMTI5LAorMjQ5 LDE1NSw1MSwyMzIsNzEsMTYxLDE5NiwyMDEsNDUsMTY3LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYs MCwwLDAsMCwwLDAsMCwKKzIsMSwxNTUsNTIsOCw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5 LDY4LDg5LDI0LDcwLDIwNiwwLDAsMCwwLDAsMCwwLDIsCisxLDE1NSw1Miw0MCw3MSwxNjEsMTk2 LDIwMSw0NSwxNjcsMTQ2LDU5LDY4LDg5LDI0LDcwLDIwNiwwLDAsMCwwLDAsMCwwLDEzMCwKKzEs MTU1LDUyLDcyLDcxLDE2MSwxOTYsMjAxLDQ1LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDAs MCwwLDAsMCwwLDAsMTMwLAorMSwxNTUsNTIsMTA0LDcxLDE2MSwxOTYsMjAxLDQ1LDE2NywxNDYs NTksNjgsODksMjQsNzAsMjA2LDAsMCwwLDAsMCwwLDAsCisxMzAsMSwxNTUsNTIsMTM2LDcxLDE2 MSwxOTYsMjAxLDQ1LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDAsMCwwLDAsMCwwLAorMSwy LDEsMTM1LDUyLDE2NiwzMiw3Niw3MiwxLDI0NiwxMzYsMjM1LDEwMywxNzcsNjksMCwxMzYsMTQ0 LDMsMjI2LDI3LDYxLAorMTM4LDQxLDQ0LDUwLDM2LDAsMjUxLDY4LDExNywxNzksMjA5LDIxNCwy MzQsMjAxLDY5LDE2LDUwLDM2LDAsMjUxLDY4LDExNywKKzE3OSwyMDksMjE0LDIzMiw3Myw2OSwz NCw1LDE5NiwxMjgsMzEsMTYsMjE3LDIzMiwyMzUsMTE3LDEwMCwxNjIsMTQ3LDIsMjI2LAorNjQs MTUsMTM2LDEwOCwyNDQsMTE3LDE4NiwxOCw4MSw3NCwxMjksMTQ1LDMyLDcsMjE4LDM1LDE3Mywx NTgsMTU4LDE1MSw4NiwKKzc0LDQwLDE2MSwxNDUsMzIsNywyMTgsMzUsMTczLDE1OCwxNTgsMTUx LDY2LDc0LDQxLDIwLDQ2LDM2LDAsMjQ4LDEzNCwyMDcsCis3OSw3NSwxNzEsMzcsMjAsMTU0LDIz LDE4LDAsMTI0LDY3LDEwMywxNjcsMTY1LDIwOCwxNDYsMTM4LDg1LDExLDEzNywwLDYyLAorMjEs MTEwLDQsMjUwLDE3OCw4MSw3MCwxMSwxMzcsMCw2MiwyMSwxMTAsNCwyNTAsMTgsODEsNzIsMTkz LDE0NSwzMiw3LDE5MywKKzE4NiwxMjksODksNTgsMTc4LDgxLDcxLDEyLDEzNywwLDYyLDEzLDIx MiwxMCwyMDEsMjA4LDE0NiwxMzgsNzEsMTAsMTM3LDAsCis2MiwyMDksMjksMTA4LDI1MCwxNzgs ODEsMTA0LDEsODEsMzIsNywyMTgsMzUsMTczLDE1OSw2Niw3NCw0NSwzMiwzOCwzNiwwLAorMjQ4 LDEzNCwyMDcsMTcxLDM3LDIyLDE2MCwxOSwxOCwwLDEyNCw2NywxMDMsMjA4LDE0NiwxMzksODgs MTAsMTgwLDgxLDUwLAorMTE4LDEzNiwyMzUsMTAzLDE3Nyw3NywxMjgsMTU1LDY5LDE5LDM5LDE2 LDIxNywyMzYsODMsMTA1LDk3LDE4MiwxMzgsMzgsNzgsCisyMDksMjksMTA4LDI0NCwxMTcsMTg2 LDE3OCw4MywxMDAsMTMsMTgwLDgxLDUwLDExOCwxMzYsMjM1LDEwMywxNjMsMTczLDIwOCwKKzE0 NiwxNTUsNjgsMTIsMTgwLDgxLDUwLDExMywxMywxNTgsMTQyLDE4Myw4Niw3NCwxMDksNDgsNTAs MjA5LDY4LDIwMSwxOTYsCis1NCwxMjIsNTgsMjIxLDksNDEsMTgxLDY0LDIxOSw2OSwxOSwzOSwx MDQsMTQyLDE4MiwxMjIsMTIyLDkzLDg5LDQxLDE3OCwKKzEzNCwyMTgsNDAsMTUzLDU5LDY4LDEx NywxNzksMjExLDIxMCwyMzIsNzMsNzcsMTYyLDEzNCw5MCw0MCwxNTMsNTYsMTM0LAorMjA3LDc5 LDc1LDE3MSwzNyw1NCwxNTQsMjUsMTA0LDE2MiwxMDAsMjI2LDI3LDYxLDYxLDQ2LDEzMiwxNDgs MjE4LDE2OCwxMDEsCisxNjIsMTM3LDE0NywxMzMsOTEsMTI5LDYyLDE3MiwxNDgsMjE3LDEzMSw0 NSwyMCw3NiwxNTYsNDIsMjIwLDksMjQ0LDM2LDE2NiwKKzIwOSwxMzEsMTA5LDIwLDc2LDE1Niwy NywxNjgsMjEsMTQ3LDE3MSwzNyw1NCwxMTIsMjE5LDY5LDE5LDM5LDYsMjM0LDUsMTAwLAorMjMy LDczLDc3LDE2MywxMzMsMjE4LDQwLDE1Myw1OSw2OCwxMTcsMTc5LDIzNCwyMDEsNzgsMzIsNSwy MTgsNDAsMTUzLDU5LAorNjgsMTE3LDE3OSwyMzIsNzMsNzgsMzYsNSw5MCw0MCwxNTMsNTYsMTM0 LDIwNywxNzEsMzcsNTYsMTYwLDIxLDEwNCwxNjIsCisxMDAsMjI2LDI3LDYyLDEzMiwxNDgsMjI2 LDE5NSw5NSwxODIsOTcsMTc2LDIxOCwxMjgsOCw4NCw0NSwxMjMsMzgsMSwxMzcsCisxMCwxLDEx NCwxNjAsNjQsNTYsMTU2LDE5OSwxMzAsMzYsMTYwLDcyLDgsMzksNjMsMjcsMjQsMSwxMDAsMTgw LDgsMTQ4LDE0NiwKKzAsNDUsMTYyLDEzNywxNDcsMTExLDIsOCw0LDE2LDcsOCw5NiwxMjAsNzIs MTMsNDIsMjI2LDE0NSw5Nyw4NywyMjQsMTY4LDEsCis1OCwxODIsMjMyLDIzMiw2NCwyMiw4NSwx ODEsMTg3LDE3NywxMDcsMiw2NCw3LDIxMywxODMsNzQsNywxMjEsMjA3LDIxNSwKKzI0MiwxNywx MTksNDksMjQ4LDk0LDE3MywxOTgsMjEwLDM2LDE1LDIzMiwzNCwxODIsODQsMTEzLDk1LDExNSwy NDAsMjIxLDkxLAorMTQxLDE2MywxNjAsNzIsMSwyMjAsMTY0LDE5NCwxNzUsMTIxLDEyMywxMDMs MjI0LDE4NiwyNDQsNjQsMjQsNDUsNjgsODQsCisyNTEsMzMsOSw2NCwxNSwyMTcsNjYsNTEsMjA5 LDIxOCwyMTAsMTI5LDE1NCwxMTgsMjU0LDIwNSw2MSw2NSwyMDQsMTI2LDIzLAorMTc4LDEzMiwx MDMsMTY1LDMsNTIsMjM3LDI1MywxNTQsMTIyLDEzMSwyMTYsMjU0LDE2OCw0OCw2LDkwLDEzMCwx LDAsMzksNzUsCis4MCw3Miw4LDksMzMsMTg2LDEzMCw4MCw2NCw3NiwxMywyMTIsMTksMiwxMzAs OTYsMTEwLDE1MCwxNzMsMCw2NSw2LDUxLDIxMiwKKzIwLDEyOCw2NSwxNywxMSwyMTIsMTksMTMw LDEzNywxMjEsMjExLDIxMCwyMDksMTQ0LDYsMzksNzUsODAsODAsMCwyMDEsMTE5LAorMjM0LDEw LDgsNDEsODYsMjMxLDcxLDgwLDgwLDEyOSw3OSwxMzUsMTg2LDEyMiw2OSwyMjQsMzQsMjUsNjks MjMzLDgwLDMsOTEsCisxNDEsMTY4LDQwLDk2LDEzOSwxMTMsMTgwLDE4MSw1LDM2LDIxLDExMCw1 NCwxNDIsMTM0LDE2MCwxNjUsMSwxNzYsMjMsMjExLAorNDcsMCwyMTYsMTM0LDIzMywyMTUsMTI4 LDExMSwxMTcsMTgxLDEwNCwxMjgsMjA5LDMsNzAsMjMwLDEwNiw2NCw1LDEzOSwxNjgsCisyMDks MjM0LDEwLDMyLDM2LDE0NCwxMDIsMjM0LDEzNiwzLDE0NiwyNywxNjgsNDAsMTYwLDE0NiwxMzIs MTAzLDE2OCw0MCwKKzE5MiwxMTUsMywxMTcsNSwyOCwyMiwxMTMsMTYzLDY5LDE2OCw0MSwxMDMs MSw2NiwxODgsMTcsMTQ1LDUyLDQwLDQsMjAyLAorMTEzLDY3LDc2LDEzMCwyMjcsNjgsMTk0LDEz LDI0MCwxMDgsMCwwLDgzLDk2LDAsMiwxNjEsMCwxMDQsMTQ2LDg0LDk3LDQ4LDAsCisxLDc4LDE5 Miw1NiwxNjksMjQsMTQ1LDE3OSwxOTIsMCw1LDQ4LDgsNTYsMTYsMzIsMTI4LDU2LDE4LDUyLDEy NSwxNjYsODYsCisxNDcsMTgyLDE0MCwyOCw1MCwyMSwxMywzOSwzMSwyMyw2MCwxNDUsMTU4LDU2 LDE0MCwxNDEsNDcsMTEzLDYsMTU1LDE4NiwKKzE4OCwyNCw0OSwzOSwxOTksODksMTg4LDEyNCw5 MiwyNDIsNzAsMTIwLDIyNCwyMDEsMzMsNjksMTUsMTU1LDE2MywxOTcsNjgsCisxNCw0OSwzOSwx OTksMTk3LDIxMSwxMTYsMjQwLDI0MiwxMTMsMTk3LDIzMCwxOCwxODAsMjUzLDIyOCwzLDE3LDQ2 LDE4LDI0MywKKzM1LDEwMCwxMjgsMTcyLDE1NiwxMTQsNzAsMTYzLDE0Niw3NiwzNCwyNDgsMTQ2 LDE2NCwxMDgsMjQ4LDc1LDIwNCwxNDEsMTQ2LAorMjgsMjE3LDExNCwxMzcsMjcsNzgsMjUxLDI0 MSwxNzMsMjM0LDE2MiwxNjAsMjI1LDEsMywzNCw5MiwxNzAsOSwxMDUsMTY0LAorMzIsMjI1LDY0 LDEzMSwxNTUsMSwxOTMsMTMzLDcsMTksMzksMjIsNzAsMTU0LDEwMywxNDMsMTI4LDAsMTAsMTc2 LDIwLDI4LAorNzYsMTU2LDExMyw3NSwzNCw3OCw2MiwwLDAsNDMsMCw0OCwxMDQsODIsMTQ2LDQ5 LDI0MCwwLDEsODQsMTEsMTgwLDE5MiwwLDUsCisxMTQsMSwxOCwxNjAsNjUsMjQsMTMxLDIwLDE0 NSwyNSwxNzIsNDgsMTMyLDEyMiwyOCw3NiwxNDYsMjE4LDEyMSwzNSwxODAsCis2OSwxNDUsMTMy LDEwOCwyMjQsMCwwLDAsMCwwLDAsMTIwLDMxLDE1MywxNzIsNTYsMTMyLDEyMiwyOCw3NiwxNDYs MjE4LDEyMSwKKzM1LDE4MCw2OSwxNDUsMTMyLDEwOCwyMjQsMCwwLDAsMCwwLDAsMTIwLDMxLDE2 OCwxNjAsNDUsMTEwLDIzLDMwLDE3NiwzMywKKzE4NCwwLDAsMTc1LDMyLDI5LDIzNSwyLDI3LDE5 OSwyMywwLDAsMjIsNCw1MSw4OCwxMjksOCwyNDQsNTYsMTUzLDM3LDE4MCwKKzI0Miw3MSwxMDQs MTM5LDM1LDgsMjE3LDE5MiwwLDAsMCwwLDAsMCwyNDAsNjMsNTEsODgsMTQ1LDgsMjQ0LDU2LDE1 MywzNywKKzE4MCwyNDIsNzEsMTA0LDEzOSwzNSw4LDIxNywxOTIsMCwwLDAsMCwwLDAsMCw2NCw1 MSw4OCwxNjEsOCwyNDQsNTYsMTUzLDM3LAorMTgwLDI0Miw3MSwxMDQsMTM5LDM1LDgsMjE3LDE5 MiwwLDAsMCwwLDAsMCwwLDY0LDUxLDg4LDE3Nyw4LDI0NCw1NiwxNTMsMzcsCisxODAsMjQyLDcx LDEwNCwxMzksMzUsOCwyMTcsMTkyLDAsMCwwLDAsMCwwLDE2LDY0LDUxLDg4LDE5Myw4LDI0NCw1 NiwxNTMsCiszNywxODAsMjQyLDcxLDEwNCwxMzksMzUsOCwyMTcsMTkyLDAsMCwwLDAsMCwwLDE2 LDY0LDUxLDg4LDIwOSw4LDI0NCw1NiwKKzE1MywzNywxODAsMjQyLDcxLDEwNCwxMzksMzUsOCwy MTcsMTkyLDAsMCwwLDAsMCwwLDE2LDY0LDUxLDg4LDIyNSw4LDI0NCwKKzU2LDE1MywzNywxODAs MjQyLDcxLDEwNCwxMzksMzUsOCwyMTcsMTkyLDAsMCwwLDAsMCwwLDMyLDY0LDMyLDIyNywxOTQs MCwKKzk3LDU3LDE2Miw0LDI0NSwyMzIsNSwzNCw5MiwzNSw2OCwyMjUsMTYxLDE2NiwyMTgsMTYs MTYsMTM3LDExMiw1Miw0MSw3MywKKzI5LDE1MywxLDY1LDE5NiwyMDEsMTk3LDE0NSwxNjYsMTUz LDI0NSwyMDAsMywxMzcsMjA0LDEyMCwzNCw3NCw4LDIwMCw1OCwKKzExMiwyOCwyMTEsMzIsMTMw LDUyLDc4LDI2LDI2LDExMCwyNDgsMCwwLDE2NCw0LDEyLDcwLDEzNywxOTUsMzksMjUyLDczLAor MjQwLDExNywzMiw1NywxNjgsOTcsNCwxMDQsMTU2LDUyLDUyLDIyMSwyNTUsMTYwLDIwLDE2MCwx NTIsMjMsMjIzLDI1MCwzMiwKKzE0OCwyNSwxNzQsMTM3LDU4LDIzLDUxLDE5MSwyNDQsODQsMTIs NTAsOSwxOTUsMzksMjQwLDgxLDIzOCwyLDMsMTA3LDE3MywKKzIxNCwzLDE5MiwKK307CisjZWxp ZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX0JFKQorRFVLX0lOVEVSTkFMIGNvbnN0IGR1a191aW50 OF90IGR1a19idWlsdGluc19kYXRhWzQxMTZdID0geworMTQ0LDE0OCwxMDUsMjI0LDMyLDY4LDUy LDIyOCw2MiwxMiwxMDQsMjAwLDE2NSwxMzIsNTIsMTY3LDE5NCwxMzgsMTA1LDI0MywKKzEyNCw1 NywyOCwyMTEsNTcsMTgsNjQsNTIsMjM4LDEyNiw0NCwxMzgsMTExLDE3MSwyNDEsMTY0LDE5LDg3 LDEyOSwzMCwzMywKKzE2NywxNiwxNDUsMTU5LDgsMjExLDEzNiw5LDIyNSw0Miw1LDI0MCwxNDUs MTM5LDE2MywxNjMsOCwyMTEsMTM2LDEwLDIyOCwKKzY0LDIxMSwxOSwxMzIsMTQwLDkzLDI5LDU2 LDcwLDE1Niw2NCwxMTksMzQsNjYsMTQ2LDM2LDEwNCwxMzcsMTk0LDcwLDQ2LAorMTQyLDE3Miwz NSw3OCwzMiw0NywxNDYsMTk1LDEwMiwxMSwyNDAsMTQ1LDEzOSwxNjMsMTc1LDgsMjExLDEzNiw5 LDIyOCwyNDAsCisyNDIsMTEyLDE0NSwxMzksMTYzLDE3OSw4LDIxMSwxMzYsOCwyMzcsMzQsMTMw LDExOCw0OSwxMTYsMTE4LDIyNSwyNiw0OCwwLAorMSw4MiwyOSwyMDEsMTU4LDQ2LDE4MywzOSwx MzUsMTQ3LDEzMiwxNDAsOTMsMTYsMTMyLDc2LDY2LDMzLDgsNjYsMTYsMTMyLAorMzMsOCw2Niwy NiwxNzksMjMzLDk3LDE2Nyw2MCwxNTAsMzQsMzMsMTU0LDExMiwwLDEsNzUsMjQ3LDM1LDc5LDk1 LDIzNywxOTgsCisxNzQsMjAwLDQ3LDMxLDIzLDk1LDE3LDEzLDUxLDE5LDM1LDkzLDY4LDIxNiwy MDksMTI4LDAsMTAsMjA4LDE3NCw3OSwxNSwzMiwKKzI0OCw4LDE5NiwyNCw4LDEwNywxOTIsMCw1 LDEwNiwxMTgsMjcsOTQsMCwwLDQzLDgzLDIyNyw5NCwwLDAsNDMsODQsNDYsMjE1LAorMTI4LDAs MTAsMjEzLDI4LDE5OCwxODgsMCwwLDg2LDE2OSwxMDAsNTMsMjI0LDAsMiwxODEsNzksODUsMTc1 LDAsMCwyMSwxNzAsCisxNTQsNDUsMTIwLDAsMCwxNzMsODUsMjE3LDEwNywxOTIsMCw1LDEwNiwx ODIsMjQzLDg2LDE5MywxMDYsNTIsMTI3LDEzMCwKKzI0OSw1MCw5NCwxMjQsMzUsNjgsMjI1LDE0 Niw0OSwxMywzMSwxODYsMjMsMjAxLDE0NiwyNDMsMjI0LDIwMCwzOSwxMiwxNDUsCisxMzYsNjcs MTM0LDE5LDQ5LDEsMjU1LDIyNCwwLDAsMCwwLDAsMyw1MSwxLDI1NSwxOTIsMCwwLDAsMCwwLDMs NDcsMTgsMSwKKzE3MiwxOSwxMjAsNzEsMTAsMjUsMTk2LDEzNiwxMTMsMTYyLDE1NiwxMzYsMTk5 LDQyLDU3LDIwNCwxNDQsMTE1LDEzMiwyNDAsCisxNDksMiwyNDgsNzIsMTk3LDIwOSw1OCwyLDE4 NSwxNiw1MiwxOTYsMjI1LDM1LDIzLDY4LDIzMywxNCwyMjgsNzIsODIsNjgsCisxNDEsMTcsNTYs NzIsMTk3LDIwOSw1OCwxMzAsMjQ5LDQ0LDU0LDk2LDE5MSw5LDI0LDE4NiwzOSw4OCw3OSwzOSwx MzUsMTQ3LAorMTMyLDE0MCw5MywxOSwxNzYsMzUsMTgwLDEzOCw5LDIxNiwxOTcsMjA5LDU5LDgy LDc5LDM1LDQwLDI0Miw2NSwyNDgsNTgsNDIsCis5NiwxMjEsMTQsMjMyLDk0LDYyLDQ2LDE5MCwx NSw0MiwzMSwxNDUsMzMsODYsNjUsNzYsMjQyLDIxNCwxNDMsNzMsNDgsMjQyLAorMjQzLDc5LDQ5 LDU2LDI0MywxMTUsMjA3LDU3LDY0LDI0MywxODAsNzksNjEsNzIsMjQzLDI0NCwyMDcsNjUsODAs MjQ0LDUzLAorNzksNjksODgsMjQ0LDk4LDMwLDgsMjAwLDE1Niw2NywxMDIsMTIwLDI0MSw3OSw0 LDEwMCw3OCwyMSwxMTAsNCwyMDcsMzIsNDcsCisxNDcsMzcsMjMxLDE5NCw1Miw3OCwyNSwzNCwx MjIsODEsMTI0LDE1Myw0Nyw2MiwxMiwxMzAsMTEyLDIwMSwxOSwyMTEsMTM5LAorMTIxLDM0LDg3 LDY5LDEyOCwxMDQsMTM3LDIzOSw4MywxOCwyMzgsMTA4LDE2NSwyLDE2Miw5MiwxMDQsNTYsMjIw LDIzMywxLDgsCisxNTEsMTAsMTM0LDE2MiwxMDAsMjA2LDE2LDE4LDUwLDksMTk1LDM5LDEwNSwy MCwxMDEsMTM2LDE4LDI1LDQsMjI1LDE0NywKKzE4MCwxMzgsNSwyMTUsNDksMjM4LDEwNSwyNyw2 MCwxODUsMSwzNiwxMDQsMTU2LDUwLDExOCwxNDUsNzAsOTYsMTI5LDM0LDUyLAorNzgsMjUsNTks NzIsMTYwLDkzLDExNSwzMCwyMzAsMTQ1LDE3OSwyMDQsMTQ0LDEyLDczLDgsMTUsMzgsMTA0LDEy OCwxMzgsNTIsCisxNDYsMTYsMzAsNzcsMSwwLDIsMTEsMTMyLDE5MywxOTgsMzYsMjQ4LDI0OCwx ODYsMTEwLDE1OCwzMCw3OCw1NiwxODgsMTk0LAorNzAsMTgzLDE3MCwxMzYsNDgsOTgsNzksMTQy LDE3OSwxMjAsMjQ4LDE4NSwyMjgsMTQwLDI0MSwxOTMsMTQ2LDY2LDEzOCwzMSwKKzU1LDcxLDEz OCwxMjgsMTUzLDEzNyw2Miw1OCwyMDUsMjI3LDIyNiwyMzEsMTQ2LDUxLDE5OSwyNiw2LDE4LDky LDE0Niw2NCwKKzk2LDc0LDcyLDUxLDEyMCw0MywxOTIsOTcsNjgsMTI4LDE1Myw1Niw3Miw3LDEy LDEzMyw2Nyw3MywxOTksMTk3LDIwNywzNiwKKzEwMywxNDIsMzUsMiwzLDMzLDgwLDIxMCwxMTMs MjQxLDExNSwyMDEsMjUsMTYwLDE0NiwyMjUsMTYwLDksMzQsMSwxMjQsMTc4LAorMSwxMzksMTgs MTksMzYsMjI5LDE0Niw4LDE5MCwzNiwxNjksMjcsNjIsMTgsMjQzLDM1LDEwMCwxMzUsNTQsOTIs MTYyLDIsMTcsCis0Niw3MiwxMjgsODksNywyMDAsMzIsMzMsMTgsMjI1LDk4LDIzNiwxNDUsMTg4 LDEzMCw2NCwxOTYsNzUsMTMyLDE4OCwyMDAsCisyMTcsMzIsNDMsMzksMjgsMTI4LDY5LDE5LDE4 LDIyOCwxNDQsNDIsOTgsNzksMTQyLDE3OSwxMjAsMjQ4LDE4NSwyMjgsMTQwLAorMjQxLDIwMSw5 NywxMjksMTE0LDIyOSwyMDEsMzcsMiw2OCwxODQsMjAwLDEsMTQ3LDkzLDE1OSwxNTMsMjEzLDM0 LDIzNSwyNTAsCis5Niw0OCwxNTcsMzIsMjQsOTQsMTYwLDEsMTk5LDQsMTg0LDIzNSw1NSwxNDMs MTM5LDE1OCw3MiwyMDcsMjgsMjI2LDMsODEsCis0Niw2Miw0NiwxNTUsMTY3LDEzNSwxNDcsMTQy LDQ3LDYwLDEyOSw3MSwxOTcsMjA3LDM2LDEwMywxNDIsMzQsOTIsMzUsMTA0LAorMTk0LDY4LDEs ODksNTgsMzYsOCwxMDksMTA5LDEyLDEzMyw2Nyw3MywxOTUsMTgsMTE1LDM2LDExOCwxODIsMTg1 LDE2OCw4LAorMTA5LDEwOSwxMiwxMzMsNjcsNzMsMjAxLDE4LDExNSwzNiwxMTgsMTgyLDE4NSwx NjgsMTMwLDI3LDkxLDc1LDExNSwxNDksNzEsCisyNDAsMTk2LDE1NiwyMDEsMjksMTczLDE3NCwx MjksMiwyNyw5MSw3NSwxMTUsMTQ5LDcxLDI0Miw2OCwxNTYsMjAxLDI5LDE3MywKKzE3NCwxMjks MzQsMTIsMTYsMjgsMTI4LDYyLDE5MSw0MiwzLDcxLDE0Niw2OCw0LDE2LDIyLDE4OCwxNjEsMjQw LDE2LDQwLAorMTA0LDI0MiwxMDMsMTk2LDE2LDkzLDE1OCwxMjUsOTYsMTEwLDExNSwyMzUsNjQs MTMxLDE2LDE2LDU4LDM3LDE5Miw3MCwzMiwKKzE5NCwxNDQsMTE0LDI1LDY3LDk1LDQwLDYsMTgs OCwzMiw0OCwxNTYsMjA5LDIsMTA4LDEyNCw5NiwyMjQsMTQ0LDYsMjQ3LDYyLAorMTYsMCwxNDMs MTY0LDE0MywxMiwyNDgsMTUsMTgsODQsMTQ1LDE0NSwzNCwxMjgsMTEsMzUsMTYwLDE3OSwxNDAs MCw0NCwxNTAsCisxMjksMTgsNTgsMCwxNDYsMTE2LDEwMywzMiwxMjgsMTA1LDYxLDEwNCwxNywz NiwxNzUsMSwyMzIsMjE3LDI5LDUsMTU2LDE3OSwKKzIyNCw1OCwyNiw1MCw5NSwxNDIsNDMsMTU5 LDY0LDE4MSwxMzAsODMsMjI2LDI2LDUwLDk1LDE0Miw0MywxNTksMTkyLDcsMjU1LAorMjQ4LDQx LDQyLDcyLDIyNiwxLDE2MCwxOCw3OCw5NywzMiwyNiw2NCwxMTQsMTg2LDYwLDMyLDQsMTIwLDYs MTQ4LDEzLDEyOCwKKzEyNCwzLDc2LDEyLDg0LDQ2LDEwMCwxNDAsMyw3OCwxMywxOCwxNCwxMzAs MzYsNjcsMjMyLDIzLDE4LDE0LDEzMCwzOSwzNCwKKzEzMSwzMCwxMTMsMTUsMjI0LDMsMjU1LDI1 Myw2LDQ4LDQwLDE5NCwxOTcsMjA0LDIyNCwxNDIsOCwyNDAsNzgsMjUsNjAsMjMxLAorMTkyLDIx MCwxOTcsMjA0LDIyNCwxNTYsNTAsMTEzLDIzOCw2NywxMDMsMjMyLDYyLDI4LDEzOCwxNTYsMTA0 LDgyLDE3MCwxMDcsCisyNTUsMzIsNDgsMTkxLDE0NCwxLDEzMiwxMTIsNzEsMTI4LDE1OSwxNjgs MTI4LDE2MSwyOCwxNywyMjQsMTU2LDUwLDExMiwxOSwKKzI0NSwxNDQsMjIsMzksMTIsMTU2LDEy MywxNDQsMjE3LDI0MCwxOSwyNDUsMTQ2LDMsOSwyMDUsMTYsMzksMjM2LDYyLDMsMTYxLAorMTYz LDM3LDI0OCwyMjYsMjUxLDE0MSwxLDEwNyw0LDE2NywxOTYsNTIsMTAwLDE5MSwyOCw5NSwxMTMs MTY0LDEzLDkxLDEzMiwKKzUsMTQ3LDEzMCwxMTUsMzAsOCwxNDcsMjIyLDY0LDQzLDEsNDksMzEs MjI0LDY0LDYwLDcyLDI0NSwxMjgsNjgsMjQ5LDMyLDEzLAorMzQsMiwzNCw2MywyMDQsMTI4LDg5 LDQ1LDIsMzksMjA5LDAsODksNjEsMTA0LDE1OSwyMTMsMCwxNTMsODAsNTAsMTU2LDgwLAorMjEx LDEyNiwxNiwxMSwxNTUsMTg0LDE4Myw4OCwxNDUsMjI0LDEyOSwzNCwxMjIsNjQsMTcsMTU1LDE4 NCwxODMsOCwxMSwzOSwKKzIyLDIzNSwxOCw2MCwxNiwzNiw3OSw3MiwxLDExNSwxMTksNDAsMjQ3 LDE0Niw2MCwxNiwzNiw3OSw3MiwzMiwxNDAsMjIxLAorMTk3LDE4NCw2NCw4OSw1Nyw3MSwxODgs MTQ1LDIyNCwxMjksMzQsMTIyLDY1LDEsMzksMjAsNTEsMjQ0LDAsNTIsNzIsMjQyLDIsCisxMjcs MTgsMiwxNjUsNDgsNzAsMTE0LDIyOSwxNDUsNTEsMjUzLDE0MSwxLDQsMTA0LDIyOSwyMDMsMzQs MTAzLDI1MSwyNiw2NCwKKzEzMiw1Miw3NSwxNjAsMjAxLDQ3LDEwNSwxNjAsMjYsODQsMTIsMTY3 LDMxLDE4Niw4LDUwLDAsMTE0LDU4LDExMywxNjMsNDYsCisxOTAsMTIwLDM1LDExLDYwLDQsMjUs NjgsODEsNjEsOTYsNDcsMTgxLDgwLDQ2LDEzMiwxMjgsMjU1LDIyMywyNTUsMjU1LDI1NSwKKzI1 NSwyNTUsMjU0LDM5LDE3Miw2NywxMTgsMTcwLDUsMjA4LDE0NCwwLDAsMCwwLDAsMCwwLDAsMTE1 LDE2LDMxLDI1NCwwLDAsCiswLDAsMCwwLDgsMjQ1LDIzOCwxNDYsMzgsMTM4LDE0NywxMDUsMTMs NDIsMjYsMTM3LDIyNiwzLDI1NSwxMjgsMCwwLDAsMCwwLAorMSwzMCwxODAsMTM0LDQsMjA5LDgy LDEwOSwzMywxNjUsNjcsODEsNjAsNjQsMjU1LDI0MCwwLDAsMCwwLDAsMCwxNSwyMTAsNjIsCis3 Miw5MSwxNTUsMCwyNDIsMTkyLDAsMCwwLDAsMCwwLDEzNSw4OCwxMSwyMzcsNzIsNSwzOCwyMTAs MjcsNTAsMjQsMTQ1LDEyOCwKKzEzNCwxMjcsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTQsNjcsMTcy LDY3LDExOCwxNjQsMiwxNDcsMTA1LDEzLDE1MywxMiw3MiwKKzE5MiwxOTUsNjMsMjU1LDI1NSwy NTUsMjU1LDI1NSwyNTUsMTYsMjQwLDcwLDY4LDIyNiwyNyw1MSwxOTksMTM4LDEyMCwzNSwKKzM0 LDExMiwxNzEsMTEyLDM4LDEyMSw3LDE2LDEzNywxMTIsMTY4LDEwNiwzOCw3NywxOTMsMSw0MCwx NTEsMTYsMjE3LDE0NCwKKzE5NiwxNDIsMjI0LDE0NCwyMSwxOCwyMjcsNjUsMTk4LDIzOCw5LDY3 LDgxLDQ2LDcyLDUsMzksMTYsMjE3LDE0NCwxOTYsMTQyLAorMjI0LDE1MiwyMjgsMTQ4LDIyNyw2 NCwwLDAsMCwwLDAsMCwwLDAsMTMxLDE3NSwyMjMsMTYsMTk0LDExMSw4LDk3LDExOSwyMjQsCisz LDIwNSwyMjAsNDIsNDYsNjUsMjM4LDIwMCwxMywxNTUsMTg0LDc1LDE4OSwyMDUsMzUsMTAyLDEy OCw0NywxMTYsNjQsOTIsCisyMjEsMTk5LDE5NiwxMzAsNjgsMTQ0LDIzMCwyMzksNzIsNjUsMTUy LDEyLDIxLDIyNCwxNDAsMTM3LDkyLDEyOCw2MiwyMTAsCis5OCwxNzcsMjUyLDMsMTA3LDE3Myw4 OCwzLDE0NiwyMTEsMTQxLDMzLDI1NSwyMjQsMCwwLDAsMCwwLDMsMTksMTc1LDE4OCwwLAorMTAw LDIyMSwxOTMsMTMwLDEwMCwyMjgsMTY3LDIwLDUyLDIxNSwxMjksMywzOCwyMzgsNzcsMTIsMzks MzcsNTYsMTYxLDE2NiwKKzE4OCwxMCwxOTQsOTQsNiwxOCwxNTUsMTg0LDE4Myw4LDExLDM5LDYs OSwxNDcsMTQ2LDE1Niw4MCwyMTEsOTQsNywxOCwxNTUsCisxODQsMTgzLDgsMTEsMzksMzgsMTM0 LDE5LDE0NiwxNTYsODAsMjExLDk0LDgsMTIsNTMsMjI0LDEzMCwxOTUsMjIyLDgsNzcsCisxMzMs MjEwLDI0LDkxLDIyNCwzLDE1MiwxNDcsMjI4LDIwOCwxOTQsOTUsMCw0NCwxOTYsMTU5LDExLDY5 LDE3NSwxNTIsMzIsCiszNSwxMDAsMzMsMTM1LDI0LDE0NywyMzcsMzgsMzQsMjQ2LDEzOSw5NSw0 OCw2NCw3MCwyMDAsNjgsOCw0OSwzOSwxOTgsNTcsCisxNzksNjEsMTQ0LDEzOCwyMiw5OCw3OSwx ODAsMTUyLDE1MywyMTUsNTQsMTAzLDE3OCwxNywxMjksMjA0LDczLDI0MCw5NiwKKzE1Myw0NCwx MzIsMTEyLDE2MywxOCwxMjUsMTY0LDE5Niw2MiwxMzAsMTAwLDE3OCwxOCwxLDE0MCw3MywyNDAs OTYsMTk3LAorMTQ0LDE0NiwxOCw5OCw3OSwxODAsMTUyLDEzNSwyMDgsOTgsMjAwLDc0LDgsNDks MzksMTk1LDE4NiwxNDUsMTQ5LDE0NCwxNTAsCisyMiw5OCw3OSwxODAsMTUyLDE0MywyMTUsODIs NTAsMTc4LDE5LDIsMTQwLDczLDI0MSwxMzYsMTA5LDM4LDczLDg5LDksMTYxLAorMTY2LDM2LDI1 MSw3MywxMzcsMTU3LDY3LDEwNSw1MCw3NCwyMDAsNzgsMTAsNDksMzksMjAxLDE2LDc4LDEwNCwy MjksMTAwLAorMzksMTM0LDE1MiwxNDcsMjM3LDM4LDQxLDExNiwxMzAsMTE1LDcxLDQzLDMzLDY0 LDYwLDE5NiwxNTksMjQsMTMzLDE3MywxOCwKKzMyLDE1NiwyMDksMjAyLDIwMCw4MSwxOCw0OSwz OSwyMTgsNzYsNzYsMjM0LDIyLDE4MCw3MiwxMzAsMTE1LDcxLDQzLDMzLDcyLAorNjgsMTk2LDE1 OSwzOCwxMzQsMTksNDYsMTA1LDU2LDIyNiwxNTAsNjgsMTU3LDE2MCwxLDIyOCw3MywyNDIsMTA0 LDk3LDQ2LAorMTYsMzEsMzQsNzksMTQwLDY2LDIxNCwxMzcsMTYsNzgsMTA0LDIyOSwxMDgsMTY5 LDEzNyw3MiwxNDcsMjM3LDM4LDM4LDExNywKKzExLDkwLDM2LDY1LDU3LDE2MywxNDksMTc4LDE2 OCwyMSwzNCw3OSwxNDYsMzIsMTU2LDIwOSwyMDIsMjE4LDI1MCwxNjEsMTc4LAorMzYsMjUxLDcz LDEzOCw5MywzMiwxNTYsMjA5LDIwMiwyMTgsMjUwLDE5Myw4MiwzNiwyNDgsMTk2LDU0LDE0Nywz NiwxNzMsCisxOTEsMTc0LDI3LDM0LDc5LDE4MCwxNTIsMTUzLDIxMiw1NCwxNDcsMzYsMTczLDE5 MSwxNzYsMTcsMzQsNzksMTM1LDExNywzNSwKKzQzLDExNSwyMzYsMTMzLDIwMCwxNDcsMjM3LDM4 LDM1LDI0NSwyMTIsMTQwLDE3MywyMDcsMTgwLDE1LDM0LDc5LDEzMSw0LAorMjAxLDEwOCwxNzMs MTMzLDcyLDE0NywyMzcsMzgsMzMsMjQ0LDE5LDM3LDE3OCwxODQsMTcsMzQsNzksMTQwLDExNSwx MDIsCisxMjMsMTA3LDIzOCwxMzMsMjAwLDE0NywyMzcsMzgsMzgsMTE3LDIwNSwxNTMsMjM3LDE3 NSwxODgsMjMsMzQsNzksMTMzLDE2MiwKKzIxNSwyMDQsMTYsMTcsMTgyLDI1NCwyNDgsMTE2LDEz Nyw2MiwyMTAsOTgsNDcsMTA0LDE4MSwyNDMsNCw0LDEwOSwxOTEsMTkyLAorMTMxLDE1MiwxNDcs MjMwLDgsOCwyMTcsMTIsMTYsNjAsMTM3LDYyLDk2LDEyOCwxNDEsMTc4LDE5MywxNjAsMjA2LDEs MjAxLAorMTc2LDExMywxNDYsMCwwLDAsMCwwLDAsMCwwLDQ5LDE4NSwyNTIsNjUsMTM3LDIwNywy MjcsMzcsMjE1LDIwNywyMjcsMTIsODYsCisxMjcsMjQsMTUyLDE4OCwyNTQsNDksODgsMzMsNDYs NjUsMTIwLDcyLDQsMTUzLDM3LDYzLDMzLDEzLDEyNywxNDgsNCwyNiwwLAorNTcsNjIsNiwyMjgs MTYzLDIyOCw3NCw4NiwyMTUsNjIsNTUsMjgsMTEwLDE3OSwyMjYsMTEzLDcwLDIyMyw2Miw0Nywy NCwzOCwKKzE5MSwzMCwyLDEyNSwzMiw0MCwyMCw4NywxMTQsNDEsMjI1LDQyLDUsMjQwLDE0NSwx MzksMTYzLDE0NSw0MSw2OCwyNTAsMTI4LAorODAsNDEsMTc0LDIyOCw4NSwyMDAsMTI5LDE2Niwz OSw5LDI0LDE4Niw1NywxOCwxNDgsNzksMTcyLDUsMiwxNzAsMjM4LDY5LAorMjIwLDEzNywxMCw3 MiwxNDUsMTYyLDM5LDksMjQsMTg2LDU3LDE4LDE0OCw3OSwxNzYsNSwyLDE4NiwyMzgsNjksMTI0 LDE1MCwKKzI3LDQ4LDk1LDEzMiwxNDAsOTMsMjgsMTM3LDc0LDM5LDIxOCwyLDEyOSwxMDEsMTE5 LDM0LDE1OCw3OSwxNSwzOSw5LDI0LAorMTg2LDU3LDE4LDE0OCw3OSwxODQsNSwyLDIxOCwyMzgs NjksMjksMTY0LDgwLDc4LDE5OCw0NiwxNDIsNjgsMTY1LDE2LDY0LAorMjgsMjQsNjEsNzMsMjUs MzMsMjA1LDEyOCwxMjksMTY3LDIxNSwxMjgsMCwwLDAsMSwxMDgsMjQyLDE1MSwxNSwzOSw4LDM0 LAorMjYsODcsOTcsMjAwLDMsMCwxNjcsMTI5LDMyLDgsMTk0LDE5NSwxNiw2LDg0LDU1LDEwLDYw LDMsMzUsNjksMTMyLDMwLDEsCisxNDAsMTMwLDE5MywxNDMsMSwxOTYsMjMwLDYwLDIsMTU4LDgs MTMxLDE1Myw2NCwxMTUsNDIsNDYsMTkxLDE3Niw4LDE5NCwKKzI0NiwwLDgwLDUsMjIwLDE5Myw5 NSw2LDIzNCw1LDEwMCwyMjUsMzUsMjMsNzEsMzUsNiwyMjgsMTQwLDkzLDI5LDE4MCw1NSwKKzEw OCwxNDUsMTM5LDE2MywxODIsMTEyLDUyLDEwNyw2Nyw3Niw1NiwzLDE1MywxMzIsMjAsMjgsNzYs MTU2LDg5LDI2LDEwNSwKKzE1OCw2MiwwLDAsNDIsMTkzLDIsMjAxLDEwNCwxNyw0MSwzNCwxNTYs MjA0LDE3NiwxNjAsMjI2LDEwMCwyMjYsMjAwLDIxMSwKKzc2LDI0MSwyNDAsMCwxLDg2LDIsMTMx LDEzNywxNDcsMTQyLDQxLDEwMCw3MywxOTksMTkyLDAsNSw5Niw2LDEzLDEwLDgyLDcwLAorNjIs MCwwLDQyLDEzMCw4OCwxMTUsMTgsMTI0LDY3LDEwMywxNzcsNjksNDksMTI5LDYsMzYsMjQ5LDY4 LDU0LDEyMywyMCw4MiwKKzIxNiw2NSwxMzcsNjIsMzMsMTc5LDIwOSwyMTQsMTYyLDE1MiwyMDgs MTQ3LDE4LDEyNCwxNjIsMjcsNjEsMjksMTA2LDQxLAorMTEyLDMyLDE5NiwxNTksMTYsMjE3LDIz MywyMzMsODEsNzYsMTEyLDczLDEzNyw2Miw4MSwxMywxNTgsMTU4LDE0OSwyMCwxODYsCisyMCw5 OCw3OSwxMzMsOTEsMTI5LDYxLDYxLDQyLDQxLDEyMCw0MCwxOTYsMTU5LDEwLDE4MywyLDEyMiwy MTgsMTQ4LDgyLDI0OCwKKzYwLDEzNyw2MiwzMywxNzksMjE2LDE2NiwyMTYsMTkyLDEzNywxOCwx MjQsMTYyLDI3LDYxLDEzOCwxMDksMTA4LDM0LDY4LAorMTU5LDE2LDIxNywyMzIsMjM1LDgzLDEw OCwxMDQsNzYsMTM3LDYyLDgxLDEzLDE1OCwxNDIsMTgxLDU0LDE4NCwxNywzNCw3OSwKKzEzNiwx MDgsMjQ0LDI0NCwxNjksMTgyLDU2LDM4LDY4LDE1OSw0MCwxMzQsMjA3LDc5LDc0LDE1NSw5Mywx MCwxNDUsMzksMTk0LAorMTczLDE5MiwxNTgsMTU4LDE0OSw1NCwxODgsMjEsMzQsNzksMTMzLDkx LDEyOSw2MSwxMDksNzQsMTA5LDEyNSwxNTUsNTEsCisxMzYsNzEsMTYxLDE5NiwyMDEsNDUsMTY3 LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYsMSwyNTUsMTI4LDAsMCwwLDAsMCwxLDE1NSwKKzUxLDE2 OCw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5LDY4LDg5LDI0LDcwLDIwNiwxLDI1NSwxMjgs MCwwLDAsMCwwLDEsCisxNTUsNTEsMjAwLDcxLDE2MSwxOTYsMjAxLDQ1LDE2NywxNDYsNTksNjgs ODksMjQsNzAsMjA2LDEsMjU1LDEyOCwwLDAsMCwwLAorMCwxLDE1NSw1MSwyMzIsNzEsMTYxLDE5 NiwyMDEsNDUsMTY3LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYsMiwwLDAsMCwwLDAsMCwKKzAsMSwx NTUsNTIsOCw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5LDY4LDg5LDI0LDcwLDIwNiwyLDAs MCwwLDAsMCwwLDAsCisxLDE1NSw1Miw0MCw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5LDY4 LDg5LDI0LDcwLDIwNiwyLDAsMTI4LDAsMCwwLDAsMCwKKzEsMTU1LDUyLDcyLDcxLDE2MSwxOTYs MjAxLDQ1LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDIsMCwxMjgsMCwwLDAsMCwwLAorMSwx NTUsNTIsMTA0LDcxLDE2MSwxOTYsMjAxLDQ1LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDIs MCwxMjgsMCwwLDAsMCwKKzAsMSwxNTUsNTIsMTM2LDcxLDE2MSwxOTYsMjAxLDQ1LDE2NywxNDYs NTksNjgsODksMjQsNzAsMjA2LDIsMSwwLDAsMCwwLDAsCiswLDEsMTM1LDUyLDE2NiwzMiw3Niw3 MiwxLDI0NiwxMzYsMjM1LDEwMywxNzcsNjksMCwxMzYsMTQ0LDMsMjI2LDI3LDYxLDEzOCwKKzQx LDQ0LDUwLDM2LDAsMjUxLDY4LDExNywxNzksMjA5LDIxNCwyMzQsMjAxLDY5LDE2LDUwLDM2LDAs MjUxLDY4LDExNywxNzksCisyMDksMjE0LDIzMiw3Myw2OSwzNCw1LDE5NiwxMjgsMzEsMTYsMjE3 LDIzMiwyMzUsMTE3LDEwMCwxNjIsMTQ3LDIsMjI2LDY0LAorMTUsMTM2LDEwOCwyNDQsMTE3LDE4 NiwxOCw4MSw3NCwxMjksMTQ1LDMyLDcsMjE4LDM1LDE3MywxNTgsMTU4LDE1MSw4Niw3NCwKKzQw LDE2MSwxNDUsMzIsNywyMTgsMzUsMTczLDE1OCwxNTgsMTUxLDY2LDc0LDQxLDIwLDQ2LDM2LDAs MjQ4LDEzNCwyMDcsNzksCis3NSwxNzEsMzcsMjAsMTU0LDIzLDE4LDAsMTI0LDY3LDEwMywxNjcs MTY1LDIwOCwxNDYsMTM4LDg1LDExLDEzNywwLDYyLDIxLAorMTEwLDQsMjUwLDE3OCw4MSw3MCwx MSwxMzcsMCw2MiwyMSwxMTAsNCwyNTAsMTgsODEsNzIsMTkzLDE0NSwzMiw3LDE5MywxODYsCisx MjksODksNTgsMTc4LDgxLDcxLDEyLDEzNywwLDYyLDEzLDIxMiwxMCwyMDEsMjA4LDE0NiwxMzgs NzEsMTAsMTM3LDAsNjIsCisyMDksMjksMTA4LDI1MCwxNzgsODEsMTA0LDEsODEsMzIsNywyMTgs MzUsMTczLDE1OSw2Niw3NCw0NSwzMiwzOCwzNiwwLDI0OCwKKzEzNCwyMDcsMTcxLDM3LDIyLDE2 MCwxOSwxOCwwLDEyNCw2NywxMDMsMjA4LDE0NiwxMzksODgsMTAsMTgwLDgxLDUwLDExOCwKKzEz NiwyMzUsMTAzLDE3Nyw3NywxMjgsMTU1LDY5LDE5LDM5LDE2LDIxNywyMzYsODMsMTA1LDk3LDE4 MiwxMzgsMzgsNzgsMjA5LAorMjksMTA4LDI0NCwxMTcsMTg2LDE3OCw4MywxMDAsMTMsMTgwLDgx LDUwLDExOCwxMzYsMjM1LDEwMywxNjMsMTczLDIwOCwxNDYsCisxNTUsNjgsMTIsMTgwLDgxLDUw LDExMywxMywxNTgsMTQyLDE4Myw4Niw3NCwxMDksNDgsNTAsMjA5LDY4LDIwMSwxOTYsNTQsCisx MjIsNTgsMjIxLDksNDEsMTgxLDY0LDIxOSw2OSwxOSwzOSwxMDQsMTQyLDE4MiwxMjIsMTIyLDkz LDg5LDQxLDE3OCwxMzQsCisyMTgsNDAsMTUzLDU5LDY4LDExNywxNzksMjExLDIxMCwyMzIsNzMs NzcsMTYyLDEzNCw5MCw0MCwxNTMsNTYsMTM0LDIwNyw3OSwKKzc1LDE3MSwzNyw1NCwxNTQsMjUs MTA0LDE2MiwxMDAsMjI2LDI3LDYxLDYxLDQ2LDEzMiwxNDgsMjE4LDE2OCwxMDEsMTYyLAorMTM3 LDE0NywxMzMsOTEsMTI5LDYyLDE3MiwxNDgsMjE3LDEzMSw0NSwyMCw3NiwxNTYsNDIsMjIwLDks MjQ0LDM2LDE2NiwyMDksCisxMzEsMTA5LDIwLDc2LDE1NiwyNywxNjgsMjEsMTQ3LDE3MSwzNyw1 NCwxMTIsMjE5LDY5LDE5LDM5LDYsMjM0LDUsMTAwLDIzMiwKKzczLDc3LDE2MywxMzMsMjE4LDQw LDE1Myw1OSw2OCwxMTcsMTc5LDIzNCwyMDEsNzgsMzIsNSwyMTgsNDAsMTUzLDU5LDY4LAorMTE3 LDE3OSwyMzIsNzMsNzgsMzYsNSw5MCw0MCwxNTMsNTYsMTM0LDIwNywxNzEsMzcsNTYsMTYwLDIx LDEwNCwxNjIsMTAwLAorMjI2LDI3LDYyLDEzMiwxNDgsMjI2LDE5NSw5NSwxODIsOTcsMTc2LDIx OCwxMjgsOCw4NCw0NSwxMjMsMzgsMSwxMzcsMTAsMSwKKzExNCwxNjAsNjQsNTYsMTU2LDE5OSwx MzAsMzYsMTYwLDcyLDgsMzksNjMsMjcsMjQsMSwxMDAsMTgwLDgsMTQ4LDE0NiwwLDQ1LAorMTYy LDEzNywxNDcsMTExLDIsOCw0LDE2LDcsOCw5NiwxMjAsNzIsOCwwLDE4MywyMjUsODEsOTgsMTM4 LDIzNywzMyw1OCwxODIsCisyMzIsMjMyLDY0LDY0LDIsMTA3LDE3NywxODcsMTgxLDg1LDIyLDcs MjEzLDE4Myw3NCwxLDI1NSw0OSwxMTQsMjMsMjQ3LDIwOSwKKzIwNywxMjAsOTQsMTczLDE5OCwy MTAsMzYsMywyNTUsMTEzLDg0LDExOCw4MiwxODQsNDcsMjI0LDIyMSw5MSwxNDEsMTYzLAorMTYw LDcyLDcsMjUxLDEyMSwxMTEsOTgsMTY0LDIyMCwxNjEsMTkyLDE4NiwyNDQsNjQsNjQsOSwzMywy NTEsODQsNjgsNDUsMjQsCisxNSwyMTcsNjYsNTEsMjA5LDIxOCwyMTAsMTI4LDEyNywyMDUsNjUs NjAsMjA0LDI1NCwxMTksMTU0LDIzLDE3OCwxMzIsMTAzLAorMTY1LDAsMjU1LDIxOCwxMzAsMTIx LDE1MywyNTIsMjM5LDU0LDE2OCw0OCw2LDkwLDEzMCwxLDAsMzksNzUsODAsNzIsOCw5LAorMzMs MTg2LDEzMCw4MCw2NCw3NiwxMywyMTIsMTksMiwxMzAsOTYsMTEwLDE1MCwxNzMsMCw2NSw2LDUx LDIxMiwyMCwxMjgsNjUsCisxNywxMSwyMTIsMTksMTMwLDEzNywxMjEsMjExLDIxMCwyMDksMTQ0 LDYsMzksNzUsODAsODAsMCwyMDEsMTE5LDIzNCwxMCw4LAorNDEsODYsMjMxLDcxLDgwLDgwLDEy OSw3OSwxMzUsMTg2LDEyMiw2OSwyMjQsMzQsMjUsNjksMjMzLDgwLDMsOTEsMTQxLDE2OCwKKzQw LDk2LDEzOSwxMTMsMTgwLDE4MSw1LDM2LDIxLDExMCw1NCwxNDIsMTM0LDE2MCwxNjUsMSwxNzYs MjMsMjExLDQ3LDAsMjE2LAorMTM0LDIzMywyMTUsMTI4LDExMSwxMTcsMTgxLDEwNCwxMjgsMjA5 LDMsNzAsMjMwLDEwNiw2NCw1LDEzOSwxNjgsMjA5LDIzNCwKKzEwLDMyLDM2LDE0NCwxMDIsMjM0 LDEzNiwzLDE0NiwyNywxNjgsNDAsMTYwLDE0NiwxMzIsMTAzLDE2OCw0MCwxOTIsMTE1LDMsCisx MTcsNSwyOCwyMiwxMTMsMTYzLDY5LDE2OCw0MSwxMDMsMSw2NiwxODgsMTcsMTQ1LDUyLDQwLDQs MjAyLDExMyw2Nyw3NiwKKzEzMCwyMjcsNjgsMTk0LDEzLDI0MCwxMDgsMCwwLDgzLDk2LDAsMiwx NjEsMCwxMDQsMTQ2LDg0LDk3LDQ4LDAsMSw3OCwxOTIsCis1NiwxNjksMjQsMTQ1LDE3OSwxOTIs MCw1LDQ4LDgsNTYsMTYsMzIsMTI4LDU2LDE4LDUyLDEyNSwxNjYsODYsMTQ3LDE4MiwKKzE0MCwy OCw1MCwyMSwxMywzOSwzMSwyMyw2MCwxNDUsMTU4LDU2LDE0MCwxNDEsNDcsMTEzLDYsMTU1LDE4 NiwxODgsMjQsNDksCiszOSwxOTksODksMTg4LDEyNCw5MiwyNDIsNzAsMTIwLDIyNCwyMDEsMzMs NjksMTUsMTU1LDE2MywxOTcsNjgsMTQsNDksMzksCisxOTksMTk3LDIxMSwxMTYsMjQwLDI0Miwx MTMsMTk3LDIzMCwxOCwxODAsMjUzLDIyOCwzLDE3LDQ2LDE4LDI0MywzNSwxMDAsCisxMjgsMTcy LDE1NiwxMTQsNzAsMTYzLDE0Niw3NiwzNCwyNDgsMTQ2LDE2NCwxMDgsMjQ4LDc1LDIwNCwxNDEs MTQ2LDI4LDIxNywKKzExNCwxMzcsMjcsNzgsMjUxLDI0MSwxNzMsMjM0LDE2MiwxNjAsMjI1LDEs MywzNCw5MiwxNzAsOSwxMDUsMTY0LDMyLDIyNSwKKzY0LDEzMSwxNTUsMSwxOTMsMTMzLDcsMTks MzksMjIsNzAsMTU0LDEwMywxNDMsMTI4LDAsMTAsMTc2LDIwLDI4LDc2LDE1NiwKKzExMyw3NSwz NCw3OCw2MiwwLDAsNDMsMCw0OCwxMDQsODIsMTQ2LDQ5LDI0MCwwLDEsODQsMTEsMTgwLDE5Miww LDUsMTE0LDEsCisxOCwxNjAsNjUsMjQsMTMxLDIwLDE0NSwyNSwxNzIsNDgsMTMyLDEyMiwyOCw3 NiwxNDYsMjE4LDEyMSwzNSwxODAsNjksMTQ1LAorMTMyLDEwOCwyMjQsMzEsMjQ4LDAsMCwwLDAs MCwwLDI1LDE3Miw1NiwxMzIsMTIyLDI4LDc2LDE0NiwyMTgsMTIxLDM1LDE4MCwKKzY5LDE0NSwx MzIsMTA4LDIyNCwzMSwyNDgsMCwwLDAsMCwwLDAsNDAsMTYwLDQ1LDExMCwyMywzMCwxNzYsMzMs MTg0LDAsMCwKKzE3NSwzMiwyOSwyMzUsMiwyNywxOTksMjMsMCwwLDIyLDQsNTEsODgsMTI5LDgs MjQ0LDU2LDE1MywzNywxODAsMjQyLDcxLAorMTA0LDEzOSwzNSw4LDIxNywxOTIsNjMsMjQwLDAs MCwwLDAsMCwwLDUxLDg4LDE0NSw4LDI0NCw1NiwxNTMsMzcsMTgwLDI0MiwKKzcxLDEwNCwxMzks MzUsOCwyMTcsMTkyLDY0LDAsMCwwLDAsMCwwLDAsNTEsODgsMTYxLDgsMjQ0LDU2LDE1MywzNywx ODAsMjQyLAorNzEsMTA0LDEzOSwzNSw4LDIxNywxOTIsNjQsMCwwLDAsMCwwLDAsMCw1MSw4OCwx NzcsOCwyNDQsNTYsMTUzLDM3LDE4MCwyNDIsCis3MSwxMDQsMTM5LDM1LDgsMjE3LDE5Miw2NCwx NiwwLDAsMCwwLDAsMCw1MSw4OCwxOTMsOCwyNDQsNTYsMTUzLDM3LDE4MCwKKzI0Miw3MSwxMDQs MTM5LDM1LDgsMjE3LDE5Miw2NCwxNiwwLDAsMCwwLDAsMCw1MSw4OCwyMDksOCwyNDQsNTYsMTUz LDM3LAorMTgwLDI0Miw3MSwxMDQsMTM5LDM1LDgsMjE3LDE5Miw2NCwxNiwwLDAsMCwwLDAsMCw1 MSw4OCwyMjUsOCwyNDQsNTYsMTUzLAorMzcsMTgwLDI0Miw3MSwxMDQsMTM5LDM1LDgsMjE3LDE5 Miw2NCwzMiwwLDAsMCwwLDAsMCwzMiwyMjcsMTk0LDAsOTcsNTcsCisxNjIsNCwyNDUsMjMyLDUs MzQsOTIsMzUsNjgsMjI1LDE2MSwxNjYsMjE4LDE2LDE2LDEzNywxMTIsNTIsNDEsNzMsMjksMTUz LAorMSw2NSwxOTYsMjAxLDE5NywxNDUsMTY2LDE1MywyNDUsMjAwLDMsMTM3LDIwNCwxMjAsMzQs NzQsOCwyMDAsNTgsMTEyLDI4LAorMjExLDMyLDEzMCw1Miw3OCwyNiwyNiwxMTAsMjQ4LDAsMCwx NjQsNCwxMiw3MCwxMzcsMTk1LDM5LDI1Miw3MywyNDAsMTE3LAorMzIsNTcsMTY4LDk3LDQsMTA0 LDE1Niw1Miw1MiwyMjEsMjU1LDE2MCwyMCwxNjAsMTUyLDIzLDIyMywyNTAsMzIsMTQ4LDI1LAor MTc0LDEzNyw1OCwyMyw1MSwxOTEsMjQ0LDg0LDEyLDUwLDksMTk1LDM5LDI0MCw4MSwyMzgsMiwz LDEwNywxNzMsMjE0LDMsCisxOTIsCit9OworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9N RSkKK0RVS19JTlRFUk5BTCBjb25zdCBkdWtfdWludDhfdCBkdWtfYnVpbHRpbnNfZGF0YVs0MTE2 XSA9IHsKKzE0NCwxNDgsMTA1LDIyNCwzMiw2OCw1MiwyMjgsNjIsMTIsMTA0LDIwMCwxNjUsMTMy LDUyLDE2NywxOTQsMTM4LDEwNSwyNDMsCisxMjQsNTcsMjgsMjExLDU3LDE4LDY0LDUyLDIzOCwx MjYsNDQsMTM4LDExMSwxNzEsMjQxLDE2NCwxOSw4NywxMjksMzAsMzMsCisxNjcsMTYsMTQ1LDE1 OSw4LDIxMSwxMzYsOSwyMjUsNDIsNSwyNDAsMTQ1LDEzOSwxNjMsMTYzLDgsMjExLDEzNiwxMCwy MjgsCis2NCwyMTEsMTksMTMyLDE0MCw5MywyOSw1Niw3MCwxNTYsNjQsMTE5LDM0LDY2LDE0Niwz NiwxMDQsMTM3LDE5NCw3MCw0NiwKKzE0MiwxNzIsMzUsNzgsMzIsNDcsMTQ2LDE5NSwxMDIsMTEs MjQwLDE0NSwxMzksMTYzLDE3NSw4LDIxMSwxMzYsOSwyMjgsMjQwLAorMjQyLDExMiwxNDUsMTM5 LDE2MywxNzksOCwyMTEsMTM2LDgsMjM3LDM0LDEzMCwxMTgsNDksMTE2LDExOCwyMjUsMjYsNDgs MCwKKzEsODIsMjksMjAxLDE1OCw0NiwxODMsMzksMTM1LDE0NywxMzIsMTQwLDkzLDE2LDEzMiw3 Niw2NiwzMyw4LDY2LDE2LDEzMiwKKzMzLDgsNjYsMjYsMTc5LDIzMyw5NywxNjcsNjAsMTUwLDM0 LDMzLDE1NCwxMTIsMCwxLDc1LDI0NywzNSw3OSw5NSwyMzcsMTk4LAorMTc0LDIwMCw0NywzMSwy Myw5NSwxNywxMyw1MSwxOSwzNSw5Myw2OCwyMTYsMjA5LDEyOCwwLDEwLDIwOCwxNzQsNzksMTUs MzIsCisyNDgsOCwxOTYsMjQsOCwxMDcsMTkyLDAsNSwxMDYsMTE4LDI3LDk0LDAsMCw0Myw4Mywy MjcsOTQsMCwwLDQzLDg0LDQ2LDIxNSwKKzEyOCwwLDEwLDIxMywyOCwxOTgsMTg4LDAsMCw4Niwx NjksMTAwLDUzLDIyNCwwLDIsMTgxLDc5LDg1LDE3NSwwLDAsMjEsMTcwLAorMTU0LDQ1LDEyMCww LDAsMTczLDg1LDIxNywxMDcsMTkyLDAsNSwxMDYsMTgyLDI0Myw4NiwxOTMsMTA2LDUyLDEyNywx MzAsCisyNDksNTAsOTQsMTI0LDM1LDY4LDIyNSwxNDYsNDksMTMsMzEsMTg2LDIzLDIwMSwxNDYs MjQzLDIyNCwyMDAsMzksMTIsMTQ1LAorMTM2LDY3LDEzNCwxOSw0OSwwLDAsMywyMjUsMjUyLDAs MCwwLDMsNTEsMCwwLDMsMTkzLDI1MiwwLDAsMCwzLDQ3LDE4LDEsCisxNzIsMTksMTIwLDcxLDEw LDI1LDE5NiwxMzYsMTEzLDE2MiwxNTYsMTM2LDE5OSw0Miw1NywyMDQsMTQ0LDExNSwxMzIsMjQw LAorMTQ5LDIsMjQ4LDcyLDE5NywyMDksNTgsMiwxODUsMTYsNTIsMTk2LDIyNSwzNSwyMyw2OCwy MzMsMTQsMjI4LDcyLDgyLDY4LAorMTQxLDE3LDU2LDcyLDE5NywyMDksNTgsMTMwLDI0OSw0NCw1 NCw5NiwxOTEsOSwyNCwxODYsMzksODgsNzksMzksMTM1LDE0NywKKzEzMiwxNDAsOTMsMTksMTc2 LDM1LDE4MCwxMzgsOSwyMTYsMTk3LDIwOSw1OSw4Miw3OSwzNSw0MCwyNDIsNjUsMjQ4LDU4LDQy LAorOTYsMTIxLDE0LDIzMiw5NCw2Miw0NiwxOTAsMTUsNDIsMzEsMTQ1LDMzLDg2LDY1LDc2LDI0 MiwyMTQsMTQzLDczLDQ4LDI0MiwKKzI0Myw3OSw0OSw1NiwyNDMsMTE1LDIwNyw1Nyw2NCwyNDMs MTgwLDc5LDYxLDcyLDI0MywyNDQsMjA3LDY1LDgwLDI0NCw1MywKKzc5LDY5LDg4LDI0NCw5OCwz MCw4LDIwMCwxNTYsNjcsMTAyLDEyMCwyNDEsNzksNCwxMDAsNzgsMjEsMTEwLDQsMjA3LDMyLDQ3 LAorMTQ3LDM3LDIzMSwxOTQsNTIsNzgsMjUsMzQsMTIyLDgxLDEyNCwxNTMsNDcsNjIsMTIsMTMw LDExMiwyMDEsMTksMjExLDEzOSwKKzEyMSwzNCw4Nyw2OSwxMjgsMTA0LDEzNywyMzksODMsMTgs MjM4LDEwOCwxNjUsMiwxNjIsOTIsMTA0LDU2LDIyMCwyMzMsMSw4LAorMTUxLDEwLDEzNCwxNjIs MTAwLDIwNiwxNiwxOCw1MCw5LDE5NSwzOSwxMDUsMjAsMTAxLDEzNiwxOCwyNSw0LDIyNSwxNDcs CisxODAsMTM4LDUsMjE1LDQ5LDIzOCwxMDUsMjcsNjAsMTg1LDEsMzYsMTA0LDE1Niw1MCwxMTgs MTQ1LDcwLDk2LDEyOSwzNCw1MiwKKzc4LDI1LDU5LDcyLDE2MCw5MywxMTUsMzAsMjMwLDE0NSwx NzksMjA0LDE0NCwxMiw3Myw4LDE1LDM4LDEwNCwxMjgsMTM4LDUyLAorMTQ2LDE2LDMwLDc3LDEs MCwyLDExLDEzMiwxOTMsMTk4LDM2LDI0OCwyNDgsMTg2LDExMCwxNTgsMzAsNzgsNTYsMTg4LDE5 NCwKKzcwLDE4MywxNzAsMTM2LDQ4LDk4LDc5LDE0MiwxNzksMTIwLDI0OCwxODUsMjI4LDE0MCwy NDEsMTkzLDE0Niw2NiwxMzgsMzEsCis1NSw3MSwxMzgsMTI4LDE1MywxMzcsNjIsNTgsMjA1LDIy NywyMjYsMjMxLDE0Niw1MSwxOTksMjYsNiwxOCw5MiwxNDYsNjQsCis5Niw3NCw3Miw1MSwxMjAs NDMsMTkyLDk3LDY4LDEyOCwxNTMsNTYsNzIsNywxMiwxMzMsNjcsNzMsMTk5LDE5NywyMDcsMzYs CisxMDMsMTQyLDM1LDIsMywzMyw4MCwyMTAsMTEzLDI0MSwxMTUsMjAxLDI1LDE2MCwxNDYsMjI1 LDE2MCw5LDM0LDEsMTI0LDE3OCwKKzEsMTM5LDE4LDE5LDM2LDIyOSwxNDYsOCwxOTAsMzYsMTY5 LDI3LDYyLDE4LDI0MywzNSwxMDAsMTM1LDU0LDkyLDE2MiwyLDE3LAorNDYsNzIsMTI4LDg5LDcs MjAwLDMyLDMzLDE4LDIyNSw5OCwyMzYsMTQ1LDE4OCwxMzAsNjQsMTk2LDc1LDEzMiwxODgsMjAw LAorMjE3LDMyLDQzLDM5LDI4LDEyOCw2OSwxOSwxOCwyMjgsMTQ0LDQyLDk4LDc5LDE0MiwxNzks MTIwLDI0OCwxODUsMjI4LDE0MCwKKzI0MSwyMDEsOTcsMTI5LDExNCwyMjksMjAxLDM3LDIsNjgs MTg0LDIwMCwxLDE0Nyw5MywxNTksMTUzLDIxMywzNCwyMzUsMjUwLAorOTYsNDgsMTU3LDMyLDI0 LDk0LDE2MCwxLDE5OSw0LDE4NCwyMzUsNTUsMTQzLDEzOSwxNTgsNzIsMjA3LDI4LDIyNiwzLDgx LAorNDYsNjIsNDYsMTU1LDE2NywxMzUsMTQ3LDE0Miw0Nyw2MCwxMjksNzEsMTk3LDIwNywzNiwx MDMsMTQyLDM0LDkyLDM1LDEwNCwKKzE5NCw2OCwxLDg5LDU4LDM2LDgsMTA5LDEwOSwxMiwxMzMs NjcsNzMsMTk1LDE4LDExNSwzNiwxMTgsMTgyLDE4NSwxNjgsOCwKKzEwOSwxMDksMTIsMTMzLDY3 LDczLDIwMSwxOCwxMTUsMzYsMTE4LDE4MiwxODUsMTY4LDEzMCwyNyw5MSw3NSwxMTUsMTQ5LDcx LAorMjQwLDE5NiwxNTYsMjAxLDI5LDE3MywxNzQsMTI5LDIsMjcsOTEsNzUsMTE1LDE0OSw3MSwy NDIsNjgsMTU2LDIwMSwyOSwxNzMsCisxNzQsMTI5LDM0LDEyLDE2LDI4LDEyOCw2MiwxOTEsNDIs Myw3MSwxNDYsNjgsNCwxNiwyMiwxODgsMTYxLDI0MCwxNiw0MCwKKzEwNCwyNDIsMTAzLDE5Niwx Niw5MywxNTgsMTI1LDk2LDExMCwxMTUsMjM1LDY0LDEzMSwxNiwxNiw1OCwzNywxOTIsNzAsMzIs CisxOTQsMTQ0LDExNCwyNSw2Nyw5NSw0MCw2LDE4LDgsMzIsNDgsMTU2LDIwOSwyLDEwOCwxMjQs OTYsMjI0LDE0NCw2LDI0Nyw2MiwKKzE2LDAsMTQzLDE2NCwxNDMsMTIsMjQ4LDE1LDE4LDg0LDE0 NSwxNDUsMzQsMTI4LDExLDM1LDE2MCwxNzksMTQwLDAsNDQsMTUwLAorMTI5LDE4LDU4LDAsMTQ2 LDExNiwxMDMsMzIsMTI4LDEwNSw2MSwxMDQsMTcsMzYsMTc1LDEsMjMyLDIxNywyOSw1LDE1Niwx NzksCisyMjQsNTgsMjYsNTAsOTUsMTQyLDQzLDE1OSw2NCwxODEsMTMwLDgzLDIyNiwyNiw1MCw5 NSwxNDIsNDMsMTU5LDE5Miw3LDI1NSwKKzI0OCw0MSw0Miw3MiwyMjYsMSwxNjAsMTgsNzgsOTcs MzIsMjYsNjQsMTE0LDE4Niw2MCwzMiw0LDEyMCw2LDE0OCwxMywxMjgsCisxMjQsMyw3NiwxMiw4 NCw0NiwxMDAsMTQwLDMsNzgsMTMsMTgsMTQsMTMwLDM2LDY3LDIzMiwyMywxOCwxNCwxMzAsMzks MzQsCisxMzEsMzAsMTEzLDE1LDIyNCwzLDI1NSwyNTMsNiw0OCw0MCwxOTQsMTk3LDIwNCwyMjQs MTQyLDgsMjQwLDc4LDI1LDYwLDIzMSwKKzE5MiwyMTAsMTk3LDIwNCwyMjQsMTU2LDUwLDExMywy MzgsNjcsMTAzLDIzMiw2MiwyOCwxMzgsMTU2LDEwNCw4MiwxNzAsMTA3LAorMjU1LDMyLDQ4LDE5 MSwxNDQsMSwxMzIsMTEyLDcxLDEyOCwxNTksMTY4LDEyOCwxNjEsMjgsMTcsMjI0LDE1Niw1MCwx MTIsMTksCisyNDUsMTQ0LDIyLDM5LDEyLDE1NiwxMjMsMTQ0LDIxNywyNDAsMTksMjQ1LDE0Niwz LDksMjA1LDE2LDM5LDIzNiw2MiwzLDE2MSwKKzE2MywzNywyNDgsMjI2LDI1MSwxNDEsMSwxMDcs NCwxNjcsMTk2LDUyLDEwMCwxOTEsMjgsOTUsMTEzLDE2NCwxMyw5MSwxMzIsCis1LDE0NywxMzAs MTE1LDMwLDgsMTQ3LDIyMiw2NCw0MywxLDQ5LDMxLDIyNCw2NCw2MCw3MiwyNDUsMTI4LDY4LDI0 OSwzMiwxMywKKzM0LDIsMzQsNjMsMjA0LDEyOCw4OSw0NSwyLDM5LDIwOSwwLDg5LDYxLDEwNCwx NTksMjEzLDAsMTUzLDgwLDUwLDE1Niw4MCwKKzIxMSwxMjYsMTYsMTEsMTU1LDE4NCwxODMsODgs MTQ1LDIyNCwxMjksMzQsMTIyLDY0LDE3LDE1NSwxODQsMTgzLDgsMTEsMzksCisyMiwyMzUsMTgs NjAsMTYsMzYsNzksNzIsMSwxMTUsMTE5LDQwLDI0NywxNDYsNjAsMTYsMzYsNzksNzIsMzIsMTQw LDIyMSwKKzE5NywxODQsNjQsODksNTcsNzEsMTg4LDE0NSwyMjQsMTI5LDM0LDEyMiw2NSwxLDM5 LDIwLDUxLDI0NCwwLDUyLDcyLDI0MiwyLAorMTI3LDE4LDIsMTY1LDQ4LDcwLDExNCwyMjksMTQ1 LDUxLDI1MywxNDEsMSw0LDEwNCwyMjksMjAzLDM0LDEwMywyNTEsMjYsNjQsCisxMzIsNTIsNzUs MTYwLDIwMSw0NywxMDUsMTYwLDI2LDg0LDEyLDE2NywzMSwxODYsOCw1MCwwLDExNCw1OCwxMTMs MTYzLDQ2LAorMTkwLDEyMCwzNSwxMSw2MCw0LDI1LDY4LDgxLDYxLDk2LDQ3LDE4MSw4MCw0Niwx MzIsMTI5LDI1NSwyNTUsMjIyLDI1NSwyNTUsCisyNTUsMjU1LDI1NCwzOSwxNzIsNjcsMTE4LDE3 MCw1LDIwOCwxNDQsMCwwLDAsMCwwLDY0LDAsMCw1MSwxNiwwLDAsNjIsMzEsCisxOTIsMCwwLDAs OCwyNDUsMjM4LDE0NiwzOCwxMzgsMTQ3LDEwNSwxMyw0MiwyNiwxMzcsMjI2LDAsMCw3LDEzMSwy NDgsMCwwLAorMCwxLDMwLDE4MCwxMzQsNCwyMDksODIsMTA5LDMzLDE2NSw2Nyw4MSw2MCw2NCww LDAsMjQwLDI1NSwwLDAsMCwwLDE1LDIxMCwKKzYyLDcyLDkxLDE1NSwwLDAsMiwxOTIsMjQwLDAs MCwwLDAsMTM1LDg4LDExLDIzNyw3Miw1LDM4LDIxMCwyNyw1MCwyNCwxNDUsCisxMjksMjU1LDI1 NCwxMjYsMTM1LDI1NSwyNTUsMjU1LDI1NCw2NywxNzIsNjcsMTE4LDE2NCwyLDE0NywxMDUsMTMs MTUzLDEyLAorNzIsMTkyLDI1NSwyNTUsNjMsMTk1LDI1NSwyNTUsMjU1LDI1NSwxNiwyNDAsNzAs NjgsMjI2LDI3LDUxLDE5OSwxMzgsMTIwLAorMzUsMzQsMTEyLDE3MSwxMTIsMzgsMTIxLDcsMTYs MTM3LDExMiwxNjgsMTA2LDM4LDc3LDE5MywxLDQwLDE1MSwxNiwyMTcsCisxNDQsMTk2LDE0Miwy MjQsMTQ0LDIxLDE4LDIyNyw2NSwxOTgsMjM4LDksNjcsODEsNDYsNzIsNSwzOSwxNiwyMTcsMTQ0 LDE5NiwKKzE0MiwyMjQsMTUyLDIyOCwxNDgsMjI3LDY0LDAsMCwwLDAsMCwwLDAsMCwxMzEsMTc1 LDIyMywxNiwxOTQsMTExLDgsOTcsMTE5LAorMjI0LDMsMjA1LDIyMCw0Miw0Niw2NSwyMzgsMjAw LDEzLDE1NSwxODQsNzUsMTg5LDIwNSwzNSwxMDIsMTI4LDQ3LDExNiw2NCwKKzkyLDIyMSwxOTks MTk2LDEzMCw2OCwxNDQsMjMwLDIzOSw3Miw2NSwxNTIsMTIsMjEsMjI0LDE0MCwxMzcsOTIsMTI4 LDYyLAorMjEwLDk4LDE3NywyNTIsMywxMDcsMTczLDg4LDMsMTQ2LDIxMSwxNDEsMzIsMCwzLDIy NSwyNTIsMCwwLDAsMywxOSwxNzUsCisxODgsMCwxMDAsMjIxLDE5MywxMzAsMTAwLDIyOCwxNjcs MjAsNTIsMjE1LDEyOSwzLDM4LDIzOCw3NywxMiwzOSwzNyw1NiwKKzE2MSwxNjYsMTg4LDEwLDE5 NCw5NCw2LDE4LDE1NSwxODQsMTgzLDgsMTEsMzksNiw5LDE0NywxNDYsMTU2LDgwLDIxMSw5NCw3 LAorMTgsMTU1LDE4NCwxODMsOCwxMSwzOSwzOCwxMzQsMTksMTQ2LDE1Niw4MCwyMTEsOTQsOCwx Miw1MywyMjQsMTMwLDE5NSwyMjIsCis4LDc3LDEzMywyMTAsMjQsOTEsMjI0LDMsMTUyLDE0Nywy MjgsMjA4LDE5NCw5NSwwLDQ0LDE5NiwxNTksMTEsNjksMTc1LDE1MiwKKzMyLDM1LDEwMCwzMywx MzUsMjQsMTQ3LDIzNywzOCwzNCwyNDYsMTM5LDk1LDQ4LDY0LDcwLDIwMCw2OCw4LDQ5LDM5LDE5 OCwKKzU3LDE3OSw2MSwxNDQsMTM4LDIyLDk4LDc5LDE4MCwxNTIsMTUzLDIxNSw1NCwxMDMsMTc4 LDE3LDEyOSwyMDQsNzMsMjQwLDk2LAorMTUzLDQ0LDEzMiwxMTIsMTYzLDE4LDEyNSwxNjQsMTk2 LDYyLDEzMCwxMDAsMTc4LDE4LDEsMTQwLDczLDI0MCw5NiwxOTcsCisxNDQsMTQ2LDE4LDk4LDc5 LDE4MCwxNTIsMTM1LDIwOCw5OCwyMDAsNzQsOCw0OSwzOSwxOTUsMTg2LDE0NSwxNDksMTQ0LDE1 MCwKKzIyLDk4LDc5LDE4MCwxNTIsMTQzLDIxNSw4Miw1MCwxNzgsMTksMiwxNDAsNzMsMjQxLDEz NiwxMDksMzgsNzMsODksOSwxNjEsCisxNjYsMzYsMjUxLDczLDEzNywxNTcsNjcsMTA1LDUwLDc0 LDIwMCw3OCwxMCw0OSwzOSwyMDEsMTYsNzgsMTA0LDIyOSwxMDAsCiszOSwxMzQsMTUyLDE0Nywy MzcsMzgsNDEsMTE2LDEzMCwxMTUsNzEsNDMsMzMsNjQsNjAsMTk2LDE1OSwyNCwxMzMsMTczLDE4 LAorMzIsMTU2LDIwOSwyMDIsMjAwLDgxLDE4LDQ5LDM5LDIxOCw3Niw3NiwyMzQsMjIsMTgwLDcy LDEzMCwxMTUsNzEsNDMsMzMsNzIsCis2OCwxOTYsMTU5LDM4LDEzNCwxOSw0NiwxMDUsNTYsMjI2 LDE1MCw2OCwxNTcsMTYwLDEsMjI4LDczLDI0MiwxMDQsOTcsNDYsCisxNiwzMSwzNCw3OSwxNDAs NjYsMjE0LDEzNywxNiw3OCwxMDQsMjI5LDEwOCwxNjksMTM3LDcyLDE0NywyMzcsMzgsMzgsMTE3 LAorMTEsOTAsMzYsNjUsNTcsMTYzLDE0OSwxNzgsMTY4LDIxLDM0LDc5LDE0NiwzMiwxNTYsMjA5 LDIwMiwyMTgsMjUwLDE2MSwxNzgsCiszNiwyNTEsNzMsMTM4LDkzLDMyLDE1NiwyMDksMjAyLDIx OCwyNTAsMTkzLDgyLDM2LDI0OCwxOTYsNTQsMTQ3LDM2LDE3MywKKzE5MSwxNzQsMjcsMzQsNzks MTgwLDE1MiwxNTMsMjEyLDU0LDE0NywzNiwxNzMsMTkxLDE3NiwxNywzNCw3OSwxMzUsMTE3LDM1 LAorNDMsMTE1LDIzNiwxMzMsMjAwLDE0NywyMzcsMzgsMzUsMjQ1LDIxMiwxNDAsMTczLDIwNywx ODAsMTUsMzQsNzksMTMxLDQsCisyMDEsMTA4LDE3MywxMzMsNzIsMTQ3LDIzNywzOCwzMywyNDQs MTksMzcsMTc4LDE4NCwxNywzNCw3OSwxNDAsMTE1LDEwMiwKKzEyMywxMDcsMjM4LDEzMywyMDAs MTQ3LDIzNywzOCwzOCwxMTcsMjA1LDE1MywyMzcsMTc1LDE4OCwyMywzNCw3OSwxMzMsMTYyLAor MjE1LDIwNCwxNiwxNywxODIsMjU0LDI0OCwxMTYsMTM3LDYyLDIxMCw5OCw0NywxMDQsMTgxLDI0 Myw0LDQsMTA5LDE5MSwxOTIsCisxMzEsMTUyLDE0NywyMzAsOCw4LDIxNywxMiwxNiw2MCwxMzcs NjIsOTYsMTI4LDE0MSwxNzgsMTkzLDE2MCwyMDYsMSwyMDEsCisxNzYsMTEzLDE0NiwwLDAsMCww LDAsMCwwLDAsNDksMTg1LDI1Miw2NSwxMzcsMjA3LDIyNywzNywyMTUsMjA3LDIyNywxMiw4NiwK KzEyNywyNCwxNTIsMTg4LDI1NCw0OSw4OCwzMyw0Niw2NSwxMjAsNzIsNCwxNTMsMzcsNjMsMzMs MTMsMTI3LDE0OCw0LDI2LDAsCis1Nyw2Miw2LDIyOCwxNjMsMjI4LDc0LDg2LDIxNSw2Miw1NSwy OCwxMTAsMTc5LDIyNiwxMTMsNzAsMjIzLDYyLDQ3LDI0LDM4LAorMTkxLDMwLDIsMTI1LDMyLDQw LDIwLDg3LDExNCw0MSwyMjUsNDIsNSwyNDAsMTQ1LDEzOSwxNjMsMTQ1LDQxLDY4LDI1MCwxMjgs Cis4MCw0MSwxNzQsMjI4LDg1LDIwMCwxMjksMTY2LDM5LDksMjQsMTg2LDU3LDE4LDE0OCw3OSwx NzIsNSwyLDE3MCwyMzgsNjksCisyMjAsMTM3LDEwLDcyLDE0NSwxNjIsMzksOSwyNCwxODYsNTcs MTgsMTQ4LDc5LDE3Niw1LDIsMTg2LDIzOCw2OSwxMjQsMTUwLAorMjcsNDgsOTUsMTMyLDE0MCw5 MywyOCwxMzcsNzQsMzksMjE4LDIsMTI5LDEwMSwxMTksMzQsMTU4LDc5LDE1LDM5LDksMjQsCisx ODYsNTcsMTgsMTQ4LDc5LDE4NCw1LDIsMjE4LDIzOCw2OSwyOSwxNjQsODAsNzgsMTk4LDQ2LDE0 Miw2OCwxNjUsMTYsNjQsCisyOCwyNCw2MSw3MywyNSwzMywyMDUsMTI5LDEyOSwyMTUsMTY2LDEy OCwwLDAsMCwxLDEwOCwyNDIsMTUxLDE1LDM5LDgsMzQsCisyNiw4Nyw5NywyMDAsMywwLDE2Nywx MjksMzIsOCwxOTQsMTk1LDE2LDYsODQsNTUsMTAsNjAsMywzNSw2OSwxMzIsMzAsMSwKKzE0MCwx MzAsMTkzLDE0MywxLDE5NiwyMzAsNjAsMiwxNTgsOCwxMzEsMTUzLDY0LDExNSw0Miw0NiwxOTEs MTc2LDgsMTk0LAorMjQ2LDAsODAsNSwyMjAsMTkzLDk1LDYsMjM0LDUsMTAwLDIyNSwzNSwyMyw3 MSwzNSw2LDIyOCwxNDAsOTMsMjksMTgwLDU1LAorMTA4LDE0NSwxMzksMTYzLDE4MiwxMTIsNTIs MTA3LDY3LDc2LDU2LDMsMTUzLDEzMiwyMCwyOCw3NiwxNTYsODksMjYsMTA1LAorMTU4LDYyLDAs MCw0MiwxOTMsMiwyMDEsMTA0LDE3LDQxLDM0LDE1NiwyMDQsMTc2LDE2MCwyMjYsMTAwLDIyNiwy MDAsMjExLAorNzYsMjQxLDI0MCwwLDEsODYsMiwxMzEsMTM3LDE0NywxNDIsNDEsMTAwLDczLDE5 OSwxOTIsMCw1LDk2LDYsMTMsMTAsODIsNzAsCis2MiwwLDAsNDIsMTMwLDg4LDExNSwxOCwxMjQs NjcsMTAzLDE3Nyw2OSw0OSwxMjksNiwzNiwyNDksNjgsNTQsMTIzLDIwLDgyLAorMjE2LDY1LDEz Nyw2MiwzMywxNzksMjA5LDIxNCwxNjIsMTUyLDIwOCwxNDcsMTgsMTI0LDE2MiwyNyw2MSwyOSwx MDYsNDEsCisxMTIsMzIsMTk2LDE1OSwxNiwyMTcsMjMzLDIzMyw4MSw3NiwxMTIsNzMsMTM3LDYy LDgxLDEzLDE1OCwxNTgsMTQ5LDIwLDE4NiwKKzIwLDk4LDc5LDEzMyw5MSwxMjksNjEsNjEsNDIs NDEsMTIwLDQwLDE5NiwxNTksMTAsMTgzLDIsMTIyLDIxOCwxNDgsODIsMjQ4LAorNjAsMTM3LDYy LDMzLDE3OSwyMTYsMTY2LDIxNiwxOTIsMTM3LDE4LDEyNCwxNjIsMjcsNjEsMTM4LDEwOSwxMDgs MzQsNjgsCisxNTksMTYsMjE3LDIzMiwyMzUsODMsMTA4LDEwNCw3NiwxMzcsNjIsODEsMTMsMTU4 LDE0MiwxODEsNTQsMTg0LDE3LDM0LDc5LAorMTM2LDEwOCwyNDQsMjQ0LDE2OSwxODIsNTYsMzgs NjgsMTU5LDQwLDEzNCwyMDcsNzksNzQsMTU1LDkzLDEwLDE0NSwzOSwxOTQsCisxNzMsMTkyLDE1 OCwxNTgsMTQ5LDU0LDE4OCwyMSwzNCw3OSwxMzMsOTEsMTI5LDYxLDEwOSw3NCwxMDksMTI1LDE1 NSw1MSwKKzEzNiw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5LDY4LDg5LDI0LDcwLDIwNiww LDAsNywxMjksMjQ4LDAsMCwwLDEsMTU1LAorNTEsMTY4LDcxLDE2MSwxOTYsMjAxLDQ1LDE2Nywx NDYsNTksNjgsODksMjQsNzAsMjA2LDAsMCw3LDEyOSwyNDgsMCwwLDAsMSwKKzE1NSw1MSwyMDAs NzEsMTYxLDE5NiwyMDEsNDUsMTY3LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYsMCwwLDcsMTI5LDI0 OCwwLDAsCiswLDEsMTU1LDUxLDIzMiw3MSwxNjEsMTk2LDIwMSw0NSwxNjcsMTQ2LDU5LDY4LDg5 LDI0LDcwLDIwNiwwLDAsMCwyLDAsMCwwLAorMCwxLDE1NSw1Miw4LDcxLDE2MSwxOTYsMjAxLDQ1 LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDAsMCwwLDIsMCwwLDAsMCwKKzEsMTU1LDUyLDQw LDcxLDE2MSwxOTYsMjAxLDQ1LDE2NywxNDYsNTksNjgsODksMjQsNzAsMjA2LDAsMCwwLDEzMCww LDAsMCwwLAorMSwxNTUsNTIsNzIsNzEsMTYxLDE5NiwyMDEsNDUsMTY3LDE0Niw1OSw2OCw4OSwy NCw3MCwyMDYsMCwwLDAsMTMwLDAsMCwwLDAsCisxLDE1NSw1MiwxMDQsNzEsMTYxLDE5NiwyMDEs NDUsMTY3LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYsMCwwLDAsMTMwLDAsMCwwLAorMCwxLDE1NSw1 MiwxMzYsNzEsMTYxLDE5NiwyMDEsNDUsMTY3LDE0Niw1OSw2OCw4OSwyNCw3MCwyMDYsMCwwLDEs MiwwLDAsMCwKKzAsMSwxMzUsNTIsMTY2LDMyLDc2LDcyLDEsMjQ2LDEzNiwyMzUsMTAzLDE3Nyw2 OSwwLDEzNiwxNDQsMywyMjYsMjcsNjEsMTM4LAorNDEsNDQsNTAsMzYsMCwyNTEsNjgsMTE3LDE3 OSwyMDksMjE0LDIzNCwyMDEsNjksMTYsNTAsMzYsMCwyNTEsNjgsMTE3LDE3OSwKKzIwOSwyMTQs MjMyLDczLDY5LDM0LDUsMTk2LDEyOCwzMSwxNiwyMTcsMjMyLDIzNSwxMTcsMTAwLDE2MiwxNDcs MiwyMjYsNjQsCisxNSwxMzYsMTA4LDI0NCwxMTcsMTg2LDE4LDgxLDc0LDEyOSwxNDUsMzIsNywy MTgsMzUsMTczLDE1OCwxNTgsMTUxLDg2LDc0LAorNDAsMTYxLDE0NSwzMiw3LDIxOCwzNSwxNzMs MTU4LDE1OCwxNTEsNjYsNzQsNDEsMjAsNDYsMzYsMCwyNDgsMTM0LDIwNyw3OSwKKzc1LDE3MSwz NywyMCwxNTQsMjMsMTgsMCwxMjQsNjcsMTAzLDE2NywxNjUsMjA4LDE0NiwxMzgsODUsMTEsMTM3 LDAsNjIsMjEsCisxMTAsNCwyNTAsMTc4LDgxLDcwLDExLDEzNywwLDYyLDIxLDExMCw0LDI1MCwx OCw4MSw3MiwxOTMsMTQ1LDMyLDcsMTkzLDE4NiwKKzEyOSw4OSw1OCwxNzgsODEsNzEsMTIsMTM3 LDAsNjIsMTMsMjEyLDEwLDIwMSwyMDgsMTQ2LDEzOCw3MSwxMCwxMzcsMCw2MiwKKzIwOSwyOSwx MDgsMjUwLDE3OCw4MSwxMDQsMSw4MSwzMiw3LDIxOCwzNSwxNzMsMTU5LDY2LDc0LDQ1LDMyLDM4 LDM2LDAsMjQ4LAorMTM0LDIwNywxNzEsMzcsMjIsMTYwLDE5LDE4LDAsMTI0LDY3LDEwMywyMDgs MTQ2LDEzOSw4OCwxMCwxODAsODEsNTAsMTE4LAorMTM2LDIzNSwxMDMsMTc3LDc3LDEyOCwxNTUs NjksMTksMzksMTYsMjE3LDIzNiw4MywxMDUsOTcsMTgyLDEzOCwzOCw3OCwyMDksCisyOSwxMDgs MjQ0LDExNywxODYsMTc4LDgzLDEwMCwxMywxODAsODEsNTAsMTE4LDEzNiwyMzUsMTAzLDE2Mywx NzMsMjA4LDE0NiwKKzE1NSw2OCwxMiwxODAsODEsNTAsMTEzLDEzLDE1OCwxNDIsMTgzLDg2LDc0 LDEwOSw0OCw1MCwyMDksNjgsMjAxLDE5Niw1NCwKKzEyMiw1OCwyMjEsOSw0MSwxODEsNjQsMjE5 LDY5LDE5LDM5LDEwNCwxNDIsMTgyLDEyMiwxMjIsOTMsODksNDEsMTc4LDEzNCwKKzIxOCw0MCwx NTMsNTksNjgsMTE3LDE3OSwyMTEsMjEwLDIzMiw3Myw3NywxNjIsMTM0LDkwLDQwLDE1Myw1Niwx MzQsMjA3LDc5LAorNzUsMTcxLDM3LDU0LDE1NCwyNSwxMDQsMTYyLDEwMCwyMjYsMjcsNjEsNjEs NDYsMTMyLDE0OCwyMTgsMTY4LDEwMSwxNjIsCisxMzcsMTQ3LDEzMyw5MSwxMjksNjIsMTcyLDE0 OCwyMTcsMTMxLDQ1LDIwLDc2LDE1Niw0MiwyMjAsOSwyNDQsMzYsMTY2LDIwOSwKKzEzMSwxMDks MjAsNzYsMTU2LDI3LDE2OCwyMSwxNDcsMTcxLDM3LDU0LDExMiwyMTksNjksMTksMzksNiwyMzQs NSwxMDAsMjMyLAorNzMsNzcsMTYzLDEzMywyMTgsNDAsMTUzLDU5LDY4LDExNywxNzksMjM0LDIw MSw3OCwzMiw1LDIxOCw0MCwxNTMsNTksNjgsCisxMTcsMTc5LDIzMiw3Myw3OCwzNiw1LDkwLDQw LDE1Myw1NiwxMzQsMjA3LDE3MSwzNyw1NiwxNjAsMjEsMTA0LDE2MiwxMDAsCisyMjYsMjcsNjIs MTMyLDE0OCwyMjYsMTk1LDk1LDE4Miw5NywxNzYsMjE4LDEyOCw4LDg0LDQ1LDEyMywzOCwxLDEz NywxMCwxLAorMTE0LDE2MCw2NCw1NiwxNTYsMTk5LDEzMCwzNiwxNjAsNzIsOCwzOSw2MywyNywy NCwxLDEwMCwxODAsOCwxNDgsMTQ2LDAsNDUsCisxNjIsMTM3LDE0NywxMTEsMiw4LDQsMTYsNyw4 LDk2LDEyMCw3MiwxLDg3LDIyNCwxNjgsMTMsNDIsMjI2LDE0NSw5Nyw1OCwKKzE4MiwyMzIsMjMy LDY0LDE3NywxMDcsMiw2NCwyMiw4NSwxODEsMTg3LDcsMjEzLDE4Myw3NCwyLDE3LDExOSw0OSwy NTUsMTIxLAorMjA3LDIxNSwyNDAsOTQsMTczLDE5OCwyMTAsMzYsNCwxMTMsOTUsMTE1LDI1NSwy MzIsMzQsMTgyLDgwLDIyMSw5MSwxNDEsCisxNjMsMTYwLDcyLDE1LDEyMSwxMjMsMTAzLDIyNSwy MjAsMTY0LDE5NCwxNjAsMTg2LDI0NCw2NCwyNTEsMzMsOSw2NCwyNCw0NSwKKzY4LDg0LDE1LDIx Nyw2Niw1MSwyMDksMjE4LDIxMCwxMjksNjEsNjUsMjA0LDEyNywxNTQsMTE4LDI1NCwyMDQsMjMs MTc4LAorMTMyLDEwMywxNjUsMiwxMjIsMTMxLDIxNiwyNTUsNTIsMjM3LDI1MywxNTQsMTY4LDQ4 LDYsOTAsMTMwLDEsMCwzOSw3NSw4MCwKKzcyLDgsOSwzMywxODYsMTMwLDgwLDY0LDc2LDEzLDIx MiwxOSwyLDEzMCw5NiwxMTAsMTUwLDE3MywwLDY1LDYsNTEsMjEyLDIwLAorMTI4LDY1LDE3LDEx LDIxMiwxOSwxMzAsMTM3LDEyMSwyMTEsMjEwLDIwOSwxNDQsNiwzOSw3NSw4MCw4MCwwLDIwMSwx MTksCisyMzQsMTAsOCw0MSw4NiwyMzEsNzEsODAsODAsMTI5LDc5LDEzNSwxODYsMTIyLDY5LDIy NCwzNCwyNSw2OSwyMzMsODAsMyw5MSwKKzE0MSwxNjgsNDAsOTYsMTM5LDExMywxODAsMTgxLDUs MzYsMjEsMTEwLDU0LDE0MiwxMzQsMTYwLDE2NSwxLDE3NiwyMywyMTEsCis0NywwLDIxNiwxMzQs MjMzLDIxNSwxMjgsMTExLDExNywxODEsMTA0LDEyOCwyMDksMyw3MCwyMzAsMTA2LDY0LDUsMTM5 LDE2OCwKKzIwOSwyMzQsMTAsMzIsMzYsMTQ0LDEwMiwyMzQsMTM2LDMsMTQ2LDI3LDE2OCw0MCwx NjAsMTQ2LDEzMiwxMDMsMTY4LDQwLAorMTkyLDExNSwzLDExNyw1LDI4LDIyLDExMywxNjMsNjks MTY4LDQxLDEwMywxLDY2LDE4OCwxNywxNDUsNTIsNDAsNCwyMDIsCisxMTMsNjcsNzYsMTMwLDIy Nyw2OCwxOTQsMTMsMjQwLDEwOCwwLDAsODMsOTYsMCwyLDE2MSwwLDEwNCwxNDYsODQsOTcsNDgs MCwKKzEsNzgsMTkyLDU2LDE2OSwyNCwxNDUsMTc5LDE5MiwwLDUsNDgsOCw1NiwxNiwzMiwxMjgs NTYsMTgsNTIsMTI1LDE2Niw4NiwKKzE0NywxODIsMTQwLDI4LDUwLDIxLDEzLDM5LDMxLDIzLDYw LDE0NSwxNTgsNTYsMTQwLDE0MSw0NywxMTMsNiwxNTUsMTg2LAorMTg4LDI0LDQ5LDM5LDE5OSw4 OSwxODgsMTI0LDkyLDI0Miw3MCwxMjAsMjI0LDIwMSwzMyw2OSwxNSwxNTUsMTYzLDE5Nyw2OCwK KzE0LDQ5LDM5LDE5OSwxOTcsMjExLDExNiwyNDAsMjQyLDExMywxOTcsMjMwLDE4LDE4MCwyNTMs MjI4LDMsMTcsNDYsMTgsMjQzLAorMzUsMTAwLDEyOCwxNzIsMTU2LDExNCw3MCwxNjMsMTQ2LDc2 LDM0LDI0OCwxNDYsMTY0LDEwOCwyNDgsNzUsMjA0LDE0MSwxNDYsCisyOCwyMTcsMTE0LDEzNywy Nyw3OCwyNTEsMjQxLDE3MywyMzQsMTYyLDE2MCwyMjUsMSwzLDM0LDkyLDE3MCw5LDEwNSwxNjQs CiszMiwyMjUsNjQsMTMxLDE1NSwxLDE5MywxMzMsNywxOSwzOSwyMiw3MCwxNTQsMTAzLDE0Mywx MjgsMCwxMCwxNzYsMjAsMjgsCis3NiwxNTYsMTEzLDc1LDM0LDc4LDYyLDAsMCw0MywwLDQ4LDEw NCw4MiwxNDYsNDksMjQwLDAsMSw4NCwxMSwxODAsMTkyLDAsNSwKKzExNCwxLDE4LDE2MCw2NSwy NCwxMzEsMjAsMTQ1LDI1LDE3Miw0OCwxMzIsMTIyLDI4LDc2LDE0NiwyMTgsMTIxLDM1LDE4MCwK KzY5LDE0NSwxMzIsMTA4LDIyNCwwLDAsMTIwLDMxLDEyOCwwLDAsMCwyNSwxNzIsNTYsMTMyLDEy MiwyOCw3NiwxNDYsMjE4LAorMTIxLDM1LDE4MCw2OSwxNDUsMTMyLDEwOCwyMjQsMCwwLDEyMCwz MSwxMjgsMCwwLDAsNDAsMTYwLDQ1LDExMCwyMywzMCwxNzYsCiszMywxODQsMCwwLDE3NSwzMiwy OSwyMzUsMiwyNywxOTksMjMsMCwwLDIyLDQsNTEsODgsMTI5LDgsMjQ0LDU2LDE1MywzNywKKzE4 MCwyNDIsNzEsMTA0LDEzOSwzNSw4LDIxNywxOTIsMCwwLDI0MCw2MywwLDAsMCwwLDUxLDg4LDE0 NSw4LDI0NCw1NiwxNTMsCiszNywxODAsMjQyLDcxLDEwNCwxMzksMzUsOCwyMTcsMTkyLDAsMCww LDY0LDAsMCwwLDAsNTEsODgsMTYxLDgsMjQ0LDU2LDE1MywKKzM3LDE4MCwyNDIsNzEsMTA0LDEz OSwzNSw4LDIxNywxOTIsMCwwLDAsNjQsMCwwLDAsMCw1MSw4OCwxNzcsOCwyNDQsNTYsMTUzLAor MzcsMTgwLDI0Miw3MSwxMDQsMTM5LDM1LDgsMjE3LDE5MiwwLDAsMTYsNjQsMCwwLDAsMCw1MSw4 OCwxOTMsOCwyNDQsNTYsCisxNTMsMzcsMTgwLDI0Miw3MSwxMDQsMTM5LDM1LDgsMjE3LDE5Miww LDAsMTYsNjQsMCwwLDAsMCw1MSw4OCwyMDksOCwyNDQsCis1NiwxNTMsMzcsMTgwLDI0Miw3MSwx MDQsMTM5LDM1LDgsMjE3LDE5MiwwLDAsMTYsNjQsMCwwLDAsMCw1MSw4OCwyMjUsOCwKKzI0NCw1 NiwxNTMsMzcsMTgwLDI0Miw3MSwxMDQsMTM5LDM1LDgsMjE3LDE5MiwwLDAsMzIsNjQsMCwwLDAs MCwzMiwyMjcsMTk0LAorMCw5Nyw1NywxNjIsNCwyNDUsMjMyLDUsMzQsOTIsMzUsNjgsMjI1LDE2 MSwxNjYsMjE4LDE2LDE2LDEzNywxMTIsNTIsNDEsNzMsCisyOSwxNTMsMSw2NSwxOTYsMjAxLDE5 NywxNDUsMTY2LDE1MywyNDUsMjAwLDMsMTM3LDIwNCwxMjAsMzQsNzQsOCwyMDAsNTgsCisxMTIs MjgsMjExLDMyLDEzMCw1Miw3OCwyNiwyNiwxMTAsMjQ4LDAsMCwxNjQsNCwxMiw3MCwxMzcsMTk1 LDM5LDI1Miw3MywKKzI0MCwxMTcsMzIsNTcsMTY4LDk3LDQsMTA0LDE1Niw1Miw1MiwyMjEsMjU1 LDE2MCwyMCwxNjAsMTUyLDIzLDIyMywyNTAsMzIsCisxNDgsMjUsMTc0LDEzNyw1OCwyMyw1MSwx OTEsMjQ0LDg0LDEyLDUwLDksMTk1LDM5LDI0MCw4MSwyMzgsMiwzLDEwNywxNzMsCisyMTQsMywx OTIsCit9OworI2Vsc2UKKyNlcnJvciBpbnZhbGlkIGVuZGlhbm5lc3MgZGVmaW5lcworI2VuZGlm CisjZW5kaWYgIC8qIERVS19VU0VfUk9NX09CSkVDVFMgKi8KKworLyogYXV0b21hdGljIHVuZGVm cyAqLworI3VuZGVmIERVS19fUkVGQ0lOSVQKKy8qCisgKiAgRXJyb3IgYW5kIGZhdGFsIGhhbmRs aW5nLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVk ZWQgKi8KKworI2RlZmluZSBEVUtfX0VSUkZNVF9CVUZTSVpFICAyNTYgIC8qIHNpemUgZm9yIGZv cm1hdHRpbmcgYnVmZmVycyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JT KQorCitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9pZCBkdWtfZXJyX2hhbmRsZV9lcnJvcl9mbXQo ZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a191aW50X3QgbGluZV9h bmRfY29kZSwgY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKwl2YV9saXN0IGFwOworCWNoYXIgbXNn W0RVS19fRVJSRk1UX0JVRlNJWkVdOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCSh2b2lkKSBEVUtf VlNOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksIGZtdCwgYXApOworCW1zZ1tzaXplb2YobXNnKSAt IDFdID0gKGNoYXIpIDA7CisJZHVrX2Vycl9jcmVhdGVfYW5kX3Rocm93KHRociwgKGR1a19lcnJj b2RlX3QpIChsaW5lX2FuZF9jb2RlID4+IDI0KSwgbXNnLCBmaWxlbmFtZSwgKGR1a19pbnRfdCkg KGxpbmVfYW5kX2NvZGUgJiAweDAwZmZmZmZmTCkpOworCXZhX2VuZChhcCk7ICAvKiBkZWFkIGNv ZGUsIGJ1dCBlbnN1cmVzIHBvcnRhYmlsaXR5IChzZWUgTGludXggbWFuIHBhZ2Ugbm90ZXMpICov Cit9CisKK0RVS19JTlRFUk5BTCBEVUtfQ09MRCB2b2lkIGR1a19lcnJfaGFuZGxlX2Vycm9yKGR1 a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfdWludF90IGxpbmVfYW5k X2NvZGUsIGNvbnN0IGNoYXIgKm1zZykgeworCWR1a19lcnJfY3JlYXRlX2FuZF90aHJvdyh0aHIs IChkdWtfZXJyY29kZV90KSAobGluZV9hbmRfY29kZSA+PiAyNCksIG1zZywgZmlsZW5hbWUsIChk dWtfaW50X3QpIChsaW5lX2FuZF9jb2RlICYgMHgwMGZmZmZmZkwpKTsKK30KKworI2Vsc2UgIC8q IERVS19VU0VfVkVSQk9TRV9FUlJPUlMgKi8KKworRFVLX0lOVEVSTkFMIERVS19DT0xEIHZvaWQg ZHVrX2Vycl9oYW5kbGVfZXJyb3IoZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBjb2Rl KSB7CisJZHVrX2Vycl9jcmVhdGVfYW5kX3Rocm93KHRociwgY29kZSk7Cit9CisKKyNlbmRpZiAg LyogRFVLX1VTRV9WRVJCT1NFX0VSUk9SUyAqLworCisvKgorICogIEVycm9yIHRocm93aW5nIGhl bHBlcnMKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JTKQorI2lmIGRl ZmluZWQoRFVLX1VTRV9QQVJBTk9JRF9FUlJPUlMpCitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9p ZCBkdWtfZXJyX3JlcXVpcmVfdHlwZV9pbmRleChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFy ICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmVudW1iZXIsIGR1a19pZHhfdCBpZHgsIGNvbnN0IGNo YXIgKmV4cGVjdF9uYW1lKSB7CisJRFVLX0VSUk9SX1JBV19GTVQzKHRociwgZmlsZW5hbWUsIGxp bmVudW1iZXIsIERVS19FUlJfVFlQRV9FUlJPUiwgIiVzIHJlcXVpcmVkLCBmb3VuZCAlcyAoc3Rh Y2sgaW5kZXggJWxkKSIsCisJICAgICAgICAgICAgICAgICAgIGV4cGVjdF9uYW1lLCBkdWtfZ2V0 X3R5cGVfbmFtZSh0aHIsIGlkeCksIChsb25nKSBpZHgpOworfQorI2Vsc2UKK0RVS19JTlRFUk5B TCBEVUtfQ09MRCB2b2lkIGR1a19lcnJfcmVxdWlyZV90eXBlX2luZGV4KGR1a19odGhyZWFkICp0 aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlciwgZHVrX2lkeF90 IGlkeCwgY29uc3QgY2hhciAqZXhwZWN0X25hbWUpIHsKKwlEVUtfRVJST1JfUkFXX0ZNVDModGhy LCBmaWxlbmFtZSwgbGluZW51bWJlciwgRFVLX0VSUl9UWVBFX0VSUk9SLCAiJXMgcmVxdWlyZWQs IGZvdW5kICVzIChzdGFjayBpbmRleCAlbGQpIiwKKwkgICAgICAgICAgICAgICAgICAgZXhwZWN0 X25hbWUsIGR1a19wdXNoX3N0cmluZ19yZWFkYWJsZSh0aHIsIGlkeCksIChsb25nKSBpZHgpOwor fQorI2VuZGlmCitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9pZCBkdWtfZXJyX2Vycm9yX2ludGVy bmFsKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGlu ZW51bWJlcikgeworCURVS19FUlJPUl9SQVcodGhyLCBmaWxlbmFtZSwgbGluZW51bWJlciwgRFVL X0VSUl9FUlJPUiwgRFVLX1NUUl9JTlRFUk5BTF9FUlJPUik7Cit9CitEVUtfSU5URVJOQUwgRFVL X0NPTEQgdm9pZCBkdWtfZXJyX2Vycm9yX2FsbG9jX2ZhaWxlZChkdWtfaHRocmVhZCAqdGhyLCBj b25zdCBjaGFyICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmVudW1iZXIpIHsKKwlEVUtfRVJST1Jf UkFXKHRociwgZmlsZW5hbWUsIGxpbmVudW1iZXIsIERVS19FUlJfRVJST1IsIERVS19TVFJfQUxM T0NfRkFJTEVEKTsKK30KK0RVS19JTlRFUk5BTCBEVUtfQ09MRCB2b2lkIGR1a19lcnJfZXJyb3Io ZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lbnVt YmVyLCBjb25zdCBjaGFyICptZXNzYWdlKSB7CisJRFVLX0VSUk9SX1JBVyh0aHIsIGZpbGVuYW1l LCBsaW5lbnVtYmVyLCBEVUtfRVJSX0VSUk9SLCBtZXNzYWdlKTsKK30KK0RVS19JTlRFUk5BTCBE VUtfQ09MRCB2b2lkIGR1a19lcnJfcmFuZ2UoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAq ZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lbnVtYmVyLCBjb25zdCBjaGFyICptZXNzYWdlKSB7CisJ RFVLX0VSUk9SX1JBVyh0aHIsIGZpbGVuYW1lLCBsaW5lbnVtYmVyLCBEVUtfRVJSX1JBTkdFX0VS Uk9SLCBtZXNzYWdlKTsKK30KK0RVS19JTlRFUk5BTCBEVUtfQ09MRCB2b2lkIGR1a19lcnJfcmFu Z2VfaW5kZXgoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRf dCBsaW5lbnVtYmVyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0VSUk9SX1JBV19GTVQxKHRociwg ZmlsZW5hbWUsIGxpbmVudW1iZXIsIERVS19FUlJfUkFOR0VfRVJST1IsICJpbnZhbGlkIHN0YWNr IGluZGV4ICVsZCIsIChsb25nKSAoaWR4KSk7Cit9CitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9p ZCBkdWtfZXJyX3JhbmdlX3B1c2hfYmV5b25kKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlcikgeworCURVS19FUlJPUl9SQVcodGhyLCBm aWxlbmFtZSwgbGluZW51bWJlciwgRFVLX0VSUl9SQU5HRV9FUlJPUiwgRFVLX1NUUl9QVVNIX0JF WU9ORF9BTExPQ19TVEFDSyk7Cit9CitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9pZCBkdWtfZXJy X3R5cGVfaW52YWxpZF9hcmdzKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LCBkdWtfaW50X3QgbGluZW51bWJlcikgeworCURVS19FUlJPUl9SQVcodGhyLCBmaWxlbmFtZSwg bGluZW51bWJlciwgRFVLX0VSUl9UWVBFX0VSUk9SLCBEVUtfU1RSX0lOVkFMSURfQVJHUyk7Cit9 CitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9pZCBkdWtfZXJyX3R5cGVfaW52YWxpZF9zdGF0ZShk dWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmVudW1i ZXIpIHsKKwlEVUtfRVJST1JfUkFXKHRociwgZmlsZW5hbWUsIGxpbmVudW1iZXIsIERVS19FUlJf VFlQRV9FUlJPUiwgRFVLX1NUUl9JTlZBTElEX1NUQVRFKTsKK30KK0RVS19JTlRFUk5BTCBEVUtf Q09MRCB2b2lkIGR1a19lcnJfdHlwZV9pbnZhbGlkX3RyYXBfcmVzdWx0KGR1a19odGhyZWFkICp0 aHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZW51bWJlcikgeworCURVS19F UlJPUl9SQVcodGhyLCBmaWxlbmFtZSwgbGluZW51bWJlciwgRFVLX0VSUl9UWVBFX0VSUk9SLCBE VUtfU1RSX0lOVkFMSURfVFJBUF9SRVNVTFQpOworfQorI2Vsc2UKKy8qIFRoZSBmaWxlL2xpbmUg YXJndW1lbnRzIGFyZSBOVUxMIGFuZCAwLCB0aGV5J3JlIGlnbm9yZWQgYnkgRFVLX0VSUk9SX1JB VygpCisgKiB3aGVuIG5vbi12ZXJib3NlIGVycm9ycyBhcmUgdXNlZC4KKyAqLworCitEVUtfTk9S RVRVUk4oRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2Vycl9zaGFyZWQoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2VycmNvZGVfdCBjb2RlKSk7CitEVUtfTE9DQUwgdm9pZCBkdWtfX2Vycl9zaGFyZWQo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBjb2RlKSB7CisJRFVLX0VSUk9SX1JBVyh0 aHIsIE5VTEwsIDAsIGNvZGUsIE5VTEwpOworfQorRFVLX0lOVEVSTkFMIERVS19DT0xEIHZvaWQg ZHVrX2Vycl9lcnJvcihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19lcnJfc2hhcmVkKHRociwg RFVLX0VSUl9FUlJPUik7Cit9CitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9pZCBkdWtfZXJyX3Jh bmdlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfX2Vycl9zaGFyZWQodGhyLCBEVUtfRVJSX1JB TkdFX0VSUk9SKTsKK30KK0RVS19JTlRFUk5BTCBEVUtfQ09MRCB2b2lkIGR1a19lcnJfZXZhbChk dWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19lcnJfc2hhcmVkKHRociwgRFVLX0VSUl9FVkFMX0VS Uk9SKTsKK30KK0RVS19JTlRFUk5BTCBEVUtfQ09MRCB2b2lkIGR1a19lcnJfcmVmZXJlbmNlKGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfX2Vycl9zaGFyZWQodGhyLCBEVUtfRVJSX1JFRkVSRU5D RV9FUlJPUik7Cit9CitEVUtfSU5URVJOQUwgRFVLX0NPTEQgdm9pZCBkdWtfZXJyX3N5bnRheChk dWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19lcnJfc2hhcmVkKHRociwgRFVLX0VSUl9TWU5UQVhf RVJST1IpOworfQorRFVLX0lOVEVSTkFMIERVS19DT0xEIHZvaWQgZHVrX2Vycl90eXBlKGR1a19o dGhyZWFkICp0aHIpIHsKKwlkdWtfX2Vycl9zaGFyZWQodGhyLCBEVUtfRVJSX1RZUEVfRVJST1Ip OworfQorRFVLX0lOVEVSTkFMIERVS19DT0xEIHZvaWQgZHVrX2Vycl91cmkoZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19fZXJyX3NoYXJlZCh0aHIsIERVS19FUlJfVVJJX0VSUk9SKTsKK30KKyNl bmRpZgorCisvKgorICogIERlZmF1bHQgZmF0YWwgZXJyb3IgaGFuZGxlcgorICovCisKK0RVS19J TlRFUk5BTCBEVUtfQ09MRCB2b2lkIGR1a19kZWZhdWx0X2ZhdGFsX2hhbmRsZXIodm9pZCAqdWRh dGEsIGNvbnN0IGNoYXIgKm1zZykgeworCURVS19VTlJFRih1ZGF0YSk7CisJRFVLX1VOUkVGKG1z Zyk7CisKKwltc2cgPSBtc2cgPyBtc2cgOiAiTlVMTCI7CisKKyNpZiBkZWZpbmVkKERVS19VU0Vf RkFUQUxfSEFORExFUikKKwkvKiBkdWtfY29uZmlnLmggcHJvdmlkZWQgYSBjdXN0b20gZGVmYXVs dCBmYXRhbCBoYW5kbGVyLiAqLworCURVS19EKERVS19EUFJJTlQoImN1c3RvbSBkZWZhdWx0IGZh dGFsIGVycm9yIGhhbmRsZXIgY2FsbGVkOiAlcyIsIG1zZykpOworCURVS19VU0VfRkFUQUxfSEFO RExFUih1ZGF0YSwgbXNnKTsKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9DUFBfRVhDRVBUSU9OUykK KwkvKiBXaXRoIEMrKyB1c2UgYSBkdWtfZmF0YWxfZXhjZXB0aW9uIHdoaWNoIHVzZXIgY29kZSBj YW4gY2F0Y2ggaW4KKwkgKiBhIG5hdHVyYWwgd2F5LgorCSAqLworCURVS19EKERVS19EUFJJTlQo ImJ1aWx0LWluIGRlZmF1bHQgQysrIGZhdGFsIGVycm9yIGhhbmRsZXIgY2FsbGVkOiAlcyIsIG1z ZykpOworCXRocm93IGR1a19mYXRhbF9leGNlcHRpb24obXNnKTsKKyNlbHNlCisJLyogRGVmYXVs dCBiZWhhdmlvciBpcyB0byBhYm9ydCgpIG9uIGVycm9yLiAgVGhlcmUncyBubyBwcmludG91dAor CSAqIHdoaWNoIG1ha2VzIHRoaXMgYXdrd2FyZCwgc28gaXQncyBhbHdheXMgcmVjb21tZW5kZWQg dG8gdXNlIGFuCisJICogZXhwbGljaXQgZmF0YWwgZXJyb3IgaGFuZGxlci4KKwkgKgorCSAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisJICogTk9URTogSWYgeW91IGFyZSBzZWVpbmcgdGhpcywgeW91IGFyZSBtb3N0 IGxpa2VseSBkZWFsaW5nIHdpdGggYW4KKwkgKiB1bmNhdWdodCBlcnJvci4gIFlvdSBzaG91bGQg cHJvdmlkZSBhIGZhdGFsIGVycm9yIGhhbmRsZXIgaW4gRHVrdGFwZQorCSAqIGhlYXAgY3JlYXRp b24sIGFuZCBzaG91bGQgY29uc2lkZXIgdXNpbmcgYSBwcm90ZWN0ZWQgY2FsbCBhcyB5b3VyCisJ ICogZmlyc3QgY2FsbCBpbnRvIGFuIGVtcHR5IER1a3RhcGUgY29udGV4dCB0byBwcm9wZXJseSBo YW5kbGUgZXJyb3JzLgorCSAqIFNlZToKKwkgKiAgIC0gaHR0cDovL2R1a3RhcGUub3JnL2d1aWRl Lmh0bWwjZXJyb3ItaGFuZGxpbmcKKwkgKiAgIC0gaHR0cDovL3dpa2kuZHVrdGFwZS5vcmcvSG93 dG9GYXRhbEVycm9ycy5odG1sCisJICogICAtIGh0dHA6Ly9kdWt0YXBlLm9yZy9hcGkuaHRtbCN0 YWdsaXN0LXByb3RlY3RlZAorCSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICovCisJRFVLX0QoRFVLX0RQUklO VCgiYnVpbHQtaW4gZGVmYXVsdCBmYXRhbCBlcnJvciBoYW5kbGVyIGNhbGxlZDogJXMiLCBtc2cp KTsKKwlEVUtfQUJPUlQoKTsKKyNlbmRpZgorCisJRFVLX0QoRFVLX0RQUklOVCgiZmF0YWwgZXJy b3IgaGFuZGxlciByZXR1cm5lZCwgZW50ZXIgZm9yZXZlciBsb29wIikpOworCWZvciAoOzspIHsK KwkJLyogTG9vcCBmb3JldmVyIHRvIGVuc3VyZSB3ZSBkb24ndCByZXR1cm4uICovCisJfQorfQor CisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYgRFVLX19FUlJGTVRfQlVGU0laRQorLyoK KyAqICBWYXJpb3VzIFVuaWNvZGUgaGVscCBmdW5jdGlvbnMgZm9yIGNoYXJhY3RlciBjbGFzc2lm aWNhdGlvbiBwcmVkaWNhdGVzLAorICogIGNhc2UgY29udmVyc2lvbiwgZGVjb2RpbmcsIGV0Yy4K KyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICov CisKKy8qCisgKiAgRmFzdCBwYXRoIHRhYmxlcworICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf SURDSEFSX0ZBU1RQQVRIKQorRFVLX0lOVEVSTkFMIGNvbnN0IGR1a19pbnQ4X3QgZHVrX2lzX2lk Y2hhcl90YWJbMTI4XSA9IHsKKwkvKiAwOiBub3QgSWRlbnRpZmllclN0YXJ0IG9yIElkZW50aWZp ZXJQYXJ0CisJICogMTogSWRlbnRpZmllclN0YXJ0IGFuZCBJZGVudGlmaWVyUGFydAorCSAqIC0x OiBJZGVudGlmaWVyUGFydCBvbmx5CisJICovCisJMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwg IDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgICAvKiAweDAwLi4uMHgwZiAqLwor CTAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAg MCwgIDAsICAgLyogMHgxMC4uLjB4MWYgKi8KKwkwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAwLCAg MCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgIC8qIDB4MjAuLi4weDJmICovCisJ LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsICAwLCAgMCwgIDAsICAw LCAgMCwgICAvKiAweDMwLi4uMHgzZiAqLworCTAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAx LCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAgLyogMHg0MC4uLjB4NGYgKi8KKwkx LCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAs ICAxLCAgIC8qIDB4NTAuLi4weDVmICovCisJMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEs ICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgICAvKiAweDYwLi4uMHg2ZiAqLworCTEs ICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwg IDAgICAgLyogMHg3MC4uLjB4N2YgKi8KK307CisjZW5kaWYKKworLyoKKyAqICBYVVRGLTggYW5k IENFU1UtOCBlbmNvZGluZy9kZWNvZGluZworICovCisKK0RVS19JTlRFUk5BTCBkdWtfc21hbGxf aW50X3QgZHVrX3VuaWNvZGVfZ2V0X3h1dGY4X2xlbmd0aChkdWtfdWNvZGVwb2ludF90IGNwKSB7 CisJZHVrX3VpbnRfZmFzdDMyX3QgeCA9IChkdWtfdWludF9mYXN0MzJfdCkgY3A7CisJaWYgKHgg PCAweDgwVUwpIHsKKwkJLyogNyBiaXRzICovCisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoeCA8 IDB4ODAwVUwpIHsKKwkJLyogMTEgYml0cyAqLworCQlyZXR1cm4gMjsKKwl9IGVsc2UgaWYgKHgg PCAweDEwMDAwVUwpIHsKKwkJLyogMTYgYml0cyAqLworCQlyZXR1cm4gMzsKKwl9IGVsc2UgaWYg KHggPCAweDIwMDAwMFVMKSB7CisJCS8qIDIxIGJpdHMgKi8KKwkJcmV0dXJuIDQ7CisJfSBlbHNl IGlmICh4IDwgMHg0MDAwMDAwVUwpIHsKKwkJLyogMjYgYml0cyAqLworCQlyZXR1cm4gNTsKKwl9 IGVsc2UgaWYgKHggPCAoZHVrX3Vjb2RlcG9pbnRfdCkgMHg4MDAwMDAwMFVMKSB7CisJCS8qIDMx IGJpdHMgKi8KKwkJcmV0dXJuIDY7CisJfSBlbHNlIHsKKwkJLyogMzYgYml0cyAqLworCQlyZXR1 cm4gNzsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKK0RVS19JTlRF Uk5BTCBkdWtfc21hbGxfaW50X3QgZHVrX3VuaWNvZGVfZ2V0X2Nlc3U4X2xlbmd0aChkdWtfdWNv ZGVwb2ludF90IGNwKSB7CisJZHVrX3VpbnRfZmFzdDMyX3QgeCA9IChkdWtfdWludF9mYXN0MzJf dCkgY3A7CisJaWYgKHggPCAweDgwVUwpIHsKKwkJLyogNyBiaXRzICovCisJCXJldHVybiAxOwor CX0gZWxzZSBpZiAoeCA8IDB4ODAwVUwpIHsKKwkJLyogMTEgYml0cyAqLworCQlyZXR1cm4gMjsK Kwl9IGVsc2UgaWYgKHggPCAweDEwMDAwVUwpIHsKKwkJLyogMTYgYml0cyAqLworCQlyZXR1cm4g MzsKKwl9IGVsc2UgeworCQkvKiBFbmNvZGVkIGFzIHN1cnJvZ2F0ZSBwYWlyLCBlYWNoIGVuY29k aW5nIHRvIDMgYnl0ZXMgZm9yCisJCSAqIDYgYnl0ZXMgdG90YWwuICBDb2RlcG9pbnRzIGFib3Zl IFUrMTBGRkZGIGVuY29kZSBhcyA2IGJ5dGVzCisJCSAqIHRvbywgc2VlIGR1a191bmljb2RlX2Vu Y29kZV9jZXN1OCgpLgorCQkgICovCisJCXJldHVybiAzICsgMzsKKwl9Cit9CisjZW5kaWYgIC8q IERVS19VU0VfQVNTRVJUSU9OUyAqLworCitEVUtfSU5URVJOQUwgY29uc3QgZHVrX3VpbnQ4X3Qg ZHVrX3VuaWNvZGVfeHV0ZjhfbWFya2Vyc1s3XSA9IHsKKwkweDAwLCAweGMwLCAweGUwLCAweGYw LCAweGY4LCAweGZjLCAweGZlCit9OworCisvKiBFbmNvZGUgdG8gZXh0ZW5kZWQgVVRGLTg7ICdv dXQnIG11c3QgaGF2ZSBzcGFjZSBmb3IgYXQgbGVhc3QKKyAqIERVS19VTklDT0RFX01BWF9YVVRG OF9MRU5HVEggYnl0ZXMuICBBbGxvd3MgZW5jb2Rpbmcgb2YgYW55CisgKiAzMi1iaXQgKHVuc2ln bmVkKSBjb2RlcG9pbnQuCisgKi8KK0RVS19JTlRFUk5BTCBkdWtfc21hbGxfaW50X3QgZHVrX3Vu aWNvZGVfZW5jb2RlX3h1dGY4KGR1a191Y29kZXBvaW50X3QgY3AsIGR1a191aW50OF90ICpvdXQp IHsKKwlkdWtfdWludF9mYXN0MzJfdCB4ID0gKGR1a191aW50X2Zhc3QzMl90KSBjcDsKKwlkdWtf c21hbGxfaW50X3QgbGVuOworCWR1a191aW50OF90IG1hcmtlcjsKKwlkdWtfc21hbGxfaW50X3Qg aTsKKworCWxlbiA9IGR1a191bmljb2RlX2dldF94dXRmOF9sZW5ndGgoY3ApOworCURVS19BU1NF UlQobGVuID4gMCk7CisKKwltYXJrZXIgPSBkdWtfdW5pY29kZV94dXRmOF9tYXJrZXJzW2xlbiAt IDFdOyAgLyogNjQtYml0IE9LIGJlY2F1c2UgYWx3YXlzID49IDAgKi8KKworCWkgPSBsZW47CisJ RFVLX0FTU0VSVChpID4gMCk7CisJZG8geworCQlpLS07CisJCWlmIChpID4gMCkgeworCQkJb3V0 W2ldID0gKGR1a191aW50OF90KSAoMHg4MCArICh4ICYgMHgzZikpOworCQkJeCA+Pj0gNjsKKwkJ fSBlbHNlIHsKKwkJCS8qIE5vdGU6IG1hc2tpbmcgb2YgJ3gnIGlzIG5vdCBuZWNlc3NhcnkgYmVj YXVzZSBvZgorCQkJICogcmFuZ2UgY2hlY2sgYW5kIHNoaWZ0aW5nIC0+IG5vIGJpdHMgb3Zlcmxh cHBpbmcKKwkJCSAqIHRoZSBtYXJrZXIgc2hvdWxkIGJlIHNldC4KKwkJCSAqLworCQkJb3V0WzBd ID0gKGR1a191aW50OF90KSAobWFya2VyICsgeCk7CisJCX0KKwl9IHdoaWxlIChpID4gMCk7CisK KwlyZXR1cm4gbGVuOworfQorCisvKiBFbmNvZGUgdG8gQ0VTVS04OyAnb3V0JyBtdXN0IGhhdmUg c3BhY2UgZm9yIGF0IGxlYXN0CisgKiBEVUtfVU5JQ09ERV9NQVhfQ0VTVThfTEVOR1RIIGJ5dGVz OyBjb2RlcG9pbnRzIGFib3ZlIFUrMTBGRkZGCisgKiB3aWxsIGVuY29kZSB0byBnYXJiYWdlIGJ1 dCB3b24ndCBvdmVyd3JpdGUgdGhlIG91dHB1dCBidWZmZXIuCisgKi8KK0RVS19JTlRFUk5BTCBk dWtfc21hbGxfaW50X3QgZHVrX3VuaWNvZGVfZW5jb2RlX2Nlc3U4KGR1a191Y29kZXBvaW50X3Qg Y3AsIGR1a191aW50OF90ICpvdXQpIHsKKwlkdWtfdWludF9mYXN0MzJfdCB4ID0gKGR1a191aW50 X2Zhc3QzMl90KSBjcDsKKwlkdWtfc21hbGxfaW50X3QgbGVuOworCisJaWYgKHggPCAweDgwVUwp IHsKKwkJb3V0WzBdID0gKGR1a191aW50OF90KSB4OworCQlsZW4gPSAxOworCX0gZWxzZSBpZiAo eCA8IDB4ODAwVUwpIHsKKwkJb3V0WzBdID0gKGR1a191aW50OF90KSAoMHhjMCArICgoeCA+PiA2 KSAmIDB4MWYpKTsKKwkJb3V0WzFdID0gKGR1a191aW50OF90KSAoMHg4MCArICh4ICYgMHgzZikp OworCQlsZW4gPSAyOworCX0gZWxzZSBpZiAoeCA8IDB4MTAwMDBVTCkgeworCQkvKiBzdXJyb2dh dGUgcGFpcnMgZ2V0IGVuY29kZWQgaGVyZSAqLworCQlvdXRbMF0gPSAoZHVrX3VpbnQ4X3QpICgw eGUwICsgKCh4ID4+IDEyKSAmIDB4MGYpKTsKKwkJb3V0WzFdID0gKGR1a191aW50OF90KSAoMHg4 MCArICgoeCA+PiA2KSAmIDB4M2YpKTsKKwkJb3V0WzJdID0gKGR1a191aW50OF90KSAoMHg4MCAr ICh4ICYgMHgzZikpOworCQlsZW4gPSAzOworCX0gZWxzZSB7CisJCS8qCisJCSAqICBVbmljb2Rl IGNvZGVwb2ludHMgYWJvdmUgVStGRkZGIGFyZSBlbmNvZGVkIGFzIHN1cnJvZ2F0ZQorCQkgKiAg cGFpcnMgaGVyZS4gIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBDRVNVLTggY29kZXBvaW50cyBhcmUK KwkJICogIDE2LWJpdCB2YWx1ZXMgYXMgZXhwZWN0ZWQgaW4gRUNNQVNjcmlwdC4gIFRoZSBzdXJy b2dhdGUKKwkJICogIHBhaXJzIGFsd2F5cyBnZXQgYSAzLWJ5dGUgZW5jb2RpbmcgKGVhY2gpIGlu IENFU1UtOC4KKwkJICogIFNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdXJyb2dh dGVfcGFpcgorCQkgKgorCQkgKiAgMjAtYml0IGNvZGVwb2ludCwgMTAgYml0cyAoQSBhbmQgQikg cGVyIHN1cnJvZ2F0ZSBwYWlyOgorCQkgKgorCQkgKiAgICB4ID0gMGIwMDAwMDAwMCAwMDAwQUFB QSBBQUFBQUFCQiBCQkJCQkJCQgorCQkgKiAgc3AxID0gMGIxMTAxMTBBQSBBQUFBQUFBQSAgKDB4 ZDgwMCArICgoeCA+PiAxMCkgJiAweDNmZikpCisJCSAqICBzcDIgPSAwYjExMDExMUJCIEJCQkJC QkJCICAoMHhkYzAwICsgKHggJiAweDNmZikpCisJCSAqCisJCSAqICBFbmNvZGVkIGludG8gQ0VT VS04OgorCQkgKgorCQkgKiAgc3AxIC0+IDBiMTExMDExMDEgICgweGUwICsgKChzcDEgPj4gMTIp ICYgMHgwZikpCisJCSAqICAgICAgLT4gMGIxMDEwQUFBQSAgKDB4ODAgKyAoKHNwMSA+PiA2KSAm IDB4M2YpKQorCQkgKiAgICAgIC0+IDBiMTBBQUFBQUEgICgweDgwICsgKHNwMSAmIDB4M2YpKQor CQkgKiAgc3AyIC0+IDBiMTExMDExMDEgICgweGUwICsgKChzcDIgPj4gMTIpICYgMHgwZikpCisJ CSAqICAgICAgLT4gMGIxMDExQkJCQiAgKDB4ODAgKyAoKHNwMiA+PiA2KSAmIDB4M2YpKQorCQkg KiAgICAgIC0+IDBiMTBCQkJCQkIgICgweDgwICsgKHNwMiAmIDB4M2YpKQorCQkgKgorCQkgKiAg Tm90ZSB0aGF0IDB4MTAwMDAgbXVzdCBiZSBzdWJ0cmFjdGVkIGZpcnN0LiAgVGhlIGNvZGUgYmVs b3cKKwkJICogIGF2b2lkcyB0aGUgc3AxLCBzcDIgdGVtcG9yYXJpZXMgd2hpY2ggc2F2ZXMgYXJv dW5kIDIwIGJ5dGVzCisJCSAqICBvZiBjb2RlLgorCQkgKi8KKworCQl4IC09IDB4MTAwMDBVTDsK KworCQlvdXRbMF0gPSAoZHVrX3VpbnQ4X3QpICgweGVkKTsKKwkJb3V0WzFdID0gKGR1a191aW50 OF90KSAoMHhhMCArICgoeCA+PiAxNikgJiAweDBmKSk7CisJCW91dFsyXSA9IChkdWtfdWludDhf dCkgKDB4ODAgKyAoKHggPj4gMTApICYgMHgzZikpOworCQlvdXRbM10gPSAoZHVrX3VpbnQ4X3Qp ICgweGVkKTsKKwkJb3V0WzRdID0gKGR1a191aW50OF90KSAoMHhiMCArICgoeCA+PiA2KSAmIDB4 MGYpKTsKKwkJb3V0WzVdID0gKGR1a191aW50OF90KSAoMHg4MCArICh4ICYgMHgzZikpOworCQls ZW4gPSA2OworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qIERlY29kZSBoZWxwZXIuICBSZXR1 cm4gemVybyBvbiBlcnJvci4gKi8KK0RVS19JTlRFUk5BTCBkdWtfc21hbGxfaW50X3QgZHVrX3Vu aWNvZGVfZGVjb2RlX3h1dGY4KGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGR1a191aW50OF90ICoq cHRyLCBjb25zdCBkdWtfdWludDhfdCAqcHRyX3N0YXJ0LCBjb25zdCBkdWtfdWludDhfdCAqcHRy X2VuZCwgZHVrX3Vjb2RlcG9pbnRfdCAqb3V0X2NwKSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7 CisJZHVrX3VpbnQzMl90IHJlczsKKwlkdWtfdWludF9mYXN0OF90IGNoOworCWR1a19zbWFsbF9p bnRfdCBuOworCisJRFVLX1VOUkVGKHRocik7CisKKwlwID0gKnB0cjsKKwlpZiAocCA8IHB0cl9z dGFydCB8fCBwID49IHB0cl9lbmQpIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qCisJICogIFVU Ri04IGRlY29kZXIgd2hpY2ggYWNjZXB0cyBsb25nZXIgdGhhbiBzdGFuZGFyZCBieXRlIHNlcXVl bmNlcy4KKwkgKiAgVGhpcyBhbGxvd3MgZnVsbCAzMi1iaXQgY29kZSBwb2ludHMgdG8gYmUgdXNl ZC4KKwkgKi8KKworCWNoID0gKGR1a191aW50X2Zhc3Q4X3QpICgqcCsrKTsKKwlpZiAoY2ggPCAw eDgwKSB7CisJCS8qIDB4eHggeHh4eCAgIFs3IGJpdHNdICovCisJCXJlcyA9IChkdWtfdWludDMy X3QpIChjaCAmIDB4N2YpOworCQluID0gMDsKKwl9IGVsc2UgaWYgKGNoIDwgMHhjMCkgeworCQkv KiAxMHh4IHh4eHggLT4gaW52YWxpZCAqLworCQlnb3RvIGZhaWw7CisJfSBlbHNlIGlmIChjaCA8 IDB4ZTApIHsKKwkJLyogMTEweCB4eHh4ICAgMTB4eCB4eHh4ICAgWzExIGJpdHNdICovCisJCXJl cyA9IChkdWtfdWludDMyX3QpIChjaCAmIDB4MWYpOworCQluID0gMTsKKwl9IGVsc2UgaWYgKGNo IDwgMHhmMCkgeworCQkvKiAxMTEwIHh4eHggICAxMHh4IHh4eHggICAxMHh4IHh4eHggICBbMTYg Yml0c10gKi8KKwkJcmVzID0gKGR1a191aW50MzJfdCkgKGNoICYgMHgwZik7CisJCW4gPSAyOwor CX0gZWxzZSBpZiAoY2ggPCAweGY4KSB7CisJCS8qIDExMTEgMHh4eCAgIDEweHggeHh4eCAgIDEw eHggeHh4eCAgIDEweHggeHh4eCAgIFsyMSBiaXRzXSAqLworCQlyZXMgPSAoZHVrX3VpbnQzMl90 KSAoY2ggJiAweDA3KTsKKwkJbiA9IDM7CisJfSBlbHNlIGlmIChjaCA8IDB4ZmMpIHsKKwkJLyog MTExMSAxMHh4ICAgMTB4eCB4eHh4ICAgMTB4eCB4eHh4ICAgMTB4eCB4eHh4ICAgMTB4eCB4eHh4 ICAgWzI2IGJpdHNdICovCisJCXJlcyA9IChkdWtfdWludDMyX3QpIChjaCAmIDB4MDMpOworCQlu ID0gNDsKKwl9IGVsc2UgaWYgKGNoIDwgMHhmZSkgeworCQkvKiAxMTExIDExMHggICAxMHh4IHh4 eHggICAxMHh4IHh4eHggICAxMHh4IHh4eHggICAxMHh4IHh4eHggICAxMHh4IHh4eHggICBbMzEg Yml0c10gKi8KKwkJcmVzID0gKGR1a191aW50MzJfdCkgKGNoICYgMHgwMSk7CisJCW4gPSA1Owor CX0gZWxzZSBpZiAoY2ggPCAweGZmKSB7CisJCS8qIDExMTEgMTExMCAgIDEweHggeHh4eCAgIDEw eHggeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAg IFszNiBiaXRzXSAqLworCQlyZXMgPSAoZHVrX3VpbnQzMl90KSAoMCk7CisJCW4gPSA2OworCX0g ZWxzZSB7CisJCS8qIDgtYnl0ZSBmb3JtYXQgY291bGQgYmU6CisJCSAqIDExMTEgMTExMSAgIDEw eHggeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAg IDEweHggeHh4eCAgIDEweHggeHh4eCAgIFs0MSBiaXRzXQorCQkgKgorCQkgKiBIb3dldmVyLCB0 aGlzIGZvcm1hdCB3b3VsZCBub3QgaGF2ZSBhIHplcm8gYml0IGZvbGxvd2luZyB0aGUKKwkJICog bGVhZGluZyBvbmUgYml0cyBhbmQgd291bGQgbm90IGFsbG93IDB4RkYgdG8gYmUgdXNlZCBhcyBh bgorCQkgKiAiaW52YWxpZCB4dXRmLTgiIG1hcmtlciBmb3IgaW50ZXJuYWwga2V5cy4gIEZ1cnRo ZXIsIDgtYnl0ZQorCQkgKiBlbmNvZGluZ3MgKHVwIHRvIDQxIGJpdCBjb2RlIHBvaW50cykgYXJl IG5vdCBjdXJyZW50bHkgbmVlZGVkLgorCQkgKi8KKwkJZ290byBmYWlsOworCX0KKworCURVS19B U1NFUlQocCA+PSBwdHJfc3RhcnQpOyAgLyogdmVyaWZpZWQgYXQgYmVnaW5uaW5nICovCisJaWYg KHAgKyBuID4gcHRyX2VuZCkgeworCQkvKiBjaGVjayBwb2ludGVyIGF0IGVuZCAqLworCQlnb3Rv IGZhaWw7CisJfQorCisJd2hpbGUgKG4gPiAwKSB7CisJCURVS19BU1NFUlQocCA+PSBwdHJfc3Rh cnQgJiYgcCA8IHB0cl9lbmQpOworCQljaCA9IChkdWtfdWludF9mYXN0OF90KSAoKnArKyk7Cisj aWYgMAorCQlpZiAoY2ggJiAweGMwICE9IDB4ODApIHsKKwkJCS8qIG5vdCBhIGNvbnRpbnVhdGlv biBieXRlICovCisJCQlwLS07CisJCQkqcHRyID0gcDsKKwkJCSpvdXRfY3AgPSBEVUtfVU5JQ09E RV9DUF9SRVBMQUNFTUVOVF9DSEFSQUNURVI7CisJCQlyZXR1cm4gMTsKKwkJfQorI2VuZGlmCisJ CXJlcyA9IChyZXMgPDwgNikgKyAoZHVrX3VpbnQzMl90KSAoY2ggJiAweDNmKTsKKwkJbi0tOwor CX0KKworCSpwdHIgPSBwOworCSpvdXRfY3AgPSByZXM7CisJcmV0dXJuIDE7CisKKyBmYWlsOgor CXJldHVybiAwOworfQorCisvKiB1c2VkIGJ5IGUuZy4gZHVrX3JlZ2V4cF9leGVjdXRvci5jLCBz dHJpbmcgYnVpbHQtaW5zICovCitEVUtfSU5URVJOQUwgZHVrX3Vjb2RlcG9pbnRfdCBkdWtfdW5p Y29kZV9kZWNvZGVfeHV0ZjhfY2hlY2tlZChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBkdWtfdWlu dDhfdCAqKnB0ciwgY29uc3QgZHVrX3VpbnQ4X3QgKnB0cl9zdGFydCwgY29uc3QgZHVrX3VpbnQ4 X3QgKnB0cl9lbmQpIHsKKwlkdWtfdWNvZGVwb2ludF90IGNwOworCisJaWYgKGR1a191bmljb2Rl X2RlY29kZV94dXRmOCh0aHIsIHB0ciwgcHRyX3N0YXJ0LCBwdHJfZW5kLCAmY3ApKSB7CisJCXJl dHVybiBjcDsKKwl9CisJRFVLX0VSUk9SX0lOVEVSTkFMKHRocik7CisJRFVLX1dPX05PUkVUVVJO KHJldHVybiAwOyk7Cit9CisKKy8qIENvbXB1dGUgKGV4dGVuZGVkKSB1dGYtOCBsZW5ndGggd2l0 aG91dCBjb2RlcG9pbnQgZW5jb2RpbmcgdmFsaWRhdGlvbiwKKyAqIHVzZWQgZm9yIHN0cmluZyBp bnRlcm5pbmcuCisgKgorICogTk9URTogVGhpcyBhbGdvcml0aG0gaXMgcGVyZm9ybWFuY2UgY3Jp dGljYWwsIG1vcmUgc28gdGhhbiBzdHJpbmcgaGFzaGluZworICogaW4gc29tZSBjYXNlcy4gIEl0 IGlzIG5lZWRlZCB3aGVuIGludGVybmluZyBhIHN0cmluZyBhbmQgbmVlZHMgdG8gc2NhbgorICog ZXZlcnkgYnl0ZSBvZiB0aGUgc3RyaW5nIHdpdGggbm8gc2tpcHBpbmcuICBIYXZpbmcgYW4gQVND SUkgZmFzdCBwYXRoCisgKiBpcyB1c2VmdWwgaWYgcG9zc2libGUgaW4gdGhlIGFsZ29yaXRobS4g IFRoZSBjdXJyZW50IGFsZ29yaXRobXMgd2VyZQorICogY2hvc2VuIGZyb20gc2V2ZXJhbCB2YXJp YW50cywgYmFzZWQgb24geDY0IGdjYyAtTzIgdGVzdGluZy4gIFNlZToKKyAqIGh0dHBzOi8vZ2l0 aHViLmNvbS9zdmFhcmFsYS9kdWt0YXBlL3B1bGwvNDIyCisgKgorICogTk9URTogbXVzdCBtYXRj aCB0b29scy9kdWt1dGlsLnB5OmR1a191bmljb2RlX3VudmFsaWRhdGVkX3V0ZjhfbGVuZ3RoKCku CisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKy8qIFNtYWxsIHZhcmlh bnQ7IHJvdWdobHkgMTUwIGJ5dGVzIHNtYWxsZXIgdGhhbiB0aGUgZmFzdCB2YXJpYW50LiAqLwor RFVLX0lOVEVSTkFMIGR1a19zaXplX3QgZHVrX3VuaWNvZGVfdW52YWxpZGF0ZWRfdXRmOF9sZW5n dGgoY29uc3QgZHVrX3VpbnQ4X3QgKmRhdGEsIGR1a19zaXplX3QgYmxlbikgeworCWNvbnN0IGR1 a191aW50OF90ICpwOworCWNvbnN0IGR1a191aW50OF90ICpwX2VuZDsKKwlkdWtfc2l6ZV90IG5j b250OworCWR1a19zaXplX3QgY2xlbjsKKworCXAgPSBkYXRhOworCXBfZW5kID0gZGF0YSArIGJs ZW47CisJbmNvbnQgPSAwOworCXdoaWxlIChwICE9IHBfZW5kKSB7CisJCWR1a191aW50OF90IHg7 CisJCXggPSAqcCsrOworCQlpZiAoRFVLX1VOTElLRUxZKHggPj0gMHg4MCAmJiB4IDw9IDB4YmYp KSB7CisJCQluY29udCsrOworCQl9CisJfQorCisJRFVLX0FTU0VSVChuY29udCA8PSBibGVuKTsK KwljbGVuID0gYmxlbiAtIG5jb250OworCURVS19BU1NFUlQoY2xlbiA8PSBibGVuKTsKKwlyZXR1 cm4gY2xlbjsKK30KKyNlbHNlICAvKiBEVUtfVVNFX1BSRUZFUl9TSVpFICovCisvKiBUaGlzIHNl ZW1zIGxpa2UgYSBnb29kIG92ZXJhbGwgYXBwcm9hY2guICBGYXN0IHBhdGggZm9yIEFTQ0lJIGlu IDQgYnl0ZQorICogYmxvY2tzLgorICovCitEVUtfSU5URVJOQUwgZHVrX3NpemVfdCBkdWtfdW5p Y29kZV91bnZhbGlkYXRlZF91dGY4X2xlbmd0aChjb25zdCBkdWtfdWludDhfdCAqZGF0YSwgZHVr X3NpemVfdCBibGVuKSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisJY29uc3QgZHVrX3VpbnQ4 X3QgKnBfZW5kOworCWNvbnN0IGR1a191aW50MzJfdCAqcDMyX2VuZDsKKwljb25zdCBkdWtfdWlu dDMyX3QgKnAzMjsKKwlkdWtfc2l6ZV90IG5jb250OworCWR1a19zaXplX3QgY2xlbjsKKworCW5j b250ID0gMDsgIC8qIG51bWJlciBvZiBjb250aW51YXRpb24gKG5vbi1pbml0aWFsKSBieXRlcyBp biBbMHg4MCwweGJmXSAqLworCXAgPSBkYXRhOworCXBfZW5kID0gZGF0YSArIGJsZW47CisJaWYg KGJsZW4gPCAxNikgeworCQlnb3RvIHNraXBfZmFzdHBhdGg7CisJfQorCisJLyogQWxpZ24gJ3An IHRvIDQ7IHRoZSBpbnB1dCBkYXRhIG1heSBoYXZlIGFyYml0cmFyeSBhbGlnbm1lbnQuCisJICog RW5kIG9mIHN0cmluZyBjaGVjayBub3QgbmVlZGVkIGJlY2F1c2UgYmxlbiA+PSAxNi4KKwkgKi8K Kwl3aGlsZSAoKChkdWtfc2l6ZV90KSAoY29uc3Qgdm9pZCAqKSBwKSAmIDB4MDNVKSB7CisJCWR1 a191aW50OF90IHg7CisJCXggPSAqcCsrOworCQlpZiAoRFVLX1VOTElLRUxZKHggPj0gMHg4MCAm JiB4IDw9IDB4YmYpKSB7CisJCQluY29udCsrOworCQl9CisJfQorCisJLyogRnVsbCwgYWxpZ25l ZCA0LWJ5dGUgcmVhZHMuICovCisJcDMyX2VuZCA9IChjb25zdCBkdWtfdWludDMyX3QgKikgKGNv bnN0IHZvaWQgKikgKHAgKyAoKGR1a19zaXplX3QpIChwX2VuZCAtIHApICYgKGR1a19zaXplX3Qp ICh+MHgwMykpKTsKKwlwMzIgPSAoY29uc3QgZHVrX3VpbnQzMl90ICopIChjb25zdCB2b2lkICop IHA7CisJd2hpbGUgKHAzMiAhPSAoY29uc3QgZHVrX3VpbnQzMl90ICopIHAzMl9lbmQpIHsKKwkJ ZHVrX3VpbnQzMl90IHg7CisJCXggPSAqcDMyKys7CisJCWlmIChEVUtfTElLRUxZKCh4ICYgMHg4 MDgwODA4MFVMKSA9PSAwKSkgeworCQkJOyAgLyogQVNDSUkgZmFzdCBwYXRoICovCisJCX0gZWxz ZSB7CisJCQkvKiBGbGlwIGhpZ2hlc3QgYml0IG9mIGVhY2ggYnl0ZSB3aGljaCBjaGFuZ2VzCisJ CQkgKiB0aGUgYml0IHBhdHRlcm4gMTB4eHh4eHggaW50byAwMHh4eHh4eCB3aGljaAorCQkJICog YWxsb3dzIGFuIGVhc3kgYml0IG1hc2sgdGVzdC4KKwkJCSAqLworCQkJeCBePSAweDgwODA4MDgw VUw7CisJCQlpZiAoRFVLX1VOTElLRUxZKCEoeCAmIDB4YzAwMDAwMDBVTCkpKSB7CisJCQkJbmNv bnQrKzsKKwkJCX0KKwkJCWlmIChEVUtfVU5MSUtFTFkoISh4ICYgMHgwMGMwMDAwMFVMKSkpIHsK KwkJCQluY29udCsrOworCQkJfQorCQkJaWYgKERVS19VTkxJS0VMWSghKHggJiAweDAwMDBjMDAw VUwpKSkgeworCQkJCW5jb250Kys7CisJCQl9CisJCQlpZiAoRFVLX1VOTElLRUxZKCEoeCAmIDB4 MDAwMDAwYzBVTCkpKSB7CisJCQkJbmNvbnQrKzsKKwkJCX0KKwkJfQorCX0KKwlwID0gKGNvbnN0 IGR1a191aW50OF90ICopIHAzMjsKKwkvKiBGYWxsIHRocm91Z2ggdG8gaGFuZGxlIHRoZSByZXN0 LiAqLworCisgc2tpcF9mYXN0cGF0aDoKKwl3aGlsZSAocCAhPSBwX2VuZCkgeworCQlkdWtfdWlu dDhfdCB4OworCQl4ID0gKnArKzsKKwkJaWYgKERVS19VTkxJS0VMWSh4ID49IDB4ODAgJiYgeCA8 PSAweGJmKSkgeworCQkJbmNvbnQrKzsKKwkJfQorCX0KKworCURVS19BU1NFUlQobmNvbnQgPD0g Ymxlbik7CisJY2xlbiA9IGJsZW4gLSBuY29udDsKKwlEVUtfQVNTRVJUKGNsZW4gPD0gYmxlbik7 CisJcmV0dXJuIGNsZW47Cit9CisjZW5kaWYgIC8qIERVS19VU0VfUFJFRkVSX1NJWkUgKi8KKwor LyoKKyAqICBVbmljb2RlIHJhbmdlIG1hdGNoZXIKKyAqCisgKiAgTWF0Y2hlcyBhIGNvZGVwb2lu dCBhZ2FpbnN0IGEgcGFja2VkIGJpdHN0cmVhbSBvZiBjaGFyYWN0ZXIgcmFuZ2VzLgorICogIFVz ZWQgZm9yIHNsb3cgcGF0aCBVbmljb2RlIG1hdGNoaW5nLgorICovCisKKy8qIE11c3QgbWF0Y2gg dG9vbHMvZXh0cmFjdF9jaGFycy5weSwgZ2VuZXJhdGVfbWF0Y2hfdGFibGUzKCkuICovCitEVUtf TE9DQUwgZHVrX3VpbnQzMl90IGR1a19fdW5pX2RlY29kZV92YWx1ZShkdWtfYml0ZGVjb2Rlcl9j dHggKmJkX2N0eCkgeworCWR1a191aW50MzJfdCB0OworCisJdCA9IChkdWtfdWludDMyX3QpIGR1 a19iZF9kZWNvZGUoYmRfY3R4LCA0KTsKKwlpZiAodCA8PSAweDBlVSkgeworCQlyZXR1cm4gdDsK Kwl9CisJdCA9IChkdWtfdWludDMyX3QpIGR1a19iZF9kZWNvZGUoYmRfY3R4LCA4KTsKKwlpZiAo dCA8PSAweGZkVSkgeworCQlyZXR1cm4gdCArIDB4MGY7CisJfQorCWlmICh0ID09IDB4ZmVVKSB7 CisJCXQgPSAoZHVrX3VpbnQzMl90KSBkdWtfYmRfZGVjb2RlKGJkX2N0eCwgMTIpOworCQlyZXR1 cm4gdCArIDB4MGZVICsgMHhmZVU7CisJfSBlbHNlIHsKKwkJdCA9IChkdWtfdWludDMyX3QpIGR1 a19iZF9kZWNvZGUoYmRfY3R4LCAyNCk7CisJCXJldHVybiB0ICsgMHgwZlUgKyAweGZlVSArIDB4 MTAwMFVMOworCX0KK30KKworRFVLX0xPQ0FMIGR1a19zbWFsbF9pbnRfdCBkdWtfX3VuaV9yYW5n ZV9tYXRjaChjb25zdCBkdWtfdWludDhfdCAqdW5pdGFiLCBkdWtfc2l6ZV90IHVuaWxlbiwgZHVr X2NvZGVwb2ludF90IGNwKSB7CisJZHVrX2JpdGRlY29kZXJfY3R4IGJkX2N0eDsKKwlkdWtfY29k ZXBvaW50X3QgcHJldl9yZTsKKworCWR1a19tZW16ZXJvKCZiZF9jdHgsIHNpemVvZihiZF9jdHgp KTsKKwliZF9jdHguZGF0YSA9IChjb25zdCBkdWtfdWludDhfdCAqKSB1bml0YWI7CisJYmRfY3R4 Lmxlbmd0aCA9IChkdWtfc2l6ZV90KSB1bmlsZW47CisKKwlwcmV2X3JlID0gMDsKKwlmb3IgKDs7 KSB7CisJCWR1a19jb2RlcG9pbnRfdCByMSwgcjI7CisJCXIxID0gKGR1a19jb2RlcG9pbnRfdCkg ZHVrX191bmlfZGVjb2RlX3ZhbHVlKCZiZF9jdHgpOworCQlpZiAocjEgPT0gMCkgeworCQkJYnJl YWs7CisJCX0KKwkJcjIgPSAoZHVrX2NvZGVwb2ludF90KSBkdWtfX3VuaV9kZWNvZGVfdmFsdWUo JmJkX2N0eCk7CisKKwkJcjEgPSBwcmV2X3JlICsgcjE7CisJCXIyID0gcjEgKyByMjsKKwkJcHJl dl9yZSA9IHIyOworCisJCS8qIFtyMSxyMl0gaXMgdGhlIHJhbmdlICovCisKKwkJRFVLX0RERChE VUtfREREUFJJTlQoImR1a19fdW5pX3JhbmdlX21hdGNoOiBjcD0lMDZseCByYW5nZT1bMHglMDZs eCwweCUwNmx4XSIsCisJCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBjcCwg KHVuc2lnbmVkIGxvbmcpIHIxLCAodW5zaWduZWQgbG9uZykgcjIpKTsKKwkJaWYgKGNwID49IHIx ICYmIGNwIDw9IHIyKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQor CisvKgorICogICJXaGl0ZVNwYWNlIiBwcm9kdWN0aW9uIGNoZWNrLgorICovCisKK0RVS19JTlRF Uk5BTCBkdWtfc21hbGxfaW50X3QgZHVrX3VuaWNvZGVfaXNfd2hpdGVzcGFjZShkdWtfY29kZXBv aW50X3QgY3ApIHsKKwkvKgorCSAqICBFNSBTZWN0aW9uIDcuMiBzcGVjaWZpZXMgc2l4IGNoYXJh Y3RlcnMgc3BlY2lmaWNhbGx5IGFzCisJICogIHdoaXRlIHNwYWNlOgorCSAqCisJICogICAgMDAw OTs8Y29udHJvbD47Q2M7MDtTOzs7OztOO0NIQVJBQ1RFUiBUQUJVTEFUSU9OOzs7OworCSAqICAg IDAwMEI7PGNvbnRyb2w+O0NjOzA7Uzs7Ozs7TjtMSU5FIFRBQlVMQVRJT047Ozs7CisJICogICAg MDAwQzs8Y29udHJvbD47Q2M7MDtXUzs7Ozs7TjtGT1JNIEZFRUQgKEZGKTs7OzsKKwkgKiAgICAw MDIwO1NQQUNFO1pzOzA7V1M7Ozs7O047Ozs7OworCSAqICAgIDAwQTA7Tk8tQlJFQUsgU1BBQ0U7 WnM7MDtDUzs8bm9CcmVhaz4gMDAyMDs7OztOO05PTi1CUkVBS0lORyBTUEFDRTs7OzsKKwkgKiAg ICBGRUZGO1pFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0U7Q2Y7MDtCTjs7Ozs7TjtCWVRFIE9SREVS IE1BUks7Ozs7CisJICoKKwkgKiAgSXQgYWxzbyBzcGVjaWZpZXMgYW55IFVuaWNvZGUgY2F0ZWdv cnkgJ1pzJyBjaGFyYWN0ZXJzIGFzIHdoaXRlCisJICogIHNwYWNlLiAgVGhlc2UgY2FuIGJlIGV4 dHJhY3RlZCB3aXRoIHRoZSAidG9vbHMvZXh0cmFjdF9jaGFycy5weSIgc2NyaXB0LgorCSAqICBD dXJyZW50IHJlc3VsdDoKKwkgKgorCSAqICAgIFJBVyBPVVRQVVQ6CisJICogICAgPT09PT09PT09 PT0KKwkgKiAgICAwMDIwO1NQQUNFO1pzOzA7V1M7Ozs7O047Ozs7OworCSAqICAgIDAwQTA7Tk8t QlJFQUsgU1BBQ0U7WnM7MDtDUzs8bm9CcmVhaz4gMDAyMDs7OztOO05PTi1CUkVBS0lORyBTUEFD RTs7OzsKKwkgKiAgICAxNjgwO09HSEFNIFNQQUNFIE1BUks7WnM7MDtXUzs7Ozs7Tjs7Ozs7CisJ ICogICAgMTgwRTtNT05HT0xJQU4gVk9XRUwgU0VQQVJBVE9SO1pzOzA7V1M7Ozs7O047Ozs7Owor CSAqICAgIDIwMDA7RU4gUVVBRDtaczswO1dTOzIwMDI7Ozs7Tjs7Ozs7CisJICogICAgMjAwMTtF TSBRVUFEO1pzOzA7V1M7MjAwMzs7OztOOzs7OzsKKwkgKiAgICAyMDAyO0VOIFNQQUNFO1pzOzA7 V1M7PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKwkgKiAgICAyMDAzO0VNIFNQQUNFO1pzOzA7V1M7 PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKwkgKiAgICAyMDA0O1RIUkVFLVBFUi1FTSBTUEFDRTta czswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisJICogICAgMjAwNTtGT1VSLVBFUi1FTSBT UEFDRTtaczswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisJICogICAgMjAwNjtTSVgtUEVS LUVNIFNQQUNFO1pzOzA7V1M7PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKwkgKiAgICAyMDA3O0ZJ R1VSRSBTUEFDRTtaczswO1dTOzxub0JyZWFrPiAwMDIwOzs7O047Ozs7OworCSAqICAgIDIwMDg7 UFVOQ1RVQVRJT04gU1BBQ0U7WnM7MDtXUzs8Y29tcGF0PiAwMDIwOzs7O047Ozs7OworCSAqICAg IDIwMDk7VEhJTiBTUEFDRTtaczswO1dTOzxjb21wYXQ+IDAwMjA7Ozs7Tjs7Ozs7CisJICogICAg MjAwQTtIQUlSIFNQQUNFO1pzOzA7V1M7PGNvbXBhdD4gMDAyMDs7OztOOzs7OzsKKwkgKiAgICAy MDJGO05BUlJPVyBOTy1CUkVBSyBTUEFDRTtaczswO0NTOzxub0JyZWFrPiAwMDIwOzs7O047Ozs7 OworCSAqICAgIDIwNUY7TUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRTtaczswO1dTOzxjb21wYXQ+ IDAwMjA7Ozs7Tjs7Ozs7CisJICogICAgMzAwMDtJREVPR1JBUEhJQyBTUEFDRTtaczswO1dTOzx3 aWRlPiAwMDIwOzs7O047Ozs7OworCSAqCisJICogICAgUkFOR0VTOgorCSAqICAgID09PT09PT0K KwkgKiAgICAweDAwMjAKKwkgKiAgICAweDAwYTAKKwkgKiAgICAweDE2ODAKKwkgKiAgICAweDE4 MGUKKwkgKiAgICAweDIwMDAgLi4uIDB4MjAwYQorCSAqICAgIDB4MjAyZgorCSAqICAgIDB4MjA1 ZgorCSAqICAgIDB4MzAwMAorCSAqCisJICogIEEgbWFudWFsIGRlY29kZXIgKGJlbG93KSBpcyBw cm9iYWJseSBtb3N0IGNvbXBhY3QgZm9yIHRoaXMuCisJICovCisKKwlkdWtfdWludF9mYXN0OF90 IGxvOworCWR1a191aW50X2Zhc3QzMl90IGhpOworCisJLyogY3AgPT0gLTEgKEVPRikgbmV2ZXIg bWF0Y2hlcyBhbmQgY2F1c2VzIHJldHVybiB2YWx1ZSAwICovCisKKwlsbyA9IChkdWtfdWludF9m YXN0OF90KSAoY3AgJiAweGZmKTsKKwloaSA9IChkdWtfdWludF9mYXN0MzJfdCkgKGNwID4+IDgp OyAgLyogZG9lcyBub3QgZml0IGludG8gYW4gdWNoYXIgKi8KKworCWlmIChoaSA9PSAweDAwMDBV TCkgeworCQlpZiAobG8gPT0gMHgwOVUgfHwgbG8gPT0gMHgwYlUgfHwgbG8gPT0gMHgwY1UgfHwK KwkJICAgIGxvID09IDB4MjBVIHx8IGxvID09IDB4YTBVKSB7CisJCQlyZXR1cm4gMTsKKwkJfQor CX0gZWxzZSBpZiAoaGkgPT0gMHgwMDIwVUwpIHsKKwkJaWYgKGxvIDw9IDB4MGFVIHx8IGxvID09 IDB4MmZVIHx8IGxvID09IDB4NWZVKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSBpZiAo Y3AgPT0gMHgxNjgwTCB8fCBjcCA9PSAweDE4MGVMIHx8IGNwID09IDB4MzAwMEwgfHwKKwkgICAg ICAgICAgIGNwID09IDB4ZmVmZkwpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKKy8qCisgKiAgIkxpbmVUZXJtaW5hdG9yIiBwcm9kdWN0aW9uIGNoZWNrLgorICovCisKK0RV S19JTlRFUk5BTCBkdWtfc21hbGxfaW50X3QgZHVrX3VuaWNvZGVfaXNfbGluZV90ZXJtaW5hdG9y KGR1a19jb2RlcG9pbnRfdCBjcCkgeworCS8qCisJICogIEU1IFNlY3Rpb24gNy4zCisJICoKKwkg KiAgQSBMaW5lVGVybWluYXRvclNlcXVlbmNlIGVzc2VudGlhbGx5IG1lcmdlcyA8Q1I+IDxMRj4g c2VxdWVuY2VzCisJICogIGludG8gYSBzaW5nbGUgbGluZSB0ZXJtaW5hdG9yLiAgVGhpcyBtdXN0 IGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlci4KKwkgKi8KKworCWlmIChjcCA9PSAweDAwMGFMIHx8 IGNwID09IDB4MDAwZEwgfHwgY3AgPT0gMHgyMDI4TCB8fAorCSAgICBjcCA9PSAweDIwMjlMKSB7 CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogICJJZGVudGlmaWVy U3RhcnQiIHByb2R1Y3Rpb24gY2hlY2suCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19zbWFsbF9p bnRfdCBkdWtfdW5pY29kZV9pc19pZGVudGlmaWVyX3N0YXJ0KGR1a19jb2RlcG9pbnRfdCBjcCkg eworCS8qCisJICogIEU1IFNlY3Rpb24gNy42OgorCSAqCisJICogICAgSWRlbnRpZmllclN0YXJ0 OgorCSAqICAgICAgVW5pY29kZUxldHRlcgorCSAqICAgICAgJAorCSAqICAgICAgXworCSAqICAg ICAgXCBVbmljb2RlRXNjYXBlU2VxdWVuY2UKKwkgKgorCSAqICBJZGVudGlmaWVyU3RhcnQgcHJv ZHVjdGlvbiBoYXMgb25lIG11bHRpLWNoYXJhY3RlciBwcm9kdWN0aW9uOgorCSAqCisJICogICAg XCBVbmljb2RlRXNjYXBlU2VxdWVuY2UKKwkgKgorCSAqICBUaGUgJ1wnIGNoYXJhY3RlciBpcyAt bm90LSBtYXRjaGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBSYXRoZXIsIHRoZSBjYWxsZXIKKwkgKiAg c2hvdWxkIGRlY29kZSB0aGUgZXNjYXBlIGFuZCB0aGVuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBj aGVjayB3aGV0aGVyIHRoZQorCSAqICBkZWNvZGVkIGNoYXJhY3RlciBpcyBhY2NlcHRhYmxlIChz ZWUgZGlzY3Vzc2lvbiBpbiBFNSBTZWN0aW9uIDcuNikuCisJICoKKwkgKiAgVGhlICJVbmljb2Rl TGV0dGVyIiBhbHRlcm5hdGl2ZSBvZiB0aGUgcHJvZHVjdGlvbiBhbGxvd3MgbGV0dGVycworCSAq ICBmcm9tIHZhcmlvdXMgVW5pY29kZSBjYXRlZ29yaWVzLiAgVGhlc2UgY2FuIGJlIGV4dHJhY3Rl ZCB3aXRoIHRoZQorCSAqICAidG9vbHMvZXh0cmFjdF9jaGFycy5weSIgc2NyaXB0LgorCSAqCisJ ICogIEJlY2F1c2UgdGhlIHJlc3VsdCBoYXMgaHVuZHJlZHMgb2YgVW5pY29kZSBjb2RlcG9pbnQg cmFuZ2VzLCBtYXRjaGluZworCSAqICBmb3IgYW55IHZhbHVlcyA+PSAweDgwIGFyZSBkb25lIHVz aW5nIGEgdmVyeSBzbG93IHJhbmdlLWJ5LXJhbmdlIHNjYW4KKwkgKiAgYW5kIGEgcGFja2VkIHJh bmdlIGZvcm1hdC4KKwkgKgorCSAqICBUaGUgQVNDSUkgcG9ydGlvbiAoY29kZXBvaW50cyAweDAw IC4uLiAweDdmKSBpcyBmYXN0LXBhdGhlZCBiZWxvdyBiZWNhdXNlCisJICogIGl0IG1hdHRlcnMg dGhlIG1vc3QuICBUaGUgQVNDSUkgcmVsYXRlZCByYW5nZXMgb2YgSWRlbnRpZmllclN0YXJ0IGFy ZToKKwkgKgorCSAqICAgIDB4MDA0MSAuLi4gMHgwMDVhICAgICBbJ0EnIC4uLiAnWiddCisJICog ICAgMHgwMDYxIC4uLiAweDAwN2EgICAgIFsnYScgLi4uICd6J10KKwkgKiAgICAweDAwMjQgICAg ICAgICAgICAgICAgWyckJ10KKwkgKiAgICAweDAwNWYgICAgICAgICAgICAgICAgWydfJ10KKwkg Ki8KKworCS8qIEFTQ0lJIChhbmQgRU9GKSBmYXN0IHBhdGggLS0gcXVpY2sgYWNjZXB0IGFuZCBy ZWplY3QgKi8KKwlpZiAoY3AgPD0gMHg3ZkwpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfSURDSEFS X0ZBU1RQQVRIKQorCQlyZXR1cm4gKGNwID49IDApICYmIChkdWtfaXNfaWRjaGFyX3RhYltjcF0g PiAwKTsKKyNlbHNlCisJCWlmICgoY3AgPj0gJ2EnICYmIGNwIDw9ICd6JykgfHwKKwkJICAgIChj cCA+PSAnQScgJiYgY3AgPD0gJ1onKSB8fAorCQkgICAgY3AgPT0gJ18nIHx8IGNwID09ICckJykg eworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisjZW5kaWYKKwl9CisKKwkvKiBOb24t QVNDSUkgc2xvdyBwYXRoIChyYW5nZS1ieS1yYW5nZSBsaW5lYXIgY29tcGFyaXNvbiksIHZlcnkg c2xvdyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NPVVJDRV9OT05CTVApCisJaWYgKGR1a19f dW5pX3JhbmdlX21hdGNoKGR1a191bmljb2RlX2lkc19ub2EsCisJICAgICAgICAgICAgICAgICAg ICAgICAgIChkdWtfc2l6ZV90KSBzaXplb2YoZHVrX3VuaWNvZGVfaWRzX25vYSksCisJICAgICAg ICAgICAgICAgICAgICAgICAgIChkdWtfY29kZXBvaW50X3QpIGNwKSkgeworCQlyZXR1cm4gMTsK Kwl9CisJcmV0dXJuIDA7CisjZWxzZQorCWlmIChjcCA8IDB4MTAwMDBMKSB7CisJCWlmIChkdWtf X3VuaV9yYW5nZV9tYXRjaChkdWtfdW5pY29kZV9pZHNfbm9hYm1wLAorCQkgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGR1a191bmljb2RlX2lkc19ub2FibXApLAorCQkgICAgICAgICAg ICAgICAgICAgICAgICAgKGR1a19jb2RlcG9pbnRfdCkgY3ApKSB7CisJCQlyZXR1cm4gMTsKKwkJ fQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiB3aXRob3V0IGV4cGxpY2l0IG5vbi1CTVAg c3VwcG9ydCwgYXNzdW1lIG5vbi1CTVAgY2hhcmFjdGVycworCQkgKiBhcmUgYWx3YXlzIGFjY2Vw dGVkIGFzIGlkZW50aWZpZXIgY2hhcmFjdGVycy4KKwkJICovCisJCXJldHVybiAxOworCX0KKyNl bmRpZgorfQorCisvKgorICogICJJZGVudGlmaWVyUGFydCIgcHJvZHVjdGlvbiBjaGVjay4KKyAq LworCitEVUtfSU5URVJOQUwgZHVrX3NtYWxsX2ludF90IGR1a191bmljb2RlX2lzX2lkZW50aWZp ZXJfcGFydChkdWtfY29kZXBvaW50X3QgY3ApIHsKKwkvKgorCSAqICBFNSBTZWN0aW9uIDcuNjoK KwkgKgorCSAqICAgIElkZW50aWZpZXJQYXJ0OgorCSAqICAgICAgSWRlbnRpZmllclN0YXJ0CisJ ICogICAgICBVbmljb2RlQ29tYmluaW5nTWFyaworCSAqICAgICAgVW5pY29kZURpZ2l0CisJICog ICAgICBVbmljb2RlQ29ubmVjdG9yUHVuY3R1YXRpb24KKwkgKiAgICAgIDxaV05KPiAgW1UrMjAw Q10KKwkgKiAgICAgIDxaV0o+ICAgW1UrMjAwRF0KKwkgKgorCSAqICBJZGVudGlmaWVyUGFydCBw cm9kdWN0aW9uIGhhcyBvbmUgbXVsdGktY2hhcmFjdGVyIHByb2R1Y3Rpb24KKwkgKiAgYXMgcGFy dCBvZiBpdHMgSWRlbnRpZmllclN0YXJ0IGFsdGVybmF0aXZlLiAgVGhlICdcJyBjaGFyYWN0ZXIK KwkgKiAgb2YgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIG5vdCBtYXRjaGVkIGhlcmUsIHNlZSBkaXNj dXNzaW9uIGluCisJICogIGR1a191bmljb2RlX2lzX2lkZW50aWZpZXJfc3RhcnQoKS4KKwkgKgor CSAqICBUbyBtYXRjaCBub24tQVNDSUkgY2hhcmFjdGVycyAoY29kZXBvaW50cyA+PSAweDgwKSwg YSB2ZXJ5IHNsb3cKKwkgKiAgbGluZWFyIHJhbmdlLWJ5LXJhbmdlIHNjYW4gaXMgdXNlZC4gIFRo ZSBjb2RlcG9pbnQgaXMgZmlyc3QgY29tcGFyZWQKKwkgKiAgdG8gdGhlIElkZW50aWZpZXJTdGFy dCByYW5nZXMsIGFuZCBpZiBpdCBkb2Vzbid0IG1hdGNoLCB0aGVuIHRvIGEKKwkgKiAgc2V0IGNv bnNpc3Rpbmcgb2YgY29kZSBwb2ludHMgaW4gSWRlbnRpZmllclBhcnQgYnV0IG5vdCBpbgorCSAq ICBJZGVudGlmaWVyU3RhcnQuICBUaGlzIGlzIGRvbmUgdG8ga2VlcCB0aGUgdW5pY29kZSByYW5n ZSBkYXRhIHNtYWxsLAorCSAqICBhdCB0aGUgZXhwZW5zZSBvZiBzcGVlZC4KKwkgKgorCSAqICBU aGUgQVNDSUkgZmFzdCBwYXRoIGNvbnNpc3RzIG9mOgorCSAqCisJICogICAgMHgwMDMwIC4uLiAw eDAwMzkgICAgIFsnMCcgLi4uICc5JywgVW5pY29kZURpZ2l0XQorCSAqICAgIDB4MDA0MSAuLi4g MHgwMDVhICAgICBbJ0EnIC4uLiAnWicsIElkZW50aWZpZXJTdGFydF0KKwkgKiAgICAweDAwNjEg Li4uIDB4MDA3YSAgICAgWydhJyAuLi4gJ3onLCBJZGVudGlmaWVyU3RhcnRdCisJICogICAgMHgw MDI0ICAgICAgICAgICAgICAgIFsnJCcsIElkZW50aWZpZXJTdGFydF0KKwkgKiAgICAweDAwNWYg ICAgICAgICAgICAgICAgWydfJywgSWRlbnRpZmllclN0YXJ0IGFuZAorCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVbmljb2RlQ29ubmVjdG9yUHVuY3R1YXRpb25dCisJICoKKwkg KiAgVW5pY29kZUNvbWJpbmluZ01hcmsgaGFzIG5vIGNvZGUgcG9pbnRzIDw9IDB4N2YuCisJICoK KwkgKiAgVGhlIG1hdGNoaW5nIGNvZGUgcmV1c2VzIHRoZSAiaWRlbnRpZmllciBzdGFydCIgdGFi bGVzLCBhbmQgdGhlbgorCSAqICBjb25zdWx0cyBhIHNlcGFyYXRlIHJhbmdlIHNldCBmb3IgY2hh cmFjdGVycyBpbiAiaWRlbnRpZmllciBwYXJ0IgorCSAqICBidXQgbm90IGluICJpZGVudGlmaWVy IHN0YXJ0Ii4gIFRoZXNlIGNhbiBiZSBleHRyYWN0ZWQgd2l0aCB0aGUKKwkgKiAgInRvb2xzL2V4 dHJhY3RfY2hhcnMucHkiIHNjcmlwdC4KKwkgKgorCSAqICBVbmljb2RlQ29tYmluaW5nTWFyayAt PiBjYXRlZ29yaWVzIE1uLCBNYworCSAqICBVbmljb2RlRGlnaXQgLT4gY2F0ZWdvcmllcyBOZAor CSAqICBVbmljb2RlQ29ubmVjdG9yUHVuY3R1YXRpb24gLT4gY2F0ZWdvcmllcyBQYworCSAqLwor CisJLyogQVNDSUkgKGFuZCBFT0YpIGZhc3QgcGF0aCAtLSBxdWljayBhY2NlcHQgYW5kIHJlamVj dCAqLworCWlmIChjcCA8PSAweDdmTCkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9JRENIQVJfRkFT VFBBVEgpCisJCXJldHVybiAoY3AgPj0gMCkgJiYgKGR1a19pc19pZGNoYXJfdGFiW2NwXSAhPSAw KTsKKyNlbHNlCisJCWlmICgoY3AgPj0gJ2EnICYmIGNwIDw9ICd6JykgfHwKKwkJICAgIChjcCA+ PSAnQScgJiYgY3AgPD0gJ1onKSB8fAorCQkgICAgKGNwID49ICcwJyAmJiBjcCA8PSAnOScpIHx8 CisJCSAgICBjcCA9PSAnXycgfHwgY3AgPT0gJyQnKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCQly ZXR1cm4gMDsKKyNlbmRpZgorCX0KKworCS8qIE5vbi1BU0NJSSBzbG93IHBhdGggKHJhbmdlLWJ5 LXJhbmdlIGxpbmVhciBjb21wYXJpc29uKSwgdmVyeSBzbG93ICovCisKKyNpZiBkZWZpbmVkKERV S19VU0VfU09VUkNFX05PTkJNUCkKKwlpZiAoZHVrX191bmlfcmFuZ2VfbWF0Y2goZHVrX3VuaWNv ZGVfaWRzX25vYSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a191bmljb2Rl X2lkc19ub2EpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX2NvZGVwb2ludF90KSBj cCkgfHwKKwkgICAgZHVrX191bmlfcmFuZ2VfbWF0Y2goZHVrX3VuaWNvZGVfaWRwX21faWRzX25v YSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a191bmljb2RlX2lkcF9tX2lk c19ub2EpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX2NvZGVwb2ludF90KSBjcCkp IHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworI2Vsc2UKKwlpZiAoY3AgPCAweDEwMDAw TCkgeworCQlpZiAoZHVrX191bmlfcmFuZ2VfbWF0Y2goZHVrX3VuaWNvZGVfaWRzX25vYWJtcCwK KwkJICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkdWtfdW5pY29kZV9pZHNfbm9hYm1w KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfY29kZXBvaW50X3QpIGNwKSB8fAor CQkgICAgZHVrX191bmlfcmFuZ2VfbWF0Y2goZHVrX3VuaWNvZGVfaWRwX21faWRzX25vYWJtcCwK KwkJICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkdWtfdW5pY29kZV9pZHBfbV9pZHNf bm9hYm1wKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfY29kZXBvaW50X3QpIGNw KSkgeworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLyogd2l0 aG91dCBleHBsaWNpdCBub24tQk1QIHN1cHBvcnQsIGFzc3VtZSBub24tQk1QIGNoYXJhY3RlcnMK KwkJICogYXJlIGFsd2F5cyBhY2NlcHRlZCBhcyBpZGVudGlmaWVyIGNoYXJhY3RlcnMuCisJCSAq LworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqICBVbmljb2RlIGxldHRlciBj aGVjay4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3NtYWxsX2ludF90IGR1a191bmljb2RlX2lz X2xldHRlcihkdWtfY29kZXBvaW50X3QgY3ApIHsKKwkvKgorCSAqICBVbmljb2RlIGxldHRlciBp cyBub3cgdGFrZW4gdG8gYmUgdGhlIGNhdGVnb3JpZXM6CisJICoKKwkgKiAgICBMdSwgTGwsIEx0 LCBMbSwgTG8KKwkgKgorCSAqICAoTm90IHN1cmUgaWYgdGhpcyBpcyBleGFjdGx5IGNvcnJlY3Qu KQorCSAqCisJICogIFRoZSBBU0NJSSBmYXN0IHBhdGggY29uc2lzdHMgb2Y6CisJICoKKwkgKiAg ICAweDAwNDEgLi4uIDB4MDA1YSAgICAgWydBJyAuLi4gJ1onXQorCSAqICAgIDB4MDA2MSAuLi4g MHgwMDdhICAgICBbJ2EnIC4uLiAneiddCisJICovCisKKwkvKiBBU0NJSSAoYW5kIEVPRikgZmFz dCBwYXRoIC0tIHF1aWNrIGFjY2VwdCBhbmQgcmVqZWN0ICovCisJaWYgKGNwIDw9IDB4N2ZMKSB7 CisJCWlmICgoY3AgPj0gJ2EnICYmIGNwIDw9ICd6JykgfHwKKwkJICAgIChjcCA+PSAnQScgJiYg Y3AgPD0gJ1onKSkgeworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyog Tm9uLUFTQ0lJIHNsb3cgcGF0aCAocmFuZ2UtYnktcmFuZ2UgbGluZWFyIGNvbXBhcmlzb24pLCB2 ZXJ5IHNsb3cgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9TT1VSQ0VfTk9OQk1QKQorCWlmIChk dWtfX3VuaV9yYW5nZV9tYXRjaChkdWtfdW5pY29kZV9pZHNfbm9hLAorCSAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfaWRzX25vYSksCisJICAgICAgICAgICAgICAg ICAgICAgICAgIChkdWtfY29kZXBvaW50X3QpIGNwKSAmJgorCSAgICAhZHVrX191bmlfcmFuZ2Vf bWF0Y2goZHVrX3VuaWNvZGVfaWRzX21fbGV0X25vYSwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihkdWtfdW5pY29kZV9pZHNfbV9sZXRfbm9hKSwKKwkgICAgICAgICAgICAgICAg ICAgICAgICAgIChkdWtfY29kZXBvaW50X3QpIGNwKSkgeworCQlyZXR1cm4gMTsKKwl9CisJcmV0 dXJuIDA7CisjZWxzZQorCWlmIChjcCA8IDB4MTAwMDBMKSB7CisJCWlmIChkdWtfX3VuaV9yYW5n ZV9tYXRjaChkdWtfdW5pY29kZV9pZHNfbm9hYm1wLAorCQkgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKGR1a191bmljb2RlX2lkc19ub2FibXApLAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgKGR1a19jb2RlcG9pbnRfdCkgY3ApICYmCisJCSAgICAhZHVrX191bmlfcmFuZ2VfbWF0 Y2goZHVrX3VuaWNvZGVfaWRzX21fbGV0X25vYWJtcCwKKwkJICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YoZHVrX3VuaWNvZGVfaWRzX21fbGV0X25vYWJtcCksCisJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgKGR1a19jb2RlcG9pbnRfdCkgY3ApKSB7CisJCQlyZXR1cm4gMTsKKwkJ fQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiB3aXRob3V0IGV4cGxpY2l0IG5vbi1CTVAg c3VwcG9ydCwgYXNzdW1lIG5vbi1CTVAgY2hhcmFjdGVycworCQkgKiBhcmUgYWx3YXlzIGFjY2Vw dGVkIGFzIGxldHRlcnMuCisJCSAqLworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKK30KKworLyoK KyAqICBDb21wbGV4IGNhc2UgY29udmVyc2lvbiBoZWxwZXIgd2hpY2ggZGVjb2RlcyBhIGJpdC1w YWNrZWQgY29udmVyc2lvbgorICogIGNvbnRyb2wgc3RyZWFtIGdlbmVyYXRlZCBieSB0b29scy9l eHRyYWN0X2Nhc2Vjb252LnB5LiAgVGhlIGNvbnZlcnNpb24KKyAqICBpcyB2ZXJ5IHNsb3cgYmVj YXVzZSBpdCBydW5zIHRocm91Z2ggdGhlIGNvbnZlcnNpb24gZGF0YSBpbiBhIGxpbmVhcgorICog IGZhc2hpb24gdG8gc2F2ZSBzcGFjZSAod2hpY2ggaXMgd2h5IEFTQ0lJIGNoYXJhY3RlcnMgaGF2 ZSBhIHNwZWNpYWwKKyAqICBmYXN0IHBhdGggYmVmb3JlIGFycml2aW5nIGhlcmUpLgorICoKKyAq ICBUaGUgcGFydGljdWxhciBiaXQgY291bnRzIGV0YyBoYXZlIGJlZW4gZGV0ZXJtaW5lZCBleHBl cmltZW50YWxseSB0bworICogIGJlIHNtYWxsIGJ1dCBzdGlsbCBzdWZmaWNpZW50LCBhbmQgbXVz dCBtYXRjaCB0aGUgUHl0aG9uIHNjcmlwdAorICogICh0b29scy9leHRyYWN0X2Nhc2Vjb252LnB5 KS4KKyAqCisgKiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgY2FzZSBjb252ZXJ0ZWQgY29kZXBv aW50IG9yIC0xIGlmIHRoZSBjb252ZXJzaW9uCisgKiAgcmVzdWx0cyBpbiBtdWx0aXBsZSBjaGFy YWN0ZXJzICh0aGlzIGlzIHVzZWZ1bCBmb3IgcmVnZXhwIENhbm9uaWNhbGl6YXRpb24KKyAqICBv cGVyYXRpb24pLiAgSWYgJ2J1ZicgaXMgbm90IE5VTEwsIHRoZSByZXN1bHQgY29kZXBvaW50KHMp IGFyZSBhbHNvCisgKiAgYXBwZW5kZWQgdG8gdGhlIGhidWZmZXIuCisgKgorICogIENvbnRleHQg YW5kIGxvY2FsZSBzcGVjaWZpYyBydWxlcyBtdXN0IGJlIGNoZWNrZWQgYmVmb3JlIGNvbnN1bHRp bmcKKyAqICB0aGlzIGZ1bmN0aW9uLgorICovCisKK0RVS19MT0NBTAorZHVrX2NvZGVwb2ludF90 IGR1a19fc2xvd19jYXNlX2NvbnZlcnNpb24oZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19idWZ3cml0ZXJfY3R4ICpidywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19jb2RlcG9pbnRfdCBj cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19iaXRkZWNv ZGVyX2N0eCAqYmRfY3R4KSB7CisJZHVrX3NtYWxsX2ludF90IHNraXAgPSAwOworCWR1a19zbWFs bF9pbnRfdCBuOworCWR1a19zbWFsbF9pbnRfdCB0OworCWR1a19zbWFsbF9pbnRfdCBjb3VudDsK KwlkdWtfY29kZXBvaW50X3QgdG1wX2NwOworCWR1a19jb2RlcG9pbnRfdCBzdGFydF9pOworCWR1 a19jb2RlcG9pbnRfdCBzdGFydF9vOworCisJRFVLX0FTU0VSVChiZF9jdHggIT0gTlVMTCk7CisJ RFVLX1VOUkVGKHRocik7CisKKwlEVUtfREREKERVS19ERERQUklOVCgic2xvdyBjYXNlIGNvbnZl cnNpb24gZm9yIGNvZGVwb2ludDogJWxkIiwgKGxvbmcpIGNwKSk7CisKKwkvKiByYW5nZSBjb252 ZXJzaW9uIHdpdGggYSAic2tpcCIgKi8KKwlEVUtfREREKERVS19ERERQUklOVCgiY2hlY2tpbmcg cmFuZ2VzIikpOworCWZvciAoOzspIHsKKwkJc2tpcCsrOworCQluID0gKGR1a19zbWFsbF9pbnRf dCkgZHVrX2JkX2RlY29kZShiZF9jdHgsIDYpOworCQlpZiAobiA9PSAweDNmKSB7CisJCQkvKiBl bmQgbWFya2VyICovCisJCQlicmVhazsKKwkJfQorCQlEVUtfREREKERVS19ERERQUklOVCgic2tp cD0lbGQsIG49JWxkIiwgKGxvbmcpIHNraXAsIChsb25nKSBuKSk7CisKKwkJd2hpbGUgKG4tLSkg eworCQkJc3RhcnRfaSA9IChkdWtfY29kZXBvaW50X3QpIGR1a19iZF9kZWNvZGUoYmRfY3R4LCAx Nik7CisJCQlzdGFydF9vID0gKGR1a19jb2RlcG9pbnRfdCkgZHVrX2JkX2RlY29kZShiZF9jdHgs IDE2KTsKKwkJCWNvdW50ID0gKGR1a19zbWFsbF9pbnRfdCkgZHVrX2JkX2RlY29kZShiZF9jdHgs IDcpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJhbmdlOiBzdGFydF9pPSVsZCwgc3RhcnRf bz0lbGQsIGNvdW50PSVsZCwgc2tpcD0lbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHN0YXJ0X2ksIChsb25nKSBzdGFydF9vLCAobG9uZykgY291bnQsIChsb25nKSBza2lwKSk7 CisKKwkJCWlmIChjcCA+PSBzdGFydF9pKSB7CisJCQkJdG1wX2NwID0gY3AgLSBzdGFydF9pOyAg LyogYWx3YXlzID49IDAgKi8KKwkJCQlpZiAodG1wX2NwIDwgKGR1a19jb2RlcG9pbnRfdCkgY291 bnQgKiAoZHVrX2NvZGVwb2ludF90KSBza2lwICYmCisJCQkJICAgICh0bXBfY3AgJSAoZHVrX2Nv ZGVwb2ludF90KSBza2lwKSA9PSAwKSB7CisJCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJyYW5n ZSBtYXRjaGVzIGlucHV0IGNvZGVwb2ludCIpKTsKKwkJCQkJY3AgPSBzdGFydF9vICsgdG1wX2Nw OworCQkJCQlnb3RvIHNpbmdsZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiAxOjEgY29u dmVyc2lvbiAqLworCW4gPSAoZHVrX3NtYWxsX2ludF90KSBkdWtfYmRfZGVjb2RlKGJkX2N0eCwg Nyk7CisJRFVLX0RERChEVUtfREREUFJJTlQoImNoZWNraW5nIDE6MSBjb252ZXJzaW9ucyAoY291 bnQgJWxkKSIsIChsb25nKSBuKSk7CisJd2hpbGUgKG4tLSkgeworCQlzdGFydF9pID0gKGR1a19j b2RlcG9pbnRfdCkgZHVrX2JkX2RlY29kZShiZF9jdHgsIDE2KTsKKwkJc3RhcnRfbyA9IChkdWtf Y29kZXBvaW50X3QpIGR1a19iZF9kZWNvZGUoYmRfY3R4LCAxNik7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCIxOjEgY29udmVyc2lvbiAlbGQgLT4gJWxkIiwgKGxvbmcpIHN0YXJ0X2ksIChsb25n KSBzdGFydF9vKSk7CisJCWlmIChjcCA9PSBzdGFydF9pKSB7CisJCQlEVUtfREREKERVS19ERERQ UklOVCgiMToxIG1hdGNoZXMgaW5wdXQgY29kZXBvaW50IikpOworCQkJY3AgPSBzdGFydF9vOwor CQkJZ290byBzaW5nbGU7CisJCX0KKwl9CisKKwkvKiBjb21wbGV4LCBtdWx0aWNoYXJhY3RlciBj b252ZXJzaW9uICovCisJbiA9IChkdWtfc21hbGxfaW50X3QpIGR1a19iZF9kZWNvZGUoYmRfY3R4 LCA3KTsKKwlEVUtfREREKERVS19ERERQUklOVCgiY2hlY2tpbmcgMTpuIGNvbnZlcnNpb25zIChj b3VudCAlbGQpIiwgKGxvbmcpIG4pKTsKKwl3aGlsZSAobi0tKSB7CisJCXN0YXJ0X2kgPSAoZHVr X2NvZGVwb2ludF90KSBkdWtfYmRfZGVjb2RlKGJkX2N0eCwgMTYpOworCQl0ID0gKGR1a19zbWFs bF9pbnRfdCkgZHVrX2JkX2RlY29kZShiZF9jdHgsIDIpOworCQlEVUtfREREKERVS19ERERQUklO VCgiMTpuIGNvbnZlcnNpb24gJWxkIC0+ICVsZCBjaGFycyIsIChsb25nKSBzdGFydF9pLCAobG9u ZykgdCkpOworCQlpZiAoY3AgPT0gc3RhcnRfaSkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQo IjE6biBtYXRjaGVzIGlucHV0IGNvZGVwb2ludCIpKTsKKwkJCWlmIChidyAhPSBOVUxMKSB7CisJ CQkJd2hpbGUgKHQtLSkgeworCQkJCQl0bXBfY3AgPSAoZHVrX2NvZGVwb2ludF90KSBkdWtfYmRf ZGVjb2RlKGJkX2N0eCwgMTYpOworCQkJCQlEVUtfQldfV1JJVEVfUkFXX1hVVEY4KHRociwgYncs IChkdWtfdWNvZGVwb2ludF90KSB0bXBfY3ApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtMTsK KwkJfSBlbHNlIHsKKwkJCXdoaWxlICh0LS0pIHsKKwkJCQkodm9pZCkgZHVrX2JkX2RlY29kZShi ZF9jdHgsIDE2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qIGRlZmF1bHQ6IG5vIGNoYW5nZSAqLwor CURVS19EREQoRFVLX0RERFBSSU5UKCJubyBydWxlIG1hdGNoZXMsIG91dHB1dCBpcyBzYW1lIGFz IGlucHV0IikpOworCS8qIGZhbGwgdGhyb3VnaCAqLworCisgc2luZ2xlOgorCWlmIChidyAhPSBO VUxMKSB7CisJCURVS19CV19XUklURV9SQVdfWFVURjgodGhyLCBidywgKGR1a191Y29kZXBvaW50 X3QpIGNwKTsKKwl9CisJcmV0dXJuIGNwOworfQorCisvKgorICogIENhc2UgY29udmVyc2lvbiBo ZWxwZXIsIHdpdGggY29udGV4dC9sb2NhbCBzZW5zaXRpdml0eS4KKyAqICBGb3IgcHJvcGVyIGNh c2UgY29udmVyc2lvbiwgb25lIG5lZWRzIHRvIGtub3cgdGhlIGNoYXJhY3RlcgorICogIGFuZCB0 aGUgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgY2hhcmFjdGVycywgYXMgd2VsbCBhcworICogIGxv Y2FsZS9sYW5ndWFnZS4KKyAqLworCisvKiBYWFg6IGFkZCAnbGFuZ3VhZ2UnIGFyZ3VtZW50IHdo ZW4gbG9jYWxlL2xhbmd1YWdlIHNlbnNpdGl2ZSBydWxlCisgKiBzdXBwb3J0IGFkZGVkLgorICov CitEVUtfTE9DQUwKK2R1a19jb2RlcG9pbnRfdCBkdWtfX2Nhc2VfdHJhbnNmb3JtX2hlbHBlcihk dWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGR1a19idWZ3cml0ZXJfY3R4ICpidywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfY29kZXBvaW50X3QgY3AsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2NvZGVwb2ludF90IHByZXYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2NvZGVwb2ludF90IG5leHQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xfdCB1cHBlcmNh c2UpIHsKKwlkdWtfYml0ZGVjb2Rlcl9jdHggYmRfY3R4OworCisJLyogZmFzdCBwYXRoIGZvciBB U0NJSSAqLworCWlmIChjcCA8IDB4ODBMKSB7CisJCS8qIFhYWDogdGhlcmUgYXJlIGxhbmd1YWdl IHNlbnNpdGl2ZSBydWxlcyBmb3IgdGhlIEFTQ0lJIHJhbmdlLgorCQkgKiBJZi93aGVuIGxhbmd1 YWdlL2xvY2FsZSBzdXBwb3J0IGlzIGltcGxlbWVudGVkLCB0aGV5IG5lZWQgdG8KKwkJICogYmUg aW1wbGVtZW50ZWQgaGVyZSBmb3IgdGhlIGZhc3QgcGF0aC4gIFRoZXJlIGFyZSBubyBjb250ZXh0 CisJCSAqIHNlbnNpdGl2ZSBydWxlcyBmb3IgQVNDSUkgcmFuZ2UuCisJCSAqLworCisJCWlmICh1 cHBlcmNhc2UpIHsKKwkJCWlmIChjcCA+PSAnYScgJiYgY3AgPD0gJ3onKSB7CisJCQkJY3AgPSBj cCAtICdhJyArICdBJzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjcCA+PSAnQScgJiYgY3Ag PD0gJ1onKSB7CisJCQkJY3AgPSBjcCAtICdBJyArICdhJzsKKwkJCX0KKwkJfQorCisJCWlmIChi dyAhPSBOVUxMKSB7CisJCQlEVUtfQldfV1JJVEVfUkFXX1U4KHRociwgYncsIChkdWtfdWludDhf dCkgY3ApOworCQl9CisJCXJldHVybiBjcDsKKwl9CisKKwkvKiBjb250ZXh0IGFuZCBsb2NhbGUg c3BlY2lmaWMgcnVsZXMgd2hpY2ggY2Fubm90IGN1cnJlbnRseSBiZSByZXByZXNlbnRlZAorCSAq IGluIHRoZSBjYXNlY29udiBiaXRzdHJlYW06IGhhcmRjb2RlZCBydWxlcyBpbiBDCisJICovCisJ aWYgKHVwcGVyY2FzZSkgeworCQkvKiBYWFg6IHR1cmtpc2ggLyBhemVyaSAqLworCX0gZWxzZSB7 CisJCS8qCisJCSAqICBGaW5hbCBzaWdtYSBjb250ZXh0IHNwZWNpZmljIHJ1bGUuICBUaGlzIGlz IGEgcmF0aGVyIHRyaWNreQorCQkgKiAgcnVsZSBhbmQgdGhpcyBoYW5kbGluZyBpcyBwcm9iYWJs eSBub3QgMTAwJSBjb3JyZWN0IG5vdy4KKwkJICogIFRoZSBydWxlIGlzIG5vdCBsb2NhbGUvbGFu Z3VhZ2Ugc3BlY2lmaWMgc28gaXQgaXMgc3VwcG9ydGVkLgorCQkgKi8KKworCQlpZiAoY3AgPT0g MHgwM2EzTCAmJiAgICAvKiBVKzAzQTMgPSBHUkVFSyBDQVBJVEFMIExFVFRFUiBTSUdNQSAqLwor CQkgICAgZHVrX3VuaWNvZGVfaXNfbGV0dGVyKHByZXYpICYmICAgICAgICAvKiBwcmV2IGV4aXN0 cyBhbmQgaXMgbm90IGEgbGV0dGVyICovCisJCSAgICAhZHVrX3VuaWNvZGVfaXNfbGV0dGVyKG5l eHQpKSB7ICAgICAgIC8qIG5leHQgZG9lcyBub3QgZXhpc3Qgb3IgbmV4dCBpcyBub3QgYSBsZXR0 ZXIgKi8KKwkJCS8qIENhcGl0YWwgc2lnbWEgb2NjdXJyZWQgYXQgImVuZCBvZiB3b3JkIiwgbG93 ZXJjYXNlIHRvCisJCQkgKiBVKzAzQzIgPSBHUkVFSyBTTUFMTCBMRVRURVIgRklOQUwgU0lHTUEu ICBPdGhlcndpc2UKKwkJCSAqIGZhbGwgdGhyb3VnaCBhbmQgbGV0IHRoZSBub3JtYWwgcnVsZXMg bG93ZXJjYXNlIGl0IHRvCisJCQkgKiBVKzAzQzMgPSBHUkVFSyBTTUFMTCBMRVRURVIgU0lHTUEu CisJCQkgKi8KKwkJCWNwID0gMHgwM2MyTDsKKwkJCWdvdG8gc2luZ2xlY2hhcjsKKwkJfQorCisJ CS8qIFhYWDogbGl0aHVhbmlhbiBub3QgaW1wbGVtZW50ZWQgKi8KKwkJLyogWFhYOiBsaXRodWFu aWFuLCBleHBsaWNpdCBkb3QgcnVsZXMgKi8KKwkJLyogWFhYOiB0dXJraXNoIC8gYXplcmksIGxv d2VyY2FzZSBydWxlcyAqLworCX0KKworCS8qIDE6MSBvciBzcGVjaWFsIGNvbnZlcnNpb25zLCBi dXQgbm90IGxvY2FsZS9jb250ZXh0IHNwZWNpZmljOiBzY3JpcHQgZ2VuZXJhdGVkIHJ1bGVzICov CisJZHVrX21lbXplcm8oJmJkX2N0eCwgc2l6ZW9mKGJkX2N0eCkpOworCWlmICh1cHBlcmNhc2Up IHsKKwkJYmRfY3R4LmRhdGEgPSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgZHVrX3VuaWNvZGVfY2Fz ZWNvbnZfdWM7CisJCWJkX2N0eC5sZW5ndGggPSAoZHVrX3NpemVfdCkgc2l6ZW9mKGR1a191bmlj b2RlX2Nhc2Vjb252X3VjKTsKKwl9IGVsc2UgeworCQliZF9jdHguZGF0YSA9IChjb25zdCBkdWtf dWludDhfdCAqKSBkdWtfdW5pY29kZV9jYXNlY29udl9sYzsKKwkJYmRfY3R4Lmxlbmd0aCA9IChk dWtfc2l6ZV90KSBzaXplb2YoZHVrX3VuaWNvZGVfY2FzZWNvbnZfbGMpOworCX0KKwlyZXR1cm4g ZHVrX19zbG93X2Nhc2VfY29udmVyc2lvbih0aHIsIGJ3LCBjcCwgJmJkX2N0eCk7CisKKyBzaW5n bGVjaGFyOgorCWlmIChidyAhPSBOVUxMKSB7CisJCURVS19CV19XUklURV9SQVdfWFVURjgodGhy LCBidywgKGR1a191Y29kZXBvaW50X3QpIGNwKTsKKwl9CisJcmV0dXJuIGNwOworCisgLyogdW51 c2VkIG5vdywgbm90IG5lZWRlZCB1bnRpbCBUdXJraXNoL0F6ZXJpICovCisjaWYgMAorIG5vY2hh cjoKKwlyZXR1cm4gLTE7CisjZW5kaWYKK30KKworLyoKKyAqICBSZXBsYWNlIHZhbHN0YWNrIHRv cCB3aXRoIGNhc2UgY29udmVydGVkIHZlcnNpb24uCisgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQg ZHVrX3VuaWNvZGVfY2FzZV9jb252ZXJ0X3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfYm9v bF90IHVwcGVyY2FzZSkgeworCWR1a19oc3RyaW5nICpoX2lucHV0OworCWR1a19idWZ3cml0ZXJf Y3R4IGJ3X2FsbG9jOworCWR1a19idWZ3cml0ZXJfY3R4ICpidzsKKwljb25zdCBkdWtfdWludDhf dCAqcCwgKnBfc3RhcnQsICpwX2VuZDsKKwlkdWtfY29kZXBvaW50X3QgcHJldiwgY3VyciwgbmV4 dDsKKworCWhfaW5wdXQgPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwgLTEpOyAgLyogQWNjZXB0 IHN5bWJvbHMuICovCisJRFVLX0FTU0VSVChoX2lucHV0ICE9IE5VTEwpOworCisJYncgPSAmYndf YWxsb2M7CisJRFVLX0JXX0lOSVRfUFVTSEJVRih0aHIsIGJ3LCBEVUtfSFNUUklOR19HRVRfQllU RUxFTihoX2lucHV0KSk7CisKKwkvKiBbIC4uLiBpbnB1dCBidWZmZXIgXSAqLworCisJcF9zdGFy dCA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoX2lucHV0KTsK KwlwX2VuZCA9IHBfc3RhcnQgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX2lucHV0KTsKKwlw ID0gcF9zdGFydDsKKworCXByZXYgPSAtMTsgRFVLX1VOUkVGKHByZXYpOworCWN1cnIgPSAtMTsK KwluZXh0ID0gLTE7CisJZm9yICg7OykgeworCQlwcmV2ID0gY3VycjsKKwkJY3VyciA9IG5leHQ7 CisJCW5leHQgPSAtMTsKKwkJaWYgKHAgPCBwX2VuZCkgeworCQkJbmV4dCA9IChkdWtfY29kZXBv aW50X3QpIGR1a191bmljb2RlX2RlY29kZV94dXRmOF9jaGVja2VkKHRociwgJnAsIHBfc3RhcnQs IHBfZW5kKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGVuZCBvZiBpbnB1dCBhbmQgbGFzdCBjaGFyIGhh cyBiZWVuIHByb2Nlc3NlZCAqLworCQkJaWYgKGN1cnIgPCAwKSB7CisJCQkJYnJlYWs7CisJCQl9 CisJCX0KKworCQkvKiBvbiBmaXJzdCByb3VuZCwgc2tpcCAqLworCQlpZiAoY3VyciA+PSAwKSB7 CisJCQkvKiBYWFg6IGNvdWxkIGFkZCBhIGZhc3QgcGF0aCB0byBwcm9jZXNzIGNodW5rcyBvZiBp bnB1dCBjb2RlcG9pbnRzLAorCQkJICogYnV0IHJlbGF0aXZlIGJlbmVmaXQgd291bGQgYmUgcXVp dGUgc21hbGwuCisJCQkgKi8KKworCQkJLyogRW5zdXJlIHNwYWNlIGZvciBtYXhpbXVtIG11bHRp LWNoYXJhY3RlciByZXN1bHQ7IGVzdGltYXRlIGlzIG92ZXJraWxsLiAqLworCQkJRFVLX0JXX0VO U1VSRSh0aHIsIGJ3LCA4ICogRFVLX1VOSUNPREVfTUFYX1hVVEY4X0xFTkdUSCk7CisKKwkJCWR1 a19fY2FzZV90cmFuc2Zvcm1faGVscGVyKHRociwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJ3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1a19jb2RlcG9pbnRfdCkg Y3VyciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYsCisJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICBuZXh0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBw ZXJjYXNlKTsKKwkJfQorCX0KKworCURVS19CV19DT01QQUNUKHRociwgYncpOworCSh2b2lkKSBk dWtfYnVmZmVyX3RvX3N0cmluZyh0aHIsIC0xKTsgIC8qIFNhZmUsIG91dHB1dCBpcyBlbmNvZGVk LiAqLworCS8qIGludmFsaWRhdGVzIGhfYnVmIHBvaW50ZXIgKi8KKwlkdWtfcmVtb3ZlX20yKHRo cik7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisKKy8qCisgKiAg Q2Fub25pY2FsaXplKCkgYWJzdHJhY3Qgb3BlcmF0aW9uIG5lZWRlZCBmb3IgY2Fub25pY2FsaXph dGlvbiBvZiBpbmRpdmlkdWFsCisgKiAgY29kZXBvaW50cyBkdXJpbmcgcmVnZXhwIGNvbXBpbGF0 aW9uIGFuZCBleGVjdXRpb24sIHNlZSBFNSBTZWN0aW9uIDE1LjEwLjIuOC4KKyAqICBOb3RlIHRo YXQgY29kZXBvaW50cyBhcmUgY2Fub25pY2FsaXplZCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSwg c28gbm8gY29udGV4dAorICogIHNwZWNpZmljIHJ1bGVzIGNhbiBhcHBseS4gIExvY2FsZSBzcGVj aWZpYyBydWxlcyBjYW4gYXBwbHksIHRob3VnaC4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX2Nv ZGVwb2ludF90IGR1a191bmljb2RlX3JlX2Nhbm9uaWNhbGl6ZV9jaGFyKGR1a19odGhyZWFkICp0 aHIsIGR1a19jb2RlcG9pbnRfdCBjcCkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfQ0FO T05fV09SS0FST1VORCkKKwkvKiBGYXN0IGNhbm9uaWNhbGl6YXRpb24gbG9va3VwIGF0IHRoZSBj b3N0IG9mIDEyOGtCIGZvb3RwcmludC4gKi8KKwlEVUtfQVNTRVJUKGNwID49IDApOworCURVS19V TlJFRih0aHIpOworCWlmIChEVUtfTElLRUxZKGNwIDwgMHgxMDAwMEwpKSB7CisJCXJldHVybiAo ZHVrX2NvZGVwb2ludF90KSBkdWtfdW5pY29kZV9yZV9jYW5vbl9sb29rdXBbY3BdOworCX0KKwly ZXR1cm4gY3A7CisjZWxzZSAgLyogRFVLX1VTRV9SRUdFWFBfQ0FOT05fV09SS0FST1VORCAqLwor CWR1a19jb2RlcG9pbnRfdCB5OworCisJeSA9IGR1a19fY2FzZV90cmFuc2Zvcm1faGVscGVyKHRo ciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgLyogTlVMTCBpcyBh bGxvd2VkLCBubyBvdXRwdXQgKi8KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3As ICAgICAgLyogY3VyciBjaGFyICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x LCAgICAgIC8qIHByZXYgY2hhciAqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt MSwgICAgICAvKiBuZXh0IGNoYXIgKi8KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MSk7ICAgICAgLyogdXBwZXJjYXNlICovCisKKwlpZiAoKHkgPCAwKSB8fCAoY3AgPj0gMHg4MCAm JiB5IDwgMHg4MCkpIHsKKwkJLyogbXVsdGlwbGUgY29kZXBvaW50IGNvbnZlcnNpb24gb3Igbm9u LUFTQ0lJIG1hcHBlZCB0byBBU0NJSQorCQkgKiAtLT4gbGVhdmUgYXMgaXMuCisJCSAqLworCQly ZXR1cm4gY3A7CisJfQorCisJcmV0dXJuIHk7CisjZW5kaWYgIC8qIERVS19VU0VfUkVHRVhQX0NB Tk9OX1dPUktBUk9VTkQgKi8KK30KKworLyoKKyAqICBFNSBTZWN0aW9uIDE1LjEwLjIuNiAiSXNX b3JkQ2hhciIgYWJzdHJhY3Qgb3BlcmF0aW9uLiAgQXNzdW1lCisgKiAgeCA8IDAgZm9yIGNoYXJh Y3RlcnMgcmVhZCBvdXRzaWRlIHRoZSBzdHJpbmcuCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19z bWFsbF9pbnRfdCBkdWtfdW5pY29kZV9yZV9pc193b3JkY2hhcihkdWtfY29kZXBvaW50X3QgeCkg eworCS8qCisJICogIE5vdGU6IHRoZSBkZXNjcmlwdGlvbiBpbiBFNSBTZWN0aW9uIDE1LjEwLjIu NiBoYXMgYSB0eXBvLCBpdAorCSAqICBjb250YWlucyAnQScgdHdpY2UgYW5kIGxhY2tzICdhJzsg dGhlIGludGVudCBpcyBbMC05YS16QS1aX10uCisJICovCisJaWYgKCh4ID49ICcwJyAmJiB4IDw9 ICc5JykgfHwKKwkgICAgKHggPj0gJ2EnICYmIHggPD0gJ3onKSB8fAorCSAgICAoeCA+PSAnQScg JiYgeCA8PSAnWicpIHx8CisJICAgICh4ID09ICdfJykpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJl dHVybiAwOworfQorCisvKgorICogIFJlZ2V4cCByYW5nZSB0YWJsZXMKKyAqLworCisvKiBleHBv c2VkIGJlY2F1c2UgbGV4ZXIgbmVlZHMgdGhlc2UgdG9vICovCitEVUtfSU5URVJOQUwgY29uc3Qg ZHVrX3VpbnQxNl90IGR1a191bmljb2RlX3JlX3Jhbmdlc19kaWdpdFsyXSA9IHsKKwkoZHVrX3Vp bnQxNl90KSAweDAwMzBVTCwgKGR1a191aW50MTZfdCkgMHgwMDM5VUwsCit9OworRFVLX0lOVEVS TkFMIGNvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29kZV9yZV9yYW5nZXNfd2hpdGVbMjJdID0g eworCShkdWtfdWludDE2X3QpIDB4MDAwOVVMLCAoZHVrX3VpbnQxNl90KSAweDAwMERVTCwKKwko ZHVrX3VpbnQxNl90KSAweDAwMjBVTCwgKGR1a191aW50MTZfdCkgMHgwMDIwVUwsCisJKGR1a191 aW50MTZfdCkgMHgwMEEwVUwsIChkdWtfdWludDE2X3QpIDB4MDBBMFVMLAorCShkdWtfdWludDE2 X3QpIDB4MTY4MFVMLCAoZHVrX3VpbnQxNl90KSAweDE2ODBVTCwKKwkoZHVrX3VpbnQxNl90KSAw eDE4MEVVTCwgKGR1a191aW50MTZfdCkgMHgxODBFVUwsCisJKGR1a191aW50MTZfdCkgMHgyMDAw VUwsIChkdWtfdWludDE2X3QpIDB4MjAwQVVMLAorCShkdWtfdWludDE2X3QpIDB4MjAyOFVMLCAo ZHVrX3VpbnQxNl90KSAweDIwMjlVTCwKKwkoZHVrX3VpbnQxNl90KSAweDIwMkZVTCwgKGR1a191 aW50MTZfdCkgMHgyMDJGVUwsCisJKGR1a191aW50MTZfdCkgMHgyMDVGVUwsIChkdWtfdWludDE2 X3QpIDB4MjA1RlVMLAorCShkdWtfdWludDE2X3QpIDB4MzAwMFVMLCAoZHVrX3VpbnQxNl90KSAw eDMwMDBVTCwKKwkoZHVrX3VpbnQxNl90KSAweEZFRkZVTCwgKGR1a191aW50MTZfdCkgMHhGRUZG VUwsCit9OworRFVLX0lOVEVSTkFMIGNvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29kZV9yZV9y YW5nZXNfd29yZGNoYXJbOF0gPSB7CisJKGR1a191aW50MTZfdCkgMHgwMDMwVUwsIChkdWtfdWlu dDE2X3QpIDB4MDAzOVVMLAorCShkdWtfdWludDE2X3QpIDB4MDA0MVVMLCAoZHVrX3VpbnQxNl90 KSAweDAwNUFVTCwKKwkoZHVrX3VpbnQxNl90KSAweDAwNUZVTCwgKGR1a191aW50MTZfdCkgMHgw MDVGVUwsCisJKGR1a191aW50MTZfdCkgMHgwMDYxVUwsIChkdWtfdWludDE2X3QpIDB4MDA3QVVM LAorfTsKK0RVS19JTlRFUk5BTCBjb25zdCBkdWtfdWludDE2X3QgZHVrX3VuaWNvZGVfcmVfcmFu Z2VzX25vdF9kaWdpdFs0XSA9IHsKKwkoZHVrX3VpbnQxNl90KSAweDAwMDBVTCwgKGR1a191aW50 MTZfdCkgMHgwMDJGVUwsCisJKGR1a191aW50MTZfdCkgMHgwMDNBVUwsIChkdWtfdWludDE2X3Qp IDB4RkZGRlVMLAorfTsKK0RVS19JTlRFUk5BTCBjb25zdCBkdWtfdWludDE2X3QgZHVrX3VuaWNv ZGVfcmVfcmFuZ2VzX25vdF93aGl0ZVsyNF0gPSB7CisJKGR1a191aW50MTZfdCkgMHgwMDAwVUws IChkdWtfdWludDE2X3QpIDB4MDAwOFVMLAorCShkdWtfdWludDE2X3QpIDB4MDAwRVVMLCAoZHVr X3VpbnQxNl90KSAweDAwMUZVTCwKKwkoZHVrX3VpbnQxNl90KSAweDAwMjFVTCwgKGR1a191aW50 MTZfdCkgMHgwMDlGVUwsCisJKGR1a191aW50MTZfdCkgMHgwMEExVUwsIChkdWtfdWludDE2X3Qp IDB4MTY3RlVMLAorCShkdWtfdWludDE2X3QpIDB4MTY4MVVMLCAoZHVrX3VpbnQxNl90KSAweDE4 MERVTCwKKwkoZHVrX3VpbnQxNl90KSAweDE4MEZVTCwgKGR1a191aW50MTZfdCkgMHgxRkZGVUws CisJKGR1a191aW50MTZfdCkgMHgyMDBCVUwsIChkdWtfdWludDE2X3QpIDB4MjAyN1VMLAorCShk dWtfdWludDE2X3QpIDB4MjAyQVVMLCAoZHVrX3VpbnQxNl90KSAweDIwMkVVTCwKKwkoZHVrX3Vp bnQxNl90KSAweDIwMzBVTCwgKGR1a191aW50MTZfdCkgMHgyMDVFVUwsCisJKGR1a191aW50MTZf dCkgMHgyMDYwVUwsIChkdWtfdWludDE2X3QpIDB4MkZGRlVMLAorCShkdWtfdWludDE2X3QpIDB4 MzAwMVVMLCAoZHVrX3VpbnQxNl90KSAweEZFRkVVTCwKKwkoZHVrX3VpbnQxNl90KSAweEZGMDBV TCwgKGR1a191aW50MTZfdCkgMHhGRkZGVUwsCit9OworRFVLX0lOVEVSTkFMIGNvbnN0IGR1a191 aW50MTZfdCBkdWtfdW5pY29kZV9yZV9yYW5nZXNfbm90X3dvcmRjaGFyWzEwXSA9IHsKKwkoZHVr X3VpbnQxNl90KSAweDAwMDBVTCwgKGR1a191aW50MTZfdCkgMHgwMDJGVUwsCisJKGR1a191aW50 MTZfdCkgMHgwMDNBVUwsIChkdWtfdWludDE2X3QpIDB4MDA0MFVMLAorCShkdWtfdWludDE2X3Qp IDB4MDA1QlVMLCAoZHVrX3VpbnQxNl90KSAweDAwNUVVTCwKKwkoZHVrX3VpbnQxNl90KSAweDAw NjBVTCwgKGR1a191aW50MTZfdCkgMHgwMDYwVUwsCisJKGR1a191aW50MTZfdCkgMHgwMDdCVUws IChkdWtfdWludDE2X3QpIDB4RkZGRlVMLAorfTsKKworI2VuZGlmICAvKiBEVUtfVVNFX1JFR0VY UF9TVVBQT1JUICovCisvKgorICogIE1pc2MgdXRpbCBzdHVmZi4KKyAqLworCisvKiAjaW5jbHVk ZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCisgKiAgTG93ZXJj YXNlIGRpZ2l0cyBmb3IgcmFkaXggdmFsdWVzIDIgdG8gMzYuICBBbHNvIGRvdWJsZXMgYXMgbG93 ZXJjYXNlCisgKiAgaGV4IG55YmJsZSB0YWJsZS4KKyAqLworCitEVUtfSU5URVJOQUwgY29uc3Qg ZHVrX3VpbnQ4X3QgZHVrX2xjX2RpZ2l0c1szNl0gPSB7CisJRFVLX0FTQ18wLCBEVUtfQVNDXzEs IERVS19BU0NfMiwgRFVLX0FTQ18zLAorCURVS19BU0NfNCwgRFVLX0FTQ181LCBEVUtfQVNDXzYs IERVS19BU0NfNywKKwlEVUtfQVNDXzgsIERVS19BU0NfOSwgRFVLX0FTQ19MQ19BLCBEVUtfQVND X0xDX0IsCisJRFVLX0FTQ19MQ19DLCBEVUtfQVNDX0xDX0QsIERVS19BU0NfTENfRSwgRFVLX0FT Q19MQ19GLAorCURVS19BU0NfTENfRywgRFVLX0FTQ19MQ19ILCBEVUtfQVNDX0xDX0ksIERVS19B U0NfTENfSiwKKwlEVUtfQVNDX0xDX0ssIERVS19BU0NfTENfTCwgRFVLX0FTQ19MQ19NLCBEVUtf QVNDX0xDX04sCisJRFVLX0FTQ19MQ19PLCBEVUtfQVNDX0xDX1AsIERVS19BU0NfTENfUSwgRFVL X0FTQ19MQ19SLAorCURVS19BU0NfTENfUywgRFVLX0FTQ19MQ19ULCBEVUtfQVNDX0xDX1UsIERV S19BU0NfTENfViwKKwlEVUtfQVNDX0xDX1csIERVS19BU0NfTENfWCwgRFVLX0FTQ19MQ19ZLCBE VUtfQVNDX0xDX1oKK307CisKK0RVS19JTlRFUk5BTCBjb25zdCBkdWtfdWludDhfdCBkdWtfdWNf bnliYmxlc1sxNl0gPSB7CisJRFVLX0FTQ18wLCBEVUtfQVNDXzEsIERVS19BU0NfMiwgRFVLX0FT Q18zLAorCURVS19BU0NfNCwgRFVLX0FTQ181LCBEVUtfQVNDXzYsIERVS19BU0NfNywKKwlEVUtf QVNDXzgsIERVS19BU0NfOSwgRFVLX0FTQ19VQ19BLCBEVUtfQVNDX1VDX0IsCisJRFVLX0FTQ19V Q19DLCBEVUtfQVNDX1VDX0QsIERVS19BU0NfVUNfRSwgRFVLX0FTQ19VQ19GCit9OworCisvKgor ICogIFRhYmxlIGZvciBoZXggZGVjb2RpbmcgQVNDSUkgaGV4IGRpZ2l0cworICovCisKK0RVS19J TlRFUk5BTCBjb25zdCBkdWtfaW50OF90IGR1a19oZXhfZGVjdGFiWzI1Nl0gPSB7CisJLyogLTEg aWYgaW52YWxpZCAqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLyogMHgwMC0weDBmICovCisJLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAvKiAweDEw LTB4MWYgKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgIC8qIDB4MjAtMHgyZiAqLworCSAwLCAgMSwgIDIsICAzLCAgNCwg IDUsICA2LCAgNywgIDgsICA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLyogMHgzMC0weDNm ICovCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsICAvKiAweDQwLTB4NGYgKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgIC8qIDB4NTAtMHg1ZiAqLwor CS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAgLyogMHg2MC0weDZmICovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAvKiAweDcwLTB4N2YgKi8KKwktMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgIC8qIDB4ODAtMHg4ZiAqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLyogMHg5MC0weDlmICovCisJLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAv KiAweGEwLTB4YWYgKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgIC8qIDB4YjAtMHhiZiAqLworCS0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgLyogMHhj MC0weGNmICovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsICAvKiAweGQwLTB4ZGYgKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgIC8qIDB4ZTAtMHhl ZiAqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xICAgLyogMHhmMC0weGZmICovCit9OworCisjaWYgZGVmaW5lZChEVUtfVVNF X0hFWF9GQVNUUEFUSCkKKy8qIFByZXNoaWZ0ZWQgPDwgNC4gIE11c3QgdXNlIDE2LWJpdCBlbnRy eSB0byBhbGxvdyBuZWdhdGl2ZSB2YWx1ZSBzaWduYWxpbmcuICovCitEVUtfSU5URVJOQUwgY29u c3QgZHVrX2ludDE2X3QgZHVrX2hleF9kZWN0YWJfc2hpZnQ0WzI1Nl0gPSB7CisJICAtMSwgICAt MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIC8qIDB4MDAtMHgwZiAqLworCSAgLTEsICAg LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAvKiAweDEwLTB4MWYgKi8KKwkgIC0xLCAg IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgLyogMHgyMC0weDJmICovCisJMHgwMCwg MHgxMCwgMHgyMCwgMHgzMCwgMHg0MCwgMHg1MCwgMHg2MCwgMHg3MCwgMHg4MCwgMHg5MCwgICAt MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIC8qIDB4MzAtMHgzZiAqLworCSAgLTEs IDB4YTAsIDB4YjAsIDB4YzAsIDB4ZDAsIDB4ZTAsIDB4ZjAsICAgLTEsICAgLTEsICAgLTEsICAg LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAvKiAweDQwLTB4NGYgKi8KKwkgIC0x LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgLyogMHg1MC0weDVmICovCisJICAt MSwgMHhhMCwgMHhiMCwgMHhjMCwgMHhkMCwgMHhlMCwgMHhmMCwgICAtMSwgICAtMSwgICAtMSwg ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIC8qIDB4NjAtMHg2ZiAqLworCSAg LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAvKiAweDcwLTB4N2YgKi8KKwkg IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgLyogMHg4MC0weDhmICovCisJ ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIC8qIDB4OTAtMHg5ZiAqLwor CSAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAg LTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAvKiAweGEwLTB4YWYgKi8K KwkgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAg IC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgLyogMHhiMC0weGJmICov CisJICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwg ICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgIC8qIDB4YzAtMHhjZiAq LworCSAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEs ICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAvKiAweGQwLTB4ZGYg Ki8KKwkgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0x LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgLyogMHhlMC0weGVm ICovCisJICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAt MSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSAgIC8qIDB4ZjAtMHhm ZiAqLworfTsKKyNlbmRpZgorCisvKgorICogIFRhYmxlIGZvciBoZXggZW5jb2RpbmcgYnl0ZXMK KyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0hFWF9GQVNUUEFUSCkKKy8qIExvb2t1cCB0byBl bmNvZGUgb25lIGJ5dGUgZGlyZWN0bHkgaW50byAyIGNoYXJhY3RlcnM6CisgKgorICogICBkZWYg Z2VuaGV4dGFiKGJzd2FwKToKKyAqICAgICAgIGZvciBpIGluIHhyYW5nZSgyNTYpOgorICogICAg ICAgICAgIHQgPSBjaHIoaSkuZW5jb2RlKCdoZXgnKQorICogICAgICAgICAgIGlmIGJzd2FwOgor ICogICAgICAgICAgICAgICB0ID0gdFsxXSArIHRbMF0KKyAqICAgICAgICAgICBwcmludCgnMHgn ICsgdC5lbmNvZGUoJ2hleCcpICsgJ1UnKQorICogICBwcmludCgnYmlnIGVuZGlhbicpOyBnZW5o ZXh0YWIoRmFsc2UpCisgKiAgIHByaW50KCdsaXR0bGUgZW5kaWFuJyk7IGdlbmhleHRhYihUcnVl KQorKi8KK0RVS19JTlRFUk5BTCBjb25zdCBkdWtfdWludDE2X3QgZHVrX2hleF9lbmN0YWJbMjU2 XSA9IHsKKyNpZiBkZWZpbmVkKERVS19VU0VfSU5URUdFUl9CRSkKKwkweDMwMzBVLCAweDMwMzFV LCAweDMwMzJVLCAweDMwMzNVLCAweDMwMzRVLCAweDMwMzVVLCAweDMwMzZVLCAweDMwMzdVLAor CTB4MzAzOFUsIDB4MzAzOVUsIDB4MzA2MVUsIDB4MzA2MlUsIDB4MzA2M1UsIDB4MzA2NFUsIDB4 MzA2NVUsIDB4MzA2NlUsCisJMHgzMTMwVSwgMHgzMTMxVSwgMHgzMTMyVSwgMHgzMTMzVSwgMHgz MTM0VSwgMHgzMTM1VSwgMHgzMTM2VSwgMHgzMTM3VSwKKwkweDMxMzhVLCAweDMxMzlVLCAweDMx NjFVLCAweDMxNjJVLCAweDMxNjNVLCAweDMxNjRVLCAweDMxNjVVLCAweDMxNjZVLAorCTB4MzIz MFUsIDB4MzIzMVUsIDB4MzIzMlUsIDB4MzIzM1UsIDB4MzIzNFUsIDB4MzIzNVUsIDB4MzIzNlUs IDB4MzIzN1UsCisJMHgzMjM4VSwgMHgzMjM5VSwgMHgzMjYxVSwgMHgzMjYyVSwgMHgzMjYzVSwg MHgzMjY0VSwgMHgzMjY1VSwgMHgzMjY2VSwKKwkweDMzMzBVLCAweDMzMzFVLCAweDMzMzJVLCAw eDMzMzNVLCAweDMzMzRVLCAweDMzMzVVLCAweDMzMzZVLCAweDMzMzdVLAorCTB4MzMzOFUsIDB4 MzMzOVUsIDB4MzM2MVUsIDB4MzM2MlUsIDB4MzM2M1UsIDB4MzM2NFUsIDB4MzM2NVUsIDB4MzM2 NlUsCisJMHgzNDMwVSwgMHgzNDMxVSwgMHgzNDMyVSwgMHgzNDMzVSwgMHgzNDM0VSwgMHgzNDM1 VSwgMHgzNDM2VSwgMHgzNDM3VSwKKwkweDM0MzhVLCAweDM0MzlVLCAweDM0NjFVLCAweDM0NjJV LCAweDM0NjNVLCAweDM0NjRVLCAweDM0NjVVLCAweDM0NjZVLAorCTB4MzUzMFUsIDB4MzUzMVUs IDB4MzUzMlUsIDB4MzUzM1UsIDB4MzUzNFUsIDB4MzUzNVUsIDB4MzUzNlUsIDB4MzUzN1UsCisJ MHgzNTM4VSwgMHgzNTM5VSwgMHgzNTYxVSwgMHgzNTYyVSwgMHgzNTYzVSwgMHgzNTY0VSwgMHgz NTY1VSwgMHgzNTY2VSwKKwkweDM2MzBVLCAweDM2MzFVLCAweDM2MzJVLCAweDM2MzNVLCAweDM2 MzRVLCAweDM2MzVVLCAweDM2MzZVLCAweDM2MzdVLAorCTB4MzYzOFUsIDB4MzYzOVUsIDB4MzY2 MVUsIDB4MzY2MlUsIDB4MzY2M1UsIDB4MzY2NFUsIDB4MzY2NVUsIDB4MzY2NlUsCisJMHgzNzMw VSwgMHgzNzMxVSwgMHgzNzMyVSwgMHgzNzMzVSwgMHgzNzM0VSwgMHgzNzM1VSwgMHgzNzM2VSwg MHgzNzM3VSwKKwkweDM3MzhVLCAweDM3MzlVLCAweDM3NjFVLCAweDM3NjJVLCAweDM3NjNVLCAw eDM3NjRVLCAweDM3NjVVLCAweDM3NjZVLAorCTB4MzgzMFUsIDB4MzgzMVUsIDB4MzgzMlUsIDB4 MzgzM1UsIDB4MzgzNFUsIDB4MzgzNVUsIDB4MzgzNlUsIDB4MzgzN1UsCisJMHgzODM4VSwgMHgz ODM5VSwgMHgzODYxVSwgMHgzODYyVSwgMHgzODYzVSwgMHgzODY0VSwgMHgzODY1VSwgMHgzODY2 VSwKKwkweDM5MzBVLCAweDM5MzFVLCAweDM5MzJVLCAweDM5MzNVLCAweDM5MzRVLCAweDM5MzVV LCAweDM5MzZVLCAweDM5MzdVLAorCTB4MzkzOFUsIDB4MzkzOVUsIDB4Mzk2MVUsIDB4Mzk2MlUs IDB4Mzk2M1UsIDB4Mzk2NFUsIDB4Mzk2NVUsIDB4Mzk2NlUsCisJMHg2MTMwVSwgMHg2MTMxVSwg MHg2MTMyVSwgMHg2MTMzVSwgMHg2MTM0VSwgMHg2MTM1VSwgMHg2MTM2VSwgMHg2MTM3VSwKKwkw eDYxMzhVLCAweDYxMzlVLCAweDYxNjFVLCAweDYxNjJVLCAweDYxNjNVLCAweDYxNjRVLCAweDYx NjVVLCAweDYxNjZVLAorCTB4NjIzMFUsIDB4NjIzMVUsIDB4NjIzMlUsIDB4NjIzM1UsIDB4NjIz NFUsIDB4NjIzNVUsIDB4NjIzNlUsIDB4NjIzN1UsCisJMHg2MjM4VSwgMHg2MjM5VSwgMHg2MjYx VSwgMHg2MjYyVSwgMHg2MjYzVSwgMHg2MjY0VSwgMHg2MjY1VSwgMHg2MjY2VSwKKwkweDYzMzBV LCAweDYzMzFVLCAweDYzMzJVLCAweDYzMzNVLCAweDYzMzRVLCAweDYzMzVVLCAweDYzMzZVLCAw eDYzMzdVLAorCTB4NjMzOFUsIDB4NjMzOVUsIDB4NjM2MVUsIDB4NjM2MlUsIDB4NjM2M1UsIDB4 NjM2NFUsIDB4NjM2NVUsIDB4NjM2NlUsCisJMHg2NDMwVSwgMHg2NDMxVSwgMHg2NDMyVSwgMHg2 NDMzVSwgMHg2NDM0VSwgMHg2NDM1VSwgMHg2NDM2VSwgMHg2NDM3VSwKKwkweDY0MzhVLCAweDY0 MzlVLCAweDY0NjFVLCAweDY0NjJVLCAweDY0NjNVLCAweDY0NjRVLCAweDY0NjVVLCAweDY0NjZV LAorCTB4NjUzMFUsIDB4NjUzMVUsIDB4NjUzMlUsIDB4NjUzM1UsIDB4NjUzNFUsIDB4NjUzNVUs IDB4NjUzNlUsIDB4NjUzN1UsCisJMHg2NTM4VSwgMHg2NTM5VSwgMHg2NTYxVSwgMHg2NTYyVSwg MHg2NTYzVSwgMHg2NTY0VSwgMHg2NTY1VSwgMHg2NTY2VSwKKwkweDY2MzBVLCAweDY2MzFVLCAw eDY2MzJVLCAweDY2MzNVLCAweDY2MzRVLCAweDY2MzVVLCAweDY2MzZVLCAweDY2MzdVLAorCTB4 NjYzOFUsIDB4NjYzOVUsIDB4NjY2MVUsIDB4NjY2MlUsIDB4NjY2M1UsIDB4NjY2NFUsIDB4NjY2 NVUsIDB4NjY2NlUKKyNlbHNlICAvKiBEVUtfVVNFX0lOVEVHRVJfQkUgKi8KKwkweDMwMzBVLCAw eDMxMzBVLCAweDMyMzBVLCAweDMzMzBVLCAweDM0MzBVLCAweDM1MzBVLCAweDM2MzBVLCAweDM3 MzBVLAorCTB4MzgzMFUsIDB4MzkzMFUsIDB4NjEzMFUsIDB4NjIzMFUsIDB4NjMzMFUsIDB4NjQz MFUsIDB4NjUzMFUsIDB4NjYzMFUsCisJMHgzMDMxVSwgMHgzMTMxVSwgMHgzMjMxVSwgMHgzMzMx VSwgMHgzNDMxVSwgMHgzNTMxVSwgMHgzNjMxVSwgMHgzNzMxVSwKKwkweDM4MzFVLCAweDM5MzFV LCAweDYxMzFVLCAweDYyMzFVLCAweDYzMzFVLCAweDY0MzFVLCAweDY1MzFVLCAweDY2MzFVLAor CTB4MzAzMlUsIDB4MzEzMlUsIDB4MzIzMlUsIDB4MzMzMlUsIDB4MzQzMlUsIDB4MzUzMlUsIDB4 MzYzMlUsIDB4MzczMlUsCisJMHgzODMyVSwgMHgzOTMyVSwgMHg2MTMyVSwgMHg2MjMyVSwgMHg2 MzMyVSwgMHg2NDMyVSwgMHg2NTMyVSwgMHg2NjMyVSwKKwkweDMwMzNVLCAweDMxMzNVLCAweDMy MzNVLCAweDMzMzNVLCAweDM0MzNVLCAweDM1MzNVLCAweDM2MzNVLCAweDM3MzNVLAorCTB4Mzgz M1UsIDB4MzkzM1UsIDB4NjEzM1UsIDB4NjIzM1UsIDB4NjMzM1UsIDB4NjQzM1UsIDB4NjUzM1Us IDB4NjYzM1UsCisJMHgzMDM0VSwgMHgzMTM0VSwgMHgzMjM0VSwgMHgzMzM0VSwgMHgzNDM0VSwg MHgzNTM0VSwgMHgzNjM0VSwgMHgzNzM0VSwKKwkweDM4MzRVLCAweDM5MzRVLCAweDYxMzRVLCAw eDYyMzRVLCAweDYzMzRVLCAweDY0MzRVLCAweDY1MzRVLCAweDY2MzRVLAorCTB4MzAzNVUsIDB4 MzEzNVUsIDB4MzIzNVUsIDB4MzMzNVUsIDB4MzQzNVUsIDB4MzUzNVUsIDB4MzYzNVUsIDB4Mzcz NVUsCisJMHgzODM1VSwgMHgzOTM1VSwgMHg2MTM1VSwgMHg2MjM1VSwgMHg2MzM1VSwgMHg2NDM1 VSwgMHg2NTM1VSwgMHg2NjM1VSwKKwkweDMwMzZVLCAweDMxMzZVLCAweDMyMzZVLCAweDMzMzZV LCAweDM0MzZVLCAweDM1MzZVLCAweDM2MzZVLCAweDM3MzZVLAorCTB4MzgzNlUsIDB4MzkzNlUs IDB4NjEzNlUsIDB4NjIzNlUsIDB4NjMzNlUsIDB4NjQzNlUsIDB4NjUzNlUsIDB4NjYzNlUsCisJ MHgzMDM3VSwgMHgzMTM3VSwgMHgzMjM3VSwgMHgzMzM3VSwgMHgzNDM3VSwgMHgzNTM3VSwgMHgz NjM3VSwgMHgzNzM3VSwKKwkweDM4MzdVLCAweDM5MzdVLCAweDYxMzdVLCAweDYyMzdVLCAweDYz MzdVLCAweDY0MzdVLCAweDY1MzdVLCAweDY2MzdVLAorCTB4MzAzOFUsIDB4MzEzOFUsIDB4MzIz OFUsIDB4MzMzOFUsIDB4MzQzOFUsIDB4MzUzOFUsIDB4MzYzOFUsIDB4MzczOFUsCisJMHgzODM4 VSwgMHgzOTM4VSwgMHg2MTM4VSwgMHg2MjM4VSwgMHg2MzM4VSwgMHg2NDM4VSwgMHg2NTM4VSwg MHg2NjM4VSwKKwkweDMwMzlVLCAweDMxMzlVLCAweDMyMzlVLCAweDMzMzlVLCAweDM0MzlVLCAw eDM1MzlVLCAweDM2MzlVLCAweDM3MzlVLAorCTB4MzgzOVUsIDB4MzkzOVUsIDB4NjEzOVUsIDB4 NjIzOVUsIDB4NjMzOVUsIDB4NjQzOVUsIDB4NjUzOVUsIDB4NjYzOVUsCisJMHgzMDYxVSwgMHgz MTYxVSwgMHgzMjYxVSwgMHgzMzYxVSwgMHgzNDYxVSwgMHgzNTYxVSwgMHgzNjYxVSwgMHgzNzYx VSwKKwkweDM4NjFVLCAweDM5NjFVLCAweDYxNjFVLCAweDYyNjFVLCAweDYzNjFVLCAweDY0NjFV LCAweDY1NjFVLCAweDY2NjFVLAorCTB4MzA2MlUsIDB4MzE2MlUsIDB4MzI2MlUsIDB4MzM2MlUs IDB4MzQ2MlUsIDB4MzU2MlUsIDB4MzY2MlUsIDB4Mzc2MlUsCisJMHgzODYyVSwgMHgzOTYyVSwg MHg2MTYyVSwgMHg2MjYyVSwgMHg2MzYyVSwgMHg2NDYyVSwgMHg2NTYyVSwgMHg2NjYyVSwKKwkw eDMwNjNVLCAweDMxNjNVLCAweDMyNjNVLCAweDMzNjNVLCAweDM0NjNVLCAweDM1NjNVLCAweDM2 NjNVLCAweDM3NjNVLAorCTB4Mzg2M1UsIDB4Mzk2M1UsIDB4NjE2M1UsIDB4NjI2M1UsIDB4NjM2 M1UsIDB4NjQ2M1UsIDB4NjU2M1UsIDB4NjY2M1UsCisJMHgzMDY0VSwgMHgzMTY0VSwgMHgzMjY0 VSwgMHgzMzY0VSwgMHgzNDY0VSwgMHgzNTY0VSwgMHgzNjY0VSwgMHgzNzY0VSwKKwkweDM4NjRV LCAweDM5NjRVLCAweDYxNjRVLCAweDYyNjRVLCAweDYzNjRVLCAweDY0NjRVLCAweDY1NjRVLCAw eDY2NjRVLAorCTB4MzA2NVUsIDB4MzE2NVUsIDB4MzI2NVUsIDB4MzM2NVUsIDB4MzQ2NVUsIDB4 MzU2NVUsIDB4MzY2NVUsIDB4Mzc2NVUsCisJMHgzODY1VSwgMHgzOTY1VSwgMHg2MTY1VSwgMHg2 MjY1VSwgMHg2MzY1VSwgMHg2NDY1VSwgMHg2NTY1VSwgMHg2NjY1VSwKKwkweDMwNjZVLCAweDMx NjZVLCAweDMyNjZVLCAweDMzNjZVLCAweDM0NjZVLCAweDM1NjZVLCAweDM2NjZVLCAweDM3NjZV LAorCTB4Mzg2NlUsIDB4Mzk2NlUsIDB4NjE2NlUsIDB4NjI2NlUsIDB4NjM2NlUsIDB4NjQ2NlUs IDB4NjU2NlUsIDB4NjY2NlUKKyNlbmRpZiAgLyogRFVLX1VTRV9JTlRFR0VSX0JFICovCit9Owor I2VuZGlmICAvKiBEVUtfVVNFX0hFWF9GQVNUUEFUSCAqLworCisvKgorICogIEFyYml0cmFyeSBi eXRlc3dhcCBmb3IgcG90ZW50aWFsbHkgdW5hbGlnbmVkIHZhbHVlcworICoKKyAqICBVc2VkIHRv IGJ5dGVzd2FwIHBvaW50ZXJzIGUuZy4gaW4gZGVidWdnZXIgY29kZS4KKyAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpICAvKiBGb3Igbm93IG9ubHkgbmVlZGVkIGJ5 IHRoZSBkZWJ1Z2dlci4gKi8KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19ieXRlc3dhcF9ieXRlcyhk dWtfdWludDhfdCAqcCwgZHVrX3NtYWxsX3VpbnRfdCBsZW4pIHsKKwlkdWtfdWludDhfdCB0bXA7 CisJZHVrX3VpbnQ4X3QgKnEgPSBwICsgbGVuIC0gMTsKKworCXdoaWxlIChwIC0gcSA8IDApIHsK KwkJdG1wID0gKnA7CisJCSpwID0gKnE7CisJCSpxID0gdG1wOworCQlwKys7CisJCXEtLTsKKwl9 Cit9CisjZW5kaWYKKy8qCisgKiAgSG9iamVjdCBFQ01BU2NyaXB0IFtbQ2xhc3NdXS4KKyAqLwor CisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNp ZiAoRFVLX1NUUklEWF9VQ19BUkdVTUVOVFMgPiAyNTUpCisjZXJyb3IgY29uc3RhbnQgdG9vIGxh cmdlCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9BUlJBWSA+IDI1NSkKKyNlcnJvciBjb25zdGFu dCB0b28gbGFyZ2UKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX1VDX0JPT0xFQU4gPiAyNTUpCisj ZXJyb3IgY29uc3RhbnQgdG9vIGxhcmdlCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9EQVRFID4g MjU1KQorI2Vycm9yIGNvbnN0YW50IHRvbyBsYXJnZQorI2VuZGlmCisjaWYgKERVS19TVFJJRFhf VUNfRVJST1IgPiAyNTUpCisjZXJyb3IgY29uc3RhbnQgdG9vIGxhcmdlCisjZW5kaWYKKyNpZiAo RFVLX1NUUklEWF9VQ19GVU5DVElPTiA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UK KyNlbmRpZgorI2lmIChEVUtfU1RSSURYX0pTT04gPiAyNTUpCisjZXJyb3IgY29uc3RhbnQgdG9v IGxhcmdlCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9NQVRIID4gMjU1KQorI2Vycm9yIGNvbnN0 YW50IHRvbyBsYXJnZQorI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVUNfTlVNQkVSID4gMjU1KQor I2Vycm9yIGNvbnN0YW50IHRvbyBsYXJnZQorI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVUNfT0JK RUNUID4gMjU1KQorI2Vycm9yIGNvbnN0YW50IHRvbyBsYXJnZQorI2VuZGlmCisjaWYgKERVS19T VFJJRFhfUkVHX0VYUCA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNlbmRpZgor I2lmIChEVUtfU1RSSURYX1VDX1NUUklORyA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFy Z2UKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX0dMT0JBTCA+IDI1NSkKKyNlcnJvciBjb25zdGFu dCB0b28gbGFyZ2UKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX09CSl9FTlYgPiAyNTUpCisjZXJy b3IgY29uc3RhbnQgdG9vIGxhcmdlCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9ERUNfRU5WID4g MjU1KQorI2Vycm9yIGNvbnN0YW50IHRvbyBsYXJnZQorI2VuZGlmCisjaWYgKERVS19TVFJJRFhf VUNfUE9JTlRFUiA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNlbmRpZgorI2lm IChEVUtfU1RSSURYX1VDX1RIUkVBRCA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UK KyNlbmRpZgorI2lmIChEVUtfU1RSSURYX0FSUkFZX0JVRkZFUiA+IDI1NSkKKyNlcnJvciBjb25z dGFudCB0b28gbGFyZ2UKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX0RBVEFfVklFVyA+IDI1NSkK KyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNlbmRpZgorI2lmIChEVUtfU1RSSURYX0lOVDhf QVJSQVkgPiAyNTUpCisjZXJyb3IgY29uc3RhbnQgdG9vIGxhcmdlCisjZW5kaWYKKyNpZiAoRFVL X1NUUklEWF9VSU5UOF9BUlJBWSA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNl bmRpZgorI2lmIChEVUtfU1RSSURYX1VJTlQ4X0NMQU1QRURfQVJSQVkgPiAyNTUpCisjZXJyb3Ig Y29uc3RhbnQgdG9vIGxhcmdlCisjZW5kaWYKKyNpZiAoRFVLX1NUUklEWF9JTlQxNl9BUlJBWSA+ IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNlbmRpZgorI2lmIChEVUtfU1RSSURY X1VJTlQxNl9BUlJBWSA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNlbmRpZgor I2lmIChEVUtfU1RSSURYX0lOVDMyX0FSUkFZID4gMjU1KQorI2Vycm9yIGNvbnN0YW50IHRvbyBs YXJnZQorI2VuZGlmCisjaWYgKERVS19TVFJJRFhfVUlOVDMyX0FSUkFZID4gMjU1KQorI2Vycm9y IGNvbnN0YW50IHRvbyBsYXJnZQorI2VuZGlmCisjaWYgKERVS19TVFJJRFhfRkxPQVQzMl9BUlJB WSA+IDI1NSkKKyNlcnJvciBjb25zdGFudCB0b28gbGFyZ2UKKyNlbmRpZgorI2lmIChEVUtfU1RS SURYX0ZMT0FUNjRfQVJSQVkgPiAyNTUpCisjZXJyb3IgY29uc3RhbnQgdG9vIGxhcmdlCisjZW5k aWYKKyNpZiAoRFVLX1NUUklEWF9FTVBUWV9TVFJJTkcgPiAyNTUpCisjZXJyb3IgY29uc3RhbnQg dG9vIGxhcmdlCisjZW5kaWYKKworLyogTm90ZTogYXNzdW1lcyB0aGF0IHRoZXNlIHN0cmluZyBp bmRleGVzIGFyZSA4LWJpdCwgZ2Vuc3RyaW5ncy5weSBtdXN0IGVuc3VyZSB0aGF0ICovCitEVUtf SU5URVJOQUwgZHVrX3VpbnQ4X3QgZHVrX2NsYXNzX251bWJlcl90b19zdHJpZHhbMzJdID0gewor CURVS19TVFJJRFhfRU1QVFlfU1RSSU5HLCAgLyogTk9ORSwgaW50ZW50aW9uYWxseSBlbXB0eSAq LworCURVS19TVFJJRFhfVUNfT0JKRUNULAorCURVS19TVFJJRFhfQVJSQVksCisJRFVLX1NUUklE WF9VQ19GVU5DVElPTiwKKwlEVUtfU1RSSURYX1VDX0FSR1VNRU5UUywKKwlEVUtfU1RSSURYX1VD X0JPT0xFQU4sCisJRFVLX1NUUklEWF9EQVRFLAorCURVS19TVFJJRFhfVUNfRVJST1IsCisJRFVL X1NUUklEWF9KU09OLAorCURVS19TVFJJRFhfTUFUSCwKKwlEVUtfU1RSSURYX1VDX05VTUJFUiwK KwlEVUtfU1RSSURYX1JFR19FWFAsCisJRFVLX1NUUklEWF9VQ19TVFJJTkcsCisJRFVLX1NUUklE WF9HTE9CQUwsCisJRFVLX1NUUklEWF9VQ19TWU1CT0wsCisJRFVLX1NUUklEWF9PQkpfRU5WLAor CURVS19TVFJJRFhfREVDX0VOViwKKwlEVUtfU1RSSURYX1VDX1BPSU5URVIsCisJRFVLX1NUUklE WF9VQ19USFJFQUQsCisJRFVLX1NUUklEWF9BUlJBWV9CVUZGRVIsCisJRFVLX1NUUklEWF9EQVRB X1ZJRVcsCisJRFVLX1NUUklEWF9JTlQ4X0FSUkFZLAorCURVS19TVFJJRFhfVUlOVDhfQVJSQVks CisJRFVLX1NUUklEWF9VSU5UOF9DTEFNUEVEX0FSUkFZLAorCURVS19TVFJJRFhfSU5UMTZfQVJS QVksCisJRFVLX1NUUklEWF9VSU5UMTZfQVJSQVksCisJRFVLX1NUUklEWF9JTlQzMl9BUlJBWSwK KwlEVUtfU1RSSURYX1VJTlQzMl9BUlJBWSwKKwlEVUtfU1RSSURYX0ZMT0FUMzJfQVJSQVksCisJ RFVLX1NUUklEWF9GTE9BVDY0X0FSUkFZLAorCURVS19TVFJJRFhfRU1QVFlfU1RSSU5HLCAgLyog VU5VU0VELCBpbnRlbnRpb25hbGx5IGVtcHR5ICovCisJRFVLX1NUUklEWF9FTVBUWV9TVFJJTkcs ICAvKiBVTlVTRUQsIGludGVudGlvbmFsbHkgZW1wdHkgKi8KK307CisvKgorICogIERlZmF1bHQg YWxsb2NhdGlvbiBmdW5jdGlvbnMuCisgKgorICogIEFzc3VtZXMgYmVoYXZpb3Igc3VjaCBhcyBt YWxsb2MgYWxsb3dpbmcgemVybyBzaXplLCB5aWVsZGluZworICogIGEgTlVMTCBvciBhIHVuaXF1 ZSBwb2ludGVyIHdoaWNoIGlzIGEgbm8tb3AgZm9yIGZyZWUuCisgKi8KKworLyogI2luY2x1ZGUg ZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX1BST1ZJREVfREVGQVVMVF9BTExPQ19GVU5DVElPTlMpCitEVUtfSU5URVJOQUwgdm9pZCAq ZHVrX2RlZmF1bHRfYWxsb2NfZnVuY3Rpb24odm9pZCAqdWRhdGEsIGR1a19zaXplX3Qgc2l6ZSkg eworCXZvaWQgKnJlczsKKwlEVUtfVU5SRUYodWRhdGEpOworCXJlcyA9IERVS19BTlNJX01BTExP QyhzaXplKTsKKwlEVUtfREREKERVS19ERERQUklOVCgiZGVmYXVsdCBhbGxvYyBmdW5jdGlvbjog JWx1IC0+ICVwIiwKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSwg KHZvaWQgKikgcmVzKSk7CisJcmV0dXJuIHJlczsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgKmR1 a19kZWZhdWx0X3JlYWxsb2NfZnVuY3Rpb24odm9pZCAqdWRhdGEsIHZvaWQgKnB0ciwgZHVrX3Np emVfdCBuZXdzaXplKSB7CisJdm9pZCAqcmVzOworCURVS19VTlJFRih1ZGF0YSk7CisJcmVzID0g RFVLX0FOU0lfUkVBTExPQyhwdHIsIG5ld3NpemUpOworCURVS19EREQoRFVLX0RERFBSSU5UKCJk ZWZhdWx0IHJlYWxsb2MgZnVuY3Rpb246ICVwICVsdSAtPiAlcCIsCisJICAgICAgICAgICAgICAg ICAgICAgKHZvaWQgKikgcHRyLCAodW5zaWduZWQgbG9uZykgbmV3c2l6ZSwgKHZvaWQgKikgcmVz KSk7CisJcmV0dXJuIHJlczsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlZmF1bHRfZnJl ZV9mdW5jdGlvbih2b2lkICp1ZGF0YSwgdm9pZCAqcHRyKSB7CisJRFVLX0RERChEVUtfREREUFJJ TlQoImRlZmF1bHQgZnJlZSBmdW5jdGlvbjogJXAiLCAodm9pZCAqKSBwdHIpKTsKKwlEVUtfVU5S RUYodWRhdGEpOworCURVS19BTlNJX0ZSRUUocHRyKTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9Q Uk9WSURFX0RFRkFVTFRfQUxMT0NfRlVOQ1RJT05TICovCisvKgorICogIEJ1ZmZlcgorICovCisK Ky8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworRFVL X0VYVEVSTkFMIHZvaWQgKmR1a19yZXNpemVfYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgsIGR1a19zaXplX3QgbmV3X3NpemUpIHsKKwlkdWtfaGJ1ZmZlcl9keW5hbWljICpo OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWggPSAoZHVrX2hidWZmZXJfZHlu YW1pYyAqKSBkdWtfcmVxdWlyZV9oYnVmZmVyKHRociwgaWR4KTsKKwlEVUtfQVNTRVJUKGggIT0g TlVMTCk7CisKKwlpZiAoIShEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQyhoKSAmJiAhRFVLX0hCVUZG RVJfSEFTX0VYVEVSTkFMKGgpKSkgeworCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfV1JP TkdfQlVGRkVSX1RZUEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKKwl9CisK KwkvKiBNYXhpbXVtIHNpemUgY2hlY2sgaXMgaGFuZGxlZCBieSBjYWxsZWUuICovCisJZHVrX2hi dWZmZXJfcmVzaXplKHRociwgaCwgbmV3X3NpemUpOworCisJcmV0dXJuIERVS19IQlVGRkVSX0RZ TkFNSUNfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaCk7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lk ICpkdWtfc3RlYWxfYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19z aXplX3QgKm91dF9zaXplKSB7CisJZHVrX2hidWZmZXJfZHluYW1pYyAqaDsKKwl2b2lkICpwdHI7 CisJZHVrX3NpemVfdCBzejsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwloID0g KGR1a19oYnVmZmVyX2R5bmFtaWMgKikgZHVrX3JlcXVpcmVfaGJ1ZmZlcih0aHIsIGlkeCk7CisJ RFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJaWYgKCEoRFVLX0hCVUZGRVJfSEFTX0RZTkFNSUMo aCkgJiYgIURVS19IQlVGRkVSX0hBU19FWFRFUk5BTChoKSkpIHsKKwkJRFVLX0VSUk9SX1RZUEUo dGhyLCBEVUtfU1RSX1dST05HX0JVRkZFUl9UWVBFKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVy biBOVUxMOyk7CisJfQorCisJLyogRm9yZ2V0IHRoZSBwcmV2aW91cyBhbGxvY2F0aW9uLCBzZXR0 aW5nIHNpemUgdG8gMCBhbmQgYWxsb2MgdG8KKwkgKiBOVUxMLiAgQ2FsbGVyIGlzIHJlc3BvbnNp YmxlIGZvciBmcmVlaW5nIHRoZSBwcmV2aW91cyBhbGxvY2F0aW9uLgorCSAqIEdldHRpbmcgdGhl IGFsbG9jYXRpb24gYW5kIGNsZWFyaW5nIGl0IGlzIGRvbmUgaW4gdGhlIHNhbWUgQVBJCisJICog Y2FsbCB0byBhdm9pZCBhbnkgY2hhbmNlIG9mIGEgcmVhbGxvYy4KKwkgKi8KKwlwdHIgPSBEVUtf SEJVRkZFUl9EWU5BTUlDX0dFVF9EQVRBX1BUUih0aHItPmhlYXAsIGgpOworCXN6ID0gRFVLX0hC VUZGRVJfRFlOQU1JQ19HRVRfU0laRShoKTsKKwlpZiAob3V0X3NpemUpIHsKKwkJKm91dF9zaXpl ID0gc3o7CisJfQorCURVS19IQlVGRkVSX0RZTkFNSUNfU0VUX0RBVEFfUFRSX05VTEwodGhyLT5o ZWFwLCBoKTsKKwlEVUtfSEJVRkZFUl9EWU5BTUlDX1NFVF9TSVpFKGgsIDApOworCisJcmV0dXJu IHB0cjsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2NvbmZpZ19idWZmZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX2lkeF90IGlkeCwgdm9pZCAqcHRyLCBkdWtfc2l6ZV90IGxlbikgeworCWR1 a19oYnVmZmVyX2V4dGVybmFsICpoOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CWggPSAoZHVrX2hidWZmZXJfZXh0ZXJuYWwgKikgZHVrX3JlcXVpcmVfaGJ1ZmZlcih0aHIsIGlk eCk7CisJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJaWYgKCFEVUtfSEJVRkZFUl9IQVNfRVhU RVJOQUwoaCkpIHsKKwkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX1dST05HX0JVRkZFUl9U WVBFKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0KKwlEVUtfQVNTRVJUKERVS19I QlVGRkVSX0hBU19EWU5BTUlDKGgpKTsKKworCURVS19IQlVGRkVSX0VYVEVSTkFMX1NFVF9EQVRB X1BUUih0aHItPmhlYXAsIGgsIHB0cik7CisJRFVLX0hCVUZGRVJfRVhURVJOQUxfU0VUX1NJWkUo aCwgbGVuKTsKK30KKy8qCisgKiAgQnl0ZWNvZGUgZHVtcC9sb2FkCisgKgorICogIFRoZSBieXRl Y29kZSBsb2FkIHByaW1pdGl2ZSBpcyBtb3JlIGltcG9ydGFudCBwZXJmb3JtYW5jZS13aXNlIHRo YW4gdGhlCisgKiAgZHVtcCBwcmltaXRpdmUuCisgKgorICogIFVubGlrZSBtb3N0IER1a3RhcGUg QVBJIGNhbGxzLCBieXRlY29kZSBkdW1wL2xvYWQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUKKyAq ICBtZW1vcnkgc2FmZSBmb3IgaW52YWxpZCBhcmd1bWVudHMgLSBjYWxsZXIgYmV3YXJlISAgVGhl cmUncyBsaXR0bGUgcG9pbnQKKyAqICBpbiB0cnlpbmcgdG8gYWNoaWV2ZSBtZW1vcnkgc2FmZXR5 IHVubGVzcyBieXRlY29kZSBpbnN0cnVjdGlvbnMgYXJlIGFsc28KKyAqICB2YWxpZGF0ZWQgd2hp Y2ggaXMgbm90IGVhc3kgdG8gZG8gd2l0aCBpbmRpcmVjdCByZWdpc3RlciByZWZlcmVuY2VzIGV0 Yy4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVk ICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQllURUNPREVfRFVNUF9TVVBQT1JUKQorCisjZGVm aW5lIERVS19fU0VSX01BUktFUiAgMHhiZgorI2RlZmluZSBEVUtfX1NFUl9TVFJJTkcgIDB4MDAK KyNkZWZpbmUgRFVLX19TRVJfTlVNQkVSICAweDAxCisjZGVmaW5lIERVS19fQllURUNPREVfSU5J VElBTF9BTExPQyAyNTYKKyNkZWZpbmUgRFVLX19OT19GT1JNQUxTICAweGZmZmZmZmZmVUwKKwor LyoKKyAqICBEdW1wL2xvYWQgaGVscGVycywgeHh4X3JhdygpIGhlbHBlcnMgZG8gbm8gYnVmZmVy IGNoZWNrcworICovCisKK0RVS19MT0NBTCBkdWtfdWludDhfdCAqZHVrX19sb2FkX3N0cmluZ19y YXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQ4X3QgKnApIHsKKwlkdWtfdWludDMyX3QgbGVu OworCisJbGVuID0gRFVLX1JBV19SRUFEX1UzMl9CRShwKTsKKwlkdWtfcHVzaF9sc3RyaW5nKHRo ciwgKGNvbnN0IGNoYXIgKikgcCwgbGVuKTsKKwlwICs9IGxlbjsKKwlyZXR1cm4gcDsKK30KKwor RFVLX0xPQ0FMIGR1a191aW50OF90ICpkdWtfX2xvYWRfYnVmZmVyX3JhdyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfdWludDhfdCAqcCkgeworCWR1a191aW50MzJfdCBsZW47CisJZHVrX3VpbnQ4X3Qg KmJ1ZjsKKworCWxlbiA9IERVS19SQVdfUkVBRF9VMzJfQkUocCk7CisJYnVmID0gKGR1a191aW50 OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhyLCAoZHVrX3NpemVfdCkgbGVu KTsKKwlEVUtfQVNTRVJUKGJ1ZiAhPSBOVUxMKTsKKwlkdWtfbWVtY3B5KCh2b2lkICopIGJ1Ziwg KGNvbnN0IHZvaWQgKikgcCwgKHNpemVfdCkgbGVuKTsKKwlwICs9IGxlbjsKKwlyZXR1cm4gcDsK K30KKworRFVLX0xPQ0FMIGR1a191aW50OF90ICpkdWtfX2R1bXBfaHN0cmluZ19yYXcoZHVrX3Vp bnQ4X3QgKnAsIGR1a19oc3RyaW5nICpoKSB7CisJZHVrX3NpemVfdCBsZW47CisJZHVrX3VpbnQz Ml90IHRtcDMyOworCisJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJbGVuID0gRFVLX0hTVFJJ TkdfR0VUX0JZVEVMRU4oaCk7CisJRFVLX0FTU0VSVChsZW4gPD0gMHhmZmZmZmZmZlVMKTsgIC8q IHN0cmluZyBsaW1pdHMgKi8KKwl0bXAzMiA9IChkdWtfdWludDMyX3QpIGxlbjsKKwlEVUtfUkFX X1dSSVRFX1UzMl9CRShwLCB0bXAzMik7CisJZHVrX21lbWNweSgodm9pZCAqKSBwLAorCSAgICAg ICAgICAgKGNvbnN0IHZvaWQgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaCksCisJICAgICAgICAg ICBsZW4pOworCXAgKz0gbGVuOworCXJldHVybiBwOworfQorCitEVUtfTE9DQUwgZHVrX3VpbnQ4 X3QgKmR1a19fZHVtcF9oYnVmZmVyX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludDhfdCAq cCwgZHVrX2hidWZmZXIgKmgpIHsKKwlkdWtfc2l6ZV90IGxlbjsKKwlkdWtfdWludDMyX3QgdG1w MzI7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7 CisJRFVLX1VOUkVGKHRocik7CisKKwlsZW4gPSBEVUtfSEJVRkZFUl9HRVRfU0laRShoKTsKKwlE VUtfQVNTRVJUKGxlbiA8PSAweGZmZmZmZmZmVUwpOyAgLyogYnVmZmVyIGxpbWl0cyAqLworCXRt cDMyID0gKGR1a191aW50MzJfdCkgbGVuOworCURVS19SQVdfV1JJVEVfVTMyX0JFKHAsIHRtcDMy KTsKKwkvKiBXaGVuIGxlbiA9PSAwLCBidWZmZXIgZGF0YSBwb2ludGVyIG1heSBiZSBOVUxMLiAq LworCWR1a19tZW1jcHlfdW5zYWZlKCh2b2lkICopIHAsCisJICAgICAgICAgICAgICAgICAgKGNv bnN0IHZvaWQgKikgRFVLX0hCVUZGRVJfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaCksCisJICAg ICAgICAgICAgICAgICAgbGVuKTsKKwlwICs9IGxlbjsKKwlyZXR1cm4gcDsKK30KKworRFVLX0xP Q0FMIGR1a191aW50OF90ICpkdWtfX2R1bXBfc3RyaW5nX3Byb3AoZHVrX2h0aHJlYWQgKnRociwg ZHVrX3VpbnQ4X3QgKnAsIGR1a19idWZ3cml0ZXJfY3R4ICpid19jdHgsIGR1a19ob2JqZWN0ICpm dW5jLCBkdWtfc21hbGxfdWludF90IHN0cmlkeCkgeworCWR1a19oc3RyaW5nICpoX3N0cjsKKwlk dWtfdHZhbCAqdHY7CisKKwl0diA9IGR1a19ob2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnlfdHZh bF9wdHIodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgZnVuYywgRFVLX0hUSFJFQURfR0VUX1NU UklORyh0aHIsIHN0cmlkeCkpOworCWlmICh0diAhPSBOVUxMICYmIERVS19UVkFMX0lTX1NUUklO Ryh0dikpIHsKKwkJaF9zdHIgPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsKKwkJRFVLX0FTU0VS VChoX3N0ciAhPSBOVUxMKTsKKwl9IGVsc2UgeworCQloX3N0ciA9IERVS19IVEhSRUFEX1NUUklO R19FTVBUWV9TVFJJTkcodGhyKTsKKwkJRFVLX0FTU0VSVChoX3N0ciAhPSBOVUxMKTsKKwl9CisJ RFVLX0FTU0VSVChEVUtfSFNUUklOR19NQVhfQllURUxFTiA8PSAweDdmZmZmZmZmVUwpOyAgLyog ZW5zdXJlcyBubyBvdmVyZmxvdyAqLworCXAgPSBEVUtfQldfRU5TVVJFX1JBVyh0aHIsIGJ3X2N0 eCwgNFUgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX3N0ciksIHApOworCXAgPSBkdWtfX2R1 bXBfaHN0cmluZ19yYXcocCwgaF9zdHIpOworCXJldHVybiBwOworfQorCitEVUtfTE9DQUwgZHVr X3VpbnQ4X3QgKmR1a19fZHVtcF9idWZmZXJfcHJvcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWlu dDhfdCAqcCwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3X2N0eCwgZHVrX2hvYmplY3QgKmZ1bmMsIGR1 a19zbWFsbF91aW50X3Qgc3RyaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCisJdHYgPSBkdWtfaG9i amVjdF9maW5kX2V4aXN0aW5nX2VudHJ5X3R2YWxfcHRyKHRoci0+aGVhcCwgKGR1a19ob2JqZWN0 ICopIGZ1bmMsIERVS19IVEhSRUFEX0dFVF9TVFJJTkcodGhyLCBzdHJpZHgpKTsKKwlpZiAodHYg IT0gTlVMTCAmJiBEVUtfVFZBTF9JU19CVUZGRVIodHYpKSB7CisJCWR1a19oYnVmZmVyICpoX2J1 ZjsKKwkJaF9idWYgPSBEVUtfVFZBTF9HRVRfQlVGRkVSKHR2KTsKKwkJRFVLX0FTU0VSVChoX2J1 ZiAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChEVUtfSEJVRkZFUl9NQVhfQllURUxFTiA8PSAweDdm ZmZmZmZmVUwpOyAgLyogZW5zdXJlcyBubyBvdmVyZmxvdyAqLworCQlwID0gRFVLX0JXX0VOU1VS RV9SQVcodGhyLCBid19jdHgsIDRVICsgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaF9idWYpLCBwKTsK KwkJcCA9IGR1a19fZHVtcF9oYnVmZmVyX3Jhdyh0aHIsIHAsIGhfYnVmKTsKKwl9IGVsc2Ugewor CQlwID0gRFVLX0JXX0VOU1VSRV9SQVcodGhyLCBid19jdHgsIDRVLCBwKTsKKwkJRFVLX1JBV19X UklURV9VMzJfQkUocCwgMCk7CisJfQorCXJldHVybiBwOworfQorCitEVUtfTE9DQUwgZHVrX3Vp bnQ4X3QgKmR1a19fZHVtcF91aW50MzJfcHJvcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludDhf dCAqcCwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3X2N0eCwgZHVrX2hvYmplY3QgKmZ1bmMsIGR1a19z bWFsbF91aW50X3Qgc3RyaWR4LCBkdWtfdWludDMyX3QgZGVmX3ZhbHVlKSB7CisJZHVrX3R2YWwg KnR2OworCWR1a191aW50MzJfdCB2YWw7CisKKwl0diA9IGR1a19ob2JqZWN0X2ZpbmRfZXhpc3Rp bmdfZW50cnlfdHZhbF9wdHIodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgZnVuYywgRFVLX0hU SFJFQURfR0VUX1NUUklORyh0aHIsIHN0cmlkeCkpOworCWlmICh0diAhPSBOVUxMICYmIERVS19U VkFMX0lTX05VTUJFUih0dikpIHsKKwkJdmFsID0gKGR1a191aW50MzJfdCkgRFVLX1RWQUxfR0VU X05VTUJFUih0dik7CisJfSBlbHNlIHsKKwkJdmFsID0gZGVmX3ZhbHVlOworCX0KKwlwID0gRFVL X0JXX0VOU1VSRV9SQVcodGhyLCBid19jdHgsIDRVLCBwKTsKKwlEVUtfUkFXX1dSSVRFX1UzMl9C RShwLCB2YWwpOworCXJldHVybiBwOworfQorCitEVUtfTE9DQUwgZHVrX3VpbnQ4X3QgKmR1a19f ZHVtcF92YXJtYXAoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQ4X3QgKnAsIGR1a19idWZ3cml0 ZXJfY3R4ICpid19jdHgsIGR1a19ob2JqZWN0ICpmdW5jKSB7CisJZHVrX3R2YWwgKnR2OworCisJ dHYgPSBkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5X3R2YWxfcHRyKHRoci0+aGVhcCwg KGR1a19ob2JqZWN0ICopIGZ1bmMsIERVS19IVEhSRUFEX1NUUklOR19JTlRfVkFSTUFQKHRocikp OworCWlmICh0diAhPSBOVUxMICYmIERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJZHVrX2hv YmplY3QgKmg7CisJCWR1a191aW50X2Zhc3QzMl90IGk7CisKKwkJaCA9IERVS19UVkFMX0dFVF9P QkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKwkJLyogV2Uga25vdyBfVmFy bWFwIG9ubHkgaGFzIG93biBwcm9wZXJ0aWVzIHNvIHdhbGsgcHJvcGVydHkKKwkJICogdGFibGUg ZGlyZWN0bHkuICBXZSBhbHNvIGtub3cgX1Zhcm1hcCBpcyBkZW5zZSBhbmQgYWxsCisJCSAqIHZh bHVlcyBhcmUgbnVtYmVyczsgYXNzZXJ0IGZvciB0aGVzZS4gIEdDIGFuZCBmaW5hbGl6ZXJzCisJ CSAqIHNob3VsZG4ndCBhZmZlY3QgX1Zhcm1hcCBzbyBzaWRlIGVmZmVjdHMgc2hvdWxkIGJlIGZp bmUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgKGR1a191aW50X2Zhc3QzMl90KSBEVUtfSE9C SkVDVF9HRVRfRU5FWFQoaCk7IGkrKykgeworCQkJZHVrX2hzdHJpbmcgKmtleTsKKwkJCWR1a190 dmFsICp0dl92YWw7CisJCQlkdWtfdWludDMyX3QgdmFsOworCisJCQlrZXkgPSBEVUtfSE9CSkVD VF9FX0dFVF9LRVkodGhyLT5oZWFwLCBoLCBpKTsKKwkJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwp OyAgLyogX1Zhcm1hcCBpcyBkZW5zZSAqLworCQkJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfRV9T TE9UX0lTX0FDQ0VTU09SKHRoci0+aGVhcCwgaCwgaSkpOworCQkJdHZfdmFsID0gRFVLX0hPQkpF Q1RfRV9HRVRfVkFMVUVfVFZBTF9QVFIodGhyLT5oZWFwLCBoLCBpKTsKKwkJCURVS19BU1NFUlQo dHZfdmFsICE9IE5VTEwpOworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19OVU1CRVIodHZfdmFs KSk7ICAvKiBrbm93biB0byBiZSBudW1iZXI7IGluIGZhY3QgYW4gaW50ZWdlciAqLworI2lmIGRl ZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19GQVNUSU5U KHR2X3ZhbCkpOworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9HRVRfRkFTVElOVCh0dl92YWwpID09 IChkdWtfaW50NjRfdCkgRFVLX1RWQUxfR0VUX0ZBU1RJTlRfVTMyKHR2X3ZhbCkpOyAgLyoga25v d24gdG8gYmUgMzItYml0ICovCisJCQl2YWwgPSBEVUtfVFZBTF9HRVRfRkFTVElOVF9VMzIodHZf dmFsKTsKKyNlbHNlCisJCQl2YWwgPSAoZHVrX3VpbnQzMl90KSBEVUtfVFZBTF9HRVRfTlVNQkVS KHR2X3ZhbCk7CisjZW5kaWYKKworCQkJRFVLX0FTU0VSVChEVUtfSFNUUklOR19NQVhfQllURUxF TiA8PSAweDdmZmZmZmZmVUwpOyAgLyogZW5zdXJlcyBubyBvdmVyZmxvdyAqLworCQkJcCA9IERV S19CV19FTlNVUkVfUkFXKHRociwgYndfY3R4LCA0VSArIERVS19IU1RSSU5HX0dFVF9CWVRFTEVO KGtleSkgKyA0VSwgcCk7CisJCQlwID0gZHVrX19kdW1wX2hzdHJpbmdfcmF3KHAsIGtleSk7CisJ CQlEVUtfUkFXX1dSSVRFX1UzMl9CRShwLCB2YWwpOworCQl9CisJfQorCXAgPSBEVUtfQldfRU5T VVJFX1JBVyh0aHIsIGJ3X2N0eCwgNFUsIHApOworCURVS19SQVdfV1JJVEVfVTMyX0JFKHAsIDAp OyAgLyogZW5kIG9mIF9WYXJtYXAgKi8KKwlyZXR1cm4gcDsKK30KKworRFVLX0xPQ0FMIGR1a191 aW50OF90ICpkdWtfX2R1bXBfZm9ybWFscyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludDhfdCAq cCwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3X2N0eCwgZHVrX2hvYmplY3QgKmZ1bmMpIHsKKwlkdWtf dHZhbCAqdHY7CisKKwl0diA9IGR1a19ob2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnlfdHZhbF9w dHIodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgZnVuYywgRFVLX0hUSFJFQURfU1RSSU5HX0lO VF9GT1JNQUxTKHRocikpOworCWlmICh0diAhPSBOVUxMICYmIERVS19UVkFMX0lTX09CSkVDVCh0 dikpIHsKKwkJZHVrX2hhcnJheSAqaDsKKwkJZHVrX3VpbnQzMl90IGk7CisKKwkJLyogSGVyZSB3 ZSByZWx5IG9uIF9Gb3JtYWxzIGJlaW5nIGEgZGVuc2UgYXJyYXkgY29udGFpbmluZworCQkgKiBz dHJpbmdzLiAgVGhpcyBzaG91bGQgYmUgdGhlIGNhc2UgdW5sZXNzIF9Gb3JtYWxzIGhhcyBiZWVu CisJCSAqIHR3ZWFrZWQgYnkgdGhlIGFwcGxpY2F0aW9uICh3aGljaCB3ZSBkb24ndCBzdXBwb3J0 IHJpZ2h0CisJCSAqIG5vdykuCisJCSAqLworCQloID0gKGR1a19oYXJyYXkgKikgRFVLX1RWQUxf R0VUX09CSkVDVCh0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChE VUtfSE9CSkVDVF9JU19BUlJBWSgoZHVrX2hvYmplY3QgKikgaCkpOworCQlEVUtfQVNTRVJUKGgt Pmxlbmd0aCA8PSBEVUtfSE9CSkVDVF9HRVRfQVNJWkUoKGR1a19ob2JqZWN0ICopIGgpKTsKKwor CQlwID0gRFVLX0JXX0VOU1VSRV9SQVcodGhyLCBid19jdHgsIDRVLCBwKTsKKwkJRFVLX0FTU0VS VChoLT5sZW5ndGggIT0gRFVLX19OT19GT1JNQUxTKTsgIC8qIGxpbWl0cyAqLworCQlEVUtfUkFX X1dSSVRFX1UzMl9CRShwLCBoLT5sZW5ndGgpOworCisJCWZvciAoaSA9IDA7IGkgPCBoLT5sZW5n dGg7IGkrKykgeworCQkJZHVrX3R2YWwgKnR2X3ZhbDsKKwkJCWR1a19oc3RyaW5nICp2YXJuYW1l OworCisJCQl0dl92YWwgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCAo ZHVrX2hvYmplY3QgKikgaCwgaSk7CisJCQlEVUtfQVNTRVJUKHR2X3ZhbCAhPSBOVUxMKTsKKwkJ CURVS19BU1NFUlQoRFVLX1RWQUxfSVNfU1RSSU5HKHR2X3ZhbCkpOworCisJCQl2YXJuYW1lID0g RFVLX1RWQUxfR0VUX1NUUklORyh0dl92YWwpOworCQkJRFVLX0FTU0VSVCh2YXJuYW1lICE9IE5V TEwpOworCQkJRFVLX0FTU0VSVChEVUtfSFNUUklOR19HRVRfQllURUxFTih2YXJuYW1lKSA+PSAx KTsKKworCQkJRFVLX0FTU0VSVChEVUtfSFNUUklOR19NQVhfQllURUxFTiA8PSAweDdmZmZmZmZm VUwpOyAgLyogZW5zdXJlcyBubyBvdmVyZmxvdyAqLworCQkJcCA9IERVS19CV19FTlNVUkVfUkFX KHRociwgYndfY3R4LCA0VSArIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKHZhcm5hbWUpLCBwKTsK KwkJCXAgPSBkdWtfX2R1bXBfaHN0cmluZ19yYXcocCwgdmFybmFtZSk7CisJCX0KKwl9IGVsc2Ug eworCQlEVUtfREQoRFVLX0REUFJJTlQoImR1bXBpbmcgZnVuY3Rpb24gd2l0aG91dCBfRm9ybWFs cywgZW1pdCBtYXJrZXIgdG8gaW5kaWNhdGUgbWlzc2luZyBfRm9ybWFscyIpKTsKKwkJcCA9IERV S19CV19FTlNVUkVfUkFXKHRociwgYndfY3R4LCA0VSwgcCk7CisJCURVS19SQVdfV1JJVEVfVTMy X0JFKHAsIERVS19fTk9fRk9STUFMUyk7ICAvKiBtYXJrZXI6IG5vIGZvcm1hbHMgKi8KKwl9CisJ cmV0dXJuIHA7Cit9CisKK3N0YXRpYyBkdWtfdWludDhfdCAqZHVrX19kdW1wX2Z1bmMoZHVrX2h0 aHJlYWQgKnRociwgZHVrX2hjb21wZnVuYyAqZnVuYywgZHVrX2J1ZndyaXRlcl9jdHggKmJ3X2N0 eCwgZHVrX3VpbnQ4X3QgKnApIHsKKwlkdWtfdHZhbCAqdHYsICp0dl9lbmQ7CisJZHVrX2luc3Ry X3QgKmlucywgKmluc19lbmQ7CisJZHVrX2hvYmplY3QgKipmbiwgKipmbl9lbmQ7CisJZHVrX2hz dHJpbmcgKmhfc3RyOworCWR1a191aW50MzJfdCBjb3VudF9pbnN0cjsKKwlkdWtfdWludDMyX3Qg dG1wMzI7CisJZHVrX3VpbnQxNl90IHRtcDE2OworCWR1a19kb3VibGVfdCBkOworCisJRFVLX0RE KERVS19ERFBSSU5UKCJkdW1waW5nIGZ1bmN0aW9uICVwIHRvICVwOiAiCisJICAgICAgICAgICAg ICAgICAgICJjb25zdHM9WyVwLCVwWyAoJWxkIGJ5dGVzLCAlbGQgaXRlbXMpLCAiCisJICAgICAg ICAgICAgICAgICAgICJmdW5jcz1bJXAsJXBbICglbGQgYnl0ZXMsICVsZCBpdGVtcyksICIKKwkg ICAgICAgICAgICAgICAgICAgImNvZGU9WyVwLCVwWyAoJWxkIGJ5dGVzLCAlbGQgaXRlbXMpIiwK KwkgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgZnVuYywKKwkgICAgICAgICAgICAgICAgICAg KHZvaWQgKikgcCwKKwkgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgRFVLX0hDT01QRlVOQ19H RVRfQ09OU1RTX0JBU0UodGhyLT5oZWFwLCBmdW5jKSwKKwkgICAgICAgICAgICAgICAgICAgKHZv aWQgKikgRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0VORCh0aHItPmhlYXAsIGZ1bmMpLAorCSAg ICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX1NJWkUodGhy LT5oZWFwLCBmdW5jKSwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIERVS19IQ09NUEZVTkNf R0VUX0NPTlNUU19DT1VOVCh0aHItPmhlYXAsIGZ1bmMpLAorCSAgICAgICAgICAgICAgICAgICAo dm9pZCAqKSBEVUtfSENPTVBGVU5DX0dFVF9GVU5DU19CQVNFKHRoci0+aGVhcCwgZnVuYyksCisJ ICAgICAgICAgICAgICAgICAgICh2b2lkICopIERVS19IQ09NUEZVTkNfR0VUX0ZVTkNTX0VORCh0 aHItPmhlYXAsIGZ1bmMpLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0hDT01QRlVO Q19HRVRfRlVOQ1NfU0laRSh0aHItPmhlYXAsIGZ1bmMpLAorCSAgICAgICAgICAgICAgICAgICAo bG9uZykgRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1NfQ09VTlQodGhyLT5oZWFwLCBmdW5jKSwKKwkg ICAgICAgICAgICAgICAgICAgKHZvaWQgKikgRFVLX0hDT01QRlVOQ19HRVRfQ09ERV9CQVNFKHRo ci0+aGVhcCwgZnVuYyksCisJICAgICAgICAgICAgICAgICAgICh2b2lkICopIERVS19IQ09NUEZV TkNfR0VUX0NPREVfRU5EKHRoci0+aGVhcCwgZnVuYyksCisJICAgICAgICAgICAgICAgICAgIChs b25nKSBEVUtfSENPTVBGVU5DX0dFVF9DT0RFX1NJWkUodGhyLT5oZWFwLCBmdW5jKSwKKwkgICAg ICAgICAgICAgICAgICAgKGxvbmcpIERVS19IQ09NUEZVTkNfR0VUX0NPREVfQ09VTlQodGhyLT5o ZWFwLCBmdW5jKSkpOworCisJRFVLX0FTU0VSVChEVUtfVVNFX0VTQkNfTUFYX0JZVEVTIDw9IDB4 N2ZmZmZmZmZVTCk7ICAvKiBlbnN1cmVzIG5vIG92ZXJmbG93ICovCisJY291bnRfaW5zdHIgPSAo ZHVrX3VpbnQzMl90KSBEVUtfSENPTVBGVU5DX0dFVF9DT0RFX0NPVU5UKHRoci0+aGVhcCwgZnVu Yyk7CisJcCA9IERVS19CV19FTlNVUkVfUkFXKHRociwgYndfY3R4LCAzVSAqIDRVICsgMlUgKiAy VSArIDNVICogNFUgKyBjb3VudF9pbnN0ciAqIDRVLCBwKTsKKworCS8qIEZpeGVkIGhlYWRlciBp bmZvLiAqLworCXRtcDMyID0gY291bnRfaW5zdHI7CisJRFVLX1JBV19XUklURV9VMzJfQkUocCwg dG1wMzIpOworCXRtcDMyID0gKGR1a191aW50MzJfdCkgRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RT X0NPVU5UKHRoci0+aGVhcCwgZnVuYyk7CisJRFVLX1JBV19XUklURV9VMzJfQkUocCwgdG1wMzIp OworCXRtcDMyID0gKGR1a191aW50MzJfdCkgRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1NfQ09VTlQo dGhyLT5oZWFwLCBmdW5jKTsKKwlEVUtfUkFXX1dSSVRFX1UzMl9CRShwLCB0bXAzMik7CisJdG1w MTYgPSBmdW5jLT5ucmVnczsKKwlEVUtfUkFXX1dSSVRFX1UxNl9CRShwLCB0bXAxNik7CisJdG1w MTYgPSBmdW5jLT5uYXJnczsKKwlEVUtfUkFXX1dSSVRFX1UxNl9CRShwLCB0bXAxNik7CisjaWYg ZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJdG1wMzIgPSBmdW5jLT5zdGFydF9s aW5lOworCURVS19SQVdfV1JJVEVfVTMyX0JFKHAsIHRtcDMyKTsKKwl0bXAzMiA9IGZ1bmMtPmVu ZF9saW5lOworCURVS19SQVdfV1JJVEVfVTMyX0JFKHAsIHRtcDMyKTsKKyNlbHNlCisJRFVLX1JB V19XUklURV9VMzJfQkUocCwgMCk7CisJRFVLX1JBV19XUklURV9VMzJfQkUocCwgMCk7CisjZW5k aWYKKwl0bXAzMiA9IERVS19IRUFQSERSX0dFVF9GTEFHUygoZHVrX2hlYXBoZHIgKikgZnVuYyk7 ICAvKiBtYXNrcyBmbGFncywgb25seSBkdWtfaG9iamVjdCBmbGFncyAqLworCXRtcDMyICY9IH4o RFVLX0hPQkpFQ1RfRkxBR19IQVZFX0ZJTkFMSVpFUik7ICAvKiBmaW5hbGl6ZXIgZmxhZyBpcyBs b3N0ICovCisJRFVLX1JBV19XUklURV9VMzJfQkUocCwgdG1wMzIpOworCisJLyogQnl0ZWNvZGUg aW5zdHJ1Y3Rpb25zOiBlbmRpYW4gY29udmVyc2lvbiBuZWVkZWQgdW5sZXNzCisJICogcGxhdGZv cm0gaXMgYmlnIGVuZGlhbi4KKwkgKi8KKwlpbnMgPSBEVUtfSENPTVBGVU5DX0dFVF9DT0RFX0JB U0UodGhyLT5oZWFwLCBmdW5jKTsKKwlpbnNfZW5kID0gRFVLX0hDT01QRlVOQ19HRVRfQ09ERV9F TkQodGhyLT5oZWFwLCBmdW5jKTsKKwlEVUtfQVNTRVJUKChkdWtfc2l6ZV90KSAoaW5zX2VuZCAt IGlucykgPT0gKGR1a19zaXplX3QpIGNvdW50X2luc3RyKTsKKyNpZiBkZWZpbmVkKERVS19VU0Vf SU5URUdFUl9CRSkKKwlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSBwLCAoY29uc3Qgdm9pZCAq KSBpbnMsIChzaXplX3QpIChpbnNfZW5kIC0gaW5zKSk7CisJcCArPSAoc2l6ZV90KSAoaW5zX2Vu ZCAtIGlucyk7CisjZWxzZQorCXdoaWxlIChpbnMgIT0gaW5zX2VuZCkgeworCQl0bXAzMiA9IChk dWtfdWludDMyX3QpICgqaW5zKTsKKwkJRFVLX1JBV19XUklURV9VMzJfQkUocCwgdG1wMzIpOwor CQlpbnMrKzsKKwl9CisjZW5kaWYKKworCS8qIENvbnN0YW50czogdmFyaWFibGUgc2l6ZSBlbmNv ZGluZy4gKi8KKwl0diA9IERVS19IQ09NUEZVTkNfR0VUX0NPTlNUU19CQVNFKHRoci0+aGVhcCwg ZnVuYyk7CisJdHZfZW5kID0gRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0VORCh0aHItPmhlYXAs IGZ1bmMpOworCXdoaWxlICh0diAhPSB0dl9lbmQpIHsKKwkJLyogY29uc3RhbnRzIGFyZSBzdHJp bmdzIG9yIG51bWJlcnMgbm93ICovCisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfU1RSSU5HKHR2 KSB8fAorCQkgICAgICAgICAgIERVS19UVkFMX0lTX05VTUJFUih0dikpOworCisJCWlmIChEVUtf VFZBTF9JU19TVFJJTkcodHYpKSB7CisJCQloX3N0ciA9IERVS19UVkFMX0dFVF9TVFJJTkcodHYp OworCQkJRFVLX0FTU0VSVChoX3N0ciAhPSBOVUxMKTsKKwkJCURVS19BU1NFUlQoRFVLX0hTVFJJ TkdfTUFYX0JZVEVMRU4gPD0gMHg3ZmZmZmZmZlVMKTsgIC8qIGVuc3VyZXMgbm8gb3ZlcmZsb3cg Ki8KKwkJCXAgPSBEVUtfQldfRU5TVVJFX1JBVyh0aHIsIGJ3X2N0eCwgMVUgKyA0VSArIERVS19I U1RSSU5HX0dFVF9CWVRFTEVOKGhfc3RyKSwgcCk7CisJCQkqcCsrID0gRFVLX19TRVJfU1RSSU5H OworCQkJcCA9IGR1a19fZHVtcF9oc3RyaW5nX3JhdyhwLCBoX3N0cik7CisJCX0gZWxzZSB7CisJ CQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05VTUJFUih0dikpOworCQkJcCA9IERVS19CV19FTlNV UkVfUkFXKHRociwgYndfY3R4LCAxVSArIDhVLCBwKTsKKwkJCSpwKysgPSBEVUtfX1NFUl9OVU1C RVI7CisJCQlkID0gRFVLX1RWQUxfR0VUX05VTUJFUih0dik7CisJCQlEVUtfUkFXX1dSSVRFX0RP VUJMRV9CRShwLCBkKTsKKwkJfQorCQl0disrOworCX0KKworCS8qIElubmVyIGZ1bmN0aW9ucyBy ZWN1cnNpdmVseS4gKi8KKwlmbiA9IChkdWtfaG9iamVjdCAqKikgRFVLX0hDT01QRlVOQ19HRVRf RlVOQ1NfQkFTRSh0aHItPmhlYXAsIGZ1bmMpOworCWZuX2VuZCA9IChkdWtfaG9iamVjdCAqKikg RFVLX0hDT01QRlVOQ19HRVRfRlVOQ1NfRU5EKHRoci0+aGVhcCwgZnVuYyk7CisJd2hpbGUgKGZu ICE9IGZuX2VuZCkgeworCQkvKiBYWFg6IFRoaXMgY2F1c2VzIHJlY3Vyc2lvbiB1cCB0byBpbm5l ciBmdW5jdGlvbiBkZXB0aAorCQkgKiB3aGljaCBpcyBub3JtYWxseSBub3QgYW4gaXNzdWUsIGUu Zy4gbWFyay1hbmQtc3dlZXAgdXNlcworCQkgKiBhIHJlY3Vyc2lvbiBsaW1pdGVyIHRvIGF2b2lk IEMgc3RhY2sgaXNzdWVzLiAgQXZvaWRpbmcKKwkJICogdGhpcyB3b3VsZCBtZWFuIHNvbWUgc29y dCBvZiBhIHdvcmsgbGlzdCBvciBqdXN0IHJlZnVzaW5nCisJCSAqIHRvIHNlcmlhbGl6ZSBkZWVw IGZ1bmN0aW9ucy4KKwkJICovCisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMo KmZuKSk7CisJCXAgPSBkdWtfX2R1bXBfZnVuYyh0aHIsIChkdWtfaGNvbXBmdW5jICopICpmbiwg YndfY3R4LCBwKTsKKwkJZm4rKzsKKwl9CisKKwkvKiBMZXhlbnYgYW5kIHZhcmVudiBhcmUgbm90 IGR1bXBlZC4gKi8KKworCS8qIE9iamVjdCBleHRyYSBwcm9wZXJ0aWVzLgorCSAqCisJICogVGhl cmUgYXJlIHNvbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIGZ1bmN0aW9uIHRlbXBsYXRlcyBhbmQgZnVu Y3Rpb25zLgorCSAqIEZvciBleGFtcGxlLCBmdW5jdGlvbiB0ZW1wbGF0ZXMgZG9uJ3QgaGF2ZSAu bGVuZ3RoIGFuZCBuYXJncyBpcworCSAqIG5vcm1hbGx5IHVzZWQgdG8gaW5zdGFudGlhdGUgdGhl IGZ1bmN0aW9ucy4KKwkgKi8KKworCXAgPSBkdWtfX2R1bXBfdWludDMyX3Byb3AodGhyLCBwLCBi d19jdHgsIChkdWtfaG9iamVjdCAqKSBmdW5jLCBEVUtfU1RSSURYX0xFTkdUSCwgKGR1a191aW50 MzJfdCkgZnVuYy0+bmFyZ3MpOworI2lmIGRlZmluZWQoRFVLX1VTRV9GVU5DX05BTUVfUFJPUEVS VFkpCisJcCA9IGR1a19fZHVtcF9zdHJpbmdfcHJvcCh0aHIsIHAsIGJ3X2N0eCwgKGR1a19ob2Jq ZWN0ICopIGZ1bmMsIERVS19TVFJJRFhfTkFNRSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19V U0VfRlVOQ19GSUxFTkFNRV9QUk9QRVJUWSkKKwlwID0gZHVrX19kdW1wX3N0cmluZ19wcm9wKHRo ciwgcCwgYndfY3R4LCAoZHVrX2hvYmplY3QgKikgZnVuYywgRFVLX1NUUklEWF9GSUxFX05BTUUp OworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX1BDMkxJTkUpCisJcCA9IGR1a19fZHVtcF9i dWZmZXJfcHJvcCh0aHIsIHAsIGJ3X2N0eCwgKGR1a19ob2JqZWN0ICopIGZ1bmMsIERVS19TVFJJ RFhfSU5UX1BDMkxJTkUpOworI2VuZGlmCisJcCA9IGR1a19fZHVtcF92YXJtYXAodGhyLCBwLCBi d19jdHgsIChkdWtfaG9iamVjdCAqKSBmdW5jKTsKKwlwID0gZHVrX19kdW1wX2Zvcm1hbHModGhy LCBwLCBid19jdHgsIChkdWtfaG9iamVjdCAqKSBmdW5jKTsKKworCURVS19ERChEVUtfRERQUklO VCgic2VyaWFsaXplZCBmdW5jdGlvbiAlcCAtPiBmaW5hbCBwb2ludGVyICVwIiwgKHZvaWQgKikg ZnVuYywgKHZvaWQgKikgcCkpOworCisJcmV0dXJuIHA7Cit9CisKKy8qIExvYWQgYSBmdW5jdGlv biBmcm9tIGJ5dGVjb2RlLiAgVGhlIGZ1bmN0aW9uIG9iamVjdCByZXR1cm5lZCBoZXJlIG11c3QK KyAqIG1hdGNoIHdoYXQgaXMgY3JlYXRlZCBieSBkdWtfanNfcHVzaF9jbG9zdXJlKCkgd2l0aCBy ZXNwZWN0IHRvIGl0cyBmbGFncywKKyAqIHByb3BlcnRpZXMsIGV0Yy4KKyAqCisgKiBOT1RFOiB0 aGVyZSBhcmUgaW50ZW50aW9uYWxseSBubyBpbnB1dCBidWZmZXIgbGVuZ3RoIC8gYm91bmQgY2hl Y2tzLgorICogQWRkaW5nIHRoZW0gd291bGQgYmUgZWFzeSBidXQgd291bGRuJ3QgZW5zdXJlIG1l bW9yeSBzYWZldHkgYXMgdW50cnVzdGVkCisgKiBvciBicm9rZW4gYnl0ZWNvZGUgaXMgdW5zYWZl IGR1cmluZyBleGVjdXRpb24gdW5sZXNzIHRoZSBvcGNvZGVzIHRoZW1zZWx2ZXMKKyAqIGFyZSB2 YWxpZGF0ZWQgKHdoaWNoIGlzIHF1aXRlIGNvbXBsZXgsIGVzcGVjaWFsbHkgZm9yIGluZGlyZWN0 IG9wY29kZXMpLgorICovCisKKyNkZWZpbmUgRFVLX19BU1NFUlRfTEVGVChuKSBkbyB7IFwKKwkJ RFVLX0FTU0VSVCgoZHVrX3NpemVfdCkgKHBfZW5kIC0gcCkgPj0gKGR1a19zaXplX3QpIChuKSk7 IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgZHVrX3VpbnQ4X3QgKmR1a19fbG9hZF9mdW5jKGR1 a19odGhyZWFkICp0aHIsIGR1a191aW50OF90ICpwLCBkdWtfdWludDhfdCAqcF9lbmQpIHsKKwlk dWtfaGNvbXBmdW5jICpoX2Z1bjsKKwlkdWtfaGJ1ZmZlciAqaF9kYXRhOworCWR1a19zaXplX3Qg ZGF0YV9zaXplOworCWR1a191aW50MzJfdCBjb3VudF9pbnN0ciwgY291bnRfY29uc3QsIGNvdW50 X2Z1bmNzOworCWR1a191aW50MzJfdCBuOworCWR1a191aW50MzJfdCB0bXAzMjsKKwlkdWtfc21h bGxfdWludF90IGNvbnN0X3R5cGU7CisJZHVrX3VpbnQ4X3QgKmZ1bl9kYXRhOworCWR1a191aW50 OF90ICpxOworCWR1a19pZHhfdCBpZHhfYmFzZTsKKwlkdWtfdHZhbCAqdHYxOworCWR1a191YXJy aWR4X3QgYXJyX2lkeDsKKwlkdWtfdWFycmlkeF90IGFycl9saW1pdDsKKwlkdWtfaG9iamVjdCAq ZnVuY19lbnY7CisJZHVrX2Jvb2xfdCBuZWVkX3BvcDsKKworCS8qIFhYWDogVGhlcmUncyBzb21l IG92ZXJsYXAgd2l0aCBkdWtfanNfY2xvc3VyZSgpIGhlcmUsIGJ1dAorCSAqIHNlZW1zIGRpZmZp Y3VsdCB0byBzaGFyZSBjb2RlLiAgRW5zdXJlIHRoYXQgdGhlIGZpbmFsIGZ1bmN0aW9uCisJICog bG9va3MgdGhlIHNhbWUgYXMgY3JlYXRlZCBieSBkdWtfanNfY2xvc3VyZSgpLgorCSAqLworCisJ RFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwlEVUtfREQoRFVLX0REUFJJTlQoImxvYWRpbmcg ZnVuY3Rpb24sIHA9JXAsIHBfZW5kPSVwIiwgKHZvaWQgKikgcCwgKHZvaWQgKikgcF9lbmQpKTsK KworCURVS19fQVNTRVJUX0xFRlQoMyAqIDQpOworCWNvdW50X2luc3RyID0gRFVLX1JBV19SRUFE X1UzMl9CRShwKTsKKwljb3VudF9jb25zdCA9IERVS19SQVdfUkVBRF9VMzJfQkUocCk7CisJY291 bnRfZnVuY3MgPSBEVUtfUkFXX1JFQURfVTMyX0JFKHApOworCisJZGF0YV9zaXplID0gc2l6ZW9m KGR1a190dmFsKSAqIGNvdW50X2NvbnN0ICsKKwkgICAgICAgICAgICBzaXplb2YoZHVrX2hvYmpl Y3QgKikgKiBjb3VudF9mdW5jcyArCisJICAgICAgICAgICAgc2l6ZW9mKGR1a19pbnN0cl90KSAq IGNvdW50X2luc3RyOworCisJRFVLX0REKERVS19ERFBSSU5UKCJpbnN0cj0lbGQsIGNvbnN0PSVs ZCwgZnVuY3M9JWxkLCBkYXRhX3NpemU9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcp IGNvdW50X2luc3RyLCAobG9uZykgY291bnRfY29uc3QsCisJICAgICAgICAgICAgICAgICAgIChs b25nKSBjb3VudF9jb25zdCwgKGxvbmcpIGRhdGFfc2l6ZSkpOworCisJLyogVmFsdWUgc3RhY2sg aXMgdXNlZCB0byBlbnN1cmUgcmVhY2hhYmlsaXR5IG9mIGNvbnN0YW50cyBhbmQKKwkgKiBpbm5l ciBmdW5jdGlvbnMgYmVpbmcgbG9hZGVkLiAgUmVxdWlyZSBlbm91Z2ggc3BhY2UgdG8gaGFuZGxl CisJICogbGFyZ2UgZnVuY3Rpb25zIGNvcnJlY3RseS4KKwkgKi8KKwlkdWtfcmVxdWlyZV9zdGFj ayh0aHIsIChkdWtfaWR4X3QpICgyICsgY291bnRfY29uc3QgKyBjb3VudF9mdW5jcykpOworCWlk eF9iYXNlID0gZHVrX2dldF90b3AodGhyKTsKKworCS8qIFB1c2ggZnVuY3Rpb24gb2JqZWN0LCBp bml0IGZsYWdzIGV0Yy4gIFRoaXMgbXVzdCBtYXRjaAorCSAqIGR1a19qc19wdXNoX2Nsb3N1cmUo KSBxdWl0ZSBjYXJlZnVsbHkuCisJICovCisJaF9mdW4gPSBkdWtfcHVzaF9oY29tcGZ1bmModGhy KTsKKwlEVUtfQVNTRVJUKGhfZnVuICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1Rf SVNfQ09NUEZVTkMoKGR1a19ob2JqZWN0ICopIGhfZnVuKSk7CisJRFVLX0FTU0VSVChEVUtfSENP TVBGVU5DX0dFVF9EQVRBKHRoci0+aGVhcCwgaF9mdW4pID09IE5VTEwpOworCURVS19BU1NFUlQo RFVLX0hDT01QRlVOQ19HRVRfRlVOQ1ModGhyLT5oZWFwLCBoX2Z1bikgPT0gTlVMTCk7CisJRFVL X0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9CWVRFQ09ERSh0aHItPmhlYXAsIGhfZnVuKSA9PSBO VUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAo ZHVrX2hvYmplY3QgKikgaF9mdW4pID09IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfRlVOQ1RJT05f UFJPVE9UWVBFXSk7CisKKwloX2Z1bi0+bnJlZ3MgPSBEVUtfUkFXX1JFQURfVTE2X0JFKHApOwor CWhfZnVuLT5uYXJncyA9IERVS19SQVdfUkVBRF9VMTZfQkUocCk7CisjaWYgZGVmaW5lZChEVUtf VVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJaF9mdW4tPnN0YXJ0X2xpbmUgPSBEVUtfUkFXX1JFQURf VTMyX0JFKHApOworCWhfZnVuLT5lbmRfbGluZSA9IERVS19SQVdfUkVBRF9VMzJfQkUocCk7Cisj ZWxzZQorCXAgKz0gODsgIC8qIHNraXAgbGluZSBpbmZvICovCisjZW5kaWYKKworCS8qIGR1a19o Y29tcGZ1bmMgZmxhZ3M7IHF1aXRlIHZlcnNpb24gc3BlY2lmaWMgKi8KKwl0bXAzMiA9IERVS19S QVdfUkVBRF9VMzJfQkUocCk7CisJRFVLX0hFQVBIRFJfU0VUX0ZMQUdTKChkdWtfaGVhcGhkciAq KSBoX2Z1biwgdG1wMzIpOyAgLyogbWFza3MgZmxhZ3MgdG8gb25seSBjaGFuZ2UgZHVrX2hvYmpl Y3QgZmxhZ3MgKi8KKworCS8qIHN0YW5kYXJkIHByb3RvdHlwZSAobm8gbmVlZCB0byBzZXQgaGVy ZSwgYWxyZWFkeSBzZXQpICovCisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBF KHRoci0+aGVhcCwgKGR1a19ob2JqZWN0ICopIGhfZnVuKSA9PSB0aHItPmJ1aWx0aW5zW0RVS19C SURYX0ZVTkNUSU9OX1BST1RPVFlQRV0pOworI2lmIDAKKwlEVUtfSE9CSkVDVF9TRVRfUFJPVE9U WVBFX1VQRFJFRih0aHIsICZoX2Z1bi0+b2JqLCB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0ZVTkNU SU9OX1BST1RPVFlQRV0pOworI2VuZGlmCisKKwkvKiBhc3NlcnQganVzdCBhIGZldyBjcml0aWNh bCBmbGFncyAqLworCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfR0VUX1RZUEUoKGR1a19oZWFwaGRy ICopIGhfZnVuKSA9PSBEVUtfSFRZUEVfT0JKRUNUKTsKKwlEVUtfQVNTRVJUKCFEVUtfSE9CSkVD VF9IQVNfQk9VTkRGVU5DKCZoX2Z1bi0+b2JqKSk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9I QVNfQ09NUEZVTkMoJmhfZnVuLT5vYmopKTsKKwlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNf TkFURlVOQygmaF9mdW4tPm9iaikpOworCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0lTX1RIUkVB RCgmaF9mdW4tPm9iaikpOworCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19FWE9USUNfQVJS QVkoJmhfZnVuLT5vYmopKTsKKwlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfRVhPVElDX1NU UklOR09CSigmaF9mdW4tPm9iaikpOworCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19FWE9U SUNfQVJHVU1FTlRTKCZoX2Z1bi0+b2JqKSk7CisKKwkvKiBDcmVhdGUgZnVuY3Rpb24gJ2RhdGEn IGJ1ZmZlciBidXQgZG9uJ3QgYXR0YWNoIGl0IHlldC4gKi8KKwlmdW5fZGF0YSA9IChkdWtfdWlu dDhfdCAqKSBkdWtfcHVzaF9maXhlZF9idWZmZXJfbm96ZXJvKHRociwgZGF0YV9zaXplKTsKKwlE VUtfQVNTRVJUKGZ1bl9kYXRhICE9IE5VTEwpOworCisJLyogTG9hZCBieXRlY29kZSBpbnN0cnVj dGlvbnMuICovCisJRFVLX0FTU0VSVChzaXplb2YoZHVrX2luc3RyX3QpID09IDQpOworCURVS19f QVNTRVJUX0xFRlQoY291bnRfaW5zdHIgKiBzaXplb2YoZHVrX2luc3RyX3QpKTsKKyNpZiBkZWZp bmVkKERVS19VU0VfSU5URUdFUl9CRSkKKwlxID0gZnVuX2RhdGEgKyBzaXplb2YoZHVrX3R2YWwp ICogY291bnRfY29uc3QgKyBzaXplb2YoZHVrX2hvYmplY3QgKikgKiBjb3VudF9mdW5jczsKKwlk dWtfbWVtY3B5KCh2b2lkICopIHEsCisJICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSBwLAorCSAg ICAgICAgICAgc2l6ZW9mKGR1a19pbnN0cl90KSAqIGNvdW50X2luc3RyKTsKKwlwICs9IHNpemVv ZihkdWtfaW5zdHJfdCkgKiBjb3VudF9pbnN0cjsKKyNlbHNlCisJcSA9IGZ1bl9kYXRhICsgc2l6 ZW9mKGR1a190dmFsKSAqIGNvdW50X2NvbnN0ICsgc2l6ZW9mKGR1a19ob2JqZWN0ICopICogY291 bnRfZnVuY3M7CisJZm9yIChuID0gY291bnRfaW5zdHI7IG4gPiAwOyBuLS0pIHsKKwkJKigoZHVr X2luc3RyX3QgKikgKHZvaWQgKikgcSkgPSBEVUtfUkFXX1JFQURfVTMyX0JFKHApOworCQlxICs9 IHNpemVvZihkdWtfaW5zdHJfdCk7CisJfQorI2VuZGlmCisKKwkvKiBMb2FkIGNvbnN0YW50cyBv bnRvIHZhbHVlIHN0YWNrIGJ1dCBkb24ndCB5ZXQgY29weSB0byBidWZmZXIuICovCisJZm9yIChu ID0gY291bnRfY29uc3Q7IG4gPiAwOyBuLS0pIHsKKwkJRFVLX19BU1NFUlRfTEVGVCgxKTsKKwkJ Y29uc3RfdHlwZSA9IERVS19SQVdfUkVBRF9VOChwKTsKKwkJc3dpdGNoIChjb25zdF90eXBlKSB7 CisJCWNhc2UgRFVLX19TRVJfU1RSSU5HOiB7CisJCQlwID0gZHVrX19sb2FkX3N0cmluZ19yYXco dGhyLCBwKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX19TRVJfTlVNQkVSOiB7CisJCQkv KiBJbXBvcnRhbnQgdG8gZG8gYSBmYXN0aW50IGNoZWNrIHNvIHRoYXQgY29uc3RhbnRzIGFyZQor CQkJICogcHJvcGVybHkgcmVhZCBiYWNrIGFzIGZhc3RpbnRzLgorCQkJICovCisJCQlkdWtfdHZh bCB0dl90bXA7CisJCQlkdWtfZG91YmxlX3QgdmFsOworCQkJRFVLX19BU1NFUlRfTEVGVCg4KTsK KwkJCXZhbCA9IERVS19SQVdfUkVBRF9ET1VCTEVfQkUocCk7CisJCQlEVUtfVFZBTF9TRVRfTlVN QkVSX0NIS0ZBU1RfU0xPVygmdHZfdG1wLCB2YWwpOworCQkJZHVrX3B1c2hfdHZhbCh0aHIsICZ0 dl90bXApOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDogeworCQkJZ290byBmb3JtYXRfZXJy b3I7CisJCX0KKwkJfQorCX0KKworCS8qIExvYWQgaW5uZXIgZnVuY3Rpb25zIHRvIHZhbHVlIHN0 YWNrLCBidXQgZG9uJ3QgeWV0IGNvcHkgdG8gYnVmZmVyLiAqLworCWZvciAobiA9IGNvdW50X2Z1 bmNzOyBuID4gMDsgbi0tKSB7CisJCXAgPSBkdWtfX2xvYWRfZnVuYyh0aHIsIHAsIHBfZW5kKTsK KwkJaWYgKHAgPT0gTlVMTCkgeworCQkJZ290byBmb3JtYXRfZXJyb3I7CisJCX0KKwl9CisKKwkv KiBXaXRoIGNvbnN0YW50cyBhbmQgaW5uZXIgZnVuY3Rpb25zIG9uIHZhbHVlIHN0YWNrLCB3ZSBj YW4gbm93CisJICogYXRvbWljYWxseSBmaW5pc2ggdGhlIGZ1bmN0aW9uICdkYXRhJyBidWZmZXIs IGJ1bXAgcmVmY291bnRzLAorCSAqIGV0Yy4KKwkgKgorCSAqIEhlcmUgd2UgdGFrZSBhZHZhbnRh Z2Ugb2YgdGhlIHZhbHVlIHN0YWNrIGJlaW5nIGp1c3QgYSBkdWtfdHZhbAorCSAqIGFycmF5OiB3 ZSBjYW4ganVzdCBtZW1jcHkoKSB0aGUgY29uc3RhbnRzIGFzIGxvbmcgYXMgd2UgaW5jcmVmCisJ ICogdGhlbSBhZnRlcndhcmRzLgorCSAqLworCisJaF9kYXRhID0gKGR1a19oYnVmZmVyICopIGR1 a19rbm93bl9oYnVmZmVyKHRociwgaWR4X2Jhc2UgKyAxKTsKKwlEVUtfQVNTRVJUKCFEVUtfSEJV RkZFUl9IQVNfRFlOQU1JQyhoX2RhdGEpKTsKKwlEVUtfSENPTVBGVU5DX1NFVF9EQVRBKHRoci0+ aGVhcCwgaF9mdW4sIGhfZGF0YSk7CisJRFVLX0hCVUZGRVJfSU5DUkVGKHRociwgaF9kYXRhKTsK KworCXR2MSA9IGR1a19nZXRfdHZhbCh0aHIsIGlkeF9iYXNlICsgMik7ICAvKiBtYXkgYmUgTlVM TCBpZiBubyBjb25zdGFudHMgb3IgaW5uZXIgZnVuY3MgKi8KKwlEVUtfQVNTRVJUKChjb3VudF9j b25zdCA9PSAwICYmIGNvdW50X2Z1bmNzID09IDApIHx8IHR2MSAhPSBOVUxMKTsKKworCXEgPSBm dW5fZGF0YTsKKwlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSBxLCAoY29uc3Qgdm9pZCAqKSB0 djEsIHNpemVvZihkdWtfdHZhbCkgKiBjb3VudF9jb25zdCk7CisJZm9yIChuID0gY291bnRfY29u c3Q7IG4gPiAwOyBuLS0pIHsKKwkJRFVLX1RWQUxfSU5DUkVGX0ZBU1QodGhyLCAoZHVrX3R2YWwg KikgKHZvaWQgKikgcSk7ICAvKiBubyBzaWRlIGVmZmVjdHMgKi8KKwkJcSArPSBzaXplb2YoZHVr X3R2YWwpOworCX0KKwl0djEgKz0gY291bnRfY29uc3Q7CisKKwlEVUtfSENPTVBGVU5DX1NFVF9G VU5DUyh0aHItPmhlYXAsIGhfZnVuLCAoZHVrX2hvYmplY3QgKiopICh2b2lkICopIHEpOworCWZv ciAobiA9IGNvdW50X2Z1bmNzOyBuID4gMDsgbi0tKSB7CisJCWR1a19ob2JqZWN0ICpoX29iajsK KworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX09CSkVDVCh0djEpKTsKKwkJaF9vYmogPSBEVUtf VFZBTF9HRVRfT0JKRUNUKHR2MSk7CisJCURVS19BU1NFUlQoaF9vYmogIT0gTlVMTCk7CisJCXR2 MSsrOworCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBoX29iaik7CisKKwkJKigoZHVrX2hvYmpl Y3QgKiopICh2b2lkICopIHEpID0gaF9vYmo7CisJCXEgKz0gc2l6ZW9mKGR1a19ob2JqZWN0ICop OworCX0KKworCURVS19IQ09NUEZVTkNfU0VUX0JZVEVDT0RFKHRoci0+aGVhcCwgaF9mdW4sIChk dWtfaW5zdHJfdCAqKSAodm9pZCAqKSBxKTsKKworCS8qIFRoZSBmdW5jdGlvbiBvYmplY3QgaXMg bm93IHJlYWNoYWJsZSBhbmQgcmVmY291bnRzIGFyZSBmaW5lLAorCSAqIHNvIHdlIGNhbiBwb3Ag b2ZmIGFsbCB0aGUgdGVtcG9yYXJpZXMuCisJICovCisJRFVLX0RERChEVUtfREREUFJJTlQoImZ1 bmN0aW9uIGlzIHJlYWNoYWJsZSwgcmVzZXQgdG9wOyBmdW5jOiAlIWlUIiwgZHVrX2dldF90dmFs KHRociwgaWR4X2Jhc2UpKSk7CisJZHVrX3NldF90b3AodGhyLCBpZHhfYmFzZSArIDEpOworCisJ LyogU2V0dXAgZnVuY3Rpb24gcHJvcGVydGllcy4gKi8KKwl0bXAzMiA9IERVS19SQVdfUkVBRF9V MzJfQkUocCk7CisJZHVrX3B1c2hfdTMyKHRociwgdG1wMzIpOworCWR1a194ZGVmX3Byb3Bfc3Ry aWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfTEVOR1RILCBEVUtfUFJPUERFU0NfRkxBR1Nf Qyk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRlVOQ19OQU1FX1BST1BFUlRZKQorCXAgPSBkdWtf X2xvYWRfc3RyaW5nX3Jhdyh0aHIsIHApOyAgLyogLT4gWyBmdW5jIGZ1bmNuYW1lIF0gKi8KKwlm dW5jX2VudiA9IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMX0VOVl07CisJRFVLX0FTU0VS VChmdW5jX2VudiAhPSBOVUxMKTsKKwluZWVkX3BvcCA9IDA7CisJaWYgKERVS19IT0JKRUNUX0hB U19OQU1FQklORElORygoZHVrX2hvYmplY3QgKikgaF9mdW4pKSB7CisJCS8qIE9yaWdpbmFsIGZ1 bmN0aW9uIGluc3RhbmNlL3RlbXBsYXRlIGhhZCBOQU1FQklORElORy4KKwkJICogTXVzdCBjcmVh dGUgYSBsZXhpY2FsIGVudmlyb25tZW50IG9uIGxvYWRpbmcgdG8gYWxsb3cKKwkJICogcmVjdXJz aXZlIGZ1bmN0aW9ucyBsaWtlICdmdW5jdGlvbiBmb28oKSB7IGZvbygpOyB9Jy4KKwkJICovCisJ CWR1a19oZGVjZW52ICpuZXdfZW52OworCisJCW5ld19lbnYgPSBkdWtfaGRlY2Vudl9hbGxvYyh0 aHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVO U0lCTEUgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1Nf QVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfREVDRU5WKSk7CisJCURVS19BU1NFUlQobmV3X2Vu diAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChuZXdfZW52LT50aHJlYWQgPT0gTlVMTCk7ICAvKiBD bG9zZWQuICovCisJCURVS19BU1NFUlQobmV3X2Vudi0+dmFybWFwID09IE5VTEwpOworCQlEVUtf QVNTRVJUKG5ld19lbnYtPnJlZ2Jhc2VfYnl0ZW9mZiA9PSAwKTsKKwkJRFVLX0FTU0VSVF9IREVD RU5WX1ZBTElEKG5ld19lbnYpOworCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZ UEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgbmV3X2VudikgPT0gTlVMTCk7CisJCURVS19I T0JKRUNUX1NFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgbmV3X2Vudiwg ZnVuY19lbnYpOworCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBmdW5jX2Vudik7CisKKwkJZnVu Y19lbnYgPSAoZHVrX2hvYmplY3QgKikgbmV3X2VudjsKKworCQlkdWtfcHVzaF9ob2JqZWN0KHRo ciwgKGR1a19ob2JqZWN0ICopIG5ld19lbnYpOworCisJCWR1a19kdXBfbTIodGhyKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLT4gWyBmdW5jIGZ1bmNuYW1lIGVudiBmdW5j bmFtZSBdICovCisJCWR1a19kdXAodGhyLCBpZHhfYmFzZSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogLT4gWyBmdW5jIGZ1bmNuYW1lIGVudiBmdW5jbmFtZSBmdW5jIF0gKi8KKwkJZHVr X3hkZWZfcHJvcCh0aHIsIC0zLCBEVUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7ICAvKiAtPiBbIGZ1 bmMgZnVuY25hbWUgZW52IF0gKi8KKworCQluZWVkX3BvcCA9IDE7ICAvKiBOZWVkIHRvIHBvcCBl bnYsIGJ1dCAtYWZ0ZXItIHVwZGF0aW5nIGhfZnVuIGFuZCBpbmNyZWZzLiAqLworCX0KKwlEVUtf QVNTRVJUKGZ1bmNfZW52ICE9IE5VTEwpOworCURVS19IQ09NUEZVTkNfU0VUX0xFWEVOVih0aHIt PmhlYXAsIGhfZnVuLCBmdW5jX2Vudik7CisJRFVLX0hDT01QRlVOQ19TRVRfVkFSRU5WKHRoci0+ aGVhcCwgaF9mdW4sIGZ1bmNfZW52KTsKKwlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBmdW5jX2Vu dik7CisJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgZnVuY19lbnYpOworCWlmIChuZWVkX3BvcCkg eworCQlkdWtfcG9wKHRocik7CisJfQorCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg LTIsIERVS19TVFJJRFhfTkFNRSwgRFVLX1BST1BERVNDX0ZMQUdTX0MpOworI2VuZGlmICAvKiBE VUtfVVNFX0ZVTkNfTkFNRV9QUk9QRVJUWSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZVTkNf RklMRU5BTUVfUFJPUEVSVFkpCisJcCA9IGR1a19fbG9hZF9zdHJpbmdfcmF3KHRociwgcCk7CisJ ZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9GSUxFX05BTUUs IERVS19QUk9QREVTQ19GTEFHU19DKTsKKyNlbmRpZiAgLyogRFVLX1VTRV9GVU5DX0ZJTEVOQU1F X1BST1BFUlRZICovCisKKwlpZiAoRFVLX0hPQkpFQ1RfSEFTX0NPTlNUUlVDVEFCTEUoKGR1a19o b2JqZWN0ICopIGhfZnVuKSkgeworCQkvKiBSZXN0b3JlIGVtcHR5IGV4dGVybmFsIC5wcm90b3R5 cGUgb25seSBmb3IgY29uc3RydWN0YWJsZQorCQkgKiBmdW5jdGlvbnMuCisJCSAqLworCQlkdWtf cHVzaF9vYmplY3QodGhyKTsKKwkJZHVrX2R1cF9tMih0aHIpOworCQlkdWtfeGRlZl9wcm9wX3N0 cmlkeF9zaG9ydCh0aHIsIC0yLCBEVUtfU1RSSURYX0NPTlNUUlVDVE9SLCBEVUtfUFJPUERFU0Nf RkxBR1NfV0MpOyAgLyogZnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBmdW5jICovCisJCWR1 a19jb21wYWN0X20xKHRocik7CisJCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIs IERVS19TVFJJRFhfUFJPVE9UWVBFLCBEVUtfUFJPUERFU0NfRkxBR1NfVyk7CisJfQorCisjaWYg ZGVmaW5lZChEVUtfVVNFX1BDMkxJTkUpCisJcCA9IGR1a19fbG9hZF9idWZmZXJfcmF3KHRociwg cCk7CisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRf UEMyTElORSwgRFVLX1BST1BERVNDX0ZMQUdTX1dDKTsKKyNlbmRpZiAgLyogRFVLX1VTRV9QQzJM SU5FICovCisKKwlkdWtfcHVzaF9vYmplY3QodGhyKTsgIC8qIF9WYXJtYXAgKi8KKwlmb3IgKDs7 KSB7CisJCS8qIFhYWDogYXdrd2FyZCAqLworCQlwID0gZHVrX19sb2FkX3N0cmluZ19yYXcodGhy LCBwKTsKKwkJaWYgKGR1a19nZXRfbGVuZ3RoKHRociwgLTEpID09IDApIHsKKwkJCWR1a19wb3Ao dGhyKTsKKwkJCWJyZWFrOworCQl9CisJCXRtcDMyID0gRFVLX1JBV19SRUFEX1UzMl9CRShwKTsK KwkJZHVrX3B1c2hfdTMyKHRociwgdG1wMzIpOworCQlkdWtfcHV0X3Byb3AodGhyLCAtMyk7CisJ fQorCWR1a19jb21wYWN0X20xKHRocik7CisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhy LCAtMiwgRFVLX1NUUklEWF9JTlRfVkFSTUFQLCBEVUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7CisK KwkvKiBfRm9ybWFscyBtYXkgaGF2ZSBiZWVuIG1pc3NpbmcgaW4gdGhlIG9yaWdpbmFsIGZ1bmN0 aW9uLCB3aGljaCBpcworCSAqIGhhbmRsZWQgdXNpbmcgYSBtYXJrZXIgbGVuZ3RoLgorCSAqLwor CWFycl9saW1pdCA9IERVS19SQVdfUkVBRF9VMzJfQkUocCk7CisJaWYgKGFycl9saW1pdCAhPSBE VUtfX05PX0ZPUk1BTFMpIHsKKwkJZHVrX3B1c2hfYXJyYXkodGhyKTsgIC8qIF9Gb3JtYWxzICov CisJCWZvciAoYXJyX2lkeCA9IDA7IGFycl9pZHggPCBhcnJfbGltaXQ7IGFycl9pZHgrKykgewor CQkJcCA9IGR1a19fbG9hZF9zdHJpbmdfcmF3KHRociwgcCk7CisJCQlkdWtfcHV0X3Byb3BfaW5k ZXgodGhyLCAtMiwgYXJyX2lkeCk7CisJCX0KKwkJZHVrX2NvbXBhY3RfbTEodGhyKTsKKwkJZHVr X3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfRk9STUFMUywg RFVLX1BST1BERVNDX0ZMQUdTX05PTkUpOworCX0gZWxzZSB7CisJCURVS19ERChEVUtfRERQUklO VCgibm8gX0Zvcm1hbHMgaW4gZHVtcGVkIGZ1bmN0aW9uIikpOworCX0KKworCS8qIFJldHVybiB3 aXRoIGZpbmFsIGZ1bmN0aW9uIHB1c2hlZCBvbiBzdGFjayB0b3AuICovCisJRFVLX0REKERVS19E RFBSSU5UKCJmaW5hbCBsb2FkZWQgZnVuY3Rpb246ICUhaVQiLCBkdWtfZ2V0X3R2YWwodGhyLCAt MSkpKTsKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIGlkeF9iYXNlICsgMSk7CisJcmV0dXJuIHA7CisK KyBmb3JtYXRfZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1 a19kdW1wX2Z1bmN0aW9uKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaGNvbXBmdW5jICpmdW5j OworCWR1a19idWZ3cml0ZXJfY3R4IGJ3X2N0eF9hbGxvYzsKKwlkdWtfYnVmd3JpdGVyX2N0eCAq YndfY3R4ID0gJmJ3X2N0eF9hbGxvYzsKKwlkdWtfdWludDhfdCAqcDsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisKKwkvKiBCb3VuZCBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBhbGwgcHJv cGVydGllcyBzbyB3ZSdkIGVpdGhlciBuZWVkIHRvCisJICogbG9va3VwIHRoZSBub24tYm91bmQg dGFyZ2V0IGZ1bmN0aW9uIG9yIHJlamVjdCBib3VuZCBmdW5jdGlvbnMuCisJICogRm9yIG5vdywg Ym91bmQgZnVuY3Rpb25zIGFyZSByZWplY3RlZCB3aXRoIFR5cGVFcnJvci4KKwkgKi8KKwlmdW5j ID0gZHVrX3JlcXVpcmVfaGNvbXBmdW5jKHRociwgLTEpOworCURVS19BU1NFUlQoZnVuYyAhPSBO VUxMKTsKKwlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKCZmdW5jLT5vYmop KTsKKworCS8qIEVzdGltYXRpbmcgdGhlIHJlc3VsdCBzaXplIGJlZm9yZWhhbmQgd291bGQgYmUg Y29zdGx5LCBzbworCSAqIHN0YXJ0IHdpdGggYSByZWFzb25hYmxlIHNpemUgYW5kIGV4dGVuZCBh cyBuZWVkZWQuCisJICovCisJRFVLX0JXX0lOSVRfUFVTSEJVRih0aHIsIGJ3X2N0eCwgRFVLX19C WVRFQ09ERV9JTklUSUFMX0FMTE9DKTsKKwlwID0gRFVLX0JXX0dFVF9QVFIodGhyLCBid19jdHgp OworCSpwKysgPSBEVUtfX1NFUl9NQVJLRVI7CisJcCA9IGR1a19fZHVtcF9mdW5jKHRociwgZnVu YywgYndfY3R4LCBwKTsKKwlEVUtfQldfU0VUX1BUUih0aHIsIGJ3X2N0eCwgcCk7CisJRFVLX0JX X0NPTVBBQ1QodGhyLCBid19jdHgpOworCisJRFVLX0REKERVS19ERFBSSU5UKCJzZXJpYWxpemVk IHJlc3VsdDogJSFUIiwgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisKKwlkdWtfcmVtb3ZlX20y KHRocik7ICAvKiBbIC4uLiBmdW5jIGJ1ZiBdIC0+IFsgLi4uIGJ1ZiBdICovCit9CisKK0RVS19F WFRFUk5BTCB2b2lkIGR1a19sb2FkX2Z1bmN0aW9uKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtf dWludDhfdCAqcF9idWYsICpwLCAqcF9lbmQ7CisJZHVrX3NpemVfdCBzejsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisKKwlwX2J1ZiA9IChkdWtfdWludDhfdCAqKSBkdWtfcmVxdWly ZV9idWZmZXIodGhyLCAtMSwgJnN6KTsKKwlEVUtfQVNTRVJUKHBfYnVmICE9IE5VTEwpOworCisJ LyogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYmVpbmcgc3VyZSB0aGF0IGJ5dGVjb2Rl IGJlaW5nIGxvYWRlZAorCSAqIGlzIHZhbGlkIGFuZCB0cnVzdGVkLiAgSW52YWxpZCBieXRlY29k ZSBjYW4gY2F1c2UgbWVtb3J5IHVuc2FmZQorCSAqIGJlaGF2aW9yIGRpcmVjdGx5IGR1cmluZyBs b2FkaW5nIG9yIGxhdGVyIGR1cmluZyBieXRlY29kZSBleGVjdXRpb24KKwkgKiAoaW5zdHJ1Y3Rp b24gdmFsaWRhdGlvbiB3b3VsZCBiZSBxdWl0ZSBjb21wbGV4IHRvIGltcGxlbWVudCkuCisJICoK KwkgKiBUaGlzIHNpZ25hdHVyZSBjaGVjayBpcyB0aGUgb25seSBzYW5pdHkgY2hlY2sgZm9yIGRl dGVjdGluZworCSAqIGFjY2lkZW50YWwgaW52YWxpZCBpbnB1dHMuICBUaGUgaW5pdGlhbCBieXRl IGVuc3VyZXMgbm8gb3JkaW5hcnkKKwkgKiBzdHJpbmcgb3IgU3ltYm9sIHdpbGwgYmUgYWNjZXB0 ZWQgYnkgYWNjaWRlbnQuCisJICovCisJcCA9IHBfYnVmOworCXBfZW5kID0gcF9idWYgKyBzejsK KwlpZiAoc3ogPCAxIHx8IHBbMF0gIT0gRFVLX19TRVJfTUFSS0VSKSB7CisJCWdvdG8gZm9ybWF0 X2Vycm9yOworCX0KKwlwKys7CisKKwlwID0gZHVrX19sb2FkX2Z1bmModGhyLCBwLCBwX2VuZCk7 CisJaWYgKHAgPT0gTlVMTCkgeworCQlnb3RvIGZvcm1hdF9lcnJvcjsKKwl9CisKKwlkdWtfcmVt b3ZlX20yKHRocik7ICAvKiBbIC4uLiBidWYgZnVuYyBdIC0+IFsgLi4uIGZ1bmMgXSAqLworCXJl dHVybjsKKworIGZvcm1hdF9lcnJvcjoKKwlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfSU5W QUxJRF9CWVRFQ09ERSk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCisjZWxzZSAg LyogRFVLX1VTRV9CWVRFQ09ERV9EVU1QX1NVUFBPUlQgKi8KKworRFVLX0VYVEVSTkFMIHZvaWQg ZHVrX2R1bXBfZnVuY3Rpb24oZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRocik7CisJRFVLX1dPX05PUkVUVVJO KHJldHVybjspOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfbG9hZF9mdW5jdGlvbihkdWtf aHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfRVJST1Jf VU5TVVBQT1JURUQodGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKyNlbmRp ZiAgLyogRFVLX1VTRV9CWVRFQ09ERV9EVU1QX1NVUFBPUlQgKi8KKworLyogYXV0b21hdGljIHVu ZGVmcyAqLworI3VuZGVmIERVS19fQVNTRVJUX0xFRlQKKyN1bmRlZiBEVUtfX0JZVEVDT0RFX0lO SVRJQUxfQUxMT0MKKyN1bmRlZiBEVUtfX05PX0ZPUk1BTFMKKyN1bmRlZiBEVUtfX1NFUl9NQVJL RVIKKyN1bmRlZiBEVUtfX1NFUl9OVU1CRVIKKyN1bmRlZiBEVUtfX1NFUl9TVFJJTkcKKy8qCisg KiAgQ2FsbHMuCisgKgorICogIFByb3RlY3RlZCB2YXJpYW50cyBzaG91bGQgYXZvaWQgZXZlciB0 aHJvd2luZyBhbiBlcnJvci4gIE11c3QgYmUgY2FyZWZ1bAorICogIHRvIGNhdGNoIGVycm9ycyBy ZWxhdGVkIHRvIHZhbHVlIHN0YWNrIG1hbmlwdWxhdGlvbiBhbmQgcHJvcGVydHkgbG9va3VwLAor ICogIG5vdCBqdXN0IHRoZSBjYWxsIGl0c2VsZi4KKyAqCisgKiAgVGhlIG9ubHkgZXhjZXB0aW9u IGlzIHdoZW4gYXJndW1lbnRzIGFyZSBpbnNhbmUsIGUuZy4gbmFyZ3MvbnJldHMgYXJlIG91dAor ICogIG9mIGJvdW5kczsgaW4gc3VjaCBjYXNlcyBhbiBlcnJvciBpcyB0aHJvd24gZm9yIHR3byBy ZWFzb25zLiAgRmlyc3QsIHdlCisgKiAgY2FuJ3QgYWx3YXlzIHJlc3BlY3QgdGhlIHZhbHVlIHN0 YWNrIGlucHV0L291dHB1dCBndWFyYW50ZWVzIGluIHN1Y2ggY2FzZXMKKyAqICBzbyB0aGUgY2Fs bGVyIHdvdWxkIGVuZCB1cCB3aXRoIHRoZSB2YWx1ZSBzdGFjayBpbiBhbiB1bmV4cGVjdGVkIHN0 YXRlLgorICogIFNlY29uZCwgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYW4gZXJyb3IgbWlnaHQgaXRz ZWxmIGZhaWwgKGFsdGhvdWdoIHRoaXMKKyAqICBjb3VsZCBiZSBhdm9pZGVkIGJ5IHB1c2hpbmcg YSBwcmVhbGxvY2F0ZWQgb2JqZWN0L3N0cmluZyBvciBhIHByaW1pdGl2ZQorICogIHZhbHVlKS4K KyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICov CisKKy8qCisgKiAgSGVscGVycworICovCisKK3N0cnVjdCBkdWtfX3BjYWxsX3Byb3BfYXJncyB7 CisJZHVrX2lkeF90IG9ial9pZHg7CisJZHVrX2lkeF90IG5hcmdzOworCWR1a19zbWFsbF91aW50 X3QgY2FsbF9mbGFnczsKK307Cit0eXBlZGVmIHN0cnVjdCBkdWtfX3BjYWxsX3Byb3BfYXJncyBk dWtfX3BjYWxsX3Byb3BfYXJnczsKKworc3RydWN0IGR1a19fcGNhbGxfbWV0aG9kX2FyZ3Mgewor CWR1a19pZHhfdCBuYXJnczsKKwlkdWtfc21hbGxfdWludF90IGNhbGxfZmxhZ3M7Cit9OwordHlw ZWRlZiBzdHJ1Y3QgZHVrX19wY2FsbF9tZXRob2RfYXJncyBkdWtfX3BjYWxsX21ldGhvZF9hcmdz OworCitzdHJ1Y3QgZHVrX19wY2FsbF9hcmdzIHsKKwlkdWtfaWR4X3QgbmFyZ3M7CisJZHVrX3Nt YWxsX3VpbnRfdCBjYWxsX2ZsYWdzOworfTsKK3R5cGVkZWYgc3RydWN0IGR1a19fcGNhbGxfYXJn cyBkdWtfX3BjYWxsX2FyZ3M7CisKKy8qIENvbXB1dGUgYW5kIHZhbGlkYXRlIGlkeF9mdW5jIGZv ciBhIGNlcnRhaW4gJ25hcmdzJyBhbmQgJ290aGVyJworICogcGFyYW1ldGVyIGNvdW50ICgxIG9y IDIsIGRlcGVuZGluZyBvbiB3aGV0aGVyICd0aGlzJyBiaW5kaW5nIGlzCisgKiBwcmVzZW50KS4K KyAqLworRFVLX0xPQ0FMIGR1a19pZHhfdCBkdWtfX2NhbGxfZ2V0X2lkeF9mdW5jKGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBuYXJncywgZHVrX2lkeF90IG90aGVyKSB7CisJZHVrX2lkeF90 IGlkeF9mdW5jOworCisJLyogWFhYOiBieXRlIGFyaXRobWV0aWM/ICovCisKKwlEVUtfQVNTRVJU KG90aGVyID49IDApOworCisJaWR4X2Z1bmMgPSBkdWtfZ2V0X3RvcCh0aHIpIC0gbmFyZ3MgLSBv dGhlcjsKKwlpZiAoRFVLX1VOTElLRUxZKChpZHhfZnVuYyB8IG5hcmdzKSA8IDApKSB7ICAvKiBp ZHhfZnVuYyA8IDAgfHwgbmFyZ3MgPCAwOyBPUiBzaWduIGJpdHMgKi8KKwkJRFVLX0VSUk9SX1RZ UEVfSU5WQUxJRF9BUkdTKHRocik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0K KwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlkeF9mdW5jKSk7CisJcmV0dXJu IGlkeF9mdW5jOworfQorCisvKiBDb21wdXRlIGlkeF9mdW5jLCBhc3N1bWUgaW5kZXggd2lsbCBi ZSB2YWxpZC4gIFRoaXMgaXMgYSB2YWxpZCBhc3N1bXB0aW9uCisgKiBmb3IgcHJvdGVjdGVkIGNh bGxzOiBuYXJncyA8IDAgaXMgY2hlY2tlZCBleHBsaWNpdGx5IGFuZCBkdWtfc2FmZV9jYWxsKCkK KyAqIHZhbGlkYXRlcyB0aGUgYXJndW1lbnQgY291bnQuCisgKi8KK0RVS19MT0NBTCBkdWtfaWR4 X3QgZHVrX19jYWxsX2dldF9pZHhfZnVuY191bnZhbGlkYXRlZChkdWtfaHRocmVhZCAqdGhyLCBk dWtfaWR4X3QgbmFyZ3MsIGR1a19pZHhfdCBvdGhlcikgeworCWR1a19pZHhfdCBpZHhfZnVuYzsK KworCS8qIFhYWDogYnl0ZSBhcml0aG1ldGljPyAqLworCisJRFVLX0FTU0VSVChuYXJncyA+PSAw KTsKKwlEVUtfQVNTRVJUKG90aGVyID49IDApOworCisJaWR4X2Z1bmMgPSBkdWtfZ2V0X3RvcCh0 aHIpIC0gbmFyZ3MgLSBvdGhlcjsKKwlEVUtfQVNTRVJUKGlkeF9mdW5jID49IDApOworCURVS19B U1NFUlQoZHVrX2lzX3ZhbGlkX2luZGV4KHRociwgaWR4X2Z1bmMpKTsKKwlyZXR1cm4gaWR4X2Z1 bmM7Cit9CisKKy8qIFByZXBhcmUgdmFsdWUgc3RhY2sgZm9yIGEgbWV0aG9kIGNhbGwgdGhyb3Vn aCBhbiBvYmplY3QgcHJvcGVydHkuCisgKiBNYXkgY3VycmVudGx5IHRocm93IGFuIGVycm9yIGUu Zy4gd2hlbiBnZXR0aW5nIHRoZSBwcm9wZXJ0eS4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19j YWxsX3Byb3BfcHJlcF9zdGFjayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgbm9ybWFsaXpl ZF9vYmpfaWR4LCBkdWtfaWR4X3QgbmFyZ3MpIHsKKwlEVUtfQVNTRVJUX0NUWF9WQUxJRCh0aHIp OworCURVS19BU1NFUlQobmFyZ3MgPj0gMCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZHVr X19jYWxsX3Byb3BfcHJlcF9zdGFjaywgbm9ybWFsaXplZF9vYmpfaWR4PSVsZCwgbmFyZ3M9JWxk LCBzdGFja3RvcD0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBub3JtYWxpemVk X29ial9pZHgsIChsb25nKSBuYXJncywgKGxvbmcpIGR1a19nZXRfdG9wKHRocikpKTsKKworCS8q IFsuLi4ga2V5IGFyZzEgLi4uIGFyZ05dICovCisKKwkvKiBkdXBsaWNhdGUga2V5ICovCisJZHVr X2R1cCh0aHIsIC1uYXJncyAtIDEpOyAgLyogTm90ZTogLW5hcmdzIGFsb25lIHdvdWxkIGZhaWwg Zm9yIG5hcmdzID09IDAsIHRoaXMgaXMgT0sgKi8KKwkodm9pZCkgZHVrX2dldF9wcm9wKHRociwg bm9ybWFsaXplZF9vYmpfaWR4KTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJmdW5jOiAlIVQi LCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisKKyNpZiBkZWZpbmVkKERV S19VU0VfVkVSQk9TRV9FUlJPUlMpCisJaWYgKERVS19VTkxJS0VMWSghZHVrX2lzX2NhbGxhYmxl KHRociwgLTEpKSkgeworCQlkdWtfdHZhbCAqdHZfdGFyZzsKKwkJZHVrX3R2YWwgKnR2X2Jhc2U7 CisJCWR1a190dmFsICp0dl9rZXk7CisKKwkJdHZfdGFyZyA9IERVS19HRVRfVFZBTF9ORUdJRFgo dGhyLCAtMSk7CisJCXR2X2Jhc2UgPSBEVUtfR0VUX1RWQUxfUE9TSURYKHRociwgbm9ybWFsaXpl ZF9vYmpfaWR4KTsKKwkJdHZfa2V5ID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC1uYXJncyAt IDIpOworCQlEVUtfQVNTRVJUKHR2X3RhcmcgPj0gdGhyLT52YWxzdGFja19ib3R0b20gJiYgdHZf dGFyZyA8IHRoci0+dmFsc3RhY2tfdG9wKTsKKwkJRFVLX0FTU0VSVCh0dl9iYXNlID49IHRoci0+ dmFsc3RhY2tfYm90dG9tICYmIHR2X2Jhc2UgPCB0aHItPnZhbHN0YWNrX3RvcCk7CisJCURVS19B U1NFUlQodHZfa2V5ID49IHRoci0+dmFsc3RhY2tfYm90dG9tICYmIHR2X2tleSA8IHRoci0+dmFs c3RhY2tfdG9wKTsKKworCQlkdWtfY2FsbF9zZXR1cF9wcm9wY2FsbF9lcnJvcih0aHIsIHR2X3Rh cmcsIHR2X2Jhc2UsIHR2X2tleSk7CisJfQorI2VuZGlmCisKKwkvKiBbLi4uIGtleSBhcmcxIC4u LiBhcmdOIGZ1bmNdICovCisKKwlkdWtfcmVwbGFjZSh0aHIsIC1uYXJncyAtIDIpOworCisJLyog Wy4uLiBmdW5jIGFyZzEgLi4uIGFyZ05dICovCisKKwlkdWtfZHVwKHRociwgbm9ybWFsaXplZF9v YmpfaWR4KTsKKwlkdWtfaW5zZXJ0KHRociwgLW5hcmdzIC0gMSk7CisKKwkvKiBbLi4uIGZ1bmMg dGhpcyBhcmcxIC4uLiBhcmdOXSAqLworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfY2FsbChk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgbmFyZ3MpIHsKKwlkdWtfc21hbGxfdWludF90IGNh bGxfZmxhZ3M7CisJZHVrX2lkeF90IGlkeF9mdW5jOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKworCWlkeF9mdW5jID0gZHVrX19jYWxsX2dldF9pZHhfZnVuYyh0aHIsIG5hcmdzLCAx KTsKKwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlkeF9mdW5jKSk7CisKKwlk dWtfaW5zZXJ0X3VuZGVmaW5lZCh0aHIsIGlkeF9mdW5jICsgMSk7CisKKwljYWxsX2ZsYWdzID0g MDsgIC8qIG5vdCBwcm90ZWN0ZWQsIHJlc3BlY3QgcmVjbGltaXQsIG5vdCBjb25zdHJ1Y3RvciAq LworCWR1a19oYW5kbGVfY2FsbF91bnByb3RlY3RlZCh0aHIsIGlkeF9mdW5jLCBjYWxsX2ZsYWdz KTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2NhbGxfbWV0aG9kKGR1a19odGhyZWFkICp0 aHIsIGR1a19pZHhfdCBuYXJncykgeworCWR1a19zbWFsbF91aW50X3QgY2FsbF9mbGFnczsKKwlk dWtfaWR4X3QgaWR4X2Z1bmM7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWR4 X2Z1bmMgPSBkdWtfX2NhbGxfZ2V0X2lkeF9mdW5jKHRociwgbmFyZ3MsIDIpOworCURVS19BU1NF UlQoZHVrX2lzX3ZhbGlkX2luZGV4KHRociwgaWR4X2Z1bmMpKTsKKworCWNhbGxfZmxhZ3MgPSAw OyAgLyogbm90IHByb3RlY3RlZCwgcmVzcGVjdCByZWNsaW1pdCwgbm90IGNvbnN0cnVjdG9yICov CisJZHVrX2hhbmRsZV9jYWxsX3VucHJvdGVjdGVkKHRociwgaWR4X2Z1bmMsIGNhbGxfZmxhZ3Mp OworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfY2FsbF9wcm9wKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfaWR4X3QgbmFyZ3MpIHsKKwkvKgorCSAqICBYWFg6IGlm IGR1a19oYW5kbGVfY2FsbCgpIHRvb2sgdmFsdWVzIHRocm91Z2ggaW5kaWNlcywgdGhpcyBjb3Vs ZCBiZQorCSAqICBtYWRlIG11Y2ggbW9yZSBzZW5zaWJsZS4gIEhvd2V2ZXIsIGR1a19oYW5kbGVf Y2FsbCgpIG5lZWRzIHRvIGZ1ZGdlCisJICogIHRoZSAndGhpcycgYW5kICdmdW5jJyB2YWx1ZXMg dG8gaGFuZGxlIGJvdW5kIGZ1bmN0aW9ucywgd2hpY2ggaXMgbm93CisJICogIGRvbmUgImluLXBs YWNlIiwgc28gdGhpcyBpcyBub3QgYSB0cml2aWFsIGNoYW5nZS4KKwkgKi8KKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisKKwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2lu ZGV4KHRociwgb2JqX2lkeCk7ICAvKiBtYWtlIGFic29sdXRlICovCisJaWYgKERVS19VTkxJS0VM WShuYXJncyA8IDApKSB7CisJCURVS19FUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCQlE VUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJZHVrX19jYWxsX3Byb3BfcHJlcF9zdGFj ayh0aHIsIG9ial9pZHgsIG5hcmdzKTsKKworCWR1a19jYWxsX21ldGhvZCh0aHIsIG5hcmdzKTsK K30KKworRFVLX0xPQ0FMIGR1a19yZXRfdCBkdWtfX3BjYWxsX3JhdyhkdWtfaHRocmVhZCAqdGhy LCB2b2lkICp1ZGF0YSkgeworCWR1a19fcGNhbGxfYXJncyAqYXJnczsKKwlkdWtfaWR4X3QgaWR4 X2Z1bmM7CisJZHVrX2ludF90IHJldDsKKworCURVS19BU1NFUlRfQ1RYX1ZBTElEKHRocik7CisJ RFVLX0FTU0VSVCh1ZGF0YSAhPSBOVUxMKTsKKworCWFyZ3MgPSAoZHVrX19wY2FsbF9hcmdzICop IHVkYXRhOworCWlkeF9mdW5jID0gZHVrX19jYWxsX2dldF9pZHhfZnVuY191bnZhbGlkYXRlZCh0 aHIsIGFyZ3MtPm5hcmdzLCAxKTsKKwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIs IGlkeF9mdW5jKSk7CisKKwlkdWtfaW5zZXJ0X3VuZGVmaW5lZCh0aHIsIGlkeF9mdW5jICsgMSk7 CisKKwlyZXQgPSBkdWtfaGFuZGxlX2NhbGxfdW5wcm90ZWN0ZWQodGhyLCBpZHhfZnVuYywgYXJn cy0+Y2FsbF9mbGFncyk7CisJRFVLX0FTU0VSVChyZXQgPT0gMCk7CisJRFVLX1VOUkVGKHJldCk7 CisKKwlyZXR1cm4gMTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19pbnRfdCBkdWtfcGNhbGwoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG5hcmdzKSB7CisJZHVrX19wY2FsbF9hcmdzIGFyZ3M7 CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJYXJncy5uYXJncyA9IG5hcmdzOwor CWlmIChEVUtfVU5MSUtFTFkobmFyZ3MgPCAwKSkgeworCQlEVUtfRVJST1JfVFlQRV9JTlZBTElE X0FSR1ModGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiBEVUtfRVhFQ19FUlJPUjspOwor CX0KKwlhcmdzLmNhbGxfZmxhZ3MgPSAwOworCisJcmV0dXJuIGR1a19zYWZlX2NhbGwodGhyLCBk dWtfX3BjYWxsX3JhdywgKHZvaWQgKikgJmFyZ3MgLyp1ZGF0YSovLCBuYXJncyArIDEgLypuYXJn cyovLCAxIC8qbnJldHMqLyk7Cit9CisKK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19wY2FsbF9t ZXRob2RfcmF3KGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnVkYXRhKSB7CisJZHVrX19wY2FsbF9t ZXRob2RfYXJncyAqYXJnczsKKwlkdWtfaWR4X3QgaWR4X2Z1bmM7CisJZHVrX2ludF90IHJldDsK KworCURVS19BU1NFUlRfQ1RYX1ZBTElEKHRocik7CisJRFVLX0FTU0VSVCh1ZGF0YSAhPSBOVUxM KTsKKworCWFyZ3MgPSAoZHVrX19wY2FsbF9tZXRob2RfYXJncyAqKSB1ZGF0YTsKKworCWlkeF9m dW5jID0gZHVrX19jYWxsX2dldF9pZHhfZnVuY191bnZhbGlkYXRlZCh0aHIsIGFyZ3MtPm5hcmdz LCAyKTsKKwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlkeF9mdW5jKSk7CisK KwlyZXQgPSBkdWtfaGFuZGxlX2NhbGxfdW5wcm90ZWN0ZWQodGhyLCBpZHhfZnVuYywgYXJncy0+ Y2FsbF9mbGFncyk7CisJRFVLX0FTU0VSVChyZXQgPT0gMCk7CisJRFVLX1VOUkVGKHJldCk7CisK KwlyZXR1cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19pbnRfdCBkdWtfcGNhbGxfbWV0aG9k X2ZsYWdzKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBuYXJncywgZHVrX3NtYWxsX3VpbnRf dCBjYWxsX2ZsYWdzKSB7CisJZHVrX19wY2FsbF9tZXRob2RfYXJncyBhcmdzOworCisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKworCWFyZ3MubmFyZ3MgPSBuYXJnczsKKwlpZiAoRFVLX1VO TElLRUxZKG5hcmdzIDwgMCkpIHsKKwkJRFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7 CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gRFVLX0VYRUNfRVJST1I7KTsKKwl9CisJYXJncy5j YWxsX2ZsYWdzID0gY2FsbF9mbGFnczsKKworCXJldHVybiBkdWtfc2FmZV9jYWxsKHRociwgZHVr X19wY2FsbF9tZXRob2RfcmF3LCAodm9pZCAqKSAmYXJncyAvKnVkYXRhKi8sIG5hcmdzICsgMiAv Km5hcmdzKi8sIDEgLypucmV0cyovKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19pbnRfdCBkdWtf cGNhbGxfbWV0aG9kKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBuYXJncykgeworCURVS19B U1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlyZXR1cm4gZHVrX3BjYWxsX21ldGhvZF9mbGFncyh0 aHIsIG5hcmdzLCAwKTsKK30KKworRFVLX0xPQ0FMIGR1a19yZXRfdCBkdWtfX3BjYWxsX3Byb3Bf cmF3KGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnVkYXRhKSB7CisJZHVrX19wY2FsbF9wcm9wX2Fy Z3MgKmFyZ3M7CisJZHVrX2lkeF90IG9ial9pZHg7CisJZHVrX2ludF90IHJldDsKKworCURVS19B U1NFUlRfQ1RYX1ZBTElEKHRocik7CisJRFVLX0FTU0VSVCh1ZGF0YSAhPSBOVUxMKTsKKworCWFy Z3MgPSAoZHVrX19wY2FsbF9wcm9wX2FyZ3MgKikgdWRhdGE7CisKKwlvYmpfaWR4ID0gZHVrX3Jl cXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgYXJncy0+b2JqX2lkeCk7ICAvKiBtYWtlIGFic29s dXRlICovCisJZHVrX19jYWxsX3Byb3BfcHJlcF9zdGFjayh0aHIsIG9ial9pZHgsIGFyZ3MtPm5h cmdzKTsKKworCXJldCA9IGR1a19oYW5kbGVfY2FsbF91bnByb3RlY3RlZF9uYXJncyh0aHIsIGFy Z3MtPm5hcmdzLCBhcmdzLT5jYWxsX2ZsYWdzKTsKKwlEVUtfQVNTRVJUKHJldCA9PSAwKTsKKwlE VUtfVU5SRUYocmV0KTsKKwlyZXR1cm4gMTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19pbnRfdCBk dWtfcGNhbGxfcHJvcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX2lk eF90IG5hcmdzKSB7CisJZHVrX19wY2FsbF9wcm9wX2FyZ3MgYXJnczsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisKKwlhcmdzLm9ial9pZHggPSBvYmpfaWR4OworCWFyZ3MubmFyZ3Mg PSBuYXJnczsKKwlpZiAoRFVLX1VOTElLRUxZKG5hcmdzIDwgMCkpIHsKKwkJRFVLX0VSUk9SX1RZ UEVfSU5WQUxJRF9BUkdTKHRocik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gRFVLX0VYRUNf RVJST1I7KTsKKwl9CisJYXJncy5jYWxsX2ZsYWdzID0gMDsKKworCXJldHVybiBkdWtfc2FmZV9j YWxsKHRociwgZHVrX19wY2FsbF9wcm9wX3JhdywgKHZvaWQgKikgJmFyZ3MgLyp1ZGF0YSovLCBu YXJncyArIDEgLypuYXJncyovLCAxIC8qbnJldHMqLyk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtf aW50X3QgZHVrX3NhZmVfY2FsbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfc2FmZV9jYWxsX2Z1bmN0 aW9uIGZ1bmMsIHZvaWQgKnVkYXRhLCBkdWtfaWR4X3QgbmFyZ3MsIGR1a19pZHhfdCBucmV0cykg eworCWR1a19pbnRfdCByYzsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwkvKiBu YXJncyBjb25kaXRpb247IGZhaWwgaWY6IHRvcCAtIGJvdHRvbSA8IG5hcmdzCisJICogICAgICAg ICAgICAgICAgICAgICAgPD0+ICB0b3AgPCBib3R0b20gKyBuYXJncworCSAqIG5yZXRzIGNvbmRp dGlvbjsgZmFpbCBpZjogZW5kIC0gKHRvcCAtIG5hcmdzKSA8IG5yZXRzCisJICogICAgICAgICAg ICAgICAgICAgICAgPD0+ICBlbmQgLSB0b3AgKyBuYXJncyA8IG5yZXRzCisJICogICAgICAgICAg ICAgICAgICAgICAgPD0+ICBlbmQgKyBuYXJncyA8IHRvcCArIG5yZXRzCisJICovCisJLyogWFhY OiBjaGVjayBmb3IgYW55IHJlc2VydmU/ICovCisKKwlpZiAoRFVLX1VOTElLRUxZKChuYXJncyB8 IG5yZXRzKSA8IDAgfHwgIC8qIG5hcmdzIDwgMCB8fCBucmV0cyA8IDA7IE9SIHNpZ24gYml0cyAq LworCSAgICAgICAgICAgICAgICAgdGhyLT52YWxzdGFja190b3AgPCB0aHItPnZhbHN0YWNrX2Jv dHRvbSArIG5hcmdzIHx8ICAgICAgICAvKiBuYXJncyB0b28gbGFyZ2UgY29tcGFyZWQgdG8gdG9w ICovCisJICAgICAgICAgICAgICAgICB0aHItPnZhbHN0YWNrX2VuZCArIG5hcmdzIDwgdGhyLT52 YWxzdGFja190b3AgKyBucmV0cykpIHsgIC8qIG5yZXRzIHRvbyBsYXJnZSBjb21wYXJlZCB0byBy ZXNlcnZlICovCisJCURVS19EKERVS19EUFJJTlQoIm5vdCBlbm91Z2ggc3RhY2sgcmVzZXJ2ZSBm b3Igc2FmZSBjYWxsIG9yIGludmFsaWQgYXJndW1lbnRzOiAiCisJCSAgICAgICAgICAgICAgICAg Im5hcmdzPSVsZCA8IDAgKD8pLCBucmV0cz0lbGQgPCAwICg/KSwgdG9wPSVsZCA8IGJvdHRvbT0l bGQgKyBuYXJncz0lbGQgKD8pLCAiCisJCSAgICAgICAgICAgICAgICAgImVuZD0lbGQgKyBuYXJn cz0lbGQgPCB0b3A9JWxkICsgbnJldHM9JWxkICg/KSIsCisJCSAgICAgICAgICAgICAgICAgIChs b25nKSBuYXJncywKKwkJICAgICAgICAgICAgICAgICAgKGxvbmcpIG5yZXRzLAorCQkgICAgICAg ICAgICAgICAgICAobG9uZykgKHRoci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFjayksCisJ CSAgICAgICAgICAgICAgICAgIChsb25nKSAodGhyLT52YWxzdGFja19ib3R0b20gLSB0aHItPnZh bHN0YWNrKSwKKwkJICAgICAgICAgICAgICAgICAgKGxvbmcpIG5hcmdzLAorCQkgICAgICAgICAg ICAgICAgICAobG9uZykgKHRoci0+dmFsc3RhY2tfZW5kIC0gdGhyLT52YWxzdGFjayksCisJCSAg ICAgICAgICAgICAgICAgIChsb25nKSBuYXJncywKKwkJICAgICAgICAgICAgICAgICAgKGxvbmcp ICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2spLAorCQkgICAgICAgICAgICAgICAg ICAobG9uZykgbnJldHMpKTsKKwkJRFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJ CURVS19XT19OT1JFVFVSTihyZXR1cm4gRFVLX0VYRUNfRVJST1I7KTsKKwl9CisKKwlyYyA9IGR1 a19oYW5kbGVfc2FmZV9jYWxsKHRociwgICAgICAgICAgIC8qIHRocmVhZCAqLworCSAgICAgICAg ICAgICAgICAgICAgICAgICAgZnVuYywgICAgICAgICAgLyogZnVuYyAqLworCSAgICAgICAgICAg ICAgICAgICAgICAgICAgdWRhdGEsICAgICAgICAgLyogdWRhdGEgKi8KKwkgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hcmdzLCAgICAgICAgIC8qIG51bV9zdGFja19hcmdzICovCisJICAgICAg ICAgICAgICAgICAgICAgICAgICBucmV0cyk7ICAgICAgICAvKiBudW1fc3RhY2tfcmVzICovCisK KwlyZXR1cm4gcmM7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19uZXcoZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IG5hcmdzKSB7CisJZHVrX2lkeF90IGlkeF9mdW5jOworCisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlkeF9mdW5jID0gZHVrX19jYWxsX2dldF9pZHhfZnVu Yyh0aHIsIG5hcmdzLCAxKTsKKwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlk eF9mdW5jKSk7CisKKwlkdWtfcHVzaF9vYmplY3QodGhyKTsgIC8qIGRlZmF1bHQgaW5zdGFuY2U7 IGludGVybmFsIHByb3RvIHVwZGF0ZWQgYnkgY2FsbCBoYW5kbGluZyAqLworCWR1a19pbnNlcnQo dGhyLCBpZHhfZnVuYyArIDEpOworCisJZHVrX2hhbmRsZV9jYWxsX3VucHJvdGVjdGVkKHRociwg aWR4X2Z1bmMsIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUKTsKK30KKworRFVLX0xPQ0FMIGR1a19y ZXRfdCBkdWtfX3BuZXdfaGVscGVyKGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnVkYXRhKSB7CisJ ZHVrX2lkeF90IG5hcmdzOworCisJRFVLX0FTU0VSVCh1ZGF0YSAhPSBOVUxMKTsKKwluYXJncyA9 ICooKGR1a19pZHhfdCAqKSB1ZGF0YSk7CisKKwlkdWtfbmV3KHRociwgbmFyZ3MpOworCXJldHVy biAxOworfQorCitEVUtfRVhURVJOQUwgZHVrX2ludF90IGR1a19wbmV3KGR1a19odGhyZWFkICp0 aHIsIGR1a19pZHhfdCBuYXJncykgeworCWR1a19pbnRfdCByYzsKKworCURVS19BU1NFUlRfQVBJ X0VOVFJZKHRocik7CisKKwkvKiBGb3Igbm93LCBqdXN0IHVzZSBkdWtfc2FmZV9jYWxsKCkgdG8g d3JhcCBkdWtfbmV3KCkuICBXZSBjYW4ndAorCSAqIHNpbXBseSB1c2UgYSBwcm90ZWN0ZWQgZHVr X2hhbmRsZV9jYWxsKCkgYmVjYXVzZSBwdXNoaW5nIHRoZQorCSAqIGRlZmF1bHQgaW5zdGFuY2Ug bWlnaHQgdGhyb3cuCisJICovCisKKwlpZiAoRFVLX1VOTElLRUxZKG5hcmdzIDwgMCkpIHsKKwkJ RFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJCURVS19XT19OT1JFVFVSTihyZXR1 cm4gRFVLX0VYRUNfRVJST1I7KTsKKwl9CisKKwlyYyA9IGR1a19zYWZlX2NhbGwodGhyLCBkdWtf X3BuZXdfaGVscGVyLCAodm9pZCAqKSAmbmFyZ3MgLyp1ZGF0YSovLCBuYXJncyArIDEgLypuYXJn cyovLCAxIC8qbnJldHMqLyk7CisJcmV0dXJuIHJjOworfQorCitEVUtfRVhURVJOQUwgZHVrX2Jv b2xfdCBkdWtfaXNfY29uc3RydWN0b3JfY2FsbChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2Fj dGl2YXRpb24gKmFjdDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlhY3QgPSB0 aHItPmNhbGxzdGFja19jdXJyOworCWlmIChhY3QgIT0gTlVMTCkgeworCQlyZXR1cm4gKChhY3Qt PmZsYWdzICYgRFVLX0FDVF9GTEFHX0NPTlNUUlVDVCkgIT0gMCA/IDEgOiAwKTsKKwl9CisJcmV0 dXJuIDA7Cit9CisKKy8qIFhYWDogTWFrZSB0aGlzIG9ic29sZXRlIGJ5IGFkZGluZyBhIGZ1bmN0 aW9uIGZsYWcgZm9yIHJlamVjdGluZyBhCisgKiBub24tY29uc3RydWN0b3IgY2FsbCBhdXRvbWF0 aWNhbGx5PworICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcmVxdWlyZV9jb25zdHJ1Y3Rvcl9j YWxsKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJ aWYgKCFkdWtfaXNfY29uc3RydWN0b3JfY2FsbCh0aHIpKSB7CisJCURVS19FUlJPUl9UWVBFKHRo ciwgRFVLX1NUUl9DT05TVFJVQ1RfT05MWSk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsK Kwl9Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19pc19zdHJpY3RfY2FsbChkdWtf aHRocmVhZCAqdGhyKSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKworCS8qIEZvciB1c2VyIGNv ZGUgdGhpcyBjb3VsZCBqdXN0IHJldHVybiAxIChzdHJpY3QpIGFsd2F5cworCSAqIGJlY2F1c2Ug YWxsIER1a3RhcGUvQyBmdW5jdGlvbnMgYXJlIGNvbnNpZGVyZWQgc3RyaWN0LAorCSAqIGFuZCBz dHJpY3QgaXMgYWxzbyB0aGUgZGVmYXVsdCB3aGVuIG5vdGhpbmcgaXMgcnVubmluZy4KKwkgKiBI b3dldmVyLCBEdWt0YXBlIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gaW50ZXJuYWxseSB3aGVuCisJ ICogdGhlIGN1cnJlbnQgYWN0aXZhdGlvbiBpcyBhbiBFQ01BU2NyaXB0IGZ1bmN0aW9uLCBzbwor CSAqIHRoaXMgY2Fubm90IGJlIHJlcGxhY2VkIGJ5IGEgJ3JldHVybiAxJyB3aXRob3V0IGZpeGlu ZworCSAqIHRoZSBpbnRlcm5hbCBjYWxsIHNpdGVzLgorCSAqLworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJaWYgKGFjdCAhPSBO VUxMKSB7CisJCXJldHVybiAoKGFjdC0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfU1RSSUNUKSAhPSAw ID8gMSA6IDApOworCX0gZWxzZSB7CisJCS8qIFN0cmljdCBieSBkZWZhdWx0LiAqLworCQlyZXR1 cm4gMTsKKwl9Cit9CisKKy8qCisgKiAgRHVrdGFwZS9DIGZ1bmN0aW9uIG1hZ2ljCisgKi8KKwor RFVLX0VYVEVSTkFMIGR1a19pbnRfdCBkdWtfZ2V0X2N1cnJlbnRfbWFnaWMoZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2hvYmplY3QgKmZ1bmM7CisKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsK KwlpZiAoYWN0KSB7CisJCWZ1bmMgPSBEVUtfQUNUX0dFVF9GVU5DKGFjdCk7CisJCWlmICghZnVu YykgeworCQkJZHVrX3R2YWwgKnR2ID0gJmFjdC0+dHZfZnVuYzsKKwkJCWR1a19zbWFsbF91aW50 X3QgbGZfZmxhZ3M7CisJCQlsZl9mbGFncyA9IERVS19UVkFMX0dFVF9MSUdIVEZVTkNfRkxBR1Mo dHYpOworCQkJcmV0dXJuIChkdWtfaW50X3QpIERVS19MRlVOQ19GTEFHU19HRVRfTUFHSUMobGZf ZmxhZ3MpOworCQl9CisJCURVS19BU1NFUlQoZnVuYyAhPSBOVUxMKTsKKworCQlpZiAoRFVLX0hP QkpFQ1RfSVNfTkFURlVOQyhmdW5jKSkgeworCQkJZHVrX2huYXRmdW5jICpuZiA9IChkdWtfaG5h dGZ1bmMgKikgZnVuYzsKKwkJCXJldHVybiAoZHVrX2ludF90KSBuZi0+bWFnaWM7CisJCX0KKwl9 CisJcmV0dXJuIDA7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaW50X3QgZHVrX2dldF9tYWdpYyhk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19o b2JqZWN0ICpoOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCXR2ID0gZHVrX3Jl cXVpcmVfdHZhbCh0aHIsIGlkeCk7CisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJ aCA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJ CWlmICghRFVLX0hPQkpFQ1RfSEFTX05BVEZVTkMoaCkpIHsKKwkJCWdvdG8gdHlwZV9lcnJvcjsK KwkJfQorCQlyZXR1cm4gKGR1a19pbnRfdCkgKChkdWtfaG5hdGZ1bmMgKikgaCktPm1hZ2ljOwor CX0gZWxzZSBpZiAoRFVLX1RWQUxfSVNfTElHSFRGVU5DKHR2KSkgeworCQlkdWtfc21hbGxfdWlu dF90IGxmX2ZsYWdzID0gRFVLX1RWQUxfR0VUX0xJR0hURlVOQ19GTEFHUyh0dik7CisJCXJldHVy biAoZHVrX2ludF90KSBEVUtfTEZVTkNfRkxBR1NfR0VUX01BR0lDKGxmX2ZsYWdzKTsKKwl9CisK KwkvKiBmYWxsIHRocm91Z2ggKi8KKyB0eXBlX2Vycm9yOgorCURVS19FUlJPUl9UWVBFKHRociwg RFVLX1NUUl9VTkVYUEVDVEVEX1RZUEUpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOwor fQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfc2V0X21hZ2ljKGR1a19odGhyZWFkICp0aHIsIGR1 a19pZHhfdCBpZHgsIGR1a19pbnRfdCBtYWdpYykgeworCWR1a19obmF0ZnVuYyAqbmY7CisKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJbmYgPSBkdWtfcmVxdWlyZV9obmF0ZnVuYyh0 aHIsIGlkeCk7CisJRFVLX0FTU0VSVChuZiAhPSBOVUxMKTsKKwluZi0+bWFnaWMgPSAoZHVrX2lu dDE2X3QpIG1hZ2ljOworfQorCisvKgorICogIE1pc2MgaGVscGVycworICovCisKKy8qIFJlc29s dmUgYSBib3VuZCBmdW5jdGlvbiBvbiB2YWx1ZSBzdGFjayB0b3AgdG8gYSBub24tYm91bmQgdGFy Z2V0CisgKiAobGVhdmUgb3RoZXIgdmFsdWVzIGFzIGlzKS4KKyAqLworRFVLX0lOVEVSTkFMIHZv aWQgZHVrX3Jlc29sdmVfbm9uYm91bmRfZnVuY3Rpb24oZHVrX2h0aHJlYWQgKnRocikgeworCWR1 a190dmFsICp0djsKKworCURVS19BU1NFUlRfSFRIUkVBRF9WQUxJRCh0aHIpOworCisJdHYgPSBE VUtfR0VUX1RWQUxfTkVHSURYKHRociwgLTEpOworCWlmIChEVUtfVFZBTF9JU19PQkpFQ1QodHYp KSB7CisJCWR1a19ob2JqZWN0ICpoOworCisJCWggPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsK KwkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0JPVU5ERlVO QyhoKSkgeworCQkJZHVrX3B1c2hfdHZhbCh0aHIsICYoKGR1a19oYm91bmRmdW5jICopICh2b2lk ICopIGgpLT50YXJnZXQpOworCQkJZHVrX3JlcGxhY2UodGhyLCAtMik7CisjaWYgMAorCQkJRFVL X1RWQUxfU0VUX1RWQUwodHYsICYoKGR1a19oYm91bmRmdW5jICopIGgpLT50YXJnZXQpOworCQkJ RFVLX1RWQUxfSU5DUkVGKHRociwgdHYpOworCQkJRFVLX0hPQkpFQ1RfREVDUkVGX05PUloodGhy LCBoKTsKKyNlbmRpZgorCQkJLyogUmVseSBvbiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCgpIG9u IG5ldmVyIGNyZWF0aW5nIGEgYm91bmQKKwkJCSAqIGZ1bmN0aW9uIHdob3NlIHRhcmdldCBpcyBu b3QgcHJvcGVyLiAgVGhpcyBpcyBub3cgc2FmZQorCQkJICogYmVjYXVzZSB0aGUgdGFyZ2V0IGlz IG5vdCBldmVuIGFuIGludGVybmFsIHByb3BlcnR5IGJ1dCBhCisJCQkgKiBzdHJ1Y3QgbWVtYmVy LgorCQkJICovCisJCQlEVUtfQVNTRVJUKGR1a19pc19saWdodGZ1bmModGhyLCAtMSkgfHwgZHVr X2lzX2NhbGxhYmxlKHRociwgLTEpKTsKKwkJfQorCX0KKworCS8qIExpZ2h0ZnVuY3MgY2Fubm90 IGJlIGJvdW5kIGJ1dCBhcmUgYWx3YXlzIGNhbGxhYmxlIGFuZAorCSAqIGNvbnN0cnVjdGFibGUu CisJICovCit9CisvKgorICogIEVuY29kaW5nIGFuZCBkZWNvZGluZyBiYXNpYyBmb3JtYXRzOiBo ZXgsIGJhc2U2NC4KKyAqCisgKiAgVGhlc2UgYXJlIGluLXBsYWNlIG9wZXJhdGlvbnMgd2hpY2gg bWF5IGFsbG93IGFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiAgQmFzZS02NDog aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi00CisgKi8KKworLyog I2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgorICog IE1pc2MgaGVscGVycworICovCisKKy8qIFNoYXJlZCBoYW5kbGluZyBmb3IgZW5jb2RlL2RlY29k ZSBhcmd1bWVudC4gIEZhc3QgcGF0aCBoYW5kbGluZyBmb3IKKyAqIGJ1ZmZlciBhbmQgc3RyaW5n IHZhbHVlcyBiZWNhdXNlIHRoZXkncmUgdGhlIG1vc3QgY29tbW9uLiAgSW4gcGFydGljdWxhciwK KyAqIGF2b2lkIGNyZWF0aW5nIGEgdGVtcG9yYXJ5IHN0cmluZyBvciBidWZmZXIgd2hlbiBwb3Nz aWJsZS4KKyAqLworRFVLX0xPQ0FMIGNvbnN0IGR1a191aW50OF90ICpkdWtfX3ByZXBfY29kZWNf YXJnKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9sZW4p IHsKKwl2b2lkICpwdHI7CisJZHVrX2Jvb2xfdCBpc2J1ZmZlcjsKKworCURVS19BU1NFUlQoZHVr X2lzX3ZhbGlkX2luZGV4KHRociwgaWR4KSk7ICAvKiBjaGVja2VkIGJ5IGNhbGxlciAqLworCisJ LyogWFhYOiB3aXRoIGRlZl9wdHIgc2V0IHRvIGEgc3RhY2sgcmVsYXRlZCBwb2ludGVyLCBpc2J1 ZmZlciBjb3VsZAorCSAqIGJlIHJlbW92ZWQgZnJvbSB0aGUgaGVscGVyPworCSAqLworCXB0ciA9 IGR1a19nZXRfYnVmZmVyX2RhdGFfcmF3KHRociwgaWR4LCBvdXRfbGVuLCBOVUxMIC8qZGVmX3B0 ciovLCAwIC8qZGVmX3NpemUqLywgMCAvKnRocm93X2ZsYWcqLywgJmlzYnVmZmVyKTsKKwlpZiAo aXNidWZmZXIpIHsKKwkJRFVLX0FTU0VSVCgqb3V0X2xlbiA9PSAwIHx8IHB0ciAhPSBOVUxMKTsK KwkJcmV0dXJuIChjb25zdCBkdWtfdWludDhfdCAqKSBwdHI7CisJfQorCXJldHVybiAoY29uc3Qg ZHVrX3VpbnQ4X3QgKikgZHVrX3RvX2xzdHJpbmcodGhyLCBpZHgsIG91dF9sZW4pOworfQorCisv KgorICogIEJhc2U2NAorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQkFTRTY0X1NVUFBPUlQp CisvKiBCeXRlcyBlbWl0dGVkIGZvciBudW1iZXIgb2YgcGFkZGluZyBjaGFyYWN0ZXJzIGluIHJh bmdlIFswLDRdLiAqLworRFVLX0xPQ0FMIGNvbnN0IGR1a19pbnQ4X3QgZHVrX19iYXNlNjRfZGVj b2RlX25lcXVhbF9zdGVwWzVdID0geworCTMsICAgLyogIyMjIyAtPiAyNCBiaXRzLCBlbWl0IDMg Ynl0ZXMgKi8KKwkyLCAgIC8qICMjIz0gLT4gMTggYml0cywgZW1pdCAyIGJ5dGVzICovCisJMSwg ICAvKiAjIz09IC0+IDEyIGJpdHMsIGVtaXQgMSBieXRlICovCisJLTEsICAvKiAjPT09IC0+IDYg Yml0cywgZXJyb3IgKi8KKwkwLCAgIC8qID09PT0gLT4gMCBiaXRzLCBlbWl0IDAgYnl0ZXMgKi8K K307CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQkFTRTY0X0ZBU1RQQVRIKQorRFVLX0xPQ0FMIGNv bnN0IGR1a191aW50OF90IGR1a19fYmFzZTY0X2VuY3RhYl9mYXN0WzY0XSA9IHsKKwkweDQxVSwg MHg0MlUsIDB4NDNVLCAweDQ0VSwgMHg0NVUsIDB4NDZVLCAweDQ3VSwgMHg0OFUsIDB4NDlVLCAw eDRhVSwgMHg0YlUsIDB4NGNVLCAweDRkVSwgMHg0ZVUsIDB4NGZVLCAweDUwVSwgIC8qIEEuLi5Q ICovCisJMHg1MVUsIDB4NTJVLCAweDUzVSwgMHg1NFUsIDB4NTVVLCAweDU2VSwgMHg1N1UsIDB4 NThVLCAweDU5VSwgMHg1YVUsIDB4NjFVLCAweDYyVSwgMHg2M1UsIDB4NjRVLCAweDY1VSwgMHg2 NlUsICAvKiBRLi4uZiAqLworCTB4NjdVLCAweDY4VSwgMHg2OVUsIDB4NmFVLCAweDZiVSwgMHg2 Y1UsIDB4NmRVLCAweDZlVSwgMHg2ZlUsIDB4NzBVLCAweDcxVSwgMHg3MlUsIDB4NzNVLCAweDc0 VSwgMHg3NVUsIDB4NzZVLCAgLyogZy4uLnYgKi8KKwkweDc3VSwgMHg3OFUsIDB4NzlVLCAweDdh VSwgMHgzMFUsIDB4MzFVLCAweDMyVSwgMHgzM1UsIDB4MzRVLCAweDM1VSwgMHgzNlUsIDB4MzdV LCAweDM4VSwgMHgzOVUsIDB4MmJVLCAweDJmVSAgIC8qIHcuLi4vICovCit9OworI2VuZGlmICAv KiBEVUtfVVNFX0JBU0U2NF9GQVNUUEFUSCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JBU0U2 NF9GQVNUUEFUSCkKKy8qIERlY29kZSB0YWJsZSBmb3Igb25lIGJ5dGUgb2YgaW5wdXQ6CisgKiAg IC0xID0gYWxsb3dlZCB3aGl0ZXNwYWNlCisgKiAgIC0yID0gcGFkZGluZworICogICAtMyA9IGVy cm9yCisgKiAgICAwLi4uNjMgZGVjb2RlZCBieXRlcworICovCitEVUtfTE9DQUwgY29uc3QgZHVr X2ludDhfdCBkdWtfX2Jhc2U2NF9kZWN0YWJfZmFzdFsyNTZdID0geworCS0zLCAtMywgLTMsIC0z LCAtMywgLTMsIC0zLCAtMywgLTMsIC0xLCAtMSwgLTMsIC0zLCAtMSwgLTMsIC0zLCAgLyogMHgw MC4uLjB4MGYgKi8KKwktMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMs IC0zLCAtMywgLTMsIC0zLCAtMywgIC8qIDB4MTAuLi4weDFmICovCisJLTEsIC0zLCAtMywgLTMs IC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCA2MiwgLTMsIC0zLCAtMywgNjMsICAvKiAweDIw Li4uMHgyZiAqLworCTUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCAtMywg LTMsIC0zLCAtMiwgLTMsIC0zLCAgLyogMHgzMC4uLjB4M2YgKi8KKwktMywgIDAsICAxLCAgMiwg IDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgIC8qIDB4NDAu Li4weDRmICovCisJMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAt MywgLTMsIC0zLCAtMywgLTMsICAvKiAweDUwLi4uMHg1ZiAqLworCS0zLCAyNiwgMjcsIDI4LCAy OSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCAgLyogMHg2MC4u LjB4NmYgKi8KKwk0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIC0z LCAtMywgLTMsIC0zLCAtMywgIC8qIDB4NzAuLi4weDdmICovCisJLTMsIC0zLCAtMywgLTMsIC0z LCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsICAvKiAweDgwLi4u MHg4ZiAqLworCS0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMs IC0zLCAtMywgLTMsIC0zLCAgLyogMHg5MC4uLjB4OWYgKi8KKwktMywgLTMsIC0zLCAtMywgLTMs IC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgIC8qIDB4YTAuLi4w eGFmICovCisJLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywg LTMsIC0zLCAtMywgLTMsICAvKiAweGIwLi4uMHhiZiAqLworCS0zLCAtMywgLTMsIC0zLCAtMywg LTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAgLyogMHhjMC4uLjB4 Y2YgKi8KKwktMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAt MywgLTMsIC0zLCAtMywgIC8qIDB4ZDAuLi4weGRmICovCisJLTMsIC0zLCAtMywgLTMsIC0zLCAt MywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsICAvKiAweGUwLi4uMHhl ZiAqLworCS0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0zLCAtMywgLTMsIC0z LCAtMywgLTMsIC0zICAgLyogMHhmMC4uLjB4ZmYgKi8KK307CisjZW5kaWYgIC8qIERVS19VU0Vf QkFTRTY0X0ZBU1RQQVRIICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQkFTRTY0X0ZBU1RQQVRI KQorRFVLX0xPQ0FMIERVS19BTFdBWVNfSU5MSU5FIHZvaWQgZHVrX19iYXNlNjRfZW5jb2RlX2Zh c3RfMyhjb25zdCBkdWtfdWludDhfdCAqc3JjLCBkdWtfdWludDhfdCAqZHN0KSB7CisJZHVrX3Vp bnRfdCB0OworCisJdCA9IChkdWtfdWludF90KSBzcmNbMF07CisJdCA9ICh0IDw8IDgpICsgKGR1 a191aW50X3QpIHNyY1sxXTsKKwl0ID0gKHQgPDwgOCkgKyAoZHVrX3VpbnRfdCkgc3JjWzJdOwor CisJZHN0WzBdID0gZHVrX19iYXNlNjRfZW5jdGFiX2Zhc3RbdCA+PiAxOF07CisJZHN0WzFdID0g ZHVrX19iYXNlNjRfZW5jdGFiX2Zhc3RbKHQgPj4gMTIpICYgMHgzZlVdOworCWRzdFsyXSA9IGR1 a19fYmFzZTY0X2VuY3RhYl9mYXN0Wyh0ID4+IDYpICYgMHgzZlVdOworCWRzdFszXSA9IGR1a19f YmFzZTY0X2VuY3RhYl9mYXN0W3QgJiAweDNmVV07CisKKyNpZiAwCisJLyogVGVzdGVkOiBub3Qg ZmFzdGVyIG9uIHg2NCwgbW9zdCBsaWtlbHkgZHVlIHRvIGFsaWFzaW5nIGJldHdlZW4KKwkgKiBv dXRwdXQgYW5kIGlucHV0IGluZGV4IGNvbXB1dGF0aW9uLgorCSAqLworCS8qIGFhYWFhYWJiIGJi YmJjY2NjIGNjZGRkZGRkICovCisJZHN0WzBdID0gZHVrX19iYXNlNjRfZW5jdGFiX2Zhc3RbKHNy Y1swXSA+PiAyKSAmIDB4M2ZVXTsKKwlkc3RbMV0gPSBkdWtfX2Jhc2U2NF9lbmN0YWJfZmFzdFso KHNyY1swXSA8PCA0KSAmIDB4MzBVKSB8ICgoc3JjWzFdID4+IDQpICYgMHgwZlUpXTsKKwlkc3Rb Ml0gPSBkdWtfX2Jhc2U2NF9lbmN0YWJfZmFzdFsoKHNyY1sxXSA8PCAyKSAmIDB4M2ZVKSB8ICgo c3JjWzJdID4+IDYpICYgMHgwM1UpXTsKKwlkc3RbM10gPSBkdWtfX2Jhc2U2NF9lbmN0YWJfZmFz dFtzcmNbMl0gJiAweDNmVV07CisjZW5kaWYKK30KKworRFVLX0xPQ0FMIERVS19BTFdBWVNfSU5M SU5FIHZvaWQgZHVrX19iYXNlNjRfZW5jb2RlX2Zhc3RfMihjb25zdCBkdWtfdWludDhfdCAqc3Jj LCBkdWtfdWludDhfdCAqZHN0KSB7CisJZHVrX3VpbnRfdCB0OworCisJdCA9IChkdWtfdWludF90 KSBzcmNbMF07CisJdCA9ICh0IDw8IDgpICsgKGR1a191aW50X3QpIHNyY1sxXTsKKwlkc3RbMF0g PSBkdWtfX2Jhc2U2NF9lbmN0YWJfZmFzdFt0ID4+IDEwXTsgICAgICAgICAgIC8qIFhYWFhYWC0t IC0tLS0tLS0tICovCisJZHN0WzFdID0gZHVrX19iYXNlNjRfZW5jdGFiX2Zhc3RbKHQgPj4gNCkg JiAweDNmVV07ICAvKiAtLS0tLS1YWCBYWFhYLS0tLSAqLworCWRzdFsyXSA9IGR1a19fYmFzZTY0 X2VuY3RhYl9mYXN0Wyh0IDw8IDIpICYgMHgzZlVdOyAgLyogLS0tLS0tLS0gLS0tLVhYWFggKi8K Kwlkc3RbM10gPSBEVUtfQVNDX0VRVUFMUzsKK30KKworRFVLX0xPQ0FMIERVS19BTFdBWVNfSU5M SU5FIHZvaWQgZHVrX19iYXNlNjRfZW5jb2RlX2Zhc3RfMShjb25zdCBkdWtfdWludDhfdCAqc3Jj LCBkdWtfdWludDhfdCAqZHN0KSB7CisJZHVrX3VpbnRfdCB0OworCisJdCA9IChkdWtfdWludF90 KSBzcmNbMF07CisJZHN0WzBdID0gZHVrX19iYXNlNjRfZW5jdGFiX2Zhc3RbdCA+PiAyXTsgICAg ICAgICAgICAvKiBYWFhYWFgtLSAqLworCWRzdFsxXSA9IGR1a19fYmFzZTY0X2VuY3RhYl9mYXN0 Wyh0IDw8IDQpICYgMHgzZlVdOyAgLyogLS0tLS0tWFggKi8KKwlkc3RbMl0gPSBEVUtfQVNDX0VR VUFMUzsKKwlkc3RbM10gPSBEVUtfQVNDX0VRVUFMUzsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVr X19iYXNlNjRfZW5jb2RlX2hlbHBlcihjb25zdCBkdWtfdWludDhfdCAqc3JjLCBkdWtfc2l6ZV90 IHNyY2xlbiwgZHVrX3VpbnQ4X3QgKmRzdCkgeworCWR1a19zaXplX3QgbjsKKwljb25zdCBkdWtf dWludDhfdCAqcDsKKwlkdWtfdWludDhfdCAqcTsKKworCW4gPSBzcmNsZW47CisJcCA9IHNyYzsK KwlxID0gZHN0OworCisJaWYgKG4gPj0gMTZVKSB7CisJCS8qIEZhc3QgcGF0aCwgdW5yb2xsZWQg YnkgNCwgYWxsb3dzIGludGVybGVhdmluZy4gIFByb2Nlc3MKKwkJICogMTItYnl0ZSBpbnB1dCBj aHVua3Mgd2hpY2ggZW5jb2RlIHRvIDE2LWNoYXIgb3V0cHV0IGNodW5rcy4KKwkJICogT25seSBl bnRlciB3aGVuIGF0IGxlYXN0IG9uZSBibG9jayBpcyBlbWl0dGVkIChhdm9pZHMgZGl2K211bAor CQkgKiBmb3Igc2hvcnQgaW5wdXRzIHRvbykuCisJCSAqLworCQljb25zdCBkdWtfdWludDhfdCAq cF9lbmRfZmFzdDsKKworCQlwX2VuZF9mYXN0ID0gcCArICgobiAvIDEyVSkgKiAxMlUpOworCQlE VUtfQVNTRVJUKHBfZW5kX2Zhc3QgPj0gcCArIDEyKTsKKwkJZG8geworCQkJZHVrX19iYXNlNjRf ZW5jb2RlX2Zhc3RfMyhwLCBxKTsKKwkJCWR1a19fYmFzZTY0X2VuY29kZV9mYXN0XzMocCArIDMs IHEgKyA0KTsKKwkJCWR1a19fYmFzZTY0X2VuY29kZV9mYXN0XzMocCArIDYsIHEgKyA4KTsKKwkJ CWR1a19fYmFzZTY0X2VuY29kZV9mYXN0XzMocCArIDksIHEgKyAxMik7CisJCQlwICs9IDEyOwor CQkJcSArPSAxNjsKKwkJfSB3aGlsZSAoRFVLX0xJS0VMWShwICE9IHBfZW5kX2Zhc3QpKTsKKwor CQlEVUtfQVNTRVJUKHNyYyArIHNyY2xlbiA+PSBwKTsKKwkJbiA9IChkdWtfc2l6ZV90KSAoc3Jj ICsgc3JjbGVuIC0gcCk7CisJCURVS19BU1NFUlQobiA8IDEyVSk7CisJfQorCisJLyogUmVtYWlu ZGVyLiAqLworCXdoaWxlIChuID49IDNVKSB7CisJCWR1a19fYmFzZTY0X2VuY29kZV9mYXN0XzMo cCwgcSk7CisJCXAgKz0gMzsKKwkJcSArPSA0OworCQluIC09IDNVOworCX0KKwlEVUtfQVNTRVJU KG4gPT0gMFUgfHwgbiA9PSAxVSB8fCBuID09IDJVKTsKKwlpZiAobiA9PSAxVSkgeworCQlkdWtf X2Jhc2U2NF9lbmNvZGVfZmFzdF8xKHAsIHEpOworI2lmIDAgIC8qIFVubmVjZXNzYXJ5LiAqLwor CQlwICs9IDE7CisJCXEgKz0gNDsKKwkJbiAtPSAxVTsKKyNlbmRpZgorCX0gZWxzZSBpZiAobiA9 PSAyVSkgeworCQlkdWtfX2Jhc2U2NF9lbmNvZGVfZmFzdF8yKHAsIHEpOworI2lmIDAgIC8qIFVu bmVjZXNzYXJ5LiAqLworCQlwICs9IDI7CisJCXEgKz0gNDsKKwkJbiAtPSAyVTsKKyNlbmRpZgor CX0gZWxzZSB7CisJCURVS19BU1NFUlQobiA9PSAwVSk7ICAvKiBub3RoaW5nIHRvIGRvICovCisJ CTsKKwl9Cit9CisjZWxzZSAgLyogRFVLX1VTRV9CQVNFNjRfRkFTVFBBVEggKi8KK0RVS19MT0NB TCB2b2lkIGR1a19fYmFzZTY0X2VuY29kZV9oZWxwZXIoY29uc3QgZHVrX3VpbnQ4X3QgKnNyYywg ZHVrX3NpemVfdCBzcmNsZW4sIGR1a191aW50OF90ICpkc3QpIHsKKwlkdWtfc21hbGxfdWludF90 IGksIG5wYWQ7CisJZHVrX3VpbnRfdCB0LCB4LCB5OworCWNvbnN0IGR1a191aW50OF90ICpwOwor CWNvbnN0IGR1a191aW50OF90ICpwX2VuZDsKKwlkdWtfdWludDhfdCAqcTsKKworCXAgPSBzcmM7 CisJcF9lbmQgPSBzcmMgKyBzcmNsZW47CisJcSA9IGRzdDsKKwlucGFkID0gMFU7CisKKwl3aGls ZSAocCA8IHBfZW5kKSB7CisJCS8qIFJlYWQgMyBieXRlcyBpbnRvICd0JywgcGFkZGVkIGJ5IHpl cm8uICovCisJCXQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQl0ID0gdCA8 PCA4OworCQkJaWYgKHAgPCBwX2VuZCkgeworCQkJCXQgKz0gKGR1a191aW50X3QpICgqcCsrKTsK KwkJCX0gZWxzZSB7CisJCQkJLyogVGhpcyBvbmx5IGhhcHBlbnMgb24gdGhlIGxhc3QgbG9vcCBh bmQgd2UncmUKKwkJCQkgKiBndWFyYW50ZWVkIHRvIGV4aXQgb24gdGhlIG5leHQgbG9vcC4KKwkJ CQkgKi8KKwkJCQlucGFkKys7CisJCQl9CisJCX0KKwkJRFVLX0FTU0VSVChucGFkIDw9IDJVKTsK KworCQkvKiBFbWl0IDQgZW5jb2RlZCBjaGFyYWN0ZXJzLiAgSWYgbnBhZCA+IDAsIHNvbWUgb2Yg dGhlCisJCSAqIGNoYXJzIHdpbGwgYmUgaW5jb3JyZWN0ICh6ZXJvIGJpdHMpIGJ1dCB3ZSBmaXgg dXAgdGhlCisJCSAqIHBhZGRpbmcgYWZ0ZXIgdGhlIGxvb3AuICBBIHN0cmFpZ2h0Zm9yd2FyZCA2 NC1ieXRlCisJCSAqIGxvb2t1cCB3b3VsZCBiZSBmYXN0ZXIgYW5kIGNsZWFuZXIsIGJ1dCB0aGlz IGlzIHNob3J0ZXIuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl4ID0g KCh0ID4+IDE4KSAmIDB4M2ZVKTsKKwkJCXQgPSB0IDw8IDY7CisKKwkJCWlmICh4IDw9IDUxVSkg eworCQkJCWlmICh4IDw9IDI1KSB7CisJCQkJCXkgPSB4ICsgRFVLX0FTQ19VQ19BOworCQkJCX0g ZWxzZSB7CisJCQkJCXkgPSB4IC0gMjYgKyBEVUtfQVNDX0xDX0E7CisJCQkJfQorCQkJfSBlbHNl IHsKKwkJCQlpZiAoeCA8PSA2MVUpIHsKKwkJCQkJeSA9IHggLSA1MiArIERVS19BU0NfMDsKKwkJ CQl9IGVsc2UgaWYgKHggPT0gNjIpIHsKKwkJCQkJeSA9IERVS19BU0NfUExVUzsKKwkJCQl9IGVs c2UgeworCQkJCQlEVUtfQVNTRVJUKHggPT0gNjMpOworCQkJCQl5ID0gRFVLX0FTQ19TTEFTSDsK KwkJCQl9CisJCQl9CisKKwkJCSpxKysgPSAoZHVrX3VpbnQ4X3QpIHk7CisJCX0KKwl9CisKKwkv KiBIYW5kbGUgcGFkZGluZyBieSByZXdyaXRpbmcgMC0yIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhl IGVuZC4KKwkgKgorCSAqICBNaXNzaW5nIGJ5dGVzICAgIG5wYWQgICAgIGJhc2U2NCBleGFtcGxl CisJICogICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAjIyMjCisJICogICAgMSAgICAgICAg ICAgICAgIDEgICAgICAgICAjIyM9CisJICogICAgMiAgICAgICAgICAgICAgIDIgICAgICAgICAj Iz09CisJICovCisJRFVLX0FTU0VSVChucGFkIDw9IDJVKTsKKwl3aGlsZSAobnBhZCA+IDBVKSB7 CisJCSoocSAtIG5wYWQpID0gRFVLX0FTQ19FUVVBTFM7CisJCW5wYWQtLTsKKwl9Cit9CisjZW5k aWYgIC8qIERVS19VU0VfQkFTRTY0X0ZBU1RQQVRIICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf QkFTRTY0X0ZBU1RQQVRIKQorRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19iYXNlNjRfZGVjb2Rl X2hlbHBlcihjb25zdCBkdWtfdWludDhfdCAqc3JjLCBkdWtfc2l6ZV90IHNyY2xlbiwgZHVrX3Vp bnQ4X3QgKmRzdCwgZHVrX3VpbnQ4X3QgKipvdXRfZHN0X2ZpbmFsKSB7CisJZHVrX2ludF90IHg7 CisJZHVrX3VpbnRfdCB0OworCWR1a19zbWFsbF91aW50X3Qgbl9lcXVhbDsKKwlkdWtfaW50OF90 IHN0ZXA7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnBfZW5k OworCWNvbnN0IGR1a191aW50OF90ICpwX2VuZF9zYWZlOworCWR1a191aW50OF90ICpxOworCisJ cCA9IHNyYzsKKwlwX2VuZCA9IHNyYyArIHNyY2xlbjsKKwlwX2VuZF9zYWZlID0gcF9lbmQgLSA4 OyAgLyogSWYgJ3NyYyA8PSBzcmNfZW5kX3NhZmUnLCBzYWZlIHRvIHJlYWQgOCBieXRlcy4gKi8K KwlxID0gZHN0OworCisJLyogQWx0ZXJuYXRlIGJldHdlZW4gYSBmYXN0IHBhdGggd2hpY2ggcHJv Y2Vzc2VzIGNsZWFuIGdyb3VwcyB3aXRoIG5vCisJICogcGFkZGluZyBvciB3aGl0ZXNwYWNlLCBh bmQgYSBzbG93IHBhdGggd2hpY2ggcHJvY2Vzc2VzIG9uZSBhcmJpdHJhcnkKKwkgKiBncm91cCBh bmQgdGhlbiByZS1lbnRlcnMgdGhlIGZhc3QgcGF0aC4gIFRoaXMgaGFuZGxlcyBlLmcuIGJhc2U2 NAorCSAqIHdpdGggbmV3bGluZXMgcmVhc29uYWJseSB3ZWxsIGJlY2F1c2UgdGhlIG1ham9yaXR5 IG9mIGEgbGluZSBpcyBpbgorCSAqIHRoZSBmYXN0IHBhdGguCisJICovCisJZm9yICg7Oykgewor CQkvKiBGYXN0IHBhdGgsIG9uIGVhY2ggbG9vcCBoYW5kbGUgdHdvIDQtY2hhciBpbnB1dCBncm91 cHMuCisJCSAqIElmIGJvdGggYXJlIGNsZWFuLCBlbWl0IDYgYnl0ZXMgYW5kIGNvbnRpbnVlLiAg SWYgZmlyc3QKKwkJICogaXMgY2xlYW4sIGVtaXQgMyBieXRlcyBhbmQgZHJvcCBvdXQ7IG90aGVy d2lzZSBlbWl0CisJCSAqIG5vdGhpbmcgYW5kIGRyb3Agb3V0LiAgVGhpcyBhcHByb2FjaCBjb3Vs ZCBiZSBleHRlbmRlZCB0bworCQkgKiBtb3JlIGdyb3VwcyBwZXIgbG9vcCwgYnV0IGZvciBpbnB1 dHMgd2l0aCBlLmcuIHBlcmlvZGljCisJCSAqIG5ld2xpbmVzICh3aGljaCBhcmUgY29tbW9uKSBp dCBtaWdodCBub3QgYmUgYW4gaW1wcm92ZW1lbnQuCisJCSAqLworCQl3aGlsZSAoRFVLX0xJS0VM WShwIDw9IHBfZW5kX3NhZmUpKSB7CisJCQlkdWtfaW50X3QgdDEsIHQyOworCisJCQkvKiBUaGUg bG9va3VwIGJ5dGUgaXMgaW50ZW50aW9uYWxseSBzaWduIGV4dGVuZGVkIHRvCisJCQkgKiAoYXQg bGVhc3QpIDMyIGJpdHMgYW5kIHRoZW4gT1JlZC4gIFRoaXMgZW5zdXJlcworCQkJICogdGhhdCBp cyBhdCBsZWFzdCAxIGJ5dGUgaXMgbmVnYXRpdmUsIHRoZSBoaWdoZXN0CisJCQkgKiBiaXQgb2Yg dGhlIGFjY3VtdWxhdG9yIHdpbGwgYmUgc2V0IGF0IHRoZSBlbmQgYW5kCisJCQkgKiB3ZSBkb24n dCBuZWVkIHRvIGNoZWNrIGV2ZXJ5IGJ5dGUuCisJCQkgKgorCQkJICogUmVhZCBhbGwgaW5wdXQg Ynl0ZXMgZmlyc3QgYmVmb3JlIHdyaXRpbmcgb3V0cHV0CisJCQkgKiBieXRlcyB0byBtaW5pbWl6 ZSBhbGlhc2luZy4KKwkJCSAqLworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImZhc3QgbG9vcDog cD0lcCwgcF9lbmRfc2FmZT0lcCwgcF9lbmQ9JXAiLAorCQkJICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHZvaWQgKikgcCwgKGNvbnN0IHZvaWQgKikgcF9lbmRfc2FmZSwgKGNvbnN0IHZvaWQg KikgcF9lbmQpKTsKKworCQkJdDEgPSAoZHVrX2ludF90KSBkdWtfX2Jhc2U2NF9kZWN0YWJfZmFz dFtwWzBdXTsKKwkJCXQxID0gKGR1a19pbnRfdCkgKChkdWtfdWludF90KSB0MSA8PCA2KSB8IChk dWtfaW50X3QpIGR1a19fYmFzZTY0X2RlY3RhYl9mYXN0W3BbMV1dOworCQkJdDEgPSAoZHVrX2lu dF90KSAoKGR1a191aW50X3QpIHQxIDw8IDYpIHwgKGR1a19pbnRfdCkgZHVrX19iYXNlNjRfZGVj dGFiX2Zhc3RbcFsyXV07CisJCQl0MSA9IChkdWtfaW50X3QpICgoZHVrX3VpbnRfdCkgdDEgPDwg NikgfCAoZHVrX2ludF90KSBkdWtfX2Jhc2U2NF9kZWN0YWJfZmFzdFtwWzNdXTsKKworCQkJdDIg PSAoZHVrX2ludF90KSBkdWtfX2Jhc2U2NF9kZWN0YWJfZmFzdFtwWzRdXTsKKwkJCXQyID0gKGR1 a19pbnRfdCkgKChkdWtfdWludF90KSB0MiA8PCA2KSB8IChkdWtfaW50X3QpIGR1a19fYmFzZTY0 X2RlY3RhYl9mYXN0W3BbNV1dOworCQkJdDIgPSAoZHVrX2ludF90KSAoKGR1a191aW50X3QpIHQy IDw8IDYpIHwgKGR1a19pbnRfdCkgZHVrX19iYXNlNjRfZGVjdGFiX2Zhc3RbcFs2XV07CisJCQl0 MiA9IChkdWtfaW50X3QpICgoZHVrX3VpbnRfdCkgdDIgPDwgNikgfCAoZHVrX2ludF90KSBkdWtf X2Jhc2U2NF9kZWN0YWJfZmFzdFtwWzddXTsKKworCQkJcVswXSA9IChkdWtfdWludDhfdCkgKCgo ZHVrX3VpbnRfdCkgdDEgPj4gMTYpICYgMHhmZlUpOworCQkJcVsxXSA9IChkdWtfdWludDhfdCkg KCgoZHVrX3VpbnRfdCkgdDEgPj4gOCkgJiAweGZmVSk7CisJCQlxWzJdID0gKGR1a191aW50OF90 KSAoKGR1a191aW50X3QpIHQxICYgMHhmZlUpOworCisJCQlxWzNdID0gKGR1a191aW50OF90KSAo KChkdWtfdWludF90KSB0MiA+PiAxNikgJiAweGZmVSk7CisJCQlxWzRdID0gKGR1a191aW50OF90 KSAoKChkdWtfdWludF90KSB0MiA+PiA4KSAmIDB4ZmZVKTsKKwkJCXFbNV0gPSAoZHVrX3VpbnQ4 X3QpICgoZHVrX3VpbnRfdCkgdDIgJiAweGZmVSk7CisKKwkJCS8qIE9wdGltaXN0aWMgY2hlY2sg dXNpbmcgb25lIGJyYW5jaC4gKi8KKwkJCWlmIChEVUtfTElLRUxZKCh0MSB8IHQyKSA+PSAwKSkg eworCQkJCXAgKz0gODsKKwkJCQlxICs9IDY7CisJCQl9IGVsc2UgaWYgKHQxID49IDApIHsKKwkJ CQlEVUtfREREKERVS19ERERQUklOVCgiZmFzdCBsb29wIGZpcnN0IGdyb3VwIHdhcyBjbGVhbiwg c2Vjb25kIHdhcyBub3QsIHByb2Nlc3Mgb25lIHNsb3cgcGF0aCBncm91cCIpKTsKKwkJCQlEVUtf QVNTRVJUKHQyIDwgMCk7CisJCQkJcCArPSA0OworCQkJCXEgKz0gMzsKKwkJCQlicmVhazsKKwkJ CX0gZWxzZSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImZhc3QgbG9vcCBmaXJzdCBncm91 cCB3YXMgbm90IGNsZWFuLCBzZWNvbmQgZG9lcyBub3QgbWF0dGVyLCBwcm9jZXNzIG9uZSBzbG93 IHBhdGggZ3JvdXAiKSk7CisJCQkJRFVLX0FTU0VSVCh0MSA8IDApOworCQkJCWJyZWFrOworCQkJ fQorCQl9ICAvKiBmYXN0IHBhdGggKi8KKworCQkvKiBTbG93IHBhdGggc3RlcCAxOiB0cnkgdG8g c2NhbiBhIDQtY2hhcmFjdGVyIGVuY29kZWQgZ3JvdXAsCisJCSAqIGVuZC1vZi1pbnB1dCwgb3Ig c3RhcnQtb2YtcGFkZGluZy4gIFdlIGV4aXQgd2l0aDoKKwkJICogICAxLiBuX2NoYXJzID09IDQ6 IGZ1bGwgZ3JvdXAsIG5vIHBhZGRpbmcsIG5vIGVuZC1vZi1pbnB1dC4KKwkJICogICAyLiBuX2No YXJzIDwgNDogcGFydGlhbCBncm91cCAobWF5IGFsc28gYmUgMCksIGVuY291bnRlcmVkCisJCSAq ICAgICAgcGFkZGluZyBvciBlbmQgb2YgaW5wdXQuCisJCSAqCisJCSAqIFRoZSBhY2N1bXVsYXRv ciBpcyBpbml0aWFsaXplZCB0byAxOyB0aGlzIGFsbG93cyB1cyB0byBkZXRlY3QKKwkJICogYSBm dWxsIGdyb3VwIGJ5IGNvbXBhcmluZyA+PSAweDEwMDAwMDAgd2l0aG91dCBhbiBleHRyYQorCQkg KiBjb3VudGVyIHZhcmlhYmxlLgorCQkgKi8KKwkJdCA9IDFVTDsKKwkJZm9yICg7OykgeworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoInNsb3cgbG9vcDogcD0lcCwgcF9lbmQ9JXAsIHQ9JWx1IiwK KwkJCSAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHAsIChjb25zdCB2b2lkICop IHBfZW5kLCAodW5zaWduZWQgbG9uZykgdCkpOworCisJCQlpZiAoRFVLX0xJS0VMWShwIDwgcF9l bmQpKSB7CisJCQkJeCA9IGR1a19fYmFzZTY0X2RlY3RhYl9mYXN0WypwKytdOworCQkJCWlmIChE VUtfTElLRUxZKHggPj0gMCkpIHsKKwkJCQkJRFVLX0FTU0VSVCh4ID49IDAgJiYgeCA8PSA2Myk7 CisJCQkJCXQgPSAodCA8PCA2KSArIChkdWtfdWludF90KSB4OworCQkJCQlpZiAodCA+PSAweDEw MDAwMDBVTCkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHggPT0gLTEp IHsKKwkJCQkJY29udGludWU7ICAvKiBhbGxvd2VkIGFzY2lpIHdoaXRlc3BhY2UgKi8KKwkJCQl9 IGVsc2UgaWYgKHggPT0gLTIpIHsKKwkJCQkJcC0tOworCQkJCQlicmVhazsgIC8qIHN0YXJ0IG9m IHBhZGRpbmcgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlEVUtfQVNTRVJUKHggPT0gLTMpOworCQkJ CQlnb3RvIGRlY29kZV9lcnJvcjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOyAgLyog ZW5kIG9mIGlucHV0ICovCisJCQl9CisJCX0gIC8qIHNsb3cgcGF0aCBzdGVwIDEgKi8KKworCQkv KiBDb21wbGV0ZSB0aGUgcGFkZGluZyBieSBzaW11bGF0aW5nIHBhZCBjaGFyYWN0ZXJzLAorCQkg KiByZWdhcmRsZXNzIG9mIGFjdHVhbCBpbnB1dCBwYWRkaW5nIGNoYXJzLgorCQkgKi8KKwkJbl9l cXVhbCA9IDA7CisJCXdoaWxlICh0IDwgMHgxMDAwMDAwVUwpIHsKKwkJCXQgPSAodCA8PCA2KSAr IDBVOworCQkJbl9lcXVhbCsrOworCQl9CisKKwkJLyogU2xvdyBwYXRoIHN0ZXAgMjogZGVhbCB3 aXRoIGZ1bGwvcGFydGlhbCBncm91cCwgcGFkZGluZywKKwkJICogZXRjLiAgTm90ZSB0aGF0IGZv ciBudW0gY2hhcnMgaW4gWzAsM10gd2UgaW50ZW50aW9uYWxseSBlbWl0CisJCSAqIDMgYnl0ZXMg YnV0IGRvbid0IHN0ZXAgZm9yd2FyZCB0aGF0IG11Y2gsIGJ1ZmZlciBzcGFjZSBpcworCQkgKiBn dWFyYW50ZWVkIGluIHNldHVwLgorCQkgKgorCQkgKiAgbnVtIGNoYXJzOgorCQkgKiAgIDAgICAg ICAjIyMjICAgbm8gb3V0cHV0ICg9IHN0ZXAgMCkKKwkJICogICAxICAgICAgIz09PSAgIHJlamVj dCwgNiBiaXRzIG9mIGRhdGEKKwkJICogICAyICAgICAgIyM9PSAgIDEyIGJpdHMgb2YgZGF0YSwg b3V0cHV0IDEgYnl0ZSAoPSBzdGVwIDEpCisJCSAqICAgMyAgICAgICMjIz0gICAxOCBiaXRzIG9m IGRhdGEsIG91dHB1dCAyIGJ5dGVzICg9IHN0ZXAgMikKKwkJICogICA0ICAgICAgIyMjIyAgIDI0 IGJpdHMgb2YgZGF0YSwgb3V0cHV0IDMgYnl0ZXMgKD0gc3RlcCAzKQorCQkgKi8KKwkJcVswXSA9 IChkdWtfdWludDhfdCkgKCh0ID4+IDE2KSAmIDB4ZmZVKTsKKwkJcVsxXSA9IChkdWtfdWludDhf dCkgKCh0ID4+IDgpICYgMHhmZlUpOworCQlxWzJdID0gKGR1a191aW50OF90KSAodCAmIDB4ZmZV KTsKKworCQlEVUtfQVNTRVJUKG5fZXF1YWwgPD0gNCk7CisJCXN0ZXAgPSBkdWtfX2Jhc2U2NF9k ZWNvZGVfbmVxdWFsX3N0ZXBbbl9lcXVhbF07CisJCWlmIChEVUtfVU5MSUtFTFkoc3RlcCA8IDAp KSB7CisJCQlnb3RvIGRlY29kZV9lcnJvcjsKKwkJfQorCQlxICs9IHN0ZXA7CisKKwkJLyogU2xv dyBwYXRoIHN0ZXAgMzogcmVhZCBhbmQgaWdub3JlIHBhZGRpbmcgYW5kIHdoaXRlc3BhY2UKKwkJ ICogdW50aWwgKGEpIG5leHQgbm9uLXBhZGRpbmcgYW5kIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rl cgorCQkgKiBhZnRlciB3aGljaCB3ZSByZXN1bWUgdGhlIGZhc3QgcGF0aCwgb3IgKGIpIGVuZCBv ZiBpbnB1dC4KKwkJICogVGhpcyBhbGxvd3MgdXMgdG8gYWNjZXB0IG1pc3NpbmcsIHBhcnRpYWws IGZ1bGwsIGFuZCBleHRyYQorCQkgKiBwYWRkaW5nIGNhc2VzIHVuaWZvcm1seS4gIFdlIGFsc28g c3VwcG9ydCBjb25jYXRlbmF0ZWQKKwkJICogYmFzZS02NCBkb2N1bWVudHMgYmVjYXVzZSB3ZSBy ZXN1bWUgc2Nhbm5pbmcgYWZ0ZXJ3YXJkcy4KKwkJICoKKwkJICogTm90ZSB0aGF0IHRvIHN1cHBv cnQgY29uY2F0ZW5hdGVkIGRvY3VtZW50cyB3ZWxsLCB0aGUgJz0nCisJCSAqIHBhZGRpbmcgZm91 bmQgaW5zaWRlIHRoZSBpbnB1dCBtdXN0IGFsc28gYWxsb3cgZm9yICdleHRyYScKKwkJICogcGFk ZGluZy4gIEZvciBleGFtcGxlLCAnWm09PT0nIGRlY29kZXMgdG8gJ2YnIGFuZCBoYXMgb25lCisJ CSAqIGV4dHJhIHBhZGRpbmcgY2hhci4gIFNvLCAnWm09PT1abScgc2hvdWxkIGRlY29kZSAnZmYn LCBldmVuCisJCSAqIHRob3VnaCB0aGUgc3RhbmRhcmQgYnJlYWstdXAgd291bGQgYmUgJ1ptPT0n ICsgJz1abScgd2hpY2gKKwkJICogZG9lc24ndCBtYWtlIHNlbnNlLgorCQkgKgorCQkgKiBXZSBh bHNvIGFjY2VwdCBwcmVwZW5kZWQgcGFkZGluZyBsaWtlICc9PVptOScsIGJlY2F1c2UgaXQKKwkJ ICogaXMgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBkb2N1bWVudCB3aXRoIGV4dHJhIHBhZGRpbmcg KCc9PScpCisJCSAqIGZvbGxvd2VkIGJ5IGEgdmFsaWQgZG9jdW1lbnQuCisJCSAqLworCisJCWZv ciAoOzspIHsKKwkJCWlmIChEVUtfVU5MSUtFTFkocCA+PSBwX2VuZCkpIHsKKwkJCQlnb3RvIGRv bmU7CisJCQl9CisJCQl4ID0gZHVrX19iYXNlNjRfZGVjdGFiX2Zhc3RbKnArK107CisJCQlpZiAo eCA9PSAtMSB8fCB4ID09IC0yKSB7CisJCQkJOyAgLyogcGFkZGluZyBvciB3aGl0ZXNwYWNlLCBr ZWVwIGVhdGluZyAqLworCQkJfSBlbHNlIHsKKwkJCQlwLS07CisJCQkJYnJlYWs7ICAvKiBiYWNr dHJhY2sgYW5kIGdvIGJhY2sgdG8gZmFzdCBwYXRoLCBldmVuIGZvciAtMSAqLworCQkJfQorCQl9 ICAvKiBzbG93IHBhdGggc3RlcCAzICovCisJfSAgLyogb3V0ZXIgZmFzdCtzbG93IHBhdGggbG9v cCAqLworCisgZG9uZToKKwlEVUtfREREKERVS19ERERQUklOVCgiZG9uZTsgcD0lcCwgcF9lbmQ9 JXAiLAorCSAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHAsIChjb25zdCB2b2lk ICopIHBfZW5kKSk7CisKKwlEVUtfQVNTRVJUKHAgPT0gcF9lbmQpOworCisJKm91dF9kc3RfZmlu YWwgPSBxOworCXJldHVybiAxOworCisgZGVjb2RlX2Vycm9yOgorCXJldHVybiAwOworfQorI2Vs c2UgIC8qIERVS19VU0VfQkFTRTY0X0ZBU1RQQVRIICovCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBk dWtfX2Jhc2U2NF9kZWNvZGVfaGVscGVyKGNvbnN0IGR1a191aW50OF90ICpzcmMsIGR1a19zaXpl X3Qgc3JjbGVuLCBkdWtfdWludDhfdCAqZHN0LCBkdWtfdWludDhfdCAqKm91dF9kc3RfZmluYWwp IHsKKwlkdWtfdWludF90IHQsIHg7CisJZHVrX2ludF90IHk7CisJZHVrX2ludDhfdCBzdGVwOwor CWNvbnN0IGR1a191aW50OF90ICpwOworCWNvbnN0IGR1a191aW50OF90ICpwX2VuZDsKKwlkdWtf dWludDhfdCAqcTsKKwkvKiAweDA5LCAweDBhLCBvciAweDBkICovCisJZHVrX3VpbnQzMl90IG1h c2tfd2hpdGUgPSAoMVUgPDwgOSkgfCAoMVUgPDwgMTApIHwgKDFVIDw8IDEzKTsKKworCS8qICd0 JyB0cmFja3MgcHJvZ3Jlc3Mgb2YgdGhlIGRlY29kZWQgZ3JvdXA6CisJICoKKwkgKiAgdCA9PSAx ICAgICAgICAgICAgIG5vIHZhbGlkIGNoYXJzIHlldAorCSAqICB0ID49IDB4NDAgICAgICAgICAg MXg2ID0gNiBiaXRzIHNoaWZ0ZWQgaW4KKwkgKiAgdCA+PSAweDEwMDAgICAgICAgIDJ4NiA9IDEy IGJpdHMgc2hpZnRlZCBpbgorCSAqICB0ID49IDB4NDAwMDAgICAgICAgM3g2ID0gMTggYml0cyBz aGlmdGVkIGluCisJICogIHQgPj0gMHgxMDAwMDAwICAgICA0eDYgPSAyNCBiaXRzIHNoaWZ0ZWQg aW4KKwkgKgorCSAqIEJ5IGluaXRpYWxpemluZyB0PTEgdGhlcmUncyBubyBuZWVkIGZvciBhIHNl cGFyYXRlIGNvdW50ZXIgZm9yCisJICogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZvdW5kIHNv IGZhci4KKwkgKi8KKwlwID0gc3JjOworCXBfZW5kID0gc3JjICsgc3JjbGVuOworCXEgPSBkc3Q7 CisJdCA9IDFVTDsKKworCWZvciAoOzspIHsKKwkJZHVrX3NtYWxsX3VpbnRfdCBuX2VxdWFsOwor CisJCURVS19BU1NFUlQodCA+PSAxVSk7CisJCWlmIChwID49IHBfZW5kKSB7CisJCQkvKiBFbmQg b2YgaW5wdXQ6IGlmIGlucHV0IGV4aXN0cywgdHJlYXQgbGlrZQorCQkJICogc3RhcnQgb2YgcGFk ZGluZywgZmluaXNoIHRoZSBibG9jaywgdGhlbgorCQkJICogcmUtZW50ZXIgaGVyZSB0byBzZWUg d2UncmUgZG9uZS4KKwkJCSAqLworCQkJaWYgKHQgPT0gMVUpIHsKKwkJCQlicmVhazsKKwkJCX0g ZWxzZSB7CisJCQkJZ290byBzaW11bGF0ZV9wYWRkaW5nOworCQkJfQorCQl9CisKKwkJeCA9ICpw Kys7CisKKwkJaWYgKHggPj0gMHg0MVUpIHsKKwkJCS8qIFZhbGlkOiBhLXogYW5kIEEtWi4gKi8K KwkJCURVS19BU1NFUlQoeCA+PSAweDQxVSAmJiB4IDw9IDB4ZmZVKTsKKwkJCWlmICh4ID49IDB4 NjFVICYmIHggPD0gMHg3YVUpIHsKKwkJCQl5ID0gKGR1a19pbnRfdCkgeCAtIDB4NjEgKyAyNjsK KwkJCX0gZWxzZSBpZiAoeCA8PSAweDVhVSkgeworCQkJCXkgPSAoZHVrX2ludF90KSB4IC0gMHg0 MTsKKwkJCX0gZWxzZSB7CisJCQkJZ290byBkZWNvZGVfZXJyb3I7CisJCQl9CisJCX0gZWxzZSBp ZiAoeCA+PSAweDMwVSkgeworCQkJLyogVmFsaWQ6IDAtOSBhbmQgPS4gKi8KKwkJCURVS19BU1NF UlQoeCA+PSAweDMwVSAmJiB4IDw9IDB4NDBVKTsKKwkJCWlmICh4IDw9IDB4MzlVKSB7CisJCQkJ eSA9IChkdWtfaW50X3QpIHggLSAweDMwICsgNTI7CisJCQl9IGVsc2UgaWYgKHggPT0gMHgzZFUp IHsKKwkJCQkvKiBTa2lwIHBhZGRpbmcgYW5kIHdoaXRlc3BhY2UgdW5sZXNzIHdlJ3JlIGluIHRo ZQorCQkJCSAqIG1pZGRsZSBvZiBhIGJsb2NrLiAgT3RoZXJ3aXNlIGNvbXBsZXRlIGdyb3VwIGJ5 CisJCQkJICogc2ltdWxhdGluZyBzaGlmdGluZyBpbiB0aGUgY29ycmVjdCBwYWRkaW5nLgorCQkJ CSAqLworCQkJCWlmICh0ID09IDFVKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlnb3Rv IHNpbXVsYXRlX3BhZGRpbmc7CisJCQl9IGVsc2UgeworCQkJCWdvdG8gZGVjb2RlX2Vycm9yOwor CQkJfQorCQl9IGVsc2UgaWYgKHggPj0gMHgyMFUpIHsKKwkJCS8qIFZhbGlkOiArLCAvLCBhbmQg MHgyMCB3aGl0ZXNwYWNlLiAqLworCQkJRFVLX0FTU0VSVCh4ID49IDB4MjBVICYmIHggPD0gMHgy ZlUpOworCQkJaWYgKHggPT0gMHgyYlUpIHsKKwkJCQl5ID0gNjI7CisJCQl9IGVsc2UgaWYgKHgg PT0gMHgyZlUpIHsKKwkJCQl5ID0gNjM7CisJCQl9IGVsc2UgaWYgKHggPT0gMHgyMFUpIHsKKwkJ CQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJZ290byBkZWNvZGVfZXJyb3I7CisJCQl9CisJ CX0gZWxzZSB7CisJCQkvKiBWYWxpZDogd2hpdGVzcGFjZS4gKi8KKwkJCWR1a191aW50MzJfdCBt OworCQkJRFVLX0FTU0VSVCh4IDwgMHgyMFUpOyAgLyogMHgwMCB0byAweDFmICovCisJCQltID0g KDFVIDw8IHgpOworCQkJaWYgKG1hc2tfd2hpdGUgJiBtKSB7CisJCQkJLyogQWxsb3cgYmFzaWMg QVNDSUkgd2hpdGVzcGFjZS4gKi8KKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJZ290 byBkZWNvZGVfZXJyb3I7CisJCQl9CisJCX0KKworCQlEVUtfQVNTRVJUKHkgPj0gMCAmJiB5IDw9 IDYzKTsKKwkJdCA9ICh0IDw8IDYpICsgKGR1a191aW50X3QpIHk7CisJCWlmICh0IDwgMHgxMDAw MDAwVUwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaDsgbm8gcGFkZGlu ZyB3aWxsIGJlIGFkZGVkICovCisKKwkgc2ltdWxhdGVfcGFkZGluZzoKKwkJbl9lcXVhbCA9IDA7 CisJCXdoaWxlICh0IDwgMHgxMDAwMDAwVUwpIHsKKwkJCXQgPSAodCA8PCA2KSArIDBVOworCQkJ bl9lcXVhbCsrOworCQl9CisKKwkJLyogT3V0cHV0IDMgYnl0ZXMgZnJvbSAndCcgYW5kIGFkdmFu Y2UgYXMgbmVlZGVkLiAqLworCQlxWzBdID0gKGR1a191aW50OF90KSAoKHQgPj4gMTYpICYgMHhm ZlUpOworCQlxWzFdID0gKGR1a191aW50OF90KSAoKHQgPj4gOCkgJiAweGZmVSk7CisJCXFbMl0g PSAoZHVrX3VpbnQ4X3QpICh0ICYgMHhmZlUpOworCisJCURVS19BU1NFUlQobl9lcXVhbCA8PSA0 VSk7CisJCXN0ZXAgPSBkdWtfX2Jhc2U2NF9kZWNvZGVfbmVxdWFsX3N0ZXBbbl9lcXVhbF07CisJ CWlmIChzdGVwIDwgMCkgeworCQkJZ290byBkZWNvZGVfZXJyb3I7CisJCX0KKwkJcSArPSBzdGVw OworCisJCS8qIFJlLWVudGVyIGxvb3AuICBUaGUgYWN0dWFsIHBhZGRpbmcgY2hhcmFjdGVycyBh cmUgc2tpcHBlZAorCQkgKiBieSB0aGUgbWFpbiBsb29wLiAgVGhpcyBoYW5kbGVzIGNhc2VzIGxp a2UgbWlzc2luZywgcGFydGlhbCwKKwkJICogZnVsbCwgYW5kIGV4dHJhIHBhZGRpbmcsIGFuZCBh bGxvd3MgcGFyc2luZyBvZiBjb25jYXRlbmF0ZWQKKwkJICogZG9jdW1lbnRzICh3aXRoIGV4dHJh IHBhZGRpbmcpIGxpa2U6IFptPT09Wm0uICBBbHNvIGV4dHJhCisJCSAqIHByZXBlbmRlZCBwYWRk aW5nIGlzIGFjY2VwdGVkOiA9PT1abTl2LgorCQkgKi8KKwkJdCA9IDFVOworCX0KKwlEVUtfQVNT RVJUKHQgPT0gMVVMKTsKKworCSpvdXRfZHN0X2ZpbmFsID0gcTsKKwlyZXR1cm4gMTsKKworIGRl Y29kZV9lcnJvcjoKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CQVNFNjRfRkFT VFBBVEggKi8KKworRFVLX0VYVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19iYXNlNjRfZW5jb2RlKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwljb25zdCBkdWtfdWludDhfdCAqc3Jj OworCWR1a19zaXplX3Qgc3JjbGVuOworCWR1a19zaXplX3QgZHN0bGVuOworCWR1a191aW50OF90 ICpkc3Q7CisJY29uc3QgY2hhciAqcmV0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCWlkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIGlkeCk7CisJc3JjID0g ZHVrX19wcmVwX2NvZGVjX2FyZyh0aHIsIGlkeCwgJnNyY2xlbik7CisJLyogTm90ZTogZm9yIHNy Y2xlbj0wLCBzcmMgbWF5IGJlIE5VTEwgKi8KKworCS8qIENvbXB1dGUgZXhhY3Qgb3V0cHV0IGxl bmd0aC4gIENvbXB1dGF0aW9uIG11c3Qgbm90IHdyYXA7IHRoaXMKKwkgKiBsaW1pdCB3b3JrcyBm b3IgMzItYml0IHNpemVfdDoKKwkgKiA+Pj4gc3JjbGVuID0gMzIyMTIyNTQ2OQorCSAqID4+PiAn JXgnICUgKChzcmNsZW4gKyAyKSAvIDMgKiA0KQorCSAqICdmZmZmZmZmYycKKwkgKi8KKwlpZiAo c3JjbGVuID4gMzIyMTIyNTQ2OVVMKSB7CisJCWdvdG8gdHlwZV9lcnJvcjsKKwl9CisJZHN0bGVu ID0gKHNyY2xlbiArIDJVKSAvIDNVICogNFU7CisJZHN0ID0gKGR1a191aW50OF90ICopIGR1a19w dXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhyLCBkc3RsZW4pOworCisJZHVrX19iYXNlNjRfZW5j b2RlX2hlbHBlcigoY29uc3QgZHVrX3VpbnQ4X3QgKikgc3JjLCBzcmNsZW4sIGRzdCk7CisKKwly ZXQgPSBkdWtfYnVmZmVyX3RvX3N0cmluZyh0aHIsIC0xKTsgIC8qIFNhZmUsIHJlc3VsdCBpcyBB U0NJSS4gKi8KKwlkdWtfcmVwbGFjZSh0aHIsIGlkeCk7CisJcmV0dXJuIHJldDsKKworIHR5cGVf ZXJyb3I6CisJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX0JBU0U2NF9FTkNPREVfRkFJTEVE KTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKK30KKworRFVLX0VYVEVSTkFMIHZv aWQgZHVrX2Jhc2U2NF9kZWNvZGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgewor CWNvbnN0IGR1a191aW50OF90ICpzcmM7CisJZHVrX3NpemVfdCBzcmNsZW47CisJZHVrX3NpemVf dCBkc3RsZW47CisJZHVrX3VpbnQ4X3QgKmRzdDsKKwlkdWtfdWludDhfdCAqZHN0X2ZpbmFsOwor CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlkeCA9IGR1a19yZXF1aXJlX25vcm1h bGl6ZV9pbmRleCh0aHIsIGlkeCk7CisJc3JjID0gZHVrX19wcmVwX2NvZGVjX2FyZyh0aHIsIGlk eCwgJnNyY2xlbik7CisKKwkvKiBSb3VuZCB1cCBhbmQgYWRkIHNhZmV0eSBtYXJnaW4uICBBdm9p ZCBhZGRpdGlvbiBiZWZvcmUgZGl2aXNpb24gdG8KKwkgKiBhdm9pZCBwb3NzaWJpbGl0eSBvZiB3 cmFwcGluZy4gIE1hcmdpbiBpbmNsdWRlcyArMyBmb3Igcm91bmRpbmcgdXAsCisJICogYW5kICsz IGZvciBvbmUgZXh0cmEgZ3JvdXA6IHRoZSBkZWNvZGVyIG1heSBlbWl0IGFuZCB0aGVuIGJhY2t0 cmFjaworCSAqIGEgZnVsbCBncm91cCAoMyBieXRlcykgZnJvbSB6ZXJvLXNpemVkIGlucHV0IGZv ciB0ZWNobmljYWwgcmVhc29ucy4KKwkgKiBTaW1pbGFybHksICd4eCcgbWF5IGVjYXVzZSAxKzMg PSBieXRlcyB0byBiZSBlbWl0dGVkIGFuZCB0aGVuCisJICogYmFja3RyYWNrZWQuCisJICovCisJ ZHN0bGVuID0gKHNyY2xlbiAvIDQpICogMyArIDY7ICAvKiB1cHBlciBsaW1pdCwgYXNzdW1pbmcg bm8gd2hpdGVzcGFjZSBldGMgKi8KKwlkc3QgPSAoZHVrX3VpbnQ4X3QgKikgZHVrX3B1c2hfZHlu YW1pY19idWZmZXIodGhyLCBkc3RsZW4pOworCS8qIE5vdGU6IGZvciBkc3RsZW49MCwgZHN0IG1h eSBiZSBOVUxMICovCisKKwlpZiAoIWR1a19fYmFzZTY0X2RlY29kZV9oZWxwZXIoKGNvbnN0IGR1 a191aW50OF90ICopIHNyYywgc3JjbGVuLCBkc3QsICZkc3RfZmluYWwpKSB7CisJCWdvdG8gdHlw ZV9lcnJvcjsKKwl9CisKKwkvKiBYWFg6IGNvbnZlcnQgdG8gZml4ZWQgYnVmZmVyPyAqLworCSh2 b2lkKSBkdWtfcmVzaXplX2J1ZmZlcih0aHIsIC0xLCAoZHVrX3NpemVfdCkgKGRzdF9maW5hbCAt IGRzdCkpOworCWR1a19yZXBsYWNlKHRociwgaWR4KTsKKwlyZXR1cm47CisKKyB0eXBlX2Vycm9y OgorCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9CQVNFNjRfREVDT0RFX0ZBSUxFRCk7CisJ RFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorI2Vsc2UgIC8qIERVS19VU0VfQkFTRTY0X1NV UFBPUlQgKi8KK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfYmFzZTY0X2VuY29kZShkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX1VOUkVGKGlkeCk7CisJRFVLX0VS Uk9SX1VOU1VQUE9SVEVEKHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCitE VUtfRVhURVJOQUwgdm9pZCBkdWtfYmFzZTY0X2RlY29kZShkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3QgaWR4KSB7CisJRFVLX1VOUkVGKGlkeCk7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRo cik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JB U0U2NF9TVVBQT1JUICovCisKKy8qCisgKiAgSGV4CisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VT RV9IRVhfU1VQUE9SVCkKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfaGV4X2VuY29kZShk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKmlu cDsKKwlkdWtfc2l6ZV90IGxlbjsKKwlkdWtfc2l6ZV90IGk7CisJZHVrX3VpbnQ4X3QgKmJ1ZjsK Kwljb25zdCBjaGFyICpyZXQ7CisjaWYgZGVmaW5lZChEVUtfVVNFX0hFWF9GQVNUUEFUSCkKKwlk dWtfc2l6ZV90IGxlbl9zYWZlOworCWR1a191aW50MTZfdCAqcDE2OworI2VuZGlmCisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2lu ZGV4KHRociwgaWR4KTsKKwlpbnAgPSBkdWtfX3ByZXBfY29kZWNfYXJnKHRociwgaWR4LCAmbGVu KTsKKwlEVUtfQVNTRVJUKGlucCAhPSBOVUxMIHx8IGxlbiA9PSAwKTsKKworCS8qIEZpeGVkIGJ1 ZmZlciwgbm8gemVyb2luZyBiZWNhdXNlIHdlJ2xsIGZpbGwgYWxsIHRoZSBkYXRhLiAqLworCWJ1 ZiA9IChkdWtfdWludDhfdCAqKSBkdWtfcHVzaF9maXhlZF9idWZmZXJfbm96ZXJvKHRociwgbGVu ICogMik7CisJRFVLX0FTU0VSVChidWYgIT0gTlVMTCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0Vf SEVYX0ZBU1RQQVRIKQorCURVS19BU1NFUlQoKCgoZHVrX3NpemVfdCkgYnVmKSAmIDB4MDFVKSA9 PSAwKTsgICAvKiBwb2ludGVyIGlzIGFsaWduZWQsIGd1YXJhbnRlZWQgZm9yIGZpeGVkIGJ1ZmZl ciAqLworCXAxNiA9IChkdWtfdWludDE2X3QgKikgKHZvaWQgKikgYnVmOworCWxlbl9zYWZlID0g bGVuICYgfjB4MDNVOworCWZvciAoaSA9IDA7IGkgPCBsZW5fc2FmZTsgaSArPSA0KSB7CisJCXAx NlswXSA9IGR1a19oZXhfZW5jdGFiW2lucFtpXV07CisJCXAxNlsxXSA9IGR1a19oZXhfZW5jdGFi W2lucFtpICsgMV1dOworCQlwMTZbMl0gPSBkdWtfaGV4X2VuY3RhYltpbnBbaSArIDJdXTsKKwkJ cDE2WzNdID0gZHVrX2hleF9lbmN0YWJbaW5wW2kgKyAzXV07CisJCXAxNiArPSA0OworCX0KKwlm b3IgKDsgaSA8IGxlbjsgaSsrKSB7CisJCSpwMTYrKyA9IGR1a19oZXhfZW5jdGFiW2lucFtpXV07 CisJfQorI2Vsc2UgIC8qIERVS19VU0VfSEVYX0ZBU1RQQVRIICovCisJZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKSB7CisJCWR1a19zbWFsbF91aW50X3QgdDsKKwkJdCA9IChkdWtfc21hbGxfdWlu dF90KSBpbnBbaV07CisJCWJ1ZltpKjIgKyAwXSA9IGR1a19sY19kaWdpdHNbdCA+PiA0XTsKKwkJ YnVmW2kqMiArIDFdID0gZHVrX2xjX2RpZ2l0c1t0ICYgMHgwZl07CisJfQorI2VuZGlmICAvKiBE VUtfVVNFX0hFWF9GQVNUUEFUSCAqLworCisJLyogWFhYOiBVc2luZyBhIHN0cmluZyByZXR1cm4g dmFsdWUgZm9yY2VzIGEgc3RyaW5nIGludGVybiB3aGljaCBpcworCSAqIG5vdCBhbHdheXMgbmVj ZXNzYXJ5LiAgQXMgYSByb3VnaCBwZXJmb3JtYW5jZSBtZWFzdXJlLCBoZXggZW5jb2RlCisJICog dGltZSBmb3IgdGVzdHMvcGVyZi90ZXN0LWhleC1lbmNvZGUuanMgZHJvcHBlZCBmcm9tIH4zNXMg dG8gfjE1cworCSAqIHdpdGhvdXQgc3RyaW5nIGNvZXJjaW9uLiAgQ2hhbmdlIHRvIHJldHVybmlu ZyBhIGJ1ZmZlciBhbmQgbGV0IHRoZQorCSAqIGNhbGxlciBjb2VyY2UgdG8gc3RyaW5nIGlmIG5l Y2Vzc2FyeT8KKwkgKi8KKworCXJldCA9IGR1a19idWZmZXJfdG9fc3RyaW5nKHRociwgLTEpOyAg LyogU2FmZSwgcmVzdWx0IGlzIEFTQ0lJLiAqLworCWR1a19yZXBsYWNlKHRociwgaWR4KTsKKwly ZXR1cm4gcmV0OworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfaGV4X2RlY29kZShkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKmlucDsKKwlk dWtfc2l6ZV90IGxlbjsKKwlkdWtfc2l6ZV90IGk7CisJZHVrX2ludF90IHQ7CisJZHVrX3VpbnQ4 X3QgKmJ1ZjsKKyNpZiBkZWZpbmVkKERVS19VU0VfSEVYX0ZBU1RQQVRIKQorCWR1a19pbnRfdCBj aGs7CisJZHVrX3VpbnQ4X3QgKnA7CisJZHVrX3NpemVfdCBsZW5fc2FmZTsKKyNlbmRpZgorCisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6 ZV9pbmRleCh0aHIsIGlkeCk7CisJaW5wID0gZHVrX19wcmVwX2NvZGVjX2FyZyh0aHIsIGlkeCwg Jmxlbik7CisJRFVLX0FTU0VSVChpbnAgIT0gTlVMTCB8fCBsZW4gPT0gMCk7CisKKwlpZiAobGVu ICYgMHgwMSkgeworCQlnb3RvIHR5cGVfZXJyb3I7CisJfQorCisJLyogRml4ZWQgYnVmZmVyLCBu byB6ZXJvaW5nIGJlY2F1c2Ugd2UnbGwgZmlsbCBhbGwgdGhlIGRhdGEuICovCisJYnVmID0gKGR1 a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhyLCBsZW4gLyAyKTsK KwlEVUtfQVNTRVJUKGJ1ZiAhPSBOVUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9IRVhfRkFT VFBBVEgpCisJcCA9IGJ1ZjsKKwlsZW5fc2FmZSA9IGxlbiAmIH4weDA3VTsKKwlmb3IgKGkgPSAw OyBpIDwgbGVuX3NhZmU7IGkgKz0gOCkgeworCQl0ID0gKChkdWtfaW50X3QpIGR1a19oZXhfZGVj dGFiX3NoaWZ0NFtpbnBbaV1dKSB8CisJCSAgICAoKGR1a19pbnRfdCkgZHVrX2hleF9kZWN0YWJb aW5wW2kgKyAxXV0pOworCQljaGsgPSB0OworCQlwWzBdID0gKGR1a191aW50OF90KSB0OworCQl0 ID0gKChkdWtfaW50X3QpIGR1a19oZXhfZGVjdGFiX3NoaWZ0NFtpbnBbaSArIDJdXSkgfAorCQkg ICAgKChkdWtfaW50X3QpIGR1a19oZXhfZGVjdGFiW2lucFtpICsgM11dKTsKKwkJY2hrIHw9IHQ7 CisJCXBbMV0gPSAoZHVrX3VpbnQ4X3QpIHQ7CisJCXQgPSAoKGR1a19pbnRfdCkgZHVrX2hleF9k ZWN0YWJfc2hpZnQ0W2lucFtpICsgNF1dKSB8CisJCSAgICAoKGR1a19pbnRfdCkgZHVrX2hleF9k ZWN0YWJbaW5wW2kgKyA1XV0pOworCQljaGsgfD0gdDsKKwkJcFsyXSA9IChkdWtfdWludDhfdCkg dDsKKwkJdCA9ICgoZHVrX2ludF90KSBkdWtfaGV4X2RlY3RhYl9zaGlmdDRbaW5wW2kgKyA2XV0p IHwKKwkJICAgICgoZHVrX2ludF90KSBkdWtfaGV4X2RlY3RhYltpbnBbaSArIDddXSk7CisJCWNo ayB8PSB0OworCQlwWzNdID0gKGR1a191aW50OF90KSB0OworCQlwICs9IDQ7CisKKwkJLyogQ2hl Y2sgaWYgYW55IGxvb2t1cCBhYm92ZSBoYWQgYSBuZWdhdGl2ZSByZXN1bHQuICovCisJCWlmIChE VUtfVU5MSUtFTFkoY2hrIDwgMCkpIHsKKwkJCWdvdG8gdHlwZV9lcnJvcjsKKwkJfQorCX0KKwlm b3IgKDsgaSA8IGxlbjsgaSArPSAyKSB7CisJCS8qIEZpcnN0IGNhc3QgdG8gZHVrX2ludF90IHRv IHNpZ24gZXh0ZW5kLCBzZWNvbmQgY2FzdCB0bworCQkgKiBkdWtfdWludF90IHRvIGF2b2lkIHNp Z25lZCBsZWZ0IHNoaWZ0LCBhbmQgZmluYWwgY2FzdCB0bworCQkgKiBkdWtfaW50X3QgcmVzdWx0 IHR5cGUuCisJCSAqLworCQl0ID0gKGR1a19pbnRfdCkgKCgoKGR1a191aW50X3QpIChkdWtfaW50 X3QpIGR1a19oZXhfZGVjdGFiW2lucFtpXV0pIDw8IDRVKSB8CisJCSAgICAgICAgICAgICAgICAg KChkdWtfdWludF90KSAoZHVrX2ludF90KSBkdWtfaGV4X2RlY3RhYltpbnBbaSArIDFdXSkpOwor CQlpZiAoRFVLX1VOTElLRUxZKHQgPCAwKSkgeworCQkJZ290byB0eXBlX2Vycm9yOworCQl9CisJ CSpwKysgPSAoZHVrX3VpbnQ4X3QpIHQ7CisJfQorI2Vsc2UgIC8qIERVS19VU0VfSEVYX0ZBU1RQ QVRIICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CisJCS8qIEZvciBpbnZhbGlk IGNoYXJhY3RlcnMgdGhlIHZhbHVlIC0xIGdldHMgZXh0ZW5kZWQgdG8KKwkJICogYXQgbGVhc3Qg MTYgYml0cy4gIElmIGVpdGhlciBueWJibGUgaXMgaW52YWxpZCwgdGhlCisJCSAqIHJlc3VsdGlu ZyAndCcgd2lsbCBiZSA8IDAuCisJCSAqLworCQl0ID0gKGR1a19pbnRfdCkgKCgoKGR1a191aW50 X3QpIChkdWtfaW50X3QpIGR1a19oZXhfZGVjdGFiW2lucFtpXV0pIDw8IDRVKSB8CisJCSAgICAg ICAgICAgICAgICAgKChkdWtfdWludF90KSAoZHVrX2ludF90KSBkdWtfaGV4X2RlY3RhYltpbnBb aSArIDFdXSkpOworCQlpZiAoRFVLX1VOTElLRUxZKHQgPCAwKSkgeworCQkJZ290byB0eXBlX2Vy cm9yOworCQl9CisJCWJ1ZltpID4+IDFdID0gKGR1a191aW50OF90KSB0OworCX0KKyNlbmRpZiAg LyogRFVLX1VTRV9IRVhfRkFTVFBBVEggKi8KKworCWR1a19yZXBsYWNlKHRociwgaWR4KTsKKwly ZXR1cm47CisKKyB0eXBlX2Vycm9yOgorCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9IRVhf REVDT0RFX0ZBSUxFRCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorI2Vsc2UgIC8q IERVS19VU0VfSEVYX1NVUFBPUlQgKi8KK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfaGV4 X2VuY29kZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX1VOUkVGKGlk eCk7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVy bjspOworfQorRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2hleF9kZWNvZGUoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IGlkeCkgeworCURVS19VTlJFRihpZHgpOworCURVS19FUlJPUl9VTlNVUFBP UlRFRCh0aHIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKyNlbmRpZiAgLyogRFVL X1VTRV9IRVhfU1VQUE9SVCAqLworCisvKgorICogIEpTT04KKyAqLworCisjaWYgZGVmaW5lZChE VUtfVVNFX0pTT05fU1VQUE9SVCkKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfanNvbl9l bmNvZGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworI2lmIGRlZmluZWQoRFVL X1VTRV9BU1NFUlRJT05TKQorCWR1a19pZHhfdCB0b3BfYXRfZW50cnk7CisjZW5kaWYKKwljb25z dCBjaGFyICpyZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworI2lmIGRlZmluZWQo RFVLX1VTRV9BU1NFUlRJT05TKQorCXRvcF9hdF9lbnRyeSA9IGR1a19nZXRfdG9wKHRocik7Cisj ZW5kaWYKKworCWlkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIGlkeCk7CisJ ZHVrX2JpX2pzb25fc3RyaW5naWZ5X2hlbHBlcih0aHIsCisJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZHggLyppZHhfdmFsdWUqLywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19JTlZBTElEX0lOREVYIC8qaWR4X3JlcGxhY2VyKi8sCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSU5WQUxJRF9JTkRFWCAvKmlkeF9zcGFjZSovLAorCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCAvKmZsYWdzKi8pOworCURVS19BU1NFUlQoZHVrX2lzX3N0cmlu Zyh0aHIsIC0xKSk7CisJZHVrX3JlcGxhY2UodGhyLCBpZHgpOworCXJldCA9IGR1a19nZXRfc3Ry aW5nKHRociwgaWR4KTsKKworCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA9PSB0b3BfYXRf ZW50cnkpOworCisJcmV0dXJuIHJldDsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2pzb25f ZGVjb2RlKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKyNpZiBkZWZpbmVkKERV S19VU0VfQVNTRVJUSU9OUykKKwlkdWtfaWR4X3QgdG9wX2F0X2VudHJ5OworI2VuZGlmCisKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05T KQorCXRvcF9hdF9lbnRyeSA9IGR1a19nZXRfdG9wKHRocik7CisjZW5kaWYKKworCWlkeCA9IGR1 a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIGlkeCk7CisJZHVrX2JpX2pzb25fcGFyc2Vf aGVscGVyKHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgaWR4IC8qaWR4X3ZhbHVlKi8s CisJICAgICAgICAgICAgICAgICAgICAgICAgIERVS19JTlZBTElEX0lOREVYIC8qaWR4X3Jldml2 ZXIqLywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKmZsYWdzKi8pOworCWR1a19yZXBs YWNlKHRociwgaWR4KTsKKworCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA9PSB0b3BfYXRf ZW50cnkpOworfQorI2Vsc2UgIC8qIERVS19VU0VfSlNPTl9TVVBQT1JUICovCitEVUtfRVhURVJO QUwgY29uc3QgY2hhciAqZHVrX2pzb25fZW5jb2RlKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhf dCBpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19VTlJFRihpZHgpOwor CURVS19FUlJPUl9VTlNVUFBPUlRFRCh0aHIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVM TDspOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfanNvbl9kZWNvZGUoZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVL X1VOUkVGKGlkeCk7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRocik7CisJRFVLX1dPX05PUkVU VVJOKHJldHVybjspOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0pTT05fU1VQUE9SVCAqLworLyoK KyAqICBDb21waWxhdGlvbiBhbmQgZXZhbHVhdGlvbgorICovCisKKy8qICNpbmNsdWRlIGR1a19p bnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZHVrX19j b21waWxlX3Jhd19hcmdzIGR1a19fY29tcGlsZV9yYXdfYXJnczsKK3N0cnVjdCBkdWtfX2NvbXBp bGVfcmF3X2FyZ3MgeworCWR1a19zaXplX3Qgc3JjX2xlbmd0aDsgIC8qIHNob3VsZCBiZSBmaXJz dCBvbiA2NC1iaXQgcGxhdGZvcm1zICovCisJY29uc3QgZHVrX3VpbnQ4X3QgKnNyY19idWZmZXI7 CisJZHVrX3VpbnRfdCBmbGFnczsKK307CisKKy8qIEV2YWwgaXMganVzdCBhIHdyYXBwZXIgbm93 LiAqLworRFVLX0VYVEVSTkFMIGR1a19pbnRfdCBkdWtfZXZhbF9yYXcoZHVrX2h0aHJlYWQgKnRo ciwgY29uc3QgY2hhciAqc3JjX2J1ZmZlciwgZHVrX3NpemVfdCBzcmNfbGVuZ3RoLCBkdWtfdWlu dF90IGZsYWdzKSB7CisJZHVrX2ludF90IHJjOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhy KTsKKworCS8qIE5vdGU6IHN0cmljdG5lc3MgaXMgKm5vdCogaW5oZXJpdGVkIGZyb20gdGhlIGN1 cnJlbnQgRHVrdGFwZS9DLgorCSAqIFRoaXMgd291bGQgYmUgY29uZnVzaW5nIGJlY2F1c2UgdGhl IGN1cnJlbnQgc3RyaWN0bmVzcyBzdGF0ZQorCSAqIGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBy dW5uaW5nIGluc2lkZSBhIER1a3RhcGUvQyBhY3RpdmF0aW9uCisJICogKD0gc3RyaWN0IG1vZGUp IG9yIG91dHNpZGUgb2YgYW55IGFjdGl2YXRpb24gKD0gbm9uLXN0cmljdCBtb2RlKS4KKwkgKiBT ZWUgdGVzdHMvYXBpL3Rlc3QtZXZhbC1zdHJpY3RuZXNzLmMgZm9yIG1vcmUgZGlzY3Vzc2lvbi4K KwkgKi8KKworCS8qIFsgLi4uIHNvdXJjZT8gZmlsZW5hbWU/IF0gKGRlcGVuZHMgb24gZmxhZ3Mp ICovCisKKwlyYyA9IGR1a19jb21waWxlX3Jhdyh0aHIsIHNyY19idWZmZXIsIHNyY19sZW5ndGgs IGZsYWdzIHwgRFVLX0NPTVBJTEVfRVZBTCk7ICAvKiBtYXkgYmUgc2FmZSwgb3Igbm9uLXNhZmUg ZGVwZW5kaW5nIG9uIGZsYWdzICovCisKKwkvKiBbIC4uLiBjbG9zdXJlL2Vycm9yIF0gKi8KKwor CWlmIChyYyAhPSBEVUtfRVhFQ19TVUNDRVNTKSB7CisJCXJjID0gRFVLX0VYRUNfRVJST1I7CisJ CWdvdG8gZ290X3JjOworCX0KKworCWR1a19wdXNoX2dsb2JhbF9vYmplY3QodGhyKTsgIC8qIGV4 cGxpY2l0ICd0aGlzJyBiaW5kaW5nLCBzZWUgR0gtMTY0ICovCisKKwlpZiAoZmxhZ3MgJiBEVUtf Q09NUElMRV9TQUZFKSB7CisJCXJjID0gZHVrX3BjYWxsX21ldGhvZCh0aHIsIDApOworCX0gZWxz ZSB7CisJCWR1a19jYWxsX21ldGhvZCh0aHIsIDApOworCQlyYyA9IERVS19FWEVDX1NVQ0NFU1M7 CisJfQorCisJLyogWyAuLi4gcmVzdWx0L2Vycm9yIF0gKi8KKworIGdvdF9yYzoKKwlpZiAoZmxh Z3MgJiBEVUtfQ09NUElMRV9OT1JFU1VMVCkgeworCQlkdWtfcG9wKHRocik7CisJfQorCisJcmV0 dXJuIHJjOworfQorCisvKiBIZWxwZXIgd2hpY2ggY2FuIGJlIGNhbGxlZCBib3RoIGRpcmVjdGx5 IGFuZCB3aXRoIGR1a19zYWZlX2NhbGwoKS4gKi8KK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19k b19jb21waWxlKGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnVkYXRhKSB7CisJZHVrX19jb21waWxl X3Jhd19hcmdzICpjb21wX2FyZ3M7CisJZHVrX3VpbnRfdCBmbGFnczsKKwlkdWtfaGNvbXBmdW5j ICpoX3RlbXBsOworCisJRFVLX0FTU0VSVF9DVFhfVkFMSUQodGhyKTsKKwlEVUtfQVNTRVJUKHVk YXRhICE9IE5VTEwpOworCisJLyogTm90ZTogc3RyaWN0bmVzcyBpcyBub3QgaW5oZXJpdGVkIGZy b20gdGhlIGN1cnJlbnQgRHVrdGFwZS9DCisJICogY29udGV4dC4gIE90aGVyd2lzZSBpdCB3b3Vs ZCBub3QgYmUgcG9zc2libGUgdG8gY29tcGlsZQorCSAqIG5vbi1zdHJpY3QgY29kZSBpbnNpZGUg YSBEdWt0YXBlL0MgYWN0aXZhdGlvbiAod2hpY2ggaXMKKwkgKiBhbHdheXMgc3RyaWN0IG5vdyku ICBTZWUgdGVzdHMvYXBpL3Rlc3QtZXZhbC1zdHJpY3RuZXNzLmMKKwkgKiBmb3IgZGlzY3Vzc2lv bi4KKwkgKi8KKworCS8qIFsgLi4uIHNvdXJjZT8gZmlsZW5hbWU/IF0gKGRlcGVuZHMgb24gZmxh Z3MpICovCisKKwljb21wX2FyZ3MgPSAoZHVrX19jb21waWxlX3Jhd19hcmdzICopIHVkYXRhOwor CWZsYWdzID0gY29tcF9hcmdzLT5mbGFnczsKKworCWlmIChmbGFncyAmIERVS19DT01QSUxFX05P RklMRU5BTUUpIHsKKwkJLyogQXV0b21hdGljIGZpbGVuYW1lOiAnZXZhbCcgb3IgJ2lucHV0Jy4g Ki8KKwkJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgodGhyLCAoZmxhZ3MgJiBEVUtfQ09NUElMRV9F VkFMKSA/IERVS19TVFJJRFhfRVZBTCA6IERVS19TVFJJRFhfSU5QVVQpOworCX0KKworCS8qIFsg Li4uIHNvdXJjZT8gZmlsZW5hbWUgXSAqLworCisJaWYgKCFjb21wX2FyZ3MtPnNyY19idWZmZXIp IHsKKwkJZHVrX2hzdHJpbmcgKmhfc291cmNlY29kZTsKKworCQloX3NvdXJjZWNvZGUgPSBkdWtf Z2V0X2hzdHJpbmcodGhyLCAtMik7CisJCWlmICgoZmxhZ3MgJiBEVUtfQ09NUElMRV9OT1NPVVJD RSkgfHwgIC8qIGFyZ3MgaW5jb3JyZWN0ICovCisJCSAgICAoaF9zb3VyY2Vjb2RlID09IE5VTEwp KSB7ICAgICAgICAgIC8qIGUuZy4gZHVrX3B1c2hfc3RyaW5nX2ZpbGVfcmF3KCkgcHVzaGVkIHVu ZGVmaW5lZCAqLworCQkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX05PX1NPVVJDRUNPREUp OworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJCX0KKwkJRFVLX0FTU0VSVChoX3Nv dXJjZWNvZGUgIT0gTlVMTCk7CisJCWNvbXBfYXJncy0+c3JjX2J1ZmZlciA9IChjb25zdCBkdWtf dWludDhfdCAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoX3NvdXJjZWNvZGUpOworCQljb21wX2Fy Z3MtPnNyY19sZW5ndGggPSAoZHVrX3NpemVfdCkgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaF9z b3VyY2Vjb2RlKTsKKwl9CisJRFVLX0FTU0VSVChjb21wX2FyZ3MtPnNyY19idWZmZXIgIT0gTlVM TCk7CisKKwlpZiAoZmxhZ3MgJiBEVUtfQ09NUElMRV9GVU5DVElPTikgeworCQlmbGFncyB8PSBE VUtfQ09NUElMRV9FVkFMIHwgRFVLX0NPTVBJTEVfRlVOQ0VYUFI7CisJfQorCisJLyogWyAuLi4g c291cmNlPyBmaWxlbmFtZSBdICovCisKKwlkdWtfanNfY29tcGlsZSh0aHIsIGNvbXBfYXJncy0+ c3JjX2J1ZmZlciwgY29tcF9hcmdzLT5zcmNfbGVuZ3RoLCBmbGFncyk7CisKKwkvKiBbIC4uLiBz b3VyY2U/IGZ1bmNfdGVtcGxhdGUgXSAqLworCisJaWYgKGZsYWdzICYgRFVLX0NPTVBJTEVfTk9T T1VSQ0UpIHsKKwkJOworCX0gZWxzZSB7CisJCWR1a19yZW1vdmVfbTIodGhyKTsKKwl9CisKKwkv KiBbIC4uLiBmdW5jX3RlbXBsYXRlIF0gKi8KKworCWhfdGVtcGwgPSAoZHVrX2hjb21wZnVuYyAq KSBkdWtfa25vd25faG9iamVjdCh0aHIsIC0xKTsKKwlkdWtfanNfcHVzaF9jbG9zdXJlKHRociwK KwkgICAgICAgICAgICAgICAgICAgaF90ZW1wbCwKKwkgICAgICAgICAgICAgICAgICAgdGhyLT5i dWlsdGluc1tEVUtfQklEWF9HTE9CQUxfRU5WXSwKKwkgICAgICAgICAgICAgICAgICAgdGhyLT5i dWlsdGluc1tEVUtfQklEWF9HTE9CQUxfRU5WXSwKKwkgICAgICAgICAgICAgICAgICAgMSAvKmFk ZF9hdXRvX3Byb3RvKi8pOworCWR1a19yZW1vdmVfbTIodGhyKTsgICAvKiAtPiBbIC4uLiBjbG9z dXJlIF0gKi8KKworCS8qIFsgLi4uIGNsb3N1cmUgXSAqLworCisJcmV0dXJuIDE7Cit9CisKK0RV S19FWFRFUk5BTCBkdWtfaW50X3QgZHVrX2NvbXBpbGVfcmF3KGR1a19odGhyZWFkICp0aHIsIGNv bnN0IGNoYXIgKnNyY19idWZmZXIsIGR1a19zaXplX3Qgc3JjX2xlbmd0aCwgZHVrX3VpbnRfdCBm bGFncykgeworCWR1a19fY29tcGlsZV9yYXdfYXJncyBjb21wX2FyZ3NfYWxsb2M7CisJZHVrX19j b21waWxlX3Jhd19hcmdzICpjb21wX2FyZ3MgPSAmY29tcF9hcmdzX2FsbG9jOworCisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlmICgoZmxhZ3MgJiBEVUtfQ09NUElMRV9TVFJMRU4p ICYmIChzcmNfYnVmZmVyICE9IE5VTEwpKSB7CisJCS8qIFN0cmluZyBsZW5ndGggaXMgY29tcHV0 ZWQgaGVyZSB0byBhdm9pZCBtdWx0aXBsZSBldmFsdWF0aW9uCisJCSAqIG9mIGEgbWFjcm8gYXJn dW1lbnQgaW4gdGhlIGNhbGxpbmcgc2lkZS4KKwkJICovCisJCXNyY19sZW5ndGggPSBEVUtfU1RS TEVOKHNyY19idWZmZXIpOworCX0KKworCWNvbXBfYXJncy0+c3JjX2J1ZmZlciA9IChjb25zdCBk dWtfdWludDhfdCAqKSBzcmNfYnVmZmVyOworCWNvbXBfYXJncy0+c3JjX2xlbmd0aCA9IHNyY19s ZW5ndGg7CisJY29tcF9hcmdzLT5mbGFncyA9IGZsYWdzOworCisJLyogWyAuLi4gc291cmNlPyBm aWxlbmFtZT8gXSAoZGVwZW5kcyBvbiBmbGFncykgKi8KKworCWlmIChmbGFncyAmIERVS19DT01Q SUxFX1NBRkUpIHsKKwkJZHVrX2ludF90IHJjOworCQlkdWtfaW50X3QgbmFyZ3M7CisJCWR1a19p bnRfdCBucmV0cyA9IDE7CisKKwkJLyogQXJndW1lbnRzIGNhbiBiZTogWyBzb3VyY2U/IGZpbGVu YW1lPyAmY29tcF9hcmdzXSBzbyB0aGF0CisJCSAqIG5hcmdzIGlzIDEgdG8gMy4gIENhbGwgc2l0 ZSBlbmNvZGVzIHRoZSBjb3JyZWN0IG5hcmdzIGNvdW50CisJCSAqIGRpcmVjdGx5IGludG8gZmxh Z3MuCisJCSAqLworCQluYXJncyA9IGZsYWdzICYgMHgwNzsKKwkJRFVLX0FTU0VSVChuYXJncyA9 PSAoKGZsYWdzICYgRFVLX0NPTVBJTEVfTk9TT1VSQ0UpID8gMCA6IDEpICsKKwkJICAgICAgICAg ICAgICAgICAgICAoKGZsYWdzICYgRFVLX0NPTVBJTEVfTk9GSUxFTkFNRSkgPyAwIDogMSkpOwor CQlyYyA9IGR1a19zYWZlX2NhbGwodGhyLCBkdWtfX2RvX2NvbXBpbGUsICh2b2lkICopIGNvbXBf YXJncywgbmFyZ3MsIG5yZXRzKTsKKworCQkvKiBbIC4uLiBjbG9zdXJlIF0gKi8KKwkJcmV0dXJu IHJjOworCX0KKworCSh2b2lkKSBkdWtfX2RvX2NvbXBpbGUodGhyLCAodm9pZCAqKSBjb21wX2Fy Z3MpOworCisJLyogWyAuLi4gY2xvc3VyZSBdICovCisJcmV0dXJuIERVS19FWEVDX1NVQ0NFU1M7 Cit9CisvKgorICogIERlYnVnZ2luZyByZWxhdGVkIEFQSSBjYWxscworICovCisKKy8qICNpbmNs dWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9KU09OX1NVUFBPUlQpCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcHVzaF9jb250ZXh0 X2R1bXAoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pZHhfdCBpZHg7CisJZHVrX2lkeF90IHRv cDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwkvKiBXZSBkb24ndCBkdWtfcmVx dWlyZV9zdGFjaygpIGhlcmUgbm93LCBidXQgcmVseSBvbiB0aGUgY2FsbGVyIGhhdmluZworCSAq IGVub3VnaCBzcGFjZS4KKwkgKi8KKworCXRvcCA9IGR1a19nZXRfdG9wKHRocik7CisJZHVrX3B1 c2hfYXJyYXkodGhyKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHRvcDsgaWR4KyspIHsKKwkJZHVr X2R1cCh0aHIsIGlkeCk7CisJCWR1a19wdXRfcHJvcF9pbmRleCh0aHIsIC0yLCAoZHVrX3VhcnJp ZHhfdCkgaWR4KTsKKwl9CisKKwkvKiBYWFg6IGNvbnZlcnNpb24gZXJyb3JzIHNob3VsZCBub3Qg cHJvcGFnYXRlIG91dHdhcmRzLgorCSAqIFBlcmhhcHMgdmFsdWVzIG5lZWQgdG8gYmUgY29lcmNl ZCBpbmRpdmlkdWFsbHk/CisJICovCisJZHVrX2JpX2pzb25fc3RyaW5naWZ5X2hlbHBlcih0aHIs CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfZ2V0X3RvcF9pbmRleCh0aHIpLCAg LyppZHhfdmFsdWUqLworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0lOVkFMSURf SU5ERVgsICAvKmlkeF9yZXBsYWNlciovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfSU5WQUxJRF9JTkRFWCwgIC8qaWR4X3NwYWNlKi8KKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19KU09OX0ZMQUdfRVhUX0NVU1RPTSB8CisJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSlNPTl9GTEFHX0FTQ0lJX09OTFkgfAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0pTT05fRkxBR19BVk9JRF9LRVlfUVVPVEVTIC8qZmxhZ3MqLyk7CisKKwlk dWtfcHVzaF9zcHJpbnRmKHRociwgImN0eDogdG9wPSVsZCwgc3RhY2s9JXMiLCAobG9uZykgdG9w LCAoY29uc3QgY2hhciAqKSBkdWtfc2FmZV90b19zdHJpbmcodGhyLCAtMSkpOworCWR1a19yZXBs YWNlKHRociwgLTMpOyAgLyogWyAuLi4gYXJyIGpzb254KGFycikgcmVzIF0gLT4gWyAuLi4gcmVz IGpzb254KGFycikgXSAqLworCWR1a19wb3AodGhyKTsKKwlEVUtfQVNTRVJUKGR1a19pc19zdHJp bmcodGhyLCAtMSkpOworfQorI2Vsc2UgIC8qIERVS19VU0VfSlNPTl9TVVBQT1JUICovCitEVUtf RVhURVJOQUwgdm9pZCBkdWtfcHVzaF9jb250ZXh0X2R1bXAoZHVrX2h0aHJlYWQgKnRocikgewor CURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRocik7 CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0pTT05f U1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisKK0RV S19FWFRFUk5BTCB2b2lkIGR1a19kZWJ1Z2dlcl9hdHRhY2goZHVrX2h0aHJlYWQgKnRociwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2RlYnVnX3JlYWRfZnVuY3Rp b24gcmVhZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2Rl YnVnX3dyaXRlX2Z1bmN0aW9uIHdyaXRlX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkdWtfZGVidWdfcGVla19mdW5jdGlvbiBwZWVrX2NiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfZGVidWdfcmVhZF9mbHVzaF9mdW5jdGlvbiBy ZWFkX2ZsdXNoX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf ZGVidWdfd3JpdGVfZmx1c2hfZnVuY3Rpb24gd3JpdGVfZmx1c2hfY2IsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19kZWJ1Z19yZXF1ZXN0X2Z1bmN0aW9uIHJlcXVl c3RfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19kZWJ1Z19k ZXRhY2hlZF9mdW5jdGlvbiBkZXRhY2hlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqdWRhdGEpIHsKKwlkdWtfaGVhcCAqaGVhcDsKKwljb25zdCBjaGFy ICpzdHI7CisJZHVrX3NpemVfdCBsZW47CisKKwkvKiBYWFg6IHNob3VsZCB0aGVyZSBiZSBhbiBl cnJvciBvciBhbiBhdXRvbWF0aWMgZGV0YWNoIGlmCisJICogYWxyZWFkeSBhdHRhY2hlZD8KKwkg Ki8KKworCURVS19EKERVS19EUFJJTlQoImFwcGxpY2F0aW9uIGNhbGxlZCBkdWtfZGVidWdnZXJf YXR0YWNoKCkiKSk7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQo cmVhZF9jYiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHdyaXRlX2NiICE9IE5VTEwpOworCS8qIE90 aGVyIGNhbGxiYWNrcyBhcmUgb3B0aW9uYWwuICovCisKKwloZWFwID0gdGhyLT5oZWFwOworCWhl YXAtPmRiZ19yZWFkX2NiID0gcmVhZF9jYjsKKwloZWFwLT5kYmdfd3JpdGVfY2IgPSB3cml0ZV9j YjsKKwloZWFwLT5kYmdfcGVla19jYiA9IHBlZWtfY2I7CisJaGVhcC0+ZGJnX3JlYWRfZmx1c2hf Y2IgPSByZWFkX2ZsdXNoX2NiOworCWhlYXAtPmRiZ193cml0ZV9mbHVzaF9jYiA9IHdyaXRlX2Zs dXNoX2NiOworCWhlYXAtPmRiZ19yZXF1ZXN0X2NiID0gcmVxdWVzdF9jYjsKKwloZWFwLT5kYmdf ZGV0YWNoZWRfY2IgPSBkZXRhY2hlZF9jYjsKKwloZWFwLT5kYmdfdWRhdGEgPSB1ZGF0YTsKKwlo ZWFwLT5kYmdfaGF2ZV9uZXh0X2J5dGUgPSAwOworCisJLyogU3RhcnQgaW4gcGF1c2VkIHN0YXRl LiAqLworCWhlYXAtPmRiZ19wcm9jZXNzaW5nID0gMDsKKwloZWFwLT5kYmdfc3RhdGVfZGlydHkg PSAwOworCWhlYXAtPmRiZ19mb3JjZV9yZXN0YXJ0ID0gMDsKKwloZWFwLT5kYmdfcGF1c2VfZmxh Z3MgPSAwOworCWhlYXAtPmRiZ19wYXVzZV9hY3QgPSBOVUxMOworCWhlYXAtPmRiZ19wYXVzZV9z dGFydGxpbmUgPSAwOworCWhlYXAtPmRiZ19leGVjX2NvdW50ZXIgPSAwOworCWhlYXAtPmRiZ19s YXN0X2NvdW50ZXIgPSAwOworCWhlYXAtPmRiZ19sYXN0X3RpbWUgPSAwLjA7CisJZHVrX2RlYnVn X3NldF9wYXVzZWQoaGVhcCk7ICAvKiBYWFg6IG92ZXJsYXAgd2l0aCBmaWVsZHMgYWJvdmUgKi8K KworCS8qIFNlbmQgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBhbmQgZmx1c2ggcmlnaHQgYWZ0ZXJ3 YXJkcy4gIE5vdGUgdGhhdAorCSAqIHdlIG11c3Qgd3JpdGUgcmF3LCB1bmZyYW1lZCBieXRlcyBo ZXJlLgorCSAqLworCWR1a19wdXNoX3NwcmludGYodGhyLCAiJWxkICVsZCAlcyAlc1xuIiwKKwkg ICAgICAgICAgICAgICAgIChsb25nKSBEVUtfREVCVUdfUFJPVE9DT0xfVkVSU0lPTiwKKwkgICAg ICAgICAgICAgICAgIChsb25nKSBEVUtfVkVSU0lPTiwKKwkgICAgICAgICAgICAgICAgIChjb25z dCBjaGFyICopIERVS19HSVRfREVTQ1JJQkUsCisJICAgICAgICAgICAgICAgICAoY29uc3QgY2hh ciAqKSBEVUtfVVNFX1RBUkdFVF9JTkZPKTsKKwlzdHIgPSBkdWtfZ2V0X2xzdHJpbmcodGhyLCAt MSwgJmxlbik7CisJRFVLX0FTU0VSVChzdHIgIT0gTlVMTCk7CisJZHVrX2RlYnVnX3dyaXRlX2J5 dGVzKHRociwgKGNvbnN0IGR1a191aW50OF90ICopIHN0ciwgbGVuKTsKKwlkdWtfZGVidWdfd3Jp dGVfZmx1c2godGhyKTsKKwlkdWtfcG9wKHRocik7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1 a19kZWJ1Z2dlcl9kZXRhY2goZHVrX2h0aHJlYWQgKnRocikgeworCURVS19EKERVS19EUFJJTlQo ImFwcGxpY2F0aW9uIGNhbGxlZCBkdWtfZGVidWdnZXJfZGV0YWNoKCkiKSk7CisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCisJ LyogQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIG5vIGhhcm0uICovCisJZHVrX2Rl YnVnX2RvX2RldGFjaCh0aHItPmhlYXApOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZGVi dWdnZXJfY29vcGVyYXRlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfYm9vbF90IHByb2Nlc3Nl ZF9tZXNzYWdlczsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVCh0 aHItPmhlYXAgIT0gTlVMTCk7CisKKwlpZiAoIWR1a19kZWJ1Z19pc19hdHRhY2hlZCh0aHItPmhl YXApKSB7CisJCXJldHVybjsKKwl9CisJaWYgKHRoci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCB8 fCB0aHItPmhlYXAtPmRiZ19wcm9jZXNzaW5nKSB7CisJCS8qIENhbGxpbmcgZHVrX2RlYnVnZ2Vy X2Nvb3BlcmF0ZSgpIHdoaWxlIER1a3RhcGUgaXMgYmVpbmcKKwkJICogY2FsbGVkIGludG8gaXMg bm90IHN1cHBvcnRlZC4gIFRoaXMgaXMgbm90IGEgMTAwJSBjaGVjaworCQkgKiBidXQgcHJldmVu dHMgYW55IGRhbWFnZSBpbiBtb3N0IGNhc2VzLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKworCXBy b2Nlc3NlZF9tZXNzYWdlcyA9IGR1a19kZWJ1Z19wcm9jZXNzX21lc3NhZ2VzKHRociwgMSAvKm5v X2Jsb2NrKi8pOworCURVS19VTlJFRihwcm9jZXNzZWRfbWVzc2FnZXMpOworfQorCitEVUtfRVhU RVJOQUwgZHVrX2Jvb2xfdCBkdWtfZGVidWdnZXJfbm90aWZ5KGR1a19odGhyZWFkICp0aHIsIGR1 a19pZHhfdCBudmFsdWVzKSB7CisJZHVrX2lkeF90IHRvcDsKKwlkdWtfaWR4X3QgaWR4OworCWR1 a19ib29sX3QgcmV0ID0gMDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FT U0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisKKwlEVUtfRChEVUtfRFBSSU5UKCJhcHBsaWNhdGlv biBjYWxsZWQgZHVrX2RlYnVnZ2VyX25vdGlmeSgpIHdpdGggbnZhbHVlcz0lbGQiLCAobG9uZykg bnZhbHVlcykpOworCisJdG9wID0gZHVrX2dldF90b3AodGhyKTsKKwlpZiAodG9wIDwgbnZhbHVl cykgeworCQlEVUtfRVJST1JfUkFOR0UodGhyLCAibm90IGVub3VnaCBzdGFjayB2YWx1ZXMgZm9y IG5vdGlmeSIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwl9CisJaWYgKGR1a19k ZWJ1Z19pc19hdHRhY2hlZCh0aHItPmhlYXApKSB7CisJCWR1a19kZWJ1Z193cml0ZV9ub3RpZnko dGhyLCBEVUtfREJHX0NNRF9BUFBOT1RJRlkpOworCQlmb3IgKGlkeCA9IHRvcCAtIG52YWx1ZXM7 IGlkeCA8IHRvcDsgaWR4KyspIHsKKwkJCWR1a190dmFsICp0diA9IERVS19HRVRfVFZBTF9QT1NJ RFgodGhyLCBpZHgpOworCQkJZHVrX2RlYnVnX3dyaXRlX3R2YWwodGhyLCB0dik7CisJCX0KKwkJ ZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOworCisJCS8qIFJldHVybiBub24temVybyAodHJ1ZSkg aWYgd2UgaGF2ZSBhIGdvb2QgcmVhc29uIHRvIGJlbGlldmUKKwkJICogdGhlIG5vdGlmeSB3YXMg ZGVsaXZlcmVkOyBpZiB3ZSdyZSBzdGlsbCBhdHRhY2hlZCBhdCBsZWFzdAorCQkgKiBhIHRyYW5z cG9ydCBlcnJvciB3YXMgbm90IGluZGljYXRlZCBieSB0aGUgdHJhbnNwb3J0IHdyaXRlCisJCSAq IGNhbGxiYWNrLiAgVGhpcyBpcyBub3QgYSAxMDAlIGd1YXJhbnRlZSBvZiBjb3Vyc2UuCisJCSAq LworCQlpZiAoZHVrX2RlYnVnX2lzX2F0dGFjaGVkKHRoci0+aGVhcCkpIHsKKwkJCXJldCA9IDE7 CisJCX0KKwl9CisJZHVrX3BvcF9uKHRociwgbnZhbHVlcyk7CisJcmV0dXJuIHJldDsKK30KKwor RFVLX0VYVEVSTkFMIHZvaWQgZHVrX2RlYnVnZ2VyX3BhdXNlKGR1a19odGhyZWFkICp0aHIpIHsK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5V TEwpOworCisJRFVLX0QoRFVLX0RQUklOVCgiYXBwbGljYXRpb24gY2FsbGVkIGR1a19kZWJ1Z2dl cl9wYXVzZSgpIikpOworCisJLyogVHJlYXQgbGlrZSBhIGRlYnVnZ2VyIHN0YXRlbWVudDogaWdu b3JlIHdoZW4gbm90IGF0dGFjaGVkLiAqLworCWlmIChkdWtfZGVidWdfaXNfYXR0YWNoZWQodGhy LT5oZWFwKSkgeworCQlpZiAoZHVrX2RlYnVnX2lzX3BhdXNlZCh0aHItPmhlYXApKSB7CisJCQlE VUtfRChEVUtfRFBSSU5UKCJkdWtfZGVidWdnZXJfcGF1c2UoKSBjYWxsZWQgd2hlbiBhbHJlYWR5 IHBhdXNlZDsgaWdub3JpbmciKSk7CisJCX0gZWxzZSB7CisJCQlkdWtfZGVidWdfc2V0X3BhdXNl ZCh0aHItPmhlYXApOworCisJCQkvKiBQYXVzZSBvbiB0aGUgbmV4dCBvcGNvZGUgZXhlY3V0ZWQu ICBUaGlzIGlzIGFsd2F5cyBzYWZlIHRvIGRvIGV2ZW4KKwkJCSAqIGluc2lkZSB0aGUgZGVidWdn ZXIgbWVzc2FnZSBsb29wOiB0aGUgaW50ZXJydXB0IGNvdW50ZXIgd2lsbCBiZSByZXNldAorCQkJ ICogdG8gaXRzIHByb3BlciB2YWx1ZSB3aGVuIHRoZSBtZXNzYWdlIGxvb3AgZXhpdHMuCisJCQkg Ki8KKwkJCXRoci0+aW50ZXJydXB0X2luaXQgPSAxOworCQkJdGhyLT5pbnRlcnJ1cHRfY291bnRl ciA9IDA7CisJCX0KKwl9Cit9CisKKyNlbHNlICAvKiBEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQg Ki8KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2RlYnVnZ2VyX2F0dGFjaChkdWtfaHRocmVhZCAq dGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfZGVidWdfcmVh ZF9mdW5jdGlvbiByZWFkX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkdWtfZGVidWdfd3JpdGVfZnVuY3Rpb24gd3JpdGVfY2IsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1a19kZWJ1Z19wZWVrX2Z1bmN0aW9uIHBlZWtfY2IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19kZWJ1Z19yZWFkX2ZsdXNoX2Z1 bmN0aW9uIHJlYWRfZmx1c2hfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGR1a19kZWJ1Z193cml0ZV9mbHVzaF9mdW5jdGlvbiB3cml0ZV9mbHVzaF9jYiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2RlYnVnX3JlcXVlc3RfZnVuY3Rp b24gcmVxdWVzdF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVr X2RlYnVnX2RldGFjaGVkX2Z1bmN0aW9uIGRldGFjaGVkX2NiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICp1ZGF0YSkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisJRFVLX1VOUkVGKHJlYWRfY2IpOworCURVS19VTlJFRih3cml0ZV9jYik7CisJRFVL X1VOUkVGKHBlZWtfY2IpOworCURVS19VTlJFRihyZWFkX2ZsdXNoX2NiKTsKKwlEVUtfVU5SRUYo d3JpdGVfZmx1c2hfY2IpOworCURVS19VTlJFRihyZXF1ZXN0X2NiKTsKKwlEVUtfVU5SRUYoZGV0 YWNoZWRfY2IpOworCURVS19VTlJFRih1ZGF0YSk7CisJRFVLX0VSUk9SX1RZUEUodGhyLCAibm8g ZGVidWdnZXIgc3VwcG9ydCIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworRFVL X0VYVEVSTkFMIHZvaWQgZHVrX2RlYnVnZ2VyX2RldGFjaChkdWtfaHRocmVhZCAqdGhyKSB7CisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfRVJST1JfVFlQRSh0aHIsICJubyBkZWJ1 Z2dlciBzdXBwb3J0Iik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCitEVUtfRVhU RVJOQUwgdm9pZCBkdWtfZGVidWdnZXJfY29vcGVyYXRlKGR1a19odGhyZWFkICp0aHIpIHsKKwkv KiBub3AgKi8KKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19VTlJFRih0aHIpOwor fQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZGVidWdnZXJfbm90aWZ5KGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBudmFsdWVzKSB7CisJZHVrX2lkeF90IHRvcDsKKworCURVS19B U1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0b3AgPSBkdWtfZ2V0X3RvcCh0aHIpOworCWlmICh0 b3AgPCBudmFsdWVzKSB7CisJCURVS19FUlJPUl9SQU5HRV9JTlZBTElEX0NPVU5UKHRocik7CisJ CURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKworCS8qIE5vIGRlYnVnZ2VyIHN1cHBv cnQsIGp1c3QgcG9wIHZhbHVlcy4gKi8KKwlkdWtfcG9wX24odGhyLCBudmFsdWVzKTsKKwlyZXR1 cm4gMDsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2RlYnVnZ2VyX3BhdXNlKGR1a19odGhy ZWFkICp0aHIpIHsKKwkvKiBUcmVhdCBsaWtlIGRlYnVnZ2VyIHN0YXRlbWVudDogbm9wICovCisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfVU5SRUYodGhyKTsKK30KKworI2VuZGlm ICAvKiBEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQgKi8KKy8qCisgKiAgSGVhcCBjcmVhdGlvbiBh bmQgZGVzdHJ1Y3Rpb24KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJl YWR5IGluY2x1ZGVkICovCisKK3R5cGVkZWYgc3RydWN0IGR1a19pbnRlcm5hbF90aHJlYWRfc3Rh dGUgZHVrX2ludGVybmFsX3RocmVhZF9zdGF0ZTsKKworc3RydWN0IGR1a19pbnRlcm5hbF90aHJl YWRfc3RhdGUgeworCWR1a19sanN0YXRlIGxqOworCWR1a19ib29sX3QgY3JlYXRpbmdfZXJyb3I7 CisJZHVrX2h0aHJlYWQgKmN1cnJfdGhyZWFkOworCWR1a19pbnRfdCBjYWxsX3JlY3Vyc2lvbl9k ZXB0aDsKK307CisKK0RVS19FWFRFUk5BTCBkdWtfaHRocmVhZCAqZHVrX2NyZWF0ZV9oZWFwKGR1 a19hbGxvY19mdW5jdGlvbiBhbGxvY19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHVrX3JlYWxsb2NfZnVuY3Rpb24gcmVhbGxvY19mdW5jLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2ZyZWVfZnVuY3Rpb24gZnJl ZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq aGVhcF91ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1 a19mYXRhbF9mdW5jdGlvbiBmYXRhbF9oYW5kbGVyKSB7CisJZHVrX2hlYXAgKmhlYXAgPSBOVUxM OworCWR1a19odGhyZWFkICp0aHI7CisKKwkvKiBBc3N1bWUgdGhhdCBlaXRoZXIgYWxsIG1lbW9y eSBmdW5jcyBhcmUgTlVMTCBvciBub24tTlVMTCwgbWl4ZWQKKwkgKiBjYXNlcyB3aWxsIG5vdyBi ZSB1bnNhZmUuCisJICovCisKKwkvKiBYWFg6IGp1c3QgYXNzZXJ0IG5vbi1OVUxMIHZhbHVlcyBo ZXJlIGFuZCBtYWtlIGNhbGxlciBhcmd1bWVudHMKKwkgKiBkbyB0aGUgZGVmYXVsdGluZyB0byB0 aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgKHNtYWxsZXIgY29kZSk/CisJICovCisKKwlpZiAo IWFsbG9jX2Z1bmMpIHsKKwkJRFVLX0FTU0VSVChyZWFsbG9jX2Z1bmMgPT0gTlVMTCk7CisJCURV S19BU1NFUlQoZnJlZV9mdW5jID09IE5VTEwpOworI2lmIGRlZmluZWQoRFVLX1VTRV9QUk9WSURF X0RFRkFVTFRfQUxMT0NfRlVOQ1RJT05TKQorCQlhbGxvY19mdW5jID0gZHVrX2RlZmF1bHRfYWxs b2NfZnVuY3Rpb247CisJCXJlYWxsb2NfZnVuYyA9IGR1a19kZWZhdWx0X3JlYWxsb2NfZnVuY3Rp b247CisJCWZyZWVfZnVuYyA9IGR1a19kZWZhdWx0X2ZyZWVfZnVuY3Rpb247CisjZWxzZQorCQlE VUtfRChEVUtfRFBSSU5UKCJubyBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBnaXZlbiBhbmQgbm8gZGVm YXVsdCBwcm92aWRlcnMiKSk7CisJCXJldHVybiBOVUxMOworI2VuZGlmCisJfSBlbHNlIHsKKwkJ RFVLX0FTU0VSVChyZWFsbG9jX2Z1bmMgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoZnJlZV9mdW5j ICE9IE5VTEwpOworCX0KKworCWlmICghZmF0YWxfaGFuZGxlcikgeworCQlmYXRhbF9oYW5kbGVy ID0gZHVrX2RlZmF1bHRfZmF0YWxfaGFuZGxlcjsKKwl9CisKKwlEVUtfQVNTRVJUKGFsbG9jX2Z1 bmMgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChyZWFsbG9jX2Z1bmMgIT0gTlVMTCk7CisJRFVLX0FT U0VSVChmcmVlX2Z1bmMgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChmYXRhbF9oYW5kbGVyICE9IE5V TEwpOworCisJaGVhcCA9IGR1a19oZWFwX2FsbG9jKGFsbG9jX2Z1bmMsIHJlYWxsb2NfZnVuYywg ZnJlZV9mdW5jLCBoZWFwX3VkYXRhLCBmYXRhbF9oYW5kbGVyKTsKKwlpZiAoIWhlYXApIHsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCXRociA9IGhlYXAtPmhlYXBfdGhyZWFkOworCURVS19BU1NFUlQo dGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCXJldHVybiB0 aHI7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19kZXN0cm95X2hlYXAoZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19oZWFwICpoZWFwOworCisJaWYgKCF0aHIpIHsKKwkJcmV0dXJuOworCX0K KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCWhlYXAgPSB0aHItPmhlYXA7CisJRFVLX0FT U0VSVChoZWFwICE9IE5VTEwpOworCisJZHVrX2hlYXBfZnJlZShoZWFwKTsKK30KKworRFVLX0VY VEVSTkFMIHZvaWQgZHVrX3N1c3BlbmQoZHVrX2h0aHJlYWQgKnRociwgZHVrX3RocmVhZF9zdGF0 ZSAqc3RhdGUpIHsKKwlkdWtfaW50ZXJuYWxfdGhyZWFkX3N0YXRlICpzbmFwc2hvdCA9IChkdWtf aW50ZXJuYWxfdGhyZWFkX3N0YXRlICopICh2b2lkICopIHN0YXRlOworCWR1a19oZWFwICpoZWFw OworCWR1a19sanN0YXRlICpsajsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVL X0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChzdGF0ZSAhPSBOVUxMKTsg IC8qIHVudmFsaWRhdGVkICovCisKKwkvKiBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCB3aGVuIGNh bGxlZCBmcm9tIHdpdGhpbiBhIGZpbmFsaXplci4KKwkgKiBJZiB0aGF0IGlzIGRvbmUsIHRoZSBm aW5hbGl6ZXIgd2lsbCByZW1haW4gcnVubmluZyBpbmRlZmluaXRlbHksCisJICogcHJldmVudGlu ZyBvdGhlciBmaW5hbGl6ZXJzIGZyb20gZXhlY3V0aW5nLiAgVGhlIGFzc2VydCBpcyBhIGJpdAor CSAqIHdpZGVyLCBjaGVja2luZyB0aGF0IGl0IHdvdWxkIGJlIE9LIHRvIHJ1biBwZW5kaW5nIGZp bmFsaXplcnMuCisJICovCisJRFVLX0FTU0VSVCh0aHItPmhlYXAtPnBmX3ByZXZlbnRfY291bnQg PT0gMCk7CisKKwkvKiBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCB0byBkdWtfc3VzcGVuZCgpIGZy b20gYW4gZXJyQ3JlYXRlKCkKKwkgKiBjYWxsLgorCSAqLworCURVS19BU1NFUlQodGhyLT5oZWFw LT5jcmVhdGluZ19lcnJvciA9PSAwKTsKKworCWhlYXAgPSB0aHItPmhlYXA7CisJbGogPSAmaGVh cC0+bGo7CisKKwlkdWtfcHVzaF90dmFsKHRociwgJmxqLT52YWx1ZTEpOworCWR1a19wdXNoX3R2 YWwodGhyLCAmbGotPnZhbHVlMik7CisKKwkvKiBYWFg6IGNyZWF0aW5nX2Vycm9yID09IDAgaXMg YXNzZXJ0ZWQgYWJvdmUsIHNvIG5vIG5lZWQgdG8gc3RvcmUuICovCisJZHVrX21lbWNweSgodm9p ZCAqKSAmc25hcHNob3QtPmxqLCAoY29uc3Qgdm9pZCAqKSBsaiwgc2l6ZW9mKGR1a19sanN0YXRl KSk7CisJc25hcHNob3QtPmNyZWF0aW5nX2Vycm9yID0gaGVhcC0+Y3JlYXRpbmdfZXJyb3I7CisJ c25hcHNob3QtPmN1cnJfdGhyZWFkID0gaGVhcC0+Y3Vycl90aHJlYWQ7CisJc25hcHNob3QtPmNh bGxfcmVjdXJzaW9uX2RlcHRoID0gaGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGg7CisKKwlsai0+ am1wYnVmX3B0ciA9IE5VTEw7CisJbGotPnR5cGUgPSBEVUtfTEpfVFlQRV9VTktOT1dOOworCURV S19UVkFMX1NFVF9VTkRFRklORUQoJmxqLT52YWx1ZTEpOworCURVS19UVkFMX1NFVF9VTkRFRklO RUQoJmxqLT52YWx1ZTIpOworCWhlYXAtPmNyZWF0aW5nX2Vycm9yID0gMDsKKwloZWFwLT5jdXJy X3RocmVhZCA9IE5VTEw7CisJaGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGggPSAwOworfQorCitE VUtfRVhURVJOQUwgdm9pZCBkdWtfcmVzdW1lKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGR1a190 aHJlYWRfc3RhdGUgKnN0YXRlKSB7CisJY29uc3QgZHVrX2ludGVybmFsX3RocmVhZF9zdGF0ZSAq c25hcHNob3QgPSAoY29uc3QgZHVrX2ludGVybmFsX3RocmVhZF9zdGF0ZSAqKSAoY29uc3Qgdm9p ZCAqKSBzdGF0ZTsKKwlkdWtfaGVhcCAqaGVhcDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChzdGF0ZSAh PSBOVUxMKTsgIC8qIHVudmFsaWRhdGVkICovCisKKwkvKiBTaG91bGRuJ3QgYmUgbmVjZXNzYXJ5 IGlmIGR1a19zdXNwZW5kKCkgaXMgY2FsbGVkIGJlZm9yZQorCSAqIGR1a19yZXN1bWUoKSwgYnV0 IGFzc2VydCBpbiBjYXNlIEFQSSBzZXF1ZW5jZSBpcyBpbmNvcnJlY3QuCisJICovCisJRFVLX0FT U0VSVCh0aHItPmhlYXAtPnBmX3ByZXZlbnRfY291bnQgPT0gMCk7CisJRFVLX0FTU0VSVCh0aHIt PmhlYXAtPmNyZWF0aW5nX2Vycm9yID09IDApOworCisJaGVhcCA9IHRoci0+aGVhcDsKKworCWR1 a19tZW1jcHkoKHZvaWQgKikgJmhlYXAtPmxqLCAoY29uc3Qgdm9pZCAqKSAmc25hcHNob3QtPmxq LCBzaXplb2YoZHVrX2xqc3RhdGUpKTsKKwloZWFwLT5jcmVhdGluZ19lcnJvciA9IHNuYXBzaG90 LT5jcmVhdGluZ19lcnJvcjsKKwloZWFwLT5jdXJyX3RocmVhZCA9IHNuYXBzaG90LT5jdXJyX3Ro cmVhZDsKKwloZWFwLT5jYWxsX3JlY3Vyc2lvbl9kZXB0aCA9IHNuYXBzaG90LT5jYWxsX3JlY3Vy c2lvbl9kZXB0aDsKKworCWR1a19wb3BfMih0aHIpOworfQorCisvKiBYWFg6IGJldHRlciBwbGFj ZSBmb3IgdGhpcyAqLworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3NldF9nbG9iYWxfb2JqZWN0KGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaG9iamVjdCAqaF9nbG9iOworCWR1a19ob2JqZWN0ICpo X3ByZXZfZ2xvYjsKKwlkdWtfaG9iamVudiAqaF9lbnY7CisJZHVrX2hvYmplY3QgKmhfcHJldl9l bnY7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX0QoRFVLX0RQUklOVCgi cmVwbGFjZSBnbG9iYWwgb2JqZWN0IHdpdGg6ICUhVCIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkp OworCisJaF9nbG9iID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJU KGhfZ2xvYiAhPSBOVUxMKTsKKworCS8qCisJICogIFJlcGxhY2UgZ2xvYmFsIG9iamVjdC4KKwkg Ki8KKworCWhfcHJldl9nbG9iID0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxdOworCURV S19VTlJFRihoX3ByZXZfZ2xvYik7CisJdGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxdID0g aF9nbG9iOworCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIGhfZ2xvYik7CisJRFVLX0hPQkpFQ1Rf REVDUkVGX0FMTE9XTlVMTCh0aHIsIGhfcHJldl9nbG9iKTsgIC8qIHNpZGUgZWZmZWN0cywgaW4g dGhlb3J5IChyZWZlcmVuY2VkIGJ5IGdsb2JhbCBlbnYpICovCisKKwkvKgorCSAqICBSZXBsYWNl IGxleGljYWwgZW52aXJvbm1lbnQgZm9yIGdsb2JhbCBzY29wZQorCSAqCisJICogIENyZWF0ZSBh IG5ldyBvYmplY3QgZW52aXJvbm1lbnQgZm9yIHRoZSBnbG9iYWwgbGV4aWNhbCBzY29wZS4KKwkg KiAgV2UgY2FuJ3QganVzdCByZXNldCB0aGUgX1RhcmdldCBwcm9wZXJ0eSBvZiB0aGUgY3VycmVu dCBvbmUsCisJICogIGJlY2F1c2UgdGhlIGxleGljYWwgc2NvcGUgaXMgc2hhcmVkIGJ5IG90aGVy IHRocmVhZHMgd2l0aCB0aGUKKwkgKiAgc2FtZSAoaW5pdGlhbCkgYnVpbHQtaW5zLgorCSAqLwor CisJaF9lbnYgPSBkdWtfaG9iamVudl9hbGxvYyh0aHIsCisJICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfT0JKRU5W KSk7CisJRFVLX0FTU0VSVChoX2VudiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNU X0dFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgaF9lbnYpID09IE5VTEwp OworCisJRFVLX0FTU0VSVChoX2Vudi0+dGFyZ2V0ID09IE5VTEwpOworCURVS19BU1NFUlQoaF9n bG9iICE9IE5VTEwpOworCWhfZW52LT50YXJnZXQgPSBoX2dsb2I7CisJRFVLX0hPQkpFQ1RfSU5D UkVGKHRociwgaF9nbG9iKTsKKwlEVUtfQVNTRVJUKGhfZW52LT5oYXNfdGhpcyA9PSAwKTsKKwor CS8qIFsgLi4uIG5ld19nbG9iIF0gKi8KKworCWhfcHJldl9lbnYgPSB0aHItPmJ1aWx0aW5zW0RV S19CSURYX0dMT0JBTF9FTlZdOworCXRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMX0VOVl0g PSAoZHVrX2hvYmplY3QgKikgaF9lbnY7CisJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgKGR1a19o b2JqZWN0ICopIGhfZW52KTsKKwlEVUtfSE9CSkVDVF9ERUNSRUZfQUxMT1dOVUxMKHRociwgaF9w cmV2X2Vudik7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwlEVUtfVU5SRUYoaF9lbnYpOyAgLyogd2l0 aG91dCByZWZjb3VudHMgKi8KKwlEVUtfVU5SRUYoaF9wcmV2X2Vudik7CisKKwkvKiBbIC4uLiBu ZXdfZ2xvYiBdICovCisKKwlkdWtfcG9wKHRocik7CisKKwkvKiBbIC4uLiBdICovCit9CisvKgor ICogIEluc3BlY3Rpb24KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJl YWR5IGluY2x1ZGVkICovCisKKy8qIEZvciBmb290cHJpbnQgZWZmaWNpZW50IG11bHRpcGxlIHZh bHVlIHNldHRpbmc6IGFycmF5cyBhcmUgbXVjaCBiZXR0ZXIgdGhhbgorICogdmFyYXJncywgZm9y bWF0IHN0cmluZyB3aXRoIHBhcnNpbmcgaXMgb2Z0ZW4gYmV0dGVyIHRoYW4gc3RyaW5nIHBvaW50 ZXIgYXJyYXlzLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2luc3BlY3RfbXVsdGlwbGVfdWlu dChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpmbXQsIGR1a19pbnRfdCAqdmFscykgewor CWR1a19pbnRfdCB2YWw7CisJY29uc3QgY2hhciAqcDsKKwljb25zdCBjaGFyICpwX2N1cnI7CisJ ZHVrX3NpemVfdCBsZW47CisKKwlmb3IgKHAgPSBmbXQ7OykgeworCQlsZW4gPSBEVUtfU1RSTEVO KHApOworCQlwX2N1cnIgPSBwOworCQlwICs9IGxlbiArIDE7CisJCWlmIChsZW4gPT0gMCkgewor CQkJLyogRG91YmxlIE5VTCAoPSBlbXB0eSBrZXkpIHRlcm1pbmF0ZXMuICovCisJCQlicmVhazsK KwkJfQorCQl2YWwgPSAqdmFscysrOworCQlpZiAodmFsID49IDApIHsKKwkJCS8qIE5lZ2F0aXZl IHZhbHVlcyBhcmUgbWFya2VycyB0byBza2lwIGtleS4gKi8KKwkJCWR1a19wdXNoX3N0cmluZyh0 aHIsIHBfY3Vycik7CisJCQlkdWtfcHVzaF9pbnQodGhyLCB2YWwpOworCQkJZHVrX3B1dF9wcm9w KHRociwgLTMpOworCQl9CisJfQorfQorCisvKiBSYXcgaGVscGVyIHRvIGV4dHJhY3QgaW50ZXJu YWwgaW5mb3JtYXRpb24gLyBzdGF0aXN0aWNzIGFib3V0IGEgdmFsdWUuCisgKiBUaGUgcmV0dXJu IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCBhcmUgdmVyc2lvbiBzcGVj aWZpYy4KKyAqIFRoZSBwcm9wZXJ0aWVzIG11c3Qgbm90IGV4cG9zZSBhbnl0aGluZyB0aGF0IHdv dWxkIGxlYWQgdG8gc2VjdXJpdHkKKyAqIGlzc3VlcyAoZS5nLiBleHBvc2luZyBjb21waWxlZCBm dW5jdGlvbiAnZGF0YScgYnVmZmVyIG1pZ2h0IGJlIGFuIGlzc3VlKS4KKyAqIEN1cnJlbnRseSBv bmx5IGNvdW50cyBhbmQgc2l6ZXMgYW5kIHN1Y2ggYXJlIGdpdmVuIHNvIHRoZXJlIHNob3VsZG4n dAorICogYmUgc2VjdXJpdHkgaW1wbGljYXRpb25zLgorICovCisKKyNkZWZpbmUgRFVLX19JRFhf VFlQRSAgICAgMAorI2RlZmluZSBEVUtfX0lEWF9JVEFHICAgICAxCisjZGVmaW5lIERVS19fSURY X1JFRkMgICAgIDIKKyNkZWZpbmUgRFVLX19JRFhfSEJZVEVTICAgMworI2RlZmluZSBEVUtfX0lE WF9DTEFTUyAgICA0CisjZGVmaW5lIERVS19fSURYX1BCWVRFUyAgIDUKKyNkZWZpbmUgRFVLX19J RFhfRVNJWkUgICAgNgorI2RlZmluZSBEVUtfX0lEWF9FTkVYVCAgICA3CisjZGVmaW5lIERVS19f SURYX0FTSVpFICAgIDgKKyNkZWZpbmUgRFVLX19JRFhfSFNJWkUgICAgOQorI2RlZmluZSBEVUtf X0lEWF9CQ0JZVEVTICAxMAorI2RlZmluZSBEVUtfX0lEWF9EQllURVMgICAxMQorI2RlZmluZSBE VUtfX0lEWF9UU1RBVEUgICAxMgorI2RlZmluZSBEVUtfX0lEWF9WQVJJQU5UICAxMworCitEVUtf RVhURVJOQUwgdm9pZCBkdWtfaW5zcGVjdF92YWx1ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4 X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19oZWFwaGRyICpoOworCS8qIFRoZSB0ZW1w b3JhcnkgdmFsdWVzIHNob3VsZCBiZSBpbiBhbiBhcnJheSByYXRoZXIgdGhhbiBpbmRpdmlkdWFs CisJICogdmFyaWFibGVzIHdoaWNoIChpbiBwcmFjdGljZSkgZW5zdXJlcyB0aGF0IHRoZSBjb21w aWxlciB3b24ndCBtYXAKKwkgKiB0aGVtIHRvIHJlZ2lzdGVycyBhbmQgZW1pdCBhIGxvdCBvZiB1 bm5lY2Vzc2FyeSBzaHVmZmxpbmcgY29kZS4KKwkgKi8KKwlkdWtfaW50X3QgdmFsc1sxNF07CisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJLyogQXNzdW1lIHR3bydzIGNvbXBsZW1l bnQgYW5kIHNldCBldmVyeXRoaW5nIHRvIC0xLiAqLworCWR1a19tZW1zZXQoKHZvaWQgKikgJnZh bHMsIChpbnQpIDB4ZmYsIHNpemVvZih2YWxzKSk7CisJRFVLX0FTU0VSVCh2YWxzW0RVS19fSURY X1RZUEVdID09IC0xKTsgIC8qIHNwb3QgY2hlY2sgb25lICovCisKKwl0diA9IGR1a19nZXRfdHZh bF9vcl91bnVzZWQodGhyLCBpZHgpOworCWggPSAoRFVLX1RWQUxfSVNfSEVBUF9BTExPQ0FURUQo dHYpID8gRFVLX1RWQUxfR0VUX0hFQVBIRFIodHYpIDogTlVMTCk7CisKKwl2YWxzW0RVS19fSURY X1RZUEVdID0gZHVrX2dldF90eXBlX3R2YWwodHYpOworCXZhbHNbRFVLX19JRFhfSVRBR10gPSAo ZHVrX2ludF90KSBEVUtfVFZBTF9HRVRfVEFHKHR2KTsKKworCWR1a19wdXNoX2JhcmVfb2JqZWN0 KHRocik7ICAvKiBJbnZhbGlkYXRlcyAndHYnLiAqLworCXR2ID0gTlVMTDsKKworCWlmIChoID09 IE5VTEwpIHsKKwkJZ290byBmaW5pc2g7CisJfQorCWR1a19wdXNoX3BvaW50ZXIodGhyLCAodm9p ZCAqKSBoKTsKKwlkdWtfcHV0X3Byb3BfbGl0ZXJhbCh0aHIsIC0yLCAiaHB0ciIpOworCisjaWYg MAorCS8qIENvdmVycyBhIGxvdCBvZiBpbmZvcm1hdGlvbiwgZS5nLiBidWZmZXIgYW5kIHN0cmlu ZyB2YXJpYW50cy4gKi8KKwlkdWtfcHVzaF91aW50KHRociwgKGR1a191aW50X3QpIERVS19IRUFQ SERSX0dFVF9GTEFHUyhoKSk7CisJZHVrX3B1dF9wcm9wX2xpdGVyYWwodGhyLCAtMiwgImhmbGFn cyIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQor CXZhbHNbRFVLX19JRFhfUkVGQ10gPSAoZHVrX2ludF90KSBEVUtfSEVBUEhEUl9HRVRfUkVGQ09V TlQoaCk7CisjZW5kaWYKKwl2YWxzW0RVS19fSURYX1ZBUklBTlRdID0gMDsKKworCS8qIEhlYXBo ZHIgc2l6ZSBhbmQgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHNpemUsIGZvbGxvd2VkIGJ5CisJICog dHlwZSBzcGVjaWZpYyBzdHVmZiAod2l0aCB2YXJ5aW5nIHZhbHVlIGNvdW50KS4KKwkgKi8KKwlz d2l0Y2ggKChkdWtfc21hbGxfaW50X3QpIERVS19IRUFQSERSX0dFVF9UWVBFKGgpKSB7CisJY2Fz ZSBEVUtfSFRZUEVfU1RSSU5HOiB7CisJCWR1a19oc3RyaW5nICpoX3N0ciA9IChkdWtfaHN0cmlu ZyAqKSBoOworCQl2YWxzW0RVS19fSURYX0hCWVRFU10gPSAoZHVrX2ludF90KSAoc2l6ZW9mKGR1 a19oc3RyaW5nKSArIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGhfc3RyKSArIDEpOworI2lmIGRl ZmluZWQoRFVLX1VTRV9IU1RSSU5HX0VYVERBVEEpCisJCWlmIChEVUtfSFNUUklOR19IQVNfRVhU REFUQShoX3N0cikpIHsKKwkJCXZhbHNbRFVLX19JRFhfVkFSSUFOVF0gPSAxOworCQl9CisjZW5k aWYKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0hUWVBFX09CSkVDVDogeworCQlkdWtfaG9iamVj dCAqaF9vYmogPSAoZHVrX2hvYmplY3QgKikgaDsKKworCQkvKiBYWFg6IHZhcmlhbnRzIGhlcmUg YXJlIG1heWJlIHBvaW50bGVzczsgY2xhc3MgaXMgZW5vdWdoPyAqLworCQlpZiAoRFVLX0hPQkpF Q1RfSVNfQVJSQVkoaF9vYmopKSB7CisJCQl2YWxzW0RVS19fSURYX0hCWVRFU10gPSBzaXplb2Yo ZHVrX2hhcnJheSk7CisJCX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoaF9vYmop KSB7CisJCQl2YWxzW0RVS19fSURYX0hCWVRFU10gPSBzaXplb2YoZHVrX2hjb21wZnVuYyk7CisJ CX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfTkFURlVOQyhoX29iaikpIHsKKwkJCXZhbHNbRFVL X19JRFhfSEJZVEVTXSA9IHNpemVvZihkdWtfaG5hdGZ1bmMpOworCQl9IGVsc2UgaWYgKERVS19I T0JKRUNUX0lTX1RIUkVBRChoX29iaikpIHsKKwkJCXZhbHNbRFVLX19JRFhfSEJZVEVTXSA9IHNp emVvZihkdWtfaHRocmVhZCk7CisJCQl2YWxzW0RVS19fSURYX1RTVEFURV0gPSAoKGR1a19odGhy ZWFkICopIGhfb2JqKS0+c3RhdGU7CisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9T VVBQT1JUKQorCQl9IGVsc2UgaWYgKERVS19IT0JKRUNUX0lTX0JVRk9CSihoX29iaikpIHsKKwkJ CXZhbHNbRFVLX19JRFhfSEJZVEVTXSA9IHNpemVvZihkdWtfaGJ1Zm9iaik7CisJCQkvKiBYWFg6 IHNvbWUgc2l6ZSBpbmZvcm1hdGlvbiAqLworI2VuZGlmCisJCX0gZWxzZSB7CisJCQl2YWxzW0RV S19fSURYX0hCWVRFU10gPSAoZHVrX3NtYWxsX3VpbnRfdCkgc2l6ZW9mKGR1a19ob2JqZWN0KTsK KwkJfQorCisJCXZhbHNbRFVLX19JRFhfQ0xBU1NdID0gKGR1a19pbnRfdCkgRFVLX0hPQkpFQ1Rf R0VUX0NMQVNTX05VTUJFUihoX29iaik7CisJCXZhbHNbRFVLX19JRFhfUEJZVEVTXSA9IChkdWtf aW50X3QpIERVS19IT0JKRUNUX1BfQUxMT0NfU0laRShoX29iaik7CisJCXZhbHNbRFVLX19JRFhf RVNJWkVdID0gKGR1a19pbnRfdCkgRFVLX0hPQkpFQ1RfR0VUX0VTSVpFKGhfb2JqKTsKKwkJdmFs c1tEVUtfX0lEWF9FTkVYVF0gPSAoZHVrX2ludF90KSBEVUtfSE9CSkVDVF9HRVRfRU5FWFQoaF9v YmopOworCQl2YWxzW0RVS19fSURYX0FTSVpFXSA9IChkdWtfaW50X3QpIERVS19IT0JKRUNUX0dF VF9BU0laRShoX29iaik7CisJCXZhbHNbRFVLX19JRFhfSFNJWkVdID0gKGR1a19pbnRfdCkgRFVL X0hPQkpFQ1RfR0VUX0hTSVpFKGhfb2JqKTsKKworCQkvKiBOb3RlOiBlX25leHQgaW5kaWNhdGVz IHRoZSBudW1iZXIgb2YgZ2MtcmVhY2hhYmxlIGVudHJpZXMKKwkJICogaW4gdGhlIGVudHJ5IHBh cnQsIGFuZCBhbHNvIGluZGljYXRlcyB0aGUgaW5kZXggd2hlcmUgdGhlCisJCSAqIG5leHQgbmV3 IHByb3BlcnR5IHdvdWxkIGJlIGluc2VydGVkLiAgSXQgZG9lcyAqbm90KiBpbmRpY2F0ZQorCQkg KiB0aGUgbnVtYmVyIG9mIG5vbi1OVUxMIGtleXMgcHJlc2VudCBpbiB0aGUgb2JqZWN0LiAgVGhh dAorCQkgKiB2YWx1ZSBjb3VsZCBiZSBjb3VudGVkIHNlcGFyYXRlbHkgYnV0IHJlcXVpcmVzIGEg cGFzcyB0aHJvdWdoCisJCSAqIHRoZSBrZXkgbGlzdC4KKwkJICovCisKKwkJaWYgKERVS19IT0JK RUNUX0lTX0NPTVBGVU5DKGhfb2JqKSkgeworCQkJZHVrX2hidWZmZXIgKmhfZGF0YSA9IChkdWtf aGJ1ZmZlciAqKSBEVUtfSENPTVBGVU5DX0dFVF9EQVRBKHRoci0+aGVhcCwgKGR1a19oY29tcGZ1 bmMgKikgaF9vYmopOworCQkJdmFsc1tEVUtfX0lEWF9CQ0JZVEVTXSA9IChkdWtfaW50X3QpICho X2RhdGEgPyBEVUtfSEJVRkZFUl9HRVRfU0laRShoX2RhdGEpIDogMCk7CisJCX0KKwkJYnJlYWs7 CisJfQorCWNhc2UgRFVLX0hUWVBFX0JVRkZFUjogeworCQlkdWtfaGJ1ZmZlciAqaF9idWYgPSAo ZHVrX2hidWZmZXIgKikgaDsKKworCQlpZiAoRFVLX0hCVUZGRVJfSEFTX0RZTkFNSUMoaF9idWYp KSB7CisJCQlpZiAoRFVLX0hCVUZGRVJfSEFTX0VYVEVSTkFMKGhfYnVmKSkgeworCQkJCXZhbHNb RFVLX19JRFhfVkFSSUFOVF0gPSAyOyAgLyogYnVmZmVyIHZhcmlhbnQgMjogZXh0ZXJuYWwgKi8K KwkJCQl2YWxzW0RVS19fSURYX0hCWVRFU10gPSAoZHVrX3VpbnRfdCkgKHNpemVvZihkdWtfaGJ1 ZmZlcl9leHRlcm5hbCkpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBXaGVuIGFsbG9jX3NpemUgPT0g MCB0aGUgc2Vjb25kIGFsbG9jYXRpb24gbWF5IG5vdAorCQkJCSAqIGFjdHVhbGx5IGV4aXN0Lgor CQkJCSAqLworCQkJCXZhbHNbRFVLX19JRFhfVkFSSUFOVF0gPSAxOyAgLyogYnVmZmVyIHZhcmlh bnQgMTogZHluYW1pYyAqLworCQkJCXZhbHNbRFVLX19JRFhfSEJZVEVTXSA9IChkdWtfdWludF90 KSAoc2l6ZW9mKGR1a19oYnVmZmVyX2R5bmFtaWMpKTsKKwkJCX0KKwkJCXZhbHNbRFVLX19JRFhf REJZVEVTXSA9IChkdWtfaW50X3QpIChEVUtfSEJVRkZFUl9HRVRfU0laRShoX2J1ZikpOworCQl9 IGVsc2UgeworCQkJRFVLX0FTU0VSVCh2YWxzW0RVS19fSURYX1ZBUklBTlRdID09IDApOyAgLyog YnVmZmVyIHZhcmlhbnQgMDogZml4ZWQgKi8KKwkJCXZhbHNbRFVLX19JRFhfSEJZVEVTXSA9IChk dWtfaW50X3QpIChzaXplb2YoZHVrX2hidWZmZXJfZml4ZWQpICsgRFVLX0hCVUZGRVJfR0VUX1NJ WkUoaF9idWYpKTsKKwkJfQorCQlicmVhazsKKwl9CisJfQorCisgZmluaXNoOgorCWR1a19faW5z cGVjdF9tdWx0aXBsZV91aW50KHRociwKKwkgICAgInR5cGUiICJceDAwIiAiaXRhZyIgIlx4MDAi ICJyZWZjIiAiXHgwMCIgImhieXRlcyIgIlx4MDAiICJjbGFzcyIgIlx4MDAiCisJICAgICJwYnl0 ZXMiICJceDAwIiAiZXNpemUiICJceDAwIiAiZW5leHQiICJceDAwIiAiYXNpemUiICJceDAwIiAi aHNpemUiICJceDAwIgorCSAgICAiYmNieXRlcyIgIlx4MDAiICJkYnl0ZXMiICJceDAwIiAidHN0 YXRlIiAiXHgwMCIgInZhcmlhbnQiICJceDAwIiAiXHgwMCIsCisJICAgIChkdWtfaW50X3QgKikg JnZhbHMpOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfaW5zcGVjdF9jYWxsc3RhY2tfZW50 cnkoZHVrX2h0aHJlYWQgKnRociwgZHVrX2ludF90IGxldmVsKSB7CisJZHVrX2FjdGl2YXRpb24g KmFjdDsKKwlkdWtfdWludF9mYXN0MzJfdCBwYzsKKwlkdWtfdWludF9mYXN0MzJfdCBsaW5lOwor CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCS8qIC0xICAgPSB0b3AgY2FsbHN0YWNr IGVudHJ5CisJICogLTIgICA9IGNhbGxlciBvZiBsZXZlbCAtMQorCSAqIGV0YworCSAqLworCWFj dCA9IGR1a19odGhyZWFkX2dldF9hY3RpdmF0aW9uX2Zvcl9sZXZlbCh0aHIsIGxldmVsKTsKKwlp ZiAoYWN0ID09IE5VTEwpIHsKKwkJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7CisJCXJldHVybjsK Kwl9CisJZHVrX3B1c2hfYmFyZV9vYmplY3QodGhyKTsKKworCS8qIFJlbGV2YW50IFBDIGlzIGp1 c3QgYmVmb3JlIGN1cnJlbnQgb25lIGJlY2F1c2UgUEMgaXMKKwkgKiBwb3N0LWluY3JlbWVudGVk LiAgVGhpcyBzaG91bGQgbWF0Y2ggd2hhdCBlcnJvciBhdWdtZW50CisJICogY29kZSBkb2VzLgor CSAqLworCXBjID0gZHVrX2h0aHJlYWRfZ2V0X2FjdF9wcmV2X3BjKHRociwgYWN0KTsKKworCWR1 a19wdXNoX3R2YWwodGhyLCAmYWN0LT50dl9mdW5jKTsKKworCWR1a19wdXNoX3VpbnQodGhyLCAo ZHVrX3VpbnRfdCkgcGMpOworCWR1a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMywgRFVL X1NUUklEWF9QQyk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUEMyTElORSkKKwlsaW5lID0gZHVr X2hvYmplY3RfcGMybGluZV9xdWVyeSh0aHIsIC0xLCBwYyk7CisjZWxzZQorCWxpbmUgPSAwOwor I2VuZGlmCisJZHVrX3B1c2hfdWludCh0aHIsIChkdWtfdWludF90KSBsaW5lKTsKKwlkdWtfcHV0 X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTMsIERVS19TVFJJRFhfTElORV9OVU1CRVIpOworCisJ ZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0yLCBEVUtfU1RSSURYX0xDX0ZVTkNUSU9O KTsKKwkvKiBQcm92aWRpbmcgYWNjZXNzIHRvIGUuZy4gYWN0LT5sZXhfZW52IHdvdWxkIGJlIGRh bmdlcm91czogdGhlc2UKKwkgKiBpbnRlcm5hbCBzdHJ1Y3R1cmVzIG11c3QgbmV2ZXIgYmUgYWNj ZXNzaWJsZSB0byB0aGUgYXBwbGljYXRpb24uCisJICogRHVrdGFwZSByZWxpZXMgb24gdGhlbSBo YXZpbmcgY29uc2lzdGVudCBkYXRhLCBhbmQgdGhpcyBjb25zaXN0ZW5jeQorCSAqIGlzIG9ubHkg YXNzZXJ0ZWQgZm9yLCBub3QgY2hlY2tlZCBmb3IuCisJICovCit9CisKKy8qIGF1dG9tYXRpYyB1 bmRlZnMgKi8KKyN1bmRlZiBEVUtfX0lEWF9BU0laRQorI3VuZGVmIERVS19fSURYX0JDQllURVMK KyN1bmRlZiBEVUtfX0lEWF9DTEFTUworI3VuZGVmIERVS19fSURYX0RCWVRFUworI3VuZGVmIERV S19fSURYX0VORVhUCisjdW5kZWYgRFVLX19JRFhfRVNJWkUKKyN1bmRlZiBEVUtfX0lEWF9IQllU RVMKKyN1bmRlZiBEVUtfX0lEWF9IU0laRQorI3VuZGVmIERVS19fSURYX0lUQUcKKyN1bmRlZiBE VUtfX0lEWF9QQllURVMKKyN1bmRlZiBEVUtfX0lEWF9SRUZDCisjdW5kZWYgRFVLX19JRFhfVFNU QVRFCisjdW5kZWYgRFVLX19JRFhfVFlQRQorI3VuZGVmIERVS19fSURYX1ZBUklBTlQKKy8qCisg KiAgTWVtb3J5IGNhbGxzLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFs cmVhZHkgaW5jbHVkZWQgKi8KKworRFVLX0VYVEVSTkFMIHZvaWQgKmR1a19hbGxvY19yYXcoZHVr X2h0aHJlYWQgKnRociwgZHVrX3NpemVfdCBzaXplKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKworCXJldHVybiBEVUtfQUxMT0NfUkFXKHRoci0+aGVhcCwgc2l6ZSk7Cit9CisKK0RV S19FWFRFUk5BTCB2b2lkIGR1a19mcmVlX3JhdyhkdWtfaHRocmVhZCAqdGhyLCB2b2lkICpwdHIp IHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX0ZSRUVfUkFXKHRoci0+aGVh cCwgcHRyKTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgKmR1a19yZWFsbG9jX3JhdyhkdWtfaHRo cmVhZCAqdGhyLCB2b2lkICpwdHIsIGR1a19zaXplX3Qgc2l6ZSkgeworCURVS19BU1NFUlRfQVBJ X0VOVFJZKHRocik7CisKKwlyZXR1cm4gRFVLX1JFQUxMT0NfUkFXKHRoci0+aGVhcCwgcHRyLCBz aXplKTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgKmR1a19hbGxvYyhkdWtfaHRocmVhZCAqdGhy LCBkdWtfc2l6ZV90IHNpemUpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0 dXJuIERVS19BTExPQyh0aHItPmhlYXAsIHNpemUpOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBk dWtfZnJlZShkdWtfaHRocmVhZCAqdGhyLCB2b2lkICpwdHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCisJRFVLX0ZSRUVfQ0hFQ0tFRCh0aHIsIHB0cik7Cit9CisKK0RVS19FWFRF Uk5BTCB2b2lkICpkdWtfcmVhbGxvYyhkdWtfaHRocmVhZCAqdGhyLCB2b2lkICpwdHIsIGR1a19z aXplX3Qgc2l6ZSkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwkvKgorCSAqICBO b3RlOiBzaW5jZSB0aGlzIGlzIGFuIGV4cG9zZWQgQVBJIGNhbGwsIHRoZXJlIHNob3VsZCBiZQor CSAqICBubyB3YXkgYSBtYXJrLWFuZC1zd2VlcCBjb3VsZCBoYXZlIGEgc2lkZSBlZmZlY3Qgb24g dGhlCisJICogIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGluZCAncHRyJzsgdGhlIHBvaW50ZXIgc2hv dWxkIG5ldmVyCisJICogIGJlIHNvbWV0aGluZyB0aGF0IER1a3RhcGUgd2FudHMgdG8gY2hhbmdl LgorCSAqCisJICogIFRodXMsIG5vIG5lZWQgdG8gdXNlIERVS19SRUFMTE9DX0lORElSRUNUIChh bmQgd2UgZG9uJ3QKKwkgKiAgaGF2ZSB0aGUgc3RvcmFnZSBsb2NhdGlvbiBoZXJlIGFueXdheSku CisJICovCisKKwlyZXR1cm4gRFVLX1JFQUxMT0ModGhyLT5oZWFwLCBwdHIsIHNpemUpOworfQor CitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZ2V0X21lbW9yeV9mdW5jdGlvbnMoZHVrX2h0aHJlYWQg KnRociwgZHVrX21lbW9yeV9mdW5jdGlvbnMgKm91dF9mdW5jcykgeworCWR1a19oZWFwICpoZWFw OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKG91dF9mdW5jcyAh PSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVh cCAhPSBOVUxMKTsKKworCWhlYXAgPSB0aHItPmhlYXA7CisJb3V0X2Z1bmNzLT5hbGxvY19mdW5j ID0gaGVhcC0+YWxsb2NfZnVuYzsKKwlvdXRfZnVuY3MtPnJlYWxsb2NfZnVuYyA9IGhlYXAtPnJl YWxsb2NfZnVuYzsKKwlvdXRfZnVuY3MtPmZyZWVfZnVuYyA9IGhlYXAtPmZyZWVfZnVuYzsKKwlv dXRfZnVuY3MtPnVkYXRhID0gaGVhcC0+aGVhcF91ZGF0YTsKK30KKworRFVLX0VYVEVSTkFMIHZv aWQgZHVrX2djKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgZmxhZ3MpIHsKKwlkdWtfaGVh cCAqaGVhcDsKKwlkdWtfc21hbGxfdWludF90IG1zX2ZsYWdzOworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKwloZWFwID0gdGhyLT5oZWFwOworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxM KTsKKworCURVS19EKERVS19EUFJJTlQoIm1hcmstYW5kLXN3ZWVwIHJlcXVlc3RlZCBieSBhcHBs aWNhdGlvbiIpKTsKKwlEVUtfQVNTRVJUKERVS19HQ19DT01QQUNUID09IERVS19NU19GTEFHX0VN RVJHRU5DWSk7ICAvKiBDb21wYWN0IGZsYWcgaXMgMToxIHdpdGggZW1lcmdlbmN5IGZsYWcgd2hp Y2ggZm9yY2VzIGNvbXBhY3Rpb24uICovCisJbXNfZmxhZ3MgPSAoZHVrX3NtYWxsX3VpbnRfdCkg ZmxhZ3M7CisJZHVrX2hlYXBfbWFya19hbmRfc3dlZXAoaGVhcCwgbXNfZmxhZ3MpOworfQorLyoK KyAqICBPYmplY3QgaGFuZGxpbmc6IHByb3BlcnR5IGFjY2VzcyBhbmQgb3RoZXIgc3VwcG9ydCBm dW5jdGlvbnMuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBp bmNsdWRlZCAqLworCisvKgorICogIFByb3BlcnR5IGhhbmRsaW5nCisgKgorICogIFRoZSBBUEkg ZXhwb3NlcyBvbmx5IHRoZSBtb3N0IGNvbW1vbiBwcm9wZXJ0eSBoYW5kbGluZyBmdW5jdGlvbnMu CisgKiAgVGhlIGNhbGxlciBjYW4gaW52b2tlIEVDTUFTY3JpcHQgYnVpbHQtaW5zIGZvciBmdWxs IGNvbnRyb2wgKGUuZy4KKyAqICBkZWZpbmVQcm9wZXJ0eSwgZ2V0T3duUHJvcGVydHlEZXNjcmlw dG9yKS4KKyAqLworCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3AoZHVrX2h0 aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgpIHsKKwlkdWtfdHZhbCAqdHZfb2JqOworCWR1 a190dmFsICp0dl9rZXk7CisJZHVrX2Jvb2xfdCByYzsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisKKwkvKiBOb3RlOiBjb3B5aW5nIHR2X29iaiBhbmQgdHZfa2V5IHRvIGxvY2FscyB0 byBzaGllbGQgYWdhaW5zdCBhIHZhbHN0YWNrCisJICogcmVzaXplIGlzIG5vdCBuZWNlc3Nhcnkg Zm9yIGEgcHJvcGVydHkgZ2V0IHJpZ2h0IG5vdy4KKwkgKi8KKworCXR2X29iaiA9IGR1a19yZXF1 aXJlX3R2YWwodGhyLCBvYmpfaWR4KTsKKwl0dl9rZXkgPSBkdWtfcmVxdWlyZV90dmFsKHRociwg LTEpOworCisJcmMgPSBkdWtfaG9iamVjdF9nZXRwcm9wKHRociwgdHZfb2JqLCB0dl9rZXkpOwor CURVS19BU1NFUlQocmMgPT0gMCB8fCByYyA9PSAxKTsKKwkvKiBhIHZhbHVlIGlzIGxlZnQgb24g c3RhY2sgcmVnYXJkbGVzcyBvZiByYyAqLworCisJZHVrX3JlbW92ZV9tMih0aHIpOyAgLyogcmVt b3ZlIGtleSAqLworCURVS19BU1NFUlQoZHVrX2lzX3VuZGVmaW5lZCh0aHIsIC0xKSB8fCByYyA9 PSAxKTsKKwlyZXR1cm4gcmM7ICAvKiAxIGlmIHByb3BlcnR5IGZvdW5kLCAwIG90aGVyd2lzZSAq LworfQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3Bfc3RyaW5nKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBjb25zdCBjaGFyICprZXkpIHsKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCisJb2Jq X2lkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCSh2b2lk KSBkdWtfcHVzaF9zdHJpbmcodGhyLCBrZXkpOworCXJldHVybiBkdWtfZ2V0X3Byb3AodGhyLCBv YmpfaWR4KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2dldF9wcm9wX2xzdHJp bmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGNvbnN0IGNoYXIgKmtleSwg ZHVrX3NpemVfdCBrZXlfbGVuKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtf QVNTRVJUKGtleSAhPSBOVUxMKTsKKworCW9ial9pZHggPSBkdWtfcmVxdWlyZV9ub3JtYWxpemVf aW5kZXgodGhyLCBvYmpfaWR4KTsKKwkodm9pZCkgZHVrX3B1c2hfbHN0cmluZyh0aHIsIGtleSwg a2V5X2xlbik7CisJcmV0dXJuIGR1a19nZXRfcHJvcCh0aHIsIG9ial9pZHgpOworfQorCisjaWYg IWRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1 a19nZXRfcHJvcF9saXRlcmFsX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lk eCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pIHsKKwlEVUtfQVNTRVJUX0FQ SV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQoa2V5 W2tleV9sZW5dID09IChjaGFyKSAwKTsKKworCW9ial9pZHggPSBkdWtfcmVxdWlyZV9ub3JtYWxp emVfaW5kZXgodGhyLCBvYmpfaWR4KTsKKwkodm9pZCkgZHVrX3B1c2hfbGl0ZXJhbF9yYXcodGhy LCBrZXksIGtleV9sZW4pOworCXJldHVybiBkdWtfZ2V0X3Byb3AodGhyLCBvYmpfaWR4KTsKK30K KyNlbmRpZgorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3BfaW5kZXgoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191YXJyaWR4X3QgYXJyX2lkeCkg eworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVf bm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJZHVrX3B1c2hfdWFycmlkeCh0aHIsIGFy cl9pZHgpOworCXJldHVybiBkdWtfZ2V0X3Byb3AodGhyLCBvYmpfaWR4KTsKK30KKworRFVLX0VY VEVSTkFMIGR1a19ib29sX3QgZHVrX2dldF9wcm9wX2hlYXBwdHIoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IG9ial9pZHgsIHZvaWQgKnB0cikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lk eCk7CisJKHZvaWQpIGR1a19wdXNoX2hlYXBwdHIodGhyLCBwdHIpOyAgLyogTlVMTCAtPiAndW5k ZWZpbmVkJyAqLworCXJldHVybiBkdWtfZ2V0X3Byb3AodGhyLCBvYmpfaWR4KTsKK30KKworRFVL X0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2dldF9wcm9wX3N0cmlkeChkdWtfaHRocmVhZCAqdGhy LCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHgpIHsKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlRfU1RSSURYX1ZBTElEKHN0cmlkeCk7CisK KwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJ KHZvaWQpIGR1a19wdXNoX2hzdHJpbmcodGhyLCBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKHRociwg c3RyaWR4KSk7CisJcmV0dXJuIGR1a19nZXRfcHJvcCh0aHIsIG9ial9pZHgpOworfQorCitEVUtf SU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0X3JhdyhkdWtfaHRo cmVhZCAqdGhyLCBkdWtfdWludF90IHBhY2tlZF9hcmdzKSB7CisJcmV0dXJuIGR1a19nZXRfcHJv cF9zdHJpZHgodGhyLCAoZHVrX2lkeF90KSAoZHVrX2ludDE2X3QpIChwYWNrZWRfYXJncyA+PiAx NiksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX3NtYWxsX3VpbnRfdCkg KHBhY2tlZF9hcmdzICYgMHhmZmZmVUwpKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3Qg ZHVrX2dldF9wcm9wX3N0cmlkeF9ib29sZWFuKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBv YmpfaWR4LCBkdWtfc21hbGxfdWludF90IHN0cmlkeCwgZHVrX2Jvb2xfdCAqb3V0X2hhc19wcm9w KSB7CisJZHVrX2Jvb2xfdCByYzsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVL X0FTU0VSVF9TVFJJRFhfVkFMSUQoc3RyaWR4KTsKKworCXJjID0gZHVrX2dldF9wcm9wX3N0cmlk eCh0aHIsIG9ial9pZHgsIHN0cmlkeCk7CisJaWYgKG91dF9oYXNfcHJvcCkgeworCQkqb3V0X2hh c19wcm9wID0gcmM7CisJfQorCXJldHVybiBkdWtfdG9fYm9vbGVhbl90b3BfcG9wKHRocik7Cit9 CisKK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fcHV0X3Byb3Bfc2hhcmVkKGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfaWR4X3QgaWR4X2tleSkgeworCWR1a190dmFs ICp0dl9vYmo7CisJZHVrX3R2YWwgKnR2X2tleTsKKwlkdWtfdHZhbCAqdHZfdmFsOworCWR1a19i b29sX3QgdGhyb3dfZmxhZzsKKwlkdWtfYm9vbF90IHJjOworCisJLyogTm90ZTogY29weWluZyB0 dl9vYmogYW5kIHR2X2tleSB0byBsb2NhbHMgdG8gc2hpZWxkIGFnYWluc3QgYSB2YWxzdGFjawor CSAqIHJlc2l6ZSBpcyBub3QgbmVjZXNzYXJ5IGZvciBhIHByb3BlcnR5IHB1dCByaWdodCBub3cg KHB1dHByb3AgcHJvdGVjdHMKKwkgKiBhZ2FpbnN0IGl0IGludGVybmFsbHkpLgorCSAqLworCisJ LyogS2V5IGFuZCB2YWx1ZSBpbmRpY2VzIGFyZSBlaXRoZXIgKC0yLCAtMSkgb3IgKC0xLCAtMiku ICBHaXZlbiBpZHhfa2V5LAorCSAqIGlkeF92YWwgaXMgYWx3YXlzIChpZHhfa2V5IF4gMHgwMSku CisJICovCisJRFVLX0FTU0VSVCgoaWR4X2tleSA9PSAtMiAmJiAoaWR4X2tleSBeIDEpID09IC0x KSB8fAorCSAgICAgICAgICAgKGlkeF9rZXkgPT0gLTEgJiYgKGlkeF9rZXkgXiAxKSA9PSAtMikp OworCS8qIFhYWDogRGlyZWN0IGFjY2VzczsgZmFzdGVyIHZhbGlkYXRpb24uICovCisJdHZfb2Jq ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIG9ial9pZHgpOworCXR2X2tleSA9IGR1a19yZXF1aXJl X3R2YWwodGhyLCBpZHhfa2V5KTsKKwl0dl92YWwgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4 X2tleSBeIDEpOworCXRocm93X2ZsYWcgPSBkdWtfaXNfc3RyaWN0X2NhbGwodGhyKTsKKworCXJj ID0gZHVrX2hvYmplY3RfcHV0cHJvcCh0aHIsIHR2X29iaiwgdHZfa2V5LCB0dl92YWwsIHRocm93 X2ZsYWcpOworCURVS19BU1NFUlQocmMgPT0gMCB8fCByYyA9PSAxKTsKKworCWR1a19wb3BfMih0 aHIpOyAgLyogcmVtb3ZlIGtleSBhbmQgdmFsdWUgKi8KKwlyZXR1cm4gcmM7ICAvKiAxIGlmIHBy b3BlcnR5IGZvdW5kLCAwIG90aGVyd2lzZSAqLworfQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xf dCBkdWtfcHV0X3Byb3AoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgpIHsKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiBkdWtfX3B1dF9wcm9wX3NoYXJlZCh0 aHIsIG9ial9pZHgsIC0yKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX3B1dF9w cm9wX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3QgY2hh ciAqa2V5KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKGtleSAh PSBOVUxMKTsKKworCS8qIENhcmVmdWwgaGVyZSBhbmQgd2l0aCBvdGhlciBkdWtfcHV0X3Byb3Bf eHh4KCkgaGVscGVyczogdGhlCisJICogdGFyZ2V0IG9iamVjdCBhbmQgdGhlIHByb3BlcnR5IHZh bHVlIG1heSBiZSBpbiB0aGUgc2FtZSB2YWx1ZQorCSAqIHN0YWNrIHNsb3QgKHVudXN1YWwsIGJ1 dCBzdGlsbCBjb25jZXB0dWFsbHkgY2xlYXIpLgorCSAqLworCW9ial9pZHggPSBkdWtfbm9ybWFs aXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJKHZvaWQpIGR1a19wdXNoX3N0cmluZyh0aHIsIGtl eSk7CisJcmV0dXJuIGR1a19fcHV0X3Byb3Bfc2hhcmVkKHRociwgb2JqX2lkeCwgLTEpOworfQor CitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfcHV0X3Byb3BfbHN0cmluZyhkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90IGtl eV9sZW4pIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoa2V5ICE9 IE5VTEwpOworCisJb2JqX2lkeCA9IGR1a19ub3JtYWxpemVfaW5kZXgodGhyLCBvYmpfaWR4KTsK Kwkodm9pZCkgZHVrX3B1c2hfbHN0cmluZyh0aHIsIGtleSwga2V5X2xlbik7CisJcmV0dXJuIGR1 a19fcHV0X3Byb3Bfc2hhcmVkKHRociwgb2JqX2lkeCwgLTEpOworfQorCisjaWYgIWRlZmluZWQo RFVLX1VTRV9QUkVGRVJfU0laRSkKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19wdXRfcHJv cF9saXRlcmFsX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3Qg Y2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0 aHIpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQoa2V5W2tleV9sZW5d ID09IChjaGFyKSAwKTsKKworCW9ial9pZHggPSBkdWtfbm9ybWFsaXplX2luZGV4KHRociwgb2Jq X2lkeCk7CisJKHZvaWQpIGR1a19wdXNoX2xpdGVyYWxfcmF3KHRociwga2V5LCBrZXlfbGVuKTsK KwlyZXR1cm4gZHVrX19wdXRfcHJvcF9zaGFyZWQodGhyLCBvYmpfaWR4LCAtMSk7Cit9CisjZW5k aWYKKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX3B1dF9wcm9wX2luZGV4KGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfdWFycmlkeF90IGFycl9pZHgpIHsKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJb2JqX2lkeCA9IGR1a19yZXF1aXJlX25vcm1h bGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCWR1a19wdXNoX3VhcnJpZHgodGhyLCBhcnJfaWR4 KTsKKwlyZXR1cm4gZHVrX19wdXRfcHJvcF9zaGFyZWQodGhyLCBvYmpfaWR4LCAtMSk7Cit9CisK K0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19wdXRfcHJvcF9oZWFwcHRyKGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lkICpwdHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCisJb2JqX2lkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIs IG9ial9pZHgpOworCSh2b2lkKSBkdWtfcHVzaF9oZWFwcHRyKHRociwgcHRyKTsgIC8qIE5VTEwg LT4gJ3VuZGVmaW5lZCcgKi8KKwlyZXR1cm4gZHVrX19wdXRfcHJvcF9zaGFyZWQodGhyLCBvYmpf aWR4LCAtMSk7Cit9CisKKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX3B1dF9wcm9wX3N0 cmlkeChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX3NtYWxsX3VpbnRf dCBzdHJpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlRfU1RS SURYX1ZBTElEKHN0cmlkeCk7CisKKwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2lu ZGV4KHRociwgb2JqX2lkeCk7CisJZHVrX3B1c2hfaHN0cmluZyh0aHIsIERVS19IVEhSRUFEX0dF VF9TVFJJTkcodGhyLCBzdHJpZHgpKTsKKwlyZXR1cm4gZHVrX19wdXRfcHJvcF9zaGFyZWQodGhy LCBvYmpfaWR4LCAtMSk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19wdXRfcHJv cF9zdHJpZHhfc2hvcnRfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgcGFja2VkX2Fy Z3MpIHsKKwlyZXR1cm4gZHVrX3B1dF9wcm9wX3N0cmlkeCh0aHIsIChkdWtfaWR4X3QpIChkdWtf aW50MTZfdCkgKHBhY2tlZF9hcmdzID4+IDE2KSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChkdWtfc21hbGxfdWludF90KSAocGFja2VkX2FyZ3MgJiAweGZmZmZVTCkpOworfQor CitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZGVsX3Byb3AoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IG9ial9pZHgpIHsKKwlkdWtfdHZhbCAqdHZfb2JqOworCWR1a190dmFsICp0dl9r ZXk7CisJZHVrX2Jvb2xfdCB0aHJvd19mbGFnOworCWR1a19ib29sX3QgcmM7CisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJLyogTm90ZTogY29weWluZyB0dl9vYmogYW5kIHR2X2tl eSB0byBsb2NhbHMgdG8gc2hpZWxkIGFnYWluc3QgYSB2YWxzdGFjaworCSAqIHJlc2l6ZSBpcyBu b3QgbmVjZXNzYXJ5IGZvciBhIHByb3BlcnR5IGRlbGV0ZSByaWdodCBub3cuCisJICovCisKKwl0 dl9vYmogPSBkdWtfcmVxdWlyZV90dmFsKHRociwgb2JqX2lkeCk7CisJdHZfa2V5ID0gZHVrX3Jl cXVpcmVfdHZhbCh0aHIsIC0xKTsKKwl0aHJvd19mbGFnID0gZHVrX2lzX3N0cmljdF9jYWxsKHRo cik7CisKKwlyYyA9IGR1a19ob2JqZWN0X2RlbHByb3AodGhyLCB0dl9vYmosIHR2X2tleSwgdGhy b3dfZmxhZyk7CisJRFVLX0FTU0VSVChyYyA9PSAwIHx8IHJjID09IDEpOworCisJZHVrX3BvcCh0 aHIpOyAgLyogcmVtb3ZlIGtleSAqLworCXJldHVybiByYzsKK30KKworRFVLX0VYVEVSTkFMIGR1 a19ib29sX3QgZHVrX2RlbF9wcm9wX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg b2JqX2lkeCwgY29uc3QgY2hhciAqa2V5KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KwlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKworCW9ial9pZHggPSBkdWtfcmVxdWlyZV9ub3Jt YWxpemVfaW5kZXgodGhyLCBvYmpfaWR4KTsKKwkodm9pZCkgZHVrX3B1c2hfc3RyaW5nKHRociwg a2V5KTsKKwlyZXR1cm4gZHVrX2RlbF9wcm9wKHRociwgb2JqX2lkeCk7Cit9CisKK0RVS19FWFRF Uk5BTCBkdWtfYm9vbF90IGR1a19kZWxfcHJvcF9sc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1 a19pZHhfdCBvYmpfaWR4LCBjb25zdCBjaGFyICprZXksIGR1a19zaXplX3Qga2V5X2xlbikgewor CURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisK KwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJ KHZvaWQpIGR1a19wdXNoX2xzdHJpbmcodGhyLCBrZXksIGtleV9sZW4pOworCXJldHVybiBkdWtf ZGVsX3Byb3AodGhyLCBvYmpfaWR4KTsKK30KKworI2lmICFkZWZpbmVkKERVS19VU0VfUFJFRkVS X1NJWkUpCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZGVsX3Byb3BfbGl0ZXJhbF9yYXco ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGNvbnN0IGNoYXIgKmtleSwgZHVr X3NpemVfdCBrZXlfbGVuKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNT RVJUKGtleSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGtleVtrZXlfbGVuXSA9PSAoY2hhcikgMCk7 CisKKwlvYmpfaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7 CisJKHZvaWQpIGR1a19wdXNoX2xpdGVyYWxfcmF3KHRociwga2V5LCBrZXlfbGVuKTsKKwlyZXR1 cm4gZHVrX2RlbF9wcm9wKHRociwgb2JqX2lkeCk7Cit9CisjZW5kaWYKKworRFVLX0VYVEVSTkFM IGR1a19ib29sX3QgZHVrX2RlbF9wcm9wX2luZGV4KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhf dCBvYmpfaWR4LCBkdWtfdWFycmlkeF90IGFycl9pZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCisJb2JqX2lkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIG9i al9pZHgpOworCWR1a19wdXNoX3VhcnJpZHgodGhyLCBhcnJfaWR4KTsKKwlyZXR1cm4gZHVrX2Rl bF9wcm9wKHRociwgb2JqX2lkeCk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19k ZWxfcHJvcF9oZWFwcHRyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lk ICpwdHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJb2JqX2lkeCA9IGR1a19y ZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCSh2b2lkKSBkdWtfcHVzaF9o ZWFwcHRyKHRociwgcHRyKTsgIC8qIE5VTEwgLT4gJ3VuZGVmaW5lZCcgKi8KKwlyZXR1cm4gZHVr X2RlbF9wcm9wKHRociwgb2JqX2lkeCk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1 a19kZWxfcHJvcF9zdHJpZHgoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1 a19zbWFsbF91aW50X3Qgc3RyaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlE VUtfQVNTRVJUX1NUUklEWF9WQUxJRChzdHJpZHgpOworCisJb2JqX2lkeCA9IGR1a19yZXF1aXJl X25vcm1hbGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCWR1a19wdXNoX2hzdHJpbmcodGhyLCBE VUtfSFRIUkVBRF9HRVRfU1RSSU5HKHRociwgc3RyaWR4KSk7CisJcmV0dXJuIGR1a19kZWxfcHJv cCh0aHIsIG9ial9pZHgpOworfQorCisjaWYgMAorRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVr X2RlbF9wcm9wX3N0cmlkeF9zaG9ydF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBw YWNrZWRfYXJncykgeworCXJldHVybiBkdWtfZGVsX3Byb3Bfc3RyaWR4KHRociwgKGR1a19pZHhf dCkgKGR1a19pbnQxNl90KSAocGFja2VkX2FyZ3MgPj4gMTYpLAorCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGR1a19zbWFsbF91aW50X3QpIChwYWNrZWRfYXJncyAmIDB4ZmZmZlVM KSk7Cit9CisjZW5kaWYKKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2hhc19wcm9wKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4KSB7CisJZHVrX3R2YWwgKnR2X29iajsK KwlkdWtfdHZhbCAqdHZfa2V5OworCWR1a19ib29sX3QgcmM7CisKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCisJLyogTm90ZTogY29weWluZyB0dl9vYmogYW5kIHR2X2tleSB0byBsb2Nh bHMgdG8gc2hpZWxkIGFnYWluc3QgYSB2YWxzdGFjaworCSAqIHJlc2l6ZSBpcyBub3QgbmVjZXNz YXJ5IGZvciBhIHByb3BlcnR5IGV4aXN0ZW5jZSBjaGVjayByaWdodCBub3cuCisJICovCisKKwl0 dl9vYmogPSBkdWtfcmVxdWlyZV90dmFsKHRociwgb2JqX2lkeCk7CisJdHZfa2V5ID0gZHVrX3Jl cXVpcmVfdHZhbCh0aHIsIC0xKTsKKworCXJjID0gZHVrX2hvYmplY3RfaGFzcHJvcCh0aHIsIHR2 X29iaiwgdHZfa2V5KTsKKwlEVUtfQVNTRVJUKHJjID09IDAgfHwgcmMgPT0gMSk7CisKKwlkdWtf cG9wKHRocik7ICAvKiByZW1vdmUga2V5ICovCisJcmV0dXJuIHJjOyAgLyogMSBpZiBwcm9wZXJ0 eSBmb3VuZCwgMCBvdGhlcndpc2UgKi8KK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVr X2hhc19wcm9wX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29u c3QgY2hhciAqa2V5KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJU KGtleSAhPSBOVUxMKTsKKworCW9ial9pZHggPSBkdWtfcmVxdWlyZV9ub3JtYWxpemVfaW5kZXgo dGhyLCBvYmpfaWR4KTsKKwkodm9pZCkgZHVrX3B1c2hfc3RyaW5nKHRociwga2V5KTsKKwlyZXR1 cm4gZHVrX2hhc19wcm9wKHRociwgb2JqX2lkeCk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9v bF90IGR1a19oYXNfcHJvcF9sc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpf aWR4LCBjb25zdCBjaGFyICprZXksIGR1a19zaXplX3Qga2V5X2xlbikgeworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisKKwlvYmpfaWR4ID0g ZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJKHZvaWQpIGR1a19w dXNoX2xzdHJpbmcodGhyLCBrZXksIGtleV9sZW4pOworCXJldHVybiBkdWtfaGFzX3Byb3AodGhy LCBvYmpfaWR4KTsKK30KKworI2lmICFkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCitEVUtf RVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfaGFzX3Byb3BfbGl0ZXJhbF9yYXcoZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IG9ial9pZHgsIGNvbnN0IGNoYXIgKmtleSwgZHVrX3NpemVfdCBrZXlf bGVuKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKGtleSAhPSBO VUxMKTsKKwlEVUtfQVNTRVJUKGtleVtrZXlfbGVuXSA9PSAoY2hhcikgMCk7CisKKwlvYmpfaWR4 ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJKHZvaWQpIGR1 a19wdXNoX2xpdGVyYWxfcmF3KHRociwga2V5LCBrZXlfbGVuKTsKKwlyZXR1cm4gZHVrX2hhc19w cm9wKHRociwgb2JqX2lkeCk7Cit9CisjZW5kaWYKKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3Qg ZHVrX2hhc19wcm9wX2luZGV4KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBk dWtfdWFycmlkeF90IGFycl9pZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJ b2JqX2lkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCWR1 a19wdXNoX3VhcnJpZHgodGhyLCBhcnJfaWR4KTsKKwlyZXR1cm4gZHVrX2hhc19wcm9wKHRociwg b2JqX2lkeCk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19oYXNfcHJvcF9oZWFw cHRyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lkICpwdHIpIHsKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJb2JqX2lkeCA9IGR1a19yZXF1aXJlX25vcm1h bGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCSh2b2lkKSBkdWtfcHVzaF9oZWFwcHRyKHRociwg cHRyKTsgIC8qIE5VTEwgLT4gJ3VuZGVmaW5lZCcgKi8KKwlyZXR1cm4gZHVrX2hhc19wcm9wKHRo ciwgb2JqX2lkeCk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19oYXNfcHJvcF9z dHJpZHgoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1a19zbWFsbF91aW50 X3Qgc3RyaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUX1NU UklEWF9WQUxJRChzdHJpZHgpOworCisJb2JqX2lkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9p bmRleCh0aHIsIG9ial9pZHgpOworCWR1a19wdXNoX2hzdHJpbmcodGhyLCBEVUtfSFRIUkVBRF9H RVRfU1RSSU5HKHRociwgc3RyaWR4KSk7CisJcmV0dXJuIGR1a19oYXNfcHJvcCh0aHIsIG9ial9p ZHgpOworfQorCisjaWYgMAorRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2hhc19wcm9wX3N0 cmlkeF9zaG9ydF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBwYWNrZWRfYXJncykg eworCXJldHVybiBkdWtfaGFzX3Byb3Bfc3RyaWR4KHRociwgKGR1a19pZHhfdCkgKGR1a19pbnQx Nl90KSAocGFja2VkX2FyZ3MgPj4gMTYpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGR1a19zbWFsbF91aW50X3QpIChwYWNrZWRfYXJncyAmIDB4ZmZmZlVMKSk7Cit9CisjZW5k aWYKKworLyogRGVmaW5lIG93biBwcm9wZXJ0eSB3aXRob3V0IGluaGVyaXRhbmNlIGxvb2t1cHMg YW5kIHN1Y2guICBUaGlzIGRpZmZlcnMgZnJvbQorICogW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGJl Y2F1c2Ugc3BlY2lhbCBiZWhhdmlvcnMgKGxpa2UgQXJyYXkgJ2xlbmd0aCcpIGFyZQorICogbm90 IGludm9rZWQgYnkgdGhpcyBtZXRob2QuICBUaGUgY2FsbGVyIG11c3QgYmUgY2FyZWZ1bCB0byBp bnZva2UgYW55IHN1Y2gKKyAqIGJlaGF2aW9ycyBpZiBuZWNlc3NhcnkuCisgKi8KK0RVS19JTlRF Uk5BTCB2b2lkIGR1a194ZGVmX3Byb3AoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9p ZHgsIGR1a19zbWFsbF91aW50X3QgZGVzY19mbGFncykgeworCWR1a19ob2JqZWN0ICpvYmo7CisJ ZHVrX2hzdHJpbmcgKmtleTsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlvYmog PSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgb2JqX2lkeCk7CisJRFVLX0FTU0VSVChvYmogIT0g TlVMTCk7CisJa2V5ID0gZHVrX3RvX3Byb3BlcnR5X2tleV9oc3RyaW5nKHRociwgLTIpOworCURV S19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQoZHVrX3JlcXVpcmVfdHZhbCh0aHIs IC0xKSAhPSBOVUxMKTsKKworCWR1a19ob2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9pbnRlcm5hbCh0 aHIsIG9iaiwga2V5LCBkZXNjX2ZsYWdzKTsKKworCWR1a19wb3AodGhyKTsgIC8qIHBvcCBrZXkg Ki8KK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3hkZWZfcHJvcF9pbmRleChkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX3VhcnJpZHhfdCBhcnJfaWR4LCBkdWtfc21h bGxfdWludF90IGRlc2NfZmxhZ3MpIHsKKwlkdWtfaG9iamVjdCAqb2JqOworCisJRFVLX0FTU0VS VF9BUElfRU5UUlkodGhyKTsKKworCW9iaiA9IGR1a19yZXF1aXJlX2hvYmplY3QodGhyLCBvYmpf aWR4KTsKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKworCWR1a19ob2JqZWN0X2RlZmluZV9w cm9wZXJ0eV9pbnRlcm5hbF9hcnJpZHgodGhyLCBvYmosIGFycl9pZHgsIGRlc2NfZmxhZ3MpOwor CS8qIHZhbHVlIHBvcHBlZCBieSBjYWxsICovCit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a194 ZGVmX3Byb3Bfc3RyaWR4KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtf c21hbGxfdWludF90IHN0cmlkeCwgZHVrX3NtYWxsX3VpbnRfdCBkZXNjX2ZsYWdzKSB7CisJZHVr X2hvYmplY3QgKm9iajsKKwlkdWtfaHN0cmluZyAqa2V5OworCisJRFVLX0FTU0VSVF9BUElfRU5U UlkodGhyKTsKKwlEVUtfQVNTRVJUX1NUUklEWF9WQUxJRChzdHJpZHgpOworCisJb2JqID0gZHVr X3JlcXVpcmVfaG9iamVjdCh0aHIsIG9ial9pZHgpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwp OworCWtleSA9IERVS19IVEhSRUFEX0dFVF9TVFJJTkcodGhyLCBzdHJpZHgpOworCURVS19BU1NF UlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQoZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKSAh PSBOVUxMKTsKKworCWR1a19ob2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9pbnRlcm5hbCh0aHIsIG9i aiwga2V5LCBkZXNjX2ZsYWdzKTsKKwkvKiB2YWx1ZSBwb3BwZWQgYnkgY2FsbCAqLworfQorCitE VUtfSU5URVJOQUwgdm9pZCBkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydF9yYXcoZHVrX2h0aHJl YWQgKnRociwgZHVrX3VpbnRfdCBwYWNrZWRfYXJncykgeworCWR1a194ZGVmX3Byb3Bfc3RyaWR4 KHRociwgKGR1a19pZHhfdCkgKGR1a19pbnQ4X3QpIChwYWNrZWRfYXJncyA+PiAyNCksCisJICAg ICAgICAgICAgICAgICAgICAgICAgICAoZHVrX3NtYWxsX3VpbnRfdCkgKHBhY2tlZF9hcmdzID4+ IDgpICYgMHhmZmZmVUwsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX3NtYWxsX3Vp bnRfdCkgKHBhY2tlZF9hcmdzICYgMHhmZkwpKTsKK30KKworI2lmIDAgIC8qdW51c2VkKi8KK0RV S19JTlRFUk5BTCB2b2lkIGR1a194ZGVmX3Byb3Bfc3RyaWR4X2J1aWx0aW4oZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IG9ial9pZHgsIGR1a19zbWFsbF91aW50X3Qgc3RyaWR4LCBkdWtfc21h bGxfaW50X3QgYnVpbHRpbl9pZHgsIGR1a19zbWFsbF91aW50X3QgZGVzY19mbGFncykgeworCWR1 a19ob2JqZWN0ICpvYmo7CisJZHVrX2hzdHJpbmcgKmtleTsKKworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisJRFVLX0FTU0VSVF9TVFJJRFhfVkFMSUQoc3RyaWR4KTsKKwlEVUtfQVNTRVJU X0JJRFhfVkFMSUQoYnVpbHRpbl9pZHgpOworCisJb2JqID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0 aHIsIG9ial9pZHgpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCWtleSA9IERVS19IVEhS RUFEX0dFVF9TVFJJTkcodGhyLCBzdHJpZHgpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOwor CisJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHRoci0+YnVpbHRpbnNbYnVpbHRpbl9pZHhdKTsKKwlk dWtfaG9iamVjdF9kZWZpbmVfcHJvcGVydHlfaW50ZXJuYWwodGhyLCBvYmosIGtleSwgZGVzY19m bGFncyk7CisJLyogdmFsdWUgcG9wcGVkIGJ5IGNhbGwgKi8KK30KKyNlbmRpZgorCisvKiBUaGlz IGlzIGEgcmFyZSBwcm9wZXJ0eSBoZWxwZXI7IGl0IHNldHMgdGhlIGdsb2JhbCB0aHJvd2VyIChF NSBTZWN0aW9uIDEzLjIuMykKKyAqIHNldHRlci9nZXR0ZXIgaW50byBhbiBvYmplY3QgcHJvcGVy dHkuICBUaGlzIGlzIG5lZWRlZCBieSB0aGUgJ2FyZ3VtZW50cycKKyAqIG9iamVjdCBjcmVhdGlv biBjb2RlLCBmdW5jdGlvbiBpbnN0YW5jZSBjcmVhdGlvbiBjb2RlLCBhbmQgRnVuY3Rpb24ucHJv dG90eXBlLmJpbmQoKS4KKyAqLworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfeGRlZl9wcm9wX3N0 cmlkeF90aHJvd2VyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfc21h bGxfdWludF90IHN0cmlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlvYmpf aWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgb2JqX2lkeCk7CisJZHVrX3B1 c2hfaHN0cmluZ19zdHJpZHgodGhyLCBzdHJpZHgpOworCWR1a19wdXNoX2hvYmplY3RfYmlkeCh0 aHIsIERVS19CSURYX1RZUEVfRVJST1JfVEhST1dFUik7CisJZHVrX2R1cF90b3AodGhyKTsKKwlk dWtfZGVmX3Byb3AodGhyLCBvYmpfaWR4LCBEVUtfREVGUFJPUF9IQVZFX1NFVFRFUiB8IERVS19E RUZQUk9QX0hBVkVfR0VUVEVSIHwgRFVLX0RFRlBST1BfRk9SQ0UpOyAgLyogYXR0cmlidXRlcyBh bHdheXMgMCAqLworfQorCisvKiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgZXF1 aXZhbGVudCBDIGJpbmRpbmcuICovCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZ2V0X3Byb3BfZGVz YyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qgb2JqX2lkeCwgZHVrX3VpbnRfdCBmbGFncykg eworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX1VOUkVGKGZsYWdzKTsgIC8qIG5v IGZsYWdzIGRlZmluZWQgeWV0ICovCisKKwlkdWtfaG9iamVjdF9vYmplY3RfZ2V0X293bl9wcm9w ZXJ0eV9kZXNjcmlwdG9yKHRociwgb2JqX2lkeCk7ICAvKiBbIC4uLiBrZXkgXSAtPiBbIC4uLiBk ZXNjIF0gKi8KK30KKworLyogT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgZXF1aXZhbGVudCBDIGJp bmRpbmcuICovCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZGVmX3Byb3AoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191aW50X3QgZmxhZ3MpIHsKKwlkdWtfaWR4X3QgaWR4 X2Jhc2U7CisJZHVrX2hvYmplY3QgKm9iajsKKwlkdWtfaHN0cmluZyAqa2V5OworCWR1a19pZHhf dCBpZHhfdmFsdWU7CisJZHVrX2hvYmplY3QgKmdldDsKKwlkdWtfaG9iamVjdCAqc2V0OworCWR1 a191aW50X3QgaXNfZGF0YV9kZXNjOworCWR1a191aW50X3QgaXNfYWNjX2Rlc2M7CisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJb2JqID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIs IG9ial9pZHgpOworCisJaXNfZGF0YV9kZXNjID0gZmxhZ3MgJiAoRFVLX0RFRlBST1BfSEFWRV9W QUxVRSB8IERVS19ERUZQUk9QX0hBVkVfV1JJVEFCTEUpOworCWlzX2FjY19kZXNjID0gZmxhZ3Mg JiAoRFVLX0RFRlBST1BfSEFWRV9HRVRURVIgfCBEVUtfREVGUFJPUF9IQVZFX1NFVFRFUik7CisJ aWYgKGlzX2RhdGFfZGVzYyAmJiBpc19hY2NfZGVzYykgeworCQkvKiAiSGF2ZSIgZmxhZ3MgbXVz dCBub3QgYmUgY29uZmxpY3Rpbmcgc28gdGhhdCB0aGV5IHdvdWxkCisJCSAqIGFwcGx5IHRvIGJv dGggYSBwbGFpbiBwcm9wZXJ0eSBhbmQgYW4gYWNjZXNzb3IgYXQgdGhlIHNhbWUKKwkJICogdGlt ZS4KKwkJICovCisJCWdvdG8gZmFpbF9pbnZhbGlkX2Rlc2M7CisJfQorCisJaWR4X2Jhc2UgPSBk dWtfZ2V0X3RvcF9pbmRleCh0aHIpOworCWlmIChmbGFncyAmIERVS19ERUZQUk9QX0hBVkVfU0VU VEVSKSB7CisJCWR1a19yZXF1aXJlX3R5cGVfbWFzayh0aHIsIGlkeF9iYXNlLCBEVUtfVFlQRV9N QVNLX1VOREVGSU5FRCB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfVFlQRV9NQVNLX09CSkVDVCB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQyk7CisJCXNldCA9IGR1a19nZXRfaG9iamVjdF9w cm9tb3RlX2xmdW5jKHRociwgaWR4X2Jhc2UpOworCQlpZiAoc2V0ICE9IE5VTEwgJiYgIURVS19I T0JKRUNUX0lTX0NBTExBQkxFKHNldCkpIHsKKwkJCWdvdG8gZmFpbF9ub3RfY2FsbGFibGU7CisJ CX0KKwkJaWR4X2Jhc2UtLTsKKwl9IGVsc2UgeworCQlzZXQgPSBOVUxMOworCX0KKwlpZiAoZmxh Z3MgJiBEVUtfREVGUFJPUF9IQVZFX0dFVFRFUikgeworCQlkdWtfcmVxdWlyZV90eXBlX21hc2so dGhyLCBpZHhfYmFzZSwgRFVLX1RZUEVfTUFTS19VTkRFRklORUQgfAorCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19PQkpFQ1QgfAorCQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19MSUdIVEZVTkMpOwor CQlnZXQgPSBkdWtfZ2V0X2hvYmplY3RfcHJvbW90ZV9sZnVuYyh0aHIsIGlkeF9iYXNlKTsKKwkJ aWYgKGdldCAhPSBOVUxMICYmICFEVUtfSE9CSkVDVF9JU19DQUxMQUJMRShnZXQpKSB7CisJCQln b3RvIGZhaWxfbm90X2NhbGxhYmxlOworCQl9CisJCWlkeF9iYXNlLS07CisJfSBlbHNlIHsKKwkJ Z2V0ID0gTlVMTDsKKwl9CisJaWYgKGZsYWdzICYgRFVLX0RFRlBST1BfSEFWRV9WQUxVRSkgewor CQlpZHhfdmFsdWUgPSBpZHhfYmFzZTsKKwkJaWR4X2Jhc2UtLTsKKwl9IGVsc2UgeworCQlpZHhf dmFsdWUgPSAoZHVrX2lkeF90KSAtMTsKKwl9CisJa2V5ID0gZHVrX3RvX3Byb3BlcnR5X2tleV9o c3RyaW5nKHRociwgaWR4X2Jhc2UpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCisJZHVr X3JlcXVpcmVfdmFsaWRfaW5kZXgodGhyLCBpZHhfYmFzZSk7CisKKwlkdWtfaG9iamVjdF9kZWZp bmVfcHJvcGVydHlfaGVscGVyKHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZsYWdzIC8qZGVmcHJvcF9mbGFncyovLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2JqLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LAor CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4X3ZhbHVlLAorCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAv KnRocm93X2ZsYWcqLyk7CisKKwkvKiBDbGVhbiB1cCBzdGFjayAqLworCisJZHVrX3NldF90b3Ao dGhyLCBpZHhfYmFzZSk7CisKKwkvKiBbIC4uLiBvYmogLi4uIF0gKi8KKworCXJldHVybjsKKwor IGZhaWxfaW52YWxpZF9kZXNjOgorCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9JTlZBTElE X0RFU0NSSVBUT1IpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKworIGZhaWxfbm90X2Nh bGxhYmxlOgorCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9OT1RfQ0FMTEFCTEUpOworCURV S19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyoKKyAqICBPYmplY3QgcmVsYXRlZAorICoK KyAqICBOb3RlOiBzZWFsKCkgYW5kIGZyZWV6ZSgpIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggRUNN QVNjcmlwdCBiaW5kaW5ncywKKyAqICBhbmQgYXJlIG5vdCBleHBvc2VkIHRocm91Z2ggdGhlIEFQ SS4KKyAqLworCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfY29tcGFjdChkdWtfaHRocmVhZCAqdGhy LCBkdWtfaWR4X3Qgb2JqX2lkeCkgeworCWR1a19ob2JqZWN0ICpvYmo7CisKKwlEVUtfQVNTRVJU X0FQSV9FTlRSWSh0aHIpOworCisJb2JqID0gZHVrX2dldF9ob2JqZWN0KHRociwgb2JqX2lkeCk7 CisJaWYgKG9iaikgeworCQkvKiBOb3RlOiB0aGlzIG1heSBmYWlsLCBjYWxsZXIgc2hvdWxkIHBy b3RlY3QgdGhlIGNhbGwgaWYgbmVjZXNzYXJ5ICovCisJCWR1a19ob2JqZWN0X2NvbXBhY3RfcHJv cHModGhyLCBvYmopOworCX0KK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2NvbXBhY3RfbTEo ZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlkdWtf Y29tcGFjdCh0aHIsIC0xKTsKK30KKworLyogWFhYOiB0aGUgZHVrX2hvYmplY3RfZW51bS5jIHN0 YWNrIEFQSXMgc2hvdWxkIGJlIHJld29ya2VkICovCisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19l bnVtKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfdWludF90IGVudW1f ZmxhZ3MpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX2R1cCh0aHIsIG9i al9pZHgpOworCWR1a19yZXF1aXJlX2hvYmplY3RfcHJvbW90ZV9tYXNrKHRociwgLTEsIERVS19U WVBFX01BU0tfTElHSFRGVU5DIHwgRFVLX1RZUEVfTUFTS19CVUZGRVIpOworCWR1a19ob2JqZWN0 X2VudW1lcmF0b3JfY3JlYXRlKHRociwgZW51bV9mbGFncyk7ICAgLyogW3RhcmdldF0gLT4gW2Vu dW1dICovCit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19uZXh0KGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBlbnVtX2luZGV4LCBkdWtfYm9vbF90IGdldF92YWx1ZSkgeworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgZW51 bV9pbmRleCk7CisJZHVrX2R1cCh0aHIsIGVudW1faW5kZXgpOworCXJldHVybiBkdWtfaG9iamVj dF9lbnVtZXJhdG9yX25leHQodGhyLCBnZXRfdmFsdWUpOworfQorCitEVUtfSU5URVJOQUwgdm9p ZCBkdWtfc2VhbF9mcmVlemVfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4 LCBkdWtfYm9vbF90IGlzX2ZyZWV6ZSkgeworCWR1a190dmFsICp0djsKKwlkdWtfaG9iamVjdCAq aDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0diA9IGR1a19yZXF1aXJlX3R2 YWwodGhyLCBvYmpfaWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJLyogU2VhbC9m cmVlemUgYXJlIHF1aXRlIHJhcmUgaW4gcHJhY3RpY2Ugc28gaXQnZCBiZSBuaWNlIHRvIGdldCB0 aGUKKwkgKiBjb3JyZWN0IGJlaGF2aW9yIHNpbXBseSB2aWEgYXV0b21hdGljIHByb21vdGlvbiAo YXQgdGhlIGNvc3Qgb2Ygc29tZQorCSAqIG1lbW9yeSBjaHVybikuICBIb3dldmVyLCB0aGUgcHJv bW90ZWQgb2JqZWN0cyBkb24ndCBiZWhhdmUgdGhlIHNhbWUsCisJICogZS5nLiBwcm9tb3RlZCBs aWdodGZ1bmNzIGFyZSBleHRlbnNpYmxlLgorCSAqLworCisJc3dpdGNoIChEVUtfVFZBTF9HRVRf VEFHKHR2KSkgeworCWNhc2UgRFVLX1RBR19CVUZGRVI6CisJCS8qIFBsYWluIGJ1ZmZlcjogYWxy ZWFkeSBzZWFsZWQsIGJ1dCBub3QgZnJvemVuIChhbmQgY2FuJ3QgYmUgZnJvemVuCisJCSAqIGJl Y2F1c2UgaW5kZXggcHJvcGVydGllcyBjYW4ndCBiZSBtYWRlIG5vbi13cml0YWJsZS4KKwkJICov CisJCWlmIChpc19mcmVlemUpIHsKKwkJCWdvdG8gZmFpbF9jYW5ub3RfZnJlZXplOworCQl9CisJ CWJyZWFrOworCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6CisJCS8qIExpZ2h0ZnVuYzogYWxyZWFk eSBzZWFsZWQgYW5kIGZyb3plbiwgc3VjY2Vzcy4gKi8KKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFH X09CSkVDVDoKKwkJaCA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGgg IT0gTlVMTCk7CisJCWlmIChpc19mcmVlemUgJiYgRFVLX0hPQkpFQ1RfSVNfQlVGT0JKKGgpKSB7 CisJCQkvKiBCdWZmZXIgb2JqZWN0cyBjYW5ub3QgYmUgZnJvemVuIGJlY2F1c2UgdGhlcmUncyBu byBpbnRlcm5hbAorCQkJICogc3VwcG9ydCBmb3IgbWFraW5nIHZpcnR1YWwgYXJyYXkgaW5kaWNl cyBub24td3JpdGFibGUuCisJCQkgKi8KKwkJCURVS19ERChEVUtfRERQUklOVCgiY2Fubm90IGZy ZWV6ZSBhIGJ1ZmZlciBvYmplY3QiKSk7CisJCQlnb3RvIGZhaWxfY2Fubm90X2ZyZWV6ZTsKKwkJ fQorCQlkdWtfaG9iamVjdF9vYmplY3Rfc2VhbF9mcmVlemVfaGVscGVyKHRociwgaCwgaXNfZnJl ZXplKTsKKworCQkvKiBTZWFsZWQgYW5kIGZyb3plbiBvYmplY3RzIGNhbm5vdCBnYWluIGFueSBt b3JlIHByb3BlcnRpZXMsCisJCSAqIHNvIHRoaXMgaXMgYSBnb29kIHRpbWUgdG8gY29tcGFjdCB0 aGVtLgorCQkgKi8KKwkJZHVrX2hvYmplY3RfY29tcGFjdF9wcm9wcyh0aHIsIGgpOworCQlicmVh azsKKwlkZWZhdWx0OgorCQkvKiBFUzIwMTUgU2VjdGlvbnMgMTkuMS4yLjUsIDE5LjEuMi4xNyAq LworCQlicmVhazsKKwl9CisJcmV0dXJuOworCisgZmFpbF9jYW5ub3RfZnJlZXplOgorCURVS19F UlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOyAgLyogWFhYOiBwcm9wZXIgZXJyb3IgbWVzc2Fn ZSAqLworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQg ZHVrX3NlYWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgpIHsKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX3NlYWxfZnJlZXplX3Jhdyh0aHIsIG9ial9pZHgs IDAgLyppc19mcmVlemUqLyk7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19mcmVlemUoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IG9ial9pZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCisJZHVrX3NlYWxfZnJlZXplX3Jhdyh0aHIsIG9ial9pZHgsIDEgLyppc19mcmVl emUqLyk7Cit9CisKKy8qCisgKiAgSGVscGVycyBmb3Igd3JpdGluZyBtdWx0aXBsZSBwcm9wZXJ0 aWVzCisgKi8KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1dF9mdW5jdGlvbl9saXN0KGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4LCBjb25zdCBkdWtfZnVuY3Rpb25fbGlzdF9l bnRyeSAqZnVuY3MpIHsKKwljb25zdCBkdWtfZnVuY3Rpb25fbGlzdF9lbnRyeSAqZW50ID0gZnVu Y3M7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJb2JqX2lkeCA9IGR1a19yZXF1 aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIG9ial9pZHgpOworCWlmIChlbnQgIT0gTlVMTCkgewor CQl3aGlsZSAoZW50LT5rZXkgIT0gTlVMTCkgeworCQkJZHVrX3B1c2hfY19mdW5jdGlvbih0aHIs IGVudC0+dmFsdWUsIGVudC0+bmFyZ3MpOworCQkJZHVrX3B1dF9wcm9wX3N0cmluZyh0aHIsIG9i al9pZHgsIGVudC0+a2V5KTsKKwkJCWVudCsrOworCQl9CisJfQorfQorCitEVUtfRVhURVJOQUwg dm9pZCBkdWtfcHV0X251bWJlcl9saXN0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpf aWR4LCBjb25zdCBkdWtfbnVtYmVyX2xpc3RfZW50cnkgKm51bWJlcnMpIHsKKwljb25zdCBkdWtf bnVtYmVyX2xpc3RfZW50cnkgKmVudCA9IG51bWJlcnM7CisJZHVrX3R2YWwgKnR2OworCisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCW9ial9pZHggPSBkdWtfcmVxdWlyZV9ub3JtYWxp emVfaW5kZXgodGhyLCBvYmpfaWR4KTsKKwlpZiAoZW50ICE9IE5VTEwpIHsKKwkJd2hpbGUgKGVu dC0+a2V5ICE9IE5VTEwpIHsKKwkJCXR2ID0gdGhyLT52YWxzdGFja190b3ArKzsKKwkJCURVS19B U1NFUlQoRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHR2KSk7ICAvKiB2YWx1ZSBzdGFjayBpbml0IHBv bGljeSAqLworCQkJRFVLX1RWQUxfU0VUX05VTUJFUl9DSEtGQVNUX1NMT1codHYsIGVudC0+dmFs dWUpOyAgLyogbm8gbmVlZCBmb3IgZGVjcmVmL2luY3JlZiAqLworCQkJZHVrX3B1dF9wcm9wX3N0 cmluZyh0aHIsIG9ial9pZHgsIGVudC0+a2V5KTsKKwkJCWVudCsrOworCQl9CisJfQorfQorCisv KgorICogIFNob3J0Y3V0IGZvciBhY2Nlc3NpbmcgZ2xvYmFsIG9iamVjdCBwcm9wZXJ0aWVzCisg Ki8KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2dldF9nbG9iYWxfc3RyaW5nKGR1a19o dGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmtleSkgeworCWR1a19ib29sX3QgcmV0OworCisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHRoci0+YnVpbHRpbnNbRFVLX0JJ RFhfR0xPQkFMXSAhPSBOVUxMKTsKKworCS8qIFhYWDogZGlyZWN0IGltcGxlbWVudGF0aW9uICov CisKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwgdGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxd KTsKKwlyZXQgPSBkdWtfZ2V0X3Byb3Bfc3RyaW5nKHRociwgLTEsIGtleSk7CisJZHVrX3JlbW92 ZV9tMih0aHIpOworCXJldHVybiByZXQ7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1 a19nZXRfZ2xvYmFsX2xzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqa2V5LCBk dWtfc2l6ZV90IGtleV9sZW4pIHsKKwlkdWtfYm9vbF90IHJldDsKKworCURVS19BU1NFUlRfQVBJ X0VOVFJZKHRocik7CisJRFVLX0FTU0VSVCh0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF0g IT0gTlVMTCk7CisKKwkvKiBYWFg6IGRpcmVjdCBpbXBsZW1lbnRhdGlvbiAqLworCisJZHVrX3B1 c2hfaG9iamVjdCh0aHIsIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMXSk7CisJcmV0ID0g ZHVrX2dldF9wcm9wX2xzdHJpbmcodGhyLCAtMSwga2V5LCBrZXlfbGVuKTsKKwlkdWtfcmVtb3Zl X20yKHRocik7CisJcmV0dXJuIHJldDsKK30KKworI2lmICFkZWZpbmVkKERVS19VU0VfUFJFRkVS X1NJWkUpCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZ2V0X2dsb2JhbF9saXRlcmFsX3Jh dyhkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICprZXksIGR1a19zaXplX3Qga2V5X2xlbikg eworCWR1a19ib29sX3QgcmV0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtf QVNTRVJUKHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMXSAhPSBOVUxMKTsKKwlEVUtfQVNT RVJUKGtleVtrZXlfbGVuXSA9PSAoY2hhcikgMCk7CisKKwkvKiBYWFg6IGRpcmVjdCBpbXBsZW1l bnRhdGlvbiAqLworCisJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHRoci0+YnVpbHRpbnNbRFVLX0JJ RFhfR0xPQkFMXSk7CisJcmV0ID0gZHVrX2dldF9wcm9wX2xpdGVyYWxfcmF3KHRociwgLTEsIGtl eSwga2V5X2xlbik7CisJZHVrX3JlbW92ZV9tMih0aHIpOworCXJldHVybiByZXQ7Cit9CisjZW5k aWYKKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2dldF9nbG9iYWxfaGVhcHB0cihkdWtf aHRocmVhZCAqdGhyLCB2b2lkICpwdHIpIHsKKwlkdWtfYm9vbF90IHJldDsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVCh0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dM T0JBTF0gIT0gTlVMTCk7CisKKwkvKiBYWFg6IGRpcmVjdCBpbXBsZW1lbnRhdGlvbiAqLworCisJ ZHVrX3B1c2hfaG9iamVjdCh0aHIsIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMXSk7CisJ cmV0ID0gZHVrX2dldF9wcm9wX2hlYXBwdHIodGhyLCAtMSwgcHRyKTsKKwlkdWtfcmVtb3ZlX20y KHRocik7CisJcmV0dXJuIHJldDsKK30KKworCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtf cHV0X2dsb2JhbF9zdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqa2V5KSB7CisJ ZHVrX2Jvb2xfdCByZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NF UlQodGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxdICE9IE5VTEwpOworCisJLyogWFhYOiBk aXJlY3QgaW1wbGVtZW50YXRpb24gKi8KKworCWR1a19wdXNoX2hvYmplY3QodGhyLCB0aHItPmJ1 aWx0aW5zW0RVS19CSURYX0dMT0JBTF0pOworCWR1a19pbnNlcnQodGhyLCAtMik7CisJcmV0ID0g ZHVrX3B1dF9wcm9wX3N0cmluZyh0aHIsIC0yLCBrZXkpOyAgLyogWyAuLi4gZ2xvYmFsIHZhbCBd IC0+IFsgLi4uIGdsb2JhbCBdICovCisJZHVrX3BvcCh0aHIpOworCXJldHVybiByZXQ7Cit9CisK K0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19wdXRfZ2xvYmFsX2xzdHJpbmcoZHVrX2h0aHJl YWQgKnRociwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pIHsKKwlkdWtfYm9v bF90IHJldDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVCh0aHIt PmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF0gIT0gTlVMTCk7CisKKwkvKiBYWFg6IGRpcmVjdCBp bXBsZW1lbnRhdGlvbiAqLworCisJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHRoci0+YnVpbHRpbnNb RFVLX0JJRFhfR0xPQkFMXSk7CisJZHVrX2luc2VydCh0aHIsIC0yKTsKKwlyZXQgPSBkdWtfcHV0 X3Byb3BfbHN0cmluZyh0aHIsIC0yLCBrZXksIGtleV9sZW4pOyAgLyogWyAuLi4gZ2xvYmFsIHZh bCBdIC0+IFsgLi4uIGdsb2JhbCBdICovCisJZHVrX3BvcCh0aHIpOworCXJldHVybiByZXQ7Cit9 CisKKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorRFVLX0VYVEVSTkFMIGR1a19i b29sX3QgZHVrX3B1dF9nbG9iYWxfbGl0ZXJhbF9yYXcoZHVrX2h0aHJlYWQgKnRociwgY29uc3Qg Y2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pIHsKKwlkdWtfYm9vbF90IHJldDsKKworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVCh0aHItPmJ1aWx0aW5zW0RVS19C SURYX0dMT0JBTF0gIT0gTlVMTCk7CisJRFVLX0FTU0VSVChrZXlba2V5X2xlbl0gPT0gKGNoYXIp IDApOworCisJLyogWFhYOiBkaXJlY3QgaW1wbGVtZW50YXRpb24gKi8KKworCWR1a19wdXNoX2hv YmplY3QodGhyLCB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF0pOworCWR1a19pbnNlcnQo dGhyLCAtMik7CisJcmV0ID0gZHVrX3B1dF9wcm9wX2xpdGVyYWxfcmF3KHRociwgLTIsIGtleSwg a2V5X2xlbik7ICAvKiBbIC4uLiBnbG9iYWwgdmFsIF0gLT4gWyAuLi4gZ2xvYmFsIF0gKi8KKwlk dWtfcG9wKHRocik7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitEVUtfRVhURVJOQUwgZHVr X2Jvb2xfdCBkdWtfcHV0X2dsb2JhbF9oZWFwcHRyKGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnB0 cikgeworCWR1a19ib29sX3QgcmV0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlE VUtfQVNTRVJUKHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMXSAhPSBOVUxMKTsKKworCS8q IFhYWDogZGlyZWN0IGltcGxlbWVudGF0aW9uICovCisKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwg dGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxdKTsKKwlkdWtfaW5zZXJ0KHRociwgLTIpOwor CXJldCA9IGR1a19wdXRfcHJvcF9oZWFwcHRyKHRociwgLTIsIHB0cik7ICAvKiBbIC4uLiBnbG9i YWwgdmFsIF0gLT4gWyAuLi4gZ2xvYmFsIF0gKi8KKwlkdWtfcG9wKHRocik7CisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqICBFUzIwMTUgR2V0TWV0aG9kKCkKKyAqLworCitEVUtfSU5URVJOQUwg ZHVrX2Jvb2xfdCBkdWtfZ2V0X21ldGhvZF9zdHJpZHgoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCwgZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHgpIHsKKwkodm9pZCkgZHVrX2dldF9wcm9w X3N0cmlkeCh0aHIsIGlkeCwgc3RyaWR4KTsKKwlpZiAoZHVrX2lzX251bGxfb3JfdW5kZWZpbmVk KHRociwgLTEpKSB7CisJCWR1a19wb3Bfbm9kZWNyZWZfdW5zYWZlKHRocik7CisJCXJldHVybiAw OworCX0KKwlpZiAoIWR1a19pc19jYWxsYWJsZSh0aHIsIC0xKSkgeworCQlEVUtfRVJST1JfVFlQ RSh0aHIsIERVS19TVFJfTk9UX0NBTExBQkxFKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAw Oyk7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogIE9iamVjdCBwcm90b3R5cGUKKyAqLwor CitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZ2V0X3Byb3RvdHlwZShkdWtfaHRocmVhZCAqdGhyLCBk dWtfaWR4X3QgaWR4KSB7CisJZHVrX2hvYmplY3QgKm9iajsKKwlkdWtfaG9iamVjdCAqcHJvdG87 CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJb2JqID0gZHVrX3JlcXVpcmVfaG9i amVjdCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisKKwkvKiBYWFg6IHNo YXJlZCBoZWxwZXIgZm9yIGR1a19wdXNoX2hvYmplY3Rfb3JfdW5kZWZpbmVkKCk/ICovCisJcHJv dG8gPSBEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgb2JqKTsKKwlpZiAocHJv dG8pIHsKKwkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHByb3RvKTsKKwl9IGVsc2UgeworCQlkdWtf cHVzaF91bmRlZmluZWQodGhyKTsKKwl9Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19zZXRf cHJvdG90eXBlKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaG9iamVj dCAqb2JqOworCWR1a19ob2JqZWN0ICpwcm90bzsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwlvYmogPSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgaWR4KTsKKwlEVUtfQVNTRVJU KG9iaiAhPSBOVUxMKTsKKwlkdWtfcmVxdWlyZV90eXBlX21hc2sodGhyLCAtMSwgRFVLX1RZUEVf TUFTS19VTkRFRklORUQgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQ RV9NQVNLX09CSkVDVCk7CisJcHJvdG8gPSBkdWtfZ2V0X2hvYmplY3QodGhyLCAtMSk7CisJLyog cHJvdG8gY2FuIGFsc28gYmUgTlVMTCBoZXJlIChhbGxvd2VkIGV4cGxpY2l0bHkpICovCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfUk9NX09CSkVDVFMpCisJaWYgKERVS19IRUFQSERSX0hBU19SRUFE T05MWSgoZHVrX2hlYXBoZHIgKikgb2JqKSkgeworCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19T VFJfTk9UX0NPTkZJR1VSQUJMRSk7ICAvKiBYWFg6ICJyZWFkIG9ubHkgb2JqZWN0Ij8gKi8KKwkJ RFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0KKyNlbmRpZgorCisJRFVLX0hPQkpFQ1RfU0VU X1BST1RPVFlQRV9VUERSRUYodGhyLCBvYmosIHByb3RvKTsKKworCWR1a19wb3AodGhyKTsKK30K KworLyoKKyAqICBPYmplY3QgZmluYWxpemVyCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9G SU5BTElaRVJfU1VQUE9SVCkKKy8qIFhYWDogdGhlc2UgY291bGQgYmUgaW1wbGVtZW50ZWQgYXMg bWFjcm9zIGNhbGxpbmcgYW4gaW50ZXJuYWwgZnVuY3Rpb24KKyAqIGRpcmVjdGx5LgorICogWFhY OiBzYW1lIGlzc3VlIGFzIHdpdGggRHVrdGFwZS5maW46IHRoZXJlJ3Mgbm8gd2F5IHRvIGRlbGV0 ZSB0aGUgcHJvcGVydHkKKyAqIG5vdyAoanVzdCBzZXQgaXQgdG8gdW5kZWZpbmVkKS4KKyAqLwor RFVLX0VYVEVSTkFMIHZvaWQgZHVrX2dldF9maW5hbGl6ZXIoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlkdWtfZ2V0X3By b3Bfc3RyaWR4KHRociwgaWR4LCBEVUtfU1RSSURYX0lOVF9GSU5BTElaRVIpOworfQorCitEVUtf RVhURVJOQUwgdm9pZCBkdWtfc2V0X2ZpbmFsaXplcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4 X3QgaWR4KSB7CisJZHVrX2hvYmplY3QgKmg7CisJZHVrX2Jvb2xfdCBjYWxsYWJsZTsKKworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwloID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIs IGlkeCk7ICAvKiBHZXQgYmVmb3JlICdwdXQnIHNvIHRoYXQgJ2lkeCcgaXMgY29ycmVjdC4gKi8K KwljYWxsYWJsZSA9IGR1a19pc19jYWxsYWJsZSh0aHIsIC0xKTsKKwlkdWtfcHV0X3Byb3Bfc3Ry aWR4KHRociwgaWR4LCBEVUtfU1RSSURYX0lOVF9GSU5BTElaRVIpOworCisJLyogSW4gYWRkaXRp b24gdG8gc2V0dGluZyB0aGUgZmluYWxpemVyIHByb3BlcnR5LCBrZWVwIGEgImhhdmUKKwkgKiBm aW5hbGl6ZXIiIGZsYWcgaW4gZHVrX2hvYmplY3QgaW4gc3luYyBzbyB0aGF0IHJlZnplcm8gY2Fu IGRvCisJICogYSB2ZXJ5IHF1aWNrIGZpbmFsaXplciBjaGVjayBieSB3YWxraW5nIHRoZSBwcm90 b3R5cGUgY2hhaW4KKwkgKiBhbmQgY2hlY2tpbmcgdGhlIGZsYWcgYWxvbmUuICAoTm90ZSB0aGF0 IHRoaXMgbWVhbnMgdGhhdCBqdXN0CisJICogc2V0dGluZyBfRmluYWxpemVyIG9uIGFuIG9iamVj dCB3b24ndCBhZmZlY3QgZmluYWxpemVyIGNoZWNrcy4pCisJICoKKwkgKiBOT1RFOiBpZiB0aGUg YXJndW1lbnQgaXMgYSBQcm94eSBvYmplY3QsIHRoaXMgZmxhZyB3aWxsIGJlIHNldAorCSAqIG9u IHRoZSBQcm94eSwgbm90IHRoZSB0YXJnZXQuICBBcyBhIHJlc3VsdCwgdGhlIHRhcmdldCB3b24n dCBnZXQKKwkgKiBhIGZpbmFsaXplciBmbGFnIGFuZCB0aGUgUHJveHkgYWxzbyB3b24ndCBiZSBm aW5hbGl6ZWQgYXMgdGhlcmUncworCSAqIGFuIGV4cGxpY2l0IFByb3h5IGNoZWNrIGluIGZpbmFs aXphdGlvbiBub3cuCisJICovCisJaWYgKGNhbGxhYmxlKSB7CisJCURVS19IT0JKRUNUX1NFVF9I QVZFX0ZJTkFMSVpFUihoKTsKKwl9IGVsc2UgeworCQlEVUtfSE9CSkVDVF9DTEVBUl9IQVZFX0ZJ TkFMSVpFUihoKTsKKwl9Cit9CisjZWxzZSAgLyogRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCAq LworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2dldF9maW5hbGl6ZXIoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX1VOUkVG KGlkeCk7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJl dHVybjspOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfc2V0X2ZpbmFsaXplcihkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KwlEVUtfVU5SRUYoaWR4KTsKKwlEVUtfRVJST1JfVU5TVVBQT1JURUQodGhyKTsKKwlEVUtfV09f Tk9SRVRVUk4ocmV0dXJuOyk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRklOQUxJWkVSX1NVUFBP UlQgKi8KKy8qCisgKiAgUmFuZG9tIG51bWJlcnMKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50 ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKK0RVS19FWFRFUk5BTCBkdWtfZG91Ymxl X3QgZHVrX3JhbmRvbShkdWtfaHRocmVhZCAqdGhyKSB7CisJcmV0dXJuIChkdWtfZG91YmxlX3Qp IERVS19VVElMX0dFVF9SQU5ET01fRE9VQkxFKHRocik7Cit9CisvKgorICogIEFQSSBjYWxscyBy ZWxhdGVkIHRvIGdlbmVyYWwgdmFsdWUgc3RhY2sgbWFuaXB1bGF0aW9uOiByZXNpemluZyB0aGUg dmFsdWUKKyAqICBzdGFjaywgcHVzaGluZyBhbmQgcG9wcGluZyB2YWx1ZXMsIHR5cGUgY2hlY2tp bmcgYW5kIHJlYWRpbmcgdmFsdWVzLAorICogIGNvZXJjaW5nIHZhbHVlcywgZXRjLgorICoKKyAq ICBBbHNvIGNvbnRhaW5zIGludGVybmFsIGZ1bmN0aW9ucyAoc3VjaCBhcyBkdWtfZ2V0X3R2YWwo KSksIGRlZmluZWQKKyAqICBpbiBkdWtfYXBpX2ludGVybmFsLmgsIHdpdGggc2VtYW50aWNzIHNp bWlsYXIgdG8gdGhlIHB1YmxpYyBBUEkuCisgKi8KKworLyogWFhYOiByZXBldGl0aW9uIG9mIHN0 YWNrIHByZS1jaGVja3MgLT4gaGVscGVyIG9yIG1hY3JvIG9yIGlubGluZSAqLworLyogWFhYOiBz aGFyZWQgYXBpIGVycm9yIHN0cmluZ3MsIGFuZCBwZXJoYXBzIGV2ZW4gdGhyb3cgY29kZSBmb3Ig cmFyZSBjYXNlcz8gKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBp bmNsdWRlZCAqLworCisvKgorICogIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KKworRFVLX0xP Q0FMX0RFQ0wgZHVrX2lkeF90IGR1a19fcHVzaF9jX2Z1bmN0aW9uX3JhdyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfY19mdW5jdGlvbiBmdW5jLCBkdWtfaWR4X3QgbmFyZ3MsIGR1a191aW50X3QgZmxh Z3MsIGR1a19zbWFsbF91aW50X3QgcHJvdG9fYmlkeCk7CisKKy8qCisgKiAgR2xvYmFsIHN0YXRl IGZvciB3b3JraW5nIGFyb3VuZCBtaXNzaW5nIHZhcmlhZGljIG1hY3JvcworICovCisKKyNpZiAh ZGVmaW5lZChEVUtfVVNFX1ZBUklBRElDX01BQ1JPUykKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFy ICpkdWtfYXBpX2dsb2JhbF9maWxlbmFtZSA9IE5VTEw7CitEVUtfRVhURVJOQUwgZHVrX2ludF90 IGR1a19hcGlfZ2xvYmFsX2xpbmUgPSAwOworI2VuZGlmCisKKy8qCisgKiAgTWlzYyBoZWxwZXJz CisgKi8KKworRFVLX0xPQ0FMIGNvbnN0IGNoYXIgKiBjb25zdCBkdWtfX3N5bWJvbF90eXBlX3N0 cmluZ3NbNF0gPSB7CisJImhpZGRlbiIsICJnbG9iYWwiLCAibG9jYWwiLCAid2VsbGtub3duIgor fTsKKworI2lmICFkZWZpbmVkKERVS19VU0VfUEFDS0VEX1RWQUwpCitEVUtfTE9DQUwgY29uc3Qg ZHVrX3VpbnRfdCBkdWtfX3R5cGVfZnJvbV90YWdbXSA9IHsKKwlEVUtfVFlQRV9OVU1CRVIsCisJ RFVLX1RZUEVfTlVNQkVSLCAgLyogZmFzdGludCAqLworCURVS19UWVBFX1VOREVGSU5FRCwKKwlE VUtfVFlQRV9OVUxMLAorCURVS19UWVBFX0JPT0xFQU4sCisJRFVLX1RZUEVfUE9JTlRFUiwKKwlE VUtfVFlQRV9MSUdIVEZVTkMsCisJRFVLX1RZUEVfTk9ORSwKKwlEVUtfVFlQRV9TVFJJTkcsCisJ RFVLX1RZUEVfT0JKRUNULAorCURVS19UWVBFX0JVRkZFUiwKK307CitEVUtfTE9DQUwgY29uc3Qg ZHVrX3VpbnRfdCBkdWtfX3R5cGVfbWFza19mcm9tX3RhZ1tdID0geworCURVS19UWVBFX01BU0tf TlVNQkVSLAorCURVS19UWVBFX01BU0tfTlVNQkVSLCAgLyogZmFzdGludCAqLworCURVS19UWVBF X01BU0tfVU5ERUZJTkVELAorCURVS19UWVBFX01BU0tfTlVMTCwKKwlEVUtfVFlQRV9NQVNLX0JP T0xFQU4sCisJRFVLX1RZUEVfTUFTS19QT0lOVEVSLAorCURVS19UWVBFX01BU0tfTElHSFRGVU5D LAorCURVS19UWVBFX01BU0tfTk9ORSwKKwlEVUtfVFlQRV9NQVNLX1NUUklORywKKwlEVUtfVFlQ RV9NQVNLX09CSkVDVCwKKwlEVUtfVFlQRV9NQVNLX0JVRkZFUiwKK307CisjZW5kaWYgIC8qICFE VUtfVVNFX1BBQ0tFRF9UVkFMICovCisKKy8qIEFzc2VydCB0aGF0IHRoZXJlJ3Mgcm9vbSBmb3Ig b25lIHZhbHVlLiAqLworI2RlZmluZSBEVUtfX0FTU0VSVF9TUEFDRSgpIGRvIHsgXAorCQlEVUtf QVNTRVJUKCEodGhyLT52YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19lbmQpKTsgXAorCX0g d2hpbGUgKDApCisKKy8qIENoZWNrIHRoYXQgdGhlcmUncyByb29tIHRvIHB1c2ggb25lIHZhbHVl LiAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9WQUxTVEFDS19VTlNBRkUpCisvKiBGYXN0ZXIgYnV0 IHZhbHVlIHN0YWNrIG92ZXJydW5zIGFyZSBtZW1vcnkgdW5zYWZlLiAqLworI2RlZmluZSBEVUtf X0NIRUNLX1NQQUNFKCkgRFVLX19BU1NFUlRfU1BBQ0UoKQorI2Vsc2UKKyNkZWZpbmUgRFVLX19D SEVDS19TUEFDRSgpIGRvIHsgXAorCQlpZiAoRFVLX1VOTElLRUxZKHRoci0+dmFsc3RhY2tfdG9w ID49IHRoci0+dmFsc3RhY2tfZW5kKSkgeyBcCisJCQlEVUtfRVJST1JfUkFOR0VfUFVTSF9CRVlP TkQodGhyKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKK0RVS19MT0NBTCBkdWtf c21hbGxfdWludF90IGR1a19fZ2V0X3N5bWJvbF90eXBlKGR1a19oc3RyaW5nICpoKSB7CisJY29u c3QgZHVrX3VpbnQ4X3QgKmRhdGE7CisJZHVrX3NpemVfdCBsZW47CisKKwlEVUtfQVNTRVJUKGgg IT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSFNUUklOR19IQVNfU1lNQk9MKGgpKTsKKwlEVUtf QVNTRVJUKERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpID49IDEpOyAgLyogYWx3YXlzIHRydWUs IHN5bWJvbCBwcmVmaXggKi8KKworCWRhdGEgPSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hT VFJJTkdfR0VUX0RBVEEoaCk7CisJbGVuID0gRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCk7CisJ RFVLX0FTU0VSVChsZW4gPj0gMSk7CisKKwkvKiBYWFg6IGRpZmZlcmVudGlhdGUgYmV0d2VlbiAw eDgyIGFuZCAweGZmIChoaWRkZW4gdnMuIGludGVybmFsPyk/ICovCisKKwlpZiAoZGF0YVswXSA9 PSAweGZmVSkgeworCQlyZXR1cm4gRFVLX1NZTUJPTF9UWVBFX0hJRERFTjsKKwl9IGVsc2UgaWYg KGRhdGFbMF0gPT0gMHg4MlUpIHsKKwkJcmV0dXJuIERVS19TWU1CT0xfVFlQRV9ISURERU47CisJ fSBlbHNlIGlmIChkYXRhWzBdID09IDB4ODBVKSB7CisJCXJldHVybiBEVUtfU1lNQk9MX1RZUEVf R0xPQkFMOworCX0gZWxzZSBpZiAoZGF0YVtsZW4gLSAxXSAhPSAweGZmVSkgeworCQlyZXR1cm4g RFVLX1NZTUJPTF9UWVBFX0xPQ0FMOworCX0gZWxzZSB7CisJCXJldHVybiBEVUtfU1lNQk9MX1RZ UEVfV0VMTEtOT1dOOworCX0KK30KKworRFVLX0xPQ0FMIGNvbnN0IGNoYXIgKmR1a19fZ2V0X3N5 bWJvbF90eXBlX3N0cmluZyhkdWtfaHN0cmluZyAqaCkgeworCWR1a19zbWFsbF91aW50X3QgaWR4 OworCWlkeCA9IGR1a19fZ2V0X3N5bWJvbF90eXBlKGgpOworCURVS19BU1NFUlQoaWR4IDwgc2l6 ZW9mKGR1a19fc3ltYm9sX3R5cGVfc3RyaW5ncykpOworCXJldHVybiBkdWtfX3N5bWJvbF90eXBl X3N0cmluZ3NbaWR4XTsKK30KKworRFVLX0xPQ0FMX0RFQ0wgZHVrX2hlYXBoZHIgKmR1a19fZ2V0 X3RhZ2dlZF9oZWFwaGRyX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtf dWludF90IHRhZyk7CisKK0RVS19MT0NBTCBkdWtfaW50X3QgZHVrX19hcGlfY29lcmNlX2QyaShk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfaW50X3QgZGVmX3ZhbHVlLCBkdWtf Ym9vbF90IHJlcXVpcmUpIHsKKwlkdWtfdHZhbCAqdHY7CisJZHVrX3NtYWxsX2ludF90IGM7CisJ ZHVrX2RvdWJsZV90IGQ7CisKKwl0diA9IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgp OworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisKKwkvKgorCSAqICBTcGVjaWFsIGNhc2VzIGxp a2UgTmFOIGFuZCArLy0gSW5maW5pdHkgYXJlIGhhbmRsZWQgZXhwbGljaXRseQorCSAqICBiZWNh dXNlIGEgcGxhaW4gQyBjb2VyY2lvbiBmcm9tIGRvdWJsZSB0byBpbnQgaGFuZGxlcyB0aGVzZSBj YXNlcworCSAqICBpbiB1bmRlc2lyYWJsZSB3YXlzLiAgRm9yIGluc3RhbmNlLCBOYU4gbWF5IGNv ZXJjZSB0byBJTlRfTUlOCisJICogIChub3QgemVybyksIGFuZCBJTlRfTUFYICsgMSBtYXkgY29l cmNlIHRvIElOVF9NSU4gKG5vdCBJTlRfTUFYKS4KKwkgKgorCSAqICBUaGlzIGRvdWJsZS10by1p bnQgY29lcmNpb24gZGlmZmVycyBmcm9tIFRvSW50ZWdlcigpIGJlY2F1c2UgaXQKKwkgKiAgaGFz IGEgZmluaXRlIHJhbmdlIChUb0ludGVnZXIoKSBhbGxvd3MgZS5nLiArLy0gSW5maW5pdHkpLiAg SXQKKwkgKiAgYWxzbyBkaWZmZXJzIGZyb20gVG9JbnQzMigpIGJlY2F1c2UgdGhlIElOVF9NSU4v SU5UX01BWCBjbGFtcGluZworCSAqICBkZXBlbmRzIG9uIHRoZSBzaXplIG9mIHRoZSBpbnQgdHlw ZSBvbiB0aGUgcGxhdGZvcm0uICBJbiBwYXJ0aWN1bGFyLAorCSAqICBvbiBwbGF0Zm9ybXMgd2l0 aCBhIDY0LWJpdCBpbnQgdHlwZSwgdGhlIGZ1bGwgcmFuZ2UgaXMgYWxsb3dlZC4KKwkgKi8KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCWlmIChEVUtfVFZBTF9JU19GQVNUSU5UKHR2 KSkgeworCQlkdWtfaW50NjRfdCB0ID0gRFVLX1RWQUxfR0VUX0ZBU1RJTlQodHYpOworI2lmIChE VUtfSU5UX01BWCA8PSAweDdmZmZmZmZmTCkKKwkJLyogQ2xhbXBpbmcgb25seSBuZWNlc3Nhcnkg Zm9yIDMyLWJpdCBpbnRzLiAqLworCQlpZiAodCA8IERVS19JTlRfTUlOKSB7CisJCQl0ID0gRFVL X0lOVF9NSU47CisJCX0gZWxzZSBpZiAodCA+IERVS19JTlRfTUFYKSB7CisJCQl0ID0gRFVLX0lO VF9NQVg7CisJCX0KKyNlbmRpZgorCQlyZXR1cm4gKGR1a19pbnRfdCkgdDsKKwl9CisjZW5kaWYK KworCWlmIChEVUtfVFZBTF9JU19OVU1CRVIodHYpKSB7CisJCWQgPSBEVUtfVFZBTF9HRVRfTlVN QkVSKHR2KTsKKwkJYyA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKGQpOworCQlp ZiAoYyA9PSBEVUtfRlBfTkFOKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChkIDwgKGR1 a19kb3VibGVfdCkgRFVLX0lOVF9NSU4pIHsKKwkJCS8qIGNvdmVycyAtSW5maW5pdHkgKi8KKwkJ CXJldHVybiBEVUtfSU5UX01JTjsKKwkJfSBlbHNlIGlmIChkID4gKGR1a19kb3VibGVfdCkgRFVL X0lOVF9NQVgpIHsKKwkJCS8qIGNvdmVycyArSW5maW5pdHkgKi8KKwkJCXJldHVybiBEVUtfSU5U X01BWDsKKwkJfSBlbHNlIHsKKwkJCS8qIGNvZXJjZSB0b3dhcmRzIHplcm8gKi8KKwkJCXJldHVy biAoZHVrX2ludF90KSBkOworCQl9CisJfQorCisJaWYgKHJlcXVpcmUpIHsKKwkJRFVLX0VSUk9S X1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgIm51bWJlciIsIERVS19TVFJfTk9UX05VTUJF Uik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKworCXJldHVybiBkZWZfdmFs dWU7Cit9CisKK0RVS19MT0NBTCBkdWtfdWludF90IGR1a19fYXBpX2NvZXJjZV9kMnVpKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a191aW50X3QgZGVmX3ZhbHVlLCBkdWtfYm9v bF90IHJlcXVpcmUpIHsKKwlkdWtfdHZhbCAqdHY7CisJZHVrX3NtYWxsX2ludF90IGM7CisJZHVr X2RvdWJsZV90IGQ7CisKKwkvKiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgdW5zaWduZWQgaW50IHJh bmdlLiAqLworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwgaWR4KTsKKwlEVUtf QVNTRVJUKHR2ICE9IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJaWYg KERVS19UVkFMX0lTX0ZBU1RJTlQodHYpKSB7CisJCWR1a19pbnQ2NF90IHQgPSBEVUtfVFZBTF9H RVRfRkFTVElOVCh0dik7CisJCWlmICh0IDwgMCkgeworCQkJdCA9IDA7CisJCX0KKyNpZiAoRFVL X1VJTlRfTUFYIDw9IDB4ZmZmZmZmZmZVTCkKKwkJLyogQ2xhbXBpbmcgb25seSBuZWNlc3Nhcnkg Zm9yIDMyLWJpdCBpbnRzLiAqLworCQllbHNlIGlmICh0ID4gRFVLX1VJTlRfTUFYKSB7CisJCQl0 ID0gRFVLX1VJTlRfTUFYOworCQl9CisjZW5kaWYKKwkJcmV0dXJuIChkdWtfdWludF90KSB0Owor CX0KKyNlbmRpZgorCisJaWYgKERVS19UVkFMX0lTX05VTUJFUih0dikpIHsKKwkJZCA9IERVS19U VkFMX0dFVF9OVU1CRVIodHYpOworCQljID0gKGR1a19zbWFsbF9pbnRfdCkgRFVLX0ZQQ0xBU1NJ RlkoZCk7CisJCWlmIChjID09IERVS19GUF9OQU4pIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2Ug aWYgKGQgPCAwLjApIHsKKwkJCS8qIGNvdmVycyAtSW5maW5pdHkgKi8KKwkJCXJldHVybiAoZHVr X3VpbnRfdCkgMDsKKwkJfSBlbHNlIGlmIChkID4gKGR1a19kb3VibGVfdCkgRFVLX1VJTlRfTUFY KSB7CisJCQkvKiBjb3ZlcnMgK0luZmluaXR5ICovCisJCQlyZXR1cm4gKGR1a191aW50X3QpIERV S19VSU5UX01BWDsKKwkJfSBlbHNlIHsKKwkJCS8qIGNvZXJjZSB0b3dhcmRzIHplcm8gKi8KKwkJ CXJldHVybiAoZHVrX3VpbnRfdCkgZDsKKwkJfQorCX0KKworCWlmIChyZXF1aXJlKSB7CisJCURV S19FUlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgsICJudW1iZXIiLCBEVUtfU1RSX05P VF9OVU1CRVIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwl9CisKKwlyZXR1cm4g ZGVmX3ZhbHVlOworfQorCisvKgorICogIFN0YWNrIGluZGV4IHZhbGlkYXRpb24vbm9ybWFsaXph dGlvbiBhbmQgZ2V0dGluZyBhIHN0YWNrIGR1a190dmFsIHB0ci4KKyAqCisgKiAgVGhlc2UgYXJl IGNhbGxlZCBieSBtYW55IEFQSSBlbnRyeXBvaW50cyBzbyB0aGUgaW1wbGVtZW50YXRpb25zIG11 c3QgYmUKKyAqICBmYXN0IGFuZCAiaW5saW5lZCIuCisgKgorICogIFRoZXJlJ3Mgc29tZSByZXBl dGl0aW9uIGJlY2F1c2Ugb2YgdGhpczsga2VlcCB0aGUgZnVuY3Rpb25zIGluIHN5bmMuCisgKi8K KworRFVLX0VYVEVSTkFMIGR1a19pZHhfdCBkdWtfbm9ybWFsaXplX2luZGV4KGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdWlkeF90IHZzX3NpemU7CisJZHVrX3VpZHhf dCB1aWR4OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKERVS19J TlZBTElEX0lOREVYIDwgMCk7CisKKwkvKiBDYXJlIG11c3QgYmUgdGFrZW4gdG8gYXZvaWQgcG9p bnRlciB3cmFwcGluZyBpbiB0aGUgaW5kZXgKKwkgKiB2YWxpZGF0aW9uLiAgRm9yIGluc3RhbmNl LCBvbiBhIDMyLWJpdCBwbGF0Zm9ybSB3aXRoIDgtYnl0ZQorCSAqIGR1a190dmFsIHRoZSBpbmRl eCAweDIwMDAwMDAwVUwgd291bGQgd3JhcCB0aGUgbWVtb3J5IHNwYWNlCisJICogb25jZS4KKwkg Ki8KKworCS8qIEFzc3VtZSB2YWx1ZSBzdGFjayBzaXplcyAoaW4gZWxlbWVudHMpIGZpdHMgaW50 byBkdWtfaWR4X3QuICovCisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+PSB0aHItPnZh bHN0YWNrX2JvdHRvbSk7CisJdnNfc2l6ZSA9IChkdWtfdWlkeF90KSAodGhyLT52YWxzdGFja190 b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJRFVLX0FTU0VSVF9ESVNBQkxFKHZzX3NpemUg Pj0gMCk7ICAvKiB1bnNpZ25lZCAqLworCisJaWYgKGlkeCA8IDApIHsKKwkJdWlkeCA9IHZzX3Np emUgKyAoZHVrX3VpZHhfdCkgaWR4OworCX0gZWxzZSB7CisJCS8qIHNpbmNlIGluZGV4IG5vbi1u ZWdhdGl2ZSAqLworCQlEVUtfQVNTRVJUKGlkeCAhPSBEVUtfSU5WQUxJRF9JTkRFWCk7CisJCXVp ZHggPSAoZHVrX3VpZHhfdCkgaWR4OworCX0KKworCS8qIERVS19JTlZBTElEX0lOREVYIHdvbid0 IGJlIGFjY2VwdGVkIGFzIGEgdmFsaWQgaW5kZXguICovCisJRFVLX0FTU0VSVCh2c19zaXplICsg KGR1a191aWR4X3QpIERVS19JTlZBTElEX0lOREVYID49IHZzX3NpemUpOworCisJaWYgKERVS19M SUtFTFkodWlkeCA8IHZzX3NpemUpKSB7CisJCXJldHVybiAoZHVrX2lkeF90KSB1aWR4OworCX0K KwlyZXR1cm4gRFVLX0lOVkFMSURfSU5ERVg7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaWR4X3Qg ZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpIHsKKwlkdWtfdWlkeF90IHZzX3NpemU7CisJZHVrX3VpZHhfdCB1aWR4OworCisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKERVS19JTlZBTElEX0lOREVYIDwgMCk7 CisKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfdG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9t KTsKKwl2c19zaXplID0gKGR1a191aWR4X3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFs c3RhY2tfYm90dG9tKTsKKwlEVUtfQVNTRVJUX0RJU0FCTEUodnNfc2l6ZSA+PSAwKTsgIC8qIHVu c2lnbmVkICovCisKKwlpZiAoaWR4IDwgMCkgeworCQl1aWR4ID0gdnNfc2l6ZSArIChkdWtfdWlk eF90KSBpZHg7CisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVChpZHggIT0gRFVLX0lOVkFMSURfSU5E RVgpOworCQl1aWR4ID0gKGR1a191aWR4X3QpIGlkeDsKKwl9CisKKwkvKiBEVUtfSU5WQUxJRF9J TkRFWCB3b24ndCBiZSBhY2NlcHRlZCBhcyBhIHZhbGlkIGluZGV4LiAqLworCURVS19BU1NFUlQo dnNfc2l6ZSArIChkdWtfdWlkeF90KSBEVUtfSU5WQUxJRF9JTkRFWCA+PSB2c19zaXplKTsKKwor CWlmIChEVUtfTElLRUxZKHVpZHggPCB2c19zaXplKSkgeworCQlyZXR1cm4gKGR1a19pZHhfdCkg dWlkeDsKKwl9CisJRFVLX0VSUk9SX1JBTkdFX0lOREVYKHRociwgaWR4KTsKKwlEVUtfV09fTk9S RVRVUk4ocmV0dXJuIDA7KTsKK30KKworRFVLX0lOVEVSTkFMIGR1a190dmFsICpkdWtfZ2V0X3R2 YWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a191aWR4X3QgdnNfc2l6 ZTsKKwlkdWtfdWlkeF90IHVpZHg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURV S19BU1NFUlQoRFVLX0lOVkFMSURfSU5ERVggPCAwKTsKKworCURVS19BU1NFUlQodGhyLT52YWxz dGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCXZzX3NpemUgPSAoZHVrX3VpZHhf dCkgKHRoci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NF UlRfRElTQUJMRSh2c19zaXplID49IDApOyAgLyogdW5zaWduZWQgKi8KKworCWlmIChpZHggPCAw KSB7CisJCXVpZHggPSB2c19zaXplICsgKGR1a191aWR4X3QpIGlkeDsKKwl9IGVsc2UgeworCQlE VUtfQVNTRVJUKGlkeCAhPSBEVUtfSU5WQUxJRF9JTkRFWCk7CisJCXVpZHggPSAoZHVrX3VpZHhf dCkgaWR4OworCX0KKworCS8qIERVS19JTlZBTElEX0lOREVYIHdvbid0IGJlIGFjY2VwdGVkIGFz IGEgdmFsaWQgaW5kZXguICovCisJRFVLX0FTU0VSVCh2c19zaXplICsgKGR1a191aWR4X3QpIERV S19JTlZBTElEX0lOREVYID49IHZzX3NpemUpOworCisJaWYgKERVS19MSUtFTFkodWlkeCA8IHZz X3NpemUpKSB7CisJCXJldHVybiB0aHItPnZhbHN0YWNrX2JvdHRvbSArIHVpZHg7CisJfQorCXJl dHVybiBOVUxMOworfQorCisvKiBWYXJpYW50IG9mIGR1a19nZXRfdHZhbCgpIHdoaWNoIGlzIGd1 YXJhbnRlZWQgdG8gcmV0dXJuIGEgdmFsaWQgZHVrX3R2YWwKKyAqIHBvaW50ZXIuICBXaGVuIGR1 a19nZXRfdHZhbCgpIHdvdWxkIHJldHVybiBOVUxMLCB0aGlzIHZhcmlhbnQgcmV0dXJucyBhCisg KiBwb2ludGVyIHRvIGEgZHVrX3R2YWwgd2l0aCB0YWcgRFVLX1RBR19VTlVTRUQuICBUaGlzIGFs bG93cyB0aGUgY2FsbCBzaXRlCisgKiB0byBhdm9pZCBhbiB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNr IHdoaWNoIHNvbWV0aW1lcyBsZWFkcyB0byBiZXR0ZXIgY29kZS4KKyAqIFRoZSByZXR1cm4gZHVr X3R2YWwgaXMgcmVhZCBvbmx5IChhdCBsZWFzdCBmb3IgdGhlIFVOVVNFRCB2YWx1ZSkuCisgKi8K K0RVS19MT0NBTCBjb25zdCBkdWtfdHZhbF91bnVzZWQgZHVrX19jb25zdF90dmFsX3VudXNlZCA9 IERVS19UVkFMX1VOVVNFRF9JTklUSUFMSVpFUigpOworCitEVUtfSU5URVJOQUwgZHVrX3R2YWwg KmR1a19nZXRfdHZhbF9vcl91bnVzZWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkg eworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0diA9 IGR1a19nZXRfdHZhbCh0aHIsIGlkeCk7CisJaWYgKHR2ICE9IE5VTEwpIHsKKwkJcmV0dXJuIHR2 OworCX0KKwlyZXR1cm4gKGR1a190dmFsICopIERVS19MT1NFX0NPTlNUKCZkdWtfX2NvbnN0X3R2 YWxfdW51c2VkKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a190dmFsICpkdWtfcmVxdWlyZV90dmFs KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdWlkeF90IHZzX3NpemU7 CisJZHVrX3VpZHhfdCB1aWR4OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtf QVNTRVJUKERVS19JTlZBTElEX0lOREVYIDwgMCk7CisKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3Rh Y2tfdG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwl2c19zaXplID0gKGR1a191aWR4X3Qp ICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwlEVUtfQVNTRVJU X0RJU0FCTEUodnNfc2l6ZSA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisKKwkvKiBVc2UgdW5zaWdu ZWQgYXJpdGhtZXRpYyB0byBvcHRpbWl6ZSBjb21wYXJpc29uLiAqLworCWlmIChpZHggPCAwKSB7 CisJCXVpZHggPSB2c19zaXplICsgKGR1a191aWR4X3QpIGlkeDsKKwl9IGVsc2UgeworCQlEVUtf QVNTRVJUKGlkeCAhPSBEVUtfSU5WQUxJRF9JTkRFWCk7CisJCXVpZHggPSAoZHVrX3VpZHhfdCkg aWR4OworCX0KKworCS8qIERVS19JTlZBTElEX0lOREVYIHdvbid0IGJlIGFjY2VwdGVkIGFzIGEg dmFsaWQgaW5kZXguICovCisJRFVLX0FTU0VSVCh2c19zaXplICsgKGR1a191aWR4X3QpIERVS19J TlZBTElEX0lOREVYID49IHZzX3NpemUpOworCisJaWYgKERVS19MSUtFTFkodWlkeCA8IHZzX3Np emUpKSB7CisJCXJldHVybiB0aHItPnZhbHN0YWNrX2JvdHRvbSArIHVpZHg7CisJfQorCURVS19F UlJPUl9SQU5HRV9JTkRFWCh0aHIsIGlkeCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybiBOVUxM Oyk7Cit9CisKKy8qIE5vbi1jcml0aWNhbC4gKi8KK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1 a19pc192YWxpZF9pbmRleChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKERVS19JTlZBTElEX0lOREVYIDwg MCk7CisKKwlyZXR1cm4gKGR1a19ub3JtYWxpemVfaW5kZXgodGhyLCBpZHgpID49IDApOworfQor CisvKiBOb24tY3JpdGljYWwuICovCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcmVxdWlyZV92YWxp ZF9pbmRleChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKERVS19JTlZBTElEX0lOREVYIDwgMCk7CisKKwlp ZiAoRFVLX1VOTElLRUxZKGR1a19ub3JtYWxpemVfaW5kZXgodGhyLCBpZHgpIDwgMCkpIHsKKwkJ RFVLX0VSUk9SX1JBTkdFX0lOREVYKHRociwgaWR4KTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVy bjspOworCX0KK30KKworLyoKKyAqICBWYWx1ZSBzdGFjayB0b3AgaGFuZGxpbmcKKyAqLworCitE VUtfRVhURVJOQUwgZHVrX2lkeF90IGR1a19nZXRfdG9wKGR1a19odGhyZWFkICp0aHIpIHsKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIChkdWtfaWR4X3QpICh0aHItPnZh bHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKTsKK30KKworLyogSW50ZXJuYWwgaGVs cGVyIHRvIGdldCBjdXJyZW50IHRvcCBidXQgdG8gcmVxdWlyZSBhIG1pbmltdW0gdG9wIHZhbHVl CisgKiAoVHlwZUVycm9yIGlmIG5vdCBtZXQpLgorICovCitEVUtfSU5URVJOQUwgZHVrX2lkeF90 IGR1a19nZXRfdG9wX3JlcXVpcmVfbWluKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBtaW5f dG9wKSB7CisJZHVrX2lkeF90IHJldDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisK KwlyZXQgPSAoZHVrX2lkeF90KSAodGhyLT52YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrX2Jv dHRvbSk7CisJaWYgKERVS19VTkxJS0VMWShyZXQgPCBtaW5fdG9wKSkgeworCQlEVUtfRVJST1Jf VFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJ fQorCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCBzdGFjayB0b3Agd2l0aGluIGN1cnJlbnRseSBh bGxvY2F0ZWQgcmFuZ2UsIGJ1dCBkb24ndCByZWFsbG9jYXRlLgorICogVGhpcyBpcyBwZXJmb3Jt YW5jZSBjcml0aWNhbCBlc3BlY2lhbGx5IGZvciBjYWxsIGhhbmRsaW5nLCBzbyB3aGVuZXZlcgor ICogY2hhbmdpbmcsIHByb2ZpbGUgYW5kIGxvb2sgYXQgZ2VuZXJhdGVkIGNvZGUuCisgKi8KK0RV S19FWFRFUk5BTCB2b2lkIGR1a19zZXRfdG9wKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpIHsKKwlkdWtfdWlkeF90IHZzX3NpemU7CisJZHVrX3VpZHhfdCB2c19saW1pdDsKKwlkdWtf dWlkeF90IHVpZHg7CisJZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhy KTsKKwlEVUtfQVNTRVJUKERVS19JTlZBTElEX0lOREVYIDwgMCk7CisKKwlEVUtfQVNTRVJUKHRo ci0+dmFsc3RhY2tfdG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwlEVUtfQVNTRVJUKHRo ci0+dmFsc3RhY2tfZW5kID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwl2c19zaXplID0gKGR1 a191aWR4X3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwl2 c19saW1pdCA9IChkdWtfdWlkeF90KSAodGhyLT52YWxzdGFja19lbmQgLSB0aHItPnZhbHN0YWNr X2JvdHRvbSk7CisKKwlpZiAoaWR4IDwgMCkgeworCQkvKiBOZWdhdGl2ZSBpbmRpY2VzIGFyZSBh bHdheXMgd2l0aGluIGFsbG9jYXRlZCBzdGFjayBidXQKKwkJICogbXVzdCBub3QgZ28gYmVsb3cg emVybyBpbmRleC4KKwkJICovCisJCXVpZHggPSB2c19zaXplICsgKGR1a191aWR4X3QpIGlkeDsK Kwl9IGVsc2UgeworCQkvKiBQb3NpdGl2ZSBpbmRleCBjYW4gYmUgaGlnaGVyIHRoYW4gdmFsc3Rh Y2sgdG9wIGJ1dCBtdXN0CisJCSAqIG5vdCBnbyBhYm92ZSBhbGxvY2F0ZWQgc3RhY2sgKGVxdWFs aXR5IGlzIE9LKS4KKwkJICovCisJCXVpZHggPSAoZHVrX3VpZHhfdCkgaWR4OworCX0KKworCS8q IERVS19JTlZBTElEX0lOREVYIHdvbid0IGJlIGFjY2VwdGVkIGFzIGEgdmFsaWQgaW5kZXguICov CisJRFVLX0FTU0VSVCh2c19zaXplICsgKGR1a191aWR4X3QpIERVS19JTlZBTElEX0lOREVYID49 IHZzX3NpemUpOworCURVS19BU1NFUlQodnNfc2l6ZSArIChkdWtfdWlkeF90KSBEVUtfSU5WQUxJ RF9JTkRFWCA+PSB2c19saW1pdCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfVkFMU1RBQ0tfVU5T QUZFKQorCURVS19BU1NFUlQodWlkeCA8PSB2c19saW1pdCk7CisJRFVLX1VOUkVGKHZzX2xpbWl0 KTsKKyNlbHNlCisJaWYgKERVS19VTkxJS0VMWSh1aWR4ID4gdnNfbGltaXQpKSB7CisJCURVS19F UlJPUl9SQU5HRV9JTkRFWCh0aHIsIGlkeCk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsK Kwl9CisjZW5kaWYKKwlEVUtfQVNTRVJUKHVpZHggPD0gdnNfbGltaXQpOworCisJLyogSGFuZGxl IGNoYW5nZSBpbiB2YWx1ZSBzdGFjayB0b3AuICBSZXNwZWN0IHZhbHVlIHN0YWNrCisJICogaW5p dGlhbGl6YXRpb24gcG9saWN5OiAndW5kZWZpbmVkJyBhYm92ZSB0b3AuICBOb3RlIHRoYXQKKwkg KiBERUNSRUYgbWF5IGNhdXNlIGEgc2lkZSBlZmZlY3QgdGhhdCByZWFsbG9jYXRlcyB2YWxzdGFj aywKKwkgKiBzbyBtdXN0IHJlbG9va3VwIGFmdGVyIERFQ1JFRi4KKwkgKi8KKworCWlmICh1aWR4 ID49IHZzX3NpemUpIHsKKwkJLyogU3RhY2sgc2l6ZSBpbmNyZWFzZXMgb3Igc3RheXMgdGhlIHNh bWUuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJCWR1a191aWR4X3QgY291 bnQ7CisKKwkJY291bnQgPSB1aWR4IC0gdnNfc2l6ZTsKKwkJd2hpbGUgKGNvdW50ICE9IDApIHsK KwkJCWNvdW50LS07CisJCQl0diA9IHRoci0+dmFsc3RhY2tfdG9wICsgY291bnQ7CisJCQlEVUtf QVNTRVJUKERVS19UVkFMX0lTX1VOREVGSU5FRCh0dikpOworCQl9CisjZW5kaWYKKwkJdGhyLT52 YWxzdGFja190b3AgPSB0aHItPnZhbHN0YWNrX2JvdHRvbSArIHVpZHg7CisJfSBlbHNlIHsKKwkJ LyogU3RhY2sgc2l6ZSBkZWNyZWFzZXMuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5D RV9DT1VOVElORykKKwkJZHVrX3VpZHhfdCBjb3VudDsKKwkJZHVrX3R2YWwgKnR2X2VuZDsKKwor CQljb3VudCA9IHZzX3NpemUgLSB1aWR4OworCQlEVUtfQVNTRVJUKGNvdW50ID4gMCk7CisJCXR2 ID0gdGhyLT52YWxzdGFja190b3A7CisJCXR2X2VuZCA9IHR2IC0gY291bnQ7CisJCURVS19BU1NF UlQodHYgPiB0dl9lbmQpOyAgLyogQmVjYXVzZSBjb3VudCA+IDAuICovCisJCWRvIHsKKwkJCXR2 LS07CisJCQlEVUtfQVNTRVJUKHR2ID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwkJCURVS19U VkFMX1NFVF9VTkRFRklORURfVVBEUkVGX05PUloodGhyLCB0dik7CisJCX0gd2hpbGUgKHR2ICE9 IHR2X2VuZCk7CisJCXRoci0+dmFsc3RhY2tfdG9wID0gdHZfZW5kOworCQlEVUtfUkVGWkVST19D SEVDS19GQVNUKHRocik7CisjZWxzZSAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcgKi8K KwkJZHVrX3VpZHhfdCBjb3VudDsKKwkJZHVrX3R2YWwgKnR2X2VuZDsKKworCQljb3VudCA9IHZz X3NpemUgLSB1aWR4OworCQl0diA9IHRoci0+dmFsc3RhY2tfdG9wOworCQl0dl9lbmQgPSB0diAt IGNvdW50OworCQlEVUtfQVNTRVJUKHR2ID4gdHZfZW5kKTsKKwkJZG8geworCQkJdHYtLTsKKwkJ CURVS19UVkFMX1NFVF9VTkRFRklORUQodHYpOworCQl9IHdoaWxlICh0diAhPSB0dl9lbmQpOwor CQl0aHItPnZhbHN0YWNrX3RvcCA9IHR2X2VuZDsKKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZFUkVO Q0VfQ09VTlRJTkcgKi8KKwl9Cit9CisKKy8qIEludGVybmFsIHZhcmlhbnQgd2l0aCBhIG5vbi1u ZWdhdGl2ZSBpbmRleCBhbmQgbm8gcnVudGltZSBzaXplIGNoZWNrcy4gKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfUFJFRkVSX1NJWkUpCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfc2V0X3RvcF91bnNh ZmUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwlkdWtfc2V0X3RvcCh0aHIsIGlkeCk7Cit9CisjZWxzZSAgLyogRFVLX1VT RV9QUkVGRVJfU0laRSAqLworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3NldF90b3BfdW5zYWZlKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdWlkeF90IHVpZHg7CisJZHVr X3VpZHhfdCB2c19zaXplOworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+PSB0aHItPnZhbHN0YWNrX2Jv dHRvbSk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2VuZCA+PSB0aHItPnZhbHN0YWNrX2Jv dHRvbSk7CisJRFVLX0FTU0VSVChpZHggPj0gMCk7CisJRFVLX0FTU0VSVChpZHggPD0gKGR1a19p ZHhfdCkgKHRoci0+dmFsc3RhY2tfZW5kIC0gdGhyLT52YWxzdGFja19ib3R0b20pKTsKKworCS8q IFhYWDogYnl0ZSBhcml0aG1ldGljICovCisJdWlkeCA9IChkdWtfdWlkeF90KSBpZHg7CisJdnNf c2l6ZSA9IChkdWtfdWlkeF90KSAodGhyLT52YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrX2Jv dHRvbSk7CisKKwlpZiAodWlkeCA+PSB2c19zaXplKSB7CisJCS8qIFN0YWNrIHNpemUgaW5jcmVh c2VzIG9yIHN0YXlzIHRoZSBzYW1lLiAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05T KQorCQlkdWtfdWlkeF90IGNvdW50OworCisJCWNvdW50ID0gdWlkeCAtIHZzX3NpemU7CisJCXdo aWxlIChjb3VudCAhPSAwKSB7CisJCQljb3VudC0tOworCQkJdHYgPSB0aHItPnZhbHN0YWNrX3Rv cCArIGNvdW50OworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19VTkRFRklORUQodHYpKTsKKwkJ fQorI2VuZGlmCisJCXRoci0+dmFsc3RhY2tfdG9wID0gdGhyLT52YWxzdGFja19ib3R0b20gKyB1 aWR4OworCX0gZWxzZSB7CisJCS8qIFN0YWNrIHNpemUgZGVjcmVhc2VzLiAqLworI2lmIGRlZmlu ZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJCWR1a191aWR4X3QgY291bnQ7CisJCWR1 a190dmFsICp0dl9lbmQ7CisKKwkJY291bnQgPSB2c19zaXplIC0gdWlkeDsKKwkJRFVLX0FTU0VS VChjb3VudCA+IDApOworCQl0diA9IHRoci0+dmFsc3RhY2tfdG9wOworCQl0dl9lbmQgPSB0diAt IGNvdW50OworCQlEVUtfQVNTRVJUKHR2ID4gdHZfZW5kKTsgIC8qIEJlY2F1c2UgY291bnQgPiAw LiAqLworCQlkbyB7CisJCQl0di0tOworCQkJRFVLX0FTU0VSVCh0diA+PSB0aHItPnZhbHN0YWNr X2JvdHRvbSk7CisJCQlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRl9OT1JaKHRociwgdHYp OworCQl9IHdoaWxlICh0diAhPSB0dl9lbmQpOworCQl0aHItPnZhbHN0YWNrX3RvcCA9IHR2X2Vu ZDsKKwkJRFVLX1JFRlpFUk9fQ0hFQ0tfRkFTVCh0aHIpOworI2Vsc2UgIC8qIERVS19VU0VfUkVG RVJFTkNFX0NPVU5USU5HICovCisJCWR1a191aWR4X3QgY291bnQ7CisJCWR1a190dmFsICp0dl9l bmQ7CisKKwkJY291bnQgPSB2c19zaXplIC0gdWlkeDsKKwkJdHYgPSB0aHItPnZhbHN0YWNrX3Rv cDsKKwkJdHZfZW5kID0gdHYgLSBjb3VudDsKKwkJRFVLX0FTU0VSVCh0diA+IHR2X2VuZCk7CisJ CWRvIHsKKwkJCXR2LS07CisJCQlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKHR2KTsKKwkJfSB3aGls ZSAodHYgIT0gdHZfZW5kKTsKKwkJdGhyLT52YWxzdGFja190b3AgPSB0dl9lbmQ7CisjZW5kaWYg IC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HICovCisJfQorfQorI2VuZGlmICAvKiBEVUtf VVNFX1BSRUZFUl9TSVpFICovCisKKy8qIEludGVybmFsIGhlbHBlcjogc2V0IHRvcCB0byAndG9w JywgYW5kIHNldCBbaWR4X3dpcGVfc3RhcnQsdG9wWyB0bworICogJ3VuZGVmaW5lZCcgKGRvaW5n IG5vdGhpbmcgaWYgaWR4X3dpcGVfc3RhcnQgPT0gdG9wKS4gIEluZGljZXMgYXJlCisgKiBwb3Np dGl2ZSBhbmQgd2l0aGluIHZhbHVlIHN0YWNrIHJlc2VydmUuICBUaGlzIGlzIHVzZWQgYnkgY2Fs bCBoYW5kbGluZy4KKyAqLworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3NldF90b3BfYW5kX3dpcGUo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IHRvcCwgZHVrX2lkeF90IGlkeF93aXBlX3N0YXJ0 KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHRvcCA+PSAwKTsK KwlEVUtfQVNTRVJUKGlkeF93aXBlX3N0YXJ0ID49IDApOworCURVS19BU1NFUlQoaWR4X3dpcGVf c3RhcnQgPD0gdG9wKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYm90dG9tICsgdG9wIDw9 IHRoci0+dmFsc3RhY2tfZW5kKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYm90dG9tICsg aWR4X3dpcGVfc3RhcnQgPD0gdGhyLT52YWxzdGFja19lbmQpOworCisJZHVrX3NldF90b3BfdW5z YWZlKHRociwgaWR4X3dpcGVfc3RhcnQpOworCWR1a19zZXRfdG9wX3Vuc2FmZSh0aHIsIHRvcCk7 Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaWR4X3QgZHVrX2dldF90b3BfaW5kZXgoZHVrX2h0aHJl YWQgKnRocikgeworCWR1a19pZHhfdCByZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCisJcmV0ID0gKGR1a19pZHhfdCkgKHRoci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFj a19ib3R0b20pIC0gMTsKKwlpZiAoRFVLX1VOTElLRUxZKHJldCA8IDApKSB7CisJCS8qIFJldHVy biBpbnZhbGlkIGluZGV4OyBpZiBjYWxsZXIgdXNlcyB0aGlzIHdpdGhvdXQgY2hlY2tpbmcKKwkJ ICogaW4gYW5vdGhlciBBUEkgY2FsbCwgdGhlIGluZGV4IHdvbid0IG1hcCB0byBhIHZhbGlkIHN0 YWNrCisJCSAqIGVudHJ5LgorCQkgKi8KKwkJcmV0dXJuIERVS19JTlZBTElEX0lOREVYOworCX0K KwlyZXR1cm4gcmV0OworfQorCisvKiBJbnRlcm5hbCB2YXJpYW50OiBjYWxsIGFzc3VtZXMgdGhl cmUgaXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgb24gdGhlIHZhbHVlCisgKiBzdGFjayBmcmFtZTsg dGhpcyBpcyBvbmx5IGFzc2VydGVkIGZvci4KKyAqLworRFVLX0lOVEVSTkFMIGR1a19pZHhfdCBk dWtfZ2V0X3RvcF9pbmRleF91bnNhZmUoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pZHhfdCBy ZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0ID0gKGR1a19pZHhfdCkg KHRoci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFja19ib3R0b20pIC0gMTsKKwlyZXR1cm4g cmV0OworfQorCitEVUtfRVhURVJOQUwgZHVrX2lkeF90IGR1a19yZXF1aXJlX3RvcF9pbmRleChk dWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2lkeF90IHJldDsKKworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwlyZXQgPSAoZHVrX2lkeF90KSAodGhyLT52YWxzdGFja190b3AgLSB0aHIt PnZhbHN0YWNrX2JvdHRvbSkgLSAxOworCWlmIChEVUtfVU5MSUtFTFkocmV0IDwgMCkpIHsKKwkJ RFVLX0VSUk9SX1JBTkdFX0lOREVYKHRociwgLTEpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJu IDA7KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICBWYWx1ZSBzdGFjayByZXNpemlu Zy4KKyAqCisgKiAgVGhpcyByZXNpemluZyBoYXBwZW5zIGFib3ZlIHRoZSBjdXJyZW50ICJ0b3Ai OiB0aGUgdmFsdWUgc3RhY2sgY2FuIGJlCisgKiAgZ3Jvd24gb3Igc2hydW5rLCBidXQgdGhlICJ0 b3AiIGlzIG5vdCBhZmZlY3RlZC4gIFRoZSB2YWx1ZSBzdGFjayBjYW5ub3QKKyAqICBiZSByZXNp emVkIHRvIGEgc2l6ZSBiZWxvdyB0aGUgY3VycmVudCByZXNlcnZlLgorICoKKyAqICBUaGUgbG93 IGxldmVsIHJlYWxsb2NhdGlvbiBwcmltaXRpdmUgbXVzdCBjYXJlZnVsbHkgcmVjb21wdXRlIGFs bCB2YWx1ZQorICogIHN0YWNrIHBvaW50ZXJzLCBhbmQgbXVzdCBhbHNvIHdvcmsgaWYgQUxMIHBv aW50ZXJzIGFyZSBOVUxMLiAgVGhlIHJlc2l6ZQorICogIGlzIHF1aXRlIHRyaWNreSBiZWNhdXNl IHRoZSB2YWxzdGFjayByZWFsbG9jIG1heSBjYXVzZSBhIG1hcmstYW5kLXN3ZWVwLAorICogIHdo aWNoIG1heSBydW4gZmluYWxpemVycy4gIFJ1bm5pbmcgZmluYWxpemVycyBtYXkgcmVzaXplIHRo ZSB2YWxzdGFjaworICogIHJlY3Vyc2l2ZWx5ICh0aGUgc2FtZSB2YWx1ZSBzdGFjayB3ZSdyZSB3 b3JraW5nIG9uKS4gIFNvLCBhZnRlciByZWFsbG9jCisgKiAgcmV0dXJucywgd2Uga25vdyB0aGF0 IHRoZSB2YWxzdGFjayBib3R0b20sIHRvcCwgYW5kIHJlc2VydmUgc2hvdWxkIHN0aWxsCisgKiAg YmUgdGhlIHNhbWUgKHRoZXJlIHNob3VsZCBub3QgYmUgbGl2ZSB2YWx1ZXMgYWJvdmUgdGhlICJ0 b3AiKSwgYnV0IGl0cworICogIHVuZGVybHlpbmcgc2l6ZSwgYWxsb2NfZW5kLCBhbmQgYmFzZSBw b2ludGVyIG1heSBoYXZlIGNoYW5nZWQuCisgKgorICogICduZXdfc2l6ZScgaXMga25vd24gdG8g YmUgPD0gRFVLX1VTRV9WQUxTVEFDS19MSU1JVCwgd2hpY2ggZW5zdXJlcyB0aGF0CisgKiAgc2l6 ZV90IGFuZCBwb2ludGVyIGFyaXRobWV0aWMgd29uJ3Qgd3JhcCBpbiBkdWtfX3Jlc2l6ZV92YWxz dGFjaygpLgorICovCisKKy8qIExvdyBsZXZlbCB2YWxzdGFjayByZXNpemUgcHJpbWl0aXZlLCB1 c2VkIGZvciBib3RoIGdyb3cgYW5kIHNocmluay4gIEFsbAorICogYWRqdXN0bWVudHMgZm9yIHNs YWNrIGV0YyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLiAgRG9lc24ndCB0aHJvdyBidXQgZG9lcwor ICogaGF2ZSBhbGxvY2F0aW9uIHNpZGUgZWZmZWN0cy4KKyAqLworRFVLX0xPQ0FMIERVS19DT0xE IERVS19OT0lOTElORSBkdWtfYm9vbF90IGR1a19fcmVzaXplX3ZhbHN0YWNrKGR1a19odGhyZWFk ICp0aHIsIGR1a19zaXplX3QgbmV3X3NpemUpIHsKKwlkdWtfdHZhbCAqcHJlX3ZhbHN0YWNrOwor CWR1a190dmFsICpwcmVfYm90dG9tOworCWR1a190dmFsICpwcmVfdG9wOworCWR1a190dmFsICpw cmVfZW5kOworCWR1a190dmFsICpwcmVfYWxsb2NfZW5kOworCWR1a19wdHJkaWZmX3QgcHRyX2Rp ZmY7CisJZHVrX3R2YWwgKm5ld192YWxzdGFjazsKKwlkdWtfc2l6ZV90IG5ld19hbGxvY19zaXpl OworCWR1a190dmFsICp0dl9wcmV2X2FsbG9jX2VuZDsKKwlkdWtfdHZhbCAqcDsKKworCURVS19B U1NFUlRfSFRIUkVBRF9WQUxJRCh0aHIpOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja19ib3R0 b20gPj0gdGhyLT52YWxzdGFjayk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+PSB0 aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2VuZCA+PSB0 aHItPnZhbHN0YWNrX3RvcCk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2FsbG9jX2VuZCA+ PSB0aHItPnZhbHN0YWNrX2VuZCk7CisJRFVLX0FTU0VSVCgoZHVrX3NpemVfdCkgKHRoci0+dmFs c3RhY2tfdG9wIC0gdGhyLT52YWxzdGFjaykgPD0gbmV3X3NpemUpOyAgLyogY2FuJ3QgcmVzaXpl IGJlbG93ICd0b3AnICovCisJRFVLX0FTU0VSVChuZXdfc2l6ZSA8PSBEVUtfVVNFX1ZBTFNUQUNL X0xJTUlUKTsgIC8qIHZhbHN0YWNrIGxpbWl0IGNhbGxlciBoYXMgY2hlY2ssIHByZXZlbnRzIHdy YXBwaW5nICovCisJRFVLX0FTU0VSVChuZXdfc2l6ZSA8PSBEVUtfU0laRV9NQVggLyBzaXplb2Yo ZHVrX3R2YWwpKTsgIC8qIHNwZWNpZmljIGFzc2VydCBmb3Igd3JhcHBpbmcgKi8KKworCS8qIFBy ZS1yZWFsbG9jIHBvaW50ZXIgY29waWVzIGZvciBhc3NlcnRzIGFuZCBkZWJ1ZyBsb2dzLiAqLwor CXByZV92YWxzdGFjayA9IHRoci0+dmFsc3RhY2s7CisJcHJlX2JvdHRvbSA9IHRoci0+dmFsc3Rh Y2tfYm90dG9tOworCXByZV90b3AgPSB0aHItPnZhbHN0YWNrX3RvcDsKKwlwcmVfZW5kID0gdGhy LT52YWxzdGFja19lbmQ7CisJcHJlX2FsbG9jX2VuZCA9IHRoci0+dmFsc3RhY2tfYWxsb2NfZW5k OworCisJRFVLX1VOUkVGKHByZV92YWxzdGFjayk7CisJRFVLX1VOUkVGKHByZV9ib3R0b20pOwor CURVS19VTlJFRihwcmVfdG9wKTsKKwlEVUtfVU5SRUYocHJlX2VuZCk7CisJRFVLX1VOUkVGKHBy ZV9hbGxvY19lbmQpOworCisJLyogSWYgZmluYWxpemVyIHRvcnR1cmUgZW5hYmxlZCwgZm9yY2Ug YmFzZSBwb2ludGVyIGNoYW5nZSBldmVyeSB0aW1lCisJICogd2hlbiBpdCB3b3VsZCBiZSBhbGxv d2VkLgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfVE9SVFVSRSkKKwlpZiAo dGhyLT5oZWFwLT5wZl9wcmV2ZW50X2NvdW50ID09IDApIHsKKwkJZHVrX2h0aHJlYWRfdmFsc3Rh Y2tfdG9ydHVyZV9yZWFsbG9jKHRocik7CisJfQorI2VuZGlmCisKKwkvKiBBbGxvY2F0ZSBhIG5l dyB2YWxzdGFjayB1c2luZyBEVUtfUkVBTExPQ19ESVJFQ1QoKSB0byBkZWFsIHdpdGgKKwkgKiBh IHNpZGUgZWZmZWN0IGNoYW5naW5nIHRoZSBiYXNlIHBvaW50ZXIuCisJICovCisJbmV3X2FsbG9j X3NpemUgPSBzaXplb2YoZHVrX3R2YWwpICogbmV3X3NpemU7CisJbmV3X3ZhbHN0YWNrID0gKGR1 a190dmFsICopIERVS19SRUFMTE9DX0lORElSRUNUKHRoci0+aGVhcCwgZHVrX2h0aHJlYWRfZ2V0 X3ZhbHN0YWNrX3B0ciwgKHZvaWQgKikgdGhyLCBuZXdfYWxsb2Nfc2l6ZSk7CisJaWYgKERVS19V TkxJS0VMWShuZXdfdmFsc3RhY2sgPT0gTlVMTCkpIHsKKwkJLyogQmVjYXVzZSBuZXdfc2l6ZSAh PSAwLCBpZiBjb25kaXRpb24gZG9lc24ndCBuZWVkIHRvIGJlCisJCSAqIChuZXdfdmFsc3RhY2sg IT0gTlVMTCB8fCBuZXdfc2l6ZSA9PSAwKS4KKwkJICovCisJCURVS19BU1NFUlQobmV3X3NpemUg IT0gMCk7CisJCURVS19EKERVS19EUFJJTlQoImZhaWxlZCB0byByZXNpemUgdmFsc3RhY2sgdG8g JWx1IGVudHJpZXMgKCVsdSBieXRlcykiLAorCQkgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nKSBuZXdfc2l6ZSwgKHVuc2lnbmVkIGxvbmcpIG5ld19hbGxvY19zaXplKSk7CisJCXJldHVy biAwOworCX0KKworCS8qIERlYnVnIGxvZyBhbnkgY2hhbmdlcyBpbiBwb2ludGVyKHMpIGJ5IHNp ZGUgZWZmZWN0cy4gIFRoZXNlIGRvbid0CisJICogbmVjZXNzYXJpbHkgaW1wbHkgYW55IGluY29y cmVjdCBiZWhhdmlvciwgYnV0IHNob3VsZCBiZSByYXJlIGluCisJICogcHJhY3RpY2UuCisJICov CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWlmICh0aHItPnZhbHN0YWNrICE9IHByZV92 YWxzdGFjaykgeworCQlEVUtfRChEVUtfRFBSSU5UKCJ2YWxzdGFjayBiYXNlIHBvaW50ZXIgY2hh bmdlZCBkdXJpbmcgdmFsc3RhY2sgcmVzaXplOiAlcCAtPiAlcCIsCisJCSAgICAgICAgICAgICAg ICAgKHZvaWQgKikgcHJlX3ZhbHN0YWNrLCAodm9pZCAqKSB0aHItPnZhbHN0YWNrKSk7CisJfQor CWlmICh0aHItPnZhbHN0YWNrX2JvdHRvbSAhPSBwcmVfYm90dG9tKSB7CisJCURVS19EKERVS19E UFJJTlQoInZhbHN0YWNrIGJvdHRvbSBwb2ludGVyIGNoYW5nZWQgZHVyaW5nIHZhbHN0YWNrIHJl c2l6ZTogJXAgLT4gJXAiLAorCQkgICAgICAgICAgICAgICAgICh2b2lkICopIHByZV9ib3R0b20s ICh2b2lkICopIHRoci0+dmFsc3RhY2tfYm90dG9tKSk7CisJfQorCWlmICh0aHItPnZhbHN0YWNr X3RvcCAhPSBwcmVfdG9wKSB7CisJCURVS19EKERVS19EUFJJTlQoInZhbHN0YWNrIHRvcCBwb2lu dGVyIGNoYW5nZWQgZHVyaW5nIHZhbHN0YWNrIHJlc2l6ZTogJXAgLT4gJXAiLAorCQkgICAgICAg ICAgICAgICAgICh2b2lkICopIHByZV90b3AsICh2b2lkICopIHRoci0+dmFsc3RhY2tfdG9wKSk7 CisJfQorCWlmICh0aHItPnZhbHN0YWNrX2VuZCAhPSBwcmVfZW5kKSB7CisJCURVS19EKERVS19E UFJJTlQoInZhbHN0YWNrIGVuZCBwb2ludGVyIGNoYW5nZWQgZHVyaW5nIHZhbHN0YWNrIHJlc2l6 ZTogJXAgLT4gJXAiLAorCQkgICAgICAgICAgICAgICAgICh2b2lkICopIHByZV9lbmQsICh2b2lk ICopIHRoci0+dmFsc3RhY2tfZW5kKSk7CisJfQorCWlmICh0aHItPnZhbHN0YWNrX2FsbG9jX2Vu ZCAhPSBwcmVfYWxsb2NfZW5kKSB7CisJCURVS19EKERVS19EUFJJTlQoInZhbHN0YWNrIGFsbG9j X2VuZCBwb2ludGVyIGNoYW5nZWQgZHVyaW5nIHZhbHN0YWNrIHJlc2l6ZTogJXAgLT4gJXAiLAor CQkgICAgICAgICAgICAgICAgICh2b2lkICopIHByZV9hbGxvY19lbmQsICh2b2lkICopIHRoci0+ dmFsc3RhY2tfYWxsb2NfZW5kKSk7CisJfQorI2VuZGlmCisKKwkvKiBBc3NlcnRpb25zOiBvZmZz ZXRzIGZvciBib3R0b20sIHRvcCwgYW5kIGVuZCAocmVzZXJ2ZSkgbXVzdCBub3QKKwkgKiBoYXZl IGNoYW5nZWQgZXZlbiB3aXRoIHNpZGUgZWZmZWN0cyBiZWNhdXNlIHRoZXkgYXJlIGFsd2F5cwor CSAqIHJlc3RvcmVkIGluIHVud2luZC4gIEZvciBhbGxvY19lbmQgdGhlcmUncyBubyBndWFyYW50 ZWU6IGl0IG1heQorCSAqIGhhdmUgZ3Jvd24gb3Igc2hydW5rIChidXQgcmVtYWluIGFib3ZlICdl bmQnKS4KKwkgKi8KKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYm90dG9tIC0gdGhyLT52YWxz dGFjayA9PSBwcmVfYm90dG9tIC0gcHJlX3ZhbHN0YWNrKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFs c3RhY2tfdG9wIC0gdGhyLT52YWxzdGFjayA9PSBwcmVfdG9wIC0gcHJlX3ZhbHN0YWNrKTsKKwlE VUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfZW5kIC0gdGhyLT52YWxzdGFjayA9PSBwcmVfZW5kIC0g cHJlX3ZhbHN0YWNrKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYWxsb2NfZW5kID49IHRo ci0+dmFsc3RhY2tfZW5kKTsKKworCS8qIFdyaXRlIG5ldyBwb2ludGVycy4gIE1vc3QgcG9pbnRl cnMgY2FuIGJlIGhhbmRsZWQgYXMgYSBwb2ludGVyCisJICogZGlmZmVyZW5jZS4KKwkgKi8KKwlw dHJfZGlmZiA9IChkdWtfcHRyZGlmZl90KSAoKGR1a191aW50OF90ICopIG5ld192YWxzdGFjayAt IChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrKTsKKwl0dl9wcmV2X2FsbG9jX2VuZCA9IChk dWtfdHZhbCAqKSAodm9pZCAqKSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfYWxsb2Nf ZW5kICsgcHRyX2RpZmYpOworCXRoci0+dmFsc3RhY2sgPSBuZXdfdmFsc3RhY2s7CisJdGhyLT52 YWxzdGFja19ib3R0b20gPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSB0 aHItPnZhbHN0YWNrX2JvdHRvbSArIHB0cl9kaWZmKTsKKwl0aHItPnZhbHN0YWNrX3RvcCA9IChk dWtfdHZhbCAqKSAodm9pZCAqKSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfdG9wICsg cHRyX2RpZmYpOworCXRoci0+dmFsc3RhY2tfZW5kID0gKGR1a190dmFsICopICh2b2lkICopICgo ZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19lbmQgKyBwdHJfZGlmZik7CisJdGhyLT52YWxz dGFja19hbGxvY19lbmQgPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSBu ZXdfdmFsc3RhY2sgKyBuZXdfYWxsb2Nfc2l6ZSk7CisKKwkvKiBBc3NlcnRpb25zOiBwb2ludGVy IHNhbml0eSBhZnRlciBwb2ludGVyIHVwZGF0ZXMuICovCisJRFVLX0FTU0VSVCh0aHItPnZhbHN0 YWNrX2JvdHRvbSA+PSB0aHItPnZhbHN0YWNrKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tf dG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tf ZW5kID49IHRoci0+dmFsc3RhY2tfdG9wKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYWxs b2NfZW5kID49IHRoci0+dmFsc3RhY2tfZW5kKTsKKworCURVS19EKERVS19EUFJJTlQoInJlc2l6 ZWQgdmFsc3RhY2sgJWx1IC0+ICVsdSBlbGVtZW50cyAoJWx1IC0+ICVsdSBieXRlcyk6ICIKKwkg ICAgICAgICAgICAgICAgICJiYXNlPSVwIC0+ICVwLCBib3R0b209JXAgLT4gJXAgKCVsZCksIHRv cD0lcCAtPiAlcCAoJWxkKSwgIgorCSAgICAgICAgICAgICAgICAgImVuZD0lcCAtPiAlcCAoJWxk KSwgYWxsb2NfZW5kPSVwIC0+ICVwICglbGQpOyIKKwkgICAgICAgICAgICAgICAgICIgdHZfcHJl dl9hbGxvY19lbmQ9JXAgKC0+ICVsZCBpbml0czsgPDAgbWVhbnMgc2hyaW5rKSIsCisJICAgICAg ICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKHByZV9hbGxvY19lbmQgLSBwcmVfdmFsc3RhY2sp LAorCSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5ld19zaXplLAorCSAgICAgICAg ICAgICAgICAgKHVuc2lnbmVkIGxvbmcpICgoZHVrX3VpbnQ4X3QgKikgcHJlX2FsbG9jX2VuZCAt IChkdWtfdWludDhfdCAqKSBwcmVfdmFsc3RhY2spLAorCSAgICAgICAgICAgICAgICAgKHVuc2ln bmVkIGxvbmcpIG5ld19hbGxvY19zaXplLAorCSAgICAgICAgICAgICAgICAgKHZvaWQgKikgcHJl X3ZhbHN0YWNrLCAodm9pZCAqKSB0aHItPnZhbHN0YWNrLAorCSAgICAgICAgICAgICAgICAgKHZv aWQgKikgcHJlX2JvdHRvbSwgKHZvaWQgKikgdGhyLT52YWxzdGFja19ib3R0b20sIChsb25nKSAo dGhyLT52YWxzdGFja19ib3R0b20gLSB0aHItPnZhbHN0YWNrKSwKKwkgICAgICAgICAgICAgICAg ICh2b2lkICopIHByZV90b3AsICh2b2lkICopIHRoci0+dmFsc3RhY2tfdG9wLCAobG9uZykgKHRo ci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFjayksCisJICAgICAgICAgICAgICAgICAodm9p ZCAqKSBwcmVfZW5kLCAodm9pZCAqKSB0aHItPnZhbHN0YWNrX2VuZCwgKGxvbmcpICh0aHItPnZh bHN0YWNrX2VuZCAtIHRoci0+dmFsc3RhY2spLAorCSAgICAgICAgICAgICAgICAgKHZvaWQgKikg cHJlX2FsbG9jX2VuZCwgKHZvaWQgKikgdGhyLT52YWxzdGFja19hbGxvY19lbmQsIChsb25nKSAo dGhyLT52YWxzdGFja19hbGxvY19lbmQgLSB0aHItPnZhbHN0YWNrKSwKKwkgICAgICAgICAgICAg ICAgICh2b2lkICopIHR2X3ByZXZfYWxsb2NfZW5kLCAobG9uZykgKHRoci0+dmFsc3RhY2tfYWxs b2NfZW5kIC0gdHZfcHJldl9hbGxvY19lbmQpKSk7CisKKwkvKiBJZiBhbGxvY2F0aW9uIGdyZXcs IGluaXQgYW55IG5ldyBzbG90cyB0byAndW5kZWZpbmVkJy4gKi8KKwlwID0gdHZfcHJldl9hbGxv Y19lbmQ7CisJd2hpbGUgKHAgPCB0aHItPnZhbHN0YWNrX2FsbG9jX2VuZCkgeworCQkvKiBOZXZl ciBleGVjdXRlZCBpZiBuZXcgc2l6ZSBpcyBzbWFsbGVyLiAqLworCQlEVUtfVFZBTF9TRVRfVU5E RUZJTkVEKHApOworCQlwKys7CisJfQorCisJLyogQXNzZXJ0IGZvciB2YWx1ZSBzdGFjayBpbml0 aWFsaXphdGlvbiBwb2xpY3kuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJ cCA9IHRoci0+dmFsc3RhY2tfdG9wOworCXdoaWxlIChwIDwgdGhyLT52YWxzdGFja19hbGxvY19l bmQpIHsKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19VTkRFRklORUQocCkpOworCQlwKys7CisJ fQorI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworRFVLX0xPQ0FMIERVS19DT0xEIERVS19OT0lO TElORSBkdWtfYm9vbF90IGR1a19fdmFsc3RhY2tfZ3JvdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf c2l6ZV90IG1pbl9ieXRlcywgZHVrX2Jvb2xfdCB0aHJvd19vbl9lcnJvcikgeworCWR1a19zaXpl X3QgbWluX3NpemU7CisJZHVrX3NpemVfdCBuZXdfc2l6ZTsKKworCURVS19BU1NFUlQobWluX2J5 dGVzIC8gc2l6ZW9mKGR1a190dmFsKSAqIHNpemVvZihkdWtfdHZhbCkgPT0gbWluX2J5dGVzKTsK KwltaW5fc2l6ZSA9IG1pbl9ieXRlcyAvIHNpemVvZihkdWtfdHZhbCk7ICAvKiBmcm9tIGJ5dGVz IHRvIHNsb3RzICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfVkFMU1RBQ0tfR1JPV19TSElGVCkK KwkvKiBOZXcgc2l6ZSBpcyBtaW5pbXVtIHNpemUgcGx1cyBhIHByb3BvcnRpb25hbCBzbGFjaywg ZS5nLiBzaGlmdCBvZgorCSAqIDIgbWVhbnMgYSAyNSUgc2xhY2suCisJICovCisJbmV3X3NpemUg PSBtaW5fc2l6ZSArIChtaW5fc2l6ZSA+PiBEVUtfVVNFX1ZBTFNUQUNLX0dST1dfU0hJRlQpOwor I2Vsc2UKKwkvKiBOZXcgc2l6ZSBpcyB0aWdodCB3aXRoIG5vIHNsYWNrLiAgVGhpcyBpcyBzb21l dGltZXMgcHJlZmVycmVkIGluCisJICogbG93IG1lbW9yeSBlbnZpcm9ubWVudHMuCisJICovCisJ bmV3X3NpemUgPSBtaW5fc2l6ZTsKKyNlbmRpZgorCisJaWYgKERVS19VTkxJS0VMWShuZXdfc2l6 ZSA+IERVS19VU0VfVkFMU1RBQ0tfTElNSVQgfHwgbmV3X3NpemUgPCBtaW5fc2l6ZSAvKndyYXAq LykpIHsKKwkJLyogTm90ZTogbWF5IGJlIHRyaWdnZXJlZCBldmVuIGlmIG1pbmltYWwgbmV3X3Np emUgd291bGQgbm90IHJlYWNoIHRoZSBsaW1pdCwKKwkJICogcGxhbiBsaW1pdCBhY2NvcmRpbmds eS4KKwkJICovCisJCWlmICh0aHJvd19vbl9lcnJvcikgeworCQkJRFVLX0VSUk9SX1JBTkdFKHRo ciwgRFVLX1NUUl9WQUxTVEFDS19MSU1JVCk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7 KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZHVrX19yZXNpemVfdmFsc3RhY2sodGhy LCBuZXdfc2l6ZSkgPT0gMCkgeworCQlpZiAodGhyb3dfb25fZXJyb3IpIHsKKwkJCURVS19FUlJP Ul9BTExPQ19GQUlMRUQodGhyKTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCQl9 CisJCXJldHVybiAwOworCX0KKworCXRoci0+dmFsc3RhY2tfZW5kID0gdGhyLT52YWxzdGFjayAr IG1pbl9zaXplOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja19hbGxvY19lbmQgPj0gdGhyLT52 YWxzdGFja19lbmQpOworCisJcmV0dXJuIDE7Cit9CisKKy8qIEhvdCwgaW5saW5lZCB2YWx1ZSBz dGFjayBncm93IGNoZWNrLiAgQmVjYXVzZSB2YWx1ZSBzdGFjayBhbG1vc3QgbmV2ZXIKKyAqIGdy b3dzLCB0aGUgYWN0dWFsIHJlc2l6ZSBjYWxsIGlzIGluIGEgTk9JTkxJTkUgaGVscGVyLgorICov CitEVUtfSU5URVJOQUwgRFVLX0lOTElORSB2b2lkIGR1a192YWxzdGFja19ncm93X2NoZWNrX3Ro cm93KGR1a19odGhyZWFkICp0aHIsIGR1a19zaXplX3QgbWluX2J5dGVzKSB7CisJZHVrX3R2YWwg KnR2OworCisJdHYgPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSB0aHIt PnZhbHN0YWNrICsgbWluX2J5dGVzKTsKKwlpZiAoRFVLX0xJS0VMWSh0aHItPnZhbHN0YWNrX2Vu ZCA+PSB0dikpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoRFVLX0xJS0VMWSh0aHItPnZhbHN0YWNr X2FsbG9jX2VuZCA+PSB0dikpIHsKKwkJLyogVmFsdWVzIGluIFt2YWxzdGFja190b3AsdmFsc3Rh Y2tfYWxsb2NfZW5kWyBhcmUgaW5pdGlhbGl6ZWQKKwkJICogdG8gJ3VuZGVmaW5lZCcgc28gd2Ug Y2FuIGp1c3QgbW92ZSB0aGUgZW5kIHBvaW50ZXIuCisJCSAqLworCQl0aHItPnZhbHN0YWNrX2Vu ZCA9IHR2OworCQlyZXR1cm47CisJfQorCSh2b2lkKSBkdWtfX3ZhbHN0YWNrX2dyb3codGhyLCBt aW5fYnl0ZXMsIDEgLyp0aHJvd19vbl9lcnJvciovKTsKK30KKworLyogSG90LCBpbmxpbmVkIHZh bHVlIHN0YWNrIGdyb3cgY2hlY2sgd2hpY2ggZG9lc24ndCB0aHJvdy4gKi8KK0RVS19JTlRFUk5B TCBEVUtfSU5MSU5FIGR1a19ib29sX3QgZHVrX3ZhbHN0YWNrX2dyb3dfY2hlY2tfbm90aHJvdyhk dWtfaHRocmVhZCAqdGhyLCBkdWtfc2l6ZV90IG1pbl9ieXRlcykgeworCWR1a190dmFsICp0djsK KworCXR2ID0gKGR1a190dmFsICopICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxz dGFjayArIG1pbl9ieXRlcyk7CisJaWYgKERVS19MSUtFTFkodGhyLT52YWxzdGFja19lbmQgPj0g dHYpKSB7CisJCXJldHVybiAxOworCX0KKwlpZiAoRFVLX0xJS0VMWSh0aHItPnZhbHN0YWNrX2Fs bG9jX2VuZCA+PSB0dikpIHsKKwkJdGhyLT52YWxzdGFja19lbmQgPSB0djsKKwkJcmV0dXJuIDE7 CisJfQorCXJldHVybiBkdWtfX3ZhbHN0YWNrX2dyb3codGhyLCBtaW5fYnl0ZXMsIDAgLyp0aHJv d19vbl9lcnJvciovKTsKK30KKworLyogVmFsdWUgc3RhY2sgc2hyaW5rIGNoZWNrLCBjYWxsZWQg ZnJvbSBtYXJrLWFuZC1zd2VlcC4gKi8KK0RVS19JTlRFUk5BTCB2b2lkIGR1a192YWxzdGFja19z aHJpbmtfY2hlY2tfbm90aHJvdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfYm9vbF90IHNudWcpIHsK KwlkdWtfc2l6ZV90IGFsbG9jX2J5dGVzOworCWR1a19zaXplX3QgcmVzZXJ2ZV9ieXRlczsKKwlk dWtfc2l6ZV90IHNocmlua19ieXRlczsKKworCWFsbG9jX2J5dGVzID0gKGR1a19zaXplX3QpICgo ZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19hbGxvY19lbmQgLSAoZHVrX3VpbnQ4X3QgKikg dGhyLT52YWxzdGFjayk7CisJcmVzZXJ2ZV9ieXRlcyA9IChkdWtfc2l6ZV90KSAoKGR1a191aW50 OF90ICopIHRoci0+dmFsc3RhY2tfZW5kIC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2sp OworCURVS19BU1NFUlQoYWxsb2NfYnl0ZXMgPj0gcmVzZXJ2ZV9ieXRlcyk7CisKKwkvKiBXZSdy ZSBmcmVlIHRvIHNocmluayB0aGUgdmFsdWUgc3RhY2sgYWxsb2NhdGlvbiBkb3duIHRvCisJICog cmVzZXJ2ZV9ieXRlcyBidXQgbm90IG1vcmUuICBJZiAnc251ZycgKGVtZXJnZW5jeSBHQykKKwkg KiBzaHJpbmsgd2hhdGV2ZXIgd2UgY2FuLiAgT3RoZXJ3aXNlIG9ubHkgc2hyaW5rIGlmIHRoZSBu ZXcKKwkgKiBzaXplIHdvdWxkIGJlIGNvbnNpZGVyYWJseSBzbWFsbGVyLgorCSAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX1ZBTFNUQUNLX1NIUklOS19DSEVDS19TSElGVCkKKwlpZiAoc251Zykg eworCQlzaHJpbmtfYnl0ZXMgPSByZXNlcnZlX2J5dGVzOworCX0gZWxzZSB7CisJCWR1a19zaXpl X3QgcHJvcG9ydGlvbiwgc2xhY2s7CisKKwkJLyogUmVxdWlyZSB0aGF0IHZhbHVlIHN0YWNrIHNo cmlua3MgYnkgYXQgbGVhc3QgWCUgb2YgaXRzCisJCSAqIGN1cnJlbnQgc2l6ZS4gIEZvciBleGFt cGxlLCBzaGlmdCBvZiAyIG1lYW5zIGF0IGxlYXN0CisJCSAqIDI1JS4gIFRoZSBwcm9wb3J0aW9u IGlzIGNvbXB1dGVkIGFzIGJ5dGVzIGFuZCBtYXkgbm90CisJCSAqIGJlIGEgbXVsdGlwbGUgb2Yg c2l6ZW9mKGR1a190dmFsKTsgdGhhdCdzIE9LIGhlcmUuCisJCSAqLworCQlwcm9wb3J0aW9uID0g YWxsb2NfYnl0ZXMgPj4gRFVLX1VTRV9WQUxTVEFDS19TSFJJTktfQ0hFQ0tfU0hJRlQ7CisJCWlm IChhbGxvY19ieXRlcyAtIHJlc2VydmVfYnl0ZXMgPCBwcm9wb3J0aW9uKSB7CisJCQkvKiBUb28g bGl0dGxlIHdvdWxkIGJlIGZyZWVkLCBkbyBub3RoaW5nLiAqLworCQkJcmV0dXJuOworCQl9CisK KwkJLyogS2VlcCBhIHNsYWNrIGFmdGVyIHNocmlua2luZy4gIFRoZSBzbGFjayBpcyBhZ2FpbiBh CisJCSAqIHByb3BvcnRpb24gb2YgdGhlIGN1cnJlbnQgc2l6ZSAodGhlIHByb3BvcnRpb24gc2hv dWxkCisJCSAqIG9mIGNvdXJzZSBiZSBzbWFsbGVyIHRoYW4gdGhlIGNoZWNrIHByb3BvcnRpb24g YWJvdmUpLgorCQkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfVkFMU1RBQ0tfU0hSSU5LX1NMQUNL X1NISUZUKQorCQlEVUtfQVNTRVJUKERVS19VU0VfVkFMU1RBQ0tfU0hSSU5LX1NMQUNLX1NISUZU ID4gRFVLX1VTRV9WQUxTVEFDS19TSFJJTktfQ0hFQ0tfU0hJRlQpOworCQlzbGFjayA9IGFsbG9j X2J5dGVzID4+IERVS19VU0VfVkFMU1RBQ0tfU0hSSU5LX1NMQUNLX1NISUZUOworI2Vsc2UKKwkJ c2xhY2sgPSAwOworI2VuZGlmCisJCXNocmlua19ieXRlcyA9IHJlc2VydmVfYnl0ZXMgKworCQkg ICAgICAgICAgICAgICBzbGFjayAvIHNpemVvZihkdWtfdHZhbCkgKiBzaXplb2YoZHVrX3R2YWwp OyAgLyogbXVsdGlwbGUgb2YgZHVrX3R2YWwgKi8KKwl9CisjZWxzZSAgLyogRFVLX1VTRV9WQUxT VEFDS19TSFJJTktfQ0hFQ0tfU0hJRlQgKi8KKwkvKiBBbHdheXMgc251ZywgdXNlZnVsIGluIHNv bWUgbG93IG1lbW9yeSBlbnZpcm9ubWVudHMuICovCisJRFVLX1VOUkVGKHNudWcpOworCXNocmlu a19ieXRlcyA9IHJlc2VydmVfYnl0ZXM7CisjZW5kaWYgIC8qIERVS19VU0VfVkFMU1RBQ0tfU0hS SU5LX0NIRUNLX1NISUZUICovCisKKwlEVUtfRChEVUtfRFBSSU5UKCJ2YWxzdGFjayBzaHJpbmsg Y2hlY2s6IGFsbG9jX2J5dGVzPSVsZCwgcmVzZXJ2ZV9ieXRlcz0lbGQsIHNocmlua19ieXRlcz0l bGQgKHVudmFsaWRhdGVkKSIsCisJICAgICAgICAgICAgICAgICAobG9uZykgYWxsb2NfYnl0ZXMs IChsb25nKSByZXNlcnZlX2J5dGVzLCAobG9uZykgc2hyaW5rX2J5dGVzKSk7CisJRFVLX0FTU0VS VChzaHJpbmtfYnl0ZXMgPj0gcmVzZXJ2ZV9ieXRlcyk7CisJaWYgKHNocmlua19ieXRlcyA+PSBh bGxvY19ieXRlcykgeworCQkvKiBTa2lwIGlmIHNocmluayB0YXJnZXQgaXMgc2FtZSBhcyBjdXJy ZW50IG9uZSAob3IgaGlnaGVyLAorCQkgKiB0aG91Z2ggdGhhdCBzaG91bGRuJ3QgaGFwcGVuIGlu IHByYWN0aWNlKS4KKwkJICovCisJCXJldHVybjsKKwl9CisJRFVLX0FTU0VSVChzaHJpbmtfYnl0 ZXMgLyBzaXplb2YoZHVrX3R2YWwpICogc2l6ZW9mKGR1a190dmFsKSA9PSBzaHJpbmtfYnl0ZXMp OworCisJRFVLX0QoRFVLX0RQUklOVCgidmFsc3RhY2sgc2hyaW5rIGNoZWNrOiBkZWNpZGVkIHRv IHNocmluaywgc251ZzogJWxkIiwgKGxvbmcpIHNudWcpKTsKKworCWR1a19fcmVzaXplX3ZhbHN0 YWNrKHRociwgc2hyaW5rX2J5dGVzIC8gc2l6ZW9mKGR1a190dmFsKSk7Cit9CisKK0RVS19FWFRF Uk5BTCBkdWtfYm9vbF90IGR1a19jaGVja19zdGFjayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4 X3QgZXh0cmEpIHsKKwlkdWtfc2l6ZV90IG1pbl9uZXdfYnl0ZXM7CisKKwlEVUtfQVNTRVJUX0FQ SV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJaWYgKERVS19VTkxJ S0VMWShleHRyYSA8IDAgfHwgZXh0cmEgPiBEVUtfVVNFX1ZBTFNUQUNLX0xJTUlUKSkgeworCQlp ZiAoZXh0cmEgPCAwKSB7CisJCQkvKiBDbGFtcGluZyB0byB6ZXJvIG1ha2VzIHRoZSBBUEkgbW9y ZSByb2J1c3QgdG8gY2FsbGluZyBjb2RlCisJCQkgKiBjYWxjdWxhdGlvbiBlcnJvcnMuCisJCQkg Ki8KKwkJCWV4dHJhID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIENhdXNlIGdyb3cgY2hlY2sgdG8g ZmFpbCB3aXRob3V0IHdyYXBwaW5nIGFyaXRobWV0aWMuICovCisJCQlleHRyYSA9IERVS19VU0Vf VkFMU1RBQ0tfTElNSVQ7CisJCX0KKwl9CisKKwltaW5fbmV3X2J5dGVzID0gKGR1a19zaXplX3Qp ICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja190b3AgLSAoZHVrX3VpbnQ4X3QgKikgdGhy LT52YWxzdGFjaykgKworCSAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3R2YWwpICogKChkdWtf c2l6ZV90KSBleHRyYSArIERVS19WQUxTVEFDS19JTlRFUk5BTF9FWFRSQSk7CisJcmV0dXJuIGR1 a192YWxzdGFja19ncm93X2NoZWNrX25vdGhyb3codGhyLCBtaW5fbmV3X2J5dGVzKTsKK30KKwor RFVLX0VYVEVSTkFMIHZvaWQgZHVrX3JlcXVpcmVfc3RhY2soZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGV4dHJhKSB7CisJZHVrX3NpemVfdCBtaW5fbmV3X2J5dGVzOworCisJRFVLX0FTU0VS VF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKworCWlmIChEVUtf VU5MSUtFTFkoZXh0cmEgPCAwIHx8IGV4dHJhID4gRFVLX1VTRV9WQUxTVEFDS19MSU1JVCkpIHsK KwkJaWYgKGV4dHJhIDwgMCkgeworCQkJLyogQ2xhbXBpbmcgdG8gemVybyBtYWtlcyB0aGUgQVBJ IG1vcmUgcm9idXN0IHRvIGNhbGxpbmcgY29kZQorCQkJICogY2FsY3VsYXRpb24gZXJyb3JzLgor CQkJICovCisJCQlleHRyYSA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiBDYXVzZSBncm93IGNoZWNr IHRvIGZhaWwgd2l0aG91dCB3cmFwcGluZyBhcml0aG1ldGljLiAqLworCQkJZXh0cmEgPSBEVUtf VVNFX1ZBTFNUQUNLX0xJTUlUOworCQl9CisJfQorCisJbWluX25ld19ieXRlcyA9IChkdWtfc2l6 ZV90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfdG9wIC0gKGR1a191aW50OF90ICop IHRoci0+dmFsc3RhY2spICsKKwkgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a190dmFsKSAqICgo ZHVrX3NpemVfdCkgZXh0cmEgKyBEVUtfVkFMU1RBQ0tfSU5URVJOQUxfRVhUUkEpOworCWR1a192 YWxzdGFja19ncm93X2NoZWNrX3Rocm93KHRociwgbWluX25ld19ieXRlcyk7Cit9CisKK0RVS19F WFRFUk5BTCBkdWtfYm9vbF90IGR1a19jaGVja19zdGFja190b3AoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IHRvcCkgeworCWR1a19zaXplX3QgbWluX25ld19ieXRlczsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisKKwlpZiAoRFVLX1VOTElLRUxZKHRvcCA8IDAgfHwgdG9wID4g RFVLX1VTRV9WQUxTVEFDS19MSU1JVCkpIHsKKwkJaWYgKHRvcCA8IDApIHsKKwkJCS8qIENsYW1w aW5nIHRvIHplcm8gbWFrZXMgdGhlIEFQSSBtb3JlIHJvYnVzdCB0byBjYWxsaW5nIGNvZGUKKwkJ CSAqIGNhbGN1bGF0aW9uIGVycm9ycy4KKwkJCSAqLworCQkJdG9wID0gMDsKKwkJfSBlbHNlIHsK KwkJCS8qIENhdXNlIGdyb3cgY2hlY2sgdG8gZmFpbCB3aXRob3V0IHdyYXBwaW5nIGFyaXRobWV0 aWMuICovCisJCQl0b3AgPSBEVUtfVVNFX1ZBTFNUQUNLX0xJTUlUOworCQl9CisJfQorCisJRFVL X0FTU0VSVCh0b3AgPj0gMCk7CisJbWluX25ld19ieXRlcyA9IChkdWtfc2l6ZV90KSAoKGR1a191 aW50OF90ICopIHRoci0+dmFsc3RhY2tfYm90dG9tIC0gKGR1a191aW50OF90ICopIHRoci0+dmFs c3RhY2spICsKKwkgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a190dmFsKSAqICgoZHVrX3NpemVf dCkgdG9wICsgRFVLX1ZBTFNUQUNLX0lOVEVSTkFMX0VYVFJBKTsKKwlyZXR1cm4gZHVrX3ZhbHN0 YWNrX2dyb3dfY2hlY2tfbm90aHJvdyh0aHIsIG1pbl9uZXdfYnl0ZXMpOworfQorCitEVUtfRVhU RVJOQUwgdm9pZCBkdWtfcmVxdWlyZV9zdGFja190b3AoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IHRvcCkgeworCWR1a19zaXplX3QgbWluX25ld19ieXRlczsKKworCURVS19BU1NFUlRfQVBJ X0VOVFJZKHRocik7CisKKwlpZiAoRFVLX1VOTElLRUxZKHRvcCA8IDAgfHwgdG9wID4gRFVLX1VT RV9WQUxTVEFDS19MSU1JVCkpIHsKKwkJaWYgKHRvcCA8IDApIHsKKwkJCS8qIENsYW1waW5nIHRv IHplcm8gbWFrZXMgdGhlIEFQSSBtb3JlIHJvYnVzdCB0byBjYWxsaW5nIGNvZGUKKwkJCSAqIGNh bGN1bGF0aW9uIGVycm9ycy4KKwkJCSAqLworCQkJdG9wID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8q IENhdXNlIGdyb3cgY2hlY2sgdG8gZmFpbCB3aXRob3V0IHdyYXBwaW5nIGFyaXRobWV0aWMuICov CisJCQl0b3AgPSBEVUtfVVNFX1ZBTFNUQUNLX0xJTUlUOworCQl9CisJfQorCisJRFVLX0FTU0VS VCh0b3AgPj0gMCk7CisJbWluX25ld19ieXRlcyA9IChkdWtfc2l6ZV90KSAoKGR1a191aW50OF90 ICopIHRoci0+dmFsc3RhY2tfYm90dG9tIC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2sp ICsKKwkgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a190dmFsKSAqICgoZHVrX3NpemVfdCkgdG9w ICsgRFVLX1ZBTFNUQUNLX0lOVEVSTkFMX0VYVFJBKTsKKwlkdWtfdmFsc3RhY2tfZ3Jvd19jaGVj a190aHJvdyh0aHIsIG1pbl9uZXdfYnl0ZXMpOworfQorCisvKgorICogIEJhc2ljIHN0YWNrIG1h bmlwdWxhdGlvbjogc3dhcCwgZHVwLCBpbnNlcnQsIHJlcGxhY2UsIGV0YworICovCisKK0RVS19F WFRFUk5BTCB2b2lkIGR1a19zd2FwKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgxLCBk dWtfaWR4X3QgaWR4MikgeworCWR1a190dmFsICp0djE7CisJZHVrX3R2YWwgKnR2MjsKKwlkdWtf dHZhbCB0dl90bXA7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYxID0gZHVr X3JlcXVpcmVfdHZhbCh0aHIsIGlkeDEpOworCURVS19BU1NFUlQodHYxICE9IE5VTEwpOworCXR2 MiA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCBpZHgyKTsKKwlEVUtfQVNTRVJUKHR2MiAhPSBOVUxM KTsKKworCS8qIElmIHR2MT09dHYyIHRoaXMgaXMgYSBOT1AsIG5vIGNoZWNrIGlzIG5lZWRlZCAq LworCURVS19UVkFMX1NFVF9UVkFMKCZ0dl90bXAsIHR2MSk7CisJRFVLX1RWQUxfU0VUX1RWQUwo dHYxLCB0djIpOworCURVS19UVkFMX1NFVF9UVkFMKHR2MiwgJnR2X3RtcCk7Cit9CisKK0RVS19F WFRFUk5BTCB2b2lkIGR1a19zd2FwX3RvcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4 KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWR1a19zd2FwKHRociwgaWR4LCAt MSk7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19kdXAoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGZyb21faWR4KSB7CisJZHVrX3R2YWwgKnR2X2Zyb207CisJZHVrX3R2YWwgKnR2X3Rv OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisK Kwl0dl9mcm9tID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGZyb21faWR4KTsKKwl0dl90byA9IHRo ci0+dmFsc3RhY2tfdG9wKys7CisJRFVLX0FTU0VSVCh0dl9mcm9tICE9IE5VTEwpOworCURVS19B U1NFUlQodHZfdG8gIT0gTlVMTCk7CisJRFVLX1RWQUxfU0VUX1RWQUwodHZfdG8sIHR2X2Zyb20p OworCURVS19UVkFMX0lOQ1JFRih0aHIsIHR2X3RvKTsgIC8qIG5vIHNpZGUgZWZmZWN0cyAqLwor fQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZHVwX3RvcChkdWtfaHRocmVhZCAqdGhyKSB7Cisj aWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCWR1a19kdXAodGhyLCAtMSk7CisjZWxz ZQorCWR1a190dmFsICp0dl9mcm9tOworCWR1a190dmFsICp0dl90bzsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisJRFVLX19DSEVDS19TUEFDRSgpOworCisJaWYgKERVS19VTkxJS0VM WSh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tIDw9IDApKSB7CisJCURV S19FUlJPUl9SQU5HRV9JTkRFWCh0aHIsIC0xKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjsp OworCX0KKwl0dl9mcm9tID0gdGhyLT52YWxzdGFja190b3AgLSAxOworCXR2X3RvID0gdGhyLT52 YWxzdGFja190b3ArKzsKKwlEVUtfQVNTRVJUKHR2X2Zyb20gIT0gTlVMTCk7CisJRFVLX0FTU0VS VCh0dl90byAhPSBOVUxMKTsKKwlEVUtfVFZBTF9TRVRfVFZBTCh0dl90bywgdHZfZnJvbSk7CisJ RFVLX1RWQUxfSU5DUkVGKHRociwgdHZfdG8pOyAgLyogbm8gc2lkZSBlZmZlY3RzICovCisjZW5k aWYKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2R1cF8wKGR1a19odGhyZWFkICp0aHIpIHsK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCWR1a19kdXAodGhyLCAwKTsKK30KK0RVS19J TlRFUk5BTCB2b2lkIGR1a19kdXBfMShkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKwlkdWtfZHVwKHRociwgMSk7Cit9CitEVUtfSU5URVJOQUwgdm9pZCBk dWtfZHVwXzIoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7 CisJZHVrX2R1cCh0aHIsIDIpOworfQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2R1cF9tMihkdWtf aHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlkdWtfZHVwKHRo ciwgLTIpOworfQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2R1cF9tMyhkdWtfaHRocmVhZCAqdGhy KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlkdWtfZHVwKHRociwgLTMpOworfQor RFVLX0lOVEVSTkFMIHZvaWQgZHVrX2R1cF9tNChkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKwlkdWtfZHVwKHRociwgLTQpOworfQorCitEVUtfRVhURVJO QUwgdm9pZCBkdWtfaW5zZXJ0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCB0b19pZHgpIHsK KwlkdWtfdHZhbCAqcDsKKwlkdWtfdHZhbCAqcTsKKwlkdWtfdHZhbCB0dl90bXA7CisJZHVrX3Np emVfdCBuYnl0ZXM7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcCA9IGR1a19y ZXF1aXJlX3R2YWwodGhyLCB0b19pZHgpOworCURVS19BU1NFUlQocCAhPSBOVUxMKTsKKwlxID0g ZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKHEgIT0gTlVMTCk7CisKKwlE VUtfQVNTRVJUKHEgPj0gcCk7CisKKwkvKiAgICAgICAgICAgICAgbmJ5dGVzCisJICogICAgICAg ICAgIDwtLS0tLS0tLS0+CisJICogICAgWyAuLi4gfCBwIHwgeCB8IHggfCBxIF0KKwkgKiA9PiBb IC4uLiB8IHEgfCBwIHwgeCB8IHggXQorCSAqLworCisJbmJ5dGVzID0gKGR1a19zaXplX3QpICgo KGR1a191aW50OF90ICopIHEpIC0gKChkdWtfdWludDhfdCAqKSBwKSk7ICAvKiBOb3RlOiAncScg aXMgdG9wLTEgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJkdWtfaW5zZXJ0OiB0b19pZHg9 JWxkLCBwPSVwLCBxPSVwLCBuYnl0ZXM9JWx1IiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9u ZykgdG9faWR4LCAodm9pZCAqKSBwLCAodm9pZCAqKSBxLCAodW5zaWduZWQgbG9uZykgbmJ5dGVz KSk7CisKKwkvKiBObyBuZXQgcmVmY291bnQgY2hhbmdlcy4gIE5vIG5lZWQgdG8gc3BlY2lhbCBj YXNlIG5ieXRlcyA9PSAwCisJICogKHAgPT0gcSkuCisJICovCisJRFVLX1RWQUxfU0VUX1RWQUwo JnR2X3RtcCwgcSk7CisJZHVrX21lbW1vdmUoKHZvaWQgKikgKHAgKyAxKSwgKGNvbnN0IHZvaWQg KikgcCwgKHNpemVfdCkgbmJ5dGVzKTsKKwlEVUtfVFZBTF9TRVRfVFZBTChwLCAmdHZfdG1wKTsK K30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2luc2VydF91bmRlZmluZWQoZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVL X0FTU0VSVChpZHggPj0gMCk7ICAvKiBEb2Vzbid0IHN1cHBvcnQgbmVnYXRpdmUgaW5kaWNlcy4g Ki8KKworCWR1a19wdXNoX3VuZGVmaW5lZCh0aHIpOworCWR1a19pbnNlcnQodGhyLCBpZHgpOwor fQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaW5zZXJ0X3VuZGVmaW5lZF9uKGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19pZHhfdCBjb3VudCkgeworCWR1a190dmFsICp0diwg KnR2X2VuZDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChpZHgg Pj0gMCk7ICAvKiBEb2Vzbid0IHN1cHBvcnQgbmVnYXRpdmUgaW5kaWNlcyBvciBjb3VudC4gKi8K KwlEVUtfQVNTRVJUKGNvdW50ID49IDApOworCisJdHYgPSBkdWtfcmVzZXJ2ZV9nYXAodGhyLCBp ZHgsIGNvdW50KTsKKwl0dl9lbmQgPSB0diArIGNvdW50OworCXdoaWxlICh0diAhPSB0dl9lbmQp IHsKKwkJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dik7CisJCXR2Kys7CisJfQorfQorCitEVUtf RVhURVJOQUwgdm9pZCBkdWtfcmVwbGFjZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgdG9f aWR4KSB7CisJZHVrX3R2YWwgKnR2MTsKKwlkdWtfdHZhbCAqdHYyOworCWR1a190dmFsIHR2X3Rt cDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0djEgPSBkdWtfcmVxdWlyZV90 dmFsKHRociwgLTEpOworCURVS19BU1NFUlQodHYxICE9IE5VTEwpOworCXR2MiA9IGR1a19yZXF1 aXJlX3R2YWwodGhyLCB0b19pZHgpOworCURVS19BU1NFUlQodHYyICE9IE5VTEwpOworCisJLyog Rm9yIHR2MSA9PSB0djIsIGJvdGggcG9pbnRpbmcgdG8gc3RhY2sgdG9wLCB0aGUgZW5kIHJlc3Vs dAorCSAqIGlzIHNhbWUgYXMgZHVrX3BvcCh0aHIpLgorCSAqLworCURVS19UVkFMX1NFVF9UVkFM KCZ0dl90bXAsIHR2Mik7CisJRFVLX1RWQUxfU0VUX1RWQUwodHYyLCB0djEpOworCURVS19UVkFM X1NFVF9VTkRFRklORUQodHYxKTsKKwl0aHItPnZhbHN0YWNrX3RvcC0tOworCURVS19UVkFMX0RF Q1JFRih0aHIsICZ0dl90bXApOyAgLyogc2lkZSBlZmZlY3RzICovCit9CisKK0RVS19FWFRFUk5B TCB2b2lkIGR1a19jb3B5KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBmcm9tX2lkeCwgZHVr X2lkeF90IHRvX2lkeCkgeworCWR1a190dmFsICp0djE7CisJZHVrX3R2YWwgKnR2MjsKKworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0djEgPSBkdWtfcmVxdWlyZV90dmFsKHRociwg ZnJvbV9pZHgpOworCURVS19BU1NFUlQodHYxICE9IE5VTEwpOworCXR2MiA9IGR1a19yZXF1aXJl X3R2YWwodGhyLCB0b19pZHgpOworCURVS19BU1NFUlQodHYyICE9IE5VTEwpOworCisJLyogRm9y IHR2MSA9PSB0djIsIHRoaXMgaXMgYSBuby1vcCAobm8gZXhwbGljaXQgY2hlY2sgbmVlZGVkKS4g Ki8KKwlEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUYodGhyLCB0djIsIHR2MSk7ICAvKiBzaWRlIGVm ZmVjdHMgKi8KK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3JlbW92ZShkdWtfaHRocmVhZCAq dGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwgKnA7CisJZHVrX3R2YWwgKnE7CisjaWYg ZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwlkdWtfdHZhbCB0dl90bXA7Cisj ZW5kaWYKKwlkdWtfc2l6ZV90IG5ieXRlczsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7 CisKKwlwID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVChwICE9IE5V TEwpOworCXEgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgLTEpOworCURVS19BU1NFUlQocSAhPSBO VUxMKTsKKworCURVS19BU1NFUlQocSA+PSBwKTsKKworCS8qICAgICAgICAgICAgICBuYnl0ZXMg ICAgICAgICAgICB6ZXJvIHNpemUgY2FzZQorCSAqICAgICAgICAgICA8LS0tLS0tLS0tPgorCSAq ICAgIFsgLi4uIHwgcCB8IHggfCB4IHwgcSBdICAgICBbIC4uLiB8IHA9PXEgXQorCSAqID0+IFsg Li4uIHwgeCB8IHggfCBxIF0gICAgICAgICBbIC4uLiBdCisJICovCisKKyNpZiBkZWZpbmVkKERV S19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCS8qIHVzZSBhIHRlbXA6IGRlY3JlZiBvbmx5IHdo ZW4gdmFsc3RhY2sgcmVhY2hhYmxlIHZhbHVlcyBhcmUgY29ycmVjdCAqLworCURVS19UVkFMX1NF VF9UVkFMKCZ0dl90bXAsIHApOworI2VuZGlmCisKKwluYnl0ZXMgPSAoZHVrX3NpemVfdCkgKCgo ZHVrX3VpbnQ4X3QgKikgcSkgLSAoKGR1a191aW50OF90ICopIHApKTsgIC8qIE5vdGU6ICdxJyBp cyB0b3AtMSAqLworCWR1a19tZW1tb3ZlKCh2b2lkICopIHAsIChjb25zdCB2b2lkICopIChwICsg MSksIChzaXplX3QpIG5ieXRlcyk7CisKKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKHEpOworCXRo ci0+dmFsc3RhY2tfdG9wLS07CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5U SU5HKQorCURVS19UVkFMX0RFQ1JFRih0aHIsICZ0dl90bXApOyAgLyogc2lkZSBlZmZlY3RzICov CisjZW5kaWYKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3JlbW92ZV91bnNhZmUoZHVrX2h0 aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7 CisKKwlkdWtfcmVtb3ZlKHRociwgaWR4KTsgIC8qIFhYWDogbm8gb3B0aW1pemF0aW9uIGZvciBu b3cgKi8KK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3JlbW92ZV9tMihkdWtfaHRocmVhZCAq dGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWR1a19yZW1vdmUodGhyLCAt Mik7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19yZW1vdmVfbihkdWtfaHRocmVhZCAqdGhy LCBkdWtfaWR4X3QgaWR4LCBkdWtfaWR4X3QgY291bnQpIHsKKyNpZiBkZWZpbmVkKERVS19VU0Vf UFJFRkVSX1NJWkUpCisJLyogWFhYOiBtYXliZSB0b28gc2xvdyBldmVuIHdoZW4gcHJlZmVycmlu ZyBzaXplPyAqLworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChjb3Vu dCA+PSAwKTsKKwlEVUtfQVNTRVJUKGlkeCA+PSAwKTsKKworCXdoaWxlIChjb3VudC0tID4gMCkg eworCQlkdWtfcmVtb3ZlKHRociwgaWR4KTsKKwl9CisjZWxzZSAgLyogRFVLX1VTRV9QUkVGRVJf U0laRSAqLworCWR1a190dmFsICp0dl9zcmM7CisJZHVrX3R2YWwgKnR2X2RzdDsKKwlkdWtfdHZh bCAqdHZfbmV3dG9wOworCWR1a190dmFsICp0djsKKwlkdWtfc2l6ZV90IGJ5dGVzOworCisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKGNvdW50ID49IDApOworCURVS19B U1NFUlQoaWR4ID49IDApOworCisJdHZfZHN0ID0gdGhyLT52YWxzdGFja19ib3R0b20gKyBpZHg7 CisJRFVLX0FTU0VSVCh0dl9kc3QgPD0gdGhyLT52YWxzdGFja190b3ApOworCXR2X3NyYyA9IHR2 X2RzdCArIGNvdW50OworCURVS19BU1NFUlQodHZfc3JjIDw9IHRoci0+dmFsc3RhY2tfdG9wKTsK KwlieXRlcyA9IChkdWtfc2l6ZV90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfdG9w IC0gKGR1a191aW50OF90ICopIHR2X3NyYyk7CisKKwlmb3IgKHR2ID0gdHZfZHN0OyB0diA8IHR2 X3NyYzsgdHYrKykgeworCQlEVUtfVFZBTF9ERUNSRUZfTk9SWih0aHIsIHR2KTsKKwl9CisKKwlk dWtfbWVtbW92ZSgodm9pZCAqKSB0dl9kc3QsIChjb25zdCB2b2lkICopIHR2X3NyYywgYnl0ZXMp OworCisJdHZfbmV3dG9wID0gdGhyLT52YWxzdGFja190b3AgLSBjb3VudDsKKwlmb3IgKHR2ID0g dHZfbmV3dG9wOyB0diA8IHRoci0+dmFsc3RhY2tfdG9wOyB0disrKSB7CisJCURVS19UVkFMX1NF VF9VTkRFRklORUQodHYpOworCX0KKwl0aHItPnZhbHN0YWNrX3RvcCA9IHR2X25ld3RvcDsKKwor CS8qIFdoZW4gbm90IHByZWZlcnJpbmcgc2l6ZSwgb25seSBOT1JaIG1hY3JvcyBhcmUgdXNlZDsg Y2FsbGVyCisJICogaXMgZXhwZWN0ZWQgdG8gRFVLX1JFRlpFUk9fQ0hFQ0soKS4KKwkgKi8KKyNl bmRpZiAgLyogRFVLX1VTRV9QUkVGRVJfU0laRSAqLworfQorCitEVUtfSU5URVJOQUwgdm9pZCBk dWtfcmVtb3ZlX25fdW5zYWZlKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19p ZHhfdCBjb3VudCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlkdWtfcmVtb3Zl X24odGhyLCBpZHgsIGNvdW50KTsgIC8qIFhYWDogbm8gb3B0aW1pemF0aW9uIGZvciBub3cgKi8K K30KKworLyoKKyAqICBTdGFjayBzbGljZSBwcmltaXRpdmVzCisgKi8KKworRFVLX0VYVEVSTkFM IHZvaWQgZHVrX3hjb3B5bW92ZV9yYXcoZHVrX2h0aHJlYWQgKnRvX3RociwgZHVrX2h0aHJlYWQg KmZyb21fdGhyLCBkdWtfaWR4X3QgY291bnQsIGR1a19ib29sX3QgaXNfY29weSkgeworCXZvaWQg KnNyYzsKKwlkdWtfc2l6ZV90IG5ieXRlczsKKwlkdWtfdHZhbCAqcDsKKwlkdWtfdHZhbCAqcTsK KworCS8qIFhYWDogc2V2ZXJhbCBwb2ludGVyIGNvbXBhcmlzb24gaXNzdWVzIGhlcmUgKi8KKwor CURVS19BU1NFUlRfQVBJX0VOVFJZKHRvX3Rocik7CisJRFVLX0FTU0VSVF9DVFhfVkFMSUQodG9f dGhyKTsKKwlEVUtfQVNTRVJUX0NUWF9WQUxJRChmcm9tX3Rocik7CisJRFVLX0FTU0VSVCh0b190 aHItPmhlYXAgPT0gZnJvbV90aHItPmhlYXApOworCisJaWYgKERVS19VTkxJS0VMWSh0b190aHIg PT0gZnJvbV90aHIpKSB7CisJCURVS19FUlJPUl9UWVBFKHRvX3RociwgRFVLX1NUUl9JTlZBTElE X0NPTlRFWFQpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCWlmIChEVUtfVU5M SUtFTFkoKGR1a191aWR4X3QpIGNvdW50ID4gKGR1a191aWR4X3QpIERVS19VU0VfVkFMU1RBQ0tf TElNSVQpKSB7CisJCS8qIE1heGltdW0gdmFsdWUgY2hlY2sgZW5zdXJlcyAnbmJ5dGVzJyB3b24n dCB3cmFwIGJlbG93LgorCQkgKiBBbHNvIGhhbmRsZXMgbmVnYXRpdmUgY291bnQuCisJCSAqLwor CQlEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9DT1VOVCh0b190aHIpOworCQlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuOyk7CisJfQorCURVS19BU1NFUlQoY291bnQgPj0gMCk7CisKKwluYnl0ZXMgPSBz aXplb2YoZHVrX3R2YWwpICogKGR1a19zaXplX3QpIGNvdW50OworCWlmIChEVUtfVU5MSUtFTFko bmJ5dGVzID09IDApKSB7CisJCXJldHVybjsKKwl9CisJRFVLX0FTU0VSVCh0b190aHItPnZhbHN0 YWNrX3RvcCA8PSB0b190aHItPnZhbHN0YWNrX2VuZCk7CisJaWYgKERVS19VTkxJS0VMWSgoZHVr X3NpemVfdCkgKChkdWtfdWludDhfdCAqKSB0b190aHItPnZhbHN0YWNrX2VuZCAtIChkdWtfdWlu dDhfdCAqKSB0b190aHItPnZhbHN0YWNrX3RvcCkgPCBuYnl0ZXMpKSB7CisJCURVS19FUlJPUl9S QU5HRV9QVVNIX0JFWU9ORCh0b190aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJ fQorCXNyYyA9ICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgZnJvbV90aHItPnZhbHN0YWNrX3Rv cCAtIG5ieXRlcyk7CisJaWYgKERVS19VTkxJS0VMWShzcmMgPCAodm9pZCAqKSBmcm9tX3Roci0+ dmFsc3RhY2tfYm90dG9tKSkgeworCQlEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9DT1VOVCh0b190 aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJLyogQ29weSB2YWx1ZXMg KG5vIG92ZXJsYXAgZXZlbiBpZiB0b190aHIgPT0gZnJvbV90aHI7IHRoYXQncyBub3QKKwkgKiBh bGxvd2VkIG5vdyBhbnl3YXkpLgorCSAqLworCURVS19BU1NFUlQobmJ5dGVzID4gMCk7CisJZHVr X21lbWNweSgodm9pZCAqKSB0b190aHItPnZhbHN0YWNrX3RvcCwgKGNvbnN0IHZvaWQgKikgc3Jj LCAoc2l6ZV90KSBuYnl0ZXMpOworCisJcCA9IHRvX3Roci0+dmFsc3RhY2tfdG9wOworCXRvX3Ro ci0+dmFsc3RhY2tfdG9wID0gKGR1a190dmFsICopICh2b2lkICopICgoKGR1a191aW50OF90ICop IHApICsgbmJ5dGVzKTsKKworCWlmIChpc19jb3B5KSB7CisJCS8qIEluY3JlZiBjb3BpZXMsIGtl ZXAgb3JpZ2luYWxzLiAqLworCQlxID0gdG9fdGhyLT52YWxzdGFja190b3A7CisJCXdoaWxlIChw IDwgcSkgeworCQkJRFVLX1RWQUxfSU5DUkVGKHRvX3RociwgcCk7ICAvKiBubyBzaWRlIGVmZmVj dHMgKi8KKwkJCXArKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE5vIG5ldCByZWZjb3VudCBjaGFu Z2UuICovCisJCXAgPSBmcm9tX3Roci0+dmFsc3RhY2tfdG9wOworCQlxID0gKGR1a190dmFsICop ICh2b2lkICopICgoKGR1a191aW50OF90ICopIHApIC0gbmJ5dGVzKTsKKwkJZnJvbV90aHItPnZh bHN0YWNrX3RvcCA9IHE7CisKKwkJd2hpbGUgKHAgPiBxKSB7CisJCQlwLS07CisJCQlEVUtfVFZB TF9TRVRfVU5ERUZJTkVEKHApOworCQkJLyogWFhYOiBmYXN0IHByaW1pdGl2ZSB0byBzZXQgYSBi dW5jaCBvZiB2YWx1ZXMgdG8gVU5ERUZJTkVEICovCisJCX0KKwl9Cit9CisKKy8qIEludGVybmFs IGhlbHBlcjogcmVzZXJ2ZSBhIGdhcCBvZiAnY291bnQnIGVsZW1lbnRzIGF0ICdpZHhfYmFzZScg YW5kIHJldHVybiBhCisgKiBwb2ludGVyIHRvIHRoZSBnYXAuICBWYWx1ZXMgaW4gdGhlIGdhcCBh cmUgZ2FyYmFnZSBhbmQgTVVTVCBiZSBpbml0aWFsaXplZCBieQorICogdGhlIGNhbGxlciBiZWZv cmUgYW55IHNpZGUgZWZmZWN0cyBtYXkgb2NjdXIuICBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRo ZXJlJ3MKKyAqIGVub3VnaCBzdGFjayByZXNlcnZlIGZvciAnY291bnQnIHZhbHVlcy4KKyAqLwor RFVLX0lOVEVSTkFMIGR1a190dmFsICpkdWtfcmVzZXJ2ZV9nYXAoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IGlkeF9iYXNlLCBkdWtfaWR4X3QgY291bnQpIHsKKwlkdWtfdHZhbCAqdHZfc3Jj OworCWR1a190dmFsICp0dl9kc3Q7CisJZHVrX3NpemVfdCBnYXBfYnl0ZXM7CisJZHVrX3NpemVf dCBjb3B5X2J5dGVzOworCisJLyogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0 aGVyZSdzIGVub3VnaCBwcmVhbGxvY2F0ZWQKKwkgKiB2YWx1ZSBzdGFjay4KKwkgKi8KKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoY291bnQgPj0gMCk7CisJRFVLX0FT U0VSVCgoZHVrX3NpemVfdCkgKHRoci0+dmFsc3RhY2tfZW5kIC0gdGhyLT52YWxzdGFja190b3Ap ID49IChkdWtfc2l6ZV90KSBjb3VudCk7CisKKwl0dl9zcmMgPSB0aHItPnZhbHN0YWNrX2JvdHRv bSArIGlkeF9iYXNlOworCWdhcF9ieXRlcyA9IChkdWtfc2l6ZV90KSBjb3VudCAqIHNpemVvZihk dWtfdHZhbCk7CisJdHZfZHN0ID0gKGR1a190dmFsICopICh2b2lkICopICgoZHVrX3VpbnQ4X3Qg KikgdHZfc3JjICsgZ2FwX2J5dGVzKTsKKwljb3B5X2J5dGVzID0gKGR1a19zaXplX3QpICgoZHVr X3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja190b3AgLSAoZHVrX3VpbnQ4X3QgKikgdHZfc3JjKTsK Kwl0aHItPnZhbHN0YWNrX3RvcCA9IChkdWtfdHZhbCAqKSAodm9pZCAqKSAoKGR1a191aW50OF90 ICopIHRoci0+dmFsc3RhY2tfdG9wICsgZ2FwX2J5dGVzKTsKKwlkdWtfbWVtbW92ZSgodm9pZCAq KSB0dl9kc3QsIChjb25zdCB2b2lkICopIHR2X3NyYywgY29weV9ieXRlcyk7CisKKwkvKiBWYWx1 ZXMgaW4gdGhlIGdhcCBhcmUgbGVmdCBhcyBnYXJiYWdlOiBjYWxsZXIgbXVzdCBmaWxsIHRoZW0g aW4KKwkgKiBhbmQgSU5DUkVGIHRoZW0gYmVmb3JlIGFueSBzaWRlIGVmZmVjdHMuCisJICovCisJ cmV0dXJuIHR2X3NyYzsKK30KKworLyoKKyAqICBHZXQvb3B0L3JlcXVpcmUKKyAqLworCitEVUtf RVhURVJOQUwgdm9pZCBkdWtfcmVxdWlyZV91bmRlZmluZWQoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGlkeCkgeworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwl0diA9IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOworCURVS19BU1NF UlQodHYgIT0gTlVMTCk7CisJaWYgKERVS19VTkxJS0VMWSghRFVLX1RWQUxfSVNfVU5ERUZJTkVE KHR2KSkpIHsKKwkJRFVLX0VSUk9SX1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgInVuZGVm aW5lZCIsIERVS19TVFJfTk9UX1VOREVGSU5FRCk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47 KTsKKwl9Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19yZXF1aXJlX251bGwoZHVrX2h0aHJl YWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisKKwl0diA9IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgp OworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisJaWYgKERVS19VTkxJS0VMWSghRFVLX1RWQUxf SVNfTlVMTCh0dikpKSB7CisJCURVS19FUlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgs ICJudWxsIiwgRFVLX1NUUl9OT1RfTlVMTCk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsK Kwl9Cit9CisKK0RVS19MT0NBTCBEVUtfQUxXQVlTX0lOTElORSBkdWtfYm9vbF90IGR1a19fZ2V0 X2Jvb2xlYW5fcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19ib29sX3Qg ZGVmX3ZhbHVlKSB7CisJZHVrX2Jvb2xfdCByZXQ7CisJZHVrX3R2YWwgKnR2OworCisJRFVLX0FT U0VSVF9DVFhfVkFMSUQodGhyKTsKKworCXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIs IGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKwlpZiAoRFVLX1RWQUxfSVNfQk9PTEVB Tih0dikpIHsKKwkJcmV0ID0gRFVLX1RWQUxfR0VUX0JPT0xFQU4odHYpOworCQlEVUtfQVNTRVJU KHJldCA9PSAwIHx8IHJldCA9PSAxKTsKKwl9IGVsc2UgeworCQlyZXQgPSBkZWZfdmFsdWU7CisJ CS8qIE5vdCBndWFyYW50ZWVkIHRvIGJlIDAgb3IgMS4gKi8KKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfZ2V0X2Jvb2xlYW4oZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwly ZXR1cm4gZHVrX19nZXRfYm9vbGVhbl9yYXcodGhyLCBpZHgsIDApOyAgLyogZGVmYXVsdDogZmFs c2UgKi8KK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2dldF9ib29sZWFuX2RlZmF1 bHQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX2Jvb2xfdCBkZWZfdmFsdWUp IHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIGR1a19fZ2V0X2Jvb2xl YW5fcmF3KHRociwgaWR4LCBkZWZfdmFsdWUpOworfQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xf dCBkdWtfcmVxdWlyZV9ib29sZWFuKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsK KwlkdWtfdHZhbCAqdHY7CisJZHVrX2Jvb2xfdCByZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwgaWR4KTsKKwlEVUtf QVNTRVJUKHR2ICE9IE5VTEwpOworCWlmIChEVUtfTElLRUxZKERVS19UVkFMX0lTX0JPT0xFQU4o dHYpKSkgeworCQlyZXQgPSBEVUtfVFZBTF9HRVRfQk9PTEVBTih0dik7CisJCURVS19BU1NFUlQo cmV0ID09IDAgfHwgcmV0ID09IDEpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCURVS19F UlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgsICJib29sZWFuIiwgRFVLX1NUUl9OT1Rf Qk9PTEVBTik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KK30KKworRFVLX0VY VEVSTkFMIGR1a19ib29sX3QgZHVrX29wdF9ib29sZWFuKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgsIGR1a19ib29sX3QgZGVmX3ZhbHVlKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKworCWlmIChkdWtfY2hlY2tfdHlwZV9tYXNrKHRociwgaWR4LCBEVUtfVFlQRV9NQVNL X05PTkUgfCBEVUtfVFlQRV9NQVNLX1VOREVGSU5FRCkpIHsKKwkJcmV0dXJuIGRlZl92YWx1ZTsK Kwl9CisJcmV0dXJuIGR1a19yZXF1aXJlX2Jvb2xlYW4odGhyLCBpZHgpOworfQorCitEVUtfTE9D QUwgRFVLX0FMV0FZU19JTkxJTkUgZHVrX2RvdWJsZV90IGR1a19fZ2V0X251bWJlcl9yYXcoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX2RvdWJsZV90IGRlZl92YWx1ZSkgewor CWR1a19kb3VibGVfdW5pb24gcmV0OworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRfQ1RY X1ZBTElEKHRocik7CisKKwl0diA9IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOwor CURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJ aWYgKERVS19UVkFMX0lTX0ZBU1RJTlQodHYpKSB7CisJCXJldC5kID0gKGR1a19kb3VibGVfdCkg RFVLX1RWQUxfR0VUX0ZBU1RJTlQodHYpOyAgLyogWFhYOiBjYXN0IHRyaWNrICovCisJfQorCWVs c2UKKyNlbmRpZgorCWlmIChEVUtfVFZBTF9JU19ET1VCTEUodHYpKSB7CisJCS8qIFdoZW4gdXNp bmcgcGFja2VkIGR1a190dmFsLCBudW1iZXIgbXVzdCBiZSBpbiBOYU4tbm9ybWFsaXplZCBmb3Jt CisJCSAqIGZvciBpdCB0byBiZSBhIGR1a190dmFsLCBzbyBubyBuZWVkIHRvIG5vcm1hbGl6ZS4g IE5PUCBmb3IgdW5wYWNrZWQKKwkJICogZHVrX3R2YWwuCisJCSAqLworCQlyZXQuZCA9IERVS19U VkFMX0dFVF9ET1VCTEUodHYpOworCQlEVUtfQVNTRVJUKERVS19EQkxVTklPTl9JU19OT1JNQUxJ WkVEKCZyZXQpKTsKKwl9IGVsc2UgeworCQlyZXQuZCA9IGRlZl92YWx1ZTsKKwkJLyogRGVmYXVs dCB2YWx1ZSAoaW5jbHVkaW5nIE5hTikgbWF5IG5vdCBiZSBub3JtYWxpemVkLiAqLworCX0KKwor CXJldHVybiByZXQuZDsKK30KKworRFVLX0VYVEVSTkFMIGR1a19kb3VibGVfdCBkdWtfZ2V0X251 bWJlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKwlyZXR1cm4gZHVrX19nZXRfbnVtYmVyX3Jhdyh0aHIsIGlkeCwgRFVLX0RP VUJMRV9OQU4pOyAgLyogZGVmYXVsdDogTmFOICovCit9CisKK0RVS19FWFRFUk5BTCBkdWtfZG91 YmxlX3QgZHVrX2dldF9udW1iZXJfZGVmYXVsdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg aWR4LCBkdWtfZG91YmxlX3QgZGVmX3ZhbHVlKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhy KTsKKwlyZXR1cm4gZHVrX19nZXRfbnVtYmVyX3Jhdyh0aHIsIGlkeCwgZGVmX3ZhbHVlKTsKK30K KworRFVLX0VYVEVSTkFMIGR1a19kb3VibGVfdCBkdWtfcmVxdWlyZV9udW1iZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a190dmFsICp0djsKKwlkdWtfZG91YmxlX3Vu aW9uIHJldDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0diA9IGR1a19nZXRf dHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisJaWYg KERVS19VTkxJS0VMWSghRFVLX1RWQUxfSVNfTlVNQkVSKHR2KSkpIHsKKwkJRFVLX0VSUk9SX1JF UVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgIm51bWJlciIsIERVS19TVFJfTk9UX05VTUJFUik7 CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMC4wOyk7CisJfQorCisJcmV0LmQgPSBEVUtfVFZB TF9HRVRfTlVNQkVSKHR2KTsKKworCS8qIFdoZW4gdXNpbmcgcGFja2VkIGR1a190dmFsLCBudW1i ZXIgbXVzdCBiZSBpbiBOYU4tbm9ybWFsaXplZCBmb3JtCisJICogZm9yIGl0IHRvIGJlIGEgZHVr X3R2YWwsIHNvIG5vIG5lZWQgdG8gbm9ybWFsaXplLiAgTk9QIGZvciB1bnBhY2tlZAorCSAqIGR1 a190dmFsLgorCSAqLworCURVS19BU1NFUlQoRFVLX0RCTFVOSU9OX0lTX05PUk1BTElaRUQoJnJl dCkpOworCXJldHVybiByZXQuZDsKK30KKworRFVLX0VYVEVSTkFMIGR1a19kb3VibGVfdCBkdWtf b3B0X251bWJlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfZG91YmxlX3Qg ZGVmX3ZhbHVlKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlmIChkdWtfY2hl Y2tfdHlwZV9tYXNrKHRociwgaWR4LCBEVUtfVFlQRV9NQVNLX05PTkUgfCBEVUtfVFlQRV9NQVNL X1VOREVGSU5FRCkpIHsKKwkJLyogVXNlciBwcm92aWRlZCBkZWZhdWx0IGlzIG5vdCBOYU4gbm9y bWFsaXplZC4gKi8KKwkJcmV0dXJuIGRlZl92YWx1ZTsKKwl9CisJcmV0dXJuIGR1a19yZXF1aXJl X251bWJlcih0aHIsIGlkeCk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaW50X3QgZHVrX2dldF9p bnQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwlyZXR1cm4gKGR1a19pbnRfdCkgZHVrX19hcGlfY29lcmNlX2QyaSh0aHIs IGlkeCwgMCAvKmRlZl92YWx1ZSovLCAwIC8qcmVxdWlyZSovKTsKK30KKworRFVLX0VYVEVSTkFM IGR1a191aW50X3QgZHVrX2dldF91aW50KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgp IHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIChkdWtfdWludF90KSBk dWtfX2FwaV9jb2VyY2VfZDJ1aSh0aHIsIGlkeCwgMCAvKmRlZl92YWx1ZSovLCAwIC8qcmVxdWly ZSovKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19pbnRfdCBkdWtfZ2V0X2ludF9kZWZhdWx0KGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19pbnRfdCBkZWZfdmFsdWUpIHsKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIChkdWtfaW50X3QpIGR1a19fYXBp X2NvZXJjZV9kMmkodGhyLCBpZHgsIGRlZl92YWx1ZSwgMCAvKnJlcXVpcmUqLyk7Cit9CisKK0RV S19FWFRFUk5BTCBkdWtfdWludF90IGR1a19nZXRfdWludF9kZWZhdWx0KGR1a19odGhyZWFkICp0 aHIsIGR1a19pZHhfdCBpZHgsIGR1a191aW50X3QgZGVmX3ZhbHVlKSB7CisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKworCXJldHVybiAoZHVrX3VpbnRfdCkgZHVrX19hcGlfY29lcmNlX2Qy dWkodGhyLCBpZHgsIGRlZl92YWx1ZSwgMCAvKnJlcXVpcmUqLyk7Cit9CisKK0RVS19FWFRFUk5B TCBkdWtfaW50X3QgZHVrX3JlcXVpcmVfaW50KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIChkdWtfaW50X3Qp IGR1a19fYXBpX2NvZXJjZV9kMmkodGhyLCBpZHgsIDAgLypkZWZfdmFsdWUqLywgMSAvKnJlcXVp cmUqLyk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfdWludF90IGR1a19yZXF1aXJlX3VpbnQoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwlyZXR1cm4gKGR1a191aW50X3QpIGR1a19fYXBpX2NvZXJjZV9kMnVpKHRociwgaWR4 LCAwIC8qZGVmX3ZhbHVlKi8sIDEgLypyZXF1aXJlKi8pOworfQorCitEVUtfRVhURVJOQUwgZHVr X2ludF90IGR1a19vcHRfaW50KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19p bnRfdCBkZWZfdmFsdWUpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYgKGR1 a19jaGVja190eXBlX21hc2sodGhyLCBpZHgsIERVS19UWVBFX01BU0tfTk9ORSB8IERVS19UWVBF X01BU0tfVU5ERUZJTkVEKSkgeworCQlyZXR1cm4gZGVmX3ZhbHVlOworCX0KKwlyZXR1cm4gZHVr X3JlcXVpcmVfaW50KHRociwgaWR4KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a191aW50X3QgZHVr X29wdF91aW50KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a191aW50X3QgZGVm X3ZhbHVlKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlmIChkdWtfY2hlY2tf dHlwZV9tYXNrKHRociwgaWR4LCBEVUtfVFlQRV9NQVNLX05PTkUgfCBEVUtfVFlQRV9NQVNLX1VO REVGSU5FRCkpIHsKKwkJcmV0dXJuIGRlZl92YWx1ZTsKKwl9CisJcmV0dXJuIGR1a19yZXF1aXJl X3VpbnQodGhyLCBpZHgpOworfQorCitEVUtfRVhURVJOQUwgY29uc3QgY2hhciAqZHVrX2dldF9s c3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9s ZW4pIHsKKwlkdWtfaHN0cmluZyAqaDsKKwljb25zdCBjaGFyICpyZXQ7CisJZHVrX3NpemVfdCBs ZW47CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IGR1a19nZXRfaHN0cmlu Zyh0aHIsIGlkeCk7CisJaWYgKGggIT0gTlVMTCkgeworCQlsZW4gPSBEVUtfSFNUUklOR19HRVRf QllURUxFTihoKTsKKwkJcmV0ID0gKGNvbnN0IGNoYXIgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEo aCk7CisJfSBlbHNlIHsKKwkJbGVuID0gMDsKKwkJcmV0ID0gTlVMTDsKKwl9CisKKwlpZiAob3V0 X2xlbiAhPSBOVUxMKSB7CisJCSpvdXRfbGVuID0gbGVuOworCX0KKwlyZXR1cm4gcmV0OworfQor CitEVUtfRVhURVJOQUwgY29uc3QgY2hhciAqZHVrX3JlcXVpcmVfbHN0cmluZyhkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfbGVuKSB7CisJZHVrX2hzdHJp bmcgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IGR1a19yZXF1aXJl X2hzdHJpbmcodGhyLCBpZHgpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlpZiAob3V0X2xl bikgeworCQkqb3V0X2xlbiA9IERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpOworCX0KKwlyZXR1 cm4gKGNvbnN0IGNoYXIgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaCk7Cit9CisKK0RVS19JTlRF Uk5BTCBjb25zdCBjaGFyICpkdWtfcmVxdWlyZV9sc3RyaW5nX25vdHN5bWJvbChkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfbGVuKSB7CisJZHVrX2hzdHJp bmcgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IGR1a19yZXF1aXJl X2hzdHJpbmdfbm90c3ltYm9sKHRociwgaWR4KTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJ aWYgKG91dF9sZW4pIHsKKwkJKm91dF9sZW4gPSBEVUtfSFNUUklOR19HRVRfQllURUxFTihoKTsK Kwl9CisJcmV0dXJuIChjb25zdCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgpOworfQor CitEVUtfRVhURVJOQUwgY29uc3QgY2hhciAqZHVrX2dldF9zdHJpbmcoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IGlkeCkgeworCWR1a19oc3RyaW5nICpoOworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCWggPSBkdWtfZ2V0X2hzdHJpbmcodGhyLCBpZHgpOworCWlmIChoICE9 IE5VTEwpIHsKKwkJcmV0dXJuIChjb25zdCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgp OworCX0gZWxzZSB7CisJCXJldHVybiBOVUxMOworCX0KK30KKworRFVLX0VYVEVSTkFMIGNvbnN0 IGNoYXIgKmR1a19vcHRfbHN0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBk dWtfc2l6ZV90ICpvdXRfbGVuLCBjb25zdCBjaGFyICpkZWZfcHRyLCBkdWtfc2l6ZV90IGRlZl9s ZW4pIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYgKGR1a19jaGVja190eXBl X21hc2sodGhyLCBpZHgsIERVS19UWVBFX01BU0tfTk9ORSB8IERVS19UWVBFX01BU0tfVU5ERUZJ TkVEKSkgeworCQlpZiAob3V0X2xlbiAhPSBOVUxMKSB7CisJCQkqb3V0X2xlbiA9IGRlZl9sZW47 CisJCX0KKwkJcmV0dXJuIGRlZl9wdHI7CisJfQorCXJldHVybiBkdWtfcmVxdWlyZV9sc3RyaW5n KHRociwgaWR4LCBvdXRfbGVuKTsKK30KKworRFVLX0VYVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19v cHRfc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGNvbnN0IGNoYXIgKmRl Zl9wdHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYgKGR1a19jaGVja190 eXBlX21hc2sodGhyLCBpZHgsIERVS19UWVBFX01BU0tfTk9ORSB8IERVS19UWVBFX01BU0tfVU5E RUZJTkVEKSkgeworCQlyZXR1cm4gZGVmX3B0cjsKKwl9CisJcmV0dXJuIGR1a19yZXF1aXJlX3N0 cmluZyh0aHIsIGlkeCk7Cit9CisKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfZ2V0X2xz dHJpbmdfZGVmYXVsdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90 ICpvdXRfbGVuLCBjb25zdCBjaGFyICpkZWZfcHRyLCBkdWtfc2l6ZV90IGRlZl9sZW4pIHsKKwlk dWtfaHN0cmluZyAqaDsKKwljb25zdCBjaGFyICpyZXQ7CisJZHVrX3NpemVfdCBsZW47CisKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IGR1a19nZXRfaHN0cmluZyh0aHIsIGlk eCk7CisJaWYgKGggIT0gTlVMTCkgeworCQlsZW4gPSBEVUtfSFNUUklOR19HRVRfQllURUxFTiho KTsKKwkJcmV0ID0gKGNvbnN0IGNoYXIgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaCk7CisJfSBl bHNlIHsKKwkJbGVuID0gZGVmX2xlbjsKKwkJcmV0ID0gZGVmX3B0cjsKKwl9CisKKwlpZiAob3V0 X2xlbiAhPSBOVUxMKSB7CisJCSpvdXRfbGVuID0gbGVuOworCX0KKwlyZXR1cm4gcmV0OworfQor CitEVUtfRVhURVJOQUwgY29uc3QgY2hhciAqZHVrX2dldF9zdHJpbmdfZGVmYXVsdChkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBjb25zdCBjaGFyICpkZWZfdmFsdWUpIHsKKwlkdWtf aHN0cmluZyAqaDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwloID0gZHVrX2dl dF9oc3RyaW5nKHRociwgaWR4KTsKKwlpZiAoaCAhPSBOVUxMKSB7CisJCXJldHVybiAoY29uc3Qg Y2hhciAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZGVm X3ZhbHVlOworCX0KK30KKworRFVLX0lOVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19nZXRfc3RyaW5n X25vdHN5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX2hzdHJp bmcgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IGR1a19nZXRfaHN0 cmluZ19ub3RzeW1ib2wodGhyLCBpZHgpOworCWlmIChoKSB7CisJCXJldHVybiAoY29uc3QgY2hh ciAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gTlVMTDsK Kwl9Cit9CisKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfcmVxdWlyZV9zdHJpbmcoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwlyZXR1cm4gZHVrX3JlcXVpcmVfbHN0cmluZyh0aHIsIGlkeCwgTlVMTCk7Cit9CisK K0RVS19JTlRFUk5BTCBjb25zdCBjaGFyICpkdWtfcmVxdWlyZV9zdHJpbmdfbm90c3ltYm9sKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaHN0cmluZyAqaDsKKworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwloID0gZHVrX3JlcXVpcmVfaHN0cmluZ19ub3Rz eW1ib2wodGhyLCBpZHgpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlyZXR1cm4gKGNvbnN0 IGNoYXIgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaCk7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lk IGR1a19yZXF1aXJlX29iamVjdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJ ZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCXR2ID0gZHVr X2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsK KwlpZiAoRFVLX1VOTElLRUxZKCFEVUtfVFZBTF9JU19PQkpFQ1QodHYpKSkgeworCQlEVUtfRVJS T1JfUkVRVUlSRV9UWVBFX0lOREVYKHRociwgaWR4LCAib2JqZWN0IiwgRFVLX1NUUl9OT1RfT0JK RUNUKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0KK30KKworRFVLX0xPQ0FMIHZv aWQgKmR1a19fZ2V0X3BvaW50ZXJfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgs IHZvaWQgKmRlZl92YWx1ZSkgeworCWR1a190dmFsICp0djsKKwl2b2lkICpwOworCisJRFVLX0FT U0VSVF9DVFhfVkFMSUQodGhyKTsKKworCXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIs IGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKwlpZiAoIURVS19UVkFMX0lTX1BPSU5U RVIodHYpKSB7CisJCXJldHVybiBkZWZfdmFsdWU7CisJfQorCisJcCA9IERVS19UVkFMX0dFVF9Q T0lOVEVSKHR2KTsgIC8qIG1heSBiZSBOVUxMICovCisJcmV0dXJuIHA7Cit9CisKK0RVS19FWFRF Uk5BTCB2b2lkICpkdWtfZ2V0X3BvaW50ZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlk eCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a19fZ2V0X3BvaW50 ZXJfcmF3KHRociwgaWR4LCBOVUxMIC8qZGVmX3ZhbHVlKi8pOworfQorCitEVUtfRVhURVJOQUwg dm9pZCAqZHVrX29wdF9wb2ludGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIHZv aWQgKmRlZl92YWx1ZSkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZiAoZHVr X2NoZWNrX3R5cGVfbWFzayh0aHIsIGlkeCwgRFVLX1RZUEVfTUFTS19OT05FIHwgRFVLX1RZUEVf TUFTS19VTkRFRklORUQpKSB7CisJCXJldHVybiBkZWZfdmFsdWU7CisJfQorCXJldHVybiBkdWtf cmVxdWlyZV9wb2ludGVyKHRociwgaWR4KTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgKmR1a19n ZXRfcG9pbnRlcl9kZWZhdWx0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIHZvaWQg KmRlZl92YWx1ZSkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a19f Z2V0X3BvaW50ZXJfcmF3KHRociwgaWR4LCBkZWZfdmFsdWUpOworfQorCitEVUtfRVhURVJOQUwg dm9pZCAqZHVrX3JlcXVpcmVfcG9pbnRlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4 KSB7CisJZHVrX3R2YWwgKnR2OworCXZvaWQgKnA7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0 aHIpOworCisJLyogTm90ZTogaGVyZSB3ZSBtdXN0IGJlIHdhcnkgb2YgdGhlIGZhY3QgdGhhdCBh IHBvaW50ZXIgbWF5IGJlCisJICogdmFsaWQgYW5kIGJlIGEgTlVMTC4KKwkgKi8KKwl0diA9IGR1 a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7 CisJaWYgKERVS19VTkxJS0VMWSghRFVLX1RWQUxfSVNfUE9JTlRFUih0dikpKSB7CisJCURVS19F UlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgsICJwb2ludGVyIiwgRFVLX1NUUl9OT1Rf UE9JTlRFUik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCX0KKwlwID0gRFVL X1RWQUxfR0VUX1BPSU5URVIodHYpOyAgLyogbWF5IGJlIE5VTEwgKi8KKwlyZXR1cm4gcDsKK30K KworI2lmIDAgIC8qdW51c2VkKi8KK0RVS19JTlRFUk5BTCB2b2lkICpkdWtfZ2V0X3ZvaWRwdHIo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a190dmFsICp0djsKKwlkdWtf aGVhcGhkciAqaDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0diA9IGR1a19n ZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisJ aWYgKCFEVUtfVFZBTF9JU19IRUFQX0FMTE9DQVRFRCh0dikpIHsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaCA9IERVS19UVkFMX0dFVF9IRUFQSERSKHR2KTsKKwlEVUtfQVNTRVJUKGggIT0gTlVM TCk7CisJcmV0dXJuICh2b2lkICopIGg7Cit9CisjZW5kaWYKKworRFVLX0xPQ0FMIHZvaWQgKmR1 a19fZ2V0X2J1ZmZlcl9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVr X3NpemVfdCAqb3V0X3NpemUsIHZvaWQgKmRlZl9wdHIsIGR1a19zaXplX3QgZGVmX3NpemUsIGR1 a19ib29sX3QgdGhyb3dfZmxhZykgeworCWR1a19oYnVmZmVyICpoOworCXZvaWQgKnJldDsKKwlk dWtfc2l6ZV90IGxlbjsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUX0NUWF9WQUxJRCh0 aHIpOworCisJaWYgKG91dF9zaXplICE9IE5VTEwpIHsKKwkJKm91dF9zaXplID0gMDsKKwl9CisK Kwl0diA9IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOworCURVS19BU1NFUlQodHYg IT0gTlVMTCk7CisJaWYgKERVS19MSUtFTFkoRFVLX1RWQUxfSVNfQlVGRkVSKHR2KSkpIHsKKwkJ aCA9IERVS19UVkFMX0dFVF9CVUZGRVIodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisK KwkJbGVuID0gRFVLX0hCVUZGRVJfR0VUX1NJWkUoaCk7CisJCXJldCA9IERVS19IQlVGRkVSX0dF VF9EQVRBX1BUUih0aHItPmhlYXAsIGgpOworCX0gZWxzZSB7CisJCWlmICh0aHJvd19mbGFnKSB7 CisJCQlEVUtfRVJST1JfUkVRVUlSRV9UWVBFX0lOREVYKHRociwgaWR4LCAiYnVmZmVyIiwgRFVL X1NUUl9OT1RfQlVGRkVSKTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCQl9 CisJCWxlbiA9IGRlZl9zaXplOworCQlyZXQgPSBkZWZfcHRyOworCX0KKworCWlmIChvdXRfc2l6 ZSAhPSBOVUxMKSB7CisJCSpvdXRfc2l6ZSA9IGxlbjsKKwl9CisJcmV0dXJuIHJldDsKK30KKwor RFVLX0VYVEVSTkFMIHZvaWQgKmR1a19nZXRfYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9zaXplKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKworCXJldHVybiBkdWtfX2dldF9idWZmZXJfaGVscGVyKHRociwgaWR4LCBvdXRfc2l6 ZSwgTlVMTCAvKmRlZl9wdHIqLywgMCAvKmRlZl9zaXplKi8sIDAgLyp0aHJvd19mbGFnKi8pOwor fQorCitEVUtfRVhURVJOQUwgdm9pZCAqZHVrX29wdF9idWZmZXIoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUsIHZvaWQgKmRlZl9wdHIsIGR1a19z aXplX3QgZGVmX3NpemUpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYgKGR1 a19jaGVja190eXBlX21hc2sodGhyLCBpZHgsIERVS19UWVBFX01BU0tfTk9ORSB8IERVS19UWVBF X01BU0tfVU5ERUZJTkVEKSkgeworCQlpZiAob3V0X3NpemUgIT0gTlVMTCkgeworCQkJKm91dF9z aXplID0gZGVmX3NpemU7CisJCX0KKwkJcmV0dXJuIGRlZl9wdHI7CisJfQorCXJldHVybiBkdWtf cmVxdWlyZV9idWZmZXIodGhyLCBpZHgsIG91dF9zaXplKTsKK30KKworRFVLX0VYVEVSTkFMIHZv aWQgKmR1a19nZXRfYnVmZmVyX2RlZmF1bHQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlk eCwgZHVrX3NpemVfdCAqb3V0X3NpemUsIHZvaWQgKmRlZl9wdHIsIGR1a19zaXplX3QgZGVmX2xl bikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlyZXR1cm4gZHVrX19nZXRfYnVm ZmVyX2hlbHBlcih0aHIsIGlkeCwgb3V0X3NpemUsIGRlZl9wdHIsIGRlZl9sZW4sIDAgLyp0aHJv d19mbGFnKi8pOworfQorCitEVUtfRVhURVJOQUwgdm9pZCAqZHVrX3JlcXVpcmVfYnVmZmVyKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9zaXplKSB7CisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCXJldHVybiBkdWtfX2dldF9idWZmZXJfaGVs cGVyKHRociwgaWR4LCBvdXRfc2l6ZSwgTlVMTCAvKmRlZl9wdHIqLywgMCAvKmRlZl9zaXplKi8s IDEgLyp0aHJvd19mbGFnKi8pOworfQorCisvKiBHZXQgdGhlIGFjdGl2ZSBidWZmZXIgZGF0YSBh cmVhIGZvciBhIHBsYWluIGJ1ZmZlciBvciBhIGJ1ZmZlciBvYmplY3QuCisgKiBSZXR1cm4gTlVM TCBpZiB0aGUgdGhlIHZhbHVlIGlzIG5vdCBhIGJ1ZmZlci4gIE5vdGUgdGhhdCBhIGJ1ZmZlciBt YXkKKyAqIGhhdmUgYSBOVUxMIGRhdGEgcG9pbnRlciB3aGVuIGl0cyBzaXplIGlzIHplcm8sIHRo ZSBvcHRpb25hbCAnb3V0X2lzYnVmZmVyJworICogYXJndW1lbnQgYWxsb3dzIGNhbGxlciB0byBk ZXRlY3QgdGhpcyByZWxpYWJseS4KKyAqLworRFVLX0lOVEVSTkFMIHZvaWQgKmR1a19nZXRfYnVm ZmVyX2RhdGFfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3Qg Km91dF9zaXplLCB2b2lkICpkZWZfcHRyLCBkdWtfc2l6ZV90IGRlZl9zaXplLCBkdWtfYm9vbF90 IHRocm93X2ZsYWcsIGR1a19ib29sX3QgKm91dF9pc2J1ZmZlcikgeworCWR1a190dmFsICp0djsK KworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZiAob3V0X2lzYnVmZmVyICE9IE5V TEwpIHsKKwkJKm91dF9pc2J1ZmZlciA9IDA7CisJfQorCWlmIChvdXRfc2l6ZSAhPSBOVUxMKSB7 CisJCSpvdXRfc2l6ZSA9IGRlZl9zaXplOworCX0KKworCXR2ID0gZHVrX2dldF90dmFsX29yX3Vu dXNlZCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKworCWlmIChEVUtfVFZB TF9JU19CVUZGRVIodHYpKSB7CisJCWR1a19oYnVmZmVyICpoID0gRFVLX1RWQUxfR0VUX0JVRkZF Uih0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJaWYgKG91dF9zaXplICE9IE5VTEwp IHsKKwkJCSpvdXRfc2l6ZSA9IERVS19IQlVGRkVSX0dFVF9TSVpFKGgpOworCQl9CisJCWlmIChv dXRfaXNidWZmZXIgIT0gTlVMTCkgeworCQkJKm91dF9pc2J1ZmZlciA9IDE7CisJCX0KKwkJcmV0 dXJuICh2b2lkICopIERVS19IQlVGRkVSX0dFVF9EQVRBX1BUUih0aHItPmhlYXAsIGgpOyAgLyog bWF5IGJlIE5VTEwgKGJ1dCBvbmx5IGlmIHNpemUgaXMgMCkgKi8KKwl9CisjaWYgZGVmaW5lZChE VUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorCWVsc2UgaWYgKERVS19UVkFMX0lTX09CSkVD VCh0dikpIHsKKwkJZHVrX2hvYmplY3QgKmggPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJ RFVLX0FTU0VSVChoICE9IE5VTEwpOworCQlpZiAoRFVLX0hPQkpFQ1RfSVNfQlVGT0JKKGgpKSB7 CisJCQkvKiBYWFg6IHRoaXMgaXMgcHJvYmFibHkgYSB1c2VmdWwgc2hhcmVkIGhlbHBlcjogZm9y IGEKKwkJCSAqIGR1a19oYnVmb2JqLCBnZXQgYSB2YWxpZGF0ZWQgYnVmZmVyIHBvaW50ZXIvbGVu Z3RoLgorCQkJICovCisJCQlkdWtfaGJ1Zm9iaiAqaF9idWZvYmogPSAoZHVrX2hidWZvYmogKikg aDsKKwkJCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChoX2J1Zm9iaik7CisKKwkJCWlmIChoX2J1 Zm9iai0+YnVmICE9IE5VTEwgJiYKKwkJCSAgICBEVUtfSEJVRk9CSl9WQUxJRF9TTElDRShoX2J1 Zm9iaikpIHsKKwkJCQlkdWtfdWludDhfdCAqcDsKKworCQkJCXAgPSAoZHVrX3VpbnQ4X3QgKikg RFVLX0hCVUZGRVJfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaF9idWZvYmotPmJ1Zik7CisJCQkJ aWYgKG91dF9zaXplICE9IE5VTEwpIHsKKwkJCQkJKm91dF9zaXplID0gKGR1a19zaXplX3QpIGhf YnVmb2JqLT5sZW5ndGg7CisJCQkJfQorCQkJCWlmIChvdXRfaXNidWZmZXIgIT0gTlVMTCkgewor CQkJCQkqb3V0X2lzYnVmZmVyID0gMTsKKwkJCQl9CisJCQkJcmV0dXJuICh2b2lkICopIChwICsg aF9idWZvYmotPm9mZnNldCk7CisJCQl9CisJCQkvKiBpZiBzbGljZSBub3QgZnVsbHkgdmFsaWQs IHRyZWF0IGFzIGVycm9yICovCisJCX0KKwl9CisjZW5kaWYgIC8qIERVS19VU0VfQlVGRkVST0JK RUNUX1NVUFBPUlQgKi8KKworCWlmICh0aHJvd19mbGFnKSB7CisJCURVS19FUlJPUl9SRVFVSVJF X1RZUEVfSU5ERVgodGhyLCBpZHgsICJidWZmZXIiLCBEVUtfU1RSX05PVF9CVUZGRVIpOworCQlE VUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKKwl9CisJcmV0dXJuIGRlZl9wdHI7Cit9CisK K0RVS19FWFRFUk5BTCB2b2lkICpkdWtfZ2V0X2J1ZmZlcl9kYXRhKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9zaXplKSB7CisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKwlyZXR1cm4gZHVrX2dldF9idWZmZXJfZGF0YV9yYXcodGhyLCBpZHgsIG91 dF9zaXplLCBOVUxMIC8qZGVmX3B0ciovLCAwIC8qZGVmX3NpemUqLywgMCAvKnRocm93X2ZsYWcq LywgTlVMTCk7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkICpkdWtfZ2V0X2J1ZmZlcl9kYXRhX2Rl ZmF1bHQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3Np emUsIHZvaWQgKmRlZl9wdHIsIGR1a19zaXplX3QgZGVmX3NpemUpIHsKKwlEVUtfQVNTRVJUX0FQ SV9FTlRSWSh0aHIpOworCXJldHVybiBkdWtfZ2V0X2J1ZmZlcl9kYXRhX3Jhdyh0aHIsIGlkeCwg b3V0X3NpemUsIGRlZl9wdHIsIGRlZl9zaXplLCAwIC8qdGhyb3dfZmxhZyovLCBOVUxMKTsKK30K KworRFVLX0VYVEVSTkFMIHZvaWQgKmR1a19vcHRfYnVmZmVyX2RhdGEoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUsIHZvaWQgKmRlZl9wdHIsIGR1 a19zaXplX3QgZGVmX3NpemUpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYg KGR1a19jaGVja190eXBlX21hc2sodGhyLCBpZHgsIERVS19UWVBFX01BU0tfTk9ORSB8IERVS19U WVBFX01BU0tfVU5ERUZJTkVEKSkgeworCQlpZiAob3V0X3NpemUgIT0gTlVMTCkgeworCQkJKm91 dF9zaXplID0gZGVmX3NpemU7CisJCX0KKwkJcmV0dXJuIGRlZl9wdHI7CisJfQorCXJldHVybiBk dWtfcmVxdWlyZV9idWZmZXJfZGF0YSh0aHIsIGlkeCwgb3V0X3NpemUpOworfQorCitEVUtfRVhU RVJOQUwgdm9pZCAqZHVrX3JlcXVpcmVfYnVmZmVyX2RhdGEoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCXJldHVybiBkdWtfZ2V0X2J1ZmZlcl9kYXRhX3Jhdyh0aHIsIGlkeCwgb3V0X3Np emUsIE5VTEwgLypkZWZfcHRyKi8sIDAgLypkZWZfc2l6ZSovLCAxIC8qdGhyb3dfZmxhZyovLCBO VUxMKTsKK30KKworLyogUmF3IGhlbHBlciBmb3IgZ2V0dGluZyBhIHZhbHVlIGZyb20gdGhlIHN0 YWNrLCBjaGVja2luZyBpdHMgdGFnLgorICogVGhlIHRhZyBjYW5ub3QgYmUgYSBudW1iZXIgYmVj YXVzZSBudW1iZXJzIGRvbid0IGhhdmUgYW4gaW50ZXJuYWwKKyAqIHRhZyBpbiB0aGUgcGFja2Vk IHJlcHJlc2VudGF0aW9uLgorICovCisKK0RVS19MT0NBTCBkdWtfaGVhcGhkciAqZHVrX19nZXRf dGFnZ2VkX2hlYXBoZHJfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a191 aW50X3QgdGFnKSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19oZWFwaGRyICpyZXQ7CisKKwlEVUtf QVNTRVJUX0NUWF9WQUxJRCh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRo ciwgaWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCWlmIChEVUtfVFZBTF9HRVRfVEFH KHR2KSAhPSB0YWcpIHsKKwkJcmV0dXJuIChkdWtfaGVhcGhkciAqKSBOVUxMOworCX0KKworCXJl dCA9IERVS19UVkFMX0dFVF9IRUFQSERSKHR2KTsKKwlEVUtfQVNTRVJUKHJldCAhPSBOVUxMKTsg IC8qIHRhZ2dlZCBudWxsIHBvaW50ZXJzIHNob3VsZCBuZXZlciBvY2N1ciAqLworCXJldHVybiBy ZXQ7CisKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5nICpkdWtfZ2V0X2hzdHJpbmcoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisJcmV0dXJuIChkdWtfaHN0cmluZyAqKSBkdWtfX2dldF90YWdnZWRfaGVhcGhkcl9yYXco dGhyLCBpZHgsIERVS19UQUdfU1RSSU5HKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5n ICpkdWtfZ2V0X2hzdHJpbmdfbm90c3ltYm9sKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpIHsKKwlkdWtfaHN0cmluZyAqaDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisK KwloID0gKGR1a19oc3RyaW5nICopIGR1a19fZ2V0X3RhZ2dlZF9oZWFwaGRyX3Jhdyh0aHIsIGlk eCwgRFVLX1RBR19TVFJJTkcpOworCWlmIChEVUtfVU5MSUtFTFkoaCAmJiBEVUtfSFNUUklOR19I QVNfU1lNQk9MKGgpKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGg7Cit9CisKK0RV S19JTlRFUk5BTCBkdWtfaHN0cmluZyAqZHVrX3JlcXVpcmVfaHN0cmluZyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX2hzdHJpbmcgKmg7CisKKwlEVUtfQVNTRVJUX0FQ SV9FTlRSWSh0aHIpOworCisJaCA9IChkdWtfaHN0cmluZyAqKSBkdWtfX2dldF90YWdnZWRfaGVh cGhkcl9yYXcodGhyLCBpZHgsIERVS19UQUdfU1RSSU5HKTsKKwlpZiAoRFVLX1VOTElLRUxZKGgg PT0gTlVMTCkpIHsKKwkJRFVLX0VSUk9SX1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgInN0 cmluZyIsIERVS19TVFJfTk9UX1NUUklORyk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVM TDspOworCX0KKwlyZXR1cm4gaDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5nICpkdWtf cmVxdWlyZV9oc3RyaW5nX25vdHN5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4 KSB7CisJZHVrX2hzdHJpbmcgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJ aCA9IChkdWtfaHN0cmluZyAqKSBkdWtfX2dldF90YWdnZWRfaGVhcGhkcl9yYXcodGhyLCBpZHgs IERVS19UQUdfU1RSSU5HKTsKKwlpZiAoRFVLX1VOTElLRUxZKGggPT0gTlVMTCB8fCBEVUtfSFNU UklOR19IQVNfU1lNQk9MKGgpKSkgeworCQlEVUtfRVJST1JfUkVRVUlSRV9UWVBFX0lOREVYKHRo ciwgaWR4LCAic3RyaW5nIiwgRFVLX1NUUl9OT1RfU1RSSU5HKTsKKwkJRFVLX1dPX05PUkVUVVJO KHJldHVybiBOVUxMOyk7CisJfQorCXJldHVybiBoOworfQorCitEVUtfSU5URVJOQUwgZHVrX2hv YmplY3QgKmR1a19nZXRfaG9iamVjdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7 CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlyZXR1cm4gKGR1a19ob2JqZWN0ICopIGR1 a19fZ2V0X3RhZ2dlZF9oZWFwaGRyX3Jhdyh0aHIsIGlkeCwgRFVLX1RBR19PQkpFQ1QpOworfQor CitEVUtfSU5URVJOQUwgZHVrX2hvYmplY3QgKmR1a19yZXF1aXJlX2hvYmplY3QoZHVrX2h0aHJl YWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a19ob2JqZWN0ICpoOworCisJRFVLX0FTU0VS VF9BUElfRU5UUlkodGhyKTsKKworCWggPSAoZHVrX2hvYmplY3QgKikgZHVrX19nZXRfdGFnZ2Vk X2hlYXBoZHJfcmF3KHRociwgaWR4LCBEVUtfVEFHX09CSkVDVCk7CisJaWYgKERVS19VTkxJS0VM WShoID09IE5VTEwpKSB7CisJCURVS19FUlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgs ICJvYmplY3QiLCBEVUtfU1RSX05PVF9PQkpFQ1QpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJu IE5VTEw7KTsKKwl9CisJcmV0dXJuIGg7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaGJ1ZmZlciAq ZHVrX2dldF9oYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiAoZHVrX2hidWZmZXIgKikgZHVrX19nZXRf dGFnZ2VkX2hlYXBoZHJfcmF3KHRociwgaWR4LCBEVUtfVEFHX0JVRkZFUik7Cit9CisKK0RVS19J TlRFUk5BTCBkdWtfaGJ1ZmZlciAqZHVrX3JlcXVpcmVfaGJ1ZmZlcihkdWtfaHRocmVhZCAqdGhy LCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX2hidWZmZXIgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCisJaCA9IChkdWtfaGJ1ZmZlciAqKSBkdWtfX2dldF90YWdnZWRfaGVhcGhk cl9yYXcodGhyLCBpZHgsIERVS19UQUdfQlVGRkVSKTsKKwlpZiAoRFVLX1VOTElLRUxZKGggPT0g TlVMTCkpIHsKKwkJRFVLX0VSUk9SX1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgImJ1ZmZl ciIsIERVS19TVFJfTk9UX0JVRkZFUik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDsp OworCX0KKwlyZXR1cm4gaDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19odGhyZWFkICpkdWtfZ2V0 X2h0aHJlYWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a19ob2JqZWN0 ICpoOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWggPSAoZHVrX2hvYmplY3Qg KikgZHVrX19nZXRfdGFnZ2VkX2hlYXBoZHJfcmF3KHRociwgaWR4LCBEVUtfVEFHX09CSkVDVCk7 CisJaWYgKERVS19VTkxJS0VMWShoICE9IE5VTEwgJiYgIURVS19IT0JKRUNUX0lTX1RIUkVBRCho KSkpIHsKKwkJaCA9IE5VTEw7CisJfQorCXJldHVybiAoZHVrX2h0aHJlYWQgKikgaDsKK30KKwor RFVLX0lOVEVSTkFMIGR1a19odGhyZWFkICpkdWtfcmVxdWlyZV9odGhyZWFkKGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaG9iamVjdCAqaDsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisKKwloID0gKGR1a19ob2JqZWN0ICopIGR1a19fZ2V0X3RhZ2dlZF9o ZWFwaGRyX3Jhdyh0aHIsIGlkeCwgRFVLX1RBR19PQkpFQ1QpOworCWlmIChEVUtfVU5MSUtFTFko IShoICE9IE5VTEwgJiYgRFVLX0hPQkpFQ1RfSVNfVEhSRUFEKGgpKSkpIHsKKwkJRFVLX0VSUk9S X1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgInRocmVhZCIsIERVS19TVFJfTk9UX1RIUkVB RCk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCX0KKwlyZXR1cm4gKGR1a19o dGhyZWFkICopIGg7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaGNvbXBmdW5jICpkdWtfZ2V0X2hj b21wZnVuYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX2hvYmplY3Qg Kmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IChkdWtfaG9iamVjdCAq KSBkdWtfX2dldF90YWdnZWRfaGVhcGhkcl9yYXcodGhyLCBpZHgsIERVS19UQUdfT0JKRUNUKTsK KwlpZiAoRFVLX1VOTElLRUxZKGggIT0gTlVMTCAmJiAhRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMo aCkpKSB7CisJCWggPSBOVUxMOworCX0KKwlyZXR1cm4gKGR1a19oY29tcGZ1bmMgKikgaDsKK30K KworRFVLX0lOVEVSTkFMIGR1a19oY29tcGZ1bmMgKmR1a19yZXF1aXJlX2hjb21wZnVuYyhkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX2hvYmplY3QgKmg7CisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaCA9IChkdWtfaG9iamVjdCAqKSBkdWtfX2dldF90 YWdnZWRfaGVhcGhkcl9yYXcodGhyLCBpZHgsIERVS19UQUdfT0JKRUNUKTsKKwlpZiAoRFVLX1VO TElLRUxZKCEoaCAhPSBOVUxMICYmIERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKGgpKSkpIHsKKwkJ RFVLX0VSUk9SX1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgImNvbXBpbGVkZnVuY3Rpb24i LCBEVUtfU1RSX05PVF9DT01QRlVOQyk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDsp OworCX0KKwlyZXR1cm4gKGR1a19oY29tcGZ1bmMgKikgaDsKK30KKworRFVLX0lOVEVSTkFMIGR1 a19obmF0ZnVuYyAqZHVrX2dldF9obmF0ZnVuYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg aWR4KSB7CisJZHVrX2hvYmplY3QgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOwor CisJaCA9IChkdWtfaG9iamVjdCAqKSBkdWtfX2dldF90YWdnZWRfaGVhcGhkcl9yYXcodGhyLCBp ZHgsIERVS19UQUdfT0JKRUNUKTsKKwlpZiAoRFVLX1VOTElLRUxZKGggIT0gTlVMTCAmJiAhRFVL X0hPQkpFQ1RfSVNfTkFURlVOQyhoKSkpIHsKKwkJaCA9IE5VTEw7CisJfQorCXJldHVybiAoZHVr X2huYXRmdW5jICopIGg7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaG5hdGZ1bmMgKmR1a19yZXF1 aXJlX2huYXRmdW5jKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaG9i amVjdCAqaDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwloID0gKGR1a19ob2Jq ZWN0ICopIGR1a19fZ2V0X3RhZ2dlZF9oZWFwaGRyX3Jhdyh0aHIsIGlkeCwgRFVLX1RBR19PQkpF Q1QpOworCWlmIChEVUtfVU5MSUtFTFkoIShoICE9IE5VTEwgJiYgRFVLX0hPQkpFQ1RfSVNfTkFU RlVOQyhoKSkpKSB7CisJCURVS19FUlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgsICJu YXRpdmVmdW5jdGlvbiIsIERVS19TVFJfTk9UX05BVEZVTkMpOworCQlEVUtfV09fTk9SRVRVUk4o cmV0dXJuIE5VTEw7KTsKKwl9CisJcmV0dXJuIChkdWtfaG5hdGZ1bmMgKikgaDsKK30KKworRFVL X0VYVEVSTkFMIGR1a19jX2Z1bmN0aW9uIGR1a19nZXRfY19mdW5jdGlvbihkdWtfaHRocmVhZCAq dGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19ob2JqZWN0ICpoOwor CWR1a19obmF0ZnVuYyAqZjsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwl0diA9 IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgpOworCURVS19BU1NFUlQodHYgIT0gTlVM TCk7CisJaWYgKERVS19VTkxJS0VMWSghRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSkpIHsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCWggPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwlEVUtfQVNTRVJU KGggIT0gTlVMTCk7CisKKwlpZiAoRFVLX1VOTElLRUxZKCFEVUtfSE9CSkVDVF9JU19OQVRGVU5D KGgpKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNf TkFURlVOQyhoKSk7CisJZiA9IChkdWtfaG5hdGZ1bmMgKikgaDsKKworCXJldHVybiBmLT5mdW5j OworfQorCitEVUtfRVhURVJOQUwgZHVrX2NfZnVuY3Rpb24gZHVrX29wdF9jX2Z1bmN0aW9uKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19jX2Z1bmN0aW9uIGRlZl92YWx1ZSkg eworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZiAoZHVrX2NoZWNrX3R5cGVfbWFz ayh0aHIsIGlkeCwgRFVLX1RZUEVfTUFTS19OT05FIHwgRFVLX1RZUEVfTUFTS19VTkRFRklORUQp KSB7CisJCXJldHVybiBkZWZfdmFsdWU7CisJfQorCXJldHVybiBkdWtfcmVxdWlyZV9jX2Z1bmN0 aW9uKHRociwgaWR4KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19jX2Z1bmN0aW9uIGR1a19nZXRf Y19mdW5jdGlvbl9kZWZhdWx0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19j X2Z1bmN0aW9uIGRlZl92YWx1ZSkgeworCWR1a19jX2Z1bmN0aW9uIHJldDsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisKKwlyZXQgPSBkdWtfZ2V0X2NfZnVuY3Rpb24odGhyLCBpZHgp OworCWlmIChyZXQgIT0gTlVMTCkgeworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBkZWZf dmFsdWU7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfY19mdW5jdGlvbiBkdWtfcmVxdWlyZV9jX2Z1 bmN0aW9uKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfY19mdW5jdGlv biByZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0ID0gZHVrX2dldF9j X2Z1bmN0aW9uKHRociwgaWR4KTsKKwlpZiAoRFVLX1VOTElLRUxZKCFyZXQpKSB7CisJCURVS19F UlJPUl9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgsICJuYXRpdmVmdW5jdGlvbiIsIERVS19T VFJfTk9UX05BVEZVTkMpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIHJldDspOworCX0KKwly ZXR1cm4gcmV0OworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcmVxdWlyZV9mdW5jdGlvbihk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKwlpZiAoRFVLX1VOTElLRUxZKCFkdWtfaXNfZnVuY3Rpb24odGhyLCBpZHgpKSkgewor CQlEVUtfRVJST1JfUkVRVUlSRV9UWVBFX0lOREVYKHRociwgaWR4LCAiZnVuY3Rpb24iLCBEVUtf U1RSX05PVF9GVU5DVElPTik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwl9Cit9CisK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19yZXF1aXJlX2NvbnN0cnVjdGFibGUoZHVrX2h0aHJlYWQg KnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a19ob2JqZWN0ICpoOworCisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKworCWggPSBkdWtfcmVxdWlyZV9ob2JqZWN0X2FjY2VwdF9tYXNrKHRo ciwgaWR4LCBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQyk7CisJaWYgKERVS19VTkxJS0VMWShoICE9 IE5VTEwgJiYgIURVS19IT0JKRUNUX0hBU19DT05TVFJVQ1RBQkxFKGgpKSkgeworCQlEVUtfRVJS T1JfUkVRVUlSRV9UWVBFX0lOREVYKHRociwgaWR4LCAiY29uc3RydWN0YWJsZSIsIERVS19TVFJf Tk9UX0NPTlNUUlVDVEFCTEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCS8q IExpZ2h0ZnVuY3MgKGggPT0gTlVMTCkgYXJlIGNvbnN0cnVjdGFibGUuICovCit9CisKK0RVS19F WFRFUk5BTCBkdWtfaHRocmVhZCAqZHVrX2dldF9jb250ZXh0KGR1a19odGhyZWFkICp0aHIsIGR1 a19pZHhfdCBpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIGR1 a19nZXRfaHRocmVhZCh0aHIsIGlkeCk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaHRocmVhZCAq ZHVrX3JlcXVpcmVfY29udGV4dChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCXJldHVybiBkdWtfcmVxdWlyZV9odGhyZWFk KHRociwgaWR4KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19odGhyZWFkICpkdWtfb3B0X2NvbnRl eHQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX2h0aHJlYWQgKmRlZl92YWx1 ZSkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZiAoZHVrX2NoZWNrX3R5cGVf bWFzayh0aHIsIGlkeCwgRFVLX1RZUEVfTUFTS19OT05FIHwgRFVLX1RZUEVfTUFTS19VTkRFRklO RUQpKSB7CisJCXJldHVybiBkZWZfdmFsdWU7CisJfQorCXJldHVybiBkdWtfcmVxdWlyZV9jb250 ZXh0KHRociwgaWR4KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19odGhyZWFkICpkdWtfZ2V0X2Nv bnRleHRfZGVmYXVsdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfaHRocmVh ZCAqZGVmX3ZhbHVlKSB7CisJZHVrX2h0aHJlYWQgKnJldDsKKworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwlyZXQgPSBkdWtfZ2V0X2NvbnRleHQodGhyLCBpZHgpOworCWlmIChyZXQg IT0gTlVMTCkgeworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBkZWZfdmFsdWU7Cit9CisK K0RVS19FWFRFUk5BTCB2b2lkICpkdWtfZ2V0X2hlYXBwdHIoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGlkeCkgeworCWR1a190dmFsICp0djsKKwl2b2lkICpyZXQ7CisKKwlEVUtfQVNTRVJU X0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwgaWR4 KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCWlmIChEVUtfVU5MSUtFTFkoIURVS19UVkFM X0lTX0hFQVBfQUxMT0NBVEVEKHR2KSkpIHsKKwkJcmV0dXJuICh2b2lkICopIE5VTEw7CisJfQor CisJcmV0ID0gKHZvaWQgKikgRFVLX1RWQUxfR0VUX0hFQVBIRFIodHYpOworCURVS19BU1NFUlQo cmV0ICE9IE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkICpkdWtf b3B0X2hlYXBwdHIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgdm9pZCAqZGVmX3Zh bHVlKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlmIChkdWtfY2hlY2tfdHlw ZV9tYXNrKHRociwgaWR4LCBEVUtfVFlQRV9NQVNLX05PTkUgfCBEVUtfVFlQRV9NQVNLX1VOREVG SU5FRCkpIHsKKwkJcmV0dXJuIGRlZl92YWx1ZTsKKwl9CisJcmV0dXJuIGR1a19yZXF1aXJlX2hl YXBwdHIodGhyLCBpZHgpOworfQorCitEVUtfRVhURVJOQUwgdm9pZCAqZHVrX2dldF9oZWFwcHRy X2RlZmF1bHQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgdm9pZCAqZGVmX3ZhbHVl KSB7CisJdm9pZCAqcmV0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCXJldCA9 IGR1a19nZXRfaGVhcHB0cih0aHIsIGlkeCk7CisJaWYgKHJldCAhPSBOVUxMKSB7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0dXJuIGRlZl92YWx1ZTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQg KmR1a19yZXF1aXJlX2hlYXBwdHIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgewor CWR1a190dmFsICp0djsKKwl2b2lkICpyZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwgaWR4KTsKKwlEVUtfQVNTRVJU KHR2ICE9IE5VTEwpOworCWlmIChEVUtfVU5MSUtFTFkoIURVS19UVkFMX0lTX0hFQVBfQUxMT0NB VEVEKHR2KSkpIHsKKwkJRFVLX0VSUk9SX1JFUVVJUkVfVFlQRV9JTkRFWCh0aHIsIGlkeCwgImhl YXBvYmplY3QiLCBEVUtfU1RSX1VORVhQRUNURURfVFlQRSk7CisJCURVS19XT19OT1JFVFVSTihy ZXR1cm4gTlVMTDspOworCX0KKworCXJldCA9ICh2b2lkICopIERVS19UVkFMX0dFVF9IRUFQSERS KHR2KTsKKwlEVUtfQVNTRVJUKHJldCAhPSBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBJ bnRlcm5hbCBoZWxwZXIgZm9yIGdldHRpbmcvcmVxdWlyaW5nIGEgZHVrX2hvYmplY3Qgd2l0aCBw b3NzaWJsZSBwcm9tb3Rpb24uICovCitEVUtfTE9DQUwgZHVrX2hvYmplY3QgKmR1a19fZ2V0X2hv YmplY3RfcHJvbW90ZV9tYXNrX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBk dWtfdWludF90IHR5cGVfbWFzaykgeworCWR1a191aW50X3QgdmFsX21hc2s7CisJZHVrX2hvYmpl Y3QgKnJlczsKKworCURVS19BU1NFUlRfQ1RYX1ZBTElEKHRocik7CisKKwlyZXMgPSBkdWtfZ2V0 X2hvYmplY3QodGhyLCBpZHgpOyAgLyogY29tbW9uIGNhc2UsIG5vdCBwcm9tb3RlZCAqLworCWlm IChEVUtfTElLRUxZKHJlcyAhPSBOVUxMKSkgeworCQlEVUtfQVNTRVJUKHJlcyAhPSBOVUxMKTsK KwkJcmV0dXJuIHJlczsKKwl9CisKKwl2YWxfbWFzayA9IGR1a19nZXRfdHlwZV9tYXNrKHRociwg aWR4KTsKKwlpZiAodmFsX21hc2sgJiB0eXBlX21hc2spIHsKKwkJaWYgKHR5cGVfbWFzayAmIERV S19UWVBFX01BU0tfUFJPTU9URSkgeworCQkJcmVzID0gZHVrX3RvX2hvYmplY3QodGhyLCBpZHgp OworCQkJRFVLX0FTU0VSVChyZXMgIT0gTlVMTCk7CisJCQlyZXR1cm4gcmVzOworCQl9IGVsc2Ug eworCQkJcmV0dXJuIE5VTEw7ICAvKiBhY2NlcHQgd2l0aG91dCBwcm9tb3RpbmcgKi8KKwkJfQor CX0KKworCWlmICh0eXBlX21hc2sgJiBEVUtfVFlQRV9NQVNLX1RIUk9XKSB7CisJCURVS19FUlJP Ul9SRVFVSVJFX1RZUEVfSU5ERVgodGhyLCBpZHgsICJvYmplY3QiLCBEVUtfU1RSX05PVF9PQkpF Q1QpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKKwl9CisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qIEdldCBhIGR1a19ob2JqZWN0ICogYXQgJ2lkeCc7IGlmIHRoZSB2YWx1ZSBpcyBu b3QgYW4gb2JqZWN0IGJ1dCBtYXRjaGVzIHRoZQorICogc3VwcGxpZWQgJ3R5cGVfbWFzaycsIHBy b21vdGUgaXQgdG8gYW4gb2JqZWN0IGFuZCByZXR1cm4gdGhlIGR1a19ob2JqZWN0ICouCisgKiBU aGlzIGlzIHVzZWZ1bCBmb3IgY2FsbCBzaXRlcyB3aGljaCB3YW50IGFuIG9iamVjdCBidXQgYWxz byBhY2NlcHQgYSBwbGFpbgorICogYnVmZmVyIGFuZC9vciBhIGxpZ2h0ZnVuYyB3aGljaCBnZXRz IGF1dG9tYXRpY2FsbHkgcHJvbW90ZWQgdG8gYW4gb2JqZWN0LgorICogUmV0dXJuIHZhbHVlIGlz IE5VTEwgaWYgdmFsdWUgaXMgbmVpdGhlciBhbiBvYmplY3Qgbm9yIGEgcGxhaW4gdHlwZSBhbGxv d2VkCisgKiBieSB0aGUgbWFzay4KKyAqLworRFVLX0lOVEVSTkFMIGR1a19ob2JqZWN0ICpkdWtf Z2V0X2hvYmplY3RfcHJvbW90ZV9tYXNrKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgs IGR1a191aW50X3QgdHlwZV9tYXNrKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwly ZXR1cm4gZHVrX19nZXRfaG9iamVjdF9wcm9tb3RlX21hc2tfcmF3KHRociwgaWR4LCB0eXBlX21h c2sgfCBEVUtfVFlQRV9NQVNLX1BST01PVEUpOworfQorCisvKiBMaWtlIGR1a19nZXRfaG9iamVj dF9wcm9tb3RlX21hc2soKSBidXQgdGhyb3cgYSBUeXBlRXJyb3IgaW5zdGVhZCBvZgorICogcmV0 dXJuaW5nIGEgTlVMTC4KKyAqLworRFVLX0lOVEVSTkFMIGR1a19ob2JqZWN0ICpkdWtfcmVxdWly ZV9ob2JqZWN0X3Byb21vdGVfbWFzayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBk dWtfdWludF90IHR5cGVfbWFzaykgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0 dXJuIGR1a19fZ2V0X2hvYmplY3RfcHJvbW90ZV9tYXNrX3Jhdyh0aHIsIGlkeCwgdHlwZV9tYXNr IHwgRFVLX1RZUEVfTUFTS19USFJPVyB8IERVS19UWVBFX01BU0tfUFJPTU9URSk7Cit9CisKKy8q IFJlcXVpcmUgYSBkdWtfaG9iamVjdCAqIGF0ICdpZHgnOyBpZiB0aGUgdmFsdWUgaXMgbm90IGFu IG9iamVjdCBidXQgbWF0Y2hlcyB0aGUKKyAqIHN1cHBsaWVkICd0eXBlX21hc2snLCByZXR1cm4g YSBOVUxMIGluc3RlYWQuICBPdGhlcndpc2UgdGhyb3cgYSBUeXBlRXJyb3IuCisgKi8KK0RVS19J TlRFUk5BTCBkdWtfaG9iamVjdCAqZHVrX3JlcXVpcmVfaG9iamVjdF9hY2NlcHRfbWFzayhkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfdWludF90IHR5cGVfbWFzaykgeworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a19fZ2V0X2hvYmplY3RfcHJvbW90 ZV9tYXNrX3Jhdyh0aHIsIGlkeCwgdHlwZV9tYXNrIHwgRFVLX1RZUEVfTUFTS19USFJPVyk7Cit9 CisKK0RVS19JTlRFUk5BTCBkdWtfaG9iamVjdCAqZHVrX2dldF9ob2JqZWN0X3dpdGhfY2xhc3Mo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX3NtYWxsX3VpbnRfdCBjbGFzc251 bSkgeworCWR1a19ob2JqZWN0ICpoOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlE VUtfQVNTRVJUX0RJU0FCTEUoY2xhc3NudW0gPj0gMCk7ICAvKiB1bnNpZ25lZCAqLworCURVS19B U1NFUlQoY2xhc3NudW0gPD0gRFVLX0hPQkpFQ1RfQ0xBU1NfTUFYKTsKKworCWggPSAoZHVrX2hv YmplY3QgKikgZHVrX19nZXRfdGFnZ2VkX2hlYXBoZHJfcmF3KHRociwgaWR4LCBEVUtfVEFHX09C SkVDVCk7CisJaWYgKERVS19VTkxJS0VMWShoICE9IE5VTEwgJiYgRFVLX0hPQkpFQ1RfR0VUX0NM QVNTX05VTUJFUihoKSAhPSBjbGFzc251bSkpIHsKKwkJaCA9IE5VTEw7CisJfQorCXJldHVybiBo OworfQorCitEVUtfSU5URVJOQUwgZHVrX2hvYmplY3QgKmR1a19yZXF1aXJlX2hvYmplY3Rfd2l0 aF9jbGFzcyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfc21hbGxfdWludF90 IGNsYXNzbnVtKSB7CisJZHVrX2hvYmplY3QgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0 aHIpOworCURVS19BU1NFUlRfRElTQUJMRShjbGFzc251bSA+PSAwKTsgIC8qIHVuc2lnbmVkICov CisJRFVLX0FTU0VSVChjbGFzc251bSA8PSBEVUtfSE9CSkVDVF9DTEFTU19NQVgpOworCisJaCA9 IChkdWtfaG9iamVjdCAqKSBkdWtfX2dldF90YWdnZWRfaGVhcGhkcl9yYXcodGhyLCBpZHgsIERV S19UQUdfT0JKRUNUKTsKKwlpZiAoRFVLX1VOTElLRUxZKCEoaCAhPSBOVUxMICYmIERVS19IT0JK RUNUX0dFVF9DTEFTU19OVU1CRVIoaCkgPT0gY2xhc3NudW0pKSkgeworCQlkdWtfaHN0cmluZyAq aF9jbGFzczsKKwkJaF9jbGFzcyA9IERVS19IVEhSRUFEX0dFVF9TVFJJTkcodGhyLCBEVUtfSE9C SkVDVF9DTEFTU19OVU1CRVJfVE9fU1RSSURYKGNsYXNzbnVtKSk7CisJCURVS19VTlJFRihoX2Ns YXNzKTsKKworCQlEVUtfRVJST1JfUkVRVUlSRV9UWVBFX0lOREVYKHRociwgaWR4LCAoY29uc3Qg Y2hhciAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoX2NsYXNzKSwgRFVLX1NUUl9VTkVYUEVDVEVE X1RZUEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKKwl9CisJcmV0dXJuIGg7 Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfc2l6ZV90IGR1a19nZXRfbGVuZ3RoKGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUX0FQ SV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwgaWR4KTsK KwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2 KSkgeworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6CisJY2FzZSBEVUtfVEFHX05VTEw6CisJY2Fz ZSBEVUtfVEFHX0JPT0xFQU46CisJY2FzZSBEVUtfVEFHX1BPSU5URVI6CisJCXJldHVybiAwOwor I2lmIGRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwkvKiBTdHJpbmcgYW5kIGJ1ZmZlciBo YXZlIGEgdmlydHVhbCBub24tY29uZmlndXJhYmxlIC5sZW5ndGggcHJvcGVydHkKKwkgKiB3aGlj aCBpcyB3aXRoaW4gc2l6ZV90IHJhbmdlIHNvIGl0IGNhbiBiZSBsb29rZWQgdXAgd2l0aG91dCBz cGVjaWZpYworCSAqIHR5cGUgY2hlY2tzLiAgTGlnaHRmdW5jcyBpbmhlcml0IGZyb20gJU5hdGl2 ZUZ1bmN0aW9uUHJvdG90eXBlJQorCSAqIHdoaWNoIHByb3ZpZGVzIGFuIGluaGVyaXRlZCAubGVu Z3RoIGFjY2Vzc29yOyBpdCBjb3VsZCBiZSBvdmVyd3JpdHRlbgorCSAqIHRvIHByb2R1Y2UgdW5l eHBlY3RlZCB0eXBlcyBvciB2YWx1ZXMsIGJ1dCBqdXN0IG51bWJlciBjb252ZXJ0IGFuZAorCSAq IGR1a19zaXplX3QgY2FzdCBmb3Igbm93LgorCSAqLworCWNhc2UgRFVLX1RBR19TVFJJTkc6CisJ Y2FzZSBEVUtfVEFHX0JVRkZFUjoKKwljYXNlIERVS19UQUdfTElHSFRGVU5DOiB7CisJCWR1a19z aXplX3QgcmV0OworCQlkdWtfZ2V0X3Byb3Bfc3RyaWR4KHRociwgaWR4LCBEVUtfU1RSSURYX0xF TkdUSCk7CisJCXJldCA9IChkdWtfc2l6ZV90KSBkdWtfdG9fbnVtYmVyX20xKHRocik7CisJCWR1 a19wb3BfdW5zYWZlKHRocik7CisJCXJldHVybiByZXQ7CisJfQorI2Vsc2UgIC8qIERVS19VU0Vf UFJFRkVSX1NJWkUgKi8KKwljYXNlIERVS19UQUdfU1RSSU5HOiB7CisJCWR1a19oc3RyaW5nICpo ID0gRFVLX1RWQUxfR0VUX1NUUklORyh0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJ aWYgKERVS19VTkxJS0VMWShEVUtfSFNUUklOR19IQVNfU1lNQk9MKGgpKSkgeworCQkJcmV0dXJu IDA7CisJCX0KKwkJcmV0dXJuIChkdWtfc2l6ZV90KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTiho KTsKKwl9CisJY2FzZSBEVUtfVEFHX0JVRkZFUjogeworCQlkdWtfaGJ1ZmZlciAqaCA9IERVS19U VkFMX0dFVF9CVUZGRVIodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJCXJldHVybiAo ZHVrX3NpemVfdCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaCk7CisJfQorCWNhc2UgRFVLX1RBR19M SUdIVEZVTkM6IHsKKwkJLyogV2UgY291bGQgbG9vayB1cCB0aGUgbGVuZ3RoIGZyb20gdGhlIGxp Z2h0ZnVuYyBkdWtfdHZhbCwKKwkJICogYnV0IHNpbmNlIER1a3RhcGUgMi4yIGxpZ2h0ZnVuYyAu bGVuZ3RoIGNvbWVzIGZyb20KKwkJICogJU5hdGl2ZUZ1bmN0aW9uUHJvdG90eXBlJSB3aGljaCBj YW4gYmUgb3ZlcnJpZGRlbiwgc28KKwkJICogbG9vayB1cCB0aGUgcHJvcGVydHkgZXhwbGljaXRs eS4KKwkJICovCisJCWR1a19zaXplX3QgcmV0OworCQlkdWtfZ2V0X3Byb3Bfc3RyaWR4KHRociwg aWR4LCBEVUtfU1RSSURYX0xFTkdUSCk7CisJCXJldCA9IChkdWtfc2l6ZV90KSBkdWtfdG9fbnVt YmVyX20xKHRocik7CisJCWR1a19wb3BfdW5zYWZlKHRocik7CisJCXJldHVybiByZXQ7CisJfQor I2VuZGlmICAvKiBEVUtfVVNFX1BSRUZFUl9TSVpFICovCisJY2FzZSBEVUtfVEFHX09CSkVDVDog eworCQlkdWtfaG9iamVjdCAqaCA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNT RVJUKGggIT0gTlVMTCk7CisJCXJldHVybiAoZHVrX3NpemVfdCkgZHVrX2hvYmplY3RfZ2V0X2xl bmd0aCh0aHIsIGgpOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwljYXNlIERV S19UQUdfRkFTVElOVDoKKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIG51bWJlciBvciAndW51c2Vk JyAqLworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05VTUJFUih0dikgfHwgRFVLX1RWQUxfSVNf VU5VU0VEKHR2KSk7CisJCXJldHVybiAwOworCX0KKworCURVS19VTlJFQUNIQUJMRSgpOworfQor CisvKgorICogIGR1a19rbm93bl94eHgoKSBoZWxwZXJzCisgKgorICogIFVzZWQgaW50ZXJuYWxs eSB3aGVuIHdlJ3JlIDEwMCUgc3VyZSB0aGF0IGEgY2VydGFpbiBpbmRleCBpcyB2YWxpZCBhbmQK KyAqICBjb250YWlucyBhbiBvYmplY3Qgb2YgYSBjZXJ0YWluIHR5cGUuICBGb3IgZXhhbXBsZSwg aWYgd2UgZHVrX3B1c2hfb2JqZWN0KCkKKyAqICB3ZSBjYW4gdGhlbiBzYWZlbHkgZHVrX2tub3du X2hvYmplY3QodGhyLCAtMSkuICBUaGVzZSBoZWxwZXJzIGp1c3QgYXNzZXJ0CisgKiAgZm9yIHRo ZSBpbmRleCBhbmQgdHlwZSwgYW5kIGlmIHRoZSBhc3N1bXB0aW9ucyBhcmUgbm90IHZhbGlkLCBt ZW1vcnkgdW5zYWZlCisgKiAgYmVoYXZpb3IgaGFwcGVucy4KKyAqLworCitEVUtfTE9DQUwgZHVr X2hlYXBoZHIgKmR1a19fa25vd25faGVhcGhkcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg aWR4KSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19oZWFwaGRyICpoOworCisJRFVLX0FTU0VSVF9D VFhfVkFMSUQodGhyKTsKKwlpZiAoaWR4IDwgMCkgeworCQl0diA9IHRoci0+dmFsc3RhY2tfdG9w ICsgaWR4OworCX0gZWxzZSB7CisJCXR2ID0gdGhyLT52YWxzdGFja19ib3R0b20gKyBpZHg7CisJ fQorCURVS19BU1NFUlQodHYgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQo dHYgPCB0aHItPnZhbHN0YWNrX3RvcCk7CisJaCA9IERVS19UVkFMX0dFVF9IRUFQSERSKHR2KTsK KwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJcmV0dXJuIGg7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfaHN0cmluZyAqZHVrX2tub3duX2hzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90 IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChkdWtfZ2V0 X2hzdHJpbmcodGhyLCBpZHgpICE9IE5VTEwpOworCXJldHVybiAoZHVrX2hzdHJpbmcgKikgZHVr X19rbm93bl9oZWFwaGRyKHRociwgaWR4KTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19ob2JqZWN0 ICpkdWtfa25vd25faG9iamVjdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKGR1a19nZXRfaG9iamVjdCh0 aHIsIGlkeCkgIT0gTlVMTCk7CisJcmV0dXJuIChkdWtfaG9iamVjdCAqKSBkdWtfX2tub3duX2hl YXBoZHIodGhyLCBpZHgpOworfQorCitEVUtfSU5URVJOQUwgZHVrX2hidWZmZXIgKmR1a19rbm93 bl9oYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlEVUtfQVNTRVJU X0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoZHVrX2dldF9oYnVmZmVyKHRociwgaWR4KSAh PSBOVUxMKTsKKwlyZXR1cm4gKGR1a19oYnVmZmVyICopIGR1a19fa25vd25faGVhcGhkcih0aHIs IGlkeCk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaGNvbXBmdW5jICpkdWtfa25vd25faGNvbXBm dW5jKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCURVS19BU1NFUlQoZHVrX2dldF9oY29tcGZ1bmModGhyLCBpZHgpICE9IE5V TEwpOworCXJldHVybiAoZHVrX2hjb21wZnVuYyAqKSBkdWtfX2tub3duX2hlYXBoZHIodGhyLCBp ZHgpOworfQorCitEVUtfSU5URVJOQUwgZHVrX2huYXRmdW5jICpkdWtfa25vd25faG5hdGZ1bmMo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisJRFVLX0FTU0VSVChkdWtfZ2V0X2huYXRmdW5jKHRociwgaWR4KSAhPSBOVUxMKTsK KwlyZXR1cm4gKGR1a19obmF0ZnVuYyAqKSBkdWtfX2tub3duX2hlYXBoZHIodGhyLCBpZHgpOwor fQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfc2V0X2xlbmd0aChkdWtfaHRocmVhZCAqdGhyLCBk dWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90IGxlbikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwlpZHggPSBkdWtfbm9ybWFsaXplX2luZGV4KHRociwgaWR4KTsKKwlkdWtfcHVzaF91 aW50KHRociwgKGR1a191aW50X3QpIGxlbik7CisJZHVrX3B1dF9wcm9wX3N0cmlkeCh0aHIsIGlk eCwgRFVLX1NUUklEWF9MRU5HVEgpOworfQorCisvKgorICogIENvbnZlcnNpb25zIGFuZCBjb2Vy Y2lvbnMKKyAqCisgKiAgVGhlIGNvbnZlcnNpb24vY29lcmNpb25zIGFyZSBpbi1wbGFjZSBvcGVy YXRpb25zIG9uIHRoZSB2YWx1ZSBzdGFjay4KKyAqICBTb21lIG9wZXJhdGlvbnMgYXJlIGltcGxl bWVudGVkIGhlcmUgZGlyZWN0bHksIHdoaWxlIG90aGVycyBjYWxsIGEKKyAqICBoZWxwZXIgaW4g ZHVrX2pzX29wcy5jIGFmdGVyIHZhbGlkYXRpbmcgYXJndW1lbnRzLgorICovCisKKy8qIEU1IFNl Y3Rpb24gOC4xMi44ICovCisKK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fZGVmYXVsdHZhbHVl X2NvZXJjZV9hdHRlbXB0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19zbWFs bF91aW50X3QgZnVuY19zdHJpZHgpIHsKKwlpZiAoZHVrX2dldF9wcm9wX3N0cmlkeCh0aHIsIGlk eCwgZnVuY19zdHJpZHgpKSB7CisJCS8qIFsgLi4uIGZ1bmMgXSAqLworCQlpZiAoZHVrX2lzX2Nh bGxhYmxlKHRociwgLTEpKSB7CisJCQlkdWtfZHVwKHRociwgaWR4KTsgICAgICAgICAvKiAtPiBb IC4uLiBmdW5jIHRoaXMgXSAqLworCQkJZHVrX2NhbGxfbWV0aG9kKHRociwgMCk7ICAgICAvKiAt PiBbIC4uLiByZXR2YWwgXSAqLworCQkJaWYgKGR1a19pc19wcmltaXRpdmUodGhyLCAtMSkpIHsK KwkJCQlkdWtfcmVwbGFjZSh0aHIsIGlkeCk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQkvKiBb IC4uLiByZXR2YWwgXTsgcG9wcGVkIGJlbG93ICovCisJCX0KKwl9CisJZHVrX3BvcF91bnNhZmUo dGhyKTsgIC8qIFsgLi4uIGZ1bmMvcmV0dmFsIF0gLT4gWyAuLi4gXSAqLworCXJldHVybiAwOwor fQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfdG9fdW5kZWZpbmVkKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCisJdHYgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4KTsKKwlEVUtfQVNTRVJU KHR2ICE9IE5VTEwpOworCURVS19UVkFMX1NFVF9VTkRFRklORURfVVBEUkVGKHRociwgdHYpOyAg Lyogc2lkZSBlZmZlY3RzICovCit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a190b19udWxsKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4 KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCURVS19UVkFMX1NFVF9OVUxMX1VQRFJFRih0 aHIsIHR2KTsgIC8qIHNpZGUgZWZmZWN0cyAqLworfQorCisvKiBFNSBTZWN0aW9uIDkuMSAqLwor RFVLX0xPQ0FMIGNvbnN0IGNoYXIgKiBjb25zdCBkdWtfX3RvcHJpbV9oaW50X3N0cmluZ3NbM10g PSB7CisJImRlZmF1bHQiLCAic3RyaW5nIiwgIm51bWJlciIKK307CitEVUtfTE9DQUwgdm9pZCBk dWtfX3RvX3ByaW1pdGl2ZV9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwg ZHVrX2ludF90IGhpbnQsIGR1a19ib29sX3QgY2hlY2tfc3ltYm9sKSB7CisJLyogSW5saW5lIGlu aXRpYWxpemVyIGZvciBjb2VyY2Vyc1tdIGlzIG5vdCBhbGxvd2VkIGJ5IG9sZCBjb21waWxlcnMg bGlrZSBCQ0MuICovCisJZHVrX3NtYWxsX3VpbnRfdCBjb2VyY2Vyc1syXTsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChoaW50ID09IERVS19ISU5UX05PTkUgfHwg aGludCA9PSBEVUtfSElOVF9OVU1CRVIgfHwgaGludCA9PSBEVUtfSElOVF9TVFJJTkcpOworCisJ aWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgaWR4KTsKKworCS8qIElmIGFs cmVhZHkgcHJpbWl0aXZlLCByZXR1cm4gYXMgaXMuICovCisJaWYgKCFkdWtfY2hlY2tfdHlwZV9t YXNrKHRociwgaWR4LCBEVUtfVFlQRV9NQVNLX09CSkVDVCB8CisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQyB8CisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0JVRkZFUikpIHsKKwkJRFVLX0FT U0VSVCghZHVrX2lzX2J1ZmZlcih0aHIsIGlkeCkpOyAgLyogZHVrX3RvX3N0cmluZygpIHJlbGll cyBvbiB0aGlzIGJlaGF2aW9yICovCisJCXJldHVybjsKKwl9CisKKwkvKiBAQHRvUHJpbWl0aXZl IGxvb2t1cC4gIEFsc28gZG8gZm9yIHBsYWluIGJ1ZmZlcnMgYW5kIGxpZ2h0ZnVuY3MKKwkgKiB3 aGljaCBtaW1pYyBvYmplY3RzLgorCSAqLworCWlmIChjaGVja19zeW1ib2wgJiYgZHVrX2dldF9t ZXRob2Rfc3RyaWR4KHRociwgaWR4LCBEVUtfU1RSSURYX1dFTExLTk9XTl9TWU1CT0xfVE9fUFJJ TUlUSVZFKSkgeworCQlEVUtfQVNTRVJUKGhpbnQgPj0gMCAmJiAoZHVrX3NpemVfdCkgaGludCA8 IHNpemVvZihkdWtfX3RvcHJpbV9oaW50X3N0cmluZ3MpIC8gc2l6ZW9mKGNvbnN0IGNoYXIgKikp OworCQlkdWtfZHVwKHRociwgaWR4KTsKKwkJZHVrX3B1c2hfc3RyaW5nKHRociwgZHVrX190b3By aW1faGludF9zdHJpbmdzW2hpbnRdKTsKKwkJZHVrX2NhbGxfbWV0aG9kKHRociwgMSk7ICAvKiBb IC4uLiBtZXRob2QgdmFsdWUgaGludCBdIC0+IFsgLi4uIHJlc10gKi8KKwkJaWYgKGR1a19jaGVj a190eXBlX21hc2sodGhyLCAtMSwgRFVLX1RZUEVfTUFTS19PQkpFQ1QgfAorCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19MSUdIVEZVTkMgfAor CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0JVRkZFUikp IHsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlkdWtfcmVwbGFjZSh0aHIsIGlkeCk7CisJCXJldHVy bjsKKwl9CisKKwkvKiBPYmplY3RzIGFyZSBjb2VyY2VkIGJhc2VkIG9uIEU1IHNwZWNpZmljYXRp b24uCisJICogTGlnaHRmdW5jcyBhcmUgY29lcmNlZCBiZWNhdXNlIHRoZXkgYmVoYXZlIGxpa2UK KwkgKiBvYmplY3RzIGV2ZW4gaWYgdGhleSdyZSBpbnRlcm5hbGx5IGEgcHJpbWl0aXZlCisJICog dHlwZS4gIFNhbWUgYXBwbGllcyB0byBwbGFpbiBidWZmZXJzLCB3aGljaCBiZWhhdmUKKwkgKiBs aWtlIEFycmF5QnVmZmVyIG9iamVjdHMgc2luY2UgRHVrdGFwZSAyLnguCisJICovCisKKwkvKiBI aW50IG1hZ2ljIGZvciBEYXRlIGlzIHVubmVjZXNzYXJ5IGluIEVTMjAxNSBiZWNhdXNlIG9mCisJ ICogRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0uICBIb3dldmVyLCBpdCBpcyBuZWVkZWQg aWYKKwkgKiBzeW1ib2wgc3VwcG9ydCBpcyBub3QgZW5hYmxlZC4KKwkgKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfU1lNQk9MX0JVSUxUSU4pCisJaWYgKGhpbnQgPT0gRFVLX0hJTlRfTk9ORSkgewor CQloaW50ID0gRFVLX0hJTlRfTlVNQkVSOworCX0KKyNlbHNlICAvKiBEVUtfVVNFX1NZTUJPTF9C VUlMVElOICovCisJaWYgKGhpbnQgPT0gRFVLX0hJTlRfTk9ORSkgeworCQlkdWtfc21hbGxfdWlu dF90IGNsYXNzX251bWJlcjsKKworCQljbGFzc19udW1iZXIgPSBkdWtfZ2V0X2NsYXNzX251bWJl cih0aHIsIGlkeCk7CisJCWlmIChjbGFzc19udW1iZXIgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfREFU RSkgeworCQkJaGludCA9IERVS19ISU5UX1NUUklORzsKKwkJfSBlbHNlIHsKKwkJCWhpbnQgPSBE VUtfSElOVF9OVU1CRVI7CisJCX0KKwl9CisjZW5kaWYgIC8qIERVS19VU0VfU1lNQk9MX0JVSUxU SU4gKi8KKworCWNvZXJjZXJzWzBdID0gRFVLX1NUUklEWF9WQUxVRV9PRjsKKwljb2VyY2Vyc1sx XSA9IERVS19TVFJJRFhfVE9fU1RSSU5HOworCWlmIChoaW50ID09IERVS19ISU5UX1NUUklORykg eworCQljb2VyY2Vyc1swXSA9IERVS19TVFJJRFhfVE9fU1RSSU5HOworCQljb2VyY2Vyc1sxXSA9 IERVS19TVFJJRFhfVkFMVUVfT0Y7CisJfQorCisJaWYgKGR1a19fZGVmYXVsdHZhbHVlX2NvZXJj ZV9hdHRlbXB0KHRociwgaWR4LCBjb2VyY2Vyc1swXSkpIHsKKwkJRFVLX0FTU0VSVCghZHVrX2lz X2J1ZmZlcih0aHIsIGlkeCkpOyAgLyogZHVrX3RvX3N0cmluZygpIHJlbGllcyBvbiB0aGlzIGJl aGF2aW9yICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoZHVrX19kZWZhdWx0dmFsdWVfY29lcmNl X2F0dGVtcHQodGhyLCBpZHgsIGNvZXJjZXJzWzFdKSkgeworCQlEVUtfQVNTRVJUKCFkdWtfaXNf YnVmZmVyKHRociwgaWR4KSk7ICAvKiBkdWtfdG9fc3RyaW5nKCkgcmVsaWVzIG9uIHRoaXMgYmVo YXZpb3IgKi8KKwkJcmV0dXJuOworCX0KKworIGZhaWw6CisJRFVLX0VSUk9SX1RZUEUodGhyLCBE VUtfU1RSX1RPUFJJTUlUSVZFX0ZBSUxFRCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOwor fQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfdG9fcHJpbWl0aXZlKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgsIGR1a19pbnRfdCBoaW50KSB7CisJZHVrX190b19wcmltaXRpdmVfaGVs cGVyKHRociwgaWR4LCBoaW50LCAxIC8qY2hlY2tfc3ltYm9sKi8pOworfQorCisjaWYgZGVmaW5l ZChEVUtfVVNFX1NZTUJPTF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3RvX3ByaW1p dGl2ZV9vcmRpbmFyeShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfaW50X3Qg aGludCkgeworCWR1a19fdG9fcHJpbWl0aXZlX2hlbHBlcih0aHIsIGlkeCwgaGludCwgMCAvKmNo ZWNrX3N5bWJvbCovKTsKK30KKyNlbmRpZgorCisvKiBFNSBTZWN0aW9uIDkuMiAqLworRFVLX0VY VEVSTkFMIGR1a19ib29sX3QgZHVrX3RvX2Jvb2xlYW4oZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCkgeworCWR1a190dmFsICp0djsKKwlkdWtfYm9vbF90IHZhbDsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisKKwlpZHggPSBkdWtfcmVxdWlyZV9ub3JtYWxpemVfaW5kZXgo dGhyLCBpZHgpOworCXR2ID0gRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIGlkeCk7CisJRFVLX0FT U0VSVCh0diAhPSBOVUxMKTsKKworCXZhbCA9IGR1a19qc190b2Jvb2xlYW4odHYpOworCURVS19B U1NFUlQodmFsID09IDAgfHwgdmFsID09IDEpOworCisJLyogTm90ZTogbm8gbmVlZCB0byByZS1s b29rdXAgdHYsIGNvbnZlcnNpb24gaXMgc2lkZSBlZmZlY3QgZnJlZS4gKi8KKwlEVUtfQVNTRVJU KHR2ICE9IE5VTEwpOworCURVS19UVkFMX1NFVF9CT09MRUFOX1VQRFJFRih0aHIsIHR2LCB2YWwp OyAgLyogc2lkZSBlZmZlY3RzICovCisJcmV0dXJuIHZhbDsKK30KKworRFVLX0lOVEVSTkFMIGR1 a19ib29sX3QgZHVrX3RvX2Jvb2xlYW5fdG9wX3BvcChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVr X3R2YWwgKnR2OworCWR1a19ib29sX3QgdmFsOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhy KTsKKworCXR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKHR2ICE9 IE5VTEwpOworCisJdmFsID0gZHVrX2pzX3RvYm9vbGVhbih0dik7CisJRFVLX0FTU0VSVCh2YWwg PT0gMCB8fCB2YWwgPT0gMSk7CisKKwlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCXJldHVybiB2YWw7 Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfZG91YmxlX3QgZHVrX3RvX251bWJlcihkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19kb3VibGVfdCBk OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCS8qIFhYWDogTm8gbmVlZCB0byBu b3JtYWxpemU7IHRoZSB3aG9sZSBvcGVyYXRpb24gY291bGQgYmUgaW5saW5lZCBoZXJlIHRvCisJ ICogYXZvaWQgJ3R2JyByZS1sb29rdXAuCisJICovCisJaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFs aXplX2luZGV4KHRociwgaWR4KTsKKwl0diA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCBpZHgp OworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisJZCA9IGR1a19qc190b251bWJlcih0aHIsIHR2 KTsgIC8qIFhYWDogZmFzdGludCBjb2VyY2lvbj8gbm93IHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBh IG5vbi1mYXN0aW50ICovCisKKwkvKiBUb051bWJlcigpIG1heSBoYXZlIHNpZGUgZWZmZWN0cyBz byBtdXN0IHJlbG9va3VwICd0dicuICovCisJdHYgPSBEVUtfR0VUX1RWQUxfUE9TSURYKHRociwg aWR4KTsKKwlEVUtfVFZBTF9TRVRfTlVNQkVSX1VQRFJFRih0aHIsIHR2LCBkKTsgIC8qIHNpZGUg ZWZmZWN0cyAqLworCXJldHVybiBkOworfQorCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1 a190b19udW1iZXJfbTEoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisJcmV0dXJuIGR1a190b19udW1iZXIodGhyLCAtMSk7Cit9CitEVUtfSU5URVJOQUwg ZHVrX2RvdWJsZV90IGR1a190b19udW1iZXJfbTIoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19B U1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a190b19udW1iZXIodGhyLCAtMik7Cit9 CisKK0RVS19JTlRFUk5BTCBkdWtfZG91YmxlX3QgZHVrX3RvX251bWJlcl90dmFsKGR1a19odGhy ZWFkICp0aHIsIGR1a190dmFsICp0dikgeworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0la RSkKKwlkdWtfZG91YmxlX3QgcmVzOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CWR1a19wdXNoX3R2YWwodGhyLCB0dik7CisJcmVzID0gZHVrX3RvX251bWJlcl9tMSh0aHIpOwor CWR1a19wb3BfdW5zYWZlKHRocik7CisJcmV0dXJuIHJlczsKKyNlbHNlCisJZHVrX2RvdWJsZV90 IHJlczsKKwlkdWtfdHZhbCAqdHZfZHN0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KwlEVUtfX0FTU0VSVF9TUEFDRSgpOworCisJdHZfZHN0ID0gdGhyLT52YWxzdGFja190b3ArKzsK KwlEVUtfVFZBTF9TRVRfVFZBTCh0dl9kc3QsIHR2KTsKKwlEVUtfVFZBTF9JTkNSRUYodGhyLCB0 dl9kc3QpOyAgLyogZGVjcmVmIG5vdCBuZWNlc3NhcnkgKi8KKwlyZXMgPSBkdWtfdG9fbnVtYmVy X20xKHRocik7ICAvKiBpbnZhbGlkYXRlcyB0dl9kc3QgKi8KKworCXR2X2RzdCA9IC0tdGhyLT52 YWxzdGFja190b3A7CisJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19OVU1CRVIodHZfZHN0KSk7CisJ RFVLX0FTU0VSVCghRFVLX1RWQUxfTkVFRFNfUkVGQ09VTlRfVVBEQVRFKHR2X2RzdCkpOyAgLyog cGxhaW4gbnVtYmVyICovCisJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dl9kc3QpOyAgLyogdmFs c3RhY2sgaW5pdCBwb2xpY3kgKi8KKworCXJldHVybiByZXM7CisjZW5kaWYKK30KKworLyogWFhY OiBjb21iaW5lIGFsbCB0aGUgaW50ZWdlciBjb252ZXJzaW9uczogdGhleSBzaGFyZSBldmVyeXRo aW5nCisgKiBidXQgdGhlIGhlbHBlciBmdW5jdGlvbiBmb3IgY29lcmNpb24uCisgKi8KKwordHlw ZWRlZiBkdWtfZG91YmxlX3QgKCpkdWtfX3RvaW50X2NvZXJjZXIpKGR1a19odGhyZWFkICp0aHIs IGR1a190dmFsICp0dik7CisKK0RVS19MT0NBTCBkdWtfZG91YmxlX3QgZHVrX190b19pbnRfdWlu dF9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX190b2ludF9jb2Vy Y2VyIGNvZXJjZV9mdW5jKSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19kb3VibGVfdCBkOworCisJ RFVLX0FTU0VSVF9DVFhfVkFMSUQodGhyKTsKKworCXR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIs IGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9G QVNUSU5UKQorCS8qIElmIGFyZ3VtZW50IGlzIGEgZmFzdGludCwgZ3VhcmFudGVlIHRoYXQgaXQg cmVtYWlucyBvbmUuCisJICogVGhlcmUncyBubyBkb3duZ3JhZGUgY2hlY2sgZm9yIG90aGVyIGNh c2VzLgorCSAqLworCWlmIChEVUtfVFZBTF9JU19GQVNUSU5UKHR2KSkgeworCQkvKiBYWFg6IFVu bmVjZXNzYXJ5IGNvbnZlcnNpb24gYmFjayBhbmQgZm9ydGguICovCisJCXJldHVybiAoZHVrX2Rv dWJsZV90KSBEVUtfVFZBTF9HRVRfRkFTVElOVCh0dik7CisJfQorI2VuZGlmCisJZCA9IGNvZXJj ZV9mdW5jKHRociwgdHYpOworCisJLyogWFhYOiBmYXN0aW50PyAqLworCisJLyogUmVsb29rdXAg aW4gY2FzZSBjb2VyY2VfZnVuYygpIGhhcyBzaWRlIGVmZmVjdHMsIGUuZy4gZW5kcyB1cCBjb2Vy Y2luZyBhbiBvYmplY3QgKi8KKwl0diA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCBpZHgpOworCURV S19UVkFMX1NFVF9OVU1CRVJfVVBEUkVGKHRociwgdHYsIGQpOyAgLyogc2lkZSBlZmZlY3RzICov CisJcmV0dXJuIGQ7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaW50X3QgZHVrX3RvX2ludChkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJLyogVmFsdWUgY29lcmNpb24gKGluIHN0 YWNrKTogVG9JbnRlZ2VyKCksIEU1IFNlY3Rpb24gOS40LAorCSAqIEFQSSByZXR1cm4gdmFsdWUg Y29lcmNpb246IGN1c3RvbS4KKwkgKi8KKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCSh2 b2lkKSBkdWtfX3RvX2ludF91aW50X2hlbHBlcih0aHIsIGlkeCwgZHVrX2pzX3RvaW50ZWdlcik7 CisJcmV0dXJuIChkdWtfaW50X3QpIGR1a19fYXBpX2NvZXJjZV9kMmkodGhyLCBpZHgsIDAgLypk ZWZfdmFsdWUqLywgMCAvKnJlcXVpcmUqLyk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfdWludF90 IGR1a190b191aW50KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwkvKiBWYWx1 ZSBjb2VyY2lvbiAoaW4gc3RhY2spOiBUb0ludGVnZXIoKSwgRTUgU2VjdGlvbiA5LjQsCisJICog QVBJIHJldHVybiB2YWx1ZSBjb2VyY2lvbjogY3VzdG9tLgorCSAqLworCURVS19BU1NFUlRfQVBJ X0VOVFJZKHRocik7CisJKHZvaWQpIGR1a19fdG9faW50X3VpbnRfaGVscGVyKHRociwgaWR4LCBk dWtfanNfdG9pbnRlZ2VyKTsKKwlyZXR1cm4gKGR1a191aW50X3QpIGR1a19fYXBpX2NvZXJjZV9k MnVpKHRociwgaWR4LCAwIC8qZGVmX3ZhbHVlKi8sIDAgLypyZXF1aXJlKi8pOworfQorCitEVUtf RVhURVJOQUwgZHVrX2ludDMyX3QgZHVrX3RvX2ludDMyKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisJZHVrX2ludDMyX3QgcmV0OworCisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKworCXR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGlkeCk7 CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKwlyZXQgPSBkdWtfanNfdG9pbnQzMih0aHIsIHR2 KTsKKworCS8qIFJlbG9va3VwIGluIGNhc2UgY29lcmNlX2Z1bmMoKSBoYXMgc2lkZSBlZmZlY3Rz LCBlLmcuIGVuZHMgdXAgY29lcmNpbmcgYW4gb2JqZWN0ICovCisJdHYgPSBkdWtfcmVxdWlyZV90 dmFsKHRociwgaWR4KTsKKwlEVUtfVFZBTF9TRVRfSTMyX1VQRFJFRih0aHIsIHR2LCByZXQpOyAg Lyogc2lkZSBlZmZlY3RzICovCisJcmV0dXJuIHJldDsKK30KKworRFVLX0VYVEVSTkFMIGR1a191 aW50MzJfdCBkdWtfdG9fdWludDMyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsK KwlkdWtfdHZhbCAqdHY7CisJZHVrX3VpbnQzMl90IHJldDsKKworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwl0diA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCBpZHgpOworCURVS19BU1NF UlQodHYgIT0gTlVMTCk7CisJcmV0ID0gZHVrX2pzX3RvdWludDMyKHRociwgdHYpOworCisJLyog UmVsb29rdXAgaW4gY2FzZSBjb2VyY2VfZnVuYygpIGhhcyBzaWRlIGVmZmVjdHMsIGUuZy4gZW5k cyB1cCBjb2VyY2luZyBhbiBvYmplY3QgKi8KKwl0diA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCBp ZHgpOworCURVS19UVkFMX1NFVF9VMzJfVVBEUkVGKHRociwgdHYsIHJldCk7ICAvKiBzaWRlIGVm ZmVjdHMgKi8KKwlyZXR1cm4gcmV0OworfQorCitEVUtfRVhURVJOQUwgZHVrX3VpbnQxNl90IGR1 a190b191aW50MTYoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a190dmFs ICp0djsKKwlkdWtfdWludDE2X3QgcmV0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCXR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBO VUxMKTsKKwlyZXQgPSBkdWtfanNfdG91aW50MTYodGhyLCB0dik7CisKKwkvKiBSZWxvb2t1cCBp biBjYXNlIGNvZXJjZV9mdW5jKCkgaGFzIHNpZGUgZWZmZWN0cywgZS5nLiBlbmRzIHVwIGNvZXJj aW5nIGFuIG9iamVjdCAqLworCXR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGlkeCk7CisJRFVL X1RWQUxfU0VUX1UzMl9VUERSRUYodGhyLCB0diwgcmV0KTsgIC8qIHNpZGUgZWZmZWN0cyAqLwor CXJldHVybiByZXQ7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBP UlQpCisvKiBTcGVjaWFsIGNvZXJjaW9uIGZvciBVaW50OENsYW1wZWRBcnJheS4gKi8KK0RVS19J TlRFUk5BTCBkdWtfdWludDhfdCBkdWtfdG9fdWludDhjbGFtcGVkKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfZG91YmxlX3QgZDsKKwlkdWtfZG91YmxlX3QgdDsKKwlk dWtfdWludDhfdCByZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJLyogWFhY OiBTaW1wbGlmeSB0aGlzIGFsZ29yaXRobSwgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbWUgdXAg d2l0aAorCSAqIGEgc2hvcnRlciBhbmQgZmFzdGVyIGFsZ29yaXRobSBieSBpbnNwZWN0aW5nIElF RUUgcmVwcmVzZW50YXRpb24KKwkgKiBkaXJlY3RseS4KKwkgKi8KKworCWQgPSBkdWtfdG9fbnVt YmVyKHRociwgaWR4KTsKKwlpZiAoZCA8PSAwLjApIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlm IChkID49IDI1NSkgeworCQlyZXR1cm4gMjU1OworCX0gZWxzZSBpZiAoRFVLX0lTTkFOKGQpKSB7 CisJCS8qIEF2b2lkIE5hTi10by1pbnRlZ2VyIGNvZXJjaW9uIGFzIGl0IGlzIGNvbXBpbGVyIHNw ZWNpZmljLiAqLworCQlyZXR1cm4gMDsKKwl9CisKKwl0ID0gZCAtIERVS19GTE9PUihkKTsKKwlp ZiAodCA9PSAwLjUpIHsKKwkJLyogRXhhY3QgaGFsZndheSwgcm91bmQgdG8gZXZlbi4gKi8KKwkJ cmV0ID0gKGR1a191aW50OF90KSBkOworCQlyZXQgPSAocmV0ICsgMSkgJiAweGZlOyAgLyogRXhh bXBsZTogZD0zLjUsIHQ9MC41IC0+IHJldCA9ICgzICsgMSkgJiAweGZlID0gNCAmIDB4ZmUgPSA0 CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgKiBFeGFtcGxlOiBkPTQuNSwgdD0wLjUgLT4g cmV0ID0gKDQgKyAxKSAmIDB4ZmUgPSA1ICYgMHhmZSA9IDQKKwkJICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworCX0gZWxzZSB7CisJCS8qIE5vdCBoYWxmd2F5LCByb3VuZCB0byBuZWFyZXN0 LiAqLworCQlyZXQgPSAoZHVrX3VpbnQ4X3QpIChkICsgMC41KTsKKwl9CisJcmV0dXJuIHJldDsK K30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCitEVUtfRVhU RVJOQUwgY29uc3QgY2hhciAqZHVrX3RvX2xzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X2xlbikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRo cik7CisKKwkodm9pZCkgZHVrX3RvX3N0cmluZyh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVChkdWtf aXNfc3RyaW5nKHRociwgaWR4KSk7CisJcmV0dXJuIGR1a19yZXF1aXJlX2xzdHJpbmcodGhyLCBp ZHgsIG91dF9sZW4pOworfQorCitEVUtfTE9DQUwgZHVrX3JldF90IGR1a19fc2FmZV90b19zdHJp bmdfcmF3KGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnVkYXRhKSB7CisJRFVLX0FTU0VSVF9DVFhf VkFMSUQodGhyKTsKKwlEVUtfVU5SRUYodWRhdGEpOworCisJZHVrX3RvX3N0cmluZyh0aHIsIC0x KTsKKwlyZXR1cm4gMTsKK30KKworRFVLX0VYVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19zYWZlX3Rv X2xzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0 X2xlbikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZHggPSBkdWtfcmVxdWly ZV9ub3JtYWxpemVfaW5kZXgodGhyLCBpZHgpOworCisJLyogV2UgaW50ZW50aW9uYWxseSBpZ25v cmUgdGhlIGR1a19zYWZlX2NhbGwoKSByZXR1cm4gdmFsdWUgYW5kIG9ubHkKKwkgKiBjaGVjayB0 aGUgb3V0cHV0IHR5cGUuICBUaGlzIHdheSB3ZSBkb24ndCBhbHNvIG5lZWQgdG8gY2hlY2sgdGhh dAorCSAqIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBpbmRlZWQgYSBzdHJpbmcgaW4gdGhlIHN1Y2Nl c3MgY2FzZS4KKwkgKi8KKworCWR1a19kdXAodGhyLCBpZHgpOworCSh2b2lkKSBkdWtfc2FmZV9j YWxsKHRociwgZHVrX19zYWZlX3RvX3N0cmluZ19yYXcsIE5VTEwgLyp1ZGF0YSovLCAxIC8qbmFy Z3MqLywgMSAvKm5yZXRzKi8pOworCWlmICghZHVrX2lzX3N0cmluZyh0aHIsIC0xKSkgeworCQkv KiBFcnJvcjogdHJ5IGNvZXJjaW5nIGVycm9yIHRvIHN0cmluZyBvbmNlLiAqLworCQkodm9pZCkg ZHVrX3NhZmVfY2FsbCh0aHIsIGR1a19fc2FmZV90b19zdHJpbmdfcmF3LCBOVUxMIC8qdWRhdGEq LywgMSAvKm5hcmdzKi8sIDEgLypucmV0cyovKTsKKwkJaWYgKCFkdWtfaXNfc3RyaW5nKHRociwg LTEpKSB7CisJCQkvKiBEb3VibGUgZXJyb3IgKi8KKwkJCWR1a19wb3BfdW5zYWZlKHRocik7CisJ CQlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIERVS19TVFJJRFhfVUNfRVJST1IpOworCQl9 IGVsc2UgeworCQkJOworCQl9CisJfSBlbHNlIHsKKwkJLyogU3RyaW5nOyBtYXkgYmUgYSBzeW1i b2wsIGFjY2VwdGVkLiAqLworCQk7CisJfQorCURVS19BU1NFUlQoZHVrX2lzX3N0cmluZyh0aHIs IC0xKSk7CisKKwlkdWtfcmVwbGFjZSh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVChkdWtfZ2V0X3N0 cmluZyh0aHIsIGlkeCkgIT0gTlVMTCk7CisJcmV0dXJuIGR1a19nZXRfbHN0cmluZyh0aHIsIGlk eCwgb3V0X2xlbik7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaHN0cmluZyAqZHVrX3RvX3Byb3Bl cnR5X2tleV9oc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtf aHN0cmluZyAqaDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlkdWtfdG9fcHJp bWl0aXZlKHRociwgaWR4LCBEVUtfSElOVF9TVFJJTkcpOyAgLyogbmVlZGVkIGZvciBlLmcuIFN5 bWJvbCBvYmplY3RzICovCisJaCA9IGR1a19nZXRfaHN0cmluZyh0aHIsIGlkeCk7CisJaWYgKGgg PT0gTlVMTCkgeworCQkvKiBUaGUgImlzIHN0cmluZz8iIGNoZWNrIG1heSBzZWVtIHVubmVjZXNz YXJ5LCBidXQgYXMgdGhpbmdzCisJCSAqIGFyZSBkdWtfdG9faHN0cmluZygpIGludm9rZXMgVG9T dHJpbmcoKSB3aGljaCBmYWlscyBmb3IKKwkJICogc3ltYm9scy4gIEJ1dCBzaW5jZSBzeW1ib2xz IGFyZSBhbHJlYWR5IHN0cmluZ3MgZm9yIER1a3RhcGUKKwkJICogQyBBUEksIHdlIGNoZWNrIGZv ciB0aGF0IGJlZm9yZSBkb2luZyB0aGUgY29lcmNpb24uCisJCSAqLworCQloID0gZHVrX3RvX2hz dHJpbmcodGhyLCBpZHgpOworCX0KKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJcmV0dXJuIGg7 Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkgIC8qIG9ubHkgbmVl ZGVkIGJ5IGRlYnVnZ2VyIGZvciBub3cgKi8KK0RVS19JTlRFUk5BTCBkdWtfaHN0cmluZyAqZHVr X3NhZmVfdG9faHN0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCSh2b2lkKSBkdWtfc2FmZV90b19zdHJpbmcodGhy LCBpZHgpOworCURVS19BU1NFUlQoZHVrX2lzX3N0cmluZyh0aHIsIGlkeCkpOworCURVS19BU1NF UlQoZHVrX2dldF9oc3RyaW5nKHRociwgaWR4KSAhPSBOVUxMKTsKKwlyZXR1cm4gZHVrX2tub3du X2hzdHJpbmcodGhyLCBpZHgpOworfQorI2VuZGlmCisKKy8qIFB1c2ggT2JqZWN0LnByb3RvdHlw ZS50b1N0cmluZygpIG91dHB1dCBmb3IgJ3R2Jy4gKi8KKyNpZiAwICAvKiBTZWUgWFhYIG5vdGUg d2h5IHRoaXMgdmFyaWFudCBkb2Vzbid0IHdvcmsuICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtf cHVzaF9jbGFzc19zdHJpbmdfdHZhbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYsIGR1 a19ib29sX3QgYXZvaWRfc2lkZV9lZmZlY3RzKSB7CisJZHVrX3VpbnRfdCBzdHJpZHhfYmlkeCA9 IDA7ICAvKiAocHJvdG90eXBlX2JpZHggPDwgMTYpICsgZGVmYXVsdF90YWdfc3RyaWR4ICovCisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJLyogQ29uY2VwdHVhbGx5IGZvciBhbnkg bm9uLXVuZGVmaW5lZC9udWxsIHZhbHVlIHdlIHNob3VsZCBkbyBhCisJICogVG9PYmplY3QoKSBj b2VyY2lvbiBhbmQgbG9vayB1cCBAQHRvU3RyaW5nVGFnIChmcm9tIHRoZSBvYmplY3QKKwkgKiBw cm90b3R5cGUpIHRvIHNlZSBpZiBhIGN1c3RvbSB0YWcgc2hvdWxkIGJlIHVzZWQuICBBdm9pZCB0 aGUKKwkgKiBhY3R1YWwgY29udmVyc2lvbiBieSBkb2luZyBhIHByb3RvdHlwZSBsb29rdXAgd2l0 aG91dCB0aGUgb2JqZWN0CisJICogY29lcmNpb24uICBIb3dldmVyLCBzZWUgcHJvYmxlbSBiZWxv dy4KKwkgKi8KKworCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiW29iamVjdCAiKTsgIC8qIC0+IFsg Li4uICJbb2JqZWN0IiBdICovCisKKwlzd2l0Y2ggKERVS19UVkFMX0dFVF9UQUcodHYpKSB7CisJ Y2FzZSBEVUtfVEFHX1VOVVNFRDogIC8qIFRyZWF0IGxpa2UgJ3VuZGVmaW5lZCcsIHNob3VsZG4n dCBoYXBwZW4uICovCisJY2FzZSBEVUtfVEFHX1VOREVGSU5FRDogeworCQlzdHJpZHhfYmlkeCA9 IERVS19TVFJJRFhfVUNfVU5ERUZJTkVEOworCQlnb3RvIHVzZV9zdHJpZHg7CisJfQorCWNhc2Ug RFVLX1RBR19OVUxMOiB7CisJCXN0cmlkeF9iaWR4ID0gRFVLX1NUUklEWF9VQ19OVUxMOworCQln b3RvIHVzZV9zdHJpZHg7CisJfQorCWNhc2UgRFVLX1RBR19CT09MRUFOOiB7CisJCXN0cmlkeF9i aWR4ID0gKERVS19CSURYX0JPT0xFQU5fUFJPVE9UWVBFIDw8IDE2KSArIERVS19TVFJJRFhfVUNf Qk9PTEVBTjsKKwkJZ290byB1c2VfcHJvdG9fYmlkeDsKKwl9CisJY2FzZSBEVUtfVEFHX1BPSU5U RVI6IHsKKwkJc3RyaWR4X2JpZHggPSAoRFVLX0JJRFhfUE9JTlRFUl9QUk9UT1RZUEUgPDwgMTYp ICsgRFVLX1NUUklEWF9VQ19QT0lOVEVSOworCQlnb3RvIHVzZV9wcm90b19iaWR4OworCX0KKwlj YXNlIERVS19UQUdfTElHSFRGVU5DOiB7CisJCXN0cmlkeF9iaWR4ID0gKERVS19CSURYX0ZVTkNU SU9OX1BST1RPVFlQRSA8PCAxNikgKyBEVUtfU1RSSURYX1VDX0ZVTkNUSU9OOworCQlnb3RvIHVz ZV9wcm90b19iaWR4OworCX0KKwljYXNlIERVS19UQUdfU1RSSU5HOiB7CisJCWR1a19oc3RyaW5n ICpoOworCQloID0gRFVLX1RWQUxfR0VUX1NUUklORyh0dik7CisJCURVS19BU1NFUlQoaCAhPSBO VUxMKTsKKwkJaWYgKERVS19VTkxJS0VMWShEVUtfSFNUUklOR19IQVNfU1lNQk9MKGgpKSkgewor CQkJLyogRXZlbiB3aXRob3V0IERVS19VU0VfU1lNQk9MX0JVSUxUSU4gdGhlIFN5bWJvbAorCQkJ ICogcHJvdG90eXBlIGV4aXN0cyBzbyB3ZSBjYW4gbG9va3VwIEBAdG9TdHJpbmdUYWcKKwkJCSAq IGFuZCBwcm92aWRlIFtvYmplY3QgU3ltYm9sXSBmb3Igc3ltYm9sIHZhbHVlcworCQkJICogY3Jl YXRlZCBmcm9tIEMgY29kZS4KKwkJCSAqLworCQkJc3RyaWR4X2JpZHggPSAoRFVLX0JJRFhfU1lN Qk9MX1BST1RPVFlQRSA8PCAxNikgKyBEVUtfU1RSSURYX1VDX1NZTUJPTDsKKwkJfSBlbHNlIHsK KwkJCXN0cmlkeF9iaWR4ID0gKERVS19CSURYX1NUUklOR19QUk9UT1RZUEUgPDwgMTYpICsgRFVL X1NUUklEWF9VQ19TVFJJTkc7CisJCX0KKwkJZ290byB1c2VfcHJvdG9fYmlkeDsKKwl9CisJY2Fz ZSBEVUtfVEFHX09CSkVDVDogeworCQlkdWtfcHVzaF90dmFsKHRociwgdHYpOworCQlzdHJpZHhf YmlkeCA9IDB4ZmZmZmZmZmZVTDsgIC8qIE1hcmtlciB2YWx1ZS4gKi8KKwkJZ290byB1c2VfcHVz aGVkX29iamVjdDsKKwl9CisJY2FzZSBEVUtfVEFHX0JVRkZFUjogeworCQlzdHJpZHhfYmlkeCA9 IChEVUtfQklEWF9VSU5UOEFSUkFZX1BST1RPVFlQRSA8PCAxNikgKyBEVUtfU1RSSURYX1VJTlQ4 X0FSUkFZOworCQlnb3RvIHVzZV9wcm90b19iaWR4OworCX0KKyNpZiBkZWZpbmVkKERVS19VU0Vf RkFTVElOVCkKKwljYXNlIERVS19UQUdfRkFTVElOVDoKKwkJLyogRmFsbCB0aHJvdWdoIHRvIGdl bmVyaWMgbnVtYmVyIGNhc2UuICovCisjZW5kaWYKKwlkZWZhdWx0OiB7CisJCURVS19BU1NFUlQo RFVLX1RWQUxfSVNfTlVNQkVSKHR2KSk7ICAvKiBudW1iZXIgKG1heWJlIGZhc3RpbnQpICovCisJ CXN0cmlkeF9iaWR4ID0gKERVS19CSURYX05VTUJFUl9QUk9UT1RZUEUgPDwgMTYpICsgRFVLX1NU UklEWF9VQ19OVU1CRVI7CisJCWdvdG8gdXNlX3Byb3RvX2JpZHg7CisJfQorCX0KKwlEVUtfQVNT RVJUKDApOyAgLyogTmV2ZXIgaGVyZS4gKi8KKworIHVzZV9wcm90b19iaWR4OgorCURVS19BU1NF UlRfQklEWF9WQUxJRCgoc3RyaWR4X2JpZHggPj4gMTYpICYgMHhmZmZmVUwpOworCWR1a19wdXNo X2hvYmplY3QodGhyLCB0aHItPmJ1aWx0aW5zWyhzdHJpZHhfYmlkeCA+PiAxNikgJiAweGZmZmZV TF0pOworCS8qIEZhbGwgdGhyb3VnaC4gKi8KKworIHVzZV9wdXNoZWRfb2JqZWN0OgorCS8qIFsg Li4uICJbb2JqZWN0IiBvYmogXSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NZTUJPTF9CVUlM VElOKQorCS8qIFhYWDogYmV0dGVyIGhhbmRsaW5nIHdpdGggYXZvaWRfc2lkZV9lZmZlY3RzID09 IDE7IGxvb2t1cCB0dmFsCisJICogd2l0aG91dCBQcm94eSBvciBnZXR0ZXIgc2lkZSBlZmZlY3Rz LCBhbmQgdXNlIGl0IGluIHNhbml0aXplZAorCSAqIGZvcm0gaWYgaXQncyBhIHN0cmluZy4KKwkg Ki8KKwlpZiAoIWF2b2lkX3NpZGVfZWZmZWN0cykgeworCQkvKiBYWFg6IFRoZSBwcm9ibGVtIHdp dGggdXNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgYXMgdGhlCisJCSAqIGxvb2t1cCBiYXNlIGlz IHRoYXQgaWYgQEB0b1N0cmluZ1RhZyBpcyBhIGdldHRlciwgaXRzCisJCSAqICd0aGlzJyBiaW5k aW5nIG11c3QgYmUgdGhlIFRvT2JqZWN0KCkgY29lcmNlZCBpbnB1dCB2YWx1ZSwKKwkJICogbm90 IHRoZSBwcm90b3R5cGUgb2JqZWN0IG9mIHRoZSB0eXBlLgorCQkgKi8KKwkJKHZvaWQpIGR1a19n ZXRfcHJvcF9zdHJpZHgodGhyLCAtMSwgRFVLX1NUUklEWF9XRUxMS05PV05fU1lNQk9MX1RPX1NU UklOR19UQUcpOworCQlpZiAoZHVrX2lzX3N0cmluZ19ub3RzeW1ib2wodGhyLCAtMSkpIHsKKwkJ CWR1a19yZW1vdmVfbTIodGhyKTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisJCWR1a19wb3BfdW5z YWZlKHRocik7CisJfQorI2VuZGlmCisKKwlpZiAoc3RyaWR4X2JpZHggPT0gMHhmZmZmZmZmZlVM KSB7CisJCWR1a19ob2JqZWN0ICpoX29iajsKKwkJZHVrX3NtYWxsX3VpbnRfdCBjbGFzc251bTsK KworCQloX29iaiA9IGR1a19rbm93bl9ob2JqZWN0KHRociwgLTEpOworCQlEVUtfQVNTRVJUKGhf b2JqICE9IE5VTEwpOworCQljbGFzc251bSA9IERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIo aF9vYmopOworCQlzdHJpZHhfYmlkeCA9IERVS19IT0JKRUNUX0NMQVNTX05VTUJFUl9UT19TVFJJ RFgoY2xhc3NudW0pOworCX0gZWxzZSB7CisJCS8qIHN0cmlkeF9iaWR4IGFscmVhZHkgaGFzIHRo ZSBkZXNpcmVkIGZhbGxiYWNrIHN0cmlkeC4gKi8KKwkJOworCX0KKwlkdWtfcG9wX3Vuc2FmZSh0 aHIpOworCS8qIEZhbGwgdGhyb3VnaC4gKi8KKworIHVzZV9zdHJpZHg6CisJLyogWyAuLi4gIltv YmplY3QiIF0gKi8KKwlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIHN0cmlkeF9iaWR4ICYg MHhmZmZmVUwpOworCisgZmluaXNoOgorCS8qIFsgLi4uICJbb2JqZWN0IiB0YWcgXSAqLworCWR1 a19wdXNoX2xpdGVyYWwodGhyLCAiXSIpOworCWR1a19jb25jYXQodGhyLCAzKTsgIC8qIFsgLi4u ICJbb2JqZWN0IiB0YWcgIl0iIF0gLT4gWyAuLi4gcmVzIF0gKi8KK30KKyNlbmRpZiAgLyogMCAq LworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcHVzaF9jbGFzc19zdHJpbmdfdHZhbChkdWtfaHRo cmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYsIGR1a19ib29sX3QgYXZvaWRfc2lkZV9lZmZlY3RzKSB7 CisJZHVrX2hvYmplY3QgKmhfb2JqOworCWR1a19zbWFsbF91aW50X3QgY2xhc3NudW07CisJZHVr X3NtYWxsX3VpbnRfdCBzdHJpZHg7CisJZHVrX3R2YWwgdHZfdG1wOworCisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJLyogU3RhYmlsaXpl ICd0dicsIGR1a19wdXNoX2xpdGVyYWwoKSBtYXkgdHJpZ2dlciBzaWRlIGVmZmVjdHMuICovCisJ RFVLX1RWQUxfU0VUX1RWQUwoJnR2X3RtcCwgdHYpOworCXR2ID0gJnR2X3RtcDsKKworCS8qIENv bmNlcHR1YWxseSBmb3IgYW55IG5vbi11bmRlZmluZWQvbnVsbCB2YWx1ZSB3ZSBzaG91bGQgZG8g YQorCSAqIFRvT2JqZWN0KCkgY29lcmNpb24gYW5kIGxvb2sgdXAgQEB0b1N0cmluZ1RhZyAoZnJv bSB0aGUgb2JqZWN0CisJICogcHJvdG90eXBlKSB0byBzZWUgaWYgYSBjdXN0b20gcmVzdWx0IHNo b3VsZCBiZSB1c2VkLiAgV2UnZCBsaWtlIHRvCisJICogYXZvaWQgdGhlIGFjdHVhbCBjb252ZXJz aW9uLCBidXQgZXZlbiBmb3IgcHJpbWl0aXZlIHR5cGVzIHRoZQorCSAqIHByb3RvdHlwZSBtYXkg aGF2ZSBAQHRvU3RyaW5nVGFnLiAgV2hhdCdzIHdvcnNlLCB0aGUgQEB0b1N0cmluZ1RhZworCSAq IHByb3BlcnR5IG1heSBiZSBhIGdldHRlciB0aGF0IG11c3QgZ2V0IHRoZSBvYmplY3QgY29lcmNl ZCB2YWx1ZQorCSAqIChub3QgdGhlIHByb3RvdHlwZSkgYXMgaXRzICd0aGlzJyBiaW5kaW5nLgor CSAqCisJICogRm9yIG5vdywgZG8gYW4gYWN0dWFsIG9iamVjdCBjb2VyY2lvbi4gIFRoaXMgY291 bGQgYmUgYXZvaWRlZCBieQorCSAqIGRvaW5nIGEgc2lkZSBlZmZlY3QgZnJlZSBsb29rdXAgdG8g c2VlIGlmIGEgZ2V0dGVyIHdvdWxkIGJlIGludm9rZWQuCisJICogSWYgbm90LCB0aGUgdmFsdWUg Y2FuIGJlIHJlYWQgZGlyZWN0bHkgYW5kIHRoZSBvYmplY3QgY29lcmNpb24gY291bGQKKwkgKiBi ZSBhdm9pZGVkLiAgVGhpcyBtYXkgbm90IGJlIHdvcnRoIGl0IGluIHByYWN0aWNlLCBiZWNhdXNl CisJICogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpIGlzIHVzdWFsbHkgbm90IHBlcmZvcm1h bmNlIGNyaXRpY2FsLgorCSAqLworCisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJbb2JqZWN0ICIp OyAgLyogLT4gWyAuLi4gIltvYmplY3QiIF0gKi8KKworCXN3aXRjaCAoRFVLX1RWQUxfR0VUX1RB Ryh0dikpIHsKKwljYXNlIERVS19UQUdfVU5VU0VEOiAgLyogVHJlYXQgbGlrZSAndW5kZWZpbmVk Jywgc2hvdWxkbid0IGhhcHBlbi4gKi8KKwljYXNlIERVS19UQUdfVU5ERUZJTkVEOiB7CisJCWR1 a19wdXNoX2hzdHJpbmdfc3RyaWR4KHRociwgRFVLX1NUUklEWF9VQ19VTkRFRklORUQpOworCQln b3RvIGZpbmlzaDsKKwl9CisJY2FzZSBEVUtfVEFHX05VTEw6IHsKKwkJZHVrX3B1c2hfaHN0cmlu Z19zdHJpZHgodGhyLCBEVUtfU1RSSURYX1VDX05VTEwpOworCQlnb3RvIGZpbmlzaDsKKwl9CisJ fQorCisJZHVrX3B1c2hfdHZhbCh0aHIsIHR2KTsKKwl0diA9IE5VTEw7ICAvKiBJbnZhbGlkYXRl ZCBieSBUb09iamVjdCgpLiAqLworCWR1a190b19vYmplY3QodGhyLCAtMSk7CisKKwkvKiBbIC4u LiAiW29iamVjdCIgb2JqIF0gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9TWU1CT0xfQlVJTFRJ TikKKwkvKiBYWFg6IGJldHRlciBoYW5kbGluZyB3aXRoIGF2b2lkX3NpZGVfZWZmZWN0cyA9PSAx OyBsb29rdXAgdHZhbAorCSAqIHdpdGhvdXQgUHJveHkgb3IgZ2V0dGVyIHNpZGUgZWZmZWN0cywg YW5kIHVzZSBpdCBpbiBzYW5pdGl6ZWQKKwkgKiBmb3JtIGlmIGl0J3MgYSBzdHJpbmcuCisJICov CisJaWYgKCFhdm9pZF9zaWRlX2VmZmVjdHMpIHsKKwkJKHZvaWQpIGR1a19nZXRfcHJvcF9zdHJp ZHgodGhyLCAtMSwgRFVLX1NUUklEWF9XRUxMS05PV05fU1lNQk9MX1RPX1NUUklOR19UQUcpOwor CQlpZiAoZHVrX2lzX3N0cmluZ19ub3RzeW1ib2wodGhyLCAtMSkpIHsKKwkJCWR1a19yZW1vdmVf bTIodGhyKTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisJCWR1a19wb3BfdW5zYWZlKHRocik7CisJ fQorI2Vsc2UKKwlEVUtfVU5SRUYoYXZvaWRfc2lkZV9lZmZlY3RzKTsKKyNlbmRpZgorCisJaF9v YmogPSBkdWtfa25vd25faG9iamVjdCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKGhfb2JqICE9IE5V TEwpOworCWNsYXNzbnVtID0gRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoX29iaik7CisJ c3RyaWR4ID0gRFVLX0hPQkpFQ1RfQ0xBU1NfTlVNQkVSX1RPX1NUUklEWChjbGFzc251bSk7CisJ ZHVrX3BvcF91bnNhZmUodGhyKTsKKwlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIHN0cmlk eCk7CisKKyBmaW5pc2g6CisJLyogWyAuLi4gIltvYmplY3QiIHRhZyBdICovCisJZHVrX3B1c2hf bGl0ZXJhbCh0aHIsICJdIik7CisJZHVrX2NvbmNhdCh0aHIsIDMpOyAgLyogWyAuLi4gIltvYmpl Y3QiIHRhZyAiXSIgXSAtPiBbIC4uLiByZXMgXSAqLworfQorCisvKiBYWFg6IG90aGVyIHZhcmlh bnRzIGxpa2UgdWludCwgdTMyIGV0YyAqLworRFVLX0lOVEVSTkFMIGR1a19pbnRfdCBkdWtfdG9f aW50X2NsYW1wZWRfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19pbnRf dCBtaW52YWwsIGR1a19pbnRfdCBtYXh2YWwsIGR1a19ib29sX3QgKm91dF9jbGFtcGVkKSB7CisJ ZHVrX3R2YWwgKnR2OworCWR1a190dmFsIHR2X3RtcDsKKwlkdWtfZG91YmxlX3QgZCwgZG1pbiwg ZG1heDsKKwlkdWtfaW50X3QgcmVzOworCWR1a19ib29sX3QgY2xhbXBlZCA9IDA7CisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4 KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCWQgPSBkdWtfanNfdG9pbnRlZ2VyKHRociwg dHYpOyAgLyogRTUgU2VjdGlvbiA5LjQsIFRvSW50ZWdlcigpICovCisKKwlkbWluID0gKGR1a19k b3VibGVfdCkgbWludmFsOworCWRtYXggPSAoZHVrX2RvdWJsZV90KSBtYXh2YWw7CisKKwlpZiAo ZCA8IGRtaW4pIHsKKwkJY2xhbXBlZCA9IDE7CisJCXJlcyA9IG1pbnZhbDsKKwkJZCA9IGRtaW47 CisJfSBlbHNlIGlmIChkID4gZG1heCkgeworCQljbGFtcGVkID0gMTsKKwkJcmVzID0gbWF4dmFs OworCQlkID0gZG1heDsKKwl9IGVsc2UgeworCQlyZXMgPSAoZHVrX2ludF90KSBkOworCX0KKwlE VUtfVU5SRUYoZCk7ICAvKiBTQ0FOQlVJTEQ6IHdpdGggc3VpdGFibGUgZG1pbi9kbWF4IGxpbWl0 cyAnZCcgaXMgdW51c2VkICovCisJLyogJ2QnIGFuZCAncmVzJyBhZ3JlZSBoZXJlICovCisKKwkv KiBSZWxvb2t1cCBpbiBjYXNlIGR1a19qc190b2ludGVnZXIoKSBlbmRzIHVwIGUuZy4gY29lcmNp bmcgYW4gb2JqZWN0LiAqLworCXR2ID0gZHVrX2dldF90dmFsKHRociwgaWR4KTsKKwlEVUtfQVNT RVJUKHR2ICE9IE5VTEwpOyAgLyogbm90IHBvcHBlZCBieSBzaWRlIGVmZmVjdCAqLworCURVS19U VkFMX1NFVF9UVkFMKCZ0dl90bXAsIHR2KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkK KyNpZiAoRFVLX0lOVF9NQVggPD0gMHg3ZmZmZmZmZkwpCisJRFVLX1RWQUxfU0VUX0kzMih0diwg cmVzKTsKKyNlbHNlCisJLyogQ2xhbXBpbmcgbmVlZGVkIGlmIGR1a19pbnRfdCBpcyA2NCBiaXRz LiAqLworCWlmIChyZXMgPj0gRFVLX0ZBU1RJTlRfTUlOICYmIHJlcyA8PSBEVUtfRkFTVElOVF9N QVgpIHsKKwkJRFVLX1RWQUxfU0VUX0ZBU1RJTlQodHYsIHJlcyk7CisJfSBlbHNlIHsKKwkJRFVL X1RWQUxfU0VUX05VTUJFUih0diwgZCk7CisJfQorI2VuZGlmCisjZWxzZQorCURVS19UVkFMX1NF VF9OVU1CRVIodHYsIGQpOyAgLyogbm8gbmVlZCB0byBpbmNyZWYgKi8KKyNlbmRpZgorCURVS19U VkFMX0RFQ1JFRih0aHIsICZ0dl90bXApOyAgLyogc2lkZSBlZmZlY3RzICovCisKKwlpZiAob3V0 X2NsYW1wZWQpIHsKKwkJKm91dF9jbGFtcGVkID0gY2xhbXBlZDsKKwl9IGVsc2UgeworCQkvKiBj b2VyY2VkIHZhbHVlIGlzIHVwZGF0ZWQgdG8gdmFsdWUgc3RhY2sgZXZlbiB3aGVuIFJhbmdlRXJy b3IgdGhyb3duICovCisJCWlmIChjbGFtcGVkKSB7CisJCQlEVUtfRVJST1JfUkFOR0UodGhyLCBE VUtfU1RSX05VTUJFUl9PVVRTSURFX1JBTkdFKTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm4g MDspOworCQl9CisJfQorCisJcmV0dXJuIHJlczsKK30KKworRFVLX0lOVEVSTkFMIGR1a19pbnRf dCBkdWtfdG9faW50X2NsYW1wZWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVr X2lkeF90IG1pbnZhbCwgZHVrX2lkeF90IG1heHZhbCkgeworCWR1a19ib29sX3QgZHVtbXk7CisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJcmV0dXJuIGR1a190b19pbnRfY2xhbXBl ZF9yYXcodGhyLCBpZHgsIG1pbnZhbCwgbWF4dmFsLCAmZHVtbXkpOworfQorCitEVUtfSU5URVJO QUwgZHVrX2ludF90IGR1a190b19pbnRfY2hlY2tfcmFuZ2UoZHVrX2h0aHJlYWQgKnRociwgZHVr X2lkeF90IGlkeCwgZHVrX2ludF90IG1pbnZhbCwgZHVrX2ludF90IG1heHZhbCkgeworCURVS19B U1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a190b19pbnRfY2xhbXBlZF9yYXcodGhy LCBpZHgsIG1pbnZhbCwgbWF4dmFsLCBOVUxMKTsgIC8qIG91dF9jbGFtcGVkPT1OVUxMIC0+IFJh bmdlRXJyb3IgaWYgb3V0c2lkZSByYW5nZSAqLworfQorCitEVUtfRVhURVJOQUwgY29uc3QgY2hh ciAqZHVrX3RvX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVr X3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWlkeCA9IGR1a19y ZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIGlkeCk7CisJdHYgPSBEVUtfR0VUX1RWQUxfUE9T SURYKHRociwgaWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJc3dpdGNoIChEVUtf VFZBTF9HRVRfVEFHKHR2KSkgeworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6IHsKKwkJZHVrX3B1 c2hfaHN0cmluZ19zdHJpZHgodGhyLCBEVUtfU1RSSURYX0xDX1VOREVGSU5FRCk7CisJCWJyZWFr OworCX0KKwljYXNlIERVS19UQUdfTlVMTDogeworCQlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0 aHIsIERVS19TVFJJRFhfTENfTlVMTCk7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UQUdfQk9P TEVBTjogeworCQlpZiAoRFVLX1RWQUxfR0VUX0JPT0xFQU4odHYpKSB7CisJCQlkdWtfcHVzaF9o c3RyaW5nX3N0cmlkeCh0aHIsIERVS19TVFJJRFhfVFJVRSk7CisJCX0gZWxzZSB7CisJCQlkdWtf cHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIERVS19TVFJJRFhfRkFMU0UpOworCQl9CisJCWJyZWFr OworCX0KKwljYXNlIERVS19UQUdfU1RSSU5HOiB7CisJCS8qIE5vcCBmb3IgYWN0dWFsIHN0cmlu Z3MsIFR5cGVFcnJvciBmb3IgU3ltYm9scy4KKwkJICogQmVjYXVzZSB2YXJpb3VzIGludGVybmFs cyByZWx5IG9uIFRvU3RyaW5nKCkgY29lcmNpb24gb2YKKwkJICogaW50ZXJuYWwgc3RyaW5ncywg LWFsbG93LSAoTk9QKSBzdHJpbmcgY29lcmNpb24gZm9yIGhpZGRlbgorCQkgKiBzeW1ib2xzLgor CQkgKi8KKyNpZiAxCisJCWR1a19oc3RyaW5nICpoOworCQloID0gRFVLX1RWQUxfR0VUX1NUUklO Ryh0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJaWYgKERVS19VTkxJS0VMWShEVUtf SFNUUklOR19IQVNfU1lNQk9MKGgpKSkgeworCQkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RS X0NBTk5PVF9TVFJJTkdfQ09FUkNFX1NZTUJPTCk7CisJCQlEVUtfV09fTk9SRVRVUk4oZ290byBz a2lwX3JlcGxhY2U7KTsKKwkJfSBlbHNlIHsKKwkJCWdvdG8gc2tpcF9yZXBsYWNlOworCQl9Cisj ZWxzZQorCQlnb3RvIHNraXBfcmVwbGFjZTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBE VUtfVEFHX0JVRkZFUjogLyogR28gdGhyb3VnaCBVaW50OEFycmF5LnByb3RvdHlwZS50b1N0cmlu ZygpIGZvciBjb2VyY2lvbi4gKi8KKwljYXNlIERVS19UQUdfT0JKRUNUOiB7CisJCS8qIFBsYWlu IGJ1ZmZlcnM6IGdvIHRocm91Z2ggQXJyYXlCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nKCkKKwkJ ICogZm9yIGNvZXJjaW9uLgorCQkgKgorCQkgKiBTeW1ib2wgb2JqZWN0czogZHVrX3RvX3ByaW1p dGl2ZSgpIHJlc3VsdHMgaW4gYSBwbGFpbiBzeW1ib2wKKwkJICogdmFsdWUsIGFuZCBkdWtfdG9f c3RyaW5nKCkgdGhlbiBjYXVzZXMgYSBUeXBlRXJyb3IuCisJCSAqLworCQlkdWtfdG9fcHJpbWl0 aXZlKHRociwgaWR4LCBEVUtfSElOVF9TVFJJTkcpOworCQlEVUtfQVNTRVJUKCFkdWtfaXNfYnVm ZmVyKHRociwgaWR4KSk7ICAvKiBUb1ByaW1pdGl2ZSgpIG11c3QgZ3VhcmFudGVlICovCisJCURV S19BU1NFUlQoIWR1a19pc19vYmplY3QodGhyLCBpZHgpKTsKKwkJcmV0dXJuIGR1a190b19zdHJp bmcodGhyLCBpZHgpOyAgLyogTm90ZTogcmVjdXJzaXZlIGNhbGwgKi8KKwl9CisJY2FzZSBEVUtf VEFHX1BPSU5URVI6IHsKKwkJdm9pZCAqcHRyID0gRFVLX1RWQUxfR0VUX1BPSU5URVIodHYpOwor CQlpZiAocHRyICE9IE5VTEwpIHsKKwkJCWR1a19wdXNoX3NwcmludGYodGhyLCBEVUtfU1RSX0ZN VF9QVFIsICh2b2lkICopIHB0cik7CisJCX0gZWxzZSB7CisJCQkvKiBSZXByZXNlbnQgYSBudWxs IHBvaW50ZXIgYXMgJ251bGwnIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorCQkJICogdGhlIEpYIGZv cm1hdCB2YXJpYW50LiAgTmF0aXZlICclcCcgZm9ybWF0IGZvciBhIE5VTEwKKwkJCSAqIHBvaW50 ZXIgbWF5IGJlIGUuZy4gJyhuaWwpJy4KKwkJCSAqLworCQkJZHVrX3B1c2hfaHN0cmluZ19zdHJp ZHgodGhyLCBEVUtfU1RSSURYX0xDX05VTEwpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERV S19UQUdfTElHSFRGVU5DOiB7CisJCS8qIFNob3VsZCBtYXRjaCBGdW5jdGlvbi5wcm90b3R5cGUu dG9TdHJpbmcoKSAqLworCQlkdWtfcHVzaF9saWdodGZ1bmNfdG9zdHJpbmcodGhyLCB0dik7CisJ CWJyZWFrOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwljYXNlIERVS19UQUdf RkFTVElOVDoKKyNlbmRpZgorCWRlZmF1bHQ6IHsKKwkJLyogbnVtYmVyICovCisJCURVS19BU1NF UlQoIURVS19UVkFMX0lTX1VOVVNFRCh0dikpOworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05V TUJFUih0dikpOworCQlkdWtfcHVzaF90dmFsKHRociwgdHYpOworCQlkdWtfbnVtY29udl9zdHJp bmdpZnkodGhyLAorCQkgICAgICAgICAgICAgICAgICAgICAgMTAgLypyYWRpeCovLAorCQkgICAg ICAgICAgICAgICAgICAgICAgMCAvKnByZWNpc2lvbjpzaG9ydGVzdCovLAorCQkgICAgICAgICAg ICAgICAgICAgICAgMCAvKmZvcmNlX2V4cG9uZW50aWFsKi8pOworCQlicmVhazsKKwl9CisJfQor CisJZHVrX3JlcGxhY2UodGhyLCBpZHgpOworCisgc2tpcF9yZXBsYWNlOgorCURVS19BU1NFUlQo ZHVrX2lzX3N0cmluZyh0aHIsIGlkeCkpOworCXJldHVybiBkdWtfcmVxdWlyZV9zdHJpbmcodGhy LCBpZHgpOworfQorCitEVUtfSU5URVJOQUwgZHVrX2hzdHJpbmcgKmR1a190b19oc3RyaW5nKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaHN0cmluZyAqcmV0OworCisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWR1a190b19zdHJpbmcodGhyLCBpZHgpOwor CXJldCA9IGR1a19nZXRfaHN0cmluZyh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVChyZXQgIT0gTlVM TCk7CisJcmV0dXJuIHJldDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5nICpkdWtfdG9f aHN0cmluZ19tMShkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhy KTsKKwlyZXR1cm4gZHVrX3RvX2hzdHJpbmcodGhyLCAtMSk7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfaHN0cmluZyAqZHVrX3RvX2hzdHJpbmdfYWNjZXB0c3ltYm9sKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaHN0cmluZyAqcmV0OworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCXJldCA9IGR1a19nZXRfaHN0cmluZyh0aHIsIGlkeCk7CisJaWYgKERV S19VTkxJS0VMWShyZXQgJiYgRFVLX0hTVFJJTkdfSEFTX1NZTUJPTChyZXQpKSkgeworCQlyZXR1 cm4gcmV0OworCX0KKwlyZXR1cm4gZHVrX3RvX2hzdHJpbmcodGhyLCBpZHgpOworfQorCisvKiBD b252ZXJ0IGEgcGxhaW4gYnVmZmVyIG9yIGFueSBidWZmZXIgb2JqZWN0IGludG8gYSBzdHJpbmcs IHVzaW5nIHRoZSBidWZmZXIKKyAqIGJ5dGVzIDE6MSBpbiB0aGUgaW50ZXJuYWwgc3RyaW5nIHJl cHJlc2VudGF0aW9uLiAgRm9yIHZpZXdzIHRoZSBhY3RpdmUgYnl0ZQorICogc2xpY2UgKG5vdCBl bGVtZW50IHNsaWNlIGludGVycHJldGVkIGFzIGFuIGluaXRpYWxpemVyKSBpcyB1c2VkLiAgVGhp cyBpcworICogbmVjZXNzYXJ5IGluIER1a3RhcGUgMi54IGJlY2F1c2UgVG9TdHJpbmcocGxhaW5C dWZmZXIpIG5vIGxvbmdlciBjcmVhdGVzIGEKKyAqIHN0cmluZyB3aXRoIHRoZSBzYW1lIGJ5dGVz IGFzIGluIHRoZSBidWZmZXIgYnV0IHJhdGhlciAodXN1YWxseSkKKyAqICdbb2JqZWN0IEFycmF5 QnVmZmVyXScuCisgKi8KK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfYnVmZmVyX3RvX3N0 cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJdm9pZCAqcHRyX3NyYzsK KwlkdWtfc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICpyZXM7CisKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCisJaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgaWR4 KTsKKworCXB0cl9zcmMgPSBkdWtfcmVxdWlyZV9idWZmZXJfZGF0YSh0aHIsIGlkeCwgJmxlbik7 CisJRFVLX0FTU0VSVChwdHJfc3JjICE9IE5VTEwgfHwgbGVuID09IDApOworCisJcmVzID0gZHVr X3B1c2hfbHN0cmluZyh0aHIsIChjb25zdCBjaGFyICopIHB0cl9zcmMsIGxlbik7CisJZHVrX3Jl cGxhY2UodGhyLCBpZHgpOworCXJldHVybiByZXM7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkICpk dWtfdG9fYnVmZmVyX3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6 ZV90ICpvdXRfc2l6ZSwgZHVrX3VpbnRfdCBtb2RlKSB7CisJZHVrX2hidWZmZXIgKmhfYnVmOwor CWNvbnN0IGR1a191aW50OF90ICpzcmNfZGF0YTsKKwlkdWtfc2l6ZV90IHNyY19zaXplOworCWR1 a191aW50OF90ICpkc3RfZGF0YTsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlp ZHggPSBkdWtfcmVxdWlyZV9ub3JtYWxpemVfaW5kZXgodGhyLCBpZHgpOworCisJaF9idWYgPSBk dWtfZ2V0X2hidWZmZXIodGhyLCBpZHgpOworCWlmIChoX2J1ZiAhPSBOVUxMKSB7CisJCS8qIEJ1 ZmZlciBpcyBrZXB0IGFzIGlzLCB3aXRoIHRoZSBmaXhlZC9keW5hbWljIG5hdHVyZSBvZiB0aGUK KwkJICogYnVmZmVyIG9ubHkgY2hhbmdlZCBpZiByZXF1ZXN0ZWQuICBBbiBleHRlcm5hbCBidWZm ZXIKKwkJICogaXMgY29udmVydGVkIGludG8gYSBub24tZXh0ZXJuYWwgZHluYW1pYyBidWZmZXIg aW4gYQorCQkgKiBkdWtfdG9fZHluYW1pY19idWZmZXIoKSBjYWxsLgorCQkgKi8KKwkJZHVrX3Vp bnRfdCB0bXA7CisJCWR1a191aW50OF90ICp0bXBfcHRyOworCisJCXRtcF9wdHIgPSAoZHVrX3Vp bnQ4X3QgKikgRFVLX0hCVUZGRVJfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaF9idWYpOworCQlz cmNfZGF0YSA9IChjb25zdCBkdWtfdWludDhfdCAqKSB0bXBfcHRyOworCQlzcmNfc2l6ZSA9IERV S19IQlVGRkVSX0dFVF9TSVpFKGhfYnVmKTsKKworCQl0bXAgPSAoRFVLX0hCVUZGRVJfSEFTX0RZ TkFNSUMoaF9idWYpID8gRFVLX0JVRl9NT0RFX0RZTkFNSUMgOiBEVUtfQlVGX01PREVfRklYRUQp OworCQlpZiAoKHRtcCA9PSBtb2RlICYmICFEVUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoaF9idWYp KSB8fAorCQkgICAgbW9kZSA9PSBEVUtfQlVGX01PREVfRE9OVENBUkUpIHsKKwkJCS8qIE5vdGU6 IHNyY19kYXRhIG1heSBiZSBOVUxMIGlmIGlucHV0IGlzIGEgemVyby1zaXplCisJCQkgKiBkeW5h bWljIGJ1ZmZlci4KKwkJCSAqLworCQkJZHN0X2RhdGEgPSB0bXBfcHRyOworCQkJZ290byBza2lw X2NvcHk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBOb24tYnVmZmVyIHZhbHVlIGlzIGZpcnN0IFRv U3RyaW5nKCkgY29lcmNlZCwgdGhlbiBjb252ZXJ0ZWQKKwkJICogdG8gYSBidWZmZXIgKGZpeGVk IGJ1ZmZlciBpcyB1c2VkIHVubGVzcyBhIGR5bmFtaWMgYnVmZmVyIGlzCisJCSAqIGV4cGxpY2l0 bHkgcmVxdWVzdGVkKS4gIFN5bWJvbHMgYXJlIHJlamVjdGVkIHdpdGggYSBUeXBlRXJyb3IuCisJ CSAqIFhYWDogQyBBUEkgY291bGQgbWF5YmUgYWxsb3cgc3ltYm9sLXRvLWJ1ZmZlciBjb2VyY2lv bj8KKwkJICovCisJCXNyY19kYXRhID0gKGNvbnN0IGR1a191aW50OF90ICopIGR1a190b19sc3Ry aW5nKHRociwgaWR4LCAmc3JjX3NpemUpOworCX0KKworCWRzdF9kYXRhID0gKGR1a191aW50OF90 ICopIGR1a19wdXNoX2J1ZmZlcih0aHIsIHNyY19zaXplLCAobW9kZSA9PSBEVUtfQlVGX01PREVf RFlOQU1JQykgLypkeW5hbWljKi8pOworCS8qIGRzdF9kYXRhIG1heSBiZSBOVUxMIGlmIHNpemUg aXMgemVyby4gKi8KKwlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSBkc3RfZGF0YSwgKGNvbnN0 IHZvaWQgKikgc3JjX2RhdGEsIChzaXplX3QpIHNyY19zaXplKTsKKworCWR1a19yZXBsYWNlKHRo ciwgaWR4KTsKKyBza2lwX2NvcHk6CisKKwlpZiAob3V0X3NpemUpIHsKKwkJKm91dF9zaXplID0g c3JjX3NpemU7CisJfQorCXJldHVybiBkc3RfZGF0YTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQg KmR1a190b19wb2ludGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtf dHZhbCAqdHY7CisJdm9pZCAqcmVzOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CWlkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIGlkeCk7CisJdHYgPSBEVUtf R0VUX1RWQUxfUE9TSURYKHRociwgaWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJ c3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2KSkgeworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6 CisJY2FzZSBEVUtfVEFHX05VTEw6CisJY2FzZSBEVUtfVEFHX0JPT0xFQU46CisJCXJlcyA9IE5V TEw7CisJCWJyZWFrOworCWNhc2UgRFVLX1RBR19QT0lOVEVSOgorCQlyZXMgPSBEVUtfVFZBTF9H RVRfUE9JTlRFUih0dik7CisJCWJyZWFrOworCWNhc2UgRFVLX1RBR19TVFJJTkc6CisJY2FzZSBE VUtfVEFHX09CSkVDVDoKKwljYXNlIERVS19UQUdfQlVGRkVSOgorCQkvKiBIZWFwIGFsbG9jYXRl ZDogcmV0dXJuIGhlYXAgcG9pbnRlciB3aGljaCBpcyBOT1QgdXNlZnVsCisJCSAqIGZvciB0aGUg Y2FsbGVyLCBleGNlcHQgZm9yIGRlYnVnZ2luZy4KKwkJICovCisJCXJlcyA9ICh2b2lkICopIERV S19UVkFMX0dFVF9IRUFQSERSKHR2KTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX0xJR0hURlVO QzoKKwkJLyogRnVuY3Rpb24gcG9pbnRlcnMgZG8gbm90IGFsd2F5cyBjYXN0IGNvcnJlY3RseSB0 byB2b2lkICoKKwkJICogKGRlcGVuZHMgb24gbWVtb3J5IGFuZCBzZWdtZW50YXRpb24gbW9kZWwg Zm9yIGluc3RhbmNlKSwKKwkJICogc28gdGhleSBjb2VyY2UgdG8gTlVMTC4KKwkJICovCisJCXJl cyA9IE5VTEw7CisJCWJyZWFrOworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCWNhc2Ug RFVLX1RBR19GQVNUSU5UOgorI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogbnVtYmVyICovCisJCURV S19BU1NFUlQoIURVS19UVkFMX0lTX1VOVVNFRCh0dikpOworCQlEVUtfQVNTRVJUKERVS19UVkFM X0lTX05VTUJFUih0dikpOworCQlyZXMgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlkdWtfcHVz aF9wb2ludGVyKHRociwgcmVzKTsKKwlkdWtfcmVwbGFjZSh0aHIsIGlkeCk7CisJcmV0dXJuIHJl czsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19wdXNoX2Z1bmNfZnJvbV9saWdodGZ1bmMoZHVr X2h0aHJlYWQgKnRociwgZHVrX2NfZnVuY3Rpb24gZnVuYywgZHVrX3NtYWxsX3VpbnRfdCBsZl9m bGFncykgeworCWR1a19pZHhfdCBuYXJnczsKKwlkdWtfdWludF90IGZsYWdzID0gMDsgICAvKiBz aGFyZWQgZmxhZ3MgZm9yIGEgc3Vic2V0IG9mIHR5cGVzICovCisJZHVrX3NtYWxsX3VpbnRfdCBs Zl9sZW47CisJZHVrX2huYXRmdW5jICpuZjsKKworCW5hcmdzID0gKGR1a19pZHhfdCkgRFVLX0xG VU5DX0ZMQUdTX0dFVF9OQVJHUyhsZl9mbGFncyk7CisJaWYgKG5hcmdzID09IERVS19MRlVOQ19O QVJHU19WQVJBUkdTKSB7CisJCW5hcmdzID0gKGR1a19pZHhfdCkgRFVLX1ZBUkFSR1M7CisJfQor CisJZmxhZ3MgPSBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgRFVLX0hP QkpFQ1RfRkxBR19DT05TVFJVQ1RBQkxFIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQ0FM TEFCTEUgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUyB8CisJICAgICAgICBE VUtfSE9CSkVDVF9GTEFHX05BVEZVTkMgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19ORVdF TlYgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19TVFJJQ1QgfAorCSAgICAgICAgRFVLX0hP QkpFQ1RfRkxBR19OT1RBSUwgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1Mo RFVLX0hPQkpFQ1RfQ0xBU1NfRlVOQ1RJT04pOworCSh2b2lkKSBkdWtfX3B1c2hfY19mdW5jdGlv bl9yYXcodGhyLCBmdW5jLCBuYXJncywgZmxhZ3MsIERVS19CSURYX05BVElWRV9GVU5DVElPTl9Q Uk9UT1RZUEUpOworCisJbGZfbGVuID0gRFVLX0xGVU5DX0ZMQUdTX0dFVF9MRU5HVEgobGZfZmxh Z3MpOworCWlmICgoZHVrX2lkeF90KSBsZl9sZW4gIT0gbmFyZ3MpIHsKKwkJLyogRXhwbGljaXQg bGVuZ3RoIGlzIG9ubHkgbmVlZGVkIGlmIGl0IGRpZmZlcnMgZnJvbSAnbmFyZ3MnLiAqLworCQlk dWtfcHVzaF9pbnQodGhyLCAoZHVrX2ludF90KSBsZl9sZW4pOworCQlkdWtfeGRlZl9wcm9wX3N0 cmlkeF9zaG9ydCh0aHIsIC0yLCBEVUtfU1RSSURYX0xFTkdUSCwgRFVLX1BST1BERVNDX0ZMQUdT X05PTkUpOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GVU5DX05BTUVfUFJPUEVSVFkpCisJ ZHVrX3B1c2hfbGlnaHRmdW5jX25hbWVfcmF3KHRociwgZnVuYywgbGZfZmxhZ3MpOworCWR1a194 ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfTkFNRSwgRFVLX1BST1BE RVNDX0ZMQUdTX0MpOworI2VuZGlmCisKKwluZiA9IGR1a19rbm93bl9obmF0ZnVuYyh0aHIsIC0x KTsKKwluZi0+bWFnaWMgPSAoZHVrX2ludDE2X3QpIERVS19MRlVOQ19GTEFHU19HRVRfTUFHSUMo bGZfZmxhZ3MpOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfdG9fb2JqZWN0KGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisJZHVrX3VpbnRfdCBm bGFncyA9IDA7ICAgLyogc2hhcmVkIGZsYWdzIGZvciBhIHN1YnNldCBvZiB0eXBlcyAqLworCWR1 a19zbWFsbF9pbnRfdCBwcm90byA9IDA7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOwor CisJaWR4ID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgaWR4KTsKKwl0diA9IERV S19HRVRfVFZBTF9QT1NJRFgodGhyLCBpZHgpOworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisK Kwlzd2l0Y2ggKERVS19UVkFMX0dFVF9UQUcodHYpKSB7CisjaWYgIWRlZmluZWQoRFVLX1VTRV9C VUZGRVJPQkpFQ1RfU1VQUE9SVCkKKwljYXNlIERVS19UQUdfQlVGRkVSOiAgLyogV2l0aCBubyBi dWZmZXJvYmplY3Qgc3VwcG9ydCwgZG9uJ3Qgb2JqZWN0IGNvZXJjZS4gKi8KKyNlbmRpZgorCWNh c2UgRFVLX1RBR19VTkRFRklORUQ6CisJY2FzZSBEVUtfVEFHX05VTEw6IHsKKwkJRFVLX0VSUk9S X1RZUEUodGhyLCBEVUtfU1RSX05PVF9PQkpFQ1RfQ09FUkNJQkxFKTsKKwkJRFVLX1dPX05PUkVU VVJOKHJldHVybjspOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX0JPT0xFQU46IHsKKwkJ ZmxhZ3MgPSBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCQkgICAgICAgIERVS19IT0JK RUNUX0ZMQUdfRkFTVFJFRlMgfAorCQkgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdT KERVS19IT0JKRUNUX0NMQVNTX0JPT0xFQU4pOworCQlwcm90byA9IERVS19CSURYX0JPT0xFQU5f UFJPVE9UWVBFOworCQlnb3RvIGNyZWF0ZV9vYmplY3Q7CisJfQorCWNhc2UgRFVLX1RBR19TVFJJ Tkc6IHsKKwkJZHVrX2hzdHJpbmcgKmg7CisJCWggPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsK KwkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQlpZiAoRFVLX1VOTElLRUxZKERVS19IU1RSSU5H X0hBU19TWU1CT0woaCkpKSB7CisJCQlmbGFncyA9IERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJM RSB8CisJCQkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMgfAorCQkJICAgICAgICBE VUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19TWU1CT0wpOworCQkJ cHJvdG8gPSBEVUtfQklEWF9TWU1CT0xfUFJPVE9UWVBFOworCQl9IGVsc2UgeworCQkJZmxhZ3Mg PSBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCQkJICAgICAgICBEVUtfSE9CSkVDVF9G TEFHX0ZBU1RSRUZTIHwKKwkJCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNfU1RSSU5H T0JKIHwKKwkJCSAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1Rf Q0xBU1NfU1RSSU5HKTsKKwkJCXByb3RvID0gRFVLX0JJRFhfU1RSSU5HX1BST1RPVFlQRTsKKwkJ fQorCQlnb3RvIGNyZWF0ZV9vYmplY3Q7CisJfQorCWNhc2UgRFVLX1RBR19PQkpFQ1Q6IHsKKwkJ Lyogbm9wICovCisJCWJyZWFrOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNU X1NVUFBPUlQpCisJY2FzZSBEVUtfVEFHX0JVRkZFUjogeworCQkvKiBBIHBsYWluIGJ1ZmZlciBv YmplY3QgY29lcmNlcyB0byBhIGZ1bGwgQXJyYXlCdWZmZXIgd2hpY2gKKwkJICogaXMgbm90IGZ1 bGx5IHRyYW5zcGFyZW50IGJlaGF2aW9yIChUb09iamVjdCgpIHNob3VsZCBiZSBhCisJCSAqIG5v cCBmb3IgYW4gb2JqZWN0KS4gIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyBsaWdodGZ1bmNzIHdoaWNo CisJCSAqIGFsc28gY29lcmNlIHRvIGFuIGVxdWl2YWxlbnQgRnVuY3Rpb24gb2JqZWN0LiAgVGhl cmUgYXJlCisJCSAqIGFsc28gZG93bnNpZGVzIHRvIGRlZmluaW5nIFRvT2JqZWN0KHBsYWluQnVm ZmVyKSBhcyBhIG5vLW9wOworCQkgKiBmb3IgZXhhbXBsZSBkdWtfdG9faG9iamVjdCgpIGNvdWxk IHJlc3VsdCBpbiBhIE5VTEwgcG9pbnRlci4KKwkJICovCisJCWR1a19oYnVmZmVyICpoX2J1ZjsK KworCQloX2J1ZiA9IERVS19UVkFMX0dFVF9CVUZGRVIodHYpOworCQlEVUtfQVNTRVJUKGhfYnVm ICE9IE5VTEwpOworCQlkdWtfaGJ1Zm9ial9wdXNoX3VpbnQ4YXJyYXlfZnJvbV9wbGFpbih0aHIs IGhfYnVmKTsKKwkJZ290byByZXBsYWNlX3ZhbHVlOworCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9C VUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCWNhc2UgRFVLX1RBR19QT0lOVEVSOiB7CisJCWZsYWdz ID0gRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkJICAgICAgICBEVUtfSE9CSkVDVF9G TEFHX0ZBU1RSRUZTIHwKKwkJICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtf SE9CSkVDVF9DTEFTU19QT0lOVEVSKTsKKwkJcHJvdG8gPSBEVUtfQklEWF9QT0lOVEVSX1BST1RP VFlQRTsKKwkJZ290byBjcmVhdGVfb2JqZWN0OworCX0KKwljYXNlIERVS19UQUdfTElHSFRGVU5D OiB7CisJCS8qIExpZ2h0ZnVuYyBjb2VyY2VzIHRvIGEgRnVuY3Rpb24gaW5zdGFuY2Ugd2l0aCBj b25jcmV0ZQorCQkgKiBwcm9wZXJ0aWVzLiAgU2luY2UgJ2xlbmd0aCcgaXMgdmlydHVhbCBmb3Ig RHVrdGFwZS9DCisJCSAqIGZ1bmN0aW9ucywgZG9uJ3QgbmVlZCB0byBkZWZpbmUgdGhhdC4gIFRo ZSByZXN1bHQgaXMgbWFkZQorCQkgKiBleHRlbnNpYmxlIHRvIG1pbWljIHdoYXQgaGFwcGVucyB0 byBzdHJpbmdzIGluIG9iamVjdAorCQkgKiBjb2VyY2lvbjoKKwkJICoKKwkJICogICA+IE9iamVj dC5pc0V4dGVuc2libGUoT2JqZWN0KCdmb28nKSkKKwkJICogICB0cnVlCisJCSAqLworCQlkdWtf c21hbGxfdWludF90IGxmX2ZsYWdzOworCQlkdWtfY19mdW5jdGlvbiBmdW5jOworCisJCURVS19U VkFMX0dFVF9MSUdIVEZVTkModHYsIGZ1bmMsIGxmX2ZsYWdzKTsKKwkJZHVrX19wdXNoX2Z1bmNf ZnJvbV9saWdodGZ1bmModGhyLCBmdW5jLCBsZl9mbGFncyk7CisJCWdvdG8gcmVwbGFjZV92YWx1 ZTsKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJY2FzZSBEVUtfVEFHX0ZBU1RJ TlQ6CisjZW5kaWYKKwlkZWZhdWx0OiB7CisJCURVS19BU1NFUlQoIURVS19UVkFMX0lTX1VOVVNF RCh0dikpOworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05VTUJFUih0dikpOworCQlmbGFncyA9 IERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxB R19GQVNUUkVGUyB8CisJCSAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MoRFVLX0hP QkpFQ1RfQ0xBU1NfTlVNQkVSKTsKKwkJcHJvdG8gPSBEVUtfQklEWF9OVU1CRVJfUFJPVE9UWVBF OworCQlnb3RvIGNyZWF0ZV9vYmplY3Q7CisJfQorCX0KKwlEVUtfQVNTRVJUKGR1a19pc19vYmpl Y3QodGhyLCBpZHgpKTsKKwlyZXR1cm47CisKKyBjcmVhdGVfb2JqZWN0OgorCSh2b2lkKSBkdWtf cHVzaF9vYmplY3RfaGVscGVyKHRociwgZmxhZ3MsIHByb3RvKTsKKworCS8qIE5vdGU6IEJvb2xl YW4gcHJvdG90eXBlJ3MgaW50ZXJuYWwgdmFsdWUgcHJvcGVydHkgaXMgbm90IHdyaXRhYmxlLAor CSAqIGJ1dCBkdWtfeGRlZl9wcm9wX3N0cmlkeCgpIGRpc3JlZ2FyZHMgdGhlIHdyaXRlIHByb3Rl Y3Rpb24uICBCb29sZWFuCisJICogaW5zdGFuY2VzIGFyZSBpbW11dGFibGUuCisJICoKKwkgKiBT dHJpbmcgYW5kIGJ1ZmZlciBzcGVjaWFsIGJlaGF2aW9ycyBhcmUgYWxyZWFkeSBlbmFibGVkIHdo aWNoIGlzIG5vdAorCSAqIGlkZWFsLCBidXQgYSB3cml0ZSB0byB0aGUgaW50ZXJuYWwgdmFsdWUg aXMgbm90IGFmZmVjdGVkIGJ5IHRoZW0uCisJICovCisJZHVrX2R1cCh0aHIsIGlkeCk7CisJZHVr X3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfVkFMVUUsIERV S19QUk9QREVTQ19GTEFHU19OT05FKTsKKworIHJlcGxhY2VfdmFsdWU6CisJZHVrX3JlcGxhY2Uo dGhyLCBpZHgpOworCURVS19BU1NFUlQoZHVrX2lzX29iamVjdCh0aHIsIGlkeCkpOworfQorCitE VUtfSU5URVJOQUwgZHVrX2hvYmplY3QgKmR1a190b19ob2JqZWN0KGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaG9iamVjdCAqcmV0OworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCWR1a190b19vYmplY3QodGhyLCBpZHgpOworCXJldCA9IGR1a19rbm93 bl9ob2JqZWN0KHRociwgaWR4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogIFR5cGUgY2hl Y2tpbmcKKyAqLworCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX3RhZ19jaGVjayhkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfc21hbGxfdWludF90IHRhZykgeworCWR1a190 dmFsICp0djsKKworCXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJRFVL X0FTU0VSVCh0diAhPSBOVUxMKTsKKwlyZXR1cm4gKERVS19UVkFMX0dFVF9UQUcodHYpID09IHRh Zyk7Cit9CisKK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fb2JqX2ZsYWdfYW55X2RlZmF1bHRf ZmFsc2UoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX3VpbnRfdCBmbGFnX21h c2spIHsKKwlkdWtfaG9iamVjdCAqb2JqOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCW9iaiA9IGR1a19nZXRfaG9iamVjdCh0aHIsIGlkeCk7CisJaWYgKG9iaikgeworCQlyZXR1 cm4gKERVS19IRUFQSERSX0NIRUNLX0ZMQUdfQklUUygoZHVrX2hlYXBoZHIgKikgb2JqLCBmbGFn X21hc2spID8gMSA6IDApOworCX0KKwlyZXR1cm4gMDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19p bnRfdCBkdWtfZ2V0X3R5cGVfdHZhbChkdWtfdHZhbCAqdHYpIHsKKwlEVUtfQVNTRVJUKHR2ICE9 IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1BBQ0tFRF9UVkFMKQorCXN3aXRjaCAoRFVL X1RWQUxfR0VUX1RBRyh0dikpIHsKKwljYXNlIERVS19UQUdfVU5VU0VEOgorCQlyZXR1cm4gRFVL X1RZUEVfTk9ORTsKKwljYXNlIERVS19UQUdfVU5ERUZJTkVEOgorCQlyZXR1cm4gRFVLX1RZUEVf VU5ERUZJTkVEOworCWNhc2UgRFVLX1RBR19OVUxMOgorCQlyZXR1cm4gRFVLX1RZUEVfTlVMTDsK KwljYXNlIERVS19UQUdfQk9PTEVBTjoKKwkJcmV0dXJuIERVS19UWVBFX0JPT0xFQU47CisJY2Fz ZSBEVUtfVEFHX1NUUklORzoKKwkJcmV0dXJuIERVS19UWVBFX1NUUklORzsKKwljYXNlIERVS19U QUdfT0JKRUNUOgorCQlyZXR1cm4gRFVLX1RZUEVfT0JKRUNUOworCWNhc2UgRFVLX1RBR19CVUZG RVI6CisJCXJldHVybiBEVUtfVFlQRV9CVUZGRVI7CisJY2FzZSBEVUtfVEFHX1BPSU5URVI6CisJ CXJldHVybiBEVUtfVFlQRV9QT0lOVEVSOworCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6CisJCXJl dHVybiBEVUtfVFlQRV9MSUdIVEZVTkM7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJ Y2FzZSBEVUtfVEFHX0ZBU1RJTlQ6CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBOb3RlOiBudW1i ZXIgaGFzIG5vIGV4cGxpY2l0IHRhZyAoaW4gOC1ieXRlIHJlcHJlc2VudGF0aW9uKSAqLworCQlE VUtfQVNTRVJUKCFEVUtfVFZBTF9JU19VTlVTRUQodHYpKTsKKwkJRFVLX0FTU0VSVChEVUtfVFZB TF9JU19OVU1CRVIodHYpKTsKKwkJcmV0dXJuIERVS19UWVBFX05VTUJFUjsKKwl9CisjZWxzZSAg LyogRFVLX1VTRV9QQUNLRURfVFZBTCAqLworCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVkFMSURf VEFHKHR2KSk7CisJRFVLX0FTU0VSVChzaXplb2YoZHVrX190eXBlX2Zyb21fdGFnKSAvIHNpemVv ZihkdWtfdWludF90KSA9PSBEVUtfVEFHX01BWCAtIERVS19UQUdfTUlOICsgMSk7CisJcmV0dXJu IChkdWtfaW50X3QpIGR1a19fdHlwZV9mcm9tX3RhZ1tEVUtfVFZBTF9HRVRfVEFHKHR2KSAtIERV S19UQUdfTUlOXTsKKyNlbmRpZiAgLyogRFVLX1VTRV9QQUNLRURfVFZBTCAqLworfQorCitEVUtf RVhURVJOQUwgZHVrX2ludF90IGR1a19nZXRfdHlwZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4 X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0 diAhPSBOVUxMKTsKKworCXJldHVybiBkdWtfZ2V0X3R5cGVfdHZhbCh0dik7Cit9CisKKyNpZiBk ZWZpbmVkKERVS19VU0VfVkVSQk9TRV9FUlJPUlMpICYmIGRlZmluZWQoRFVLX1VTRV9QQVJBTk9J RF9FUlJPUlMpCitEVUtfTE9DQUwgY29uc3QgY2hhciAqIGNvbnN0IGR1a19fdHlwZV9uYW1lc1td ID0geworCSJub25lIiwKKwkidW5kZWZpbmVkIiwKKwkibnVsbCIsCisJImJvb2xlYW4iLAorCSJu dW1iZXIiLAorCSJzdHJpbmciLAorCSJvYmplY3QiLAorCSJidWZmZXIiLAorCSJwb2ludGVyIiwK KwkibGlnaHRmdW5jIgorfTsKKworRFVLX0lOVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19nZXRfdHlw ZV9uYW1lKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaW50X3QgdHlw ZV90YWc7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHlwZV90YWcgPSBkdWtf Z2V0X3R5cGUodGhyLCBpZHgpOworCURVS19BU1NFUlQodHlwZV90YWcgPj0gRFVLX1RZUEVfTUlO ICYmIHR5cGVfdGFnIDw9IERVS19UWVBFX01BWCk7CisJRFVLX0FTU0VSVChEVUtfVFlQRV9NSU4g PT0gMCAmJiBzaXplb2YoZHVrX190eXBlX25hbWVzKSAvIHNpemVvZihjb25zdCBjaGFyICopID09 IERVS19UWVBFX01BWCArIDEpOworCisJcmV0dXJuIGR1a19fdHlwZV9uYW1lc1t0eXBlX3RhZ107 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfVkVSQk9TRV9FUlJPUlMgJiYgRFVLX1VTRV9QQVJBTk9J RF9FUlJPUlMgKi8KKworRFVLX0lOVEVSTkFMIGR1a19zbWFsbF91aW50X3QgZHVrX2dldF9jbGFz c19udW1iZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a190dmFsICp0 djsKKwlkdWtfaG9iamVjdCAqb2JqOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAh PSBOVUxMKTsKKworCXN3aXRjaCAoRFVLX1RWQUxfR0VUX1RBRyh0dikpIHsKKwljYXNlIERVS19U QUdfT0JKRUNUOgorCQlvYmogPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJRFVLX0FTU0VS VChvYmogIT0gTlVMTCk7CisJCXJldHVybiBEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKG9i aik7CisJY2FzZSBEVUtfVEFHX0JVRkZFUjoKKwkJLyogQnVmZmVycyBiZWhhdmUgbGlrZSBVaW50 OEFycmF5IG9iamVjdHMuICovCisJCXJldHVybiBEVUtfSE9CSkVDVF9DTEFTU19VSU5UOEFSUkFZ OworCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6CisJCS8qIExpZ2h0ZnVuY3MgYmVoYXZlIGxpa2Ug RnVuY3Rpb24gb2JqZWN0cy4gKi8KKwkJcmV0dXJuIERVS19IT0JKRUNUX0NMQVNTX0ZVTkNUSU9O OworCWRlZmF1bHQ6CisJCS8qIFByaW1pdGl2ZSBvciBVTlVTRUQsIG5vIGNsYXNzIG51bWJlci4g Ki8KKwkJcmV0dXJuIERVS19IT0JKRUNUX0NMQVNTX05PTkU7CisJfQorfQorCitEVUtfRVhURVJO QUwgZHVrX2Jvb2xfdCBkdWtfY2hlY2tfdHlwZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg aWR4LCBkdWtfaW50X3QgdHlwZSkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwly ZXR1cm4gKGR1a19nZXRfdHlwZSh0aHIsIGlkeCkgPT0gdHlwZSkgPyAxIDogMDsKK30KKworRFVL X0lOVEVSTkFMIGR1a191aW50X3QgZHVrX2dldF90eXBlX21hc2tfdHZhbChkdWtfdHZhbCAqdHYp IHsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1BBQ0tF RF9UVkFMKQorCXN3aXRjaCAoRFVLX1RWQUxfR0VUX1RBRyh0dikpIHsKKwljYXNlIERVS19UQUdf VU5VU0VEOgorCQlyZXR1cm4gRFVLX1RZUEVfTUFTS19OT05FOworCWNhc2UgRFVLX1RBR19VTkRF RklORUQ6CisJCXJldHVybiBEVUtfVFlQRV9NQVNLX1VOREVGSU5FRDsKKwljYXNlIERVS19UQUdf TlVMTDoKKwkJcmV0dXJuIERVS19UWVBFX01BU0tfTlVMTDsKKwljYXNlIERVS19UQUdfQk9PTEVB TjoKKwkJcmV0dXJuIERVS19UWVBFX01BU0tfQk9PTEVBTjsKKwljYXNlIERVS19UQUdfU1RSSU5H OgorCQlyZXR1cm4gRFVLX1RZUEVfTUFTS19TVFJJTkc7CisJY2FzZSBEVUtfVEFHX09CSkVDVDoK KwkJcmV0dXJuIERVS19UWVBFX01BU0tfT0JKRUNUOworCWNhc2UgRFVLX1RBR19CVUZGRVI6CisJ CXJldHVybiBEVUtfVFlQRV9NQVNLX0JVRkZFUjsKKwljYXNlIERVS19UQUdfUE9JTlRFUjoKKwkJ cmV0dXJuIERVS19UWVBFX01BU0tfUE9JTlRFUjsKKwljYXNlIERVS19UQUdfTElHSFRGVU5DOgor CQlyZXR1cm4gRFVLX1RZUEVfTUFTS19MSUdIVEZVTkM7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZB U1RJTlQpCisJY2FzZSBEVUtfVEFHX0ZBU1RJTlQ6CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBO b3RlOiBudW1iZXIgaGFzIG5vIGV4cGxpY2l0IHRhZyAoaW4gOC1ieXRlIHJlcHJlc2VudGF0aW9u KSAqLworCQlEVUtfQVNTRVJUKCFEVUtfVFZBTF9JU19VTlVTRUQodHYpKTsKKwkJRFVLX0FTU0VS VChEVUtfVFZBTF9JU19OVU1CRVIodHYpKTsKKwkJcmV0dXJuIERVS19UWVBFX01BU0tfTlVNQkVS OworCX0KKyNlbHNlICAvKiBEVUtfVVNFX1BBQ0tFRF9UVkFMICovCisJRFVLX0FTU0VSVChEVUtf VFZBTF9JU19WQUxJRF9UQUcodHYpKTsKKwlEVUtfQVNTRVJUKHNpemVvZihkdWtfX3R5cGVfbWFz a19mcm9tX3RhZykgLyBzaXplb2YoZHVrX3VpbnRfdCkgPT0gRFVLX1RBR19NQVggLSBEVUtfVEFH X01JTiArIDEpOworCXJldHVybiBkdWtfX3R5cGVfbWFza19mcm9tX3RhZ1tEVUtfVFZBTF9HRVRf VEFHKHR2KSAtIERVS19UQUdfTUlOXTsKKyNlbmRpZiAgLyogRFVLX1VTRV9QQUNLRURfVFZBTCAq LworfQorCitEVUtfRVhURVJOQUwgZHVrX3VpbnRfdCBkdWtfZ2V0X3R5cGVfbWFzayhkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VS VF9BUElfRU5UUlkodGhyKTsKKworCXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlk eCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKworCXJldHVybiBkdWtfZ2V0X3R5cGVfbWFz a190dmFsKHR2KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2NoZWNrX3R5cGVf bWFzayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBkdWtfdWludF90IG1hc2spIHsK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYgKERVS19MSUtFTFkoKGR1a19nZXRf dHlwZV9tYXNrKHRociwgaWR4KSAmIG1hc2spICE9IDBVKSkgeworCQlyZXR1cm4gMTsKKwl9CisJ aWYgKG1hc2sgJiBEVUtfVFlQRV9NQVNLX1RIUk9XKSB7CisJCURVS19FUlJPUl9UWVBFKHRociwg RFVLX1NUUl9VTkVYUEVDVEVEX1RZUEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19pc191bmRl ZmluZWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJ X0VOVFJZKHRocik7CisJcmV0dXJuIGR1a19fdGFnX2NoZWNrKHRociwgaWR4LCBEVUtfVEFHX1VO REVGSU5FRCk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19pc19udWxsKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCXJldHVybiBkdWtfX3RhZ19jaGVjayh0aHIsIGlkeCwgRFVLX1RBR19OVUxMKTsKK30KKwor RFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2lzX2Jvb2xlYW4oZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1 a19fdGFnX2NoZWNrKHRociwgaWR4LCBEVUtfVEFHX0JPT0xFQU4pOworfQorCitEVUtfRVhURVJO QUwgZHVrX2Jvb2xfdCBkdWtfaXNfbnVtYmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJ LyoKKwkgKiAgTnVtYmVyIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYSBzcGVj aWZpYworCSAqICB0YWcgaW4gdGhlIDgtYnl0ZSByZXByZXNlbnRhdGlvbi4KKwkgKi8KKworCS8q IFhYWDogc2hvcnRlciB2ZXJzaW9uIGZvciB1bnBhY2tlZCByZXByZXNlbnRhdGlvbj8gKi8KKwor CXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAh PSBOVUxMKTsKKwlyZXR1cm4gRFVLX1RWQUxfSVNfTlVNQkVSKHR2KTsKK30KKworRFVLX0VYVEVS TkFMIGR1a19ib29sX3QgZHVrX2lzX25hbihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4 KSB7CisJLyogWFhYOiBUaGlzIHdpbGwgbm93IHJldHVybiBmYWxzZSBmb3Igbm9uLW51bWJlcnMs IGV2ZW4gdGhvdWdoIHRoZXkgd291bGQKKwkgKiBjb2VyY2UgdG8gTmFOIChhcyBhIGdlbmVyYWwg cnVsZSkuICBJbiBwYXJ0aWN1bGFyLCBkdWtfZ2V0X251bWJlcigpCisJICogcmV0dXJucyBhIE5h TiBmb3Igbm9uLW51bWJlcnMsIHNvIHNob3VsZCB0aGlzIGZ1bmN0aW9uIGFsc28gcmV0dXJuCisJ ICogdHJ1ZSBmb3Igbm9uLW51bWJlcnM/CisJICovCisKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRo ciwgaWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJLyogWFhYOiBmb3IgcGFja2Vk IGR1a190dmFsIGFuIGV4cGxpY2l0ICJpcyBudW1iZXIiIGNoZWNrIGlzIHVubmVjZXNzYXJ5ICov CisJaWYgKCFEVUtfVFZBTF9JU19OVU1CRVIodHYpKSB7CisJCXJldHVybiAwOworCX0KKwlyZXR1 cm4gKGR1a19ib29sX3QpIERVS19JU05BTihEVUtfVFZBTF9HRVRfTlVNQkVSKHR2KSk7Cit9CisK K0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19pc19zdHJpbmcoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2lkeF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1 a19fdGFnX2NoZWNrKHRociwgaWR4LCBEVUtfVEFHX1NUUklORyk7Cit9CisKK0RVS19JTlRFUk5B TCBkdWtfYm9vbF90IGR1a19pc19zdHJpbmdfbm90c3ltYm9sKGR1a19odGhyZWFkICp0aHIsIGR1 a19pZHhfdCBpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiBkdWtf Z2V0X2hzdHJpbmdfbm90c3ltYm9sKHRociwgaWR4KSAhPSBOVUxMOworfQorCitEVUtfRVhURVJO QUwgZHVrX2Jvb2xfdCBkdWtfaXNfb2JqZWN0KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBp ZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiBkdWtfX3RhZ19jaGVj ayh0aHIsIGlkeCwgRFVLX1RBR19PQkpFQ1QpOworfQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xf dCBkdWtfaXNfYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiBkdWtfX3RhZ19jaGVjayh0aHIsIGlkeCwg RFVLX1RBR19CVUZGRVIpOworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9T VVBQT1JUKQorRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2lzX2J1ZmZlcl9kYXRhKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwg aWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCWlmIChEVUtfVFZBTF9JU19CVUZGRVIo dHYpKSB7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSkg eworCQlkdWtfaG9iamVjdCAqaCA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNT RVJUKGggIT0gTlVMTCk7CisJCWlmIChEVUtfSE9CSkVDVF9JU19CVUZPQkooaCkpIHsKKwkJCXJl dHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorI2Vsc2UgIC8qIERVS19VU0VfQlVGRkVS T0JKRUNUX1NVUFBPUlQgKi8KK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19pc19idWZmZXJf ZGF0YShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCXJldHVybiBkdWtfaXNfYnVmZmVyKHRociwgaWR4KTsKK30KKworI2Vu ZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisKK0RVS19FWFRFUk5BTCBk dWtfYm9vbF90IGR1a19pc19wb2ludGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgp IHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiBkdWtfX3RhZ19jaGVjayh0 aHIsIGlkeCwgRFVLX1RBR19QT0lOVEVSKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3Qg ZHVrX2lzX2xpZ2h0ZnVuYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlyZXR1cm4gZHVrX190YWdfY2hlY2sodGhyLCBpZHgs IERVS19UQUdfTElHSFRGVU5DKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2lz X3N5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX2hzdHJpbmcg Kmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCWggPSBkdWtfZ2V0X2hzdHJpbmco dGhyLCBpZHgpOworCS8qIFVzZSBEVUtfTElLRUxZKCkgaGVyZSBiZWNhdXNlIGNhbGxlciBtYXkg YmUgbW9yZSBsaWtlbHkgdG8gdHlwZQorCSAqIGNoZWNrIGFuIGV4cGVjdGVkIHN5bWJvbCB0aGFu IG5vdC4KKwkgKi8KKwlpZiAoRFVLX0xJS0VMWShoICE9IE5VTEwgJiYgRFVLX0hTVFJJTkdfSEFT X1NZTUJPTChoKSkpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitEVUtfRVhU RVJOQUwgZHVrX2Jvb2xfdCBkdWtfaXNfYXJyYXkoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90 IGlkeCkgeworCWR1a19ob2JqZWN0ICpvYmo7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCisJb2JqID0gZHVrX2dldF9ob2JqZWN0KHRociwgaWR4KTsKKwlpZiAob2JqKSB7CisJCXJl dHVybiAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihvYmopID09IERVS19IT0JKRUNUX0NM QVNTX0FSUkFZID8gMSA6IDApOworCX0KKwlyZXR1cm4gMDsKK30KKworRFVLX0VYVEVSTkFMIGR1 a19ib29sX3QgZHVrX2lzX2Z1bmN0aW9uKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgp IHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYg PSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwgaWR4KTsKKwlpZiAoRFVLX1RWQUxfSVNfT0JK RUNUKHR2KSkgeworCQlkdWtfaG9iamVjdCAqaDsKKwkJaCA9IERVS19UVkFMX0dFVF9PQkpFQ1Qo dHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJCXJldHVybiBEVUtfSE9CSkVDVF9IQVNf Q0FMTEFCTEUoaCkgPyAxIDogMDsKKwl9CisJaWYgKERVS19UVkFMX0lTX0xJR0hURlVOQyh0dikp IHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitEVUtfSU5URVJOQUwgZHVrX2Jv b2xfdCBkdWtfaXNfY2FsbGFibGVfdHZhbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYp IHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX1VOUkVGKHRocik7CisKKwlp ZiAoRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSkgeworCQlkdWtfaG9iamVjdCAqaDsKKwkJaCA9IERV S19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJCXJldHVy biBEVUtfSE9CSkVDVF9IQVNfQ0FMTEFCTEUoaCkgPyAxIDogMDsKKwl9CisJaWYgKERVS19UVkFM X0lTX0xJR0hURlVOQyh0dikpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitE VUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfaXNfY29uc3RydWN0YWJsZShkdWtfaHRocmVhZCAq dGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCXR2ID0gZHVrX2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJ aWYgKERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJZHVrX2hvYmplY3QgKmg7CisJCWggPSBE VUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQlyZXR1 cm4gRFVLX0hPQkpFQ1RfSEFTX0NPTlNUUlVDVEFCTEUoaCkgPyAxIDogMDsKKwl9CisJaWYgKERV S19UVkFMX0lTX0xJR0hURlVOQyh0dikpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOwor fQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfaXNfY19mdW5jdGlvbihkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwly ZXR1cm4gZHVrX19vYmpfZmxhZ19hbnlfZGVmYXVsdF9mYWxzZSh0aHIsCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfTkFURlVOQyk7Cit9CisKK0RVS19FWFRF Uk5BTCBkdWtfYm9vbF90IGR1a19pc19lY21hc2NyaXB0X2Z1bmN0aW9uKGR1a19odGhyZWFkICp0 aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVy biBkdWtfX29ial9mbGFnX2FueV9kZWZhdWx0X2ZhbHNlKHRociwKKwkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZHgsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19DT01QRlVOQyk7Cit9CisKK0RVS19FWFRFUk5B TCBkdWtfYm9vbF90IGR1a19pc19ib3VuZF9mdW5jdGlvbihkdWtfaHRocmVhZCAqdGhyLCBkdWtf aWR4X3QgaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlyZXR1cm4gZHVrX19v YmpfZmxhZ19hbnlfZGVmYXVsdF9mYWxzZSh0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWR4LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IT0JKRUNUX0ZMQUdfQk9VTkRGVU5DKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19i b29sX3QgZHVrX2lzX3RocmVhZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJ ZHVrX2hvYmplY3QgKm9iajsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlvYmog PSBkdWtfZ2V0X2hvYmplY3QodGhyLCBpZHgpOworCWlmIChvYmopIHsKKwkJcmV0dXJuIChEVUtf SE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKG9iaikgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfVEhSRUFE ID8gMSA6IDApOworCX0KKwlyZXR1cm4gMDsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3Qg ZHVrX2lzX2ZpeGVkX2J1ZmZlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJ ZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCXR2ID0gZHVr X2dldF90dmFsX29yX3VudXNlZCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsK KwlpZiAoRFVLX1RWQUxfSVNfQlVGRkVSKHR2KSkgeworCQlkdWtfaGJ1ZmZlciAqaCA9IERVS19U VkFMX0dFVF9CVUZGRVIodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJCXJldHVybiAo RFVLX0hCVUZGRVJfSEFTX0RZTkFNSUMoaCkgPyAwIDogMSk7CisJfQorCXJldHVybiAwOworfQor CitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfaXNfZHluYW1pY19idWZmZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisKKwl0diA9IGR1a19nZXRfdHZhbF9vcl91bnVzZWQodGhyLCBpZHgp OworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisJaWYgKERVS19UVkFMX0lTX0JVRkZFUih0dikp IHsKKwkJZHVrX2hidWZmZXIgKmggPSBEVUtfVFZBTF9HRVRfQlVGRkVSKHR2KTsKKwkJRFVLX0FT U0VSVChoICE9IE5VTEwpOworCQlyZXR1cm4gKERVS19IQlVGRkVSX0hBU19EWU5BTUlDKGgpICYm ICFEVUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoaCkgPyAxIDogMCk7CisJfQorCXJldHVybiAwOwor fQorCitEVUtfRVhURVJOQUwgZHVrX2Jvb2xfdCBkdWtfaXNfZXh0ZXJuYWxfYnVmZmVyKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfZ2V0X3R2YWxfb3JfdW51c2VkKHRociwg aWR4KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCWlmIChEVUtfVFZBTF9JU19CVUZGRVIo dHYpKSB7CisJCWR1a19oYnVmZmVyICpoID0gRFVLX1RWQUxfR0VUX0JVRkZFUih0dik7CisJCURV S19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJcmV0dXJuIChEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQyho KSAmJiBEVUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoaCkgPyAxIDogMCk7CisJfQorCXJldHVybiAw OworfQorCitEVUtfRVhURVJOQUwgZHVrX2VycmNvZGVfdCBkdWtfZ2V0X2Vycm9yX2NvZGUoZHVr X2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCkgeworCWR1a19ob2JqZWN0ICpoOworCWR1a191 aW50X3Qgc2FuaXR5OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWggPSBkdWtf Z2V0X2hvYmplY3QodGhyLCBpZHgpOworCisJc2FuaXR5ID0gRFVLX0hPQkpFQ1RfUFJPVE9UWVBF X0NIQUlOX1NBTklUWTsKKwlkbyB7CisJCWlmICghaCkgeworCQkJcmV0dXJuIERVS19FUlJfTk9O RTsKKwkJfQorCisJCS8qIFhYWDogc29tZXRoaW5nIG1vcmUgY29udmVuaWVudD8gKi8KKworCQlp ZiAoaCA9PSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0VWQUxfRVJST1JfUFJPVE9UWVBFXSkgewor CQkJcmV0dXJuIERVS19FUlJfRVZBTF9FUlJPUjsKKwkJfQorCQlpZiAoaCA9PSB0aHItPmJ1aWx0 aW5zW0RVS19CSURYX1JBTkdFX0VSUk9SX1BST1RPVFlQRV0pIHsKKwkJCXJldHVybiBEVUtfRVJS X1JBTkdFX0VSUk9SOworCQl9CisJCWlmIChoID09IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfUkVG RVJFTkNFX0VSUk9SX1BST1RPVFlQRV0pIHsKKwkJCXJldHVybiBEVUtfRVJSX1JFRkVSRU5DRV9F UlJPUjsKKwkJfQorCQlpZiAoaCA9PSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX1NZTlRBWF9FUlJP Ul9QUk9UT1RZUEVdKSB7CisJCQlyZXR1cm4gRFVLX0VSUl9TWU5UQVhfRVJST1I7CisJCX0KKwkJ aWYgKGggPT0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9UWVBFX0VSUk9SX1BST1RPVFlQRV0pIHsK KwkJCXJldHVybiBEVUtfRVJSX1RZUEVfRVJST1I7CisJCX0KKwkJaWYgKGggPT0gdGhyLT5idWls dGluc1tEVUtfQklEWF9VUklfRVJST1JfUFJPVE9UWVBFXSkgeworCQkJcmV0dXJuIERVS19FUlJf VVJJX0VSUk9SOworCQl9CisJCWlmIChoID09IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfRVJST1Jf UFJPVE9UWVBFXSkgeworCQkJcmV0dXJuIERVS19FUlJfRVJST1I7CisJCX0KKworCQloID0gRFVL X0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGgpOworCX0gd2hpbGUgKC0tc2FuaXR5 ID4gMCk7CisKKwlyZXR1cm4gRFVLX0VSUl9OT05FOworfQorCisvKgorICogIFB1c2hlcnMKKyAq LworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcHVzaF90dmFsKGR1a19odGhyZWFkICp0aHIsIGR1 a190dmFsICp0dikgeworCWR1a190dmFsICp0dl9zbG90OworCisJRFVLX0FTU0VSVF9BUElfRU5U UlkodGhyKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJRFVLX19DSEVDS19TUEFDRSgp OworCXR2X3Nsb3QgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCURVS19UVkFMX1NFVF9UVkFMKHR2 X3Nsb3QsIHR2KTsKKwlEVUtfVFZBTF9JTkNSRUYodGhyLCB0dik7ICAvKiBubyBzaWRlIGVmZmVj dHMgKi8KK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfdW5kZWZpbmVkKGR1a19odGhy ZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX19DSEVDS19T UEFDRSgpOworCisJLyogQmVjYXVzZSB2YWx1ZSBzdGFjayBpbml0IHBvbGljeSBpcyAndW5kZWZp bmVkIGFib3ZlIHRvcCcsCisJICogd2UgZG9uJ3QgbmVlZCB0byB3cml0ZSwganVzdCBhc3NlcnQu CisJICovCisJdGhyLT52YWxzdGFja190b3ArKzsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VO REVGSU5FRCh0aHItPnZhbHN0YWNrX3RvcCAtIDEpKTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQg ZHVrX3B1c2hfbnVsbChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3R2YWwgKnR2X3Nsb3Q7CisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19fQ0hFQ0tfU1BBQ0UoKTsKKwl0dl9z bG90ID0gdGhyLT52YWxzdGFja190b3ArKzsKKwlEVUtfVFZBTF9TRVRfTlVMTCh0dl9zbG90KTsK K30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfYm9vbGVhbihkdWtfaHRocmVhZCAqdGhy LCBkdWtfYm9vbF90IHZhbCkgeworCWR1a190dmFsICp0dl9zbG90OworCWR1a19zbWFsbF9pbnRf dCBiOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0NIRUNLX1NQQUNFKCk7 CisJYiA9ICh2YWwgPyAxIDogMCk7ICAvKiBlbnN1cmUgdmFsdWUgaXMgMSBvciAwIChub3Qgb3Ro ZXIgbm9uLXplcm8pICovCisJdHZfc2xvdCA9IHRoci0+dmFsc3RhY2tfdG9wKys7CisJRFVLX1RW QUxfU0VUX0JPT0xFQU4odHZfc2xvdCwgYik7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19w dXNoX3RydWUoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a190dmFsICp0dl9zbG90OworCisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisJdHZfc2xvdCA9 IHRoci0+dmFsc3RhY2tfdG9wKys7CisJRFVLX1RWQUxfU0VUX0JPT0xFQU5fVFJVRSh0dl9zbG90 KTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfZmFsc2UoZHVrX2h0aHJlYWQgKnRo cikgeworCWR1a190dmFsICp0dl9zbG90OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KwlEVUtfX0NIRUNLX1NQQUNFKCk7CisJdHZfc2xvdCA9IHRoci0+dmFsc3RhY2tfdG9wKys7CisJ RFVLX1RWQUxfU0VUX0JPT0xFQU5fRkFMU0UodHZfc2xvdCk7Cit9CisKKy8qIG5vcm1hbGl6ZSBO YU4gd2hpY2ggbWF5IG5vdCBtYXRjaCBvdXIgY2Fub25pY2FsIGludGVybmFsIE5hTiAqLworRFVL X0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfbnVtYmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19kb3Vi bGVfdCB2YWwpIHsKKwlkdWtfdHZhbCAqdHZfc2xvdDsKKwlkdWtfZG91YmxlX3VuaW9uIGR1Owor CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisJZHUu ZCA9IHZhbDsKKwlEVUtfREJMVU5JT05fTk9STUFMSVpFX05BTl9DSEVDSygmZHUpOworCXR2X3Ns b3QgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCURVS19UVkFMX1NFVF9OVU1CRVIodHZfc2xvdCwg ZHUuZCk7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19wdXNoX2ludChkdWtfaHRocmVhZCAq dGhyLCBkdWtfaW50X3QgdmFsKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJZHVr X3R2YWwgKnR2X3Nsb3Q7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19fQ0hF Q0tfU1BBQ0UoKTsKKwl0dl9zbG90ID0gdGhyLT52YWxzdGFja190b3ArKzsKKyNpZiBEVUtfSU5U X01BWCA8PSAweDdmZmZmZmZmTAorCURVS19UVkFMX1NFVF9JMzIodHZfc2xvdCwgKGR1a19pbnQz Ml90KSB2YWwpOworI2Vsc2UKKwlpZiAodmFsID49IERVS19GQVNUSU5UX01JTiAmJiB2YWwgPD0g RFVLX0ZBU1RJTlRfTUFYKSB7CisJCURVS19UVkFMX1NFVF9GQVNUSU5UKHR2X3Nsb3QsIChkdWtf aW50NjRfdCkgdmFsKTsKKwl9IGVsc2UgeworCQlkdWtfZG91YmxlX3QgPSAoZHVrX2RvdWJsZV90 KSB2YWw7CisJCURVS19UVkFMX1NFVF9OVU1CRVIodHZfc2xvdCwgZCk7CisJfQorI2VuZGlmCisj ZWxzZSAgLyogRFVLX1VTRV9GQVNUSU5UICovCisJZHVrX3R2YWwgKnR2X3Nsb3Q7CisJZHVrX2Rv dWJsZV90IGQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19fQ0hFQ0tfU1BB Q0UoKTsKKwlkID0gKGR1a19kb3VibGVfdCkgdmFsOworCXR2X3Nsb3QgPSB0aHItPnZhbHN0YWNr X3RvcCsrOworCURVS19UVkFMX1NFVF9OVU1CRVIodHZfc2xvdCwgZCk7CisjZW5kaWYgIC8qIERV S19VU0VfRkFTVElOVCAqLworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcHVzaF91aW50KGR1 a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgdmFsKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZB U1RJTlQpCisJZHVrX3R2YWwgKnR2X3Nsb3Q7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCURVS19fQ0hFQ0tfU1BBQ0UoKTsKKwl0dl9zbG90ID0gdGhyLT52YWxzdGFja190b3ArKzsK KyNpZiBEVUtfVUlOVF9NQVggPD0gMHhmZmZmZmZmZlVMCisJRFVLX1RWQUxfU0VUX1UzMih0dl9z bG90LCAoZHVrX3VpbnQzMl90KSB2YWwpOworI2Vsc2UKKwlpZiAodmFsIDw9IERVS19GQVNUSU5U X01BWCkgeyAgLyogdmFsIGlzIHVuc2lnbmVkIHNvID49IDAgKi8KKwkJLyogWFhYOiB0YWtlIGFk dmFudGFnZSBvZiB2YWwgYmVpbmcgdW5zaWduZWQsIG5vIG5lZWQgdG8gbWFzayAqLworCQlEVUtf VFZBTF9TRVRfRkFTVElOVCh0dl9zbG90LCAoZHVrX2ludDY0X3QpIHZhbCk7CisJfSBlbHNlIHsK KwkJZHVrX2RvdWJsZV90ID0gKGR1a19kb3VibGVfdCkgdmFsOworCQlEVUtfVFZBTF9TRVRfTlVN QkVSKHR2X3Nsb3QsIGQpOworCX0KKyNlbmRpZgorI2Vsc2UgIC8qIERVS19VU0VfRkFTVElOVCAq LworCWR1a190dmFsICp0dl9zbG90OworCWR1a19kb3VibGVfdCBkOworCisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisJZCA9IChkdWtfZG91YmxlX3Qp IHZhbDsKKwl0dl9zbG90ID0gdGhyLT52YWxzdGFja190b3ArKzsKKwlEVUtfVFZBTF9TRVRfTlVN QkVSKHR2X3Nsb3QsIGQpOworI2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJTlQgKi8KK30KKworRFVL X0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfbmFuKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdHZh bCAqdHZfc2xvdDsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCisJRFVLX0FTU0VSVF9BUElfRU5U UlkodGhyKTsKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisJRFVLX0RCTFVOSU9OX1NFVF9OQU4oJmR1 KTsKKwlEVUtfQVNTRVJUKERVS19EQkxVTklPTl9JU19OT1JNQUxJWkVEKCZkdSkpOworCXR2X3Ns b3QgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCURVS19UVkFMX1NFVF9OVU1CRVIodHZfc2xvdCwg ZHUuZCk7Cit9CisKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfcHVzaF9sc3RyaW5nKGR1 a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKnN0ciwgZHVrX3NpemVfdCBsZW4pIHsKKwlkdWtf aHN0cmluZyAqaDsKKwlkdWtfdHZhbCAqdHZfc2xvdDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisKKwkvKiBDaGVjayBzdGFjayBiZWZvcmUgaW50ZXJuaW5nIChhdm9pZCBoYW5naW5n IHRlbXApLiAqLworCURVS19fQ0hFQ0tfU1BBQ0UoKTsKKworCS8qIE5VTEwgd2l0aCB6ZXJvIGxl bmd0aCByZXByZXNlbnRzIGFuIGVtcHR5IHN0cmluZzsgTlVMTCB3aXRoIGhpZ2hlcgorCSAqIGxl bmd0aCBpcyBhbHNvIG5vdyB0cmVhdGVkIGxpa2UgYW4gZW1wdHkgc3RyaW5nIGFsdGhvdWdoIGl0 IGlzCisJICogYSBiaXQgZHViaW91cy4gIFRoaXMgaXMgdW5saWtlIGR1a19wdXNoX3N0cmluZygp IHdoaWNoIHB1c2hlcyBhCisJICogJ251bGwnIGlmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYSBOVUxM LgorCSAqLworCWlmIChEVUtfVU5MSUtFTFkoc3RyID09IE5VTEwpKSB7CisJCWxlbiA9IDBVOwor CX0KKworCS8qIENoZWNrIGZvciBtYXhpbXVtIHN0cmluZyBsZW5ndGguICovCisJaWYgKERVS19V TkxJS0VMWShsZW4gPiBEVUtfSFNUUklOR19NQVhfQllURUxFTikpIHsKKwkJRFVLX0VSUk9SX1JB TkdFKHRociwgRFVLX1NUUl9TVFJJTkdfVE9PX0xPTkcpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0 dXJuIE5VTEw7KTsKKwl9CisKKwloID0gZHVrX2hlYXBfc3RydGFibGVfaW50ZXJuX2NoZWNrZWQo dGhyLCAoY29uc3QgZHVrX3VpbnQ4X3QgKikgc3RyLCAoZHVrX3VpbnQzMl90KSBsZW4pOworCURV S19BU1NFUlQoaCAhPSBOVUxMKTsKKworCXR2X3Nsb3QgPSB0aHItPnZhbHN0YWNrX3RvcCsrOwor CURVS19UVkFMX1NFVF9TVFJJTkcodHZfc2xvdCwgaCk7CisJRFVLX0hTVFJJTkdfSU5DUkVGKHRo ciwgaCk7ICAvKiBubyBzaWRlIGVmZmVjdHMgKi8KKworCXJldHVybiAoY29uc3QgY2hhciAqKSBE VUtfSFNUUklOR19HRVRfREFUQShoKTsKK30KKworRFVLX0VYVEVSTkFMIGNvbnN0IGNoYXIgKmR1 a19wdXNoX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpzdHIpIHsKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWYgKHN0cikgeworCQlyZXR1cm4gZHVrX3B1c2hf bHN0cmluZyh0aHIsIHN0ciwgRFVLX1NUUkxFTihzdHIpKTsKKwl9IGVsc2UgeworCQlkdWtfcHVz aF9udWxsKHRocik7CisJCXJldHVybiBOVUxMOworCX0KK30KKworI2lmICFkZWZpbmVkKERVS19V U0VfUFJFRkVSX1NJWkUpCisjaWYgZGVmaW5lZChEVUtfVVNFX0xJVENBQ0hFX1NJWkUpCitEVUtf RVhURVJOQUwgY29uc3QgY2hhciAqZHVrX3B1c2hfbGl0ZXJhbF9yYXcoZHVrX2h0aHJlYWQgKnRo ciwgY29uc3QgY2hhciAqc3RyLCBkdWtfc2l6ZV90IGxlbikgeworCWR1a19oc3RyaW5nICpoOwor CWR1a190dmFsICp0dl9zbG90OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtf QVNTRVJUKHN0ciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHN0cltsZW5dID09IChjaGFyKSAwKTsK KworCS8qIENoZWNrIGZvciBtYXhpbXVtIHN0cmluZyBsZW5ndGguICovCisJaWYgKERVS19VTkxJ S0VMWShsZW4gPiBEVUtfSFNUUklOR19NQVhfQllURUxFTikpIHsKKwkJRFVLX0VSUk9SX1JBTkdF KHRociwgRFVLX1NUUl9TVFJJTkdfVE9PX0xPTkcpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJu IE5VTEw7KTsKKwl9CisKKwloID0gZHVrX2hlYXBfc3RydGFibGVfaW50ZXJuX2xpdGVyYWxfY2hl Y2tlZCh0aHIsIChjb25zdCBkdWtfdWludDhfdCAqKSBzdHIsIChkdWtfdWludDMyX3QpIGxlbik7 CisJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJdHZfc2xvdCA9IHRoci0+dmFsc3RhY2tfdG9w Kys7CisJRFVLX1RWQUxfU0VUX1NUUklORyh0dl9zbG90LCBoKTsKKwlEVUtfSFNUUklOR19JTkNS RUYodGhyLCBoKTsgIC8qIG5vIHNpZGUgZWZmZWN0cyAqLworCisJcmV0dXJuIChjb25zdCBjaGFy ICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgpOworfQorI2Vsc2UgIC8qIERVS19VU0VfTElUQ0FD SEVfU0laRSAqLworRFVLX0VYVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19wdXNoX2xpdGVyYWxfcmF3 KGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKnN0ciwgZHVrX3NpemVfdCBsZW4pIHsKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoc3RyICE9IE5VTEwpOworCURV S19BU1NFUlQoc3RyW2xlbl0gPT0gKGNoYXIpIDApOworCisJcmV0dXJuIGR1a19wdXNoX2xzdHJp bmcodGhyLCBzdHIsIGxlbik7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfTElUQ0FDSEVfU0laRSAq LworI2VuZGlmICAvKiAhRFVLX1VTRV9QUkVGRVJfU0laRSAqLworCitEVUtfRVhURVJOQUwgdm9p ZCBkdWtfcHVzaF9wb2ludGVyKGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnZhbCkgeworCWR1a190 dmFsICp0dl9zbG90OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0NIRUNL X1NQQUNFKCk7CisJdHZfc2xvdCA9IHRoci0+dmFsc3RhY2tfdG9wKys7CisJRFVLX1RWQUxfU0VU X1BPSU5URVIodHZfc2xvdCwgdmFsKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5nICpk dWtfcHVzaF91aW50X3RvX2hzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBpKSB7 CisJZHVrX2hzdHJpbmcgKmhfdG1wOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CS8qIFhYWDogdGhpcyBjb3VsZCBiZSBhIGRpcmVjdCBEVUtfU1BSSU5URiB0byBhIGJ1ZmZlciBm b2xsb3dlZCBieSBkdWtfcHVzaF9zdHJpbmcoKSAqLworCWR1a19wdXNoX3VpbnQodGhyLCAoZHVr X3VpbnRfdCkgaSk7CisJaF90bXAgPSBkdWtfdG9faHN0cmluZ19tMSh0aHIpOworCURVS19BU1NF UlQoaF90bXAgIT0gTlVMTCk7CisJcmV0dXJuIGhfdG1wOworfQorCitEVUtfTE9DQUwgdm9pZCBk dWtfX3B1c2hfdGhpc19oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBj aGVja19vYmplY3RfY29lcmNpYmxlKSB7CisJZHVrX3R2YWwgKnR2X3Nsb3Q7CisKKwlEVUtfX0NI RUNLX1NQQUNFKCk7CisKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOREVGSU5FRCh0aHItPnZh bHN0YWNrX3RvcCkpOyAgLyogYmVjYXVzZSBvZiB2YWxzdGFjayBpbml0IHBvbGljeSAqLworCXR2 X3Nsb3QgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCisJaWYgKERVS19VTkxJS0VMWSh0aHItPmNh bGxzdGFja19jdXJyID09IE5VTEwpKSB7CisJCWlmIChjaGVja19vYmplY3RfY29lcmNpYmxlKSB7 CisJCQlnb3RvIHR5cGVfZXJyb3I7CisJCX0KKwkJLyogJ3VuZGVmaW5lZCcgYWxyZWFkeSBvbiBz dGFjayB0b3AgKi8KKwl9IGVsc2UgeworCQlkdWtfdHZhbCAqdHY7CisKKwkJLyogJ3RoaXMnIGJp bmRpbmcgaXMganVzdCBiZWZvcmUgY3VycmVudCBhY3RpdmF0aW9uJ3MgYm90dG9tICovCisJCURV S19BU1NFUlQodGhyLT52YWxzdGFja19ib3R0b20gPiB0aHItPnZhbHN0YWNrKTsKKwkJdHYgPSB0 aHItPnZhbHN0YWNrX2JvdHRvbSAtIDE7CisJCWlmIChjaGVja19vYmplY3RfY29lcmNpYmxlICYm CisJCSAgICAoRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHR2KSB8fCBEVUtfVFZBTF9JU19OVUxMKHR2 KSkpIHsKKwkJCS8qIFhYWDogYmV0dGVyIG1hY3JvIGZvciBEVUtfVFZBTF9JU19VTkRFRklORURf T1JfTlVMTCh0dikgKi8KKwkJCWdvdG8gdHlwZV9lcnJvcjsKKwkJfQorCisJCURVS19UVkFMX1NF VF9UVkFMKHR2X3Nsb3QsIHR2KTsKKwkJRFVLX1RWQUxfSU5DUkVGKHRociwgdHYpOworCX0KKwly ZXR1cm47CisKKyB0eXBlX2Vycm9yOgorCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9OT1Rf T0JKRUNUX0NPRVJDSUJMRSk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCitEVUtf RVhURVJOQUwgdm9pZCBkdWtfcHVzaF90aGlzKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX19wdXNoX3RoaXNfaGVscGVyKHRociwgMCAvKmNo ZWNrX29iamVjdF9jb2VyY2libGUqLyk7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19wdXNo X3RoaXNfY2hlY2tfb2JqZWN0X2NvZXJjaWJsZShkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKworCWR1a19fcHVzaF90aGlzX2hlbHBlcih0aHIsIDEgLypj aGVja19vYmplY3RfY29lcmNpYmxlKi8pOworfQorCitEVUtfSU5URVJOQUwgZHVrX2hvYmplY3Qg KmR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX29iamVjdChkdWtfaHRocmVhZCAqdGhyKSB7CisJ ZHVrX2hvYmplY3QgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX19w dXNoX3RoaXNfaGVscGVyKHRociwgMSAvKmNoZWNrX29iamVjdF9jb2VyY2libGUqLyk7CisJaCA9 IGR1a190b19ob2JqZWN0KHRociwgLTEpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlyZXR1 cm4gaDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5nICpkdWtfcHVzaF90aGlzX2NvZXJj aWJsZV90b19zdHJpbmcoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisKKwlkdWtfX3B1c2hfdGhpc19oZWxwZXIodGhyLCAxIC8qY2hlY2tfb2JqZWN0X2Nv ZXJjaWJsZSovKTsKKwlyZXR1cm4gZHVrX3RvX2hzdHJpbmdfbTEodGhyKTsgIC8qIFRoaXMgd2ls bCByZWplY3QgYWxsIFN5bWJvbCB2YWx1ZXM7IGFjY2VwdHMgU3ltYm9sIG9iamVjdHMuICovCit9 CisKK0RVS19JTlRFUk5BTCBkdWtfdHZhbCAqZHVrX2dldF9ib3Jyb3dlZF90aGlzX3R2YWwoZHVr X2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlEVUtfQVNT RVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+IDApOyAgLyogY2FsbGVyIHJlcXVpcmVkIHRvIGtub3cg Ki8KKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCk7ICAvKiBjYWxsZXIg cmVxdWlyZWQgdG8ga25vdyAqLworCURVS19BU1NFUlQodGhyLT52YWxzdGFja19ib3R0b20gPiB0 aHItPnZhbHN0YWNrKTsgIC8qIGNvbnNlcXVlbmNlIG9mIGFib3ZlICovCisJRFVLX0FTU0VSVCh0 aHItPnZhbHN0YWNrX2JvdHRvbSAtIDEgPj0gdGhyLT52YWxzdGFjayk7ICAvKiAndGhpcycgYmlu ZGluZyBleGlzdHMgKi8KKworCXJldHVybiB0aHItPnZhbHN0YWNrX2JvdHRvbSAtIDE7Cit9CisK K0RVS19FWFRFUk5BTCB2b2lkIGR1a19wdXNoX25ld190YXJnZXQoZHVrX2h0aHJlYWQgKnRocikg eworCWR1a19hY3RpdmF0aW9uICphY3Q7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOwor CisJLyogaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl Yy1tZXRhLXByb3BlcnRpZXMtcnVudGltZS1zZW1hbnRpY3MtZXZhbHVhdGlvbgorCSAqIGh0dHBz Oi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bmV3dGFy Z2V0CisJICoKKwkgKiBObyBuZXdUYXJnZXQgc3VwcG9ydCBub3csIHNvIGFzIGEgZmlyc3QgYXBw cm94aW1hdGlvbgorCSAqIHVzZSB0aGUgcmVzb2x2ZWQgKG5vbi1ib3VuZCkgdGFyZ2V0IGZ1bmN0 aW9uLgorCSAqCisJICogQ2hlY2sgQ09OU1RSVUNUIGZsYWcgZnJvbSBjdXJyZW50IGZ1bmN0aW9u LCBvciBpZiBydW5uaW5nCisJICogZGlyZWN0IGV2YWwsIGZyb20gYSBub24tZGlyZWN0LWV2YWwg cGFyZW50ICh3aXRoIHBvc3NpYmx5CisJICogbW9yZSB0aGFuIG9uZSBuZXN0ZWQgZGlyZWN0IGV2 YWwpLiAgQW4gYWx0ZXJuYXRpdmUgdG8gdGhpcworCSAqIHdvdWxkIGJlIHRvIHN0b3JlIFtbTmV3 VGFyZ2V0XV0gYXMgYSBoaWRkZW4gc3ltYm9sIG9mIHRoZQorCSAqIGxleGljYWwgc2NvcGUsIGFu ZCB0aGVuIGp1c3QgbG9vayB1cCB0aGF0IHZhcmlhYmxlLgorCSAqCisJICogQ2FsbHMgZnJvbSB0 aGUgYXBwbGljYXRpb24gd2lsbCBlaXRoZXIgYmUgZm9yIGFuIGVtcHR5CisJICogY2FsbCBzdGFj aywgb3IgYSBEdWt0YXBlL0MgZnVuY3Rpb24gYXMgdGhlIHRvcCBhY3RpdmF0aW9uLgorCSAqLwor CisJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwlmb3IgKDs7KSB7CisJCWlmIChhY3QgPT0g TlVMTCkgeworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYWN0LT5mbGFncyAmIERVS19BQ1RfRkxB R19DT05TVFJVQ1QpIHsKKwkJCWR1a19wdXNoX3R2YWwodGhyLCAmYWN0LT50dl9mdW5jKTsKKwkJ CXJldHVybjsKKwkJfSBlbHNlIGlmIChhY3QtPmZsYWdzICYgRFVLX0FDVF9GTEFHX0RJUkVDVF9F VkFMKSB7CisJCQlhY3QgPSBhY3QtPnBhcmVudDsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9 CisJfQorCisJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7Cit9CisKK0RVS19FWFRFUk5BTCB2b2lk IGR1a19wdXNoX2N1cnJlbnRfZnVuY3Rpb24oZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19hY3Rp dmF0aW9uICphY3Q7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJYWN0ID0gdGhy LT5jYWxsc3RhY2tfY3VycjsKKwlpZiAoYWN0ICE9IE5VTEwpIHsKKwkJZHVrX3B1c2hfdHZhbCh0 aHIsICZhY3QtPnR2X2Z1bmMpOworCX0gZWxzZSB7CisJCWR1a19wdXNoX3VuZGVmaW5lZCh0aHIp OworCX0KK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfY3VycmVudF90aHJlYWQoZHVr X2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZiAodGhy LT5oZWFwLT5jdXJyX3RocmVhZCkgeworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgKGR1a19ob2Jq ZWN0ICopIHRoci0+aGVhcC0+Y3Vycl90aHJlYWQpOworCX0gZWxzZSB7CisJCWR1a19wdXNoX3Vu ZGVmaW5lZCh0aHIpOworCX0KK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfZ2xvYmFs X29iamVjdChkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCWR1a19wdXNoX2hvYmplY3RfYmlkeCh0aHIsIERVS19CSURYX0dMT0JBTCk7Cit9CisKKy8q IFhYWDogc2l6ZSBvcHRpbWl6ZSAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19wdXNoX3N0YXNoKGR1 a19odGhyZWFkICp0aHIpIHsKKwlpZiAoIWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAt MSwgRFVLX1NUUklEWF9JTlRfVkFMVUUpKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJjcmVh dGluZyBoZWFwL2dsb2JhbC90aHJlYWQgc3Rhc2ggb24gZmlyc3QgdXNlIikpOworCQlkdWtfcG9w X3Vuc2FmZSh0aHIpOworCQlkdWtfcHVzaF9iYXJlX29iamVjdCh0aHIpOworCQlkdWtfZHVwX3Rv cCh0aHIpOworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0zLCBEVUtfU1RSSURY X0lOVF9WQUxVRSwgRFVLX1BST1BERVNDX0ZMQUdTX0MpOyAgLyogWyAuLi4gcGFyZW50IHN0YXNo IHN0YXNoIF0gLT4gWyAuLi4gcGFyZW50IHN0YXNoIF0gKi8KKwl9CisJZHVrX3JlbW92ZV9tMih0 aHIpOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcHVzaF9oZWFwX3N0YXNoKGR1a19odGhy ZWFkICp0aHIpIHsKKwlkdWtfaGVhcCAqaGVhcDsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCWhlYXAgPSB0aHItPmhlYXA7CisJRFVLX0FTU0VSVChoZWFwLT5oZWFwX29iamVjdCAhPSBO VUxMKTsKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwgaGVhcC0+aGVhcF9vYmplY3QpOworCWR1a19f cHVzaF9zdGFzaCh0aHIpOworfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcHVzaF9nbG9iYWxf c3Rhc2goZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJ ZHVrX3B1c2hfZ2xvYmFsX29iamVjdCh0aHIpOworCWR1a19fcHVzaF9zdGFzaCh0aHIpOworfQor CitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcHVzaF90aHJlYWRfc3Rhc2goZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2h0aHJlYWQgKnRhcmdldF90aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCWlmIChEVUtfVU5MSUtFTFkodGFyZ2V0X3RociA9PSBOVUxMKSkgeworCQlEVUtfRVJST1Jf VFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0K KwlkdWtfcHVzaF9ob2JqZWN0KHRociwgKGR1a19ob2JqZWN0ICopIHRhcmdldF90aHIpOworCWR1 a19fcHVzaF9zdGFzaCh0aHIpOworfQorCisvKiBYWFg6IGR1a19zc2l6ZV90IHdvdWxkIGJlIHVz ZWZ1bCBoZXJlICovCitEVUtfTE9DQUwgZHVrX2ludF90IGR1a19fdHJ5X3B1c2hfdnNwcmludGYo ZHVrX2h0aHJlYWQgKnRociwgdm9pZCAqYnVmLCBkdWtfc2l6ZV90IHN6LCBjb25zdCBjaGFyICpm bXQsIHZhX2xpc3QgYXApIHsKKwlkdWtfaW50X3QgbGVuOworCisJRFVLX0FTU0VSVF9DVFhfVkFM SUQodGhyKTsKKwlEVUtfVU5SRUYodGhyKTsKKworCS8qIE5VTCB0ZXJtaW5hdG9yIGhhbmRsaW5n IGRvZXNuJ3QgbWF0dGVyIGhlcmUgKi8KKwlsZW4gPSBEVUtfVlNOUFJJTlRGKChjaGFyICopIGJ1 Ziwgc3osIGZtdCwgYXApOworCWlmIChsZW4gPCAoZHVrX2ludF90KSBzeikgeworCQkvKiBSZXR1 cm4gdmFsdWUgb2YgJ3N6JyBvciBtb3JlIGluZGljYXRlcyBvdXRwdXQgd2FzIChwb3RlbnRpYWxs eSkKKwkJICogdHJ1bmNhdGVkLgorCQkgKi8KKwkJcmV0dXJuIChkdWtfaW50X3QpIGxlbjsKKwl9 CisJcmV0dXJuIC0xOworfQorCitEVUtfRVhURVJOQUwgY29uc3QgY2hhciAqZHVrX3B1c2hfdnNw cmludGYoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKSB7CisJ ZHVrX3VpbnQ4X3Qgc3RhY2tfYnVmW0RVS19QVVNIX1NQUklOVEZfSU5JVElBTF9TSVpFXTsKKwlk dWtfc2l6ZV90IHN6ID0gRFVLX1BVU0hfU1BSSU5URl9JTklUSUFMX1NJWkU7CisJZHVrX2Jvb2xf dCBwdXNoZWRfYnVmID0gMDsKKwl2b2lkICpidWY7CisJZHVrX2ludF90IGxlbjsgIC8qIFhYWDog ZHVrX3NzaXplX3QgKi8KKwljb25zdCBjaGFyICpyZXM7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCisJLyogc3BlY2lhbCBoYW5kbGluZyBvZiBmbXQ9PU5VTEwgKi8KKwlpZiAoIWZt dCkgeworCQlkdWtfaHN0cmluZyAqaF9zdHI7CisJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhy KTsKKwkJaF9zdHIgPSBkdWtfa25vd25faHN0cmluZyh0aHIsIC0xKTsKKwkJcmV0dXJuIChjb25z dCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfc3RyKTsKKwl9CisKKwkvKiBpbml0aWFs IGVzdGltYXRlIGJhc2VkIG9uIGZvcm1hdCBzdHJpbmcgKi8KKwlzeiA9IERVS19TVFJMRU4oZm10 KSArIDE2OyAgLyogZm9ybWF0IHBsdXMgc29tZXRoaW5nIHRvIGF2b2lkIGp1c3QgbWlzc2luZyAq LworCWlmIChzeiA8IERVS19QVVNIX1NQUklOVEZfSU5JVElBTF9TSVpFKSB7CisJCXN6ID0gRFVL X1BVU0hfU1BSSU5URl9JTklUSUFMX1NJWkU7CisJfQorCURVS19BU1NFUlQoc3ogPiAwKTsKKwor CS8qIFRyeSB0byBtYWtlIGRvIHdpdGggYSBzdGFjayBidWZmZXIgdG8gYXZvaWQgYWxsb2NhdGlu ZyBhIHRlbXBvcmFyeSBidWZmZXIuCisJICogVGhpcyB3b3JrcyA5OSUgb2YgdGhlIHRpbWUgd2hp Y2ggaXMgcXVpdGUgbmljZS4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCXZhX2xpc3QgYXBfY29weTsg IC8qIGNvcGllZCBzbyB0aGF0ICdhcCcgY2FuIGJlIHJldXNlZCAqLworCisJCWlmIChzeiA8PSBz aXplb2Yoc3RhY2tfYnVmKSkgeworCQkJYnVmID0gc3RhY2tfYnVmOworCQl9IGVsc2UgaWYgKCFw dXNoZWRfYnVmKSB7CisJCQlwdXNoZWRfYnVmID0gMTsKKwkJCWJ1ZiA9IGR1a19wdXNoX2R5bmFt aWNfYnVmZmVyKHRociwgc3opOworCQl9IGVsc2UgeworCQkJYnVmID0gZHVrX3Jlc2l6ZV9idWZm ZXIodGhyLCAtMSwgc3opOworCQl9CisJCURVS19BU1NFUlQoYnVmICE9IE5VTEwpOworCisJCURV S19WQV9DT1BZKGFwX2NvcHksIGFwKTsKKwkJbGVuID0gZHVrX190cnlfcHVzaF92c3ByaW50Zih0 aHIsIGJ1Ziwgc3osIGZtdCwgYXBfY29weSk7CisJCXZhX2VuZChhcF9jb3B5KTsKKwkJaWYgKGxl biA+PSAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGZhaWxlZCwgcmVzaXplIGFuZCB0cnkg YWdhaW4gKi8KKwkJc3ogPSBzeiAqIDI7CisJCWlmIChEVUtfVU5MSUtFTFkoc3ogPj0gRFVLX1BV U0hfU1BSSU5URl9TQU5JVFlfTElNSVQpKSB7CisJCQlEVUtfRVJST1JfUkFOR0UodGhyLCBEVUtf U1RSX1JFU1VMVF9UT09fTE9ORyk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsK KwkJfQorCX0KKworCS8qIENhbm5vdCB1c2UgZHVrX2J1ZmZlcl90b19zdHJpbmcoKSBvbiB0aGUg YnVmZmVyIGJlY2F1c2UgaXQgaXMKKwkgKiB1c3VhbGx5IGxhcmdlciB0aGFuICdsZW4nOyAnYnVm JyBpcyBhbHNvIHVzdWFsbHkgYSBzdGFjayBidWZmZXIuCisJICovCisJcmVzID0gZHVrX3B1c2hf bHN0cmluZyh0aHIsIChjb25zdCBjaGFyICopIGJ1ZiwgKGR1a19zaXplX3QpIGxlbik7ICAvKiBb IGJ1Zj8gcmVzIF0gKi8KKwlpZiAocHVzaGVkX2J1ZikgeworCQlkdWtfcmVtb3ZlX20yKHRocik7 CisJfQorCXJldHVybiByZXM7Cit9CisKK0RVS19FWFRFUk5BTCBjb25zdCBjaGFyICpkdWtfcHVz aF9zcHJpbnRmKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CisJdmFf bGlzdCBhcDsKKwljb25zdCBjaGFyICpyZXQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCisJLyogYWxsb3cgZm10PT1OVUxMICovCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0g ZHVrX3B1c2hfdnNwcmludGYodGhyLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJu IHJldDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19ob2JqZWN0ICpkdWtfcHVzaF9vYmplY3RfaGVs cGVyKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgaG9iamVjdF9mbGFnc19hbmRfY2xhc3Ms IGR1a19zbWFsbF9pbnRfdCBwcm90b3R5cGVfYmlkeCkgeworCWR1a190dmFsICp0dl9zbG90Owor CWR1a19ob2JqZWN0ICpoOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNT RVJUKHByb3RvdHlwZV9iaWR4ID09IC0xIHx8CisJICAgICAgICAgICAocHJvdG90eXBlX2JpZHgg Pj0gMCAmJiBwcm90b3R5cGVfYmlkeCA8IERVS19OVU1fQlVJTFRJTlMpKTsKKworCURVS19fQ0hF Q0tfU1BBQ0UoKTsKKworCWggPSBkdWtfaG9iamVjdF9hbGxvYyh0aHIsIGhvYmplY3RfZmxhZ3Nf YW5kX2NsYXNzKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKwlEVUtfREREKERVS19ERERQ UklOVCgiY3JlYXRlZCBvYmplY3Qgd2l0aCBmbGFnczogMHglMDhseCIsICh1bnNpZ25lZCBsb25n KSBoLT5oZHIuaF9mbGFncykpOworCisJdHZfc2xvdCA9IHRoci0+dmFsc3RhY2tfdG9wOworCURV S19UVkFMX1NFVF9PQkpFQ1QodHZfc2xvdCwgaCk7CisJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwg aCk7ICAvKiBubyBzaWRlIGVmZmVjdHMgKi8KKwl0aHItPnZhbHN0YWNrX3RvcCsrOworCisJLyog b2JqZWN0IGlzIG5vdyByZWFjaGFibGUgKi8KKworCWlmIChwcm90b3R5cGVfYmlkeCA+PSAwKSB7 CisJCURVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEVfSU5JVF9JTkNSRUYodGhyLCBoLCB0aHItPmJ1 aWx0aW5zW3Byb3RvdHlwZV9iaWR4XSk7CisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVChwcm90b3R5 cGVfYmlkeCA9PSAtMSk7CisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0 aHItPmhlYXAsIGgpID09IE5VTEwpOworCX0KKworCXJldHVybiBoOworfQorCitEVUtfSU5URVJO QUwgZHVrX2hvYmplY3QgKmR1a19wdXNoX29iamVjdF9oZWxwZXJfcHJvdG8oZHVrX2h0aHJlYWQg KnRociwgZHVrX3VpbnRfdCBob2JqZWN0X2ZsYWdzX2FuZF9jbGFzcywgZHVrX2hvYmplY3QgKnBy b3RvKSB7CisJZHVrX2hvYmplY3QgKmg7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOwor CisJaCA9IGR1a19wdXNoX29iamVjdF9oZWxwZXIodGhyLCBob2JqZWN0X2ZsYWdzX2FuZF9jbGFz cywgLTEpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlEVUtfSE9CSkVDVF9TRVRfUFJPVE9U WVBFX0lOSVRfSU5DUkVGKHRociwgaCwgcHJvdG8pOworCXJldHVybiBoOworfQorCitEVUtfRVhU RVJOQUwgZHVrX2lkeF90IGR1a19wdXNoX29iamVjdChkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCSh2b2lkKSBkdWtfcHVzaF9vYmplY3RfaGVscGVy KHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VY VEVOU0lCTEUgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZM QUdfRkFTVFJFRlMgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNU X0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX09CSkVDVCksCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0JJRFhfT0JKRUNUX1BST1RPVFlQRSk7CisJcmV0dXJuIGR1 a19nZXRfdG9wX2luZGV4X3Vuc2FmZSh0aHIpOworfQorCitEVUtfRVhURVJOQUwgZHVrX2lkeF90 IGR1a19wdXNoX2FycmF5KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdWludF90IGZsYWdzOwor CWR1a19oYXJyYXkgKm9iajsKKwlkdWtfaWR4X3QgcmV0OworCWR1a190dmFsICp0dl9zbG90Owor CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWZsYWdzID0gRFVLX0hPQkpFQ1RfRkxB R19FWFRFTlNJQkxFIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMgfAorCSAg ICAgICAgRFVLX0hPQkpFQ1RfRkxBR19BUlJBWV9QQVJUIHwKKwkgICAgICAgIERVS19IT0JKRUNU X0ZMQUdfRVhPVElDX0FSUkFZIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdT KERVS19IT0JKRUNUX0NMQVNTX0FSUkFZKTsKKworCW9iaiA9IGR1a19oYXJyYXlfYWxsb2ModGhy LCBmbGFncyk7CisJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisKKwlEVUtfSE9CSkVDVF9TRVRf UFJPVE9UWVBFX0lOSVRfSU5DUkVGKHRociwgKGR1a19ob2JqZWN0ICopIG9iaiwgdGhyLT5idWls dGluc1tEVUtfQklEWF9BUlJBWV9QUk9UT1RZUEVdKTsKKworCXR2X3Nsb3QgPSB0aHItPnZhbHN0 YWNrX3RvcDsKKwlEVUtfVFZBTF9TRVRfT0JKRUNUKHR2X3Nsb3QsIChkdWtfaG9iamVjdCAqKSBv YmopOworCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIG9iaik7ICAvKiBYWFg6IGNvdWxkIHByZWFs bG9jYXRlIHdpdGggcmVmY291bnQgPSAxICovCisJcmV0ID0gKGR1a19pZHhfdCkgKHRoci0+dmFs c3RhY2tfdG9wIC0gdGhyLT52YWxzdGFja19ib3R0b20pOworCXRoci0+dmFsc3RhY2tfdG9wKys7 CisKKwlEVUtfQVNTRVJUKG9iai0+bGVuZ3RoID09IDApOyAgLyogQXJyYXkgLmxlbmd0aCBzdGFy dHMgYXQgemVyby4gKi8KKwlyZXR1cm4gcmV0OworfQorCitEVUtfSU5URVJOQUwgZHVrX2hhcnJh eSAqZHVrX3B1c2hfaGFycmF5KGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiBYWFg6IEFQSSBjYWxs IGNvdWxkIGRvIHRoaXMgZGlyZWN0bHksIGNhc3QgdG8gdm9pZCBpbiBBUEkgbWFjcm8uICovCisJ ZHVrX2hhcnJheSAqYTsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwkodm9pZCkg ZHVrX3B1c2hfYXJyYXkodGhyKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX09CSkVDVCh0aHIt PnZhbHN0YWNrX3RvcCAtIDEpKTsKKwlhID0gKGR1a19oYXJyYXkgKikgRFVLX1RWQUxfR0VUX09C SkVDVCh0aHItPnZhbHN0YWNrX3RvcCAtIDEpOworCURVS19BU1NFUlQoYSAhPSBOVUxMKTsKKwly ZXR1cm4gYTsKK30KKworLyogUHVzaCBhIGR1a19oYXJyYXkgd2l0aCBwcmVhbGxvY2F0ZWQgc2l6 ZSAoLmxlbmd0aCBhbHNvIHNldCB0byBtYXRjaCBzaXplKS4KKyAqIENhbGxlciBtYXkgdGhlbiBw b3B1bGF0ZSBhcnJheSBwYXJ0IG9mIHRoZSBkdWtfaGFycmF5IGRpcmVjdGx5LgorICovCitEVUtf SU5URVJOQUwgZHVrX2hhcnJheSAqZHVrX3B1c2hfaGFycmF5X3dpdGhfc2l6ZShkdWtfaHRocmVh ZCAqdGhyLCBkdWtfdWludDMyX3Qgc2l6ZSkgeworCWR1a19oYXJyYXkgKmE7CisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJYSA9IGR1a19wdXNoX2hhcnJheSh0aHIpOworCisJZHVr X2hvYmplY3RfcmVhbGxvY19wcm9wcyh0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAo ZHVrX2hvYmplY3QgKikgYSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisJICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK KwkgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCWEtPmxlbmd0aCA9IHNpemU7CisJcmV0 dXJuIGE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfdHZhbCAqZHVrX3B1c2hfaGFycmF5X3dpdGhf c2l6ZV9vdXRwdHIoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQzMl90IHNpemUpIHsKKwlkdWtf aGFycmF5ICphOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWEgPSBkdWtfcHVz aF9oYXJyYXlfd2l0aF9zaXplKHRociwgc2l6ZSk7CisJRFVLX0FTU0VSVChhICE9IE5VTEwpOwor CXJldHVybiBEVUtfSE9CSkVDVF9BX0dFVF9CQVNFKHRoci0+aGVhcCwgKGR1a19ob2JqZWN0ICop IGEpOworfQorCitEVUtfRVhURVJOQUwgZHVrX2lkeF90IGR1a19wdXNoX3RocmVhZF9yYXcoZHVr X2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBmbGFncykgeworCWR1a19odGhyZWFkICpvYmo7CisJ ZHVrX2lkeF90IHJldDsKKwlkdWtfdHZhbCAqdHZfc2xvdDsKKworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisKKwlvYmogPSBkdWtfaHRocmVhZF9h bGxvYyh0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRF TlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19G TEFHUyhEVUtfSE9CSkVDVF9DTEFTU19USFJFQUQpKTsKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxM KTsKKwlvYmotPnN0YXRlID0gRFVLX0hUSFJFQURfU1RBVEVfSU5BQ1RJVkU7CisjaWYgZGVmaW5l ZChEVUtfVVNFX1JPTV9TVFJJTkdTKQorCS8qIE5vdGhpbmcgdG8gaW5pdGlhbGl6ZSwgc3Ryc1td IGlzIGluIFJPTS4gKi8KKyNlbHNlCisjaWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQVFIxNikKKwlv YmotPnN0cnMxNiA9IHRoci0+c3RyczE2OworI2Vsc2UKKwlvYmotPnN0cnMgPSB0aHItPnN0cnM7 CisjZW5kaWYKKyNlbmRpZgorCURVS19EREQoRFVLX0RERFBSSU5UKCJjcmVhdGVkIHRocmVhZCBv YmplY3Qgd2l0aCBmbGFnczogMHglMDhseCIsICh1bnNpZ25lZCBsb25nKSBvYmotPm9iai5oZHIu aF9mbGFncykpOworCisJLyogbWFrZSB0aGUgbmV3IHRocmVhZCByZWFjaGFibGUgKi8KKwl0dl9z bG90ID0gdGhyLT52YWxzdGFja190b3A7CisJRFVLX1RWQUxfU0VUX09CSkVDVCh0dl9zbG90LCAo ZHVrX2hvYmplY3QgKikgb2JqKTsKKwlEVUtfSFRIUkVBRF9JTkNSRUYodGhyLCBvYmopOworCXJl dCA9IChkdWtfaWR4X3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9t KTsKKwl0aHItPnZhbHN0YWNrX3RvcCsrOworCisJLyogaW1wb3J0YW50IHRvIGRvIHRoaXMgKmFm dGVyKiBwdXNoaW5nLCB0byBtYWtlIHRoZSB0aHJlYWQgcmVhY2hhYmxlIGZvciBnYyAqLworCWlm IChEVUtfVU5MSUtFTFkoIWR1a19odGhyZWFkX2luaXRfc3RhY2tzKHRoci0+aGVhcCwgb2JqKSkp IHsKKwkJRFVLX0VSUk9SX0FMTE9DX0ZBSUxFRCh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0 dXJuIDA7KTsKKwl9CisKKwkvKiBpbml0aWFsaXplIGJ1aWx0LWlucyAtIGVpdGhlciBieSBjb3B5 aW5nIG9yIGNyZWF0aW5nIG5ldyBvbmVzICovCisJaWYgKGZsYWdzICYgRFVLX1RIUkVBRF9ORVdf R0xPQkFMX0VOVikgeworCQlkdWtfaHRocmVhZF9jcmVhdGVfYnVpbHRpbl9vYmplY3RzKG9iaik7 CisJfSBlbHNlIHsKKwkJZHVrX2h0aHJlYWRfY29weV9idWlsdGluX29iamVjdHModGhyLCBvYmop OworCX0KKworCS8qIGRlZmF1bHQgcHJvdG90eXBlICovCisJRFVLX0hPQkpFQ1RfU0VUX1BST1RP VFlQRV9JTklUX0lOQ1JFRih0aHIsIChkdWtfaG9iamVjdCAqKSBvYmosIG9iai0+YnVpbHRpbnNb RFVLX0JJRFhfVEhSRUFEX1BST1RPVFlQRV0pOworCisJLyogSW5pdGlhbCBzdGFjayBzaXplIHNh dGlzZmllcyB0aGUgc3RhY2sgc2xhY2sgY29uc3RyYWludHMgc28gdGhlcmUKKwkgKiBpcyBubyBu ZWVkIHRvIHJlcXVpcmUgc3RhY2sgaGVyZS4KKwkgKi8KKwlEVUtfQVNTRVJUKERVS19WQUxTVEFD S19JTklUSUFMX1NJWkUgPj0KKwkgICAgICAgICAgIERVS19WQUxTVEFDS19BUElfRU5UUllfTUlO SU1VTSArIERVS19WQUxTVEFDS19JTlRFUk5BTF9FWFRSQSk7CisKKwlyZXR1cm4gcmV0OworfQor CitEVUtfSU5URVJOQUwgZHVrX2hjb21wZnVuYyAqZHVrX3B1c2hfaGNvbXBmdW5jKGR1a19odGhy ZWFkICp0aHIpIHsKKwlkdWtfaGNvbXBmdW5jICpvYmo7CisJZHVrX3R2YWwgKnR2X3Nsb3Q7CisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX19DSEVDS19TUEFDRSgpOworCisJ LyogVGVtcGxhdGUgZnVuY3Rpb25zIGFyZSBub3Qgc3RyaWN0bHkgY29uc3RydWN0YWJsZSAodGhl eSBkb24ndAorCSAqIGhhdmUgYSAicHJvdG90eXBlIiBwcm9wZXJ0eSBmb3IgaW5zdGFuY2UpLCBz byBsZWF2ZSB0aGUKKwkgKiBEVUtfSE9CSkVDVF9GTEFHX0NPTlNSVUNUQUJMRSBmbGFnIGNsZWFy ZWQgaGVyZS4KKwkgKi8KKworCW9iaiA9IGR1a19oY29tcGZ1bmNfYWxsb2ModGhyLAorCSAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQ0FMTEFCTEUgfAorCSAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19DT01QRlVOQyB8CisJICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVD VF9DTEFTU19GVU5DVElPTikpOworCWlmIChEVUtfVU5MSUtFTFkob2JqID09IE5VTEwpKSB7CisJ CURVS19FUlJPUl9BTExPQ19GQUlMRUQodGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiBO VUxMOyk7CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoImNyZWF0ZWQgY29tcGlsZWQgZnVu Y3Rpb24gb2JqZWN0IHdpdGggZmxhZ3M6IDB4JTA4bHgiLCAodW5zaWduZWQgbG9uZykgb2JqLT5v YmouaGRyLmhfZmxhZ3MpKTsKKworCXR2X3Nsb3QgPSB0aHItPnZhbHN0YWNrX3RvcDsKKwlEVUtf VFZBTF9TRVRfT0JKRUNUKHR2X3Nsb3QsIChkdWtfaG9iamVjdCAqKSBvYmopOworCURVS19IT0JK RUNUX0lOQ1JFRih0aHIsIG9iaik7CisJdGhyLT52YWxzdGFja190b3ArKzsKKworCS8qIGRlZmF1 bHQgcHJvdG90eXBlICovCisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRo ci0+aGVhcCwgKGR1a19ob2JqZWN0ICopIG9iaikgPT0gTlVMTCk7CisJRFVLX0hPQkpFQ1RfU0VU X1BST1RPVFlQRV9JTklUX0lOQ1JFRih0aHIsIChkdWtfaG9iamVjdCAqKSBvYmosIHRoci0+YnVp bHRpbnNbRFVLX0JJRFhfRlVOQ1RJT05fUFJPVE9UWVBFXSk7CisKKwlyZXR1cm4gb2JqOworfQor CitEVUtfSU5URVJOQUwgZHVrX2hib3VuZGZ1bmMgKmR1a19wdXNoX2hib3VuZGZ1bmMoZHVrX2h0 aHJlYWQgKnRocikgeworCWR1a19oYm91bmRmdW5jICpvYmo7CisJZHVrX3R2YWwgKnR2X3Nsb3Q7 CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX19DSEVDS19TUEFDRSgpOwor CW9iaiA9IGR1a19oYm91bmRmdW5jX2FsbG9jKHRoci0+aGVhcCwKKwkgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgICAgICAg ICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQk9VTkRGVU5DIHwKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0NPTlNUUlVDVEFCTEUgfAorCSAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQ0FMTEFCTEUgfAorCSAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNU X0NMQVNTX0ZVTkNUSU9OKSk7CisJaWYgKCFvYmopIHsKKwkJRFVLX0VSUk9SX0FMTE9DX0ZBSUxF RCh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKKwl9CisKKwl0dl9zbG90 ID0gdGhyLT52YWxzdGFja190b3ArKzsKKwlEVUtfVFZBTF9TRVRfT0JKRUNUKHR2X3Nsb3QsIChk dWtfaG9iamVjdCAqKSBvYmopOworCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIG9iaik7CisKKwkv KiBQcm90b3R5cGUgaXMgbGVmdCBhcyBOVUxMIGJlY2F1c2UgdGhlIGNhbGxlciBhbHdheXMgc2V0 cyBpdCAoYW5kCisJICogaXQgZGVwZW5kcyBvbiB0aGUgdGFyZ2V0IGZ1bmN0aW9uKS4KKwkgKi8K KwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hv YmplY3QgKikgb2JqKSA9PSBOVUxMKTsKKworCXJldHVybiBvYmo7Cit9CisKK0RVS19MT0NBTCBk dWtfaWR4X3QgZHVrX19wdXNoX2NfZnVuY3Rpb25fcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19j X2Z1bmN0aW9uIGZ1bmMsIGR1a19pZHhfdCBuYXJncywgZHVrX3VpbnRfdCBmbGFncywgZHVrX3Nt YWxsX3VpbnRfdCBwcm90b19iaWR4KSB7CisJZHVrX2huYXRmdW5jICpvYmo7CisJZHVrX2lkeF90 IHJldDsKKwlkdWtfdHZhbCAqdHZfc2xvdDsKKwlkdWtfaW50MTZfdCBmdW5jX25hcmdzOworCisJ RFVLX0FTU0VSVF9DVFhfVkFMSUQodGhyKTsKKworCURVS19fQ0hFQ0tfU1BBQ0UoKTsKKworCWlm IChEVUtfVU5MSUtFTFkoZnVuYyA9PSBOVUxMKSkgeworCQlnb3RvIGFwaV9lcnJvcjsKKwl9CisJ aWYgKG5hcmdzID49IDAgJiYgbmFyZ3MgPCBEVUtfSE5BVEZVTkNfTkFSR1NfTUFYKSB7CisJCWZ1 bmNfbmFyZ3MgPSAoZHVrX2ludDE2X3QpIG5hcmdzOworCX0gZWxzZSBpZiAobmFyZ3MgPT0gRFVL X1ZBUkFSR1MpIHsKKwkJZnVuY19uYXJncyA9IERVS19ITkFURlVOQ19OQVJHU19WQVJBUkdTOwor CX0gZWxzZSB7CisJCWdvdG8gYXBpX2Vycm9yOworCX0KKworCW9iaiA9IGR1a19obmF0ZnVuY19h bGxvYyh0aHIsIGZsYWdzKTsKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKworCW9iai0+ZnVu YyA9IGZ1bmM7CisJb2JqLT5uYXJncyA9IGZ1bmNfbmFyZ3M7CisKKwlEVUtfREREKERVS19ERERQ UklOVCgiY3JlYXRlZCBuYXRpdmUgZnVuY3Rpb24gb2JqZWN0IHdpdGggZmxhZ3M6IDB4JTA4bHgs IG5hcmdzPSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIG9iai0+ b2JqLmhkci5oX2ZsYWdzLCAobG9uZykgb2JqLT5uYXJncykpOworCisJdHZfc2xvdCA9IHRoci0+ dmFsc3RhY2tfdG9wOworCURVS19UVkFMX1NFVF9PQkpFQ1QodHZfc2xvdCwgKGR1a19ob2JqZWN0 ICopIG9iaik7CisJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgb2JqKTsKKwlyZXQgPSAoZHVrX2lk eF90KSAodGhyLT52YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJdGhyLT52 YWxzdGFja190b3ArKzsKKworCURVS19BU1NFUlRfQklEWF9WQUxJRChwcm90b19iaWR4KTsKKwlE VUtfSE9CSkVDVF9TRVRfUFJPVE9UWVBFX0lOSVRfSU5DUkVGKHRociwgKGR1a19ob2JqZWN0ICop IG9iaiwgdGhyLT5idWlsdGluc1twcm90b19iaWR4XSk7CisJcmV0dXJuIHJldDsKKworIGFwaV9l cnJvcjoKKwlEVUtfRVJST1JfVFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuIDA7KTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19pZHhfdCBkdWtfcHVzaF9jX2Z1 bmN0aW9uKGR1a19odGhyZWFkICp0aHIsIGR1a19jX2Z1bmN0aW9uIGZ1bmMsIGR1a19pbnRfdCBu YXJncykgeworCWR1a191aW50X3QgZmxhZ3M7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCisJZmxhZ3MgPSBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgRFVL X0hPQkpFQ1RfRkxBR19DT05TVFJVQ1RBQkxFIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdf Q0FMTEFCTEUgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUyB8CisJICAgICAg ICBEVUtfSE9CSkVDVF9GTEFHX05BVEZVTkMgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19O RVdFTlYgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19TVFJJQ1QgfAorCSAgICAgICAgRFVL X0hPQkpFQ1RfRkxBR19OT1RBSUwgfAorCSAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxB R1MoRFVLX0hPQkpFQ1RfQ0xBU1NfRlVOQ1RJT04pOworCisJLyogRGVmYXVsdCBwcm90b3R5cGUg aXMgYSBEdWt0YXBlIHNwZWNpZmljICVOYXRpdmVGdW5jdGlvblByb3RvdHlwZSUKKwkgKiB3aGlj aCBwcm92aWRlcyAubGVuZ3RoIGFuZCAubmFtZSBnZXR0ZXJzLgorCSAqLworCXJldHVybiBkdWtf X3B1c2hfY19mdW5jdGlvbl9yYXcodGhyLCBmdW5jLCBuYXJncywgZmxhZ3MsIERVS19CSURYX05B VElWRV9GVU5DVElPTl9QUk9UT1RZUEUpOworfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcHVz aF9jX2Z1bmN0aW9uX2J1aWx0aW4oZHVrX2h0aHJlYWQgKnRociwgZHVrX2NfZnVuY3Rpb24gZnVu YywgZHVrX2ludF90IG5hcmdzKSB7CisJZHVrX3VpbnRfdCBmbGFnczsKKworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisKKwlmbGFncyA9IERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8 CisJICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0NPTlNUUlVDVEFCTEUgfAorCSAgICAgICAgRFVL X0hPQkpFQ1RfRkxBR19DQUxMQUJMRSB8CisJICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RS RUZTIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfTkFURlVOQyB8CisJICAgICAgICBEVUtf SE9CSkVDVF9GTEFHX05FV0VOViB8CisJICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX1NUUklDVCB8 CisJICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX05PVEFJTCB8CisJICAgICAgICBEVUtfSE9CSkVD VF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19GVU5DVElPTik7CisKKwkvKiBNdXN0 IHVzZSBGdW5jdGlvbi5wcm90b3R5cGUgZm9yIHN0YW5kYXJkIGJ1aWx0LWluIGZ1bmN0aW9ucy4g Ki8KKwkodm9pZCkgZHVrX19wdXNoX2NfZnVuY3Rpb25fcmF3KHRociwgZnVuYywgbmFyZ3MsIGZs YWdzLCBEVUtfQklEWF9GVU5DVElPTl9QUk9UT1RZUEUpOworfQorCitEVUtfSU5URVJOQUwgdm9p ZCBkdWtfcHVzaF9jX2Z1bmN0aW9uX2J1aWx0aW5fbm9jb25zdHJ1Y3QoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2NfZnVuY3Rpb24gZnVuYywgZHVrX2ludF90IG5hcmdzKSB7CisJZHVrX3VpbnRfdCBm bGFnczsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlmbGFncyA9IERVS19IT0JK RUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0NBTExBQkxF IHwKKwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMgfAorCSAgICAgICAgRFVLX0hP QkpFQ1RfRkxBR19OQVRGVU5DIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfTkVXRU5WIHwK KwkgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfU1RSSUNUIHwKKwkgICAgICAgIERVS19IT0JKRUNU X0ZMQUdfTk9UQUlMIHwKKwkgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19I T0JKRUNUX0NMQVNTX0ZVTkNUSU9OKTsKKworCS8qIE11c3QgdXNlIEZ1bmN0aW9uLnByb3RvdHlw ZSBmb3Igc3RhbmRhcmQgYnVpbHQtaW4gZnVuY3Rpb25zLiAqLworCSh2b2lkKSBkdWtfX3B1c2hf Y19mdW5jdGlvbl9yYXcodGhyLCBmdW5jLCBuYXJncywgZmxhZ3MsIERVS19CSURYX0ZVTkNUSU9O X1BST1RPVFlQRSk7Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfaWR4X3QgZHVrX3B1c2hfY19saWdo dGZ1bmMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2NfZnVuY3Rpb24gZnVuYywgZHVrX2lkeF90IG5h cmdzLCBkdWtfaWR4X3QgbGVuZ3RoLCBkdWtfaW50X3QgbWFnaWMpIHsKKwlkdWtfc21hbGxfdWlu dF90IGxmX2ZsYWdzOworCWR1a190dmFsICp0dl9zbG90OworCisJRFVLX0FTU0VSVF9BUElfRU5U UlkodGhyKTsKKworCURVS19fQ0hFQ0tfU1BBQ0UoKTsKKworCWlmIChuYXJncyA+PSBEVUtfTEZV TkNfTkFSR1NfTUlOICYmIG5hcmdzIDw9IERVS19MRlVOQ19OQVJHU19NQVgpIHsKKwkJLyogYXMg aXMgKi8KKwl9IGVsc2UgaWYgKG5hcmdzID09IERVS19WQVJBUkdTKSB7CisJCW5hcmdzID0gRFVL X0xGVU5DX05BUkdTX1ZBUkFSR1M7CisJfSBlbHNlIHsKKwkJZ290byBhcGlfZXJyb3I7CisJfQor CWlmIChEVUtfVU5MSUtFTFkoIShsZW5ndGggPj0gRFVLX0xGVU5DX0xFTkdUSF9NSU4gJiYgbGVu Z3RoIDw9IERVS19MRlVOQ19MRU5HVEhfTUFYKSkpIHsKKwkJZ290byBhcGlfZXJyb3I7CisJfQor CWlmIChEVUtfVU5MSUtFTFkoIShtYWdpYyA+PSBEVUtfTEZVTkNfTUFHSUNfTUlOICYmIG1hZ2lj IDw9IERVS19MRlVOQ19NQUdJQ19NQVgpKSkgeworCQlnb3RvIGFwaV9lcnJvcjsKKwl9CisKKwls Zl9mbGFncyA9IERVS19MRlVOQ19GTEFHU19QQUNLKChkdWtfc21hbGxfaW50X3QpIG1hZ2ljLCAo ZHVrX3NtYWxsX3VpbnRfdCkgbGVuZ3RoLCAoZHVrX3NtYWxsX3VpbnRfdCkgbmFyZ3MpOworCXR2 X3Nsb3QgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVU5E RUZJTkVEKHR2X3Nsb3QpKTsKKwlEVUtfVFZBTF9TRVRfTElHSFRGVU5DKHR2X3Nsb3QsIGZ1bmMs IGxmX2ZsYWdzKTsKKwlEVUtfQVNTRVJUKHR2X3Nsb3QgPj0gdGhyLT52YWxzdGFja19ib3R0b20p OworCXJldHVybiAoZHVrX2lkeF90KSAodHZfc2xvdCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKTsK KworIGFwaV9lcnJvcjoKKwlEVUtfRVJST1JfVFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwlEVUtf V09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJP QkpFQ1RfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfaGJ1Zm9iaiAqZHVrX3B1c2hfYnVmb2Jq X3JhdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3NfYW5kX2NsYXNz LCBkdWtfc21hbGxfaW50X3QgcHJvdG90eXBlX2JpZHgpIHsKKwlkdWtfaGJ1Zm9iaiAqb2JqOwor CWR1a190dmFsICp0dl9zbG90OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtf QVNTRVJUKHByb3RvdHlwZV9iaWR4ID49IDApOworCisJRFVLX19DSEVDS19TUEFDRSgpOworCisJ b2JqID0gZHVrX2hidWZvYmpfYWxsb2ModGhyLCBob2JqZWN0X2ZsYWdzX2FuZF9jbGFzcyk7CisJ RFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisKKwlEVUtfSE9CSkVDVF9TRVRfUFJPVE9UWVBFX0lO SVRfSU5DUkVGKHRociwgKGR1a19ob2JqZWN0ICopIG9iaiwgdGhyLT5idWlsdGluc1twcm90b3R5 cGVfYmlkeF0pOworCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChvYmopOworCisJdHZfc2xvdCA9 IHRoci0+dmFsc3RhY2tfdG9wOworCURVS19UVkFMX1NFVF9PQkpFQ1QodHZfc2xvdCwgKGR1a19o b2JqZWN0ICopIG9iaik7CisJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgb2JqKTsKKwl0aHItPnZh bHN0YWNrX3RvcCsrOworCisJcmV0dXJuIG9iajsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZG RVJPQkpFQ1RfU1VQUE9SVCAqLworCisvKiBYWFg6IFRoZXJlJ3MgcXVpdGUgYSBiaXQgb2Ygb3Zl cmxhcCB3aXRoIGJ1ZmZlciBjcmVhdGlvbiBoYW5kbGluZyBpbgorICogZHVrX2JpX2J1ZmZlci5j LiAgTG9vayBmb3Igb3ZlcmxhcCBhbmQgcmVmYWN0b3IuCisgKi8KKyNpZiBkZWZpbmVkKERVS19V U0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisjZGVmaW5lIERVS19fUEFDS19BUkdTKGNsYXNzbnVt LHByb3RvYmlkeCxlbGVtdHlwZSxlbGVtc2hpZnQsaXN0eXBlZGFycmF5KSBcCisJKCgoY2xhc3Nu dW0pIDw8IDI0KSB8ICgocHJvdG9iaWR4KSA8PCAxNikgfCAoKGVsZW10eXBlKSA8PCA4KSB8ICgo ZWxlbXNoaWZ0KSA8PCA0KSB8IChpc3R5cGVkYXJyYXkpKQorCitzdGF0aWMgY29uc3QgZHVrX3Vp bnQzMl90IGR1a19fYnVmb2JqX2ZsYWdzX2xvb2t1cFtdID0geworCS8qIE5vZGUuanMgQnVmZmVy cyBhcmUgVWludDhBcnJheSBpbnN0YW5jZXMgd2hpY2ggaW5oZXJpdCBmcm9tIEJ1ZmZlci5wcm90 b3R5cGUuICovCisJRFVLX19QQUNLX0FSR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfQVJSQVlCVUZGRVIs ICAgICAgIERVS19CSURYX0FSUkFZQlVGRkVSX1BST1RPVFlQRSwgICAgICAgRFVLX0hCVUZPQkpf RUxFTV9VSU5UOCwgICAgICAgIDAsIDApLCAgLyogRFVLX0JVRk9CSl9BUlJBWUJVRkZFUiAqLwor CURVS19fUEFDS19BUkdTKERVS19IT0JKRUNUX0NMQVNTX1VJTlQ4QVJSQVksICAgICAgICBEVUtf QklEWF9OT0RFSlNfQlVGRkVSX1BST1RPVFlQRSwgICAgIERVS19IQlVGT0JKX0VMRU1fVUlOVDgs ICAgICAgICAwLCAxKSwgIC8qIERVS19CVUZPQkpfTk9ERUpTX0JVRkZFUiAqLworCURVS19fUEFD S19BUkdTKERVS19IT0JKRUNUX0NMQVNTX0RBVEFWSUVXLCAgICAgICAgICBEVUtfQklEWF9EQVRB VklFV19QUk9UT1RZUEUsICAgICAgICAgIERVS19IQlVGT0JKX0VMRU1fVUlOVDgsICAgICAgICAw LCAwKSwgIC8qIERVS19CVUZPQkpfREFUQVZJRVcgKi8KKwlEVUtfX1BBQ0tfQVJHUyhEVUtfSE9C SkVDVF9DTEFTU19JTlQ4QVJSQVksICAgICAgICAgRFVLX0JJRFhfSU5UOEFSUkFZX1BST1RPVFlQ RSwgICAgICAgICBEVUtfSEJVRk9CSl9FTEVNX0lOVDgsICAgICAgICAgMCwgMSksICAvKiBEVUtf QlVGT0JKX0lOVDhBUlJBWSAqLworCURVS19fUEFDS19BUkdTKERVS19IT0JKRUNUX0NMQVNTX1VJ TlQ4QVJSQVksICAgICAgICBEVUtfQklEWF9VSU5UOEFSUkFZX1BST1RPVFlQRSwgICAgICAgIERV S19IQlVGT0JKX0VMRU1fVUlOVDgsICAgICAgICAwLCAxKSwgIC8qIERVS19CVUZPQkpfVUlOVDhB UlJBWSAqLworCURVS19fUEFDS19BUkdTKERVS19IT0JKRUNUX0NMQVNTX1VJTlQ4Q0xBTVBFREFS UkFZLCBEVUtfQklEWF9VSU5UOENMQU1QRURBUlJBWV9QUk9UT1RZUEUsIERVS19IQlVGT0JKX0VM RU1fVUlOVDhDTEFNUEVELCAwLCAxKSwgIC8qIERVS19CVUZPQkpfVUlOVDhDTEFNUEVEQVJSQVkg Ki8KKwlEVUtfX1BBQ0tfQVJHUyhEVUtfSE9CSkVDVF9DTEFTU19JTlQxNkFSUkFZLCAgICAgICAg RFVLX0JJRFhfSU5UMTZBUlJBWV9QUk9UT1RZUEUsICAgICAgICBEVUtfSEJVRk9CSl9FTEVNX0lO VDE2LCAgICAgICAgMSwgMSksICAvKiBEVUtfQlVGT0JKX0lOVDE2QVJSQVkgKi8KKwlEVUtfX1BB Q0tfQVJHUyhEVUtfSE9CSkVDVF9DTEFTU19VSU5UMTZBUlJBWSwgICAgICAgRFVLX0JJRFhfVUlO VDE2QVJSQVlfUFJPVE9UWVBFLCAgICAgICBEVUtfSEJVRk9CSl9FTEVNX1VJTlQxNiwgICAgICAg MSwgMSksICAvKiBEVUtfQlVGT0JKX1VJTlQxNkFSUkFZICovCisJRFVLX19QQUNLX0FSR1MoRFVL X0hPQkpFQ1RfQ0xBU1NfSU5UMzJBUlJBWSwgICAgICAgIERVS19CSURYX0lOVDMyQVJSQVlfUFJP VE9UWVBFLCAgICAgICAgRFVLX0hCVUZPQkpfRUxFTV9JTlQzMiwgICAgICAgIDIsIDEpLCAgLyog RFVLX0JVRk9CSl9JTlQzMkFSUkFZICovCisJRFVLX19QQUNLX0FSR1MoRFVLX0hPQkpFQ1RfQ0xB U1NfVUlOVDMyQVJSQVksICAgICAgIERVS19CSURYX1VJTlQzMkFSUkFZX1BST1RPVFlQRSwgICAg ICAgRFVLX0hCVUZPQkpfRUxFTV9VSU5UMzIsICAgICAgIDIsIDEpLCAgLyogRFVLX0JVRk9CSl9V SU5UMzJBUlJBWSAqLworCURVS19fUEFDS19BUkdTKERVS19IT0JKRUNUX0NMQVNTX0ZMT0FUMzJB UlJBWSwgICAgICBEVUtfQklEWF9GTE9BVDMyQVJSQVlfUFJPVE9UWVBFLCAgICAgIERVS19IQlVG T0JKX0VMRU1fRkxPQVQzMiwgICAgICAyLCAxKSwgIC8qIERVS19CVUZPQkpfRkxPQVQzMkFSUkFZ ICovCisJRFVLX19QQUNLX0FSR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfRkxPQVQ2NEFSUkFZLCAgICAg IERVS19CSURYX0ZMT0FUNjRBUlJBWV9QUk9UT1RZUEUsICAgICAgRFVLX0hCVUZPQkpfRUxFTV9G TE9BVDY0LCAgICAgIDMsIDEpICAgLyogRFVLX0JVRk9CSl9GTE9BVDY0QVJSQVkgKi8KK307Cisj ZW5kaWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19wdXNo X2J1ZmZlcl9vYmplY3QoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeF9idWZmZXIsIGR1 a19zaXplX3QgYnl0ZV9vZmZzZXQsIGR1a19zaXplX3QgYnl0ZV9sZW5ndGgsIGR1a191aW50X3Qg ZmxhZ3MpIHsKKwlkdWtfaGJ1Zm9iaiAqaF9idWZvYmo7CisJZHVrX2hidWZmZXIgKmhfdmFsOwor CWR1a19ob2JqZWN0ICpoX2FycmF5YnVmOworCWR1a191aW50MzJfdCB0bXA7CisJZHVrX3VpbnRf dCBjbGFzc251bTsKKwlkdWtfdWludF90IHByb3RvYmlkeDsKKwlkdWtfdWludF90IGxvb2t1cGlk eDsKKwlkdWtfdWludF90IHVpbnRfb2Zmc2V0LCB1aW50X2xlbmd0aCwgdWludF9hZGRlZDsKKwor CURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwkvKiBUaGUgdW5kZXJseWluZyB0eXBlcyBm b3Igb2Zmc2V0L2xlbmd0aCBpbiBkdWtfaGJ1Zm9iaiBpcworCSAqIGR1a191aW50X3Q7IG1ha2Ug c3VyZSBhcmd1bWVudCB2YWx1ZXMgZml0LgorCSAqLworCXVpbnRfb2Zmc2V0ID0gKGR1a191aW50 X3QpIGJ5dGVfb2Zmc2V0OworCXVpbnRfbGVuZ3RoID0gKGR1a191aW50X3QpIGJ5dGVfbGVuZ3Ro OworCWlmIChzaXplb2YoZHVrX3NpemVfdCkgIT0gc2l6ZW9mKGR1a191aW50X3QpKSB7CisJCWlm IChEVUtfVU5MSUtFTFkoKGR1a19zaXplX3QpIHVpbnRfb2Zmc2V0ICE9IGJ5dGVfb2Zmc2V0IHx8 IChkdWtfc2l6ZV90KSB1aW50X2xlbmd0aCAhPSBieXRlX2xlbmd0aCkpIHsKKwkJCWdvdG8gcmFu Z2VfZXJyb3I7CisJCX0KKwl9CisKKwlEVUtfQVNTRVJUX0RJU0FCTEUoZmxhZ3MgPj0gMCk7ICAv KiBmbGFncyBpcyB1bnNpZ25lZCAqLworCWxvb2t1cGlkeCA9IGZsYWdzOworCWlmIChEVUtfVU5M SUtFTFkobG9va3VwaWR4ID49IHNpemVvZihkdWtfX2J1Zm9ial9mbGFnc19sb29rdXApIC8gc2l6 ZW9mKGR1a191aW50MzJfdCkpKSB7CisJCWdvdG8gYXJnX2Vycm9yOworCX0KKwl0bXAgPSBkdWtf X2J1Zm9ial9mbGFnc19sb29rdXBbbG9va3VwaWR4XTsKKwljbGFzc251bSA9IHRtcCA+PiAyNDsK Kwlwcm90b2JpZHggPSAodG1wID4+IDE2KSAmIDB4ZmY7CisKKwloX2FycmF5YnVmID0gZHVrX2dl dF9ob2JqZWN0KHRociwgaWR4X2J1ZmZlcik7CisJaWYgKGhfYXJyYXlidWYgIT0gTlVMTCAmJiAg LyogYXJndW1lbnQgaXMgYW4gb2JqZWN0ICovCisJICAgIGZsYWdzICE9IERVS19CVUZPQkpfQVJS QVlCVUZGRVIgJiYgIC8qIGNyZWF0aW5nIGEgdmlldyAqLworCSAgICBEVUtfSE9CSkVDVF9HRVRf Q0xBU1NfTlVNQkVSKGhfYXJyYXlidWYpID09IERVS19IT0JKRUNUX0NMQVNTX0FSUkFZQlVGRkVS ICAvKiBhcmd1bWVudCBpcyBBcnJheUJ1ZmZlciAqLykgeworCQlkdWtfdWludF90IHRtcF9vZmZz ZXQ7CisKKwkJRFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKChkdWtfaGJ1Zm9iaiAqKSBoX2FycmF5 YnVmKTsKKwkJaF92YWwgPSAoKGR1a19oYnVmb2JqICopIGhfYXJyYXlidWYpLT5idWY7CisJCWlm IChEVUtfVU5MSUtFTFkoaF92YWwgPT0gTlVMTCkpIHsKKwkJCWdvdG8gYXJnX2Vycm9yOworCQl9 CisKKwkJdG1wX29mZnNldCA9IHVpbnRfb2Zmc2V0ICsgKChkdWtfaGJ1Zm9iaiAqKSBoX2FycmF5 YnVmKS0+b2Zmc2V0OworCQlpZiAoRFVLX1VOTElLRUxZKHRtcF9vZmZzZXQgPCB1aW50X29mZnNl dCkpIHsKKwkJCWdvdG8gcmFuZ2VfZXJyb3I7CisJCX0KKwkJdWludF9vZmZzZXQgPSB0bXBfb2Zm c2V0OworCisJCS8qIE5vdGUgaW50ZW50aW9uYWwgZGlmZmVyZW5jZSB0byBuZXcgVHlwZWRBcnJh eSgpOiB3ZSBhbGxvdworCQkgKiBjYWxsZXIgdG8gY3JlYXRlIGFuIHVuY292ZXJlZCB0eXBlZCBh cnJheSAod2hpY2ggaXMgbWVtb3J5CisJCSAqIHNhZmUpOyBuZXcgVHlwZWRBcnJheSgpIHJlamVj dHMgaXQuCisJCSAqLworCX0gZWxzZSB7CisJCS8qIEhhbmRsZSB1bmV4cGVjdGVkIG9iamVjdCBh cmd1bWVudHMgaGVyZSB0b28sIGZvciBuaWNlIGVycm9yCisJCSAqIG1lc3NhZ2VzLgorCQkgKi8K KwkJaF9hcnJheWJ1ZiA9IE5VTEw7CisJCWhfdmFsID0gZHVrX3JlcXVpcmVfaGJ1ZmZlcih0aHIs IGlkeF9idWZmZXIpOworCX0KKworCS8qIFdyYXAgY2hlY2sgZm9yIG9mZnNldCtsZW5ndGguICov CisJdWludF9hZGRlZCA9IHVpbnRfb2Zmc2V0ICsgdWludF9sZW5ndGg7CisJaWYgKERVS19VTkxJ S0VMWSh1aW50X2FkZGVkIDwgdWludF9vZmZzZXQpKSB7CisJCWdvdG8gcmFuZ2VfZXJyb3I7CisJ fQorCURVS19BU1NFUlQodWludF9hZGRlZCA+PSB1aW50X29mZnNldCAmJiB1aW50X2FkZGVkID49 IHVpbnRfbGVuZ3RoKTsKKworCURVS19BU1NFUlQoaF92YWwgIT0gTlVMTCk7CisKKwloX2J1Zm9i aiA9IGR1a19wdXNoX2J1Zm9ial9yYXcodGhyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0JVRk9CSiB8CisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKGNsYXNzbnVtKSwKKwkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1a19zbWFsbF9pbnRfdCkgcHJvdG9iaWR4KTsK KwlEVUtfQVNTRVJUKGhfYnVmb2JqICE9IE5VTEwpOworCisJaF9idWZvYmotPmJ1ZiA9IGhfdmFs OworCURVS19IQlVGRkVSX0lOQ1JFRih0aHIsIGhfdmFsKTsKKwloX2J1Zm9iai0+YnVmX3Byb3Ag PSBoX2FycmF5YnVmOworCURVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwodGhyLCBoX2FycmF5 YnVmKTsKKwloX2J1Zm9iai0+b2Zmc2V0ID0gdWludF9vZmZzZXQ7CisJaF9idWZvYmotPmxlbmd0 aCA9IHVpbnRfbGVuZ3RoOworCWhfYnVmb2JqLT5zaGlmdCA9ICh0bXAgPj4gNCkgJiAweDBmOwor CWhfYnVmb2JqLT5lbGVtX3R5cGUgPSAodG1wID4+IDgpICYgMHhmZjsKKwloX2J1Zm9iai0+aXNf dHlwZWRhcnJheSA9IHRtcCAmIDB4MGY7CisJRFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhfYnVm b2JqKTsKKworCS8qIFR5cGVkQXJyYXkgdmlld3MgbmVlZCBhbiBhdXRvbWF0aWMgQXJyYXlCdWZm ZXIgd2hpY2ggbXVzdCBiZQorCSAqIHByb3ZpZGVkIGFzIC5idWZmZXIgcHJvcGVydHkgb2YgdGhl IHZpZXcuICBUaGUgQXJyYXlCdWZmZXIgaXMKKwkgKiByZWZlcmVuY2VkIHZpYSBkdWtfaGJ1Zm9i ai0+YnVmX3Byb3AgYW5kIGFuIGluaGVyaXRlZCAuYnVmZmVyCisJICogYWNjZXNzb3IgcmV0dXJu cyBpdC4gIFRoZSBBcnJheUJ1ZmZlciBpcyBjcmVhdGVkIGxhemlseSBvbiBmaXJzdAorCSAqIGFj Y2VzcyBpZiBuZWNlc3Nhcnkgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBtb3JlIGhl cmUuCisJICovCisJcmV0dXJuOworCisgcmFuZ2VfZXJyb3I6CisJRFVLX0VSUk9SX1JBTkdFKHRo ciwgRFVLX1NUUl9JTlZBTElEX0FSR1MpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwor IGFyZ19lcnJvcjoKKwlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfSU5WQUxJRF9BUkdTKTsK KwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisjZWxzZSAgLyogRFVLX1VTRV9CVUZGRVJP QkpFQ1RfU1VQUE9SVCAqLworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3B1c2hfYnVmZmVyX29iamVj dChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4X2J1ZmZlciwgZHVrX3NpemVfdCBieXRl X29mZnNldCwgZHVrX3NpemVfdCBieXRlX2xlbmd0aCwgZHVrX3VpbnRfdCBmbGFncykgeworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX1VOUkVGKGlkeF9idWZmZXIpOworCURVS19V TlJFRihieXRlX29mZnNldCk7CisJRFVLX1VOUkVGKGJ5dGVfbGVuZ3RoKTsKKwlEVUtfVU5SRUYo ZmxhZ3MpOworCURVS19FUlJPUl9VTlNVUFBPUlRFRCh0aHIpOworCURVS19XT19OT1JFVFVSTihy ZXR1cm47KTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLwor CitEVUtfRVhURVJOQUwgZHVrX2lkeF90IGR1a19wdXNoX2Vycm9yX29iamVjdF92YV9yYXcoZHVr X2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBlcnJfY29kZSwgY29uc3QgY2hhciAqZmlsZW5h bWUsIGR1a19pbnRfdCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApIHsKKwlkdWtf aG9iamVjdCAqcHJvdG87CisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJST1JfQ1JFQVRF KQorCWR1a19zbWFsbF91aW50X3QgYXVnbWVudF9mbGFnczsKKyNlbmRpZgorCisJRFVLX0FTU0VS VF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfVU5SRUYo ZmlsZW5hbWUpOworCURVS19VTlJFRihsaW5lKTsKKworCS8qIEVycm9yIGNvZGUgYWxzbyBwYWNr cyBhIHRyYWNlZGF0YSByZWxhdGVkIGZsYWcuICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01F TlRfRVJST1JfQ1JFQVRFKQorCWF1Z21lbnRfZmxhZ3MgPSAwOworCWlmIChlcnJfY29kZSAmIERV S19FUlJDT0RFX0ZMQUdfTk9CTEFNRV9GSUxFTElORSkgeworCQlhdWdtZW50X2ZsYWdzID0gRFVL X0FVR01FTlRfRkxBR19OT0JMQU1FX0ZJTEVMSU5FOworCX0KKyNlbmRpZgorCWVycl9jb2RlID0g ZXJyX2NvZGUgJiAofkRVS19FUlJDT0RFX0ZMQUdfTk9CTEFNRV9GSUxFTElORSk7CisKKwkvKiBl cnJvciBnZXRzIGl0cyAnbmFtZScgZnJvbSB0aGUgcHJvdG90eXBlICovCisJcHJvdG8gPSBkdWtf ZXJyb3JfcHJvdG90eXBlX2Zyb21fY29kZSh0aHIsIGVycl9jb2RlKTsKKwkodm9pZCkgZHVrX3B1 c2hfb2JqZWN0X2hlbHBlcl9wcm90byh0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RSRUZTIHwKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhE VUtfSE9CSkVDVF9DTEFTU19FUlJPUiksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJvdG8pOworCisJLyogLi4uIGFuZCBpdHMgJ21lc3NhZ2UnIGZyb20gYW4gaW5zdGFu Y2UgcHJvcGVydHkgKi8KKwlpZiAoZm10KSB7CisJCWR1a19wdXNoX3ZzcHJpbnRmKHRociwgZm10 LCBhcCk7CisJCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhf TUVTU0FHRSwgRFVLX1BST1BERVNDX0ZMQUdTX1dDKTsKKwl9IGVsc2UgeworCQkvKiBJZiBubyBl eHBsaWNpdCBtZXNzYWdlIGdpdmVuLCBwdXQgZXJyb3IgY29kZSBpbnRvIG1lc3NhZ2UgZmllbGQK KwkJICogKGFzIGEgbnVtYmVyKS4gIFRoaXMgaXMgbm90IGZ1bGx5IGluIGtlZXBpbmcgd2l0aCB0 aGUgRUNNQVNjcmlwdAorCQkgKiBlcnJvciBtb2RlbCBiZWNhdXNlIG1lc3NhZ2VzIGFyZSBzdXBw b3NlZCB0byBiZSBzdHJpbmdzIChFcnJvcgorCQkgKiBjb25zdHJ1Y3RvcnMgdXNlIFRvU3RyaW5n KCkgb24gdGhlaXIgYXJndW1lbnQpLiAgSG93ZXZlciwgaXQncworCQkgKiBwcm9iYWJseSBtb3Jl IHVzZWZ1bCB0aGFuIGhhdmluZyBhIHNlcGFyYXRlICdjb2RlJyBwcm9wZXJ0eS4KKwkJICovCisJ CWR1a19wdXNoX2ludCh0aHIsIGVycl9jb2RlKTsKKwkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hv cnQodGhyLCAtMiwgRFVLX1NUUklEWF9NRVNTQUdFLCBEVUtfUFJPUERFU0NfRkxBR1NfV0MpOwor CX0KKworCS8qIFhYWDogLmNvZGUgPSBlcnJfY29kZSBkaXNhYmxlZCwgbm90IHN1cmUgaWYgdXNl ZnVsICovCisKKwkvKiBDcmVhdGlvbiB0aW1lIGVycm9yIGF1Z21lbnRhdGlvbiAqLworI2lmIGRl ZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VSUk9SX0NSRUFURSkKKwkvKiBmaWxlbmFtZSBtYXkgYmUg TlVMTCBpbiB3aGljaCBjYXNlIGZpbGUvbGluZSBpcyBub3QgcmVjb3JkZWQgKi8KKwlkdWtfZXJy X2F1Z21lbnRfZXJyb3JfY3JlYXRlKHRociwgdGhyLCBmaWxlbmFtZSwgbGluZSwgYXVnbWVudF9m bGFncyk7ICAvKiBtYXkgdGhyb3cgYW4gZXJyb3IgKi8KKyNlbmRpZgorCisJcmV0dXJuIGR1a19n ZXRfdG9wX2luZGV4X3Vuc2FmZSh0aHIpOworfQorCitEVUtfRVhURVJOQUwgZHVrX2lkeF90IGR1 a19wdXNoX2Vycm9yX29iamVjdF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBl cnJfY29kZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lLCBjb25zdCBjaGFy ICpmbXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisJZHVrX2lkeF90IHJldDsKKworCURVS19BU1NF UlRfQVBJX0VOVFJZKHRocik7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSBkdWtfcHVz aF9lcnJvcl9vYmplY3RfdmFfcmF3KHRociwgZXJyX2NvZGUsIGZpbGVuYW1lLCBsaW5lLCBmbXQs IGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CisKKyNpZiAhZGVmaW5lZChEVUtf VVNFX1ZBUklBRElDX01BQ1JPUykKK0RVS19FWFRFUk5BTCBkdWtfaWR4X3QgZHVrX3B1c2hfZXJy b3Jfb2JqZWN0X3N0YXNoKGR1a19odGhyZWFkICp0aHIsIGR1a19lcnJjb2RlX3QgZXJyX2NvZGUs IGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBkdWtfYXBp X2dsb2JhbF9maWxlbmFtZTsKKwlkdWtfaW50X3QgbGluZSA9IGR1a19hcGlfZ2xvYmFsX2xpbmU7 CisJdmFfbGlzdCBhcDsKKwlkdWtfaWR4X3QgcmV0OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKworCWR1a19hcGlfZ2xvYmFsX2ZpbGVuYW1lID0gTlVMTDsKKwlkdWtfYXBpX2dsb2Jh bF9saW5lID0gMDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSBkdWtfcHVzaF9lcnJvcl9v YmplY3RfdmFfcmF3KHRociwgZXJyX2NvZGUsIGZpbGVuYW1lLCBsaW5lLCBmbXQsIGFwKTsKKwl2 YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfVkFSSUFESUNf TUFDUk9TICovCisKK0RVS19FWFRFUk5BTCB2b2lkICpkdWtfcHVzaF9idWZmZXJfcmF3KGR1a19o dGhyZWFkICp0aHIsIGR1a19zaXplX3Qgc2l6ZSwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgewor CWR1a190dmFsICp0dl9zbG90OworCWR1a19oYnVmZmVyICpoOworCXZvaWQgKmJ1Zl9kYXRhOwor CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCURVS19fQ0hFQ0tfU1BBQ0UoKTsKKwor CS8qIENoZWNrIGZvciBtYXhpbXVtIGJ1ZmZlciBsZW5ndGguICovCisJaWYgKERVS19VTkxJS0VM WShzaXplID4gRFVLX0hCVUZGRVJfTUFYX0JZVEVMRU4pKSB7CisJCURVS19FUlJPUl9SQU5HRSh0 aHIsIERVS19TVFJfQlVGRkVSX1RPT19MT05HKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiBO VUxMOyk7CisJfQorCisJaCA9IGR1a19oYnVmZmVyX2FsbG9jKHRoci0+aGVhcCwgc2l6ZSwgZmxh Z3MsICZidWZfZGF0YSk7CisJaWYgKERVS19VTkxJS0VMWShoID09IE5VTEwpKSB7CisJCURVS19F UlJPUl9BTExPQ19GQUlMRUQodGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiBOVUxMOyk7 CisJfQorCisJdHZfc2xvdCA9IHRoci0+dmFsc3RhY2tfdG9wOworCURVS19UVkFMX1NFVF9CVUZG RVIodHZfc2xvdCwgaCk7CisJRFVLX0hCVUZGRVJfSU5DUkVGKHRociwgaCk7CisJdGhyLT52YWxz dGFja190b3ArKzsKKworCXJldHVybiAodm9pZCAqKSBidWZfZGF0YTsKK30KKworRFVLX0lOVEVS TkFMIHZvaWQgKmR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8oZHVrX2h0aHJlYWQgKnRociwg ZHVrX3NpemVfdCBsZW4pIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCXJldHVybiBk dWtfcHVzaF9idWZmZXJfcmF3KHRociwgbGVuLCBEVUtfQlVGX0ZMQUdfTk9aRVJPKTsKK30KKwor RFVLX0lOVEVSTkFMIHZvaWQgKmR1a19wdXNoX2ZpeGVkX2J1ZmZlcl96ZXJvKGR1a19odGhyZWFk ICp0aHIsIGR1a19zaXplX3QgbGVuKSB7CisJdm9pZCAqcHRyOworCisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKworCXB0ciA9IGR1a19wdXNoX2J1ZmZlcl9yYXcodGhyLCBsZW4sIDApOwor CURVS19BU1NFUlQocHRyICE9IE5VTEwpOworI2lmICFkZWZpbmVkKERVS19VU0VfWkVST19CVUZG RVJfREFUQSkKKwkvKiBFUzIwMTUgcmVxdWlyZXMgemVyb2luZyBldmVuIHdoZW4gRFVLX1VTRV9a RVJPX0JVRkZFUl9EQVRBCisJICogaXMgbm90IHNldC4KKwkgKi8KKwlkdWtfbWVtemVybygodm9p ZCAqKSBwdHIsIChzaXplX3QpIGxlbik7CisjZW5kaWYKKwlyZXR1cm4gcHRyOworfQorCisjaWYg ZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKK0RVS19FWFRFUk5BTCBkdWtfaWR4X3QgZHVrX3B1 c2hfcHJveHkoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCBwcm94eV9mbGFncykgeworCWR1 a19ob2JqZWN0ICpoX3RhcmdldDsKKwlkdWtfaG9iamVjdCAqaF9oYW5kbGVyOworCWR1a19ocHJv eHkgKmhfcHJveHk7CisJZHVrX3R2YWwgKnR2X3Nsb3Q7CisJZHVrX3VpbnRfdCBmbGFnczsKKwor CURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX1VOUkVGKHByb3h5X2ZsYWdzKTsKKwor CS8qIERVS19fQ0hFQ0tfU1BBQ0UoKSB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBQcm94eSBpcyB3 cml0dGVuIHRvCisJICogdmFsdWUgc3RhY2sgaW4tcGxhY2UuCisJICovCisjaWYgMAorCURVS19f Q0hFQ0tfU1BBQ0UoKTsKKyNlbmRpZgorCisJLyogUmVqZWN0IGEgcHJveHkgb2JqZWN0IGFzIHRo ZSB0YXJnZXQgYmVjYXVzZSBpdCB3b3VsZCBuZWVkCisJICogc3BlY2lhbCBoYW5kbGluZyBpbiBw cm9wZXJ0eSBsb29rdXBzLiAgKEVTMjAxNSBoYXMgbm8gc3VjaAorCSAqIHJlc3RyaWN0aW9uLikK KwkgKi8KKwloX3RhcmdldCA9IGR1a19yZXF1aXJlX2hvYmplY3RfcHJvbW90ZV9tYXNrKHRociwg LTIsIERVS19UWVBFX01BU0tfTElHSFRGVU5DIHwgRFVLX1RZUEVfTUFTS19CVUZGRVIpOworCURV S19BU1NFUlQoaF90YXJnZXQgIT0gTlVMTCk7CisJaWYgKERVS19IT0JKRUNUX0lTX1BST1hZKGhf dGFyZ2V0KSkgeworCQlnb3RvIGZhaWxfYXJnczsKKwl9CisKKwkvKiBSZWplY3QgYSBwcm94eSBv YmplY3QgYXMgdGhlIGhhbmRsZXIgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZQorCSAqIHBvdGVudGlh bGx5IHVuYm91bmRlZCByZWN1cnNpb24uICAoRVMyMDE1IGhhcyBubyBzdWNoCisJICogcmVzdHJp Y3Rpb24uKQorCSAqCisJICogVGhlcmUncyBsaXR0bGUgcHJhY3RpY2FsIHJlYXNvbiB0byB1c2Ug YSBsaWdodGZ1bmMgb3IgYSBwbGFpbgorCSAqIGJ1ZmZlciBhcyB0aGUgaGFuZGxlciB0YWJsZTog b25lIGNvdWxkIG9ubHkgcHJvdmlkZSB0cmFwcyB2aWEKKwkgKiB0aGVpciBwcm90b3R5cGUgb2Jq ZWN0cyAoRnVuY3Rpb24ucHJvdG90eXBlIGFuZCBBcnJheUJ1ZmZlci5wcm90b3R5cGUpLgorCSAq IEV2ZW4gc28sIGFzIGxpZ2h0ZnVuY3MgYW5kIHBsYWluIGJ1ZmZlcnMgbWltaWMgdGhlaXIgb2Jq ZWN0CisJICogY291bnRlcnBhcnRzLCB0aGV5J3JlIHByb21vdGVkIGFuZCBhY2NlcHRlZCBoZXJl LgorCSAqLworCWhfaGFuZGxlciA9IGR1a19yZXF1aXJlX2hvYmplY3RfcHJvbW90ZV9tYXNrKHRo ciwgLTEsIERVS19UWVBFX01BU0tfTElHSFRGVU5DIHwgRFVLX1RZUEVfTUFTS19CVUZGRVIpOwor CURVS19BU1NFUlQoaF9oYW5kbGVyICE9IE5VTEwpOworCWlmIChEVUtfSE9CSkVDVF9JU19QUk9Y WShoX2hhbmRsZXIpKSB7CisJCWdvdG8gZmFpbF9hcmdzOworCX0KKworCS8qIFhYWDogUHJveHkg b2JqZWN0IGN1cnJlbnRseSBoYXMgbm8gcHJvdG90eXBlLCBzbyBUb1ByaW1pdGl2ZSgpCisJICog Y29lcmNpb24gZmFpbHMgd2hpY2ggaXMgYSBiaXQgY29uZnVzaW5nLgorCSAqLworCisJLyogQ0FM TEFCTEUgYW5kIENPTlNUUlVDVEFCTEUgZmxhZ3MgYXJlIGNvcGllZCBmcm9tIHRoZSAoaW5pdGlh bCkKKwkgKiB0YXJnZXQsIHNlZSBFUzIwMTUgU2VjdGlvbnMgOS41LjE1IGFuZCA5LjUuMTMuCisJ ICovCisJZmxhZ3MgPSBEVUtfSEVBUEhEUl9HRVRfRkxBR1MoKGR1a19oZWFwaGRyICopIGhfdGFy Z2V0KSAmCisJICAgICAgICAoRFVLX0hPQkpFQ1RfRkxBR19DQUxMQUJMRSB8IERVS19IT0JKRUNU X0ZMQUdfQ09OU1RSVUNUQUJMRSk7CisJZmxhZ3MgfD0gRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJ QkxFIHwKKwkgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19QUk9YWU9CSjsKKwlpZiAo ZmxhZ3MgJiBEVUtfSE9CSkVDVF9GTEFHX0NBTExBQkxFKSB7CisJCWZsYWdzIHw9IERVS19IT0JK RUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX0ZVTkNUSU9OKSB8CisJCSAgICAg ICAgIERVS19IT0JKRUNUX0ZMQUdfU1BFQ0lBTF9DQUxMOworCX0gZWxzZSB7CisJCWZsYWdzIHw9 IERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX09CSkVDVCk7CisJ fQorCisJaF9wcm94eSA9IGR1a19ocHJveHlfYWxsb2ModGhyLCBmbGFncyk7CisJRFVLX0FTU0VS VChoX3Byb3h5ICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQ RSh0aHItPmhlYXAsIChkdWtfaG9iamVjdCAqKSBoX3Byb3h5KSA9PSBOVUxMKTsKKworCS8qIElu aXRpYWxpemUgUHJveHkgdGFyZ2V0IGFuZCBoYW5kbGVyIHJlZmVyZW5jZXM7IGF2b2lkIElOQ1JF RgorCSAqIGJ5IHN0ZWFsaW5nIHRoZSB2YWx1ZSBzdGFjayByZWZjb3VudHMgdmlhIGRpcmVjdCB2 YWx1ZSBzdGFjaworCSAqIG1hbmlwdWxhdGlvbi4gIElOQ1JFRiBpcyBuZWVkZWQgZm9yIHRoZSBQ cm94eSBpdHNlbGYgaG93ZXZlci4KKwkgKi8KKwlEVUtfQVNTRVJUKGhfdGFyZ2V0ICE9IE5VTEwp OworCWhfcHJveHktPnRhcmdldCA9IGhfdGFyZ2V0OworCURVS19BU1NFUlQoaF9oYW5kbGVyICE9 IE5VTEwpOworCWhfcHJveHktPmhhbmRsZXIgPSBoX2hhbmRsZXI7CisJRFVLX0FTU0VSVF9IUFJP WFlfVkFMSUQoaF9wcm94eSk7CisKKwlEVUtfQVNTRVJUKGR1a19nZXRfaG9iamVjdCh0aHIsIC0y KSA9PSBoX3RhcmdldCk7CisJRFVLX0FTU0VSVChkdWtfZ2V0X2hvYmplY3QodGhyLCAtMSkgPT0g aF9oYW5kbGVyKTsKKwl0dl9zbG90ID0gdGhyLT52YWxzdGFja190b3AgLSAyOworCURVS19BU1NF UlQodHZfc2xvdCA+PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJRFVLX1RWQUxfU0VUX09CSkVD VCh0dl9zbG90LCAoZHVrX2hvYmplY3QgKikgaF9wcm94eSk7CisJRFVLX0hPQkpFQ1RfSU5DUkVG KHRociwgKGR1a19ob2JqZWN0ICopIGhfcHJveHkpOworCXR2X3Nsb3QrKzsKKwlEVUtfVFZBTF9T RVRfVU5ERUZJTkVEKHR2X3Nsb3QpOyAgLyogWyAuLi4gdGFyZ2V0IGhhbmRsZXIgXSAtPiBbIC4u LiBwcm94eSB1bmRlZmluZWQgXSAqLworCXRoci0+dmFsc3RhY2tfdG9wID0gdHZfc2xvdDsgICAg ICAvKiAtPiBbIC4uLiBwcm94eSBdICovCisKKwlEVUtfREQoRFVLX0REUFJJTlQoImNyZWF0ZWQg UHJveHk6ICUhaVQiLCBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCXJldHVybiAoZHVrX2lk eF90KSAodGhyLT52YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSAtIDEpOworCisg ZmFpbF9hcmdzOgorCURVS19FUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCURVS19XT19O T1JFVFVSTihyZXR1cm4gMDspOworfQorI2Vsc2UgIC8qIERVS19VU0VfRVM2X1BST1hZICovCitE VUtfRVhURVJOQUwgZHVrX2lkeF90IGR1a19wdXNoX3Byb3h5KGR1a19odGhyZWFkICp0aHIsIGR1 a191aW50X3QgcHJveHlfZmxhZ3MpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURV S19VTlJFRihwcm94eV9mbGFncyk7CisJRFVLX0VSUk9SX1VOU1VQUE9SVEVEKHRocik7CisJRFVL X1dPX05PUkVUVVJOKHJldHVybiAwOyk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRVM2X1BST1hZ ICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKK0RVS19MT0NBTCB2b2lkIGR1 a19fdmFsaWRhdGVfcHVzaF9oZWFwcHRyKGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnB0cikgewor CWR1a19oZWFwaGRyICpoOworCWR1a19oZWFwaGRyICpjdXJyOworCWR1a19ib29sX3QgZm91bmQg PSAwOworCisJaCA9IChkdWtfaGVhcGhkciAqKSBwdHI7CisJaWYgKGggPT0gTlVMTCkgeworCQkv KiBBbGxvd2VkLiAqLworCQlyZXR1cm47CisJfQorCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlE VUtfQVNTRVJUKERVS19IRUFQSERSX0hUWVBFX1ZBTElEKGgpKTsKKworCS8qIE9uZSBwYXJ0aWN1 bGFyIHByb2JsZW0gY2FzZSBpcyB3aGVyZSBhbiBvYmplY3QgaGFzIGJlZW4KKwkgKiBxdWV1ZWQg Zm9yIGZpbmFsaXphdGlvbiBidXQgdGhlIGZpbmFsaXplciBoYXNuJ3QgeWV0IGJlZW4KKwkgKiBl eGVjdXRlZC4KKwkgKgorCSAqIENvcm5lciBjYXNlOiB3ZSdyZSBydW5uaW5nIGluIGEgZmluYWxp emVyIGZvciBvYmplY3QgWCwgYW5kCisJICogdXNlciBjb2RlIGNhbGxzIGR1a19wdXNoX2hlYXBw dHIoKSBmb3IgWCBpdHNlbGYuICBJbiB0aGlzCisJICogY2FzZSBYIHdpbGwgYmUgaW4gZmluYWxp emVfbGlzdCwgYW5kIHdlIGNhbiBkZXRlY3QgdGhlIGNhc2UKKwkgKiBieSBzZWVpbmcgdGhhdCBY J3MgRklOQUxJWkVEIGZsYWcgaXMgc2V0ICh3aGljaCBpcyBkb25lIGJlZm9yZQorCSAqIHRoZSBm aW5hbGl6ZXIgc3RhcnRzIGV4ZWN1dGluZykuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJ TkFMSVpFUl9TVVBQT1JUKQorCWZvciAoY3VyciA9IHRoci0+aGVhcC0+ZmluYWxpemVfbGlzdDsK KwkgICAgIGN1cnIgIT0gTlVMTDsKKwkgICAgIGN1cnIgPSBEVUtfSEVBUEhEUl9HRVRfTkVYVCh0 aHItPmhlYXAsIGN1cnIpKSB7CisJCS8qIEZJTkFMSVpBQkxFIGlzIHNldCBmb3IgYWxsIG9iamVj dHMgb24gZmluYWxpemVfbGlzdAorCQkgKiBleGNlcHQgZm9yIGFuIG9iamVjdCBiZWluZyBmaW5h bGl6ZWQgcmlnaHQgbm93LiAgU28KKwkJICogY2FuJ3QgYXNzZXJ0IGhlcmUuCisJCSAqLworI2lm IDAKKwkJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkFCTEUoY3VycikpOworI2Vu ZGlmCisKKwkJaWYgKGN1cnIgPT0gaCkgeworCQkJaWYgKERVS19IRUFQSERSX0hBU19GSU5BTEla RUQoKGR1a19oZWFwaGRyICopIGgpKSB7CisJCQkJLyogT2JqZWN0IGlzIGN1cnJlbnRseSBiZWlu ZyBmaW5hbGl6ZWQuICovCisJCQkJRFVLX0FTU0VSVChmb3VuZCA9PSAwKTsgIC8qIFdvdWxkIGlu ZGljYXRlIGNvcnJ1cHRlZCBsaXN0cy4gKi8KKwkJCQlmb3VuZCA9IDE7CisJCQl9IGVsc2Ugewor CQkJCS8qIE5vdCBiZWluZyBmaW5hbGl6ZWQgYnV0IG9uIGZpbmFsaXplX2xpc3QsCisJCQkJICog YWxsb3dlZCBzaW5jZSBEdWt0YXBlIDIuMS4KKwkJCQkgKi8KKwkJCQlEVUtfQVNTRVJUKGZvdW5k ID09IDApOyAgLyogV291bGQgaW5kaWNhdGUgY29ycnVwdGVkIGxpc3RzLiAqLworCQkJCWZvdW5k ID0gMTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9S VCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwkvKiBCZWNh dXNlIHJlZnplcm9fbGlzdCBpcyBub3cgcHJvY2Vzc2VkIHRvIGNvbXBsZXRpb24gaW5saW5lIHdp dGgKKwkgKiBubyBzaWRlIGVmZmVjdHMsIGl0J3MgYWx3YXlzIGVtcHR5IGhlcmUuCisJICovCisJ RFVLX0FTU0VSVCh0aHItPmhlYXAtPnJlZnplcm9fbGlzdCA9PSBOVUxMKTsKKyNlbmRpZgorCisJ LyogSWYgbm90IHByZXNlbnQgaW4gZmluYWxpemVfbGlzdCAob3IgcmVmemVyb19saXN0KSwgaXQK KwkgKiBtdXN0IGJlIGVpdGhlciBpbiBoZWFwX2FsbG9jYXRlZCBvciB0aGUgc3RyaW5nIHRhYmxl LgorCSAqLworCWlmIChEVUtfSEVBUEhEUl9JU19TVFJJTkcoaCkpIHsKKwkJZHVrX3VpbnQzMl90 IGk7CisJCWR1a19oc3RyaW5nICpzdHI7CisJCWR1a19oZWFwICpoZWFwID0gdGhyLT5oZWFwOwor CisJCURVS19BU1NFUlQoZm91bmQgPT0gMCk7CisJCWZvciAoaSA9IDA7IGkgPCBoZWFwLT5zdF9z aXplOyBpKyspIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BUUkNPTVApCisJCQlzdHIg PSBEVUtfVVNFX0hFQVBQVFJfREVDMTYoKGhlYXApLT5oZWFwX3VkYXRhLCBoZWFwLT5zdHJ0YWJs ZTE2W2ldKTsKKyNlbHNlCisJCQlzdHIgPSBoZWFwLT5zdHJ0YWJsZVtpXTsKKyNlbmRpZgorCQkJ d2hpbGUgKHN0ciAhPSBOVUxMKSB7CisJCQkJaWYgKHN0ciA9PSAoZHVrX2hzdHJpbmcgKikgaCkg eworCQkJCQlEVUtfQVNTRVJUKGZvdW5kID09IDApOyAgLyogV291bGQgaW5kaWNhdGUgY29ycnVw dGVkIGxpc3RzLiAqLworCQkJCQlmb3VuZCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlz dHIgPSBzdHItPmhkci5oX25leHQ7CisJCQl9CisJCX0KKwkJRFVLX0FTU0VSVChmb3VuZCAhPSAw KTsKKwl9IGVsc2UgeworCQlmb3IgKGN1cnIgPSB0aHItPmhlYXAtPmhlYXBfYWxsb2NhdGVkOwor CQkgICAgIGN1cnIgIT0gTlVMTDsKKwkJICAgICBjdXJyID0gRFVLX0hFQVBIRFJfR0VUX05FWFQo dGhyLT5oZWFwLCBjdXJyKSkgeworCQkJaWYgKGN1cnIgPT0gaCkgeworCQkJCURVS19BU1NFUlQo Zm91bmQgPT0gMCk7ICAvKiBXb3VsZCBpbmRpY2F0ZSBjb3JydXB0ZWQgbGlzdHMuICovCisJCQkJ Zm91bmQgPSAxOworCQkJfQorCQl9CisJCURVS19BU1NFUlQoZm91bmQgIT0gMCk7CisJfQorfQor I2VuZGlmICAvKiBEVUtfVVNFX0FTU0VSVElPTlMgKi8KKworRFVLX0VYVEVSTkFMIGR1a19pZHhf dCBkdWtfcHVzaF9oZWFwcHRyKGR1a19odGhyZWFkICp0aHIsIHZvaWQgKnB0cikgeworCWR1a19p ZHhfdCByZXQ7CisJZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCS8qIFJldml2aW5nIGFuIG9iamVjdCB1c2luZyBhIGhlYXAgcG9pbnRlciBpcyBhIGRhbmdl cm91cyBBUEkKKwkgKiBvcGVyYXRpb246IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2Vzbid0IGd1YXJh bnRlZSB0aGF0IHRoZQorCSAqIHBvaW50ZXIgdGFyZ2V0IGlzIGFsd2F5cyByZWFjaGFibGUsIGRp ZmZpY3VsdC10by1kaWFnbm9zZQorCSAqIHByb2JsZW1zIG1heSBlbnN1ZS4gIFRyeSB0byB2YWxp ZGF0ZSB0aGUgJ3B0cicgYXJndW1lbnQgdG8KKwkgKiB0aGUgZXh0ZW50IHBvc3NpYmxlLgorCSAq LworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJZHVrX192YWxpZGF0ZV9wdXNo X2hlYXBwdHIodGhyLCBwdHIpOworI2VuZGlmCisKKwlEVUtfX0NIRUNLX1NQQUNFKCk7CisKKwly ZXQgPSAoZHVrX2lkeF90KSAodGhyLT52YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRv bSk7CisJdHYgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCisJaWYgKHB0ciA9PSBOVUxMKSB7CisJ CURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHR2KSk7CisJCXJldHVybiByZXQ7CisJ fQorCisJRFVLX0FTU0VSVF9IRUFQSERSX1ZBTElEKChkdWtfaGVhcGhkciAqKSBwdHIpOworCisJ LyogSWYgdGhlIGFyZ3VtZW50IGlzIG9uIGZpbmFsaXplX2xpc3QgaXQgaGFzIHRlY2huaWNhbGx5 IGJlZW4KKwkgKiB1bnJlYWNoYWJsZSBiZWZvcmUgZHVrX3B1c2hfaGVhcHB0cigpIGJ1dCBpdCdz IHN0aWxsIHNhZmUgdG8KKwkgKiBwdXNoIGl0LiAgU3RhcnRpbmcgZnJvbSBEdWt0YXBlIDIuMSBh bGxvdyBhcHBsaWNhdGlvbiBjb2RlIHRvCisJICogZG8gc28uICBUaGVyZSBhcmUgdHdvIG1haW4g Y2FzZXM6CisJICoKKwkgKiAgICgxKSBUaGUgb2JqZWN0IGlzIG9uIHRoZSBmaW5hbGl6ZV9saXN0 IGFuZCB3ZSdyZSBjYWxsZWQgYnkKKwkgKiAgICAgICB0aGUgZmluYWxpemVyIGZvciB0aGUgb2Jq ZWN0IGJlaW5nIGZpbmFsaXplZC4gIEluIHRoaXMKKwkgKiAgICAgICBjYXNlIGRvIG5vdGhpbmc6 IGZpbmFsaXplX2xpc3QgaGFuZGxpbmcgd2lsbCBkZWFsIHdpdGgKKwkgKiAgICAgICB0aGUgb2Jq ZWN0IHF1ZXVlaW5nLiAgVGhpcyBpcyBkZXRlY3RlZCBieSB0aGUgb2JqZWN0IG5vdAorCSAqICAg ICAgIGhhdmluZyBhIEZJTkFMSVpBQkxFIGZsYWcgZGVzcGl0ZSBiZWluZyBvbiB0aGUgZmluYWxp emVfbGlzdDsKKwkgKiAgICAgICB0aGUgZmxhZyBpcyBjbGVhcmVkIGZvciB0aGUgb2JqZWN0IGJl aW5nIGZpbmFsaXplZCBvbmx5LgorCSAqCisJICogICAoMikgVGhlIG9iamVjdCBpcyBvbiB0aGUg ZmluYWxpemVfbGlzdCBidXQgaXMgbm90IGN1cnJlbnRseQorCSAqICAgICAgIGJlaW5nIHByb2Nl c3NlZC4gIEluIHRoaXMgY2FzZSB0aGUgb2JqZWN0IGNhbiBiZSBxdWV1ZWQKKwkgKiAgICAgICBi YWNrIHRvIGhlYXBfYWxsb2NhdGVkIHdpdGggYSBmZXcgZmxhZ3MgY2xlYXJlZCwgaW4gZWZmZWN0 CisJICogICAgICAgY2FuY2VsbGluZyB0aGUgZmluYWxpemVyLgorCSAqLworCWlmIChEVUtfVU5M SUtFTFkoRFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpBQkxFKChkdWtfaGVhcGhkciAqKSBwdHIpKSkg eworCQlkdWtfaGVhcGhkciAqY3VycjsKKworCQlEVUtfRChEVUtfRFBSSU5UKCJkdWtfcHVzaF9o ZWFwcHRyKCkgd2l0aCBhIHBvaW50ZXIgb24gZmluYWxpemVfbGlzdCwgYXV0b3Jlc2N1ZSIpKTsK KworCQljdXJyID0gKGR1a19oZWFwaGRyICopIHB0cjsKKwkJRFVLX0hFQVBIRFJfQ0xFQVJfRklO QUxJWkFCTEUoY3Vycik7CisKKwkJLyogQmVjYXVzZSBGSU5BTElaRUQgaXMgc2V0IHByaW9yIHRv IGZpbmFsaXplciBjYWxsLCBpdCB3aWxsCisJCSAqIGJlIHNldCBmb3IgdGhlIG9iamVjdCBiZWlu ZyBjdXJyZW50bHkgZmluYWxpemVkLCBidXQgbm90CisJCSAqIGZvciBvdGhlciBvYmplY3RzIG9u IGZpbmFsaXplX2xpc3QuCisJCSAqLworCQlEVUtfSEVBUEhEUl9DTEVBUl9GSU5BTElaRUQoY3Vy cik7CisKKwkJLyogRGVxdWV1ZSBvYmplY3QgZnJvbSBmaW5hbGl6ZV9saXN0IGFuZCBxdWV1ZSBp dCBiYWNrIHRvCisJCSAqIGhlYXBfYWxsb2NhdGVkLgorCQkgKi8KKyNpZiBkZWZpbmVkKERVS19V U0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZD T1VOVChjdXJyKSA+PSAxKTsgIC8qIFByZWluY3JlbWVudGVkIG9uIGZpbmFsaXplX2xpc3QgaW5z ZXJ0LiAqLworCQlEVUtfSEVBUEhEUl9QUkVERUNfUkVGQ09VTlQoY3Vycik7CisjZW5kaWYKKwkJ RFVLX0hFQVBfUkVNT1ZFX0ZST01fRklOQUxJWkVfTElTVCh0aHItPmhlYXAsIGN1cnIpOworCQlE VUtfSEVBUF9JTlNFUlRfSU5UT19IRUFQX0FMTE9DQVRFRCh0aHItPmhlYXAsIGN1cnIpOworCisJ CS8qIENvbnRpbnVlIHdpdGggdGhlIHJlc3QuICovCisJfQorCisJc3dpdGNoIChEVUtfSEVBUEhE Ul9HRVRfVFlQRSgoZHVrX2hlYXBoZHIgKikgcHRyKSkgeworCWNhc2UgRFVLX0hUWVBFX1NUUklO RzoKKwkJRFVLX1RWQUxfU0VUX1NUUklORyh0diwgKGR1a19oc3RyaW5nICopIHB0cik7CisJCWJy ZWFrOworCWNhc2UgRFVLX0hUWVBFX09CSkVDVDoKKwkJRFVLX1RWQUxfU0VUX09CSkVDVCh0diwg KGR1a19ob2JqZWN0ICopIHB0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURVS19BU1NFUlQo RFVLX0hFQVBIRFJfR0VUX1RZUEUoKGR1a19oZWFwaGRyICopIHB0cikgPT0gRFVLX0hUWVBFX0JV RkZFUik7CisJCURVS19UVkFMX1NFVF9CVUZGRVIodHYsIChkdWtfaGJ1ZmZlciAqKSBwdHIpOwor CQlicmVhazsKKwl9CisKKwlEVUtfSEVBUEhEUl9JTkNSRUYodGhyLCAoZHVrX2hlYXBoZHIgKikg cHRyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFB1c2ggb2JqZWN0IHdpdGggbm8gcHJvdG90 eXBlLCBpLmUuIGEgImJhcmUiIG9iamVjdC4gKi8KK0RVS19FWFRFUk5BTCBkdWtfaWR4X3QgZHVr X3B1c2hfYmFyZV9vYmplY3QoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VO VFJZKHRocik7CisKKwkodm9pZCkgZHVrX3B1c2hfb2JqZWN0X2hlbHBlcih0aHIsCisJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RSRUZTIHwK KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFH UyhEVUtfSE9CSkVDVF9DTEFTU19PQkpFQ1QpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0xKTsgIC8qIG5vIHByb3RvdHlwZSAqLworCXJldHVybiBkdWtfZ2V0X3RvcF9pbmRleF91 bnNhZmUodGhyKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3B1c2hfaHN0cmluZyhkdWtf aHRocmVhZCAqdGhyLCBkdWtfaHN0cmluZyAqaCkgeworCWR1a190dmFsIHR2OworCisJRFVLX0FT U0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKwlEVUtfVFZB TF9TRVRfU1RSSU5HKCZ0diwgaCk7CisJZHVrX3B1c2hfdHZhbCh0aHIsICZ0dik7Cit9CisKK0RV S19JTlRFUk5BTCB2b2lkIGR1a19wdXNoX2hzdHJpbmdfc3RyaWR4KGR1a19odGhyZWFkICp0aHIs IGR1a19zbWFsbF91aW50X3Qgc3RyaWR4KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KwlEVUtfQVNTRVJUX1NUUklEWF9WQUxJRChzdHJpZHgpOworCWR1a19wdXNoX2hzdHJpbmcodGhy LCBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKHRociwgc3RyaWR4KSk7Cit9CisKK0RVS19JTlRFUk5B TCB2b2lkIGR1a19wdXNoX2hzdHJpbmdfZW1wdHkoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19B U1NFUlRfQVBJX0VOVFJZKHRocik7CisJZHVrX3B1c2hfaHN0cmluZyh0aHIsIERVS19IVEhSRUFE X0dFVF9TVFJJTkcodGhyLCBEVUtfU1RSSURYX0VNUFRZX1NUUklORykpOworfQorCitEVUtfSU5U RVJOQUwgdm9pZCBkdWtfcHVzaF9ob2JqZWN0KGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0 ICpoKSB7CisJZHVrX3R2YWwgdHY7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURV S19BU1NFUlQoaCAhPSBOVUxMKTsKKworCURVS19UVkFMX1NFVF9PQkpFQ1QoJnR2LCBoKTsKKwlk dWtfcHVzaF90dmFsKHRociwgJnR2KTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3B1c2hf aGJ1ZmZlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGJ1ZmZlciAqaCkgeworCWR1a190dmFsIHR2 OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7 CisKKwlEVUtfVFZBTF9TRVRfQlVGRkVSKCZ0diwgaCk7CisJZHVrX3B1c2hfdHZhbCh0aHIsICZ0 dik7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19wdXNoX2hvYmplY3RfYmlkeChkdWtfaHRo cmVhZCAqdGhyLCBkdWtfc21hbGxfaW50X3QgYnVpbHRpbl9pZHgpIHsKKwlEVUtfQVNTRVJUX0FQ SV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoYnVpbHRpbl9pZHggPj0gMCAmJiBidWlsdGluX2lk eCA8IERVS19OVU1fQlVJTFRJTlMpOworCURVS19BU1NFUlQodGhyLT5idWlsdGluc1tidWlsdGlu X2lkeF0gIT0gTlVMTCk7CisKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwgdGhyLT5idWlsdGluc1ti dWlsdGluX2lkeF0pOworfQorCisvKgorICogIFBvcHBlcnMKKyAqLworCitEVUtfTE9DQUwgRFVL X0FMV0FZU19JTkxJTkUgdm9pZCBkdWtfX3BvcF9uX3Vuc2FmZV9yYXcoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2lkeF90IGNvdW50KSB7CisJZHVrX3R2YWwgKnR2OworI2lmIGRlZmluZWQoRFVLX1VT RV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJZHVrX3R2YWwgKnR2X2VuZDsKKyNlbmRpZgorCisJRFVL X0FTU0VSVF9DVFhfVkFMSUQodGhyKTsKKwlEVUtfQVNTRVJUKGNvdW50ID49IDApOworCURVS19B U1NFUlQoKGR1a19zaXplX3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90 dG9tKSA+PSAoZHVrX3NpemVfdCkgY291bnQpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVS RU5DRV9DT1VOVElORykKKwl0diA9IHRoci0+dmFsc3RhY2tfdG9wOworCXR2X2VuZCA9IHR2IC0g Y291bnQ7CisJd2hpbGUgKHR2ICE9IHR2X2VuZCkgeworCQl0di0tOworCQlEVUtfQVNTRVJUKHR2 ID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwkJRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERS RUZfTk9SWih0aHIsIHR2KTsKKwl9CisJdGhyLT52YWxzdGFja190b3AgPSB0djsKKwlEVUtfUkVG WkVST19DSEVDS19GQVNUKHRocik7CisjZWxzZQorCXR2ID0gdGhyLT52YWxzdGFja190b3A7CisJ d2hpbGUgKGNvdW50ID4gMCkgeworCQljb3VudC0tOworCQl0di0tOworCQlEVUtfQVNTRVJUKHR2 ID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwkJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dik7 CisJfQorCXRoci0+dmFsc3RhY2tfdG9wID0gdHY7CisjZW5kaWYKKworCURVS19BU1NFUlQodGhy LT52YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworfQorCitEVUtfRVhURVJO QUwgdm9pZCBkdWtfcG9wX24oZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGNvdW50KSB7CisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfdG9w ID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKworCWlmIChEVUtfVU5MSUtFTFkoKGR1a191aWR4 X3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKSA8IChkdWtfdWlk eF90KSBjb3VudCkpIHsKKwkJRFVLX0VSUk9SX1JBTkdFX0lOVkFMSURfQ09VTlQodGhyKTsKKwkJ RFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0KKwlEVUtfQVNTRVJUKGNvdW50ID49IDApOwor CisJZHVrX19wb3Bfbl91bnNhZmVfcmF3KHRociwgY291bnQpOworfQorCisjaWYgZGVmaW5lZChE VUtfVVNFX1BSRUZFUl9TSVpFKQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3BvcF9uX3Vuc2FmZShk dWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgY291bnQpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCWR1a19wb3Bfbih0aHIsIGNvdW50KTsKK30KKyNlbHNlICAvKiBEVUtfVVNFX1BS RUZFUl9TSVpFICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcG9wX25fdW5zYWZlKGR1a19odGhy ZWFkICp0aHIsIGR1a19pZHhfdCBjb3VudCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7 CisJZHVrX19wb3Bfbl91bnNhZmVfcmF3KHRociwgY291bnQpOworfQorI2VuZGlmICAvKiBEVUtf VVNFX1BSRUZFUl9TSVpFICovCisKKy8qIFBvcCBOIGVsZW1lbnRzIHdpdGhvdXQgREVDUkVGIChp biBlZmZlY3QgInN0ZWFsaW5nIiBhbnkgYWN0dWFsIHJlZmNvdW50cykuICovCisjaWYgZGVmaW5l ZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19wb3Bf bl9ub2RlY3JlZl91bnNhZmUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGNvdW50KSB7CisJ ZHVrX3R2YWwgKnR2OworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJU KGNvdW50ID49IDApOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190b3AgPj0gdGhyLT52YWxz dGFja19ib3R0b20pOworCURVS19BU1NFUlQoKGR1a19zaXplX3QpICh0aHItPnZhbHN0YWNrX3Rv cCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKSA+PSAoZHVrX3NpemVfdCkgY291bnQpOworCisJdHYg PSB0aHItPnZhbHN0YWNrX3RvcDsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWNvdW50LS07CisJ CXR2LS07CisJCURVS19BU1NFUlQodHYgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCQlEVUtf VFZBTF9TRVRfVU5ERUZJTkVEKHR2KTsKKwl9CisJdGhyLT52YWxzdGFja190b3AgPSB0djsKKwor CURVS19BU1NFUlQodGhyLT52YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOwor fQorI2Vsc2UgIC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HICovCitEVUtfSU5URVJOQUwg dm9pZCBkdWtfcG9wX25fbm9kZWNyZWZfdW5zYWZlKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhf dCBjb3VudCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJZHVrX3BvcF9uX3Vuc2Fm ZSh0aHIsIGNvdW50KTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcg Ki8KKworLyogUG9wcGluZyBvbmUgZWxlbWVudCBpcyBjYWxsZWQgc28gb2Z0ZW4gdGhhdCB3aGVu IGZvb3RwcmludCBpcyBub3QgYW4gaXNzdWUsCisgKiBjb21waWxlIGEgc3BlY2lhbGl6ZWQgZnVu Y3Rpb24gZm9yIGl0LgorICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorRFVL X0VYVEVSTkFMIHZvaWQgZHVrX3BvcChkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9B UElfRU5UUlkodGhyKTsKKwlkdWtfcG9wX24odGhyLCAxKTsKK30KK0RVS19JTlRFUk5BTCB2b2lk IGR1a19wb3BfdW5zYWZlKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRS WSh0aHIpOworCWR1a19wb3Bfbl91bnNhZmUodGhyLCAxKTsKK30KK0RVS19JTlRFUk5BTCB2b2lk IGR1a19wb3Bfbm9kZWNyZWZfdW5zYWZlKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJU X0FQSV9FTlRSWSh0aHIpOworCWR1a19wb3Bfbl9ub2RlY3JlZl91bnNhZmUodGhyLCAxKTsKK30K KyNlbHNlICAvKiBEVUtfVVNFX1BSRUZFUl9TSVpFICovCitEVUtfTE9DQUwgRFVLX0FMV0FZU19J TkxJTkUgdm9pZCBkdWtfX3BvcF91bnNhZmVfcmF3KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtf dHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUX0NUWF9WQUxJRCh0aHIpOworCURVS19BU1NFUlQodGhy LT52YWxzdGFja190b3AgIT0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQodGhy LT52YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQoKGR1 a19zaXplX3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKSA+PSAo ZHVrX3NpemVfdCkgMSk7CisKKwl0diA9IC0tdGhyLT52YWxzdGFja190b3A7CisJRFVLX0FTU0VS VCh0diA+PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVS RU5DRV9DT1VOVElORykKKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRih0aHIsIHR2KTsg IC8qIHNpZGUgZWZmZWN0cyAqLworI2Vsc2UKKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKHR2KTsK KyNlbmRpZgorCisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+PSB0aHItPnZhbHN0YWNr X2JvdHRvbSk7Cit9CitEVUtfRVhURVJOQUwgdm9pZCBkdWtfcG9wKGR1a19odGhyZWFkICp0aHIp IHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVLX0FTU0VSVCh0aHItPnZhbHN0 YWNrX3RvcCA+PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJaWYgKERVS19VTkxJS0VMWSh0aHIt PnZhbHN0YWNrX3RvcCA9PSB0aHItPnZhbHN0YWNrX2JvdHRvbSkpIHsKKwkJRFVLX0VSUk9SX1JB TkdFX0lOVkFMSURfQ09VTlQodGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0K KworCWR1a19fcG9wX3Vuc2FmZV9yYXcodGhyKTsKK30KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19w b3BfdW5zYWZlKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIp OworCWR1a19fcG9wX3Vuc2FmZV9yYXcodGhyKTsKK30KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19w b3Bfbm9kZWNyZWZfdW5zYWZlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdHZhbCAqdHY7CisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190 b3AgIT0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190 b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQoKGR1a19zaXplX3QpICh0 aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKSA+PSAoZHVrX3NpemVfdCkg MSk7CisKKwl0diA9IC0tdGhyLT52YWxzdGFja190b3A7CisJRFVLX0FTU0VSVCh0diA+PSB0aHIt PnZhbHN0YWNrX2JvdHRvbSk7CisJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dik7CisKKwlEVUtf QVNTRVJUKHRoci0+dmFsc3RhY2tfdG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKK30KKyNl bmRpZiAgLyogIURVS19VU0VfUFJFRkVSX1NJWkUgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9Q UkVGRVJfU0laRSkKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19wb3BfdW5kZWZpbmVkKGR1a19odGhy ZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCWR1a19wb3Bfbm9kZWNy ZWZfdW5zYWZlKHRocik7Cit9CisjZWxzZSAgLyogRFVLX1VTRV9QUkVGRVJfU0laRSAqLworRFVL X0lOVEVSTkFMIHZvaWQgZHVrX3BvcF91bmRlZmluZWQoZHVrX2h0aHJlYWQgKnRocikgeworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCAh PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+ PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJRFVLX0FTU0VSVCgoZHVrX3NpemVfdCkgKHRoci0+ dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFja19ib3R0b20pID49IChkdWtfc2l6ZV90KSAxKTsK KworCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHRoci0+dmFsc3RhY2tfdG9wIC0g MSkpOworCXRoci0+dmFsc3RhY2tfdG9wLS07CisKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tf dG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKK30KKyNlbmRpZiAgLyogIURVS19VU0VfUFJF RkVSX1NJWkUgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKK0RVS19FWFRF Uk5BTCB2b2lkIGR1a19wb3BfMihkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKwlkdWtfcG9wX24odGhyLCAyKTsKK30KK0RVS19JTlRFUk5BTCB2b2lkIGR1 a19wb3BfMl91bnNhZmUoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisJZHVrX3BvcF9uX3Vuc2FmZSh0aHIsIDIpOworfQorRFVLX0lOVEVSTkFMIHZvaWQg ZHVrX3BvcF8yX25vZGVjcmVmX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VS VF9BUElfRU5UUlkodGhyKTsKKwlkdWtfcG9wX25fbm9kZWNyZWZfdW5zYWZlKHRociwgMik7Cit9 CisjZWxzZQorRFVLX0xPQ0FMIERVS19BTFdBWVNfSU5MSU5FIHZvaWQgZHVrX19wb3BfMl91bnNh ZmVfcmF3KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJU X0NUWF9WQUxJRCh0aHIpOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190b3AgIT0gdGhyLT52 YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190b3AgPj0gdGhyLT52 YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQoKGR1a19zaXplX3QpICh0aHItPnZhbHN0YWNr X3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKSA+PSAoZHVrX3NpemVfdCkgMik7CisKKwl0diA9 IC0tdGhyLT52YWxzdGFja190b3A7CisJRFVLX0FTU0VSVCh0diA+PSB0aHItPnZhbHN0YWNrX2Jv dHRvbSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwlEVUtfVFZB TF9TRVRfVU5ERUZJTkVEX1VQRFJFRih0aHIsIHR2KTsgIC8qIHNpZGUgZWZmZWN0cyAqLworI2Vs c2UKKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKHR2KTsKKyNlbmRpZgorCXR2ID0gLS10aHItPnZh bHN0YWNrX3RvcDsKKwlEVUtfQVNTRVJUKHR2ID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKyNp ZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCURVS19UVkFMX1NFVF9VTkRF RklORURfVVBEUkVGKHRociwgdHYpOyAgLyogc2lkZSBlZmZlY3RzICovCisjZWxzZQorCURVS19U VkFMX1NFVF9VTkRFRklORUQodHYpOworI2VuZGlmCisKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3Rh Y2tfdG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKK30KK0RVS19FWFRFUk5BTCB2b2lkIGR1 a19wb3BfMihkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20p OworCWlmIChEVUtfVU5MSUtFTFkodGhyLT52YWxzdGFja190b3AgLSAyIDwgdGhyLT52YWxzdGFj a19ib3R0b20pKSB7CisJCURVS19FUlJPUl9SQU5HRV9JTlZBTElEX0NPVU5UKHRocik7CisJCURV S19XT19OT1JFVFVSTihyZXR1cm47KTsKKwl9CisKKwlkdWtfX3BvcF8yX3Vuc2FmZV9yYXcodGhy KTsKK30KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19wb3BfMl91bnNhZmUoZHVrX2h0aHJlYWQgKnRo cikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJZHVrX19wb3BfMl91bnNhZmVfcmF3 KHRocik7Cit9CitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcG9wXzJfbm9kZWNyZWZfdW5zYWZlKGR1 a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NF UlQodGhyLT52YWxzdGFja190b3AgIT0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NF UlQodGhyLT52YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NF UlQoKGR1a19zaXplX3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9t KSA+PSAoZHVrX3NpemVfdCkgMik7CisKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOREVGSU5F RCh0aHItPnZhbHN0YWNrX3RvcCAtIDEpKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOREVG SU5FRCh0aHItPnZhbHN0YWNrX3RvcCAtIDIpKTsKKwl0aHItPnZhbHN0YWNrX3RvcCAtPSAyOwor CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7 Cit9CisjZW5kaWYgIC8qICFEVUtfVVNFX1BSRUZFUl9TSVpFICovCisKK0RVS19FWFRFUk5BTCB2 b2lkIGR1a19wb3BfMyhkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKwlkdWtfcG9wX24odGhyLCAzKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3Bv cF8zX3Vuc2FmZShkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhy KTsKKwlkdWtfcG9wX25fdW5zYWZlKHRociwgMyk7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1 a19wb3BfM19ub2RlY3JlZl91bnNhZmUoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRf QVBJX0VOVFJZKHRocik7CisJZHVrX3BvcF9uX25vZGVjcmVmX3Vuc2FmZSh0aHIsIDMpOworfQor CisvKgorICogIFBhY2sgYW5kIHVucGFjayAocGFjayB2YWx1ZSBzdGFjayBlbnRyaWVzIGludG8g YW4gYXJyYXkgYW5kIHZpY2UgdmVyc2EpCisgKi8KKworLyogWFhYOiBwYWNrIGluZGV4IHJhbmdl PyBhcnJheSBpbmRleCBvZmZzZXQ/ICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcGFjayhkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgY291bnQpIHsKKwlkdWtfdHZhbCAqdHZfc3JjOworCWR1 a190dmFsICp0dl9kc3Q7CisJZHVrX3R2YWwgKnR2X2N1cnI7CisJZHVrX3R2YWwgKnR2X2xpbWl0 OworCWR1a19pZHhfdCB0b3A7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJRFVL X0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCA+PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7CisJdG9w ID0gKGR1a19pZHhfdCkgKHRoci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFja19ib3R0b20p OworCURVS19BU1NFUlQodG9wID49IDApOworCWlmIChEVUtfVU5MSUtFTFkoKGR1a191aWR4X3Qp IGNvdW50ID4gKGR1a191aWR4X3QpIHRvcCkpIHsKKwkJLyogQWxzbyBoYW5kbGVzIG5lZ2F0aXZl IGNvdW50LiAqLworCQlEVUtfRVJST1JfUkFOR0VfSU5WQUxJRF9DT1VOVCh0aHIpOworCQlEVUtf V09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCURVS19BU1NFUlQoY291bnQgPj0gMCk7CisKKwkv KiBXcmFwcGluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBjaGVjayBhYm92ZTogdmFsdWUgc3RhY2sg dG9wIGNhbiBiZQorCSAqIGF0IG1vc3QgRFVLX1VTRV9WQUxTVEFDS19MSU1JVCB3aGljaCBpcyBs b3cgZW5vdWdoIHNvIHRoYXQKKwkgKiBtdWx0aXBseWluZyB3aXRoIHNpemVvZihkdWtfdHZhbCkg d29uJ3Qgd3JhcC4KKwkgKi8KKwlEVUtfQVNTRVJUKGNvdW50ID49IDAgJiYgY291bnQgPD0gKGR1 a19pZHhfdCkgRFVLX1VTRV9WQUxTVEFDS19MSU1JVCk7CisJRFVLX0FTU0VSVCgoZHVrX3NpemVf dCkgY291bnQgPD0gRFVLX1NJWkVfTUFYIC8gc2l6ZW9mKGR1a190dmFsKSk7ICAvKiBubyB3cmFw cGluZyAqLworCisJdHZfZHN0ID0gZHVrX3B1c2hfaGFycmF5X3dpdGhfc2l6ZV9vdXRwdHIodGhy LCAoZHVrX3VpbnQzMl90KSBjb3VudCk7ICAvKiBYWFg6IHVuaW5pdGlhbGl6ZWQgd291bGQgYmUg T0sgKi8KKwlEVUtfQVNTRVJUKGNvdW50ID09IDAgfHwgdHZfZHN0ICE9IE5VTEwpOworCisJLyog Q29weSB2YWx1ZSBzdGFjayB2YWx1ZXMgZGlyZWN0bHkgdG8gdGhlIGFycmF5IHBhcnQgd2l0aG91 dAorCSAqIGFueSByZWZjb3VudCB1cGRhdGVzOiBuZXQgcmVmY291bnQgY2hhbmdlcyBhcmUgemVy by4KKwkgKi8KKwl0dl9zcmMgPSB0aHItPnZhbHN0YWNrX3RvcCAtIGNvdW50IC0gMTsKKwlkdWtf bWVtY3B5X3Vuc2FmZSgodm9pZCAqKSB0dl9kc3QsIChjb25zdCB2b2lkICopIHR2X3NyYywgKHNp emVfdCkgY291bnQgKiBzaXplb2YoZHVrX3R2YWwpKTsKKworCS8qIE92ZXJ3cml0ZSByZXN1bHQg YXJyYXkgdG8gZmluYWwgdmFsdWUgc3RhY2sgbG9jYXRpb24gYW5kIHdpcGUKKwkgKiB0aGUgcmVz dDsgbm8gcmVmY291bnQgb3BlcmF0aW9ucyBuZWVkZWQuCisJICovCisKKwl0dl9kc3QgPSB0dl9z cmM7ICAvKiB3aGVuIGNvdW50ID09IDAsIHNhbWUgYXMgdHZfc3JjIChPSykgKi8KKwl0dl9zcmMg PSB0aHItPnZhbHN0YWNrX3RvcCAtIDE7CisJRFVLX1RWQUxfU0VUX1RWQUwodHZfZHN0LCB0dl9z cmMpOworCisJLyogWFhYOiBpbnRlcm5hbCBoZWxwZXIgdG8gd2lwZSBhIHZhbHVlIHN0YWNrIHNl Z21lbnQ/ICovCisJdHZfY3VyciA9IHR2X2RzdCArIDE7CisJdHZfbGltaXQgPSB0aHItPnZhbHN0 YWNrX3RvcDsKKwl3aGlsZSAodHZfY3VyciAhPSB0dl9saW1pdCkgeworCQkvKiBXaXBlIHBvbGlj eToga2VlcCBhcyAndW5kZWZpbmVkJy4gKi8KKwkJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dl9j dXJyKTsKKwkJdHZfY3VycisrOworCX0KKwl0aHItPnZhbHN0YWNrX3RvcCA9IHR2X2RzdCArIDE7 Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaWR4X3QgZHVrX3VucGFja19hcnJheV9saWtlKGR1a19o dGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4KTsK KwlpZiAoRFVLX0xJS0VMWShEVUtfVFZBTF9JU19PQkpFQ1QodHYpKSkgeworCQlkdWtfaG9iamVj dCAqaDsKKwkJZHVrX3VpbnQzMl90IGxlbjsKKwkJZHVrX3VpbnQzMl90IGk7CisKKwkJaCA9IERV S19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJCURVS19V TlJFRihoKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BUlJBWV9GQVNUUEFUSCkgIC8qIGNsb3Nl IGVub3VnaCAqLworCQlpZiAoRFVLX0xJS0VMWShEVUtfSE9CSkVDVF9JU19BUlJBWShoKSAmJgor CQkgICAgICAgICAgICAgICAoKGR1a19oYXJyYXkgKikgaCktPmxlbmd0aCA8PSBEVUtfSE9CSkVD VF9HRVRfQVNJWkUoaCkpKSB7CisJCQlkdWtfaGFycmF5ICpoX2FycjsKKwkJCWR1a190dmFsICp0 dl9zcmM7CisJCQlkdWtfdHZhbCAqdHZfZHN0OworCisJCQloX2FyciA9IChkdWtfaGFycmF5ICop IGg7CisJCQlsZW4gPSBoX2Fyci0+bGVuZ3RoOworCQkJaWYgKERVS19VTkxJS0VMWShsZW4gPj0g MHg4MDAwMDAwMFVMKSkgeworCQkJCWdvdG8gZmFpbF9vdmVyXzJnOworCQkJfQorCQkJZHVrX3Jl cXVpcmVfc3RhY2sodGhyLCAoZHVrX2lkeF90KSBsZW4pOworCisJCQkvKiBUaGUgcG90ZW50aWFs IGFsbG9jYXRpb24gaW4gZHVrX3JlcXVpcmVfc3RhY2soKSBtYXkKKwkJCSAqIHJ1biBhIGZpbmFs aXplciB3aGljaCBtb2RpZmllcyB0aGUgYXJnQXJyYXkgc28gdGhhdAorCQkJICogZS5nLiBiZWNv bWVzIHNwYXJzZS4gIFNvLCB3ZSBuZWVkIHRvIHJlY2hlY2sgdGhhdCB0aGUKKwkJCSAqIGFycmF5 IGRpZG4ndCBjaGFuZ2Ugc2l6ZSBhbmQgdGhhdCB0aGVyZSdzIHN0aWxsIGEKKwkJCSAqIHZhbGlk IGJhY2tpbmcgYXJyYXkgcGFydC4KKwkJCSAqCisJCQkgKiBYWFg6IGFsdGVybmF0aXZlbHksIGNv dWxkIHByZXZlbnQgZmluYWxpemVycyBmb3IgdGhlCisJCQkgKiBkdXJhdGlvbi4KKwkJCSAqLwor CQkJaWYgKERVS19VTkxJS0VMWShsZW4gIT0gaF9hcnItPmxlbmd0aCB8fAorCQkJICAgICAgICAg ICAgICAgICBoX2Fyci0+bGVuZ3RoID4gRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKChkdWtfaG9iamVj dCAqKSBoX2FycikpKSB7CisJCQkJZ290byBza2lwX2Zhc3Q7CisJCQl9CisKKwkJCS8qIE1haW4g ZmFzdCBwYXRoOiBhcmd1bWVudHMgYXJyYXkgaXMgYWxtb3N0IGFsd2F5cworCQkJICogYW4gYWN0 dWFsIGFycmF5ICh0aG91Z2ggaXQgbWlnaHQgYWxzbyBiZSBhbiBhcmd1bWVudHMKKwkJCSAqIG9i amVjdCkuCisJCQkgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImZhc3QgcGF0aCBmb3Ig JWxkIGVsZW1lbnRzIiwgKGxvbmcpIGhfYXJyLT5sZW5ndGgpKTsKKwkJCXR2X3NyYyA9IERVS19I T0JKRUNUX0FfR0VUX0JBU0UodGhyLT5oZWFwLCBoKTsKKwkJCXR2X2RzdCA9IHRoci0+dmFsc3Rh Y2tfdG9wOworCQkJd2hpbGUgKGxlbi0tID4gMCkgeworCQkJCURVS19BU1NFUlQodHZfZHN0IDwg dGhyLT52YWxzdGFja19lbmQpOworCQkJCWlmIChEVUtfVU5MSUtFTFkoRFVLX1RWQUxfSVNfVU5V U0VEKHR2X3NyYykpKSB7CisJCQkJCS8qIEdhcHMgYXJlIHZlcnkgdW5saWtlbHkuICBTa2lwIG92 ZXIgdGhlbSwKKwkJCQkJICogd2l0aG91dCBhbiBhbmNlc3RvciBsb29rdXAgKHRlY2huaWNhbGx5 CisJCQkJCSAqIG5vdCBjb21wbGlhbnQpLgorCQkJCQkgKi8KKwkJCQkJRFVLX0FTU0VSVChEVUtf VFZBTF9JU19VTkRFRklORUQodHZfZHN0KSk7ICAvKiB2YWxzdGFjayBwb2xpY3kgKi8KKwkJCQl9 IGVsc2UgeworCQkJCQlEVUtfVFZBTF9TRVRfVFZBTCh0dl9kc3QsIHR2X3NyYyk7CisJCQkJCURV S19UVkFMX0lOQ1JFRih0aHIsIHR2X2RzdCk7CisJCQkJfQorCQkJCXR2X3NyYysrOworCQkJCXR2 X2RzdCsrOworCQkJfQorCQkJRFVLX0FTU0VSVCh0dl9kc3QgPD0gdGhyLT52YWxzdGFja19lbmQp OworCQkJdGhyLT52YWxzdGFja190b3AgPSB0dl9kc3Q7CisJCQlyZXR1cm4gKGR1a19pZHhfdCkg aF9hcnItPmxlbmd0aDsKKwkJfQorCSBza2lwX2Zhc3Q6CisjZW5kaWYgIC8qIERVS19VU0VfQVJS QVlfRkFTVFBBVEggKi8KKworCQkvKiBTbG93IHBhdGg6IGFjdHVhbCBsb29rdXBzLiAgVGhlIGlu aXRpYWwgJ2xlbmd0aCcgbG9va3VwCisJCSAqIGRlY2lkZXMgdGhlIG91dHB1dCBsZW5ndGgsIHJl Z2FyZGxlc3Mgb2Ygc2lkZSBlZmZlY3RzIHRoYXQKKwkJICogbWF5IHJlc2l6ZSBvciBjaGFuZ2Ug dGhlIGFyZ0FycmF5IHdoaWxlIHdlIHJlYWQgdGhlCisJCSAqIGluZGljZXMuCisJCSAqLworCQlp ZHggPSBkdWtfbm9ybWFsaXplX2luZGV4KHRociwgaWR4KTsKKwkJZHVrX2dldF9wcm9wX3N0cmlk eCh0aHIsIGlkeCwgRFVLX1NUUklEWF9MRU5HVEgpOworCQlsZW4gPSBkdWtfdG9fdWludDMyKHRo ciwgLTEpOyAgLyogVG9VaW50MzIoKSBjb2VyY2lvbiByZXF1aXJlZCAqLworCQlpZiAoRFVLX1VO TElLRUxZKGxlbiA+PSAweDgwMDAwMDAwVUwpKSB7CisJCQlnb3RvIGZhaWxfb3Zlcl8yZzsKKwkJ fQorCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCQlEVUtfREREKERVS19ERERQUklOVCgic2xvdyBw YXRoIGZvciAlbGQgZWxlbWVudHMiLCAobG9uZykgbGVuKSk7CisKKwkJZHVrX3JlcXVpcmVfc3Rh Y2sodGhyLCAoZHVrX2lkeF90KSBsZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK KwkJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIsIGlkeCwgKGR1a191YXJyaWR4X3QpIGkpOworCQl9 CisJCXJldHVybiAoZHVrX2lkeF90KSBsZW47CisJfSBlbHNlIGlmIChEVUtfVFZBTF9JU19VTkRF RklORUQodHYpIHx8IERVS19UVkFMX0lTX05VTEwodHYpKSB7CisJCXJldHVybiAwOworCX0KKwor CURVS19FUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCURVS19XT19OT1JFVFVSTihyZXR1 cm4gMDspOworCisgZmFpbF9vdmVyXzJnOgorCURVS19FUlJPUl9SQU5HRV9JTlZBTElEX0xFTkdU SCh0aHIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworfQorCisvKgorICogIEVycm9y IHRocm93aW5nCisgKi8KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX3Rocm93X3JhdyhkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX3R2YWwgKnR2X3ZhbDsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZ KHRocik7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2JvdHRvbSA+PSB0aHItPnZhbHN0YWNr KTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfdG9wID49IHRoci0+dmFsc3RhY2tfYm90dG9t KTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfZW5kID49IHRoci0+dmFsc3RhY2tfdG9wKTsK KworCWlmIChEVUtfVU5MSUtFTFkodGhyLT52YWxzdGFja190b3AgPT0gdGhyLT52YWxzdGFja19i b3R0b20pKSB7CisJCURVS19FUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCQlEVUtfV09f Tk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJLyogRXJyb3JzIGFyZSBhdWdtZW50ZWQgd2hlbiB0 aGV5IGFyZSBjcmVhdGVkLCBub3Qgd2hlbiB0aGV5IGFyZQorCSAqIHRocm93biBvciByZS10aHJv d24uICBUaGUgY3VycmVudCBlcnJvciBoYW5kbGVyLCBob3dldmVyLCBydW5zCisJICoganVzdCBi ZWZvcmUgYW4gZXJyb3IgaXMgdGhyb3duLgorCSAqLworCisJLyogU3luYyBzbyB0aGF0IGF1Z21l bnRhdGlvbiBzZWVzIHVwLXRvLWRhdGUgYWN0aXZhdGlvbnMsIE5VTEwKKwkgKiB0aHItPnB0cl9j dXJyX3BjIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpZiBzaWRlIGVmZmVjdHMgb2NjdXIKKwkgKiBp biBhdWdtZW50YXRpb24gb3IgbG9uZ2ptcCBoYW5kbGluZy4KKwkgKi8KKwlkdWtfaHRocmVhZF9z eW5jX2FuZF9udWxsX2N1cnJwYyh0aHIpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRf RVJST1JfVEhST1cpCisJRFVLX0RERChEVUtfREREUFJJTlQoIlRIUk9XIEVSUk9SIChBUEkpOiAl IWRUIChiZWZvcmUgdGhyb3cgYXVnbWVudCkiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRo ciwgLTEpKSk7CisJZHVrX2Vycl9hdWdtZW50X2Vycm9yX3Rocm93KHRocik7CisjZW5kaWYKKwlE VUtfREREKERVS19ERERQUklOVCgiVEhST1cgRVJST1IgKEFQSSk6ICUhZFQgKGFmdGVyIHRocm93 IGF1Z21lbnQpIiwgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCisJdHZf dmFsID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKTsKKwlkdWtfZXJyX3NldHVwX2xqc3Rh dGUxKHRociwgRFVLX0xKX1RZUEVfVEhST1csIHR2X3ZhbCk7CisjaWYgZGVmaW5lZChEVUtfVVNF X0RFQlVHR0VSX1NVUFBPUlQpCisJZHVrX2Vycl9jaGVja19kZWJ1Z2dlcl9pbnRlZ3JhdGlvbih0 aHIpOworI2VuZGlmCisKKwkvKiB0aHItPmhlYXAtPmxqLmptcGJ1Zl9wdHIgaXMgY2hlY2tlZCBi eSBkdWtfZXJyX2xvbmdqbXAoKSBzbyB3ZSBkb24ndAorCSAqIG5lZWQgdG8gY2hlY2sgdGhhdCBo ZXJlLiAgSWYgdGhlIHZhbHVlIGlzIE5VTEwsIGEgZmF0YWwgZXJyb3Igb2NjdXJzCisJICogYmVj YXVzZSB3ZSBjYW4ndCByZXR1cm4uCisJICovCisKKwlkdWtfZXJyX2xvbmdqbXAodGhyKTsKKwlE VUtfVU5SRUFDSEFCTEUoKTsKK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVrX2ZhdGFsX3Jhdyhk dWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICplcnJfbXNnKSB7CisJRFVLX0FTU0VSVF9BUElf RU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+ aGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVhcC0+ZmF0YWxfZnVuYyAhPSBOVUxM KTsKKworCURVS19EKERVS19EUFJJTlQoImZhdGFsIGVycm9yIG9jY3VycmVkOiAlcyIsIGVycl9t c2cgPyBlcnJfbXNnIDogIk5VTEwiKSk7CisKKwkvKiBmYXRhbF9mdW5jIHNob3VsZCBiZSBub3Jl dHVybiwgYnV0IG5vcmV0dXJuIGRlY2xhcmF0aW9ucyBvbiBmdW5jdGlvbgorCSAqIHBvaW50ZXJz IGhhcyBhIHZlcnkgc3BvdHR5IHN1cHBvcnQgYXBwYXJlbnRseSBzbyBpdCdzIG5vdCBjdXJyZW50 bHkKKwkgKiBkb25lLgorCSAqLworCXRoci0+aGVhcC0+ZmF0YWxfZnVuYyh0aHItPmhlYXAtPmhl YXBfdWRhdGEsIGVycl9tc2cpOworCisJLyogSWYgdGhlIGZhdGFsIGhhbmRsZXIgcmV0dXJucywg YWxsIGJldHMgYXJlIG9mZi4gIEl0J2QgYmUgbmljZSB0bworCSAqIHByaW50IHNvbWV0aGluZyBo ZXJlIGJ1dCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBzdGRpbywKKwkgKiB0aGVy ZSdzIG5vIHdheSB0byBkbyBzbyBwb3J0YWJseS4KKwkgKi8KKwlEVUtfRChEVUtfRFBSSU5UKCJm YXRhbCBlcnJvciBoYW5kbGVyIHJldHVybmVkLCBhbGwgYmV0cyBhcmUgb2ZmISIpKTsKKwlmb3Ig KDs7KSB7CisJCS8qIGxvb3AgZm9yZXZlciwgZG9uJ3QgcmV0dXJuIChmdW5jdGlvbiBtYXJrZWQg bm9yZXR1cm4pICovCisJfQorfQorCitEVUtfRVhURVJOQUwgdm9pZCBkdWtfZXJyb3JfdmFfcmF3 KGR1a19odGhyZWFkICp0aHIsIGR1a19lcnJjb2RlX3QgZXJyX2NvZGUsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBkdWtfaW50X3QgbGluZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKSB7CisJ RFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKworCWR1a19wdXNoX2Vycm9yX29iamVjdF92YV9y YXcodGhyLCBlcnJfY29kZSwgZmlsZW5hbWUsIGxpbmUsIGZtdCwgYXApOworCSh2b2lkKSBkdWtf dGhyb3codGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKK0RVS19FWFRFUk5B TCB2b2lkIGR1a19lcnJvcl9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBlcnJf Y29kZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lLCBjb25zdCBjaGFyICpm bXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOwor CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZHVrX3B1c2hfZXJyb3Jfb2JqZWN0X3ZhX3Jhdyh0aHIs IGVycl9jb2RlLCBmaWxlbmFtZSwgbGluZSwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwkodm9p ZCkgZHVrX3Rocm93KHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCisjaWYg IWRlZmluZWQoRFVLX1VTRV9WQVJJQURJQ19NQUNST1MpCitEVUtfTk9SRVRVUk4oRFVLX0xPQ0FM X0RFQ0wgdm9pZCBkdWtfX3Rocm93X2Vycm9yX2Zyb21fc3Rhc2goZHVrX2h0aHJlYWQgKnRociwg ZHVrX2VycmNvZGVfdCBlcnJfY29kZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKSk7CisK K0RVS19MT0NBTCB2b2lkIGR1a19fdGhyb3dfZXJyb3JfZnJvbV9zdGFzaChkdWtfaHRocmVhZCAq dGhyLCBkdWtfZXJyY29kZV90IGVycl9jb2RlLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAp IHsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlkdWtfaW50X3QgbGluZTsKKworCURVS19BU1NF UlRfQ1RYX1ZBTElEKHRocik7CisKKwlmaWxlbmFtZSA9IGR1a19hcGlfZ2xvYmFsX2ZpbGVuYW1l OworCWxpbmUgPSBkdWtfYXBpX2dsb2JhbF9saW5lOworCWR1a19hcGlfZ2xvYmFsX2ZpbGVuYW1l ID0gTlVMTDsKKwlkdWtfYXBpX2dsb2JhbF9saW5lID0gMDsKKworCWR1a19wdXNoX2Vycm9yX29i amVjdF92YV9yYXcodGhyLCBlcnJfY29kZSwgZmlsZW5hbWUsIGxpbmUsIGZtdCwgYXApOworCSh2 b2lkKSBkdWtfdGhyb3codGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKyNk ZWZpbmUgRFVLX19FUlJPUl9TVEFTSF9TSEFSRUQoY29kZSkgZG8geyBcCisJCXZhX2xpc3QgYXA7 IFwKKwkJdmFfc3RhcnQoYXAsIGZtdCk7IFwKKwkJZHVrX190aHJvd19lcnJvcl9mcm9tX3N0YXNo KHRociwgKGNvZGUpLCBmbXQsIGFwKTsgXAorCQl2YV9lbmQoYXApOyBcCisJCURVS19XT19OT1JF VFVSTihyZXR1cm4gMDspOyBcCisJfSB3aGlsZSAoMCkKKworRFVLX0VYVEVSTkFMIGR1a19yZXRf dCBkdWtfZXJyb3Jfc3Rhc2goZHVrX2h0aHJlYWQgKnRociwgZHVrX2VycmNvZGVfdCBlcnJfY29k ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOwor CURVS19fRVJST1JfU1RBU0hfU0hBUkVEKGVycl9jb2RlKTsKK30KK0RVS19FWFRFUk5BTCBkdWtf cmV0X3QgZHVrX2dlbmVyaWNfZXJyb3Jfc3Rhc2goZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hh ciAqZm10LCAuLi4pIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19fRVJST1Jf U1RBU0hfU0hBUkVEKERVS19FUlJfRVJST1IpOworfQorRFVLX0VYVEVSTkFMIGR1a19yZXRfdCBk dWtfZXZhbF9lcnJvcl9zdGFzaChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpmbXQsIC4u LikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX19FUlJPUl9TVEFTSF9TSEFS RUQoRFVLX0VSUl9FVkFMX0VSUk9SKTsKK30KK0RVS19FWFRFUk5BTCBkdWtfcmV0X3QgZHVrX3Jh bmdlX2Vycm9yX3N0YXNoKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7 CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0VSUk9SX1NUQVNIX1NIQVJFRChE VUtfRVJSX1JBTkdFX0VSUk9SKTsKK30KK0RVS19FWFRFUk5BTCBkdWtfcmV0X3QgZHVrX3JlZmVy ZW5jZV9lcnJvcl9zdGFzaChkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpmbXQsIC4uLikg eworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX19FUlJPUl9TVEFTSF9TSEFSRUQo RFVLX0VSUl9SRUZFUkVOQ0VfRVJST1IpOworfQorRFVLX0VYVEVSTkFMIGR1a19yZXRfdCBkdWtf c3ludGF4X2Vycm9yX3N0YXNoKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4u KSB7CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0VSUk9SX1NUQVNIX1NIQVJF RChEVUtfRVJSX1NZTlRBWF9FUlJPUik7Cit9CitEVUtfRVhURVJOQUwgZHVrX3JldF90IGR1a190 eXBlX2Vycm9yX3N0YXNoKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7 CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0VSUk9SX1NUQVNIX1NIQVJFRChE VUtfRVJSX1RZUEVfRVJST1IpOworfQorRFVLX0VYVEVSTkFMIGR1a19yZXRfdCBkdWtfdXJpX2Vy cm9yX3N0YXNoKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CisJRFVL X0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfX0VSUk9SX1NUQVNIX1NIQVJFRChEVUtfRVJS X1VSSV9FUlJPUik7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfVkFSSUFESUNfTUFDUk9TICovCisK Ky8qCisgKiAgQ29tcGFyaXNvbgorICovCisKK0RVS19FWFRFUk5BTCBkdWtfYm9vbF90IGR1a19l cXVhbHMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeDEsIGR1a19pZHhfdCBpZHgyKSB7 CisJZHVrX3R2YWwgKnR2MSwgKnR2MjsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisK Kwl0djEgPSBkdWtfZ2V0X3R2YWwodGhyLCBpZHgxKTsKKwl0djIgPSBkdWtfZ2V0X3R2YWwodGhy LCBpZHgyKTsKKwlpZiAoKHR2MSA9PSBOVUxMKSB8fCAodHYyID09IE5VTEwpKSB7CisJCXJldHVy biAwOworCX0KKworCS8qIENvZXJjaW9uIG1heSBiZSBuZWVkZWQsIHRoZSBoZWxwZXIgaGFuZGxl cyB0aGF0IGJ5IHB1c2hpbmcgdGhlCisJICogdGFnZ2VkIHZhbHVlcyB0byB0aGUgc3RhY2suCisJ ICovCisJcmV0dXJuIGR1a19qc19lcXVhbHModGhyLCB0djEsIHR2Mik7Cit9CisKK0RVS19FWFRF Uk5BTCBkdWtfYm9vbF90IGR1a19zdHJpY3RfZXF1YWxzKGR1a19odGhyZWFkICp0aHIsIGR1a19p ZHhfdCBpZHgxLCBkdWtfaWR4X3QgaWR4MikgeworCWR1a190dmFsICp0djEsICp0djI7CisKKwlE VUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJdHYxID0gZHVrX2dldF90dmFsKHRociwgaWR4 MSk7CisJdHYyID0gZHVrX2dldF90dmFsKHRociwgaWR4Mik7CisJaWYgKCh0djEgPT0gTlVMTCkg fHwgKHR2MiA9PSBOVUxMKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBObyBjb2VyY2lvbnMg b3Igb3RoZXIgc2lkZSBlZmZlY3RzLCBzbyBzYWZlICovCisJcmV0dXJuIGR1a19qc19zdHJpY3Rf ZXF1YWxzKHR2MSwgdHYyKTsKK30KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX3NhbWV2 YWx1ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4MSwgZHVrX2lkeF90IGlkeDIpIHsK KwlkdWtfdHZhbCAqdHYxLCAqdHYyOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CXR2MSA9IGR1a19nZXRfdHZhbCh0aHIsIGlkeDEpOworCXR2MiA9IGR1a19nZXRfdHZhbCh0aHIs IGlkeDIpOworCWlmICgodHYxID09IE5VTEwpIHx8ICh0djIgPT0gTlVMTCkpIHsKKwkJcmV0dXJu IDA7CisJfQorCisJLyogTm8gY29lcmNpb25zIG9yIG90aGVyIHNpZGUgZWZmZWN0cywgc28gc2Fm ZSAqLworCXJldHVybiBkdWtfanNfc2FtZXZhbHVlKHR2MSwgdHYyKTsKK30KKworLyoKKyAqICBp bnN0YW5jZW9mCisgKi8KKworRFVLX0VYVEVSTkFMIGR1a19ib29sX3QgZHVrX2luc3RhbmNlb2Yo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeDEsIGR1a19pZHhfdCBpZHgyKSB7CisJZHVr X3R2YWwgKnR2MSwgKnR2MjsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwkvKiBJ bmRleCB2YWxpZGF0aW9uIGlzIHN0cmljdCwgd2hpY2ggZGlmZmVycyBmcm9tIGR1a19lcXVhbHMo KS4KKwkgKiBUaGUgc3RyaWN0IGJlaGF2aW9yIG1pbWljcyBob3cgaW5zdGFuY2VvZiBpdHNlbGYg d29ya3MsIGUuZy4KKwkgKiBpdCBpcyBhIFR5cGVFcnJvciBpZiBydmFsIGlzIG5vdCBhIC1jYWxs YWJsZS0gb2JqZWN0LiAgSXQgd291bGQKKwkgKiBiZSBzb21ld2hhdCBpbmNvbnNpc3RlbnQgaWYg cnZhbCB3b3VsZCBiZSBhbGxvd2VkIHRvIGJlCisJICogbm9uLWV4aXN0ZW50IHdpdGhvdXQgYSBU eXBlRXJyb3IuCisJICovCisJdHYxID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGlkeDEpOworCURV S19BU1NFUlQodHYxICE9IE5VTEwpOworCXR2MiA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCBpZHgy KTsKKwlEVUtfQVNTRVJUKHR2MiAhPSBOVUxMKTsKKworCXJldHVybiBkdWtfanNfaW5zdGFuY2Vv Zih0aHIsIHR2MSwgdHYyKTsKK30KKworLyoKKyAqICBMaWdodGZ1bmMKKyAqLworCitEVUtfSU5U RVJOQUwgdm9pZCBkdWtfcHVzaF9saWdodGZ1bmNfbmFtZV9yYXcoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2NfZnVuY3Rpb24gZnVuYywgZHVrX3NtYWxsX3VpbnRfdCBsZl9mbGFncykgeworCS8qIExp Z2h0ZnVuYyBuYW1lLCBpbmNsdWRlcyBEdWt0YXBlL0MgbmF0aXZlIGZ1bmN0aW9uIHBvaW50ZXIs IHdoaWNoCisJICogY2FuIG9mdGVuIGJlIHVzZWQgdG8gbG9jYXRlIHRoZSBmdW5jdGlvbiBmcm9t IGEgc3ltYm9sIHRhYmxlLgorCSAqIFRoZSBuYW1lIGFsc28gaW5jbHVkZXMgdGhlIDE2LWJpdCBk dWtfdHZhbCBmbGFncyBmaWVsZCBiZWNhdXNlIGl0CisJICogaW5jbHVkZXMgdGhlIG1hZ2ljIHZh bHVlLiAgQmVjYXVzZSBhIHNpbmdsZSBuYXRpdmUgZnVuY3Rpb24gb2Z0ZW4KKwkgKiBwcm92aWRl cyBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSBkZXBlbmRpbmcgb24gdGhlIG1hZ2ljIHZhbHVlLCBp dAorCSAqIHNlZW1zIHJlYXNvbmFibHkgdG8gaW5jbHVkZSBpdCBpbiB0aGUgbmFtZS4KKwkgKgor CSAqIE9uIHRoZSBvdGhlciBoYW5kLCBhIGNvbXBsaWNhdGVkIG5hbWUgaW5jcmVhc2VzIHN0cmlu ZyB0YWJsZQorCSAqIHByZXNzdXJlIGluIGxvdyBtZW1vcnkgZW52aXJvbm1lbnRzIChidXQgb25s eSB3aGVuIGZ1bmN0aW9uIG5hbWUKKwkgKiBpcyBhY2Nlc3NlZCkuCisJICovCisKKwlEVUtfQVNT RVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJsaWdodF8iKTsK KwlkdWtfcHVzaF9zdHJpbmdfZnVuY3B0cih0aHIsIChkdWtfdWludDhfdCAqKSAmZnVuYywgc2l6 ZW9mKGZ1bmMpKTsKKwlkdWtfcHVzaF9zcHJpbnRmKHRociwgIl8lMDR4IiwgKHVuc2lnbmVkIGlu dCkgbGZfZmxhZ3MpOworCWR1a19jb25jYXQodGhyLCAzKTsKK30KKworRFVLX0lOVEVSTkFMIHZv aWQgZHVrX3B1c2hfbGlnaHRmdW5jX25hbWUoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2 KSB7CisJZHVrX2NfZnVuY3Rpb24gZnVuYzsKKwlkdWtfc21hbGxfdWludF90IGxmX2ZsYWdzOwor CisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX0xJ R0hURlVOQyh0dikpOworCisJRFVLX1RWQUxfR0VUX0xJR0hURlVOQyh0diwgZnVuYywgbGZfZmxh Z3MpOworCWR1a19wdXNoX2xpZ2h0ZnVuY19uYW1lX3Jhdyh0aHIsIGZ1bmMsIGxmX2ZsYWdzKTsK K30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3B1c2hfbGlnaHRmdW5jX3Rvc3RyaW5nKGR1a19o dGhyZWFkICp0aHIsIGR1a190dmFsICp0dikgeworCWR1a19jX2Z1bmN0aW9uIGZ1bmM7CisJZHVr X3NtYWxsX3VpbnRfdCBsZl9mbGFnczsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJ RFVLX0FTU0VSVChEVUtfVFZBTF9JU19MSUdIVEZVTkModHYpKTsKKworCURVS19UVkFMX0dFVF9M SUdIVEZVTkModHYsIGZ1bmMsIGxmX2ZsYWdzKTsgIC8qIHJlYWQgYmVmb3JlICd0dicgcG90ZW50 aWFsbHkgaW52YWxpZGF0ZWQgKi8KKwlkdWtfcHVzaF9saXRlcmFsKHRociwgImZ1bmN0aW9uICIp OworCWR1a19wdXNoX2xpZ2h0ZnVuY19uYW1lX3Jhdyh0aHIsIGZ1bmMsIGxmX2ZsYWdzKTsKKwlk dWtfcHVzaF9saXRlcmFsKHRociwgIigpIHsgW2xpZ2h0ZnVuYyBjb2RlXSB9Iik7CisJZHVrX2Nv bmNhdCh0aHIsIDMpOworfQorCisvKgorICogIEZ1bmN0aW9uIHBvaW50ZXJzCisgKgorICogIFBy aW50aW5nIGZ1bmN0aW9uIHBvaW50ZXJzIGlzIG5vbi1wb3J0YWJsZSwgc28gd2UgZG8gdGhhdCBi eSBoZXggcHJpbnRpbmcKKyAqICBieXRlcyBmcm9tIG1lbW9yeS4KKyAqLworCitEVUtfSU5URVJO QUwgdm9pZCBkdWtfcHVzaF9zdHJpbmdfZnVuY3B0cihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWlu dDhfdCAqcHRyLCBkdWtfc2l6ZV90IHN6KSB7CisJZHVrX3VpbnQ4X3QgYnVmWzMyICogMl07CisJ ZHVrX3VpbnQ4X3QgKnAsICpxOworCWR1a19zbWFsbF91aW50X3QgaTsKKwlkdWtfc21hbGxfdWlu dF90IHQ7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoc3ogPD0g MzIpOyAgLyogc2FuaXR5IGxpbWl0IGZvciBmdW5jdGlvbiBwb2ludGVyIHNpemUgKi8KKworCXAg PSBidWY7CisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVHRVJfTEUpCisJcSA9IHB0ciArIHN6Owor I2Vsc2UKKwlxID0gcHRyOworI2VuZGlmCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKyNp ZiBkZWZpbmVkKERVS19VU0VfSU5URUdFUl9MRSkKKwkJdCA9ICooLS1xKTsKKyNlbHNlCisJCXQg PSAqKHErKyk7CisjZW5kaWYKKwkJKnArKyA9IGR1a19sY19kaWdpdHNbdCA+PiA0XTsKKwkJKnAr KyA9IGR1a19sY19kaWdpdHNbdCAmIDB4MGZdOworCX0KKworCWR1a19wdXNoX2xzdHJpbmcodGhy LCAoY29uc3QgY2hhciAqKSBidWYsIHN6ICogMik7Cit9CisKKy8qCisgKiAgUHVzaCByZWFkYWJs ZSBzdHJpbmcgc3VtbWFyaXppbmcgZHVrX3R2YWwuICBUaGUgb3BlcmF0aW9uIGlzIHNpZGUgZWZm ZWN0CisgKiAgZnJlZSBhbmQgd2lsbCBvbmx5IHRocm93IGZyb20gaW50ZXJuYWwgZXJyb3JzIChl LmcuIG91dCBvZiBtZW1vcnkpLgorICogIFRoaXMgaXMgdXNlZCBieSBlLmcuIHByb3BlcnR5IGFj Y2VzcyBjb2RlIHRvIHN1bW1hcml6ZSBhIGtleS9iYXNlIHNhZmVseSwKKyAqICBhbmQgaXMgbm90 IGludGVuZGVkIHRvIGJlIGZhc3QgKGJ1dCBzbWFsbCBhbmQgc2FmZSkuCisgKi8KKworLyogU3Ry aW5nIGxpbWl0cyBmb3Igc3VtbWFyeSBzdHJpbmdzLiAqLworI2RlZmluZSBEVUtfX1JFQURBQkxF X1NVTU1BUllfTUFYQ0hBUlMgOTYgIC8qIG1heGltdW0gc3VwcG9ydGVkIGJ5IGhlbHBlciAqLwor I2RlZmluZSBEVUtfX1JFQURBQkxFX1NUUklOR19NQVhDSEFSUyAgMzIgIC8qIGZvciBzdHJpbmdz L3N5bWJvbHMgKi8KKyNkZWZpbmUgRFVLX19SRUFEQUJMRV9FUlJNU0dfTUFYQ0hBUlMgIDk2ICAv KiBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKworLyogU3RyaW5nIHNhbml0aXplciB3aGljaCBlc2Nh cGVzIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgYSBmZXcgb3RoZXIKKyAqIEFTQ0lJIGNo YXJhY3RlcnMsIHBhc3NlcyBVbmljb2RlIGFzIGlzLCBhbmQgcmVwbGFjZXMgaW52YWxpZCBVVEYt OCB3aXRoCisgKiBxdWVzdGlvbiBtYXJrcy4gIE5vIGVycm9ycyBhcmUgdGhyb3duIGZvciBhbnkg aW5wdXQgc3RyaW5nLCBleGNlcHQgaW4gb3V0CisgKiBvZiBtZW1vcnkgc2l0dWF0aW9ucy4KKyAq LworRFVLX0xPQ0FMIHZvaWQgZHVrX19wdXNoX2hzdHJpbmdfcmVhZGFibGVfdW5pY29kZShkdWtf aHRocmVhZCAqdGhyLCBkdWtfaHN0cmluZyAqaF9pbnB1dCwgZHVrX3NtYWxsX3VpbnRfdCBtYXhj aGFycykgeworCWNvbnN0IGR1a191aW50OF90ICpwLCAqcF9zdGFydCwgKnBfZW5kOworCWR1a191 aW50OF90IGJ1ZltEVUtfVU5JQ09ERV9NQVhfWFVURjhfTEVOR1RIICogRFVLX19SRUFEQUJMRV9T VU1NQVJZX01BWENIQVJTICsKKwkgICAgICAgICAgICAgICAgMiAvKnF1b3RlcyovICsgMyAvKnBl cmlvZHMqL107CisJZHVrX3VpbnQ4X3QgKnE7CisJZHVrX3Vjb2RlcG9pbnRfdCBjcDsKKwlkdWtf c21hbGxfdWludF90IG5jaGFyczsKKworCURVS19BU1NFUlRfQ1RYX1ZBTElEKHRocik7CisJRFVL X0FTU0VSVChoX2lucHV0ICE9IE5VTEwpOworCURVS19BU1NFUlQobWF4Y2hhcnMgPD0gRFVLX19S RUFEQUJMRV9TVU1NQVJZX01BWENIQVJTKTsKKworCXBfc3RhcnQgPSAoY29uc3QgZHVrX3VpbnQ4 X3QgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9pbnB1dCk7CisJcF9lbmQgPSBwX3N0YXJ0ICsg RFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaF9pbnB1dCk7CisJcCA9IHBfc3RhcnQ7CisJcSA9IGJ1 ZjsKKworCW5jaGFycyA9IDA7CisJKnErKyA9IChkdWtfdWludDhfdCkgRFVLX0FTQ19TSU5HTEVR VU9URTsKKwlmb3IgKDs7KSB7CisJCWlmIChwID49IHBfZW5kKSB7CisJCQlicmVhazsKKwkJfQor CQlpZiAobmNoYXJzID09IG1heGNoYXJzKSB7CisJCQkqcSsrID0gKGR1a191aW50OF90KSBEVUtf QVNDX1BFUklPRDsKKwkJCSpxKysgPSAoZHVrX3VpbnQ4X3QpIERVS19BU0NfUEVSSU9EOworCQkJ KnErKyA9IChkdWtfdWludDhfdCkgRFVLX0FTQ19QRVJJT0Q7CisJCQlicmVhazsKKwkJfQorCQlp ZiAoZHVrX3VuaWNvZGVfZGVjb2RlX3h1dGY4KHRociwgJnAsIHBfc3RhcnQsIHBfZW5kLCAmY3Ap KSB7CisJCQlpZiAoY3AgPCAweDIwIHx8IGNwID09IDB4N2YgfHwgY3AgPT0gRFVLX0FTQ19TSU5H TEVRVU9URSB8fCBjcCA9PSBEVUtfQVNDX0JBQ0tTTEFTSCkgeworCQkJCURVS19BU1NFUlQoRFVL X1VOSUNPREVfTUFYX1hVVEY4X0xFTkdUSCA+PSA0KTsgIC8qIGVzdGltYXRlIGlzIHZhbGlkICov CisJCQkJRFVLX0FTU0VSVCgoY3AgPj4gNCkgPD0gMHgwZik7CisJCQkJKnErKyA9IChkdWtfdWlu dDhfdCkgRFVLX0FTQ19CQUNLU0xBU0g7CisJCQkJKnErKyA9IChkdWtfdWludDhfdCkgRFVLX0FT Q19MQ19YOworCQkJCSpxKysgPSAoZHVrX3VpbnQ4X3QpIGR1a19sY19kaWdpdHNbY3AgPj4gNF07 CisJCQkJKnErKyA9IChkdWtfdWludDhfdCkgZHVrX2xjX2RpZ2l0c1tjcCAmIDB4MGZdOworCQkJ fSBlbHNlIHsKKwkJCQlxICs9IGR1a191bmljb2RlX2VuY29kZV94dXRmOChjcCwgcSk7CisJCQl9 CisJCX0gZWxzZSB7CisJCQlwKys7ICAvKiBhZHZhbmNlIG1hbnVhbGx5ICovCisJCQkqcSsrID0g KGR1a191aW50OF90KSBEVUtfQVNDX1FVRVNUSU9OOworCQl9CisJCW5jaGFycysrOworCX0KKwkq cSsrID0gKGR1a191aW50OF90KSBEVUtfQVNDX1NJTkdMRVFVT1RFOworCisJZHVrX3B1c2hfbHN0 cmluZyh0aHIsIChjb25zdCBjaGFyICopIGJ1ZiwgKGR1a19zaXplX3QpIChxIC0gYnVmKSk7Cit9 CisKK0RVS19MT0NBTCBjb25zdCBjaGFyICpkdWtfX3B1c2hfc3RyaW5nX3R2YWxfcmVhZGFibGUo ZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2LCBkdWtfYm9vbF90IGVycm9yX2F3YXJlKSB7 CisJRFVLX0FTU0VSVF9DVFhfVkFMSUQodGhyKTsKKwkvKiAndHYnIG1heSBiZSBOVUxMICovCisK KwlpZiAodHYgPT0gTlVMTCkgeworCQlkdWtfcHVzaF9saXRlcmFsKHRociwgIm5vbmUiKTsKKwl9 IGVsc2UgeworCQlzd2l0Y2ggKERVS19UVkFMX0dFVF9UQUcodHYpKSB7CisJCWNhc2UgRFVLX1RB R19TVFJJTkc6IHsKKwkJCWR1a19oc3RyaW5nICpoID0gRFVLX1RWQUxfR0VUX1NUUklORyh0dik7 CisJCQlpZiAoRFVLX0hTVFJJTkdfSEFTX1NZTUJPTChoKSkgeworCQkJCS8qIFhYWDogc3RyaW5n IHN1bW1hcnkgcHJvZHVjZXMgcXVlc3Rpb24gbWFya3MKKwkJCQkgKiBzbyB0aGlzIGlzIG5vdCB2 ZXJ5IGlkZWFsLgorCQkJCSAqLworCQkJCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiW1N5bWJvbCAi KTsKKwkJCQlkdWtfcHVzaF9zdHJpbmcodGhyLCBkdWtfX2dldF9zeW1ib2xfdHlwZV9zdHJpbmco aCkpOworCQkJCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiICIpOworCQkJCWR1a19fcHVzaF9oc3Ry aW5nX3JlYWRhYmxlX3VuaWNvZGUodGhyLCBoLCBEVUtfX1JFQURBQkxFX1NUUklOR19NQVhDSEFS Uyk7CisJCQkJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJdIik7CisJCQkJZHVrX2NvbmNhdCh0aHIs IDUpOworCQkJCWJyZWFrOworCQkJfQorCQkJZHVrX19wdXNoX2hzdHJpbmdfcmVhZGFibGVfdW5p Y29kZSh0aHIsIGgsIERVS19fUkVBREFCTEVfU1RSSU5HX01BWENIQVJTKTsKKwkJCWJyZWFrOwor CQl9CisJCWNhc2UgRFVLX1RBR19PQkpFQ1Q6IHsKKwkJCWR1a19ob2JqZWN0ICpoID0gRFVLX1RW QUxfR0VUX09CSkVDVCh0dik7CisJCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKwkJCWlmIChl cnJvcl9hd2FyZSAmJgorCQkJICAgIGR1a19ob2JqZWN0X3Byb3RvdHlwZV9jaGFpbl9jb250YWlu cyh0aHIsIGgsIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfRVJST1JfUFJPVE9UWVBFXSwgMSAvKmln bm9yZV9sb29wKi8pKSB7CisJCQkJLyogR2V0IGVycm9yIG1lc3NhZ2UgaW4gYSBzaWRlIGVmZmVj dCBmcmVlIHdheSBpZgorCQkJCSAqIHBvc3NpYmxlOyBpZiBub3QsIHN1bW1hcml6ZSBhcyBhIGdl bmVyaWMgb2JqZWN0LgorCQkJCSAqIEVycm9yIG1lc3NhZ2UgY3VycmVudGx5IGdldHMgcXVvdGVk LgorCQkJCSAqLworCQkJCS8qIFhYWDogYmV0dGVyIGludGVybmFsIGdldHByb3AgY2FsbDsgZ2V0 IHdpdGhvdXQgc2lkZSBlZmZlY3RzCisJCQkJICogYnV0IHRyYXZlcnNlIGluaGVyaXRhbmNlIGNo YWluLgorCQkJCSAqLworCQkJCWR1a190dmFsICp0dl9tc2c7CisJCQkJdHZfbXNnID0gZHVrX2hv YmplY3RfZmluZF9leGlzdGluZ19lbnRyeV90dmFsX3B0cih0aHItPmhlYXAsIGgsIERVS19IVEhS RUFEX1NUUklOR19NRVNTQUdFKHRocikpOworCQkJCWlmICh0dl9tc2cgIT0gTlVMTCAmJiBEVUtf VFZBTF9JU19TVFJJTkcodHZfbXNnKSkgeworCQkJCQkvKiBJdCdzIGNyaXRpY2FsIHRvIGF2b2lk IHJlY3Vyc2lvbiBzbworCQkJCQkgKiBvbmx5IHN1bW1hcml6ZSBhIHN0cmluZyAubWVzc2FnZS4K KwkJCQkJICovCisJCQkJCWR1a19fcHVzaF9oc3RyaW5nX3JlYWRhYmxlX3VuaWNvZGUodGhyLCBE VUtfVFZBTF9HRVRfU1RSSU5HKHR2X21zZyksIERVS19fUkVBREFCTEVfRVJSTVNHX01BWENIQVJT KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZHVrX3B1c2hfY2xhc3Nfc3RyaW5nX3R2 YWwodGhyLCB0diwgMSAvKmF2b2lkX3NpZGVfZWZmZWN0cyovKTsKKwkJCWJyZWFrOworCQl9CisJ CWNhc2UgRFVLX1RBR19CVUZGRVI6IHsKKwkJCS8qIFdoaWxlIHBsYWluIGJ1ZmZlcnMgbWltaWMg VWludDhBcnJheXMsIHRoZXkgc3VtbWFyaXplIGRpZmZlcmVudGx5LgorCQkJICogVGhpcyBpcyB1 c2VmdWwgc28gdGhhdCB0aGUgc3VtbWFyaXplZCBzdHJpbmcgYWNjdXJhdGVseSByZWZsZWN0cyB0 aGUKKwkJCSAqIGludGVybmFsIHR5cGUgd2hpY2ggbWF5IG1hdHRlciBmb3IgZmlndXJpbmcgb3V0 IGJ1Z3MgZXRjLgorCQkJICovCisJCQkvKiBYWFg6IEhleCBlbmNvZGVkLCBsZW5ndGggbGltaXRl ZCBidWZmZXIgc3VtbWFyeSBoZXJlPyAqLworCQkJZHVrX2hidWZmZXIgKmggPSBEVUtfVFZBTF9H RVRfQlVGRkVSKHR2KTsKKwkJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJCWR1a19wdXNoX3Nw cmludGYodGhyLCAiW2J1ZmZlcjolbGRdIiwgKGxvbmcpIERVS19IQlVGRkVSX0dFVF9TSVpFKGgp KTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX1RBR19QT0lOVEVSOiB7CisJCQkvKiBTdXJy b3VuZCB3aXRoIHBhcmVudGhlc2VzIGxpa2UgaW4gSlgsIGVuc3VyZXMgTlVMTCBwb2ludGVyCisJ CQkgKiBpcyBkaXN0aW5ndWlzaGFibGUgZnJvbSBudWxsIHZhbHVlICgiKG51bGwpIiB2cyAibnVs bCIpLgorCQkJICovCisJCQlkdWtfcHVzaF90dmFsKHRociwgdHYpOworCQkJZHVrX3B1c2hfc3By aW50Zih0aHIsICIoJXMpIiwgZHVrX3RvX3N0cmluZyh0aHIsIC0xKSk7CisJCQlkdWtfcmVtb3Zl X20yKHRocik7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OiB7CisJCQlkdWtfcHVzaF90dmFs KHRociwgdHYpOworCQkJYnJlYWs7CisJCX0KKwkJfQorCX0KKworCXJldHVybiBkdWtfdG9fc3Ry aW5nKHRociwgLTEpOworfQorRFVLX0lOVEVSTkFMIGNvbnN0IGNoYXIgKmR1a19wdXNoX3N0cmlu Z190dmFsX3JlYWRhYmxlKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dikgeworCURVS19B U1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a19fcHVzaF9zdHJpbmdfdHZhbF9yZWFk YWJsZSh0aHIsIHR2LCAwIC8qZXJyb3JfYXdhcmUqLyk7Cit9CisKK0RVS19JTlRFUk5BTCBjb25z dCBjaGFyICpkdWtfcHVzaF9zdHJpbmdfcmVhZGFibGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lk eF90IGlkeCkgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJcmV0dXJuIGR1a19wdXNo X3N0cmluZ190dmFsX3JlYWRhYmxlKHRociwgZHVrX2dldF90dmFsKHRociwgaWR4KSk7Cit9CisK K0RVS19JTlRFUk5BTCBjb25zdCBjaGFyICpkdWtfcHVzaF9zdHJpbmdfdHZhbF9yZWFkYWJsZV9l cnJvcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpIHsKKwlEVUtfQVNTRVJUX0FQSV9F TlRSWSh0aHIpOworCXJldHVybiBkdWtfX3B1c2hfc3RyaW5nX3R2YWxfcmVhZGFibGUodGhyLCB0 diwgMSAvKmVycm9yX2F3YXJlKi8pOworfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcHVzaF9z eW1ib2xfZGVzY3JpcHRpdmVfc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpo KSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnBfZW5kOwor CWNvbnN0IGR1a191aW50OF90ICpxOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwor CS8qIC50b1N0cmluZygpICovCisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJTeW1ib2woIik7CisJ cCA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoKTsKKwlwX2Vu ZCA9IHAgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoKTsKKwlEVUtfQVNTRVJUKHBbMF0gPT0g MHhmZiB8fCAocFswXSAmIDB4YzApID09IDB4ODApOworCXArKzsKKwlmb3IgKHEgPSBwOyBxIDwg cF9lbmQ7IHErKykgeworCQlpZiAoKnEgPT0gMHhmZlUpIHsKKwkJCS8qIFRlcm1pbmF0ZSBlaXRo ZXIgYXQgZW5kLW9mLXN0cmluZyAoYnV0IE5VTCBNVVNUCisJCQkgKiBiZSBhY2NlcHRlZCB3aXRo b3V0IHRlcm1pbmF0aW5nIGRlc2NyaXB0aW9uKSBvcgorCQkJICogMHhGRiwgd2hpY2ggaXMgdXNl ZCB0byBtYXJrIHN0YXJ0IG9mIHVuaXF1ZSB0cmFpbGVyCisJCQkgKiAoYW5kIGNhbm5vdCBvY2N1 ciBpbiBDRVNVLTggLyBleHRlbmRlZCBVVEYtOCkuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJ fQorCWR1a19wdXNoX2xzdHJpbmcodGhyLCAoY29uc3QgY2hhciAqKSBwLCAoZHVrX3NpemVfdCkg KHEgLSBwKSk7CisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICIpIik7CisJZHVrX2NvbmNhdCh0aHIs IDMpOworfQorCisvKgorICogIEZ1bmN0aW9ucworICovCisKKyNpZiAwICAvKiBub3QgdXNlZCB5 ZXQgKi8KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19wdXNoX2huYXRmdW5jX25hbWUoZHVrX2h0aHJl YWQgKnRociwgZHVrX2huYXRmdW5jICpoKSB7CisJZHVrX2NfZnVuY3Rpb24gZnVuYzsKKworCURV S19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCURVS19B U1NFUlQoRFVLX0hPQkpFQ1RfSVNfTkFURlVOQygoZHVrX2hvYmplY3QgKikgaCkpOworCisJZHVr X3B1c2hfc3ByaW50Zih0aHIsICJuYXRpdmVfIik7CisJZnVuYyA9IGgtPmZ1bmM7CisJZHVrX3B1 c2hfc3RyaW5nX2Z1bmNwdHIodGhyLCAoZHVrX3VpbnQ4X3QgKikgJmZ1bmMsIHNpemVvZihmdW5j KSk7CisJZHVrX3B1c2hfc3ByaW50Zih0aHIsICJfJTA0eF8lMDR4IiwKKwkgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBpbnQpIChkdWtfdWludDE2X3QpIGgtPm5hcmdzLAorCSAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGludCkgKGR1a191aW50MTZfdCkgaC0+bWFnaWMpOworCWR1a19jb25j YXQodGhyLCAzKTsKK30KKyNlbmRpZgorCisvKgorICogIGR1a190dmFsIHNsaWNlIGNvcHkKKyAq LworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfY29weV90dmFsc19pbmNyZWYoZHVrX2h0aHJlYWQg KnRociwgZHVrX3R2YWwgKnR2X2RzdCwgZHVrX3R2YWwgKnR2X3NyYywgZHVrX3NpemVfdCBjb3Vu dCkgeworCWR1a190dmFsICp0djsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVL X1VOUkVGKHRocik7CisJRFVLX0FTU0VSVChjb3VudCAqIHNpemVvZihkdWtfdHZhbCkgPj0gY291 bnQpOyAgLyogbm8gd3JhcCAqLworCisJZHVrX21lbWNweV91bnNhZmUoKHZvaWQgKikgdHZfZHN0 LCAoY29uc3Qgdm9pZCAqKSB0dl9zcmMsIGNvdW50ICogc2l6ZW9mKGR1a190dmFsKSk7CisKKwl0 diA9IHR2X2RzdDsKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJRFVLX1RWQUxfSU5DUkVGKHRo ciwgdHYpOworCQl0disrOworCX0KK30KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVm IERVS19fQVNTRVJUX1NQQUNFCisjdW5kZWYgRFVLX19DSEVDS19TUEFDRQorI3VuZGVmIERVS19f RVJST1JfU1RBU0hfU0hBUkVECisjdW5kZWYgRFVLX19QQUNLX0FSR1MKKyN1bmRlZiBEVUtfX1JF QURBQkxFX0VSUk1TR19NQVhDSEFSUworI3VuZGVmIERVS19fUkVBREFCTEVfU1RSSU5HX01BWENI QVJTCisjdW5kZWYgRFVLX19SRUFEQUJMRV9TVU1NQVJZX01BWENIQVJTCisvKgorICogIFN0cmlu ZyBtYW5pcHVsYXRpb24KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJl YWR5IGluY2x1ZGVkICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fY29uY2F0X2FuZF9qb2luX2hl bHBlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgY291bnRfaW4sIGR1a19ib29sX3QgaXNf am9pbikgeworCWR1a191aW50X3QgY291bnQ7CisJZHVrX3VpbnRfdCBpOworCWR1a19zaXplX3Qg aWR4OworCWR1a19zaXplX3QgbGVuOworCWR1a19oc3RyaW5nICpoOworCWR1a191aW50OF90ICpi dWY7CisKKwlEVUtfQVNTRVJUX0NUWF9WQUxJRCh0aHIpOworCisJaWYgKERVS19VTkxJS0VMWShj b3VudF9pbiA8PSAwKSkgeworCQlpZiAoY291bnRfaW4gPCAwKSB7CisJCQlEVUtfRVJST1JfUkFO R0VfSU5WQUxJRF9DT1VOVCh0aHIpOworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQl9 CisJCURVS19BU1NFUlQoY291bnRfaW4gPT0gMCk7CisJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHko dGhyKTsKKwkJcmV0dXJuOworCX0KKwljb3VudCA9IChkdWtfdWludF90KSBjb3VudF9pbjsKKwor CWlmIChpc19qb2luKSB7CisJCWR1a19zaXplX3QgdDEsIHQyLCBsaW1pdDsKKwkJaCA9IGR1a190 b19oc3RyaW5nKHRociwgLSgoZHVrX2lkeF90KSBjb3VudCkgLSAxKTsKKwkJRFVLX0FTU0VSVCho ICE9IE5VTEwpOworCisJCS8qIEEgYml0IHRyaWNreSBvdmVyZmxvdyB0ZXN0LCBzZWUgZG9jL2Nv ZGUtaXNzdWVzLnJzdC4gKi8KKwkJdDEgPSAoZHVrX3NpemVfdCkgRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oaCk7CisJCXQyID0gKGR1a19zaXplX3QpIChjb3VudCAtIDEpOworCQlsaW1pdCA9IChk dWtfc2l6ZV90KSBEVUtfSFNUUklOR19NQVhfQllURUxFTjsKKwkJaWYgKERVS19VTkxJS0VMWSh0 MiAhPSAwICYmIHQxID4gbGltaXQgLyB0MikpIHsKKwkJCS8qIENvbWJpbmVkIHNpemUgb2Ygc2Vw YXJhdG9ycyBhbHJlYWR5IG92ZXJmbG93cy4gKi8KKwkJCWdvdG8gZXJyb3Jfb3ZlcmZsb3c7CisJ CX0KKwkJbGVuID0gKGR1a19zaXplX3QpICh0MSAqIHQyKTsKKwl9IGVsc2UgeworCQlsZW4gPSAo ZHVrX3NpemVfdCkgMDsKKwl9CisKKwlmb3IgKGkgPSBjb3VudDsgaSA+PSAxOyBpLS0pIHsKKwkJ ZHVrX3NpemVfdCBuZXdfbGVuOworCQloID0gZHVrX3RvX2hzdHJpbmcodGhyLCAtKChkdWtfaWR4 X3QpIGkpKTsKKwkJbmV3X2xlbiA9IGxlbiArIChkdWtfc2l6ZV90KSBEVUtfSFNUUklOR19HRVRf QllURUxFTihoKTsKKworCQkvKiBJbXBvc2UgYSBzdHJpbmcgbWF4aW11bSBsZW5ndGgsIG5lZWQg dG8gaGFuZGxlIG92ZXJmbG93CisJCSAqIGNvcnJlY3RseS4KKwkJICovCisJCWlmIChuZXdfbGVu IDwgbGVuIHx8ICAvKiB3cmFwcGVkICovCisJCSAgICBuZXdfbGVuID4gKGR1a19zaXplX3QpIERV S19IU1RSSU5HX01BWF9CWVRFTEVOKSB7CisJCQlnb3RvIGVycm9yX292ZXJmbG93OworCQl9CisJ CWxlbiA9IG5ld19sZW47CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoImpvaW4vY29uY2F0 ICVsdSBzdHJpbmdzLCB0b3RhbCBsZW5ndGggJWx1IGJ5dGVzIiwKKwkgICAgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZykgY291bnQsICh1bnNpZ25lZCBsb25nKSBsZW4pKTsKKworCS8q IFVzZSBzdGFjayBhbGxvY2F0ZWQgYnVmZmVyIHRvIGVuc3VyZSByZWFjaGFiaWxpdHkgaW4gZXJy b3JzCisJICogKGUuZy4gaW50ZXJuIGVycm9yKS4KKwkgKi8KKwlidWYgPSAoZHVrX3VpbnQ4X3Qg KikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyX25vemVybyh0aHIsIGxlbik7CisJRFVLX0FTU0VSVChi dWYgIT0gTlVMTCk7CisKKwkvKiBbIC4uLiAoc2VwKSBzdHIxIHN0cjIgLi4uIHN0ck4gYnVmIF0g Ki8KKworCWlkeCA9IDA7CisJZm9yIChpID0gY291bnQ7IGkgPj0gMTsgaS0tKSB7CisJCWlmIChp c19qb2luICYmIGkgIT0gY291bnQpIHsKKwkJCWggPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwg LSgoZHVrX2lkeF90KSBjb3VudCkgLSAyKTsgIC8qIGV4dHJhIC0xIGZvciBidWZmZXIgKi8KKwkJ CWR1a19tZW1jcHkoYnVmICsgaWR4LCBEVUtfSFNUUklOR19HRVRfREFUQShoKSwgRFVLX0hTVFJJ TkdfR0VUX0JZVEVMRU4oaCkpOworCQkJaWR4ICs9IERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgp OworCQl9CisJCWggPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwgLSgoZHVrX2lkeF90KSBpKSAt IDEpOyAgLyogZXh0cmEgLTEgZm9yIGJ1ZmZlciAqLworCQlkdWtfbWVtY3B5KGJ1ZiArIGlkeCwg RFVLX0hTVFJJTkdfR0VUX0RBVEEoaCksIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpKTsKKwkJ aWR4ICs9IERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpOworCX0KKworCURVS19BU1NFUlQoaWR4 ID09IGxlbik7CisKKwkvKiBbIC4uLiAoc2VwKSBzdHIxIHN0cjIgLi4uIHN0ck4gYnVmIF0gKi8K KworCS8qIEdldCByaWQgb2YgdGhlIHN0cmluZ3MgZWFybHkgdG8gbWluaW1pemUgbWVtb3J5IHVz ZSBiZWZvcmUgaW50ZXJuLiAqLworCisJaWYgKGlzX2pvaW4pIHsKKwkJZHVrX3JlcGxhY2UodGhy LCAtKChkdWtfaWR4X3QpIGNvdW50KSAtIDIpOyAgLyogb3ZlcndyaXRlIHNlcCAqLworCQlkdWtf cG9wX24odGhyLCAoZHVrX2lkeF90KSBjb3VudCk7CisJfSBlbHNlIHsKKwkJZHVrX3JlcGxhY2Uo dGhyLCAtKChkdWtfaWR4X3QpIGNvdW50KSAtIDEpOyAgLyogb3ZlcndyaXRlIHN0cjEgKi8KKwkJ ZHVrX3BvcF9uKHRociwgKGR1a19pZHhfdCkgKGNvdW50IC0gMSkpOworCX0KKworCS8qIFsgLi4u IGJ1ZiBdICovCisKKwkodm9pZCkgZHVrX2J1ZmZlcl90b19zdHJpbmcodGhyLCAtMSk7ICAvKiBT YWZlIGlmIGlucHV0cyBhcmUgc2FmZS4gKi8KKworCS8qIFsgLi4uIHJlcyBdICovCisJcmV0dXJu OworCisgZXJyb3Jfb3ZlcmZsb3c6CisJRFVLX0VSUk9SX1JBTkdFKHRociwgRFVLX1NUUl9SRVNV TFRfVE9PX0xPTkcpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworRFVLX0VYVEVS TkFMIHZvaWQgZHVrX2NvbmNhdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgY291bnQpIHsK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX19jb25jYXRfYW5kX2pvaW5faGVs cGVyKHRociwgY291bnQsIDAgLyppc19qb2luKi8pOworfQorCisjaWYgZGVmaW5lZChEVUtfVVNF X1BSRUZFUl9TSVpFKQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2NvbmNhdF8yKGR1a19odGhyZWFk ICp0aHIpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCWR1a19jb25jYXQodGhyLCAy KTsKK30KKyNlbHNlICAvKiBEVUtfVVNFX1BSRUZFUl9TSVpFICovCitEVUtfSU5URVJOQUwgdm9p ZCBkdWtfY29uY2F0XzIoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19oc3RyaW5nICpoMTsKKwlk dWtfaHN0cmluZyAqaDI7CisJZHVrX3VpbnQ4X3QgKmJ1ZjsKKwlkdWtfc2l6ZV90IGxlbjE7CisJ ZHVrX3NpemVfdCBsZW4yOworCWR1a19zaXplX3QgbGVuOworCisJRFVLX0FTU0VSVF9BUElfRU5U UlkodGhyKTsKKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gMik7ICAvKiBUcnVzdGVk IGNhbGxlci4gKi8KKworCWgxID0gZHVrX3RvX2hzdHJpbmcodGhyLCAtMik7CisJaDIgPSBkdWtf dG9faHN0cmluZyh0aHIsIC0xKTsKKwlsZW4xID0gKGR1a19zaXplX3QpIERVS19IU1RSSU5HX0dF VF9CWVRFTEVOKGgxKTsKKwlsZW4yID0gKGR1a19zaXplX3QpIERVS19IU1RSSU5HX0dFVF9CWVRF TEVOKGgyKTsKKwlsZW4gPSBsZW4xICsgbGVuMjsKKwlpZiAoRFVLX1VOTElLRUxZKGxlbiA8IGxl bjEgfHwgIC8qIHdyYXBwZWQgKi8KKwkgICAgICAgICAgICAgICAgIGxlbiA+IChkdWtfc2l6ZV90 KSBEVUtfSFNUUklOR19NQVhfQllURUxFTikpIHsKKwkJZ290byBlcnJvcl9vdmVyZmxvdzsKKwl9 CisJYnVmID0gKGR1a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhy LCBsZW4pOworCURVS19BU1NFUlQoYnVmICE9IE5VTEwpOworCisJZHVrX21lbWNweSgodm9pZCAq KSBidWYsIChjb25zdCB2b2lkICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgxKSwgKHNpemVfdCkg bGVuMSk7CisJZHVrX21lbWNweSgodm9pZCAqKSAoYnVmICsgbGVuMSksIChjb25zdCB2b2lkICop IERVS19IU1RSSU5HX0dFVF9EQVRBKGgyKSwgKHNpemVfdCkgbGVuMik7CisJKHZvaWQpIGR1a19i dWZmZXJfdG9fc3RyaW5nKHRociwgLTEpOyAgLyogU2FmZSBpZiBpbnB1dHMgYXJlIHNhZmUuICov CisKKwkvKiBbIC4uLiBzdHIxIHN0cjIgYnVmIF0gKi8KKworCWR1a19yZXBsYWNlKHRociwgLTMp OworCWR1a19wb3BfdW5zYWZlKHRocik7CisJcmV0dXJuOworCisgZXJyb3Jfb3ZlcmZsb3c6CisJ RFVLX0VSUk9SX1JBTkdFKHRociwgRFVLX1NUUl9SRVNVTFRfVE9PX0xPTkcpOworCURVS19XT19O T1JFVFVSTihyZXR1cm47KTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9QUkVGRVJfU0laRSAqLwor CitEVUtfRVhURVJOQUwgdm9pZCBkdWtfam9pbihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg Y291bnQpIHsKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJZHVrX19jb25jYXRfYW5k X2pvaW5faGVscGVyKHRociwgY291bnQsIDEgLyppc19qb2luKi8pOworfQorCisvKiBYWFg6IGNv dWxkIG1hcC9kZWNvZGUgYmUgdW5pZmllZCB3aXRoIGR1a191bmljb2RlX3N1cHBvcnQuYyBjb2Rl PworICogQ2FzZSBjb252ZXJzaW9uIG5lZWRzIGFsc28gdGhlIGNoYXJhY3RlciBzdXJyb3VuZGlu Z3MgdGhvdWdoLgorICovCisKK0RVS19FWFRFUk5BTCB2b2lkIGR1a19kZWNvZGVfc3RyaW5nKGR1 a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19kZWNvZGVfY2hhcl9mdW5jdGlvbiBj YWxsYmFjaywgdm9pZCAqdWRhdGEpIHsKKwlkdWtfaHN0cmluZyAqaF9pbnB1dDsKKwljb25zdCBk dWtfdWludDhfdCAqcCwgKnBfc3RhcnQsICpwX2VuZDsKKwlkdWtfY29kZXBvaW50X3QgY3A7CisK KwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaF9pbnB1dCA9IGR1a19yZXF1aXJlX2hz dHJpbmcodGhyLCBpZHgpOyAgLyogQWNjZXB0IHN5bWJvbHMuICovCisJRFVLX0FTU0VSVChoX2lu cHV0ICE9IE5VTEwpOworCisJcF9zdGFydCA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNU UklOR19HRVRfREFUQShoX2lucHV0KTsKKwlwX2VuZCA9IHBfc3RhcnQgKyBEVUtfSFNUUklOR19H RVRfQllURUxFTihoX2lucHV0KTsKKwlwID0gcF9zdGFydDsKKworCWZvciAoOzspIHsKKwkJaWYg KHAgPj0gcF9lbmQpIHsKKwkJCWJyZWFrOworCQl9CisJCWNwID0gKGR1a19jb2RlcG9pbnRfdCkg ZHVrX3VuaWNvZGVfZGVjb2RlX3h1dGY4X2NoZWNrZWQodGhyLCAmcCwgcF9zdGFydCwgcF9lbmQp OworCQljYWxsYmFjayh1ZGF0YSwgY3ApOworCX0KK30KKworRFVLX0VYVEVSTkFMIHZvaWQgZHVr X21hcF9zdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeCwgZHVrX21hcF9jaGFy X2Z1bmN0aW9uIGNhbGxiYWNrLCB2b2lkICp1ZGF0YSkgeworCWR1a19oc3RyaW5nICpoX2lucHV0 OworCWR1a19idWZ3cml0ZXJfY3R4IGJ3X2FsbG9jOworCWR1a19idWZ3cml0ZXJfY3R4ICpidzsK Kwljb25zdCBkdWtfdWludDhfdCAqcCwgKnBfc3RhcnQsICpwX2VuZDsKKwlkdWtfY29kZXBvaW50 X3QgY3A7CisKKwlEVUtfQVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCisJaWR4ID0gZHVrX25vcm1h bGl6ZV9pbmRleCh0aHIsIGlkeCk7CisKKwloX2lucHV0ID0gZHVrX3JlcXVpcmVfaHN0cmluZyh0 aHIsIGlkeCk7ICAvKiBBY2NlcHQgc3ltYm9scy4gKi8KKwlEVUtfQVNTRVJUKGhfaW5wdXQgIT0g TlVMTCk7CisKKwlidyA9ICZid19hbGxvYzsKKwlEVUtfQldfSU5JVF9QVVNIQlVGKHRociwgYncs IERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGhfaW5wdXQpKTsgIC8qIFJlYXNvbmFibGUgb3V0cHV0 IGVzdGltYXRlLiAqLworCisJcF9zdGFydCA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNU UklOR19HRVRfREFUQShoX2lucHV0KTsKKwlwX2VuZCA9IHBfc3RhcnQgKyBEVUtfSFNUUklOR19H RVRfQllURUxFTihoX2lucHV0KTsKKwlwID0gcF9zdGFydDsKKworCWZvciAoOzspIHsKKwkJLyog WFhYOiBjb3VsZCB3cml0ZSBvdXRwdXQgaW4gY2h1bmtzIHdpdGggZmV3ZXIgZW5zdXJlIGNhbGxz LAorCQkgKiBidXQgcmVsYXRpdmUgYmVuZWZpdCB3b3VsZCBiZSBzbWFsbCBoZXJlLgorCQkgKi8K KworCQlpZiAocCA+PSBwX2VuZCkgeworCQkJYnJlYWs7CisJCX0KKwkJY3AgPSAoZHVrX2NvZGVw b2ludF90KSBkdWtfdW5pY29kZV9kZWNvZGVfeHV0ZjhfY2hlY2tlZCh0aHIsICZwLCBwX3N0YXJ0 LCBwX2VuZCk7CisJCWNwID0gY2FsbGJhY2sodWRhdGEsIGNwKTsKKworCQlEVUtfQldfV1JJVEVf RU5TVVJFX1hVVEY4KHRociwgYncsIGNwKTsKKwl9CisKKwlEVUtfQldfQ09NUEFDVCh0aHIsIGJ3 KTsKKwkodm9pZCkgZHVrX2J1ZmZlcl90b19zdHJpbmcodGhyLCAtMSk7ICAvKiBTYWZlLCBleHRl bmRlZCBVVEYtOCBlbmNvZGVkLiAqLworCWR1a19yZXBsYWNlKHRociwgaWR4KTsKK30KKworRFVL X0VYVEVSTkFMIHZvaWQgZHVrX3N1YnN0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3Qg aWR4LCBkdWtfc2l6ZV90IHN0YXJ0X29mZnNldCwgZHVrX3NpemVfdCBlbmRfb2Zmc2V0KSB7CisJ ZHVrX2hzdHJpbmcgKmg7CisJZHVrX2hzdHJpbmcgKnJlczsKKwlkdWtfc2l6ZV90IHN0YXJ0X2J5 dGVfb2Zmc2V0OworCWR1a19zaXplX3QgZW5kX2J5dGVfb2Zmc2V0OworCWR1a19zaXplX3QgY2hh cmxlbjsKKworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisKKwlpZHggPSBkdWtfcmVxdWly ZV9ub3JtYWxpemVfaW5kZXgodGhyLCBpZHgpOyAgLyogQWNjZXB0IHN5bWJvbHMuICovCisJaCA9 IGR1a19yZXF1aXJlX2hzdHJpbmcodGhyLCBpZHgpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsK KworCWNoYXJsZW4gPSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoKTsKKwlpZiAoZW5kX29mZnNl dCA+PSBjaGFybGVuKSB7CisJCWVuZF9vZmZzZXQgPSBjaGFybGVuOworCX0KKwlpZiAoc3RhcnRf b2Zmc2V0ID4gZW5kX29mZnNldCkgeworCQlzdGFydF9vZmZzZXQgPSBlbmRfb2Zmc2V0OworCX0K KworCURVS19BU1NFUlRfRElTQUJMRShzdGFydF9vZmZzZXQgPj0gMCk7CisJRFVLX0FTU0VSVChz dGFydF9vZmZzZXQgPD0gZW5kX29mZnNldCAmJiBzdGFydF9vZmZzZXQgPD0gRFVLX0hTVFJJTkdf R0VUX0NIQVJMRU4oaCkpOworCURVS19BU1NFUlRfRElTQUJMRShlbmRfb2Zmc2V0ID49IDApOwor CURVS19BU1NFUlQoZW5kX29mZnNldCA+PSBzdGFydF9vZmZzZXQgJiYgZW5kX29mZnNldCA8PSBE VUtfSFNUUklOR19HRVRfQ0hBUkxFTihoKSk7CisKKwkvKiBHdWFyYW50ZWVkIGJ5IHN0cmluZyBs aW1pdHMuICovCisJRFVLX0FTU0VSVChzdGFydF9vZmZzZXQgPD0gRFVLX1VJTlQzMl9NQVgpOwor CURVS19BU1NFUlQoZW5kX29mZnNldCA8PSBEVUtfVUlOVDMyX01BWCk7CisKKwlzdGFydF9ieXRl X29mZnNldCA9IChkdWtfc2l6ZV90KSBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJieXRl KHRociwgaCwgKGR1a191aW50X2Zhc3QzMl90KSBzdGFydF9vZmZzZXQpOworCWVuZF9ieXRlX29m ZnNldCA9IChkdWtfc2l6ZV90KSBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJieXRlKHRo ciwgaCwgKGR1a191aW50X2Zhc3QzMl90KSBlbmRfb2Zmc2V0KTsKKworCURVS19BU1NFUlQoZW5k X2J5dGVfb2Zmc2V0ID49IHN0YXJ0X2J5dGVfb2Zmc2V0KTsKKwlEVUtfQVNTRVJUKGVuZF9ieXRl X29mZnNldCAtIHN0YXJ0X2J5dGVfb2Zmc2V0IDw9IERVS19VSU5UMzJfTUFYKTsgIC8qIEd1YXJh bnRlZWQgYnkgc3RyaW5nIGxpbWl0cy4gKi8KKworCS8qIE5vIHNpemUgY2hlY2sgaXMgbmVjZXNz YXJ5LiAqLworCXJlcyA9IGR1a19oZWFwX3N0cnRhYmxlX2ludGVybl9jaGVja2VkKHRociwKKwkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSFNUUklOR19HRVRfREFU QShoKSArIHN0YXJ0X2J5dGVfb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChkdWtfdWludDMyX3QpIChlbmRfYnl0ZV9vZmZzZXQgLSBzdGFydF9ieXRlX29m ZnNldCkpOworCisJZHVrX3B1c2hfaHN0cmluZyh0aHIsIHJlcyk7CisJZHVrX3JlcGxhY2UodGhy LCBpZHgpOworfQorCisvKiBYWFg6IHRoaXMgaXMgcXVpdGUgY2x1bmt5LiAgQWRkIFVuaWNvZGUg aGVscGVycyB0byBzY2FuIGJhY2t3YXJkcyBhbmQKKyAqIGZvcndhcmRzIHdpdGggYSBjYWxsYmFj ayB0byBwcm9jZXNzIGNvZGVwb2ludHM/CisgKi8KK0RVS19FWFRFUk5BTCB2b2lkIGR1a190cmlt KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaHN0cmluZyAqaDsKKwlj b25zdCBkdWtfdWludDhfdCAqcCwgKnBfc3RhcnQsICpwX2VuZCwgKnBfdG1wMSwgKnBfdG1wMjsg IC8qIHBvaW50ZXJzIGZvciBzY2FubmluZyAqLworCWNvbnN0IGR1a191aW50OF90ICpxX3N0YXJ0 LCAqcV9lbmQ7ICAvKiBzdGFydCAoaW5jbCkgYW5kIGVuZCAoZXhjbCkgb2YgdHJpbW1lZCBwYXJ0 ICovCisJZHVrX2NvZGVwb2ludF90IGNwOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsK KworCWlkeCA9IGR1a19yZXF1aXJlX25vcm1hbGl6ZV9pbmRleCh0aHIsIGlkeCk7ICAvKiBBY2Nl cHQgc3ltYm9scy4gKi8KKwloID0gZHVrX3JlcXVpcmVfaHN0cmluZyh0aHIsIGlkeCk7CisJRFVL X0FTU0VSVChoICE9IE5VTEwpOworCisJcF9zdGFydCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKGgp OworCXBfZW5kID0gcF9zdGFydCArIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpOworCisJcCA9 IHBfc3RhcnQ7CisJd2hpbGUgKHAgPCBwX2VuZCkgeworCQlwX3RtcDEgPSBwOworCQljcCA9IChk dWtfY29kZXBvaW50X3QpIGR1a191bmljb2RlX2RlY29kZV94dXRmOF9jaGVja2VkKHRociwgJnBf dG1wMSwgcF9zdGFydCwgcF9lbmQpOworCQlpZiAoIShkdWtfdW5pY29kZV9pc193aGl0ZXNwYWNl KGNwKSB8fCBkdWtfdW5pY29kZV9pc19saW5lX3Rlcm1pbmF0b3IoY3ApKSkgeworCQkJYnJlYWs7 CisJCX0KKwkJcCA9IHBfdG1wMTsKKwl9CisJcV9zdGFydCA9IHA7CisJaWYgKHAgPT0gcF9lbmQp IHsKKwkJLyogRW50aXJlIHN0cmluZyBpcyB3aGl0ZXNwYWNlLiAqLworCQlxX2VuZCA9IHA7CisJ CWdvdG8gc2Nhbl9kb25lOworCX0KKworCXAgPSBwX2VuZDsKKwl3aGlsZSAocCA+IHBfc3RhcnQp IHsKKwkJcF90bXAxID0gcDsKKwkJd2hpbGUgKHAgPiBwX3N0YXJ0KSB7CisJCQlwLS07CisJCQlp ZiAoKCgqcCkgJiAweGMwKSAhPSAweDgwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcF90 bXAyID0gcDsKKworCQljcCA9IChkdWtfY29kZXBvaW50X3QpIGR1a191bmljb2RlX2RlY29kZV94 dXRmOF9jaGVja2VkKHRociwgJnBfdG1wMiwgcF9zdGFydCwgcF9lbmQpOworCQlpZiAoIShkdWtf dW5pY29kZV9pc193aGl0ZXNwYWNlKGNwKSB8fCBkdWtfdW5pY29kZV9pc19saW5lX3Rlcm1pbmF0 b3IoY3ApKSkgeworCQkJcCA9IHBfdG1wMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXFfZW5kID0g cDsKKworIHNjYW5fZG9uZToKKwkvKiBUaGlzIG1heSBoYXBwZW4gd2hlbiBmb3J3YXJkIGFuZCBi YWNrd2FyZCBzY2FubmluZyBkaXNhZ3JlZQorCSAqIChwb3NzaWJsZSBmb3Igbm9uLWV4dGVuZGVk LVVURi04IHN0cmluZ3MpLgorCSAqLworCWlmIChxX2VuZCA8IHFfc3RhcnQpIHsKKwkJcV9lbmQg PSBxX3N0YXJ0OworCX0KKworCURVS19BU1NFUlQocV9zdGFydCA+PSBwX3N0YXJ0ICYmIHFfc3Rh cnQgPD0gcF9lbmQpOworCURVS19BU1NFUlQocV9lbmQgPj0gcF9zdGFydCAmJiBxX2VuZCA8PSBw X2VuZCk7CisJRFVLX0FTU0VSVChxX2VuZCA+PSBxX3N0YXJ0KTsKKworCURVS19EREQoRFVLX0RE RFBSSU5UKCJ0cmltOiBwX3N0YXJ0PSVwLCBwX2VuZD0lcCwgcV9zdGFydD0lcCwgcV9lbmQ9JXAi LAorCSAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHBfc3RhcnQsIChjb25zdCB2 b2lkICopIHBfZW5kLAorCSAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHFfc3Rh cnQsIChjb25zdCB2b2lkICopIHFfZW5kKSk7CisKKwlpZiAocV9zdGFydCA9PSBwX3N0YXJ0ICYm IHFfZW5kID09IHBfZW5kKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJub3RoaW5nIHdhcyB0 cmltbWVkOiBhdm9pZCBpbnRlcm5pbmcgKGhhc2hpbmcgZXRjKSIpKTsKKwkJcmV0dXJuOworCX0K KworCWR1a19wdXNoX2xzdHJpbmcodGhyLCAoY29uc3QgY2hhciAqKSBxX3N0YXJ0LCAoZHVrX3Np emVfdCkgKHFfZW5kIC0gcV9zdGFydCkpOworCWR1a19yZXBsYWNlKHRociwgaWR4KTsKK30KKwor RFVLX0VYVEVSTkFMIGR1a19jb2RlcG9pbnRfdCBkdWtfY2hhcl9jb2RlX2F0KGR1a19odGhyZWFk ICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3QgY2hhcl9vZmZzZXQpIHsKKwlkdWtfaHN0 cmluZyAqaDsKKwlkdWtfdWNvZGVwb2ludF90IGNwOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlko dGhyKTsKKworCS8qIFhYWDogU2hhcmUgY29kZSB3aXRoIFN0cmluZy5wcm90b3R5cGUuY2hhckNv ZGVBdD8gIE1haW4gZGlmZmVyZW5jZQorCSAqIGlzIGhhbmRsaW5nIG9mIGNsYW1wZWQgb2Zmc2V0 cy4KKwkgKi8KKworCWggPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwgaWR4KTsgIC8qIEFjY2Vw dCBzeW1ib2xzLiAqLworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKworCURVS19BU1NFUlRfRElT QUJMRShjaGFyX29mZnNldCA+PSAwKTsgIC8qIEFsd2F5cyB0cnVlLCBhcmcgaXMgdW5zaWduZWQu ICovCisJaWYgKGNoYXJfb2Zmc2V0ID49IERVS19IU1RSSU5HX0dFVF9DSEFSTEVOKGgpKSB7CisJ CXJldHVybiAwOworCX0KKworCURVS19BU1NFUlQoY2hhcl9vZmZzZXQgPD0gRFVLX1VJTlRfTUFY KTsgIC8qIEd1YXJhbnRlZWQgYnkgc3RyaW5nIGxpbWl0cy4gKi8KKwljcCA9IGR1a19oc3RyaW5n X2NoYXJfY29kZV9hdF9yYXcodGhyLCBoLCAoZHVrX3VpbnRfdCkgY2hhcl9vZmZzZXQsIDAgLypz dXJyb2dhdGVfYXdhcmUqLyk7CisJcmV0dXJuIChkdWtfY29kZXBvaW50X3QpIGNwOworfQorLyoK KyAqICBEYXRlL3RpbWUuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxy ZWFkeSBpbmNsdWRlZCAqLworCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1a190aW1lX2dl dF9lY21hc2NyaXB0X3RpbWUoZHVrX2h0aHJlYWQgKnRocikgeworCS8qIEVDTUFTY3JpcHQgdGlt ZSwgd2l0aCBtaWxsaXNlY29uZCBmcmFjdGlvbnMuICBFeHBvc2VkIHZpYQorCSAqIGR1a19nZXRf bm93KCkgZm9yIGV4YW1wbGUuCisJICovCisJRFVLX1VOUkVGKHRocik7CisJcmV0dXJuIChkdWtf ZG91YmxlX3QpIERVS19VU0VfREFURV9HRVRfTk9XKHRocik7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfZG91YmxlX3QgZHVrX3RpbWVfZ2V0X2VjbWFzY3JpcHRfdGltZV9ub2ZyYWMoZHVrX2h0aHJl YWQgKnRocikgeworCS8qIEVDTUFTY3JpcHQgdGltZSB3aXRob3V0IG1pbGxpc2Vjb25kIGZyYWN0 aW9ucy4gIEV4cG9zZWQgdmlhCisJICogdGhlIERhdGUgYnVpbHQtaW4gd2hpY2ggZG9lc24ndCBh bGxvdyBmcmFjdGlvbnMuCisJICovCisJRFVLX1VOUkVGKHRocik7CisJcmV0dXJuIChkdWtfZG91 YmxlX3QpIERVS19GTE9PUihEVUtfVVNFX0RBVEVfR0VUX05PVyh0aHIpKTsKK30KKworRFVLX0lO VEVSTkFMIGR1a19kb3VibGVfdCBkdWtfdGltZV9nZXRfbW9ub3RvbmljX3RpbWUoZHVrX2h0aHJl YWQgKnRocikgeworCURVS19VTlJFRih0aHIpOworI2lmIGRlZmluZWQoRFVLX1VTRV9HRVRfTU9O T1RPTklDX1RJTUUpCisJcmV0dXJuIChkdWtfZG91YmxlX3QpIERVS19VU0VfR0VUX01PTk9UT05J Q19USU1FKHRocik7CisjZWxzZQorCXJldHVybiAoZHVrX2RvdWJsZV90KSBEVUtfVVNFX0RBVEVf R0VUX05PVyh0aHIpOworI2VuZGlmCit9CisKK0RVS19FWFRFUk5BTCBkdWtfZG91YmxlX3QgZHVr X2dldF9ub3coZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7 CisJRFVLX1VOUkVGKHRocik7CisKKwkvKiBUaGlzIEFQSSBpbnRlbnRpb25hbGx5IGFsbG93cyBt aWxsaXNlY29uZCBmcmFjdGlvbnMuICovCisJcmV0dXJuIGR1a190aW1lX2dldF9lY21hc2NyaXB0 X3RpbWUodGhyKTsKK30KKworI2lmIDAgIC8qIFhYWDogd29ydGggZXhwb3Npbmc/ICovCitEVUtf RVhURVJOQUwgZHVrX2RvdWJsZV90IGR1a19nZXRfbW9ub3RvbmljX3RpbWUoZHVrX2h0aHJlYWQg KnRocikgeworCURVS19BU1NFUlRfQVBJX0VOVFJZKHRocik7CisJRFVLX1VOUkVGKHRocik7CisK KwlyZXR1cm4gZHVrX3RpbWVfZ2V0X21vbm90b25pY190aW1lKHRocik7Cit9CisjZW5kaWYKKwor RFVLX0VYVEVSTkFMIHZvaWQgZHVrX3RpbWVfdG9fY29tcG9uZW50cyhkdWtfaHRocmVhZCAqdGhy LCBkdWtfZG91YmxlX3QgdGltZXZhbCwgZHVrX3RpbWVfY29tcG9uZW50cyAqY29tcCkgeworCWR1 a19pbnRfdCBwYXJ0c1tEVUtfREFURV9JRFhfTlVNX1BBUlRTXTsKKwlkdWtfZG91YmxlX3QgZHBh cnRzW0RVS19EQVRFX0lEWF9OVU1fUEFSVFNdOworCWR1a191aW50X3QgZmxhZ3M7CisKKwlEVUtf QVNTRVJUX0FQSV9FTlRSWSh0aHIpOworCURVS19BU1NFUlQoY29tcCAhPSBOVUxMKTsgIC8qIFhY WDogb3IgY2hlY2s/ICovCisJRFVLX1VOUkVGKHRocik7CisKKwkvKiBDb252ZXJ0IGFzIG9uZS1i YXNlZCwgYnV0IGNoYW5nZSBtb250aCB0byB6ZXJvLWJhc2VkIHRvIG1hdGNoIHRoZQorCSAqIEVD TUFTY3JpcHQgRGF0ZSBidWlsdC1pbiBiZWhhdmlvciAxOjEuCisJICovCisJZmxhZ3MgPSBEVUtf REFURV9GTEFHX09ORUJBU0VEIHwgRFVLX0RBVEVfRkxBR19OQU5fVE9fWkVSTzsKKworCWR1a19i aV9kYXRlX3RpbWV2YWxfdG9fcGFydHModGltZXZhbCwgcGFydHMsIGRwYXJ0cywgZmxhZ3MpOwor CisJLyogWFhYOiBzdWItbWlsbGlzZWNvbmQgYWNjdXJhY3kgZm9yIHRoZSBBUEkgKi8KKworCURV S19BU1NFUlQoZHBhcnRzW0RVS19EQVRFX0lEWF9NT05USF0gPj0gMS4wICYmIGRwYXJ0c1tEVUtf REFURV9JRFhfTU9OVEhdIDw9IDEyLjApOworCWNvbXAtPnllYXIgPSBkcGFydHNbRFVLX0RBVEVf SURYX1lFQVJdOworCWNvbXAtPm1vbnRoID0gZHBhcnRzW0RVS19EQVRFX0lEWF9NT05USF0gLSAx LjA7CisJY29tcC0+ZGF5ID0gZHBhcnRzW0RVS19EQVRFX0lEWF9EQVldOworCWNvbXAtPmhvdXJz ID0gZHBhcnRzW0RVS19EQVRFX0lEWF9IT1VSXTsKKwljb21wLT5taW51dGVzID0gZHBhcnRzW0RV S19EQVRFX0lEWF9NSU5VVEVdOworCWNvbXAtPnNlY29uZHMgPSBkcGFydHNbRFVLX0RBVEVfSURY X1NFQ09ORF07CisJY29tcC0+bWlsbGlzZWNvbmRzID0gZHBhcnRzW0RVS19EQVRFX0lEWF9NSUxM SVNFQ09ORF07CisJY29tcC0+d2Vla2RheSA9IGRwYXJ0c1tEVUtfREFURV9JRFhfV0VFS0RBWV07 Cit9CisKK0RVS19FWFRFUk5BTCBkdWtfZG91YmxlX3QgZHVrX2NvbXBvbmVudHNfdG9fdGltZShk dWtfaHRocmVhZCAqdGhyLCBkdWtfdGltZV9jb21wb25lbnRzICpjb21wKSB7CisJZHVrX2RvdWJs ZV90IGQ7CisJZHVrX2RvdWJsZV90IGRwYXJ0c1tEVUtfREFURV9JRFhfTlVNX1BBUlRTXTsKKwlk dWtfdWludF90IGZsYWdzOworCisJRFVLX0FTU0VSVF9BUElfRU5UUlkodGhyKTsKKwlEVUtfQVNT RVJUKGNvbXAgIT0gTlVMTCk7ICAvKiBYWFg6IG9yIGNoZWNrPyAqLworCURVS19VTlJFRih0aHIp OworCisJLyogTWF0Y2ggRGF0ZSBjb25zdHJ1Y3RvciBiZWhhdmlvciAod2l0aCBVVEMgdGltZSku ICBNb250aCBpcyBnaXZlbgorCSAqIGFzIHplcm8tYmFzZWQuICBEYXktb2YtbW9udGggaXMgZ2l2 ZW4gYXMgb25lLWJhc2VkIHNvIG5vcm1hbGl6ZQorCSAqIGl0IHRvIHplcm8tYmFzZWQgYXMgdGhl IGludGVybmFsIGNvbnZlcnNpb24gaGVscGVycyBleHBlY3RzIGFsbAorCSAqIGNvbXBvbmVudHMg dG8gYmUgemVyby1iYXNlZC4KKwkgKi8KKwlmbGFncyA9IDA7CisKKwkvKiBYWFg6IGV4cGVuc2l2 ZSBjb252ZXJzaW9uOyB1c2UgYXJyYXkgZm9ybWF0IGluIEFQSSBpbnN0ZWFkLCBvciB1bmlmeQor CSAqIHRpbWUgcHJvdmlkZXIgYW5kIHRpbWUgQVBJIHRvIHVzZSBzYW1lIHN0cnVjdD8KKwkgKi8K KworCWRwYXJ0c1tEVUtfREFURV9JRFhfWUVBUl0gPSBjb21wLT55ZWFyOworCWRwYXJ0c1tEVUtf REFURV9JRFhfTU9OVEhdID0gY29tcC0+bW9udGg7CisJZHBhcnRzW0RVS19EQVRFX0lEWF9EQVld ID0gY29tcC0+ZGF5IC0gMS4wOworCWRwYXJ0c1tEVUtfREFURV9JRFhfSE9VUl0gPSBjb21wLT5o b3VyczsKKwlkcGFydHNbRFVLX0RBVEVfSURYX01JTlVURV0gPSBjb21wLT5taW51dGVzOworCWRw YXJ0c1tEVUtfREFURV9JRFhfU0VDT05EXSA9IGNvbXAtPnNlY29uZHM7CisJZHBhcnRzW0RVS19E QVRFX0lEWF9NSUxMSVNFQ09ORF0gPSBjb21wLT5taWxsaXNlY29uZHM7CisJZHBhcnRzW0RVS19E QVRFX0lEWF9XRUVLREFZXSA9IDA7ICAvKiBpZ25vcmVkICovCisKKwlkID0gZHVrX2JpX2RhdGVf Z2V0X3RpbWV2YWxfZnJvbV9kcGFydHMoZHBhcnRzLCBmbGFncyk7CisKKwlyZXR1cm4gZDsKK30K Ky8qCisgKiAgQXJyYXkgYnVpbHQtaW5zCisgKgorICogIE1vc3QgQXJyYXkgYnVpbHQtaW5zIGFy ZSBpbnRlbnRpb25hbGx5IGdlbmVyaWMgaW4gRUNNQVNjcmlwdCwgYW5kIGFyZQorICogIGludGVu ZGVkIHRvIHdvcmsgZXZlbiB3aGVuIHRoZSAndGhpcycgYmluZGluZyBpcyBub3QgYW4gQXJyYXkg aW5zdGFuY2UuCisgKiAgVGhpcyBFQ01BU2NyaXB0IGZlYXR1cmUgaXMgYWxzbyB1c2VkIGJ5IG11 Y2ggcmVhbCB3b3JsZCBjb2RlLiAgRm9yIHRoaXMKKyAqICByZWFzb24gdGhlIGltcGxlbWVudGF0 aW9ucyBoZXJlIGRvbid0IGFzc3VtZSBleG90aWMgQXJyYXkgYmVoYXZpb3Igb3IKKyAqICBlLmcu IHByZXNlbmNlIG9mIGEgLmxlbmd0aCBwcm9wZXJ0eS4gIEhvd2V2ZXIsIHNvbWUgYWxnb3JpdGht cyBoYXZlIGEKKyAqICBmYXN0IHBhdGggZm9yIGR1a19oYXJyYXkgYmFja2VkIGFjdHVhbCBBcnJh eSBpbnN0YW5jZXMsIGVuYWJsZWQgd2hlbgorICogIGZvb3RwcmludCBpcyBub3QgYSBjb25jZXJu LgorICoKKyAqICBYWFg6IHRoZSAiVGhyb3ciIGZsYWcgc2hvdWxkIGJlIHNldCBmb3IgKGFsbW9z dD8pIGFsbCBbW1B1dF1dIGFuZAorICogIFtbRGVsZXRlXV0gb3BlcmF0aW9ucywgYnV0IGl0J3Mg Y3VycmVudGx5IGZhbHNlIHRocm91Z2hvdXQuICBHbyB0aHJvdWdoCisgKiAgYWxsIHB1dC9kZWxl dGUgY2FzZXMgYW5kIGNoZWNrIHRocm93IGZsYWcgdXNlLiAgTmVlZCBhIG5ldyBBUEkgcHJpbWl0 aXZlCisgKiAgd2hpY2ggYWxsb3dzIHRocm93cyBmbGFnIHRvIGJlIHNwZWNpZmllZC4KKyAqCisg KiAgWFhYOiBhcnJheSBsZW5ndGhzIGFib3ZlIDJHIHdvbid0IHdvcmsgcmVsaWFibHkuICBUaGVy ZSBhcmUgbWFueSBwbGFjZXMKKyAqICB3aGVyZSBvbmUgbmVlZHMgYSBmdWxsIHNpZ25lZCAzMi1i aXQgcmFuZ2UgKFstMHhmZmZmZmZmZiwgMHhmZmZmZmZmZl0sCisgKiAgaS5lLiAtMzMtIGJpdHMp LiAgQWx0aG91Z2ggYXJyYXkgJ2xlbmd0aCcgY2Fubm90IGJlIHdyaXR0ZW4gdG8gYmUgb3V0c2lk ZQorICogIHRoZSB1bnNpZ25lZCAzMi1iaXQgcmFuZ2UgKEU1LjEgU2VjdGlvbiAxNS40LjUuMSB0 aHJvd3MgYSBSYW5nZUVycm9yIGlmIHNvKQorICogIHNvbWUgaW50ZXJtZWRpYXRlIHZhbHVlcyBt YXkgYmUgYWJvdmUgMHhmZmZmZmZmZiBhbmQgdGhpcyBtYXkgbm90IGJlIGFsd2F5cworICogIGNv cnJlY3RseSBoYW5kbGVkIG5vdyAoZHVrX3VpbnQzMl90IGlzIG5vdCBlbm91Z2ggZm9yIGFsbCBh bGdvcml0aG1zKS4KKyAqICBGb3IgaW5zdGFuY2UsIHB1c2goKSBjYW4gbGVnaXRpbWF0ZWx5IHdy aXRlIGVudHJpZXMgYmV5b25kIGxlbmd0aCAweGZmZmZmZmZmCisgKiAgYW5kIGNhdXNlIGEgUmFu Z2VFcnJvciBvbmx5IGF0IHRoZSBlbmQuICBUbyBkbyB0aGlzIHByb3Blcmx5LCB0aGUgY3VycmVu dAorICogIHB1c2goKSBpbXBsZW1lbnRhdGlvbiB0cmFja3MgdGhlIGFycmF5IGluZGV4IHVzaW5n IGEgJ2RvdWJsZScgaW5zdGVhZCBvZiBhCisgKiAgZHVrX3VpbnQzMl90ICh3aGljaCBpcyBzb21l d2hhdCBhd2t3YXJkKS4gIFNlZSB0ZXN0LWJpLWFycmF5LXB1c2gtbWF4bGVuLmpzLgorICoKKyAq ICBPbiB1c2luZyAicHV0IiB2cy4gImRlZiIgcHJvcAorICogID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisgKgorICogIENvZGUgYmVsb3cgbXVzdCBiZSBjYXJlZnVsIHRvIHVzZSB0aGUg YXBwcm9wcmlhdGUgcHJpbWl0aXZlIGFzIGl0IG1hdHRlcnMKKyAqICBmb3IgY29tcGxpYW5jZS4g IFdoZW4gdXNpbmcgInB1dCIgdGhlcmUgbWF5IGJlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGluCisg KiAgQXJyYXkucHJvdG90eXBlIHdoaWNoIGNhdXNlIHNpZGUgZWZmZWN0cyB3aGVuIHZhbHVlcyBh cmUgd3JpdHRlbi4gIFdoZW4KKyAqICB1c2luZyAiZGVmaW5lIiB0aGVyZSBhcmUgbm8gc3VjaCBz aWRlIGVmZmVjdHMsIGFuZCBtYW55IHRlc3QyNjIgdGVzdCBjYXNlcworICogIGNoZWNrIGZvciB0 aGlzIChmb3IgcmVhbCB3b3JsZCBjb2RlLCBzdWNoIHNpZGUgZWZmZWN0cyBhcmUgdmVyeSByYXJl KS4KKyAqICBCb3RoICJwdXQiIGFuZCAiZGVmaW5lIiBhcmUgdXNlZCBpbiB0aGUgRTUuMSBzcGVj aWZpY2F0aW9uOyBhcyBhIHJ1bGUsCisgKiAgInB1dCIgaXMgdXNlZCB3aGVuIG1vZGlmeWluZyBh biBleGlzdGluZyBhcnJheSAob3IgYSBub24tYXJyYXkgJ3RoaXMnCisgKiAgYmluZGluZykgYW5k ICJkZWZpbmUiIGZvciBzZXR0aW5nIHZhbHVlcyBpbnRvIGEgZnJlc2ggcmVzdWx0IGFycmF5Lgor ICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8K KworLyogUGVyZm9ybSBhbiBpbnRlcm1lZGlhdGUgam9pbiB3aGVuIHRoaXMgbWFueSBlbGVtZW50 cyBoYXZlIGJlZW4gcHVzaGVkCisgKiBvbiB0aGUgdmFsdWUgc3RhY2suCisgKi8KKyNkZWZpbmUg IERVS19fQVJSQVlfTUlEX0pPSU5fTElNSVQgIDQwOTYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9B UlJBWV9CVUlMVElOKQorCisvKgorICogIFNoYXJlZCBoZWxwZXJzLgorICovCisKKy8qIFNoYXJl ZCBlbnRyeSBjb2RlIGZvciBtYW55IEFycmF5IGJ1aWx0LWluczogdGhlICd0aGlzJyBiaW5kaW5n IGlzIHB1c2hlZAorICogb24gdGhlIHZhbHVlIHN0YWNrIGFuZCBvYmplY3QgY29lcmNlZCwgYW5k IHRoZSBjdXJyZW50IC5sZW5ndGggaXMgcmV0dXJuZWQuCisgKiBOb3RlIHRoYXQgbGVuZ3RoIGlz IGxlZnQgb24gc3RhY2sgKGl0IGNvdWxkIGJlIHBvcHBlZCwgYnV0IHRoYXQncyBub3QKKyAqIHVz dWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgY2FsbCBoYW5kbGluZyB3aWxsIGNsZWFuIGl0IHVwIGF1 dG9tYXRpY2FsbHkpLgorICovCitEVUtfTE9DQUwgZHVrX3VpbnQzMl90IGR1a19fcHVzaF90aGlz X29ial9sZW5fdTMyKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdWludDMyX3QgbGVuOworCisJ LyogWFhYOiBwdXNoIG1vcmUgZGlyZWN0bHk/ICovCisJKHZvaWQpIGR1a19wdXNoX3RoaXNfY29l cmNpYmxlX3RvX29iamVjdCh0aHIpOworCURVS19BU1NFUlRfSE9CSkVDVF9WQUxJRChkdWtfZ2V0 X2hvYmplY3QodGhyLCAtMSkpOworCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwg RFVLX1NUUklEWF9MRU5HVEgpOworCWxlbiA9IGR1a190b191aW50MzIodGhyLCAtMSk7CisKKwkv KiAtPiBbIC4uLiBUb09iamVjdCh0aGlzKSBUb1VpbnQzMihsZW5ndGgpIF0gKi8KKwlyZXR1cm4g bGVuOworfQorCitEVUtfTE9DQUwgZHVrX3VpbnQzMl90IGR1a19fcHVzaF90aGlzX29ial9sZW5f dTMyX2xpbWl0ZWQoZHVrX2h0aHJlYWQgKnRocikgeworCS8qIFJhbmdlIGxpbWl0ZWQgdG8gWzAs IDB4N2ZmZmZmZmZdIHJhbmdlLCBpLmUuIHJhbmdlIHRoYXQgY2FuIGJlCisJICogcmVwcmVzZW50 ZWQgd2l0aCBkdWtfaW50MzJfdC4gIFVzZSB0aGlzIHdoZW4gdGhlIG1ldGhvZCBkb2Vzbid0CisJ ICogaGFuZGxlIHRoZSBmdWxsIDMyLWJpdCB1bnNpZ25lZCByYW5nZSBjb3JyZWN0bHkuCisJICov CisJZHVrX3VpbnQzMl90IHJldCA9IGR1a19fcHVzaF90aGlzX29ial9sZW5fdTMyKHRocik7CisJ aWYgKERVS19VTkxJS0VMWShyZXQgPj0gMHg4MDAwMDAwMFVMKSkgeworCQlEVUtfRVJST1JfUkFO R0VfSU5WQUxJRF9MRU5HVEgodGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwVTspOwor CX0KKwlyZXR1cm4gcmV0OworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0FSUkFZX0ZBU1RQQVRI KQorLyogQ2hlY2sgaWYgJ3RoaXMnIGJpbmRpbmcgaXMgYW4gQXJyYXkgaW5zdGFuY2UgKGR1a19o YXJyYXkpIHdoaWNoIHNhdGlzZmllcworICogYSBmZXcgb3RoZXIgZ3VhcmFudGVlcyBmb3IgZmFz dCBwYXRoIG9wZXJhdGlvbi4gIFRoZSBmYXN0IHBhdGggZG9lc24ndAorICogbmVlZCB0byBoYW5k bGUgYWxsIG9wZXJhdGlvbnMsIGV2ZW4gZm9yIGR1a19oYXJyYXlzLCBidXQgbXVzdCBoYW5kbGUg YQorICogc2lnbmlmaWNhbnQgZnJhY3Rpb24gdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gIFJldHVy biBhIG5vbi1OVUxMIGR1a19oYXJyYXkKKyAqIHBvaW50ZXIgd2hlbiBhbGwgZmFzdCBwYXRoIGNy aXRlcmlhIGFyZSBtZXQsIE5VTEwgb3RoZXJ3aXNlLgorICovCitEVUtfTE9DQUwgZHVrX2hhcnJh eSAqZHVrX19hcnJheXBhcnRfZmFzdHBhdGhfdGhpcyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVr X3R2YWwgKnR2OworCWR1a19ob2JqZWN0ICpoOworCWR1a191aW50X3QgZmxhZ3NfbWFzaywgZmxh Z3NfYml0cywgZmxhZ3NfdmFsdWU7CisKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYm90dG9t ID4gdGhyLT52YWxzdGFjayk7ICAvKiBiZWNhdXNlIGNhbGwgaW4gcHJvZ3Jlc3MgKi8KKwl0diA9 IERVS19HRVRfVEhJU19UVkFMX1BUUih0aHIpOworCisJLyogRmFzdCBwYXRoIHJlcXVpcmVzIHRo YXQgJ3RoaXMnIGlzIGEgZHVrX2hhcnJheS4gIFJlYWQgb25seSBhcnJheXMKKwkgKiAoUk9NIGJh Y2tlZCkgYXJlIGFsc28gcmVqZWN0ZWQgZm9yIHNpbXBsaWNpdHkuCisJICovCisJaWYgKCFEVUtf VFZBTF9JU19PQkpFQ1QodHYpKSB7CisJCURVS19ERChEVUtfRERQUklOVCgicmVqZWN0IGFycmF5 IGZhc3QgcGF0aDogbm90IGFuIG9iamVjdCIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWggPSBE VUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJZmxhZ3Nf bWFzayA9IERVS19IT0JKRUNUX0ZMQUdfQVJSQVlfUEFSVCB8IFwKKwkgICAgICAgICAgICAgRFVL X0hPQkpFQ1RfRkxBR19FWE9USUNfQVJSQVkgfCBcCisJICAgICAgICAgICAgIERVS19IRUFQSERS X0ZMQUdfUkVBRE9OTFk7CisJZmxhZ3NfYml0cyA9IERVS19IT0JKRUNUX0ZMQUdfQVJSQVlfUEFS VCB8IFwKKwkgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNfQVJSQVk7CisJZmxh Z3NfdmFsdWUgPSBEVUtfSEVBUEhEUl9HRVRfRkxBR1NfUkFXKChkdWtfaGVhcGhkciAqKSBoKTsK KwlpZiAoKGZsYWdzX3ZhbHVlICYgZmxhZ3NfbWFzaykgIT0gZmxhZ3NfYml0cykgeworCQlEVUtf REQoRFVLX0REUFJJTlQoInJlamVjdCBhcnJheSBmYXN0IHBhdGg6IG9iamVjdCBmbGFnIGNoZWNr IGZhaWxlZCIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSW4gc29tZSBjYXNlcyBhIGR1 a19oYXJyYXkncyAnbGVuZ3RoJyBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlCisJICogY3VycmVudCBh cnJheSBwYXJ0IGFsbG9jYXRpb24uICBBdm9pZCB0aGUgZmFzdCBwYXRoIGluIHRoZXNlCisJICog Y2FzZXMsIHNvIHRoYXQgYWxsIGZhc3QgcGF0aCBjb2RlIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQg YWxsCisJICogaXRlbXMgaW4gdGhlIHJhbmdlIFswLGxlbmd0aFsgYXJlIGJhY2tlZCBieSB0aGUg Y3VycmVudCBhcnJheQorCSAqIHBhcnQgYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoKChkdWtfaGFy cmF5ICopIGgpLT5sZW5ndGggPiBEVUtfSE9CSkVDVF9HRVRfQVNJWkUoaCkpIHsKKwkJRFVLX0RE KERVS19ERFBSSU5UKCJyZWplY3QgYXJyYXkgZmFzdCBwYXRoOiBsZW5ndGggPiBhcnJheSBwYXJ0 IHNpemUiKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEd1YXJhbnRlZXMgZm9yIGZhc3Qg cGF0aC4gKi8KKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVD VF9HRVRfQVNJWkUoaCkgPT0gMCB8fCBEVUtfSE9CSkVDVF9BX0dFVF9CQVNFKHRoci0+aGVhcCwg aCkgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCgoKGR1a19oYXJyYXkgKikgaCktPmxlbmd0aCA8PSBE VUtfSE9CSkVDVF9HRVRfQVNJWkUoaCkpOworCisJRFVLX0REKERVS19ERFBSSU5UKCJhcnJheSBm YXN0IHBhdGggYWxsb3dlZCBmb3I6ICUhTyIsIChkdWtfaGVhcGhkciAqKSBoKSk7CisJcmV0dXJu IChkdWtfaGFycmF5ICopIGg7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfQVJSQVlfRkFTVFBBVEgg Ki8KKworLyoKKyAqICBDb25zdHJ1Y3RvcgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX2FycmF5X2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaWR4X3Qg bmFyZ3M7CisJZHVrX2hhcnJheSAqYTsKKwlkdWtfZG91YmxlX3QgZDsKKwlkdWtfdWludDMyX3Qg bGVuOworCWR1a191aW50MzJfdCBsZW5fcHJlYWxsb2M7CisKKwluYXJncyA9IGR1a19nZXRfdG9w KHRocik7CisKKwlpZiAobmFyZ3MgPT0gMSAmJiBkdWtfaXNfbnVtYmVyKHRociwgMCkpIHsKKwkJ LyogWFhYOiBleHBlbnNpdmUgY2hlY2sgKGFsc28gc2hhcmVkIGVsc2V3aGVyZSAtIHNvIGFkZCBh IHNoYXJlZCBpbnRlcm5hbCBBUEkgY2FsbD8pICovCisJCWQgPSBkdWtfZ2V0X251bWJlcih0aHIs IDApOworCQlsZW4gPSBkdWtfdG9fdWludDMyKHRociwgMCk7CisJCWlmICgoKGR1a19kb3VibGVf dCkgbGVuKSAhPSBkKSB7CisJCQlEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElEX0xFTkdUSCh0aHIp OworCQl9CisKKwkJLyogRm9yIHNtYWxsIGxlbmd0aHMgY3JlYXRlIGEgZGVuc2UgcHJlYWxsb2Nh dGVkIGFycmF5LgorCQkgKiBGb3IgbGFyZ2UgYXJyYXlzIHByZWFsbG9jYXRlIGFuIGluaXRpYWwg cGFydC4KKwkJICovCisJCWxlbl9wcmVhbGxvYyA9IGxlbiA8IDY0ID8gbGVuIDogNjQ7CisJCWEg PSBkdWtfcHVzaF9oYXJyYXlfd2l0aF9zaXplKHRociwgbGVuX3ByZWFsbG9jKTsKKwkJRFVLX0FT U0VSVChhICE9IE5VTEwpOworCQlhLT5sZW5ndGggPSBsZW47CisJCXJldHVybiAxOworCX0KKwor CWR1a19wYWNrKHRociwgbmFyZ3MpOworCXJldHVybiAxOworfQorCisvKgorICogIGlzQXJyYXko KQorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X2NvbnN0cnVjdG9y X2lzX2FycmF5KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaG9iamVjdCAqaDsKKworCWggPSBk dWtfZ2V0X2hvYmplY3Rfd2l0aF9jbGFzcyh0aHIsIDAsIERVS19IT0JKRUNUX0NMQVNTX0FSUkFZ KTsKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgKGggIT0gTlVMTCkpOworCXJldHVybiAxOworfQor CisvKgorICogIHRvU3RyaW5nKCkKKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19i aV9hcnJheV9wcm90b3R5cGVfdG9fc3RyaW5nKGR1a19odGhyZWFkICp0aHIpIHsKKwkodm9pZCkg ZHVrX3B1c2hfdGhpc19jb2VyY2libGVfdG9fb2JqZWN0KHRocik7CisJZHVrX2dldF9wcm9wX3N0 cmlkeF9zaG9ydCh0aHIsIC0xLCBEVUtfU1RSSURYX0pPSU4pOworCisJLyogWyAuLi4gdGhpcyBm dW5jIF0gKi8KKwlpZiAoIWR1a19pc19jYWxsYWJsZSh0aHIsIC0xKSkgeworCQkvKiBGYWxsIGJh Y2sgdG8gdGhlIGluaXRpYWwgKG9yaWdpbmFsKSBPYmplY3QudG9TdHJpbmcoKS4gIFdlIGRvbid0 CisJCSAqIGN1cnJlbnRseSBoYXZlIHBvaW50ZXJzIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMs IG9ubHkgdGhlIHRvcAorCQkgKiBsZXZlbCBnbG9iYWwgb2JqZWN0cyAobGlrZSAiQXJyYXkiKSBz byB0aGlzIGlzIG5vdyBkb25lIGluIGEgYml0CisJCSAqIG9mIGEgaGFja3kgbWFubmVyLiAgSXQg d291bGQgYmUgY2xlYW5lciB0byBwdXNoIHRoZSAob3JpZ2luYWwpCisJCSAqIGZ1bmN0aW9uIGFu ZCB1c2UgZHVrX2NhbGxfbWV0aG9kKCkuCisJCSAqLworCisJCS8qIFhYWDogJ3RoaXMnIHdpbGwg YmUgVG9PYmplY3QoKSBjb2VyY2VkIHR3aWNlLCB3aGljaCBpcyBpbmNvcnJlY3QKKwkJICogYnV0 IHNob3VsZCBoYXZlIG5vIHZpc2libGUgc2lkZSBlZmZlY3RzLgorCQkgKi8KKwkJRFVLX0RERChE VUtfREREUFJJTlQoInRoaXMuam9pbiBpcyBub3QgY2FsbGFibGUsIGZhbGwgYmFjayB0byAob3Jp Z2luYWwpIE9iamVjdC50b1N0cmluZyIpKTsKKwkJZHVrX3NldF90b3AodGhyLCAwKTsKKwkJcmV0 dXJuIGR1a19iaV9vYmplY3RfcHJvdG90eXBlX3RvX3N0cmluZyh0aHIpOyAgLyogaGFzIGFjY2Vz cyB0byAndGhpcycgYmluZGluZyAqLworCX0KKworCS8qIFsgLi4uIHRoaXMgZnVuYyBdICovCisK KwlkdWtfaW5zZXJ0KHRociwgLTIpOworCisJLyogWyAuLi4gZnVuYyB0aGlzIF0gKi8KKworCURV S19EREQoRFVLX0RERFBSSU5UKCJjYWxsaW5nOiBmdW5jPSUhaVQsIHRoaXM9JSFpVCIsCisJICAg ICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0yKSwKKwkg ICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7 CisJZHVrX2NhbGxfbWV0aG9kKHRociwgMCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICBj b25jYXQoKQorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3Rv dHlwZV9jb25jYXQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pZHhfdCBpLCBuOworCWR1a191 aW50MzJfdCBqLCBpZHgsIGxlbjsKKwlkdWtfaG9iamVjdCAqaDsKKwlkdWtfc2l6ZV90IHRtcF9s ZW47CisKKwkvKiBYWFg6IEluIEVTMjAxNSBBcnJheSAubGVuZ3RoIGNhbiBiZSB1cCB0byAyXjUz LTEuICBUaGUgY3VycmVudAorCSAqIGltcGxlbWVudGF0aW9uIGlzIGxpbWl0ZWQgdG8gMl4zMi0x LgorCSAqLworCisJLyogWFhYOiBGYXN0IHBhdGggZm9yIGFycmF5ICd0aGlzJyBhbmQgYXJyYXkg ZWxlbWVudC4gKi8KKworCS8qIFhYWDogVGhlIGluc2VydCBoZXJlIGlzIGEgYml0IGV4cGVuc2l2 ZSBpZiB0aGVyZSBhcmUgYSBsb3Qgb2YgaXRlbXMuCisJICogSXQgY291bGQgYWxzbyBiZSBzcGVj aWFsIGNhc2VkIGluIHRoZSBvdXRlcm1vc3QgZm9yIGxvb3AgcXVpdGUgZWFzaWx5CisJICogKGFz IHRoZSBlbGVtZW50IGlzIGR1cCgpJ2QgYW55d2F5KS4KKwkgKi8KKworCSh2b2lkKSBkdWtfcHVz aF90aGlzX2NvZXJjaWJsZV90b19vYmplY3QodGhyKTsKKwlkdWtfaW5zZXJ0KHRociwgMCk7CisJ biA9IGR1a19nZXRfdG9wKHRocik7CisJZHVrX3B1c2hfYXJyYXkodGhyKTsgIC8qIC0+IFsgVG9P YmplY3QodGhpcykgaXRlbTEgLi4uIGl0ZW1OIGFyciBdICovCisKKwkvKiBOT1RFOiBUaGUgQXJy YXkgc3BlY2lhbCBiZWhhdmlvcnMgYXJlIE5PVCBpbnZva2VkIGJ5IGR1a194ZGVmX3Byb3BfaW5k ZXgoKQorCSAqICh3aGljaCBkaWZmZXJzIGZyb20gdGhlIG9mZmljaWFsIGFsZ29yaXRobSkuICBJ ZiBubyBlcnJvciBpcyB0aHJvd24sIHRoaXMKKwkgKiBkb2Vzbid0IG1hdHRlciBhcyB0aGUgbGVu Z3RoIGlzIHVwZGF0ZWQgYXQgdGhlIGVuZC4gIEhvd2V2ZXIsIGlmIGFuIGVycm9yCisJICogaXMg dGhyb3duLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdW5zZXQuICBUaGF0IHNob3VsZG4ndCBtYXR0ZXIg YmVjYXVzZSB0aGUKKwkgKiBjYWxsZXIgd29uJ3QgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBpbnRl cm1lZGlhdGUgdmFsdWUuCisJICovCisKKwlpZHggPSAwOworCWZvciAoaSA9IDA7IGkgPCBuOyBp KyspIHsKKwkJZHVrX2Jvb2xfdCBzcHJlYWRhYmxlOworCQlkdWtfYm9vbF90IG5lZWRfaGFzX2No ZWNrOworCisJCURVS19BU1NFUlRfVE9QKHRociwgbiArIDEpOworCisJCS8qIFsgVG9PYmplY3Qo dGhpcykgaXRlbTEgLi4uIGl0ZW1OIGFyciBdICovCisKKwkJaCA9IGR1a19nZXRfaG9iamVjdCh0 aHIsIGkpOworCisJCWlmIChoID09IE5VTEwpIHsKKwkJCXNwcmVhZGFibGUgPSAwOworCQl9IGVs c2UgeworI2lmIGRlZmluZWQoRFVLX1VTRV9TWU1CT0xfQlVJTFRJTikKKwkJCWR1a19nZXRfcHJv cF9zdHJpZHgodGhyLCBpLCBEVUtfU1RSSURYX1dFTExLTk9XTl9TWU1CT0xfSVNfQ09OQ0FUX1NQ UkVBREFCTEUpOworCQkJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAtMSkpIHsKKwkJCQlzcHJl YWRhYmxlID0gKERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoaCkgPT0gRFVLX0hPQkpFQ1Rf Q0xBU1NfQVJSQVkpOworCQkJfSBlbHNlIHsKKwkJCQlzcHJlYWRhYmxlID0gZHVrX3RvX2Jvb2xl YW4odGhyLCAtMSk7CisJCQl9CisJCQlkdWtfcG9wX25vZGVjcmVmX3Vuc2FmZSh0aHIpOworI2Vs c2UKKwkJCXNwcmVhZGFibGUgPSAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoKSA9PSBE VUtfSE9CSkVDVF9DTEFTU19BUlJBWSk7CisjZW5kaWYKKwkJfQorCisJCWlmICghc3ByZWFkYWJs ZSkgeworCQkJZHVrX2R1cCh0aHIsIGkpOworCQkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWModGhy LCAtMiwgaWR4KTsKKwkJCWlkeCsrOworCQkJaWYgKERVS19VTkxJS0VMWShpZHggPT0gMFUpKSB7 CisJCQkJLyogSW5kZXggYWZ0ZXIgdXBkYXRlIGlzIDAsIGFuZCBpbmRleCB3cml0dGVuCisJCQkJ ICogd2FzIDB4ZmZmZmZmZmZVTCB3aGljaCBpcyBubyBsb25nZXIgYSB2YWxpZAorCQkJCSAqIGFy cmF5IGluZGV4LgorCQkJCSAqLworCQkJCWdvdG8gZmFpbF93cmFwOworCQkJfQorCQkJY29udGlu dWU7CisJCX0KKworCQlEVUtfQVNTRVJUKGR1a19pc19vYmplY3QodGhyLCBpKSk7CisJCW5lZWRf aGFzX2NoZWNrID0gKERVS19IT0JKRUNUX0lTX1BST1hZKGgpICE9IDApOyAgLyogQWx3YXlzIDAg dy9vIFByb3h5IHN1cHBvcnQuICovCisKKwkJLyogWyBUb09iamVjdCh0aGlzKSBpdGVtMSAuLi4g aXRlbU4gYXJyIF0gKi8KKworCQl0bXBfbGVuID0gZHVrX2dldF9sZW5ndGgodGhyLCBpKTsKKwkJ bGVuID0gKGR1a191aW50MzJfdCkgdG1wX2xlbjsKKwkJaWYgKERVS19VTkxJS0VMWSh0bXBfbGVu ICE9IChkdWtfc2l6ZV90KSBsZW4pKSB7CisJCQlnb3RvIGZhaWxfd3JhcDsKKwkJfQorCQlpZiAo RFVLX1VOTElLRUxZKGlkeCArIGxlbiA8IGlkeCkpIHsKKwkJCS8qIFJlc3VsdCBsZW5ndGggbXVz dCBiZSBhdCBtb3N0IDB4ZmZmZmZmZmZVTCB0byBiZQorCQkJICogYSB2YWxpZCAzMi1iaXQgYXJy YXkgaW5kZXguCisJCQkgKi8KKwkJCWdvdG8gZmFpbF93cmFwOworCQl9CisJCWZvciAoaiA9IDA7 IGogPCBsZW47IGorKykgeworCQkJLyogRm9yIGEgUHJveHkgZWxlbWVudCwgYW4gZXhwbGljaXQg J2hhcycgY2hlY2sgaXMKKwkJCSAqIG5lZWRlZCB0byBhbGxvdyB0aGUgUHJveHkgdG8gcHJlc2Vu dCBnYXBzLgorCQkJICovCisJCQlpZiAobmVlZF9oYXNfY2hlY2spIHsKKwkJCQlpZiAoZHVrX2hh c19wcm9wX2luZGV4KHRociwgaSwgaikpIHsKKwkJCQkJZHVrX2dldF9wcm9wX2luZGV4KHRociwg aSwgaik7CisJCQkJCWR1a194ZGVmX3Byb3BfaW5kZXhfd2VjKHRociwgLTIsIGlkeCk7CisJCQkJ fQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoZHVrX2dldF9wcm9wX2luZGV4KHRociwgaSwgaikpIHsK KwkJCQkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWModGhyLCAtMiwgaWR4KTsKKwkJCQl9IGVsc2Ug eworCQkJCQlkdWtfcG9wX3VuZGVmaW5lZCh0aHIpOworCQkJCX0KKwkJCX0KKwkJCWlkeCsrOwor CQkJRFVLX0FTU0VSVChpZHggIT0gMFUpOyAgLyogV3JhcCBjaGVjayBhYm92ZS4gKi8KKwkJfQor CX0KKworCS8qIEVTNS4xIGhhcyBhIHNwZWNpZmljYXRpb24gImJ1ZyIgaW4gdGhhdCBub25leGlz dGVudCB0cmFpbGluZworCSAqIGVsZW1lbnRzIGRvbid0IGFmZmVjdCB0aGUgcmVzdWx0IC5sZW5n dGguICBUZXN0MjYyIGFuZCBvdGhlcgorCSAqIGVuZ2luZXMgZGlzYWdyZWUsIGFuZCB0aGUgc3Bl Y2lmaWNhdGlvbiBidWcgd2FzIGZpeGVkIGluIEVTMjAxNQorCSAqIChzZWUgTk9URSAxIGluIGh0 dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtYXJyYXku cHJvdG90eXBlLmNvbmNhdCkuCisJICovCisJZHVrX3B1c2hfdWFycmlkeCh0aHIsIGlkeCk7CisJ ZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9MRU5HVEgsIERV S19QUk9QREVTQ19GTEFHU19XKTsKKworCURVS19BU1NFUlRfVE9QKHRociwgbiArIDEpOworCXJl dHVybiAxOworCisgZmFpbF93cmFwOgorCURVS19FUlJPUl9SQU5HRV9JTlZBTElEX0xFTkdUSCh0 aHIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworfQorCisvKgorICogIGpvaW4oKSwg dG9Mb2NhbGVTdHJpbmcoKQorICoKKyAqICBOb3RlOiBjaGVja2luZyB2YWxzdGFjayBpcyBuZWNl c3NhcnksIGJ1dCBvbmx5IGluIHRoZSBwZXItZWxlbWVudCBsb29wLgorICoKKyAqICBOb3RlOiB0 aGUgdHJpdmlhbCBhcHByb2FjaCBvZiBwdXNoaW5nIGFsbCB0aGUgZWxlbWVudHMgb24gdGhlIHZh bHVlIHN0YWNrCisgKiAgYW5kIHRoZW4gY2FsbGluZyBkdWtfam9pbigpIGZhaWxzIHdoZW4gdGhl IGFycmF5IGNvbnRhaW5zIGEgbGFyZ2UgbnVtYmVyCisgKiAgb2YgZWxlbWVudHMuICBUaGlzIHBy b2JsZW0gY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIGR1a19qb2luKCkgYmVjYXVzZSB0aGUKKyAqICBl bGVtZW50cyB0byBqb2luIG11c3QgYmUgaGFuZGxlZCBoZXJlIGFuZCBoYXZlIHNwZWNpYWwgaGFu ZGxpbmcuICBDdXJyZW50CisgKiAgYXBwcm9hY2ggaXMgdG8gZG8gaW50ZXJtZWRpYXRlIGpvaW5z IHdpdGggdmVyeSBsYXJnZSBudW1iZXIgb2YgZWxlbWVudHMuCisgKiAgVGhlcmUgaXMgbm8gZmFu Y3kgaGFuZGxpbmc7IHRoZSBwcmVmaXggZ2V0cyByZS1qb2luZWQgbXVsdGlwbGUgdGltZXMuCisg Ki8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlfcHJvdG90eXBlX2pvaW5f c2hhcmVkKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdWludDMyX3QgbGVuLCBjb3VudDsKKwlk dWtfdWludDMyX3QgaWR4OworCWR1a19zbWFsbF9pbnRfdCB0b19sb2NhbGVfc3RyaW5nID0gZHVr X2dldF9jdXJyZW50X21hZ2ljKHRocik7CisJZHVrX2lkeF90IHZhbHN0YWNrX3JlcXVpcmVkOwor CisJLyogRm9yIGpvaW4oKSwgbmFyZ3MgaXMgMS4gIEZvciB0b0xvY2FsZVN0cmluZygpLCBuYXJn cyBpcyAwIGFuZAorCSAqIHNldHRpbmcgdGhlIHRvcCBlc3NlbnRpYWxseSBwdXNoZXMgYW4gdW5k ZWZpbmVkIHRvIHRoZSBzdGFjaywKKwkgKiB0aHVzIGRlZmF1bHRpbmcgdG8gYSBjb21tYSBzZXBh cmF0b3IuCisJICovCisJZHVrX3NldF90b3AodGhyLCAxKTsKKwlpZiAoZHVrX2lzX3VuZGVmaW5l ZCh0aHIsIDApKSB7CisJCWR1a19wb3BfdW5kZWZpbmVkKHRocik7CisJCWR1a19wdXNoX2hzdHJp bmdfc3RyaWR4KHRociwgRFVLX1NUUklEWF9DT01NQSk7CisJfSBlbHNlIHsKKwkJZHVrX3RvX3N0 cmluZyh0aHIsIDApOworCX0KKworCWxlbiA9IGR1a19fcHVzaF90aGlzX29ial9sZW5fdTMyKHRo cik7CisKKwkvKiBbIHNlcCBUb09iamVjdCh0aGlzKSBsZW4gXSAqLworCisJRFVLX0RERChEVUtf REREUFJJTlQoInNlcD0lIVQsIHRoaXM9JSFULCBsZW49JWx1IiwKKwkgICAgICAgICAgICAgICAg ICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgMCksCisJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIDEpLAorCSAgICAgICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBsb25nKSBsZW4pKTsKKworCS8qIFRoZSBleHRyYSAoKzQpIGlzIHRp Z2h0LiAqLworCXZhbHN0YWNrX3JlcXVpcmVkID0gKGR1a19pZHhfdCkgKChsZW4gPj0gRFVLX19B UlJBWV9NSURfSk9JTl9MSU1JVCA/CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19fQVJSQVlfTUlEX0pPSU5fTElNSVQgOiBsZW4pICsgNCk7CisJZHVrX3JlcXVpcmVfc3Rh Y2sodGhyLCB2YWxzdGFja19yZXF1aXJlZCk7CisKKwlkdWtfZHVwXzAodGhyKTsKKworCS8qIFsg c2VwIFRvT2JqZWN0KHRoaXMpIGxlbiBzZXAgXSAqLworCisJY291bnQgPSAwOworCWlkeCA9IDA7 CisJZm9yICg7OykgeworCQlEVUtfREREKERVS19ERERQUklOVCgiam9pbiBpZHg9JWxkIiwgKGxv bmcpIGlkeCkpOworCQlpZiAoY291bnQgPj0gRFVLX19BUlJBWV9NSURfSk9JTl9MSU1JVCB8fCAg IC8qIGludGVybWVkaWF0ZSBqb2luIHRvIGF2b2lkIHZhbHN0YWNrIG92ZXJmbG93ICovCisJCSAg ICBpZHggPj0gbGVuKSB7IC8qIGVuZCBvZiBsb29wIChjYXJlZnVsIHdpdGggbGVuPT0wKSAqLwor CQkJLyogWyBzZXAgVG9PYmplY3QodGhpcykgbGVuIHNlcCBzdHIwIC4uLiBzdHIoY291bnQtMSkg XSAqLworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm1pZC9maW5hbCBqb2luLCBjb3VudD0lbGQs IGlkeD0lbGQsIGxlbj0lbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvdW50 LCAobG9uZykgaWR4LCAobG9uZykgbGVuKSk7CisJCQlkdWtfam9pbih0aHIsIChkdWtfaWR4X3Qp IGNvdW50KTsgIC8qIC0+IFsgc2VwIFRvT2JqZWN0KHRoaXMpIGxlbiBzdHIgXSAqLworCQkJZHVr X2R1cF8wKHRocik7ICAgICAgICAgICAgICAgICAgICAvKiAtPiBbIHNlcCBUb09iamVjdCh0aGlz KSBsZW4gc3RyIHNlcCBdICovCisJCQlkdWtfaW5zZXJ0KHRociwgLTIpOyAgICAgICAgICAgICAg IC8qIC0+IFsgc2VwIFRvT2JqZWN0KHRoaXMpIGxlbiBzZXAgc3RyIF0gKi8KKwkJCWNvdW50ID0g MTsKKwkJfQorCQlpZiAoaWR4ID49IGxlbikgeworCQkJLyogaWYgdHJ1ZSwgdGhlIHN0YWNrIGFs cmVhZHkgY29udGFpbnMgdGhlIGZpbmFsIHJlc3VsdCAqLworCQkJYnJlYWs7CisJCX0KKworCQlk dWtfZ2V0X3Byb3BfaW5kZXgodGhyLCAxLCAoZHVrX3VhcnJpZHhfdCkgaWR4KTsKKwkJaWYgKGR1 a19pc19udWxsX29yX3VuZGVmaW5lZCh0aHIsIC0xKSkgeworCQkJZHVrX3BvcF9ub2RlY3JlZl91 bnNhZmUodGhyKTsKKwkJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsKKwkJfSBlbHNlIHsK KwkJCWlmICh0b19sb2NhbGVfc3RyaW5nKSB7CisJCQkJZHVrX3RvX29iamVjdCh0aHIsIC0xKTsK KwkJCQlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhfVE9fTE9D QUxFX1NUUklORyk7CisJCQkJZHVrX2luc2VydCh0aHIsIC0yKTsgIC8qIC0+IFsgLi4uIHRvTG9j YWxlU3RyaW5nIFRvT2JqZWN0KHZhbCkgXSAqLworCQkJCWR1a19jYWxsX21ldGhvZCh0aHIsIDAp OworCQkJfQorCQkJZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsKKwkJfQorCisJCWNvdW50Kys7CisJ CWlkeCsrOworCX0KKworCS8qIFsgc2VwIFRvT2JqZWN0KHRoaXMpIGxlbiBzZXAgcmVzdWx0IF0g Ki8KKworCXJldHVybiAxOworfQorCisvKgorICogIHBvcCgpLCBwdXNoKCkKKyAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0FSUkFZX0ZBU1RQQVRIKQorRFVLX0xPQ0FMIGR1a19yZXRfdCBkdWtf X2FycmF5X3BvcF9mYXN0cGF0aChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGFycmF5ICpoX2Fycikg eworCWR1a190dmFsICp0dl9hcnJheXBhcnQ7CisJZHVrX3R2YWwgKnR2X3ZhbDsKKwlkdWtfdWlu dDMyX3QgbGVuOworCisJdHZfYXJyYXlwYXJ0ID0gRFVLX0hPQkpFQ1RfQV9HRVRfQkFTRSh0aHIt PmhlYXAsIChkdWtfaG9iamVjdCAqKSBoX2Fycik7CisJbGVuID0gaF9hcnItPmxlbmd0aDsKKwlp ZiAobGVuIDw9IDApIHsKKwkJLyogbm9wLCByZXR1cm4gdW5kZWZpbmVkICovCisJCXJldHVybiAw OworCX0KKworCWxlbi0tOworCWhfYXJyLT5sZW5ndGggPSBsZW47CisKKwkvKiBGYXN0IHBhdGgg ZG9lc24ndCBjaGVjayBmb3IgYW4gaW5kZXggcHJvcGVydHkgaW5oZXJpdGVkIGZyb20KKwkgKiBB cnJheS5wcm90b3R5cGUuICBUaGlzIGlzIHF1aXRlIG9mdGVuIGFjY2VwdGFibGU7IGlmIG5vdCwK KwkgKiBkaXNhYmxlIGZhc3QgcGF0aC4KKwkgKi8KKwlEVUtfQVNTRVJUX1ZTX1NQQUNFKHRocik7 CisJdHZfdmFsID0gdHZfYXJyYXlwYXJ0ICsgbGVuOworCWlmIChEVUtfVFZBTF9JU19VTlVTRUQo dHZfdmFsKSkgeworCQkvKiBObyBuZXQgcmVmY291bnQgY2hhbmdlLiAgVmFsdWUgc3RhY2sgYWxy ZWFkeSBoYXMKKwkJICogJ3VuZGVmaW5lZCcgYmFzZWQgb24gdmFsdWUgc3RhY2sgaW5pdCBwb2xp Y3kuCisJCSAqLworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOREVGSU5FRCh0aHItPnZhbHN0 YWNrX3RvcCkpOworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOVVNFRCh0dl92YWwpKTsKKwl9 IGVsc2UgeworCQkvKiBObyBuZXQgcmVmY291bnQgY2hhbmdlLiAqLworCQlEVUtfVFZBTF9TRVRf VFZBTCh0aHItPnZhbHN0YWNrX3RvcCwgdHZfdmFsKTsKKwkJRFVLX1RWQUxfU0VUX1VOVVNFRCh0 dl92YWwpOworCX0KKwl0aHItPnZhbHN0YWNrX3RvcCsrOworCisJLyogWFhYOiB0aGVyZSdzIG5v IHNocmluayBjaGVjayBpbiB0aGUgZmFzdCBwYXRoIG5vdyAqLworCisJcmV0dXJuIDE7Cit9Cisj ZW5kaWYgIC8qIERVS19VU0VfQVJSQVlfRkFTVFBBVEggKi8KKworRFVLX0lOVEVSTkFMIGR1a19y ZXRfdCBkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3BvcChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVr X3VpbnQzMl90IGxlbjsKKwlkdWtfdWludDMyX3QgaWR4OworI2lmIGRlZmluZWQoRFVLX1VTRV9B UlJBWV9GQVNUUEFUSCkKKwlkdWtfaGFycmF5ICpoX2FycjsKKyNlbmRpZgorCisJRFVLX0FTU0VS VF9UT1AodGhyLCAwKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BUlJBWV9GQVNUUEFUSCkKKwlo X2FyciA9IGR1a19fYXJyYXlwYXJ0X2Zhc3RwYXRoX3RoaXModGhyKTsKKwlpZiAoaF9hcnIpIHsK KwkJcmV0dXJuIGR1a19fYXJyYXlfcG9wX2Zhc3RwYXRoKHRociwgaF9hcnIpOworCX0KKyNlbmRp ZgorCisJLyogWFhYOiBNZXJnZSBmYXN0cGF0aCBjaGVjayBpbnRvIGEgcmVsYXRlZCBjYWxsIChw dXNoIHRoaXMsIGNvZXJjZSBsZW5ndGgsIGV0Yyk/ICovCisKKwlsZW4gPSBkdWtfX3B1c2hfdGhp c19vYmpfbGVuX3UzMih0aHIpOworCWlmIChsZW4gPT0gMCkgeworCQlkdWtfcHVzaF9pbnQodGhy LCAwKTsKKwkJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIDAsIERVS19TVFJJRFhfTEVO R1RIKTsKKwkJcmV0dXJuIDA7CisJfQorCWlkeCA9IGxlbiAtIDE7CisKKwlkdWtfZ2V0X3Byb3Bf aW5kZXgodGhyLCAwLCAoZHVrX3VhcnJpZHhfdCkgaWR4KTsKKwlkdWtfZGVsX3Byb3BfaW5kZXgo dGhyLCAwLCAoZHVrX3VhcnJpZHhfdCkgaWR4KTsKKwlkdWtfcHVzaF91MzIodGhyLCBpZHgpOwor CWR1a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAwLCBEVUtfU1RSSURYX0xFTkdUSCk7CisJ cmV0dXJuIDE7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVJSQVlfRkFTVFBBVEgpCitEVUtf TE9DQUwgZHVrX3JldF90IGR1a19fYXJyYXlfcHVzaF9mYXN0cGF0aChkdWtfaHRocmVhZCAqdGhy LCBkdWtfaGFycmF5ICpoX2FycikgeworCWR1a190dmFsICp0dl9hcnJheXBhcnQ7CisJZHVrX3R2 YWwgKnR2X3NyYzsKKwlkdWtfdHZhbCAqdHZfZHN0OworCWR1a191aW50MzJfdCBsZW47CisJZHVr X2lkeF90IGksIG47CisKKwlsZW4gPSBoX2Fyci0+bGVuZ3RoOworCXR2X2FycmF5cGFydCA9IERV S19IT0JKRUNUX0FfR0VUX0JBU0UodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgaF9hcnIpOwor CisJbiA9IChkdWtfaWR4X3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90 dG9tKTsKKwlEVUtfQVNTRVJUKG4gPj0gMCk7CisJRFVLX0FTU0VSVCgoZHVrX3VpbnQzMl90KSBu IDw9IERVS19VSU5UMzJfTUFYKTsKKwlpZiAoRFVLX1VOTElLRUxZKGxlbiArIChkdWtfdWludDMy X3QpIG4gPCBsZW4pKSB7CisJCURVS19EKERVS19EUFJJTlQoIkFycmF5LnByb3RvdHlwZS5wdXNo KCkgd291bGQgZ28gYmV5b25kIDMyLWJpdCBsZW5ndGgsIHRocm93IikpOworCQlEVUtfRENFUlJP Ul9SQU5HRV9JTlZBTElEX0xFTkdUSCh0aHIpOyAgLyogIT0gMCByZXR1cm4gdmFsdWUgcmV0dXJu ZWQgYXMgaXMgYnkgY2FsbGVyICovCisJfQorCWlmIChsZW4gKyAoZHVrX3VpbnQzMl90KSBuID4g RFVLX0hPQkpFQ1RfR0VUX0FTSVpFKChkdWtfaG9iamVjdCAqKSBoX2FycikpIHsKKwkJLyogQXJy YXkgcGFydCB3b3VsZCBuZWVkIHRvIGJlIGV4dGVuZGVkLiAgUmVseSBvbiBzbG93IHBhdGgKKwkJ ICogZm9yIG5vdy4KKwkJICoKKwkJICogWFhYOiBSZXdvcmsgaG9iamVjdCBjb2RlIGEgYml0IGFu ZCBhZGQgZXh0ZW5kIHN1cHBvcnQuCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwl0dl9zcmMg PSB0aHItPnZhbHN0YWNrX2JvdHRvbTsKKwl0dl9kc3QgPSB0dl9hcnJheXBhcnQgKyBsZW47CisJ Zm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkvKiBObyBuZXQgcmVmY291bnQgY2hhbmdlOyBy ZXNldCB2YWx1ZSBzdGFjayB2YWx1ZXMgdG8KKwkJICogdW5kZWZpbmVkIHRvIHNhdGlzZnkgdmFs dWUgc3RhY2sgaW5pdCBwb2xpY3kuCisJCSAqLworCQlEVUtfVFZBTF9TRVRfVFZBTCh0dl9kc3Qs IHR2X3NyYyk7CisJCURVS19UVkFMX1NFVF9VTkRFRklORUQodHZfc3JjKTsKKwkJdHZfc3JjKys7 CisJCXR2X2RzdCsrOworCX0KKwl0aHItPnZhbHN0YWNrX3RvcCA9IHRoci0+dmFsc3RhY2tfYm90 dG9tOworCWxlbiArPSAoZHVrX3VpbnQzMl90KSBuOworCWhfYXJyLT5sZW5ndGggPSBsZW47CisK KwlEVUtfQVNTRVJUKChkdWtfdWludF90KSBsZW4gPT0gbGVuKTsKKwlkdWtfcHVzaF91aW50KHRo ciwgKGR1a191aW50X3QpIGxlbik7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0Vf QVJSQVlfRkFTVFBBVEggKi8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlf cHJvdG90eXBlX3B1c2goZHVrX2h0aHJlYWQgKnRocikgeworCS8qIE5vdGU6ICd0aGlzJyBpcyBu b3QgbmVjZXNzYXJpbHkgYW4gQXJyYXkgb2JqZWN0LiAgVGhlIHB1c2goKQorCSAqIGFsZ29yaXRo bSBpcyBzdXBwb3NlZCB0byB3b3JrIGZvciBvdGhlciBraW5kcyBvZiBvYmplY3RzIHRvbywKKwkg KiBzbyB0aGUgYWxnb3JpdGhtIGhhcyBlLmcuIGFuIGV4cGxpY2l0IHVwZGF0ZSBmb3IgdGhlICds ZW5ndGgnCisJICogcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgIm1hZ2ljYWwiIGluIGFycmF5 cy4KKwkgKi8KKworCWR1a191aW50MzJfdCBsZW47CisJZHVrX2lkeF90IGksIG47CisjaWYgZGVm aW5lZChEVUtfVVNFX0FSUkFZX0ZBU1RQQVRIKQorCWR1a19oYXJyYXkgKmhfYXJyOworI2VuZGlm CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVJSQVlfRkFTVFBBVEgpCisJaF9hcnIgPSBkdWtfX2Fy cmF5cGFydF9mYXN0cGF0aF90aGlzKHRocik7CisJaWYgKGhfYXJyKSB7CisJCWR1a19yZXRfdCBy YzsKKwkJcmMgPSBkdWtfX2FycmF5X3B1c2hfZmFzdHBhdGgodGhyLCBoX2Fycik7CisJCWlmIChy YyAhPSAwKSB7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJRFVLX0REKERVS19ERFBSSU5UKCJhcnJh eSBwdXNoKCkgZmFzdCBwYXRoIGV4aXRlZCwgcmVzaXplIGNhc2UiKSk7CisJfQorI2VuZGlmCisK KwluID0gZHVrX2dldF90b3AodGhyKTsKKwlsZW4gPSBkdWtfX3B1c2hfdGhpc19vYmpfbGVuX3Uz Mih0aHIpOworCisJLyogWyBhcmcxIC4uLiBhcmdOIG9iaiBsZW5ndGggXSAqLworCisJLyogVGVj aG5pY2FsbHkgQXJyYXkucHJvdG90eXBlLnB1c2goKSBjYW4gY3JlYXRlIGFuIEFycmF5IHdpdGgg bGVuZ3RoCisJICogbG9uZ2VyIHRoYW4gMl4zMi0xLCBpLmUuIG91dHNpZGUgdGhlIDMyLWJpdCBy YW5nZS4gIFRoZSBmaW5hbCBsZW5ndGgKKwkgKiBpcyAqbm90KiB3cmFwcGVkIHRvIDMyIGJpdHMg aW4gdGhlIHNwZWNpZmljYXRpb24uCisJICoKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHRyYWNr cyBsZW5ndGggd2l0aCBhIHVpbnQzMiBiZWNhdXNlIGl0J3MgbXVjaAorCSAqIG1vcmUgcHJhY3Rp Y2FsLgorCSAqCisJICogU2VlOiB0ZXN0LWJpLWFycmF5LXB1c2gtbWF4bGVuLmpzLgorCSAqLwor CisJaWYgKGxlbiArIChkdWtfdWludDMyX3QpIG4gPCBsZW4pIHsKKwkJRFVLX0QoRFVLX0RQUklO VCgiQXJyYXkucHJvdG90eXBlLnB1c2goKSB3b3VsZCBnbyBiZXlvbmQgMzItYml0IGxlbmd0aCwg dGhyb3ciKSk7CisJCURVS19EQ0VSUk9SX1JBTkdFX0lOVkFMSURfTEVOR1RIKHRocik7CisJfQor CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlkdWtfZHVwKHRociwgaSk7CisJCWR1a19w dXRfcHJvcF9pbmRleCh0aHIsIC0zLCAoZHVrX3VhcnJpZHhfdCkgKGxlbiArIChkdWtfdWludDMy X3QpIGkpKTsKKwl9CisJbGVuICs9IChkdWtfdWludDMyX3QpIG47CisKKwlkdWtfcHVzaF91MzIo dGhyLCBsZW4pOworCWR1a19kdXBfdG9wKHRocik7CisJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9y dCh0aHIsIC00LCBEVUtfU1RSSURYX0xFTkdUSCk7CisKKwkvKiBbIGFyZzEgLi4uIGFyZ04gb2Jq IGxlbmd0aCBuZXdfbGVuZ3RoIF0gKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICBzb3J0KCkK KyAqCisgKiAgQ3VycmVudGx5IHFzb3J0IHdpdGggcmFuZG9tIHBpdm90LiAgVGhpcyBpcyBub3cg cmVhbGx5LCByZWFsbHkgc2xvdywKKyAqICBiZWNhdXNlIHRoZXJlIGlzIG5vIGZhc3QgcGF0aCBm b3IgYXJyYXkgcGFydHMuCisgKgorICogIFNpZ25lZCBpbmRpY2VzIGFyZSB1c2VkIGJlY2F1c2Ug cXNvcnQoKSBsZWF2ZXMgYW5kIGRlZ2VuZXJhdGUgY2FzZXMKKyAqICBtYXkgdXNlIGEgbmVnYXRp dmUgb2Zmc2V0LgorICovCisKK0RVS19MT0NBTCBkdWtfc21hbGxfaW50X3QgZHVrX19hcnJheV9z b3J0X2NvbXBhcmUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2ludF90IGlkeDEsIGR1a19pbnRfdCBp ZHgyKSB7CisJZHVrX2Jvb2xfdCBoYXZlMSwgaGF2ZTI7CisJZHVrX2Jvb2xfdCB1bmRlZjEsIHVu ZGVmMjsKKwlkdWtfc21hbGxfaW50X3QgcmV0OworCWR1a19pZHhfdCBpZHhfb2JqID0gMTsgIC8q IGZpeGVkIG9mZnNldHMgaW4gdmFsc3RhY2sgKi8KKwlkdWtfaWR4X3QgaWR4X2ZuID0gMDsKKwlk dWtfaHN0cmluZyAqaDEsICpoMjsKKworCS8qIEZhc3QgZXhpdCBpZiBpbmRpY2VzIGFyZSBpZGVu dGljYWwuICBUaGlzIGlzIHZhbGlkIGZvciBhIG5vbi1leGlzdGVudCBwcm9wZXJ0eSwKKwkgKiBm b3IgYW4gdW5kZWZpbmVkIHZhbHVlLCBhbmQgYWxtb3N0IGFsd2F5cyBmb3IgVG9TdHJpbmcoKSBj b2VyY2VkIGNvbXBhcmlzb24gb2YKKwkgKiBhcmJpdHJhcnkgdmFsdWVzIChjb3JuZXIgY2FzZXMg d2hlcmUgdGhpcyBpcyBub3QgdGhlIGNhc2UgaW5jbHVkZSBlLmcuIGEgYW4KKwkgKiBvYmplY3Qg d2l0aCB2YXJ5aW5nIFRvU3RyaW5nKCkgY29lcmNpb24pLgorCSAqCisJICogVGhlIHNwZWNpZmlj YXRpb24gZG9lcyBub3QgcHJvaGliaXQgImNhY2hpbmciIG9mIHZhbHVlcyByZWFkIGZyb20gdGhl IGFycmF5LCBzbworCSAqIGFzc3VtaW5nIGVxdWFsaXR5IGZvciBjb21wYXJpbmcgYW4gaW5kZXgg d2l0aCBpdHNlbGYgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YKKwkgKiAiY2FjaGluZyIuCisJ ICoKKwkgKiBBbHNvLCBjb21wYXJlRm4gbWF5IGJlIGluY29uc2lzdGVudCwgc28gc2tpcHBpbmcg YSBjYWxsIHRvIGNvbXBhcmVGbiBoZXJlIG1heQorCSAqIGhhdmUgYW4gZWZmZWN0IG9uIHRoZSBm aW5hbCByZXN1bHQuICBUaGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGFueQorCSAq IHNwZWNpZmljIGJlaGF2aW9yIGZvciBpbmNvbnNpc3RlbnQgY29tcGFyZSBmdW5jdGlvbnMsIHNv IGFnYWluLCB0aGlzIGZhc3QgcGF0aAorCSAqIGlzIE9LLgorCSAqLworCisJaWYgKGlkeDEgPT0g aWR4MikgeworCQlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19hcnJheV9zb3J0X2NvbXBhcmU6 IGlkeDE9JWxkLCBpZHgyPSVsZCAtPiBpbmRpY2VzIGlkZW50aWNhbCwgcXVpY2sgZXhpdCIsCisJ CSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpZHgxLCAobG9uZykgaWR4MikpOworCQlyZXR1 cm4gMDsKKwl9CisKKwloYXZlMSA9IGR1a19nZXRfcHJvcF9pbmRleCh0aHIsIGlkeF9vYmosIChk dWtfdWFycmlkeF90KSBpZHgxKTsKKwloYXZlMiA9IGR1a19nZXRfcHJvcF9pbmRleCh0aHIsIGlk eF9vYmosIChkdWtfdWFycmlkeF90KSBpZHgyKTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJk dWtfX2FycmF5X3NvcnRfY29tcGFyZTogaWR4MT0lbGQsIGlkeDI9JWxkLCBoYXZlMT0lbGQsIGhh dmUyPSVsZCwgdmFsMT0lIVQsIHZhbDI9JSFUIiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9u ZykgaWR4MSwgKGxvbmcpIGlkeDIsIChsb25nKSBoYXZlMSwgKGxvbmcpIGhhdmUyLAorCSAgICAg ICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMiksIChkdWtf dHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCWlmIChoYXZlMSkgeworCQlpZiAo aGF2ZTIpIHsKKwkJCTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBwb3BfcmV0 OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGhhdmUyKSB7CisJCQlyZXQgPSAxOworCQkJZ290byBw b3BfcmV0OworCQl9IGVsc2UgeworCQkJcmV0ID0gMDsKKwkJCWdvdG8gcG9wX3JldDsKKwkJfQor CX0KKworCXVuZGVmMSA9IGR1a19pc191bmRlZmluZWQodGhyLCAtMik7CisJdW5kZWYyID0gZHVr X2lzX3VuZGVmaW5lZCh0aHIsIC0xKTsKKwlpZiAodW5kZWYxKSB7CisJCWlmICh1bmRlZjIpIHsK KwkJCXJldCA9IDA7CisJCQlnb3RvIHBvcF9yZXQ7CisJCX0gZWxzZSB7CisJCQlyZXQgPSAxOwor CQkJZ290byBwb3BfcmV0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHVuZGVmMikgeworCQkJcmV0 ID0gLTE7CisJCQlnb3RvIHBvcF9yZXQ7CisJCX0gZWxzZSB7CisJCQk7CisJCX0KKwl9CisKKwlp ZiAoIWR1a19pc191bmRlZmluZWQodGhyLCBpZHhfZm4pKSB7CisJCWR1a19kb3VibGVfdCBkOwor CisJCS8qIE5vIG5lZWQgdG8gY2hlY2sgY2FsbGFibGU7IGR1a19jYWxsKCkgd2lsbCBkbyB0aGF0 LiAqLworCQlkdWtfZHVwKHRociwgaWR4X2ZuKTsgICAgLyogLT4gWyAuLi4geCB5IGZuIF0gKi8K KwkJZHVrX2luc2VydCh0aHIsIC0zKTsgICAgIC8qIC0+IFsgLi4uIGZuIHggeSBdICovCisJCWR1 a19jYWxsKHRociwgMik7ICAgICAgICAvKiAtPiBbIC4uLiByZXMgXSAqLworCisJCS8qIEVTNSBp cyBhIGJpdCB2YWd1ZSBhYm91dCB3aGF0IHRvIGRvIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMKKwkJ ICogbm90IGEgbnVtYmVyLiAgRVMyMDE1IHByb3ZpZGVzIGEgY29uY3JldGUgZGVzY3JpcHRpb246 CisJCSAqIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl Yy1zb3J0Y29tcGFyZS4KKwkJICovCisKKwkJZCA9IGR1a190b19udW1iZXJfbTEodGhyKTsKKwkJ aWYgKGQgPCAwLjApIHsKKwkJCXJldCA9IC0xOworCQl9IGVsc2UgaWYgKGQgPiAwLjApIHsKKwkJ CXJldCA9IDE7CisJCX0gZWxzZSB7CisJCQkvKiBCZWNhdXNlIE5hTiBjb21wYXJlcyB0byBmYWxz ZSwgTmFOIGlzIGhhbmRsZWQgaGVyZQorCQkJICogd2l0aG91dCBhbiBleHBsaWNpdCBjaGVjayBh Ym92ZS4KKwkJCSAqLworCQkJcmV0ID0gMDsKKwkJfQorCisJCWR1a19wb3Bfbm9kZWNyZWZfdW5z YWZlKHRocik7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiByZXN1bHQgJWxkIChmcm9tIGNv bXBhcmVmbiwgYWZ0ZXIgY29lcmNpb24pIiwgKGxvbmcpIHJldCkpOworCQlyZXR1cm4gcmV0Owor CX0KKworCS8qIHN0cmluZyBjb21wYXJlIGlzIHRoZSBkZWZhdWx0IChhIGJpdCBvZGRseSkgKi8K KworCS8qIFhYWDogYW55IHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYWluIGFycmF5OyBjYXVzZXMg cmVwZWF0ZWQgY29lcmNpb24gbm93PyAqLworCWgxID0gZHVrX3RvX2hzdHJpbmcodGhyLCAtMik7 CisJaDIgPSBkdWtfdG9faHN0cmluZ19tMSh0aHIpOworCURVS19BU1NFUlQoaDEgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVChoMiAhPSBOVUxMKTsKKworCXJldCA9IGR1a19qc19zdHJpbmdfY29tcGFy ZShoMSwgaDIpOyAgLyogcmV0dmFsIGlzIGRpcmVjdGx5IHVzYWJsZSAqLworCWdvdG8gcG9wX3Jl dDsKKworIHBvcF9yZXQ6CisJZHVrX3BvcF8yX3Vuc2FmZSh0aHIpOworCURVS19EREQoRFVLX0RE RFBSSU5UKCItPiByZXN1bHQgJWxkIiwgKGxvbmcpIHJldCkpOworCXJldHVybiByZXQ7Cit9CisK K0RVS19MT0NBTCB2b2lkIGR1a19fYXJyYXlfc29ydF9zd2FwKGR1a19odGhyZWFkICp0aHIsIGR1 a19pbnRfdCBsLCBkdWtfaW50X3QgcikgeworCWR1a19ib29sX3QgaGF2ZV9sLCBoYXZlX3I7CisJ ZHVrX2lkeF90IGlkeF9vYmogPSAxOyAgLyogZml4ZWQgb2Zmc2V0IGluIHZhbHN0YWNrICovCisK KwlpZiAobCA9PSByKSB7CisJCXJldHVybjsKKwl9CisKKwkvKiBzd2FwIGVsZW1lbnRzOyBkZWFs IHdpdGggbm9uLWV4aXN0ZW50IGVsZW1lbnRzIGNvcnJlY3RseSAqLworCWhhdmVfbCA9IGR1a19n ZXRfcHJvcF9pbmRleCh0aHIsIGlkeF9vYmosIChkdWtfdWFycmlkeF90KSBsKTsKKwloYXZlX3Ig PSBkdWtfZ2V0X3Byb3BfaW5kZXgodGhyLCBpZHhfb2JqLCAoZHVrX3VhcnJpZHhfdCkgcik7CisK KwlpZiAoaGF2ZV9yKSB7CisJCS8qIHJpZ2h0IGV4aXN0cywgW1tQdXRdXSByZWdhcmRsZXNzIHdo ZXRoZXIgb3Igbm90IGxlZnQgZXhpc3RzICovCisJCWR1a19wdXRfcHJvcF9pbmRleCh0aHIsIGlk eF9vYmosIChkdWtfdWFycmlkeF90KSBsKTsKKwl9IGVsc2UgeworCQlkdWtfZGVsX3Byb3BfaW5k ZXgodGhyLCBpZHhfb2JqLCAoZHVrX3VhcnJpZHhfdCkgbCk7CisJCWR1a19wb3BfdW5kZWZpbmVk KHRocik7CisJfQorCisJaWYgKGhhdmVfbCkgeworCQlkdWtfcHV0X3Byb3BfaW5kZXgodGhyLCBp ZHhfb2JqLCAoZHVrX3VhcnJpZHhfdCkgcik7CisJfSBlbHNlIHsKKwkJZHVrX2RlbF9wcm9wX2lu ZGV4KHRociwgaWR4X29iaiwgKGR1a191YXJyaWR4X3QpIHIpOworCQlkdWtfcG9wX3VuZGVmaW5l ZCh0aHIpOworCX0KK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR19MRVZFTCkgJiYgKERV S19VU0VfREVCVUdfTEVWRUwgPj0gMikKKy8qIERlYnVnIHByaW50IHdoaWNoIHZpc3VhbGl6ZXMg dGhlIHFzb3J0IHBhcnRpdGlvbmluZyBwcm9jZXNzLiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19k ZWJ1Z2xvZ19xc29ydF9zdGF0ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaW50X3QgbG8sIGR1a19p bnRfdCBoaSwgZHVrX2ludF90IHBpdm90KSB7CisJY2hhciBidWZbNDA5Nl07CisJY2hhciAqcHRy ID0gYnVmOworCWR1a19pbnRfdCBpLCBuOworCW4gPSAoZHVrX2ludF90KSBkdWtfZ2V0X2xlbmd0 aCh0aHIsIDEpOworCWlmIChuID4gNDAwMCkgeworCQluID0gNDAwMDsKKwl9CisJKnB0cisrID0g J1snOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKGkgPT0gcGl2b3QpIHsKKwkJ CSpwdHIrKyA9ICd8JzsKKwkJfSBlbHNlIGlmIChpID09IGxvKSB7CisJCQkqcHRyKysgPSAnPCc7 CisJCX0gZWxzZSBpZiAoaSA9PSBoaSkgeworCQkJKnB0cisrID0gJz4nOworCQl9IGVsc2UgaWYg KGkgPj0gbG8gJiYgaSA8PSBoaSkgeworCQkJKnB0cisrID0gJy0nOworCQl9IGVsc2UgeworCQkJ KnB0cisrID0gJyAnOworCQl9CisJfQorCSpwdHIrKyA9ICddJzsKKwkqcHRyKysgPSAnXDAnOwor CisJRFVLX0RERChEVUtfREREUFJJTlQoIiVzICAgKGxvPSVsZCwgaGk9JWxkLCBwaXZvdD0lbGQp IiwKKwkgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBidWYsIChsb25nKSBsbywg KGxvbmcpIGhpLCAobG9uZykgcGl2b3QpKTsKK30KKyNlbmRpZgorCitEVUtfTE9DQUwgdm9pZCBk dWtfX2FycmF5X3Fzb3J0KGR1a19odGhyZWFkICp0aHIsIGR1a19pbnRfdCBsbywgZHVrX2ludF90 IGhpKSB7CisJZHVrX2ludF90IHAsIGwsIHI7CisKKwkvKiBUaGUgbG8vaGkgaW5kaWNlcyBtYXkg YmUgY3Jvc3NlZCBhbmQgaGkgPCAwIGlzIHBvc3NpYmxlIGF0IGVudHJ5LiAqLworCisJRFVLX0RE RChEVUtfREREUFJJTlQoImR1a19fYXJyYXlfcXNvcnQ6IGxvPSVsZCwgaGk9JWxkLCBvYmo9JSFU IiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgbG8sIChsb25nKSBoaSwgKGR1a190dmFs ICopIGR1a19nZXRfdHZhbCh0aHIsIDEpKSk7CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDMpOwor CisJLyogSW4gc29tZSBjYXNlcyBpdCBtYXkgYmUgdGhhdCBsbyA+IGhpLCBvciBoaSA8IDA7IHRo ZXNlCisJICogZGVnZW5lcmF0ZSBjYXNlcyBoYXBwZW4gZS5nLiBmb3IgZW1wdHkgYXJyYXlzLCBh bmQgaW4KKwkgKiByZWN1cnNpb24gbGVhdmVzLgorCSAqLworCisJLyogdHJpdmlhbCBjYXNlcyAq LworCWlmIChoaSAtIGxvIDwgMSkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiZGVnZW5lcmF0 ZSBjYXNlLCByZXR1cm4gaW1tZWRpYXRlbHkiKSk7CisJCXJldHVybjsKKwl9CisJRFVLX0FTU0VS VChoaSA+IGxvKTsKKwlEVUtfQVNTRVJUKGhpIC0gbG8gKyAxID49IDIpOworCisJLyogcmFuZG9t aXplZCBwaXZvdCBzZWxlY3Rpb24gKi8KKwlwID0gbG8gKyAoZHVrX2ludF90KSAoRFVLX1VUSUxf R0VUX1JBTkRPTV9ET1VCTEUodGhyKSAqIChkdWtfZG91YmxlX3QpIChoaSAtIGxvICsgMSkpOwor CURVS19BU1NFUlQocCA+PSBsbyAmJiBwIDw9IGhpKTsKKwlEVUtfREREKERVS19ERERQUklOVCgi bG89JWxkLCBoaT0lbGQsIGNob3NlIHBpdm90IHA9JWxkIiwgKGxvbmcpIGxvLCAobG9uZykgaGks IChsb25nKSBwKSk7CisKKwkvKiBtb3ZlIHBpdm90IG91dCBvZiB0aGUgd2F5ICovCisJZHVrX19h cnJheV9zb3J0X3N3YXAodGhyLCBwLCBsbyk7CisJcCA9IGxvOworCURVS19EREQoRFVLX0RERFBS SU5UKCJwaXZvdCBtb3ZlZCBvdXQgb2YgdGhlIHdheTogJSFUIiwgKGR1a190dmFsICopIGR1a19n ZXRfdHZhbCh0aHIsIDEpKSk7CisKKwlsID0gbG8gKyAxOworCXIgPSBoaTsKKwlmb3IgKDs7KSB7 CisJCS8qIGZpbmQgZWxlbWVudHMgdG8gc3dhcCAqLworCQlmb3IgKDs7KSB7CisJCQlEVUtfRERE KERVS19ERERQUklOVCgibGVmdCBzY2FuOiBsPSVsZCwgcj0lbGQsIHA9JWxkIiwKKwkJCSAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBsLCAobG9uZykgciwgKGxvbmcpIHApKTsKKwkJCWlmIChs ID49IGhpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZHVrX19hcnJheV9zb3J0X2NvbXBh cmUodGhyLCBsLCBwKSA+PSAwKSB7ICAvKiAhKGwgPCBwKSAqLworCQkJCWJyZWFrOworCQkJfQor CQkJbCsrOworCQl9CisJCWZvciAoOzspIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJyaWdo dCBzY2FuOiBsPSVsZCwgcj0lbGQsIHA9JWxkIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBsLCAobG9uZykgciwgKGxvbmcpIHApKTsKKwkJCWlmIChyIDw9IGxvKSB7CisJCQkJYnJl YWs7CisJCQl9CisJCQlpZiAoZHVrX19hcnJheV9zb3J0X2NvbXBhcmUodGhyLCBwLCByKSA+PSAw KSB7ICAvKiAhKHAgPCByKSAqLworCQkJCWJyZWFrOworCQkJfQorCQkJci0tOworCQl9CisJCWlm IChsID49IHIpIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlEVUtfQVNTRVJUKGwgPCByKTsKKwor CQlEVUtfREREKERVS19ERERQUklOVCgic3dhcCAlbGQgYW5kICVsZCIsIChsb25nKSBsLCAobG9u ZykgcikpOworCisJCWR1a19fYXJyYXlfc29ydF9zd2FwKHRociwgbCwgcik7CisKKwkJRFVLX0RE RChEVUtfREREUFJJTlQoImFmdGVyIHN3YXA6ICUhVCIsIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2 YWwodGhyLCAxKSkpOworCQlsKys7CisJCXItLTsKKwl9CisgZG9uZToKKwkvKiBOb3RlIHRoYXQg J2wnIGFuZCAncicgbWF5IGNyb3NzLCBpLmUuIHIgPCBsICovCisJRFVLX0FTU0VSVChsID49IGxv ICYmIGwgPD0gaGkpOworCURVS19BU1NFUlQociA+PSBsbyAmJiByIDw9IGhpKTsKKworCS8qIFhY WDogdGhlcmUncyBubyBleHBsaWNpdCByZWN1cnNpb24gYm91bmQgaGVyZSBub3cuICBGb3IgdGhl IGF2ZXJhZ2UKKwkgKiBxc29ydCByZWN1cnNpb24gZGVwdGggTyhsb2cgbikgdGhhdCdzIG5vdCBy ZWFsbHkgbmVjZXNzYXJ5OiBlLmcuIGZvcgorCSAqIDIqKjMyIHJlY3Vyc2lvbiBkZXB0aCB3b3Vs ZCBiZSBhYm91dCAzMiB3aGljaCBpcyBPSy4gIEhvd2V2ZXIsIHFzb3J0CisJICogd29yc3QgY2Fz ZSByZWN1cnNpb24gZGVwdGggaXMgTyhuKSB3aGljaCBtYXkgYmUgYSBwcm9ibGVtLgorCSAqLwor CisJLyogbW92ZSBwaXZvdCB0byBpdHMgZmluYWwgcGxhY2UgKi8KKwlEVUtfREREKERVS19ERERQ UklOVCgiYmVmb3JlIGZpbmFsIHBpdm90IHN3YXA6ICUhVCIsIChkdWtfdHZhbCAqKSBkdWtfZ2V0 X3R2YWwodGhyLCAxKSkpOworCWR1a19fYXJyYXlfc29ydF9zd2FwKHRociwgbG8sIHIpOworCisj aWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAmJiAoRFVLX1VTRV9ERUJVR19MRVZFTCA+ PSAyKQorCWR1a19fZGVidWdsb2dfcXNvcnRfc3RhdGUodGhyLCBsbywgaGksIHIpOworI2VuZGlm CisKKwlEVUtfREREKERVS19ERERQUklOVCgicmVjdXJzZTogcGl2b3Q9JWxkLCBvYmo9JSFUIiwg KGxvbmcpIHIsIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAxKSkpOworCWR1a19fYXJy YXlfcXNvcnQodGhyLCBsbywgciAtIDEpOworCWR1a19fYXJyYXlfcXNvcnQodGhyLCByICsgMSwg aGkpOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9hcnJheV9wcm90b3R5cGVf c29ydChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQzMl90IGxlbjsKKworCS8qIFhYWDog bGVuID49IDB4ODAwMDAwMDAgd29uJ3Qgd29yayBiZWxvdyBiZWNhdXNlIGEgc2lnbmVkIHR5cGUK KwkgKiBpcyBuZWVkZWQgYnkgcXNvcnQuCisJICovCisJbGVuID0gZHVrX19wdXNoX3RoaXNfb2Jq X2xlbl91MzJfbGltaXRlZCh0aHIpOworCisJLyogc3RhY2tbMF0gPSBjb21wYXJlRm4KKwkgKiBz dGFja1sxXSA9IFRvT2JqZWN0KHRoaXMpCisJICogc3RhY2tbMl0gPSBUb1VpbnQzMihsZW5ndGgp CisJICovCisKKwlpZiAobGVuID4gMCkgeworCQkvKiBhdm9pZCBkZWdlbmVyYXRlIGNhc2VzLCBz byB0aGF0IChsZW4gLSAxKSB3b24ndCB1bmRlcmZsb3cgKi8KKwkJZHVrX19hcnJheV9xc29ydCh0 aHIsIChkdWtfaW50X3QpIDAsIChkdWtfaW50X3QpIChsZW4gLSAxKSk7CisJfQorCisJRFVLX0FT U0VSVF9UT1AodGhyLCAzKTsKKwlkdWtfcG9wX25vZGVjcmVmX3Vuc2FmZSh0aHIpOworCXJldHVy biAxOyAgLyogcmV0dXJuIFRvT2JqZWN0KHRoaXMpICovCit9CisKKy8qCisgKiAgc3BsaWNlKCkK KyAqLworCisvKiBYWFg6IHRoaXMgY29tcGlsZXMgdG8gb3ZlciA1MDAgYnl0ZXMgbm93LCBldmVu IHdpdGhvdXQgc3BlY2lhbCBoYW5kbGluZworICogZm9yIGFuIGFycmF5IHBhcnQuICBVc2VzIHNp Z25lZCBpbnRzIHNvIGRvZXMgbm90IGhhbmRsZSBmdWxsIGFycmF5IHJhbmdlIGNvcnJlY3RseS4K KyAqLworCisvKiBYWFg6IGNhbiBzaGlmdCgpIC8gdW5zaGlmdCgpIHVzZSB0aGUgc2FtZSBoZWxw ZXI/CisgKiAgIHNoaWZ0KCkgaXMgKGNsb3NlIHRvPykgPC0tPiBzcGxpY2UoMCwgMSkKKyAqICAg dW5zaGlmdCBpcyAoY2xvc2UgdG8/KSA8LS0+IHNwbGljZSgwLCAwLCBbaXRlbXNdKT8KKyAqLwor CitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9hcnJheV9wcm90b3R5cGVfc3BsaWNlKGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaWR4X3QgbmFyZ3M7CisJZHVrX3VpbnQzMl90IGxlbl91 MzI7CisJZHVrX2ludF90IGxlbjsKKwlkdWtfYm9vbF90IGhhdmVfZGVsY291bnQ7CisJZHVrX2lu dF90IGl0ZW1fY291bnQ7CisJZHVrX2ludF90IGFjdF9zdGFydDsKKwlkdWtfaW50X3QgZGVsX2Nv dW50OworCWR1a19pbnRfdCBpLCBuOworCisJRFVLX1VOUkVGKGhhdmVfZGVsY291bnQpOworCisJ bmFyZ3MgPSBkdWtfZ2V0X3RvcCh0aHIpOworCWlmIChuYXJncyA8IDIpIHsKKwkJZHVrX3NldF90 b3AodGhyLCAyKTsKKwkJbmFyZ3MgPSAyOworCQloYXZlX2RlbGNvdW50ID0gMDsKKwl9IGVsc2Ug eworCQloYXZlX2RlbGNvdW50ID0gMTsKKwl9CisKKwkvKiBYWFg6IGxlbiA+PSAweDgwMDAwMDAw IHdvbid0IHdvcmsgYmVsb3cgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlCisJICogYWJsZSB0byByZXBy ZXNlbnQgLWxlbi4KKwkgKi8KKwlsZW5fdTMyID0gZHVrX19wdXNoX3RoaXNfb2JqX2xlbl91MzJf bGltaXRlZCh0aHIpOworCWxlbiA9IChkdWtfaW50X3QpIGxlbl91MzI7CisJRFVLX0FTU0VSVChs ZW4gPj0gMCk7CisKKwlhY3Rfc3RhcnQgPSBkdWtfdG9faW50X2NsYW1wZWQodGhyLCAwLCAtbGVu LCBsZW4pOworCWlmIChhY3Rfc3RhcnQgPCAwKSB7CisJCWFjdF9zdGFydCA9IGxlbiArIGFjdF9z dGFydDsKKwl9CisJRFVLX0FTU0VSVChhY3Rfc3RhcnQgPj0gMCAmJiBhY3Rfc3RhcnQgPD0gbGVu KTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9OT05TVERfQVJSQVlfU1BMSUNFX0RFTENPVU5UKQor CWlmIChoYXZlX2RlbGNvdW50KSB7CisjZW5kaWYKKwkJZGVsX2NvdW50ID0gZHVrX3RvX2ludF9j bGFtcGVkKHRociwgMSwgMCwgbGVuIC0gYWN0X3N0YXJ0KTsKKyNpZiBkZWZpbmVkKERVS19VU0Vf Tk9OU1REX0FSUkFZX1NQTElDRV9ERUxDT1VOVCkKKwl9IGVsc2UgeworCQkvKiBFNS4xIHN0YW5k YXJkIGJlaGF2aW9yIHdoZW4gZGVsZXRlQ291bnQgaXMgbm90IGdpdmVuIHdvdWxkIGJlCisJCSAq IHRvIHRyZWF0IGl0IGp1c3QgbGlrZSBpZiAndW5kZWZpbmVkJyB3YXMgZ2l2ZW4sIHdoaWNoIGNv ZXJjZXMKKwkJICogdWx0aW1hdGVseSB0byAwLiAgUmVhbCB3b3JsZCBiZWhhdmlvciBpcyB0byBz cGxpY2UgdG8gdGhlIGVuZAorCQkgKiBvZiBhcnJheSwgc2VlIHRlc3QtYmktYXJyYXktcHJvdG8t c3BsaWNlLW5vLWRlbGNvdW50LmpzLgorCQkgKi8KKwkJZGVsX2NvdW50ID0gbGVuIC0gYWN0X3N0 YXJ0OworCX0KKyNlbmRpZgorCisJRFVLX0FTU0VSVChuYXJncyA+PSAyKTsKKwlpdGVtX2NvdW50 ID0gKGR1a19pbnRfdCkgKG5hcmdzIC0gMik7CisKKwlEVUtfQVNTRVJUKGRlbF9jb3VudCA+PSAw ICYmIGRlbF9jb3VudCA8PSBsZW4gLSBhY3Rfc3RhcnQpOworCURVS19BU1NFUlQoZGVsX2NvdW50 ICsgYWN0X3N0YXJ0IDw9IGxlbik7CisKKwkvKiBGb3Igbm93LCByZXN0cmljdCByZXN1bHQgYXJy YXkgaW50byAzMi1iaXQgbGVuZ3RoIHJhbmdlLiAqLworCWlmICgoKGR1a19kb3VibGVfdCkgbGVu KSAtICgoZHVrX2RvdWJsZV90KSBkZWxfY291bnQpICsgKChkdWtfZG91YmxlX3QpIGl0ZW1fY291 bnQpID4gKGR1a19kb3VibGVfdCkgRFVLX1VJTlQzMl9NQVgpIHsKKwkJRFVLX0QoRFVLX0RQUklO VCgiQXJyYXkucHJvdG90eXBlLnNwbGljZSgpIHdvdWxkIGdvIGJleW9uZCAzMi1iaXQgbGVuZ3Ro LCB0aHJvdyIpKTsKKwkJRFVLX0RDRVJST1JfUkFOR0VfSU5WQUxJRF9MRU5HVEgodGhyKTsKKwl9 CisKKwlkdWtfcHVzaF9hcnJheSh0aHIpOworCisJLyogc3RhY2tbMF0gPSBzdGFydAorCSAqIHN0 YWNrWzFdID0gZGVsZXRlQ291bnQKKwkgKiBzdGFja1syLi4ubmFyZ3MtMV0gPSBpdGVtcworCSAq IHN0YWNrW25hcmdzXSA9IFRvT2JqZWN0KHRoaXMpICAgICAgICAgICAgICAgLTMKKwkgKiBzdGFj a1tuYXJncysxXSA9IFRvVWludDMyKGxlbmd0aCkgICAgICAgICAgIC0yCisJICogc3RhY2tbbmFy Z3MrMl0gPSByZXN1bHQgYXJyYXkgICAgICAgICAgICAgICAtMQorCSAqLworCisJRFVLX0FTU0VS VF9UT1AodGhyLCBuYXJncyArIDMpOworCisJLyogU3RlcCA5OiBjb3B5IGVsZW1lbnRzLXRvLWJl LWRlbGV0ZWQgaW50byB0aGUgcmVzdWx0IGFycmF5ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgZGVs X2NvdW50OyBpKyspIHsKKwkJaWYgKGR1a19nZXRfcHJvcF9pbmRleCh0aHIsIC0zLCAoZHVrX3Vh cnJpZHhfdCkgKGFjdF9zdGFydCArIGkpKSkgeworCQkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWMo dGhyLCAtMiwgKGR1a191YXJyaWR4X3QpIGkpOyAgLyogdGhyb3cgZmxhZyBpcnJlbGV2YW50IChm YWxzZSBpbiBzdGQgYWxnKSAqLworCQl9IGVsc2UgeworCQkJZHVrX3BvcF91bmRlZmluZWQodGhy KTsKKwkJfQorCX0KKwlkdWtfcHVzaF91MzIodGhyLCAoZHVrX3VpbnQzMl90KSBkZWxfY291bnQp OworCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfTEVOR1RI LCBEVUtfUFJPUERFU0NfRkxBR1NfVyk7CisKKwkvKiBTdGVwcyAxMiBhbmQgMTM6IHJlb3JnYW5p emUgZWxlbWVudHMgdG8gbWFrZSByb29tIGZvciBpdGVtQ291bnQgZWxlbWVudHMgKi8KKworCWlm IChpdGVtX2NvdW50IDwgZGVsX2NvdW50KSB7CisJCS8qICAgIFsgQSBCIEMgRCBFIEYgRyBIIF0g ICAgcmVsX2luZGV4ID0gMiwgZGVsX2NvdW50IDMsIGl0ZW0gY291bnQgMQorCQkgKiAtPiBbIEEg QiBGIEcgSCBdICAgICAgICAgIChjb25jZXB0dWFsIGludGVybWVkaWF0ZSBzdGVwKQorCQkgKiAt PiBbIEEgQiAuIEYgRyBIIF0gICAgICAgIChwbGFjZWhvbGRlciBtYXJrZWQpCisJCSAqICAgIFsg QSBCIEMgRiBHIEggXSAgICAgICAgKGFjdHVhbCByZXN1bHQgYXQgdGhpcyBwb2ludCwgQyB3aWxs IGJlIHJlcGxhY2VkKQorCQkgKi8KKworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIG5hcmdzICsgMyk7 CisKKwkJbiA9IGxlbiAtIGRlbF9jb3VudDsKKwkJZm9yIChpID0gYWN0X3N0YXJ0OyBpIDwgbjsg aSsrKSB7CisJCQlpZiAoZHVrX2dldF9wcm9wX2luZGV4KHRociwgLTMsIChkdWtfdWFycmlkeF90 KSAoaSArIGRlbF9jb3VudCkpKSB7CisJCQkJZHVrX3B1dF9wcm9wX2luZGV4KHRociwgLTQsIChk dWtfdWFycmlkeF90KSAoaSArIGl0ZW1fY291bnQpKTsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX3Bv cF91bmRlZmluZWQodGhyKTsKKwkJCQlkdWtfZGVsX3Byb3BfaW5kZXgodGhyLCAtMywgKGR1a191 YXJyaWR4X3QpIChpICsgaXRlbV9jb3VudCkpOworCQkJfQorCQl9CisKKwkJRFVLX0FTU0VSVF9U T1AodGhyLCBuYXJncyArIDMpOworCisJCS8qIGxvb3AgaXRlcmF0b3IgaW5pdCBhbmQgbGltaXQg Y2hhbmdlZCBmcm9tIHN0YW5kYXJkIGFsZ29yaXRobSAqLworCQluID0gbGVuIC0gZGVsX2NvdW50 ICsgaXRlbV9jb3VudDsKKwkJZm9yIChpID0gbGVuIC0gMTsgaSA+PSBuOyBpLS0pIHsKKwkJCWR1 a19kZWxfcHJvcF9pbmRleCh0aHIsIC0zLCAoZHVrX3VhcnJpZHhfdCkgaSk7CisJCX0KKworCQlE VUtfQVNTRVJUX1RPUCh0aHIsIG5hcmdzICsgMyk7CisJfSBlbHNlIGlmIChpdGVtX2NvdW50ID4g ZGVsX2NvdW50KSB7CisJCS8qICAgIFsgQSBCIEMgRCBFIEYgRyBIIF0gICAgcmVsX2luZGV4ID0g MiwgZGVsX2NvdW50IDMsIGl0ZW0gY291bnQgNAorCQkgKiAtPiBbIEEgQiBGIEcgSCBdICAgICAg ICAgIChjb25jZXB0dWFsIGludGVybWVkaWF0ZSBzdGVwKQorCQkgKiAtPiBbIEEgQiAuIC4gLiAu IEYgRyBIIF0gIChwbGFjZWhvbGRlciBtYXJrZWQpCisJCSAqICAgIFsgQSBCIEMgRCBFIEYgRiBH IEggXSAgKGFjdHVhbCByZXN1bHQgYXQgdGhpcyBwb2ludCkKKwkJICovCisKKwkJRFVLX0FTU0VS VF9UT1AodGhyLCBuYXJncyArIDMpOworCisJCS8qIGxvb3AgaXRlcmF0b3IgaW5pdCBhbmQgbGlt aXQgY2hhbmdlZCBmcm9tIHN0YW5kYXJkIGFsZ29yaXRobSAqLworCQlmb3IgKGkgPSBsZW4gLSBk ZWxfY291bnQgLSAxOyBpID49IGFjdF9zdGFydDsgaS0tKSB7CisJCQlpZiAoZHVrX2dldF9wcm9w X2luZGV4KHRociwgLTMsIChkdWtfdWFycmlkeF90KSAoaSArIGRlbF9jb3VudCkpKSB7CisJCQkJ ZHVrX3B1dF9wcm9wX2luZGV4KHRociwgLTQsIChkdWtfdWFycmlkeF90KSAoaSArIGl0ZW1fY291 bnQpKTsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX3BvcF91bmRlZmluZWQodGhyKTsKKwkJCQlkdWtf ZGVsX3Byb3BfaW5kZXgodGhyLCAtMywgKGR1a191YXJyaWR4X3QpIChpICsgaXRlbV9jb3VudCkp OworCQkJfQorCQl9CisKKwkJRFVLX0FTU0VSVF9UT1AodGhyLCBuYXJncyArIDMpOworCX0gZWxz ZSB7CisJCS8qICAgIFsgQSBCIEMgRCBFIEYgRyBIIF0gICAgcmVsX2luZGV4ID0gMiwgZGVsX2Nv dW50IDMsIGl0ZW0gY291bnQgMworCQkgKiAtPiBbIEEgQiBGIEcgSCBdICAgICAgICAgIChjb25j ZXB0dWFsIGludGVybWVkaWF0ZSBzdGVwKQorCQkgKiAtPiBbIEEgQiAuIC4gLiBGIEcgSCBdICAg IChwbGFjZWhvbGRlciBtYXJrZWQpCisJCSAqICAgIFsgQSBCIEMgRCBFIEYgRyBIIF0gICAgKGFj dHVhbCByZXN1bHQgYXQgdGhpcyBwb2ludCkKKwkJICovCisJfQorCURVS19BU1NFUlRfVE9QKHRo ciwgbmFyZ3MgKyAzKTsKKworCS8qIFN0ZXAgMTU6IGluc2VydCBpdGVtQ291bnQgZWxlbWVudHMg aW50byB0aGUgaG9sZSBtYWRlIGFib3ZlICovCisKKwlmb3IgKGkgPSAwOyBpIDwgaXRlbV9jb3Vu dDsgaSsrKSB7CisJCWR1a19kdXAodGhyLCBpICsgMik7ICAvKiBhcmdzIHN0YXJ0IGF0IGluZGV4 IDIgKi8KKwkJZHVrX3B1dF9wcm9wX2luZGV4KHRociwgLTQsIChkdWtfdWFycmlkeF90KSAoYWN0 X3N0YXJ0ICsgaSkpOworCX0KKworCS8qIFN0ZXAgMTY6IHVwZGF0ZSBsZW5ndGg7IG5vdGUgdGhh dCB0aGUgZmluYWwgbGVuZ3RoIG1heSBiZSBhYm92ZSAzMiBiaXQgcmFuZ2UKKwkgKiAoYnV0IHdl IGNoZWNrZWQgYWJvdmUgdGhhdCB0aGlzIGlzbid0IHRoZSBjYXNlIGhlcmUpCisJICovCisKKwlk dWtfcHVzaF91MzIodGhyLCAoZHVrX3VpbnQzMl90KSAobGVuIC0gZGVsX2NvdW50ICsgaXRlbV9j b3VudCkpOworCWR1a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtNCwgRFVLX1NUUklEWF9M RU5HVEgpOworCisJLyogcmVzdWx0IGFycmF5IGlzIGFscmVhZHkgYXQgdGhlIHRvcCBvZiBzdGFj ayAqLworCURVS19BU1NFUlRfVE9QKHRociwgbmFyZ3MgKyAzKTsKKwlyZXR1cm4gMTsKK30KKwor LyoKKyAqICByZXZlcnNlKCkKKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9h cnJheV9wcm90b3R5cGVfcmV2ZXJzZShkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQzMl90 IGxlbjsKKwlkdWtfdWludDMyX3QgbWlkZGxlOworCWR1a191aW50MzJfdCBsb3dlciwgdXBwZXI7 CisJZHVrX2Jvb2xfdCBoYXZlX2xvd2VyLCBoYXZlX3VwcGVyOworCisJbGVuID0gZHVrX19wdXNo X3RoaXNfb2JqX2xlbl91MzIodGhyKTsKKwltaWRkbGUgPSBsZW4gLyAyOworCisJLyogSWYgbGVu IDw9IDEsIG1pZGRsZSB3aWxsIGJlIDAgYW5kIGZvci1sb29wIGJhaWxzIG91dAorCSAqIGltbWVk aWF0ZWx5ICgwIDwgMCAtPiBmYWxzZSkuCisJICovCisKKwlmb3IgKGxvd2VyID0gMDsgbG93ZXIg PCBtaWRkbGU7IGxvd2VyKyspIHsKKwkJRFVLX0FTU0VSVChsZW4gPj0gMik7CisJCURVS19BU1NF UlRfVE9QKHRociwgMik7CisKKwkJRFVLX0FTU0VSVChsZW4gPj0gbG93ZXIgKyAxKTsKKwkJdXBw ZXIgPSBsZW4gLSBsb3dlciAtIDE7CisKKwkJaGF2ZV9sb3dlciA9IGR1a19nZXRfcHJvcF9pbmRl eCh0aHIsIC0yLCAoZHVrX3VhcnJpZHhfdCkgbG93ZXIpOworCQloYXZlX3VwcGVyID0gZHVrX2dl dF9wcm9wX2luZGV4KHRociwgLTMsIChkdWtfdWFycmlkeF90KSB1cHBlcik7CisKKwkJLyogWyBU b09iamVjdCh0aGlzKSBUb1VpbnQzMihsZW5ndGgpIGxvd2VyVmFsdWUgdXBwZXJWYWx1ZSBdICov CisKKwkJaWYgKGhhdmVfdXBwZXIpIHsKKwkJCWR1a19wdXRfcHJvcF9pbmRleCh0aHIsIC00LCAo ZHVrX3VhcnJpZHhfdCkgbG93ZXIpOworCQl9IGVsc2UgeworCQkJZHVrX2RlbF9wcm9wX2luZGV4 KHRociwgLTQsIChkdWtfdWFycmlkeF90KSBsb3dlcik7CisJCQlkdWtfcG9wX3VuZGVmaW5lZCh0 aHIpOworCQl9CisKKwkJaWYgKGhhdmVfbG93ZXIpIHsKKwkJCWR1a19wdXRfcHJvcF9pbmRleCh0 aHIsIC0zLCAoZHVrX3VhcnJpZHhfdCkgdXBwZXIpOworCQl9IGVsc2UgeworCQkJZHVrX2RlbF9w cm9wX2luZGV4KHRociwgLTMsIChkdWtfdWFycmlkeF90KSB1cHBlcik7CisJCQlkdWtfcG9wX3Vu ZGVmaW5lZCh0aHIpOworCQl9CisKKwkJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKwl9CisKKwlE VUtfQVNTRVJUX1RPUCh0aHIsIDIpOworCWR1a19wb3BfdW5zYWZlKHRocik7ICAvKiAtPiBbIFRv T2JqZWN0KHRoaXMpIF0gKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICBzbGljZSgpCisgKi8K KworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3NsaWNlKGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdWludDMyX3QgbGVuX3UzMjsKKwlkdWtfaW50X3QgbGVu OworCWR1a19pbnRfdCBzdGFydCwgZW5kOworCWR1a19pbnRfdCBpOworCWR1a191YXJyaWR4X3Qg aWR4OworCWR1a191aW50MzJfdCByZXNfbGVuZ3RoID0gMDsKKworCS8qIFhYWDogbGVuID49IDB4 ODAwMDAwMDAgd29uJ3Qgd29yayBiZWxvdyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUKKwkgKiBhYmxl IHRvIHJlcHJlc2VudCAtbGVuLgorCSAqLworCWxlbl91MzIgPSBkdWtfX3B1c2hfdGhpc19vYmpf bGVuX3UzMl9saW1pdGVkKHRocik7CisJbGVuID0gKGR1a19pbnRfdCkgbGVuX3UzMjsKKwlEVUtf QVNTRVJUKGxlbiA+PSAwKTsKKworCWR1a19wdXNoX2FycmF5KHRocik7CisKKwkvKiBzdGFja1sw XSA9IHN0YXJ0CisJICogc3RhY2tbMV0gPSBlbmQKKwkgKiBzdGFja1syXSA9IFRvT2JqZWN0KHRo aXMpCisJICogc3RhY2tbM10gPSBUb1VpbnQzMihsZW5ndGgpCisJICogc3RhY2tbNF0gPSByZXN1 bHQgYXJyYXkKKwkgKi8KKworCXN0YXJ0ID0gZHVrX3RvX2ludF9jbGFtcGVkKHRociwgMCwgLWxl biwgbGVuKTsKKwlpZiAoc3RhcnQgPCAwKSB7CisJCXN0YXJ0ID0gbGVuICsgc3RhcnQ7CisJfQor CS8qIFhYWDogY291bGQgZHVrX2lzX3VuZGVmaW5lZCgpIHByb3ZpZGUgZGVmYXVsdGluZyB1bmRl ZmluZWQgdG8gJ2xlbicKKwkgKiAodGhlIHVwcGVyIGxpbWl0KT8KKwkgKi8KKwlpZiAoZHVrX2lz X3VuZGVmaW5lZCh0aHIsIDEpKSB7CisJCWVuZCA9IGxlbjsKKwl9IGVsc2UgeworCQllbmQgPSBk dWtfdG9faW50X2NsYW1wZWQodGhyLCAxLCAtbGVuLCBsZW4pOworCQlpZiAoZW5kIDwgMCkgewor CQkJZW5kID0gbGVuICsgZW5kOworCQl9CisJfQorCURVS19BU1NFUlQoc3RhcnQgPj0gMCAmJiBz dGFydCA8PSBsZW4pOworCURVS19BU1NFUlQoZW5kID49IDAgJiYgZW5kIDw9IGxlbik7CisKKwlp ZHggPSAwOworCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKwkJRFVLX0FTU0VSVF9U T1AodGhyLCA1KTsKKwkJaWYgKGR1a19nZXRfcHJvcF9pbmRleCh0aHIsIDIsIChkdWtfdWFycmlk eF90KSBpKSkgeworCQkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWModGhyLCA0LCBpZHgpOworCQkJ cmVzX2xlbmd0aCA9IGlkeCArIDE7CisJCX0gZWxzZSB7CisJCQlkdWtfcG9wX3VuZGVmaW5lZCh0 aHIpOworCQl9CisJCWlkeCsrOworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDUpOworCX0KKworCWR1 a19wdXNoX3UzMih0aHIsIHJlc19sZW5ndGgpOworCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0 KHRociwgNCwgRFVLX1NUUklEWF9MRU5HVEgsIERVS19QUk9QREVTQ19GTEFHU19XKTsKKworCURV S19BU1NFUlRfVE9QKHRociwgNSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAgc2hpZnQoKQor ICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9zaGlm dChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQzMl90IGxlbjsKKwlkdWtfdWludDMyX3Qg aTsKKworCWxlbiA9IGR1a19fcHVzaF90aGlzX29ial9sZW5fdTMyKHRocik7CisJaWYgKGxlbiA9 PSAwKSB7CisJCWR1a19wdXNoX2ludCh0aHIsIDApOworCQlkdWtfcHV0X3Byb3Bfc3RyaWR4X3No b3J0KHRociwgMCwgRFVLX1NUUklEWF9MRU5HVEgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkdWtf Z2V0X3Byb3BfaW5kZXgodGhyLCAwLCAwKTsKKworCS8qIHN0YWNrWzBdID0gb2JqZWN0ICh0aGlz KQorCSAqIHN0YWNrWzFdID0gVG9VaW50MzIobGVuZ3RoKQorCSAqIHN0YWNrWzJdID0gZWxlbSBh dCBpbmRleCAwIChyZXR2YWwpCisJICovCisKKwlmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHsK KwkJRFVLX0FTU0VSVF9UT1AodGhyLCAzKTsKKwkJaWYgKGR1a19nZXRfcHJvcF9pbmRleCh0aHIs IDAsIChkdWtfdWFycmlkeF90KSBpKSkgeworCQkJLyogZnJvbVByZXNlbnQgPSB0cnVlICovCisJ CQlkdWtfcHV0X3Byb3BfaW5kZXgodGhyLCAwLCAoZHVrX3VhcnJpZHhfdCkgKGkgLSAxKSk7CisJ CX0gZWxzZSB7CisJCQkvKiBmcm9tUHJlc2VudCA9IGZhbHNlICovCisJCQlkdWtfZGVsX3Byb3Bf aW5kZXgodGhyLCAwLCAoZHVrX3VhcnJpZHhfdCkgKGkgLSAxKSk7CisJCQlkdWtfcG9wX3VuZGVm aW5lZCh0aHIpOworCQl9CisJfQorCWR1a19kZWxfcHJvcF9pbmRleCh0aHIsIDAsIChkdWtfdWFy cmlkeF90KSAobGVuIC0gMSkpOworCisJZHVrX3B1c2hfdTMyKHRociwgKGR1a191aW50MzJfdCkg KGxlbiAtIDEpKTsKKwlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgMCwgRFVLX1NUUklE WF9MRU5HVEgpOworCisJRFVLX0FTU0VSVF9UT1AodGhyLCAzKTsKKwlyZXR1cm4gMTsKK30KKwor LyoKKyAqICB1bnNoaWZ0KCkKKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9h cnJheV9wcm90b3R5cGVfdW5zaGlmdChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2lkeF90IG5h cmdzOworCWR1a191aW50MzJfdCBsZW47CisJZHVrX3VpbnQzMl90IGk7CisKKwluYXJncyA9IGR1 a19nZXRfdG9wKHRocik7CisJbGVuID0gZHVrX19wdXNoX3RoaXNfb2JqX2xlbl91MzIodGhyKTsK KworCS8qIHN0YWNrWzAuLi5uYXJncy0xXSA9IHVuc2hpZnQgYXJncyAodmFyYXJnKQorCSAqIHN0 YWNrW25hcmdzXSA9IFRvT2JqZWN0KHRoaXMpCisJICogc3RhY2tbbmFyZ3MrMV0gPSBUb1VpbnQz MihsZW5ndGgpCisJICovCisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIG5hcmdzICsgMik7CisKKwkv KiBOb3RlOiB1bnNoaWZ0KCkgbWF5IG9wZXJhdGUgb24gaW5kaWNlcyBhYm92ZSB1bnNpZ25lZCAz Mi1iaXQgcmFuZ2UKKwkgKiBhbmQgdGhlIGZpbmFsIGxlbmd0aCBtYXkgYmUgPj0gMioqMzIuICBI b3dldmVyLCB3ZSByZXN0cmljdCB0aGUKKwkgKiBmaW5hbCByZXN1bHQgdG8gMzItYml0IHJhbmdl IGZvciBwcmFjdGljYWxpdHkuCisJICovCisKKwlpZiAobGVuICsgKGR1a191aW50MzJfdCkgbmFy Z3MgPCBsZW4pIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiQXJyYXkucHJvdG90eXBlLnVuc2hpZnQo KSB3b3VsZCBnbyBiZXlvbmQgMzItYml0IGxlbmd0aCwgdGhyb3ciKSk7CisJCURVS19EQ0VSUk9S X1JBTkdFX0lOVkFMSURfTEVOR1RIKHRocik7CisJfQorCisJaSA9IGxlbjsKKwl3aGlsZSAoaSA+ IDApIHsKKwkJRFVLX0FTU0VSVF9UT1AodGhyLCBuYXJncyArIDIpOworCQlpLS07CisJCS8qIGsr YXJnQ291bnQtMTsgbm90ZSB0aGF0IG1heSBiZSBhYm92ZSAzMi1iaXQgcmFuZ2UgKi8KKworCQlp ZiAoZHVrX2dldF9wcm9wX2luZGV4KHRociwgLTIsIChkdWtfdWFycmlkeF90KSBpKSkgeworCQkJ LyogZnJvbVByZXNlbnQgPSB0cnVlICovCisJCQkvKiBbIC4uLiBUb09iamVjdCh0aGlzKSBUb1Vp bnQzMihsZW5ndGgpIHZhbCBdICovCisJCQlkdWtfcHV0X3Byb3BfaW5kZXgodGhyLCAtMywgKGR1 a191YXJyaWR4X3QpIChpICsgKGR1a191aW50MzJfdCkgbmFyZ3MpKTsgIC8qIC0+IFsgLi4uIFRv T2JqZWN0KHRoaXMpIFRvVWludDMyKGxlbmd0aCkgXSAqLworCQl9IGVsc2UgeworCQkJLyogZnJv bVByZXNlbnQgPSBmYWxzZSAqLworCQkJLyogWyAuLi4gVG9PYmplY3QodGhpcykgVG9VaW50MzIo bGVuZ3RoKSB2YWwgXSAqLworCQkJZHVrX3BvcF91bmRlZmluZWQodGhyKTsKKwkJCWR1a19kZWxf cHJvcF9pbmRleCh0aHIsIC0yLCAoZHVrX3VhcnJpZHhfdCkgKGkgKyAoZHVrX3VpbnQzMl90KSBu YXJncykpOyAgLyogLT4gWyAuLi4gVG9PYmplY3QodGhpcykgVG9VaW50MzIobGVuZ3RoKSBdICov CisJCX0KKwkJRFVLX0FTU0VSVF9UT1AodGhyLCBuYXJncyArIDIpOworCX0KKworCWZvciAoaSA9 IDA7IGkgPCAoZHVrX3VpbnQzMl90KSBuYXJnczsgaSsrKSB7CisJCURVS19BU1NFUlRfVE9QKHRo ciwgbmFyZ3MgKyAyKTsKKwkJZHVrX2R1cCh0aHIsIChkdWtfaWR4X3QpIGkpOyAgLyogLT4gWyAu Li4gVG9PYmplY3QodGhpcykgVG9VaW50MzIobGVuZ3RoKSBhcmdbaV0gXSAqLworCQlkdWtfcHV0 X3Byb3BfaW5kZXgodGhyLCAtMywgKGR1a191YXJyaWR4X3QpIGkpOworCQlEVUtfQVNTRVJUX1RP UCh0aHIsIG5hcmdzICsgMik7CisJfQorCisJRFVLX0FTU0VSVF9UT1AodGhyLCBuYXJncyArIDIp OworCWR1a19wdXNoX3UzMih0aHIsIGxlbiArIChkdWtfdWludDMyX3QpIG5hcmdzKTsKKwlkdWtf ZHVwX3RvcCh0aHIpOyAgLyogLT4gWyAuLi4gVG9PYmplY3QodGhpcykgVG9VaW50MzIobGVuZ3Ro KSBmaW5hbF9sZW4gZmluYWxfbGVuIF0gKi8KKwlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRo ciwgLTQsIERVS19TVFJJRFhfTEVOR1RIKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICBpbmRl eE9mKCksIGxhc3RJbmRleE9mKCkKKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19i aV9hcnJheV9wcm90b3R5cGVfaW5kZXhvZl9zaGFyZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1 a19pZHhfdCBuYXJnczsKKwlkdWtfaW50X3QgaSwgbGVuOworCWR1a19pbnRfdCBmcm9tX2lkeDsK KwlkdWtfc21hbGxfaW50X3QgaWR4X3N0ZXAgPSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKTsg IC8qIGlkeF9zdGVwIGlzICsxIGZvciBpbmRleE9mLCAtMSBmb3IgbGFzdEluZGV4T2YgKi8KKwor CS8qIGxhc3RJbmRleE9mKCkgbmVlZHMgdG8gYmUgYSB2YXJhcmcgZnVuY3Rpb24gYmVjYXVzZSB3 ZSBtdXN0IGRpc3Rpbmd1aXNoCisJICogYmV0d2VlbiBhbiB1bmRlZmluZWQgZnJvbUluZGV4IGFu ZCBhICJub3QgZ2l2ZW4iIGZyb21JbmRleDsgaW5kZXhPZigpIGlzCisJICogbWFkZSB2YXJhcmcg Zm9yIHN5bW1ldHJ5IGFsdGhvdWdoIGl0IGRvZXNuJ3Qgc3RyaWN0bHkgbmVlZCB0byBiZS4KKwkg Ki8KKworCW5hcmdzID0gZHVrX2dldF90b3AodGhyKTsKKwlkdWtfc2V0X3RvcCh0aHIsIDIpOwor CisJLyogWFhYOiBtdXN0IGJlIGFibGUgdG8gcmVwcmVzZW50IC1sZW4gKi8KKwlsZW4gPSAoZHVr X2ludF90KSBkdWtfX3B1c2hfdGhpc19vYmpfbGVuX3UzMl9saW1pdGVkKHRocik7CisJaWYgKGxl biA9PSAwKSB7CisJCWdvdG8gbm90X2ZvdW5kOworCX0KKworCS8qIEluZGV4IGNsYW1waW5nIGlz IGEgYml0IHRyaWNreSwgd2UgbXVzdCBlbnN1cmUgdGhhdCB3ZSdsbCBvbmx5IGl0ZXJhdGUKKwkg KiB0aHJvdWdoIGVsZW1lbnRzIHRoYXQgZXhpc3QgYW5kIHRoYXQgdGhlIHNwZWNpZmljIHJlcXVp cmVtZW50cyBmcm9tIEU1LjEKKwkgKiBTZWN0aW9ucyAxNS40LjQuMTQgYW5kIDE1LjQuNC4xNSBh cmUgZnVsZmlsbGVkOyBlc3BlY2lhbGx5OgorCSAqCisJICogICAtIGluZGV4T2Y6IGNsYW1wIHRv IFstbGVuLGxlbl0sIG5lZ2F0aXZlIGhhbmRsaW5nIC0+IFswLGxlbl0sCisJICogICAgIGlmIGNs YW1wZWQgcmVzdWx0IGlzIGxlbiwgZm9yLWxvb3AgYmFpbHMgb3V0IGltbWVkaWF0ZWx5CisJICoK KwkgKiAgIC0gbGFzdEluZGV4T2Y6IGNsYW1wIHRvIFstbGVuLTEsIGxlbi0xXSwgbmVnYXRpdmUg aGFuZGxpbmcgLT4gWy0xLCBsZW4tMV0sCisJICogICAgIGlmIGNsYW1wZWQgcmVzdWx0IGlzIC0x LCBmb3ItbG9vcCBiYWlscyBvdXQgaW1tZWRpYXRlbHkKKwkgKgorCSAqIElmIGZyb21JbmRleCBp cyBub3QgZ2l2ZW4sIFRvSW50ZWdlcih1bmRlZmluZWQpID0gMCwgd2hpY2ggaXMgY29ycmVjdAor CSAqIGZvciBpbmRleE9mKCkgYnV0IGluY29ycmVjdCBmb3IgbGFzdEluZGV4T2YoKS4gIEhlbmNl IHNwZWNpYWwgaGFuZGxpbmcsCisJICogYW5kIHdoeSBsYXN0SW5kZXhPZigpIG5lZWRzIHRvIGJl IGEgdmFyYXJnIGZ1bmN0aW9uLgorCSAqLworCisJaWYgKG5hcmdzID49IDIpIHsKKwkJLyogaW5k ZXhPZjogY2xhbXAgZnJvbUluZGV4IHRvIFstbGVuLCBsZW5dCisJCSAqIChpZiBmcm9tSW5kZXgg PT0gbGVuLCBmb3ItbG9vcCB0ZXJtaW5hdGVzIGRpcmVjdGx5KQorCQkgKgorCQkgKiBsYXN0SW5k ZXhPZjogY2xhbXAgZnJvbUluZGV4IHRvIFstbGVuIC0gMSwgbGVuIC0gMV0KKwkJICogKGlmIGNs YW1wZWQgdG8gLWxlbi0xIC0+IGZyb21JbmRleCBiZWNvbWVzIC0xLCB0ZXJtaW5hdGVzIGZvci1s b29wIGRpcmVjdGx5KQorCQkgKi8KKwkJZnJvbV9pZHggPSBkdWtfdG9faW50X2NsYW1wZWQodGhy LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorCQkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaWR4X3N0ZXAgPiAwID8gLWxlbiA6IC1sZW4gLSAxKSwKKwkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGlkeF9zdGVwID4gMCA/IGxlbiA6IGxlbiAtIDEpKTsK KwkJaWYgKGZyb21faWR4IDwgMCkgeworCQkJLyogZm9yIGxhc3RJbmRleE9mLCByZXN1bHQgbWF5 IGJlIC0xIChtYXJrIGltbWVkaWF0ZSB0ZXJtaW5hdGlvbikgKi8KKwkJCWZyb21faWR4ID0gbGVu ICsgZnJvbV9pZHg7CisJCX0KKwl9IGVsc2UgeworCQkvKiBmb3IgaW5kZXhPZiwgVG9JbnRlZ2Vy KHVuZGVmaW5lZCkgd291bGQgYmUgMCwgaS5lLiBjb3JyZWN0LCBidXQKKwkJICogaGFuZGxlIGJv dGggaW5kZXhPZiBhbmQgbGFzdEluZGV4T2Ygc3BlY2lhbGx5IGhlcmUuCisJCSAqLworCQlpZiAo aWR4X3N0ZXAgPiAwKSB7CisJCQlmcm9tX2lkeCA9IDA7CisJCX0gZWxzZSB7CisJCQlmcm9tX2lk eCA9IGxlbiAtIDE7CisJCX0KKwl9CisKKwkvKiBzdGFja1swXSA9IHNlYXJjaEVsZW1lbnQKKwkg KiBzdGFja1sxXSA9IGZyb21JbmRleAorCSAqIHN0YWNrWzJdID0gb2JqZWN0CisJICogc3RhY2tb M10gPSBsZW5ndGggKG5vdCBuZWVkZWQsIGJ1dCBub3QgcG9wcGVkIGFib3ZlKQorCSAqLworCisJ Zm9yIChpID0gZnJvbV9pZHg7IGkgPj0gMCAmJiBpIDwgbGVuOyBpICs9IGlkeF9zdGVwKSB7CisJ CURVS19BU1NFUlRfVE9QKHRociwgNCk7CisKKwkJaWYgKGR1a19nZXRfcHJvcF9pbmRleCh0aHIs IDIsIChkdWtfdWFycmlkeF90KSBpKSkgeworCQkJRFVLX0FTU0VSVF9UT1AodGhyLCA1KTsKKwkJ CWlmIChkdWtfc3RyaWN0X2VxdWFscyh0aHIsIDAsIDQpKSB7CisJCQkJZHVrX3B1c2hfaW50KHRo ciwgaSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKworCQlkdWtfcG9wX3Vuc2FmZSh0aHIp OworCX0KKworIG5vdF9mb3VuZDoKKwlkdWtfcHVzaF9pbnQodGhyLCAtMSk7CisJcmV0dXJuIDE7 Cit9CisKKy8qCisgKiAgZXZlcnkoKSwgc29tZSgpLCBmb3JFYWNoKCksIG1hcCgpLCBmaWx0ZXIo KQorICovCisKKyNkZWZpbmUgRFVLX19JVEVSX0VWRVJZICAgIDAKKyNkZWZpbmUgRFVLX19JVEVS X1NPTUUgICAgIDEKKyNkZWZpbmUgRFVLX19JVEVSX0ZPUkVBQ0ggIDIKKyNkZWZpbmUgRFVLX19J VEVSX01BUCAgICAgIDMKKyNkZWZpbmUgRFVLX19JVEVSX0ZJTFRFUiAgIDQKKworLyogWFhYOiBU aGlzIGhlbHBlciBpcyBhIGJpdCBhd2t3YXJkIGJlY2F1c2UgdGhlIGhhbmRsaW5nIGZvciB0aGUg ZGlmZmVyZW50IGl0ZXJhdGlvbgorICogY2FsbGVycyBpcyBxdWl0ZSBkaWZmZXJlbnQuICBUaGlz IG5vdyBjb21waWxlcyB0byBhIGJpdCBsZXNzIHRoYW4gNTAwIGJ5dGVzLCBzbyB3aXRoCisgKiA1 IGNhbGxlcnMgdGhlIG5ldCByZXN1bHQgaXMgYWJvdXQgMTAwIGJ5dGVzIC8gY2FsbGVyLgorICov CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5X3Byb3RvdHlwZV9pdGVyX3No YXJlZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQzMl90IGxlbjsKKwlkdWtfdWludDMy X3QgaTsKKwlkdWtfdWFycmlkeF90IGs7CisJZHVrX2Jvb2xfdCBidmFsOworCWR1a19zbWFsbF9p bnRfdCBpdGVyX3R5cGUgPSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKTsKKwlkdWtfdWludDMy X3QgcmVzX2xlbmd0aCA9IDA7CisKKwkvKiBlYWNoIGNhbGwgdGhpcyBoZWxwZXIgc2VydmVzIGhh cyBuYXJncz09MiAqLworCURVS19BU1NFUlRfVE9QKHRociwgMik7CisKKwlsZW4gPSBkdWtfX3B1 c2hfdGhpc19vYmpfbGVuX3UzMih0aHIpOworCWR1a19yZXF1aXJlX2NhbGxhYmxlKHRociwgMCk7 CisJLyogaWYgdGhpc0FyZyBub3Qgc3VwcGxpZWQsIGJlaGF2ZSBhcyBpZiB1bmRlZmluZWQgd2Fz IHN1cHBsaWVkICovCisKKwlpZiAoaXRlcl90eXBlID09IERVS19fSVRFUl9NQVAgfHwgaXRlcl90 eXBlID09IERVS19fSVRFUl9GSUxURVIpIHsKKwkJZHVrX3B1c2hfYXJyYXkodGhyKTsKKwl9IGVs c2UgeworCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsKKwl9CisKKwkvKiBzdGFja1swXSA9IGNh bGxiYWNrCisJICogc3RhY2tbMV0gPSB0aGlzQXJnCisJICogc3RhY2tbMl0gPSBvYmplY3QKKwkg KiBzdGFja1szXSA9IFRvVWludDMyKGxlbmd0aCkgICh1bnVzZWQsIGJ1dCBhdm9pZCB1bm5lY2Vz c2FyeSBwb3ApCisJICogc3RhY2tbNF0gPSByZXN1bHQgYXJyYXkgKG9yIHVuZGVmaW5lZCkKKwkg Ki8KKworCWsgPSAwOyAgLyogcmVzdWx0IGluZGV4IGZvciBmaWx0ZXIoKSAqLworCWZvciAoaSA9 IDA7IGkgPCBsZW47IGkrKykgeworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDUpOworCisJCWlmICgh ZHVrX2dldF9wcm9wX2luZGV4KHRociwgMiwgKGR1a191YXJyaWR4X3QpIGkpKSB7CisJCQkvKiBG b3IgJ21hcCcgdHJhaWxpbmcgbWlzc2luZyBlbGVtZW50cyBkb24ndCBpbnZva2UgdGhlCisJCQkg KiBjYWxsYmFjayBidXQgY291bnQgdG93YXJkcyB0aGUgcmVzdWx0IGxlbmd0aC4KKwkJCSAqLwor CQkJaWYgKGl0ZXJfdHlwZSA9PSBEVUtfX0lURVJfTUFQKSB7CisJCQkJcmVzX2xlbmd0aCA9IGkg KyAxOworCQkJfQorCQkJZHVrX3BvcF91bmRlZmluZWQodGhyKTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyogVGhlIG9yaWdpbmFsIHZhbHVlIG5lZWRzIHRvIGJlIHByZXNlcnZlZCBmb3IgZmls dGVyKCksIGhlbmNlCisJCSAqIHRoaXMgZnVubnkgb3JkZXIuICBXZSBjYW4ndCByZS1nZXQgdGhl IHZhbHVlIGJlY2F1c2Ugb2Ygc2lkZQorCQkgKiBlZmZlY3RzLgorCQkgKi8KKworCQlkdWtfZHVw XzAodGhyKTsKKwkJZHVrX2R1cF8xKHRocik7CisJCWR1a19kdXBfbTModGhyKTsKKwkJZHVrX3B1 c2hfdTMyKHRociwgaSk7CisJCWR1a19kdXBfMih0aHIpOyAgLyogWyAuLi4gdmFsIGNhbGxiYWNr IHRoaXNBcmcgdmFsIGkgb2JqIF0gKi8KKwkJZHVrX2NhbGxfbWV0aG9kKHRociwgMyk7IC8qIC0+ IFsgLi4uIHZhbCByZXR2YWwgXSAqLworCisJCXN3aXRjaCAoaXRlcl90eXBlKSB7CisJCWNhc2Ug RFVLX19JVEVSX0VWRVJZOgorCQkJYnZhbCA9IGR1a190b19ib29sZWFuKHRociwgLTEpOworCQkJ aWYgKCFidmFsKSB7CisJCQkJLyogc3RhY2sgdG9wIGNvbnRhaW5zICdmYWxzZScgKi8KKwkJCQly ZXR1cm4gMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIERVS19fSVRFUl9TT01FOgorCQkJYnZh bCA9IGR1a190b19ib29sZWFuKHRociwgLTEpOworCQkJaWYgKGJ2YWwpIHsKKwkJCQkvKiBzdGFj ayB0b3AgY29udGFpbnMgJ3RydWUnICovCisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlicmVhazsK KwkJY2FzZSBEVUtfX0lURVJfRk9SRUFDSDoKKwkJCS8qIG5vcCAqLworCQkJYnJlYWs7CisJCWNh c2UgRFVLX19JVEVSX01BUDoKKwkJCWR1a19kdXBfdG9wKHRocik7CisJCQlkdWtfeGRlZl9wcm9w X2luZGV4X3dlYyh0aHIsIDQsIChkdWtfdWFycmlkeF90KSBpKTsgIC8qIHJldHZhbCB0byByZXN1 bHRbaV0gKi8KKwkJCXJlc19sZW5ndGggPSBpICsgMTsKKwkJCWJyZWFrOworCQljYXNlIERVS19f SVRFUl9GSUxURVI6CisJCQlidmFsID0gZHVrX3RvX2Jvb2xlYW4odGhyLCAtMSk7CisJCQlpZiAo YnZhbCkgeworCQkJCWR1a19kdXBfbTIodGhyKTsgIC8qIG9yaWcgdmFsdWUgKi8KKwkJCQlkdWtf eGRlZl9wcm9wX2luZGV4X3dlYyh0aHIsIDQsIChkdWtfdWFycmlkeF90KSBrKTsKKwkJCQlrKys7 CisJCQkJcmVzX2xlbmd0aCA9IGs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURV S19VTlJFQUNIQUJMRSgpOworCQkJYnJlYWs7CisJCX0KKwkJZHVrX3BvcF8yX3Vuc2FmZSh0aHIp OworCisJCURVS19BU1NFUlRfVE9QKHRociwgNSk7CisJfQorCisJc3dpdGNoIChpdGVyX3R5cGUp IHsKKwljYXNlIERVS19fSVRFUl9FVkVSWToKKwkJZHVrX3B1c2hfdHJ1ZSh0aHIpOworCQlicmVh azsKKwljYXNlIERVS19fSVRFUl9TT01FOgorCQlkdWtfcHVzaF9mYWxzZSh0aHIpOworCQlicmVh azsKKwljYXNlIERVS19fSVRFUl9GT1JFQUNIOgorCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsK KwkJYnJlYWs7CisJY2FzZSBEVUtfX0lURVJfTUFQOgorCWNhc2UgRFVLX19JVEVSX0ZJTFRFUjoK KwkJRFVLX0FTU0VSVF9UT1AodGhyLCA1KTsKKwkJRFVLX0FTU0VSVChkdWtfaXNfYXJyYXkodGhy LCAtMSkpOyAgLyogdG9wbW9zdCBlbGVtZW50IGlzIHRoZSByZXN1bHQgYXJyYXkgYWxyZWFkeSAq LworCQlkdWtfcHVzaF91MzIodGhyLCByZXNfbGVuZ3RoKTsKKwkJZHVrX3hkZWZfcHJvcF9zdHJp ZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9MRU5HVEgsIERVS19QUk9QREVTQ19GTEFHU19X KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFVLX1VOUkVBQ0hBQkxFKCk7CisJCWJyZWFrOwor CX0KKworCXJldHVybiAxOworfQorCisvKgorICogIHJlZHVjZSgpLCByZWR1Y2VSaWdodCgpCisg Ki8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfYXJyYXlfcHJvdG90eXBlX3JlZHVj ZV9zaGFyZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pZHhfdCBuYXJnczsKKwlkdWtfYm9v bF90IGhhdmVfYWNjOworCWR1a191aW50MzJfdCBpLCBsZW47CisJZHVrX3NtYWxsX2ludF90IGlk eF9zdGVwID0gZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7ICAvKiBpZHhfc3RlcCBpcyArMSBm b3IgcmVkdWNlLCAtMSBmb3IgcmVkdWNlUmlnaHQgKi8KKworCS8qIFdlJ3JlIGEgdmFyYXJncyBm dW5jdGlvbiBiZWNhdXNlIHdlIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIKKwkgKiBpbml0aWFsVmFs dWUgd2FzIGdpdmVuIG9yIG5vdC4KKwkgKi8KKwluYXJncyA9IGR1a19nZXRfdG9wKHRocik7CisJ RFVLX0RERChEVUtfREREUFJJTlQoIm5hcmdzPSVsZCIsIChsb25nKSBuYXJncykpOworCisJZHVr X3NldF90b3AodGhyLCAyKTsKKwlsZW4gPSBkdWtfX3B1c2hfdGhpc19vYmpfbGVuX3UzMih0aHIp OworCWR1a19yZXF1aXJlX2NhbGxhYmxlKHRociwgMCk7CisKKwkvKiBzdGFja1swXSA9IGNhbGxi YWNrIGZuCisJICogc3RhY2tbMV0gPSBpbml0aWFsVmFsdWUKKwkgKiBzdGFja1syXSA9IG9iamVj dCAoY29lcmNlZCB0aGlzKQorCSAqIHN0YWNrWzNdID0gbGVuZ3RoIChub3QgbmVlZGVkLCBidXQg bm90IHBvcHBlZCBhYm92ZSkKKwkgKiBzdGFja1s0XSA9IGFjY3VtdWxhdG9yCisJICovCisKKwlo YXZlX2FjYyA9IDA7CisJaWYgKG5hcmdzID49IDIpIHsKKwkJZHVrX2R1cF8xKHRocik7CisJCWhh dmVfYWNjID0gMTsKKwl9CisJRFVLX0RERChEVUtfREREUFJJTlQoImhhdmVfYWNjPSVsZCwgYWNj PSUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGhhdmVfYWNjLCAoZHVrX3R2YWwg KikgZHVrX2dldF90dmFsKHRociwgMykpKTsKKworCS8qIEZvciBsZW4gPT0gMCwgaSBpcyBpbml0 aWFsaXplZCB0byBsZW4gLSAxIHdoaWNoIHVuZGVyZmxvd3MuCisJICogVGhlIGNvbmRpdGlvbiAo aSA8IGxlbikgd2lsbCB0aGVuIGV4aXQgdGhlIGZvci1sb29wIG9uIHRoZQorCSAqIGZpcnN0IHJv dW5kIHdoaWNoIGlzIGNvcnJlY3QuICBTaW1pbGFybHksIGxvb3AgdGVybWluYXRpb24KKwkgKiBo YXBwZW5zIGJ5IGkgdW5kZXJmbG93aW5nLgorCSAqLworCisJZm9yIChpID0gKGlkeF9zdGVwID49 IDAgPyAwIDogbGVuIC0gMSk7CisJICAgICBpIDwgbGVuOyAgLyogaSA+PSAwIHdvdWxkIGFsd2F5 cyBiZSB0cnVlICovCisJICAgICBpICs9IChkdWtfdWludDMyX3QpIGlkeF9zdGVwKSB7CisJCURV S19EREQoRFVLX0RERFBSSU5UKCJpPSVsZCwgbGVuPSVsZCwgaGF2ZV9hY2M9JWxkLCB0b3A9JWxk LCBhY2M9JSFUIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGksIChsb25nKSBsZW4s IChsb25nKSBoYXZlX2FjYywKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGR1a19nZXRf dG9wKHRociksCisJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2 YWwodGhyLCA0KSkpOworCisJCURVS19BU1NFUlQoKGhhdmVfYWNjICYmIGR1a19nZXRfdG9wKHRo cikgPT0gNSkgfHwKKwkJICAgICAgICAgICAoIWhhdmVfYWNjICYmIGR1a19nZXRfdG9wKHRocikg PT0gNCkpOworCisJCWlmICghZHVrX2hhc19wcm9wX2luZGV4KHRociwgMiwgKGR1a191YXJyaWR4 X3QpIGkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghaGF2ZV9hY2MpIHsKKwkJCURV S19BU1NFUlRfVE9QKHRociwgNCk7CisJCQlkdWtfZ2V0X3Byb3BfaW5kZXgodGhyLCAyLCAoZHVr X3VhcnJpZHhfdCkgaSk7CisJCQloYXZlX2FjYyA9IDE7CisJCQlEVUtfQVNTRVJUX1RPUCh0aHIs IDUpOworCQl9IGVsc2UgeworCQkJRFVLX0FTU0VSVF9UT1AodGhyLCA1KTsKKwkJCWR1a19kdXBf MCh0aHIpOworCQkJZHVrX2R1cCh0aHIsIDQpOworCQkJZHVrX2dldF9wcm9wX2luZGV4KHRociwg MiwgKGR1a191YXJyaWR4X3QpIGkpOworCQkJZHVrX3B1c2hfdTMyKHRociwgaSk7CisJCQlkdWtf ZHVwXzIodGhyKTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJjYWxsaW5nIHJlZHVjZSBmdW5j dGlvbjogZnVuYz0lIVQsIHByZXY9JSFULCBjdXJyPSUhVCwgaWR4PSUhVCwgb2JqPSUhVCIsCisJ CQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTUp LCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTQpLAorCQkJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0zKSwgKGR1a190dmFsICopIGR1 a19nZXRfdHZhbCh0aHIsIC0yKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAq KSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwkJCWR1a19jYWxsKHRociwgNCk7CisJCQlEVUtf REREKERVS19ERERQUklOVCgiLT4gcmVzdWx0OiAlIVQiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90 dmFsKHRociwgLTEpKSk7CisJCQlkdWtfcmVwbGFjZSh0aHIsIDQpOworCQkJRFVLX0FTU0VSVF9U T1AodGhyLCA1KTsKKwkJfQorCX0KKworCWlmICghaGF2ZV9hY2MpIHsKKwkJRFVLX0RDRVJST1Jf VFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwl9CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDUpOwor CXJldHVybiAxOworfQorCisjZW5kaWYgIC8qIERVS19VU0VfQVJSQVlfQlVJTFRJTiAqLworCisv KiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYgRFVLX19BUlJBWV9NSURfSk9JTl9MSU1JVAor I3VuZGVmIERVS19fSVRFUl9FVkVSWQorI3VuZGVmIERVS19fSVRFUl9GSUxURVIKKyN1bmRlZiBE VUtfX0lURVJfRk9SRUFDSAorI3VuZGVmIERVS19fSVRFUl9NQVAKKyN1bmRlZiBEVUtfX0lURVJf U09NRQorLyoKKyAqICBCb29sZWFuIGJ1aWx0LWlucworICovCisKKy8qICNpbmNsdWRlIGR1a19p bnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9C T09MRUFOX0JVSUxUSU4pCisKKy8qIFNoYXJlZCBoZWxwZXIgdG8gcHJvdmlkZSB0b1N0cmluZygp IGFuZCB2YWx1ZU9mKCkuICBDaGVja3MgJ3RoaXMnLCBnZXRzCisgKiB0aGUgcHJpbWl0aXZlIHZh bHVlIHRvIHN0YWNrIHRvcCwgYW5kIG9wdGlvbmFsbHkgY29lcmNlcyB3aXRoIFRvU3RyaW5nKCku CisgKi8KK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2Jvb2xlYW5fcHJvdG90eXBlX3Rv c3RyaW5nX3NoYXJlZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19o b2JqZWN0ICpoOworCWR1a19zbWFsbF9pbnRfdCBjb2VyY2VfdG9zdHJpbmcgPSBkdWtfZ2V0X2N1 cnJlbnRfbWFnaWModGhyKTsKKworCS8qIFhYWDogdGhlcmUgaXMgcm9vbSB0byB1c2UgYSBzaGFy ZWQgaGVscGVyIGhlcmUsIG1hbnkgYnVpbHQtaW5zCisJICogY2hlY2sgdGhlICd0aGlzJyB0eXBl LCBhbmQgaWYgaXQncyBhbiBvYmplY3QsIGNoZWNrIGl0cyBjbGFzcywKKwkgKiB0aGVuIGdldCBp dHMgaW50ZXJuYWwgdmFsdWUsIGV0Yy4KKwkgKi8KKworCWR1a19wdXNoX3RoaXModGhyKTsKKwl0 diA9IGR1a19nZXRfdHZhbCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJ aWYgKERVS19UVkFMX0lTX0JPT0xFQU4odHYpKSB7CisJCWdvdG8gdHlwZV9vazsKKwl9IGVsc2Ug aWYgKERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJaCA9IERVS19UVkFMX0dFVF9PQkpFQ1Qo dHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKwkJaWYgKERVS19IT0JKRUNUX0dFVF9D TEFTU19OVU1CRVIoaCkgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfQk9PTEVBTikgeworCQkJZHVrX2dl dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0xLCBEVUtfU1RSSURYX0lOVF9WQUxVRSk7CisJCQlE VUtfQVNTRVJUKGR1a19pc19ib29sZWFuKHRociwgLTEpKTsKKwkJCWdvdG8gdHlwZV9vazsKKwkJ fQorCX0KKworCURVS19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJLyogbmV2ZXIg aGVyZSAqLworCisgdHlwZV9vazoKKwlpZiAoY29lcmNlX3Rvc3RyaW5nKSB7CisJCWR1a190b19z dHJpbmcodGhyLCAtMSk7CisJfQorCXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3Jl dF90IGR1a19iaV9ib29sZWFuX2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtf aG9iamVjdCAqaF90aGlzOworCisJZHVrX3RvX2Jvb2xlYW4odGhyLCAwKTsKKworCWlmIChkdWtf aXNfY29uc3RydWN0b3JfY2FsbCh0aHIpKSB7CisJCS8qIFhYWDogaGVscGVyOyByZWx5IG9uIEJv b2xlYW4ucHJvdG90eXBlIGFzIGJlaW5nIG5vbi13cml0YWJsZSwgbm9uLWNvbmZpZ3VyYWJsZSAq LworCQlkdWtfcHVzaF90aGlzKHRocik7CisJCWhfdGhpcyA9IGR1a19rbm93bl9ob2JqZWN0KHRo ciwgLTEpOworCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUodGhyLT5oZWFw LCBoX3RoaXMpID09IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfQk9PTEVBTl9QUk9UT1RZUEVdKTsK KworCQlEVUtfSE9CSkVDVF9TRVRfQ0xBU1NfTlVNQkVSKGhfdGhpcywgRFVLX0hPQkpFQ1RfQ0xB U1NfQk9PTEVBTik7CisKKwkJZHVrX2R1cF8wKHRocik7ICAvKiAtPiBbIHZhbCBvYmogdmFsIF0g Ki8KKwkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRf VkFMVUUsIERVS19QUk9QREVTQ19GTEFHU19OT05FKTsgIC8qIFhYWDogcHJvcGVyIGZsYWdzPyAq LworCX0gIC8qIHVuYmFsYW5jZWQgc3RhY2sgKi8KKworCXJldHVybiAxOworfQorCisjZW5kaWYg IC8qIERVS19VU0VfQk9PTEVBTl9CVUlMVElOICovCisvKgorICogIEVTMjAxNSBUeXBlZEFycmF5 IGFuZCBOb2RlLmpzIEJ1ZmZlciBidWlsdC1pbnMKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50 ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCisgKiAgSGVscGVycyBmb3IgYnVm ZmVyIGhhbmRsaW5nLCBlbmFibGVkIHdpdGggRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVC4K KyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorLyogTWFw IGNsYXNzIG51bWJlciAobWludXMgRFVLX0hPQkpFQ1RfQ0xBU1NfQlVGT0JKX01JTikgdG8gYSBi aWR4IGZvciB0aGUKKyAqIGRlZmF1bHQgaW50ZXJuYWwgcHJvdG90eXBlLgorICovCitzdGF0aWMg Y29uc3QgZHVrX3VpbnQ4X3QgZHVrX19idWZmZXJfcHJvdG9fZnJvbV9jbGFzc251bVtdID0gewor CURVS19CSURYX0FSUkFZQlVGRkVSX1BST1RPVFlQRSwKKwlEVUtfQklEWF9EQVRBVklFV19QUk9U T1RZUEUsCisJRFVLX0JJRFhfSU5UOEFSUkFZX1BST1RPVFlQRSwKKwlEVUtfQklEWF9VSU5UOEFS UkFZX1BST1RPVFlQRSwKKwlEVUtfQklEWF9VSU5UOENMQU1QRURBUlJBWV9QUk9UT1RZUEUsCisJ RFVLX0JJRFhfSU5UMTZBUlJBWV9QUk9UT1RZUEUsCisJRFVLX0JJRFhfVUlOVDE2QVJSQVlfUFJP VE9UWVBFLAorCURVS19CSURYX0lOVDMyQVJSQVlfUFJPVE9UWVBFLAorCURVS19CSURYX1VJTlQz MkFSUkFZX1BST1RPVFlQRSwKKwlEVUtfQklEWF9GTE9BVDMyQVJSQVlfUFJPVE9UWVBFLAorCURV S19CSURYX0ZMT0FUNjRBUlJBWV9QUk9UT1RZUEUKK307CisKKy8qIE1hcCBEVUtfSEJVRk9CSl9F TEVNX3h4eCB0byBkdWtfaG9iamVjdCBjbGFzcyBudW1iZXIuCisgKiBTeW5jIHdpdGggZHVrX2hi dWZvYmouaCBhbmQgZHVrX2hvYmplY3QuaC4KKyAqLworc3RhdGljIGNvbnN0IGR1a191aW50OF90 IGR1a19fYnVmZmVyX2NsYXNzX2Zyb21fZWxlbXR5cGVbOV0gPSB7CisJRFVLX0hPQkpFQ1RfQ0xB U1NfVUlOVDhBUlJBWSwKKwlEVUtfSE9CSkVDVF9DTEFTU19VSU5UOENMQU1QRURBUlJBWSwKKwlE VUtfSE9CSkVDVF9DTEFTU19JTlQ4QVJSQVksCisJRFVLX0hPQkpFQ1RfQ0xBU1NfVUlOVDE2QVJS QVksCisJRFVLX0hPQkpFQ1RfQ0xBU1NfSU5UMTZBUlJBWSwKKwlEVUtfSE9CSkVDVF9DTEFTU19V SU5UMzJBUlJBWSwKKwlEVUtfSE9CSkVDVF9DTEFTU19JTlQzMkFSUkFZLAorCURVS19IT0JKRUNU X0NMQVNTX0ZMT0FUMzJBUlJBWSwKKwlEVUtfSE9CSkVDVF9DTEFTU19GTE9BVDY0QVJSQVkKK307 CisKKy8qIE1hcCBEVUtfSEJVRk9CSl9FTEVNX3h4eCB0byBwcm90b3R5cGUgb2JqZWN0IGJ1aWx0 LWluIGluZGV4LgorICogU3luYyB3aXRoIGR1a19oYnVmb2JqLmguCisgKi8KK3N0YXRpYyBjb25z dCBkdWtfdWludDhfdCBkdWtfX2J1ZmZlcl9wcm90b19mcm9tX2VsZW10eXBlWzldID0geworCURV S19CSURYX1VJTlQ4QVJSQVlfUFJPVE9UWVBFLAorCURVS19CSURYX1VJTlQ4Q0xBTVBFREFSUkFZ X1BST1RPVFlQRSwKKwlEVUtfQklEWF9JTlQ4QVJSQVlfUFJPVE9UWVBFLAorCURVS19CSURYX1VJ TlQxNkFSUkFZX1BST1RPVFlQRSwKKwlEVUtfQklEWF9JTlQxNkFSUkFZX1BST1RPVFlQRSwKKwlE VUtfQklEWF9VSU5UMzJBUlJBWV9QUk9UT1RZUEUsCisJRFVLX0JJRFhfSU5UMzJBUlJBWV9QUk9U T1RZUEUsCisJRFVLX0JJRFhfRkxPQVQzMkFSUkFZX1BST1RPVFlQRSwKKwlEVUtfQklEWF9GTE9B VDY0QVJSQVlfUFJPVE9UWVBFCit9OworCisvKiBNYXAgRFVLX19GTERfeHh4IHRvIGJ5dGUgc2l6 ZS4gKi8KK3N0YXRpYyBjb25zdCBkdWtfdWludDhfdCBkdWtfX2J1ZmZlcl9uYnl0ZXNfZnJvbV9m bGR0eXBlWzZdID0geworCTEsICAvKiBEVUtfX0ZMRF84QklUICovCisJMiwgIC8qIERVS19fRkxE XzE2QklUICovCisJNCwgIC8qIERVS19fRkxEXzMyQklUICovCisJNCwgIC8qIERVS19fRkxEX0ZM T0FUICovCisJOCwgIC8qIERVS19fRkxEX0RPVUJMRSAqLworCTAgICAvKiBEVUtfX0ZMRF9WQVJJ TlQ7IG5vdCByZWxldmFudCBoZXJlICovCit9OworCisvKiBCaXRmaWVsZCBmb3IgZWFjaCBEVUtf SEJVRk9CSl9FTEVNX3h4eCBpbmRpY2F0aW5nIHdoaWNoIGVsZW1lbnQgdHlwZXMKKyAqIGFyZSBj b21wYXRpYmxlIHdpdGggYSBibGluZCBieXRlIGNvcHkgZm9yIHRoZSBUeXBlZEFycmF5IHNldCgp IG1ldGhvZCAoYWxzbworICogdXNlZCBmb3IgVHlwZWRBcnJheSBjb25zdHJ1Y3RvcikuICBBcnJh eSBpbmRleCBpcyB0YXJnZXQgYnVmZmVyIGVsZW0gdHlwZSwKKyAqIGJpdGZpZWxkIGluZGljYXRl cyBjb21wYXRpYmxlIHNvdXJjZSB0eXBlcy4gIFRoZSB0eXBlcyBtdXN0IGhhdmUgc2FtZSBieXRl CisgKiBzaXplIGFuZCB0aGV5IG11c3QgYmUgY29lcmNpb24gY29tcGF0aWJsZS4KKyAqLworI2lm ICFkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCitzdGF0aWMgZHVrX3VpbnQxNl90IGR1a19f YnVmZmVyX2VsZW10eXBlX2NvcHlfY29tcGF0aWJsZVs5XSA9IHsKKwkvKiB4eHggLT4gRFVLX0hC VUZPQkpfRUxFTV9VSU5UOCAqLworCSgxVSA8PCBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4KSB8CisJ CSgxVSA8PCBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4Q0xBTVBFRCkgfAorCQkoMVUgPDwgRFVLX0hC VUZPQkpfRUxFTV9JTlQ4KSwKKworCS8qIHh4eCAtPiBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4Q0xB TVBFRAorCSAqIE5vdGU6IElOVDggaXMgLW5vdC0gY29weSBjb21wYXRpYmxlLCBlLmcuIC0xIHdv dWxkIGNvZXJjZSB0byAweDAwLgorCSAqLworCSgxVSA8PCBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4 KSB8CisJCSgxVSA8PCBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4Q0xBTVBFRCksCisKKwkvKiB4eHgg LT4gRFVLX0hCVUZPQkpfRUxFTV9JTlQ4ICovCisJKDFVIDw8IERVS19IQlVGT0JKX0VMRU1fVUlO VDgpIHwKKwkJKDFVIDw8IERVS19IQlVGT0JKX0VMRU1fVUlOVDhDTEFNUEVEKSB8CisJCSgxVSA8 PCBEVUtfSEJVRk9CSl9FTEVNX0lOVDgpLAorCisJLyogeHh4IC0+IERVS19IQlVGT0JKX0VMRU1f VUlOVDE2ICovCisJKDFVIDw8IERVS19IQlVGT0JKX0VMRU1fVUlOVDE2KSB8CisJCSgxVSA8PCBE VUtfSEJVRk9CSl9FTEVNX0lOVDE2KSwKKworCS8qIHh4eCAtPiBEVUtfSEJVRk9CSl9FTEVNX0lO VDE2ICovCisJKDFVIDw8IERVS19IQlVGT0JKX0VMRU1fVUlOVDE2KSB8CisJCSgxVSA8PCBEVUtf SEJVRk9CSl9FTEVNX0lOVDE2KSwKKworCS8qIHh4eCAtPiBEVUtfSEJVRk9CSl9FTEVNX1VJTlQz MiAqLworCSgxVSA8PCBEVUtfSEJVRk9CSl9FTEVNX1VJTlQzMikgfAorCQkoMVUgPDwgRFVLX0hC VUZPQkpfRUxFTV9JTlQzMiksCisKKwkvKiB4eHggLT4gRFVLX0hCVUZPQkpfRUxFTV9JTlQzMiAq LworCSgxVSA8PCBEVUtfSEJVRk9CSl9FTEVNX1VJTlQzMikgfAorCQkoMVUgPDwgRFVLX0hCVUZP QkpfRUxFTV9JTlQzMiksCisKKwkvKiB4eHggLT4gRFVLX0hCVUZPQkpfRUxFTV9GTE9BVDMyICov CisJKDFVIDw8IERVS19IQlVGT0JKX0VMRU1fRkxPQVQzMiksCisKKwkvKiB4eHggLT4gRFVLX0hC VUZPQkpfRUxFTV9GTE9BVDY0ICovCisJKDFVIDw8IERVS19IQlVGT0JKX0VMRU1fRkxPQVQ2NCkK K307CisjZW5kaWYgIC8qICFEVUtfVVNFX1BSRUZFUl9TSVpFICovCisKK0RVS19MT0NBTCBkdWtf aGJ1Zm9iaiAqZHVrX19oYnVmb2JqX3Byb21vdGVfdGhpcyhkdWtfaHRocmVhZCAqdGhyKSB7CisJ ZHVrX3R2YWwgKnR2X2RzdDsKKwlkdWtfaGJ1Zm9iaiAqcmVzOworCisJZHVrX3B1c2hfdGhpcyh0 aHIpOworCURVS19BU1NFUlQoZHVrX2lzX2J1ZmZlcih0aHIsIC0xKSk7CisJcmVzID0gKGR1a19o YnVmb2JqICopIGR1a190b19ob2JqZWN0KHRociwgLTEpOworCURVS19BU1NFUlRfSEJVRk9CSl9W QUxJRChyZXMpOworCURVS19ERChEVUtfRERQUklOVCgicHJvbW90ZWQgJ3RoaXMnIGF1dG9tYXRp Y2FsbHkgdG8gYW4gQXJyYXlCdWZmZXI6ICUhaVQiLCBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsK KworCXR2X2RzdCA9IGR1a19nZXRfYm9ycm93ZWRfdGhpc190dmFsKHRocik7CisJRFVLX1RWQUxf U0VUX09CSkVDVF9VUERSRUYodGhyLCB0dl9kc3QsIChkdWtfaG9iamVjdCAqKSByZXMpOworCWR1 a19wb3AodGhyKTsKKworCXJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgRFVLX19CVUZPQkpfRkxB R19USFJPVyAgICAoMSA8PCAwKQorI2RlZmluZSBEVUtfX0JVRk9CSl9GTEFHX1BST01PVEUgICgx IDw8IDEpCisKKy8qIFNoYXJlZCBoZWxwZXIuICBXaGVuIERVS19fQlVGT0JKX0ZMQUdfUFJPTU9U RSBpcyBnaXZlbiwgdGhlIHJldHVybiB2YWx1ZSBpcworICogYWx3YXlzIGEgZHVrX2hidWZvYmog Ki4gIFdpdGhvdXQgdGhlIGZsYWcgdGhlIHJldHVybiB2YWx1ZSBjYW4gYWxzbyBiZSBhCisgKiBw bGFpbiBidWZmZXIsIGFuZCB0aGUgY2FsbGVyIG11c3QgY2hlY2sgZm9yIGl0IHVzaW5nIERVS19I RUFQSERSX0lTX0JVRkZFUigpLgorICovCitEVUtfTE9DQUwgZHVrX2hlYXBoZHIgKmR1a19fZ2V0 cmVxdWlyZV9idWZvYmpfdGhpcyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21hbGxfdWludF90IGZs YWdzKSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19oYnVmb2JqICpoX3RoaXM7CisKKwlEVUtfQVNT RVJUKHRociAhPSBOVUxMKTsKKworCXR2ID0gZHVrX2dldF9ib3Jyb3dlZF90aGlzX3R2YWwodGhy KTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0 dikpIHsKKwkJaF90aGlzID0gKGR1a19oYnVmb2JqICopIERVS19UVkFMX0dFVF9PQkpFQ1QodHYp OworCQlEVUtfQVNTRVJUKGhfdGhpcyAhPSBOVUxMKTsKKwkJaWYgKERVS19IT0JKRUNUX0lTX0JV Rk9CSigoZHVrX2hvYmplY3QgKikgaF90aGlzKSkgeworCQkJRFVLX0FTU0VSVF9IQlVGT0JKX1ZB TElEKGhfdGhpcyk7CisJCQlyZXR1cm4gKGR1a19oZWFwaGRyICopIGhfdGhpczsKKwkJfQorCX0g ZWxzZSBpZiAoRFVLX1RWQUxfSVNfQlVGRkVSKHR2KSkgeworCQlpZiAoZmxhZ3MgJiBEVUtfX0JV Rk9CSl9GTEFHX1BST01PVEUpIHsKKwkJCS8qIFByb21vdGUgYSBwbGFpbiBidWZmZXIgdG8gYSBV aW50OEFycmF5LiAgVGhpcyBpcyB2ZXJ5CisJCQkgKiBpbmVmZmljaWVudCBidXQgYWxsb3dzIHBs YWluIGJ1ZmZlciB0byBiZSB1c2VkIHdoZXJldmVyIGFuCisJCQkgKiBVaW50OEFycmF5IGlzIHVz ZWQgd2l0aCB2ZXJ5IHNtYWxsIGNvc3Q7IGhvdCBwYXRoIGZ1bmN0aW9ucworCQkJICogbGlrZSBp bmRleCByZWFkL3dyaXRlIGNhbGxzIHNob3VsZCBwcm92aWRlIGRpcmVjdCBidWZmZXIKKwkJCSAq IHN1cHBvcnQgdG8gYXZvaWQgcHJvbW90aW9uLgorCQkJICovCisJCQkvKiBYWFg6IG1ha2UgdGhp cyBjb25kaXRpb25hbCB0byBhIGZsYWcgaWYgY2FsbCBzaXRlcyBuZWVkIGl0PyAqLworCQkJaF90 aGlzID0gZHVrX19oYnVmb2JqX3Byb21vdGVfdGhpcyh0aHIpOworCQkJRFVLX0FTU0VSVChoX3Ro aXMgIT0gTlVMTCk7CisJCQlEVUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQoaF90aGlzKTsKKwkJCXJl dHVybiAoZHVrX2hlYXBoZHIgKikgaF90aGlzOworCQl9IGVsc2UgeworCQkJLyogWFhYOiB1Z2x5 LCBzaGFyZSByZXR1cm4gcG9pbnRlciBmb3IgZHVrX2hidWZmZXIuICovCisJCQlyZXR1cm4gKGR1 a19oZWFwaGRyICopIERVS19UVkFMX0dFVF9CVUZGRVIodHYpOworCQl9CisJfQorCisJaWYgKGZs YWdzICYgRFVLX19CVUZPQkpfRkxBR19USFJPVykgeworCQlEVUtfRVJST1JfVFlQRSh0aHIsIERV S19TVFJfTk9UX0JVRkZFUik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCX0K KwlyZXR1cm4gTlVMTDsKK30KKworLyogQ2hlY2sgdGhhdCAndGhpcycgaXMgYSBkdWtfaGJ1Zm9i aiBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gKi8KK0RVS19MT0NBTCBkdWtfaGJ1Zm9iaiAq ZHVrX19nZXRfYnVmb2JqX3RoaXMoZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiAoZHVrX2hi dWZvYmogKikgZHVrX19nZXRyZXF1aXJlX2J1Zm9ial90aGlzKHRociwgRFVLX19CVUZPQkpfRkxB R19QUk9NT1RFKTsKK30KKworLyogQ2hlY2sgdGhhdCAndGhpcycgaXMgYSBkdWtfaGJ1Zm9iaiBh bmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdAorICogKE5VTEwgaWYgbm90KS4KKyAqLworRFVLX0xP Q0FMIGR1a19oYnVmb2JqICpkdWtfX3JlcXVpcmVfYnVmb2JqX3RoaXMoZHVrX2h0aHJlYWQgKnRo cikgeworCXJldHVybiAoZHVrX2hidWZvYmogKikgZHVrX19nZXRyZXF1aXJlX2J1Zm9ial90aGlz KHRociwgRFVLX19CVUZPQkpfRkxBR19USFJPVyB8IERVS19fQlVGT0JKX0ZMQUdfUFJPTU9URSk7 Cit9CisKKy8qIENoZWNrIHRoYXQgdmFsdWUgaXMgYSBkdWtfaGJ1Zm9iaiBhbmQgcmV0dXJuIGEg cG9pbnRlciB0byBpdC4gKi8KK0RVS19MT0NBTCBkdWtfaGJ1Zm9iaiAqZHVrX19yZXF1aXJlX2J1 Zm9ial92YWx1ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJZHVrX3R2YWwg KnR2OworCWR1a19oYnVmb2JqICpoX29iajsKKworCS8qIERvbid0IGFjY2VwdCByZWxhdGl2ZSBp bmRpY2VzIG5vdy4gKi8KKwlEVUtfQVNTRVJUKGlkeCA+PSAwKTsKKworCXR2ID0gZHVrX3JlcXVp cmVfdHZhbCh0aHIsIGlkeCk7CisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKwlpZiAoRFVLX1RW QUxfSVNfT0JKRUNUKHR2KSkgeworCQloX29iaiA9IChkdWtfaGJ1Zm9iaiAqKSBEVUtfVFZBTF9H RVRfT0JKRUNUKHR2KTsKKwkJRFVLX0FTU0VSVChoX29iaiAhPSBOVUxMKTsKKwkJaWYgKERVS19I T0JKRUNUX0lTX0JVRk9CSigoZHVrX2hvYmplY3QgKikgaF9vYmopKSB7CisJCQlEVUtfQVNTRVJU X0hCVUZPQkpfVkFMSUQoaF9vYmopOworCQkJcmV0dXJuIGhfb2JqOworCQl9CisJfSBlbHNlIGlm IChEVUtfVFZBTF9JU19CVUZGRVIodHYpKSB7CisJCWhfb2JqID0gKGR1a19oYnVmb2JqICopIGR1 a190b19ob2JqZWN0KHRociwgaWR4KTsKKwkJRFVLX0FTU0VSVChoX29iaiAhPSBOVUxMKTsKKwkJ RFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhfb2JqKTsKKwkJcmV0dXJuIGhfb2JqOworCX0KKwor CURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9OT1RfQlVGRkVSKTsKKwlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuIE5VTEw7KTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19zZXRfYnVmb2JqX2J1 ZmZlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGJ1Zm9iaiAqaF9idWZvYmosIGR1a19oYnVmZmVy ICpoX3ZhbCkgeworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoaF9idWZv YmogIT0gTlVMTCk7CisJRFVLX0FTU0VSVChoX2J1Zm9iai0+YnVmID09IE5VTEwpOyAgLyogbm8g bmVlZCB0byBkZWNyZWYgKi8KKwlEVUtfQVNTRVJUKGhfdmFsICE9IE5VTEwpOworCURVS19BU1NF UlRfSEJVRk9CSl9WQUxJRChoX2J1Zm9iaik7CisJRFVLX1VOUkVGKHRocik7CisKKwloX2J1Zm9i ai0+YnVmID0gaF92YWw7CisJRFVLX0hCVUZGRVJfSU5DUkVGKHRociwgaF92YWwpOworCWhfYnVm b2JqLT5sZW5ndGggPSAoZHVrX3VpbnRfdCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaF92YWwpOwor CURVS19BU1NFUlQoaF9idWZvYmotPnNoaWZ0ID09IDApOworCURVS19BU1NFUlQoaF9idWZvYmot PmVsZW1fdHlwZSA9PSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4KTsKKwlEVUtfQVNTRVJUKGhfYnVm b2JqLT5pc190eXBlZGFycmF5ID09IDApOworCisJRFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhf YnVmb2JqKTsKK30KKworLyogU2hhcmVkIG9mZnNldC9sZW5ndGggY29lcmNpb24gaGVscGVyLiAq LworRFVLX0xPQ0FMIHZvaWQgZHVrX19yZXNvbHZlX29mZnNldF9vcHRfbGVuZ3RoKGR1a19odGhy ZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX2hidWZvYmogKmhfYnVmYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19pZHhfdCBpZHhfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19pZHhfdCBpZHhfbGVuZ3RoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a191aW50X3QgKm91dF9vZmZz ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3Vp bnRfdCAqb3V0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfYm9vbF90IHRocm93X2ZsYWcpIHsKKwlkdWtfaW50X3Qgb2Zmc2V0X3NpZ25l ZDsKKwlkdWtfaW50X3QgbGVuZ3RoX3NpZ25lZDsKKwlkdWtfdWludF90IG9mZnNldDsKKwlkdWtf dWludF90IGxlbmd0aDsKKworCW9mZnNldF9zaWduZWQgPSBkdWtfdG9faW50KHRociwgaWR4X29m ZnNldCk7CisJaWYgKG9mZnNldF9zaWduZWQgPCAwKSB7CisJCWdvdG8gZmFpbF9yYW5nZTsKKwl9 CisJb2Zmc2V0ID0gKGR1a191aW50X3QpIG9mZnNldF9zaWduZWQ7CisJaWYgKG9mZnNldCA+IGhf YnVmYXJnLT5sZW5ndGgpIHsKKwkJZ290byBmYWlsX3JhbmdlOworCX0KKwlEVUtfQVNTRVJUX0RJ U0FCTEUob2Zmc2V0ID49IDApOyAgLyogdW5zaWduZWQgKi8KKwlEVUtfQVNTRVJUKG9mZnNldCA8 PSBoX2J1ZmFyZy0+bGVuZ3RoKTsKKworCWlmIChkdWtfaXNfdW5kZWZpbmVkKHRociwgaWR4X2xl bmd0aCkpIHsKKwkJRFVLX0FTU0VSVChoX2J1ZmFyZy0+bGVuZ3RoID49IG9mZnNldCk7CisJCWxl bmd0aCA9IGhfYnVmYXJnLT5sZW5ndGggLSBvZmZzZXQ7ICAvKiA+PSAwICovCisJfSBlbHNlIHsK KwkJbGVuZ3RoX3NpZ25lZCA9IGR1a190b19pbnQodGhyLCBpZHhfbGVuZ3RoKTsKKwkJaWYgKGxl bmd0aF9zaWduZWQgPCAwKSB7CisJCQlnb3RvIGZhaWxfcmFuZ2U7CisJCX0KKwkJbGVuZ3RoID0g KGR1a191aW50X3QpIGxlbmd0aF9zaWduZWQ7CisJCURVS19BU1NFUlQoaF9idWZhcmctPmxlbmd0 aCA+PSBvZmZzZXQpOworCQlpZiAobGVuZ3RoID4gaF9idWZhcmctPmxlbmd0aCAtIG9mZnNldCkg eworCQkJLyogVW5saWtlIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMsIHNvbWUgY2FsbCBzaXRlcwor CQkJICogd2FudCBsZW5ndGggdG8gYmUgY2xhbXBlZCBpZiBpdCdzIHBvc2l0aXZlLgorCQkJICov CisJCQlpZiAodGhyb3dfZmxhZykgeworCQkJCWdvdG8gZmFpbF9yYW5nZTsKKwkJCX0gZWxzZSB7 CisJCQkJbGVuZ3RoID0gaF9idWZhcmctPmxlbmd0aCAtIG9mZnNldDsKKwkJCX0KKwkJfQorCX0K KwlEVUtfQVNTRVJUX0RJU0FCTEUobGVuZ3RoID49IDApOyAgLyogdW5zaWduZWQgKi8KKwlEVUtf QVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBoX2J1ZmFyZy0+bGVuZ3RoKTsKKworCSpvdXRfb2Zm c2V0ID0gb2Zmc2V0OworCSpvdXRfbGVuZ3RoID0gbGVuZ3RoOworCXJldHVybjsKKworIGZhaWxf cmFuZ2U6CisJRFVLX0VSUk9SX1JBTkdFKHRociwgRFVLX1NUUl9JTlZBTElEX0FSR1MpOworCURV S19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyogU2hhcmVkIGxlbmllbnQgYnVmZmVyIGxl bmd0aCBjbGFtcGluZyBoZWxwZXIuICBObyBuZWdhdGl2ZSBpbmRpY2VzLCBubworICogZWxlbWVu dC9ieXRlIHNoaWZ0aW5nLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2NsYW1wX3N0YXJ0ZW5k X25vbmVnaWR4X25vc2hpZnQoZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaW50X3QgYnVmZmVyX2xlbmd0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf aWR4X3QgaWR4X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19pZHhfdCBpZHhfZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19pbnRfdCAqb3V0X3N0YXJ0X29mZnNldCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf aW50X3QgKm91dF9lbmRfb2Zmc2V0KSB7CisJZHVrX2ludF90IHN0YXJ0X29mZnNldDsKKwlkdWtf aW50X3QgZW5kX29mZnNldDsKKworCURVS19BU1NFUlQob3V0X3N0YXJ0X29mZnNldCAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKG91dF9lbmRfb2Zmc2V0ICE9IE5VTEwpOworCisJLyogdW5kZWZpbmVk IGNvZXJjZXMgdG8gemVybyB3aGljaCBpcyBjb3JyZWN0ICovCisJc3RhcnRfb2Zmc2V0ID0gZHVr X3RvX2ludF9jbGFtcGVkKHRociwgaWR4X3N0YXJ0LCAwLCBidWZmZXJfbGVuZ3RoKTsKKwlpZiAo ZHVrX2lzX3VuZGVmaW5lZCh0aHIsIGlkeF9lbmQpKSB7CisJCWVuZF9vZmZzZXQgPSBidWZmZXJf bGVuZ3RoOworCX0gZWxzZSB7CisJCWVuZF9vZmZzZXQgPSBkdWtfdG9faW50X2NsYW1wZWQodGhy LCBpZHhfZW5kLCBzdGFydF9vZmZzZXQsIGJ1ZmZlcl9sZW5ndGgpOworCX0KKworCURVS19BU1NF UlQoc3RhcnRfb2Zmc2V0ID49IDApOworCURVS19BU1NFUlQoc3RhcnRfb2Zmc2V0IDw9IGJ1ZmZl cl9sZW5ndGgpOworCURVS19BU1NFUlQoZW5kX29mZnNldCA+PSAwKTsKKwlEVUtfQVNTRVJUKGVu ZF9vZmZzZXQgPD0gYnVmZmVyX2xlbmd0aCk7CisJRFVLX0FTU0VSVChzdGFydF9vZmZzZXQgPD0g ZW5kX29mZnNldCk7CisKKwkqb3V0X3N0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldDsKKwkqb3V0 X2VuZF9vZmZzZXQgPSBlbmRfb2Zmc2V0OworfQorCisvKiBTaGFyZWQgbGVuaWVudCBidWZmZXIg bGVuZ3RoIGNsYW1waW5nIGhlbHBlci4gIEluZGljZXMgYXJlIHRyZWF0ZWQgYXMKKyAqIGVsZW1l bnQgaW5kaWNlcyAodGhvdWdoIG91dHB1dCB2YWx1ZXMgYXJlIGJ5dGUgb2Zmc2V0cykgd2hpY2gg b25seQorICogcmVhbGx5IG1hdHRlcnMgZm9yIFR5cGVkQXJyYXkgdmlld3MgYXMgb3RoZXIgYnVm ZmVyIG9iamVjdCBoYXZlIGEgemVybworICogc2hpZnQuICBOZWdhdGl2ZSBpbmRpY2VzIGFyZSBj b3VudGVkIGZyb20gZW5kIG9mIGlucHV0IHNsaWNlOyBjcm9zc2VkCisgKiBpbmRpY2VzIGFyZSBj bGFtcGVkIHRvIHplcm8gbGVuZ3RoOyBhbmQgZmluYWwgaW5kaWNlcyBhcmUgY2xhbXBlZAorICog YWdhaW5zdCBpbnB1dCBzbGljZS4gIFVzZWQgZm9yIGUuZy4gQXJyYXlCdWZmZXIgc2xpY2UoKS4K KyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19jbGFtcF9zdGFydGVuZF9uZWdpZHhfc2hpZnRlZChk dWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkdWtfaW50X3QgYnVmZmVyX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VpbnQ4X3QgYnVmZmVyX3NoaWZ0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4 X3QgaWR4X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfaWR4X3QgaWR4X2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2ludF90ICpvdXRfc3RhcnRfb2Zmc2V0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaW50X3QgKm91 dF9lbmRfb2Zmc2V0KSB7CisJZHVrX2ludF90IHN0YXJ0X29mZnNldDsKKwlkdWtfaW50X3QgZW5k X29mZnNldDsKKworCURVS19BU1NFUlQob3V0X3N0YXJ0X29mZnNldCAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKG91dF9lbmRfb2Zmc2V0ICE9IE5VTEwpOworCisJYnVmZmVyX2xlbmd0aCA+Pj0gYnVm ZmVyX3NoaWZ0OyAgLyogYXMgKGZ1bGwpIGVsZW1lbnRzICovCisKKwkvKiBSZXNvbHZlIHN0YXJ0 L2VuZCBvZmZzZXQgYXMgZWxlbWVudCBpbmRpY2VzIGZpcnN0OyBhcmd1bWVudHMKKwkgKiBhdCBp ZHhfc3RhcnQvaWR4X2VuZCBhcmUgZWxlbWVudCBvZmZzZXRzLiAgV29ya2luZyB3aXRoIGVsZW1l bnQKKwkgKiBpbmRpY2VzIGZpcnN0IGFsc28gYXZvaWRzIHBvdGVudGlhbCBmb3Igd3JhcHBpbmcu CisJICovCisKKwlzdGFydF9vZmZzZXQgPSBkdWtfdG9faW50KHRociwgaWR4X3N0YXJ0KTsKKwlp ZiAoc3RhcnRfb2Zmc2V0IDwgMCkgeworCQlzdGFydF9vZmZzZXQgPSBidWZmZXJfbGVuZ3RoICsg c3RhcnRfb2Zmc2V0OworCX0KKwlpZiAoZHVrX2lzX3VuZGVmaW5lZCh0aHIsIGlkeF9lbmQpKSB7 CisJCWVuZF9vZmZzZXQgPSBidWZmZXJfbGVuZ3RoOworCX0gZWxzZSB7CisJCWVuZF9vZmZzZXQg PSBkdWtfdG9faW50KHRociwgaWR4X2VuZCk7CisJCWlmIChlbmRfb2Zmc2V0IDwgMCkgeworCQkJ ZW5kX29mZnNldCA9IGJ1ZmZlcl9sZW5ndGggKyBlbmRfb2Zmc2V0OworCQl9CisJfQorCS8qIE5v dGU6IHN0YXJ0X29mZnNldC9lbmRfb2Zmc2V0IGNhbiBzdGlsbCBiZSA8IDAgaGVyZS4gKi8KKwor CWlmIChzdGFydF9vZmZzZXQgPCAwKSB7CisJCXN0YXJ0X29mZnNldCA9IDA7CisJfSBlbHNlIGlm IChzdGFydF9vZmZzZXQgPiBidWZmZXJfbGVuZ3RoKSB7CisJCXN0YXJ0X29mZnNldCA9IGJ1ZmZl cl9sZW5ndGg7CisJfQorCWlmIChlbmRfb2Zmc2V0IDwgc3RhcnRfb2Zmc2V0KSB7CisJCWVuZF9v ZmZzZXQgPSBzdGFydF9vZmZzZXQ7CisJfSBlbHNlIGlmIChlbmRfb2Zmc2V0ID4gYnVmZmVyX2xl bmd0aCkgeworCQllbmRfb2Zmc2V0ID0gYnVmZmVyX2xlbmd0aDsKKwl9CisJRFVLX0FTU0VSVChz dGFydF9vZmZzZXQgPj0gMCk7CisJRFVLX0FTU0VSVChzdGFydF9vZmZzZXQgPD0gYnVmZmVyX2xl bmd0aCk7CisJRFVLX0FTU0VSVChlbmRfb2Zmc2V0ID49IDApOworCURVS19BU1NFUlQoZW5kX29m ZnNldCA8PSBidWZmZXJfbGVuZ3RoKTsKKwlEVUtfQVNTRVJUKHN0YXJ0X29mZnNldCA8PSBlbmRf b2Zmc2V0KTsKKworCS8qIENvbnZlcnQgaW5kaWNlcyB0byBieXRlIG9mZnNldHMuICovCisJc3Rh cnRfb2Zmc2V0IDw8PSBidWZmZXJfc2hpZnQ7CisJZW5kX29mZnNldCA8PD0gYnVmZmVyX3NoaWZ0 OworCisJKm91dF9zdGFydF9vZmZzZXQgPSBzdGFydF9vZmZzZXQ7CisJKm91dF9lbmRfb2Zmc2V0 ID0gZW5kX29mZnNldDsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hidWZvYmpfcHJvbW90 ZV9wbGFpbihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4KSB7CisJaWYgKGR1a19pc19i dWZmZXIodGhyLCBpZHgpKSB7CisJCWR1a190b19vYmplY3QodGhyLCBpZHgpOworCX0KK30KKwor RFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hidWZvYmpfcHVzaF91aW50OGFycmF5X2Zyb21fcGxhaW4o ZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXIgKmhfYnVmKSB7CisJLyogUHVzaCBVaW50OEFy cmF5IHdoaWNoIHdpbGwgc2hhcmUgdGhlIHNhbWUgdW5kZXJseWluZyBidWZmZXIgYXMKKwkgKiB0 aGUgcGxhaW4gYnVmZmVyIGFyZ3VtZW50LiAgQWxzbyBjcmVhdGUgYW4gQXJyYXlCdWZmZXIgd2l0 aCB0aGUKKwkgKiBzYW1lIGJhY2tpbmcgZm9yIHRoZSByZXN1bHQgLmJ1ZmZlciBwcm9wZXJ0eS4K KwkgKi8KKworCWR1a19wdXNoX2hidWZmZXIodGhyLCBoX2J1Zik7CisJZHVrX3B1c2hfYnVmZmVy X29iamVjdCh0aHIsIC0xLCAwLCAoZHVrX3NpemVfdCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaF9i dWYpLCBEVUtfQlVGT0JKX1VJTlQ4QVJSQVkpOworCWR1a19yZW1vdmVfbTIodGhyKTsKKworI2lm IDAKKwkvKiBNb3JlIHZlcmJvc2UgZXF1aXZhbGVudDsgbWF5YmUgdXNlZnVsIGlmIGUuZy4gLmJ1 ZmZlciBpcyBvbWl0dGVkLiAqLworCWhfYnVmb2JqID0gZHVrX3B1c2hfYnVmb2JqX3Jhdyh0aHIs CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRVhURU5T SUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdf QlVGT0JKIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfQ0xB U1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfVUlOVDhBUlJBWSksCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19CSURYX1VJTlQ4QVJSQVlfUFJPVE9UWVBFKTsKKwlEVUtf QVNTRVJUKGhfYnVmb2JqICE9IE5VTEwpOworCWR1a19fc2V0X2J1Zm9ial9idWZmZXIodGhyLCBo X2J1Zm9iaiwgaF9idWYpOworCWhfYnVmb2JqLT5pc190eXBlZGFycmF5ID0gMTsKKwlEVUtfQVNT RVJUX0hCVUZPQkpfVkFMSUQoaF9idWZvYmopOworCisJaF9hcnJidWYgPSBkdWtfcHVzaF9idWZv YmpfcmF3KHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1Rf RkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hP QkpFQ1RfRkxBR19CVUZPQkogfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19BUlJBWUJVRkZFUiksCisJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19CSURYX0FSUkFZQlVGRkVSX1BST1RP VFlQRSk7CisJRFVLX0FTU0VSVChoX2FycmJ1ZiAhPSBOVUxMKTsKKwlkdWtfX3NldF9idWZvYmpf YnVmZmVyKHRociwgaF9hcnJidWYsIGhfYnVmKTsKKwlEVUtfQVNTRVJUKGhfYXJyYnVmLT5pc190 eXBlZGFycmF5ID09IDApOworCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChoX2FycmJ1Zik7CisK KwlEVUtfQVNTRVJUKGhfYnVmb2JqLT5idWZfcHJvcCA9PSBOVUxMKTsKKwloX2J1Zm9iai0+YnVm X3Byb3AgPSAoZHVrX2hvYmplY3QgKikgaF9hcnJidWY7CisJRFVLX0FTU0VSVChoX2FycmJ1ZiAh PSBOVUxMKTsKKwlEVUtfSEJVRk9CSl9JTkNSRUYodGhyLCBoX2FycmJ1Zik7CisJZHVrX3BvcCh0 aHIpOworI2VuZGlmCit9CisKKy8qIEluZGV4ZWQgcmVhZCBoZWxwZXIgZm9yIGJ1ZmZlciBvYmpl Y3RzLCBhbHNvIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhpcyBmaWxlLiAqLworRFVLX0lOVEVSTkFM IHZvaWQgZHVrX2hidWZvYmpfcHVzaF92YWxpZGF0ZWRfcmVhZChkdWtfaHRocmVhZCAqdGhyLCBk dWtfaGJ1Zm9iaiAqaF9idWZvYmosIGR1a191aW50OF90ICpwLCBkdWtfc21hbGxfdWludF90IGVs ZW1fc2l6ZSkgeworCWR1a19kb3VibGVfdW5pb24gZHU7CisKKwlEVUtfQVNTRVJUKGVsZW1fc2l6 ZSA+IDApOworCWR1a19tZW1jcHkoKHZvaWQgKikgZHUudWMsIChjb25zdCB2b2lkICopIHAsIChz aXplX3QpIGVsZW1fc2l6ZSk7CisKKwlzd2l0Y2ggKGhfYnVmb2JqLT5lbGVtX3R5cGUpIHsKKwlj YXNlIERVS19IQlVGT0JKX0VMRU1fVUlOVDg6CisJY2FzZSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQ4 Q0xBTVBFRDoKKwkJZHVrX3B1c2hfdWludCh0aHIsIChkdWtfdWludF90KSBkdS51Y1swXSk7CisJ CWJyZWFrOworCWNhc2UgRFVLX0hCVUZPQkpfRUxFTV9JTlQ4OgorCQlkdWtfcHVzaF9pbnQodGhy LCAoZHVrX2ludF90KSAoZHVrX2ludDhfdCkgZHUudWNbMF0pOworCQlicmVhazsKKwljYXNlIERV S19IQlVGT0JKX0VMRU1fVUlOVDE2OgorCQlkdWtfcHVzaF91aW50KHRociwgKGR1a191aW50X3Qp IGR1LnVzWzBdKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfSEJVRk9CSl9FTEVNX0lOVDE2OgorCQlk dWtfcHVzaF9pbnQodGhyLCAoZHVrX2ludF90KSAoZHVrX2ludDE2X3QpIGR1LnVzWzBdKTsKKwkJ YnJlYWs7CisJY2FzZSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQzMjoKKwkJZHVrX3B1c2hfdWludCh0 aHIsIChkdWtfdWludF90KSBkdS51aVswXSk7CisJCWJyZWFrOworCWNhc2UgRFVLX0hCVUZPQkpf RUxFTV9JTlQzMjoKKwkJZHVrX3B1c2hfaW50KHRociwgKGR1a19pbnRfdCkgKGR1a19pbnQzMl90 KSBkdS51aVswXSk7CisJCWJyZWFrOworCWNhc2UgRFVLX0hCVUZPQkpfRUxFTV9GTE9BVDMyOgor CQlkdWtfcHVzaF9udW1iZXIodGhyLCAoZHVrX2RvdWJsZV90KSBkdS5mWzBdKTsKKwkJYnJlYWs7 CisJY2FzZSBEVUtfSEJVRk9CSl9FTEVNX0ZMT0FUNjQ6CisJCWR1a19wdXNoX251bWJlcih0aHIs IChkdWtfZG91YmxlX3QpIGR1LmQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEVUtfVU5SRUFD SEFCTEUoKTsKKwl9Cit9CisKKy8qIEluZGV4ZWQgd3JpdGUgaGVscGVyIGZvciBidWZmZXIgb2Jq ZWN0cywgYWxzbyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgZmlsZS4gKi8KK0RVS19JTlRFUk5B TCB2b2lkIGR1a19oYnVmb2JqX3ZhbGlkYXRlZF93cml0ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtf aGJ1Zm9iaiAqaF9idWZvYmosIGR1a191aW50OF90ICpwLCBkdWtfc21hbGxfdWludF90IGVsZW1f c2l6ZSkgeworCWR1a19kb3VibGVfdW5pb24gZHU7CisKKwkvKiBOT1RFISBDYWxsZXIgbXVzdCBl bnN1cmUgdGhhdCBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhlCisJICogY29lcmNpb25zIGJlbG93 IGFyZSBzYWZlLiAgSWYgdGhhdCBjYW5ub3QgYmUgZ3VhcmFudGVlZAorCSAqICh3aGljaCBpcyBu b3JtYWxseSB0aGUgY2FzZSksIGNhbGxlciBtdXN0IGNvZXJjZSB0aGUKKwkgKiBhcmd1bWVudCB1 c2luZyBkdWtfdG9fbnVtYmVyKCkgYmVmb3JlIGFueSBwb2ludGVyCisJICogdmFsaWRhdGlvbnM7 IHRoZSByZXN1bHQgb2YgZHVrX3RvX251bWJlcigpIGFsd2F5cyBjb2VyY2VzCisJICogd2l0aG91 dCBzaWRlIGVmZmVjdHMgaGVyZS4KKwkgKi8KKworCXN3aXRjaCAoaF9idWZvYmotPmVsZW1fdHlw ZSkgeworCWNhc2UgRFVLX0hCVUZPQkpfRUxFTV9VSU5UODoKKwkJZHUudWNbMF0gPSAoZHVrX3Vp bnQ4X3QpIGR1a190b191aW50MzIodGhyLCAtMSk7CisJCWJyZWFrOworCWNhc2UgRFVLX0hCVUZP QkpfRUxFTV9VSU5UOENMQU1QRUQ6CisJCWR1LnVjWzBdID0gKGR1a191aW50OF90KSBkdWtfdG9f dWludDhjbGFtcGVkKHRociwgLTEpOworCQlicmVhazsKKwljYXNlIERVS19IQlVGT0JKX0VMRU1f SU5UODoKKwkJZHUudWNbMF0gPSAoZHVrX3VpbnQ4X3QpIGR1a190b19pbnQzMih0aHIsIC0xKTsK KwkJYnJlYWs7CisJY2FzZSBEVUtfSEJVRk9CSl9FTEVNX1VJTlQxNjoKKwkJZHUudXNbMF0gPSAo ZHVrX3VpbnQxNl90KSBkdWtfdG9fdWludDMyKHRociwgLTEpOworCQlicmVhazsKKwljYXNlIERV S19IQlVGT0JKX0VMRU1fSU5UMTY6CisJCWR1LnVzWzBdID0gKGR1a191aW50MTZfdCkgZHVrX3Rv X2ludDMyKHRociwgLTEpOworCQlicmVhazsKKwljYXNlIERVS19IQlVGT0JKX0VMRU1fVUlOVDMy OgorCQlkdS51aVswXSA9IChkdWtfdWludDMyX3QpIGR1a190b191aW50MzIodGhyLCAtMSk7CisJ CWJyZWFrOworCWNhc2UgRFVLX0hCVUZPQkpfRUxFTV9JTlQzMjoKKwkJZHUudWlbMF0gPSAoZHVr X3VpbnQzMl90KSBkdWtfdG9faW50MzIodGhyLCAtMSk7CisJCWJyZWFrOworCWNhc2UgRFVLX0hC VUZPQkpfRUxFTV9GTE9BVDMyOgorCQkvKiBBIGRvdWJsZS10by1mbG9hdCBjYXN0IGlzIHVuZGVm aW5lZCBiZWhhdmlvciBpbiBDOTkgaWYKKwkJICogdGhlIGNhc3QgaXMgb3V0LW9mLXJhbmdlLCBz byB1c2UgYSBoZWxwZXIuICBFeGFtcGxlOgorCQkgKiBydW50aW1lIGVycm9yOiB2YWx1ZSAtMWUr MTAwIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHJlcHJlc2VudGFibGUgdmFsdWVzIG9mIHR5cGUg J2Zsb2F0JworCQkgKi8KKwkJZHUuZlswXSA9IGR1a19kb3VibGVfdG9fZmxvYXRfdChkdWtfdG9f bnVtYmVyX20xKHRocikpOworCQlicmVhazsKKwljYXNlIERVS19IQlVGT0JKX0VMRU1fRkxPQVQ2 NDoKKwkJZHUuZCA9IChkdWtfZG91YmxlX3QpIGR1a190b19udW1iZXJfbTEodGhyKTsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJRFVLX1VOUkVBQ0hBQkxFKCk7CisJfQorCisJRFVLX0FTU0VSVChl bGVtX3NpemUgPiAwKTsKKwlkdWtfbWVtY3B5KCh2b2lkICopIHAsIChjb25zdCB2b2lkICopIGR1 LnVjLCAoc2l6ZV90KSBlbGVtX3NpemUpOworfQorCisvKiBIZWxwZXIgdG8gY3JlYXRlIGEgZml4 ZWQgYnVmZmVyIGZyb20gYXJndW1lbnQgdmFsdWUgYXQgaW5kZXggMC4KKyAqIE5vZGUuanMgYW5k IGFsbG9jUGxhaW4oKSBjb21wYXRpYmxlLgorICovCitEVUtfTE9DQUwgZHVrX2hidWZmZXIgKmR1 a19faGJ1Zm9ial9maXhlZF9mcm9tX2FyZ3ZhbHVlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtf aW50X3QgbGVuOworCWR1a19pbnRfdCBpOworCWR1a19zaXplX3QgYnVmX3NpemU7CisJZHVrX3Vp bnQ4X3QgKmJ1ZjsKKworCXN3aXRjaCAoZHVrX2dldF90eXBlKHRociwgMCkpIHsKKwljYXNlIERV S19UWVBFX05VTUJFUjogeworCQlsZW4gPSBkdWtfdG9faW50X2NsYW1wZWQodGhyLCAwLCAwLCBE VUtfSU5UX01BWCk7CisJCSh2b2lkKSBkdWtfcHVzaF9maXhlZF9idWZmZXJfemVybyh0aHIsIChk dWtfc2l6ZV90KSBsZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVFlQRV9CVUZGRVI6IHsg LyogVHJlYXQgbGlrZSBVaW50OEFycmF5LiAqLworCQlnb3RvIHNsb3dfY29weTsKKwl9CisJY2Fz ZSBEVUtfVFlQRV9PQkpFQ1Q6IHsKKwkJZHVrX2hvYmplY3QgKmg7CisJCWR1a19oYnVmb2JqICpo X2J1Zm9iajsKKworCQkvKiBGb3IgTm9kZS5qcyBCdWZmZXJzICJQYXNzaW5nIGFuIEFycmF5QnVm ZmVyIHJldHVybnMgYSBCdWZmZXIKKwkJICogdGhhdCBzaGFyZXMgYWxsb2NhdGVkIG1lbW9yeSB3 aXRoIHRoZSBnaXZlbiBBcnJheUJ1ZmZlci4iCisJCSAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkv YnVmZmVyLmh0bWwjYnVmZmVyX2J1ZmZlcl9mcm9tX2J1ZmZlcl9hbGxvY19hbmRfYnVmZmVyX2Fs bG9jdW5zYWZlCisJCSAqLworCisJCWggPSBkdWtfa25vd25faG9iamVjdCh0aHIsIDApOworCQlp ZiAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoKSA9PSBEVUtfSE9CSkVDVF9DTEFTU19B UlJBWUJVRkZFUikgeworCQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19CVUZPQkooaCkpOwor CQkJaF9idWZvYmogPSAoZHVrX2hidWZvYmogKikgaDsKKwkJCWlmIChEVUtfVU5MSUtFTFkoaF9i dWZvYmotPmJ1ZiA9PSBOVUxMKSkgeworCQkJCURVS19FUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0 aHIpOworCQkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCQkJfQorCQkJaWYgKERV S19VTkxJS0VMWShoX2J1Zm9iai0+b2Zmc2V0ICE9IDAgfHwgaF9idWZvYmotPmxlbmd0aCAhPSBE VUtfSEJVRkZFUl9HRVRfU0laRShoX2J1Zm9iai0+YnVmKSkpIHsKKwkJCQkvKiBObyBzdXBwb3J0 IGZvciBBcnJheUJ1ZmZlcnMgd2l0aCBzbGljZQorCQkJCSAqIG9mZnNldC9sZW5ndGguCisJCQkJ ICovCisJCQkJRFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJCQkJRFVLX1dPX05P UkVUVVJOKHJldHVybiBOVUxMOyk7CisJCQl9CisJCQlkdWtfcHVzaF9oYnVmZmVyKHRociwgaF9i dWZvYmotPmJ1Zik7CisJCQlyZXR1cm4gaF9idWZvYmotPmJ1ZjsKKwkJfQorCQlnb3RvIHNsb3df Y29weTsKKwl9CisJY2FzZSBEVUtfVFlQRV9TVFJJTkc6IHsKKwkJLyogaWdub3JlIGVuY29kaW5n IGZvciBub3cgKi8KKwkJZHVrX3JlcXVpcmVfaHN0cmluZ19ub3RzeW1ib2wodGhyLCAwKTsKKwkJ ZHVrX2R1cF8wKHRocik7CisJCSh2b2lkKSBkdWtfdG9fYnVmZmVyKHRociwgLTEsICZidWZfc2l6 ZSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlEVUtfRVJST1JfVFlQRV9JTlZBTElEX0FS R1ModGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiBOVUxMOyk7CisJfQorCisgZG9uZToK KwlEVUtfQVNTRVJUKGR1a19pc19idWZmZXIodGhyLCAtMSkpOworCXJldHVybiBkdWtfa25vd25f aGJ1ZmZlcih0aHIsIC0xKTsKKworIHNsb3dfY29weToKKwkvKiBYWFg6IGZhc3QgcGF0aCBmb3Ig dHlwZWQgYXJyYXlzIGFuZCBvdGhlciBidWZmZXIgb2JqZWN0cz8gKi8KKworCSh2b2lkKSBkdWtf Z2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgMCwgRFVLX1NUUklEWF9MRU5HVEgpOworCWxlbiA9 IGR1a190b19pbnRfY2xhbXBlZCh0aHIsIC0xLCAwLCBEVUtfSU5UX01BWCk7CisJZHVrX3BvcCh0 aHIpOworCWJ1ZiA9IChkdWtfdWludDhfdCAqKSBkdWtfcHVzaF9maXhlZF9idWZmZXJfbm96ZXJv KHRociwgKGR1a19zaXplX3QpIGxlbik7ICAvKiBubyB6ZXJvaW5nLCBhbGwgaW5kaWNlcyBnZXQg aW5pdGlhbGl6ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJLyogWFhYOiBm YXN0IHBhdGggZm9yIGFycmF5IG9yIGJ1ZmZlciBhcmd1bWVudHM/ICovCisJCWR1a19nZXRfcHJv cF9pbmRleCh0aHIsIDAsIChkdWtfdWFycmlkeF90KSBpKTsKKwkJYnVmW2ldID0gKGR1a191aW50 OF90KSAoZHVrX3RvX3VpbnQzMih0aHIsIC0xKSAmIDB4ZmZVKTsKKwkJZHVrX3BvcCh0aHIpOwor CX0KKwlnb3RvIGRvbmU7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBP UlQgKi8KKworLyoKKyAqICBOb2RlLmpzIEJ1ZmZlciBjb25zdHJ1Y3RvcgorICoKKyAqICBOb2Rl LmpzIEJ1ZmZlcnMgYXJlIGp1c3QgVWludDhBcnJheXMgd2l0aCBpbnRlcm5hbCBwcm90b3R5cGUg c2V0IHRvCisgKiAgQnVmZmVyLnByb3RvdHlwZSBzbyB0aGV5J3JlIGhhbmRsZWQgb3RoZXJ3aXNl IHRoZSBzYW1lIGFzIFVpbnQ4QXJyYXkuCisgKiAgSG93ZXZlciwgdGhlIGNvbnN0cnVjdG9yIGFy Z3VtZW50cyBhcmUgdmVyeSBkaWZmZXJlbnQgc28gYSBzZXBhcmF0ZQorICogIGNvbnN0cnVjdG9y IGVudHJ5IHBvaW50IGlzIHVzZWQuCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JK RUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVy X2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaGJ1ZmZlciAqaF9idWY7CisK KwloX2J1ZiA9IGR1a19faGJ1Zm9ial9maXhlZF9mcm9tX2FyZ3ZhbHVlKHRocik7CisJRFVLX0FT U0VSVChoX2J1ZiAhPSBOVUxMKTsKKworCWR1a19wdXNoX2J1ZmZlcl9vYmplY3QodGhyLAorCSAg ICAgICAgICAgICAgICAgICAgICAgLTEsCisJICAgICAgICAgICAgICAgICAgICAgICAwLAorCSAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0hCVUZGRVJfRklYRURfR0VUX1NJWkUoKGR1a19oYnVm ZmVyX2ZpeGVkICopICh2b2lkICopIGhfYnVmKSwKKwkgICAgICAgICAgICAgICAgICAgICAgIERV S19CVUZPQkpfVUlOVDhBUlJBWSk7CisJZHVrX3B1c2hfaG9iamVjdF9iaWR4KHRociwgRFVLX0JJ RFhfTk9ERUpTX0JVRkZFUl9QUk9UT1RZUEUpOworCWR1a19zZXRfcHJvdG90eXBlKHRociwgLTIp OworCisJLyogWFhYOiBhIG1vcmUgZGlyZWN0IGltcGxlbWVudGF0aW9uICovCisKKwlyZXR1cm4g MTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCisvKgor ICogIEFycmF5QnVmZmVyLCBEYXRhVmlldywgYW5kIFR5cGVkQXJyYXkgY29uc3RydWN0b3JzCisg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX2FycmF5YnVmZmVyX2NvbnN0cnVjdG9yKGR1a19odGhyZWFk ICp0aHIpIHsKKwlkdWtfaGJ1Zm9iaiAqaF9idWZvYmo7CisJZHVrX2hidWZmZXIgKmhfdmFsOwor CWR1a19pbnRfdCBsZW47CisKKwlEVUtfQVNTRVJUX0NUWF9WQUxJRCh0aHIpOworCisJZHVrX3Jl cXVpcmVfY29uc3RydWN0b3JfY2FsbCh0aHIpOworCisJbGVuID0gZHVrX3RvX2ludCh0aHIsIDAp OworCWlmIChsZW4gPCAwKSB7CisJCWdvdG8gZmFpbF9sZW5ndGg7CisJfQorCSh2b2lkKSBkdWtf cHVzaF9maXhlZF9idWZmZXJfemVybyh0aHIsIChkdWtfc2l6ZV90KSBsZW4pOworCWhfdmFsID0g KGR1a19oYnVmZmVyICopIGR1a19rbm93bl9oYnVmZmVyKHRociwgLTEpOworCisJaF9idWZvYmog PSBkdWtfcHVzaF9idWZvYmpfcmF3KHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19CVUZPQkogfAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19B UlJBWUJVRkZFUiksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19CSURYX0FS UkFZQlVGRkVSX1BST1RPVFlQRSk7CisJRFVLX0FTU0VSVChoX2J1Zm9iaiAhPSBOVUxMKTsKKwor CWR1a19fc2V0X2J1Zm9ial9idWZmZXIodGhyLCBoX2J1Zm9iaiwgaF92YWwpOworCURVS19BU1NF UlRfSEJVRk9CSl9WQUxJRChoX2J1Zm9iaik7CisKKwlyZXR1cm4gMTsKKworIGZhaWxfbGVuZ3Ro OgorCURVS19EQ0VSUk9SX1JBTkdFX0lOVkFMSURfTEVOR1RIKHRocik7Cit9CisjZW5kaWYgIC8q IERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworCisvKiBGb3JtYXQgb2YgbWFnaWMs IGJpdHM6CisgKiAgIDAuLi4xOiBlbGVtIHNpemUgc2hpZnQgKDAtMykKKyAqICAgMi4uLjU6IGVs ZW0gdHlwZSAoRFVLX0hCVUZPQkpfRUxFTV94eHgpCisgKgorICogWFhYOiBhZGQgcHJvdG90eXBl IGJpZHggZXhwbGljaXRseSB0byBtYWdpYyBpbnN0ZWFkIG9mIHVzaW5nIGEgbWFwcGluZz8KKyAq LworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorRFVLX0lOVEVS TkFMIGR1a19yZXRfdCBkdWtfYmlfdHlwZWRhcnJheV9jb25zdHJ1Y3RvcihkdWtfaHRocmVhZCAq dGhyKSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19ob2JqZWN0ICpoX29iajsKKwlkdWtfaGJ1Zm9i aiAqaF9idWZvYmogPSBOVUxMOworCWR1a19oYnVmb2JqICpoX2J1ZmFyZyA9IE5VTEw7CisJZHVr X2hidWZmZXIgKmhfdmFsOworCWR1a19zbWFsbF91aW50X3QgbWFnaWM7CisJZHVrX3NtYWxsX3Vp bnRfdCBzaGlmdDsKKwlkdWtfc21hbGxfdWludF90IGVsZW1fdHlwZTsKKwlkdWtfc21hbGxfdWlu dF90IGVsZW1fc2l6ZTsKKwlkdWtfc21hbGxfdWludF90IGNsYXNzX251bTsKKwlkdWtfc21hbGxf dWludF90IHByb3RvX2JpZHg7CisJZHVrX3VpbnRfdCBhbGlnbl9tYXNrOworCWR1a191aW50X3Qg ZWxlbV9sZW5ndGg7CisJZHVrX2ludF90IGVsZW1fbGVuZ3RoX3NpZ25lZDsKKwlkdWtfdWludF90 IGJ5dGVfbGVuZ3RoOworCWR1a19zbWFsbF91aW50X3QgY29weV9tb2RlOworCisJLyogWFhYOiBU aGUgc2FtZSBjb3B5IGhlbHBlcnMgY291bGQgYmUgc2hhcmVkIHdpdGggYXQgbGVhc3Qgc29tZQor CSAqIGJ1ZmZlciBmdW5jdGlvbnMuCisJICovCisKKwlkdWtfcmVxdWlyZV9jb25zdHJ1Y3Rvcl9j YWxsKHRocik7CisKKwkvKiBXZSBjb3VsZCBmaXQgYnVpbHQtaW4gaW5kZXggaW50byBtYWdpYyBi dXQgdGhhdCdkIG1ha2UgdGhlIG1hZ2ljCisJICogbnVtYmVyIGRlcGVuZGVudCBvbiBidWlsdC1p biBudW1iZXJpbmcgKGdlbmJ1aWx0aW5zLnB5IGRvZXNuJ3QKKwkgKiBoYW5kbGUgdGhhdCB5ZXQp LiAgU28gbWFwIGJvdGggY2xhc3MgYW5kIHByb3RvdHlwZSBmcm9tIHRoZQorCSAqIGVsZW1lbnQg dHlwZS4KKwkgKi8KKwltYWdpYyA9IChkdWtfc21hbGxfdWludF90KSBkdWtfZ2V0X2N1cnJlbnRf bWFnaWModGhyKTsKKwlzaGlmdCA9IG1hZ2ljICYgMHgwM1U7ICAgICAgICAgICAgICAgLyogYml0 cyAwLi4uMTogc2hpZnQgKi8KKwllbGVtX3R5cGUgPSAobWFnaWMgPj4gMikgJiAweDBmVTsgICAg LyogYml0cyAyLi4uNTogdHlwZSAqLworCWVsZW1fc2l6ZSA9IDFVIDw8IHNoaWZ0OworCWFsaWdu X21hc2sgPSBlbGVtX3NpemUgLSAxOworCURVS19BU1NFUlQoZWxlbV90eXBlIDwgc2l6ZW9mKGR1 a19fYnVmZmVyX3Byb3RvX2Zyb21fZWxlbXR5cGUpIC8gc2l6ZW9mKGR1a191aW50OF90KSk7CisJ cHJvdG9fYmlkeCA9IGR1a19fYnVmZmVyX3Byb3RvX2Zyb21fZWxlbXR5cGVbZWxlbV90eXBlXTsK KwlEVUtfQVNTRVJUKHByb3RvX2JpZHggPCBEVUtfTlVNX0JVSUxUSU5TKTsKKwlEVUtfQVNTRVJU KGVsZW1fdHlwZSA8IHNpemVvZihkdWtfX2J1ZmZlcl9jbGFzc19mcm9tX2VsZW10eXBlKSAvIHNp emVvZihkdWtfdWludDhfdCkpOworCWNsYXNzX251bSA9IGR1a19fYnVmZmVyX2NsYXNzX2Zyb21f ZWxlbXR5cGVbZWxlbV90eXBlXTsKKworCURVS19ERChEVUtfRERQUklOVCgidHlwZWRhcnJheSBj b25zdHJ1Y3RvciwgbWFnaWM9JWQsIHNoaWZ0PSVkLCBlbGVtX3R5cGU9JWQsICIKKwkgICAgICAg ICAgICAgICAgICAgImVsZW1fc2l6ZT0lZCwgcHJvdG9fYmlkeD0lZCwgY2xhc3NfbnVtPSVkIiwK KwkgICAgICAgICAgICAgICAgICAgKGludCkgbWFnaWMsIChpbnQpIHNoaWZ0LCAoaW50KSBlbGVt X3R5cGUsIChpbnQpIGVsZW1fc2l6ZSwKKwkgICAgICAgICAgICAgICAgICAgKGludCkgcHJvdG9f YmlkeCwgKGludCkgY2xhc3NfbnVtKSk7CisKKwkvKiBBcmd1bWVudCB2YXJpYW50cy4gIFdoZW4g dGhlIGFyZ3VtZW50IGlzIGFuIEFycmF5QnVmZmVyIGEgdmlldyB0bworCSAqIHRoZSBzYW1lIGJ1 ZmZlciBpcyBjcmVhdGVkOyBvdGhlcndpc2UgYSBuZXcgQXJyYXlCdWZmZXIgaXMgYWx3YXlzCisJ ICogY3JlYXRlZC4KKwkgKi8KKworCS8qIFhYWDogaW5pdGlhbCBpdGVyYXRpb24gdG8gdHJlYXQg YSBwbGFpbiBidWZmZXIgbGlrZSBhbiBBcnJheUJ1ZmZlcjoKKwkgKiBjb2VyY2UgdG8gYW4gQXJy YXlCdWZmZXIgb2JqZWN0IGFuZCB1c2UgdGhhdCBhcyAuYnVmZmVyLiAgVGhlIHVuZGVybHlpbmcK KwkgKiBidWZmZXIgd2lsbCBiZSB0aGUgc2FtZSBidXQgcmVzdWx0IC5idWZmZXIgIT09IGlucHV0 UGxhaW5CdWZmZXIuCisJICovCisJZHVrX2hidWZvYmpfcHJvbW90ZV9wbGFpbih0aHIsIDApOwor CisJdHYgPSBkdWtfZ2V0X3R2YWwodGhyLCAwKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOyAg LyogYXJnIGNvdW50ICovCisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJaF9vYmog PSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJRFVLX0FTU0VSVChoX29iaiAhPSBOVUxMKTsK KworCQlpZiAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoX29iaikgPT0gRFVLX0hPQkpF Q1RfQ0xBU1NfQVJSQVlCVUZGRVIpIHsKKwkJCS8qIEFycmF5QnVmZmVyOiB1bmxpa2UgYW55IG90 aGVyIGFyZ3VtZW50IHZhcmlhbnQsIGNyZWF0ZQorCQkJICogYSB2aWV3IGludG8gdGhlIGV4aXN0 aW5nIGJ1ZmZlci4KKwkJCSAqLworCisJCQlkdWtfaW50X3QgYnl0ZV9vZmZzZXRfc2lnbmVkOwor CQkJZHVrX3VpbnRfdCBieXRlX29mZnNldDsKKworCQkJaF9idWZhcmcgPSAoZHVrX2hidWZvYmog KikgaF9vYmo7CisKKwkJCWJ5dGVfb2Zmc2V0X3NpZ25lZCA9IGR1a190b19pbnQodGhyLCAxKTsK KwkJCWlmIChieXRlX29mZnNldF9zaWduZWQgPCAwKSB7CisJCQkJZ290byBmYWlsX2FyZ3VtZW50 czsKKwkJCX0KKwkJCWJ5dGVfb2Zmc2V0ID0gKGR1a191aW50X3QpIGJ5dGVfb2Zmc2V0X3NpZ25l ZDsKKwkJCWlmIChieXRlX29mZnNldCA+IGhfYnVmYXJnLT5sZW5ndGggfHwKKwkJCSAgICAoYnl0 ZV9vZmZzZXQgJiBhbGlnbl9tYXNrKSAhPSAwKSB7CisJCQkJLyogTXVzdCBiZSA+PSAwIGFuZCBt dWx0aXBsZSBvZiBlbGVtZW50IHNpemUuICovCisJCQkJZ290byBmYWlsX2FyZ3VtZW50czsKKwkJ CX0KKwkJCWlmIChkdWtfaXNfdW5kZWZpbmVkKHRociwgMikpIHsKKwkJCQlEVUtfQVNTRVJUKGhf YnVmYXJnLT5sZW5ndGggPj0gYnl0ZV9vZmZzZXQpOworCQkJCWJ5dGVfbGVuZ3RoID0gaF9idWZh cmctPmxlbmd0aCAtIGJ5dGVfb2Zmc2V0OworCQkJCWlmICgoYnl0ZV9sZW5ndGggJiBhbGlnbl9t YXNrKSAhPSAwKSB7CisJCQkJCS8qIE11c3QgYmUgZWxlbWVudCBzaXplIG11bHRpcGxlIGZyb20K KwkJCQkJICogc3RhcnQgb2Zmc2V0IHRvIGVuZCBvZiBidWZmZXIuCisJCQkJCSAqLworCQkJCQln b3RvIGZhaWxfYXJndW1lbnRzOworCQkJCX0KKwkJCQllbGVtX2xlbmd0aCA9IChieXRlX2xlbmd0 aCA+PiBzaGlmdCk7CisJCQl9IGVsc2UgeworCQkJCWVsZW1fbGVuZ3RoX3NpZ25lZCA9IGR1a190 b19pbnQodGhyLCAyKTsKKwkJCQlpZiAoZWxlbV9sZW5ndGhfc2lnbmVkIDwgMCkgeworCQkJCQln b3RvIGZhaWxfYXJndW1lbnRzOworCQkJCX0KKwkJCQllbGVtX2xlbmd0aCA9IChkdWtfdWludF90 KSBlbGVtX2xlbmd0aF9zaWduZWQ7CisJCQkJYnl0ZV9sZW5ndGggPSBlbGVtX2xlbmd0aCA8PCBz aGlmdDsKKwkJCQlpZiAoKGJ5dGVfbGVuZ3RoID4+IHNoaWZ0KSAhPSBlbGVtX2xlbmd0aCkgewor CQkJCQkvKiBCeXRlIGxlbmd0aCB3b3VsZCBvdmVyZmxvdy4gKi8KKwkJCQkJLyogWFhYOiBlYXNp ZXIgY2hlY2sgd2l0aCBsZXNzIGNvZGU/ICovCisJCQkJCWdvdG8gZmFpbF9hcmd1bWVudHM7CisJ CQkJfQorCQkJCURVS19BU1NFUlQoaF9idWZhcmctPmxlbmd0aCA+PSBieXRlX29mZnNldCk7CisJ CQkJaWYgKGJ5dGVfbGVuZ3RoID4gaF9idWZhcmctPmxlbmd0aCAtIGJ5dGVfb2Zmc2V0KSB7CisJ CQkJCS8qIE5vdCBlbm91Z2ggZGF0YS4gKi8KKwkJCQkJZ290byBmYWlsX2FyZ3VtZW50czsKKwkJ CQl9CisJCQl9CisJCQlEVUtfVU5SRUYoZWxlbV9sZW5ndGgpOworCQkJRFVLX0FTU0VSVF9ESVNB QkxFKGJ5dGVfb2Zmc2V0ID49IDApOworCQkJRFVLX0FTU0VSVChieXRlX29mZnNldCA8PSBoX2J1 ZmFyZy0+bGVuZ3RoKTsKKwkJCURVS19BU1NFUlRfRElTQUJMRShieXRlX2xlbmd0aCA+PSAwKTsK KwkJCURVS19BU1NFUlQoYnl0ZV9vZmZzZXQgKyBieXRlX2xlbmd0aCA8PSBoX2J1ZmFyZy0+bGVu Z3RoKTsKKwkJCURVS19BU1NFUlQoKGVsZW1fbGVuZ3RoIDw8IHNoaWZ0KSA9PSBieXRlX2xlbmd0 aCk7CisKKwkJCWhfYnVmb2JqID0gZHVrX3B1c2hfYnVmb2JqX3Jhdyh0aHIsCisJCQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkJ CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0JVRk9CSiB8 CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNf RkxBR1MoY2xhc3NfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVr X3NtYWxsX2ludF90KSBwcm90b19iaWR4KTsKKwkJCWhfdmFsID0gaF9idWZhcmctPmJ1ZjsKKwkJ CWlmIChoX3ZhbCA9PSBOVUxMKSB7CisJCQkJRFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX0FSR1Mo dGhyKTsKKwkJCX0KKwkJCWhfYnVmb2JqLT5idWYgPSBoX3ZhbDsKKwkJCURVS19IQlVGRkVSX0lO Q1JFRih0aHIsIGhfdmFsKTsKKwkJCWhfYnVmb2JqLT5vZmZzZXQgPSBoX2J1ZmFyZy0+b2Zmc2V0 ICsgYnl0ZV9vZmZzZXQ7CisJCQloX2J1Zm9iai0+bGVuZ3RoID0gYnl0ZV9sZW5ndGg7CisJCQlo X2J1Zm9iai0+c2hpZnQgPSAoZHVrX3VpbnQ4X3QpIHNoaWZ0OworCQkJaF9idWZvYmotPmVsZW1f dHlwZSA9IChkdWtfdWludDhfdCkgZWxlbV90eXBlOworCQkJaF9idWZvYmotPmlzX3R5cGVkYXJy YXkgPSAxOworCQkJRFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhfYnVmb2JqKTsKKworCQkJLyog U2V0IC5idWZmZXIgdG8gdGhlIGFyZ3VtZW50IEFycmF5QnVmZmVyLiAqLworCQkJRFVLX0FTU0VS VChoX2J1Zm9iai0+YnVmX3Byb3AgPT0gTlVMTCk7CisJCQloX2J1Zm9iai0+YnVmX3Byb3AgPSAo ZHVrX2hvYmplY3QgKikgaF9idWZhcmc7CisJCQlEVUtfQVNTRVJUKGhfYnVmYXJnICE9IE5VTEwp OworCQkJRFVLX0hCVUZPQkpfSU5DUkVGKHRociwgaF9idWZhcmcpOworCQkJcmV0dXJuIDE7CisJ CX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfQlVGT0JKKGhfb2JqKSkgeworCQkJLyogVHlwZWRB cnJheSAob3Igb3RoZXIgbm9uLUFycmF5QnVmZmVyIGR1a19oYnVmb2JqKS4KKwkJCSAqIENvbmNl cHR1YWxseSBzYW1lIGJlaGF2aW9yIGFzIGZvciBhbiBBcnJheS1saWtlIGFyZ3VtZW50LAorCQkJ ICogd2l0aCBhIGZldyBmYXN0IHBhdGhzLgorCQkJICovCisKKwkJCWhfYnVmYXJnID0gKGR1a19o YnVmb2JqICopIGhfb2JqOworCQkJRFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhfYnVmYXJnKTsK KwkJCWVsZW1fbGVuZ3RoX3NpZ25lZCA9IChkdWtfaW50X3QpIChoX2J1ZmFyZy0+bGVuZ3RoID4+ IGhfYnVmYXJnLT5zaGlmdCk7CisJCQlpZiAoaF9idWZhcmctPmJ1ZiA9PSBOVUxMKSB7CisJCQkJ RFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwkJCX0KKworCQkJLyogU2VsZWN0 IGNvcHkgbW9kZS4gIE11c3QgdGFrZSBpbnRvIGFjY291bnQgZWxlbWVudAorCQkJICogY29tcGF0 aWJpbGl0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIHVuZGVybHlpbmcgc291cmNlCisJCQkgKiBidWZm ZXIuCisJCQkgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInNlbGVjdGluZyBjb3B5IG1v ZGUgZm9yIGJ1Zm9iaiBhcmcsICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJzcmMgYnl0ZV9s ZW5ndGg9JWxkLCBzcmMgc2hpZnQ9JWQsICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJzcmMv ZHN0IGVsZW1fbGVuZ3RoPSVsZDsgIgorCQkJICAgICAgICAgICAgICAgICAgICAgImRzdCBzaGlm dD0lZCAtPiBkc3QgYnl0ZV9sZW5ndGg9JWxkIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBoX2J1ZmFyZy0+bGVuZ3RoLCAoaW50KSBoX2J1ZmFyZy0+c2hpZnQsCisJCQkgICAgICAg ICAgICAgICAgICAgICAobG9uZykgZWxlbV9sZW5ndGhfc2lnbmVkLCAoaW50KSBzaGlmdCwKKwkJ CSAgICAgICAgICAgICAgICAgICAgIChsb25nKSAoZWxlbV9sZW5ndGhfc2lnbmVkIDw8IHNoaWZ0 KSkpOworCisJCQljb3B5X21vZGUgPSAyOyAgLyogZGVmYXVsdCBpcyBleHBsaWNpdCBpbmRleCBy ZWFkL3dyaXRlIGNvcHkgKi8KKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCQkJ LyogV2l0aCBhIHNpemUgb3B0aW1pemVkIGJ1aWxkIGNvcHlfbW9kZSAyIGlzIGVub3VnaC4KKwkJ CSAqIE1vZGVzIDAgYW5kIDEgYXJlIGZhc3RlciBidXQgY29uY2VwdHVhbGx5IHRoZSBzYW1lLgor CQkJICovCisJCQlEVUtfQVNTRVJUKGVsZW1fdHlwZSA8IHNpemVvZihkdWtfX2J1ZmZlcl9lbGVt dHlwZV9jb3B5X2NvbXBhdGlibGUpIC8gc2l6ZW9mKGR1a191aW50MTZfdCkpOworCQkJaWYgKERV S19IQlVGT0JKX1ZBTElEX1NMSUNFKGhfYnVmYXJnKSkgeworCQkJCWlmICgoZHVrX19idWZmZXJf ZWxlbXR5cGVfY29weV9jb21wYXRpYmxlW2VsZW1fdHlwZV0gJiAoMSA8PCBoX2J1ZmFyZy0+ZWxl bV90eXBlKSkgIT0gMCkgeworCQkJCQlEVUtfREREKERVS19ERERQUklOVCgic291cmNlL3Rhcmdl dCBhcmUgY29weSBjb21wYXRpYmxlLCBtZW1jcHkiKSk7CisJCQkJCURVS19BU1NFUlQoc2hpZnQg PT0gaF9idWZhcmctPnNoaWZ0KTsgIC8qIGJ5dGUgc2l6ZXMgd2lsbCBtYXRjaCAqLworCQkJCQlj b3B5X21vZGUgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJz b3VyY2UvdGFyZ2V0IG5vdCBjb3B5IGNvbXBhdGlibGUgYnV0IHZhbGlkLCBmYXN0IGNvcHkiKSk7 CisJCQkJCWNvcHlfbW9kZSA9IDE7CisJCQkJfQorCQkJfQorI2VuZGlmICAvKiAhRFVLX1VTRV9Q UkVGRVJfU0laRSAqLworCQl9IGVsc2UgeworCQkJLyogQXJyYXkgb3IgQXJyYXktbGlrZSAqLwor CQkJZWxlbV9sZW5ndGhfc2lnbmVkID0gKGR1a19pbnRfdCkgZHVrX2dldF9sZW5ndGgodGhyLCAw KTsKKwkJCWNvcHlfbW9kZSA9IDI7CisJCX0KKwl9IGVsc2UgeworCQkvKiBOb24tb2JqZWN0IGFy Z3VtZW50IGlzIHNpbXBseSBpbnQgY29lcmNlZCwgbWF0Y2hlcworCQkgKiBWOCBiZWhhdmlvciAo ZXhjZXB0IGZvciAibnVsbCIsIHdoaWNoIHdlIGNvZXJjZSB0bworCQkgKiAwIGJ1dCBWOCBUeXBl RXJyb3JzKS4KKwkJICovCisJCWVsZW1fbGVuZ3RoX3NpZ25lZCA9IGR1a190b19pbnQodGhyLCAw KTsKKwkJY29weV9tb2RlID0gMzsKKwl9CisJaWYgKGVsZW1fbGVuZ3RoX3NpZ25lZCA8IDApIHsK KwkJZ290byBmYWlsX2FyZ3VtZW50czsKKwl9CisJZWxlbV9sZW5ndGggPSAoZHVrX3VpbnRfdCkg ZWxlbV9sZW5ndGhfc2lnbmVkOworCWJ5dGVfbGVuZ3RoID0gKGR1a191aW50X3QpIChlbGVtX2xl bmd0aCA8PCBzaGlmdCk7CisJaWYgKChieXRlX2xlbmd0aCA+PiBzaGlmdCkgIT0gZWxlbV9sZW5n dGgpIHsKKwkJLyogQnl0ZSBsZW5ndGggd291bGQgb3ZlcmZsb3cuICovCisJCS8qIFhYWDogZWFz aWVyIGNoZWNrIHdpdGggbGVzcyBjb2RlPyAqLworCQlnb3RvIGZhaWxfYXJndW1lbnRzOworCX0K KworCURVS19EREQoRFVLX0RERFBSSU5UKCJlbGVtX2xlbmd0aD0lbGQsIGJ5dGVfbGVuZ3RoPSVs ZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVsZW1fbGVuZ3RoLCAobG9uZykgYnl0 ZV9sZW5ndGgpKTsKKworCS8qIEFycmF5QnVmZmVyIGFyZ3VtZW50IGlzIGhhbmRsZWQgc3BlY2lh bGx5IGFib3ZlOyB0aGUgcmVzdCBvZiB0aGUKKwkgKiBhcmd1bWVudCB2YXJpYW50cyBhcmUgaGFu ZGxlZCBieSBzaGFyZWQgY29kZSBiZWxvdy4KKwkgKgorCSAqIEFycmF5QnVmZmVyIGluIGhfYnVm b2JqLT5idWZfcHJvcCBpcyBpbnRlbnRpb25hbGx5IGxlZnQgdW5zZXQuCisJICogSXQgd2lsbCBi ZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlIC5idWZmZXIgYWNjZXNzb3Igb24KKwkgKiBm aXJzdCBhY2Nlc3MuCisJICovCisKKwkvKiBQdXNoIHRoZSByZXN1bHRpbmcgdmlldyBvYmplY3Qg b24gdG9wIG9mIGEgcGxhaW4gZml4ZWQgYnVmZmVyLiAqLworCSh2b2lkKSBkdWtfcHVzaF9maXhl ZF9idWZmZXIodGhyLCBieXRlX2xlbmd0aCk7CisJaF92YWwgPSBkdWtfa25vd25faGJ1ZmZlcih0 aHIsIC0xKTsKKwlEVUtfQVNTRVJUKGhfdmFsICE9IE5VTEwpOworCisJaF9idWZvYmogPSBkdWtf cHVzaF9idWZvYmpfcmF3KHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hPQkpFQ1RfRkxBR19CVUZPQkogfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhjbGFzc19udW0pLAorCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZHVrX3NtYWxsX2ludF90KSBwcm90b19iaWR4KTsKKworCWhf YnVmb2JqLT5idWYgPSBoX3ZhbDsKKwlEVUtfSEJVRkZFUl9JTkNSRUYodGhyLCBoX3ZhbCk7CisJ RFVLX0FTU0VSVChoX2J1Zm9iai0+b2Zmc2V0ID09IDApOworCWhfYnVmb2JqLT5sZW5ndGggPSBi eXRlX2xlbmd0aDsKKwloX2J1Zm9iai0+c2hpZnQgPSAoZHVrX3VpbnQ4X3QpIHNoaWZ0OworCWhf YnVmb2JqLT5lbGVtX3R5cGUgPSAoZHVrX3VpbnQ4X3QpIGVsZW1fdHlwZTsKKwloX2J1Zm9iai0+ aXNfdHlwZWRhcnJheSA9IDE7CisJRFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhfYnVmb2JqKTsK KworCS8qIENvcHkgdmFsdWVzLCB0aGUgY29weSBtZXRob2QgZGVwZW5kcyBvbiB0aGUgYXJndW1l bnRzLgorCSAqCisJICogQ29weSBtb2RlIGRlY2lzaW9uIG1heSBkZXBlbmQgb24gdGhlIHZhbGlk aXR5IG9mIHRoZSB1bmRlcmx5aW5nCisJICogYnVmZmVyIG9mIHRoZSBzb3VyY2UgYXJndW1lbnQ7 IHRoZXJlIG11c3QgYmUgbm8gaGFybWZ1bCBzaWRlIGVmZmVjdHMKKwkgKiBmcm9tIHRoZXJlIHRv IGhlcmUgZm9yIGNvcHlfbW9kZSB0byBzdGlsbCBiZSB2YWxpZC4KKwkgKi8KKwlEVUtfREREKERV S19ERERQUklOVCgiY29weSBtb2RlOiAlZCIsIChpbnQpIGNvcHlfbW9kZSkpOworCXN3aXRjaCAo Y29weV9tb2RlKSB7CisJCS8qIENvcHkgbW9kZXMgMCBhbmQgMSBjYW4gYmUgb21pdHRlZCBpbiBz aXplIG9wdGltaXplZCBidWlsZCwKKwkJICogY29weSBtb2RlIDIgaGFuZGxlcyB0aGVtIChidXQg bW9yZSBzbG93bHkpLgorCQkgKi8KKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQor CWNhc2UgMDogeworCQkvKiBVc2UgYnl0ZSBjb3B5LiAqLworCisJCWR1a191aW50OF90ICpwX3Ny YzsKKwkJZHVrX3VpbnQ4X3QgKnBfZHN0OworCisJCURVS19BU1NFUlQoaF9idWZvYmogIT0gTlVM TCk7CisJCURVS19BU1NFUlQoaF9idWZvYmotPmJ1ZiAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChE VUtfSEJVRk9CSl9WQUxJRF9TTElDRShoX2J1Zm9iaikpOworCQlEVUtfQVNTRVJUKGhfYnVmYXJn ICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKGhfYnVmYXJnLT5idWYgIT0gTlVMTCk7CisJCURVS19B U1NFUlQoRFVLX0hCVUZPQkpfVkFMSURfU0xJQ0UoaF9idWZhcmcpKTsKKworCQlwX2RzdCA9IERV S19IQlVGT0JKX0dFVF9TTElDRV9CQVNFKHRoci0+aGVhcCwgaF9idWZvYmopOworCQlwX3NyYyA9 IERVS19IQlVGT0JKX0dFVF9TTElDRV9CQVNFKHRoci0+aGVhcCwgaF9idWZhcmcpOworCisJCURV S19EREQoRFVLX0RERFBSSU5UKCJ1c2luZyBtZW1jcHk6IHBfc3JjPSVwLCBwX2RzdD0lcCwgYnl0 ZV9sZW5ndGg9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgcF9zcmMsICh2 b2lkICopIHBfZHN0LCAobG9uZykgYnl0ZV9sZW5ndGgpKTsKKworCQlkdWtfbWVtY3B5X3Vuc2Fm ZSgodm9pZCAqKSBwX2RzdCwgKGNvbnN0IHZvaWQgKikgcF9zcmMsIChzaXplX3QpIGJ5dGVfbGVu Z3RoKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgMTogeworCQkvKiBDb3B5IHZhbHVlcyB0aHJvdWdo IGRpcmVjdCB2YWxpZGF0ZWQgcmVhZHMgYW5kIHdyaXRlcy4gKi8KKworCQlkdWtfc21hbGxfdWlu dF90IHNyY19lbGVtX3NpemU7CisJCWR1a19zbWFsbF91aW50X3QgZHN0X2VsZW1fc2l6ZTsKKwkJ ZHVrX3VpbnQ4X3QgKnBfc3JjOworCQlkdWtfdWludDhfdCAqcF9zcmNfZW5kOworCQlkdWtfdWlu dDhfdCAqcF9kc3Q7CisKKwkJRFVLX0FTU0VSVChoX2J1Zm9iaiAhPSBOVUxMKTsKKwkJRFVLX0FT U0VSVChoX2J1Zm9iai0+YnVmICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKERVS19IQlVGT0JKX1ZB TElEX1NMSUNFKGhfYnVmb2JqKSk7CisJCURVS19BU1NFUlQoaF9idWZhcmcgIT0gTlVMTCk7CisJ CURVS19BU1NFUlQoaF9idWZhcmctPmJ1ZiAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChEVUtfSEJV Rk9CSl9WQUxJRF9TTElDRShoX2J1ZmFyZykpOworCisJCXNyY19lbGVtX3NpemUgPSAoZHVrX3Nt YWxsX3VpbnRfdCkgKDFVIDw8IGhfYnVmYXJnLT5zaGlmdCk7CisJCWRzdF9lbGVtX3NpemUgPSBl bGVtX3NpemU7CisKKwkJcF9zcmMgPSBEVUtfSEJVRk9CSl9HRVRfU0xJQ0VfQkFTRSh0aHItPmhl YXAsIGhfYnVmYXJnKTsKKwkJcF9kc3QgPSBEVUtfSEJVRk9CSl9HRVRfU0xJQ0VfQkFTRSh0aHIt PmhlYXAsIGhfYnVmb2JqKTsKKwkJcF9zcmNfZW5kID0gcF9zcmMgKyBoX2J1ZmFyZy0+bGVuZ3Ro OworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ1c2luZyBmYXN0IGNvcHk6IHBfc3JjPSVwLCBw X3NyY19lbmQ9JXAsIHBfZHN0PSVwLCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJzcmNfZWxl bV9zaXplPSVkLCBkc3RfZWxlbV9zaXplPSVkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKHZv aWQgKikgcF9zcmMsICh2b2lkICopIHBfc3JjX2VuZCwgKHZvaWQgKikgcF9kc3QsCisJCSAgICAg ICAgICAgICAgICAgICAgIChpbnQpIHNyY19lbGVtX3NpemUsIChpbnQpIGRzdF9lbGVtX3NpemUp KTsKKworCQl3aGlsZSAocF9zcmMgIT0gcF9zcmNfZW5kKSB7CisJCQlEVUtfREREKERVS19ERERQ UklOVCgiZmFzdCBwYXRoIHBlciBlbGVtZW50IGNvcHkgbG9vcDogIgorCQkJICAgICAgICAgICAg ICAgICAgICAgInBfc3JjPSVwLCBwX3NyY19lbmQ9JXAsIHBfZHN0PSVwIiwKKwkJCSAgICAgICAg ICAgICAgICAgICAgICh2b2lkICopIHBfc3JjLCAodm9pZCAqKSBwX3NyY19lbmQsICh2b2lkICop IHBfZHN0KSk7CisJCQkvKiBBIHZhbGlkYXRlZCByZWFkKCkgaXMgYWx3YXlzIGEgbnVtYmVyLCBz byBpdCdzIHdyaXRlIGNvZXJjaW9uCisJCQkgKiBpcyBhbHdheXMgc2lkZSBlZmZlY3QgZnJlZSBh biB3b24ndCBpbnZhbGlkYXRlIHBvaW50ZXJzIGV0Yy4KKwkJCSAqLworCQkJZHVrX2hidWZvYmpf cHVzaF92YWxpZGF0ZWRfcmVhZCh0aHIsIGhfYnVmYXJnLCBwX3NyYywgc3JjX2VsZW1fc2l6ZSk7 CisJCQlkdWtfaGJ1Zm9ial92YWxpZGF0ZWRfd3JpdGUodGhyLCBoX2J1Zm9iaiwgcF9kc3QsIGRz dF9lbGVtX3NpemUpOworCQkJZHVrX3BvcCh0aHIpOworCQkJcF9zcmMgKz0gc3JjX2VsZW1fc2l6 ZTsKKwkJCXBfZHN0ICs9IGRzdF9lbGVtX3NpemU7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlm ICAvKiAhRFVLX1VTRV9QUkVGRVJfU0laRSAqLworCWNhc2UgMjogeworCQkvKiBDb3B5IHZhbHVl cyBieSBpbmRleCByZWFkcyBhbmQgd3JpdGVzLiAgTGV0IHZpcnR1YWwKKwkJICogcHJvcGVydHkg aGFuZGxpbmcgdGFrZSBjYXJlIG9mIGNvZXJjaW9uLgorCQkgKi8KKwkJZHVrX3VpbnRfdCBpOwor CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ1c2luZyBzbG93IGNvcHkiKSk7CisKKwkJZm9yIChp ID0gMDsgaSA8IGVsZW1fbGVuZ3RoOyBpKyspIHsKKwkJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIs IDAsIChkdWtfdWFycmlkeF90KSBpKTsKKwkJCWR1a19wdXRfcHJvcF9pbmRleCh0aHIsIC0yLCAo ZHVrX3VhcnJpZHhfdCkgaSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJY2FzZSAz OiB7CisJCS8qIE5vIGNvcHksIGxlYXZlIHplcm8gYnl0ZXMgaW4gdGhlIGJ1ZmZlci4gIFRoZXJl J3Mgbm8KKwkJICogYW1iaWd1aXR5IHdpdGggRmxvYXQzMi9GbG9hdDY0IGJlY2F1c2UgemVybyBi eXRlcyBhbHNvCisJCSAqIHJlcHJlc2VudCAwLjAuCisJCSAqLworCisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJ1c2luZyBubyBjb3B5IikpOworCQlicmVhazsKKwl9CisJfQorCisJcmV0dXJuIDE7 CisKKyBmYWlsX2FyZ3VtZW50czoKKwlEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElEX0FSR1ModGhy KTsKK30KKyNlbHNlICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisvKiBXaGVu IGJ1ZmZlcm9iamVjdCBzdXBwb3J0IGlzIGRpc2FibGVkLCBuZXcgVWludDhBcnJheSgpIGNvdWxk IHN0aWxsIGJlCisgKiBzdXBwb3J0ZWQgdG8gY3JlYXRlIGEgcGxhaW4gZml4ZWQgYnVmZmVyLiAg RGlzYWJsZWQgZm9yIG5vdy4KKyAqLworI2lmIDAKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVr X2JpX3R5cGVkYXJyYXlfY29uc3RydWN0b3IoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pbnRf dCBlbGVtX2xlbmd0aF9zaWduZWQ7CisJZHVrX3VpbnRfdCBieXRlX2xlbmd0aDsKKworCS8qIFhY WDogVGhlIHNhbWUgY29weSBoZWxwZXJzIGNvdWxkIGJlIHNoYXJlZCB3aXRoIGF0IGxlYXN0IHNv bWUKKwkgKiBidWZmZXIgZnVuY3Rpb25zLgorCSAqLworCisJZHVrX3JlcXVpcmVfY29uc3RydWN0 b3JfY2FsbCh0aHIpOworCisJZWxlbV9sZW5ndGhfc2lnbmVkID0gZHVrX3JlcXVpcmVfaW50KHRo ciwgMCk7CisJaWYgKGVsZW1fbGVuZ3RoX3NpZ25lZCA8IDApIHsKKwkJZ290byBmYWlsX2FyZ3Vt ZW50czsKKwl9CisJYnl0ZV9sZW5ndGggPSAoZHVrX3VpbnRfdCkgZWxlbV9sZW5ndGhfc2lnbmVk OworCisJKHZvaWQpIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl96ZXJvKHRociwgKGR1a19zaXplX3Qp IGJ5dGVfbGVuZ3RoKTsKKwlyZXR1cm4gMTsKKworIGZhaWxfYXJndW1lbnRzOgorCURVS19EQ0VS Uk9SX1JBTkdFX0lOVkFMSURfQVJHUyh0aHIpOworfQorI2VuZGlmICAvKiAwICovCisjZW5kaWYg IC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworI2lmIGRlZmluZWQoRFVLX1VT RV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2Rh dGF2aWV3X2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaGJ1Zm9iaiAqaF9i dWZhcmc7CisJZHVrX2hidWZvYmogKmhfYnVmb2JqOworCWR1a19oYnVmZmVyICpoX3ZhbDsKKwlk dWtfdWludF90IG9mZnNldDsKKwlkdWtfdWludF90IGxlbmd0aDsKKworCWR1a19yZXF1aXJlX2Nv bnN0cnVjdG9yX2NhbGwodGhyKTsKKworCWhfYnVmYXJnID0gZHVrX19yZXF1aXJlX2J1Zm9ial92 YWx1ZSh0aHIsIDApOworCURVS19BU1NFUlQoaF9idWZhcmcgIT0gTlVMTCk7CisJaWYgKERVS19I T0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoKGR1a19ob2JqZWN0ICopIGhfYnVmYXJnKSAhPSBEVUtf SE9CSkVDVF9DTEFTU19BUlJBWUJVRkZFUikgeworCQlEVUtfRENFUlJPUl9UWVBFX0lOVkFMSURf QVJHUyh0aHIpOworCX0KKworCWR1a19fcmVzb2x2ZV9vZmZzZXRfb3B0X2xlbmd0aCh0aHIsIGhf YnVmYXJnLCAxLCAyLCAmb2Zmc2V0LCAmbGVuZ3RoLCAxIC8qdGhyb3dfZmxhZyovKTsKKwlEVUtf QVNTRVJUKG9mZnNldCA8PSBoX2J1ZmFyZy0+bGVuZ3RoKTsKKwlEVUtfQVNTRVJUKG9mZnNldCAr IGxlbmd0aCA8PSBoX2J1ZmFyZy0+bGVuZ3RoKTsKKworCWhfYnVmb2JqID0gZHVrX3B1c2hfYnVm b2JqX3Jhdyh0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNU X0ZMQUdfRVhURU5TSUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I T0JKRUNUX0ZMQUdfQlVGT0JKIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfREFUQVZJRVcpLAorCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfQklEWF9EQVRBVklFV19QUk9UT1RZUEUp OworCisJaF92YWwgPSBoX2J1ZmFyZy0+YnVmOworCWlmIChoX3ZhbCA9PSBOVUxMKSB7CisJCURV S19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJfQorCWhfYnVmb2JqLT5idWYgPSBo X3ZhbDsKKwlEVUtfSEJVRkZFUl9JTkNSRUYodGhyLCBoX3ZhbCk7CisJaF9idWZvYmotPm9mZnNl dCA9IGhfYnVmYXJnLT5vZmZzZXQgKyBvZmZzZXQ7CisJaF9idWZvYmotPmxlbmd0aCA9IGxlbmd0 aDsKKwlEVUtfQVNTRVJUKGhfYnVmb2JqLT5zaGlmdCA9PSAwKTsKKwlEVUtfQVNTRVJUKGhfYnVm b2JqLT5lbGVtX3R5cGUgPT0gRFVLX0hCVUZPQkpfRUxFTV9VSU5UOCk7CisJRFVLX0FTU0VSVCho X2J1Zm9iai0+aXNfdHlwZWRhcnJheSA9PSAwKTsKKworCURVS19BU1NFUlQoaF9idWZvYmotPmJ1 Zl9wcm9wID09IE5VTEwpOworCWhfYnVmb2JqLT5idWZfcHJvcCA9IChkdWtfaG9iamVjdCAqKSBo X2J1ZmFyZzsKKwlEVUtfQVNTRVJUKGhfYnVmYXJnICE9IE5VTEwpOworCURVS19IQlVGT0JKX0lO Q1JFRih0aHIsIGhfYnVmYXJnKTsKKworCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChoX2J1Zm9i aik7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBP UlQgKi8KKworLyoKKyAqICBBcnJheUJ1ZmZlci5pc1ZpZXcoKQorICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1 a19iaV9hcnJheWJ1ZmZlcl9pc3ZpZXcoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19ob2JqZWN0 ICpoX29iajsKKwlkdWtfYm9vbF90IHJldCA9IDA7CisKKwlpZiAoZHVrX2lzX2J1ZmZlcih0aHIs IDApKSB7CisJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJaF9vYmogPSBkdWtfZ2V0X2hvYmplY3Qo dGhyLCAwKTsKKwkJaWYgKGhfb2JqICE9IE5VTEwgJiYgRFVLX0hPQkpFQ1RfSVNfQlVGT0JKKGhf b2JqKSkgeworCQkJLyogRGF0YVZpZXcgbmVlZHMgc3BlY2lhbCBjYXNpbmc6IEFycmF5QnVmZmVy LmlzVmlldygpIGlzCisJCQkgKiB0cnVlLCBidXQgLT5pc190eXBlZGFycmF5IGlzIDAuCisJCQkg Ki8KKwkJCXJldCA9ICgoZHVrX2hidWZvYmogKikgaF9vYmopLT5pc190eXBlZGFycmF5IHx8CisJ CQkgICAgICAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoX29iaikgPT0gRFVLX0hPQkpF Q1RfQ0xBU1NfREFUQVZJRVcpOworCQl9CisJfQorCWR1a19wdXNoX2Jvb2xlYW4odGhyLCByZXQp OworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JU ICovCisKKy8qCisgKiAgVWludDhBcnJheS5hbGxvY1BsYWluKCkKKyAqLworCisjaWYgZGVmaW5l ZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBk dWtfYmlfdWludDhhcnJheV9hbGxvY3BsYWluKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfX2hi dWZvYmpfZml4ZWRfZnJvbV9hcmd2YWx1ZSh0aHIpOworCXJldHVybiAxOworfQorI2VuZGlmICAv KiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisKKy8qCisgKiAgVWludDhBcnJheS5w bGFpbk9mKCkKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JU KQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfdWludDhhcnJheV9wbGFpbm9mKGR1a19o dGhyZWFkICp0aHIpIHsKKwlkdWtfaGJ1Zm9iaiAqaF9idWZvYmo7CisKKyNpZiAhZGVmaW5lZChE VUtfVVNFX1BSRUZFUl9TSVpFKQorCS8qIEF2b2lkIGNodXJuIGlmIGFyZ3VtZW50IGlzIGFscmVh ZHkgYSBwbGFpbiBidWZmZXIuICovCisJaWYgKGR1a19pc19idWZmZXIodGhyLCAwKSkgeworCQly ZXR1cm4gMTsKKwl9CisjZW5kaWYKKworCS8qIFByb21vdGVzIHBsYWluIGJ1ZmZlcnMgdG8gQXJy YXlCdWZmZXJzLCBzbyBmb3IgYSBwbGFpbiBidWZmZXIKKwkgKiBhcmd1bWVudCB3ZSdsbCBjcmVh dGUgYSBwb2ludGxlc3MgdGVtcG9yYXJ5IChidXQgc3RpbGwgd29yaworCSAqIGNvcnJlY3RseSku CisJICovCisJaF9idWZvYmogPSBkdWtfX3JlcXVpcmVfYnVmb2JqX3ZhbHVlKHRociwgMCk7CisJ aWYgKGhfYnVmb2JqLT5idWYgPT0gTlVMTCkgeworCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsK Kwl9IGVsc2UgeworCQlkdWtfcHVzaF9oYnVmZmVyKHRociwgaF9idWZvYmotPmJ1Zik7CisJfQor CXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICov CisKKy8qCisgKiAgTm9kZS5qcyBCdWZmZXI6IHRvU3RyaW5nKFtlbmNvZGluZ10sIFtzdGFydF0s IFtlbmRdKQorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQp CitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX3Rvc3RyaW5nKGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaGJ1Zm9iaiAqaF90aGlzOworCWR1a19pbnRfdCBzdGFy dF9vZmZzZXQsIGVuZF9vZmZzZXQ7CisJZHVrX3VpbnQ4X3QgKmJ1Zl9zbGljZTsKKwlkdWtfc2l6 ZV90IHNsaWNlX2xlbmd0aDsKKworCWhfdGhpcyA9IGR1a19fZ2V0X2J1Zm9ial90aGlzKHRocik7 CisJaWYgKGhfdGhpcyA9PSBOVUxMKSB7CisJCS8qIFhYWDogaGFwcGVucyBlLmcuIHdoZW4gZXZh bHVhdGluZzogU3RyaW5nKEJ1ZmZlci5wcm90b3R5cGUpLiAqLworCQlkdWtfcHVzaF9saXRlcmFs KHRociwgIltvYmplY3QgT2JqZWN0XSIpOworCQlyZXR1cm4gMTsKKwl9CisJRFVLX0FTU0VSVF9I QlVGT0JKX1ZBTElEKGhfdGhpcyk7CisKKwkvKiBJZ25vcmUgZW5jb2RpbmcgZm9yIG5vdy4gKi8K KworCWR1a19fY2xhbXBfc3RhcnRlbmRfbm9uZWdpZHhfbm9zaGlmdCh0aHIsCisJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfaW50X3QpIGhfdGhpcy0+bGVuZ3RoLAor CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qaWR4X3N0YXJ0Ki8sCisJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLyppZHhfZW5kKi8sCisJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydF9vZmZzZXQsCisJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmRfb2Zmc2V0KTsKKworCXNsaWNlX2xl bmd0aCA9IChkdWtfc2l6ZV90KSAoZW5kX29mZnNldCAtIHN0YXJ0X29mZnNldCk7CisJYnVmX3Ns aWNlID0gKGR1a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhyLCBz bGljZV9sZW5ndGgpOyAgLyogYWxsIGJ5dGVzIGluaXRpYWxpemVkIGJlbG93ICovCisJRFVLX0FT U0VSVChidWZfc2xpY2UgIT0gTlVMTCk7CisKKwkvKiBOZXV0ZXJlZCBvciB1bmNvdmVyZWQsIFR5 cGVFcnJvci4gKi8KKwlpZiAoaF90aGlzLT5idWYgPT0gTlVMTCB8fAorCSAgICAhRFVLX0hCVUZP QkpfVkFMSURfQllURU9GRlNFVF9FWENMKGhfdGhpcywgKGR1a19zaXplX3QpIHN0YXJ0X29mZnNl dCArIHNsaWNlX2xlbmd0aCkpIHsKKwkJRFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX0FSR1ModGhy KTsKKwl9CisKKwkvKiBYWFg6IGlkZWFsbHkgd2Ugd291bGRuJ3QgbWFrZSBhIGNvcHkgYnV0IGEg dmlldyBpbnRvIHRoZSBidWZmZXIgZm9yIHRoZQorCSAqIGRlY29kaW5nIHByb2Nlc3MuICBPciB0 aGUgZGVjb2RpbmcgaGVscGVyIGNvdWxkIGJlIGNoYW5nZWQgdG8gYWNjZXB0CisJICogdGhlIHNs aWNlIGluZm8gKGEgYnVmZmVyIHBvaW50ZXIgaXMgTk9UIGEgZ29vZCBhcHByb2FjaCBiZWNhdXNl IGd1YXJhbnRlZWluZworCSAqIGl0cyBzdGFiaWxpdHkgaXMgZGlmZmljdWx0KS4KKwkgKi8KKwor CURVS19BU1NFUlQoRFVLX0hCVUZPQkpfVkFMSURfQllURU9GRlNFVF9FWENMKGhfdGhpcywgKGR1 a19zaXplX3QpIHN0YXJ0X29mZnNldCArIHNsaWNlX2xlbmd0aCkpOworCWR1a19tZW1jcHlfdW5z YWZlKCh2b2lkICopIGJ1Zl9zbGljZSwKKwkgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAq KSAoRFVLX0hCVUZPQkpfR0VUX1NMSUNFX0JBU0UodGhyLT5oZWFwLCBoX3RoaXMpICsgc3RhcnRf b2Zmc2V0KSwKKwkgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBzbGljZV9sZW5ndGgpOworCisJ LyogVXNlIHRoZSBlcXVpdmFsZW50IG9mOiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodGhpcykg dG8gY29udmVydCB0aGUKKwkgKiBzdHJpbmcuICBSZXN1bHQgd2lsbCBiZSB2YWxpZCBVVEYtODsg bm9uLUNFU1UtOCBpbnB1dHMgYXJlIGN1cnJlbnRseQorCSAqIGludGVycHJldGVkIGxvb3NlbHku ICBWYWx1ZSBzdGFjayBjb252ZW50aW9uIGlzIGEgYml0IG9kZCBmb3Igbm93LgorCSAqLworCWR1 a19yZXBsYWNlKHRociwgMCk7CisJZHVrX3NldF90b3AodGhyLCAxKTsKKwlyZXR1cm4gZHVrX3Rl eHRkZWNvZGVyX2RlY29kZV91dGY4X25vZGVqcyh0aHIpOworfQorI2VuZGlmICAvKiBEVUtfVVNF X0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisKKy8qCisgKiAgTm9kZS5qcyBCdWZmZXIucHJvdG90 eXBlOiB0b0pTT04oKQorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NV UFBPUlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX3RvanNv bihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hidWZvYmogKmhfdGhpczsKKwlkdWtfdWludDhf dCAqYnVmOworCWR1a191aW50X3QgaSwgbjsKKwlkdWtfdHZhbCAqdHY7CisKKwloX3RoaXMgPSBk dWtfX3JlcXVpcmVfYnVmb2JqX3RoaXModGhyKTsKKwlEVUtfQVNTRVJUKGhfdGhpcyAhPSBOVUxM KTsKKworCWlmIChoX3RoaXMtPmJ1ZiA9PSBOVUxMIHx8ICFEVUtfSEJVRk9CSl9WQUxJRF9TTElD RShoX3RoaXMpKSB7CisJCS8qIFNlcmlhbGl6ZSB1bmNvdmVyZWQgYmFja2luZyBidWZmZXIgYXMg YSBudWxsOyBkb2Vzbid0CisJCSAqIHJlYWxseSBtYXR0ZXIgYXMgbG9uZyB3ZSdyZSBtZW1vcnkg c2FmZS4KKwkJICovCisJCWR1a19wdXNoX251bGwodGhyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJ ZHVrX3B1c2hfb2JqZWN0KHRocik7CisJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgodGhyLCBEVUtf U1RSSURYX1VDX0JVRkZFUik7CisJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0yLCBE VUtfU1RSSURYX1RZUEUpOworCisJLyogWFhYOiB1bmluaXRpYWxpemVkIHdvdWxkIGJlIE9LICov CisJRFVLX0FTU0VSVF9ESVNBQkxFKChkdWtfc2l6ZV90KSBoX3RoaXMtPmxlbmd0aCA8PSAoZHVr X3NpemVfdCkgRFVLX1VJTlQzMl9NQVgpOworCXR2ID0gZHVrX3B1c2hfaGFycmF5X3dpdGhfc2l6 ZV9vdXRwdHIodGhyLCAoZHVrX3VpbnQzMl90KSBoX3RoaXMtPmxlbmd0aCk7ICAvKiBYWFg6IG5l ZWRzIHJldmlzaW9uIHdpdGggPjRHIGJ1ZmZlcnMgKi8KKworCURVS19BU1NFUlQoaF90aGlzLT5i dWYgIT0gTlVMTCk7CisJYnVmID0gRFVLX0hCVUZPQkpfR0VUX1NMSUNFX0JBU0UodGhyLT5oZWFw LCBoX3RoaXMpOworCWZvciAoaSA9IDAsIG4gPSBoX3RoaXMtPmxlbmd0aDsgaSA8IG47IGkrKykg eworCQlEVUtfVFZBTF9TRVRfVTMyKHR2ICsgaSwgKGR1a191aW50MzJfdCkgYnVmW2ldKTsgIC8q IG5vIG5lZWQgZm9yIGRlY3JlZiBvciBpbmNyZWYgKi8KKwl9CisJZHVrX3B1dF9wcm9wX3N0cmlk eF9zaG9ydCh0aHIsIC0yLCBEVUtfU1RSSURYX0RBVEEpOworCisJcmV0dXJuIDE7Cit9CisjZW5k aWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworLyoKKyAqICBOb2RlLmpz IEJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzKCkKKyAqICBOb2RlLmpzIEJ1ZmZlci5wcm90b3R5cGUu Y29tcGFyZSgpCisgKiAgTm9kZS5qcyBCdWZmZXIuY29tcGFyZSgpCisgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX2J1ZmZlcl9jb21wYXJlX3NoYXJlZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3Nt YWxsX3VpbnRfdCBtYWdpYzsKKwlkdWtfaGJ1Zm9iaiAqaF9idWZhcmcxOworCWR1a19oYnVmb2Jq ICpoX2J1ZmFyZzI7CisJZHVrX3NtYWxsX2ludF90IGNvbXBfcmVzOworCisJLyogWFhYOiBrZWVw IHN1cHBvcnQgZm9yIHBsYWluIGJ1ZmZlcnMgYW5kIG5vbi1Ob2RlLmpzIGJ1ZmZlcnM/ICovCisK KwltYWdpYyA9IChkdWtfc21hbGxfdWludF90KSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKTsK KwlpZiAobWFnaWMgJiAweDAyVSkgeworCQkvKiBTdGF0aWMgY2FsbCBzdHlsZS4gKi8KKwkJaF9i dWZhcmcxID0gZHVrX19yZXF1aXJlX2J1Zm9ial92YWx1ZSh0aHIsIDApOworCQloX2J1ZmFyZzIg PSBkdWtfX3JlcXVpcmVfYnVmb2JqX3ZhbHVlKHRociwgMSk7CisJfSBlbHNlIHsKKwkJaF9idWZh cmcxID0gZHVrX19yZXF1aXJlX2J1Zm9ial90aGlzKHRocik7CisJCWhfYnVmYXJnMiA9IGR1a19f cmVxdWlyZV9idWZvYmpfdmFsdWUodGhyLCAwKTsKKwl9CisJRFVLX0FTU0VSVChoX2J1ZmFyZzEg IT0gTlVMTCk7CisJRFVLX0FTU0VSVChoX2J1ZmFyZzIgIT0gTlVMTCk7CisKKwkvKiBXZSB3YW50 IHRvIGNvbXBhcmUgdGhlIHNsaWNlL3ZpZXcgYXJlYXMgb2YgdGhlIGFyZ3VtZW50cy4KKwkgKiBJ ZiBlaXRoZXIgc2xpY2UvdmlldyBpcyBpbnZhbGlkICh1bmRlcmx5aW5nIGJ1ZmZlciBpcyBzaG9y dGVyKQorCSAqIGVuc3VyZSBlcXVhbHMoKSBpcyBmYWxzZSwgYnV0IG90aGVyd2lzZSB0aGUgb25s eSB0aGluZyB0aGF0CisJICogbWF0dGVycyBpcyB0byBiZSBtZW1vcnkgc2FmZS4KKwkgKi8KKwor CWlmIChEVUtfSEJVRk9CSl9WQUxJRF9TTElDRShoX2J1ZmFyZzEpICYmCisJICAgIERVS19IQlVG T0JKX1ZBTElEX1NMSUNFKGhfYnVmYXJnMikpIHsKKwkJY29tcF9yZXMgPSBkdWtfanNfZGF0YV9j b21wYXJlKChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSEJVRkZFUl9HRVRfREFUQV9QVFIodGhy LT5oZWFwLCBoX2J1ZmFyZzEtPmJ1ZikgKyBoX2J1ZmFyZzEtPm9mZnNldCwKKwkJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSEJVRkZFUl9H RVRfREFUQV9QVFIodGhyLT5oZWFwLCBoX2J1ZmFyZzItPmJ1ZikgKyBoX2J1ZmFyZzItPm9mZnNl dCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfc2l6ZV90KSBoX2J1ZmFy ZzEtPmxlbmd0aCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfc2l6ZV90 KSBoX2J1ZmFyZzItPmxlbmd0aCk7CisJfSBlbHNlIHsKKwkJY29tcF9yZXMgPSAtMTsgIC8qIGVp dGhlciBub256ZXJvIHZhbHVlIGlzIG9rICovCisJfQorCisJaWYgKG1hZ2ljICYgMHgwMVUpIHsK KwkJLyogY29tcGFyZTogc2ltaWxhciB0byBzdHJpbmcgY29tcGFyaXNvbiBidXQgZm9yIGJ1ZmZl ciBkYXRhLiAqLworCQlkdWtfcHVzaF9pbnQodGhyLCBjb21wX3Jlcyk7CisJfSBlbHNlIHsKKwkJ LyogZXF1YWxzICovCisJCWR1a19wdXNoX2Jvb2xlYW4odGhyLCAoY29tcF9yZXMgPT0gMCkpOwor CX0KKworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQ T1JUICovCisKKy8qCisgKiAgTm9kZS5qcyBCdWZmZXIucHJvdG90eXBlLmZpbGwoKQorICovCisK KyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUwg ZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX2ZpbGwoZHVrX2h0aHJlYWQgKnRocikgewor CWR1a19oYnVmb2JqICpoX3RoaXM7CisJY29uc3QgZHVrX3VpbnQ4X3QgKmZpbGxfc3RyX3B0cjsK KwlkdWtfc2l6ZV90IGZpbGxfc3RyX2xlbjsKKwlkdWtfdWludDhfdCBmaWxsX3ZhbHVlOworCWR1 a19pbnRfdCBmaWxsX29mZnNldDsKKwlkdWtfaW50X3QgZmlsbF9lbmQ7CisJZHVrX3NpemVfdCBm aWxsX2xlbmd0aDsKKwlkdWtfdWludDhfdCAqcDsKKworCWhfdGhpcyA9IGR1a19fcmVxdWlyZV9i dWZvYmpfdGhpcyh0aHIpOworCURVS19BU1NFUlQoaF90aGlzICE9IE5VTEwpOworCWlmIChoX3Ro aXMtPmJ1ZiA9PSBOVUxMKSB7CisJCURVS19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7 CisJfQorCisJLyogWyB2YWx1ZSBvZmZzZXQgZW5kIF0gKi8KKworCWlmIChkdWtfaXNfc3RyaW5n X25vdHN5bWJvbCh0aHIsIDApKSB7CisJCWZpbGxfc3RyX3B0ciA9IChjb25zdCBkdWtfdWludDhf dCAqKSBkdWtfZ2V0X2xzdHJpbmcodGhyLCAwLCAmZmlsbF9zdHJfbGVuKTsKKwkJRFVLX0FTU0VS VChmaWxsX3N0cl9wdHIgIT0gTlVMTCk7CisJfSBlbHNlIHsKKwkJLyogU3ltYm9scyBnZXQgVG9O dW1iZXIoKSBjb2VyY2VkIGFuZCBjYXVzZSBUeXBlRXJyb3IuICovCisJCWZpbGxfdmFsdWUgPSAo ZHVrX3VpbnQ4X3QpIGR1a190b191aW50MzIodGhyLCAwKTsKKwkJZmlsbF9zdHJfcHRyID0gKGNv bnN0IGR1a191aW50OF90ICopICZmaWxsX3ZhbHVlOworCQlmaWxsX3N0cl9sZW4gPSAxOworCX0K KworCS8qIEZpbGwgb2Zmc2V0IGhhbmRsaW5nIGlzIG1vcmUgbGVuaWVudCB0aGFuIGluIE5vZGUu anMuICovCisKKwlkdWtfX2NsYW1wX3N0YXJ0ZW5kX25vbmVnaWR4X25vc2hpZnQodGhyLAorCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX2ludF90KSBoX3RoaXMtPmxl bmd0aCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKmlkeF9zdGFy dCovLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC8qaWR4X2VuZCov LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsbF9vZmZzZXQsCisJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxsX2VuZCk7CisKKwlEVUtf REREKERVS19ERERQUklOVCgiZmlsbDogZmlsbF92YWx1ZT0lMDJ4LCBmaWxsX29mZnNldD0lbGQs IGZpbGxfZW5kPSVsZCwgdmlldyBsZW5ndGg9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgaW50KSBmaWxsX3ZhbHVlLCAobG9uZykgZmlsbF9vZmZzZXQsIChsb25nKSBmaWxs X2VuZCwgKGxvbmcpIGhfdGhpcy0+bGVuZ3RoKSk7CisKKwlEVUtfQVNTRVJUKGZpbGxfZW5kIC0g ZmlsbF9vZmZzZXQgPj0gMCk7CisJRFVLX0FTU0VSVChoX3RoaXMtPmJ1ZiAhPSBOVUxMKTsKKwor CXAgPSAoRFVLX0hCVUZPQkpfR0VUX1NMSUNFX0JBU0UodGhyLT5oZWFwLCBoX3RoaXMpICsgZmls bF9vZmZzZXQpOworCWZpbGxfbGVuZ3RoID0gKGR1a19zaXplX3QpIChmaWxsX2VuZCAtIGZpbGxf b2Zmc2V0KTsKKwlpZiAoZmlsbF9zdHJfbGVuID09IDEpIHsKKwkJLyogSGFuZGxlIHNpbmdsZSBj aGFyYWN0ZXIgZmlsbHMgYXMgbWVtc2V0KCkgZXZlbiB3aGVuCisJCSAqIHRoZSBmaWxsIGRhdGEg Y29tZXMgZnJvbSBhIG9uZS1jaGFyIGFyZ3VtZW50LgorCQkgKi8KKwkJZHVrX21lbXNldF91bnNh ZmUoKHZvaWQgKikgcCwgKGludCkgZmlsbF9zdHJfcHRyWzBdLCAoc2l6ZV90KSBmaWxsX2xlbmd0 aCk7CisJfSBlbHNlIGlmIChmaWxsX3N0cl9sZW4gPiAxKSB7CisJCWR1a19zaXplX3QgaSwgbiwg dDsKKworCQlmb3IgKGkgPSAwLCBuID0gKGR1a19zaXplX3QpIChmaWxsX2VuZCAtIGZpbGxfb2Zm c2V0KSwgdCA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXBbaV0gPSBmaWxsX3N0cl9wdHJbdCsrXTsK KwkJCWlmICh0ID49IGZpbGxfc3RyX2xlbikgeworCQkJCXQgPSAwOworCQkJfQorCQl9CisJfSBl bHNlIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInplcm8gc2l6ZSBmaWxsIHBhdHRlcm4sIGln bm9yZSBzaWxlbnRseSIpKTsKKwl9CisKKwkvKiBSZXR1cm4gdGhlIEJ1ZmZlciB0byBhbGxvdyBj aGFpbmluZzogYi5maWxsKDB4MTEpLmZpbGwoMHgyMiwgMywgNSkudG9TdHJpbmcoKSAqLworCWR1 a19wdXNoX3RoaXModGhyKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZG RVJPQkpFQ1RfU1VQUE9SVCAqLworCisvKgorICogIE5vZGUuanMgQnVmZmVyLnByb3RvdHlwZS53 cml0ZShzdHJpbmcsIFtvZmZzZXRdLCBbbGVuZ3RoXSwgW2VuY29kaW5nXSkKKyAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorRFVLX0lOVEVSTkFMIGR1a19y ZXRfdCBkdWtfYmlfbm9kZWpzX2J1ZmZlcl93cml0ZShkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVr X2hidWZvYmogKmhfdGhpczsKKwlkdWtfdWludF90IG9mZnNldDsKKwlkdWtfdWludF90IGxlbmd0 aDsKKwljb25zdCBkdWtfdWludDhfdCAqc3RyX2RhdGE7CisJZHVrX3NpemVfdCBzdHJfbGVuOwor CisJLyogWFhYOiB2ZXJ5IGluZWZmaWNpZW50IHN1cHBvcnQgZm9yIHBsYWluIGJ1ZmZlcnMgKi8K KwloX3RoaXMgPSBkdWtfX3JlcXVpcmVfYnVmb2JqX3RoaXModGhyKTsKKwlEVUtfQVNTRVJUKGhf dGhpcyAhPSBOVUxMKTsKKworCS8qIEFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIGUuZy4gYSBi dWZmZXIgaXMgbm90IGFsbG93ZWQuICovCisJc3RyX2RhdGEgPSAoY29uc3QgZHVrX3VpbnQ4X3Qg KikgZHVrX3JlcXVpcmVfbHN0cmluZ19ub3RzeW1ib2wodGhyLCAwLCAmc3RyX2xlbik7CisKKwlk dWtfX3Jlc29sdmVfb2Zmc2V0X29wdF9sZW5ndGgodGhyLCBoX3RoaXMsIDEsIDIsICZvZmZzZXQs ICZsZW5ndGgsIDAgLyp0aHJvd19mbGFnKi8pOworCURVS19BU1NFUlQob2Zmc2V0IDw9IGhfdGhp cy0+bGVuZ3RoKTsKKwlEVUtfQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSBoX3RoaXMtPmxlbmd0 aCk7CisKKwkvKiBYWFg6IGVuY29kaW5nIGlzIGlnbm9yZWQgbm93LiAqLworCisJaWYgKGxlbmd0 aCA+IHN0cl9sZW4pIHsKKwkJbGVuZ3RoID0gKGR1a191aW50X3QpIHN0cl9sZW47CisJfQorCisJ aWYgKERVS19IQlVGT0JKX1ZBTElEX1NMSUNFKGhfdGhpcykpIHsKKwkJLyogQ2Fubm90IG92ZXJs YXAuICovCisJCWR1a19tZW1jcHlfdW5zYWZlKCh2b2lkICopIChEVUtfSEJVRk9CSl9HRVRfU0xJ Q0VfQkFTRSh0aHItPmhlYXAsIGhfdGhpcykgKyBvZmZzZXQpLAorCQkgICAgICAgICAgICAgICAg ICAoY29uc3Qgdm9pZCAqKSBzdHJfZGF0YSwKKwkJICAgICAgICAgICAgICAgICAgKHNpemVfdCkg bGVuZ3RoKTsKKwl9IGVsc2UgeworCQlEVUtfREREKERVS19ERERQUklOVCgid3JpdGUoKSB0YXJn ZXQgYnVmZmVyIGlzIG5vdCBjb3ZlcmVkLCBzaWxlbnQgaWdub3JlIikpOworCX0KKworCWR1a19w dXNoX3VpbnQodGhyLCBsZW5ndGgpOworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNF X0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisKKy8qCisgKiAgTm9kZS5qcyBCdWZmZXIucHJvdG90 eXBlLmNvcHkoKQorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBP UlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX2NvcHkoZHVr X2h0aHJlYWQgKnRocikgeworCWR1a19oYnVmb2JqICpoX3RoaXM7CisJZHVrX2hidWZvYmogKmhf YnVmYXJnOworCWR1a19pbnRfdCBzb3VyY2VfbGVuZ3RoOworCWR1a19pbnRfdCB0YXJnZXRfbGVu Z3RoOworCWR1a19pbnRfdCB0YXJnZXRfc3RhcnQsIHNvdXJjZV9zdGFydCwgc291cmNlX2VuZDsK KwlkdWtfdWludF90IHRhcmdldF91c3RhcnQsIHNvdXJjZV91c3RhcnQsIHNvdXJjZV91ZW5kOwor CWR1a191aW50X3QgY29weV9zaXplID0gMDsKKworCS8qIFsgdGFyZ2V0QnVmZmVyIHRhcmdldFN0 YXJ0IHNvdXJjZVN0YXJ0IHNvdXJjZUVuZCBdICovCisKKwloX3RoaXMgPSBkdWtfX3JlcXVpcmVf YnVmb2JqX3RoaXModGhyKTsKKwloX2J1ZmFyZyA9IGR1a19fcmVxdWlyZV9idWZvYmpfdmFsdWUo dGhyLCAwKTsKKwlEVUtfQVNTRVJUKGhfdGhpcyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGhfYnVm YXJnICE9IE5VTEwpOworCXNvdXJjZV9sZW5ndGggPSAoZHVrX2ludF90KSBoX3RoaXMtPmxlbmd0 aDsKKwl0YXJnZXRfbGVuZ3RoID0gKGR1a19pbnRfdCkgaF9idWZhcmctPmxlbmd0aDsKKworCXRh cmdldF9zdGFydCA9IGR1a190b19pbnQodGhyLCAxKTsKKwlzb3VyY2Vfc3RhcnQgPSBkdWtfdG9f aW50KHRociwgMik7CisJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAzKSkgeworCQlzb3VyY2Vf ZW5kID0gc291cmNlX2xlbmd0aDsKKwl9IGVsc2UgeworCQlzb3VyY2VfZW5kID0gZHVrX3RvX2lu dCh0aHIsIDMpOworCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJjaGVja2luZyBjb3B5IGFy Z3M6IHRhcmdldF9zdGFydD0lbGQsIHRhcmdldF9sZW5ndGg9JWxkLCAiCisJICAgICAgICAgICAg ICAgICAgICAgInNvdXJjZV9zdGFydD0lbGQsIHNvdXJjZV9lbmQ9JWxkLCBzb3VyY2VfbGVuZ3Ro PSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHRhcmdldF9zdGFydCwgKGxvbmcp IGhfYnVmYXJnLT5sZW5ndGgsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHNvdXJjZV9z dGFydCwgKGxvbmcpIHNvdXJjZV9lbmQsIChsb25nKSBzb3VyY2VfbGVuZ3RoKSk7CisKKwkvKiBU aGlzIGJlaGF2aW9yIG1vc3RseSBtaW1pY3MgTm9kZS5qcyBub3cuICovCisKKwlpZiAoc291cmNl X3N0YXJ0IDwgMCB8fCBzb3VyY2VfZW5kIDwgMCB8fCB0YXJnZXRfc3RhcnQgPCAwKSB7CisJCS8q IE5lZ2F0aXZlIG9mZnNldHMgY2F1c2UgYSBSYW5nZUVycm9yLiAqLworCQlnb3RvIGZhaWxfYm91 bmRzOworCX0KKwlzb3VyY2VfdXN0YXJ0ID0gKGR1a191aW50X3QpIHNvdXJjZV9zdGFydDsKKwlz b3VyY2VfdWVuZCA9IChkdWtfdWludF90KSBzb3VyY2VfZW5kOworCXRhcmdldF91c3RhcnQgPSAo ZHVrX3VpbnRfdCkgdGFyZ2V0X3N0YXJ0OworCWlmIChzb3VyY2VfdXN0YXJ0ID49IHNvdXJjZV91 ZW5kIHx8ICAvKiBjcm9zc2VkIG9mZnNldHMgb3IgemVybyBzaXplICovCisJICAgIHNvdXJjZV91 c3RhcnQgPj0gKGR1a191aW50X3QpIHNvdXJjZV9sZW5ndGggfHwgIC8qIHNvdXJjZSBvdXQtb2Yt Ym91bmRzIChidXQgcG9zaXRpdmUpICovCisJICAgIHRhcmdldF91c3RhcnQgPj0gKGR1a191aW50 X3QpIHRhcmdldF9sZW5ndGgpIHsgIC8qIHRhcmdldCBvdXQtb2YtYm91bmRzIChidXQgcG9zaXRp dmUpICovCisJCWdvdG8gc2lsZW50X2lnbm9yZTsKKwl9CisJaWYgKHNvdXJjZV91ZW5kID49IChk dWtfdWludF90KSBzb3VyY2VfbGVuZ3RoKSB7CisJCS8qIFNvdXJjZSBlbmQgY2xhbXBlZCBzaWxl bnRseSB0byBhdmFpbGFibGUgbGVuZ3RoLiAqLworCQlzb3VyY2VfdWVuZCA9IChkdWtfdWludF90 KSBzb3VyY2VfbGVuZ3RoOworCX0KKwljb3B5X3NpemUgPSBzb3VyY2VfdWVuZCAtIHNvdXJjZV91 c3RhcnQ7CisJaWYgKHRhcmdldF91c3RhcnQgKyBjb3B5X3NpemUgPiAoZHVrX3VpbnRfdCkgdGFy Z2V0X2xlbmd0aCkgeworCQkvKiBDbGFtcCB0byB0YXJnZXQncyBlbmQgaWYgdG9vIGxvbmcuCisJ CSAqCisJCSAqIE5PVEU6IHRoZXJlJ3Mgbm8gb3ZlcmZsb3cgcG9zc2liaWxpdHkgaW4gdGhlIGNv bXBhcmlzb247CisJCSAqIGJvdGggdGFyZ2V0X3VzdGFydCBhbmQgY29weV9zaXplIGFyZSA+PSAw IGFuZCBiYXNlZCBvbgorCQkgKiB2YWx1ZXMgaW4gZHVrX2ludF90IHJhbmdlLiAgQWRkaW5nIHRo ZW0gYXMgZHVrX3VpbnRfdAorCQkgKiB2YWx1ZXMgaXMgdGhlbiBndWFyYW50ZWVkIG5vdCB0byBv dmVyZmxvdy4KKwkJICovCisJCURVS19BU1NFUlQodGFyZ2V0X3VzdGFydCArIGNvcHlfc2l6ZSA+ PSB0YXJnZXRfdXN0YXJ0KTsgIC8qIG5vIG92ZXJmbG93ICovCisJCURVS19BU1NFUlQodGFyZ2V0 X3VzdGFydCArIGNvcHlfc2l6ZSA+PSBjb3B5X3NpemUpOyAgLyogbm8gb3ZlcmZsb3cgKi8KKwkJ Y29weV9zaXplID0gKGR1a191aW50X3QpIHRhcmdldF9sZW5ndGggLSB0YXJnZXRfdXN0YXJ0Owor CX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJtYWtpbmcgY29weTogdGFyZ2V0X3VzdGFydD0l bHUgc291cmNlX3VzdGFydD0lbHUgY29weV9zaXplPSVsdSIsCisJICAgICAgICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGxvbmcpIHRhcmdldF91c3RhcnQsICh1bnNpZ25lZCBsb25nKSBzb3VyY2Vf dXN0YXJ0LAorCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBjb3B5X3NpemUp KTsKKworCURVS19BU1NFUlQoY29weV9zaXplID49IDEpOworCURVS19BU1NFUlQoc291cmNlX3Vz dGFydCA8PSAoZHVrX3VpbnRfdCkgc291cmNlX2xlbmd0aCk7CisJRFVLX0FTU0VSVChzb3VyY2Vf dXN0YXJ0ICsgY29weV9zaXplIDw9IChkdWtfdWludF90KSBzb3VyY2VfbGVuZ3RoKTsKKwlEVUtf QVNTRVJUKHRhcmdldF91c3RhcnQgPD0gKGR1a191aW50X3QpIHRhcmdldF9sZW5ndGgpOworCURV S19BU1NFUlQodGFyZ2V0X3VzdGFydCArIGNvcHlfc2l6ZSA8PSAoZHVrX3VpbnRfdCkgdGFyZ2V0 X2xlbmd0aCk7CisKKwkvKiBFbnN1cmUgY29weSBpcyBjb3ZlcmVkIGJ5IHVuZGVybHlpbmcgYnVm ZmVycy4gKi8KKwlEVUtfQVNTRVJUKGhfYnVmYXJnLT5idWYgIT0gTlVMTCk7ICAvKiBsZW5ndGgg Y2hlY2sgKi8KKwlEVUtfQVNTRVJUKGhfdGhpcy0+YnVmICE9IE5VTEwpOyAgICAvKiBsZW5ndGgg Y2hlY2sgKi8KKwlpZiAoRFVLX0hCVUZPQkpfVkFMSURfQllURU9GRlNFVF9FWENMKGhfYnVmYXJn LCB0YXJnZXRfdXN0YXJ0ICsgY29weV9zaXplKSAmJgorCSAgICBEVUtfSEJVRk9CSl9WQUxJRF9C WVRFT0ZGU0VUX0VYQ0woaF90aGlzLCBzb3VyY2VfdXN0YXJ0ICsgY29weV9zaXplKSkgeworCQkv KiBNdXN0IHVzZSBtZW1tb3ZlKCkgYmVjYXVzZSBjb3B5IGFyZWEgbWF5IG92ZXJsYXAgKHNvdXJj ZSBhbmQgdGFyZ2V0CisJCSAqIGJ1ZmZlciBtYXkgYmUgdGhlIHNhbWUsIG9yIGZyb20gZGlmZmVy ZW50IHNsaWNlcy4KKwkJICovCisJCWR1a19tZW1tb3ZlX3Vuc2FmZSgodm9pZCAqKSAoRFVLX0hC VUZPQkpfR0VUX1NMSUNFX0JBU0UodGhyLT5oZWFwLCBoX2J1ZmFyZykgKyB0YXJnZXRfdXN0YXJ0 KSwKKwkJICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIChEVUtfSEJVRk9CSl9HRVRf U0xJQ0VfQkFTRSh0aHItPmhlYXAsIGhfdGhpcykgKyBzb3VyY2VfdXN0YXJ0KSwKKwkJICAgICAg ICAgICAgICAgICAgIChzaXplX3QpIGNvcHlfc2l6ZSk7CisJfSBlbHNlIHsKKwkJRFVLX0RERChE VUtfREREUFJJTlQoImJ1ZmZlciBjb3B5IG5vdCBjb3ZlcmVkIGJ5IHVuZGVybHlpbmcgYnVmZmVy KHMpLCBpZ25vcmluZyIpKTsKKwl9CisKKyBzaWxlbnRfaWdub3JlOgorCS8qIFJldHVybiB2YWx1 ZSBpcyBsaWtlIHdyaXRlKCksIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorCSAqIFRoZSByZXR1 cm4gdmFsdWUgbWF0dGVycyBiZWNhdXNlIG9mIGNvZGUgbGlrZToKKwkgKiAib2ZmICs9IGJ1Zi5j b3B5KC4uLikiLgorICAgICAgICAgKi8KKwlkdWtfcHVzaF91aW50KHRociwgY29weV9zaXplKTsK KwlyZXR1cm4gMTsKKworIGZhaWxfYm91bmRzOgorCURVS19EQ0VSUk9SX1JBTkdFX0lOVkFMSURf QVJHUyh0aHIpOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICov CisKKy8qCisgKiAgVHlwZWRBcnJheS5wcm90b3R5cGUuc2V0KCkKKyAqCisgKiAgVHlwZWRBcnJh eSBzZXQoKSBpcyBwcmV0dHkgaW50ZXJlc3RpbmcgdG8gaW1wbGVtZW50IGJlY2F1c2U6CisgKgor ICogICAgLSBUaGUgc291cmNlIGFyZ3VtZW50IG1heSBiZSBhIHBsYWluIGFycmF5IG9yIGEgdHlw ZWRhcnJheS4gIElmIHRoZQorICogICAgICBzb3VyY2UgaXMgYSBUeXBlZEFycmF5LCB2YWx1ZXMg YXJlIGRlY29kZWQgYW5kIHJlLWVuY29kZWQgaW50byB0aGUKKyAqICAgICAgdGFyZ2V0IChub3Qg YXMgYSBwbGFpbiBieXRlIGNvcHkpLiAgVGhpcyBtYXkgaGFwcGVuIGV2ZW4gd2hlbiB0aGUKKyAq ICAgICAgZWxlbWVudCBieXRlIHNpemUgaXMgdGhlIHNhbWUsIGUuZy4gaW50ZWdlciB2YWx1ZXMg bWF5IGJlIHJlLWVuY29kZWQKKyAqICAgICAgaW50byBmbG9hdHMuCisgKgorICogICAgLSBTb3Vy Y2UgYW5kIHRhcmdldCBtYXkgcmVmZXIgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBidWZmZXIsIHNv IHRoYXQKKyAqICAgICAgdGhlIHNldCgpIG9wZXJhdGlvbiBtYXkgb3ZlcmxhcC4gIFRoZSBzcGVj aWZpY2F0aW9uIHJlcXVpcmVzIHRoYXQgdGhpcworICogICAgICBtdXN0IHdvcmsgYXMgaWYgYSBj b3B5IHdhcyBtYWRlIGJlZm9yZSB0aGUgb3BlcmF0aW9uLiAgTm90ZSB0aGF0IHRoaXMKKyAqICAg ICAgaXMgTk9UIGEgc2ltcGxlIG1lbW1vdmUoKSBzaXR1YXRpb24gYmVjYXVzZSB0aGUgc291cmNl IGFuZCB0YXJnZXQKKyAqICAgICAgYnl0ZSBzaXplcyBtYXkgYmUgZGlmZmVyZW50IC0tIGUuZy4g YSA0LWJ5dGUgc291cmNlIChJbnQ4QXJyYXkpIG1heQorICogICAgICBleHBhbmQgdG8gYSAxNi1i eXRlIHRhcmdldCAoVWludDMyQXJyYXkpIHNvIHRoYXQgdGhlIHRhcmdldCBvdmVybGFwcworICog ICAgICB0aGUgc291cmNlIGJvdGggZnJvbSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgKHVubGlrZSBp biB0eXBpY2FsIG1lbW1vdmUpLgorICoKKyAqICAgIC0gRXZlbiBpZiAnYnVmJyBwb2ludGVycyBv ZiB0aGUgc291cmNlIGFuZCB0YXJnZXQgZGlmZmVyLCB0aGVyZSdzIG5vCisgKiAgICAgIGd1YXJh bnRlZSB0aGF0IHRoZWlyIG1lbW9yeSBhcmVhcyBkb24ndCBvdmVybGFwLiAgVGhpcyBtYXkgYmUg dGhlCisgKiAgICAgIGNhc2Ugd2l0aCBleHRlcm5hbCBidWZmZXJzLgorICoKKyAqICBFdmVuIHNv LCBpdCBpcyBuaWNlIHRvIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2U6CisgKgorICogICAg LSBTb3VyY2UgYW5kIHRhcmdldCBzZXBhcmF0ZSBidWZmZXJzIG9yIG5vbi1vdmVybGFwcGluZy4K KyAqCisgKiAgICAtIFNvdXJjZSBhbmQgdGFyZ2V0IGhhdmUgYSBjb21wYXRpYmxlIHR5cGUgc28g dGhhdCBhIHBsYWluIGJ5dGUgY29weQorICogICAgICBpcyBwb3NzaWJsZS4gIE5vdGUgdGhhdCB3 aGlsZSBlLmcuIHVpbnQ4IGFuZCBpbnQ4IGFyZSBjb21wYXRpYmxlCisgKiAgICAgIChjb2VyY2lv biBvbmUgd2F5IG9yIGFub3RoZXIgZG9lc24ndCBjaGFuZ2UgdGhlIGJ5dGUgcmVwcmVzZW50YXRp b24pLAorICogICAgICBlLmcuIGludDggYW5kIHVpbnQ4Y2xhbXBlZCBhcmUgTk9UIGNvbXBhdGli bGUgd2hlbiB3cml0aW5nIGludDgKKyAqICAgICAgdmFsdWVzIGludG8gdWludDhjbGFtcGVkIHR5 cGVkYXJyYXkgKC0xIHdvdWxkIGNsYW1wIHRvIDAgZm9yIGluc3RhbmNlKS4KKyAqCisgKiAgU2Vl IHRlc3QtYmktdHlwZWRhcnJheS1wcm90by1zZXQuanMuCisgKi8KKworI2lmIGRlZmluZWQoRFVL X1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2Jp X3R5cGVkYXJyYXlfc2V0KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaGJ1Zm9iaiAqaF90aGlz OworCWR1a19ob2JqZWN0ICpoX29iajsKKwlkdWtfdWFycmlkeF90IGksIG47CisJZHVrX2ludF90 IG9mZnNldF9zaWduZWQ7CisJZHVrX3VpbnRfdCBvZmZzZXRfZWxlbXM7CisJZHVrX3VpbnRfdCBv ZmZzZXRfYnl0ZXM7CisKKwloX3RoaXMgPSBkdWtfX3JlcXVpcmVfYnVmb2JqX3RoaXModGhyKTsK KwlEVUtfQVNTRVJUKGhfdGhpcyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQo aF90aGlzKTsKKworCWlmIChoX3RoaXMtPmJ1ZiA9PSBOVUxMKSB7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJzb3VyY2UgbmV1dGVyZWQsIHNraXAgY29weSIpKTsKKwkJcmV0dXJuIDA7CisJfQor CisJZHVrX2hidWZvYmpfcHJvbW90ZV9wbGFpbih0aHIsIDApOworCWhfb2JqID0gZHVrX3JlcXVp cmVfaG9iamVjdCh0aHIsIDApOworCisJLyogWFhYOiBWOCB0aHJvd3MgYSBUeXBlRXJyb3IgZm9y IG5lZ2F0aXZlIHZhbHVlcy4gIFdvdWxkIGl0CisJICogYmUgbW9yZSB1c2VmdWwgdG8gaW50ZXJw cmV0IG5lZ2F0aXZlIG9mZnNldHMgaGVyZSBmcm9tIHRoZQorCSAqIGVuZCBvZiB0aGUgYnVmZmVy IHRvbz8KKwkgKi8KKwlvZmZzZXRfc2lnbmVkID0gZHVrX3RvX2ludCh0aHIsIDEpOworCWlmIChv ZmZzZXRfc2lnbmVkIDwgMCkgeworCQkvKiBGb3Igc29tZSByZWFzb24gdGhpcyBpcyBhIFR5cGVF cnJvciAoYXQgbGVhc3QgaW4gVjgpLiAqLworCQlEVUtfRENFUlJPUl9UWVBFX0lOVkFMSURfQVJH Uyh0aHIpOworCX0KKwlvZmZzZXRfZWxlbXMgPSAoZHVrX3VpbnRfdCkgb2Zmc2V0X3NpZ25lZDsK KwlvZmZzZXRfYnl0ZXMgPSBvZmZzZXRfZWxlbXMgPDwgaF90aGlzLT5zaGlmdDsKKwlpZiAoKG9m ZnNldF9ieXRlcyA+PiBoX3RoaXMtPnNoaWZ0KSAhPSBvZmZzZXRfZWxlbXMpIHsKKwkJLyogQnl0 ZSBsZW5ndGggd291bGQgb3ZlcmZsb3cuICovCisJCS8qIFhYWDogZWFzaWVyIGNoZWNrIHdpdGgg bGVzcyBjb2RlPyAqLworCQlnb3RvIGZhaWxfYXJnczsKKwl9CisJaWYgKG9mZnNldF9ieXRlcyA+ IGhfdGhpcy0+bGVuZ3RoKSB7CisJCS8qIEVxdWFsaXR5IG1heSBiZSBPSyBidXQgPmxlbmd0aCBu b3QuICBDaGVja2luZworCQkgKiB0aGlzIGV4cGxpY2l0bHkgYXZvaWRzIHNvbWUgb3ZlcmZsb3cg Y2FzZXMKKwkJICogYmVsb3cuCisJCSAqLworCQlnb3RvIGZhaWxfYXJnczsKKwl9CisJRFVLX0FT U0VSVChvZmZzZXRfYnl0ZXMgPD0gaF90aGlzLT5sZW5ndGgpOworCisJLyogRmFzdCBwYXRoOiBz b3VyY2UgaXMgYSBUeXBlZEFycmF5IChvciBhbnkgYnVmb2JqKS4gKi8KKworCWlmIChEVUtfSE9C SkVDVF9JU19CVUZPQkooaF9vYmopKSB7CisJCWR1a19oYnVmb2JqICpoX2J1ZmFyZzsKKyNpZiAh ZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCQlkdWtfdWludDE2X3QgY29tcF9tYXNrOwor I2VuZGlmCisJCWR1a19zbWFsbF9pbnRfdCBub19vdmVybGFwID0gMDsKKwkJZHVrX3VpbnRfdCBz cmNfbGVuZ3RoOworCQlkdWtfdWludF90IGRzdF9sZW5ndGg7CisJCWR1a191aW50X3QgZHN0X2xl bmd0aF9lbGVtczsKKwkJZHVrX3VpbnQ4X3QgKnBfc3JjX2Jhc2U7CisJCWR1a191aW50OF90ICpw X3NyY19lbmQ7CisJCWR1a191aW50OF90ICpwX3NyYzsKKwkJZHVrX3VpbnQ4X3QgKnBfZHN0X2Jh c2U7CisJCWR1a191aW50OF90ICpwX2RzdDsKKwkJZHVrX3NtYWxsX3VpbnRfdCBzcmNfZWxlbV9z aXplOworCQlkdWtfc21hbGxfdWludF90IGRzdF9lbGVtX3NpemU7CisKKwkJaF9idWZhcmcgPSAo ZHVrX2hidWZvYmogKikgaF9vYmo7CisJCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChoX2J1ZmFy Zyk7CisKKwkJaWYgKGhfYnVmYXJnLT5idWYgPT0gTlVMTCkgeworCQkJRFVLX0RERChEVUtfRERE UFJJTlQoInRhcmdldCBuZXV0ZXJlZCwgc2tpcCBjb3B5IikpOworCQkJcmV0dXJuIDA7CisJCX0K KworCQkvKiBOb21pbmFsIHNpemUgY2hlY2suICovCisJCXNyY19sZW5ndGggPSBoX2J1ZmFyZy0+ bGVuZ3RoOyAgLyogYnl0ZXMgaW4gc291cmNlICovCisJCWRzdF9sZW5ndGhfZWxlbXMgPSAoc3Jj X2xlbmd0aCA+PiBoX2J1ZmFyZy0+c2hpZnQpOyAgLyogZWxlbXMgaW4gc291cmNlIGFuZCBkZXN0 ICovCisJCWRzdF9sZW5ndGggPSBkc3RfbGVuZ3RoX2VsZW1zIDw8IGhfdGhpcy0+c2hpZnQ7ICAv KiBieXRlcyBpbiBkZXN0ICovCisJCWlmICgoZHN0X2xlbmd0aCA+PiBoX3RoaXMtPnNoaWZ0KSAh PSBkc3RfbGVuZ3RoX2VsZW1zKSB7CisJCQkvKiBCeXRlIGxlbmd0aCB3b3VsZCBvdmVyZmxvdy4g Ki8KKwkJCS8qIFhYWDogZWFzaWVyIGNoZWNrIHdpdGggbGVzcyBjb2RlPyAqLworCQkJZ290byBm YWlsX2FyZ3M7CisJCX0KKwkJRFVLX0RERChEVUtfREREUFJJTlQoIm5vbWluYWwgc2l6ZSBjaGVj azogc3JjX2xlbmd0aD0lbGQsIGRzdF9sZW5ndGg9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIHNyY19sZW5ndGgsIChsb25nKSBkc3RfbGVuZ3RoKSk7CisJCURVS19BU1NFUlQo b2Zmc2V0X2J5dGVzIDw9IGhfdGhpcy0+bGVuZ3RoKTsKKwkJaWYgKGRzdF9sZW5ndGggPiBoX3Ro aXMtPmxlbmd0aCAtIG9mZnNldF9ieXRlcykgeworCQkJLyogT3ZlcmZsb3cgbm90IGFuIGlzc3Vl IGJlY2F1c2Ugc3VidHJhY3Rpb24gaXMgdXNlZCBvbiB0aGUgcmlnaHQKKwkJCSAqIHNpZGUgYW5k IGd1YXJhbnRlZWQgdG8gYmUgPj0gMC4KKwkJCSAqLworCQkJRFVLX0RERChEVUtfREREUFJJTlQo ImNvcHkgZXhjZWVkcyB0YXJnZXQgYnVmZmVyIG5vbWluYWwgbGVuZ3RoIikpOworCQkJZ290byBm YWlsX2FyZ3M7CisJCX0KKwkJaWYgKCFEVUtfSEJVRk9CSl9WQUxJRF9CWVRFT0ZGU0VUX0VYQ0wo aF90aGlzLCBvZmZzZXRfYnl0ZXMgKyBkc3RfbGVuZ3RoKSkgeworCQkJRFVLX0RERChEVUtfRERE UFJJTlQoImNvcHkgbm90IGNvdmVyZWQgYnkgdW5kZXJseWluZyB0YXJnZXQgYnVmZmVyLCBpZ25v cmUiKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXBfc3JjX2Jhc2UgPSBEVUtfSEJVRk9CSl9H RVRfU0xJQ0VfQkFTRSh0aHItPmhlYXAsIGhfYnVmYXJnKTsKKwkJcF9kc3RfYmFzZSA9IERVS19I QlVGT0JKX0dFVF9TTElDRV9CQVNFKHRoci0+aGVhcCwgaF90aGlzKSArIG9mZnNldF9ieXRlczsK KworCQkvKiBDaGVjayBhY3R1YWwgdW5kZXJseWluZyBidWZmZXJzIGZvciB2YWxpZGl0eSBhbmQg dGhhdCB0aGV5CisJCSAqIGNvdmVyIHRoZSBjb3B5LiAgTm8gc2lkZSBlZmZlY3RzIGFyZSBhbGxv d2VkIGFmdGVyIHRoZSBjaGVjaworCQkgKiBzbyB0aGF0IHRoZSB2YWxpZGl0eSBzdGF0dXMgZG9l c24ndCBjaGFuZ2UuCisJCSAqLworCQlpZiAoIURVS19IQlVGT0JKX1ZBTElEX1NMSUNFKGhfdGhp cykgfHwKKwkJICAgICFEVUtfSEJVRk9CSl9WQUxJRF9TTElDRShoX2J1ZmFyZykpIHsKKwkJCS8q IFRoZSBjb25kaXRpb24gY291bGQgYmUgbW9yZSBuYXJyb3cgYW5kIGNoZWNrIGZvciB0aGUKKwkJ CSAqIGNvcHkgYXJlYSBvbmx5LCBidXQgdGhlcmUncyBubyBuZWVkIGZvciBmaW5lIGdyYWluZWQK KwkJCSAqIGJlaGF2aW9yIHdoZW4gdGhlIHVuZGVybHlpbmcgYnVmZmVyIGlzIG1pc2NvbmZpZ3Vy ZWQuCisJCQkgKi8KKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJzb3VyY2UgYW5kL29yIHRhcmdl dCBub3QgY292ZXJlZCBieSB1bmRlcmx5aW5nIGJ1ZmZlciwgc2tpcCBjb3B5IikpOworCQkJcmV0 dXJuIDA7CisJCX0KKworCQkvKiBXZSB3YW50IHRvIGRvIGEgc3RyYWlnaHQgbWVtb3J5IGNvcHkg aWYgcG9zc2libGU6IHRoaXMgaXMKKwkJICogYW4gaW1wb3J0YW50IG9wZXJhdGlvbiBiZWNhdXNl IC5zZXQoKSBpcyB0aGUgVHlwZWRBcnJheQorCQkgKiB3YXkgdG8gY29weSBjaHVua3Mgb2YgbWVt b3J5LiAgSG93ZXZlciwgYmVjYXVzZSBzZXQoKQorCQkgKiBjb25jZXB0dWFsbHkgd29ya3MgaW4g dGVybXMgb2YgZWxlbWVudHMsIG5vdCBhbGwgdmlld3MgYXJlCisJCSAqIGNvbXBhdGlibGUgd2l0 aCBkaXJlY3QgYnl0ZSBjb3B5aW5nLgorCQkgKgorCQkgKiBJZiB3ZSBkbyBtYW5hZ2UgYSBkaXJl Y3QgY29weSwgdGhlICJvdmVybGFwIGlzc3VlIiBoYW5kbGVkCisJCSAqIGJlbG93IGNhbiBqdXN0 IGJlIHNvbHZlZCB1c2luZyBtZW1tb3ZlKCkgYmVjYXVzZSB0aGUgc291cmNlCisJCSAqIGFuZCBk ZXN0aW5hdGlvbiBlbGVtZW50IHNpemVzIGFyZSBuZWNlc3NhcmlseSBlcXVhbC4KKwkJICovCisK KyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCQlEVUtfQVNTRVJUKGhfdGhpcy0+ ZWxlbV90eXBlIDwgc2l6ZW9mKGR1a19fYnVmZmVyX2VsZW10eXBlX2NvcHlfY29tcGF0aWJsZSkg LyBzaXplb2YoZHVrX3VpbnQxNl90KSk7CisJCWNvbXBfbWFzayA9IGR1a19fYnVmZmVyX2VsZW10 eXBlX2NvcHlfY29tcGF0aWJsZVtoX3RoaXMtPmVsZW1fdHlwZV07CisJCWlmIChjb21wX21hc2sg JiAoMSA8PCBoX2J1ZmFyZy0+ZWxlbV90eXBlKSkgeworCQkJRFVLX0FTU0VSVChzcmNfbGVuZ3Ro ID09IGRzdF9sZW5ndGgpOworCisJCQlEVUtfREREKERVS19ERERQUklOVCgiZmFzdCBwYXRoOiBh YmxlIHRvIHVzZSBtZW1tb3ZlKCkgYmVjYXVzZSB2aWV3cyBhcmUgY29tcGF0aWJsZSIpKTsKKwkJ CWR1a19tZW1tb3ZlX3Vuc2FmZSgodm9pZCAqKSBwX2RzdF9iYXNlLCAoY29uc3Qgdm9pZCAqKSBw X3NyY19iYXNlLCAoc2l6ZV90KSBkc3RfbGVuZ3RoKTsKKwkJCXJldHVybiAwOworCQl9CisJCURV S19EREQoRFVLX0RERFBSSU5UKCJmYXN0IHBhdGg6IHZpZXdzIGFyZSBub3QgY29tcGF0aWJsZSB3 aXRoIGEgYnl0ZSBjb3B5LCBjb3B5IGJ5IGl0ZW0iKSk7CisjZW5kaWYgIC8qICFEVUtfVVNFX1BS RUZFUl9TSVpFICovCisKKwkJLyogV2Ugd2FudCB0byBhdm9pZCBtYWtpbmcgYSBjb3B5IHRvIHBy b2Nlc3Mgc2V0KCkgYnV0IHRoYXQncworCQkgKiBub3QgYWx3YXlzIHBvc3NpYmxlOiB0aGUgc291 cmNlIGFuZCB0aGUgdGFyZ2V0IG1heSBvdmVybGFwCisJCSAqIGFuZCBiZWNhdXNlIGVsZW1lbnQg c2l6ZXMgYXJlIGRpZmZlcmVudCwgdGhlIG92ZXJsYXAgY2Fubm90CisJCSAqIGFsd2F5cyBiZSBo YW5kbGVkIHdpdGggYSBtZW1tb3ZlKCkgb3IgY2hvb3NpbmcgdGhlIGNvcHkKKwkJICogZGlyZWN0 aW9uIGluIGEgY2VydGFpbiB3YXkuICBGb3IgZXhhbXBsZSwgaWYgc291cmNlIHR5cGUgaXMKKwkJ ICogdWludDggYW5kIHRhcmdldCB0eXBlIGlzIHVpbnQzMiwgdGhlIHRhcmdldCBhcmVhIG1heSBl eGNlZWQKKwkJICogdGhlIHNvdXJjZSBhcmVhIGZyb20gYm90aCBlbmRzIQorCQkgKgorCQkgKiBO b3RlIHRoYXQgYmVjYXVzZSBleHRlcm5hbCBidWZmZXJzIG1heSBwb2ludCB0byB0aGUgc2FtZQor CQkgKiBtZW1vcnkgYXJlYXMsIHdlIG11c3QgdWx0aW1hdGVseSBtYWtlIHRoaXMgY2hlY2sgdXNp bmcKKwkJICogcG9pbnRlcnMuCisJCSAqCisJCSAqIE5PVEU6IGNhcmVmdWwgd2l0aCBzaWRlIGVm ZmVjdHM6IGFueSBzaWRlIGVmZmVjdCBtYXkgY2F1c2UKKwkJICogYSBidWZmZXIgcmVzaXplIChv ciBleHRlcm5hbCBidWZmZXIgcG9pbnRlci9sZW5ndGggdXBkYXRlKSEKKwkJICovCisKKwkJRFVL X0RERChEVUtfREREUFJJTlQoIm92ZXJsYXAgY2hlY2s6IHBfc3JjX2Jhc2U9JXAsIHNyY19sZW5n dGg9JWxkLCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJwX2RzdF9iYXNlPSVwLCBkc3RfbGVu Z3RoPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIHBfc3JjX2Jhc2UsIChs b25nKSBzcmNfbGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBwX2RzdF9i YXNlLCAobG9uZykgZHN0X2xlbmd0aCkpOworCisJCWlmIChwX3NyY19iYXNlID49IHBfZHN0X2Jh c2UgKyBkc3RfbGVuZ3RoIHx8ICAvKiBzb3VyY2Ugc3RhcnRzIGFmdGVyIGRlc3QgZW5kcyAqLwor CQkgICAgcF9zcmNfYmFzZSArIHNyY19sZW5ndGggPD0gcF9kc3RfYmFzZSkgeyAgIC8qIHNvdXJj ZSBlbmRzIGJlZm9yZSBkZXN0IHN0YXJ0cyAqLworCQkJbm9fb3ZlcmxhcCA9IDE7CisJCX0KKwor CQlpZiAoIW5vX292ZXJsYXApIHsKKwkJCS8qIFRoZXJlJ3Mgb3ZlcmxhcDogdGhlIGRlc2lyZWQg ZW5kIHJlc3VsdCBpcyB0aGF0CisJCQkgKiBjb25jZXB0dWFsbHkgYSBjb3B5IGlzIG1hZGUgdG8g YXZvaWQgInRyYW1wbGluZyIKKwkJCSAqIG9mIHNvdXJjZSBkYXRhIGJ5IGRlc3RpbmF0aW9uIHdy aXRlcy4gIFdlIG1ha2UKKwkJCSAqIGFuIGFjdHVhbCB0ZW1wb3JhcnkgY29weSB0byBoYW5kbGUg dGhpcyBjYXNlLgorCQkJICovCisJCQlkdWtfdWludDhfdCAqcF9zcmNfY29weTsKKworCQkJRFVL X0RERChEVUtfREREUFJJTlQoInRoZXJlIGlzIG92ZXJsYXAsIG1ha2UgYSBjb3B5IG9mIHRoZSBz b3VyY2UiKSk7CisJCQlwX3NyY19jb3B5ID0gKGR1a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVk X2J1ZmZlcl9ub3plcm8odGhyLCBzcmNfbGVuZ3RoKTsKKwkJCURVS19BU1NFUlQocF9zcmNfY29w eSAhPSBOVUxMKTsKKwkJCWR1a19tZW1jcHlfdW5zYWZlKCh2b2lkICopIHBfc3JjX2NvcHksIChj b25zdCB2b2lkICopIHBfc3JjX2Jhc2UsIChzaXplX3QpIHNyY19sZW5ndGgpOworCisJCQlwX3Ny Y19iYXNlID0gcF9zcmNfY29weTsgIC8qIHVzZSBwX3NyY19iYXNlIGZyb20gbm93IG9uICovCisJ CX0KKwkJLyogVmFsdWUgc3RhY2sgaW50ZW50aW9uYWxseSBtaXhlZCBzaXplIGhlcmUuICovCisK KwkJRFVLX0RERChEVUtfREREUFJJTlQoImFmdGVyIG92ZXJsYXAgY2hlY2s6IHBfc3JjX2Jhc2U9 JXAsIHNyY19sZW5ndGg9JWxkLCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJwX2RzdF9iYXNl PSVwLCBkc3RfbGVuZ3RoPSVsZCwgdmFsc3RhY2sgdG9wPSVsZCIsCisJCSAgICAgICAgICAgICAg ICAgICAgICh2b2lkICopIHBfc3JjX2Jhc2UsIChsb25nKSBzcmNfbGVuZ3RoLAorCQkgICAgICAg ICAgICAgICAgICAgICAodm9pZCAqKSBwX2RzdF9iYXNlLCAobG9uZykgZHN0X2xlbmd0aCwKKwkJ ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGR1a19nZXRfdG9wKHRocikpKTsKKworCQkvKiBS ZWFkeSB0byBtYWtlIHRoZSBjb3B5LiAgV2UgbXVzdCBwcm9jZWVkIGVsZW1lbnQgYnkgZWxlbWVu dAorCQkgKiBhbmQgbXVzdCBhdm9pZCBhbnkgc2lkZSBlZmZlY3RzIHRoYXQgbWlnaHQgY2F1c2Ug dGhlIGJ1ZmZlcgorCQkgKiB2YWxpZGl0eSBjaGVjayBhYm92ZSB0byBiZWNvbWUgaW52YWxpZC4K KwkJICoKKwkJICogQWx0aG91Z2ggd2Ugd29yayB0aHJvdWdoIHRoZSB2YWx1ZSBzdGFjayBoZXJl LCBvbmx5IHBsYWluCisJCSAqIG51bWJlcnMgYXJlIGhhbmRsZWQgd2hpY2ggc2hvdWxkIGJlIHNp ZGUgZWZmZWN0IHNhZmUuCisJCSAqLworCisJCXNyY19lbGVtX3NpemUgPSAoZHVrX3NtYWxsX3Vp bnRfdCkgKDFVIDw8IGhfYnVmYXJnLT5zaGlmdCk7CisJCWRzdF9lbGVtX3NpemUgPSAoZHVrX3Nt YWxsX3VpbnRfdCkgKDFVIDw8IGhfdGhpcy0+c2hpZnQpOworCQlwX3NyYyA9IHBfc3JjX2Jhc2U7 CisJCXBfZHN0ID0gcF9kc3RfYmFzZTsKKwkJcF9zcmNfZW5kID0gcF9zcmNfYmFzZSArIHNyY19s ZW5ndGg7CisKKwkJd2hpbGUgKHBfc3JjICE9IHBfc3JjX2VuZCkgeworCQkJRFVLX0RERChEVUtf REREUFJJTlQoImZhc3QgcGF0aCBwZXIgZWxlbWVudCBjb3B5IGxvb3A6ICIKKwkJCSAgICAgICAg ICAgICAgICAgICAgICJwX3NyYz0lcCwgcF9zcmNfZW5kPSVwLCBwX2RzdD0lcCIsCisJCQkgICAg ICAgICAgICAgICAgICAgICAodm9pZCAqKSBwX3NyYywgKHZvaWQgKikgcF9zcmNfZW5kLCAodm9p ZCAqKSBwX2RzdCkpOworCQkJLyogQSB2YWxpZGF0ZWQgcmVhZCgpIGlzIGFsd2F5cyBhIG51bWJl ciwgc28gaXQncyB3cml0ZSBjb2VyY2lvbgorCQkJICogaXMgYWx3YXlzIHNpZGUgZWZmZWN0IGZy ZWUgYW4gd29uJ3QgaW52YWxpZGF0ZSBwb2ludGVycyBldGMuCisJCQkgKi8KKwkJCWR1a19oYnVm b2JqX3B1c2hfdmFsaWRhdGVkX3JlYWQodGhyLCBoX2J1ZmFyZywgcF9zcmMsIHNyY19lbGVtX3Np emUpOworCQkJZHVrX2hidWZvYmpfdmFsaWRhdGVkX3dyaXRlKHRociwgaF90aGlzLCBwX2RzdCwg ZHN0X2VsZW1fc2l6ZSk7CisJCQlkdWtfcG9wKHRocik7CisJCQlwX3NyYyArPSBzcmNfZWxlbV9z aXplOworCQkJcF9kc3QgKz0gZHN0X2VsZW1fc2l6ZTsKKwkJfQorCisJCXJldHVybiAwOworCX0g ZWxzZSB7CisJCS8qIFNsb3cgcGF0aDogcXVpdGUgc2xvdywgYnV0IHdlIHNhdmUgc3BhY2UgYnkg dXNpbmcgdGhlIHByb3BlcnR5IGNvZGUKKwkJICogdG8gd3JpdGUgY29lcmNlIHRhcmdldCB2YWx1 ZXMuICBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IG92ZXJsYXAKKwkJICogaGVyZSBiZWNh dXNlIHRoZSBzb3VyY2UgaXMgbm90IGEgVHlwZWRBcnJheS4KKwkJICoKKwkJICogV2UgY291bGQg dXNlIHRoZSBidWZvYmogd3JpdGUgY29lcmNpb24gaGVscGVyIGJ1dCBzaW5jZSB0aGUKKwkJICog cHJvcGVydHkgcmVhZCBtYXkgaGF2ZSBhcmJpdHJhcnkgc2lkZSBlZmZlY3RzLCBmdWxsIHZhbGlk aXR5IGNoZWNrcworCQkgKiB3b3VsZCBiZSBuZWVkZWQgZm9yIGV2ZXJ5IGVsZW1lbnQgYW55d2F5 LgorCQkgKi8KKworCQluID0gKGR1a191YXJyaWR4X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgMCk7 CisJCURVS19BU1NFUlQob2Zmc2V0X2J5dGVzIDw9IGhfdGhpcy0+bGVuZ3RoKTsKKwkJaWYgKChu IDw8IGhfdGhpcy0+c2hpZnQpID4gaF90aGlzLT5sZW5ndGggLSBvZmZzZXRfYnl0ZXMpIHsKKwkJ CS8qIE92ZXJmbG93IG5vdCBhbiBpc3N1ZSBiZWNhdXNlIHN1YnRyYWN0aW9uIGlzIHVzZWQgb24g dGhlIHJpZ2h0CisJCQkgKiBzaWRlIGFuZCBndWFyYW50ZWVkIHRvIGJlID49IDAuCisJCQkgKi8K KwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJjb3B5IGV4Y2VlZHMgdGFyZ2V0IGJ1ZmZlciBub21p bmFsIGxlbmd0aCIpKTsKKwkJCWdvdG8gZmFpbF9hcmdzOworCQl9CisKKwkJLyogVGhlcmUncyBu byBuZWVkIHRvIGNoZWNrIGZvciBidWZmZXIgdmFsaWRpdHkgc3RhdHVzIGZvciB0aGUKKwkJICog dGFyZ2V0IGhlcmU6IHRoZSBwcm9wZXJ0eSBhY2Nlc3MgY29kZSB3aWxsIGRvIHRoYXQgZm9yIGVh Y2gKKwkJICogZWxlbWVudC4gIE1vcmVvdmVyLCBpZiB3ZSBkaWQgY2hlY2sgdGhlIHZhbGlkaXR5 IGhlcmUsIHNpZGUKKwkJICogZWZmZWN0cyBmcm9tIHJlYWRpbmcgdGhlIHNvdXJjZSBhcmd1bWVu dCBtaWdodCBpbnZhbGlkYXRlCisJCSAqIHRoZSByZXN1bHRzIGFueXdheS4KKwkJICovCisKKwkJ RFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKwkJZHVrX3B1c2hfdGhpcyh0aHIpOworCisJCWZvciAo aSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIsIDAsIGkpOwor CQkJZHVrX3B1dF9wcm9wX2luZGV4KHRociwgMiwgb2Zmc2V0X2VsZW1zICsgaSk7CisJCX0KKwl9 CisKKwlyZXR1cm4gMDsKKworIGZhaWxfYXJnczoKKwlEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElE X0FSR1ModGhyKTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAq LworCisvKgorICogIE5vZGUuanMgQnVmZmVyLnByb3RvdHlwZS5zbGljZShbc3RhcnRdLCBbZW5k XSkKKyAqICBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UoYmVnaW4sIFtlbmRdKQorICogIFR5 cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KGJlZ2luLCBbZW5kXSkKKyAqCisgKiAgVGhlIEFQ SSBjYWxscyBhcmUgYWxtb3N0IGlkZW50aWNhbDsgbmVnYXRpdmUgaW5kaWNlcyBhcmUgY291bnRl ZCBmcm9tIGVuZAorICogIG9mIGJ1ZmZlciwgYW5kIGZpbmFsIGluZGljZXMgYXJlIGNsYW1wZWQg KGFsbG93aW5nIGNyb3NzZWQgaW5kaWNlcykuICBNYWluCisgKiAgZGlmZmVyZW5jZXM6CisgKgor ICogICAgLSBDb3B5L3ZpZXcgYmVoYXZpb3I7IE5vZGUuanMgLnNsaWNlKCkgYW5kIFR5cGVkQXJy YXkgLnN1YmFycmF5KCkgY3JlYXRlCisgKiAgICAgIHZpZXdzLCBBcnJheUJ1ZmZlciAuc2xpY2Uo KSBjcmVhdGVzIGEgY29weQorICoKKyAqICAgIC0gUmVzdWx0aW5nIG9iamVjdCBoYXMgYSBkaWZm ZXJlbnQgY2xhc3MgYW5kIHByb3RvdHlwZSBkZXBlbmRpbmcgb24gdGhlCisgKiAgICAgIGNhbGwg KG9yICd0aGlzJyBhcmd1bWVudCkKKyAqCisgKiAgICAtIFR5cGVkQXJyYXkgLnN1YmFycmF5KCkg YXJndW1lbnRzIGFyZSBlbGVtZW50IGluZGljZXMsIG5vdCBieXRlIG9mZnNldHMKKyAqCisgKiAg ICAtIFBsYWluIGJ1ZmZlciBhcmd1bWVudCBjcmVhdGVzIGEgcGxhaW4gYnVmZmVyIHNsaWNlCisg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19MT0NB TCB2b2lkIGR1a19fYXJyYXlidWZmZXJfcGxhaW5fc2xpY2UoZHVrX2h0aHJlYWQgKnRociwgZHVr X2hidWZmZXIgKmhfdmFsKSB7CisJZHVrX2ludF90IHN0YXJ0X29mZnNldCwgZW5kX29mZnNldDsK KwlkdWtfdWludF90IHNsaWNlX2xlbmd0aDsKKwlkdWtfdWludDhfdCAqcF9jb3B5OworCWR1a19z aXplX3QgY29weV9sZW5ndGg7CisKKwlkdWtfX2NsYW1wX3N0YXJ0ZW5kX25lZ2lkeF9zaGlmdGVk KHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfaW50X3QpIERV S19IQlVGRkVSX0dFVF9TSVpFKGhfdmFsKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAgLypidWZmZXJfc2hpZnQqLywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAgLyppZHhfc3RhcnQqLywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEgLyppZHhfZW5kKi8sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm c3RhcnRfb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuZF9v ZmZzZXQpOworCURVS19BU1NFUlQoZW5kX29mZnNldCA8PSAoZHVrX2ludF90KSBEVUtfSEJVRkZF Ul9HRVRfU0laRShoX3ZhbCkpOworCURVS19BU1NFUlQoc3RhcnRfb2Zmc2V0ID49IDApOworCURV S19BU1NFUlQoZW5kX29mZnNldCA+PSBzdGFydF9vZmZzZXQpOworCXNsaWNlX2xlbmd0aCA9IChk dWtfdWludF90KSAoZW5kX29mZnNldCAtIHN0YXJ0X29mZnNldCk7CisKKwlwX2NvcHkgPSAoZHVr X3VpbnQ4X3QgKikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyX25vemVybyh0aHIsIChkdWtfc2l6ZV90 KSBzbGljZV9sZW5ndGgpOworCURVS19BU1NFUlQocF9jb3B5ICE9IE5VTEwpOworCWNvcHlfbGVu Z3RoID0gc2xpY2VfbGVuZ3RoOworCisJZHVrX21lbWNweV91bnNhZmUoKHZvaWQgKikgcF9jb3B5 LAorCSAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgRFVL X0hCVUZGRVJfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaF92YWwpICsgc3RhcnRfb2Zmc2V0KSwK KwkgICAgICAgICAgICAgICAgICBjb3B5X2xlbmd0aCk7Cit9CisjZW5kaWYgLyogRFVLX1VTRV9C VUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVD VF9TVVBQT1JUKQorLyogU2hhcmVkIGhlbHBlciBmb3Igc2xpY2Uvc3ViYXJyYXkgb3BlcmF0aW9u LgorICogTWFnaWM6IDB4MDE9aXNWaWV3LCAweDAyPWNvcHksIDB4MDQ9Tm9kZS5qcyBCdWZmZXIg c3BlY2lhbCBoYW5kbGluZy4KKyAqLworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfYnVm ZmVyX3NsaWNlX3NoYXJlZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3NtYWxsX2ludF90IG1h Z2ljOworCWR1a19zbWFsbF91aW50X3QgcmVzX2NsYXNzX251bTsKKwlkdWtfc21hbGxfaW50X3Qg cmVzX3Byb3RvX2JpZHg7CisJZHVrX2hidWZvYmogKmhfdGhpczsKKwlkdWtfaGJ1Zm9iaiAqaF9i dWZvYmo7CisJZHVrX2hidWZmZXIgKmhfdmFsOworCWR1a19pbnRfdCBzdGFydF9vZmZzZXQsIGVu ZF9vZmZzZXQ7CisJZHVrX3VpbnRfdCBzbGljZV9sZW5ndGg7CisJZHVrX3R2YWwgKnR2OworCisJ LyogWyBzdGFydCBlbmQgXSAqLworCisJbWFnaWMgPSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhy KTsKKworCXR2ID0gZHVrX2dldF9ib3Jyb3dlZF90aGlzX3R2YWwodGhyKTsKKwlEVUtfQVNTRVJU KHR2ICE9IE5VTEwpOworCisJaWYgKERVS19UVkFMX0lTX0JVRkZFUih0dikpIHsKKwkJLyogRm9y IHBsYWluIGJ1ZmZlcnMgcmV0dXJuIGEgcGxhaW4gYnVmZmVyIHNsaWNlLiAqLworCQloX3ZhbCA9 IERVS19UVkFMX0dFVF9CVUZGRVIodHYpOworCQlEVUtfQVNTRVJUKGhfdmFsICE9IE5VTEwpOwor CisJCWlmIChtYWdpYyAmIDB4MDIpIHsKKwkJCS8qIE1ha2UgY29weTogQXJyYXlCdWZmZXIucHJv dG90eXBlLnNsaWNlKCkgdXNlcyB0aGlzLiAqLworCQkJZHVrX19hcnJheWJ1ZmZlcl9wbGFpbl9z bGljZSh0aHIsIGhfdmFsKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJLyogVmlldyBp bnRvIGV4aXN0aW5nIGJ1ZmZlcjogY2Fubm90IGJlIGRvbmUgaWYgdGhlCisJCQkgKiByZXN1bHQg aXMgYSBwbGFpbiBidWZmZXIgYmVjYXVzZSB0aGVyZSdzIG5vIHNsaWNlCisJCQkgKiBpbmZvLiAg U28gcmV0dXJuIGFuIEFycmF5QnVmZmVyIGluc3RhbmNlOyBjb2VyY2UKKwkJCSAqIHRoZSAndGhp cycgYmluZGluZyBpbnRvIGFuIG9iamVjdCBhbmQgYmVoYXZlIGFzIGlmCisJCQkgKiB0aGUgb3Jp Z2luYWwgY2FsbCB3YXMgZm9yIGFuIE9iamVjdC1jb2VyY2VkIHBsYWluCisJCQkgKiBidWZmZXIg KGhhbmRsZWQgYXV0b21hdGljYWxseSBieSBkdWtfX3JlcXVpcmVfYnVmb2JqX3RoaXMoKSkuCisJ CQkgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInNsaWNlKCkgZG9lc24ndCBoYW5kbGUg dmlldyBpbnRvIHBsYWluIGJ1ZmZlciwgY29lcmNlICd0aGlzJyB0byBBcnJheUJ1ZmZlciBvYmpl Y3QiKSk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJfQorCX0KKwl0diA9IE5VTEw7ICAvKiBO byBsb25nZXIgdmFsaWQgbm9yIG5lZWRlZC4gKi8KKworCWhfdGhpcyA9IGR1a19fcmVxdWlyZV9i dWZvYmpfdGhpcyh0aHIpOworCisJLyogU2xpY2Ugb2Zmc2V0cyBhcmUgZWxlbWVudCAobm90IGJ5 dGUpIG9mZnNldHMsIHdoaWNoIG9ubHkgbWF0dGVycworCSAqIGZvciBUeXBlZEFycmF5IHZpZXdz LCBOb2RlLmpzIEJ1ZmZlciBhbmQgQXJyYXlCdWZmZXIgaGF2ZSBzaGlmdAorCSAqIHplcm8gc28g Ynl0ZSBhbmQgZWxlbWVudCBvZmZzZXRzIGFyZSB0aGUgc2FtZS4gIE5lZ2F0aXZlIGluZGljZXMK KwkgKiBhcmUgY291bnRlZCBmcm9tIGVuZCBvZiBzbGljZSwgY3Jvc3NlZCBpbmRpY2VzIGFyZSBh bGxvd2VkIChhbmQKKwkgKiByZXN1bHQgaW4gemVybyBsZW5ndGggcmVzdWx0KSwgYW5kIGZpbmFs IHZhbHVlcyBhcmUgY2xhbXBlZAorCSAqIGFnYWluc3QgdGhlIGN1cnJlbnQgc2xpY2UuICBUaGVy ZSdzIGludGVudGlvbmFsbHkgbm8gY2hlY2sKKwkgKiBhZ2FpbnN0IHRoZSB1bmRlcmx5aW5nIGJ1 ZmZlciBoZXJlLgorCSAqLworCisJZHVrX19jbGFtcF9zdGFydGVuZF9uZWdpZHhfc2hpZnRlZCh0 aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX2ludF90KSBoX3Ro aXMtPmxlbmd0aCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWlu dDhfdCkgaF90aGlzLT5zaGlmdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAgLyppZHhfc3RhcnQqLywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEg LyppZHhfZW5kKi8sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRf b2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuZF9vZmZzZXQp OworCURVS19BU1NFUlQoZW5kX29mZnNldCA+PSBzdGFydF9vZmZzZXQpOworCURVS19BU1NFUlQo c3RhcnRfb2Zmc2V0ID49IDApOworCURVS19BU1NFUlQoZW5kX29mZnNldCA+PSAwKTsKKwlzbGlj ZV9sZW5ndGggPSAoZHVrX3VpbnRfdCkgKGVuZF9vZmZzZXQgLSBzdGFydF9vZmZzZXQpOworCisJ LyogVGhlIHJlc3VsdGluZyBidWZmZXIgb2JqZWN0IGdldHMgdGhlIHNhbWUgY2xhc3MgYW5kIHBy b3RvdHlwZSBhcworCSAqIHRoZSBidWZmZXIgaW4gJ3RoaXMnLCBlLmcuIGlmIHRoZSBpbnB1dCBp cyBhIFVpbnQ4QXJyYXkgdGhlCisJICogcmVzdWx0IGlzIGEgVWludDhBcnJheTsgaWYgdGhlIGlu cHV0IGlzIGEgRmxvYXQzMkFycmF5LCB0aGUKKwkgKiByZXN1bHQgaXMgYSBGbG9hdDMyQXJyYXku ICBUaGUgcmVzdWx0IGludGVybmFsIHByb3RvdHlwZSBzaG91bGQKKwkgKiBiZSB0aGUgZGVmYXVs dCBwcm90b3R5cGUgZm9yIHRoZSBjbGFzcyAoZS5nLiBpbml0aWFsIHZhbHVlIG9mCisJICogVWlu dDhBcnJheS5wcm90b3R5cGUpLCBub3QgY29waWVkIGZyb20gdGhlIGFyZ3VtZW50IChEdWt0YXBl IDEueAorCSAqIGRpZCB0aGF0KS4KKwkgKgorCSAqIE5vZGUuanMgQnVmZmVycyBoYXZlIHNwZWNp YWwgaGFuZGxpbmc6IHRoZXkncmUgVWludDhBcnJheXMgYXMgZmFyCisJICogYXMgdGhlIGludGVy bmFsIGNsYXNzIGlzIGNvbmNlcm5lZCwgc28gdGhlIG5ldyBCdWZmZXIgc2hvdWxkIGFsc28KKwkg KiBiZSBhbiBVaW50OEFycmF5IGJ1dCBpbmhlcml0IGZyb20gQnVmZmVyLnByb3RvdHlwZS4KKwkg Ki8KKwlyZXNfY2xhc3NfbnVtID0gRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUigoZHVrX2hv YmplY3QgKikgaF90aGlzKTsKKwlEVUtfQVNTRVJUKHJlc19jbGFzc19udW0gPj0gRFVLX0hPQkpF Q1RfQ0xBU1NfQlVGT0JKX01JTik7ICAvKiB0eXBlIGNoZWNrIGd1YXJhbnRlZXMgKi8KKwlEVUtf QVNTRVJUKHJlc19jbGFzc19udW0gPD0gRFVLX0hPQkpFQ1RfQ0xBU1NfQlVGT0JKX01BWCk7CisJ cmVzX3Byb3RvX2JpZHggPSBkdWtfX2J1ZmZlcl9wcm90b19mcm9tX2NsYXNzbnVtW3Jlc19jbGFz c19udW0gLSBEVUtfSE9CSkVDVF9DTEFTU19CVUZPQkpfTUlOXTsKKwlpZiAobWFnaWMgJiAweDA0 KSB7CisJCXJlc19wcm90b19iaWR4ID0gRFVLX0JJRFhfTk9ERUpTX0JVRkZFUl9QUk9UT1RZUEU7 CisJfQorCWhfYnVmb2JqID0gZHVrX3B1c2hfYnVmb2JqX3Jhdyh0aHIsCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQlVGT0JKIHwKKwkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MocmVz X2NsYXNzX251bSksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc19wcm90b19i aWR4KTsKKwlEVUtfQVNTRVJUKGhfYnVmb2JqICE9IE5VTEwpOworCisJRFVLX0FTU0VSVChoX2J1 Zm9iai0+bGVuZ3RoID09IDApOworCWhfYnVmb2JqLT5zaGlmdCA9IGhfdGhpcy0+c2hpZnQ7ICAv KiBpbmhlcml0ICovCisJaF9idWZvYmotPmVsZW1fdHlwZSA9IGhfdGhpcy0+ZWxlbV90eXBlOyAg LyogaW5oZXJpdCAqLworCWhfYnVmb2JqLT5pc190eXBlZGFycmF5ID0gbWFnaWMgJiAweDAxOwor CURVS19BU1NFUlQoaF9idWZvYmotPmlzX3R5cGVkYXJyYXkgPT0gMCB8fCBoX2J1Zm9iai0+aXNf dHlwZWRhcnJheSA9PSAxKTsKKworCWhfdmFsID0gaF90aGlzLT5idWY7CisJaWYgKGhfdmFsID09 IE5VTEwpIHsKKwkJRFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwl9CisKKwlp ZiAobWFnaWMgJiAweDAyKSB7CisJCS8qIG5vbi16ZXJvOiBtYWtlIGNvcHkgKi8KKwkJZHVrX3Vp bnQ4X3QgKnBfY29weTsKKwkJZHVrX3NpemVfdCBjb3B5X2xlbmd0aDsKKworCQlwX2NvcHkgPSAo ZHVrX3VpbnQ4X3QgKikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyX3plcm8odGhyLCAoZHVrX3NpemVf dCkgc2xpY2VfbGVuZ3RoKTsgIC8qIG11c3QgYmUgemVyb2VkLCBub3QgYWxsIGJ5dGVzIGFsd2F5 cyBjb3BpZWQgKi8KKwkJRFVLX0FTU0VSVChwX2NvcHkgIT0gTlVMTCk7CisKKwkJLyogQ29weSBz bGljZSwgcmVzcGVjdGluZyB1bmRlcmx5aW5nIGJ1ZmZlciBsaW1pdHM7IHJlbWFpbmRlcgorCQkg KiBpcyBsZWZ0IGFzIHplcm8uCisJCSAqLworCQljb3B5X2xlbmd0aCA9IERVS19IQlVGT0JKX0NM QU1QX0JZVEVMRU5HVEgoaF90aGlzLCBzbGljZV9sZW5ndGgpOworCQlkdWtfbWVtY3B5X3Vuc2Fm ZSgodm9pZCAqKSBwX2NvcHksCisJCSAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIChE VUtfSEJVRk9CSl9HRVRfU0xJQ0VfQkFTRSh0aHItPmhlYXAsIGhfdGhpcykgKyBzdGFydF9vZmZz ZXQpLAorCQkgICAgICAgICAgICAgICAgICBjb3B5X2xlbmd0aCk7CisKKwkJaF92YWwgPSBkdWtf a25vd25faGJ1ZmZlcih0aHIsIC0xKTsKKworCQloX2J1Zm9iai0+YnVmID0gaF92YWw7CisJCURV S19IQlVGRkVSX0lOQ1JFRih0aHIsIGhfdmFsKTsKKwkJaF9idWZvYmotPmxlbmd0aCA9IHNsaWNl X2xlbmd0aDsKKwkJRFVLX0FTU0VSVChoX2J1Zm9iai0+b2Zmc2V0ID09IDApOworCisJCWR1a19w b3AodGhyKTsgIC8qIHJlYWNoYWJsZSBzbyBwb3AgT0sgKi8KKwl9IGVsc2UgeworCQloX2J1Zm9i ai0+YnVmID0gaF92YWw7CisJCURVS19IQlVGRkVSX0lOQ1JFRih0aHIsIGhfdmFsKTsKKwkJaF9i dWZvYmotPmxlbmd0aCA9IHNsaWNlX2xlbmd0aDsKKwkJaF9idWZvYmotPm9mZnNldCA9IGhfdGhp cy0+b2Zmc2V0ICsgKGR1a191aW50X3QpIHN0YXJ0X29mZnNldDsKKworCQkvKiBDb3B5IHRoZSAu YnVmZmVyIHByb3BlcnR5LCBuZWVkZWQgZm9yIFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5 KCkuCisJCSAqCisJCSAqIFhYWDogbGltaXQgY29weSBvbmx5IGZvciBUeXBlZEFycmF5IGNsYXNz ZXMgc3BlY2lmaWNhbGx5PworCQkgKi8KKworCQlEVUtfQVNTRVJUKGhfYnVmb2JqLT5idWZfcHJv cCA9PSBOVUxMKTsKKwkJaF9idWZvYmotPmJ1Zl9wcm9wID0gaF90aGlzLT5idWZfcHJvcDsgIC8q IG1heSBiZSBOVUxMICovCisJCURVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwodGhyLCAoZHVr X2hvYmplY3QgKikgaF9idWZvYmotPmJ1Zl9wcm9wKTsKKwl9CisJLyogdW5iYWxhbmNlZCBzdGFj ayBvbiBwdXJwb3NlICovCisKKwlEVUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQoaF9idWZvYmopOwor CXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICov CisKKy8qCisgKiAgTm9kZS5qcyBCdWZmZXIuaXNFbmNvZGluZygpCisgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX25vZGVqc19idWZmZXJfaXNfZW5jb2RpbmcoZHVrX2h0aHJlYWQgKnRocikgeworCWNv bnN0IGNoYXIgKmVuY29kaW5nOworCisJLyogb25seSBhY2NlcHQgbG93ZXJjYXNlICd1dGY4JyBu b3cuICovCisKKwllbmNvZGluZyA9IGR1a190b19zdHJpbmcodGhyLCAwKTsKKwlEVUtfQVNTRVJU KGR1a19pc19zdHJpbmcodGhyLCAwKSk7ICAvKiBndWFyYW50ZWVkIGJ5IGR1a190b19zdHJpbmco KSAqLworCWR1a19wdXNoX2Jvb2xlYW4odGhyLCBEVUtfU1RSQ01QKGVuY29kaW5nLCAidXRmOCIp ID09IDApOworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9T VVBQT1JUICovCisKKy8qCisgKiAgTm9kZS5qcyBCdWZmZXIuaXNCdWZmZXIoKQorICovCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUwgZHVr X3JldF90IGR1a19iaV9ub2RlanNfYnVmZmVyX2lzX2J1ZmZlcihkdWtfaHRocmVhZCAqdGhyKSB7 CisJZHVrX2hvYmplY3QgKmg7CisJZHVrX2hvYmplY3QgKmhfcHJvdG87CisJZHVrX2Jvb2xfdCBy ZXQgPSAwOworCisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0aHIpID49IDEpOyAgLyogbmFyZ3Mg Ki8KKwloID0gZHVrX2dldF9ob2JqZWN0KHRociwgMCk7CisJaWYgKGggIT0gTlVMTCkgeworCQlo X3Byb3RvID0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9OT0RFSlNfQlVGRkVSX1BST1RPVFlQRV07 CisJCURVS19BU1NFUlQoaF9wcm90byAhPSBOVUxMKTsKKworCQloID0gRFVLX0hPQkpFQ1RfR0VU X1BST1RPVFlQRSh0aHItPmhlYXAsIGgpOworCQlpZiAoaCAhPSBOVUxMKSB7CisJCQlyZXQgPSBk dWtfaG9iamVjdF9wcm90b3R5cGVfY2hhaW5fY29udGFpbnModGhyLCBoLCBoX3Byb3RvLCAwIC8q aWdub3JlX2xvb3AqLyk7CisJCX0KKwl9CisKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgcmV0KTsK KwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAq LworCisvKgorICogIE5vZGUuanMgQnVmZmVyLmJ5dGVMZW5ndGgoKQorICovCisKKyNpZiBkZWZp bmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90 IGR1a19iaV9ub2RlanNfYnVmZmVyX2J5dGVfbGVuZ3RoKGR1a19odGhyZWFkICp0aHIpIHsKKwlj b25zdCBjaGFyICpzdHI7CisJZHVrX3NpemVfdCBsZW47CisKKwkvKiBBdCB0aGUgbW9tZW50IEJ1 ZmZlcig8c3RyPikgd2lsbCBqdXN0IHVzZSB0aGUgc3RyaW5nIGJ5dGVzIGFzCisJICogaXMgKGln bm9yaW5nIGVuY29kaW5nKSwgc28gd2UgcmV0dXJuIHRoZSBzdHJpbmcgbGVuZ3RoIGhlcmUKKwkg KiB1bmNvbmRpdGlvbmFsbHkuCisJICovCisKKwkvKiBYWFg6IHRvIGJlIHJldmlzZWQ7IE9sZCBO b2RlLmpzIGJlaGF2aW9yIGp1c3QgY29lcmNlcyBhbnkgYnVmZmVyCisJICogdmFsdWVzIHRvIHN0 cmluZzoKKwkgKiAkIG5vZGUKKwkgKiA+IEJ1ZmZlci5ieXRlTGVuZ3RoKG5ldyBVaW50MzJBcnJh eSgxMCkpCisJICogMjAKKwkgKiA+IEJ1ZmZlci5ieXRlTGVuZ3RoKG5ldyBVaW50MzJBcnJheSgx MDApKQorCSAqIDIwCisJICogKFRoZSAyMCBjb21lcyBmcm9tICdbb2JqZWN0IFVpbnQzMkFycmF5 XScubGVuZ3RoCisJICovCisKKwlzdHIgPSBkdWtfdG9fbHN0cmluZyh0aHIsIDAsICZsZW4pOwor CURVS19VTlJFRihzdHIpOworCWR1a19wdXNoX3NpemVfdCh0aHIsIGxlbik7CisJcmV0dXJuIDE7 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworLyoKKyAq ICBOb2RlLmpzIEJ1ZmZlci5jb25jYXQoKQorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVG RkVST0JKRUNUX1NVUFBPUlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9ub2RlanNf YnVmZmVyX2NvbmNhdChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hvYmplY3QgKmhfYXJnOwor CWR1a191aW50X3QgdG90YWxfbGVuZ3RoOworCWR1a19oYnVmb2JqICpoX2J1Zm9iajsKKwlkdWtf aGJ1Zm9iaiAqaF9idWZyZXM7CisJZHVrX2hidWZmZXIgKmhfdmFsOworCWR1a191aW50X3QgaSwg bjsKKwlkdWtfdWludDhfdCAqcDsKKwlkdWtfc2l6ZV90IHNwYWNlX2xlZnQ7CisJZHVrX3NpemVf dCBjb3B5X3NpemU7CisKKwkvKiBOb2RlLmpzIGFjY2VwdHMgb25seSBhY3R1YWwgQXJyYXlzLiAq LworCWhfYXJnID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIsIDApOworCWlmIChEVUtfSE9CSkVD VF9HRVRfQ0xBU1NfTlVNQkVSKGhfYXJnKSAhPSBEVUtfSE9CSkVDVF9DTEFTU19BUlJBWSkgewor CQlEVUtfRENFUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCX0KKworCS8qIENvbXB1dGUg cmVzdWx0IGxlbmd0aCBhbmQgdmFsaWRhdGUgYXJndW1lbnQgYnVmZmVycy4gKi8KKwluID0gKGR1 a191aW50X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgMCk7CisJdG90YWxfbGVuZ3RoID0gMDsKKwlm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCS8qIE5ldXRlcmVkIGNoZWNrcyBub3QgbmVjZXNz YXJ5IGhlcmU6IG5ldXRlcmVkIGJ1ZmZlcnMgaGF2ZQorCQkgKiB6ZXJvICdsZW5ndGgnIHNvIHdl J2xsIGVmZmVjdGl2ZWx5IHNraXAgdGhlbS4KKwkJICovCisJCURVS19BU1NFUlRfVE9QKHRociwg Mik7ICAvKiBbIGFycmF5IHRvdGFsTGVuZ3RoIF0gKi8KKwkJZHVrX2dldF9wcm9wX2luZGV4KHRo ciwgMCwgKGR1a191YXJyaWR4X3QpIGkpOyAgLyogLT4gWyBhcnJheSB0b3RhbExlbmd0aCBidWYg XSAqLworCQloX2J1Zm9iaiA9IGR1a19fcmVxdWlyZV9idWZvYmpfdmFsdWUodGhyLCAyKTsKKwkJ RFVLX0FTU0VSVChoX2J1Zm9iaiAhPSBOVUxMKTsKKwkJdG90YWxfbGVuZ3RoICs9IGhfYnVmb2Jq LT5sZW5ndGg7CisJCWlmIChEVUtfVU5MSUtFTFkodG90YWxfbGVuZ3RoIDwgaF9idWZvYmotPmxl bmd0aCkpIHsKKwkJCURVS19EQ0VSUk9SX1JBTkdFX0lOVkFMSURfQVJHUyh0aHIpOyAgLyogV3Jh cHBlZC4gKi8KKwkJfQorCQlkdWtfcG9wKHRocik7CisJfQorCS8qIEluIE5vZGUuanMgdjAuMTIu MSBhIDEtZWxlbWVudCBhcnJheSBpcyBzcGVjaWFsIGFuZCB3b24ndCBjcmVhdGUgYQorCSAqIGNv cHksIHRoaXMgd2FzIGZpeGVkIGxhdGVyIHNvIGFuIGV4cGxpY2l0IGNoZWNrIG5vIGxvbmdlciBu ZWVkZWQuCisJICovCisKKwkvKiBVc2VyIHRvdGFsTGVuZ3RoIG92ZXJyaWRlcyBhIGNvbXB1dGVk IGxlbmd0aCwgYnV0IHdlJ2xsIGNoZWNrCisJICogZXZlcnkgY29weSBpbiB0aGUgY29weSBsb29w LiAgTm90ZSB0aGF0IGR1a190b19pbnQoKSBjYW4KKwkgKiB0ZWNobmljYWxseSBoYXZlIGFyYml0 cmFyeSBzaWRlIGVmZmVjdHMgc28gd2UgbmVlZCB0byByZWNoZWNrCisJICogdGhlIGJ1ZmZlcnMg aW4gdGhlIGNvcHkgbG9vcC4KKwkgKi8KKwlpZiAoIWR1a19pc191bmRlZmluZWQodGhyLCAxKSAm JiBuID4gMCkgeworCQkvKiBGb3IgbiA9PSAwLCBOb2RlLmpzIGlnbm9yZXMgdG90YWxMZW5ndGgg YXJndW1lbnQgYW5kCisJCSAqIHJldHVybnMgYSB6ZXJvIGxlbmd0aCBidWZmZXIuCisJCSAqLwor CQlkdWtfaW50X3QgdG90YWxfbGVuZ3RoX3NpZ25lZDsKKwkJdG90YWxfbGVuZ3RoX3NpZ25lZCA9 IGR1a190b19pbnQodGhyLCAxKTsKKwkJaWYgKHRvdGFsX2xlbmd0aF9zaWduZWQgPCAwKSB7CisJ CQlEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElEX0FSR1ModGhyKTsKKwkJfQorCQl0b3RhbF9sZW5n dGggPSAoZHVrX3VpbnRfdCkgdG90YWxfbGVuZ3RoX3NpZ25lZDsKKwl9CisKKwloX2J1ZnJlcyA9 IGR1a19wdXNoX2J1Zm9ial9yYXcodGhyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0JVRk9CSiB8CisJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX1VJ TlQ4QVJSQVkpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfQklEWF9OT0RF SlNfQlVGRkVSX1BST1RPVFlQRSk7CisJRFVLX0FTU0VSVChoX2J1ZnJlcyAhPSBOVUxMKTsKKwor CXAgPSAoZHVrX3VpbnQ4X3QgKikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyX3plcm8odGhyLCB0b3Rh bF9sZW5ndGgpOyAgLyogbXVzdCBiZSB6ZXJvZWQsIGFsbCBieXRlcyBub3QgbmVjZXNzYXJpbHkg d3JpdHRlbiBvdmVyICovCisJRFVLX0FTU0VSVChwICE9IE5VTEwpOworCXNwYWNlX2xlZnQgPSAo ZHVrX3NpemVfdCkgdG90YWxfbGVuZ3RoOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewor CQlEVUtfQVNTRVJUX1RPUCh0aHIsIDQpOyAgLyogWyBhcnJheSB0b3RhbExlbmd0aCBidWZyZXMg YnVmIF0gKi8KKworCQlkdWtfZ2V0X3Byb3BfaW5kZXgodGhyLCAwLCAoZHVrX3VhcnJpZHhfdCkg aSk7CisJCWhfYnVmb2JqID0gZHVrX19yZXF1aXJlX2J1Zm9ial92YWx1ZSh0aHIsIDQpOworCQlE VUtfQVNTRVJUKGhfYnVmb2JqICE9IE5VTEwpOworCisJCWNvcHlfc2l6ZSA9IGhfYnVmb2JqLT5s ZW5ndGg7CisJCWlmIChjb3B5X3NpemUgPiBzcGFjZV9sZWZ0KSB7CisJCQljb3B5X3NpemUgPSBz cGFjZV9sZWZ0OworCQl9CisKKwkJaWYgKGhfYnVmb2JqLT5idWYgIT0gTlVMTCAmJgorCQkgICAg RFVLX0hCVUZPQkpfVkFMSURfU0xJQ0UoaF9idWZvYmopKSB7CisJCQlkdWtfbWVtY3B5X3Vuc2Fm ZSgodm9pZCAqKSBwLAorCQkJICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgRFVLX0hC VUZPQkpfR0VUX1NMSUNFX0JBU0UodGhyLT5oZWFwLCBoX2J1Zm9iaiksCisJCQkgICAgICAgICAg ICAgICAgICBjb3B5X3NpemUpOworCQl9IGVsc2UgeworCQkJLyogSnVzdCBza2lwLCBsZWF2aW5n IHplcm9lcyBpbiB0aGUgcmVzdWx0LiAqLworCQkJOworCQl9CisJCXAgKz0gY29weV9zaXplOwor CQlzcGFjZV9sZWZ0IC09IGNvcHlfc2l6ZTsKKworCQlkdWtfcG9wKHRocik7CisJfQorCisJaF92 YWwgPSBkdWtfa25vd25faGJ1ZmZlcih0aHIsIC0xKTsKKworCWR1a19fc2V0X2J1Zm9ial9idWZm ZXIodGhyLCBoX2J1ZnJlcywgaF92YWwpOworCWhfYnVmcmVzLT5pc190eXBlZGFycmF5ID0gMTsK KwlEVUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQoaF9idWZyZXMpOworCisJZHVrX3BvcCh0aHIpOyAg LyogcG9wIHBsYWluIGJ1ZmZlciwgbm93IHJlYWNoYWJsZSB0aHJvdWdoIGhfYnVmcmVzICovCisK KwlyZXR1cm4gMTsgIC8qIHJldHVybiBoX2J1ZnJlcyAqLworfQorI2VuZGlmICAvKiBEVUtfVVNF X0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisKKy8qCisgKiAgU2hhcmVkIHJlYWRmaWVsZCBhbmQg d3JpdGVmaWVsZCBtZXRob2RzCisgKgorICogIFRoZSByZWFkZmllbGQvd3JpdGVmaWVsZCBtZXRo b2RzIG5lZWQgc3VwcG9ydCBmb3IgZW5kaWFubmVzcyBhbmQgZmllbGQKKyAqICB0eXBlcy4gIEFs bCBvZmZzZXRzIGFyZSBieXRlIGJhc2VkIHNvIG5vIG9mZnNldCBzaGlmdGluZyBpcyBuZWVkZWQu CisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKy8qIEZv cm1hdCBvZiBtYWdpYywgYml0czoKKyAqICAgMC4uLjE6IGZpZWxkIHR5cGU7IDA9dWludDgsIDE9 dWludDE2LCAyPXVpbnQzMiwgMz1mbG9hdCwgND1kb3VibGUsIDU9dW51c2VkLCA2PXVudXNlZCwg Nz11bnVzZWQKKyAqICAgICAgIDM6IGVuZGlhbm5lc3M6IDA9bGl0dGxlLCAxPWJpZworICogICAg ICAgNDogc2lnbmVkOiAxPXllcywgMD1ubworICogICAgICAgNTogdHlwZWRhcnJheTogMT15ZXMs IDA9bm8KKyAqLworI2RlZmluZSAgRFVLX19GTERfOEJJVCAgICAgICAgIDAKKyNkZWZpbmUgIERV S19fRkxEXzE2QklUICAgICAgICAxCisjZGVmaW5lICBEVUtfX0ZMRF8zMkJJVCAgICAgICAgMgor I2RlZmluZSAgRFVLX19GTERfRkxPQVQgICAgICAgIDMKKyNkZWZpbmUgIERVS19fRkxEX0RPVUJM RSAgICAgICA0CisjZGVmaW5lICBEVUtfX0ZMRF9WQVJJTlQgICAgICAgNQorI2RlZmluZSAgRFVL X19GTERfQklHRU5ESUFOICAgICgxIDw8IDMpCisjZGVmaW5lICBEVUtfX0ZMRF9TSUdORUQgICAg ICAgKDEgPDwgNCkKKyNkZWZpbmUgIERVS19fRkxEX1RZUEVEQVJSQVkgICAoMSA8PCA1KQorCisv KiBYWFg6IHNwbGl0IGludG8gc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBlYWNoIGZpZWxkIHR5cGU/ ICovCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9idWZmZXJfcmVhZGZpZWxkKGR1a19o dGhyZWFkICp0aHIpIHsKKwlkdWtfc21hbGxfaW50X3QgbWFnaWMgPSAoZHVrX3NtYWxsX2ludF90 KSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKTsKKwlkdWtfc21hbGxfaW50X3QgbWFnaWNfZnR5 cGU7CisJZHVrX3NtYWxsX2ludF90IG1hZ2ljX2JpZ2VuZGlhbjsKKwlkdWtfc21hbGxfaW50X3Qg bWFnaWNfc2lnbmVkOworCWR1a19zbWFsbF9pbnRfdCBtYWdpY190eXBlZGFycmF5OworCWR1a19z bWFsbF9pbnRfdCBlbmRzd2FwOworCWR1a19oYnVmb2JqICpoX3RoaXM7CisJZHVrX2Jvb2xfdCBu b19hc3NlcnQ7CisJZHVrX2ludF90IG9mZnNldF9zaWduZWQ7CisJZHVrX3VpbnRfdCBvZmZzZXQ7 CisJZHVrX3VpbnRfdCBidWZmZXJfbGVuZ3RoOworCWR1a191aW50X3QgY2hlY2tfbGVuZ3RoOwor CWR1a191aW50OF90ICpidWY7CisJZHVrX2RvdWJsZV91bmlvbiBkdTsKKworCW1hZ2ljX2Z0eXBl ID0gbWFnaWMgJiAweDAwMDc7CisJbWFnaWNfYmlnZW5kaWFuID0gbWFnaWMgJiAweDAwMDg7CisJ bWFnaWNfc2lnbmVkID0gbWFnaWMgJiAweDAwMTA7CisJbWFnaWNfdHlwZWRhcnJheSA9IG1hZ2lj ICYgMHgwMDIwOworCisJaF90aGlzID0gZHVrX19yZXF1aXJlX2J1Zm9ial90aGlzKHRocik7ICAv KiBYWFg6IHZlcnkgaW5lZmZpY2llbnQgZm9yIHBsYWluIGJ1ZmZlcnMgKi8KKwlEVUtfQVNTRVJU KGhfdGhpcyAhPSBOVUxMKTsKKwlidWZmZXJfbGVuZ3RoID0gaF90aGlzLT5sZW5ndGg7CisKKwkv KiBbIG9mZnNldCBub0Fzc2VydCAgICAgICAgICAgICAgICAgXSwgd2hlbiBmdHlwZSAhPSBEVUtf X0ZMRF9WQVJJTlQgKi8KKwkvKiBbIG9mZnNldCBmaWVsZEJ5dGVMZW5ndGggbm9Bc3NlcnQgXSwg d2hlbiBmdHlwZSA9PSBEVUtfX0ZMRF9WQVJJTlQgKi8KKwkvKiBbIG9mZnNldCBsaXR0bGVFbmRp YW4gICAgICAgICAgICAgXSwgd2hlbiBEVUtfX0ZMRF9UWVBFREFSUkFZIChyZWdhcmRsZXNzIG9m IGZ0eXBlKSAqLworCisJLyogSGFuZGxlIFR5cGVkQXJyYXkgdnMuIE5vZGUuanMgQnVmZmVyIGFy ZyBkaWZmZXJlbmNlcyAqLworCWlmIChtYWdpY190eXBlZGFycmF5KSB7CisJCW5vX2Fzc2VydCA9 IDA7CisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVHRVJfTEUpCisJCWVuZHN3YXAgPSAhZHVrX3Rv X2Jvb2xlYW4odGhyLCAxKTsgIC8qIDE9bGl0dGxlIGVuZGlhbiAqLworI2Vsc2UKKwkJZW5kc3dh cCA9IGR1a190b19ib29sZWFuKHRociwgMSk7ICAvKiAxPWxpdHRsZSBlbmRpYW4gKi8KKyNlbmRp ZgorCX0gZWxzZSB7CisJCW5vX2Fzc2VydCA9IGR1a190b19ib29sZWFuKHRociwgKG1hZ2ljX2Z0 eXBlID09IERVS19fRkxEX1ZBUklOVCkgPyAyIDogMSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0lO VEVHRVJfTEUpCisJCWVuZHN3YXAgPSBtYWdpY19iaWdlbmRpYW47CisjZWxzZQorCQllbmRzd2Fw ID0gIW1hZ2ljX2JpZ2VuZGlhbjsKKyNlbmRpZgorCX0KKworCS8qIE9mZnNldCBpcyBjb2VyY2Vk IGZpcnN0IHRvIHNpZ25lZCBpbnRlZ2VyIHJhbmdlIGFuZCB0aGVuIHRvIHVuc2lnbmVkLgorCSAq IFRoaXMgZW5zdXJlcyB3ZSBjYW4gYWRkIGEgc21hbGwgYnl0ZSBsZW5ndGggKDEtOCkgdG8gdGhl IG9mZnNldCBpbgorCSAqIGJvdW5kIGNoZWNrcyBhbmQgbm90IHdyYXAuCisJICovCisJb2Zmc2V0 X3NpZ25lZCA9IGR1a190b19pbnQodGhyLCAwKTsKKwlvZmZzZXQgPSAoZHVrX3VpbnRfdCkgb2Zm c2V0X3NpZ25lZDsKKwlpZiAob2Zmc2V0X3NpZ25lZCA8IDApIHsKKwkJZ290byBmYWlsX2JvdW5k czsKKwl9CisKKwlEVUtfREREKERVS19ERERQUklOVCgicmVhZGZpZWxkLCBidWZmZXJfbGVuZ3Ro PSVsZCwgb2Zmc2V0PSVsZCwgbm9fYXNzZXJ0PSVkLCAiCisJICAgICAgICAgICAgICAgICAgICAg Im1hZ2ljPSUwNHgsIG1hZ2ljX2ZpZWxkdHlwZT0lZCwgbWFnaWNfYmlnZW5kaWFuPSVkLCBtYWdp Y19zaWduZWQ9JWQsICIKKwkgICAgICAgICAgICAgICAgICAgICAiZW5kc3dhcD0lZCIsCisJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIGJ1ZmZlcl9sZW5ndGgsIChsb25nKSBvZmZzZXQsIChp bnQpIG5vX2Fzc2VydCwKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBtYWdp YywgKGludCkgbWFnaWNfZnR5cGUsIChpbnQpIChtYWdpY19iaWdlbmRpYW4gPj4gMyksCisJICAg ICAgICAgICAgICAgICAgICAgKGludCkgKG1hZ2ljX3NpZ25lZCA+PiA0KSwgKGludCkgZW5kc3dh cCkpOworCisJLyogVXBkYXRlICdidWZmZXJfbGVuZ3RoJyB0byBiZSB0aGUgZWZmZWN0aXZlLCBz YWZlIGxpbWl0IHdoaWNoCisJICogdGFrZXMgaW50byBhY2NvdW50IHRoZSB1bmRlcmx5aW5nIGJ1 ZmZlci4gIFRoaXMgdmFsdWUgd2lsbCBiZQorCSAqIHBvdGVudGlhbGx5IGludmFsaWRhdGVkIGJ5 IGFueSBzaWRlIGVmZmVjdC4KKwkgKi8KKwljaGVja19sZW5ndGggPSBEVUtfSEJVRk9CSl9DTEFN UF9CWVRFTEVOR1RIKGhfdGhpcywgYnVmZmVyX2xlbmd0aCk7CisJRFVLX0RERChEVUtfREREUFJJ TlQoImJ1ZmZlcl9sZW5ndGg9JWxkLCBjaGVja19sZW5ndGg9JWxkIiwKKwkgICAgICAgICAgICAg ICAgICAgICAobG9uZykgYnVmZmVyX2xlbmd0aCwgKGxvbmcpIGNoZWNrX2xlbmd0aCkpOworCisJ aWYgKGhfdGhpcy0+YnVmKSB7CisJCWJ1ZiA9IERVS19IQlVGT0JKX0dFVF9TTElDRV9CQVNFKHRo ci0+aGVhcCwgaF90aGlzKTsKKwl9IGVsc2UgeworCQkvKiBOZXV0ZXJlZC4gIFdlIGNvdWxkIGdv IGludG8gdGhlIHN3aXRjaC1jYXNlIHNhZmVseSB3aXRoCisJCSAqIGJ1ZiA9PSBOVUxMIGJlY2F1 c2UgY2hlY2tfbGVuZ3RoID09IDAuICBUbyBhdm9pZCBzY2FuYnVpbGQKKwkJICogd2FybmluZ3Ms IGZhaWwgZGlyZWN0bHkgaW5zdGVhZC4KKwkJICovCisJCURVS19BU1NFUlQoY2hlY2tfbGVuZ3Ro ID09IDApOworCQlnb3RvIGZhaWxfbmV1dGVyZWQ7CisJfQorCURVS19BU1NFUlQoYnVmICE9IE5V TEwpOworCisJc3dpdGNoIChtYWdpY19mdHlwZSkgeworCWNhc2UgRFVLX19GTERfOEJJVDogewor CQlkdWtfdWludDhfdCB0bXA7CisJCWlmIChvZmZzZXQgKyAxVSA+IGNoZWNrX2xlbmd0aCkgewor CQkJZ290byBmYWlsX2JvdW5kczsKKwkJfQorCQl0bXAgPSBidWZbb2Zmc2V0XTsKKwkJaWYgKG1h Z2ljX3NpZ25lZCkgeworCQkJZHVrX3B1c2hfaW50KHRociwgKGR1a19pbnRfdCkgKChkdWtfaW50 OF90KSB0bXApKTsKKwkJfSBlbHNlIHsKKwkJCWR1a19wdXNoX3VpbnQodGhyLCAoZHVrX3VpbnRf dCkgdG1wKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBEVUtfX0ZMRF8xNkJJVDogeworCQlk dWtfdWludDE2X3QgdG1wOworCQlpZiAob2Zmc2V0ICsgMlUgPiBjaGVja19sZW5ndGgpIHsKKwkJ CWdvdG8gZmFpbF9ib3VuZHM7CisJCX0KKwkJZHVrX21lbWNweSgodm9pZCAqKSBkdS51YywgKGNv bnN0IHZvaWQgKikgKGJ1ZiArIG9mZnNldCksIDIpOworCQl0bXAgPSBkdS51c1swXTsKKwkJaWYg KGVuZHN3YXApIHsKKwkJCXRtcCA9IERVS19CU1dBUDE2KHRtcCk7CisJCX0KKwkJaWYgKG1hZ2lj X3NpZ25lZCkgeworCQkJZHVrX3B1c2hfaW50KHRociwgKGR1a19pbnRfdCkgKChkdWtfaW50MTZf dCkgdG1wKSk7CisJCX0gZWxzZSB7CisJCQlkdWtfcHVzaF91aW50KHRociwgKGR1a191aW50X3Qp IHRtcCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX19GTERfMzJCSVQ6IHsKKwkJZHVr X3VpbnQzMl90IHRtcDsKKwkJaWYgKG9mZnNldCArIDRVID4gY2hlY2tfbGVuZ3RoKSB7CisJCQln b3RvIGZhaWxfYm91bmRzOworCQl9CisJCWR1a19tZW1jcHkoKHZvaWQgKikgZHUudWMsIChjb25z dCB2b2lkICopIChidWYgKyBvZmZzZXQpLCA0KTsKKwkJdG1wID0gZHUudWlbMF07CisJCWlmIChl bmRzd2FwKSB7CisJCQl0bXAgPSBEVUtfQlNXQVAzMih0bXApOworCQl9CisJCWlmIChtYWdpY19z aWduZWQpIHsKKwkJCWR1a19wdXNoX2ludCh0aHIsIChkdWtfaW50X3QpICgoZHVrX2ludDMyX3Qp IHRtcCkpOworCQl9IGVsc2UgeworCQkJZHVrX3B1c2hfdWludCh0aHIsIChkdWtfdWludF90KSB0 bXApOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERVS19fRkxEX0ZMT0FUOiB7CisJCWR1a191 aW50MzJfdCB0bXA7CisJCWlmIChvZmZzZXQgKyA0VSA+IGNoZWNrX2xlbmd0aCkgeworCQkJZ290 byBmYWlsX2JvdW5kczsKKwkJfQorCQlkdWtfbWVtY3B5KCh2b2lkICopIGR1LnVjLCAoY29uc3Qg dm9pZCAqKSAoYnVmICsgb2Zmc2V0KSwgNCk7CisJCWlmIChlbmRzd2FwKSB7CisJCQl0bXAgPSBk dS51aVswXTsKKwkJCXRtcCA9IERVS19CU1dBUDMyKHRtcCk7CisJCQlkdS51aVswXSA9IHRtcDsK KwkJfQorCQlkdWtfcHVzaF9udW1iZXIodGhyLCAoZHVrX2RvdWJsZV90KSBkdS5mWzBdKTsKKwkJ YnJlYWs7CisJfQorCWNhc2UgRFVLX19GTERfRE9VQkxFOiB7CisJCWlmIChvZmZzZXQgKyA4VSA+ IGNoZWNrX2xlbmd0aCkgeworCQkJZ290byBmYWlsX2JvdW5kczsKKwkJfQorCQlkdWtfbWVtY3B5 KCh2b2lkICopIGR1LnVjLCAoY29uc3Qgdm9pZCAqKSAoYnVmICsgb2Zmc2V0KSwgOCk7CisJCWlm IChlbmRzd2FwKSB7CisJCQlEVUtfREJMVU5JT05fQlNXQVA2NCgmZHUpOworCQl9CisJCWR1a19w dXNoX251bWJlcih0aHIsIChkdWtfZG91YmxlX3QpIGR1LmQpOworCQlicmVhazsKKwl9CisJY2Fz ZSBEVUtfX0ZMRF9WQVJJTlQ6IHsKKwkJLyogTm9kZS5qcyBCdWZmZXIgdmFyaWFibGUgd2lkdGgg aW50ZWdlciBmaWVsZC4gIFdlIGRvbid0IHJlYWxseQorCQkgKiBjYXJlIGFib3V0IHNwZWVkIGhl cmUsIHNvIGFpbSBmb3Igc2hvcnRlc3QgYWxnb3JpdGhtLgorCQkgKi8KKwkJZHVrX2ludF90IGZp ZWxkX2J5dGVsZW47CisJCWR1a19pbnRfdCBpLCBpX3N0ZXAsIGlfZW5kOworI2lmIGRlZmluZWQo RFVLX1VTRV82NEJJVF9PUFMpCisJCWR1a19pbnQ2NF90IHRtcDsKKwkJZHVrX3NtYWxsX3VpbnRf dCBzaGlmdF90bXA7CisjZWxzZQorCQlkdWtfZG91YmxlX3QgdG1wOworCQlkdWtfc21hbGxfaW50 X3QgaGlnaGJ5dGU7CisjZW5kaWYKKwkJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisKKwkJZmllbGRf Ynl0ZWxlbiA9IGR1a19nZXRfaW50KHRociwgMSk7ICAvKiBhdm9pZCBzaWRlIGVmZmVjdHMhICov CisJCWlmIChmaWVsZF9ieXRlbGVuIDwgMSB8fCBmaWVsZF9ieXRlbGVuID4gNikgeworCQkJZ290 byBmYWlsX2ZpZWxkX2xlbmd0aDsKKwkJfQorCQlpZiAob2Zmc2V0ICsgKGR1a191aW50X3QpIGZp ZWxkX2J5dGVsZW4gPiBjaGVja19sZW5ndGgpIHsKKwkJCWdvdG8gZmFpbF9ib3VuZHM7CisJCX0K KwkJcCA9IChjb25zdCBkdWtfdWludDhfdCAqKSAoYnVmICsgb2Zmc2V0KTsKKworCQkvKiBTbG93 IGdhdGhlcmluZyBvZiB2YWx1ZSB1c2luZyBlaXRoZXIgNjQtYml0IGFyaXRobWV0aWMKKwkJICog b3IgSUVFRSBkb3VibGVzIGlmIDY0LWJpdCB0eXBlcyBub3QgYXZhaWxhYmxlLiAgSGFuZGxpbmcK KwkJICogb2YgbmVnYXRpdmUgbnVtYmVycyBpcyBhIGJpdCBub24tb2J2aW91cyBpbiBib3RoIGNh c2VzLgorCQkgKi8KKworCQlpZiAobWFnaWNfYmlnZW5kaWFuKSB7CisJCQkvKiBHYXRoZXIgaW4g YmlnIGVuZGlhbiAqLworCQkJaSA9IDA7CisJCQlpX3N0ZXAgPSAxOworCQkJaV9lbmQgPSBmaWVs ZF9ieXRlbGVuOyAgLyogb25lIGlfc3RlcCBvdmVyICovCisJCX0gZWxzZSB7CisJCQkvKiBHYXRo ZXIgaW4gbGl0dGxlIGVuZGlhbiAqLworCQkJaSA9IGZpZWxkX2J5dGVsZW4gLSAxOworCQkJaV9z dGVwID0gLTE7CisJCQlpX2VuZCA9IC0xOyAgLyogb25lIGlfc3RlcCBvdmVyICovCisJCX0KKwor I2lmIGRlZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisJCXRtcCA9IDA7CisJCWRvIHsKKwkJCURV S19BU1NFUlQoaSA+PSAwICYmIGkgPCBmaWVsZF9ieXRlbGVuKTsKKwkJCXRtcCA9ICh0bXAgPDwg OCkgKyAoZHVrX2ludDY0X3QpIHBbaV07CisJCQlpICs9IGlfc3RlcDsKKwkJfSB3aGlsZSAoaSAh PSBpX2VuZCk7CisKKwkJaWYgKG1hZ2ljX3NpZ25lZCkgeworCQkJLyogU2hpZnQgdG8gc2lnbiBl eHRlbmQuICBMZWZ0IHNoaWZ0IG11c3QgYmUgdW5zaWduZWQKKwkJCSAqIHRvIGF2b2lkIHVuZGVm aW5lZCBiZWhhdmlvcjsgcmlnaHQgc2hpZnQgbXVzdCBiZQorCQkJICogc2lnbmVkIHRvIHNpZ24g ZXh0ZW5kIHByb3Blcmx5LgorCQkJICovCisJCQlzaGlmdF90bXAgPSAoZHVrX3NtYWxsX3VpbnRf dCkgKDY0VSAtIChkdWtfc21hbGxfdWludF90KSBmaWVsZF9ieXRlbGVuICogOFUpOworCQkJdG1w ID0gKGR1a19pbnQ2NF90KSAoKGR1a191aW50NjRfdCkgdG1wIDw8IHNoaWZ0X3RtcCkgPj4gc2hp ZnRfdG1wOworCQl9CisKKwkJZHVrX3B1c2hfaTY0KHRociwgdG1wKTsKKyNlbHNlCisJCWhpZ2hi eXRlID0gcFtpXTsKKwkJaWYgKG1hZ2ljX3NpZ25lZCAmJiAoaGlnaGJ5dGUgJiAweDgwKSAhPSAw KSB7CisJCQkvKiAweGZmID0+IDI1NSAtIDI1NiA9IC0xOyAweDgwID0+IDEyOCAtIDI1NiA9IC0x MjggKi8KKwkJCXRtcCA9IChkdWtfZG91YmxlX3QpIChoaWdoYnl0ZSAtIDI1Nik7CisJCX0gZWxz ZSB7CisJCQl0bXAgPSAoZHVrX2RvdWJsZV90KSBoaWdoYnl0ZTsKKwkJfQorCQlmb3IgKDs7KSB7 CisJCQlpICs9IGlfc3RlcDsKKwkJCWlmIChpID09IGlfZW5kKSB7CisJCQkJYnJlYWs7CisJCQl9 CisJCQlEVUtfQVNTRVJUKGkgPj0gMCAmJiBpIDwgZmllbGRfYnl0ZWxlbik7CisJCQl0bXAgPSAo dG1wICogMjU2LjApICsgKGR1a19kb3VibGVfdCkgcFtpXTsKKwkJfQorCisJCWR1a19wdXNoX251 bWJlcih0aHIsIHRtcCk7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsgIC8qIHNo b3VsZCBuZXZlciBoYXBwZW4gYnV0IGRlZmF1bHQgaGVyZSAqLworCQlnb3RvIGZhaWxfYm91bmRz OworCX0KKwl9CisKKwlyZXR1cm4gMTsKKworIGZhaWxfbmV1dGVyZWQ6CisgZmFpbF9maWVsZF9s ZW5ndGg6CisgZmFpbF9ib3VuZHM6CisJaWYgKG5vX2Fzc2VydCkgeworCQkvKiBOb2RlLmpzIHJl dHVybiB2YWx1ZSBmb3Igbm9Bc3NlcnQgb3V0LW9mLWJvdW5kcyByZWFkcyBpcworCQkgKiB1c3Vh bGx5IChidXQgbm90IGFsd2F5cykgTmFOLiAgUmV0dXJuIE5hTiBjb25zaXN0ZW50bHkuCisJCSAq LworCQlkdWtfcHVzaF9uYW4odGhyKTsKKwkJcmV0dXJuIDE7CisJfQorCURVS19EQ0VSUk9SX1JB TkdFX0lOVkFMSURfQVJHUyh0aHIpOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVD VF9TVVBQT1JUICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQp CisvKiBYWFg6IHNwbGl0IGludG8gc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBlYWNoIGZpZWxkIHR5 cGU/ICovCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9idWZmZXJfd3JpdGVmaWVsZChk dWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3NtYWxsX2ludF90IG1hZ2ljID0gKGR1a19zbWFsbF9p bnRfdCkgZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisJZHVrX3NtYWxsX2ludF90IG1hZ2lj X2Z0eXBlOworCWR1a19zbWFsbF9pbnRfdCBtYWdpY19iaWdlbmRpYW47CisJZHVrX3NtYWxsX2lu dF90IG1hZ2ljX3NpZ25lZDsKKwlkdWtfc21hbGxfaW50X3QgbWFnaWNfdHlwZWRhcnJheTsKKwlk dWtfc21hbGxfaW50X3QgZW5kc3dhcDsKKwlkdWtfaGJ1Zm9iaiAqaF90aGlzOworCWR1a19ib29s X3Qgbm9fYXNzZXJ0OworCWR1a19pbnRfdCBvZmZzZXRfc2lnbmVkOworCWR1a191aW50X3Qgb2Zm c2V0OworCWR1a191aW50X3QgYnVmZmVyX2xlbmd0aDsKKwlkdWtfdWludF90IGNoZWNrX2xlbmd0 aDsKKwlkdWtfdWludDhfdCAqYnVmOworCWR1a19kb3VibGVfdW5pb24gZHU7CisJZHVrX2ludF90 IG5ieXRlcyA9IDA7CisKKwltYWdpY19mdHlwZSA9IG1hZ2ljICYgMHgwMDA3OworCW1hZ2ljX2Jp Z2VuZGlhbiA9IG1hZ2ljICYgMHgwMDA4OworCW1hZ2ljX3NpZ25lZCA9IG1hZ2ljICYgMHgwMDEw OworCW1hZ2ljX3R5cGVkYXJyYXkgPSBtYWdpYyAmIDB4MDAyMDsKKwlEVUtfVU5SRUYobWFnaWNf c2lnbmVkKTsKKworCWhfdGhpcyA9IGR1a19fcmVxdWlyZV9idWZvYmpfdGhpcyh0aHIpOyAgLyog WFhYOiB2ZXJ5IGluZWZmaWNpZW50IGZvciBwbGFpbiBidWZmZXJzICovCisJRFVLX0FTU0VSVCho X3RoaXMgIT0gTlVMTCk7CisJYnVmZmVyX2xlbmd0aCA9IGhfdGhpcy0+bGVuZ3RoOworCisJLyog WyB2YWx1ZSAgb2Zmc2V0IG5vQXNzZXJ0ICAgICAgICAgICAgICAgICBdLCB3aGVuIGZ0eXBlICE9 IERVS19fRkxEX1ZBUklOVCAqLworCS8qIFsgdmFsdWUgIG9mZnNldCBmaWVsZEJ5dGVMZW5ndGgg bm9Bc3NlcnQgXSwgd2hlbiBmdHlwZSA9PSBEVUtfX0ZMRF9WQVJJTlQgKi8KKwkvKiBbIG9mZnNl dCB2YWx1ZSAgbGl0dGxlRW5kaWFuICAgICAgICAgICAgIF0sIHdoZW4gRFVLX19GTERfVFlQRURB UlJBWSAocmVnYXJkbGVzcyBvZiBmdHlwZSkgKi8KKworCS8qIEhhbmRsZSBUeXBlZEFycmF5IHZz LiBOb2RlLmpzIEJ1ZmZlciBhcmcgZGlmZmVyZW5jZXMgKi8KKwlpZiAobWFnaWNfdHlwZWRhcnJh eSkgeworCQlub19hc3NlcnQgPSAwOworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFR0VSX0xFKQor CQllbmRzd2FwID0gIWR1a190b19ib29sZWFuKHRociwgMik7ICAvKiAxPWxpdHRsZSBlbmRpYW4g Ki8KKyNlbHNlCisJCWVuZHN3YXAgPSBkdWtfdG9fYm9vbGVhbih0aHIsIDIpOyAgLyogMT1saXR0 bGUgZW5kaWFuICovCisjZW5kaWYKKwkJZHVrX3N3YXAodGhyLCAwLCAxKTsgIC8qIG9mZnNldC92 YWx1ZSBvcmRlciBkaWZmZXJlbnQgZnJvbSBOb2RlLmpzICovCisJfSBlbHNlIHsKKwkJbm9fYXNz ZXJ0ID0gZHVrX3RvX2Jvb2xlYW4odGhyLCAobWFnaWNfZnR5cGUgPT0gRFVLX19GTERfVkFSSU5U KSA/IDMgOiAyKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfSU5URUdFUl9MRSkKKwkJZW5kc3dhcCA9 IG1hZ2ljX2JpZ2VuZGlhbjsKKyNlbHNlCisJCWVuZHN3YXAgPSAhbWFnaWNfYmlnZW5kaWFuOwor I2VuZGlmCisJfQorCisJLyogT2Zmc2V0IGlzIGNvZXJjZWQgZmlyc3QgdG8gc2lnbmVkIGludGVn ZXIgcmFuZ2UgYW5kIHRoZW4gdG8gdW5zaWduZWQuCisJICogVGhpcyBlbnN1cmVzIHdlIGNhbiBh ZGQgYSBzbWFsbCBieXRlIGxlbmd0aCAoMS04KSB0byB0aGUgb2Zmc2V0IGluCisJICogYm91bmQg Y2hlY2tzIGFuZCBub3Qgd3JhcC4KKwkgKi8KKwlvZmZzZXRfc2lnbmVkID0gZHVrX3RvX2ludCh0 aHIsIDEpOworCW9mZnNldCA9IChkdWtfdWludF90KSBvZmZzZXRfc2lnbmVkOworCisJLyogV2Ug bmVlZCAnbmJ5dGVzJyBldmVuIGZvciBhIGZhaWxlZCBvZmZzZXQ7IHJldHVybiB2YWx1ZSBtdXN0 IGJlCisJICogKG9mZnNldCArIG5ieXRlcykgZXZlbiB3aGVuIHdyaXRlIGZhaWxzIGR1ZSB0byBp bnZhbGlkIG9mZnNldC4KKwkgKi8KKwlpZiAobWFnaWNfZnR5cGUgIT0gRFVLX19GTERfVkFSSU5U KSB7CisJCURVS19BU1NFUlQobWFnaWNfZnR5cGUgPj0gMCAmJiBtYWdpY19mdHlwZSA8IChkdWtf c21hbGxfaW50X3QpIChzaXplb2YoZHVrX19idWZmZXJfbmJ5dGVzX2Zyb21fZmxkdHlwZSkgLyBz aXplb2YoZHVrX3VpbnQ4X3QpKSk7CisJCW5ieXRlcyA9IGR1a19fYnVmZmVyX25ieXRlc19mcm9t X2ZsZHR5cGVbbWFnaWNfZnR5cGVdOworCX0gZWxzZSB7CisJCW5ieXRlcyA9IGR1a19nZXRfaW50 KHRociwgMik7CisJCWlmIChuYnl0ZXMgPCAxIHx8IG5ieXRlcyA+IDYpIHsKKwkJCWdvdG8gZmFp bF9maWVsZF9sZW5ndGg7CisJCX0KKwl9CisJRFVLX0FTU0VSVChuYnl0ZXMgPj0gMSAmJiBuYnl0 ZXMgPD0gOCk7CisKKwkvKiBOb3cgd2UgY2FuIGNoZWNrIG9mZnNldCB2YWxpZGl0eS4gKi8KKwlp ZiAob2Zmc2V0X3NpZ25lZCA8IDApIHsKKwkJZ290byBmYWlsX2JvdW5kczsKKwl9CisKKwlEVUtf REREKERVS19ERERQUklOVCgid3JpdGVmaWVsZCwgdmFsdWU9JSFULCBidWZmZXJfbGVuZ3RoPSVs ZCwgb2Zmc2V0PSVsZCwgbm9fYXNzZXJ0PSVkLCAiCisJICAgICAgICAgICAgICAgICAgICAgIm1h Z2ljPSUwNHgsIG1hZ2ljX2ZpZWxkdHlwZT0lZCwgbWFnaWNfYmlnZW5kaWFuPSVkLCBtYWdpY19z aWduZWQ9JWQsICIKKwkgICAgICAgICAgICAgICAgICAgICAiZW5kc3dhcD0lZCIsCisJICAgICAg ICAgICAgICAgICAgICAgZHVrX2dldF90dmFsKHRociwgMCksIChsb25nKSBidWZmZXJfbGVuZ3Ro LCAobG9uZykgb2Zmc2V0LCAoaW50KSBub19hc3NlcnQsCisJICAgICAgICAgICAgICAgICAgICAg KHVuc2lnbmVkIGludCkgbWFnaWMsIChpbnQpIG1hZ2ljX2Z0eXBlLCAoaW50KSAobWFnaWNfYmln ZW5kaWFuID4+IDMpLAorCSAgICAgICAgICAgICAgICAgICAgIChpbnQpIChtYWdpY19zaWduZWQg Pj4gNCksIChpbnQpIGVuZHN3YXApKTsKKworCS8qIENvZXJjZSB2YWx1ZSB0byBhIG51bWJlciBi ZWZvcmUgY29tcHV0aW5nIGNoZWNrX2xlbmd0aCwgc28gdGhhdAorCSAqIHRoZSBmaWVsZCB0eXBl IHNwZWNpZmljIGNvZXJjaW9uIGJlbG93IGNhbid0IGhhdmUgc2lkZSBlZmZlY3RzCisJICogdGhh dCB3b3VsZCBpbnZhbGlkYXRlIGNoZWNrX2xlbmd0aC4KKwkgKi8KKwlkdWtfdG9fbnVtYmVyKHRo ciwgMCk7CisKKwkvKiBVcGRhdGUgJ2J1ZmZlcl9sZW5ndGgnIHRvIGJlIHRoZSBlZmZlY3RpdmUs IHNhZmUgbGltaXQgd2hpY2gKKwkgKiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHVuZGVybHlpbmcg YnVmZmVyLiAgVGhpcyB2YWx1ZSB3aWxsIGJlCisJICogcG90ZW50aWFsbHkgaW52YWxpZGF0ZWQg YnkgYW55IHNpZGUgZWZmZWN0LgorCSAqLworCWNoZWNrX2xlbmd0aCA9IERVS19IQlVGT0JKX0NM QU1QX0JZVEVMRU5HVEgoaF90aGlzLCBidWZmZXJfbGVuZ3RoKTsKKwlEVUtfREREKERVS19ERERQ UklOVCgiYnVmZmVyX2xlbmd0aD0lbGQsIGNoZWNrX2xlbmd0aD0lbGQiLAorCSAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBidWZmZXJfbGVuZ3RoLCAobG9uZykgY2hlY2tfbGVuZ3RoKSk7CisK KwlpZiAoaF90aGlzLT5idWYpIHsKKwkJYnVmID0gRFVLX0hCVUZPQkpfR0VUX1NMSUNFX0JBU0Uo dGhyLT5oZWFwLCBoX3RoaXMpOworCX0gZWxzZSB7CisJCS8qIE5ldXRlcmVkLiAgV2UgY291bGQg Z28gaW50byB0aGUgc3dpdGNoLWNhc2Ugc2FmZWx5IHdpdGgKKwkJICogYnVmID09IE5VTEwgYmVj YXVzZSBjaGVja19sZW5ndGggPT0gMC4gIFRvIGF2b2lkIHNjYW5idWlsZAorCQkgKiB3YXJuaW5n cywgZmFpbCBkaXJlY3RseSBpbnN0ZWFkLgorCQkgKi8KKwkJRFVLX0FTU0VSVChjaGVja19sZW5n dGggPT0gMCk7CisJCWdvdG8gZmFpbF9uZXV0ZXJlZDsKKwl9CisJRFVLX0FTU0VSVChidWYgIT0g TlVMTCk7CisKKwlzd2l0Y2ggKG1hZ2ljX2Z0eXBlKSB7CisJY2FzZSBEVUtfX0ZMRF84QklUOiB7 CisJCWlmIChvZmZzZXQgKyAxVSA+IGNoZWNrX2xlbmd0aCkgeworCQkJZ290byBmYWlsX2JvdW5k czsKKwkJfQorCQkvKiBzaWduIGRvZXNuJ3QgbWF0dGVyIHdoZW4gd3JpdGluZyAqLworCQlidWZb b2Zmc2V0XSA9IChkdWtfdWludDhfdCkgZHVrX3RvX3VpbnQzMih0aHIsIDApOworCQlicmVhazsK Kwl9CisJY2FzZSBEVUtfX0ZMRF8xNkJJVDogeworCQlkdWtfdWludDE2X3QgdG1wOworCQlpZiAo b2Zmc2V0ICsgMlUgPiBjaGVja19sZW5ndGgpIHsKKwkJCWdvdG8gZmFpbF9ib3VuZHM7CisJCX0K KwkJdG1wID0gKGR1a191aW50MTZfdCkgZHVrX3RvX3VpbnQzMih0aHIsIDApOworCQlpZiAoZW5k c3dhcCkgeworCQkJdG1wID0gRFVLX0JTV0FQMTYodG1wKTsKKwkJfQorCQlkdS51c1swXSA9IHRt cDsKKwkJLyogc2lnbiBkb2Vzbid0IG1hdHRlciB3aGVuIHdyaXRpbmcgKi8KKwkJZHVrX21lbWNw eSgodm9pZCAqKSAoYnVmICsgb2Zmc2V0KSwgKGNvbnN0IHZvaWQgKikgZHUudWMsIDIpOworCQli cmVhazsKKwl9CisJY2FzZSBEVUtfX0ZMRF8zMkJJVDogeworCQlkdWtfdWludDMyX3QgdG1wOwor CQlpZiAob2Zmc2V0ICsgNFUgPiBjaGVja19sZW5ndGgpIHsKKwkJCWdvdG8gZmFpbF9ib3VuZHM7 CisJCX0KKwkJdG1wID0gKGR1a191aW50MzJfdCkgZHVrX3RvX3VpbnQzMih0aHIsIDApOworCQlp ZiAoZW5kc3dhcCkgeworCQkJdG1wID0gRFVLX0JTV0FQMzIodG1wKTsKKwkJfQorCQlkdS51aVsw XSA9IHRtcDsKKwkJLyogc2lnbiBkb2Vzbid0IG1hdHRlciB3aGVuIHdyaXRpbmcgKi8KKwkJZHVr X21lbWNweSgodm9pZCAqKSAoYnVmICsgb2Zmc2V0KSwgKGNvbnN0IHZvaWQgKikgZHUudWMsIDQp OworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfX0ZMRF9GTE9BVDogeworCQlkdWtfdWludDMyX3Qg dG1wOworCQlpZiAob2Zmc2V0ICsgNFUgPiBjaGVja19sZW5ndGgpIHsKKwkJCWdvdG8gZmFpbF9i b3VuZHM7CisJCX0KKwkJZHUuZlswXSA9IChkdWtfZmxvYXRfdCkgZHVrX3RvX251bWJlcih0aHIs IDApOworCQlpZiAoZW5kc3dhcCkgeworCQkJdG1wID0gZHUudWlbMF07CisJCQl0bXAgPSBEVUtf QlNXQVAzMih0bXApOworCQkJZHUudWlbMF0gPSB0bXA7CisJCX0KKwkJLyogc2lnbiBkb2Vzbid0 IG1hdHRlciB3aGVuIHdyaXRpbmcgKi8KKwkJZHVrX21lbWNweSgodm9pZCAqKSAoYnVmICsgb2Zm c2V0KSwgKGNvbnN0IHZvaWQgKikgZHUudWMsIDQpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtf X0ZMRF9ET1VCTEU6IHsKKwkJaWYgKG9mZnNldCArIDhVID4gY2hlY2tfbGVuZ3RoKSB7CisJCQln b3RvIGZhaWxfYm91bmRzOworCQl9CisJCWR1LmQgPSAoZHVrX2RvdWJsZV90KSBkdWtfdG9fbnVt YmVyKHRociwgMCk7CisJCWlmIChlbmRzd2FwKSB7CisJCQlEVUtfREJMVU5JT05fQlNXQVA2NCgm ZHUpOworCQl9CisJCS8qIHNpZ24gZG9lc24ndCBtYXR0ZXIgd2hlbiB3cml0aW5nICovCisJCWR1 a19tZW1jcHkoKHZvaWQgKikgKGJ1ZiArIG9mZnNldCksIChjb25zdCB2b2lkICopIGR1LnVjLCA4 KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX19GTERfVkFSSU5UOiB7CisJCS8qIE5vZGUuanMg QnVmZmVyIHZhcmlhYmxlIHdpZHRoIGludGVnZXIgZmllbGQuICBXZSBkb24ndCByZWFsbHkKKwkJ ICogY2FyZSBhYm91dCBzcGVlZCBoZXJlLCBzbyBhaW0gZm9yIHNob3J0ZXN0IGFsZ29yaXRobS4K KwkJICovCisJCWR1a19pbnRfdCBmaWVsZF9ieXRlbGVuOworCQlkdWtfaW50X3QgaSwgaV9zdGVw LCBpX2VuZDsKKyNpZiBkZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorCQlkdWtfaW50NjRfdCB0 bXA7CisjZWxzZQorCQlkdWtfZG91YmxlX3QgdG1wOworI2VuZGlmCisJCWR1a191aW50OF90ICpw OworCisJCWZpZWxkX2J5dGVsZW4gPSAoZHVrX2ludF90KSBuYnl0ZXM7CisJCWlmIChvZmZzZXQg KyAoZHVrX3VpbnRfdCkgZmllbGRfYnl0ZWxlbiA+IGNoZWNrX2xlbmd0aCkgeworCQkJZ290byBm YWlsX2JvdW5kczsKKwkJfQorCisJCS8qIFNsb3cgd3JpdGluZyBvZiB2YWx1ZSB1c2luZyBlaXRo ZXIgNjQtYml0IGFyaXRobWV0aWMKKwkJICogb3IgSUVFRSBkb3VibGVzIGlmIDY0LWJpdCB0eXBl cyBub3QgYXZhaWxhYmxlLiAgVGhlcmUncworCQkgKiBubyBzcGVjaWFsIHNpZ24gaGFuZGxpbmcg d2hlbiB3cml0aW5nIHZhcmludHMuCisJCSAqLworCisJCWlmIChtYWdpY19iaWdlbmRpYW4pIHsK KwkJCS8qIFdyaXRlIGluIGJpZyBlbmRpYW4gKi8KKwkJCWkgPSBmaWVsZF9ieXRlbGVuOyAgLyog b25lIGlfc3RlcCBhZGRlZCBhdCB0b3Agb2YgbG9vcCAqLworCQkJaV9zdGVwID0gLTE7CisJCQlp X2VuZCA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiBXcml0ZSBpbiBsaXR0bGUgZW5kaWFuICovCisJ CQlpID0gLTE7ICAvKiBvbmUgaV9zdGVwIGFkZGVkIGF0IHRvcCBvZiBsb29wICovCisJCQlpX3N0 ZXAgPSAxOworCQkJaV9lbmQgPSBmaWVsZF9ieXRlbGVuIC0gMTsKKwkJfQorCisJCS8qIFhYWDog VGhlIGR1a190b19udW1iZXIoKSBjYXN0IGZvbGxvd2VkIGJ5IGludGVnZXIgY29lcmNpb24KKwkJ ICogaXMgcGxhdGZvcm0gc3BlY2lmaWMgc28gTmFOLCArLy0gSW5maW5pdHksIGFuZCBvdXQtb2Yt Ym91bmRzCisJCSAqIHZhbHVlcyByZXN1bHQgaW4gcGxhdGZvcm0gc3BlY2lmaWMgb3V0cHV0IG5v dy4KKwkJICogU2VlOiB0ZXN0LWJpLW5vZGVqcy1idWZmZXItcHJvdG8tdmFyaW50LXNwZWNpYWwu anMKKwkJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorCQl0bXAgPSAoZHVr X2ludDY0X3QpIGR1a190b19udW1iZXIodGhyLCAwKTsKKwkJcCA9IChkdWtfdWludDhfdCAqKSAo YnVmICsgb2Zmc2V0KTsKKwkJZG8geworCQkJaSArPSBpX3N0ZXA7CisJCQlEVUtfQVNTRVJUKGkg Pj0gMCAmJiBpIDwgZmllbGRfYnl0ZWxlbik7CisJCQlwW2ldID0gKGR1a191aW50OF90KSAodG1w ICYgMHhmZik7CisJCQl0bXAgPSB0bXAgPj4gODsgIC8qIHVubmVjZXNzYXJ5IHNoaWZ0IGZvciBs YXN0IGJ5dGUgKi8KKwkJfSB3aGlsZSAoaSAhPSBpX2VuZCk7CisjZWxzZQorCQl0bXAgPSBkdWtf dG9fbnVtYmVyKHRociwgMCk7CisJCXAgPSAoZHVrX3VpbnQ4X3QgKikgKGJ1ZiArIG9mZnNldCk7 CisJCWRvIHsKKwkJCWkgKz0gaV9zdGVwOworCQkJdG1wID0gRFVLX0ZMT09SKHRtcCk7CisJCQlE VUtfQVNTRVJUKGkgPj0gMCAmJiBpIDwgZmllbGRfYnl0ZWxlbik7CisJCQlwW2ldID0gKGR1a191 aW50OF90KSAoRFVLX0ZNT0QodG1wLCAyNTYuMCkpOworCQkJdG1wID0gdG1wIC8gMjU2LjA7ICAv KiB1bm5lY2Vzc2FyeSBkaXYgZm9yIGxhc3QgYnl0ZSAqLworCQl9IHdoaWxlIChpICE9IGlfZW5k KTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJZGVmYXVsdDogeyAgLyogc2hvdWxkIG5ldmVyIGhh cHBlbiBidXQgZGVmYXVsdCBoZXJlICovCisJCWdvdG8gZmFpbF9ib3VuZHM7CisJfQorCX0KKwor CS8qIE5vZGUuanMgQnVmZmVyOiByZXR1cm4gb2Zmc2V0ICsgI2J5dGVzIHdyaXR0ZW4gKGkuZS4g bmV4dAorCSAqIHdyaXRlIG9mZnNldCkuCisJICovCisJaWYgKG1hZ2ljX3R5cGVkYXJyYXkpIHsK KwkJLyogRm9yIFR5cGVkQXJyYXlzICd1bmRlZmluZWQnIHJldHVybiB2YWx1ZSBpcyBzcGVjaWZp ZWQKKwkJICogYnkgRVMyMDE1IChtYXRjaGVzIFY4KS4KKwkJICovCisJCXJldHVybiAwOworCX0K KwlkdWtfcHVzaF91aW50KHRociwgb2Zmc2V0ICsgKGR1a191aW50X3QpIG5ieXRlcyk7CisJcmV0 dXJuIDE7CisKKyBmYWlsX25ldXRlcmVkOgorIGZhaWxfZmllbGRfbGVuZ3RoOgorIGZhaWxfYm91 bmRzOgorCWlmIChub19hc3NlcnQpIHsKKwkJLyogTm9kZS5qcyByZXR1cm4gdmFsdWUgZm9yIGZh aWxlZCB3cml0ZXMgaXMgb2Zmc2V0ICsgI2J5dGVzCisJCSAqIHRoYXQgd291bGQgaGF2ZSBiZWVu IHdyaXR0ZW4uCisJCSAqLworCQkvKiBYWFg6IGZvciBuZWdhdGl2ZSBpbnB1dCBvZmZzZXRzLCAn b2Zmc2V0JyB3aWxsIGJlIGEgbGFyZ2UKKwkJICogcG9zaXRpdmUgdmFsdWUgc28gdGhlIHJlc3Vs dCBoZXJlIGlzIGNvbmZ1c2luZy4KKwkJICovCisJCWlmIChtYWdpY190eXBlZGFycmF5KSB7CisJ CQlyZXR1cm4gMDsKKwkJfQorCQlkdWtfcHVzaF91aW50KHRociwgb2Zmc2V0ICsgKGR1a191aW50 X3QpIG5ieXRlcyk7CisJCXJldHVybiAxOworCX0KKwlEVUtfRENFUlJPUl9SQU5HRV9JTlZBTElE X0FSR1ModGhyKTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAq LworCisvKgorICogIEFjY2Vzc29ycyBmb3IgLmJ1ZmZlciwgLmJ5dGVMZW5ndGgsIC5ieXRlT2Zm c2V0CisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKK0RV S19MT0NBTCBkdWtfaGJ1Zm9iaiAqZHVrX19hdXRvc3Bhd25fYXJyYXlidWZmZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX2hidWZmZXIgKmhfYnVmKSB7CisJZHVrX2hidWZvYmogKmhfcmVzOworCisJ aF9yZXMgPSBkdWtfcHVzaF9idWZvYmpfcmF3KHRociwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19CVUZPQkogfAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19BUlJB WUJVRkZFUiksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19CSURYX0FSUkFZQlVG RkVSX1BST1RPVFlQRSk7CisJRFVLX0FTU0VSVChoX3JlcyAhPSBOVUxMKTsKKwlEVUtfVU5SRUYo aF9yZXMpOworCisJZHVrX19zZXRfYnVmb2JqX2J1ZmZlcih0aHIsIGhfcmVzLCBoX2J1Zik7CisJ RFVLX0FTU0VSVF9IQlVGT0JKX1ZBTElEKGhfcmVzKTsKKwlEVUtfQVNTRVJUKGhfcmVzLT5idWZf cHJvcCA9PSBOVUxMKTsKKwlyZXR1cm4gaF9yZXM7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0 X3QgZHVrX2JpX3R5cGVkYXJyYXlfYnVmZmVyX2dldHRlcihkdWtfaHRocmVhZCAqdGhyKSB7CisJ ZHVrX2hidWZvYmogKmhfYnVmb2JqOworCisJaF9idWZvYmogPSAoZHVrX2hidWZvYmogKikgZHVr X19nZXRyZXF1aXJlX2J1Zm9ial90aGlzKHRociwgRFVLX19CVUZPQkpfRkxBR19USFJPVyAvKmZs YWdzKi8pOworCURVS19BU1NFUlQoaF9idWZvYmogIT0gTlVMTCk7CisJaWYgKERVS19IRUFQSERS X0lTX0JVRkZFUigoZHVrX2hlYXBoZHIgKikgaF9idWZvYmopKSB7CisJCURVS19ERChEVUtfRERQ UklOVCgiYXV0b3NwYXduIEFycmF5QnVmZmVyIGZvciBwbGFpbiBidWZmZXIiKSk7CisJCSh2b2lk KSBkdWtfX2F1dG9zcGF3bl9hcnJheWJ1ZmZlcih0aHIsIChkdWtfaGJ1ZmZlciAqKSBoX2J1Zm9i aik7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWlmIChoX2J1Zm9iai0+YnVmX3Byb3AgPT0g TlVMTCAmJgorCQkgICAgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUigoZHVrX2hvYmplY3Qg KikgaF9idWZvYmopICE9IERVS19IT0JKRUNUX0NMQVNTX0FSUkFZQlVGRkVSICYmCisJCSAgICBo X2J1Zm9iai0+YnVmICE9IE5VTEwpIHsKKwkJCWR1a19oYnVmb2JqICpoX2FycmJ1ZjsKKworCQkJ RFVLX0REKERVS19ERFBSSU5UKCJhdXRvc3Bhd24gQXJyYXlCdWZmZXIgZm9yIHR5cGVkIGFycmF5 IG9yIERhdGFWaWV3IikpOworCQkJaF9hcnJidWYgPSBkdWtfX2F1dG9zcGF3bl9hcnJheWJ1ZmZl cih0aHIsIGhfYnVmb2JqLT5idWYpOworCisJCQlpZiAoaF9idWZvYmotPmJ1Zl9wcm9wID09IE5V TEwpIHsKKwkJCQkvKiBNdXN0IHJlY2hlY2sgYnVmX3Byb3AsIGluIGNhc2UgQXJyYXlCdWZmZXIK KwkJCQkgKiBhbGxvYyBoYWQgYSBzaWRlIGVmZmVjdCB3aGljaCBhbHJlYWR5IGZpbGxlZAorCQkJ CSAqIGl0IQorCQkJCSAqLworCisJCQkJLyogU2V0IEFycmF5QnVmZmVyJ3MgLmJ5dGVPZmZzZXQg YW5kIC5ieXRlTGVuZ3RoIGJhc2VkCisJCQkJICogb24gdGhlIHZpZXcgc28gdGhhdCBBcnJheWJ1 ZmZlclt2aWV3LmJ5dGVPZmZzZXRdCisJCQkJICogbWF0Y2hlcyB2aWV3WzBdLgorCQkJCSAqLwor CQkJCWhfYXJyYnVmLT5vZmZzZXQgPSAwOworCQkJCURVS19BU1NFUlQoaF9idWZvYmotPm9mZnNl dCArIGhfYnVmb2JqLT5sZW5ndGggPj0gaF9idWZvYmotPm9mZnNldCk7ICAvKiBXcmFwIGNoZWNr IG9uIGNyZWF0aW9uLiAqLworCQkJCWhfYXJyYnVmLT5sZW5ndGggPSBoX2J1Zm9iai0+b2Zmc2V0 ICsgaF9idWZvYmotPmxlbmd0aDsKKwkJCQlEVUtfQVNTRVJUKGhfYXJyYnVmLT5idWZfcHJvcCA9 PSBOVUxMKTsKKworCQkJCURVS19BU1NFUlQoaF9idWZvYmotPmJ1Zl9wcm9wID09IE5VTEwpOwor CQkJCWhfYnVmb2JqLT5idWZfcHJvcCA9IChkdWtfaG9iamVjdCAqKSBoX2FycmJ1ZjsKKwkJCQlE VUtfSEJVRk9CSl9JTkNSRUYodGhyLCBoX2FycmJ1Zik7ICAvKiBOb3cgcmVhY2hhYmxlIGFuZCBh Y2NvdW50ZWQgZm9yLiAqLworCQkJfQorCisJCQkvKiBMZWZ0IG9uIHN0YWNrOyBwdXNoZWQgZm9y IHRoZSBzZWNvbmQgdGltZSBiZWxvdyAoT0spLiAqLworCQl9CisJCWlmIChoX2J1Zm9iai0+YnVm X3Byb3ApIHsKKwkJCWR1a19wdXNoX2hvYmplY3QodGhyLCBoX2J1Zm9iai0+YnVmX3Byb3ApOwor CQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtf cmV0X3QgZHVrX2JpX3R5cGVkYXJyYXlfYnl0ZW9mZnNldF9nZXR0ZXIoZHVrX2h0aHJlYWQgKnRo cikgeworCWR1a19oYnVmb2JqICpoX2J1Zm9iajsKKworCWhfYnVmb2JqID0gKGR1a19oYnVmb2Jq ICopIGR1a19fZ2V0cmVxdWlyZV9idWZvYmpfdGhpcyh0aHIsIERVS19fQlVGT0JKX0ZMQUdfVEhS T1cgLypmbGFncyovKTsKKwlEVUtfQVNTRVJUKGhfYnVmb2JqICE9IE5VTEwpOworCWlmIChEVUtf SEVBUEhEUl9JU19CVUZGRVIoKGR1a19oZWFwaGRyICopIGhfYnVmb2JqKSkgeworCQlkdWtfcHVz aF91aW50KHRociwgMCk7CisJfSBlbHNlIHsKKwkJLyogSWYgbmV1dGVyZWQgbXVzdCByZXR1cm4g MDsgb2Zmc2V0IGlzIHplcm9lZCBkdXJpbmcKKwkJICogbmV1dGVyaW5nLgorCQkgKi8KKwkJZHVr X3B1c2hfdWludCh0aHIsIGhfYnVmb2JqLT5vZmZzZXQpOworCX0KKwlyZXR1cm4gMTsKK30KKwor RFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfdHlwZWRhcnJheV9ieXRlbGVuZ3RoX2dldHRl cihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hidWZvYmogKmhfYnVmb2JqOworCisJaF9idWZv YmogPSAoZHVrX2hidWZvYmogKikgZHVrX19nZXRyZXF1aXJlX2J1Zm9ial90aGlzKHRociwgRFVL X19CVUZPQkpfRkxBR19USFJPVyAvKmZsYWdzKi8pOworCURVS19BU1NFUlQoaF9idWZvYmogIT0g TlVMTCk7CisJaWYgKERVS19IRUFQSERSX0lTX0JVRkZFUigoZHVrX2hlYXBoZHIgKikgaF9idWZv YmopKSB7CisJCWR1a19oYnVmZmVyICpoX2J1ZjsKKworCQloX2J1ZiA9IChkdWtfaGJ1ZmZlciAq KSBoX2J1Zm9iajsKKwkJRFVLX0FTU0VSVChEVUtfSEJVRkZFUl9HRVRfU0laRShoX2J1ZikgPD0g RFVLX1VJTlRfTUFYKTsgIC8qIEJ1ZmZlciBsaW1pdHMuICovCisJCWR1a19wdXNoX3VpbnQodGhy LCAoZHVrX3VpbnRfdCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaF9idWYpKTsKKwl9IGVsc2Ugewor CQkvKiBJZiBuZXV0ZXJlZCBtdXN0IHJldHVybiAwOyBsZW5ndGggaXMgemVyb2VkIGR1cmluZwor CQkgKiBuZXV0ZXJpbmcuCisJCSAqLworCQlkdWtfcHVzaF91aW50KHRociwgaF9idWZvYmotPmxl bmd0aCk7CisJfQorCXJldHVybiAxOworfQorI2Vsc2UgIC8qIERVS19VU0VfQlVGRkVST0JKRUNU X1NVUFBPUlQgKi8KKy8qIE5vIC5idWZmZXIgZ2V0dGVyIHdpdGhvdXQgQXJyYXlCdWZmZXIgc3Vw cG9ydC4gKi8KKyNpZiAwCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV90eXBlZGFycmF5 X2J1ZmZlcl9nZXR0ZXIoZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiAwOworfQorI2VuZGlm CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3R5cGVkYXJyYXlfYnl0ZW9mZnNldF9n ZXR0ZXIoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19wdXNoX3VpbnQodGhyLCAwKTsKKwlyZXR1 cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfdHlwZWRhcnJheV9ieXRl bGVuZ3RoX2dldHRlcihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hidWZmZXIgKmhfYnVmOwor CisJLyogWFhYOiBoZWxwZXI/ICovCisJZHVrX3B1c2hfdGhpcyh0aHIpOworCWhfYnVmID0gZHVr X3JlcXVpcmVfaGJ1ZmZlcih0aHIsIC0xKTsKKwlkdWtfcHVzaF91aW50KHRociwgRFVLX0hCVUZG RVJfR0VUX1NJWkUoaF9idWYpKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9C VUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYg RFVLX19CVUZPQkpfRkxBR19QUk9NT1RFCisjdW5kZWYgRFVLX19CVUZPQkpfRkxBR19USFJPVwor I3VuZGVmIERVS19fRkxEXzE2QklUCisjdW5kZWYgRFVLX19GTERfMzJCSVQKKyN1bmRlZiBEVUtf X0ZMRF84QklUCisjdW5kZWYgRFVLX19GTERfQklHRU5ESUFOCisjdW5kZWYgRFVLX19GTERfRE9V QkxFCisjdW5kZWYgRFVLX19GTERfRkxPQVQKKyN1bmRlZiBEVUtfX0ZMRF9TSUdORUQKKyN1bmRl ZiBEVUtfX0ZMRF9UWVBFREFSUkFZCisjdW5kZWYgRFVLX19GTERfVkFSSU5UCisvKgorICogIERh dGUgYnVpbHQtaW5zCisgKgorICogIFVubGlrZSBtb3N0IGJ1aWx0LWlucywgRGF0ZSBoYXMgc29t ZSBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMgZm9yIGdldHRpbmcKKyAqICBVVEMgdGltZSwgY29udmVy dGluZyBiZXR3ZWVuIFVUQyBhbmQgbG9jYWwgdGltZSwgYW5kIHBhcnNpbmcgYW5kCisgKiAgZm9y bWF0dGluZyB0aW1lIHZhbHVlcy4gIFRoZXNlIGFyZSBhbGwgYWJzdHJhY3RlZCBiZWhpbmQgRFVL X1VTRV94eHgKKyAqICBjb25maWcgb3B0aW9ucy4gIFRoZXJlIGFyZSBidWlsdC1pbiBwbGF0Zm9y bSBzcGVjaWZpYyBwcm92aWRlcnMgZm9yCisgKiAgUE9TSVggYW5kIFdpbmRvd3MsIGJ1dCBleHRl cm5hbCBwcm92aWRlcnMgY2FuIGFsc28gYmUgdXNlZC4KKyAqCisgKiAgU2VlIGRvYy9kYXRldGlt ZS5yc3QuCisgKgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkg aW5jbHVkZWQgKi8KKworLyogWFhYOiBjdXJyZW50bHkgZGVmaW5lcyB1bm5lY2Vzc2FyeSBzeW1i b2xzIHdoZW4gRFVLX1VTRV9EQVRFX0JVSUxUSU4gaXMgZGlzYWJsZWQuICovCisKKy8qCisgKiAg Rm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworCitEVUtfTE9DQUxfREVDTCBkdWtfZG91YmxlX3Qg ZHVrX19wdXNoX3RoaXNfZ2V0X3RpbWV2YWxfdHpvZmZzZXQoZHVrX2h0aHJlYWQgKnRociwgZHVr X3NtYWxsX3VpbnRfdCBmbGFncywgZHVrX2ludF90ICpvdXRfdHpvZmZzZXQpOworRFVLX0xPQ0FM X0RFQ0wgZHVrX2RvdWJsZV90IGR1a19fcHVzaF90aGlzX2dldF90aW1ldmFsKGR1a19odGhyZWFk ICp0aHIsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtf X3R3b2RpZ2l0X3llYXJfZml4dXAoZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90IGlkeF92YWwp OworRFVLX0xPQ0FMX0RFQ0wgZHVrX3JldF90IGR1a19fc2V0X3RoaXNfdGltZXZhbF9mcm9tX2Rw YXJ0cyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfZG91YmxlX3QgKmRwYXJ0cywgZHVrX3NtYWxsX3Vp bnRfdCBmbGFncyk7CisKKy8qCisgKiAgT3RoZXIgZmlsZSBsZXZlbCBkZWZpbmVzCisgKi8KKwor LyogRGVidWcgbWFjcm8gdG8gcHJpbnQgYWxsIHBhcnRzIGFuZCBkcGFydHMgKHVzZWQgbWFudWFs bHkgYmVjYXVzZSBvZiBkZWJ1ZyBsZXZlbCkuICovCisjZGVmaW5lICBEVUtfX0RQUklOVF9QQVJU U19BTkRfRFBBUlRTKHBhcnRzLGRwYXJ0cykgIGRvIHsgXAorCQlEVUtfRChEVUtfRFBSSU5UKCJw YXJ0czogJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCwgZHBhcnRzOiAlbGYgJWxmICVs ZiAlbGYgJWxmICVsZiAlbGYgJWxmIiwgXAorCQkgICAgICAgICAgICAgICAgIChsb25nKSAocGFy dHMpWzBdLCAobG9uZykgKHBhcnRzKVsxXSwgXAorCQkgICAgICAgICAgICAgICAgIChsb25nKSAo cGFydHMpWzJdLCAobG9uZykgKHBhcnRzKVszXSwgXAorCQkgICAgICAgICAgICAgICAgIChsb25n KSAocGFydHMpWzRdLCAobG9uZykgKHBhcnRzKVs1XSwgXAorCQkgICAgICAgICAgICAgICAgIChs b25nKSAocGFydHMpWzZdLCAobG9uZykgKHBhcnRzKVs3XSwgXAorCQkgICAgICAgICAgICAgICAg IChkb3VibGUpIChkcGFydHMpWzBdLCAoZG91YmxlKSAoZHBhcnRzKVsxXSwgXAorCQkgICAgICAg ICAgICAgICAgIChkb3VibGUpIChkcGFydHMpWzJdLCAoZG91YmxlKSAoZHBhcnRzKVszXSwgXAor CQkgICAgICAgICAgICAgICAgIChkb3VibGUpIChkcGFydHMpWzRdLCAoZG91YmxlKSAoZHBhcnRz KVs1XSwgXAorCQkgICAgICAgICAgICAgICAgIChkb3VibGUpIChkcGFydHMpWzZdLCAoZG91Ymxl KSAoZHBhcnRzKVs3XSkpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgIERVS19fRFBSSU5UX1BB UlRTKHBhcnRzKSAgZG8geyBcCisJCURVS19EKERVS19EUFJJTlQoInBhcnRzOiAlbGQgJWxkICVs ZCAlbGQgJWxkICVsZCAlbGQgJWxkIiwgXAorCQkgICAgICAgICAgICAgICAgIChsb25nKSAocGFy dHMpWzBdLCAobG9uZykgKHBhcnRzKVsxXSwgXAorCQkgICAgICAgICAgICAgICAgIChsb25nKSAo cGFydHMpWzJdLCAobG9uZykgKHBhcnRzKVszXSwgXAorCQkgICAgICAgICAgICAgICAgIChsb25n KSAocGFydHMpWzRdLCAobG9uZykgKHBhcnRzKVs1XSwgXAorCQkgICAgICAgICAgICAgICAgIChs b25nKSAocGFydHMpWzZdLCAobG9uZykgKHBhcnRzKVs3XSkpOyBcCisJfSB3aGlsZSAoMCkKKyNk ZWZpbmUgIERVS19fRFBSSU5UX0RQQVJUUyhkcGFydHMpICBkbyB7IFwKKwkJRFVLX0QoRFVLX0RQ UklOVCgiZHBhcnRzOiAlbGYgJWxmICVsZiAlbGYgJWxmICVsZiAlbGYgJWxmIiwgXAorCQkgICAg ICAgICAgICAgICAgIChkb3VibGUpIChkcGFydHMpWzBdLCAoZG91YmxlKSAoZHBhcnRzKVsxXSwg XAorCQkgICAgICAgICAgICAgICAgIChkb3VibGUpIChkcGFydHMpWzJdLCAoZG91YmxlKSAoZHBh cnRzKVszXSwgXAorCQkgICAgICAgICAgICAgICAgIChkb3VibGUpIChkcGFydHMpWzRdLCAoZG91 YmxlKSAoZHBhcnRzKVs1XSwgXAorCQkgICAgICAgICAgICAgICAgIChkb3VibGUpIChkcGFydHMp WzZdLCAoZG91YmxlKSAoZHBhcnRzKVs3XSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyogRXF1aXZh bGVudCB5ZWFyIGZvciBEU1QgY2FsY3VsYXRpb25zIG91dHNpZGUgWzE5NzAsMjAzOFsgcmFuZ2Us IHNlZQorICogRTUgU2VjdGlvbiAxNS45LjEuOC4gIEVxdWl2YWxlbnQgeWVhciBoYXMgdGhlIHNh bWUgbGVhcC15ZWFyLW5lc3MgYW5kCisgKiBzdGFydHMgd2l0aCB0aGUgc2FtZSB3ZWVrZGF5IG9u IEphbiAxLgorICogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9 MzUxMDY2CisgKi8KKyNkZWZpbmUgRFVLX19ZRUFSKHgpICgoZHVrX3VpbnQ4X3QpICgoeCkgLSAx OTcwKSkKK0RVS19MT0NBTCBkdWtfdWludDhfdCBkdWtfX2RhdGVfZXF1aXZ5ZWFyWzE0XSA9IHsK KyNpZiAxCisJLyogVGhpcyBpcyBiYXNlZCBvbiBWOCBFcXVpdmFsZW50WWVhcigpIGFsZ29yaXRo bSAoc2VlIHV0aWwvZ2VuZXF1aXZ5ZWFyLnB5KToKKwkgKiBodHRwOi8vY29kZS5nb29nbGUuY29t L3Avdjgvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvZGF0ZS5oIzE0NgorCSAqLworCisJLyogbm9u LWxlYXAgeWVhcjogc3VuZGF5LCBtb25kYXksIC4uLiAqLworCURVS19fWUVBUigyMDIzKSwgRFVL X19ZRUFSKDIwMzUpLCBEVUtfX1lFQVIoMjAxOSksIERVS19fWUVBUigyMDMxKSwKKwlEVUtfX1lF QVIoMjAxNSksIERVS19fWUVBUigyMDI3KSwgRFVLX19ZRUFSKDIwMTEpLAorCisJLyogbGVhcCB5 ZWFyOiBzdW5kYXksIG1vbmRheSwgLi4uICovCisJRFVLX19ZRUFSKDIwMTIpLCBEVUtfX1lFQVIo MjAyNCksIERVS19fWUVBUigyMDA4KSwgRFVLX19ZRUFSKDIwMjApLAorCURVS19fWUVBUigyMDMy KSwgRFVLX19ZRUFSKDIwMTYpLCBEVUtfX1lFQVIoMjAyOCkKKyNlbmRpZgorCisjaWYgMAorCS8q IFRoaXMgaXMgYmFzZWQgb24gUmhpbm8gRXF1aXZhbGVudFllYXIoKSBhbGdvcml0aG06CisJICog aHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vYmxvYi9mOTljYzExZDYxNmYwY2RkYTJj NDJiZGU3MmIzNDg0ZGY2MTgyOTQ3L3NyYy9vcmcvbW96aWxsYS9qYXZhc2NyaXB0L05hdGl2ZURh dGUuamF2YQorCSAqLworCisJLyogbm9uLWxlYXAgeWVhcjogc3VuZGF5LCBtb25kYXksIC4uLiAq LworCURVS19fWUVBUigxOTc4KSwgRFVLX19ZRUFSKDE5NzMpLCBEVUtfX1lFQVIoMTk4NSksIERV S19fWUVBUigxOTg2KSwKKwlEVUtfX1lFQVIoMTk4MSksIERVS19fWUVBUigxOTcxKSwgRFVLX19Z RUFSKDE5NzcpLAorCisJLyogbGVhcCB5ZWFyOiBzdW5kYXksIG1vbmRheSwgLi4uICovCisJRFVL X19ZRUFSKDE5ODQpLCBEVUtfX1lFQVIoMTk5NiksIERVS19fWUVBUigxOTgwKSwgRFVLX19ZRUFS KDE5OTIpLAorCURVS19fWUVBUigxOTc2KSwgRFVLX19ZRUFSKDE5ODgpLCBEVUtfX1lFQVIoMTk3 MikKKyNlbmRpZgorfTsKKworLyoKKyAqICBJU08gODYwMSBzdWJzZXQgcGFyc2VyLgorICovCisK Ky8qIFBhcnNlciBwYXJ0IGNvdW50LiAqLworI2RlZmluZSBEVUtfX05VTV9JU084NjAxX1BBUlNF Ul9QQVJUUyAgOQorCisvKiBQYXJzZXIgcGFydCBpbmRpY2VzLiAqLworI2RlZmluZSBEVUtfX1BJ X1lFQVIgICAgICAgICAwCisjZGVmaW5lIERVS19fUElfTU9OVEggICAgICAgIDEKKyNkZWZpbmUg RFVLX19QSV9EQVkgICAgICAgICAgMgorI2RlZmluZSBEVUtfX1BJX0hPVVIgICAgICAgICAzCisj ZGVmaW5lIERVS19fUElfTUlOVVRFICAgICAgIDQKKyNkZWZpbmUgRFVLX19QSV9TRUNPTkQgICAg ICAgNQorI2RlZmluZSBEVUtfX1BJX01JTExJU0VDT05EICA2CisjZGVmaW5lIERVS19fUElfVFpI T1VSICAgICAgIDcKKyNkZWZpbmUgRFVLX19QSV9UWk1JTlVURSAgICAgOAorCisvKiBQYXJzZXIg cGFydCBtYXNrcy4gKi8KKyNkZWZpbmUgRFVLX19QTV9ZRUFSICAgICAgICAgKDEgPDwgRFVLX19Q SV9ZRUFSKQorI2RlZmluZSBEVUtfX1BNX01PTlRIICAgICAgICAoMSA8PCBEVUtfX1BJX01PTlRI KQorI2RlZmluZSBEVUtfX1BNX0RBWSAgICAgICAgICAoMSA8PCBEVUtfX1BJX0RBWSkKKyNkZWZp bmUgRFVLX19QTV9IT1VSICAgICAgICAgKDEgPDwgRFVLX19QSV9IT1VSKQorI2RlZmluZSBEVUtf X1BNX01JTlVURSAgICAgICAoMSA8PCBEVUtfX1BJX01JTlVURSkKKyNkZWZpbmUgRFVLX19QTV9T RUNPTkQgICAgICAgKDEgPDwgRFVLX19QSV9TRUNPTkQpCisjZGVmaW5lIERVS19fUE1fTUlMTElT RUNPTkQgICgxIDw8IERVS19fUElfTUlMTElTRUNPTkQpCisjZGVmaW5lIERVS19fUE1fVFpIT1VS ICAgICAgICgxIDw8IERVS19fUElfVFpIT1VSKQorI2RlZmluZSBEVUtfX1BNX1RaTUlOVVRFICAg ICAoMSA8PCBEVUtfX1BJX1RaTUlOVVRFKQorCisvKiBQYXJzZXIgc2VwYXJhdG9yIGluZGljZXMu ICovCisjZGVmaW5lIERVS19fU0lfUExVUyAgICAgICAgIDAKKyNkZWZpbmUgRFVLX19TSV9NSU5V UyAgICAgICAgMQorI2RlZmluZSBEVUtfX1NJX1QgICAgICAgICAgICAyCisjZGVmaW5lIERVS19f U0lfU1BBQ0UgICAgICAgIDMKKyNkZWZpbmUgRFVLX19TSV9DT0xPTiAgICAgICAgNAorI2RlZmlu ZSBEVUtfX1NJX1BFUklPRCAgICAgICA1CisjZGVmaW5lIERVS19fU0lfWiAgICAgICAgICAgIDYK KyNkZWZpbmUgRFVLX19TSV9OVUwgICAgICAgICAgNworCisvKiBQYXJzZXIgc2VwYXJhdG9yIG1h c2tzLiAqLworI2RlZmluZSBEVUtfX1NNX1BMVVMgICAgICAgICAoMSA8PCBEVUtfX1NJX1BMVVMp CisjZGVmaW5lIERVS19fU01fTUlOVVMgICAgICAgICgxIDw8IERVS19fU0lfTUlOVVMpCisjZGVm aW5lIERVS19fU01fVCAgICAgICAgICAgICgxIDw8IERVS19fU0lfVCkKKyNkZWZpbmUgRFVLX19T TV9TUEFDRSAgICAgICAgKDEgPDwgRFVLX19TSV9TUEFDRSkKKyNkZWZpbmUgRFVLX19TTV9DT0xP TiAgICAgICAgKDEgPDwgRFVLX19TSV9DT0xPTikKKyNkZWZpbmUgRFVLX19TTV9QRVJJT0QgICAg ICAgKDEgPDwgRFVLX19TSV9QRVJJT0QpCisjZGVmaW5lIERVS19fU01fWiAgICAgICAgICAgICgx IDw8IERVS19fU0lfWikKKyNkZWZpbmUgRFVLX19TTV9OVUwgICAgICAgICAgKDEgPDwgRFVLX19T SV9OVUwpCisKKy8qIFJ1bGUgY29udHJvbCBmbGFncy4gKi8KKyNkZWZpbmUgRFVLX19DRl9ORUcg ICAgICAgICAgKDEgPDwgMCkgIC8qIGNvbnRpbnVlIG1hdGNoaW5nLCBzZXQgbmVnX3R6b2Zmc2V0 IGZsYWcgKi8KKyNkZWZpbmUgRFVLX19DRl9BQ0NFUFQgICAgICAgKDEgPDwgMSkgIC8qIGFjY2Vw dCBzdHJpbmcgKi8KKyNkZWZpbmUgRFVLX19DRl9BQ0NFUFRfTlVMICAgKDEgPDwgMikgIC8qIGFj Y2VwdCBzdHJpbmcgaWYgbmV4dCBjaGFyIGlzIE5VTCAob3RoZXJ3aXNlIHJlamVjdCkgKi8KKwor I2RlZmluZSBEVUtfX1BBQ0tfUlVMRShwYXJ0bWFzayxzZXBtYXNrLG5leHRwYXJ0LGZsYWdzKSAg XAorCSgoZHVrX3VpbnQzMl90KSAocGFydG1hc2spICsgXAorCSAoKChkdWtfdWludDMyX3QpIChz ZXBtYXNrKSkgPDwgOSkgKyBcCisJICgoKGR1a191aW50MzJfdCkgKG5leHRwYXJ0KSkgPDwgMTcp ICsgXAorCSAoKChkdWtfdWludDMyX3QpIChmbGFncykpIDw8IDIxKSkKKworI2RlZmluZSBEVUtf X1VOUEFDS19SVUxFKHJ1bGUsdmFyX25leHRpZHgsdmFyX2ZsYWdzKSAgZG8geyBcCisJCSh2YXJf bmV4dGlkeCkgPSAoZHVrX3NtYWxsX3VpbnRfdCkgKCgocnVsZSkgPj4gMTcpICYgMHgwZik7IFwK KwkJKHZhcl9mbGFncykgPSAoZHVrX3NtYWxsX3VpbnRfdCkgKChydWxlKSA+PiAyMSk7IFwKKwl9 IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19fUlVMRV9NQVNLX1BBUlRfU0VQICAweDFmZmZmVUwK KworLyogTWF0Y2hpbmcgc2VwYXJhdG9yIGluZGV4IGlzIHVzZWQgaW4gdGhlIGNvbnRyb2wgdGFi bGUgKi8KK0RVS19MT0NBTCBjb25zdCBkdWtfdWludDhfdCBkdWtfX3BhcnNlX2lzbzg2MDFfc2Vw c1tdID0geworCURVS19BU0NfUExVUyAvKjAqLywgRFVLX0FTQ19NSU5VUyAvKjEqLywgRFVLX0FT Q19VQ19UIC8qMiovLCBEVUtfQVNDX1NQQUNFIC8qMyovLAorCURVS19BU0NfQ09MT04gLyo0Ki8s IERVS19BU0NfUEVSSU9EIC8qNSovLCBEVUtfQVNDX1VDX1ogLyo2Ki8sIERVS19BU0NfTlVMIC8q NyovCit9OworCisvKiBSdWxlIHRhYmxlOiBmaXJzdCBtYXRjaGluZyBydWxlIGlzIHVzZWQgdG8g ZGV0ZXJtaW5lIHdoYXQgdG8gZG8gbmV4dC4gKi8KK0RVS19MT0NBTCBjb25zdCBkdWtfdWludDMy X3QgZHVrX19wYXJzZV9pc284NjAxX2NvbnRyb2xbXSA9IHsKKwlEVUtfX1BBQ0tfUlVMRShEVUtf X1BNX1lFQVIsIERVS19fU01fTUlOVVMsIERVS19fUElfTU9OVEgsIDApLAorCURVS19fUEFDS19S VUxFKERVS19fUE1fTU9OVEgsIERVS19fU01fTUlOVVMsIERVS19fUElfREFZLCAwKSwKKwlEVUtf X1BBQ0tfUlVMRShEVUtfX1BNX1lFQVIgfCBEVUtfX1BNX01PTlRIIHwgRFVLX19QTV9EQVksIERV S19fU01fVCB8IERVS19fU01fU1BBQ0UsIERVS19fUElfSE9VUiwgMCksCisJRFVLX19QQUNLX1JV TEUoRFVLX19QTV9IT1VSLCBEVUtfX1NNX0NPTE9OLCBEVUtfX1BJX01JTlVURSwgMCksCisJRFVL X19QQUNLX1JVTEUoRFVLX19QTV9NSU5VVEUsIERVS19fU01fQ09MT04sIERVS19fUElfU0VDT05E LCAwKSwKKwlEVUtfX1BBQ0tfUlVMRShEVUtfX1BNX1NFQ09ORCwgRFVLX19TTV9QRVJJT0QsIERV S19fUElfTUlMTElTRUNPTkQsIDApLAorCURVS19fUEFDS19SVUxFKERVS19fUE1fVFpIT1VSLCBE VUtfX1NNX0NPTE9OLCBEVUtfX1BJX1RaTUlOVVRFLCAwKSwKKwlEVUtfX1BBQ0tfUlVMRShEVUtf X1BNX1lFQVIgfCBEVUtfX1BNX01PTlRIIHwgRFVLX19QTV9EQVkgfCBEVUtfX1BNX0hPVVIgLypO b3RlMSovIHwgRFVLX19QTV9NSU5VVEUgfCBEVUtfX1BNX1NFQ09ORCB8IERVS19fUE1fTUlMTElT RUNPTkQsIERVS19fU01fUExVUywgRFVLX19QSV9UWkhPVVIsIDApLAorCURVS19fUEFDS19SVUxF KERVS19fUE1fWUVBUiB8IERVS19fUE1fTU9OVEggfCBEVUtfX1BNX0RBWSB8IERVS19fUE1fSE9V UiAvKk5vdGUxKi8gfCBEVUtfX1BNX01JTlVURSB8IERVS19fUE1fU0VDT05EIHwgRFVLX19QTV9N SUxMSVNFQ09ORCwgRFVLX19TTV9NSU5VUywgRFVLX19QSV9UWkhPVVIsIERVS19fQ0ZfTkVHKSwK KwlEVUtfX1BBQ0tfUlVMRShEVUtfX1BNX1lFQVIgfCBEVUtfX1BNX01PTlRIIHwgRFVLX19QTV9E QVkgfCBEVUtfX1BNX0hPVVIgLypOb3RlMSovIHwgRFVLX19QTV9NSU5VVEUgfCBEVUtfX1BNX1NF Q09ORCB8IERVS19fUE1fTUlMTElTRUNPTkQsIERVS19fU01fWiwgMCwgRFVLX19DRl9BQ0NFUFRf TlVMKSwKKwlEVUtfX1BBQ0tfUlVMRShEVUtfX1BNX1lFQVIgfCBEVUtfX1BNX01PTlRIIHwgRFVL X19QTV9EQVkgfCBEVUtfX1BNX0hPVVIgLypOb3RlMSovIHwgRFVLX19QTV9NSU5VVEUgfCBEVUtf X1BNX1NFQ09ORCB8IERVS19fUE1fTUlMTElTRUNPTkQgfCBEVUtfX1BNX1RaSE9VUiAvKk5vdGUy Ki8gfCBEVUtfX1BNX1RaTUlOVVRFLCBEVUtfX1NNX05VTCwgMCwgRFVLX19DRl9BQ0NFUFQpCisK KwkvKiBOb3RlMTogdGhlIHNwZWNpZmljYXRpb24gZG9lc24ndCByZXF1aXJlIG1hdGNoaW5nIGEg dGltZSBmb3JtIHdpdGgKKwkgKiAgICAgICAganVzdCBob3VycyAoIkhIIiksIGJ1dCB3ZSBhY2Nl cHQgaXQgaGVyZSwgZS5nLiAiMjAxMi0wMS0wMlQxMloiLgorCSAqCisJICogTm90ZTI6IHRoZSBz cGVjaWZpY2F0aW9uIGRvZXNuJ3QgcmVxdWlyZSBtYXRjaGluZyBhIHRpbWV6b25lIG9mZnNldAor CSAqICAgICAgICB3aXRoIGp1c3QgaG91cnMgKCJISCIpLCBidXQgYWNjZXB0IGl0IGhlcmUsIGUu Zy4gIjIwMTItMDEtMDJUMDM6MDQ6MDUrMDIiCisJICovCit9OworCitEVUtfTE9DQUwgZHVrX2Jv b2xfdCBkdWtfX3BhcnNlX3N0cmluZ19pc284NjAxX3N1YnNldChkdWtfaHRocmVhZCAqdGhyLCBj b25zdCBjaGFyICpzdHIpIHsKKwlkdWtfaW50X3QgcGFydHNbRFVLX19OVU1fSVNPODYwMV9QQVJT RVJfUEFSVFNdOworCWR1a19kb3VibGVfdCBkcGFydHNbRFVLX0RBVEVfSURYX05VTV9QQVJUU107 CisJZHVrX2RvdWJsZV90IGQ7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisJZHVrX3NtYWxsX3Vp bnRfdCBwYXJ0X2lkeCA9IDA7CisJZHVrX2ludF90IGFjY3VtID0gMDsKKwlkdWtfc21hbGxfdWlu dF90IG5kaWdpdHMgPSAwOworCWR1a19ib29sX3QgbmVnX3llYXIgPSAwOworCWR1a19ib29sX3Qg bmVnX3R6b2Zmc2V0ID0gMDsKKwlkdWtfdWludF9mYXN0OF90IGNoOworCWR1a19zbWFsbF91aW50 X3QgaTsKKworCS8qIER1cmluZyBwYXJzaW5nLCBtb250aCBhbmQgZGF5IGFyZSBvbmUtYmFzZWQ7 IHNldCBkZWZhdWx0cyBoZXJlLiAqLworCWR1a19tZW16ZXJvKHBhcnRzLCBzaXplb2YocGFydHMp KTsKKwlEVUtfQVNTRVJUKHBhcnRzW0RVS19EQVRFX0lEWF9ZRUFSXSA9PSAwKTsgIC8qIGRvbid0 IGNhcmUgdmFsdWUsIHllYXIgaXMgbWFuZGF0b3J5ICovCisJcGFydHNbRFVLX0RBVEVfSURYX01P TlRIXSA9IDE7CisJcGFydHNbRFVLX0RBVEVfSURYX0RBWV0gPSAxOworCisJLyogU3BlY2lhbCBo YW5kbGluZyBmb3IgeWVhciBzaWduLiAqLworCXAgPSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgc3Ry OworCWNoID0gcFswXTsKKwlpZiAoY2ggPT0gRFVLX0FTQ19QTFVTKSB7CisJCXArKzsKKwl9IGVs c2UgaWYgKGNoID09IERVS19BU0NfTUlOVVMpIHsKKwkJbmVnX3llYXIgPSAxOworCQlwKys7CisJ fQorCisJZm9yICg7OykgeworCQljaCA9ICpwKys7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJw YXJzaW5nLCBwYXJ0X2lkeD0lbGQsIGNoYXI9JWxkICgnJWMnKSIsCisJCSAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBwYXJ0X2lkeCwgKGxvbmcpIGNoLAorCQkgICAgICAgICAgICAgICAgICAg ICAoaW50KSAoKGNoID49IDB4MjAgJiYgY2ggPD0gMHg3ZSkgPyBjaCA6IERVS19BU0NfUVVFU1RJ T04pKSk7CisKKwkJaWYgKGNoID49IERVS19BU0NfMCAmJiBjaCA8PSBEVUtfQVNDXzkpIHsKKwkJ CWlmIChuZGlnaXRzID49IDkpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgidG9vIG1hbnkg ZGlnaXRzIC0+IHJlamVjdCIpKTsKKwkJCQlnb3RvIHJlamVjdDsKKwkJCX0KKwkJCWlmIChwYXJ0 X2lkeCA9PSBEVUtfX1BJX01JTExJU0VDT05EICYmIG5kaWdpdHMgPj0gMykgeworCQkJCS8qIGln bm9yZSBtaWxsaXNlY29uZCBmcmFjdGlvbnMgYWZ0ZXIgMyAqLworCQkJfSBlbHNlIHsKKwkJCQlh Y2N1bSA9IGFjY3VtICogMTAgKyAoKGR1a19pbnRfdCkgY2gpIC0gKChkdWtfaW50X3QpIERVS19B U0NfMCkgKyAweDAwOworCQkJCW5kaWdpdHMrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWR1a191 aW50X2Zhc3QzMl90IG1hdGNoX3ZhbDsKKwkJCWR1a19zbWFsbF91aW50X3Qgc2VwX2lkeDsKKwor CQkJaWYgKG5kaWdpdHMgPD0gMCkgeworCQkJCWdvdG8gcmVqZWN0OworCQkJfQorCQkJaWYgKHBh cnRfaWR4ID09IERVS19fUElfTUlMTElTRUNPTkQpIHsKKwkJCQkvKiBjb21wbGV0ZSB0aGUgbWls bGlzZWNvbmQgZmllbGQgKi8KKwkJCQl3aGlsZSAobmRpZ2l0cyA8IDMpIHsKKwkJCQkJYWNjdW0g Kj0gMTA7CisJCQkJCW5kaWdpdHMrKzsKKwkJCQl9CisJCQl9CisJCQlwYXJ0c1twYXJ0X2lkeF0g PSBhY2N1bTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ3cm90ZSBwYXJ0ICVsZCAtPiB2YWx1 ZSAlbGQiLCAobG9uZykgcGFydF9pZHgsIChsb25nKSBhY2N1bSkpOworCisJCQlhY2N1bSA9IDA7 CisJCQluZGlnaXRzID0gMDsKKworCQkJZm9yIChpID0gMDsgaSA8IChkdWtfc21hbGxfdWludF90 KSAoc2l6ZW9mKGR1a19fcGFyc2VfaXNvODYwMV9zZXBzKSAvIHNpemVvZihkdWtfdWludDhfdCkp OyBpKyspIHsKKwkJCQlpZiAoZHVrX19wYXJzZV9pc284NjAxX3NlcHNbaV0gPT0gY2gpIHsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gKGR1a19zbWFsbF91aW50X3QpIChz aXplb2YoZHVrX19wYXJzZV9pc284NjAxX3NlcHMpIC8gc2l6ZW9mKGR1a191aW50OF90KSkpIHsK KwkJCQlEVUtfREREKERVS19ERERQUklOVCgic2VwYXJhdG9yIGNoYXJhY3RlciBkb2Vzbid0IG1h dGNoIC0+IHJlamVjdCIpKTsKKwkJCQlnb3RvIHJlamVjdDsKKwkJCX0KKworCQkJc2VwX2lkeCA9 IGk7CisJCQltYXRjaF92YWwgPSAoMVVMIDw8IHBhcnRfaWR4KSArICgxVUwgPDwgKHNlcF9pZHgg KyA5KSk7ICAvKiBtYXRjaCBhZ2FpbnN0IHJ1bGUgcGFydC9zZXAgYml0cyAqLworCisJCQlmb3Ig KGkgPSAwOyBpIDwgKGR1a19zbWFsbF91aW50X3QpIChzaXplb2YoZHVrX19wYXJzZV9pc284NjAx X2NvbnRyb2wpIC8gc2l6ZW9mKGR1a191aW50MzJfdCkpOyBpKyspIHsKKwkJCQlkdWtfdWludF9m YXN0MzJfdCBydWxlID0gZHVrX19wYXJzZV9pc284NjAxX2NvbnRyb2xbaV07CisJCQkJZHVrX3Nt YWxsX3VpbnRfdCBuZXh0cGFydDsKKwkJCQlkdWtfc21hbGxfdWludF90IGNmbGFnczsKKworCQkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJ0X2lkeD0lbGQsIHNlcF9pZHg9JWxkLCBtYXRjaF92 YWw9MHglMDhseCwgY29uc2lkZXJpbmcgcnVsZT0weCUwOGx4IiwKKwkJCQkgICAgICAgICAgICAg ICAgICAgICAobG9uZykgcGFydF9pZHgsIChsb25nKSBzZXBfaWR4LAorCQkJCSAgICAgICAgICAg ICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBtYXRjaF92YWwsICh1bnNpZ25lZCBsb25nKSBydWxl KSk7CisKKwkJCQlpZiAoKHJ1bGUgJiBtYXRjaF92YWwpICE9IG1hdGNoX3ZhbCkgeworCQkJCQlj b250aW51ZTsKKwkJCQl9CisKKwkJCQlEVUtfX1VOUEFDS19SVUxFKHJ1bGUsIG5leHRwYXJ0LCBj ZmxhZ3MpOworCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJ1bGUgbWF0Y2ggLT4gcGFydF9p ZHg9JWxkLCBzZXBfaWR4PSVsZCwgbWF0Y2hfdmFsPTB4JTA4bHgsICIKKwkJCQkgICAgICAgICAg ICAgICAgICAgICAicnVsZT0weCUwOGx4IC0+IG5leHRwYXJ0PSVsZCwgY2ZsYWdzPTB4JTAybHgi LAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJ0X2lkeCwgKGxvbmcpIHNlcF9p ZHgsCisJCQkJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIG1hdGNoX3ZhbCwg KHVuc2lnbmVkIGxvbmcpIHJ1bGUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG5l eHRwYXJ0LCAodW5zaWduZWQgbG9uZykgY2ZsYWdzKSk7CisKKwkJCQlpZiAoY2ZsYWdzICYgRFVL X19DRl9ORUcpIHsKKwkJCQkJbmVnX3R6b2Zmc2V0ID0gMTsKKwkJCQl9CisKKwkJCQlpZiAoY2Zs YWdzICYgRFVLX19DRl9BQ0NFUFQpIHsKKwkJCQkJZ290byBhY2NlcHQ7CisJCQkJfQorCisJCQkJ aWYgKGNmbGFncyAmIERVS19fQ0ZfQUNDRVBUX05VTCkgeworCQkJCQlEVUtfQVNTRVJUKCoocCAt IDEpICE9IChjaGFyKSAwKTsKKwkJCQkJaWYgKCpwID09IERVS19BU0NfTlVMKSB7CisJCQkJCQln b3RvIGFjY2VwdDsKKwkJCQkJfQorCQkJCQlnb3RvIHJlamVjdDsKKwkJCQl9CisKKwkJCQlwYXJ0 X2lkeCA9IG5leHRwYXJ0OworCQkJCWJyZWFrOworCQkJfSAgLyogcnVsZSBtYXRjaCAqLworCisJ CQlpZiAoaSA9PSAoZHVrX3NtYWxsX3VpbnRfdCkgKHNpemVvZihkdWtfX3BhcnNlX2lzbzg2MDFf Y29udHJvbCkgLyBzaXplb2YoZHVrX3VpbnQzMl90KSkpIHsKKwkJCQlEVUtfREREKERVS19ERERQ UklOVCgibm8gcnVsZSBtYXRjaGVzIC0+IHJlamVjdCIpKTsKKwkJCQlnb3RvIHJlamVjdDsKKwkJ CX0KKworCQkJaWYgKGNoID09IDApIHsKKwkJCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3Nh cnksIGJ1dCBjaGVjayBqdXN0IGluIGNhc2UKKwkJCQkgKiB0byBhdm9pZCBhbnkgY2hhbmNlIG9m IG92ZXJydW5zLgorCQkJCSAqLworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJOVUwgYWZ0ZXIg cnVsZSBtYXRjaGluZyAoc2hvdWxkIG5vdCBoYXBwZW4pIC0+IHJlamVjdCIpKTsKKwkJCQlnb3Rv IHJlamVjdDsKKwkJCX0KKwkJfSAgLyogaWYtZGlnaXQtZWxzZS1jdHJsICovCisJfSAgLyogY2hh ciBsb29wICovCisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgZXhpdCB0aGUgbG9vcCBhYm92ZS4gKi8K KwlEVUtfVU5SRUFDSEFCTEUoKTsKKworIHJlamVjdDoKKwlEVUtfREREKERVS19ERERQUklOVCgi cmVqZWN0IikpOworCXJldHVybiAwOworCisgYWNjZXB0OgorCURVS19EREQoRFVLX0RERFBSSU5U KCJhY2NlcHQiKSk7CisKKwkvKiBBcHBseSB0aW1lem9uZSBvZmZzZXQgdG8gZ2V0IHRoZSBtYWlu IHBhcnRzIGluIFVUQyAqLworCWlmIChuZWdfeWVhcikgeworCQlwYXJ0c1tEVUtfX1BJX1lFQVJd ID0gLXBhcnRzW0RVS19fUElfWUVBUl07CisJfQorCWlmIChuZWdfdHpvZmZzZXQpIHsKKwkJcGFy dHNbRFVLX19QSV9IT1VSXSArPSBwYXJ0c1tEVUtfX1BJX1RaSE9VUl07CisJCXBhcnRzW0RVS19f UElfTUlOVVRFXSArPSBwYXJ0c1tEVUtfX1BJX1RaTUlOVVRFXTsKKwl9IGVsc2UgeworCQlwYXJ0 c1tEVUtfX1BJX0hPVVJdIC09IHBhcnRzW0RVS19fUElfVFpIT1VSXTsKKwkJcGFydHNbRFVLX19Q SV9NSU5VVEVdIC09IHBhcnRzW0RVS19fUElfVFpNSU5VVEVdOworCX0KKwlwYXJ0c1tEVUtfX1BJ X01PTlRIXSAtPSAxOyAgLyogemVyby1iYXNlZCBtb250aCAqLworCXBhcnRzW0RVS19fUElfREFZ XSAtPSAxOyAgLyogemVyby1iYXNlZCBkYXkgKi8KKworCS8qIFVzZSBkb3VibGUgcGFydHMsIHRo ZXkgdG9sZXJhdGUgdW5ub3JtYWxpemVkIHRpbWUuCisJICoKKwkgKiBOb3RlOiBEVUtfREFURV9J RFhfV0VFS0RBWSBpcyBpbml0aWFsaXplZCB3aXRoIGEgYm9ndXMgdmFsdWUgKERVS19fUElfVFpI T1VSKQorCSAqIG9uIHB1cnBvc2UuICBJdCB3b24ndCBiZSBhY3R1YWxseSB1c2VkIGJ5IGR1a19i aV9kYXRlX2dldF90aW1ldmFsX2Zyb21fZHBhcnRzKCksCisJICogYnV0IHdpbGwgbWFrZSB0aGUg dmFsdWUgaW5pdGlhbGl6ZWQganVzdCBpbiBjYXNlLCBhbmQgYXZvaWQgYW55CisJICogcG90ZW50 aWFsIGZvciBWYWxncmluZCBpc3N1ZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IERVS19EQVRF X0lEWF9OVU1fUEFSVFM7IGkrKykgeworCQlEVUtfREREKERVS19ERERQUklOVCgicGFydFslbGRd ID0gJWxkIiwgKGxvbmcpIGksIChsb25nKSBwYXJ0c1tpXSkpOworCQlkcGFydHNbaV0gPSBwYXJ0 c1tpXTsKKwl9CisKKwlkID0gZHVrX2JpX2RhdGVfZ2V0X3RpbWV2YWxfZnJvbV9kcGFydHMoZHBh cnRzLCAwIC8qZmxhZ3MqLyk7CisJZHVrX3B1c2hfbnVtYmVyKHRociwgZCk7CisJcmV0dXJuIDE7 Cit9CisKKy8qCisgKiAgRGF0ZS90aW1lIHBhcnNpbmcgaGVscGVyLgorICoKKyAqICBQYXJzZSBh IGRhdGV0aW1lIHN0cmluZyBpbnRvIGEgdGltZSB2YWx1ZS4gIFdlIG11c3QgZmlyc3QgdHJ5IHRv IHBhcnNlCisgKiAgdGhlIGlucHV0IGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQgZm9ybWF0IGlu IEU1LjEgU2VjdGlvbiAxNS45LjEuMTUuCisgKiAgSWYgdGhhdCBmYWlscywgd2UgY2FuIHRyeSB0 byBwYXJzZSB1c2luZyBjdXN0b20gcGFyc2luZywgd2hpY2ggY2FuCisgKiAgZWl0aGVyIGJlIHBs YXRmb3JtIG5ldXRyYWwgKGN1c3RvbSBjb2RlKSBvciBwbGF0Zm9ybSBzcGVjaWZpYyAodXNpbmcK KyAqICBleGlzdGluZyBwbGF0Zm9ybSBBUEkgY2FsbHMpLgorICoKKyAqICBOb3RlIGluIHBhcnRp Y3VsYXIgdGhhdCB3ZSBtdXN0IHBhcnNlIHdoYXRldmVyIHRvU3RyaW5nKCksIHRvVVRDU3RyaW5n KCksCisgKiAgYW5kIHRvSVNPU3RyaW5nKCkgY2FuIHByb2R1Y2U7IHNlZSBFNS4xIFNlY3Rpb24g MTUuOS40LjIuCisgKgorICogIFJldHVybnMgMSB0byBhbGxvdyB0YWlsIGNhbGxpbmcuCisgKgor ICogIFRoZXJlIGlzIG11Y2ggcm9vbSBmb3IgaW1wcm92ZW1lbnQgaGVyZSB3aXRoIHJlc3BlY3Qg dG8gc3VwcG9ydGluZworICogIGFsdGVybmF0aXZlIGRhdGV0aW1lIGZvcm1hdHMuICBGb3IgaW5z dGFuY2UsIFY4IHBhcnNlcyAnMjAxMi0wMS0wMScgYXMKKyAqICBVVEMgYW5kICcyMDEyLzAxLzAx JyBhcyBsb2NhbCB0aW1lLgorICovCisKK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19wYXJzZV9z dHJpbmcoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqc3RyKSB7CisJLyogWFhYOiB0aGVy ZSBpcyBhIHNtYWxsIHJpc2sgaGVyZTogYmVjYXVzZSB0aGUgSVNPIDg2MDEgcGFyc2VyIGlzCisJ ICogdmVyeSBsb29zZSwgaXQgbWF5IGVuZCB1cCBwYXJzaW5nIHNvbWUgZGF0ZXRpbWUgdmFsdWVz IHdoaWNoCisJICogd291bGQgYmUgYmV0dGVyIHBhcnNlZCB3aXRoIGEgcGxhdGZvcm0gc3BlY2lm aWMgcGFyc2VyLgorCSAqLworCisJRFVLX0FTU0VSVChzdHIgIT0gTlVMTCk7CisJRFVLX0RERChE VUtfREREUFJJTlQoInBhcnNlIGRhdGV0aW1lIGZyb20gc3RyaW5nICclcyciLCAoY29uc3QgY2hh ciAqKSBzdHIpKTsKKworCWlmIChkdWtfX3BhcnNlX3N0cmluZ19pc284NjAxX3N1YnNldCh0aHIs IHN0cikgIT0gMCkgeworCQlyZXR1cm4gMTsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREFU RV9QQVJTRV9TVFJJTkcpCisJLyogQ29udHJhY3QsIGVpdGhlcjoKKwkgKiAtIFB1c2ggdmFsdWUg b24gc3RhY2sgYW5kIHJldHVybiAxCisJICogLSBEb24ndCBwdXNoIGFueXRoaW5nIG9uIHN0YWNr IGFuZCByZXR1cm4gMAorCSAqLworCisJaWYgKERVS19VU0VfREFURV9QQVJTRV9TVFJJTkcodGhy LCBzdHIpICE9IDApIHsKKwkJcmV0dXJuIDE7CisJfQorI2Vsc2UKKwkvKiBObyBwbGF0Zm9ybS1z cGVjaWZpYyBwYXJzaW5nLCB0aGlzIGlzIG5vdCBhbiBlcnJvci4gKi8KKyNlbmRpZgorCisJZHVr X3B1c2hfbmFuKHRocik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAgQ2FsZW5kYXIgaGVscGVy cworICoKKyAqICBTb21lIGhlbHBlcnMgYXJlIHVzZWQgZm9yIGdldHRlcnMgYW5kIGNhbiBvcGVy YXRlIG9uIG5vcm1hbGl6ZWQgdmFsdWVzCisgKiAgd2hpY2ggY2FuIGJlIHJlcHJlc2VudGVkIHdp dGggMzItYml0IHNpZ25lZCBpbnRlZ2Vycy4gIE90aGVyIGhlbHBlcnMgYXJlCisgKiAgbmVlZGVk IGJ5IHNldHRlcnMgYW5kIG9wZXJhdGUgb24gdW4tbm9ybWFsaXplZCBkb3VibGUgdmFsdWVzLCBt dXN0IHdhdGNoCisgKiAgb3V0IGZvciBub24tZmluaXRlIG51bWJlcnMgZXRjLgorICovCisKK0RV S19MT0NBTCBkdWtfdWludDhfdCBkdWtfX2RheXNfaW5fbW9udGhbMTJdID0geworCShkdWtfdWlu dDhfdCkgMzEsIChkdWtfdWludDhfdCkgMjgsIChkdWtfdWludDhfdCkgMzEsIChkdWtfdWludDhf dCkgMzAsCisJKGR1a191aW50OF90KSAzMSwgKGR1a191aW50OF90KSAzMCwgKGR1a191aW50OF90 KSAzMSwgKGR1a191aW50OF90KSAzMSwKKwkoZHVrX3VpbnQ4X3QpIDMwLCAoZHVrX3VpbnQ4X3Qp IDMxLCAoZHVrX3VpbnQ4X3QpIDMwLCAoZHVrX3VpbnQ4X3QpIDMxCit9OworCisvKiBNYXhpbXVt IGl0ZXJhdGlvbiBjb3VudCBmb3IgY29tcHV0aW5nIFVUQy10by1sb2NhbCB0aW1lIG9mZnNldCB3 aGVuCisgKiBjcmVhdGluZyBhbiBFQ01BU2NyaXB0IHRpbWUgdmFsdWUgZnJvbSBsb2NhbCBwYXJ0 cy4KKyAqLworI2RlZmluZSBEVUtfX0xPQ0FMX1RaT0ZGU0VUX01BWElURVIgICA0CisKKy8qIEJl Y2F1c2UgJ2RheSBzaW5jZSBlcG9jaCcgY2FuIGJlIG5lZ2F0aXZlIGFuZCBpcyB1c2VkIHRvIGNv bXB1dGUgd2Vla2RheQorICogdXNpbmcgYSBtb2R1bG8gb3BlcmF0aW9uLCBhZGQgdGhpcyBtdWx0 aXBsZSBvZiA3IHRvIGF2b2lkIG5lZ2F0aXZlIHZhbHVlcworICogd2hlbiB5ZWFyIGlzIGJlbG93 IDE5NzAgZXBvY2guICBFQ01BU2NyaXB0IHRpbWUgdmFsdWVzIGFyZSByZXN0cmljdGVkIHRvCisg KiArLy0gMTAwIG1pbGxpb24gZGF5cyBmcm9tIGVwb2NoLCBzbyB0aGlzIGFkZGVyIGZpdHMgbmlj ZWx5IGludG8gMzIgYml0cy4KKyAqIFJvdW5kIHRvIGEgbXVsdGlwbGUgb2YgNyAoPSBmbG9vcigx MDAwMDAwMDAgLyA3KSAqIDcpIGFuZCBhZGQgbWFyZ2luLgorICovCisjZGVmaW5lIERVS19fV0VF S0RBWV9NT0RfQURERVIgICgyMDAwMDAwMCAqIDcpICAvKiAweDA4NTgzYjAwICovCisKK0RVS19J TlRFUk5BTCBkdWtfYm9vbF90IGR1a19iaV9kYXRlX2lzX2xlYXBfeWVhcihkdWtfaW50X3QgeWVh cikgeworCWlmICgoeWVhciAlIDQpICE9IDApIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgoeWVh ciAlIDEwMCkgIT0gMCkgeworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCh5ZWFyICUgNDAwKSAhPSAw KSB7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19i b29sX3QgZHVrX2JpX2RhdGVfdGltZXZhbF9pbl92YWxpZF9yYW5nZShkdWtfZG91YmxlX3QgeCkg eworCXJldHVybiAoeCA+PSAtRFVLX0RBVEVfTVNFQ18xMDBNX0RBWVMgJiYgeCA8PSBEVUtfREFU RV9NU0VDXzEwME1fREFZUyk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19iaV9k YXRlX3RpbWV2YWxfaW5fbGVld2F5X3JhbmdlKGR1a19kb3VibGVfdCB4KSB7CisJcmV0dXJuICh4 ID49IC1EVUtfREFURV9NU0VDXzEwME1fREFZU19MRUVXQVkgJiYgeCA8PSBEVUtfREFURV9NU0VD XzEwME1fREFZU19MRUVXQVkpOworfQorCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfYmlf ZGF0ZV95ZWFyX2luX3ZhbGlkX3JhbmdlKGR1a19kb3VibGVfdCB4KSB7CisJcmV0dXJuICh4ID49 IERVS19EQVRFX01JTl9FQ01BX1lFQVIgJiYgeCA8PSBEVUtfREFURV9NQVhfRUNNQV9ZRUFSKTsK K30KKworRFVLX0xPQ0FMIGR1a19kb3VibGVfdCBkdWtfX3RpbWVjbGlwKGR1a19kb3VibGVfdCB4 KSB7CisJaWYgKCFEVUtfSVNGSU5JVEUoeCkpIHsKKwkJcmV0dXJuIERVS19ET1VCTEVfTkFOOwor CX0KKworCWlmICghZHVrX2JpX2RhdGVfdGltZXZhbF9pbl92YWxpZF9yYW5nZSh4KSkgeworCQly ZXR1cm4gRFVLX0RPVUJMRV9OQU47CisJfQorCisJeCA9IGR1a19qc190b2ludGVnZXJfbnVtYmVy KHgpOworCisJLyogSGVyZSB3ZSdkIGhhdmUgdGhlIG9wdGlvbiB0byBub3JtYWxpemUgLTAgdG8g KzAuICovCisJcmV0dXJuIHg7Cit9CisKKy8qIEludGVnZXIgZGl2aXNpb24gd2hpY2ggZmxvb3Jz IGFsc28gbmVnYXRpdmUgdmFsdWVzIGNvcnJlY3RseS4gKi8KK0RVS19MT0NBTCBkdWtfaW50X3Qg ZHVrX19kaXZfZmxvb3IoZHVrX2ludF90IGEsIGR1a19pbnRfdCBiKSB7CisJRFVLX0FTU0VSVChi ID4gMCk7CisJaWYgKGEgPj0gMCkgeworCQlyZXR1cm4gYSAvIGI7CisJfSBlbHNlIHsKKwkJLyog ZS5nLiBhID0gLTQsIGIgPSA1ICAtLT4gIC00IC0gNSArIDEgLyA1ICAtLT4gIC04IC8gNSAgLS0+ ICAtMQorCQkgKiAgICAgIGEgPSAtNSwgYiA9IDUgIC0tPiAgLTUgLSA1ICsgMSAvIDUgIC0tPiAg LTkgLyA1ICAtLT4gIC0xCisJCSAqICAgICAgYSA9IC02LCBiID0gNSAgLS0+ICAtNiAtIDUgKyAx IC8gNSAgLS0+ICAtMTAgLyA1ICAtLT4gIC0yCisJCSAqLworCQlyZXR1cm4gKGEgLSBiICsgMSkg LyBiOworCX0KK30KKworLyogQ29tcHV0ZSBkYXkgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2Yg YSBnaXZlbiB5ZWFyLiAqLworRFVLX0xPQ0FMIGR1a19pbnRfdCBkdWtfX2RheV9mcm9tX3llYXIo ZHVrX2ludF90IHllYXIpIHsKKwkvKiBOb3RlOiBpbiBpbnRlZ2VyIGFyaXRobWV0aWMsICh4IC8g NCkgaXMgc2FtZSBhcyBmbG9vcih4IC8gNCkgZm9yIG5vbi1uZWdhdGl2ZQorCSAqIHZhbHVlcywg YnV0IGlzIGluY29ycmVjdCBmb3IgbmVnYXRpdmUgb25lcy4KKwkgKi8KKwlyZXR1cm4gMzY1ICog KHllYXIgLSAxOTcwKQorCSAgICAgICArIGR1a19fZGl2X2Zsb29yKHllYXIgLSAxOTY5LCA0KQor CSAgICAgICAtIGR1a19fZGl2X2Zsb29yKHllYXIgLSAxOTAxLCAxMDApCisJICAgICAgICsgZHVr X19kaXZfZmxvb3IoeWVhciAtIDE2MDEsIDQwMCk7Cit9CisKKy8qIEdpdmVuIGEgZGF5IG51bWJl ciwgZGV0ZXJtaW5lIHllYXIgYW5kIGRheS13aXRoaW4teWVhci4gKi8KK0RVS19MT0NBTCBkdWtf aW50X3QgZHVrX195ZWFyX2Zyb21fZGF5KGR1a19pbnRfdCBkYXksIGR1a19zbWFsbF9pbnRfdCAq b3V0X2RheV93aXRoaW5feWVhcikgeworCWR1a19pbnRfdCB5ZWFyOworCWR1a19pbnRfdCBkaWZm X2RheXM7CisKKwkvKiBlc3RpbWF0ZSB5ZWFyIHVwd2FyZHMgKHRvd2FyZHMgcG9zaXRpdmUgaW5m aW5pdHkpLCB0aGVuIGJhY2sgZG93bjsKKwkgKiB0d28gaXRlcmF0aW9ucyBzaG91bGQgYmUgZW5v dWdoCisJICovCisKKwlpZiAoZGF5ID49IDApIHsKKwkJeWVhciA9IDE5NzAgKyBkYXkgLyAzNjU7 CisJfSBlbHNlIHsKKwkJeWVhciA9IDE5NzAgKyBkYXkgLyAzNjY7CisJfQorCisJZm9yICg7Oykg eworCQlkaWZmX2RheXMgPSBkdWtfX2RheV9mcm9tX3llYXIoeWVhcikgLSBkYXk7CisJCURVS19E REQoRFVLX0RERFBSSU5UKCJ5ZWFyPSVsZCBkYXk9JWxkLCBkaWZmX2RheXM9JWxkIiwgKGxvbmcp IHllYXIsIChsb25nKSBkYXksIChsb25nKSBkaWZmX2RheXMpKTsKKwkJaWYgKGRpZmZfZGF5cyA8 PSAwKSB7CisJCQlEVUtfQVNTRVJUKC1kaWZmX2RheXMgPCAzNjYpOyAgLyogZml0cyBpbnRvIGR1 a19zbWFsbF9pbnRfdCAqLworCQkJKm91dF9kYXlfd2l0aGluX3llYXIgPSAtZGlmZl9kYXlzOwor CQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0tPiB5ZWFyPSVsZCwgZGF5LXdpdGhpbi15ZWFyPSVs ZCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgeWVhciwgKGxvbmcpICpvdXRfZGF5 X3dpdGhpbl95ZWFyKSk7CisJCQlEVUtfQVNTRVJUKCpvdXRfZGF5X3dpdGhpbl95ZWFyID49IDAp OworCQkJRFVLX0FTU0VSVCgqb3V0X2RheV93aXRoaW5feWVhciA8IChkdWtfYmlfZGF0ZV9pc19s ZWFwX3llYXIoeWVhcikgPyAzNjYgOiAzNjUpKTsKKwkJCXJldHVybiB5ZWFyOworCQl9CisKKwkJ LyogTm90ZTogdGhpcyBpcyB2ZXJ5IHRyaWNreTsgd2UgbXVzdCBuZXZlciAnb3ZlcnNob290JyB0 aGUKKwkJICogY29ycmVjdGlvbiBkb3dud2FyZHMuCisJCSAqLworCQl5ZWFyIC09IDEgKyAoZGlm Zl9kYXlzIC0gMSkgLyAzNjY7ICAvKiBjb25zZXJ2YXRpdmUgKi8KKwl9Cit9CisKKy8qIEdpdmVu IGEgKHllYXIsIG1vbnRoLCBkYXktd2l0aGluLW1vbnRoKSB0cmlwbGUsIGNvbXB1dGUgZGF5IG51 bWJlci4KKyAqIFRoZSBpbnB1dCB0cmlwbGUgaXMgdW4tbm9ybWFsaXplZCBhbmQgbWF5IGNvbnRh aW4gbm9uLWZpbml0ZSB2YWx1ZXMuCisgKi8KK0RVS19MT0NBTCBkdWtfZG91YmxlX3QgZHVrX19t YWtlX2RheShkdWtfZG91YmxlX3QgeWVhciwgZHVrX2RvdWJsZV90IG1vbnRoLCBkdWtfZG91Ymxl X3QgZGF5KSB7CisJZHVrX2ludF90IGRheV9udW07CisJZHVrX2Jvb2xfdCBpc19sZWFwOworCWR1 a19zbWFsbF9pbnRfdCBpLCBuOworCisJLyogQXNzdW1lIHRoYXQgeWVhciwgbW9udGgsIGRheSBh cmUgYWxsIGNvZXJjZWQgdG8gd2hvbGUgbnVtYmVycy4KKwkgKiBUaGV5IG1heSBhbHNvIGJlIE5h TiBvciBpbmZpbml0eSwgaW4gd2hpY2ggY2FzZSB0aGlzIGZ1bmN0aW9uCisJICogbXVzdCByZXR1 cm4gTmFOIG9yIGluZmluaXR5IHRvIGVuc3VyZSB0aW1lIHZhbHVlIGJlY29tZXMgTmFOLgorCSAq IElmICdkYXknIGlzIE5hTiwgdGhlIGZpbmFsIHJldHVybiB3aWxsIGVuZCB1cCByZXR1cm5pbmcg YSBOYU4sCisJICogc28gaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoZWNrZWQgaGVyZS4KKwkgKi8K KworCWlmICghRFVLX0lTRklOSVRFKHllYXIpIHx8ICFEVUtfSVNGSU5JVEUobW9udGgpKSB7CisJ CXJldHVybiBEVUtfRE9VQkxFX05BTjsKKwl9CisKKwl5ZWFyICs9IERVS19GTE9PUihtb250aCAv IDEyLjApOworCisJbW9udGggPSBEVUtfRk1PRChtb250aCwgMTIuMCk7CisJaWYgKG1vbnRoIDwg MC4wKSB7CisJCS8qIGhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgKi8KKwkJbW9udGggKz0gMTIuMDsK Kwl9CisKKwkvKiBUaGUgYWxnb3JpdGhtIGluIEU1LjEgU2VjdGlvbiAxNS45LjEuMTIgbm9ybWFs aXplcyBtb250aCwgYnV0CisJICogZG9lcyBub3Qgbm9ybWFsaXplIHRoZSBkYXktb2YtbW9udGgg KG5vciBjaGVjayB3aGV0aGVyIG9yIG5vdAorCSAqIGl0IGlzIGZpbml0ZSkgYmVjYXVzZSBpdCdz IG5vdCBuZWNlc3NhcnkgZm9yIGZpbmRpbmcgdGhlIGRheQorCSAqIG51bWJlciB3aGljaCBtYXRj aGVzIHRoZSAoeWVhcixtb250aCkgcGFpci4KKwkgKgorCSAqIFdlIGFzc3VtZSB0aGF0IGR1a19f ZGF5X2Zyb21feWVhcigpIGlzIGV4YWN0IGhlcmUuCisJICoKKwkgKiBXaXRob3V0IGFuIGV4cGxp Y2l0IGluZmluaXR5IC8gTmFOIGNoZWNrIGluIHRoZSBiZWdpbm5pbmcsCisJICogZGF5X251bSB3 b3VsZCBiZSBhIGJvZ3VzIGludGVnZXIgaGVyZS4KKwkgKgorCSAqIEl0J3MgcG9zc2libGUgZm9y ICd5ZWFyJyB0byBiZSBvdXQgb2YgaW50ZWdlciByYW5nZSBoZXJlLgorCSAqIElmIHNvLCB3ZSBu ZWVkIHRvIHJldHVybiBOYU4gd2l0aG91dCBpbnRlZ2VyIG92ZXJmbG93LgorCSAqIFRoaXMgZml4 ZXMgdGVzdC1idWctc2V0eWVhci1vdmVyZmxvdy5qcy4KKwkgKi8KKworCWlmICghZHVrX2JpX2Rh dGVfeWVhcl9pbl92YWxpZF9yYW5nZSh5ZWFyKSkgeworCQlEVUtfREQoRFVLX0REUFJJTlQoInll YXIgbm90IGluIGVjbWFzY3JpcHQgdmFsaWQgcmFuZ2UsIGF2b2lkIGludGVnZXIgb3ZlcmZsb3c6 ICVsZiIsIChkb3VibGUpIHllYXIpKTsKKwkJcmV0dXJuIERVS19ET1VCTEVfTkFOOworCX0KKwlk YXlfbnVtID0gZHVrX19kYXlfZnJvbV95ZWFyKChkdWtfaW50X3QpIHllYXIpOworCWlzX2xlYXAg PSBkdWtfYmlfZGF0ZV9pc19sZWFwX3llYXIoKGR1a19pbnRfdCkgeWVhcik7CisKKwluID0gKGR1 a19zbWFsbF9pbnRfdCkgbW9udGg7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlkYXlf bnVtICs9IGR1a19fZGF5c19pbl9tb250aFtpXTsKKwkJaWYgKGkgPT0gMSAmJiBpc19sZWFwKSB7 CisJCQlkYXlfbnVtKys7CisJCX0KKwl9CisKKwkvKiBJZiAnZGF5JyBpcyBOYU4sIHJldHVybnMg TmFOLiAqLworCXJldHVybiAoZHVrX2RvdWJsZV90KSBkYXlfbnVtICsgZGF5OworfQorCisvKiBT cGxpdCB0aW1lIHZhbHVlIGludG8gcGFydHMuICBUaGUgdGltZSB2YWx1ZSBtYXkgY29udGFpbiBm cmFjdGlvbnMgKGl0IG1heQorICogY29tZSBmcm9tIGR1a190aW1lX3RvX2NvbXBvbmVudHMoKSBB UEkgY2FsbCkgd2hpY2ggYXJlIHRydW5jYXRlZC4gIFBvc3NpYmxlCisgKiBsb2NhbCB0aW1lIGFk anVzdG1lbnQgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIHdoZW4gcmVhZGluZyB0aGUgdGltZSB2 YWx1ZS4KKyAqLworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2JpX2RhdGVfdGltZXZhbF90b19wYXJ0 cyhkdWtfZG91YmxlX3QgZCwgZHVrX2ludF90ICpwYXJ0cywgZHVrX2RvdWJsZV90ICpkcGFydHMs IGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtfZG91YmxlX3QgZDEsIGQyOworCWR1a19p bnRfdCB0MSwgdDI7CisJZHVrX2ludF90IGRheV9zaW5jZV9lcG9jaDsKKwlkdWtfaW50X3QgeWVh cjsgIC8qIGRvZXMgbm90IGZpdCBpbnRvIDE2IGJpdHMgKi8KKwlkdWtfc21hbGxfaW50X3QgZGF5 X2luX3llYXI7CisJZHVrX3NtYWxsX2ludF90IG1vbnRoOworCWR1a19zbWFsbF9pbnRfdCBkYXk7 CisJZHVrX3NtYWxsX2ludF90IGRpbTsKKwlkdWtfaW50X3QgamFuMV9zaW5jZV9lcG9jaDsKKwlk dWtfc21hbGxfaW50X3QgamFuMV93ZWVrZGF5OworCWR1a19pbnRfdCBlcXVpdl95ZWFyOworCWR1 a19zbWFsbF91aW50X3QgaTsKKwlkdWtfYm9vbF90IGlzX2xlYXA7CisJZHVrX3NtYWxsX2ludF90 IGFycmlkeDsKKworCURVS19BU1NFUlQoRFVLX0lTRklOSVRFKGQpKTsgICAgLyogY2FsbGVyIGNo ZWNrcyAqLworCWQgPSBEVUtfRkxPT1IoZCk7ICAvKiByZW1vdmUgZnJhY3Rpb25zIGlmIHByZXNl bnQgKi8KKwlEVUtfQVNTRVJUKERVS19GTE9PUihkKSA9PSBkKTsKKworCS8qIFRoZSB0aW1ldmFs dWUgbXVzdCBiZSBpbiB2YWxpZCBFQ01BU2NyaXB0IHJhbmdlLCBidXQgc2luY2UgYSBsb2NhbAor CSAqIHRpbWUgb2Zmc2V0IGNhbiBiZSBhcHBsaWVkLCB3ZSBuZWVkIHRvIGFsbG93IGEgKy8tIDI0 aCBsZWV3YXkgdG8KKwkgKiB0aGUgdmFsdWUuICBJbiBvdGhlciB3b3JkcywgYWx0aG91Z2ggdGhl IFVUQyB0aW1lIGlzIHdpdGhpbiB0aGUKKwkgKiBFQ01BU2NyaXB0IHJhbmdlLCB0aGUgbG9jYWwg cGFydCB2YWx1ZXMgY2FuIGJlIGp1c3Qgb3V0c2lkZSBvZiBpdC4KKwkgKi8KKwlEVUtfVU5SRUYo ZHVrX2JpX2RhdGVfdGltZXZhbF9pbl9sZWV3YXlfcmFuZ2UpOworCURVS19BU1NFUlQoZHVrX2Jp X2RhdGVfdGltZXZhbF9pbl9sZWV3YXlfcmFuZ2UoZCkpOworCisJLyogVGhlc2UgY29tcHV0YXRp b25zIGFyZSBndWFyYW50ZWVkIHRvIGJlIGV4YWN0IGZvciB0aGUgdmFsaWQKKwkgKiBFNSB0aW1l IHZhbHVlIHJhbmdlLCBhc3N1bWluZyBtaWxsaXNlY29uZHMgd2l0aG91dCBmcmFjdGlvbnMuCisJ ICovCisJZDEgPSAoZHVrX2RvdWJsZV90KSBEVUtfRk1PRChkLCAoZG91YmxlKSBEVUtfREFURV9N U0VDX0RBWSk7CisJaWYgKGQxIDwgMC4wKSB7CisJCS8qIGRlYWwgd2l0aCBuZWdhdGl2ZSB2YWx1 ZXMgKi8KKwkJZDEgKz0gKGR1a19kb3VibGVfdCkgRFVLX0RBVEVfTVNFQ19EQVk7CisJfQorCWQy ID0gRFVLX0ZMT09SKChkb3VibGUpIChkIC8gKGR1a19kb3VibGVfdCkgRFVLX0RBVEVfTVNFQ19E QVkpKTsKKwlEVUtfQVNTRVJUKGQyICogKChkdWtfZG91YmxlX3QpIERVS19EQVRFX01TRUNfREFZ KSArIGQxID09IGQpOworCS8qIG5vdyBleHBlY3RlZCB0byBmaXQgaW50byBhIDMyLWJpdCBpbnRl Z2VyICovCisJdDEgPSAoZHVrX2ludF90KSBkMTsKKwl0MiA9IChkdWtfaW50X3QpIGQyOworCWRh eV9zaW5jZV9lcG9jaCA9IHQyOworCURVS19BU1NFUlQoKGR1a19kb3VibGVfdCkgdDEgPT0gZDEp OworCURVS19BU1NFUlQoKGR1a19kb3VibGVfdCkgdDIgPT0gZDIpOworCisJLyogdDEgPSBtaWxs aXNlY29uZHMgd2l0aGluIGRheSAoZml0cyAzMiBiaXQpCisJICogdDIgPSBkYXkgbnVtYmVyIGZy b20gZXBvY2ggKGZpdHMgMzIgYml0LCBtYXkgYmUgbmVnYXRpdmUpCisJICovCisKKwlwYXJ0c1tE VUtfREFURV9JRFhfTUlMTElTRUNPTkRdID0gdDEgJSAxMDAwOyB0MSAvPSAxMDAwOworCXBhcnRz W0RVS19EQVRFX0lEWF9TRUNPTkRdID0gdDEgJSA2MDsgdDEgLz0gNjA7CisJcGFydHNbRFVLX0RB VEVfSURYX01JTlVURV0gPSB0MSAlIDYwOyB0MSAvPSA2MDsKKwlwYXJ0c1tEVUtfREFURV9JRFhf SE9VUl0gPSB0MTsKKwlEVUtfQVNTRVJUKHBhcnRzW0RVS19EQVRFX0lEWF9NSUxMSVNFQ09ORF0g Pj0gMCAmJiBwYXJ0c1tEVUtfREFURV9JRFhfTUlMTElTRUNPTkRdIDw9IDk5OSk7CisJRFVLX0FT U0VSVChwYXJ0c1tEVUtfREFURV9JRFhfU0VDT05EXSA+PSAwICYmIHBhcnRzW0RVS19EQVRFX0lE WF9TRUNPTkRdIDw9IDU5KTsKKwlEVUtfQVNTRVJUKHBhcnRzW0RVS19EQVRFX0lEWF9NSU5VVEVd ID49IDAgJiYgcGFydHNbRFVLX0RBVEVfSURYX01JTlVURV0gPD0gNTkpOworCURVS19BU1NFUlQo cGFydHNbRFVLX0RBVEVfSURYX0hPVVJdID49IDAgJiYgcGFydHNbRFVLX0RBVEVfSURYX0hPVVJd IDw9IDIzKTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJkPSVsZiwgZDE9JWxmLCBkMj0lbGYs IHQxPSVsZCwgdDI9JWxkLCBwYXJ0czogaG91cj0lbGQgbWluPSVsZCBzZWM9JWxkIG1zZWM9JWxk IiwKKwkgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSBkLCAoZG91YmxlKSBkMSwgKGRvdWJs ZSkgZDIsIChsb25nKSB0MSwgKGxvbmcpIHQyLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSBwYXJ0c1tEVUtfREFURV9JRFhfSE9VUl0sCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IHBhcnRzW0RVS19EQVRFX0lEWF9NSU5VVEVdLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSBwYXJ0c1tEVUtfREFURV9JRFhfU0VDT05EXSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9u ZykgcGFydHNbRFVLX0RBVEVfSURYX01JTExJU0VDT05EXSkpOworCisJLyogVGhpcyBhc3NlcnQg ZGVwZW5kcyBvbiB0aGUgaW5wdXQgcGFydHMgcmVwcmVzZW50aW5nIHRpbWUgaW5zaWRlCisJICog dGhlIEVDTUFTY3JpcHQgcmFuZ2UuCisJICovCisJRFVLX0FTU0VSVCh0MiArIERVS19fV0VFS0RB WV9NT0RfQURERVIgPj0gMCk7CisJcGFydHNbRFVLX0RBVEVfSURYX1dFRUtEQVldID0gKHQyICsg NCArIERVS19fV0VFS0RBWV9NT0RfQURERVIpICUgNzsgIC8qIEU1LjEgU2VjdGlvbiAxNS45LjEu NiAqLworCURVS19BU1NFUlQocGFydHNbRFVLX0RBVEVfSURYX1dFRUtEQVldID49IDAgJiYgcGFy dHNbRFVLX0RBVEVfSURYX1dFRUtEQVldIDw9IDYpOworCisJeWVhciA9IGR1a19feWVhcl9mcm9t X2RheSh0MiwgJmRheV9pbl95ZWFyKTsKKwlkYXkgPSBkYXlfaW5feWVhcjsKKwlpc19sZWFwID0g ZHVrX2JpX2RhdGVfaXNfbGVhcF95ZWFyKHllYXIpOworCWZvciAobW9udGggPSAwOyBtb250aCA8 IDEyOyBtb250aCsrKSB7CisJCWRpbSA9IGR1a19fZGF5c19pbl9tb250aFttb250aF07CisJCWlm IChtb250aCA9PSAxICYmIGlzX2xlYXApIHsKKwkJCWRpbSsrOworCQl9CisJCURVS19EREQoRFVL X0RERFBSSU5UKCJtb250aD0lbGQsIGRpbT0lbGQsIGRheT0lbGQiLAorCQkgICAgICAgICAgICAg ICAgICAgICAobG9uZykgbW9udGgsIChsb25nKSBkaW0sIChsb25nKSBkYXkpKTsKKwkJaWYgKGRh eSA8IGRpbSkgeworCQkJYnJlYWs7CisJCX0KKwkJZGF5IC09IGRpbTsKKwl9CisJRFVLX0RERChE VUtfREREUFJJTlQoImZpbmFsIG1vbnRoPSVsZCIsIChsb25nKSBtb250aCkpOworCURVS19BU1NF UlQobW9udGggPj0gMCAmJiBtb250aCA8PSAxMSk7CisJRFVLX0FTU0VSVChkYXkgPj0gMCAmJiBk YXkgPD0gMzEpOworCisJLyogRXF1aXZhbGVudCB5ZWFyIG1hcHBpbmcsIHVzZWQgdG8gYXZvaWQg RFNUIHRyb3VibGUgd2hlbiBwbGF0Zm9ybQorCSAqIG1heSBmYWlsIHRvIHByb3ZpZGUgcmVhc29u YWJsZSBEU1QgYW5zd2VycyBmb3IgZGF0ZXMgb3V0c2lkZSB0aGUKKwkgKiBvcmRpbmFyeSByYW5n ZSAoZS5nLiAxOTcwLTIwMzgpLiAgQW4gZXF1aXZhbGVudCB5ZWFyIGhhcyB0aGUgc2FtZQorCSAq IGxlYXAteWVhci1uZXNzIGFzIHRoZSBvcmlnaW5hbCB5ZWFyIGFuZCBiZWdpbnMgb24gdGhlIHNh bWUgd2Vla2RheQorCSAqIChKYW4gMSkuCisJICoKKwkgKiBUaGUgeWVhciAyMDM4IGlzIGF2b2lk ZWQgYmVjYXVzZSB0aGVyZSBzZWVtIHRvIGJlIHByb2JsZW1zIHdpdGggaXQKKwkgKiBvbiBzb21l IHBsYXRmb3Jtcy4gIFRoZSB5ZWFyIDE5NzAgaXMgYWxzbyBhdm9pZGVkIGFzIHRoZXJlIHdlcmUK KwkgKiBwcmFjdGljYWwgcHJvYmxlbXMgd2l0aCBpdDsgYW4gZXF1aXZhbGVudCB5ZWFyIGlzIHVz ZWQgZm9yIGl0IHRvbywKKwkgKiB3aGljaCBicmVha3Mgc29tZSBEU1QgY29tcHV0YXRpb25zIGZv ciAxOTcwIHJpZ2h0IG5vdywgc2VlIGUuZy4KKwkgKiB0ZXN0LWJpLWRhdGUtdHpvZmZzZXQtYnJ1 dGUtZmkuanMuCisJICovCisJaWYgKChmbGFncyAmIERVS19EQVRFX0ZMQUdfRVFVSVZZRUFSKSAm JiAoeWVhciA8IDE5NzEgfHwgeWVhciA+IDIwMzcpKSB7CisJCURVS19BU1NFUlQoaXNfbGVhcCA9 PSAwIHx8IGlzX2xlYXAgPT0gMSk7CisKKwkJamFuMV9zaW5jZV9lcG9jaCA9IGRheV9zaW5jZV9l cG9jaCAtIGRheV9pbl95ZWFyOyAgLyogZGF5IG51bWJlciBmb3IgSmFuIDEgc2luY2UgZXBvY2gg Ki8KKwkJRFVLX0FTU0VSVChqYW4xX3NpbmNlX2Vwb2NoICsgRFVLX19XRUVLREFZX01PRF9BRERF UiA+PSAwKTsKKwkJamFuMV93ZWVrZGF5ID0gKGphbjFfc2luY2VfZXBvY2ggKyA0ICsgRFVLX19X RUVLREFZX01PRF9BRERFUikgJSA3OyAgLyogRTUuMSBTZWN0aW9uIDE1LjkuMS42ICovCisJCURV S19BU1NFUlQoamFuMV93ZWVrZGF5ID49IDAgJiYgamFuMV93ZWVrZGF5IDw9IDYpOworCQlhcnJp ZHggPSBqYW4xX3dlZWtkYXk7CisJCWlmIChpc19sZWFwKSB7CisJCQlhcnJpZHggKz0gNzsKKwkJ fQorCQlEVUtfQVNTRVJUKGFycmlkeCA+PSAwICYmIGFycmlkeCA8IChkdWtfc21hbGxfaW50X3Qp IChzaXplb2YoZHVrX19kYXRlX2VxdWl2eWVhcikgLyBzaXplb2YoZHVrX3VpbnQ4X3QpKSk7CisK KwkJZXF1aXZfeWVhciA9IChkdWtfaW50X3QpIGR1a19fZGF0ZV9lcXVpdnllYXJbYXJyaWR4XSAr IDE5NzA7CisJCXllYXIgPSBlcXVpdl95ZWFyOworCQlEVUtfREREKERVS19ERERQUklOVCgiZXF1 aXYgeWVhciBtYXBwaW5nLCB5ZWFyPSVsZCwgZGF5X2luX3llYXI9JWxkLCBkYXlfc2luY2VfZXBv Y2g9JWxkLCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJqYW4xX3NpbmNlX2Vwb2NoPSVsZCwg amFuMV93ZWVrZGF5PSVsZCAtPiBlcXVpdiB5ZWFyICVsZCIsCisJCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSB5ZWFyLCAobG9uZykgZGF5X2luX3llYXIsIChsb25nKSBkYXlfc2luY2VfZXBv Y2gsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBqYW4xX3NpbmNlX2Vwb2NoLCAobG9u ZykgamFuMV93ZWVrZGF5LCAobG9uZykgZXF1aXZfeWVhcikpOworCX0KKworCXBhcnRzW0RVS19E QVRFX0lEWF9ZRUFSXSA9IHllYXI7CisJcGFydHNbRFVLX0RBVEVfSURYX01PTlRIXSA9IG1vbnRo OworCXBhcnRzW0RVS19EQVRFX0lEWF9EQVldID0gZGF5OworCisJaWYgKGZsYWdzICYgRFVLX0RB VEVfRkxBR19PTkVCQVNFRCkgeworCQlwYXJ0c1tEVUtfREFURV9JRFhfTU9OVEhdKys7ICAvKiB6 ZXJvLWJhc2VkIC0+IG9uZS1iYXNlZCAqLworCQlwYXJ0c1tEVUtfREFURV9JRFhfREFZXSsrOyAg ICAvKiAtIiItICovCisJfQorCisJaWYgKGRwYXJ0cyAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7 IGkgPCBEVUtfREFURV9JRFhfTlVNX1BBUlRTOyBpKyspIHsKKwkJCWRwYXJ0c1tpXSA9IChkdWtf ZG91YmxlX3QpIHBhcnRzW2ldOworCQl9CisJfQorfQorCisvKiBDb21wdXRlIHRpbWUgdmFsdWUg ZnJvbSAoZG91YmxlKSBwYXJ0cy4gIFRoZSBwYXJ0cyBjYW4gYmUgZWl0aGVyIFVUQworICogb3Ig bG9jYWwgdGltZTsgaWYgbG9jYWwsIHRoZXkgbmVlZCB0byBiZSAoY29uY2VwdHVhbGx5KSBjb252 ZXJ0ZWQgaW50bworICogVVRDIHRpbWUuICBUaGUgcGFydHMgbWF5IHJlcHJlc2VudCB2YWxpZCBv ciBpbnZhbGlkIHRpbWUsIGFuZCBtYXkgYmUKKyAqIHdpbGRseSBvdXQgb2YgcmFuZ2UgKGJ1dCBt YXkgY2FuY2VsIGVhY2ggb3RoZXIgYW5kIHN0aWxsIGNvbWUgb3V0IGluCisgKiB0aGUgdmFsaWQg RGF0ZSByYW5nZSkuCisgKi8KK0RVS19JTlRFUk5BTCBkdWtfZG91YmxlX3QgZHVrX2JpX2RhdGVf Z2V0X3RpbWV2YWxfZnJvbV9kcGFydHMoZHVrX2RvdWJsZV90ICpkcGFydHMsIGR1a19zbWFsbF91 aW50X3QgZmxhZ3MpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfUEFSQU5PSURfREFURV9DT01QVVRB VElPTikKKwkvKiBTZWUgY29tbWVudHMgYmVsb3cgb24gTWFrZVRpbWUgd2h5IHRoZXNlIGFyZSB2 b2xhdGlsZS4gKi8KKwl2b2xhdGlsZSBkdWtfZG91YmxlX3QgdG1wX3RpbWU7CisJdm9sYXRpbGUg ZHVrX2RvdWJsZV90IHRtcF9kYXk7CisJdm9sYXRpbGUgZHVrX2RvdWJsZV90IGQ7CisjZWxzZQor CWR1a19kb3VibGVfdCB0bXBfdGltZTsKKwlkdWtfZG91YmxlX3QgdG1wX2RheTsKKwlkdWtfZG91 YmxlX3QgZDsKKyNlbmRpZgorCWR1a19zbWFsbF91aW50X3QgaTsKKwlkdWtfaW50X3QgdHpvZmYs IHR6b2ZmcHJldjEsIHR6b2ZmcHJldjI7CisKKwkvKiBFeHBlY3RzICd0aGlzJyBhdCB0b3Agb2Yg c3RhY2sgb24gZW50cnkuICovCisKKwkvKiBDb2VyY2UgYWxsIGZpbml0ZSBwYXJ0cyB3aXRoIFRv SW50ZWdlcigpLiAgVG9JbnRlZ2VyKCkgbXVzdCBub3QKKwkgKiBiZSBjYWxsZWQgZm9yIE5hTi9J bmZpbml0eSBiZWNhdXNlIGl0IHdpbGwgY29udmVydCBlLmcuIE5hTiB0bworCSAqIHplcm8uICBJ ZiBUb0ludGVnZXIoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwgdGhpcyBoYXMgbm8gc2lkZQor CSAqIGVmZmVjdHMgYW5kIGlzIGlkZW1wb3RlbnQuCisJICoKKwkgKiBEb24ndCByZWFkIGRwYXJ0 c1tEVUtfREFURV9JRFhfV0VFS0RBWV07IGl0IHdpbGwgY2F1c2UgVmFsZ3JpbmQKKwkgKiBpc3N1 ZXMgaWYgdGhlIHZhbHVlIGlzIHVuaW5pdGlhbGl6ZWQuCisJICovCisJZm9yIChpID0gMDsgaSA8 PSBEVUtfREFURV9JRFhfTUlMTElTRUNPTkQ7IGkrKykgeworCQkvKiBTQ0FOQlVJTEQ6IHNjYW4t YnVpbGQgY29tcGxhaW5zIGhlcmUgYWJvdXQgYXNzaWduZWQgdmFsdWUKKwkJICogYmVpbmcgZ2Fy YmFnZSBvciB1bmRlZmluZWQuICBUaGlzIGlzIGNvcnJlY3QgYnV0IG9wZXJhdGluZworCQkgKiBv biB1bmRlZmluZWQgdmFsdWVzIGhhcyBubyBpbGwgZWZmZWN0IGFuZCBpcyBpZ25vcmVkIGJ5IHRo ZQorCQkgKiBjYWxsZXIgaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBoYXBwZW5zLgorCQkgKi8KKwkJ ZCA9IGRwYXJ0c1tpXTsKKwkJaWYgKERVS19JU0ZJTklURShkKSkgeworCQkJZHBhcnRzW2ldID0g ZHVrX2pzX3RvaW50ZWdlcl9udW1iZXIoZCk7CisJCX0KKwl9CisKKwkvKiBVc2UgZXhwbGljaXQg c3RlcHMgaW4gY29tcHV0YXRpb24gdG8gdHJ5IHRvIGVuc3VyZSB0aGF0CisJICogY29tcHV0YXRp b24gaGFwcGVucyB3aXRoIGludGVybWVkaWF0ZSByZXN1bHRzIGNvZXJjZWQgdG8KKwkgKiBkb3Vi bGUgdmFsdWVzIChpbnN0ZWFkIG9mIHVzaW5nIHNvbWV0aGluZyBtb3JlIGFjY3VyYXRlKS4KKwkg KiBFLmcuIEU1LjEgU2VjdGlvbiAxNS45LjEuMTEgcmVxdWlyZXMgdXNlIG9mIElFRUUgNzU0CisJ ICogcnVsZXMgKD0gRUNNQVNjcmlwdCAnKycgYW5kICcqJyBvcGVyYXRvcnMpLgorCSAqCisJICog V2l0aG91dCAndm9sYXRpbGUnIGV2ZW4gdGhpcyBhcHByb2FjaCBmYWlscyBvbiBzb21lIHBsYXRm b3JtCisJICogYW5kIGNvbXBpbGVyIGNvbWJpbmF0aW9ucy4gIEZvciBpbnN0YW5jZSwgZ2NjIDQu OC4xIG9uIFVidW50dQorCSAqIDY0LWJpdCwgd2l0aCAtbTMyIGFuZCB3aXRob3V0IC1zdGQ9Yzk5 LCB0ZXN0LWJpLWRhdGUtY2FuY2VsaW5nLmpzCisJICogd291bGQgZmFpbCBiZWNhdXNlIG9mIHNv bWUgb3B0aW1pemF0aW9ucyB3aGVuIGNvbXB1dGluZyB0bXBfdGltZQorCSAqIChNYWtlVGltZSBi ZWxvdykuICBBZGRpbmcgJ3ZvbGF0aWxlJyB0byB0bXBfdGltZSBzb2x2ZWQgdGhpcworCSAqIHBh cnRpY3VsYXIgcHJvYmxlbSAoYW5ub3lpbmdseSwgYWxzbyBhZGRpbmcgZGVidWcgcHJpbnRzIG9y CisJICogcnVubmluZyB0aGUgZXhlY3V0YWJsZSB1bmRlciB2YWxncmluZCBoaWRlcyBpdCkuCisJ ICovCisKKwkvKiBNYWtlVGltZSAqLworCXRtcF90aW1lID0gMC4wOworCXRtcF90aW1lICs9IGRw YXJ0c1tEVUtfREFURV9JRFhfSE9VUl0gKiAoKGR1a19kb3VibGVfdCkgRFVLX0RBVEVfTVNFQ19I T1VSKTsKKwl0bXBfdGltZSArPSBkcGFydHNbRFVLX0RBVEVfSURYX01JTlVURV0gKiAoKGR1a19k b3VibGVfdCkgRFVLX0RBVEVfTVNFQ19NSU5VVEUpOworCXRtcF90aW1lICs9IGRwYXJ0c1tEVUtf REFURV9JRFhfU0VDT05EXSAqICgoZHVrX2RvdWJsZV90KSBEVUtfREFURV9NU0VDX1NFQ09ORCk7 CisJdG1wX3RpbWUgKz0gZHBhcnRzW0RVS19EQVRFX0lEWF9NSUxMSVNFQ09ORF07CisKKwkvKiBN YWtlRGF5ICovCisJdG1wX2RheSA9IGR1a19fbWFrZV9kYXkoZHBhcnRzW0RVS19EQVRFX0lEWF9Z RUFSXSwgZHBhcnRzW0RVS19EQVRFX0lEWF9NT05USF0sIGRwYXJ0c1tEVUtfREFURV9JRFhfREFZ XSk7CisKKwkvKiBNYWtlRGF0ZSAqLworCWQgPSB0bXBfZGF5ICogKChkdWtfZG91YmxlX3QpIERV S19EQVRFX01TRUNfREFZKSArIHRtcF90aW1lOworCisJRFVLX0RERChEVUtfREREUFJJTlQoInRp bWU9JWxmIGRheT0lbGYgLS0+IHRpbWV2YWw9JWxmIiwKKwkgICAgICAgICAgICAgICAgICAgICAo ZG91YmxlKSB0bXBfdGltZSwgKGRvdWJsZSkgdG1wX2RheSwgKGRvdWJsZSkgZCkpOworCisJLyog T3B0aW9uYWwgVVRDIGNvbnZlcnNpb24uICovCisJaWYgKGZsYWdzICYgRFVLX0RBVEVfRkxBR19M T0NBTFRJTUUpIHsKKwkJLyogRFVLX1VTRV9EQVRFX0dFVF9MT0NBTF9UWk9GRlNFVCgpIG5lZWRz IHRvIGJlIGNhbGxlZCB3aXRoIGEKKwkJICogdGltZSB2YWx1ZSBjb21wdXRlZCBmcm9tIFVUQyBw YXJ0cy4gIEF0IHRoaXMgcG9pbnQgd2Ugb25seQorCQkgKiBoYXZlICdkJyB3aGljaCBpcyBhIHRp bWUgdmFsdWUgY29tcHV0ZWQgZnJvbSBsb2NhbCBwYXJ0cywgc28KKwkJICogaXQgaXMgb2ZmIGJ5 IHRoZSBVVEMtdG8tbG9jYWwgdGltZSBvZmZzZXQgd2hpY2ggd2UgZG9uJ3Qga25vdworCQkgKiB5 ZXQuICBUaGUgY3VycmVudCBzb2x1dGlvbiBmb3IgY29tcHV0aW5nIHRoZSBVVEMtdG8tbG9jYWwK KwkJICogdGltZSBvZmZzZXQgaXMgdG8gaXRlcmF0ZSBhIGZldyB0aW1lcyBhbmQgZGV0ZWN0IGEg Zml4ZWQKKwkJICogcG9pbnQgb3IgYSB0d28tY3ljbGUgbG9vcCAob3IgYSBzYW5pdHkgaXRlcmF0 aW9uIGxpbWl0KSwKKwkJICogc2VlIHRlc3QtYmktZGF0ZS1sb2NhbC1wYXJ0cy5qcyBhbmQgdGVz dC1iaS1kYXRlLXR6b2Zmc2V0LWJhc2ljLWZpLmpzLgorCQkgKgorCQkgKiBFNS4xIFNlY3Rpb24g MTUuOS4xLjk6CisJCSAqIFVUQyh0KSA9IHQgLSBMb2NhbFRaQSAtIERheWxpZ2h0U2F2aW5nVEEo dCAtIExvY2FsVFpBKQorCQkgKgorCQkgKiBGb3IgTmFOL2luZiwgRFVLX1VTRV9EQVRFX0dFVF9M T0NBTF9UWk9GRlNFVCgpIHJldHVybnMgMC4KKwkJICovCisKKyNpZiAwCisJCS8qIE9sZCBzb2x1 dGlvbjogZG9uJ3QgaXRlcmF0ZSwgaW5jb3JyZWN0ICovCisJCXR6b2ZmID0gRFVLX1VTRV9EQVRF X0dFVF9MT0NBTF9UWk9GRlNFVChkKTsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInR6b2Zmc2V0 IHcvbyBpdGVyYXRpb24sIHR6b2ZmPSVsZCIsIChsb25nKSB0em9mZikpOworCQlkIC09IHR6b2Zm ICogMTAwMEw7CisJCURVS19VTlJFRih0em9mZnByZXYxKTsKKwkJRFVLX1VOUkVGKHR6b2ZmcHJl djIpOworI2VuZGlmCisKKwkJLyogSXRlcmF0aW9uIHNvbHV0aW9uICovCisJCXR6b2ZmID0gMDsK KwkJdHpvZmZwcmV2MSA9IDk5OTk5OTk5OUw7ICAvKiBpbnZhbGlkIHZhbHVlIHdoaWNoIG5ldmVy IG1hdGNoZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IERVS19fTE9DQUxfVFpPRkZTRVRfTUFYSVRF UjsgaSsrKSB7CisJCQl0em9mZnByZXYyID0gdHpvZmZwcmV2MTsKKwkJCXR6b2ZmcHJldjEgPSB0 em9mZjsKKwkJCXR6b2ZmID0gRFVLX1VTRV9EQVRFX0dFVF9MT0NBTF9UWk9GRlNFVChkIC0gdHpv ZmYgKiAxMDAwTCk7CisJCQlEVUtfREREKERVS19ERERQUklOVCgidHpvZmZzZXQgaXRlcmF0aW9u LCBpPSVkLCB0em9mZj0lbGQsIHR6b2ZmcHJldjE9JWxkIHR6b2ZmcHJldjI9JWxkIiwKKwkJCSAg ICAgICAgICAgICAgICAgICAgIChpbnQpIGksIChsb25nKSB0em9mZiwgKGxvbmcpIHR6b2ZmcHJl djEsIChsb25nKSB0em9mZnByZXYyKSk7CisJCQlpZiAodHpvZmYgPT0gdHpvZmZwcmV2MSkgewor CQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ0em9mZnNldCBpdGVyYXRpb24gZmluaXNoZWQsIGk9 JWQsIHR6b2ZmPSVsZCwgdHpvZmZwcmV2MT0lbGQsIHR6b2ZmcHJldjI9JWxkIiwKKwkJCQkgICAg ICAgICAgICAgICAgICAgICAoaW50KSBpLCAobG9uZykgdHpvZmYsIChsb25nKSB0em9mZnByZXYx LCAobG9uZykgdHpvZmZwcmV2MikpOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmICh0em9mZiA9 PSB0em9mZnByZXYyKSB7CisJCQkJLyogVHdvIHZhbHVlIGN5Y2xlLCBzZWUgZS5nLiB0ZXN0LWJp LWRhdGUtdHpvZmZzZXQtYmFzaWMtZmkuanMuCisJCQkJICogSW4gdGhlc2UgY2FzZXMsIGZhdm9y IGEgaGlnaGVyIHR6b2Zmc2V0IHRvIGdldCBhIGNvbnNpc3RlbnQKKwkJCQkgKiByZXN1bHQgd2hp Y2ggaXMgaW5kZXBlbmRlbnQgb2YgaXRlcmF0aW9uIGNvdW50LiAgTm90IHN1cmUgaWYKKwkJCQkg KiB0aGlzIGlzIGEgZ2VuZXJpY2FsbHkgY29ycmVjdCBzb2x1dGlvbi4KKwkJCQkgKi8KKwkJCQlE VUtfREREKERVS19ERERQUklOVCgidHpvZmZzZXQgaXRlcmF0aW9uIHR3by12YWx1ZSBjeWNsZSwg aT0lZCwgdHpvZmY9JWxkLCB0em9mZnByZXYxPSVsZCwgdHpvZmZwcmV2Mj0lbGQiLAorCQkJCSAg ICAgICAgICAgICAgICAgICAgIChpbnQpIGksIChsb25nKSB0em9mZiwgKGxvbmcpIHR6b2ZmcHJl djEsIChsb25nKSB0em9mZnByZXYyKSk7CisJCQkJaWYgKHR6b2ZmcHJldjEgPiB0em9mZikgewor CQkJCQl0em9mZiA9IHR6b2ZmcHJldjE7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJ0em9mZnNldCBpdGVyYXRpb24sIHR6b2ZmPSVsZCIsIChs b25nKSB0em9mZikpOworCQlkIC09IHR6b2ZmICogMTAwMEw7CisJfQorCisJLyogVGltZUNsaXAo KSwgd2hpY2ggYWxzbyBoYW5kbGVzIEluZmluaXR5IC0+IE5hTiBjb252ZXJzaW9uICovCisJZCA9 IGR1a19fdGltZWNsaXAoZCk7CisKKwlyZXR1cm4gZDsKK30KKworLyoKKyAqICBBUEkgb3JpZW50 ZWQgaGVscGVycworICovCisKKy8qIFB1c2ggJ3RoaXMnIGJpbmRpbmcsIGNoZWNrIHRoYXQgaXQg aXMgYSBEYXRlIG9iamVjdDsgdGhlbiBwdXNoIHRoZQorICogaW50ZXJuYWwgdGltZSB2YWx1ZS4g IEF0IHRoZSBlbmQsIHN0YWNrIGlzOiBbIC4uLiB0aGlzIHRpbWV2YWwgXS4KKyAqIFJldHVybnMg dGhlIHRpbWUgdmFsdWUuICBMb2NhbCB0aW1lIGFkanVzdG1lbnQgaXMgZG9uZSBpZiByZXF1ZXN0 ZWQuCisgKi8KK0RVS19MT0NBTCBkdWtfZG91YmxlX3QgZHVrX19wdXNoX3RoaXNfZ2V0X3RpbWV2 YWxfdHpvZmZzZXQoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncywgZHVr X2ludF90ICpvdXRfdHpvZmZzZXQpIHsKKwlkdWtfaG9iamVjdCAqaDsKKwlkdWtfZG91YmxlX3Qg ZDsKKwlkdWtfaW50X3QgdHpvZmZzZXQgPSAwOworCisJZHVrX3B1c2hfdGhpcyh0aHIpOworCWgg PSBkdWtfZ2V0X2hvYmplY3QodGhyLCAtMSk7ICAvKiBYWFg6IGdldHRlciB3aXRoIGNsYXNzIGNo ZWNrLCB1c2VmdWwgaW4gYnVpbHQtaW5zICovCisJaWYgKGggPT0gTlVMTCB8fCBEVUtfSE9CSkVD VF9HRVRfQ0xBU1NfTlVNQkVSKGgpICE9IERVS19IT0JKRUNUX0NMQVNTX0RBVEUpIHsKKwkJRFVL X0VSUk9SX1RZUEUodGhyLCAiZXhwZWN0ZWQgRGF0ZSIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0 dXJuIDAuMDspOworCX0KKworCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwgRFVL X1NUUklEWF9JTlRfVkFMVUUpOworCWQgPSBkdWtfdG9fbnVtYmVyX20xKHRocik7CisJZHVrX3Bv cCh0aHIpOworCisJaWYgKERVS19JU05BTihkKSkgeworCQlpZiAoZmxhZ3MgJiBEVUtfREFURV9G TEFHX05BTl9UT19aRVJPKSB7CisJCQlkID0gMC4wOworCQl9CisJCWlmIChmbGFncyAmIERVS19E QVRFX0ZMQUdfTkFOX1RPX1JBTkdFX0VSUk9SKSB7CisJCQlEVUtfRVJST1JfUkFOR0UodGhyLCAi SW52YWxpZCBEYXRlIik7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDAuMDspOworCQl9CisJ fQorCS8qIGlmIG5vIE5hTiBoYW5kbGluZyBmbGFnLCBtYXkgc3RpbGwgYmUgTmFOIGhlcmUsIGJ1 dCBub3QgSW5mICovCisJRFVLX0FTU0VSVCghRFVLX0lTSU5GKGQpKTsKKworCWlmIChmbGFncyAm IERVS19EQVRFX0ZMQUdfTE9DQUxUSU1FKSB7CisJCS8qIE5vdGU6IERTVCBhZGp1c3RtZW50IGlz IGRldGVybWluZWQgdXNpbmcgVVRDIHRpbWUuCisJCSAqIElmICdkJyBpcyBOYU4sIHR6b2Zmc2V0 IHdpbGwgYmUgMC4KKwkJICovCisJCXR6b2Zmc2V0ID0gRFVLX1VTRV9EQVRFX0dFVF9MT0NBTF9U Wk9GRlNFVChkKTsgIC8qIHNlY29uZHMgKi8KKwkJZCArPSB0em9mZnNldCAqIDEwMDBMOworCX0K KwlpZiAob3V0X3R6b2Zmc2V0KSB7CisJCSpvdXRfdHpvZmZzZXQgPSB0em9mZnNldDsKKwl9CisK KwkvKiBbIC4uLiB0aGlzIF0gKi8KKwlyZXR1cm4gZDsKK30KKworRFVLX0xPQ0FMIGR1a19kb3Vi bGVfdCBkdWtfX3B1c2hfdGhpc19nZXRfdGltZXZhbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21h bGxfdWludF90IGZsYWdzKSB7CisJcmV0dXJuIGR1a19fcHVzaF90aGlzX2dldF90aW1ldmFsX3R6 b2Zmc2V0KHRociwgZmxhZ3MsIE5VTEwpOworfQorCisvKiBTZXQgdGltZXZhbCB0byAndGhpcycg ZnJvbSBkcGFydHMsIHB1c2ggdGhlIG5ldyB0aW1lIHZhbHVlIG9udG8gdGhlCisgKiB2YWx1ZSBz dGFjayBhbmQgcmV0dXJuIDEgKGNhbGxlciBjYW4gdGhlbiB0YWlsIGNhbGwgdXMpLiAgRXhwZWN0 cworICogdGhlIHZhbHVlIHN0YWNrIHRvIGNvbnRhaW4gJ3RoaXMnIG9uIHRoZSBzdGFjayB0b3Au CisgKi8KK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19zZXRfdGhpc190aW1ldmFsX2Zyb21fZHBh cnRzKGR1a19odGhyZWFkICp0aHIsIGR1a19kb3VibGVfdCAqZHBhcnRzLCBkdWtfc21hbGxfdWlu dF90IGZsYWdzKSB7CisJZHVrX2RvdWJsZV90IGQ7CisKKwkvKiBbIC4uLiB0aGlzIF0gKi8KKwor CWQgPSBkdWtfYmlfZGF0ZV9nZXRfdGltZXZhbF9mcm9tX2RwYXJ0cyhkcGFydHMsIGZsYWdzKTsK KwlkdWtfcHVzaF9udW1iZXIodGhyLCBkKTsgIC8qIC0+IFsgLi4uIHRoaXMgdGltZXZhbF9uZXcg XSAqLworCWR1a19kdXBfdG9wKHRocik7ICAgICAgICAgLyogLT4gWyAuLi4gdGhpcyB0aW1ldmFs X25ldyB0aW1ldmFsX25ldyBdICovCisJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0z LCBEVUtfU1RSSURYX0lOVF9WQUxVRSk7CisKKwkvKiBzdGFjayB0b3A6IG5ldyB0aW1lIHZhbHVl LCByZXR1cm4gMSB0byBhbGxvdyB0YWlsIGNhbGxzICovCisJcmV0dXJuIDE7Cit9CisKKy8qICdv dXRfYnVmJyBtdXN0IGJlIGF0IGxlYXN0IERVS19CSV9EQVRFX0lTTzg2MDFfQlVGU0laRSBsb25n LiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19mb3JtYXRfcGFydHNfaXNvODYwMShkdWtfaW50X3Qg KnBhcnRzLCBkdWtfaW50X3QgdHpvZmZzZXQsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MsIGR1a191 aW50OF90ICpvdXRfYnVmKSB7CisJY2hhciB5ZWFyc3RyWzhdOyAgIC8qICItMTIzNDU2XDAiICov CisJY2hhciB0enN0cls4XTsgICAgIC8qICIrMTE6MjJcMCIgKi8KKwljaGFyIHNlcCA9IChmbGFn cyAmIERVS19EQVRFX0ZMQUdfU0VQX1QpID8gRFVLX0FTQ19VQ19UIDogRFVLX0FTQ19TUEFDRTsK KworCURVS19BU1NFUlQocGFydHNbRFVLX0RBVEVfSURYX01PTlRIXSA+PSAxICYmIHBhcnRzW0RV S19EQVRFX0lEWF9NT05USF0gPD0gMTIpOworCURVS19BU1NFUlQocGFydHNbRFVLX0RBVEVfSURY X0RBWV0gPj0gMSAmJiBwYXJ0c1tEVUtfREFURV9JRFhfREFZXSA8PSAzMSk7CisJRFVLX0FTU0VS VChwYXJ0c1tEVUtfREFURV9JRFhfWUVBUl0gPj0gLTk5OTk5OSAmJiBwYXJ0c1tEVUtfREFURV9J RFhfWUVBUl0gPD0gOTk5OTk5KTsKKworCS8qIE5vdGU6ICUwNmQgZm9yIHBvc2l0aXZlIHZhbHVl LCAlMDdkIGZvciBuZWdhdGl2ZSB2YWx1ZSB0byBpbmNsdWRlCisJICogc2lnbiBhbmQgNiBkaWdp dHMuCisJICovCisJRFVLX1NOUFJJTlRGKHllYXJzdHIsCisJICAgICAgICAgICAgIHNpemVvZih5 ZWFyc3RyKSwKKwkgICAgICAgICAgICAgKHBhcnRzW0RVS19EQVRFX0lEWF9ZRUFSXSA+PSAwICYm IHBhcnRzW0RVS19EQVRFX0lEWF9ZRUFSXSA8PSA5OTk5KSA/ICIlMDRsZCIgOgorCSAgICAgICAg ICAgICAgICAgICAgKChwYXJ0c1tEVUtfREFURV9JRFhfWUVBUl0gPj0gMCkgPyAiKyUwNmxkIiA6 ICIlMDdsZCIpLAorCSAgICAgICAgICAgICAobG9uZykgcGFydHNbRFVLX0RBVEVfSURYX1lFQVJd KTsKKwl5ZWFyc3RyW3NpemVvZih5ZWFyc3RyKSAtIDFdID0gKGNoYXIpIDA7CisKKwlpZiAoZmxh Z3MgJiBEVUtfREFURV9GTEFHX0xPQ0FMVElNRSkgeworCQkvKiB0em9mZnNldCBzZWNvbmRzIGFy ZSBkcm9wcGVkOyAxNiBiaXRzIHN1ZmZpY2UgZm9yCisJCSAqIHRpbWUgb2Zmc2V0IGluIG1pbnV0 ZXMKKwkJICovCisJCWNvbnN0IGNoYXIgKmZtdDsKKwkJZHVrX3NtYWxsX2ludF90IHRtcCwgYXJn X2hvdXJzLCBhcmdfbWludXRlczsKKworCQlpZiAodHpvZmZzZXQgPj0gMCkgeworCQkJdG1wID0g dHpvZmZzZXQ7CisJCQlmbXQgPSAiKyUwMmQ6JTAyZCI7CisJCX0gZWxzZSB7CisJCQl0bXAgPSAt dHpvZmZzZXQ7CisJCQlmbXQgPSAiLSUwMmQ6JTAyZCI7CisJCX0KKwkJdG1wID0gdG1wIC8gNjA7 CisJCWFyZ19ob3VycyA9IHRtcCAvIDYwOworCQlhcmdfbWludXRlcyA9IHRtcCAlIDYwOworCQlE VUtfQVNTRVJUKGFyZ19ob3VycyA8PSAyNCk7ICAvKiBFdmVuIGxlc3MgaXMgYWN0dWFsbHkgZ3Vh cmFudGVlZCBmb3IgYSB2YWxpZCB0em9mZnNldC4gKi8KKwkJYXJnX2hvdXJzID0gYXJnX2hvdXJz ICYgMHgzZjsgIC8qIEZvciBbMCwyNF0gdGhpcyBpcyBhIG5vLW9wLCBidXQgZml4ZXMgR0NDIDcg d2FybmluZywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdmFhcmFsYS9kdWt0YXBlL2lzc3Vlcy8x NjAyLiAqLworCisJCURVS19TTlBSSU5URih0enN0ciwgc2l6ZW9mKHR6c3RyKSwgZm10LCAoaW50 KSBhcmdfaG91cnMsIChpbnQpIGFyZ19taW51dGVzKTsKKwkJdHpzdHJbc2l6ZW9mKHR6c3RyKSAt IDFdID0gKGNoYXIpIDA7CisJfSBlbHNlIHsKKwkJdHpzdHJbMF0gPSBEVUtfQVNDX1VDX1o7CisJ CXR6c3RyWzFdID0gKGNoYXIpIDA7CisJfQorCisJLyogVW5saWtlIHllYXIsIHRoZSBvdGhlciBw YXJ0cyBmaXQgaW50byAxNiBiaXRzIHNvICVkIGZvcm1hdAorCSAqIGlzIHBvcnRhYmxlLgorCSAq LworCWlmICgoZmxhZ3MgJiBEVUtfREFURV9GTEFHX1RPU1RSSU5HX0RBVEUpICYmIChmbGFncyAm IERVS19EQVRFX0ZMQUdfVE9TVFJJTkdfVElNRSkpIHsKKwkJRFVLX1NQUklOVEYoKGNoYXIgKikg b3V0X2J1ZiwgIiVzLSUwMmQtJTAyZCVjJTAyZDolMDJkOiUwMmQuJTAzZCVzIiwKKwkJICAgICAg ICAgICAgKGNvbnN0IGNoYXIgKikgeWVhcnN0ciwgKGludCkgcGFydHNbRFVLX0RBVEVfSURYX01P TlRIXSwgKGludCkgcGFydHNbRFVLX0RBVEVfSURYX0RBWV0sIChpbnQpIHNlcCwKKwkJICAgICAg ICAgICAgKGludCkgcGFydHNbRFVLX0RBVEVfSURYX0hPVVJdLCAoaW50KSBwYXJ0c1tEVUtfREFU RV9JRFhfTUlOVVRFXSwKKwkJICAgICAgICAgICAgKGludCkgcGFydHNbRFVLX0RBVEVfSURYX1NF Q09ORF0sIChpbnQpIHBhcnRzW0RVS19EQVRFX0lEWF9NSUxMSVNFQ09ORF0sIChjb25zdCBjaGFy ICopIHR6c3RyKTsKKwl9IGVsc2UgaWYgKGZsYWdzICYgRFVLX0RBVEVfRkxBR19UT1NUUklOR19E QVRFKSB7CisJCURVS19TUFJJTlRGKChjaGFyICopIG91dF9idWYsICIlcy0lMDJkLSUwMmQiLAor CQkgICAgICAgICAgICAoY29uc3QgY2hhciAqKSB5ZWFyc3RyLCAoaW50KSBwYXJ0c1tEVUtfREFU RV9JRFhfTU9OVEhdLCAoaW50KSBwYXJ0c1tEVUtfREFURV9JRFhfREFZXSk7CisJfSBlbHNlIHsK KwkJRFVLX0FTU0VSVChmbGFncyAmIERVS19EQVRFX0ZMQUdfVE9TVFJJTkdfVElNRSk7CisJCURV S19TUFJJTlRGKChjaGFyICopIG91dF9idWYsICIlMDJkOiUwMmQ6JTAyZC4lMDNkJXMiLAorCQkg ICAgICAgICAgICAoaW50KSBwYXJ0c1tEVUtfREFURV9JRFhfSE9VUl0sIChpbnQpIHBhcnRzW0RV S19EQVRFX0lEWF9NSU5VVEVdLAorCQkgICAgICAgICAgICAoaW50KSBwYXJ0c1tEVUtfREFURV9J RFhfU0VDT05EXSwgKGludCkgcGFydHNbRFVLX0RBVEVfSURYX01JTExJU0VDT05EXSwKKwkJICAg ICAgICAgICAgKGNvbnN0IGNoYXIgKikgdHpzdHIpOworCX0KK30KKworLyogSGVscGVyIGZvciBz dHJpbmcgY29udmVyc2lvbiBjYWxsczogY2hlY2sgJ3RoaXMnIGJpbmRpbmcsIGdldCB0aGUKKyAq IGludGVybmFsIHRpbWUgdmFsdWUsIGFuZCBmb3JtYXQgZGF0ZSBhbmQvb3IgdGltZSBpbiBhIGZl dyBmb3JtYXRzLgorICogUmV0dXJuIHZhbHVlIGFsbG93cyB0YWlsIGNhbGxzLgorICovCitEVUtf TE9DQUwgZHVrX3JldF90IGR1a19fdG9fc3RyaW5nX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBk dWtfc21hbGxfdWludF90IGZsYWdzKSB7CisJZHVrX2RvdWJsZV90IGQ7CisJZHVrX2ludF90IHBh cnRzW0RVS19EQVRFX0lEWF9OVU1fUEFSVFNdOworCWR1a19pbnRfdCB0em9mZnNldDsgIC8qIHNl Y29uZHMsIGRvZXNuJ3QgZml0IGludG8gMTYgYml0cyAqLworCWR1a19ib29sX3QgcmM7CisJZHVr X3VpbnQ4X3QgYnVmW0RVS19CSV9EQVRFX0lTTzg2MDFfQlVGU0laRV07CisKKwlEVUtfVU5SRUYo cmMpOyAgLyogdW5yZWZlcmVuY2VkIHdpdGggc29tZSBvcHRpb25zICovCisKKwlkID0gZHVrX19w dXNoX3RoaXNfZ2V0X3RpbWV2YWxfdHpvZmZzZXQodGhyLCBmbGFncywgJnR6b2Zmc2V0KTsKKwlp ZiAoRFVLX0lTTkFOKGQpKSB7CisJCWR1a19wdXNoX2hzdHJpbmdfc3RyaWR4KHRociwgRFVLX1NU UklEWF9JTlZBTElEX0RBVEUpOworCQlyZXR1cm4gMTsKKwl9CisJRFVLX0FTU0VSVChEVUtfSVNG SU5JVEUoZCkpOworCisJLyogZm9ybWF0dGVycyBhbHdheXMgZ2V0IG9uZS1iYXNlZCBtb250aC9k YXktb2YtbW9udGggKi8KKwlkdWtfYmlfZGF0ZV90aW1ldmFsX3RvX3BhcnRzKGQsIHBhcnRzLCBO VUxMLCBEVUtfREFURV9GTEFHX09ORUJBU0VEKTsKKwlEVUtfQVNTRVJUKHBhcnRzW0RVS19EQVRF X0lEWF9NT05USF0gPj0gMSAmJiBwYXJ0c1tEVUtfREFURV9JRFhfTU9OVEhdIDw9IDEyKTsKKwlE VUtfQVNTRVJUKHBhcnRzW0RVS19EQVRFX0lEWF9EQVldID49IDEgJiYgcGFydHNbRFVLX0RBVEVf SURYX0RBWV0gPD0gMzEpOworCisJaWYgKGZsYWdzICYgRFVLX0RBVEVfRkxBR19UT1NUUklOR19M T0NBTEUpIHsKKwkJLyogdHJ5IGxvY2FsZSBzcGVjaWZpYyBmb3JtYXR0ZXI7IGlmIGl0IHJlZnVz ZXMgdG8gZm9ybWF0IHRoZQorCQkgKiBzdHJpbmcsIGZhbGwgYmFjayB0byBhbiBJU08gODYwMSBm b3JtYXR0ZWQgdmFsdWUgaW4gbG9jYWwKKwkJICogdGltZS4KKwkJICovCisjaWYgZGVmaW5lZChE VUtfVVNFX0RBVEVfRk9STUFUX1NUUklORykKKwkJLyogQ29udHJhY3QsIGVpdGhlcjoKKwkJICog LSBQdXNoIHN0cmluZyB0byB2YWx1ZSBzdGFjayBhbmQgcmV0dXJuIDEKKwkJICogLSBEb24ndCBw dXNoIGFueXRoaW5nIGFuZCByZXR1cm4gMAorCQkgKi8KKworCQlyYyA9IERVS19VU0VfREFURV9G T1JNQVRfU1RSSU5HKHRociwgcGFydHMsIHR6b2Zmc2V0LCBmbGFncyk7CisJCWlmIChyYyAhPSAw KSB7CisJCQlyZXR1cm4gMTsKKwkJfQorI2Vsc2UKKwkJLyogTm8gbG9jYWxlIHNwZWNpZmljIGZv cm1hdHRlcjsgdGhpcyBpcyBPSywgd2UgZmFsbCBiYWNrCisJCSAqIHRvIElTTyA4NjAxLgorCQkg Ki8KKyNlbmRpZgorCX0KKworCS8qIERpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb24gdGhhbiBh Ym92ZSB1c2VkIGJlY2F1c2UgdGhlIGhlbHBlcgorCSAqIGlzIHNoYXJlZC4KKwkgKi8KKwlkdWtf X2Zvcm1hdF9wYXJ0c19pc284NjAxKHBhcnRzLCB0em9mZnNldCwgZmxhZ3MsIGJ1Zik7CisJZHVr X3B1c2hfc3RyaW5nKHRociwgKGNvbnN0IGNoYXIgKikgYnVmKTsKKwlyZXR1cm4gMTsKK30KKwor LyogSGVscGVyIGZvciBjb21wb25lbnQgZ2V0dGVyIGNhbGxzOiBjaGVjayAndGhpcycgYmluZGlu ZywgZ2V0IHRoZQorICogaW50ZXJuYWwgdGltZSB2YWx1ZSwgc3BsaXQgaXQgaW50byBwYXJ0cyAo ZWl0aGVyIGFzIFVUQyB0aW1lIG9yCisgKiBsb2NhbCB0aW1lKSwgcHVzaCBhIHNwZWNpZmllZCBj b21wb25lbnQgYXMgYSByZXR1cm4gdmFsdWUgdG8gdGhlCisgKiB2YWx1ZSBzdGFjayBhbmQgcmV0 dXJuIDEgKGNhbGxlciBjYW4gdGhlbiB0YWlsIGNhbGwgdXMpLgorICovCitEVUtfTE9DQUwgZHVr X3JldF90IGR1a19fZ2V0X3BhcnRfaGVscGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19zbWFsbF91 aW50X3QgZmxhZ3NfYW5kX2lkeCkgeworCWR1a19kb3VibGVfdCBkOworCWR1a19pbnRfdCBwYXJ0 c1tEVUtfREFURV9JRFhfTlVNX1BBUlRTXTsKKwlkdWtfc21hbGxfdWludF90IGlkeF9wYXJ0ID0g KGR1a19zbWFsbF91aW50X3QpIChmbGFnc19hbmRfaWR4ID4+IERVS19EQVRFX0ZMQUdfVkFMVUVf U0hJRlQpOyAgLyogdW5wYWNrIGFyZ3MgKi8KKworCURVS19BU1NFUlRfRElTQUJMRShpZHhfcGFy dCA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FTU0VSVChpZHhfcGFydCA8IERVS19EQVRF X0lEWF9OVU1fUEFSVFMpOworCisJZCA9IGR1a19fcHVzaF90aGlzX2dldF90aW1ldmFsKHRociwg ZmxhZ3NfYW5kX2lkeCk7CisJaWYgKERVS19JU05BTihkKSkgeworCQlkdWtfcHVzaF9uYW4odGhy KTsKKwkJcmV0dXJuIDE7CisJfQorCURVS19BU1NFUlQoRFVLX0lTRklOSVRFKGQpKTsKKworCWR1 a19iaV9kYXRlX3RpbWV2YWxfdG9fcGFydHMoZCwgcGFydHMsIE5VTEwsIGZsYWdzX2FuZF9pZHgp OyAgLyogbm8gbmVlZCB0byBtYXNrIGlkeCBwb3J0aW9uICovCisKKwkvKiBTZXR0ZXIgQVBJcyBk ZXRlY3Qgc3BlY2lhbCB5ZWFyIG51bWJlcnMgKDAuLi45OSkgYW5kIGFwcGx5IGEgKzE5MDAKKwkg KiBvbmx5IGluIGNlcnRhaW4gY2FzZXMuICBUaGUgbGVnYWN5IGdldFllYXIoKSBnZXR0ZXIgYXBw bGllcyAtMTkwMAorCSAqIHVuY29uZGl0aW9uYWxseS4KKwkgKi8KKwlkdWtfcHVzaF9pbnQodGhy LCAoZmxhZ3NfYW5kX2lkeCAmIERVS19EQVRFX0ZMQUdfU1VCMTkwMCkgPyBwYXJ0c1tpZHhfcGFy dF0gLSAxOTAwIDogcGFydHNbaWR4X3BhcnRdKTsKKwlyZXR1cm4gMTsKK30KKworLyogSGVscGVy IGZvciBjb21wb25lbnQgc2V0dGVyIGNhbGxzOiBjaGVjayAndGhpcycgYmluZGluZywgZ2V0IHRo ZQorICogaW50ZXJuYWwgdGltZSB2YWx1ZSwgc3BsaXQgaXQgaW50byBwYXJ0cyAoZWl0aGVyIGFz IFVUQyB0aW1lIG9yCisgKiBsb2NhbCB0aW1lKSwgbW9kaWZ5IG9uZSBvciBtb3JlIGNvbXBvbmVu dHMgYXMgc3BlY2lmaWVkLCByZWNvbXB1dGUKKyAqIHRoZSB0aW1lIHZhbHVlLCBzZXQgaXQgYXMg dGhlIGludGVybmFsIHZhbHVlLiAgRmluYWxseSwgcHVzaCB0aGUKKyAqIG5ldyB0aW1lIHZhbHVl IGFzIGEgcmV0dXJuIHZhbHVlIHRvIHRoZSB2YWx1ZSBzdGFjayBhbmQgcmV0dXJuIDEKKyAqIChj YWxsZXIgY2FuIHRoZW4gdGFpbCBjYWxsIHVzKS4KKyAqLworRFVLX0xPQ0FMIGR1a19yZXRfdCBk dWtfX3NldF9wYXJ0X2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21hbGxfdWludF90IGZs YWdzX2FuZF9tYXhuYXJncykgeworCWR1a19kb3VibGVfdCBkOworCWR1a19pbnRfdCBwYXJ0c1tE VUtfREFURV9JRFhfTlVNX1BBUlRTXTsKKwlkdWtfZG91YmxlX3QgZHBhcnRzW0RVS19EQVRFX0lE WF9OVU1fUEFSVFNdOworCWR1a19pZHhfdCBuYXJnczsKKwlkdWtfc21hbGxfdWludF90IG1heG5h cmdzID0gKGR1a19zbWFsbF91aW50X3QpIChmbGFnc19hbmRfbWF4bmFyZ3MgPj4gRFVLX0RBVEVf RkxBR19WQUxVRV9TSElGVCk7ICAvKiB1bnBhY2sgYXJncyAqLworCWR1a19zbWFsbF91aW50X3Qg aWR4X2ZpcnN0LCBpZHg7CisJZHVrX3NtYWxsX3VpbnRfdCBpOworCisJbmFyZ3MgPSBkdWtfZ2V0 X3RvcCh0aHIpOworCWQgPSBkdWtfX3B1c2hfdGhpc19nZXRfdGltZXZhbCh0aHIsIGZsYWdzX2Fu ZF9tYXhuYXJncyk7CisJRFVLX0FTU0VSVChEVUtfSVNGSU5JVEUoZCkgfHwgRFVLX0lTTkFOKGQp KTsKKworCWlmIChEVUtfSVNGSU5JVEUoZCkpIHsKKwkJZHVrX2JpX2RhdGVfdGltZXZhbF90b19w YXJ0cyhkLCBwYXJ0cywgZHBhcnRzLCBmbGFnc19hbmRfbWF4bmFyZ3MpOworCX0gZWxzZSB7CisJ CS8qIE5hTiB0aW1ldmFsdWU6IHdlIG5lZWQgdG8gY29lcmNlIHRoZSBhcmd1bWVudHMsIGJ1dAor CQkgKiB0aGUgcmVzdWx0aW5nIGludGVybmFsIHRpbWVzdGFtcCBuZWVkcyB0byByZW1haW4gTmFO LgorCQkgKiBUaGlzIHdvcmtzIGJ1dCBpcyBub3QgcHJldHR5OiBwYXJ0cyBhbmQgZHBhcnRzIHdp bGwKKwkJICogYmUgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBvbmx5IHdyaXRlIHRv IHRoZW0uCisJCSAqLworCX0KKworCS8qCisJICogIERldGVybWluaW5nIHdoaWNoIGRhdGV0aW1l IGNvbXBvbmVudHMgdG8gb3ZlcndyaXRlIGJhc2VkIG9uCisJICogIHN0YWNrIGFyZ3VtZW50cyBp cyBhIGJpdCBjb21wbGljYXRlZCwgYnV0IGltcG9ydGFudCB0byBmYWN0b3IKKwkgKiAgb3V0IGZy b20gc2V0dGVycyB0aGVtc2VsdmVzIGZvciBjb21wYWN0bmVzcy4KKwkgKgorCSAqICBJZiBEVUtf REFURV9GTEFHX1RJTUVTRVRURVIsIG1heG5hcmdzIGluZGljYXRlcyBzZXR0ZXIgdHlwZToKKwkg KgorCSAqICAgMSAtPiBtaWxsaXNlY29uZAorCSAqICAgMiAtPiBzZWNvbmQsIFttaWxsaXNlY29u ZF0KKwkgKiAgIDMgLT4gbWludXRlLCBbc2Vjb25kXSwgW21pbGxpc2Vjb25kXQorCSAqICAgNCAt PiBob3VyLCBbbWludXRlXSwgW3NlY29uZF0sIFttaWxsaXNlY29uZF0KKwkgKgorCSAqICBFbHNl OgorCSAqCisJICogICAxIC0+IGRhdGUKKwkgKiAgIDIgLT4gbW9udGgsIFtkYXRlXQorCSAqICAg MyAtPiB5ZWFyLCBbbW9udGhdLCBbZGF0ZV0KKwkgKgorCSAqICBCeSBjb21wYXJpbmcgbmFyZ3Mg YW5kIG1heG5hcmdzIChhbmQgZmxhZ3MpIHdlIGtub3cgd2hpY2gKKwkgKiAgY29tcG9uZW50cyB0 byBvdmVycmlkZS4gIFdlIHJlbHkgb24gcGFydCBpbmRleCBvcmRlcmluZy4KKwkgKi8KKworCWlm IChmbGFnc19hbmRfbWF4bmFyZ3MgJiBEVUtfREFURV9GTEFHX1RJTUVTRVRURVIpIHsKKwkJRFVL X0FTU0VSVChtYXhuYXJncyA+PSAxICYmIG1heG5hcmdzIDw9IDQpOworCQlpZHhfZmlyc3QgPSBE VUtfREFURV9JRFhfTUlMTElTRUNPTkQgLSAobWF4bmFyZ3MgLSAxKTsKKwl9IGVsc2UgeworCQlE VUtfQVNTRVJUKG1heG5hcmdzID49IDEgJiYgbWF4bmFyZ3MgPD0gMyk7CisJCWlkeF9maXJzdCA9 IERVS19EQVRFX0lEWF9EQVkgLSAobWF4bmFyZ3MgLSAxKTsKKwl9CisJRFVLX0FTU0VSVF9ESVNB QkxFKGlkeF9maXJzdCA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FTU0VSVChpZHhfZmly c3QgPCBEVUtfREFURV9JRFhfTlVNX1BBUlRTKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhuYXJn czsgaSsrKSB7CisJCWlmICgoZHVrX2lkeF90KSBpID49IG5hcmdzKSB7CisJCQkvKiBubyBhcmd1 bWVudCBnaXZlbiAtPiBsZWF2ZSBjb21wb25lbnRzIHVudG91Y2hlZCAqLworCQkJYnJlYWs7CisJ CX0KKwkJaWR4ID0gaWR4X2ZpcnN0ICsgaTsKKwkJRFVLX0FTU0VSVF9ESVNBQkxFKGlkeCA+PSAw KTsgIC8qIHVuc2lnbmVkICovCisJCURVS19BU1NFUlQoaWR4IDwgRFVLX0RBVEVfSURYX05VTV9Q QVJUUyk7CisKKwkJaWYgKGlkeCA9PSBEVUtfREFURV9JRFhfWUVBUiAmJiAoZmxhZ3NfYW5kX21h eG5hcmdzICYgRFVLX0RBVEVfRkxBR19ZRUFSX0ZJWFVQKSkgeworCQkJZHVrX190d29kaWdpdF95 ZWFyX2ZpeHVwKHRociwgKGR1a19pZHhfdCkgaSk7CisJCX0KKworCQlkcGFydHNbaWR4XSA9IGR1 a190b19udW1iZXIodGhyLCAoZHVrX2lkeF90KSBpKTsKKworCQlpZiAoaWR4ID09IERVS19EQVRF X0lEWF9EQVkpIHsKKwkJCS8qIERheS1vZi1tb250aCBpcyBvbmUtYmFzZWQgaW4gdGhlIEFQSSwg YnV0IHplcm8tYmFzZWQKKwkJCSAqIGludGVybmFsbHksIHNvIGZpeCBoZXJlLiAgTm90ZSB0aGF0 IG1vbnRoIGlzIHplcm8tYmFzZWQKKwkJCSAqIGJvdGggaW4gdGhlIEFQSSBhbmQgaW50ZXJuYWxs eS4KKwkJCSAqLworCQkJLyogU0NBTkJVSUxEOiBjb21wbGFpbnMgYWJvdXQgdXNlIG9mIHVuaW5p dGlhbGl6ZWQgdmFsdWVzLgorCQkJICogVGhlIGNvbXBsYWludCBpcyBjb3JyZWN0LCBidXQgb3Bl cmF0aW5nIGluIHVuZGVmaW5lZAorCQkJICogdmFsdWVzIGhlcmUgaXMgaW50ZW50aW9uYWwgaW4g c29tZSBjYXNlcyBhbmQgdGhlIGNhbGxlcgorCQkJICogaWdub3JlcyB0aGUgcmVzdWx0cy4KKwkJ CSAqLworCQkJZHBhcnRzW2lkeF0gLT0gMS4wOworCQl9CisJfQorCisJLyogTGVhdmVzIG5ldyB0 aW1ldmFsdWUgb24gc3RhY2sgdG9wIGFuZCByZXR1cm5zIDEsIHdoaWNoIGlzIGNvcnJlY3QKKwkg KiBmb3IgcGFydCBzZXR0ZXJzLgorCSAqLworCWlmIChEVUtfSVNGSU5JVEUoZCkpIHsKKwkJcmV0 dXJuIGR1a19fc2V0X3RoaXNfdGltZXZhbF9mcm9tX2RwYXJ0cyh0aHIsIGRwYXJ0cywgZmxhZ3Nf YW5kX21heG5hcmdzKTsKKwl9IGVsc2UgeworCQkvKiBJbnRlcm5hbCB0aW1ldmFsdWUgaXMgYWxy ZWFkeSBOYU4sIHNvIGRvbid0IHRvdWNoIGl0LiAqLworCQlkdWtfcHVzaF9uYW4odGhyKTsKKwkJ cmV0dXJuIDE7CisJfQorfQorCisvKiBBcHBseSBUb051bWJlcigpIHRvIHNwZWNpZmllZCBpbmRl eDsgaWYgVG9JbnRlZ2VyKHZhbCkgaW4gWzAsOTldLCBhZGQKKyAqIDE5MDAgYW5kIHJlcGxhY2Ug dmFsdWUgYXQgaWR4X3ZhbC4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX190d29kaWdpdF95ZWFy X2ZpeHVwKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHhfdmFsKSB7CisJZHVrX2RvdWJs ZV90IGQ7CisKKwkvKiBYWFg6IGlkeF92YWwgd291bGQgZml0IGludG8gMTYgYml0cywgYnV0IHVz aW5nIGR1a19zbWFsbF91aW50X3QKKwkgKiBtaWdodCBub3QgZ2VuZXJhdGUgYmV0dGVyIGNvZGUg ZHVlIHRvIGNhc3RpbmcuCisJICovCisKKwkvKiBFNSBTZWN0aW9ucyAxNS45LjMuMSwgQi4yLjQs IEIuMi41ICovCisJZHVrX3RvX251bWJlcih0aHIsIGlkeF92YWwpOworCWlmIChkdWtfaXNfbmFu KHRociwgaWR4X3ZhbCkpIHsKKwkJcmV0dXJuOworCX0KKwlkdWtfZHVwKHRociwgaWR4X3ZhbCk7 CisJZHVrX3RvX2ludCh0aHIsIC0xKTsKKwlkID0gZHVrX2dldF9udW1iZXIodGhyLCAtMSk7ICAv KiBnZXQgYXMgZG91YmxlIHRvIGhhbmRsZSBodWdlIG51bWJlcnMgY29ycmVjdGx5ICovCisJaWYg KGQgPj0gMC4wICYmIGQgPD0gOTkuMCkgeworCQlkICs9IDE5MDAuMDsKKwkJZHVrX3B1c2hfbnVt YmVyKHRociwgZCk7CisJCWR1a19yZXBsYWNlKHRociwgaWR4X3ZhbCk7CisJfQorCWR1a19wb3Ao dGhyKTsKK30KKworLyogU2V0IGRhdGV0aW1lIHBhcnRzIGZyb20gc3RhY2sgYXJndW1lbnRzLCBk ZWZhdWx0aW5nIGFueSBtaXNzaW5nIHZhbHVlcy4KKyAqIERheS1vZi13ZWVrIGlzIG5vdCBzZXQ7 IGl0IGlzIG5vdCByZXF1aXJlZCB3aGVuIHNldHRpbmcgdGhlIHRpbWUgdmFsdWUuCisgKi8KK0RV S19MT0NBTCB2b2lkIGR1a19fc2V0X3BhcnRzX2Zyb21fYXJncyhkdWtfaHRocmVhZCAqdGhyLCBk dWtfZG91YmxlX3QgKmRwYXJ0cywgZHVrX2lkeF90IG5hcmdzKSB7CisJZHVrX2RvdWJsZV90IGQ7 CisJZHVrX3NtYWxsX3VpbnRfdCBpOworCWR1a19zbWFsbF91aW50X3QgaWR4OworCisJLyogQ2F1 c2VzIGEgVG9OdW1iZXIoKSBjb2VyY2lvbiwgYnV0IGRvZXNuJ3QgYnJlYWsgY29lcmNpb24gb3Jk ZXIgc2luY2UKKwkgKiB5ZWFyIGlzIGNvZXJjZWQgZmlyc3QgYW55d2F5LgorCSAqLworCWR1a19f dHdvZGlnaXRfeWVhcl9maXh1cCh0aHIsIDApOworCisJLyogVGhlcmUgYXJlIGF0IG1vc3QgNyBh cmdzLCBidXQgd2UgdXNlIDggaGVyZSBzbyB0aGF0IGFsc28KKwkgKiBEVUtfREFURV9JRFhfV0VF S0RBWSBnZXRzIGluaXRpYWxpemVkICh0byB6ZXJvKSB0byBhdm9pZCB0aGUgcG90ZW50aWFsCisJ ICogZm9yIGFueSBWYWxncmluZCBncmlwZXMgbGF0ZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8 IDg7IGkrKykgeworCQkvKiBOb3RlOiByZWx5IG9uIGluZGV4IG9yZGVyaW5nICovCisJCWlkeCA9 IERVS19EQVRFX0lEWF9ZRUFSICsgaTsKKwkJaWYgKChkdWtfaWR4X3QpIGkgPCBuYXJncykgewor CQkJZCA9IGR1a190b19udW1iZXIodGhyLCAoZHVrX2lkeF90KSBpKTsKKwkJCWlmIChpZHggPT0g RFVLX0RBVEVfSURYX0RBWSkgeworCQkJCS8qIENvbnZlcnQgZGF5IGZyb20gb25lLWJhc2VkIHRv IHplcm8tYmFzZWQgKGludGVybmFsKS4gIFRoaXMgbWF5CisJCQkJICogY2F1c2UgdGhlIGRheSBw YXJ0IHRvIGJlIG5lZ2F0aXZlLCB3aGljaCBpcyBPSy4KKwkJCQkgKi8KKwkJCQlkIC09IDEuMDsK KwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEFsbCBjb21wb25lbnRzIGRlZmF1bHQgdG8gMCBleGNl cHQgZGF5LW9mLW1vbnRoIHdoaWNoIGRlZmF1bHRzCisJCQkgKiB0byAxLiAgSG93ZXZlciwgYmVj YXVzZSBvdXIgaW50ZXJuYWwgZGF5LW9mLW1vbnRoIGlzIHplcm8tYmFzZWQsCisJCQkgKiBpdCBh bHNvIGRlZmF1bHRzIHRvIHplcm8gaGVyZS4KKwkJCSAqLworCQkJZCA9IDAuMDsKKwkJfQorCQlk cGFydHNbaWR4XSA9IGQ7CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoInBhcnRzIGZyb20g YXJncyAtPiAlbGYgJWxmICVsZiAlbGYgJWxmICVsZiAlbGYgJWxmIiwKKwkgICAgICAgICAgICAg ICAgICAgICAoZG91YmxlKSBkcGFydHNbMF0sIChkb3VibGUpIGRwYXJ0c1sxXSwKKwkgICAgICAg ICAgICAgICAgICAgICAoZG91YmxlKSBkcGFydHNbMl0sIChkb3VibGUpIGRwYXJ0c1szXSwKKwkg ICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSBkcGFydHNbNF0sIChkb3VibGUpIGRwYXJ0c1s1 XSwKKwkgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSBkcGFydHNbNl0sIChkb3VibGUpIGRw YXJ0c1s3XSkpOworfQorCisvKgorICogIEluZGlyZWN0IG1hZ2ljIHZhbHVlIGxvb2t1cCBmb3Ig RGF0ZSBtZXRob2RzLgorICoKKyAqICBEYXRlIG1ldGhvZHMgZG9uJ3QgcHV0IHRoZWlyIGNvbnRy b2wgZmxhZ3MgaW50byB0aGUgZnVuY3Rpb24gbWFnaWMgdmFsdWUKKyAqICBiZWNhdXNlIHRoZXkg d291bGRuJ3QgZml0IGludG8gYSBMSUdIVEZVTkMncyBtYWdpYyBmaWVsZC4gIEluc3RlYWQsIHRo ZQorICogIG1hZ2ljIHZhbHVlIGlzIHNldCB0byBhbiBpbmRleCBwb2ludGluZyB0byB0aGUgYXJy YXkgb2YgY29udHJvbCBmbGFncworICogIGJlbG93LgorICoKKyAqICBUaGlzIG11c3QgYmUga2Vw dCBpbiBzdHJpY3Qgc3luYyB3aXRoIGdlbmJ1aWx0aW5zLnB5IQorICovCisKK3N0YXRpYyBkdWtf dWludDE2X3QgZHVrX19kYXRlX21hZ2ljc1tdID0geworCS8qIDA6IHRvU3RyaW5nICovCisJRFVL X0RBVEVfRkxBR19UT1NUUklOR19EQVRFICsgRFVLX0RBVEVfRkxBR19UT1NUUklOR19USU1FICsg RFVLX0RBVEVfRkxBR19MT0NBTFRJTUUsCisKKwkvKiAxOiB0b0RhdGVTdHJpbmcgKi8KKwlEVUtf REFURV9GTEFHX1RPU1RSSU5HX0RBVEUgKyBEVUtfREFURV9GTEFHX0xPQ0FMVElNRSwKKworCS8q IDI6IHRvVGltZVN0cmluZyAqLworCURVS19EQVRFX0ZMQUdfVE9TVFJJTkdfVElNRSArIERVS19E QVRFX0ZMQUdfTE9DQUxUSU1FLAorCisJLyogMzogdG9Mb2NhbGVTdHJpbmcgKi8KKwlEVUtfREFU RV9GTEFHX1RPU1RSSU5HX0RBVEUgKyBEVUtfREFURV9GTEFHX1RPU1RSSU5HX1RJTUUgKyBEVUtf REFURV9GTEFHX1RPU1RSSU5HX0xPQ0FMRSArIERVS19EQVRFX0ZMQUdfTE9DQUxUSU1FLAorCisJ LyogNDogdG9Mb2NhbGVEYXRlU3RyaW5nICovCisJRFVLX0RBVEVfRkxBR19UT1NUUklOR19EQVRF ICsgRFVLX0RBVEVfRkxBR19UT1NUUklOR19MT0NBTEUgKyBEVUtfREFURV9GTEFHX0xPQ0FMVElN RSwKKworCS8qIDU6IHRvTG9jYWxlVGltZVN0cmluZyAqLworCURVS19EQVRFX0ZMQUdfVE9TVFJJ TkdfVElNRSArIERVS19EQVRFX0ZMQUdfVE9TVFJJTkdfTE9DQUxFICsgRFVLX0RBVEVfRkxBR19M T0NBTFRJTUUsCisKKwkvKiA2OiB0b1VUQ1N0cmluZyAqLworCURVS19EQVRFX0ZMQUdfVE9TVFJJ TkdfREFURSArIERVS19EQVRFX0ZMQUdfVE9TVFJJTkdfVElNRSwKKworCS8qIDc6IHRvSVNPU3Ry aW5nICovCisJRFVLX0RBVEVfRkxBR19UT1NUUklOR19EQVRFICsgRFVLX0RBVEVfRkxBR19UT1NU UklOR19USU1FICsgRFVLX0RBVEVfRkxBR19OQU5fVE9fUkFOR0VfRVJST1IgKyBEVUtfREFURV9G TEFHX1NFUF9ULAorCisJLyogODogZ2V0RnVsbFllYXIgKi8KKwlEVUtfREFURV9GTEFHX0xPQ0FM VElNRSArIChEVUtfREFURV9JRFhfWUVBUiA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwK KworCS8qIDk6IGdldFVUQ0Z1bGxZZWFyICovCisJMCArIChEVUtfREFURV9JRFhfWUVBUiA8PCBE VUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDEwOiBnZXRNb250aCAqLworCURVS19E QVRFX0ZMQUdfTE9DQUxUSU1FICsgKERVS19EQVRFX0lEWF9NT05USCA8PCBEVUtfREFURV9GTEFH X1ZBTFVFX1NISUZUKSwKKworCS8qIDExOiBnZXRVVENNb250aCAqLworCTAgKyAoRFVLX0RBVEVf SURYX01PTlRIIDw8IERVS19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQpLAorCisJLyogMTI6IGdldERh dGUgKi8KKwlEVUtfREFURV9GTEFHX09ORUJBU0VEICsgRFVLX0RBVEVfRkxBR19MT0NBTFRJTUUg KyAoRFVLX0RBVEVfSURYX0RBWSA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8q IDEzOiBnZXRVVENEYXRlICovCisJRFVLX0RBVEVfRkxBR19PTkVCQVNFRCArIChEVUtfREFURV9J RFhfREFZIDw8IERVS19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQpLAorCisJLyogMTQ6IGdldERheSAq LworCURVS19EQVRFX0ZMQUdfTE9DQUxUSU1FICsgKERVS19EQVRFX0lEWF9XRUVLREFZIDw8IERV S19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQpLAorCisJLyogMTU6IGdldFVUQ0RheSAqLworCTAgKyAo RFVLX0RBVEVfSURYX1dFRUtEQVkgPDwgRFVLX0RBVEVfRkxBR19WQUxVRV9TSElGVCksCisKKwkv KiAxNjogZ2V0SG91cnMgKi8KKwlEVUtfREFURV9GTEFHX0xPQ0FMVElNRSArIChEVUtfREFURV9J RFhfSE9VUiA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDE3OiBnZXRVVENI b3VycyAqLworCTAgKyAoRFVLX0RBVEVfSURYX0hPVVIgPDwgRFVLX0RBVEVfRkxBR19WQUxVRV9T SElGVCksCisKKwkvKiAxODogZ2V0TWludXRlcyAqLworCURVS19EQVRFX0ZMQUdfTE9DQUxUSU1F ICsgKERVS19EQVRFX0lEWF9NSU5VVEUgPDwgRFVLX0RBVEVfRkxBR19WQUxVRV9TSElGVCksCisK KwkvKiAxOTogZ2V0VVRDTWludXRlcyAqLworCTAgKyAoRFVLX0RBVEVfSURYX01JTlVURSA8PCBE VUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDIwOiBnZXRTZWNvbmRzICovCisJRFVL X0RBVEVfRkxBR19MT0NBTFRJTUUgKyAoRFVLX0RBVEVfSURYX1NFQ09ORCA8PCBEVUtfREFURV9G TEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDIxOiBnZXRVVENTZWNvbmRzICovCisJMCArIChEVUtf REFURV9JRFhfU0VDT05EIDw8IERVS19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQpLAorCisJLyogMjI6 IGdldE1pbGxpc2Vjb25kcyAqLworCURVS19EQVRFX0ZMQUdfTE9DQUxUSU1FICsgKERVS19EQVRF X0lEWF9NSUxMSVNFQ09ORCA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDIz OiBnZXRVVENNaWxsaXNlY29uZHMgKi8KKwkwICsgKERVS19EQVRFX0lEWF9NSUxMSVNFQ09ORCA8 PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDI0OiBzZXRNaWxsaXNlY29uZHMg Ki8KKwlEVUtfREFURV9GTEFHX1RJTUVTRVRURVIgKyBEVUtfREFURV9GTEFHX0xPQ0FMVElNRSAr ICgxIDw8IERVS19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQpLAorCisJLyogMjU6IHNldFVUQ01pbGxp c2Vjb25kcyAqLworCURVS19EQVRFX0ZMQUdfVElNRVNFVFRFUiArICgxIDw8IERVS19EQVRFX0ZM QUdfVkFMVUVfU0hJRlQpLAorCisJLyogMjY6IHNldFNlY29uZHMgKi8KKwlEVUtfREFURV9GTEFH X1RJTUVTRVRURVIgKyBEVUtfREFURV9GTEFHX0xPQ0FMVElNRSArICgyIDw8IERVS19EQVRFX0ZM QUdfVkFMVUVfU0hJRlQpLAorCisJLyogMjc6IHNldFVUQ1NlY29uZHMgKi8KKwlEVUtfREFURV9G TEFHX1RJTUVTRVRURVIgKyAoMiA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8q IDI4OiBzZXRNaW51dGVzICovCisJRFVLX0RBVEVfRkxBR19USU1FU0VUVEVSICsgRFVLX0RBVEVf RkxBR19MT0NBTFRJTUUgKyAoMyA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8q IDI5OiBzZXRVVENNaW51dGVzICovCisJRFVLX0RBVEVfRkxBR19USU1FU0VUVEVSICsgKDMgPDwg RFVLX0RBVEVfRkxBR19WQUxVRV9TSElGVCksCisKKwkvKiAzMDogc2V0SG91cnMgKi8KKwlEVUtf REFURV9GTEFHX1RJTUVTRVRURVIgKyBEVUtfREFURV9GTEFHX0xPQ0FMVElNRSArICg0IDw8IERV S19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQpLAorCisJLyogMzE6IHNldFVUQ0hvdXJzICovCisJRFVL X0RBVEVfRkxBR19USU1FU0VUVEVSICsgKDQgPDwgRFVLX0RBVEVfRkxBR19WQUxVRV9TSElGVCks CisKKwkvKiAzMjogc2V0RGF0ZSAqLworCURVS19EQVRFX0ZMQUdfTE9DQUxUSU1FICsgKDEgPDwg RFVLX0RBVEVfRkxBR19WQUxVRV9TSElGVCksCisKKwkvKiAzMzogc2V0VVRDRGF0ZSAqLworCTAg KyAoMSA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDM0OiBzZXRNb250aCAq LworCURVS19EQVRFX0ZMQUdfTE9DQUxUSU1FICsgKDIgPDwgRFVLX0RBVEVfRkxBR19WQUxVRV9T SElGVCksCisKKwkvKiAzNTogc2V0VVRDTW9udGggKi8KKwkwICsgKDIgPDwgRFVLX0RBVEVfRkxB R19WQUxVRV9TSElGVCksCisKKwkvKiAzNjogc2V0RnVsbFllYXIgKi8KKwlEVUtfREFURV9GTEFH X05BTl9UT19aRVJPICsgRFVLX0RBVEVfRkxBR19MT0NBTFRJTUUgKyAoMyA8PCBEVUtfREFURV9G TEFHX1ZBTFVFX1NISUZUKSwKKworCS8qIDM3OiBzZXRVVENGdWxsWWVhciAqLworCURVS19EQVRF X0ZMQUdfTkFOX1RPX1pFUk8gKyAoMyA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NISUZUKSwKKwor CS8qIDM4OiBnZXRZZWFyICovCisJRFVLX0RBVEVfRkxBR19MT0NBTFRJTUUgKyBEVUtfREFURV9G TEFHX1NVQjE5MDAgKyAoRFVLX0RBVEVfSURYX1lFQVIgPDwgRFVLX0RBVEVfRkxBR19WQUxVRV9T SElGVCksCisKKwkvKiAzOTogc2V0WWVhciAqLworCURVS19EQVRFX0ZMQUdfTkFOX1RPX1pFUk8g KyBEVUtfREFURV9GTEFHX1lFQVJfRklYVVAgKyAoMyA8PCBEVUtfREFURV9GTEFHX1ZBTFVFX1NI SUZUKSwKK307CisKK0RVS19MT0NBTCBkdWtfc21hbGxfdWludF90IGR1a19fZGF0ZV9nZXRfaW5k aXJlY3RfbWFnaWMoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zbWFsbF91aW50X3QgbWFnaWNp ZHggPSAoZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisJRFVL X0FTU0VSVChtYWdpY2lkeCA8IChkdWtfc21hbGxfaW50X3QpIChzaXplb2YoZHVrX19kYXRlX21h Z2ljcykgLyBzaXplb2YoZHVrX3VpbnQxNl90KSkpOworCXJldHVybiAoZHVrX3NtYWxsX3VpbnRf dCkgZHVrX19kYXRlX21hZ2ljc1ttYWdpY2lkeF07Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0Vf REFURV9CVUlMVElOKQorLyoKKyAqICBDb25zdHJ1Y3RvciBjYWxscworICovCisKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVfY29uc3RydWN0b3IoZHVrX2h0aHJlYWQgKnRocikg eworCWR1a19pZHhfdCBuYXJncyA9IGR1a19nZXRfdG9wKHRocik7CisJZHVrX2Jvb2xfdCBpc19j b25zID0gZHVrX2lzX2NvbnN0cnVjdG9yX2NhbGwodGhyKTsKKwlkdWtfZG91YmxlX3QgZHBhcnRz W0RVS19EQVRFX0lEWF9OVU1fUEFSVFNdOworCWR1a19kb3VibGVfdCBkOworCisJRFVLX0RERChE VUtfREREUFJJTlQoIkRhdGUgY29uc3RydWN0b3IsIG5hcmdzPSVsZCwgaXNfY29ucz0lbGQiLCAo bG9uZykgbmFyZ3MsIChsb25nKSBpc19jb25zKSk7CisKKwkodm9pZCkgZHVrX3B1c2hfb2JqZWN0 X2hlbHBlcih0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1Rf RkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9C SkVDVF9GTEFHX0ZBU1RSRUZTIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19EQVRFKSwKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfQklEWF9EQVRFX1BST1RPVFlQRSk7CisKKwkvKiBV bmxpa2UgbW9zdCBidWlsdC1pbnMsIHRoZSBpbnRlcm5hbCBbW1ByaW1pdGl2ZVZhbHVlXV0gb2Yg YSBEYXRlCisJICogaXMgbXV0YWJsZS4KKwkgKi8KKworCWlmIChuYXJncyA9PSAwIHx8ICFpc19j b25zKSB7CisJCWQgPSBkdWtfX3RpbWVjbGlwKGR1a190aW1lX2dldF9lY21hc2NyaXB0X3RpbWVf bm9mcmFjKHRocikpOworCQlkdWtfcHVzaF9udW1iZXIodGhyLCBkKTsKKwkJZHVrX3hkZWZfcHJv cF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfVkFMVUUsIERVS19QUk9QREVT Q19GTEFHU19XKTsKKwkJaWYgKCFpc19jb25zKSB7CisJCQkvKiBjYWxsZWQgYXMgYSBub3JtYWwg ZnVuY3Rpb246IHJldHVybiBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkgKi8KKwkJCWR1a190b19zdHJp bmcodGhyLCAtMSk7CisJCX0KKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChuYXJncyA9PSAxKSB7 CisJCWNvbnN0IGNoYXIgKnN0cjsKKwkJZHVrX3RvX3ByaW1pdGl2ZSh0aHIsIDAsIERVS19ISU5U X05PTkUpOworCQlzdHIgPSBkdWtfZ2V0X3N0cmluZ19ub3RzeW1ib2wodGhyLCAwKTsKKwkJaWYg KHN0cikgeworCQkJZHVrX19wYXJzZV9zdHJpbmcodGhyLCBzdHIpOworCQkJZHVrX3JlcGxhY2Uo dGhyLCAwKTsgIC8qIG1heSBiZSBOYU4gKi8KKwkJfQorCQlkID0gZHVrX190aW1lY2xpcChkdWtf dG9fbnVtYmVyKHRociwgMCkpOyAgLyogc3ltYm9scyBmYWlsIGhlcmUgKi8KKwkJZHVrX3B1c2hf bnVtYmVyKHRociwgZCk7CisJCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERV S19TVFJJRFhfSU5UX1ZBTFVFLCBEVUtfUFJPUERFU0NfRkxBR1NfVyk7CisJCXJldHVybiAxOwor CX0KKworCWR1a19fc2V0X3BhcnRzX2Zyb21fYXJncyh0aHIsIGRwYXJ0cywgbmFyZ3MpOworCisJ LyogUGFydHMgYXJlIGluIGxvY2FsIHRpbWUsIGNvbnZlcnQgd2hlbiBzZXR0aW5nLiAqLworCisJ KHZvaWQpIGR1a19fc2V0X3RoaXNfdGltZXZhbF9mcm9tX2RwYXJ0cyh0aHIsIGRwYXJ0cywgRFVL X0RBVEVfRkxBR19MT0NBTFRJTUUgLypmbGFncyovKTsgIC8qIC0+IFsgLi4uIHRoaXMgdGltZXZh bCBdICovCisJZHVrX3BvcCh0aHIpOyAgLyogLT4gWyAuLi4gdGhpcyBdICovCisJcmV0dXJuIDE7 Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVfY29uc3RydWN0b3JfcGFy c2UoZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiBkdWtfX3BhcnNlX3N0cmluZyh0aHIsIGR1 a190b19zdHJpbmcodGhyLCAwKSk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2Jp X2RhdGVfY29uc3RydWN0b3JfdXRjKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaWR4X3QgbmFy Z3MgPSBkdWtfZ2V0X3RvcCh0aHIpOworCWR1a19kb3VibGVfdCBkcGFydHNbRFVLX0RBVEVfSURY X05VTV9QQVJUU107CisJZHVrX2RvdWJsZV90IGQ7CisKKwkvKiBCZWhhdmlvciBmb3IgbmFyZ3Mg PCAyIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudDogY3VycmVudGx5IHdlJ2xsCisJICogc2V0 IGEgTmFOIHRpbWUgdmFsdWUgKG1hdGNoaW5nIFY4IGJlaGF2aW9yKSBpbiB0aGlzIGNhc2UuCisJ ICovCisKKwlpZiAobmFyZ3MgPCAyKSB7CisJCWR1a19wdXNoX25hbih0aHIpOworCX0gZWxzZSB7 CisJCWR1a19fc2V0X3BhcnRzX2Zyb21fYXJncyh0aHIsIGRwYXJ0cywgbmFyZ3MpOworCQlkID0g ZHVrX2JpX2RhdGVfZ2V0X3RpbWV2YWxfZnJvbV9kcGFydHMoZHBhcnRzLCAwIC8qZmxhZ3MqLyk7 CisJCWR1a19wdXNoX251bWJlcih0aHIsIGQpOworCX0KKwlyZXR1cm4gMTsKK30KKworRFVLX0lO VEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZGF0ZV9jb25zdHJ1Y3Rvcl9ub3coZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19kb3VibGVfdCBkOworCisJZCA9IGR1a190aW1lX2dldF9lY21hc2NyaXB0 X3RpbWVfbm9mcmFjKHRocik7CisJRFVLX0FTU0VSVChkdWtfX3RpbWVjbGlwKGQpID09IGQpOyAg LyogVGltZUNsaXAoKSBzaG91bGQgbmV2ZXIgYmUgbmVjZXNzYXJ5ICovCisJZHVrX3B1c2hfbnVt YmVyKHRociwgZCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAgU3RyaW5nL0pTT04gY29udmVy c2lvbnMKKyAqCisgKiAgSHVtYW4gcmVhZGFibGUgY29udmVyc2lvbnMgYXJlIG5vdyBiYXNpY2Fs bHkgSVNPIDg2MDEgd2l0aCBhIHNwYWNlCisgKiAgKGluc3RlYWQgb2YgJ1QnKSBhcyB0aGUgZGF0 ZS90aW1lIHNlcGFyYXRvci4gIFRoaXMgaXMgYSBnb29kIGJhc2VsaW5lCisgKiAgYW5kIGlzIHBs YXRmb3JtIGluZGVwZW5kZW50LgorICoKKyAqICBBIHNoYXJlZCBuYXRpdmUgaGVscGVyIHRvIHBy b3ZpZGUgbWFueSBjb252ZXJzaW9ucy4gIE1hZ2ljIHZhbHVlIGNvbnRhaW5zCisgKiAgYSBzZXQg b2YgZmxhZ3MuICBUaGUgaGVscGVyIHByb3ZpZGVzOgorICoKKyAqICAgIHRvU3RyaW5nKCkKKyAq ICAgIHRvRGF0ZVN0cmluZygpCisgKiAgICB0b1RpbWVTdHJpbmcoKQorICogICAgdG9Mb2NhbGVT dHJpbmcoKQorICogICAgdG9Mb2NhbGVEYXRlU3RyaW5nKCkKKyAqICAgIHRvTG9jYWxlVGltZVN0 cmluZygpCisgKiAgICB0b1VUQ1N0cmluZygpCisgKiAgICB0b0lTT1N0cmluZygpCisgKgorICog IE5vdGVzOgorICoKKyAqICAgIC0gRGF0ZS5wcm90b3R5cGUudG9HTVRTdHJpbmcoKSBhbmQgRGF0 ZS5wcm90b3R5cGUudG9VVENTdHJpbmcoKSBhcmUKKyAqICAgICAgcmVxdWlyZWQgdG8gYmUgdGhl IHNhbWUgRUNNQVNjcmlwdCBmdW5jdGlvbiBvYmplY3QgKCEpLCBzbyBpdCBpcworICogICAgICBv bWl0dGVkIGZyb20gaGVyZS4KKyAqCisgKiAgICAtIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5n KCk6IEU1LjEgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGEKKyAqICAgICAgc3BlY2lm aWMgZm9ybWF0LCBidXQgcmVzdWx0IHNob3VsZCBiZSBodW1hbiByZWFkYWJsZS4gIFRoZQorICog ICAgICBzcGVjaWZpY2F0aW9uIHN1Z2dlc3RzIHVzaW5nIElTTyA4NjAxIGZvcm1hdCB3aXRoIGEg c3BhY2UgKGluc3RlYWQKKyAqICAgICAgb2YgJ1QnKSBzZXBhcmF0b3IgaWYgYSBtb3JlIGh1bWFu IHJlYWRhYmxlIGZvcm1hdCBpcyBub3QgYXZhaWxhYmxlLgorICoKKyAqICAgIC0gRGF0ZS5wcm90 b3R5cGUudG9JU09TdHJpbmcoKTogdW5saWtlIG90aGVyIGNvbnZlcnNpb24gZnVuY3Rpb25zLAor ICogICAgICB0b0lTT1N0cmluZygpIHJlcXVpcmVzIGEgUmFuZ2VFcnJvciBmb3IgaW52YWxpZCBk YXRlIHZhbHVlcy4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9kYXRlX3By b3RvdHlwZV90b3N0cmluZ19zaGFyZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zbWFsbF91 aW50X3QgZmxhZ3MgPSBkdWtfX2RhdGVfZ2V0X2luZGlyZWN0X21hZ2ljKHRocik7CisJcmV0dXJu IGR1a19fdG9fc3RyaW5nX2hlbHBlcih0aHIsIGZsYWdzKTsKK30KKworRFVLX0lOVEVSTkFMIGR1 a19yZXRfdCBkdWtfYmlfZGF0ZV9wcm90b3R5cGVfdmFsdWVfb2YoZHVrX2h0aHJlYWQgKnRocikg eworCS8qIFRoaXMgbmF0aXZlIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgRGF0ZS5wcm90b3R5 cGUuZ2V0VGltZSgpCisJICogYXMgdGhlaXIgYmVoYXZpb3IgaXMgaWRlbnRpY2FsLgorCSAqLwor CisJZHVrX2RvdWJsZV90IGQgPSBkdWtfX3B1c2hfdGhpc19nZXRfdGltZXZhbCh0aHIsIDAgLypm bGFncyovKTsgIC8qIC0+IFsgdGhpcyBdICovCisJRFVLX0FTU0VSVChEVUtfSVNGSU5JVEUoZCkg fHwgRFVLX0lTTkFOKGQpKTsKKwlkdWtfcHVzaF9udW1iZXIodGhyLCBkKTsKKwlyZXR1cm4gMTsK K30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZGF0ZV9wcm90b3R5cGVfdG9fanNv bihkdWtfaHRocmVhZCAqdGhyKSB7CisJLyogTm90ZTogdG9KU09OKCkgaXMgYSBnZW5lcmljIGZ1 bmN0aW9uIHdoaWNoIHdvcmtzIGV2ZW4gaWYgJ3RoaXMnCisJICogaXMgbm90IGEgRGF0ZS4gIFRo ZSBzb2xlIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisJICovCisKKwlkdWtfcHVzaF90aGlzKHRocik7 CisJZHVrX3RvX29iamVjdCh0aHIsIC0xKTsKKworCWR1a19kdXBfdG9wKHRocik7CisJZHVrX3Rv X3ByaW1pdGl2ZSh0aHIsIC0xLCBEVUtfSElOVF9OVU1CRVIpOworCWlmIChkdWtfaXNfbnVtYmVy KHRociwgLTEpKSB7CisJCWR1a19kb3VibGVfdCBkID0gZHVrX2dldF9udW1iZXIodGhyLCAtMSk7 CisJCWlmICghRFVLX0lTRklOSVRFKGQpKSB7CisJCQlkdWtfcHVzaF9udWxsKHRocik7CisJCQly ZXR1cm4gMTsKKwkJfQorCX0KKwlkdWtfcG9wKHRocik7CisKKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4 X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhfVE9fSVNPX1NUUklORyk7CisJZHVrX2R1cF9tMih0 aHIpOyAgLyogLT4gWyBPIHRvSXNvU3RyaW5nIE8gXSAqLworCWR1a19jYWxsX21ldGhvZCh0aHIs IDApOworCXJldHVybiAxOworfQorCisvKgorICogIEdldHRlcnMuCisgKgorICogIEltcGxlbWVu dGluZyBnZXR0ZXJzIGlzIHF1aXRlIGVhc3kuICBUaGUgaW50ZXJuYWwgdGltZSB2YWx1ZSBpcyBl aXRoZXIKKyAqICBOYU4sIG9yIHJlcHJlc2VudHMgbWlsbGlzZWNvbmRzICh3aXRob3V0IGZyYWN0 aW9ucykgZnJvbSBKYW4gMSwgMTk3MC4KKyAqICBUaGUgaW50ZXJuYWwgdGltZSB2YWx1ZSBjYW4g YmUgY29udmVydGVkIHRvIGludGVnZXIgcGFydHMsIGFuZCBlYWNoCisgKiAgcGFydCB3aWxsIGJl IG5vcm1hbGl6ZWQgYW5kIHdpbGwgZml0IGludG8gYSAzMi1iaXQgc2lnbmVkIGludGVnZXIuCisg KgorICogIEEgc2hhcmVkIG5hdGl2ZSBoZWxwZXIgdG8gcHJvdmlkZSBhbGwgZ2V0dGVycy4gIE1h Z2ljIHZhbHVlIGNvbnRhaW5zCisgKiAgYSBzZXQgb2YgZmxhZ3MgYW5kIGFsc28gcGFja3MgdGhl IGRhdGUgY29tcG9uZW50IGluZGV4IGFyZ3VtZW50LiAgVGhlCisgKiAgaGVscGVyIHByb3ZpZGVz OgorICoKKyAqICAgIGdldEZ1bGxZZWFyKCkKKyAqICAgIGdldFVUQ0Z1bGxZZWFyKCkKKyAqICAg IGdldE1vbnRoKCkKKyAqICAgIGdldFVUQ01vbnRoKCkKKyAqICAgIGdldERhdGUoKQorICogICAg Z2V0VVRDRGF0ZSgpCisgKiAgICBnZXREYXkoKQorICogICAgZ2V0VVRDRGF5KCkKKyAqICAgIGdl dEhvdXJzKCkKKyAqICAgIGdldFVUQ0hvdXJzKCkKKyAqICAgIGdldE1pbnV0ZXMoKQorICogICAg Z2V0VVRDTWludXRlcygpCisgKiAgICBnZXRTZWNvbmRzKCkKKyAqICAgIGdldFVUQ1NlY29uZHMo KQorICogICAgZ2V0TWlsbGlzZWNvbmRzKCkKKyAqICAgIGdldFVUQ01pbGxpc2Vjb25kcygpCisg KiAgICBnZXRZZWFyKCkKKyAqCisgKiAgTm90ZXM6CisgKgorICogICAgLSBEYXRlLnByb3RvdHlw ZS5nZXREYXRlKCk6ICdkYXRlJyBtZWFucyBkYXktb2YtbW9udGgsIGFuZCBpcworICogICAgICB6 ZXJvLWJhc2VkIGluIGludGVybmFsIGNhbGN1bGF0aW9ucyBidXQgcHVibGljIEFQSSBleHBlY3Rz IGl0IHRvCisgKiAgICAgIGJlIG9uZS1iYXNlZC4KKyAqCisgKiAgICAtIERhdGUucHJvdG90eXBl LmdldFRpbWUoKSBhbmQgRGF0ZS5wcm90b3R5cGUudmFsdWVPZigpIGhhdmUgaWRlbnRpY2FsCisg KiAgICAgIGJlaGF2aW9yLiAgVGhleSBoYXZlIHNlcGFyYXRlIGZ1bmN0aW9uIG9iamVjdHMsIGJ1 dCBzaGFyZSB0aGUgc2FtZSBDCisgKiAgICAgIGZ1bmN0aW9uIChkdWtfYmlfZGF0ZV9wcm90b3R5 cGVfdmFsdWVfb2YpLgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVf cHJvdG90eXBlX2dldF9zaGFyZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zbWFsbF91aW50 X3QgZmxhZ3NfYW5kX2lkeCA9IGR1a19fZGF0ZV9nZXRfaW5kaXJlY3RfbWFnaWModGhyKTsKKwly ZXR1cm4gZHVrX19nZXRfcGFydF9oZWxwZXIodGhyLCBmbGFnc19hbmRfaWR4KTsKK30KKworRFVL X0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZGF0ZV9wcm90b3R5cGVfZ2V0X3RpbWV6b25lX29m ZnNldChkdWtfaHRocmVhZCAqdGhyKSB7CisJLyoKKwkgKiAgUmV0dXJuICh0IC0gTG9jYWxUaW1l KHQpKSBpbiBtaW51dGVzOgorCSAqCisJICogICAgdCAtIExvY2FsVGltZSh0KSA9IHQgLSAodCAr IExvY2FsVFpBICsgRGF5bGlnaHRTYXZpbmdUQSh0KSkKKwkgKiAgICAgICAgICAgICAgICAgICAg ID0gLShMb2NhbFRaQSArIERheWxpZ2h0U2F2aW5nVEEodCkpCisJICoKKwkgKiAgd2hlcmUgRGF5 bGlnaHRTYXZpbmdUQSgpIGlzIGNoZWNrZWQgZm9yIHRpbWUgJ3QnLgorCSAqCisJICogIE5vdGUg dGhhdCB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0IGlzIG9wcG9zaXRlIHRvIGNvbW1vbiB1c2FnZSwK KwkgKiAgZS5nLiBmb3IgRUUoUylUIHdoaWNoIG5vcm1hbGx5IGlzICsyaCBvciArM2ggZnJvbSBV VEMsIHRoaXMKKwkgKiAgZnVuY3Rpb24gcmV0dXJucyAtMTIwIG9yIC0xODAuCisJICoKKwkgKi8K KworCWR1a19kb3VibGVfdCBkOworCWR1a19pbnRfdCB0em9mZnNldDsKKworCS8qIE5vdGU6IERT VCBhZGp1c3RtZW50IGlzIGRldGVybWluZWQgdXNpbmcgVVRDIHRpbWUuICovCisJZCA9IGR1a19f cHVzaF90aGlzX2dldF90aW1ldmFsKHRociwgMCAvKmZsYWdzKi8pOworCURVS19BU1NFUlQoRFVL X0lTRklOSVRFKGQpIHx8IERVS19JU05BTihkKSk7CisJaWYgKERVS19JU05BTihkKSkgeworCQlk dWtfcHVzaF9uYW4odGhyKTsKKwl9IGVsc2UgeworCQlEVUtfQVNTRVJUKERVS19JU0ZJTklURShk KSk7CisJCXR6b2Zmc2V0ID0gRFVLX1VTRV9EQVRFX0dFVF9MT0NBTF9UWk9GRlNFVChkKTsKKwkJ ZHVrX3B1c2hfaW50KHRociwgLXR6b2Zmc2V0IC8gNjApOworCX0KKwlyZXR1cm4gMTsKK30KKwor LyoKKyAqICBTZXR0ZXJzLgorICoKKyAqICBTZXR0ZXJzIGFyZSBhIGJpdCBtb3JlIGNvbXBsaWNh dGVkIHRoYW4gZ2V0dGVycy4gIENvbXBvbmVudCBzZXR0ZXJzCisgKiAgYnJlYWsgZG93biB0aGUg Y3VycmVudCB0aW1lIHZhbHVlIGludG8gaXRzIChub3JtYWxpemVkKSBjb21wb25lbnQKKyAqICBw YXJ0cywgcmVwbGFjZSBvbmUgb3IgbW9yZSBjb21wb25lbnRzIHdpdGggLXVubm9ybWFsaXplZC0g bmV3IHZhbHVlcywKKyAqICBhbmQgdGhlIGNvbXBvbmVudHMgYXJlIHRoZW4gY29udmVydGVkIGJh Y2sgaW50byBhIHRpbWUgdmFsdWUuICBBcyBhbgorICogIGV4YW1wbGUgb2YgdXNpbmcgdW5ub3Jt YWxpemVkIHZhbHVlczoKKyAqCisgKiAgICB2YXIgZCA9IG5ldyBEYXRlKDEyMzQ1Njc4OTApOwor ICoKKyAqICBpcyBlcXVpdmFsZW50IHRvOgorICoKKyAqICAgIHZhciBkID0gbmV3IERhdGUoMCk7 CisgKiAgICBkLnNldFVUQ01pbGxpc2Vjb25kcygxMjM0NTY3ODkwKTsKKyAqCisgKiAgQSBzaGFy ZWQgbmF0aXZlIGhlbHBlciB0byBwcm92aWRlIGFsbW9zdCBhbGwgc2V0dGVycy4gIE1hZ2ljIHZh bHVlCisgKiAgY29udGFpbnMgYSBzZXQgb2YgZmxhZ3MgYW5kIGFsc28gcGFja3MgdGhlICJtYXhu YXJncyIgYXJndW1lbnQuICBUaGUKKyAqICBoZWxwZXIgcHJvdmlkZXM6CisgKgorICogICAgc2V0 TWlsbGlzZWNvbmRzKCkKKyAqICAgIHNldFVUQ01pbGxpc2Vjb25kcygpCisgKiAgICBzZXRTZWNv bmRzKCkKKyAqICAgIHNldFVUQ1NlY29uZHMoKQorICogICAgc2V0TWludXRlcygpCisgKiAgICBz ZXRVVENNaW51dGVzKCkKKyAqICAgIHNldEhvdXJzKCkKKyAqICAgIHNldFVUQ0hvdXJzKCkKKyAq ICAgIHNldERhdGUoKQorICogICAgc2V0VVRDRGF0ZSgpCisgKiAgICBzZXRNb250aCgpCisgKiAg ICBzZXRVVENNb250aCgpCisgKiAgICBzZXRGdWxsWWVhcigpCisgKiAgICBzZXRVVENGdWxsWWVh cigpCisgKiAgICBzZXRZZWFyKCkKKyAqCisgKiAgTm90ZXM6CisgKgorICogICAgLSBEYXRlLnBy b3RvdHlwZS5zZXRZZWFyKCkgKFNlY3Rpb24gQiBhZGRpdGlvbik6IHNwZWNpYWwgeWVhciBjaGVj aworICogICAgICBpcyBvbWl0dGVkLiAgTmFOIC8gSW5maW5pdHkgd2lsbCBqdXN0IGZsb3cgdGhy b3VnaCBhbmQgdWx0aW1hdGVseQorICogICAgICByZXN1bHQgaW4gYSBOYU4gaW50ZXJuYWwgdGlt ZSB2YWx1ZS4KKyAqCisgKiAgICAtIERhdGUucHJvdG90eXBlLnNldFllYXIoKSBkb2VzIG5vdCBo YXZlIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IKKyAqICAgICAgc2V0dGluZyBtb250aCBhbmQgZGF5 LWluLW1vbnRoIChsaWtlIHNldEZ1bGxZZWFyKCkpLCBidXQgd2UgaW5kaWNhdGUKKyAqICAgICAg J21heG5hcmdzJyB0byBiZSAzIHRvIGdldCB0aGUgeWVhciB3cml0dGVuIHRvIHRoZSBjb3JyZWN0 IGNvbXBvbmVudAorICogICAgICBpbmRleCBpbiBkdWtfX3NldF9wYXJ0X2hlbHBlcigpLiAgVGhl IGZ1bmN0aW9uIGhhcyBuYXJncyA9PSAxLCBzbyBvbmx5CisgKiAgICAgIHRoZSB5ZWFyIHdpbGwg YmUgc2V0IHJlZ2FyZGxlc3Mgb2YgYWN0dWFsIGFyZ3VtZW50IGNvdW50LgorICovCisKK0RVS19J TlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2RhdGVfcHJvdG90eXBlX3NldF9zaGFyZWQoZHVrX2h0 aHJlYWQgKnRocikgeworCWR1a19zbWFsbF91aW50X3QgZmxhZ3NfYW5kX21heG5hcmdzID0gZHVr X19kYXRlX2dldF9pbmRpcmVjdF9tYWdpYyh0aHIpOworCXJldHVybiBkdWtfX3NldF9wYXJ0X2hl bHBlcih0aHIsIGZsYWdzX2FuZF9tYXhuYXJncyk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0 X3QgZHVrX2JpX2RhdGVfcHJvdG90eXBlX3NldF90aW1lKGR1a19odGhyZWFkICp0aHIpIHsKKwlk dWtfZG91YmxlX3QgZDsKKworCSh2b2lkKSBkdWtfX3B1c2hfdGhpc19nZXRfdGltZXZhbCh0aHIs IDAgLypmbGFncyovKTsgLyogLT4gWyB0aW1ldmFsIHRoaXMgXSAqLworCWQgPSBkdWtfX3RpbWVj bGlwKGR1a190b19udW1iZXIodGhyLCAwKSk7CisJZHVrX3B1c2hfbnVtYmVyKHRociwgZCk7CisJ ZHVrX2R1cF90b3AodGhyKTsKKwlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTMsIERV S19TVFJJRFhfSU5UX1ZBTFVFKTsgLyogLT4gWyB0aW1ldmFsIHRoaXMgdGltZXZhbCBdICovCisK KwlyZXR1cm4gMTsKK30KKworLyoKKyAqICBNaXNjLgorICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfU1lNQk9MX0JVSUxUSU4pCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9kYXRlX3By b3RvdHlwZV90b3ByaW1pdGl2ZShkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3NpemVfdCBoaW50 bGVuOworCWNvbnN0IGNoYXIgKmhpbnRzdHI7CisJZHVrX2ludF90IGhpbnQ7CisKKwkvKiBJbnZv a2VzIE9yZGluYXJ5VG9QcmltaXRpdmUoKSB3aXRoIHN1aXRhYmxlIGhpbnQuICBOb3RlIHRoYXQg dGhlCisJICogbWV0aG9kIGlzIGdlbmVyaWMsIGFuZCB3b3JrcyBvbiBub24tRGF0ZSBhcmd1bWVu dHMgdG9vLgorCSAqCisJICogaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21h LTI2Mi82LjAvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlCisJICovCisKKwlkdWtf cHVzaF90aGlzKHRocik7CisJZHVrX3JlcXVpcmVfb2JqZWN0KHRociwgLTEpOworCURVS19BU1NF UlRfVE9QKHRociwgMik7CisKKwloaW50c3RyID0gZHVrX3JlcXVpcmVfbHN0cmluZyh0aHIsIDAs ICZoaW50bGVuKTsKKwlpZiAoKGhpbnRsZW4gPT0gNiAmJiBEVUtfU1RSQ01QKGhpbnRzdHIsICJz dHJpbmciKSA9PSAwKSB8fAorCSAgICAoaGludGxlbiA9PSA3ICYmIERVS19TVFJDTVAoaGludHN0 ciwgImRlZmF1bHQiKSA9PSAwKSkgeworCQloaW50ID0gRFVLX0hJTlRfU1RSSU5HOworCX0gZWxz ZSBpZiAoaGludGxlbiA9PSA2ICYmIERVS19TVFJDTVAoaGludHN0ciwgIm51bWJlciIpID09IDAp IHsKKwkJaGludCA9IERVS19ISU5UX05VTUJFUjsKKwl9IGVsc2UgeworCQlEVUtfRENFUlJPUl9U WVBFX0lOVkFMSURfQVJHUyh0aHIpOworCX0KKworCWR1a190b19wcmltaXRpdmVfb3JkaW5hcnko dGhyLCAtMSwgaGludCk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfU1lNQk9M X0JVSUxUSU4gKi8KKworI2VuZGlmICAvKiBEVUtfVVNFX0RBVEVfQlVJTFRJTiAqLworCisvKiBh dXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYgRFVLX19DRl9BQ0NFUFQKKyN1bmRlZiBEVUtfX0NG X0FDQ0VQVF9OVUwKKyN1bmRlZiBEVUtfX0NGX05FRworI3VuZGVmIERVS19fRFBSSU5UX0RQQVJU UworI3VuZGVmIERVS19fRFBSSU5UX1BBUlRTCisjdW5kZWYgRFVLX19EUFJJTlRfUEFSVFNfQU5E X0RQQVJUUworI3VuZGVmIERVS19fTE9DQUxfVFpPRkZTRVRfTUFYSVRFUgorI3VuZGVmIERVS19f TlVNX0lTTzg2MDFfUEFSU0VSX1BBUlRTCisjdW5kZWYgRFVLX19QQUNLX1JVTEUKKyN1bmRlZiBE VUtfX1BJX0RBWQorI3VuZGVmIERVS19fUElfSE9VUgorI3VuZGVmIERVS19fUElfTUlMTElTRUNP TkQKKyN1bmRlZiBEVUtfX1BJX01JTlVURQorI3VuZGVmIERVS19fUElfTU9OVEgKKyN1bmRlZiBE VUtfX1BJX1NFQ09ORAorI3VuZGVmIERVS19fUElfVFpIT1VSCisjdW5kZWYgRFVLX19QSV9UWk1J TlVURQorI3VuZGVmIERVS19fUElfWUVBUgorI3VuZGVmIERVS19fUE1fREFZCisjdW5kZWYgRFVL X19QTV9IT1VSCisjdW5kZWYgRFVLX19QTV9NSUxMSVNFQ09ORAorI3VuZGVmIERVS19fUE1fTUlO VVRFCisjdW5kZWYgRFVLX19QTV9NT05USAorI3VuZGVmIERVS19fUE1fU0VDT05ECisjdW5kZWYg RFVLX19QTV9UWkhPVVIKKyN1bmRlZiBEVUtfX1BNX1RaTUlOVVRFCisjdW5kZWYgRFVLX19QTV9Z RUFSCisjdW5kZWYgRFVLX19SVUxFX01BU0tfUEFSVF9TRVAKKyN1bmRlZiBEVUtfX1NJX0NPTE9O CisjdW5kZWYgRFVLX19TSV9NSU5VUworI3VuZGVmIERVS19fU0lfTlVMCisjdW5kZWYgRFVLX19T SV9QRVJJT0QKKyN1bmRlZiBEVUtfX1NJX1BMVVMKKyN1bmRlZiBEVUtfX1NJX1NQQUNFCisjdW5k ZWYgRFVLX19TSV9UCisjdW5kZWYgRFVLX19TSV9aCisjdW5kZWYgRFVLX19TTV9DT0xPTgorI3Vu ZGVmIERVS19fU01fTUlOVVMKKyN1bmRlZiBEVUtfX1NNX05VTAorI3VuZGVmIERVS19fU01fUEVS SU9ECisjdW5kZWYgRFVLX19TTV9QTFVTCisjdW5kZWYgRFVLX19TTV9TUEFDRQorI3VuZGVmIERV S19fU01fVAorI3VuZGVmIERVS19fU01fWgorI3VuZGVmIERVS19fVU5QQUNLX1JVTEUKKyN1bmRl ZiBEVUtfX1dFRUtEQVlfTU9EX0FEREVSCisjdW5kZWYgRFVLX19ZRUFSCisvKgorICogIFVuaXgt bGlrZSBEYXRlIHByb3ZpZGVycworICoKKyAqICBHZW5lcmFsbHkgdXNlZnVsIFVuaXggLyBQT1NJ WCAvIEFOU0kgRGF0ZSBwcm92aWRlcnMuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFs LmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKiBUaGUgbmVjZXNzYXJ5ICNpbmNsdWRlcyBh cmUgaW4gcGxhY2UgaW4gZHVrX2NvbmZpZy5oLiAqLworCisvKiBCdWZmZXIgc2l6ZXMgZm9yIHNv bWUgVU5JWCBjYWxscy4gIExhcmdlciB0aGFuIHN0cmljdGx5IG5lY2Vzc2FyeQorICogdG8gYXZv aWQgVmFsZ3JpbmQgZXJyb3JzLgorICovCisjZGVmaW5lIERVS19fU1RSUFRJTUVfQlVGX1NJWkUg IDY0CisjZGVmaW5lIERVS19fU1RSRlRJTUVfQlVGX1NJWkUgIDY0CisKKyNpZiBkZWZpbmVkKERV S19VU0VfREFURV9OT1dfR0VUVElNRU9GREFZKQorLyogR2V0IGN1cnJlbnQgRUNNQVNjcmlwdCB0 aW1lICg9IFVOSVgvUG9zaXggdGltZSwgYnV0IGluIG1pbGxpc2Vjb25kcykuICovCitEVUtfSU5U RVJOQUwgZHVrX2RvdWJsZV90IGR1a19iaV9kYXRlX2dldF9ub3dfZ2V0dGltZW9mZGF5KHZvaWQp IHsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlkdWtfZG91YmxlX3QgZDsKKworCWlmIChnZXR0aW1l b2ZkYXkoJnR2LCBOVUxMKSAhPSAwKSB7CisJCURVS19EKERVS19EUFJJTlQoImdldHRpbWVvZmRh eSgpIGZhaWxlZCIpKTsKKwkJcmV0dXJuIDAuMDsKKwl9CisKKwkvKiBBcyBvZiBEdWt0YXBlIDIu Mi4wIGFsbG93IGZyYWN0aW9ucy4gKi8KKwlkID0gKChkdWtfZG91YmxlX3QpIHR2LnR2X3NlYykg KiAxMDAwLjAgKworCSAgICAoKGR1a19kb3VibGVfdCkgdHYudHZfdXNlYykgLyAxMDAwLjA7CisK KwlyZXR1cm4gZDsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9EQVRFX05PV19HRVRUSU1FT0ZEQVkg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9EQVRFX05PV19USU1FKQorLyogTm90IGEgdmVyeSBn b29kIHByb3ZpZGVyOiBvbmx5IGZ1bGwgc2Vjb25kcyBhcmUgYXZhaWxhYmxlLiAqLworRFVLX0lO VEVSTkFMIGR1a19kb3VibGVfdCBkdWtfYmlfZGF0ZV9nZXRfbm93X3RpbWUodm9pZCkgeworCXRp bWVfdCB0OworCisJdCA9IHRpbWUoTlVMTCk7CisJaWYgKHQgPT0gKHRpbWVfdCkgLTEpIHsKKwkJ RFVLX0QoRFVLX0RQUklOVCgidGltZSgpIGZhaWxlZCIpKTsKKwkJcmV0dXJuIDAuMDsKKwl9CisJ cmV0dXJuICgoZHVrX2RvdWJsZV90KSB0KSAqIDEwMDAuMDsKK30KKyNlbmRpZiAgLyogRFVLX1VT RV9EQVRFX05PV19USU1FICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREFURV9UWk9fR01USU1F KSB8fCBkZWZpbmVkKERVS19VU0VfREFURV9UWk9fR01USU1FX1IpIHx8IGRlZmluZWQoRFVLX1VT RV9EQVRFX1RaT19HTVRJTUVfUykKKy8qIEdldCBsb2NhbCB0aW1lIG9mZnNldCAoaW4gc2Vjb25k cykgZm9yIGEgY2VydGFpbiAoVVRDKSBpbnN0YW50ICdkJy4gKi8KK0RVS19JTlRFUk5BTCBkdWtf aW50X3QgZHVrX2JpX2RhdGVfZ2V0X2xvY2FsX3R6b2Zmc2V0X2dtdGltZShkdWtfZG91YmxlX3Qg ZCkgeworCXRpbWVfdCB0LCB0MSwgdDI7CisJZHVrX2ludF90IHBhcnRzW0RVS19EQVRFX0lEWF9O VU1fUEFSVFNdOworCWR1a19kb3VibGVfdCBkcGFydHNbRFVLX0RBVEVfSURYX05VTV9QQVJUU107 CisJc3RydWN0IHRtIHRtc1syXTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREFURV9UWk9fR01USU1F KQorCXN0cnVjdCB0bSAqdG1fcHRyOworI2VuZGlmCisKKwkvKiBGb3IgTmFOL2luZiwgdGhlIHJl dHVybiB2YWx1ZSBkb2Vzbid0IG1hdHRlci4gKi8KKwlpZiAoIURVS19JU0ZJTklURShkKSkgewor CQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBub3Qgd2l0aGluIEVDTUFTY3JpcHQgcmFuZ2UsIHNv bWUgaW50ZWdlciB0aW1lIGNhbGN1bGF0aW9ucworCSAqIHdvbid0IHdvcmsgY29ycmVjdGx5IChh bmQgc29tZSBhc3NlcnRzIHdpbGwgZmFpbCksIHNvIGJhaWwgb3V0CisJICogaWYgc28uICBUaGlz IGZpeGVzIHRlc3QtYnVnLWRhdGUtaW5zYW5lLXNldHllYXIuanMuICBUaGVyZSBpcworCSAqIGEg Ky8tIDI0aCBsZWV3YXkgaW4gdGhpcyByYW5nZSBjaGVjayB0byBhdm9pZCBhIHRlc3QyNjIgY29y bmVyCisJICogY2FzZSBkb2N1bWVudGVkIGluIHRlc3QtYnVnLWRhdGUtdGltZXZhbC1lZGdlcy5q cy4KKwkgKi8KKwlpZiAoIWR1a19iaV9kYXRlX3RpbWV2YWxfaW5fbGVld2F5X3JhbmdlKGQpKSB7 CisJCURVS19ERChEVUtfRERQUklOVCgidGltZXZhbCBub3Qgd2l0aGluIHZhbGlkIHJhbmdlLCBz a2lwIHR6b2Zmc2V0IGNvbXB1dGF0aW9uIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3dzIikpOwor CQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqICBUaGlzIGlzIGEgYml0IHRyaWNreSB0byBpbXBs ZW1lbnQgcG9ydGFibHkuICBUaGUgcmVzdWx0IGRlcGVuZHMKKwkgKiAgb24gdGhlIHRpbWVzdGFt cCAoc3BlY2lmaWNhbGx5LCBEU1QgZGVwZW5kcyBvbiB0aGUgdGltZXN0YW1wKS4KKwkgKiAgSWYg ZS5nLiBVTklYIEFQSXMgYXJlIHVzZWQsIHRoZXknbGwgaGF2ZSBwb3J0YWJpbGl0eSBpc3N1ZXMg d2l0aAorCSAqICB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdlIHllYXJzLgorCSAqCisJICogIEN1 cnJlbnQgYXBwcm9hY2g6CisJICoKKwkgKiAgLSBTdGF5IHdpdGhpbiBwb3J0YWJsZSBVTklYIGxp bWl0cyBieSB1c2luZyBlcXVpdmFsZW50IHllYXIgbWFwcGluZy4KKwkgKiAgICBBdm9pZCB5ZWFy IDE5NzAgYW5kIDIwMzggYXMgc29tZSBjb252ZXJzaW9ucyBzdGFydCB0byBmYWlsLCBhdAorCSAq ICAgIGxlYXN0IG9uIHNvbWUgcGxhdGZvcm1zLiAgQXZvaWRpbmcgMTk3MCBtZWFucyB0aGF0IHRo ZXJlIGFyZQorCSAqICAgIGN1cnJlbnRseSBEU1QgZGlzY3JlcGFuY2llcyBmb3IgMTk3MC4KKwkg KgorCSAqICAtIENyZWF0ZSBhIFVUQyBhbmQgbG9jYWwgdGltZSBicmVha2Rvd25zIGZyb20gJ3Qn LiAgVGhlbiBjcmVhdGUKKwkgKiAgICBhIHRpbWVfdCB1c2luZyBnbXRpbWUoKSBhbmQgbG9jYWx0 aW1lKCkgYW5kIGNvbXB1dGUgdGhlIHRpbWUKKwkgKiAgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhl IHR3by4KKwkgKgorCSAqICBFcXVpdmFsZW50IHllYXIgbWFwcGluZyAoRTUgU2VjdGlvbiAxNS45 LjEuOCk6CisJICoKKwkgKiAgICBJZiB0aGUgaG9zdCBlbnZpcm9ubWVudCBwcm92aWRlcyBmdW5j dGlvbmFsaXR5IGZvciBkZXRlcm1pbmluZworCSAqICAgIGRheWxpZ2h0IHNhdmluZyB0aW1lLCB0 aGUgaW1wbGVtZW50YXRpb24gb2YgRUNNQVNjcmlwdCBpcyBmcmVlCisJICogICAgdG8gbWFwIHRo ZSB5ZWFyIGluIHF1ZXN0aW9uIHRvIGFuIGVxdWl2YWxlbnQgeWVhciAoc2FtZQorCSAqICAgIGxl YXAteWVhci1uZXNzIGFuZCBzYW1lIHN0YXJ0aW5nIHdlZWsgZGF5IGZvciB0aGUgeWVhcikgZm9y IHdoaWNoCisJICogICAgdGhlIGhvc3QgZW52aXJvbm1lbnQgcHJvdmlkZXMgZGF5bGlnaHQgc2F2 aW5nIHRpbWUgaW5mb3JtYXRpb24uCisJICogICAgVGhlIG9ubHkgcmVzdHJpY3Rpb24gaXMgdGhh dCBhbGwgZXF1aXZhbGVudCB5ZWFycyBzaG91bGQgcHJvZHVjZQorCSAqICAgIHRoZSBzYW1lIHJl c3VsdC4KKwkgKgorCSAqICBUaGlzIGFwcHJvYWNoIGlzIHF1aXRlIHJlYXNvbmFibGUgYnV0IG5v dCBlbnRpcmVseSBjb3JyZWN0LCBlLmcuCisJICogIHRoZSBzcGVjaWZpY2F0aW9uIGFsc28gc3Rh dGVzIChFNSBTZWN0aW9uIDE1LjkuMS44KToKKwkgKgorCSAqICAgIFRoZSBpbXBsZW1lbnRhdGlv biBvZiBFQ01BU2NyaXB0IHNob3VsZCBub3QgdHJ5IHRvIGRldGVybWluZQorCSAqICAgIHdoZXRo ZXIgdGhlIGV4YWN0IHRpbWUgd2FzIHN1YmplY3QgdG8gZGF5bGlnaHQgc2F2aW5nIHRpbWUsIGJ1 dAorCSAqICAgIGp1c3Qgd2hldGhlciBkYXlsaWdodCBzYXZpbmcgdGltZSB3b3VsZCBoYXZlIGJl ZW4gaW4gZWZmZWN0IGlmCisJICogICAgdGhlIF9jdXJyZW50IGRheWxpZ2h0IHNhdmluZyB0aW1l IGFsZ29yaXRobV8gaGFkIGJlZW4gdXNlZCBhdCB0aGUKKwkgKiAgICB0aW1lLiAgVGhpcyBhdm9p ZHMgY29tcGxpY2F0aW9ucyBzdWNoIGFzIHRha2luZyBpbnRvIGFjY291bnQgdGhlCisJICogICAg eWVhcnMgdGhhdCB0aGUgbG9jYWxlIG9ic2VydmVkIGRheWxpZ2h0IHNhdmluZyB0aW1lIHllYXIg cm91bmQuCisJICoKKwkgKiAgU2luY2Ugd2UgcmVseSBvbiB0aGUgcGxhdGZvcm0gQVBJcyBmb3Ig Y29udmVyc2lvbnMgYmV0d2VlbiBsb2NhbAorCSAqICB0aW1lIGFuZCBVVEMsIHdlIGNhbid0IGd1 YXJhbnRlZSB0aGUgYWJvdmUuICBSYXRoZXIsIGlmIHRoZSBwbGF0Zm9ybQorCSAqICBoYXMgaGlz dG9yaWNhbCBEU1QgcnVsZXMgdGhleSB3aWxsIGJlIGFwcGxpZWQuICBUaGlzIHNlZW1zIHRvIGJl IHRoZQorCSAqICBnZW5lcmFsIHByZWZlcnJlZCBkaXJlY3Rpb24gaW4gRUNNQVNjcmlwdCBzdGFu ZGFyZGl6YXRpb24gKG9yIGF0IGxlYXN0CisJICogIGltcGxlbWVudGF0aW9ucykgYW55d2F5LCBh bmQgZXZlbiB0aGUgZXF1aXZhbGVudCB5ZWFyIG1hcHBpbmcgc2hvdWxkCisJICogIGJlIGRpc2Fi bGVkIGlmIHRoZSBwbGF0Zm9ybSBpcyBrbm93biB0byBoYW5kbGUgRFNUIHByb3Blcmx5IGZvciB0 aGUKKwkgKiAgZnVsbCBFQ01BU2NyaXB0IHJhbmdlLgorCSAqCisJICogIFRoZSBmb2xsb3dpbmcg aGFzIHVzZWZ1bCBkaXNjdXNzaW9uIGFuZCBsaW5rczoKKwkgKgorCSAqICAgIGh0dHBzOi8vYnVn emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM1MTA2NgorCSAqLworCisJZHVrX2Jp X2RhdGVfdGltZXZhbF90b19wYXJ0cyhkLCBwYXJ0cywgZHBhcnRzLCBEVUtfREFURV9GTEFHX0VR VUlWWUVBUiAvKmZsYWdzKi8pOworCURVS19BU1NFUlQocGFydHNbRFVLX0RBVEVfSURYX1lFQVJd ID49IDE5NzAgJiYgcGFydHNbRFVLX0RBVEVfSURYX1lFQVJdIDw9IDIwMzgpOworCisJZCA9IGR1 a19iaV9kYXRlX2dldF90aW1ldmFsX2Zyb21fZHBhcnRzKGRwYXJ0cywgMCAvKmZsYWdzKi8pOwor CURVS19BU1NFUlQoZCA+PSAwICYmIGQgPCAyMTQ3NDgzNjQ4LjAgKiAxMDAwLjApOyAgLyogdW5z aWduZWQgMzEtYml0IHJhbmdlICovCisJdCA9ICh0aW1lX3QpIChkIC8gMTAwMC4wKTsKKwlEVUtf REREKERVS19ERERQUklOVCgidGltZXZhbDogJWxmIC0+IHRpbWVfdCAlbGQiLCAoZG91YmxlKSBk LCAobG9uZykgdCkpOworCisJZHVrX21lbXplcm8oKHZvaWQgKikgdG1zLCBzaXplb2Yoc3RydWN0 IHRtKSAqIDIpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SKQorCSh2 b2lkKSBnbXRpbWVfcigmdCwgJnRtc1swXSk7CisJKHZvaWQpIGxvY2FsdGltZV9yKCZ0LCAmdG1z WzFdKTsKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9EQVRFX1RaT19HTVRJTUVfUykKKwkodm9pZCkg Z210aW1lX3MoJnQsICZ0bXNbMF0pOworCSh2b2lkKSBsb2NhbHRpbWVfcygmdCwgJnRtc1sxXSk7 CisjZWxpZiBkZWZpbmVkKERVS19VU0VfREFURV9UWk9fR01USU1FKQorCXRtX3B0ciA9IGdtdGlt ZSgmdCk7CisJZHVrX21lbWNweSgodm9pZCAqKSAmdG1zWzBdLCB0bV9wdHIsIHNpemVvZihzdHJ1 Y3QgdG0pKTsKKwl0bV9wdHIgPSBsb2NhbHRpbWUoJnQpOworCWR1a19tZW1jcHkoKHZvaWQgKikg JnRtc1sxXSwgdG1fcHRyLCBzaXplb2Yoc3RydWN0IHRtKSk7CisjZWxzZQorI2Vycm9yIGludGVy bmFsIGVycm9yCisjZW5kaWYKKwlEVUtfREREKERVS19ERERQUklOVCgiZ210aW1lIHJlc3VsdDog dG09e3NlYzolbGQsbWluOiVsZCxob3VyOiVsZCxtZGF5OiVsZCxtb246JWxkLHllYXI6JWxkLCIK KwkgICAgICAgICAgICAgICAgICAgICAid2RheTolbGQseWRheTolbGQsaXNkc3Q6JWxkfSIsCisJ ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHRtc1swXS50bV9zZWMsIChsb25nKSB0bXNbMF0u dG1fbWluLCAobG9uZykgdG1zWzBdLnRtX2hvdXIsCisJICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHRtc1swXS50bV9tZGF5LCAobG9uZykgdG1zWzBdLnRtX21vbiwgKGxvbmcpIHRtc1swXS50 bV95ZWFyLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSB0bXNbMF0udG1fd2RheSwgKGxv bmcpIHRtc1swXS50bV95ZGF5LCAobG9uZykgdG1zWzBdLnRtX2lzZHN0KSk7CisJRFVLX0RERChE VUtfREREUFJJTlQoImxvY2FsdGltZSByZXN1bHQ6IHRtPXtzZWM6JWxkLG1pbjolbGQsaG91cjol bGQsbWRheTolbGQsbW9uOiVsZCx5ZWFyOiVsZCwiCisJICAgICAgICAgICAgICAgICAgICAgIndk YXk6JWxkLHlkYXk6JWxkLGlzZHN0OiVsZH0iLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSB0bXNbMV0udG1fc2VjLCAobG9uZykgdG1zWzFdLnRtX21pbiwgKGxvbmcpIHRtc1sxXS50bV9o b3VyLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSB0bXNbMV0udG1fbWRheSwgKGxvbmcp IHRtc1sxXS50bV9tb24sIChsb25nKSB0bXNbMV0udG1feWVhciwKKwkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgdG1zWzFdLnRtX3dkYXksIChsb25nKSB0bXNbMV0udG1feWRheSwgKGxvbmcp IHRtc1sxXS50bV9pc2RzdCkpOworCisJLyogdG1faXNkc3QgaXMgYm90aCBhbiBpbnB1dCBhbmQg YW4gb3V0cHV0IHRvIG1rdGltZSgpLCB1c2UgMCB0bworCSAqIGF2b2lkIERTVCBoYW5kbGluZyBp biBta3RpbWUoKToKKwkgKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9zdmFhcmFsYS9kdWt0YXBlL2lz c3Vlcy80MDYKKwkgKiAtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODU1ODkx OS9ta3RpbWUtYW5kLXRtLWlzZHN0CisJICovCisJdG1zWzBdLnRtX2lzZHN0ID0gMDsKKwl0bXNb MV0udG1faXNkc3QgPSAwOworCXQxID0gbWt0aW1lKCZ0bXNbMF0pOyAgLyogVVRDICovCisJdDIg PSBta3RpbWUoJnRtc1sxXSk7ICAvKiBsb2NhbCAqLworCWlmICh0MSA9PSAodGltZV90KSAtMSB8 fCB0MiA9PSAodGltZV90KSAtMSkgeworCQkvKiBUaGlzIGNoZWNrIHVzZWQgdG8gYmUgZm9yICh0 IDwgMCkgYnV0IG9uIHNvbWUgcGxhdGZvcm1zCisJCSAqIHRpbWVfdCBpcyB1bnNpZ25lZCBhbmQg YXBwYXJlbnRseSB0aGUgcHJvcGVyIHdheSB0byBkZXRlY3QKKwkJICogYW4gbWt0aW1lKCkgZXJy b3IgcmV0dXJuIGlzIHRoZSBjYXN0IGFib3ZlLiAgU2VlIGUuZy46CisJCSAqIGh0dHA6Ly9wdWJz Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUyOTkvZnVuY3Rpb25zL21rdGltZS5odG1s CisJCSAqLworCQlnb3RvIG1rdGltZV9lcnJvcjsKKwl9CisJRFVLX0RERChEVUtfREREUFJJTlQo InQxPSVsZCAodXRjKSwgdDI9JWxkIChsb2NhbCkiLCAobG9uZykgdDEsIChsb25nKSB0MikpOwor CisJLyogQ29tcHV0ZSBmaW5hbCBvZmZzZXQgaW4gc2Vjb25kcywgcG9zaXRpdmUgaWYgbG9jYWwg dGltZSBhaGVhZCBvZgorCSAqIFVUQyAocmV0dXJuZWQgdmFsdWUgaXMgVVRDLXRvLWxvY2FsIG9m ZnNldCkuCisJICoKKwkgKiBkaWZmdGltZSgpIHJldHVybnMgYSBkb3VibGUsIHNvIGNvZXJjaW9u IHRvIGludCBnZW5lcmF0ZXMgcXVpdGUKKwkgKiBhIGxvdCBvZiBjb2RlLiAgRGlyZWN0IHN1YnRy YWN0aW9uIGlzIG5vdCBwb3J0YWJsZSwgaG93ZXZlci4KKwkgKiBYWFg6IGFsbG93IGRpcmVjdCBz dWJ0cmFjdGlvbiBvbiBrbm93biBwbGF0Zm9ybXMuCisJICovCisjaWYgMAorCXJldHVybiAoZHVr X2ludF90KSAodDIgLSB0MSk7CisjZW5kaWYKKwlyZXR1cm4gKGR1a19pbnRfdCkgZGlmZnRpbWUo dDIsIHQxKTsKKworIG1rdGltZV9lcnJvcjoKKwkvKiBYWFg6IHJldHVybiBzb21ldGhpbmcgbW9y ZSB1c2VmdWwsIHNvIHRoYXQgY2FsbGVyIGNhbiB0aHJvdz8gKi8KKwlEVUtfRChEVUtfRFBSSU5U KCJta3RpbWUoKSBmYWlsZWQsIGQ9JWxmIiwgKGRvdWJsZSkgZCkpOworCXJldHVybiAwOworfQor I2VuZGlmICAvKiBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRSAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX0RBVEVfUFJTX1NUUlBUSU1FKQorRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2JpX2Rh dGVfcGFyc2Vfc3RyaW5nX3N0cnB0aW1lKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKnN0 cikgeworCXN0cnVjdCB0bSB0bTsKKwl0aW1lX3QgdDsKKwljaGFyIGJ1ZltEVUtfX1NUUlBUSU1F X0JVRl9TSVpFXTsKKworCS8qIENvcHkgdG8gYnVmZmVyIHdpdGggc2xhY2sgdG8gYXZvaWQgVmFs Z3JpbmQgZ3JpcGVzIGZyb20gc3RycHRpbWUuICovCisJRFVLX0FTU0VSVChzdHIgIT0gTlVMTCk7 CisJZHVrX21lbXplcm8oYnVmLCBzaXplb2YoYnVmKSk7ICAvKiB2YWxncmluZCB3aGluZSB3aXRo b3V0IHRoaXMgKi8KKwlEVUtfU05QUklOVEYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgKGNvbnN0 IGNoYXIgKikgc3RyKTsKKwlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IChjaGFyKSAwOworCisJRFVL X0RERChEVUtfREREUFJJTlQoInBhcnNpbmc6ICclcyciLCAoY29uc3QgY2hhciAqKSBidWYpKTsK KworCWR1a19tZW16ZXJvKCZ0bSwgc2l6ZW9mKHRtKSk7CisJaWYgKHN0cnB0aW1lKChjb25zdCBj aGFyICopIGJ1ZiwgIiVjIiwgJnRtKSAhPSBOVUxMKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5U KCJiZWZvcmUgbWt0aW1lOiB0bT17c2VjOiVsZCxtaW46JWxkLGhvdXI6JWxkLG1kYXk6JWxkLG1v bjolbGQseWVhcjolbGQsIgorCQkgICAgICAgICAgICAgICAgICAgICAid2RheTolbGQseWRheTol bGQsaXNkc3Q6JWxkfSIsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSB0bS50bV9zZWMs IChsb25nKSB0bS50bV9taW4sIChsb25nKSB0bS50bV9ob3VyLAorCQkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgdG0udG1fbWRheSwgKGxvbmcpIHRtLnRtX21vbiwgKGxvbmcpIHRtLnRtX3ll YXIsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSB0bS50bV93ZGF5LCAobG9uZykgdG0u dG1feWRheSwgKGxvbmcpIHRtLnRtX2lzZHN0KSk7CisJCXRtLnRtX2lzZHN0ID0gLTE7ICAvKiBu ZWdhdGl2ZTogZHN0IGluZm8gbm90IGF2YWlsYWJsZSAqLworCisJCXQgPSBta3RpbWUoJnRtKTsK KwkJRFVLX0RERChEVUtfREREUFJJTlQoIm1rdGltZSgpIC0+ICVsZCIsIChsb25nKSB0KSk7CisJ CWlmICh0ID49IDApIHsKKwkJCWR1a19wdXNoX251bWJlcih0aHIsICgoZHVrX2RvdWJsZV90KSB0 KSAqIDEwMDAuMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2Vu ZGlmICAvKiBEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfREFURV9QUlNfR0VUREFURSkKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19iaV9kYXRl X3BhcnNlX3N0cmluZ19nZXRkYXRlKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKnN0cikg eworCXN0cnVjdCB0bSB0bTsKKwlkdWtfc21hbGxfaW50X3QgcmM7CisJdGltZV90IHQ7CisKKwkv KiBGb3IgdGhpcyB0byB3b3JrLCBEQVRFTVNLIG11c3QgYmUgc2V0LCBzbyB0aGlzIGlzIG5vdCB2 ZXJ5CisJICogY29udmVuaWVudCBmb3IgYW4gZW1iZWRkYWJsZSBpbnRlcnByZXRlci4KKwkgKi8K KworCWR1a19tZW16ZXJvKCZ0bSwgc2l6ZW9mKHN0cnVjdCB0bSkpOworCXJjID0gKGR1a19zbWFs bF9pbnRfdCkgZ2V0ZGF0ZV9yKHN0ciwgJnRtKTsKKwlEVUtfREREKERVS19ERERQUklOVCgiZ2V0 ZGF0ZV9yKCkgLT4gJWxkIiwgKGxvbmcpIHJjKSk7CisKKwlpZiAocmMgPT0gMCkgeworCQl0ID0g bWt0aW1lKCZ0bSk7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJta3RpbWUoKSAtPiAlbGQiLCAo bG9uZykgdCkpOworCQlpZiAodCA+PSAwKSB7CisJCQlkdWtfcHVzaF9udW1iZXIodGhyLCAoZHVr X2RvdWJsZV90KSB0KTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9Cisj ZW5kaWYgIC8qIERVS19VU0VfREFURV9QUlNfR0VUREFURSAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX0RBVEVfRk1UX1NUUkZUSU1FKQorRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2JpX2Rh dGVfZm9ybWF0X3BhcnRzX3N0cmZ0aW1lKGR1a19odGhyZWFkICp0aHIsIGR1a19pbnRfdCAqcGFy dHMsIGR1a19pbnRfdCB0em9mZnNldCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgeworCWNoYXIg YnVmW0RVS19fU1RSRlRJTUVfQlVGX1NJWkVdOworCXN0cnVjdCB0bSB0bTsKKwljb25zdCBjaGFy ICpmbXQ7CisKKwlEVUtfVU5SRUYodHpvZmZzZXQpOworCisJLyogSWYgdGhlIHBsYXRmb3JtIGRv ZXNuJ3Qgc3VwcG9ydCB0aGUgZW50aXJlIEVDTUFTY3JpcHQgcmFuZ2UsIHdlIG5lZWQKKwkgKiB0 byByZXR1cm4gMCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGZhbGwgYmFjayB0byB0aGUgZGVmYXVs dCBmb3JtYXR0ZXIuCisJICoKKwkgKiBGb3Igbm93LCBhc3N1bWUgdGhhdCBpZiB0aW1lX3QgaXMg OCBieXRlcyBvciBtb3JlLCB0aGUgd2hvbGUgRUNNQVNjcmlwdAorCSAqIHJhbmdlIGlzIHN1cHBv cnRlZC4gIEZvciBzbWFsbGVyIHRpbWVfdCB2YWx1ZXMgKDQgYnl0ZXMgaW4gcHJhY3RpY2UpLAor CSAqIGFzc3VtZXMgdGhhdCB0aGUgc2lnbmVkIDMyLWJpdCByYW5nZSBpcyBzdXBwb3J0ZWQuCisJ ICoKKwkgKiBYWFg6IGRldGVjdCB0aGlzIG1vcmUgY29ycmVjdGx5IHBlciBwbGF0Zm9ybS4gIFRo ZSBzaXplIG9mIHRpbWVfdCBpcworCSAqIHByb2JhYmx5IG5vdCBhbiBhY2N1cmF0ZSBndWFyYW50 ZWUgb2Ygc3RyZnRpbWUoKSBzdXBwb3J0aW5nIG9yIG5vdAorCSAqIHN1cHBvcnRpbmcgYSBsYXJn ZSB0aW1lIHJhbmdlICh0aGUgZnVsbCBFQ01BU2NyaXB0IHJhbmdlKS4KKwkgKi8KKwlpZiAoc2l6 ZW9mKHRpbWVfdCkgPCA4ICYmCisJICAgIChwYXJ0c1tEVUtfREFURV9JRFhfWUVBUl0gPCAxOTcw IHx8IHBhcnRzW0RVS19EQVRFX0lEWF9ZRUFSXSA+IDIwMzcpKSB7CisJCS8qIGJlIHBhcmFub2lk IGZvciAzMi1iaXQgdGltZSB2YWx1ZXMgKGV2ZW4gYXZvaWRpbmcgbmVnYXRpdmUgb25lcykgKi8K KwkJcmV0dXJuIDA7CisJfQorCisJZHVrX21lbXplcm8oJnRtLCBzaXplb2YodG0pKTsKKwl0bS50 bV9zZWMgPSBwYXJ0c1tEVUtfREFURV9JRFhfU0VDT05EXTsKKwl0bS50bV9taW4gPSBwYXJ0c1tE VUtfREFURV9JRFhfTUlOVVRFXTsKKwl0bS50bV9ob3VyID0gcGFydHNbRFVLX0RBVEVfSURYX0hP VVJdOworCXRtLnRtX21kYXkgPSBwYXJ0c1tEVUtfREFURV9JRFhfREFZXTsgICAgICAgLyogYWxy ZWFkeSBvbmUtYmFzZWQgKi8KKwl0bS50bV9tb24gPSBwYXJ0c1tEVUtfREFURV9JRFhfTU9OVEhd IC0gMTsgIC8qIG9uZS1iYXNlZCAtPiB6ZXJvLWJhc2VkICovCisJdG0udG1feWVhciA9IHBhcnRz W0RVS19EQVRFX0lEWF9ZRUFSXSAtIDE5MDA7CisJdG0udG1fd2RheSA9IHBhcnRzW0RVS19EQVRF X0lEWF9XRUVLREFZXTsKKwl0bS50bV9pc2RzdCA9IDA7CisKKwlkdWtfbWVtemVybyhidWYsIHNp emVvZihidWYpKTsKKwlpZiAoKGZsYWdzICYgRFVLX0RBVEVfRkxBR19UT1NUUklOR19EQVRFKSAm JiAoZmxhZ3MgJiBEVUtfREFURV9GTEFHX1RPU1RSSU5HX1RJTUUpKSB7CisJCWZtdCA9ICIlYyI7 CisJfSBlbHNlIGlmIChmbGFncyAmIERVS19EQVRFX0ZMQUdfVE9TVFJJTkdfREFURSkgeworCQlm bXQgPSAiJXgiOworCX0gZWxzZSB7CisJCURVS19BU1NFUlQoZmxhZ3MgJiBEVUtfREFURV9GTEFH X1RPU1RSSU5HX1RJTUUpOworCQlmbXQgPSAiJVgiOworCX0KKwkodm9pZCkgc3RyZnRpbWUoYnVm LCBzaXplb2YoYnVmKSAtIDEsIGZtdCwgJnRtKTsKKwlEVUtfQVNTRVJUKGJ1ZltzaXplb2YoYnVm KSAtIDFdID09IDApOworCisJZHVrX3B1c2hfc3RyaW5nKHRociwgYnVmKTsKKwlyZXR1cm4gMTsK K30KKyNlbmRpZiAgLyogRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElNRSAqLworCisjaWYgZGVmaW5l ZChEVUtfVVNFX0dFVF9NT05PVE9OSUNfVElNRV9DTE9DS19HRVRUSU1FKQorRFVLX0lOVEVSTkFM IGR1a19kb3VibGVfdCBkdWtfYmlfZGF0ZV9nZXRfbW9ub3RvbmljX3RpbWVfY2xvY2tfZ2V0dGlt ZSh2b2lkKSB7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJaWYgKGNsb2NrX2dldHRpbWUoQ0xP Q0tfTU9OT1RPTklDLCAmdHMpID09IDApIHsKKwkJcmV0dXJuIChkdWtfZG91YmxlX3QpIHRzLnR2 X3NlYyAqIDEwMDAuMCArIChkdWtfZG91YmxlX3QpIHRzLnR2X25zZWMgLyAxMDAwMDAwLjA7CisJ fSBlbHNlIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9O SUMpIGZhaWxlZCIpKTsKKwkJcmV0dXJuIDAuMDsKKwl9Cit9CisjZW5kaWYKKworLyogYXV0b21h dGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fU1RSRlRJTUVfQlVGX1NJWkUKKyN1bmRlZiBEVUtf X1NUUlBUSU1FX0JVRl9TSVpFCisvKgorICogIFdpbmRvd3MgRGF0ZSBwcm92aWRlcnMKKyAqCisg KiAgUGxhdGZvcm0gc3BlY2lmaWMgbGlua3M6CisgKgorICogICAgLSBodHRwOi8vbXNkbi5taWNy b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNzI1NDczKHY9dnMuODUp LmFzcHgKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1 ZGVkICovCisKKy8qIFRoZSBuZWNlc3NhcnkgI2luY2x1ZGVzIGFyZSBpbiBwbGFjZSBpbiBkdWtf Y29uZmlnLmguICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREFURV9OT1dfV0lORE9XUykgfHwg ZGVmaW5lZChEVUtfVVNFX0RBVEVfVFpPX1dJTkRPV1MpCisvKiBTaGFyZWQgV2luZG93cyBoZWxw ZXJzLiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19jb252ZXJ0X3N5c3RpbWVfdG9fdWxhcmdlKGNv bnN0IFNZU1RFTVRJTUUgKnN0LCBVTEFSR0VfSU5URUdFUiAqcmVzKSB7CisJRklMRVRJTUUgZnQ7 CisJaWYgKFN5c3RlbVRpbWVUb0ZpbGVUaW1lKHN0LCAmZnQpID09IDApIHsKKwkJRFVLX0QoRFVL X0RQUklOVCgiU3lzdGVtVGltZVRvRmlsZVRpbWUoKSBmYWlsZWQsIHJldHVybmluZyAwIikpOwor CQlyZXMtPlF1YWRQYXJ0ID0gMDsKKwl9IGVsc2UgeworCQlyZXMtPkxvd1BhcnQgPSBmdC5kd0xv d0RhdGVUaW1lOworCQlyZXMtPkhpZ2hQYXJ0ID0gZnQuZHdIaWdoRGF0ZVRpbWU7CisJfQorfQor CisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1dJTkRPV1NfU1VCTVMpCitEVUtfTE9DQUwg dm9pZCBkdWtfX2NvbnZlcnRfZmlsZXRpbWVfdG9fdWxhcmdlKGNvbnN0IEZJTEVUSU1FICpmdCwg VUxBUkdFX0lOVEVHRVIgKnJlcykgeworCXJlcy0+TG93UGFydCA9IGZ0LT5kd0xvd0RhdGVUaW1l OworCXJlcy0+SGlnaFBhcnQgPSBmdC0+ZHdIaWdoRGF0ZVRpbWU7Cit9CisjZW5kaWYgIC8qIERV S19VU0VfREFURV9OT1dfV0lORE9XU19TVUJNUyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX3Nl dF9zeXN0aW1lX2phbjE5NzAoU1lTVEVNVElNRSAqc3QpIHsKKwlkdWtfbWVtemVybygodm9pZCAq KSBzdCwgc2l6ZW9mKCpzdCkpOworCXN0LT53WWVhciA9IDE5NzA7CisJc3QtPndNb250aCA9IDE7 CisJc3QtPndEYXlPZldlZWsgPSA0OyAgLyogbm90IHN1cmUgd2hldGhlciBvciBub3QgbmVlZGVk OyBUaHVyc2RheSAqLworCXN0LT53RGF5ID0gMTsKKwlEVUtfQVNTRVJUKHN0LT53SG91ciA9PSAw KTsKKwlEVUtfQVNTRVJUKHN0LT53TWludXRlID09IDApOworCURVS19BU1NFUlQoc3QtPndTZWNv bmQgPT0gMCk7CisJRFVLX0FTU0VSVChzdC0+d01pbGxpc2Vjb25kcyA9PSAwKTsKK30KKyNlbmRp ZiAgLyogZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1dJTkRPV1MpIHx8IGRlZmluZWQoRFVLX1VT RV9EQVRFX1RaT19XSU5ET1dTKSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1dJ TkRPV1MpCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1a19iaV9kYXRlX2dldF9ub3dfd2lu ZG93cyh2b2lkKSB7CisJLyogU3VnZ2VzdGVkIHN0ZXAtYnktc3RlcCBtZXRob2QgZnJvbSBkb2N1 bWVudGF0aW9uIG9mIFJ0bFRpbWVUb1NlY29uZHNTaW5jZTE5NzA6CisJICogaHR0cDovL21zZG4u bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczcyNDkyOCh2PXZz Ljg1KS5hc3B4CisJICovCisJU1lTVEVNVElNRSBzdDEsIHN0MjsKKwlVTEFSR0VfSU5URUdFUiB0 bXAxLCB0bXAyOworCisJR2V0U3lzdGVtVGltZSgmc3QxKTsKKwlkdWtfX2NvbnZlcnRfc3lzdGlt ZV90b191bGFyZ2UoKGNvbnN0IFNZU1RFTVRJTUUgKikgJnN0MSwgJnRtcDEpOworCisJZHVrX19z ZXRfc3lzdGltZV9qYW4xOTcwKCZzdDIpOworCWR1a19fY29udmVydF9zeXN0aW1lX3RvX3VsYXJn ZSgoY29uc3QgU1lTVEVNVElNRSAqKSAmc3QyLCAmdG1wMik7CisKKwkvKiBEaWZmZXJlbmNlIGlz IGluIDEwMG5zIHVuaXRzLCBjb252ZXJ0IHRvIG1pbGxpc2Vjb25kcywga2VlcGluZworCSAqIGZy YWN0aW9ucyBzaW5jZSBEdWt0YXBlIDIuMi4wLiAgVGhpcyBpcyBvbmx5IHRoZW9yZXRpY2FsIGJl Y2F1c2UKKwkgKiBTWVNURU1USU1FIGlzIGxpbWl0ZWQgdG8gbWlsbGlzZWNvbmRzLgorCSAqLwor CXJldHVybiAoZHVrX2RvdWJsZV90KSAoKExPTkdMT05HKSB0bXAxLlF1YWRQYXJ0IC0gKExPTkdM T05HKSB0bXAyLlF1YWRQYXJ0KSAvIDEwMDAwLjA7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREFU RV9OT1dfV0lORE9XUyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfTk9XX1dJTkRPV1Nf U1VCTVMpCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1a19iaV9kYXRlX2dldF9ub3dfd2lu ZG93c19zdWJtcyh2b2lkKSB7CisJLyogVmFyaWFudCBvZiB0aGUgYmFzaWMgYWxnb3JpdGhtIHVz aW5nIEdldFN5c3RlbVRpbWVQcmVjaXNlQXNGaWxlVGltZSgpCisJICogZm9yIG1vcmUgYWNjdXJh Y3kuCisJICovCisJRklMRVRJTUUgZnQxOworCVNZU1RFTVRJTUUgc3QyOworCVVMQVJHRV9JTlRF R0VSIHRtcDEsIHRtcDI7CisKKwlHZXRTeXN0ZW1UaW1lUHJlY2lzZUFzRmlsZVRpbWUoJmZ0MSk7 CisJZHVrX19jb252ZXJ0X2ZpbGV0aW1lX3RvX3VsYXJnZSgoY29uc3QgRklMRVRJTUUgKikgJmZ0 MSwgJnRtcDEpOworCisJZHVrX19zZXRfc3lzdGltZV9qYW4xOTcwKCZzdDIpOworCWR1a19fY29u dmVydF9zeXN0aW1lX3RvX3VsYXJnZSgoY29uc3QgU1lTVEVNVElNRSAqKSAmc3QyLCAmdG1wMik7 CisKKwkvKiBEaWZmZXJlbmNlIGlzIGluIDEwMG5zIHVuaXRzLCBjb252ZXJ0IHRvIG1pbGxpc2Vj b25kcywga2VlcGluZworCSAqIGZyYWN0aW9ucyBzaW5jZSBEdWt0YXBlIDIuMi4wLgorCSAqLwor CXJldHVybiAoZHVrX2RvdWJsZV90KSAoKExPTkdMT05HKSB0bXAxLlF1YWRQYXJ0IC0gKExPTkdM T05HKSB0bXAyLlF1YWRQYXJ0KSAvIDEwMDAwLjA7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREFU RV9OT1dfV0lORE9XUyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfVFpPX1dJTkRPV1Mp CitEVUtfSU5URVJOQUwgZHVrX2ludF90IGR1a19iaV9kYXRlX2dldF9sb2NhbF90em9mZnNldF93 aW5kb3dzKGR1a19kb3VibGVfdCBkKSB7CisJU1lTVEVNVElNRSBzdDE7CisJU1lTVEVNVElNRSBz dDI7CisJU1lTVEVNVElNRSBzdDM7CisJVUxBUkdFX0lOVEVHRVIgdG1wMTsKKwlVTEFSR0VfSU5U RUdFUiB0bXAyOworCVVMQVJHRV9JTlRFR0VSIHRtcDM7CisJRklMRVRJTUUgZnQxOworCisJLyog WFhYOiBoYW5kbGluZyBvZiB0aW1lc3RhbXBzIG91dHNpZGUgV2luZG93cyBzdXBwb3J0ZWQgcmFu Z2UuCisJICogSG93IGRvZXMgV2luZG93cyBkZWFsIHdpdGggZGF0ZXMgYmVmb3JlIDE2MDA/ICBE b2VzIHdpbmRvd3MKKwkgKiBzdXBwb3J0IGFsbCBFQ01BU2NyaXB0IHllYXJzIChsaWtlIC0yMDAw MDAgYW5kICsyMDAwMDApPworCSAqIFNob3VsZCBlcXVpdmFsZW50IHllYXIgbWFwcGluZyBiZSB1 c2VkIGhlcmUgdG9vPyAgSWYgc28sIHVzZQorCSAqIGEgc2hhcmVkIGhlbHBlciAoY3VycmVudGx5 IGludGVncmF0ZWQgaW50byB0aW1ldmFsLXRvLXBhcnRzKS4KKwkgKi8KKworCS8qIFVzZSB0aGUg YXBwcm9hY2ggZGVzY3JpYmVkIGluICJSZW1hcmtzIiBvZiBGaWxlVGltZVRvTG9jYWxGaWxlVGlt ZToKKwkgKiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9k ZXNrdG9wL21zNzI0Mjc3KHY9dnMuODUpLmFzcHgKKwkgKi8KKworCWR1a19fc2V0X3N5c3RpbWVf amFuMTk3MCgmc3QxKTsKKwlkdWtfX2NvbnZlcnRfc3lzdGltZV90b191bGFyZ2UoKGNvbnN0IFNZ U1RFTVRJTUUgKikgJnN0MSwgJnRtcDEpOworCXRtcDIuUXVhZFBhcnQgPSAoVUxPTkdMT05HKSAo ZCAqIDEwMDAwLjApOyAgLyogbWlsbGlzZWMgLT4gMTAwbnMgdW5pdHMgc2luY2UgamFuIDEsIDE5 NzAgKi8KKwl0bXAyLlF1YWRQYXJ0ICs9IHRtcDEuUXVhZFBhcnQ7ICAgICAgICAgICAgIC8qIGlu cHV0ICdkJyBpbiBXaW5kb3dzIFVUQywgMTAwbnMgdW5pdHMgKi8KKworCWZ0MS5kd0xvd0RhdGVU aW1lID0gdG1wMi5Mb3dQYXJ0OworCWZ0MS5kd0hpZ2hEYXRlVGltZSA9IHRtcDIuSGlnaFBhcnQ7 CisJaWYgKEZpbGVUaW1lVG9TeXN0ZW1UaW1lKChjb25zdCBGSUxFVElNRSAqKSAmZnQxLCAmc3Qy KSA9PSAwKSB7CisJCURVS19EKERVS19EUFJJTlQoIkZpbGVUaW1lVG9TeXN0ZW1UaW1lKCkgZmFp bGVkLCByZXR1cm4gdHpvZmZzZXQgMCIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChTeXN0ZW1U aW1lVG9UelNwZWNpZmljTG9jYWxUaW1lKChMUFRJTUVfWk9ORV9JTkZPUk1BVElPTikgTlVMTCwg JnN0MiwgJnN0MykgPT0gMCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJTeXN0ZW1UaW1lVG9UelNw ZWNpZmljTG9jYWxUaW1lKCkgZmFpbGVkLCByZXR1cm4gdHpvZmZzZXQgMCIpKTsKKwkJcmV0dXJu IDA7CisJfQorCWR1a19fY29udmVydF9zeXN0aW1lX3RvX3VsYXJnZSgoY29uc3QgU1lTVEVNVElN RSAqKSAmc3QzLCAmdG1wMyk7CisKKwkvKiBQb3NpdGl2ZSBpZiBsb2NhbCB0aW1lIGFoZWFkIG9m IFVUQy4gKi8KKwlyZXR1cm4gKGR1a19pbnRfdCkgKCgoTE9OR0xPTkcpIHRtcDMuUXVhZFBhcnQg LSAoTE9OR0xPTkcpIHRtcDIuUXVhZFBhcnQpIC8gRFVLX0k2NF9DT05TVEFOVCgxMDAwMDAwMCkp OyAgLyogc2Vjb25kcyAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX0RBVEVfVFpPX1dJTkRPV1Mg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9EQVRFX1RaT19XSU5ET1dTX05PX0RTVCkKK0RVS19J TlRFUk5BTCBkdWtfaW50X3QgZHVrX2JpX2RhdGVfZ2V0X2xvY2FsX3R6b2Zmc2V0X3dpbmRvd3Nf bm9fZHN0KGR1a19kb3VibGVfdCBkKSB7CisJU1lTVEVNVElNRSBzdDE7CisJU1lTVEVNVElNRSBz dDI7CisJRklMRVRJTUUgZnQxOworCUZJTEVUSU1FIGZ0MjsKKwlVTEFSR0VfSU5URUdFUiB0bXAx OworCVVMQVJHRV9JTlRFR0VSIHRtcDI7CisKKwkvKiBEbyBhIHNpbWlsYXIgY29tcHV0YXRpb24g dG8gZHVrX2JpX2RhdGVfZ2V0X2xvY2FsX3R6b2Zmc2V0X3dpbmRvd3MKKwkgKiBidXQgd2l0aG91 dCBhY2NvdW50aW5nIGZvciBkYXlsaWdodCBzYXZpbmdzIHRpbWUuICBVc2UgdGhpcyBvbgorCSAq IFdpbmRvd3MgcGxhdGZvcm1zIChsaWtlIER1cmFuZ28pIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUK KwkgKiBTeXN0ZW1UaW1lVG9UelNwZWNpZmljTG9jYWxUaW1lKCkgY2FsbC4KKwkgKi8KKworCS8q IGN1cnJlbnQgdGltZSBub3QgbmVlZGVkIGZvciB0aGlzIGNvbXB1dGF0aW9uICovCisJRFVLX1VO UkVGKGQpOworCisJZHVrX19zZXRfc3lzdGltZV9qYW4xOTcwKCZzdDEpOworCWR1a19fY29udmVy dF9zeXN0aW1lX3RvX3VsYXJnZSgoY29uc3QgU1lTVEVNVElNRSAqKSAmc3QxLCAmdG1wMSk7CisK KwlmdDEuZHdMb3dEYXRlVGltZSA9IHRtcDEuTG93UGFydDsKKwlmdDEuZHdIaWdoRGF0ZVRpbWUg PSB0bXAxLkhpZ2hQYXJ0OworCWlmIChGaWxlVGltZVRvTG9jYWxGaWxlVGltZSgoY29uc3QgRklM RVRJTUUgKikgJmZ0MSwgJmZ0MikgPT0gMCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJGaWxlVGlt ZVRvTG9jYWxGaWxlVGltZSgpIGZhaWxlZCwgcmV0dXJuIHR6b2Zmc2V0IDAiKSk7CisJCXJldHVy biAwOworCX0KKwlpZiAoRmlsZVRpbWVUb1N5c3RlbVRpbWUoKGNvbnN0IEZJTEVUSU1FICopICZm dDIsICZzdDIpID09IDApIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiRmlsZVRpbWVUb1N5c3RlbVRp bWUoKSBmYWlsZWQsIHJldHVybiB0em9mZnNldCAwIikpOworCQlyZXR1cm4gMDsKKwl9CisJZHVr X19jb252ZXJ0X3N5c3RpbWVfdG9fdWxhcmdlKChjb25zdCBTWVNURU1USU1FICopICZzdDIsICZ0 bXAyKTsKKworCXJldHVybiAoZHVrX2ludF90KSAoKChMT05HTE9ORykgdG1wMi5RdWFkUGFydCAt IChMT05HTE9ORykgdG1wMS5RdWFkUGFydCkgLyBEVUtfSTY0X0NPTlNUQU5UKDEwMDAwMDAwKSk7 ICAvKiBzZWNvbmRzICovCit9CisjZW5kaWYgIC8qIERVS19VU0VfREFURV9UWk9fV0lORE9XU19O T19EU1QgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9HRVRfTU9OT1RPTklDX1RJTUVfV0lORE9X U19RUEMpCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1a19iaV9kYXRlX2dldF9tb25vdG9u aWNfdGltZV93aW5kb3dzX3FwYyh2b2lkKSB7CisJTEFSR0VfSU5URUdFUiBjb3VudCwgZnJlcTsK KworCS8qIFRoZXJlIGFyZSBsZWdhY3kgaXNzdWVzIHdpdGggUXVlcnlQZXJmb3JtYW5jZUNvdW50 ZXIoKToKKwkgKiAtIFBvdGVudGlhbCBqdW1wczogaHR0cHM6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5j b20vZW4tdXMvaGVscC8yNzQzMjMvcGVyZm9ybWFuY2UtY291bnRlci12YWx1ZS1tYXktdW5leHBl Y3RlZGx5LWxlYXAtZm9yd2FyZAorCSAqIC0gRGlmZmVyZW5jZXMgYmV0d2VlbiBjb3JlcyAoWFAp OiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3Rv cC9kbjU1MzQwOCh2PXZzLjg1KS5hc3B4I3FwY19zdXBwb3J0X2luX3dpbmRvd3NfdmVyc2lvbnMK KwkgKgorCSAqIFdlIGF2b2lkIHRoZXNlIGJ5IGVuYWJsaW5nIFFQQyBieSBkZWZhdWx0IG9ubHkg Zm9yIFZpc3RhIG9yIGxhdGVyLgorCSAqLworCisJaWYgKFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVy KCZjb3VudCkgJiYgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgmZnJlcSkpIHsKKwkJLyogWFhY OiBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCkgY2FuIGJlIGNhY2hlZCAqLworCQlyZXR1cm4g KGR1a19kb3VibGVfdCkgY291bnQuUXVhZFBhcnQgLyAoZHVrX2RvdWJsZV90KSBmcmVxLlF1YWRQ YXJ0ICogMTAwMC4wOworCX0gZWxzZSB7CisJCS8qIE1TRE46ICJPbiBzeXN0ZW1zIHRoYXQgcnVu IFdpbmRvd3MgWFAgb3IgbGF0ZXIsIHRoZSBmdW5jdGlvbgorCQkgKiB3aWxsIGFsd2F5cyBzdWNj ZWVkIGFuZCB3aWxsIHRodXMgbmV2ZXIgcmV0dXJuIHplcm8uIgorCQkgKiBQcm92aWRlIG1pbmlt YWwgZXJyb3IgcGF0aCBqdXN0IGluIGNhc2UgdXNlciBlbmFibGVzIHRoaXMKKwkJICogZmVhdHVy ZSBpbiBwcmUtWFAgV2luZG93cy4KKwkJICovCisJCXJldHVybiAwLjA7CisJfQorfQorI2VuZGlm ICAvKiBEVUtfVVNFX0dFVF9NT05PVE9OSUNfVElNRV9XSU5ET1dTX1FQQyAqLworLyoKKyAqICBE dWt0YXBlIGJ1aWx0LWlucworICoKKyAqICBTaXplIG9wdGltaXphdGlvbiBub3RlOiBpdCBtaWdo dCBzZWVtIHRoYXQgdmFyYXJnIG11bHRpcHVycG9zZSBmdW5jdGlvbnMKKyAqICBsaWtlIGZpbigp LCBlbmMoKSwgYW5kIGRlYygpIGFyZSBub3QgdmVyeSBzaXplIG9wdGltYWwsIGJ1dCB1c2luZyBh IHNpbmdsZQorICogIHVzZXItdmlzaWJsZSBFQ01BU2NyaXB0IGZ1bmN0aW9uIHNhdmVzIGEgbG90 IG9mIHJ1bi10aW1lIGZvb3RwcmludDsgZWFjaAorICogIEZ1bmN0aW9uIGluc3RhbmNlIHRha2Vz ID4xMDAgYnl0ZXMuICBVc2luZyBhIHNoYXJlZCBuYXRpdmUgaGVscGVyIGFuZCBhCisgKiAgJ21h Z2ljJyB2YWx1ZSB3b24ndCBzYXZlIG11Y2ggaWYgdGhlcmUgYXJlIG11bHRpcGxlIEZ1bmN0aW9u IGluc3RhbmNlcworICogIGFueXdheS4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwu aCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRFVLVEFQRV9C VUlMVElOKQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9kdWt0YXBlX29iamVjdF9p bmZvKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaW5zcGVjdF92YWx1ZSh0aHIsIC0xKTsKKwly ZXR1cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZHVrdGFwZV9vYmpl Y3RfYWN0KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaW50X3QgbGV2ZWw7CisKKwlsZXZlbCA9 IGR1a190b19pbnQodGhyLCAwKTsKKwlkdWtfaW5zcGVjdF9jYWxsc3RhY2tfZW50cnkodGhyLCBs ZXZlbCk7CisJcmV0dXJuIDE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2R1 a3RhcGVfb2JqZWN0X2djKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfc21hbGxfdWludF90IGZs YWdzOworCisJZmxhZ3MgPSAoZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2dldF91aW50KHRociwgMCk7 CisJZHVrX2hlYXBfbWFya19hbmRfc3dlZXAodGhyLT5oZWFwLCBmbGFncyk7CisKKwkvKiBYWFg6 IE5vdCBzdXJlIHdoYXQgdGhlIGJlc3QgcmV0dXJuIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBBUEku CisJICogUmV0dXJuIHRydWUgZm9yIG5vdy4KKwkgKi8KKwlkdWtfcHVzaF90cnVlKHRocik7CisJ cmV0dXJuIDE7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQpCitE VUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9kdWt0YXBlX29iamVjdF9maW4oZHVrX2h0aHJl YWQgKnRocikgeworCSh2b2lkKSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgMCk7CisJaWYgKGR1 a19nZXRfdG9wKHRocikgPj0gMikgeworCQkvKiBTZXQ6IGN1cnJlbnRseSBhIGZpbmFsaXplciBp cyBkaXNhYmxlZCBieSBzZXR0aW5nIGl0IHRvCisJCSAqIHVuZGVmaW5lZDsgdGhpcyBkb2VzIG5v dCByZW1vdmUgdGhlIHByb3BlcnR5IGF0IHRoZSBtb21lbnQuCisJCSAqIFRoZSB2YWx1ZSBjb3Vs ZCBiZSB0eXBlIGNoZWNrZWQgdG8gYmUgZWl0aGVyIGEgZnVuY3Rpb24KKwkJICogb3Igc29tZXRo aW5nIGVsc2U7IGlmIHNvbWV0aGluZyBlbHNlLCB0aGUgcHJvcGVydHkgY291bGQKKwkJICogYmUg ZGVsZXRlZC4gIE11c3QgdXNlIGR1a19zZXRfZmluYWxpemVyKCkgdG8ga2VlcAorCQkgKiBEVUtf SE9CSkVDVF9GTEFHX0hBVkVfRklOQUxJWkVSIGluIHN5bmMuCisJCSAqLworCQlkdWtfc2V0X3Rv cCh0aHIsIDIpOworCQlkdWtfc2V0X2ZpbmFsaXplcih0aHIsIDApOworCQlyZXR1cm4gMDsKKwl9 IGVsc2UgeworCQkvKiBHZXQuICovCisJCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA9PSAx KTsKKwkJZHVrX2dldF9maW5hbGl6ZXIodGhyLCAwKTsKKwkJcmV0dXJuIDE7CisJfQorfQorI2Vu ZGlmICAvKiBEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUICovCisKK0RVS19JTlRFUk5BTCBkdWtf cmV0X3QgZHVrX2JpX2R1a3RhcGVfb2JqZWN0X2VuYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVr X2hzdHJpbmcgKmhfc3RyOworCisJLyogVmFyYXJnIGZ1bmN0aW9uOiBtdXN0IGJlIGNhcmVmdWwg dG8gY2hlY2svcmVxdWlyZSBhcmd1bWVudHMuCisJICogVGhlIEpTT04gaGVscGVycyBhY2NlcHQg aW52YWxpZCBpbmRpY2VzIGFuZCB0cmVhdCB0aGVtIGxpa2UKKwkgKiBub24tZXhpc3RlbnQgb3B0 aW9uYWwgcGFyYW1ldGVycy4KKwkgKi8KKworCWhfc3RyID0gZHVrX3JlcXVpcmVfaHN0cmluZyh0 aHIsIDApOyAgLyogQ291bGQgcmVqZWN0IHN5bWJvbHMsIGJ1dCBubyBwb2ludDogd29uJ3QgbWF0 Y2ggY29tcGFyaXNvbnMuICovCisJZHVrX3JlcXVpcmVfdmFsaWRfaW5kZXgodGhyLCAxKTsKKwor CWlmIChoX3N0ciA9PSBEVUtfSFRIUkVBRF9TVFJJTkdfSEVYKHRocikpIHsKKwkJZHVrX3NldF90 b3AodGhyLCAyKTsKKwkJZHVrX2hleF9lbmNvZGUodGhyLCAxKTsKKwkJRFVLX0FTU0VSVF9UT1Ao dGhyLCAyKTsKKwl9IGVsc2UgaWYgKGhfc3RyID09IERVS19IVEhSRUFEX1NUUklOR19CQVNFNjQo dGhyKSkgeworCQlkdWtfc2V0X3RvcCh0aHIsIDIpOworCQlkdWtfYmFzZTY0X2VuY29kZSh0aHIs IDEpOworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDIpOworI2lmIGRlZmluZWQoRFVLX1VTRV9KU09O X1NVUFBPUlQpICYmIGRlZmluZWQoRFVLX1VTRV9KWCkKKwl9IGVsc2UgaWYgKGhfc3RyID09IERV S19IVEhSRUFEX1NUUklOR19KWCh0aHIpKSB7CisJCWR1a19iaV9qc29uX3N0cmluZ2lmeV9oZWxw ZXIodGhyLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyppZHhfdmFsdWUqLywK KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC8qaWR4X3JlcGxhY2VyKi8sCisJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAvKmlkeF9zcGFjZSovLAorCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19KU09OX0ZMQUdfRVhUX0NVU1RPTSB8CisJCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0pTT05fRkxBR19BU0NJSV9PTkxZIHwKKwkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSlNPTl9GTEFHX0FWT0lEX0tFWV9RVU9URVMgLypm bGFncyovKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9KU09OX1NVUFBPUlQpICYmIGRl ZmluZWQoRFVLX1VTRV9KQykKKwl9IGVsc2UgaWYgKGhfc3RyID09IERVS19IVEhSRUFEX1NUUklO R19KQyh0aHIpKSB7CisJCWR1a19iaV9qc29uX3N0cmluZ2lmeV9oZWxwZXIodGhyLAorCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyppZHhfdmFsdWUqLywKKwkJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAyIC8qaWR4X3JlcGxhY2VyKi8sCisJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMyAvKmlkeF9zcGFjZSovLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19KU09OX0ZMQUdfRVhUX0NPTVBBVElCTEUgfAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19KU09OX0ZMQUdfQVNDSUlfT05MWSAvKmZsYWdzKi8pOworI2VuZGlmCisJ fSBlbHNlIHsKKwkJRFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX0FSR1ModGhyKTsKKwl9CisJcmV0 dXJuIDE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2R1a3RhcGVfb2JqZWN0 X2RlYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hzdHJpbmcgKmhfc3RyOworCisJLyogVmFy YXJnIGZ1bmN0aW9uOiBtdXN0IGJlIGNhcmVmdWwgdG8gY2hlY2svcmVxdWlyZSBhcmd1bWVudHMu CisJICogVGhlIEpTT04gaGVscGVycyBhY2NlcHQgaW52YWxpZCBpbmRpY2VzIGFuZCB0cmVhdCB0 aGVtIGxpa2UKKwkgKiBub24tZXhpc3RlbnQgb3B0aW9uYWwgcGFyYW1ldGVycy4KKwkgKi8KKwor CWhfc3RyID0gZHVrX3JlcXVpcmVfaHN0cmluZyh0aHIsIDApOyAgLyogQ291bGQgcmVqZWN0IHN5 bWJvbHMsIGJ1dCBubyBwb2ludDogd29uJ3QgbWF0Y2ggY29tcGFyaXNvbnMgKi8KKwlkdWtfcmVx dWlyZV92YWxpZF9pbmRleCh0aHIsIDEpOworCisJaWYgKGhfc3RyID09IERVS19IVEhSRUFEX1NU UklOR19IRVgodGhyKSkgeworCQlkdWtfc2V0X3RvcCh0aHIsIDIpOworCQlkdWtfaGV4X2RlY29k ZSh0aHIsIDEpOworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDIpOworCX0gZWxzZSBpZiAoaF9zdHIg PT0gRFVLX0hUSFJFQURfU1RSSU5HX0JBU0U2NCh0aHIpKSB7CisJCWR1a19zZXRfdG9wKHRociwg Mik7CisJCWR1a19iYXNlNjRfZGVjb2RlKHRociwgMSk7CisJCURVS19BU1NFUlRfVE9QKHRociwg Mik7CisjaWYgZGVmaW5lZChEVUtfVVNFX0pTT05fU1VQUE9SVCkgJiYgZGVmaW5lZChEVUtfVVNF X0pYKQorCX0gZWxzZSBpZiAoaF9zdHIgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0pYKHRocikpIHsK KwkJZHVrX2JpX2pzb25fcGFyc2VfaGVscGVyKHRociwKKwkJICAgICAgICAgICAgICAgICAgICAg ICAgIDEgLyppZHhfdmFsdWUqLywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIDIgLyppZHhf cmVwbGFjZXIqLywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIERVS19KU09OX0ZMQUdfRVhU X0NVU1RPTSAvKmZsYWdzKi8pOworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0pTT05fU1VQ UE9SVCkgJiYgZGVmaW5lZChEVUtfVVNFX0pDKQorCX0gZWxzZSBpZiAoaF9zdHIgPT0gRFVLX0hU SFJFQURfU1RSSU5HX0pDKHRocikpIHsKKwkJZHVrX2JpX2pzb25fcGFyc2VfaGVscGVyKHRociwK KwkJICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyppZHhfdmFsdWUqLywKKwkJICAgICAgICAg ICAgICAgICAgICAgICAgIDIgLyppZHhfcmVwbGFjZXIqLywKKwkJICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19KU09OX0ZMQUdfRVhUX0NPTVBBVElCTEUgLypmbGFncyovKTsKKyNlbmRpZgor CX0gZWxzZSB7CisJCURVS19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJfQorCXJl dHVybiAxOworfQorCisvKgorICogIENvbXBhY3QgYW4gb2JqZWN0CisgKi8KKworRFVLX0lOVEVS TkFMIGR1a19yZXRfdCBkdWtfYmlfZHVrdGFwZV9vYmplY3RfY29tcGFjdChkdWtfaHRocmVhZCAq dGhyKSB7CisJRFVLX0FTU0VSVF9UT1AodGhyLCAxKTsKKwlkdWtfY29tcGFjdCh0aHIsIDApOwor CXJldHVybiAxOyAgLyogcmV0dXJuIHRoZSBhcmd1bWVudCBvYmplY3QgKi8KK30KKworI2VuZGlm ICAvKiBEVUtfVVNFX0RVS1RBUEVfQlVJTFRJTiAqLworLyoKKyAqICBXSEFUV0cgRW5jb2Rpbmcg QVBJIGJ1aWx0LWlucworICoKKyAqICBBUEkgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9lbmNvZGlu Zy5zcGVjLndoYXR3Zy5vcmcvI2FwaQorICogIFdlYiBJREw6IGh0dHBzOi8vd3d3LnczLm9yZy9U Ui9XZWJJREwvCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBp bmNsdWRlZCAqLworCisvKgorICogIERhdGEgc3RydWN0dXJlcyBmb3IgZW5jb2RpbmcvZGVjb2Rp bmcKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJZHVrX3VpbnQ4X3QgKm91dDsgICAgICAvKiB3 aGVyZSB0byB3cml0ZSBuZXh0IGJ5dGUocykgKi8KKwlkdWtfY29kZXBvaW50X3QgbGVhZDsgIC8q IGxlYWQgc3Vycm9nYXRlICovCit9IGR1a19fZW5jb2RlX2NvbnRleHQ7CisKK3R5cGVkZWYgc3Ry dWN0IHsKKwkvKiBVVEYtOCBkZWNvZGluZyBzdGF0ZSAqLworCWR1a19jb2RlcG9pbnRfdCBjb2Rl cG9pbnQ7ICAvKiBidWlsdCB1cCBpbmNyZW1lbnRhbGx5ICovCisJZHVrX3VpbnQ4X3QgdXBwZXI7 ICAgICAgICAgIC8qIG1heCB2YWx1ZSBvZiBuZXh0IGJ5dGUgKGRlY29kZSBlcnJvciBvdGhlcndp c2UpICovCisJZHVrX3VpbnQ4X3QgbG93ZXI7ICAgICAgICAgIC8qIG1pbiB2YWx1ZSBvZiBuZXh0 IGJ5dGUgKGRpdHRvKSAqLworCWR1a191aW50OF90IG5lZWRlZDsgICAgICAgICAvKiBob3cgbWFu eSBtb3JlIGJ5dGVzIHdlIG5lZWQgKi8KKwlkdWtfdWludDhfdCBib21faGFuZGxlZDsgICAgLyog Qk9NIHNlZW4gb3Igbm8gbG9uZ2VyIGV4cGVjdGVkICovCisKKwkvKiBEZWNvZGVyIGNvbmZpZ3Vy YXRpb24gKi8KKwlkdWtfdWludDhfdCBmYXRhbDsKKwlkdWtfdWludDhfdCBpZ25vcmVfYm9tOwor fSBkdWtfX2RlY29kZV9jb250ZXh0OworCisvKiBUaGUgc2lnbmVkIGR1a19jb2RlcG9pbnRfdCB0 eXBlIGlzIHVzZWQgdG8gc2lnbmFsIGEgZGVjb2RlZCBjb2RlcG9pbnQKKyAqICg+PSAwKSBvciB2 YXJpb3VzIG90aGVyIHN0YXRlcyB1c2luZyBuZWdhdGl2ZSB2YWx1ZXMuCisgKi8KKyNkZWZpbmUg RFVLX19DUF9DT05USU5VRSAgICgtMSkgIC8qIGNvbnRpbnVlIHRvIG5leHQgYnl0ZSwgbm8gY29t cGxldGVkIGNvZGVwb2ludCAqLworI2RlZmluZSBEVUtfX0NQX0VSUk9SICAgICAgKC0yKSAgLyog ZGVjb2RpbmcgZXJyb3IgKi8KKyNkZWZpbmUgRFVLX19DUF9SRVRSWSAgICAgICgtMykgIC8qIGRl Y29kaW5nIGVycm9yOyByZXRyeSBsYXN0IGJ5dGUgKi8KKworLyoKKyAqICBSYXcgaGVscGVycyBm b3IgZW5jb2RpbmcvZGVjb2RpbmcKKyAqLworCisvKiBFbWl0IFVURi04ICg9IENFU1UtOCkgZW5j b2RlZCBVK0ZGRkQgKHJlcGxhY2VtZW50IGNoYXIpLCBpLmUuIGVmIGJmIGJkLiAqLworRFVLX0xP Q0FMIGR1a191aW50OF90ICpkdWtfX3V0ZjhfZW1pdF9yZXBsKGR1a191aW50OF90ICpwdHIpIHsK KwkqcHRyKysgPSAweGVmOworCSpwdHIrKyA9IDB4YmY7CisJKnB0cisrID0gMHhiZDsKKwlyZXR1 cm4gcHRyOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3V0ZjhfZGVjb2RlX2luaXQoZHVrX19k ZWNvZGVfY29udGV4dCAqZGVjX2N0eCkgeworCS8qIChSZSlpbml0IHRoZSBkZWNvZGluZyBzdGF0 ZSBvZiAnZGVjX2N0eCcgYnV0IGxlYXZlIGRlY29kZXIKKwkgKiBjb25maWd1cmF0aW9uIGZpZWxk cyB1bnRvdWNoZWQuCisJICovCisJZGVjX2N0eC0+Y29kZXBvaW50ID0gMHgwMDAwTDsKKwlkZWNf Y3R4LT51cHBlciA9IDB4YmY7CisJZGVjX2N0eC0+bG93ZXIgPSAweDgwOworCWRlY19jdHgtPm5l ZWRlZCA9IDA7CisJZGVjX2N0eC0+Ym9tX2hhbmRsZWQgPSAwOworfQorCitEVUtfTE9DQUwgZHVr X2NvZGVwb2ludF90IGR1a19fdXRmOF9kZWNvZGVfbmV4dChkdWtfX2RlY29kZV9jb250ZXh0ICpk ZWNfY3R4LCBkdWtfdWludDhfdCB4KSB7CisJLyoKKwkgKiAgVVRGLTggYWxnb3JpdGhtIGJhc2Vk IG9uIHRoZSBFbmNvZGluZyBzcGVjaWZpY2F0aW9uOgorCSAqICBodHRwczovL2VuY29kaW5nLnNw ZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlcgorCSAqCisJICogIFR3byBtYWluIHN0YXRlczog ZGVjb2RpbmcgaW5pdGlhbCBieXRlIHZzLiBkZWNvZGluZyBjb250aW51YXRpb24KKwkgKiAgYnl0 ZXMuICBTaG9ydGVzdCBsZW5ndGggZW5jb2RpbmcgaXMgdmFsaWRhdGVkIGJ5IHJlc3RyaWN0aW5n IHRoZQorCSAqICBhbGxvd2VkIHJhbmdlIG9mIGZpcnN0IGNvbnRpbnVhdGlvbiBieXRlIHVzaW5n ICdsb3dlcicgYW5kICd1cHBlcicuCisJICovCisKKwlpZiAoZGVjX2N0eC0+bmVlZGVkID09IDAp IHsKKwkJLyogcHJvY2VzcyBpbml0aWFsIGJ5dGUgKi8KKwkJaWYgKHggPD0gMHg3ZikgeworCQkJ LyogVSswMDAwLVUrMDA3RiwgMSBieXRlIChBU0NJSSkgKi8KKwkJCXJldHVybiAoZHVrX2NvZGVw b2ludF90KSB4OworCQl9IGVsc2UgaWYgKHggPj0gMHhjMiAmJiB4IDw9IDB4ZGYpIHsKKwkJCS8q IFUrMDA4MC1VKzA3RkYsIDIgYnl0ZXMgKi8KKwkJCWRlY19jdHgtPm5lZWRlZCA9IDE7CisJCQlk ZWNfY3R4LT5jb2RlcG9pbnQgPSB4ICYgMHgxZjsKKwkJCURVS19BU1NFUlQoZGVjX2N0eC0+bG93 ZXIgPT0gMHg4MCk7CisJCQlEVUtfQVNTRVJUKGRlY19jdHgtPnVwcGVyID09IDB4YmYpOworCQkJ cmV0dXJuIERVS19fQ1BfQ09OVElOVUU7CisJCX0gZWxzZSBpZiAoeCA+PSAweGUwICYmIHggPD0g MHhlZikgeworCQkJLyogVSswODAwLVUrRkZGRiwgMyBieXRlcyAqLworCQkJaWYgKHggPT0gMHhl MCkgeworCQkJCWRlY19jdHgtPmxvd2VyID0gMHhhMDsKKwkJCQlEVUtfQVNTRVJUKGRlY19jdHgt PnVwcGVyID09IDB4YmYpOworCQkJfSBlbHNlIGlmICh4ID09IDB4ZWQpIHsKKwkJCQlEVUtfQVNT RVJUKGRlY19jdHgtPmxvd2VyID09IDB4ODApOworCQkJCWRlY19jdHgtPnVwcGVyID0gMHg5ZjsK KwkJCX0KKwkJCWRlY19jdHgtPm5lZWRlZCA9IDI7CisJCQlkZWNfY3R4LT5jb2RlcG9pbnQgPSB4 ICYgMHgwZjsKKwkJCXJldHVybiBEVUtfX0NQX0NPTlRJTlVFOworCQl9IGVsc2UgaWYgKHggPj0g MHhmMCAmJiB4IDw9IDB4ZjQpIHsKKwkJCS8qIFUrMDEwMDAwLVUrMTBGRkZGLCA0IGJ5dGVzICov CisJCQlpZiAoeCA9PSAweGYwKSB7CisJCQkJZGVjX2N0eC0+bG93ZXIgPSAweDkwOworCQkJCURV S19BU1NFUlQoZGVjX2N0eC0+dXBwZXIgPT0gMHhiZik7CisJCQl9IGVsc2UgaWYgKHggPT0gMHhm NCkgeworCQkJCURVS19BU1NFUlQoZGVjX2N0eC0+bG93ZXIgPT0gMHg4MCk7CisJCQkJZGVjX2N0 eC0+dXBwZXIgPSAweDhmOworCQkJfQorCQkJZGVjX2N0eC0+bmVlZGVkID0gMzsKKwkJCWRlY19j dHgtPmNvZGVwb2ludCA9IHggJiAweDA3OworCQkJcmV0dXJuIERVS19fQ1BfQ09OVElOVUU7CisJ CX0gZWxzZSB7CisJCQkvKiBub3QgYSBsZWdhbCBpbml0aWFsIGJ5dGUgKi8KKwkJCXJldHVybiBE VUtfX0NQX0VSUk9SOworCQl9CisJfSBlbHNlIHsKKwkJLyogcHJvY2VzcyBjb250aW51YXRpb24g Ynl0ZSAqLworCQlpZiAoeCA+PSBkZWNfY3R4LT5sb3dlciAmJiB4IDw9IGRlY19jdHgtPnVwcGVy KSB7CisJCQlkZWNfY3R4LT5sb3dlciA9IDB4ODA7CisJCQlkZWNfY3R4LT51cHBlciA9IDB4YmY7 CisJCQlkZWNfY3R4LT5jb2RlcG9pbnQgPSAoZGVjX2N0eC0+Y29kZXBvaW50IDw8IDYpIHwgKHgg JiAweDNmKTsKKwkJCWlmICgtLWRlY19jdHgtPm5lZWRlZCA+IDApIHsKKwkJCQkvKiBuZWVkIG1v cmUgYnl0ZXMgKi8KKwkJCQlyZXR1cm4gRFVLX19DUF9DT05USU5VRTsKKwkJCX0gZWxzZSB7CisJ CQkJLyogZ290IGEgY29kZXBvaW50ICovCisJCQkJZHVrX2NvZGVwb2ludF90IHJldDsKKwkJCQlE VUtfQVNTRVJUKGRlY19jdHgtPmNvZGVwb2ludCA8PSAweDEwZmZmZkwpOyAgLyogRGVjb2Rpbmcg cnVsZXMgZ3VhcmFudGVlLiAqLworCQkJCXJldCA9IGRlY19jdHgtPmNvZGVwb2ludDsKKwkJCQlk ZWNfY3R4LT5jb2RlcG9pbnQgPSAweDAwMDBMOworCQkJCWRlY19jdHgtPm5lZWRlZCA9IDA7CisJ CQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGp1c3QgZW5jb3VudGVy ZWQgYW4gaWxsZWdhbCBVVEYtOCBjb250aW51YXRpb24gYnl0ZS4gIFRoaXMgbWlnaHQKKwkJCSAq IGJlIHRoZSBpbml0aWFsIGJ5dGUgb2YgdGhlIG5leHQgY2hhcmFjdGVyOyBpZiB3ZSByZXR1cm4g YSBwbGFpbgorCQkJICogZXJyb3Igc3RhdHVzIGFuZCB0aGUgZGVjb2RlciBpcyBpbiByZXBsYWNl bWVudCBtb2RlLCB0aGUgY2hhcmFjdGVyCisJCQkgKiB3aWxsIGJlIG1hc2tlZC4gIFdlIHN0aWxs IG5lZWQgdG8gYWxlcnQgdGhlIGNhbGxlciB0byB0aGUgZXJyb3IKKwkJCSAqIHRob3VnaC4KKwkJ CSAqLworCQkJZGVjX2N0eC0+Y29kZXBvaW50ID0gMHgwMDAwTDsKKwkJCWRlY19jdHgtPm5lZWRl ZCA9IDA7CisJCQlkZWNfY3R4LT5sb3dlciA9IDB4ODA7CisJCQlkZWNfY3R4LT51cHBlciA9IDB4 YmY7CisJCQlyZXR1cm4gRFVLX19DUF9SRVRSWTsKKwkJfQorCX0KK30KKworI2lmIGRlZmluZWQo RFVLX1VTRV9FTkNPRElOR19CVUlMVElOUykKK0RVS19MT0NBTCB2b2lkIGR1a19fdXRmOF9lbmNv ZGVfY2hhcih2b2lkICp1ZGF0YSwgZHVrX2NvZGVwb2ludF90IGNvZGVwb2ludCkgeworCWR1a19f ZW5jb2RlX2NvbnRleHQgKmVuY19jdHg7CisKKwlEVUtfQVNTRVJUKGNvZGVwb2ludCA+PSAwKTsK KwllbmNfY3R4ID0gKGR1a19fZW5jb2RlX2NvbnRleHQgKikgdWRhdGE7CisJRFVLX0FTU0VSVChl bmNfY3R4ICE9IE5VTEwpOworCisjaWYgIWRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwlp ZiAoY29kZXBvaW50IDw9IDB4N2YgJiYgZW5jX2N0eC0+bGVhZCA9PSAweDAwMDBMKSB7CisJCS8q IEZhc3QgcGF0aCBmb3IgQVNDSUkuICovCisJCSplbmNfY3R4LT5vdXQrKyA9IChkdWtfdWludDhf dCkgY29kZXBvaW50OworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlpZiAoRFVLX1VOTElLRUxZ KGNvZGVwb2ludCA+IDB4MTBmZmZmTCkpIHsKKwkJLyogY2Fubm90IGxlZ2FsbHkgZW5jb2RlIGlu IFVURi04ICovCisJCWNvZGVwb2ludCA9IERVS19VTklDT0RFX0NQX1JFUExBQ0VNRU5UX0NIQVJB Q1RFUjsKKwl9IGVsc2UgaWYgKGNvZGVwb2ludCA+PSAweGQ4MDBMICYmIGNvZGVwb2ludCA8PSAw eGRmZmZMKSB7CisJCWlmIChjb2RlcG9pbnQgPD0gMHhkYmZmTCkgeworCQkJLyogaGlnaCBzdXJy b2dhdGUgKi8KKwkJCWR1a19jb2RlcG9pbnRfdCBwcmV2X2xlYWQgPSBlbmNfY3R4LT5sZWFkOwor CQkJZW5jX2N0eC0+bGVhZCA9IGNvZGVwb2ludDsKKwkJCWlmIChwcmV2X2xlYWQgPT0gMHgwMDAw TCkgeworCQkJCS8qIGhpZ2ggc3Vycm9nYXRlLCBubyBvdXRwdXQgKi8KKwkJCQlyZXR1cm47CisJ CQl9IGVsc2UgeworCQkJCS8qIGNvbnNlY3V0aXZlIGhpZ2ggc3Vycm9nYXRlcywgY29uc2lkZXIg Zmlyc3Qgb25lIHVucGFpcmVkICovCisJCQkJY29kZXBvaW50ID0gRFVLX1VOSUNPREVfQ1BfUkVQ TEFDRU1FTlRfQ0hBUkFDVEVSOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogbG93IHN1cnJvZ2F0 ZSAqLworCQkJaWYgKGVuY19jdHgtPmxlYWQgIT0gMHgwMDAwTCkgeworCQkJCWNvZGVwb2ludCA9 IChkdWtfY29kZXBvaW50X3QpICgweDAxMDAwMEwgKyAoKGVuY19jdHgtPmxlYWQgLSAweGQ4MDBM KSA8PCAxMCkgKyAoY29kZXBvaW50IC0gMHhkYzAwTCkpOworCQkJCWVuY19jdHgtPmxlYWQgPSAw eDAwMDBMOworCQkJfSBlbHNlIHsKKwkJCQkvKiB1bnBhaXJlZCBsb3cgc3Vycm9nYXRlICovCisJ CQkJRFVLX0FTU0VSVChlbmNfY3R4LT5sZWFkID09IDB4MDAwMEwpOworCQkJCWNvZGVwb2ludCA9 IERVS19VTklDT0RFX0NQX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKwkJCX0KKwkJfQorCX0gZWxz ZSB7CisJCWlmIChlbmNfY3R4LT5sZWFkICE9IDB4MDAwMEwpIHsKKwkJCS8qIHVucGFpcmVkIGhp Z2ggc3Vycm9nYXRlOiBlbWl0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBhbmQgdGhlIGlucHV0IGNv ZGVwb2ludCAqLworCQkJZW5jX2N0eC0+bGVhZCA9IDB4MDAwMEw7CisJCQllbmNfY3R4LT5vdXQg PSBkdWtfX3V0ZjhfZW1pdF9yZXBsKGVuY19jdHgtPm91dCk7CisJCX0KKwl9CisKKwkvKiBDb2Rl cG9pbnQgbWF5IGJlIG9yaWdpbmFsIGlucHV0LCBhIGRlY29kZWQgc3Vycm9nYXRlIHBhaXIsIG9y IG1heQorCSAqIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIFUrRkZGRC4KKwkgKi8KKwllbmNfY3R4 LT5vdXQgKz0gZHVrX3VuaWNvZGVfZW5jb2RlX3h1dGY4KChkdWtfdWNvZGVwb2ludF90KSBjb2Rl cG9pbnQsIGVuY19jdHgtPm91dCk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRU5DT0RJTkdfQlVJ TFRJTlMgKi8KKworLyogU2hhcmVkIGhlbHBlciBmb3IgYnVmZmVyLXRvLXN0cmluZyB1c2luZyBh IFRleHREZWNvZGVyKCkgY29tcGF0aWJsZSBVVEYtOAorICogZGVjb2Rlci4KKyAqLworRFVLX0xP Q0FMIGR1a19yZXRfdCBkdWtfX2RlY29kZV9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX19k ZWNvZGVfY29udGV4dCAqZGVjX2N0eCkgeworCWNvbnN0IGR1a191aW50OF90ICppbnB1dDsKKwlk dWtfc2l6ZV90IGxlbiA9IDA7CisJZHVrX3NpemVfdCBsZW5fdG1wOworCWR1a19ib29sX3Qgc3Ry ZWFtID0gMDsKKwlkdWtfY29kZXBvaW50X3QgY29kZXBvaW50OworCWR1a191aW50OF90ICpvdXRw dXQ7CisJY29uc3QgZHVrX3VpbnQ4X3QgKmluOworCWR1a191aW50OF90ICpvdXQ7CisKKwlEVUtf QVNTRVJUKGRlY19jdHggIT0gTlVMTCk7CisKKwkvKiBDYXJlZnVsIHdpdGggaW5wdXQgYnVmZmVy IHBvaW50ZXI6IGFueSBzaWRlIGVmZmVjdHMgaW52b2x2aW5nCisJICogY29kZSBleGVjdXRpb24g KGUuZy4gZ2V0dGVycywgY29lcmNpb24gY2FsbHMsIGFuZCBmaW5hbGl6ZXJzKQorCSAqIG1heSBj YXVzZSBhIHJlc2l6ZSBhbmQgaW52YWxpZGF0ZSBhIHBvaW50ZXIgd2UndmUgcmVhZC4gIFRoaXMK KwkgKiBpcyB3aHkgdGhlIHBvaW50ZXIgaXMgYWN0dWFsbHkgbG9va2VkIHVwIGF0IHRoZSBsYXN0 IG1pbnV0ZS4KKwkgKiBBcmd1bWVudCB2YWxpZGF0aW9uIG11c3Qgc3RpbGwgaGFwcGVuIGZpcnN0 IHRvIG1hdGNoIFdIQVRXRworCSAqIHJlcXVpcmVkIHNpZGUgZWZmZWN0IG9yZGVyLgorCSAqLwor CisJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAwKSkgeworCQlkdWtfcHVzaF9maXhlZF9idWZm ZXJfbm96ZXJvKHRociwgMCk7CisJCWR1a19yZXBsYWNlKHRociwgMCk7CisJfQorCSh2b2lkKSBk dWtfcmVxdWlyZV9idWZmZXJfZGF0YSh0aHIsIDAsICZsZW4pOyAgLyogTmVlZCAnbGVuJywgYXZv aWQgcG9pbnRlci4gKi8KKworCWlmIChkdWtfY2hlY2tfdHlwZV9tYXNrKHRociwgMSwgRFVLX1RZ UEVfTUFTS19VTkRFRklORUQgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X1RZUEVfTUFTS19OVUxMIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19U WVBFX01BU0tfTk9ORSkpIHsKKwkJLyogVXNlIGRlZmF1bHRzLCB0cmVhdCBtaXNzaW5nIHZhbHVl IGxpa2UgdW5kZWZpbmVkLiAqLworCX0gZWxzZSB7CisJCWR1a19yZXF1aXJlX3R5cGVfbWFzayh0 aHIsIDEsIERVS19UWVBFX01BU0tfVU5ERUZJTkVEIHwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfTlVMTCB8CisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQyB8CisJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0JVRkZFUiB8CisJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfT0JKRUNUKTsKKwkJaWYg KGR1a19nZXRfcHJvcF9saXRlcmFsKHRociwgMSwgInN0cmVhbSIpKSB7CisJCQlzdHJlYW0gPSBk dWtfdG9fYm9vbGVhbih0aHIsIC0xKTsKKwkJfQorCX0KKworCS8qIEFsbG93YW5jZSBpcyAzKmxl biBpbiB0aGUgZ2VuZXJhbCBjYXNlIGJlY2F1c2UgYWxsIGJ5dGVzIG1heSBwb3RlbnRpYWxseQor CSAqIGJlY29tZSBVK0ZGRkQuICBJZiB0aGUgZmlyc3QgYnl0ZSBjb21wbGV0ZXMgYSBub24tQk1Q IGNvZGVwb2ludCBpdCB3aWxsCisJICogZGVjb2RlIHRvIGEgQ0VTVS04IHN1cnJvZ2F0ZSBwYWly ICg2IGJ5dGVzKSBzbyB3ZSBhbGxvdyAzIGV4dHJhIGJ5dGVzIHRvCisJICogY29tcGVuc2F0ZTog KDEqMykrMyA9IDYuICBOb24tQk1QIGNvZGVwb2ludHMgYXJlIHNhZmUgb3RoZXJ3aXNlIGJlY2F1 c2UKKwkgKiB0aGUgNC0+NiBleHBhbnNpb24gaXMgd2VsbCB1bmRlciB0aGUgM3ggYWxsb3dhbmNl LgorCSAqCisJICogWFhYOiBBcyB3aXRoIFRleHRFbmNvZGVyLCBuZWVkIGEgYmV0dGVyIGJ1ZmZl ciBhbGxvY2F0aW9uIHN0cmF0ZWd5IGhlcmUuCisJICovCisJaWYgKGxlbiA+PSAoRFVLX0hCVUZG RVJfTUFYX0JZVEVMRU4gLyAzKSAtIDMpIHsKKwkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RS X1JFU1VMVF9UT09fTE9ORyk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKwlv dXRwdXQgPSAoZHVrX3VpbnQ4X3QgKikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyX25vemVybyh0aHIs IDMgKyAoMyAqIGxlbikpOyAgLyogdXNlZCBwYXJ0cyB3aWxsIGJlIGFsd2F5cyBtYW51YWxseSB3 cml0dGVuIG92ZXIgKi8KKworCWlucHV0ID0gKGNvbnN0IGR1a191aW50OF90ICopIGR1a19nZXRf YnVmZmVyX2RhdGEodGhyLCAwLCAmbGVuX3RtcCk7CisJRFVLX0FTU0VSVChpbnB1dCAhPSBOVUxM IHx8IGxlbiA9PSAwKTsKKwlpZiAoRFVLX1VOTElLRUxZKGxlbiAhPSBsZW5fdG1wKSkgeworCQkv KiBWZXJ5IHVubGlrZWx5IGJ1dCBwb3NzaWJsZTogc291cmNlIGJ1ZmZlciB3YXMgcmVzaXplZCBi eQorCQkgKiBhIHNpZGUgZWZmZWN0IHdoZW4gZml4ZWQgYnVmZmVyIHdhcyBwdXNoZWQuICBPdXRw dXQgYnVmZmVyCisJCSAqIG1heSBub3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb3V0cHV0LCBz byBqdXN0IGZhaWwgaWYKKwkJICogbGVuZ3RoIGhhcyBjaGFuZ2VkLgorCQkgKi8KKwkJRFVLX0Qo RFVLX0RQUklOVCgiaW5wdXQgYnVmZmVyIHJlc2l6ZWQgYnkgc2lkZSBlZmZlY3QsIGZhaWwiKSk7 CisJCWdvdG8gZmFpbF90eXBlOworCX0KKworCS8qIEZyb20gdGhpcyBwb2ludCBvbndhcmRzIGl0 J3MgY3JpdGljYWwgdGhhdCBubyBzaWRlIGVmZmVjdCBvY2N1cgorCSAqIHdoaWNoIG1heSBkaXN0 dXJiICdpbnB1dCc6IGZpbmFsaXplciBleGVjdXRpb24sIHByb3BlcnR5IGFjY2Vzc2VzLAorCSAq IGFjdGl2ZSBjb2VyY2lvbnMsIGV0Yy4gIEV2ZW4gYW4gYWxsb2NhdGlvbiByZWxhdGVkIG1hcmst YW5kLXN3ZWVwCisJICogbWF5IGFmZmVjdCB0aGUgcG9pbnRlciBiZWNhdXNlIGl0IG1heSB0cmln Z2VyIGEgcGVuZGluZyBmaW5hbGl6ZXIuCisJICovCisKKwlpbiA9IGlucHV0OworCW91dCA9IG91 dHB1dDsKKwl3aGlsZSAoaW4gPCBpbnB1dCArIGxlbikgeworCQljb2RlcG9pbnQgPSBkdWtfX3V0 ZjhfZGVjb2RlX25leHQoZGVjX2N0eCwgKmluKyspOworCQlpZiAoY29kZXBvaW50IDwgMCkgewor CQkJaWYgKGNvZGVwb2ludCA9PSBEVUtfX0NQX0NPTlRJTlVFKSB7CisJCQkJY29udGludWU7CisJ CQl9CisKKwkJCS8qIERlY29kaW5nIGVycm9yIHdpdGggb3Igd2l0aG91dCByZXRyeS4gKi8KKwkJ CURVS19BU1NFUlQoY29kZXBvaW50ID09IERVS19fQ1BfRVJST1IgfHwgY29kZXBvaW50ID09IERV S19fQ1BfUkVUUlkpOworCQkJaWYgKGNvZGVwb2ludCA9PSBEVUtfX0NQX1JFVFJZKSB7CisJCQkJ LS1pbjsgIC8qIHJldHJ5IGxhc3QgYnl0ZSAqLworCQkJfQorCQkJLyogcmVwbGFjZW1lbnQgbW9k ZTogcmVwbGFjZSB3aXRoIFUrRkZGRCAqLworCQkJY29kZXBvaW50ID0gRFVLX1VOSUNPREVfQ1Bf UkVQTEFDRU1FTlRfQ0hBUkFDVEVSOworCQkJaWYgKGRlY19jdHgtPmZhdGFsKSB7CisJCQkJLyog ZmF0YWwgbW9kZTogdGhyb3cgYSBUeXBlRXJyb3IgKi8KKwkJCQlnb3RvIGZhaWxfdHlwZTsKKwkJ CX0KKwkJCS8qIENvbnRpbnVlIHdpdGggJ2NvZGVwb2ludCcsIFVuaWNvZGUgcmVwbGFjZW1lbnQu ICovCisJCX0KKwkJRFVLX0FTU0VSVChjb2RlcG9pbnQgPj0gMHgwMDAwTCAmJiBjb2RlcG9pbnQg PD0gMHgxMGZmZmZMKTsKKworCQlpZiAoIWRlY19jdHgtPmJvbV9oYW5kbGVkKSB7CisJCQlkZWNf Y3R4LT5ib21faGFuZGxlZCA9IDE7CisJCQlpZiAoY29kZXBvaW50ID09IDB4ZmVmZkwgJiYgIWRl Y19jdHgtPmlnbm9yZV9ib20pIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCW91dCAr PSBkdWtfdW5pY29kZV9lbmNvZGVfY2VzdTgoKGR1a191Y29kZXBvaW50X3QpIGNvZGVwb2ludCwg b3V0KTsKKwkJRFVLX0FTU0VSVChvdXQgPD0gb3V0cHV0ICsgKDMgKyAoMyAqIGxlbikpKTsKKwl9 CisKKwlpZiAoIXN0cmVhbSkgeworCQlpZiAoZGVjX2N0eC0+bmVlZGVkICE9IDApIHsKKwkJCS8q IHRydW5jYXRlZCBzZXF1ZW5jZSBhdCBlbmQgb2YgYnVmZmVyICovCisJCQlpZiAoZGVjX2N0eC0+ ZmF0YWwpIHsKKwkJCQlnb3RvIGZhaWxfdHlwZTsKKwkJCX0gZWxzZSB7CisJCQkJb3V0ICs9IGR1 a191bmljb2RlX2VuY29kZV9jZXN1OChEVUtfVU5JQ09ERV9DUF9SRVBMQUNFTUVOVF9DSEFSQUNU RVIsIG91dCk7CisJCQkJRFVLX0FTU0VSVChvdXQgPD0gb3V0cHV0ICsgKDMgKyAoMyAqIGxlbikp KTsKKwkJCX0KKwkJfQorCQlkdWtfX3V0ZjhfZGVjb2RlX2luaXQoZGVjX2N0eCk7ICAvKiBJbml0 aWFsaXplIGRlY29kaW5nIHN0YXRlIGZvciBwb3RlbnRpYWwgcmV1c2UuICovCisJfQorCisJLyog T3V0cHV0IGJ1ZmZlciBpcyBmaXhlZCBhbmQgdGh1cyBzdGFibGUgZXZlbiBpZiB0aGVyZSBoYWQg YmVlbgorCSAqIHNpZGUgZWZmZWN0cyAod2hpY2ggdGhlcmUgc2hvdWxkbid0IGJlKS4KKwkgKi8K KwlkdWtfcHVzaF9sc3RyaW5nKHRociwgKGNvbnN0IGNoYXIgKikgb3V0cHV0LCAoZHVrX3NpemVf dCkgKG91dCAtIG91dHB1dCkpOworCXJldHVybiAxOworCisgZmFpbF90eXBlOgorCURVS19FUlJP Ul9UWVBFKHRociwgRFVLX1NUUl9VVEY4X0RFQ09ERV9GQUlMRUQpOworCURVS19XT19OT1JFVFVS TihyZXR1cm4gMDspOworfQorCisvKgorICogIEJ1aWx0LWluIGJpbmRpbmdzCisgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9FTkNPRElOR19CVUlMVElOUykKK0RVS19JTlRFUk5BTCBkdWtfcmV0 X3QgZHVrX2JpX3RleHRlbmNvZGVyX2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwkv KiBUZXh0RW5jb2RlciBjdXJyZW50bHkgcmVxdWlyZXMgbm8gcGVyc2lzdGVudCBzdGF0ZSwgc28g dGhlIGNvbnN0cnVjdG9yCisJICogZG9lcyBub3RoaW5nIG9uIHB1cnBvc2UuCisJICovCisKKwlk dWtfcmVxdWlyZV9jb25zdHJ1Y3Rvcl9jYWxsKHRocik7CisJcmV0dXJuIDA7Cit9CisKK0RVS19J TlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3RleHRlbmNvZGVyX3Byb3RvdHlwZV9lbmNvZGluZ19n ZXR0ZXIoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19wdXNoX2xpdGVyYWwodGhyLCAidXRmLTgi KTsKKwlyZXR1cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfdGV4dGVu Y29kZXJfcHJvdG90eXBlX2VuY29kZShkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19lbmNvZGVf Y29udGV4dCBlbmNfY3R4OworCWR1a19zaXplX3QgbGVuOworCWR1a19zaXplX3QgZmluYWxfbGVu OworCWR1a191aW50OF90ICpvdXRwdXQ7CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDEpOworCWlm IChkdWtfaXNfdW5kZWZpbmVkKHRociwgMCkpIHsKKwkJbGVuID0gMDsKKwl9IGVsc2UgeworCQlk dWtfaHN0cmluZyAqaF9pbnB1dDsKKworCQloX2lucHV0ID0gZHVrX3RvX2hzdHJpbmcodGhyLCAw KTsKKwkJRFVLX0FTU0VSVChoX2lucHV0ICE9IE5VTEwpOworCisJCWxlbiA9IChkdWtfc2l6ZV90 KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoX2lucHV0KTsKKwkJaWYgKGxlbiA+PSBEVUtfSEJV RkZFUl9NQVhfQllURUxFTiAvIDMpIHsKKwkJCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9S RVNVTFRfVE9PX0xPTkcpOworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJCX0KKwl9 CisKKwkvKiBBbGxvd2FuY2UgaXMgMypsZW4gYmVjYXVzZSBhbGwgYnl0ZXMgY2FuIHBvdGVudGlh bGx5IGJlIHJlcGxhY2VkIHdpdGgKKwkgKiBVK0ZGRkQgLS0gd2hpY2ggcmF0aGVyIGluY29udmVu aWVudGx5IGVuY29kZXMgdG8gMyBieXRlcyBpbiBVVEYtOC4KKwkgKiBSZWx5IG9uIGR5bmFtaWMg YnVmZmVyIGRhdGEgcG9pbnRlciBzdGFiaWxpdHk6IG5vIG90aGVyIGNvZGUgaGFzCisJICogYWNj ZXNzIHRvIHRoZSBkYXRhIHBvaW50ZXIuCisJICoKKwkgKiBYWFg6IFRoZSBidWZmZXIgYWxsb2Nh dGlvbiBzdHJhdGVneSB1c2VkIGhlcmUgaXMgcmF0aGVyIGluZWZmaWNpZW50LgorCSAqIE1heWJl IHN3aXRjaCB0byBhIGNodW5rLWJhc2VkIHN0cmF0ZWd5LCBvciBwcmVwcm9jZXNzIHRoZSBzdHJp bmcgdG8KKwkgKiBmaWd1cmUgb3V0IHRoZSBzcGFjZSBuZWVkZWQgYWhlYWQgb2YgdGltZT8KKwkg Ki8KKwlEVUtfQVNTRVJUKDMgKiBsZW4gPj0gbGVuKTsKKwlvdXRwdXQgPSAoZHVrX3VpbnQ4X3Qg KikgZHVrX3B1c2hfZHluYW1pY19idWZmZXIodGhyLCAzICogbGVuKTsKKworCWlmIChsZW4gPiAw KSB7CisJCURVS19BU1NFUlQoZHVrX2lzX3N0cmluZyh0aHIsIDApKTsgIC8qIFRydWUgaWYgbGVu ID4gMC4gKi8KKworCQkvKiBYWFg6IGR1a19kZWNvZGVfc3RyaW5nKCkgaXMgdXNlZCB0byBwcm9j ZXNzIHRoZSBpbnB1dAorCQkgKiBzdHJpbmcuICBGb3Igc3RhbmRhcmQgRUNNQVNjcmlwdCBzdHJp bmdzLCByZXByZXNlbnRlZAorCQkgKiBpbnRlcm5hbGx5IGFzIENFU1UtOCwgdGhpcyBpcyBmaW5l LiAgSG93ZXZlciwgYmVoYXZpb3IKKwkJICogYmV5b25kIENFU1UtOCBpcyBub3QgdmVyeSBzdHJp Y3Q6IGNvZGVwb2ludHMgdXNpbmcgYW4KKwkJICogZXh0ZW5kZWQgZm9ybSBvZiBVVEYtOCBhcmUg YWxzbyBhY2NlcHRlZCwgYW5kIGludmFsaWQKKwkJICogY29kZXBvaW50IHNlcXVlbmNlcyAod2hp Y2ggYXJlIGFsbG93ZWQgaW4gRHVrdGFwZSBzdHJpbmdzKQorCQkgKiBhcmUgbm90IGhhbmRsZWQg YXMgd2VsbCBhcyB0aGV5IGNvdWxkIChlLmcuIGludmFsaWQKKwkJICogY29udGludWF0aW9uIGJ5 dGVzIG1heSBtYXNrIGZvbGxvd2luZyBjb2RlcG9pbnRzKS4KKwkJICogVGhpcyBpcyBob3cgRUNN QVNjcmlwdCBjb2RlIHdvdWxkIGFsc28gc2VlIHN1Y2ggc3RyaW5ncy4KKwkJICogTWF5YmUgcmVw bGFjZSBkdWtfZGVjb2RlX3N0cmluZygpIHdpdGggYW4gZXhwbGljaXQgc3RyaWN0CisJCSAqIENF U1UtOCBkZWNvZGVyIGhlcmU/CisJCSAqLworCQllbmNfY3R4LmxlYWQgPSAweDAwMDBMOworCQll bmNfY3R4Lm91dCA9IG91dHB1dDsKKwkJZHVrX2RlY29kZV9zdHJpbmcodGhyLCAwLCBkdWtfX3V0 ZjhfZW5jb2RlX2NoYXIsICh2b2lkICopICZlbmNfY3R4KTsKKwkJaWYgKGVuY19jdHgubGVhZCAh PSAweDAwMDBMKSB7CisJCQkvKiB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSBhdCBlbmQgb2Ygc3Ry aW5nICovCisJCQllbmNfY3R4Lm91dCA9IGR1a19fdXRmOF9lbWl0X3JlcGwoZW5jX2N0eC5vdXQp OworCQkJRFVLX0FTU0VSVChlbmNfY3R4Lm91dCA8PSBvdXRwdXQgKyAoMyAqIGxlbikpOworCQl9 CisKKwkJLyogVGhlIG91dHB1dCBidWZmZXIgaXMgdXN1YWxseSB2ZXJ5IG11Y2ggb3ZlcnNpemVk LCBzbyBzaHJpbmsgaXQgdG8KKwkJICogYWN0dWFsbHkgbmVlZGVkIHNpemUuICBQb2ludGVyIHN0 YWJpbGl0eSBhc3N1bWVkIHVwIHRvIHRoaXMgcG9pbnQuCisJCSAqLworCQlEVUtfQVNTRVJUX1RP UCh0aHIsIDIpOworCQlEVUtfQVNTRVJUKG91dHB1dCA9PSAoZHVrX3VpbnQ4X3QgKikgZHVrX2dl dF9idWZmZXJfZGF0YSh0aHIsIC0xLCBOVUxMKSk7CisKKwkJZmluYWxfbGVuID0gKGR1a19zaXpl X3QpIChlbmNfY3R4Lm91dCAtIG91dHB1dCk7CisJCWR1a19yZXNpemVfYnVmZmVyKHRociwgLTEs IGZpbmFsX2xlbik7CisJCS8qICdvdXRwdXQnIGFuZCAnZW5jX2N0eC5vdXQnIGFyZSBwb3RlbnRp YWxseSBpbnZhbGlkYXRlZCBieSB0aGUgcmVzaXplLiAqLworCX0gZWxzZSB7CisJCWZpbmFsX2xl biA9IDA7CisJfQorCisJLyogU3RhbmRhcmQgV0hBVFdHIG91dHB1dCBpcyBhIFVpbnQ4QXJyYXku ICBIZXJlIHRoZSBVaW50OEFycmF5IHdpbGwKKwkgKiBiZSBiYWNrZWQgYnkgYSBkeW5hbWljIGJ1 ZmZlciB3aGljaCBkaWZmZXJzIGZyb20gZS5nLiBVaW50OEFycmF5cworCSAqIGNyZWF0ZWQgYXMg J25ldyBVaW50OEFycmF5KE4pJy4gIEVDTUFTY3JpcHQgY29kZSB3b24ndCBzZWUgdGhlCisJICog ZGlmZmVyZW5jZSBidXQgQyBjb2RlIHdpbGwuICBXaGVuIGJ1ZmZlcm9iamVjdHMgYXJlIG5vdCBz dXBwb3J0ZWQsCisJICogcmV0dXJucyBhIHBsYWluIGR5bmFtaWMgYnVmZmVyLgorCSAqLworI2lm IGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKwlkdWtfcHVzaF9idWZmZXJf b2JqZWN0KHRociwgLTEsIDAsIGZpbmFsX2xlbiwgRFVLX0JVRk9CSl9VSU5UOEFSUkFZKTsKKyNl bmRpZgorCXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV90ZXh0 ZGVjb2Rlcl9jb25zdHJ1Y3RvcihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19kZWNvZGVfY29u dGV4dCAqZGVjX2N0eDsKKwlkdWtfYm9vbF90IGZhdGFsID0gMDsKKwlkdWtfYm9vbF90IGlnbm9y ZV9ib20gPSAwOworCisJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKwlkdWtfcmVxdWlyZV9jb25z dHJ1Y3Rvcl9jYWxsKHRocik7CisJaWYgKCFkdWtfaXNfdW5kZWZpbmVkKHRociwgMCkpIHsKKwkJ LyogWFhYOiBGb3Igbm93IGlnbm9yZSAnbGFiZWwnIChlbmNvZGluZyBpZGVudGlmaWVyKS4gKi8K KwkJZHVrX3RvX3N0cmluZyh0aHIsIDApOworCX0KKwlpZiAoIWR1a19pc19udWxsX29yX3VuZGVm aW5lZCh0aHIsIDEpKSB7CisJCWlmIChkdWtfZ2V0X3Byb3BfbGl0ZXJhbCh0aHIsIDEsICJmYXRh bCIpKSB7CisJCQlmYXRhbCA9IGR1a190b19ib29sZWFuKHRociwgLTEpOworCQl9CisJCWlmIChk dWtfZ2V0X3Byb3BfbGl0ZXJhbCh0aHIsIDEsICJpZ25vcmVCT00iKSkgeworCQkJaWdub3JlX2Jv bSA9IGR1a190b19ib29sZWFuKHRociwgLTEpOworCQl9CisJfQorCisJZHVrX3B1c2hfdGhpcyh0 aHIpOworCisJLyogVGhlIGRlY29kZSBjb250ZXh0IGlzIG5vdCBhc3N1bWVkIHRvIGJlIHplcm9l ZDsgYWxsIGZpZWxkcyBhcmUKKwkgKiBpbml0aWFsaXplZCBleHBsaWNpdGx5LgorCSAqLworCWRl Y19jdHggPSAoZHVrX19kZWNvZGVfY29udGV4dCAqKSBkdWtfcHVzaF9maXhlZF9idWZmZXIodGhy LCBzaXplb2YoZHVrX19kZWNvZGVfY29udGV4dCkpOworCWRlY19jdHgtPmZhdGFsID0gKGR1a191 aW50OF90KSBmYXRhbDsKKwlkZWNfY3R4LT5pZ25vcmVfYm9tID0gKGR1a191aW50OF90KSBpZ25v cmVfYm9tOworCWR1a19fdXRmOF9kZWNvZGVfaW5pdChkZWNfY3R4KTsgIC8qIEluaXRpYWxpemVz IHJlbWFpbmluZyBmaWVsZHMuICovCisKKwlkdWtfcHV0X3Byb3BfbGl0ZXJhbCh0aHIsIC0yLCBE VUtfSU5URVJOQUxfU1lNQk9MKCJDb250ZXh0IikpOworCXJldHVybiAwOworfQorCisvKiBHZXQg VGV4dERlY29kZXIgY29udGV4dCBmcm9tICd0aGlzJzsgbGVhdmVzIGdhcmJhZ2Ugb24gc3RhY2su ICovCitEVUtfTE9DQUwgZHVrX19kZWNvZGVfY29udGV4dCAqZHVrX19nZXRfdGV4dGRlY29kZXJf Y29udGV4dChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19kZWNvZGVfY29udGV4dCAqZGVjX2N0 eDsKKwlkdWtfcHVzaF90aGlzKHRocik7CisJZHVrX2dldF9wcm9wX2xpdGVyYWwodGhyLCAtMSwg RFVLX0lOVEVSTkFMX1NZTUJPTCgiQ29udGV4dCIpKTsKKwlkZWNfY3R4ID0gKGR1a19fZGVjb2Rl X2NvbnRleHQgKikgZHVrX3JlcXVpcmVfYnVmZmVyKHRociwgLTEsIE5VTEwpOworCURVS19BU1NF UlQoZGVjX2N0eCAhPSBOVUxMKTsKKwlyZXR1cm4gZGVjX2N0eDsKK30KKworRFVLX0lOVEVSTkFM IGR1a19yZXRfdCBkdWtfYmlfdGV4dGRlY29kZXJfcHJvdG90eXBlX3NoYXJlZF9nZXR0ZXIoZHVr X2h0aHJlYWQgKnRocikgeworCWR1a19fZGVjb2RlX2NvbnRleHQgKmRlY19jdHg7CisJZHVrX2lu dF90IG1hZ2ljOworCisJZGVjX2N0eCA9IGR1a19fZ2V0X3RleHRkZWNvZGVyX2NvbnRleHQodGhy KTsKKwltYWdpYyA9IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworCXN3aXRjaCAobWFnaWMp IHsKKwljYXNlIDA6CisJCS8qIEVuY29kaW5nIGlzIG5vdyBmaXhlZCwgc28gX0NvbnRleHQgbG9v a3VwIGlzIG9ubHkgbmVlZGVkIHRvCisJCSAqIHZhbGlkYXRlIHRoZSAndGhpcycgYmluZGluZyAo VHlwZUVycm9yIGlmIG5vdCBUZXh0RGVjb2Rlci1saWtlKS4KKwkJICovCisJCWR1a19wdXNoX2xp dGVyYWwodGhyLCAidXRmLTgiKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkdWtfcHVzaF9ib29s ZWFuKHRociwgZGVjX2N0eC0+ZmF0YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkdWtfcHVz aF9ib29sZWFuKHRociwgZGVjX2N0eC0+aWdub3JlX2JvbSk7CisJCWJyZWFrOworCX0KKworCXJl dHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV90ZXh0ZGVjb2Rlcl9w cm90b3R5cGVfZGVjb2RlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfX2RlY29kZV9jb250ZXh0 ICpkZWNfY3R4OworCisJZGVjX2N0eCA9IGR1a19fZ2V0X3RleHRkZWNvZGVyX2NvbnRleHQodGhy KTsKKwlyZXR1cm4gZHVrX19kZWNvZGVfaGVscGVyKHRociwgZGVjX2N0eCk7Cit9CisjZW5kaWYg IC8qIERVS19VU0VfRU5DT0RJTkdfQlVJTFRJTlMgKi8KKworLyoKKyAqICBJbnRlcm5hbCBoZWxw ZXIgZm9yIE5vZGUuanMgQnVmZmVyCisgKi8KKworLyogSW50ZXJuYWwgaGVscGVyIHVzZWQgZm9y IE5vZGUuanMgQnVmZmVyIC50b1N0cmluZygpLiAgVmFsdWUgc3RhY2sgY29udmVudGlvbgorICog aXMgY3VycmVudGx5IG9kZDogaXQgbWltaWNzIFRleHREZWNvZGVyIC5kZWNvZGUoKSBzbyB0aGF0 IGFyZ3VtZW50IG11c3QgYmUgYXQKKyAqIGluZGV4IDAsIGFuZCBkZWNvZGUgb3B0aW9ucyAobm90 IHByZXNlbnQgZm9yIEJ1ZmZlcikgYXQgaW5kZXggMS4gIFJldHVybiB2YWx1ZQorICogaXMgYSBE dWt0YXBlL0MgZnVuY3Rpb24gcmV0dXJuIHZhbHVlLgorICovCitEVUtfSU5URVJOQUwgZHVrX3Jl dF90IGR1a190ZXh0ZGVjb2Rlcl9kZWNvZGVfdXRmOF9ub2RlanMoZHVrX2h0aHJlYWQgKnRocikg eworCWR1a19fZGVjb2RlX2NvbnRleHQgZGVjX2N0eDsKKworCWRlY19jdHguZmF0YWwgPSAwOyAg LyogdXNlIHJlcGxhY2VtZW50IGNoYXJzICovCisJZGVjX2N0eC5pZ25vcmVfYm9tID0gMTsgIC8q IGlnbm9yZSBCT01zIChtYXRjaGVzIE5vZGUuanMgQnVmZmVyIC50b1N0cmluZygpKSAqLworCWR1 a19fdXRmOF9kZWNvZGVfaW5pdCgmZGVjX2N0eCk7CisKKwlyZXR1cm4gZHVrX19kZWNvZGVfaGVs cGVyKHRociwgJmRlY19jdHgpOworfQorCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYg RFVLX19DUF9DT05USU5VRQorI3VuZGVmIERVS19fQ1BfRVJST1IKKyN1bmRlZiBEVUtfX0NQX1JF VFJZCisvKgorICogIEVycm9yIGJ1aWx0LWlucworICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRl cm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBk dWtfYmlfZXJyb3JfY29uc3RydWN0b3Jfc2hhcmVkKGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiBC ZWhhdmlvciBmb3IgY29uc3RydWN0b3IgYW5kIG5vbi1jb25zdHJ1Y3RvciBjYWxsIGlzCisJICog dGhlIHNhbWUgZXhjZXB0IGZvciBhdWdtZW50aW5nIHRoZSBjcmVhdGVkIGVycm9yLiAgV2hlbgor CSAqIGNhbGxlZCBhcyBhIGNvbnN0cnVjdG9yLCB0aGUgY2FsbGVyIChkdWtfbmV3KCkpIHdpbGwg aGFuZGxlCisJICogYXVnbWVudGF0aW9uOyB3aGVuIGNhbGxlZCBhcyBub3JtYWwgZnVuY3Rpb24s IHdlIG5lZWQgdG8gZG8KKwkgKiBpdCBoZXJlLgorCSAqLworCisJZHVrX3NtYWxsX2ludF90IGJp ZHhfcHJvdG90eXBlID0gZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisKKwkvKiBzYW1lIGZv ciBib3RoIGVycm9yIGFuZCBlYWNoIHN1YmNsYXNzIGxpa2UgVHlwZUVycm9yICovCisJZHVrX3Vp bnRfdCBmbGFnc19hbmRfY2xhc3MgPSBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUyB8CisJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhE VUtfSE9CSkVDVF9DTEFTU19FUlJPUik7CisKKwkodm9pZCkgZHVrX3B1c2hfb2JqZWN0X2hlbHBl cih0aHIsIGZsYWdzX2FuZF9jbGFzcywgYmlkeF9wcm90b3R5cGUpOworCisJLyogSWYgbWVzc2Fn ZSBpcyB1bmRlZmluZWQsIHRoZSBvd24gcHJvcGVydHkgJ21lc3NhZ2UnIGlzIG5vdCBzZXQgYXQK KwkgKiBhbGwgdG8gc2F2ZSBwcm9wZXJ0eSBzcGFjZS4gIEFuIGVtcHR5IG1lc3NhZ2UgaXMgaW5o ZXJpdGVkIGFueXdheS4KKwkgKi8KKwlpZiAoIWR1a19pc191bmRlZmluZWQodGhyLCAwKSkgewor CQlkdWtfdG9fc3RyaW5nKHRociwgMCk7CisJCWR1a19kdXBfMCh0aHIpOyAgLyogWyBtZXNzYWdl IGVycm9yIG1lc3NhZ2UgXSAqLworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0y LCBEVUtfU1RSSURYX01FU1NBR0UsIERVS19QUk9QREVTQ19GTEFHU19XQyk7CisJfQorCisJLyog QXVnbWVudCB0aGUgZXJyb3IgaWYgY2FsbGVkIGFzIGEgbm9ybWFsIGZ1bmN0aW9uLiAgX19GSUxF X18gYW5kIF9fTElORV9fCisJICogYXJlIG5vdCBkZXNpcmFibGUgaW4gdGhpcyBjYXNlLgorCSAq LworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJST1JfQ1JFQVRFKQorCWlmICghZHVr X2lzX2NvbnN0cnVjdG9yX2NhbGwodGhyKSkgeworCQlkdWtfZXJyX2F1Z21lbnRfZXJyb3JfY3Jl YXRlKHRociwgdGhyLCBOVUxMLCAwLCBEVUtfQVVHTUVOVF9GTEFHX05PQkxBTUVfRklMRUxJTkUp OworCX0KKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV90b19zdHJpbmcoZHVrX2h0aHJlYWQgKnRocikgeworCS8q IFhYWDogb3B0aW1pemUgd2l0aCBtb3JlIGRpcmVjdCBpbnRlcm5hbCBhY2Nlc3MgKi8KKworCWR1 a19wdXNoX3RoaXModGhyKTsKKwkodm9pZCkgZHVrX3JlcXVpcmVfaG9iamVjdF9wcm9tb3RlX21h c2sodGhyLCAtMSwgRFVLX1RZUEVfTUFTS19MSUdIVEZVTkMgfCBEVUtfVFlQRV9NQVNLX0JVRkZF Uik7CisKKwkvKiBbIC4uLiB0aGlzIF0gKi8KKworCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQo dGhyLCAtMSwgRFVLX1NUUklEWF9OQU1FKTsKKwlpZiAoZHVrX2lzX3VuZGVmaW5lZCh0aHIsIC0x KSkgeworCQlkdWtfcG9wKHRocik7CisJCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiRXJyb3IiKTsK Kwl9IGVsc2UgeworCQlkdWtfdG9fc3RyaW5nKHRociwgLTEpOworCX0KKworCS8qIFsgLi4uIHRo aXMgbmFtZSBdICovCisKKwkvKiBYWFg6IEFyZSBzdGVwcyA2IGFuZCA3IGluIEU1IFNlY3Rpb24g MTUuMTEuNC40IGR1cGxpY2F0ZWQgYnkKKwkgKiBhY2NpZGVudCBvciBhcmUgdGhleSBhY3R1YWxs eSBuZWVkZWQ/ICBUaGUgZmlyc3QgVG9TdHJpbmcoKQorCSAqIGNvdWxkIGNvbmNlaXZhYmx5IHJl dHVybiAndW5kZWZpbmVkJy4KKwkgKi8KKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg LTIsIERVS19TVFJJRFhfTUVTU0FHRSk7CisJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAtMSkp IHsKKwkJZHVrX3BvcCh0aHIpOworCQlkdWtfcHVzaF9oc3RyaW5nX2VtcHR5KHRocik7CisJfSBl bHNlIHsKKwkJZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsKKwl9CisKKwkvKiBbIC4uLiB0aGlzIG5h bWUgbWVzc2FnZSBdICovCisKKwlpZiAoZHVrX2dldF9sZW5ndGgodGhyLCAtMikgPT0gMCkgewor CQkvKiBuYW1lIGlzIGVtcHR5IC0+IHJldHVybiBtZXNzYWdlICovCisJCXJldHVybiAxOworCX0K KwlpZiAoZHVrX2dldF9sZW5ndGgodGhyLCAtMSkgPT0gMCkgeworCQkvKiBtZXNzYWdlIGlzIGVt cHR5IC0+IHJldHVybiBuYW1lICovCisJCWR1a19wb3AodGhyKTsKKwkJcmV0dXJuIDE7CisJfQor CWR1a19wdXNoX2xpdGVyYWwodGhyLCAiOiAiKTsKKwlkdWtfaW5zZXJ0KHRociwgLTIpOyAgLyog Li4uIG5hbWUgJzogJyBtZXNzYWdlICovCisJZHVrX2NvbmNhdCh0aHIsIDMpOworCisJcmV0dXJu IDE7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfVFJBQ0VCQUNLUykKKworLyoKKyAqICBUcmFj ZWJhY2sgaGFuZGxpbmcKKyAqCisgKiAgVGhlIHVuaWZpZWQgaGVscGVyIGRlY29kZXMgdGhlIHRy YWNlYmFjayBhbmQgcHJvZHVjZXMgdmFyaW91cyByZXF1ZXN0ZWQKKyAqICBvdXRwdXRzLiAgSXQg c2hvdWxkIGJlIG9wdGltaXplZCBmb3Igc2l6ZSwgYW5kIG1heSBsZWF2ZSBnYXJiYWdlIG9uIHN0 YWNrLAorICogIG9ubHkgdGhlIHRvcG1vc3QgcmV0dXJuIHZhbHVlIG1hdHRlcnMuICBGb3IgaW5z dGFuY2UsIHRyYWNlYmFjayBzZXBhcmF0b3IKKyAqICBhbmQgZGVjb2RlZCBzdHJpbmdzIGFyZSBw dXNoZWQgZXZlbiB3aGVuIGxvb2tpbmcgZm9yIGZpbGVuYW1lIG9ubHkuCisgKgorICogIE5PVEU6 IGFsdGhvdWdoIF9UcmFjZWRhdGEgaXMgYW4gaW50ZXJuYWwgcHJvcGVydHksIHVzZXIgY29kZSBj YW4gY3VycmVudGx5CisgKiAgd3JpdGUgdG8gdGhlIGFycmF5IChvciByZXBsYWNlIGl0IHdpdGgg c29tZXRoaW5nIG90aGVyIHRoYW4gYW4gYXJyYXkpLgorICogIFRoZSBjb2RlIGJlbG93IG11c3Qg dG9sZXJhdGUgYXJiaXRyYXJ5IF9UcmFjZWRhdGEuICBJdCBjYW4gdGhyb3cgZXJyb3JzCisgKiAg ZXRjLCBidXQgY2Fubm90IGNhdXNlIGEgc2VnZmF1bHQgb3IgbWVtb3J5IHVuc2FmZSBiZWhhdmlv ci4KKyAqLworCisvKiBjb25zdGFudHMgYXJiaXRyYXJ5LCBjaG9zZW4gZm9yIHNtYWxsIGxvYWRz ICovCisjZGVmaW5lIERVS19fT1VUUFVUX1RZUEVfVFJBQ0VCQUNLICAgKC0xKQorI2RlZmluZSBE VUtfX09VVFBVVF9UWVBFX0ZJTEVOQU1FICAgIDAKKyNkZWZpbmUgRFVLX19PVVRQVVRfVFlQRV9M SU5FTlVNQkVSICAxCisKK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19lcnJvcl9nZXR0ZXJfaGVs cGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19zbWFsbF9pbnRfdCBvdXRwdXRfdHlwZSkgeworCWR1 a19pZHhfdCBpZHhfdGQ7CisJZHVrX3NtYWxsX2ludF90IGk7ICAvKiB0cmFjZWJhY2sgZGVwdGgg Zml0cyBpbnRvIDE2IGJpdHMgKi8KKwlkdWtfc21hbGxfaW50X3QgdDsgIC8qIHN0YWNrIHR5cGUg Zml0cyBpbnRvIDE2IGJpdHMgKi8KKwlkdWtfc21hbGxfaW50X3QgY291bnRfZnVuYyA9IDA7ICAv KiB0cmFjZWJhY2sgZGVwdGggZW5zdXJlcyBmaXRzIGludG8gMTYgYml0cyAqLworCWNvbnN0IGNo YXIgKnN0cl90YWlsY2FsbCA9ICIgdGFpbGNhbGwiOworCWNvbnN0IGNoYXIgKnN0cl9zdHJpY3Qg PSAiIHN0cmljdCI7CisJY29uc3QgY2hhciAqc3RyX2NvbnN0cnVjdCA9ICIgY29uc3RydWN0IjsK Kwljb25zdCBjaGFyICpzdHJfcHJldnlpZWxkID0gIiBwcmV2ZW50c3lpZWxkIjsKKwljb25zdCBj aGFyICpzdHJfZGlyZWN0ZXZhbCA9ICIgZGlyZWN0ZXZhbCI7CisJY29uc3QgY2hhciAqc3RyX2Vt cHR5ID0gIiI7CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDApOyAgLyogZml4ZWQgYXJnIGNvdW50 ICovCisKKwlkdWtfcHVzaF90aGlzKHRocik7CisJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0 aHIsIC0xLCBEVUtfU1RSSURYX0lOVF9UUkFDRURBVEEpOworCWlkeF90ZCA9IGR1a19nZXRfdG9w X2luZGV4KHRocik7CisKKwlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIERVS19TVFJJRFhf TkVXTElORV80U1BBQ0UpOworCWR1a19wdXNoX3RoaXModGhyKTsKKworCS8qIFsgLi4uIHRoaXMg dHJhY2VkYXRhIHNlcCB0aGlzIF0gKi8KKworCS8qIFhYWDogc2tpcCBudWxsIGZpbGVuYW1lPyAq LworCisJaWYgKGR1a19jaGVja190eXBlKHRociwgaWR4X3RkLCBEVUtfVFlQRV9PQkpFQ1QpKSB7 CisJCS8qIEN1cnJlbnQgdHJhY2VkYXRhIGNvbnRhaW5zIDIgZW50cmllcyBwZXIgY2FsbHN0YWNr IGVudHJ5LiAqLworCQlmb3IgKGkgPSAwOyA7IGkgKz0gMikgeworCQkJZHVrX2ludF90IHBjOwor CQkJZHVrX3VpbnRfdCBsaW5lOworCQkJZHVrX3VpbnRfdCBmbGFnczsKKwkJCWR1a19kb3VibGVf dCBkOworCQkJY29uc3QgY2hhciAqZnVuY25hbWU7CisJCQljb25zdCBjaGFyICpmaWxlbmFtZTsK KwkJCWR1a19ob2JqZWN0ICpoX2Z1bmM7CisJCQlkdWtfaHN0cmluZyAqaF9uYW1lOworCisJCQlk dWtfcmVxdWlyZV9zdGFjayh0aHIsIDUpOworCQkJZHVrX2dldF9wcm9wX2luZGV4KHRociwgaWR4 X3RkLCAoZHVrX3VhcnJpZHhfdCkgaSk7CisJCQlkdWtfZ2V0X3Byb3BfaW5kZXgodGhyLCBpZHhf dGQsIChkdWtfdWFycmlkeF90KSAoaSArIDEpKTsKKwkJCWQgPSBkdWtfdG9fbnVtYmVyX20xKHRo cik7CisJCQlwYyA9IGR1a19kb3VibGVfdG9faW50X3QoRFVLX0ZNT0QoZCwgRFVLX0RPVUJMRV8y VE8zMikpOworCQkJZmxhZ3MgPSBkdWtfZG91YmxlX3RvX3VpbnRfdChEVUtfRkxPT1IoZCAvIERV S19ET1VCTEVfMlRPMzIpKTsKKwkJCXQgPSAoZHVrX3NtYWxsX2ludF90KSBkdWtfZ2V0X3R5cGUo dGhyLCAtMik7CisKKwkJCWlmICh0ID09IERVS19UWVBFX09CSkVDVCB8fCB0ID09IERVS19UWVBF X0xJR0hURlVOQykgeworCQkJCS8qCisJCQkJICogIEVDTUFTY3JpcHQvbmF0aXZlIGZ1bmN0aW9u IGNhbGwgb3IgbGlnaHRmdW5jIGNhbGwKKwkJCQkgKi8KKworCQkJCWNvdW50X2Z1bmMrKzsKKwor CQkJCS8qIFsgLi4uIHYxKGZ1bmMpIHYyKHBjK2ZsYWdzKSBdICovCisKKwkJCQkvKiBUaGVzZSBt YXkgYmUgc3lzdGVtYXRpY2FsbHkgb21pdHRlZCBieSBEdWt0YXBlCisJCQkJICogd2l0aCBjZXJ0 YWluIGNvbmZpZyBvcHRpb25zLCBidXQgYWxsb3cgdXNlciB0bworCQkJCSAqIHNldCB0aGVtIG9u IGEgY2FzZS1ieS1jYXNlIGJhc2lzLgorCQkJCSAqLworCQkJCWR1a19nZXRfcHJvcF9zdHJpZHhf c2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9OQU1FKTsKKwkJCQlkdWtfZ2V0X3Byb3Bfc3RyaWR4 X3Nob3J0KHRociwgLTMsIERVS19TVFJJRFhfRklMRV9OQU1FKTsKKworI2lmIGRlZmluZWQoRFVL X1VTRV9QQzJMSU5FKQorCQkJCWxpbmUgPSAoZHVrX3VpbnRfdCkgZHVrX2hvYmplY3RfcGMybGlu ZV9xdWVyeSh0aHIsIC00LCAoZHVrX3VpbnRfZmFzdDMyX3QpIHBjKTsKKyNlbHNlCisJCQkJbGlu ZSA9IDA7CisjZW5kaWYKKworCQkJCS8qIFsgLi4uIHYxIHYyIG5hbWUgZmlsZW5hbWUgXSAqLwor CisJCQkJLyogV2hlbiBsb29raW5nIGZvciAuZmlsZU5hbWUvLmxpbmVOdW1iZXIsIGJsYW1lIGZp cnN0CisJCQkJICogZnVuY3Rpb24gd2hpY2ggaGFzIGEgLmZpbGVOYW1lLgorCQkJCSAqLworCQkJ CWlmIChkdWtfaXNfc3RyaW5nX25vdHN5bWJvbCh0aHIsIC0xKSkgeworCQkJCQlpZiAob3V0cHV0 X3R5cGUgPT0gRFVLX19PVVRQVVRfVFlQRV9GSUxFTkFNRSkgeworCQkJCQkJcmV0dXJuIDE7CisJ CQkJCX0gZWxzZSBpZiAob3V0cHV0X3R5cGUgPT0gRFVLX19PVVRQVVRfVFlQRV9MSU5FTlVNQkVS KSB7CisJCQkJCQlkdWtfcHVzaF91aW50KHRociwgbGluZSk7CisJCQkJCQlyZXR1cm4gMTsKKwkJ CQkJfQorCQkJCX0KKworCQkJCS8qIFhYWDogQ2hhbmdlICdhbm9uJyBoYW5kbGluZyBoZXJlIHRv bywgdG8gdXNlIGVtcHR5IHN0cmluZyBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucz8gKi8KKwkJCQkv KiBYWFg6IENvdWxkIGJlIGltcHJvdmVkIGJ5IGNvZXJjaW5nIHRvIGEgcmVhZGFibGUgZHVrX3R2 YWwgKGVzcGVjaWFsbHkgc3RyaW5nIGVzY2FwaW5nKSAqLworCQkJCWhfbmFtZSA9IGR1a19nZXRf aHN0cmluZ19ub3RzeW1ib2wodGhyLCAtMik7ICAvKiBtYXkgYmUgTlVMTCAqLworCQkJCWZ1bmNu YW1lID0gKGhfbmFtZSA9PSBOVUxMIHx8IGhfbmFtZSA9PSBEVUtfSFRIUkVBRF9TVFJJTkdfRU1Q VFlfU1RSSU5HKHRocikpID8KKwkJCQkgICAgICAgICAgICJbYW5vbl0iIDogKGNvbnN0IGNoYXIg KikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9uYW1lKTsKKwkJCQlmaWxlbmFtZSA9IGR1a19nZXRf c3RyaW5nX25vdHN5bWJvbCh0aHIsIC0xKTsKKwkJCQlmaWxlbmFtZSA9IGZpbGVuYW1lID8gZmls ZW5hbWUgOiAiIjsKKwkJCQlEVUtfQVNTRVJUKGZ1bmNuYW1lICE9IE5VTEwpOworCQkJCURVS19B U1NFUlQoZmlsZW5hbWUgIT0gTlVMTCk7CisKKwkJCQloX2Z1bmMgPSBkdWtfZ2V0X2hvYmplY3Qo dGhyLCAtNCk7ICAvKiBOVUxMIGZvciBsaWdodGZ1bmMgKi8KKworCQkJCWlmIChoX2Z1bmMgPT0g TlVMTCkgeworCQkJCQlkdWtfcHVzaF9zcHJpbnRmKHRociwgImF0ICVzIGxpZ2h0JXMlcyVzJXMl cyIsCisJCQkJCSAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgZnVuY25hbWUsCisJCQkJ CSAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgKChmbGFncyAmIERVS19BQ1RfRkxBR19T VFJJQ1QpID8gc3RyX3N0cmljdCA6IHN0cl9lbXB0eSksCisJCQkJCSAgICAgICAgICAgICAgICAg KGNvbnN0IGNoYXIgKikgKChmbGFncyAmIERVS19BQ1RfRkxBR19UQUlMQ0FMTEVEKSA/IHN0cl90 YWlsY2FsbCA6IHN0cl9lbXB0eSksCisJCQkJCSAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIg KikgKChmbGFncyAmIERVS19BQ1RfRkxBR19DT05TVFJVQ1QpID8gc3RyX2NvbnN0cnVjdCA6IHN0 cl9lbXB0eSksCisJCQkJCSAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgKChmbGFncyAm IERVS19BQ1RfRkxBR19ESVJFQ1RfRVZBTCkgPyBzdHJfZGlyZWN0ZXZhbCA6IHN0cl9lbXB0eSks CisJCQkJCSAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgKChmbGFncyAmIERVS19BQ1Rf RkxBR19QUkVWRU5UX1lJRUxEKSA/IHN0cl9wcmV2eWllbGQgOiBzdHJfZW1wdHkpKTsKKwkJCQl9 IGVsc2UgaWYgKERVS19IT0JKRUNUX0hBU19OQVRGVU5DKGhfZnVuYykpIHsKKwkJCQkJZHVrX3B1 c2hfc3ByaW50Zih0aHIsICJhdCAlcyAoJXMpIG5hdGl2ZSVzJXMlcyVzJXMiLAorCQkJCQkgICAg ICAgICAgICAgICAgIChjb25zdCBjaGFyICopIGZ1bmNuYW1lLAorCQkJCQkgICAgICAgICAgICAg ICAgIChjb25zdCBjaGFyICopIGZpbGVuYW1lLAorCQkJCQkgICAgICAgICAgICAgICAgIChjb25z dCBjaGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfU1RSSUNUKSA/IHN0cl9zdHJpY3QgOiBz dHJfZW1wdHkpLAorCQkJCQkgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopICgoZmxhZ3Mg JiBEVUtfQUNUX0ZMQUdfVEFJTENBTExFRCkgPyBzdHJfdGFpbGNhbGwgOiBzdHJfZW1wdHkpLAor CQkJCQkgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZM QUdfQ09OU1RSVUNUKSA/IHN0cl9jb25zdHJ1Y3QgOiBzdHJfZW1wdHkpLAorCQkJCQkgICAgICAg ICAgICAgICAgIChjb25zdCBjaGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfRElSRUNUX0VW QUwpID8gc3RyX2RpcmVjdGV2YWwgOiBzdHJfZW1wdHkpLAorCQkJCQkgICAgICAgICAgICAgICAg IChjb25zdCBjaGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfUFJFVkVOVF9ZSUVMRCkgPyBz dHJfcHJldnlpZWxkIDogc3RyX2VtcHR5KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZHVrX3B1c2hf c3ByaW50Zih0aHIsICJhdCAlcyAoJXM6JWx1KSVzJXMlcyVzJXMiLAorCQkJCQkgICAgICAgICAg ICAgICAgIChjb25zdCBjaGFyICopIGZ1bmNuYW1lLAorCQkJCQkgICAgICAgICAgICAgICAgIChj b25zdCBjaGFyICopIGZpbGVuYW1lLAorCQkJCQkgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nKSBsaW5lLAorCQkJCQkgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopICgoZmxhZ3Mg JiBEVUtfQUNUX0ZMQUdfU1RSSUNUKSA/IHN0cl9zdHJpY3QgOiBzdHJfZW1wdHkpLAorCQkJCQkg ICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfVEFJ TENBTExFRCkgPyBzdHJfdGFpbGNhbGwgOiBzdHJfZW1wdHkpLAorCQkJCQkgICAgICAgICAgICAg ICAgIChjb25zdCBjaGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfQ09OU1RSVUNUKSA/IHN0 cl9jb25zdHJ1Y3QgOiBzdHJfZW1wdHkpLAorCQkJCQkgICAgICAgICAgICAgICAgIChjb25zdCBj aGFyICopICgoZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfRElSRUNUX0VWQUwpID8gc3RyX2RpcmVjdGV2 YWwgOiBzdHJfZW1wdHkpLAorCQkJCQkgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopICgo ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfUFJFVkVOVF9ZSUVMRCkgPyBzdHJfcHJldnlpZWxkIDogc3Ry X2VtcHR5KSk7CisJCQkJfQorCQkJCWR1a19yZXBsYWNlKHRociwgLTUpOyAgIC8qIFsgLi4uIHYx IHYyIG5hbWUgZmlsZW5hbWUgc3RyIF0gLT4gWyAuLi4gc3RyIHYyIG5hbWUgZmlsZW5hbWUgXSAq LworCQkJCWR1a19wb3BfMyh0aHIpOyAgICAgICAgIC8qIC0+IFsgLi4uIHN0ciBdICovCisJCQl9 IGVsc2UgaWYgKHQgPT0gRFVLX1RZUEVfU1RSSU5HKSB7CisJCQkJY29uc3QgY2hhciAqc3RyX2Zp bGU7CisKKwkJCQkvKgorCQkJCSAqICBfX0ZJTEVfXyAvIF9fTElORV9fIGVudHJ5LCBoZXJlICdw YycgaXMgbGluZSBudW1iZXIgZGlyZWN0bHkuCisJCQkJICogIFNvbWV0aW1lcyBfX0ZJTEVfXyAv IF9fTElORV9fIGlzIHJlcG9ydGVkIGFzIHRoZSBzb3VyY2UgZm9yCisJCQkJICogIHRoZSBlcnJv ciAoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCBzb21ldGltZXMgbm90LgorCQkJCSAqLworCisJCQkJ LyogWyAuLi4gdjEoZmlsZW5hbWUpIHYyKGxpbmUrZmxhZ3MpIF0gKi8KKworCQkJCS8qIFdoZW4g bG9va2luZyBmb3IgLmZpbGVOYW1lLy5saW5lTnVtYmVyLCBibGFtZSBjb21waWxhdGlvbgorCQkJ CSAqIG9yIEMgY2FsbCBzaXRlIHVubGVzcyBmbGFnZ2VkIG5vdCB0byBkbyBzby4KKwkJCQkgKi8K KwkJCQlpZiAoIShmbGFncyAmIERVS19UQl9GTEFHX05PQkxBTUVfRklMRUxJTkUpKSB7CisJCQkJ CWlmIChvdXRwdXRfdHlwZSA9PSBEVUtfX09VVFBVVF9UWVBFX0ZJTEVOQU1FKSB7CisJCQkJCQlk dWtfcG9wKHRocik7CisJCQkJCQlyZXR1cm4gMTsKKwkJCQkJfSBlbHNlIGlmIChvdXRwdXRfdHlw ZSA9PSBEVUtfX09VVFBVVF9UWVBFX0xJTkVOVU1CRVIpIHsKKwkJCQkJCWR1a19wdXNoX2ludCh0 aHIsIHBjKTsKKwkJCQkJCXJldHVybiAxOworCQkJCQl9CisJCQkJfQorCisJCQkJLyogVHJhY2Vk YXRhIGlzIHRydXN0ZWQgYnV0IGF2b2lkIGFueSByaXNrIG9mIHVzaW5nIGEgTlVMTAorCQkJCSAq IGZvciAlcyBmb3JtYXQgYmVjYXVzZSBpdCBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yLiAgU3ltYm9s cworCQkJCSAqIGRvbid0IG5lZWQgdG8gYmUgZXhwbGljaXRseSByZWplY3RlZCBhcyB0aGV5IHBv c2Ugbm8gbWVtb3J5CisJCQkJICogc2FmZXR5IGlzc3Vlcy4KKwkJCQkgKi8KKwkJCQlzdHJfZmls ZSA9IChjb25zdCBjaGFyICopIGR1a19nZXRfc3RyaW5nKHRociwgLTIpOworCQkJCWR1a19wdXNo X3NwcmludGYodGhyLCAiYXQgW2Fub25dICglczolbGQpIGludGVybmFsIiwKKwkJCQkgICAgICAg ICAgICAgICAgIChjb25zdCBjaGFyICopIChzdHJfZmlsZSA/IHN0cl9maWxlIDogIm51bGwiKSwg KGxvbmcpIHBjKTsKKwkJCQlkdWtfcmVwbGFjZSh0aHIsIC0zKTsgIC8qIFsgLi4uIHYxIHYyIHN0 ciBdIC0+IFsgLi4uIHN0ciB2MiBdICovCisJCQkJZHVrX3BvcCh0aHIpOyAgICAgICAgICAvKiAt PiBbIC4uLiBzdHIgXSAqLworCQkJfSBlbHNlIHsKKwkJCQkvKiB1bmtub3duLCBpZ25vcmUgKi8K KwkJCQlkdWtfcG9wXzIodGhyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjb3Vu dF9mdW5jID49IERVS19VU0VfVFJBQ0VCQUNLX0RFUFRIKSB7CisJCQkvKiBQb3NzaWJseSB0cnVu Y2F0ZWQ7IHRoZXJlIGlzIG5vIGV4cGxpY2l0IHRydW5jYXRpb24KKwkJCSAqIG1hcmtlciBzbyB0 aGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkby4KKwkJCSAqLworCisJCQlkdWtfcHVzaF9oc3RyaW5n X3N0cmlkeCh0aHIsIERVS19TVFJJRFhfQlJBQ0tFVEVEX0VMTElQU0lTKTsKKwkJfQorCX0KKwor CS8qIFsgLi4uIHRoaXMgdHJhY2VkYXRhIHNlcCB0aGlzIHN0cjEgLi4uIHN0ck4gXSAqLworCisJ aWYgKG91dHB1dF90eXBlICE9IERVS19fT1VUUFVUX1RZUEVfVFJBQ0VCQUNLKSB7CisJCXJldHVy biAwOworCX0gZWxzZSB7CisJCS8qIFRoZSAndGhpcycgYWZ0ZXIgJ3NlcCcgd2lsbCBnZXQgVG9T dHJpbmcoKSBjb2VyY2VkIGJ5CisJCSAqIGR1a19qb2luKCkgYXV0b21hdGljYWxseS4gIFdlIGRv bid0IHdhbnQgdG8gZG8gdGhhdAorCQkgKiBjb2VyY2lvbiB3aGVuIHByb3ZpZGluZyAuZmlsZU5h bWUgb3IgLmxpbmVOdW1iZXIgKEdILTI1NCkuCisJCSAqLworCQlkdWtfam9pbih0aHIsIGR1a19n ZXRfdG9wKHRocikgLSAoaWR4X3RkICsgMikgLypjb3VudCwgbm90IGluY2x1ZGluZyBzZXAqLyk7 CisJCXJldHVybiAxOworCX0KK30KKworLyogWFhYOiBPdXRwdXQgdHlwZSBjb3VsZCBiZSBlbmNv ZGVkIGludG8gbmF0aXZlIGZ1bmN0aW9uICdtYWdpYycgdmFsdWUgdG8KKyAqIHNhdmUgc3BhY2Uu ICBGb3Igc2V0dGVycyB0aGUgc3RyaWR4IGNvdWxkIGJlIGVuY29kZWQgaW50byAnbWFnaWMnLgor ICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9zdGFj a19nZXR0ZXIoZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiBkdWtfX2Vycm9yX2dldHRlcl9o ZWxwZXIodGhyLCBEVUtfX09VVFBVVF9UWVBFX1RSQUNFQkFDSyk7Cit9CisKK0RVS19JTlRFUk5B TCBkdWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9maWxlbmFtZV9nZXR0ZXIoZHVrX2h0 aHJlYWQgKnRocikgeworCXJldHVybiBkdWtfX2Vycm9yX2dldHRlcl9oZWxwZXIodGhyLCBEVUtf X09VVFBVVF9UWVBFX0ZJTEVOQU1FKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtf YmlfZXJyb3JfcHJvdG90eXBlX2xpbmVudW1iZXJfZ2V0dGVyKGR1a19odGhyZWFkICp0aHIpIHsK KwlyZXR1cm4gZHVrX19lcnJvcl9nZXR0ZXJfaGVscGVyKHRociwgRFVLX19PVVRQVVRfVFlQRV9M SU5FTlVNQkVSKTsKK30KKworI2Vsc2UgIC8qIERVS19VU0VfVFJBQ0VCQUNLUyAqLworCisvKgor ICogIFRyYWNlYmFjayBoYW5kbGluZyB3aGVuIHRyYWNlYmFja3MgZGlzYWJsZWQuCisgKgorICog IFRoZSBmaWxlTmFtZSAvIGxpbmVOdW1iZXIgc3R1YnMgYXJlIG5vdyBuZWNlc3NhcnkgYmVjYXVz ZSBidWlsdC1pbgorICogIGRhdGEgd2lsbCBpbmNsdWRlIHRoZSBhY2Nlc3NvciBwcm9wZXJ0aWVz IGluIEVycm9yLnByb3RvdHlwZS4gIElmIHRob3NlCisgKiAgYXJlIHJlbW92ZWQgZm9yIGJ1aWxk cyB3aXRob3V0IHRyYWNlYmFja3MsIHRoZXNlIGNhbiBhbHNvIGJlIHJlbW92ZWQuCisgKiAgJ3N0 YWNrJyBzaG91bGQgc3RpbGwgYmUgcHJlc2VudCBhbmQgcHJvZHVjZSBhIFRvU3RyaW5nKCkgZXF1 aXZhbGVudDoKKyAqICB0aGlzIGlzIHVzZWZ1bCBmb3IgdXNlciBjb2RlIHdoaWNoIHByaW50cyBh IHN0YWNrdHJhY2UgYW5kIGV4cGVjdHMgdG8KKyAqICBzZWUgc29tZXRoaW5nIHVzZWZ1bC4gIEEg bm9ybWFsIHN0YWNrdHJhY2UgYWxzbyBiZWdpbnMgd2l0aCBhIFRvU3RyaW5nKCkKKyAqICBvZiB0 aGUgZXJyb3Igc28gdGhpcyBtYWtlcyBzZW5zZS4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3Jl dF90IGR1a19iaV9lcnJvcl9wcm90b3R5cGVfc3RhY2tfZ2V0dGVyKGR1a19odGhyZWFkICp0aHIp IHsKKwkvKiBYWFg6IHJlbW92ZSB0aGlzIG5hdGl2ZSBmdW5jdGlvbiBhbmQgbWFwICdzdGFjaycg YWNjZXNzb3IKKwkgKiB0byB0aGUgdG9TdHJpbmcoKSBpbXBsZW1lbnRhdGlvbiBkaXJlY3RseS4K KwkgKi8KKwlyZXR1cm4gZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV90b19zdHJpbmcodGhyKTsKK30K KworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZXJyb3JfcHJvdG90eXBlX2ZpbGVuYW1l X2dldHRlcihkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX1VOUkVGKHRocik7CisJcmV0dXJuIDA7 Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2Vycm9yX3Byb3RvdHlwZV9saW5l bnVtYmVyX2dldHRlcihkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX1VOUkVGKHRocik7CisJcmV0 dXJuIDA7Cit9CisKKyNlbmRpZiAgLyogRFVLX1VTRV9UUkFDRUJBQ0tTICovCisKK0RVS19MT0NB TCBkdWtfcmV0X3QgZHVrX19lcnJvcl9zZXR0ZXJfaGVscGVyKGR1a19odGhyZWFkICp0aHIsIGR1 a19zbWFsbF91aW50X3Qgc3RyaWR4X2tleSkgeworCS8qIEF0dGVtcHQgdG8gd3JpdGUgJ3N0YWNr JywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInIHdvcmtzIGFzIGlmCisJICogdXNlciBjb2RlIGNh bGxlZCBPYmplY3QuZGVmaW5lUHJvcGVydHkoKSB0byBjcmVhdGUgYW4gb3ZlcnJpZGluZworCSAq IG93biBwcm9wZXJ0eS4gIFRoaXMgYWxsb3dzIHVzZXIgY29kZSB0byBvdmVyd3JpdGUgLmZpbGVO YW1lIGV0YworCSAqIGludHVpdGl2ZWx5IGFzIGUuZy4gImVyci5maWxlTmFtZSA9ICdkdW1teSci IGFzIG9uZSBtaWdodCBleHBlY3QuCisJICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdmFhcmFs YS9kdWt0YXBlL2lzc3Vlcy8zODcuCisJICovCisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDEpOyAg LyogZml4ZWQgYXJnIGNvdW50OiB2YWx1ZSAqLworCisJZHVrX3B1c2hfdGhpcyh0aHIpOworCWR1 a19wdXNoX2hzdHJpbmdfc3RyaWR4KHRociwgc3RyaWR4X2tleSk7CisJZHVrX2R1cF8wKHRocik7 CisKKwkvKiBbIC4uLiBvYmoga2V5IHZhbHVlIF0gKi8KKworCURVS19ERChEVUtfRERQUklOVCgi ZXJyb3Igc2V0dGVyOiAlIVQgJSFUICUhVCIsCisJICAgICAgICAgICAgICAgICAgIGR1a19nZXRf dHZhbCh0aHIsIC0zKSwgZHVrX2dldF90dmFsKHRociwgLTIpLCBkdWtfZ2V0X3R2YWwodGhyLCAt MSkpKTsKKworCWR1a19kZWZfcHJvcCh0aHIsIC0zLCBEVUtfREVGUFJPUF9IQVZFX1ZBTFVFIHwK KwkgICAgICAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfSEFWRV9XUklUQUJMRSB8IERVS19E RUZQUk9QX1dSSVRBQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfSEFW RV9FTlVNRVJBQkxFIHwgLypub3QgZW51bWVyYWJsZSovCisJICAgICAgICAgICAgICAgICAgICAg IERVS19ERUZQUk9QX0hBVkVfQ09ORklHVVJBQkxFIHwgRFVLX0RFRlBST1BfQ09ORklHVVJBQkxF KTsKKwlyZXR1cm4gMDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZXJyb3Jf cHJvdG90eXBlX3N0YWNrX3NldHRlcihkdWtfaHRocmVhZCAqdGhyKSB7CisJcmV0dXJuIGR1a19f ZXJyb3Jfc2V0dGVyX2hlbHBlcih0aHIsIERVS19TVFJJRFhfU1RBQ0spOworfQorCitEVUtfSU5U RVJOQUwgZHVrX3JldF90IGR1a19iaV9lcnJvcl9wcm90b3R5cGVfZmlsZW5hbWVfc2V0dGVyKGR1 a19odGhyZWFkICp0aHIpIHsKKwlyZXR1cm4gZHVrX19lcnJvcl9zZXR0ZXJfaGVscGVyKHRociwg RFVLX1NUUklEWF9GSUxFX05BTUUpOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19i aV9lcnJvcl9wcm90b3R5cGVfbGluZW51bWJlcl9zZXR0ZXIoZHVrX2h0aHJlYWQgKnRocikgewor CXJldHVybiBkdWtfX2Vycm9yX3NldHRlcl9oZWxwZXIodGhyLCBEVUtfU1RSSURYX0xJTkVfTlVN QkVSKTsKK30KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fT1VUUFVUX1RZ UEVfRklMRU5BTUUKKyN1bmRlZiBEVUtfX09VVFBVVF9UWVBFX0xJTkVOVU1CRVIKKyN1bmRlZiBE VUtfX09VVFBVVF9UWVBFX1RSQUNFQkFDSworLyoKKyAqICBGdW5jdGlvbiBidWlsdC1pbnMKKyAq LworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisK Ky8qIE5lZWRlZCBldmVuIHdoZW4gRnVuY3Rpb24gYnVpbHQtaW4gaXMgZGlzYWJsZWQuICovCitE VUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9mdW5jdGlvbl9wcm90b3R5cGUoZHVrX2h0aHJl YWQgKnRocikgeworCS8qIGlnbm9yZSBhcmd1bWVudHMsIHJldHVybiB1bmRlZmluZWQgKEU1IFNl Y3Rpb24gMTUuMy40KSAqLworCURVS19VTlJFRih0aHIpOworCXJldHVybiAwOworfQorCisjaWYg ZGVmaW5lZChEVUtfVVNFX0ZVTkNUSU9OX0JVSUxUSU4pCitEVUtfSU5URVJOQUwgZHVrX3JldF90 IGR1a19iaV9mdW5jdGlvbl9jb25zdHJ1Y3RvcihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hz dHJpbmcgKmhfc291cmNlY29kZTsKKwlkdWtfaWR4X3QgbmFyZ3M7CisJZHVrX2lkeF90IGk7CisJ ZHVrX3NtYWxsX3VpbnRfdCBjb21wX2ZsYWdzOworCWR1a19oY29tcGZ1bmMgKmZ1bmM7CisJZHVr X2hvYmplY3QgKm91dGVyX2xleF9lbnY7CisJZHVrX2hvYmplY3QgKm91dGVyX3Zhcl9lbnY7CisK KwkvKiBub3JtYWwgYW5kIGNvbnN0cnVjdG9yIGNhbGxzIGhhdmUgaWRlbnRpY2FsIHNlbWFudGlj cyAqLworCisJbmFyZ3MgPSBkdWtfZ2V0X3RvcCh0aHIpOworCWZvciAoaSA9IDA7IGkgPCBuYXJn czsgaSsrKSB7CisJCWR1a190b19zdHJpbmcodGhyLCBpKTsgIC8qIFJlamVjdHMgU3ltYm9scyBk dXJpbmcgY29lcmNpb24uICovCisJfQorCisJaWYgKG5hcmdzID09IDApIHsKKwkJZHVrX3B1c2hf aHN0cmluZ19lbXB0eSh0aHIpOworCQlkdWtfcHVzaF9oc3RyaW5nX2VtcHR5KHRocik7CisJfSBl bHNlIGlmIChuYXJncyA9PSAxKSB7CisJCS8qIFhYWDogY292ZXIgdGhpcyB3aXRoIHRoZSBnZW5l cmljID4xIGNhc2U/ICovCisJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsKKwl9IGVsc2Ug eworCQlkdWtfaW5zZXJ0KHRociwgMCk7ICAgLyogWyBhcmcxIC4uLiBhcmdOLTEgYm9keV0gLT4g W2JvZHkgYXJnMSAuLi4gYXJnTi0xXSAqLworCQlkdWtfcHVzaF9saXRlcmFsKHRociwgIiwiKTsK KwkJZHVrX2luc2VydCh0aHIsIDEpOworCQlkdWtfam9pbih0aHIsIG5hcmdzIC0gMSk7CisJfQor CisJLyogWyBib2R5IGZvcm1hbHMgXSwgZm9ybWFscyBpcyBjb21tYSBzZXBhcmF0ZWQgbGlzdCB0 aGF0IG5lZWRzIHRvIGJlIHBhcnNlZCAqLworCisJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKwor CS8qIFhYWDogdGhpcyBwbGFjZWhvbGRlciBpcyBub3QgYWx3YXlzIGNvcnJlY3QsIGJ1dCB1c2Ug Zm9yIG5vdy4KKwkgKiBJdCB3aWxsIGZhaWwgaW4gY29ybmVyIGNhc2VzOyBzZWUgdGVzdC1kZXYt ZnVuYy1jb25zLWFyZ3MuanMuCisJICovCisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJmdW5jdGlv bigiKTsKKwlkdWtfZHVwXzEodGhyKTsKKwlkdWtfcHVzaF9saXRlcmFsKHRociwgIil7Iik7CisJ ZHVrX2R1cF8wKHRocik7CisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJcbn0iKTsgIC8qIE5ld2xp bmUgaXMgaW1wb3J0YW50IHRvIGhhbmRsZSB0cmFpbGluZyAvLyBjb21tZW50LiAqLworCWR1a19j b25jYXQodGhyLCA1KTsKKworCS8qIFsgYm9keSBmb3JtYWxzIHNvdXJjZSBdICovCisKKwlEVUtf QVNTRVJUX1RPUCh0aHIsIDMpOworCisJLyogc3RyaWN0bmVzcyBpcyBub3QgaW5oZXJpdGVkLCBp bnRlbnRpb25hbCAqLworCWNvbXBfZmxhZ3MgPSBEVUtfQ09NUElMRV9GVU5DRVhQUjsKKworCWR1 a19wdXNoX2hzdHJpbmdfc3RyaWR4KHRociwgRFVLX1NUUklEWF9DT01QSUxFKTsgIC8qIFhYWDog Y29weSBmcm9tIGNhbGxlcj8gKi8gIC8qIFhYWDogaWdub3JlZCBub3cgKi8KKwloX3NvdXJjZWNv ZGUgPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwgLTIpOyAgLyogbm8gc3ltYm9sIGNoZWNrIG5l ZWRlZDsgLTIgaXMgY29uY2F0J2QgY29kZSAqLworCWR1a19qc19jb21waWxlKHRociwKKwkgICAg ICAgICAgICAgICAoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9z b3VyY2Vjb2RlKSwKKwkgICAgICAgICAgICAgICAoZHVrX3NpemVfdCkgRFVLX0hTVFJJTkdfR0VU X0JZVEVMRU4oaF9zb3VyY2Vjb2RlKSwKKwkgICAgICAgICAgICAgICBjb21wX2ZsYWdzKTsKKwor CS8qIEZvcmNlIC5uYW1lIHRvICdhbm9ueW1vdXMnIChFUzIwMTUpLiAqLworCWR1a19wdXNoX2xp dGVyYWwodGhyLCAiYW5vbnltb3VzIik7CisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhy LCAtMiwgRFVLX1NUUklEWF9OQU1FLCBEVUtfUFJPUERFU0NfRkxBR1NfQyk7CisKKwlmdW5jID0g KGR1a19oY29tcGZ1bmMgKikgZHVrX2tub3duX2hvYmplY3QodGhyLCAtMSk7CisJRFVLX0FTU0VS VChEVUtfSE9CSkVDVF9JU19DT01QRlVOQygoZHVrX2hvYmplY3QgKikgZnVuYykpOworCURVS19B U1NFUlQoRFVLX0hPQkpFQ1RfSEFTX0NPTlNUUlVDVEFCTEUoKGR1a19ob2JqZWN0ICopIGZ1bmMp KTsKKworCS8qIFsgYm9keSBmb3JtYWxzIHNvdXJjZSB0ZW1wbGF0ZSBdICovCisKKwkvKiBvbmx5 IG91dGVyX2xleF9lbnYgbWF0dGVycywgYXMgZnVuY3Rpb25zIGFsd2F5cyBnZXQgYSBuZXcKKwkg KiB2YXJpYWJsZSBkZWNsYXJhdGlvbiBlbnZpcm9ubWVudC4KKwkgKi8KKworCW91dGVyX2xleF9l bnYgPSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF9FTlZdOworCW91dGVyX3Zhcl9lbnYg PSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF9FTlZdOworCisJZHVrX2pzX3B1c2hfY2xv c3VyZSh0aHIsIGZ1bmMsIG91dGVyX3Zhcl9lbnYsIG91dGVyX2xleF9lbnYsIDEgLyphZGRfYXV0 b19wcm90byovKTsKKworCS8qIFsgYm9keSBmb3JtYWxzIHNvdXJjZSB0ZW1wbGF0ZSBjbG9zdXJl IF0gKi8KKworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0ZVTkNUSU9OX0JVSUxU SU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GVU5DVElPTl9CVUlMVElOKQorRFVLX0lOVEVS TkFMIGR1a19yZXRfdCBkdWtfYmlfZnVuY3Rpb25fcHJvdG90eXBlX3RvX3N0cmluZyhkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX3R2YWwgKnR2OworCisJLyoKKwkgKiAgRTUgU2VjdGlvbiAxNS4z LjQuMiBwbGFjZXMgZmV3IHJlcXVpcmVtZW50cyBvbiB0aGUgb3V0cHV0IG9mCisJICogIHRoaXMg ZnVuY3Rpb246IHRoZSByZXN1bHQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LCBtdXN0CisJ ICogIGZvbGxvdyBGdW5jdGlvbkRlY2xhcmF0aW9uIHN5bnRheCAoaW4gcGFydGljdWxhciwgbXVz dCBoYXZlIGEKKwkgKiAgbmFtZSBldmVuIGZvciBhbm9ueW1vdXMgZnVuY3Rpb25zIG9yIGZ1bmN0 aW9ucyB3aXRoIGVtcHR5IG5hbWUpLgorCSAqICBUaGUgb3V0cHV0IGRvZXMgTk9UIG5lZWQgdG8g Y29tcGlsZSBpbnRvIGFueXRoaW5nIHVzZWZ1bC4KKwkgKgorCSAqICBFNiBTZWN0aW9uIDE5LjIu My41IGNoYW5nZXMgdGhlIHJlcXVpcmVtZW50cyBjb21wbGV0ZWx5OiB0aGUKKwkgKiAgcmVzdWx0 IG11c3QgZWl0aGVyIGV2YWwoKSB0byBhIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IG9iamVjdAor CSAqICBPUiBldmFsKCkgdG8gYSBTeW50YXhFcnJvci4KKwkgKgorCSAqICBXZSBvcHQgZm9yIHRo ZSBTeW50YXhFcnJvciBhcHByb2FjaCBmb3Igbm93LCB3aXRoIGEgc3ludGF4IHRoYXQKKwkgKiAg bWltaWNzIFY4J3MgbmF0aXZlIGZ1bmN0aW9uIHN5bnRheDoKKwkgKgorCSAqICAgICAgJ2Z1bmN0 aW9uIGNvcygpIHsgW25hdGl2ZSBjb2RlXSB9JworCSAqCisJICogIGJ1dCBleHRlbmRlZCB3aXRo IFtlY21hc2NyaXB0IGNvZGVdLCBbYm91bmQgY29kZV0sIGFuZAorCSAqICBbbGlnaHRmdW5jIGNv ZGVdLgorCSAqLworCisJZHVrX3B1c2hfdGhpcyh0aHIpOworCXR2ID0gRFVLX0dFVF9UVkFMX05F R0lEWCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJaWYgKERVS19UVkFM X0lTX09CSkVDVCh0dikpIHsKKwkJZHVrX2hvYmplY3QgKm9iaiA9IERVS19UVkFMX0dFVF9PQkpF Q1QodHYpOworCQljb25zdCBjaGFyICpmdW5jX25hbWU7CisKKwkJLyogRnVuY3Rpb24gbmFtZTog bWlzc2luZy91bmRlZmluZWQgaXMgbWFwcGVkIHRvIGVtcHR5IHN0cmluZywKKwkJICogb3RoZXJ3 aXNlIGNvZXJjZSB0byBzdHJpbmcuICBObyBoYW5kbGluZyBmb3IgaW52YWxpZCBpZGVudGlmaWVy CisJCSAqIGNoYXJhY3RlcnMgb3IgZS5nLiAneycgaW4gdGhlIGZ1bmN0aW9uIG5hbWUuICBUaGlz IGRvZXNuJ3QKKwkJICogcmVhbGx5IG1hdHRlciBhcyBsb25nIGFzIGEgU3ludGF4RXJyb3IgcmVz dWx0cy4gIFRlY2huaWNhbGx5CisJCSAqIGlmIHRoZSBuYW1lIGNvbnRhaW5lZCBhIHN1aXRhYmxl IHByZWZpeCBmb2xsb3dlZCBieSAnLy8nIGl0CisJCSAqIG1pZ2h0IGNhdXNlIHRoZSByZXN1bHQg dG8gcGFyc2Ugd2l0aG91dCBlcnJvci4KKwkJICovCisJCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hv cnQodGhyLCAtMSwgRFVLX1NUUklEWF9OQU1FKTsKKwkJaWYgKGR1a19pc191bmRlZmluZWQodGhy LCAtMSkpIHsKKwkJCWZ1bmNfbmFtZSA9ICIiOworCQl9IGVsc2UgeworCQkJZnVuY19uYW1lID0g ZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsKKwkJCURVS19BU1NFUlQoZnVuY19uYW1lICE9IE5VTEwp OworCQl9CisKKwkJaWYgKERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKG9iaikpIHsKKwkJCWR1a19w dXNoX3NwcmludGYodGhyLCAiZnVuY3Rpb24gJXMoKSB7IFtlY21hc2NyaXB0IGNvZGVdIH0iLCAo Y29uc3QgY2hhciAqKSBmdW5jX25hbWUpOworCQl9IGVsc2UgaWYgKERVS19IT0JKRUNUX0lTX05B VEZVTkMob2JqKSkgeworCQkJZHVrX3B1c2hfc3ByaW50Zih0aHIsICJmdW5jdGlvbiAlcygpIHsg W25hdGl2ZSBjb2RlXSB9IiwgKGNvbnN0IGNoYXIgKikgZnVuY19uYW1lKTsKKwkJfSBlbHNlIGlm IChEVUtfSE9CSkVDVF9JU19CT1VOREZVTkMob2JqKSkgeworCQkJZHVrX3B1c2hfc3ByaW50Zih0 aHIsICJmdW5jdGlvbiAlcygpIHsgW2JvdW5kIGNvZGVdIH0iLCAoY29uc3QgY2hhciAqKSBmdW5j X25hbWUpOworCQl9IGVsc2UgeworCQkJZ290byB0eXBlX2Vycm9yOworCQl9CisJfSBlbHNlIGlm IChEVUtfVFZBTF9JU19MSUdIVEZVTkModHYpKSB7CisJCWR1a19wdXNoX2xpZ2h0ZnVuY190b3N0 cmluZyh0aHIsIHR2KTsKKwl9IGVsc2UgeworCQlnb3RvIHR5cGVfZXJyb3I7CisJfQorCisJcmV0 dXJuIDE7CisKKyB0eXBlX2Vycm9yOgorCURVS19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9BUkdTKHRo cik7Cit9CisjZW5kaWYKKworLyogQWx3YXlzIHByZXNlbnQgYmVjYXVzZSB0aGUgbmF0aXZlIGZ1 bmN0aW9uIHBvaW50ZXIgaXMgbmVlZGVkIGluIGNhbGwKKyAqIGhhbmRsaW5nLgorICovCitEVUtf SU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9mdW5jdGlvbl9wcm90b3R5cGVfY2FsbChkdWtfaHRo cmVhZCAqdGhyKSB7CisJLyogLmNhbGwoKSBpcyBkZWFsdCB3aXRoIGluIGNhbGwgaGFuZGxpbmcg Ynkgc2ltdWxhdGluZyBpdHMKKwkgKiBlZmZlY3RzIHNvIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFs bHkgbmV2ZXIgY2FsbGVkLgorCSAqLworCURVS19VTlJFRih0aHIpOworCXJldHVybiBEVUtfUkVU X1RZUEVfRVJST1I7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2Z1bmN0aW9u X3Byb3RvdHlwZV9hcHBseShkdWtfaHRocmVhZCAqdGhyKSB7CisJLyogTGlrZSAuY2FsbCgpLCBu ZXZlciBhY3R1YWxseSBjYWxsZWQuICovCisJRFVLX1VOUkVGKHRocik7CisJcmV0dXJuIERVS19S RVRfVFlQRV9FUlJPUjsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVj dF9hcHBseShkdWtfaHRocmVhZCAqdGhyKSB7CisJLyogTGlrZSAuY2FsbCgpLCBuZXZlciBhY3R1 YWxseSBjYWxsZWQuICovCisJRFVLX1VOUkVGKHRocik7CisJcmV0dXJuIERVS19SRVRfVFlQRV9F UlJPUjsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVjdF9jb25zdHJ1 Y3QoZHVrX2h0aHJlYWQgKnRocikgeworCS8qIExpa2UgLmNhbGwoKSwgbmV2ZXIgYWN0dWFsbHkg Y2FsbGVkLiAqLworCURVS19VTlJFRih0aHIpOworCXJldHVybiBEVUtfUkVUX1RZUEVfRVJST1I7 Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRlVOQ1RJT05fQlVJTFRJTikKKy8qIENyZWF0ZSBh IGJvdW5kIGZ1bmN0aW9uIHdoaWNoIHBvaW50cyB0byBhIHRhcmdldCBmdW5jdGlvbiB3aGljaCBt YXkKKyAqIGJlIGJvdW5kIG9yIG5vbi1ib3VuZC4gIElmIHRoZSB0YXJnZXQgaXMgYm91bmQsIHRo ZSBhcmd1bWVudCBsaXN0cworICogYW5kICd0aGlzJyBiaW5kaW5nIG9mIHRoZSBmdW5jdGlvbnMg YXJlIG1lcmdlZCBhbmQgdGhlIHJlc3VsdGluZworICogZnVuY3Rpb24gcG9pbnRzIGRpcmVjdGx5 IHRvIHRoZSBub24tYm91bmQgdGFyZ2V0LgorICovCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1 a19iaV9mdW5jdGlvbl9wcm90b3R5cGVfYmluZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hi b3VuZGZ1bmMgKmhfYm91bmQ7CisJZHVrX2lkeF90IG5hcmdzOyAgLyogYm91bmQgYXJncywgbm90 IGNvdW50aW5nICd0aGlzJyBiaW5kaW5nICovCisJZHVrX2lkeF90IGJvdW5kX25hcmdzOworCWR1 a19pbnRfdCBib3VuZF9sZW47CisJZHVrX3R2YWwgKnR2X3ByZXZib3VuZDsKKwlkdWtfaWR4X3Qg bl9wcmV2Ym91bmQ7CisJZHVrX3R2YWwgKnR2X3JlczsKKwlkdWtfdHZhbCAqdHZfdG1wOworCisJ LyogWFhYOiBDIEFQSSBjYWxsLCBlLmcuIGR1a19wdXNoX2JvdW5kX2Z1bmN0aW9uKHRociwgdGFy Z2V0X2lkeCwgbmFyZ3MpOyAqLworCisJLyogVmFyYXJnIGZ1bmN0aW9uLCBjYXJlZnVsIGFyZyBo YW5kbGluZywgZS5nLiB0aGlzQXJnIG1heSBub3QKKwkgKiBiZSBwcmVzZW50LgorCSAqLworCW5h cmdzID0gZHVrX2dldF90b3AodGhyKSAtIDE7ICAvKiBhY3R1YWwgYXJncywgbm90IGNvdW50aW5n ICd0aGlzJyBiaW5kaW5nICovCisJaWYgKG5hcmdzIDwgMCkgeworCQluYXJncysrOworCQlkdWtf cHVzaF91bmRlZmluZWQodGhyKTsKKwl9CisJRFVLX0FTU0VSVChuYXJncyA+PSAwKTsKKworCS8q IExpbWl0ICduYXJncycgZm9yIGJvdW5kIGZ1bmN0aW9ucyB0byBndWFyYW50ZWUgYXJpdGhtZXRp YworCSAqIGJlbG93IHdpbGwgbmV2ZXIgd3JhcC4KKwkgKi8KKwlpZiAobmFyZ3MgPiAoZHVrX2lk eF90KSBEVUtfSEJPVU5ERlVOQ19NQVhfQVJHUykgeworCQlEVUtfRENFUlJPUl9SQU5HRV9JTlZB TElEX0NPVU5UKHRocik7CisJfQorCisJZHVrX3B1c2hfdGhpcyh0aHIpOworCWR1a19yZXF1aXJl X2NhbGxhYmxlKHRociwgLTEpOworCisJLyogWyB0aGlzQXJnIGFyZzEgLi4uIGFyZ04gZnVuYyBd ICAodGhpc0FyZythcmdzID09IG5hcmdzKzEgdG90YWwpICovCisJRFVLX0FTU0VSVF9UT1AodGhy LCBuYXJncyArIDIpOworCisJLyogQ3JlYXRlIGJvdW5kIGZ1bmN0aW9uIG9iamVjdC4gKi8KKwlo X2JvdW5kID0gZHVrX3B1c2hfaGJvdW5kZnVuYyh0aHIpOworCURVS19BU1NFUlQoRFVLX1RWQUxf SVNfVU5ERUZJTkVEKCZoX2JvdW5kLT50YXJnZXQpKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lT X1VOREVGSU5FRCgmaF9ib3VuZC0+dGhpc19iaW5kaW5nKSk7CisJRFVLX0FTU0VSVChoX2JvdW5k LT5hcmdzID09IE5VTEwpOworCURVS19BU1NFUlQoaF9ib3VuZC0+bmFyZ3MgPT0gMCk7CisJRFVL X0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgKGR1a19ob2JqZWN0 ICopIGhfYm91bmQpID09IE5VTEwpOworCisJLyogWyB0aGlzQXJnIGFyZzEgLi4uIGFyZ04gZnVu YyBib3VuZEZ1bmMgXSAqLworCisJLyogSWYgdGhlIHRhcmdldCBpcyBhIGJvdW5kIGZ1bmN0aW9u LCBhcmd1bWVudCBsaXN0cyBtdXN0IGJlCisJICogbWVyZ2VkLiAgVGhlICd0aGlzJyBiaW5kaW5n IGNsb3Nlc3QgdG8gdGhlIHRhcmdldCBmdW5jdGlvbgorCSAqIHdpbnMgYmVjYXVzZSBpbiBjYWxs IGhhbmRsaW5nIHRoZSAndGhpcycgZ2V0cyByZXBsYWNlZCBvdmVyCisJICogYW5kIG92ZXIgYWdh aW4gdW50aWwgd2UgY2FsbCB0aGUgbm9uLWJvdW5kIGZ1bmN0aW9uLgorCSAqLworCXR2X3ByZXZi b3VuZCA9IE5VTEw7CisJbl9wcmV2Ym91bmQgPSAwOworCXR2X3RtcCA9IERVS19HRVRfVFZBTF9Q T1NJRFgodGhyLCAwKTsKKwlEVUtfVFZBTF9TRVRfVFZBTCgmaF9ib3VuZC0+dGhpc19iaW5kaW5n LCB0dl90bXApOworCXR2X3RtcCA9IERVS19HRVRfVFZBTF9ORUdJRFgodGhyLCAtMik7CisJRFVL X1RWQUxfU0VUX1RWQUwoJmhfYm91bmQtPnRhcmdldCwgdHZfdG1wKTsKKworCWlmIChEVUtfVFZB TF9JU19PQkpFQ1QodHZfdG1wKSkgeworCQlkdWtfaG9iamVjdCAqaF90YXJnZXQ7CisJCWR1a19o b2JqZWN0ICpib3VuZF9wcm90bzsKKworCQloX3RhcmdldCA9IERVS19UVkFMX0dFVF9PQkpFQ1Qo dHZfdG1wKTsKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DQUxMQUJMRShoX3RhcmdldCkp OworCisJCS8qIEludGVybmFsIHByb3RvdHlwZSBtdXN0IGJlIGNvcGllZCBmcm9tIHRoZSB0YXJn ZXQuCisJCSAqIEZvciBsaWdodGZ1bmNzIEZ1bmN0aW9uLnByb3RvdHlwZSBpcyB1c2VkIGFuZCBp cyBhbHJlYWR5CisJCSAqIGluIHBsYWNlLgorCQkgKi8KKwkJYm91bmRfcHJvdG8gPSBEVUtfSE9C SkVDVF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgaF90YXJnZXQpOworCQlEVUtfSE9CSkVDVF9T RVRfUFJPVE9UWVBFX0lOSVRfSU5DUkVGKHRociwgKGR1a19ob2JqZWN0ICopIGhfYm91bmQsIGJv dW5kX3Byb3RvKTsKKworCQkvKiBUaGUgJ3N0cmljdCcgZmxhZyBpcyBjb3BpZWQgdG8gZ2V0IHRo ZSBzcGVjaWFsIFtbR2V0XV0gb2YgRTUuMQorCQkgKiBTZWN0aW9uIDE1LjMuNS40IHRvIGFwcGx5 IHdoZW4gYSAnY2FsbGVyJyB2YWx1ZSBpcyBhIHN0cmljdCBib3VuZAorCQkgKiBmdW5jdGlvbi4g IE5vdCBzdXJlIGlmIHRoaXMgaXMgY29ycmVjdCwgYmVjYXVzZSB0aGUgc3BlY2lmaWNhdGlvbgor CQkgKiBpcyBhIGJpdCBhbWJpZ3VvdXMgb24gdGhpcyBwb2ludCBidXQgaXQgd291bGQgbWFrZSBz ZW5zZS4KKwkJICovCisJCS8qIFN0cmljdG5lc3MgaXMgaW5oZXJpdGVkIGZyb20gdGFyZ2V0LiAq LworCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX1NUUklDVChoX3RhcmdldCkpIHsKKwkJCURVS19IT0JK RUNUX1NFVF9TVFJJQ1QoKGR1a19ob2JqZWN0ICopIGhfYm91bmQpOworCQl9CisKKwkJaWYgKERV S19IT0JKRUNUX0hBU19CT1VOREZVTkMoaF90YXJnZXQpKSB7CisJCQlkdWtfaGJvdW5kZnVuYyAq aF9ib3VuZHRhcmdldDsKKworCQkJaF9ib3VuZHRhcmdldCA9IChkdWtfaGJvdW5kZnVuYyAqKSAo dm9pZCAqKSBoX3RhcmdldDsKKworCQkJLyogVGhlIGZpbmFsIGZ1bmN0aW9uIHNob3VsZCBhbHdh eXMgYmUgbm9uLWJvdW5kLCB1bmxlc3MKKwkJCSAqIHRoZXJlJ3MgYSBidWcgaW4gdGhlIGludGVy bmFscy4gIEFzc2VydCBmb3IgaXQuCisJCQkgKi8KKwkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNf TElHSFRGVU5DKCZoX2JvdW5kdGFyZ2V0LT50YXJnZXQpIHx8CisJCQkgICAgICAgICAgIChEVUtf VFZBTF9JU19PQkpFQ1QoJmhfYm91bmR0YXJnZXQtPnRhcmdldCkgJiYKKwkJCSAgICAgICAgICAg IERVS19IT0JKRUNUX0lTX0NBTExBQkxFKERVS19UVkFMX0dFVF9PQkpFQ1QoJmhfYm91bmR0YXJn ZXQtPnRhcmdldCkpICYmCisJCQkgICAgICAgICAgICAhRFVLX0hPQkpFQ1RfSVNfQk9VTkRGVU5D KERVS19UVkFMX0dFVF9PQkpFQ1QoJmhfYm91bmR0YXJnZXQtPnRhcmdldCkpKSk7CisKKwkJCURV S19UVkFMX1NFVF9UVkFMKCZoX2JvdW5kLT50YXJnZXQsICZoX2JvdW5kdGFyZ2V0LT50YXJnZXQp OworCQkJRFVLX1RWQUxfU0VUX1RWQUwoJmhfYm91bmQtPnRoaXNfYmluZGluZywgJmhfYm91bmR0 YXJnZXQtPnRoaXNfYmluZGluZyk7CisKKwkJCXR2X3ByZXZib3VuZCA9IGhfYm91bmR0YXJnZXQt PmFyZ3M7CisJCQluX3ByZXZib3VuZCA9IGhfYm91bmR0YXJnZXQtPm5hcmdzOworCQl9CisJfSBl bHNlIHsKKwkJLyogTGlnaHRmdW5jcyBhcmUgYWx3YXlzIHN0cmljdC4gKi8KKwkJZHVrX2hvYmpl Y3QgKmJvdW5kX3Byb3RvOworCisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTElHSFRGVU5DKHR2 X3RtcCkpOworCQlEVUtfSE9CSkVDVF9TRVRfU1RSSUNUKChkdWtfaG9iamVjdCAqKSBoX2JvdW5k KTsKKwkJYm91bmRfcHJvdG8gPSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0ZVTkNUSU9OX1BST1RP VFlQRV07CisJCURVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEVfSU5JVF9JTkNSRUYodGhyLCAoZHVr X2hvYmplY3QgKikgaF9ib3VuZCwgYm91bmRfcHJvdG8pOworCX0KKworCURVS19UVkFMX0lOQ1JF Rih0aHIsICZoX2JvdW5kLT50YXJnZXQpOyAgLyogb2xkIHZhbHVlcyB1bmRlZmluZWQsIG5vIGRl Y3JlZiBuZWVkZWQgKi8KKwlEVUtfVFZBTF9JTkNSRUYodGhyLCAmaF9ib3VuZC0+dGhpc19iaW5k aW5nKTsKKworCWJvdW5kX25hcmdzID0gbl9wcmV2Ym91bmQgKyBuYXJnczsKKwlpZiAoYm91bmRf bmFyZ3MgPiAoZHVrX2lkeF90KSBEVUtfSEJPVU5ERlVOQ19NQVhfQVJHUykgeworCQlEVUtfRENF UlJPUl9SQU5HRV9JTlZBTElEX0NPVU5UKHRocik7CisJfQorCXR2X3JlcyA9IChkdWtfdHZhbCAq KSBEVUtfQUxMT0NfQ0hFQ0tFRCh0aHIsICgoZHVrX3NpemVfdCkgYm91bmRfbmFyZ3MpICogc2l6 ZW9mKGR1a190dmFsKSk7CisJRFVLX0FTU0VSVCh0dl9yZXMgIT0gTlVMTCB8fCBib3VuZF9uYXJn cyA9PSAwKTsKKwlEVUtfQVNTRVJUKGhfYm91bmQtPmFyZ3MgPT0gTlVMTCk7CisJRFVLX0FTU0VS VChoX2JvdW5kLT5uYXJncyA9PSAwKTsKKwloX2JvdW5kLT5hcmdzID0gdHZfcmVzOworCWhfYm91 bmQtPm5hcmdzID0gYm91bmRfbmFyZ3M7CisKKwlEVUtfQVNTRVJUKG5fcHJldmJvdW5kID49IDAp OworCWR1a19jb3B5X3R2YWxzX2luY3JlZih0aHIsIHR2X3JlcywgdHZfcHJldmJvdW5kLCAoZHVr X3NpemVfdCkgbl9wcmV2Ym91bmQpOworCURVS19BU1NFUlQobmFyZ3MgPj0gMCk7CisJZHVrX2Nv cHlfdHZhbHNfaW5jcmVmKHRociwgdHZfcmVzICsgbl9wcmV2Ym91bmQsIERVS19HRVRfVFZBTF9Q T1NJRFgodGhyLCAxKSwgKGR1a19zaXplX3QpIG5hcmdzKTsKKworCS8qIFsgdGhpc0FyZyBhcmcx IC4uLiBhcmdOIGZ1bmMgYm91bmRGdW5jIF0gKi8KKworCS8qIEJvdW5kIGZ1bmN0aW9uICdsZW5n dGgnIHByb3BlcnR5IGlzIGludGVyZXN0aW5nLgorCSAqIEZvciBsaWdodGZ1bmNzLCBzaW1wbHkg cmVhZCB0aGUgdmlydHVhbCBwcm9wZXJ0eS4KKwkgKi8KKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3No b3J0KHRociwgLTIsIERVS19TVFJJRFhfTEVOR1RIKTsKKwlib3VuZF9sZW4gPSBkdWtfZ2V0X2lu dCh0aHIsIC0xKTsgIC8qIEVTMjAxNTogbm8gY29lcmNpb24gKi8KKwlpZiAoYm91bmRfbGVuIDwg bmFyZ3MpIHsKKwkJYm91bmRfbGVuID0gMDsKKwl9IGVsc2UgeworCQlib3VuZF9sZW4gLT0gbmFy Z3M7CisJfQorCWlmIChzaXplb2YoZHVrX2ludF90KSA+IDQgJiYgYm91bmRfbGVuID4gKGR1a19p bnRfdCkgRFVLX1VJTlQzMl9NQVgpIHsKKwkJYm91bmRfbGVuID0gKGR1a19pbnRfdCkgRFVLX1VJ TlQzMl9NQVg7CisJfQorCWR1a19wb3AodGhyKTsKKwlEVUtfQVNTRVJUKGJvdW5kX2xlbiA+PSAw KTsKKwl0dl90bXAgPSB0aHItPnZhbHN0YWNrX3RvcCsrOworCURVS19BU1NFUlQoRFVLX1RWQUxf SVNfVU5ERUZJTkVEKHR2X3RtcCkpOworCURVS19BU1NFUlQoIURVS19UVkFMX05FRURTX1JFRkNP VU5UX1VQREFURSh0dl90bXApKTsKKwlEVUtfVFZBTF9TRVRfVTMyKHR2X3RtcCwgKGR1a191aW50 MzJfdCkgYm91bmRfbGVuKTsgIC8qIGluLXBsYWNlIHVwZGF0ZSwgZmFzdGludCAqLworCWR1a194 ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfTEVOR1RILCBEVUtfUFJP UERFU0NfRkxBR1NfQyk7ICAvKiBhdHRycyBpbiBFNiBTZWN0aW9uIDkuMi40ICovCisKKwkvKiBY WFg6IGNvdWxkIHRoZXNlIGJlIHZpcnR1YWw/ICovCisJLyogQ2FsbGVyIGFuZCBhcmd1bWVudHMg bXVzdCB1c2UgdGhlIHNhbWUgdGhyb3dlciwgW1tUaHJvd1R5cGVFcnJvcl1dLiAqLworCWR1a194 ZGVmX3Byb3Bfc3RyaWR4X3Rocm93ZXIodGhyLCAtMSwgRFVLX1NUUklEWF9DQUxMRVIpOworCWR1 a194ZGVmX3Byb3Bfc3RyaWR4X3Rocm93ZXIodGhyLCAtMSwgRFVLX1NUUklEWF9MQ19BUkdVTUVO VFMpOworCisJLyogRnVuY3Rpb24gbmFtZSBhbmQgZmlsZU5hbWUgKG5vbi1zdGFuZGFyZCkuICov CisJZHVrX3B1c2hfbGl0ZXJhbCh0aHIsICJib3VuZCAiKTsgIC8qIEVTMjAxNSAxOS4yLjMuMi4g Ki8KKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4KHRociwgLTMsIERVS19TVFJJRFhfTkFNRSk7CisJaWYg KCFkdWtfaXNfc3RyaW5nX25vdHN5bWJvbCh0aHIsIC0xKSkgeworCQkvKiBFUzIwMTUgaGFzIHJl cXVpcmVtZW50IHRvIGNoZWNrIHRoYXQgLm5hbWUgb2YgdGFyZ2V0IGlzIGEgc3RyaW5nCisJCSAq IChhbHNvIG11c3QgY2hlY2sgZm9yIFN5bWJvbCk7IGlmIG5vdCwgdGFyZ2V0TmFtZSBzaG91bGQg YmUgdGhlCisJCSAqIGVtcHR5IHN0cmluZy4gIEVTMjAxNSAxOS4yLjMuMi4KKwkJICovCisJCWR1 a19wb3AodGhyKTsKKwkJZHVrX3B1c2hfaHN0cmluZ19lbXB0eSh0aHIpOworCX0KKwlkdWtfY29u Y2F0KHRociwgMik7CisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NU UklEWF9OQU1FLCBEVUtfUFJPUERFU0NfRkxBR1NfQyk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZV TkNfRklMRU5BTUVfUFJPUEVSVFkpCisJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0y LCBEVUtfU1RSSURYX0ZJTEVfTkFNRSk7CisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhy LCAtMiwgRFVLX1NUUklEWF9GSUxFX05BTUUsIERVS19QUk9QREVTQ19GTEFHU19DKTsKKyNlbmRp ZgorCisJRFVLX0RERChEVUtfREREUFJJTlQoImNyZWF0ZWQgYm91bmQgZnVuY3Rpb246ICUhaVQi LCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisKKwlyZXR1cm4gMTsKK30K KyNlbmRpZiAgLyogRFVLX1VTRV9GVU5DVElPTl9CVUlMVElOICovCisKKy8qICVOYXRpdmVGdW5j dGlvblByb3RvdHlwZSUgLmxlbmd0aCBnZXR0ZXIuICovCitEVUtfSU5URVJOQUwgZHVrX3JldF90 IGR1a19iaV9uYXRpdmVfZnVuY3Rpb25fbGVuZ3RoKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtf dHZhbCAqdHY7CisJZHVrX2huYXRmdW5jICpoOworCWR1a19pbnQxNl90IGZ1bmNfbmFyZ3M7CisK Kwl0diA9IGR1a19nZXRfYm9ycm93ZWRfdGhpc190dmFsKHRocik7CisJRFVLX0FTU0VSVCh0diAh PSBOVUxMKTsKKworCWlmIChEVUtfVFZBTF9JU19PQkpFQ1QodHYpKSB7CisJCWggPSAoZHVrX2hu YXRmdW5jICopIERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVM TCk7CisJCWlmICghRFVLX0hPQkpFQ1RfSVNfTkFURlVOQygoZHVrX2hvYmplY3QgKikgaCkpIHsK KwkJCWdvdG8gZmFpbF90eXBlOworCQl9CisJCWZ1bmNfbmFyZ3MgPSBoLT5uYXJnczsKKwkJZHVr X3B1c2hfaW50KHRociwgZnVuY19uYXJncyA9PSBEVUtfSE5BVEZVTkNfTkFSR1NfVkFSQVJHUyA/ IDAgOiBmdW5jX25hcmdzKTsKKwl9IGVsc2UgaWYgKERVS19UVkFMX0lTX0xJR0hURlVOQyh0dikp IHsKKwkJZHVrX3NtYWxsX3VpbnRfdCBsZl9mbGFnczsKKwkJZHVrX3NtYWxsX3VpbnRfdCBsZl9s ZW47CisKKwkJbGZfZmxhZ3MgPSBEVUtfVFZBTF9HRVRfTElHSFRGVU5DX0ZMQUdTKHR2KTsKKwkJ bGZfbGVuID0gRFVLX0xGVU5DX0ZMQUdTX0dFVF9MRU5HVEgobGZfZmxhZ3MpOworCQlkdWtfcHVz aF91aW50KHRociwgbGZfbGVuKTsKKwl9IGVsc2UgeworCQlnb3RvIGZhaWxfdHlwZTsKKwl9CisJ cmV0dXJuIDE7CisKKyBmYWlsX3R5cGU6CisJRFVLX0RDRVJST1JfVFlQRV9JTlZBTElEX0FSR1Mo dGhyKTsKK30KKworLyogJU5hdGl2ZUZ1bmN0aW9uUHJvdG90eXBlJSAubmFtZSBnZXR0ZXIuICov CitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9uYXRpdmVfZnVuY3Rpb25fbmFtZShkdWtf aHRocmVhZCAqdGhyKSB7CisJZHVrX3R2YWwgKnR2OworCWR1a19obmF0ZnVuYyAqaDsKKworCXR2 ID0gZHVrX2dldF9ib3Jyb3dlZF90aGlzX3R2YWwodGhyKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5V TEwpOworCisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJaCA9IChkdWtfaG5hdGZ1 bmMgKikgRFVLX1RWQUxfR0VUX09CSkVDVCh0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsK KwkJaWYgKCFEVUtfSE9CSkVDVF9JU19OQVRGVU5DKChkdWtfaG9iamVjdCAqKSBoKSkgeworCQkJ Z290byBmYWlsX3R5cGU7CisJCX0KKyNpZiAwCisJCWR1a19wdXNoX2huYXRmdW5jX25hbWUodGhy LCBoKTsKKyNlbmRpZgorCQlkdWtfcHVzaF9oc3RyaW5nX2VtcHR5KHRocik7CisJfSBlbHNlIGlm IChEVUtfVFZBTF9JU19MSUdIVEZVTkModHYpKSB7CisJCWR1a19wdXNoX2xpZ2h0ZnVuY19uYW1l KHRociwgdHYpOworCX0gZWxzZSB7CisJCWdvdG8gZmFpbF90eXBlOworCX0KKwlyZXR1cm4gMTsK KworIGZhaWxfdHlwZToKKwlEVUtfRENFUlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworfQor CisjaWYgZGVmaW5lZChEVUtfVVNFX1NZTUJPTF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19y ZXRfdCBkdWtfYmlfZnVuY3Rpb25fcHJvdG90eXBlX2hhc2luc3RhbmNlKGR1a19odGhyZWFkICp0 aHIpIHsKKwkvKiBUaGlzIGJpbmRpbmc6IFJIUywgc3RhY2sgaW5kZXggMDogTEhTLiAqLworCWR1 a19ib29sX3QgcmV0OworCisJcmV0ID0gZHVrX2pzX2luc3RhbmNlb2Zfb3JkaW5hcnkodGhyLCBE VUtfR0VUX1RWQUxfUE9TSURYKHRociwgMCksIERVS19HRVRfVEhJU19UVkFMX1BUUih0aHIpKTsK KwlkdWtfcHVzaF9ib29sZWFuKHRociwgcmV0KTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyog RFVLX1VTRV9TWU1CT0xfQlVJTFRJTiAqLworLyoKKyAqICBHbG9iYWwgb2JqZWN0IGJ1aWx0LWlu cworICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQg Ki8KKworLyoKKyAqICBFbmNvZGluZy9kZWNvZGluZyBoZWxwZXJzCisgKi8KKworLyogWFhYOiBD b3VsZCBhZGQgZmFzdCBwYXRoIChmb3IgZWFjaCB0cmFuc2Zvcm0gY2FsbGJhY2spIHdpdGggZGly ZWN0IGJ5dGUKKyAqIGxvb2t1cHMgKG5vIHNoaWZ0aW5nKSBhbmQgbm8gZXhwbGljaXQgY2hlY2sg Zm9yIHggPCAweDgwIGJlZm9yZSB0YWJsZQorICogbG9va3VwLgorICovCisKKy8qIE1hY3JvcyBm b3IgY3JlYXRpbmcgYW5kIGNoZWNraW5nIGJpdG1hc2tzIGZvciBjaGFyYWN0ZXIgZW5jb2Rpbmcu CisgKiBCaXQgbnVtYmVyIGlzIGEgYml0IGNvdW50ZXJpbnR1aXRpdmUsIGJ1dCBtaW5pbWl6ZXMg Y29kZSBzaXplLgorICovCisjZGVmaW5lIERVS19fTUtCSVRTKGEsYixjLGQsZSxmLGcsaCkgICgo ZHVrX3VpbnQ4X3QpICggXAorCSgoYSkgPDwgMCkgfCAoKGIpIDw8IDEpIHwgKChjKSA8PCAyKSB8 ICgoZCkgPDwgMykgfCBcCisJKChlKSA8PCA0KSB8ICgoZikgPDwgNSkgfCAoKGcpIDw8IDYpIHwg KChoKSA8PCA3KSBcCisJKSkKKyNkZWZpbmUgRFVLX19DSEVDS19CSVRNQVNLKHRhYmxlLGNwKSAg KCh0YWJsZSlbKGNwKSA+PiAzXSAmICgxIDw8ICgoY3ApICYgMHgwNykpKQorCisvKiBFNS4xIFNl Y3Rpb24gMTUuMS4zLjM6IHVyaVJlc2VydmVkICsgdXJpVW5lc2NhcGVkICsgJyMnICovCitEVUtf TE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX19lbmNvZGVfdXJpdW5lc2NhcGVkX3RhYmxlWzE2 XSA9IHsKKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMo MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDAwLTB4MGYgKi8KKwlEVUtfX01LQklUUygw LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCksICAvKiAweDEwLTB4MWYgKi8KKwlEVUtfX01LQklUUygwLCAxLCAwLCAxLCAxLCAwLCAxLCAx KSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSksICAvKiAweDIwLTB4MmYgKi8K KwlEVUtfX01LQklUUygxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwg MSwgMSwgMCwgMSwgMCwgMSksICAvKiAweDMwLTB4M2YgKi8KKwlEVUtfX01LQklUUygxLCAxLCAx LCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSksICAv KiAweDQwLTB4NGYgKi8KKwlEVUtfX01LQklUUygxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRFVL X19NS0JJVFMoMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSksICAvKiAweDUwLTB4NWYgKi8KKwlEVUtf X01LQklUUygwLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMSwg MSwgMSwgMSwgMSksICAvKiAweDYwLTB4NmYgKi8KKwlEVUtfX01LQklUUygxLCAxLCAxLCAxLCAx LCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMCwgMCwgMCwgMSwgMCksICAvKiAweDcw LTB4N2YgKi8KK307CisKKy8qIEU1LjEgU2VjdGlvbiAxNS4xLjMuNDogdXJpVW5lc2NhcGVkICov CitEVUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX19lbmNvZGVfdXJpY29tcG9uZW50X3Vu ZXNjYXBlZF90YWJsZVsxNl0gPSB7CisJRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCksIERVS19fTUtCSVRTKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLCAgLyogMHgwMC0weDBmICov CisJRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksIERVS19fTUtCSVRTKDAsIDAs IDAsIDAsIDAsIDAsIDAsIDApLCAgLyogMHgxMC0weDFmICovCisJRFVLX19NS0JJVFMoMCwgMSwg MCwgMCwgMCwgMCwgMCwgMSksIERVS19fTUtCSVRTKDEsIDEsIDEsIDAsIDAsIDEsIDEsIDApLCAg LyogMHgyMC0weDJmICovCisJRFVLX19NS0JJVFMoMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSksIERV S19fTUtCSVRTKDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApLCAgLyogMHgzMC0weDNmICovCisJRFVL X19NS0JJVFMoMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSksIERVS19fTUtCSVRTKDEsIDEsIDEsIDEs IDEsIDEsIDEsIDEpLCAgLyogMHg0MC0weDRmICovCisJRFVLX19NS0JJVFMoMSwgMSwgMSwgMSwg MSwgMSwgMSwgMSksIERVS19fTUtCSVRTKDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEpLCAgLyogMHg1 MC0weDVmICovCisJRFVLX19NS0JJVFMoMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSksIERVS19fTUtC SVRTKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpLCAgLyogMHg2MC0weDZmICovCisJRFVLX19NS0JJ VFMoMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSksIERVS19fTUtCSVRTKDEsIDEsIDEsIDAsIDAsIDAs IDEsIDApLCAgLyogMHg3MC0weDdmICovCit9OworCisvKiBFNS4xIFNlY3Rpb24gMTUuMS4zLjE6 IHVyaVJlc2VydmVkICsgJyMnICovCitEVUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX19k ZWNvZGVfdXJpX3Jlc2VydmVkX3RhYmxlWzE2XSA9IHsKKwlEVUtfX01LQklUUygwLCAwLCAwLCAw LCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAw eDAwLTB4MGYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19N S0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDEwLTB4MWYgKi8KKwlEVUtfX01L QklUUygwLCAwLCAwLCAxLCAxLCAwLCAxLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMSwgMSwg MCwgMCwgMSksICAvKiAweDIwLTB4MmYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAw LCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMSwgMSwgMCwgMSwgMCwgMSksICAvKiAweDMwLTB4 M2YgKi8KKwlEVUtfX01LQklUUygxLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMo MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDQwLTB4NGYgKi8KKwlEVUtfX01LQklUUygw LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCksICAvKiAweDUwLTB4NWYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAw KSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDYwLTB4NmYgKi8K KwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDcwLTB4N2YgKi8KK307CisKKy8qIEU1LjEgU2VjdGlv biAxNS4xLjMuMjogZW1wdHkgKi8KK0RVS19MT0NBTCBjb25zdCBkdWtfdWludDhfdCBkdWtfX2Rl Y29kZV91cmlfY29tcG9uZW50X3Jlc2VydmVkX3RhYmxlWzE2XSA9IHsKKwlEVUtfX01LQklUUygw LCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCksICAvKiAweDAwLTB4MGYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAw KSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDEwLTB4MWYgKi8K KwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDIwLTB4MmYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAw LCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAv KiAweDMwLTB4M2YgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVL X19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDQwLTB4NGYgKi8KKwlEVUtf X01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCksICAvKiAweDUwLTB4NWYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAw LCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDYw LTB4NmYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJ VFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDcwLTB4N2YgKi8KK307CisKKyNpZiBk ZWZpbmVkKERVS19VU0VfU0VDVElPTl9CKQorLyogRTUuMSBTZWN0aW9uIEIuMi4yLCBzdGVwIDcu ICovCitEVUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX19lc2NhcGVfdW5lc2NhcGVkX3Rh YmxlWzE2XSA9IHsKKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19N S0JJVFMoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDAwLTB4MGYgKi8KKwlEVUtfX01L QklUUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCksICAvKiAweDEwLTB4MWYgKi8KKwlEVUtfX01LQklUUygwLCAwLCAwLCAwLCAwLCAw LCAwLCAwKSwgRFVLX19NS0JJVFMoMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSksICAvKiAweDIwLTB4 MmYgKi8KKwlEVUtfX01LQklUUygxLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMo MSwgMSwgMCwgMCwgMCwgMCwgMCwgMCksICAvKiAweDMwLTB4M2YgKi8KKwlEVUtfX01LQklUUygx LCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMSwgMSwgMSwgMSwg MSksICAvKiAweDQwLTB4NGYgKi8KKwlEVUtfX01LQklUUygxLCAxLCAxLCAxLCAxLCAxLCAxLCAx KSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSksICAvKiAweDUwLTB4NWYgKi8K KwlEVUtfX01LQklUUygwLCAxLCAxLCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwg MSwgMSwgMSwgMSwgMSwgMSksICAvKiAweDYwLTB4NmYgKi8KKwlEVUtfX01LQklUUygxLCAxLCAx LCAxLCAxLCAxLCAxLCAxKSwgRFVLX19NS0JJVFMoMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCkgICAv KiAweDcwLTB4N2YgKi8KK307CisjZW5kaWYgIC8qIERVS19VU0VfU0VDVElPTl9CICovCisKK3R5 cGVkZWYgc3RydWN0IHsKKwlkdWtfaHRocmVhZCAqdGhyOworCWR1a19oc3RyaW5nICpoX3N0cjsK KwlkdWtfYnVmd3JpdGVyX2N0eCBidzsKKwljb25zdCBkdWtfdWludDhfdCAqcDsKKwljb25zdCBk dWtfdWludDhfdCAqcF9zdGFydDsKKwljb25zdCBkdWtfdWludDhfdCAqcF9lbmQ7Cit9IGR1a19f dHJhbnNmb3JtX2NvbnRleHQ7CisKK3R5cGVkZWYgdm9pZCAoKmR1a19fdHJhbnNmb3JtX2NhbGxi YWNrKShkdWtfX3RyYW5zZm9ybV9jb250ZXh0ICp0Zm1fY3R4LCBjb25zdCB2b2lkICp1ZGF0YSwg ZHVrX2NvZGVwb2ludF90IGNwKTsKKworLyogWFhYOiByZWZhY3RvciBhbmQgc2hhcmUgd2l0aCBv dGhlciBjb2RlICovCitEVUtfTE9DQUwgZHVrX3NtYWxsX2ludF90IGR1a19fZGVjb2RlX2hleF9l c2NhcGUoY29uc3QgZHVrX3VpbnQ4X3QgKnAsIGR1a19zbWFsbF9pbnRfdCBuKSB7CisJZHVrX3Nt YWxsX2ludF90IGNoOworCWR1a19zbWFsbF9pbnRfdCB0ID0gMDsKKworCXdoaWxlIChuID4gMCkg eworCQl0ID0gdCAqIDE2OworCQljaCA9IChkdWtfc21hbGxfaW50X3QpIGR1a19oZXhfZGVjdGFi WypwKytdOworCQlpZiAoRFVLX0xJS0VMWShjaCA+PSAwKSkgeworCQkJdCArPSBjaDsKKwkJfSBl bHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQluLS07CisJfQorCXJldHVybiB0OworfQorCitE VUtfTE9DQUwgaW50IGR1a19fdHJhbnNmb3JtX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtf X3RyYW5zZm9ybV9jYWxsYmFjayBjYWxsYmFjaywgY29uc3Qgdm9pZCAqdWRhdGEpIHsKKwlkdWtf X3RyYW5zZm9ybV9jb250ZXh0IHRmbV9jdHhfYWxsb2M7CisJZHVrX190cmFuc2Zvcm1fY29udGV4 dCAqdGZtX2N0eCA9ICZ0Zm1fY3R4X2FsbG9jOworCWR1a19jb2RlcG9pbnRfdCBjcDsKKworCXRm bV9jdHgtPnRociA9IHRocjsKKworCXRmbV9jdHgtPmhfc3RyID0gZHVrX3RvX2hzdHJpbmcodGhy LCAwKTsKKwlEVUtfQVNTRVJUKHRmbV9jdHgtPmhfc3RyICE9IE5VTEwpOworCisJRFVLX0JXX0lO SVRfUFVTSEJVRih0aHIsICZ0Zm1fY3R4LT5idywgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4odGZt X2N0eC0+aF9zdHIpKTsgIC8qIGluaXRpYWwgc2l6ZSBndWVzcyAqLworCisJdGZtX2N0eC0+cF9z dGFydCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKHRmbV9jdHgtPmhfc3RyKTsKKwl0Zm1fY3R4LT5w X2VuZCA9IHRmbV9jdHgtPnBfc3RhcnQgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTih0Zm1fY3R4 LT5oX3N0cik7CisJdGZtX2N0eC0+cCA9IHRmbV9jdHgtPnBfc3RhcnQ7CisKKwl3aGlsZSAodGZt X2N0eC0+cCA8IHRmbV9jdHgtPnBfZW5kKSB7CisJCWNwID0gKGR1a19jb2RlcG9pbnRfdCkgZHVr X3VuaWNvZGVfZGVjb2RlX3h1dGY4X2NoZWNrZWQodGhyLCAmdGZtX2N0eC0+cCwgdGZtX2N0eC0+ cF9zdGFydCwgdGZtX2N0eC0+cF9lbmQpOworCQljYWxsYmFjayh0Zm1fY3R4LCB1ZGF0YSwgY3Ap OworCX0KKworCURVS19CV19DT01QQUNUKHRociwgJnRmbV9jdHgtPmJ3KTsKKworCSh2b2lkKSBk dWtfYnVmZmVyX3RvX3N0cmluZyh0aHIsIC0xKTsgIC8qIFNhZmUgaWYgdHJhbnNmb3JtIGlzIHNh ZmUuICovCisJcmV0dXJuIDE7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fdHJhbnNmb3JtX2Nh bGxiYWNrX2VuY29kZV91cmkoZHVrX190cmFuc2Zvcm1fY29udGV4dCAqdGZtX2N0eCwgY29uc3Qg dm9pZCAqdWRhdGEsIGR1a19jb2RlcG9pbnRfdCBjcCkgeworCWR1a191aW50OF90IHh1dGY4X2J1 ZltEVUtfVU5JQ09ERV9NQVhfWFVURjhfTEVOR1RIXTsKKwlkdWtfc21hbGxfaW50X3QgbGVuOwor CWR1a19jb2RlcG9pbnRfdCBjcDEsIGNwMjsKKwlkdWtfc21hbGxfaW50X3QgaSwgdDsKKwljb25z dCBkdWtfdWludDhfdCAqdW5lc2NhcGVkX3RhYmxlID0gKGNvbnN0IGR1a191aW50OF90ICopIHVk YXRhOworCisJLyogVVRGLTggZW5jb2RlZCBieXRlcyBlc2NhcGVkIGFzICV4eCV4eCV4eC4uLiAt PiAzICogbmJ5dGVzLgorCSAqIENvZGVwb2ludCByYW5nZSBpcyByZXN0cmljdGVkIHNvIHRoaXMg aXMgYSBzbGlnaHRseSB0b28gbGFyZ2UKKwkgKiBidXQgZG9lc24ndCBtYXR0ZXIuCisJICovCisJ RFVLX0JXX0VOU1VSRSh0Zm1fY3R4LT50aHIsICZ0Zm1fY3R4LT5idywgMyAqIERVS19VTklDT0RF X01BWF9YVVRGOF9MRU5HVEgpOworCisJaWYgKGNwIDwgMCkgeworCQlnb3RvIHVyaV9lcnJvcjsK Kwl9IGVsc2UgaWYgKChjcCA8IDB4ODBMKSAmJiBEVUtfX0NIRUNLX0JJVE1BU0sodW5lc2NhcGVk X3RhYmxlLCBjcCkpIHsKKwkJRFVLX0JXX1dSSVRFX1JBV19VOCh0Zm1fY3R4LT50aHIsICZ0Zm1f Y3R4LT5idywgKGR1a191aW50OF90KSBjcCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGNwID49 IDB4ZGMwMEwgJiYgY3AgPD0gMHhkZmZmTCkgeworCQlnb3RvIHVyaV9lcnJvcjsKKwl9IGVsc2Ug aWYgKGNwID49IDB4ZDgwMEwgJiYgY3AgPD0gMHhkYmZmTCkgeworCQkvKiBOZWVkcyBsb29rYWhl YWQgKi8KKwkJaWYgKGR1a191bmljb2RlX2RlY29kZV94dXRmOCh0Zm1fY3R4LT50aHIsICZ0Zm1f Y3R4LT5wLCB0Zm1fY3R4LT5wX3N0YXJ0LCB0Zm1fY3R4LT5wX2VuZCwgKGR1a191Y29kZXBvaW50 X3QgKikgJmNwMikgPT0gMCkgeworCQkJZ290byB1cmlfZXJyb3I7CisJCX0KKwkJaWYgKCEoY3Ay ID49IDB4ZGMwMEwgJiYgY3AyIDw9IDB4ZGZmZkwpKSB7CisJCQlnb3RvIHVyaV9lcnJvcjsKKwkJ fQorCQljcDEgPSBjcDsKKwkJY3AgPSAoZHVrX2NvZGVwb2ludF90KSAoKChjcDEgLSAweGQ4MDBM KSA8PCAxMCkgKyAoY3AyIC0gMHhkYzAwTCkgKyAweDEwMDAwTCk7CisJfSBlbHNlIGlmIChjcCA+ IDB4MTBmZmZmTCkgeworCQkvKiBBbHRob3VnaCB3ZSBjYW4gYWxsb3cgbm9uLUJNUCBjaGFyYWN0 ZXJzICh0aGV5J2xsIGRlY29kZQorCQkgKiBiYWNrIGludG8gc3Vycm9nYXRlIHBhaXJzKSwgd2Ug ZG9uJ3QgYWxsb3cgZXh0ZW5kZWQgVVRGLTgKKwkJICogY2hhcmFjdGVyczsgdGhleSB3b3VsZCBl bmNvZGUgdG8gVVJJcyB3aGljaCB3b24ndCBkZWNvZGUKKwkJICogYmFjayBiZWNhdXNlIG9mIHN0 cmljdCBVVEYtOCBjaGVja3MgaW4gVVJJIGRlY29kaW5nLgorCQkgKiAoSG93ZXZlciwgd2UgY291 bGQganVzdCBhcyB3ZWxsIGFsbG93IHRoZW0gaGVyZS4pCisJCSAqLworCQlnb3RvIHVyaV9lcnJv cjsKKwl9IGVsc2UgeworCQkvKiBOb24tQk1QIGNoYXJhY3RlcnMgd2l0aGluIHZhbGlkIFVURi04 IHJhbmdlOiBlbmNvZGUgYXMgaXMuCisJCSAqIFRoZXknbGwgZGVjb2RlIGJhY2sgaW50byBzdXJy b2dhdGUgcGFpcnMgaWYgdGhlIGVzY2FwZWQKKwkJICogb3V0cHV0IGlzIGRlY29kZWQuCisJCSAq LworCQk7CisJfQorCisJbGVuID0gZHVrX3VuaWNvZGVfZW5jb2RlX3h1dGY4KChkdWtfdWNvZGVw b2ludF90KSBjcCwgeHV0ZjhfYnVmKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJ dCA9IChkdWtfc21hbGxfaW50X3QpIHh1dGY4X2J1ZltpXTsKKwkJRFVLX0JXX1dSSVRFX1JBV19V OF8zKHRmbV9jdHgtPnRociwKKwkJICAgICAgICAgICAgICAgICAgICAgICZ0Zm1fY3R4LT5idywK KwkJICAgICAgICAgICAgICAgICAgICAgIERVS19BU0NfUEVSQ0VOVCwKKwkJICAgICAgICAgICAg ICAgICAgICAgIChkdWtfdWludDhfdCkgZHVrX3VjX255YmJsZXNbdCA+PiA0XSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1a191aW50OF90KSBkdWtfdWNfbnliYmxl c1t0ICYgMHgwZl0pOworCX0KKworCXJldHVybjsKKworIHVyaV9lcnJvcjoKKwlEVUtfRVJST1Jf VVJJKHRmbV9jdHgtPnRociwgRFVLX1NUUl9JTlZBTElEX0lOUFVUKTsKKwlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuOyk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fdHJhbnNmb3JtX2NhbGxiYWNr X2RlY29kZV91cmkoZHVrX190cmFuc2Zvcm1fY29udGV4dCAqdGZtX2N0eCwgY29uc3Qgdm9pZCAq dWRhdGEsIGR1a19jb2RlcG9pbnRfdCBjcCkgeworCWNvbnN0IGR1a191aW50OF90ICpyZXNlcnZl ZF90YWJsZSA9IChjb25zdCBkdWtfdWludDhfdCAqKSB1ZGF0YTsKKwlkdWtfc21hbGxfdWludF90 IHV0ZjhfYmxlbjsKKwlkdWtfY29kZXBvaW50X3QgbWluX2NwOworCWR1a19zbWFsbF9pbnRfdCB0 OyAgLyogbXVzdCBiZSBzaWduZWQgKi8KKwlkdWtfc21hbGxfdWludF90IGk7CisKKwkvKiBNYXhp bXVtIHdyaXRlIHNpemU6IFhVVEY4IHBhdGggd3JpdGVzIG1heCBEVUtfVU5JQ09ERV9NQVhfWFVU RjhfTEVOR1RILAorCSAqIHBlcmNlbnQgZXNjYXBlIHBhdGggd3JpdGVzIG1heCB0d28gdGltZXMg Q0VTVS04IGVuY29kZWQgQk1QIGxlbmd0aC4KKwkgKi8KKwlEVUtfQldfRU5TVVJFKHRmbV9jdHgt PnRociwKKwkgICAgICAgICAgICAgICZ0Zm1fY3R4LT5idywKKwkgICAgICAgICAgICAgIChEVUtf VU5JQ09ERV9NQVhfWFVURjhfTEVOR1RIID49IDIgKiBEVUtfVU5JQ09ERV9NQVhfQ0VTVThfQk1Q X0xFTkdUSCA/CisJICAgICAgICAgICAgICBEVUtfVU5JQ09ERV9NQVhfWFVURjhfTEVOR1RIIDog RFVLX1VOSUNPREVfTUFYX0NFU1U4X0JNUF9MRU5HVEgpKTsKKworCWlmIChjcCA9PSAoZHVrX2Nv ZGVwb2ludF90KSAnJScpIHsKKwkJY29uc3QgZHVrX3VpbnQ4X3QgKnAgPSB0Zm1fY3R4LT5wOwor CQlkdWtfc2l6ZV90IGxlZnQgPSAoZHVrX3NpemVfdCkgKHRmbV9jdHgtPnBfZW5kIC0gcCk7ICAv KiBieXRlcyBsZWZ0ICovCisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInBlcmNlbnQgZW5jb2Rp bmcsIGxlZnQ9JWxkIiwgKGxvbmcpIGxlZnQpKTsKKworCQlpZiAobGVmdCA8IDIpIHsKKwkJCWdv dG8gdXJpX2Vycm9yOworCQl9CisKKwkJdCA9IGR1a19fZGVjb2RlX2hleF9lc2NhcGUocCwgMik7 CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJmaXJzdCBieXRlOiAlbGQiLCAobG9uZykgdCkpOwor CQlpZiAodCA8IDApIHsKKwkJCWdvdG8gdXJpX2Vycm9yOworCQl9CisKKwkJaWYgKHQgPCAweDgw KSB7CisJCQlpZiAoRFVLX19DSEVDS19CSVRNQVNLKHJlc2VydmVkX3RhYmxlLCB0KSkgeworCQkJ CS8qIGRlY29kZSAnJXh4JyB0byAnJXh4JyBpZiBkZWNvZGVkIGNoYXIgaW4gcmVzZXJ2ZWQgc2V0 ICovCisJCQkJRFVLX0FTU0VSVCh0Zm1fY3R4LT5wIC0gMSA+PSB0Zm1fY3R4LT5wX3N0YXJ0KTsK KwkJCQlEVUtfQldfV1JJVEVfUkFXX1U4XzModGZtX2N0eC0+dGhyLAorCQkJCSAgICAgICAgICAg ICAgICAgICAgICAmdGZtX2N0eC0+YncsCisJCQkJICAgICAgICAgICAgICAgICAgICAgIERVS19B U0NfUEVSQ0VOVCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgcFswXSwKKwkJCQkgICAgICAg ICAgICAgICAgICAgICAgcFsxXSk7CisJCQl9IGVsc2UgeworCQkJCURVS19CV19XUklURV9SQVdf VTgodGZtX2N0eC0+dGhyLCAmdGZtX2N0eC0+YncsIChkdWtfdWludDhfdCkgdCk7CisJCQl9CisJ CQl0Zm1fY3R4LT5wICs9IDI7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBEZWNvZGUgVVRGLTgg Y29kZXBvaW50IGZyb20gYSBzZXF1ZW5jZSBvZiBoZXggZXNjYXBlcy4gIFRoZQorCQkgKiBmaXJz dCBieXRlIG9mIHRoZSBzZXF1ZW5jZSBoYXMgYmVlbiBkZWNvZGVkIHRvICd0Jy4KKwkJICoKKwkJ ICogTm90ZSB0aGF0IFVURi04IHZhbGlkYXRpb24gbXVzdCBiZSBzdHJpY3QgYWNjb3JkaW5nIHRv IHRoZQorCQkgKiBzcGVjaWZpY2F0aW9uOiBFNS4xIFNlY3Rpb24gMTUuMS4zLCBkZWNvZGUgYWxn b3JpdGhtIHN0ZXAKKwkJICogNC5kLnZpaS44LiAgVVJJRXJyb3IgZnJvbSBub24tc2hvcnRlc3Qg ZW5jb2RpbmdzIGlzIGFsc28KKwkJICogc3BlY2lmaWNhbGx5IG5vdGVkIGluIHRoZSBzcGVjLgor CQkgKi8KKworCQlEVUtfQVNTRVJUKHQgPj0gMHg4MCk7CisJCWlmICh0IDwgMHhjMCkgeworCQkJ LyogY29udGludWF0aW9uIGJ5dGUgKi8KKwkJCWdvdG8gdXJpX2Vycm9yOworCQl9IGVsc2UgaWYg KHQgPCAweGUwKSB7CisJCQkvKiAxMTB4IHh4eHg7IDIgYnl0ZXMgKi8KKwkJCXV0ZjhfYmxlbiA9 IDI7CisJCQltaW5fY3AgPSAweDgwTDsKKwkJCWNwID0gdCAmIDB4MWY7CisJCX0gZWxzZSBpZiAo dCA8IDB4ZjApIHsKKwkJCS8qIDExMTAgeHh4eDsgMyBieXRlcyAqLworCQkJdXRmOF9ibGVuID0g MzsKKwkJCW1pbl9jcCA9IDB4ODAwTDsKKwkJCWNwID0gdCAmIDB4MGY7CisJCX0gZWxzZSBpZiAo dCA8IDB4ZjgpIHsKKwkJCS8qIDExMTEgMHh4eDsgNCBieXRlcyAqLworCQkJdXRmOF9ibGVuID0g NDsKKwkJCW1pbl9jcCA9IDB4MTAwMDBMOworCQkJY3AgPSB0ICYgMHgwNzsKKwkJfSBlbHNlIHsK KwkJCS8qIGV4dGVuZGVkIHV0Zi04IG5vdCBhbGxvd2VkIGZvciBVUklzICovCisJCQlnb3RvIHVy aV9lcnJvcjsKKwkJfQorCisJCWlmIChsZWZ0IDwgdXRmOF9ibGVuICogMyAtIDEpIHsKKwkJCS8q ICcleHgleHguLi4leHgnLCBwIHBvaW50cyB0byBjaGFyIGFmdGVyIGZpcnN0ICclJyAqLworCQkJ Z290byB1cmlfZXJyb3I7CisJCX0KKworCQlwICs9IDM7CisJCWZvciAoaSA9IDE7IGkgPCB1dGY4 X2JsZW47IGkrKykgeworCQkJLyogcCBwb2ludHMgdG8gZGlnaXQgcGFydCAoJyV4eScsIHAgcG9p bnRzIHRvICd4JykgKi8KKwkJCXQgPSBkdWtfX2RlY29kZV9oZXhfZXNjYXBlKHAsIDIpOworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoImk9JWxkIHV0ZjhfYmxlbj0lbGQgY3A9JWxkIHQ9MHglMDJs eCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcpIHV0ZjhfYmxlbiwg KGxvbmcpIGNwLCAodW5zaWduZWQgbG9uZykgdCkpOworCQkJaWYgKHQgPCAwKSB7CisJCQkJZ290 byB1cmlfZXJyb3I7CisJCQl9CisJCQlpZiAoKHQgJiAweGMwKSAhPSAweDgwKSB7CisJCQkJZ290 byB1cmlfZXJyb3I7CisJCQl9CisJCQljcCA9IChjcCA8PCA2KSArICh0ICYgMHgzZik7CisJCQlw ICs9IDM7CisJCX0KKwkJcC0tOyAgLyogcCBvdmVyc2hvb3RzICovCisJCXRmbV9jdHgtPnAgPSBw OworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJmaW5hbCBjcD0lbGQsIG1pbl9jcD0lbGQiLCAo bG9uZykgY3AsIChsb25nKSBtaW5fY3ApKTsKKworCQlpZiAoY3AgPCBtaW5fY3AgfHwgY3AgPiAw eDEwZmZmZkwgfHwgKGNwID49IDB4ZDgwMEwgJiYgY3AgPD0gMHhkZmZmTCkpIHsKKwkJCWdvdG8g dXJpX2Vycm9yOworCQl9CisKKwkJLyogVGhlIEU1LjEgYWxnb3JpdGhtIGNoZWNrcyB3aGV0aGVy IG9yIG5vdCBhIGRlY29kZWQgY29kZXBvaW50CisJCSAqIGlzIGJlbG93IDB4ODAgYW5kIHBlcmhh cHMgbWF5IGJlIGluIHRoZSAicmVzZXJ2ZWQiIHNldC4KKwkJICogVGhpcyBzZWVtcyBwb2ludGxl c3MgYmVjYXVzZSB0aGUgc2luZ2xlIGJ5dGUgVVRGLTggY2FzZSBpcworCQkgKiBoYW5kbGVkIHNl cGFyYXRlbHksIGFuZCBub24tc2hvcnRlc3QgZW5jb2RpbmdzIGFyZSByZWplY3RlZC4KKwkJICog U28sICdjcCcgY2Fubm90IGJlIGJlbG93IDB4ODAgaGVyZSwgYW5kIHRodXMgY2Fubm90IGJlIGlu CisJCSAqIHRoZSByZXNlcnZlZCBzZXQuCisJCSAqLworCisJCS8qIHV0Zi04IHZhbGlkYXRpb24g ZW5zdXJlcyB0aGVzZSAqLworCQlEVUtfQVNTRVJUKGNwID49IDB4ODBMICYmIGNwIDw9IDB4MTBm ZmZmTCk7CisKKwkJaWYgKGNwID49IDB4MTAwMDBMKSB7CisJCQljcCAtPSAweDEwMDAwTDsKKwkJ CURVS19BU1NFUlQoY3AgPCAweDEwMDAwMEwpOworCisJCQlEVUtfQldfV1JJVEVfUkFXX1hVVEY4 KHRmbV9jdHgtPnRociwgJnRmbV9jdHgtPmJ3LCAoKGNwID4+IDEwKSArIDB4ZDgwMEwpKTsKKwkJ CURVS19CV19XUklURV9SQVdfWFVURjgodGZtX2N0eC0+dGhyLCAmdGZtX2N0eC0+YncsICgoY3Ag JiAweDAzZmZMKSArIDB4ZGMwMEwpKTsKKwkJfSBlbHNlIHsKKwkJCURVS19CV19XUklURV9SQVdf WFVURjgodGZtX2N0eC0+dGhyLCAmdGZtX2N0eC0+YncsIGNwKTsKKwkJfQorCX0gZWxzZSB7CisJ CURVS19CV19XUklURV9SQVdfWFVURjgodGZtX2N0eC0+dGhyLCAmdGZtX2N0eC0+YncsIGNwKTsK Kwl9CisJcmV0dXJuOworCisgdXJpX2Vycm9yOgorCURVS19FUlJPUl9VUkkodGZtX2N0eC0+dGhy LCBEVUtfU1RSX0lOVkFMSURfSU5QVVQpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30K KworI2lmIGRlZmluZWQoRFVLX1VTRV9TRUNUSU9OX0IpCitEVUtfTE9DQUwgdm9pZCBkdWtfX3Ry YW5zZm9ybV9jYWxsYmFja19lc2NhcGUoZHVrX190cmFuc2Zvcm1fY29udGV4dCAqdGZtX2N0eCwg Y29uc3Qgdm9pZCAqdWRhdGEsIGR1a19jb2RlcG9pbnRfdCBjcCkgeworCURVS19VTlJFRih1ZGF0 YSk7CisKKwlEVUtfQldfRU5TVVJFKHRmbV9jdHgtPnRociwgJnRmbV9jdHgtPmJ3LCA2KTsKKwor CWlmIChjcCA8IDApIHsKKwkJZ290byBlc2NfZXJyb3I7CisJfSBlbHNlIGlmICgoY3AgPCAweDgw TCkgJiYgRFVLX19DSEVDS19CSVRNQVNLKGR1a19fZXNjYXBlX3VuZXNjYXBlZF90YWJsZSwgY3Ap KSB7CisJCURVS19CV19XUklURV9SQVdfVTgodGZtX2N0eC0+dGhyLCAmdGZtX2N0eC0+YncsIChk dWtfdWludDhfdCkgY3ApOworCX0gZWxzZSBpZiAoY3AgPCAweDEwMEwpIHsKKwkJRFVLX0JXX1dS SVRFX1JBV19VOF8zKHRmbV9jdHgtPnRociwKKwkJICAgICAgICAgICAgICAgICAgICAgICZ0Zm1f Y3R4LT5idywKKwkJICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWludDhfdCkgRFVLX0FTQ19Q RVJDRU5ULAorCQkgICAgICAgICAgICAgICAgICAgICAgKGR1a191aW50OF90KSBkdWtfdWNfbnli Ymxlc1tjcCA+PiA0XSwKKwkJICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWludDhfdCkgZHVr X3VjX255YmJsZXNbY3AgJiAweDBmXSk7CisJfSBlbHNlIGlmIChjcCA8IDB4MTAwMDBMKSB7CisJ CURVS19CV19XUklURV9SQVdfVThfNih0Zm1fY3R4LT50aHIsCisJCSAgICAgICAgICAgICAgICAg ICAgICAmdGZtX2N0eC0+YncsCisJCSAgICAgICAgICAgICAgICAgICAgICAoZHVrX3VpbnQ4X3Qp IERVS19BU0NfUEVSQ0VOVCwKKwkJICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWludDhfdCkg RFVLX0FTQ19MQ19VLAorCQkgICAgICAgICAgICAgICAgICAgICAgKGR1a191aW50OF90KSBkdWtf dWNfbnliYmxlc1tjcCA+PiAxMl0sCisJCSAgICAgICAgICAgICAgICAgICAgICAoZHVrX3VpbnQ4 X3QpIGR1a191Y19ueWJibGVzWyhjcCA+PiA4KSAmIDB4MGZdLAorCQkgICAgICAgICAgICAgICAg ICAgICAgKGR1a191aW50OF90KSBkdWtfdWNfbnliYmxlc1soY3AgPj4gNCkgJiAweDBmXSwKKwkJ ICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWludDhfdCkgZHVrX3VjX255YmJsZXNbY3AgJiAw eDBmXSk7CisJfSBlbHNlIHsKKwkJLyogQ2hhcmFjdGVycyBvdXRzaWRlIEJNUCBjYW5ub3QgYmUg ZXNjYXBlKCknZC4gIFdlIGNvdWxkCisJCSAqIGVuY29kZSB0aGVtIGFzIHN1cnJvZ2F0ZSBwYWly cyAoZm9yIGNvZGVwb2ludHMgaW5zaWRlCisJCSAqIHZhbGlkIFVURi04IHJhbmdlLCBidXQgbm90 IGV4dGVuZGVkIFVURi04KS4gIEJlY2F1c2UKKwkJICogZXNjYXBlKCkgYW5kIHVuZXNjYXBlKCkg YXJlIGxlZ2FjeSBmdW5jdGlvbnMsIHdlIGRvbid0LgorCQkgKi8KKwkJZ290byBlc2NfZXJyb3I7 CisJfQorCisJcmV0dXJuOworCisgZXNjX2Vycm9yOgorCURVS19FUlJPUl9UWVBFKHRmbV9jdHgt PnRociwgRFVLX1NUUl9JTlZBTElEX0lOUFVUKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7 Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fdHJhbnNmb3JtX2NhbGxiYWNrX3VuZXNjYXBlKGR1 a19fdHJhbnNmb3JtX2NvbnRleHQgKnRmbV9jdHgsIGNvbnN0IHZvaWQgKnVkYXRhLCBkdWtfY29k ZXBvaW50X3QgY3ApIHsKKwlkdWtfc21hbGxfaW50X3QgdDsKKworCURVS19VTlJFRih1ZGF0YSk7 CisKKwlpZiAoY3AgPT0gKGR1a19jb2RlcG9pbnRfdCkgJyUnKSB7CisJCWNvbnN0IGR1a191aW50 OF90ICpwID0gdGZtX2N0eC0+cDsKKwkJZHVrX3NpemVfdCBsZWZ0ID0gKGR1a19zaXplX3QpICh0 Zm1fY3R4LT5wX2VuZCAtIHApOyAgLyogYnl0ZXMgbGVmdCAqLworCisJCWlmIChsZWZ0ID49IDUg JiYgcFswXSA9PSAndScgJiYKKwkJICAgICgodCA9IGR1a19fZGVjb2RlX2hleF9lc2NhcGUocCAr IDEsIDQpKSA+PSAwKSkgeworCQkJY3AgPSAoZHVrX2NvZGVwb2ludF90KSB0OworCQkJdGZtX2N0 eC0+cCArPSA1OworCQl9IGVsc2UgaWYgKGxlZnQgPj0gMiAmJgorCQkgICAgICAgICAgICgodCA9 IGR1a19fZGVjb2RlX2hleF9lc2NhcGUocCwgMikpID49IDApKSB7CisJCQljcCA9IChkdWtfY29k ZXBvaW50X3QpIHQ7CisJCQl0Zm1fY3R4LT5wICs9IDI7CisJCX0KKwl9CisKKwlEVUtfQldfV1JJ VEVfRU5TVVJFX1hVVEY4KHRmbV9jdHgtPnRociwgJnRmbV9jdHgtPmJ3LCBjcCk7Cit9CisjZW5k aWYgIC8qIERVS19VU0VfU0VDVElPTl9CICovCisKKy8qCisgKiAgRXZhbAorICoKKyAqICBFdmFs IG5lZWRzIHRvIGhhbmRsZSBib3RoIGEgImRpcmVjdCBldmFsIiBhbmQgYW4gImluZGlyZWN0IGV2 YWwiLgorICogIERpcmVjdCBldmFsIGhhbmRsaW5nIG5lZWRzIGFjY2VzcyB0byB0aGUgY2FsbGVy J3MgYWN0aXZhdGlvbiBzbyB0aGF0IGl0cworICogIGxleGljYWwgZW52aXJvbm1lbnQgY2FuIGJl IGFjY2Vzc2VkLiAgQSBkaXJlY3QgZXZhbCBpcyBvbmx5IHBvc3NpYmxlIGZyb20KKyAqICBFQ01B U2NyaXB0IGNvZGU7IGFuIGluZGlyZWN0IGV2YWwgY2FsbCBpcyBwb3NzaWJsZSBhbHNvIGZyb20g QyBjb2RlLgorICogIFdoZW4gYW4gaW5kaXJlY3QgZXZhbCBjYWxsIGlzIG1hZGUgZnJvbSBDIGNv ZGUsIHRoZXJlIG1heSBub3QgYmUgYQorICogIGNhbGxpbmcgYWN0aXZhdGlvbiBhdCBhbGwgd2hp Y2ggbmVlZHMgY2FyZWZ1bCBoYW5kbGluZy4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90 IGR1a19iaV9nbG9iYWxfb2JqZWN0X2V2YWwoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19oc3Ry aW5nICpoOworCWR1a19hY3RpdmF0aW9uICphY3RfY2FsbGVyOworCWR1a19hY3RpdmF0aW9uICph Y3RfZXZhbDsKKwlkdWtfaGNvbXBmdW5jICpmdW5jOworCWR1a19ob2JqZWN0ICpvdXRlcl9sZXhf ZW52OworCWR1a19ob2JqZWN0ICpvdXRlcl92YXJfZW52OworCWR1a19ib29sX3QgdGhpc190b19n bG9iYWwgPSAxOworCWR1a19zbWFsbF91aW50X3QgY29tcF9mbGFnczsKKwlkdWtfaW50X3QgbGV2 ZWwgPSAtMjsKKwlkdWtfc21hbGxfdWludF90IGNhbGxfZmxhZ3M7CisKKwlEVUtfQVNTRVJUKGR1 a19nZXRfdG9wKHRocikgPT0gMSB8fCBkdWtfZ2V0X3RvcCh0aHIpID09IDIpOyAgLyogMiB3aGVu IGNhbGxlZCBieSBkZWJ1Z2dlciAqLworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID49 IDEpOyAgLyogYXQgbGVhc3QgdGhpcyBmdW5jdGlvbiBleGlzdHMgKi8KKwlEVUtfQVNTRVJUKHRo ci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCgodGhyLT5jYWxsc3RhY2tf Y3Vyci0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfRElSRUNUX0VWQUwpID09IDAgfHwgLyogaW5kaXJl Y3QgZXZhbCAqLworCSAgICAgICAgICAgKHRoci0+Y2FsbHN0YWNrX3RvcCA+PSAyKSk7ICAvKiBp ZiBkaXJlY3QgZXZhbCwgY2FsbGluZyBhY3RpdmF0aW9uIG11c3QgZXhpc3QgKi8KKworCS8qCisJ ICogIGNhbGxzdGFja190b3AgLSAxIC0tPiB0aGlzIGZ1bmN0aW9uCisJICogIGNhbGxzdGFja190 b3AgLSAyIC0tPiBjYWxsZXIgKG1heSBub3QgZXhpc3QpCisJICoKKwkgKiAgSWYgY2FsbGVkIGRp cmVjdGx5IGZyb20gQywgY2FsbHN0YWNrX3RvcCBtaWdodCBiZSAxLiAgSWYgY2FsbGluZworCSAq ICBhY3RpdmF0aW9uIGRvZXNuJ3QgZXhpc3QsIGNhbGwgbXVzdCBiZSBpbmRpcmVjdC4KKwkgKi8K KworCWggPSBkdWtfZ2V0X2hzdHJpbmdfbm90c3ltYm9sKHRociwgMCk7CisJaWYgKCFoKSB7CisJ CS8qIFN5bWJvbCBtdXN0IGJlIHJldHVybmVkIGFzIGlzLCBsaWtlIGFueSBub24tc3RyaW5nIHZh bHVlcy4gKi8KKwkJcmV0dXJuIDE7ICAvKiByZXR1cm4gYXJnIGFzLWlzICovCisJfQorCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJLyogTk9URTogbGV2ZWwgaXMgdXNl ZCBvbmx5IGJ5IHRoZSBkZWJ1Z2dlciBhbmQgc2hvdWxkIG5ldmVyIGJlIHByZXNlbnQKKwkgKiBm b3IgYW4gRUNNQVNjcmlwdCBldmFsKCkuCisJICovCisJRFVLX0FTU0VSVChsZXZlbCA9PSAtMik7 ICAvKiBieSBkZWZhdWx0LCB1c2UgY2FsbGVyJ3MgZW52aXJvbm1lbnQgKi8KKwlpZiAoZHVrX2dl dF90b3AodGhyKSA+PSAyICYmIGR1a19pc19udW1iZXIodGhyLCAxKSkgeworCQlsZXZlbCA9IGR1 a19nZXRfaW50KHRociwgMSk7CisJfQorCURVS19BU1NFUlQobGV2ZWwgPD0gLTIpOyAgLyogVGhp cyBpcyBndWFyYW50ZWVkIGJ5IGRlYnVnZ2VyIGNvZGUuICovCisjZW5kaWYKKworCS8qIFsgc291 cmNlIF0gKi8KKworCWNvbXBfZmxhZ3MgPSBEVUtfQ09NUElMRV9FVkFMOworCWFjdF9ldmFsID0g dGhyLT5jYWxsc3RhY2tfY3VycjsgIC8qIHRoaXMgZnVuY3Rpb24gKi8KKwlEVUtfQVNTRVJUKGFj dF9ldmFsICE9IE5VTEwpOworCWFjdF9jYWxsZXIgPSBkdWtfaHRocmVhZF9nZXRfYWN0aXZhdGlv bl9mb3JfbGV2ZWwodGhyLCBsZXZlbCk7CisJaWYgKGFjdF9jYWxsZXIgIT0gTlVMTCkgeworCQkv KiBIYXZlIGEgY2FsbGluZyBhY3RpdmF0aW9uLCBjaGVjayBmb3IgZGlyZWN0IGV2YWwgKG90aGVy d2lzZQorCQkgKiBhc3N1bWUgaW5kaXJlY3QgZXZhbC4KKwkJICovCisJCWlmICgoYWN0X2NhbGxl ci0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfU1RSSUNUKSAmJgorCQkgICAgKGFjdF9ldmFsLT5mbGFn cyAmIERVS19BQ1RfRkxBR19ESVJFQ1RfRVZBTCkpIHsKKwkJCS8qIE9ubHkgZGlyZWN0IGV2YWwg aW5oZXJpdHMgc3RyaWN0bmVzcyBmcm9tIGNhbGxpbmcgY29kZQorCQkJICogKEU1LjEgU2VjdGlv biAxMC4xLjEpLgorCQkJICovCisJCQljb21wX2ZsYWdzIHw9IERVS19DT01QSUxFX1NUUklDVDsK KwkJfQorCX0gZWxzZSB7CisJCURVS19BU1NFUlQoKGFjdF9ldmFsLT5mbGFncyAmIERVS19BQ1Rf RkxBR19ESVJFQ1RfRVZBTCkgPT0gMCk7CisJfQorCisJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgo dGhyLCBEVUtfU1RSSURYX0lOUFVUKTsgIC8qIFhYWDogY29weSBmcm9tIGNhbGxlcj8gKi8KKwlk dWtfanNfY29tcGlsZSh0aHIsCisJICAgICAgICAgICAgICAgKGNvbnN0IGR1a191aW50OF90ICop IERVS19IU1RSSU5HX0dFVF9EQVRBKGgpLAorCSAgICAgICAgICAgICAgIChkdWtfc2l6ZV90KSBE VUtfSFNUUklOR19HRVRfQllURUxFTihoKSwKKwkgICAgICAgICAgICAgICBjb21wX2ZsYWdzKTsK KwlmdW5jID0gKGR1a19oY29tcGZ1bmMgKikgZHVrX2tub3duX2hvYmplY3QodGhyLCAtMSk7CisJ RFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DT01QRlVOQygoZHVrX2hvYmplY3QgKikgZnVuYykp OworCisJLyogWyBzb3VyY2UgdGVtcGxhdGUgXSAqLworCisJLyogRTUgU2VjdGlvbiAxMC40LjIg Ki8KKworCWlmIChhY3RfZXZhbC0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfRElSRUNUX0VWQUwpIHsK KwkJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja190b3AgPj0gMik7CisJCURVS19BU1NFUlQoYWN0 X2NhbGxlciAhPSBOVUxMKTsKKwkJaWYgKGFjdF9jYWxsZXItPmxleF9lbnYgPT0gTlVMTCkgewor CQkJRFVLX0FTU0VSVChhY3RfY2FsbGVyLT52YXJfZW52ID09IE5VTEwpOworCQkJRFVLX0RERChE VUtfREREUFJJTlQoImRlbGF5ZWQgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24iKSk7CisKKwkJ CS8qIHRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBzbyByZS1sb29rdXAgYWN0ICovCisJCQlk dWtfanNfaW5pdF9hY3RpdmF0aW9uX2Vudmlyb25tZW50X3JlY29yZHNfZGVsYXllZCh0aHIsIGFj dF9jYWxsZXIpOworCQl9CisJCURVS19BU1NFUlQoYWN0X2NhbGxlci0+bGV4X2VudiAhPSBOVUxM KTsKKwkJRFVLX0FTU0VSVChhY3RfY2FsbGVyLT52YXJfZW52ICE9IE5VTEwpOworCisJCXRoaXNf dG9fZ2xvYmFsID0gMDsKKworCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX1NUUklDVCgoZHVrX2hvYmpl Y3QgKikgZnVuYykpIHsKKwkJCWR1a19oZGVjZW52ICpuZXdfZW52OworCQkJZHVrX2hvYmplY3Qg KmFjdF9sZXhfZW52OworCisJCQlEVUtfREREKERVS19ERERQUklOVCgiZGlyZWN0IGV2YWwgY2Fs bCB0byBhIHN0cmljdCBmdW5jdGlvbiAtPiAiCisJCQkgICAgICAgICAgICAgICAgICAgICAidmFy X2VudiBhbmQgbGV4X2VudiB0byBhIGZyZXNoIGVudiwgIgorCQkJICAgICAgICAgICAgICAgICAg ICAgInRoaXNfYmluZGluZyB0byBjYWxsZXIncyB0aGlzX2JpbmRpbmciKSk7CisKKwkJCWFjdF9s ZXhfZW52ID0gYWN0X2NhbGxlci0+bGV4X2VudjsKKworCQkJbmV3X2VudiA9IGR1a19oZGVjZW52 X2FsbG9jKHRociwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9G TEFHX0VYVEVOU0lCTEUgfAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JK RUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX0RFQ0VOVikpOworCQkJRFVLX0FT U0VSVChuZXdfZW52ICE9IE5VTEwpOworCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIChkdWtfaG9i amVjdCAqKSBuZXdfZW52KTsKKworCQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPVE9U WVBFKHRoci0+aGVhcCwgKGR1a19ob2JqZWN0ICopIG5ld19lbnYpID09IE5VTEwpOworCQkJRFVL X0hPQkpFQ1RfU0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIChkdWtfaG9iamVjdCAqKSBuZXdfZW52 LCBhY3RfbGV4X2Vudik7CisJCQlEVUtfSE9CSkVDVF9JTkNSRUZfQUxMT1dOVUxMKHRociwgYWN0 X2xleF9lbnYpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm5ld19lbnYgYWxsb2NhdGVkOiAl IWlPIiwgKGR1a19oZWFwaGRyICopIG5ld19lbnYpKTsKKworCQkJb3V0ZXJfbGV4X2VudiA9IChk dWtfaG9iamVjdCAqKSBuZXdfZW52OworCQkJb3V0ZXJfdmFyX2VudiA9IChkdWtfaG9iamVjdCAq KSBuZXdfZW52OworCisJCQlkdWtfaW5zZXJ0KHRociwgMCk7ICAvKiBzdGFzaCB0byBib3R0b20g b2YgdmFsdWUgc3RhY2sgdG8ga2VlcCBuZXdfZW52IHJlYWNoYWJsZSBmb3IgZHVyYXRpb24gb2Yg ZXZhbCAqLworCisJCQkvKiBjb21waWxlcidzIHJlc3BvbnNpYmlsaXR5ICovCisJCQlEVUtfQVNT RVJUKERVS19IT0JKRUNUX0hBU19ORVdFTlYoKGR1a19ob2JqZWN0ICopIGZ1bmMpKTsKKwkJfSBl bHNlIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJkaXJlY3QgZXZhbCBjYWxsIHRvIGEgbm9u LXN0cmljdCBmdW5jdGlvbiAtPiAiCisJCQkgICAgICAgICAgICAgICAgICAgICAidmFyX2VudiBh bmQgbGV4X2VudiB0byBjYWxsZXIncyBlbnZzLCAiCisJCQkgICAgICAgICAgICAgICAgICAgICAi dGhpc19iaW5kaW5nIHRvIGNhbGxlcidzIHRoaXNfYmluZGluZyIpKTsKKworCQkJb3V0ZXJfbGV4 X2VudiA9IGFjdF9jYWxsZXItPmxleF9lbnY7CisJCQlvdXRlcl92YXJfZW52ID0gYWN0X2NhbGxl ci0+dmFyX2VudjsKKworCQkJLyogY29tcGlsZXIncyByZXNwb25zaWJpbGl0eSAqLworCQkJRFVL X0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX05FV0VOVigoZHVrX2hvYmplY3QgKikgZnVuYykpOwor CQl9CisJfSBlbHNlIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImluZGlyZWN0IGV2YWwgY2Fs bCAtPiB2YXJfZW52IGFuZCBsZXhfZW52IHRvICIKKwkJICAgICAgICAgICAgICAgICAgICAgImds b2JhbCBvYmplY3QsIHRoaXNfYmluZGluZyB0byBnbG9iYWwgb2JqZWN0IikpOworCisJCXRoaXNf dG9fZ2xvYmFsID0gMTsKKwkJb3V0ZXJfbGV4X2VudiA9IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhf R0xPQkFMX0VOVl07CisJCW91dGVyX3Zhcl9lbnYgPSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dM T0JBTF9FTlZdOworCX0KKworCS8qIEV2YWwgY29kZSBkb2Vzbid0IG5lZWQgYW4gYXV0b21hdGlj IC5wcm90b3R5cGUgb2JqZWN0LiAqLworCWR1a19qc19wdXNoX2Nsb3N1cmUodGhyLCBmdW5jLCBv dXRlcl92YXJfZW52LCBvdXRlcl9sZXhfZW52LCAwIC8qYWRkX2F1dG9fcHJvdG8qLyk7CisKKwkv KiBbIGVudj8gc291cmNlIHRlbXBsYXRlIGNsb3N1cmUgXSAqLworCisJaWYgKHRoaXNfdG9fZ2xv YmFsKSB7CisJCURVS19BU1NFUlQodGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxdICE9IE5V TEwpOworCQlkdWtfcHVzaF9ob2JqZWN0X2JpZHgodGhyLCBEVUtfQklEWF9HTE9CQUwpOworCX0g ZWxzZSB7CisJCWR1a190dmFsICp0djsKKwkJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja190b3Ag Pj0gMik7CisJCURVS19BU1NFUlQoYWN0X2NhbGxlciAhPSBOVUxMKTsKKwkJdHYgPSAoZHVrX3R2 YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrICsgYWN0X2NhbGxl ci0+Ym90dG9tX2J5dGVvZmYgLSBzaXplb2YoZHVrX3R2YWwpKTsgIC8qIHRoaXMgaXMganVzdCBi ZW5lYXRoIGJvdHRvbSAqLworCQlEVUtfQVNTRVJUKHR2ID49IHRoci0+dmFsc3RhY2spOworCQlk dWtfcHVzaF90dmFsKHRociwgdHYpOworCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJldmFs IC0+IGxleF9lbnY9JSFpTywgdmFyX2Vudj0lIWlPLCB0aGlzX2JpbmRpbmc9JSFUIiwKKwkgICAg ICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgb3V0ZXJfbGV4X2VudiwKKwkgICAgICAg ICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgb3V0ZXJfdmFyX2VudiwKKwkgICAgICAgICAg ICAgICAgICAgICBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCS8qIFsgZW52PyBzb3VyY2Ug dGVtcGxhdGUgY2xvc3VyZSB0aGlzIF0gKi8KKworCWNhbGxfZmxhZ3MgPSAwOworCWlmIChhY3Rf ZXZhbC0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfRElSRUNUX0VWQUwpIHsKKwkJLyogU2V0IERJUkVD VF9FVkFMIGZsYWcgZm9yIHRoZSBjYWxsOyBpdCdzIG5vdCBzdHJpY3RseQorCQkgKiBuZWVkZWQg Zm9yIHRoZSAnaW5uZXInIGV2YWwgY2FsbCAodGhlIGV2YWwgYm9keSkgYnV0CisJCSAqIGN1cnJl bnQgbmV3LnRhcmdldCBpbXBsZW1lbnRhdGlvbiBleHBlY3RzIHRvIGZpbmQgaXQKKwkJICogc28g aXQgY2FuIHRyYXZlcnNlIGRpcmVjdCBldmFsIGNoYWlucyB1cCB0byB0aGUgcmVhbAorCQkgKiBj YWxsaW5nIGZ1bmN0aW9uLgorCQkgKi8KKwkJY2FsbF9mbGFncyB8PSBEVUtfQ0FMTF9GTEFHX0RJ UkVDVF9FVkFMOworCX0KKwlkdWtfaGFuZGxlX2NhbGxfdW5wcm90ZWN0ZWRfbmFyZ3ModGhyLCAw LCBjYWxsX2ZsYWdzKTsKKworCS8qIFsgZW52PyBzb3VyY2UgdGVtcGxhdGUgcmVzdWx0IF0gKi8K KworCXJldHVybiAxOworfQorCisvKgorICogIFBhcnNpbmcgb2YgaW50cyBhbmQgZmxvYXRzCisg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9HTE9CQUxfQlVJTFRJTikKK0RVS19JTlRFUk5BTCBk dWtfcmV0X3QgZHVrX2JpX2dsb2JhbF9vYmplY3RfcGFyc2VfaW50KGR1a19odGhyZWFkICp0aHIp IHsKKwlkdWtfaW50MzJfdCByYWRpeDsKKwlkdWtfc21hbGxfdWludF90IHMybl9mbGFnczsKKwor CURVS19BU1NFUlRfVE9QKHRociwgMik7CisJZHVrX3RvX3N0cmluZyh0aHIsIDApOyAgLyogUmVq ZWN0IHN5bWJvbHMuICovCisKKwlyYWRpeCA9IGR1a190b19pbnQzMih0aHIsIDEpOworCisJLyog V2hpbGUgcGFyc2VJbnQoKSByZWNvZ25pemVzIDB4ZGVhZGJlZWYsIGl0IGRvZXNuJ3QgcmVjb2du aXplCisJICogRVMyMDE1IDBvMTIzIG9yIDBiMTAwMDEuCisJICovCisJczJuX2ZsYWdzID0gRFVL X1MyTl9GTEFHX1RSSU1fV0hJVEUgfAorCSAgICAgICAgICAgIERVS19TMk5fRkxBR19BTExPV19H QVJCQUdFIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfUExVUyB8CisJICAgICAg ICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX01JTlVTIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZM QUdfQUxMT1dfTEVBRElOR19aRVJPIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1df QVVUT19IRVhfSU5UOworCisJLyogU3BlY2lmaWNhdGlvbiBzdHJpcFByZWZpeCBtYXBzIHRvIERV S19TMk5fRkxBR19BTExPV19BVVRPX0hFWF9JTlQuCisJICoKKwkgKiBEb24ndCBhdXRvZGV0ZWN0 IG9jdGFscyAoZnJvbSBsZWFkaW5nIHplcm9lcyksIHJlcXVpcmUgdXNlciBjb2RlIHRvCisJICog cHJvdmlkZSBhbiBleHBsaWNpdCByYWRpeCA4IGZvciBwYXJzaW5nIG9jdGFsLiAgU2VlIHdyaXRl LXVwIGZyb20gTW96aWxsYToKKwkgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1V Uy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9wYXJzZUludCNF Q01BU2NyaXB0XzVfUmVtb3Zlc19PY3RhbF9JbnRlcnByZXRhdGlvbgorCSAqLworCisJaWYgKHJh ZGl4ICE9IDApIHsKKwkJaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CisJCQlnb3RvIHJl dF9uYW47CisJCX0KKwkJaWYgKHJhZGl4ICE9IDE2KSB7CisJCQlzMm5fZmxhZ3MgJj0gfkRVS19T Mk5fRkxBR19BTExPV19BVVRPX0hFWF9JTlQ7CisJCX0KKwl9IGVsc2UgeworCQlyYWRpeCA9IDEw OworCX0KKworCWR1a19kdXBfMCh0aHIpOworCWR1a19udW1jb252X3BhcnNlKHRociwgKGR1a19z bWFsbF9pbnRfdCkgcmFkaXgsIHMybl9mbGFncyk7CisJcmV0dXJuIDE7CisKKyByZXRfbmFuOgor CWR1a19wdXNoX25hbih0aHIpOworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0dM T0JBTF9CVUlMVElOICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfR0xPQkFMX0JVSUxUSU4pCitE VUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9nbG9iYWxfb2JqZWN0X3BhcnNlX2Zsb2F0KGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfc21hbGxfdWludF90IHMybl9mbGFnczsKKworCURVS19B U1NFUlRfVE9QKHRociwgMSk7CisJZHVrX3RvX3N0cmluZyh0aHIsIDApOyAgLyogUmVqZWN0IHN5 bWJvbHMuICovCisKKwkvKiBYWFg6IGNoZWNrIGZsYWdzICovCisJczJuX2ZsYWdzID0gRFVLX1My Tl9GTEFHX1RSSU1fV0hJVEUgfAorCSAgICAgICAgICAgIERVS19TMk5fRkxBR19BTExPV19FWFAg fAorCSAgICAgICAgICAgIERVS19TMk5fRkxBR19BTExPV19HQVJCQUdFIHwKKwkgICAgICAgICAg ICBEVUtfUzJOX0ZMQUdfQUxMT1dfUExVUyB8CisJICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FM TE9XX01JTlVTIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfSU5GIHwKKwkgICAg ICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfRlJBQyB8CisJICAgICAgICAgICAgRFVLX1MyTl9G TEFHX0FMTE9XX05BS0VEX0ZSQUMgfAorCSAgICAgICAgICAgIERVS19TMk5fRkxBR19BTExPV19F TVBUWV9GUkFDIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfTEVBRElOR19aRVJP OworCisJZHVrX251bWNvbnZfcGFyc2UodGhyLCAxMCAvKnJhZGl4Ki8sIHMybl9mbGFncyk7CisJ cmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfR0xPQkFMX0JVSUxUSU4gKi8KKworLyoK KyAqICBOdW1iZXIgY2hlY2tlcnMKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0dMT0JBTF9C VUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfZ2xvYmFsX29iamVjdF9pc19u YW4oZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19kb3VibGVfdCBkID0gZHVrX3RvX251bWJlcih0 aHIsIDApOworCWR1a19wdXNoX2Jvb2xlYW4odGhyLCAoZHVrX2Jvb2xfdCkgRFVLX0lTTkFOKGQp KTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9HTE9CQUxfQlVJTFRJTiAqLwor CisjaWYgZGVmaW5lZChEVUtfVVNFX0dMT0JBTF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19y ZXRfdCBkdWtfYmlfZ2xvYmFsX29iamVjdF9pc19maW5pdGUoZHVrX2h0aHJlYWQgKnRocikgewor CWR1a19kb3VibGVfdCBkID0gZHVrX3RvX251bWJlcih0aHIsIDApOworCWR1a19wdXNoX2Jvb2xl YW4odGhyLCAoZHVrX2Jvb2xfdCkgRFVLX0lTRklOSVRFKGQpKTsKKwlyZXR1cm4gMTsKK30KKyNl bmRpZiAgLyogRFVLX1VTRV9HTE9CQUxfQlVJTFRJTiAqLworCisvKgorICogIFVSSSBoYW5kbGlu ZworICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfR0xPQkFMX0JVSUxUSU4pCitEVUtfSU5URVJO QUwgZHVrX3JldF90IGR1a19iaV9nbG9iYWxfb2JqZWN0X2RlY29kZV91cmkoZHVrX2h0aHJlYWQg KnRocikgeworCXJldHVybiBkdWtfX3RyYW5zZm9ybV9oZWxwZXIodGhyLCBkdWtfX3RyYW5zZm9y bV9jYWxsYmFja19kZWNvZGVfdXJpLCAoY29uc3Qgdm9pZCAqKSBkdWtfX2RlY29kZV91cmlfcmVz ZXJ2ZWRfdGFibGUpOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9nbG9iYWxf b2JqZWN0X2RlY29kZV91cmlfY29tcG9uZW50KGR1a19odGhyZWFkICp0aHIpIHsKKwlyZXR1cm4g ZHVrX190cmFuc2Zvcm1faGVscGVyKHRociwgZHVrX190cmFuc2Zvcm1fY2FsbGJhY2tfZGVjb2Rl X3VyaSwgKGNvbnN0IHZvaWQgKikgZHVrX19kZWNvZGVfdXJpX2NvbXBvbmVudF9yZXNlcnZlZF90 YWJsZSk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2dsb2JhbF9vYmplY3Rf ZW5jb2RlX3VyaShkdWtfaHRocmVhZCAqdGhyKSB7CisJcmV0dXJuIGR1a19fdHJhbnNmb3JtX2hl bHBlcih0aHIsIGR1a19fdHJhbnNmb3JtX2NhbGxiYWNrX2VuY29kZV91cmksIChjb25zdCB2b2lk ICopIGR1a19fZW5jb2RlX3VyaXVuZXNjYXBlZF90YWJsZSk7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfcmV0X3QgZHVrX2JpX2dsb2JhbF9vYmplY3RfZW5jb2RlX3VyaV9jb21wb25lbnQoZHVrX2h0 aHJlYWQgKnRocikgeworCXJldHVybiBkdWtfX3RyYW5zZm9ybV9oZWxwZXIodGhyLCBkdWtfX3Ry YW5zZm9ybV9jYWxsYmFja19lbmNvZGVfdXJpLCAoY29uc3Qgdm9pZCAqKSBkdWtfX2VuY29kZV91 cmljb21wb25lbnRfdW5lc2NhcGVkX3RhYmxlKTsKK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9T RUNUSU9OX0IpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9nbG9iYWxfb2JqZWN0X2Vz Y2FwZShkdWtfaHRocmVhZCAqdGhyKSB7CisJcmV0dXJuIGR1a19fdHJhbnNmb3JtX2hlbHBlcih0 aHIsIGR1a19fdHJhbnNmb3JtX2NhbGxiYWNrX2VzY2FwZSwgKGNvbnN0IHZvaWQgKikgTlVMTCk7 Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX2dsb2JhbF9vYmplY3RfdW5lc2Nh cGUoZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiBkdWtfX3RyYW5zZm9ybV9oZWxwZXIodGhy LCBkdWtfX3RyYW5zZm9ybV9jYWxsYmFja191bmVzY2FwZSwgKGNvbnN0IHZvaWQgKikgTlVMTCk7 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfU0VDVElPTl9CICovCisjZW5kaWYgIC8qIERVS19VU0Vf R0xPQkFMX0JVSUxUSU4gKi8KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19f Q0hFQ0tfQklUTUFTSworI3VuZGVmIERVS19fTUtCSVRTCisvKgorICogIEpTT04gYnVpbHQtaW5z LgorICoKKyAqICBTZWUgZG9jL2pzb24ucnN0LgorICoKKyAqICBDb2RlcG9pbnRzIGFyZSBoYW5k bGVkIGFzIGR1a191aW50X2Zhc3QzMl90IHRvIGVuc3VyZSB0aGF0IHRoZSBmdWxsCisgKiAgdW5z aWduZWQgMzItYml0IHJhbmdlIGlzIHN1cHBvcnRlZC4gIFRoaXMgbWF0dGVycyB0byBlLmcuIEpY LgorICoKKyAqICBJbnB1dCBwYXJzaW5nIGRvZXNuJ3QgZG8gYW4gZXhwbGljaXQgZW5kLW9mLWlu cHV0IGNoZWNrIGF0IGFsbC4gIFRoaXMgaXMKKyAqICBzYWZlOiBpbnB1dCBzdHJpbmcgZGF0YSBp cyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQgKDB4MDApIGFuZCB2YWxpZCBKU09OCisgKiAgaW5wdXRz IG5ldmVyIGNvbnRhaW4gcGxhaW4gTlVMIGNoYXJhY3RlcnMsIHNvIHRoYXQgYXMgbG9uZyBhcyBz eW50YXggY2hlY2tzCisgKiAgYXJlIGNvcnJlY3QsIHdlJ2xsIG5ldmVyIHJlYWQgcGFzdCB0aGUg TlVMLiAgVGhpcyBhcHByb2FjaCByZWR1Y2VzIGNvZGUgc2l6ZQorICogIGFuZCBpbXByb3ZlcyBw YXJzaW5nIHBlcmZvcm1hbmNlLCBidXQgaXQncyBjcml0aWNhbCB0aGF0IHN5bnRheCBjaGVja3Mg YXJlCisgKiAgaW5kZWVkIGNvcnJlY3QhCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFs LmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0pTT05fU1VQ UE9SVCkKKworLyoKKyAqICBMb2NhbCBkZWZpbmVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K KyAqLworCisjZGVmaW5lIERVS19fSlNPTl9ERUNTVFJfQlVGU0laRSAxMjgKKyNkZWZpbmUgRFVL X19KU09OX0RFQ1NUUl9DSFVOS1NJWkUgNjQKKyNkZWZpbmUgRFVLX19KU09OX0VOQ1NUUl9DSFVO S1NJWkUgNjQKKyNkZWZpbmUgRFVLX19KU09OX1NUUklOR0lGWV9CVUZTSVpFIDEyOAorI2RlZmlu ZSBEVUtfX0pTT05fTUFYX0VTQ19MRU4gMTAgIC8qICdcVWRlYWRiZWVmJyAqLworCitEVUtfTE9D QUxfREVDTCB2b2lkIGR1a19fZGVjX3N5bnRheF9lcnJvcihkdWtfanNvbl9kZWNfY3R4ICpqc19j dHgpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2RlY19lYXRfd2hpdGUoZHVrX2pzb25fZGVj X2N0eCAqanNfY3R4KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpCitEVUtfTE9DQUxfREVDTCBk dWtfdWludDhfdCBkdWtfX2RlY19wZWVrKGR1a19qc29uX2RlY19jdHggKmpzX2N0eCk7CisjZW5k aWYKK0RVS19MT0NBTF9ERUNMIGR1a191aW50OF90IGR1a19fZGVjX2dldChkdWtfanNvbl9kZWNf Y3R4ICpqc19jdHgpOworRFVLX0xPQ0FMX0RFQ0wgZHVrX3VpbnQ4X3QgZHVrX19kZWNfZ2V0X25v bndoaXRlKGR1a19qc29uX2RlY19jdHggKmpzX2N0eCk7CitEVUtfTE9DQUxfREVDTCBkdWtfdWlu dF9mYXN0MzJfdCBkdWtfX2RlY19kZWNvZGVfaGV4X2VzY2FwZShkdWtfanNvbl9kZWNfY3R4ICpq c19jdHgsIGR1a19zbWFsbF91aW50X3Qgbik7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZGVj X3JlcV9zdHJpZHgoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4LCBkdWtfc21hbGxfdWludF90IHN0 cmlkeCk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZGVjX3N0cmluZyhkdWtfanNvbl9kZWNf Y3R4ICpqc19jdHgpOworI2lmIGRlZmluZWQoRFVLX1VTRV9KWCkKK0RVS19MT0NBTF9ERUNMIHZv aWQgZHVrX19kZWNfcGxhaW5fc3RyaW5nKGR1a19qc29uX2RlY19jdHggKmpzX2N0eCk7CitEVUtf TE9DQUxfREVDTCB2b2lkIGR1a19fZGVjX3BvaW50ZXIoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4 KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19kZWNfYnVmZmVyKGR1a19qc29uX2RlY19jdHgg KmpzX2N0eCk7CisjZW5kaWYKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19kZWNfbnVtYmVyKGR1 a19qc29uX2RlY19jdHggKmpzX2N0eCk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZGVjX29i amFycl9lbnRyeShkdWtfanNvbl9kZWNfY3R4ICpqc19jdHgpOworRFVLX0xPQ0FMX0RFQ0wgdm9p ZCBkdWtfX2RlY19vYmphcnJfZXhpdChkdWtfanNvbl9kZWNfY3R4ICpqc19jdHgpOworRFVLX0xP Q0FMX0RFQ0wgdm9pZCBkdWtfX2RlY19vYmplY3QoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4KTsK K0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19kZWNfYXJyYXkoZHVrX2pzb25fZGVjX2N0eCAqanNf Y3R4KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19kZWNfdmFsdWUoZHVrX2pzb25fZGVjX2N0 eCAqanNfY3R4KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19kZWNfcmV2aXZlcl93YWxrKGR1 a19qc29uX2RlY19jdHggKmpzX2N0eCk7CisKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbWl0 XzEoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtfdWludF9mYXN0OF90IGNoKTsKK0RVS19M T0NBTF9ERUNMIHZvaWQgZHVrX19lbWl0XzIoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtf dWludF9mYXN0OF90IGNoMSwgZHVrX3VpbnRfZmFzdDhfdCBjaDIpOworRFVLX0xPQ0FMX0RFQ0wg dm9pZCBkdWtfX3VuZW1pdF8xKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCk7CitEVUtfTE9DQUxf REVDTCB2b2lkIGR1a19fZW1pdF9oc3RyaW5nKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVr X2hzdHJpbmcgKmgpOworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorRFVLX0xPQ0FMX0RF Q0wgdm9pZCBkdWtfX2VtaXRfY3N0cmluZyhkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgsIGNvbnN0 IGNoYXIgKnApOworI2VuZGlmCitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZW1pdF9zdHJpZHgo ZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtfc21hbGxfdWludF90IHN0cmlkeCk7CitEVUtf TE9DQUxfREVDTCBkdWtfdWludDhfdCAqZHVrX19lbWl0X2VzY19hdXRvX2Zhc3QoZHVrX2pzb25f ZW5jX2N0eCAqanNfY3R4LCBkdWtfdWludF9mYXN0MzJfdCBjcCwgZHVrX3VpbnQ4X3QgKnEpOwor RFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VuY19rZXlfYXV0b3F1b3RlKGR1a19qc29uX2VuY19j dHggKmpzX2N0eCwgZHVrX2hzdHJpbmcgKmspOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2Vu Y19xdW90ZV9zdHJpbmcoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtfaHN0cmluZyAqaF9z dHIpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VuY19vYmphcnJfZW50cnkoZHVrX2pzb25f ZW5jX2N0eCAqanNfY3R4LCBkdWtfaWR4X3QgKmVudHJ5X3RvcCk7CitEVUtfTE9DQUxfREVDTCB2 b2lkIGR1a19fZW5jX29iamFycl9leGl0KGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX2lk eF90ICplbnRyeV90b3ApOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VuY19vYmplY3QoZHVr X2pzb25fZW5jX2N0eCAqanNfY3R4KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbmNfYXJy YXkoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4KTsKK0RVS19MT0NBTF9ERUNMIGR1a19ib29sX3Qg ZHVrX19lbmNfdmFsdWUoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtfaWR4X3QgaWR4X2hv bGRlcik7CitEVUtfTE9DQUxfREVDTCBkdWtfYm9vbF90IGR1a19fZW5jX2FsbG93X2ludG9fcHJv cGxpc3QoZHVrX3R2YWwgKnR2KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbmNfZG91Ymxl KGR1a19qc29uX2VuY19jdHggKmpzX2N0eCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQp CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZW5jX2Zhc3RpbnRfdHZhbChkdWtfanNvbl9lbmNf Y3R4ICpqc19jdHgsIGR1a190dmFsICp0dik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0Vf SlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbmNf YnVmZmVyX2p4X2pjKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX2hidWZmZXIgKmgpOwor RFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VuY19wb2ludGVyKGR1a19qc29uX2VuY19jdHggKmpz X2N0eCwgdm9pZCAqcHRyKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBP UlQpCitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZW5jX2J1Zm9iaihkdWtfanNvbl9lbmNfY3R4 ICpqc19jdHgsIGR1a19oYnVmb2JqICpoX2J1Zm9iaik7CisjZW5kaWYKKyNlbmRpZgorI2lmIGRl ZmluZWQoRFVLX1VTRV9KU09OX1NUUklOR0lGWV9GQVNUUEFUSCkKK0RVS19MT0NBTF9ERUNMIHZv aWQgZHVrX19lbmNfYnVmZmVyX2pzb25fZmFzdHBhdGgoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4 LCBkdWtfaGJ1ZmZlciAqaCk7CisjZW5kaWYKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbmNf bmV3bGluZV9pbmRlbnQoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtfdWludF90IGRlcHRo KTsKKworLyoKKyAqICBIZWxwZXIgdGFibGVzCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9K U09OX1FVT1RFU1RSSU5HX0ZBU1RQQVRIKQorRFVLX0xPQ0FMIGNvbnN0IGR1a191aW50OF90IGR1 a19fanNvbl9xdW90ZXN0cl9sb29rdXBbMjU2XSA9IHsKKwkvKiAweDAwIC4uLiAweDdmOiBhcyBp cworCSAqIDB4ODA6IGVzY2FwZSBnZW5lcmljYWxseQorCSAqIDB4ODE6IHNsb3cgcGF0aAorCSAq IDB4YTAgLi4uIDB4ZmY6IGJhY2tzbGFzaCArIG9uZSBjaGFyCisJICovCisKKwkweDgwLCAweDgw LCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweGUyLCAweGY0LCAweGVlLCAw eDgwLCAweGU2LCAweGYyLCAweDgwLCAweDgwLAorCTB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4 ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAs IDB4ODAsIDB4ODAsCisJMHgyMCwgMHgyMSwgMHhhMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwg MHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKwkw eDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5 LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAorCTB4NDAsIDB4NDEsIDB4NDIs IDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4 NGMsIDB4NGQsIDB4NGUsIDB4NGYsCisJMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1 NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwgMHg1YSwgMHg1YiwgMHhkYywgMHg1ZCwgMHg1ZSwg MHg1ZiwKKwkweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAw eDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAorCTB4NzAsIDB4 NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksIDB4N2Es IDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4ODEsCisJMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwg MHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4 MSwgMHg4MSwgMHg4MSwKKwkweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgx LCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLAor CTB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4 ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsCisJMHg4MSwgMHg4MSwgMHg4 MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwg MHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwKKwkweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAw eDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgx LCAweDgxLAorCTB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEs IDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsCisJMHg4MSwg MHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4 MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwKKwkweDgxLCAweDgxLCAweDgxLCAweDgx LCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAw eDgxLCAweDgxLCAweDgxCit9OworI2Vsc2UgIC8qIERVS19VU0VfSlNPTl9RVU9URVNUUklOR19G QVNUUEFUSCAqLworRFVLX0xPQ0FMIGNvbnN0IGR1a191aW50OF90IGR1a19fanNvbl9xdW90ZXN0 cl9lc2NbMTRdID0geworCURVS19BU0NfTlVMLCBEVUtfQVNDX05VTCwgRFVLX0FTQ19OVUwsIERV S19BU0NfTlVMLAorCURVS19BU0NfTlVMLCBEVUtfQVNDX05VTCwgRFVLX0FTQ19OVUwsIERVS19B U0NfTlVMLAorCURVS19BU0NfTENfQiwgRFVLX0FTQ19MQ19ULCBEVUtfQVNDX0xDX04sIERVS19B U0NfTlVMLAorCURVS19BU0NfTENfRiwgRFVLX0FTQ19MQ19SCit9OworI2VuZGlmICAvKiBEVUtf VVNFX0pTT05fUVVPVEVTVFJJTkdfRkFTVFBBVEggKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9K U09OX0RFQ1NUUklOR19GQVNUUEFUSCkKK0RVS19MT0NBTCBjb25zdCBkdWtfdWludDhfdCBkdWtf X2pzb25fZGVjc3RyX2xvb2t1cFsyNTZdID0geworCS8qIDB4MDA6IHNsb3cgcGF0aAorCSAqIG90 aGVyOiBhcyBpcworCSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDIxLCAw eDAwLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDJi LCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorCTB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQs IDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4 M2UsIDB4M2YsCisJMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0 NywgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKKwkweDUw LCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LCAweDU5LCAw eDVhLCAweDViLCAweDAwLCAweDVkLCAweDVlLCAweDVmLAorCTB4NjAsIDB4NjEsIDB4NjIsIDB4 NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMs IDB4NmQsIDB4NmUsIDB4NmYsCisJMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwg MHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3 ZiwKKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4 LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorCTB4OTAsIDB4OTEs IDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4 OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisJMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhh NCwgMHhhNSwgMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwg MHhhZSwgMHhhZiwKKwkweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAw eGI3LCAweGI4LCAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLAorCTB4 YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4Yzks IDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCisJMHhkMCwgMHhkMSwgMHhkMiwg MHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhk YywgMHhkZCwgMHhkZSwgMHhkZiwKKwkweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1 LCAweGU2LCAweGU3LCAweGU4LCAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAw eGVmLAorCTB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4 ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYKK307CisjZW5kaWYg IC8qIERVS19VU0VfSlNPTl9ERUNTVFJJTkdfRkFTVFBBVEggKi8KKworI2lmIGRlZmluZWQoRFVL X1VTRV9KU09OX0VBVFdISVRFX0ZBU1RQQVRIKQorRFVLX0xPQ0FMIGNvbnN0IGR1a191aW50OF90 IGR1a19fanNvbl9lYXR3aGl0ZV9sb29rdXBbMjU2XSA9IHsKKwkvKiAweDAwOiBmaW5pc2ggKG5v bi13aGl0ZSkKKwkgKiAweDAxOiBjb250aW51ZQorCSAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAs IDB4MDEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwKKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJ MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAKK307CisjZW5kaWYgIC8qIERVS19VU0VfSlNPTl9FQVRXSElURV9GQVNUUEFUSCAqLwor CisjaWYgZGVmaW5lZChEVUtfVVNFX0pTT05fREVDTlVNQkVSX0ZBU1RQQVRIKQorRFVLX0xPQ0FM IGNvbnN0IGR1a191aW50OF90IGR1a19fanNvbl9kZWNudW1iZXJfbG9va3VwWzI1Nl0gPSB7CisJ LyogMHgwMDogZmluaXNoIChub3QgcGFydCBvZiBudW1iZXIpCisJICogMHgwMTogY29udGludWUK KwkgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgw MSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAx LCAweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor CTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworI2VuZGlmICAvKiBEVUtfVVNF X0pTT05fREVDTlVNQkVSX0ZBU1RQQVRIICovCisKKy8qCisgKiAgUGFyc2luZyBpbXBsZW1lbnRh dGlvbi4KKyAqCisgKiAgSlNPTiBsZXhlciBpcyBub3cgc2VwYXJhdGUgZnJvbSBkdWtfbGV4ZXIu YyBiZWNhdXNlIHRoZXJlIGFyZSBudW1lcm91cworICogIHNtYWxsIGRpZmZlcmVuY2VzIG1ha2lu ZyBpdCBkaWZmaWN1bHQgdG8gc2hhcmUgdGhlIGxleGVyLgorICoKKyAqICBUaGUgcGFyc2VyIGhl cmUgd29ya3Mgd2l0aCByYXcgYnl0ZXMgZGlyZWN0bHk7IHRoaXMgd29ya3MgYmVjYXVzZSBhbGwK KyAqICBKU09OIGRlbGltaXRlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMuICBJbnZhbGlkIHhVVEYt OCBlbmNvZGVkIHZhbHVlcworICogIGluc2lkZSBzdHJpbmdzIHdpbGwgYmUgcGFzc2VkIG9uIHdp dGhvdXQgbm9ybWFsaXphdGlvbjsgdGhpcyBpcyBub3QgYQorICogIGNvbXBsaWFuY2UgY29uY2Vy biBiZWNhdXNlIGNvbXBsaWFudCBpbnB1dHMgd2lsbCBhbHdheXMgYmUgdmFsaWQKKyAqICBDRVNV LTggZW5jb2RpbmdzLgorICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVjX3N5bnRheF9lcnJv cihkdWtfanNvbl9kZWNfY3R4ICpqc19jdHgpIHsKKwkvKiBTaGFyZWQgaGFuZGxlciB0byBtaW5p bWl6ZSBwYXJzZXIgc2l6ZS4gIENhdXNlIHdpbGwgYmUKKwkgKiBoaWRkZW4sIHVuZm9ydHVuYXRl bHksIGJ1dCB3ZSdsbCBoYXZlIGFuIG9mZnNldCB3aGljaAorCSAqIGlzIG9mdGVuIHF1aXRlIGVu b3VnaC4KKwkgKi8KKwlEVUtfRVJST1JfRk1UMShqc19jdHgtPnRociwgRFVLX0VSUl9TWU5UQVhf RVJST1IsIERVS19TVFJfRk1UX0lOVkFMSURfSlNPTiwKKwkgICAgICAgICAgICAgICAobG9uZykg KGpzX2N0eC0+cCAtIGpzX2N0eC0+cF9zdGFydCkpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47 KTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWNfZWF0X3doaXRlKGR1a19qc29uX2RlY19j dHggKmpzX2N0eCkgeworCWNvbnN0IGR1a191aW50OF90ICpwOworCWR1a191aW50OF90IHQ7CisK KwlwID0ganNfY3R4LT5wOworCWZvciAoOzspIHsKKwkJRFVLX0FTU0VSVChwIDw9IGpzX2N0eC0+ cF9lbmQpOworCQl0ID0gKnA7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfSlNPTl9FQVRXSElURV9G QVNUUEFUSCkKKwkJLyogVGhpcyBmYXN0IHBhdGggaXMgcHJldHR5IG1hcmdpbmFsIGluIHByYWN0 aWNlLgorCQkgKiBYWFg6IGNhbmRpZGF0ZSBmb3IgcmVtb3ZhbC4KKwkJICovCisJCURVS19BU1NF UlQoZHVrX19qc29uX2VhdHdoaXRlX2xvb2t1cFsweDAwXSA9PSAweDAwKTsgIC8qIGVuZC1vZi1p bnB1dCBicmVha3MgKi8KKwkJaWYgKGR1a19fanNvbl9lYXR3aGl0ZV9sb29rdXBbdF0gPT0gMCkg eworCQkJYnJlYWs7CisJCX0KKyNlbHNlICAvKiBEVUtfVVNFX0pTT05fRUFUV0hJVEVfRkFTVFBB VEggKi8KKwkJaWYgKCEodCA9PSAweDIwIHx8IHQgPT0gMHgwYSB8fCB0ID09IDB4MGQgfHwgdCA9 PSAweDA5KSkgeworCQkJLyogTlVMIGFsc28gY29tZXMgaGVyZS4gIENvbXBhcmlzb24gb3JkZXIg bWF0dGVycywgMHgyMAorCQkJICogaXMgbW9zdCBjb21tb24gd2hpdGVzcGFjZS4KKwkJCSAqLwor CQkJYnJlYWs7CisJCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9KU09OX0VBVFdISVRFX0ZBU1RQQVRI ICovCisJCXArKzsKKwl9CisJanNfY3R4LT5wID0gcDsKK30KKworI2lmIGRlZmluZWQoRFVLX1VT RV9KWCkKK0RVS19MT0NBTCBkdWtfdWludDhfdCBkdWtfX2RlY19wZWVrKGR1a19qc29uX2RlY19j dHggKmpzX2N0eCkgeworCURVS19BU1NFUlQoanNfY3R4LT5wIDw9IGpzX2N0eC0+cF9lbmQpOwor CXJldHVybiAqanNfY3R4LT5wOworfQorI2VuZGlmCisKK0RVS19MT0NBTCBkdWtfdWludDhfdCBk dWtfX2RlY19nZXQoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4KSB7CisJRFVLX0FTU0VSVChqc19j dHgtPnAgPD0ganNfY3R4LT5wX2VuZCk7CisJcmV0dXJuICpqc19jdHgtPnArKzsKK30KKworRFVL X0xPQ0FMIGR1a191aW50OF90IGR1a19fZGVjX2dldF9ub253aGl0ZShkdWtfanNvbl9kZWNfY3R4 ICpqc19jdHgpIHsKKwlkdWtfX2RlY19lYXRfd2hpdGUoanNfY3R4KTsKKwlyZXR1cm4gZHVrX19k ZWNfZ2V0KGpzX2N0eCk7Cit9CisKKy8qIEZvciBKWCwgZXhwcmVzc2luZyB0aGUgd2hvbGUgdW5z aWduZWQgMzItYml0IHJhbmdlIG1hdHRlcnMuICovCitEVUtfTE9DQUwgZHVrX3VpbnRfZmFzdDMy X3QgZHVrX19kZWNfZGVjb2RlX2hleF9lc2NhcGUoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4LCBk dWtfc21hbGxfdWludF90IG4pIHsKKwlkdWtfc21hbGxfdWludF90IGk7CisJZHVrX3VpbnRfZmFz dDMyX3QgcmVzID0gMDsKKwlkdWtfdWludDhfdCB4OworCWR1a19zbWFsbF9pbnRfdCB0OworCisJ Zm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkvKiBYWFg6IHNoYXJlIGhlbHBlciBmcm9tIGxl eGVyOyBkdWtfbGV4ZXIuYyAvIGhleHZhbCgpLiAqLworCisJCXggPSBkdWtfX2RlY19nZXQoanNf Y3R4KTsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImRlY29kZV9oZXhfZXNjYXBlOiBpPSVsZCwg bj0lbGQsIHJlcz0lbGQsIHg9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGks IChsb25nKSBuLCAobG9uZykgcmVzLCAobG9uZykgeCkpOworCisJCS8qIHggPT0gMHgwMCAoRU9G KSBjYXVzZXMgc3ludGF4X2Vycm9yICovCisJCURVS19BU1NFUlQoZHVrX2hleF9kZWN0YWJbMF0g PT0gLTEpOworCQl0ID0gZHVrX2hleF9kZWN0YWJbeCAmIDB4ZmZdOworCQlpZiAoRFVLX0xJS0VM WSh0ID49IDApKSB7CisJCQlyZXMgPSAocmVzICogMTYpICsgKGR1a191aW50X2Zhc3QzMl90KSB0 OworCQl9IGVsc2UgeworCQkJLyogY2F0Y2hlcyBFT0YgYW5kIGludmFsaWQgZGlnaXRzICovCisJ CQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJfQorCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJm aW5hbCBoZXggZGVjb2RlZCB2YWx1ZTogJWxkIiwgKGxvbmcpIHJlcykpOworCXJldHVybiByZXM7 CisKKyBzeW50YXhfZXJyb3I6CisJZHVrX19kZWNfc3ludGF4X2Vycm9yKGpzX2N0eCk7CisJRFVL X1VOUkVBQ0hBQkxFKCk7CisJcmV0dXJuIDA7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVj X3JlcV9zdHJpZHgoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4LCBkdWtfc21hbGxfdWludF90IHN0 cmlkeCkgeworCWR1a19oc3RyaW5nICpoOworCWNvbnN0IGR1a191aW50OF90ICpwOworCWR1a191 aW50OF90IHgsIHk7CisKKwkvKiBGaXJzdCBjaGFyYWN0ZXIgaGFzIGFscmVhZHkgYmVlbiBlYXRl biBhbmQgY2hlY2tlZCBieSB0aGUgY2FsbGVyLgorCSAqIFdlIGNhbiBzY2FuIHVudGlsIGEgTlVM IGluIHN0cmlkeCBzdHJpbmcgYmVjYXVzZSBubyBidWlsdC1pbiBzdHJpbmdzCisJICogaGF2ZSBp bnRlcm5hbCBOVUxzLgorCSAqLworCisJRFVLX0FTU0VSVF9TVFJJRFhfVkFMSUQoc3RyaWR4KTsK KwloID0gRFVLX0hUSFJFQURfR0VUX1NUUklORyhqc19jdHgtPnRociwgc3RyaWR4KTsKKwlEVUtf QVNTRVJUKGggIT0gTlVMTCk7CisKKwlwID0gKGNvbnN0IGR1a191aW50OF90ICopIERVS19IU1RS SU5HX0dFVF9EQVRBKGgpICsgMTsKKwlEVUtfQVNTRVJUKCooanNfY3R4LT5wIC0gMSkgPT0gKihw IC0gMSkpOyAgLyogZmlyc3QgY2hhcmFjdGVyIGhhcyBiZWVuIG1hdGNoZWQgKi8KKworCWZvciAo OzspIHsKKwkJeCA9ICpwOworCQlpZiAoeCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQl5ID0g ZHVrX19kZWNfZ2V0KGpzX2N0eCk7CisJCWlmICh4ICE9IHkpIHsKKwkJCS8qIENhdGNoZXMgRU9G IG9mIEpTT04gaW5wdXQuICovCisJCQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJfQorCQlwKys7CisJ fQorCisJcmV0dXJuOworCisgc3ludGF4X2Vycm9yOgorCWR1a19fZGVjX3N5bnRheF9lcnJvcihq c19jdHgpOworCURVS19VTlJFQUNIQUJMRSgpOworfQorCitEVUtfTE9DQUwgZHVrX3NtYWxsX2lu dF90IGR1a19fZGVjX3N0cmluZ19lc2NhcGUoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4LCBkdWtf dWludDhfdCAqKmV4dF9wKSB7CisJZHVrX3VpbnRfZmFzdDMyX3QgY3A7CisKKwkvKiBFT0YgKC0x KSB3aWxsIGJlIGNhc3QgdG8gYW4gdW5zaWduZWQgdmFsdWUgZmlyc3QKKwkgKiBhbmQgdGhlbiBy ZS1jYXN0IGZvciB0aGUgc3dpdGNoLiAgSW4gYW55IGNhc2UsIGl0CisJICogd2lsbCBtYXRjaCB0 aGUgZGVmYXVsdCBjYXNlIChzeW50YXggZXJyb3IpLgorCSAqLworCWNwID0gKGR1a191aW50X2Zh c3QzMl90KSBkdWtfX2RlY19nZXQoanNfY3R4KTsKKwlzd2l0Y2ggKGNwKSB7CisJY2FzZSBEVUtf QVNDX0JBQ0tTTEFTSDogYnJlYWs7CisJY2FzZSBEVUtfQVNDX0RPVUJMRVFVT1RFOiBicmVhazsK KwljYXNlIERVS19BU0NfU0xBU0g6IGJyZWFrOworCWNhc2UgRFVLX0FTQ19MQ19UOiBjcCA9IDB4 MDk7IGJyZWFrOworCWNhc2UgRFVLX0FTQ19MQ19OOiBjcCA9IDB4MGE7IGJyZWFrOworCWNhc2Ug RFVLX0FTQ19MQ19SOiBjcCA9IDB4MGQ7IGJyZWFrOworCWNhc2UgRFVLX0FTQ19MQ19GOiBjcCA9 IDB4MGM7IGJyZWFrOworCWNhc2UgRFVLX0FTQ19MQ19COiBjcCA9IDB4MDg7IGJyZWFrOworCWNh c2UgRFVLX0FTQ19MQ19VOiB7CisJCWNwID0gZHVrX19kZWNfZGVjb2RlX2hleF9lc2NhcGUoanNf Y3R4LCA0KTsKKwkJYnJlYWs7CisJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9KWCkKKwljYXNlIERV S19BU0NfVUNfVTogeworCQlpZiAoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20pIHsKKwkJCWNwID0g ZHVrX19kZWNfZGVjb2RlX2hleF9lc2NhcGUoanNfY3R4LCA4KTsKKwkJfSBlbHNlIHsKKwkJCXJl dHVybiAxOyAgLyogc3ludGF4IGVycm9yICovCisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVL X0FTQ19MQ19YOiB7CisJCWlmIChqc19jdHgtPmZsYWdfZXh0X2N1c3RvbSkgeworCQkJY3AgPSBk dWtfX2RlY19kZWNvZGVfaGV4X2VzY2FwZShqc19jdHgsIDIpOworCQl9IGVsc2UgeworCQkJcmV0 dXJuIDE7ICAvKiBzeW50YXggZXJyb3IgKi8KKwkJfQorCQlicmVhazsKKwl9CisjZW5kaWYgIC8q IERVS19VU0VfSlggKi8KKwlkZWZhdWx0OgorCQkvKiBjYXRjaGVzIEVPRiAoMHgwMCkgKi8KKwkJ cmV0dXJuIDE7ICAvKiBzeW50YXggZXJyb3IgKi8KKwl9CisKKwlEVUtfUkFXX1dSSVRFX1hVVEY4 KCpleHRfcCwgY3ApOworCisJcmV0dXJuIDA7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVj X3N0cmluZyhkdWtfanNvbl9kZWNfY3R4ICpqc19jdHgpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0g anNfY3R4LT50aHI7CisJZHVrX2J1ZndyaXRlcl9jdHggYndfYWxsb2M7CisJZHVrX2J1ZndyaXRl cl9jdHggKmJ3OworCWR1a191aW50OF90ICpxOworCisJLyogJyInIHdhcyBlYXRlbiBieSBjYWxs ZXIgKi8KKworCS8qIE5vdGUgdGhhdCB3ZSBjdXJyZW50bHkgcGFyc2UgLWJ5dGVzLSwgbm90IGNv ZGVwb2ludHMuCisJICogQWxsIG5vbi1BU0NJSSBleHRlbmRlZCBVVEYtOCB3aWxsIGVuY29kZSB0 byBieXRlcyA+PSAweDgwLAorCSAqIHNvIHRoZXknbGwgc2ltcGx5IHBhc3MgdGhyb3VnaCAodmFs aWQgVVRGLTggb3Igbm90KS4KKwkgKi8KKworCWJ3ID0gJmJ3X2FsbG9jOworCURVS19CV19JTklU X1BVU0hCVUYoanNfY3R4LT50aHIsIGJ3LCBEVUtfX0pTT05fREVDU1RSX0JVRlNJWkUpOworCXEg PSBEVUtfQldfR0VUX1BUUihqc19jdHgtPnRociwgYncpOworCisjaWYgZGVmaW5lZChEVUtfVVNF X0pTT05fREVDU1RSSU5HX0ZBU1RQQVRIKQorCWZvciAoOzspIHsKKwkJZHVrX3NtYWxsX3VpbnRf dCBzYWZlOworCQlkdWtfdWludDhfdCBiLCB4OworCQljb25zdCBkdWtfdWludDhfdCAqcDsKKwor CQkvKiBTZWxlY3QgYSBzYWZlIGxvb3AgY291bnQgd2hlcmUgbm8gb3V0cHV0IGNoZWNrcyBhcmUK KwkJICogbmVlZGVkIGFzc3VtaW5nIHdlIHdvbid0IGVuY291bnRlciBlc2NhcGVzLiAgSW5wdXQK KwkJICogYm91bmQgY2hlY2tzIGFyZSBub3QgbmVjZXNzYXJ5IGFzIGEgTlVMIChndWFyYW50ZWVk KQorCQkgKiB3aWxsIGNhdXNlIGEgU3ludGF4RXJyb3IgYmVmb3JlIHdlIHJlYWQgb3V0IG9mIGJv dW5kcy4KKwkJICovCisKKwkJc2FmZSA9IERVS19fSlNPTl9ERUNTVFJfQ0hVTktTSVpFOworCisJ CS8qIEVuc3VyZSBzcGFjZSBmb3IgMToxIG91dHB1dCBwbHVzIG9uZSBlc2NhcGUuICovCisJCXEg PSBEVUtfQldfRU5TVVJFX1JBVyhqc19jdHgtPnRociwgYncsIHNhZmUgKyBEVUtfVU5JQ09ERV9N QVhfWFVURjhfTEVOR1RILCBxKTsKKworCQlwID0ganNfY3R4LT5wOyAgLyogdGVtcCBjb3B5LCB3 cml0ZSBiYWNrIGZvciBuZXh0IGxvb3AgKi8KKwkJZm9yICg7OykgeworCQkJaWYgKHNhZmUgPT0g MCkgeworCQkJCWpzX2N0eC0+cCA9IHA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzYWZlLS07CisK KwkJCS8qIEVuZCBvZiBpbnB1dCAoTlVMKSBnb2VzIHRocm91Z2ggc2xvdyBwYXRoIGFuZCBjYXVz ZXMgU3ludGF4RXJyb3IuICovCisJCQlEVUtfQVNTRVJUKGR1a19fanNvbl9kZWNzdHJfbG9va3Vw WzBdID09IDB4MDApOworCisJCQliID0gKnArKzsKKwkJCXggPSAoZHVrX3NtYWxsX2ludF90KSBk dWtfX2pzb25fZGVjc3RyX2xvb2t1cFtiXTsKKwkJCWlmIChEVUtfTElLRUxZKHggIT0gMCkpIHsK KwkJCQkvKiBGYXN0IHBhdGgsIGRlY29kZSBhcyBpcy4gKi8KKwkJCQkqcSsrID0gYjsKKwkJCX0g ZWxzZSBpZiAoYiA9PSBEVUtfQVNDX0RPVUJMRVFVT1RFKSB7CisJCQkJanNfY3R4LT5wID0gcDsK KwkJCQlnb3RvIGZvdW5kX3F1b3RlOworCQkJfSBlbHNlIGlmIChiID09IERVS19BU0NfQkFDS1NM QVNIKSB7CisJCQkJLyogV2UndmUgZW5zdXJlZCBzcGFjZSBmb3Igb25lIGVzY2FwZWQgaW5wdXQ7 IHRoZW4KKwkJCQkgKiBiYWlsIG91dCBhbmQgcmVjaGVjayAodGhpcyBtYWtlcyBlc2NhcGUgaGFu ZGxpbmcKKwkJCQkgKiBxdWl0ZSBzbG93IGJ1dCBpdCdzIHVuY29tbW9uKS4KKwkJCQkgKi8KKwkJ CQlqc19jdHgtPnAgPSBwOworCQkJCWlmIChkdWtfX2RlY19zdHJpbmdfZXNjYXBlKGpzX2N0eCwg JnEpICE9IDApIHsKKwkJCQkJZ290byBzeW50YXhfZXJyb3I7CisJCQkJfQorCQkJCWJyZWFrOwor CQkJfSBlbHNlIHsKKwkJCQlqc19jdHgtPnAgPSBwOworCQkJCWdvdG8gc3ludGF4X2Vycm9yOwor CQkJfQorCQl9CisJfQorIGZvdW5kX3F1b3RlOgorI2Vsc2UgIC8qIERVS19VU0VfSlNPTl9ERUNT VFJJTkdfRkFTVFBBVEggKi8KKwlmb3IgKDs7KSB7CisJCWR1a191aW50OF90IHg7CisKKwkJcSA9 IERVS19CV19FTlNVUkVfUkFXKGpzX2N0eC0+dGhyLCBidywgRFVLX1VOSUNPREVfTUFYX1hVVEY4 X0xFTkdUSCwgcSk7CisKKwkJeCA9IGR1a19fZGVjX2dldChqc19jdHgpOworCisJCWlmICh4ID09 IERVS19BU0NfRE9VQkxFUVVPVEUpIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHggPT0gRFVL X0FTQ19CQUNLU0xBU0gpIHsKKwkJCWlmIChkdWtfX2RlY19zdHJpbmdfZXNjYXBlKGpzX2N0eCwg JnEpICE9IDApIHsKKwkJCQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJCX0KKwkJfSBlbHNlIGlmICh4 IDwgMHgyMCkgeworCQkJLyogY2F0Y2hlcyBFT0YgKE5VTCkgKi8KKwkJCWdvdG8gc3ludGF4X2Vy cm9yOworCQl9IGVsc2UgeworCQkJKnErKyA9IChkdWtfdWludDhfdCkgeDsKKwkJfQorCX0KKyNl bmRpZiAgLyogRFVLX1VTRV9KU09OX0RFQ1NUUklOR19GQVNUUEFUSCAqLworCisJRFVLX0JXX1NF VFBUUl9BTkRfQ09NUEFDVChqc19jdHgtPnRociwgYncsIHEpOworCSh2b2lkKSBkdWtfYnVmZmVy X3RvX3N0cmluZyh0aHIsIC0xKTsgIC8qIFNhZmUgaWYgaW5wdXQgc3RyaW5nIGlzIHNhZmUuICov CisKKwkvKiBbIC4uLiBzdHIgXSAqLworCisJcmV0dXJuOworCisgc3ludGF4X2Vycm9yOgorCWR1 a19fZGVjX3N5bnRheF9lcnJvcihqc19jdHgpOworCURVS19VTlJFQUNIQUJMRSgpOworfQorCisj aWYgZGVmaW5lZChEVUtfVVNFX0pYKQorLyogRGVjb2RlIGEgcGxhaW4gc3RyaW5nIGNvbnNpc3Rp bmcgZW50aXJlbHkgb2YgaWRlbnRpZmllciBjaGFyYWN0ZXJzLgorICogVXNlZCB0byBwYXJzZSBw bGFpbiBrZXlzIChlLmcuICJmb286IDEyMyIpLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Rl Y19wbGFpbl9zdHJpbmcoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4KSB7CisJZHVrX2h0aHJlYWQg KnRociA9IGpzX2N0eC0+dGhyOworCWNvbnN0IGR1a191aW50OF90ICpwOworCWR1a19zbWFsbF9p bnRfdCB4OworCisJLyogQ2FsbGVyIGhhcyBhbHJlYWR5IGVhdGVuIHRoZSBmaXJzdCBjaGFyIHNv IGJhY2t0cmFjayBvbmUgYnl0ZS4gKi8KKworCWpzX2N0eC0+cC0tOyAgLyogc2FmZSAqLworCXAg PSBqc19jdHgtPnA7CisKKwkvKiBIZXJlIGFnYWluIHdlIHBhcnNlIGJ5dGVzLCBhbmQgbm9uLUFT Q0lJIFVURi04IHdpbGwgY2F1c2UgZW5kIG9mCisJICogcGFyc2luZyAod2hpY2ggaXMgY29ycmVj dCBleGNlcHQgaWYgdGhlcmUgYXJlIG5vbi1zaG9ydGVzdCBlbmNvZGluZ3MpLgorCSAqIFRoZXJl IGlzIGFsc28gbm8gbmVlZCB0byBjaGVjayBleHBsaWNpdGx5IGZvciBlbmQgb2YgaW5wdXQgYnVm ZmVyIGFzCisJICogdGhlIGlucHV0IGlzIE5VTCBwYWRkZWQgYW5kIE5VTCB3aWxsIGV4aXQgdGhl IHBhcnNpbmcgbG9vcC4KKwkgKgorCSAqIEJlY2F1c2Ugbm8gdW5lc2NhcGluZyB0YWtlcyBwbGFj ZSwgd2UgY2FuIGp1c3Qgc2NhbiB0byB0aGUgZW5kIG9mIHRoZQorCSAqIHBsYWluIHN0cmluZyBh bmQgaW50ZXJuIGZyb20gdGhlIGlucHV0IGJ1ZmZlci4KKwkgKi8KKworCWZvciAoOzspIHsKKwkJ eCA9ICpwOworCisJCS8qIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IGNoYXJh Y3RlciBzcGVjaWFsbHkgaGVyZQorCQkgKiAoaS5lLiByZWplY3QgZGlnaXRzKTogdGhlIGNhbGxl ciBvbmx5IGFjY2VwdHMgdmFsaWQgaW5pdGlhbAorCQkgKiBjaGFyYWN0ZXJzIGFuZCB3b24ndCBj YWxsIHVzIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYSBkaWdpdC4KKwkJICogVGhpcyBhbHNv IGVuc3VyZXMgdGhhdCB0aGUgcGxhaW4gc3RyaW5nIHdvbid0IGJlIGVtcHR5LgorCQkgKi8KKwor CQlpZiAoIWR1a191bmljb2RlX2lzX2lkZW50aWZpZXJfcGFydCgoZHVrX2NvZGVwb2ludF90KSB4 KSkgeworCQkJYnJlYWs7CisJCX0KKwkJcCsrOworCX0KKworCWR1a19wdXNoX2xzdHJpbmcodGhy LCAoY29uc3QgY2hhciAqKSBqc19jdHgtPnAsIChkdWtfc2l6ZV90KSAocCAtIGpzX2N0eC0+cCkp OworCWpzX2N0eC0+cCA9IHA7CisKKwkvKiBbIC4uLiBzdHIgXSAqLworfQorI2VuZGlmICAvKiBE VUtfVVNFX0pYICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpCitEVUtfTE9DQUwgdm9pZCBk dWtfX2RlY19wb2ludGVyKGR1a19qc29uX2RlY19jdHggKmpzX2N0eCkgeworCWR1a19odGhyZWFk ICp0aHIgPSBqc19jdHgtPnRocjsKKwljb25zdCBkdWtfdWludDhfdCAqcDsKKwlkdWtfc21hbGxf aW50X3QgeDsKKwl2b2lkICp2b2lkcHRyOworCisJLyogQ2FsbGVyIGhhcyBhbHJlYWR5IGVhdGVu IHRoZSBmaXJzdCBjaGFyYWN0ZXIgKCcoJykgd2hpY2ggd2UgZG9uJ3QgbmVlZC4gKi8KKworCXAg PSBqc19jdHgtPnA7CisKKwlmb3IgKDs7KSB7CisJCXggPSAqcDsKKworCQkvKiBBc3N1bWUgdGhh dCB0aGUgbmF0aXZlIHJlcHJlc2VudGF0aW9uIG5ldmVyIGNvbnRhaW5zIGEgY2xvc2luZworCQkg KiBwYXJlbnRoZXNpcy4KKwkJICovCisKKwkJaWYgKHggPT0gRFVLX0FTQ19SUEFSRU4pIHsKKwkJ CWJyZWFrOworCQl9IGVsc2UgaWYgKHggPD0gMCkgeworCQkJLyogTlVMIHRlcm0gb3IgLTEgKEVP RiksIE5VTCBjaGVjayB3b3VsZCBzdWZmaWNlICovCisJCQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJ fQorCQlwKys7CisJfQorCisJLyogVGhlcmUgaXMgbm8gbmVlZCB0byBOVUwgZGVsaW1pdCB0aGUg c3NjYW5mKCkgY2FsbDogdHJhaWxpbmcgZ2FyYmFnZSBpcworCSAqIGlnbm9yZWQgYW5kIHRoZXJl IGlzIGFsd2F5cyBhIE5VTCB0ZXJtaW5hdG9yIHdoaWNoIHdpbGwgZm9yY2UgYW4gZXJyb3IKKwkg KiBpZiBubyBlcnJvciBpcyBlbmNvdW50ZXJlZCBiZWZvcmUgaXQuICBJdCdzIHBvc3NpYmxlIHRo YXQgdGhlIHNjYW4KKwkgKiB3b3VsZCBzY2FuIGZ1cnRoZXIgdGhhbiBiZXR3ZWVuIFtqc19jdHgt PnAscFsgdGhvdWdoIGFuZCB3ZSdkIGFkdmFuY2UKKwkgKiBieSBsZXNzIHRoYW4gdGhlIHNjYW5u ZWQgdmFsdWUuCisJICoKKwkgKiBCZWNhdXNlIHBvaW50ZXJzIGFyZSBwbGF0Zm9ybSBzcGVjaWZp YywgYSBmYWlsdXJlIHRvIHNjYW4gYSBwb2ludGVyCisJICogcmVzdWx0cyBpbiBhIG51bGwgcG9p bnRlciB3aGljaCBpcyBhIGJldHRlciBwbGFjZWhvbGRlciB0aGFuIGEgbWlzc2luZworCSAqIHZh bHVlIG9yIGFuIGVycm9yLgorCSAqLworCisJdm9pZHB0ciA9IE5VTEw7CisJKHZvaWQpIERVS19T U0NBTkYoKGNvbnN0IGNoYXIgKikganNfY3R4LT5wLCBEVUtfU1RSX0ZNVF9QVFIsICZ2b2lkcHRy KTsKKwlkdWtfcHVzaF9wb2ludGVyKHRociwgdm9pZHB0cik7CisJanNfY3R4LT5wID0gcCArIDE7 ICAvKiBza2lwICcpJyAqLworCisJLyogWyAuLi4gcHRyIF0gKi8KKworCXJldHVybjsKKworIHN5 bnRheF9lcnJvcjoKKwlkdWtfX2RlY19zeW50YXhfZXJyb3IoanNfY3R4KTsKKwlEVUtfVU5SRUFD SEFCTEUoKTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9KWCAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX0pYKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWNfYnVmZmVyKGR1a19qc29uX2RlY19jdHgg KmpzX2N0eCkgeworCWR1a19odGhyZWFkICp0aHIgPSBqc19jdHgtPnRocjsKKwljb25zdCBkdWtf dWludDhfdCAqcDsKKwlkdWtfdWludDhfdCAqYnVmOworCWR1a19zaXplX3Qgc3JjX2xlbjsKKwlk dWtfc21hbGxfaW50X3QgeDsKKworCS8qIENhbGxlciBoYXMgYWxyZWFkeSBlYXRlbiB0aGUgZmly c3QgY2hhcmFjdGVyICgnfCcpIHdoaWNoIHdlIGRvbid0IG5lZWQuICovCisKKwlwID0ganNfY3R4 LT5wOworCisJLyogWFhYOiBXb3VsZCBiZSBuaWNlIHRvIHNoYXJlIHRoZSBmYXN0IHBhdGggbG9v cCBmcm9tIGR1a19oZXhfZGVjb2RlKCkKKwkgKiBhbmQgYXZvaWQgY3JlYXRpbmcgYSB0ZW1wb3Jh cnkgYnVmZmVyLiAgSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUKKwkgKiBkaWZmZXJlbmNlcyB3aGlj aCBwcmV2ZW50IHRyaXZpYWwgc2hhcmluZzoKKwkgKgorCSAqICAgLSBQaXBlIGNoYXIgZGV0ZWN0 aW9uCisJICogICAtIEVPRiBkZXRlY3Rpb24KKwkgKiAgIC0gVW5rbm93biBsZW5ndGggb2YgaW5w dXQgYW5kIG91dHB1dAorCSAqCisJICogVGhlIGJlc3QgYXBwcm9hY2ggaGVyZSB3b3VsZCBiZSBh IGJ1ZndyaXRlciBhbmQgYSByZWFzb25hbHkgc2l6ZWQKKwkgKiBzYWZlIGlubmVyIGxvb3AgKGUu Zy4gNjQgb3V0cHV0IGJ5dGVzIGF0IGEgdGltZSkuCisJICovCisKKwlmb3IgKDs7KSB7CisJCXgg PSAqcDsKKworCQkvKiBUaGlzIGxvb3AgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBlbnN1cmUgY2hh cmFjdGVycyBhcmUgdmFsaWQKKwkJICogKFswLTlhLWZBLUZdKSBiZWNhdXNlIHRoZSBoZXggZGVj b2RlIGNhbGwgYmVsb3cgd2lsbCBkbyB0aGF0LgorCQkgKi8KKwkJaWYgKHggPT0gRFVLX0FTQ19Q SVBFKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh4IDw9IDApIHsKKwkJCS8qIE5VTCB0ZXJt IG9yIC0xIChFT0YpLCBOVUwgY2hlY2sgd291bGQgc3VmZmljZSAqLworCQkJZ290byBzeW50YXhf ZXJyb3I7CisJCX0KKwkJcCsrOworCX0KKworCS8qIFhYWDogdGhpcyBpcyBub3QgdmVyeSBuaWNl OyB1bm5lY2Vzc2FyeSBjb3B5IGlzIG1hZGUuICovCisJc3JjX2xlbiA9IChkdWtfc2l6ZV90KSAo cCAtIGpzX2N0eC0+cCk7CisJYnVmID0gKGR1a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1 ZmZlcl9ub3plcm8odGhyLCBzcmNfbGVuKTsKKwlEVUtfQVNTRVJUKGJ1ZiAhPSBOVUxMKTsKKwlk dWtfbWVtY3B5KCh2b2lkICopIGJ1ZiwgKGNvbnN0IHZvaWQgKikganNfY3R4LT5wLCBzcmNfbGVu KTsKKwlkdWtfaGV4X2RlY29kZSh0aHIsIC0xKTsKKworCWpzX2N0eC0+cCA9IHAgKyAxOyAgLyog c2tpcCAnfCcgKi8KKworCS8qIFsgLi4uIGJ1ZiBdICovCisKKwlyZXR1cm47CisKKyBzeW50YXhf ZXJyb3I6CisJZHVrX19kZWNfc3ludGF4X2Vycm9yKGpzX2N0eCk7CisJRFVLX1VOUkVBQ0hBQkxF KCk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfSlggKi8KKworLyogUGFyc2UgYSBudW1iZXIsIG90 aGVyIHRoYW4gTmFOIG9yICsvLSBJbmZpbml0eSAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWNf bnVtYmVyKGR1a19qc29uX2RlY19jdHggKmpzX2N0eCkgeworCWR1a19odGhyZWFkICp0aHIgPSBq c19jdHgtPnRocjsKKwljb25zdCBkdWtfdWludDhfdCAqcF9zdGFydDsKKwljb25zdCBkdWtfdWlu dDhfdCAqcDsKKwlkdWtfdWludDhfdCB4OworCWR1a19zbWFsbF91aW50X3QgczJuX2ZsYWdzOwor CisJRFVLX0RERChEVUtfREREUFJJTlQoInBhcnNlX251bWJlciIpKTsKKworCXBfc3RhcnQgPSBq c19jdHgtPnA7CisKKwkvKiBGaXJzdCBwYXNzIHBhcnNlIGlzIHZlcnkgbGVuaWVudCAoZS5nLiBh bGxvd3MgJzEuMi4zJykgYW5kIGV4dHJhY3RzIGEKKwkgKiBzdHJpbmcgZm9yIHN0cmljdCBudW1i ZXIgcGFyc2luZy4KKwkgKi8KKworCXAgPSBqc19jdHgtPnA7CisJZm9yICg7OykgeworCQl4ID0g KnA7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInBhcnNlX251bWJlcjogcF9zdGFydD0lcCwg cD0lcCwgcF9lbmQ9JXAsIHg9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZv aWQgKikgcF9zdGFydCwgKGNvbnN0IHZvaWQgKikgcCwKKwkJICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHZvaWQgKikganNfY3R4LT5wX2VuZCwgKGxvbmcpIHgpKTsKKworI2lmIGRlZmluZWQo RFVLX1VTRV9KU09OX0RFQ05VTUJFUl9GQVNUUEFUSCkKKwkJLyogVGhpcyBmYXN0IHBhdGggaXMg cHJldHR5IG1hcmdpbmFsIGluIHByYWN0aWNlLgorCQkgKiBYWFg6IGNhbmRpZGF0ZSBmb3IgcmVt b3ZhbC4KKwkJICovCisJCURVS19BU1NFUlQoZHVrX19qc29uX2RlY251bWJlcl9sb29rdXBbMHgw MF0gPT0gMHgwMCk7ICAvKiBlbmQtb2YtaW5wdXQgYnJlYWtzICovCisJCWlmIChkdWtfX2pzb25f ZGVjbnVtYmVyX2xvb2t1cFt4XSA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorI2Vsc2UgIC8qIERV S19VU0VfSlNPTl9ERUNOVU1CRVJfRkFTVFBBVEggKi8KKwkJaWYgKCEoKHggPj0gRFVLX0FTQ18w ICYmIHggPD0gRFVLX0FTQ185KSB8fAorCQkgICAgICAoeCA9PSBEVUtfQVNDX1BFUklPRCB8fCB4 ID09IERVS19BU0NfTENfRSB8fAorCQkgICAgICAgeCA9PSBEVUtfQVNDX1VDX0UgfHwgeCA9PSBE VUtfQVNDX01JTlVTIHx8IHggPT0gRFVLX0FTQ19QTFVTKSkpIHsKKwkJCS8qIFBsdXMgc2lnbiBt dXN0IGJlIGFjY2VwdGVkIGZvciBwb3NpdGl2ZSBleHBvbmVudHMKKwkJCSAqIChlLmcuICcxLjVl KzInKS4gIFRoaXMgY2xhdXNlIGNhdGNoZXMgTlVMcy4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0K KyNlbmRpZiAgLyogRFVLX1VTRV9KU09OX0RFQ05VTUJFUl9GQVNUUEFUSCAqLworCQlwKys7ICAv KiBzYWZlLCBiZWNhdXNlIG1hdGNoZWQgKE5VTCBjYXVzZXMgYSBicmVhaykgKi8KKwl9CisJanNf Y3R4LT5wID0gcDsKKworCURVS19BU1NFUlQoanNfY3R4LT5wID4gcF9zdGFydCk7CisJZHVrX3B1 c2hfbHN0cmluZyh0aHIsIChjb25zdCBjaGFyICopIHBfc3RhcnQsIChkdWtfc2l6ZV90KSAocCAt IHBfc3RhcnQpKTsKKworCXMybl9mbGFncyA9IERVS19TMk5fRkxBR19BTExPV19FWFAgfAorCSAg ICAgICAgICAgIERVS19TMk5fRkxBR19BTExPV19NSU5VUyB8ICAvKiBidXQgZG9uJ3QgYWxsb3cg bGVhZGluZyBwbHVzICovCisJICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX0ZSQUM7CisK KwlEVUtfREREKERVS19ERERQUklOVCgicGFyc2VfbnVtYmVyOiBzdHJpbmcgYmVmb3JlIHBhcnNp bmc6ICUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZh bCh0aHIsIC0xKSkpOworCWR1a19udW1jb252X3BhcnNlKHRociwgMTAgLypyYWRpeCovLCBzMm5f ZmxhZ3MpOworCWlmIChkdWtfaXNfbmFuKHRociwgLTEpKSB7CisJCWR1a19fZGVjX3N5bnRheF9l cnJvcihqc19jdHgpOworCX0KKwlEVUtfQVNTRVJUKGR1a19pc19udW1iZXIodGhyLCAtMSkpOwor CURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZV9udW1iZXI6IGZpbmFsIG51bWJlcjogJSFUIiwK KwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEp KSk7CisKKwkvKiBbIC4uLiBudW0gXSAqLworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlY19v YmphcnJfZW50cnkoZHVrX2pzb25fZGVjX2N0eCAqanNfY3R4KSB7CisJZHVrX2h0aHJlYWQgKnRo ciA9IGpzX2N0eC0+dGhyOworCWR1a19yZXF1aXJlX3N0YWNrKHRociwgRFVLX0pTT05fREVDX1JF UVNUQUNLKTsKKworCS8qIGMgcmVjdXJzaW9uIGNoZWNrICovCisKKwlEVUtfQVNTRVJUX0RJU0FC TEUoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0gMCk7ICAvKiB1bnNpZ25lZCAqLworCURVS19B U1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPD0ganNfY3R4LT5yZWN1cnNpb25fbGltaXQp OworCWlmIChqc19jdHgtPnJlY3Vyc2lvbl9kZXB0aCA+PSBqc19jdHgtPnJlY3Vyc2lvbl9saW1p dCkgeworCQlEVUtfRVJST1JfUkFOR0UodGhyLCBEVUtfU1RSX0pTT05ERUNfUkVDTElNSVQpOwor CQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCWpzX2N0eC0+cmVjdXJzaW9uX2RlcHRo Kys7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVjX29iamFycl9leGl0KGR1a19qc29uX2Rl Y19jdHggKmpzX2N0eCkgeworCS8qIGMgcmVjdXJzaW9uIGNoZWNrICovCisKKwlEVUtfQVNTRVJU KGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoID4gMCk7CisJRFVLX0FTU0VSVChqc19jdHgtPnJlY3Vy c2lvbl9kZXB0aCA8PSBqc19jdHgtPnJlY3Vyc2lvbl9saW1pdCk7CisJanNfY3R4LT5yZWN1cnNp b25fZGVwdGgtLTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWNfb2JqZWN0KGR1a19qc29u X2RlY19jdHggKmpzX2N0eCkgeworCWR1a19odGhyZWFkICp0aHIgPSBqc19jdHgtPnRocjsKKwlk dWtfaW50X3Qga2V5X2NvdW50OyAgLyogWFhYOiBhICJmaXJzdCIgZmxhZyB3b3VsZCBzdWZmaWNl ICovCisJZHVrX3VpbnQ4X3QgeDsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZV9vYmpl Y3QiKSk7CisKKwlkdWtfX2RlY19vYmphcnJfZW50cnkoanNfY3R4KTsKKworCWR1a19wdXNoX29i amVjdCh0aHIpOworCisJLyogSW5pdGlhbCAneycgaGFzIGJlZW4gY2hlY2tlZCBhbmQgZWF0ZW4g YnkgY2FsbGVyLiAqLworCisJa2V5X2NvdW50ID0gMDsKKwlmb3IgKDs7KSB7CisJCXggPSBkdWtf X2RlY19nZXRfbm9ud2hpdGUoanNfY3R4KTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgicGFy c2Vfb2JqZWN0OiBvYmo9JSFULCB4PSVsZCwga2V5X2NvdW50PSVsZCIsCisJCSAgICAgICAgICAg ICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSksCisJCSAgICAgICAg ICAgICAgICAgICAgIChsb25nKSB4LCAobG9uZykga2V5X2NvdW50KSk7CisKKwkJLyogaGFuZGxl IGNvbW1hIGFuZCBjbG9zaW5nIGJyYWNlICovCisKKwkJaWYgKHggPT0gRFVLX0FTQ19DT01NQSAm JiBrZXlfY291bnQgPiAwKSB7CisJCQkvKiBhY2NlcHQgY29tbWEsIGV4cGVjdCBuZXcgdmFsdWUg Ki8KKwkJCXggPSBkdWtfX2RlY19nZXRfbm9ud2hpdGUoanNfY3R4KTsKKwkJfSBlbHNlIGlmICh4 ID09IERVS19BU0NfUkNVUkxZKSB7CisJCQkvKiBlYXQgY2xvc2luZyBicmFjZSAqLworCQkJYnJl YWs7CisJCX0gZWxzZSBpZiAoa2V5X2NvdW50ID09IDApIHsKKwkJCS8qIGFjY2VwdCBhbnl0aGlu ZywgZXhwZWN0IGZpcnN0IHZhbHVlIChFT0Ygd2lsbCBiZQorCQkJICogY2F1Z2h0IGJ5IGtleSBw YXJzaW5nIGJlbG93LgorCQkJICovCisJCQk7CisJCX0gZWxzZSB7CisJCQkvKiBjYXRjaGVzIEVP RiAoTlVMKSBhbmQgaW5pdGlhbCBjb21tYSAqLworCQkJZ290byBzeW50YXhfZXJyb3I7CisJCX0K KworCQkvKiBwYXJzZSBrZXkgYW5kIHZhbHVlICovCisKKwkJaWYgKHggPT0gRFVLX0FTQ19ET1VC TEVRVU9URSkgeworCQkJZHVrX19kZWNfc3RyaW5nKGpzX2N0eCk7CisjaWYgZGVmaW5lZChEVUtf VVNFX0pYKQorCQl9IGVsc2UgaWYgKGpzX2N0eC0+ZmxhZ19leHRfY3VzdG9tICYmCisJCSAgICAg ICAgICAgZHVrX3VuaWNvZGVfaXNfaWRlbnRpZmllcl9zdGFydCgoZHVrX2NvZGVwb2ludF90KSB4 KSkgeworCQkJZHVrX19kZWNfcGxhaW5fc3RyaW5nKGpzX2N0eCk7CisjZW5kaWYKKwkJfSBlbHNl IHsKKwkJCWdvdG8gc3ludGF4X2Vycm9yOworCQl9CisKKwkJLyogWyAuLi4gb2JqIGtleSBdICov CisKKwkJeCA9IGR1a19fZGVjX2dldF9ub253aGl0ZShqc19jdHgpOworCQlpZiAoeCAhPSBEVUtf QVNDX0NPTE9OKSB7CisJCQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJfQorCisJCWR1a19fZGVjX3Zh bHVlKGpzX2N0eCk7CisKKwkJLyogWyAuLi4gb2JqIGtleSB2YWwgXSAqLworCisJCWR1a194ZGVm X3Byb3Bfd2VjKHRociwgLTMpOworCisJCS8qIFsgLi4uIG9iaiBdICovCisKKwkJa2V5X2NvdW50 Kys7CisJfQorCisJLyogWyAuLi4gb2JqIF0gKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJw YXJzZV9vYmplY3Q6IGZpbmFsIG9iamVjdCBpcyAlIVQiLAorCSAgICAgICAgICAgICAgICAgICAg IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCWR1a19fZGVjX29iamFy cl9leGl0KGpzX2N0eCk7CisJcmV0dXJuOworCisgc3ludGF4X2Vycm9yOgorCWR1a19fZGVjX3N5 bnRheF9lcnJvcihqc19jdHgpOworCURVS19VTlJFQUNIQUJMRSgpOworfQorCitEVUtfTE9DQUwg dm9pZCBkdWtfX2RlY19hcnJheShkdWtfanNvbl9kZWNfY3R4ICpqc19jdHgpIHsKKwlkdWtfaHRo cmVhZCAqdGhyID0ganNfY3R4LT50aHI7CisJZHVrX3VhcnJpZHhfdCBhcnJfaWR4OworCWR1a191 aW50OF90IHg7CisKKwlEVUtfREREKERVS19ERERQUklOVCgicGFyc2VfYXJyYXkiKSk7CisKKwlk dWtfX2RlY19vYmphcnJfZW50cnkoanNfY3R4KTsKKworCWR1a19wdXNoX2FycmF5KHRocik7CisK KwkvKiBJbml0aWFsICdbJyBoYXMgYmVlbiBjaGVja2VkIGFuZCBlYXRlbiBieSBjYWxsZXIuICov CisKKwlhcnJfaWR4ID0gMDsKKwlmb3IgKDs7KSB7CisJCXggPSBkdWtfX2RlY19nZXRfbm9ud2hp dGUoanNfY3R4KTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgicGFyc2VfYXJyYXk6IGFycj0l IVQsIHg9JWxkLCBhcnJfaWR4PSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZh bCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSksCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSB4LCAobG9uZykgYXJyX2lkeCkpOworCisJCS8qIGhhbmRsZSBjb21tYSBhbmQgY2xvc2luZyBi cmFja2V0ICovCisKKwkJaWYgKCh4ID09IERVS19BU0NfQ09NTUEpICYmIChhcnJfaWR4ICE9IDAp KSB7CisJCQkvKiBhY2NlcHQgY29tbWEsIGV4cGVjdCBuZXcgdmFsdWUgKi8KKwkJCTsKKwkJfSBl bHNlIGlmICh4ID09IERVS19BU0NfUkJSQUNLRVQpIHsKKwkJCS8qIGVhdCBjbG9zaW5nIGJyYWNr ZXQgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGFycl9pZHggPT0gMCkgeworCQkJLyogYWNj ZXB0IGFueXRoaW5nLCBleHBlY3QgZmlyc3QgdmFsdWUgKEVPRiB3aWxsIGJlCisJCQkgKiBjYXVn aHQgYnkgZHVrX19kZWNfdmFsdWUoKSBiZWxvdy4KKwkJCSAqLworCQkJanNfY3R4LT5wLS07ICAv KiBiYWNrdHJhY2sgKHNhZmUpICovCisJCX0gZWxzZSB7CisJCQkvKiBjYXRjaGVzIEVPRiAoTlVM KSBhbmQgaW5pdGlhbCBjb21tYSAqLworCQkJZ290byBzeW50YXhfZXJyb3I7CisJCX0KKworCQkv KiBwYXJzZSB2YWx1ZSAqLworCisJCWR1a19fZGVjX3ZhbHVlKGpzX2N0eCk7CisKKwkJLyogWyAu Li4gYXJyIHZhbCBdICovCisKKwkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWModGhyLCAtMiwgYXJy X2lkeCk7CisJCWFycl9pZHgrKzsKKwl9CisKKwkvKiBNdXN0IHNldCAnbGVuZ3RoJyBleHBsaWNp dGx5IHdoZW4gdXNpbmcgZHVrX3hkZWZfcHJvcF94eHgoKSB0bworCSAqIHNldCB0aGUgdmFsdWVz LgorCSAqLworCisJZHVrX3NldF9sZW5ndGgodGhyLCAtMSwgYXJyX2lkeCk7CisKKwkvKiBbIC4u LiBhcnIgXSAqLworCisJRFVLX0RERChEVUtfREREUFJJTlQoInBhcnNlX2FycmF5OiBmaW5hbCBh cnJheSBpcyAlIVQiLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0 X3R2YWwodGhyLCAtMSkpKTsKKworCWR1a19fZGVjX29iamFycl9leGl0KGpzX2N0eCk7CisJcmV0 dXJuOworCisgc3ludGF4X2Vycm9yOgorCWR1a19fZGVjX3N5bnRheF9lcnJvcihqc19jdHgpOwor CURVS19VTlJFQUNIQUJMRSgpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlY192YWx1ZShk dWtfanNvbl9kZWNfY3R4ICpqc19jdHgpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0ganNfY3R4LT50 aHI7CisJZHVrX3VpbnQ4X3QgeDsKKworCXggPSBkdWtfX2RlY19nZXRfbm9ud2hpdGUoanNfY3R4 KTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZV92YWx1ZTogaW5pdGlhbCB4PSVsZCIs IChsb25nKSB4KSk7CisKKwkvKiBOb3RlOiBkdWtfX2RlY19yZXFfc3RyaWR4KCkgYmFja3RyYWNr cyBvbmUgY2hhciAqLworCisJaWYgKHggPT0gRFVLX0FTQ19ET1VCTEVRVU9URSkgeworCQlkdWtf X2RlY19zdHJpbmcoanNfY3R4KTsKKwl9IGVsc2UgaWYgKCh4ID49IERVS19BU0NfMCAmJiB4IDw9 IERVS19BU0NfOSkgfHwgKHggPT0gRFVLX0FTQ19NSU5VUykpIHsKKyNpZiBkZWZpbmVkKERVS19V U0VfSlgpCisJCWlmIChqc19jdHgtPmZsYWdfZXh0X2N1c3RvbSAmJiB4ID09IERVS19BU0NfTUlO VVMgJiYgZHVrX19kZWNfcGVlayhqc19jdHgpID09IERVS19BU0NfVUNfSSkgeworCQkJZHVrX19k ZWNfcmVxX3N0cmlkeChqc19jdHgsIERVS19TVFJJRFhfTUlOVVNfSU5GSU5JVFkpOyAgLyogIi1J bmZpbml0eSIsICctJyBoYXMgYmVlbiBlYXRlbiAqLworCQkJZHVrX3B1c2hfbnVtYmVyKHRociwg LURVS19ET1VCTEVfSU5GSU5JVFkpOworCQl9IGVsc2UgeworI2Vsc2UKKwkJeyAgLyogdW5jb25k aXRpb25hbCBibG9jayAqLworI2VuZGlmCisJCQkvKiBXZSBhbHJlYWR5IGF0ZSAneCcsIHNvIGJh Y2t1cCBvbmUgYnl0ZS4gKi8KKwkJCWpzX2N0eC0+cC0tOyAgLyogc2FmZSAqLworCQkJZHVrX19k ZWNfbnVtYmVyKGpzX2N0eCk7CisJCX0KKwl9IGVsc2UgaWYgKHggPT0gRFVLX0FTQ19MQ19UKSB7 CisJCWR1a19fZGVjX3JlcV9zdHJpZHgoanNfY3R4LCBEVUtfU1RSSURYX1RSVUUpOworCQlkdWtf cHVzaF90cnVlKHRocik7CisJfSBlbHNlIGlmICh4ID09IERVS19BU0NfTENfRikgeworCQlkdWtf X2RlY19yZXFfc3RyaWR4KGpzX2N0eCwgRFVLX1NUUklEWF9GQUxTRSk7CisJCWR1a19wdXNoX2Zh bHNlKHRocik7CisJfSBlbHNlIGlmICh4ID09IERVS19BU0NfTENfTikgeworCQlkdWtfX2RlY19y ZXFfc3RyaWR4KGpzX2N0eCwgRFVLX1NUUklEWF9MQ19OVUxMKTsKKwkJZHVrX3B1c2hfbnVsbCh0 aHIpOworI2lmIGRlZmluZWQoRFVLX1VTRV9KWCkKKwl9IGVsc2UgaWYgKGpzX2N0eC0+ZmxhZ19l eHRfY3VzdG9tICYmIHggPT0gRFVLX0FTQ19MQ19VKSB7CisJCWR1a19fZGVjX3JlcV9zdHJpZHgo anNfY3R4LCBEVUtfU1RSSURYX0xDX1VOREVGSU5FRCk7CisJCWR1a19wdXNoX3VuZGVmaW5lZCh0 aHIpOworCX0gZWxzZSBpZiAoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20gJiYgeCA9PSBEVUtfQVND X1VDX04pIHsKKwkJZHVrX19kZWNfcmVxX3N0cmlkeChqc19jdHgsIERVS19TVFJJRFhfTkFOKTsK KwkJZHVrX3B1c2hfbmFuKHRocik7CisJfSBlbHNlIGlmIChqc19jdHgtPmZsYWdfZXh0X2N1c3Rv bSAmJiB4ID09IERVS19BU0NfVUNfSSkgeworCQlkdWtfX2RlY19yZXFfc3RyaWR4KGpzX2N0eCwg RFVLX1NUUklEWF9JTkZJTklUWSk7CisJCWR1a19wdXNoX251bWJlcih0aHIsIERVS19ET1VCTEVf SU5GSU5JVFkpOworCX0gZWxzZSBpZiAoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20gJiYgeCA9PSBE VUtfQVNDX0xQQVJFTikgeworCQlkdWtfX2RlY19wb2ludGVyKGpzX2N0eCk7CisJfSBlbHNlIGlm IChqc19jdHgtPmZsYWdfZXh0X2N1c3RvbSAmJiB4ID09IERVS19BU0NfUElQRSkgeworCQlkdWtf X2RlY19idWZmZXIoanNfY3R4KTsKKyNlbmRpZgorCX0gZWxzZSBpZiAoeCA9PSBEVUtfQVNDX0xD VVJMWSkgeworCQlkdWtfX2RlY19vYmplY3QoanNfY3R4KTsKKwl9IGVsc2UgaWYgKHggPT0gRFVL X0FTQ19MQlJBQ0tFVCkgeworCQlkdWtfX2RlY19hcnJheShqc19jdHgpOworCX0gZWxzZSB7CisJ CS8qIGNhdGNoZXMgRU9GIChOVUwpICovCisJCWdvdG8gc3ludGF4X2Vycm9yOworCX0KKworCWR1 a19fZGVjX2VhdF93aGl0ZShqc19jdHgpOworCisJLyogWyAuLi4gdmFsIF0gKi8KKwlyZXR1cm47 CisKKyBzeW50YXhfZXJyb3I6CisJZHVrX19kZWNfc3ludGF4X2Vycm9yKGpzX2N0eCk7CisJRFVL X1VOUkVBQ0hBQkxFKCk7Cit9CisKKy8qIFJlY3Vyc2l2ZSB2YWx1ZSByZXZpdmVyLCBpbXBsZW1l bnRzIHRoZSBXYWxrKCkgYWxnb3JpdGhtLiAgTm8gQyByZWN1cnNpb24KKyAqIGNoZWNrIGlzIGRv bmUgaGVyZSBiZWNhdXNlIHRoZSBpbml0aWFsIHBhcnNpbmcgc3RlcCB3aWxsIGFscmVhZHkgZW5z dXJlCisgKiB0aGVyZSBpcyBhIHJlYXNvbmFibGUgbGltaXQgb24gQyByZWN1cnNpb24gZGVwdGgg YW5kIGhlbmNlIG9iamVjdCBkZXB0aC4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWNfcmV2 aXZlcl93YWxrKGR1a19qc29uX2RlY19jdHggKmpzX2N0eCkgeworCWR1a19odGhyZWFkICp0aHIg PSBqc19jdHgtPnRocjsKKwlkdWtfaG9iamVjdCAqaDsKKwlkdWtfdWFycmlkeF90IGksIGFycl9s ZW47CisKKwlEVUtfREREKERVS19ERERQUklOVCgid2FsazogdG9wPSVsZCwgaG9sZGVyPSUhVCwg bmFtZT0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBkdWtfZ2V0X3RvcCh0aHIp LAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAt MiksCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIs IC0xKSkpOworCisJZHVrX2R1cF90b3AodGhyKTsKKwlkdWtfZ2V0X3Byb3AodGhyLCAtMyk7ICAv KiAtPiBbIC4uLiBob2xkZXIgbmFtZSB2YWwgXSAqLworCisJaCA9IGR1a19nZXRfaG9iamVjdCh0 aHIsIC0xKTsKKwlpZiAoaCAhPSBOVUxMKSB7CisJCWlmIChEVUtfSE9CSkVDVF9HRVRfQ0xBU1Nf TlVNQkVSKGgpID09IERVS19IT0JKRUNUX0NMQVNTX0FSUkFZKSB7CisJCQlhcnJfbGVuID0gKGR1 a191YXJyaWR4X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgLTEpOworCQkJZm9yIChpID0gMDsgaSA8 IGFycl9sZW47IGkrKykgeworCQkJCS8qIFsgLi4uIGhvbGRlciBuYW1lIHZhbCBdICovCisKKwkJ CQlEVUtfREREKERVS19ERERQUklOVCgid2FsazogYXJyYXksIHRvcD0lbGQsIGk9JWxkLCBhcnJf bGVuPSVsZCwgaG9sZGVyPSUhVCwgbmFtZT0lIVQsIHZhbD0lIVQiLAorCQkJCSAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBkdWtfZ2V0X3RvcCh0aHIpLCAobG9uZykgaSwgKGxvbmcpIGFycl9s ZW4sCisJCQkJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0 aHIsIC0zKSwgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0yKSwKKwkJCQkgICAgICAg ICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisKKwkJ CQlkdWtfZHVwX3RvcCh0aHIpOworCQkJCSh2b2lkKSBkdWtfcHVzaF91aW50X3RvX2hzdHJpbmco dGhyLCAoZHVrX3VpbnRfdCkgaSk7ICAvKiAtPiBbIC4uLiBob2xkZXIgbmFtZSB2YWwgdmFsIFRv U3RyaW5nKGkpIF0gKi8KKwkJCQlkdWtfX2RlY19yZXZpdmVyX3dhbGsoanNfY3R4KTsgIC8qIC0+ IFsgLi4uIGhvbGRlciBuYW1lIHZhbCBuZXdfZWxlbSBdICovCisKKwkJCQlpZiAoZHVrX2lzX3Vu ZGVmaW5lZCh0aHIsIC0xKSkgeworCQkJCQlkdWtfcG9wKHRocik7CisJCQkJCWR1a19kZWxfcHJv cF9pbmRleCh0aHIsIC0xLCBpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBYWFg6IGR1a194ZGVm X3Byb3BfaW5kZXhfd2VjKCkgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZQorCQkJCQkgKiBoZXJl IGJ1dCBpdCBjdXJyZW50bHkgbWFrZXMgc29tZSBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0CisJCQkJ CSAqIG5vdCBob2xkIChlLmcuIHRoYXQgcHJldmlvdXMgcHJvcGVydHkgaXMgbm90IGFuIGFjY2Vz c29yKS4KKwkJCQkJICovCisJCQkJCWR1a19wdXRfcHJvcF9pbmRleCh0aHIsIC0yLCBpKTsKKwkJ CQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBbIC4uLiBob2xkZXIgbmFtZSB2YWwgXSAqLwor CQkJZHVrX2VudW0odGhyLCAtMSwgRFVLX0VOVU1fT1dOX1BST1BFUlRJRVNfT05MWSAvKmZsYWdz Ki8pOworCQkJd2hpbGUgKGR1a19uZXh0KHRociwgLTEgLyplbnVtX2luZGV4Ki8sIDAgLypnZXRf dmFsdWUqLykpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgid2Fsazogb2JqZWN0LCB0b3A9 JWxkLCBob2xkZXI9JSFULCBuYW1lPSUhVCwgdmFsPSUhVCwgZW51bT0lIWlULCBvYmpfa2V5PSUh VCIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGR1a19nZXRfdG9wKHRociksIChk dWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtNSksCisJCQkJICAgICAgICAgICAgICAgICAg ICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC00KSwgKGR1a190dmFsICopIGR1a19n ZXRfdHZhbCh0aHIsIC0zKSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikg ZHVrX2dldF90dmFsKHRociwgLTIpLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEp KSk7CisKKwkJCQkvKiBbIC4uLiBob2xkZXIgbmFtZSB2YWwgZW51bSBvYmpfa2V5IF0gKi8KKwkJ CQlkdWtfZHVwX20zKHRocik7CisJCQkJZHVrX2R1cF9tMih0aHIpOworCisJCQkJLyogWyAuLi4g aG9sZGVyIG5hbWUgdmFsIGVudW0gb2JqX2tleSB2YWwgb2JqX2tleSBdICovCisJCQkJZHVrX19k ZWNfcmV2aXZlcl93YWxrKGpzX2N0eCk7CisKKwkJCQkvKiBbIC4uLiBob2xkZXIgbmFtZSB2YWwg ZW51bSBvYmpfa2V5IG5ld19lbGVtIF0gKi8KKwkJCQlpZiAoZHVrX2lzX3VuZGVmaW5lZCh0aHIs IC0xKSkgeworCQkJCQlkdWtfcG9wKHRocik7CisJCQkJCWR1a19kZWxfcHJvcCh0aHIsIC0zKTsK KwkJCQl9IGVsc2UgeworCQkJCQkvKiBYWFg6IGR1a194ZGVmX3Byb3BfaW5kZXhfd2VjKCkgd291 bGQgYmUgbW9yZSBhcHByb3ByaWF0ZQorCQkJCQkgKiBoZXJlIGJ1dCBpdCBjdXJyZW50bHkgbWFr ZXMgc29tZSBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0CisJCQkJCSAqIG5vdCBob2xkIChlLmcuIHRo YXQgcHJldmlvdXMgcHJvcGVydHkgaXMgbm90IGFuIGFjY2Vzc29yKS4KKwkJCQkJICoKKwkJCQkJ ICogVXNpbmcgZHVrX3B1dF9wcm9wKCkgd29ya3MgaW5jb3JyZWN0bHkgd2l0aCAnX19wcm90b19f JworCQkJCQkgKiBpZiB0aGUgb3duIHByb3BlcnR5IHdpdGggdGhhdCBuYW1lIGhhcyBiZWVuIGRl bGV0ZWQuICBUaGlzCisJCQkJCSAqIGRvZXMgbm90IGhhcHBlbiBub3JtYWxseSwgYnV0IGEgY2xl dmVyIHJldml2ZXIgY2FuIHRyaWdnZXIKKwkJCQkJICogdGhhdCwgc2VlIGNvbXBsZXggcmV2aXZl ciBjYXNlIGluOiB0ZXN0LWJ1Zy1qc29uLXBhcnNlLV9fcHJvdG9fXy5qcy4KKwkJCQkJICovCisJ CQkJCWR1a19wdXRfcHJvcCh0aHIsIC00KTsKKwkJCQl9CisJCQl9CisJCQlkdWtfcG9wKHRocik7 ICAvKiBwb3AgZW51bSAqLworCQl9CisJfQorCisJLyogWyAuLi4gaG9sZGVyIG5hbWUgdmFsIF0g Ki8KKworCWR1a19kdXAodGhyLCBqc19jdHgtPmlkeF9yZXZpdmVyKTsKKwlkdWtfaW5zZXJ0KHRo ciwgLTQpOyAgLyogLT4gWyAuLi4gcmV2aXZlciBob2xkZXIgbmFtZSB2YWwgXSAqLworCWR1a19j YWxsX21ldGhvZCh0aHIsIDIpOyAgLyogLT4gWyAuLi4gcmVzIF0gKi8KKworCURVS19EREQoRFVL X0RERFBSSU5UKCJ3YWxrOiB0b3A9JWxkLCByZXN1bHQ9JSFUIiwKKwkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgZHVrX2dldF90b3AodGhyKSwgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0 aHIsIC0xKSkpOworfQorCisvKgorICogIFN0cmluZ2lmeSBpbXBsZW1lbnRhdGlvbi4KKyAqLwor CisjZGVmaW5lIERVS19fRU1JVF8xKGpzX2N0eCxjaCkgICAgICAgICAgZHVrX19lbWl0XzEoKGpz X2N0eCksIChkdWtfdWludF9mYXN0OF90KSAoY2gpKQorI2RlZmluZSBEVUtfX0VNSVRfMihqc19j dHgsY2gxLGNoMikgICAgIGR1a19fZW1pdF8yKChqc19jdHgpLCAoZHVrX3VpbnRfZmFzdDhfdCkg KGNoMSksIChkdWtfdWludF9mYXN0OF90KSAoY2gyKSkKKyNkZWZpbmUgRFVLX19FTUlUX0hTVFIo anNfY3R4LGgpICAgICAgICBkdWtfX2VtaXRfaHN0cmluZygoanNfY3R4KSwgKGgpKQorI2lmIGRl ZmluZWQoRFVLX1VTRV9GQVNUSU5UKSB8fCBkZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmluZWQo RFVLX1VTRV9KQykKKyNkZWZpbmUgRFVLX19FTUlUX0NTVFIoanNfY3R4LHApICAgICAgICBkdWtf X2VtaXRfY3N0cmluZygoanNfY3R4KSwgKHApKQorI2VuZGlmCisjZGVmaW5lIERVS19fRU1JVF9T VFJJRFgoanNfY3R4LGkpICAgICAgZHVrX19lbWl0X3N0cmlkeCgoanNfY3R4KSwgKGkpKQorI2Rl ZmluZSBEVUtfX1VORU1JVF8xKGpzX2N0eCkgICAgICAgICAgIGR1a19fdW5lbWl0XzEoKGpzX2N0 eCkpCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZW1pdF8xKGR1a19qc29uX2VuY19jdHggKmpzX2N0 eCwgZHVrX3VpbnRfZmFzdDhfdCBjaCkgeworCURVS19CV19XUklURV9FTlNVUkVfVTgoanNfY3R4 LT50aHIsICZqc19jdHgtPmJ3LCBjaCk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZW1pdF8y KGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX3VpbnRfZmFzdDhfdCBjaDEsIGR1a191aW50 X2Zhc3Q4X3QgY2gyKSB7CisJRFVLX0JXX1dSSVRFX0VOU1VSRV9VOF8yKGpzX2N0eC0+dGhyLCAm anNfY3R4LT5idywgY2gxLCBjaDIpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfaHN0 cmluZyhkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgsIGR1a19oc3RyaW5nICpoKSB7CisJRFVLX0JX X1dSSVRFX0VOU1VSRV9IU1RSSU5HKGpzX2N0eC0+dGhyLCAmanNfY3R4LT5idywgaCk7Cit9CisK KyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkgfHwgZGVmaW5lZChEVUtfVVNFX0pYKSB8fCBk ZWZpbmVkKERVS19VU0VfSkMpCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfY3N0cmluZyhkdWtf anNvbl9lbmNfY3R4ICpqc19jdHgsIGNvbnN0IGNoYXIgKnN0cikgeworCURVS19CV19XUklURV9F TlNVUkVfQ1NUUklORyhqc19jdHgtPnRociwgJmpzX2N0eC0+YncsIHN0cik7Cit9CisjZW5kaWYK KworRFVLX0xPQ0FMIHZvaWQgZHVrX19lbWl0X3N0cmlkeChkdWtfanNvbl9lbmNfY3R4ICpqc19j dHgsIGR1a19zbWFsbF91aW50X3Qgc3RyaWR4KSB7CisJZHVrX2hzdHJpbmcgKmg7CisKKwlEVUtf QVNTRVJUX1NUUklEWF9WQUxJRChzdHJpZHgpOworCWggPSBEVUtfSFRIUkVBRF9HRVRfU1RSSU5H KGpzX2N0eC0+dGhyLCBzdHJpZHgpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKworCURVS19C V19XUklURV9FTlNVUkVfSFNUUklORyhqc19jdHgtPnRociwgJmpzX2N0eC0+YncsIGgpOworfQor CitEVUtfTE9DQUwgdm9pZCBkdWtfX3VuZW1pdF8xKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCkg eworCURVS19BU1NFUlQoRFVLX0JXX0dFVF9TSVpFKGpzX2N0eC0+dGhyLCAmanNfY3R4LT5idykg Pj0gMSk7CisJRFVLX0JXX0FERF9QVFIoanNfY3R4LT50aHIsICZqc19jdHgtPmJ3LCAtMSk7Cit9 CisKKyNkZWZpbmUgRFVLX19NS0VTQyhueWJibGVzLGVzYzEsZXNjMikgIFwKKwkoKChkdWtfdWlu dF9mYXN0MzJfdCkgKG55YmJsZXMpKSA8PCAxNikgfCBcCisJKCgoZHVrX3VpbnRfZmFzdDMyX3Qp IChlc2MxKSkgPDwgOCkgfCBcCisJKChkdWtfdWludF9mYXN0MzJfdCkgKGVzYzIpKQorCitEVUtf TE9DQUwgZHVrX3VpbnQ4X3QgKmR1a19fZW1pdF9lc2NfYXV0b19mYXN0KGR1a19qc29uX2VuY19j dHggKmpzX2N0eCwgZHVrX3VpbnRfZmFzdDMyX3QgY3AsIGR1a191aW50OF90ICpxKSB7CisJZHVr X3VpbnRfZmFzdDMyX3QgdG1wOworCWR1a19zbWFsbF91aW50X3QgZGlnOworCisJRFVLX1VOUkVG KGpzX2N0eCk7CisKKwkvKiBDYWxsZXIgZW5zdXJlcyBzcGFjZSBmb3IgYXQgbGVhc3QgRFVLX19K U09OX01BWF9FU0NfTEVOLiAqLworCisJLyogU2VsZWN0IGFwcHJvcHJpYXRlIGVzY2FwZSBmb3Jt YXQgYXV0b21hdGljYWxseSwgYW5kIHNldCAndG1wJyB0byBhCisJICogdmFsdWUgZW5jb2Rpbmcg Ym90aCB0aGUgZXNjYXBlIGZvcm1hdCBjaGFyYWN0ZXIgYW5kIHRoZSBueWJibGUgY291bnQ6CisJ ICoKKwkgKiAgIChueWJibGVfY291bnQgPDwgMTYpIHwgKGVzY2FwZV9jaGFyMSkgfCAoZXNjYXBl X2NoYXIyKQorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0pYKQorCWlmIChEVUtfTElLRUxZ KGNwIDwgMHgxMDBVTCkpIHsKKwkJaWYgKERVS19VTkxJS0VMWShqc19jdHgtPmZsYWdfZXh0X2N1 c3RvbSAhPSAwVSkpIHsKKwkJCXRtcCA9IERVS19fTUtFU0MoMiwgRFVLX0FTQ19CQUNLU0xBU0gs IERVS19BU0NfTENfWCk7CisJCX0gZWxzZSB7CisJCQl0bXAgPSBEVUtfX01LRVNDKDQsIERVS19B U0NfQkFDS1NMQVNILCBEVUtfQVNDX0xDX1UpOworCQl9CisJfSBlbHNlCisjZW5kaWYKKwlpZiAo RFVLX0xJS0VMWShjcCA8IDB4MTAwMDBVTCkpIHsKKwkJdG1wID0gRFVLX19NS0VTQyg0LCBEVUtf QVNDX0JBQ0tTTEFTSCwgRFVLX0FTQ19MQ19VKTsKKwl9IGVsc2UgeworI2lmIGRlZmluZWQoRFVL X1VTRV9KWCkKKwkJaWYgKERVS19MSUtFTFkoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20gIT0gMFUp KSB7CisJCQl0bXAgPSBEVUtfX01LRVNDKDgsIERVS19BU0NfQkFDS1NMQVNILCBEVUtfQVNDX1VD X1UpOworCQl9IGVsc2UKKyNlbmRpZgorCQl7CisJCQkvKiBJbiBjb21wYXRpYmxlIG1vZGUgYW5k IHN0YW5kYXJkIEpTT04gbW9kZSwgb3V0cHV0CisJCQkgKiBzb21ldGhpbmcgdXNlZnVsIGZvciBu b24tQk1QIGNoYXJhY3RlcnMuICBUaGlzIHdvbid0CisJCQkgKiByb3VuZHRyaXAgYnV0IHdpbGwg c3RpbGwgYmUgbW9yZSBvciBsZXNzIHJlYWRhYmxlIGFuZAorCQkJICogbW9yZSB1c2VmdWwgdGhh biBhbiBlcnJvci4KKwkJCSAqLworCQkJdG1wID0gRFVLX19NS0VTQyg4LCBEVUtfQVNDX1VDX1Us IERVS19BU0NfUExVUyk7CisJCX0KKwl9CisKKwkqcSsrID0gKGR1a191aW50OF90KSAoKHRtcCA+ PiA4KSAmIDB4ZmYpOworCSpxKysgPSAoZHVrX3VpbnQ4X3QpICh0bXAgJiAweGZmKTsKKworCXRt cCA9IHRtcCA+PiAxNjsKKwl3aGlsZSAodG1wID4gMCkgeworCQl0bXAtLTsKKwkJZGlnID0gKGR1 a19zbWFsbF91aW50X3QpICgoY3AgPj4gKDQgKiB0bXApKSAmIDB4MGYpOworCQkqcSsrID0gZHVr X2xjX2RpZ2l0c1tkaWddOworCX0KKworCXJldHVybiBxOworfQorCitEVUtfTE9DQUwgdm9pZCBk dWtfX2VuY19rZXlfYXV0b3F1b3RlKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX2hzdHJp bmcgKmspIHsKKwljb25zdCBkdWtfaW50OF90ICpwLCAqcF9zdGFydCwgKnBfZW5kOyAgLyogTm90 ZTogaW50ZW50aW9uYWxseSBzaWduZWQuICovCisJZHVrX3NpemVfdCBrX2xlbjsKKwlkdWtfY29k ZXBvaW50X3QgY3A7CisKKwlEVUtfQVNTRVJUKGsgIT0gTlVMTCk7CisKKwkvKiBBY2NlcHQgQVND SUkgc3RyaW5ncyB3aGljaCBjb25mb3JtIHRvIGlkZW50aWZpZXIgcmVxdWlyZW1lbnRzCisJICog YXMgYmVpbmcgZW1pdHRlZCB3aXRob3V0IGtleSBxdW90ZXMuICBTaW5jZSB3ZSBvbmx5IGFjY2Vw dCBBU0NJSQorCSAqIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYWN0dWFsIGRlY29kaW5nOiAncCcgaXMg aW50ZW50aW9uYWxseSBzaWduZWQKKwkgKiBzbyB0aGF0IGJ5dGVzID49IDB4ODAgZXh0ZW5kIHRv IG5lZ2F0aXZlIHZhbHVlcyBhbmQgYXJlIHJlamVjdGVkCisJICogYXMgaW52YWxpZCBpZGVudGlm aWVyIGNvZGVwb2ludHMuCisJICovCisKKwlpZiAoanNfY3R4LT5mbGFnX2F2b2lkX2tleV9xdW90 ZXMpIHsKKwkJa19sZW4gPSBEVUtfSFNUUklOR19HRVRfQllURUxFTihrKTsKKwkJcF9zdGFydCA9 IChjb25zdCBkdWtfaW50OF90ICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGspOworCQlwX2VuZCA9 IHBfc3RhcnQgKyBrX2xlbjsKKwkJcCA9IHBfc3RhcnQ7CisKKwkJaWYgKHAgPT0gcF9lbmQpIHsK KwkJCS8qIFplcm8gbGVuZ3RoIHN0cmluZyBpcyBub3QgYWNjZXB0ZWQgd2l0aG91dCBxdW90ZXMg Ki8KKwkJCWdvdG8gcXVvdGVfbm9ybWFsbHk7CisJCX0KKwkJY3AgPSAoZHVrX2NvZGVwb2ludF90 KSAoKnArKyk7CisJCWlmIChEVUtfVU5MSUtFTFkoIWR1a191bmljb2RlX2lzX2lkZW50aWZpZXJf c3RhcnQoY3ApKSkgeworCQkJZ290byBxdW90ZV9ub3JtYWxseTsKKwkJfQorCQl3aGlsZSAocCA8 IHBfZW5kKSB7CisJCQljcCA9IChkdWtfY29kZXBvaW50X3QpICgqcCsrKTsKKwkJCWlmIChEVUtf VU5MSUtFTFkoIWR1a191bmljb2RlX2lzX2lkZW50aWZpZXJfcGFydChjcCkpKSB7CisJCQkJZ290 byBxdW90ZV9ub3JtYWxseTsKKwkJCX0KKwkJfQorCisJCS8qIFRoaXMgc2VlbXMgZmFzdGVyIHRo YW4gZW1pdHRpbmcgYnl0ZXMgb25lIGF0IGEgdGltZSBhbmQKKwkJICogdGhlbiBwb3RlbnRpYWxs eSByZXdpbmRpbmcuCisJCSAqLworCQlEVUtfX0VNSVRfSFNUUihqc19jdHgsIGspOworCQlyZXR1 cm47CisJfQorCisgcXVvdGVfbm9ybWFsbHk6CisJZHVrX19lbmNfcXVvdGVfc3RyaW5nKGpzX2N0 eCwgayk7Cit9CisKKy8qIFRoZSBRdW90ZSh2YWx1ZSkgb3BlcmF0aW9uOiBxdW90ZSBhIHN0cmlu Zy4KKyAqCisgKiBTdGFjayBwb2xpY3k6IFsgXSAtPiBbIF0uCisgKi8KKworRFVLX0xPQ0FMIHZv aWQgZHVrX19lbmNfcXVvdGVfc3RyaW5nKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX2hz dHJpbmcgKmhfc3RyKSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGpzX2N0eC0+dGhyOworCWNvbnN0 IGR1a191aW50OF90ICpwLCAqcF9zdGFydCwgKnBfZW5kLCAqcF9ub3csICpwX3RtcDsKKwlkdWtf dWludDhfdCAqcTsKKwlkdWtfdWNvZGVwb2ludF90IGNwOyAgLyogdHlwZWQgZm9yIGR1a191bmlj b2RlX2RlY29kZV94dXRmOCgpICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19lbmNf cXVvdGVfc3RyaW5nOiBoX3N0cj0lIU8iLCAoZHVrX2hlYXBoZHIgKikgaF9zdHIpKTsKKworCURV S19BU1NFUlQoaF9zdHIgIT0gTlVMTCk7CisJcF9zdGFydCA9IERVS19IU1RSSU5HX0dFVF9EQVRB KGhfc3RyKTsKKwlwX2VuZCA9IHBfc3RhcnQgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX3N0 cik7CisJcCA9IHBfc3RhcnQ7CisKKwlEVUtfX0VNSVRfMShqc19jdHgsIERVS19BU0NfRE9VQkxF UVVPVEUpOworCisJLyogRW5jb2RlIHN0cmluZyBpbiBzbWFsbCBjaHVua3MsIGVzdGltYXRpbmcg dGhlIG1heGltdW0gZXhwYW5zaW9uIHNvIHRoYXQKKwkgKiB0aGVyZSdzIG5vIG5lZWQgdG8gZW5z dXJlIHNwYWNlIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNodW5rLgorCSAqLworCisJd2hpbGUgKHAg PCBwX2VuZCkgeworCQlkdWtfc2l6ZV90IGxlZnQsIG5vdywgc3BhY2U7CisKKwkJbGVmdCA9IChk dWtfc2l6ZV90KSAocF9lbmQgLSBwKTsKKwkJbm93ID0gKGxlZnQgPiBEVUtfX0pTT05fRU5DU1RS X0NIVU5LU0laRSA/CisJCSAgICAgICBEVUtfX0pTT05fRU5DU1RSX0NIVU5LU0laRSA6IGxlZnQp OworCisJCS8qIE1heGltdW0gZXhwYW5zaW9uIHBlciBpbnB1dCBieXRlIGlzIDY6CisJCSAqICAg LSBpbnZhbGlkIFVURi04IGJ5dGUgY2F1c2VzICJcdVhYWFgiIHRvIGJlIGVtaXR0ZWQgKDYvMSA9 IDYpLgorCQkgKiAgIC0gMi1ieXRlIFVURi04IGVuY29kZXMgYXMgIlx1WFhYWCIgKDYvMiA9IDMp LgorCQkgKiAgIC0gNC1ieXRlIFVURi04IGVuY29kZXMgYXMgIlxVeHh4eHh4eHgiICgxMC80ID0g Mi41KS4KKwkJICovCisJCXNwYWNlID0gbm93ICogNjsKKwkJcSA9IERVS19CV19FTlNVUkVfR0VU UFRSKHRociwgJmpzX2N0eC0+YncsIHNwYWNlKTsKKworCQlwX25vdyA9IHAgKyBub3c7CisKKwkJ d2hpbGUgKHAgPCBwX25vdykgeworI2lmIGRlZmluZWQoRFVLX1VTRV9KU09OX1FVT1RFU1RSSU5H X0ZBU1RQQVRIKQorCQkJZHVrX3VpbnQ4X3QgYjsKKworCQkJYiA9IGR1a19fanNvbl9xdW90ZXN0 cl9sb29rdXBbKnArK107CisJCQlpZiAoRFVLX0xJS0VMWShiIDwgMHg4MCkpIHsKKwkJCQkvKiBN b3N0IGlucHV0IGJ5dGVzIGdvIHRocm91Z2ggaGVyZS4gKi8KKwkJCQkqcSsrID0gYjsKKwkJCX0g ZWxzZSBpZiAoYiA+PSAweGEwKSB7CisJCQkJKnErKyA9IERVS19BU0NfQkFDS1NMQVNIOworCQkJ CSpxKysgPSAoZHVrX3VpbnQ4X3QpIChiIC0gMHg4MCk7CisJCQl9IGVsc2UgaWYgKGIgPT0gMHg4 MCkgeworCQkJCWNwID0gKGR1a191Y29kZXBvaW50X3QpICgqKHAgLSAxKSk7CisJCQkJcSA9IGR1 a19fZW1pdF9lc2NfYXV0b19mYXN0KGpzX2N0eCwgY3AsIHEpOworCQkJfSBlbHNlIGlmIChiID09 IDB4N2YgJiYganNfY3R4LT5mbGFnX2FzY2lpX29ubHkpIHsKKwkJCQkvKiAweDdGIGlzIHNwZWNp YWwgKi8KKwkJCQlEVUtfQVNTRVJUKGIgPT0gMHg4MSk7CisJCQkJY3AgPSAoZHVrX3Vjb2RlcG9p bnRfdCkgMHg3ZjsKKwkJCQlxID0gZHVrX19lbWl0X2VzY19hdXRvX2Zhc3QoanNfY3R4LCBjcCwg cSk7CisJCQl9IGVsc2UgeworCQkJCURVS19BU1NFUlQoYiA9PSAweDgxKTsKKwkJCQlwLS07CisK KwkJCQkvKiBzbG93IHBhdGggaXMgc2hhcmVkICovCisjZWxzZSAgLyogRFVLX1VTRV9KU09OX1FV T1RFU1RSSU5HX0ZBU1RQQVRIICovCisJCQljcCA9ICpwOworCisJCQlpZiAoRFVLX0xJS0VMWShj cCA8PSAweDdmKSkgeworCQkJCS8qIGFzY2lpIGZhc3QgcGF0aDogYXZvaWQgZGVjb2RpbmcgdXRm LTggKi8KKwkJCQlwKys7CisJCQkJaWYgKGNwID09IDB4MjIgfHwgY3AgPT0gMHg1YykgeworCQkJ CQkvKiBkb3VibGUgcXVvdGUgb3IgYmFja3NsYXNoICovCisJCQkJCSpxKysgPSBEVUtfQVNDX0JB Q0tTTEFTSDsKKwkJCQkJKnErKyA9IChkdWtfdWludDhfdCkgY3A7CisJCQkJfSBlbHNlIGlmIChj cCA8IDB4MjApIHsKKwkJCQkJZHVrX3VpbnRfZmFzdDhfdCBlc2NfY2hhcjsKKworCQkJCQkvKiBU aGlzIGFwcHJvYWNoIGlzIGEgYml0IHNob3J0ZXIgdGhhbiBhIHN0cmFpZ2h0CisJCQkJCSAqIGlm LWVsc2UtbGFkZGVyIGFuZCBhbHNvIGEgYml0IGZhc3Rlci4KKwkJCQkJICovCisJCQkJCWlmIChj cCA8IChzaXplb2YoZHVrX19qc29uX3F1b3Rlc3RyX2VzYykgLyBzaXplb2YoZHVrX3VpbnQ4X3Qp KSAmJgorCQkJCQkgICAgKGVzY19jaGFyID0gZHVrX19qc29uX3F1b3Rlc3RyX2VzY1tjcF0pICE9 IDApIHsKKwkJCQkJCSpxKysgPSBEVUtfQVNDX0JBQ0tTTEFTSDsKKwkJCQkJCSpxKysgPSAoZHVr X3VpbnQ4X3QpIGVzY19jaGFyOworCQkJCQl9IGVsc2UgeworCQkJCQkJcSA9IGR1a19fZW1pdF9l c2NfYXV0b19mYXN0KGpzX2N0eCwgY3AsIHEpOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChjcCA9 PSAweDdmICYmIGpzX2N0eC0+ZmxhZ19hc2NpaV9vbmx5KSB7CisJCQkJCXEgPSBkdWtfX2VtaXRf ZXNjX2F1dG9fZmFzdChqc19jdHgsIGNwLCBxKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBhbnkg b3RoZXIgcHJpbnRhYmxlIC0+IGFzIGlzICovCisJCQkJCSpxKysgPSAoZHVrX3VpbnQ4X3QpIGNw OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogc2xvdyBwYXRoIGlzIHNoYXJlZCAqLworI2Vu ZGlmICAvKiBEVUtfVVNFX0pTT05fUVVPVEVTVFJJTkdfRkFTVFBBVEggKi8KKworCQkJCS8qIHNs b3cgcGF0aCBkZWNvZGUgKi8KKworCQkJCS8qIElmIFhVVEYtOCBkZWNvZGluZyBmYWlscywgdHJl YXQgdGhlIG9mZmVuZGluZyBieXRlIGFzIGEgY29kZXBvaW50IGRpcmVjdGx5CisJCQkJICogYW5k IGdvIGZvcndhcmQgb25lIGJ5dGUuICBUaGlzIGlzIG9mIGNvdXJzZSB2ZXJ5IGxvc3N5LCBidXQg YWxsb3dzIHNvbWUga2luZAorCQkJCSAqIG9mIG91dHB1dCB0byBiZSBwcm9kdWNlZCBldmVuIGZv ciBpbnRlcm5hbCBzdHJpbmdzIHdoaWNoIGRvbid0IGNvbmZvcm0gdG8KKwkJCQkgKiBYVVRGLTgu ICBBbGwgc3RhbmRhcmQgRUNNQVNjcmlwdCBzdHJpbmdzIGFyZSBhbHdheXMgQ0VTVS04LCBzbyB0 aGlzIGJlaGF2aW9yCisJCQkJICogZG9lcyBub3QgdmlvbGF0ZSB0aGUgRUNNQVNjcmlwdCBzcGVj aWZpY2F0aW9uLiAgVGhlIGJlaGF2aW9yIGlzIGFwcGxpZWQgdG8KKwkJCQkgKiBhbGwgbW9kZXMs IGluY2x1ZGluZyBFQ01BU2NyaXB0IHN0YW5kYXJkIEpTT04uICBCZWNhdXNlIHRoZSBjdXJyZW50 IFhVVEYtOAorCQkJCSAqIGRlY29kaW5nIGlzIG5vdCB2ZXJ5IHN0cmljdCwgdGhpcyBiZWhhdmlv ciBvbmx5IHJlYWxseSBhZmZlY3RzIGluaXRpYWwgYnl0ZXMKKwkJCQkgKiBhbmQgdHJ1bmNhdGVk IGNvZGVwb2ludHMuCisJCQkJICoKKwkJCQkgKiBBbm90aGVyIGFsdGVybmF0aXZlIHdvdWxkIGJl IHRvIHNjYW4gZm9yd2FyZHMgdG8gc3RhcnQgb2YgbmV4dCBjb2RlcG9pbnQKKwkJCQkgKiAob3Ig ZW5kIG9mIGlucHV0KSBhbmQgZW1pdCBqdXN0IG9uZSByZXBsYWNlbWVudCBjb2RlcG9pbnQuCisJ CQkJICovCisKKwkJCQlwX3RtcCA9IHA7CisJCQkJaWYgKCFkdWtfdW5pY29kZV9kZWNvZGVfeHV0 ZjgodGhyLCAmcCwgcF9zdGFydCwgcF9lbmQsICZjcCkpIHsKKwkJCQkJLyogRGVjb2RlIGZhaWxl ZC4gKi8KKwkJCQkJY3AgPSAqcF90bXA7CisJCQkJCXAgPSBwX3RtcCArIDE7CisJCQkJfQorCisj aWYgZGVmaW5lZChEVUtfVVNFX05PTlNURF9KU09OX0VTQ19VMjAyOF9VMjAyOSkKKwkJCQlpZiAo anNfY3R4LT5mbGFnX2FzY2lpX29ubHkgfHwgY3AgPT0gMHgyMDI4IHx8IGNwID09IDB4MjAyOSkg eworI2Vsc2UKKwkJCQlpZiAoanNfY3R4LT5mbGFnX2FzY2lpX29ubHkpIHsKKyNlbmRpZgorCQkJ CQlxID0gZHVrX19lbWl0X2VzY19hdXRvX2Zhc3QoanNfY3R4LCBjcCwgcSk7CisJCQkJfSBlbHNl IHsKKwkJCQkJLyogYXMgaXMgKi8KKwkJCQkJRFVLX1JBV19XUklURV9YVVRGOChxLCBjcCk7CisJ CQkJfQorCQkJfQorCQl9CisKKwkJRFVLX0JXX1NFVF9QVFIodGhyLCAmanNfY3R4LT5idywgcSk7 CisJfQorCisJRFVLX19FTUlUXzEoanNfY3R4LCBEVUtfQVNDX0RPVUJMRVFVT1RFKTsKK30KKwor LyogRW5jb2RlIGEgZG91YmxlIChjaGVja2VkIGJ5IGNhbGxlcikgZnJvbSBzdGFjayB0b3AuICBT dGFjayB0b3AgbWF5IGJlCisgKiByZXBsYWNlZCBieSBzZXJpYWxpemVkIHN0cmluZyBidXQgaXMg bm90IHBvcHBlZCAoY2FsbGVyIGRvZXMgdGhhdCkuCisgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19f ZW5jX2RvdWJsZShkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgpIHsKKwlkdWtfaHRocmVhZCAqdGhy OworCWR1a190dmFsICp0djsKKwlkdWtfZG91YmxlX3QgZDsKKwlkdWtfc21hbGxfaW50X3QgYzsK KwlkdWtfc21hbGxfaW50X3QgczsKKwlkdWtfc21hbGxfdWludF90IHN0cmlkeDsKKwlkdWtfc21h bGxfdWludF90IG4yc19mbGFnczsKKwlkdWtfaHN0cmluZyAqaF9zdHI7CisKKwlEVUtfQVNTRVJU KGpzX2N0eCAhPSBOVUxMKTsKKwl0aHIgPSBqc19jdHgtPnRocjsKKwlEVUtfQVNTRVJUKHRociAh PSBOVUxMKTsKKworCS8qIENhbGxlciBtdXN0IGVuc3VyZSAndHYnIGlzIGluZGVlZCBhIGRvdWJs ZSBhbmQgbm90IGEgZmFzdGludCEgKi8KKwl0diA9IERVS19HRVRfVFZBTF9ORUdJRFgodGhyLCAt MSk7CisJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19ET1VCTEUodHYpKTsKKwlkID0gRFVLX1RWQUxf R0VUX0RPVUJMRSh0dik7CisKKwljID0gKGR1a19zbWFsbF9pbnRfdCkgRFVLX0ZQQ0xBU1NJRlko ZCk7CisJcyA9IChkdWtfc21hbGxfaW50X3QpIERVS19TSUdOQklUKGQpOworCURVS19VTlJFRihz KTsKKworCWlmIChEVUtfTElLRUxZKCEoYyA9PSBEVUtfRlBfSU5GSU5JVEUgfHwgYyA9PSBEVUtf RlBfTkFOKSkpIHsKKwkJRFVLX0FTU0VSVChEVUtfSVNGSU5JVEUoZCkpOworCisjaWYgZGVmaW5l ZChEVUtfVVNFX0pYKSB8fCBkZWZpbmVkKERVS19VU0VfSkMpCisJCS8qIE5lZ2F0aXZlIHplcm8g bmVlZHMgc3BlY2lhbCBoYW5kbGluZyBpbiBKWC9KQyBiZWNhdXNlCisJCSAqIGl0IHdvdWxkIG90 aGVyd2lzZSBzZXJpYWxpemUgdG8gJzAnLCBub3QgJy0wJy4KKwkJICovCisJCWlmIChEVUtfVU5M SUtFTFkoYyA9PSBEVUtfRlBfWkVSTyAmJiBzICE9IDAgJiYKKwkJICAgICAgICAgICAgICAgICAo anNfY3R4LT5mbGFnX2V4dF9jdXN0b21fb3JfY29tcGF0aWJsZSkpKSB7CisJCQlkdWtfcHVzaF9o c3RyaW5nX3N0cmlkeCh0aHIsIERVS19TVFJJRFhfTUlOVVNfWkVSTyk7ICAvKiAnLTAnICovCisJ CX0gZWxzZQorI2VuZGlmICAvKiBEVUtfVVNFX0pYIHx8IERVS19VU0VfSkMgKi8KKwkJeworCQkJ bjJzX2ZsYWdzID0gMDsKKwkJCS8qIFsgLi4uIG51bWJlciBdIC0+IFsgLi4uIHN0cmluZyBdICov CisJCQlkdWtfbnVtY29udl9zdHJpbmdpZnkodGhyLCAxMCAvKnJhZGl4Ki8sIDAgLypkaWdpdHMq LywgbjJzX2ZsYWdzKTsKKwkJfQorCQloX3N0ciA9IGR1a19rbm93bl9oc3RyaW5nKHRociwgLTEp OworCQlEVUtfX0VNSVRfSFNUUihqc19jdHgsIGhfc3RyKTsKKwkJcmV0dXJuOworCX0KKworI2lm IGRlZmluZWQoRFVLX1VTRV9KWCkgfHwgZGVmaW5lZChEVUtfVVNFX0pDKQorCWlmICghKGpzX2N0 eC0+ZmxhZ3MgJiAoRFVLX0pTT05fRkxBR19FWFRfQ1VTVE9NIHwKKwkgICAgICAgICAgICAgICAg ICAgICAgIERVS19KU09OX0ZMQUdfRVhUX0NPTVBBVElCTEUpKSkgeworCQlzdHJpZHggPSBEVUtf U1RSSURYX0xDX05VTEw7CisJfSBlbHNlIGlmIChjID09IERVS19GUF9OQU4pIHsKKwkJc3RyaWR4 ID0ganNfY3R4LT5zdHJpZHhfY3VzdG9tX25hbjsKKwl9IGVsc2UgaWYgKHMgPT0gMCkgeworCQlz dHJpZHggPSBqc19jdHgtPnN0cmlkeF9jdXN0b21fcG9zaW5mOworCX0gZWxzZSB7CisJCXN0cmlk eCA9IGpzX2N0eC0+c3RyaWR4X2N1c3RvbV9uZWdpbmY7CisJfQorI2Vsc2UKKwlzdHJpZHggPSBE VUtfU1RSSURYX0xDX05VTEw7CisjZW5kaWYKKwlEVUtfX0VNSVRfU1RSSURYKGpzX2N0eCwgc3Ry aWR4KTsKK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorLyogRW5jb2RlIGEgZmFz dGludCBmcm9tIGR1a190dmFsIHB0ciwgbm8gdmFsdWUgc3RhY2sgZWZmZWN0cy4gKi8KK0RVS19M T0NBTCB2b2lkIGR1a19fZW5jX2Zhc3RpbnRfdHZhbChkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgs IGR1a190dmFsICp0dikgeworCWR1a19pbnQ2NF90IHY7CisKKwkvKiBGYXN0aW50IHJhbmdlIGlz IHNpZ25lZCA0OC1iaXQgc28gbG9uZ2VzdCB2YWx1ZSBpcyAtMl40NyA9IC0xNDA3Mzc0ODgzNTUz MjgKKwkgKiAoMTYgY2hhcnMgbG9uZyksIGxvbmdlc3Qgc2lnbmVkIDY0LWJpdCB2YWx1ZSBpcyAt Ml42MyA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4CisJICogKDIwIGNoYXJzIGxvbmcpLiAgQWxsb2Mg c3BhY2UgZm9yIDY0LWJpdCByYW5nZSB0byBiZSBzYWZlLgorCSAqLworCWR1a191aW50OF90IGJ1 ZlsyMCArIDFdOworCisJLyogQ2FsbGVyIG11c3QgZW5zdXJlICd0dicgaXMgaW5kZWVkIGEgZmFz dGludCEgKi8KKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX0ZBU1RJTlQodHYpKTsKKwl2ID0gRFVL X1RWQUxfR0VUX0ZBU1RJTlQodHYpOworCisJLyogWFhYOiBUaGVyZSBhcmUgbm8gZm9ybWF0IHN0 cmluZ3MgaW4gZHVrX2NvbmZpZy5oIHlldCwgY291bGQgYWRkCisJICogb25lIGZvciBmb3JtYXR0 aW5nIGR1a19pbnQ2NF90LiAgRm9yIG5vdywgYXNzdW1lcyAiJWxsZCIgYW5kIHRoYXQKKwkgKiAi bG9uZyBsb25nIiB0eXBlIGV4aXN0cy4gIENvdWxkIGFsc28gcmVseSBvbiBDOTkgZGlyZWN0bHkg YnV0IHRoYXQKKwkgKiB3b24ndCB3b3JrIGZvciBvbGRlciBNU1ZDLgorCSAqLworCURVS19TUFJJ TlRGKChjaGFyICopIGJ1ZiwgIiVsbGQiLCAobG9uZyBsb25nKSB2KTsKKwlEVUtfX0VNSVRfQ1NU Uihqc19jdHgsIChjb25zdCBjaGFyICopIGJ1Zik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQo RFVLX1VTRV9KWCkgfHwgZGVmaW5lZChEVUtfVVNFX0pDKQorI2lmIGRlZmluZWQoRFVLX1VTRV9I RVhfRkFTVFBBVEgpCitEVUtfTE9DQUwgZHVrX3VpbnQ4X3QgKmR1a19fZW5jX2J1ZmZlcl9kYXRh X2hleChjb25zdCBkdWtfdWludDhfdCAqc3JjLCBkdWtfc2l6ZV90IHNyY19sZW4sIGR1a191aW50 OF90ICpkc3QpIHsKKwlkdWtfdWludDhfdCAqcTsKKwlkdWtfdWludDE2X3QgKnExNjsKKwlkdWtf c21hbGxfdWludF90IHg7CisJZHVrX3NpemVfdCBpLCBsZW5fc2FmZTsKKyNpZiAhZGVmaW5lZChE VUtfVVNFX1VOQUxJR05FRF9BQ0NFU1NFU19QT1NTSUJMRSkKKwlkdWtfYm9vbF90IHNoaWZ0X2Rz dDsKKyNlbmRpZgorCisJLyogVW5saWtlIGluIGR1a19oZXhfZW5jb2RlKCkgJ2RzdCcgaXMgbm90 IG5lY2Vzc2FyaWx5IGFsaWduZWQgYnkgMi4KKwkgKiBGb3IgcGxhdGZvcm1zIHdoZXJlIHVuYWxp Z25lZCBhY2Nlc3NlcyBhcmUgbm90IGFsbG93ZWQsIHNoaWZ0ICdkc3QnCisJICogYWhlYWQgYnkg MSBieXRlIHRvIGdldCBhbGlnbm1lbnQgYW5kIHRoZW4gZHVrX21lbW1vdmUoKSB0aGUgcmVzdWx0 CisJICogaW4gcGxhY2UuICBUaGUgZmFzdGVyIGVuY29kaW5nIGxvb3AgbWFrZXMgdXAgdGhlIGRp ZmZlcmVuY2UuCisJICogVGhlcmUncyBhbHdheXMgc3BhY2UgZm9yIG9uZSBleHRyYSBieXRlIGJl Y2F1c2UgYSB0ZXJtaW5hdG9yIGFsd2F5cworCSAqIGZvbGxvd3MgdGhlIGhleCBkYXRhIGFuZCB0 aGF0J3MgYmVlbiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBjYWxsZXIuCisJICovCisKKyNpZiBkZWZp bmVkKERVS19VU0VfVU5BTElHTkVEX0FDQ0VTU0VTX1BPU1NJQkxFKQorCXExNiA9IChkdWtfdWlu dDE2X3QgKikgKHZvaWQgKikgZHN0OworI2Vsc2UKKwlzaGlmdF9kc3QgPSAoZHVrX2Jvb2xfdCkg KCgoZHVrX3NpemVfdCkgZHN0KSAmIDB4MDFVKTsKKwlpZiAoc2hpZnRfZHN0KSB7CisJCURVS19E RChEVUtfRERQUklOVCgidW5hbGlnbmVkIGFjY2Vzc2VzIG5vdCBwb3NzaWJsZSwgZHN0IG5vdCBh bGlnbmVkIC0+IHN0ZXAgdG8gZHN0ICsgMSIpKTsKKwkJcTE2ID0gKGR1a191aW50MTZfdCAqKSAo dm9pZCAqKSAoZHN0ICsgMSk7CisJfSBlbHNlIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJ1bmFs aWduZWQgYWNjZXNzZXMgbm90IHBvc3NpYmxlLCBkc3QgaXMgYWxpZ25lZCIpKTsKKwkJcTE2ID0g KGR1a191aW50MTZfdCAqKSAodm9pZCAqKSBkc3Q7CisJfQorCURVS19BU1NFUlQoKCgoZHVrX3Np emVfdCkgcTE2KSAmIDB4MDFVKSA9PSAwKTsKKyNlbmRpZgorCisJbGVuX3NhZmUgPSBzcmNfbGVu ICYgfjB4MDNVOworCWZvciAoaSA9IDA7IGkgPCBsZW5fc2FmZTsgaSArPSA0KSB7CisJCXExNlsw XSA9IGR1a19oZXhfZW5jdGFiW3NyY1tpXV07CisJCXExNlsxXSA9IGR1a19oZXhfZW5jdGFiW3Ny Y1tpICsgMV1dOworCQlxMTZbMl0gPSBkdWtfaGV4X2VuY3RhYltzcmNbaSArIDJdXTsKKwkJcTE2 WzNdID0gZHVrX2hleF9lbmN0YWJbc3JjW2kgKyAzXV07CisJCXExNiArPSA0OworCX0KKwlxID0g KGR1a191aW50OF90ICopIHExNjsKKworI2lmICFkZWZpbmVkKERVS19VU0VfVU5BTElHTkVEX0FD Q0VTU0VTX1BPU1NJQkxFKQorCWlmIChzaGlmdF9kc3QpIHsKKwkJcS0tOworCQlkdWtfbWVtbW92 ZSgodm9pZCAqKSBkc3QsIChjb25zdCB2b2lkICopIChkc3QgKyAxKSwgMiAqIGxlbl9zYWZlKTsK KwkJRFVLX0FTU0VSVChkc3QgKyAyICogbGVuX3NhZmUgPT0gcSk7CisJfQorI2VuZGlmCisKKwlm b3IgKDsgaSA8IHNyY19sZW47IGkrKykgeworCQl4ID0gc3JjW2ldOworCQkqcSsrID0gZHVrX2xj X2RpZ2l0c1t4ID4+IDRdOworCQkqcSsrID0gZHVrX2xjX2RpZ2l0c1t4ICYgMHgwZl07CisJfQor CisJcmV0dXJuIHE7Cit9CisjZWxzZSAgLyogRFVLX1VTRV9IRVhfRkFTVFBBVEggKi8KK0RVS19M T0NBTCBkdWtfdWludDhfdCAqZHVrX19lbmNfYnVmZmVyX2RhdGFfaGV4KGNvbnN0IGR1a191aW50 OF90ICpzcmMsIGR1a19zaXplX3Qgc3JjX2xlbiwgZHVrX3VpbnQ4X3QgKmRzdCkgeworCWNvbnN0 IGR1a191aW50OF90ICpwOworCWNvbnN0IGR1a191aW50OF90ICpwX2VuZDsKKwlkdWtfdWludDhf dCAqcTsKKwlkdWtfc21hbGxfdWludF90IHg7CisKKwlwID0gc3JjOworCXBfZW5kID0gc3JjICsg c3JjX2xlbjsKKwlxID0gZHN0OworCXdoaWxlIChwICE9IHBfZW5kKSB7CisJCXggPSAqcCsrOwor CQkqcSsrID0gZHVrX2xjX2RpZ2l0c1t4ID4+IDRdOworCQkqcSsrID0gZHVrX2xjX2RpZ2l0c1t4 ICYgMHgwZl07CisJfQorCisJcmV0dXJuIHE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfSEVYX0ZB U1RQQVRIICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZW5jX2J1ZmZlcl9kYXRhKGR1a19qc29u X2VuY19jdHggKmpzX2N0eCwgZHVrX3VpbnQ4X3QgKmJ1Zl9kYXRhLCBkdWtfc2l6ZV90IGJ1Zl9s ZW4pIHsKKwlkdWtfaHRocmVhZCAqdGhyOworCWR1a191aW50OF90ICpxOworCWR1a19zaXplX3Qg c3BhY2U7CisKKwl0aHIgPSBqc19jdHgtPnRocjsKKworCURVS19BU1NFUlQoanNfY3R4LT5mbGFn X2V4dF9jdXN0b20gfHwganNfY3R4LT5mbGFnX2V4dF9jb21wYXRpYmxlKTsgIC8qIGNhbGxlciBj aGVja3MgKi8KKwlEVUtfQVNTRVJUKGpzX2N0eC0+ZmxhZ19leHRfY3VzdG9tX29yX2NvbXBhdGli bGUpOworCisJLyogQnVmZmVyIHZhbHVlcyBhcmUgZW5jb2RlZCBpbiAobG93ZXJjYXNlKSBoZXgg dG8gbWFrZSB0aGUKKwkgKiBiaW5hcnkgZGF0YSByZWFkYWJsZS4gIEJhc2U2NCBvciBzaW1pbGFy IHdvdWxkIGJlIG1vcmUKKwkgKiBjb21wYWN0IGJ1dCBsZXNzIHJlYWRhYmxlLCBhbmQgdGhlIHBv aW50IG9mIEpYL0pDCisJICogdmFyaWFudHMgaXMgdG8gYmUgYXMgdXNlZnVsIHRvIGEgcHJvZ3Jh bW1lciBhcyBwb3NzaWJsZS4KKwkgKi8KKworCS8qIFRoZSAjaWYgZGVmaW5lZCgpIGNsdXR0ZXIg aGVyZSBuZWVkcyB0byBoYW5kbGUgdGhlIHRocmVlCisJICogY2FzZXM6ICgxKSBKWCtKQywgKDIp IEpYIG9ubHksICgzKSBKQyBvbmx5LgorCSAqLworCisJLyogTm90ZTogc3BhY2UgbXVzdCBjYXRl ciBmb3IgYm90aCBKWCBhbmQgSkMuICovCisJc3BhY2UgPSA5ICsgYnVmX2xlbiAqIDIgKyAyOwor CURVS19BU1NFUlQoRFVLX0hCVUZGRVJfTUFYX0JZVEVMRU4gPD0gMHg3ZmZmZmZmZVVMKTsKKwlE VUtfQVNTRVJUKChzcGFjZSAtIDIpIC8gMiA+PSBidWZfbGVuKTsgIC8qIG92ZXJmbG93IG5vdCBw b3NzaWJsZSwgYnVmZmVyIGxpbWl0cyAqLworCXEgPSBEVUtfQldfRU5TVVJFX0dFVFBUUih0aHIs ICZqc19jdHgtPmJ3LCBzcGFjZSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpICYmIGRlZmlu ZWQoRFVLX1VTRV9KQykKKwlpZiAoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20pCisjZW5kaWYKKyNp ZiBkZWZpbmVkKERVS19VU0VfSlgpCisJeworCQkqcSsrID0gRFVLX0FTQ19QSVBFOworCQlxID0g ZHVrX19lbmNfYnVmZmVyX2RhdGFfaGV4KGJ1Zl9kYXRhLCBidWZfbGVuLCBxKTsKKwkJKnErKyA9 IERVS19BU0NfUElQRTsKKworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9KWCkgJiYg ZGVmaW5lZChEVUtfVVNFX0pDKQorCWVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9K QykKKwl7CisJCURVS19BU1NFUlQoanNfY3R4LT5mbGFnX2V4dF9jb21wYXRpYmxlKTsKKwkJZHVr X21lbWNweSgodm9pZCAqKSBxLCAoY29uc3Qgdm9pZCAqKSAie1wiX2J1ZlwiOlwiIiwgOSk7ICAv KiBsZW46IDkgKi8KKwkJcSArPSA5OworCQlxID0gZHVrX19lbmNfYnVmZmVyX2RhdGFfaGV4KGJ1 Zl9kYXRhLCBidWZfbGVuLCBxKTsKKwkJKnErKyA9IERVS19BU0NfRE9VQkxFUVVPVEU7CisJCSpx KysgPSBEVUtfQVNDX1JDVVJMWTsKKwl9CisjZW5kaWYKKworCURVS19CV19TRVRfUFRSKHRociwg JmpzX2N0eC0+YncsIHEpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VuY19idWZmZXJfanhf amMoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCBkdWtfaGJ1ZmZlciAqaCkgeworCWR1a19fZW5j X2J1ZmZlcl9kYXRhKGpzX2N0eCwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3VpbnQ4X3Qg KikgRFVLX0hCVUZGRVJfR0VUX0RBVEFfUFRSKGpzX2N0eC0+dGhyLT5oZWFwLCBoKSwKKwkgICAg ICAgICAgICAgICAgICAgICAoZHVrX3NpemVfdCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaCkpOwor fQorI2VuZGlmICAvKiBEVUtfVVNFX0pYIHx8IERVS19VU0VfSkMgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9KU09OX1NUUklOR0lGWV9GQVNUUEFUSCkKK0RVS19MT0NBTCB2b2lkIGR1a19fZW5j X2J1ZmZlcl9qc29uX2Zhc3RwYXRoKGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX2hidWZm ZXIgKmgpIHsKKwlkdWtfc2l6ZV90IGksIG47CisJY29uc3QgZHVrX3VpbnQ4X3QgKmJ1ZjsKKwlk dWtfdWludDhfdCAqcTsKKworCW4gPSBEVUtfSEJVRkZFUl9HRVRfU0laRShoKTsKKwlpZiAobiA9 PSAwKSB7CisJCURVS19fRU1JVF8yKGpzX2N0eCwgRFVLX0FTQ19MQ1VSTFksIERVS19BU0NfUkNV UkxZKTsKKwkJcmV0dXJuOworCX0KKworCURVS19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19MQ1VS TFkpOworCisJLyogTWF4aW11bSBlbmNvZGVkIGxlbmd0aCB3aXRoIDMyLWJpdCBpbmRleDogMSAr IDEwICsgMiArIDMgKyAxICsgMSA9IDE4LAorCSAqIHdpdGggNjQtYml0IGluZGV4OiAxICsgMjAg KyAyICsgMyArIDEgKyAxID0gMjguICAzMiBoYXMgc29tZSBzbGFjay4KKwkgKgorCSAqIE5vdGUg dGhhdCBiZWNhdXNlIHRoZSBvdXRwdXQgYnVmZmVyIGlzIHJlYWxsb2NhdGVkIGZyb20gdGltZSB0 byB0aW1lLAorCSAqIHNpZGUgZWZmZWN0cyAoc3VjaCBhcyBmaW5hbGl6ZXJzKSBhZmZlY3Rpbmcg dGhlIGJ1ZmZlciAnaCcgbXVzdCBiZQorCSAqIGRpc2FibGVkLiAgVGhpcyBpcyB0aGUgY2FzZSBp biB0aGUgSlNPTi5zdHJpbmdpZnkoKSBmYXN0IHBhdGguCisJICovCisKKwlidWYgPSAoY29uc3Qg ZHVrX3VpbnQ4X3QgKikgRFVLX0hCVUZGRVJfR0VUX0RBVEFfUFRSKGpzX2N0eC0+dGhyLT5oZWFw LCBoKTsKKwlpZiAoRFVLX1VOTElLRUxZKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCkpIHsKKwkJZm9y IChpID0gMDsgaSA8IG47IGkrKykgeworCQkJZHVrX19lbmNfbmV3bGluZV9pbmRlbnQoanNfY3R4 LCBqc19jdHgtPnJlY3Vyc2lvbl9kZXB0aCArIDEpOworCQkJcSA9IERVS19CV19FTlNVUkVfR0VU UFRSKGpzX2N0eC0+dGhyLCAmanNfY3R4LT5idywgMzIpOworCQkJcSArPSBEVUtfU1BSSU5URigo Y2hhciAqKSBxLCAiXCIlbHVcIjogJXUsIiwgKHVuc2lnbmVkIGxvbmcpIGksICh1bnNpZ25lZCBp bnQpIGJ1ZltpXSk7CisJCQlEVUtfQldfU0VUX1BUUihqc19jdHgtPnRociwgJmpzX2N0eC0+Yncs IHEpOworCQl9CisJfSBlbHNlIHsKKwkJcSA9IERVS19CV19HRVRfUFRSKGpzX2N0eC0+dGhyLCAm anNfY3R4LT5idyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXEgPSBEVUtfQldf RU5TVVJFX1JBVyhqc19jdHgtPnRociwgJmpzX2N0eC0+YncsIDMyLCBxKTsKKwkJCXEgKz0gRFVL X1NQUklOVEYoKGNoYXIgKikgcSwgIlwiJWx1XCI6JXUsIiwgKHVuc2lnbmVkIGxvbmcpIGksICh1 bnNpZ25lZCBpbnQpIGJ1ZltpXSk7CisJCX0KKwkJRFVLX0JXX1NFVF9QVFIoanNfY3R4LT50aHIs ICZqc19jdHgtPmJ3LCBxKTsKKwl9CisJRFVLX19VTkVNSVRfMShqc19jdHgpOyAgLyogZWF0IHRy YWlsaW5nIGNvbW1hICovCisKKwlpZiAoRFVLX1VOTElLRUxZKGpzX2N0eC0+aF9nYXAgIT0gTlVM TCkpIHsKKwkJZHVrX19lbmNfbmV3bGluZV9pbmRlbnQoanNfY3R4LCBqc19jdHgtPnJlY3Vyc2lv bl9kZXB0aCk7CisJfQorCURVS19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19SQ1VSTFkpOworfQor I2VuZGlmICAvKiBEVUtfVVNFX0pTT05fU1RSSU5HSUZZX0ZBU1RQQVRIICovCisKKyNpZiBkZWZp bmVkKERVS19VU0VfSlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykKK0RVS19MT0NBTCB2b2lkIGR1 a19fZW5jX3BvaW50ZXIoZHVrX2pzb25fZW5jX2N0eCAqanNfY3R4LCB2b2lkICpwdHIpIHsKKwlj aGFyIGJ1Zls2NF07ICAvKiBYWFg6IGhvdyB0byBmaWd1cmUgY29ycmVjdCBzaXplPyAqLworCWNv bnN0IGNoYXIgKmZtdDsKKworCURVS19BU1NFUlQoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20gfHwg anNfY3R4LT5mbGFnX2V4dF9jb21wYXRpYmxlKTsgIC8qIGNhbGxlciBjaGVja3MgKi8KKwlEVUtf QVNTRVJUKGpzX2N0eC0+ZmxhZ19leHRfY3VzdG9tX29yX2NvbXBhdGlibGUpOworCisJZHVrX21l bXplcm8oYnVmLCBzaXplb2YoYnVmKSk7CisKKwkvKiBUaGUgI2lmIGRlZmluZWQoKSBjbHV0dGVy IGhlcmUgbmVlZHMgdG8gaGFuZGxlIHRoZSB0aHJlZQorCSAqIGNhc2VzOiAoMSkgSlgrSkMsICgy KSBKWCBvbmx5LCAoMykgSkMgb25seS4KKwkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpICYm IGRlZmluZWQoRFVLX1VTRV9KQykKKwlpZiAoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20pCisjZW5k aWYKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpCisJeworCQlmbXQgPSBwdHIgPyAiKCVwKSIgOiAi KG51bGwpIjsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpICYmIGRlZmluZWQo RFVLX1VTRV9KQykKKwllbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfSkMpCisJewor CQlEVUtfQVNTRVJUKGpzX2N0eC0+ZmxhZ19leHRfY29tcGF0aWJsZSk7CisJCWZtdCA9IHB0ciA/ ICJ7XCJfcHRyXCI6XCIlcFwifSIgOiAie1wiX3B0clwiOlwibnVsbFwifSI7CisJfQorI2VuZGlm CisKKwkvKiBXaGVuIHB0ciA9PSBOVUxMLCB0aGUgZm9ybWF0IGFyZ3VtZW50IGlzIHVudXNlZC4g Ki8KKwlEVUtfU05QUklOVEYoYnVmLCBzaXplb2YoYnVmKSAtIDEsIGZtdCwgcHRyKTsgIC8qIG11 c3Qgbm90IHRydW5jYXRlICovCisJRFVLX19FTUlUX0NTVFIoanNfY3R4LCBidWYpOworfQorI2Vu ZGlmICAvKiBEVUtfVVNFX0pYIHx8IERVS19VU0VfSkMgKi8KKworI2lmIGRlZmluZWQoRFVLX1VT RV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmlu ZWQoRFVLX1VTRV9KQykKK0RVS19MT0NBTCB2b2lkIGR1a19fZW5jX2J1Zm9iaihkdWtfanNvbl9l bmNfY3R4ICpqc19jdHgsIGR1a19oYnVmb2JqICpoX2J1Zm9iaikgeworCURVS19BU1NFUlRfSEJV Rk9CSl9WQUxJRChoX2J1Zm9iaik7CisKKwlpZiAoaF9idWZvYmotPmJ1ZiA9PSBOVUxMIHx8ICFE VUtfSEJVRk9CSl9WQUxJRF9TTElDRShoX2J1Zm9iaikpIHsKKwkJRFVLX19FTUlUX1NUUklEWChq c19jdHgsIERVS19TVFJJRFhfTENfTlVMTCk7CisJfSBlbHNlIHsKKwkJLyogSGFuZGxlIGJvdGgg ZnVsbCBhbmQgcGFydGlhbCBzbGljZSAoYXMgbG9uZyBhcyBjb3ZlcmVkKS4gKi8KKwkJZHVrX19l bmNfYnVmZmVyX2RhdGEoanNfY3R4LAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3VpbnQ4 X3QgKikgRFVLX0hCVUZPQkpfR0VUX1NMSUNFX0JBU0UoanNfY3R4LT50aHItPmhlYXAsIGhfYnVm b2JqKSwKKwkJICAgICAgICAgICAgICAgICAgICAgKGR1a19zaXplX3QpIGhfYnVmb2JqLT5sZW5n dGgpOworCX0KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9KWCB8fCBEVUtfVVNFX0pDICovCisjZW5k aWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworLyogSW5kZW50IGhlbHBl ci4gIENhbGxpbmcgY29kZSByZWxpZXMgb24ganNfY3R4LT5yZWN1cnNpb25fZGVwdGggYWxzbyBi ZWluZworICogZGlyZWN0bHkgcmVsYXRlZCB0byBpbmRlbnQgZGVwdGguCisgKi8KKyNpZiBkZWZp bmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VuY19uZXdsaW5l X2luZGVudChkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgsIGR1a191aW50X3QgZGVwdGgpIHsKKwlE VUtfQVNTRVJUKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSFNUUklO R19HRVRfQllURUxFTihqc19jdHgtPmhfZ2FwKSA+IDApOyAgLyogY2FsbGVyIGd1YXJhbnRlZXMg Ki8KKworCURVS19fRU1JVF8xKGpzX2N0eCwgMHgwYSk7CisJd2hpbGUgKGRlcHRoLS0gPiAwKSB7 CisJCURVS19fRU1JVF9IU1RSKGpzX2N0eCwganNfY3R4LT5oX2dhcCk7CisJfQorfQorI2Vsc2Ug IC8qIERVS19VU0VfUFJFRkVSX1NJWkUgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fZW5jX25ld2xp bmVfaW5kZW50KGR1a19qc29uX2VuY19jdHggKmpzX2N0eCwgZHVrX3VpbnRfdCBkZXB0aCkgewor CWNvbnN0IGR1a191aW50OF90ICpnYXBfZGF0YTsKKwlkdWtfc2l6ZV90IGdhcF9sZW47CisJZHVr X3NpemVfdCBhdmFpbF9ieXRlczsgICAvKiBieXRlcyBvZiBpbmRlbnQgYXZhaWxhYmxlIGZvciBj b3B5aW5nICovCisJZHVrX3NpemVfdCBuZWVkX2J5dGVzOyAgICAvKiBieXRlcyBvZiBpbmRlbnQg c3RpbGwgbmVlZGVkICovCisJZHVrX3VpbnQ4X3QgKnBfc3RhcnQ7CisJZHVrX3VpbnQ4X3QgKnA7 CisKKwlEVUtfQVNTRVJUKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtf SFNUUklOR19HRVRfQllURUxFTihqc19jdHgtPmhfZ2FwKSA+IDApOyAgLyogY2FsbGVyIGd1YXJh bnRlZXMgKi8KKworCURVS19fRU1JVF8xKGpzX2N0eCwgMHgwYSk7CisJaWYgKERVS19VTkxJS0VM WShkZXB0aCA9PSAwKSkgeworCQlyZXR1cm47CisJfQorCisJLyogVG8gaGFuZGxlIGRlZXBlciBp bmRlbnRzIGVmZmljaWVudGx5LCBtYWtlIHVzZSBvZiBjb3BpZXMgd2UndmUKKwkgKiBhbHJlYWR5 IGVtaXR0ZWQuICBJbiBlZmZlY3Qgd2UgY2FuIGVtaXQgYSBzZXF1ZW5jZSBvZiAxLCAyLCA0LAor CSAqIDgsIGV0YyBjb3BpZXMsIGFuZCB0aGVuIGZpbmlzaCB0aGUgbGFzdCBydW4uICBCeXRlIGNv dW50ZXJzCisJICogYXZvaWQgbXVsdGlwbHkgd2l0aCBnYXBfbGVuIG9uIGV2ZXJ5IGxvb3AuCisJ ICovCisKKwlnYXBfZGF0YSA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNUUklOR19HRVRf REFUQShqc19jdHgtPmhfZ2FwKTsKKwlnYXBfbGVuID0gKGR1a19zaXplX3QpIERVS19IU1RSSU5H X0dFVF9CWVRFTEVOKGpzX2N0eC0+aF9nYXApOworCURVS19BU1NFUlQoZ2FwX2xlbiA+IDApOwor CisJbmVlZF9ieXRlcyA9IGdhcF9sZW4gKiBkZXB0aDsKKwlwID0gRFVLX0JXX0VOU1VSRV9HRVRQ VFIoanNfY3R4LT50aHIsICZqc19jdHgtPmJ3LCBuZWVkX2J5dGVzKTsKKwlwX3N0YXJ0ID0gcDsK KworCWR1a19tZW1jcHkoKHZvaWQgKikgcCwgKGNvbnN0IHZvaWQgKikgZ2FwX2RhdGEsIChzaXpl X3QpIGdhcF9sZW4pOworCXAgKz0gZ2FwX2xlbjsKKwlhdmFpbF9ieXRlcyA9IGdhcF9sZW47CisJ RFVLX0FTU0VSVChuZWVkX2J5dGVzID49IGdhcF9sZW4pOworCW5lZWRfYnl0ZXMgLT0gZ2FwX2xl bjsKKworCXdoaWxlIChuZWVkX2J5dGVzID49IGF2YWlsX2J5dGVzKSB7CisJCWR1a19tZW1jcHko KHZvaWQgKikgcCwgKGNvbnN0IHZvaWQgKikgcF9zdGFydCwgKHNpemVfdCkgYXZhaWxfYnl0ZXMp OworCQlwICs9IGF2YWlsX2J5dGVzOworCQluZWVkX2J5dGVzIC09IGF2YWlsX2J5dGVzOworCQlh dmFpbF9ieXRlcyA8PD0gMTsKKwl9CisKKwlEVUtfQVNTRVJUKG5lZWRfYnl0ZXMgPCBhdmFpbF9i eXRlcyk7ICAvKiBuZWVkX2J5dGVzIG1heSBiZSB6ZXJvICovCisJZHVrX21lbWNweSgodm9pZCAq KSBwLCAoY29uc3Qgdm9pZCAqKSBwX3N0YXJ0LCAoc2l6ZV90KSBuZWVkX2J5dGVzKTsKKwlwICs9 IG5lZWRfYnl0ZXM7CisJLyphdmFpbF9ieXRlcyArPSBuZWVkX2J5dGVzKi8KKworCURVS19CV19T RVRfUFRSKGpzX2N0eC0+dGhyLCAmanNfY3R4LT5idywgcCk7Cit9CisjZW5kaWYgIC8qIERVS19V U0VfUFJFRkVSX1NJWkUgKi8KKworLyogU2hhcmVkIGVudHJ5IGhhbmRsaW5nIGZvciBvYmplY3Qv YXJyYXkgc2VyaWFsaXphdGlvbi4gKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fZW5jX29iamFycl9l bnRyeShkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgsIGR1a19pZHhfdCAqZW50cnlfdG9wKSB7CisJ ZHVrX2h0aHJlYWQgKnRociA9IGpzX2N0eC0+dGhyOworCWR1a19ob2JqZWN0ICpoX3RhcmdldDsK KwlkdWtfdWludF9mYXN0MzJfdCBpLCBuOworCisJKmVudHJ5X3RvcCA9IGR1a19nZXRfdG9wKHRo cik7CisKKwlkdWtfcmVxdWlyZV9zdGFjayh0aHIsIERVS19KU09OX0VOQ19SRVFTVEFDSyk7CisK KwkvKiBMb29wIGNoZWNrIHVzaW5nIGEgaHlicmlkIGFwcHJvYWNoOiBhIGZpeGVkLXNpemUgdmlz aXRlZFtdIGFycmF5CisJICogd2l0aCBvdmVyZmxvdyBpbiBhIGxvb3AgY2hlY2sgb2JqZWN0Lgor CSAqLworCisJaF90YXJnZXQgPSBkdWtfa25vd25faG9iamVjdCh0aHIsIC0xKTsgIC8qIG9iamVj dCBvciBhcnJheSAqLworCisJbiA9IGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoOworCWlmIChEVUtf VU5MSUtFTFkobiA+IERVS19KU09OX0VOQ19MT09QQVJSQVkpKSB7CisJCW4gPSBEVUtfSlNPTl9F TkNfTE9PUEFSUkFZOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChEVUtf VU5MSUtFTFkoanNfY3R4LT52aXNpdGluZ1tpXSA9PSBoX3RhcmdldCkpIHsKKwkJCURVS19ERChE VUtfRERQUklOVCgic2xvdyBwYXRoIGxvb3AgZGV0ZWN0IikpOworCQkJRFVLX0VSUk9SX1RZUEUo dGhyLCBEVUtfU1RSX0NZQ0xJQ19JTlBVVCk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7 CisJCX0KKwl9CisJaWYgKGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoIDwgRFVLX0pTT05fRU5DX0xP T1BBUlJBWSkgeworCQlqc19jdHgtPnZpc2l0aW5nW2pzX2N0eC0+cmVjdXJzaW9uX2RlcHRoXSA9 IGhfdGFyZ2V0OworCX0gZWxzZSB7CisJCWR1a19wdXNoX3NwcmludGYodGhyLCBEVUtfU1RSX0ZN VF9QVFIsICh2b2lkICopIGhfdGFyZ2V0KTsKKwkJZHVrX2R1cF90b3AodGhyKTsgIC8qIC0+IFsg Li4uIHZvaWRwIHZvaWRwIF0gKi8KKwkJaWYgKGR1a19oYXNfcHJvcCh0aHIsIGpzX2N0eC0+aWR4 X2xvb3ApKSB7CisJCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfQ1lDTElDX0lOUFVUKTsK KwkJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwkJfQorCQlkdWtfcHVzaF90cnVlKHRocik7 ICAvKiAtPiBbIC4uLiB2b2lkcCB0cnVlIF0gKi8KKwkJZHVrX3B1dF9wcm9wKHRociwganNfY3R4 LT5pZHhfbG9vcCk7ICAvKiAtPiBbIC4uLiBdICovCisJfQorCisJLyogQyByZWN1cnNpb24gY2hl Y2suICovCisKKwlEVUtfQVNTRVJUX0RJU0FCTEUoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0g MCk7ICAvKiB1bnNpZ25lZCAqLworCURVS19BU1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGgg PD0ganNfY3R4LT5yZWN1cnNpb25fbGltaXQpOworCWlmIChqc19jdHgtPnJlY3Vyc2lvbl9kZXB0 aCA+PSBqc19jdHgtPnJlY3Vyc2lvbl9saW1pdCkgeworCQlEVUtfRVJST1JfUkFOR0UodGhyLCBE VUtfU1RSX0pTT05FTkNfUkVDTElNSVQpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJ fQorCWpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoKys7CisKKwlEVUtfREREKERVS19ERERQUklOVCgi c2hhcmVkIGVudHJ5IGZpbmlzaGVkOiB0b3A9JWxkLCBsb29wPSUhVCIsCisJICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIGR1a19nZXRfdG9wKHRociksIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2 YWwodGhyLCBqc19jdHgtPmlkeF9sb29wKSkpOworfQorCisvKiBTaGFyZWQgZXhpdCBoYW5kbGlu ZyBmb3Igb2JqZWN0L2FycmF5IHNlcmlhbGl6YXRpb24uICovCitEVUtfTE9DQUwgdm9pZCBkdWtf X2VuY19vYmphcnJfZXhpdChkdWtfanNvbl9lbmNfY3R4ICpqc19jdHgsIGR1a19pZHhfdCAqZW50 cnlfdG9wKSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGpzX2N0eC0+dGhyOworCWR1a19ob2JqZWN0 ICpoX3RhcmdldDsKKworCS8qIEMgcmVjdXJzaW9uIGNoZWNrLiAqLworCisJRFVLX0FTU0VSVChq c19jdHgtPnJlY3Vyc2lvbl9kZXB0aCA+IDApOworCURVS19BU1NFUlQoanNfY3R4LT5yZWN1cnNp b25fZGVwdGggPD0ganNfY3R4LT5yZWN1cnNpb25fbGltaXQpOworCWpzX2N0eC0+cmVjdXJzaW9u X2RlcHRoLS07CisKKwkvKiBMb29wIGNoZWNrLiAqLworCisJaF90YXJnZXQgPSBkdWtfa25vd25f aG9iamVjdCh0aHIsICplbnRyeV90b3AgLSAxKTsgIC8qIG9yaWdpbmFsIHRhcmdldCBhdCBlbnRy eV90b3AgLSAxICovCisKKwlpZiAoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPCBEVUtfSlNPTl9F TkNfTE9PUEFSUkFZKSB7CisJCS8qIFByZXZpb3VzIGVudHJ5IHdhcyBpbnNpZGUgdmlzaXRlZFtd LCBub3RoaW5nIHRvIGRvLiAqLworCX0gZWxzZSB7CisJCWR1a19wdXNoX3NwcmludGYodGhyLCBE VUtfU1RSX0ZNVF9QVFIsICh2b2lkICopIGhfdGFyZ2V0KTsKKwkJZHVrX2RlbF9wcm9wKHRociwg anNfY3R4LT5pZHhfbG9vcCk7ICAvKiAtPiBbIC4uLiBdICovCisJfQorCisJLyogUmVzdG9yZSBz dGFjayB0b3AgYWZ0ZXIgdW5iYWxhbmNlZCBjb2RlIHBhdGhzLiAqLworCWR1a19zZXRfdG9wKHRo ciwgKmVudHJ5X3RvcCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgic2hhcmVkIGVudHJ5IGZp bmlzaGVkOiB0b3A9JWxkLCBsb29wPSUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IGR1a19nZXRfdG9wKHRociksIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCBqc19jdHgt PmlkeF9sb29wKSkpOworfQorCisvKiBUaGUgSk8odmFsdWUpIG9wZXJhdGlvbjogZW5jb2RlIG9i amVjdC4KKyAqCisgKiBTdGFjayBwb2xpY3k6IFsgb2JqZWN0IF0gLT4gWyBvYmplY3QgXS4KKyAq LworRFVLX0xPQ0FMIHZvaWQgZHVrX19lbmNfb2JqZWN0KGR1a19qc29uX2VuY19jdHggKmpzX2N0 eCkgeworCWR1a19odGhyZWFkICp0aHIgPSBqc19jdHgtPnRocjsKKwlkdWtfaHN0cmluZyAqaF9r ZXk7CisJZHVrX2lkeF90IGVudHJ5X3RvcDsKKwlkdWtfaWR4X3QgaWR4X29iajsKKwlkdWtfaWR4 X3QgaWR4X2tleXM7CisJZHVrX2Jvb2xfdCBlbWl0dGVkOworCWR1a191YXJyaWR4X3QgYXJyX2xl biwgaTsKKwlkdWtfc2l6ZV90IHByZXZfc2l6ZTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJk dWtfX2VuY19vYmplY3Q6IG9iaj0lIVQiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwg LTEpKSk7CisKKwlkdWtfX2VuY19vYmphcnJfZW50cnkoanNfY3R4LCAmZW50cnlfdG9wKTsKKwor CWlkeF9vYmogPSBlbnRyeV90b3AgLSAxOworCisJaWYgKGpzX2N0eC0+aWR4X3Byb3BsaXN0ID49 IDApIHsKKwkJaWR4X2tleXMgPSBqc19jdHgtPmlkeF9wcm9wbGlzdDsKKwl9IGVsc2UgeworCQkv KiBYWFg6IHdvdWxkIGJlIG5pY2UgdG8gZW51bWVyYXRlIGFuIG9iamVjdCBhdCBzcGVjaWZpZWQg aW5kZXggKi8KKwkJZHVrX2R1cCh0aHIsIGlkeF9vYmopOworCQkodm9pZCkgZHVrX2hvYmplY3Rf Z2V0X2VudW1lcmF0ZWRfa2V5cyh0aHIsIERVS19FTlVNX09XTl9QUk9QRVJUSUVTX09OTFkgLypm bGFncyovKTsgIC8qIFsgLi4uIHRhcmdldCBdIC0+IFsgLi4uIHRhcmdldCBrZXlzIF0gKi8KKwkJ aWR4X2tleXMgPSBkdWtfcmVxdWlyZV9ub3JtYWxpemVfaW5kZXgodGhyLCAtMSk7CisJCS8qIGxl YXZlIHN0YWNrIHVuYmFsYW5jZWQgb24gcHVycG9zZSAqLworCX0KKworCURVS19EREQoRFVLX0RE RFBSSU5UKCJpZHhfa2V5cz0lbGQsIGhfa2V5cz0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSBpZHhfa2V5cywgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlkeF9rZXlz KSkpOworCisJLyogU3RlcHMgOC0xMCBoYXZlIGJlZW4gbWVyZ2VkIHRvIGF2b2lkIGEgInBhcnRp YWwiIHZhcmlhYmxlLiAqLworCisJRFVLX19FTUlUXzEoanNfY3R4LCBEVUtfQVNDX0xDVVJMWSk7 CisKKwkvKiBYWFg6IGtleXMgaXMgYW4gaW50ZXJuYWwgb2JqZWN0IHdpdGggYWxsIGtleXMgdG8g YmUgcHJvY2Vzc2VkCisJICogaW4gaXRzIChnYXBsZXNzKSBhcnJheSBwYXJ0LiAgQmVjYXVzZSBu b2JvZHkgY2FuIHRvdWNoIHRoZSBrZXlzCisJICogb2JqZWN0LCB3ZSBjb3VsZCBpdGVyYXRlIGl0 cyBhcnJheSBwYXJ0IGRpcmVjdGx5IChrZWVwaW5nIGluIG1pbmQKKwkgKiB0aGF0IGl0IGNhbiBi ZSByZWFsbG9jYXRlZCkuCisJICovCisKKwlhcnJfbGVuID0gKGR1a191YXJyaWR4X3QpIGR1a19n ZXRfbGVuZ3RoKHRociwgaWR4X2tleXMpOworCWVtaXR0ZWQgPSAwOworCWZvciAoaSA9IDA7IGkg PCBhcnJfbGVuOyBpKyspIHsKKwkJZHVrX2dldF9wcm9wX2luZGV4KHRociwgaWR4X2tleXMsIGkp OyAgLyogLT4gWyAuLi4ga2V5IF0gKi8KKworCQlEVUtfREREKERVS19ERERQUklOVCgib2JqZWN0 IHByb3BlcnR5IGxvb3A6IGhvbGRlcj0lIVQsIGtleT0lIVQiLAorCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgaWR4X29iaiksCisJCSAgICAgICAg ICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCQlo X2tleSA9IGR1a19rbm93bl9oc3RyaW5nKHRociwgLTEpOworCQlEVUtfQVNTRVJUKGhfa2V5ICE9 IE5VTEwpOworCQlEVUtfQVNTRVJUKCFEVUtfSFNUUklOR19IQVNfU1lNQk9MKGhfa2V5KSk7ICAv KiBwcm9wbGlzdCBmaWx0ZXJpbmc7IGVudW0gb3B0aW9ucyAqLworCisJCXByZXZfc2l6ZSA9IERV S19CV19HRVRfU0laRShqc19jdHgtPnRociwgJmpzX2N0eC0+YncpOworCQlpZiAoRFVLX1VOTElL RUxZKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCkpIHsKKwkJCWR1a19fZW5jX25ld2xpbmVfaW5kZW50 KGpzX2N0eCwganNfY3R4LT5yZWN1cnNpb25fZGVwdGgpOworCQkJZHVrX19lbmNfa2V5X2F1dG9x dW90ZShqc19jdHgsIGhfa2V5KTsKKwkJCURVS19fRU1JVF8yKGpzX2N0eCwgRFVLX0FTQ19DT0xP TiwgRFVLX0FTQ19TUEFDRSk7CisJCX0gZWxzZSB7CisJCQlkdWtfX2VuY19rZXlfYXV0b3F1b3Rl KGpzX2N0eCwgaF9rZXkpOworCQkJRFVLX19FTUlUXzEoanNfY3R4LCBEVUtfQVNDX0NPTE9OKTsK KwkJfQorCisJCS8qIFsgLi4uIGtleSBdICovCisKKwkJaWYgKERVS19VTkxJS0VMWShkdWtfX2Vu Y192YWx1ZShqc19jdHgsIGlkeF9vYmopID09IDApKSB7CisJCQkvKiBWYWx1ZSB3b3VsZCB5aWVs ZCAndW5kZWZpbmVkJywgc28gc2tpcCBrZXkgYWx0b2dldGhlci4KKwkJCSAqIFNpZGUgZWZmZWN0 cyBoYXZlIGFscmVhZHkgaGFwcGVuZWQuCisJCQkgKi8KKwkJCURVS19CV19TRVRfU0laRShqc19j dHgtPnRociwgJmpzX2N0eC0+YncsIHByZXZfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlEVUtfX0VN SVRfMShqc19jdHgsIERVS19BU0NfQ09NTUEpOworCQkJZW1pdHRlZCA9IDE7CisJCX0KKworCQkv KiBbIC4uLiBdICovCisJfQorCisJaWYgKGVtaXR0ZWQpIHsKKwkJRFVLX0FTU0VSVCgqKChkdWtf dWludDhfdCAqKSBEVUtfQldfR0VUX1BUUihqc19jdHgtPnRociwgJmpzX2N0eC0+YncpIC0gMSkg PT0gRFVLX0FTQ19DT01NQSk7CisJCURVS19fVU5FTUlUXzEoanNfY3R4KTsgIC8qIGVhdCB0cmFp bGluZyBjb21tYSAqLworCQlpZiAoRFVLX1VOTElLRUxZKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCkp IHsKKwkJCURVS19BU1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0gMSk7CisJCQlkdWtf X2VuY19uZXdsaW5lX2luZGVudChqc19jdHgsIGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoIC0gMVUp OworCQl9CisJfQorCURVS19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19SQ1VSTFkpOworCisJZHVr X19lbmNfb2JqYXJyX2V4aXQoanNfY3R4LCAmZW50cnlfdG9wKTsKKworCURVS19BU1NFUlRfVE9Q KHRociwgZW50cnlfdG9wKTsKK30KKworLyogVGhlIEpBKHZhbHVlKSBvcGVyYXRpb246IGVuY29k ZSBhcnJheS4KKyAqCisgKiBTdGFjayBwb2xpY3k6IFsgYXJyYXkgXSAtPiBbIGFycmF5IF0uCisg Ki8KK0RVS19MT0NBTCB2b2lkIGR1a19fZW5jX2FycmF5KGR1a19qc29uX2VuY19jdHggKmpzX2N0 eCkgeworCWR1a19odGhyZWFkICp0aHIgPSBqc19jdHgtPnRocjsKKwlkdWtfaWR4X3QgZW50cnlf dG9wOworCWR1a19pZHhfdCBpZHhfYXJyOworCWR1a19ib29sX3QgZW1pdHRlZDsKKwlkdWtfdWFy cmlkeF90IGksIGFycl9sZW47CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19lbmNfYXJy YXk6IGFycmF5PSUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19n ZXRfdHZhbCh0aHIsIC0xKSkpOworCisJZHVrX19lbmNfb2JqYXJyX2VudHJ5KGpzX2N0eCwgJmVu dHJ5X3RvcCk7CisKKwlpZHhfYXJyID0gZW50cnlfdG9wIC0gMTsKKworCS8qIFN0ZXBzIDgtMTAg aGF2ZSBiZWVuIG1lcmdlZCB0byBhdm9pZCBhICJwYXJ0aWFsIiB2YXJpYWJsZS4gKi8KKworCURV S19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19MQlJBQ0tFVCk7CisKKwlhcnJfbGVuID0gKGR1a191 YXJyaWR4X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgaWR4X2Fycik7CisJZW1pdHRlZCA9IDA7CisJ Zm9yIChpID0gMDsgaSA8IGFycl9sZW47IGkrKykgeworCQlEVUtfREREKERVS19ERERQUklOVCgi YXJyYXkgZW50cnkgbG9vcDogYXJyYXk9JSFULCBpbmRleD0lbGQsIGFycl9sZW49JWxkIiwKKwkJ ICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlkeF9h cnIpLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcpIGFycl9sZW4pKTsK KworCQlpZiAoRFVLX1VOTElLRUxZKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCkpIHsKKwkJCURVS19B U1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0gMSk7CisJCQlkdWtfX2VuY19uZXdsaW5l X2luZGVudChqc19jdHgsIGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoKTsKKwkJfQorCisJCSh2b2lk KSBkdWtfcHVzaF91aW50X3RvX2hzdHJpbmcodGhyLCAoZHVrX3VpbnRfdCkgaSk7ICAvKiAtPiBb IC4uLiBrZXkgXSAqLworCisJCS8qIFsgLi4uIGtleSBdICovCisKKwkJaWYgKERVS19VTkxJS0VM WShkdWtfX2VuY192YWx1ZShqc19jdHgsIGlkeF9hcnIpID09IDApKSB7CisJCQkvKiBWYWx1ZSB3 b3VsZCBub3JtYWxseSBiZSBvbWl0dGVkLCByZXBsYWNlIHdpdGggJ251bGwnLiAqLworCQkJRFVL X19FTUlUX1NUUklEWChqc19jdHgsIERVS19TVFJJRFhfTENfTlVMTCk7CisJCX0gZWxzZSB7CisJ CQk7CisJCX0KKworCQkvKiBbIC4uLiBdICovCisKKwkJRFVLX19FTUlUXzEoanNfY3R4LCBEVUtf QVNDX0NPTU1BKTsKKwkJZW1pdHRlZCA9IDE7CisJfQorCisJaWYgKGVtaXR0ZWQpIHsKKwkJRFVL X0FTU0VSVCgqKChkdWtfdWludDhfdCAqKSBEVUtfQldfR0VUX1BUUihqc19jdHgtPnRociwgJmpz X2N0eC0+YncpIC0gMSkgPT0gRFVLX0FTQ19DT01NQSk7CisJCURVS19fVU5FTUlUXzEoanNfY3R4 KTsgIC8qIGVhdCB0cmFpbGluZyBjb21tYSAqLworCQlpZiAoRFVLX1VOTElLRUxZKGpzX2N0eC0+ aF9nYXAgIT0gTlVMTCkpIHsKKwkJCURVS19BU1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGgg Pj0gMSk7CisJCQlkdWtfX2VuY19uZXdsaW5lX2luZGVudChqc19jdHgsIGpzX2N0eC0+cmVjdXJz aW9uX2RlcHRoIC0gMVUpOworCQl9CisJfQorCURVS19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19S QlJBQ0tFVCk7CisKKwlkdWtfX2VuY19vYmphcnJfZXhpdChqc19jdHgsICZlbnRyeV90b3ApOwor CisJRFVLX0FTU0VSVF9UT1AodGhyLCBlbnRyeV90b3ApOworfQorCisvKiBUaGUgU3RyKGtleSwg aG9sZGVyKSBvcGVyYXRpb24uCisgKgorICogU3RhY2sgcG9saWN5OiBbIC4uLiBrZXkgXSAtPiBb IC4uLiBdCisgKi8KK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fZW5jX3ZhbHVlKGR1a19qc29u X2VuY19jdHggKmpzX2N0eCwgZHVrX2lkeF90IGlkeF9ob2xkZXIpIHsKKwlkdWtfaHRocmVhZCAq dGhyID0ganNfY3R4LT50aHI7CisJZHVrX3R2YWwgKnR2OworCWR1a190dmFsICp0dl9ob2xkZXI7 CisJZHVrX3R2YWwgKnR2X2tleTsKKwlkdWtfc21hbGxfaW50X3QgYzsKKworCURVS19EREQoRFVL X0RERFBSSU5UKCJkdWtfX2VuY192YWx1ZTogaWR4X2hvbGRlcj0lbGQsIGhvbGRlcj0lIVQsIGtl eT0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpZHhfaG9sZGVyLCAoZHVrX3R2 YWwgKikgZHVrX2dldF90dmFsKHRociwgaWR4X2hvbGRlciksCisJICAgICAgICAgICAgICAgICAg ICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCisJdHZfaG9sZGVyID0g RFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIGlkeF9ob2xkZXIpOworCURVS19BU1NFUlQoRFVLX1RW QUxfSVNfT0JKRUNUKHR2X2hvbGRlcikpOworCXR2X2tleSA9IERVS19HRVRfVFZBTF9ORUdJRFgo dGhyLCAtMSk7CisJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19TVFJJTkcodHZfa2V5KSk7CisJRFVL X0FTU0VSVCghRFVLX0hTVFJJTkdfSEFTX1NZTUJPTChEVUtfVFZBTF9HRVRfU1RSSU5HKHR2X2tl eSkpKTsgIC8qIENhbGxlciByZXNwb25zaWJsZS4gKi8KKwkodm9pZCkgZHVrX2hvYmplY3RfZ2V0 cHJvcCh0aHIsIHR2X2hvbGRlciwgdHZfa2V5KTsKKworCS8qIC0+IFsgLi4uIGtleSB2YWwgXSAq LworCisJRFVLX0RERChEVUtfREREUFJJTlQoInZhbHVlPSUhVCIsIChkdWtfdHZhbCAqKSBkdWtf Z2V0X3R2YWwodGhyLCAtMSkpKTsKKworCS8qIFN0YW5kYXJkIEpTT04gY2hlY2tzIGZvciAudG9K U09OKCkgb25seSBmb3IgYWN0dWFsIG9iamVjdHM7IGZvcgorCSAqIGV4YW1wbGUsIHNldHRpbmcg TnVtYmVyLnByb3RvdHlwZS50b0pTT04gYW5kIHRoZW4gc2VyaWFsaXppbmcgYQorCSAqIG51bWJl ciB3b24ndCBpbnZva2UgdGhlIC50b0pTT04oKSBtZXRob2QuICBIb3dldmVyLCBsaWdodGZ1bmNz IGFuZAorCSAqIHBsYWluIGJ1ZmZlcnMgbWltaWMgb2JqZWN0cyBzbyB3ZSBjaGVjayBmb3IgdGhl aXIgLnRvSlNPTigpIG1ldGhvZC4KKwkgKi8KKwlpZiAoZHVrX2NoZWNrX3R5cGVfbWFzayh0aHIs IC0xLCBEVUtfVFlQRV9NQVNLX09CSkVDVCB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX1RZUEVfTUFTS19MSUdIVEZVTkMgfAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19UWVBFX01BU0tfQlVGRkVSKSkgeworCQlkdWtfZ2V0X3Byb3Bfc3RyaWR4 X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhfVE9fSlNPTik7CisJCWlmIChkdWtfaXNfY2FsbGFi bGUodGhyLCAtMSkpIHsgIC8qIHRvSlNPTigpIGNhbiBhbHNvIGJlIGEgbGlnaHRmdW5jICovCisJ CQlEVUtfREREKERVS19ERERQUklOVCgidmFsdWUgaXMgb2JqZWN0LCBoYXMgY2FsbGFibGUgdG9K U09OKCkgLT4gY2FsbCBpdCIpKTsKKwkJCS8qIFhYWDogZHVrX2R1cF91bnZhbGlkYXRlZCh0aHIs IC0yKSBldGMuICovCisJCQlkdWtfZHVwX20yKHRocik7ICAgICAgICAgIC8qIC0+IFsgLi4uIGtl eSB2YWwgdG9KU09OIHZhbCBdICovCisJCQlkdWtfZHVwX200KHRocik7ICAgICAgICAgIC8qIC0+ IFsgLi4uIGtleSB2YWwgdG9KU09OIHZhbCBrZXkgXSAqLworCQkJZHVrX2NhbGxfbWV0aG9kKHRo ciwgMSk7ICAvKiAtPiBbIC4uLiBrZXkgdmFsIHZhbCcgXSAqLworCQkJZHVrX3JlbW92ZV9tMih0 aHIpOyAgICAgICAvKiAtPiBbIC4uLiBrZXkgdmFsJyBdICovCisJCX0gZWxzZSB7CisJCQlkdWtf cG9wKHRocik7ICAgICAgICAgICAgIC8qIC0+IFsgLi4uIGtleSB2YWwgXSAqLworCQl9CisJfQor CisJLyogWyAuLi4ga2V5IHZhbCBdICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgidmFsdWU9 JSFUIiwgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCisJaWYgKGpzX2N0 eC0+aF9yZXBsYWNlcikgeworCQkvKiBYWFg6IEhlcmUgYSAic2xpY2UgY29weSIgd291bGQgYmUg dXNlZnVsLiAqLworCQlEVUtfREREKERVS19ERERQUklOVCgicmVwbGFjZXIgaXMgc2V0LCBjYWxs IHJlcGxhY2VyIikpOworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwganNfY3R4LT5oX3JlcGxhY2Vy KTsgIC8qIC0+IFsgLi4uIGtleSB2YWwgcmVwbGFjZXIgXSAqLworCQlkdWtfZHVwKHRociwgaWR4 X2hvbGRlcik7ICAgICAgICAgICAgICAgICAgIC8qIC0+IFsgLi4uIGtleSB2YWwgcmVwbGFjZXIg aG9sZGVyIF0gKi8KKwkJZHVrX2R1cF9tNCh0aHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAtPiBbIC4uLiBrZXkgdmFsIHJlcGxhY2VyIGhvbGRlciBrZXkgXSAqLworCQlkdWtfZHVw X200KHRocik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0+IFsgLi4uIGtleSB2YWwg cmVwbGFjZXIgaG9sZGVyIGtleSB2YWwgXSAqLworCQlkdWtfY2FsbF9tZXRob2QodGhyLCAyKTsg ICAgICAgICAgICAgICAgICAgIC8qIC0+IFsgLi4uIGtleSB2YWwgdmFsJyBdICovCisJCWR1a19y ZW1vdmVfbTIodGhyKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogLT4gWyAuLi4ga2V5IHZh bCcgXSAqLworCX0KKworCS8qIFsgLi4uIGtleSB2YWwgXSAqLworCisJRFVLX0RERChEVUtfRERE UFJJTlQoInZhbHVlPSUhVCIsIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsK KworCXR2ID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKTsKKwlpZiAoRFVLX1RWQUxfSVNf T0JKRUNUKHR2KSkgeworCQlkdWtfaG9iamVjdCAqaDsKKworCQloID0gRFVLX1RWQUxfR0VUX09C SkVDVCh0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VT RV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmlu ZWQoRFVLX1VTRV9KQykKKwkJaWYgKERVS19IT0JKRUNUX0lTX0JVRk9CSihoKSAmJgorCQkgICAg anNfY3R4LT5mbGFncyAmIChEVUtfSlNPTl9GTEFHX0VYVF9DVVNUT00gfCBEVUtfSlNPTl9GTEFH X0VYVF9DT01QQVRJQkxFKSkgeworCQkJLyogV2l0aCBKWC9KQyBhIGJ1ZmZlcm9iamVjdCBnZXRz IHNlcmlhbGl6ZWQgc3BlY2lhbGx5LiAqLworCQkJZHVrX2hidWZvYmogKmhfYnVmb2JqOworCQkJ aF9idWZvYmogPSAoZHVrX2hidWZvYmogKikgaDsKKwkJCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJ RChoX2J1Zm9iaik7CisJCQlkdWtfX2VuY19idWZvYmooanNfY3R4LCBoX2J1Zm9iaik7CisJCQln b3RvIHBvcDJfZW1pdHRlZDsKKwkJfQorCQkvKiBPdGhlcndpc2UgYnVmZmVyb2JqZWN0cyBnZXQg c2VyaWFsaXplZCBhcyBub3JtYWwgb2JqZWN0cy4gKi8KKyNlbmRpZiAgLyogSlggfHwgSkMgKi8K KyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCQljID0gKGR1a19z bWFsbF9pbnRfdCkgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoKTsKKwkJc3dpdGNoIChj KSB7CisJCWNhc2UgRFVLX0hPQkpFQ1RfQ0xBU1NfTlVNQkVSOiB7CisJCQlEVUtfREREKERVS19E RERQUklOVCgidmFsdWUgaXMgYSBOdW1iZXIgb2JqZWN0IC0+IGNvZXJjZSB3aXRoIFRvTnVtYmVy KCkiKSk7CisJCQlkdWtfdG9fbnVtYmVyX20xKHRocik7CisJCQkvKiBUaGUgY29lcmNpb24gcG90 ZW50aWFsbHkgaW52b2tlcyB1c2VyIC52YWx1ZU9mKCkgYW5kIC50b1N0cmluZygpCisJCQkgKiBi dXQgY2FuJ3QgcmVzdWx0IGluIGEgZnVuY3Rpb24gdmFsdWUgYmVjYXVzZSBUb1ByaW1pdGl2ZSgp IHdvdWxkCisJCQkgKiByZWplY3Qgc3VjaCBhIHJlc3VsdDogdGVzdC1kZXYtanNvbi1zdHJpbmdp ZnktY29lcmNpb24tMS5qcy4KKwkJCSAqLworCQkJRFVLX0FTU0VSVCghZHVrX2lzX2NhbGxhYmxl KHRociwgLTEpKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX0hPQkpFQ1RfQ0xBU1NfU1RS SU5HOiB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgidmFsdWUgaXMgYSBTdHJpbmcgb2JqZWN0 IC0+IGNvZXJjZSB3aXRoIFRvU3RyaW5nKCkiKSk7CisJCQlkdWtfdG9fc3RyaW5nKHRociwgLTEp OworCQkJLyogU2FtZSBjb2VyY2lvbiBiZWhhdmlvciBhcyBmb3IgTnVtYmVyLiAqLworCQkJRFVL X0FTU0VSVCghZHVrX2lzX2NhbGxhYmxlKHRociwgLTEpKTsKKwkJCWJyZWFrOworCQl9CisjaWYg ZGVmaW5lZChEVUtfVVNFX0pYKSB8fCBkZWZpbmVkKERVS19VU0VfSkMpCisJCWNhc2UgRFVLX0hP QkpFQ1RfQ0xBU1NfUE9JTlRFUjoKKyNlbmRpZgorCQljYXNlIERVS19IT0JKRUNUX0NMQVNTX0JP T0xFQU46IHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ2YWx1ZSBpcyBhIEJvb2xlYW4vQnVm ZmVyL1BvaW50ZXIgb2JqZWN0IC0+IGdldCBpbnRlcm5hbCB2YWx1ZSIpKTsKKwkJCWR1a19nZXRf cHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwgRFVLX1NUUklEWF9JTlRfVkFMVUUpOworCQkJZHVr X3JlbW92ZV9tMih0aHIpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDogeworCQkJLyogTm9y bWFsIG9iamVjdCB3aGljaCBkb2Vzbid0IGdldCBhdXRvbWF0aWNhbGx5IGNvZXJjZWQgdG8gYQor CQkJICogcHJpbWl0aXZlIHZhbHVlLiAgRnVuY3Rpb25zIGFyZSBjaGVja2VkIGZvciBzcGVjaWFs bHkuICBUaGUKKwkJCSAqIHByaW1pdGl2ZSB2YWx1ZSBjb2VyY2lvbnMgZm9yIE51bWJlciwgU3Ry aW5nLCBQb2ludGVyLCBhbmQKKwkJCSAqIEJvb2xlYW4gY2FuJ3QgcmVzdWx0IGluIGZ1bmN0aW9u cyBzbyBzdWZmaWNlcyB0byBjaGVjayBoZXJlLgorCQkJICogU3ltYm9sIG9iamVjdHMgYXJlIGhh bmRsZWQgbGlrZSBwbGFpbiBvYmplY3RzICh0aGVpciBwcmltaXRpdmUKKwkJCSAqIHZhbHVlIGlz IE5PVCBsb29rZWQgdXAgbGlrZSBmb3IgZS5nLiBTdHJpbmcgb2JqZWN0cykuCisJCQkgKi8KKwkJ CURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJCWlmIChEVUtfSE9CSkVDVF9JU19DQUxMQUJMRSho KSkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9KWCkgfHwgZGVmaW5lZChEVUtfVVNFX0pDKQorCQkJ CWlmIChqc19jdHgtPmZsYWdzICYgKERVS19KU09OX0ZMQUdfRVhUX0NVU1RPTSB8CisJCQkJICAg ICAgICAgICAgICAgICAgICAgRFVLX0pTT05fRkxBR19FWFRfQ09NUEFUSUJMRSkpIHsKKwkJCQkJ LyogV2Ugb25seSBnZXQgaGVyZSB3aGVuIGRvaW5nIG5vbi1zdGFuZGFyZCBKU09OIGVuY29kaW5n ICovCisJCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBmdW5jdGlvbiBhbGxvd2VkLCBzZXJp YWxpemUgdG8gY3VzdG9tIGZvcm1hdCIpKTsKKwkJCQkJRFVLX0FTU0VSVChqc19jdHgtPmZsYWdf ZXh0X2N1c3RvbSB8fCBqc19jdHgtPmZsYWdfZXh0X2NvbXBhdGlibGUpOworCQkJCQlEVUtfX0VN SVRfU1RSSURYKGpzX2N0eCwganNfY3R4LT5zdHJpZHhfY3VzdG9tX2Z1bmN0aW9uKTsKKwkJCQkJ Z290byBwb3AyX2VtaXR0ZWQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJRFVLX0RERChEVUtfREREUFJJ TlQoIi0+IHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZCAoZnVuY3Rpb24pIikpOworCQkJCQlnb3Rv IHBvcDJfdW5kZWY7CisJCQkJfQorI2Vsc2UgIC8qIERVS19VU0VfSlggfHwgRFVLX1VTRV9KQyAq LworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiB3aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQg KGZ1bmN0aW9uKSIpKTsKKwkJCQlnb3RvIHBvcDJfdW5kZWY7CisjZW5kaWYgIC8qIERVS19VU0Vf SlggfHwgRFVLX1VTRV9KQyAqLworCQkJfQorCQl9CisJCX0gIC8qIGVuZCBzd2l0Y2ggKi8KKwl9 CisKKwkvKiBbIC4uLiBrZXkgdmFsIF0gKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJ2YWx1 ZT0lIVQiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisKKwlpZiAoZHVr X2NoZWNrX3R5cGVfbWFzayh0aHIsIC0xLCBqc19jdHgtPm1hc2tfZm9yX3VuZGVmaW5lZCkpIHsK KwkJLyogd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkICovCisJCURVS19EREQoRFVLX0RERFBSSU5U KCItPiB3aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQgKHR5cGUgbWFzayBjaGVjaykiKSk7CisJCWdv dG8gcG9wMl91bmRlZjsKKwl9CisJdHYgPSBEVUtfR0VUX1RWQUxfTkVHSURYKHRociwgLTEpOwor CisJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2KSkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9K WCkgfHwgZGVmaW5lZChEVUtfVVNFX0pDKQorCS8qIFdoZW4gSlgvSkMgbm90IGluIHVzZSwgdGhl IHR5cGUgbWFzayBhYm92ZSB3aWxsIGF2b2lkIHRoaXMgY2FzZSBpZiBuZWVkZWQuICovCisJY2Fz ZSBEVUtfVEFHX1VOREVGSU5FRDogeworCQlEVUtfX0VNSVRfU1RSSURYKGpzX2N0eCwganNfY3R4 LT5zdHJpZHhfY3VzdG9tX3VuZGVmaW5lZCk7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWNhc2Ug RFVLX1RBR19OVUxMOiB7CisJCURVS19fRU1JVF9TVFJJRFgoanNfY3R4LCBEVUtfU1RSSURYX0xD X05VTEwpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX0JPT0xFQU46IHsKKwkJRFVLX19F TUlUX1NUUklEWChqc19jdHgsIERVS19UVkFMX0dFVF9CT09MRUFOKHR2KSA/CisJCSAgICAgICAg ICAgICAgICAgRFVLX1NUUklEWF9UUlVFIDogRFVLX1NUUklEWF9GQUxTRSk7CisJCWJyZWFrOwor CX0KKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykKKwkvKiBX aGVuIEpYL0pDIG5vdCBpbiB1c2UsIHRoZSB0eXBlIG1hc2sgYWJvdmUgd2lsbCBhdm9pZCB0aGlz IGNhc2UgaWYgbmVlZGVkLiAqLworCWNhc2UgRFVLX1RBR19QT0lOVEVSOiB7CisJCWR1a19fZW5j X3BvaW50ZXIoanNfY3R4LCBEVUtfVFZBTF9HRVRfUE9JTlRFUih0dikpOworCQlicmVhazsKKwl9 CisjZW5kaWYgIC8qIERVS19VU0VfSlggfHwgRFVLX1VTRV9KQyAqLworCWNhc2UgRFVLX1RBR19T VFJJTkc6IHsKKwkJZHVrX2hzdHJpbmcgKmggPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsKKwkJ RFVLX0FTU0VSVChoICE9IE5VTEwpOworCQlpZiAoRFVLX1VOTElLRUxZKERVS19IU1RSSU5HX0hB U19TWU1CT0woaCkpKSB7CisJCQlnb3RvIHBvcDJfdW5kZWY7CisJCX0KKwkJZHVrX19lbmNfcXVv dGVfc3RyaW5nKGpzX2N0eCwgaCk7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UQUdfT0JKRUNU OiB7CisJCWR1a19ob2JqZWN0ICpoID0gRFVLX1RWQUxfR0VUX09CSkVDVCh0dik7CisJCURVS19B U1NFUlQoaCAhPSBOVUxMKTsKKworCQkvKiBGdW5jdGlvbiB2YWx1ZXMgYXJlIGhhbmRsZWQgY29t cGxldGVseSBhYm92ZSAoaW5jbHVkaW5nCisJCSAqIGNvZXJjaW9uIHJlc3VsdHMpOgorCQkgKi8K KwkJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSVNfQ0FMTEFCTEUoaCkpOworCisJCWlmIChEVUtf SE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKGgpID09IERVS19IT0JKRUNUX0NMQVNTX0FSUkFZKSB7 CisJCQlkdWtfX2VuY19hcnJheShqc19jdHgpOworCQl9IGVsc2UgeworCQkJZHVrX19lbmNfb2Jq ZWN0KGpzX2N0eCk7CisJCX0KKwkJYnJlYWs7CisJfQorCS8qIEJlY2F1c2UgcGxhaW4gYnVmZmVy cyBtaW1pY3MgVWludDhBcnJheSwgdGhleSBoYXZlIGVudW1lcmFibGUKKwkgKiBpbmRleCBwcm9w ZXJ0aWVzIFswLGJ5dGVMZW5ndGhbLiAgQmVjYXVzZSBKU09OIG9ubHkgc2VyaWFsaXplcworCSAq IGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMsIG5vIHByb3BlcnRpZXMgY2FuIGJlIHNlcmlhbGl6 ZWQgZm9yCisJICogcGxhaW4gYnVmZmVycyAoYWxsIHZpcnR1YWwgcHJvcGVydGllcyBhcmUgbm9u LWVudW1lcmFibGUpLiAgSG93ZXZlciwKKwkgKiB0aGVyZSBtYXkgYmUgYSAudG9KU09OKCkgbWV0 aG9kIHdoaWNoIHdhcyBhbHJlYWR5IGhhbmRsZWQgYWJvdmUuCisJICovCisJY2FzZSBEVUtfVEFH X0JVRkZFUjogeworI2lmIGRlZmluZWQoRFVLX1VTRV9KWCkgfHwgZGVmaW5lZChEVUtfVVNFX0pD KQorCQlpZiAoanNfY3R4LT5mbGFnX2V4dF9jdXN0b21fb3JfY29tcGF0aWJsZSkgeworCQkJZHVr X19lbmNfYnVmZmVyX2p4X2pjKGpzX2N0eCwgRFVLX1RWQUxfR0VUX0JVRkZFUih0dikpOworCQkJ YnJlYWs7CisJCX0KKyNlbmRpZgorCisJCS8qIENvdWxkIGltcGxlbWVudCBhIGZhc3RwYXRoLCBi dXQgdGhlIGZhc3QgcGF0aCB3b3VsZCBuZWVkCisJCSAqIHRvIGhhbmRsZSByZWFsbG9jIHNpZGUg ZWZmZWN0cyBjb3JyZWN0bHkuCisJCSAqLworCQlkdWtfdG9fb2JqZWN0KHRociwgLTEpOworCQlk dWtfX2VuY19vYmplY3QoanNfY3R4KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RBR19MSUdI VEZVTkM6IHsKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykK KwkJLyogV2Ugb25seSBnZXQgaGVyZSB3aGVuIGRvaW5nIG5vbi1zdGFuZGFyZCBKU09OIGVuY29k aW5nICovCisJCURVS19BU1NFUlQoanNfY3R4LT5mbGFnX2V4dF9jdXN0b20gfHwganNfY3R4LT5m bGFnX2V4dF9jb21wYXRpYmxlKTsKKwkJRFVLX19FTUlUX1NUUklEWChqc19jdHgsIGpzX2N0eC0+ c3RyaWR4X2N1c3RvbV9mdW5jdGlvbik7CisjZWxzZQorCQkvKiBTdGFuZGFyZCBKU09OIG9taXRz IGZ1bmN0aW9ucyAqLworCQlEVUtfVU5SRUFDSEFCTEUoKTsKKyNlbmRpZgorCQlicmVhazsKKwl9 CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJY2FzZSBEVUtfVEFHX0ZBU1RJTlQ6CisJ CS8qIE51bWJlciBzZXJpYWxpemF0aW9uIGhhcyBhIHNpZ25pZmljYW50IGltcGFjdCByZWxhdGl2 ZSB0bworCQkgKiBvdGhlciBmYXN0IHBhdGggY29kZSwgc28gY2FyZWZ1bCBmYXN0IHBhdGggZm9y IGZhc3RpbnRzLgorCQkgKi8KKwkJZHVrX19lbmNfZmFzdGludF90dmFsKGpzX2N0eCwgdHYpOwor CQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6IHsKKwkJLyogbnVtYmVyICovCisJCURVS19BU1NF UlQoIURVS19UVkFMX0lTX1VOVVNFRCh0dikpOworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05V TUJFUih0dikpOworCQkvKiBYWFg6IEEgZmFzdCBwYXRoIGZvciB1c3VhbCBpbnRlZ2VycyB3b3Vs ZCBiZSB1c2VmdWwgd2hlbgorCQkgKiBmYXN0aW50IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQuCisJ CSAqLworCQlkdWtfX2VuY19kb3VibGUoanNfY3R4KTsKKwkJYnJlYWs7CisJfQorCX0KKworI2lm IGRlZmluZWQoRFVLX1VTRV9KWCkgfHwgZGVmaW5lZChEVUtfVVNFX0pDKQorIHBvcDJfZW1pdHRl ZDoKKyNlbmRpZgorCWR1a19wb3BfMih0aHIpOyAvKiBbIC4uLiBrZXkgdmFsIF0gLT4gWyAuLi4g XSAqLworCXJldHVybiAxOyAgLyogZW1pdHRlZCAqLworCisgcG9wMl91bmRlZjoKKwlkdWtfcG9w XzIodGhyKTsgIC8qIFsgLi4uIGtleSB2YWwgXSAtPiBbIC4uLiBdICovCisJcmV0dXJuIDA7ICAv KiBub3QgZW1pdHRlZCAqLworfQorCisvKiBFNSBTZWN0aW9uIDE1LjEyLjMsIG1haW4gYWxnb3Jp dGhtLCBzdGVwIDQuYi5paSBzdGVwcyAxLTQuICovCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtf X2VuY19hbGxvd19pbnRvX3Byb3BsaXN0KGR1a190dmFsICp0dikgeworCWR1a19zbWFsbF9pbnRf dCBjOworCisJLyogWFhYOiBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgaW50ZXJuYWwgdHlwZSBjaGVj a2VyPworCSAqIC0gdHlwZSBtYXNrOyBzeW1ib2wgZmxhZzsgY2xhc3MgbWFzaworCSAqLworCURV S19BU1NFUlQodHYgIT0gTlVMTCk7CisJaWYgKERVS19UVkFMX0lTX1NUUklORyh0dikpIHsKKwkJ ZHVrX2hzdHJpbmcgKmg7CisJCWggPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsKKwkJRFVLX0FT U0VSVChoICE9IE5VTEwpOworCQlpZiAoRFVLX1VOTElLRUxZKERVS19IU1RSSU5HX0hBU19TWU1C T0woaCkpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKERV S19UVkFMX0lTX05VTUJFUih0dikpIHsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChEVUtfVFZB TF9JU19PQkpFQ1QodHYpKSB7CisJCWR1a19ob2JqZWN0ICpoOworCQloID0gRFVLX1RWQUxfR0VU X09CSkVDVCh0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJYyA9IChkdWtfc21hbGxf aW50X3QpIERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoaCk7CisJCWlmIChjID09IERVS19I T0JKRUNUX0NMQVNTX1NUUklORyB8fCBjID09IERVS19IT0JKRUNUX0NMQVNTX05VTUJFUikgewor CQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBKU09OLnN0 cmluZ2lmeSgpIGZhc3QgcGF0aAorICoKKyAqICBPdGhlcndpc2Ugc3VwcG9ydHMgZnVsbCBKU09O LCBKWCwgYW5kIEpDIGZlYXR1cmVzLCBidXQgYmFpbHMgb3V0IG9uIGFueQorICogIHBvc3NpYmxl IHNpZGUgZWZmZWN0IHdoaWNoIG1pZ2h0IGNoYW5nZSB0aGUgdmFsdWUgYmVpbmcgc2VyaWFsaXpl ZC4gIFRoZQorICogIGZhc3QgcGF0aCBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhh dCB0aGUgdmFsdWUgYmVpbmcgc2VyaWFsaXplZAorICogIGlzIHVuY2hhbmdlZCBzbyB0aGF0IHdl IGNhbiB3YWxrIGRpcmVjdGx5IHRocm91Z2ggcHJvcGVydHkgdGFibGVzIGV0Yy4KKyAqLworCisj aWYgZGVmaW5lZChEVUtfVVNFX0pTT05fU1RSSU5HSUZZX0ZBU1RQQVRIKQorRFVLX0xPQ0FMIGR1 a19ib29sX3QgZHVrX19qc29uX3N0cmluZ2lmeV9mYXN0X3ZhbHVlKGR1a19qc29uX2VuY19jdHgg KmpzX2N0eCwgZHVrX3R2YWwgKnR2KSB7CisJZHVrX3VpbnRfZmFzdDMyX3QgaSwgbjsKKworCURV S19EREQoRFVLX0RERFBSSU5UKCJzdHJpbmdpZnkgZmFzdDogJSFUIiwgdHYpKTsKKworCURVS19B U1NFUlQoanNfY3R4ICE9IE5VTEwpOworCURVS19BU1NFUlQoanNfY3R4LT50aHIgIT0gTlVMTCk7 CisKKyNpZiAwIC8qIGRpc2FibGVkIGZvciBub3cgKi8KKyByZXN0YXJ0X21hdGNoOgorI2VuZGlm CisKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFH KHR2KSkgeworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6IHsKKyNpZiBkZWZpbmVkKERVS19VU0Vf SlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykKKwkJaWYgKGpzX2N0eC0+ZmxhZ19leHRfY3VzdG9t IHx8IGpzX2N0eC0+ZmxhZ19leHRfY29tcGF0aWJsZSkgeworCQkJRFVLX19FTUlUX1NUUklEWChq c19jdHgsIGpzX2N0eC0+c3RyaWR4X2N1c3RvbV91bmRlZmluZWQpOworCQkJYnJlYWs7CisJCX0g ZWxzZSB7CisJCQlnb3RvIGVtaXRfdW5kZWZpbmVkOworCQl9CisjZWxzZQorCQlnb3RvIGVtaXRf dW5kZWZpbmVkOworI2VuZGlmCisJfQorCWNhc2UgRFVLX1RBR19OVUxMOiB7CisJCURVS19fRU1J VF9TVFJJRFgoanNfY3R4LCBEVUtfU1RSSURYX0xDX05VTEwpOworCQlicmVhazsKKwl9CisJY2Fz ZSBEVUtfVEFHX0JPT0xFQU46IHsKKwkJRFVLX19FTUlUX1NUUklEWChqc19jdHgsIERVS19UVkFM X0dFVF9CT09MRUFOKHR2KSA/CisJCSAgICAgICAgICAgICAgICAgRFVLX1NUUklEWF9UUlVFIDog RFVLX1NUUklEWF9GQUxTRSk7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UQUdfU1RSSU5HOiB7 CisJCWR1a19oc3RyaW5nICpoOworCQloID0gRFVLX1RWQUxfR0VUX1NUUklORyh0dik7CisJCURV S19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJaWYgKERVS19VTkxJS0VMWShEVUtfSFNUUklOR19IQVNf U1lNQk9MKGgpKSkgeworCQkJZ290byBlbWl0X3VuZGVmaW5lZDsKKwkJfQorCQlkdWtfX2VuY19x dW90ZV9zdHJpbmcoanNfY3R4LCBoKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RBR19PQkpF Q1Q6IHsKKwkJZHVrX2hvYmplY3QgKm9iajsKKwkJZHVrX3R2YWwgKnR2X3ZhbDsKKwkJZHVrX2Jv b2xfdCBlbWl0dGVkID0gMDsKKwkJZHVrX3VpbnQzMl90IGNfYml0LCBjX2FsbCwgY19hcnJheSwg Y191bmJveCwgY191bmRlZiwKKwkJICAgICAgICAgICAgIGNfZnVuYywgY19idWZvYmosIGNfb2Jq ZWN0LCBjX2Fib3J0OworCisJCS8qIEZvciBvYmplY3RzIEpTT04uc3RyaW5naWZ5KCkgb25seSBs b29rcyBmb3Igb3duLCBlbnVtZXJhYmxlCisJCSAqIHByb3BlcnRpZXMgd2hpY2ggaXMgbmljZSBm b3IgdGhlIGZhc3QgcGF0aCBoZXJlLgorCQkgKgorCQkgKiBGb3IgYXJyYXlzIEpTT04uc3RyaW5n aWZ5KCkgdXNlcyBbW0dldF1dIHNvIGl0IHdpbGwgYWN0dWFsbHkKKwkJICogaW5oZXJpdCBwcm9w ZXJ0aWVzIGR1cmluZyBzZXJpYWxpemF0aW9uISAgVGhpcyBmYXN0IHBhdGgKKwkJICogc3VwcG9y dHMgZ2FwcHkgYXJyYXlzIGFzIGxvbmcgYXMgdGhlcmUncyBubyBhY3R1YWwgaW5oZXJpdGVkCisJ CSAqIHByb3BlcnR5ICh3aGljaCBtaWdodCBiZSBhIGdldHRlciBldGMpLgorCQkgKgorCQkgKiBT aW5jZSByZWN1cnNpb24gb25seSBoYXBwZW5zIGZvciBvYmplY3RzLCB3ZSBjYW4gaGF2ZSBib3Ro CisJCSAqIHJlY3Vyc2lvbiBhbmQgbG9vcCBjaGVja3MgaGVyZS4gIFdlIHVzZSBhIHNpbXBsZSwg ZGVwdGgtbGltaXRlZAorCQkgKiBsb29wIGNoZWNrIGluIHRoZSBmYXN0IHBhdGggYmVjYXVzZSB0 aGUgb2JqZWN0LWJhc2VkIHRyYWNraW5nCisJCSAqIGlzIHZlcnkgc2xvdyAod2hlbiB0ZXN0ZWQs IGl0IGFjY291bnRlZCBmb3IgNTAlIG9mIGZhc3QgcGF0aAorCQkgKiBleGVjdXRpb24gdGltZSBm b3IgaW5wdXQgZGF0YSB3aXRoIGEgbG90IG9mIHNtYWxsIG9iamVjdHMhKS4KKwkJICovCisKKwkJ LyogWFhYOiBmb3IgcmVhbCB3b3JsZCBjb2RlLCBjb3VsZCBqdXN0IGlnbm9yZSBhcnJheSBpbmhl cml0YW5jZQorCQkgKiBhbmQgb25seSBsb29rIGF0IGFycmF5IG93biBwcm9wZXJ0aWVzLgorCQkg Ki8KKworCQkvKiBXZSByZWx5IG9uIGEgZmV3IG9iamVjdCBmbGFnIC8gY2xhc3MgbnVtYmVyIHJl bGF0aW9uc2hpcHMgaGVyZSwKKwkJICogYXNzZXJ0IGZvciB0aGVtLgorCQkgKi8KKworCQlvYmog PSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisJ CURVS19BU1NFUlRfSE9CSkVDVF9WQUxJRChvYmopOworCisJCS8qIE9uY2UgcmVjdXJzaW9uIGRl cHRoIGlzIGluY3JlYXNlZCwgZXhpdCBwYXRoIG11c3QgZGVjcmVhc2UKKwkJICogaXQgKHRob3Vn aCBpdCdzIE9LIHRvIGFib3J0IHRoZSBmYXN0IHBhdGgpLgorCQkgKi8KKworCQlEVUtfQVNTRVJU X0RJU0FCTEUoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0gMCk7ICAvKiB1bnNpZ25lZCAqLwor CQlEVUtfQVNTRVJUKGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoIDw9IGpzX2N0eC0+cmVjdXJzaW9u X2xpbWl0KTsKKwkJaWYgKGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoID49IGpzX2N0eC0+cmVjdXJz aW9uX2xpbWl0KSB7CisJCQlEVUtfREQoRFVLX0REUFJJTlQoImZhc3QgcGF0aCByZWN1cnNpb24g bGltaXQiKSk7CisJCQlEVUtfRVJST1JfUkFOR0UoanNfY3R4LT50aHIsIERVS19TVFJfSlNPTkRF Q19SRUNMSU1JVCk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJfQorCisJCWZv ciAoaSA9IDAsIG4gPSAoZHVrX3VpbnRfZmFzdDMyX3QpIGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRo OyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoRFVLX1VOTElLRUxZKGpzX2N0eC0+dmlzaXRpbmdbaV0g PT0gb2JqKSkgeworCQkJCURVS19ERChEVUtfRERQUklOVCgiZmFzdCBwYXRoIGxvb3AgZGV0ZWN0 IikpOworCQkJCURVS19FUlJPUl9UWVBFKGpzX2N0eC0+dGhyLCBEVUtfU1RSX0NZQ0xJQ19JTlBV VCk7CisJCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJCQl9CisJCX0KKworCQkvKiBH dWFyYW50ZWVkIGJ5IHJlY3Vyc2lvbl9saW1pdCBzZXR1cCBzbyB3ZSBkb24ndCBoYXZlIHRvCisJ CSAqIGNoZWNrIHR3aWNlLgorCQkgKi8KKwkJRFVLX0FTU0VSVChqc19jdHgtPnJlY3Vyc2lvbl9k ZXB0aCA8IERVS19KU09OX0VOQ19MT09QQVJSQVkpOworCQlqc19jdHgtPnZpc2l0aW5nW2pzX2N0 eC0+cmVjdXJzaW9uX2RlcHRoXSA9IG9iajsKKwkJanNfY3R4LT5yZWN1cnNpb25fZGVwdGgrKzsK KworCQkvKiBJZiBvYmplY3QgaGFzIGEgLnRvSlNPTigpIHByb3BlcnR5LCB3ZSBjYW4ndCBiZSBj ZXJ0YWluCisJCSAqIHRoYXQgaXQgd291bGRuJ3QgbXV0YXRlIGFueSB2YWx1ZSBhcmJpdHJhcmls eSwgc28gYmFpbAorCQkgKiBvdXQgb2YgdGhlIGZhc3QgcGF0aC4KKwkJICoKKwkJICogSWYgYW4g b2JqZWN0IGlzIGEgUHJveHkgd2UgYWxzbyBjYW4ndCBhdm9pZCBzaWRlIGVmZmVjdHMKKwkJICog c28gYWJhbmRvbi4KKwkJICovCisJCS8qIFhYWDogbm9uLWNhbGxhYmxlIC50b0pTT04oKSBkb2Vz bid0IG5lZWQgdG8gY2F1c2UgYW4gYWJvcnQKKwkJICogYnV0IGRvZXMgYXQgdGhlIG1vbWVudCwg cHJvYmFibHkgbm90IHdvcnRoIGZpeGluZy4KKwkJICovCisJCWlmIChkdWtfaG9iamVjdF9oYXNw cm9wX3Jhdyhqc19jdHgtPnRociwgb2JqLCBEVUtfSFRIUkVBRF9TVFJJTkdfVE9fSlNPTihqc19j dHgtPnRocikpIHx8CisJCSAgICBEVUtfSE9CSkVDVF9JU19QUk9YWShvYmopKSB7CisJCQlEVUtf REQoRFVLX0REUFJJTlQoIm9iamVjdCBoYXMgYSAudG9KU09OIHByb3BlcnR5IG9yIG9iamVjdCBp cyBhIFByb3h5LCBhYm9ydCBmYXN0IHBhdGgiKSk7CisJCQlnb3RvIGFib3J0X2Zhc3RwYXRoOwor CQl9CisKKwkJLyogV2UgY291bGQgdXNlIGEgc3dpdGNoLWNhc2UgZm9yIHRoZSBjbGFzcyBudW1i ZXIgYnV0IGl0IHR1cm5zIG91dAorCQkgKiBhIHNtYWxsIGlmLWVsc2UgbGFkZGVyIG9uIGNsYXNz IG1hc2tzIGlzIGJldHRlci4gIFRoZSBpZi1sYWRkZXIKKwkJICogc2hvdWxkIGJlIGluIG9yZGVy IG9mIHJlbGV2YW5jeS4KKwkJICovCisKKwkJLyogWFhYOiBtb3ZlIG1hc2tzIHRvIGpzX2N0eD8g dGhleSBkb24ndCBjaGFuZ2UgZHVyaW5nIG9uZQorCQkgKiBmYXN0IHBhdGggaW52b2NhdGlvbi4K KwkJICovCisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfQ0xBU1NfTUFYIDw9IDMxKTsKKyNpZiBk ZWZpbmVkKERVS19VU0VfSlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykKKwkJaWYgKGpzX2N0eC0+ ZmxhZ19leHRfY3VzdG9tX29yX2NvbXBhdGlibGUpIHsKKwkJCWNfYWxsID0gRFVLX0hPQkpFQ1Rf Q01BU0tfQUxMOworCQkJY19hcnJheSA9IERVS19IT0JKRUNUX0NNQVNLX0FSUkFZOworCQkJY191 bmJveCA9IERVS19IT0JKRUNUX0NNQVNLX05VTUJFUiB8CisJCQkgICAgICAgICAgRFVLX0hPQkpF Q1RfQ01BU0tfU1RSSU5HIHwKKwkJCSAgICAgICAgICBEVUtfSE9CSkVDVF9DTUFTS19CT09MRUFO IHwKKwkJCSAgICAgICAgICBEVUtfSE9CSkVDVF9DTUFTS19QT0lOVEVSOyAgLyogU3ltYm9scyBh cmUgbm90IHVuYm94ZWQuICovCisJCQljX2Z1bmMgPSBEVUtfSE9CSkVDVF9DTUFTS19GVU5DVElP TjsKKwkJCWNfYnVmb2JqID0gRFVLX0hPQkpFQ1RfQ01BU0tfQUxMX0JVRk9CSlM7CisJCQljX3Vu ZGVmID0gMDsKKwkJCWNfYWJvcnQgPSAwOworCQkJY19vYmplY3QgPSBjX2FsbCAmIH4oY19hcnJh eSB8IGNfdW5ib3ggfCBjX2Z1bmMgfCBjX2J1Zm9iaiB8IGNfdW5kZWYgfCBjX2Fib3J0KTsKKwkJ fQorCQllbHNlCisjZW5kaWYKKwkJeworCQkJY19hbGwgPSBEVUtfSE9CSkVDVF9DTUFTS19BTEw7 CisJCQljX2FycmF5ID0gRFVLX0hPQkpFQ1RfQ01BU0tfQVJSQVk7CisJCQljX3VuYm94ID0gRFVL X0hPQkpFQ1RfQ01BU0tfTlVNQkVSIHwKKwkJCSAgICAgICAgICBEVUtfSE9CSkVDVF9DTUFTS19T VFJJTkcgfAorCQkJICAgICAgICAgIERVS19IT0JKRUNUX0NNQVNLX0JPT0xFQU47ICAvKiBTeW1i b2xzIGFyZSBub3QgdW5ib3hlZC4gKi8KKwkJCWNfZnVuYyA9IDA7CisJCQljX2J1Zm9iaiA9IDA7 CisJCQljX3VuZGVmID0gRFVLX0hPQkpFQ1RfQ01BU0tfRlVOQ1RJT04gfAorCQkJICAgICAgICAg IERVS19IT0JKRUNUX0NNQVNLX1BPSU5URVI7CisJCQkvKiBBcyB0aGUgZmFzdCBwYXRoIGRvZXNu J3QgY3VycmVudGx5IHByb3Blcmx5IHN1cHBvcnQKKwkJCSAqIGR1a19oYnVmb2JqIHZpcnR1YWwg cHJvcGVydGllcywgYWJvcnQgZmFzdCBwYXRoIGlmCisJCQkgKiB3ZSBlbmNvdW50ZXIgdGhlbSBp biBwbGFpbiBKU09OIG1vZGUuCisJCQkgKi8KKwkJCWNfYWJvcnQgPSBEVUtfSE9CSkVDVF9DTUFT S19BTExfQlVGT0JKUzsKKwkJCWNfb2JqZWN0ID0gY19hbGwgJiB+KGNfYXJyYXkgfCBjX3VuYm94 IHwgY19mdW5jIHwgY19idWZvYmogfCBjX3VuZGVmIHwgY19hYm9ydCk7CisJCX0KKworCQljX2Jp dCA9IChkdWtfdWludDMyX3QpIERVS19IT0JKRUNUX0dFVF9DTEFTU19NQVNLKG9iaik7CisJCWlm IChjX2JpdCAmIGNfb2JqZWN0KSB7CisJCQkvKiBBbGwgb3RoZXIgb2JqZWN0IHR5cGVzLiAqLwor CQkJRFVLX19FTUlUXzEoanNfY3R4LCBEVUtfQVNDX0xDVVJMWSk7CisKKwkJCS8qIEEgbm9uLUFy cmF5IG9iamVjdCBzaG91bGQgbm90IGhhdmUgYW4gYXJyYXkgcGFydCBpbiBwcmFjdGljZS4KKwkJ CSAqIEJ1dCBzaW5jZSBpdCBpcyBzdXBwb3J0ZWQgaW50ZXJuYWxseSAoYW5kIHBlcmhhcHMgdXNl ZCBhdCBzb21lCisJCQkgKiBwb2ludCksIGNoZWNrIGFuZCBhYmFuZG9uIGlmIHRoYXQncyB0aGUg Y2FzZS4KKwkJCSAqLworCQkJaWYgKERVS19IT0JKRUNUX0hBU19BUlJBWV9QQVJUKG9iaikpIHsK KwkJCQlEVUtfREQoRFVLX0REUFJJTlQoIm5vbi1BcnJheSBvYmplY3QgaGFzIGFycmF5IHBhcnQs IGFib3J0IGZhc3QgcGF0aCIpKTsKKwkJCQlnb3RvIGFib3J0X2Zhc3RwYXRoOworCQkJfQorCisJ CQlmb3IgKGkgPSAwOyBpIDwgKGR1a191aW50X2Zhc3QzMl90KSBEVUtfSE9CSkVDVF9HRVRfRU5F WFQob2JqKTsgaSsrKSB7CisJCQkJZHVrX2hzdHJpbmcgKms7CisJCQkJZHVrX3NpemVfdCBwcmV2 X3NpemU7CisKKwkJCQlrID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKGpzX2N0eC0+dGhyLT5oZWFw LCBvYmosIGkpOworCQkJCWlmICghaykgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYg KERVS19IU1RSSU5HX0hBU19BUlJJRFgoaykpIHsKKwkJCQkJLyogSWYgYW4gb2JqZWN0IGhhcyBh cnJheSBpbmRleCBrZXlzIHdlIHdvdWxkIG5lZWQKKwkJCQkJICogdG8gc29ydCB0aGVtIGludG8g dGhlIEVTMjAxNSBlbnVtZXJhdGlvbiBvcmRlciB0bworCQkJCQkgKiBiZSBjb25zaXN0ZW50IHdp dGggdGhlIHNsb3cgcGF0aC4gIEFib3J0IHRoZSBmYXN0CisJCQkJCSAqIHBhdGggYW5kIGhhbmRs ZSBpbiB0aGUgc2xvdyBwYXRoIGZvciBub3cuCisJCQkJCSAqLworCQkJCQlEVUtfREQoRFVLX0RE UFJJTlQoInByb3BlcnR5IGtleSBpcyBhbiBhcnJheSBpbmRleCwgYWJvcnQgZmFzdCBwYXRoIikp OworCQkJCQlnb3RvIGFib3J0X2Zhc3RwYXRoOworCQkJCX0KKwkJCQlpZiAoIURVS19IT0JKRUNU X0VfU0xPVF9JU19FTlVNRVJBQkxFKGpzX2N0eC0+dGhyLT5oZWFwLCBvYmosIGkpKSB7CisJCQkJ CWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoRFVLX0hPQkpFQ1RfRV9TTE9UX0lTX0FDQ0VTU09S KGpzX2N0eC0+dGhyLT5oZWFwLCBvYmosIGkpKSB7CisJCQkJCS8qIEdldHRlciBtaWdodCBoYXZl IGFyYml0cmFyeSBzaWRlIGVmZmVjdHMsCisJCQkJCSAqIHNvIGJhaWwgb3V0LgorCQkJCQkgKi8K KwkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJwcm9wZXJ0eSBpcyBhbiBhY2Nlc3NvciwgYWJvcnQg ZmFzdCBwYXRoIikpOworCQkJCQlnb3RvIGFib3J0X2Zhc3RwYXRoOworCQkJCX0KKwkJCQlpZiAo RFVLX1VOTElLRUxZKERVS19IU1RSSU5HX0hBU19TWU1CT0woaykpKSB7CisJCQkJCWNvbnRpbnVl OworCQkJCX0KKworCQkJCXR2X3ZhbCA9IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1RWQUxfUFRS KGpzX2N0eC0+dGhyLT5oZWFwLCBvYmosIGkpOworCisJCQkJcHJldl9zaXplID0gRFVLX0JXX0dF VF9TSVpFKGpzX2N0eC0+dGhyLCAmanNfY3R4LT5idyk7CisJCQkJaWYgKERVS19VTkxJS0VMWShq c19jdHgtPmhfZ2FwICE9IE5VTEwpKSB7CisJCQkJCWR1a19fZW5jX25ld2xpbmVfaW5kZW50KGpz X2N0eCwganNfY3R4LT5yZWN1cnNpb25fZGVwdGgpOworCQkJCQlkdWtfX2VuY19rZXlfYXV0b3F1 b3RlKGpzX2N0eCwgayk7CisJCQkJCURVS19fRU1JVF8yKGpzX2N0eCwgRFVLX0FTQ19DT0xPTiwg RFVLX0FTQ19TUEFDRSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZHVrX19lbmNfa2V5X2F1dG9xdW90 ZShqc19jdHgsIGspOworCQkJCQlEVUtfX0VNSVRfMShqc19jdHgsIERVS19BU0NfQ09MT04pOwor CQkJCX0KKworCQkJCWlmIChkdWtfX2pzb25fc3RyaW5naWZ5X2Zhc3RfdmFsdWUoanNfY3R4LCB0 dl92YWwpID09IDApIHsKKwkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJwcm9wIHZhbHVlIG5vdCBz dXBwb3J0ZWQsIHJld2luZCBrZXkgYW5kIGNvbG9uIikpOworCQkJCQlEVUtfQldfU0VUX1NJWkUo anNfY3R4LT50aHIsICZqc19jdHgtPmJ3LCBwcmV2X3NpemUpOworCQkJCX0gZWxzZSB7CisJCQkJ CURVS19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19DT01NQSk7CisJCQkJCWVtaXR0ZWQgPSAxOwor CQkJCX0KKwkJCX0KKworCQkJLyogSWYgYW55IG5vbi1BcnJheSB2YWx1ZSBoYWQgZW51bWVyYWJs ZSB2aXJ0dWFsIG93bgorCQkJICogcHJvcGVydGllcywgdGhleSBzaG91bGQgYmUgc2VyaWFsaXpl ZCBoZXJlIChhY3R1YWxseSwKKwkJCSAqIGJlZm9yZSB0aGUgZXhwbGljaXQgcHJvcGVydGllcyku ICBTdGFuZGFyZCB0eXBlcyBkb24ndC4KKwkJCSAqLworCisJCQlpZiAoZW1pdHRlZCkgeworCQkJ CURVS19BU1NFUlQoKigoZHVrX3VpbnQ4X3QgKikgRFVLX0JXX0dFVF9QVFIoanNfY3R4LT50aHIs ICZqc19jdHgtPmJ3KSAtIDEpID09IERVS19BU0NfQ09NTUEpOworCQkJCURVS19fVU5FTUlUXzEo anNfY3R4KTsgIC8qIGVhdCB0cmFpbGluZyBjb21tYSAqLworCQkJCWlmIChEVUtfVU5MSUtFTFko anNfY3R4LT5oX2dhcCAhPSBOVUxMKSkgeworCQkJCQlEVUtfQVNTRVJUKGpzX2N0eC0+cmVjdXJz aW9uX2RlcHRoID49IDEpOworCQkJCQlkdWtfX2VuY19uZXdsaW5lX2luZGVudChqc19jdHgsIGpz X2N0eC0+cmVjdXJzaW9uX2RlcHRoIC0gMVUpOworCQkJCX0KKwkJCX0KKwkJCURVS19fRU1JVF8x KGpzX2N0eCwgRFVLX0FTQ19SQ1VSTFkpOworCQl9IGVsc2UgaWYgKGNfYml0ICYgY19hcnJheSkg eworCQkJZHVrX3VpbnRfZmFzdDMyX3QgYXJyX2xlbjsKKwkJCWR1a191aW50X2Zhc3QzMl90IGFz aXplOworCisJCQlEVUtfX0VNSVRfMShqc19jdHgsIERVS19BU0NfTEJSQUNLRVQpOworCisJCQkv KiBBc3N1bWUgYXJyYXlzIGFyZSBkZW5zZSBpbiB0aGUgZmFzdCBwYXRoLiAqLworCQkJaWYgKCFE VUtfSE9CSkVDVF9IQVNfQVJSQVlfUEFSVChvYmopKSB7CisJCQkJRFVLX0REKERVS19ERFBSSU5U KCJBcnJheSBvYmplY3QgaXMgc3BhcnNlLCBhYm9ydCBmYXN0IHBhdGgiKSk7CisJCQkJZ290byBh Ym9ydF9mYXN0cGF0aDsKKwkJCX0KKworCQkJYXJyX2xlbiA9IChkdWtfdWludF9mYXN0MzJfdCkg KChkdWtfaGFycmF5ICopIG9iaiktPmxlbmd0aDsKKwkJCWFzaXplID0gKGR1a191aW50X2Zhc3Qz Ml90KSBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob2JqKTsKKwkJCS8qIEFycmF5IHBhcnQgbWF5IGJl IGxhcmdlciB0aGFuICdsZW5ndGgnOyBpZiBzbywgaXRlcmF0ZQorCQkJICogb25seSB1cCB0byBh cnJheSAnbGVuZ3RoJy4gIEFycmF5IHBhcnQgbWF5IGFsc28gYmUgc21hbGxlcgorCQkJICogdGhh biAnbGVuZ3RoJyBpbiBzb21lIGNhc2VzLgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgYXJy X2xlbjsgaSsrKSB7CisJCQkJZHVrX3R2YWwgKnR2X2FycnZhbDsKKwkJCQlkdWtfaHN0cmluZyAq aF90bXA7CisJCQkJZHVrX2Jvb2xfdCBoYXNfaW5oZXJpdGVkOworCisJCQkJaWYgKERVS19VTkxJ S0VMWShqc19jdHgtPmhfZ2FwICE9IE5VTEwpKSB7CisJCQkJCWR1a19fZW5jX25ld2xpbmVfaW5k ZW50KGpzX2N0eCwganNfY3R4LT5yZWN1cnNpb25fZGVwdGgpOworCQkJCX0KKworCQkJCWlmIChE VUtfTElLRUxZKGkgPCBhc2l6ZSkpIHsKKwkJCQkJdHZfYXJydmFsID0gRFVLX0hPQkpFQ1RfQV9H RVRfVkFMVUVfUFRSKGpzX2N0eC0+dGhyLT5oZWFwLCBvYmosIGkpOworCQkJCQlpZiAoRFVLX0xJ S0VMWSghRFVLX1RWQUxfSVNfVU5VU0VEKHR2X2FycnZhbCkpKSB7CisJCQkJCQkvKiBFeHBlY3Rl ZCBjYXNlOiBlbGVtZW50IGlzIHByZXNlbnQuICovCisJCQkJCQlpZiAoZHVrX19qc29uX3N0cmlu Z2lmeV9mYXN0X3ZhbHVlKGpzX2N0eCwgdHZfYXJydmFsKSA9PSAwKSB7CisJCQkJCQkJRFVLX19F TUlUX1NUUklEWChqc19jdHgsIERVS19TVFJJRFhfTENfTlVMTCk7CisJCQkJCQl9CisJCQkJCQln b3RvIGVsZW1fZG9uZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIEdhcCBpbiBhcnJheTsgY2hl Y2sgZm9yIGluaGVyaXRlZCBwcm9wZXJ0eSwKKwkJCQkgKiBiYWlsIG91dCBpZiBvbmUgZXhpc3Rz LiAgVGhpcyBzaG91bGQgYmUgZW5vdWdoCisJCQkJICogdG8gc3VwcG9ydCBnYXBweSBhcnJheXMg Zm9yIGFsbCBwcmFjdGljYWwgY29kZS4KKwkJCQkgKi8KKworCQkJCWhfdG1wID0gZHVrX3B1c2hf dWludF90b19oc3RyaW5nKGpzX2N0eC0+dGhyLCAoZHVrX3VpbnRfdCkgaSk7CisJCQkJaGFzX2lu aGVyaXRlZCA9IGR1a19ob2JqZWN0X2hhc3Byb3BfcmF3KGpzX2N0eC0+dGhyLCBvYmosIGhfdG1w KTsKKwkJCQlkdWtfcG9wKGpzX2N0eC0+dGhyKTsKKwkJCQlpZiAoaGFzX2luaGVyaXRlZCkgewor CQkJCQlEVUtfRChEVUtfRFBSSU5UKCJnYXAgaW4gYXJyYXksIGNvbmZsaWN0aW5nIGluaGVyaXRl ZCBwcm9wZXJ0eSwgYWJvcnQgZmFzdCBwYXRoIikpOworCQkJCQlnb3RvIGFib3J0X2Zhc3RwYXRo OworCQkJCX0KKworCQkJCS8qIE9yZGluYXJ5IGdhcCwgdW5kZWZpbmVkIGVuY29kZXMgdG8gJ251 bGwnIGluCisJCQkJICogc3RhbmRhcmQgSlNPTiwgYnV0IEpYL0pDIHVzZSB0aGVpciBmb3JtIGZv cgorCQkJCSAqIHVuZGVmaW5lZCB0byBiZXR0ZXIgcHJlc2VydmUgdGhlIHR5cGluZy4KKwkJCQkg Ki8KKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJnYXAgaW4gYXJyYXksIG5vIGNvbmZsaWN0aW5nIGlu aGVyaXRlZCBwcm9wZXJ0eSwgcmVtYWluIG9uIGZhc3QgcGF0aCIpKTsKKyNpZiBkZWZpbmVkKERV S19VU0VfSlgpCisJCQkJRFVLX19FTUlUX1NUUklEWChqc19jdHgsIGpzX2N0eC0+c3RyaWR4X2N1 c3RvbV91bmRlZmluZWQpOworI2Vsc2UKKwkJCQlEVUtfX0VNSVRfU1RSSURYKGpzX2N0eCwgRFVL X1NUUklEWF9MQ19OVUxMKTsKKyNlbmRpZgorCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCQkg ZWxlbV9kb25lOgorCQkJCURVS19fRU1JVF8xKGpzX2N0eCwgRFVLX0FTQ19DT01NQSk7CisJCQkJ ZW1pdHRlZCA9IDE7CisJCQl9CisKKwkJCWlmIChlbWl0dGVkKSB7CisJCQkJRFVLX0FTU0VSVCgq KChkdWtfdWludDhfdCAqKSBEVUtfQldfR0VUX1BUUihqc19jdHgtPnRociwgJmpzX2N0eC0+Yncp IC0gMSkgPT0gRFVLX0FTQ19DT01NQSk7CisJCQkJRFVLX19VTkVNSVRfMShqc19jdHgpOyAgLyog ZWF0IHRyYWlsaW5nIGNvbW1hICovCisJCQkJaWYgKERVS19VTkxJS0VMWShqc19jdHgtPmhfZ2Fw ICE9IE5VTEwpKSB7CisJCQkJCURVS19BU1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0g MSk7CisJCQkJCWR1a19fZW5jX25ld2xpbmVfaW5kZW50KGpzX2N0eCwganNfY3R4LT5yZWN1cnNp b25fZGVwdGggLSAxVSk7CisJCQkJfQorCQkJfQorCQkJRFVLX19FTUlUXzEoanNfY3R4LCBEVUtf QVNDX1JCUkFDS0VUKTsKKwkJfSBlbHNlIGlmIChjX2JpdCAmIGNfdW5ib3gpIHsKKwkJCS8qIENl cnRhaW4gYm94ZWQgdHlwZXMgYXJlIHJlcXVpcmVkIHRvIGdvIHRocm91Z2gKKwkJCSAqIGF1dG9t YXRpYyB1bmJveGluZy4gIFJlbHkgb24gaW50ZXJuYWwgdmFsdWUgYmVpbmcKKwkJCSAqIHNhbmUg KHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbikuCisJCQkgKi8KKwkJCURVS19BU1NFUlQoKGNf Yml0ICYgRFVLX0hPQkpFQ1RfQ01BU0tfU1lNQk9MKSA9PSAwKTsgIC8qIFN5bWJvbHMgYXJlIG5v dCB1bmJveGVkLiAqLworCisjaWYgMQorCQkJLyogVGhlIGNvZGUgYmVsb3cgaXMgaW5jb3JyZWN0 IGlmIC50b1N0cmluZygpIG9yIC52YWx1ZU9mKCkgaGF2ZQorCQkJICogaGF2ZSBiZWVuIG92ZXJy aWRkZW4uICBUaGUgY29ycmVjdCBhcHByb2FjaCB3b3VsZCBiZSB0byBsb29rIHVwCisJCQkgKiB0 aGUgbWV0aG9kKHMpIGFuZCBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9u IHdlCisJCQkgKiBjYW4gc2FmZWx5IGJ5cGFzcyBpdCBhbmQgbG9vayB1cCB0aGUgaW50ZXJuYWwg dmFsdWUgZGlyZWN0bHkuCisJCQkgKiBVbmltcGxlbWVudGVkIGZvciBub3csIGFib3J0IGZhc3Qg cGF0aCBmb3IgYm94ZWQgdmFsdWVzLgorCQkJICovCisJCQlnb3RvIGFib3J0X2Zhc3RwYXRoOwor I2Vsc2UgIC8qIGRpc2FibGVkICovCisJCQkvKiBEaXNhYmxlZCB1bnRpbCBmaXhlZCwgc2VlIGFi b3ZlLiAqLworCQkJZHVrX3R2YWwgKnR2X2ludGVybmFsOworCisJCQlEVUtfREQoRFVLX0REUFJJ TlQoImF1dG8gdW5ib3hpbmcgaW4gZmFzdCBwYXRoIikpOworCisJCQl0dl9pbnRlcm5hbCA9IGR1 a19ob2JqZWN0X2dldF9pbnRlcm5hbF92YWx1ZV90dmFsX3B0cihqc19jdHgtPnRoci0+aGVhcCwg b2JqKTsKKwkJCURVS19BU1NFUlQodHZfaW50ZXJuYWwgIT0gTlVMTCk7CisJCQlEVUtfQVNTRVJU KERVS19UVkFMX0lTX1NUUklORyh0dl9pbnRlcm5hbCkgfHwKKwkJCSAgICAgICAgICAgRFVLX1RW QUxfSVNfTlVNQkVSKHR2X2ludGVybmFsKSB8fAorCQkJICAgICAgICAgICBEVUtfVFZBTF9JU19C T09MRUFOKHR2X2ludGVybmFsKSB8fAorCQkJICAgICAgICAgICBEVUtfVFZBTF9JU19QT0lOVEVS KHR2X2ludGVybmFsKSk7CisKKwkJCXR2ID0gdHZfaW50ZXJuYWw7CisJCQlEVUtfQVNTRVJUKGpz X2N0eC0+cmVjdXJzaW9uX2RlcHRoID4gMCk7CisJCQlqc19jdHgtPnJlY3Vyc2lvbl9kZXB0aC0t OyAgLyogcmVxdWlyZWQgdG8ga2VlcCByZWN1cnNpb24gZGVwdGggY29ycmVjdCAqLworCQkJZ290 byByZXN0YXJ0X21hdGNoOworI2VuZGlmICAvKiBkaXNhYmxlZCAqLworI2lmIGRlZmluZWQoRFVL X1VTRV9KWCkgfHwgZGVmaW5lZChEVUtfVVNFX0pDKQorCQl9IGVsc2UgaWYgKGNfYml0ICYgY19m dW5jKSB7CisJCQlEVUtfX0VNSVRfU1RSSURYKGpzX2N0eCwganNfY3R4LT5zdHJpZHhfY3VzdG9t X2Z1bmN0aW9uKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisJ CX0gZWxzZSBpZiAoY19iaXQgJiBjX2J1Zm9iaikgeworCQkJZHVrX19lbmNfYnVmb2JqKGpzX2N0 eCwgKGR1a19oYnVmb2JqICopIG9iaik7CisjZW5kaWYKKyNlbmRpZgorCQl9IGVsc2UgaWYgKGNf Yml0ICYgY19hYm9ydCkgeworCQkJRFVLX0REKERVS19ERFBSSU5UKCJhYm9ydCBmYXN0IHBhdGgg Zm9yIHVuc3VwcG9ydGVkIHR5cGUiKSk7CisJCQlnb3RvIGFib3J0X2Zhc3RwYXRoOworCQl9IGVs c2UgeworCQkJRFVLX0FTU0VSVCgoY19iaXQgJiBjX3VuZGVmKSAhPSAwKTsKKworCQkJLyogTXVz dCBkZWNyZWFzZSByZWN1cnNpb24gZGVwdGggYmVmb3JlIHJldHVybmluZy4gKi8KKwkJCURVS19B U1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPiAwKTsKKwkJCURVS19BU1NFUlQoanNfY3R4 LT5yZWN1cnNpb25fZGVwdGggPD0ganNfY3R4LT5yZWN1cnNpb25fbGltaXQpOworCQkJanNfY3R4 LT5yZWN1cnNpb25fZGVwdGgtLTsKKwkJCWdvdG8gZW1pdF91bmRlZmluZWQ7CisJCX0KKworCQlE VUtfQVNTRVJUKGpzX2N0eC0+cmVjdXJzaW9uX2RlcHRoID4gMCk7CisJCURVS19BU1NFUlQoanNf Y3R4LT5yZWN1cnNpb25fZGVwdGggPD0ganNfY3R4LT5yZWN1cnNpb25fbGltaXQpOworCQlqc19j dHgtPnJlY3Vyc2lvbl9kZXB0aC0tOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX0JVRkZF UjogeworCQkvKiBQbGFpbiBidWZmZXJzIGFyZSB0cmVhdGVkIGxpa2UgVWludDhBcnJheXM6IHRo ZXkgaGF2ZQorCQkgKiBlbnVtZXJhYmxlIGluZGljZXMuICBPdGhlciB2aXJ0dWFsIHByb3BlcnRp ZXMgYXJlIG5vdAorCQkgKiBlbnVtZXJhYmxlLCBhbmQgaW5oZXJpdGVkIHByb3BlcnRpZXMgYXJl IG5vdCBzZXJpYWxpemVkLgorCQkgKiBIb3dldmVyLCB0aGVyZSBjYW4gYmUgYSByZXBsYWNlciAo bm90IHJlbGV2YW50IGhlcmUpIG9yCisJCSAqIGEgLnRvSlNPTigpIG1ldGhvZCAod2hpY2ggd2Ug bmVlZCB0byBjaGVjayBmb3IgZXhwbGljaXRseSkuCisJCSAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorCQlpZiAoZHVrX2hvYmplY3RfaGFzcHJvcF9yYXco anNfY3R4LT50aHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc19jdHgtPnRoci0+ YnVpbHRpbnNbRFVLX0JJRFhfVUlOVDhBUlJBWV9QUk9UT1RZUEVdLAorCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hUSFJFQURfU1RSSU5HX1RPX0pTT04oanNfY3R4LT50aHIpKSkg eworCQkJRFVLX0REKERVS19ERFBSSU5UKCJ2YWx1ZSBpcyBhIHBsYWluIGJ1ZmZlciBhbmQgdGhl cmUncyBhbiBpbmhlcml0ZWQgLnRvSlNPTiwgYWJvcnQgZmFzdCBwYXRoIikpOworCQkJZ290byBh Ym9ydF9mYXN0cGF0aDsKKwkJfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfSlgpIHx8 IGRlZmluZWQoRFVLX1VTRV9KQykKKwkJaWYgKGpzX2N0eC0+ZmxhZ19leHRfY3VzdG9tX29yX2Nv bXBhdGlibGUpIHsKKwkJCWR1a19fZW5jX2J1ZmZlcl9qeF9qYyhqc19jdHgsIERVS19UVkFMX0dF VF9CVUZGRVIodHYpKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKworCQkvKiBQbGFpbiBidWZm ZXJzIG1pbWljIFVpbnQ4QXJyYXlzLCBhbmQgaGF2ZSBlbnVtZXJhYmxlIGluZGV4CisJCSAqIHBy b3BlcnRpZXMuCisJCSAqLworCQlkdWtfX2VuY19idWZmZXJfanNvbl9mYXN0cGF0aChqc19jdHgs IERVS19UVkFMX0dFVF9CVUZGRVIodHYpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RBR19Q T0lOVEVSOiB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0pYKSB8fCBkZWZpbmVkKERVS19VU0VfSkMp CisJCWlmIChqc19jdHgtPmZsYWdfZXh0X2N1c3RvbV9vcl9jb21wYXRpYmxlKSB7CisJCQlkdWtf X2VuY19wb2ludGVyKGpzX2N0eCwgRFVLX1RWQUxfR0VUX1BPSU5URVIodHYpKTsKKwkJCWJyZWFr OworCQl9IGVsc2UgeworCQkJZ290byBlbWl0X3VuZGVmaW5lZDsKKwkJfQorI2Vsc2UKKwkJZ290 byBlbWl0X3VuZGVmaW5lZDsKKyNlbmRpZgorCX0KKwljYXNlIERVS19UQUdfTElHSFRGVU5DOiB7 CisJCS8qIEEgbGlnaHRmdW5jIG1pZ2h0IGFsc28gaW5oZXJpdCBhIC50b0pTT04oKSBzbyBqdXN0 IGJhaWwgb3V0LiAqLworCQkvKiBYWFg6IENvdWxkIGp1c3QgbG9va3VwIC50b0pTT04oKSBhbmQg Y29udGludWUgaW4gZmFzdCBwYXRoLAorCQkgKiBhcyBpdCB3b3VsZCBhbG1vc3QgbmV2ZXIgYmUg ZGVmaW5lZC4KKwkJICovCisJCURVS19ERChEVUtfRERQUklOVCgidmFsdWUgaXMgYSBsaWdodGZ1 bmMsIGFib3J0IGZhc3QgcGF0aCIpKTsKKwkJZ290byBhYm9ydF9mYXN0cGF0aDsKKwl9CisjaWYg ZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJY2FzZSBEVUtfVEFHX0ZBU1RJTlQ6IHsKKwkJLyog TnVtYmVyIHNlcmlhbGl6YXRpb24gaGFzIGEgc2lnbmlmaWNhbnQgaW1wYWN0IHJlbGF0aXZlIHRv CisJCSAqIG90aGVyIGZhc3QgcGF0aCBjb2RlLCBzbyBjYXJlZnVsIGZhc3QgcGF0aCBmb3IgZmFz dGludHMuCisJCSAqLworCQlkdWtfX2VuY19mYXN0aW50X3R2YWwoanNfY3R4LCB0dik7CisJCWJy ZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6IHsKKwkJLyogWFhYOiBBIGZhc3QgcGF0aCBmb3Ig dXN1YWwgaW50ZWdlcnMgd291bGQgYmUgdXNlZnVsIHdoZW4KKwkJICogZmFzdGludCBzdXBwb3J0 IGlzIG5vdCBlbmFibGVkLgorCQkgKi8KKwkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNfVU5VU0VE KHR2KSk7CisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2KSk7CisKKwkJLyogWFhY OiBTdGFjayBkaXNjaXBsaW5lIGlzIGFubm95aW5nLCBjb3VsZCBiZSBjaGFuZ2VkIGluIG51bWNv bnYuICovCisJCWR1a19wdXNoX3R2YWwoanNfY3R4LT50aHIsIHR2KTsKKwkJZHVrX19lbmNfZG91 YmxlKGpzX2N0eCk7CisJCWR1a19wb3AoanNfY3R4LT50aHIpOworCisjaWYgMAorCQkvKiBDb3Vs ZCBhbHNvIHJlbHkgb24gbmF0aXZlIHNwcmludGYoKSwgYnV0IGl0IHdpbGwgaGFuZGxlCisJCSAq IHZhbHVlcyBsaWtlIE5hTiwgSW5maW5pdHksIC0wLCBleHBvbmVudCBub3RhdGlvbiBldGMgaW4K KwkJICogYSBKU09OLWluY29tcGF0aWJsZSB3YXkuCisJCSAqLworCQlkdWtfZG91YmxlX3QgZDsK KwkJY2hhciBidWZbNjRdOworCisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfRE9VQkxFKHR2KSk7 CisJCWQgPSBEVUtfVFZBTF9HRVRfRE9VQkxFKHR2KTsKKwkJRFVLX1NQUklOVEYoYnVmLCAiJWxn IiwgZCk7CisJCURVS19fRU1JVF9DU1RSKGpzX2N0eCwgYnVmKTsKKyNlbmRpZgorCX0KKwl9CisJ cmV0dXJuIDE7ICAvKiBub3QgdW5kZWZpbmVkICovCisKKyBlbWl0X3VuZGVmaW5lZDoKKwlyZXR1 cm4gMDsgIC8qIHZhbHVlIHdhcyB1bmRlZmluZWQvdW5zdXBwb3J0ZWQgKi8KKworIGFib3J0X2Zh c3RwYXRoOgorCS8qIEVycm9yIG1lc3NhZ2UgZG9lc24ndCBtYXR0ZXI6IHRoZSBlcnJvciBpcyBp Z25vcmVkIGFueXdheS4gKi8KKwlEVUtfREQoRFVLX0REUFJJTlQoImFib3J0aW5nIGZhc3QgcGF0 aCIpKTsKKwlEVUtfRVJST1JfSU5URVJOQUwoanNfY3R4LT50aHIpOworCURVS19XT19OT1JFVFVS TihyZXR1cm4gMDspOworfQorCitEVUtfTE9DQUwgZHVrX3JldF90IGR1a19fanNvbl9zdHJpbmdp ZnlfZmFzdChkdWtfaHRocmVhZCAqdGhyLCB2b2lkICp1ZGF0YSkgeworCWR1a19qc29uX2VuY19j dHggKmpzX2N0eDsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsK KwlEVUtfQVNTRVJUKHVkYXRhICE9IE5VTEwpOworCisJanNfY3R4ID0gKGR1a19qc29uX2VuY19j dHggKikgdWRhdGE7CisJRFVLX0FTU0VSVChqc19jdHggIT0gTlVMTCk7CisKKwl0diA9IERVS19H RVRfVFZBTF9ORUdJRFgodGhyLCAtMSk7CisJaWYgKGR1a19fanNvbl9zdHJpbmdpZnlfZmFzdF92 YWx1ZShqc19jdHgsIHR2KSA9PSAwKSB7CisJCURVS19ERChEVUtfRERQUklOVCgidG9wIGxldmVs IHZhbHVlIG5vdCBzdXBwb3J0ZWQsIGZhaWwgZmFzdCBwYXRoIikpOworCQlEVUtfRENFUlJPUl9U WVBFX0lOVkFMSURfQVJHUyh0aHIpOyAgLyogRXJyb3IgbWVzc2FnZSBpcyBpZ25vcmVkLCBzbyBk b2Vzbid0IG1hdHRlci4gKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAgLyogRFVLX1VT RV9KU09OX1NUUklOR0lGWV9GQVNUUEFUSCAqLworCisvKgorICogIFRvcCBsZXZlbCB3cmFwcGVy cworICovCisKK0RVS19JTlRFUk5BTAordm9pZCBkdWtfYmlfanNvbl9wYXJzZV9oZWxwZXIoZHVr X2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19pZHhfdCBp ZHhfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X3Jl dml2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc21hbGxfdWludF90IGZs YWdzKSB7CisJZHVrX2pzb25fZGVjX2N0eCBqc19jdHhfYWxsb2M7CisJZHVrX2pzb25fZGVjX2N0 eCAqanNfY3R4ID0gJmpzX2N0eF9hbGxvYzsKKwlkdWtfaHN0cmluZyAqaF90ZXh0OworI2lmIGRl ZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCWR1a19pZHhfdCBlbnRyeV90b3AgPSBkdWtfZ2V0 X3RvcCh0aHIpOworI2VuZGlmCisKKwkvKiBuZWdhdGl2ZSB0b3AtcmVsYXRpdmUgaW5kaWNlcyBu b3QgYWxsb3dlZCBub3cgKi8KKwlEVUtfQVNTRVJUKGlkeF92YWx1ZSA9PSBEVUtfSU5WQUxJRF9J TkRFWCB8fCBpZHhfdmFsdWUgPj0gMCk7CisJRFVLX0FTU0VSVChpZHhfcmV2aXZlciA9PSBEVUtf SU5WQUxJRF9JTkRFWCB8fCBpZHhfcmV2aXZlciA+PSAwKTsKKworCURVS19EREQoRFVLX0RERFBS SU5UKCJKU09OIHBhcnNlIHN0YXJ0OiB0ZXh0PSUhVCwgcmV2aXZlcj0lIVQsIGZsYWdzPTB4JTA4 bHgsIHN0YWNrX3RvcD0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBk dWtfZ2V0X3R2YWwodGhyLCBpZHhfdmFsdWUpLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtf dHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCBpZHhfcmV2aXZlciksCisJICAgICAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcpIGZsYWdzLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSBkdWtfZ2V0X3RvcCh0aHIpKSk7CisKKwlkdWtfbWVtemVybygmanNfY3R4X2FsbG9jLCBzaXpl b2YoanNfY3R4X2FsbG9jKSk7CisJanNfY3R4LT50aHIgPSB0aHI7CisjaWYgZGVmaW5lZChEVUtf VVNFX0VYUExJQ0lUX05VTExfSU5JVCkKKwkvKiBub3RoaW5nIG5vdyAqLworI2VuZGlmCisJanNf Y3R4LT5yZWN1cnNpb25fbGltaXQgPSBEVUtfVVNFX0pTT05fREVDX1JFQ0xJTUlUOworCURVS19B U1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVwdGggPT0gMCk7CisKKwkvKiBGbGFnIGhhbmRsaW5n IGN1cnJlbnRseSBhc3N1bWVzIHRoYXQgZmxhZ3MgYXJlIGNvbnNpc3RlbnQuICBUaGlzIGlzIE9L CisJICogYmVjYXVzZSB0aGUgY2FsbCBzaXRlcyBhcmUgbm93IHN0cmljdGx5IGNvbnRyb2xsZWQu CisJICovCisKKwlqc19jdHgtPmZsYWdzID0gZmxhZ3M7CisjaWYgZGVmaW5lZChEVUtfVVNFX0pY KQorCWpzX2N0eC0+ZmxhZ19leHRfY3VzdG9tID0gZmxhZ3MgJiBEVUtfSlNPTl9GTEFHX0VYVF9D VVNUT007CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfSkMpCisJanNfY3R4LT5mbGFnX2V4 dF9jb21wYXRpYmxlID0gZmxhZ3MgJiBEVUtfSlNPTl9GTEFHX0VYVF9DT01QQVRJQkxFOworI2Vu ZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0pYKSB8fCBkZWZpbmVkKERVS19VU0VfSkMpCisJanNf Y3R4LT5mbGFnX2V4dF9jdXN0b21fb3JfY29tcGF0aWJsZSA9IGZsYWdzICYgKERVS19KU09OX0ZM QUdfRVhUX0NVU1RPTSB8IERVS19KU09OX0ZMQUdfRVhUX0NPTVBBVElCTEUpOworI2VuZGlmCisK KwloX3RleHQgPSBkdWtfdG9faHN0cmluZyh0aHIsIGlkeF92YWx1ZSk7ICAvKiBjb2VyY2UgaW4t cGxhY2U7IHJlamVjdHMgU3ltYm9scyAqLworCURVS19BU1NFUlQoaF90ZXh0ICE9IE5VTEwpOwor CisJLyogSlNPTiBwYXJzaW5nIGNvZGUgaXMgYWxsb3dlZCB0byByZWFkIFtwX3N0YXJ0LHBfZW5k XTogcF9lbmQgaXMKKwkgKiB2YWxpZCBhbmQgcG9pbnRzIHRvIHRoZSBzdHJpbmcgTlVMIHRlcm1p bmF0b3IgKHdoaWNoIGlzIGFsd2F5cworCSAqIGd1YXJhbnRlZWQgZm9yIGR1a19oc3RyaW5ncy4K KwkgKi8KKwlqc19jdHgtPnBfc3RhcnQgPSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hTVFJJ TkdfR0VUX0RBVEEoaF90ZXh0KTsKKwlqc19jdHgtPnAgPSBqc19jdHgtPnBfc3RhcnQ7CisJanNf Y3R4LT5wX2VuZCA9ICgoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEo aF90ZXh0KSkgKworCSAgICAgICAgICAgICAgICBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX3Rl eHQpOworCURVS19BU1NFUlQoKihqc19jdHgtPnBfZW5kKSA9PSAweDAwKTsKKworCWR1a19fZGVj X3ZhbHVlKGpzX2N0eCk7ICAvKiAtPiBbIC4uLiB2YWx1ZSBdICovCisKKwkvKiBUcmFpbGluZyB3 aGl0ZXNwYWNlIGhhcyBiZWVuIGVhdGVuIGJ5IGR1a19fZGVjX3ZhbHVlKCksIHNvIGlmCisJICog d2UncmUgbm90IGF0IGVuZCBvZiBpbnB1dCBoZXJlLCBpdCdzIGEgU3ludGF4RXJyb3IuCisJICov CisKKwlpZiAoanNfY3R4LT5wICE9IGpzX2N0eC0+cF9lbmQpIHsKKwkJZHVrX19kZWNfc3ludGF4 X2Vycm9yKGpzX2N0eCk7CisJfQorCisJaWYgKGR1a19pc19jYWxsYWJsZSh0aHIsIGlkeF9yZXZp dmVyKSkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiYXBwbHlpbmcgcmV2aXZlcjogJSFUIiwK KwkJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlk eF9yZXZpdmVyKSkpOworCisJCWpzX2N0eC0+aWR4X3Jldml2ZXIgPSBpZHhfcmV2aXZlcjsKKwor CQlkdWtfcHVzaF9vYmplY3QodGhyKTsKKwkJZHVrX2R1cF9tMih0aHIpOyAgLyogLT4gWyAuLi4g dmFsIHJvb3QgdmFsIF0gKi8KKwkJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0yLCBE VUtfU1RSSURYX0VNUFRZX1NUUklORyk7ICAvKiBkZWZhdWx0IGF0dHJzIG9rICovCisJCWR1a19w dXNoX2hzdHJpbmdfc3RyaWR4KHRociwgRFVLX1NUUklEWF9FTVBUWV9TVFJJTkcpOyAgLyogLT4g WyAuLi4gdmFsIHJvb3QgIiIgXSAqLworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJzdGFydCBy ZXZpdmVyIHdhbGssIHJvb3Q9JSFULCBuYW1lPSUhVCIsCisJCSAgICAgICAgICAgICAgICAgICAg IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMiksCisJCSAgICAgICAgICAgICAgICAg ICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCQlkdWtfX2RlY19y ZXZpdmVyX3dhbGsoanNfY3R4KTsgIC8qIFsgLi4uIHZhbCByb290ICIiIF0gLT4gWyAuLi4gdmFs IHZhbCcgXSAqLworCQlkdWtfcmVtb3ZlX20yKHRocik7ICAgICAgICAgICAgIC8qIC0+IFsgLi4u IHZhbCcgXSAqLworCX0gZWxzZSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJyZXZpdmVyIGRv ZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBjYWxsYWJsZTogJSFUIiwKKwkJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlkeF9yZXZpdmVyKSkpOworCX0K KworCS8qIEZpbmFsIHJlc3VsdCBpcyBhdCBzdGFjayB0b3AuICovCisKKwlEVUtfREREKERVS19E RERQUklOVCgiSlNPTiBwYXJzZSBlbmQ6IHRleHQ9JSFULCByZXZpdmVyPSUhVCwgZmxhZ3M9MHgl MDhseCwgcmVzdWx0PSUhVCwgc3RhY2tfdG9wPSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAg KGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlkeF92YWx1ZSksCisJICAgICAgICAgICAg ICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlkeF9yZXZpdmVyKSwKKwkg ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgZmxhZ3MsCisJICAgICAgICAgICAg ICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwKKwkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgZHVrX2dldF90b3AodGhyKSkpOworCisJRFVLX0FTU0VSVChkdWtf Z2V0X3RvcCh0aHIpID09IGVudHJ5X3RvcCArIDEpOworfQorCitEVUtfSU5URVJOQUwKK3ZvaWQg ZHVrX2JpX2pzb25fc3RyaW5naWZ5X2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19pZHhfdCBpZHhfdmFsdWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IGlkeF9yZXBsYWNlciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X3NwYWNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtf anNvbl9lbmNfY3R4IGpzX2N0eF9hbGxvYzsKKwlkdWtfanNvbl9lbmNfY3R4ICpqc19jdHggPSAm anNfY3R4X2FsbG9jOworCWR1a19ob2JqZWN0ICpoOworCWR1a19pZHhfdCBpZHhfaG9sZGVyOwor CWR1a19pZHhfdCBlbnRyeV90b3A7CisKKwkvKiBuZWdhdGl2ZSB0b3AtcmVsYXRpdmUgaW5kaWNl cyBub3QgYWxsb3dlZCBub3cgKi8KKwlEVUtfQVNTRVJUKGlkeF92YWx1ZSA9PSBEVUtfSU5WQUxJ RF9JTkRFWCB8fCBpZHhfdmFsdWUgPj0gMCk7CisJRFVLX0FTU0VSVChpZHhfcmVwbGFjZXIgPT0g RFVLX0lOVkFMSURfSU5ERVggfHwgaWR4X3JlcGxhY2VyID49IDApOworCURVS19BU1NFUlQoaWR4 X3NwYWNlID09IERVS19JTlZBTElEX0lOREVYIHx8IGlkeF9zcGFjZSA+PSAwKTsKKworCURVS19E REQoRFVLX0RERFBSSU5UKCJKU09OIHN0cmluZ2lmeSBzdGFydDogdmFsdWU9JSFULCByZXBsYWNl cj0lIVQsIHNwYWNlPSUhVCwgZmxhZ3M9MHglMDhseCwgc3RhY2tfdG9wPSVsZCIsCisJICAgICAg ICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlkeF92YWx1ZSks CisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGlk eF9yZXBsYWNlciksCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRf dHZhbCh0aHIsIGlkeF9zcGFjZSksCisJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxv bmcpIGZsYWdzLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBkdWtfZ2V0X3RvcCh0aHIp KSk7CisKKwllbnRyeV90b3AgPSBkdWtfZ2V0X3RvcCh0aHIpOworCisJLyoKKwkgKiAgQ29udGV4 dCBpbml0CisJICovCisKKwlkdWtfbWVtemVybygmanNfY3R4X2FsbG9jLCBzaXplb2YoanNfY3R4 X2FsbG9jKSk7CisJanNfY3R4LT50aHIgPSB0aHI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0VYUExJ Q0lUX05VTExfSU5JVCkKKwlqc19jdHgtPmhfcmVwbGFjZXIgPSBOVUxMOworCWpzX2N0eC0+aF9n YXAgPSBOVUxMOworI2VuZGlmCisJanNfY3R4LT5pZHhfcHJvcGxpc3QgPSAtMTsKKworCS8qIEZs YWcgaGFuZGxpbmcgY3VycmVudGx5IGFzc3VtZXMgdGhhdCBmbGFncyBhcmUgY29uc2lzdGVudC4g IFRoaXMgaXMgT0sKKwkgKiBiZWNhdXNlIHRoZSBjYWxsIHNpdGVzIGFyZSBub3cgc3RyaWN0bHkg Y29udHJvbGxlZC4KKwkgKi8KKworCWpzX2N0eC0+ZmxhZ3MgPSBmbGFnczsKKwlqc19jdHgtPmZs YWdfYXNjaWlfb25seSA9IGZsYWdzICYgRFVLX0pTT05fRkxBR19BU0NJSV9PTkxZOworCWpzX2N0 eC0+ZmxhZ19hdm9pZF9rZXlfcXVvdGVzID0gZmxhZ3MgJiBEVUtfSlNPTl9GTEFHX0FWT0lEX0tF WV9RVU9URVM7CisjaWYgZGVmaW5lZChEVUtfVVNFX0pYKQorCWpzX2N0eC0+ZmxhZ19leHRfY3Vz dG9tID0gZmxhZ3MgJiBEVUtfSlNPTl9GTEFHX0VYVF9DVVNUT007CisjZW5kaWYKKyNpZiBkZWZp bmVkKERVS19VU0VfSkMpCisJanNfY3R4LT5mbGFnX2V4dF9jb21wYXRpYmxlID0gZmxhZ3MgJiBE VUtfSlNPTl9GTEFHX0VYVF9DT01QQVRJQkxFOworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNF X0pYKSB8fCBkZWZpbmVkKERVS19VU0VfSkMpCisJanNfY3R4LT5mbGFnX2V4dF9jdXN0b21fb3Jf Y29tcGF0aWJsZSA9IGZsYWdzICYgKERVS19KU09OX0ZMQUdfRVhUX0NVU1RPTSB8IERVS19KU09O X0ZMQUdfRVhUX0NPTVBBVElCTEUpOworI2VuZGlmCisKKwkvKiBUaGUgI2lmIGRlZmluZWQoKSBj bHV0dGVyIGhlcmUgaGFuZGxlcyB0aGUgSlgvSkMgZW5hYmxlL2Rpc2FibGUKKwkgKiBjb21iaW5h dGlvbnMgcHJvcGVybHkuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0pYKSB8fCBkZWZpbmVk KERVS19VU0VfSkMpCisJanNfY3R4LT5zdHJpZHhfY3VzdG9tX3VuZGVmaW5lZCA9IERVS19TVFJJ RFhfTENfTlVMTDsgIC8qIHN0YW5kYXJkIEpTT047IGFycmF5IGdhcHMgKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfSlgpCisJaWYgKGZsYWdzICYgRFVLX0pTT05fRkxBR19FWFRfQ1VTVE9NKSB7CisJ CWpzX2N0eC0+c3RyaWR4X2N1c3RvbV91bmRlZmluZWQgPSBEVUtfU1RSSURYX0xDX1VOREVGSU5F RDsKKwkJanNfY3R4LT5zdHJpZHhfY3VzdG9tX25hbiA9IERVS19TVFJJRFhfTkFOOworCQlqc19j dHgtPnN0cmlkeF9jdXN0b21fbmVnaW5mID0gRFVLX1NUUklEWF9NSU5VU19JTkZJTklUWTsKKwkJ anNfY3R4LT5zdHJpZHhfY3VzdG9tX3Bvc2luZiA9IERVS19TVFJJRFhfSU5GSU5JVFk7CisJCWpz X2N0eC0+c3RyaWR4X2N1c3RvbV9mdW5jdGlvbiA9CisJCSAgICAgICAgKGZsYWdzICYgRFVLX0pT T05fRkxBR19BVk9JRF9LRVlfUVVPVEVTKSA/CisJCSAgICAgICAgICAgICAgICBEVUtfU1RSSURY X0pTT05fRVhUX0ZVTkNUSU9OMiA6CisJCSAgICAgICAgICAgICAgICBEVUtfU1RSSURYX0pTT05f RVhUX0ZVTkNUSU9OMTsKKwl9CisjZW5kaWYgIC8qIERVS19VU0VfSlggKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfSlgpICYmIGRlZmluZWQoRFVLX1VTRV9KQykKKwllbHNlCisjZW5kaWYgIC8qIERV S19VU0VfSlggJiYgRFVLX1VTRV9KQyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9KQykKKwlpZiAo anNfY3R4LT5mbGFncyAmIERVS19KU09OX0ZMQUdfRVhUX0NPTVBBVElCTEUpIHsKKwkJanNfY3R4 LT5zdHJpZHhfY3VzdG9tX3VuZGVmaW5lZCA9IERVS19TVFJJRFhfSlNPTl9FWFRfVU5ERUZJTkVE OworCQlqc19jdHgtPnN0cmlkeF9jdXN0b21fbmFuID0gRFVLX1NUUklEWF9KU09OX0VYVF9OQU47 CisJCWpzX2N0eC0+c3RyaWR4X2N1c3RvbV9uZWdpbmYgPSBEVUtfU1RSSURYX0pTT05fRVhUX05F R0lORjsKKwkJanNfY3R4LT5zdHJpZHhfY3VzdG9tX3Bvc2luZiA9IERVS19TVFJJRFhfSlNPTl9F WFRfUE9TSU5GOworCQlqc19jdHgtPnN0cmlkeF9jdXN0b21fZnVuY3Rpb24gPSBEVUtfU1RSSURY X0pTT05fRVhUX0ZVTkNUSU9OMTsKKwl9CisjZW5kaWYgIC8qIERVS19VU0VfSkMgKi8KKyNlbmRp ZiAgLyogRFVLX1VTRV9KWCB8fCBEVUtfVVNFX0pDICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf SlgpIHx8IGRlZmluZWQoRFVLX1VTRV9KQykKKwlpZiAoanNfY3R4LT5mbGFncyAmIChEVUtfSlNP Tl9GTEFHX0VYVF9DVVNUT00gfAorCSAgICAgICAgICAgICAgICAgICAgIERVS19KU09OX0ZMQUdf RVhUX0NPTVBBVElCTEUpKSB7CisJCURVS19BU1NFUlQoanNfY3R4LT5tYXNrX2Zvcl91bmRlZmlu ZWQgPT0gMCk7ICAvKiBhbHJlYWR5IHplcm8gKi8KKwl9CisJZWxzZQorI2VuZGlmICAvKiBEVUtf VVNFX0pYIHx8IERVS19VU0VfSkMgKi8KKwl7CisJCS8qIFBsYWluIGJ1ZmZlciBpcyB0cmVhdGVk IGxpa2UgQXJyYXlCdWZmZXIgYW5kIHNlcmlhbGl6ZWQuCisJCSAqIExpZ2h0ZnVuY3MgYXJlIHRy ZWF0ZWQgbGlrZSBvYmplY3RzLCBidXQgSlNPTiBleHBsaWNpdGx5CisJCSAqIHNraXBzIHNlcmlh bGl6aW5nIEZ1bmN0aW9uIG9iamVjdHMgc28gd2UgY2FuIGp1c3QgcmVqZWN0CisJCSAqIGxpZ2h0 ZnVuY3MgaGVyZS4KKwkJICovCisJCWpzX2N0eC0+bWFza19mb3JfdW5kZWZpbmVkID0gRFVLX1RZ UEVfTUFTS19VTkRFRklORUQgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19U WVBFX01BU0tfUE9JTlRFUiB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZ UEVfTUFTS19MSUdIVEZVTkM7CisJfQorCisJRFVLX0JXX0lOSVRfUFVTSEJVRih0aHIsICZqc19j dHgtPmJ3LCBEVUtfX0pTT05fU1RSSU5HSUZZX0JVRlNJWkUpOworCisJanNfY3R4LT5pZHhfbG9v cCA9IGR1a19wdXNoX2JhcmVfb2JqZWN0KHRocik7CisJRFVLX0FTU0VSVChqc19jdHgtPmlkeF9s b29wID49IDApOworCisJLyogWyAuLi4gYnVmIGxvb3AgXSAqLworCisJLyoKKwkgKiAgUHJvY2Vz cyByZXBsYWNlci9wcm9wbGlzdCAoMm5kIGFyZ3VtZW50IHRvIEpTT04uc3RyaW5naWZ5KQorCSAq LworCisJaCA9IGR1a19nZXRfaG9iamVjdCh0aHIsIGlkeF9yZXBsYWNlcik7CisJaWYgKGggIT0g TlVMTCkgeworCQlpZiAoRFVLX0hPQkpFQ1RfSVNfQ0FMTEFCTEUoaCkpIHsKKwkJCWpzX2N0eC0+ aF9yZXBsYWNlciA9IGg7CisJCX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJF UihoKSA9PSBEVUtfSE9CSkVDVF9DTEFTU19BUlJBWSkgeworCQkJLyogSGVyZSB0aGUgc3BlY2lm aWNhdGlvbiByZXF1aXJlcyBjb3JyZWN0IGFycmF5IGluZGV4IGVudW1lcmF0aW9uCisJCQkgKiB3 aGljaCBpcyBhIGJpdCB0cmlja3kgZm9yIHNwYXJzZSBhcnJheXMgKGl0IGlzIGhhbmRsZWQgYnkg dGhlCisJCQkgKiBlbnVtIHNldHVwIGNvZGUpLiAgV2Ugbm93IGVudW1lcmF0ZSBhbmNlc3RvcnMg dG9vLCBhbHRob3VnaCB0aGUKKwkJCSAqIHNwZWNpZmljYXRpb24gaXMgbm90IHZlcnkgY2xlYXIg b24gd2hldGhlciB0aGF0IGlzIHJlcXVpcmVkLgorCQkJICovCisKKwkJCWR1a191YXJyaWR4X3Qg cGxpc3RfaWR4ID0gMDsKKwkJCWR1a19zbWFsbF91aW50X3QgZW51bV9mbGFnczsKKworCQkJanNf Y3R4LT5pZHhfcHJvcGxpc3QgPSBkdWtfcHVzaF9hcnJheSh0aHIpOyAgLyogWFhYOiBhcnJheSBp bnRlcm5hbD8gKi8KKworCQkJZW51bV9mbGFncyA9IERVS19FTlVNX0FSUkFZX0lORElDRVNfT05M WSB8CisJCQkgICAgICAgICAgICAgRFVLX0VOVU1fU09SVF9BUlJBWV9JTkRJQ0VTOyAgLyogZXhw ZW5zaXZlIGZsYWcgKi8KKwkJCWR1a19lbnVtKHRociwgaWR4X3JlcGxhY2VyLCBlbnVtX2ZsYWdz KTsKKwkJCXdoaWxlIChkdWtfbmV4dCh0aHIsIC0xIC8qZW51bV9pbmRleCovLCAxIC8qZ2V0X3Zh bHVlKi8pKSB7CisJCQkJLyogWyAuLi4gcHJvcGxpc3QgZW51bV9vYmoga2V5IHZhbCBdICovCisJ CQkJaWYgKGR1a19fZW5jX2FsbG93X2ludG9fcHJvcGxpc3QoZHVrX2dldF90dmFsKHRociwgLTEp KSkgeworCQkJCQkvKiBYWFg6IGR1cGxpY2F0ZXMgc2hvdWxkIGJlIGVsaW1pbmF0ZWQgaGVyZSAq LworCQkJCQlEVUtfREREKERVS19ERERQUklOVCgicHJvcGxpc3QgZW51bToga2V5PSUhVCwgdmFs PSUhVCAtLT4gYWNjZXB0IiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICop IGR1a19nZXRfdHZhbCh0aHIsIC0yKSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgKGR1a190 dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkJCQlkdWtfdG9fc3RyaW5nKHRociwg LTEpOyAgLyogZXh0cmEgY29lcmNpb24gb2Ygc3RyaW5ncyBpcyBPSyAqLworCQkJCQlkdWtfcHV0 X3Byb3BfaW5kZXgodGhyLCAtNCwgcGxpc3RfaWR4KTsgIC8qIC0+IFsgLi4uIHByb3BsaXN0IGVu dW1fb2JqIGtleSBdICovCisJCQkJCXBsaXN0X2lkeCsrOworCQkJCQlkdWtfcG9wKHRocik7CisJ CQkJfSBlbHNlIHsKKwkJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInByb3BsaXN0IGVudW06IGtl eT0lIVQsIHZhbD0lIVQgLS0+IHJlamVjdCIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgIChk dWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMiksCisJCQkJCSAgICAgICAgICAgICAgICAg ICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwkJCQkJZHVrX3BvcF8y KHRocik7CisJCQkJfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX3BvcCh0aHIpOyAgLyogcG9wIGVudW0gKi8KKworCQkJLyogWyAuLi4gcHJv cGxpc3QgXSAqLworCQl9CisJfQorCisJLyogWyAuLi4gYnVmIGxvb3AgKHByb3BsaXN0KSBdICov CisKKwkvKgorCSAqICBQcm9jZXNzIHNwYWNlICgzcmQgYXJndW1lbnQgdG8gSlNPTi5zdHJpbmdp ZnkpCisJICovCisKKwloID0gZHVrX2dldF9ob2JqZWN0KHRociwgaWR4X3NwYWNlKTsKKwlpZiAo aCAhPSBOVUxMKSB7CisJCWR1a19zbWFsbF91aW50X3QgYyA9IERVS19IT0JKRUNUX0dFVF9DTEFT U19OVU1CRVIoaCk7CisJCWlmIChjID09IERVS19IT0JKRUNUX0NMQVNTX05VTUJFUikgeworCQkJ ZHVrX3RvX251bWJlcih0aHIsIGlkeF9zcGFjZSk7CisJCX0gZWxzZSBpZiAoYyA9PSBEVUtfSE9C SkVDVF9DTEFTU19TVFJJTkcpIHsKKwkJCWR1a190b19zdHJpbmcodGhyLCBpZHhfc3BhY2UpOwor CQl9CisJfQorCisJaWYgKGR1a19pc19udW1iZXIodGhyLCBpZHhfc3BhY2UpKSB7CisJCWR1a19z bWFsbF9pbnRfdCBuc3BhY2U7CisJCS8qIHNwYWNlc1tdIG11c3QgYmUgc3RhdGljIHRvIGFsbG93 IGluaXRpYWxpemVyIHdpdGggb2xkIGNvbXBpbGVycyBsaWtlIEJDQyAqLworCQlzdGF0aWMgY29u c3QgY2hhciBzcGFjZXNbMTBdID0geworCQkJRFVLX0FTQ19TUEFDRSwgRFVLX0FTQ19TUEFDRSwg RFVLX0FTQ19TUEFDRSwgRFVLX0FTQ19TUEFDRSwKKwkJCURVS19BU0NfU1BBQ0UsIERVS19BU0Nf U1BBQ0UsIERVS19BU0NfU1BBQ0UsIERVS19BU0NfU1BBQ0UsCisJCQlEVUtfQVNDX1NQQUNFLCBE VUtfQVNDX1NQQUNFCisJCX07ICAvKiBYWFg6IGhlbHBlciAqLworCisJCS8qIFRvSW50ZWdlcigp IGNvZXJjaW9uOyBOYU4gLT4gMCwgaW5maW5pdGllcyBhcmUgY2xhbXBlZCB0byAwIGFuZCAxMCAq LworCQluc3BhY2UgPSAoZHVrX3NtYWxsX2ludF90KSBkdWtfdG9faW50X2NsYW1wZWQodGhyLCBp ZHhfc3BhY2UsIDAgLyptaW52YWwqLywgMTAgLyptYXh2YWwqLyk7CisJCURVS19BU1NFUlQobnNw YWNlID49IDAgJiYgbnNwYWNlIDw9IDEwKTsKKworCQlkdWtfcHVzaF9sc3RyaW5nKHRociwgc3Bh Y2VzLCAoZHVrX3NpemVfdCkgbnNwYWNlKTsKKwkJanNfY3R4LT5oX2dhcCA9IGR1a19rbm93bl9o c3RyaW5nKHRociwgLTEpOworCQlEVUtfQVNTRVJUKGpzX2N0eC0+aF9nYXAgIT0gTlVMTCk7CisJ fSBlbHNlIGlmIChkdWtfaXNfc3RyaW5nX25vdHN5bWJvbCh0aHIsIGlkeF9zcGFjZSkpIHsKKwkJ ZHVrX2R1cCh0aHIsIGlkeF9zcGFjZSk7CisJCWR1a19zdWJzdHJpbmcodGhyLCAtMSwgMCwgMTAp OyAgLyogY2xhbXAgdG8gMTAgY2hhcnMgKi8KKwkJanNfY3R4LT5oX2dhcCA9IGR1a19rbm93bl9o c3RyaW5nKHRociwgLTEpOworCX0gZWxzZSB7CisJCS8qIG5vcCAqLworCX0KKworCWlmIChqc19j dHgtPmhfZ2FwICE9IE5VTEwpIHsKKwkJLyogSWYgZ2FwIGlzIGVtcHR5LCBiZWhhdmUgYXMgaWYg bm90IGdpdmVuIGF0IGFsbC4gIENoZWNrCisJCSAqIGFnYWluc3QgYnl0ZSBsZW5ndGggYmVjYXVz ZSBjaGFyYWN0ZXIgbGVuZ3RoIGlzIG1vcmUKKwkJICogZXhwZW5zaXZlLgorCQkgKi8KKwkJaWYg KERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGpzX2N0eC0+aF9nYXApID09IDApIHsKKwkJCWpzX2N0 eC0+aF9nYXAgPSBOVUxMOworCQl9CisJfQorCisJLyogWyAuLi4gYnVmIGxvb3AgKHByb3BsaXN0 KSAoZ2FwKSBdICovCisKKwkvKgorCSAqICBGYXN0IHBhdGg6IGFzc3VtZSBubyBtdXRhdGlvbiwg aXRlcmF0ZSBvYmplY3QgcHJvcGVydHkgdGFibGVzCisJICogIGRpcmVjdGx5OyBiYWlsIG91dCBp ZiB0aGF0IGFzc3VtcHRpb24gZG9lc24ndCBob2xkLgorCSAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX0pTT05fU1RSSU5HSUZZX0ZBU1RQQVRIKQorCWlmIChqc19jdHgtPmhfcmVwbGFjZXIgPT0g TlVMTCAmJiAgLyogcmVwbGFjZXIgaXMgYSBtdXRhdGlvbiByaXNrICovCisJICAgIGpzX2N0eC0+ aWR4X3Byb3BsaXN0ID09IC0xKSB7ICAvKiBwcm9wbGlzdCBpcyB2ZXJ5IHJhcmUgKi8KKwkJZHVr X2ludF90IHBjYWxsX3JjOworCQlkdWtfc21hbGxfdWludF90IHByZXZfbXNfYmFzZV9mbGFnczsK KworCQlEVUtfREQoRFVLX0REUFJJTlQoInRyeSBKU09OLnN0cmluZ2lmeSgpIGZhc3QgcGF0aCIp KTsKKworCQkvKiBVc2UgcmVjdXJzaW9uX2xpbWl0IHRvIGVuc3VyZSB3ZSBkb24ndCBvdmVyd3Jp dGUganNfY3R4LT52aXNpdGluZ1tdCisJCSAqIGFycmF5IHNvIHdlIGRvbid0IG5lZWQgdHdvIGNv dW50ZXIgY2hlY2tzIGluIHRoZSBmYXN0IHBhdGguICBUaGUKKwkJICogc2xvdyBwYXRoIGhhcyBh IG11Y2ggbGFyZ2VyIHJlY3Vyc2lvbiBsaW1pdCB3aGljaCB3ZSdsbCB1c2UgaWYKKwkJICogbmVj ZXNzYXJ5LgorCQkgKi8KKwkJRFVLX0FTU0VSVChEVUtfVVNFX0pTT05fRU5DX1JFQ0xJTUlUID49 IERVS19KU09OX0VOQ19MT09QQVJSQVkpOworCQlqc19jdHgtPnJlY3Vyc2lvbl9saW1pdCA9IERV S19KU09OX0VOQ19MT09QQVJSQVk7CisJCURVS19BU1NFUlQoanNfY3R4LT5yZWN1cnNpb25fZGVw dGggPT0gMCk7CisKKwkJLyogRXhlY3V0ZSB0aGUgZmFzdCBwYXRoIGluIGEgcHJvdGVjdGVkIGNh bGwuICBJZiBhbnkgZXJyb3IgaXMgdGhyb3duLAorCQkgKiBmYWxsIGJhY2sgdG8gdGhlIHNsb3cg cGF0aC4gIFRoaXMgaW5jbHVkZXMgZS5nLiByZWN1cnNpb24gbGltaXQKKwkJICogYmVjYXVzZSB0 aGUgZmFzdCBwYXRoIGhhcyBhIHNtYWxsZXIgcmVjdXJzaW9uIGxpbWl0IChhbmQgc2ltcGxlciwK KwkJICogbGltaXRlZCBsb29wIGRldGVjdGlvbikuCisJCSAqLworCisJCWR1a19kdXAodGhyLCBp ZHhfdmFsdWUpOworCisJCS8qIE11c3QgcHJldmVudCBmaW5hbGl6ZXJzIHdoaWNoIG1heSBoYXZl IGFyYml0cmFyeSBzaWRlIGVmZmVjdHMuICovCisJCXByZXZfbXNfYmFzZV9mbGFncyA9IHRoci0+ aGVhcC0+bXNfYmFzZV9mbGFnczsKKwkJdGhyLT5oZWFwLT5tc19iYXNlX2ZsYWdzIHw9CisJCSAg ICAgICAgRFVLX01TX0ZMQUdfTk9fT0JKRUNUX0NPTVBBQ1RJT047ICAgICAgLyogQXZvaWQgYXR0 ZW1wdCB0byBjb21wYWN0IGFueSBvYmplY3RzLiAqLworCQl0aHItPmhlYXAtPnBmX3ByZXZlbnRf Y291bnQrKzsgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQgZmluYWxpemVycy4gKi8KKwkJRFVL X0FTU0VSVCh0aHItPmhlYXAtPnBmX3ByZXZlbnRfY291bnQgIT0gMCk7ICAvKiBXcmFwLiAqLwor CisJCXBjYWxsX3JjID0gZHVrX3NhZmVfY2FsbCh0aHIsIGR1a19fanNvbl9zdHJpbmdpZnlfZmFz dCwgKHZvaWQgKikganNfY3R4IC8qdWRhdGEqLywgMSAvKm5hcmdzKi8sIDAgLypucmV0Ki8pOwor CisJCURVS19BU1NFUlQodGhyLT5oZWFwLT5wZl9wcmV2ZW50X2NvdW50ID4gMCk7CisJCXRoci0+ aGVhcC0+cGZfcHJldmVudF9jb3VudC0tOworCQl0aHItPmhlYXAtPm1zX2Jhc2VfZmxhZ3MgPSBw cmV2X21zX2Jhc2VfZmxhZ3M7CisKKwkJaWYgKHBjYWxsX3JjID09IERVS19FWEVDX1NVQ0NFU1Mp IHsKKwkJCURVS19ERChEVUtfRERQUklOVCgiZmFzdCBwYXRoIHN1Y2Nlc3NmdWwiKSk7CisJCQlE VUtfQldfUFVTSF9BU19TVFJJTkcodGhyLCAmanNfY3R4LT5idyk7CisJCQlnb3RvIHJlcGxhY2Vf ZmluaXNoZWQ7CisJCX0KKworCQkvKiBXZSBjb21lIGhlcmUgZm9yIGFjdHVhbCBhYm9ydHMgKGxp a2UgZW5jb3VudGVyaW5nIC50b0pTT04oKSkKKwkJICogYnV0IGFsc28gZm9yIHJlY3Vyc2lvbi9s b29wIGVycm9ycy4gIEJ1ZndyaXRlciBzaXplIGNhbiBiZQorCQkgKiBrZXB0IGJlY2F1c2Ugd2Un bGwgcHJvYmFibHkgbmVlZCBhdCBsZWFzdCBhcyBtdWNoIGFzIHdlJ3ZlCisJCSAqIGFsbG9jYXRl ZCBzbyBmYXIuCisJCSAqLworCQlEVUtfRChEVUtfRFBSSU5UKCJmYXN0IHBhdGggZmFpbGVkLCBz ZXJpYWxpemUgdXNpbmcgc2xvdyBwYXRoIGluc3RlYWQiKSk7CisJCURVS19CV19SRVNFVF9TSVpF KHRociwgJmpzX2N0eC0+YncpOworCQlqc19jdHgtPnJlY3Vyc2lvbl9kZXB0aCA9IDA7CisJfQor I2VuZGlmCisKKwkvKgorCSAqICBDcmVhdGUgd3JhcHBlciBvYmplY3QgYW5kIHNlcmlhbGl6ZQor CSAqLworCisJaWR4X2hvbGRlciA9IGR1a19wdXNoX29iamVjdCh0aHIpOworCWR1a19kdXAodGhy LCBpZHhfdmFsdWUpOworCWR1a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NU UklEWF9FTVBUWV9TVFJJTkcpOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImJlZm9yZTogZmxh Z3M9MHglMDhseCwgbG9vcD0lIVQsIHJlcGxhY2VyPSUhTywgIgorCSAgICAgICAgICAgICAgICAg ICAgICJwcm9wbGlzdD0lIVQsIGdhcD0lIU8sIGhvbGRlcj0lIVQiLAorCSAgICAgICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBsb25nKSBqc19jdHgtPmZsYWdzLAorCSAgICAgICAgICAgICAgICAg ICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCBqc19jdHgtPmlkeF9sb29wKSwKKwkg ICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikganNfY3R4LT5oX3JlcGxhY2VyLAor CSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSAoanNfY3R4LT5pZHhfcHJvcGxpc3Qg Pj0gMCA/IGR1a19nZXRfdHZhbCh0aHIsIGpzX2N0eC0+aWR4X3Byb3BsaXN0KSA6IE5VTEwpLAor CSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBqc19jdHgtPmhfZ2FwLAorCSAg ICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsK KworCS8qIHNlcmlhbGl6ZSB0aGUgd3JhcHBlciB3aXRoIGVtcHR5IHN0cmluZyBrZXkgKi8KKwor CWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsKKworCS8qIFsgLi4uIGJ1ZiBsb29wIChwcm9w bGlzdCkgKGdhcCkgaG9sZGVyICIiIF0gKi8KKworCWpzX2N0eC0+cmVjdXJzaW9uX2xpbWl0ID0g RFVLX1VTRV9KU09OX0VOQ19SRUNMSU1JVDsKKwlEVUtfQVNTRVJUKGpzX2N0eC0+cmVjdXJzaW9u X2RlcHRoID09IDApOworCisJaWYgKERVS19VTkxJS0VMWShkdWtfX2VuY192YWx1ZShqc19jdHgs IGlkeF9ob2xkZXIpID09IDApKSB7ICAvKiBbIC4uLiBob2xkZXIga2V5IF0gLT4gWyAuLi4gaG9s ZGVyIF0gKi8KKwkJLyogUmVzdWx0IGlzIHVuZGVmaW5lZC4gKi8KKwkJZHVrX3B1c2hfdW5kZWZp bmVkKHRocik7CisJfSBlbHNlIHsKKwkJLyogQ29udmVydCBidWZmZXIgdG8gcmVzdWx0IHN0cmlu Zy4gKi8KKwkJRFVLX0JXX1BVU0hfQVNfU1RSSU5HKHRociwgJmpzX2N0eC0+YncpOworCX0KKwor CURVS19EREQoRFVLX0RERFBSSU5UKCJhZnRlcjogZmxhZ3M9MHglMDhseCwgbG9vcD0lIVQsIHJl cGxhY2VyPSUhTywgIgorCSAgICAgICAgICAgICAgICAgICAgICJwcm9wbGlzdD0lIVQsIGdhcD0l IU8sIGhvbGRlcj0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBq c19jdHgtPmZsYWdzLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0 X3R2YWwodGhyLCBqc19jdHgtPmlkeF9sb29wKSwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVr X2hlYXBoZHIgKikganNfY3R4LT5oX3JlcGxhY2VyLAorCSAgICAgICAgICAgICAgICAgICAgIChk dWtfdHZhbCAqKSAoanNfY3R4LT5pZHhfcHJvcGxpc3QgPj0gMCA/IGR1a19nZXRfdHZhbCh0aHIs IGpzX2N0eC0+aWR4X3Byb3BsaXN0KSA6IE5VTEwpLAorCSAgICAgICAgICAgICAgICAgICAgIChk dWtfaGVhcGhkciAqKSBqc19jdHgtPmhfZ2FwLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtf dHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCBpZHhfaG9sZGVyKSkpOworCisJLyogVGhlIHN0YWNr IGhhcyBhIHZhcmlhYmxlIHNoYXBlIGhlcmUsIHNvIGZvcmNlIGl0IHRvIHRoZQorCSAqIGRlc2ly ZWQgb25lIGV4cGxpY2l0bHkuCisJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfSlNPTl9TVFJJ TkdJRllfRkFTVFBBVEgpCisgcmVwbGFjZV9maW5pc2hlZDoKKyNlbmRpZgorCWR1a19yZXBsYWNl KHRociwgZW50cnlfdG9wKTsKKwlkdWtfc2V0X3RvcCh0aHIsIGVudHJ5X3RvcCArIDEpOworCisJ RFVLX0RERChEVUtfREREUFJJTlQoIkpTT04gc3RyaW5naWZ5IGVuZDogdmFsdWU9JSFULCByZXBs YWNlcj0lIVQsIHNwYWNlPSUhVCwgIgorCSAgICAgICAgICAgICAgICAgICAgICJmbGFncz0weCUw OGx4LCByZXN1bHQ9JSFULCBzdGFja190b3A9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAo ZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgaWR4X3ZhbHVlKSwKKwkgICAgICAgICAgICAg ICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgaWR4X3JlcGxhY2VyKSwKKwkg ICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgaWR4X3Nw YWNlKSwKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgZmxhZ3MsCisJICAg ICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwKKwkg ICAgICAgICAgICAgICAgICAgICAobG9uZykgZHVrX2dldF90b3AodGhyKSkpOworCisJRFVLX0FT U0VSVChkdWtfZ2V0X3RvcCh0aHIpID09IGVudHJ5X3RvcCArIDEpOworfQorCisjaWYgZGVmaW5l ZChEVUtfVVNFX0pTT05fQlVJTFRJTikKKworLyoKKyAqICBFbnRyeSBwb2ludHMKKyAqLworCitE VUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9qc29uX29iamVjdF9wYXJzZShkdWtfaHRocmVh ZCAqdGhyKSB7CisJZHVrX2JpX2pzb25fcGFyc2VfaGVscGVyKHRociwKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgMCAvKmlkeF92YWx1ZSovLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAx IC8qaWR4X3JlcGxhY2VyKi8sCisJICAgICAgICAgICAgICAgICAgICAgICAgIDAgLypmbGFncyov KTsKKwlyZXR1cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfanNvbl9v YmplY3Rfc3RyaW5naWZ5KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfYmlfanNvbl9zdHJpbmdp ZnlfaGVscGVyKHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyppZHhfdmFs dWUqLywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyppZHhfcmVwbGFjZXIqLywK KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLyppZHhfc3BhY2UqLywKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDAgLypmbGFncyovKTsKKwlyZXR1cm4gMTsKK30KKworI2Vu ZGlmICAvKiBEVUtfVVNFX0pTT05fQlVJTFRJTiAqLworCisjZW5kaWYgIC8qIERVS19VU0VfSlNP Tl9TVVBQT1JUICovCisKKy8qIGF1dG9tYXRpYyB1bmRlZnMgKi8KKyN1bmRlZiBEVUtfX0VNSVRf MQorI3VuZGVmIERVS19fRU1JVF8yCisjdW5kZWYgRFVLX19FTUlUX0NTVFIKKyN1bmRlZiBEVUtf X0VNSVRfSFNUUgorI3VuZGVmIERVS19fRU1JVF9TVFJJRFgKKyN1bmRlZiBEVUtfX0pTT05fREVD U1RSX0JVRlNJWkUKKyN1bmRlZiBEVUtfX0pTT05fREVDU1RSX0NIVU5LU0laRQorI3VuZGVmIERV S19fSlNPTl9FTkNTVFJfQ0hVTktTSVpFCisjdW5kZWYgRFVLX19KU09OX01BWF9FU0NfTEVOCisj dW5kZWYgRFVLX19KU09OX1NUUklOR0lGWV9CVUZTSVpFCisjdW5kZWYgRFVLX19NS0VTQworI3Vu ZGVmIERVS19fVU5FTUlUXzEKKy8qCisgKiAgTWF0aCBidWlsdC1pbnMKKyAqLworCisvKiAjaW5j bHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfTUFUSF9CVUlMVElOKQorCisvKgorICogIFVzZSBzdGF0aWMgaGVscGVycyB3aGlj aCBjYW4gd29yayB3aXRoIG1hdGguaCBmdW5jdGlvbnMgbWF0Y2hpbmcKKyAqICB0aGUgZm9sbG93 aW5nIHNpZ25hdHVyZXMuIFRoaXMgaXMgbm90IHBvcnRhYmxlIGlmIGFueSBvZiB0aGVzZSBtYXRo CisgKiAgZnVuY3Rpb25zIGlzIGFjdHVhbGx5IGEgbWFjcm8uCisgKgorICogIFR5cGluZyBoZXJl IGlzIGludGVudGlvbmFsbHkgJ2RvdWJsZScgd2hlcmV2ZXIgdmFsdWVzIGludGVyYWN0IHdpdGgK KyAqICB0aGUgc3RhbmRhcmQgbGlicmFyeSBBUElzLgorICovCisKK3R5cGVkZWYgZG91YmxlICgq ZHVrX19vbmVfYXJnX2Z1bmMpKGRvdWJsZSk7Cit0eXBlZGVmIGRvdWJsZSAoKmR1a19fdHdvX2Fy Z19mdW5jKShkb3VibGUsIGRvdWJsZSk7CisKK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19tYXRo X21pbm1heChkdWtfaHRocmVhZCAqdGhyLCBkdWtfZG91YmxlX3QgaW5pdGlhbCwgZHVrX190d29f YXJnX2Z1bmMgbWluX21heCkgeworCWR1a19pZHhfdCBuID0gZHVrX2dldF90b3AodGhyKTsKKwlk dWtfaWR4X3QgaTsKKwlkdWtfZG91YmxlX3QgcmVzID0gaW5pdGlhbDsKKwlkdWtfZG91YmxlX3Qg dDsKKworCS8qCisJICogIE5vdGU6IGZtYXgoKSBkb2VzIG5vdCBtYXRjaCB0aGUgRTUgc2VtYW50 aWNzLiAgRTUgcmVxdWlyZXMKKwkgKiAgdGhhdCBpZiAtYW55LSBpbnB1dCB0byBNYXRoLm1heCgp IGlzIGEgTmFOLCB0aGUgcmVzdWx0IGlzIGEKKwkgKiAgTmFOLiAgZm1heCgpIHdpbGwgcmV0dXJu IGEgTmFOIG9ubHkgaWYgLWJvdGgtIGlucHV0cyBhcmUgTmFOLgorCSAqICBTYW1lIGFwcGxpZXMg dG8gZm1pbigpLgorCSAqCisJICogIE5vdGU6IGV2ZXJ5IGlucHV0IHZhbHVlIG11c3QgYmUgY29l cmNlZCB3aXRoIFRvTnVtYmVyKCksIGV2ZW4KKwkgKiAgaWYgd2Uga25vdyB0aGUgcmVzdWx0IHdp bGwgYmUgYSBOYU4gYW55d2F5OiBUb051bWJlcigpIG1heSBoYXZlCisJICogIHNpZGUgZWZmZWN0 cyBmb3Igd2hpY2ggZXZlbiBvcmRlciBvZiBldmFsdWF0aW9uIG1hdHRlcnMuCisJICovCisKKwlm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXQgPSBkdWtfdG9fbnVtYmVyKHRociwgaSk7CisJ CWlmIChEVUtfRlBDTEFTU0lGWSh0KSA9PSBEVUtfRlBfTkFOIHx8IERVS19GUENMQVNTSUZZKHJl cykgPT0gRFVLX0ZQX05BTikgeworCQkJLyogTm90ZTogbm90IG5vcm1hbGl6ZWQsIGJ1dCBkdWtf cHVzaF9udW1iZXIoKSB3aWxsIG5vcm1hbGl6ZSAqLworCQkJcmVzID0gKGR1a19kb3VibGVfdCkg RFVLX0RPVUJMRV9OQU47CisJCX0gZWxzZSB7CisJCQlyZXMgPSAoZHVrX2RvdWJsZV90KSBtaW5f bWF4KHJlcywgKGRvdWJsZSkgdCk7CisJCX0KKwl9CisKKwlkdWtfcHVzaF9udW1iZXIodGhyLCBy ZXMpOworCXJldHVybiAxOworfQorCitEVUtfTE9DQUwgZG91YmxlIGR1a19fZm1pbl9maXhlZChk b3VibGUgeCwgZG91YmxlIHkpIHsKKwkvKiBmbWluKCkgd2l0aCBhcmdzIC0wIGFuZCArMCBpcyBu b3QgZ3VhcmFudGVlZCB0byByZXR1cm4KKwkgKiAtMCBhcyBFQ01BU2NyaXB0IHJlcXVpcmVzLgor CSAqLworCWlmICh4ID09IDAgJiYgeSA9PSAwKSB7CisJCWR1a19kb3VibGVfdW5pb24gZHUxLCBk dTI7CisJCWR1MS5kID0geDsKKwkJZHUyLmQgPSB5OworCisJCS8qIEFscmVhZHkgY2hlY2tlZCB0 byBiZSB6ZXJvIHNvIHRoZXNlIG11c3QgaG9sZCwgYW5kIGFsbG93IHVzCisJCSAqIHRvIGNoZWNr IGZvciAieCBpcyAtMCBvciB5IGlzIC0wIiBieSBPUmluZyB0aGUgaGlnaCBwYXJ0cworCQkgKiBm b3IgY29tcGFyaXNvbi4KKwkJICovCisJCURVS19BU1NFUlQoZHUxLnVpW0RVS19EQkxfSURYX1VJ MF0gPT0gMCB8fCBkdTEudWlbRFVLX0RCTF9JRFhfVUkwXSA9PSAweDgwMDAwMDAwVUwpOworCQlE VUtfQVNTRVJUKGR1Mi51aVtEVUtfREJMX0lEWF9VSTBdID09IDAgfHwgZHUyLnVpW0RVS19EQkxf SURYX1VJMF0gPT0gMHg4MDAwMDAwMFVMKTsKKworCQkvKiBYWFg6IHdoYXQncyB0aGUgc2FmZXN0 IHdheSBvZiBjcmVhdGluZyBhIG5lZ2F0aXZlIHplcm8/ICovCisJCWlmICgoZHUxLnVpW0RVS19E QkxfSURYX1VJMF0gfCBkdTIudWlbRFVLX0RCTF9JRFhfVUkwXSkgIT0gMCkgeworCQkJLyogRW50 ZXIgaGVyZSBpZiBlaXRoZXIgeCBvciB5IChvciBib3RoKSBpcyAtMC4gKi8KKwkJCXJldHVybiAt MC4wOworCQl9IGVsc2UgeworCQkJcmV0dXJuICswLjA7CisJCX0KKwl9CisJcmV0dXJuIGR1a19k b3VibGVfZm1pbih4LCB5KTsKK30KKworRFVLX0xPQ0FMIGRvdWJsZSBkdWtfX2ZtYXhfZml4ZWQo ZG91YmxlIHgsIGRvdWJsZSB5KSB7CisJLyogZm1heCgpIHdpdGggYXJncyAtMCBhbmQgKzAgaXMg bm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuCisJICogKzAgYXMgRUNNQVNjcmlwdCByZXF1aXJlcy4K KwkgKi8KKwlpZiAoeCA9PSAwICYmIHkgPT0gMCkgeworCQlpZiAoRFVLX1NJR05CSVQoeCkgPT0g MCB8fCBEVUtfU0lHTkJJVCh5KSA9PSAwKSB7CisJCQlyZXR1cm4gKzAuMDsKKwkJfSBlbHNlIHsK KwkJCXJldHVybiAtMC4wOworCQl9CisJfQorCXJldHVybiBkdWtfZG91YmxlX2ZtYXgoeCwgeSk7 Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2KQorRFVLX0xPQ0FMIGRvdWJsZSBkdWtfX2Ni cnQoZG91YmxlIHgpIHsKKwkvKiBjYnJ0KCkgaXMgQzk5LiAgVG8gYXZvaWQgaGFzc2xpbmcgZW1i ZWRkZXJzIHdpdGggdGhlIG5lZWQgdG8gcHJvdmlkZSBhCisJICogY3ViZSByb290IGZ1bmN0aW9u LCB3ZSBjYW4gZ2V0IGJ5IHdpdGggcG93KCkuICBUaGUgcmVzdWx0IGlzIG5vdAorCSAqIGlkZW50 aWNhbCwgYnV0IHRoYXQncyBPSzogRVMyMDE1IHNheXMgaXQncyBpbXBsZW1lbnRhdGlvbi1kZXBl bmRlbnQuCisJICovCisKKyNpZiBkZWZpbmVkKERVS19DQlJUKQorCS8qIGNicnQoKSBtYXRjaGVz IEVTMjAxNSByZXF1aXJlbWVudHMuICovCisJcmV0dXJuIERVS19DQlJUKHgpOworI2Vsc2UKKwlk dWtfc21hbGxfaW50X3QgYyA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKHgpOwor CisJLyogcG93KCkgZG9lcyBub3QsIGhvd2V2ZXIuICovCisJaWYgKGMgPT0gRFVLX0ZQX05BTiB8 fCBjID09IERVS19GUF9JTkZJTklURSB8fCBjID09IERVS19GUF9aRVJPKSB7CisJCXJldHVybiB4 OworCX0KKwlpZiAoRFVLX1NJR05CSVQoeCkpIHsKKwkJcmV0dXJuIC1EVUtfUE9XKC14LCAxLjAg LyAzLjApOworCX0gZWxzZSB7CisJCXJldHVybiBEVUtfUE9XKHgsIDEuMCAvIDMuMCk7CisJfQor I2VuZGlmCit9CisKK0RVS19MT0NBTCBkb3VibGUgZHVrX19sb2cyKGRvdWJsZSB4KSB7CisjaWYg ZGVmaW5lZChEVUtfTE9HMikKKwlyZXR1cm4gRFVLX0xPRzIoeCk7CisjZWxzZQorCXJldHVybiBE VUtfTE9HKHgpICogRFVLX0RPVUJMRV9MT0cyRTsKKyNlbmRpZgorfQorCitEVUtfTE9DQUwgZG91 YmxlIGR1a19fbG9nMTAoZG91YmxlIHgpIHsKKyNpZiBkZWZpbmVkKERVS19MT0cxMCkKKwlyZXR1 cm4gRFVLX0xPRzEwKHgpOworI2Vsc2UKKwlyZXR1cm4gRFVLX0xPRyh4KSAqIERVS19ET1VCTEVf TE9HMTBFOworI2VuZGlmCit9CisKK0RVS19MT0NBTCBkb3VibGUgZHVrX190cnVuYyhkb3VibGUg eCkgeworI2lmIGRlZmluZWQoRFVLX1RSVU5DKQorCXJldHVybiBEVUtfVFJVTkMoeCk7CisjZWxz ZQorCS8qIEhhbmRsZXMgLTAgY29ycmVjdGx5OiAtMC4wIG1hdGNoZXMgJ3ggPj0gMC4wJyBidXQg Zmxvb3IoKQorCSAqIGlzIHJlcXVpcmVkIHRvIHJldHVybiAtMCB3aGVuIHRoZSBhcmd1bWVudCBp cyAtMC4KKwkgKi8KKwlyZXR1cm4geCA+PSAwLjAgPyBEVUtfRkxPT1IoeCkgOiBEVUtfQ0VJTCh4 KTsKKyNlbmRpZgorfQorI2VuZGlmICAvKiBEVUtfVVNFX0VTNiAqLworCitEVUtfTE9DQUwgZG91 YmxlIGR1a19fcm91bmRfZml4ZWQoZG91YmxlIHgpIHsKKwkvKiBOdW1iZXJzIGhhbGYtd2F5IGJl dHdlZW4gaW50ZWdlcnMgbXVzdCBiZSByb3VuZGVkIHRvd2FyZHMgK0luZmluaXR5LAorCSAqIGUu Zy4gLTMuNSBtdXN0IGJlIHJvdW5kZWQgdG8gLTMgKG5vdCAtNCkuICBXaGVuIHJvdW5kZWQgdG8g emVybywgemVybworCSAqIHNpZ24gbXVzdCBiZSBzZXQgYXBwcm9wcmlhdGVseS4gIEU1LjEgU2Vj dGlvbiAxNS44LjIuMTUuCisJICoKKwkgKiBOb3RlIHRoYXQgQU5TSSBDIHJvdW5kKCkgaXMgInJv dW5kIHRvIG5lYXJlc3QgaW50ZWdlciwgYXdheSBmcm9tIHplcm8iLAorCSAqIHdoaWNoIGlzIGlu Y29ycmVjdCBmb3IgbmVnYXRpdmUgdmFsdWVzLiAgSGVyZSB3ZSBtYWtlIGRvIHdpdGggZmxvb3Io KS4KKwkgKi8KKworCWR1a19zbWFsbF9pbnRfdCBjID0gKGR1a19zbWFsbF9pbnRfdCkgRFVLX0ZQ Q0xBU1NJRlkoeCk7CisJaWYgKGMgPT0gRFVLX0ZQX05BTiB8fCBjID09IERVS19GUF9JTkZJTklU RSB8fCBjID09IERVS19GUF9aRVJPKSB7CisJCXJldHVybiB4OworCX0KKworCS8qCisJICogIHgg aXMgZmluaXRlIGFuZCBub24temVybworCSAqCisJICogIC0xLjYgLT4gZmxvb3IoLTEuMSkgLT4g LTIKKwkgKiAgLTEuNSAtPiBmbG9vcigtMS4wKSAtPiAtMSAgKHRvd2FyZHMgK0luZikKKwkgKiAg LTEuNCAtPiBmbG9vcigtMC45KSAtPiAtMQorCSAqICAtMC41IC0+IC0wLjAgICAgICAgICAgICAg ICAoc3BlY2lhbCBjYXNlKQorCSAqICAtMC4xIC0+IC0wLjAgICAgICAgICAgICAgICAoc3BlY2lh bCBjYXNlKQorCSAqICArMC4xIC0+ICswLjAgICAgICAgICAgICAgICAoc3BlY2lhbCBjYXNlKQor CSAqICArMC41IC0+IGZsb29yKCsxLjApIC0+IDEgICAodG93YXJkcyArSW5mKQorCSAqICArMS40 IC0+IGZsb29yKCsxLjkpIC0+IDEKKwkgKiAgKzEuNSAtPiBmbG9vcigrMi4wKSAtPiAyICAgKHRv d2FyZHMgK0luZikKKwkgKiAgKzEuNiAtPiBmbG9vcigrMi4xKSAtPiAyCisJICovCisKKwlpZiAo eCA+PSAtMC41ICYmIHggPCAwLjUpIHsKKwkJLyogKzAuNSBpcyBoYW5kbGVkIGJ5IGZsb29yLCB0 aGlzIGlzIG9uIHB1cnBvc2UgKi8KKwkJaWYgKHggPCAwLjApIHsKKwkJCXJldHVybiAtMC4wOwor CQl9IGVsc2UgeworCQkJcmV0dXJuICswLjA7CisJCX0KKwl9CisKKwlyZXR1cm4gRFVLX0ZMT09S KHggKyAwLjUpOworfQorCisvKiBXcmFwcGVycyBmb3IgY2FsbGluZyBzdGFuZGFyZCBtYXRoIGxp YnJhcnkgbWV0aG9kcy4gIFRoZXNlIG1heSBiZSByZXF1aXJlZAorICogb24gcGxhdGZvcm1zIHdo ZXJlIG9uZSBvciBtb3JlIG9mIHRoZSBtYXRoIGJ1aWx0LWlucyBhcmUgZGVmaW5lZCBhcyBtYWNy b3MKKyAqIG9yIGlubGluZSBmdW5jdGlvbnMgYW5kIGFyZSB0aHVzIG5vdCBzdWl0YWJsZSB0byBi ZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLgorICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0FW T0lEX1BMQVRGT1JNX0ZVTkNQVFJTKQorRFVLX0xPQ0FMIGRvdWJsZSBkdWtfX2ZhYnMoZG91Ymxl IHgpIHsKKwlyZXR1cm4gRFVLX0ZBQlMoeCk7Cit9CitEVUtfTE9DQUwgZG91YmxlIGR1a19fYWNv cyhkb3VibGUgeCkgeworCXJldHVybiBEVUtfQUNPUyh4KTsKK30KK0RVS19MT0NBTCBkb3VibGUg ZHVrX19hc2luKGRvdWJsZSB4KSB7CisJcmV0dXJuIERVS19BU0lOKHgpOworfQorRFVLX0xPQ0FM IGRvdWJsZSBkdWtfX2F0YW4oZG91YmxlIHgpIHsKKwlyZXR1cm4gRFVLX0FUQU4oeCk7Cit9CitE VUtfTE9DQUwgZG91YmxlIGR1a19fY2VpbChkb3VibGUgeCkgeworCXJldHVybiBEVUtfQ0VJTCh4 KTsKK30KK0RVS19MT0NBTCBkb3VibGUgZHVrX19jb3MoZG91YmxlIHgpIHsKKwlyZXR1cm4gRFVL X0NPUyh4KTsKK30KK0RVS19MT0NBTCBkb3VibGUgZHVrX19leHAoZG91YmxlIHgpIHsKKwlyZXR1 cm4gRFVLX0VYUCh4KTsKK30KK0RVS19MT0NBTCBkb3VibGUgZHVrX19mbG9vcihkb3VibGUgeCkg eworCXJldHVybiBEVUtfRkxPT1IoeCk7Cit9CitEVUtfTE9DQUwgZG91YmxlIGR1a19fbG9nKGRv dWJsZSB4KSB7CisJcmV0dXJuIERVS19MT0coeCk7Cit9CitEVUtfTE9DQUwgZG91YmxlIGR1a19f c2luKGRvdWJsZSB4KSB7CisJcmV0dXJuIERVS19TSU4oeCk7Cit9CitEVUtfTE9DQUwgZG91Ymxl IGR1a19fc3FydChkb3VibGUgeCkgeworCXJldHVybiBEVUtfU1FSVCh4KTsKK30KK0RVS19MT0NB TCBkb3VibGUgZHVrX190YW4oZG91YmxlIHgpIHsKKwlyZXR1cm4gRFVLX1RBTih4KTsKK30KK0RV S19MT0NBTCBkb3VibGUgZHVrX19hdGFuMl9maXhlZChkb3VibGUgeCwgZG91YmxlIHkpIHsKKyNp ZiBkZWZpbmVkKERVS19VU0VfQVRBTjJfV09SS0FST1VORFMpCisJLyogU3BlY2lmaWMgZml4ZXMg dG8gY29tbW9uIGF0YW4yKCkgaW1wbGVtZW50YXRpb24gaXNzdWVzOgorCSAqIC0gdGVzdC1idWct bWluZ3ctbWF0aC1pc3N1ZXMuanMKKwkgKi8KKwlpZiAoRFVLX0lTSU5GKHgpICYmIERVS19JU0lO Rih5KSkgeworCQlpZiAoRFVLX1NJR05CSVQoeCkpIHsKKwkJCWlmIChEVUtfU0lHTkJJVCh5KSkg eworCQkJCXJldHVybiAtMi4zNTYxOTQ0OTAxOTIzNDU7CisJCQl9IGVsc2UgeworCQkJCXJldHVy biAtMC43ODUzOTgxNjMzOTc0NDgzOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKERVS19TSUdO QklUKHkpKSB7CisJCQkJcmV0dXJuIDIuMzU2MTk0NDkwMTkyMzQ1OworCQkJfSBlbHNlIHsKKwkJ CQlyZXR1cm4gMC43ODUzOTgxNjMzOTc0NDgzOworCQkJfQorCQl9CisJfQorI2Vsc2UKKwkvKiBT b21lIElTTyBDIGFzc3VtcHRpb25zLiAqLworCURVS19BU1NFUlQoRFVLX0FUQU4yKERVS19ET1VC TEVfSU5GSU5JVFksIERVS19ET1VCTEVfSU5GSU5JVFkpID09IDAuNzg1Mzk4MTYzMzk3NDQ4Myk7 CisJRFVLX0FTU0VSVChEVUtfQVRBTjIoLURVS19ET1VCTEVfSU5GSU5JVFksIERVS19ET1VCTEVf SU5GSU5JVFkpID09IC0wLjc4NTM5ODE2MzM5NzQ0ODMpOworCURVS19BU1NFUlQoRFVLX0FUQU4y KERVS19ET1VCTEVfSU5GSU5JVFksIC1EVUtfRE9VQkxFX0lORklOSVRZKSA9PSAyLjM1NjE5NDQ5 MDE5MjM0NSk7CisJRFVLX0FTU0VSVChEVUtfQVRBTjIoLURVS19ET1VCTEVfSU5GSU5JVFksIC1E VUtfRE9VQkxFX0lORklOSVRZKSA9PSAtMi4zNTYxOTQ0OTAxOTIzNDUpOworI2VuZGlmCisKKwly ZXR1cm4gRFVLX0FUQU4yKHgsIHkpOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0FWT0lEX1BMQVRG T1JNX0ZVTkNQVFJTICovCisKKy8qIG9yZGVyIG11c3QgbWF0Y2ggY29uc3RhbnRzIGluIGdlbmJ1 aWx0aW5zLnB5ICovCitEVUtfTE9DQUwgY29uc3QgZHVrX19vbmVfYXJnX2Z1bmMgZHVrX19vbmVf YXJnX2Z1bmNzW10gPSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FWT0lEX1BMQVRGT1JNX0ZVTkNQ VFJTKQorCWR1a19fZmFicywKKwlkdWtfX2Fjb3MsCisJZHVrX19hc2luLAorCWR1a19fYXRhbiwK KwlkdWtfX2NlaWwsCisJZHVrX19jb3MsCisJZHVrX19leHAsCisJZHVrX19mbG9vciwKKwlkdWtf X2xvZywKKwlkdWtfX3JvdW5kX2ZpeGVkLAorCWR1a19fc2luLAorCWR1a19fc3FydCwKKwlkdWtf X3RhbiwKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2KQorCWR1a19fY2JydCwKKwlkdWtfX2xvZzIs CisJZHVrX19sb2cxMCwKKwlkdWtfX3RydW5jCisjZW5kaWYKKyNlbHNlICAvKiBEVUtfVVNFX0FW T0lEX1BMQVRGT1JNX0ZVTkNQVFJTICovCisJRFVLX0ZBQlMsCisJRFVLX0FDT1MsCisJRFVLX0FT SU4sCisJRFVLX0FUQU4sCisJRFVLX0NFSUwsCisJRFVLX0NPUywKKwlEVUtfRVhQLAorCURVS19G TE9PUiwKKwlEVUtfTE9HLAorCWR1a19fcm91bmRfZml4ZWQsCisJRFVLX1NJTiwKKwlEVUtfU1FS VCwKKwlEVUtfVEFOLAorI2lmIGRlZmluZWQoRFVLX1VTRV9FUzYpCisJZHVrX19jYnJ0LAorCWR1 a19fbG9nMiwKKwlkdWtfX2xvZzEwLAorCWR1a19fdHJ1bmMKKyNlbmRpZgorI2VuZGlmICAvKiBE VUtfVVNFX0FWT0lEX1BMQVRGT1JNX0ZVTkNQVFJTICovCit9OworCisvKiBvcmRlciBtdXN0IG1h dGNoIGNvbnN0YW50cyBpbiBnZW5idWlsdGlucy5weSAqLworRFVLX0xPQ0FMIGNvbnN0IGR1a19f dHdvX2FyZ19mdW5jIGR1a19fdHdvX2FyZ19mdW5jc1tdID0geworI2lmIGRlZmluZWQoRFVLX1VT RV9BVk9JRF9QTEFURk9STV9GVU5DUFRSUykKKwlkdWtfX2F0YW4yX2ZpeGVkLAorCWR1a19qc19h cml0aF9wb3cKKyNlbHNlCisJZHVrX19hdGFuMl9maXhlZCwKKwlkdWtfanNfYXJpdGhfcG93Cisj ZW5kaWYKK307CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X29u ZWFyZ19zaGFyZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zbWFsbF9pbnRfdCBmdW5faWR4 ID0gZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisJZHVrX19vbmVfYXJnX2Z1bmMgZnVuOwor CWR1a19kb3VibGVfdCBhcmcxOworCisJRFVLX0FTU0VSVChmdW5faWR4ID49IDApOworCURVS19B U1NFUlQoZnVuX2lkeCA8IChkdWtfc21hbGxfaW50X3QpIChzaXplb2YoZHVrX19vbmVfYXJnX2Z1 bmNzKSAvIHNpemVvZihkdWtfX29uZV9hcmdfZnVuYykpKTsKKwlhcmcxID0gZHVrX3RvX251bWJl cih0aHIsIDApOworCWZ1biA9IGR1a19fb25lX2FyZ19mdW5jc1tmdW5faWR4XTsKKwlkdWtfcHVz aF9udW1iZXIodGhyLCAoZHVrX2RvdWJsZV90KSBmdW4oKGRvdWJsZSkgYXJnMSkpOworCXJldHVy biAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9tYXRoX29iamVjdF90d29h cmdfc2hhcmVkKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfc21hbGxfaW50X3QgZnVuX2lkeCA9 IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworCWR1a19fdHdvX2FyZ19mdW5jIGZ1bjsKKwlk dWtfZG91YmxlX3QgYXJnMTsKKwlkdWtfZG91YmxlX3QgYXJnMjsKKworCURVS19BU1NFUlQoZnVu X2lkeCA+PSAwKTsKKwlEVUtfQVNTRVJUKGZ1bl9pZHggPCAoZHVrX3NtYWxsX2ludF90KSAoc2l6 ZW9mKGR1a19fdHdvX2FyZ19mdW5jcykgLyBzaXplb2YoZHVrX190d29fYXJnX2Z1bmMpKSk7CisJ YXJnMSA9IGR1a190b19udW1iZXIodGhyLCAwKTsgIC8qIGV4cGxpY2l0IG9yZGVyZWQgZXZhbHVh dGlvbiB0byBtYXRjaCBjb2VyY2lvbiBzZW1hbnRpY3MgKi8KKwlhcmcyID0gZHVrX3RvX251bWJl cih0aHIsIDEpOworCWZ1biA9IGR1a19fdHdvX2FyZ19mdW5jc1tmdW5faWR4XTsKKwlkdWtfcHVz aF9udW1iZXIodGhyLCAoZHVrX2RvdWJsZV90KSBmdW4oKGRvdWJsZSkgYXJnMSwgKGRvdWJsZSkg YXJnMikpOworCXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9t YXRoX29iamVjdF9tYXgoZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiBkdWtfX21hdGhfbWlu bWF4KHRociwgLURVS19ET1VCTEVfSU5GSU5JVFksIGR1a19fZm1heF9maXhlZCk7Cit9CisKK0RV S19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X21pbihkdWtfaHRocmVhZCAq dGhyKSB7CisJcmV0dXJuIGR1a19fbWF0aF9taW5tYXgodGhyLCBEVUtfRE9VQkxFX0lORklOSVRZ LCBkdWtfX2ZtaW5fZml4ZWQpOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9t YXRoX29iamVjdF9yYW5kb20oZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19wdXNoX251bWJlcih0 aHIsIChkdWtfZG91YmxlX3QpIERVS19VVElMX0dFVF9SQU5ET01fRE9VQkxFKHRocikpOworCXJl dHVybiAxOworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNikKK0RVS19JTlRFUk5BTCBkdWtf cmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X2h5cG90KGR1a19odGhyZWFkICp0aHIpIHsKKwkvKgor CSAqICBFNiBTZWN0aW9uIDIwLjIuMi4xODogTWF0aC5oeXBvdAorCSAqCisJICogIC0gSWYgbm8g YXJndW1lbnRzIGFyZSBwYXNzZWQsIHRoZSByZXN1bHQgaXMgKzAuCisJICogIC0gSWYgYW55IGFy Z3VtZW50IGlzICtpbmYsIHRoZSByZXN1bHQgaXMgK2luZi4KKwkgKiAgLSBJZiBhbnkgYXJndW1l bnQgaXMgLWluZiwgdGhlIHJlc3VsdCBpcyAraW5mLgorCSAqICAtIElmIG5vIGFyZ3VtZW50IGlz ICtpbmYgb3IgLWluZiwgYW5kIGFueSBhcmd1bWVudCBpcyBOYU4sIHRoZSByZXN1bHQgaXMKKwkg KiAgICBOYU4uCisJICogIC0gSWYgYWxsIGFyZ3VtZW50cyBhcmUgZWl0aGVyICswIG9yIC0wLCB0 aGUgcmVzdWx0IGlzICswLgorCSAqLworCisJZHVrX2lkeF90IG5hcmdzOworCWR1a19pZHhfdCBp OworCWR1a19ib29sX3QgZm91bmRfbmFuOworCWR1a19kb3VibGVfdCBtYXg7CisJZHVrX2RvdWJs ZV90IHN1bSwgc3VtbWFuZDsKKwlkdWtfZG91YmxlX3QgY29tcCwgcHJlbGltOworCWR1a19kb3Vi bGVfdCB0OworCisJbmFyZ3MgPSBkdWtfZ2V0X3RvcCh0aHIpOworCisJLyogRmluZCB0aGUgaGln aGVzdCB2YWx1ZS4gIEFsc28gVG9OdW1iZXIoKSBjb2VyY2VzLiAqLworCW1heCA9IDAuMDsKKwlm b3VuZF9uYW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKSB7CisJCXQgPSBEVUtf RkFCUyhkdWtfdG9fbnVtYmVyKHRociwgaSkpOworCQlpZiAoRFVLX0ZQQ0xBU1NJRlkodCkgPT0g RFVLX0ZQX05BTikgeworCQkJZm91bmRfbmFuID0gMTsKKwkJfSBlbHNlIHsKKwkJCW1heCA9IGR1 a19kb3VibGVfZm1heChtYXgsIHQpOworCQl9CisJfQorCisJLyogRWFybHkgcmV0dXJuIGNhc2Vz LiAqLworCWlmIChtYXggPT0gRFVLX0RPVUJMRV9JTkZJTklUWSkgeworCQlkdWtfcHVzaF9udW1i ZXIodGhyLCBEVUtfRE9VQkxFX0lORklOSVRZKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChm b3VuZF9uYW4pIHsKKwkJZHVrX3B1c2hfbnVtYmVyKHRociwgRFVLX0RPVUJMRV9OQU4pOworCQly ZXR1cm4gMTsKKwl9IGVsc2UgaWYgKG1heCA9PSAwLjApIHsKKwkJZHVrX3B1c2hfbnVtYmVyKHRo ciwgMC4wKTsKKwkJLyogT3RoZXJ3aXNlIHdlJ2QgZGl2aWRlIGJ5IHplcm8uICovCisJCXJldHVy biAxOworCX0KKworCS8qIFVzZSBLYWhhbiBzdW1tYXRpb24gYW5kIG5vcm1hbGl6ZSB0byB0aGUg aGlnaGVzdCB2YWx1ZSB0byBtaW5pbWl6ZQorCSAqIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVy cm9yIGFuZCBhdm9pZCBvdmVyZmxvdy4KKwkgKgorCSAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y Zy93aWtpL0thaGFuX3N1bW1hdGlvbl9hbGdvcml0aG0KKwkgKi8KKwlzdW0gPSAwLjA7CisJY29t cCA9IDAuMDsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykgeworCQl0ID0gRFVLX0ZBQlMo ZHVrX2dldF9udW1iZXIodGhyLCBpKSkgLyBtYXg7CisJCXN1bW1hbmQgPSAodCAqIHQpIC0gY29t cDsKKwkJcHJlbGltID0gc3VtICsgc3VtbWFuZDsKKwkJY29tcCA9IChwcmVsaW0gLSBzdW0pIC0g c3VtbWFuZDsKKwkJc3VtID0gcHJlbGltOworCX0KKworCWR1a19wdXNoX251bWJlcih0aHIsIChk dWtfZG91YmxlX3QpIERVS19TUVJUKHN1bSkgKiBtYXgpOworCXJldHVybiAxOworfQorI2VuZGlm ICAvKiBEVUtfVVNFX0VTNiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNikKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX21hdGhfb2JqZWN0X3NpZ24oZHVrX2h0aHJlYWQgKnRocikg eworCWR1a19kb3VibGVfdCBkOworCisJZCA9IGR1a190b19udW1iZXIodGhyLCAwKTsKKwlpZiAo ZHVrX2RvdWJsZV9pc19uYW4oZCkpIHsKKwkJRFVLX0FTU0VSVChkdWtfaXNfbmFuKHRociwgLTEp KTsKKwkJcmV0dXJuIDE7ICAvKiBOYU4gaW5wdXQgLT4gcmV0dXJuIE5hTiAqLworCX0KKwlpZiAo ZCA9PSAwLjApIHsKKwkJLyogWmVybyBzaWduIGtlcHQsIGkuZS4gLTAgLT4gLTAsICswIC0+ICsw LiAqLworCQlyZXR1cm4gMTsKKwl9CisJZHVrX3B1c2hfaW50KHRociwgKGQgPiAwLjAgPyAxIDog LTEpKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9FUzYgKi8KKworI2lmIGRl ZmluZWQoRFVLX1VTRV9FUzYpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9tYXRoX29i amVjdF9jbHozMihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQzMl90IHg7CisJZHVrX3Nt YWxsX3VpbnRfdCBpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCWR1a191 aW50MzJfdCBtYXNrOworCisJeCA9IGR1a190b191aW50MzIodGhyLCAwKTsKKwlmb3IgKGkgPSAw LCBtYXNrID0gMHg4MDAwMDAwMFVMOyBtYXNrICE9IDA7IG1hc2sgPj49IDEpIHsKKwkJaWYgKHgg JiBtYXNrKSB7CisJCQlicmVhazsKKwkJfQorCQlpKys7CisJfQorCURVS19BU1NFUlQoaSA8PSAz Mik7CisJZHVrX3B1c2hfdWludCh0aHIsIGkpOworCXJldHVybiAxOworI2Vsc2UgIC8qIERVS19V U0VfUFJFRkVSX1NJWkUgKi8KKwlpID0gMDsKKwl4ID0gZHVrX3RvX3VpbnQzMih0aHIsIDApOwor CWlmICh4ICYgMHhmZmZmMDAwMFVMKSB7CisJCXggPj49IDE2OworCX0gZWxzZSB7CisJCWkgKz0g MTY7CisJfQorCWlmICh4ICYgMHgwMDAwZmYwMFVMKSB7CisJCXggPj49IDg7CisJfSBlbHNlIHsK KwkJaSArPSA4OworCX0KKwlpZiAoeCAmIDB4MDAwMDAwZjBVTCkgeworCQl4ID4+PSA0OworCX0g ZWxzZSB7CisJCWkgKz0gNDsKKwl9CisJaWYgKHggJiAweDAwMDAwMDBjVUwpIHsKKwkJeCA+Pj0g MjsKKwl9IGVsc2UgeworCQlpICs9IDI7CisJfQorCWlmICh4ICYgMHgwMDAwMDAwMlVMKSB7CisJ CXggPj49IDE7CisJfSBlbHNlIHsKKwkJaSArPSAxOworCX0KKwlpZiAoeCAmIDB4MDAwMDAwMDFV TCkgeworCQk7CisJfSBlbHNlIHsKKwkJaSArPSAxOworCX0KKwlEVUtfQVNTRVJUKGkgPD0gMzIp OworCWR1a19wdXNoX3VpbnQodGhyLCBpKTsKKwlyZXR1cm4gMTsKKyNlbmRpZiAgLyogRFVLX1VT RV9QUkVGRVJfU0laRSAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX0VTNiAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX0VTNikKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX21hdGhfb2Jq ZWN0X2ltdWwoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a191aW50MzJfdCB4LCB5LCB6OworCisJ eCA9IGR1a190b191aW50MzIodGhyLCAwKTsKKwl5ID0gZHVrX3RvX3VpbnQzMih0aHIsIDEpOwor CXogPSB4ICogeTsKKworCS8qIFdoaWxlIGFyZ3VtZW50cyBhcmUgVG9VaW50MzIoKSBjb2VyY2Vk IGFuZCB0aGUgbXVsdGlwbGljYXRpb24KKwkgKiBpcyB1bnNpZ25lZCBhcyBzdWNoLCB0aGUgZmlu YWwgcmVzdWx0IGlzIGN1cmlvdXNseSBpbnRlcnByZXRlZAorCSAqIGFzIGEgc2lnbmVkIDMyLWJp dCB2YWx1ZS4KKwkgKi8KKwlkdWtfcHVzaF9pMzIodGhyLCAoZHVrX2ludDMyX3QpIHopOworCXJl dHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0VTNiAqLworCisjZW5kaWYgIC8qIERVS19V U0VfTUFUSF9CVUlMVElOICovCisvKgorICogIE51bWJlciBidWlsdC1pbnMKKyAqLworCisvKiAj aW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZp bmVkKERVS19VU0VfTlVNQkVSX0JVSUxUSU4pCisKK0RVS19MT0NBTCBkdWtfZG91YmxlX3QgZHVr X19wdXNoX3RoaXNfbnVtYmVyX3BsYWluKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaG9iamVj dCAqaDsKKworCS8qIE51bWJlciBidWlsdC1pbiBhY2NlcHRzIGEgcGxhaW4gbnVtYmVyIG9yIGEg TnVtYmVyIG9iamVjdCAod2hvc2UKKwkgKiBpbnRlcm5hbCB2YWx1ZSBpcyBvcGVyYXRlZCBvbiku ICBPdGhlciB0eXBlcyBjYXVzZSBUeXBlRXJyb3IuCisJICovCisKKwlkdWtfcHVzaF90aGlzKHRo cik7CisJaWYgKGR1a19pc19udW1iZXIodGhyLCAtMSkpIHsKKwkJRFVLX0RERChEVUtfREREUFJJ TlQoInBsYWluIG51bWJlciB2YWx1ZTogJSFUIiwgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0 aHIsIC0xKSkpOworCQlnb3RvIGRvbmU7CisJfQorCWggPSBkdWtfZ2V0X2hvYmplY3QodGhyLCAt MSk7CisJaWYgKCFoIHx8CisJICAgIChEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKGgpICE9 IERVS19IT0JKRUNUX0NMQVNTX05VTUJFUikpIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInVu YWNjZXB0YWJsZSB0aGlzIHZhbHVlOiAlIVQiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRo ciwgLTEpKSk7CisJCURVS19FUlJPUl9UWVBFKHRociwgIm51bWJlciBleHBlY3RlZCIpOworCQlE VUtfV09fTk9SRVRVUk4ocmV0dXJuIDAuMDspOworCX0KKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3No b3J0KHRociwgLTEsIERVS19TVFJJRFhfSU5UX1ZBTFVFKTsKKwlEVUtfQVNTRVJUKGR1a19pc19u dW1iZXIodGhyLCAtMSkpOworCURVS19EREQoRFVLX0RERFBSSU5UKCJudW1iZXIgb2JqZWN0OiAl IVQsIGludGVybmFsIHZhbHVlOiAlIVQiLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZh bCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMiksIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhy LCAtMSkpKTsKKwlkdWtfcmVtb3ZlX20yKHRocik7CisKKyBkb25lOgorCXJldHVybiBkdWtfZ2V0 X251bWJlcih0aHIsIC0xKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfbnVt YmVyX2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaWR4X3QgbmFyZ3M7CisJ ZHVrX2hvYmplY3QgKmhfdGhpczsKKworCS8qCisJICogIFRoZSBOdW1iZXIgY29uc3RydWN0b3Ig dXNlcyBUb051bWJlcihhcmcpIGZvciBudW1iZXIgY29lcmNpb24KKwkgKiAgKGNvZXJjaW5nIGFu IHVuZGVmaW5lZCBhcmd1bWVudCB0byBOYU4pLiAgSG93ZXZlciwgaWYgdGhlCisJICogIGFyZ3Vt ZW50IGlzIG5vdCBnaXZlbiBhdCBhbGwsICswIG11c3QgYmUgdXNlZCBpbnN0ZWFkLiAgVG8gZG8K KwkgKiAgdGhpcywgYSB2YXJhcmcgZnVuY3Rpb24gaXMgdXNlZC4KKwkgKi8KKworCW5hcmdzID0g ZHVrX2dldF90b3AodGhyKTsKKwlpZiAobmFyZ3MgPT0gMCkgeworCQlkdWtfcHVzaF9pbnQodGhy LCAwKTsKKwl9CisJZHVrX3RvX251bWJlcih0aHIsIDApOworCWR1a19zZXRfdG9wKHRociwgMSk7 CisJRFVLX0FTU0VSVF9UT1AodGhyLCAxKTsKKworCWlmICghZHVrX2lzX2NvbnN0cnVjdG9yX2Nh bGwodGhyKSkgeworCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqICBFNSBTZWN0aW9uIDE1Ljcu Mi4xIHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN0cnVjdGVkIG9iamVjdAorCSAqICBtdXN0IGhhdmUg dGhlIG9yaWdpbmFsIE51bWJlci5wcm90b3R5cGUgYXMgaXRzIGludGVybmFsCisJICogIHByb3Rv dHlwZS4gIEhvd2V2ZXIsIHNpbmNlIE51bWJlci5wcm90b3R5cGUgaXMgbm9uLXdyaXRhYmxlCisJ ICogIGFuZCBub24tY29uZmlndXJhYmxlLCB0aGlzIGRvZXNuJ3QgaGF2ZSB0byBiZSBlbmZvcmNl ZCBoZXJlOgorCSAqICBUaGUgZGVmYXVsdCBvYmplY3QgKGJvdW5kIHRvICd0aGlzJykgaXMgT0ss IHRob3VnaCB3ZSBoYXZlCisJICogIHRvIGNoYW5nZSBpdHMgY2xhc3MuCisJICoKKwkgKiAgSW50 ZXJuYWwgdmFsdWUgc2V0IHRvIFRvTnVtYmVyKGFyZykgb3IgKzA7IGlmIG5vIGFyZyBnaXZlbiwK KwkgKiAgVG9OdW1iZXIodW5kZWZpbmVkKSA9IE5hTiwgc28gc3BlY2lhbCB0cmVhdG1lbnQgaXMg bmVlZGVkCisJICogIChhYm92ZSkuICBTdHJpbmcgaW50ZXJuYWwgdmFsdWUgaXMgaW1tdXRhYmxl LgorCSAqLworCisJLyogWFhYOiBoZWxwZXIgKi8KKwlkdWtfcHVzaF90aGlzKHRocik7CisJaF90 aGlzID0gZHVrX2tub3duX2hvYmplY3QodGhyLCAtMSk7CisJRFVLX0hPQkpFQ1RfU0VUX0NMQVNT X05VTUJFUihoX3RoaXMsIERVS19IT0JKRUNUX0NMQVNTX05VTUJFUik7CisKKwlEVUtfQVNTRVJU KERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCBoX3RoaXMpID09IHRoci0+YnVp bHRpbnNbRFVLX0JJRFhfTlVNQkVSX1BST1RPVFlQRV0pOworCURVS19BU1NFUlQoRFVLX0hPQkpF Q1RfR0VUX0NMQVNTX05VTUJFUihoX3RoaXMpID09IERVS19IT0JKRUNUX0NMQVNTX05VTUJFUik7 CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfRVhURU5TSUJMRShoX3RoaXMpKTsKKworCWR1 a19kdXBfMCh0aHIpOyAgLyogLT4gWyB2YWwgb2JqIHZhbCBdICovCisJZHVrX3hkZWZfcHJvcF9z dHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfVkFMVUUsIERVS19QUk9QREVTQ19G TEFHU19OT05FKTsKKwlyZXR1cm4gMDsgIC8qIG5vIHJldHVybiB2YWx1ZSAtPiBkb24ndCByZXBs YWNlIGNyZWF0ZWQgdmFsdWUgKi8KK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlf bnVtYmVyX3Byb3RvdHlwZV92YWx1ZV9vZihkdWtfaHRocmVhZCAqdGhyKSB7CisJKHZvaWQpIGR1 a19fcHVzaF90aGlzX251bWJlcl9wbGFpbih0aHIpOworCXJldHVybiAxOworfQorCitEVUtfSU5U RVJOQUwgZHVrX3JldF90IGR1a19iaV9udW1iZXJfcHJvdG90eXBlX3RvX3N0cmluZyhkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX3NtYWxsX2ludF90IHJhZGl4OworCWR1a19zbWFsbF91aW50X3Qg bjJzX2ZsYWdzOworCisJKHZvaWQpIGR1a19fcHVzaF90aGlzX251bWJlcl9wbGFpbih0aHIpOwor CWlmIChkdWtfaXNfdW5kZWZpbmVkKHRociwgMCkpIHsKKwkJcmFkaXggPSAxMDsKKwl9IGVsc2Ug eworCQlyYWRpeCA9IChkdWtfc21hbGxfaW50X3QpIGR1a190b19pbnRfY2hlY2tfcmFuZ2UodGhy LCAwLCAyLCAzNik7CisJfQorCURVS19EREQoRFVLX0RERFBSSU5UKCJyYWRpeD0lbGQiLCAobG9u ZykgcmFkaXgpKTsKKworCW4yc19mbGFncyA9IDA7CisKKwlkdWtfbnVtY29udl9zdHJpbmdpZnko dGhyLAorCSAgICAgICAgICAgICAgICAgICAgICByYWRpeCAvKnJhZGl4Ki8sCisJICAgICAgICAg ICAgICAgICAgICAgIDAgLypkaWdpdHMqLywKKwkgICAgICAgICAgICAgICAgICAgICAgbjJzX2Zs YWdzIC8qZmxhZ3MqLyk7CisJcmV0dXJuIDE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX251bWJlcl9wcm90b3R5cGVfdG9fbG9jYWxlX3N0cmluZyhkdWtfaHRocmVhZCAqdGhy KSB7CisJLyogWFhYOiBqdXN0IHVzZSB0b1N0cmluZygpIGZvciBub3c7IHBlcm1pdHRlZCBhbHRo b3VnaCBub3QgcmVjb21tZW5kZWQuCisJICogbmFyZ3M9PTEsIHNvIHJhZGl4IGlzIHBhc3NlZCB0 byB0b1N0cmluZygpLgorCSAqLworCXJldHVybiBkdWtfYmlfbnVtYmVyX3Byb3RvdHlwZV90b19z dHJpbmcodGhyKTsKK30KKworLyoKKyAqICB0b0ZpeGVkKCksIHRvRXhwb25lbnRpYWwoKSwgdG9Q cmVjaXNpb24oKQorICovCisKKy8qIFhYWDogc2hhcmVkIGhlbHBlciBmb3IgdG9GaXhlZCgpLCB0 b0V4cG9uZW50aWFsKCksIHRvUHJlY2lzaW9uKCk/ICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0 X3QgZHVrX2JpX251bWJlcl9wcm90b3R5cGVfdG9fZml4ZWQoZHVrX2h0aHJlYWQgKnRocikgewor CWR1a19zbWFsbF9pbnRfdCBmcmFjX2RpZ2l0czsKKwlkdWtfZG91YmxlX3QgZDsKKwlkdWtfc21h bGxfaW50X3QgYzsKKwlkdWtfc21hbGxfdWludF90IG4yc19mbGFnczsKKworCS8qIEluIEVTNS4x IGZyYWNfZGlnaXRzIGlzIGNvZXJjZWQgZmlyc3Q7IGluIEVTMjAxNSB0aGUgJ3RoaXMgbnVtYmVy CisJICogdmFsdWUnIGNoZWNrIGlzIGRvbmUgZmlyc3QuCisJICovCisJZCA9IGR1a19fcHVzaF90 aGlzX251bWJlcl9wbGFpbih0aHIpOworCWZyYWNfZGlnaXRzID0gKGR1a19zbWFsbF9pbnRfdCkg ZHVrX3RvX2ludF9jaGVja19yYW5nZSh0aHIsIDAsIDAsIDIwKTsKKworCWMgPSAoZHVrX3NtYWxs X2ludF90KSBEVUtfRlBDTEFTU0lGWShkKTsKKwlpZiAoYyA9PSBEVUtfRlBfTkFOIHx8IGMgPT0g RFVLX0ZQX0lORklOSVRFKSB7CisJCWdvdG8gdXNlX3RvX3N0cmluZzsKKwl9CisKKwlpZiAoZCA+ PSAxLjBlMjEgfHwgZCA8PSAtMS4wZTIxKSB7CisJCWdvdG8gdXNlX3RvX3N0cmluZzsKKwl9CisK KwluMnNfZmxhZ3MgPSBEVUtfTjJTX0ZMQUdfRklYRURfRk9STUFUIHwKKwkgICAgICAgICAgICBE VUtfTjJTX0ZMQUdfRlJBQ1RJT05fRElHSVRTOworCisJZHVrX251bWNvbnZfc3RyaW5naWZ5KHRo ciwKKwkgICAgICAgICAgICAgICAgICAgICAgMTAgLypyYWRpeCovLAorCSAgICAgICAgICAgICAg ICAgICAgICBmcmFjX2RpZ2l0cyAvKmRpZ2l0cyovLAorCSAgICAgICAgICAgICAgICAgICAgICBu MnNfZmxhZ3MgLypmbGFncyovKTsKKwlyZXR1cm4gMTsKKworIHVzZV90b19zdHJpbmc6CisJRFVL X0FTU0VSVF9UT1AodGhyLCAyKTsKKwlkdWtfdG9fc3RyaW5nKHRociwgLTEpOworCXJldHVybiAx OworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9udW1iZXJfcHJvdG90eXBlX3Rv X2V4cG9uZW50aWFsKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfYm9vbF90IGZyYWNfdW5kZWZp bmVkOworCWR1a19zbWFsbF9pbnRfdCBmcmFjX2RpZ2l0czsKKwlkdWtfZG91YmxlX3QgZDsKKwlk dWtfc21hbGxfaW50X3QgYzsKKwlkdWtfc21hbGxfdWludF90IG4yc19mbGFnczsKKworCWQgPSBk dWtfX3B1c2hfdGhpc19udW1iZXJfcGxhaW4odGhyKTsKKworCWZyYWNfdW5kZWZpbmVkID0gZHVr X2lzX3VuZGVmaW5lZCh0aHIsIDApOworCWR1a190b19pbnQodGhyLCAwKTsgIC8qIGZvciBzaWRl IGVmZmVjdHMgKi8KKworCWMgPSAoZHVrX3NtYWxsX2ludF90KSBEVUtfRlBDTEFTU0lGWShkKTsK KwlpZiAoYyA9PSBEVUtfRlBfTkFOIHx8IGMgPT0gRFVLX0ZQX0lORklOSVRFKSB7CisJCWdvdG8g dXNlX3RvX3N0cmluZzsKKwl9CisKKwlmcmFjX2RpZ2l0cyA9IChkdWtfc21hbGxfaW50X3QpIGR1 a190b19pbnRfY2hlY2tfcmFuZ2UodGhyLCAwLCAwLCAyMCk7CisKKwluMnNfZmxhZ3MgPSBEVUtf TjJTX0ZMQUdfRk9SQ0VfRVhQIHwKKwkgICAgICAgICAgIChmcmFjX3VuZGVmaW5lZCA/IDAgOiBE VUtfTjJTX0ZMQUdfRklYRURfRk9STUFUKTsKKworCWR1a19udW1jb252X3N0cmluZ2lmeSh0aHIs CisJICAgICAgICAgICAgICAgICAgICAgIDEwIC8qcmFkaXgqLywKKwkgICAgICAgICAgICAgICAg ICAgICAgZnJhY19kaWdpdHMgKyAxIC8qbGVhZGluZyBkaWdpdCArIGZyYWN0aW9ucyovLAorCSAg ICAgICAgICAgICAgICAgICAgICBuMnNfZmxhZ3MgLypmbGFncyovKTsKKwlyZXR1cm4gMTsKKwor IHVzZV90b19zdHJpbmc6CisJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKwlkdWtfdG9fc3RyaW5n KHRociwgLTEpOworCXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19i aV9udW1iZXJfcHJvdG90eXBlX3RvX3ByZWNpc2lvbihkdWtfaHRocmVhZCAqdGhyKSB7CisJLyog VGhlIHNwZWNpZmljYXRpb24gaGFzIHF1aXRlIGF3a3dhcmQgb3JkZXIgb2YgY29lcmNpb24gYW5k CisJICogY2hlY2tzIGZvciB0b1ByZWNpc2lvbigpLiAgVGhlIG9wZXJhdGlvbnMgYmVsb3cgYXJl IGEgYml0CisJICogcmVvcmRlcmVkLCB3aXRoaW4gY29uc3RyYWludHMgb2Ygb2JzZXJ2YWJsZSBz aWRlIGVmZmVjdHMuCisJICovCisKKwlkdWtfZG91YmxlX3QgZDsKKwlkdWtfc21hbGxfaW50X3Qg cHJlYzsKKwlkdWtfc21hbGxfaW50X3QgYzsKKwlkdWtfc21hbGxfdWludF90IG4yc19mbGFnczsK KworCURVS19BU1NFUlRfVE9QKHRociwgMSk7CisKKwlkID0gZHVrX19wdXNoX3RoaXNfbnVtYmVy X3BsYWluKHRocik7CisJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAwKSkgeworCQlnb3RvIHVz ZV90b19zdHJpbmc7CisJfQorCURVS19BU1NFUlRfVE9QKHRociwgMik7CisKKwlkdWtfdG9faW50 KHRociwgMCk7ICAvKiBmb3Igc2lkZSBlZmZlY3RzICovCisKKwljID0gKGR1a19zbWFsbF9pbnRf dCkgRFVLX0ZQQ0xBU1NJRlkoZCk7CisJaWYgKGMgPT0gRFVLX0ZQX05BTiB8fCBjID09IERVS19G UF9JTkZJTklURSkgeworCQlnb3RvIHVzZV90b19zdHJpbmc7CisJfQorCisJcHJlYyA9IChkdWtf c21hbGxfaW50X3QpIGR1a190b19pbnRfY2hlY2tfcmFuZ2UodGhyLCAwLCAxLCAyMSk7CisKKwlu MnNfZmxhZ3MgPSBEVUtfTjJTX0ZMQUdfRklYRURfRk9STUFUIHwKKwkgICAgICAgICAgICBEVUtf TjJTX0ZMQUdfTk9fWkVST19QQUQ7CisKKwlkdWtfbnVtY29udl9zdHJpbmdpZnkodGhyLAorCSAg ICAgICAgICAgICAgICAgICAgICAxMCAvKnJhZGl4Ki8sCisJICAgICAgICAgICAgICAgICAgICAg IHByZWMgLypkaWdpdHMqLywKKwkgICAgICAgICAgICAgICAgICAgICAgbjJzX2ZsYWdzIC8qZmxh Z3MqLyk7CisJcmV0dXJuIDE7CisKKyB1c2VfdG9fc3RyaW5nOgorCS8qIFVzZWQgd2hlbiBwcmVj aXNpb24gaXMgdW5kZWZpbmVkOyBhbHNvIHVzZWQgZm9yIE5hTiAoLT4gIk5hTiIpLAorCSAqIGFu ZCArLy0gaW5maW5pdHkgKC0+ICJJbmZpbml0eSIsICItSW5maW5pdHkiKS4KKwkgKi8KKworCURV S19BU1NFUlRfVE9QKHRociwgMik7CisJZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsKKwlyZXR1cm4g MTsKK30KKworLyoKKyAqICBFUzIwMTUgaXNGaW5pdGUoKSBldGMKKyAqLworCisjaWYgZGVmaW5l ZChEVUtfVVNFX0VTNikKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX251bWJlcl9jaGVj a19zaGFyZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pbnRfdCBtYWdpYzsKKwlkdWtfYm9v bF90IHJldCA9IDA7CisKKwlpZiAoZHVrX2lzX251bWJlcih0aHIsIDApKSB7CisJCWR1a19kb3Vi bGVfdCBkOworCisJCW1hZ2ljID0gZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisJCWQgPSBk dWtfZ2V0X251bWJlcih0aHIsIDApOworCisJCXN3aXRjaCAobWFnaWMpIHsKKwkJY2FzZSAwOiAg LyogaXNGaW5pdGUoKSAqLworCQkJcmV0ID0gZHVrX2RvdWJsZV9pc19maW5pdGUoZCk7CisJCQli cmVhazsKKwkJY2FzZSAxOiAgLyogaXNJbnRlZ2VyKCkgKi8KKwkJCXJldCA9IGR1a19kb3VibGVf aXNfaW50ZWdlcihkKTsKKwkJCWJyZWFrOworCQljYXNlIDI6ICAvKiBpc05hTigpICovCisJCQly ZXQgPSBkdWtfZG91YmxlX2lzX25hbihkKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAgLyogaXNT YWZlSW50ZWdlcigpICovCisJCQlEVUtfQVNTRVJUKG1hZ2ljID09IDMpOworCQkJcmV0ID0gZHVr X2RvdWJsZV9pc19zYWZlX2ludGVnZXIoZCk7CisJCX0KKwl9CisKKwlkdWtfcHVzaF9ib29sZWFu KHRociwgcmV0KTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9FUzYgKi8KKwor I2VuZGlmICAvKiBEVUtfVVNFX05VTUJFUl9CVUlMVElOICovCisvKgorICogIE9iamVjdCBidWls dC1pbnMKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1 ZGVkICovCisKKy8qIE5lZWRlZCBldmVuIHdoZW4gT2JqZWN0IGJ1aWx0LWluIGRpc2FibGVkLiAq LworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X3Byb3RvdHlwZV90b19zdHJp bmcoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a190dmFsICp0djsKKworCXR2ID0gRFVLX0hUSFJF QURfVEhJU19QVFIodGhyKTsKKwlkdWtfcHVzaF9jbGFzc19zdHJpbmdfdHZhbCh0aHIsIHR2LCAw IC8qYXZvaWRfc2lkZV9lZmZlY3RzKi8pOworCXJldHVybiAxOworfQorCisjaWYgZGVmaW5lZChE VUtfVVNFX09CSkVDVF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2Jq ZWN0X2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdWludF90IGFyZ19tYXNr OworCisJYXJnX21hc2sgPSBkdWtfZ2V0X3R5cGVfbWFzayh0aHIsIDApOworCisJaWYgKCFkdWtf aXNfY29uc3RydWN0b3JfY2FsbCh0aHIpICYmICAvKiBub3QgYSBjb25zdHJ1Y3RvciBjYWxsICov CisJICAgICgoYXJnX21hc2sgJiAoRFVLX1RZUEVfTUFTS19OVUxMIHwgRFVLX1RZUEVfTUFTS19V TkRFRklORUQpKSA9PSAwKSkgeyAgLyogYW5kIGFyZ3VtZW50IG5vdCBudWxsIG9yIHVuZGVmaW5l ZCAqLworCQlkdWtfdG9fb2JqZWN0KHRociwgMCk7CisJCXJldHVybiAxOworCX0KKworCS8qIFBv aW50ZXIgYW5kIGJ1ZmZlciBwcmltaXRpdmUgdmFsdWVzIGFyZSB0cmVhdGVkIGxpa2Ugb3RoZXIK KwkgKiBwcmltaXRpdmVzIHZhbHVlcyB3aGljaCBoYXZlIGEgZnVsbHkgZmxlZGdlZCBvYmplY3Qg Y291bnRlcnBhcnQ6CisJICogcHJvbW90ZSB0byBhbiBvYmplY3QgdmFsdWUuICBMaWdodGZ1bmNz IGFuZCBwbGFpbiBidWZmZXJzIGFyZQorCSAqIGNvZXJjZWQgd2l0aCBUb09iamVjdCgpIGV2ZW4g dGhleSBjb3VsZCBhbHNvIGJlIHJldHVybmVkIGFzIGlzLgorCSAqLworCWlmIChhcmdfbWFzayAm IChEVUtfVFlQRV9NQVNLX09CSkVDVCB8CisJICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tf U1RSSU5HIHwKKwkgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19CT09MRUFOIHwKKwkgICAg ICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19OVU1CRVIgfAorCSAgICAgICAgICAgICAgICBEVUtf VFlQRV9NQVNLX1BPSU5URVIgfAorCSAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0JVRkZF UiB8CisJICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfTElHSFRGVU5DKSkgeworCQkvKiBG b3IgRFVLX1RZUEVfT0JKRUNUIHRoZSBjb2VyY2lvbiBpcyBhIG5vLW9wIGFuZCBjb3VsZAorCQkg KiBiZSBjaGVja2VkIGZvciBleHBsaWNpdGx5LCBidXQgT2JqZWN0KG9iaikgY2FsbHMgYXJlCisJ CSAqIG5vdCB2ZXJ5IGNvbW1vbiBzbyBvcHQgZm9yIG1pbmltYWwgZm9vdHByaW50LgorCQkgKi8K KwkJZHVrX3RvX29iamVjdCh0aHIsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwkodm9pZCkgZHVr X3B1c2hfb2JqZWN0X2hlbHBlcih0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RSRUZTIHwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19PQkpF Q1QpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19CSURYX09CSkVDVF9QUk9U T1RZUEUpOworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX09CSkVDVF9CVUlMVElO ICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfT0JKRUNUX0JVSUxUSU4pICYmIGRlZmluZWQoRFVL X1VTRV9FUzYpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9vYmplY3RfY29uc3RydWN0 b3JfYXNzaWduKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaWR4X3QgbmFyZ3M7CisJZHVrX2lu dF90IGlkeDsKKworCW5hcmdzID0gZHVrX2dldF90b3BfcmVxdWlyZV9taW4odGhyLCAxIC8qbWlu X3RvcCovKTsKKworCWR1a190b19vYmplY3QodGhyLCAwKTsKKwlmb3IgKGlkeCA9IDE7IGlkeCA8 IG5hcmdzOyBpZHgrKykgeworCQkvKiBFNyAxOS4xLjIuMSAoc3RlcCA0YSkgKi8KKwkJaWYgKGR1 a19pc19udWxsX29yX3VuZGVmaW5lZCh0aHIsIGlkeCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyogZHVrX2VudW0oKSByZXNwZWN0cyBFUzIwMTUrIFtbT3duUHJvcGVydHlLZXlzXV0gb3Jk ZXJpbmcsIHdoaWNoIGlzCisJCSAqIGNvbnZlbmllbnQgaGVyZS4KKwkJICovCisJCWR1a190b19v YmplY3QodGhyLCBpZHgpOworCQlkdWtfZW51bSh0aHIsIGlkeCwgRFVLX0VOVU1fT1dOX1BST1BF UlRJRVNfT05MWSk7CisJCXdoaWxlIChkdWtfbmV4dCh0aHIsIC0xLCAxIC8qZ2V0X3ZhbHVlKi8p KSB7CisJCQkvKiBbIHRhcmdldCAuLi4gZW51bSBrZXkgdmFsdWUgXSAqLworCQkJZHVrX3B1dF9w cm9wKHRociwgMCk7CisJCQkvKiBbIHRhcmdldCAuLi4gZW51bSBdICovCisJCX0KKwkJLyogQ291 bGQgcG9wIGVudW1lcmF0b3IsIGJ1dCB1bm5lY2Vzc2FyeSBiZWNhdXNlIG9mIGR1a19zZXRfdG9w KCkKKwkJICogYmVsb3cuCisJCSAqLworCX0KKworCWR1a19zZXRfdG9wKHRociwgMSk7CisJcmV0 dXJuIDE7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTikg JiYgZGVmaW5lZChEVUtfVVNFX0VTNikKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX29i amVjdF9jb25zdHJ1Y3Rvcl9pcyhkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9UT1Ao dGhyLCAyKTsKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgZHVrX3NhbWV2YWx1ZSh0aHIsIDAsIDEp KTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX09CSkVDVF9C VUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9y X2NyZWF0ZShkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hvYmplY3QgKnByb3RvOworCisJRFVL X0FTU0VSVF9UT1AodGhyLCAyKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1Rf U1VQUE9SVCkKKwlkdWtfaGJ1Zm9ial9wcm9tb3RlX3BsYWluKHRociwgMCk7CisjZW5kaWYKKwlw cm90byA9IGR1a19yZXF1aXJlX2hvYmplY3RfYWNjZXB0X21hc2sodGhyLCAwLCBEVUtfVFlQRV9N QVNLX05VTEwpOworCURVS19BU1NFUlQocHJvdG8gIT0gTlVMTCB8fCBkdWtfaXNfbnVsbCh0aHIs IDApKTsKKworCSh2b2lkKSBkdWtfcHVzaF9vYmplY3RfaGVscGVyX3Byb3RvKHRociwKKwkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lC TEUgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZM QUdfRkFTVFJFRlMgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19I T0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX09CSkVDVCksCisJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8pOworCisJaWYgKCFkdWtfaXNfdW5k ZWZpbmVkKHRociwgMSkpIHsKKwkJLyogWyBPIFByb3BlcnRpZXMgb2JqIF0gKi8KKworCQlkdWtf cmVwbGFjZSh0aHIsIDApOworCisJCS8qIFsgb2JqIFByb3BlcnRpZXMgXSAqLworCisJCS8qIEp1 c3QgY2FsbCB0aGUgIm9yaWdpbmFsIiBPYmplY3QuZGVmaW5lUHJvcGVydGllcygpIHRvCisJCSAq IGZpbmlzaCB1cC4KKwkJICovCisKKwkJcmV0dXJuIGR1a19iaV9vYmplY3RfY29uc3RydWN0b3Jf ZGVmaW5lX3Byb3BlcnRpZXModGhyKTsKKwl9CisKKwkvKiBbIE8gUHJvcGVydGllcyBvYmogXSAq LworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxUSU4gKi8K KworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTikKK0RVS19JTlRFUk5BTCBkdWtf cmV0X3QgZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9kZWZpbmVfcHJvcGVydGllcyhkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX3NtYWxsX3VpbnRfdCBwYXNzOworCWR1a191aW50X3QgZGVmcHJv cF9mbGFnczsKKwlkdWtfaG9iamVjdCAqb2JqOworCWR1a19pZHhfdCBpZHhfdmFsdWU7CisJZHVr X2hvYmplY3QgKmdldDsKKwlkdWtfaG9iamVjdCAqc2V0OworCisJLyogTGlnaHRmdW5jIGFuZCBw bGFpbiBidWZmZXIgaGFuZGxpbmcgYnkgVG9PYmplY3QoKSBjb2VyY2lvbi4gKi8KKwlvYmogPSBk dWtfcmVxdWlyZV9ob2JqZWN0X3Byb21vdGVfbWFzayh0aHIsIDAsIERVS19UWVBFX01BU0tfTElH SFRGVU5DIHwgRFVLX1RZUEVfTUFTS19CVUZGRVIpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwp OworCisJZHVrX3RvX29iamVjdCh0aHIsIDEpOyAgICAgICAgLyogcHJvcGVydGllcyBvYmplY3Qg Ki8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJ0YXJnZXQ9JSFpVCwgcHJvcGVydGllcz0lIWlU IiwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwg MCksCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIs IDEpKSk7CisKKwkvKgorCSAqICBUd28gcGFzcyBhcHByb2FjaCB0byBwcm9jZXNzaW5nIHRoZSBw cm9wZXJ0eSBkZXNjcmlwdG9ycy4KKwkgKiAgT24gZmlyc3QgcGFzcyB2YWxpZGF0ZSBhbmQgbm9y bWFsaXplIGFsbCBkZXNjcmlwdG9ycyBiZWZvcmUKKwkgKiAgYW55IGNoYW5nZXMgYXJlIG1hZGUg dG8gdGhlIHRhcmdldCBvYmplY3QuICBPbiBzZWNvbmQgcGFzcworCSAqICBtYWtlIHRoZSBhY3R1 YWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgdGFyZ2V0IG9iamVjdC4KKwkgKgorCSAqICBSaWdodCBu b3cgd2UnbGwganVzdCB1c2UgdGhlIHNhbWUgbm9ybWFsaXplL3ZhbGlkYXRlIGhlbHBlcgorCSAq ICBvbiBib3RoIHBhc3NlcywgaWdub3JpbmcgaXRzIG91dHB1dHMgb24gdGhlIGZpcnN0IHBhc3Mu CisJICovCisKKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisJCWR1a19zZXRf dG9wKHRociwgMik7ICAvKiAtPiBbIGhvYmplY3QgcHJvcHMgXSAqLworCQlkdWtfZW51bSh0aHIs IDEsIERVS19FTlVNX09XTl9QUk9QRVJUSUVTX09OTFkgfCBEVUtfRU5VTV9JTkNMVURFX1NZTUJP TFMgLyplbnVtX2ZsYWdzKi8pOworCisJCWZvciAoOzspIHsKKwkJCWR1a19oc3RyaW5nICprZXk7 CisKKwkJCS8qIFsgaG9iamVjdCBwcm9wcyBlbnVtKHByb3BzKSBdICovCisKKwkJCWR1a19zZXRf dG9wKHRociwgMyk7CisKKwkJCWlmICghZHVrX25leHQodGhyLCAyLCAxIC8qZ2V0X3ZhbHVlKi8p KSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBrZXk9 JSFpVCwgZGVzYz0lIWlUIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBk dWtfZ2V0X3R2YWwodGhyLCAtMiksCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwg KikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisKKwkJCS8qIFsgaG9iamVjdCBwcm9wcyBlbnVt KHByb3BzKSBrZXkgZGVzYyBdICovCisKKwkJCWR1a19ob2JqZWN0X3ByZXBhcmVfcHJvcGVydHlf ZGVzY3JpcHRvcih0aHIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgNCAvKmlkeF9kZXNjKi8sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmRlZnByb3BfZmxhZ3MsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmlkeF92YWx1ZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZ2V0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzZXQpOworCisJCQkvKiBbIGhvYmplY3QgcHJvcHMgZW51bShwcm9wcykga2V5IGRlc2MgW211 bHRpcGxlIHZhbHVlc10gXSAqLworCisJCQlpZiAocGFzcyA9PSAwKSB7CisJCQkJY29udGludWU7 CisJCQl9CisKKwkJCS8qIFRoaXMgYWxsb3dzIHN5bWJvbHMgb24gcHVycG9zZS4gKi8KKwkJCWtl eSA9IGR1a19rbm93bl9oc3RyaW5nKHRociwgMyk7CisJCQlEVUtfQVNTRVJUKGtleSAhPSBOVUxM KTsKKworCQkJZHVrX2hvYmplY3RfZGVmaW5lX3Byb3BlcnR5X2hlbHBlcih0aHIsCisJCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZnByb3BfZmxhZ3MsCisJCQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwKKwkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga2V5LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZHhfdmFsdWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCwK KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LAorCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qdGhyb3dfZmxhZyovKTsKKwkJfQorCX0KKwor CS8qCisJICogIFJldHVybiB0YXJnZXQgb2JqZWN0CisJICovCisKKwlkdWtfZHVwXzAodGhyKTsK KwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTiAqLworCisj aWYgZGVmaW5lZChEVUtfVVNFX09CSkVDVF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19yZXRf dCBkdWtfYmlfb2JqZWN0X2NvbnN0cnVjdG9yX3NlYWxfZnJlZXplX3NoYXJlZChkdWtfaHRocmVh ZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9UT1AodGhyLCAxKTsKKworCWR1a19zZWFsX2ZyZWV6ZV9y YXcodGhyLCAwLCAoZHVrX2Jvb2xfdCkgZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocikgLyppc19m cmVlemUqLyk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxU SU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTikKK0RVS19JTlRFUk5B TCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9pc19zZWFsZWRfZnJvemVuX3No YXJlZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hvYmplY3QgKmg7CisJZHVrX2Jvb2xfdCBp c19mcm96ZW47CisJZHVrX3VpbnRfdCBtYXNrOworCisJaXNfZnJvemVuID0gKGR1a19ib29sX3Qp IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworCW1hc2sgPSBkdWtfZ2V0X3R5cGVfbWFzayh0 aHIsIDApOworCWlmIChtYXNrICYgKERVS19UWVBFX01BU0tfTElHSFRGVU5DIHwgRFVLX1RZUEVf TUFTS19CVUZGRVIpKSB7CisJCURVS19BU1NFUlQoaXNfZnJvemVuID09IDAgfHwgaXNfZnJvemVu ID09IDEpOworCQlkdWtfcHVzaF9ib29sZWFuKHRociwgKG1hc2sgJiBEVUtfVFlQRV9NQVNLX0xJ R0hURlVOQykgPworCQkgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiAgICAgICAgICAgICAg IC8qIGxpZ2h0ZnVuYyBhbHdheXMgZnJvemVuIGFuZCBzZWFsZWQgKi8KKwkJICAgICAgICAgICAg ICAgICAgICAgICAgICAoaXNfZnJvemVuIF4gMSkpOyAvKiBidWZmZXIgc2VhbGVkIGJ1dCBub3Qg ZnJvemVuIChpbmRleCBwcm9wcyB3cml0YWJsZSkgKi8KKwl9IGVsc2UgeworCQkvKiBFUzIwMTUg U2VjdGlvbnMgMTkuMS4yLjEyLCAxOS4xLjIuMTM6IGFueXRoaW5nIG90aGVyIHRoYW4gYW4gb2Jq ZWN0CisJCSAqIGlzIGNvbnNpZGVyZWQgdG8gYmUgYWxyZWFkeSBzZWFsZWQgYW5kIGZyb3plbi4K KwkJICovCisJCWggPSBkdWtfZ2V0X2hvYmplY3QodGhyLCAwKTsKKwkJZHVrX3B1c2hfYm9vbGVh bih0aHIsIChoID09IE5VTEwpIHx8CisJCSAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVj dF9vYmplY3RfaXNfc2VhbGVkX2Zyb3plbl9oZWxwZXIodGhyLCBoLCBpc19mcm96ZW4gLyppc19m cm96ZW4qLykpOworCX0KKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9PQkpFQ1Rf QlVJTFRJTiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX09CSkVDVF9CVUlMVElOKQorRFVLX0lO VEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X3Byb3RvdHlwZV90b19sb2NhbGVfc3RyaW5n KGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDApOworCSh2b2lkKSBk dWtfcHVzaF90aGlzX2NvZXJjaWJsZV90b19vYmplY3QodGhyKTsKKwlkdWtfZ2V0X3Byb3Bfc3Ry aWR4X3Nob3J0KHRociwgMCwgRFVLX1NUUklEWF9UT19TVFJJTkcpOworI2lmIDAgIC8qIFRoaXMg aXMgbWVudGlvbmVkIGV4cGxpY2l0bHkgaW4gdGhlIEU1LjEgc3BlYywgYnV0IGR1a19jYWxsX21l dGhvZCgpIGNoZWNrcyBmb3IgaXQgaW4gcHJhY3RpY2UuICovCisJZHVrX3JlcXVpcmVfY2FsbGFi bGUodGhyLCAxKTsKKyNlbmRpZgorCWR1a19kdXBfMCh0aHIpOyAgLyogLT4gWyBPIHRvU3RyaW5n IE8gXSAqLworCWR1a19jYWxsX21ldGhvZCh0aHIsIDApOyAgLyogWFhYOiBjYWxsIG1ldGhvZCB0 YWlsIGNhbGw/ICovCisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JV SUxUSU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTikKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9wcm90b3R5cGVfdmFsdWVfb2YoZHVrX2h0aHJl YWQgKnRocikgeworCS8qIEZvciBsaWdodGZ1bmNzIGFuZCBwbGFpbiBidWZmZXJzLCByZXR1cm5z IE9iamVjdCgpIGNvZXJjZWQuICovCisJKHZvaWQpIGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3Rv X29iamVjdCh0aHIpOworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX09CSkVDVF9C VUlMVElOICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfT0JKRUNUX0JVSUxUSU4pCitEVUtfSU5U RVJOQUwgZHVrX3JldF90IGR1a19iaV9vYmplY3RfcHJvdG90eXBlX2lzX3Byb3RvdHlwZV9vZihk dWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hvYmplY3QgKmhfdjsKKwlkdWtfaG9iamVjdCAqaF9v Ymo7CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDEpOworCisJaF92ID0gZHVrX2dldF9ob2JqZWN0 KHRociwgMCk7CisJaWYgKCFoX3YpIHsKKwkJZHVrX3B1c2hfZmFsc2UodGhyKTsgIC8qIFhYWDog dGFpbCBjYWxsOiByZXR1cm4gZHVrX3B1c2hfZmFsc2UodGhyKSAqLworCQlyZXR1cm4gMTsKKwl9 CisKKwloX29iaiA9IGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX29iamVjdCh0aHIpOworCURV S19BU1NFUlQoaF9vYmogIT0gTlVMTCk7CisKKwkvKiBFNS4xIFNlY3Rpb24gMTUuMi40LjYsIHN0 ZXAgMy5hLCBsb29rdXAgcHJvdG8gb25jZSBiZWZvcmUgY29tcGFyZS4KKwkgKiBQcm90b3R5cGUg bG9vcHMgc2hvdWxkIGNhdXNlIGFuIGVycm9yIHRvIGJlIHRocm93bi4KKwkgKi8KKwlkdWtfcHVz aF9ib29sZWFuKHRociwgZHVrX2hvYmplY3RfcHJvdG90eXBlX2NoYWluX2NvbnRhaW5zKHRociwg RFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGhfdiksIGhfb2JqLCAwIC8qaWdu b3JlX2xvb3AqLykpOworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtfVVNFX09CSkVDVF9C VUlMVElOICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfT0JKRUNUX0JVSUxUSU4pCitEVUtfSU5U RVJOQUwgZHVrX3JldF90IGR1a19iaV9vYmplY3RfcHJvdG90eXBlX2hhc19vd25fcHJvcGVydHko ZHVrX2h0aHJlYWQgKnRocikgeworCXJldHVybiAoZHVrX3JldF90KSBkdWtfaG9iamVjdF9vYmpl Y3Rfb3ducHJvcF9oZWxwZXIodGhyLCAwIC8qcmVxdWlyZWRfZGVzY19mbGFncyovKTsKK30KKyNl bmRpZiAgLyogRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNF X09CSkVDVF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X3By b3RvdHlwZV9wcm9wZXJ0eV9pc19lbnVtZXJhYmxlKGR1a19odGhyZWFkICp0aHIpIHsKKwlyZXR1 cm4gKGR1a19yZXRfdCkgZHVrX2hvYmplY3Rfb2JqZWN0X293bnByb3BfaGVscGVyKHRociwgRFVL X1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSAvKnJlcXVpcmVkX2Rlc2NfZmxhZ3MqLyk7Cit9Cisj ZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxUSU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VT RV9PQkpFQ1RfQlVJTFRJTikgfHwgZGVmaW5lZChEVUtfVVNFX1JFRkxFQ1RfQlVJTFRJTikKKy8q IFNoYXJlZCBoZWxwZXIgdG8gaW1wbGVtZW50IE9iamVjdC5nZXRQcm90b3R5cGVPZiwKKyAqIE9i amVjdC5wcm90b3R5cGUuX19wcm90b19fIGdldHRlciwgYW5kIFJlZmxlY3QuZ2V0UHJvdG90eXBl T2YuCisgKgorICogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYu MC9pbmRleC5odG1sI3NlYy1nZXQtb2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX18KKyAqLworRFVL X0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2dldHByb3RvdHlwZV9zaGFyZWQoZHVr X2h0aHJlYWQgKnRocikgeworCS8qCisJICogIG1hZ2ljID0gMDogX19wcm90b19fIGdldHRlcgor CSAqICBtYWdpYyA9IDE6IE9iamVjdC5nZXRQcm90b3R5cGVPZigpCisJICogIG1hZ2ljID0gMjog UmVmbGVjdC5nZXRQcm90b3R5cGVPZigpCisJICovCisKKwlkdWtfaG9iamVjdCAqaDsKKwlkdWtf aG9iamVjdCAqcHJvdG87CisJZHVrX3R2YWwgKnR2OworCWR1a19pbnRfdCBtYWdpYzsKKworCW1h Z2ljID0gZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisKKwlpZiAobWFnaWMgPT0gMCkgewor CQlEVUtfQVNTRVJUX1RPUCh0aHIsIDApOworCQlkdWtfcHVzaF90aGlzX2NvZXJjaWJsZV90b19v YmplY3QodGhyKTsKKwl9CisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0aHIpID49IDEpOworCWlm IChtYWdpYyA8IDIpIHsKKwkJLyogRVMyMDE1IFNlY3Rpb24gMTkuMS4yLjksIHN0ZXAgMSAqLwor CQlkdWtfdG9fb2JqZWN0KHRociwgMCk7CisJfQorCXR2ID0gRFVLX0dFVF9UVkFMX1BPU0lEWCh0 aHIsIDApOworCisJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2KSkgeworCWNhc2UgRFVLX1RB R19CVUZGRVI6CisJCXByb3RvID0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9VSU5UOEFSUkFZX1BS T1RPVFlQRV07CisJCWJyZWFrOworCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6CisJCXByb3RvID0g dGhyLT5idWlsdGluc1tEVUtfQklEWF9GVU5DVElPTl9QUk9UT1RZUEVdOworCQlicmVhazsKKwlj YXNlIERVS19UQUdfT0JKRUNUOgorCQloID0gRFVLX1RWQUxfR0VUX09CSkVDVCh0dik7CisJCXBy b3RvID0gRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGgpOworCQlicmVhazsK KwlkZWZhdWx0OgorCQkvKiBUaGlzIGltcGxpY2l0bHkgaGFuZGxlcyBDaGVja09iamVjdENvZXJj aWJsZSgpIGNhdXNlZAorCQkgKiBUeXBlRXJyb3IuCisJCSAqLworCQlEVUtfRENFUlJPUl9UWVBF X0lOVkFMSURfQVJHUyh0aHIpOworCX0KKwlpZiAocHJvdG8gIT0gTlVMTCkgeworCQlkdWtfcHVz aF9ob2JqZWN0KHRociwgcHJvdG8pOworCX0gZWxzZSB7CisJCWR1a19wdXNoX251bGwodGhyKTsK Kwl9CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxUSU4gfHwg RFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpFQ1Rf QlVJTFRJTikgfHwgZGVmaW5lZChEVUtfVVNFX1JFRkxFQ1RfQlVJTFRJTikKKy8qIFNoYXJlZCBo ZWxwZXIgdG8gaW1wbGVtZW50IEVTMjAxNSBPYmplY3Quc2V0UHJvdG90eXBlT2YsCisgKiBPYmpl Y3QucHJvdG90eXBlLl9fcHJvdG9fXyBzZXR0ZXIsIGFuZCBSZWZsZWN0LnNldFByb3RvdHlwZU9m LgorICoKKyAqIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAv aW5kZXguaHRtbCNzZWMtZ2V0LW9iamVjdC5wcm90b3R5cGUuX19wcm90b19fCisgKiBodHRwOi8v d3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLW9i amVjdC5zZXRwcm90b3R5cGVvZgorICovCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9v YmplY3Rfc2V0cHJvdG90eXBlX3NoYXJlZChkdWtfaHRocmVhZCAqdGhyKSB7CisJLyoKKwkgKiAg bWFnaWMgPSAwOiBfX3Byb3RvX18gc2V0dGVyCisJICogIG1hZ2ljID0gMTogT2JqZWN0LnNldFBy b3RvdHlwZU9mKCkKKwkgKiAgbWFnaWMgPSAyOiBSZWZsZWN0LnNldFByb3RvdHlwZU9mKCkKKwkg Ki8KKworCWR1a19ob2JqZWN0ICpoX29iajsKKwlkdWtfaG9iamVjdCAqaF9uZXdfcHJvdG87CisJ ZHVrX2hvYmplY3QgKmhfY3VycjsKKwlkdWtfcmV0X3QgcmV0X3N1Y2Nlc3MgPSAxOyAgLyogcmV0 dmFsIGZvciBzdWNjZXNzIHBhdGggKi8KKwlkdWtfdWludF90IG1hc2s7CisJZHVrX2ludF90IG1h Z2ljOworCisJLyogUHJlbGltaW5hcmllcyBmb3IgX19wcm90b19fIGFuZCBzZXRQcm90b3R5cGVP ZiAoRTYgMTkuMS4yLjE4IHN0ZXBzIDEtNCkuICovCisJbWFnaWMgPSBkdWtfZ2V0X2N1cnJlbnRf bWFnaWModGhyKTsKKwlpZiAobWFnaWMgPT0gMCkgeworCQlkdWtfcHVzaF90aGlzX2NoZWNrX29i amVjdF9jb2VyY2libGUodGhyKTsKKwkJZHVrX2luc2VydCh0aHIsIDApOworCQlpZiAoIWR1a19j aGVja190eXBlX21hc2sodGhyLCAxLCBEVUtfVFlQRV9NQVNLX05VTEwgfCBEVUtfVFlQRV9NQVNL X09CSkVDVCkpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogX19wcm90b19fIHNldHRlciBy ZXR1cm5zICd1bmRlZmluZWQnIG9uIHN1Y2Nlc3MgdW5saWtlIHRoZQorCQkgKiBzZXRQcm90b3R5 cGVPZigpIGNhbGwgd2hpY2ggcmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC4KKwkJICovCisJCXJl dF9zdWNjZXNzID0gMDsKKwl9IGVsc2UgeworCQlpZiAobWFnaWMgPT0gMSkgeworCQkJZHVrX3Jl cXVpcmVfb2JqZWN0X2NvZXJjaWJsZSh0aHIsIDApOworCQl9IGVsc2UgeworCQkJZHVrX3JlcXVp cmVfaG9iamVjdF9hY2NlcHRfbWFzayh0aHIsIDAsCisJCQkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19UWVBFX01BU0tfTElHSFRGVU5DIHwKKwkJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19CVUZGRVIpOworCQl9CisJCWR1a19yZXF1aXJl X3R5cGVfbWFzayh0aHIsIDEsIERVS19UWVBFX01BU0tfTlVMTCB8IERVS19UWVBFX01BU0tfT0JK RUNUKTsKKwl9CisKKwloX25ld19wcm90byA9IGR1a19nZXRfaG9iamVjdCh0aHIsIDEpOworCS8q IGhfbmV3X3Byb3RvIG1heSBiZSBOVUxMICovCisKKwltYXNrID0gZHVrX2dldF90eXBlX21hc2so dGhyLCAwKTsKKwlpZiAobWFzayAmIChEVUtfVFlQRV9NQVNLX0xJR0hURlVOQyB8IERVS19UWVBF X01BU0tfQlVGRkVSKSkgeworCQlkdWtfaG9iamVjdCAqY3Vycl9wcm90bzsKKwkJY3Vycl9wcm90 byA9IHRoci0+YnVpbHRpbnNbKG1hc2sgJiBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQykgPworCQkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0JJRFhfRlVOQ1RJT05fUFJPVE9UWVBF IDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19CSURYX1VJTlQ4QVJSQVlf UFJPVE9UWVBFXTsKKwkJaWYgKGhfbmV3X3Byb3RvID09IGN1cnJfcHJvdG8pIHsKKwkJCWdvdG8g c2tpcDsKKwkJfQorCQlnb3RvIGZhaWxfbm9uZXh0ZW5zaWJsZTsKKwl9CisJaF9vYmogPSBkdWtf Z2V0X2hvYmplY3QodGhyLCAwKTsKKwlpZiAoaF9vYmogPT0gTlVMTCkgeworCQlnb3RvIHNraXA7 CisJfQorCURVS19BU1NFUlQoaF9vYmogIT0gTlVMTCk7CisKKwkvKiBbW1NldFByb3RvdHlwZU9m XV0gc3RhbmRhcmQgYmVoYXZpb3IsIEU2IDkuMS4yLiAqLworCS8qIFRPRE86IGltcGxlbWVudCBQ cm94eSBvYmplY3Qgc3VwcG9ydCBoZXJlICovCisKKwlpZiAoaF9uZXdfcHJvdG8gPT0gRFVLX0hP QkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGhfb2JqKSkgeworCQlnb3RvIHNraXA7CisJ fQorCWlmICghRFVLX0hPQkpFQ1RfSEFTX0VYVEVOU0lCTEUoaF9vYmopKSB7CisJCWdvdG8gZmFp bF9ub25leHRlbnNpYmxlOworCX0KKwlmb3IgKGhfY3VyciA9IGhfbmV3X3Byb3RvOyBoX2N1cnIg IT0gTlVMTDsgaF9jdXJyID0gRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGhf Y3VycikpIHsKKwkJLyogTG9vcCBwcmV2ZW50aW9uLiAqLworCQlpZiAoaF9jdXJyID09IGhfb2Jq KSB7CisJCQlnb3RvIGZhaWxfbG9vcDsKKwkJfQorCX0KKwlEVUtfSE9CSkVDVF9TRVRfUFJPVE9U WVBFX1VQRFJFRih0aHIsIGhfb2JqLCBoX25ld19wcm90byk7CisJLyogZmFsbCB0aHJ1ICovCisK KyBza2lwOgorCWR1a19zZXRfdG9wKHRociwgMSk7CisJaWYgKG1hZ2ljID09IDIpIHsKKwkJZHVr X3B1c2hfdHJ1ZSh0aHIpOworCX0KKwlyZXR1cm4gcmV0X3N1Y2Nlc3M7CisKKyBmYWlsX25vbmV4 dGVuc2libGU6CisgZmFpbF9sb29wOgorCWlmIChtYWdpYyAhPSAyKSB7CisJCURVS19EQ0VSUk9S X1RZUEVfSU5WQUxJRF9BUkdTKHRocik7CisJfSBlbHNlIHsKKwkJZHVrX3B1c2hfZmFsc2UodGhy KTsKKwkJcmV0dXJuIDE7CisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNFX09CSkVDVF9CVUlMVElO IHx8IERVS19VU0VfUkVGTEVDVF9CVUlMVElOICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfT0JK RUNUX0JVSUxUSU4pIHx8IGRlZmluZWQoRFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4pCitEVUtfSU5U RVJOQUwgZHVrX3JldF90IGR1a19iaV9vYmplY3RfY29uc3RydWN0b3JfZGVmaW5lX3Byb3BlcnR5 KGR1a19odGhyZWFkICp0aHIpIHsKKwkvKgorCSAqICBtYWdpYyA9IDA6IE9iamVjdC5kZWZpbmVQ cm9wZXJ0eSgpCisJICogIG1hZ2ljID0gMTogUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSgpCisJICov CisKKwlkdWtfaG9iamVjdCAqb2JqOworCWR1a19oc3RyaW5nICprZXk7CisJZHVrX2hvYmplY3Qg KmdldDsKKwlkdWtfaG9iamVjdCAqc2V0OworCWR1a19pZHhfdCBpZHhfdmFsdWU7CisJZHVrX3Vp bnRfdCBkZWZwcm9wX2ZsYWdzOworCWR1a19zbWFsbF91aW50X3QgbWFnaWM7CisJZHVrX2Jvb2xf dCB0aHJvd19mbGFnOworCWR1a19ib29sX3QgcmV0OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVM TCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KCk6IGN0 eD0lcCBvYmo9JSFUIGtleT0lIVQgZGVzYz0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAgICh2 b2lkICopIHRociwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90 dmFsKHRociwgMCksCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRf dHZhbCh0aHIsIDEpLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0 X3R2YWwodGhyLCAyKSkpOworCisJLyogWyBvYmoga2V5IGRlc2MgXSAqLworCisJbWFnaWMgPSAo ZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisKKwkvKiBMaWdo dGZ1bmNzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IGNvZXJjaW5nIHRvIGEgdGVtcG9yYXJ5 CisJICogRnVuY3Rpb24gb2JqZWN0OyBjaGFuZ2VzIHdpbGwgYmUgYWxsb3dlZCAodGhlIGNvZXJj ZWQgdmFsdWUgaXMKKwkgKiBleHRlbnNpYmxlKSBidXQgd2lsbCBiZSBsb3N0LiAgU2FtZSBmb3Ig cGxhaW4gYnVmZmVycy4KKwkgKi8KKwlvYmogPSBkdWtfcmVxdWlyZV9ob2JqZWN0X3Byb21vdGVf bWFzayh0aHIsIDAsIERVS19UWVBFX01BU0tfTElHSFRGVU5DIHwgRFVLX1RZUEVfTUFTS19CVUZG RVIpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCWtleSA9IGR1a190b19wcm9wZXJ0eV9r ZXlfaHN0cmluZyh0aHIsIDEpOworCSh2b2lkKSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgMik7 CisKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsK KwlEVUtfQVNTRVJUKGR1a19nZXRfaG9iamVjdCh0aHIsIDIpICE9IE5VTEwpOworCisJLyoKKwkg KiAgVmFsaWRhdGUgYW5kIGNvbnZlcnQgYXJndW1lbnQgcHJvcGVydHkgZGVzY3JpcHRvciAoYW4g RUNNQVNjcmlwdAorCSAqICBvYmplY3QpIGludG8gYSBzZXQgb2YgZGVmcHJvcF9mbGFncyBhbmQg cG9zc2libHkgcHJvcGVydHkgdmFsdWUsCisJICogIGdldHRlciwgYW5kL29yIHNldHRlciB2YWx1 ZXMgb24gdGhlIHZhbHVlIHN0YWNrLgorCSAqCisJICogIExpZ2h0ZnVuYyBzZXQvZ2V0IHZhbHVl cyBhcmUgY29lcmNlZCB0byBmdWxsIEZ1bmN0aW9ucy4KKwkgKi8KKworCWR1a19ob2JqZWN0X3By ZXBhcmVfcHJvcGVydHlfZGVzY3JpcHRvcih0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIgLyppZHhfZGVzYyovLAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZGVmcHJvcF9mbGFncywKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmlkeF92YWx1ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmdldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnNldCk7CisKKwkvKgorCSAqICBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgaGVs cGVyIGZvciB0aGUgYWN0dWFsIG9wZXJhdGlvbi4KKwkgKi8KKworCURVS19BU1NFUlQobWFnaWMg PT0gMFUgfHwgbWFnaWMgPT0gMVUpOworCXRocm93X2ZsYWcgPSBtYWdpYyBeIDFVOworCXJldCA9 IGR1a19ob2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9oZWxwZXIodGhyLAorCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvcF9mbGFncywKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGtleSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlkeF92YWx1ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl dCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93X2ZsYWcp OworCisJLyogSWdub3JlIHRoZSBub3JtYWxpemUvdmFsaWRhdGUgaGVscGVyIG91dHB1dHMgb24g dGhlIHZhbHVlIHN0YWNrLAorCSAqIHRoZXkncmUgcG9wcGVkIGF1dG9tYXRpY2FsbHkuCisJICov CisKKwlpZiAobWFnaWMgPT0gMFUpIHsKKwkJLyogT2JqZWN0LmRlZmluZVByb3BlcnR5KCk6IHJl dHVybiB0YXJnZXQgb2JqZWN0LiAqLworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgb2JqKTsKKwl9 IGVsc2UgeworCQkvKiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KCk6IHJldHVybiBzdWNjZXNzL2Zh aWwuICovCisJCWR1a19wdXNoX2Jvb2xlYW4odGhyLCByZXQpOworCX0KKwlyZXR1cm4gMTsKK30K KyNlbmRpZiAgLyogRFVLX1VTRV9PQkpFQ1RfQlVJTFRJTiB8fCBEVUtfVVNFX1JFRkxFQ1RfQlVJ TFRJTiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX09CSkVDVF9CVUlMVElOKSB8fCBkZWZpbmVk KERVS19VU0VfUkVGTEVDVF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlf b2JqZWN0X2NvbnN0cnVjdG9yX2dldF9vd25fcHJvcGVydHlfZGVzY3JpcHRvcihkdWtfaHRocmVh ZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKworCS8qIEVTMjAxNSBTZWN0aW9u IDE5LjEuMi42LCBzdGVwIDEgKi8KKwlpZiAoZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocikgPT0g MCkgeworCQlkdWtfdG9fb2JqZWN0KHRociwgMCk7CisJfQorCisJLyogWyBvYmoga2V5IF0gKi8K KworCWR1a19ob2JqZWN0X29iamVjdF9nZXRfb3duX3Byb3BlcnR5X2Rlc2NyaXB0b3IodGhyLCAt Mik7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxUSU4gfHwg RFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpFQ1Rf QlVJTFRJTikgfHwgZGVmaW5lZChEVUtfVVNFX1JFRkxFQ1RfQlVJTFRJTikKK0RVS19JTlRFUk5B TCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9pc19leHRlbnNpYmxlKGR1a19o dGhyZWFkICp0aHIpIHsKKwkvKgorCSAqICBtYWdpYyA9IDA6IE9iamVjdC5pc0V4dGVuc2libGUo KQorCSAqICBtYWdpYyA9IDE6IFJlZmxlY3QuaXNFeHRlbnNpYmxlKCkKKwkgKi8KKworCWR1a19o b2JqZWN0ICpoOworCisJaWYgKGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpID09IDApIHsKKwkJ aCA9IGR1a19nZXRfaG9iamVjdCh0aHIsIDApOworCX0gZWxzZSB7CisJCS8qIFJlZmxlY3QuaXNF eHRlbnNpYmxlKCk6IHRocm93IGlmIG5vbi1vYmplY3QsIGJ1dCB3ZSBhY2NlcHQgbGlnaHRmdW5j cworCQkgKiBhbmQgcGxhaW4gYnVmZmVycyBoZXJlIGJlY2F1c2UgdGhleSBwcmV0ZW5kIHRvIGJl IG9iamVjdHMuCisJCSAqLworCQloID0gZHVrX3JlcXVpcmVfaG9iamVjdF9hY2NlcHRfbWFzayh0 aHIsIDAsIERVS19UWVBFX01BU0tfTElHSFRGVU5DIHwgRFVLX1RZUEVfTUFTS19CVUZGRVIpOwor CX0KKworCWR1a19wdXNoX2Jvb2xlYW4odGhyLCAoaCAhPSBOVUxMKSAmJiBEVUtfSE9CSkVDVF9I QVNfRVhURU5TSUJMRShoKSk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JK RUNUX0JVSUxUSU4gfHwgRFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4gKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9PQkpFQ1RfQlVJTFRJTikgfHwgZGVmaW5lZChEVUtfVVNFX1JFRkxFQ1RfQlVJTFRJ TikKKy8qIFNoYXJlZCBoZWxwZXIgZm9yIHZhcmlvdXMga2V5L3N5bWJvbCBsaXN0aW5ncywgbWFn aWM6CisgKiAwPU9iamVjdC5rZXlzKCkKKyAqIDE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMo KSwKKyAqIDI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scygpLAorICogMz1SZWZsZWN0Lm93 bktleXMoKQorICovCitEVUtfTE9DQUwgY29uc3QgZHVrX3NtYWxsX3VpbnRfdCBkdWtfX29iamVj dF9rZXlzX2VudW1fZmxhZ3NbNF0gPSB7CisJLyogT2JqZWN0LmtleXMoKSAqLworCURVS19FTlVN X09XTl9QUk9QRVJUSUVTX09OTFkgfAorCSAgICBEVUtfRU5VTV9OT19QUk9YWV9CRUhBVklPUiwK KworCS8qIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCkgKi8KKwlEVUtfRU5VTV9JTkNMVURF X05PTkVOVU1FUkFCTEUgfAorCSAgICBEVUtfRU5VTV9PV05fUFJPUEVSVElFU19PTkxZIHwKKwkg ICAgRFVLX0VOVU1fTk9fUFJPWFlfQkVIQVZJT1IsCisKKwkvKiBPYmplY3QuZ2V0T3duUHJvcGVy dHlTeW1ib2xzKCkgKi8KKwlEVUtfRU5VTV9JTkNMVURFX1NZTUJPTFMgfAorCSAgICBEVUtfRU5V TV9PV05fUFJPUEVSVElFU19PTkxZIHwKKwkgICAgRFVLX0VOVU1fRVhDTFVERV9TVFJJTkdTIHwK KwkgICAgRFVLX0VOVU1fSU5DTFVERV9OT05FTlVNRVJBQkxFIHwKKwkgICAgRFVLX0VOVU1fTk9f UFJPWFlfQkVIQVZJT1IsCisKKwkvKiBSZWZsZWN0Lm93bktleXMoKSAqLworCURVS19FTlVNX0lO Q0xVREVfU1lNQk9MUyB8CisJICAgIERVS19FTlVNX09XTl9QUk9QRVJUSUVTX09OTFkgfAorCSAg ICBEVUtfRU5VTV9JTkNMVURFX05PTkVOVU1FUkFCTEUgfAorCSAgICBEVUtfRU5VTV9OT19QUk9Y WV9CRUhBVklPUgorfTsKKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfb2JqZWN0X2Nv bnN0cnVjdG9yX2tleXNfc2hhcmVkKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaG9iamVjdCAq b2JqOworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJZHVrX2hvYmplY3QgKmhfcHJv eHlfdGFyZ2V0OworCWR1a19ob2JqZWN0ICpoX3Byb3h5X2hhbmRsZXI7CisJZHVrX2hvYmplY3Qg KmhfdHJhcF9yZXN1bHQ7CisjZW5kaWYKKwlkdWtfc21hbGxfdWludF90IGVudW1fZmxhZ3M7CisJ ZHVrX2ludF90IG1hZ2ljOworCisJRFVLX0FTU0VSVF9UT1AodGhyLCAxKTsKKworCW1hZ2ljID0g ZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisJaWYgKG1hZ2ljID09IDMpIHsKKwkJLyogRVMy MDE1IFNlY3Rpb24gMjYuMS4xMSByZXF1aXJlcyBhIFR5cGVFcnJvciBmb3Igbm9uLW9iamVjdHMu ICBMaWdodGZ1bmNzCisJCSAqIGFuZCBwbGFpbiBidWZmZXJzIHByZXRlbmQgdG8gYmUgb2JqZWN0 cywgc28gYWNjZXB0IHRob3NlIHRvby4KKwkJICovCisJCW9iaiA9IGR1a19yZXF1aXJlX2hvYmpl Y3RfcHJvbW90ZV9tYXNrKHRociwgMCwgRFVLX1RZUEVfTUFTS19MSUdIVEZVTkMgfCBEVUtfVFlQ RV9NQVNLX0JVRkZFUik7CisJfSBlbHNlIHsKKwkJLyogRVMyMDE1OiBUb09iamVjdCBjb2VyY2Uu ICovCisJCW9iaiA9IGR1a190b19ob2JqZWN0KHRociwgMCk7CisJfQorCURVS19BU1NFUlQob2Jq ICE9IE5VTEwpOworCURVS19VTlJFRihvYmopOworCisJLyogWFhYOiBwcm94eSBjaGFpbnMgKi8K KworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJLyogWFhYOiBiZXR0ZXIgc2hhcmlu ZyBvZiBjb2RlIGJldHdlZW4gcHJveHkgdGFyZ2V0IGNhbGwgc2l0ZXMgKi8KKwlpZiAoRFVLX0xJ S0VMWSghZHVrX2hvYmplY3RfcHJveHlfY2hlY2sob2JqLAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmaF9wcm94eV90YXJnZXQsCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZoX3Byb3h5X2hhbmRsZXIpKSkgeworCQlnb3RvIHNraXBf cHJveHk7CisJfQorCisJZHVrX3B1c2hfaG9iamVjdCh0aHIsIGhfcHJveHlfaGFuZGxlcik7CisJ aWYgKCFkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhfT1dOX0tF WVMpKSB7CisJCS8qIENhcmVmdWwgd2l0aCByZWFjaGFiaWxpdHkgaGVyZTogZG9uJ3QgcG9wICdv YmonIGJlZm9yZSBwdXNoaW5nCisJCSAqIHByb3h5IHRhcmdldC4KKwkJICovCisJCURVS19EREQo RFVLX0RERFBSSU5UKCJubyBvd25LZXlzIHRyYXAsIGdldCBrZXlzIG9mIHRhcmdldCBpbnN0ZWFk IikpOworCQlkdWtfcG9wXzIodGhyKTsKKwkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIGhfcHJveHlf dGFyZ2V0KTsKKwkJZHVrX3JlcGxhY2UodGhyLCAwKTsKKwkJRFVLX0FTU0VSVF9UT1AodGhyLCAx KTsKKwkJZ290byBza2lwX3Byb3h5OworCX0KKworCS8qIFsgb2JqIGhhbmRsZXIgdHJhcCBdICov CisJZHVrX2luc2VydCh0aHIsIC0yKTsKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwgaF9wcm94eV90 YXJnZXQpOyAgLyogLT4gWyBvYmogdHJhcCBoYW5kbGVyIHRhcmdldCBdICovCisJZHVrX2NhbGxf bWV0aG9kKHRociwgMSAvKm5hcmdzKi8pOyAgICAgIC8qIC0+IFsgb2JqIHRyYXBfcmVzdWx0IF0g Ki8KKwloX3RyYXBfcmVzdWx0ID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIsIC0xKTsKKwlEVUtf VU5SRUYoaF90cmFwX3Jlc3VsdCk7CisKKwltYWdpYyA9IGR1a19nZXRfY3VycmVudF9tYWdpYyh0 aHIpOworCURVS19BU1NFUlQobWFnaWMgPj0gMCAmJiBtYWdpYyA8IChkdWtfaW50X3QpIChzaXpl b2YoZHVrX19vYmplY3Rfa2V5c19lbnVtX2ZsYWdzKSAvIHNpemVvZihkdWtfc21hbGxfdWludF90 KSkpOworCWVudW1fZmxhZ3MgPSBkdWtfX29iamVjdF9rZXlzX2VudW1fZmxhZ3NbbWFnaWNdOwor CisJZHVrX3Byb3h5X293bmtleXNfcG9zdHByb2Nlc3ModGhyLCBoX3Byb3h5X3RhcmdldCwgZW51 bV9mbGFncyk7CisJcmV0dXJuIDE7CisKKyBza2lwX3Byb3h5OgorI2VuZGlmICAvKiBEVUtfVVNF X0VTNl9QUk9YWSAqLworCisJRFVLX0FTU0VSVF9UT1AodGhyLCAxKTsKKwltYWdpYyA9IGR1a19n ZXRfY3VycmVudF9tYWdpYyh0aHIpOworCURVS19BU1NFUlQobWFnaWMgPj0gMCAmJiBtYWdpYyA8 IChkdWtfaW50X3QpIChzaXplb2YoZHVrX19vYmplY3Rfa2V5c19lbnVtX2ZsYWdzKSAvIHNpemVv ZihkdWtfc21hbGxfdWludF90KSkpOworCWVudW1fZmxhZ3MgPSBkdWtfX29iamVjdF9rZXlzX2Vu dW1fZmxhZ3NbbWFnaWNdOworCXJldHVybiBkdWtfaG9iamVjdF9nZXRfZW51bWVyYXRlZF9rZXlz KHRociwgZW51bV9mbGFncyk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxUSU4g fHwgRFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9PQkpF Q1RfQlVJTFRJTikgfHwgZGVmaW5lZChEVUtfVVNFX1JFRkxFQ1RfQlVJTFRJTikKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX29iamVjdF9jb25zdHJ1Y3Rvcl9wcmV2ZW50X2V4dGVuc2lv bnMoZHVrX2h0aHJlYWQgKnRocikgeworCS8qCisJICogIG1hZ2ljID0gMDogT2JqZWN0LnByZXZl bnRFeHRlbnNpb25zKCkKKwkgKiAgbWFnaWMgPSAxOiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25z KCkKKwkgKi8KKworCWR1a19ob2JqZWN0ICpoOworCWR1a191aW50X3QgbWFzazsKKwlkdWtfaW50 X3QgbWFnaWM7CisKKwltYWdpYyA9IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworCisJLyog U2lsZW50IHN1Y2Nlc3MgZm9yIGxpZ2h0ZnVuY3MgYW5kIHBsYWluIGJ1ZmZlcnMgYWx3YXlzLiAq LworCW1hc2sgPSBEVUtfVFlQRV9NQVNLX0xJR0hURlVOQyB8IERVS19UWVBFX01BU0tfQlVGRkVS OworCisJLyogT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKCkgc2lsZW50IHN1Y2Nlc3MgZm9yIG5v bi1vYmplY3QuICovCisJaWYgKG1hZ2ljID09IDApIHsKKwkJbWFzayB8PSBEVUtfVFlQRV9NQVNL X1VOREVGSU5FRCB8CisJCSAgICAgICAgRFVLX1RZUEVfTUFTS19OVUxMIHwKKwkJICAgICAgICBE VUtfVFlQRV9NQVNLX0JPT0xFQU4gfAorCQkgICAgICAgIERVS19UWVBFX01BU0tfTlVNQkVSIHwK KwkJICAgICAgICBEVUtfVFlQRV9NQVNLX1NUUklORyB8CisJCSAgICAgICAgRFVLX1RZUEVfTUFT S19QT0lOVEVSOworCX0KKworCWlmIChkdWtfY2hlY2tfdHlwZV9tYXNrKHRociwgMCwgbWFzaykp IHsKKwkJLyogTm90IGFuIG9iamVjdCwgYWxyZWFkeSBub24tZXh0ZW5zaWJsZSBzbyBhbHdheXMg c3VjY2Vzcy4gKi8KKwkJZ290byBkb25lOworCX0KKwloID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0 aHIsIDApOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKworCURVS19IT0JKRUNUX0NMRUFSX0VY VEVOU0lCTEUoaCk7CisKKwkvKiBBIG5vbi1leHRlbnNpYmxlIG9iamVjdCBjYW5ub3QgZ2FpbiBh bnkgbW9yZSBwcm9wZXJ0aWVzLAorCSAqIHNvIHRoaXMgaXMgYSBnb29kIHRpbWUgdG8gY29tcGFj dC4KKwkgKi8KKwlkdWtfaG9iamVjdF9jb21wYWN0X3Byb3BzKHRociwgaCk7CisKKyBkb25lOgor CWlmIChtYWdpYyA9PSAxKSB7CisJCWR1a19wdXNoX3RydWUodGhyKTsKKwl9CisJcmV0dXJuIDE7 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfT0JKRUNUX0JVSUxUSU4gfHwgRFVLX1VTRV9SRUZMRUNU X0JVSUxUSU4gKi8KKworLyoKKyAqICBfX2RlZmluZUdldHRlcl9fLCBfX2RlZmluZVNldHRlcl9f LCBfX2xvb2t1cEdldHRlcl9fLCBfX2xvb2t1cFNldHRlcl9fCisgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9FUzgpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9vYmplY3RfcHJvdG90 eXBlX2RlZmluZWFjY2Vzc29yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfcHVzaF90aGlzKHRo cik7CisJZHVrX2luc2VydCh0aHIsIDApOworCWR1a190b19vYmplY3QodGhyLCAwKTsKKwlkdWtf cmVxdWlyZV9jYWxsYWJsZSh0aHIsIDIpOworCisJLyogWyBUb09iamVjdCh0aGlzKSBrZXkgZ2V0 dGVyL3NldHRlciBdICovCisKKwkvKiBUb1Byb3BlcnR5S2V5KCkgY29lcmNpb24gaXMgbm90IG5l ZWRlZCwgZHVrX2RlZl9wcm9wKCkgZG9lcyBpdC4gKi8KKwlkdWtfZGVmX3Byb3AodGhyLCAwLCBE VUtfREVGUFJPUF9TRVRfRU5VTUVSQUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgRFVLX0RF RlBST1BfU0VUX0NPTkZJR1VSQUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgKGR1a19nZXRf Y3VycmVudF9tYWdpYyh0aHIpID8gRFVLX0RFRlBST1BfSEFWRV9TRVRURVIgOiBEVUtfREVGUFJP UF9IQVZFX0dFVFRFUikpOworCXJldHVybiAwOworfQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBk dWtfYmlfb2JqZWN0X3Byb3RvdHlwZV9sb29rdXBhY2Nlc3NvcihkdWtfaHRocmVhZCAqdGhyKSB7 CisJZHVrX3VpbnRfdCBzYW5pdHk7CisKKwlkdWtfcHVzaF90aGlzKHRocik7CisJZHVrX3RvX29i amVjdCh0aHIsIC0xKTsKKworCS8qIFhYWDogUHJvdG90eXBlIHdhbGsgKHdpdGggc2FuaXR5KSBz aG91bGQgYmUgYSBjb3JlIHByb3BlcnR5CisJICogb3BlcmF0aW9uLCBjb3VsZCBhZGQgYSBmbGFn IHRvIGUuZy4gZHVrX2dldF9wcm9wX2Rlc2MoKS4KKwkgKi8KKworCS8qIFRvUHJvcGVydHlLZXko KSBjb2VyY2lvbiBpcyBub3QgbmVlZGVkLCBkdWtfZ2V0X3Byb3BfZGVzYygpIGRvZXMgaXQuICov CisJc2FuaXR5ID0gRFVLX0hPQkpFQ1RfUFJPVE9UWVBFX0NIQUlOX1NBTklUWTsKKwl3aGlsZSAo IWR1a19pc191bmRlZmluZWQodGhyLCAtMSkpIHsKKwkJLyogWyBrZXkgb2JqIF0gKi8KKwkJZHVr X2R1cCh0aHIsIDApOworCQlkdWtfZ2V0X3Byb3BfZGVzYyh0aHIsIDEsIDAgLypmbGFncyovKTsK KwkJaWYgKCFkdWtfaXNfdW5kZWZpbmVkKHRociwgLTEpKSB7CisJCQlkdWtfZ2V0X3Byb3Bfc3Ry aWR4KHRociwgLTEsIChkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKSAhPSAwID8gRFVLX1NUUklE WF9TRVQgOiBEVUtfU1RSSURYX0dFVCkpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZHVrX3BvcCh0 aHIpOworCisJCWlmIChEVUtfVU5MSUtFTFkoc2FuaXR5LS0gPT0gMCkpIHsKKwkJCURVS19FUlJP Ul9SQU5HRSh0aHIsIERVS19TVFJfUFJPVE9UWVBFX0NIQUlOX0xJTUlUKTsKKwkJCURVS19XT19O T1JFVFVSTihyZXR1cm4gMDspOworCQl9CisKKwkJZHVrX2dldF9wcm90b3R5cGUodGhyLCAtMSk7 CisJCWR1a19yZW1vdmUodGhyLCAtMik7CisJfQorCXJldHVybiAxOworfQorI2VuZGlmICAvKiBE VUtfVVNFX0VTOCAqLworLyoKKyAqICBIaWdoIHJlc29sdXRpb24gdGltZSBBUEkgKHBlcmZvcm1h bmNlLm5vdygpIGV0IGFsKQorICoKKyAqICBBUEkgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9lbmNv ZGluZy5zcGVjLndoYXR3Zy5vcmcvI2FwOi8vd3d3LnczLm9yZy9UUi9oci10aW1lLworICovCisK Ky8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9QRVJGT1JNQU5DRV9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19y ZXRfdCBkdWtfYmlfcGVyZm9ybWFuY2Vfbm93KGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiBGcm9t IEFQSSBzcGVjOgorCSAqIFRoZSBET01IaWdoUmVzVGltZVN0YW1wIHR5cGUgaXMgdXNlZCB0byBz dG9yZSBhIHRpbWUgdmFsdWUgaW4KKwkgKiBtaWxsaXNlY29uZHMsIG1lYXN1cmVkIHJlbGF0aXZl IGZyb20gdGhlIHRpbWUgb3JpZ2luLCBnbG9iYWwKKwkgKiBtb25vdG9uaWMgY2xvY2ssIG9yIGEg dGltZSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYSBkdXJhdGlvbgorCSAqIGJldHdlZW4gdHdvIERP TUhpZ2hSZXNUaW1lU3RhbXAncy4KKwkgKi8KKwlkdWtfcHVzaF9udW1iZXIodGhyLCBkdWtfdGlt ZV9nZXRfbW9ub3RvbmljX3RpbWUodGhyKSk7CisJcmV0dXJuIDE7Cit9CisKKyNpZiAwICAvKiBN aXNzaW5nIHVudGlsIHNlbWFudGljcyBkZWNpZGVkLiAqLworRFVLX0lOVEVSTkFMIGR1a19yZXRf dCBkdWtfYmlfcGVyZm9ybWFuY2VfdGltZW9yaWdpbl9nZXR0ZXIoZHVrX2h0aHJlYWQgKnRocikg eworCS8qIE5vIGRlY2lzaW9uIHlldCBob3cgdG8gaGFuZGxlIHRpbWVPcmlnaW5zLCBlLmcuIHNo b3VsZCBvbmUgYmUKKwkgKiBpbml0aWFsaXplZCBwZXIgaGVhcCwgb3IgcGVyIGdsb2JhbCBvYmpl Y3Qgc2V0LiAgU2VlCisJICogaHR0cHM6Ly93d3cudzMub3JnL1RSL2hyLXRpbWUvI3RpbWUtb3Jp Z2luLgorCSAqLworCWR1a19wdXNoX3VpbnQodGhyLCAwKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRp ZiAgLyogMCAqLworI2VuZGlmICAvKiBEVUtfVVNFX1BFUkZPUk1BTkNFX0JVSUxUSU4gKi8KKy8q CisgKiAgUG9pbnRlciBidWlsdC1pbnMKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwu aCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCisgKiAgQ29uc3RydWN0b3IKKyAqLworCitE VUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9wb2ludGVyX2NvbnN0cnVjdG9yKGR1a19odGhy ZWFkICp0aHIpIHsKKwkvKiBYWFg6IHRoaXMgYmVoYXZpb3IgaXMgcXVpdGUgdXNlbGVzcyBub3c7 IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZQorCSAqIHRvIGNyZWF0ZSBwb2ludGVyIHZhbHVl cyBmcm9tIGUuZy4gbnVtYmVycyBvciBzdHJpbmdzLiAgTnVtYmVycyBhcmUKKwkgKiBwcm9ibGVt YXRpYyBvbiA2NC1iaXQgcGxhdGZvcm1zIHRob3VnaC4gIEhleCBlbmNvZGVkIHN0cmluZ3M/CisJ ICovCisJaWYgKGR1a19nZXRfdG9wKHRocikgPT0gMCkgeworCQlkdWtfcHVzaF9wb2ludGVyKHRo ciwgTlVMTCk7CisJfSBlbHNlIHsKKwkJZHVrX3RvX3BvaW50ZXIodGhyLCAwKTsKKwl9CisJRFVL X0FTU0VSVChkdWtfaXNfcG9pbnRlcih0aHIsIDApKTsKKwlkdWtfc2V0X3RvcCh0aHIsIDEpOwor CisJaWYgKGR1a19pc19jb25zdHJ1Y3Rvcl9jYWxsKHRocikpIHsKKwkJKHZvaWQpIGR1a19wdXNo X29iamVjdF9oZWxwZXIodGhyLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RSRUZTIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfUE9JTlRF UiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19CSURYX1BPSU5URVJfUFJP VE9UWVBFKTsKKworCQkvKiBQb2ludGVyIG9iamVjdCBpbnRlcm5hbCB2YWx1ZSBpcyBpbW11dGFi bGUgKi8KKwkJZHVrX2R1cF8wKHRocik7CisJCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRo ciwgLTIsIERVS19TVFJJRFhfSU5UX1ZBTFVFLCBEVUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7CisJ fQorCS8qIE5vdGU6IHVuYmFsYW5jZWQgc3RhY2sgb24gcHVycG9zZSAqLworCisJcmV0dXJuIDE7 Cit9CisKKy8qCisgKiAgdG9TdHJpbmcoKSwgdmFsdWVPZigpCisgKi8KKworRFVLX0lOVEVSTkFM IGR1a19yZXRfdCBkdWtfYmlfcG9pbnRlcl9wcm90b3R5cGVfdG9zdHJpbmdfc2hhcmVkKGR1a19o dGhyZWFkICp0aHIpIHsKKwlkdWtfdHZhbCAqdHY7CisJZHVrX3NtYWxsX2ludF90IHRvX3N0cmlu ZyA9IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworCisJZHVrX3B1c2hfdGhpcyh0aHIpOwor CXR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwp OworCisJaWYgKERVS19UVkFMX0lTX1BPSU5URVIodHYpKSB7CisJCS8qIG5vcCAqLworCX0gZWxz ZSBpZiAoRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSkgeworCQlkdWtfaG9iamVjdCAqaCA9IERVS19U VkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKwkJLyogTXVz dCBiZSBhICJwb2ludGVyIG9iamVjdCIsIGkuZS4gY2xhc3MgIlBvaW50ZXIiICovCisJCWlmIChE VUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKGgpICE9IERVS19IT0JKRUNUX0NMQVNTX1BPSU5U RVIpIHsKKwkJCWdvdG8gdHlwZV9lcnJvcjsKKwkJfQorCisJCWR1a19nZXRfcHJvcF9zdHJpZHhf c2hvcnQodGhyLCAtMSwgRFVLX1NUUklEWF9JTlRfVkFMVUUpOworCX0gZWxzZSB7CisJCWdvdG8g dHlwZV9lcnJvcjsKKwl9CisKKwlpZiAodG9fc3RyaW5nKSB7CisJCWR1a190b19zdHJpbmcodGhy LCAtMSk7CisJfQorCXJldHVybiAxOworCisgdHlwZV9lcnJvcjoKKwlEVUtfRENFUlJPUl9UWVBF X0lOVkFMSURfQVJHUyh0aHIpOworfQorLyoKKyAqICBQcm9taXNlIGJ1aWx0LWluCisgKi8KKwor LyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX1BST01JU0VfQlVJTFRJTikKKworRFVLX0lOVEVSTkFMIGR1a19yZXRf dCBkdWtfYmlfcHJvbWlzZV9jb25zdHJ1Y3RvcihkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0VS Uk9SX1RZUEUodGhyLCAidW5pbXBsZW1lbnRlZCIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4g MDspOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9wcm9taXNlX2FsbChkdWtf aHRocmVhZCAqdGhyKSB7CisJRFVLX0VSUk9SX1RZUEUodGhyLCAidW5pbXBsZW1lbnRlZCIpOwor CURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90 IGR1a19iaV9wcm9taXNlX3JhY2UoZHVrX2h0aHJlYWQgKnRocikgeworCURVS19FUlJPUl9UWVBF KHRociwgInVuaW1wbGVtZW50ZWQiKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKK30K KworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfcHJvbWlzZV9yZWplY3QoZHVrX2h0aHJl YWQgKnRocikgeworCURVS19FUlJPUl9UWVBFKHRociwgInVuaW1wbGVtZW50ZWQiKTsKKwlEVUtf V09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtf YmlfcHJvbWlzZV9yZXNvbHZlKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfRVJST1JfVFlQRSh0 aHIsICJ1bmltcGxlbWVudGVkIik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7Cit9CisK K0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3Byb21pc2VfY2F0Y2goZHVrX2h0aHJlYWQg KnRocikgeworCURVS19FUlJPUl9UWVBFKHRociwgInVuaW1wbGVtZW50ZWQiKTsKKwlEVUtfV09f Tk9SRVRVUk4ocmV0dXJuIDA7KTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlf cHJvbWlzZV90aGVuKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfRVJST1JfVFlQRSh0aHIsICJ1 bmltcGxlbWVudGVkIik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7Cit9CisKKyNlbmRp ZiAgLyogRFVLX1VTRV9QUk9NSVNFX0JVSUxUSU4gKi8KKy8qCisgKiAgUHJveHkgYnVpbHQtaW4g KEVTMjAxNSkKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGlu Y2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1BST1hZKQorLyogUG9zdC1wcm9j ZXNzIGEgUHJveHkgb3duS2V5cygpIHJlc3VsdCBhdCBzdGFjayB0b3AuICBQdXNoIGEgY2xlYW5l ZCB1cAorICogYXJyYXkgb2YgdmFsaWQgcmVzdWx0IGtleXMgKHN0cmluZ3Mgb3Igc3ltYm9scyku ICBUeXBlRXJyb3IgZm9yIGludmFsaWQKKyAqIHZhbHVlcy4gIEZsYWdzIGFyZSBzaGFyZWQgd2l0 aCBkdWtfZW51bSgpLgorICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcHJveHlfb3dua2V5c19w b3N0cHJvY2VzcyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqaF9wcm94eV90YXJnZXQs IGR1a191aW50X3QgZmxhZ3MpIHsKKwlkdWtfdWFycmlkeF90IGksIGxlbiwgaWR4OworCWR1a19w cm9wZGVzYyBkZXNjOworCisJRFVLX0FTU0VSVF9DVFhfVkFMSUQodGhyKTsKKwlEVUtfQVNTRVJU KGhfcHJveHlfdGFyZ2V0ICE9IE5VTEwpOworCisJbGVuID0gKGR1a191YXJyaWR4X3QpIGR1a19n ZXRfbGVuZ3RoKHRociwgLTEpOworCWlkeCA9IDA7CisJZHVrX3B1c2hfYXJyYXkodGhyKTsKKwkv KiBYWFg6IHByZWFsbG9jYXRlZCBkZW5zZSBhcnJheSwgZmlsbCBpbiBkaXJlY3RseSAqLworCWZv ciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlkdWtfaHN0cmluZyAqaDsKKworCQkvKiBbIG9i aiB0cmFwX3Jlc3VsdCByZXNfYXJyIF0gKi8KKwkJKHZvaWQpIGR1a19nZXRfcHJvcF9pbmRleCh0 aHIsIC0yLCBpKTsKKwkJaCA9IGR1a19nZXRfaHN0cmluZyh0aHIsIC0xKTsKKwkJaWYgKGggPT0g TlVMTCkgeworCQkJRFVLX0VSUk9SX1RZUEVfSU5WQUxJRF9UUkFQX1JFU1VMVCh0aHIpOworCQkJ RFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQl9CisKKwkJaWYgKCEoZmxhZ3MgJiBEVUtfRU5V TV9JTkNMVURFX05PTkVOVU1FUkFCTEUpKSB7CisJCQkvKiBObyBzdXBwb3J0IGZvciAnZ2V0T3du UHJvcGVydHlEZXNjcmlwdG9yJyB0cmFwIHlldCwKKwkJCSAqIHNvIGNoZWNrIGVudW1lcmFiaWxp dHkgYWx3YXlzIGZyb20gdGFyZ2V0IG9iamVjdAorCQkJICogZGVzY3JpcHRvci4KKwkJCSAqLwor CQkJaWYgKGR1a19ob2JqZWN0X2dldF9vd25fcHJvcGRlc2ModGhyLCBoX3Byb3h5X3RhcmdldCwg ZHVrX2tub3duX2hzdHJpbmcodGhyLCAtMSksICZkZXNjLCAwIC8qZmxhZ3MqLykpIHsKKwkJCQlp ZiAoKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19FTlVNRVJBQkxFKSA9PSAwKSB7CisJ CQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJpZ25vcmUgbm9uLWVudW1lcmFibGUgcHJvcGVydHk6 ICUhVCIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkJCQlnb3RvIHNraXBfa2V5OworCQkJ CX0KKwkJCX0gZWxzZSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImlnbm9yZSBub24tZXhp c3RlbnQgcHJvcGVydHk6ICUhVCIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkJCWdvdG8g c2tpcF9rZXk7CisJCQl9CisJCX0KKwkJaWYgKERVS19VTkxJS0VMWShEVUtfSFNUUklOR19IQVNf U1lNQk9MKGgpKSkgeworCQkJaWYgKCEoZmxhZ3MgJiBEVUtfRU5VTV9JTkNMVURFX1NZTUJPTFMp KSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImlnbm9yZSBzeW1ib2wgcHJvcGVydHk6ICUh VCIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkJCWdvdG8gc2tpcF9rZXk7CisJCQl9CisJ CQlpZiAoRFVLX0hTVFJJTkdfSEFTX0hJRERFTihoKSAmJiAhKGZsYWdzICYgRFVLX0VOVU1fSU5D TFVERV9ISURERU4pKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImlnbm9yZSBoaWRkZW4g c3ltYm9sIHByb3BlcnR5OiAlIVQiLCBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwkJCQlnb3Rv IHNraXBfa2V5OworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGZsYWdzICYgRFVLX0VOVU1fRVhD TFVERV9TVFJJTkdTKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImlnbm9yZSBzdHJpbmcg cHJvcGVydHk6ICUhVCIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkJCWdvdG8gc2tpcF9r ZXk7CisJCQl9CisJCX0KKworCQkvKiBbIG9iaiB0cmFwX3Jlc3VsdCByZXNfYXJyIHByb3BuYW1l IF0gKi8KKwkJZHVrX3B1dF9wcm9wX2luZGV4KHRociwgLTIsIGlkeCsrKTsKKwkJY29udGludWU7 CisKKwkgc2tpcF9rZXk6CisJCWR1a19wb3AodGhyKTsKKwkJY29udGludWU7CisJfQorCisJLyog WFhYOiBNaXNzaW5nIHRyYXAgcmVzdWx0IHZhbGlkYXRpb24gZm9yIG5vbi1jb25maWd1cmFibGUg dGFyZ2V0IGtleXMKKwkgKiAobXVzdCBiZSBwcmVzZW50KSwgZm9yIG5vbi1leHRlbnNpYmxlIHRh cmdldCBhbGwgdGFyZ2V0IGtleXMgbXVzdCBiZQorCSAqIHByZXNlbnQgYW5kIG5vIGV4dHJhIGtl eXMgY2FuIGJlIHByZXNlbnQuCisJICogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3Jn L2VjbWEtMjYyLzYuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRl cm5hbC1zbG90cy1vd25wcm9wZXJ0eWtleXMKKwkgKi8KKworCS8qIFhYWDogVGhlIGtleSBlbnVt ZXJhYmlsaXR5IGNoZWNrIHNob3VsZCB0cmlnZ2VyIHRoZSAiZ2V0T3duUHJvcGVydHlEZXNjcmlw dG9yIgorCSAqIHRyYXAgd2hpY2ggaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZC4gIEluIHRo ZSBhYnNlbmNlIG9mIHN1Y2ggYSB0cmFwLAorCSAqIHRoZSBlbnVtZXJhYmlsaXR5IHNob3VsZCBi ZSBjaGVja2VkIGZyb20gdGhlIHRhcmdldCBvYmplY3Q7IHRoaXMgaXMKKwkgKiBoYW5kbGVkIGFi b3ZlLgorCSAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX0VTNl9QUk9YWSAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3By b3h5X2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUX1RPUCh0aHIs IDIpOyAgLyogWyB0YXJnZXQgaGFuZGxlciBdICovCisKKwlkdWtfcmVxdWlyZV9jb25zdHJ1Y3Rv cl9jYWxsKHRocik7CisJZHVrX3B1c2hfcHJveHkodGhyLCAwIC8qZmxhZ3MqLyk7ICAvKiBbIHRh cmdldCBoYW5kbGVyIF0gLT4gWyBwcm94eSBdICovCisJcmV0dXJuIDE7ICAvKiByZXBsYWNlbWVu dCAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX0VTNl9QUk9YWSAqLworLyoKKyAqICAnUmVmbGVj dCcgYnVpbHQtaW4gKEVTMjAxNiBTZWN0aW9uIDI2LjEpCisgKiAgaHR0cDovL3d3dy5lY21hLWlu dGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZmxlY3Qtb2JqZWN0CisgKgorICog IE1hbnkgUmVmbGVjdCBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IHNoYXJlZCBo ZWxwZXJzIGluCisgKiAgZHVrX2JpX29iamVjdC5jIG9yIGR1a19iaV9mdW5jdGlvbi5jLgorICov CisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4pCitEVUtfSU5URVJOQUwgZHVrX3Jl dF90IGR1a19iaV9yZWZsZWN0X29iamVjdF9kZWxldGVfcHJvcGVydHkoZHVrX2h0aHJlYWQgKnRo cikgeworCWR1a190dmFsICp0dl9vYmo7CisJZHVrX3R2YWwgKnR2X2tleTsKKwlkdWtfYm9vbF90 IHJldDsKKworCURVS19BU1NFUlRfVE9QKHRociwgMik7CisJKHZvaWQpIGR1a19yZXF1aXJlX2hv YmplY3QodGhyLCAwKTsKKwkodm9pZCkgZHVrX3RvX3N0cmluZyh0aHIsIDEpOworCisJLyogWyB0 YXJnZXQga2V5IF0gKi8KKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCXR2X29iaiA9IERV S19HRVRfVFZBTF9QT1NJRFgodGhyLCAwKTsKKwl0dl9rZXkgPSBEVUtfR0VUX1RWQUxfUE9TSURY KHRociwgMSk7CisJcmV0ID0gZHVrX2hvYmplY3RfZGVscHJvcCh0aHIsIHR2X29iaiwgdHZfa2V5 LCAwIC8qdGhyb3dfZmxhZyovKTsKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgcmV0KTsKKwlyZXR1 cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVjdF9vYmplY3Rf Z2V0KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdHZhbCAqdHZfb2JqOworCWR1a190dmFsICp0 dl9rZXk7CisJZHVrX2lkeF90IG5hcmdzOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJ bmFyZ3MgPSBkdWtfZ2V0X3RvcF9yZXF1aXJlX21pbih0aHIsIDIgLyptaW5fdG9wKi8pOworCSh2 b2lkKSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgMCk7CisJKHZvaWQpIGR1a190b19zdHJpbmco dGhyLCAxKTsKKwlpZiAobmFyZ3MgPj0gMyAmJiAhZHVrX3N0cmljdF9lcXVhbHModGhyLCAwLCAy KSkgeworCQkvKiBYWFg6IFtbR2V0XV0gcmVjZWl2ZXIgY3VycmVudGx5IHVuc3VwcG9ydGVkICov CisJCURVS19FUlJPUl9VTlNVUFBPUlRFRCh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJu IDA7KTsKKwl9CisKKwkvKiBbIHRhcmdldCBrZXkgcmVjZWl2ZXI/IC4uLj8gXSAqLworCisJdHZf b2JqID0gRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIDApOworCXR2X2tleSA9IERVS19HRVRfVFZB TF9QT1NJRFgodGhyLCAxKTsKKwkodm9pZCkgZHVrX2hvYmplY3RfZ2V0cHJvcCh0aHIsIHR2X29i aiwgdHZfa2V5KTsgIC8qIFRoaXMgY291bGQgYWxzbyBiZSBhIGR1a19nZXRfcHJvcCgpLiAqLwor CXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9yZWZsZWN0X29i amVjdF9oYXMoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a190dmFsICp0dl9vYmo7CisJZHVrX3R2 YWwgKnR2X2tleTsKKwlkdWtfYm9vbF90IHJldDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwp OworCURVS19BU1NFUlRfVE9QKHRociwgMik7CisJKHZvaWQpIGR1a19yZXF1aXJlX2hvYmplY3Qo dGhyLCAwKTsKKwkodm9pZCkgZHVrX3RvX3N0cmluZyh0aHIsIDEpOworCisJLyogWyB0YXJnZXQg a2V5IF0gKi8KKworCXR2X29iaiA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCAwKTsKKwl0dl9r ZXkgPSBEVUtfR0VUX1RWQUxfUE9TSURYKHRociwgMSk7CisJcmV0ID0gZHVrX2hvYmplY3RfaGFz cHJvcCh0aHIsIHR2X29iaiwgdHZfa2V5KTsKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgcmV0KTsK KwlyZXR1cm4gMTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfcmVmbGVjdF9v YmplY3Rfc2V0KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdHZhbCAqdHZfb2JqOworCWR1a190 dmFsICp0dl9rZXk7CisJZHVrX3R2YWwgKnR2X3ZhbDsKKwlkdWtfaWR4X3QgbmFyZ3M7CisJZHVr X2Jvb2xfdCByZXQ7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwluYXJncyA9IGR1a19n ZXRfdG9wX3JlcXVpcmVfbWluKHRociwgMyAvKm1pbl90b3AqLyk7CisJKHZvaWQpIGR1a19yZXF1 aXJlX2hvYmplY3QodGhyLCAwKTsKKwkodm9pZCkgZHVrX3RvX3N0cmluZyh0aHIsIDEpOworCWlm IChuYXJncyA+PSA0ICYmICFkdWtfc3RyaWN0X2VxdWFscyh0aHIsIDAsIDMpKSB7CisJCS8qIFhY WDogW1tTZXRdXSByZWNlaXZlciBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KKwkJRFVLX0VSUk9S X1VOU1VQUE9SVEVEKHRocik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKwor CS8qIFsgdGFyZ2V0IGtleSB2YWx1ZSByZWNlaXZlcj8gLi4uPyBdICovCisKKwl0dl9vYmogPSBE VUtfR0VUX1RWQUxfUE9TSURYKHRociwgMCk7CisJdHZfa2V5ID0gRFVLX0dFVF9UVkFMX1BPU0lE WCh0aHIsIDEpOworCXR2X3ZhbCA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCAyKTsKKwlyZXQg PSBkdWtfaG9iamVjdF9wdXRwcm9wKHRociwgdHZfb2JqLCB0dl9rZXksIHR2X3ZhbCwgMCAvKnRo cm93X2ZsYWcqLyk7CisJZHVrX3B1c2hfYm9vbGVhbih0aHIsIHJldCk7CisJcmV0dXJuIDE7Cit9 CisjZW5kaWYgIC8qIERVS19VU0VfUkVGTEVDVF9CVUlMVElOICovCisvKgorICogIFJlZ0V4cCBi dWlsdC1pbnMKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGlu Y2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisKK0RVS19M T0NBTCB2b2lkIGR1a19fZ2V0X3RoaXNfcmVnZXhwKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtf aG9iamVjdCAqaDsKKworCWR1a19wdXNoX3RoaXModGhyKTsKKwloID0gZHVrX3JlcXVpcmVfaG9i amVjdF93aXRoX2NsYXNzKHRociwgLTEsIERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCk7CisJRFVL X0FTU0VSVChoICE9IE5VTEwpOworCURVS19VTlJFRihoKTsKKwlkdWtfaW5zZXJ0KHRociwgMCk7 ICAvKiBwcmVwZW5kIHJlZ2V4cCB0byB2YWxzdGFjayAwIGluZGV4ICovCit9CisKKy8qIFhYWDog bXVjaCB0byBpbXByb3ZlIChjb2RlIHNpemUpICovCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1 a19iaV9yZWdleHBfY29uc3RydWN0b3IoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19ob2JqZWN0 ICpoX3BhdHRlcm47CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDIpOworCWhfcGF0dGVybiA9IGR1 a19nZXRfaG9iamVjdCh0aHIsIDApOworCisJaWYgKCFkdWtfaXNfY29uc3RydWN0b3JfY2FsbCh0 aHIpICYmCisJICAgIGhfcGF0dGVybiAhPSBOVUxMICYmCisJICAgIERVS19IT0JKRUNUX0dFVF9D TEFTU19OVU1CRVIoaF9wYXR0ZXJuKSA9PSBEVUtfSE9CSkVDVF9DTEFTU19SRUdFWFAgJiYKKwkg ICAgZHVrX2lzX3VuZGVmaW5lZCh0aHIsIDEpKSB7CisJCS8qIENhbGxlZCBhcyBhIGZ1bmN0aW9u LCBwYXR0ZXJuIGhhcyBbW0NsYXNzXV0gIlJlZ0V4cCIgYW5kCisJCSAqIGZsYWdzIGlzIHVuZGVm aW5lZCAtPiByZXR1cm4gb2JqZWN0IGFzIGlzLgorCQkgKi8KKwkJLyogWFhYOiBFUzIwMTUgaGFz IGEgTmV3VGFyZ2V0IFNhbWVWYWx1ZSgpIGNoZWNrIHdoaWNoIGlzIG5vdAorCQkgKiB5ZXQgaW1w bGVtZW50ZWQuCisJCSAqLworCQlkdWtfZHVwXzAodGhyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJ LyogRWxzZSBmdW5jdGlvbmFsaXR5IGlzIGlkZW50aWNhbCBmb3IgZnVuY3Rpb24gY2FsbCBhbmQg Y29uc3RydWN0b3IKKwkgKiBjYWxsLgorCSAqLworCisJaWYgKGhfcGF0dGVybiAhPSBOVUxMICYm CisJICAgIERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoaF9wYXR0ZXJuKSA9PSBEVUtfSE9C SkVDVF9DTEFTU19SRUdFWFApIHsKKwkJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIDAs IERVS19TVFJJRFhfU09VUkNFKTsKKwkJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAxKSkgewor CQkJLyogSW4gRVM1IG9uZSB3b3VsZCBuZWVkIHRvIHJlYWQgdGhlIGZsYWdzIGluZGl2aWR1YWxs eTsKKwkJCSAqIGluIEVTMjAxNSBqdXN0IHJlYWQgLmZsYWdzLgorCQkJICovCisJCQlkdWtfZ2V0 X3Byb3Bfc3RyaWR4KHRociwgMCwgRFVLX1NUUklEWF9GTEFHUyk7CisJCX0gZWxzZSB7CisJCQkv KiBJbiBFUzIwMTUgYWxsb3dlZDsgb3ZlcnJpZGVzIGFyZ3VtZW50IFJlZ0V4cCBmbGFncy4gKi8K KwkJCWR1a19kdXBfMSh0aHIpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGR1a19pc191bmRlZmlu ZWQodGhyLCAwKSkgeworCQkJZHVrX3B1c2hfaHN0cmluZ19lbXB0eSh0aHIpOworCQl9IGVsc2Ug eworCQkJZHVrX2R1cF8wKHRocik7CisJCQlkdWtfdG9fc3RyaW5nKHRociwgLTEpOyAgLyogUmVq ZWN0cyBTeW1ib2xzLiAqLworCQl9CisJCWlmIChkdWtfaXNfdW5kZWZpbmVkKHRociwgMSkpIHsK KwkJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsKKwkJfSBlbHNlIHsKKwkJCWR1a19kdXBf MSh0aHIpOworCQkJZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsgIC8qIFJlamVjdHMgU3ltYm9scy4g Ki8KKwkJfQorCisJCS8qIFsgLi4uIHBhdHRlcm4gZmxhZ3MgXSAqLworCX0KKworCURVS19EREQo RFVLX0RERFBSSU5UKCJSZWdFeHAgY29uc3RydWN0b3IvZnVuY3Rpb24gY2FsbCwgcGF0dGVybj0l IVQsIGZsYWdzPSUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19n ZXRfdHZhbCh0aHIsIC0yKSwgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOwor CisJLyogWyAuLi4gcGF0dGVybiBmbGFncyBdIChib3RoIHVuY29lcmNlZCkgKi8KKworCWR1a190 b19zdHJpbmcodGhyLCAtMik7CisJZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsKKwlkdWtfcmVnZXhw X2NvbXBpbGUodGhyKTsKKworCS8qIFsgLi4uIGJ5dGVjb2RlIGVzY2FwZWRfc291cmNlIF0gKi8K KworCWR1a19yZWdleHBfY3JlYXRlX2luc3RhbmNlKHRocik7CisKKwkvKiBbIC4uLiBSZWdFeHAg XSAqLworCisJcmV0dXJuIDE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3Jl Z2V4cF9wcm90b3R5cGVfZXhlYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX19nZXRfdGhpc19y ZWdleHAodGhyKTsKKworCS8qIFsgcmVnZXhwIGlucHV0IF0gKi8KKworCWR1a19yZWdleHBfbWF0 Y2godGhyKTsKKworCS8qIFsgcmVzdWx0IF0gKi8KKworCXJldHVybiAxOworfQorCitEVUtfSU5U RVJOQUwgZHVrX3JldF90IGR1a19iaV9yZWdleHBfcHJvdG90eXBlX3Rlc3QoZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19fZ2V0X3RoaXNfcmVnZXhwKHRocik7CisKKwkvKiBbIHJlZ2V4cCBpbnB1 dCBdICovCisKKwkvKiByZXN1bHQgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIGRpc2NhcmRlZDsgd2Fz dGVmdWwgYnV0IHNhdmVzIGNvZGUgc3BhY2UgKi8KKwlkdWtfcmVnZXhwX21hdGNoKHRocik7CisK KwkvKiBbIHJlc3VsdCBdICovCisKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgKGR1a19pc19udWxs KHRociwgLTEpID8gMCA6IDEpKTsKKworCXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVr X3JldF90IGR1a19iaV9yZWdleHBfcHJvdG90eXBlX3Rvc3RyaW5nKGR1a19odGhyZWFkICp0aHIp IHsKKwkvKiBUaGlzIG11c3QgYmUgZ2VuZXJpYyBpbiBFUzIwMTUgYW5kIGxhdGVyLiAqLworCURV S19BU1NFUlRfVE9QKHRociwgMCk7CisJZHVrX3B1c2hfdGhpcyh0aHIpOworCWR1a19wdXNoX2xp dGVyYWwodGhyLCAiLyIpOworCWR1a19nZXRfcHJvcF9zdHJpZHgodGhyLCAwLCBEVUtfU1RSSURY X1NPVVJDRSk7CisJZHVrX2R1cF9tMih0aHIpOyAgLyogYW5vdGhlciAiLyIgKi8KKwlkdWtfZ2V0 X3Byb3Bfc3RyaWR4KHRociwgMCwgRFVLX1NUUklEWF9GTEFHUyk7CisJZHVrX2NvbmNhdCh0aHIs IDQpOworCXJldHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9yZWdl eHBfcHJvdG90eXBlX2ZsYWdzKGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiAuZmxhZ3MgaXMgRVMy MDE1IGJ1dCBwcmVzZW50IGV2ZW4gd2hlbiBFUzIwMTUgYmluZGluZ3MgYXJlCisJICogZGlzYWJs ZWQgYmVjYXVzZSB0aGUgY29uc3RydWN0b3IgcmVsaWVzIG9uIGl0LgorCSAqLworCWR1a191aW50 OF90IGJ1Zls4XTsgIC8qIGVub3VnaCBmb3IgYWxsIGZsYWdzICsgTlVMICovCisJZHVrX3VpbnQ4 X3QgKnAgPSBidWY7CisKKwkvKiAuZmxhZ3MgaXMgZ2VuZXJpYyBhbmQgd29ya3Mgb24gYW55IG9i amVjdC4gKi8KKwlkdWtfcHVzaF90aGlzKHRocik7CisJKHZvaWQpIGR1a19yZXF1aXJlX2hvYmpl Y3QodGhyLCAtMSk7CisJaWYgKGR1a19nZXRfcHJvcF9zdHJpZHhfYm9vbGVhbih0aHIsIDAsIERV S19TVFJJRFhfR0xPQkFMLCBOVUxMKSkgeworCQkqcCsrID0gRFVLX0FTQ19MQ19HOworCX0KKwlp ZiAoZHVrX2dldF9wcm9wX3N0cmlkeF9ib29sZWFuKHRociwgMCwgRFVLX1NUUklEWF9JR05PUkVf Q0FTRSwgTlVMTCkpIHsKKwkJKnArKyA9IERVS19BU0NfTENfSTsKKwl9CisJaWYgKGR1a19nZXRf cHJvcF9zdHJpZHhfYm9vbGVhbih0aHIsIDAsIERVS19TVFJJRFhfTVVMVElMSU5FLCBOVUxMKSkg eworCQkqcCsrID0gRFVLX0FTQ19MQ19NOworCX0KKwkvKiAudW5pY29kZTogdG8gYmUgYWRkZWQg Ki8KKwkvKiAuc3RpY2t5OiB0byBiZSBhZGRlZCAqLworCSpwKysgPSBEVUtfQVNDX05VTDsKKwlE VUtfQVNTRVJUKChkdWtfc2l6ZV90KSAocCAtIGJ1ZikgPD0gc2l6ZW9mKGJ1ZikpOworCisJZHVr X3B1c2hfc3RyaW5nKHRociwgKGNvbnN0IGNoYXIgKikgYnVmKTsKKwlyZXR1cm4gMTsKK30KKwor LyogU2hhcmVkIGhlbHBlciBmb3IgcHJvdmlkaW5nIC5zb3VyY2UsIC5nbG9iYWwsIC5tdWx0aWxp bmUsIGV0YyBnZXR0ZXJzLiAqLworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfcmVnZXhw X3Byb3RvdHlwZV9zaGFyZWRfZ2V0dGVyKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaHN0cmlu ZyAqaF9iYzsKKwlkdWtfc21hbGxfdWludF90IHJlX2ZsYWdzOworCWR1a19ob2JqZWN0ICpoOwor CWR1a19pbnRfdCBtYWdpYzsKKworCURVS19BU1NFUlRfVE9QKHRociwgMCk7CisKKwlkdWtfcHVz aF90aGlzKHRocik7CisJaCA9IGR1a19yZXF1aXJlX2hvYmplY3QodGhyLCAtMSk7CisJbWFnaWMg PSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKTsKKworCWlmIChEVUtfSE9CSkVDVF9HRVRfQ0xB U1NfTlVNQkVSKGgpID09IERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCkgeworCQlkdWtfZ2V0X3By b3Bfc3RyaWR4X3Nob3J0KHRociwgMCwgRFVLX1NUUklEWF9JTlRfU09VUkNFKTsKKwkJZHVrX2dl dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIDAsIERVS19TVFJJRFhfSU5UX0JZVEVDT0RFKTsKKwkJ aF9iYyA9IGR1a19yZXF1aXJlX2hzdHJpbmcodGhyLCAtMSk7CisJCXJlX2ZsYWdzID0gKGR1a19z bWFsbF91aW50X3QpIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfYmMpWzBdOyAgLyogU2FmZSBldmVu IGlmIGhfYmMgbGVuZ3RoIGlzIDAgKD0gTlVMKSAqLworCQlkdWtfcG9wKHRocik7CisJfSBlbHNl IGlmIChoID09IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfUkVHRVhQX1BST1RPVFlQRV0pIHsKKwkJ LyogSW4gRVMyMDE1IGFuZCBFUzIwMTYgYSBUeXBlRXJyb3Igd291bGQgYmUgdGhyb3duIGhlcmUu CisJCSAqIEhvd2V2ZXIsIHRoaXMgaGFkIHJlYWwgd29ybGQgaXNzdWVzIHNvIEVTMjAxNyBkcmFm dAorCQkgKiBhbGxvd3MgUmVnRXhwLnByb3RvdHlwZSBzcGVjaWZpY2FsbHksIHJldHVybmluZyAn KD86KScKKwkJICogZm9yIC5zb3VyY2UgYW5kIHVuZGVmaW5lZCBmb3IgYWxsIGZsYWdzLgorCQkg Ki8KKwkJaWYgKG1hZ2ljICE9IDE2IC8qIC5zb3VyY2UgKi8pIHsKKwkJCXJldHVybiAwOworCQl9 CisJCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiKD86KSIpOyAgLyogLnNvdXJjZSBoYW5kbGVkIGJ5 IHN3aXRjaC1jYXNlICovCisJCXJlX2ZsYWdzID0gMDsKKwl9IGVsc2UgeworCQlEVUtfRENFUlJP Ul9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCX0KKworCS8qIFsgcmVnZXhwIHNvdXJjZSBdICov CisKKwlzd2l0Y2ggKG1hZ2ljKSB7CisJY2FzZSAwOiB7ICAvKiBnbG9iYWwgKi8KKwkJZHVrX3B1 c2hfYm9vbGVhbih0aHIsIChyZV9mbGFncyAmIERVS19SRV9GTEFHX0dMT0JBTCkpOworCQlicmVh azsKKwl9CisJY2FzZSAxOiB7ICAvKiBpZ25vcmVDYXNlICovCisJCWR1a19wdXNoX2Jvb2xlYW4o dGhyLCAocmVfZmxhZ3MgJiBEVUtfUkVfRkxBR19JR05PUkVfQ0FTRSkpOworCQlicmVhazsKKwl9 CisJY2FzZSAyOiB7ICAvKiBtdWx0aWxpbmUgKi8KKwkJZHVrX3B1c2hfYm9vbGVhbih0aHIsIChy ZV9mbGFncyAmIERVS19SRV9GTEFHX01VTFRJTElORSkpOworCQlicmVhazsKKwl9CisjaWYgMAor CS8qIERvbid0IHByb3ZpZGUgdW50aWwgaW1wbGVtZW50ZWQgdG8gYXZvaWQgaW50ZXJmZXJpbmcg d2l0aCBmZWF0dXJlCisJICogZGV0ZWN0aW9uIGluIHVzZXIgY29kZS4KKwkgKi8KKwljYXNlIDM6 ICAgIC8qIHN0aWNreSAqLworCWNhc2UgNDogeyAgLyogdW5pY29kZSAqLworCQlkdWtfcHVzaF9m YWxzZSh0aHIpOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OiB7ICAvKiBzb3VyY2Ug Ki8KKwkJLyogbGVhdmUgJ3NvdXJjZScgb24gdG9wICovCisJCWJyZWFrOworCX0KKwl9CisKKwly ZXR1cm4gMTsKK30KKworI2VuZGlmICAvKiBEVUtfVVNFX1JFR0VYUF9TVVBQT1JUICovCisvKgor ICogIFN0cmluZyBidWlsdC1pbnMKKyAqCisgKiAgTW9zdCBTdHJpbmcgYnVpbHQtaW5zIG11c3Qg b25seSBhY2NlcHQgc3RyaW5ncyAob3IgU3RyaW5nIG9iamVjdHMpLgorICogIFN5bWJvbHMsIHJl cHJlc2VudGVkIGludGVybmFsbHkgYXMgc3RyaW5ncywgbXVzdCBiZSBnZW5lcmFsbHkgcmVqZWN0 ZWQuCisgKiAgVGhlIGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZygpIGhlbHBlciBk b2VzIHRoaXMgYXV0b21hdGljYWxseS4KKyAqLworCisvKiBYWFg6IFRoZXJlIGFyZSBzZXZlcmFs IGxpbWl0YXRpb25zIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZvcgorICogc3RyaW5n cyB3aXRoID49IDB4ODAwMDAwMDBVTCBjaGFyYWN0ZXJzLiAgSW4gc29tZSBjYXNlcyBvbmUgd291 bGQgbmVlZAorICogdG8gYmUgYWJsZSB0byByZXByZXNlbnQgdGhlIHJhbmdlIFstMHhmZmZmZmZm ZiwweGZmZmZmZmZmXSBhbmQgc28gb24uCisgKiBHZW5lcmFsbHkgY2hhcmFjdGVyIGFuZCBieXRl IGxlbmd0aCBhcmUgYXNzdW1lZCB0byBmaXQgaW50byBzaWduZWQgMzIKKyAqIGJpdHMgKDwgMHg4 MDAwMDAwMFVMKS4gIFBsYWNlcyB3aXRoIGlzc3VlcyBhcmUgbm90IG1hcmtlZCBleHBsaWNpdGx5 CisgKiBiZWxvdyBpbiBhbGwgY2FzZXMsIGxvb2sgZm9yIHNpZ25lZCB0eXBlIHVzYWdlIChkdWtf aW50X3QgZXRjKSBmb3IKKyAqIG9mZnNldHMvbGVuZ3Rocy4KKyAqLworCisvKiAjaW5jbHVkZSBk dWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfU1RSSU5HX0JVSUxUSU4pCisKKy8qCisgKiAgSGVscGVycworICovCisKK0RVS19MT0NBTCBk dWtfaHN0cmluZyAqZHVrX19zdHJfdG9zdHJpbmdfbm90cmVnZXhwKGR1a19odGhyZWFkICp0aHIs IGR1a19pZHhfdCBpZHgpIHsKKwlkdWtfaHN0cmluZyAqaDsKKworCWlmIChkdWtfZ2V0X2NsYXNz X251bWJlcih0aHIsIGlkeCkgPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfUkVHRVhQKSB7CisJCURVS19F UlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5V TEw7KTsKKwl9CisJaCA9IGR1a190b19oc3RyaW5nKHRociwgaWR4KTsKKwlEVUtfQVNTRVJUKGgg IT0gTlVMTCk7CisKKwlyZXR1cm4gaDsKK30KKworRFVLX0xPQ0FMIGR1a19pbnRfdCBkdWtfX3N0 cl9zZWFyY2hfc2hhcmVkKGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpoX3RoaXMsIGR1 a19oc3RyaW5nICpoX3NlYXJjaCwgZHVrX2ludF90IHN0YXJ0X2Nwb3MsIGR1a19ib29sX3QgYmFj a3dhcmRzKSB7CisJZHVrX2ludF90IGNwb3M7CisJZHVrX2ludF90IGJwb3M7CisJY29uc3QgZHVr X3VpbnQ4X3QgKnBfc3RhcnQsICpwX2VuZCwgKnA7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnFfc3Rh cnQ7CisJZHVrX2ludF90IHFfYmxlbjsKKwlkdWtfdWludDhfdCBmaXJzdGJ5dGU7CisJZHVrX3Vp bnQ4X3QgdDsKKworCWNwb3MgPSBzdGFydF9jcG9zOworCisJLyogRW1wdHkgc2VhcmNoc3RyaW5n IGFsd2F5cyBtYXRjaGVzOyBjcG9zIG11c3QgYmUgY2xhbXBlZCBoZXJlLgorCSAqIChJZiBxX2Js ZW4gd2VyZSA8IDAgZHVlIHRvIGNsYW1wZWQgY29lcmNpb24sIGl0IHdvdWxkIGFsc28gYmUKKwkg KiBjYXVnaHQgaGVyZS4pCisJICovCisJcV9zdGFydCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKGhf c2VhcmNoKTsKKwlxX2JsZW4gPSAoZHVrX2ludF90KSBEVUtfSFNUUklOR19HRVRfQllURUxFTiho X3NlYXJjaCk7CisJaWYgKHFfYmxlbiA8PSAwKSB7CisJCXJldHVybiBjcG9zOworCX0KKwlEVUtf QVNTRVJUKHFfYmxlbiA+IDApOworCisJYnBvcyA9IChkdWtfaW50X3QpIGR1a19oZWFwX3N0cmNh Y2hlX29mZnNldF9jaGFyMmJ5dGUodGhyLCBoX3RoaXMsIChkdWtfdWludDMyX3QpIGNwb3MpOwor CisJcF9zdGFydCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKGhfdGhpcyk7CisJcF9lbmQgPSBwX3N0 YXJ0ICsgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaF90aGlzKTsKKwlwID0gcF9zdGFydCArIGJw b3M7CisKKwkvKiBUaGlzIGxvb3AgaXMgb3B0aW1pemVkIGZvciBzaXplLiAgRm9yIHNwZWVkLCB0 aGVyZSBzaG91bGQgYmUKKwkgKiB0d28gc2VwYXJhdGUgbG9vcHMsIGFuZCB3ZSBzaG91bGQgZW5z dXJlIHRoYXQgbWVtY21wKCkgY2FuIGJlCisJICogdXNlZCB3aXRob3V0IGFuIGV4dHJhICJ3aWxs IHNlYXJjaHN0cmluZyBmaXQiIGNoZWNrLiAgRG9pbmcKKwkgKiB0aGUgcHJlY29uZGl0aW9uaW5n IGZvciAncCcgYW5kICdwX2VuZCcgaXMgZWFzeSBidXQgY3BvcworCSAqIG11c3QgYmUgdXBkYXRl ZCBpZiAncCcgaXMgd291bmQgYmFjayAoYmFja3dhcmQgc2Nhbm5pbmcpLgorCSAqLworCisJZmly c3RieXRlID0gcV9zdGFydFswXTsgIC8qIGxlYWRpbmcgYnl0ZSBvZiBtYXRjaCBzdHJpbmcgKi8K Kwl3aGlsZSAocCA8PSBwX2VuZCAmJiBwID49IHBfc3RhcnQpIHsKKwkJdCA9ICpwOworCisJCS8q IEZvciBFQ01BU2NyaXB0IHN0cmluZ3MsIHRoaXMgY2hlY2sgY2FuIG9ubHkgbWF0Y2ggZm9yCisJ CSAqIGluaXRpYWwgVVRGLTggYnl0ZXMgKG5vdCBjb250aW51YXRpb24gYnl0ZXMpLiAgRm9yIG90 aGVyCisJCSAqIHN0cmluZ3MgYWxsIGJldHMgYXJlIG9mZi4KKwkJICovCisKKwkJaWYgKCh0ID09 IGZpcnN0Ynl0ZSkgJiYgKChkdWtfc2l6ZV90KSAocF9lbmQgLSBwKSA+PSAoZHVrX3NpemVfdCkg cV9ibGVuKSkgeworCQkJRFVLX0FTU0VSVChxX2JsZW4gPiAwKTsKKwkJCWlmIChkdWtfbWVtY21w KChjb25zdCB2b2lkICopIHAsIChjb25zdCB2b2lkICopIHFfc3RhcnQsIChzaXplX3QpIHFfYmxl bikgPT0gMCkgeworCQkJCXJldHVybiBjcG9zOworCQkJfQorCQl9CisKKwkJLyogdHJhY2sgY3Bv cyB3aGlsZSBzY2FubmluZyAqLworCQlpZiAoYmFja3dhcmRzKSB7CisJCQkvKiB3aGVuIGdvaW5n IGJhY2t3YXJkcywgd2UgZGVjcmVtZW50IGNwb3MgJ2Vhcmx5JzsKKwkJCSAqICdwJyBtYXkgcG9p bnQgdG8gYSBjb250aW51YXRpb24gYnl0ZSBvZiB0aGUgY2hhcgorCQkJICogYXQgb2Zmc2V0ICdj cG9zJywgYnV0IHRoYXQncyBPSyBiZWNhdXNlIHdlJ2xsCisJCQkgKiBiYWNrdHJhY2sgYWxsIHRo ZSB3YXkgdG8gdGhlIGluaXRpYWwgYnl0ZS4KKwkJCSAqLworCQkJaWYgKCh0ICYgMHhjMCkgIT0g MHg4MCkgeworCQkJCWNwb3MtLTsKKwkJCX0KKwkJCXAtLTsKKwkJfSBlbHNlIHsKKwkJCWlmICgo dCAmIDB4YzApICE9IDB4ODApIHsKKwkJCQljcG9zKys7CisJCQl9CisJCQlwKys7CisJCX0KKwl9 CisKKwkvKiBOb3QgZm91bmQuICBFbXB0eSBzdHJpbmcgY2FzZSBpcyBoYW5kbGVkIHNwZWNpYWxs eSBhYm92ZS4gKi8KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiAgQ29uc3RydWN0b3IKKyAqLwor CitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfY29uc3RydWN0b3IoZHVrX2h0 aHJlYWQgKnRocikgeworCWR1a19oc3RyaW5nICpoOworCWR1a191aW50X3QgZmxhZ3M7CisKKwkv KiBTdHJpbmcgY29uc3RydWN0b3IgbmVlZHMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBhcmd1 bWVudCBub3QgZ2l2ZW4gYXQgYWxsCisJICogdnMuIGdpdmVuIGFzICd1bmRlZmluZWQnLiAgV2Un cmUgYSB2YXJhcmcgZnVuY3Rpb24gdG8gaGFuZGxlIHRoaXMgcHJvcGVybHkuCisJICovCisKKwkv KiBYWFg6IGNvcHkgY3VycmVudCBhY3RpdmF0aW9uIGZsYWdzIHRvIHRociwgaW5jbHVkaW5nIGN1 cnJlbnQgbWFnaWMsCisJICogaXNfY29uc3RydWN0b3JfY2FsbCBldGMuICBUaGlzIHRha2VzIGEg ZmV3IGJ5dGVzIGluIGR1a19odGhyZWFkIGJ1dAorCSAqIG1ha2VzIGNhbGwgc2l0ZXMgc21hbGxl ciAodGhlcmUgYXJlID4zMCBpc19jb25zdHJ1Y3Rvcl9jYWxsIGFuZCBnZXQKKwkgKiBjdXJyZW50 IG1hZ2ljIGNhbGwgc2l0ZXMuCisJICovCisKKwlpZiAoZHVrX2dldF90b3AodGhyKSA9PSAwKSB7 CisJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsKKwl9IGVsc2UgeworCQloID0gZHVrX3Rv X2hzdHJpbmdfYWNjZXB0c3ltYm9sKHRociwgMCk7CisJCWlmIChEVUtfVU5MSUtFTFkoRFVLX0hT VFJJTkdfSEFTX1NZTUJPTChoKSAmJiAhZHVrX2lzX2NvbnN0cnVjdG9yX2NhbGwodGhyKSkpIHsK KwkJCWR1a19wdXNoX3N5bWJvbF9kZXNjcmlwdGl2ZV9zdHJpbmcodGhyLCBoKTsKKwkJCWR1a19y ZXBsYWNlKHRociwgMCk7CisJCX0KKwl9CisJZHVrX3RvX3N0cmluZyh0aHIsIDApOyAgLyogY2F0 Y2hlcyBzeW1ib2wgYXJndW1lbnQgZm9yIGNvbnN0cnVjdG9yIGNhbGwgKi8KKwlEVUtfQVNTRVJU KGR1a19pc19zdHJpbmcodGhyLCAwKSk7CisJZHVrX3NldF90b3AodGhyLCAxKTsgIC8qIFRvcCBt YXkgYmUgMSBvciBsYXJnZXIuICovCisKKwlpZiAoZHVrX2lzX2NvbnN0cnVjdG9yX2NhbGwodGhy KSkgeworCQkvKiBTdHJpbmcgb2JqZWN0IGludGVybmFsIHZhbHVlIGlzIGltbXV0YWJsZSAqLwor CQlmbGFncyA9IERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJCSAgICAgICAgRFVLX0hP QkpFQ1RfRkxBR19GQVNUUkVGUyB8CisJCSAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNf U1RSSU5HT0JKIHwKKwkJICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9C SkVDVF9DTEFTU19TVFJJTkcpOworCQlkdWtfcHVzaF9vYmplY3RfaGVscGVyKHRociwgZmxhZ3Ms IERVS19CSURYX1NUUklOR19QUk9UT1RZUEUpOworCQlkdWtfZHVwXzAodGhyKTsKKwkJZHVrX3hk ZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfVkFMVUUsIERVS19Q Uk9QREVTQ19GTEFHU19OT05FKTsKKwl9CisJLyogTm90ZTogdW5iYWxhbmNlZCBzdGFjayBvbiBw dXJwb3NlICovCisKKwlyZXR1cm4gMTsKK30KKworRFVLX0xPQ0FMIGR1a19yZXRfdCBkdWtfX2Nv bnN0cnVjdF9mcm9tX2NvZGVwb2ludHMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2Jvb2xfdCBub25i bXApIHsKKwlkdWtfYnVmd3JpdGVyX2N0eCBid19hbGxvYzsKKwlkdWtfYnVmd3JpdGVyX2N0eCAq Ync7CisJZHVrX2lkeF90IGksIG47CisJZHVrX3Vjb2RlcG9pbnRfdCBjcDsKKworCS8qIFhYWDog SXQgd291bGQgYmUgbmljZSB0byBidWlsZCB0aGUgc3RyaW5nIGRpcmVjdGx5IGJ1dCBUb1VpbnQx NigpCisJICogY29lcmNpb24gaXMgbmVlZGVkIHNvIGEgZ2VuZXJpYyBoZWxwZXIgd291bGQgbm90 IGJlIHZlcnkKKwkgKiBoZWxwZnVsIChwZXJoYXBzIGNvZXJjZSB0aGUgdmFsdWUgc3RhY2sgZmly c3QgaGVyZSBhbmQgdGhlbgorCSAqIGJ1aWxkIGEgc3RyaW5nIGZyb20gYSBkdWtfdHZhbCBudW1i ZXIgc2VxdWVuY2UgaW4gb25lIGdvPykuCisJICovCisKKwluID0gZHVrX2dldF90b3AodGhyKTsK KworCWJ3ID0gJmJ3X2FsbG9jOworCURVS19CV19JTklUX1BVU0hCVUYodGhyLCBidywgKGR1a19z aXplX3QpIG4pOyAgLyogaW5pdGlhbCBlc3RpbWF0ZSBmb3IgQVNDSUkgb25seSBjb2RlcG9pbnRz ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCS8qIFhYWDogY291bGQgaW1wcm92 ZSBidWZ3cml0ZXIgaGFuZGxpbmcgdG8gd3JpdGUgbXVsdGlwbGUgY29kZXBvaW50cworCQkgKiB3 aXRoIG9uZSBlbnN1cmUgY2FsbCBidXQgdGhlIHJlbGF0aXZlIGJlbmVmaXQgd291bGQgYmUgcXVp dGUgc21hbGwuCisJCSAqLworCisJCWlmIChub25ibXApIHsKKwkJCS8qIEVTMjAxNSByZXF1aXJl cyB0aGF0ICgxKSBTYW1lVmFsdWUoY3AsIFRvSW50ZWdlcihjcCkpIGFuZAorCQkJICogKDIpIGNw ID49IDAgYW5kIGNwIDw9IDB4MTBmZmZmLiAgVGhpcyBjaGVjayBkb2VzIG5vdAorCQkJICogaW1w bGVtZW50IHRoZSBzdGVwcyBleGFjdGx5IGJ1dCB0aGUgb3V0Y29tZSBzaG91bGQgYmUKKwkJCSAq IHRoZSBzYW1lLgorCQkJICovCisJCQlkdWtfaW50MzJfdCBpMzIgPSAwOworCQkJaWYgKCFkdWtf aXNfd2hvbGVfZ2V0X2ludDMyKGR1a190b19udW1iZXIodGhyLCBpKSwgJmkzMikgfHwKKwkJCSAg ICBpMzIgPCAwIHx8IGkzMiA+IDB4MTBmZmZmTCkgeworCQkJCURVS19EQ0VSUk9SX1JBTkdFX0lO VkFMSURfQVJHUyh0aHIpOworCQkJfQorCQkJRFVLX0FTU0VSVChpMzIgPj0gMCAmJiBpMzIgPD0g MHgxMGZmZmZMKTsKKwkJCWNwID0gKGR1a191Y29kZXBvaW50X3QpIGkzMjsKKwkJCURVS19CV19X UklURV9FTlNVUkVfQ0VTVTgodGhyLCBidywgY3ApOworCQl9IGVsc2UgeworI2lmIGRlZmluZWQo RFVLX1VTRV9OT05TVERfU1RSSU5HX0ZST01DSEFSQ09ERV8zMkJJVCkKKwkJCS8qIFRvVWludDE2 KCkgY29lcmNpb24gaXMgbWFuZGF0b3J5IGluIHRoZSBFNS4xIHNwZWNpZmljYXRpb24sIGJ1dAor CQkJICogdGhpcyBub24tY29tcGxpYW50IGJlaGF2aW9yIG1ha2VzIG1vcmUgc2Vuc2UgYmVjYXVz ZSB3ZSBzdXBwb3J0CisJCQkgKiBub24tQk1QIGNvZGVwb2ludHMuICBEb24ndCB1c2UgQ0VTVS04 IGJlY2F1c2UgdGhhdCdkIGNyZWF0ZQorCQkJICogc3Vycm9nYXRlIHBhaXJzLgorCQkJICovCisJ CQljcCA9IChkdWtfdWNvZGVwb2ludF90KSBkdWtfdG9fdWludDMyKHRociwgaSk7CisJCQlEVUtf QldfV1JJVEVfRU5TVVJFX1hVVEY4KHRociwgYncsIGNwKTsKKyNlbHNlCisJCQljcCA9IChkdWtf dWNvZGVwb2ludF90KSBkdWtfdG9fdWludDE2KHRociwgaSk7CisJCQlEVUtfQVNTRVJUKGNwID49 IDAgJiYgY3AgPD0gMHgxMGZmZmZMKTsKKwkJCURVS19CV19XUklURV9FTlNVUkVfQ0VTVTgodGhy LCBidywgY3ApOworI2VuZGlmCisJCX0KKwl9CisKKwlEVUtfQldfQ09NUEFDVCh0aHIsIGJ3KTsK Kwkodm9pZCkgZHVrX2J1ZmZlcl90b19zdHJpbmcodGhyLCAtMSk7ICAvKiBTYWZlLCBleHRlbmRl ZCBVVEYtOCBvciBDRVNVLTggZW5jb2RlZC4gKi8KKwlyZXR1cm4gMTsKK30KKworRFVLX0lOVEVS TkFMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX2NvbnN0cnVjdG9yX2Zyb21fY2hhcl9jb2RlKGR1 a19odGhyZWFkICp0aHIpIHsKKwlyZXR1cm4gZHVrX19jb25zdHJ1Y3RfZnJvbV9jb2RlcG9pbnRz KHRociwgMCAvKm5vbmJtcCovKTsKK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzYpCitEVUtf SU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfY29uc3RydWN0b3JfZnJvbV9jb2RlX3Bv aW50KGR1a19odGhyZWFkICp0aHIpIHsKKwlyZXR1cm4gZHVrX19jb25zdHJ1Y3RfZnJvbV9jb2Rl cG9pbnRzKHRociwgMSAvKm5vbmJtcCovKTsKK30KKyNlbmRpZgorCisvKgorICogIHRvU3RyaW5n KCksIHZhbHVlT2YoKQorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3N0cmlu Z19wcm90b3R5cGVfdG9fc3RyaW5nKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdHZhbCAqdHY7 CisKKwlkdWtfcHVzaF90aGlzKHRocik7CisJdHYgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgLTEp OworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7CisKKwlpZiAoRFVLX1RWQUxfSVNfU1RSSU5HKHR2 KSkgeworCQkvKiByZXR1cm4gYXMgaXMgKi8KKwl9IGVsc2UgaWYgKERVS19UVkFMX0lTX09CSkVD VCh0dikpIHsKKwkJZHVrX2hvYmplY3QgKmggPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJ RFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJCS8qIE11c3QgYmUgYSAic3RyaW5nIG9iamVjdCIs IGkuZS4gY2xhc3MgIlN0cmluZyIgKi8KKwkJaWYgKERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1C RVIoaCkgIT0gRFVLX0hPQkpFQ1RfQ0xBU1NfU1RSSU5HKSB7CisJCQlnb3RvIHR5cGVfZXJyb3I7 CisJCX0KKworCQlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhf SU5UX1ZBTFVFKTsKKwkJRFVLX0FTU0VSVChkdWtfaXNfc3RyaW5nKHRociwgLTEpKTsKKwl9IGVs c2UgeworCQlnb3RvIHR5cGVfZXJyb3I7CisJfQorCisJKHZvaWQpIGR1a19yZXF1aXJlX2hzdHJp bmdfbm90c3ltYm9sKHRociwgLTEpOyAgLyogUmVqZWN0IHN5bWJvbHMgKGFuZCB3cmFwcGVkIHN5 bWJvbHMpLiAqLworCXJldHVybiAxOworCisgdHlwZV9lcnJvcjoKKwlEVUtfRENFUlJPUl9UWVBF X0lOVkFMSURfQVJHUyh0aHIpOworfQorCisvKgorICogIENoYXJhY3RlciBhbmQgY2hhcmNvZGUg YWNjZXNzCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3Rv dHlwZV9jaGFyX2F0KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtf aW50X3QgcG9zOworCisJLyogWFhYOiBmYXN0ZXIgaW1wbGVtZW50YXRpb24gKi8KKworCWggPSBk dWtfcHVzaF90aGlzX2NvZXJjaWJsZV90b19zdHJpbmcodGhyKTsKKwlEVUtfQVNTRVJUKGggIT0g TlVMTCk7CisKKwlwb3MgPSBkdWtfdG9faW50KHRociwgMCk7CisKKwlpZiAoc2l6ZW9mKGR1a19z aXplX3QpID49IHNpemVvZihkdWtfdWludF90KSkgeworCQkvKiBDYXN0IHRvIGR1a19zaXplX3Qg d29ya3MgaW4gdGhpcyBjYXNlOgorCQkgKiAtIElmIHBvcyA8IDAsIChkdWtfc2l6ZV90KSBwb3Mg d2lsbCBhbHdheXMgYmUKKwkJICogICA+PSBtYXhfY2hhcmxlbiwgYW5kIHJlc3VsdCB3aWxsIGJl IHRoZSBlbXB0eSBzdHJpbmcKKwkJICogICAoc2VlIGR1a19zdWJzdHJpbmcoKSkuCisJCSAqIC0g SWYgcG9zID49IDAsIHBvcyArIDEgY2Fubm90IHdyYXAuCisJCSAqLworCQlEVUtfQVNTRVJUKChk dWtfc2l6ZV90KSBEVUtfSU5UX01JTiA+PSBEVUtfSFNUUklOR19NQVhfQllURUxFTik7CisJCURV S19BU1NFUlQoKGR1a19zaXplX3QpIERVS19JTlRfTUFYICsgMVUgPiAoZHVrX3NpemVfdCkgRFVL X0lOVF9NQVgpOworCQlkdWtfc3Vic3RyaW5nKHRociwgLTEsIChkdWtfc2l6ZV90KSBwb3MsIChk dWtfc2l6ZV90KSBwb3MgKyAxVSk7CisJfSBlbHNlIHsKKwkJLyogSWYgc2l6ZV90IGlzIHNtYWxs ZXIgdGhhbiBpbnQsIGV4cGxpY2l0IGJvdW5kcyBjaGVja3MKKwkJICogYXJlIG5lZWRlZCBiZWNh dXNlIGFuIGludCBtYXkgd3JhcCBtdWx0aXBsZSB0aW1lcy4KKwkJICovCisJCWlmIChEVUtfVU5M SUtFTFkocG9zIDwgMCB8fCAoZHVrX3VpbnRfdCkgcG9zID49IChkdWtfdWludF90KSBEVUtfSFNU UklOR19HRVRfQ0hBUkxFTihoKSkpIHsKKwkJCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsK KwkJfSBlbHNlIHsKKwkJCWR1a19zdWJzdHJpbmcodGhyLCAtMSwgKGR1a19zaXplX3QpIHBvcywg KGR1a19zaXplX3QpIHBvcyArIDFVKTsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCisvKiBN YWdpYzogMD1jaGFyQ29kZUF0LCAxPWNvZGVQb2ludEF0ICovCitEVUtfSU5URVJOQUwgZHVrX3Jl dF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX2NoYXJfY29kZV9hdChkdWtfaHRocmVhZCAqdGhy KSB7CisJZHVrX2ludF90IHBvczsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtfYm9vbF90IGNsYW1w ZWQ7CisJZHVrX3VpbnQzMl90IGNwOworCWR1a19pbnRfdCBtYWdpYzsKKworCS8qIFhYWDogZmFz dGVyIGltcGxlbWVudGF0aW9uICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiYXJnPSUhVCIs IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAwKSkpOworCisJaCA9IGR1a19wdXNoX3Ro aXNfY29lcmNpYmxlX3RvX3N0cmluZyh0aHIpOworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwor CXBvcyA9IGR1a190b19pbnRfY2xhbXBlZF9yYXcodGhyLAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCAvKmluZGV4Ki8sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8q bWluKGluY2wpKi8sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX2ludF90KSBE VUtfSFNUUklOR19HRVRfQ0hBUkxFTihoKSAtIDEgLyptYXgoaW5jbCkqLywKKwkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZjbGFtcGVkIC8qb3V0X2NsYW1wZWQqLyk7CisjaWYgZGVmaW5l ZChEVUtfVVNFX0VTNikKKwltYWdpYyA9IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworI2Vs c2UKKwlEVUtfQVNTRVJUKGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpID09IDApOworCW1hZ2lj ID0gMDsKKyNlbmRpZgorCWlmIChjbGFtcGVkKSB7CisJCS8qIEZvciBvdXQtb2YtYm91bmRzIGlu ZGljZXMgLmNoYXJDb2RlQXQoKSByZXR1cm5zIE5hTiBhbmQKKwkJICogLmNvZGVQb2ludEF0KCkg cmV0dXJucyB1bmRlZmluZWQuCisJCSAqLworCQlpZiAobWFnaWMgIT0gMCkgeworCQkJcmV0dXJu IDA7CisJCX0KKwkJZHVrX3B1c2hfbmFuKHRocik7CisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVChw b3MgPj0gMCk7CisJCWNwID0gKGR1a191aW50MzJfdCkgZHVrX2hzdHJpbmdfY2hhcl9jb2RlX2F0 X3Jhdyh0aHIsIGgsIChkdWtfdWludF90KSBwb3MsIChkdWtfYm9vbF90KSBtYWdpYyAvKnN1cnJv Z2F0ZV9hd2FyZSovKTsKKwkJZHVrX3B1c2hfdTMyKHRociwgY3ApOworCX0KKwlyZXR1cm4gMTsK K30KKworLyoKKyAqICBzdWJzdHJpbmcoKSwgc3Vic3RyKCksIHNsaWNlKCkKKyAqLworCisvKiBY WFg6IGFueSBjaGFuY2Ugb2YgbWVyZ2luZyB0aGVzZSB0aHJlZSBzaW1pbGFyIGJ1dCBzdGlsbCBz bGlnaHRseQorICogZGlmZmVyZW50IGFsZ29yaXRobXMgc28gdGhhdCBmb290cHJpbnQgd291bGQg YmUgcmVkdWNlZD8KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9zdHJpbmdf cHJvdG90eXBlX3N1YnN0cmluZyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hzdHJpbmcgKmg7 CisJZHVrX2ludF90IHN0YXJ0X3BvcywgZW5kX3BvczsKKwlkdWtfaW50X3QgbGVuOworCisJaCA9 IGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZyh0aHIpOworCURVS19BU1NFUlQoaCAh PSBOVUxMKTsKKwlsZW4gPSAoZHVrX2ludF90KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoKTsK KworCS8qIFsgc3RhcnQgZW5kIHN0ciBdICovCisKKwlzdGFydF9wb3MgPSBkdWtfdG9faW50X2Ns YW1wZWQodGhyLCAwLCAwLCBsZW4pOworCWlmIChkdWtfaXNfdW5kZWZpbmVkKHRociwgMSkpIHsK KwkJZW5kX3BvcyA9IGxlbjsKKwl9IGVsc2UgeworCQllbmRfcG9zID0gZHVrX3RvX2ludF9jbGFt cGVkKHRociwgMSwgMCwgbGVuKTsKKwl9CisJRFVLX0FTU0VSVChzdGFydF9wb3MgPj0gMCAmJiBz dGFydF9wb3MgPD0gbGVuKTsKKwlEVUtfQVNTRVJUKGVuZF9wb3MgPj0gMCAmJiBlbmRfcG9zIDw9 IGxlbik7CisKKwlpZiAoc3RhcnRfcG9zID4gZW5kX3BvcykgeworCQlkdWtfaW50X3QgdG1wID0g c3RhcnRfcG9zOworCQlzdGFydF9wb3MgPSBlbmRfcG9zOworCQllbmRfcG9zID0gdG1wOworCX0K KworCURVS19BU1NFUlQoZW5kX3BvcyA+PSBzdGFydF9wb3MpOworCisJZHVrX3N1YnN0cmluZyh0 aHIsIC0xLCAoZHVrX3NpemVfdCkgc3RhcnRfcG9zLCAoZHVrX3NpemVfdCkgZW5kX3Bvcyk7CisJ cmV0dXJuIDE7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfU0VDVElPTl9CKQorRFVLX0lOVEVS TkFMIGR1a19yZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9zdWJzdHIoZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19oc3RyaW5nICpoOworCWR1a19pbnRfdCBzdGFydF9wb3MsIGVuZF9wb3M7 CisJZHVrX2ludF90IGxlbjsKKworCS8qIFVubGlrZSBub24tb2Jzb2xldGUgU3RyaW5nIGNhbGxz LCBzdWJzdHIoKSBhbGdvcml0aG0gaW4gRTUuMQorCSAqIHNwZWNpZmljYXRpb24gd2lsbCBoYXBw aWx5IGNvZXJjZSB1bmRlZmluZWQgYW5kIG51bGwgdG8gc3RyaW5ncworCSAqICgidW5kZWZpbmVk IiBhbmQgIm51bGwiKS4KKwkgKi8KKwlkdWtfcHVzaF90aGlzKHRocik7CisJaCA9IGR1a190b19o c3RyaW5nX20xKHRocik7ICAvKiBSZWplY3QgU3ltYm9scy4gKi8KKwlEVUtfQVNTRVJUKGggIT0g TlVMTCk7CisJbGVuID0gKGR1a19pbnRfdCkgRFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oaCk7CisK KwkvKiBbIHN0YXJ0IGxlbmd0aCBzdHIgXSAqLworCisJLyogVGhlIGltcGxlbWVudGF0aW9uIGZv ciBjb21wdXRpbmcgb2Ygc3RhcnRfcG9zIGFuZCBlbmRfcG9zIGRpZmZlcnMKKwkgKiBmcm9tIHRo ZSBzdGFuZGFyZCBhbGdvcml0aG0sIGJ1dCBpcyBpbnRlbmRlZCB0byByZXN1bHQgaW4gdGhlIGV4 YWN0bHkKKwkgKiBzYW1lIGJlaGF2aW9yLiAgVGhpcyBpcyBub3QgYWx3YXlzIG9idmlvdXMuCisJ ICovCisKKwkvKiBjb21iaW5lcyBzdGVwcyAyIGFuZCA1OyAtbGVuIGVuc3VyZXMgbWF4KCkgbm90 IG5lZWRlZCBmb3Igc3RlcCA1ICovCisJc3RhcnRfcG9zID0gZHVrX3RvX2ludF9jbGFtcGVkKHRo ciwgMCwgLWxlbiwgbGVuKTsKKwlpZiAoc3RhcnRfcG9zIDwgMCkgeworCQlzdGFydF9wb3MgPSBs ZW4gKyBzdGFydF9wb3M7CisJfQorCURVS19BU1NFUlQoc3RhcnRfcG9zID49IDAgJiYgc3RhcnRf cG9zIDw9IGxlbik7CisKKwkvKiBjb21iaW5lcyBzdGVwcyAzLCA2OyBzdGVwIDcgaXMgbm90IG5l ZWRlZCAqLworCWlmIChkdWtfaXNfdW5kZWZpbmVkKHRociwgMSkpIHsKKwkJZW5kX3BvcyA9IGxl bjsKKwl9IGVsc2UgeworCQlEVUtfQVNTRVJUKHN0YXJ0X3BvcyA8PSBsZW4pOworCQllbmRfcG9z ID0gc3RhcnRfcG9zICsgZHVrX3RvX2ludF9jbGFtcGVkKHRociwgMSwgMCwgbGVuIC0gc3RhcnRf cG9zKTsKKwl9CisJRFVLX0FTU0VSVChzdGFydF9wb3MgPj0gMCAmJiBzdGFydF9wb3MgPD0gbGVu KTsKKwlEVUtfQVNTRVJUKGVuZF9wb3MgPj0gMCAmJiBlbmRfcG9zIDw9IGxlbik7CisJRFVLX0FT U0VSVChlbmRfcG9zID49IHN0YXJ0X3Bvcyk7CisKKwlkdWtfc3Vic3RyaW5nKHRociwgLTEsIChk dWtfc2l6ZV90KSBzdGFydF9wb3MsIChkdWtfc2l6ZV90KSBlbmRfcG9zKTsKKwlyZXR1cm4gMTsK K30KKyNlbmRpZiAgLyogRFVLX1VTRV9TRUNUSU9OX0IgKi8KKworRFVLX0lOVEVSTkFMIGR1a19y ZXRfdCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9zbGljZShkdWtfaHRocmVhZCAqdGhyKSB7CisJ ZHVrX2hzdHJpbmcgKmg7CisJZHVrX2ludF90IHN0YXJ0X3BvcywgZW5kX3BvczsKKwlkdWtfaW50 X3QgbGVuOworCisJaCA9IGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZyh0aHIpOwor CURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlsZW4gPSAoZHVrX2ludF90KSBEVUtfSFNUUklOR19H RVRfQ0hBUkxFTihoKTsKKworCS8qIFsgc3RhcnQgZW5kIHN0ciBdICovCisKKwlzdGFydF9wb3Mg PSBkdWtfdG9faW50X2NsYW1wZWQodGhyLCAwLCAtbGVuLCBsZW4pOworCWlmIChzdGFydF9wb3Mg PCAwKSB7CisJCXN0YXJ0X3BvcyA9IGxlbiArIHN0YXJ0X3BvczsKKwl9CisJaWYgKGR1a19pc191 bmRlZmluZWQodGhyLCAxKSkgeworCQllbmRfcG9zID0gbGVuOworCX0gZWxzZSB7CisJCWVuZF9w b3MgPSBkdWtfdG9faW50X2NsYW1wZWQodGhyLCAxLCAtbGVuLCBsZW4pOworCQlpZiAoZW5kX3Bv cyA8IDApIHsKKwkJCWVuZF9wb3MgPSBsZW4gKyBlbmRfcG9zOworCQl9CisJfQorCURVS19BU1NF UlQoc3RhcnRfcG9zID49IDAgJiYgc3RhcnRfcG9zIDw9IGxlbik7CisJRFVLX0FTU0VSVChlbmRf cG9zID49IDAgJiYgZW5kX3BvcyA8PSBsZW4pOworCisJaWYgKGVuZF9wb3MgPCBzdGFydF9wb3Mp IHsKKwkJZW5kX3BvcyA9IHN0YXJ0X3BvczsKKwl9CisKKwlEVUtfQVNTRVJUKGVuZF9wb3MgPj0g c3RhcnRfcG9zKTsKKworCWR1a19zdWJzdHJpbmcodGhyLCAtMSwgKGR1a19zaXplX3QpIHN0YXJ0 X3BvcywgKGR1a19zaXplX3QpIGVuZF9wb3MpOworCXJldHVybiAxOworfQorCisvKgorICogIENh c2UgY29udmVyc2lvbgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3N0cmlu Z19wcm90b3R5cGVfY2FzZWNvbnZfc2hhcmVkKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfc21h bGxfaW50X3QgdXBwZXJjYXNlID0gZHVrX2dldF9jdXJyZW50X21hZ2ljKHRocik7CisKKwkodm9p ZCkgZHVrX3B1c2hfdGhpc19jb2VyY2libGVfdG9fc3RyaW5nKHRocik7CisJZHVrX3VuaWNvZGVf Y2FzZV9jb252ZXJ0X3N0cmluZyh0aHIsIChkdWtfYm9vbF90KSB1cHBlcmNhc2UpOworCXJldHVy biAxOworfQorCisvKgorICogIGluZGV4T2YoKSBhbmQgbGFzdEluZGV4T2YoKQorICovCisKK0RV S19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfaW5kZXhvZl9zaGFy ZWQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19oc3RyaW5nICpoX3RoaXM7CisJZHVrX2hzdHJp bmcgKmhfc2VhcmNoOworCWR1a19pbnRfdCBjbGVuX3RoaXM7CisJZHVrX2ludF90IGNwb3M7CisJ ZHVrX3NtYWxsX3VpbnRfdCBpc19sYXN0aW5kZXhvZiA9IChkdWtfc21hbGxfdWludF90KSBkdWtf Z2V0X2N1cnJlbnRfbWFnaWModGhyKTsgIC8qIDA9aW5kZXhPZiwgMT1sYXN0SW5kZXhPZiAqLwor CisJaF90aGlzID0gZHVrX3B1c2hfdGhpc19jb2VyY2libGVfdG9fc3RyaW5nKHRocik7CisJRFVL X0FTU0VSVChoX3RoaXMgIT0gTlVMTCk7CisJY2xlbl90aGlzID0gKGR1a19pbnRfdCkgRFVLX0hT VFJJTkdfR0VUX0NIQVJMRU4oaF90aGlzKTsKKworCWhfc2VhcmNoID0gZHVrX3RvX2hzdHJpbmco dGhyLCAwKTsKKwlEVUtfQVNTRVJUKGhfc2VhcmNoICE9IE5VTEwpOworCisJZHVrX3RvX251bWJl cih0aHIsIDEpOworCWlmIChkdWtfaXNfbmFuKHRociwgMSkgJiYgaXNfbGFzdGluZGV4b2YpIHsK KwkJLyogaW5kZXhPZjogTmFOIHNob3VsZCBjYXVzZSBwb3MgdG8gYmUgemVyby4KKwkJICogbGFz dEluZGV4T2Y6IE5hTiBzaG91bGQgY2F1c2UgcG9zIHRvIGJlICtJbmZpbml0eQorCQkgKiAoYW5k IGxhdGVyIGJlIGNsYW1wZWQgdG8gbGVuKS4KKwkJICovCisJCWNwb3MgPSBjbGVuX3RoaXM7CisJ fSBlbHNlIHsKKwkJY3BvcyA9IGR1a190b19pbnRfY2xhbXBlZCh0aHIsIDEsIDAsIGNsZW5fdGhp cyk7CisJfQorCisJY3BvcyA9IGR1a19fc3RyX3NlYXJjaF9zaGFyZWQodGhyLCBoX3RoaXMsIGhf c2VhcmNoLCBjcG9zLCBpc19sYXN0aW5kZXhvZiAvKmJhY2t3YXJkcyovKTsKKwlkdWtfcHVzaF9p bnQodGhyLCBjcG9zKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICByZXBsYWNlKCkKKyAqLwor CisvKiBYWFg6IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdvcmtzIGJ1dCBpcyBxdWl0ZSBj bHVua3k7IGl0IGNvbXBpbGVzCisgKiB0byBhbG1vc3QgMSw0a0Igb2YgeDg2IGNvZGUgc28gaXQg bmVlZHMgdG8gYmUgc2ltcGxpZmllZCAoYmV0dGVyIGFwcHJvYWNoLAorICogc2hhcmVkIGhlbHBl cnMsIGV0YykuICBTb21lIGlkZWFzIGZvciByZWZhY3RvcmluZzoKKyAqCisgKiAtIGEgcHJpbWl0 aXZlIHRvIGNvbnZlcnQgYSBzdHJpbmcgaW50byBhIHJlZ2V4cCBtYXRjaGVyIChyZWR1Y2VzIG1h dGNoaW5nCisgKiAgIGNvZGUgYXQgdGhlIGNvc3Qgb2YgbWFraW5nIG1hdGNoaW5nIG11Y2ggc2xv d2VyKQorICogLSB1c2UgcmVwbGFjZSgpIGFzIGEgYmFzaWMgaGVscGVyIGZvciBtYXRjaCgpIGFu ZCBzcGxpdCgpLCB3aGljaCBhcmUgYm90aAorICogICBtdWNoIHNpbXBsZXIKKyAqIC0gQVBJIGNh bGwgdG8gZ2V0X3Byb3AgYW5kIHRvX2Jvb2xlYW4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX3Jl dF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX3JlcGxhY2UoZHVrX2h0aHJlYWQgKnRocikgewor CWR1a19oc3RyaW5nICpoX2lucHV0OworCWR1a19oc3RyaW5nICpoX21hdGNoOworCWR1a19oc3Ry aW5nICpoX3NlYXJjaDsKKwlkdWtfaG9iamVjdCAqaF9yZTsKKwlkdWtfYnVmd3JpdGVyX2N0eCBi d19hbGxvYzsKKwlkdWtfYnVmd3JpdGVyX2N0eCAqYnc7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JF R0VYUF9TVVBQT1JUKQorCWR1a19ib29sX3QgaXNfcmVnZXhwOworCWR1a19ib29sX3QgaXNfZ2xv YmFsOworI2VuZGlmCisJZHVrX2Jvb2xfdCBpc19yZXBsX2Z1bmM7CisJZHVrX3VpbnQzMl90IG1h dGNoX3N0YXJ0X2NvZmYsIG1hdGNoX3N0YXJ0X2JvZmY7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JF R0VYUF9TVVBQT1JUKQorCWR1a19pbnRfdCBtYXRjaF9jYXBzOworI2VuZGlmCisJZHVrX3VpbnQz Ml90IHByZXZfbWF0Y2hfZW5kX2JvZmY7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnJfc3RhcnQsICpy X2VuZCwgKnI7ICAgLyogcmVwbCBzdHJpbmcgc2NhbiAqLworCWR1a19zaXplX3QgdG1wX3N6Owor CisJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKwloX2lucHV0ID0gZHVrX3B1c2hfdGhpc19jb2Vy Y2libGVfdG9fc3RyaW5nKHRocik7CisJRFVLX0FTU0VSVChoX2lucHV0ICE9IE5VTEwpOworCisJ YncgPSAmYndfYWxsb2M7CisJRFVLX0JXX0lOSVRfUFVTSEJVRih0aHIsIGJ3LCBEVUtfSFNUUklO R19HRVRfQllURUxFTihoX2lucHV0KSk7ICAvKiBpbnB1dCBzaXplIGlzIGdvb2Qgb3V0cHV0IHN0 YXJ0aW5nIHBvaW50ICovCisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDQpOworCisJLyogc3RhY2tb MF0gPSBzZWFyY2ggdmFsdWUKKwkgKiBzdGFja1sxXSA9IHJlcGxhY2UgdmFsdWUKKwkgKiBzdGFj a1syXSA9IGlucHV0IHN0cmluZworCSAqIHN0YWNrWzNdID0gcmVzdWx0IGJ1ZmZlcgorCSAqLwor CisJaF9yZSA9IGR1a19nZXRfaG9iamVjdF93aXRoX2NsYXNzKHRociwgMCwgRFVLX0hPQkpFQ1Rf Q0xBU1NfUkVHRVhQKTsKKwlpZiAoaF9yZSkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBf U1VQUE9SVCkKKwkJaXNfcmVnZXhwID0gMTsKKwkJaXNfZ2xvYmFsID0gZHVrX2dldF9wcm9wX3N0 cmlkeF9ib29sZWFuKHRociwgMCwgRFVLX1NUUklEWF9HTE9CQUwsIE5VTEwpOworCisJCWlmIChp c19nbG9iYWwpIHsKKwkJCS8qIHN0YXJ0IG1hdGNoIGZyb20gYmVnaW5uaW5nICovCisJCQlkdWtf cHVzaF9pbnQodGhyLCAwKTsKKwkJCWR1a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAwLCBE VUtfU1RSSURYX0xBU1RfSU5ERVgpOworCQl9CisjZWxzZSAgLyogRFVLX1VTRV9SRUdFWFBfU1VQ UE9SVCAqLworCQlEVUtfRENFUlJPUl9VTlNVUFBPUlRFRCh0aHIpOworI2VuZGlmICAvKiBEVUtf VVNFX1JFR0VYUF9TVVBQT1JUICovCisJfSBlbHNlIHsKKwkJZHVrX3RvX3N0cmluZyh0aHIsIDAp OyAgLyogcmVqZWN0cyBzeW1ib2xzICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFR0VYUF9TVVBQ T1JUKQorCQlpc19yZWdleHAgPSAwOworCQlpc19nbG9iYWwgPSAwOworI2VuZGlmCisJfQorCisJ aWYgKGR1a19pc19mdW5jdGlvbih0aHIsIDEpKSB7CisJCWlzX3JlcGxfZnVuYyA9IDE7CisJCXJf c3RhcnQgPSBOVUxMOworCQlyX2VuZCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZHVrX2hzdHJpbmcg KmhfcmVwbDsKKworCQlpc19yZXBsX2Z1bmMgPSAwOworCQloX3JlcGwgPSBkdWtfdG9faHN0cmlu Zyh0aHIsIDEpOyAgLyogcmVqZWN0IHN5bWJvbHMgKi8KKwkJRFVLX0FTU0VSVChoX3JlcGwgIT0g TlVMTCk7CisJCXJfc3RhcnQgPSBEVUtfSFNUUklOR19HRVRfREFUQShoX3JlcGwpOworCQlyX2Vu ZCA9IHJfc3RhcnQgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX3JlcGwpOworCX0KKworCXBy ZXZfbWF0Y2hfZW5kX2JvZmYgPSAwOworCisJZm9yICg7OykgeworCQkvKgorCQkgKiAgSWYgbWF0 Y2hpbmcgd2l0aCBhIHJlZ2V4cDoKKwkJICogICAgLSBub24tZ2xvYmFsIFJlZ0V4cDogbGFzdElu ZGV4IG5vdCB0b3VjaGVkIG9uIGEgbWF0Y2gsIHplcm9lZAorCQkgKiAgICAgIG9uIGEgbm9uLW1h dGNoCisJCSAqICAgIC0gZ2xvYmFsIFJlZ0V4cDogb24gbWF0Y2gsIGxhc3RJbmRleCB3aWxsIGJl IHVwZGF0ZWQgYnkgcmVnZXhwCisJCSAqICAgICAgZXhlY3V0b3IgdG8gcG9pbnQgdG8gbmV4dCBj aGFyIGFmdGVyIHRoZSBtYXRjaGluZyBwYXJ0IChzbyB0aGF0CisJCSAqICAgICAgY2hhcmFjdGVy cyBpbiB0aGUgbWF0Y2hpbmcgcGFydCBhcmUgbm90IG1hdGNoZWQgYWdhaW4pCisJCSAqCisJCSAq ICBJZiBtYXRjaGluZyB3aXRoIGEgc3RyaW5nOgorCQkgKiAgICAtIGFsd2F5cyBub24tZ2xvYmFs IG1hdGNoLCBmaW5kIGZpcnN0IG9jY3VycmVuY2UKKwkJICoKKwkJICogIFdlIG5lZWQ6CisJCSAq ICAgIC0gVGhlIGNoYXJhY3RlciBvZmZzZXQgb2Ygc3RhcnQtb2YtbWF0Y2ggZm9yIHRoZSByZXBs YWNlciBmdW5jdGlvbgorCQkgKiAgICAtIFRoZSBieXRlIG9mZnNldHMgZm9yIHN0YXJ0LW9mLW1h dGNoIGFuZCBlbmQtb2YtbWF0Y2ggdG8gaW1wbGVtZW50CisJCSAqICAgICAgdGhlIHJlcGxhY2Vt ZW50IHZhbHVlcyAkJiwgJGAsIGFuZCAkJywgYW5kIHRvIGNvcHkgbm9uLW1hdGNoaW5nCisJCSAq ICAgICAgaW5wdXQgc3RyaW5nIHBvcnRpb25zIChpbmNsdWRpbmcgaGVhZGVyIGFuZCB0cmFpbGVy KSB2ZXJiYXRpbS4KKwkJICoKKwkJICogIE5PVEU6IHRoZSBFNS4xIHNwZWNpZmljYXRpb24gaXMg YSBiaXQgdmFndWUgaG93IHRoZSBSZWdFeHAgc2hvdWxkCisJCSAqICBiZWhhdmUgaW4gdGhlIHJl cGxhY2VtZW50IHByb2Nlc3M7IGUuZy4gaXMgbWF0Y2hpbmcgZG9uZSBmaXJzdCBmb3IKKwkJICog IGFsbCBtYXRjaGVzIChpbiB0aGUgZ2xvYmFsIFJlZ0V4cCBjYXNlKSBiZWZvcmUgYW55IHJlcGxh Y2VyIGNhbGxzCisJCSAqICBhcmUgbWFkZT8gIFNlZTogdGVzdC1iaS1zdHJpbmctcHJvdG8tcmVw bGFjZS5qcyBmb3IgZGlzY3Vzc2lvbi4KKwkJICovCisKKwkJRFVLX0FTU0VSVF9UT1AodGhyLCA0 KTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKwkJaWYgKGlzX3JlZ2V4 cCkgeworCQkJZHVrX2R1cF8wKHRocik7CisJCQlkdWtfZHVwXzIodGhyKTsKKwkJCWR1a19yZWdl eHBfbWF0Y2godGhyKTsgIC8qIFsgLi4uIHJlZ2V4cCBpbnB1dCBdIC0+IFsgcmVzX29iaiBdICov CisJCQlpZiAoIWR1a19pc19vYmplY3QodGhyLCAtMSkpIHsKKwkJCQlkdWtfcG9wKHRocik7CisJ CQkJYnJlYWs7CisJCQl9CisKKwkJCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwg RFVLX1NUUklEWF9JTkRFWCk7CisJCQlEVUtfQVNTRVJUKGR1a19pc19udW1iZXIodGhyLCAtMSkp OworCQkJbWF0Y2hfc3RhcnRfY29mZiA9IGR1a19nZXRfdWludCh0aHIsIC0xKTsKKwkJCWR1a19w b3AodGhyKTsKKworCQkJZHVrX2dldF9wcm9wX2luZGV4KHRociwgLTEsIDApOworCQkJRFVLX0FT U0VSVChkdWtfaXNfc3RyaW5nKHRociwgLTEpKTsKKwkJCWhfbWF0Y2ggPSBkdWtfa25vd25faHN0 cmluZyh0aHIsIC0xKTsKKwkJCWR1a19wb3AodGhyKTsgIC8qIGhfbWF0Y2ggaXMgYm9ycm93ZWQs IHJlbWFpbnMgcmVhY2hhYmxlIHRocm91Z2ggbWF0Y2hfb2JqICovCisKKwkJCWlmIChEVUtfSFNU UklOR19HRVRfQllURUxFTihoX21hdGNoKSA9PSAwKSB7CisJCQkJLyogVGhpcyBzaG91bGQgYmUg ZXF1aXZhbGVudCB0byBtYXRjaCgpIGFsZ29yaXRobSBzdGVwIDguZi5paWkuMjoKKwkJCQkgKiBk ZXRlY3QgYW4gZW1wdHkgbWF0Y2ggYW5kIGFsbG93IGl0LCBidXQgZG9uJ3QgYWxsb3cgaXQgdHdp Y2UuCisJCQkJICovCisJCQkJZHVrX3VpbnQzMl90IGxhc3RfaW5kZXg7CisKKwkJCQlkdWtfZ2V0 X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgMCwgRFVLX1NUUklEWF9MQVNUX0lOREVYKTsKKwkJCQls YXN0X2luZGV4ID0gKGR1a191aW50MzJfdCkgZHVrX2dldF91aW50KHRociwgLTEpOworCQkJCURV S19EREQoRFVLX0RERFBSSU5UKCJlbXB0eSBtYXRjaCwgYnVtcCBsYXN0SW5kZXg6ICVsZCAtPiAl bGQiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBsYXN0X2luZGV4LCAobG9uZykg KGxhc3RfaW5kZXggKyAxKSkpOworCQkJCWR1a19wb3AodGhyKTsKKwkJCQlkdWtfcHVzaF91aW50 KHRociwgKGR1a191aW50X3QpIChsYXN0X2luZGV4ICsgMSkpOworCQkJCWR1a19wdXRfcHJvcF9z dHJpZHhfc2hvcnQodGhyLCAwLCBEVUtfU1RSSURYX0xBU1RfSU5ERVgpOworCQkJfQorCisJCQlE VUtfQVNTRVJUKGR1a19nZXRfbGVuZ3RoKHRociwgLTEpIDw9IERVS19JTlRfTUFYKTsgIC8qIHN0 cmluZyBsaW1pdHMgKi8KKwkJCW1hdGNoX2NhcHMgPSAoZHVrX2ludF90KSBkdWtfZ2V0X2xlbmd0 aCh0aHIsIC0xKTsKKwkJfSBlbHNlIHsKKyNlbHNlICAvKiBEVUtfVVNFX1JFR0VYUF9TVVBQT1JU ICovCisJCXsgIC8qIHVuY29uZGl0aW9uYWxseSAqLworI2VuZGlmICAvKiBEVUtfVVNFX1JFR0VY UF9TVVBQT1JUICovCisJCQljb25zdCBkdWtfdWludDhfdCAqcF9zdGFydCwgKnBfZW5kLCAqcDsg ICAvKiBpbnB1dCBzdHJpbmcgc2NhbiAqLworCQkJY29uc3QgZHVrX3VpbnQ4X3QgKnFfc3RhcnQ7 ICAgICAgICAgICAgICAgLyogbWF0Y2ggc3RyaW5nICovCisJCQlkdWtfc2l6ZV90IHFfYmxlbjsK KworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKwkJCURVS19BU1NFUlQoIWlz X2dsb2JhbCk7ICAvKiBzaW5nbGUgbWF0Y2ggYWx3YXlzICovCisjZW5kaWYKKworCQkJcF9zdGFy dCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKGhfaW5wdXQpOworCQkJcF9lbmQgPSBwX3N0YXJ0ICsg RFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaF9pbnB1dCk7CisJCQlwID0gcF9zdGFydDsKKworCQkJ aF9zZWFyY2ggPSBkdWtfa25vd25faHN0cmluZyh0aHIsIDApOworCQkJcV9zdGFydCA9IERVS19I U1RSSU5HX0dFVF9EQVRBKGhfc2VhcmNoKTsKKwkJCXFfYmxlbiA9IChkdWtfc2l6ZV90KSBEVUtf SFNUUklOR19HRVRfQllURUxFTihoX3NlYXJjaCk7CisKKwkJCXBfZW5kIC09IHFfYmxlbjsgIC8q IGVuc3VyZSBmdWxsIG1lbWNtcCgpIGZpdHMgaW4gd2hpbGUgKi8KKworCQkJbWF0Y2hfc3RhcnRf Y29mZiA9IDA7CisKKwkJCXdoaWxlIChwIDw9IHBfZW5kKSB7CisJCQkJRFVLX0FTU0VSVChwICsg cV9ibGVuIDw9IERVS19IU1RSSU5HX0dFVF9EQVRBKGhfaW5wdXQpICsgRFVLX0hTVFJJTkdfR0VU X0JZVEVMRU4oaF9pbnB1dCkpOworCQkJCWlmIChkdWtfbWVtY21wKChjb25zdCB2b2lkICopIHAs IChjb25zdCB2b2lkICopIHFfc3RhcnQsIChzaXplX3QpIHFfYmxlbikgPT0gMCkgeworCQkJCQlk dWtfZHVwXzAodGhyKTsKKwkJCQkJaF9tYXRjaCA9IGR1a19rbm93bl9oc3RyaW5nKHRociwgLTEp OworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKwkJCQkJbWF0Y2hfY2FwcyA9 IDA7CisjZW5kaWYKKwkJCQkJZ290byBmb3VuZDsKKwkJCQl9CisKKwkJCQkvKiB0cmFjayB1dGYt OCBub24tY29udGludWF0aW9uIGJ5dGVzICovCisJCQkJaWYgKChwWzBdICYgMHhjMCkgIT0gMHg4 MCkgeworCQkJCQltYXRjaF9zdGFydF9jb2ZmKys7CisJCQkJfQorCQkJCXArKzsKKwkJCX0KKwor CQkJLyogbm90IGZvdW5kICovCisJCQlicmVhazsKKwkJfQorCSBmb3VuZDoKKworCQkvKiBzdGFj a1swXSA9IHNlYXJjaCB2YWx1ZQorCQkgKiBzdGFja1sxXSA9IHJlcGxhY2UgdmFsdWUKKwkJICog c3RhY2tbMl0gPSBpbnB1dCBzdHJpbmcKKwkJICogc3RhY2tbM10gPSByZXN1bHQgYnVmZmVyCisJ CSAqIHN0YWNrWzRdID0gcmVnZXhwIG1hdGNoIE9SIG1hdGNoIHN0cmluZworCQkgKi8KKworCQlt YXRjaF9zdGFydF9ib2ZmID0gKGR1a191aW50MzJfdCkgZHVrX2hlYXBfc3RyY2FjaGVfb2Zmc2V0 X2NoYXIyYnl0ZSh0aHIsIGhfaW5wdXQsIG1hdGNoX3N0YXJ0X2NvZmYpOworCisJCXRtcF9zeiA9 IChkdWtfc2l6ZV90KSAobWF0Y2hfc3RhcnRfYm9mZiAtIHByZXZfbWF0Y2hfZW5kX2JvZmYpOwor CQlEVUtfQldfV1JJVEVfRU5TVVJFX0JZVEVTKHRociwgYncsIERVS19IU1RSSU5HX0dFVF9EQVRB KGhfaW5wdXQpICsgcHJldl9tYXRjaF9lbmRfYm9mZiwgdG1wX3N6KTsKKworCQlwcmV2X21hdGNo X2VuZF9ib2ZmID0gbWF0Y2hfc3RhcnRfYm9mZiArIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGhf bWF0Y2gpOworCisJCWlmIChpc19yZXBsX2Z1bmMpIHsKKwkJCWR1a19pZHhfdCBpZHhfYXJnczsK KwkJCWR1a19oc3RyaW5nICpoX3JlcGw7CisKKwkJCS8qIHJlZ2V4cCByZXNfb2JqIGlzIGF0IGlu ZGV4IDQgKi8KKworCQkJZHVrX2R1cF8xKHRocik7CisJCQlpZHhfYXJncyA9IGR1a19nZXRfdG9w KHRocik7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisJCQlpZiAoaXNf cmVnZXhwKSB7CisJCQkJZHVrX2ludF90IGlkeDsKKwkJCQlkdWtfcmVxdWlyZV9zdGFjayh0aHIs IG1hdGNoX2NhcHMgKyAyKTsKKwkJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG1hdGNoX2NhcHM7IGlk eCsrKSB7CisJCQkJCS8qIG1hdGNoIGZvbGxvd2VkIGJ5IGNhcHR1cmUocykgKi8KKwkJCQkJZHVr X2dldF9wcm9wX2luZGV4KHRociwgNCwgKGR1a191YXJyaWR4X3QpIGlkeCk7CisJCQkJfQorCQkJ fSBlbHNlIHsKKyNlbHNlICAvKiBEVUtfVVNFX1JFR0VYUF9TVVBQT1JUICovCisJCQl7ICAvKiB1 bmNvbmRpdGlvbmFsbHkgKi8KKyNlbmRpZiAgLyogRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLwor CQkJCS8qIG1hdGNoID09IHNlYXJjaCBzdHJpbmcsIGJ5IGRlZmluaXRpb24gKi8KKwkJCQlkdWtf ZHVwXzAodGhyKTsKKwkJCX0KKwkJCWR1a19wdXNoX3VpbnQodGhyLCAoZHVrX3VpbnRfdCkgbWF0 Y2hfc3RhcnRfY29mZik7CisJCQlkdWtfZHVwXzIodGhyKTsKKworCQkJLyogWyAuLi4gcmVwbGFj ZXIgbWF0Y2ggW2NhcHR1cmVzXSBtYXRjaF9jaGFyX29mZnNldCBpbnB1dCBdICovCisKKwkJCWR1 a19jYWxsKHRociwgZHVrX2dldF90b3AodGhyKSAtIGlkeF9hcmdzKTsKKwkJCWhfcmVwbCA9IGR1 a190b19oc3RyaW5nX20xKHRocik7ICAvKiAtPiBbIC4uLiByZXBsX3ZhbHVlIF0gKi8KKwkJCURV S19BU1NFUlQoaF9yZXBsICE9IE5VTEwpOworCisJCQlEVUtfQldfV1JJVEVfRU5TVVJFX0hTVFJJ TkcodGhyLCBidywgaF9yZXBsKTsKKworCQkJZHVrX3BvcCh0aHIpOyAgLyogcmVwbF92YWx1ZSAq LworCQl9IGVsc2UgeworCQkJciA9IHJfc3RhcnQ7CisKKwkJCXdoaWxlIChyIDwgcl9lbmQpIHsK KwkJCQlkdWtfaW50X3QgY2gxOworCQkJCWR1a19pbnRfdCBjaDI7CisjaWYgZGVmaW5lZChEVUtf VVNFX1JFR0VYUF9TVVBQT1JUKQorCQkJCWR1a19pbnRfdCBjaDM7CisjZW5kaWYKKwkJCQlkdWtf c2l6ZV90IGxlZnQ7CisKKwkJCQljaDEgPSAqcisrOworCQkJCWlmIChjaDEgIT0gRFVLX0FTQ19E T0xMQVIpIHsKKwkJCQkJZ290byByZXBsX3dyaXRlOworCQkJCX0KKwkJCQlEVUtfQVNTRVJUKHIg PD0gcl9lbmQpOworCQkJCWxlZnQgPSAoZHVrX3NpemVfdCkgKHJfZW5kIC0gcik7CisKKwkJCQlp ZiAobGVmdCA8PSAwKSB7CisJCQkJCWdvdG8gcmVwbF93cml0ZTsKKwkJCQl9CisKKwkJCQljaDIg PSByWzBdOworCQkJCXN3aXRjaCAoY2gyKSB7CisJCQkJY2FzZSBEVUtfQVNDX0RPTExBUjogewor CQkJCQljaDEgPSAoMSA8PCA4KSArIERVS19BU0NfRE9MTEFSOworCQkJCQlnb3RvIHJlcGxfd3Jp dGU7CisJCQkJfQorCQkJCWNhc2UgRFVLX0FTQ19BTVA6IHsKKwkJCQkJRFVLX0JXX1dSSVRFX0VO U1VSRV9IU1RSSU5HKHRociwgYncsIGhfbWF0Y2gpOworCQkJCQlyKys7CisJCQkJCWNvbnRpbnVl OworCQkJCX0KKwkJCQljYXNlIERVS19BU0NfR1JBVkU6IHsKKwkJCQkJdG1wX3N6ID0gKGR1a19z aXplX3QpIG1hdGNoX3N0YXJ0X2JvZmY7CisJCQkJCURVS19CV19XUklURV9FTlNVUkVfQllURVMo dGhyLCBidywgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9pbnB1dCksIHRtcF9zeik7CisJCQkJCXIr KzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWNhc2UgRFVLX0FTQ19TSU5HTEVRVU9URTog eworCQkJCQlkdWtfdWludDMyX3QgbWF0Y2hfZW5kX2JvZmY7CisKKwkJCQkJLyogVXNlIG1hdGNo IGNoYXJsZW4gaW5zdGVhZCBvZiBieXRlbGVuLCBqdXN0IGluIGNhc2UgdGhlIGlucHV0IGFuZAor CQkJCQkgKiBtYXRjaCBjb2RlcG9pbnQgZW5jb2RpbmdzIHdvdWxkIGhhdmUgZGlmZmVyZW50IGxl bmd0aHMuCisJCQkJCSAqLworCQkJCQkvKiBYWFg6IGNoYXJsZW4gY29tcHV0ZWQgaGVyZSwgYW5k IGFsc28gaW4gY2hhcjJieXRlIGhlbHBlci4gKi8KKwkJCQkJbWF0Y2hfZW5kX2JvZmYgPSAoZHVr X3VpbnQzMl90KSBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJieXRlKHRociwKKwkJCQkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhfaW5wdXQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9zdGFydF9jb2ZmICsgKGR1 a191aW50X2Zhc3QzMl90KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoX21hdGNoKSk7CisKKwkJ CQkJdG1wX3N6ID0gKGR1a19zaXplX3QpIChEVUtfSFNUUklOR19HRVRfQllURUxFTihoX2lucHV0 KSAtIG1hdGNoX2VuZF9ib2ZmKTsKKwkJCQkJRFVLX0JXX1dSSVRFX0VOU1VSRV9CWVRFUyh0aHIs IGJ3LCBEVUtfSFNUUklOR19HRVRfREFUQShoX2lucHV0KSArIG1hdGNoX2VuZF9ib2ZmLCB0bXBf c3opOworCQkJCQlyKys7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlkZWZhdWx0OiB7Cisj aWYgZGVmaW5lZChEVUtfVVNFX1JFR0VYUF9TVVBQT1JUKQorCQkJCQlkdWtfaW50X3QgY2FwbnVt LCBjYXB0bXAsIGNhcGFkdjsKKwkJCQkJLyogWFhYOiBvcHRpb25hbCBjaGVjaywgbWF0Y2hfY2Fw cyBpcyB6ZXJvIGlmIG5vIHJlZ2V4cCwKKwkJCQkJICogc28gZG9sbGFyIHdpbGwgYmUgaW50ZXJw cmV0ZWQgbGl0ZXJhbGx5IGFueXdheS4KKwkJCQkJICovCisKKwkJCQkJaWYgKCFpc19yZWdleHAp IHsKKwkJCQkJCWdvdG8gcmVwbF93cml0ZTsKKwkJCQkJfQorCisJCQkJCWlmICghKGNoMiA+PSBE VUtfQVNDXzAgJiYgY2gyIDw9IERVS19BU0NfOSkpIHsKKwkJCQkJCWdvdG8gcmVwbF93cml0ZTsK KwkJCQkJfQorCQkJCQljYXBudW0gPSBjaDIgLSBEVUtfQVNDXzA7CisJCQkJCWNhcGFkdiA9IDE7 CisKKwkJCQkJaWYgKGxlZnQgPj0gMikgeworCQkJCQkJY2gzID0gclsxXTsKKwkJCQkJCWlmIChj aDMgPj0gRFVLX0FTQ18wICYmIGNoMyA8PSBEVUtfQVNDXzkpIHsKKwkJCQkJCQljYXB0bXAgPSBj YXBudW0gKiAxMCArIChjaDMgLSBEVUtfQVNDXzApOworCQkJCQkJCWlmIChjYXB0bXAgPCBtYXRj aF9jYXBzKSB7CisJCQkJCQkJCWNhcG51bSA9IGNhcHRtcDsKKwkJCQkJCQkJY2FwYWR2ID0gMjsK KwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoY2FwbnVtID4gMCAmJiBjYXBu dW0gPCBtYXRjaF9jYXBzKSB7CisJCQkJCQlEVUtfQVNTRVJUKGlzX3JlZ2V4cCAhPSAwKTsgIC8q IG1hdGNoX2NhcHMgPT0gMCB3aXRob3V0IHJlZ2V4cHMgKi8KKworCQkJCQkJLyogcmVnZXhwIHJl c19vYmogaXMgYXQgb2Zmc2V0IDQgKi8KKwkJCQkJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIsIDQs IChkdWtfdWFycmlkeF90KSBjYXBudW0pOworCQkJCQkJaWYgKGR1a19pc19zdHJpbmcodGhyLCAt MSkpIHsKKwkJCQkJCQlkdWtfaHN0cmluZyAqaF90bXBfc3RyOworCisJCQkJCQkJaF90bXBfc3Ry ID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCAtMSk7CisKKwkJCQkJCQlEVUtfQldfV1JJVEVfRU5T VVJFX0hTVFJJTkcodGhyLCBidywgaF90bXBfc3RyKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJ LyogdW5kZWZpbmVkIC0+IHNraXAgKHJlcGxhY2VkIHdpdGggZW1wdHkpICovCisJCQkJCQl9CisJ CQkJCQlkdWtfcG9wKHRocik7CisJCQkJCQlyICs9IGNhcGFkdjsKKwkJCQkJCWNvbnRpbnVlOwor CQkJCQl9IGVsc2UgeworCQkJCQkJZ290byByZXBsX3dyaXRlOworCQkJCQl9CisjZWxzZSAgLyog RFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCQkJCQlnb3RvIHJlcGxfd3JpdGU7ICAvKiB1bmNv bmRpdGlvbmFsbHkgKi8KKyNlbmRpZiAgLyogRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCQkJ CX0gIC8qIGRlZmF1bHQgY2FzZSAqLworCQkJCX0gIC8qIHN3aXRjaCAoY2gyKSAqLworCisJCQkg cmVwbF93cml0ZToKKwkJCQkvKiBjaDEgPSAocl9pbmNyZW1lbnQgPDwgOCkgKyBieXRlICovCisK KwkJCQlEVUtfQldfV1JJVEVfRU5TVVJFX1U4KHRociwgYncsIChkdWtfdWludDhfdCkgKGNoMSAm IDB4ZmYpKTsKKwkJCQlyICs9IGNoMSA+PiA4OworCQkJfSAgLyogd2hpbGUgcmVwbCAqLworCQl9 ICAvKiBpZiAoaXNfcmVwbF9mdW5jKSAqLworCisJCWR1a19wb3AodGhyKTsgIC8qIHBvcCByZWdl eHAgcmVzX29iaiBvciBtYXRjaCBzdHJpbmcgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdF WFBfU1VQUE9SVCkKKwkJaWYgKCFpc19nbG9iYWwpIHsKKyNlbHNlCisJCXsgIC8qIHVuY29uZGl0 aW9uYWxseTsgaXNfZ2xvYmFsPT0wICovCisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJfQorCisJ LyogdHJhaWxlciAqLworCXRtcF9zeiA9IChkdWtfc2l6ZV90KSAoRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oaF9pbnB1dCkgLSBwcmV2X21hdGNoX2VuZF9ib2ZmKTsKKwlEVUtfQldfV1JJVEVfRU5T VVJFX0JZVEVTKHRociwgYncsIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfaW5wdXQpICsgcHJldl9t YXRjaF9lbmRfYm9mZiwgdG1wX3N6KTsKKworCURVS19BU1NFUlRfVE9QKHRociwgNCk7CisJRFVL X0JXX0NPTVBBQ1QodGhyLCBidyk7CisJKHZvaWQpIGR1a19idWZmZXJfdG9fc3RyaW5nKHRociwg LTEpOyAgLyogU2FmZSBpZiBpbnB1dHMgYXJlIHNhZmUuICovCisJcmV0dXJuIDE7Cit9CisKKy8q CisgKiAgc3BsaXQoKQorICovCisKKy8qIFhYWDogdmVyeSBtZXNzeSBub3csIGJ1dCB3b3Jrczsg Y2xlYW4gdXAsIHJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIChub21pbWFsbHkKKyAqIHVzZWQgc28g Y29tcGlsZXIgZG9lc24ndCBjb21wbGFpbikuCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRf dCBkdWtfYmlfc3RyaW5nX3Byb3RvdHlwZV9zcGxpdChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVr X2hzdHJpbmcgKmhfaW5wdXQ7CisJZHVrX2hzdHJpbmcgKmhfc2VwOworCWR1a191aW50MzJfdCBs aW1pdDsKKwlkdWtfdWludDMyX3QgYXJyX2lkeDsKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQ X1NVUFBPUlQpCisJZHVrX2Jvb2xfdCBpc19yZWdleHA7CisjZW5kaWYKKwlkdWtfYm9vbF90IG1h dGNoZWQ7ICAvKiBzZXQgdG8gMSBpZiBhbnkgbWF0Y2ggZXhpc3RzIChuZWVkZWQgZm9yIGVtcHR5 IGlucHV0IHNwZWNpYWwgY2FzZSkgKi8KKwlkdWtfdWludDMyX3QgcHJldl9tYXRjaF9lbmRfY29m ZiwgcHJldl9tYXRjaF9lbmRfYm9mZjsKKwlkdWtfdWludDMyX3QgbWF0Y2hfc3RhcnRfYm9mZiwg bWF0Y2hfc3RhcnRfY29mZjsKKwlkdWtfdWludDMyX3QgbWF0Y2hfZW5kX2JvZmYsIG1hdGNoX2Vu ZF9jb2ZmOworCisJaF9pbnB1dCA9IGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZyh0 aHIpOworCURVS19BU1NFUlQoaF9pbnB1dCAhPSBOVUxMKTsKKworCWR1a19wdXNoX2FycmF5KHRo cik7CisKKwlpZiAoZHVrX2lzX3VuZGVmaW5lZCh0aHIsIDEpKSB7CisJCWxpbWl0ID0gMHhmZmZm ZmZmZlVMOworCX0gZWxzZSB7CisJCWxpbWl0ID0gZHVrX3RvX3VpbnQzMih0aHIsIDEpOworCX0K KworCWlmIChsaW1pdCA9PSAwKSB7CisJCXJldHVybiAxOworCX0KKworCS8qIElmIHRoZSBzZXBh cmF0b3IgaXMgYSBSZWdFeHAsIG1ha2UgYSAiY2xvbmUiIG9mIGl0LiAgVGhlIHNwZWNpZmljYXRp b24KKwkgKiBhbGdvcml0aG0gY2FsbHMgW1tNYXRjaF1dIGRpcmVjdGx5IGZvciBzcGVjaWZpYyBp bmRpY2VzOyB3ZSBlbXVsYXRlIHRoaXMKKwkgKiBieSB0d2Vha2luZyBsYXN0SW5kZXggYW5kIHVz aW5nIGEgImZvcmNlIGdsb2JhbCIgdmFyaWFudCBvZiBkdWtfcmVnZXhwX21hdGNoKCkKKwkgKiB3 aGljaCB3aWxsIHVzZSBnbG9iYWwtc3R5bGUgbWF0Y2hpbmcgZXZlbiB3aGVuIHRoZSBSZWdFeHAg aXRzZWxmIGlzIG5vbi1nbG9iYWwuCisJICovCisKKwlpZiAoZHVrX2lzX3VuZGVmaW5lZCh0aHIs IDApKSB7CisJCS8qIFRoZSBzcGVjIGFsZ29yaXRobSBmaXJzdCBkb2VzICJSID0gVG9TdHJpbmco c2VwYXJhdG9yKSIgYmVmb3JlIGNoZWNraW5nCisJCSAqIHdoZXRoZXIgc2VwYXJhdG9yIGlzIHVu ZGVmaW5lZC4gIFNpbmNlIHRoaXMgaXMgc2lkZSBlZmZlY3QgZnJlZSwgd2UgY2FuCisJCSAqIHNr aXAgdGhlIFRvU3RyaW5nKCkgaGVyZS4KKwkJICovCisJCWR1a19kdXBfMih0aHIpOworCQlkdWtf cHV0X3Byb3BfaW5kZXgodGhyLCAzLCAwKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChkdWtf Z2V0X2hvYmplY3Rfd2l0aF9jbGFzcyh0aHIsIDAsIERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCkg IT0gTlVMTCkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKwkJZHVrX3B1 c2hfaG9iamVjdF9iaWR4KHRociwgRFVLX0JJRFhfUkVHRVhQX0NPTlNUUlVDVE9SKTsKKwkJZHVr X2R1cF8wKHRocik7CisJCWR1a19uZXcodGhyLCAxKTsgIC8qIFsgLi4uIFJlZ0V4cCB2YWwgXSAt PiBbIC4uLiByZXMgXSAqLworCQlkdWtfcmVwbGFjZSh0aHIsIDApOworCQkvKiBsYXN0SW5kZXgg aXMgaW5pdGlhbGl6ZWQgdG8gemVybyBieSBuZXcgUmVnRXhwKCkgKi8KKwkJaXNfcmVnZXhwID0g MTsKKyNlbHNlCisJCURVS19EQ0VSUk9SX1VOU1VQUE9SVEVEKHRocik7CisjZW5kaWYKKwl9IGVs c2UgeworCQlkdWtfdG9fc3RyaW5nKHRociwgMCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFR0VY UF9TVVBQT1JUKQorCQlpc19yZWdleHAgPSAwOworI2VuZGlmCisJfQorCisJLyogc3RhY2tbMF0g PSBzZXBhcmF0b3IgKHN0cmluZyBvciByZWdleHApCisJICogc3RhY2tbMV0gPSBsaW1pdAorCSAq IHN0YWNrWzJdID0gaW5wdXQgc3RyaW5nCisJICogc3RhY2tbM10gPSByZXN1bHQgYXJyYXkKKwkg Ki8KKworCXByZXZfbWF0Y2hfZW5kX2JvZmYgPSAwOworCXByZXZfbWF0Y2hfZW5kX2NvZmYgPSAw OworCWFycl9pZHggPSAwOworCW1hdGNoZWQgPSAwOworCisJZm9yICg7OykgeworCQkvKgorCQkg KiAgVGhlIHNwZWNpZmljYXRpb24gdXNlcyBSZWdFeHAgW1tNYXRjaF1dIHRvIGF0dGVtcHQgbWF0 Y2ggYXQgc3BlY2lmaWMKKwkJICogIG9mZnNldHMuICBXZSBkb24ndCBoYXZlIHN1Y2ggYSBwcmlt aXRpdmUsIHNvIHdlIHVzZSBhbiBhY3R1YWwgUmVnRXhwCisJCSAqICBhbmQgdHdlYWsgbGFzdElu ZGV4LiAgU2luY2UgdGhlIFJlZ0V4cCBtYXkgYmUgbm9uLWdsb2JhbCwgd2UgdXNlIGEKKwkJICog IHNwZWNpYWwgdmFyaWFudCB3aGljaCBmb3JjZXMgZ2xvYmFsLWxpa2UgYmVoYXZpb3IgZm9yIG1h dGNoaW5nLgorCQkgKi8KKworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDQpOworCisjaWYgZGVmaW5l ZChEVUtfVVNFX1JFR0VYUF9TVVBQT1JUKQorCQlpZiAoaXNfcmVnZXhwKSB7CisJCQlkdWtfZHVw XzAodGhyKTsKKwkJCWR1a19kdXBfMih0aHIpOworCQkJZHVrX3JlZ2V4cF9tYXRjaF9mb3JjZV9n bG9iYWwodGhyKTsgIC8qIFsgLi4uIHJlZ2V4cCBpbnB1dCBdIC0+IFsgcmVzX29iaiBdICovCisJ CQlpZiAoIWR1a19pc19vYmplY3QodGhyLCAtMSkpIHsKKwkJCQlkdWtfcG9wKHRocik7CisJCQkJ YnJlYWs7CisJCQl9CisJCQltYXRjaGVkID0gMTsKKworCQkJZHVrX2dldF9wcm9wX3N0cmlkeF9z aG9ydCh0aHIsIC0xLCBEVUtfU1RSSURYX0lOREVYKTsKKwkJCURVS19BU1NFUlQoZHVrX2lzX251 bWJlcih0aHIsIC0xKSk7CisJCQltYXRjaF9zdGFydF9jb2ZmID0gZHVrX2dldF91aW50KHRociwg LTEpOworCQkJbWF0Y2hfc3RhcnRfYm9mZiA9IChkdWtfdWludDMyX3QpIGR1a19oZWFwX3N0cmNh Y2hlX29mZnNldF9jaGFyMmJ5dGUodGhyLCBoX2lucHV0LCBtYXRjaF9zdGFydF9jb2ZmKTsKKwkJ CWR1a19wb3AodGhyKTsKKworCQkJaWYgKG1hdGNoX3N0YXJ0X2NvZmYgPT0gRFVLX0hTVFJJTkdf R0VUX0NIQVJMRU4oaF9pbnB1dCkpIHsKKwkJCQkvKiBkb24ndCBhbGxvdyBhbiBlbXB0eSBtYXRj aCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KKwkJCQlkdWtfcG9wKHRocik7CisJCQkJYnJl YWs7CisJCQl9CisKKwkJCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAwLCBEVUtfU1RS SURYX0xBU1RfSU5ERVgpOworCQkJRFVLX0FTU0VSVChkdWtfaXNfbnVtYmVyKHRociwgLTEpKTsK KwkJCW1hdGNoX2VuZF9jb2ZmID0gZHVrX2dldF91aW50KHRociwgLTEpOworCQkJbWF0Y2hfZW5k X2JvZmYgPSAoZHVrX3VpbnQzMl90KSBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJieXRl KHRociwgaF9pbnB1dCwgbWF0Y2hfZW5kX2NvZmYpOworCQkJZHVrX3BvcCh0aHIpOworCisJCQkv KiBlbXB0eSBtYXRjaCAtPiBidW1wIGFuZCBjb250aW51ZSAqLworCQkJaWYgKHByZXZfbWF0Y2hf ZW5kX2JvZmYgPT0gbWF0Y2hfZW5kX2JvZmYpIHsKKwkJCQlkdWtfcHVzaF91aW50KHRociwgKGR1 a191aW50X3QpIChtYXRjaF9lbmRfY29mZiArIDEpKTsKKwkJCQlkdWtfcHV0X3Byb3Bfc3RyaWR4 X3Nob3J0KHRociwgMCwgRFVLX1NUUklEWF9MQVNUX0lOREVYKTsKKwkJCQlkdWtfcG9wKHRocik7 CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSB7CisjZWxzZSAgLyogRFVLX1VTRV9SRUdF WFBfU1VQUE9SVCAqLworCQl7ICAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKyNlbmRpZiAgLyogRFVL X1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCQkJY29uc3QgZHVrX3VpbnQ4X3QgKnBfc3RhcnQsICpw X2VuZCwgKnA7ICAgLyogaW5wdXQgc3RyaW5nIHNjYW4gKi8KKwkJCWNvbnN0IGR1a191aW50OF90 ICpxX3N0YXJ0OyAgICAgICAgICAgICAgIC8qIG1hdGNoIHN0cmluZyAqLworCQkJZHVrX3NpemVf dCBxX2JsZW4sIHFfY2xlbjsKKworCQkJcF9zdGFydCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKGhf aW5wdXQpOworCQkJcF9lbmQgPSBwX3N0YXJ0ICsgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaF9p bnB1dCk7CisJCQlwID0gcF9zdGFydCArIHByZXZfbWF0Y2hfZW5kX2JvZmY7CisKKwkJCWhfc2Vw ID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCAwKTsgIC8qIHN5bWJvbCBhbHJlYWR5IHJlamVjdGVk IGFib3ZlICovCisJCQlxX3N0YXJ0ID0gRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9zZXApOworCQkJ cV9ibGVuID0gKGR1a19zaXplX3QpIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGhfc2VwKTsKKwkJ CXFfY2xlbiA9IChkdWtfc2l6ZV90KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoX3NlcCk7CisK KwkJCXBfZW5kIC09IHFfYmxlbjsgIC8qIGVuc3VyZSBmdWxsIG1lbWNtcCgpIGZpdHMgaW4gd2hp bGUgKi8KKworCQkJbWF0Y2hfc3RhcnRfY29mZiA9IHByZXZfbWF0Y2hfZW5kX2NvZmY7CisKKwkJ CWlmIChxX2JsZW4gPT0gMCkgeworCQkJCS8qIEhhbmRsZSBlbXB0eSBzZXBhcmF0b3IgY2FzZTog aXQgd2lsbCBhbHdheXMgbWF0Y2gsIGFuZCBhbHdheXMKKwkJCQkgKiB0cmlnZ2VycyB0aGUgY2hl Y2sgaW4gc3RlcCAxMy5jLmlpaSBpbml0aWFsbHkuICBOb3RlIHRoYXQgd2UKKwkJCQkgKiBtdXN0 IHNraXAgdG8gZWl0aGVyIGVuZCBvZiBzdHJpbmcgb3Igc3RhcnQgb2YgZmlyc3QgY29kZXBvaW50 LAorCQkJCSAqIHNraXBwaW5nIG92ZXIgYW55IGNvbnRpbnVhdGlvbiBieXRlcyEKKwkJCQkgKgor CQkJCSAqIERvbid0IGFsbG93IGFuIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhdCB0aGUgZW5kIG9m IHRoZSBpbnB1dC4KKwkJCQkgKi8KKworCQkJCW1hdGNoZWQgPSAxOyAgLyogZW1wdHkgc2VwYXJh dG9yIGNhbiBhbHdheXMgbWF0Y2ggKi8KKworCQkJCW1hdGNoX3N0YXJ0X2NvZmYrKzsKKwkJCQlw Kys7CisJCQkJd2hpbGUgKHAgPCBwX2VuZCkgeworCQkJCQlpZiAoKHBbMF0gJiAweGMwKSAhPSAw eDgwKSB7CisJCQkJCQlnb3RvIGZvdW5kOworCQkJCQl9CisJCQkJCXArKzsKKwkJCQl9CisJCQkJ Z290byBub3RfZm91bmQ7CisJCQl9CisKKwkJCURVS19BU1NFUlQocV9ibGVuID4gMCAmJiBxX2Ns ZW4gPiAwKTsKKwkJCXdoaWxlIChwIDw9IHBfZW5kKSB7CisJCQkJRFVLX0FTU0VSVChwICsgcV9i bGVuIDw9IERVS19IU1RSSU5HX0dFVF9EQVRBKGhfaW5wdXQpICsgRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oaF9pbnB1dCkpOworCQkJCURVS19BU1NFUlQocV9ibGVuID4gMCk7ICAvKiBubyBpc3N1 ZXMgd2l0aCBlbXB0eSBtZW1jbXAoKSAqLworCQkJCWlmIChkdWtfbWVtY21wKChjb25zdCB2b2lk ICopIHAsIChjb25zdCB2b2lkICopIHFfc3RhcnQsIChzaXplX3QpIHFfYmxlbikgPT0gMCkgewor CQkJCQkvKiBuZXZlciBhbiBlbXB0eSBtYXRjaCwgc28gc3RlcCAxMy5jLmlpaSBjYW4ndCBiZSB0 cmlnZ2VyZWQgKi8KKwkJCQkJZ290byBmb3VuZDsKKwkJCQl9CisKKwkJCQkvKiB0cmFjayB1dGYt OCBub24tY29udGludWF0aW9uIGJ5dGVzICovCisJCQkJaWYgKChwWzBdICYgMHhjMCkgIT0gMHg4 MCkgeworCQkJCQltYXRjaF9zdGFydF9jb2ZmKys7CisJCQkJfQorCQkJCXArKzsKKwkJCX0KKwor CQkgbm90X2ZvdW5kOgorCQkJLyogbm90IGZvdW5kICovCisJCQlicmVhazsKKworCQkgZm91bmQ6 CisJCQltYXRjaGVkID0gMTsKKwkJCW1hdGNoX3N0YXJ0X2JvZmYgPSAoZHVrX3VpbnQzMl90KSAo cCAtIHBfc3RhcnQpOworCQkJbWF0Y2hfZW5kX2NvZmYgPSAoZHVrX3VpbnQzMl90KSAobWF0Y2hf c3RhcnRfY29mZiArIHFfY2xlbik7ICAvKiBjb25zdHJhaW5lZCBieSBzdHJpbmcgbGVuZ3RoICov CisJCQltYXRjaF9lbmRfYm9mZiA9IChkdWtfdWludDMyX3QpIChtYXRjaF9zdGFydF9ib2ZmICsg cV9ibGVuKTsgIC8qIGRpdHRvICovCisKKwkJCS8qIGVtcHR5IG1hdGNoIChtYXkgaGFwcGVuIHdp dGggZW1wdHkgc2VwYXJhdG9yKSAtPiBidW1wIGFuZCBjb250aW51ZSAqLworCQkJaWYgKHByZXZf bWF0Y2hfZW5kX2JvZmYgPT0gbWF0Y2hfZW5kX2JvZmYpIHsKKwkJCQlwcmV2X21hdGNoX2VuZF9i b2ZmKys7CisJCQkJcHJldl9tYXRjaF9lbmRfY29mZisrOworCQkJCWNvbnRpbnVlOworCQkJfQor CQl9ICAvKiBpZiAoaXNfcmVnZXhwKSAqLworCisJCS8qIHN0YWNrWzBdID0gc2VwYXJhdG9yIChz dHJpbmcgb3IgcmVnZXhwKQorCQkgKiBzdGFja1sxXSA9IGxpbWl0CisJCSAqIHN0YWNrWzJdID0g aW5wdXQgc3RyaW5nCisJCSAqIHN0YWNrWzNdID0gcmVzdWx0IGFycmF5CisJCSAqIHN0YWNrWzRd ID0gcmVnZXhwIHJlc19vYmogKGlmIGlzX3JlZ2V4cCkKKwkJICovCisKKwkJRFVLX0RERChEVUtf REREUFJJTlQoInNwbGl0OyBtYXRjaF9zdGFydCBiPSVsZCxjPSVsZCwgbWF0Y2hfZW5kIGI9JWxk LGM9JWxkLCBwcmV2X2VuZCBiPSVsZCxjPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBtYXRjaF9zdGFydF9ib2ZmLCAobG9uZykgbWF0Y2hfc3RhcnRfY29mZiwKKwkJICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIG1hdGNoX2VuZF9ib2ZmLCAobG9uZykgbWF0Y2hfZW5kX2Nv ZmYsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwcmV2X21hdGNoX2VuZF9ib2ZmLCAo bG9uZykgcHJldl9tYXRjaF9lbmRfY29mZikpOworCisJCWR1a19wdXNoX2xzdHJpbmcodGhyLAor CQkgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIChEVUtfSFNUUklOR19HRVRfREFUQSho X2lucHV0KSArIHByZXZfbWF0Y2hfZW5kX2JvZmYpLAorCQkgICAgICAgICAgICAgICAgIChkdWtf c2l6ZV90KSAobWF0Y2hfc3RhcnRfYm9mZiAtIHByZXZfbWF0Y2hfZW5kX2JvZmYpKTsKKwkJZHVr X3B1dF9wcm9wX2luZGV4KHRociwgMywgYXJyX2lkeCk7CisJCWFycl9pZHgrKzsKKwkJaWYgKGFy cl9pZHggPj0gbGltaXQpIHsKKwkJCWdvdG8gaGl0X2xpbWl0OworCQl9CisKKyNpZiBkZWZpbmVk KERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisJCWlmIChpc19yZWdleHApIHsKKwkJCWR1a19zaXpl X3QgaSwgbGVuOworCisJCQlsZW4gPSBkdWtfZ2V0X2xlbmd0aCh0aHIsIDQpOworCQkJZm9yIChp ID0gMTsgaSA8IGxlbjsgaSsrKSB7CisJCQkJRFVLX0FTU0VSVChpIDw9IERVS19VQVJSSURYX01B WCk7ICAvKiBjYW5ub3QgaGF2ZSA+NEcgY2FwdHVyZXMgKi8KKwkJCQlkdWtfZ2V0X3Byb3BfaW5k ZXgodGhyLCA0LCAoZHVrX3VhcnJpZHhfdCkgaSk7CisJCQkJZHVrX3B1dF9wcm9wX2luZGV4KHRo ciwgMywgYXJyX2lkeCk7CisJCQkJYXJyX2lkeCsrOworCQkJCWlmIChhcnJfaWR4ID49IGxpbWl0 KSB7CisJCQkJCWdvdG8gaGl0X2xpbWl0OworCQkJCX0KKwkJCX0KKworCQkJZHVrX3BvcCh0aHIp OworCQkJLyogbGFzdEluZGV4IGFscmVhZHkgc2V0IHVwIGZvciBuZXh0IG1hdGNoICovCisJCX0g ZWxzZSB7CisjZWxzZSAgLyogRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCQl7ICAvKiB1bmNv bmRpdGlvbmFsbHkgKi8KKyNlbmRpZiAgLyogRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCQkJ Lyogbm8gYWN0aW9uICovCisJCX0KKworCQlwcmV2X21hdGNoX2VuZF9ib2ZmID0gbWF0Y2hfZW5k X2JvZmY7CisJCXByZXZfbWF0Y2hfZW5kX2NvZmYgPSBtYXRjaF9lbmRfY29mZjsKKwkJY29udGlu dWU7CisJfSAgLyogZm9yICovCisKKwkvKiBDb21iaW5lZCBzdGVwIDExIChlbXB0eSBzdHJpbmcg c3BlY2lhbCBjYXNlKSBhbmQgMTQtMTUuICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgic3Bs aXQgdHJhaWxlcjsgcHJldl9lbmQgYj0lbGQsYz0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSBwcmV2X21hdGNoX2VuZF9ib2ZmLCAobG9uZykgcHJldl9tYXRjaF9lbmRfY29mZikp OworCisJaWYgKERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGhfaW5wdXQpID4gMCB8fCAhbWF0Y2hl ZCkgeworCQkvKiBBZGQgdHJhaWxlciBpZjoKKwkJICogICBhKSBub24tZW1wdHkgaW5wdXQKKwkJ ICogICBiKSBlbXB0eSBpbnB1dCBhbmQgbm8gKHplcm8gc2l6ZSkgbWF0Y2ggZm91bmQgKHN0ZXAg MTEpCisJCSAqLworCisJCWR1a19wdXNoX2xzdHJpbmcodGhyLAorCQkgICAgICAgICAgICAgICAg IChjb25zdCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfaW5wdXQpICsgcHJldl9tYXRj aF9lbmRfYm9mZiwKKwkJICAgICAgICAgICAgICAgICAoZHVrX3NpemVfdCkgKERVS19IU1RSSU5H X0dFVF9CWVRFTEVOKGhfaW5wdXQpIC0gcHJldl9tYXRjaF9lbmRfYm9mZikpOworCQlkdWtfcHV0 X3Byb3BfaW5kZXgodGhyLCAzLCBhcnJfaWR4KTsKKwkJLyogTm8gYXJyX2lkeCB1cGRhdGUgb3Ig bGltaXQgY2hlY2sgKi8KKwl9CisKKwlyZXR1cm4gMTsKKworIGhpdF9saW1pdDoKKyNpZiBkZWZp bmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisJaWYgKGlzX3JlZ2V4cCkgeworCQlkdWtfcG9w KHRocik7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICBWYXJpb3VzCisg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKK0RVS19MT0NBTCB2b2lk IGR1a19fdG9fcmVnZXhwX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4LCBk dWtfYm9vbF90IGZvcmNlX25ldykgeworCWR1a19ob2JqZWN0ICpoOworCisJLyogU2hhcmVkIGhl bHBlciBmb3IgbWF0Y2goKSBzdGVwcyAzLTQsIHNlYXJjaCgpIHN0ZXBzIDMtNC4gKi8KKworCURV S19BU1NFUlQoaWR4ID49IDApOworCisJaWYgKGZvcmNlX25ldykgeworCQlnb3RvIGRvX25ldzsK Kwl9CisKKwloID0gZHVrX2dldF9ob2JqZWN0X3dpdGhfY2xhc3ModGhyLCBpZHgsIERVS19IT0JK RUNUX0NMQVNTX1JFR0VYUCk7CisJaWYgKCFoKSB7CisJCWdvdG8gZG9fbmV3OworCX0KKwlyZXR1 cm47CisKKyBkb19uZXc6CisJZHVrX3B1c2hfaG9iamVjdF9iaWR4KHRociwgRFVLX0JJRFhfUkVH RVhQX0NPTlNUUlVDVE9SKTsKKwlkdWtfZHVwKHRociwgaWR4KTsKKwlkdWtfbmV3KHRociwgMSk7 ICAvKiBbIC4uLiBSZWdFeHAgdmFsIF0gLT4gWyAuLi4gcmVzIF0gKi8KKwlkdWtfcmVwbGFjZSh0 aHIsIGlkeCk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfUkVHRVhQX1NVUFBPUlQgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfc2VhcmNoKGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiBF YXNpZXN0IHdheSB0byBpbXBsZW1lbnQgdGhlIHNlYXJjaCByZXF1aXJlZCBieSB0aGUgc3BlY2lm aWNhdGlvbgorCSAqIGlzIHRvIGRvIGEgUmVnRXhwIHRlc3QoKSB3aXRoIGxhc3RJbmRleCBmb3Jj ZWQgdG8gemVyby4gIFRvIGF2b2lkCisJICogc2lkZSBlZmZlY3RzIG9uIHRoZSBhcmd1bWVudCwg ImNsb25lIiB0aGUgUmVnRXhwIGlmIGEgUmVnRXhwIHdhcworCSAqIGdpdmVuIGFzIGlucHV0Lgor CSAqCisJICogVGhlIGdsb2JhbCBmbGFnIG9mIHRoZSBSZWdFeHAgc2hvdWxkIGJlIGlnbm9yZWQ7 IHNldHRpbmcgbGFzdEluZGV4CisJICogdG8gemVybyAod2hpY2ggaGFwcGVucyB3aGVuICJjbG9u aW5nIiB0aGUgUmVnRXhwKSBzaG91bGQgaGF2ZSBhbgorCSAqIGVxdWl2YWxlbnQgZWZmZWN0Lgor CSAqLworCisJRFVLX0FTU0VSVF9UT1AodGhyLCAxKTsKKwkodm9pZCkgZHVrX3B1c2hfdGhpc19j b2VyY2libGVfdG9fc3RyaW5nKHRocik7ICAvKiBhdCBpbmRleCAxICovCisJZHVrX190b19yZWdl eHBfaGVscGVyKHRociwgMCAvKmluZGV4Ki8sIDEgLypmb3JjZV9uZXcqLyk7CisKKwkvKiBzdGFj a1swXSA9IHJlZ2V4cAorCSAqIHN0YWNrWzFdID0gc3RyaW5nCisJICovCisKKwkvKiBBdm9pZCB1 c2luZyBSZWdFeHAucHJvdG90eXBlIG1ldGhvZHMsIGFzIHRoZXkncmUgd3JpdGFibGUgYW5kCisJ ICogY29uZmlndXJhYmxlIGFuZCBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuCisJICovCisKKwlkdWtf ZHVwXzAodGhyKTsKKwlkdWtfZHVwXzEodGhyKTsgIC8qIFsgLi4uIHJlX29iaiBpbnB1dCBdICov CisJZHVrX3JlZ2V4cF9tYXRjaCh0aHIpOyAgLyogLT4gWyAuLi4gcmVzX29iaiBdICovCisKKwlp ZiAoIWR1a19pc19vYmplY3QodGhyLCAtMSkpIHsKKwkJZHVrX3B1c2hfaW50KHRociwgLTEpOwor CQlyZXR1cm4gMTsKKwl9CisKKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTEsIERV S19TVFJJRFhfSU5ERVgpOworCURVS19BU1NFUlQoZHVrX2lzX251bWJlcih0aHIsIC0xKSk7CisJ cmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfUkVHRVhQX1NVUFBPUlQgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3Qg ZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfbWF0Y2goZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19i b29sX3QgZ2xvYmFsOworCWR1a19pbnRfdCBwcmV2X2xhc3RfaW5kZXg7CisJZHVrX2ludF90IHRo aXNfaW5kZXg7CisJZHVrX2ludF90IGFycl9pZHg7CisKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDEp OworCSh2b2lkKSBkdWtfcHVzaF90aGlzX2NvZXJjaWJsZV90b19zdHJpbmcodGhyKTsKKwlkdWtf X3RvX3JlZ2V4cF9oZWxwZXIodGhyLCAwIC8qaW5kZXgqLywgMCAvKmZvcmNlX25ldyovKTsKKwln bG9iYWwgPSBkdWtfZ2V0X3Byb3Bfc3RyaWR4X2Jvb2xlYW4odGhyLCAwLCBEVUtfU1RSSURYX0dM T0JBTCwgTlVMTCk7CisJRFVLX0FTU0VSVF9UT1AodGhyLCAyKTsKKworCS8qIHN0YWNrWzBdID0g cmVnZXhwCisJICogc3RhY2tbMV0gPSBzdHJpbmcKKwkgKi8KKworCWlmICghZ2xvYmFsKSB7CisJ CWR1a19yZWdleHBfbWF0Y2godGhyKTsgIC8qIC0+IFsgcmVzX29iaiBdICovCisJCXJldHVybiAx OyAgLyogcmV0dXJuICdyZXNfb2JqJyAqLworCX0KKworCS8qIEdsb2JhbCBjYXNlIGlzIG1vcmUg Y29tcGxleC4gKi8KKworCS8qIFsgcmVnZXhwIHN0cmluZyBdICovCisKKwlkdWtfcHVzaF9pbnQo dGhyLCAwKTsKKwlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgMCwgRFVLX1NUUklEWF9M QVNUX0lOREVYKTsKKwlkdWtfcHVzaF9hcnJheSh0aHIpOworCisJLyogWyByZWdleHAgc3RyaW5n IHJlc19hcnIgXSAqLworCisJcHJldl9sYXN0X2luZGV4ID0gMDsKKwlhcnJfaWR4ID0gMDsKKwor CWZvciAoOzspIHsKKwkJRFVLX0FTU0VSVF9UT1AodGhyLCAzKTsKKworCQlkdWtfZHVwXzAodGhy KTsKKwkJZHVrX2R1cF8xKHRocik7CisJCWR1a19yZWdleHBfbWF0Y2godGhyKTsgIC8qIC0+IFsg Li4uIHJlZ2V4cCBzdHJpbmcgXSAtPiBbIC4uLiByZXNfb2JqIF0gKi8KKworCQlpZiAoIWR1a19p c19vYmplY3QodGhyLCAtMSkpIHsKKwkJCWR1a19wb3AodGhyKTsKKwkJCWJyZWFrOworCQl9CisK KwkJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIDAsIERVS19TVFJJRFhfTEFTVF9JTkRF WCk7CisJCURVS19BU1NFUlQoZHVrX2lzX251bWJlcih0aHIsIC0xKSk7CisJCXRoaXNfaW5kZXgg PSBkdWtfZ2V0X2ludCh0aHIsIC0xKTsKKwkJZHVrX3BvcCh0aHIpOworCisJCWlmICh0aGlzX2lu ZGV4ID09IHByZXZfbGFzdF9pbmRleCkgeworCQkJdGhpc19pbmRleCsrOworCQkJZHVrX3B1c2hf aW50KHRociwgdGhpc19pbmRleCk7CisJCQlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg MCwgRFVLX1NUUklEWF9MQVNUX0lOREVYKTsKKwkJfQorCQlwcmV2X2xhc3RfaW5kZXggPSB0aGlz X2luZGV4OworCisJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIsIC0xLCAwKTsgIC8qIG1hdGNoIHN0 cmluZyAqLworCQlkdWtfcHV0X3Byb3BfaW5kZXgodGhyLCAyLCAoZHVrX3VhcnJpZHhfdCkgYXJy X2lkeCk7CisJCWFycl9pZHgrKzsKKwkJZHVrX3BvcCh0aHIpOyAgLyogcmVzX29iaiAqLworCX0K KworCWlmIChhcnJfaWR4ID09IDApIHsKKwkJZHVrX3B1c2hfbnVsbCh0aHIpOworCX0KKworCXJl dHVybiAxOyAgLyogcmV0dXJuICdyZXNfYXJyJyBvciAnbnVsbCcgKi8KK30KKyNlbmRpZiAgLyog RFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19i aV9zdHJpbmdfcHJvdG90eXBlX2NvbmNhdChkdWtfaHRocmVhZCAqdGhyKSB7CisJLyogZHVrX2Nv bmNhdCgpIGNvZXJjZXMgYXJndW1lbnRzIHdpdGggVG9TdHJpbmcoKSBpbiBjb3JyZWN0IG9yZGVy ICovCisJKHZvaWQpIGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZyh0aHIpOworCWR1 a19pbnNlcnQodGhyLCAwKTsgIC8qIHRoaXMgaXMgcmVsYXRpdmVseSBleHBlbnNpdmUgKi8KKwlk dWtfY29uY2F0KHRociwgZHVrX2dldF90b3AodGhyKSk7CisJcmV0dXJuIDE7Cit9CisKK0RVS19J TlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfdHJpbShkdWtfaHRocmVh ZCAqdGhyKSB7CisJRFVLX0FTU0VSVF9UT1AodGhyLCAwKTsKKwkodm9pZCkgZHVrX3B1c2hfdGhp c19jb2VyY2libGVfdG9fc3RyaW5nKHRocik7CisJZHVrX3RyaW0odGhyLCAwKTsKKwlEVUtfQVNT RVJUX1RPUCh0aHIsIDEpOworCXJldHVybiAxOworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0VT NikKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfcmVwZWF0 KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaHN0cmluZyAqaF9pbnB1dDsKKwlkdWtfc2l6ZV90 IGlucHV0X2JsZW47CisJZHVrX3NpemVfdCByZXN1bHRfbGVuOworCWR1a19pbnRfdCBjb3VudF9z aWduZWQ7CisJZHVrX3VpbnRfdCBjb3VudDsKKwljb25zdCBkdWtfdWludDhfdCAqc3JjOworCWR1 a191aW50OF90ICpidWY7CisJZHVrX3VpbnQ4X3QgKnA7CisJZHVrX2RvdWJsZV90IGQ7CisjaWYg IWRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwlkdWtfc2l6ZV90IGNvcHlfc2l6ZTsKKwlk dWtfdWludDhfdCAqcF9lbmQ7CisjZW5kaWYKKworCURVS19BU1NFUlRfVE9QKHRociwgMSk7CisJ aF9pbnB1dCA9IGR1a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZyh0aHIpOworCURVS19B U1NFUlQoaF9pbnB1dCAhPSBOVUxMKTsKKwlpbnB1dF9ibGVuID0gRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oaF9pbnB1dCk7CisKKwkvKiBDb3VudCBpcyBUb051bWJlcigpIGNvZXJjZWQ7ICtJbmZp bml0eSBtdXN0IGJlIGFsd2F5cyByZWplY3RlZAorCSAqIChldmVuIGlmIGlucHV0IHN0cmluZyBp cyB6ZXJvIGxlbmd0aCksIGFzIHdlbGwgYXMgbmVnYXRpdmUgdmFsdWVzCisJICogYW5kIC1JbmZp bml0eS4gIC1JbmZpbml0eSBkb2Vzbid0IHJlcXVpcmUgYW4gZXhwbGljaXQgY2hlY2sKKwkgKiBi ZWNhdXNlIGR1a19nZXRfaW50KCkgY2xhbXBzIGl0IHRvIERVS19JTlRfTUlOIHdoaWNoIGdldHMg cmVqZWN0ZWQKKwkgKiBhcyBhIG5lZ2F0aXZlIHZhbHVlIChyZWdhcmRsZXNzIG9mIGlucHV0IHN0 cmluZyBsZW5ndGgpLgorCSAqLworCWQgPSBkdWtfdG9fbnVtYmVyKHRociwgMCk7CisJaWYgKGR1 a19kb3VibGVfaXNfcG9zaW5mKGQpKSB7CisJCWdvdG8gZmFpbF9yYW5nZTsKKwl9CisJY291bnRf c2lnbmVkID0gZHVrX2dldF9pbnQodGhyLCAwKTsKKwlpZiAoY291bnRfc2lnbmVkIDwgMCkgewor CQlnb3RvIGZhaWxfcmFuZ2U7CisJfQorCWNvdW50ID0gKGR1a191aW50X3QpIGNvdW50X3NpZ25l ZDsKKworCS8qIE92ZXJmbG93IGNoZWNrIGZvciByZXN1bHQgbGVuZ3RoLiAqLworCXJlc3VsdF9s ZW4gPSBjb3VudCAqIGlucHV0X2JsZW47CisJaWYgKGNvdW50ICE9IDAgJiYgcmVzdWx0X2xlbiAv IGNvdW50ICE9IGlucHV0X2JsZW4pIHsKKwkJZ290byBmYWlsX3JhbmdlOworCX0KKworCS8qIFRl bXBvcmFyeSBmaXhlZCBidWZmZXIsIGxhdGVyIGNvbnZlcnRlZCB0byBzdHJpbmcuICovCisJYnVm ID0gKGR1a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhyLCByZXN1 bHRfbGVuKTsKKwlEVUtfQVNTRVJUKGJ1ZiAhPSBOVUxMKTsKKwlzcmMgPSAoY29uc3QgZHVrX3Vp bnQ4X3QgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9pbnB1dCk7CisJRFVLX0FTU0VSVChzcmMg IT0gTlVMTCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisJcCA9IGJ1ZjsK Kwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJZHVrX21lbWNweSgodm9pZCAqKSBwLCAoY29uc3Qg dm9pZCAqKSBzcmMsIGlucHV0X2JsZW4pOyAgLyogY29weSBzaXplIG1heSBiZSB6ZXJvLCBidXQg cG9pbnRlcnMgYXJlIHZhbGlkICovCisJCXAgKz0gaW5wdXRfYmxlbjsKKwl9CisjZWxzZSAgLyog RFVLX1VTRV9QUkVGRVJfU0laRSAqLworCS8qIFRha2UgYWR2YW50YWdlIG9mIGFscmVhZHkgY29w aWVkIHBpZWNlcyB0byBzcGVlZCB1cCB0aGUgcHJvY2VzcworCSAqIGVzcGVjaWFsbHkgZm9yIHNt YWxsIHJlcGVhdGVkIHN0cmluZ3MuCisJICovCisJcCA9IGJ1ZjsKKwlwX2VuZCA9IHAgKyByZXN1 bHRfbGVuOworCWNvcHlfc2l6ZSA9IGlucHV0X2JsZW47CisJZm9yICg7OykgeworCQlkdWtfc2l6 ZV90IHJlbWFpbiA9IChkdWtfc2l6ZV90KSAocF9lbmQgLSBwKTsKKwkJRFVLX0RERChEVUtfRERE UFJJTlQoInJlbWFpbj0lbGQsIGNvcHlfc2l6ZT0lbGQsIGlucHV0X2JsZW49JWxkLCByZXN1bHRf bGVuPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSByZW1haW4sIChsb25nKSBj b3B5X3NpemUsIChsb25nKSBpbnB1dF9ibGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9u ZykgcmVzdWx0X2xlbikpOworCQlpZiAocmVtYWluIDw9IGNvcHlfc2l6ZSkgeworCQkJLyogSWYg cmVzdWx0X2xlbiBpcyB6ZXJvLCB0aGlzIGNhc2UgaXMgdGFrZW4gYW5kIGRvZXMKKwkJCSAqIGEg emVybyBzaXplIGNvcHkgKHdpdGggdmFsaWQgcG9pbnRlcnMpLgorCQkJICovCisJCQlkdWtfbWVt Y3B5KCh2b2lkICopIHAsIChjb25zdCB2b2lkICopIHNyYywgcmVtYWluKTsKKwkJCWJyZWFrOwor CQl9IGVsc2UgeworCQkJZHVrX21lbWNweSgodm9pZCAqKSBwLCAoY29uc3Qgdm9pZCAqKSBzcmMs IGNvcHlfc2l6ZSk7CisJCQlwICs9IGNvcHlfc2l6ZTsKKwkJfQorCisJCXNyYyA9IChjb25zdCBk dWtfdWludDhfdCAqKSBidWY7ICAvKiBVc2UgYnVmIGFzIHNvdXJjZSBmb3IgbGFyZ2VyIGNvcGll cy4gKi8KKwkJY29weV9zaXplID0gKGR1a19zaXplX3QpIChwIC0gYnVmKTsKKwl9CisjZW5kaWYg IC8qIERVS19VU0VfUFJFRkVSX1NJWkUgKi8KKworCS8qIFhYWDogSXQgd291bGQgYmUgdXNlZnVs IHRvIGJlIGFibGUgdG8gY3JlYXRlIGEgZHVrX2hzdHJpbmcgd2l0aAorCSAqIGEgY2VydGFpbiBi eXRlIHNpemUgd2hvc2UgZGF0YSBhcmVhIHdhc24ndCBpbml0aWFsaXplZCBhbmQgd2hpY2gKKwkg KiB3YXNuJ3QgaW4gdGhlIHN0cmluZyB0YWJsZSB5ZXQuICBUaGlzIHdvdWxkIGFsbG93IGEgc3Ry aW5nIHRvIGJlCisJICogY29uc3RydWN0ZWQgZGlyZWN0bHkgd2l0aG91dCBhIGJ1ZmZlciB0ZW1w b3JhcnkgYW5kIHdoZW4gaXQgd2FzCisJICogZmluaXNoZWQsIGl0IGNvdWxkIGJlIGluamVjdGVk IGludG8gdGhlIHN0cmluZyB0YWJsZS4gIEN1cnJlbnRseQorCSAqIHRoaXMgaXNuJ3QgcG9zc2li bGUgYmVjYXVzZSBkdWtfaHN0cmluZ3MgYXJlIG9ubHkgdHJhY2tlZCBieSB0aGUKKwkgKiBpbnRl cm4gdGFibGUgKHRoZXkgYXJlIG5vdCBpbiBoZWFwX2FsbG9jYXRlZCkuCisJICovCisKKwlkdWtf YnVmZmVyX3RvX3N0cmluZyh0aHIsIC0xKTsgIC8qIFNhZmUgaWYgaW5wdXQgaXMgc2FmZS4gKi8K KwlyZXR1cm4gMTsKKworIGZhaWxfcmFuZ2U6CisJRFVLX0RDRVJST1JfUkFOR0VfSU5WQUxJRF9B UkdTKHRocik7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRVM2ICovCisKK0RVS19JTlRFUk5BTCBk dWtfcmV0X3QgZHVrX2JpX3N0cmluZ19wcm90b3R5cGVfbG9jYWxlX2NvbXBhcmUoZHVrX2h0aHJl YWQgKnRocikgeworCWR1a19oc3RyaW5nICpoMTsKKwlkdWtfaHN0cmluZyAqaDI7CisJZHVrX3Np emVfdCBoMV9sZW4sIGgyX2xlbiwgcHJlZml4X2xlbjsKKwlkdWtfc21hbGxfaW50X3QgcmV0ID0g MDsKKwlkdWtfc21hbGxfaW50X3QgcmM7CisKKwkvKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlv biBvZiBsb2NhbGVDb21wYXJlKCkgaXMgc2ltcGx5IGEgY29kZXBvaW50CisJICogYnkgY29kZXBv aW50IGNvbXBhcmlzb24sIGltcGxlbWVudGVkIHdpdGggYSBzaW1wbGUgc3RyaW5nIGNvbXBhcmUK KwkgKiBiZWNhdXNlIFVURi04IHNob3VsZCBwcmVzZXJ2ZSBjb2RlcG9pbnQgb3JkZXJpbmcgKGFz c3VtaW5nIHZhbGlkCisJICogc2hvcnRlc3QgVVRGLTggZW5jb2RpbmcpLgorCSAqCisJICogVGhl IHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgcmVs YXRlZAorCSAqIHRvIHRoZSBzb3J0IG9yZGVyOiBlLmcuIG5lZ2F0aXZlIG1lYW5zIHRoYXQgJ3Ro aXMnIGNvbWVzIGJlZm9yZQorCSAqICd0aGF0JyBpbiBzb3J0IG9yZGVyLiAgV2UgYXNzdW1lIGFu IGFzY2VuZGluZyBzb3J0IG9yZGVyLgorCSAqLworCisJLyogWFhYOiBjb3VsZCBzaGFyZSBjb2Rl IHdpdGggZHVrX2pzX29wcy5jLCBkdWtfanNfY29tcGFyZV9oZWxwZXIgKi8KKworCWgxID0gZHVr X3B1c2hfdGhpc19jb2VyY2libGVfdG9fc3RyaW5nKHRocik7CisJRFVLX0FTU0VSVChoMSAhPSBO VUxMKTsKKworCWgyID0gZHVrX3RvX2hzdHJpbmcodGhyLCAwKTsKKwlEVUtfQVNTRVJUKGgyICE9 IE5VTEwpOworCisJaDFfbGVuID0gKGR1a19zaXplX3QpIERVS19IU1RSSU5HX0dFVF9CWVRFTEVO KGgxKTsKKwloMl9sZW4gPSAoZHVrX3NpemVfdCkgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaDIp OworCXByZWZpeF9sZW4gPSAoaDFfbGVuIDw9IGgyX2xlbiA/IGgxX2xlbiA6IGgyX2xlbik7CisK KwlyYyA9IChkdWtfc21hbGxfaW50X3QpIGR1a19tZW1jbXAoKGNvbnN0IHZvaWQgKikgRFVLX0hT VFJJTkdfR0VUX0RBVEEoaDEpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3Qgdm9pZCAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoMiksCisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChzaXplX3QpIHByZWZpeF9sZW4pOworCisJaWYgKHJjIDwgMCkg eworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAocmMgPiAwKSB7CisJCXJl dCA9IDE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBwcmVmaXggbWF0Y2hlcywgbGVuZ3RocyBt YXR0ZXIgbm93ICovCisJaWYgKGgxX2xlbiA+IGgyX2xlbikgeworCQlyZXQgPSAxOworCQlnb3Rv IGRvbmU7CisJfSBlbHNlIGlmIChoMV9sZW4gPT0gaDJfbGVuKSB7CisJCURVS19BU1NFUlQocmV0 ID09IDApOworCQlnb3RvIGRvbmU7CisJfQorCXJldCA9IC0xOworCWdvdG8gZG9uZTsKKworIGRv bmU6CisJZHVrX3B1c2hfaW50KHRociwgKGR1a19pbnRfdCkgcmV0KTsKKwlyZXR1cm4gMTsKK30K KworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzYpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19i aV9zdHJpbmdfcHJvdG90eXBlX3N0YXJ0c3dpdGhfZW5kc3dpdGgoZHVrX2h0aHJlYWQgKnRocikg eworCWR1a19pbnRfdCBtYWdpYzsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtfaHN0cmluZyAqaF9z ZWFyY2g7CisJZHVrX3NpemVfdCBibGVuX3NlYXJjaDsKKwljb25zdCBkdWtfdWludDhfdCAqcF9j bXBfc3RhcnQ7CisJZHVrX2Jvb2xfdCByZXN1bHQ7CisKKwloID0gZHVrX3B1c2hfdGhpc19jb2Vy Y2libGVfdG9fc3RyaW5nKHRocik7CisJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJaF9zZWFy Y2ggPSBkdWtfX3N0cl90b3N0cmluZ19ub3RyZWdleHAodGhyLCAwKTsKKwlEVUtfQVNTRVJUKGhf c2VhcmNoICE9IE5VTEwpOworCisJbWFnaWMgPSBkdWtfZ2V0X2N1cnJlbnRfbWFnaWModGhyKTsK KworCXBfY21wX3N0YXJ0ID0gKGNvbnN0IGR1a191aW50OF90ICopIERVS19IU1RSSU5HX0dFVF9E QVRBKGgpOworCWJsZW5fc2VhcmNoID0gRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaF9zZWFyY2gp OworCisJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAxKSkgeworCQlpZiAobWFnaWMpIHsKKwkJ CXBfY21wX3N0YXJ0ID0gcF9jbXBfc3RhcnQgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoKSAt IGJsZW5fc2VhcmNoOworCQl9IGVsc2UgeworCQkJLyogcF9jbXBfc3RhcnQgYWxyZWFkeSBPSyAq LworCQl9CisJfSBlbHNlIHsKKwkJZHVrX2ludF90IGxlbjsKKwkJZHVrX2ludF90IHBvczsKKwor CQlEVUtfQVNTRVJUKERVS19IU1RSSU5HX01BWF9CWVRFTEVOIDw9IERVS19JTlRfTUFYKTsKKwkJ bGVuID0gKGR1a19pbnRfdCkgRFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oaCk7CisJCXBvcyA9IGR1 a190b19pbnRfY2xhbXBlZCh0aHIsIDEsIDAsIGxlbik7CisJCURVS19BU1NFUlQocG9zID49IDAg JiYgcG9zIDw9IGxlbik7CisKKwkJaWYgKG1hZ2ljKSB7CisJCQlwX2NtcF9zdGFydCAtPSBibGVu X3NlYXJjaDsgIC8qIENvbmNlcHR1YWxseSBzdWJ0cmFjdGVkIGxhc3QsIGJ1dCBkbyBhbHJlYWR5 IGhlcmUuICovCisJCX0KKwkJRFVLX0FTU0VSVChwb3MgPj0gMCAmJiBwb3MgPD0gbGVuKTsKKwor CQlwX2NtcF9zdGFydCArPSBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJieXRlKHRociwg aCwgKGR1a191aW50X2Zhc3QzMl90KSBwb3MpOworCX0KKworCS8qIFRoZSBtYWluIGNvbXBhcmlz b24gY2FuIGJlIGRvbmUgdXNpbmcgYSBtZW1jbXAoKSByYXRoZXIgdGhhbgorCSAqIGRvaW5nIGNv ZGVwb2ludCBjb21wYXJpc29uczogZm9yIENFU1UtOCBzdHJpbmdzIHRoZXJlIGlzIGEKKwkgKiBj YW5vbmljYWwgcmVwcmVzZW50YXRpb24gZm9yIGV2ZXJ5IGNvZGVwb2ludC4gIEJ1dCB3ZSBkbyBu ZWVkCisJICogdG8gZGVhbCB3aXRoIHRoZSBjaGFyL2J5dGUgb2Zmc2V0IHRyYW5zbGF0aW9uIHRv IGZpbmQgdGhlCisJICogY29tcGFyaXNvbiByYW5nZS4KKwkgKi8KKworCXJlc3VsdCA9IDA7CisJ aWYgKHBfY21wX3N0YXJ0ID49IERVS19IU1RSSU5HX0dFVF9EQVRBKGgpICYmCisJICAgIChkdWtf c2l6ZV90KSAocF9jbXBfc3RhcnQgLSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hTVFJJTkdf R0VUX0RBVEEoaCkpICsgYmxlbl9zZWFyY2ggPD0gRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkp IHsKKwkJaWYgKGR1a19tZW1jbXAoKGNvbnN0IHZvaWQgKikgcF9jbXBfc3RhcnQsCisJCSAgICAg ICAgICAgICAgIChjb25zdCB2b2lkICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfc2VhcmNoKSwK KwkJICAgICAgICAgICAgICAgKHNpemVfdCkgYmxlbl9zZWFyY2gpID09IDApIHsKKwkJCXJlc3Vs dCA9IDE7CisJCX0KKwl9CisKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgcmVzdWx0KTsKKwlyZXR1 cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9FUzYgKi8KKworI2lmIGRlZmluZWQoRFVLX1VT RV9FUzYpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9zdHJpbmdfcHJvdG90eXBlX2lu Y2x1ZGVzKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtfaHN0cmlu ZyAqaF9zZWFyY2g7CisJZHVrX2ludF90IGxlbjsKKwlkdWtfaW50X3QgcG9zOworCisJaCA9IGR1 a19wdXNoX3RoaXNfY29lcmNpYmxlX3RvX3N0cmluZyh0aHIpOworCURVS19BU1NFUlQoaCAhPSBO VUxMKTsKKworCWhfc2VhcmNoID0gZHVrX19zdHJfdG9zdHJpbmdfbm90cmVnZXhwKHRociwgMCk7 CisJRFVLX0FTU0VSVChoX3NlYXJjaCAhPSBOVUxMKTsKKworCWxlbiA9IChkdWtfaW50X3QpIERV S19IU1RSSU5HX0dFVF9DSEFSTEVOKGgpOworCXBvcyA9IGR1a190b19pbnRfY2xhbXBlZCh0aHIs IDEsIDAsIGxlbik7CisJRFVLX0FTU0VSVChwb3MgPj0gMCAmJiBwb3MgPD0gbGVuKTsKKworCXBv cyA9IGR1a19fc3RyX3NlYXJjaF9zaGFyZWQodGhyLCBoLCBoX3NlYXJjaCwgcG9zLCAwIC8qYmFj a3dhcmRzKi8pOworCWR1a19wdXNoX2Jvb2xlYW4odGhyLCBwb3MgPj0gMCk7CisJcmV0dXJuIDE7 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRVM2ICovCisjZW5kaWYgIC8qIERVS19VU0VfU1RSSU5H X0JVSUxUSU4gKi8KKy8qCisgKiAgU3ltYm9sIGJ1aWx0LWluCisgKi8KKworLyogI2luY2x1ZGUg ZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX1NZTUJPTF9CVUlMVElOKQorCisvKgorICogIENvbnN0cnVjdG9yCisgKi8KKworRFVLX0lO VEVSTkFMIGR1a19yZXRfdCBkdWtfYmlfc3ltYm9sX2NvbnN0cnVjdG9yX3NoYXJlZChkdWtfaHRo cmVhZCAqdGhyKSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKmRlc2M7CisJZHVrX3NpemVfdCBsZW47 CisJZHVrX3VpbnQ4X3QgKmJ1ZjsKKwlkdWtfdWludDhfdCAqcDsKKwlkdWtfaW50X3QgbWFnaWM7 CisKKwltYWdpYyA9IGR1a19nZXRfY3VycmVudF9tYWdpYyh0aHIpOworCWlmIChkdWtfaXNfdW5k ZWZpbmVkKHRociwgMCkgJiYgKG1hZ2ljID09IDApKSB7CisJCS8qIFN5bWJvbCgpIGFjY2VwdHMg dW5kZWZpbmVkIGFuZCBlbXB0eSBzdHJpbmcsIGJ1dCB0aGV5IGFyZQorCQkgKiB0cmVhdGVkIGRp ZmZlcmVudGx5LgorCQkgKi8KKwkJZGVzYyA9IE5VTEw7CisJCWxlbiA9IDA7CisJfSBlbHNlIHsK KwkJLyogU3ltYm9sLmZvcigpIGNvZXJjZXMgdW5kZWZpbmVkIHRvICd1bmRlZmluZWQnICovCisJ CWRlc2MgPSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgZHVrX3RvX2xzdHJpbmcodGhyLCAwLCAmbGVu KTsKKwl9CisKKwkvKiBNYXhpbXVtIHN5bWJvbCBkYXRhIGxlbmd0aDoKKwkgKiAgICsxICAgIGlu aXRpYWwgYnl0ZSAoMHg4MCBvciAweDgxKQorCSAqICAgK2xlbiAgZGVzY3JpcHRpb24KKwkgKiAg ICsxICAgIDB4ZmYgYWZ0ZXIgZGVzY3JpcHRpb24sIGJlZm9yZSB1bmlxdWUgc3VmZml4CisJICog ICArMTcgICBhdXRvZ2VuZXJhdGVkIHVuaXF1ZSBzdWZmaXg6ICdmZmZmZmZmZi1mZmZmZmZmZicg aXMgbG9uZ2VzdAorCSAqICAgKzEgICAgMHhmZiBhZnRlciB1bmlxdWUgc3VmZml4IGZvciBzeW1i b2xzIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uCisJICovCisJYnVmID0gKGR1a191aW50OF90 ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcih0aHIsIDEgKyBsZW4gKyAxICsgMTcgKyAxKTsKKwlE VUtfQVNTRVJUKGJ1ZiAhPSBOVUxMKTsKKwlwID0gYnVmICsgMTsKKwlEVUtfQVNTRVJUKGRlc2Mg IT0gTlVMTCB8fCBsZW4gPT0gMCk7ICAvKiBtYXkgYmUgTlVMTCBpZiBsZW4gaXMgMCAqLworCWR1 a19tZW1jcHlfdW5zYWZlKCh2b2lkICopIHAsIChjb25zdCB2b2lkICopIGRlc2MsIGxlbik7CisJ cCArPSBsZW47CisJaWYgKG1hZ2ljID09IDApIHsKKwkJLyogU3ltYm9sKCk6IGNyZWF0ZSB1bmlx dWUgc3ltYm9sLiAgVXNlIHR3byAzMi1iaXQgdmFsdWVzCisJCSAqIHRvIGF2b2lkIGRlcGVuZGVu Y3kgb24gNjQtYml0IHR5cGVzIGFuZCA2NC1iaXQgaW50ZWdlcgorCQkgKiBmb3JtYXR0aW5nIChh dCBsZWFzdCBmb3Igbm93KS4KKwkJICovCisJCWlmICgrK3Roci0+aGVhcC0+c3ltX2NvdW50ZXJb MF0gPT0gMCkgeworCQkJdGhyLT5oZWFwLT5zeW1fY291bnRlclsxXSsrOworCQl9CisJCXAgKz0g RFVLX1NQUklOVEYoKGNoYXIgKikgcCwgIlx4RkYiICIlbHgtJWx4IiwKKwkJICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZykgdGhyLT5oZWFwLT5zeW1fY291bnRlclsxXSwKKwkJICAgICAg ICAgICAgICAgICAodW5zaWduZWQgbG9uZykgdGhyLT5oZWFwLT5zeW1fY291bnRlclswXSk7CisJ CWlmIChkZXNjID09IE5VTEwpIHsKKwkJCS8qIFNwZWNpYWwgY2FzZSBmb3IgJ3VuZGVmaW5lZCcg ZGVzY3JpcHRpb24sIHRyYWlsaW5nCisJCQkgKiAweGZmIGRpc3Rpbmd1aXNoZXMgZnJvbSBlbXB0 eSBzdHJpbmcgZGVzY3JpcHRpb24sCisJCQkgKiBidXQgbmVlZHMgbWluaW1hbCBzcGVjaWFsIGNh c2UgaGFuZGxpbmcgZWxzZXdoZXJlLgorCQkJICovCisJCQkqcCsrID0gMHhmZjsKKwkJfQorCQli dWZbMF0gPSAweDgxOworCX0gZWxzZSB7CisJCS8qIFN5bWJvbC5mb3IoKTogY3JlYXRlIGEgZ2xv YmFsIHN5bWJvbCAqLworCQlidWZbMF0gPSAweDgwOworCX0KKworCWR1a19wdXNoX2xzdHJpbmco dGhyLCAoY29uc3QgY2hhciAqKSBidWYsIChkdWtfc2l6ZV90KSAocCAtIGJ1ZikpOworCURVS19E REQoRFVLX0RERFBSSU5UKCJjcmVhdGVkIHN5bWJvbDogJSFUIiwgZHVrX2dldF90dmFsKHRociwg LTEpKSk7CisJcmV0dXJuIDE7Cit9CisKK0RVS19MT0NBTCBkdWtfaHN0cmluZyAqZHVrX19hdXRv X3VuYm94X3N5bWJvbChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZfYXJnKSB7CisJZHVr X3R2YWwgKnR2OworCWR1a190dmFsIHR2X3ZhbDsKKwlkdWtfaG9iamVjdCAqaF9vYmo7CisJZHVr X2hzdHJpbmcgKmhfc3RyOworCisJRFVLX0FTU0VSVCh0dl9hcmcgIT0gTlVMTCk7CisKKwkvKiBY WFg6IGFkZCBpbnRlcm5hbCBoZWxwZXI6IGR1a19hdXRvX3VuYm94X3R2YWwodGhyLCB0diwgbWFz ayk7ICovCisJLyogWFhYOiBhZGQgaW50ZXJuYWwgaGVscGVyOiBkdWtfYXV0b191bmJveCh0aHIs IHR2LCBpZHgpOyAqLworCisJdHYgPSB0dl9hcmc7CisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0 dikpIHsKKwkJaF9vYmogPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KTsKKwkJRFVLX0FTU0VSVCho X29iaiAhPSBOVUxMKTsKKwkJaWYgKERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoaF9vYmop ID09IERVS19IT0JKRUNUX0NMQVNTX1NZTUJPTCkgeworCQkJaWYgKCFkdWtfaG9iamVjdF9nZXRf aW50ZXJuYWxfdmFsdWUodGhyLT5oZWFwLCBoX29iaiwgJnR2X3ZhbCkpIHsKKwkJCQlyZXR1cm4g TlVMTDsKKwkJCX0KKwkJCXR2ID0gJnR2X3ZhbDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBOVUxM OworCQl9CisJfQorCisJaWYgKCFEVUtfVFZBTF9JU19TVFJJTkcodHYpKSB7CisJCXJldHVybiBO VUxMOworCX0KKwloX3N0ciA9IERVS19UVkFMX0dFVF9TVFJJTkcodHYpOworCURVS19BU1NFUlQo aF9zdHIgIT0gTlVMTCk7CisKKwkvKiBIZXJlIHN5bWJvbCBpcyBtb3JlIGV4cGVjdGVkIHRoYW4g bm90LiAqLworCWlmIChEVUtfVU5MSUtFTFkoIURVS19IU1RSSU5HX0hBU19TWU1CT0woaF9zdHIp KSkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gaF9zdHI7Cit9CisKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX3N5bWJvbF90b3N0cmluZ19zaGFyZWQoZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19oc3RyaW5nICpoX3N0cjsKKworCWhfc3RyID0gZHVrX19hdXRvX3VuYm94 X3N5bWJvbCh0aHIsIERVS19IVEhSRUFEX1RISVNfUFRSKHRocikpOworCWlmIChoX3N0ciA9PSBO VUxMKSB7CisJCXJldHVybiBEVUtfUkVUX1RZUEVfRVJST1I7CisJfQorCisJaWYgKGR1a19nZXRf Y3VycmVudF9tYWdpYyh0aHIpID09IDApIHsKKwkJLyogLnRvU3RyaW5nKCkgKi8KKwkJZHVrX3B1 c2hfc3ltYm9sX2Rlc2NyaXB0aXZlX3N0cmluZyh0aHIsIGhfc3RyKTsKKwl9IGVsc2UgeworCQkv KiAudmFsdWVPZigpICovCisJCWR1a19wdXNoX2hzdHJpbmcodGhyLCBoX3N0cik7CisJfQorCXJl dHVybiAxOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9zeW1ib2xfa2V5X2Zv cihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2hzdHJpbmcgKmg7CisJY29uc3QgZHVrX3VpbnQ4 X3QgKnA7CisKKwkvKiBBcmd1bWVudCBtdXN0IGJlIGEgc3ltYm9sIGJ1dCBub3QgY2hlY2tlZCBo ZXJlLiAgVGhlIGluaXRpYWwgYnl0ZQorCSAqIGNoZWNrIHdpbGwgY2F0Y2ggbm9uLXN5bWJvbCBz dHJpbmdzLgorCSAqLworCWggPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwgMCk7CisJRFVLX0FT U0VSVChoICE9IE5VTEwpOworCisJcCA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNUUklO R19HRVRfREFUQShoKTsKKwlEVUtfQVNTRVJUKHAgIT0gTlVMTCk7CisKKwkvKiBFdmVuIGZvciB6 ZXJvIGxlbmd0aCBzdHJpbmdzIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIE5VTCBieXRlIHNvCisJICog d2UgY2FuIHNhZmVseSBjaGVjayB0aGUgaW5pdGlhbCBieXRlLgorCSAqLworCWlmIChwWzBdID09 IDB4ODApIHsKKwkJLyogR2xvYmFsIHN5bWJvbCwgcmV0dXJuIGl0cyBrZXkgKGJ5dGVzIGp1c3Qg YWZ0ZXIgdGhlIGluaXRpYWwgYnl0ZSkuICovCisJCWR1a19wdXNoX2xzdHJpbmcodGhyLCAoY29u c3QgY2hhciAqKSAocCArIDEpLCAoZHVrX3NpemVfdCkgKERVS19IU1RSSU5HX0dFVF9CWVRFTEVO KGgpIC0gMSkpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKHBbMF0gPT0gMHg4MSB8fCBwWzBd ID09IDB4ODIgfHwgcFswXSA9PSAweGZmKSB7CisJCS8qIExvY2FsIHN5bWJvbCBvciBoaWRkZW4g c3ltYm9sLCByZXR1cm4gdW5kZWZpbmVkLiAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDb3Zl cnMgbm9ybWFsIHN0cmluZ3MgYW5kIHVua25vd24gaW5pdGlhbCBieXRlcy4gKi8KKwlyZXR1cm4g RFVLX1JFVF9UWVBFX0VSUk9SOworfQorCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1a19iaV9z eW1ib2xfdG9wcmltaXRpdmUoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19oc3RyaW5nICpoX3N0 cjsKKworCWhfc3RyID0gZHVrX19hdXRvX3VuYm94X3N5bWJvbCh0aHIsIERVS19IVEhSRUFEX1RI SVNfUFRSKHRocikpOworCWlmIChoX3N0ciA9PSBOVUxMKSB7CisJCXJldHVybiBEVUtfUkVUX1RZ UEVfRVJST1I7CisJfQorCWR1a19wdXNoX2hzdHJpbmcodGhyLCBoX3N0cik7CisJcmV0dXJuIDE7 Cit9CisKKyNlbmRpZiAgLyogRFVLX1VTRV9TWU1CT0xfQlVJTFRJTiAqLworLyoKKyAqICBUaHJl YWQgYnVpbHRpbnMKKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5 IGluY2x1ZGVkICovCisKKy8qCisgKiAgQ29uc3RydWN0b3IKKyAqLworCisjaWYgZGVmaW5lZChE VUtfVVNFX0NPUk9VVElORV9TVVBQT1JUKQorRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBkdWtfYmlf dGhyZWFkX2NvbnN0cnVjdG9yKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaHRocmVhZCAqbmV3 X3RocjsKKwlkdWtfaG9iamVjdCAqZnVuYzsKKworCS8qIENoZWNrIHRoYXQgdGhlIGFyZ3VtZW50 IGlzIGNhbGxhYmxlOyB0aGlzIGlzIG5vdCAxMDAlIGJlY2F1c2Ugd2UKKwkgKiBkb24ndCBhbGxv dyBuYXRpdmUgZnVuY3Rpb25zIHRvIGJlIGEgdGhyZWFkJ3MgaW5pdGlhbCBmdW5jdGlvbi4KKwkg KiBSZXN1bWUgd2lsbCByZWplY3Qgc3VjaCBmdW5jdGlvbnMgaW4gYW55IGNhc2UuCisJICovCisJ LyogWFhYOiBuZWVkIGEgZHVrX3JlcXVpcmVfZnVuY19wcm9tb3RlX2xmdW5jKCkgKi8KKwlmdW5j ID0gZHVrX3JlcXVpcmVfaG9iamVjdF9wcm9tb3RlX2xmdW5jKHRociwgMCk7CisJRFVLX0FTU0VS VChmdW5jICE9IE5VTEwpOworCWR1a19yZXF1aXJlX2NhbGxhYmxlKHRociwgMCk7CisKKwlkdWtf cHVzaF90aHJlYWQodGhyKTsKKwluZXdfdGhyID0gKGR1a19odGhyZWFkICopIGR1a19rbm93bl9o b2JqZWN0KHRociwgLTEpOworCW5ld190aHItPnN0YXRlID0gRFVLX0hUSFJFQURfU1RBVEVfSU5B Q1RJVkU7CisKKwkvKiBwdXNoIGluaXRpYWwgZnVuY3Rpb24gY2FsbCB0byBuZXcgdGhyZWFkIHN0 YWNrOyB0aGlzIGlzCisJICogcGlja2VkIHVwIGJ5IHJlc3VtZSgpLgorCSAqLworCWR1a19wdXNo X2hvYmplY3QobmV3X3RociwgZnVuYyk7CisKKwlyZXR1cm4gMTsgIC8qIHJldHVybiB0aHJlYWQg Ki8KK30KKyNlbmRpZgorCisvKgorICogIFJlc3VtZSBhIHRocmVhZC4KKyAqCisgKiAgVGhlIHRo cmVhZCBtdXN0IGJlIGluIHJlc3VtYWJsZSBzdGF0ZSwgZWl0aGVyIChhKSBuZXcgdGhyZWFkIHdo aWNoIGhhc24ndAorICogIHlldCBzdGFydGVkLCBvciAoYikgYSB0aHJlYWQgd2hpY2ggaGFzIHBy ZXZpb3VzbHkgeWllbGRlZC4gIFRoaXMgbWV0aG9kCisgKiAgbXVzdCBiZSBjYWxsZWQgZnJvbSBh biBFQ01BU2NyaXB0IGZ1bmN0aW9uLgorICoKKyAqICBBcmdzOgorICogICAgLSB0aHJlYWQKKyAq ICAgIC0gdmFsdWUKKyAqICAgIC0gaXNFcnJvciAoZGVmYXVsdHMgdG8gZmFsc2UpCisgKgorICog IE5vdGU6IHlpZWxkIGFuZCByZXN1bWUgaGFuZGxpbmcgaXMgY3VycmVudGx5IGFzeW1tZXRyaWMu CisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9DT1JPVVRJTkVfU1VQUE9SVCkKK0RVS19JTlRF Uk5BTCBkdWtfcmV0X3QgZHVrX2JpX3RocmVhZF9yZXN1bWUoZHVrX2h0aHJlYWQgKmN0eCkgewor CWR1a19odGhyZWFkICp0aHIgPSAoZHVrX2h0aHJlYWQgKikgY3R4OworCWR1a19odGhyZWFkICp0 aHJfcmVzdW1lOworCWR1a19ob2JqZWN0ICpjYWxsZXJfZnVuYzsKKwlkdWtfc21hbGxfdWludF90 IGlzX2Vycm9yOworCisJRFVLX0RERChEVUtfREREUFJJTlQoIkR1a3RhcGUuVGhyZWFkLnJlc3Vt ZSgpOiB0aHJlYWQ9JSFULCB2YWx1ZT0lIVQsIGlzX2Vycm9yPSUhVCIsCisJICAgICAgICAgICAg ICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIDApLAorCSAgICAgICAgICAg ICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAxKSwKKwkgICAgICAgICAg ICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgMikpKTsKKworCURVS19B U1NFUlQodGhyLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HKTsKKwlEVUtfQVNT RVJUKHRoci0+aGVhcC0+Y3Vycl90aHJlYWQgPT0gdGhyKTsKKworCXRocl9yZXN1bWUgPSBkdWtf cmVxdWlyZV9odGhyZWFkKHRociwgMCk7CisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0aHIpID09 IDMpOworCWlzX2Vycm9yID0gKGR1a19zbWFsbF91aW50X3QpIGR1a190b19ib29sZWFuX3RvcF9w b3AodGhyKTsKKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPT0gMik7CisKKwkvKiBbIHRo cmVhZCB2YWx1ZSBdICovCisKKwkvKgorCSAqICBUaHJlYWQgc3RhdGUgYW5kIGNhbGxpbmcgY29u dGV4dCBjaGVja3MKKwkgKi8KKworCWlmICh0aHItPmNhbGxzdGFja190b3AgPCAyKSB7CisJCURV S19ERChEVUtfRERQUklOVCgicmVzdW1lIHN0YXRlIGludmFsaWQ6IGNhbGxzdGFjayBzaG91bGQg Y29udGFpbiBhdCBsZWFzdCAyIGVudHJpZXMgKGNhbGxlciBhbmQgRHVrdGFwZS5UaHJlYWQucmVz dW1lKSIpKTsKKwkJZ290byBzdGF0ZV9lcnJvcjsKKwl9CisJRFVLX0FTU0VSVCh0aHItPmNhbGxz dGFja19jdXJyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3Vyci0+cGFy ZW50ICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0FDVF9HRVRfRlVOQyh0aHItPmNhbGxzdGFj a19jdXJyKSAhPSBOVUxMKTsgIC8qIHVzICovCisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19O QVRGVU5DKERVS19BQ1RfR0VUX0ZVTkModGhyLT5jYWxsc3RhY2tfY3VycikpKTsKKwlEVUtfQVNT RVJUKERVS19BQ1RfR0VUX0ZVTkModGhyLT5jYWxsc3RhY2tfY3Vyci0+cGFyZW50KSAhPSBOVUxM KTsgIC8qIGNhbGxlciAqLworCisJY2FsbGVyX2Z1bmMgPSBEVUtfQUNUX0dFVF9GVU5DKHRoci0+ Y2FsbHN0YWNrX2N1cnItPnBhcmVudCk7CisJaWYgKCFEVUtfSE9CSkVDVF9JU19DT01QRlVOQyhj YWxsZXJfZnVuYykpIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJyZXN1bWUgc3RhdGUgaW52YWxp ZDogY2FsbGVyIG11c3QgYmUgRUNNQVNjcmlwdCBjb2RlIikpOworCQlnb3RvIHN0YXRlX2Vycm9y OworCX0KKworCS8qIE5vdGU6IHRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQ6ICd0aHItPmNh bGxzdGFja19wcmV2ZW50Y291bnQgPT0gMScKKwkgKiBsaWtlIGZvciB5aWVsZC4KKwkgKi8KKwor CWlmICh0aHJfcmVzdW1lLT5zdGF0ZSAhPSBEVUtfSFRIUkVBRF9TVEFURV9JTkFDVElWRSAmJgor CSAgICB0aHJfcmVzdW1lLT5zdGF0ZSAhPSBEVUtfSFRIUkVBRF9TVEFURV9ZSUVMREVEKSB7CisJ CURVS19ERChEVUtfRERQUklOVCgicmVzdW1lIHN0YXRlIGludmFsaWQ6IHRhcmdldCB0aHJlYWQg bXVzdCBiZSBJTkFDVElWRSBvciBZSUVMREVEIikpOworCQlnb3RvIHN0YXRlX2Vycm9yOworCX0K KworCURVS19BU1NFUlQodGhyX3Jlc3VtZS0+c3RhdGUgPT0gRFVLX0hUSFJFQURfU1RBVEVfSU5B Q1RJVkUgfHwKKwkgICAgICAgICAgIHRocl9yZXN1bWUtPnN0YXRlID09IERVS19IVEhSRUFEX1NU QVRFX1lJRUxERUQpOworCisJLyogRnVydGhlciBzdGF0ZS1kZXBlbmRlbnQgcHJlLWNoZWNrcyAq LworCisJaWYgKHRocl9yZXN1bWUtPnN0YXRlID09IERVS19IVEhSRUFEX1NUQVRFX1lJRUxERUQp IHsKKwkJLyogbm8gcHJlLWNoZWNrcyBub3csIGFzc3VtZSBhIHByZXZpb3VzIHlpZWxkKCkgaGFz IGxlZnQgdGhpbmdzIGluCisJCSAqIHRpcC10b3Agc2hhcGUgKGxvbmdqbXAgaGFuZGxlciB3aWxs IGFzc2VydCBmb3IgdGhlc2UpLgorCQkgKi8KKwl9IGVsc2UgeworCQlkdWtfaG9iamVjdCAqaF9m dW47CisKKwkJRFVLX0FTU0VSVCh0aHJfcmVzdW1lLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFU RV9JTkFDVElWRSk7CisKKwkJLyogVGhlIGluaXRpYWwgZnVuY3Rpb24gbXVzdCBiZSBhbiBFQ01B U2NyaXB0IGZ1bmN0aW9uIChidXQKKwkJICogY2FuIGJlIGJvdW5kKS4gIFdlIG11c3QgbWFrZSBz dXJlIG9mIHRoYXQgYmVmb3JlIHdlIGxvbmdqbXAKKwkJICogYmVjYXVzZSBhbiBlcnJvciBpbiB0 aGUgUkVTVU1FIGhhbmRsZXIgY2FsbCBwcm9jZXNzaW5nIHdpbGwKKwkJICogbm90IGJlIGhhbmRs ZWQgdmVyeSBjbGVhbmx5LgorCQkgKi8KKwkJaWYgKCh0aHJfcmVzdW1lLT5jYWxsc3RhY2tfdG9w ICE9IDApIHx8CisJCSAgICAodGhyX3Jlc3VtZS0+dmFsc3RhY2tfdG9wIC0gdGhyX3Jlc3VtZS0+ dmFsc3RhY2sgIT0gMSkpIHsKKwkJCWdvdG8gc3RhdGVfZXJyb3I7CisJCX0KKworCQlkdWtfcHVz aF90dmFsKHRociwgRFVLX0dFVF9UVkFMX05FR0lEWCh0aHJfcmVzdW1lLCAtMSkpOworCQlkdWtf cmVzb2x2ZV9ub25ib3VuZF9mdW5jdGlvbih0aHIpOworCQloX2Z1biA9IGR1a19yZXF1aXJlX2hv YmplY3QodGhyLCAtMSk7ICAvKiByZWplY3QgbGlnaHRmdW5jcyBvbiBwdXJwb3NlICovCisJCWlm ICghRFVLX0hPQkpFQ1RfSVNfQ0FMTEFCTEUoaF9mdW4pIHx8ICFEVUtfSE9CSkVDVF9JU19DT01Q RlVOQyhoX2Z1bikpIHsKKwkJCWdvdG8gc3RhdGVfZXJyb3I7CisJCX0KKwkJZHVrX3BvcCh0aHIp OworCX0KKworCS8qCisJICogIFRoZSBlcnJvciBvYmplY3QgaGFzIGJlZW4gYXVnbWVudGVkIHdp dGggYSB0cmFjZWJhY2sgYW5kIG90aGVyCisJICogIGluZm8gZnJvbSBpdHMgY3JlYXRpb24gcG9p bnQgLS0gdXN1YWxseSBhbm90aGVyIHRocmVhZC4gIFRoZQorCSAqICBlcnJvciBoYW5kbGVyIGlz IGNhbGxlZCBoZXJlIHJpZ2h0IGJlZm9yZSB0aHJvd2luZywgYnV0IGl0IGFsc28KKwkgKiAgcnVu cyBpbiB0aGUgcmVzdW1lcidzIHRocmVhZC4gIEl0IG1pZ2h0IGJlIG5pY2UgdG8gZ2V0IGEgdHJh Y2ViYWNrCisJICogIGZyb20gdGhlIHJlc3VtZWUgYnV0IHRoaXMgaXMgbm90IHRoZSBjYXNlIG5v dy4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VSUk9SX1RIUk9XKQorCWlm IChpc19lcnJvcikgeworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDIpOyAgLyogdmFsdWUgKGVycm9y KSBpcyBhdCBzdGFjayB0b3AgKi8KKwkJZHVrX2Vycl9hdWdtZW50X2Vycm9yX3Rocm93KHRocik7 ICAvKiBpbiByZXN1bWVyJ3MgY29udGV4dCAqLworCX0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChE VUtfVVNFX0RFQlVHKQorCWlmIChpc19lcnJvcikgeworCQlEVUtfREREKERVS19ERERQUklOVCgi UkVTVU1FIEVSUk9SOiB0aHJlYWQ9JSFULCB2YWx1ZT0lIVQiLAorCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgMCksCisJCSAgICAgICAgICAgICAg ICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAxKSkpOworCX0gZWxzZSBpZiAo dGhyX3Jlc3VtZS0+c3RhdGUgPT0gRFVLX0hUSFJFQURfU1RBVEVfWUlFTERFRCkgeworCQlEVUtf REREKERVS19ERERQUklOVCgiUkVTVU1FIE5PUk1BTDogdGhyZWFkPSUhVCwgdmFsdWU9JSFUIiwK KwkJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIDAp LAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwg MSkpKTsKKwl9IGVsc2UgeworCQlEVUtfREREKERVS19ERERQUklOVCgiUkVTVU1FIElOSVRJQUw6 IHRocmVhZD0lIVQsIHZhbHVlPSUhVCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZh bCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAwKSwKKwkJICAgICAgICAgICAgICAgICAgICAgKGR1a190 dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIDEpKSk7CisJfQorI2VuZGlmCisKKwl0aHItPmhlYXAt PmxqLnR5cGUgPSBEVUtfTEpfVFlQRV9SRVNVTUU7CisKKwkvKiBsaiB2YWx1ZTI6IHRocmVhZCAq LworCURVS19BU1NFUlQodGhyLT52YWxzdGFja19ib3R0b20gPCB0aHItPnZhbHN0YWNrX3RvcCk7 CisJRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGKHRociwgJnRoci0+aGVhcC0+bGoudmFsdWUyLCAm dGhyLT52YWxzdGFja19ib3R0b21bMF0pOyAgLyogc2lkZSBlZmZlY3RzICovCisKKwkvKiBsaiB2 YWx1ZTE6IHZhbHVlICovCisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2JvdHRvbSArIDEgPCB0 aHItPnZhbHN0YWNrX3RvcCk7CisJRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGKHRociwgJnRoci0+ aGVhcC0+bGoudmFsdWUxLCAmdGhyLT52YWxzdGFja19ib3R0b21bMV0pOyAgLyogc2lkZSBlZmZl Y3RzICovCisJRFVLX1RWQUxfQ0hLRkFTVF9JTlBMQUNFX1NMT1coJnRoci0+aGVhcC0+bGoudmFs dWUxKTsKKworCXRoci0+aGVhcC0+bGouaXNlcnJvciA9IGlzX2Vycm9yOworCisJRFVLX0FTU0VS VCh0aHItPmhlYXAtPmxqLmptcGJ1Zl9wdHIgIT0gTlVMTCk7ICAvKiBjYWxsIGlzIGZyb20gZXhl Y3V0b3IsIHNvIHdlIGtub3cgd2UgaGF2ZSBhIGptcGJ1ZiAqLworCWR1a19lcnJfbG9uZ2ptcCh0 aHIpOyAgLyogZXhlY3V0aW9uIHJlc3VtZXMgaW4gYnl0ZWNvZGUgZXhlY3V0b3IgKi8KKwlEVUtf VU5SRUFDSEFCTEUoKTsKKwkvKiBOZXZlciBoZXJlLCBmYWxsIHRocm91Z2ggdG8gZXJyb3IgKGZy b20gY29tcGlsZXIgcG9pbnQgb2YgdmlldykuICovCisKKyBzdGF0ZV9lcnJvcjoKKwlEVUtfRENF UlJPUl9UWVBFX0lOVkFMSURfU1RBVEUodGhyKTsKK30KKyNlbmRpZgorCisvKgorICogIFlpZWxk IHRoZSBjdXJyZW50IHRocmVhZC4KKyAqCisgKiAgVGhlIHRocmVhZCBtdXN0IGJlIGluIHlpZWxk YWJsZSBzdGF0ZTogaXQgbXVzdCBoYXZlIGEgcmVzdW1lciwgYW5kIHRoZXJlCisgKiAgbXVzdCBu b3QgYmUgYW55IHlpZWxkLXByZXZlbnRpbmcgY2FsbHMgKG5hdGl2ZSBjYWxscyBhbmQgY29uc3Ry dWN0b3IgY2FsbHMsCisgKiAgY3VycmVudGx5KSBpbiB0aGUgdGhyZWFkJ3MgY2FsbCBzdGFjayAo b3RoZXJ3aXNlIGEgcmVzdW1lIHdvdWxkIG5vdCBiZQorICogIHBvc3NpYmxlIGxhdGVyKS4gIFRo aXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gRUNNQVNjcmlwdCBmdW5jdGlvbi4KKyAq CisgKiAgQXJnczoKKyAqICAgIC0gdmFsdWUKKyAqICAgIC0gaXNFcnJvciAoZGVmYXVsdHMgdG8g ZmFsc2UpCisgKgorICogIE5vdGU6IHlpZWxkIGFuZCByZXN1bWUgaGFuZGxpbmcgaXMgY3VycmVu dGx5IGFzeW1tZXRyaWMuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9DT1JPVVRJTkVfU1VQ UE9SVCkKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2JpX3RocmVhZF95aWVsZChkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX2hvYmplY3QgKmNhbGxlcl9mdW5jOworCWR1a19zbWFsbF91aW50 X3QgaXNfZXJyb3I7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiRHVrdGFwZS5UaHJlYWQueWll bGQoKTogdmFsdWU9JSFULCBpc19lcnJvcj0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAgIChk dWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAo ZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgMSkpKTsKKworCURVS19BU1NFUlQodGhyLT5z dGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVh cC0+Y3Vycl90aHJlYWQgPT0gdGhyKTsKKworCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA9 PSAyKTsKKwlpc19lcnJvciA9IChkdWtfc21hbGxfdWludF90KSBkdWtfdG9fYm9vbGVhbl90b3Bf cG9wKHRocik7CisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0aHIpID09IDEpOworCisJLyogWyB2 YWx1ZSBdICovCisKKwkvKgorCSAqICBUaHJlYWQgc3RhdGUgYW5kIGNhbGxpbmcgY29udGV4dCBj aGVja3MKKwkgKi8KKworCWlmICghdGhyLT5yZXN1bWVyKSB7CisJCURVS19ERChEVUtfRERQUklO VCgieWllbGQgc3RhdGUgaW52YWxpZDogY3VycmVudCB0aHJlYWQgbXVzdCBoYXZlIGEgcmVzdW1l ciIpKTsKKwkJZ290byBzdGF0ZV9lcnJvcjsKKwl9CisJRFVLX0FTU0VSVCh0aHItPnJlc3VtZXIt PnN0YXRlID09IERVS19IVEhSRUFEX1NUQVRFX1JFU1VNRUQpOworCisJaWYgKHRoci0+Y2FsbHN0 YWNrX3RvcCA8IDIpIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJ5aWVsZCBzdGF0ZSBpbnZhbGlk OiBjYWxsc3RhY2sgc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3QgMiBlbnRyaWVzIChjYWxsZXIgYW5k IER1a3RhcGUuVGhyZWFkLnlpZWxkKSIpKTsKKwkJZ290byBzdGF0ZV9lcnJvcjsKKwl9CisJRFVL X0FTU0VSVCh0aHItPmNhbGxzdGFja19jdXJyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5j YWxsc3RhY2tfY3Vyci0+cGFyZW50ICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0FDVF9HRVRf RlVOQyh0aHItPmNhbGxzdGFja19jdXJyKSAhPSBOVUxMKTsgIC8qIHVzICovCisJRFVLX0FTU0VS VChEVUtfSE9CSkVDVF9JU19OQVRGVU5DKERVS19BQ1RfR0VUX0ZVTkModGhyLT5jYWxsc3RhY2tf Y3VycikpKTsKKwlEVUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkModGhyLT5jYWxsc3RhY2tfY3Vy ci0+cGFyZW50KSAhPSBOVUxMKTsgIC8qIGNhbGxlciAqLworCisJY2FsbGVyX2Z1bmMgPSBEVUtf QUNUX0dFVF9GVU5DKHRoci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudCk7CisJaWYgKCFEVUtfSE9C SkVDVF9JU19DT01QRlVOQyhjYWxsZXJfZnVuYykpIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJ5 aWVsZCBzdGF0ZSBpbnZhbGlkOiBjYWxsZXIgbXVzdCBiZSBFQ01BU2NyaXB0IGNvZGUiKSk7CisJ CWdvdG8gc3RhdGVfZXJyb3I7CisJfQorCisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja19wcmV2 ZW50Y291bnQgPj0gMSk7ICAvKiBzaG91bGQgbmV2ZXIgYmUgemVybywgYmVjYXVzZSB3ZSAoRHVr dGFwZS5UaHJlYWQueWllbGQpIGFyZSBvbiB0aGUgc3RhY2sgKi8KKwlpZiAodGhyLT5jYWxsc3Rh Y2tfcHJldmVudGNvdW50ICE9IDEpIHsKKwkJLyogTm90ZTogdGhlIG9ubHkgeWllbGQtcHJldmVu dGluZyBjYWxsIGlzIER1a3RhcGUuVGhyZWFkLnlpZWxkKCksIGhlbmNlIGNoZWNrIGZvciAxLCBu b3QgMCAqLworCQlEVUtfREQoRFVLX0REUFJJTlQoInlpZWxkIHN0YXRlIGludmFsaWQ6IHRoZXJl IG11c3QgYmUgbm8geWllbGQtcHJldmVudGluZyBjYWxscyBpbiBjdXJyZW50IHRocmVhZCBjYWxs c3RhY2sgKHByZXZlbnRjb3VudCBpcyAlbGQpIiwKKwkJICAgICAgICAgICAgICAgICAgIChsb25n KSB0aHItPmNhbGxzdGFja19wcmV2ZW50Y291bnQpKTsKKwkJZ290byBzdGF0ZV9lcnJvcjsKKwl9 CisKKwkvKgorCSAqICBUaGUgZXJyb3Igb2JqZWN0IGhhcyBiZWVuIGF1Z21lbnRlZCB3aXRoIGEg dHJhY2ViYWNrIGFuZCBvdGhlcgorCSAqICBpbmZvIGZyb20gaXRzIGNyZWF0aW9uIHBvaW50IC0t IHVzdWFsbHkgdGhlIGN1cnJlbnQgdGhyZWFkLgorCSAqICBUaGUgZXJyb3IgaGFuZGxlciwgaG93 ZXZlciwgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aHJvd2luZworCSAqICBhbmQgcnVucyBpbiB0 aGUgeWllbGRlcidzIHRocmVhZC4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BVUdNRU5U X0VSUk9SX1RIUk9XKQorCWlmIChpc19lcnJvcikgeworCQlEVUtfQVNTRVJUX1RPUCh0aHIsIDEp OyAgLyogdmFsdWUgKGVycm9yKSBpcyBhdCBzdGFjayB0b3AgKi8KKwkJZHVrX2Vycl9hdWdtZW50 X2Vycm9yX3Rocm93KHRocik7ICAvKiBpbiB5aWVsZGVyJ3MgY29udGV4dCAqLworCX0KKyNlbmRp ZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWlmIChpc19lcnJvcikgeworCQlEVUtf REREKERVS19ERERQUklOVCgiWUlFTEQgRVJST1I6IHZhbHVlPSUhVCIsCisJCSAgICAgICAgICAg ICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAwKSkpOworCX0gZWxzZSB7 CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJZSUVMRCBOT1JNQUw6IHZhbHVlPSUhVCIsCisJCSAg ICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAwKSkpOwor CX0KKyNlbmRpZgorCisJLyoKKwkgKiAgUHJvY2VzcyB5aWVsZAorCSAqCisJICogIEFmdGVyIGxv bmdqbXAoKSwgcHJvY2Vzc2luZyBjb250aW51ZXMgaW4gYnl0ZWNvZGUgZXhlY3V0b3IgbG9uZ2pt cAorCSAqICBoYW5kbGVyLCB3aGljaCB3aWxsIGUuZy4gdXBkYXRlIHRoci0+cmVzdW1lciB0byBO VUxMLgorCSAqLworCisJdGhyLT5oZWFwLT5sai50eXBlID0gRFVLX0xKX1RZUEVfWUlFTEQ7CisK KwkvKiBsaiB2YWx1ZTE6IHZhbHVlICovCisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2JvdHRv bSA8IHRoci0+dmFsc3RhY2tfdG9wKTsKKwlEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUYodGhyLCAm dGhyLT5oZWFwLT5sai52YWx1ZTEsICZ0aHItPnZhbHN0YWNrX2JvdHRvbVswXSk7ICAvKiBzaWRl IGVmZmVjdHMgKi8KKwlEVUtfVFZBTF9DSEtGQVNUX0lOUExBQ0VfU0xPVygmdGhyLT5oZWFwLT5s ai52YWx1ZTEpOworCisJdGhyLT5oZWFwLT5sai5pc2Vycm9yID0gaXNfZXJyb3I7CisKKwlEVUtf QVNTRVJUKHRoci0+aGVhcC0+bGouam1wYnVmX3B0ciAhPSBOVUxMKTsgIC8qIGNhbGwgaXMgZnJv bSBleGVjdXRvciwgc28gd2Uga25vdyB3ZSBoYXZlIGEgam1wYnVmICovCisJZHVrX2Vycl9sb25n am1wKHRocik7ICAvKiBleGVjdXRpb24gcmVzdW1lcyBpbiBieXRlY29kZSBleGVjdXRvciAqLwor CURVS19VTlJFQUNIQUJMRSgpOworCS8qIE5ldmVyIGhlcmUsIGZhbGwgdGhyb3VnaCB0byBlcnJv ciAoZnJvbSBjb21waWxlciBwb2ludCBvZiB2aWV3KS4gKi8KKworIHN0YXRlX2Vycm9yOgorCURV S19EQ0VSUk9SX1RZUEVfSU5WQUxJRF9TVEFURSh0aHIpOworfQorI2VuZGlmCisKKyNpZiBkZWZp bmVkKERVS19VU0VfQ09ST1VUSU5FX1NVUFBPUlQpCitEVUtfSU5URVJOQUwgZHVrX3JldF90IGR1 a19iaV90aHJlYWRfY3VycmVudChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3B1c2hfY3VycmVu dF90aHJlYWQodGhyKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorLyoKKyAqICBUeXBlIGVycm9y IHRocm93ZXIsIEU1IFNlY3Rpb24gMTMuMi4zLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRl cm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworRFVLX0lOVEVSTkFMIGR1a19yZXRfdCBk dWtfYmlfdHlwZV9lcnJvcl90aHJvd2VyKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfRENFUlJP Ul9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworfQorLyoKKyAqICBGaXhlZCBidWZmZXIgaGVscGVy IHVzZWZ1bCBmb3IgZGVidWdnaW5nLCByZXF1aXJlcyBubyBhbGxvY2F0aW9uCisgKiAgd2hpY2gg aXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZy4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJu YWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcp CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19mYl9wdXRfYnl0ZXMoZHVrX2ZpeGVkYnVmZmVyICpm YiwgY29uc3QgZHVrX3VpbnQ4X3QgKmJ1ZmZlciwgZHVrX3NpemVfdCBsZW5ndGgpIHsKKwlkdWtf c2l6ZV90IGF2YWlsOworCWR1a19zaXplX3QgY29weWxlbjsKKworCWF2YWlsID0gKGZiLT5vZmZz ZXQgPj0gZmItPmxlbmd0aCA/IChkdWtfc2l6ZV90KSAwIDogKGR1a19zaXplX3QpIChmYi0+bGVu Z3RoIC0gZmItPm9mZnNldCkpOworCWlmIChsZW5ndGggPiBhdmFpbCkgeworCQljb3B5bGVuID0g YXZhaWw7CisJCWZiLT50cnVuY2F0ZWQgPSAxOworCX0gZWxzZSB7CisJCWNvcHlsZW4gPSBsZW5n dGg7CisJfQorCWR1a19tZW1jcHlfdW5zYWZlKGZiLT5idWZmZXIgKyBmYi0+b2Zmc2V0LCBidWZm ZXIsIGNvcHlsZW4pOworCWZiLT5vZmZzZXQgKz0gY29weWxlbjsKK30KKworRFVLX0lOVEVSTkFM IHZvaWQgZHVrX2ZiX3B1dF9ieXRlKGR1a19maXhlZGJ1ZmZlciAqZmIsIGR1a191aW50OF90IHgp IHsKKwlkdWtfZmJfcHV0X2J5dGVzKGZiLCAoY29uc3QgZHVrX3VpbnQ4X3QgKikgJngsIDEpOwor fQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZmJfcHV0X2NzdHJpbmcoZHVrX2ZpeGVkYnVmZmVy ICpmYiwgY29uc3QgY2hhciAqeCkgeworCWR1a19mYl9wdXRfYnl0ZXMoZmIsIChjb25zdCBkdWtf dWludDhfdCAqKSB4LCAoZHVrX3NpemVfdCkgRFVLX1NUUkxFTih4KSk7Cit9CisKK0RVS19JTlRF Uk5BTCB2b2lkIGR1a19mYl9zcHJpbnRmKGR1a19maXhlZGJ1ZmZlciAqZmIsIGNvbnN0IGNoYXIg KmZtdCwgLi4uKSB7CisJZHVrX3NpemVfdCBhdmFpbDsKKwl2YV9saXN0IGFwOworCisJdmFfc3Rh cnQoYXAsIGZtdCk7CisJYXZhaWwgPSAoZmItPm9mZnNldCA+PSBmYi0+bGVuZ3RoID8gKGR1a19z aXplX3QpIDAgOiAoZHVrX3NpemVfdCkgKGZiLT5sZW5ndGggLSBmYi0+b2Zmc2V0KSk7CisJaWYg KGF2YWlsID4gMCkgeworCQlkdWtfaW50X3QgcmVzID0gKGR1a19pbnRfdCkgRFVLX1ZTTlBSSU5U RigoY2hhciAqKSAoZmItPmJ1ZmZlciArIGZiLT5vZmZzZXQpLCBhdmFpbCwgZm10LCBhcCk7CisJ CWlmIChyZXMgPCAwKSB7CisJCQkvKiBlcnJvciAqLworCQl9IGVsc2UgaWYgKChkdWtfc2l6ZV90 KSByZXMgPj0gYXZhaWwpIHsKKwkJCS8qIChtYXliZSkgdHJ1bmNhdGVkICovCisJCQlmYi0+b2Zm c2V0ICs9IGF2YWlsOworCQkJaWYgKChkdWtfc2l6ZV90KSByZXMgPiBhdmFpbCkgeworCQkJCS8q IGFjdHVhbCBjaGFycyBkcm9wcGVkIChub3QganVzdCBOVUwgdGVybSkgKi8KKwkJCQlmYi0+dHJ1 bmNhdGVkID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG5vcm1hbCAqLworCQkJZmItPm9m ZnNldCArPSAoZHVrX3NpemVfdCkgcmVzOworCQl9CisJfQorCXZhX2VuZChhcCk7Cit9CisKK0RV S19JTlRFUk5BTCB2b2lkIGR1a19mYl9wdXRfZnVuY3B0cihkdWtfZml4ZWRidWZmZXIgKmZiLCBk dWtfdWludDhfdCAqZnB0ciwgZHVrX3NpemVfdCBmcHRyX3NpemUpIHsKKwljaGFyIGJ1Zls2NCsx XTsKKwlkdWtfZGVidWdfZm9ybWF0X2Z1bmNwdHIoYnVmLCBzaXplb2YoYnVmKSwgZnB0ciwgZnB0 cl9zaXplKTsKKwlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IChjaGFyKSAwOworCWR1a19mYl9wdXRf Y3N0cmluZyhmYiwgYnVmKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2ZiX2lz X2Z1bGwoZHVrX2ZpeGVkYnVmZmVyICpmYikgeworCXJldHVybiAoZmItPm9mZnNldCA+PSBmYi0+ bGVuZ3RoKTsKK30KKworI2VuZGlmICAvKiBEVUtfVVNFX0RFQlVHICovCisvKgorICogIEN1c3Rv bSBmb3JtYXR0ZXIgZm9yIGRlYnVnIHByaW50aW5nLCBhbGxvd2luZyBEdWt0YXBlIHNwZWNpZmlj IGRhdGEKKyAqICBzdHJ1Y3R1cmVzIChzdWNoIGFzIHRhZ2dlZCB2YWx1ZXMgYW5kIGhlYXAgb2Jq ZWN0cykgdG8gYmUgcHJpbnRlZCB3aXRoCisgKiAgYSBuaWNlIGZvcm1hdCBzdHJpbmcuICBCZWNh dXNlIGRlYnVnIHByaW50aW5nIHNob3VsZCBub3QgYWZmZWN0IGV4ZWN1dGlvbgorICogIHN0YXRl LCBmb3JtYXR0aW5nIGhlcmUgbXVzdCBiZSBpbmRlcGVuZGVudCBvZiBleGVjdXRpb24gKHNlZSBp bXBsaWNhdGlvbnMKKyAqICBiZWxvdykgYW5kIG11c3Qgbm90IGFsbG9jYXRlIG1lbW9yeS4KKyAq CisgKiAgQ3VzdG9tIGZvcm1hdCB0YWdzIGJlZ2luIHdpdGggYSAnJSEnIHRvIHNhZmVseSBkaXN0 aW5ndWlzaCB0aGVtIGZyb20KKyAqICBzdGFuZGFyZCBmb3JtYXQgdGFncy4gIFRoZSBmb2xsb3dp bmcgY29udmVyc2lvbnMgYXJlIHN1cHBvcnRlZDoKKyAqCisgKiAgICAgJSFUICAgIHRhZ2dlZCB2 YWx1ZSAoZHVrX3R2YWwgKikKKyAqICAgICAlIU8gICAgaGVhcCBvYmplY3QgKGR1a19oZWFwaGRy ICopCisgKiAgICAgJSFJICAgIGRlY29kZWQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24KKyAqICAgICAl IUMgICAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gb3Bjb2RlIG5hbWUgKGFyZyBpcyBsb25nKQorICoK KyAqICBFdmVyeXRoaW5nIGlzIHNlcmlhbGl6ZWQgaW4gYSBKU09OLWxpa2UgbWFubmVyLiAgVGhl IGRlZmF1bHQgZGVwdGggaXMgb25lCisgKiAgbGV2ZWwsIGludGVybmFsIHByb3RvdHlwZSBpcyBu b3QgZm9sbG93ZWQsIGFuZCBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFyZSBub3QKKyAqICBzZXJpYWxp emVkLiAgVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgY2hhbmdlIHRoaXMgYmVoYXZpb3I6CisgKgor ICogICAgIEAgICAgICBwcmludCBwb2ludGVycworICogICAgICMgICAgICBwcmludCBiaW5hcnkg cmVwcmVzZW50YXRpb25zICh3aGVyZSBhcHBsaWNhYmxlKQorICogICAgIGQgICAgICBkZWVwIHRy YXZlcnNhbCBvZiBvd24gcHJvcGVydGllcyAobm90IHByb3RvdHlwZSkKKyAqICAgICBwICAgICAg Zm9sbG93IHByb3RvdHlwZSBjaGFpbiAodXNlbGVzcyB3aXRob3V0ICdkJykKKyAqICAgICBpICAg ICAgaW5jbHVkZSBpbnRlcm5hbCBwcm9wZXJ0aWVzIChvdGhlciB0aGFuIHByb3RvdHlwZSkKKyAq ICAgICB4ICAgICAgaGV4ZHVtcCBidWZmZXJzCisgKiAgICAgaCAgICAgIGhlYXZ5IGZvcm1hdHRp bmcKKyAqCisgKiAgRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIHNlcmlhbGl6ZXMgb2JqZWN0 cyByZWN1cnNpdmVseSwgYnV0IGRvZXMgbm90CisgKiAgZm9sbG93IHRoZSBwcm90b3R5cGUgY2hh aW4gbm9yIHByaW50IGludGVybmFsIHByb3BlcnRpZXM6ICIlIWRPIi4KKyAqCisgKiAgTm90ZXM6 CisgKgorICogICAgKiBTdGFuZGFyZCBzbnByaW50ZiByZXR1cm4gdmFsdWUgc2VtYW50aWNzIHNl ZW0gdG8gdmFyeS4gIFRoaXMKKyAqICAgICAgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgbnVt YmVyIG9mIGJ5dGVzIGl0IGFjdHVhbGx5IHdyb3RlCisgKiAgICAgIChleGNsdWRpbmcgdGhlIG51 bGwgdGVybWluYXRvcikuICBJZiByZXR2YWwgPT0gYnVmZmVyIHNpemUsCisgKiAgICAgIG91dHB1 dCB3YXMgdHJ1bmNhdGVkIChleGNlcHQgZm9yIGNvcm5lciBjYXNlcykuCisgKgorICogICAgKiBP dXRwdXQgZm9ybWF0IGlzIGludGVudGlvbmFsbHkgZGlmZmVyZW50IGZyb20gRUNNQVNjcmlwdAor ICogICAgICBmb3JtYXR0aW5nIHJlcXVpcmVtZW50cywgYXMgZm9ybWF0dGluZyBoZXJlIHNlcnZl cyBkZWJ1Z2dpbmcKKyAqICAgICAgb2YgaW50ZXJuYWxzLgorICoKKyAqICAgICogRGVwdGggY2hl Y2tpbmcgKGFuZCB1cGRhdGluZykgaXMgZG9uZSBpbiBlYWNoIHR5cGUgcHJpbnRlcgorICogICAg ICBzZXBhcmF0ZWx5LCB0byBhbGxvdyB0aGVtIHRvIGNhbGwgZWFjaCBvdGhlciBmcmVlbHkuCisg KgorICogICAgKiBTb21lIHBhdGhvbG9naWNhbCBzdHJ1Y3R1cmVzIG1pZ2h0IHRha2UgYWdlcyB0 byBwcmludCAoZS5nLgorICogICAgICBzZWxmIHJlY3Vyc2lvbiB3aXRoIDEwMCBwcm9wZXJ0aWVz IHBvaW50aW5nIHRvIHRoZSBvYmplY3QKKyAqICAgICAgaXRzZWxmKS4gIFRvIGd1YXJkIGFnYWlu c3QgdGhlc2UsIGVhY2ggcHJpbnRlciBhbHNvIGNoZWNrcworICogICAgICB3aGV0aGVyIHRoZSBv dXRwdXQgYnVmZmVyIGlzIGZ1bGw7IGlmIHNvLCBlYXJseSBleGl0LgorICoKKyAqICAgICogUmVm ZXJlbmNlIGxvb3BzIGFyZSBkZXRlY3RlZCB1c2luZyBhIGxvb3Agc3RhY2suCisgKi8KKworLyog I2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX0RFQlVHKQorCisvKiAjaW5jbHVkZSBzdGRpby5oIC0+IGFscmVhZHkgaW5j bHVkZWQgKi8KKy8qICNpbmNsdWRlIHN0ZGFyZy5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKworLyogbGlzdCBvZiBjb252ZXJzaW9uIHNwZWNpZmllcnMgdGhh dCB0ZXJtaW5hdGUgYSBmb3JtYXQgdGFnOworICogdGhpcyBpcyB1bmZvcnR1bmF0ZWx5IGd1ZXNz d29yay4KKyAqLworI2RlZmluZSBEVUtfX0FMTE9XRURfU1RBTkRBUkRfU1BFQ0lGSUVSUyAgImRp b3V4WGVFZkZnR2FBY3NDU3BubSIKKworLyogbWF4aW11bSBsZW5ndGggb2Ygc3RhbmRhcmQgZm9y bWF0IHRhZyB0aGF0IHdlIHN1cHBvcnQgKi8KKyNkZWZpbmUgRFVLX19NQVhfRk9STUFUX1RBR19M RU5HVEggIDMyCisKKy8qIGhlYXBvYmogcmVjdXJzaW9uIGRlcHRoIHdoZW4gZGVlcCBwcmludGlu ZyBpcyBzZWxlY3RlZCAqLworI2RlZmluZSBEVUtfX0RFRVBfREVQVEhfTElNSVQgIDgKKworLyog bWF4aW11bSByZWN1cnNpb24gZGVwdGggZm9yIGxvb3AgZGV0ZWN0aW9uIHN0YWNrcyAqLworI2Rl ZmluZSBEVUtfX0xPT1BfU1RBQ0tfREVQVEggIDI1NgorCisvKiBtdXN0IG1hdGNoIGJ5dGVjb2Rl IGRlZmluZXMgbm93OyBidWlsZCBhdXRvZ2VuZXJhdGU/ICovCitEVUtfTE9DQUwgY29uc3QgY2hh ciAqIGNvbnN0IGR1a19fYmNfb3B0YWJbMjU2XSA9IHsKKwkiTERSRUciLCAiU1RSRUciLCAiSlVN UCIsICJMRENPTlNUIiwgIkxESU5UIiwgIkxESU5UWCIsICJMRFRISVMiLCAiTERVTkRFRiIsCisJ IkxETlVMTCIsICJMRFRSVUUiLCAiTERGQUxTRSIsICJHRVRWQVIiLCAiQk5PVCIsICJMTk9UIiwg IlVOTSIsICJVTlAiLAorCSJFUV9SUiIsICJFUV9DUiIsICJFUV9SQyIsICJFUV9DQyIsICJORVFf UlIiLCAiTkVRX0NSIiwgIk5FUV9SQyIsICJORVFfQ0MiLAorCSJTRVFfUlIiLCAiU0VRX0NSIiwg IlNFUV9SQyIsICJTRVFfQ0MiLCAiU05FUV9SUiIsICJTTkVRX0NSIiwgIlNORVFfUkMiLCAiU05F UV9DQyIsCisKKwkiR1RfUlIiLCAiR1RfQ1IiLCAiR1RfUkMiLCAiR1RfQ0MiLCAiR0VfUlIiLCAi R0VfQ1IiLCAiR0VfUkMiLCAiR0VfQ0MiLAorCSJMVF9SUiIsICJMVF9DUiIsICJMVF9SQyIsICJM VF9DQyIsICJMRV9SUiIsICJMRV9DUiIsICJMRV9SQyIsICJMRV9DQyIsCisJIklGVFJVRV9SIiwg IklGVFJVRV9DIiwgIklGRkFMU0VfUiIsICJJRkZBTFNFX0MiLCAiQUREX1JSIiwgIkFERF9DUiIs ICJBRERfUkMiLCAiQUREX0NDIiwKKwkiU1VCX1JSIiwgIlNVQl9DUiIsICJTVUJfUkMiLCAiU1VC X0NDIiwgIk1VTF9SUiIsICJNVUxfQ1IiLCAiTVVMX1JDIiwgIk1VTF9DQyIsCisKKwkiRElWX1JS IiwgIkRJVl9DUiIsICJESVZfUkMiLCAiRElWX0NDIiwgIk1PRF9SUiIsICJNT0RfQ1IiLCAiTU9E X1JDIiwgIk1PRF9DQyIsCisJIkVYUF9SUiIsICJFWFBfQ1IiLCAiRVhQX1JDIiwgIkVYUF9DQyIs ICJCQU5EX1JSIiwgIkJBTkRfQ1IiLCAiQkFORF9SQyIsICJCQU5EX0NDIiwKKwkiQk9SX1JSIiwg IkJPUl9DUiIsICJCT1JfUkMiLCAiQk9SX0NDIiwgIkJYT1JfUlIiLCAiQlhPUl9DUiIsICJCWE9S X1JDIiwgIkJYT1JfQ0MiLAorCSJCQVNMX1JSIiwgIkJBU0xfQ1IiLCAiQkFTTF9SQyIsICJCQVNM X0NDIiwgIkJMU1JfUlIiLCAiQkxTUl9DUiIsICJCTFNSX1JDIiwgIkJMU1JfQ0MiLAorCisJIkJB U1JfUlIiLCAiQkFTUl9DUiIsICJCQVNSX1JDIiwgIkJBU1JfQ0MiLCAiSU5TVE9GX1JSIiwgIklO U1RPRl9DUiIsICJJTlNUT0ZfUkMiLCAiSU5TVE9GX0NDIiwKKwkiSU5fUlIiLCAiSU5fQ1IiLCAi SU5fUkMiLCAiSU5fQ0MiLCAiR0VUUFJPUF9SUiIsICJHRVRQUk9QX0NSIiwgIkdFVFBST1BfUkMi LCAiR0VUUFJPUF9DQyIsCisJIlBVVFBST1BfUlIiLCAiUFVUUFJPUF9DUiIsICJQVVRQUk9QX1JD IiwgIlBVVFBST1BfQ0MiLCAiREVMUFJPUF9SUiIsICJERUxQUk9QX0NSIiwgIkRFTFBST1BfUkMi LCAiREVMUFJPUF9DQyIsCisJIlBSRUlOQ1IiLCAiUFJFREVDUiIsICJQT1NUSU5DUiIsICJQT1NU REVDUiIsICJQUkVJTkNWIiwgIlBSRURFQ1YiLCAiUE9TVElOQ1YiLCAiUE9TVERFQ1YiLAorCisJ IlBSRUlOQ1BfUlIiLCAiUFJFSU5DUF9DUiIsICJQUkVJTkNQX1JDIiwgIlBSRUlOQ1BfQ0MiLCAi UFJFREVDUF9SUiIsICJQUkVERUNQX0NSIiwgIlBSRURFQ1BfUkMiLCAiUFJFREVDUF9DQyIsCisJ IlBPU1RJTkNQX1JSIiwgIlBPU1RJTkNQX0NSIiwgIlBPU1RJTkNQX1JDIiwgIlBPU1RJTkNQX0ND IiwgIlBPU1RERUNQX1JSIiwgIlBPU1RERUNQX0NSIiwgIlBPU1RERUNQX1JDIiwgIlBPU1RERUNQ X0NDIiwKKwkiREVDTFZBUl9SUiIsICJERUNMVkFSX0NSIiwgIkRFQ0xWQVJfUkMiLCAiREVDTFZB Ul9DQyIsICJSRUdFWFBfUlIiLCAiUkVHRVhQX1JDIiwgIlJFR0VYUF9DUiIsICJSRUdFWFBfQ0Mi LAorCSJDTE9TVVJFIiwgIlRZUEVPRiIsICJUWVBFT0ZJRCIsICJQVVRWQVIiLCAiREVMVkFSIiwg IlJFVFJFRyIsICJSRVRVTkRFRiIsICJSRVRDT05TVCIsCisKKwkiUkVUQ09OU1ROIiwgIkxBQkVM IiwgIkVORExBQkVMIiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwgIlRSWUNBVENIIiwgIkVORFRSWSIs ICJFTkRDQVRDSCIsCisJIkVOREZJTiIsICJUSFJPVyIsICJJTlZMSFMiLCAiQ1NSRUciLCAiQ1NW QVJfUlIiLCAiQ1NWQVJfQ1IiLCAiQ1NWQVJfUkMiLCAiQ1NWQVJfQ0MiLAorCSJDQUxMMCIsICJD QUxMMSIsICJDQUxMMiIsICJDQUxMMyIsICJDQUxMNCIsICJDQUxMNSIsICJDQUxMNiIsICJDQUxM NyIsCisJIkNBTEw4IiwgIkNBTEw5IiwgIkNBTEwxMCIsICJDQUxMMTEiLCAiQ0FMTDEyIiwgIkNB TEwxMyIsICJDQUxMMTQiLCAiQ0FMTDE1IiwKKworCSJORVdPQkoiLCAiTkVXQVJSIiwgIk1QVVRP QkoiLCAiTVBVVE9CSkkiLCAiSU5JVFNFVCIsICJJTklUR0VUIiwgIk1QVVRBUlIiLCAiTVBVVEFS UkkiLAorCSJTRVRBTEVOIiwgIklOSVRFTlVNIiwgIk5FWFRFTlVNIiwgIk5FV1RBUkdFVCIsICJE RUJVR0dFUiIsICJOT1AiLCAiSU5WQUxJRCIsICJVTlVTRUQyMDciLAorCSJHRVRQUk9QQ19SUiIs ICJHRVRQUk9QQ19DUiIsICJHRVRQUk9QQ19SQyIsICJHRVRQUk9QQ19DQyIsICJVTlVTRUQyMTIi LCAiVU5VU0VEMjEzIiwgIlVOVVNFRDIxNCIsICJVTlVTRUQyMTUiLAorCSJVTlVTRUQyMTYiLCAi VU5VU0VEMjE3IiwgIlVOVVNFRDIxOCIsICJVTlVTRUQyMTkiLCAiVU5VU0VEMjIwIiwgIlVOVVNF RDIyMSIsICJVTlVTRUQyMjIiLCAiVU5VU0VEMjIzIiwKKworCSJVTlVTRUQyMjQiLCAiVU5VU0VE MjI1IiwgIlVOVVNFRDIyNiIsICJVTlVTRUQyMjciLCAiVU5VU0VEMjI4IiwgIlVOVVNFRDIyOSIs ICJVTlVTRUQyMzAiLCAiVU5VU0VEMjMxIiwKKwkiVU5VU0VEMjMyIiwgIlVOVVNFRDIzMyIsICJV TlVTRUQyMzQiLCAiVU5VU0VEMjM1IiwgIlVOVVNFRDIzNiIsICJVTlVTRUQyMzciLCAiVU5VU0VE MjM4IiwgIlVOVVNFRDIzOSIsCisJIlVOVVNFRDI0MCIsICJVTlVTRUQyNDEiLCAiVU5VU0VEMjQy IiwgIlVOVVNFRDI0MyIsICJVTlVTRUQyNDQiLCAiVU5VU0VEMjQ1IiwgIlVOVVNFRDI0NiIsICJV TlVTRUQyNDciLAorCSJVTlVTRUQyNDgiLCAiVU5VU0VEMjQ5IiwgIlVOVVNFRDI1MCIsICJVTlVT RUQyNTEiLCAiVU5VU0VEMjUyIiwgIlVOVVNFRDI1MyIsICJVTlVTRUQyNTQiLCAiVU5VU0VEMjU1 IgorfTsKKwordHlwZWRlZiBzdHJ1Y3QgZHVrX19kcHJpbnRfc3RhdGUgZHVrX19kcHJpbnRfc3Rh dGU7CitzdHJ1Y3QgZHVrX19kcHJpbnRfc3RhdGUgeworCWR1a19maXhlZGJ1ZmZlciAqZmI7CisK KwkvKiBsb29wX3N0YWNrX2luZGV4IGNvdWxkIGJlIHBlcmhhcHMgYmUgcmVwbGFjZWQgYnkgJ2Rl cHRoJywgYnV0IGl0J3MgbmljZQorCSAqIHRvIG5vdCBjb3VwbGUgdGhlc2UgdHdvIG1lY2hhbmlz bXMgdW5uZWNlc3NhcmlseS4KKwkgKi8KKwlkdWtfaG9iamVjdCAqbG9vcF9zdGFja1tEVUtfX0xP T1BfU1RBQ0tfREVQVEhdOworCWR1a19pbnRfdCBsb29wX3N0YWNrX2luZGV4OworCWR1a19pbnRf dCBsb29wX3N0YWNrX2xpbWl0OworCisJZHVrX2ludF90IGRlcHRoOworCWR1a19pbnRfdCBkZXB0 aF9saW1pdDsKKworCWR1a19ib29sX3QgcG9pbnRlcjsKKwlkdWtfYm9vbF90IGhlYXZ5OworCWR1 a19ib29sX3QgYmluYXJ5OworCWR1a19ib29sX3QgZm9sbG93X3Byb3RvOworCWR1a19ib29sX3Qg aW50ZXJuYWw7CisJZHVrX2Jvb2xfdCBoZXhkdW1wOworfTsKKworLyogaGVscGVycyAqLworRFVL X0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3ByaW50X2hzdHJpbmcoZHVrX19kcHJpbnRfc3RhdGUgKnN0 LCBkdWtfaHN0cmluZyAqaywgZHVrX2Jvb2xfdCBxdW90ZXMpOworRFVLX0xPQ0FMX0RFQ0wgdm9p ZCBkdWtfX3ByaW50X2hvYmplY3QoZHVrX19kcHJpbnRfc3RhdGUgKnN0LCBkdWtfaG9iamVjdCAq aCk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fcHJpbnRfaGJ1ZmZlcihkdWtfX2RwcmludF9z dGF0ZSAqc3QsIGR1a19oYnVmZmVyICpoKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19wcmlu dF90dmFsKGR1a19fZHByaW50X3N0YXRlICpzdCwgZHVrX3R2YWwgKnR2KTsKK0RVS19MT0NBTF9E RUNMIHZvaWQgZHVrX19wcmludF9pbnN0cihkdWtfX2RwcmludF9zdGF0ZSAqc3QsIGR1a19pbnN0 cl90IGlucyk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fcHJpbnRfaGVhcGhkcihkdWtfX2Rw cmludF9zdGF0ZSAqc3QsIGR1a19oZWFwaGRyICpoKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVr X19wcmludF9zaGFyZWRfaGVhcGhkcihkdWtfX2RwcmludF9zdGF0ZSAqc3QsIGR1a19oZWFwaGRy ICpoKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19wcmludF9zaGFyZWRfaGVhcGhkcl9zdHJp bmcoZHVrX19kcHJpbnRfc3RhdGUgKnN0LCBkdWtfaGVhcGhkcl9zdHJpbmcgKmgpOworCitEVUtf TE9DQUwgdm9pZCBkdWtfX3ByaW50X3NoYXJlZF9oZWFwaGRyKGR1a19fZHByaW50X3N0YXRlICpz dCwgZHVrX2hlYXBoZHIgKmgpIHsKKwlkdWtfZml4ZWRidWZmZXIgKmZiID0gc3QtPmZiOworCisJ aWYgKHN0LT5oZWF2eSkgeworCQlkdWtfZmJfc3ByaW50ZihmYiwgIiglcCkiLCAodm9pZCAqKSBo KTsKKwl9CisKKwlpZiAoIWgpIHsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdC0+YmluYXJ5KSB7 CisJCWR1a19zaXplX3QgaTsKKwkJZHVrX2ZiX3B1dF9ieXRlKGZiLCAoZHVrX3VpbnQ4X3QpIERV S19BU0NfTEJSQUNLRVQpOworCQlmb3IgKGkgPSAwOyBpIDwgKGR1a19zaXplX3QpIHNpemVvZigq aCk7IGkrKykgeworCQkJZHVrX2ZiX3NwcmludGYoZmIsICIlMDJseCIsICh1bnNpZ25lZCBsb25n KSAoKGR1a191aW50OF90ICopaClbaV0pOworCQl9CisJCWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1 a191aW50OF90KSBEVUtfQVNDX1JCUkFDS0VUKTsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19VU0Vf UkVGRVJFTkNFX0NPVU5USU5HKSAgLyogY3VycmVudGx5IGltcGxpY2l0bHkgYWxzbyBEVUtfVVNF X0RPVUJMRV9MSU5LRURfSEVBUCAqLworCWlmIChzdC0+aGVhdnkpIHsKKwkJZHVrX2ZiX3Nwcmlu dGYoZmIsICJbaF9uZXh0PSVwLGhfcHJldj0lcCxoX3JlZmNvdW50PSVsdSxoX2ZsYWdzPSUwOGx4 LHR5cGU9JWxkLCIKKwkJICAgICAgICAgICAgICAgInJlYWNoYWJsZT0lbGQsdGVtcHJvb3Q9JWxk LGZpbmFsaXphYmxlPSVsZCxmaW5hbGl6ZWQ9JWxkXSIsCisJCSAgICAgICAgICAgICAgICh2b2lk ICopIERVS19IRUFQSERSX0dFVF9ORVhUKE5VTEwsIGgpLAorCQkgICAgICAgICAgICAgICAodm9p ZCAqKSBEVUtfSEVBUEhEUl9HRVRfUFJFVihOVUxMLCBoKSwKKwkJICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpIERVS19IRUFQSERSX0dFVF9SRUZDT1VOVChoKSwKKwkJICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGxvbmcpIERVS19IRUFQSERSX0dFVF9GTEFHUyhoKSwKKwkJICAgICAgICAg ICAgICAgKGxvbmcpIERVS19IRUFQSERSX0dFVF9UWVBFKGgpLAorCQkgICAgICAgICAgICAgICAo bG9uZykgKERVS19IRUFQSERSX0hBU19SRUFDSEFCTEUoaCkgPyAxIDogMCksCisJCSAgICAgICAg ICAgICAgIChsb25nKSAoRFVLX0hFQVBIRFJfSEFTX1RFTVBST09UKGgpID8gMSA6IDApLAorCQkg ICAgICAgICAgICAgICAobG9uZykgKERVS19IRUFQSERSX0hBU19GSU5BTElaQUJMRShoKSA/IDEg OiAwKSwKKwkJICAgICAgICAgICAgICAgKGxvbmcpIChEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkVE KGgpID8gMSA6IDApKTsKKwl9CisjZWxzZQorCWlmIChzdC0+aGVhdnkpIHsKKwkJZHVrX2ZiX3Nw cmludGYoZmIsICJbaF9uZXh0PSVwLGhfZmxhZ3M9JTA4bHgsdHlwZT0lbGQscmVhY2hhYmxlPSVs ZCx0ZW1wcm9vdD0lbGQsZmluYWxpemFibGU9JWxkLGZpbmFsaXplZD0lbGRdIiwKKwkJICAgICAg ICAgICAgICAgKHZvaWQgKikgRFVLX0hFQVBIRFJfR0VUX05FWFQoTlVMTCwgaCksCisJCSAgICAg ICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBEVUtfSEVBUEhEUl9HRVRfRkxBR1MoaCksCisJCSAg ICAgICAgICAgICAgIChsb25nKSBEVUtfSEVBUEhEUl9HRVRfVFlQRShoKSwKKwkJICAgICAgICAg ICAgICAgKGxvbmcpIChEVUtfSEVBUEhEUl9IQVNfUkVBQ0hBQkxFKGgpID8gMSA6IDApLAorCQkg ICAgICAgICAgICAgICAobG9uZykgKERVS19IRUFQSERSX0hBU19URU1QUk9PVChoKSA/IDEgOiAw KSwKKwkJICAgICAgICAgICAgICAgKGxvbmcpIChEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkFCTEUo aCkgPyAxIDogMCksCisJCSAgICAgICAgICAgICAgIChsb25nKSAoRFVLX0hFQVBIRFJfSEFTX0ZJ TkFMSVpFRChoKSA/IDEgOiAwKSk7CisJfQorI2VuZGlmCit9CisKK0RVS19MT0NBTCB2b2lkIGR1 a19fcHJpbnRfc2hhcmVkX2hlYXBoZHJfc3RyaW5nKGR1a19fZHByaW50X3N0YXRlICpzdCwgZHVr X2hlYXBoZHJfc3RyaW5nICpoKSB7CisJZHVrX2ZpeGVkYnVmZmVyICpmYiA9IHN0LT5mYjsKKwor CWlmIChzdC0+aGVhdnkpIHsKKwkJZHVrX2ZiX3NwcmludGYoZmIsICIoJXApIiwgKHZvaWQgKikg aCk7CisJfQorCisJaWYgKCFoKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3QtPmJpbmFyeSkg eworCQlkdWtfc2l6ZV90IGk7CisJCWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1a191aW50OF90KSBE VUtfQVNDX0xCUkFDS0VUKTsKKwkJZm9yIChpID0gMDsgaSA8IChkdWtfc2l6ZV90KSBzaXplb2Yo KmgpOyBpKyspIHsKKwkJCWR1a19mYl9zcHJpbnRmKGZiLCAiJTAybHgiLCAodW5zaWduZWQgbG9u ZykgKChkdWtfdWludDhfdCAqKWgpW2ldKTsKKwkJfQorCQlkdWtfZmJfcHV0X2J5dGUoZmIsIChk dWtfdWludDhfdCkgRFVLX0FTQ19SQlJBQ0tFVCk7CisJfQorCisjaWYgZGVmaW5lZChEVUtfVVNF X1JFRkVSRU5DRV9DT1VOVElORykKKwlpZiAoc3QtPmhlYXZ5KSB7CisJCWR1a19mYl9zcHJpbnRm KGZiLCAiW2hfcmVmY291bnQ9JWx1LGhfZmxhZ3M9JTA4bHgsdHlwZT0lbGQscmVhY2hhYmxlPSVs ZCx0ZW1wcm9vdD0lbGQsZmluYWxpemFibGU9JWxkLGZpbmFsaXplZD0lbGRdIiwKKwkJICAgICAg ICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIERVS19IRUFQSERSX0dFVF9SRUZDT1VOVCgoZHVrX2hl YXBoZHIgKikgaCksCisJCSAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBEVUtfSEVBUEhE Ul9HRVRfRkxBR1MoKGR1a19oZWFwaGRyICopIGgpLAorCQkgICAgICAgICAgICAgICAobG9uZykg RFVLX0hFQVBIRFJfR0VUX1RZUEUoKGR1a19oZWFwaGRyICopIGgpLAorCQkgICAgICAgICAgICAg ICAobG9uZykgKERVS19IRUFQSERSX0hBU19SRUFDSEFCTEUoKGR1a19oZWFwaGRyICopIGgpID8g MSA6IDApLAorCQkgICAgICAgICAgICAgICAobG9uZykgKERVS19IRUFQSERSX0hBU19URU1QUk9P VCgoZHVrX2hlYXBoZHIgKikgaCkgPyAxIDogMCksCisJCSAgICAgICAgICAgICAgIChsb25nKSAo RFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpBQkxFKChkdWtfaGVhcGhkciAqKSBoKSA/IDEgOiAwKSwK KwkJICAgICAgICAgICAgICAgKGxvbmcpIChEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkVEKChkdWtf aGVhcGhkciAqKSBoKSA/IDEgOiAwKSk7CisJfQorI2Vsc2UKKwlpZiAoc3QtPmhlYXZ5KSB7CisJ CWR1a19mYl9zcHJpbnRmKGZiLCAiW2hfZmxhZ3M9JTA4bHgsdHlwZT0lbGQscmVhY2hhYmxlPSVs ZCx0ZW1wcm9vdD0lbGQsZmluYWxpemFibGU9JWxkLGZpbmFsaXplZD0lbGRdIiwKKwkJICAgICAg ICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIERVS19IRUFQSERSX0dFVF9GTEFHUygoZHVrX2hlYXBo ZHIgKikgaCksCisJCSAgICAgICAgICAgICAgIChsb25nKSBEVUtfSEVBUEhEUl9HRVRfVFlQRSgo ZHVrX2hlYXBoZHIgKikgaCksCisJCSAgICAgICAgICAgICAgIChsb25nKSAoRFVLX0hFQVBIRFJf SEFTX1JFQUNIQUJMRSgoZHVrX2hlYXBoZHIgKikgaCkgPyAxIDogMCksCisJCSAgICAgICAgICAg ICAgIChsb25nKSAoRFVLX0hFQVBIRFJfSEFTX1RFTVBST09UKChkdWtfaGVhcGhkciAqKSBoKSA/ IDEgOiAwKSwKKwkJICAgICAgICAgICAgICAgKGxvbmcpIChEVUtfSEVBUEhEUl9IQVNfRklOQUxJ WkFCTEUoKGR1a19oZWFwaGRyICopIGgpID8gMSA6IDApLAorCQkgICAgICAgICAgICAgICAobG9u ZykgKERVS19IRUFQSERSX0hBU19GSU5BTElaRUQoKGR1a19oZWFwaGRyICopIGgpID8gMSA6IDAp KTsKKwl9CisjZW5kaWYKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19wcmludF9oc3RyaW5nKGR1 a19fZHByaW50X3N0YXRlICpzdCwgZHVrX2hzdHJpbmcgKmgsIGR1a19ib29sX3QgcXVvdGVzKSB7 CisJZHVrX2ZpeGVkYnVmZmVyICpmYiA9IHN0LT5mYjsKKwljb25zdCBkdWtfdWludDhfdCAqcDsK Kwljb25zdCBkdWtfdWludDhfdCAqcF9lbmQ7CisKKwkvKiB0ZXJtaW5hbCB0eXBlOiBubyBkZXB0 aCBjaGVjayAqLworCisJaWYgKGR1a19mYl9pc19mdWxsKGZiKSkgeworCQlyZXR1cm47CisJfQor CisJZHVrX19wcmludF9zaGFyZWRfaGVhcGhkcl9zdHJpbmcoc3QsICZoLT5oZHIpOworCisJaWYg KCFoKSB7CisJCWR1a19mYl9wdXRfY3N0cmluZyhmYiwgIk5VTEwiKTsKKwkJcmV0dXJuOworCX0K KworCXAgPSBEVUtfSFNUUklOR19HRVRfREFUQShoKTsKKwlwX2VuZCA9IHAgKyBEVUtfSFNUUklO R19HRVRfQllURUxFTihoKTsKKworCWlmIChwX2VuZCA+IHAgJiYgcFswXSA9PSBEVUtfQVNDX1VO REVSU0NPUkUpIHsKKwkJLyogSWYgcHJvcGVydHkga2V5IGJlZ2lucyB3aXRoIHVuZGVyc2NvcmUs IGVuY29kZSBpdCB3aXRoCisJCSAqIGZvcmNlZCBxdW90ZXMgKGUuZy4gIl9Gb28iKSB0byBkaXN0 aW5ndWlzaCBpdCBmcm9tIGVuY29kZWQKKwkJICogaW50ZXJuYWwgcHJvcGVydGllcyAoZS5nLiBc eDgyQmFyIC0+IF9CYXIpLgorCQkgKi8KKwkJcXVvdGVzID0gMTsKKwl9CisKKwlpZiAocXVvdGVz KSB7CisJCWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1a191aW50OF90KSBEVUtfQVNDX0RPVUJMRVFV T1RFKTsKKwl9CisJd2hpbGUgKHAgPCBwX2VuZCkgeworCQlkdWtfdWludDhfdCBjaCA9ICpwKys7 CisKKwkJLyogdHdvIHNwZWNpYWwgZXNjYXBlczogJ1wnIGFuZCAnIicsIG90aGVyIHByaW50YWJs ZXMgYXMgaXMgKi8KKwkJaWYgKGNoID09ICdcXCcpIHsKKwkJCWR1a19mYl9zcHJpbnRmKGZiLCAi XFxcXCIpOworCQl9IGVsc2UgaWYgKGNoID09ICciJykgeworCQkJZHVrX2ZiX3NwcmludGYoZmIs ICJcXFwiIik7CisJCX0gZWxzZSBpZiAoY2ggPj0gMHgyMCAmJiBjaCA8PSAweDdlKSB7CisJCQlk dWtfZmJfcHV0X2J5dGUoZmIsIGNoKTsKKwkJfSBlbHNlIGlmIChjaCA9PSAweDgyICYmICFxdW90 ZXMpIHsKKwkJCS8qIGVuY29kZSBceDgyQmFyIGFzIF9CYXIgaWYgbm8gcXVvdGVzIGFyZQorCQkJ ICogYXBwbGllZCwgdGhpcyBpcyBmb3IgcmVhZGFibGUgaW50ZXJuYWwga2V5cy4KKwkJCSAqLwor CQkJZHVrX2ZiX3B1dF9ieXRlKGZiLCAoZHVrX3VpbnQ4X3QpIERVS19BU0NfVU5ERVJTQ09SRSk7 CisJCX0gZWxzZSB7CisJCQlkdWtfZmJfc3ByaW50ZihmYiwgIlxceCUwMmx4IiwgKHVuc2lnbmVk IGxvbmcpIGNoKTsKKwkJfQorCX0KKwlpZiAocXVvdGVzKSB7CisJCWR1a19mYl9wdXRfYnl0ZShm YiwgKGR1a191aW50OF90KSBEVUtfQVNDX0RPVUJMRVFVT1RFKTsKKwl9CisjaWYgZGVmaW5lZChE VUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwkvKiBYWFg6IGxpbWl0IHRvIHF1b3RlZCBzdHJp bmdzIG9ubHksIHRvIHNhdmUga2V5cyBmcm9tIGJlaW5nIGNsdXR0ZXJlZD8gKi8KKwlkdWtfZmJf c3ByaW50ZihmYiwgIi8lbHUiLCAodW5zaWduZWQgbG9uZykgRFVLX0hFQVBIRFJfR0VUX1JFRkNP VU5UKCZoLT5oZHIpKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIERVS19fQ09NTUEoKSAgZG8geyBc CisJCWlmIChmaXJzdCkgeyBcCisJCQlmaXJzdCA9IDA7IFwKKwkJfSBlbHNlIHsgXAorCQkJZHVr X2ZiX3B1dF9ieXRlKGZiLCAoZHVrX3VpbnQ4X3QpIERVS19BU0NfQ09NTUEpOyBcCisJCX0gXAor CX0gd2hpbGUgKDApCisKK0RVS19MT0NBTCB2b2lkIGR1a19fcHJpbnRfaG9iamVjdChkdWtfX2Rw cmludF9zdGF0ZSAqc3QsIGR1a19ob2JqZWN0ICpoKSB7CisJZHVrX2ZpeGVkYnVmZmVyICpmYiA9 IHN0LT5mYjsKKwlkdWtfdWludF9mYXN0MzJfdCBpOworCWR1a190dmFsICp0djsKKwlkdWtfaHN0 cmluZyAqa2V5OworCWR1a19ib29sX3QgZmlyc3QgPSAxOworCWNvbnN0IGNoYXIgKmJyYWNlMSA9 ICJ7IjsKKwljb25zdCBjaGFyICpicmFjZTIgPSAifSI7CisJZHVrX2Jvb2xfdCBwdXNoZWRfbG9v cHN0YWNrID0gMDsKKworCWlmIChkdWtfZmJfaXNfZnVsbChmYikpIHsKKwkJcmV0dXJuOworCX0K KworCWR1a19fcHJpbnRfc2hhcmVkX2hlYXBoZHIoc3QsICZoLT5oZHIpOworCisJaWYgKGggJiYg RFVLX0hPQkpFQ1RfSEFTX0FSUkFZX1BBUlQoaCkpIHsKKwkJYnJhY2UxID0gIlsiOworCQlicmFj ZTIgPSAiXSI7CisJfQorCisJaWYgKCFoKSB7CisJCWR1a19mYl9wdXRfY3N0cmluZyhmYiwgIk5V TEwiKTsKKwkJZ290byBmaW5pc2hlZDsKKwl9CisKKwlpZiAoc3QtPmRlcHRoID49IHN0LT5kZXB0 aF9saW1pdCkgeworCQljb25zdCBjaGFyICpzdWJ0eXBlID0gImdlbmVyaWMiOworCisJCWlmIChE VUtfSE9CSkVDVF9JU19DT01QRlVOQyhoKSkgeworCQkJc3VidHlwZSA9ICJjb21wZnVuYyI7CisJ CX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfTkFURlVOQyhoKSkgeworCQkJc3VidHlwZSA9ICJu YXRmdW5jIjsKKwkJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19USFJFQUQoaCkpIHsKKwkJCXN1 YnR5cGUgPSAidGhyZWFkIjsKKwkJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19CVUZPQkooaCkp IHsKKwkJCXN1YnR5cGUgPSAiYnVmb2JqIjsKKwkJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19B UlJBWShoKSkgeworCQkJc3VidHlwZSA9ICJhcnJheSI7CisJCX0KKwkJZHVrX2ZiX3NwcmludGYo ZmIsICIlc29iamVjdC8lcyAlcCVzIiwgKGNvbnN0IGNoYXIgKikgYnJhY2UxLCBzdWJ0eXBlLCAo dm9pZCAqKSBoLCAoY29uc3QgY2hhciAqKSBicmFjZTIpOworCQlyZXR1cm47CisJfQorCisJZm9y IChpID0gMDsgaSA8IChkdWtfdWludF9mYXN0MzJfdCkgc3QtPmxvb3Bfc3RhY2tfaW5kZXg7IGkr KykgeworCQlpZiAoc3QtPmxvb3Bfc3RhY2tbaV0gPT0gaCkgeworCQkJZHVrX2ZiX3NwcmludGYo ZmIsICIlc0xPT1A6JXAlcyIsIChjb25zdCBjaGFyICopIGJyYWNlMSwgKHZvaWQgKikgaCwgKGNv bnN0IGNoYXIgKikgYnJhY2UyKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGFmdGVyIHRo aXMsIHJldHVybiBwYXRocyBzaG91bGQgJ2dvdG8gZmluaXNoZWQnIGZvciBkZWNyZW1lbnQgKi8K KwlzdC0+ZGVwdGgrKzsKKworCWlmIChzdC0+bG9vcF9zdGFja19pbmRleCA+PSBzdC0+bG9vcF9z dGFja19saW1pdCkgeworCQlkdWtfZmJfc3ByaW50ZihmYiwgIiVzT1VULU9GLUxPT1AtU1RBQ0sl cyIsIChjb25zdCBjaGFyICopIGJyYWNlMSwgKGNvbnN0IGNoYXIgKikgYnJhY2UyKTsKKwkJZ290 byBmaW5pc2hlZDsKKwl9CisJc3QtPmxvb3Bfc3RhY2tbc3QtPmxvb3Bfc3RhY2tfaW5kZXgrK10g PSBoOworCXB1c2hlZF9sb29wc3RhY2sgPSAxOworCisJLyoKKwkgKiAgTm90YXRpb246IGRvdWJs ZSB1bmRlcnNjb3JlIHVzZWQgZm9yIGludGVybmFsIHByb3BlcnRpZXMgd2hpY2ggYXJlIG5vdAor CSAqICBzdG9yZWQgaW4gdGhlIHByb3BlcnR5IGFsbG9jYXRpb24gKGUuZy4gJ19fdmFsc3RhY2sn KS4KKwkgKi8KKworCWR1a19mYl9wdXRfY3N0cmluZyhmYiwgYnJhY2UxKTsKKworCWlmIChEVUtf SE9CSkVDVF9HRVRfUFJPUFMoTlVMTCwgaCkpIHsKKwkJZHVrX3VpbnQzMl90IGFfbGltaXQ7CisK KwkJYV9saW1pdCA9IERVS19IT0JKRUNUX0dFVF9BU0laRShoKTsKKwkJaWYgKHN0LT5pbnRlcm5h bCkgeworCQkJLyogZHVtcCBhbGwgYWxsb2NhdGVkIGVudHJpZXMsIHVudXNlZCBlbnRyaWVzIHBy aW50IGFzICd1bnVzZWQnLAorCQkJICogbm90ZSB0aGF0IHRoZXNlIG1heSBleHRlbmQgYmV5b25k IGN1cnJlbnQgJ2xlbmd0aCcgYW5kIGxvb2sKKwkJCSAqIGEgYml0IGZ1bm55LgorCQkJICovCisJ CX0gZWxzZSB7CisJCQkvKiBsZWF2ZSBvdXQgdHJhaWxpbmcgJ3VudXNlZCcgZWxlbWVudHMgKi8K KwkJCXdoaWxlIChhX2xpbWl0ID4gMCkgeworCQkJCXR2ID0gRFVLX0hPQkpFQ1RfQV9HRVRfVkFM VUVfUFRSKE5VTEwsIGgsIGFfbGltaXQgLSAxKTsKKwkJCQlpZiAoIURVS19UVkFMX0lTX1VOVVNF RCh0dikpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFfbGltaXQtLTsKKwkJCX0KKwkJfQor CisJCWZvciAoaSA9IDA7IGkgPCBhX2xpbWl0OyBpKyspIHsKKwkJCXR2ID0gRFVLX0hPQkpFQ1Rf QV9HRVRfVkFMVUVfUFRSKE5VTEwsIGgsIGkpOworCQkJRFVLX19DT01NQSgpOworCQkJZHVrX19w cmludF90dmFsKHN0LCB0dik7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IERVS19IT0JKRUNUX0dF VF9FTkVYVChoKTsgaSsrKSB7CisJCQlrZXkgPSBEVUtfSE9CSkVDVF9FX0dFVF9LRVkoTlVMTCwg aCwgaSk7CisJCQlpZiAoIWtleSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdC0+ aW50ZXJuYWwgJiYgRFVLX0hTVFJJTkdfSEFTX0hJRERFTihrZXkpKSB7CisJCQkJY29udGludWU7 CisJCQl9CisJCQlEVUtfX0NPTU1BKCk7CisJCQlkdWtfX3ByaW50X2hzdHJpbmcoc3QsIGtleSwg MCk7CisJCQlkdWtfZmJfcHV0X2J5dGUoZmIsIChkdWtfdWludDhfdCkgRFVLX0FTQ19DT0xPTik7 CisJCQlpZiAoRFVLX0hPQkpFQ1RfRV9TTE9UX0lTX0FDQ0VTU09SKE5VTEwsIGgsIGkpKSB7CisJ CQkJZHVrX2ZiX3NwcmludGYoZmIsICJbZ2V0OiVwLHNldDolcF0iLAorCQkJCSAgICAgICAgICAg ICAgICh2b2lkICopIERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFKE5VTEwsIGgsIGkpLmEuZ2V0LAor CQkJCSAgICAgICAgICAgICAgICh2b2lkICopIERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFKE5VTEws IGgsIGkpLmEuc2V0KTsKKwkJCX0gZWxzZSB7CisJCQkJdHYgPSAmRFVLX0hPQkpFQ1RfRV9HRVRf VkFMVUUoTlVMTCwgaCwgaSkudjsKKwkJCQlkdWtfX3ByaW50X3R2YWwoc3QsIHR2KTsKKwkJCX0K KwkJCWlmIChzdC0+aGVhdnkpIHsKKwkJCQlkdWtfZmJfc3ByaW50ZihmYiwgIjwlMDJseD4iLCAo dW5zaWduZWQgbG9uZykgRFVLX0hPQkpFQ1RfRV9HRVRfRkxBR1MoTlVMTCwgaCwgaSkpOworCQkJ fQorCQl9CisJfQorCWlmIChzdC0+aW50ZXJuYWwpIHsKKwkJaWYgKERVS19IT0JKRUNUX0lTX0FS UkFZKGgpKSB7CisJCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19hcnJheTp0 cnVlIik7CisJCX0KKwkJaWYgKERVS19IT0JKRUNUX0hBU19FWFRFTlNJQkxFKGgpKSB7CisJCQlE VUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19leHRlbnNpYmxlOnRydWUiKTsKKwkJ fQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0NPTlNUUlVDVEFCTEUoaCkpIHsKKwkJCURVS19fQ09N TUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX2NvbnN0cnVjdGFibGU6dHJ1ZSIpOworCQl9CisJ CWlmIChEVUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKGgpKSB7CisJCQlEVUtfX0NPTU1BKCk7IGR1 a19mYl9zcHJpbnRmKGZiLCAiX19ib3VuZGZ1bmM6dHJ1ZSIpOworCQl9CisJCWlmIChEVUtfSE9C SkVDVF9IQVNfQ09NUEZVTkMoaCkpIHsKKwkJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYo ZmIsICJfX2NvbXBmdW5jOnRydWUiKTsKKwkJfQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX05BVEZV TkMoaCkpIHsKKwkJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX25hdGZ1bmM6 dHJ1ZSIpOworCQl9CisJCWlmIChEVUtfSE9CSkVDVF9IQVNfQlVGT0JKKGgpKSB7CisJCQlEVUtf X0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19idWZvYmo6dHJ1ZSIpOworCQl9CisJCWlm IChEVUtfSE9CSkVDVF9JU19USFJFQUQoaCkpIHsKKwkJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3Nw cmludGYoZmIsICJfX3RocmVhZDp0cnVlIik7CisJCX0KKwkJaWYgKERVS19IT0JKRUNUX0hBU19B UlJBWV9QQVJUKGgpKSB7CisJCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19h cnJheV9wYXJ0OnRydWUiKTsKKwkJfQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX1NUUklDVChoKSkg eworCQkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fc3RyaWN0OnRydWUiKTsK KwkJfQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX05PVEFJTChoKSkgeworCQkJRFVLX19DT01NQSgp OyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fbm90YWlsOnRydWUiKTsKKwkJfQorCQlpZiAoRFVLX0hP QkpFQ1RfSEFTX05FV0VOVihoKSkgeworCQkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50Zihm YiwgIl9fbmV3ZW52OnRydWUiKTsKKwkJfQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX05BTUVCSU5E SU5HKGgpKSB7CisJCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19uYW1lYmlu ZGluZzp0cnVlIik7CisJCX0KKwkJaWYgKERVS19IT0JKRUNUX0hBU19DUkVBVEVBUkdTKGgpKSB7 CisJCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19jcmVhdGVhcmdzOnRydWUi KTsKKwkJfQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19BUlJBWShoKSkgeworCQkJRFVL X19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fZXhvdGljX2FycmF5OnRydWUiKTsKKwkJ fQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19TVFJJTkdPQkooaCkpIHsKKwkJCURVS19f Q09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX2V4b3RpY19zdHJpbmdvYmo6dHJ1ZSIpOwor CQl9CisJCWlmIChEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FSR1VNRU5UUyhoKSkgeworCQkJRFVL X19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fZXhvdGljX2FyZ3VtZW50czp0cnVlIik7 CisJCX0KKwkJaWYgKERVS19IT0JKRUNUX0lTX0JVRk9CSihoKSkgeworCQkJRFVLX19DT01NQSgp OyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fZXhvdGljX2J1Zm9iajp0cnVlIik7CisJCX0KKwkJaWYg KERVS19IT0JKRUNUX0hBU19FWE9USUNfUFJPWFlPQkooaCkpIHsKKwkJCURVS19fQ09NTUEoKTsg ZHVrX2ZiX3NwcmludGYoZmIsICJfX2V4b3RpY19wcm94eW9iajp0cnVlIik7CisJCX0KKwl9CisK KwlpZiAoc3QtPmludGVybmFsICYmIERVS19IT0JKRUNUX0lTX0FSUkFZKGgpKSB7CisJCWR1a19o YXJyYXkgKmEgPSAoZHVrX2hhcnJheSAqKSBoOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJp bnRmKGZiLCAiX19sZW5ndGg6JWxkIiwgKGxvbmcpIGEtPmxlbmd0aCk7CisJCURVS19fQ09NTUEo KTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX2xlbmd0aF9ub253cml0YWJsZTolbGQiLCAobG9uZykg YS0+bGVuZ3RoX25vbndyaXRhYmxlKTsKKwl9IGVsc2UgaWYgKHN0LT5pbnRlcm5hbCAmJiBEVUtf SE9CSkVDVF9JU19DT01QRlVOQyhoKSkgeworCQlkdWtfaGNvbXBmdW5jICpmID0gKGR1a19oY29t cGZ1bmMgKikgaDsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfcHV0X2NzdHJpbmcoZmIsICJfX2Rh dGE6Iik7CisJCWR1a19fcHJpbnRfaGJ1ZmZlcihzdCwgKGR1a19oYnVmZmVyICopIERVS19IQ09N UEZVTkNfR0VUX0RBVEEoTlVMTCwgZikpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9wdXRfY3N0 cmluZyhmYiwgIl9fbGV4ZW52OiIpOyBkdWtfX3ByaW50X2hvYmplY3Qoc3QsIERVS19IQ09NUEZV TkNfR0VUX0xFWEVOVihOVUxMLCBmKSk7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3B1dF9jc3Ry aW5nKGZiLCAiX192YXJlbnY6Iik7IGR1a19fcHJpbnRfaG9iamVjdChzdCwgRFVLX0hDT01QRlVO Q19HRVRfVkFSRU5WKE5VTEwsIGYpKTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50Zihm YiwgIl9fbnJlZ3M6JWxkIiwgKGxvbmcpIGYtPm5yZWdzKTsKKwkJRFVLX19DT01NQSgpOyBkdWtf ZmJfc3ByaW50ZihmYiwgIl9fbmFyZ3M6JWxkIiwgKGxvbmcpIGYtPm5hcmdzKTsKKyNpZiBkZWZp bmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3By aW50ZihmYiwgIl9fc3RhcnRfbGluZTolbGQiLCAobG9uZykgZi0+c3RhcnRfbGluZSk7CisJCURV S19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX2VuZF9saW5lOiVsZCIsIChsb25nKSBm LT5lbmRfbGluZSk7CisjZW5kaWYKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfcHV0X2NzdHJpbmco ZmIsICJfX2RhdGE6Iik7CisJCWR1a19fcHJpbnRfaGJ1ZmZlcihzdCwgKGR1a19oYnVmZmVyICop IERVS19IQ09NUEZVTkNfR0VUX0RBVEEoTlVMTCwgZikpOworCX0gZWxzZSBpZiAoc3QtPmludGVy bmFsICYmIERVS19IT0JKRUNUX0lTX05BVEZVTkMoaCkpIHsKKwkJZHVrX2huYXRmdW5jICpmID0g KGR1a19obmF0ZnVuYyAqKSBoOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAi X19mdW5jOiIpOworCQlkdWtfZmJfcHV0X2Z1bmNwdHIoZmIsIChkdWtfdWludDhfdCAqKSAmZi0+ ZnVuYywgc2l6ZW9mKGYtPmZ1bmMpKTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50Zihm YiwgIl9fbmFyZ3M6JWxkIiwgKGxvbmcpIGYtPm5hcmdzKTsKKwkJRFVLX19DT01NQSgpOyBkdWtf ZmJfc3ByaW50ZihmYiwgIl9fbWFnaWM6JWxkIiwgKGxvbmcpIGYtPm1hZ2ljKTsKKwl9IGVsc2Ug aWYgKHN0LT5pbnRlcm5hbCAmJiBEVUtfSE9CSkVDVF9JU19ERUNFTlYoaCkpIHsKKwkJZHVrX2hk ZWNlbnYgKmUgPSAoZHVrX2hkZWNlbnYgKikgaDsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3By aW50ZihmYiwgIl9fdGhyZWFkOiIpOyBkdWtfX3ByaW50X2hvYmplY3Qoc3QsIChkdWtfaG9iamVj dCAqKSBlLT50aHJlYWQpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX192 YXJtYXA6Iik7IGR1a19fcHJpbnRfaG9iamVjdChzdCwgKGR1a19ob2JqZWN0ICopIGUtPnZhcm1h cCk7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX3JlZ2Jhc2VfYnl0ZW9m ZjolbGQiLCAobG9uZykgZS0+cmVnYmFzZV9ieXRlb2ZmKTsKKwl9IGVsc2UgaWYgKHN0LT5pbnRl cm5hbCAmJiBEVUtfSE9CSkVDVF9JU19PQkpFTlYoaCkpIHsKKwkJZHVrX2hvYmplbnYgKmUgPSAo ZHVrX2hvYmplbnYgKikgaDsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9f dGFyZ2V0OiIpOyBkdWtfX3ByaW50X2hvYmplY3Qoc3QsIChkdWtfaG9iamVjdCAqKSBlLT50YXJn ZXQpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19oYXNfdGhpczolbGQi LCAobG9uZykgZS0+aGFzX3RoaXMpOworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1Rf U1VQUE9SVCkKKwl9IGVsc2UgaWYgKHN0LT5pbnRlcm5hbCAmJiBEVUtfSE9CSkVDVF9JU19CVUZP QkooaCkpIHsKKwkJZHVrX2hidWZvYmogKmIgPSAoZHVrX2hidWZvYmogKikgaDsKKwkJRFVLX19D T01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fYnVmOiIpOworCQlkdWtfX3ByaW50X2hidWZm ZXIoc3QsIChkdWtfaGJ1ZmZlciAqKSBiLT5idWYpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9z cHJpbnRmKGZiLCAiX19idWZfcHJvcDoiKTsKKwkJZHVrX19wcmludF9ob2JqZWN0KHN0LCAoZHVr X2hvYmplY3QgKikgYi0+YnVmX3Byb3ApOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRm KGZiLCAiX19vZmZzZXQ6JWxkIiwgKGxvbmcpIGItPm9mZnNldCk7CisJCURVS19fQ09NTUEoKTsg ZHVrX2ZiX3NwcmludGYoZmIsICJfX2xlbmd0aDolbGQiLCAobG9uZykgYi0+bGVuZ3RoKTsKKwkJ RFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fc2hpZnQ6JWxkIiwgKGxvbmcpIGIt PnNoaWZ0KTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fZWxlbXR5cGU6 JWxkIiwgKGxvbmcpIGItPmVsZW1fdHlwZSk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHN0LT5pbnRl cm5hbCAmJiBEVUtfSE9CSkVDVF9JU19QUk9YWShoKSkgeworCQlkdWtfaHByb3h5ICpwID0gKGR1 a19ocHJveHkgKikgaDsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fdGFy Z2V0OiIpOworCQlkdWtfX3ByaW50X2hvYmplY3Qoc3QsIHAtPnRhcmdldCk7CisJCURVS19fQ09N TUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX2hhbmRsZXI6Iik7CisJCWR1a19fcHJpbnRfaG9i amVjdChzdCwgcC0+aGFuZGxlcik7CisJfSBlbHNlIGlmIChzdC0+aW50ZXJuYWwgJiYgRFVLX0hP QkpFQ1RfSVNfVEhSRUFEKGgpKSB7CisJCWR1a19odGhyZWFkICp0ID0gKGR1a19odGhyZWFkICop IGg7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX3B0cl9jdXJyX3BjOiVw IiwgKHZvaWQgKikgdC0+cHRyX2N1cnJfcGMpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJp bnRmKGZiLCAiX19oZWFwOiVwIiwgKHZvaWQgKikgdC0+aGVhcCk7CisJCURVS19fQ09NTUEoKTsg ZHVrX2ZiX3NwcmludGYoZmIsICJfX3N0cmljdDolbGQiLCAobG9uZykgdC0+c3RyaWN0KTsKKwkJ RFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fc3RhdGU6JWxkIiwgKGxvbmcpIHQt PnN0YXRlKTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fdW51c2VkMTol bGQiLCAobG9uZykgdC0+dW51c2VkMSk7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYo ZmIsICJfX3VudXNlZDI6JWxkIiwgKGxvbmcpIHQtPnVudXNlZDIpOworCQlEVUtfX0NPTU1BKCk7 IGR1a19mYl9zcHJpbnRmKGZiLCAiX192YWxzdGFjazolcCIsICh2b2lkICopIHQtPnZhbHN0YWNr KTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fdmFsc3RhY2tfZW5kOiVw LyVsZCIsICh2b2lkICopIHQtPnZhbHN0YWNrX2VuZCwgKGxvbmcpICh0LT52YWxzdGFja19lbmQg LSB0LT52YWxzdGFjaykpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX192 YWxzdGFja19hbGxvY19lbmQ6JXAvJWxkIiwgKHZvaWQgKikgdC0+dmFsc3RhY2tfYWxsb2NfZW5k LCAobG9uZykgKHQtPnZhbHN0YWNrX2FsbG9jX2VuZCAtIHQtPnZhbHN0YWNrKSk7CisJCURVS19f Q09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX3ZhbHN0YWNrX2JvdHRvbTolcC8lbGQiLCAo dm9pZCAqKSB0LT52YWxzdGFja19ib3R0b20sIChsb25nKSAodC0+dmFsc3RhY2tfYm90dG9tIC0g dC0+dmFsc3RhY2spKTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fdmFs c3RhY2tfdG9wOiVwLyVsZCIsICh2b2lkICopIHQtPnZhbHN0YWNrX3RvcCwgKGxvbmcpICh0LT52 YWxzdGFja190b3AgLSB0LT52YWxzdGFjaykpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJp bnRmKGZiLCAiX19jYWxsc3RhY2tfY3VycjolcCIsICh2b2lkICopIHQtPmNhbGxzdGFja19jdXJy KTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fY2FsbHN0YWNrX3RvcDol bGQiLCAobG9uZykgdC0+Y2FsbHN0YWNrX3RvcCk7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3Nw cmludGYoZmIsICJfX2NhbGxzdGFja19wcmV2ZW50Y291bnQ6JWxkIiwgKGxvbmcpIHQtPmNhbGxz dGFja19wcmV2ZW50Y291bnQpOworCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAi X19yZXN1bWVyOiIpOyBkdWtfX3ByaW50X2hvYmplY3Qoc3QsIChkdWtfaG9iamVjdCAqKSB0LT5y ZXN1bWVyKTsKKwkJRFVLX19DT01NQSgpOyBkdWtfZmJfc3ByaW50ZihmYiwgIl9fY29tcGlsZV9j dHg6JXAiLCAodm9pZCAqKSB0LT5jb21waWxlX2N0eCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0lO VEVSUlVQVF9DT1VOVEVSKQorCQlEVUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19p bnRlcnJ1cHRfY291bnRlcjolbGQiLCAobG9uZykgdC0+aW50ZXJydXB0X2NvdW50ZXIpOworCQlE VUtfX0NPTU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19pbnRlcnJ1cHRfaW5pdDolbGQiLCAo bG9uZykgdC0+aW50ZXJydXB0X2luaXQpOworI2VuZGlmCisKKwkJLyogWFhYOiBwcmludCBidWls dC1pbnMgYXJyYXk/ICovCisKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VO VElORykKKwlpZiAoc3QtPmludGVybmFsKSB7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3Nwcmlu dGYoZmIsICJfX3JlZmNvdW50OiVsdSIsICh1bnNpZ25lZCBsb25nKSBEVUtfSEVBUEhEUl9HRVRf UkVGQ09VTlQoKGR1a19oZWFwaGRyICopIGgpKTsKKwl9CisjZW5kaWYKKwlpZiAoc3QtPmludGVy bmFsKSB7CisJCURVS19fQ09NTUEoKTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX2NsYXNzOiVsZCIs IChsb25nKSBEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKGgpKTsKKwl9CisKKwlEVUtfX0NP TU1BKCk7IGR1a19mYl9zcHJpbnRmKGZiLCAiX19oZWFwcHRyOiVwIiwgKHZvaWQgKikgaCk7ICAv KiBvd24gcG9pbnRlciAqLworCisJLyogcHJvdG90eXBlIHNob3VsZCBiZSBsYXN0LCBmb3IgcmVh ZGFiaWxpdHkgKi8KKwlpZiAoRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRShOVUxMLCBoKSkgewor CQlpZiAoc3QtPmZvbGxvd19wcm90bykgeworCQkJRFVLX19DT01NQSgpOyBkdWtfZmJfcHV0X2Nz dHJpbmcoZmIsICJfX3Byb3RvdHlwZToiKTsgZHVrX19wcmludF9ob2JqZWN0KHN0LCBEVUtfSE9C SkVDVF9HRVRfUFJPVE9UWVBFKE5VTEwsIGgpKTsKKwkJfSBlbHNlIHsKKwkJCURVS19fQ09NTUEo KTsgZHVrX2ZiX3NwcmludGYoZmIsICJfX3Byb3RvdHlwZTolcCIsICh2b2lkICopIERVS19IT0JK RUNUX0dFVF9QUk9UT1RZUEUoTlVMTCwgaCkpOworCQl9CisJfQorCisJZHVrX2ZiX3B1dF9jc3Ry aW5nKGZiLCBicmFjZTIpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJU KQorCWlmIChzdC0+aGVhdnkgJiYgRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKGgpID4gMCkgeworCQlk dWtfZmJfcHV0X2J5dGUoZmIsIChkdWtfdWludDhfdCkgRFVLX0FTQ19MQU5HTEUpOworCQlmb3Ig KGkgPSAwOyBpIDwgRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKGgpOyBpKyspIHsKKwkJCWR1a191aW50 X3QgaF9pZHggPSBEVUtfSE9CSkVDVF9IX0dFVF9JTkRFWChOVUxMLCBoLCBpKTsKKwkJCWlmIChp ID4gMCkgeworCQkJCWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1a191aW50OF90KSBEVUtfQVNDX0NP TU1BKTsKKwkJCX0KKwkJCWlmIChoX2lkeCA9PSBEVUtfSE9CSkVDVF9IQVNISURYX1VOVVNFRCkg eworCQkJCWR1a19mYl9zcHJpbnRmKGZiLCAidSIpOworCQkJfSBlbHNlIGlmIChoX2lkeCA9PSBE VUtfSE9CSkVDVF9IQVNISURYX0RFTEVURUQpIHsKKwkJCQlkdWtfZmJfc3ByaW50ZihmYiwgImQi KTsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX2ZiX3NwcmludGYoZmIsICIlbGQiLCAobG9uZykgaF9p ZHgpOworCQkJfQorCQl9CisJCWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1a191aW50OF90KSBEVUtf QVNDX1JBTkdMRSk7CisJfQorI2VuZGlmCisKKyBmaW5pc2hlZDoKKwlzdC0+ZGVwdGgtLTsKKwlp ZiAocHVzaGVkX2xvb3BzdGFjaykgeworCQlzdC0+bG9vcF9zdGFja19pbmRleC0tOworCQlzdC0+ bG9vcF9zdGFja1tzdC0+bG9vcF9zdGFja19pbmRleF0gPSBOVUxMOworCX0KK30KKworRFVLX0xP Q0FMIHZvaWQgZHVrX19wcmludF9oYnVmZmVyKGR1a19fZHByaW50X3N0YXRlICpzdCwgZHVrX2hi dWZmZXIgKmgpIHsKKwlkdWtfZml4ZWRidWZmZXIgKmZiID0gc3QtPmZiOworCWR1a19zaXplX3Qg aSwgbjsKKwlkdWtfdWludDhfdCAqcDsKKworCWlmIChkdWtfZmJfaXNfZnVsbChmYikpIHsKKwkJ cmV0dXJuOworCX0KKworCS8qIHRlcm1pbmFsIHR5cGU6IG5vIGRlcHRoIGNoZWNrICovCisKKwlp ZiAoIWgpIHsKKwkJZHVrX2ZiX3B1dF9jc3RyaW5nKGZiLCAiTlVMTCIpOworCQlyZXR1cm47CisJ fQorCisJaWYgKERVS19IQlVGRkVSX0hBU19EWU5BTUlDKGgpKSB7CisJCWlmIChEVUtfSEJVRkZF Ul9IQVNfRVhURVJOQUwoaCkpIHsKKwkJCWR1a19oYnVmZmVyX2V4dGVybmFsICpnID0gKGR1a19o YnVmZmVyX2V4dGVybmFsICopIGg7CisJCQlkdWtfZmJfc3ByaW50ZihmYiwgImJ1ZmZlcjpleHRl cm5hbDolcDolbGQiLAorCQkJICAgICAgICAgICAgICAgKHZvaWQgKikgRFVLX0hCVUZGRVJfRVhU RVJOQUxfR0VUX0RBVEFfUFRSKE5VTEwsIGcpLAorCQkJICAgICAgICAgICAgICAgKGxvbmcpIERV S19IQlVGRkVSX0VYVEVSTkFMX0dFVF9TSVpFKGcpKTsKKwkJfSBlbHNlIHsKKwkJCWR1a19oYnVm ZmVyX2R5bmFtaWMgKmcgPSAoZHVrX2hidWZmZXJfZHluYW1pYyAqKSBoOworCQkJZHVrX2ZiX3Nw cmludGYoZmIsICJidWZmZXI6ZHluYW1pYzolcDolbGQiLAorCQkJICAgICAgICAgICAgICAgKHZv aWQgKikgRFVLX0hCVUZGRVJfRFlOQU1JQ19HRVRfREFUQV9QVFIoTlVMTCwgZyksCisJCQkgICAg ICAgICAgICAgICAobG9uZykgRFVLX0hCVUZGRVJfRFlOQU1JQ19HRVRfU0laRShnKSk7CisJCX0K Kwl9IGVsc2UgeworCQlkdWtfZmJfc3ByaW50ZihmYiwgImJ1ZmZlcjpmaXhlZDolbGQiLCAobG9u ZykgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaCkpOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9S RUZFUkVOQ0VfQ09VTlRJTkcpCisJZHVrX2ZiX3NwcmludGYoZmIsICIvJWx1IiwgKHVuc2lnbmVk IGxvbmcpIERVS19IRUFQSERSX0dFVF9SRUZDT1VOVCgmaC0+aGRyKSk7CisjZW5kaWYKKworCWlm IChzdC0+aGV4ZHVtcCkgeworCQlkdWtfZmJfc3ByaW50ZihmYiwgIj1bIik7CisJCW4gPSBEVUtf SEJVRkZFUl9HRVRfU0laRShoKTsKKwkJcCA9IChkdWtfdWludDhfdCAqKSBEVUtfSEJVRkZFUl9H RVRfREFUQV9QVFIoTlVMTCwgaCk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWR1 a19mYl9zcHJpbnRmKGZiLCAiJTAybHgiLCAodW5zaWduZWQgbG9uZykgcFtpXSk7CisJCX0KKwkJ ZHVrX2ZiX3NwcmludGYoZmIsICJdIik7CisJfQorfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3By aW50X2hlYXBoZHIoZHVrX19kcHJpbnRfc3RhdGUgKnN0LCBkdWtfaGVhcGhkciAqaCkgeworCWR1 a19maXhlZGJ1ZmZlciAqZmIgPSBzdC0+ZmI7CisKKwlpZiAoZHVrX2ZiX2lzX2Z1bGwoZmIpKSB7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWgpIHsKKwkJZHVrX2ZiX3B1dF9jc3RyaW5nKGZiLCAi TlVMTCIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChEVUtfSEVBUEhEUl9HRVRfVFlQRSho KSkgeworCWNhc2UgRFVLX0hUWVBFX1NUUklORzoKKwkJZHVrX19wcmludF9oc3RyaW5nKHN0LCAo ZHVrX2hzdHJpbmcgKikgaCwgMSk7CisJCWJyZWFrOworCWNhc2UgRFVLX0hUWVBFX09CSkVDVDoK KwkJZHVrX19wcmludF9ob2JqZWN0KHN0LCAoZHVrX2hvYmplY3QgKikgaCk7CisJCWJyZWFrOwor CWNhc2UgRFVLX0hUWVBFX0JVRkZFUjoKKwkJZHVrX19wcmludF9oYnVmZmVyKHN0LCAoZHVrX2hi dWZmZXIgKikgaCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWR1a19mYl9zcHJpbnRmKGZiLCAi W3Vua25vd24gaHR5cGUgJWxkXSIsIChsb25nKSBEVUtfSEVBUEhEUl9HRVRfVFlQRShoKSk7CisJ CWJyZWFrOworCX0KK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19wcmludF90dmFsKGR1a19fZHBy aW50X3N0YXRlICpzdCwgZHVrX3R2YWwgKnR2KSB7CisJZHVrX2ZpeGVkYnVmZmVyICpmYiA9IHN0 LT5mYjsKKworCWlmIChkdWtfZmJfaXNfZnVsbChmYikpIHsKKwkJcmV0dXJuOworCX0KKworCS8q IGRlcHRoIGNoZWNrIGlzIGRvbmUgd2hlbiBwcmludGluZyBhbiBhY3R1YWwgdHlwZSAqLworCisJ aWYgKHN0LT5oZWF2eSkgeworCQlkdWtfZmJfc3ByaW50ZihmYiwgIiglcCkiLCAodm9pZCAqKSB0 dik7CisJfQorCisJaWYgKCF0dikgeworCQlkdWtfZmJfcHV0X2NzdHJpbmcoZmIsICJOVUxMIik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3QtPmJpbmFyeSkgeworCQlkdWtfc2l6ZV90IGk7CisJ CWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1a191aW50OF90KSBEVUtfQVNDX0xCUkFDS0VUKTsKKwkJ Zm9yIChpID0gMDsgaSA8IChkdWtfc2l6ZV90KSBzaXplb2YoKnR2KTsgaSsrKSB7CisJCQlkdWtf ZmJfc3ByaW50ZihmYiwgIiUwMmx4IiwgKHVuc2lnbmVkIGxvbmcpICgoZHVrX3VpbnQ4X3QgKil0 dilbaV0pOworCQl9CisJCWR1a19mYl9wdXRfYnl0ZShmYiwgKGR1a191aW50OF90KSBEVUtfQVND X1JCUkFDS0VUKTsKKwl9CisKKwlpZiAoc3QtPmhlYXZ5KSB7CisJCWR1a19mYl9wdXRfYnl0ZShm YiwgKGR1a191aW50OF90KSBEVUtfQVNDX0xBTkdMRSk7CisJfQorCXN3aXRjaCAoRFVLX1RWQUxf R0VUX1RBRyh0dikpIHsKKwljYXNlIERVS19UQUdfVU5ERUZJTkVEOiB7CisJCWR1a19mYl9wdXRf Y3N0cmluZyhmYiwgInVuZGVmaW5lZCIpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX1VO VVNFRDogeworCQlkdWtfZmJfcHV0X2NzdHJpbmcoZmIsICJ1bnVzZWQiKTsKKwkJYnJlYWs7CisJ fQorCWNhc2UgRFVLX1RBR19OVUxMOiB7CisJCWR1a19mYl9wdXRfY3N0cmluZyhmYiwgIm51bGwi KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RBR19CT09MRUFOOiB7CisJCWR1a19mYl9wdXRf Y3N0cmluZyhmYiwgRFVLX1RWQUxfR0VUX0JPT0xFQU4odHYpID8gInRydWUiIDogImZhbHNlIik7 CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UQUdfU1RSSU5HOiB7CisJCS8qIE5vdGU6IHN0cmlu ZyBpcyBhIHRlcm1pbmFsIGhlYXAgb2JqZWN0LCBzbyBubyBkZXB0aCBjaGVjayBoZXJlICovCisJ CWR1a19fcHJpbnRfaHN0cmluZyhzdCwgRFVLX1RWQUxfR0VUX1NUUklORyh0diksIDEpOworCQli cmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX09CSkVDVDogeworCQlkdWtfX3ByaW50X2hvYmplY3Qo c3QsIERVS19UVkFMX0dFVF9PQkpFQ1QodHYpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RB R19CVUZGRVI6IHsKKwkJZHVrX19wcmludF9oYnVmZmVyKHN0LCBEVUtfVFZBTF9HRVRfQlVGRkVS KHR2KSk7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UQUdfUE9JTlRFUjogeworCQlkdWtfZmJf c3ByaW50ZihmYiwgInBvaW50ZXI6JXAiLCAodm9pZCAqKSBEVUtfVFZBTF9HRVRfUE9JTlRFUih0 dikpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX0xJR0hURlVOQzogeworCQlkdWtfY19m dW5jdGlvbiBmdW5jOworCQlkdWtfc21hbGxfdWludF90IGxmX2ZsYWdzOworCisJCURVS19UVkFM X0dFVF9MSUdIVEZVTkModHYsIGZ1bmMsIGxmX2ZsYWdzKTsKKwkJZHVrX2ZiX3NwcmludGYoZmIs ICJsaWdodGZ1bmM6Iik7CisJCWR1a19mYl9wdXRfZnVuY3B0cihmYiwgKGR1a191aW50OF90ICop ICZmdW5jLCBzaXplb2YoZnVuYykpOworCQlkdWtfZmJfc3ByaW50ZihmYiwgIjolMDRseCIsIChs b25nKSBsZl9mbGFncyk7CisJCWJyZWFrOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElO VCkKKwljYXNlIERVS19UQUdfRkFTVElOVDoKKwkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNfVU5V U0VEKHR2KSk7CisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2KSk7CisJCWR1a19m Yl9zcHJpbnRmKGZiLCAiJS4xOGdfRiIsIChkb3VibGUpIERVS19UVkFMX0dFVF9OVU1CRVIodHYp KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OiB7CisJCS8qIElFRUUgZG91YmxlIGlzIGFw cHJveGltYXRlbHkgMTYgZGVjaW1hbCBkaWdpdHM7IHByaW50IGEgY291cGxlIGV4dHJhICovCisJ CURVS19BU1NFUlQoIURVS19UVkFMX0lTX1VOVVNFRCh0dikpOworCQlEVUtfQVNTRVJUKERVS19U VkFMX0lTX05VTUJFUih0dikpOworCQlkdWtfZmJfc3ByaW50ZihmYiwgIiUuMThnIiwgKGRvdWJs ZSkgRFVLX1RWQUxfR0VUX05VTUJFUih0dikpOworCQlicmVhazsKKwl9CisJfQorCWlmIChzdC0+ aGVhdnkpIHsKKwkJZHVrX2ZiX3B1dF9ieXRlKGZiLCAoZHVrX3VpbnQ4X3QpIERVS19BU0NfUkFO R0xFKTsKKwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fcHJpbnRfaW5zdHIoZHVrX19kcHJp bnRfc3RhdGUgKnN0LCBkdWtfaW5zdHJfdCBpbnMpIHsKKwlkdWtfZml4ZWRidWZmZXIgKmZiID0g c3QtPmZiOworCWR1a19zbWFsbF9pbnRfdCBvcDsKKwljb25zdCBjaGFyICpvcF9uYW1lOworCisJ b3AgPSAoZHVrX3NtYWxsX2ludF90KSBEVUtfREVDX09QKGlucyk7CisJb3BfbmFtZSA9IGR1a19f YmNfb3B0YWJbb3BdOworCisJLyogWFhYOiBvcHRpb24gdG8gZml4IG9wY29kZSBsZW5ndGggc28g aXQgbGluZXMgdXAgbmljZWx5ICovCisKKwlpZiAob3AgPT0gRFVLX09QX0pVTVApIHsKKwkJZHVr X2ludF90IGRpZmYxID0gKGR1a19pbnRfdCkgKERVS19ERUNfQUJDKGlucykgLSBEVUtfQkNfSlVN UF9CSUFTKTsgIC8qIGZyb20gbmV4dCBwYyAqLworCQlkdWtfaW50X3QgZGlmZjIgPSBkaWZmMSAr IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSBjdXJy IHBjICovCisKKwkJZHVrX2ZiX3NwcmludGYoZmIsICIlcyAlbGQgKHRvIHBjJWMlbGQpIiwKKwkJ ICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgb3BfbmFtZSwgKGxvbmcpIGRpZmYxLAorCQkg ICAgICAgICAgICAgICAoaW50KSAoZGlmZjIgPj0gMCA/ICcrJyA6ICctJyksICAvKiBjaGFyIGZv cm1hdDogdXNlIGludCAqLworCQkgICAgICAgICAgICAgICAobG9uZykgKGRpZmYyID49IDAgPyBk aWZmMiA6IC1kaWZmMikpOworCX0gZWxzZSB7CisJCWR1a19mYl9zcHJpbnRmKGZiLCAiJXMgJWxk LCAlbGQsICVsZCIsCisJCSAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIG9wX25hbWUsIChs b25nKSBEVUtfREVDX0EoaW5zKSwKKwkJICAgICAgICAgICAgICAgKGxvbmcpIERVS19ERUNfQihp bnMpLCAobG9uZykgRFVLX0RFQ19DKGlucykpOworCX0KK30KKworRFVLX0xPQ0FMIHZvaWQgZHVr X19wcmludF9vcGNvZGUoZHVrX19kcHJpbnRfc3RhdGUgKnN0LCBkdWtfc21hbGxfaW50X3Qgb3Bj b2RlKSB7CisJZHVrX2ZpeGVkYnVmZmVyICpmYiA9IHN0LT5mYjsKKworCWlmIChvcGNvZGUgPCBE VUtfQkNfT1BfTUlOIHx8IG9wY29kZSA+IERVS19CQ19PUF9NQVgpIHsKKwkJZHVrX2ZiX3Nwcmlu dGYoZmIsICI/KCVsZCkiLCAobG9uZykgb3Bjb2RlKTsKKwl9IGVsc2UgeworCQlkdWtfZmJfc3By aW50ZihmYiwgIiVzIiwgKGNvbnN0IGNoYXIgKikgZHVrX19iY19vcHRhYltvcGNvZGVdKTsKKwl9 Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaW50X3QgZHVrX2RlYnVnX3ZzbnByaW50ZihjaGFyICpz dHIsIGR1a19zaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSB7CisJ ZHVrX2ZpeGVkYnVmZmVyIGZiOworCWNvbnN0IGNoYXIgKnAgPSBmb3JtYXQ7CisJY29uc3QgY2hh ciAqcF9lbmQgPSBwICsgRFVLX1NUUkxFTihmb3JtYXQpOworCWR1a19pbnRfdCByZXR2YWw7CisK KwlkdWtfbWVtemVybygmZmIsIHNpemVvZihmYikpOworCWZiLmJ1ZmZlciA9IChkdWtfdWludDhf dCAqKSBzdHI7CisJZmIubGVuZ3RoID0gc2l6ZTsKKwlmYi5vZmZzZXQgPSAwOworCWZiLnRydW5j YXRlZCA9IDA7CisKKwl3aGlsZSAocCA8IHBfZW5kKSB7CisJCWNoYXIgY2ggPSAqcCsrOworCQlj b25zdCBjaGFyICpwX2JlZ2ZtdCA9IE5VTEw7CisJCWR1a19ib29sX3QgZ290X2V4Y2xhbWF0aW9u ID0gMDsKKwkJZHVrX2Jvb2xfdCBnb3RfbG9uZyA9IDA7ICAvKiAlbGYsICVsZCBldGMgKi8KKwkJ ZHVrX19kcHJpbnRfc3RhdGUgc3Q7CisKKwkJaWYgKGNoICE9IERVS19BU0NfUEVSQ0VOVCkgewor CQkJZHVrX2ZiX3B1dF9ieXRlKCZmYiwgKGR1a191aW50OF90KSBjaCk7CisJCQljb250aW51ZTsK KwkJfQorCisJCS8qCisJCSAqICBGb3JtYXQgdGFnIHBhcnNpbmcuICBTaW5jZSB3ZSBkb24ndCB1 bmRlcnN0YW5kIGFsbCB0aGUKKwkJICogIHBvc3NpYmxlIGZvcm1hdCB0YWdzIGFsbG93ZWQsIHdl IGp1c3Qgc2NhbiBmb3IgYSB0ZXJtaW5hdGluZworCQkgKiAgc3BlY2lmaWVyIGFuZCBrZWVwIHRy YWNrIG9mIHJlbGV2YW50IG1vZGlmaWVycyB0aGF0IHdlIGRvCisJCSAqICB1bmRlcnN0YW5kLiAg U2VlIG1hbiAzIHByaW50Zi4KKwkJICovCisKKwkJZHVrX21lbXplcm8oJnN0LCBzaXplb2Yoc3Qp KTsKKwkJc3QuZmIgPSAmZmI7CisJCXN0LmRlcHRoID0gMDsKKwkJc3QuZGVwdGhfbGltaXQgPSAx OworCQlzdC5sb29wX3N0YWNrX2luZGV4ID0gMDsKKwkJc3QubG9vcF9zdGFja19saW1pdCA9IERV S19fTE9PUF9TVEFDS19ERVBUSDsKKworCQlwX2JlZ2ZtdCA9IHAgLSAxOworCQl3aGlsZSAocCA8 IHBfZW5kKSB7CisJCQljaCA9ICpwKys7CisKKwkJCWlmIChjaCA9PSBEVUtfQVNDX1NUQVIpIHsK KwkJCQkvKiB1bnN1cHBvcnRlZDogd291bGQgY29uc3VtZSBtdWx0aXBsZSBhcmdzICovCisJCQkJ Z290byBmb3JtYXRfZXJyb3I7CisJCQl9IGVsc2UgaWYgKGNoID09IERVS19BU0NfUEVSQ0VOVCkg eworCQkJCWR1a19mYl9wdXRfYnl0ZSgmZmIsIChkdWtfdWludDhfdCkgRFVLX0FTQ19QRVJDRU5U KTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoY2ggPT0gRFVLX0FTQ19FWENMQU1BVElPTikg eworCQkJCWdvdF9leGNsYW1hdGlvbiA9IDE7CisJCQl9IGVsc2UgaWYgKCFnb3RfZXhjbGFtYXRp b24gJiYgY2ggPT0gRFVLX0FTQ19MQ19MKSB7CisJCQkJZ290X2xvbmcgPSAxOworCQkJfSBlbHNl IGlmIChnb3RfZXhjbGFtYXRpb24gJiYgY2ggPT0gRFVLX0FTQ19MQ19EKSB7CisJCQkJc3QuZGVw dGhfbGltaXQgPSBEVUtfX0RFRVBfREVQVEhfTElNSVQ7CisJCQl9IGVsc2UgaWYgKGdvdF9leGNs YW1hdGlvbiAmJiBjaCA9PSBEVUtfQVNDX0xDX1ApIHsKKwkJCQlzdC5mb2xsb3dfcHJvdG8gPSAx OworCQkJfSBlbHNlIGlmIChnb3RfZXhjbGFtYXRpb24gJiYgY2ggPT0gRFVLX0FTQ19MQ19JKSB7 CisJCQkJc3QuaW50ZXJuYWwgPSAxOworCQkJfSBlbHNlIGlmIChnb3RfZXhjbGFtYXRpb24gJiYg Y2ggPT0gRFVLX0FTQ19MQ19YKSB7CisJCQkJc3QuaGV4ZHVtcCA9IDE7CisJCQl9IGVsc2UgaWYg KGdvdF9leGNsYW1hdGlvbiAmJiBjaCA9PSBEVUtfQVNDX0xDX0gpIHsKKwkJCQlzdC5oZWF2eSA9 IDE7CisJCQl9IGVsc2UgaWYgKGdvdF9leGNsYW1hdGlvbiAmJiBjaCA9PSBEVUtfQVNDX0FUU0lH TikgeworCQkJCXN0LnBvaW50ZXIgPSAxOworCQkJfSBlbHNlIGlmIChnb3RfZXhjbGFtYXRpb24g JiYgY2ggPT0gRFVLX0FTQ19IQVNIKSB7CisJCQkJc3QuYmluYXJ5ID0gMTsKKwkJCX0gZWxzZSBp ZiAoZ290X2V4Y2xhbWF0aW9uICYmIGNoID09IERVS19BU0NfVUNfVCkgeworCQkJCWR1a190dmFs ICp0ID0gdmFfYXJnKGFwLCBkdWtfdHZhbCAqKTsKKwkJCQlpZiAoc3QucG9pbnRlciAmJiAhc3Qu aGVhdnkpIHsKKwkJCQkJZHVrX2ZiX3NwcmludGYoJmZiLCAiKCVwKSIsICh2b2lkICopIHQpOwor CQkJCX0KKwkJCQlkdWtfX3ByaW50X3R2YWwoJnN0LCB0KTsKKwkJCQlicmVhazsKKwkJCX0gZWxz ZSBpZiAoZ290X2V4Y2xhbWF0aW9uICYmIGNoID09IERVS19BU0NfVUNfTykgeworCQkJCWR1a19o ZWFwaGRyICp0ID0gdmFfYXJnKGFwLCBkdWtfaGVhcGhkciAqKTsKKwkJCQlpZiAoc3QucG9pbnRl ciAmJiAhc3QuaGVhdnkpIHsKKwkJCQkJZHVrX2ZiX3NwcmludGYoJmZiLCAiKCVwKSIsICh2b2lk ICopIHQpOworCQkJCX0KKwkJCQlkdWtfX3ByaW50X2hlYXBoZHIoJnN0LCB0KTsKKwkJCQlicmVh azsKKwkJCX0gZWxzZSBpZiAoZ290X2V4Y2xhbWF0aW9uICYmIGNoID09IERVS19BU0NfVUNfSSkg eworCQkJCWR1a19pbnN0cl90IHQgPSB2YV9hcmcoYXAsIGR1a19pbnN0cl90KTsKKwkJCQlkdWtf X3ByaW50X2luc3RyKCZzdCwgdCk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGdvdF9leGNs YW1hdGlvbiAmJiBjaCA9PSBEVUtfQVNDX1VDX0MpIHsKKwkJCQlsb25nIHQgPSB2YV9hcmcoYXAs IGxvbmcpOworCQkJCWR1a19fcHJpbnRfb3Bjb2RlKCZzdCwgKGR1a19zbWFsbF9pbnRfdCkgdCk7 CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCFnb3RfZXhjbGFtYXRpb24gJiYgc3RyY2hyKERV S19fQUxMT1dFRF9TVEFOREFSRF9TUEVDSUZJRVJTLCAoaW50KSBjaCkpIHsKKwkJCQljaGFyIGZt dGJ1ZltEVUtfX01BWF9GT1JNQVRfVEFHX0xFTkdUSF07CisJCQkJZHVrX3NpemVfdCBmbXRsZW47 CisKKwkJCQlEVUtfQVNTRVJUKHAgPj0gcF9iZWdmbXQpOworCQkJCWZtdGxlbiA9IChkdWtfc2l6 ZV90KSAocCAtIHBfYmVnZm10KTsKKwkJCQlpZiAoZm10bGVuID49IHNpemVvZihmbXRidWYpKSB7 CisJCQkJCS8qIGZvcm1hdCBpcyB0b28gbGFyZ2UsIGFib3J0ICovCisJCQkJCWdvdG8gZm9ybWF0 X2Vycm9yOworCQkJCX0KKwkJCQlkdWtfbWVtemVybyhmbXRidWYsIHNpemVvZihmbXRidWYpKTsK KwkJCQlkdWtfbWVtY3B5KGZtdGJ1ZiwgcF9iZWdmbXQsIGZtdGxlbik7CisKKwkJCQkvKiBhc3N1 bWUgZXhhY3RseSAxIGFyZywgd2hpY2ggaXMgd2h5ICcqJyBpcyBmb3JiaWRkZW47IGFyZyBzaXpl IHN0aWxsCisJCQkJICogZGVwZW5kcyBvbiB0eXBlIHRob3VnaC4KKwkJCQkgKi8KKworCQkJCWlm IChjaCA9PSBEVUtfQVNDX0xDX0YgfHwgY2ggPT0gRFVLX0FTQ19MQ19HIHx8IGNoID09IERVS19B U0NfTENfRSkgeworCQkJCQkvKiAlZiBhbmQgJWxmIGJvdGggY29uc3VtZSBhICdsb25nJyAqLwor CQkJCQlkb3VibGUgYXJnID0gdmFfYXJnKGFwLCBkb3VibGUpOworCQkJCQlkdWtfZmJfc3ByaW50 ZigmZmIsIGZtdGJ1ZiwgYXJnKTsKKwkJCQl9IGVsc2UgaWYgKGNoID09IERVS19BU0NfTENfRCAm JiBnb3RfbG9uZykgeworCQkJCQkvKiAlbGQgKi8KKwkJCQkJbG9uZyBhcmcgPSB2YV9hcmcoYXAs IGxvbmcpOworCQkJCQlkdWtfZmJfc3ByaW50ZigmZmIsIGZtdGJ1ZiwgYXJnKTsKKwkJCQl9IGVs c2UgaWYgKGNoID09IERVS19BU0NfTENfRCkgeworCQkJCQkvKiAlZDsgb25seSAxNiBiaXRzIGFy ZSBndWFyYW50ZWVkICovCisJCQkJCWludCBhcmcgPSB2YV9hcmcoYXAsIGludCk7CisJCQkJCWR1 a19mYl9zcHJpbnRmKCZmYiwgZm10YnVmLCBhcmcpOworCQkJCX0gZWxzZSBpZiAoY2ggPT0gRFVL X0FTQ19MQ19VICYmIGdvdF9sb25nKSB7CisJCQkJCS8qICVsdSAqLworCQkJCQl1bnNpZ25lZCBs b25nIGFyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgbG9uZyk7CisJCQkJCWR1a19mYl9zcHJpbnRm KCZmYiwgZm10YnVmLCBhcmcpOworCQkJCX0gZWxzZSBpZiAoY2ggPT0gRFVLX0FTQ19MQ19VKSB7 CisJCQkJCS8qICV1OyBvbmx5IDE2IGJpdHMgYXJlIGd1YXJhbnRlZWQgKi8KKwkJCQkJdW5zaWdu ZWQgaW50IGFyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgaW50KTsKKwkJCQkJZHVrX2ZiX3Nwcmlu dGYoJmZiLCBmbXRidWYsIGFyZyk7CisJCQkJfSBlbHNlIGlmIChjaCA9PSBEVUtfQVNDX0xDX1gg JiYgZ290X2xvbmcpIHsKKwkJCQkJLyogJWx4ICovCisJCQkJCXVuc2lnbmVkIGxvbmcgYXJnID0g dmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nKTsKKwkJCQkJZHVrX2ZiX3NwcmludGYoJmZiLCBmbXRi dWYsIGFyZyk7CisJCQkJfSBlbHNlIGlmIChjaCA9PSBEVUtfQVNDX0xDX1gpIHsKKwkJCQkJLyog JXg7IG9ubHkgMTYgYml0cyBhcmUgZ3VhcmFudGVlZCAqLworCQkJCQl1bnNpZ25lZCBpbnQgYXJn ID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBpbnQpOworCQkJCQlkdWtfZmJfc3ByaW50ZigmZmIsIGZt dGJ1ZiwgYXJnKTsKKwkJCQl9IGVsc2UgaWYgKGNoID09IERVS19BU0NfTENfUykgeworCQkJCQkv KiAlcyAqLworCQkJCQljb25zdCBjaGFyICphcmcgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKik7 CisJCQkJCWlmIChhcmcgPT0gTlVMTCkgeworCQkJCQkJLyogJyVzJyBhbmQgTlVMTCBpcyBub3Qg cG9ydGFibGUsIHNvIHNwZWNpYWwgY2FzZQorCQkJCQkJICogaXQgZm9yIGRlYnVnIHByaW50aW5n LgorCQkJCQkJICovCisJCQkJCQlkdWtfZmJfc3ByaW50ZigmZmIsICJOVUxMIik7CisJCQkJCX0g ZWxzZSB7CisJCQkJCQlkdWtfZmJfc3ByaW50ZigmZmIsIGZtdGJ1ZiwgYXJnKTsKKwkJCQkJfQor CQkJCX0gZWxzZSBpZiAoY2ggPT0gRFVLX0FTQ19MQ19QKSB7CisJCQkJCS8qICVwICovCisJCQkJ CXZvaWQgKmFyZyA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKwkJCQkJaWYgKGFyZyA9PSBOVUxMKSB7 CisJCQkJCQkvKiAnJXAnIGFuZCBOVUxMIGlzIHBvcnRhYmxlLCBidXQgc3BlY2lhbCBjYXNlIGl0 CisJCQkJCQkgKiBhbnl3YXkgdG8gZ2V0IGEgc3RhbmRhcmQgTlVMTCBtYXJrZXIgaW4gbG9ncy4K KwkJCQkJCSAqLworCQkJCQkJZHVrX2ZiX3NwcmludGYoJmZiLCAiTlVMTCIpOworCQkJCQl9IGVs c2UgeworCQkJCQkJZHVrX2ZiX3NwcmludGYoJmZiLCBmbXRidWYsIGFyZyk7CisJCQkJCX0KKwkJ CQl9IGVsc2UgaWYgKGNoID09IERVS19BU0NfTENfQykgeworCQkJCQkvKiAnJWMnLCBwYXNzZWQg Y29uY3JldGVseSBhcyBpbnQgKi8KKwkJCQkJaW50IGFyZyA9IHZhX2FyZyhhcCwgaW50KTsKKwkJ CQkJZHVrX2ZiX3NwcmludGYoJmZiLCBmbXRidWYsIGFyZyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJ LyogU2hvdWxkIG5vdCBoYXBwZW4uICovCisJCQkJCWR1a19mYl9zcHJpbnRmKCZmYiwgIklOVkFM SUQtRk9STUFUKCVzKSIsIChjb25zdCBjaGFyICopIGZtdGJ1Zik7CisJCQkJfQorCQkJCWJyZWFr OworCQkJfSBlbHNlIHsKKwkJCQkvKiBpZ25vcmUgKi8KKwkJCX0KKwkJfQorCX0KKwlnb3RvIGRv bmU7CisKKyBmb3JtYXRfZXJyb3I6CisJZHVrX2ZiX3B1dF9jc3RyaW5nKCZmYiwgIkZNVEVSUiIp OworCS8qIGZhbGwgdGhyb3VnaCAqLworCisgZG9uZToKKwlyZXR2YWwgPSAoZHVrX2ludF90KSBm Yi5vZmZzZXQ7CisJZHVrX2ZiX3B1dF9ieXRlKCZmYiwgKGR1a191aW50OF90KSAwKTsKKworCS8q IHJldHVybiB0b3RhbCBjaGFycyB3cml0dGVuIGV4Y2x1ZGluZyB0ZXJtaW5hdG9yICovCisJcmV0 dXJuIHJldHZhbDsKK30KKworI2lmIDAgIC8qdW51c2VkKi8KK0RVS19JTlRFUk5BTCBkdWtfaW50 X3QgZHVrX2RlYnVnX3NucHJpbnRmKGNoYXIgKnN0ciwgZHVrX3NpemVfdCBzaXplLCBjb25zdCBj aGFyICpmb3JtYXQsIC4uLikgeworCWR1a19pbnRfdCByZXR2YWw7CisJdmFfbGlzdCBhcDsKKwl2 YV9zdGFydChhcCwgZm9ybWF0KTsKKwlyZXR2YWwgPSBkdWtfZGVidWdfdnNucHJpbnRmKHN0ciwg c2l6ZSwgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorI2Vu ZGlmCisKKy8qIEZvcm1hdHRpbmcgZnVuY3Rpb24gcG9pbnRlcnMgaXMgdHJpY2t5OiB0aGVyZSBp cyBubyBzdGFuZGFyZCBwb2ludGVyIGZvcgorICogZnVuY3Rpb24gcG9pbnRlcnMgYW5kIHRoZSBz aXplIG9mIGEgZnVuY3Rpb24gcG9pbnRlciBtYXkgZGVwZW5kIG9uIHRoZQorICogc3BlY2lmaWMg cG9pbnRlciB0eXBlLiAgVGhpcyBoZWxwZXIgZm9ybWF0cyBhIGZ1bmN0aW9uIHBvaW50ZXIgYmFz ZWQgb24KKyAqIGl0cyBtZW1vcnkgbGF5b3V0IHRvIGdldCBzb21ldGhpbmcgdXNlZnVsIG9uIG1v c3QgcGxhdGZvcm1zLgorICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfZm9ybWF0X2Z1 bmNwdHIoY2hhciAqYnVmLCBkdWtfc2l6ZV90IGJ1Zl9zaXplLCBkdWtfdWludDhfdCAqZnB0ciwg ZHVrX3NpemVfdCBmcHRyX3NpemUpIHsKKwlkdWtfc2l6ZV90IGk7CisJZHVrX3VpbnQ4X3QgKnAg PSAoZHVrX3VpbnQ4X3QgKikgYnVmOworCWR1a191aW50OF90ICpwX2VuZCA9IChkdWtfdWludDhf dCAqKSAoYnVmICsgYnVmX3NpemUgLSAxKTsKKworCURVS19BU1NFUlQoYnVmICE9IE5VTEwpOwor CWR1a19tZW16ZXJvKGJ1ZiwgYnVmX3NpemUpOworCisJZm9yIChpID0gMDsgaSA8IGZwdHJfc2l6 ZTsgaSsrKSB7CisJCWR1a19pbnRfdCBsZWZ0ID0gKGR1a19pbnRfdCkgKHBfZW5kIC0gcCk7CisJ CWR1a191aW50OF90IGNoOworCQlpZiAobGVmdCA8PSAwKSB7CisJCQlicmVhazsKKwkJfQorCisJ CS8qIFF1aXRlIGFwcHJveGltYXRlIGJ1dCBzaG91bGQgYmUgdXNlZnVsIGZvciBsaXR0bGUgYW5k IGJpZyBlbmRpYW4uICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVHRVJfQkUpCisJCWNoID0g ZnB0cltpXTsKKyNlbHNlCisJCWNoID0gZnB0cltmcHRyX3NpemUgLSAxIC0gaV07CisjZW5kaWYK KwkJcCArPSBEVUtfU05QUklOVEYoKGNoYXIgKikgcCwgKGR1a19zaXplX3QpIGxlZnQsICIlMDJs eCIsICh1bnNpZ25lZCBsb25nKSBjaCk7CisJfQorfQorCisjZW5kaWYgIC8qIERVS19VU0VfREVC VUcgKi8KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fQUxMT1dFRF9TVEFO REFSRF9TUEVDSUZJRVJTCisjdW5kZWYgRFVLX19DT01NQQorI3VuZGVmIERVS19fREVFUF9ERVBU SF9MSU1JVAorI3VuZGVmIERVS19fTE9PUF9TVEFDS19ERVBUSAorI3VuZGVmIERVS19fTUFYX0ZP Uk1BVF9UQUdfTEVOR1RICisvKgorICogIER1a3RhcGUgZGVidWdnZXIKKyAqLworCisvKiAjaW5j bHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKworLyoKKyAqICBBc3NlcnQgaGVscGVycworICov CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKyNkZWZpbmUgRFVLX19EQkdfVFBP UlRfRU5URVIoKSBkbyB7IFwKKwkJRFVLX0FTU0VSVChoZWFwLT5kYmdfY2FsbGluZ190cmFuc3Bv cnQgPT0gMCk7IFwKKwkJaGVhcC0+ZGJnX2NhbGxpbmdfdHJhbnNwb3J0ID0gMTsgXAorCX0gd2hp bGUgKDApCisjZGVmaW5lIERVS19fREJHX1RQT1JUX0VYSVQoKSBkbyB7IFwKKwkJRFVLX0FTU0VS VChoZWFwLT5kYmdfY2FsbGluZ190cmFuc3BvcnQgPT0gMSk7IFwKKwkJaGVhcC0+ZGJnX2NhbGxp bmdfdHJhbnNwb3J0ID0gMDsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEVUtfX0RC R19UUE9SVF9FTlRFUigpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfX0RCR19UUE9SVF9F WElUKCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqICBIZWxwZXIgc3RydWN0cwor ICovCisKK3R5cGVkZWYgdW5pb24geworCXZvaWQgKnA7CisJZHVrX3VpbnRfdCBiWzFdOworCS8q IFVzZSBiW10gdG8gYWNjZXNzIHRoZSBzaXplIG9mIHRoZSB1bmlvbiwgd2hpY2ggaXMgc3RyaWN0 bHkgbm90CisJICogY29ycmVjdC4gIENhbid0IHVzZSBmaXhlZCBzaXplIHVubGVzcyB0aGVyZSdz IGZlYXR1cmUgZGV0ZWN0aW9uCisJICogZm9yIHBvaW50ZXIgYnl0ZSBzaXplLgorCSAqLworfSBk dWtfX3B0cl91bmlvbjsKKworLyoKKyAqICBEZXRhY2ggaGFuZGxpbmcKKyAqLworCisjZGVmaW5l IERVS19fU0VUX0NPTk5fQlJPS0VOKHRocixyZWFzb24pIGRvIHsgXAorCQkvKiBGb3Igbm93IHNo YXJlZCBoYW5kbGVyIGlzIGZpbmUuICovIFwKKwkJZHVrX19kZWJ1Z19kb19kZXRhY2gxKCh0aHIp LT5oZWFwLCAocmVhc29uKSk7IFwKKwl9IHdoaWxlICgwKQorCitEVUtfTE9DQUwgdm9pZCBkdWtf X2RlYnVnX2RvX2RldGFjaDEoZHVrX2hlYXAgKmhlYXAsIGR1a19pbnRfdCByZWFzb24pIHsKKwkv KiBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggbm8gaGFybS4gIE1hcmsgdGhlIHRy YW5zcG9ydAorCSAqIGJhZCAoZGJnX3JlYWRfY2IgPT0gTlVMTCkgYW5kIGNsZWFyIHN0YXRlIGV4 Y2VwdCBmb3IgdGhlIGRldGFjaGVkCisJICogY2FsbGJhY2sgYW5kIHRoZSB1ZGF0YSBmaWVsZC4g IFRoZSBkZXRhY2hlZCBjYWxsYmFjayBpcyBkZWxheWVkCisJICogdG8gdGhlIG1lc3NhZ2UgbG9v cCBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgYmV0d2VlbiBtZXNzYWdlczsKKwkgKiB0aGlzIGF2 b2lkcyBjb3JuZXIgY2FzZXMgcmVsYXRlZCB0byBpbW1lZGlhdGUgZGVidWdnZXIgcmVhdHRhY2gK KwkgKiBpbnNpZGUgdGhlIGRldGFjaGVkIGNhbGxiYWNrLgorCSAqLworCisJaWYgKGhlYXAtPmRi Z19kZXRhY2hpbmcpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiZGVidWdnZXIgYWxyZWFkeSBkZXRh Y2hpbmcsIGlnbm9yZSBkZXRhY2gxIikpOworCQlyZXR1cm47CisJfQorCisJRFVLX0QoRFVLX0RQ UklOVCgiZGVidWdnZXIgdHJhbnNwb3J0IGRldGFjaGluZywgbWFya2luZyB0cmFuc3BvcnQgYnJv a2VuIikpOworCisJaGVhcC0+ZGJnX2RldGFjaGluZyA9IDE7ICAvKiBwcmV2ZW50IG11bHRpcGxl IGluLXByb2dyZXNzIGRldGFjaGVzICovCisKKwlpZiAoaGVhcC0+ZGJnX3dyaXRlX2NiICE9IE5V TEwpIHsKKwkJZHVrX2h0aHJlYWQgKnRocjsKKworCQl0aHIgPSBoZWFwLT5oZWFwX3RocmVhZDsK KwkJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwkJZHVrX2RlYnVnX3dyaXRlX25vdGlmeSh0 aHIsIERVS19EQkdfQ01EX0RFVEFDSElORyk7CisJCWR1a19kZWJ1Z193cml0ZV9pbnQodGhyLCBy ZWFzb24pOworCQlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7CisJfQorCisJaGVhcC0+ZGJnX3Jl YWRfY2IgPSBOVUxMOworCWhlYXAtPmRiZ193cml0ZV9jYiA9IE5VTEw7CisJaGVhcC0+ZGJnX3Bl ZWtfY2IgPSBOVUxMOworCWhlYXAtPmRiZ19yZWFkX2ZsdXNoX2NiID0gTlVMTDsKKwloZWFwLT5k Ymdfd3JpdGVfZmx1c2hfY2IgPSBOVUxMOworCWhlYXAtPmRiZ19yZXF1ZXN0X2NiID0gTlVMTDsK KwkvKiBoZWFwLT5kYmdfZGV0YWNoZWRfY2I6IGtlZXAgKi8KKwkvKiBoZWFwLT5kYmdfdWRhdGE6 IGtlZXAgKi8KKwkvKiBoZWFwLT5kYmdfcHJvY2Vzc2luZzoga2VlcCBvbiBwdXJwb3NlIHRvIGF2 b2lkIGRlYnVnZ2VyIHJlLWVudHJ5IGluIGRldGFjaGluZyBzdGF0ZSAqLworCWhlYXAtPmRiZ19z dGF0ZV9kaXJ0eSA9IDA7CisJaGVhcC0+ZGJnX2ZvcmNlX3Jlc3RhcnQgPSAwOworCWhlYXAtPmRi Z19wYXVzZV9mbGFncyA9IDA7CisJaGVhcC0+ZGJnX3BhdXNlX2FjdCA9IE5VTEw7CisJaGVhcC0+ ZGJnX3BhdXNlX3N0YXJ0bGluZSA9IDA7CisJaGVhcC0+ZGJnX2hhdmVfbmV4dF9ieXRlID0gMDsK KwlkdWtfZGVidWdfY2xlYXJfcGF1c2VkKGhlYXApOyAgLyogWFhYOiBzb21lIG92ZXJsYXAgd2l0 aCBmaWVsZCBpbml0cyBhYm92ZSAqLworCWhlYXAtPmRiZ19zdGF0ZV9kaXJ0eSA9IDA7ICAgICAv KiBYWFg6IGNsZWFyX3BhdXNlZCBzZXRzIGRpcnR5OyByZXdvcms/ICovCisKKwkvKiBFbnN1cmUg dGhlcmUgYXJlIG5vIHN0YWxlIGFjdGl2ZSBicmVha3BvaW50IHBvaW50ZXJzLgorCSAqIEJyZWFr cG9pbnQgbGlzdCBpcyBjdXJyZW50bHkga2VwdCAtIHdlIGNvdWxkIGVtcHR5IGl0CisJICogaGVy ZSBidXQgd2UnZCBuZWVkIHRvIGhhbmRsZSByZWZjb3VudHMgY29ycmVjdGx5LCBhbmQKKwkgKiB3 ZSdkIG5lZWQgYSAndGhyJyByZWZlcmVuY2UgZm9yIHRoYXQuCisJICoKKwkgKiBYWFg6IGNsZWFy IGJyZWFrcG9pbnQgb24gZWl0aGVyIGF0dGFjaCBvciBkZXRhY2g/CisJICovCisJaGVhcC0+ZGJn X2JyZWFrcG9pbnRzX2FjdGl2ZVswXSA9IChkdWtfYnJlYWtwb2ludCAqKSBOVUxMOworfQorCitE VUtfTE9DQUwgdm9pZCBkdWtfX2RlYnVnX2RvX2RldGFjaDIoZHVrX2hlYXAgKmhlYXApIHsKKwlk dWtfZGVidWdfZGV0YWNoZWRfZnVuY3Rpb24gZGV0YWNoZWRfY2I7CisJdm9pZCAqZGV0YWNoZWRf dWRhdGE7CisJZHVrX2h0aHJlYWQgKnRocjsKKworCXRociA9IGhlYXAtPmhlYXBfdGhyZWFkOwor CWlmICh0aHIgPT0gTlVMTCkgeworCQlEVUtfQVNTRVJUKGhlYXAtPmRiZ19kZXRhY2hlZF9jYiA9 PSBOVUxMKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1l cy4gKi8KKworCWRldGFjaGVkX2NiID0gaGVhcC0+ZGJnX2RldGFjaGVkX2NiOworCWRldGFjaGVk X3VkYXRhID0gaGVhcC0+ZGJnX3VkYXRhOworCWhlYXAtPmRiZ19kZXRhY2hlZF9jYiA9IE5VTEw7 CisJaGVhcC0+ZGJnX3VkYXRhID0gTlVMTDsKKworCWlmIChkZXRhY2hlZF9jYikgeworCQkvKiBD YXJlZnVsIGhlcmU6IHN0YXRlIG11c3QgYmUgd2lwZWQgYmVmb3JlIHRoZSBjYWxsCisJCSAqIHNv IHRoYXQgd2UgY2FuIGNsZWFubHkgaGFuZGxlIGEgcmUtYXR0YWNoIGZyb20KKwkJICogaW5zaWRl IHRoZSBjYWxsYmFjay4KKwkJICovCisJCURVS19EKERVS19EUFJJTlQoImRldGFjaGVkIGR1cmlu ZyBtZXNzYWdlIGxvb3AsIGRlbGF5ZWQgY2FsbCB0byBkZXRhY2hlZF9jYiIpKTsKKwkJZGV0YWNo ZWRfY2IodGhyLCBkZXRhY2hlZF91ZGF0YSk7CisJfQorCisJaGVhcC0+ZGJnX2RldGFjaGluZyA9 IDA7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z19kb19kZXRhY2goZHVrX2hlYXAg KmhlYXApIHsKKwlkdWtfX2RlYnVnX2RvX2RldGFjaDEoaGVhcCwgMCk7CisJZHVrX19kZWJ1Z19k b19kZXRhY2gyKGhlYXApOworfQorCisvKiBDYWxsZWQgb24gYSByZWFkL3dyaXRlIGVycm9yOiBO VUxMIGFsbCBjYWxsYmFja3MgZXhjZXB0IHRoZSBkZXRhY2hlZAorICogY2FsbGJhY2sgc28gdGhh dCB3ZSBuZXZlciBhY2NpZGVudGFsbHkgY2FsbCB0aGVtIGFmdGVyIGEgcmVhZC93cml0ZQorICog ZXJyb3IgaGFzIGJlZW4gaW5kaWNhdGVkLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBm b3IgdGhlIHRyYW5zcG9ydAorICogSS9PIGNhbGxiYWNrcyB0byBmdWxmaWxsIGd1YXJhbnRlZWQg Y2FsbGJhY2sgc2VtYW50aWNzLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlYnVnX251bGxf bW9zdF9jYWxsYmFja3MoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19oZWFwICpoZWFwOworCisJ RFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwloZWFwID0gdGhyLT5oZWFwOworCURVS19EKERV S19EUFJJTlQoInRyYW5zcG9ydCByZWFkL3dyaXRlIGVycm9yLCBOVUxMIGFsbCBjYWxsYmFja3Mg ZXhwZWN0ZWQgZGV0YWNoZWQiKSk7CisJaGVhcC0+ZGJnX3JlYWRfY2IgPSBOVUxMOworCWhlYXAt PmRiZ193cml0ZV9jYiA9IE5VTEw7ICAvKiB0aGlzIGlzIGVzcGVjaWFsbHkgY3JpdGljYWwgdG8g YXZvaWQgYW5vdGhlciB3cml0ZSBjYWxsIGluIGRldGFjaDEoKSAqLworCWhlYXAtPmRiZ19wZWVr X2NiID0gTlVMTDsKKwloZWFwLT5kYmdfcmVhZF9mbHVzaF9jYiA9IE5VTEw7CisJaGVhcC0+ZGJn X3dyaXRlX2ZsdXNoX2NiID0gTlVMTDsKKwloZWFwLT5kYmdfcmVxdWVzdF9jYiA9IE5VTEw7CisJ Lyoga2VlcCBoZWFwLT5kYmdfZGV0YWNoZWRfY2IgKi8KK30KKworLyoKKyAqICBQYXVzZSBoYW5k bGluZworICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfc2V0X3BhdXNlX3N0YXRlKGR1 a19odGhyZWFkICp0aHIsIGR1a19oZWFwICpoZWFwLCBkdWtfc21hbGxfdWludF90IHBhdXNlX2Zs YWdzKSB7CisJZHVrX3VpbnRfZmFzdDMyX3QgbGluZTsKKworCWxpbmUgPSBkdWtfZGVidWdfY3Vy cl9saW5lKHRocik7CisJaWYgKGxpbmUgPT0gMCkgeworCQkvKiBObyBsaW5lIGluZm8gZm9yIGN1 cnJlbnQgZnVuY3Rpb24uICovCisJCWR1a19zbWFsbF91aW50X3QgdXBkYXRlZF9mbGFnczsKKwor CQl1cGRhdGVkX2ZsYWdzID0gcGF1c2VfZmxhZ3MgJiB+KERVS19QQVVTRV9GTEFHX0xJTkVfQ0hB TkdFKTsKKwkJRFVLX0QoRFVLX0RQUklOVCgibm8gbGluZSBpbmZvIGZvciBjdXJyZW50IGFjdGl2 YXRpb24sIGRpc2FibGUgbGluZS1iYXNlZCBwYXVzZSBmbGFnczogMHglMDhseCAtPiAweCUwOGx4 IiwKKwkJICAgICAgICAgICAgICAgICAobG9uZykgcGF1c2VfZmxhZ3MsIChsb25nKSB1cGRhdGVk X2ZsYWdzKSk7CisJCXBhdXNlX2ZsYWdzID0gdXBkYXRlZF9mbGFnczsKKwl9CisKKwloZWFwLT5k YmdfcGF1c2VfZmxhZ3MgPSBwYXVzZV9mbGFnczsKKwloZWFwLT5kYmdfcGF1c2VfYWN0ID0gdGhy LT5jYWxsc3RhY2tfY3VycjsKKwloZWFwLT5kYmdfcGF1c2Vfc3RhcnRsaW5lID0gKGR1a191aW50 MzJfdCkgbGluZTsKKwloZWFwLT5kYmdfc3RhdGVfZGlydHkgPSAxOworCisJRFVLX0QoRFVLX0RQ UklOVCgic2V0IHN0YXRlIGZvciBhdXRvbWF0aWMgcGF1c2UgdHJpZ2dlcnMsIGZsYWdzPTB4JTA4 bHgsIGFjdD0lcCwgc3RhcnRsaW5lPSVsZCIsCisJICAgICAgICAgICAgICAgICAobG9uZykgaGVh cC0+ZGJnX3BhdXNlX2ZsYWdzLCAodm9pZCAqKSBoZWFwLT5kYmdfcGF1c2VfYWN0LAorCSAgICAg ICAgICAgICAgICAgKGxvbmcpIGhlYXAtPmRiZ19wYXVzZV9zdGFydGxpbmUpKTsKK30KKworLyoK KyAqICBEZWJ1ZyBjb25uZWN0aW9uIHBlZWsgYW5kIGZsdXNoIHByaW1pdGl2ZXMKKyAqLworCitE VUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfZGVidWdfcmVhZF9wZWVrKGR1a19odGhyZWFkICp0 aHIpIHsKKwlkdWtfaGVhcCAqaGVhcDsKKwlkdWtfYm9vbF90IHJldDsKKworCURVS19BU1NFUlQo dGhyICE9IE5VTEwpOworCWhlYXAgPSB0aHItPmhlYXA7CisJRFVLX0FTU0VSVChoZWFwICE9IE5V TEwpOworCisJaWYgKGhlYXAtPmRiZ19yZWFkX2NiID09IE5VTEwpIHsKKwkJRFVLX0QoRFVLX0RQ UklOVCgiYXR0ZW1wdCB0byBwZWVrIGluIGRldGFjaGVkIHN0YXRlLCByZXR1cm4gemVybyAoPSBu byBkYXRhKSIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChoZWFwLT5kYmdfcGVla19jYiA9PSBO VUxMKSB7CisJCURVS19ERChEVUtfRERQUklOVCgibm8gcGVlayBjYWxsYmFjaywgcmV0dXJuIHpl cm8gKD0gbm8gZGF0YSkiKSk7CisJCXJldHVybiAwOworCX0KKworCURVS19fREJHX1RQT1JUX0VO VEVSKCk7CisJcmV0ID0gKGR1a19ib29sX3QpIChoZWFwLT5kYmdfcGVla19jYihoZWFwLT5kYmdf dWRhdGEpID4gMCk7CisJRFVLX19EQkdfVFBPUlRfRVhJVCgpOworCXJldHVybiByZXQ7Cit9CisK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z19yZWFkX2ZsdXNoKGR1a19odGhyZWFkICp0aHIp IHsKKwlkdWtfaGVhcCAqaGVhcDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCWhlYXAg PSB0aHItPmhlYXA7CisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCisJaWYgKGhlYXAtPmRi Z19yZWFkX2NiID09IE5VTEwpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiYXR0ZW1wdCB0byByZWFk IGZsdXNoIGluIGRldGFjaGVkIHN0YXRlLCBpZ25vcmUiKSk7CisJCXJldHVybjsKKwl9CisJaWYg KGhlYXAtPmRiZ19yZWFkX2ZsdXNoX2NiID09IE5VTEwpIHsKKwkJRFVLX0REKERVS19ERFBSSU5U KCJubyByZWFkIGZsdXNoIGNhbGxiYWNrLCBpZ25vcmUiKSk7CisJCXJldHVybjsKKwl9CisKKwlE VUtfX0RCR19UUE9SVF9FTlRFUigpOworCWhlYXAtPmRiZ19yZWFkX2ZsdXNoX2NiKGhlYXAtPmRi Z191ZGF0YSk7CisJRFVLX19EQkdfVFBPUlRfRVhJVCgpOworfQorCitEVUtfSU5URVJOQUwgdm9p ZCBkdWtfZGVidWdfd3JpdGVfZmx1c2goZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19oZWFwICpo ZWFwOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJaGVhcCA9IHRoci0+aGVhcDsKKwlE VUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisKKwlpZiAoaGVhcC0+ZGJnX3JlYWRfY2IgPT0gTlVM TCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJhdHRlbXB0IHRvIHdyaXRlIGZsdXNoIGluIGRldGFj aGVkIHN0YXRlLCBpZ25vcmUiKSk7CisJCXJldHVybjsKKwl9CisJaWYgKGhlYXAtPmRiZ193cml0 ZV9mbHVzaF9jYiA9PSBOVUxMKSB7CisJCURVS19ERChEVUtfRERQUklOVCgibm8gd3JpdGUgZmx1 c2ggY2FsbGJhY2ssIGlnbm9yZSIpKTsKKwkJcmV0dXJuOworCX0KKworCURVS19fREJHX1RQT1JU X0VOVEVSKCk7CisJaGVhcC0+ZGJnX3dyaXRlX2ZsdXNoX2NiKGhlYXAtPmRiZ191ZGF0YSk7CisJ RFVLX19EQkdfVFBPUlRfRVhJVCgpOworfQorCisvKgorICogIERlYnVnIGNvbm5lY3Rpb24gc2tp cCBwcmltaXRpdmVzCisgKi8KKworLyogU2tpcCBmdWxseS4gKi8KK0RVS19JTlRFUk5BTCB2b2lk IGR1a19kZWJ1Z19za2lwX2J5dGVzKGR1a19odGhyZWFkICp0aHIsIGR1a19zaXplX3QgbGVuZ3Ro KSB7CisJZHVrX3VpbnQ4X3QgZHVtbXlbNjRdOworCWR1a19zaXplX3Qgbm93OworCisJRFVLX0FT U0VSVCh0aHIgIT0gTlVMTCk7CisKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlub3cgPSAobGVu Z3RoID4gc2l6ZW9mKGR1bW15KSA/IHNpemVvZihkdW1teSkgOiBsZW5ndGgpOworCQlkdWtfZGVi dWdfcmVhZF9ieXRlcyh0aHIsIGR1bW15LCBub3cpOworCQlsZW5ndGggLT0gbm93OworCX0KK30K KworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlYnVnX3NraXBfYnl0ZShkdWtfaHRocmVhZCAqdGhy KSB7CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwkodm9pZCkgZHVrX2RlYnVnX3JlYWRf Ynl0ZSh0aHIpOworfQorCisvKgorICogIERlYnVnIGNvbm5lY3Rpb24gcmVhZCBwcmltaXRpdmVz CisgKi8KKworLyogUGVlayBhaGVhZCBpbiB0aGUgc3RyZWFtIG9uZSBieXRlLiAqLworRFVLX0lO VEVSTkFMIHVpbnQ4X3QgZHVrX2RlYnVnX3BlZWtfYnl0ZShkdWtfaHRocmVhZCAqdGhyKSB7CisJ LyogSXQgaXMgaW1wb3J0YW50IG5vdCB0byBjYWxsIHRoaXMgaWYgdGhlIGxhc3QgYnl0ZSByZWFk IHdhcyBhbiBFT00uCisJICogUmVhZGluZyBhaGVhZCBpbiB0aGlzIHNjZW5hcmlvIHdvdWxkIGNh dXNlIHVubmVjZXNzYXJ5IGJsb2NraW5nIGlmCisJICogYW5vdGhlciBtZXNzYWdlIGlzIG5vdCBh dmFpbGFibGUuCisJICovCisKKwlkdWtfdWludDhfdCB4OworCisJeCA9IGR1a19kZWJ1Z19yZWFk X2J5dGUodGhyKTsKKwl0aHItPmhlYXAtPmRiZ19oYXZlX25leHRfYnl0ZSA9IDE7CisJdGhyLT5o ZWFwLT5kYmdfbmV4dF9ieXRlID0geDsKKwlyZXR1cm4geDsKK30KKworLyogUmVhZCBmdWxseS4g Ki8KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z19yZWFkX2J5dGVzKGR1a19odGhyZWFkICp0 aHIsIGR1a191aW50OF90ICpkYXRhLCBkdWtfc2l6ZV90IGxlbmd0aCkgeworCWR1a19oZWFwICpo ZWFwOworCWR1a191aW50OF90ICpwOworCWR1a19zaXplX3QgbGVmdDsKKwlkdWtfc2l6ZV90IGdv dDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCWhlYXAgPSB0aHItPmhlYXA7CisJRFVL X0FTU0VSVChoZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQoZGF0YSAhPSBOVUxMKTsKKworCWlm IChoZWFwLT5kYmdfcmVhZF9jYiA9PSBOVUxMKSB7CisJCURVS19EKERVS19EUFJJTlQoImF0dGVt cHQgdG8gcmVhZCAlbGQgYnl0ZXMgaW4gZGV0YWNoZWQgc3RhdGUsIHJldHVybiB6ZXJvIGRhdGEi LCAobG9uZykgbGVuZ3RoKSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBOT1RFOiBsZW5ndGgg bWF5IGJlIHplcm8gKi8KKwlwID0gZGF0YTsKKwlpZiAobGVuZ3RoID49IDEgJiYgaGVhcC0+ZGJn X2hhdmVfbmV4dF9ieXRlKSB7CisJCWhlYXAtPmRiZ19oYXZlX25leHRfYnl0ZSA9IDA7CisJCSpw KysgPSBoZWFwLT5kYmdfbmV4dF9ieXRlOworCX0KKwlmb3IgKDs7KSB7CisJCWxlZnQgPSAoZHVr X3NpemVfdCkgKChkYXRhICsgbGVuZ3RoKSAtIHApOworCQlpZiAobGVmdCA9PSAwKSB7CisJCQli cmVhazsKKwkJfQorCQlEVUtfQVNTRVJUKGhlYXAtPmRiZ19yZWFkX2NiICE9IE5VTEwpOworCQlE VUtfQVNTRVJUKGxlZnQgPj0gMSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1RSQU5T UE9SVF9UT1JUVVJFKQorCQlsZWZ0ID0gMTsKKyNlbmRpZgorCQlEVUtfX0RCR19UUE9SVF9FTlRF UigpOworCQlnb3QgPSBoZWFwLT5kYmdfcmVhZF9jYihoZWFwLT5kYmdfdWRhdGEsIChjaGFyICop IHAsIGxlZnQpOworCQlEVUtfX0RCR19UUE9SVF9FWElUKCk7CisKKwkJaWYgKGdvdCA9PSAwIHx8 IGdvdCA+IGxlZnQpIHsKKwkJCURVS19EKERVS19EUFJJTlQoImNvbm5lY3Rpb24gZXJyb3IgZHVy aW5nIHJlYWQsIHJldHVybiB6ZXJvIGRhdGEiKSk7CisJCQlkdWtfX2RlYnVnX251bGxfbW9zdF9j YWxsYmFja3ModGhyKTsgIC8qIGF2b2lkIGNhbGxpbmcgd3JpdGUgY2FsbGJhY2sgaW4gZGV0YWNo MSgpICovCisJCQlEVUtfX1NFVF9DT05OX0JST0tFTih0aHIsIDEpOworCQkJZ290byBmYWlsOwor CQl9CisJCXAgKz0gZ290OworCX0KKwlyZXR1cm47CisKKyBmYWlsOgorCWR1a19tZW16ZXJvKCh2 b2lkICopIGRhdGEsIChzaXplX3QpIGxlbmd0aCk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfdWlu dDhfdCBkdWtfZGVidWdfcmVhZF9ieXRlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfdWludDhf dCB4OworCisJeCA9IDA7ICAvKiBqdXN0IGluIGNhc2UgY2FsbGJhY2sgaXMgYnJva2VuIGFuZCB3 b24ndCB3cml0ZSAneCcgKi8KKwlkdWtfZGVidWdfcmVhZF9ieXRlcyh0aHIsICZ4LCAxKTsKKwly ZXR1cm4geDsKK30KKworRFVLX0xPQ0FMIGR1a191aW50MzJfdCBkdWtfX2RlYnVnX3JlYWRfdWlu dDMyX3JhdyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQ4X3QgYnVmWzRdOworCisJRFVL X0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwlkdWtfZGVidWdfcmVhZF9ieXRlcyh0aHIsIGJ1Ziwg NCk7CisJcmV0dXJuICgoZHVrX3VpbnQzMl90KSBidWZbMF0gPDwgMjQpIHwKKwkgICAgICAgKChk dWtfdWludDMyX3QpIGJ1ZlsxXSA8PCAxNikgfAorCSAgICAgICAoKGR1a191aW50MzJfdCkgYnVm WzJdIDw8IDgpIHwKKwkgICAgICAgKGR1a191aW50MzJfdCkgYnVmWzNdOworfQorCitEVUtfTE9D QUwgZHVrX2ludDMyX3QgZHVrX19kZWJ1Z19yZWFkX2ludDMyX3JhdyhkdWtfaHRocmVhZCAqdGhy KSB7CisJcmV0dXJuIChkdWtfaW50MzJfdCkgZHVrX19kZWJ1Z19yZWFkX3VpbnQzMl9yYXcodGhy KTsKK30KKworRFVLX0xPQ0FMIGR1a191aW50MTZfdCBkdWtfX2RlYnVnX3JlYWRfdWludDE2X3Jh dyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQ4X3QgYnVmWzJdOworCisJRFVLX0FTU0VS VCh0aHIgIT0gTlVMTCk7CisKKwlkdWtfZGVidWdfcmVhZF9ieXRlcyh0aHIsIGJ1ZiwgMik7CisJ cmV0dXJuICgoZHVrX3VpbnQxNl90KSBidWZbMF0gPDwgOCkgfAorCSAgICAgICAoZHVrX3VpbnQx Nl90KSBidWZbMV07Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaW50MzJfdCBkdWtfZGVidWdfcmVh ZF9pbnQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zbWFsbF91aW50X3QgeDsKKwlkdWtfc21h bGxfdWludF90IHQ7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKworCXggPSBkdWtfZGVi dWdfcmVhZF9ieXRlKHRocik7CisJaWYgKHggPj0gMHhjMCkgeworCQl0ID0gZHVrX2RlYnVnX3Jl YWRfYnl0ZSh0aHIpOworCQlyZXR1cm4gKGR1a19pbnQzMl90KSAoKCh4IC0gMHhjMCkgPDwgOCkg KyB0KTsKKwl9IGVsc2UgaWYgKHggPj0gMHg4MCkgeworCQlyZXR1cm4gKGR1a19pbnQzMl90KSAo eCAtIDB4ODApOworCX0gZWxzZSBpZiAoeCA9PSBEVUtfREJHX0lCX0lOVDQpIHsKKwkJcmV0dXJu IChkdWtfaW50MzJfdCkgZHVrX19kZWJ1Z19yZWFkX3VpbnQzMl9yYXcodGhyKTsKKwl9CisKKwlE VUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBjb25uZWN0aW9uIGVycm9yOiBmYWlsZWQgdG8gZGVjb2Rl IGludCIpKTsKKwlEVUtfX1NFVF9DT05OX0JST0tFTih0aHIsIDEpOworCXJldHVybiAwOworfQor CitEVUtfTE9DQUwgZHVrX2hzdHJpbmcgKmR1a19fZGVidWdfcmVhZF9oc3RyaW5nX3JhdyhkdWtf aHRocmVhZCAqdGhyLCBkdWtfdWludDMyX3QgbGVuKSB7CisJZHVrX3VpbnQ4X3QgYnVmWzMxXTsK KwlkdWtfdWludDhfdCAqcDsKKworCWlmIChsZW4gPD0gc2l6ZW9mKGJ1ZikpIHsKKwkJZHVrX2Rl YnVnX3JlYWRfYnl0ZXModGhyLCBidWYsIChkdWtfc2l6ZV90KSBsZW4pOworCQlkdWtfcHVzaF9s c3RyaW5nKHRociwgKGNvbnN0IGNoYXIgKikgYnVmLCAoZHVrX3NpemVfdCkgbGVuKTsKKwl9IGVs c2UgeworCQlwID0gKGR1a191aW50OF90ICopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcih0aHIsIChk dWtfc2l6ZV90KSBsZW4pOyAgLyogemVybyBmb3IgcGFyYW5vaWEgKi8KKwkJRFVLX0FTU0VSVChw ICE9IE5VTEwpOworCQlkdWtfZGVidWdfcmVhZF9ieXRlcyh0aHIsIHAsIChkdWtfc2l6ZV90KSBs ZW4pOworCQkodm9pZCkgZHVrX2J1ZmZlcl90b19zdHJpbmcodGhyLCAtMSk7ICAvKiBTYWZldHkg cmVsaWVzIG9uIGRlYnVnIGNsaWVudCwgd2hpY2ggaXMgT0suICovCisJfQorCisJcmV0dXJuIGR1 a19yZXF1aXJlX2hzdHJpbmcodGhyLCAtMSk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaHN0cmlu ZyAqZHVrX2RlYnVnX3JlYWRfaHN0cmluZyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3NtYWxs X3VpbnRfdCB4OworCWR1a191aW50MzJfdCBsZW47CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxM KTsKKworCXggPSBkdWtfZGVidWdfcmVhZF9ieXRlKHRocik7CisJaWYgKHggPj0gMHg2MCAmJiB4 IDw9IDB4N2YpIHsKKwkJLyogRm9yIHNob3J0IHN0cmluZ3MsIHVzZSBhIGZpeGVkIHRlbXAgYnVm ZmVyLiAqLworCQlsZW4gPSAoZHVrX3VpbnQzMl90KSAoeCAtIDB4NjApOworCX0gZWxzZSBpZiAo eCA9PSBEVUtfREJHX0lCX1NUUjIpIHsKKwkJbGVuID0gKGR1a191aW50MzJfdCkgZHVrX19kZWJ1 Z19yZWFkX3VpbnQxNl9yYXcodGhyKTsKKwl9IGVsc2UgaWYgKHggPT0gRFVLX0RCR19JQl9TVFI0 KSB7CisJCWxlbiA9IChkdWtfdWludDMyX3QpIGR1a19fZGVidWdfcmVhZF91aW50MzJfcmF3KHRo cik7CisJfSBlbHNlIHsKKwkJZ290byBmYWlsOworCX0KKworCXJldHVybiBkdWtfX2RlYnVnX3Jl YWRfaHN0cmluZ19yYXcodGhyLCBsZW4pOworCisgZmFpbDoKKwlEVUtfRChEVUtfRFBSSU5UKCJk ZWJ1ZyBjb25uZWN0aW9uIGVycm9yOiBmYWlsZWQgdG8gZGVjb2RlIGludCIpKTsKKwlEVUtfX1NF VF9DT05OX0JST0tFTih0aHIsIDEpOworCWR1a19wdXNoX2hzdHJpbmdfZW1wdHkodGhyKTsgIC8q IGFsd2F5cyBwdXNoIHNvbWUgc3RyaW5nICovCisJcmV0dXJuIGR1a19yZXF1aXJlX2hzdHJpbmco dGhyLCAtMSk7Cit9CisKK0RVS19MT0NBTCBkdWtfaGJ1ZmZlciAqZHVrX19kZWJ1Z19yZWFkX2hi dWZmZXJfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a191aW50MzJfdCBsZW4pIHsKKwlkdWtfdWlu dDhfdCAqcDsKKworCXAgPSAoZHVrX3VpbnQ4X3QgKikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyKHRo ciwgKGR1a19zaXplX3QpIGxlbik7ICAvKiB6ZXJvIGZvciBwYXJhbm9pYSAqLworCURVS19BU1NF UlQocCAhPSBOVUxMKTsKKwlkdWtfZGVidWdfcmVhZF9ieXRlcyh0aHIsIHAsIChkdWtfc2l6ZV90 KSBsZW4pOworCisJcmV0dXJuIGR1a19yZXF1aXJlX2hidWZmZXIodGhyLCAtMSk7Cit9CisKK0RV S19MT0NBTCB2b2lkICpkdWtfX2RlYnVnX3JlYWRfcG9pbnRlcl9yYXcoZHVrX2h0aHJlYWQgKnRo cikgeworCWR1a19zbWFsbF91aW50X3QgeDsKKwlkdWtfX3B0cl91bmlvbiBwdTsKKworCURVS19B U1NFUlQodGhyICE9IE5VTEwpOworCisJeCA9IGR1a19kZWJ1Z19yZWFkX2J5dGUodGhyKTsKKwlp ZiAoeCAhPSBzaXplb2YocHUpKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJZHVrX2RlYnVnX3JlYWRf Ynl0ZXModGhyLCAoZHVrX3VpbnQ4X3QgKikgJnB1LnAsIHNpemVvZihwdSkpOworI2lmIGRlZmlu ZWQoRFVLX1VTRV9JTlRFR0VSX0xFKQorCWR1a19ieXRlc3dhcF9ieXRlcygoZHVrX3VpbnQ4X3Qg KikgcHUuYiwgc2l6ZW9mKHB1KSk7CisjZW5kaWYKKwlyZXR1cm4gKHZvaWQgKikgcHUucDsKKwor IGZhaWw6CisJRFVLX0QoRFVLX0RQUklOVCgiZGVidWcgY29ubmVjdGlvbiBlcnJvcjogZmFpbGVk IHRvIGRlY29kZSBwb2ludGVyIikpOworCURVS19fU0VUX0NPTk5fQlJPS0VOKHRociwgMSk7CisJ cmV0dXJuICh2b2lkICopIE5VTEw7Cit9CisKK0RVS19MT0NBTCBkdWtfZG91YmxlX3QgZHVrX19k ZWJ1Z19yZWFkX2RvdWJsZV9yYXcoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19kb3VibGVfdW5p b24gZHU7CisKKwlEVUtfQVNTRVJUKHNpemVvZihkdS51YykgPT0gOCk7CisJZHVrX2RlYnVnX3Jl YWRfYnl0ZXModGhyLCAoZHVrX3VpbnQ4X3QgKikgZHUudWMsIHNpemVvZihkdS51YykpOworCURV S19EQkxVTklPTl9ET1VCTEVfTlRPSCgmZHUpOworCXJldHVybiBkdS5kOworfQorCisjaWYgMAor RFVLX0lOVEVSTkFMIGR1a19oZWFwaGRyICpkdWtfZGVidWdfcmVhZF9oZWFwcHRyKGR1a19odGhy ZWFkICp0aHIpIHsKKwlkdWtfc21hbGxfdWludF90IHg7CisKKwlEVUtfQVNTRVJUKHRociAhPSBO VUxMKTsKKworCXggPSBkdWtfZGVidWdfcmVhZF9ieXRlKHRocik7CisJaWYgKHggIT0gRFVLX0RC R19JQl9IRUFQUFRSKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gKGR1a19oZWFwaGRy ICopIGR1a19fZGVidWdfcmVhZF9wb2ludGVyX3Jhdyh0aHIpOworCisgZmFpbDoKKwlEVUtfRChE VUtfRFBSSU5UKCJkZWJ1ZyBjb25uZWN0aW9uIGVycm9yOiBmYWlsZWQgdG8gZGVjb2RlIGhlYXBw dHIiKSk7CisJRFVLX19TRVRfQ09OTl9CUk9LRU4odGhyLCAxKTsKKwlyZXR1cm4gTlVMTDsKK30K KyNlbmRpZgorCitEVUtfSU5URVJOQUwgZHVrX2hlYXBoZHIgKmR1a19kZWJ1Z19yZWFkX2FueV9w dHIoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zbWFsbF91aW50X3QgeDsKKworCURVS19BU1NF UlQodGhyICE9IE5VTEwpOworCisJeCA9IGR1a19kZWJ1Z19yZWFkX2J5dGUodGhyKTsKKwlzd2l0 Y2ggKHgpIHsKKwljYXNlIERVS19EQkdfSUJfT0JKRUNUOgorCWNhc2UgRFVLX0RCR19JQl9QT0lO VEVSOgorCWNhc2UgRFVLX0RCR19JQl9IRUFQUFRSOgorCQkvKiBBY2NlcHQgYW55IHBvaW50ZXIt bGlrZSB2YWx1ZTsgZm9yICdvYmplY3QnIGR2YWx1ZSwgcmVhZAorCQkgKiBhbmQgaWdub3JlIHRo ZSBjbGFzcyBudW1iZXIuCisJCSAqLworCQlpZiAoeCA9PSBEVUtfREJHX0lCX09CSkVDVCkgewor CQkJZHVrX2RlYnVnX3NraXBfYnl0ZSh0aHIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gKGR1a19oZWFwaGRyICopIGR1a19fZGVidWdfcmVh ZF9wb2ludGVyX3Jhdyh0aHIpOworCisgZmFpbDoKKwlEVUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBj b25uZWN0aW9uIGVycm9yOiBmYWlsZWQgdG8gZGVjb2RlIGFueSBwb2ludGVyIChvYmplY3QsIHBv aW50ZXIsIGhlYXBwdHIpIikpOworCURVS19fU0VUX0NPTk5fQlJPS0VOKHRociwgMSk7CisJcmV0 dXJuIE5VTEw7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfdHZhbCAqZHVrX2RlYnVnX3JlYWRfdHZh bChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3VpbnQ4X3QgeDsKKwlkdWtfdWludF90IHQ7CisJ ZHVrX3VpbnQzMl90IGxlbjsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJeCA9IGR1 a19kZWJ1Z19yZWFkX2J5dGUodGhyKTsKKworCWlmICh4ID49IDB4YzApIHsKKwkJdCA9IChkdWtf dWludF90KSAoeCAtIDB4YzApOworCQl0ID0gKHQgPDwgOCkgKyBkdWtfZGVidWdfcmVhZF9ieXRl KHRocik7CisJCWR1a19wdXNoX3VpbnQodGhyLCAoZHVrX3VpbnRfdCkgdCk7CisJCWdvdG8gcmV0 dXJuX3B0cjsKKwl9CisJaWYgKHggPj0gMHg4MCkgeworCQlkdWtfcHVzaF91aW50KHRociwgKGR1 a191aW50X3QpICh4IC0gMHg4MCkpOworCQlnb3RvIHJldHVybl9wdHI7CisJfQorCWlmICh4ID49 IDB4NjApIHsKKwkJbGVuID0gKGR1a191aW50MzJfdCkgKHggLSAweDYwKTsKKwkJZHVrX19kZWJ1 Z19yZWFkX2hzdHJpbmdfcmF3KHRociwgbGVuKTsKKwkJZ290byByZXR1cm5fcHRyOworCX0KKwor CXN3aXRjaCAoeCkgeworCWNhc2UgRFVLX0RCR19JQl9JTlQ0OiB7CisJCWR1a19pbnQzMl90IGkg PSBkdWtfX2RlYnVnX3JlYWRfaW50MzJfcmF3KHRocik7CisJCWR1a19wdXNoX2kzMih0aHIsIGkp OworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfREJHX0lCX1NUUjQ6IHsKKwkJbGVuID0gZHVrX19k ZWJ1Z19yZWFkX3VpbnQzMl9yYXcodGhyKTsKKwkJZHVrX19kZWJ1Z19yZWFkX2hzdHJpbmdfcmF3 KHRociwgbGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0RCR19JQl9TVFIyOiB7CisJCWxl biA9IGR1a19fZGVidWdfcmVhZF91aW50MTZfcmF3KHRocik7CisJCWR1a19fZGVidWdfcmVhZF9o c3RyaW5nX3Jhdyh0aHIsIGxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19EQkdfSUJfQlVG NDogeworCQlsZW4gPSBkdWtfX2RlYnVnX3JlYWRfdWludDMyX3Jhdyh0aHIpOworCQlkdWtfX2Rl YnVnX3JlYWRfaGJ1ZmZlcl9yYXcodGhyLCBsZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtf REJHX0lCX0JVRjI6IHsKKwkJbGVuID0gZHVrX19kZWJ1Z19yZWFkX3VpbnQxNl9yYXcodGhyKTsK KwkJZHVrX19kZWJ1Z19yZWFkX2hidWZmZXJfcmF3KHRociwgbGVuKTsKKwkJYnJlYWs7CisJfQor CWNhc2UgRFVLX0RCR19JQl9VTkRFRklORUQ6IHsKKwkJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7 CisJCWJyZWFrOworCX0KKwljYXNlIERVS19EQkdfSUJfTlVMTDogeworCQlkdWtfcHVzaF9udWxs KHRocik7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19EQkdfSUJfVFJVRTogeworCQlkdWtfcHVz aF90cnVlKHRocik7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19EQkdfSUJfRkFMU0U6IHsKKwkJ ZHVrX3B1c2hfZmFsc2UodGhyKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0RCR19JQl9OVU1C RVI6IHsKKwkJZHVrX2RvdWJsZV90IGQ7CisJCWQgPSBkdWtfX2RlYnVnX3JlYWRfZG91YmxlX3Jh dyh0aHIpOworCQlkdWtfcHVzaF9udW1iZXIodGhyLCBkKTsKKwkJYnJlYWs7CisJfQorCWNhc2Ug RFVLX0RCR19JQl9PQkpFQ1Q6IHsKKwkJZHVrX2hlYXBoZHIgKmg7CisJCWR1a19kZWJ1Z19za2lw X2J5dGUodGhyKTsKKwkJaCA9IChkdWtfaGVhcGhkciAqKSBkdWtfX2RlYnVnX3JlYWRfcG9pbnRl cl9yYXcodGhyKTsKKwkJZHVrX3B1c2hfaGVhcHB0cih0aHIsICh2b2lkICopIGgpOworCQlicmVh azsKKwl9CisJY2FzZSBEVUtfREJHX0lCX1BPSU5URVI6IHsKKwkJdm9pZCAqcHRyOworCQlwdHIg PSBkdWtfX2RlYnVnX3JlYWRfcG9pbnRlcl9yYXcodGhyKTsKKwkJZHVrX3B1c2hfcG9pbnRlcih0 aHIsIHB0cik7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19EQkdfSUJfTElHSFRGVU5DOiB7CisJ CS8qIFhYWDogTm90IG5lZWRlZCBmb3Igbm93LCBzbyBub3QgaW1wbGVtZW50ZWQuICBOb3RlIHRo YXQKKwkJICogZnVuY3Rpb24gcG9pbnRlcnMgbWF5IGhhdmUgZGlmZmVyZW50IHNpemUvbGF5b3V0 IHRoYW4KKwkJICogYSB2b2lkIHBvaW50ZXIuCisJCSAqLworCQlEVUtfRChEVUtfRFBSSU5UKCJy ZWFkaW5nIGxpZ2h0ZnVuYyB2YWx1ZXMgdW5pbXBsZW1lbnRlZCIpKTsKKwkJZ290byBmYWlsOwor CX0KKwljYXNlIERVS19EQkdfSUJfSEVBUFBUUjogeworCQlkdWtfaGVhcGhkciAqaDsKKwkJaCA9 IChkdWtfaGVhcGhkciAqKSBkdWtfX2RlYnVnX3JlYWRfcG9pbnRlcl9yYXcodGhyKTsKKwkJZHVr X3B1c2hfaGVhcHB0cih0aHIsICh2b2lkICopIGgpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtf REJHX0lCX1VOVVNFRDogIC8qIHVudXNlZDogbm90IGFjY2VwdGVkIGluIGluYm91bmQgbWVzc2Fn ZXMgKi8KKwlkZWZhdWx0OgorCQlnb3RvIGZhaWw7CisJfQorCisgcmV0dXJuX3B0cjoKKwlyZXR1 cm4gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKTsKKworIGZhaWw6CisJRFVLX0QoRFVLX0RQ UklOVCgiZGVidWcgY29ubmVjdGlvbiBlcnJvcjogZmFpbGVkIHRvIGRlY29kZSB0dmFsIikpOwor CURVS19fU0VUX0NPTk5fQlJPS0VOKHRociwgMSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisg KiAgRGVidWcgY29ubmVjdGlvbiB3cml0ZSBwcmltaXRpdmVzCisgKi8KKworLyogV3JpdGUgZnVs bHkuICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfd3JpdGVfYnl0ZXMoZHVrX2h0aHJl YWQgKnRociwgY29uc3QgZHVrX3VpbnQ4X3QgKmRhdGEsIGR1a19zaXplX3QgbGVuZ3RoKSB7CisJ ZHVrX2hlYXAgKmhlYXA7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisJZHVrX3NpemVfdCBsZWZ0 OworCWR1a19zaXplX3QgZ290OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FT U0VSVChsZW5ndGggPT0gMCB8fCBkYXRhICE9IE5VTEwpOworCWhlYXAgPSB0aHItPmhlYXA7CisJ RFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCisJaWYgKGhlYXAtPmRiZ193cml0ZV9jYiA9PSBO VUxMKSB7CisJCURVS19EKERVS19EUFJJTlQoImF0dGVtcHQgdG8gd3JpdGUgJWxkIGJ5dGVzIGlu IGRldGFjaGVkIHN0YXRlLCBpZ25vcmUiLCAobG9uZykgbGVuZ3RoKSk7CisJCXJldHVybjsKKwl9 CisJaWYgKGxlbmd0aCA9PSAwKSB7CisJCS8qIEF2b2lkIGRvaW5nIGFuIGFjdHVhbCB3cml0ZSBj YWxsYmFjayB3aXRoIGxlbmd0aCA9PSAwLAorCQkgKiBiZWNhdXNlIHRoYXQncyByZXNlcnZlZCBm b3IgYSB3cml0ZSBmbHVzaC4KKwkJICovCisJCXJldHVybjsKKwl9CisJRFVLX0FTU0VSVChkYXRh ICE9IE5VTEwpOworCisJcCA9IGRhdGE7CisJZm9yICg7OykgeworCQlsZWZ0ID0gKGR1a19zaXpl X3QpICgoZGF0YSArIGxlbmd0aCkgLSBwKTsKKwkJaWYgKGxlZnQgPT0gMCkgeworCQkJYnJlYWs7 CisJCX0KKwkJRFVLX0FTU0VSVChoZWFwLT5kYmdfd3JpdGVfY2IgIT0gTlVMTCk7CisJCURVS19B U1NFUlQobGVmdCA+PSAxKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfVFJBTlNQT1JU X1RPUlRVUkUpCisJCWxlZnQgPSAxOworI2VuZGlmCisJCURVS19fREJHX1RQT1JUX0VOVEVSKCk7 CisJCWdvdCA9IGhlYXAtPmRiZ193cml0ZV9jYihoZWFwLT5kYmdfdWRhdGEsIChjb25zdCBjaGFy ICopIHAsIGxlZnQpOworCQlEVUtfX0RCR19UUE9SVF9FWElUKCk7CisKKwkJaWYgKGdvdCA9PSAw IHx8IGdvdCA+IGxlZnQpIHsKKwkJCWR1a19fZGVidWdfbnVsbF9tb3N0X2NhbGxiYWNrcyh0aHIp OyAgLyogYXZvaWQgY2FsbGluZyB3cml0ZSBjYWxsYmFjayBpbiBkZXRhY2gxKCkgKi8KKwkJCURV S19EKERVS19EUFJJTlQoImNvbm5lY3Rpb24gZXJyb3IgZHVyaW5nIHdyaXRlIikpOworCQkJRFVL X19TRVRfQ09OTl9CUk9LRU4odGhyLCAxKTsKKwkJCXJldHVybjsKKwkJfQorCQlwICs9IGdvdDsK Kwl9Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z193cml0ZV9ieXRlKGR1a19odGhy ZWFkICp0aHIsIGR1a191aW50OF90IHgpIHsKKwlkdWtfZGVidWdfd3JpdGVfYnl0ZXModGhyLCAo Y29uc3QgZHVrX3VpbnQ4X3QgKikgJngsIDEpOworfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtf ZGVidWdfd3JpdGVfdW51c2VkKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfZGVidWdfd3JpdGVf Ynl0ZSh0aHIsIERVS19EQkdfSUJfVU5VU0VEKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVr X2RlYnVnX3dyaXRlX3VuZGVmaW5lZChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2RlYnVnX3dy aXRlX2J5dGUodGhyLCBEVUtfREJHX0lCX1VOREVGSU5FRCk7Cit9CisKKyNpZiBkZWZpbmVkKERV S19VU0VfREVCVUdHRVJfSU5TUEVDVCkKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z193cml0 ZV9udWxsKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfZGVidWdfd3JpdGVfYnl0ZSh0aHIsIERV S19EQkdfSUJfTlVMTCk7Cit9CisjZW5kaWYKKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlYnVn X3dyaXRlX2Jvb2xlYW4oZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRfdCB2YWwpIHsKKwlkdWtf ZGVidWdfd3JpdGVfYnl0ZSh0aHIsIHZhbCA/IERVS19EQkdfSUJfVFJVRSA6IERVS19EQkdfSUJf RkFMU0UpOworfQorCisvKiBXcml0ZSBzaWduZWQgMzItYml0IGludGVnZXIuICovCitEVUtfSU5U RVJOQUwgdm9pZCBkdWtfZGVidWdfd3JpdGVfaW50KGR1a19odGhyZWFkICp0aHIsIGR1a19pbnQz Ml90IHgpIHsKKwlkdWtfdWludDhfdCBidWZbNV07CisJZHVrX3NpemVfdCBsZW47CisKKwlEVUtf QVNTRVJUKHRociAhPSBOVUxMKTsKKworCWlmICh4ID49IDAgJiYgeCA8PSAweDNmTCkgeworCQli dWZbMF0gPSAoZHVrX3VpbnQ4X3QpICgweDgwICsgeCk7CisJCWxlbiA9IDE7CisJfSBlbHNlIGlm ICh4ID49IDAgJiYgeCA8PSAweDNmZmZMKSB7CisJCWJ1ZlswXSA9IChkdWtfdWludDhfdCkgKDB4 YzAgKyAoeCA+PiA4KSk7CisJCWJ1ZlsxXSA9IChkdWtfdWludDhfdCkgKHggJiAweGZmKTsKKwkJ bGVuID0gMjsKKwl9IGVsc2UgeworCQkvKiBTaWduZWQgaW50ZWdlcnMgYWx3YXlzIG1hcCB0byA0 IGJ5dGVzIG5vdy4gKi8KKwkJYnVmWzBdID0gKGR1a191aW50OF90KSBEVUtfREJHX0lCX0lOVDQ7 CisJCWJ1ZlsxXSA9IChkdWtfdWludDhfdCkgKCh4ID4+IDI0KSAmIDB4ZmYpOworCQlidWZbMl0g PSAoZHVrX3VpbnQ4X3QpICgoeCA+PiAxNikgJiAweGZmKTsKKwkJYnVmWzNdID0gKGR1a191aW50 OF90KSAoKHggPj4gOCkgJiAweGZmKTsKKwkJYnVmWzRdID0gKGR1a191aW50OF90KSAoeCAmIDB4 ZmYpOworCQlsZW4gPSA1OworCX0KKwlkdWtfZGVidWdfd3JpdGVfYnl0ZXModGhyLCBidWYsIGxl bik7Cit9CisKKy8qIFdyaXRlIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiAqLworRFVLX0lOVEVS TkFMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX3VpbnQoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQz Ml90IHgpIHsKKwkvKiBUaGUgZGVidWdnZXIgcHJvdG9jb2wgZG9lc24ndCBzdXBwb3J0IGEgcGxh aW4gaW50ZWdlciBlbmNvZGluZyBmb3IKKwkgKiB0aGUgZnVsbCAzMi1iaXQgdW5zaWduZWQgcmFu Z2UgKG9ubHkgMzItYml0IHNpZ25lZCkuICBGb3Igbm93LAorCSAqIHVuc2lnbmVkIDMyLWJpdCB2 YWx1ZXMgc2ltcGx5IHdyaXR0ZW4gYXMgc2lnbmVkIG9uZXMuICBUaGlzIGlzIG5vdAorCSAqIGEg Y29uY3JldGUgaXNzdWUgZXhjZXB0IGZvciAzMi1iaXQgaGVhcGhkciBmaWVsZHMuICBQcm9wZXIg c29sdXRpb25zCisJICogd291bGQgYmUgdG8gKGEpIHdyaXRlIHN1Y2ggaW50ZWdlcnMgYXMgSUVF RSBkb3VibGVzIG9yIChiKSBhZGQgYW4KKwkgKiB1bnNpZ25lZCAzMi1iaXQgZHZhbHVlLgorCSAq LworCWlmICh4ID49IDB4ODAwMDAwMDBVTCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJ3cml0aW5n IHVuc2lnbmVkIGludGVnZXIgMHglMDhseCBhcyBzaWduZWQgaW50ZWdlciIsCisJCSAgICAgICAg ICAgICAgICAgKGxvbmcpIHgpKTsKKwl9CisJZHVrX2RlYnVnX3dyaXRlX2ludCh0aHIsIChkdWtf aW50MzJfdCkgeCk7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z193cml0ZV9zdHJi dWYoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZGF0YSwgZHVrX3NpemVfdCBsZW5ndGgs IGR1a191aW50OF90IG1hcmtlcl9iYXNlKSB7CisJZHVrX3VpbnQ4X3QgYnVmWzVdOworCWR1a19z aXplX3QgYnVmbGVuOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChs ZW5ndGggPT0gMCB8fCBkYXRhICE9IE5VTEwpOworCisJaWYgKGxlbmd0aCA8PSAweDFmVUwgJiYg bWFya2VyX2Jhc2UgPT0gRFVLX0RCR19JQl9TVFI0KSB7CisJCS8qIEZvciBzdHJpbmdzLCBzcGVj aWFsIGZvcm0gZm9yIHNob3J0IGxlbmd0aHMuICovCisJCWJ1ZlswXSA9IChkdWtfdWludDhfdCkg KDB4NjAgKyBsZW5ndGgpOworCQlidWZsZW4gPSAxOworCX0gZWxzZSBpZiAobGVuZ3RoIDw9IDB4 ZmZmZlVMKSB7CisJCWJ1ZlswXSA9IChkdWtfdWludDhfdCkgKG1hcmtlcl9iYXNlICsgMSk7CisJ CWJ1ZlsxXSA9IChkdWtfdWludDhfdCkgKGxlbmd0aCA+PiA4KTsKKwkJYnVmWzJdID0gKGR1a191 aW50OF90KSAobGVuZ3RoICYgMHhmZik7CisJCWJ1ZmxlbiA9IDM7CisJfSBlbHNlIHsKKwkJYnVm WzBdID0gKGR1a191aW50OF90KSBtYXJrZXJfYmFzZTsKKwkJYnVmWzFdID0gKGR1a191aW50OF90 KSAobGVuZ3RoID4+IDI0KTsKKwkJYnVmWzJdID0gKGR1a191aW50OF90KSAoKGxlbmd0aCA+PiAx NikgJiAweGZmKTsKKwkJYnVmWzNdID0gKGR1a191aW50OF90KSAoKGxlbmd0aCA+PiA4KSAmIDB4 ZmYpOworCQlidWZbNF0gPSAoZHVrX3VpbnQ4X3QpIChsZW5ndGggJiAweGZmKTsKKwkJYnVmbGVu ID0gNTsKKwl9CisKKwlkdWtfZGVidWdfd3JpdGVfYnl0ZXModGhyLCAoY29uc3QgZHVrX3VpbnQ4 X3QgKikgYnVmLCBidWZsZW4pOworCWR1a19kZWJ1Z193cml0ZV9ieXRlcyh0aHIsIChjb25zdCBk dWtfdWludDhfdCAqKSBkYXRhLCBsZW5ndGgpOworfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtf ZGVidWdfd3JpdGVfc3RyaW5nKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGNoYXIgKmRhdGEsIGR1 a19zaXplX3QgbGVuZ3RoKSB7CisJZHVrX2RlYnVnX3dyaXRlX3N0cmJ1Zih0aHIsIGRhdGEsIGxl bmd0aCwgRFVLX0RCR19JQl9TVFI0KTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlYnVn X3dyaXRlX2NzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqZGF0YSkgeworCURV S19BU1NFUlQodGhyICE9IE5VTEwpOworCisJZHVrX2RlYnVnX3dyaXRlX3N0cmluZyh0aHIsCisJ ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorCSAgICAgICAgICAgICAgICAgICAgICAgZGF0 YSA/IERVS19TVFJMRU4oZGF0YSkgOiAwKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2Rl YnVnX3dyaXRlX2hzdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hzdHJpbmcgKmgpIHsKKwlE VUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKworCS8qIFhYWDogZGlmZmVyZW50aWF0ZSBudWxsIHBv aW50ZXIgZnJvbSBlbXB0eSBzdHJpbmc/ICovCisJZHVrX2RlYnVnX3dyaXRlX3N0cmluZyh0aHIs CisJICAgICAgICAgICAgICAgICAgICAgICAoaCAhPSBOVUxMID8gKGNvbnN0IGNoYXIgKikgRFVL X0hTVFJJTkdfR0VUX0RBVEEoaCkgOiBOVUxMKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICho ICE9IE5VTEwgPyAoZHVrX3NpemVfdCkgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkgOiAwKSk7 Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfd3JpdGVfaHN0cmluZ19zYWZlX3RvcChk dWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2RlYnVnX3dyaXRlX2hzdHJpbmcodGhyLCBkdWtfc2Fm ZV90b19oc3RyaW5nKHRociwgLTEpKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlYnVn X3dyaXRlX2J1ZmZlcihkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICpkYXRhLCBkdWtfc2l6 ZV90IGxlbmd0aCkgeworCWR1a19kZWJ1Z193cml0ZV9zdHJidWYodGhyLCBkYXRhLCBsZW5ndGgs IERVS19EQkdfSUJfQlVGNCk7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z193cml0 ZV9oYnVmZmVyKGR1a19odGhyZWFkICp0aHIsIGR1a19oYnVmZmVyICpoKSB7CisJRFVLX0FTU0VS VCh0aHIgIT0gTlVMTCk7CisKKwlkdWtfZGVidWdfd3JpdGVfYnVmZmVyKHRociwKKwkgICAgICAg ICAgICAgICAgICAgICAgIChoICE9IE5VTEwgPyAoY29uc3QgY2hhciAqKSBEVUtfSEJVRkZFUl9H RVRfREFUQV9QVFIodGhyLT5oZWFwLCBoKSA6IE5VTEwpLAorCSAgICAgICAgICAgICAgICAgICAg ICAgKGggIT0gTlVMTCA/IChkdWtfc2l6ZV90KSBEVUtfSEJVRkZFUl9HRVRfU0laRShoKSA6IDAp KTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWJ1Z193cml0ZV9wb2ludGVyX3JhdyhkdWtf aHRocmVhZCAqdGhyLCB2b2lkICpwdHIsIGR1a191aW50OF90IGlieXRlKSB7CisJZHVrX3VpbnQ4 X3QgYnVmWzJdOworCWR1a19fcHRyX3VuaW9uIHB1OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVM TCk7CisJRFVLX0FTU0VSVChzaXplb2YocHRyKSA+PSAxICYmIHNpemVvZihwdHIpIDw9IDE2KTsK KwkvKiBwdHIgbWF5IGJlIE5VTEwgKi8KKworCWJ1ZlswXSA9IGlieXRlOworCWJ1ZlsxXSA9IHNp emVvZihwdSk7CisJZHVrX2RlYnVnX3dyaXRlX2J5dGVzKHRociwgYnVmLCAyKTsKKwlwdS5wID0g KHZvaWQgKikgcHRyOworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFR0VSX0xFKQorCWR1a19ieXRl c3dhcF9ieXRlcygoZHVrX3VpbnQ4X3QgKikgcHUuYiwgc2l6ZW9mKHB1KSk7CisjZW5kaWYKKwlk dWtfZGVidWdfd3JpdGVfYnl0ZXModGhyLCAoY29uc3QgZHVrX3VpbnQ4X3QgKikgJnB1LnAsIChk dWtfc2l6ZV90KSBzaXplb2YocHUpKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlYnVn X3dyaXRlX3BvaW50ZXIoZHVrX2h0aHJlYWQgKnRociwgdm9pZCAqcHRyKSB7CisJZHVrX19kZWJ1 Z193cml0ZV9wb2ludGVyX3Jhdyh0aHIsIHB0ciwgRFVLX0RCR19JQl9QT0lOVEVSKTsKK30KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9EVU1QSEVBUCkgfHwgZGVmaW5lZChEVUtfVVNF X0RFQlVHR0VSX0lOU1BFQ1QpCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfd3JpdGVfaGVh cHB0cihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGVhcGhkciAqaCkgeworCWR1a19fZGVidWdfd3Jp dGVfcG9pbnRlcl9yYXcodGhyLCAodm9pZCAqKSBoLCBEVUtfREJHX0lCX0hFQVBQVFIpOworfQor I2VuZGlmICAvKiBEVUtfVVNFX0RFQlVHR0VSX0RVTVBIRUFQIHx8IERVS19VU0VfREVCVUdHRVJf SU5TUEVDVCAqLworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfd3JpdGVfaG9iamVjdChk dWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqKSB7CisJZHVrX3VpbnQ4X3QgYnVmWzNd OworCWR1a19fcHRyX3VuaW9uIHB1OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVL X0FTU0VSVChzaXplb2Yob2JqKSA+PSAxICYmIHNpemVvZihvYmopIDw9IDE2KTsKKwlEVUtfQVNT RVJUKG9iaiAhPSBOVUxMKTsKKworCWJ1ZlswXSA9IERVS19EQkdfSUJfT0JKRUNUOworCWJ1Zlsx XSA9IChkdWtfdWludDhfdCkgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihvYmopOworCWJ1 ZlsyXSA9IHNpemVvZihwdSk7CisJZHVrX2RlYnVnX3dyaXRlX2J5dGVzKHRociwgYnVmLCAzKTsK KwlwdS5wID0gKHZvaWQgKikgb2JqOworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFR0VSX0xFKQor CWR1a19ieXRlc3dhcF9ieXRlcygoZHVrX3VpbnQ4X3QgKikgcHUuYiwgc2l6ZW9mKHB1KSk7Cisj ZW5kaWYKKwlkdWtfZGVidWdfd3JpdGVfYnl0ZXModGhyLCAoY29uc3QgZHVrX3VpbnQ4X3QgKikg JnB1LnAsIChkdWtfc2l6ZV90KSBzaXplb2YocHUpKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQg ZHVrX2RlYnVnX3dyaXRlX3R2YWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2KSB7CisJ ZHVrX2NfZnVuY3Rpb24gbGZfZnVuYzsKKwlkdWtfc21hbGxfdWludF90IGxmX2ZsYWdzOworCWR1 a191aW50OF90IGJ1Zls0XTsKKwlkdWtfZG91YmxlX3VuaW9uIGR1MTsKKwlkdWtfZG91YmxlX3Vu aW9uIGR1MjsKKwlkdWtfaW50MzJfdCBpMzI7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsK KwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2 KSkgeworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6CisJCWR1a19kZWJ1Z193cml0ZV9ieXRlKHRo ciwgRFVLX0RCR19JQl9VTkRFRklORUQpOworCQlicmVhazsKKwljYXNlIERVS19UQUdfVU5VU0VE OgorCQlkdWtfZGVidWdfd3JpdGVfYnl0ZSh0aHIsIERVS19EQkdfSUJfVU5VU0VEKTsKKwkJYnJl YWs7CisJY2FzZSBEVUtfVEFHX05VTEw6CisJCWR1a19kZWJ1Z193cml0ZV9ieXRlKHRociwgRFVL X0RCR19JQl9OVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX0JPT0xFQU46CisJCURVS19B U1NFUlQoRFVLX1RWQUxfR0VUX0JPT0xFQU4odHYpID09IDAgfHwKKwkJICAgICAgICAgICBEVUtf VFZBTF9HRVRfQk9PTEVBTih0dikgPT0gMSk7CisJCWR1a19kZWJ1Z193cml0ZV9ib29sZWFuKHRo ciwgRFVLX1RWQUxfR0VUX0JPT0xFQU4odHYpKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX1BP SU5URVI6CisJCWR1a19kZWJ1Z193cml0ZV9wb2ludGVyKHRociwgKHZvaWQgKikgRFVLX1RWQUxf R0VUX1BPSU5URVIodHYpKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX0xJR0hURlVOQzoKKwkJ RFVLX1RWQUxfR0VUX0xJR0hURlVOQyh0diwgbGZfZnVuYywgbGZfZmxhZ3MpOworCQlidWZbMF0g PSBEVUtfREJHX0lCX0xJR0hURlVOQzsKKwkJYnVmWzFdID0gKGR1a191aW50OF90KSAobGZfZmxh Z3MgPj4gOCk7CisJCWJ1ZlsyXSA9IChkdWtfdWludDhfdCkgKGxmX2ZsYWdzICYgMHhmZik7CisJ CWJ1ZlszXSA9IHNpemVvZihsZl9mdW5jKTsKKwkJZHVrX2RlYnVnX3dyaXRlX2J5dGVzKHRociwg YnVmLCA0KTsKKwkJZHVrX2RlYnVnX3dyaXRlX2J5dGVzKHRociwgKGNvbnN0IGR1a191aW50OF90 ICopICZsZl9mdW5jLCBzaXplb2YobGZfZnVuYykpOworCQlicmVhazsKKwljYXNlIERVS19UQUdf U1RSSU5HOgorCQlkdWtfZGVidWdfd3JpdGVfaHN0cmluZyh0aHIsIERVS19UVkFMX0dFVF9TVFJJ TkcodHYpKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX09CSkVDVDoKKwkJZHVrX2RlYnVnX3dy aXRlX2hvYmplY3QodGhyLCBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2KSk7CisJCWJyZWFrOworCWNh c2UgRFVLX1RBR19CVUZGRVI6CisJCWR1a19kZWJ1Z193cml0ZV9oYnVmZmVyKHRociwgRFVLX1RW QUxfR0VUX0JVRkZFUih0dikpOworCQlicmVhazsKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElO VCkKKwljYXNlIERVS19UQUdfRkFTVElOVDoKKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIE51bWJl cnMgYXJlIG5vcm1hbGl6ZWQgdG8gYmlnIChuZXR3b3JrKSBlbmRpYW4uICBXZSBjYW4KKwkJICog KGJ1dCBhcmUgbm90IHJlcXVpcmVkKSB0byB1c2UgaW50ZWdlciBkdmFsdWVzIHdoZW4gdGhlcmUn cworCQkgKiBubyBsb3NzIG9mIHByZWNpc2lvbi4KKwkJICoKKwkJICogWFhYOiBzaGFyZSBjaGVj ayB3aXRoIG90aGVyIGNvZGU7IHRoaXMgY2hlY2sgaXMgc2xvdyBidXQKKwkJICogcmVsaWFibGUg YW5kIGRvZXNuJ3QgcmVxdWlyZSBjYXJlZnVsIGV4cG9uZW50L21hbnRpc3NhCisJCSAqIG1hc2sg dHJpY2tzIGFzIGluIHRoZSBmYXN0aW50IGRvd25ncmFkZSBjb2RlLgorCQkgKi8KKwkJRFVLX0FT U0VSVCghRFVLX1RWQUxfSVNfVU5VU0VEKHR2KSk7CisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNf TlVNQkVSKHR2KSk7CisJCWR1MS5kID0gRFVLX1RWQUxfR0VUX05VTUJFUih0dik7CisJCWkzMiA9 IChkdWtfaW50MzJfdCkgZHUxLmQ7CisJCWR1Mi5kID0gKGR1a19kb3VibGVfdCkgaTMyOworCisJ CURVS19ERChEVUtfRERQUklOVCgiaTMyPSVsZCBkdTE9JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4 JTAyeCUwMnggIgorCQkgICAgICAgICAgICAgICAgICAgImR1Mj0lMDJ4JTAyeCUwMnglMDJ4JTAy eCUwMnglMDJ4JTAyeCIsCisJCSAgICAgICAgICAgICAgICAgICAobG9uZykgaTMyLAorCQkgICAg ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgZHUxLnVjWzBdLCAodW5zaWduZWQgaW50KSBk dTEudWNbMV0sCisJCSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBkdTEudWNbMl0s ICh1bnNpZ25lZCBpbnQpIGR1MS51Y1szXSwKKwkJICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBpbnQpIGR1MS51Y1s0XSwgKHVuc2lnbmVkIGludCkgZHUxLnVjWzVdLAorCQkgICAgICAgICAg ICAgICAgICAgKHVuc2lnbmVkIGludCkgZHUxLnVjWzZdLCAodW5zaWduZWQgaW50KSBkdTEudWNb N10sCisJCSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBkdTIudWNbMF0sICh1bnNp Z25lZCBpbnQpIGR1Mi51Y1sxXSwKKwkJICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQp IGR1Mi51Y1syXSwgKHVuc2lnbmVkIGludCkgZHUyLnVjWzNdLAorCQkgICAgICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGludCkgZHUyLnVjWzRdLCAodW5zaWduZWQgaW50KSBkdTIudWNbNV0sCisJ CSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBkdTIudWNbNl0sICh1bnNpZ25lZCBp bnQpIGR1Mi51Y1s3XSkpOworCisJCWlmIChkdWtfbWVtY21wKChjb25zdCB2b2lkICopIGR1MS51 YywgKGNvbnN0IHZvaWQgKikgZHUyLnVjLCBzaXplb2YoZHUxLnVjKSkgPT0gMCkgeworCQkJZHVr X2RlYnVnX3dyaXRlX2ludCh0aHIsIGkzMik7CisJCX0gZWxzZSB7CisJCQlEVUtfREJMVU5JT05f RE9VQkxFX0hUT04oJmR1MSk7CisJCQlkdWtfZGVidWdfd3JpdGVfYnl0ZSh0aHIsIERVS19EQkdf SUJfTlVNQkVSKTsKKwkJCWR1a19kZWJ1Z193cml0ZV9ieXRlcyh0aHIsIChjb25zdCBkdWtfdWlu dDhfdCAqKSBkdTEudWMsIHNpemVvZihkdTEudWMpKTsKKwkJfQorCX0KK30KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ERUJVR0dFUl9EVU1QSEVBUCkKKy8qIFZhcmlhbnQgZm9yIHdyaXRpbmcgZHVr X3R2YWxzIHNvIHRoYXQgYW55IGhlYXAgYWxsb2NhdGVkIHZhbHVlcyBhcmUKKyAqIHdyaXR0ZW4g b3V0IGFzIHRhZ2dlZCBoZWFwIHBvaW50ZXJzLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Rl YnVnX3dyaXRlX3R2YWxfaGVhcHB0cihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpIHsK KwlpZiAoRFVLX1RWQUxfSVNfSEVBUF9BTExPQ0FURUQodHYpKSB7CisJCWR1a19oZWFwaGRyICpo ID0gRFVLX1RWQUxfR0VUX0hFQVBIRFIodHYpOworCQlkdWtfZGVidWdfd3JpdGVfaGVhcHB0cih0 aHIsIGgpOworCX0gZWxzZSB7CisJCWR1a19kZWJ1Z193cml0ZV90dmFsKHRociwgdHYpOworCX0K K30KKyNlbmRpZiAgLyogRFVLX1VTRV9ERUJVR0dFUl9EVU1QSEVBUCAqLworCisvKgorICogIERl YnVnIGNvbm5lY3Rpb24gbWVzc2FnZSB3cml0ZSBoZWxwZXJzCisgKi8KKworI2lmIDAgIC8qIHVu dXNlZCAqLworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2RlYnVnX3dyaXRlX3JlcXVlc3QoZHVrX2h0 aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBjb21tYW5kKSB7CisJZHVrX2RlYnVnX3dyaXRl X2J5dGUodGhyLCBEVUtfREJHX0lCX1JFUVVFU1QpOworCWR1a19kZWJ1Z193cml0ZV9pbnQodGhy LCBjb21tYW5kKTsKK30KKyNlbmRpZgorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfd3Jp dGVfcmVwbHkoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19kZWJ1Z193cml0ZV9ieXRlKHRociwg RFVLX0RCR19JQl9SRVBMWSk7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z193cml0 ZV9lcnJvcl9lb20oZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBlcnJfY29kZSwg Y29uc3QgY2hhciAqbXNnKSB7CisJLyogQWxsb3cgTlVMTCAnbXNnJyAqLworCWR1a19kZWJ1Z193 cml0ZV9ieXRlKHRociwgRFVLX0RCR19JQl9FUlJPUik7CisJZHVrX2RlYnVnX3dyaXRlX2ludCh0 aHIsIChkdWtfaW50MzJfdCkgZXJyX2NvZGUpOworCWR1a19kZWJ1Z193cml0ZV9jc3RyaW5nKHRo ciwgbXNnKTsKKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7Cit9CisKK0RVS19JTlRFUk5BTCB2 b2lkIGR1a19kZWJ1Z193cml0ZV9ub3RpZnkoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3Vp bnRfdCBjb21tYW5kKSB7CisJZHVrX2RlYnVnX3dyaXRlX2J5dGUodGhyLCBEVUtfREJHX0lCX05P VElGWSk7CisJZHVrX2RlYnVnX3dyaXRlX2ludCh0aHIsIChkdWtfaW50MzJfdCkgY29tbWFuZCk7 Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z193cml0ZV9lb20oZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19kZWJ1Z193cml0ZV9ieXRlKHRociwgRFVLX0RCR19JQl9FT00pOworCisJ LyogQXMgYW4gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwgd3JpdGUgZmx1c2ggYWZ0ZXIgZXZlcnkg RU9NIChhbmQgdGhlCisJICogdmVyc2lvbiBpZGVudGlmaWVyKS4gIEEgYmV0dGVyIGltcGxlbWVu dGF0aW9uIHdvdWxkIGZsdXNoIG9ubHkgd2hlbgorCSAqIER1a3RhcGUgaXMgZmluaXNoZWQgcHJv Y2Vzc2luZyBtZXNzYWdlcyBzbyB0aGF0IGEgZmx1c2ggb25seSBoYXBwZW5zCisJICogYWZ0ZXIg YWxsIG91dGJvdW5kIG1lc3NhZ2VzIGFyZSBmaW5pc2hlZCBvbiB0aGF0IG9jY2FzaW9uLgorCSAq LworCWR1a19kZWJ1Z193cml0ZV9mbHVzaCh0aHIpOworfQorCisvKgorICogIFN0YXR1cyBtZXNz YWdlIGFuZCBoZWxwZXJzCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a191aW50X2Zhc3QzMl90IGR1 a19kZWJ1Z19jdXJyX2xpbmUoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19hY3RpdmF0aW9uICph Y3Q7CisJZHVrX3VpbnRfZmFzdDMyX3QgbGluZTsKKwlkdWtfdWludF9mYXN0MzJfdCBwYzsKKwor CWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJaWYgKGFjdCA9PSBOVUxMKSB7CisJCXJldHVy biAwOworCX0KKworCS8qIFdlJ3JlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHR3byBvcGNvZGVzOyBh Y3QtPnBjIGluZGljYXRlcyB0aGUgbmV4dAorCSAqIGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVk LiAgVGhpcyBpcyB1c3VhbGx5IHRoZSBjb3JyZWN0IHBjL2xpbmUgdG8KKwkgKiBpbmRpY2F0ZSBp biBTdGF0dXMuICAoRm9yIHRoZSAnZGVidWdnZXInIHN0YXRlbWVudCB0aGlzIG5vdyByZXBvcnRz CisJICogdGhlIHBjL2xpbmUgYWZ0ZXIgdGhlIGRlYnVnZ2VyIHN0YXRlbWVudCBiZWNhdXNlIHRo ZSBkZWJ1Z2dlciBvcGNvZGUKKwkgKiBoYXMgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkLikKKwkgKi8K KworCXBjID0gZHVrX2h0aHJlYWRfZ2V0X2FjdF9jdXJyX3BjKHRociwgYWN0KTsKKworCS8qIFhY WDogdGhpcyBzaG91bGQgYmUgb3B0aW1pemVkIHRvIGJlIGEgcmF3IHF1ZXJ5IGFuZCBhdm9pZCB2 YWxzdGFjaworCSAqIG9wZXJhdGlvbnMgaWYgcG9zc2libGUuCisJICovCisJZHVrX3B1c2hfdHZh bCh0aHIsICZhY3QtPnR2X2Z1bmMpOworCWxpbmUgPSBkdWtfaG9iamVjdF9wYzJsaW5lX3F1ZXJ5 KHRociwgLTEsIHBjKTsKKwlkdWtfcG9wKHRocik7CisJcmV0dXJuIGxpbmU7Cit9CisKK0RVS19J TlRFUk5BTCB2b2lkIGR1a19kZWJ1Z19zZW5kX3N0YXR1cyhkdWtfaHRocmVhZCAqdGhyKSB7CisJ ZHVrX2FjdGl2YXRpb24gKmFjdDsKKworCWR1a19kZWJ1Z193cml0ZV9ub3RpZnkodGhyLCBEVUtf REJHX0NNRF9TVEFUVVMpOworCWR1a19kZWJ1Z193cml0ZV9pbnQodGhyLCAoRFVLX0hFQVBfSEFT X0RFQlVHR0VSX1BBVVNFRCh0aHItPmhlYXApID8gMSA6IDApKTsKKworCWFjdCA9IHRoci0+Y2Fs bHN0YWNrX2N1cnI7CisJaWYgKGFjdCA9PSBOVUxMKSB7CisJCWR1a19kZWJ1Z193cml0ZV91bmRl ZmluZWQodGhyKTsKKwkJZHVrX2RlYnVnX3dyaXRlX3VuZGVmaW5lZCh0aHIpOworCQlkdWtfZGVi dWdfd3JpdGVfaW50KHRociwgMCk7CisJCWR1a19kZWJ1Z193cml0ZV9pbnQodGhyLCAwKTsKKwl9 IGVsc2UgeworCQlkdWtfcHVzaF90dmFsKHRociwgJmFjdC0+dHZfZnVuYyk7CisJCWR1a19nZXRf cHJvcF9saXRlcmFsKHRociwgLTEsICJmaWxlTmFtZSIpOworCQlkdWtfX2RlYnVnX3dyaXRlX2hz dHJpbmdfc2FmZV90b3AodGhyKTsKKwkJZHVrX2dldF9wcm9wX2xpdGVyYWwodGhyLCAtMiwgIm5h bWUiKTsKKwkJZHVrX19kZWJ1Z193cml0ZV9oc3RyaW5nX3NhZmVfdG9wKHRocik7CisJCWR1a19w b3BfMyh0aHIpOworCQkvKiBSZXBvcnQgbmV4dCBwYy9saW5lIHRvIGJlIGV4ZWN1dGVkLiAqLwor CQlkdWtfZGVidWdfd3JpdGVfdWludCh0aHIsIChkdWtfdWludDMyX3QpIGR1a19kZWJ1Z19jdXJy X2xpbmUodGhyKSk7CisJCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgKGR1a191aW50MzJfdCkg ZHVrX2h0aHJlYWRfZ2V0X2FjdF9jdXJyX3BjKHRociwgYWN0KSk7CisJfQorCisJZHVrX2RlYnVn X3dyaXRlX2VvbSh0aHIpOworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1RIUk9X X05PVElGWSkKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z19zZW5kX3Rocm93KGR1a19odGhy ZWFkICp0aHIsIGR1a19ib29sX3QgZmF0YWwpIHsKKwkvKgorCSAqICBORlkgPGludDogNT4gPGlu dDogZmF0YWw+IDxzdHI6IG1zZz4gPHN0cjogZmlsZW5hbWU+IDxpbnQ6IGxpbmVudW1iZXI+IEVP TQorCSAqLworCisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfdWludDMyX3QgcGM7CisKKwlE VUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfdG9wID4gdGhyLT52YWxzdGFjayk7ICAvKiBBdCBsZWFz dDogLi4uIFtlcnJdICovCisKKwlkdWtfZGVidWdfd3JpdGVfbm90aWZ5KHRociwgRFVLX0RCR19D TURfVEhST1cpOworCWR1a19kZWJ1Z193cml0ZV9pbnQodGhyLCAoZHVrX2ludDMyX3QpIGZhdGFs KTsKKworCS8qIFJlcG9ydCB0aHJvd24gdmFsdWUgdG8gY2xpZW50IGNvZXJjZWQgdG8gc3RyaW5n ICovCisJZHVrX2R1cF90b3AodGhyKTsKKwlkdWtfX2RlYnVnX3dyaXRlX2hzdHJpbmdfc2FmZV90 b3AodGhyKTsKKwlkdWtfcG9wKHRocik7CisKKwlpZiAoZHVrX2lzX2Vycm9yKHRociwgLTEpKSB7 CisJCS8qIEVycm9yIGluc3RhbmNlLCB1c2UgYXVnbWVudGVkIGVycm9yIGRhdGEgZGlyZWN0bHkg Ki8KKwkJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0xLCBEVUtfU1RSSURYX0ZJTEVf TkFNRSk7CisJCWR1a19fZGVidWdfd3JpdGVfaHN0cmluZ19zYWZlX3RvcCh0aHIpOworCQlkdWtf Z2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfTElORV9OVU1CRVIpOwor CQlkdWtfZGVidWdfd3JpdGVfdWludCh0aHIsIGR1a19nZXRfdWludCh0aHIsIC0xKSk7CisJCWR1 a19wb3BfMih0aHIpOworCX0gZWxzZSB7CisJCS8qIEZvciBhbnl0aGluZyBvdGhlciB0aGFuIGFu IEVycm9yIGluc3RhbmNlLCB3ZSBjYWxjdWxhdGUgdGhlCisJCSAqIGVycm9yIGxvY2F0aW9uIGRp cmVjdGx5IGZyb20gdGhlIGN1cnJlbnQgYWN0aXZhdGlvbiBpZiBvbmUKKwkJICogZXhpc3RzLgor CQkgKi8KKwkJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwkJaWYgKGFjdCAhPSBOVUxMKSB7 CisJCQlkdWtfcHVzaF90dmFsKHRociwgJmFjdC0+dHZfZnVuYyk7CisJCQlkdWtfZ2V0X3Byb3Bf bGl0ZXJhbCh0aHIsIC0xLCAiZmlsZU5hbWUiKTsKKwkJCWR1a19fZGVidWdfd3JpdGVfaHN0cmlu Z19zYWZlX3RvcCh0aHIpOworCQkJcGMgPSAoZHVrX3VpbnQzMl90KSBkdWtfaHRocmVhZF9nZXRf YWN0X3ByZXZfcGModGhyLCBhY3QpOworCQkJZHVrX2RlYnVnX3dyaXRlX3VpbnQodGhyLCAoZHVr X3VpbnQzMl90KSBkdWtfaG9iamVjdF9wYzJsaW5lX3F1ZXJ5KHRociwgLTIsIHBjKSk7CisJCQlk dWtfcG9wXzIodGhyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENhbiBoYXBwZW4gaWYgZHVrX3Rocm93 KCkgaXMgY2FsbGVkIG9uIGFuIGVtcHR5CisJCQkgKiBjYWxsc3RhY2suCisJCQkgKi8KKwkJCWR1 a19kZWJ1Z193cml0ZV9jc3RyaW5nKHRociwgIiIpOworCQkJZHVrX2RlYnVnX3dyaXRlX3VpbnQo dGhyLCAwKTsKKwkJfQorCX0KKworCWR1a19kZWJ1Z193cml0ZV9lb20odGhyKTsKK30KKyNlbmRp ZiAgLyogRFVLX1VTRV9ERUJVR0dFUl9USFJPV19OT1RJRlkgKi8KKworLyoKKyAqICBEZWJ1ZyBt ZXNzYWdlIHByb2Nlc3NpbmcKKyAqLworCisvKiBTa2lwIGR2YWx1ZS4gKi8KK0RVS19MT0NBTCBk dWtfYm9vbF90IGR1a19fZGVidWdfc2tpcF9kdmFsdWUoZHVrX2h0aHJlYWQgKnRocikgeworCWR1 a191aW50OF90IHg7CisJZHVrX3VpbnQzMl90IGxlbjsKKworCXggPSBkdWtfZGVidWdfcmVhZF9i eXRlKHRocik7CisKKwlpZiAoeCA+PSAweGMwKSB7CisJCWR1a19kZWJ1Z19za2lwX2J5dGUodGhy KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh4ID49IDB4ODApIHsKKwkJcmV0dXJuIDA7CisJfQor CWlmICh4ID49IDB4NjApIHsKKwkJZHVrX2RlYnVnX3NraXBfYnl0ZXModGhyLCAoZHVrX3NpemVf dCkgKHggLSAweDYwKSk7CisJCXJldHVybiAwOworCX0KKwlzd2l0Y2goeCkgeworCWNhc2UgRFVL X0RCR19JQl9FT006CisJCXJldHVybiAxOyAgLyogUmV0dXJuIDE6IGdvdCBFT00gKi8KKwljYXNl IERVS19EQkdfSUJfUkVRVUVTVDoKKwljYXNlIERVS19EQkdfSUJfUkVQTFk6CisJY2FzZSBEVUtf REJHX0lCX0VSUk9SOgorCWNhc2UgRFVLX0RCR19JQl9OT1RJRlk6CisJCWJyZWFrOworCWNhc2Ug RFVLX0RCR19JQl9JTlQ0OgorCQkodm9pZCkgZHVrX19kZWJ1Z19yZWFkX3VpbnQzMl9yYXcodGhy KTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfREJHX0lCX1NUUjQ6CisJY2FzZSBEVUtfREJHX0lCX0JV RjQ6CisJCWxlbiA9IGR1a19fZGVidWdfcmVhZF91aW50MzJfcmF3KHRocik7CisJCWR1a19kZWJ1 Z19za2lwX2J5dGVzKHRociwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfREJHX0lCX1NUUjI6 CisJY2FzZSBEVUtfREJHX0lCX0JVRjI6CisJCWxlbiA9IGR1a19fZGVidWdfcmVhZF91aW50MTZf cmF3KHRocik7CisJCWR1a19kZWJ1Z19za2lwX2J5dGVzKHRociwgbGVuKTsKKwkJYnJlYWs7CisJ Y2FzZSBEVUtfREJHX0lCX1VOVVNFRDoKKwljYXNlIERVS19EQkdfSUJfVU5ERUZJTkVEOgorCWNh c2UgRFVLX0RCR19JQl9OVUxMOgorCWNhc2UgRFVLX0RCR19JQl9UUlVFOgorCWNhc2UgRFVLX0RC R19JQl9GQUxTRToKKwkJYnJlYWs7CisJY2FzZSBEVUtfREJHX0lCX05VTUJFUjoKKwkJZHVrX2Rl YnVnX3NraXBfYnl0ZXModGhyLCA4KTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfREJHX0lCX09CSkVD VDoKKwkJZHVrX2RlYnVnX3NraXBfYnl0ZSh0aHIpOworCQlsZW4gPSBkdWtfZGVidWdfcmVhZF9i eXRlKHRocik7CisJCWR1a19kZWJ1Z19za2lwX2J5dGVzKHRociwgbGVuKTsKKwkJYnJlYWs7CisJ Y2FzZSBEVUtfREJHX0lCX1BPSU5URVI6CisJY2FzZSBEVUtfREJHX0lCX0hFQVBQVFI6CisJCWxl biA9IGR1a19kZWJ1Z19yZWFkX2J5dGUodGhyKTsKKwkJZHVrX2RlYnVnX3NraXBfYnl0ZXModGhy LCBsZW4pOworCQlicmVhazsKKwljYXNlIERVS19EQkdfSUJfTElHSFRGVU5DOgorCQlkdWtfZGVi dWdfc2tpcF9ieXRlcyh0aHIsIDIpOworCQlsZW4gPSBkdWtfZGVidWdfcmVhZF9ieXRlKHRocik7 CisJCWR1a19kZWJ1Z19za2lwX2J5dGVzKHRociwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJZ290byBmYWlsOworCX0KKworCXJldHVybiAwOworCisgZmFpbDoKKwlEVUtfX1NFVF9DT05O X0JST0tFTih0aHIsIDEpOworCXJldHVybiAxOyAgLyogUHJldGVuZCBsaWtlIHdlIGdvdCBFT00g Ki8KK30KKworLyogU2tpcCBkdmFsdWVzIHRvIEVPTS4gKi8KK0RVS19MT0NBTCB2b2lkIGR1a19f ZGVidWdfc2tpcF90b19lb20oZHVrX2h0aHJlYWQgKnRocikgeworCWZvciAoOzspIHsKKwkJaWYg KGR1a19fZGVidWdfc2tpcF9kdmFsdWUodGhyKSkgeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisK Ky8qIFJlYWQgYW5kIHZhbGlkYXRlIGEgY2FsbCBzdGFjayBpbmRleC4gIElmIGluZGV4IGlzIGlu dmFsaWQsIHdyaXRlIG91dCBhbgorICogZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIHplcm8uCisg Ki8KK0RVS19MT0NBTCBkdWtfaW50MzJfdCBkdWtfX2RlYnVnX3JlYWRfdmFsaWRhdGVfY3NpbmRl eChkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2ludDMyX3QgbGV2ZWw7CisJbGV2ZWwgPSBkdWtf ZGVidWdfcmVhZF9pbnQodGhyKTsKKwlpZiAobGV2ZWwgPj0gMCB8fCAtbGV2ZWwgPiAoZHVrX2lu dDMyX3QpIHRoci0+Y2FsbHN0YWNrX3RvcCkgeworCQlkdWtfZGVidWdfd3JpdGVfZXJyb3JfZW9t KHRociwgRFVLX0RCR19FUlJfTk9URk9VTkQsICJpbnZhbGlkIGNhbGxzdGFjayBpbmRleCIpOwor CQlyZXR1cm4gMDsgIC8qIHplcm8gaW5kaWNhdGVzIGZhaWx1cmUgKi8KKwl9CisJcmV0dXJuIGxl dmVsOworfQorCisvKiBSZWFkIGEgY2FsbCBzdGFjayBpbmRleCBhbmQgbG9va3VwIHRoZSBjb3Jy ZXNwb25kaW5nIGR1a19hY3RpdmF0aW9uLgorICogSWYgaW5kZXggaXMgaW52YWxpZCwgd3JpdGUg b3V0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBOVUxMLgorICovCitEVUtfTE9DQUwgZHVr X2FjdGl2YXRpb24gKmR1a19fZGVidWdfcmVhZF9sZXZlbF9nZXRfYWN0aXZhdGlvbihkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfaW50MzJfdCBsZXZlbDsK KworCWxldmVsID0gZHVrX2RlYnVnX3JlYWRfaW50KHRocik7CisJYWN0ID0gZHVrX2h0aHJlYWRf Z2V0X2FjdGl2YXRpb25fZm9yX2xldmVsKHRociwgbGV2ZWwpOworCWlmIChhY3QgPT0gTlVMTCkg eworCQlkdWtfZGVidWdfd3JpdGVfZXJyb3JfZW9tKHRociwgRFVLX0RCR19FUlJfTk9URk9VTkQs ICJpbnZhbGlkIGNhbGxzdGFjayBpbmRleCIpOworCX0KKwlyZXR1cm4gYWN0OworfQorCisvKgor ICogIFNpbXBsZSBjb21tYW5kcworICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFu ZGxlX2Jhc2ljX2luZm8oZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXAgKmhlYXApIHsKKwlEVUtf VU5SRUYoaGVhcCk7CisJRFVLX0QoRFVLX0RQUklOVCgiZGVidWcgY29tbWFuZCBWZXJzaW9uIikp OworCisJZHVrX2RlYnVnX3dyaXRlX3JlcGx5KHRocik7CisJZHVrX2RlYnVnX3dyaXRlX2ludCh0 aHIsIERVS19WRVJTSU9OKTsKKwlkdWtfZGVidWdfd3JpdGVfY3N0cmluZyh0aHIsIERVS19HSVRf REVTQ1JJQkUpOworCWR1a19kZWJ1Z193cml0ZV9jc3RyaW5nKHRociwgRFVLX1VTRV9UQVJHRVRf SU5GTyk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9MRSkKKwlkdWtfZGVidWdfd3JpdGVf aW50KHRociwgMSk7CisjZWxpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX01FKQorCWR1a19kZWJ1 Z193cml0ZV9pbnQodGhyLCAyKTsKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfQkUpCisJ ZHVrX2RlYnVnX3dyaXRlX2ludCh0aHIsIDMpOworI2Vsc2UKKwlkdWtfZGVidWdfd3JpdGVfaW50 KHRociwgMCk7CisjZW5kaWYKKwlkdWtfZGVidWdfd3JpdGVfaW50KHRociwgKGR1a19pbnRfdCkg c2l6ZW9mKHZvaWQgKikpOworCWR1a19kZWJ1Z193cml0ZV9lb20odGhyKTsKK30KKworRFVLX0xP Q0FMIHZvaWQgZHVrX19kZWJ1Z19oYW5kbGVfdHJpZ2dlcl9zdGF0dXMoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2hlYXAgKmhlYXApIHsKKwlEVUtfVU5SRUYoaGVhcCk7CisJRFVLX0QoRFVLX0RQUklO VCgiZGVidWcgY29tbWFuZCBUcmlnZ2VyU3RhdHVzIikpOworCisJZHVrX2RlYnVnX3dyaXRlX3Jl cGx5KHRocik7CisJZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOworCWhlYXAtPmRiZ19zdGF0ZV9k aXJ0eSA9IDE7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX3BhdXNlKGR1 a19odGhyZWFkICp0aHIsIGR1a19oZWFwICpoZWFwKSB7CisJRFVLX0QoRFVLX0RQUklOVCgiZGVi dWcgY29tbWFuZCBQYXVzZSIpKTsKKwlkdWtfZGVidWdfc2V0X3BhdXNlZChoZWFwKTsKKwlkdWtf ZGVidWdfd3JpdGVfcmVwbHkodGhyKTsKKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7Cit9CisK K0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX3Jlc3VtZShkdWtfaHRocmVhZCAqdGhy LCBkdWtfaGVhcCAqaGVhcCkgeworCWR1a19zbWFsbF91aW50X3QgcGF1c2VfZmxhZ3M7CisKKwlE VUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIFJlc3VtZSIpKTsKKworCWR1a19kZWJ1Z19j bGVhcl9wYXVzZWQoaGVhcCk7CisKKwlwYXVzZV9mbGFncyA9IDA7CisjaWYgMCAgLyogbWFudWFs IHRlc3RpbmcgKi8KKwlwYXVzZV9mbGFncyB8PSBEVUtfUEFVU0VfRkxBR19PTkVfT1BDT0RFOwor CXBhdXNlX2ZsYWdzIHw9IERVS19QQVVTRV9GTEFHX0NBVUdIVF9FUlJPUjsKKwlwYXVzZV9mbGFn cyB8PSBEVUtfUEFVU0VfRkxBR19VTkNBVUdIVF9FUlJPUjsKKyNlbmRpZgorI2lmIGRlZmluZWQo RFVLX1VTRV9ERUJVR0dFUl9QQVVTRV9VTkNBVUdIVCkKKwlwYXVzZV9mbGFncyB8PSBEVUtfUEFV U0VfRkxBR19VTkNBVUdIVF9FUlJPUjsKKyNlbmRpZgorCisJZHVrX19kZWJ1Z19zZXRfcGF1c2Vf c3RhdGUodGhyLCBoZWFwLCBwYXVzZV9mbGFncyk7CisKKwlkdWtfZGVidWdfd3JpdGVfcmVwbHko dGhyKTsKKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1 a19fZGVidWdfaGFuZGxlX3N0ZXAoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXAgKmhlYXAsIGR1 a19pbnQzMl90IGNtZCkgeworCWR1a19zbWFsbF91aW50X3QgcGF1c2VfZmxhZ3M7CisKKwlEVUtf RChEVUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIFN0ZXBJbnRvL1N0ZXBPdmVyL1N0ZXBPdXQ6ICVk IiwgKGludCkgY21kKSk7CisKKwlpZiAoY21kID09IERVS19EQkdfQ01EX1NURVBJTlRPKSB7CisJ CXBhdXNlX2ZsYWdzID0gRFVLX1BBVVNFX0ZMQUdfTElORV9DSEFOR0UgfAorCQkgICAgICAgICAg ICAgIERVS19QQVVTRV9GTEFHX0ZVTkNfRU5UUlkgfAorCQkgICAgICAgICAgICAgIERVS19QQVVT RV9GTEFHX0ZVTkNfRVhJVDsKKwl9IGVsc2UgaWYgKGNtZCA9PSBEVUtfREJHX0NNRF9TVEVQT1ZF UikgeworCQlwYXVzZV9mbGFncyA9IERVS19QQVVTRV9GTEFHX0xJTkVfQ0hBTkdFIHwKKwkJICAg ICAgICAgICAgICBEVUtfUEFVU0VfRkxBR19GVU5DX0VYSVQ7CisJfSBlbHNlIHsKKwkJRFVLX0FT U0VSVChjbWQgPT0gRFVLX0RCR19DTURfU1RFUE9VVCk7CisJCXBhdXNlX2ZsYWdzID0gRFVLX1BB VVNFX0ZMQUdfRlVOQ19FWElUOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfUEFV U0VfVU5DQVVHSFQpCisJcGF1c2VfZmxhZ3MgfD0gRFVLX1BBVVNFX0ZMQUdfVU5DQVVHSFRfRVJS T1I7CisjZW5kaWYKKworCS8qIElmIGN1cnJlbnQgYWN0aXZhdGlvbiBkb2Vzbid0IGhhdmUgbGlu ZSBpbmZvcm1hdGlvbiwgbGluZS1iYXNlZAorCSAqIHBhdXNlIGZsYWdzIGFyZSBhdXRvbWF0aWNh bGx5IGRpc2FibGVkLiAgQXMgYSByZXN1bHQsIGUuZy4KKwkgKiBTdGVwSW50byB3aWxsIHRoZW4g cGF1c2Ugb24gKG5hdGl2ZSkgZnVuY3Rpb24gZW50cnkgb3IgZXhpdC4KKwkgKi8KKwlkdWtfZGVi dWdfY2xlYXJfcGF1c2VkKGhlYXApOworCWR1a19fZGVidWdfc2V0X3BhdXNlX3N0YXRlKHRociwg aGVhcCwgcGF1c2VfZmxhZ3MpOworCisJZHVrX2RlYnVnX3dyaXRlX3JlcGx5KHRocik7CisJZHVr X2RlYnVnX3dyaXRlX2VvbSh0aHIpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlYnVnX2hh bmRsZV9saXN0X2JyZWFrKGR1a19odGhyZWFkICp0aHIsIGR1a19oZWFwICpoZWFwKSB7CisJZHVr X3NtYWxsX2ludF90IGk7CisKKwlEVUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIExpc3RC cmVhayIpKTsKKwlkdWtfZGVidWdfd3JpdGVfcmVwbHkodGhyKTsKKwlmb3IgKGkgPSAwOyBpIDwg KGR1a19zbWFsbF9pbnRfdCkgaGVhcC0+ZGJnX2JyZWFrcG9pbnRfY291bnQ7IGkrKykgeworCQlk dWtfZGVidWdfd3JpdGVfaHN0cmluZyh0aHIsIGhlYXAtPmRiZ19icmVha3BvaW50c1tpXS5maWxl bmFtZSk7CisJCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgKGR1a191aW50MzJfdCkgaGVhcC0+ ZGJnX2JyZWFrcG9pbnRzW2ldLmxpbmUpOworCX0KKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7 Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX2FkZF9icmVhayhkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaGVhcCAqaGVhcCkgeworCWR1a19oc3RyaW5nICpmaWxlbmFtZTsKKwlk dWtfdWludDMyX3QgbGluZW51bWJlcjsKKwlkdWtfc21hbGxfaW50X3QgaWR4OworCisJRFVLX1VO UkVGKGhlYXApOworCisJZmlsZW5hbWUgPSBkdWtfZGVidWdfcmVhZF9oc3RyaW5nKHRocik7CisJ bGluZW51bWJlciA9IChkdWtfdWludDMyX3QpIGR1a19kZWJ1Z19yZWFkX2ludCh0aHIpOworCURV S19EKERVS19EUFJJTlQoImRlYnVnIGNvbW1hbmQgQWRkQnJlYWs6ICUhTzolbGQiLCAoZHVrX2hv YmplY3QgKikgZmlsZW5hbWUsIChsb25nKSBsaW5lbnVtYmVyKSk7CisJaWR4ID0gZHVrX2RlYnVn X2FkZF9icmVha3BvaW50KHRociwgZmlsZW5hbWUsIGxpbmVudW1iZXIpOworCWlmIChpZHggPj0g MCkgeworCQlkdWtfZGVidWdfd3JpdGVfcmVwbHkodGhyKTsKKwkJZHVrX2RlYnVnX3dyaXRlX2lu dCh0aHIsIChkdWtfaW50MzJfdCkgaWR4KTsKKwkJZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOwor CX0gZWxzZSB7CisJCWR1a19kZWJ1Z193cml0ZV9lcnJvcl9lb20odGhyLCBEVUtfREJHX0VSUl9U T09NQU5ZLCAibm8gc3BhY2UgZm9yIGJyZWFrcG9pbnQiKTsKKwl9Cit9CisKK0RVS19MT0NBTCB2 b2lkIGR1a19fZGVidWdfaGFuZGxlX2RlbF9icmVhayhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGVh cCAqaGVhcCkgeworCWR1a19zbWFsbF91aW50X3QgaWR4OworCisJRFVLX1VOUkVGKGhlYXApOwor CisJRFVLX0QoRFVLX0RQUklOVCgiZGVidWcgY29tbWFuZCBEZWxCcmVhayIpKTsKKwlpZHggPSAo ZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2RlYnVnX3JlYWRfaW50KHRocik7CisJaWYgKGR1a19kZWJ1 Z19yZW1vdmVfYnJlYWtwb2ludCh0aHIsIGlkeCkpIHsKKwkJZHVrX2RlYnVnX3dyaXRlX3JlcGx5 KHRocik7CisJCWR1a19kZWJ1Z193cml0ZV9lb20odGhyKTsKKwl9IGVsc2UgeworCQlkdWtfZGVi dWdfd3JpdGVfZXJyb3JfZW9tKHRociwgRFVLX0RCR19FUlJfTk9URk9VTkQsICJpbnZhbGlkIGJy ZWFrcG9pbnQgaW5kZXgiKTsKKwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFu ZGxlX2dldF92YXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfYWN0 aXZhdGlvbiAqYWN0OworCWR1a19oc3RyaW5nICpzdHI7CisJZHVrX2Jvb2xfdCByYzsKKworCURV S19VTlJFRihoZWFwKTsKKwlEVUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIEdldFZhciIp KTsKKworCWFjdCA9IGR1a19fZGVidWdfcmVhZF9sZXZlbF9nZXRfYWN0aXZhdGlvbih0aHIpOwor CWlmIChhY3QgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCXN0ciA9IGR1a19kZWJ1Z19yZWFk X2hzdHJpbmcodGhyKTsgIC8qIHB1c2ggdG8gc3RhY2sgKi8KKwlEVUtfQVNTRVJUKHN0ciAhPSBO VUxMKTsKKworCXJjID0gZHVrX2pzX2dldHZhcl9hY3RpdmF0aW9uKHRociwgYWN0LCBzdHIsIDAp OworCisJZHVrX2RlYnVnX3dyaXRlX3JlcGx5KHRocik7CisJaWYgKHJjKSB7CisJCWR1a19kZWJ1 Z193cml0ZV9pbnQodGhyLCAxKTsKKwkJRFVLX0FTU0VSVChkdWtfZ2V0X3R2YWwodGhyLCAtMikg IT0gTlVMTCk7CisJCWR1a19kZWJ1Z193cml0ZV90dmFsKHRociwgZHVrX2dldF90dmFsKHRociwg LTIpKTsKKwl9IGVsc2UgeworCQlkdWtfZGVidWdfd3JpdGVfaW50KHRociwgMCk7CisJCWR1a19k ZWJ1Z193cml0ZV91bnVzZWQodGhyKTsKKwl9CisJZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOwor fQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlYnVnX2hhbmRsZV9wdXRfdmFyKGR1a19odGhyZWFk ICp0aHIsIGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfaHN0 cmluZyAqc3RyOworCWR1a190dmFsICp0djsKKworCURVS19VTlJFRihoZWFwKTsKKwlEVUtfRChE VUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIFB1dFZhciIpKTsKKworCWFjdCA9IGR1a19fZGVidWdf cmVhZF9sZXZlbF9nZXRfYWN0aXZhdGlvbih0aHIpOworCWlmIChhY3QgPT0gTlVMTCkgeworCQly ZXR1cm47CisJfQorCXN0ciA9IGR1a19kZWJ1Z19yZWFkX2hzdHJpbmcodGhyKTsgIC8qIHB1c2gg dG8gc3RhY2sgKi8KKwlEVUtfQVNTRVJUKHN0ciAhPSBOVUxMKTsKKwl0diA9IGR1a19kZWJ1Z19y ZWFkX3R2YWwodGhyKTsKKwlpZiAodHYgPT0gTlVMTCkgeworCQkvKiBkZXRhY2hlZCAqLworCQly ZXR1cm47CisJfQorCisJZHVrX2pzX3B1dHZhcl9hY3RpdmF0aW9uKHRociwgYWN0LCBzdHIsIHR2 LCAwKTsKKworCS8qIFhYWDogQ3VycmVudCBwdXR2YXIgaW1wbGVtZW50YXRpb24gZG9lc24ndCBo YXZlIGEgc3VjY2VzcyBmbGFnLAorCSAqIGFkZCBvbmUgYW5kIHNlbmQgdG8gZGVidWcgY2xpZW50 PworCSAqLworCWR1a19kZWJ1Z193cml0ZV9yZXBseSh0aHIpOworCWR1a19kZWJ1Z193cml0ZV9l b20odGhyKTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWJ1Z19oYW5kbGVfZ2V0X2NhbGxf c3RhY2soZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfaHRocmVhZCAq Y3Vycl90aHIgPSB0aHI7CisJZHVrX2FjdGl2YXRpb24gKmN1cnJfYWN0OworCWR1a191aW50X2Zh c3QzMl90IHBjOworCWR1a191aW50X2Zhc3QzMl90IGxpbmU7CisKKwlEVUtfQVNTRVJUKHRociAh PSBOVUxMKTsKKwlEVUtfVU5SRUYoaGVhcCk7CisKKwlkdWtfZGVidWdfd3JpdGVfcmVwbHkodGhy KTsKKwl3aGlsZSAoY3Vycl90aHIgIT0gTlVMTCkgeworCQlmb3IgKGN1cnJfYWN0ID0gY3Vycl90 aHItPmNhbGxzdGFja19jdXJyOyBjdXJyX2FjdCAhPSBOVUxMOyBjdXJyX2FjdCA9IGN1cnJfYWN0 LT5wYXJlbnQpIHsKKwkJCS8qIFBDL2xpbmUgc2VtYW50aWNzIGhlcmUgYXJlOgorCQkJICogICAt IEZvciBjYWxsc3RhY2sgdG9wIHdlJ3JlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHR3bworCQkJICog ICAgIG9wY29kZXMgYW5kIGN1cnJlbnQgUEMgaW5kaWNhdGVzIG5leHQgbGluZSB0bworCQkJICog ICAgIGV4ZWN1dGUsIHNvIHJlcG9ydCB0aGF0IChtYXRjaGVzIFN0YXR1cykuCisJCQkgKiAgIC0g Rm9yIG90aGVyIGFjdGl2YXRpb25zIHdlJ3JlIGNvbmNlcHR1YWxseSBzdGlsbAorCQkJICogICAg IGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24gYXQgUEMtMSwgc28gcmVwb3J0IHRoYXQKKwkJCSAq ICAgICAobWF0Y2hlcyBlcnJvciBzdGFja3RyYWNlIGJlaGF2aW9yKS4KKwkJCSAqICAgLSBTZWU6 IGh0dHBzOi8vZ2l0aHViLmNvbS9zdmFhcmFsYS9kdWt0YXBlL2lzc3Vlcy8yODEKKwkJCSAqLwor CisJCQkvKiBYWFg6IG9wdGltaXplIHRvIHVzZSBkaXJlY3QgcmVhZHMsIGkuZS4gYXZvaWQKKwkJ CSAqIHZhbHVlIHN0YWNrIG9wZXJhdGlvbnMuCisJCQkgKi8KKwkJCWR1a19wdXNoX3R2YWwodGhy LCAmY3Vycl9hY3QtPnR2X2Z1bmMpOworCQkJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIs IC0xLCBEVUtfU1RSSURYX0ZJTEVfTkFNRSk7CisJCQlkdWtfX2RlYnVnX3dyaXRlX2hzdHJpbmdf c2FmZV90b3AodGhyKTsKKwkJCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVL X1NUUklEWF9OQU1FKTsKKwkJCWR1a19fZGVidWdfd3JpdGVfaHN0cmluZ19zYWZlX3RvcCh0aHIp OworCQkJcGMgPSBkdWtfaHRocmVhZF9nZXRfYWN0X2N1cnJfcGModGhyLCBjdXJyX2FjdCk7CisJ CQlpZiAoY3Vycl9hY3QgIT0gY3Vycl90aHItPmNhbGxzdGFja19jdXJyICYmIHBjID4gMCkgewor CQkJCXBjLS07CisJCQl9CisJCQlsaW5lID0gZHVrX2hvYmplY3RfcGMybGluZV9xdWVyeSh0aHIs IC0zLCBwYyk7CisJCQlkdWtfZGVidWdfd3JpdGVfdWludCh0aHIsIChkdWtfdWludDMyX3QpIGxp bmUpOworCQkJZHVrX2RlYnVnX3dyaXRlX3VpbnQodGhyLCAoZHVrX3VpbnQzMl90KSBwYyk7CisJ CQlkdWtfcG9wXzModGhyKTsKKwkJfQorCQljdXJyX3RociA9IGN1cnJfdGhyLT5yZXN1bWVyOwor CX0KKwkvKiBTQ0FOQlVJTEQ6IHdhcm5pbmcgYWJvdXQgJ3RocicgcG90ZW50aWFsbHkgYmVpbmcg TlVMTCBoZXJlLAorCSAqIHdhcm5pbmcgaXMgaW5jb3JyZWN0IGJlY2F1c2UgdGhyICE9IE5VTEwg YWx3YXlzIGhlcmUuCisJICovCisJZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOworfQorCitEVUtf TE9DQUwgdm9pZCBkdWtfX2RlYnVnX2hhbmRsZV9nZXRfbG9jYWxzKGR1a19odGhyZWFkICp0aHIs IGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfaHN0cmluZyAq dmFybmFtZTsKKworCURVS19VTlJFRihoZWFwKTsKKworCWFjdCA9IGR1a19fZGVidWdfcmVhZF9s ZXZlbF9nZXRfYWN0aXZhdGlvbih0aHIpOworCWlmIChhY3QgPT0gTlVMTCkgeworCQlyZXR1cm47 CisJfQorCisJZHVrX2RlYnVnX3dyaXRlX3JlcGx5KHRocik7CisKKwkvKiBYWFg6IHNldmVyYWwg bmljZS10by1oYXZlIGltcHJvdmVtZW50cyBoZXJlOgorCSAqICAgLSBVc2UgZGlyZWN0IHJlYWRz IGF2b2lkaW5nIHZhbHVlIHN0YWNrIG9wZXJhdGlvbnMKKwkgKiAgIC0gQXZvaWQgdHJpZ2dlcmlu ZyBnZXR0ZXJzLCBpbmRpY2F0ZSBnZXR0ZXIgdmFsdWVzIHRvIGRlYnVnIGNsaWVudAorCSAqICAg LSBJZiBzaWRlIGVmZmVjdHMgYXJlIHBvc3NpYmxlLCBhZGQgZXJyb3IgY2F0Y2hpbmcKKwkgKi8K KworCWR1a19wdXNoX3R2YWwodGhyLCAmYWN0LT50dl9mdW5jKTsKKwlkdWtfZ2V0X3Byb3Bfc3Ry aWR4X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhfSU5UX1ZBUk1BUCk7CisJaWYgKGR1a19pc19v YmplY3QodGhyLCAtMSkpIHsKKwkJZHVrX2VudW0odGhyLCAtMSwgMCAvKmVudW1fZmxhZ3MqLyk7 CisJCXdoaWxlIChkdWtfbmV4dCh0aHIsIC0xIC8qZW51bV9pbmRleCovLCAwIC8qZ2V0X3ZhbHVl Ki8pKSB7CisJCQl2YXJuYW1lID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCAtMSk7CisKKwkJCWR1 a19qc19nZXR2YXJfYWN0aXZhdGlvbih0aHIsIGFjdCwgdmFybmFtZSwgMCAvKnRocm93X2ZsYWcq Lyk7CisJCQkvKiBbIC4uLiBmdW5jIHZhcm1hcCBlbnVtIGtleSB2YWx1ZSB0aGlzIF0gKi8KKwkJ CWR1a19kZWJ1Z193cml0ZV9oc3RyaW5nKHRociwgZHVrX2dldF9oc3RyaW5nKHRociwgLTMpKTsK KwkJCWR1a19kZWJ1Z193cml0ZV90dmFsKHRociwgZHVrX2dldF90dmFsKHRociwgLTIpKTsKKwkJ CWR1a19wb3BfMyh0aHIpOyAgLyogLT4gWyAuLi4gZnVuYyB2YXJtYXAgZW51bSBdICovCisJCX0K Kwl9IGVsc2UgeworCQlEVUtfRChEVUtfRFBSSU5UKCJ2YXJtYXAgaXMgbm90IGFuIG9iamVjdCBp biBHZXRMb2NhbHMsIGlnbm9yZSIpKTsKKwl9CisKKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7 Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX2V2YWwoZHVrX2h0aHJlYWQg KnRociwgZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfc21hbGxfdWludF90IGNhbGxfZmxhZ3M7CisJ ZHVrX2ludF90IGNhbGxfcmV0OworCWR1a19zbWFsbF9pbnRfdCBldmFsX2VycjsKKwlkdWtfYm9v bF90IGRpcmVjdF9ldmFsOworCWR1a19pbnQzMl90IGxldmVsOworCWR1a19pZHhfdCBpZHhfZnVu YzsKKworCURVS19VTlJFRihoZWFwKTsKKworCURVS19EKERVS19EUFJJTlQoImRlYnVnIGNvbW1h bmQgRXZhbCIpKTsKKworCS8qIFRoZSBldmFsIGNvZGUgaXMgZXhlY3V0ZWQgd2l0aGluIHRoZSBs ZXhpY2FsIGVudmlyb25tZW50IG9mIGEgc3BlY2lmaWVkCisJICogYWN0aXZhdGlvbi4gIEZvciBu b3csIHVzZSBnbG9iYWwgb2JqZWN0IGV2YWwoKSBmdW5jdGlvbiwgd2l0aCB0aGUgZXZhbAorCSAq IGNvbnNpZGVyZWQgYSAnZGlyZWN0IGNhbGwgdG8gZXZhbCcuCisJICoKKwkgKiBDYWxsc3RhY2sg aW5kZXggZm9yIGRlYnVnIGNvbW1hbmRzIG9ubHkgYWZmZWN0cyBzY29wZSAtLSB0aGUgY2FsbHN0 YWNrCisJICogYXMgc2VlbiBieSwgZS5nLiBEdWt0YXBlLmFjdCgpIHdpbGwgYmUgdGhlIHNhbWUg cmVnYXJkbGVzcy4KKwkgKi8KKworCS8qIG5hcmdzID09IDIgc28gd2UgY2FuIHBhc3MgYSBjYWxs c3RhY2sgaW5kZXggdG8gZXZhbCgpLiAqLworCWlkeF9mdW5jID0gZHVrX2dldF90b3AodGhyKTsK KwlkdWtfcHVzaF9jX2Z1bmN0aW9uKHRociwgZHVrX2JpX2dsb2JhbF9vYmplY3RfZXZhbCwgMiAv Km5hcmdzKi8pOworCWR1a19wdXNoX3VuZGVmaW5lZCh0aHIpOyAgLyogJ3RoaXMnIGJpbmRpbmcg c2hvdWxkbid0IG1hdHRlciBoZXJlICovCisKKwkvKiBSZWFkIGNhbGxzdGFjayBpbmRleCwgaWYg bm9uLW51bGwuICovCisJaWYgKGR1a19kZWJ1Z19wZWVrX2J5dGUodGhyKSA9PSBEVUtfREJHX0lC X05VTEwpIHsKKwkJZGlyZWN0X2V2YWwgPSAwOworCQlsZXZlbCA9IC0xOyAgLyogTm90IG5lZWRl ZCwgYnV0IHNpbGVuY2VzIHdhcm5pbmcuICovCisJCSh2b2lkKSBkdWtfZGVidWdfcmVhZF9ieXRl KHRocik7CisJfSBlbHNlIHsKKwkJZGlyZWN0X2V2YWwgPSAxOworCQlsZXZlbCA9IGR1a19fZGVi dWdfcmVhZF92YWxpZGF0ZV9jc2luZGV4KHRocik7CisJCWlmIChsZXZlbCA9PSAwKSB7CisJCQly ZXR1cm47CisJCX0KKwl9CisKKwlEVUtfQVNTRVJUKCFkaXJlY3RfZXZhbCB8fAorCSAgICAgICAg ICAgKGxldmVsIDwgMCAmJiAtbGV2ZWwgPD0gKGR1a19pbnQzMl90KSB0aHItPmNhbGxzdGFja190 b3ApKTsKKworCSh2b2lkKSBkdWtfZGVidWdfcmVhZF9oc3RyaW5nKHRocik7CisJaWYgKGRpcmVj dF9ldmFsKSB7CisJCWR1a19wdXNoX2ludCh0aHIsIGxldmVsIC0gMSk7ICAvKiBjb21wZW5zYXRl IGZvciBldmFsKCkgY2FsbCAqLworCX0KKworCS8qIFsgLi4uIGV2YWwgImV2YWwiIGV2YWxfaW5w dXQgbGV2ZWw/IF0gKi8KKworCWNhbGxfZmxhZ3MgPSAwOworCWlmIChkaXJlY3RfZXZhbCkgewor CQlkdWtfYWN0aXZhdGlvbiAqYWN0OworCQlkdWtfaG9iamVjdCAqZnVuOworCisJCWFjdCA9IGR1 a19odGhyZWFkX2dldF9hY3RpdmF0aW9uX2Zvcl9sZXZlbCh0aHIsIGxldmVsKTsKKwkJaWYgKGFj dCAhPSBOVUxMKSB7CisJCQlmdW4gPSBEVUtfQUNUX0dFVF9GVU5DKGFjdCk7CisJCQlpZiAoZnVu ICE9IE5VTEwgJiYgRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoZnVuKSkgeworCQkJCS8qIERpcmVj dCBldmFsIHJlcXVpcmVzIHRoYXQgdGhlcmUncyBhIGN1cnJlbnQKKwkJCQkgKiBhY3RpdmF0aW9u IGFuZCBpdCBpcyBhbiBFQ01BU2NyaXB0IGZ1bmN0aW9uLgorCQkJCSAqIFdoZW4gRXZhbCBpcyBl eGVjdXRlZCBmcm9tIGUuZy4gY29vcGVyYXRlIEFQSQorCQkJCSAqIGNhbGwgd2UnbGwgbmVlZCB0 byBkbyBhbiBpbmRpcmVjdCBldmFsIGluc3RlYWQuCisJCQkJICovCisJCQkJY2FsbF9mbGFncyB8 PSBEVUtfQ0FMTF9GTEFHX0RJUkVDVF9FVkFMOworCQkJfQorCQl9CisJfQorCisJY2FsbF9yZXQg PSBkdWtfcGNhbGxfbWV0aG9kX2ZsYWdzKHRociwgZHVrX2dldF90b3AodGhyKSAtIChpZHhfZnVu YyArIDIpLCBjYWxsX2ZsYWdzKTsKKworCWlmIChjYWxsX3JldCA9PSBEVUtfRVhFQ19TVUNDRVNT KSB7CisJCWV2YWxfZXJyID0gMDsKKwkJLyogVXNlIHJlc3VsdCB2YWx1ZSBhcyBpcy4gKi8KKwl9 IGVsc2UgeworCQkvKiBGb3IgZXJyb3JzIGEgc3RyaW5nIGNvZXJjZWQgcmVzdWx0IGlzIG1vc3Qg aW5mb3JtYXRpdmUKKwkJICogcmlnaHQgbm93LCBhcyB0aGUgZGVidWcgY2xpZW50IGRvZXNuJ3Qg aGF2ZSB0aGUgY2FwYWJpbGl0eQorCQkgKiB0byB0cmF2ZXJzZSB0aGUgZXJyb3Igb2JqZWN0Lgor CQkgKi8KKwkJZXZhbF9lcnIgPSAxOworCQlkdWtfc2FmZV90b19zdHJpbmcodGhyLCAtMSk7CisJ fQorCisJLyogWyAuLi4gcmVzdWx0IF0gKi8KKworCWR1a19kZWJ1Z193cml0ZV9yZXBseSh0aHIp OworCWR1a19kZWJ1Z193cml0ZV9pbnQodGhyLCAoZHVrX2ludDMyX3QpIGV2YWxfZXJyKTsKKwlE VUtfQVNTRVJUKGR1a19nZXRfdHZhbCh0aHIsIC0xKSAhPSBOVUxMKTsKKwlkdWtfZGVidWdfd3Jp dGVfdHZhbCh0aHIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSk7CisJZHVrX2RlYnVnX3dyaXRlX2Vv bSh0aHIpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlYnVnX2hhbmRsZV9kZXRhY2goZHVr X2h0aHJlYWQgKnRociwgZHVrX2hlYXAgKmhlYXApIHsKKwlEVUtfVU5SRUYoaGVhcCk7CisJRFVL X0QoRFVLX0RQUklOVCgiZGVidWcgY29tbWFuZCBEZXRhY2giKSk7CisKKwlkdWtfZGVidWdfd3Jp dGVfcmVwbHkodGhyKTsKKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7CisKKwlEVUtfRChEVUtf RFBSSU5UKCJkZWJ1ZyBjb25uZWN0aW9uIGRldGFjaGVkLCBtYXJrIGJyb2tlbiIpKTsKKwlEVUtf X1NFVF9DT05OX0JST0tFTih0aHIsIDApOyAgLyogbm90IGFuIGVycm9yICovCit9CisKK0RVS19M T0NBTCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX2FwcHJlcXVlc3QoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfaWR4X3Qgb2xkX3RvcDsKKworCURVS19EKERVS19EUFJJ TlQoImRlYnVnIGNvbW1hbmQgQXBwUmVxdWVzdCIpKTsKKworCW9sZF90b3AgPSBkdWtfZ2V0X3Rv cCh0aHIpOyAgLyogc2F2ZSBzdGFjayB0b3AgKi8KKworCWlmIChoZWFwLT5kYmdfcmVxdWVzdF9j YiAhPSBOVUxMKSB7CisJCWR1a19pZHhfdCBucmV0czsKKwkJZHVrX2lkeF90IG52YWx1ZXMgPSAw OworCQlkdWtfaWR4X3QgdG9wLCBpZHg7CisKKwkJLyogUmVhZCB0dmFscyBmcm9tIHRoZSBtZXNz YWdlIGFuZCBwdXNoIHRoZW0gb250byB0aGUgdmFsc3RhY2ssCisJCSAqIHRoZW4gY2FsbCB0aGUg cmVxdWVzdCBjYWxsYmFjayB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LgorCQkgKi8KKwkJd2hpbGUg KGR1a19kZWJ1Z19wZWVrX2J5dGUodGhyKSAhPSBEVUtfREJHX0lCX0VPTSkgeworCQkJZHVrX3R2 YWwgKnR2OworCQkJaWYgKCFkdWtfY2hlY2tfc3RhY2sodGhyLCAxKSkgeworCQkJCURVS19EKERV S19EUFJJTlQoImZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgcmVxdWVzdCBkdmFsdWUocyki KSk7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJdHYgPSBkdWtfZGVidWdfcmVhZF90dmFsKHRo cik7ICAvKiBwdXNoIHRvIHN0YWNrICovCisJCQlpZiAodHYgPT0gTlVMTCkgeworCQkJCS8qIGRl dGFjaGVkICovCisJCQkJcmV0dXJuOworCQkJfQorCQkJbnZhbHVlcysrOworCQl9CisJCURVS19B U1NFUlQoZHVrX2dldF90b3AodGhyKSA9PSBvbGRfdG9wICsgbnZhbHVlcyk7CisKKwkJLyogUmVx dWVzdCBjYWxsYmFjayBzaG91bGQgcHVzaCB2YWx1ZXMgZm9yIHJlcGx5IHRvIGNsaWVudCBvbnRv IHZhbHN0YWNrICovCisJCURVS19EKERVS19EUFJJTlQoImNhbGxpbmcgaW50byBBcHBSZXF1ZXN0 IHJlcXVlc3RfY2Igd2l0aCBudmFsdWVzPSVsZCwgb2xkX3RvcD0lbGQsIHRvcD0lbGQiLAorCQkg ICAgICAgICAgICAgICAgIChsb25nKSBudmFsdWVzLCAobG9uZykgb2xkX3RvcCwgKGxvbmcpIGR1 a19nZXRfdG9wKHRocikpKTsKKwkJbnJldHMgPSBoZWFwLT5kYmdfcmVxdWVzdF9jYih0aHIsIGhl YXAtPmRiZ191ZGF0YSwgbnZhbHVlcyk7CisJCURVS19EKERVS19EUFJJTlQoInJldHVybmVkIGZy b20gQXBwUmVxdWVzdCByZXF1ZXN0X2NiOyBudmFsdWVzPSVsZCAtPiBucmV0cz0lbGQsIG9sZF90 b3A9JWxkLCB0b3A9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAobG9uZykgbnZhbHVlcywgKGxv bmcpIG5yZXRzLCAobG9uZykgb2xkX3RvcCwgKGxvbmcpIGR1a19nZXRfdG9wKHRocikpKTsKKwkJ aWYgKG5yZXRzID49IDApIHsKKwkJCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA+PSBvbGRf dG9wICsgbnJldHMpOworCQkJaWYgKGR1a19nZXRfdG9wKHRocikgPCBvbGRfdG9wICsgbnJldHMp IHsKKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJBcHBSZXF1ZXN0IGNhbGxiYWNrIGRvZXNuJ3QgbWF0 Y2ggdmFsdWUgc3RhY2sgY29uZmlndXJhdGlvbiwgIgorCQkJCSAgICAgICAgICAgICAgICAgInRv cD0lbGQgPCBvbGRfdG9wPSVsZCArIG5yZXRzPSVsZDsgIgorCQkJCSAgICAgICAgICAgICAgICAg InRoaXMgbWlnaHQgbWVhbiBpdCdzIHVuc2FmZSB0byBjb250aW51ZSEiLAorCQkJCSAgICAgICAg ICAgICAgICAgKGxvbmcpIGR1a19nZXRfdG9wKHRociksIChsb25nKSBvbGRfdG9wLCAobG9uZykg bnJldHMpKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisKKwkJCS8qIFJlcGx5IHdpdGggdHZhbHMg cHVzaGVkIGJ5IHJlcXVlc3QgY2FsbGJhY2sgKi8KKwkJCWR1a19kZWJ1Z193cml0ZV9ieXRlKHRo ciwgRFVLX0RCR19JQl9SRVBMWSk7CisJCQl0b3AgPSBkdWtfZ2V0X3RvcCh0aHIpOworCQkJZm9y IChpZHggPSB0b3AgLSBucmV0czsgaWR4IDwgdG9wOyBpZHgrKykgeworCQkJCWR1a19kZWJ1Z193 cml0ZV90dmFsKHRociwgRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIGlkeCkpOworCQkJfQorCQkJ ZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOworCQl9IGVsc2UgeworCQkJRFVLX0FTU0VSVChkdWtf Z2V0X3RvcCh0aHIpID49IG9sZF90b3AgKyAxKTsKKwkJCWlmIChkdWtfZ2V0X3RvcCh0aHIpIDwg b2xkX3RvcCArIDEpIHsKKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJyZXF1ZXN0IGNhbGxiYWNrIHJl dHVybiB2YWx1ZSBkb2Vzbid0IG1hdGNoIHZhbHVlIHN0YWNrIGNvbmZpZ3VyYXRpb24iKSk7CisJ CQkJZ290byBmYWlsOworCQkJfQorCQkJZHVrX2RlYnVnX3dyaXRlX2Vycm9yX2VvbSh0aHIsIERV S19EQkdfRVJSX0FQUExJQ0FUSU9OLCBkdWtfZ2V0X3N0cmluZyh0aHIsIC0xKSk7CisJCX0KKwor CQlkdWtfc2V0X3RvcCh0aHIsIG9sZF90b3ApOyAgLyogcmVzdG9yZSBzdGFjayB0b3AgKi8KKwl9 IGVsc2UgeworCQlEVUtfRChEVUtfRFBSSU5UKCJubyByZXF1ZXN0IGNhbGxiYWNrLCB0cmVhdCBB cHBSZXF1ZXN0IGFzIHVuc3VwcG9ydGVkIikpOworCQlkdWtfZGVidWdfd3JpdGVfZXJyb3JfZW9t KHRociwgRFVLX0RCR19FUlJfVU5TVVBQT1JURUQsICJBcHBSZXF1ZXN0IHVuc3VwcG9ydGVkIGJ5 IHRhcmdldCIpOworCX0KKworCXJldHVybjsKKworIGZhaWw6CisJZHVrX3NldF90b3AodGhyLCBv bGRfdG9wKTsgIC8qIHJlc3RvcmUgc3RhY2sgdG9wICovCisJRFVLX19TRVRfQ09OTl9CUk9LRU4o dGhyLCAxKTsKK30KKworLyoKKyAqICBEdW1wSGVhcCBjb21tYW5kCisgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ERUJVR0dFUl9EVU1QSEVBUCkKKy8qIFhYWDogdGhpcyBoYXMgc29tZSBvdmVy bGFwIHdpdGggb2JqZWN0IGluc3BlY3Rpb247IHJlbW92ZSB0aGlzIGFuZCBtYWtlCisgKiBEdW1w SGVhcCByZXR1cm4gbGlzdHMgb2YgaGVhcHB0cnMgaW5zdGVhZD8KKyAqLworRFVLX0xPQ0FMIHZv aWQgZHVrX19kZWJ1Z19kdW1wX2hlYXBoZHIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hlYXAgKmhl YXAsIGR1a19oZWFwaGRyICpoZHIpIHsKKwlEVUtfVU5SRUYoaGVhcCk7CisKKwlkdWtfZGVidWdf d3JpdGVfaGVhcHB0cih0aHIsIGhkcik7CisJZHVrX2RlYnVnX3dyaXRlX3VpbnQodGhyLCAoZHVr X3VpbnQzMl90KSBEVUtfSEVBUEhEUl9HRVRfVFlQRShoZHIpKTsKKwlkdWtfZGVidWdfd3JpdGVf dWludCh0aHIsIChkdWtfdWludDMyX3QpIERVS19IRUFQSERSX0dFVF9GTEFHU19SQVcoaGRyKSk7 CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwlkdWtfZGVidWdfd3Jp dGVfdWludCh0aHIsIChkdWtfdWludDMyX3QpIERVS19IRUFQSERSX0dFVF9SRUZDT1VOVChoZHIp KTsKKyNlbHNlCisJZHVrX2RlYnVnX3dyaXRlX2ludCh0aHIsIChkdWtfaW50MzJfdCkgLTEpOwor I2VuZGlmCisKKwlzd2l0Y2ggKERVS19IRUFQSERSX0dFVF9UWVBFKGhkcikpIHsKKwljYXNlIERV S19IVFlQRV9TVFJJTkc6IHsKKwkJZHVrX2hzdHJpbmcgKmggPSAoZHVrX2hzdHJpbmcgKikgaGRy OworCisJCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgKGR1a191aW50MzJfdCkgRFVLX0hTVFJJ TkdfR0VUX0JZVEVMRU4oaCkpOworCQlkdWtfZGVidWdfd3JpdGVfdWludCh0aHIsIChkdWtfdWlu dDMyX3QpIERVS19IU1RSSU5HX0dFVF9DSEFSTEVOKGgpKTsKKwkJZHVrX2RlYnVnX3dyaXRlX3Vp bnQodGhyLCAoZHVrX3VpbnQzMl90KSBEVUtfSFNUUklOR19HRVRfSEFTSChoKSk7CisJCWR1a19k ZWJ1Z193cml0ZV9oc3RyaW5nKHRociwgaCk7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19IVFlQ RV9PQkpFQ1Q6IHsKKwkJZHVrX2hvYmplY3QgKmggPSAoZHVrX2hvYmplY3QgKikgaGRyOworCQlk dWtfaHN0cmluZyAqazsKKwkJZHVrX3VpbnRfZmFzdDMyX3QgaTsKKworCQlkdWtfZGVidWdfd3Jp dGVfdWludCh0aHIsIChkdWtfdWludDMyX3QpIERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIo aCkpOworCQlkdWtfZGVidWdfd3JpdGVfaGVhcHB0cih0aHIsIChkdWtfaGVhcGhkciAqKSBEVUtf SE9CSkVDVF9HRVRfUFJPVE9UWVBFKGhlYXAsIGgpKTsKKwkJZHVrX2RlYnVnX3dyaXRlX3VpbnQo dGhyLCAoZHVrX3VpbnQzMl90KSBEVUtfSE9CSkVDVF9HRVRfRVNJWkUoaCkpOworCQlkdWtfZGVi dWdfd3JpdGVfdWludCh0aHIsIChkdWtfdWludDMyX3QpIERVS19IT0JKRUNUX0dFVF9FTkVYVCho KSk7CisJCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgKGR1a191aW50MzJfdCkgRFVLX0hPQkpF Q1RfR0VUX0FTSVpFKGgpKTsKKwkJZHVrX2RlYnVnX3dyaXRlX3VpbnQodGhyLCAoZHVrX3VpbnQz Ml90KSBEVUtfSE9CSkVDVF9HRVRfSFNJWkUoaCkpOworCisJCWZvciAoaSA9IDA7IGkgPCAoZHVr X3VpbnRfZmFzdDMyX3QpIERVS19IT0JKRUNUX0dFVF9FTkVYVChoKTsgaSsrKSB7CisJCQlkdWtf ZGVidWdfd3JpdGVfdWludCh0aHIsIChkdWtfdWludDMyX3QpIERVS19IT0JKRUNUX0VfR0VUX0ZM QUdTKGhlYXAsIGgsIGkpKTsKKwkJCWsgPSBEVUtfSE9CSkVDVF9FX0dFVF9LRVkoaGVhcCwgaCwg aSk7CisJCQlkdWtfZGVidWdfd3JpdGVfaGVhcHB0cih0aHIsIChkdWtfaGVhcGhkciAqKSBrKTsK KwkJCWlmIChrID09IE5VTEwpIHsKKwkJCQlkdWtfZGVidWdfd3JpdGVfaW50KHRociwgMCk7ICAv KiBpc0FjY2Vzc29yICovCisJCQkJZHVrX2RlYnVnX3dyaXRlX3VudXNlZCh0aHIpOworCQkJCWNv bnRpbnVlOworCQkJfQorCQkJaWYgKERVS19IT0JKRUNUX0VfU0xPVF9JU19BQ0NFU1NPUihoZWFw LCBoLCBpKSkgeworCQkJCWR1a19kZWJ1Z193cml0ZV9pbnQodGhyLCAxKTsgIC8qIGlzQWNjZXNz b3IgKi8KKwkJCQlkdWtfZGVidWdfd3JpdGVfaGVhcHB0cih0aHIsIChkdWtfaGVhcGhkciAqKSBE VUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9QVFIoaGVhcCwgaCwgaSktPmEuZ2V0KTsKKwkJCQlkdWtf ZGVidWdfd3JpdGVfaGVhcHB0cih0aHIsIChkdWtfaGVhcGhkciAqKSBEVUtfSE9CSkVDVF9FX0dF VF9WQUxVRV9QVFIoaGVhcCwgaCwgaSktPmEuc2V0KTsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX2Rl YnVnX3dyaXRlX2ludCh0aHIsIDApOyAgLyogaXNBY2Nlc3NvciAqLworCisJCQkJZHVrX19kZWJ1 Z193cml0ZV90dmFsX2hlYXBwdHIodGhyLCAmRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfUFRSKGhl YXAsIGgsIGkpLT52KTsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCAoZHVrX3VpbnRf ZmFzdDMyX3QpIERVS19IT0JKRUNUX0dFVF9BU0laRShoKTsgaSsrKSB7CisJCQkvKiBOb3RlOiBh cnJheSBkdW1wIHdpbGwgaW5jbHVkZSBlbGVtZW50cyBiZXlvbmQKKwkJCSAqICdsZW5ndGgnLgor CQkJICovCisJCQlkdWtfX2RlYnVnX3dyaXRlX3R2YWxfaGVhcHB0cih0aHIsIERVS19IT0JKRUNU X0FfR0VUX1ZBTFVFX1BUUihoZWFwLCBoLCBpKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2Ug RFVLX0hUWVBFX0JVRkZFUjogeworCQlkdWtfaGJ1ZmZlciAqaCA9IChkdWtfaGJ1ZmZlciAqKSBo ZHI7CisKKwkJZHVrX2RlYnVnX3dyaXRlX3VpbnQodGhyLCAoZHVrX3VpbnQzMl90KSBEVUtfSEJV RkZFUl9HRVRfU0laRShoKSk7CisJCWR1a19kZWJ1Z193cml0ZV9idWZmZXIodGhyLCAoY29uc3Qg Y2hhciAqKSBEVUtfSEJVRkZFUl9HRVRfREFUQV9QVFIoaGVhcCwgaCksIChkdWtfc2l6ZV90KSBE VUtfSEJVRkZFUl9HRVRfU0laRShoKSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCURV S19EKERVS19EUFJJTlQoImludmFsaWQgaHR5cGU6ICVkIiwgKGludCkgRFVLX0hFQVBIRFJfR0VU X1RZUEUoaGRyKSkpOworCX0KKwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfZHVt cF9oZWFwX2FsbG9jYXRlZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGVhcCAqaGVhcCkgeworCWR1 a19oZWFwaGRyICpoZHI7CisKKwloZHIgPSBoZWFwLT5oZWFwX2FsbG9jYXRlZDsKKwl3aGlsZSAo aGRyICE9IE5VTEwpIHsKKwkJZHVrX19kZWJ1Z19kdW1wX2hlYXBoZHIodGhyLCBoZWFwLCBoZHIp OworCQloZHIgPSBEVUtfSEVBUEhEUl9HRVRfTkVYVChoZWFwLCBoZHIpOworCX0KK30KKworRFVL X0xPQ0FMIHZvaWQgZHVrX19kZWJ1Z19kdW1wX3N0cnRhYihkdWtfaHRocmVhZCAqdGhyLCBkdWtf aGVhcCAqaGVhcCkgeworCWR1a191aW50MzJfdCBpOworCWR1a19oc3RyaW5nICpoOworCisJZm9y IChpID0gMDsgaSA8IGhlYXAtPnN0X3NpemU7IGkrKykgeworI2lmIGRlZmluZWQoRFVLX1VTRV9T VFJUQUJfUFRSQ09NUCkKKwkJaCA9IERVS19VU0VfSEVBUFBUUl9ERUMxNigoaGVhcCktPmhlYXBf dWRhdGEsIGhlYXAtPnN0cnRhYmxlMTZbaV0pOworI2Vsc2UKKwkJaCA9IGhlYXAtPnN0cnRhYmxl W2ldOworI2VuZGlmCisJCXdoaWxlIChoICE9IE5VTEwpIHsKKwkJCWR1a19fZGVidWdfZHVtcF9o ZWFwaGRyKHRociwgaGVhcCwgKGR1a19oZWFwaGRyICopIGgpOworCQkJaCA9IGgtPmhkci5oX25l eHQ7CisJCX0KKwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX2R1bXBf aGVhcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGVhcCAqaGVhcCkgeworCURVS19EKERVS19EUFJJ TlQoImRlYnVnIGNvbW1hbmQgRHVtcEhlYXAiKSk7CisKKwlkdWtfZGVidWdfd3JpdGVfcmVwbHko dGhyKTsKKwlkdWtfX2RlYnVnX2R1bXBfaGVhcF9hbGxvY2F0ZWQodGhyLCBoZWFwKTsKKwlkdWtf X2RlYnVnX2R1bXBfc3RydGFiKHRociwgaGVhcCk7CisJZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIp OworfQorI2VuZGlmICAvKiBEVUtfVVNFX0RFQlVHR0VSX0RVTVBIRUFQICovCisKK0RVS19MT0NB TCB2b2lkIGR1a19fZGVidWdfaGFuZGxlX2dldF9ieXRlY29kZShkdWtfaHRocmVhZCAqdGhyLCBk dWtfaGVhcCAqaGVhcCkgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2hjb21wZnVuYyAq ZnVuID0gTlVMTDsKKwlkdWtfc2l6ZV90IGksIG47CisJZHVrX3R2YWwgKnR2OworCWR1a19ob2Jq ZWN0ICoqZm47CisJZHVrX2ludDMyX3QgbGV2ZWwgPSAtMTsKKwlkdWtfdWludDhfdCBpYnl0ZTsK KworCURVS19VTlJFRihoZWFwKTsKKworCURVS19EKERVS19EUFJJTlQoImRlYnVnIGNvbW1hbmQg R2V0Qnl0ZWNvZGUiKSk7CisKKwlpYnl0ZSA9IGR1a19kZWJ1Z19wZWVrX2J5dGUodGhyKTsKKwlp ZiAoaWJ5dGUgIT0gRFVLX0RCR19JQl9FT00pIHsKKwkJdHYgPSBkdWtfZGVidWdfcmVhZF90dmFs KHRocik7CisJCWlmICh0diA9PSBOVUxMKSB7CisJCQkvKiBkZXRhY2hlZCAqLworCQkJcmV0dXJu OworCQl9CisJCWlmIChEVUtfVFZBTF9JU19PQkpFQ1QodHYpKSB7CisJCQkvKiB0ZW50YXRpdmUs IGNoZWNrZWQgbGF0ZXIgKi8KKwkJCWZ1biA9IChkdWtfaGNvbXBmdW5jICopIERVS19UVkFMX0dF VF9PQkpFQ1QodHYpOworCQkJRFVLX0FTU0VSVChmdW4gIT0gTlVMTCk7CisJCX0gZWxzZSBpZiAo RFVLX1RWQUxfSVNfTlVNQkVSKHR2KSkgeworCQkJbGV2ZWwgPSAoZHVrX2ludDMyX3QpIERVS19U VkFMX0dFVF9OVU1CRVIodHYpOworCQl9IGVsc2UgeworCQkJRFVLX0QoRFVLX0RQUklOVCgiaW52 YWxpZCBhcmd1bWVudCB0byBHZXRCeXRlY29kZTogJSFUIiwgdHYpKTsKKwkJCWdvdG8gZmFpbF9h cmdzOworCQl9CisJfQorCisJaWYgKGZ1biA9PSBOVUxMKSB7CisJCWFjdCA9IGR1a19odGhyZWFk X2dldF9hY3RpdmF0aW9uX2Zvcl9sZXZlbCh0aHIsIGxldmVsKTsKKwkJaWYgKGFjdCA9PSBOVUxM KSB7CisJCQlnb3RvIGZhaWxfaW5kZXg7CisJCX0KKwkJZnVuID0gKGR1a19oY29tcGZ1bmMgKikg RFVLX0FDVF9HRVRfRlVOQyhhY3QpOworCX0KKworCWlmIChmdW4gPT0gTlVMTCB8fCAhRFVLX0hP QkpFQ1RfSVNfQ09NUEZVTkMoKGR1a19ob2JqZWN0ICopIGZ1bikpIHsKKwkJRFVLX0QoRFVLX0RQ UklOVCgiaW52YWxpZCBhcmd1bWVudCB0byBHZXRCeXRlY29kZTogJSFPIiwgZnVuKSk7CisJCWdv dG8gZmFpbF9hcmdzOworCX0KKwlEVUtfQVNTRVJUKGZ1biAhPSBOVUxMICYmIERVS19IT0JKRUNU X0lTX0NPTVBGVU5DKChkdWtfaG9iamVjdCAqKSBmdW4pKTsKKworCWR1a19kZWJ1Z193cml0ZV9y ZXBseSh0aHIpOworCW4gPSBEVUtfSENPTVBGVU5DX0dFVF9DT05TVFNfQ09VTlQoaGVhcCwgZnVu KTsKKwlkdWtfZGVidWdfd3JpdGVfaW50KHRociwgKGR1a19pbnQzMl90KSBuKTsKKwl0diA9IERV S19IQ09NUEZVTkNfR0VUX0NPTlNUU19CQVNFKGhlYXAsIGZ1bik7CisJZm9yIChpID0gMDsgaSA8 IG47IGkrKykgeworCQlkdWtfZGVidWdfd3JpdGVfdHZhbCh0aHIsIHR2KTsKKwkJdHYrKzsKKwl9 CisJbiA9IERVS19IQ09NUEZVTkNfR0VUX0ZVTkNTX0NPVU5UKGhlYXAsIGZ1bik7CisJZHVrX2Rl YnVnX3dyaXRlX2ludCh0aHIsIChkdWtfaW50MzJfdCkgbik7CisJZm4gPSBEVUtfSENPTVBGVU5D X0dFVF9GVU5DU19CQVNFKGhlYXAsIGZ1bik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewor CQlkdWtfZGVidWdfd3JpdGVfaG9iamVjdCh0aHIsICpmbik7CisJCWZuKys7CisJfQorCWR1a19k ZWJ1Z193cml0ZV9zdHJpbmcodGhyLAorCSAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNo YXIgKikgRFVLX0hDT01QRlVOQ19HRVRfQ09ERV9CQVNFKGhlYXAsIGZ1biksCisJICAgICAgICAg ICAgICAgICAgICAgICAoZHVrX3NpemVfdCkgRFVLX0hDT01QRlVOQ19HRVRfQ09ERV9TSVpFKGhl YXAsIGZ1bikpOworCWR1a19kZWJ1Z193cml0ZV9lb20odGhyKTsKKwlyZXR1cm47CisKKyBmYWls X2FyZ3M6CisJZHVrX2RlYnVnX3dyaXRlX2Vycm9yX2VvbSh0aHIsIERVS19EQkdfRVJSX1VOS05P V04sICJpbnZhbGlkIGFyZ3VtZW50Iik7CisJcmV0dXJuOworCisgZmFpbF9pbmRleDoKKwlkdWtf ZGVidWdfd3JpdGVfZXJyb3JfZW9tKHRociwgRFVLX0RCR19FUlJfTk9URk9VTkQsICJpbnZhbGlk IGNhbGxzdGFjayBpbmRleCIpOworCXJldHVybjsKK30KKworLyoKKyAqICBPYmplY3QgaW5zcGVj dGlvbiBjb21tYW5kczogR2V0SGVhcE9iakluZm8sIEdldE9ialByb3BEZXNjLAorICogIEdldE9i alByb3BEZXNjUmFuZ2UKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX0lOU1BF Q1QpCisKKyNpZiAwIC8qIHBydW5lZCAqLworRFVLX0xPQ0FMIGNvbnN0IGNoYXIgKiBjb25zdCBk dWtfX2RlYnVnX2dldGluZm9faGVhcGhkcl9rZXlzW10gPSB7CisJInJlYWNoYWJsZSIsCisJInRl bXByb290IiwKKwkiZmluYWxpemFibGUiLAorCSJmaW5hbGl6ZWQiLAorCSJyZWFkb25seSIKKwkv KiBOVUxMIG5vdCBuZWVkZWQgaGVyZSAqLworfTsKK0RVS19MT0NBTCBkdWtfdWludF90IGR1a19f ZGVidWdfZ2V0aW5mb19oZWFwaGRyX21hc2tzW10gPSB7CisJRFVLX0hFQVBIRFJfRkxBR19SRUFD SEFCTEUsCisJRFVLX0hFQVBIRFJfRkxBR19URU1QUk9PVCwKKwlEVUtfSEVBUEhEUl9GTEFHX0ZJ TkFMSVpBQkxFLAorCURVS19IRUFQSERSX0ZMQUdfRklOQUxJWkVELAorCURVS19IRUFQSERSX0ZM QUdfUkVBRE9OTFksCisJMCAgLyogdGVybWluYXRvciAqLworfTsKKyNlbmRpZgorRFVLX0xPQ0FM IGNvbnN0IGNoYXIgKiBjb25zdCBkdWtfX2RlYnVnX2dldGluZm9faHN0cmluZ19rZXlzW10gPSB7 CisjaWYgMAorCSJhcnJpZHgiLAorCSJzeW1ib2wiLAorCSJoaWRkZW4iLAorCSJyZXNlcnZlZF93 b3JkIiwKKwkic3RyaWN0X3Jlc2VydmVkX3dvcmQiLAorCSJldmFsX29yX2FyZ3VtZW50cyIsCisj ZW5kaWYKKwkiZXh0ZGF0YSIKKwkvKiBOVUxMIG5vdCBuZWVkZWQgaGVyZSAqLworfTsKK0RVS19M T0NBTCBkdWtfdWludF90IGR1a19fZGVidWdfZ2V0aW5mb19oc3RyaW5nX21hc2tzW10gPSB7Cisj aWYgMAorCURVS19IU1RSSU5HX0ZMQUdfQVJSSURYLAorCURVS19IU1RSSU5HX0ZMQUdfU1lNQk9M LAorCURVS19IU1RSSU5HX0ZMQUdfSElEREVOLAorCURVS19IU1RSSU5HX0ZMQUdfUkVTRVJWRURf V09SRCwKKwlEVUtfSFNUUklOR19GTEFHX1NUUklDVF9SRVNFUlZFRF9XT1JELAorCURVS19IU1RS SU5HX0ZMQUdfRVZBTF9PUl9BUkdVTUVOVFMsCisjZW5kaWYKKwlEVUtfSFNUUklOR19GTEFHX0VY VERBVEEsCisJMCAgLyogdGVybWluYXRvciAqLworfTsKK0RVS19MT0NBTCBjb25zdCBjaGFyICog Y29uc3QgZHVrX19kZWJ1Z19nZXRpbmZvX2hvYmplY3Rfa2V5c1tdID0geworCSJleHRlbnNpYmxl IiwKKwkiY29uc3RydWN0YWJsZSIsCisJImNhbGxhYmxlIiwKKwkiYm91bmRmdW5jIiwKKwkiY29t cGZ1bmMiLAorCSJuYXRmdW5jIiwKKwkiYnVmb2JqIiwKKwkiZmFzdHJlZnMiLAorCSJhcnJheV9w YXJ0IiwKKwkic3RyaWN0IiwKKwkibm90YWlsIiwKKwkibmV3ZW52IiwKKwkibmFtZWJpbmRpbmci LAorCSJjcmVhdGVhcmdzIiwKKwkiaGF2ZV9maW5hbGl6ZXIiLAorCSJleG90aWNfYXJyYXkiLAor CSJleG90aWNfc3RyaW5nb2JqIiwKKwkiZXhvdGljX2FyZ3VtZW50cyIsCisJImV4b3RpY19wcm94 eW9iaiIsCisJInNwZWNpYWxfY2FsbCIKKwkvKiBOVUxMIG5vdCBuZWVkZWQgaGVyZSAqLworfTsK K0RVS19MT0NBTCBkdWtfdWludF90IGR1a19fZGVidWdfZ2V0aW5mb19ob2JqZWN0X21hc2tzW10g PSB7CisJRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFLAorCURVS19IT0JKRUNUX0ZMQUdfQ09O U1RSVUNUQUJMRSwKKwlEVUtfSE9CSkVDVF9GTEFHX0NBTExBQkxFLAorCURVS19IT0JKRUNUX0ZM QUdfQk9VTkRGVU5DLAorCURVS19IT0JKRUNUX0ZMQUdfQ09NUEZVTkMsCisJRFVLX0hPQkpFQ1Rf RkxBR19OQVRGVU5DLAorCURVS19IT0JKRUNUX0ZMQUdfQlVGT0JKLAorCURVS19IT0JKRUNUX0ZM QUdfRkFTVFJFRlMsCisJRFVLX0hPQkpFQ1RfRkxBR19BUlJBWV9QQVJULAorCURVS19IT0JKRUNU X0ZMQUdfU1RSSUNULAorCURVS19IT0JKRUNUX0ZMQUdfTk9UQUlMLAorCURVS19IT0JKRUNUX0ZM QUdfTkVXRU5WLAorCURVS19IT0JKRUNUX0ZMQUdfTkFNRUJJTkRJTkcsCisJRFVLX0hPQkpFQ1Rf RkxBR19DUkVBVEVBUkdTLAorCURVS19IT0JKRUNUX0ZMQUdfSEFWRV9GSU5BTElaRVIsCisJRFVL X0hPQkpFQ1RfRkxBR19FWE9USUNfQVJSQVksCisJRFVLX0hPQkpFQ1RfRkxBR19FWE9USUNfU1RS SU5HT0JKLAorCURVS19IT0JKRUNUX0ZMQUdfRVhPVElDX0FSR1VNRU5UUywKKwlEVUtfSE9CSkVD VF9GTEFHX0VYT1RJQ19QUk9YWU9CSiwKKwlEVUtfSE9CSkVDVF9GTEFHX1NQRUNJQUxfQ0FMTCwK KwkwICAvKiB0ZXJtaW5hdG9yICovCit9OworRFVLX0xPQ0FMIGNvbnN0IGNoYXIgKiBjb25zdCBk dWtfX2RlYnVnX2dldGluZm9faGJ1ZmZlcl9rZXlzW10gPSB7CisJImR5bmFtaWMiLAorCSJleHRl cm5hbCIKKwkvKiBOVUxMIG5vdCBuZWVkZWQgaGVyZSAqLworfTsKK0RVS19MT0NBTCBkdWtfdWlu dF90IGR1a19fZGVidWdfZ2V0aW5mb19oYnVmZmVyX21hc2tzW10gPSB7CisJRFVLX0hCVUZGRVJf RkxBR19EWU5BTUlDLAorCURVS19IQlVGRkVSX0ZMQUdfRVhURVJOQUwsCisJMCAgLyogdGVybWlu YXRvciAqLworfTsKKworRFVLX0xPQ0FMIHZvaWQgZHVrX19kZWJ1Z19nZXRpbmZvX2ZsYWdzX2tl eShkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBjaGFyICprZXkpIHsKKwlkdWtfZGVidWdfd3JpdGVf dWludCh0aHIsIDApOworCWR1a19kZWJ1Z193cml0ZV9jc3RyaW5nKHRociwga2V5KTsKK30KKwor RFVLX0xPQ0FMIHZvaWQgZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludChkdWtfaHRocmVhZCAq dGhyLCBjb25zdCBjaGFyICprZXksIGR1a191aW50X3QgdmFsKSB7CisJZHVrX2RlYnVnX3dyaXRl X3VpbnQodGhyLCAwKTsKKwlkdWtfZGVidWdfd3JpdGVfY3N0cmluZyh0aHIsIGtleSk7CisJZHVr X2RlYnVnX3dyaXRlX3VpbnQodGhyLCB2YWwpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Rl YnVnX2dldGluZm9fcHJvcF9pbnQoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqa2V5LCBk dWtfaW50X3QgdmFsKSB7CisJZHVrX2RlYnVnX3dyaXRlX3VpbnQodGhyLCAwKTsKKwlkdWtfZGVi dWdfd3JpdGVfY3N0cmluZyh0aHIsIGtleSk7CisJZHVrX2RlYnVnX3dyaXRlX2ludCh0aHIsIHZh bCk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZGVidWdfZ2V0aW5mb19wcm9wX2Jvb2woZHVr X2h0aHJlYWQgKnRociwgY29uc3QgY2hhciAqa2V5LCBkdWtfYm9vbF90IHZhbCkgeworCWR1a19k ZWJ1Z193cml0ZV91aW50KHRociwgMCk7CisJZHVrX2RlYnVnX3dyaXRlX2NzdHJpbmcodGhyLCBr ZXkpOworCWR1a19kZWJ1Z193cml0ZV9ib29sZWFuKHRociwgdmFsKTsKK30KKworRFVLX0xPQ0FM IHZvaWQgZHVrX19kZWJ1Z19nZXRpbmZvX2JpdG1hc2soZHVrX2h0aHJlYWQgKnRociwgY29uc3Qg Y2hhciAqIGNvbnN0ICoga2V5cywgZHVrX3VpbnRfdCAqbWFza3MsIGR1a191aW50X3QgZmxhZ3Mp IHsKKwljb25zdCBjaGFyICprZXk7CisJZHVrX3VpbnRfdCBtYXNrOworCisJZm9yICg7Oykgewor CQltYXNrID0gKm1hc2tzKys7CisJCWlmIChtYXNrID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJ CWtleSA9ICprZXlzKys7CisJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCisJCURVS19ERChE VUtfRERQUklOVCgiaW5zcGVjdCBiaXRtYXNrOiBrZXk9JXMsIG1hc2s9MHglMDhseCwgZmxhZ3M9 MHglMDhseCIsIGtleSwgKHVuc2lnbmVkIGxvbmcpIG1hc2ssICh1bnNpZ25lZCBsb25nKSBmbGFn cykpOworCQlkdWtfX2RlYnVnX2dldGluZm9fcHJvcF9ib29sKHRociwga2V5LCBmbGFncyAmIG1h c2spOworCX0KK30KKworLyogSW5zcGVjdCBhIHByb3BlcnR5IHVzaW5nIGEgdmlydHVhbCBpbmRl eCBpbnRvIGEgY29uY2VwdHVhbCBwcm9wZXJ0eSBsaXN0CisgKiBjb25zaXN0aW5nIG9mICgxKSBh bGwgYXJyYXkgcGFydCBpdGVtcyBmcm9tIFswLGFfc2l6ZVsgKGV2ZW4gd2hlbiBhYm92ZQorICog Lmxlbmd0aCkgYW5kICgyKSBhbGwgZW50cnkgcGFydCBpdGVtcyBmcm9tIFswLGVfbmV4dFsuICBV bnVzZWQgc2xvdHMgYXJlCisgKiBpbmRpY2F0ZWQgdXNpbmcgZHZhbHVlICd1bnVzZWQnLgorICov CitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2RlYnVnX2dldHByb3BfaW5kZXgoZHVrX2h0aHJl YWQgKnRociwgZHVrX2hlYXAgKmhlYXAsIGR1a19ob2JqZWN0ICpoX29iaiwgZHVrX3VpbnRfdCBp ZHgpIHsKKwlkdWtfdWludF90IGFfc2l6ZTsKKwlkdWtfdHZhbCAqdHY7CisJZHVrX2hzdHJpbmcg Kmhfa2V5OworCWR1a19ob2JqZWN0ICpoX2dldHNldDsKKwlkdWtfdWludF90IGZsYWdzOworCisJ RFVLX1VOUkVGKGhlYXApOworCisJYV9zaXplID0gRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKGhfb2Jq KTsKKwlpZiAoaWR4IDwgYV9zaXplKSB7CisJCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgRFVL X1BST1BERVNDX0ZMQUdTX1dFQyk7CisJCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgaWR4KTsK KwkJdHYgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIoaGVhcCwgaF9vYmosIGlkeCk7CisJ CWR1a19kZWJ1Z193cml0ZV90dmFsKHRociwgdHYpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZHgg LT0gYV9zaXplOworCWlmIChpZHggPj0gRFVLX0hPQkpFQ1RfR0VUX0VORVhUKGhfb2JqKSkgewor CQlyZXR1cm4gMDsKKwl9CisKKwloX2tleSA9IERVS19IT0JKRUNUX0VfR0VUX0tFWShoZWFwLCBo X29iaiwgaWR4KTsKKwlpZiAoaF9rZXkgPT0gTlVMTCkgeworCQlkdWtfZGVidWdfd3JpdGVfdWlu dCh0aHIsIDApOworCQlkdWtfZGVidWdfd3JpdGVfbnVsbCh0aHIpOworCQlkdWtfZGVidWdfd3Jp dGVfdW51c2VkKHRocik7CisJCXJldHVybiAxOworCX0KKworCWZsYWdzID0gRFVLX0hPQkpFQ1Rf RV9HRVRfRkxBR1MoaGVhcCwgaF9vYmosIGlkeCk7CisJaWYgKERVS19IU1RSSU5HX0hBU19TWU1C T0woaF9rZXkpKSB7CisJCWZsYWdzIHw9IERVS19EQkdfUFJPUEZMQUdfU1lNQk9MOworCX0KKwlp ZiAoRFVLX0hTVFJJTkdfSEFTX0hJRERFTihoX2tleSkpIHsKKwkJZmxhZ3MgfD0gRFVLX0RCR19Q Uk9QRkxBR19ISURERU47CisJfQorCWR1a19kZWJ1Z193cml0ZV91aW50KHRociwgZmxhZ3MpOwor CWR1a19kZWJ1Z193cml0ZV9oc3RyaW5nKHRociwgaF9rZXkpOworCWlmIChmbGFncyAmIERVS19Q Uk9QREVTQ19GTEFHX0FDQ0VTU09SKSB7CisJCWhfZ2V0c2V0ID0gRFVLX0hPQkpFQ1RfRV9HRVRf VkFMVUVfR0VUVEVSKGhlYXAsIGhfb2JqLCBpZHgpOworCQlpZiAoaF9nZXRzZXQpIHsKKwkJCWR1 a19kZWJ1Z193cml0ZV9ob2JqZWN0KHRociwgaF9nZXRzZXQpOworCQl9IGVsc2UgeworCQkJZHVr X2RlYnVnX3dyaXRlX251bGwodGhyKTsKKwkJfQorCQloX2dldHNldCA9IERVS19IT0JKRUNUX0Vf R0VUX1ZBTFVFX1NFVFRFUihoZWFwLCBoX29iaiwgaWR4KTsKKwkJaWYgKGhfZ2V0c2V0KSB7CisJ CQlkdWtfZGVidWdfd3JpdGVfaG9iamVjdCh0aHIsIGhfZ2V0c2V0KTsKKwkJfSBlbHNlIHsKKwkJ CWR1a19kZWJ1Z193cml0ZV9udWxsKHRocik7CisJCX0KKwl9IGVsc2UgeworCQl0diA9IERVS19I T0JKRUNUX0VfR0VUX1ZBTFVFX1RWQUxfUFRSKGhlYXAsIGhfb2JqLCBpZHgpOworCQlkdWtfZGVi dWdfd3JpdGVfdHZhbCh0aHIsIHR2KTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK0RVS19MT0NBTCB2 b2lkIGR1a19fZGVidWdfaGFuZGxlX2dldF9oZWFwX29ial9pbmZvKGR1a19odGhyZWFkICp0aHIs IGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2hlYXBoZHIgKmg7CisKKwlEVUtfRChEVUtfRFBSSU5U KCJkZWJ1ZyBjb21tYW5kIEdldEhlYXBPYmpJbmZvIikpOworCURVS19VTlJFRihoZWFwKTsKKwor CURVS19BU1NFUlQoc2l6ZW9mKGR1a19fZGVidWdfZ2V0aW5mb19oc3RyaW5nX2tleXMpIC8gc2l6 ZW9mKGNvbnN0IGNoYXIgKikgPT0gc2l6ZW9mKGR1a19fZGVidWdfZ2V0aW5mb19oc3RyaW5nX21h c2tzKSAvIHNpemVvZihkdWtfdWludF90KSAtIDEpOworCURVS19BU1NFUlQoc2l6ZW9mKGR1a19f ZGVidWdfZ2V0aW5mb19ob2JqZWN0X2tleXMpIC8gc2l6ZW9mKGNvbnN0IGNoYXIgKikgPT0gc2l6 ZW9mKGR1a19fZGVidWdfZ2V0aW5mb19ob2JqZWN0X21hc2tzKSAvIHNpemVvZihkdWtfdWludF90 KSAtIDEpOworCURVS19BU1NFUlQoc2l6ZW9mKGR1a19fZGVidWdfZ2V0aW5mb19oYnVmZmVyX2tl eXMpIC8gc2l6ZW9mKGNvbnN0IGNoYXIgKikgPT0gc2l6ZW9mKGR1a19fZGVidWdfZ2V0aW5mb19o YnVmZmVyX21hc2tzKSAvIHNpemVvZihkdWtfdWludF90KSAtIDEpOworCisJaCA9IGR1a19kZWJ1 Z19yZWFkX2FueV9wdHIodGhyKTsKKwlpZiAoIWgpIHsKKwkJZHVrX2RlYnVnX3dyaXRlX2Vycm9y X2VvbSh0aHIsIERVS19EQkdfRVJSX1VOS05PV04sICJpbnZhbGlkIHRhcmdldCIpOworCQlyZXR1 cm47CisJfQorCisJZHVrX2RlYnVnX3dyaXRlX3JlcGx5KHRocik7CisKKwkvKiBBcyB3aXRoIGFs bCBpbnNwZWN0aW9uIGNvZGUsIHdlIHJlbHkgb24gdGhlIGRlYnVnIGNsaWVudCBwcm92aWRpbmcK KwkgKiBhIHZhbGlkLCBub24tc3RhbGUgcG9pbnRlcjogdGhlcmUncyBubyBwb3J0YWJsZSB3YXkg dG8gc2FmZWx5CisJICogdmFsaWRhdGUgdGhlIHBvaW50ZXIgaGVyZS4KKwkgKi8KKworCWR1a19f ZGVidWdfZ2V0aW5mb19mbGFnc19rZXkodGhyLCAiaGVhcHB0ciIpOworCWR1a19kZWJ1Z193cml0 ZV9oZWFwcHRyKHRociwgaCk7CisKKwkvKiBYWFg6IGNvbWVzIG91dCBhcyBzaWduZWQgbm93ICov CisJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJoZWFwaGRyX2ZsYWdzIiwgKGR1 a191aW50X3QpIERVS19IRUFQSERSX0dFVF9GTEFHUyhoKSk7CisJZHVrX19kZWJ1Z19nZXRpbmZv X3Byb3BfdWludCh0aHIsICJoZWFwaGRyX3R5cGUiLCAoZHVrX3VpbnRfdCkgRFVLX0hFQVBIRFJf R0VUX1RZUEUoaCkpOworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJ ZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJyZWZjb3VudCIsIChkdWtfdWludF90 KSBEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoaCkpOworI2VuZGlmCisjaWYgMCAvKiBwcnVuZWQg Ki8KKwlkdWtfX2RlYnVnX2dldGluZm9fYml0bWFzayh0aHIsCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX19kZWJ1Z19nZXRpbmZvX2hlYXBoZHJfa2V5cywKKwkgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfX2RlYnVnX2dldGluZm9faGVhcGhkcl9tYXNrcywKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSEVBUEhEUl9HRVRfRkxBR1NfUkFXKGgpKTsKKyNlbmRp ZgorCisJc3dpdGNoIChEVUtfSEVBUEhEUl9HRVRfVFlQRShoKSkgeworCWNhc2UgRFVLX0hUWVBF X1NUUklORzogeworCQlkdWtfaHN0cmluZyAqaF9zdHI7CisKKwkJaF9zdHIgPSAoZHVrX2hzdHJp bmcgKikgaDsKKwkJZHVrX19kZWJ1Z19nZXRpbmZvX2JpdG1hc2sodGhyLAorCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfX2RlYnVnX2dldGluZm9faHN0cmluZ19rZXlzLAorCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfX2RlYnVnX2dldGluZm9faHN0cmluZ19tYXNrcywK KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hFQVBIRFJfR0VUX0ZMQUdTX1JBVyho KSk7CisJCWR1a19fZGVidWdfZ2V0aW5mb19wcm9wX3VpbnQodGhyLCAiYnl0ZWxlbiIsIChkdWtf dWludF90KSBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX3N0cikpOworCQlkdWtfX2RlYnVnX2dl dGluZm9fcHJvcF91aW50KHRociwgImNoYXJsZW4iLCAoZHVrX3VpbnRfdCkgRFVLX0hTVFJJTkdf R0VUX0NIQVJMRU4oaF9zdHIpKTsKKwkJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIs ICJoYXNoIiwgKGR1a191aW50X3QpIERVS19IU1RSSU5HX0dFVF9IQVNIKGhfc3RyKSk7CisJCWR1 a19fZGVidWdfZ2V0aW5mb19mbGFnc19rZXkodGhyLCAiZGF0YSIpOworCQlkdWtfZGVidWdfd3Jp dGVfaHN0cmluZyh0aHIsIGhfc3RyKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0hUWVBFX09C SkVDVDogeworCQlkdWtfaG9iamVjdCAqaF9vYmo7CisJCWR1a19ob2JqZWN0ICpoX3Byb3RvOwor CisJCWhfb2JqID0gKGR1a19ob2JqZWN0ICopIGg7CisJCWhfcHJvdG8gPSBEVUtfSE9CSkVDVF9H RVRfUFJPVE9UWVBFKGhlYXAsIGhfb2JqKTsKKworCQkvKiBkdWtfaG9iamVjdCBzcGVjaWZpYyBm aWVsZHMuICovCisJCWR1a19fZGVidWdfZ2V0aW5mb19iaXRtYXNrKHRociwKKwkJICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX19kZWJ1Z19nZXRpbmZvX2hvYmplY3Rfa2V5cywKKwkJICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHVrX19kZWJ1Z19nZXRpbmZvX2hvYmplY3RfbWFza3Ms CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IRUFQSERSX0dFVF9GTEFHU19SQVco aCkpOworCQlkdWtfX2RlYnVnX2dldGluZm9fcHJvcF91aW50KHRociwgImNsYXNzX251bWJlciIs IERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoaF9vYmopKTsKKwkJZHVrX19kZWJ1Z19nZXRp bmZvX2ZsYWdzX2tleSh0aHIsICJjbGFzc19uYW1lIik7CisJCWR1a19kZWJ1Z193cml0ZV9oc3Ry aW5nKHRociwgRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX1NUUklORyhoZWFwLCBoX29iaikpOworCQlk dWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5KHRociwgInByb3RvdHlwZSIpOworCQlpZiAoaF9w cm90byAhPSBOVUxMKSB7CisJCQlkdWtfZGVidWdfd3JpdGVfaG9iamVjdCh0aHIsIGhfcHJvdG8p OworCQl9IGVsc2UgeworCQkJZHVrX2RlYnVnX3dyaXRlX251bGwodGhyKTsKKwkJfQorCQlkdWtf X2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5KHRociwgInByb3BzIik7CisJCWR1a19kZWJ1Z193cml0 ZV9wb2ludGVyKHRociwgKHZvaWQgKikgRFVLX0hPQkpFQ1RfR0VUX1BST1BTKGhlYXAsIGhfb2Jq KSk7CisJCWR1a19fZGVidWdfZ2V0aW5mb19wcm9wX3VpbnQodGhyLCAiZV9zaXplIiwgKGR1a191 aW50X3QpIERVS19IT0JKRUNUX0dFVF9FU0laRShoX29iaikpOworCQlkdWtfX2RlYnVnX2dldGlu Zm9fcHJvcF91aW50KHRociwgImVfbmV4dCIsIChkdWtfdWludF90KSBEVUtfSE9CSkVDVF9HRVRf RU5FWFQoaF9vYmopKTsKKwkJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJhX3Np emUiLCAoZHVrX3VpbnRfdCkgRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKGhfb2JqKSk7CisJCWR1a19f ZGVidWdfZ2V0aW5mb19wcm9wX3VpbnQodGhyLCAiaF9zaXplIiwgKGR1a191aW50X3QpIERVS19I T0JKRUNUX0dFVF9IU0laRShoX29iaikpOworCisJCWlmIChEVUtfSE9CSkVDVF9JU19BUlJBWSho X29iaikpIHsKKwkJCWR1a19oYXJyYXkgKmhfYXJyOworCQkJaF9hcnIgPSAoZHVrX2hhcnJheSAq KSBoX29iajsKKworCQkJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJsZW5ndGgi LCAoZHVrX3VpbnRfdCkgaF9hcnItPmxlbmd0aCk7CisJCQlkdWtfX2RlYnVnX2dldGluZm9fcHJv cF9ib29sKHRociwgImxlbmd0aF9ub253cml0YWJsZSIsIGhfYXJyLT5sZW5ndGhfbm9ud3JpdGFi bGUpOworCQl9CisKKwkJaWYgKERVS19IT0JKRUNUX0lTX05BVEZVTkMoaF9vYmopKSB7CisJCQlk dWtfaG5hdGZ1bmMgKmhfZnVuOworCQkJaF9mdW4gPSAoZHVrX2huYXRmdW5jICopIGhfb2JqOwor CisJCQlkdWtfX2RlYnVnX2dldGluZm9fcHJvcF9pbnQodGhyLCAibmFyZ3MiLCBoX2Z1bi0+bmFy Z3MpOworCQkJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfaW50KHRociwgIm1hZ2ljIiwgaF9mdW4t Pm1hZ2ljKTsKKwkJCWR1a19fZGVidWdfZ2V0aW5mb19wcm9wX2Jvb2wodGhyLCAidmFyYXJncyIs IGhfZnVuLT5tYWdpYyA9PSBEVUtfSE5BVEZVTkNfTkFSR1NfVkFSQVJHUyk7CisJCQkvKiBOYXRp dmUgZnVuY3Rpb24gcG9pbnRlciBtYXkgYmUgZGlmZmVyZW50IGZyb20gYSB2b2lkIHBvaW50ZXIs CisJCQkgKiBhbmQgd2Ugc2VyaWFsaXplIGl0IGZyb20gbWVtb3J5IGRpcmVjdGx5IG5vdyAobm8g Ynl0ZSBzd2FwcGluZyBldGMpLgorCQkJICovCisJCQlkdWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nf a2V5KHRociwgImZ1bmNwdHIiKTsKKwkJCWR1a19kZWJ1Z193cml0ZV9idWZmZXIodGhyLCAoY29u c3QgY2hhciAqKSAmaF9mdW4tPmZ1bmMsIHNpemVvZihoX2Z1bi0+ZnVuYykpOworCQl9CisKKwkJ aWYgKERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKGhfb2JqKSkgeworCQkJZHVrX2hjb21wZnVuYyAq aF9mdW47CisJCQlkdWtfaGJ1ZmZlciAqaF9idWY7CisJCQlkdWtfaG9iamVjdCAqaF9sZXhlbnY7 CisJCQlkdWtfaG9iamVjdCAqaF92YXJlbnY7CisJCQloX2Z1biA9IChkdWtfaGNvbXBmdW5jICop IGhfb2JqOworCisJCQlkdWtfX2RlYnVnX2dldGluZm9fcHJvcF9pbnQodGhyLCAibnJlZ3MiLCBo X2Z1bi0+bnJlZ3MpOworCQkJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfaW50KHRociwgIm5hcmdz IiwgaF9mdW4tPm5hcmdzKTsKKworCQkJZHVrX19kZWJ1Z19nZXRpbmZvX2ZsYWdzX2tleSh0aHIs ICJsZXhfZW52Iik7CisJCQloX2xleGVudiA9IERVS19IQ09NUEZVTkNfR0VUX0xFWEVOVih0aHIt PmhlYXAsIGhfZnVuKTsKKwkJCWlmIChoX2xleGVudiAhPSBOVUxMKSB7CisJCQkJZHVrX2RlYnVn X3dyaXRlX2hvYmplY3QodGhyLCBoX2xleGVudik7CisJCQl9IGVsc2UgeworCQkJCWR1a19kZWJ1 Z193cml0ZV9udWxsKHRocik7CisJCQl9CisJCQlkdWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5 KHRociwgInZhcl9lbnYiKTsKKwkJCWhfdmFyZW52ID0gRFVLX0hDT01QRlVOQ19HRVRfVkFSRU5W KHRoci0+aGVhcCwgaF9mdW4pOworCQkJaWYgKGhfdmFyZW52ICE9IE5VTEwpIHsKKwkJCQlkdWtf ZGVidWdfd3JpdGVfaG9iamVjdCh0aHIsIGhfdmFyZW52KTsKKwkJCX0gZWxzZSB7CisJCQkJZHVr X2RlYnVnX3dyaXRlX251bGwodGhyKTsKKwkJCX0KKworCQkJZHVrX19kZWJ1Z19nZXRpbmZvX3By b3BfdWludCh0aHIsICJzdGFydF9saW5lIiwgaF9mdW4tPnN0YXJ0X2xpbmUpOworCQkJZHVrX19k ZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJlbmRfbGluZSIsIGhfZnVuLT5lbmRfbGluZSk7 CisJCQloX2J1ZiA9IChkdWtfaGJ1ZmZlciAqKSBEVUtfSENPTVBGVU5DX0dFVF9EQVRBKHRoci0+ aGVhcCwgaF9mdW4pOworCQkJaWYgKGhfYnVmICE9IE5VTEwpIHsKKwkJCQlkdWtfX2RlYnVnX2dl dGluZm9fZmxhZ3Nfa2V5KHRociwgImRhdGEiKTsKKwkJCQlkdWtfZGVidWdfd3JpdGVfaGVhcHB0 cih0aHIsIChkdWtfaGVhcGhkciAqKSBoX2J1Zik7CisJCQl9CisJCX0KKworCQlpZiAoRFVLX0hP QkpFQ1RfSVNfQk9VTkRGVU5DKGhfb2JqKSkgeworCQkJZHVrX2hib3VuZGZ1bmMgKmhfYmZ1bjsK KwkJCWhfYmZ1biA9IChkdWtfaGJvdW5kZnVuYyAqKSAodm9pZCAqKSBoX29iajsKKworCQkJZHVr X19kZWJ1Z19nZXRpbmZvX2ZsYWdzX2tleSh0aHIsICJ0YXJnZXQiKTsKKwkJCWR1a19kZWJ1Z193 cml0ZV90dmFsKHRociwgJmhfYmZ1bi0+dGFyZ2V0KTsKKwkJCWR1a19fZGVidWdfZ2V0aW5mb19m bGFnc19rZXkodGhyLCAidGhpc19iaW5kaW5nIik7CisJCQlkdWtfZGVidWdfd3JpdGVfdHZhbCh0 aHIsICZoX2JmdW4tPnRoaXNfYmluZGluZyk7CisJCQlkdWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nf a2V5KHRociwgIm5hcmdzIik7CisJCQlkdWtfZGVidWdfd3JpdGVfaW50KHRociwgaF9iZnVuLT5u YXJncyk7CisJCQkvKiBoX2JmdW4tPmFyZ3Mgbm90IGV4cG9zZWQgbm93ICovCisJCX0KKworCQlp ZiAoRFVLX0hPQkpFQ1RfSVNfVEhSRUFEKGhfb2JqKSkgeworCQkJLyogWFhYOiBDdXJyZW50bHkg bm8gaW5zcGVjdGlvbiBvZiB0aHJlYWRzLCBlLmcuIHZhbHVlIHN0YWNrLCBjYWxsCisJCQkgKiBz dGFjaywgY2F0Y2ggc3RhY2ssIGV0Yy4KKwkJCSAqLworCQkJZHVrX2h0aHJlYWQgKmhfdGhyOwor CQkJaF90aHIgPSAoZHVrX2h0aHJlYWQgKikgaF9vYmo7CisJCQlEVUtfVU5SRUYoaF90aHIpOwor CQl9CisKKwkJaWYgKERVS19IT0JKRUNUX0lTX0RFQ0VOVihoX29iaikpIHsKKwkJCWR1a19oZGVj ZW52ICpoX2VudjsKKwkJCWhfZW52ID0gKGR1a19oZGVjZW52ICopIGhfb2JqOworCisJCQlkdWtf X2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5KHRociwgInRocmVhZCIpOworCQkJZHVrX2RlYnVnX3dy aXRlX2hlYXBwdHIodGhyLCAoZHVrX2hlYXBoZHIgKikgKGhfZW52LT50aHJlYWQpKTsKKwkJCWR1 a19fZGVidWdfZ2V0aW5mb19mbGFnc19rZXkodGhyLCAidmFybWFwIik7CisJCQlkdWtfZGVidWdf d3JpdGVfaGVhcHB0cih0aHIsIChkdWtfaGVhcGhkciAqKSAoaF9lbnYtPnZhcm1hcCkpOworCQkJ ZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJyZWdiYXNlIiwgKGR1a191aW50X3Qp IGhfZW52LT5yZWdiYXNlX2J5dGVvZmYpOworCQl9CisKKwkJaWYgKERVS19IT0JKRUNUX0lTX09C SkVOVihoX29iaikpIHsKKwkJCWR1a19ob2JqZW52ICpoX2VudjsKKwkJCWhfZW52ID0gKGR1a19o b2JqZW52ICopIGhfb2JqOworCisJCQlkdWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5KHRociwg InRhcmdldCIpOworCQkJZHVrX2RlYnVnX3dyaXRlX2hlYXBwdHIodGhyLCAoZHVrX2hlYXBoZHIg KikgKGhfZW52LT50YXJnZXQpKTsKKwkJCWR1a19fZGVidWdfZ2V0aW5mb19wcm9wX2Jvb2wodGhy LCAiaGFzX3RoaXMiLCBoX2Vudi0+aGFzX3RoaXMpOworCQl9CisKKyNpZiBkZWZpbmVkKERVS19V U0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisJCWlmIChEVUtfSE9CSkVDVF9JU19CVUZPQkooaF9v YmopKSB7CisJCQlkdWtfaGJ1Zm9iaiAqaF9idWZvYmo7CisJCQloX2J1Zm9iaiA9IChkdWtfaGJ1 Zm9iaiAqKSBoX29iajsKKworCQkJZHVrX19kZWJ1Z19nZXRpbmZvX3Byb3BfdWludCh0aHIsICJz bGljZV9vZmZzZXQiLCBoX2J1Zm9iai0+b2Zmc2V0KTsKKwkJCWR1a19fZGVidWdfZ2V0aW5mb19w cm9wX3VpbnQodGhyLCAic2xpY2VfbGVuZ3RoIiwgaF9idWZvYmotPmxlbmd0aCk7CisJCQlkdWtf X2RlYnVnX2dldGluZm9fcHJvcF91aW50KHRociwgImVsZW1fc2hpZnQiLCAoZHVrX3VpbnRfdCkg aF9idWZvYmotPnNoaWZ0KTsKKwkJCWR1a19fZGVidWdfZ2V0aW5mb19wcm9wX3VpbnQodGhyLCAi ZWxlbV90eXBlIiwgKGR1a191aW50X3QpIGhfYnVmb2JqLT5lbGVtX3R5cGUpOworCQkJZHVrX19k ZWJ1Z19nZXRpbmZvX3Byb3BfYm9vbCh0aHIsICJpc190eXBlZGFycmF5IiwgKGR1a191aW50X3Qp IGhfYnVmb2JqLT5pc190eXBlZGFycmF5KTsKKwkJCWlmIChoX2J1Zm9iai0+YnVmICE9IE5VTEwp IHsKKwkJCQlkdWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5KHRociwgImJ1ZmZlciIpOworCQkJ CWR1a19kZWJ1Z193cml0ZV9oZWFwcHRyKHRociwgKGR1a19oZWFwaGRyICopIGhfYnVmb2JqLT5i dWYpOworCQkJfQorCQl9CisjZW5kaWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQg Ki8KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0hUWVBFX0JVRkZFUjogeworCQlkdWtfaGJ1ZmZl ciAqaF9idWY7CisKKwkJaF9idWYgPSAoZHVrX2hidWZmZXIgKikgaDsKKwkJZHVrX19kZWJ1Z19n ZXRpbmZvX2JpdG1hc2sodGhyLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfX2Rl YnVnX2dldGluZm9faGJ1ZmZlcl9rZXlzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBk dWtfX2RlYnVnX2dldGluZm9faGJ1ZmZlcl9tYXNrcywKKwkJICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hFQVBIRFJfR0VUX0ZMQUdTX1JBVyhoKSk7CisJCWR1a19fZGVidWdfZ2V0aW5m b19wcm9wX3VpbnQodGhyLCAic2l6ZSIsIChkdWtfdWludF90KSBEVUtfSEJVRkZFUl9HRVRfU0la RShoX2J1ZikpOworCQlkdWtfX2RlYnVnX2dldGluZm9fZmxhZ3Nfa2V5KHRociwgImRhdGFwdHIi KTsKKwkJZHVrX2RlYnVnX3dyaXRlX3BvaW50ZXIodGhyLCAodm9pZCAqKSBEVUtfSEJVRkZFUl9H RVRfREFUQV9QVFIodGhyLT5oZWFwLCBoX2J1ZikpOworCQlkdWtfX2RlYnVnX2dldGluZm9fZmxh Z3Nfa2V5KHRociwgImRhdGEiKTsKKwkJZHVrX2RlYnVnX3dyaXRlX2hidWZmZXIodGhyLCBoX2J1 Zik7ICAvKiB0b2xlcmF0ZXMgTlVMTCBoX2J1ZiAqLworCQlicmVhazsKKwl9CisJZGVmYXVsdDog eworCQkvKiBTaW5jZSB3ZSBhbHJlYWR5IHN0YXJ0ZWQgd3JpdGluZyB0aGUgcmVwbHksIGp1c3Qg ZW1pdCBub3RoaW5nLiAqLworCQlEVUtfRChEVUtfRFBSSU5UKCJpbnNwZWN0IHRhcmdldCBwb2lu dGVyIGhhcyBpbnZhbGlkIGhlYXBoZHIgdHlwZSIpKTsKKwl9CisJfQorCisJZHVrX2RlYnVnX3dy aXRlX2VvbSh0aHIpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RlYnVnX2hhbmRsZV9nZXRf b2JqX3Byb3BfZGVzYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGVhcCAqaGVhcCkgeworCWR1a19o ZWFwaGRyICpoOworCWR1a19ob2JqZWN0ICpoX29iajsKKwlkdWtfaHN0cmluZyAqaF9rZXk7CisJ ZHVrX3Byb3BkZXNjIGRlc2M7CisKKwlEVUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIEdl dE9ialByb3BEZXNjIikpOworCURVS19VTlJFRihoZWFwKTsKKworCWggPSBkdWtfZGVidWdfcmVh ZF9hbnlfcHRyKHRocik7CisJaWYgKCFoKSB7CisJCWR1a19kZWJ1Z193cml0ZV9lcnJvcl9lb20o dGhyLCBEVUtfREJHX0VSUl9VTktOT1dOLCAiaW52YWxpZCB0YXJnZXQiKTsKKwkJcmV0dXJuOwor CX0KKwloX2tleSA9IGR1a19kZWJ1Z19yZWFkX2hzdHJpbmcodGhyKTsKKwlpZiAoaCA9PSBOVUxM IHx8IERVS19IRUFQSERSX0dFVF9UWVBFKGgpICE9IERVS19IVFlQRV9PQkpFQ1QgfHwgaF9rZXkg PT0gTlVMTCkgeworCQlnb3RvIGZhaWxfYXJnczsKKwl9CisJaF9vYmogPSAoZHVrX2hvYmplY3Qg KikgaDsKKworCWlmIChkdWtfaG9iamVjdF9nZXRfb3duX3Byb3BkZXNjKHRociwgaF9vYmosIGhf a2V5LCAmZGVzYywgMCAvKmZsYWdzKi8pKSB7CisJCWR1a19pbnRfdCB2aXJ0dWFsX2lkeDsKKwkJ ZHVrX2Jvb2xfdCByYzsKKworCQkvKiBUbyB1c2UgdGhlIHNoYXJlZCBoZWxwZXIgbmVlZCB0aGUg dmlydHVhbCBpbmRleC4gKi8KKwkJRFVLX0FTU0VSVChkZXNjLmVfaWR4ID49IDAgfHwgZGVzYy5h X2lkeCA+PSAwKTsKKwkJdmlydHVhbF9pZHggPSAoZGVzYy5hX2lkeCA+PSAwID8gZGVzYy5hX2lk eCA6CisJCSAgICAgICAgICAgICAgIChkdWtfaW50X3QpIERVS19IT0JKRUNUX0dFVF9BU0laRSho X29iaikgKyBkZXNjLmVfaWR4KTsKKworCQlkdWtfZGVidWdfd3JpdGVfcmVwbHkodGhyKTsKKwkJ cmMgPSBkdWtfX2RlYnVnX2dldHByb3BfaW5kZXgodGhyLCBoZWFwLCBoX29iaiwgKGR1a191aW50 X3QpIHZpcnR1YWxfaWR4KTsKKwkJRFVLX0FTU0VSVChyYyA9PSAxKTsKKwkJRFVLX1VOUkVGKHJj KTsKKwkJZHVrX2RlYnVnX3dyaXRlX2VvbSh0aHIpOworCX0gZWxzZSB7CisJCWR1a19kZWJ1Z193 cml0ZV9lcnJvcl9lb20odGhyLCBEVUtfREJHX0VSUl9OT1RGT1VORCwgIm5vdCBmb3VuZCIpOwor CX0KKwlyZXR1cm47CisKKyBmYWlsX2FyZ3M6CisJZHVrX2RlYnVnX3dyaXRlX2Vycm9yX2VvbSh0 aHIsIERVS19EQkdfRVJSX1VOS05PV04sICJpbnZhbGlkIGFyZ3MiKTsKK30KKworRFVLX0xPQ0FM IHZvaWQgZHVrX19kZWJ1Z19oYW5kbGVfZ2V0X29ial9wcm9wX2Rlc2NfcmFuZ2UoZHVrX2h0aHJl YWQgKnRociwgZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfaGVhcGhkciAqaDsKKwlkdWtfaG9iamVj dCAqaF9vYmo7CisJZHVrX3VpbnRfdCBpZHgsIGlkeF9zdGFydCwgaWR4X2VuZDsKKworCURVS19E KERVS19EUFJJTlQoImRlYnVnIGNvbW1hbmQgR2V0T2JqUHJvcERlc2NSYW5nZSIpKTsKKwlEVUtf VU5SRUYoaGVhcCk7CisKKwloID0gZHVrX2RlYnVnX3JlYWRfYW55X3B0cih0aHIpOworCWlkeF9z dGFydCA9IChkdWtfdWludF90KSBkdWtfZGVidWdfcmVhZF9pbnQodGhyKTsKKwlpZHhfZW5kID0g KGR1a191aW50X3QpIGR1a19kZWJ1Z19yZWFkX2ludCh0aHIpOworCWlmIChoID09IE5VTEwgfHwg RFVLX0hFQVBIRFJfR0VUX1RZUEUoaCkgIT0gRFVLX0hUWVBFX09CSkVDVCkgeworCQlnb3RvIGZh aWxfYXJnczsKKwl9CisJaF9vYmogPSAoZHVrX2hvYmplY3QgKikgaDsKKworCS8qIFRoZSBpbmRl eCByYW5nZSBzcGFjZSBpcyBjb25jZXB0dWFsbHkgdGhlIGFycmF5IHBhcnQgZm9sbG93ZWQgYnkg dGhlCisJICogZW50cnkgcGFydC4gIFVubGlrZSBub3JtYWwgZW51bWVyYXRpb24gYWxsIHNsb3Rz IGFyZSBleHBvc2VkIGhlcmUgYXMKKwkgKiBpcyBhbmQgcmV0dXJuICd1bnVzZWQnIGlmIHRoZSBz bG90cyBhcmUgbm90IGluIGFjdGl2ZSB1c2UuICBJbiBwYXJ0aWN1bGFyCisJICogdGhlIGFycmF5 IHBhcnQgaXMgaW5jbHVkZWQgZm9yIHRoZSBmdWxsIGFfc2l6ZSByZWdhcmRsZXNzIG9mIHdoYXQg dGhlCisJICogYXJyYXkgLmxlbmd0aCBpcy4KKwkgKi8KKworCWR1a19kZWJ1Z193cml0ZV9yZXBs eSh0aHIpOworCWZvciAoaWR4ID0gaWR4X3N0YXJ0OyBpZHggPCBpZHhfZW5kOyBpZHgrKykgewor CQlpZiAoIWR1a19fZGVidWdfZ2V0cHJvcF9pbmRleCh0aHIsIGhlYXAsIGhfb2JqLCBpZHgpKSB7 CisJCQlicmVhazsKKwkJfQorCX0KKwlkdWtfZGVidWdfd3JpdGVfZW9tKHRocik7CisJcmV0dXJu OworCisgZmFpbF9hcmdzOgorCWR1a19kZWJ1Z193cml0ZV9lcnJvcl9lb20odGhyLCBEVUtfREJH X0VSUl9VTktOT1dOLCAiaW52YWxpZCBhcmdzIik7Cit9CisKKyNlbmRpZiAgLyogRFVLX1VTRV9E RUJVR0dFUl9JTlNQRUNUICovCisKKy8qCisgKiAgUHJvY2VzcyBpbmNvbWluZyBkZWJ1ZyByZXF1 ZXN0cworICoKKyAqICBJbmRpdmlkdWFsIHJlcXVlc3QgaGFuZGxlcnMgY2FuIHB1c2ggdGVtcG9y YXJpZXMgb24gdGhlIHZhbHVlIHN0YWNrIGFuZAorICogIHJlbHkgb24gZHVrX19kZWJ1Z19wcm9j ZXNzX21lc3NhZ2UoKSB0byByZXN0b3JlIHRoZSB2YWx1ZSBzdGFjayB0b3AKKyAqICBhdXRvbWF0 aWNhbGx5LgorICovCisKKy8qIFByb2Nlc3Mgb25lIGRlYnVnIG1lc3NhZ2UuICBBdXRvbWF0aWNh bGx5IHJlc3RvcmUgdmFsdWUgc3RhY2sgdG9wIHRvIGl0cworICogZW50cnkgdmFsdWUsIHNvIHRo YXQgaW5kaXZpZHVhbCBtZXNzYWdlIGhhbmRsZXJzIGRvbid0IG5lZWQgZXhhY3QgdmFsdWUKKyAq IHN0YWNrIGhhbmRsaW5nIHdoaWNoIGlzIGNvbnZlbmllbnQuCisgKi8KK0RVS19MT0NBTCB2b2lk IGR1a19fZGVidWdfcHJvY2Vzc19tZXNzYWdlKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaGVh cCAqaGVhcDsKKwlkdWtfdWludDhfdCB4OworCWR1a19pbnQzMl90IGNtZDsKKwlkdWtfaWR4X3Qg ZW50cnlfdG9wOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJaGVhcCA9IHRoci0+aGVh cDsKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisKKwllbnRyeV90b3AgPSBkdWtfZ2V0X3Rv cCh0aHIpOworCisJeCA9IGR1a19kZWJ1Z19yZWFkX2J5dGUodGhyKTsKKwlzd2l0Y2ggKHgpIHsK KwljYXNlIERVS19EQkdfSUJfUkVRVUVTVDogeworCQljbWQgPSBkdWtfZGVidWdfcmVhZF9pbnQo dGhyKTsKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBEVUtfREJHX0NNRF9CQVNJQ0lORk86IHsK KwkJCWR1a19fZGVidWdfaGFuZGxlX2Jhc2ljX2luZm8odGhyLCBoZWFwKTsKKwkJCWJyZWFrOwor CQl9CisJCWNhc2UgRFVLX0RCR19DTURfVFJJR0dFUlNUQVRVUzogeworCQkJZHVrX19kZWJ1Z19o YW5kbGVfdHJpZ2dlcl9zdGF0dXModGhyLCBoZWFwKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2Ug RFVLX0RCR19DTURfUEFVU0U6IHsKKwkJCWR1a19fZGVidWdfaGFuZGxlX3BhdXNlKHRociwgaGVh cCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19EQkdfQ01EX1JFU1VNRTogeworCQkJZHVr X19kZWJ1Z19oYW5kbGVfcmVzdW1lKHRociwgaGVhcCk7CisJCQlicmVhazsKKwkJfQorCQljYXNl IERVS19EQkdfQ01EX1NURVBJTlRPOgorCQljYXNlIERVS19EQkdfQ01EX1NURVBPVkVSOgorCQlj YXNlIERVS19EQkdfQ01EX1NURVBPVVQ6IHsKKwkJCWR1a19fZGVidWdfaGFuZGxlX3N0ZXAodGhy LCBoZWFwLCBjbWQpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfREJHX0NNRF9MSVNUQlJF QUs6IHsKKwkJCWR1a19fZGVidWdfaGFuZGxlX2xpc3RfYnJlYWsodGhyLCBoZWFwKTsKKwkJCWJy ZWFrOworCQl9CisJCWNhc2UgRFVLX0RCR19DTURfQUREQlJFQUs6IHsKKwkJCWR1a19fZGVidWdf aGFuZGxlX2FkZF9icmVhayh0aHIsIGhlYXApOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtf REJHX0NNRF9ERUxCUkVBSzogeworCQkJZHVrX19kZWJ1Z19oYW5kbGVfZGVsX2JyZWFrKHRociwg aGVhcCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19EQkdfQ01EX0dFVFZBUjogeworCQkJ ZHVrX19kZWJ1Z19oYW5kbGVfZ2V0X3Zhcih0aHIsIGhlYXApOworCQkJYnJlYWs7CisJCX0KKwkJ Y2FzZSBEVUtfREJHX0NNRF9QVVRWQVI6IHsKKwkJCWR1a19fZGVidWdfaGFuZGxlX3B1dF92YXIo dGhyLCBoZWFwKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX0RCR19DTURfR0VUQ0FMTFNU QUNLOiB7CisJCQlkdWtfX2RlYnVnX2hhbmRsZV9nZXRfY2FsbF9zdGFjayh0aHIsIGhlYXApOwor CQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfREJHX0NNRF9HRVRMT0NBTFM6IHsKKwkJCWR1a19f ZGVidWdfaGFuZGxlX2dldF9sb2NhbHModGhyLCBoZWFwKTsKKwkJCWJyZWFrOworCQl9CisJCWNh c2UgRFVLX0RCR19DTURfRVZBTDogeworCQkJZHVrX19kZWJ1Z19oYW5kbGVfZXZhbCh0aHIsIGhl YXApOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfREJHX0NNRF9ERVRBQ0g6IHsKKwkJCS8q IFRoZSBhY3R1YWwgZGV0YWNoZWRfY2IgY2FsbCBpcyBwb3N0cG9uZWQgdG8gbWVzc2FnZSBsb29w IHNvCisJCQkgKiB3ZSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIHByZWNhdXRpb25zIGhlcmUgKGp1 c3Qgc2tpcCB0byBFT00KKwkJCSAqIG9uIHRoZSBhbHJlYWR5IGNsb3NlZCBjb25uZWN0aW9uKS4K KwkJCSAqLworCQkJZHVrX19kZWJ1Z19oYW5kbGVfZGV0YWNoKHRociwgaGVhcCk7CisJCQlicmVh azsKKwkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9EVU1QSEVBUCkKKwkJY2FzZSBE VUtfREJHX0NNRF9EVU1QSEVBUDogeworCQkJZHVrX19kZWJ1Z19oYW5kbGVfZHVtcF9oZWFwKHRo ciwgaGVhcCk7CisJCQlicmVhazsKKwkJfQorI2VuZGlmICAvKiBEVUtfVVNFX0RFQlVHR0VSX0RV TVBIRUFQICovCisJCWNhc2UgRFVLX0RCR19DTURfR0VUQllURUNPREU6IHsKKwkJCWR1a19fZGVi dWdfaGFuZGxlX2dldF9ieXRlY29kZSh0aHIsIGhlYXApOworCQkJYnJlYWs7CisJCX0KKwkJY2Fz ZSBEVUtfREJHX0NNRF9BUFBSRVFVRVNUOiB7CisJCQlkdWtfX2RlYnVnX2hhbmRsZV9hcHByZXF1 ZXN0KHRociwgaGVhcCk7CisJCQlicmVhazsKKwkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJV R0dFUl9JTlNQRUNUKQorCQljYXNlIERVS19EQkdfQ01EX0dFVEhFQVBPQkpJTkZPOiB7CisJCQlk dWtfX2RlYnVnX2hhbmRsZV9nZXRfaGVhcF9vYmpfaW5mbyh0aHIsIGhlYXApOworCQkJYnJlYWs7 CisJCX0KKwkJY2FzZSBEVUtfREJHX0NNRF9HRVRPQkpQUk9QREVTQzogeworCQkJZHVrX19kZWJ1 Z19oYW5kbGVfZ2V0X29ial9wcm9wX2Rlc2ModGhyLCBoZWFwKTsKKwkJCWJyZWFrOworCQl9CisJ CWNhc2UgRFVLX0RCR19DTURfR0VUT0JKUFJPUERFU0NSQU5HRTogeworCQkJZHVrX19kZWJ1Z19o YW5kbGVfZ2V0X29ial9wcm9wX2Rlc2NfcmFuZ2UodGhyLCBoZWFwKTsKKwkJCWJyZWFrOworCQl9 CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUdHRVJfSU5TUEVDVCAqLworCQlkZWZhdWx0OiB7CisJ CQlEVUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBjb21tYW5kIHVuc3VwcG9ydGVkOiAlZCIsIChpbnQp IGNtZCkpOworCQkJZHVrX2RlYnVnX3dyaXRlX2Vycm9yX2VvbSh0aHIsIERVS19EQkdfRVJSX1VO U1VQUE9SVEVELCAidW5zdXBwb3J0ZWQgY29tbWFuZCIpOworCQl9CisJCX0gIC8qIHN3aXRjaCBj bWQgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0RCR19JQl9SRVBMWTogeworCQlEVUtfRChE VUtfRFBSSU5UKCJkZWJ1ZyByZXBseSwgc2tpcHBpbmciKSk7CisJCWJyZWFrOworCX0KKwljYXNl IERVS19EQkdfSUJfRVJST1I6IHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiZGVidWcgZXJyb3IsIHNr aXBwaW5nIikpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfREJHX0lCX05PVElGWTogeworCQlE VUtfRChEVUtfRFBSSU5UKCJkZWJ1ZyBub3RpZnksIHNraXBwaW5nIikpOworCQlicmVhazsKKwl9 CisJZGVmYXVsdDogeworCQlEVUtfRChEVUtfRFBSSU5UKCJpbnZhbGlkIGluaXRpYWwgYnl0ZSwg ZHJvcCBjb25uZWN0aW9uOiAlZCIsIChpbnQpIHgpKTsKKwkJZ290byBmYWlsOworCX0KKwl9ICAv KiBzd2l0Y2ggaW5pdGlhbCBieXRlICovCisKKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikg Pj0gZW50cnlfdG9wKTsKKwlkdWtfc2V0X3RvcCh0aHIsIGVudHJ5X3RvcCk7CisJZHVrX19kZWJ1 Z19za2lwX3RvX2VvbSh0aHIpOworCXJldHVybjsKKworIGZhaWw6CisJRFVLX0FTU0VSVChkdWtf Z2V0X3RvcCh0aHIpID49IGVudHJ5X3RvcCk7CisJZHVrX3NldF90b3AodGhyLCBlbnRyeV90b3Ap OworCURVS19fU0VUX0NPTk5fQlJPS0VOKHRociwgMSk7CisJcmV0dXJuOworfQorCitEVUtfTE9D QUwgdm9pZCBkdWtfX2NoZWNrX3Jlc2VuZF9zdGF0dXMoZHVrX2h0aHJlYWQgKnRocikgeworCWlm ICh0aHItPmhlYXAtPmRiZ19yZWFkX2NiICE9IE5VTEwgJiYgdGhyLT5oZWFwLT5kYmdfc3RhdGVf ZGlydHkpIHsKKwkJZHVrX2RlYnVnX3NlbmRfc3RhdHVzKHRocik7CisJCXRoci0+aGVhcC0+ZGJn X3N0YXRlX2RpcnR5ID0gMDsKKwl9Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19k ZWJ1Z19wcm9jZXNzX21lc3NhZ2VzKGR1a19odGhyZWFkICp0aHIsIGR1a19ib29sX3Qgbm9fYmxv Y2spIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfaWR4X3QgZW50cnlf dG9wOworI2VuZGlmCisJZHVrX2Jvb2xfdCByZXR2YWwgPSAwOworCisJRFVLX0FTU0VSVCh0aHIg IT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisjaWYgZGVmaW5lZChE VUtfVVNFX0FTU0VSVElPTlMpCisJZW50cnlfdG9wID0gZHVrX2dldF90b3AodGhyKTsKKyNlbmRp ZgorCisJRFVLX0QoRFVLX0RQUklOVCgicHJvY2VzcyBkZWJ1ZyBtZXNzYWdlczogcmVhZF9jYj0l cywgbm9fYmxvY2s9JWxkLCBkZXRhY2hpbmc9JWxkLCBwcm9jZXNzaW5nPSVsZCIsCisJICAgICAg ICAgICAgICAgICB0aHItPmhlYXAtPmRiZ19yZWFkX2NiID8gIm5vdCBOVUxMIiA6ICJOVUxMIiwg KGxvbmcpIG5vX2Jsb2NrLAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIHRoci0+aGVhcC0+ZGJn X2RldGFjaGluZywgKGxvbmcpIHRoci0+aGVhcC0+ZGJnX3Byb2Nlc3NpbmcpKTsKKwlEVUtfREQo RFVLX0REUFJJTlQoInRvcCBhdCBlbnRyeTogJWxkIiwgKGxvbmcpIGR1a19nZXRfdG9wKHRocikp KTsKKworCS8qIHRoci0+aGVhcC0+ZGJnX2RldGFjaGluZyBtYXkgYmUgIT0gMCBpZiBhIGRlYnVn Z2VyIHdyaXRlIG91dHNpZGUKKwkgKiB0aGUgbWVzc2FnZSBsb29wIGNhdXNlZCBhIHRyYW5zcG9y dCBlcnJvciBhbmQgZGV0YWNoMSgpIHRvIHJ1bi4KKwkgKi8KKwlEVUtfQVNTRVJUKHRoci0+aGVh cC0+ZGJnX2RldGFjaGluZyA9PSAwIHx8IHRoci0+aGVhcC0+ZGJnX2RldGFjaGluZyA9PSAxKTsK KwlEVUtfQVNTRVJUKHRoci0+aGVhcC0+ZGJnX3Byb2Nlc3NpbmcgPT0gMCk7CisJdGhyLT5oZWFw LT5kYmdfcHJvY2Vzc2luZyA9IDE7CisKKwkvKiBFbnN1cmUgZGlydHkgc3RhdGUgY2F1c2VzIGEg U3RhdHVzIGV2ZW4gaWYgbmV2ZXIgcHJvY2VzcyBhbnkKKwkgKiBtZXNzYWdlcy4gIFRoaXMgaXMg ZXhwZWN0ZWQgYnkgdGhlIGJ5dGVjb2RlIGV4ZWN1dG9yIHdoZW4gaW4KKwkgKiB0aGUgcnVubmlu ZyBzdGF0ZS4KKwkgKi8KKwlkdWtfX2NoZWNrX3Jlc2VuZF9zdGF0dXModGhyKTsKKworCWZvciAo OzspIHsKKwkJLyogUHJvY2VzcyBtZXNzYWdlcyB1bnRpbCB3ZSdyZSBubyBsb25nZXIgcGF1c2Vk IG9yIHdlIHBlZWsKKwkJICogYW5kIHNlZSB0aGVyZSdzIG5vdGhpbmcgdG8gcmVhZCByaWdodCBu b3cuCisJCSAqLworCQlEVUtfREQoRFVLX0REUFJJTlQoInRvcCBhdCBsb29wIHRvcDogJWxkIiwg KGxvbmcpIGR1a19nZXRfdG9wKHRocikpKTsKKwkJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmRiZ19w cm9jZXNzaW5nID09IDEpOworCisJCXdoaWxlICh0aHItPmhlYXAtPmRiZ19yZWFkX2NiID09IE5V TEwgJiYgdGhyLT5oZWFwLT5kYmdfZGV0YWNoaW5nKSB7CisJCQkvKiBEZXRhY2ggaXMgcGVuZGlu ZzsgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIG91dHNpZGUgdGhlCisJCQkgKiBkZWJ1Z2dlciBsb29w IChlLmcuIFN0YXR1cyBub3RpZnkgd3JpdGUgZXJyb3IpIG9yIGJ5CisJCQkgKiBwcmV2aW91cyBt ZXNzYWdlIGhhbmRsaW5nLiAgQ2FsbCBkZXRhY2hlZCBjYWxsYmFjaworCQkJICogaGVyZSwgaW4g YSBjb250cm9sbGVkIHN0YXRlLCB0byBlbnN1cmUgYSBwb3NzaWJsZQorCQkJICogcmVhdHRhY2gg aW5zaWRlIHRoZSBkZXRhY2hlZF9jYiBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKwkJCSAqCisJCQkg KiBSZWNoZWNrIGZvciBkZXRhY2ggaW4gYSB3aGlsZSBsb29wOiBhbiBpbW1lZGlhdGUKKwkJCSAq IHJlYXR0YWNoIGludm9sdmVzIGEgY2FsbCB0byBkdWtfZGVidWdnZXJfYXR0YWNoKCkKKwkJCSAq IHdoaWNoIHdyaXRlcyBhIGRlYnVnZ2VyIGhhbmRzaGFrZSBsaW5lIGltbWVkaWF0ZWx5CisJCQkg KiBpbnNpZGUgdGhlIEFQSSBjYWxsLiAgSWYgdGhlIHRyYW5zcG9ydCB3cml0ZSBmYWlscworCQkJ ICogZm9yIHRoYXQgaGFuZHNoYWtlLCB3ZSBjYW4gaW1tZWRpYXRlbHkgZW5kIHVwIGluIGEKKwkJ CSAqICJ0cmFuc3BvcnQgYnJva2VuLCBkZXRhY2hpbmciIGNhc2Ugc2V2ZXJhbCB0aW1lcyBoZXJl LgorCQkJICogTG9vcCBiYWNrIHVudGlsIHdlJ3JlIGVpdGhlciBjbGVhbmx5IGF0dGFjaGVkIG9y CisJCQkgKiBmdWxseSBkZXRhY2hlZC4KKwkJCSAqCisJCQkgKiBOT1RFOiBSZXNldCBkYmdfcHJv Y2Vzc2luZyA9IDEgZm9yY2libHksIGluIGNhc2Ugd2UKKwkJCSAqIHJlLWF0dGFjaGVkOyBkdWtf ZGVidWdnZXJfYXR0YWNoKCkgc2V0cyBkYmdfcHJvY2Vzc2luZworCQkJICogdG8gMCBhdCB0aGUg bW9tZW50LgorCQkJICovCisKKwkJCURVS19EKERVS19EUFJJTlQoImRldGFjaCBwZW5kaW5nIChk YmdfcmVhZF9jYiA9PSBOVUxMLCBkYmdfZGV0YWNoaW5nICE9IDApLCBjYWxsIGRldGFjaDIiKSk7 CisKKwkJCWR1a19fZGVidWdfZG9fZGV0YWNoMih0aHItPmhlYXApOworCQkJdGhyLT5oZWFwLT5k YmdfcHJvY2Vzc2luZyA9IDE7ICAvKiBtYXkgYmUgc2V0IHRvIDAgYnkgZHVrX2RlYnVnZ2VyX2F0 dGFjaCgpIGluc2lkZSBjYWxsYmFjayAqLworCisJCQlEVUtfRChEVUtfRFBSSU5UKCJhZnRlciBk ZXRhY2gyIChhbmQgcG9zc2libGUgcmVhdHRhY2gpOiBkYmdfcmVhZF9jYj0lcywgZGJnX2RldGFj aGluZz0lbGQiLAorCQkJICAgICAgICAgICAgICAgICB0aHItPmhlYXAtPmRiZ19yZWFkX2NiID8g Im5vdCBOVUxMIiA6ICJOVUxMIiwgKGxvbmcpIHRoci0+aGVhcC0+ZGJnX2RldGFjaGluZykpOwor CQl9CisJCURVS19BU1NFUlQodGhyLT5oZWFwLT5kYmdfZGV0YWNoaW5nID09IDApOyAgLyogdHJ1 ZSBldmVuIHdpdGggcmVhdHRhY2ggKi8KKwkJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmRiZ19wcm9j ZXNzaW5nID09IDEpOyAgLyogZXZlbiBhZnRlciBhIGRldGFjaCBhbmQgcG9zc2libGUgcmVhdHRh Y2ggKi8KKworCQlpZiAodGhyLT5oZWFwLT5kYmdfcmVhZF9jYiA9PSBOVUxMKSB7CisJCQlEVUtf RChEVUtfRFBSSU5UKCJkZWJ1ZyBjb25uZWN0aW9uIGJyb2tlbiAoYW5kIG5vdCBkZXRhY2hpbmcp LCBzdG9wIHByb2Nlc3NpbmcgbWVzc2FnZXMiKSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgh RFVLX0hFQVBfSEFTX0RFQlVHR0VSX1BBVVNFRCh0aHItPmhlYXApIHx8IG5vX2Jsb2NrKSB7CisJ CQlpZiAoIWR1a19kZWJ1Z19yZWFkX3BlZWsodGhyKSkgeworCQkJCS8qIE5vdGU6IHBlZWsgY2Fu bm90IGN1cnJlbnRseSB0cmlnZ2VyIGEgZGV0YWNoCisJCQkJICogc28gdGhlIGRiZ19kZXRhY2hp bmcgPT0gMCBhc3NlcnQgb3V0c2lkZSB0aGUKKwkJCQkgKiBsb29wIGlzIGNvcnJlY3QuCisJCQkJ ICovCisJCQkJRFVLX0QoRFVLX0RQUklOVCgicHJvY2Vzc2luZyBkZWJ1ZyBtZXNzYWdlLCBwZWVr IGluZGljYXRlZCBubyBkYXRhLCBzdG9wIHByb2Nlc3NpbmcgbWVzc2FnZXMiKSk7CisJCQkJYnJl YWs7CisJCQl9CisJCQlEVUtfRChEVUtfRFBSSU5UKCJwcm9jZXNzaW5nIGRlYnVnIG1lc3NhZ2Us IHBlZWsgaW5kaWNhdGVkIHRoZXJlIGlzIGRhdGEsIGhhbmRsZSBpdCIpKTsKKwkJfSBlbHNlIHsK KwkJCURVS19EKERVS19EUFJJTlQoInBhdXNlZCwgcHJvY2VzcyBkZWJ1ZyBtZXNzYWdlLCBibG9j a2luZyBpZiBuZWNlc3NhcnkiKSk7CisJCX0KKworCQlkdWtfX2NoZWNrX3Jlc2VuZF9zdGF0dXMo dGhyKTsKKwkJZHVrX19kZWJ1Z19wcm9jZXNzX21lc3NhZ2UodGhyKTsKKwkJZHVrX19jaGVja19y ZXNlbmRfc3RhdHVzKHRocik7CisKKwkJcmV0dmFsID0gMTsgIC8qIHByb2Nlc3NlZCBvbmUgb3Ig bW9yZSBtZXNzYWdlcyAqLworCX0KKworCURVS19BU1NFUlQodGhyLT5oZWFwLT5kYmdfZGV0YWNo aW5nID09IDApOworCURVS19BU1NFUlQodGhyLT5oZWFwLT5kYmdfcHJvY2Vzc2luZyA9PSAxKTsK Kwl0aHItPmhlYXAtPmRiZ19wcm9jZXNzaW5nID0gMDsKKworCS8qIEFzIGFuIGluaXRpYWwgaW1w bGVtZW50YXRpb24sIHJlYWQgZmx1c2ggYWZ0ZXIgZXhpdGluZyB0aGUgbWVzc2FnZQorCSAqIGxv b3AuICBJZiB0cmFuc3BvcnQgaXMgYnJva2VuLCB0aGlzIGlzIGEgbm8tb3AgKHdpdGggZGVidWcg bG9ncykuCisJICovCisJZHVrX2RlYnVnX3JlYWRfZmx1c2godGhyKTsgIC8qIHRoaXMgY2Fubm90 IGluaXRpYXRlIGEgZGV0YWNoICovCisJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmRiZ19kZXRhY2hp bmcgPT0gMCk7CisKKwlEVUtfREQoRFVLX0REUFJJTlQoInRvcCBhdCBleGl0OiAlbGQiLCAobG9u ZykgZHVrX2dldF90b3AodGhyKSkpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMp CisJLyogRWFzeSB0byBnZXQgd3JvbmcsIHNvIGFzc2VydCBmb3IgaXQuICovCisJRFVLX0FTU0VS VChlbnRyeV90b3AgPT0gZHVrX2dldF90b3AodGhyKSk7CisjZW5kaWYKKworCXJldHVybiByZXR2 YWw7Cit9CisKKy8qCisgKiAgSGFsdCBleGVjdXRpb24gaGVscGVyCisgKi8KKworLyogSGFsdCBl eGVjdXRpb24gYW5kIGVudGVyIGEgZGVidWdnZXIgbWVzc2FnZSBsb29wIHVudGlsIGV4ZWN1dGlv biBpcyByZXN1bWVkCisgKiBieSB0aGUgY2xpZW50LiAgUEMgZm9yIHRoZSBjdXJyZW50IGFjdGl2 YXRpb24gbWF5IGJlIHRlbXBvcmFyaWx5IGRlY3JlbWVudGVkCisgKiBzbyB0aGF0IHRoZSAiY3Vy cmVudCIgaW5zdHJ1Y3Rpb24gd2lsbCBiZSBzaG93biBieSB0aGUgY2xpZW50LiAgVGhpcyBoZWxw ZXIKKyAqIGlzIGNhbGxhYmxlIGZyb20gYW55d2hlcmUsIGFsc28gb3V0c2lkZSBieXRlY29kZSBl eGVjdXRvci4KKyAqLworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfZGVidWdfaGFsdF9leGVjdXRp b24oZHVrX2h0aHJlYWQgKnRociwgZHVrX2Jvb2xfdCB1c2VfcHJldl9wYykgeworCWR1a19hY3Rp dmF0aW9uICphY3Q7CisJZHVrX2hjb21wZnVuYyAqZnVuOworCWR1a19pbnN0cl90ICpvbGRfcGMg PSBOVUxMOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhl YXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChkdWtfZGVidWdfaXNfYXR0YWNoZWQodGhyLT5oZWFw KSk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmRiZ19wcm9jZXNzaW5nID09IDApOworCURVS19B U1NFUlQoIWR1a19kZWJ1Z19pc19wYXVzZWQodGhyLT5oZWFwKSk7CisKKwlkdWtfZGVidWdfc2V0 X3BhdXNlZCh0aHItPmhlYXApOworCisJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKworCS8q IE5PVEU6IGFjdCBtYXkgYmUgTlVMTCBpZiBhbiBlcnJvciBpcyB0aHJvd24gb3V0c2lkZSBvZiBh bnkgYWN0aXZhdGlvbiwKKwkgKiB3aGljaCBtYXkgaGFwcGVuIGluIHRoZSBjYXNlIG9mLCBlLmcu IHN5bnRheCBlcnJvcnMuCisJICovCisKKwkvKiBEZWNyZW1lbnQgUEMgaWYgdGhhdCB3YXMgcmVx dWVzdGVkLCB0aGlzIHJlcXVpcmVzIGEgUEMgc3luYy4gKi8KKwlpZiAoYWN0ICE9IE5VTEwpIHsK KwkJZHVrX2h0aHJlYWRfc3luY19jdXJycGModGhyKTsKKwkJb2xkX3BjID0gYWN0LT5jdXJyX3Bj OworCQlmdW4gPSAoZHVrX2hjb21wZnVuYyAqKSBEVUtfQUNUX0dFVF9GVU5DKGFjdCk7CisKKwkJ LyogU2hvcnQgY2lyY3VpdCBpZiBpcyBzYWZlOiBpZiBhY3QtPmN1cnJfcGMgIT0gTlVMTCwgJ2Z1 bicgaXMKKwkJICogZ3VhcmFudGVlZCB0byBiZSBhIG5vbi1OVUxMIEVDTUFTY3JpcHQgZnVuY3Rp b24uCisJCSAqLworCQlEVUtfQVNTRVJUKGFjdC0+Y3Vycl9wYyA9PSBOVUxMIHx8CisJCSAgICAg ICAgICAgKGZ1biAhPSBOVUxMICYmIERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKChkdWtfaG9iamVj dCAqKSBmdW4pKSk7CisJCWlmICh1c2VfcHJldl9wYyAmJgorCQkgICAgYWN0LT5jdXJyX3BjICE9 IE5VTEwgJiYKKwkJICAgIGFjdC0+Y3Vycl9wYyA+IERVS19IQ09NUEZVTkNfR0VUX0NPREVfQkFT RSh0aHItPmhlYXAsIGZ1bikpIHsKKwkJCWFjdC0+Y3Vycl9wYy0tOworCQl9CisJfQorCisJLyog UHJvY2VzcyBkZWJ1ZyBtZXNzYWdlcyB1bnRpbCB3ZSBhcmUgbm8gbG9uZ2VyIHBhdXNlZC4gKi8K KworCS8qIE5PVEU6IFRoaXMgaXMgYSBiaXQgZnJhZ2lsZS4gIEl0J3MgaW1wb3J0YW50IHRvIGVu c3VyZSB0aGF0CisJICogZHVrX2RlYnVnX3Byb2Nlc3NfbWVzc2FnZXMoKSBuZXZlciB0aHJvd3Mg YW4gZXJyb3Igb3IKKwkgKiBhY3QtPmN1cnJfcGMgd2lsbCBuZXZlciBiZSByZXNldC4KKwkgKi8K KworCXRoci0+aGVhcC0+ZGJnX3N0YXRlX2RpcnR5ID0gMTsKKwl3aGlsZSAoRFVLX0hFQVBfSEFT X0RFQlVHR0VSX1BBVVNFRCh0aHItPmhlYXApKSB7CisJCURVS19BU1NFUlQoZHVrX2RlYnVnX2lz X2F0dGFjaGVkKHRoci0+aGVhcCkpOworCQlEVUtfQVNTRVJUKHRoci0+aGVhcC0+ZGJnX3Byb2Nl c3NpbmcgPT0gMCk7CisJCWR1a19kZWJ1Z19wcm9jZXNzX21lc3NhZ2VzKHRociwgMCAvKm5vX2Js b2NrKi8pOworCX0KKworCS8qIFhYWDogRGVjcmVtZW50aW5nIGFuZCByZXN0b3JpbmcgYWN0LT5j dXJyX3BjIHdvcmtzIG5vdywgYnV0IGlmIHRoZQorCSAqIGRlYnVnZ2VyIG1lc3NhZ2UgbG9vcCBn YWlucyB0aGUgYWJpbGl0eSB0byBhZGp1c3QgdGhlIGN1cnJlbnQgUEMKKwkgKiAoZS5nLiBhIGZv cmNlZCBqdW1wKSByZXN0b3JpbmcgdGhlIFBDIGhlcmUgd2lsbCBicmVhay4gIEFub3RoZXIKKwkg KiBhcHByb2FjaCB3b3VsZCBiZSB0byB1c2UgYSBzdGF0ZSBmbGFnIGZvciB0aGUgImRlY3JlbWVu dCAxIGZyb20KKwkgKiB0b3Btb3N0IGFjdGl2YXRpb24ncyBQQyIgYW5kIHRha2UgaXQgaW50byBh Y2NvdW50IHdoZW5ldmVyIGRlYWxpbmcKKwkgKiB3aXRoIFBDIHZhbHVlcy4KKwkgKi8KKwlpZiAo YWN0ICE9IE5VTEwpIHsKKwkJYWN0LT5jdXJyX3BjID0gb2xkX3BjOyAgLyogcmVzdG9yZSBQQyAq LworCX0KK30KKworLyoKKyAqICBCcmVha3BvaW50IG1hbmFnZW1lbnQKKyAqLworCitEVUtfSU5U RVJOQUwgZHVrX3NtYWxsX2ludF90IGR1a19kZWJ1Z19hZGRfYnJlYWtwb2ludChkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaHN0cmluZyAqZmlsZW5hbWUsIGR1a191aW50MzJfdCBsaW5lKSB7CisJZHVr X2hlYXAgKmhlYXA7CisJZHVrX2JyZWFrcG9pbnQgKmI7CisKKwkvKiBDYWxsZXIgbXVzdCB0cmln Z2VyIHJlY29tcHV0YXRpb24gb2YgYWN0aXZlIGJyZWFrcG9pbnQgbGlzdC4gIFRvCisJICogZW5z dXJlIHN0YWxlIHZhbHVlcyBhcmUgbm90IHVzZWQgaWYgdGhhdCBkb2Vzbid0IGhhcHBlbiwgY2xl YXIgdGhlCisJICogYWN0aXZlIGJyZWFrcG9pbnQgbGlzdCBoZXJlLgorCSAqLworCisJRFVLX0FT U0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChmaWxlbmFtZSAhPSBOVUxMKTsKKwloZWFw ID0gdGhyLT5oZWFwOworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKworCWlmIChoZWFwLT5k YmdfYnJlYWtwb2ludF9jb3VudCA+PSBEVUtfSEVBUF9NQVhfQlJFQUtQT0lOVFMpIHsKKwkJRFVL X0QoRFVLX0RQUklOVCgiZmFpbGVkIHRvIGFkZCBicmVha3BvaW50IGZvciAlTzolbGQsIGFsbCBi cmVha3BvaW50IHNsb3RzIHVzZWQiLAorCQkgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAq KSBmaWxlbmFtZSwgKGxvbmcpIGxpbmUpKTsKKwkJcmV0dXJuIC0xOworCX0KKwloZWFwLT5kYmdf YnJlYWtwb2ludHNfYWN0aXZlWzBdID0gKGR1a19icmVha3BvaW50ICopIE5VTEw7CisJYiA9IGhl YXAtPmRiZ19icmVha3BvaW50cyArIChoZWFwLT5kYmdfYnJlYWtwb2ludF9jb3VudCsrKTsKKwli LT5maWxlbmFtZSA9IGZpbGVuYW1lOworCWItPmxpbmUgPSBsaW5lOworCURVS19IU1RSSU5HX0lO Q1JFRih0aHIsIGZpbGVuYW1lKTsKKworCXJldHVybiAoZHVrX3NtYWxsX2ludF90KSAoaGVhcC0+ ZGJnX2JyZWFrcG9pbnRfY291bnQgLSAxKTsgIC8qIGluZGV4ICovCit9CisKK0RVS19JTlRFUk5B TCBkdWtfYm9vbF90IGR1a19kZWJ1Z19yZW1vdmVfYnJlYWtwb2ludChkdWtfaHRocmVhZCAqdGhy LCBkdWtfc21hbGxfdWludF90IGJyZWFrcG9pbnRfaW5kZXgpIHsKKwlkdWtfaGVhcCAqaGVhcDsK KwlkdWtfaHN0cmluZyAqaDsKKwlkdWtfYnJlYWtwb2ludCAqYjsKKwlkdWtfc2l6ZV90IG1vdmVf c2l6ZTsKKworCS8qIENhbGxlciBtdXN0IHRyaWdnZXIgcmVjb21wdXRhdGlvbiBvZiBhY3RpdmUg YnJlYWtwb2ludCBsaXN0LiAgVG8KKwkgKiBlbnN1cmUgc3RhbGUgdmFsdWVzIGFyZSBub3QgdXNl ZCBpZiB0aGF0IGRvZXNuJ3QgaGFwcGVuLCBjbGVhciB0aGUKKwkgKiBhY3RpdmUgYnJlYWtwb2lu dCBsaXN0IGhlcmUuCisJICovCisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwloZWFwID0g dGhyLT5oZWFwOworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGR1a19k ZWJ1Z19pc19hdHRhY2hlZCh0aHItPmhlYXApKTsKKwlEVUtfQVNTRVJUX0RJU0FCTEUoYnJlYWtw b2ludF9pbmRleCA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisKKwlpZiAoYnJlYWtwb2ludF9pbmRl eCA+PSBoZWFwLT5kYmdfYnJlYWtwb2ludF9jb3VudCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJp bnZhbGlkIGJyZWFrcG9pbnQgaW5kZXg6ICVsZCIsIChsb25nKSBicmVha3BvaW50X2luZGV4KSk7 CisJCXJldHVybiAwOworCX0KKwliID0gaGVhcC0+ZGJnX2JyZWFrcG9pbnRzICsgYnJlYWtwb2lu dF9pbmRleDsKKworCWggPSBiLT5maWxlbmFtZTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisK Kwltb3ZlX3NpemUgPSBzaXplb2YoZHVrX2JyZWFrcG9pbnQpICogKGhlYXAtPmRiZ19icmVha3Bv aW50X2NvdW50IC0gYnJlYWtwb2ludF9pbmRleCAtIDEpOworCWR1a19tZW1tb3ZlKCh2b2lkICop IGIsCisJICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgKGIgKyAxKSwKKwkgICAgICAgICAgICAo c2l6ZV90KSBtb3ZlX3NpemUpOworCisJaGVhcC0+ZGJnX2JyZWFrcG9pbnRfY291bnQtLTsKKwlo ZWFwLT5kYmdfYnJlYWtwb2ludHNfYWN0aXZlWzBdID0gKGR1a19icmVha3BvaW50ICopIE5VTEw7 CisKKwlEVUtfSFNUUklOR19ERUNSRUYodGhyLCBoKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCURV S19VTlJFRihoKTsgIC8qIHcvbyByZWZjb3VudGluZyAqLworCisJLyogQnJlYWtwb2ludCBlbnRy aWVzIGFib3ZlIHRoZSB1c2VkIGFyZWEgYXJlIGxlZnQgYXMgZ2FyYmFnZS4gKi8KKworCXJldHVy biAxOworfQorCisvKgorICogIE1pc2Mgc3RhdGUgbWFuYWdlbWVudAorICovCisKK0RVS19JTlRF Uk5BTCBkdWtfYm9vbF90IGR1a19kZWJ1Z19pc19hdHRhY2hlZChkdWtfaGVhcCAqaGVhcCkgewor CXJldHVybiAoaGVhcC0+ZGJnX3JlYWRfY2IgIT0gTlVMTCk7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfYm9vbF90IGR1a19kZWJ1Z19pc19wYXVzZWQoZHVrX2hlYXAgKmhlYXApIHsKKwlyZXR1cm4g KERVS19IRUFQX0hBU19ERUJVR0dFUl9QQVVTRUQoaGVhcCkgIT0gMCk7Cit9CisKK0RVS19JTlRF Uk5BTCB2b2lkIGR1a19kZWJ1Z19zZXRfcGF1c2VkKGR1a19oZWFwICpoZWFwKSB7CisJaWYgKGR1 a19kZWJ1Z19pc19wYXVzZWQoaGVhcCkpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgidHJ5aW5nIHRv IHNldCBwYXVzZWQgc3RhdGUgd2hlbiBhbHJlYWR5IHBhdXNlZCwgaWdub3JpbmciKSk7CisJfSBl bHNlIHsKKwkJRFVLX0hFQVBfU0VUX0RFQlVHR0VSX1BBVVNFRChoZWFwKTsKKwkJaGVhcC0+ZGJn X3N0YXRlX2RpcnR5ID0gMTsKKwkJZHVrX2RlYnVnX2NsZWFyX3BhdXNlX3N0YXRlKGhlYXApOwor CQlEVUtfQVNTRVJUKGhlYXAtPm1zX3J1bm5pbmcgPT0gMCk7ICAvKiBkZWJ1Z2dlciBjYW4ndCBi ZSB0cmlnZ2VyZWQgd2l0aGluIG1hcmstYW5kLXN3ZWVwICovCisJCWhlYXAtPm1zX3J1bm5pbmcg PSAxOyAgLyogcHJldmVudCBtYXJrLWFuZC1zd2VlcCwgcHJldmVudCByZWZ6ZXJvIHF1ZXVlaW5n ICovCisJCWhlYXAtPm1zX3ByZXZlbnRfY291bnQrKzsKKwkJRFVLX0FTU0VSVChoZWFwLT5tc19w cmV2ZW50X2NvdW50ICE9IDApOyAgLyogV3JhcC4gKi8KKwkJRFVLX0FTU0VSVChoZWFwLT5oZWFw X3RocmVhZCAhPSBOVUxMKTsKKwl9Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19kZWJ1Z19j bGVhcl9wYXVzZWQoZHVrX2hlYXAgKmhlYXApIHsKKwlpZiAoZHVrX2RlYnVnX2lzX3BhdXNlZCho ZWFwKSkgeworCQlEVUtfSEVBUF9DTEVBUl9ERUJVR0dFUl9QQVVTRUQoaGVhcCk7CisJCWhlYXAt PmRiZ19zdGF0ZV9kaXJ0eSA9IDE7CisJCWR1a19kZWJ1Z19jbGVhcl9wYXVzZV9zdGF0ZShoZWFw KTsKKwkJRFVLX0FTU0VSVChoZWFwLT5tc19ydW5uaW5nID09IDEpOworCQlEVUtfQVNTRVJUKGhl YXAtPm1zX3ByZXZlbnRfY291bnQgPiAwKTsKKwkJaGVhcC0+bXNfcHJldmVudF9jb3VudC0tOwor CQloZWFwLT5tc19ydW5uaW5nID0gMDsKKwkJRFVLX0FTU0VSVChoZWFwLT5oZWFwX3RocmVhZCAh PSBOVUxMKTsKKwl9IGVsc2UgeworCQlEVUtfRChEVUtfRFBSSU5UKCJ0cnlpbmcgdG8gY2xlYXIg cGF1c2VkIHN0YXRlIHdoZW4gbm90IHBhdXNlZCwgaWdub3JpbmciKSk7CisJfQorfQorCitEVUtf SU5URVJOQUwgdm9pZCBkdWtfZGVidWdfY2xlYXJfcGF1c2Vfc3RhdGUoZHVrX2hlYXAgKmhlYXAp IHsKKwloZWFwLT5kYmdfcGF1c2VfZmxhZ3MgPSAwOworCWhlYXAtPmRiZ19wYXVzZV9hY3QgPSBO VUxMOworCWhlYXAtPmRiZ19wYXVzZV9zdGFydGxpbmUgPSAwOworfQorCisjZWxzZSAgLyogRFVL X1VTRV9ERUJVR0dFUl9TVVBQT1JUICovCisKKy8qIE5vIGRlYnVnZ2VyIHN1cHBvcnQuICovCisK KyNlbmRpZiAgLyogRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUICovCisKKy8qIGF1dG9tYXRpYyB1 bmRlZnMgKi8KKyN1bmRlZiBEVUtfX0RCR19UUE9SVF9FTlRFUgorI3VuZGVmIERVS19fREJHX1RQ T1JUX0VYSVQKKyN1bmRlZiBEVUtfX1NFVF9DT05OX0JST0tFTgorLyoKKyAqICBBdWdtZW50aW5n IGVycm9ycyBhdCB0aGVpciBjcmVhdGlvbiBzaXRlIGFuZCB0aGVpciB0aHJvdyBzaXRlLgorICoK KyAqICBXaGVuIGVycm9ycyBhcmUgY3JlYXRlZCwgdHJhY2ViYWNrIGRhdGEgaXMgYWRkZWQgYnkg YnVpbHQtaW4gY29kZQorICogIGFuZCBhIHVzZXIgZXJyb3IgaGFuZGxlciAoaWYgZGVmaW5lZCkg Y2FuIHByb2Nlc3Mgb3IgcmVwbGFjZSB0aGUKKyAqICBlcnJvci4gIFNpbWlsYXJseSwgd2hlbiBl cnJvcnMgYXJlIHRocm93biwgYSB1c2VyIGVycm9yIGhhbmRsZXIKKyAqICAoaWYgZGVmaW5lZCkg Y2FuIHByb2Nlc3Mgb3IgcmVwbGFjZSB0aGUgZXJyb3IuCisgKgorICogIEF1Z21lbnRhdGlvbiBh bmQgb3RoZXIgcHJvY2Vzc2luZyBhdCBlcnJvciBjcmVhdGlvbiB0aW1lIGlzIG5pY2UKKyAqICBi ZWNhdXNlIGFuIGVycm9yIGlzIG9ubHkgY3JlYXRlZCBvbmNlLCBidXQgaXQgbWF5IGJlIHRocm93 biBhbmQKKyAqICByZXRocm93biBtdWx0aXBsZSB0aW1lcy4gIFVzZXIgZXJyb3IgaGFuZGxlciBy ZWdpc3RlcmVkIGZvciBwcm9jZXNzaW5nCisgKiAgYW4gZXJyb3IgYXQgaXRzIHRocm93IHNpdGUg bXVzdCBiZSBjYXJlZnVsIHRvIGhhbmRsZSByZXRocm93aW5nIGluCisgKiAgYSB1c2VmdWwgbWFu bmVyLgorICoKKyAqICBFcnJvciBhdWdtZW50YXRpb24gbWF5IHRocm93IGFuIGludGVybmFsIGVy cm9yIChlLmcuIGFsbG9jIGVycm9yKS4KKyAqCisgKiAgRUNNQVNjcmlwdCBhbGxvd3MgdGhyb3dp bmcgYW55IHZhbHVlcywgc28gYWxsIHZhbHVlcyBjYW5ub3QgYmUKKyAqICBhdWdtZW50ZWQuICBD dXJyZW50bHksIHRoZSBidWlsdC1pbiBhdWdtZW50YXRpb24gYXQgZXJyb3IgY3JlYXRpb24KKyAq ICBvbmx5IGF1Z21lbnRzIGVycm9yIHZhbHVlcyB3aGljaCBhcmUgRXJyb3IgaW5zdGFuY2VzICg9 IGhhdmUgdGhlCisgKiAgYnVpbHQtaW4gRXJyb3IucHJvdG90eXBlIGluIHRoZWlyIHByb3RvdHlw ZSBjaGFpbikgYW5kIGFyZSBhbHNvCisgKiAgZXh0ZW5zaWJsZS4gIFVzZXIgZXJyb3IgaGFuZGxl cnMgaGF2ZSBubyBsaW1pdGF0aW9ucyBpbiB0aGlzIHJlc3BlY3QuCisgKi8KKworLyogI2luY2x1 ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgorICogIEhlbHBl ciBmb3IgY2FsbGluZyBhIHVzZXIgZXJyb3IgaGFuZGxlci4KKyAqCisgKiAgJ3RocicgbXVzdCBi ZSB0aGUgY3VycmVudGx5IGFjdGl2ZSB0aHJlYWQ7IHRoZSBlcnJvciBoYW5kbGVyIGlzIGNhbGxl ZAorICogIGluIGl0cyBjb250ZXh0LiAgVGhlIHZhbHN0YWNrIG9mICd0aHInIG11c3QgaGF2ZSB0 aGUgZXJyb3IgdmFsdWUgb24KKyAqICB0b3AsIGFuZCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGFub3Ro ZXIgZXJyb3IgdmFsdWUgYmFzZWQgb24gdGhlIHJldHVybgorICogIHZhbHVlIG9mIHRoZSBlcnJv ciBoYW5kbGVyLgorICoKKyAqICBUaGUgaGVscGVyIGNhbGxzIGR1a19oYW5kbGVfY2FsbCgpIHJl Y3Vyc2l2ZWx5IGluIHByb3RlY3RlZCBtb2RlLgorICogIEJlZm9yZSB0aGF0IGNhbGwgaGFwcGVu cywgbm8gbG9uZ2ptcHMgc2hvdWxkIGhhcHBlbjsgYXMgYSBjb25zZXF1ZW5jZSwKKyAqICB3ZSBt dXN0IGFzc3VtZSB0aGF0IHRoZSB2YWxzdGFjayBjb250YWlucyBlbm91Z2ggdGVtcG9yYXJ5IHNw YWNlIGZvcgorICogIGFyZ3VtZW50cyBhbmQgc3VjaC4KKyAqCisgKiAgV2hpbGUgdGhlIGVycm9y IGhhbmRsZXIgcnVucywgYW55IGVycm9ycyB0aHJvd24gd2lsbCBub3QgdHJpZ2dlciBhCisgKiAg cmVjdXJzaXZlIGVycm9yIGhhbmRsZXIgY2FsbCAodGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBh IGhlYXAgbGV2ZWwKKyAqICBmbGFnIHdoaWNoIHdpbGwgImZvbGxvdyIgdGhyb3VnaCBhbnkgY29y b3V0aW5lcyByZXN1bWVkIGluc2lkZSB0aGUKKyAqICBlcnJvciBoYW5kbGVyKS4gIElmIHRoZSBl cnJvciBoYW5kbGVyIGlzIG5vdCBjYWxsYWJsZSBvciB0aHJvd3MgYW4KKyAqICBlcnJvciwgdGhl IHJlc3VsdGluZyBlcnJvciByZXBsYWNlcyB0aGUgb3JpZ2luYWwgZXJyb3IgKGZvciBEdWt0YXBl CisgKiAgaW50ZXJuYWwgZXJyb3JzLCBkdWtfZXJyb3JfdGhyb3cuYyBmdXJ0aGVyIHN1YnN0aXR1 dGVzIHRoaXMgZXJyb3Igd2l0aAorICogIGEgRG91YmxlRXJyb3Igd2hpY2ggaXMgbm90IGlkZWFs KS4gIFRoaXMgd291bGQgYmUgZWFzeSB0byBjaGFuZ2UgYW5kCisgKiAgZXZlbiBzaWduYWwgdG8g dGhlIGNhbGxlci4KKyAqCisgKiAgVGhlIHVzZXIgZXJyb3IgaGFuZGxlciBpcyBzdG9yZWQgaW4g J0R1a3RhcGUuZXJyQ3JlYXRlJyBvcgorICogICdEdWt0YXBlLmVyclRocm93JyBkZXBlbmRpbmcg b24gd2hldGhlciB3ZSdyZSBhdWdtZW50aW5nIHRoZSBlcnJvciBhdAorICogIGNyZWF0aW9uIG9y IHRocm93IHRpbWUuICBUaGVyZSBhcmUgc2V2ZXJhbCBhbHRlcm5hdGl2ZXMgdG8gdGhpcyBhcHBy b2FjaCwKKyAqICBzZWUgZG9jL2Vycm9yLW9iamVjdHMucnN0IGZvciBkaXNjdXNzaW9uLgorICoK KyAqICBOb3RlOiBzaW5jZSBmdXJ0aGVyIGxvbmdqbXAoKXMgbWF5IG9jY3VyIHdoaWxlIGNhbGxp bmcgdGhlIGVycm9yIGhhbmRsZXIKKyAqICAoZm9yIG1hbnkgcmVhc29ucywgZS5nLiBhIGxhYmVs ZWQgJ2JyZWFrJyBpbnNpZGUgdGhlIGhhbmRsZXIpLCB0aGUKKyAqICBjYWxsZXIgY2FuIG1ha2Ug bm8gYXNzdW1wdGlvbnMgb24gdGhlIHRoci0+aGVhcC0+bGogc3RhdGUgYWZ0ZXIgdGhlCisgKiAg Y2FsbCAodGhpcyBhZmZlY3RzIGVzcGVjaWFsbHkgZHVrX2Vycm9yX3Rocm93LmMpLiAgVGhpcyBp cyBub3QgYW4gaXNzdWUKKyAqICBhcyBsb25nIGFzIHRoZSBjYWxsZXIgd3JpdGVzIHRvIHRoZSBs aiBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBlcnJvciBoYW5kbGVyCisgKiAgZmluaXNoZXMuCisgKi8K KworI2lmIGRlZmluZWQoRFVLX1VTRV9FUlJUSFJPVykgfHwgZGVmaW5lZChEVUtfVVNFX0VSUkNS RUFURSkKK0RVS19MT0NBTCB2b2lkIGR1a19fZXJyX2F1Z21lbnRfdXNlcihkdWtfaHRocmVhZCAq dGhyLCBkdWtfc21hbGxfdWludF90IHN0cmlkeF9jYikgeworCWR1a190dmFsICp0dl9obmQ7CisJ ZHVrX2ludF90IHJjOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0 aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVF9TVFJJRFhfVkFMSUQoc3RyaWR4X2NiKTsK KworCWlmICh0aHItPmhlYXAtPmF1Z21lbnRpbmdfZXJyb3IpIHsKKwkJRFVLX0QoRFVLX0RQUklO VCgicmVjdXJzaXZlIGNhbGwgdG8gZXJyb3IgYXVnbWVudGF0aW9uLCBpZ25vcmUiKSk7CisJCXJl dHVybjsKKwl9CisKKwkvKgorCSAqICBDaGVjayB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFuIGVy cm9yIGhhbmRsZXIuCisJICoKKwkgKiAgV2UgbXVzdCBiZSBjYXJlZnVsIG9mIG5vdCB0cmlnZ2Vy aW5nIGFuIGVycm9yIHdoZW4gbG9va2luZyB1cCB0aGUKKwkgKiAgcHJvcGVydHkuICBGb3IgaW5z dGFuY2UsIGlmIHRoZSBwcm9wZXJ0eSBpcyBhIGdldHRlciwgd2UgZG9uJ3Qgd2FudAorCSAqICB0 byBjYWxsIGl0LCBvbmx5IHBsYWluIHZhbHVlcyBhcmUgYWxsb3dlZC4gIFRoZSB2YWx1ZSwgaWYg aXQgZXhpc3RzLAorCSAqICBpcyBub3QgY2hlY2tlZC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgYSBm dW5jdGlvbiwgYSBUeXBlRXJyb3IgaGFwcGVucworCSAqICB3aGVuIGl0IGlzIGNhbGxlZCBhbmQg dGhhdCBlcnJvciByZXBsYWNlcyB0aGUgb3JpZ2luYWwgb25lLgorCSAqLworCisJRFVLX0FTU0VS VF9WQUxTVEFDS19TUEFDRSh0aHIsIDQpOyAgLyogMyBlbnRyaWVzIGFjdHVhbGx5IG5lZWRlZCBi ZWxvdyAqLworCisJLyogWyAuLi4gZXJydmFsIF0gKi8KKworCWlmICh0aHItPmJ1aWx0aW5zW0RV S19CSURYX0RVS1RBUEVdID09IE5VTEwpIHsKKwkJLyogV2hlbiBjcmVhdGluZyBidWlsdC1pbnMs IHNvbWUgb2YgdGhlIGJ1aWx0LWlucyBtYXkgbm90IGJlIHNldAorCQkgKiBhbmQgd2Ugd2FudCB0 byB0b2xlcmF0ZSB0aGF0IHdoZW4gdGhyb3dpbmcgZXJyb3JzLgorCQkgKi8KKwkJRFVLX0REKERV S19ERFBSSU5UKCJlcnJvciBvY2N1cnJlZCB3aGVuIERVS19CSURYX0RVS1RBUEUgaXMgTlVMTCwg aWdub3JpbmciKSk7CisJCXJldHVybjsKKwl9CisJdHZfaG5kID0gZHVrX2hvYmplY3RfZmluZF9l eGlzdGluZ19lbnRyeV90dmFsX3B0cih0aHItPmhlYXAsCisJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0RVS1RB UEVdLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFVLX0hUSFJFQURfR0VUX1NUUklORyh0aHIsIHN0cmlkeF9jYikpOworCWlmICh0dl9obmQgPT0g TlVMTCkgeworCQlEVUtfREQoRFVLX0REUFJJTlQoImVycm9yIGhhbmRsZXIgZG9lcyBub3QgZXhp c3Qgb3IgaXMgbm90IGEgcGxhaW4gdmFsdWU6ICUhVCIsCisJCSAgICAgICAgICAgICAgICAgICAo ZHVrX3R2YWwgKikgdHZfaG5kKSk7CisJCXJldHVybjsKKwl9CisJRFVLX0RERChEVUtfREREUFJJ TlQoImVycm9yIGhhbmRsZXIgZHVtcCAoY2FsbGFiaWxpdHkgbm90IGNoZWNrZWQpOiAlIVQiLAor CSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSB0dl9obmQpKTsKKwlkdWtfcHVzaF90 dmFsKHRociwgdHZfaG5kKTsKKworCS8qIFsgLi4uIGVycnZhbCBlcnJoYW5kbGVyIF0gKi8KKwor CWR1a19pbnNlcnQodGhyLCAtMik7ICAvKiAtPiBbIC4uLiBlcnJoYW5kbGVyIGVycnZhbCBdICov CisJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7CisJZHVrX2luc2VydCh0aHIsIC0yKTsgIC8qIC0+ IFsgLi4uIGVycmhhbmRsZXIgdW5kZWZpbmVkKD0gdGhpcykgZXJydmFsIF0gKi8KKworCS8qIFsg Li4uIGVycmhhbmRsZXIgdW5kZWZpbmVkIGVycnZhbCBdICovCisKKwkvKgorCSAqICBoZWFwLT5h dWdtZW50aW5nX2Vycm9yIHByZXZlbnRzIHJlY3Vyc2l2ZSByZS1lbnRyeSBhbmQgYWxzbyBjYXVz ZXMKKwkgKiAgY2FsbCBoYW5kbGluZyB0byB1c2UgYSBsYXJnZXIgKGJ1dCBub3QgdW5ib3VuZGVk KSBjYWxsIHN0YWNrIGxpbWl0CisJICogIGZvciB0aGUgZHVyYXRpb24gb2YgZXJyb3IgYXVnbWVu dGF0aW9uLgorCSAqCisJICogIFdlIGlnbm9yZSBlcnJvcnMgbm93OiBhIHN1Y2Nlc3MgcmV0dXJu IGFuZCBhbiBlcnJvciB2YWx1ZSBib3RoCisJICogIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGVycm9y IHZhbHVlLiAgKFRoaXMgd291bGQgYmUgZWFzeSB0byBjaGFuZ2UuKQorCSAqLworCisJRFVLX0FT U0VSVCh0aHItPmhlYXAtPmF1Z21lbnRpbmdfZXJyb3IgPT0gMCk7CisJdGhyLT5oZWFwLT5hdWdt ZW50aW5nX2Vycm9yID0gMTsKKworCXJjID0gZHVrX3BjYWxsX21ldGhvZCh0aHIsIDEpOworCURV S19VTlJFRihyYyk7ICAvKiBubyBuZWVkIHRvIGNoZWNrIG5vdzogYm90aCBzdWNjZXNzIGFuZCBl cnJvciBhcmUgT0sgKi8KKworCURVS19BU1NFUlQodGhyLT5oZWFwLT5hdWdtZW50aW5nX2Vycm9y ID09IDEpOworCXRoci0+aGVhcC0+YXVnbWVudGluZ19lcnJvciA9IDA7CisKKwkvKiBbIC4uLiBl cnJ2YWwgXSAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX0VSUlRIUk9XIHx8IERVS19VU0VfRVJS Q1JFQVRFICovCisKKy8qCisgKiAgQWRkIC5fVHJhY2VkYXRhIHRvIGFuIGVycm9yIG9uIHRoZSBz dGFjayB0b3AuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9UUkFDRUJBQ0tTKQorRFVLX0xP Q0FMIHZvaWQgZHVrX19hZGRfdHJhY2ViYWNrKGR1a19odGhyZWFkICp0aHIsIGR1a19odGhyZWFk ICp0aHJfY2FsbHN0YWNrLCBjb25zdCBjaGFyICpjX2ZpbGVuYW1lLCBkdWtfaW50X3QgY19saW5l LCBkdWtfc21hbGxfdWludF90IGZsYWdzKSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtf aW50X3QgZGVwdGg7CisJZHVrX2ludF90IGFycl9zaXplOworCWR1a190dmFsICp0djsKKwlkdWtf aHN0cmluZyAqczsKKwlkdWtfdWludDMyX3QgdTMyOworCWR1a19kb3VibGVfdCBkOworCisJRFVL X0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHJfY2FsbHN0YWNrICE9IE5VTEwp OworCisJLyogWyAuLi4gZXJyb3IgXSAqLworCisJLyoKKwkgKiAgVGhlIHRyYWNlYmFjayBmb3Jt YXQgaXMgcHJldHR5IGFyY2FuZSBpbiBhbiBhdHRlbXB0IHRvIGtlZXAgaXQgY29tcGFjdAorCSAq ICBhbmQgY2hlYXAgdG8gY3JlYXRlLiAgSXQgbWF5IGNoYW5nZSBhcmJpdHJhcmlseSBmcm9tIHZl cnNpb24gdG8gdmVyc2lvbi4KKwkgKiAgSXQgc2hvdWxkIGJlIGRlY29kZWQvYWNjZXNzZWQgdGhy b3VnaCB2ZXJzaW9uIHNwZWNpZmljIGFjY2Vzc29ycyBvbmx5LgorCSAqCisJICogIFNlZSBkb2Mv ZXJyb3Itb2JqZWN0cy5yc3QuCisJICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiYWRkaW5n IHRyYWNlYmFjayB0byBvYmplY3Q6ICUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190 dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCisJLyogUHJlYWxsb2NhdGUgYXJyYXkg dG8gY29ycmVjdCBzaXplLCBzbyB0aGF0IHdlIGNhbiBqdXN0IHdyaXRlIG91dAorCSAqIHRoZSBf VHJhY2VkYXRhIHZhbHVlcyBpbnRvIHRoZSBhcnJheSBwYXJ0LgorCSAqLworCWFjdCA9IHRoci0+ Y2FsbHN0YWNrX2N1cnI7CisJZGVwdGggPSBEVUtfVVNFX1RSQUNFQkFDS19ERVBUSDsKKwlEVUtf QVNTRVJUKHRocl9jYWxsc3RhY2stPmNhbGxzdGFja190b3AgPD0gRFVLX0lOVF9NQVgpOyAgLyog Y2FsbHN0YWNrIGxpbWl0cyAqLworCWlmIChkZXB0aCA+IChkdWtfaW50X3QpIHRocl9jYWxsc3Rh Y2stPmNhbGxzdGFja190b3ApIHsKKwkJZGVwdGggPSAoZHVrX2ludF90KSB0aHJfY2FsbHN0YWNr LT5jYWxsc3RhY2tfdG9wOworCX0KKwlpZiAoZGVwdGggPiAwKSB7CisJCWlmIChmbGFncyAmIERV S19BVUdNRU5UX0ZMQUdfU0tJUF9PTkUpIHsKKwkJCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOwor CQkJYWN0ID0gYWN0LT5wYXJlbnQ7CisJCQlkZXB0aC0tOworCQl9CisJfQorCWFycl9zaXplID0g ZGVwdGggKiAyOworCWlmICh0aHItPmNvbXBpbGVfY3R4ICE9IE5VTEwgJiYgdGhyLT5jb21waWxl X2N0eC0+aF9maWxlbmFtZSAhPSBOVUxMKSB7CisJCWFycl9zaXplICs9IDI7CisJfQorCWlmIChj X2ZpbGVuYW1lKSB7CisJCS8qIFdlIG5lZWQgdGhlIEMgZmlsZW5hbWUgdG8gYmUgaW50ZXJuZWQg YmVmb3JlIGdldHRpbmcgdGhlCisJCSAqIGFycmF5IHBhcnQgcG9pbnRlciB0byBhdm9pZCBhbnkg R0MgaW50ZXJmZXJlbmNlIHdoaWxlIHRoZQorCQkgKiBhcnJheSBwYXJ0IGlzIHBvcHVsYXRlZC4K KwkJICovCisJCWR1a19wdXNoX3N0cmluZyh0aHIsIGNfZmlsZW5hbWUpOworCQlhcnJfc2l6ZSAr PSAyOworCX0KKworCS8qIFhYWDogdW5pbml0aWFsaXplZCB3b3VsZCBiZSBPSyAqLworCURVS19E KERVS19EUFJJTlQoInByZWFsbG9jYXRlZCBfVHJhY2VkYXRhIHRvICVsZCBpdGVtcyIsIChsb25n KSBhcnJfc2l6ZSkpOworCXR2ID0gZHVrX3B1c2hfaGFycmF5X3dpdGhfc2l6ZV9vdXRwdHIodGhy LCAoZHVrX3VpbnQzMl90KSBhcnJfc2l6ZSk7CisJRFVLX0FTU0VSVChhcnJfc2l6ZSA9PSAwIHx8 IHR2ICE9IE5VTEwpOworCisJLyogQ29tcGlsZXIgU3ludGF4RXJyb3JzIChhbmQgb3RoZXIgZXJy b3JzKSBjb21lIGZpcnN0LCBhbmQgYXJlCisJICogYmxhbWVkIGJ5IGRlZmF1bHQgKG5vdCBmbGFn Z2VkICJub2JsYW1lIikuCisJICovCisJaWYgKHRoci0+Y29tcGlsZV9jdHggIT0gTlVMTCAmJiB0 aHItPmNvbXBpbGVfY3R4LT5oX2ZpbGVuYW1lICE9IE5VTEwpIHsKKwkJcyA9IHRoci0+Y29tcGls ZV9jdHgtPmhfZmlsZW5hbWU7CisJCURVS19UVkFMX1NFVF9TVFJJTkcodHYsIHMpOworCQlEVUtf SFNUUklOR19JTkNSRUYodGhyLCBzKTsKKwkJdHYrKzsKKworCQl1MzIgPSAoZHVrX3VpbnQzMl90 KSB0aHItPmNvbXBpbGVfY3R4LT5jdXJyX3Rva2VuLnN0YXJ0X2xpbmU7ICAvKiAoZmxhZ3M8PDMy KSArIChsaW5lKSwgZmxhZ3MgPSAwICovCisJCURVS19UVkFMX1NFVF9VMzIodHYsIHUzMik7CisJ CXR2Kys7CisJfQorCisJLyogRmlsZW5hbWUvbGluZSBmcm9tIEMgbWFjcm9zIChfX0ZJTEVfXywg X19MSU5FX18pIGFyZSBhZGRlZCBhcyBhbgorCSAqIGVudHJ5IHdpdGggYSBzcGVjaWFsIGZvcm1h dDogKHN0cmluZywgbnVtYmVyKS4gIFRoZSBudW1iZXIgY29udGFpbnMKKwkgKiB0aGUgbGluZSBh bmQgZmxhZ3MuCisJICovCisKKwkvKiBbIC4uLiBlcnJvciBjX2ZpbGVuYW1lPyBhcnIgXSAqLwor CisJaWYgKGNfZmlsZW5hbWUpIHsKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19TVFJJTkcodGhy LT52YWxzdGFja190b3AgLSAyKSk7CisJCXMgPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHRoci0+dmFs c3RhY2tfdG9wIC0gMik7ICAvKiBpbnRlcm5lZCBjX2ZpbGVuYW1lICovCisJCURVS19BU1NFUlQo cyAhPSBOVUxMKTsKKwkJRFVLX1RWQUxfU0VUX1NUUklORyh0diwgcyk7CisJCURVS19IU1RSSU5H X0lOQ1JFRih0aHIsIHMpOworCQl0disrOworCisJCWQgPSAoKGZsYWdzICYgRFVLX0FVR01FTlRf RkxBR19OT0JMQU1FX0ZJTEVMSU5FKSA/ICgoZHVrX2RvdWJsZV90KSBEVUtfVEJfRkxBR19OT0JM QU1FX0ZJTEVMSU5FKSAqIERVS19ET1VCTEVfMlRPMzIgOiAwLjApICsKKwkJICAgIChkdWtfZG91 YmxlX3QpIGNfbGluZTsKKwkJRFVLX1RWQUxfU0VUX0RPVUJMRSh0diwgZCk7CisJCXR2Kys7CisJ fQorCisJLyogVHJhY2ViYWNrIGRlcHRoIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGZp bGVuYW1lL2xpbmUKKwkgKiBzcGVjaWFsIGhhbmRsaW5nIGFib3ZlIChpbnRlbnRpb25hbCkuCisJ ICovCisJZm9yICg7IGRlcHRoLS0gPiAwOyBhY3QgPSBhY3QtPnBhcmVudCkgeworCQlkdWtfdWlu dDMyX3QgcGM7CisJCWR1a190dmFsICp0dl9zcmM7CisKKwkJLyogWy4uLiBhcnJdICovCisKKwkJ RFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7ICAvKiBkZXB0aCBjaGVjayBhYm92ZSwgYXNzdW1lcyBi b29rLWtlZXBpbmcgaXMgY29ycmVjdCAqLworCQlEVUtfQVNTRVJUX0RJU0FCTEUoYWN0LT5wYyA+ PSAwKTsgIC8qIHVuc2lnbmVkICovCisKKwkJLyogQWRkIGZ1bmN0aW9uIG9iamVjdC4gKi8KKwkJ dHZfc3JjID0gJmFjdC0+dHZfZnVuYzsgIC8qIG9iamVjdCAoZnVuY3Rpb24pIG9yIGxpZ2h0ZnVu YyAqLworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX09CSkVDVCh0dl9zcmMpIHx8IERVS19UVkFM X0lTX0xJR0hURlVOQyh0dl9zcmMpKTsKKwkJRFVLX1RWQUxfU0VUX1RWQUwodHYsIHR2X3NyYyk7 CisJCURVS19UVkFMX0lOQ1JFRih0aHIsIHR2KTsKKwkJdHYrKzsKKworCQkvKiBBZGQgYSBudW1i ZXIgY29udGFpbmluZzogcGMsIGFjdGl2YXRpb24gZmxhZ3MuCisJCSAqCisJCSAqIFBDIHBvaW50 cyB0byBuZXh0IGluc3RydWN0aW9uLCBmaW5kIG9mZmVuZGluZyBQQy4gIE5vdGUgdGhhdAorCQkg KiBQQyA9PSAwIGZvciBuYXRpdmUgY29kZS4KKwkJICovCisJCXBjID0gKGR1a191aW50MzJfdCkg ZHVrX2h0aHJlYWRfZ2V0X2FjdF9wcmV2X3BjKHRocl9jYWxsc3RhY2ssIGFjdCk7CisJCURVS19B U1NFUlRfRElTQUJMRShwYyA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJCURVS19BU1NFUlQoKGR1 a19kb3VibGVfdCkgcGMgPCBEVUtfRE9VQkxFXzJUTzMyKTsgIC8qIGFzc3VtZSBQQyBpcyBhdCBt b3N0IDMyIGJpdHMgYW5kIG5vbi1uZWdhdGl2ZSAqLworCQlkID0gKChkdWtfZG91YmxlX3QpIGFj dC0+ZmxhZ3MpICogRFVLX0RPVUJMRV8yVE8zMiArIChkdWtfZG91YmxlX3QpIHBjOworCQlEVUtf VFZBTF9TRVRfRE9VQkxFKHR2LCBkKTsKKwkJdHYrKzsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19V U0VfQVNTRVJUSU9OUykKKwl7CisJCWR1a19oYXJyYXkgKmE7CisJCWEgPSAoZHVrX2hhcnJheSAq KSBkdWtfa25vd25faG9iamVjdCh0aHIsIC0xKTsKKwkJRFVLX0FTU0VSVChhICE9IE5VTEwpOwor CQlEVUtfQVNTRVJUKChkdWtfdWludDMyX3QpICh0diAtIERVS19IT0JKRUNUX0FfR0VUX0JBU0Uo dGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgYSkpID09IGEtPmxlbmd0aCk7CisJCURVS19BU1NF UlQoYS0+bGVuZ3RoID09IChkdWtfdWludDMyX3QpIGFycl9zaXplKTsKKwl9CisjZW5kaWYKKwor CS8qIFsgLi4uIGVycm9yIGNfZmlsZW5hbWU/IGFyciBdICovCisKKwlpZiAoY19maWxlbmFtZSkg eworCQlkdWtfcmVtb3ZlX20yKHRocik7CisJfQorCisJLyogWyAuLi4gZXJyb3IgYXJyIF0gKi8K KworCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0X3dlYyh0aHIsIC0yLCBEVUtfU1RSSURYX0lO VF9UUkFDRURBVEEpOyAgLyogLT4gWyAuLi4gZXJyb3IgXSAqLworfQorI2VuZGlmICAvKiBEVUtf VVNFX1RSQUNFQkFDS1MgKi8KKworLyoKKyAqICBBZGQgLmZpbGVOYW1lIGFuZCAubGluZU51bWJl ciB0byBhbiBlcnJvciBvbiB0aGUgc3RhY2sgdG9wLgorICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfQVVHTUVOVF9FUlJPUl9DUkVBVEUpICYmICFkZWZpbmVkKERVS19VU0VfVFJBQ0VCQUNLUykK K0RVS19MT0NBTCB2b2lkIGR1a19fYWRkX2ZpbGVsaW5lKGR1a19odGhyZWFkICp0aHIsIGR1a19o dGhyZWFkICp0aHJfY2FsbHN0YWNrLCBjb25zdCBjaGFyICpjX2ZpbGVuYW1lLCBkdWtfaW50X3Qg Y19saW5lLCBkdWtfc21hbGxfdWludF90IGZsYWdzKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FT U0VSVElPTlMpCisJZHVrX2ludF90IGVudHJ5X3RvcDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChE VUtfVVNFX0FTU0VSVElPTlMpCisJZW50cnlfdG9wID0gZHVrX2dldF90b3AodGhyKTsKKyNlbmRp ZgorCisJLyoKKwkgKiAgSWYgdHJhY2ViYWNrcyBhcmUgZGlzYWJsZWQsICdmaWxlTmFtZScgYW5k ICdsaW5lTnVtYmVyJyBhcmUgYWRkZWQKKwkgKiAgYXMgcGxhaW4gb3duIHByb3BlcnRpZXMuICBT aW5jZSBFcnJvci5wcm90b3R5cGUgaGFzIGFjY2Vzc29ycyBvZgorCSAqICB0aGUgc2FtZSBuYW1l LCB3ZSBuZWVkIHRvIGRlZmluZSBvd24gcHJvcGVydGllcyBkaXJlY3RseSAoY2Fubm90CisJICog IGp1c3QgdXNlIGUuZy4gZHVrX3B1dF9wcm9wX3N0cmlkeCkuICBFeGlzdGluZyBwcm9wZXJ0aWVz IGFyZSBub3QKKwkgKiAgb3ZlcndyaXR0ZW4gaW4gY2FzZSB0aGV5IGFscmVhZHkgZXhpc3QuCisJ ICovCisKKwlpZiAodGhyLT5jb21waWxlX2N0eCAhPSBOVUxMICYmIHRoci0+Y29tcGlsZV9jdHgt PmhfZmlsZW5hbWUgIT0gTlVMTCkgeworCQkvKiBDb21waWxlciBTeW50YXhFcnJvciAob3Igb3Ro ZXIgZXJyb3IpIGdldHMgdGhlIHByaW1hcnkgYmxhbWUuCisJCSAqIEN1cnJlbnRseSBubyBmbGFn IHRvIHByZXZlbnQgYmxhbWluZy4KKwkJICovCisJCWR1a19wdXNoX3VpbnQodGhyLCAoZHVrX3Vp bnRfdCkgdGhyLT5jb21waWxlX2N0eC0+Y3Vycl90b2tlbi5zdGFydF9saW5lKTsKKwkJZHVrX3B1 c2hfaHN0cmluZyh0aHIsIHRoci0+Y29tcGlsZV9jdHgtPmhfZmlsZW5hbWUpOworCX0gZWxzZSBp ZiAoY19maWxlbmFtZSAmJiAoZmxhZ3MgJiBEVUtfQVVHTUVOVF9GTEFHX05PQkxBTUVfRklMRUxJ TkUpID09IDApIHsKKwkJLyogQyBjYWxsIHNpdGUgZ2V0cyBibGFtZWQgbmV4dCwgdW5sZXNzIGZs YWdnZWQgbm90IHRvIGRvIHNvLgorCQkgKiBYWFg6IGZpbGUvbGluZSBpcyBkaXNhYmxlZCBpbiBt aW5pbWFsIGJ1aWxkcywgc28gZGlzYWJsZSB0aGlzCisJCSAqIHRvbyB3aGVuIGFwcHJvcHJpYXRl LgorCQkgKi8KKwkJZHVrX3B1c2hfaW50KHRociwgY19saW5lKTsKKwkJZHVrX3B1c2hfc3RyaW5n KHRociwgY19maWxlbmFtZSk7CisJfSBlbHNlIHsKKwkJLyogRmluYWxseSwgYmxhbWUgdGhlIGlu bmVybW9zdCBjYWxsc3RhY2sgZW50cnkgd2hpY2ggaGFzIGEKKwkJICogLmZpbGVOYW1lIHByb3Bl cnR5LgorCQkgKi8KKwkJZHVrX3NtYWxsX3VpbnRfdCBkZXB0aDsKKwkJZHVrX3VpbnQzMl90IGVj bWFfbGluZTsKKwkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKworCQlEVUtfQVNTRVJUKHRocl9jYWxs c3RhY2stPmNhbGxzdGFja190b3AgPD0gRFVLX0lOVF9NQVgpOyAgLyogY2FsbHN0YWNrIGxpbWl0 cyAqLworCQlkZXB0aCA9IERVS19VU0VfVFJBQ0VCQUNLX0RFUFRIOworCQlpZiAoZGVwdGggPiB0 aHJfY2FsbHN0YWNrLT5jYWxsc3RhY2tfdG9wKSB7CisJCQlkZXB0aCA9IHRocl9jYWxsc3RhY2st PmNhbGxzdGFja190b3A7CisJCX0KKwkJZm9yIChhY3QgPSB0aHJfY2FsbHN0YWNrLT5jYWxsc3Rh Y2tfY3VycjsgZGVwdGgtLSA+IDA7IGFjdCA9IGFjdC0+cGFyZW50KSB7CisJCQlkdWtfaG9iamVj dCAqZnVuYzsKKwkJCWR1a191aW50MzJfdCBwYzsKKworCQkJRFVLX0FTU0VSVChhY3QgIT0gTlVM TCk7CisJCQlmdW5jID0gRFVLX0FDVF9HRVRfRlVOQyhhY3QpOworCQkJaWYgKGZ1bmMgPT0gTlVM TCkgeworCQkJCS8qIExpZ2h0ZnVuYywgbm90IGJsYW1lZCBub3cuICovCisJCQkJY29udGludWU7 CisJCQl9CisKKwkJCS8qIFBDIHBvaW50cyB0byBuZXh0IGluc3RydWN0aW9uLCBmaW5kIG9mZmVu ZGluZyBQQywKKwkJCSAqIFBDID09IDAgZm9yIG5hdGl2ZSBjb2RlLgorCQkJICovCisJCQlwYyA9 IGR1a19odGhyZWFkX2dldF9hY3RfcHJldl9wYyh0aHIsIGFjdCk7ICAvKiB0aHIgYXJndW1lbnQg b25seSB1c2VkIGZvciB0aHItPmhlYXAsIHNvIHNwZWNpZmljIHRocmVhZCBkb2Vzbid0IG1hdHRl ciAqLworCQkJRFVLX1VOUkVGKHBjKTsKKwkJCURVS19BU1NFUlRfRElTQUJMRShwYyA+PSAwKTsg IC8qIHVuc2lnbmVkICovCisJCQlEVUtfQVNTRVJUKChkdWtfZG91YmxlX3QpIHBjIDwgRFVLX0RP VUJMRV8yVE8zMik7ICAvKiBhc3N1bWUgUEMgaXMgYXQgbW9zdCAzMiBiaXRzIGFuZCBub24tbmVn YXRpdmUgKi8KKworCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIGZ1bmMpOworCisJCQkvKiBbIC4u LiBlcnJvciBmdW5jIF0gKi8KKworCQkJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0x LCBEVUtfU1RSSURYX0ZJTEVfTkFNRSk7CisJCQlpZiAoIWR1a19pc19zdHJpbmdfbm90c3ltYm9s KHRociwgLTEpKSB7CisJCQkJZHVrX3BvcF8yKHRocik7CisJCQkJY29udGludWU7CisJCQl9CisK KwkJCS8qIFsgLi4uIGVycm9yIGZ1bmMgZmlsZU5hbWUgXSAqLworCisJCQllY21hX2xpbmUgPSAw OworI2lmIGRlZmluZWQoRFVLX1VTRV9QQzJMSU5FKQorCQkJaWYgKERVS19IT0JKRUNUX0lTX0NP TVBGVU5DKGZ1bmMpKSB7CisJCQkJZWNtYV9saW5lID0gZHVrX2hvYmplY3RfcGMybGluZV9xdWVy eSh0aHIsIC0yLCAoZHVrX3VpbnRfZmFzdDMyX3QpIHBjKTsKKwkJCX0gZWxzZSB7CisJCQkJLyog TmF0aXZlIGZ1bmN0aW9uLCBubyByZWxldmFudCBsaW5lTnVtYmVyLiAqLworCQkJfQorI2VuZGlm ICAvKiBEVUtfVVNFX1BDMkxJTkUgKi8KKwkJCWR1a19wdXNoX3UzMih0aHIsIGVjbWFfbGluZSk7 CisKKwkJCS8qIFsgLi4uIGVycm9yIGZ1bmMgZmlsZU5hbWUgbGluZU51bWJlciBdICovCisKKwkJ CWR1a19yZXBsYWNlKHRociwgLTMpOworCisJCQkvKiBbIC4uLiBlcnJvciBsaW5lTnVtYmVyIGZp bGVOYW1lIF0gKi8KKwkJCWdvdG8gZGVmaW5lX3Byb3BzOworCQl9CisKKwkJLyogTm8gYWN0aXZh dGlvbiBtYXRjaGVzLCB1c2UgdW5kZWZpbmVkIGZvciBib3RoIC5maWxlTmFtZSBhbmQKKwkJICog LmxpbmVOdW1iZXIgKG1hdGNoZXMgd2hhdCB3ZSBkbyB3aXRoIGEgX1RyYWNlZGF0YSBiYXNlZAor CQkgKiBuby1tYXRjaCBsb29rdXAuCisJCSAqLworCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsK KwkJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7CisJfQorCisgZGVmaW5lX3Byb3BzOgorCS8qIFsg Li4uIGVycm9yIGxpbmVOdW1iZXIgZmlsZU5hbWUgXSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9B U1NFUlRJT05TKQorCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA9PSBlbnRyeV90b3AgKyAy KTsKKyNlbmRpZgorCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTMsIERVS19TVFJJ RFhfRklMRV9OQU1FLCBEVUtfUFJPUERFU0NfRkxBR1NfQyB8IERVS19QUk9QREVTQ19GTEFHX05P X09WRVJXUklURSk7CisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NU UklEWF9MSU5FX05VTUJFUiwgRFVLX1BST1BERVNDX0ZMQUdTX0MgfCBEVUtfUFJPUERFU0NfRkxB R19OT19PVkVSV1JJVEUpOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0FVR01FTlRfRVJST1JfQ1JF QVRFICYmICFEVUtfVVNFX1RSQUNFQkFDS1MgKi8KKworLyoKKyAqICBBZGQgbGluZSBudW1iZXIg dG8gYSBjb21waWxlciBlcnJvci4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRf RVJST1JfQ1JFQVRFKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19hZGRfY29tcGlsZXJfZXJyb3JfbGlu ZShkdWtfaHRocmVhZCAqdGhyKSB7CisKKwkvKiBBcHBlbmQgYSAiKGxpbmUgTk5OKSIgdG8gdGhl ICJtZXNzYWdlIiBwcm9wZXJ0eSBvZiBhbnkgZXJyb3IKKwkgKiB0aHJvd24gZHVyaW5nIGNvbXBp bGF0aW9uLiAgVXN1YWxseSBjb21waWxhdGlvbiBlcnJvcnMgYXJlCisJICogU3ludGF4RXJyb3Jz IGJ1dCB0aGV5IGNhbiBhbHNvIGJlIG91dC1vZi1tZW1vcnkgZXJyb3JzIGFuZAorCSAqIHRoZSBs aWtlLgorCSAqLworCisJLyogWyAuLi4gZXJyb3IgXSAqLworCisJRFVLX0FTU0VSVChkdWtfaXNf b2JqZWN0KHRociwgLTEpKTsKKworCWlmICghKHRoci0+Y29tcGlsZV9jdHggIT0gTlVMTCAmJiB0 aHItPmNvbXBpbGVfY3R4LT5oX2ZpbGVuYW1lICE9IE5VTEwpKSB7CisJCXJldHVybjsKKwl9CisK KwlEVUtfREREKERVS19ERERQUklOVCgiY29tcGlsZSBlcnJvciwgYmVmb3JlIGFkZGluZyBsaW5l IGluZm86ICUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRf dHZhbCh0aHIsIC0xKSkpOworCisJaWYgKGR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAt MSwgRFVLX1NUUklEWF9NRVNTQUdFKSkgeworCQlkdWtfcHVzaF9zcHJpbnRmKHRociwgIiAobGlu ZSAlbGQpIiwgKGxvbmcpIHRoci0+Y29tcGlsZV9jdHgtPmN1cnJfdG9rZW4uc3RhcnRfbGluZSk7 CisJCWR1a19jb25jYXQodGhyLCAyKTsKKwkJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIs IC0yLCBEVUtfU1RSSURYX01FU1NBR0UpOworCX0gZWxzZSB7CisJCWR1a19wb3AodGhyKTsKKwl9 CisKKwlEVUtfREREKERVS19ERERQUklOVCgiY29tcGlsZSBlcnJvciwgYWZ0ZXIgYWRkaW5nIGxp bmUgaW5mbzogJSFUIiwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dl dF90dmFsKHRociwgLTEpKSk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfQVVHTUVOVF9FUlJPUl9D UkVBVEUgKi8KKworLyoKKyAqICBBdWdtZW50IGFuIGVycm9yIGJlaW5nIGNyZWF0ZWQgdXNpbmcg RHVrdGFwZSBzcGVjaWZpYyBwcm9wZXJ0aWVzCisgKiAgbGlrZSBfVHJhY2VkYXRhIG9yIC5maWxl TmFtZS8ubGluZU51bWJlci4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJS T1JfQ1JFQVRFKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19lcnJfYXVnbWVudF9idWlsdGluX2NyZWF0 ZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfaHRocmVhZCAqdGhyX2NhbGxzdGFjaywgY29uc3QgY2hh ciAqY19maWxlbmFtZSwgZHVrX2ludF90IGNfbGluZSwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX3Nt YWxsX3VpbnRfdCBmbGFncykgeworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCWR1 a19pbnRfdCBlbnRyeV90b3A7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJ T05TKQorCWVudHJ5X3RvcCA9IGR1a19nZXRfdG9wKHRocik7CisjZW5kaWYKKwlEVUtfQVNTRVJU KG9iaiAhPSBOVUxMKTsKKworCURVS19VTlJFRihvYmopOyAgLyogdW5yZWZlcmVuY2VkIHcvbyB0 cmFjZWJhY2tzICovCisKKwlkdWtfX2FkZF9jb21waWxlcl9lcnJvcl9saW5lKHRocik7CisKKyNp ZiBkZWZpbmVkKERVS19VU0VfVFJBQ0VCQUNLUykKKwkvKiBJZiB0cmFjZWJhY2tzIGFyZSBlbmFi bGVkLCB0aGUgJ19UcmFjZWRhdGEnIHByb3BlcnR5IGlzIHRoZSBvbmx5CisJICogdGhpbmcgd2Ug bmVlZDogJ2ZpbGVOYW1lJyBhbmQgJ2xpbmVOdW1iZXInIGFyZSB2aXJ0dWFsIHByb3BlcnRpZXMK KwkgKiB3aGljaCB1c2UgJ19UcmFjZWRhdGEnLgorCSAqLworCWlmIChkdWtfaG9iamVjdF9oYXNw cm9wX3Jhdyh0aHIsIG9iaiwgRFVLX0hUSFJFQURfU1RSSU5HX0lOVF9UUkFDRURBVEEodGhyKSkp IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImVycm9yIHZhbHVlIGFscmVhZHkgaGFzIGEgJ19U cmFjZWRhdGEnIHByb3BlcnR5LCBub3QgbW9kaWZ5aW5nIGl0IikpOworCX0gZWxzZSB7CisJCWR1 a19fYWRkX3RyYWNlYmFjayh0aHIsIHRocl9jYWxsc3RhY2ssIGNfZmlsZW5hbWUsIGNfbGluZSwg ZmxhZ3MpOworCX0KKyNlbHNlCisJLyogV2l0aG91dCB0cmFjZWJhY2tzIHRoZSBjb25jcmV0ZSAu ZmlsZU5hbWUgYW5kIC5saW5lTnVtYmVyIG5lZWQKKwkgKiB0byBiZSBhZGRlZCBkaXJlY3RseS4K KwkgKi8KKwlkdWtfX2FkZF9maWxlbGluZSh0aHIsIHRocl9jYWxsc3RhY2ssIGNfZmlsZW5hbWUs IGNfbGluZSwgZmxhZ3MpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9O UykKKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPT0gZW50cnlfdG9wKTsKKyNlbmRpZgor fQorI2VuZGlmICAvKiBEVUtfVVNFX0FVR01FTlRfRVJST1JfQ1JFQVRFICovCisKKy8qCisgKiAg QXVnbWVudCBhbiBlcnJvciBhdCBjcmVhdGlvbiB0aW1lIHdpdGggX1RyYWNlZGF0YS9maWxlTmFt ZS9saW5lTnVtYmVyCisgKiAgYW5kIGFsbG93IGEgdXNlciBlcnJvciBoYW5kbGVyIChpZiBkZWZp bmVkKSB0byBwcm9jZXNzL3JlcGxhY2UgdGhlIGVycm9yLgorICogIFRoZSBlcnJvciB0byBiZSBh dWdtZW50ZWQgaXMgYXQgdGhlIHN0YWNrIHRvcC4KKyAqCisgKiAgdGhyOiB0aHJlYWQgY29udGFp bmluZyB0aGUgZXJyb3IgdmFsdWUKKyAqICB0aHJfY2FsbHN0YWNrOiB0aHJlYWQgd2hpY2ggc2hv dWxkIGJlIHVzZWQgZm9yIGdlbmVyYXRpbmcgY2FsbHN0YWNrIGV0Yy4KKyAqICBjX2ZpbGVuYW1l OiBDIF9fRklMRV9fIHJlbGF0ZWQgdG8gdGhlIGVycm9yCisgKiAgY19saW5lOiBDIF9fTElORV9f IHJlbGF0ZWQgdG8gdGhlIGVycm9yCisgKiAgZmxhZ3MgJiBEVUtfQVVHTUVOVF9GTEFHX05PQkxB TUVfRklMRUxJTkU6CisgKiAgICAgIGlmIHRydWUsIGRvbid0IGZpbGVOYW1lL2xpbmUgYXMgZXJy b3Igc291cmNlLCBvdGhlcndpc2UgdXNlIHRyYWNlYmFjaworICogICAgICAobmVlZGVkIGJlY2F1 c2UgdXNlciBjb2RlIGZpbGVuYW1lL2xpbmUgYXJlIHJlcG9ydGVkIGJ1dCBpbnRlcm5hbCBvbmVz CisgKiAgICAgIGFyZSBub3QpCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VS Uk9SX0NSRUFURSkKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19lcnJfYXVnbWVudF9lcnJvcl9jcmVh dGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2h0aHJlYWQgKnRocl9jYWxsc3RhY2ssIGNvbnN0IGNo YXIgKmNfZmlsZW5hbWUsIGR1a19pbnRfdCBjX2xpbmUsIGR1a19zbWFsbF91aW50X3QgZmxhZ3Mp IHsKKwlkdWtfaG9iamVjdCAqb2JqOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVL X0FTU0VSVCh0aHJfY2FsbHN0YWNrICE9IE5VTEwpOworCisJLyogWyAuLi4gZXJyb3IgXSAqLwor CisJLyoKKwkgKiAgQ3JpdGVyaWEgZm9yIGF1Z21lbnRpbmc6CisJICoKKwkgKiAgIC0gYXVnbWVu dGF0aW9uIGVuYWJsZWQgaW4gYnVpbGQgKG5hdHVyYWxseSkKKwkgKiAgIC0gZXJyb3IgdmFsdWUg aW50ZXJuYWwgcHJvdG90eXBlIGNoYWluIGNvbnRhaW5zIHRoZSBidWlsdC1pbgorCSAqICAgICBF cnJvciBwcm90b3R5cGUgb2JqZWN0IChpLmUuICd2YWwgaW5zdGFuY2VvZiBFcnJvcicpCisJICoK KwkgKiAgQWRkaXRpb25hbCBjcml0ZXJpYSBmb3IgYnVpbHQtaW4gYXVnbWVudGluZzoKKwkgKgor CSAqICAgLSBlcnJvciB2YWx1ZSBpcyBhbiBleHRlbnNpYmxlIG9iamVjdAorCSAqLworCisJb2Jq ID0gZHVrX2dldF9ob2JqZWN0KHRociwgLTEpOworCWlmICghb2JqKSB7CisJCURVS19EREQoRFVL X0RERFBSSU5UKCJ2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LCBza2lwIGJvdGggYnVpbHQtaW4gYW5k IHVzZXIgYXVnbWVudCIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWR1a19ob2JqZWN0X3Byb3Rv dHlwZV9jaGFpbl9jb250YWlucyh0aHIsIG9iaiwgdGhyLT5idWlsdGluc1tEVUtfQklEWF9FUlJP Ul9QUk9UT1RZUEVdLCAxIC8qaWdub3JlX2xvb3AqLykpIHsKKwkJLyogSWYgdGhlIHZhbHVlIGhh cyBhIHByb3RvdHlwZSBsb29wLCBpdCdzIGNyaXRpY2FsIG5vdCB0bworCQkgKiB0aHJvdyBoZXJl LiAgSW5zdGVhZCwgYXNzdW1lIHRoZSB2YWx1ZSBpcyBub3QgdG8gYmUKKwkJICogYXVnbWVudGVk LgorCQkgKi8KKwkJRFVLX0RERChEVUtfREREUFJJTlQoInZhbHVlIGlzIG5vdCBhbiBlcnJvciBp bnN0YW5jZSwgc2tpcCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyIGF1Z21lbnQiKSk7CisJCXJldHVy bjsKKwl9CisJaWYgKERVS19IT0JKRUNUX0hBU19FWFRFTlNJQkxFKG9iaikpIHsKKwkJRFVLX0RE RChEVUtfREREUFJJTlQoImVycm9yIG1lZXRzIGNyaXRlcmlhLCBidWlsdC1pbiBhdWdtZW50Iikp OworCQlkdWtfX2Vycl9hdWdtZW50X2J1aWx0aW5fY3JlYXRlKHRociwgdGhyX2NhbGxzdGFjaywg Y19maWxlbmFtZSwgY19saW5lLCBvYmosIGZsYWdzKTsKKwl9IGVsc2UgeworCQlEVUtfREREKERV S19ERERQUklOVCgiZXJyb3IgZG9lcyBub3QgbWVldCBjcml0ZXJpYSwgbm8gYnVpbHQtaW4gYXVn bWVudCIpKTsKKwl9CisKKwkvKiBbIC4uLiBlcnJvciBdICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfRVJSQ1JFQVRFKQorCWR1a19fZXJyX2F1Z21lbnRfdXNlcih0aHIsIERVS19TVFJJRFhfRVJS X0NSRUFURSk7CisjZW5kaWYKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9BVUdNRU5UX0VSUk9SX0NS RUFURSAqLworCisvKgorICogIEF1Z21lbnQgYW4gZXJyb3IgYXQgdGhyb3cgdGltZTsgYWxsb3cg YSB1c2VyIGVycm9yIGhhbmRsZXIgKGlmIGRlZmluZWQpCisgKiAgdG8gcHJvY2Vzcy9yZXBsYWNl IHRoZSBlcnJvci4gIFRoZSBlcnJvciB0byBiZSBhdWdtZW50ZWQgaXMgYXQgdGhlCisgKiAgc3Rh Y2sgdG9wLgorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVVHTUVOVF9FUlJPUl9USFJPVykK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19lcnJfYXVnbWVudF9lcnJvcl90aHJvdyhkdWtfaHRocmVh ZCAqdGhyKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0VSUlRIUk9XKQorCWR1a19fZXJyX2F1Z21l bnRfdXNlcih0aHIsIERVS19TVFJJRFhfRVJSX1RIUk9XKTsKKyNlbmRpZiAgLyogRFVLX1VTRV9F UlJUSFJPVyAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX0FVR01FTlRfRVJST1JfVEhST1cgKi8K Ky8qCisgKiAgRG8gYSBsb25nam1wIGNhbGwsIGNhbGxpbmcgdGhlIGZhdGFsIGVycm9yIGhhbmRs ZXIgaWYgbm8KKyAqICBjYXRjaHBvaW50IGV4aXN0cy4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtf aW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf UFJFRkVSX1NJWkUpCitEVUtfTk9SRVRVUk4oRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3VuY2F1 Z2h0X21pbmltYWwoZHVrX2h0aHJlYWQgKnRocikpOworRFVLX0xPQ0FMIHZvaWQgZHVrX191bmNh dWdodF9taW5pbWFsKGR1a19odGhyZWFkICp0aHIpIHsKKwkodm9pZCkgZHVrX2ZhdGFsKHRociwg InVuY2F1Z2h0IGVycm9yIik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorI2VuZGlm CisKKyNpZiAwCitEVUtfTk9SRVRVUk4oRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3VuY2F1Z2h0 X3JlYWRhYmxlKGR1a19odGhyZWFkICp0aHIpKTsKK0RVS19MT0NBTCB2b2lkIGR1a19fdW5jYXVn aHRfcmVhZGFibGUoZHVrX2h0aHJlYWQgKnRocikgeworCWNvbnN0IGNoYXIgKnN1bW1hcnk7CisJ Y2hhciBidWZbRFVLX1VTRV9GQVRBTF9NQVhMRU5dOworCisJc3VtbWFyeSA9IGR1a19wdXNoX3N0 cmluZ190dmFsX3JlYWRhYmxlKHRociwgJnRoci0+aGVhcC0+bGoudmFsdWUxKTsKKwlEVUtfU05Q UklOVEYoYnVmLCBzaXplb2YoYnVmKSwgInVuY2F1Z2h0OiAlcyIsIHN1bW1hcnkpOworCWJ1Zltz aXplb2YoYnVmKSAtIDFdID0gKGNoYXIpIDA7CisJKHZvaWQpIGR1a19mYXRhbCh0aHIsIChjb25z dCBjaGFyICopIGJ1Zik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorI2VuZGlmCisK KyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorRFVLX05PUkVUVVJOKERVS19MT0NB TF9ERUNMIHZvaWQgZHVrX191bmNhdWdodF9lcnJvcl9hd2FyZShkdWtfaHRocmVhZCAqdGhyKSk7 CitEVUtfTE9DQUwgdm9pZCBkdWtfX3VuY2F1Z2h0X2Vycm9yX2F3YXJlKGR1a19odGhyZWFkICp0 aHIpIHsKKwljb25zdCBjaGFyICpzdW1tYXJ5OworCWNoYXIgYnVmW0RVS19VU0VfRkFUQUxfTUFY TEVOXTsKKworCXN1bW1hcnkgPSBkdWtfcHVzaF9zdHJpbmdfdHZhbF9yZWFkYWJsZV9lcnJvcih0 aHIsICZ0aHItPmhlYXAtPmxqLnZhbHVlMSk7CisJRFVLX0FTU0VSVChzdW1tYXJ5ICE9IE5VTEwp OworCURVS19TTlBSSU5URihidWYsIHNpemVvZihidWYpLCAidW5jYXVnaHQ6ICVzIiwgc3VtbWFy eSk7CisJYnVmW3NpemVvZihidWYpIC0gMV0gPSAoY2hhcikgMDsKKwkodm9pZCkgZHVrX2ZhdGFs KHRociwgKGNvbnN0IGNoYXIgKikgYnVmKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9 CisjZW5kaWYKKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2Vycl9sb25nam1wKGR1a19odGhyZWFk ICp0aHIpIHsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVh cCAhPSBOVUxMKTsKKworCURVS19ERChEVUtfRERQUklOVCgibG9uZ2ptcCBlcnJvcjogdHlwZT0l ZCBpc2Vycm9yPSVkIHZhbHVlMT0lIVQgdmFsdWUyPSUhVCIsCisJICAgICAgICAgICAgICAgICAg IChpbnQpIHRoci0+aGVhcC0+bGoudHlwZSwgKGludCkgdGhyLT5oZWFwLT5sai5pc2Vycm9yLAor CSAgICAgICAgICAgICAgICAgICAmdGhyLT5oZWFwLT5sai52YWx1ZTEsICZ0aHItPmhlYXAtPmxq LnZhbHVlMikpOworCisJLyogUHJldmVudCBmaW5hbGl6ZXIgZXhlY3V0aW9uIGR1cmluZyBlcnJv ciBoYW5kbGluZy4gIEFsbCBlcnJvcgorCSAqIGhhbmRsaW5nIHNpdGVzIHdpbGwgcHJvY2VzcyBw ZW5kaW5nIGZpbmFsaXplcnMgb25jZSBlcnJvciBoYW5kbGluZworCSAqIGlzIGNvbXBsZXRlIGFu ZCB3ZSdyZSByZWFkeSBmb3IgdGhlIHNpZGUgZWZmZWN0cy4gIERvZXMgbm90IHByZXZlbnQKKwkg KiByZWZ6ZXJvIGZyZWVpbmcgb3IgbWFyay1hbmQtc3dlZXAgZHVyaW5nIGVycm9yIGhhbmRsaW5n LgorCSAqCisJICogTk9URTogd2hlbiB3ZSBjb21lIGhlcmUgc29tZSBjYWxsaW5nIGNvZGUgbWF5 IGhhdmUgdXNlZCBERUNSRUYKKwkgKiBOT1JaIG1hY3JvcyB3aXRob3V0IGFuIGV4cGxpY2l0IERV S19SRUZaRVJPX0NIRUNLX3h4eCgpIGNhbGwuCisJICogV2UgZG9uJ3Qgd2FudCB0byBkbyBpdCBo ZXJlIGJlY2F1c2UgaXQgd291bGQganVzdCBjaGVjayBmb3IKKwkgKiBwZW5kaW5nIGZpbmFsaXpl cnMgYW5kIHdlIHByZXZlbnQgdGhhdCBleHBsaWNpdGx5LiAgSW5zdGVhZCwKKwkgKiB0aGUgZXJy b3IgY2F0Y2hlciB3aWxsIHJ1biB0aGUgZmluYWxpemVycyBvbmNlIGVycm9yIGhhbmRsaW5nCisJ ICogaXMgY29tcGxldGUuCisJICovCisKKwlEVUtfQVNTRVJUX0xKU1RBVEVfU0VUKHRoci0+aGVh cCk7CisKKwl0aHItPmhlYXAtPnBmX3ByZXZlbnRfY291bnQrKzsKKwlEVUtfQVNTRVJUKHRoci0+ aGVhcC0+cGZfcHJldmVudF9jb3VudCAhPSAwKTsgIC8qIFdyYXAuICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfQVNTRVJUSU9OUykKKwkvKiBYWFg6IHNldCB0aGlzIGltbWVkaWF0ZWx5IHdoZW4g bG9uZ2ptcCBzdGF0ZSBpcyBzZXQgKi8KKwlEVUtfQVNTRVJUKHRoci0+aGVhcC0+ZXJyb3Jfbm90 X2FsbG93ZWQgPT0gMCk7ICAvKiBEZXRlY3QgZXJyb3Igd2l0aGluIGNyaXRpY2FsIHNlY3Rpb24u ICovCisJdGhyLT5oZWFwLT5lcnJvcl9ub3RfYWxsb3dlZCA9IDE7CisjZW5kaWYKKworCURVS19E RChEVUtfRERQUklOVCgiYWJvdXQgdG8gbG9uZ2ptcCwgcGZfcHJldmVudF9jb3VudD0lbGQiLCAo bG9uZykgdGhyLT5oZWFwLT5wZl9wcmV2ZW50X2NvdW50KSk7CisKKwkvKiBJZiB3ZSBkb24ndCBo YXZlIGEgam1wYnVmX3B0ciwgdGhlcmUgaXMgbGl0dGxlIHdlIGNhbiBkbyBleGNlcHQKKwkgKiBj YXVzZSBhIGZhdGFsIGVycm9yLiAgVGhlIGNhbGxlcidzIGV4cGVjdGF0aW9uIGlzIHRoYXQgd2Ug bmV2ZXIKKwkgKiByZXR1cm4uCisJICovCisJaWYgKCF0aHItPmhlYXAtPmxqLmptcGJ1Zl9wdHIp IHsKKwkJRFVLX0QoRFVLX0RQUklOVCgidW5jYXVnaHQgZXJyb3I6IHR5cGU9JWQgaXNlcnJvcj0l ZCB2YWx1ZTE9JSFUIHZhbHVlMj0lIVQiLAorCQkgICAgICAgICAgICAgICAgIChpbnQpIHRoci0+ aGVhcC0+bGoudHlwZSwgKGludCkgdGhyLT5oZWFwLT5sai5pc2Vycm9yLAorCQkgICAgICAgICAg ICAgICAgICZ0aHItPmhlYXAtPmxqLnZhbHVlMSwgJnRoci0+aGVhcC0+bGoudmFsdWUyKSk7CisK KyNpZiBkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisJCWR1a19fdW5jYXVnaHRfbWluaW1h bCh0aHIpOworI2Vsc2UKKwkJZHVrX191bmNhdWdodF9lcnJvcl9hd2FyZSh0aHIpOworI2VuZGlm CisJCURVS19VTlJFQUNIQUJMRSgpOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9DUFBfRVhD RVBUSU9OUykKKwl0aHJvdyBkdWtfaW50ZXJuYWxfZXhjZXB0aW9uKCk7ICAvKiBkdW1teSAqLwor I2Vsc2UKKwlEVUtfTE9OR0pNUCh0aHItPmhlYXAtPmxqLmptcGJ1Zl9wdHItPmpiKTsKKyNlbmRp ZgorCisJRFVLX1VOUkVBQ0hBQkxFKCk7Cit9CisvKgorICogIEVycm9yIGhlbHBlcnMKKyAqLwor CisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8q CisgKiAgSGVscGVyIHRvIHdhbGsgdGhlIHRocmVhZCBjaGFpbiBhbmQgc2VlIGlmIHRoZXJlIGlz IGFuIGFjdGl2ZSBlcnJvcgorICogIGNhdGNoZXIuICBQcm90ZWN0ZWQgY2FsbHMgb3IgZmluYWxs eSBibG9ja3MgYXJlbid0IGNvbnNpZGVyZWQgY2F0Y2hpbmcuCisgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19oYXZl X2FjdGl2ZV9jYXRjaGVyKGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiBBcyBub3RlZCBhYm92ZSwg YSBwcm90ZWN0ZWQgQVBJIGNhbGwgd29uJ3QgYmUgY291bnRlZCBhcyBhCisJICogY2F0Y2hlci4g IFRoaXMgaXMgdXN1YWxseSBjb252ZW5pZW50LCBlLmcuIGluIHRoZSBjYXNlIG9mIGEgdG9wLQor CSAqIGxldmVsIGR1a19wY2FsbCgpLCBidXQgbWF5IG5vdCBhbHdheXMgYmUgZGVzaXJhYmxlLiAg UGVyaGFwcyBhZGQKKwkgKiBhbiBhcmd1bWVudCB0byB0cmVhdCB0aGVtIGFzIGNhdGNoZXJzPwor CSAqLworCisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfY2F0Y2hlciAqY2F0OworCisJRFVL X0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwlmb3IgKDsgdGhyICE9IE5VTEw7IHRociA9IHRoci0+ cmVzdW1lcikgeworCQlmb3IgKGFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7IGFjdCAhPSBOVUxM OyBhY3QgPSBhY3QtPnBhcmVudCkgeworCQkJZm9yIChjYXQgPSBhY3QtPmNhdDsgY2F0ICE9IE5V TEw7IGNhdCA9IGNhdC0+cGFyZW50KSB7CisJCQkJaWYgKERVS19DQVRfSEFTX0NBVENIX0VOQUJM RUQoY2F0KSkgeworCQkJCQlyZXR1cm4gMTsgIC8qIGFsbCB3ZSBuZWVkIHRvIGtub3cgKi8KKwkJ CQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREVC VUdHRVJfU1VQUE9SVCAqLworCisvKgorICogIEdldCBwcm90b3R5cGUgb2JqZWN0IGZvciBhbiBp bnRlZ2VyIGVycm9yIGNvZGUuCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19ob2JqZWN0ICpkdWtf ZXJyb3JfcHJvdG90eXBlX2Zyb21fY29kZShkdWtfaHRocmVhZCAqdGhyLCBkdWtfZXJyY29kZV90 IGNvZGUpIHsKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIERVS19FUlJfRVZBTF9FUlJPUjoKKwkJ cmV0dXJuIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfRVZBTF9FUlJPUl9QUk9UT1RZUEVdOworCWNh c2UgRFVLX0VSUl9SQU5HRV9FUlJPUjoKKwkJcmV0dXJuIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhf UkFOR0VfRVJST1JfUFJPVE9UWVBFXTsKKwljYXNlIERVS19FUlJfUkVGRVJFTkNFX0VSUk9SOgor CQlyZXR1cm4gdGhyLT5idWlsdGluc1tEVUtfQklEWF9SRUZFUkVOQ0VfRVJST1JfUFJPVE9UWVBF XTsKKwljYXNlIERVS19FUlJfU1lOVEFYX0VSUk9SOgorCQlyZXR1cm4gdGhyLT5idWlsdGluc1tE VUtfQklEWF9TWU5UQVhfRVJST1JfUFJPVE9UWVBFXTsKKwljYXNlIERVS19FUlJfVFlQRV9FUlJP UjoKKwkJcmV0dXJuIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfVFlQRV9FUlJPUl9QUk9UT1RZUEVd OworCWNhc2UgRFVLX0VSUl9VUklfRVJST1I6CisJCXJldHVybiB0aHItPmJ1aWx0aW5zW0RVS19C SURYX1VSSV9FUlJPUl9QUk9UT1RZUEVdOworCWNhc2UgRFVLX0VSUl9FUlJPUjoKKwlkZWZhdWx0 OgorCQlyZXR1cm4gdGhyLT5idWlsdGluc1tEVUtfQklEWF9FUlJPUl9QUk9UT1RZUEVdOworCX0K K30KKworLyoKKyAqICBIZWxwZXIgZm9yIGRlYnVnZ2VyIHRocm93IG5vdGlmeSBhbmQgcGF1c2Ut b24tdW5jYXVnaHQgaW50ZWdyYXRpb24uCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJV R0dFUl9TVVBQT1JUKQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2Vycl9jaGVja19kZWJ1Z2dlcl9p bnRlZ3JhdGlvbihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2Jvb2xfdCB1bmNhdWdodDsKKwlk dWtfdHZhbCAqdHZfb2JqOworCisJLyogSWYgc29tZXRoaW5nIGlzIHRocm93biB3aXRoIHRoZSBk ZWJ1Z2dlciBhdHRhY2hlZCBhbmQgbm9ib2R5IHdpbGwKKwkgKiBjYXRjaCBpdCwgZXhlY3V0aW9u IGlzIHBhdXNlZCBiZWZvcmUgdGhlIGxvbmdqbXAsIHR1cm5pbmcgb3ZlcgorCSAqIGNvbnRyb2wg dG8gdGhlIGRlYnVnIGNsaWVudC4gIFRoaXMgYWxsb3dzIGxvY2FsIHN0YXRlIHRvIGJlIGV4YW1p bmVkCisJICogYmVmb3JlIHRoZSBzdGFjayBpcyB1bndvdW5kLiAgRXJyb3JzIGFyZSBub3QgaW50 ZXJjZXB0ZWQgd2hlbiBkZWJ1ZworCSAqIG1lc3NhZ2UgbG9vcCBpcyBhY3RpdmUgKGUuZy4gZm9y IEV2YWwpLgorCSAqLworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0 aHItPmhlYXAgIT0gTlVMTCk7CisKKwkvKiBYWFg6IEFsbG93IGN1c3RvbWl6aW5nIHRoZSBwYXVz ZSBhbmQgbm90aWZ5IGJlaGF2aW9yIGF0IHJ1bnRpbWUKKwkgKiB1c2luZyBkZWJ1Z2dlciBydW50 aW1lIGZsYWdzLiAgRm9yIG5vdyB0aGUgYmVoYXZpb3IgaXMgZml4ZWQgdXNpbmcKKwkgKiBjb25m aWcgb3B0aW9ucy4KKwkgKi8KKworCWlmICghZHVrX2RlYnVnX2lzX2F0dGFjaGVkKHRoci0+aGVh cCkgfHwKKwkgICAgdGhyLT5oZWFwLT5kYmdfcHJvY2Vzc2luZyB8fAorCSAgICB0aHItPmhlYXAt PmxqLnR5cGUgIT0gRFVLX0xKX1RZUEVfVEhST1cgfHwKKwkgICAgdGhyLT5oZWFwLT5jcmVhdGlu Z19lcnJvcikgeworCQlEVUtfRChEVUtfRFBSSU5UKCJza2lwIGRlYnVnZ2VyIGVycm9yIGludGVn cmF0aW9uOyBub3QgYXR0YWNoZWQsIGRlYnVnZ2VyIHByb2Nlc3NpbmcsIG5vdCBUSFJPVywgb3Ig ZXJyb3IgdGhyb3duIHdoaWxlIGNyZWF0aW5nIGVycm9yIikpOworCQlyZXR1cm47CisJfQorCisJ LyogRG9uJ3QgaW50ZXJjZXB0IGEgRG91YmxlRXJyb3IsIHdlIG1heSBoYXZlIGNhdXNlZCB0aGUg aW5pdGlhbCBkb3VibGUKKwkgKiBmYXVsdCBhbmQgYXR0ZW1wdGluZyB0byBpbnRlcmNlcHQgaXQg d2lsbCBjYXVzZSB1cyB0byBiZSBjYWxsZWQKKwkgKiByZWN1cnNpdmVseSBhbmQgZXhoYXVzdCB0 aGUgQyBzdGFjay4gIChUaGlzIHNob3VsZCBubyBsb25nZXIgaGFwcGVuCisJICogZm9yIHRoZSBp bml0aWFsIHRocm93IGJlY2F1c2UgRG91YmxlRXJyb3IgcGF0aCBkb2Vzbid0IGRvIGEgZGVidWdn ZXIKKwkgKiBpbnRlZ3JhdGlvbiBjaGVjaywgYnV0IGl0IG1pZ2h0IGhhcHBlbiBmb3IgcmV0aHJv d3MuKQorCSAqLworCXR2X29iaiA9ICZ0aHItPmhlYXAtPmxqLnZhbHVlMTsKKwlpZiAoRFVLX1RW QUxfSVNfT0JKRUNUKHR2X29iaikgJiYgRFVLX1RWQUxfR0VUX09CSkVDVCh0dl9vYmopID09IHRo ci0+YnVpbHRpbnNbRFVLX0JJRFhfRE9VQkxFX0VSUk9SXSkgeworCQlEVUtfRChEVUtfRFBSSU5U KCJidWlsdC1pbiBEb3VibGVFcnJvciBpbnN0YW5jZSAocmUpdGhyb3duLCBub3QgaW50ZXJjZXB0 aW5nIikpOworCQlyZXR1cm47CisJfQorCisJdW5jYXVnaHQgPSAhZHVrX19oYXZlX2FjdGl2ZV9j YXRjaGVyKHRocik7CisKKwkvKiBEZWJ1Z2dlciBjb2RlIGV4cGVjdHMgdGhlIHZhbHVlIGF0IHN0 YWNrIHRvcC4gIFRoaXMgYWxzbyBzZXJ2ZXMKKwkgKiBhcyBhIGJhY2t1cDogd2UgbmVlZCB0byBz dG9yZS9yZXN0b3JlIHRoZSBsb25nam1wIHN0YXRlIGJlY2F1c2UKKwkgKiB3aGVuIHRoZSBkZWJ1 Z2dlciBpcyBwYXVzZWQgRXZhbCBjb21tYW5kcyBtYXkgYmUgZXhlY3V0ZWQgYW5kCisJICogdGhl eSBjYW4gYXJiaXRyYXJpbHkgY2xvYmJlciB0aGUgbG9uZ2ptcCBzdGF0ZS4KKwkgKi8KKwlkdWtf cHVzaF90dmFsKHRociwgdHZfb2JqKTsKKworCS8qIFN0b3JlIGFuZCByZXNldCBsb25nam1wIHN0 YXRlLiAqLworCURVS19BU1NFUlRfTEpTVEFURV9TRVQodGhyLT5oZWFwKTsKKwlEVUtfVFZBTF9E RUNSRUZfTk9SWih0aHIsIHR2X29iaik7CisJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19VTkRFRklO RUQoJnRoci0+aGVhcC0+bGoudmFsdWUyKSk7ICAvKiBBbHdheXMgZm9yIFRIUk9XIHR5cGUuICov CisJRFVLX1RWQUxfU0VUX1VOREVGSU5FRCh0dl9vYmopOworCXRoci0+aGVhcC0+bGoudHlwZSA9 IERVS19MSl9UWVBFX1VOS05PV047CisJRFVLX0FTU0VSVF9MSlNUQVRFX1VOU0VUKHRoci0+aGVh cCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfVEhST1dfTk9USUZZKQorCS8qIFJl cG9ydCBpdCB0byB0aGUgZGVidWcgY2xpZW50ICovCisJRFVLX0QoRFVLX0RQUklOVCgidGhyb3cg d2l0aCBkZWJ1Z2dlciBhdHRhY2hlZCwgcmVwb3J0IHRvIGNsaWVudCIpKTsKKwlkdWtfZGVidWdf c2VuZF90aHJvdyh0aHIsIHVuY2F1Z2h0KTsKKyNlbmRpZgorCisJaWYgKHVuY2F1Z2h0KSB7CisJ CWlmICh0aHItPmhlYXAtPmRiZ19wYXVzZV9mbGFncyAmIERVS19QQVVTRV9GTEFHX1VOQ0FVR0hU X0VSUk9SKSB7CisJCQlEVUtfRChEVUtfRFBSSU5UKCJQQVVTRSBUUklHR0VSRUQgYnkgdW5jYXVn aHQgZXJyb3IiKSk7CisJCQlkdWtfZGVidWdfaGFsdF9leGVjdXRpb24odGhyLCAxIC8qdXNlX3By ZXZfcGMqLyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAodGhyLT5oZWFwLT5kYmdfcGF1c2VfZmxh Z3MgJiBEVUtfUEFVU0VfRkxBR19DQVVHSFRfRVJST1IpIHsKKwkJCURVS19EKERVS19EUFJJTlQo IlBBVVNFIFRSSUdHRVJFRCBieSBjYXVnaHQgZXJyb3IiKSk7CisJCQlkdWtfZGVidWdfaGFsdF9l eGVjdXRpb24odGhyLCAxIC8qdXNlX3ByZXZfcGMqLyk7CisJCX0KKwl9CisKKwkvKiBSZXN0b3Jl IGxvbmdqbXAgc3RhdGUuICovCisJRFVLX0FTU0VSVF9MSlNUQVRFX1VOU0VUKHRoci0+aGVhcCk7 CisJdGhyLT5oZWFwLT5sai50eXBlID0gRFVLX0xKX1RZUEVfVEhST1c7CisJdHZfb2JqID0gRFVL X0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOREVG SU5FRCgmdGhyLT5oZWFwLT5sai52YWx1ZTEpKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VO REVGSU5FRCgmdGhyLT5oZWFwLT5sai52YWx1ZTIpKTsKKwlEVUtfVFZBTF9TRVRfVFZBTCgmdGhy LT5oZWFwLT5sai52YWx1ZTEsIHR2X29iaik7CisJRFVLX1RWQUxfSU5DUkVGKHRociwgdHZfb2Jq KTsKKwlEVUtfQVNTRVJUX0xKU1RBVEVfU0VUKHRoci0+aGVhcCk7CisKKwlkdWtfcG9wKHRocik7 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCAqLworCisvKgorICogIEhl bHBlcnMgZm9yIHNldHRpbmcgdXAgaGVhcCBsb25nam1wIHN0YXRlLgorICovCisKK0RVS19JTlRF Uk5BTCB2b2lkIGR1a19lcnJfc2V0dXBfbGpzdGF0ZTEoZHVrX2h0aHJlYWQgKnRociwgZHVrX3Nt YWxsX3VpbnRfdCBsal90eXBlLCBkdWtfdHZhbCAqdHZfdmFsKSB7CisJZHVrX2hlYXAgKmhlYXA7 CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwloZWFwID0gdGhyLT5oZWFwOworCURVS19B U1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X3ZhbCAhPSBOVUxMKTsKKworCURV S19BU1NFUlRfTEpTVEFURV9VTlNFVChoZWFwKTsKKworCWhlYXAtPmxqLnR5cGUgPSBsal90eXBl OworCURVS19UVkFMX1NFVF9UVkFMKCZoZWFwLT5sai52YWx1ZTEsIHR2X3ZhbCk7CisJRFVLX1RW QUxfSU5DUkVGKHRociwgdHZfdmFsKTsKKworCURVS19BU1NFUlRfTEpTVEFURV9TRVQoaGVhcCk7 Cit9CisvKgorICogIENyZWF0ZSBhbmQgdGhyb3cgYW4gRUNNQVNjcmlwdCBlcnJvciBvYmplY3Qg YmFzZWQgb24gYSBjb2RlIGFuZCBhIG1lc3NhZ2UuCisgKgorICogIFVzZWQgd2hlbiB3ZSB0aHJv dyBlcnJvcnMgaW50ZXJuYWxseS4gIEVDTUFTY3JpcHQgZ2VuZXJhdGVkIGVycm9yIG9iamVjdHMK KyAqICBhcmUgY3JlYXRlZCBieSBFQ01BU2NyaXB0IGNvZGUsIGFuZCB0aGUgdGhyb3dpbmcgaXMg aGFuZGxlZCBieSB0aGUgYnl0ZWNvZGUKKyAqICBleGVjdXRvci4KKyAqLworCisvKiAjaW5jbHVk ZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCisgKiAgQ3JlYXRl IGFuZCB0aHJvdyBhbiBlcnJvciAob3JpZ2luYXRpbmcgZnJvbSBEdWt0YXBlIGludGVybmFsbHkp CisgKgorICogIFB1c2ggYW4gZXJyb3Igb2JqZWN0IG9uIHRvcCBvZiB0aGUgc3RhY2ssIHBvc3Np Ymx5IHRocm93IGF1Z21lbnRpbmcKKyAqICB0aGUgZXJyb3IsIGFuZCBmaW5hbGx5IGxvbmdqbXAu CisgKgorICogIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhl IGN1cnJlbnQgZXJyb3IsIHdlIG1pZ2h0CisgKiAgZW50ZXIgYW4gaW5maW5pdGUgcmVjdXJzaW9u IGxvb3AuICBUaGlzIGlzIHByZXZlbnRlZCBieSBkZXRlY3RpbmcgYQorICogICJkb3VibGUgZmF1 bHQiIHRocm91Z2ggdGhlIGhlYXAtPmNyZWF0aW5nX2Vycm9yIGZsYWc7IHRoZSByZWN1cnNpb24K KyAqICB0aGVuIHN0b3BzIGF0IHRoZSBzZWNvbmQgbGV2ZWwuCisgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9WRVJCT1NFX0VSUk9SUykKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19lcnJfY3JlYXRl X2FuZF90aHJvdyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfZXJyY29kZV90IGNvZGUsIGNvbnN0IGNo YXIgKm1zZywgY29uc3QgY2hhciAqZmlsZW5hbWUsIGR1a19pbnRfdCBsaW5lKSB7CisjZWxzZQor RFVLX0lOVEVSTkFMIHZvaWQgZHVrX2Vycl9jcmVhdGVfYW5kX3Rocm93KGR1a19odGhyZWFkICp0 aHIsIGR1a19lcnJjb2RlX3QgY29kZSkgeworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZF UkJPU0VfRVJST1JTKQorCURVS19ERChEVUtfRERQUklOVCgiZHVrX2Vycl9jcmVhdGVfYW5kX3Ro cm93KCk6IGNvZGU9JWxkLCBtc2c9JXMsIGZpbGVuYW1lPSVzLCBsaW5lPSVsZCIsCisJICAgICAg ICAgICAgICAgICAgIChsb25nKSBjb2RlLCAoY29uc3QgY2hhciAqKSBtc2csCisJICAgICAgICAg ICAgICAgICAgIChjb25zdCBjaGFyICopIGZpbGVuYW1lLCAobG9uZykgbGluZSkpOworI2Vsc2UK KwlEVUtfREQoRFVLX0REUFJJTlQoImR1a19lcnJfY3JlYXRlX2FuZF90aHJvdygpOiBjb2RlPSVs ZCIsIChsb25nKSBjb2RlKSk7CisjZW5kaWYKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOwor CisJLyogRXZlbiB0aG91Z2ggbmVzdGVkIGNhbGwgaXMgcG9zc2libGUgYmVjYXVzZSB3ZSB0aHJv dyBhbiBlcnJvciB3aGVuCisJICogdHJ5aW5nIHRvIGNyZWF0ZSBhbiBlcnJvciwgdGhlIHBvdGVu dGlhbCBlcnJvcnMgbXVzdCBoYXBwZW4gYmVmb3JlCisJICogdGhlIGxvbmdqbXAgc3RhdGUgaXMg Y29uZmlndXJlZC4KKwkgKi8KKwlEVUtfQVNTRVJUX0xKU1RBVEVfVU5TRVQodGhyLT5oZWFwKTsK KworCS8qIFN5bmMgc28gdGhhdCBhdWdtZW50YXRpb24gc2VlcyB1cC10by1kYXRlIGFjdGl2YXRp b25zLCBOVUxMCisJICogdGhyLT5wdHJfY3Vycl9wYyBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaWYg c2lkZSBlZmZlY3RzIG9jY3VyCisJICogaW4gYXVnbWVudGF0aW9uIG9yIGxvbmdqbXAgaGFuZGxp bmcuCisJICovCisJZHVrX2h0aHJlYWRfc3luY19hbmRfbnVsbF9jdXJycGModGhyKTsKKworCS8q CisJICogIENyZWF0ZSBhbmQgcHVzaCBhbiBlcnJvciBvYmplY3Qgb250byB0aGUgdG9wIG9mIHN0 YWNrLgorCSAqICBUaGUgZXJyb3IgaXMgcG90ZW50aWFsbHkgYXVnbWVudGVkIGJlZm9yZSB0aHJv d2luZy4KKwkgKgorCSAqICBJZiBhICJkb3VibGUgZXJyb3IiIG9jY3VycywgdXNlIGEgZml4ZWQg ZXJyb3IgaW5zdGFuY2UKKwkgKiAgdG8gYXZvaWQgZnVydGhlciB0cm91YmxlLgorCSAqLworCisJ aWYgKHRoci0+aGVhcC0+Y3JlYXRpbmdfZXJyb3IpIHsKKwkJZHVrX3R2YWwgdHZfdmFsOworCQlk dWtfaG9iamVjdCAqaF9lcnI7CisKKwkJdGhyLT5oZWFwLT5jcmVhdGluZ19lcnJvciA9IDA7CisK KwkJaF9lcnIgPSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0RPVUJMRV9FUlJPUl07CisJCWlmICho X2VyciAhPSBOVUxMKSB7CisJCQlEVUtfRChEVUtfRFBSSU5UKCJkb3VibGUgZmF1bHQgZGV0ZWN0 ZWQgLT4gdXNlIGJ1aWx0LWluIGZpeGVkICdkb3VibGUgZXJyb3InIGluc3RhbmNlIikpOworCQkJ RFVLX1RWQUxfU0VUX09CSkVDVCgmdHZfdmFsLCBoX2Vycik7CisJCX0gZWxzZSB7CisJCQlEVUtf RChEVUtfRFBSSU5UKCJkb3VibGUgZmF1bHQgZGV0ZWN0ZWQ7IHRoZXJlIGlzIG5vIGJ1aWx0LWlu IGZpeGVkICdkb3VibGUgZXJyb3InIGluc3RhbmNlICIKKwkJCSAgICAgICAgICAgICAgICAgIi0+ IHVzZSB0aGUgZXJyb3IgY29kZSBhcyBhIG51bWJlciIpKTsKKwkJCURVS19UVkFMX1NFVF9JMzIo JnR2X3ZhbCwgKGR1a19pbnQzMl90KSBjb2RlKTsKKwkJfQorCisJCWR1a19lcnJfc2V0dXBfbGpz dGF0ZTEodGhyLCBEVUtfTEpfVFlQRV9USFJPVywgJnR2X3ZhbCk7CisKKwkJLyogTm8gYXVnbWVu dGF0aW9uIHRvIGF2b2lkIGFueSBhbGxvY2F0aW9ucyBvciBzaWRlIGVmZmVjdHMuICovCisJfSBl bHNlIHsKKwkJLyogUHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24uICBFeHRyYSBjYWxsIHN0YWNr IGFuZCBDCisJCSAqIHJlY3Vyc2lvbiBoZWFkcm9vbSAoc2VlIEdILTE5MSkgaXMgYWRkZWQgZm9y IGF1Z21lbnRhdGlvbi4KKwkJICogVGhhdCBpcyBub3cgc2lnbmFsbGVkIGJ5IGhlYXAtPmF1Z21l bnRpbmcgZXJyb3IgYW5kIHRha2VuCisJCSAqIGludG8gYWNjb3VudCBpbiBjYWxsIGhhbmRsaW5n IHdpdGhvdXQgYW4gZXhwbGljaXQgbGltaXQgYnVtcC4KKwkJICovCisJCXRoci0+aGVhcC0+Y3Jl YXRpbmdfZXJyb3IgPSAxOworCisJCWR1a19yZXF1aXJlX3N0YWNrKHRociwgMSk7CisKKwkJLyog WFhYOiB1c3VhbGx5IHVubmVjZXNzYXJ5ICclcycgZm9ybWF0dGluZyBoZXJlLCBidXQgY2Fubm90 CisJCSAqIHVzZSAnbXNnJyBhcyBhIGZvcm1hdCBzdHJpbmcgZGlyZWN0bHkuCisJCSAqLworI2lm IGRlZmluZWQoRFVLX1VTRV9WRVJCT1NFX0VSUk9SUykKKwkJZHVrX3B1c2hfZXJyb3Jfb2JqZWN0 X3Jhdyh0aHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSB8IERVS19FUlJDT0RF X0ZMQUdfTk9CTEFNRV9GSUxFTElORSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl bmFtZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLAorCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICIlcyIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNo YXIgKikgbXNnKTsKKyNlbHNlCisJCWR1a19wdXNoX2Vycm9yX29iamVjdF9yYXcodGhyLAorCQkg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgfCBEVUtfRVJSQ09ERV9GTEFHX05PQkxBTUVf RklMRUxJTkUsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKwkJICAgICAgICAg ICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwor I2VuZGlmCisKKwkJLyogTm90ZSB0aGF0IGFuIGFsbG9jIGVycm9yIG1heSBoYXBwZW4gZHVyaW5n IGVycm9yIGF1Z21lbnRhdGlvbi4KKwkJICogVGhpcyBtYXkgaGFwcGVuIGJvdGggd2hlbiB0aGUg b3JpZ2luYWwgZXJyb3IgaXMgYW4gYWxsb2MgZXJyb3IKKwkJICogYW5kIHdoZW4gaXQncyBzb21l dGhpbmcgZWxzZS4gIEJlY2F1c2UgYW55IGVycm9yIGluIGF1Z21lbnRhdGlvbgorCQkgKiBtdXN0 IGJlIGhhbmRsZWQgY29ycmVjdGx5IGFueXdheSwgdGhlcmUncyBubyBzcGVjaWFsIGNoZWNrIGZv cgorCQkgKiBhdm9pZGluZyBpdCBmb3IgYWxsb2MgZXJyb3JzICh0aGlzIGRpZmZlcnMgZnJvbSBE dWt0YXBlIDEueCkuCisJCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VSUk9SX1RI Uk9XKQorCQlEVUtfREREKERVS19ERERQUklOVCgiVEhST1cgRVJST1IgKElOVEVSTkFMKTogJSFp VCAoYmVmb3JlIHRocm93IGF1Z21lbnQpIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGR1a190 dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQlkdWtfZXJyX2F1Z21lbnRfZXJyb3Jf dGhyb3codGhyKTsKKyNlbmRpZgorCisJCWR1a19lcnJfc2V0dXBfbGpzdGF0ZTEodGhyLCBEVUtf TEpfVFlQRV9USFJPVywgRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKSk7CisJCXRoci0+aGVh cC0+Y3JlYXRpbmdfZXJyb3IgPSAwOworCisJCS8qIEVycm9yIGlzIG5vdyBjcmVhdGVkIGFuZCB3 ZSBhc3N1bWUgbm8gZXJyb3JzIGNhbiBvY2N1ciBhbnkKKwkJICogbW9yZS4gIENoZWNrIGZvciBk ZWJ1Z2dlciBUaHJvdyBpbnRlZ3JhdGlvbiBvbmx5IHdoZW4gdGhlCisJCSAqIGVycm9yIGlzIGNv bXBsZXRlLiAgSWYgd2UgZW50ZXIgZGVidWdnZXIgbWVzc2FnZSBsb29wLAorCQkgKiBjcmVhdGlu Z19lcnJvciBtdXN0IGJlIDAgc28gdGhhdCBlcnJvcnMgY2FuIGJlIHRocm93biBpbgorCQkgKiB0 aGUgcGF1c2VkIHN0YXRlLCBlLmcuIGluIEV2YWwgY29tbWFuZHMuCisJCSAqLworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorCQlkdWtfZXJyX2NoZWNrX2RlYnVnZ2VyX2lu dGVncmF0aW9uKHRocik7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqICBGaW5hbGx5LCBsb25nam1w CisJICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiVEhST1cgRVJST1IgKElOVEVSTkFMKTog JSFpVCwgJSFpVCAoYWZ0ZXIgdGhyb3cgYXVnbWVudCkiLAorCSAgICAgICAgICAgICAgICAgICAg IChkdWtfdHZhbCAqKSAmdGhyLT5oZWFwLT5sai52YWx1ZTEsIChkdWtfdHZhbCAqKSAmdGhyLT5o ZWFwLT5sai52YWx1ZTIpKTsKKworCWR1a19lcnJfbG9uZ2ptcCh0aHIpOworCURVS19VTlJFQUNI QUJMRSgpOworfQorCisvKgorICogIEhlbHBlciBmb3IgQyBmdW5jdGlvbiBjYWxsIG5lZ2F0aXZl IHJldHVybiB2YWx1ZXMuCisgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2Vycm9yX3Rocm93 X2Zyb21fbmVnYXRpdmVfcmMoZHVrX2h0aHJlYWQgKnRociwgZHVrX3JldF90IHJjKSB7CisJRFVL X0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChyYyA8IDApOworCisJLyoKKwkgKiAg VGhlIF9fRklMRV9fIGFuZCBfX0xJTkVfXyBpbmZvcm1hdGlvbiBpcyBpbnRlbnRpb25hbGx5IG5v dCB1c2VkIGluIHRoZQorCSAqICBjcmVhdGlvbiBvZiB0aGUgZXJyb3Igb2JqZWN0LCBhcyBpdCBp c24ndCB1c2VmdWwgaW4gdGhlIHRyYWNlZGF0YS4gIFRoZQorCSAqICB0cmFjZWRhdGEgc3RpbGwg Y29udGFpbnMgdGhlIGZ1bmN0aW9uIHdoaWNoIHJldHVybmVkIHRoZSBuZWdhdGl2ZSByZXR1cm4K KwkgKiAgY29kZSwgYW5kIGhhdmluZyB0aGUgZmlsZS9saW5lIG9mIHRoaXMgZnVuY3Rpb24gaXNu J3QgdmVyeSB1c2VmdWwuCisJICoKKwkgKiAgVGhlIGVycm9yIG1lc3NhZ2VzIGZvciBEVUtfUkVU X3h4eCBzaG9ydGhhbmQgYXJlIGludGVudGlvbmFsbHkgdmVyeQorCSAqICBtaW5pbWFsOiB0aGV5 J3JlIG9ubHkgcmVhbGx5IHVzZWZ1bCBmb3IgbG93IG1lbW9yeSB0YXJnZXRzLgorCSAqLworCisJ ZHVrX2Vycm9yX3Jhdyh0aHIsIC1yYywgTlVMTCwgMCwgImVycm9yIChyYyAlbGQpIiwgKGxvbmcp IHJjKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisvKgorICogIGR1a19oYnVmZmVy IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFs LmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKiBBbGxvY2F0ZSBhIG5ldyBkdWtfaGJ1ZmZl ciBvZiBhIGNlcnRhaW4gdHlwZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdAorICogKE5VTEwg b24gZXJyb3IpLiAgV3JpdGUgYnVmZmVyIGRhdGEgcG9pbnRlciB0byAnb3V0X2J1ZmRhdGEnIChv bmx5IGlmCisgKiBhbGxvY2F0aW9uIHN1Y2Nlc3NmdWwpLgorICovCitEVUtfSU5URVJOQUwgZHVr X2hidWZmZXIgKmR1a19oYnVmZmVyX2FsbG9jKGR1a19oZWFwICpoZWFwLCBkdWtfc2l6ZV90IHNp emUsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MsIHZvaWQgKipvdXRfYnVmZGF0YSkgeworCWR1a19o YnVmZmVyICpyZXMgPSBOVUxMOworCWR1a19zaXplX3QgaGVhZGVyX3NpemU7CisJZHVrX3NpemVf dCBhbGxvY19zaXplOworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQo b3V0X2J1ZmRhdGEgIT0gTlVMTCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiYWxsb2NhdGUg aGJ1ZmZlciIpKTsKKworCS8qIFNpemUgc2FuaXR5IGNoZWNrLiAgU2hvdWxkIG5vdCBiZSBuZWNl c3NhcnkgYmVjYXVzZSBjYWxsZXIgaXMKKwkgKiByZXF1aXJlZCB0byBjaGVjayB0aGlzLCBidXQg d2UgZG9uJ3Qgd2FudCB0byBjYXVzZSBhIHNlZ2ZhdWx0CisJICogaWYgdGhlIHNpemUgd3JhcHMg ZWl0aGVyIGluIGR1a19zaXplX3QgY29tcHV0YXRpb24gb3Igd2hlbgorCSAqIHN0b3JpbmcgdGhl IHNpemUgaW4gYSAxNi1iaXQgZmllbGQuCisJICovCisJaWYgKHNpemUgPiBEVUtfSEJVRkZFUl9N QVhfQllURUxFTikgeworCQlEVUtfRChEVUtfRFBSSU5UKCJoYnVmZmVyIGFsbG9jIGZhaWxlZDog c2l6ZSB0b28gbGFyZ2U6ICVsZCIsIChsb25nKSBzaXplKSk7CisJCXJldHVybiBOVUxMOyAgLyog bm8gbmVlZCB0byB3cml0ZSAnb3V0X2J1ZmRhdGEnICovCisJfQorCisJaWYgKGZsYWdzICYgRFVL X0JVRl9GTEFHX0VYVEVSTkFMKSB7CisJCWhlYWRlcl9zaXplID0gc2l6ZW9mKGR1a19oYnVmZmVy X2V4dGVybmFsKTsKKwkJYWxsb2Nfc2l6ZSA9IHNpemVvZihkdWtfaGJ1ZmZlcl9leHRlcm5hbCk7 CisJfSBlbHNlIGlmIChmbGFncyAmIERVS19CVUZfRkxBR19EWU5BTUlDKSB7CisJCWhlYWRlcl9z aXplID0gc2l6ZW9mKGR1a19oYnVmZmVyX2R5bmFtaWMpOworCQlhbGxvY19zaXplID0gc2l6ZW9m KGR1a19oYnVmZmVyX2R5bmFtaWMpOworCX0gZWxzZSB7CisJCWhlYWRlcl9zaXplID0gc2l6ZW9m KGR1a19oYnVmZmVyX2ZpeGVkKTsKKwkJYWxsb2Nfc2l6ZSA9IHNpemVvZihkdWtfaGJ1ZmZlcl9m aXhlZCkgKyBzaXplOworCQlEVUtfQVNTRVJUKGFsbG9jX3NpemUgPj0gc2l6ZW9mKGR1a19oYnVm ZmVyX2ZpeGVkKSk7ICAvKiBubyB3cmFwcGluZyAqLworCX0KKworCXJlcyA9IChkdWtfaGJ1ZmZl ciAqKSBEVUtfQUxMT0MoaGVhcCwgYWxsb2Nfc2l6ZSk7CisJaWYgKERVS19VTkxJS0VMWShyZXMg PT0gTlVMTCkpIHsKKwkJZ290byBhbGxvY19lcnJvcjsKKwl9CisKKwkvKiB6ZXJvIGV2ZXJ5dGhp bmcgdW5sZXNzIHJlcXVlc3RlZCBub3QgdG8gZG8gc28gKi8KKyNpZiBkZWZpbmVkKERVS19VU0Vf WkVST19CVUZGRVJfREFUQSkKKwlkdWtfbWVtemVybygodm9pZCAqKSByZXMsCisJICAgICAgICAg ICAgKGZsYWdzICYgRFVLX0JVRl9GTEFHX05PWkVSTykgPyBoZWFkZXJfc2l6ZSA6IGFsbG9jX3Np emUpOworI2Vsc2UKKwlkdWtfbWVtemVybygodm9pZCAqKSByZXMsIGhlYWRlcl9zaXplKTsKKyNl bmRpZgorCisJaWYgKGZsYWdzICYgRFVLX0JVRl9GTEFHX0VYVEVSTkFMKSB7CisJCWR1a19oYnVm ZmVyX2V4dGVybmFsICpoOworCQloID0gKGR1a19oYnVmZmVyX2V4dGVybmFsICopIHJlczsKKwkJ RFVLX1VOUkVGKGgpOworCQkqb3V0X2J1ZmRhdGEgPSBOVUxMOworI2lmIGRlZmluZWQoRFVLX1VT RV9FWFBMSUNJVF9OVUxMX0lOSVQpCisjaWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQVFIxNikKKy8q IHRoZSBjb21wcmVzc2VkIHBvaW50ZXIgaXMgemVyb2VkIHdoaWNoIG1hcHMgdG8gTlVMTCwgc28g bm90aGluZyB0byBkby4gKi8KKyNlbHNlCisJCURVS19IQlVGRkVSX0VYVEVSTkFMX1NFVF9EQVRB X1BUUihoZWFwLCBoLCBOVUxMKTsKKyNlbmRpZgorI2VuZGlmCisJCURVS19BU1NFUlQoRFVLX0hC VUZGRVJfRVhURVJOQUxfR0VUX0RBVEFfUFRSKGhlYXAsIGgpID09IE5VTEwpOworCX0gZWxzZSBp ZiAoZmxhZ3MgJiBEVUtfQlVGX0ZMQUdfRFlOQU1JQykgeworCQlkdWtfaGJ1ZmZlcl9keW5hbWlj ICpoID0gKGR1a19oYnVmZmVyX2R5bmFtaWMgKikgcmVzOworCQl2b2lkICpwdHI7CisKKwkJaWYg KHNpemUgPiAwKSB7CisJCQlEVUtfQVNTRVJUKCEoZmxhZ3MgJiBEVUtfQlVGX0ZMQUdfRVhURVJO QUwpKTsgIC8qIGFsbG9jIGV4dGVybmFsIHdpdGggc2l6ZSB6ZXJvICovCisJCQlEVUtfREREKERV S19ERERQUklOVCgiZHluYW1pYyBidWZmZXIgd2l0aCBub256ZXJvIHNpemUsIGFsbG9jIGFjdHVh bCBidWZmZXIiKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1pFUk9fQlVGRkVSX0RBVEEpCisJCQlw dHIgPSBEVUtfQUxMT0NfWkVST0VEKGhlYXAsIHNpemUpOworI2Vsc2UKKwkJCXB0ciA9IERVS19B TExPQyhoZWFwLCBzaXplKTsKKyNlbmRpZgorCQkJaWYgKERVS19VTkxJS0VMWShwdHIgPT0gTlVM TCkpIHsKKwkJCQkvKiBCZWNhdXNlIHNpemUgPiAwLCBOVUxMIGNoZWNrIGlzIGNvcnJlY3QgKi8K KwkJCQlnb3RvIGFsbG9jX2Vycm9yOworCQkJfQorCQkJKm91dF9idWZkYXRhID0gcHRyOworCisJ CQlEVUtfSEJVRkZFUl9EWU5BTUlDX1NFVF9EQVRBX1BUUihoZWFwLCBoLCBwdHIpOworCQl9IGVs c2UgeworCQkJKm91dF9idWZkYXRhID0gTlVMTDsKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhQTElD SVRfTlVMTF9JTklUKQorI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisvKiB0aGUgY29t cHJlc3NlZCBwb2ludGVyIGlzIHplcm9lZCB3aGljaCBtYXBzIHRvIE5VTEwsIHNvIG5vdGhpbmcg dG8gZG8uICovCisjZWxzZQorCQkJRFVLX0hCVUZGRVJfRFlOQU1JQ19TRVRfREFUQV9QVFIoaGVh cCwgaCwgTlVMTCk7CisjZW5kaWYKKyNlbmRpZgorCQkJRFVLX0FTU0VSVChEVUtfSEJVRkZFUl9E WU5BTUlDX0dFVF9EQVRBX1BUUihoZWFwLCBoKSA9PSBOVUxMKTsKKwkJfQorCX0gZWxzZSB7CisJ CSpvdXRfYnVmZGF0YSA9ICh2b2lkICopICgoZHVrX2hidWZmZXJfZml4ZWQgKikgKHZvaWQgKikg cmVzICsgMSk7CisJfQorCisJRFVLX0hCVUZGRVJfU0VUX1NJWkUocmVzLCBzaXplKTsKKworCURV S19IRUFQSERSX1NFVF9UWVBFKCZyZXMtPmhkciwgRFVLX0hUWVBFX0JVRkZFUik7CisJaWYgKGZs YWdzICYgRFVLX0JVRl9GTEFHX0RZTkFNSUMpIHsKKwkJRFVLX0hCVUZGRVJfU0VUX0RZTkFNSUMo cmVzKTsKKwkJaWYgKGZsYWdzICYgRFVLX0JVRl9GTEFHX0VYVEVSTkFMKSB7CisJCQlEVUtfSEJV RkZFUl9TRVRfRVhURVJOQUwocmVzKTsKKwkJfQorCX0gZWxzZSB7CisJCURVS19BU1NFUlQoIShm bGFncyAmIERVS19CVUZfRkxBR19FWFRFUk5BTCkpOworCX0KKyAgICAgICAgRFVLX0hFQVBfSU5T RVJUX0lOVE9fSEVBUF9BTExPQ0FURUQoaGVhcCwgJnJlcy0+aGRyKTsKKworCURVS19EREQoRFVL X0RERFBSSU5UKCJhbGxvY2F0ZWQgaGJ1ZmZlcjogJXAiLCAodm9pZCAqKSByZXMpKTsKKwlyZXR1 cm4gcmVzOworCisgYWxsb2NfZXJyb3I6CisJRFVLX0REKERVS19ERFBSSU5UKCJoYnVmZmVyIGFs bG9jYXRpb24gZmFpbGVkIikpOworCisJRFVLX0ZSRUUoaGVhcCwgcmVzKTsKKwlyZXR1cm4gTlVM TDsgIC8qIG5vIG5lZWQgdG8gd3JpdGUgJ291dF9idWZkYXRhJyAqLworfQorCisvKiBGb3IgaW5k aXJlY3QgYWxsb2NzLiAqLworCitEVUtfSU5URVJOQUwgdm9pZCAqZHVrX2hidWZmZXJfZ2V0X2R5 bmFsbG9jX3B0cihkdWtfaGVhcCAqaGVhcCwgdm9pZCAqdWQpIHsKKwlkdWtfaGJ1ZmZlcl9keW5h bWljICpidWYgPSAoZHVrX2hidWZmZXJfZHluYW1pYyAqKSB1ZDsKKwlEVUtfVU5SRUYoaGVhcCk7 CisJcmV0dXJuICh2b2lkICopIERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX0RBVEFfUFRSKGhlYXAs IGJ1Zik7Cit9CisvKgorICogIGR1a19oYnVmZmVyIG9wZXJhdGlvbnMgc3VjaCBhcyByZXNpemlu ZyBhbmQgaW5zZXJ0aW5nL2FwcGVuZGluZyBkYXRhIHRvCisgKiAgYSBkeW5hbWljIGJ1ZmZlci4K KyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICov CisKKy8qCisgKiAgUmVzaXppbmcKKyAqLworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaGJ1ZmZl cl9yZXNpemUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXJfZHluYW1pYyAqYnVmLCBkdWtf c2l6ZV90IG5ld19zaXplKSB7CisJdm9pZCAqcmVzOworCWR1a19zaXplX3QgcHJldl9zaXplOwor CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChidWYgIT0gTlVMTCk7CisJ RFVLX0FTU0VSVChEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQyhidWYpKTsKKwlEVUtfQVNTRVJUKCFE VUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoYnVmKSk7CisKKwkvKgorCSAqICBNYXhpbXVtIHNpemUg Y2hlY2sKKwkgKi8KKworCWlmIChuZXdfc2l6ZSA+IERVS19IQlVGRkVSX01BWF9CWVRFTEVOKSB7 CisJCURVS19FUlJPUl9SQU5HRSh0aHIsICJidWZmZXIgdG9vIGxvbmciKTsKKwkJRFVLX1dPX05P UkVUVVJOKHJldHVybjspOworCX0KKworCS8qCisJICogIE5vdGU6IHVzZSBpbmRpcmVjdCByZWFs bG9jIHZhcmlhbnQganVzdCBpbiBjYXNlIG1hcmstYW5kLXN3ZWVwCisJICogIChmaW5hbGl6ZXJz KSBtaWdodCByZXNpemUgdGhpcyBzYW1lIGJ1ZmZlciBkdXJpbmcgZ2FyYmFnZQorCSAqICBjb2xs ZWN0aW9uLgorCSAqLworCisJcmVzID0gRFVLX1JFQUxMT0NfSU5ESVJFQ1QodGhyLT5oZWFwLCBk dWtfaGJ1ZmZlcl9nZXRfZHluYWxsb2NfcHRyLCAodm9pZCAqKSBidWYsIG5ld19zaXplKTsKKwlp ZiAoRFVLX0xJS0VMWShyZXMgIT0gTlVMTCB8fCBuZXdfc2l6ZSA9PSAwKSkgeworCQkvKiAncmVz JyBtYXkgYmUgTlVMTCBpZiBuZXcgYWxsb2NhdGlvbiBzaXplIGlzIDAuICovCisKKwkJRFVLX0RE RChEVUtfREREUFJJTlQoInJlc2l6ZWQgZHluYW1pYyBidWZmZXIgJXA6JWxkIC0+ICVwOiVsZCIs CisJCSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIERVS19IQlVGRkVSX0RZTkFNSUNfR0VU X0RBVEFfUFRSKHRoci0+aGVhcCwgYnVmKSwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX1NJWkUoYnVmKSwKKwkJICAgICAgICAgICAgICAgICAg ICAgKHZvaWQgKikgcmVzLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgbmV3X3NpemUp KTsKKworCQkvKgorCQkgKiAgVGhlIGVudGlyZSBhbGxvY2F0ZWQgYnVmZmVyIGFyZWEsIHJlZ2Fy ZGxlc3Mgb2YgYWN0dWFsIHVzZWQKKwkJICogIHNpemUsIGlzIGtlcHQgemVyb2VkIGluIHJlc2l6 ZXMgZm9yIHNpbXBsaWNpdHkuICBJZiB0aGUgYnVmZmVyCisJCSAqICBpcyBncm93biwgemVybyB0 aGUgbmV3IHBhcnQuCisJCSAqLworCisJCXByZXZfc2l6ZSA9IERVS19IQlVGRkVSX0RZTkFNSUNf R0VUX1NJWkUoYnVmKTsKKwkJaWYgKG5ld19zaXplID4gcHJldl9zaXplKSB7CisJCQlEVUtfQVNT RVJUKG5ld19zaXplIC0gcHJldl9zaXplID4gMCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1pFUk9f QlVGRkVSX0RBVEEpCisJCQlkdWtfbWVtemVybygodm9pZCAqKSAoKGNoYXIgKikgcmVzICsgcHJl dl9zaXplKSwKKwkJCSAgICAgICAgICAgIChkdWtfc2l6ZV90KSAobmV3X3NpemUgLSBwcmV2X3Np emUpKTsKKyNlbmRpZgorCQl9CisKKwkJRFVLX0hCVUZGRVJfRFlOQU1JQ19TRVRfU0laRShidWYs IG5ld19zaXplKTsKKwkJRFVLX0hCVUZGRVJfRFlOQU1JQ19TRVRfREFUQV9QVFIodGhyLT5oZWFw LCBidWYsIHJlcyk7CisJfSBlbHNlIHsKKwkJRFVLX0VSUk9SX0FMTE9DX0ZBSUxFRCh0aHIpOwor CQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJRFVLX0FTU0VSVChyZXMgIT0gTlVM TCB8fCBuZXdfc2l6ZSA9PSAwKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hidWZmZXJf cmVzZXQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXJfZHluYW1pYyAqYnVmKSB7CisJRFVL X0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChidWYgIT0gTlVMTCk7CisJRFVLX0FT U0VSVChEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQyhidWYpKTsKKwlEVUtfQVNTRVJUKCFEVUtfSEJV RkZFUl9IQVNfRVhURVJOQUwoYnVmKSk7CisKKwlkdWtfaGJ1ZmZlcl9yZXNpemUodGhyLCBidWYs IDApOworfQorLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAq LworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorRFVLX0lOVEVS TkFMIGR1a191aW50X3QgZHVrX2hidWZvYmpfY2xhbXBfYnl0ZWxlbmd0aChkdWtfaGJ1Zm9iaiAq aF9idWZvYmosIGR1a191aW50X3QgbGVuKSB7CisJZHVrX3VpbnRfdCBidWZfc2l6ZTsKKwlkdWtf dWludF90IGJ1Zl9hdmFpbDsKKworCURVS19BU1NFUlQoaF9idWZvYmogIT0gTlVMTCk7CisJRFVL X0FTU0VSVChoX2J1Zm9iai0+YnVmICE9IE5VTEwpOworCisJYnVmX3NpemUgPSAoZHVrX3VpbnRf dCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaF9idWZvYmotPmJ1Zik7CisJaWYgKGhfYnVmb2JqLT5v ZmZzZXQgPiBidWZfc2l6ZSkgeworCQkvKiBTbGljZSBzdGFydGluZyBwb2ludCBpcyBiZXlvbmQg Y3VycmVudCBsZW5ndGguICovCisJCXJldHVybiAwOworCX0KKwlidWZfYXZhaWwgPSBidWZfc2l6 ZSAtIGhfYnVmb2JqLT5vZmZzZXQ7CisKKwlyZXR1cm4gYnVmX2F2YWlsID49IGxlbiA/IGxlbiA6 IGJ1Zl9hdmFpbDsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAq LworLyoKKyAqICBkdWtfaGVhcCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLgorICovCisKKy8qICNp bmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ST01fU1RSSU5HUykKKy8qIEZpeGVkIHNlZWQgdmFsdWUgdXNlZCB3aXRoIFJP TSBzdHJpbmdzLiAqLworI2RlZmluZSBEVUtfX0ZJWEVEX0hBU0hfU0VFRCAgICAgICAweGFiY2Qx MjM0CisjZW5kaWYKKworLyoKKyAqICBGcmVlIGEgaGVhcCBvYmplY3QuCisgKgorICogIEZyZWUg aGVhcCBvYmplY3QgYW5kIGl0cyBpbnRlcm5hbCAobm9uLWhlYXApIHBvaW50ZXJzLiAgQXNzdW1l cyB0aGF0CisgKiAgY2FsbGVyIGhhcyByZW1vdmVkIHRoZSBvYmplY3QgZnJvbSBoZWFwIGFsbG9j YXRlZCBsaXN0IG9yIHRoZSBzdHJpbmcKKyAqICBpbnRlcm4gdGFibGUsIGFuZCBhbnkgd2VhayBy ZWZlcmVuY2VzICh3aGljaCBzdHJpbmdzIG1heSBoYXZlKSBoYXZlCisgKiAgYmVlbiBhbHJlYWR5 IGRlYWx0IHdpdGguCisgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2ZyZWVfaG9iamVjdChk dWtfaGVhcCAqaGVhcCwgZHVrX2hvYmplY3QgKmgpIHsKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVM TCk7CisJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCisJRFVLX0ZSRUUoaGVhcCwgRFVLX0hPQkpF Q1RfR0VUX1BST1BTKGhlYXAsIGgpKTsKKworCWlmIChEVUtfSE9CSkVDVF9JU19DT01QRlVOQyho KSkgeworCQlkdWtfaGNvbXBmdW5jICpmID0gKGR1a19oY29tcGZ1bmMgKikgaDsKKwkJRFVLX1VO UkVGKGYpOworCQkvKiBDdXJyZW50bHkgbm90aGluZyB0byBmcmVlOyAnZGF0YScgaXMgYSBoZWFw IG9iamVjdCAqLworCX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfTkFURlVOQyhoKSkgeworCQlk dWtfaG5hdGZ1bmMgKmYgPSAoZHVrX2huYXRmdW5jICopIGg7CisJCURVS19VTlJFRihmKTsKKwkJ LyogQ3VycmVudGx5IG5vdGhpbmcgdG8gZnJlZSAqLworCX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1Rf SVNfVEhSRUFEKGgpKSB7CisJCWR1a19odGhyZWFkICp0ID0gKGR1a19odGhyZWFkICopIGg7CisJ CWR1a19hY3RpdmF0aW9uICphY3Q7CisKKwkJRFVLX0ZSRUUoaGVhcCwgdC0+dmFsc3RhY2spOwor CisJCS8qIERvbid0IGZyZWUgaC0+cmVzdW1lciBiZWNhdXNlIGl0IGV4aXN0cyBpbiB0aGUgaGVh cC4KKwkJICogQ2FsbHN0YWNrIGVudHJpZXMgYWxzbyBjb250YWluIGZ1bmN0aW9uIHBvaW50ZXJz IHdoaWNoCisJCSAqIGFyZSBub3QgZnJlZWQgZm9yIHRoZSBzYW1lIHJlYXNvbi4gIFRoZXkgYXJl IGRlY3JlZgorCQkgKiBmaW5hbGl6ZWQgYW5kIHRoZSB0YXJnZXRzIGFyZSBmcmVlZCBpZiBuZWNl c3NhcnkgYmFzZWQKKwkJICogb24gdGhlaXIgcmVmY291bnQgKG9yIHJlYWNoYWJpbGl0eSkuCisJ CSAqLworCQlmb3IgKGFjdCA9IHQtPmNhbGxzdGFja19jdXJyOyBhY3QgIT0gTlVMTDspIHsKKwkJ CWR1a19hY3RpdmF0aW9uICphY3RfbmV4dDsKKwkJCWR1a19jYXRjaGVyICpjYXQ7CisKKwkJCWZv ciAoY2F0ID0gYWN0LT5jYXQ7IGNhdCAhPSBOVUxMOykgeworCQkJCWR1a19jYXRjaGVyICpjYXRf bmV4dDsKKworCQkJCWNhdF9uZXh0ID0gY2F0LT5wYXJlbnQ7CisJCQkJRFVLX0ZSRUUoaGVhcCwg KHZvaWQgKikgY2F0KTsKKwkJCQljYXQgPSBjYXRfbmV4dDsKKwkJCX0KKworCQkJYWN0X25leHQg PSBhY3QtPnBhcmVudDsKKwkJCURVS19GUkVFKGhlYXAsICh2b2lkICopIGFjdCk7CisJCQlhY3Qg PSBhY3RfbmV4dDsKKwkJfQorCisJCS8qIFhYWDogd2l0aCAnY2FsbGVyJyBwcm9wZXJ0eSB0aGUg Y2FsbHN0YWNrIHdvdWxkIG5lZWQKKwkJICogdG8gYmUgdW53b3VuZCB0byB1cGRhdGUgdGhlICdj YWxsZXInIHByb3BlcnRpZXMgb2YKKwkJICogZnVuY3Rpb25zIGluIHRoZSBjYWxsc3RhY2suCisJ CSAqLworCX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfQk9VTkRGVU5DKGgpKSB7CisJCWR1a19o Ym91bmRmdW5jICpmID0gKGR1a19oYm91bmRmdW5jICopICh2b2lkICopIGg7CisKKwkJRFVLX0ZS RUUoaGVhcCwgZi0+YXJncyk7CisJfQorCisJRFVLX0ZSRUUoaGVhcCwgKHZvaWQgKikgaCk7Cit9 CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19mcmVlX2hidWZmZXIoZHVrX2hlYXAgKmhlYXAsIGR1 a19oYnVmZmVyICpoKSB7CisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQo aCAhPSBOVUxMKTsKKworCWlmIChEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQyhoKSAmJiAhRFVLX0hC VUZGRVJfSEFTX0VYVEVSTkFMKGgpKSB7CisJCWR1a19oYnVmZmVyX2R5bmFtaWMgKmcgPSAoZHVr X2hidWZmZXJfZHluYW1pYyAqKSBoOworCQlEVUtfREREKERVS19ERERQUklOVCgiZnJlZSBkeW5h bWljIGJ1ZmZlciAlcCIsICh2b2lkICopIERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX0RBVEFfUFRS KGhlYXAsIGcpKSk7CisJCURVS19GUkVFKGhlYXAsIERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX0RB VEFfUFRSKGhlYXAsIGcpKTsKKwl9CisJRFVLX0ZSRUUoaGVhcCwgKHZvaWQgKikgaCk7Cit9CisK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19mcmVlX2hzdHJpbmcoZHVrX2hlYXAgKmhlYXAsIGR1a19o c3RyaW5nICpoKSB7CisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQoaCAh PSBOVUxMKTsKKworCURVS19VTlJFRihoZWFwKTsKKwlEVUtfVU5SRUYoaCk7CisKKyNpZiBkZWZp bmVkKERVS19VU0VfSFNUUklOR19FWFREQVRBKSAmJiBkZWZpbmVkKERVS19VU0VfRVhUU1RSX0ZS RUUpCisJaWYgKERVS19IU1RSSU5HX0hBU19FWFREQVRBKGgpKSB7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJmcmVlIGV4dHN0cjogaHN0cmluZyAlIU8sIGV4dGRhdGE6ICVwIiwKKwkJICAgICAg ICAgICAgICAgICAgICAgaCwgRFVLX0hTVFJJTkdfR0VUX0VYVERBVEEoKGR1a19oc3RyaW5nX2V4 dGVybmFsICopIGgpKSk7CisJCURVS19VU0VfRVhUU1RSX0ZSRUUoaGVhcC0+aGVhcF91ZGF0YSwg KGNvbnN0IHZvaWQgKikgRFVLX0hTVFJJTkdfR0VUX0VYVERBVEEoKGR1a19oc3RyaW5nX2V4dGVy bmFsICopIGgpKTsKKwl9CisjZW5kaWYKKwlEVUtfRlJFRShoZWFwLCAodm9pZCAqKSBoKTsKK30K KworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBfZnJlZV9oZWFwaGRyX3JhdyhkdWtfaGVhcCAq aGVhcCwgZHVrX2hlYXBoZHIgKmhkcikgeworCURVS19BU1NFUlQoaGVhcCk7CisJRFVLX0FTU0VS VChoZHIpOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImZyZWUgaGVhcGhkciAlcCwgaHR5cGUg JWxkIiwgKHZvaWQgKikgaGRyLCAobG9uZykgRFVLX0hFQVBIRFJfR0VUX1RZUEUoaGRyKSkpOwor CisJc3dpdGNoIChEVUtfSEVBUEhEUl9HRVRfVFlQRShoZHIpKSB7CisJY2FzZSBEVUtfSFRZUEVf U1RSSU5HOgorCQlkdWtfZnJlZV9oc3RyaW5nKGhlYXAsIChkdWtfaHN0cmluZyAqKSBoZHIpOwor CQlicmVhazsKKwljYXNlIERVS19IVFlQRV9PQkpFQ1Q6CisJCWR1a19mcmVlX2hvYmplY3QoaGVh cCwgKGR1a19ob2JqZWN0ICopIGhkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURVS19BU1NF UlQoRFVLX0hFQVBIRFJfR0VUX1RZUEUoaGRyKSA9PSBEVUtfSFRZUEVfQlVGRkVSKTsKKwkJZHVr X2ZyZWVfaGJ1ZmZlcihoZWFwLCAoZHVrX2hidWZmZXIgKikgaGRyKTsKKwl9CisKK30KKworLyoK KyAqICBGcmVlIHRoZSBoZWFwLgorICoKKyAqICBGcmVlcyBoZWFwLXJlbGF0ZWQgbm9uLWhlYXAt dHJhY2tlZCBhbGxvY2F0aW9ucyBzdWNoIGFzIHRoZQorICogIHN0cmluZyBpbnRlcm4gdGFibGU7 IHRoZW4gZnJlZXMgdGhlIGhlYXAgYWxsb2NhdGVkIG9iamVjdHM7CisgKiAgYW5kIGZpbmFsbHkg ZnJlZXMgdGhlIGhlYXAgc3RydWN0dXJlIGl0c2VsZi4gIFJlZmVyZW5jZSBjb3VudHMKKyAqICBh bmQgR0MgbWFya2VycyBhcmUgaWdub3JlZCAoYW5kIG5vdCB1cGRhdGVkKSBpbiB0aGlzIHByb2Nl c3MsCisgKiAgYW5kIGZpbmFsaXplcnMgd29uJ3QgYmUgY2FsbGVkLgorICoKKyAqICBUaGUgaGVh cCBwb2ludGVyIGFuZCBoZWFwIG9iamVjdCBwb2ludGVycyBtdXN0IG5vdCBiZSB1c2VkCisgKiAg YWZ0ZXIgdGhpcyBjYWxsLgorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQ0FDSEVfQUNUSVZB VElPTikKK0RVS19MT0NBTCBkdWtfc2l6ZV90IGR1a19faGVhcF9mcmVlX2FjdGl2YXRpb25fZnJl ZWxpc3QoZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfYWN0aXZhdGlvbiAqYWN0OworCWR1a19hY3Rp dmF0aW9uICphY3RfbmV4dDsKKwlkdWtfc2l6ZV90IGNvdW50X2FjdCA9IDA7CisKKwlmb3IgKGFj dCA9IGhlYXAtPmFjdGl2YXRpb25fZnJlZTsgYWN0ICE9IE5VTEw7KSB7CisJCWFjdF9uZXh0ID0g YWN0LT5wYXJlbnQ7CisJCURVS19GUkVFKGhlYXAsICh2b2lkICopIGFjdCk7CisJCWFjdCA9IGFj dF9uZXh0OworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwkJY291bnRfYWN0Kys7CisjZW5k aWYKKwl9CisJaGVhcC0+YWN0aXZhdGlvbl9mcmVlID0gTlVMTDsgIC8qIG5lZWRlZCB3aGVuIGNh bGxlZCBmcm9tIG1hcmstYW5kLXN3ZWVwICovCisJcmV0dXJuIGNvdW50X2FjdDsKK30KKyNlbmRp ZiAgLyogRFVLX1VTRV9DQUNIRV9BQ1RJVkFUSU9OICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf Q0FDSEVfQ0FUQ0hFUikKK0RVS19MT0NBTCBkdWtfc2l6ZV90IGR1a19faGVhcF9mcmVlX2NhdGNo ZXJfZnJlZWxpc3QoZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfY2F0Y2hlciAqY2F0OworCWR1a19j YXRjaGVyICpjYXRfbmV4dDsKKwlkdWtfc2l6ZV90IGNvdW50X2NhdCA9IDA7CisKKwlmb3IgKGNh dCA9IGhlYXAtPmNhdGNoZXJfZnJlZTsgY2F0ICE9IE5VTEw7KSB7CisJCWNhdF9uZXh0ID0gY2F0 LT5wYXJlbnQ7CisJCURVS19GUkVFKGhlYXAsICh2b2lkICopIGNhdCk7CisJCWNhdCA9IGNhdF9u ZXh0OworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwkJY291bnRfY2F0Kys7CisjZW5kaWYK Kwl9CisJaGVhcC0+Y2F0Y2hlcl9mcmVlID0gTlVMTDsgIC8qIG5lZWRlZCB3aGVuIGNhbGxlZCBm cm9tIG1hcmstYW5kLXN3ZWVwICovCisKKwlyZXR1cm4gY291bnRfY2F0OworfQorI2VuZGlmICAv KiBEVUtfVVNFX0NBQ0hFX0NBVENIRVIgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBf ZnJlZV9mcmVlbGlzdHMoZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfc2l6ZV90IGNvdW50X2FjdCA9 IDA7CisJZHVrX3NpemVfdCBjb3VudF9jYXQgPSAwOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0NB Q0hFX0FDVElWQVRJT04pCisJY291bnRfYWN0ID0gZHVrX19oZWFwX2ZyZWVfYWN0aXZhdGlvbl9m cmVlbGlzdChoZWFwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9DQUNIRV9DQVRDSEVS KQorCWNvdW50X2NhdCA9IGR1a19faGVhcF9mcmVlX2NhdGNoZXJfZnJlZWxpc3QoaGVhcCk7Cisj ZW5kaWYKKwlEVUtfVU5SRUYoaGVhcCk7CisJRFVLX1VOUkVGKGNvdW50X2FjdCk7CisJRFVLX1VO UkVGKGNvdW50X2NhdCk7CisKKwlEVUtfRChEVUtfRFBSSU5UKCJmcmVlZCAlbGQgYWN0aXZhdGlv biBmcmVlbGlzdCBlbnRyaWVzLCAlbGQgY2F0Y2hlciBmcmVlbGlzdCBlbnRyaWVzIiwKKwkgICAg ICAgICAgICAgICAgIChsb25nKSBjb3VudF9hY3QsIChsb25nKSBjb3VudF9jYXQpKTsKK30KKwor RFVLX0xPQ0FMIHZvaWQgZHVrX19mcmVlX2FsbG9jYXRlZChkdWtfaGVhcCAqaGVhcCkgeworCWR1 a19oZWFwaGRyICpjdXJyOworCWR1a19oZWFwaGRyICpuZXh0OworCisJY3VyciA9IGhlYXAtPmhl YXBfYWxsb2NhdGVkOworCXdoaWxlIChjdXJyKSB7CisJCS8qIFdlIGRvbid0IGxvZyBvciB3YXJu IGFib3V0IGZyZWVpbmcgemVybyByZWZjb3VudCBvYmplY3RzCisJCSAqIGJlY2F1c2UgdGhleSBt YXkgaGFwcGVuIHdpdGggZmluYWxpemVyIHByb2Nlc3NpbmcuCisJCSAqLworCisJCURVS19EREQo RFVLX0RERFBSSU5UKCJGSU5BTEZSRUUgKGFsbG9jYXRlZCk6ICUhaU8iLAorCQkgICAgICAgICAg ICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgY3VycikpOworCQluZXh0ID0gRFVLX0hFQVBIRFJf R0VUX05FWFQoaGVhcCwgY3Vycik7CisJCWR1a19oZWFwX2ZyZWVfaGVhcGhkcl9yYXcoaGVhcCwg Y3Vycik7CisJCWN1cnIgPSBuZXh0OworCX0KK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5B TElaRVJfU1VQUE9SVCkKK0RVS19MT0NBTCB2b2lkIGR1a19fZnJlZV9maW5hbGl6ZV9saXN0KGR1 a19oZWFwICpoZWFwKSB7CisJZHVrX2hlYXBoZHIgKmN1cnI7CisJZHVrX2hlYXBoZHIgKm5leHQ7 CisKKwljdXJyID0gaGVhcC0+ZmluYWxpemVfbGlzdDsKKwl3aGlsZSAoY3VycikgeworCQlEVUtf REREKERVS19ERERQUklOVCgiRklOQUxGUkVFIChmaW5hbGl6ZV9saXN0KTogJSFpTyIsCisJCSAg ICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBjdXJyKSk7CisJCW5leHQgPSBEVUtf SEVBUEhEUl9HRVRfTkVYVChoZWFwLCBjdXJyKTsKKwkJZHVrX2hlYXBfZnJlZV9oZWFwaGRyX3Jh dyhoZWFwLCBjdXJyKTsKKwkJY3VyciA9IG5leHQ7CisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNF X0ZJTkFMSVpFUl9TVVBQT1JUICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZnJlZV9zdHJpbmd0 YWJsZShkdWtfaGVhcCAqaGVhcCkgeworCS8qIHN0cmluZ3MgYXJlIG9ubHkgdHJhY2tlZCBieSBz dHJpbmd0YWJsZSAqLworCWR1a19oZWFwX3N0cnRhYmxlX2ZyZWUoaGVhcCk7Cit9CisKKyNpZiBk ZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQpCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Zy ZWVfcnVuX2ZpbmFsaXplcnMoZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfaGVhcGhkciAqY3VycjsK KwlkdWtfdWludF90IHJvdW5kX25vOworCWR1a19zaXplX3QgY291bnRfYWxsOworCWR1a19zaXpl X3QgY291bnRfZmluYWxpemVkOworCWR1a19zaXplX3QgY3Vycl9saW1pdDsKKworCURVS19BU1NF UlQoaGVhcCAhPSBOVUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJ TkcpCisJRFVLX0FTU0VSVChoZWFwLT5yZWZ6ZXJvX2xpc3QgPT0gTlVMTCk7ICAvKiByZWZ6ZXJv IG5vdCBydW5uaW5nIC0+IG11c3QgYmUgZW1wdHkgKi8KKyNlbmRpZgorCURVS19BU1NFUlQoaGVh cC0+ZmluYWxpemVfbGlzdCA9PSBOVUxMKTsgIC8qIG1hcmstYW5kLXN3ZWVwIGxhc3QgcGFzcyAq LworCisJaWYgKGhlYXAtPmhlYXBfdGhyZWFkID09IE5VTEwpIHsKKwkJLyogTWF5IGhhcHBlbiB3 aGVuIGhlYXAgYWxsb2NhdGlvbiBmYWlscyByaWdodCBvZmYuICBUaGVyZQorCQkgKiBjYW5ub3Qg YmUgYW55IGZpbmFsaXphYmxlIG9iamVjdHMgaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJRFVLX0Qo RFVLX0RQUklOVCgibm8gaGVhcF90aHJlYWQgaW4gaGVhcCBkZXN0cnVjdCwgYXNzdW1lIG5vIGZp bmFsaXphYmxlIG9iamVjdHMiKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcmV2ZW50IGZpbmFs aXplX2xpc3QgcHJvY2Vzc2luZyBhbmQgbWFyay1hbmQtc3dlZXAgZW50aXJlbHkuCisJICogU2V0 dGluZyBtc19ydW5uaW5nID0gMSBhbHNvIHByZXZlbnRzIHJlZnplcm8gaGFuZGxpbmcgZnJvbSBt b3ZpbmcKKwkgKiBvYmplY3RzIGF3YXkgZnJvbSB0aGUgaGVhcF9hbGxvY2F0ZWQgbGlzdCAodGhl IGZsYWcgbmFtZSBpcyBhIGJpdAorCSAqIG1pc2xlYWRpbmcgaGVyZSkuCisJICovCisJRFVLX0FT U0VSVChoZWFwLT5wZl9wcmV2ZW50X2NvdW50ID09IDApOworCWhlYXAtPnBmX3ByZXZlbnRfY291 bnQgPSAxOworCURVS19BU1NFUlQoaGVhcC0+bXNfcnVubmluZyA9PSAwKTsKKwloZWFwLT5tc19y dW5uaW5nID0gMTsKKwlEVUtfQVNTRVJUKGhlYXAtPm1zX3ByZXZlbnRfY291bnQgPT0gMCk7CisJ aGVhcC0+bXNfcHJldmVudF9jb3VudCA9IDE7ICAvKiBCdW1wLCBiZWNhdXNlIG1hcmstYW5kLXN3 ZWVwIGFzc3VtZXMgaXQncyBidW1wZWQgd2hlbiBtc19ydW5uaW5nIGlzIHNldC4gKi8KKworCWN1 cnJfbGltaXQgPSAwOyAgLyogc3VwcHJlc3Mgd2FybmluZywgbm90IHVzZWQgKi8KKwlmb3IgKHJv dW5kX25vID0gMDsgOyByb3VuZF9ubysrKSB7CisJCWN1cnIgPSBoZWFwLT5oZWFwX2FsbG9jYXRl ZDsKKwkJY291bnRfYWxsID0gMDsKKwkJY291bnRfZmluYWxpemVkID0gMDsKKwkJd2hpbGUgKGN1 cnIpIHsKKwkJCWNvdW50X2FsbCsrOworCQkJaWYgKERVS19IRUFQSERSX0lTX09CSkVDVChjdXJy KSkgeworCQkJCS8qIE9ubHkgb2JqZWN0cyBpbiBoZWFwX2FsbG9jYXRlZCBtYXkgaGF2ZSBmaW5h bGl6ZXJzLiAgQ2hlY2sgdGhhdAorCQkJCSAqIHRoZSBvYmplY3QgaXRzZWxmIGhhcyBhIF9GaW5h bGl6ZXIgcHJvcGVydHkgKG93biBvciBpbmhlcml0ZWQpCisJCQkJICogc28gdGhhdCB3ZSBkb24n dCBleGVjdXRlIGZpbmFsaXplcnMgZm9yIGUuZy4gUHJveHkgb2JqZWN0cy4KKwkJCQkgKi8KKwkJ CQlEVUtfQVNTRVJUKGN1cnIgIT0gTlVMTCk7CisKKwkJCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0ZJ TkFMSVpFUl9GQVNUKGhlYXAsIChkdWtfaG9iamVjdCAqKSBjdXJyKSkgeworCQkJCQlpZiAoIURV S19IRUFQSERSX0hBU19GSU5BTElaRUQoKGR1a19oZWFwaGRyICopIGN1cnIpKSB7CisJCQkJCQlE VUtfQVNTRVJUKERVS19IRUFQX0hBU19GSU5BTElaRVJfTk9SRVNDVUUoaGVhcCkpOyAgLyogbWFw cyB0byBmaW5hbGl6ZXIgMm5kIGFyZ3VtZW50ICovCisJCQkJCQlkdWtfaGVhcF9ydW5fZmluYWxp emVyKGhlYXAsIChkdWtfaG9iamVjdCAqKSBjdXJyKTsKKwkJCQkJCWNvdW50X2ZpbmFsaXplZCsr OworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJY3VyciA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhl YXAsIGN1cnIpOworCQl9CisKKwkJLyogRWFjaCByb3VuZCBvZiBmaW5hbGl6ZXIgZXhlY3V0aW9u IG1heSBzcGF3biBuZXcgZmluYWxpemFibGUgb2JqZWN0cworCQkgKiB3aGljaCBpcyBub3JtYWwg YmVoYXZpb3IgZm9yIHNvbWUgYXBwbGljYXRpb25zLiAgQWxsb3cgbXVsdGlwbGUKKwkJICogcm91 bmRzIG9mIGZpbmFsaXphdGlvbiwgYnV0IHVzZSBhIHNocmlua2luZyBsaW1pdCBiYXNlZCBvbiB0 aGUKKwkJICogZmlyc3Qgcm91bmQgdG8gZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIGEgcnVuYXdheSBm aW5hbGl6ZXIgY3JlYXRlcworCQkgKiBhbiB1bmJvdW5kZWQgYW1vdW50IG9mIG5ldyBmaW5hbGl6 YWJsZSBvYmplY3RzLiAgRmluYWxpemVyIHJlc2N1ZQorCQkgKiBpcyBub3Qgc3VwcG9ydGVkOiB0 aGUgc2VtYW50aWNzIGFyZSB1bmNsZWFyIGJlY2F1c2UgbW9zdCBvZiB0aGUKKwkJICogb2JqZWN0 cyBiZWluZyBmaW5hbGl6ZWQgaGVyZSBhcmUgYWxyZWFkeSByZWFjaGFibGUuICBUaGUgZmluYWxp emVyCisJCSAqIGlzIGdpdmVuIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSB0aGF0IHJlc2N1ZSBpcyBu b3QgcG9zc2libGUuCisJCSAqCisJCSAqIFNlZSBkaXNjdXNzaW9uIGluOiBodHRwczovL2dpdGh1 Yi5jb20vc3ZhYXJhbGEvZHVrdGFwZS9wdWxsLzQ3MworCQkgKi8KKworCQlpZiAocm91bmRfbm8g PT0gMCkgeworCQkJLyogQ2Fubm90IHdyYXA6IGVhY2ggb2JqZWN0IGlzIGF0IGxlYXN0IDggYnl0 ZXMgc28gY291bnQgaXMKKwkJCSAqIGF0IG1vc3QgMS84IG9mIHRoYXQuCisJCQkgKi8KKwkJCWN1 cnJfbGltaXQgPSBjb3VudF9hbGwgKiAyOworCQl9IGVsc2UgeworCQkJY3Vycl9saW1pdCA9IChj dXJyX2xpbWl0ICogMykgLyA0OyAgIC8qIERlY3JlYXNlIGJ5IDI1JSBldmVyeSByb3VuZCAqLwor CQl9CisJCURVS19EKERVS19EUFJJTlQoImZpbmFsaXplciByb3VuZCAlbGQgY29tcGxldGUsICVs ZCBvYmplY3RzLCB0cmllZCB0byBleGVjdXRlICVsZCBmaW5hbGl6ZXJzLCBjdXJyZW50IGxpbWl0 IGlzICVsZCIsCisJCSAgICAgICAgICAgICAgICAgKGxvbmcpIHJvdW5kX25vLCAobG9uZykgY291 bnRfYWxsLCAobG9uZykgY291bnRfZmluYWxpemVkLCAobG9uZykgY3Vycl9saW1pdCkpOworCisJ CWlmIChjb3VudF9maW5hbGl6ZWQgPT0gMCkgeworCQkJRFVLX0QoRFVLX0RQUklOVCgibm8gbW9y ZSBmaW5hbGl6YWJsZSBvYmplY3RzLCBmb3JjZWQgZmluYWxpemF0aW9uIGZpbmlzaGVkIikpOwor CQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvdW50X2ZpbmFsaXplZCA+PSBjdXJyX2xpbWl0KSB7CisJ CQlEVUtfRChEVUtfRFBSSU5UKCJmaW5hbGl6ZXIgY291bnQgYWJvdmUgbGltaXQsIHBvdGVudGlh bGx5IHJ1bmF3YXkgZmluYWxpemVyOyBza2lwIHJlbWFpbmluZyBmaW5hbGl6ZXJzIikpOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlEVUtfQVNTRVJUKGhlYXAtPm1zX3J1bm5pbmcgPT0gMSk7CisJ aGVhcC0+bXNfcnVubmluZyA9IDA7CisJRFVLX0FTU0VSVChoZWFwLT5wZl9wcmV2ZW50X2NvdW50 ID09IDEpOworCWhlYXAtPnBmX3ByZXZlbnRfY291bnQgPSAwOworfQorI2VuZGlmICAvKiBEVUtf VVNFX0ZJTkFMSVpFUl9TVVBQT1JUICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFwX2Zy ZWUoZHVrX2hlYXAgKmhlYXApIHsKKwlEVUtfRChEVUtfRFBSSU5UKCJmcmVlIGhlYXA6ICVwIiwg KHZvaWQgKikgaGVhcCkpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWR1a19oZWFw X3N0cnRhYmxlX2R1bXAoaGVhcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJV R0dFUl9TVVBQT1JUKQorCS8qIERldGFjaCBhIGRlYnVnZ2VyIGlmIGF0dGFjaGVkIChjYW4gYmUg Y2FsbGVkIG11bHRpcGxlIHRpbWVzKQorCSAqIHNhZmVseS4KKwkgKi8KKwkvKiBYWFg6IEFkZCBh IGZsYWcgdG8gcmVqZWN0IGFuIGF0dGVtcHQgdG8gcmUtYXR0YWNoPyAgT3RoZXJ3aXNlCisJICog dGhlIGRldGFjaGVkIGNhbGxiYWNrIG1heSBpbW1lZGlhdGVseSByZWF0dGFjaC4KKwkgKi8KKwlk dWtfZGVidWdfZG9fZGV0YWNoKGhlYXApOworI2VuZGlmCisKKwkvKiBFeGVjdXRlIGZpbmFsaXpl cnMgYmVmb3JlIGZyZWVpbmcgdGhlIGhlYXAsIGV2ZW4gZm9yIHJlYWNoYWJsZQorCSAqIG9iamVj dHMuICBUaGlzIGdpdmVzIGZpbmFsaXplcnMgdGhlIGNoYW5jZSB0byBmcmVlIGFueSBuYXRpdmUK KwkgKiByZXNvdXJjZXMgbGlrZSBmaWxlIGhhbmRsZXMsIGFsbG9jYXRpb25zIG1hZGUgb3V0c2lk ZSBEdWt0YXBlLAorCSAqIGV0Yy4gIFRoaXMgaXMgcXVpdGUgdHJpY2t5IHRvIGdldCByaWdodCwg c28gdGhhdCBhbGwgZmluYWxpemVyCisJICogZ3VhcmFudGVlcyBhcmUgaG9ub3JlZC4KKwkgKgor CSAqIFJ1biBtYXJrLWFuZC1zd2VlcCBhIGZldyB0aW1lcyBqdXN0IGluIGNhc2UgKHVucmVhY2hh YmxlIG9iamVjdAorCSAqIGZpbmFsaXplcnMgcnVuIGFscmVhZHkgaGVyZSkuICBUaGUgbGFzdCBy b3VuZCBtdXN0IHJlc2N1ZSBvYmplY3RzCisJICogZnJvbSB0aGUgcHJldmlvdXMgcm91bmQgd2l0 aG91dCBydW5uaW5nIGFueSBtb3JlIGZpbmFsaXplcnMuICBUaGlzCisJICogZW5zdXJlcyByZXNj dWVkIG9iamVjdHMgZ2V0IHRoZWlyIEZJTkFMSVpFRCBmbGFnIGNsZWFyZWQgc28gdGhhdAorCSAq IHRoZWlyIGZpbmFsaXplciBpcyBjYWxsZWQgb25jZSBtb3JlIGluIGZvcmNlZCBmaW5hbGl6YXRp b24gdG8KKwkgKiBzYXRpc2Z5IGZpbmFsaXplciBndWFyYW50ZWVzLiAgSG93ZXZlciwgd2UgZG9u J3Qgd2FudCB0byBydW4gYW55CisJICogbW9yZSBmaW5hbGl6ZXJzIGJlY2F1c2UgdGhhdCdkIHJl cXVpcmVkIG9uZSBtb3JlIGxvb3AsIGFuZCBzbyBvbi4KKwkgKgorCSAqIFhYWDogdGhpcyBwZXJo YXBzIHJlcXVpcmVzIGFuIGV4ZWN1dGlvbiB0aW1lIGxpbWl0LgorCSAqLworCURVS19EKERVS19E UFJJTlQoImV4ZWN1dGUgZmluYWxpemVycyBiZWZvcmUgZnJlZWluZyBoZWFwIikpOworCURVS19B U1NFUlQoaGVhcC0+cGZfc2tpcF9maW5hbGl6ZXJzID09IDApOworCURVS19EKERVS19EUFJJTlQo ImZvcmNlZCBnYyAjMSBpbiBoZWFwIGRlc3RydWN0aW9uIikpOworCWR1a19oZWFwX21hcmtfYW5k X3N3ZWVwKGhlYXAsIDApOworCURVS19EKERVS19EUFJJTlQoImZvcmNlZCBnYyAjMiBpbiBoZWFw IGRlc3RydWN0aW9uIikpOworCWR1a19oZWFwX21hcmtfYW5kX3N3ZWVwKGhlYXAsIDApOworCURV S19EKERVS19EUFJJTlQoImZvcmNlZCBnYyAjMyBpbiBoZWFwIGRlc3RydWN0aW9uIChkb24ndCBy dW4gZmluYWxpemVycykiKSk7CisJaGVhcC0+cGZfc2tpcF9maW5hbGl6ZXJzID0gMTsKKwlkdWtf aGVhcF9tYXJrX2FuZF9zd2VlcChoZWFwLCAwKTsgIC8qIFNraXAgZmluYWxpemVyczsgcXVldWUg ZmluYWxpemFibGUgb2JqZWN0cyB0byBoZWFwX2FsbG9jYXRlZC4gKi8KKworCS8qIFRoZXJlIGFy ZSBuZXZlciBvYmplY3RzIGluIHJlZnplcm9fbGlzdCBhdCB0aGlzIHBvaW50LCBvciBhdCBhbnkK KwkgKiBwb2ludCBiZXlvbmQgYSBERUNSRUYgKGV2ZW4gYSBERUNSRUZfTk9SWikuICBTaW5jZSBE dWt0YXBlIDIuMQorCSAqIHJlZnplcm9fbGlzdCBwcm9jZXNzaW5nIGlzIHNpZGUgZWZmZWN0IGZy ZWUsIHNvIGl0IGlzIGFsd2F5cworCSAqIHByb2Nlc3NlZCB0byBjb21wbGV0aW9uIGJ5IGEgREVD UkVGIGluaXRpYWxseSB0cmlnZ2VyaW5nIGEgemVybworCSAqIHJlZmNvdW50LgorCSAqLworI2lm IGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJRFVLX0FTU0VSVChoZWFwLT5y ZWZ6ZXJvX2xpc3QgPT0gTlVMTCk7ICAvKiBBbHdheXMgcHJvY2Vzc2VkIHRvIGNvbXBsZXRpb24g aW5saW5lLiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JU KQorCURVS19BU1NFUlQoaGVhcC0+ZmluYWxpemVfbGlzdCA9PSBOVUxMKTsgIC8qIExhc3QgbWFy ay1hbmQtc3dlZXAgd2l0aCBza2lwX2ZpbmFsaXplcnMuICovCisjZW5kaWYKKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCkKKwlEVUtfRChEVUtfRFBSSU5UKCJydW4gZmlu YWxpemVycyBmb3IgcmVtYWluaW5nIGZpbmFsaXphYmxlIG9iamVjdHMiKSk7CisJRFVLX0hFQVBf U0VUX0ZJTkFMSVpFUl9OT1JFU0NVRShoZWFwKTsgIC8qIFJlc2N1ZSBubyBsb25nZXIgc3VwcG9y dGVkLiAqLworCWR1a19fZnJlZV9ydW5fZmluYWxpemVycyhoZWFwKTsKKyNlbmRpZiAgLyogRFVL X1VTRV9GSU5BTElaRVJfU1VQUE9SVCAqLworCisJLyogTm90ZTogaGVhcC0+aGVhcF90aHJlYWQs IGhlYXAtPmN1cnJfdGhyZWFkLCBhbmQgaGVhcC0+aGVhcF9vYmplY3QKKwkgKiBhcmUgb24gdGhl IGhlYXAgYWxsb2NhdGVkIGxpc3QuCisJICovCisKKwlEVUtfRChEVUtfRFBSSU5UKCJmcmVlaW5n IHRlbXBvcmFyeSBmcmVlbGlzdHMiKSk7CisJZHVrX2hlYXBfZnJlZV9mcmVlbGlzdHMoaGVhcCk7 CisKKwlEVUtfRChEVUtfRFBSSU5UKCJmcmVlaW5nIGhlYXBfYWxsb2NhdGVkIG9mIGhlYXA6ICVw IiwgKHZvaWQgKikgaGVhcCkpOworCWR1a19fZnJlZV9hbGxvY2F0ZWQoaGVhcCk7CisKKyNpZiBk ZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCURVS19BU1NFUlQoaGVhcC0+cmVm emVyb19saXN0ID09IE5VTEwpOyAgLyogQWx3YXlzIHByb2Nlc3NlZCB0byBjb21wbGV0aW9uIGlu bGluZS4gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JU KQorCURVS19EKERVS19EUFJJTlQoImZyZWVpbmcgZmluYWxpemVfbGlzdCBvZiBoZWFwOiAlcCIs ICh2b2lkICopIGhlYXApKTsKKwlkdWtfX2ZyZWVfZmluYWxpemVfbGlzdChoZWFwKTsKKyNlbmRp ZgorCisJRFVLX0QoRFVLX0RQUklOVCgiZnJlZWluZyBzdHJpbmcgdGFibGUgb2YgaGVhcDogJXAi LCAodm9pZCAqKSBoZWFwKSk7CisJZHVrX19mcmVlX3N0cmluZ3RhYmxlKGhlYXApOworCisJRFVL X0QoRFVLX0RQUklOVCgiZnJlZWluZyBoZWFwIHN0cnVjdHVyZTogJXAiLCAodm9pZCAqKSBoZWFw KSk7CisJaGVhcC0+ZnJlZV9mdW5jKGhlYXAtPmhlYXBfdWRhdGEsIGhlYXApOworfQorCisvKgor ICogIEFsbG9jYXRlIGEgaGVhcC4KKyAqCisgKiAgU3RyaW5nIHRhYmxlIGlzIGluaXRpYWxpemVk IHdpdGggYnVpbHQtaW4gc3RyaW5ncyBmcm9tIGdlbmJ1aWx0aW5zLnB5LAorICogIGVpdGhlciBi eSBkeW5hbWljYWxseSBjcmVhdGluZyB0aGUgc3RyaW5ncyBvciBieSByZWZlcnJpbmcgdG8gUk9N IHN0cmluZ3MuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01fU1RSSU5HUykKK0RVS19M T0NBTCBkdWtfYm9vbF90IGR1a19faW5pdF9oZWFwX3N0cmluZ3MoZHVrX2hlYXAgKmhlYXApIHsK KyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfc21hbGxfdWludF90IGk7Cisj ZW5kaWYKKworCURVS19VTlJFRihoZWFwKTsKKworCS8qIFdpdGggUk9NLWJhc2VkIHN0cmluZ3Ms IGhlYXAtPnN0cnNbXSBhbmQgdGhyLT5zdHJzW10gYXJlIG9taXR0ZWQKKwkgKiBzbyBub3RoaW5n IHRvIGluaXRpYWxpemUgZm9yIHN0cnNbXS4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9B U1NFUlRJT05TKQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZHVrX3JvbV9zdHJpbmdzX2xvb2t1 cCkgLyBzaXplb2YoY29uc3QgZHVrX2hzdHJpbmcgKik7IGkrKykgeworCQljb25zdCBkdWtfaHN0 cmluZyAqaDsKKwkJZHVrX3VpbnQzMl90IGhhc2g7CisKKwkJaCA9IGR1a19yb21fc3RyaW5nc19s b29rdXBbaV07CisJCXdoaWxlIChoICE9IE5VTEwpIHsKKwkJCWhhc2ggPSBkdWtfaGVhcF9oYXNo c3RyaW5nKGhlYXAsIChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtfSFNUUklOR19HRVRfREFUQSho KSwgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkpOworCQkJRFVLX0REKERVS19ERFBSSU5UKCJk dWtfcm9tX3N0cmluZ3NfbG9va3VwWyVkXSAtPiBoYXNoIDB4JTA4bHgsIGNvbXB1dGVkIDB4JTA4 bHgiLAorCQkJICAgICAgICAgICAgICAgICAgIChpbnQpIGksICh1bnNpZ25lZCBsb25nKSBEVUtf SFNUUklOR19HRVRfSEFTSChoKSwgKHVuc2lnbmVkIGxvbmcpIGhhc2gpKTsKKwkJCURVS19BU1NF UlQoaGFzaCA9PSAoZHVrX3VpbnQzMl90KSBEVUtfSFNUUklOR19HRVRfSEFTSChoKSk7CisKKwkJ CWggPSAoY29uc3QgZHVrX2hzdHJpbmcgKikgaC0+aGRyLmhfbmV4dDsKKwkJfQorCX0KKyNlbmRp ZgorCXJldHVybiAxOworfQorI2Vsc2UgIC8qIERVS19VU0VfUk9NX1NUUklOR1MgKi8KKworRFVL X0xPQ0FMIGR1a19ib29sX3QgZHVrX19pbml0X2hlYXBfc3RyaW5ncyhkdWtfaGVhcCAqaGVhcCkg eworCWR1a19iaXRkZWNvZGVyX2N0eCBiZF9jdHg7CisJZHVrX2JpdGRlY29kZXJfY3R4ICpiZCA9 ICZiZF9jdHg7ICAvKiBjb252ZW5pZW5jZSAqLworCWR1a19zbWFsbF91aW50X3QgaTsKKworCWR1 a19tZW16ZXJvKCZiZF9jdHgsIHNpemVvZihiZF9jdHgpKTsKKwliZC0+ZGF0YSA9IChjb25zdCBk dWtfdWludDhfdCAqKSBkdWtfc3RyaW5nc19kYXRhOworCWJkLT5sZW5ndGggPSAoZHVrX3NpemVf dCkgRFVLX1NUUkRBVEFfREFUQV9MRU5HVEg7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFVLX0hFQVBf TlVNX1NUUklOR1M7IGkrKykgeworCQlkdWtfdWludDhfdCB0bXBbRFVLX1NUUkRBVEFfTUFYX1NU UkxFTl07CisJCWR1a19zbWFsbF91aW50X3QgbGVuOworCQlkdWtfaHN0cmluZyAqaDsKKworCQls ZW4gPSBkdWtfYmRfZGVjb2RlX2JpdHBhY2tlZF9zdHJpbmcoYmQsIHRtcCk7CisKKwkJLyogTm8g bmVlZCB0byBsZW5ndGggY2hlY2sgc3RyaW5nOiBpdCB3aWxsIG5ldmVyIGV4Y2VlZCBldmVuCisJ CSAqIHRoZSAxNi1iaXQgbGVuZ3RoIG1heGltdW0uCisJCSAqLworCQlEVUtfQVNTRVJUKGxlbiA8 PSAweGZmZmZVTCk7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJpbnRlcm4gYnVpbHQtaW4gc3Ry aW5nICVsZCIsIChsb25nKSBpKSk7CisJCWggPSBkdWtfaGVhcF9zdHJ0YWJsZV9pbnRlcm4oaGVh cCwgdG1wLCBsZW4pOworCQlpZiAoIWgpIHsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCURVS19B U1NFUlQoIURVS19IRUFQSERSX0hBU19SRUFET05MWSgoZHVrX2hlYXBoZHIgKikgaCkpOworCisJ CS8qIFNwZWNpYWwgZmxhZ3MgY2hlY2tzLiAgU2luY2UgdGhlc2Ugc3RyaW5ncyBhcmUgYWx3YXlz CisJCSAqIHJlYWNoYWJsZSBhbmQgYSBzdHJpbmcgY2Fubm90IGFwcGVhciB0d2ljZSBpbiB0aGUg c3RyaW5nCisJCSAqIHRhYmxlLCB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2svc2V0IHRoZXNlIGZs YWdzIGVsc2V3aGVyZS4KKwkJICogVGhlICdpbnRlcm5hbCcgZmxhZyBpcyBzZXQgYnkgc3RyaW5n IGludGVybiBjb2RlLgorCQkgKi8KKwkJaWYgKGkgPT0gRFVLX1NUUklEWF9FVkFMIHx8IGkgPT0g RFVLX1NUUklEWF9MQ19BUkdVTUVOVFMpIHsKKwkJCURVS19IU1RSSU5HX1NFVF9FVkFMX09SX0FS R1VNRU5UUyhoKTsKKwkJfQorCQlpZiAoaSA+PSBEVUtfU1RSSURYX1NUQVJUX1JFU0VSVkVEICYm IGkgPCBEVUtfU1RSSURYX0VORF9SRVNFUlZFRCkgeworCQkJRFVLX0hTVFJJTkdfU0VUX1JFU0VS VkVEX1dPUkQoaCk7CisJCQlpZiAoaSA+PSBEVUtfU1RSSURYX1NUQVJUX1NUUklDVF9SRVNFUlZF RCkgeworCQkJCURVS19IU1RSSU5HX1NFVF9TVFJJQ1RfUkVTRVJWRURfV09SRChoKTsKKwkJCX0K KwkJfQorCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJpbnRlcm5lZDogJSFPIiwgKGR1a19oZWFw aGRyICopIGgpKTsKKworCQkvKiBYWFg6IFRoZSBpbmNyZWYgbWFjcm8gdGFrZXMgYSB0aHJlYWQg cG9pbnRlciBidXQgZG9lc24ndAorCQkgKiB1c2UgaXQgcmlnaHQgbm93LgorCQkgKi8KKwkJRFVL X0hTVFJJTkdfSU5DUkVGKF9uZXZlcl9yZWZlcmVuY2VkXywgaCk7CisKKyNpZiBkZWZpbmVkKERV S19VU0VfSEVBUFBUUjE2KQorCQloZWFwLT5zdHJzMTZbaV0gPSBEVUtfVVNFX0hFQVBQVFJfRU5D MTYoaGVhcC0+aGVhcF91ZGF0YSwgKHZvaWQgKikgaCk7CisjZWxzZQorCQloZWFwLT5zdHJzW2ld ID0gaDsKKyNlbmRpZgorCX0KKworCXJldHVybiAxOworCisgZmFpbGVkOgorCXJldHVybiAwOwor fQorI2VuZGlmICAvKiBEVUtfVVNFX1JPTV9TVFJJTkdTICovCisKK0RVS19MT0NBTCBkdWtfYm9v bF90IGR1a19faW5pdF9oZWFwX3RocmVhZChkdWtfaGVhcCAqaGVhcCkgeworCWR1a19odGhyZWFk ICp0aHI7CisKKwlEVUtfRChEVUtfRFBSSU5UKCJoZWFwIGluaXQ6IGFsbG9jIGhlYXAgdGhyZWFk IikpOworCXRociA9IGR1a19odGhyZWFkX2FsbG9jX3VuY2hlY2tlZChoZWFwLAorCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAor CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19G TEFHUyhEVUtfSE9CSkVDVF9DTEFTU19USFJFQUQpKTsKKwlpZiAodGhyID09IE5VTEwpIHsKKwkJ RFVLX0QoRFVLX0RQUklOVCgiZmFpbGVkIHRvIGFsbG9jIGhlYXBfdGhyZWFkIikpOworCQlyZXR1 cm4gMDsKKwl9CisJdGhyLT5zdGF0ZSA9IERVS19IVEhSRUFEX1NUQVRFX0lOQUNUSVZFOworI2lm IGRlZmluZWQoRFVLX1VTRV9ST01fU1RSSU5HUykKKwkvKiBObyBzdHJzW10gcG9pbnRlci4gKi8K KyNlbHNlICAvKiBEVUtfVVNFX1JPTV9TVFJJTkdTICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0hF QVBQVFIxNikKKwl0aHItPnN0cnMxNiA9IGhlYXAtPnN0cnMxNjsKKyNlbHNlCisJdGhyLT5zdHJz ID0gaGVhcC0+c3RyczsKKyNlbmRpZgorI2VuZGlmICAvKiBEVUtfVVNFX1JPTV9TVFJJTkdTICov CisKKwloZWFwLT5oZWFwX3RocmVhZCA9IHRocjsKKwlEVUtfSFRIUkVBRF9JTkNSRUYodGhyLCB0 aHIpOyAgLyogTm90ZTogZmlyc3QgYXJndW1lbnQgbm90IHJlYWxseSB1c2VkICovCisKKwkvKiAn dGhyJyBpcyBub3cgcmVhY2hhYmxlICovCisKKwlEVUtfRChEVUtfRFBSSU5UKCJoZWFwIGluaXQ6 IGluaXQgaGVhcCB0aHJlYWQgc3RhY2tzIikpOworCWlmICghZHVrX2h0aHJlYWRfaW5pdF9zdGFj a3MoaGVhcCwgdGhyKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBYWFg6IHRoaXMgbWF5IG5v dyBmYWlsLCBhbmQgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5ICovCisJZHVrX2h0aHJlYWRfY3Jl YXRlX2J1aWx0aW5fb2JqZWN0cyh0aHIpOworCisJLyogZGVmYXVsdCBwcm90b3R5cGUgKi8KKwlE VUtfSE9CSkVDVF9TRVRfUFJPVE9UWVBFX0lOSVRfSU5DUkVGKHRociwgKGR1a19ob2JqZWN0ICop IHRociwgdGhyLT5idWlsdGluc1tEVUtfQklEWF9USFJFQURfUFJPVE9UWVBFXSk7CisKKwlyZXR1 cm4gMTsKK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKyNkZWZpbmUgRFVLX19EVU1Q U1oodCkgIGRvIHsgXAorCQlEVUtfRChEVUtfRFBSSU5UKCIiICN0ICI9JWxkIiwgKGxvbmcpIHNp emVvZih0KSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyogVGhlc2UgaXMgbm90IDEwMCUgYmVjYXVz ZSBmb3JtYXQgd291bGQgbmVlZCB0byBiZSBub24tcG9ydGFibGUgImxvbmcgbG9uZyIuCisgKiBB bHNvIHByaW50IG91dCBhcyBkb3VibGVzIHRvIGNhdGNoIGNhc2VzIHdoZXJlIHRoZSAibG9uZyIg dHlwZSBpcyBub3Qgd2lkZQorICogZW5vdWdoOyB0aGUgbGltaXRzIHdpbGwgdGhlbiBub3QgYmUg cHJpbnRlZCBhY2N1cmF0ZWx5IGJ1dCB0aGUgbWFnbml0dWRlCisgKiB3aWxsIGJlIGNvcnJlY3Qu CisgKi8KKyNkZWZpbmUgRFVLX19EVU1QTE1fU0lHTkVEX1JBVyh0LGEsYikgIGRvIHsgXAorCQlE VUtfRChEVUtfRFBSSU5UKHQgIj1bJWxkLCVsZF09WyVsZiwlbGZdIiwgXAorCQkgICAgICAgICAg ICAgICAgIChsb25nKSAoYSksIChsb25nKSAoYiksIFwKKwkJICAgICAgICAgICAgICAgICAoZG91 YmxlKSAoYSksIChkb3VibGUpIChiKSkpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19E VU1QTE1fVU5TSUdORURfUkFXKHQsYSxiKSAgZG8geyBcCisJCURVS19EKERVS19EUFJJTlQodCAi PVslbHUsJWx1XT1bJWxmLCVsZl0iLCBcCisJCSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxv bmcpIChhKSwgKHVuc2lnbmVkIGxvbmcpIChiKSwgXAorCQkgICAgICAgICAgICAgICAgIChkb3Vi bGUpIChhKSwgKGRvdWJsZSkgKGIpKSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfX0RV TVBMTV9TSUdORUQodCkgIGRvIHsgXAorCQlEVUtfX0RVTVBMTV9TSUdORURfUkFXKCJEVUtfIiAj dCAiX3tNSU4sTUFYfSIsIERVS18jI3QjI19NSU4sIERVS18jI3QjI19NQVgpOyBcCisJfSB3aGls ZSAoMCkKKyNkZWZpbmUgRFVLX19EVU1QTE1fVU5TSUdORUQodCkgIGRvIHsgXAorCQlEVUtfX0RV TVBMTV9VTlNJR05FRF9SQVcoIkRVS18iICN0ICJfe01JTixNQVh9IiwgRFVLXyMjdCMjX01JTiwg RFVLXyMjdCMjX01BWCk7IFwKKwl9IHdoaWxlICgwKQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2R1 bXBfdHlwZV9zaXplcyh2b2lkKSB7CisJRFVLX0QoRFVLX0RQUklOVCgic2l6ZW9mKCkiKSk7CisK KwkvKiBiYXNpYyBwbGF0Zm9ybSB0eXBlcyAqLworCURVS19fRFVNUFNaKGNoYXIpOworCURVS19f RFVNUFNaKHNob3J0KTsKKwlEVUtfX0RVTVBTWihpbnQpOworCURVS19fRFVNUFNaKGxvbmcpOwor CURVS19fRFVNUFNaKGRvdWJsZSk7CisJRFVLX19EVU1QU1oodm9pZCAqKTsKKwlEVUtfX0RVTVBT WihzaXplX3QpOworCisJLyogYmFzaWMgdHlwZXMgZnJvbSBkdWtfZmVhdHVyZXMuaCAqLworCURV S19fRFVNUFNaKGR1a191aW50OF90KTsKKwlEVUtfX0RVTVBTWihkdWtfaW50OF90KTsKKwlEVUtf X0RVTVBTWihkdWtfdWludDE2X3QpOworCURVS19fRFVNUFNaKGR1a19pbnQxNl90KTsKKwlEVUtf X0RVTVBTWihkdWtfdWludDMyX3QpOworCURVS19fRFVNUFNaKGR1a19pbnQzMl90KTsKKwlEVUtf X0RVTVBTWihkdWtfdWludDY0X3QpOworCURVS19fRFVNUFNaKGR1a19pbnQ2NF90KTsKKwlEVUtf X0RVTVBTWihkdWtfdWludF9sZWFzdDhfdCk7CisJRFVLX19EVU1QU1ooZHVrX2ludF9sZWFzdDhf dCk7CisJRFVLX19EVU1QU1ooZHVrX3VpbnRfbGVhc3QxNl90KTsKKwlEVUtfX0RVTVBTWihkdWtf aW50X2xlYXN0MTZfdCk7CisJRFVLX19EVU1QU1ooZHVrX3VpbnRfbGVhc3QzMl90KTsKKwlEVUtf X0RVTVBTWihkdWtfaW50X2xlYXN0MzJfdCk7CisjaWYgZGVmaW5lZChEVUtfVVNFXzY0QklUX09Q UykKKwlEVUtfX0RVTVBTWihkdWtfdWludF9sZWFzdDY0X3QpOworCURVS19fRFVNUFNaKGR1a19p bnRfbGVhc3Q2NF90KTsKKyNlbmRpZgorCURVS19fRFVNUFNaKGR1a191aW50X2Zhc3Q4X3QpOwor CURVS19fRFVNUFNaKGR1a19pbnRfZmFzdDhfdCk7CisJRFVLX19EVU1QU1ooZHVrX3VpbnRfZmFz dDE2X3QpOworCURVS19fRFVNUFNaKGR1a19pbnRfZmFzdDE2X3QpOworCURVS19fRFVNUFNaKGR1 a191aW50X2Zhc3QzMl90KTsKKwlEVUtfX0RVTVBTWihkdWtfaW50X2Zhc3QzMl90KTsKKyNpZiBk ZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorCURVS19fRFVNUFNaKGR1a191aW50X2Zhc3Q2NF90 KTsKKwlEVUtfX0RVTVBTWihkdWtfaW50X2Zhc3Q2NF90KTsKKyNlbmRpZgorCURVS19fRFVNUFNa KGR1a191aW50cHRyX3QpOworCURVS19fRFVNUFNaKGR1a19pbnRwdHJfdCk7CisJRFVLX19EVU1Q U1ooZHVrX3VpbnRtYXhfdCk7CisJRFVLX19EVU1QU1ooZHVrX2ludG1heF90KTsKKwlEVUtfX0RV TVBTWihkdWtfZG91YmxlX3QpOworCisJLyogaW1wb3J0YW50IGNob3NlbiBiYXNlIHR5cGVzICov CisJRFVLX19EVU1QU1ooZHVrX2ludF90KTsKKwlEVUtfX0RVTVBTWihkdWtfdWludF90KTsKKwlE VUtfX0RVTVBTWihkdWtfaW50X2Zhc3RfdCk7CisJRFVLX19EVU1QU1ooZHVrX3VpbnRfZmFzdF90 KTsKKwlEVUtfX0RVTVBTWihkdWtfc21hbGxfaW50X3QpOworCURVS19fRFVNUFNaKGR1a19zbWFs bF91aW50X3QpOworCURVS19fRFVNUFNaKGR1a19zbWFsbF9pbnRfZmFzdF90KTsKKwlEVUtfX0RV TVBTWihkdWtfc21hbGxfdWludF9mYXN0X3QpOworCisJLyogc29tZSBkZXJpdmVkIHR5cGVzICov CisJRFVLX19EVU1QU1ooZHVrX2NvZGVwb2ludF90KTsKKwlEVUtfX0RVTVBTWihkdWtfdWNvZGVw b2ludF90KTsKKwlEVUtfX0RVTVBTWihkdWtfaWR4X3QpOworCURVS19fRFVNUFNaKGR1a19lcnJj b2RlX3QpOworCURVS19fRFVNUFNaKGR1a191YXJyaWR4X3QpOworCisJLyogdHZhbCAqLworCURV S19fRFVNUFNaKGR1a19kb3VibGVfdW5pb24pOworCURVS19fRFVNUFNaKGR1a190dmFsKTsKKwor CS8qIHN0cnVjdHMgZnJvbSBkdWtfZm9yd2RlY2wuaCAqLworCURVS19fRFVNUFNaKGR1a19qbXBi dWYpOyAgLyoganVzdCBvbmUgJ2ludCcgZm9yIEMrKyBleGNlcHRpb25zICovCisJRFVLX19EVU1Q U1ooZHVrX2hlYXBoZHIpOworCURVS19fRFVNUFNaKGR1a19oZWFwaGRyX3N0cmluZyk7CisJRFVL X19EVU1QU1ooZHVrX2hzdHJpbmcpOworCURVS19fRFVNUFNaKGR1a19oc3RyaW5nX2V4dGVybmFs KTsKKwlEVUtfX0RVTVBTWihkdWtfaG9iamVjdCk7CisJRFVLX19EVU1QU1ooZHVrX2hhcnJheSk7 CisJRFVLX19EVU1QU1ooZHVrX2hjb21wZnVuYyk7CisJRFVLX19EVU1QU1ooZHVrX2huYXRmdW5j KTsKKwlEVUtfX0RVTVBTWihkdWtfaGRlY2Vudik7CisJRFVLX19EVU1QU1ooZHVrX2hvYmplbnYp OworCURVS19fRFVNUFNaKGR1a19odGhyZWFkKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVS T0JKRUNUX1NVUFBPUlQpCisJRFVLX19EVU1QU1ooZHVrX2hidWZvYmopOworI2VuZGlmCisJRFVL X19EVU1QU1ooZHVrX2hwcm94eSk7CisJRFVLX19EVU1QU1ooZHVrX2hidWZmZXIpOworCURVS19f RFVNUFNaKGR1a19oYnVmZmVyX2ZpeGVkKTsKKwlEVUtfX0RVTVBTWihkdWtfaGJ1ZmZlcl9keW5h bWljKTsKKwlEVUtfX0RVTVBTWihkdWtfaGJ1ZmZlcl9leHRlcm5hbCk7CisJRFVLX19EVU1QU1oo ZHVrX3Byb3BhY2Nlc3Nvcik7CisJRFVLX19EVU1QU1ooZHVrX3Byb3B2YWx1ZSk7CisJRFVLX19E VU1QU1ooZHVrX3Byb3BkZXNjKTsKKwlEVUtfX0RVTVBTWihkdWtfaGVhcCk7CisJRFVLX19EVU1Q U1ooZHVrX2FjdGl2YXRpb24pOworCURVS19fRFVNUFNaKGR1a19jYXRjaGVyKTsKKwlEVUtfX0RV TVBTWihkdWtfc3RyY2FjaGVfZW50cnkpOworCURVS19fRFVNUFNaKGR1a19saXRjYWNoZV9lbnRy eSk7CisJRFVLX19EVU1QU1ooZHVrX2xqc3RhdGUpOworCURVS19fRFVNUFNaKGR1a19maXhlZGJ1 ZmZlcik7CisJRFVLX19EVU1QU1ooZHVrX2JpdGRlY29kZXJfY3R4KTsKKwlEVUtfX0RVTVBTWihk dWtfYml0ZW5jb2Rlcl9jdHgpOworCURVS19fRFVNUFNaKGR1a190b2tlbik7CisJRFVLX19EVU1Q U1ooZHVrX3JlX3Rva2VuKTsKKwlEVUtfX0RVTVBTWihkdWtfbGV4ZXJfcG9pbnQpOworCURVS19f RFVNUFNaKGR1a19sZXhlcl9jdHgpOworCURVS19fRFVNUFNaKGR1a19jb21waWxlcl9pbnN0cik7 CisJRFVLX19EVU1QU1ooZHVrX2NvbXBpbGVyX2Z1bmMpOworCURVS19fRFVNUFNaKGR1a19jb21w aWxlcl9jdHgpOworCURVS19fRFVNUFNaKGR1a19yZV9tYXRjaGVyX2N0eCk7CisJRFVLX19EVU1Q U1ooZHVrX3JlX2NvbXBpbGVyX2N0eCk7Cit9CitEVUtfTE9DQUwgdm9pZCBkdWtfX2R1bXBfdHlw ZV9saW1pdHModm9pZCkgeworCURVS19EKERVS19EUFJJTlQoImxpbWl0cyIpKTsKKworCS8qIGJh c2ljIHR5cGVzICovCisJRFVLX19EVU1QTE1fU0lHTkVEKElOVDgpOworCURVS19fRFVNUExNX1VO U0lHTkVEKFVJTlQ4KTsKKwlEVUtfX0RVTVBMTV9TSUdORUQoSU5UX0ZBU1Q4KTsKKwlEVUtfX0RV TVBMTV9VTlNJR05FRChVSU5UX0ZBU1Q4KTsKKwlEVUtfX0RVTVBMTV9TSUdORUQoSU5UX0xFQVNU OCk7CisJRFVLX19EVU1QTE1fVU5TSUdORUQoVUlOVF9MRUFTVDgpOworCURVS19fRFVNUExNX1NJ R05FRChJTlQxNik7CisJRFVLX19EVU1QTE1fVU5TSUdORUQoVUlOVDE2KTsKKwlEVUtfX0RVTVBM TV9TSUdORUQoSU5UX0ZBU1QxNik7CisJRFVLX19EVU1QTE1fVU5TSUdORUQoVUlOVF9GQVNUMTYp OworCURVS19fRFVNUExNX1NJR05FRChJTlRfTEVBU1QxNik7CisJRFVLX19EVU1QTE1fVU5TSUdO RUQoVUlOVF9MRUFTVDE2KTsKKwlEVUtfX0RVTVBMTV9TSUdORUQoSU5UMzIpOworCURVS19fRFVN UExNX1VOU0lHTkVEKFVJTlQzMik7CisJRFVLX19EVU1QTE1fU0lHTkVEKElOVF9GQVNUMzIpOwor CURVS19fRFVNUExNX1VOU0lHTkVEKFVJTlRfRkFTVDMyKTsKKwlEVUtfX0RVTVBMTV9TSUdORUQo SU5UX0xFQVNUMzIpOworCURVS19fRFVNUExNX1VOU0lHTkVEKFVJTlRfTEVBU1QzMik7CisjaWYg ZGVmaW5lZChEVUtfVVNFXzY0QklUX09QUykKKwlEVUtfX0RVTVBMTV9TSUdORUQoSU5UNjQpOwor CURVS19fRFVNUExNX1VOU0lHTkVEKFVJTlQ2NCk7CisJRFVLX19EVU1QTE1fU0lHTkVEKElOVF9G QVNUNjQpOworCURVS19fRFVNUExNX1VOU0lHTkVEKFVJTlRfRkFTVDY0KTsKKwlEVUtfX0RVTVBM TV9TSUdORUQoSU5UX0xFQVNUNjQpOworCURVS19fRFVNUExNX1VOU0lHTkVEKFVJTlRfTEVBU1Q2 NCk7CisjZW5kaWYKKwlEVUtfX0RVTVBMTV9TSUdORUQoSU5UUFRSKTsKKwlEVUtfX0RVTVBMTV9V TlNJR05FRChVSU5UUFRSKTsKKwlEVUtfX0RVTVBMTV9TSUdORUQoSU5UTUFYKTsKKwlEVUtfX0RV TVBMTV9VTlNJR05FRChVSU5UTUFYKTsKKworCS8qIGRlcml2ZWQgdHlwZXMgKi8KKwlEVUtfX0RV TVBMTV9TSUdORUQoSU5UKTsKKwlEVUtfX0RVTVBMTV9VTlNJR05FRChVSU5UKTsKKwlEVUtfX0RV TVBMTV9TSUdORUQoSU5UX0ZBU1QpOworCURVS19fRFVNUExNX1VOU0lHTkVEKFVJTlRfRkFTVCk7 CisJRFVLX19EVU1QTE1fU0lHTkVEKFNNQUxMX0lOVCk7CisJRFVLX19EVU1QTE1fVU5TSUdORUQo U01BTExfVUlOVCk7CisJRFVLX19EVU1QTE1fU0lHTkVEKFNNQUxMX0lOVF9GQVNUKTsKKwlEVUtf X0RVTVBMTV9VTlNJR05FRChTTUFMTF9VSU5UX0ZBU1QpOworfQorCitEVUtfTE9DQUwgdm9pZCBk dWtfX2R1bXBfbWlzY19vcHRpb25zKHZvaWQpIHsKKwlEVUtfRChEVUtfRFBSSU5UKCJEVUtfVkVS U0lPTjogJWxkIiwgKGxvbmcpIERVS19WRVJTSU9OKSk7CisJRFVLX0QoRFVLX0RQUklOVCgiRFVL X0dJVF9ERVNDUklCRTogJXMiLCBEVUtfR0lUX0RFU0NSSUJFKSk7CisJRFVLX0QoRFVLX0RQUklO VCgiT1Mgc3RyaW5nOiAlcyIsIERVS19VU0VfT1NfU1RSSU5HKSk7CisJRFVLX0QoRFVLX0RQUklO VCgiYXJjaGl0ZWN0dXJlIHN0cmluZzogJXMiLCBEVUtfVVNFX0FSQ0hfU1RSSU5HKSk7CisJRFVL X0QoRFVLX0RQUklOVCgiY29tcGlsZXIgc3RyaW5nOiAlcyIsIERVS19VU0VfQ09NUElMRVJfU1RS SU5HKSk7CisJRFVLX0QoRFVLX0RQUklOVCgiZGVidWcgbGV2ZWw6ICVsZCIsIChsb25nKSBEVUtf VVNFX0RFQlVHX0xFVkVMKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BBQ0tFRF9UVkFMKQorCURV S19EKERVS19EUFJJTlQoIkRVS19VU0VfUEFDS0VEX1RWQUw6IHllcyIpKTsKKyNlbHNlCisJRFVL X0QoRFVLX0RQUklOVCgiRFVLX1VTRV9QQUNLRURfVFZBTDogbm8iKSk7CisjZW5kaWYKKyNpZiBk ZWZpbmVkKERVS19VU0VfVkFSSUFESUNfTUFDUk9TKQorCURVS19EKERVS19EUFJJTlQoIkRVS19V U0VfVkFSSUFESUNfTUFDUk9TOiB5ZXMiKSk7CisjZWxzZQorCURVS19EKERVS19EUFJJTlQoIkRV S19VU0VfVkFSSUFESUNfTUFDUk9TOiBubyIpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VT RV9JTlRFR0VSX0xFKQorCURVS19EKERVS19EUFJJTlQoImludGVnZXIgZW5kaWFubmVzczogbGl0 dGxlIikpOworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVHRVJfTUUpCisJRFVLX0QoRFVLX0RQ UklOVCgiaW50ZWdlciBlbmRpYW5uZXNzOiBtaXhlZCIpKTsKKyNlbGlmIGRlZmluZWQoRFVLX1VT RV9JTlRFR0VSX0JFKQorCURVS19EKERVS19EUFJJTlQoImludGVnZXIgZW5kaWFubmVzczogYmln IikpOworI2Vsc2UKKwlEVUtfRChEVUtfRFBSSU5UKCJpbnRlZ2VyIGVuZGlhbm5lc3M6ID8/PyIp KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTEUpCisJRFVLX0QoRFVLX0RQ UklOVCgiSUVFRSBkb3VibGUgZW5kaWFubmVzczogbGl0dGxlIikpOworI2VsaWYgZGVmaW5lZChE VUtfVVNFX0RPVUJMRV9NRSkKKwlEVUtfRChEVUtfRFBSSU5UKCJJRUVFIGRvdWJsZSBlbmRpYW5u ZXNzOiBtaXhlZCIpKTsKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfQkUpCisJRFVLX0Qo RFVLX0RQUklOVCgiSUVFRSBkb3VibGUgZW5kaWFubmVzczogYmlnIikpOworI2Vsc2UKKwlEVUtf RChEVUtfRFBSSU5UKCJJRUVFIGRvdWJsZSBlbmRpYW5uZXNzOiA/Pz8iKSk7CisjZW5kaWYKK30K KyNlbmRpZiAgLyogRFVLX1VTRV9ERUJVRyAqLworCitEVUtfSU5URVJOQUwKK2R1a19oZWFwICpk dWtfaGVhcF9hbGxvYyhkdWtfYWxsb2NfZnVuY3Rpb24gYWxsb2NfZnVuYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfcmVhbGxvY19mdW5jdGlvbiByZWFsbG9jX2Z1bmMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX2ZyZWVfZnVuY3Rpb24gZnJlZV9mdW5jLAorICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKmhlYXBfdWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX2ZhdGFsX2Z1bmN0aW9uIGZhdGFsX2Z1bmMpIHsKKwlkdWtfaGVhcCAqcmVzID0gTlVM TDsKKwlkdWtfdWludDMyX3Qgc3RfaW5pdHNpemU7CisKKwlEVUtfRChEVUtfRFBSSU5UKCJhbGxv Y2F0ZSBoZWFwIikpOworCisJLyoKKwkgKiAgUmFuZG9tIGNvbmZpZyBzYW5pdHkgYXNzZXJ0cwor CSAqLworCisJRFVLX0FTU0VSVChEVUtfVVNFX1NUUlRBQl9NSU5TSVpFID49IDY0KTsKKworCURV S19BU1NFUlQoKERVS19IVFlQRV9TVFJJTkcgJiAweDAxVSkgPT0gMCk7CisJRFVLX0FTU0VSVCgo RFVLX0hUWVBFX0JVRkZFUiAmIDB4MDFVKSA9PSAwKTsKKwlEVUtfQVNTRVJUKChEVUtfSFRZUEVf T0JKRUNUICYgMHgwMVUpID09IDEpOyAgLyogRFVLX0hFQVBIRFJfSVNfT0JKRUNUKCkgcmVsaWVz IG9udCBoaXMuICovCisKKwkvKgorCSAqICBEZWJ1ZyBkdW1wIHR5cGUgc2l6ZXMKKwkgKi8KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwlkdWtfX2R1bXBfbWlzY19vcHRpb25zKCk7CisJ ZHVrX19kdW1wX3R5cGVfc2l6ZXMoKTsKKwlkdWtfX2R1bXBfdHlwZV9saW1pdHMoKTsKKyNlbmRp ZgorCisJLyoKKwkgKiAgSWYgc2VsZnRlc3RzIGVuYWJsZWQsIHJ1biB0aGVtIGFzIGVhcmx5IGFz IHBvc3NpYmxlLgorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NFTEZfVEVTVFMpCisJRFVL X0QoRFVLX0RQUklOVCgicnVuIHNlbGYgdGVzdHMiKSk7CisJaWYgKGR1a19zZWxmdGVzdF9ydW5f dGVzdHMoYWxsb2NfZnVuYywgcmVhbGxvY19mdW5jLCBmcmVlX2Z1bmMsIGhlYXBfdWRhdGEpID4g MCkgeworCQlmYXRhbF9mdW5jKGhlYXBfdWRhdGEsICJzZWxmIHRlc3QocykgZmFpbGVkIik7CisJ fQorCURVS19EKERVS19EUFJJTlQoInNlbGYgdGVzdHMgcGFzc2VkIikpOworI2VuZGlmCisKKwkv KgorCSAqICBJbXBvcnRhbnQgYXNzZXJ0LWxpa2UgY2hlY2tzIHRoYXQgc2hvdWxkIGJlIGVuYWJs ZWQgZXZlbgorCSAqICB3aGVuIGFzc2VydGlvbnMgYXJlIG90aGVyd2lzZSBub3QgZW5hYmxlZC4K KwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1JFR0NPTlNUX09QVElNSVpFKQorCS8q IENhbid0IGNoZWNrIHNpemVvZigpIHVzaW5nIHByZXByb2Nlc3NvciBzbyBleHBsaWNpdCBjaGVj ay4KKwkgKiBUaGlzIHdpbGwgYmUgb3B0aW1pemVkIGF3YXkgaW4gcHJhY3RpY2U7IHVuZm9ydHVu YXRlbHkgYQorCSAqIHdhcm5pbmcgaXMgZ2VuZXJhdGVkIG9uIHNvbWUgY29tcGlsZXJzIGFzIGEg cmVzdWx0LgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9QQUNLRURfVFZBTCkKKwlpZiAoc2l6 ZW9mKGR1a190dmFsKSAhPSA4KSB7CisjZWxzZQorCWlmIChzaXplb2YoZHVrX3R2YWwpICE9IDE2 KSB7CisjZW5kaWYKKwkJZmF0YWxfZnVuYyhoZWFwX3VkYXRhLCAic2l6ZW9mKGR1a190dmFsKSBu b3QgOCBvciAxNiwgY2Fubm90IHVzZSBEVUtfVVNFX0VYRUNfUkVHQ09OU1RfT1BUSU1JWkUgb3B0 aW9uIik7CisJfQorI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUkVHQ09OU1RfT1BUSU1JWkUgKi8K KworCS8qCisJICogIENvbXB1dGVkIHZhbHVlcyAoZS5nLiBJTkZJTklUWSkKKwkgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9DT01QVVRFRF9OQU4pCisJZG8geworCQkvKiBXb3JrYXJvdW5kIGZv ciBzb21lIGV4b3RpYyBwbGF0Zm9ybXMgd2hlcmUgTkFOIGlzIG1pc3NpbmcKKwkJICogYW5kIHRo ZSBleHByZXNzaW9uICgwLjAgLyAwLjApIGRvZXMgTk9UIHJlc3VsdCBpbiBhIE5hTi4KKwkJICog U3VjaCBwbGF0Zm9ybXMgdXNlIHRoZSBnbG9iYWwgJ2R1a19jb21wdXRlZF9uYW4nIHdoaWNoIG11 c3QKKwkJICogYmUgaW5pdGlhbGl6ZWQgYXQgcnVudGltZS4gIFVzZSAndm9sYXRpbGUnIHRvIGVu c3VyZSB0aGF0CisJCSAqIHRoZSBjb21waWxlciB3aWxsIGFjdHVhbGx5IGRvIHRoZSBjb21wdXRh dGlvbiBhbmQgbm90IHRyeQorCQkgKiB0byBkbyBjb25zdGFudCBmb2xkaW5nIHdoaWNoIG1pZ2h0 IHJlc3VsdCBpbiB0aGUgb3JpZ2luYWwKKwkJICogcHJvYmxlbS4KKwkJICovCisJCXZvbGF0aWxl IGRvdWJsZSBkYmwxID0gMC4wOworCQl2b2xhdGlsZSBkb3VibGUgZGJsMiA9IDAuMDsKKwkJZHVr X2NvbXB1dGVkX25hbiA9IGRibDEgLyBkYmwyOworCX0gd2hpbGUgKDApOworI2VuZGlmCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfQ09NUFVURURfSU5GSU5JVFkpCisJZG8geworCQkvKiBTaW1pbGFy IHdvcmthcm91bmQgZm9yIElORklOSVRZLiAqLworCQl2b2xhdGlsZSBkb3VibGUgZGJsMSA9IDEu MDsKKwkJdm9sYXRpbGUgZG91YmxlIGRibDIgPSAwLjA7CisJCWR1a19jb21wdXRlZF9pbmZpbml0 eSA9IGRibDEgLyBkYmwyOworCX0gd2hpbGUgKDApOworI2VuZGlmCisKKwkvKgorCSAqICBBbGxv Y2F0ZSBoZWFwIHN0cnVjdAorCSAqCisJICogIFVzZSBhIHJhdyBjYWxsLCBhbGwgbWFjcm9zIGV4 cGVjdCB0aGUgaGVhcCB0byBiZSBpbml0aWFsaXplZAorCSAqLworCisjaWYgZGVmaW5lZChEVUtf VVNFX0lOSkVDVF9IRUFQX0FMTE9DX0VSUk9SKSAmJiAoRFVLX1VTRV9JTkpFQ1RfSEVBUF9BTExP Q19FUlJPUiA9PSAxKQorCWdvdG8gZmFpbGVkOworI2VuZGlmCisJRFVLX0QoRFVLX0RQUklOVCgi YWxsb2MgZHVrX2hlYXAgb2JqZWN0IikpOworCXJlcyA9IChkdWtfaGVhcCAqKSBhbGxvY19mdW5j KGhlYXBfdWRhdGEsIHNpemVvZihkdWtfaGVhcCkpOworCWlmICghcmVzKSB7CisJCWdvdG8gZmFp bGVkOworCX0KKworCS8qCisJICogIFplcm8gdGhlIHN0cnVjdCwgYW5kIHN0YXJ0IGluaXRpYWxp emluZyByb3VnaGx5IGluIG9yZGVyCisJICovCisKKwlkdWtfbWVtemVybyhyZXMsIHNpemVvZigq cmVzKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJcmVzLT5oZWFwX2luaXRp YWxpemluZyA9IDE7CisjZW5kaWYKKworCS8qIGV4cGxpY2l0IE5VTEwgaW5pdHMgKi8KKyNpZiBk ZWZpbmVkKERVS19VU0VfRVhQTElDSVRfTlVMTF9JTklUKQorCXJlcy0+aGVhcF91ZGF0YSA9IE5V TEw7CisJcmVzLT5oZWFwX2FsbG9jYXRlZCA9IE5VTEw7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JF RkVSRU5DRV9DT1VOVElORykKKwlyZXMtPnJlZnplcm9fbGlzdCA9IE5VTEw7CisjZW5kaWYKKyNp ZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQpCisJcmVzLT5maW5hbGl6ZV9saXN0 ID0gTlVMTDsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlyZXMtPmN1cnJlbnRs eV9maW5hbGl6aW5nID0gTlVMTDsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNF X0NBQ0hFX0FDVElWQVRJT04pCisJcmVzLT5hY3RpdmF0aW9uX2ZyZWUgPSBOVUxMOworI2VuZGlm CisjaWYgZGVmaW5lZChEVUtfVVNFX0NBQ0hFX0NBVENIRVIpCisJcmVzLT5jYXRjaGVyX2ZyZWUg PSBOVUxMOworI2VuZGlmCisJcmVzLT5oZWFwX3RocmVhZCA9IE5VTEw7CisJcmVzLT5jdXJyX3Ro cmVhZCA9IE5VTEw7CisJcmVzLT5oZWFwX29iamVjdCA9IE5VTEw7CisjaWYgZGVmaW5lZChEVUtf VVNFX1NUUlRBQl9QVFJDT01QKQorCXJlcy0+c3RydGFibGUxNiA9IE5VTEw7CisjZWxzZQorCXJl cy0+c3RydGFibGUgPSBOVUxMOworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX1JPTV9TVFJJ TkdTKQorCS8qIG5vIHJlcy0+c3Ryc1tdICovCisjZWxzZSAgLyogRFVLX1VTRV9ST01fU1RSSU5H UyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJLyogcmVzLT5zdHJzMTZbXSBp cyB6ZXJvZWQgYW5kIHplcm8gZGVjb2RlcyB0byBOVUxMLCBzbyBubyBOVUxMIGluaXRzLiAqLwor I2Vsc2UKKwl7CisJCWR1a19zbWFsbF91aW50X3QgaTsKKwkgICAgICAgIGZvciAoaSA9IDA7IGkg PCBEVUtfSEVBUF9OVU1fU1RSSU5HUzsgaSsrKSB7CisJCQlyZXMtPnN0cnNbaV0gPSBOVUxMOwor CSAgICAgICAgfQorCX0KKyNlbmRpZgorI2VuZGlmICAvKiBEVUtfVVNFX1JPTV9TVFJJTkdTICov CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJcmVzLT5kYmdfcmVhZF9j YiA9IE5VTEw7CisJcmVzLT5kYmdfd3JpdGVfY2IgPSBOVUxMOworCXJlcy0+ZGJnX3BlZWtfY2Ig PSBOVUxMOworCXJlcy0+ZGJnX3JlYWRfZmx1c2hfY2IgPSBOVUxMOworCXJlcy0+ZGJnX3dyaXRl X2ZsdXNoX2NiID0gTlVMTDsKKwlyZXMtPmRiZ19yZXF1ZXN0X2NiID0gTlVMTDsKKwlyZXMtPmRi Z191ZGF0YSA9IE5VTEw7CisJcmVzLT5kYmdfcGF1c2VfYWN0ID0gTlVMTDsKKyNlbmRpZgorI2Vu ZGlmICAvKiBEVUtfVVNFX0VYUExJQ0lUX05VTExfSU5JVCAqLworCisJcmVzLT5hbGxvY19mdW5j ID0gYWxsb2NfZnVuYzsKKwlyZXMtPnJlYWxsb2NfZnVuYyA9IHJlYWxsb2NfZnVuYzsKKwlyZXMt PmZyZWVfZnVuYyA9IGZyZWVfZnVuYzsKKwlyZXMtPmhlYXBfdWRhdGEgPSBoZWFwX3VkYXRhOwor CXJlcy0+ZmF0YWxfZnVuYyA9IGZhdGFsX2Z1bmM7CisKKwkvKiBYWFg6IGZvciBub3cgdGhlcmUn cyBhIHBvaW50ZXIgcGFja2luZyB6ZXJvIGFzc3VtcHRpb24sIGkuZS4KKwkgKiBOVUxMIDw9PiBj b21wcmVzc2VkIHBvaW50ZXIgMC4gIElmIHRoaXMgaXMgcmVtb3ZlZCwgbWF5IG5lZWQKKwkgKiB0 byBwcmVjb21wdXRlIGUuZy4gbnVsbDE2IGhlcmUuCisJICovCisKKwkvKiByZXMtPm1zX3RyaWdn ZXJfY291bnRlciA9PSAwIC0+IG5vdyBjYXVzZXMgaW1tZWRpYXRlIEdDOyB3aGljaCBpcyBPSyAq LworCisJLyogUHJldmVudCBtYXJrLWFuZC1zd2VlcCBhbmQgZmluYWxpemVyIGV4ZWN1dGlvbiB1 bnRpbCBoZWFwIGlzIGNvbXBsZXRlbHkKKwkgKiBpbml0aWFsaXplZC4KKwkgKi8KKwlEVUtfQVNT RVJUKHJlcy0+bXNfcHJldmVudF9jb3VudCA9PSAwKTsKKwlEVUtfQVNTRVJUKHJlcy0+cGZfcHJl dmVudF9jb3VudCA9PSAwKTsKKwlyZXMtPm1zX3ByZXZlbnRfY291bnQgPSAxOworCXJlcy0+cGZf cHJldmVudF9jb3VudCA9IDE7CisJRFVLX0FTU0VSVChyZXMtPm1zX3J1bm5pbmcgPT0gMCk7CisK KwlyZXMtPmNhbGxfcmVjdXJzaW9uX2RlcHRoID0gMDsKKwlyZXMtPmNhbGxfcmVjdXJzaW9uX2xp bWl0ID0gRFVLX1VTRV9OQVRJVkVfQ0FMTF9SRUNMSU1JVDsKKworCS8qIFhYWDogdXNlIHRoZSBw b2ludGVyIGFzIGEgc2VlZCBmb3Igbm93OiBtaXggaW4gdGltZSBhdCBsZWFzdCAqLworCisJLyog VGhlIGNhc3RzIHRocm91Z2ggZHVrX3VpbnRwdHJfdCBpcyB0byBhdm9pZCB0aGUgZm9sbG93aW5n IEdDQyB3YXJuaW5nOgorCSAqCisJICogICB3YXJuaW5nOiBjYXN0IGZyb20gcG9pbnRlciB0byBp bnRlZ2VyIG9mIGRpZmZlcmVudCBzaXplIFstV3BvaW50ZXItdG8taW50LWNhc3RdCisJICoKKwkg KiBUaGlzIHN0aWxsIGdlbmVyYXRlcyBhIC9XcDY0IHdhcm5pbmcgb24gVlMyMDEwIHdoZW4gY29t cGlsaW5nIGZvciB4ODYuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1JPTV9TVFJJTkdTKQor CS8qIFhYWDogbWFrZSBhIGNvbW1vbiBEVUtfVVNFXyBvcHRpb24sIGFuZCBhbGxvdyBjdXN0b20g Zml4ZWQgc2VlZD8gKi8KKwlEVUtfRChEVUtfRFBSSU5UKCJ1c2luZyByb20gc3RyaW5ncywgZm9y Y2UgaGVhcCBoYXNoX3NlZWQgdG8gZml4ZWQgdmFsdWUgMHglMDhseCIsIChsb25nKSBEVUtfX0ZJ WEVEX0hBU0hfU0VFRCkpOworCXJlcy0+aGFzaF9zZWVkID0gKGR1a191aW50MzJfdCkgRFVLX19G SVhFRF9IQVNIX1NFRUQ7CisjZWxzZSAgLyogRFVLX1VTRV9ST01fU1RSSU5HUyAqLworCXJlcy0+ aGFzaF9zZWVkID0gKGR1a191aW50MzJfdCkgKGR1a191aW50cHRyX3QpIHJlczsKKyNpZiAhZGVm aW5lZChEVUtfVVNFX1NUUkhBU0hfREVOU0UpCisJcmVzLT5oYXNoX3NlZWQgXj0gNTM4MTsgIC8q IEJlcm5zdGVpbiBoYXNoIGluaXQgdmFsdWUgaXMgbm9ybWFsbHkgNTM4MTsgWE9SIGl0IGluIGlu IGNhc2UgcG9pbnRlciBsb3cgYml0cyBhcmUgMCAqLworI2VuZGlmCisjZW5kaWYgIC8qIERVS19V U0VfUk9NX1NUUklOR1MgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FWFBMSUNJVF9OVUxMX0lO SVQpCisJcmVzLT5sai5qbXBidWZfcHRyID0gTlVMTDsKKyNlbmRpZgorCURVS19BU1NFUlQocmVz LT5sai50eXBlID09IERVS19MSl9UWVBFX1VOS05PV04pOyAgLyogemVybyAqLworCURVS19BU1NF UlQocmVzLT5sai5pc2Vycm9yID09IDApOworCURVS19UVkFMX1NFVF9VTkRFRklORUQoJnJlcy0+ bGoudmFsdWUxKTsKKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKCZyZXMtPmxqLnZhbHVlMik7CisK KwlEVUtfQVNTRVJUX0xKU1RBVEVfVU5TRVQocmVzKTsKKworCS8qCisJICogIEluaXQgc3RyaW5n dGFibGU6IGZpeGVkIHZhcmlhbnQKKwkgKi8KKworCXN0X2luaXRzaXplID0gRFVLX1VTRV9TVFJU QUJfTUlOU0laRTsKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BUUkNPTVApCisJcmVzLT5z dHJ0YWJsZTE2ID0gKGR1a191aW50MTZfdCAqKSBhbGxvY19mdW5jKGhlYXBfdWRhdGEsIHNpemVv ZihkdWtfdWludDE2X3QpICogc3RfaW5pdHNpemUpOworCWlmIChyZXMtPnN0cnRhYmxlMTYgPT0g TlVMTCkgeworCQlnb3RvIGZhaWxlZDsKKwl9CisjZWxzZQorCXJlcy0+c3RydGFibGUgPSAoZHVr X2hzdHJpbmcgKiopIGFsbG9jX2Z1bmMoaGVhcF91ZGF0YSwgc2l6ZW9mKGR1a19oc3RyaW5nICop ICogc3RfaW5pdHNpemUpOworCWlmIChyZXMtPnN0cnRhYmxlID09IE5VTEwpIHsKKwkJZ290byBm YWlsZWQ7CisJfQorI2VuZGlmCisJcmVzLT5zdF9zaXplID0gc3RfaW5pdHNpemU7CisJcmVzLT5z dF9tYXNrID0gc3RfaW5pdHNpemUgLSAxOworI2lmIChEVUtfVVNFX1NUUlRBQl9NSU5TSVpFICE9 IERVS19VU0VfU1RSVEFCX01BWFNJWkUpCisJRFVLX0FTU0VSVChyZXMtPnN0X2NvdW50ID09IDAp OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BUUkNPTVApCisJLyogemVy byBhc3N1bXB0aW9uICovCisJZHVrX21lbXplcm8ocmVzLT5zdHJ0YWJsZTE2LCBzaXplb2YoZHVr X3VpbnQxNl90KSAqIHN0X2luaXRzaXplKTsKKyNlbHNlCisjaWYgZGVmaW5lZChEVUtfVVNFX0VY UExJQ0lUX05VTExfSU5JVCkKKwl7CisJCWR1a191aW50MzJfdCBpOworCSAgICAgICAgZm9yIChp ID0gMDsgaSA8IHN0X2luaXRzaXplOyBpKyspIHsKKwkJCXJlcy0+c3RydGFibGVbaV0gPSBOVUxM OworCSAgICAgICAgfQorCX0KKyNlbHNlCisJZHVrX21lbXplcm8ocmVzLT5zdHJ0YWJsZSwgc2l6 ZW9mKGR1a19oc3RyaW5nICopICogc3RfaW5pdHNpemUpOworI2VuZGlmICAvKiBEVUtfVVNFX0VY UExJQ0lUX05VTExfSU5JVCAqLworI2VuZGlmICAvKiBEVUtfVVNFX1NUUlRBQl9QVFJDT01QICov CisKKwkvKgorCSAqICBJbml0IHN0cmluZ2NhY2hlCisJICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfRVhQTElDSVRfTlVMTF9JTklUKQorCXsKKwkJZHVrX3VpbnRfdCBpOworCQlmb3IgKGkgPSAw OyBpIDwgRFVLX0hFQVBfU1RSQ0FDSEVfU0laRTsgaSsrKSB7CisJCQlyZXMtPnN0cmNhY2hlW2ld LmggPSBOVUxMOworCQl9CisJfQorI2VuZGlmCisKKwkvKgorCSAqICBJbml0IGxpdGNhY2hlCisJ ICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0xJVENBQ0hFX1NJWkUpCisJRFVLX0FTU0VSVChEVUtf VVNFX0xJVENBQ0hFX1NJWkUgPiAwKTsKKwlEVUtfQVNTRVJUKERVS19JU19QT1dFUl9PRl9UV08o KGR1a191aW50X3QpIERVS19VU0VfTElUQ0FDSEVfU0laRSkpOworI2lmIGRlZmluZWQoRFVLX1VT RV9FWFBMSUNJVF9OVUxMX0lOSVQpCisJeworCQlkdWtfdWludF90IGk7CisJCWZvciAoaSA9IDA7 IGkgPCBEVUtfVVNFX0xJVENBQ0hFX1NJWkU7IGkrKykgeworCQkJcmVzLT5saXRjYWNoZVtpXS5h ZGRyID0gTlVMTDsKKwkJCXJlcy0+bGl0Y2FjaGVbaV0uaCA9IE5VTEw7CisJCX0KKwl9CisjZW5k aWYKKyNlbmRpZiAgLyogRFVLX1VTRV9MSVRDQUNIRV9TSVpFICovCisKKwkvKiBYWFg6IGVycm9y IGhhbmRsaW5nIGlzIGluY29tcGxldGUuICBJdCB3b3VsZCBiZSBjbGVhbmVzdCBpZgorCSAqIHRo ZXJlIHdhcyBhIHNldGptcCBjYXRjaHBvaW50LCBzbyB0aGF0IGFsbCBpbml0IGNvZGUgY291bGQK KwkgKiBmcmVlbHkgdGhyb3cgZXJyb3JzLiAgSWYgdGhhdCB3ZXJlIHRoZSBjYXNlLCB0aGUgcmV0 dXJuIGNvZGUKKwkgKiBwYXNzaW5nIGhlcmUgY291bGQgYmUgcmVtb3ZlZC4KKwkgKi8KKworCS8q CisJICogIEluaXQgYnVpbHQtaW4gc3RyaW5ncworCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNF X0lOSkVDVF9IRUFQX0FMTE9DX0VSUk9SKSAmJiAoRFVLX1VTRV9JTkpFQ1RfSEVBUF9BTExPQ19F UlJPUiA9PSAyKQorCWdvdG8gZmFpbGVkOworI2VuZGlmCisJRFVLX0QoRFVLX0RQUklOVCgiaGVh cCBpbml0OiBpbml0aWFsaXplIGhlYXAgc3RyaW5ncyIpKTsKKwlpZiAoIWR1a19faW5pdF9oZWFw X3N0cmluZ3MocmVzKSkgeworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKgorCSAqICBJbml0IHRo ZSBoZWFwIHRocmVhZAorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0lOSkVDVF9IRUFQX0FM TE9DX0VSUk9SKSAmJiAoRFVLX1VTRV9JTkpFQ1RfSEVBUF9BTExPQ19FUlJPUiA9PSAzKQorCWdv dG8gZmFpbGVkOworI2VuZGlmCisJRFVLX0QoRFVLX0RQUklOVCgiaGVhcCBpbml0OiBpbml0aWFs aXplIGhlYXAgdGhyZWFkIikpOworCWlmICghZHVrX19pbml0X2hlYXBfdGhyZWFkKHJlcykpIHsK KwkJZ290byBmYWlsZWQ7CisJfQorCisJLyoKKwkgKiAgSW5pdCB0aGUgaGVhcCBvYmplY3QKKwkg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9JTkpFQ1RfSEVBUF9BTExPQ19FUlJPUikgJiYgKERV S19VU0VfSU5KRUNUX0hFQVBfQUxMT0NfRVJST1IgPT0gNCkKKwlnb3RvIGZhaWxlZDsKKyNlbmRp ZgorCURVS19EKERVS19EUFJJTlQoImhlYXAgaW5pdDogaW5pdGlhbGl6ZSBoZWFwIG9iamVjdCIp KTsKKwlEVUtfQVNTRVJUKHJlcy0+aGVhcF90aHJlYWQgIT0gTlVMTCk7CisJcmVzLT5oZWFwX29i amVjdCA9IGR1a19ob2JqZWN0X2FsbG9jX3VuY2hlY2tlZChyZXMsIERVS19IT0JKRUNUX0ZMQUdf RVhURU5TSUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMgfAorCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19G TEFHUyhEVUtfSE9CSkVDVF9DTEFTU19PQkpFQ1QpKTsKKwlpZiAocmVzLT5oZWFwX29iamVjdCA9 PSBOVUxMKSB7CisJCWdvdG8gZmFpbGVkOworCX0KKwlEVUtfSE9CSkVDVF9JTkNSRUYocmVzLT5o ZWFwX3RocmVhZCwgcmVzLT5oZWFwX29iamVjdCk7CisKKwkvKgorCSAqICBPZGRzIGFuZCBlbmRz IGRlcGVuZGluZyBvbiB0aGUgaGVhcCB0aHJlYWQKKwkgKi8KKworI2lmICFkZWZpbmVkKERVS19V U0VfR0VUX1JBTkRPTV9ET1VCTEUpCisjaWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKSB8 fCAhZGVmaW5lZChEVUtfVVNFXzY0QklUX09QUykKKwlyZXMtPnJuZF9zdGF0ZSA9IChkdWtfdWlu dDMyX3QpIGR1a190aW1lX2dldF9lY21hc2NyaXB0X3RpbWUocmVzLT5oZWFwX3RocmVhZCk7CisJ ZHVrX3V0aWxfdGlueXJhbmRvbV9wcmVwYXJlX3NlZWQocmVzLT5oZWFwX3RocmVhZCk7CisjZWxz ZQorCXJlcy0+cm5kX3N0YXRlWzBdID0gKGR1a191aW50NjRfdCkgZHVrX3RpbWVfZ2V0X2VjbWFz Y3JpcHRfdGltZShyZXMtPmhlYXBfdGhyZWFkKTsKKwlEVUtfQVNTRVJUKHJlcy0+cm5kX3N0YXRl WzFdID09IDApOyAgLyogTm90IGZpbGxlZCBoZXJlLCBmaWxsZWQgaW4gYnkgc2VlZCBwcmVwYXJh dGlvbi4gKi8KKyNpZiAwICAvKiBNYW51YWwgdGVzdCB2YWx1ZXMgbWF0Y2hpbmcgbWlzYy94b3Jv c2hpcm8xMjhwbHVzX3Rlc3QuYy4gKi8KKwlyZXMtPnJuZF9zdGF0ZVswXSA9IERVS19VNjRfQ09O U1RBTlQoMHhkZWFkYmVlZjEyMzQ1Njc4KTsKKwlyZXMtPnJuZF9zdGF0ZVsxXSA9IERVS19VNjRf Q09OU1RBTlQoMHhjYWZlZDAwZDEyMzQ1Njc4KTsKKyNlbmRpZgorCWR1a191dGlsX3RpbnlyYW5k b21fcHJlcGFyZV9zZWVkKHJlcy0+aGVhcF90aHJlYWQpOworCS8qIE1peCBpbiBoZWFwIHBvaW50 ZXI6IHRoaXMgZW5zdXJlcyB0aGF0IGlmIHR3byBEdWt0YXBlIGhlYXBzIGFyZQorCSAqIGNyZWF0 ZWQgb24gdGhlIHNhbWUgbWlsbGlzZWNvbmQsIHRoZXkgZ2V0IGEgZGlmZmVyZW50IFBSTkcKKwkg KiBzZXF1ZW5jZSAodW5sZXNzIGUuZy4gdmlydHVhbCBtZW1vcnkgYWRkcmVzc2VzIGNhdXNlIGFs c28gdGhlCisJICogaGVhcCBvYmplY3QgcG9pbnRlciB0byBiZSB0aGUgc2FtZSkuCisJICovCisJ eworCQlkdWtfdWludDY0X3QgdG1wX3U2NDsKKwkJdG1wX3U2NCA9IDA7CisJCWR1a19tZW1jcHko KHZvaWQgKikgJnRtcF91NjQsCisJCSAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnJlcywKKwkJ ICAgICAgICAgICAoc2l6ZV90KSAoc2l6ZW9mKHZvaWQgKikgPj0gc2l6ZW9mKGR1a191aW50NjRf dCkgPyBzaXplb2YoZHVrX3VpbnQ2NF90KSA6IHNpemVvZih2b2lkICopKSk7CisJCXJlcy0+cm5k X3N0YXRlWzFdIF49IHRtcF91NjQ7CisJfQorCWRvIHsKKwkJZHVrX3NtYWxsX3VpbnRfdCBpOwor CQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJLyogVGhyb3cgYXdheSBhIGZldyBpbml0 aWFsIHJhbmRvbSBudW1iZXJzIGp1c3QgaW4KKwkJCSAqIGNhc2UuICBQcm9iYWJseSB1bm5lY2Vz c2FyeSBkdWUgdG8gU3BsaXRNaXg2NAorCQkJICogcHJlcGFyYXRpb24uCisJCQkgKi8KKwkJCSh2 b2lkKSBkdWtfdXRpbF90aW55cmFuZG9tX2dldF9kb3VibGUocmVzLT5oZWFwX3RocmVhZCk7CisJ CX0KKwl9IHdoaWxlICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKwkvKgorCSAqICBBbGxvdyBmaW5h bGl6ZXIgYW5kIG1hcmstYW5kLXN3ZWVwIHByb2Nlc3NpbmcuCisJICovCisKKwlEVUtfRChEVUtf RFBSSU5UKCJoZWFwIGluaXQ6IGFsbG93IGZpbmFsaXplci9tYXJrLWFuZC1zd2VlcCBwcm9jZXNz aW5nIikpOworCURVS19BU1NFUlQocmVzLT5tc19wcmV2ZW50X2NvdW50ID09IDEpOworCURVS19B U1NFUlQocmVzLT5wZl9wcmV2ZW50X2NvdW50ID09IDEpOworCXJlcy0+bXNfcHJldmVudF9jb3Vu dCA9IDA7CisJcmVzLT5wZl9wcmV2ZW50X2NvdW50ID0gMDsKKwlEVUtfQVNTRVJUKHJlcy0+bXNf cnVubmluZyA9PSAwKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlyZXMtPmhl YXBfaW5pdGlhbGl6aW5nID0gMDsKKyNlbmRpZgorCisJLyoKKwkgKiAgQWxsIGRvbmUuCisJICov CisKKwlEVUtfRChEVUtfRFBSSU5UKCJhbGxvY2F0ZWQgaGVhcDogJXAiLCAodm9pZCAqKSByZXMp KTsKKwlyZXR1cm4gcmVzOworCisgZmFpbGVkOgorCURVS19EKERVS19EUFJJTlQoImhlYXAgYWxs b2NhdGlvbiBmYWlsZWQiKSk7CisKKwlpZiAocmVzICE9IE5VTEwpIHsKKwkJLyogQXNzdW1lcyB0 aGF0IGFsbG9jYXRlZCBwb2ludGVycyBhbmQgYWxsb2MgZnVuY3MgYXJlIHZhbGlkCisJCSAqIGlm IHJlcyBleGlzdHMuCisJCSAqLworCQlEVUtfQVNTRVJUKHJlcy0+bXNfcHJldmVudF9jb3VudCA9 PSAxKTsKKwkJRFVLX0FTU0VSVChyZXMtPnBmX3ByZXZlbnRfY291bnQgPT0gMSk7CisJCURVS19B U1NFUlQocmVzLT5tc19ydW5uaW5nID09IDApOworCQlpZiAocmVzLT5oZWFwX3RocmVhZCAhPSBO VUxMKSB7CisJCQlyZXMtPm1zX3ByZXZlbnRfY291bnQgPSAwOworCQkJcmVzLT5wZl9wcmV2ZW50 X2NvdW50ID0gMDsKKwkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCQlyZXMt PmhlYXBfaW5pdGlhbGl6aW5nID0gMDsKKyNlbmRpZgorCisJCURVS19BU1NFUlQocmVzLT5hbGxv Y19mdW5jICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKHJlcy0+cmVhbGxvY19mdW5jICE9IE5VTEwp OworCQlEVUtfQVNTRVJUKHJlcy0+ZnJlZV9mdW5jICE9IE5VTEwpOworCQlkdWtfaGVhcF9mcmVl KHJlcyk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIGF1dG9tYXRpYyB1bmRlZnMgKi8K KyN1bmRlZiBEVUtfX0RVTVBMTV9TSUdORUQKKyN1bmRlZiBEVUtfX0RVTVBMTV9TSUdORURfUkFX CisjdW5kZWYgRFVLX19EVU1QTE1fVU5TSUdORUQKKyN1bmRlZiBEVUtfX0RVTVBMTV9VTlNJR05F RF9SQVcKKyN1bmRlZiBEVUtfX0RVTVBTWgorI3VuZGVmIERVS19fRklYRURfSEFTSF9TRUVECisv KgorICogIEZpbmFsaXplciBoYW5kbGluZy4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJu YWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJ WkVSX1NVUFBPUlQpCisKKy8qCisgKiAgRmFrZSB0b3J0dXJlIGZpbmFsaXplci4KKyAqLworCisj aWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9UT1JUVVJFKQorRFVLX0xPQ0FMIGR1a19yZXRf dCBkdWtfX2Zha2VfZ2xvYmFsX2ZpbmFsaXplcihkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0RE KERVS19ERFBSSU5UKCJmYWtlIGdsb2JhbCB0b3J0dXJlIGZpbmFsaXplciBleGVjdXRlZCIpKTsK KworCS8qIFJlcXVpcmUgYSBsb3Qgb2Ygc3RhY2sgdG8gZm9yY2UgYSB2YWx1ZSBzdGFjayBncm93 L3Nocmluay4gKi8KKwlkdWtfcmVxdWlyZV9zdGFjayh0aHIsIDEwMDAwMCk7CisKKwkvKiBGb3Jj ZSBhIHJlYWxsb2NhdGlvbiB3aXRoIHBvaW50ZXIgY2hhbmdlIGZvciB2YWx1ZSBzdGFjaworCSAq IHRvIG1heGltaXplIHNpZGUgZWZmZWN0cy4KKwkgKi8KKwlkdWtfaHRocmVhZF92YWxzdGFja190 b3J0dXJlX3JlYWxsb2ModGhyKTsKKworCS8qIElubmVyIGZ1bmN0aW9uIGNhbGwsIGVycm9yIHRo cm93LiAqLworCWR1a19ldmFsX3N0cmluZ19ub3Jlc3VsdCh0aHIsCisJCSIoZnVuY3Rpb24gZHVt bXkoKSB7XG4iCisJCSIgICAgZHVtbXkucHJvdG90eXBlID0gbnVsbDsgIC8qIGJyZWFrIHJlZmVy ZW5jZSBsb29wICovXG4iCisJCSIgICAgdHJ5IHtcbiIKKwkJIiAgICAgICAgdGhyb3cgJ2Zha2Ut ZmluYWxpemVyLWR1bW15LWVycm9yJztcbiIKKwkJIiAgICB9IGNhdGNoIChlKSB7XG4iCisJCSIg ICAgICAgIHZvaWQgZTtcbiIKKwkJIiAgICB9XG4iCisJCSJ9KSgpIik7CisKKwkvKiBUaGUgYWJv dmUgY3JlYXRlcyBnYXJiYWdlIChlLmcuIGEgZnVuY3Rpb24gaW5zdGFuY2UpLiAgQmVjYXVzZQor CSAqIHRoZSBmdW5jdGlvbi9wcm90b3R5cGUgcmVmZXJlbmNlIGxvb3AgaXMgYnJva2VuLCBpdCBn ZXRzIGNvbGxlY3RlZAorCSAqIGltbWVkaWF0ZWx5IGJ5IERFQ1JFRi4gIElmIEZ1bmN0aW9uLnBy b3RvdHlwZSBoYXMgYSBfRmluYWxpemVyCisJICogcHJvcGVydHkgKGhhcHBlbnMgaW4gc29tZSB0 ZXN0IGNhc2VzKSwgdGhlIGdhcmJhZ2UgZ2V0cyBxdWV1ZWQgdG8KKwkgKiBmaW5hbGl6ZV9saXN0 LiAgVGhpcyBzdGlsbCB3b24ndCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGJlY2F1c2UKKwkgKiB0 aGUgdG9ydHVyZSBmaW5hbGl6ZXIgaXMgY2FsbGVkIG9uY2UgcGVyIGZpbmFsaXplX2xpc3QgcnVu IGFuZAorCSAqIHRoZSBnYXJiYWdlIGdldHMgaGFuZGxlZCBpbiB0aGUgc2FtZSBydW4uICAoSWYg dGhlIGdhcmJhZ2UgbmVlZHMKKwkgKiBtYXJrLWFuZC1zd2VlcCBjb2xsZWN0aW9uLCBhbiBpbmZp bml0ZSBsb29wIG1pZ2h0IGVuc3VlLikKKwkgKi8KKwlyZXR1cm4gMDsKK30KKworRFVLX0xPQ0FM IHZvaWQgZHVrX19ydW5fZ2xvYmFsX3RvcnR1cmVfZmluYWxpemVyKGR1a19odGhyZWFkICp0aHIp IHsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKworCS8qIEF2b2lkIGZha2UgZmluYWxpemF0 aW9uIHdoZW4gY2FsbHN0YWNrIGxpbWl0IGlzIG5lYXIuICBPdGhlcndpc2UKKwkgKiBhIGNhbGxz dGFjayBsaW1pdCBlcnJvciB3aWxsIGJlIGNyZWF0ZWQsIHRoZW4gcmVmemVybydlZC4gIFRoZQor CSAqICs1IGhlYWRyb29tIGlzIGNvbnNlcnZhdGl2ZS4KKwkgKi8KKwlpZiAodGhyLT5oZWFwLT5j YWxsX3JlY3Vyc2lvbl9kZXB0aCArIDUgPj0gdGhyLT5oZWFwLT5jYWxsX3JlY3Vyc2lvbl9saW1p dCB8fAorCSAgICB0aHItPmNhbGxzdGFja190b3AgKyA1ID49IERVS19VU0VfQ0FMTFNUQUNLX0xJ TUlUKSB7CisJCURVS19EKERVS19EUFJJTlQoInNraXAgZ2xvYmFsIHRvcnR1cmUgZmluYWxpemVy LCB0b28gbGl0dGxlIGhlYWRyb29tIGZvciBjYWxsIHJlY3Vyc2lvbiBvciBjYWxsIHN0YWNrIHNp emUiKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBSdW4gZmFrZSBmaW5hbGl6ZXIuICBBdm9pZCBj cmVhdGluZyB1bm5lY2Vzc2FyeSBnYXJiYWdlLiAqLworCWR1a19wdXNoX2NfZnVuY3Rpb24odGhy LCBkdWtfX2Zha2VfZ2xvYmFsX2ZpbmFsaXplciwgMCAvKm5hcmdzKi8pOworCSh2b2lkKSBkdWtf cGNhbGwodGhyLCAwIC8qbmFyZ3MqLyk7CisJZHVrX3BvcCh0aHIpOworfQorI2VuZGlmICAvKiBE VUtfVVNFX0ZJTkFMSVpFUl9UT1JUVVJFICovCisKKy8qCisgKiAgUHJvY2VzcyB0aGUgZmluYWxp emVfbGlzdCB0byBjb21wbGV0aW9uLgorICoKKyAqICBBbiBvYmplY3QgbWF5IGJlIHBsYWNlZCBv biBmaW5hbGl6ZV9saXN0IGJ5IGVpdGhlciByZWZjb3VudGluZyBvcgorICogIG1hcmstYW5kLXN3 ZWVwLiAgVGhlIHJlZmNvdW50IG9mIG9iamVjdHMgcGxhY2VkIGJ5IHJlZmNvdW50aW5nIHdpbGwg YmUKKyAqICB6ZXJvOyB0aGUgcmVmY291bnQgb2Ygb2JqZWN0cyBwbGFjZWQgYnkgbWFyay1hbmQt c3dlZXAgaXMgPiAwLiAgSW4gYm90aAorICogIGNhc2VzIHRoZSByZWZjb3VudCBpcyBidW1wZWQg YnkgMSBhcnRpZmljaWFsbHkgc28gdGhhdCBhIFJFRlpFUk8gZXZlbnQKKyAqICBjYW4gbmV2ZXIg aGFwcGVuIHdoaWxlIGFuIG9iamVjdCBpcyB3YWl0aW5nIGZvciBmaW5hbGl6YXRpb24uICBXaXRo b3V0CisgKiAgdGhpcyBidW1wIGEgUkVGWkVSTyBjb3VsZCBub3cgaGFwcGVuIGJlY2F1c2UgdXNl ciBjb2RlIG1heSBjYWxsCisgKiAgZHVrX3B1c2hfaGVhcHB0cigpIGFuZCB0aGVuIHBvcCBhIHZh bHVlIGV2ZW4gd2hlbiBpdCdzIG9uIGZpbmFsaXplX2xpc3QuCisgKgorICogIExpc3QgcHJvY2Vz c2luZyBhc3N1bWVzIHJlZmNvdW50cyBhcmUga2VwdCB1cC10by1kYXRlIGF0IGFsbCB0aW1lcywg c28KKyAqICB0aGF0IG9uY2UgdGhlIGZpbmFsaXplciByZXR1cm5zLCBhIHplcm8gcmVmY291bnQg aXMgYSByZWxpYWJsZSByZWFzb24gdG8KKyAqICBmcmVlIHRoZSBvYmplY3QgaW1tZWRpYXRlbHkg cmF0aGVyIHRoYW4gcGxhY2UgaXQgYmFjayB0byB0aGUgaGVhcC4gIFRoaXMKKyAqICBpcyB0aGUg Y2FzZSBiZWNhdXNlIHdlIHJ1biBvdXRzaWRlIG9mIHJlZnplcm9fbGlzdCBwcm9jZXNzaW5nIHNv IHRoYXQKKyAqICBERUNSRUYgY2FzY2FkZXMgYXJlIGhhbmRsZWQgZnVsbHkgaW5saW5lLgorICoK KyAqICBGb3IgbWFyay1hbmQtc3dlZXAgcXVldWVkIG9iamVjdHMgKGhhZF96ZXJvX3JlZmNvdW50 IGZhbHNlKSB0aGUgb2JqZWN0CisgKiAgbWF5IGJlIGZyZWVkIGltbWVkaWF0ZWx5IGlmIGl0cyBy ZWZjb3VudCBpcyB6ZXJvIGFmdGVyIHRoZSBmaW5hbGl6ZXIgY2FsbAorICogIChpLmUuIGZpbmFs aXplciByZW1vdmVkIHRoZSByZWZlcmVuY2UgbG9vcCBmb3IgdGhlIG9iamVjdCkuICBJZiBub3Qs IHRoZQorICogIG5leHQgbWFyay1hbmQtc3dlZXAgd2lsbCBjb2xsZWN0IHRoZSBvYmplY3QgdW5s ZXNzIGl0IGhhcyBiZWNvbWUgcmVhY2hhYmxlCisgKiAgKGkuZS4gcmVzY3VlZCkgYnkgdGhhdCB0 aW1lIGFuZCBpdHMgcmVmY291bnQgaGFzbid0IGZhbGxlbiB0byB6ZXJvIGJlZm9yZQorICogIHRo YXQuICBNYXJrLWFuZC1zd2VlcCBkZXRlY3RzIHRoZXNlIG9iamVjdHMgYmVjYXVzZSB0aGVpciBG SU5BTElaRUQgZmxhZworICogIGlzIHNldC4KKyAqCisgKiAgVGhlcmUncyBhbiBpbmhlcmVudCBs aW1pdGF0aW9uIGZvciBtYXJrLWFuZC1zd2VlcCBmaW5hbGl6ZXIgcmVzY3Vpbmc6IGFuCisgKiAg b2JqZWN0IHdvbid0IGdldCByZWZpbmFsaXplZCBpZiAoMSkgaXQncyByZXNjdWVkLCBidXQgKDIp IGJlY29tZXMKKyAqICB1bnJlYWNoYWJsZSBiZWZvcmUgbWFyay1hbmQtc3dlZXAgaGFzIGhhZCB0 aW1lIHRvIG5vdGljZSBpdC4gIFRoZSBuZXh0CisgKiAgbWFyay1hbmQtc3dlZXAgcm91bmQgc2lt cGx5IGRvZXNuJ3QgaGF2ZSBhbnkgaW5mb3JtYXRpb24gb2Ygd2hldGhlciB0aGUKKyAqICBvYmpl Y3QgaGFzIGJlZW4gdW5yZWFjaGFibGUgdGhlIHdob2xlIHRpbWUgb3Igbm90ICh0aGUgb25seSB3 YXkgdG8gZ2V0CisgKiAgdGhhdCBpbmZvcm1hdGlvbiB3b3VsZCBiZSBhIG1hcmstYW5kLXN3ZWVw IHBhc3MgZm9yICpldmVyeSBmaW5hbGl6ZWQKKyAqICBvYmplY3QqKS4gIFRoaXMgaXMgYXdrd2Fy ZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGJlY2F1c2UgdGhlIG1hcmstYW5kLXN3ZWVwCisgKiAgcm91 bmQgaXMgbm90IGdlbmVyYWxseSB2aXNpYmxlIG9yIHVuZGVyIGZ1bGwgYXBwbGljYXRpb24gY29u dHJvbC4KKyAqCisgKiAgRm9yIHJlZmNvdW50IHF1ZXVlZCBvYmplY3RzIChoYWRfemVyb19yZWZj b3VudCB0cnVlKSB0aGUgb2JqZWN0IGlzIGVpdGhlcgorICogIGltbWVkaWF0ZWx5IGZyZWVkIG9y IHJlc2N1ZWQsIGFuZCB3YWl0aW5nIGZvciBhIG1hcmstYW5kLXN3ZWVwIHJvdW5kIGlzIG5vdAor ICogIG5lY2Vzc2FyeSAob3IgZGVzaXJhYmxlKTsgRklOQUxJWkVEIGlzIGNsZWFyZWQgd2hlbiBh IHJlc2N1ZWQgb2JqZWN0IGlzCisgKiAgcXVldWVkIGJhY2sgdG8gaGVhcF9hbGxvY2F0ZWQuICBU aGUgb2JqZWN0IGlzIGVsaWdpYmxlIGZvciBmaW5hbGl6YXRpb24KKyAqICBhZ2FpbiAoZWl0aGVy IHZpYSByZWZjb3VudGluZyBvciBtYXJrLWFuZC1zd2VlcCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmVp bmcKKyAqICByZXNjdWVkLiAgSWYgYSByZWZjb3VudCBmaW5hbGl6ZWQgb2JqZWN0IGlzIHBsYWNl ZCBpbnRvIGFuIHVucmVhY2hhYmxlCisgKiAgcmVmZXJlbmNlIGxvb3AgYnkgaXRzIGZpbmFsaXpl ciwgaXQgd2lsbCBnZXQgY29sbGVjdGVkIGJ5IG1hcmstYW5kLXN3ZWVwCisgKiAgYW5kIGN1cnJl bnRseSB0aGUgZmluYWxpemVyIHdpbGwgZXhlY3V0ZSBhZ2Fpbi4KKyAqCisgKiAgVGhlcmUncyBh IHNwZWNpYWwgY2FzZSB3aGVyZToKKyAqCisgKiAgICAtIE1hcmstYW5kLXN3ZWVwIHF1ZXVlcyBh biBvYmplY3QgdG8gZmluYWxpemVfbGlzdCBmb3IgZmluYWxpemF0aW9uLgorICogICAgLSBUaGUg ZmluYWxpemVyIGlzIGV4ZWN1dGVkLCBGSU5BTElaRUQgaXMgc2V0LCBhbmQgb2JqZWN0IGlzIHF1 ZXVlZAorICogICAgICBiYWNrIHRvIGhlYXBfYWxsb2NhdGVkLCB3YWl0aW5nIGZvciBhIG5ldyBt YXJrLWFuZC1zd2VlcCByb3VuZC4KKyAqICAgIC0gVGhlIG9iamVjdCdzIHJlZmNvdW50IGRyb3Bz IHRvIHplcm8gYmVmb3JlIG1hcmstYW5kLXN3ZWVwIGhhcyBhCisgKiAgICAgIGNoYW5jZSB0byBy dW4gYW5vdGhlciByb3VuZCBhbmQgbWFrZSBhIHJlc2N1ZS9mcmVlIGRlY2lzaW9uLgorICoKKyAq ICBUaGlzIGlzIG5vdyBoYW5kbGVkIGJ5IHJlZnplcm8gY29kZTogaWYgYW4gb2JqZWN0IGhhcyBh IGZpbmFsaXplciBidXQKKyAqICBGSU5BTElaRUQgaXMgYWxyZWFkeSBzZXQsIHRoZSBvYmplY3Qg aXMgZnJlZWQgd2l0aG91dCBmaW5hbGl6ZXIgcHJvY2Vzc2luZy4KKyAqICBUaGUgb3V0Y29tZSBp cyB0aGUgc2FtZSBhcyBpZiBtYXJrLWFuZC1zd2VlcCB3YXMgZXhlY3V0ZWQgYXQgdGhhdCBwb2lu dDsKKyAqICBtYXJrLWFuZC1zd2VlcCB3b3VsZCBhbHNvIGZyZWUgdGhlIG9iamVjdCB3aXRob3V0 IGFub3RoZXIgZmluYWxpemVyIHJ1bi4KKyAqICBUaGlzIGNvdWxkIGFsc28gYmUgY2hhbmdlZCBz byB0aGF0IHRoZSByZWZ6ZXJvLXRyaWdnZXJlZCBmaW5hbGl6ZXIgKklTKgorICogIGV4ZWN1dGVk OiBiZWluZyByZWZ6ZXJvIGNvbGxlY3RlZCBpbXBsaWVzIHNvbWVvbmUgaGFzIG9wZXJhdGVkIG9u IHRoZQorICogIG9iamVjdCBzbyBpdCBoYXNuJ3QgYmVlbiB0b3RhbGx5IHVucmVhY2hhYmxlIHRo ZSB3aG9sZSB0aW1lLiAgVGhpcyB3b3VsZAorICogIHJpc2sgYSBmaW5hbGl6ZXIgbG9vcCBob3dl dmVyLgorICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFwX3Byb2Nlc3NfZmluYWxpemVf bGlzdChkdWtfaGVhcCAqaGVhcCkgeworCWR1a19oZWFwaGRyICpjdXJyOworI2lmIGRlZmluZWQo RFVLX1VTRV9ERUJVRykKKwlkdWtfc2l6ZV90IGNvdW50ID0gMDsKKyNlbmRpZgorCisJRFVLX0RE RChEVUtfREREUFJJTlQoImR1a19oZWFwX3Byb2Nlc3NfZmluYWxpemVfbGlzdDogJXAiLCAodm9p ZCAqKSBoZWFwKSk7CisKKwlpZiAoaGVhcC0+cGZfcHJldmVudF9jb3VudCAhPSAwKSB7CisJCURV S19EREQoRFVLX0RERFBSSU5UKCJza2lwIGZpbmFsaXplX2xpc3QgcHJvY2Vzc2luZzogcGZfcHJl dmVudF9jb3VudCAhPSAwIikpOworCQlyZXR1cm47CisJfQorCisJLyogSGVhcCBhbGxvYyBwcmV2 ZW50cyBtYXJrLWFuZC1zd2VlcCBiZWZvcmUgaGVhcF90aHJlYWQgaXMgcmVhZHkuICovCisJRFVL X0FTU0VSVChoZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQoaGVhcC0+aGVhcF90aHJlYWQgIT0g TlVMTCk7CisJRFVLX0FTU0VSVChoZWFwLT5oZWFwX3RocmVhZC0+dmFsc3RhY2sgIT0gTlVMTCk7 CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwlEVUtfQVNTRVJUKGhl YXAtPnJlZnplcm9fbGlzdCA9PSBOVUxMKTsKKyNlbmRpZgorCisJRFVLX0FTU0VSVChoZWFwLT5w Zl9wcmV2ZW50X2NvdW50ID09IDApOworCWhlYXAtPnBmX3ByZXZlbnRfY291bnQgPSAxOworCisJ LyogTWFyay1hbmQtc3dlZXAgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIHByZXZlbnRlZCB3aGVuIHJ1 bm5pbmcKKwkgKiBmaW5hbGl6ZXJzOiBtYXJrLWFuZC1zd2VlcCBza2lwcyBhbnkgcmVzY3VlIGRl Y2lzaW9ucyBpZiB0aGVyZQorCSAqIGFyZSBhbnkgb2JqZWN0cyBpbiBmaW5hbGl6ZV9saXN0IHdo ZW4gbWFyay1hbmQtc3dlZXAgaXMgZW50ZXJlZC4KKwkgKiBUaGlzIHByb3RlY3RzIGZpbmFsaXpl ZCBvYmplY3RzIGZyb20gaW5jb3JyZWN0IHJlc2N1ZSBkZWNpc2lvbnMKKwkgKiBjYXVzZWQgYnkg ZmluYWxpemVfbGlzdCBiZWluZyBhIHJlYWNoYWJpbGl0eSByb290IGFuZCBvbmx5CisJICogcGFy dGlhbGx5IHByb2Nlc3NlZC4gIEZyZWVpbmcgZGVjaXNpb25zIGFyZSBub3QgcG9zdHBvbmVkLgor CSAqLworCisJLyogV2hlbiBmaW5hbGl6ZXIgdG9ydHVyZSBpcyBlbmFibGVkLCBtYWtlIGEgZmFr ZSBmaW5hbGl6ZXIgY2FsbCB3aXRoCisJICogbWF4aW11bSBzaWRlIGVmZmVjdHMgcmVnYXJkbGVz cyBvZiB3aGV0aGVyIGZpbmFsaXplX2xpc3QgaXMgZW1wdHkuCisJICovCisjaWYgZGVmaW5lZChE VUtfVVNFX0ZJTkFMSVpFUl9UT1JUVVJFKQorCWR1a19fcnVuX2dsb2JhbF90b3J0dXJlX2ZpbmFs aXplcihoZWFwLT5oZWFwX3RocmVhZCk7CisjZW5kaWYKKworCS8qIFByb2Nlc3MgZmluYWxpemVf bGlzdCB1bnRpbCBpdCBiZWNvbWVzIGVtcHR5LiAgVGhlcmUncyBjdXJyZW50bHkgbm8KKwkgKiBw cm90ZWN0aW9uIGFnYWluc3QgYSBmaW5hbGl6ZXIgYWx3YXlzIGNyZWF0aW5nIG1vcmUgZ2FyYmFn ZS4KKwkgKi8KKwl3aGlsZSAoKGN1cnIgPSBoZWFwLT5maW5hbGl6ZV9saXN0KSAhPSBOVUxMKSB7 CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwkJZHVrX2Jvb2xfdCBx dWV1ZV9iYWNrOworI2VuZGlmCisKKwkJRFVLX0REKERVS19ERFBSSU5UKCJwcm9jZXNzaW5nIGZp bmFsaXplX2xpc3QgZW50cnk6ICVwIC0+ICUhaU8iLCAodm9pZCAqKSBjdXJyLCBjdXJyKSk7CisK KwkJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfVFlQRShjdXJyKSA9PSBEVUtfSFRZUEVfT0JK RUNUKTsgIC8qIE9ubHkgb2JqZWN0cyBoYXZlIGZpbmFsaXplcnMuICovCisJCURVS19BU1NFUlQo IURVS19IRUFQSERSX0hBU19SRUFDSEFCTEUoY3VycikpOworCQlEVUtfQVNTRVJUKCFEVUtfSEVB UEhEUl9IQVNfVEVNUFJPT1QoY3VycikpOworCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hBU19G SU5BTElaQUJMRShjdXJyKSk7ICAvKiBBbGwgb2JqZWN0cyBvbiBmaW5hbGl6ZV9saXN0IHdpbGwg aGF2ZSB0aGlzIGZsYWcgKGV4Y2VwdCBvYmplY3QgYmVpbmcgZmluYWxpemVkIHJpZ2h0IG5vdyku ICovCisJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19GSU5BTElaRUQoY3VycikpOyAgIC8q IFF1ZXVlaW5nIGNvZGUgZW5zdXJlcy4gKi8KKwkJRFVLX0FTU0VSVCghRFVLX0hFQVBIRFJfSEFT X1JFQURPTkxZKGN1cnIpKTsgIC8qIFJPTSBvYmplY3RzIG5ldmVyIGdldCBmcmVlZCAob3IgZmlu YWxpemVkKS4gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCQlEVUtfQVNT RVJUKGhlYXAtPmN1cnJlbnRseV9maW5hbGl6aW5nID09IE5VTEwpOworCQloZWFwLT5jdXJyZW50 bHlfZmluYWxpemluZyA9IGN1cnI7CisjZW5kaWYKKworCQkvKiBDbGVhciBGSU5BTElaQUJMRSBm b3Igb2JqZWN0IGJlaW5nIGZpbmFsaXplZCwgc28gdGhhdAorCQkgKiBkdWtfcHVzaF9oZWFwcHRy KCkgY2FuIHByb3Blcmx5IGlnbm9yZSB0aGUgb2JqZWN0LgorCQkgKi8KKwkJRFVLX0hFQVBIRFJf Q0xFQVJfRklOQUxJWkFCTEUoY3Vycik7CisKKwkJaWYgKERVS19MSUtFTFkoIWhlYXAtPnBmX3Nr aXBfZmluYWxpemVycykpIHsKKwkJCS8qIFJ1biB0aGUgZmluYWxpemVyLCBkdWtfaGVhcF9ydW5f ZmluYWxpemVyKCkgc2V0cworCQkJICogYW5kIGNoZWNrcyBmb3IgRklOQUxJWkVEIHRvIHByZXZl bnQgdGhlIGZpbmFsaXplcgorCQkJICogZnJvbSBleGVjdXRpbmcgbXVsdGlwbGUgdGltZXMgcGVy IGZpbmFsaXphdGlvbiBjeWNsZS4KKwkJCSAqIChUaGlzIHNhZmVndWFyZCBzaG91bGRuJ3QgYmUg YWN0dWFsbHkgbmVlZGVkIGFueW1vcmUpLgorCQkJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf UkVGRVJFTkNFX0NPVU5USU5HKQorCQkJZHVrX2Jvb2xfdCBoYWRfemVyb19yZWZjb3VudDsKKyNl bmRpZgorCisJCQkvKiBUaGUgb2JqZWN0J3MgcmVmY291bnQgaXMgPjAgdGhyb3VnaG91dCBzbyBp dCB3b24ndCBiZQorCQkJICogcmVmemVybyBwcm9jZXNzZWQgcHJlbWF0dXJlbHkuCisJCQkgKi8K KyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCQkJRFVLX0FTU0VSVChE VUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoY3VycikgPj0gMSk7CisJCQloYWRfemVyb19yZWZjb3Vu dCA9IChEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoY3VycikgPT0gMSk7ICAvKiBQcmVpbmNyZW1l bnRlZCBvbiBmaW5hbGl6ZV9saXN0IGluc2VydC4gKi8KKyNlbmRpZgorCisJCQlEVUtfQVNTRVJU KCFEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkVEKGN1cnIpKTsKKwkJCWR1a19oZWFwX3J1bl9maW5h bGl6ZXIoaGVhcCwgKGR1a19ob2JqZWN0ICopIGN1cnIpOyAgLyogbXVzdCBuZXZlciBsb25nam1w ICovCisJCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hBU19GSU5BTElaRUQoY3VycikpOworCQkJ LyogWFhYOiBhc3NlcnQgdGhhdCBvYmplY3QgaXMgc3RpbGwgaW4gZmluYWxpemVfbGlzdAorCQkJ ICogd2hlbiBkdWtfcHVzaF9oZWFwcHRyKCkgYWxsb3dzIGF1dG9tYXRpYyByZXNjdWUuCisJCQkg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJCQlEVUtfREQo RFVLX0REUFJJTlQoInJlZmNvdW50IGFmdGVyIGZpbmFsaXplciAoaW5jbHVkZXMgYnVtcCk6ICVs ZCIsIChsb25nKSBEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoY3VycikpKTsKKwkJCWlmIChEVUtf SEVBUEhEUl9HRVRfUkVGQ09VTlQoY3VycikgPT0gMSkgeyAgLyogT25seSBhcnRpZmljaWFsIGJ1 bXAgaW4gcmVmY291bnQ/ICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCQkJCWlmICho YWRfemVyb19yZWZjb3VudCkgeworCQkJCQlEVUtfREQoRFVLX0REUFJJTlQoImZpbmFsaXplZCBv YmplY3QncyByZWZjb3VudCBpcyB6ZXJvIC0+IGZyZWUgaW1tZWRpYXRlbHkgKHJlZmNvdW50IHF1 ZXVlZCkiKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJmaW5hbGl6 ZWQgb2JqZWN0J3MgcmVmY291bnQgaXMgemVybyAtPiBmcmVlIGltbWVkaWF0ZWx5IChtYXJrLWFu ZC1zd2VlcCBxdWV1ZWQpIikpOworCQkJCX0KKyNlbmRpZgorCQkJCXF1ZXVlX2JhY2sgPSAwOwor CQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NP VU5USU5HKQorCQkJCXF1ZXVlX2JhY2sgPSAxOworCQkJCWlmIChoYWRfemVyb19yZWZjb3VudCkg eworCQkJCQkvKiBXaGVuIGZpbmFsaXphdGlvbiBpcyB0cmlnZ2VyZWQKKwkJCQkJICogYnkgcmVm emVybyBhbmQgd2UgcXVldWUgdGhlIG9iamVjdAorCQkJCQkgKiBiYWNrLCBjbGVhciBGSU5BTEla RUQgcmlnaHQgYXdheQorCQkJCQkgKiBzbyB0aGF0IHRoZSBvYmplY3QgY2FuIGJlIHJlZmluYWxp emVkCisJCQkJCSAqIGltbWVkaWF0ZWx5IGlmIG5lY2Vzc2FyeS4KKwkJCQkJICovCisJCQkJCURV S19IRUFQSERSX0NMRUFSX0ZJTkFMSVpFRChjdXJyKTsKKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJ fSBlbHNlIHsKKwkJCS8qIFVzZWQgZHVyaW5nIGhlYXAgZGVzdHJ1Y3Rpb246IGRvbid0IGFjdHVh bGx5IHJ1biBmaW5hbGl6ZXJzCisJCQkgKiBiZWNhdXNlIHdlJ3JlIGhlYWRpbmcgaW50byBmb3Jj ZWQgZmluYWxpemF0aW9uLiAgSW5zdGVhZCwKKwkJCSAqIHF1ZXVlIGZpbmFsaXphYmxlIG9iamVj dHMgYmFjayB0byB0aGUgaGVhcF9hbGxvY2F0ZWQgbGlzdC4KKwkJCSAqLworCQkJRFVLX0QoRFVL X0RQUklOVCgic2tpcCBmaW5hbGl6ZXJzIGZsYWcgc2V0LCBxdWV1ZSBvYmplY3QgdG8gaGVhcF9h bGxvY2F0ZWQgd2l0aG91dCBmaW5hbGl6aW5nIikpOworCQkJRFVLX0FTU0VSVCghRFVLX0hFQVBI RFJfSEFTX0ZJTkFMSVpFRChjdXJyKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9D T1VOVElORykKKwkJCXF1ZXVlX2JhY2sgPSAxOworI2VuZGlmCisJCX0KKworCQkvKiBEZXF1ZXVl IG9iamVjdCBmcm9tIGZpbmFsaXplX2xpc3QuICBOb3RlIHRoYXQgJ2N1cnInIG1heSBubworCQkg KiBsb25nZXIgYmUgZmluYWxpemVfbGlzdCBoZWFkIGJlY2F1c2UgbmV3IG9iamVjdHMgbWF5IGhh dmUKKwkJICogYmVlbiBxdWV1ZWQgdG8gdGhlIGxpc3QuICBBcyBhIHJlc3VsdCB3ZSBjYW4ndCBv cHRpbWl6ZSBmb3IKKwkJICogdGhlIHNpbmdsZS1saW5rZWQgaGVhcCBjYXNlIGFuZCBtdXN0IHNj YW4gdGhlIGxpc3QgZm9yCisJCSAqIHJlbW92YWwsIHR5cGljYWxseSB0aGUgc2NhbiBpcyB2ZXJ5 IHNob3J0IGhvd2V2ZXIuCisJCSAqLworCQlEVUtfSEVBUF9SRU1PVkVfRlJPTV9GSU5BTElaRV9M SVNUKGhlYXAsIGN1cnIpOworCisJCS8qIFF1ZXVlIGJhY2sgdG8gaGVhcF9hbGxvY2F0ZWQgb3Ig ZnJlZSBpbW1lZGlhdGVseS4gKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5U SU5HKQorCQlpZiAocXVldWVfYmFjaykgeworCQkJLyogRklOQUxJWkVEIGlzIG9ubHkgY2xlYXJl ZCBpZiBvYmplY3Qgb3JpZ2luYWxseQorCQkJICogcXVldWVkIGZvciBmaW5hbGl6YXRpb24gYnkg cmVmY291bnRpbmcuICBGb3IKKwkJCSAqIG1hcmstYW5kLXN3ZWVwIEZJTkFMSVpFRCBpcyBsZWZ0 IHNldCwgc28gdGhhdAorCQkJICogbmV4dCBtYXJrLWFuZC1zd2VlcCByb3VuZCBjYW4gbWFrZSBh IHJlc2N1ZS9mcmVlCisJCQkgKiBkZWNpc2lvbi4KKwkJCSAqLworCQkJRFVLX0FTU0VSVChEVUtf SEVBUEhEUl9HRVRfUkVGQ09VTlQoY3VycikgPj0gMSk7CisJCQlEVUtfSEVBUEhEUl9QUkVERUNf UkVGQ09VTlQoY3Vycik7ICAvKiBSZW1vdmUgYXJ0aWZpY2lhbCByZWZjb3VudCBidW1wLiAqLwor CQkJRFVLX0hFQVBIRFJfQ0xFQVJfRklOQUxJWkFCTEUoY3Vycik7CisJCQlEVUtfSEVBUF9JTlNF UlRfSU5UT19IRUFQX0FMTE9DQVRFRChoZWFwLCBjdXJyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5v IG5lZWQgdG8gcmVtb3ZlIHRoZSByZWZjb3VudCBidW1wIGhlcmUuICovCisJCQlEVUtfQVNTRVJU KERVS19IRUFQSERSX0dFVF9UWVBFKGN1cnIpID09IERVS19IVFlQRV9PQkpFQ1QpOyAgLyogY3Vy cmVudGx5LCBhbHdheXMgdGhlIGNhc2UgKi8KKwkJCURVS19ERChEVUtfRERQUklOVCgicmVmY291 bnQgZmluYWxpemUgYWZ0ZXIgZmluYWxpemVyIGNhbGw6ICUhTyIsIGN1cnIpKTsKKwkJCWR1a19o b2JqZWN0X3JlZmNvdW50X2ZpbmFsaXplX25vcnooaGVhcCwgKGR1a19ob2JqZWN0ICopIGN1cnIp OworCQkJZHVrX2ZyZWVfaG9iamVjdChoZWFwLCAoZHVrX2hvYmplY3QgKikgY3Vycik7CisJCQlE VUtfREQoRFVLX0REUFJJTlQoImZyZWVkIGhvYmplY3QgYWZ0ZXIgZmluYWxpemF0aW9uOiAlcCIs ICh2b2lkICopIGN1cnIpKTsKKwkJfQorI2Vsc2UgIC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5U SU5HICovCisJCURVS19IRUFQSERSX0NMRUFSX0ZJTkFMSVpBQkxFKGN1cnIpOworCQlEVUtfSEVB UF9JTlNFUlRfSU5UT19IRUFQX0FMTE9DQVRFRChoZWFwLCBjdXJyKTsKKyNlbmRpZiAgLyogRFVL X1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykK KwkJY291bnQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJ CURVS19BU1NFUlQoaGVhcC0+Y3VycmVudGx5X2ZpbmFsaXppbmcgIT0gTlVMTCk7CisJCWhlYXAt PmN1cnJlbnRseV9maW5hbGl6aW5nID0gTlVMTDsKKyNlbmRpZgorCX0KKworCS8qIGZpbmFsaXpl X2xpc3Qgd2lsbCBhbHdheXMgYmUgcHJvY2Vzc2VkIGNvbXBsZXRlbHkuICovCisJRFVLX0FTU0VS VChoZWFwLT5maW5hbGl6ZV9saXN0ID09IE5VTEwpOworCisjaWYgMAorCS8qIFdoaWxlIE5PUlog bWFjcm9zIGFyZSB1c2VkIGFib3ZlLCB0aGlzIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgdGhlCisJ ICogb25seSBwZW5kaW5nIHNpZGUgZWZmZWN0cyBhcmUgbm93IGZpbmFsaXplcnMsIGFuZCBmaW5h bGl6ZV9saXN0IGlzCisJICogZW1wdHkuCisJICovCisJRFVLX1JFRlpFUk9fQ0hFQ0tfU0xPVyho ZWFwLT5oZWFwX3RocmVhZCk7CisjZW5kaWYKKworCS8qIFByZXZlbnQgY291bnQgbWF5IGJlIGJ1 bXBlZCB3aGlsZSBmaW5hbGl6ZXJzIHJ1biwgYnV0IHNob3VsZCBhbHdheXMKKwkgKiBiZSByZWxp YWJseSB1bmJ1bXBlZCBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZS4KKwkgKi8KKwlEVUtfQVNTRVJU KGhlYXAtPnBmX3ByZXZlbnRfY291bnQgPT0gMSk7CisJaGVhcC0+cGZfcHJldmVudF9jb3VudCA9 IDA7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJRFVLX0REKERVS19ERFBSSU5UKCJk dWtfaGVhcF9wcm9jZXNzX2ZpbmFsaXplX2xpc3Q6ICVsZCBmaW5hbGl6ZXJzIGNhbGxlZCIsIChs b25nKSBjb3VudCkpOworI2VuZGlmCit9CisKKy8qCisgKiAgUnVuIGFuIGR1a19ob2JqZWN0IGZp bmFsaXplci4gIE11c3QgbmV2ZXIgdGhyb3cgYW4gdW5jYXVnaHQgZXJyb3IKKyAqICAoYnV0IG1h eSB0aHJvdyBjYXVnaHQgZXJyb3JzKS4KKyAqCisgKiAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVl LiAgQW55IHJldHVybiB2YWx1ZSBvciBlcnJvciB0aHJvd24gYnkKKyAqICB0aGUgZmluYWxpemVy IGlzIGlnbm9yZWQgKGFsdGhvdWdoIGVycm9ycyBhcmUgZGVidWcgbG9nZ2VkKS4KKyAqCisgKiAg Tm90ZXM6CisgKgorICogICAgLSBUaGUgZmluYWxpemVyIHRocmVhZCAndG9wJyBhc3NlcnRpb25z IGFyZSB0aGVyZSBiZWNhdXNlIGl0IGlzCisgKiAgICAgIGNyaXRpY2FsIHRoYXQgc3RyaWN0IHN0 YWNrIHBvbGljeSBpcyBvYnNlcnZlZCAoaS5lLiBubyBjcnVmdAorICogICAgICBsZWZ0IG9uIHRo ZSBmaW5hbGl6ZXIgc3RhY2spLgorICovCisKK0RVS19MT0NBTCBkdWtfcmV0X3QgZHVrX19maW5h bGl6ZV9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgdm9pZCAqdWRhdGEpIHsKKwlEVUtfQVNTRVJU KHRociAhPSBOVUxMKTsKKwlEVUtfVU5SRUYodWRhdGEpOworCisJRFVLX0RERChEVUtfREREUFJJ TlQoInByb3RlY3RlZCBmaW5hbGl6YXRpb24gaGVscGVyIHJ1bm5pbmciKSk7CisKKwkvKiBbLi4u IG9ial0gKi8KKworCS8qIF9GaW5hbGl6ZXIgcHJvcGVydHkgaXMgcmVhZCB3aXRob3V0IGNoZWNr aW5nIGlmIHRoZSB2YWx1ZSBpcworCSAqIGNhbGxhYmxlIG9yIGV2ZW4gZXhpc3RzLiAgVGhpcyBp cyBpbnRlbnRpb25hbCwgYW5kIGhhbmRsZWQKKwkgKiBieSB0aHJvd2luZyBhbiBlcnJvciB3aGlj aCBpcyBjYXVnaHQgYnkgdGhlIHNhZmUgY2FsbCB3cmFwcGVyLgorCSAqCisJICogWFhYOiBGaW5h bGl6ZXIgbG9va3VwIHNob3VsZCB0cmF2ZXJzZSB0aGUgcHJvdG90eXBlIGNoYWluICh0byBhbGxv dworCSAqIGluaGVyaXRlZCBmaW5hbGl6ZXJzKSBidXQgc2hvdWxkIG5vdCBpbnZva2UgYWNjZXNz b3JzIG9yIHByb3h5IG9iamVjdAorCSAqIGJlaGF2aW9yLiAgQXQgdGhlIG1vbWVudCB0aGlzIGxv b2t1cCB3aWxsIGludm9rZSBwcm94eSBiZWhhdmlvciwgc28KKwkgKiBjYWxsZXIgbXVzdCBlbnN1 cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgaWYgdGhlIHRhcmdldCBpcworCSAq IGEgUHJveHkuCisJICovCisJZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0xLCBEVUtf U1RSSURYX0lOVF9GSU5BTElaRVIpOyAgLyogLT4gWy4uLiBvYmogZmluYWxpemVyXSAqLworCWR1 a19kdXBfbTIodGhyKTsKKwlkdWtfcHVzaF9ib29sZWFuKHRociwgRFVLX0hFQVBfSEFTX0ZJTkFM SVpFUl9OT1JFU0NVRSh0aHItPmhlYXApKTsKKwlEVUtfREREKERVS19ERERQUklOVCgiY2FsbGlu ZyBmaW5hbGl6ZXIiKSk7CisJZHVrX2NhbGwodGhyLCAyKTsgIC8qIFsgLi4uIG9iaiBmaW5hbGl6 ZXIgb2JqIGhlYXBEZXN0cnVjdCBdICAtPiBbIC4uLiBvYmogcmV0dmFsIF0gKi8KKwlEVUtfRERE KERVS19ERERQUklOVCgiZmluYWxpemVyIHJldHVybmVkIHN1Y2Nlc3NmdWxseSIpKTsKKwlyZXR1 cm4gMDsKKworCS8qIE5vdGU6IHdlIHJlbHkgb24gZHVrX3NhZmVfY2FsbCgpIHRvIGZpeCB1cCB0 aGUgc3RhY2sgZm9yIHRoZSBjYWxsZXIsCisJICogc28gd2UgZG9uJ3QgbmVlZCB0byBwb3Agc3R1 ZmYgaGVyZS4gIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZTsKKwkgKiBjYWxsZXIgZGV0ZXJtaW5l cyByZXNjdWVkIHN0YXR1cyBiYXNlZCBvbiBvYmplY3QgcmVmY291bnQuCisJICovCit9CisKK0RV S19JTlRFUk5BTCB2b2lkIGR1a19oZWFwX3J1bl9maW5hbGl6ZXIoZHVrX2hlYXAgKmhlYXAsIGR1 a19ob2JqZWN0ICpvYmopIHsKKwlkdWtfaHRocmVhZCAqdGhyOworCWR1a19yZXRfdCByYzsKKyNp ZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfaWR4X3QgZW50cnlfdG9wOworI2Vu ZGlmCisKKwlEVUtfREQoRFVLX0REUFJJTlQoInJ1bm5pbmcgZHVrX2hvYmplY3QgZmluYWxpemVy IGZvciBvYmplY3Q6ICVwIiwgKHZvaWQgKikgb2JqKSk7CisKKwlEVUtfQVNTRVJUKGhlYXAgIT0g TlVMTCk7CisJRFVLX0FTU0VSVChoZWFwLT5oZWFwX3RocmVhZCAhPSBOVUxMKTsKKwl0aHIgPSBo ZWFwLT5oZWFwX3RocmVhZDsKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJU X1ZBTFNUQUNLX1NQQUNFKGhlYXAtPmhlYXBfdGhyZWFkLCAxKTsKKworI2lmIGRlZmluZWQoRFVL X1VTRV9BU1NFUlRJT05TKQorCWVudHJ5X3RvcCA9IGR1a19nZXRfdG9wKHRocik7CisjZW5kaWYK KwkvKgorCSAqICBHZXQgYW5kIGNhbGwgdGhlIGZpbmFsaXplci4gIEFsbCBvZiB0aGlzIG11c3Qg YmUgd3JhcHBlZAorCSAqICBpbiBhIHByb3RlY3RlZCBjYWxsLCBiZWNhdXNlIGV2ZW4gZ2V0dGlu ZyB0aGUgZmluYWxpemVyCisJICogIG1heSB0cmlnZ2VyIGFuIGVycm9yIChnZXR0ZXIgbWF5IHRo cm93IG9uZSwgZm9yIGluc3RhbmNlKS4KKwkgKi8KKworCS8qIFJPTSBvYmplY3RzIGNvdWxkIGlu aGVyaXQgYSBmaW5hbGl6ZXIsIGJ1dCB0aGV5IGFyZSBuZXZlciBkZWVtZWQKKwkgKiB1bnJlYWNo YWJsZSBieSBtYXJrLWFuZC1zd2VlcCwgYW5kIHRoZWlyIHJlZmNvdW50IG5ldmVyIGZhbGxzIHRv IDAuCisJICovCisJRFVLX0FTU0VSVCghRFVLX0hFQVBIRFJfSEFTX1JFQURPTkxZKChkdWtfaGVh cGhkciAqKSBvYmopKTsKKworCS8qIER1a3RhcGUgMi4xOiBmaW5hbGl6ZV9saXN0IG5ldmVyIGNv bnRhaW5zIG9iamVjdHMgd2l0aCBGSU5BTElaRUQKKwkgKiBzZXQsIHNvIG5vIG5lZWQgdG8gY2hl Y2sgaGVyZS4KKwkgKi8KKwlEVUtfQVNTRVJUKCFEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkVEKChk dWtfaGVhcGhkciAqKSBvYmopKTsKKyNpZiAwCisJaWYgKERVS19IRUFQSERSX0hBU19GSU5BTEla RUQoKGR1a19oZWFwaGRyICopIG9iaikpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgib2JqZWN0IGFs cmVhZHkgZmluYWxpemVkLCBhdm9pZCBydW5uaW5nIGZpbmFsaXplciB0d2ljZTogJSFPIiwgb2Jq KSk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlEVUtfSEVBUEhEUl9TRVRfRklOQUxJWkVEKChk dWtfaGVhcGhkciAqKSBvYmopOyAgLyogZW5zdXJlIG5ldmVyIHJlLWVudGVyZWQgdW50aWwgcmVz Y3VlIGN5Y2xlIGNvbXBsZXRlICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1BST1hZKQor CWlmIChEVUtfSE9CSkVDVF9JU19QUk9YWShvYmopKSB7CisJCS8qIFRoaXMgbWF5IGhhcHBlbiBp ZiBkdWtfc2V0X2ZpbmFsaXplcigpIG9yIER1a3RhcGUuZmluKCkgaXMKKwkJICogY2FsbGVkIGZv ciBhIFByb3h5IG9iamVjdC4gIEluIHN1Y2ggY2FzZXMgdGhlIGZhc3QgZmluYWxpemVyCisJCSAq IGZsYWcgd2lsbCBiZSBzZXQgb24gdGhlIFByb3h5LCBub3QgdGhlIHRhcmdldCwgYW5kIG5laXRo ZXIKKwkJICogd2lsbCBiZSBmaW5hbGl6ZWQuCisJCSAqLworCQlEVUtfRChEVUtfRFBSSU5UKCJv YmplY3QgaXMgYSBQcm94eSwgc2tpcCBmaW5hbGl6ZXIgY2FsbCIpKTsKKwkJcmV0dXJuOworCX0K KyNlbmRpZiAgLyogRFVLX1VTRV9FUzZfUFJPWFkgKi8KKworCWR1a19wdXNoX2hvYmplY3QodGhy LCBvYmopOyAgLyogdGhpcyBhbHNvIGluY3JlYXNlcyByZWZjb3VudCBieSBvbmUgKi8KKwlyYyA9 IGR1a19zYWZlX2NhbGwodGhyLCBkdWtfX2ZpbmFsaXplX2hlbHBlciwgTlVMTCAvKnVkYXRhKi8s IDAgLypuYXJncyovLCAxIC8qbnJldHMqLyk7ICAvKiAtPiBbLi4uIG9iaiByZXR2YWwvZXJyb3Jd ICovCisJRFVLX0FTU0VSVF9UT1AodGhyLCBlbnRyeV90b3AgKyAyKTsgIC8qIGR1a19zYWZlX2Nh bGwgZGlzY2lwbGluZSAqLworCisJaWYgKHJjICE9IERVS19FWEVDX1NVQ0NFU1MpIHsKKwkJLyog Tm90ZTogd2UgYXNrIGZvciBvbmUgcmV0dXJuIHZhbHVlIGZyb20gZHVrX3NhZmVfY2FsbCB0byBn ZXQgdGhpcworCQkgKiBlcnJvciBkZWJ1Z2dpbmcgaGVyZS4KKwkJICovCisJCURVS19EKERVS19E UFJJTlQoIndyYXBwZWQgZmluYWxpemVyIGNhbGwgZmFpbGVkIGZvciBvYmplY3QgJXAgKGlnbm9y ZWQpOyBlcnJvcjogJSFUIiwKKwkJICAgICAgICAgICAgICAgICAodm9pZCAqKSBvYmosIChkdWtf dHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwl9CisJZHVrX3BvcF8yKHRocik7ICAv KiAtPiBbLi4uXSAqLworCisJRFVLX0FTU0VSVF9UT1AodGhyLCBlbnRyeV90b3ApOworfQorCisj ZWxzZSAgLyogRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCAqLworCisvKiBub3RoaW5nICovCisK KyNlbmRpZiAgLyogRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCAqLworLyoKKyAqICBTdHJpbmcg aGFzaCBjb21wdXRhdGlvbiAoaW50ZXJuaW5nKS4KKyAqCisgKiAgU3RyaW5nIGhhc2hpbmcgaXMg cGVyZm9ybWFuY2UgY3JpdGljYWwgYmVjYXVzZSBhIHN0cmluZyBoYXNoIGlzIGNvbXB1dGVkCisg KiAgZm9yIGFsbCBuZXcgc3RyaW5ncyB3aGljaCBhcmUgY2FuZGlkYXRlcyB0byBiZSBhZGRlZCB0 byB0aGUgc3RyaW5nIHRhYmxlLgorICogIEhvd2V2ZXIsIHN0cmluZ3MgYWN0dWFsbHkgYWRkZWQg dG8gdGhlIHN0cmluZyB0YWJsZSBnbyB0aHJvdWdoIGEgY29kZXBvaW50CisgKiAgbGVuZ3RoIGNh bGN1bGF0aW9uIHdoaWNoIGRvbWluYXRlcyBwZXJmb3JtYW5jZSBiZWNhdXNlIGl0IGdvZXMgdGhy b3VnaAorICogIGV2ZXJ5IGJ5dGUgb2YgdGhlIGlucHV0IHN0cmluZyAoYnV0IG9ubHkgZm9yIHN0 cmluZ3MgYWRkZWQpLgorICoKKyAqICBUaGUgc3RyaW5nIGhhc2ggYWxnb3JpdGhtIHNob3VsZCBi ZSBmYXN0LCBidXQgb24gdGhlIG90aGVyIGhhbmQgcHJvdmlkZQorICogIGdvb2QgZW5vdWdoIGhh c2hlcyB0byBlbnN1cmUgYm90aCBzdHJpbmcgdGFibGUgYW5kIG9iamVjdCBwcm9wZXJ0eSB0YWJs ZQorICogIGhhc2ggdGFibGVzIHdvcmsgcmVhc29uYWJseSB3ZWxsIChpLmUuLCB0aGVyZSBhcmVu J3QgdG9vIG1hbnkgY29sbGlzaW9ucworICogIHdpdGggcmVhbCB3b3JsZCBpbnB1dHMpLiAgVW5s ZXNzIHRoZSBoYXNoIGlzIGNyeXB0b2dyYXBoaWMsIGl0J3MgYWx3YXlzCisgKiAgcG9zc2libGUg dG8gY3JhZnQgaW5wdXRzIHdpdGggbWF4aW1hbCBoYXNoIGNvbGxpc2lvbnMuCisgKgorICogIE5P VEU6IFRoZSBoYXNoIGFsZ29yaXRobXMgbXVzdCBtYXRjaCB0b29scy9kdWt1dGlsLnB5OmR1a19o ZWFwX2hhc2hzdHJpbmcoKQorICogIGZvciBST00gc3RyaW5nIHN1cHBvcnQhCisgKi8KKworLyog I2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX1NUUkhBU0hfREVOU0UpCisvKiBDb25zdGFudHMgZm9yIGR1a19oYXNoc3Ry aW5nKCkuICovCisjZGVmaW5lIERVS19fU1RSSEFTSF9TSE9SVFNUUklORyAgIDQwOTZMCisjZGVm aW5lIERVS19fU1RSSEFTSF9NRURJVU1TVFJJTkcgICgyNTZMICogMTAyNEwpCisjZGVmaW5lIERV S19fU1RSSEFTSF9CTE9DS1NJWkUgICAgIDI1NkwKKworRFVLX0lOVEVSTkFMIGR1a191aW50MzJf dCBkdWtfaGVhcF9oYXNoc3RyaW5nKGR1a19oZWFwICpoZWFwLCBjb25zdCBkdWtfdWludDhfdCAq c3RyLCBkdWtfc2l6ZV90IGxlbikgeworCWR1a191aW50MzJfdCBoYXNoOworCisJLyogVXNlIE11 cm11cmhhc2gyIGRpcmVjdGx5IGZvciBzaG9ydCBzdHJpbmdzLCBhbmQgdXNlICJibG9jayBza2lw cGluZyIKKwkgKiBmb3IgbG9uZyBzdHJpbmdzOiBoYXNoIGFuIGluaXRpYWwgcGFydCBhbmQgdGhl biBzYW1wbGUgdGhlIHJlc3Qgb2YKKwkgKiB0aGUgc3RyaW5nIHdpdGggcmVhc29uYWJseSBzaXpl ZCBjaHVua3MuICBBbiBpbml0aWFsIG9mZnNldCBmb3IgdGhlCisJICogc2FtcGxpbmcgaXMgY29t cHV0ZWQgYmFzZWQgb24gYSBoYXNoIG9mIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIHN0cmluZzsK KwkgKiB0aGlzIGlzIGRvbmUgdG8gKHVzdWFsbHkpIGF2b2lkIHRoZSBjYXNlIHdoZXJlIGFsbCBs b25nIHN0cmluZ3MgaGF2ZQorCSAqIGNlcnRhaW4gb2Zmc2V0IHJhbmdlcyB3aGljaCBhcmUgbmV2 ZXIgc2FtcGxlZC4KKwkgKgorCSAqIFNraXAgc2hvdWxkIGRlcGVuZCBvbiBsZW5ndGggYW5kIGJv dW5kIHRoZSB0b3RhbCB0aW1lIHRvIHJvdWdobHkKKwkgKiBsb2dhcml0aG1pYy4gIFdpdGggY3Vy cmVudCB2YWx1ZXM6CisJICoKKwkgKiAgIDFNIHN0cmluZyA9PiAyNTYgKiAyNDEgPSA2MTY5NiBi eXRlcyAoMC4wNk0pIG9mIGhhc2hpbmcKKwkgKiAgIDFHIHN0cmluZyA9PiAyNTYgKiAxNjMyMSA9 IDQxNzgxNzYgYnl0ZXMgKDMuOThNKSBvZiBoYXNoaW5nCisJICoKKwkgKiBYWFg6IEl0IHdvdWxk IGJlIGJldHRlciB0byBjb21wdXRlIHRoZSBza2lwIG9mZnNldCBtb3JlICJzbW9vdGhseSIKKwkg KiBpbnN0ZWFkIG9mIGhhdmluZyBhIGZldyBib3VuZGFyeSB2YWx1ZXMuCisJICovCisKKwkvKiBu b3RlOiBtaXhpbmcgbGVuIGludG8gc2VlZCBpbXByb3ZlcyBoYXNoaW5nIHdoZW4gc2tpcHBpbmcg Ki8KKwlkdWtfdWludDMyX3Qgc3RyX3NlZWQgPSBoZWFwLT5oYXNoX3NlZWQgXiAoKGR1a191aW50 MzJfdCkgbGVuKTsKKworCWlmIChsZW4gPD0gRFVLX19TVFJIQVNIX1NIT1JUU1RSSU5HKSB7CisJ CWhhc2ggPSBkdWtfdXRpbF9oYXNoYnl0ZXMoc3RyLCBsZW4sIHN0cl9zZWVkKTsKKwl9IGVsc2Ug eworCQlkdWtfc2l6ZV90IG9mZjsKKwkJZHVrX3NpemVfdCBza2lwOworCisJCWlmIChsZW4gPD0g RFVLX19TVFJIQVNIX01FRElVTVNUUklORykgeworCQkJc2tpcCA9IChkdWtfc2l6ZV90KSAoMTYg KiBEVUtfX1NUUkhBU0hfQkxPQ0tTSVpFICsgRFVLX19TVFJIQVNIX0JMT0NLU0laRSk7CisJCX0g ZWxzZSB7CisJCQlza2lwID0gKGR1a19zaXplX3QpICgyNTYgKiBEVUtfX1NUUkhBU0hfQkxPQ0tT SVpFICsgRFVLX19TVFJIQVNIX0JMT0NLU0laRSk7CisJCX0KKworCQloYXNoID0gZHVrX3V0aWxf aGFzaGJ5dGVzKHN0ciwgKGR1a19zaXplX3QpIERVS19fU1RSSEFTSF9TSE9SVFNUUklORywgc3Ry X3NlZWQpOworCQlvZmYgPSBEVUtfX1NUUkhBU0hfU0hPUlRTVFJJTkcgKyAoc2tpcCAqIChoYXNo ICUgMjU2KSkgLyAyNTY7CisKKwkJLyogWFhYOiBpbmVmZmljaWVudCBsb29wICovCisJCXdoaWxl IChvZmYgPCBsZW4pIHsKKwkJCWR1a19zaXplX3QgbGVmdCA9IGxlbiAtIG9mZjsKKwkJCWR1a19z aXplX3Qgbm93ID0gKGR1a19zaXplX3QpIChsZWZ0ID4gRFVLX19TVFJIQVNIX0JMT0NLU0laRSA/ IERVS19fU1RSSEFTSF9CTE9DS1NJWkUgOiBsZWZ0KTsKKwkJCWhhc2ggXj0gZHVrX3V0aWxfaGFz aGJ5dGVzKHN0ciArIG9mZiwgbm93LCBzdHJfc2VlZCk7CisJCQlvZmYgKz0gc2tpcDsKKwkJfQor CX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJIQVNIMTYpCisJLyogVHJ1bmNhdGUgdG8gMTYg Yml0cyBoZXJlLCBzbyB0aGF0IGEgY29tcHV0ZWQgaGFzaCBjYW4gYmUgY29tcGFyZWQKKwkgKiBh Z2FpbnN0IGEgaGFzaCBzdG9yZWQgaW4gYSAxNi1iaXQgZmllbGQuCisJICovCisJaGFzaCAmPSAw eDAwMDBmZmZmVUw7CisjZW5kaWYKKwlyZXR1cm4gaGFzaDsKK30KKyNlbHNlICAvKiBEVUtfVVNF X1NUUkhBU0hfREVOU0UgKi8KK0RVS19JTlRFUk5BTCBkdWtfdWludDMyX3QgZHVrX2hlYXBfaGFz aHN0cmluZyhkdWtfaGVhcCAqaGVhcCwgY29uc3QgZHVrX3VpbnQ4X3QgKnN0ciwgZHVrX3NpemVf dCBsZW4pIHsKKwlkdWtfdWludDMyX3QgaGFzaDsKKwlkdWtfc2l6ZV90IHN0ZXA7CisJZHVrX3Np emVfdCBvZmY7CisKKwkvKiBTbGlnaHRseSBtb2RpZmllZCAiQmVybnN0ZWluIGhhc2giIGZyb206 CisJICoKKwkgKiAgICAgaHR0cDovL2V0ZXJuYWxseWNvbmZ1enpsZWQuY29tL3R1dHMvYWxnb3Jp dGhtcy9qc3dfdHV0X2hhc2hpbmcuYXNweAorCSAqCisJICogTW9kaWZpY2F0aW9uczogc3RyaW5n IHNraXBwaW5nIGFuZCByZXZlcnNlIGRpcmVjdGlvbiBzaW1pbGFyIHRvCisJICogTHVhIDUuMS41 LCBhbmQgZGlmZmVyZW50IGhhc2ggaW5pdGlhbGl6ZXIuCisJICoKKwkgKiBUaGUgcmV2ZXJzZSBk aXJlY3Rpb24gZW5zdXJlcyBsYXN0IGJ5dGUgaXQgYWx3YXlzIGluY2x1ZGVkIGluIHRoZQorCSAq IGhhc2ggd2hpY2ggaXMgYSBnb29kIGRlZmF1bHQgYXMgY2hhbmdpbmcgcGFydHMgb2YgdGhlIHN0 cmluZyBhcmUKKwkgKiBtb3JlIG9mdGVuIGluIHRoZSBzdWZmaXggdGhhbiBpbiB0aGUgcHJlZml4 LgorCSAqLworCisJaGFzaCA9IGhlYXAtPmhhc2hfc2VlZCBeICgoZHVrX3VpbnQzMl90KSBsZW4p OyAgLyogQmVybnN0ZWluIGhhc2ggaW5pdCB2YWx1ZSBpcyBub3JtYWxseSA1MzgxICovCisJc3Rl cCA9IChsZW4gPj4gRFVLX1VTRV9TVFJIQVNIX1NLSVBfU0hJRlQpICsgMTsKKwlmb3IgKG9mZiA9 IGxlbjsgb2ZmID49IHN0ZXA7IG9mZiAtPSBzdGVwKSB7CisJCURVS19BU1NFUlQob2ZmID49IDEp OyAgLyogb2ZmID49IHN0ZXAsIGFuZCBzdGVwID49IDEgKi8KKwkJaGFzaCA9IChoYXNoICogMzMp ICsgc3RyW29mZiAtIDFdOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJIQVNIMTYpCisJ LyogVHJ1bmNhdGUgdG8gMTYgYml0cyBoZXJlLCBzbyB0aGF0IGEgY29tcHV0ZWQgaGFzaCBjYW4g YmUgY29tcGFyZWQKKwkgKiBhZ2FpbnN0IGEgaGFzaCBzdG9yZWQgaW4gYSAxNi1iaXQgZmllbGQu CisJICovCisJaGFzaCAmPSAweDAwMDBmZmZmVUw7CisjZW5kaWYKKwlyZXR1cm4gaGFzaDsKK30K KyNlbmRpZiAgLyogRFVLX1VTRV9TVFJIQVNIX0RFTlNFICovCisKKy8qIGF1dG9tYXRpYyB1bmRl ZnMgKi8KKyN1bmRlZiBEVUtfX1NUUkhBU0hfQkxPQ0tTSVpFCisjdW5kZWYgRFVLX19TVFJIQVNI X01FRElVTVNUUklORworI3VuZGVmIERVS19fU1RSSEFTSF9TSE9SVFNUUklORworLyoKKyAqICBN YXJrLWFuZC1zd2VlcCBnYXJiYWdlIGNvbGxlY3Rpb24uCisgKi8KKworLyogI2luY2x1ZGUgZHVr X2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCitEVUtfTE9DQUxfREVDTCB2b2lk IGR1a19fbWFya19oZWFwaGRyKGR1a19oZWFwICpoZWFwLCBkdWtfaGVhcGhkciAqaCk7CitEVUtf TE9DQUxfREVDTCB2b2lkIGR1a19fbWFya19oZWFwaGRyX25vbm51bGwoZHVrX2hlYXAgKmhlYXAs IGR1a19oZWFwaGRyICpoKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19tYXJrX3R2YWwoZHVr X2hlYXAgKmhlYXAsIGR1a190dmFsICp0dik7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fbWFy a190dmFscyhkdWtfaGVhcCAqaGVhcCwgZHVrX3R2YWwgKnR2LCBkdWtfaWR4X3QgY291bnQpOwor CisvKgorICogIE1hcmtpbmcgZnVuY3Rpb25zIGZvciBoZWFwIHR5cGVzOiBtYXJrIGNoaWxkcmVu IHJlY3Vyc2l2ZWx5LgorICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fbWFya19oc3RyaW5nKGR1 a19oZWFwICpoZWFwLCBkdWtfaHN0cmluZyAqaCkgeworCURVS19VTlJFRihoZWFwKTsKKwlEVUtf VU5SRUYoaCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19tYXJrX2hzdHJpbmc6ICVw IiwgKHZvaWQgKikgaCkpOworCURVS19BU1NFUlQoaCk7CisKKwkvKiBub3RoaW5nIHRvIHByb2Nl c3MgKi8KK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19tYXJrX2hvYmplY3QoZHVrX2hlYXAgKmhl YXAsIGR1a19ob2JqZWN0ICpoKSB7CisJZHVrX3VpbnRfZmFzdDMyX3QgaTsKKworCURVS19EREQo RFVLX0RERFBSSU5UKCJkdWtfX21hcmtfaG9iamVjdDogJXAiLCAodm9pZCAqKSBoKSk7CisKKwlE VUtfQVNTRVJUKGgpOworCisJLyogWFhYOiB1c2UgYWR2YW5jaW5nIHBvaW50ZXJzIGluc3RlYWQg b2YgaW5kZXggbWFjcm9zIC0+IGZhc3RlciBhbmQgc21hbGxlcj8gKi8KKworCWZvciAoaSA9IDA7 IGkgPCAoZHVrX3VpbnRfZmFzdDMyX3QpIERVS19IT0JKRUNUX0dFVF9FTkVYVChoKTsgaSsrKSB7 CisJCWR1a19oc3RyaW5nICprZXkgPSBEVUtfSE9CSkVDVF9FX0dFVF9LRVkoaGVhcCwgaCwgaSk7 CisJCWlmIChrZXkgPT0gTlVMTCkgeworCQkJY29udGludWU7CisJCX0KKwkJZHVrX19tYXJrX2hl YXBoZHJfbm9ubnVsbChoZWFwLCAoZHVrX2hlYXBoZHIgKikga2V5KTsKKwkJaWYgKERVS19IT0JK RUNUX0VfU0xPVF9JU19BQ0NFU1NPUihoZWFwLCBoLCBpKSkgeworCQkJZHVrX19tYXJrX2hlYXBo ZHIoaGVhcCwgKGR1a19oZWFwaGRyICopIERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1BUUihoZWFw LCBoLCBpKS0+YS5nZXQpOworCQkJZHVrX19tYXJrX2hlYXBoZHIoaGVhcCwgKGR1a19oZWFwaGRy ICopIERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1BUUihoZWFwLCBoLCBpKS0+YS5zZXQpOworCQl9 IGVsc2UgeworCQkJZHVrX19tYXJrX3R2YWwoaGVhcCwgJkRVS19IT0JKRUNUX0VfR0VUX1ZBTFVF X1BUUihoZWFwLCBoLCBpKS0+dik7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKGR1a191 aW50X2Zhc3QzMl90KSBEVUtfSE9CSkVDVF9HRVRfQVNJWkUoaCk7IGkrKykgeworCQlkdWtfX21h cmtfdHZhbChoZWFwLCBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIoaGVhcCwgaCwgaSkpOwor CX0KKworCS8qIEhhc2ggcGFydCBpcyBhICd3ZWFrIHJlZmVyZW5jZScgYW5kIGRvZXMgbm90IGNv bnRyaWJ1dGUuICovCisKKwlkdWtfX21hcmtfaGVhcGhkcihoZWFwLCAoZHVrX2hlYXBoZHIgKikg RFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRShoZWFwLCBoKSk7CisKKwkvKiBGYXN0IHBhdGggZm9y IG9iamVjdHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHN1YmNsYXNzIHN0cnVjdCwgb3IgaGF2ZSBhCisJ ICogc3ViY2xhc3Mgc3RydWN0IGJ1dCBub3RoaW5nIHRoYXQgbmVlZHMgbWFya2luZyBpbiB0aGUg c3ViY2xhc3Mgc3RydWN0LgorCSAqLworCWlmIChEVUtfSE9CSkVDVF9IQVNfRkFTVFJFRlMoaCkp IHsKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9BTExPV1NfRkFTVFJFRlMoaCkpOworCQlyZXR1 cm47CisJfQorCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfUFJPSElCSVRTX0ZBU1RSRUZTKGgpKTsK KworCS8qIFhYWDogcmVvcmcsIG1vcmUgY29tbW9uIGZpcnN0ICovCisJaWYgKERVS19IT0JKRUNU X0lTX0NPTVBGVU5DKGgpKSB7CisJCWR1a19oY29tcGZ1bmMgKmYgPSAoZHVrX2hjb21wZnVuYyAq KSBoOworCQlkdWtfdHZhbCAqdHYsICp0dl9lbmQ7CisJCWR1a19ob2JqZWN0ICoqZm4sICoqZm5f ZW5kOworCisJCURVS19BU1NFUlRfSENPTVBGVU5DX1ZBTElEKGYpOworCisJCS8qICdkYXRhJyBp cyByZWFjaGFibGUgdGhyb3VnaCBldmVyeSBjb21waWxlZCBmdW5jdGlvbiB3aGljaAorCQkgKiBj b250YWlucyBhIHJlZmVyZW5jZS4KKwkJICovCisKKwkJZHVrX19tYXJrX2hlYXBoZHIoaGVhcCwg KGR1a19oZWFwaGRyICopIERVS19IQ09NUEZVTkNfR0VUX0RBVEEoaGVhcCwgZikpOworCQlkdWtf X21hcmtfaGVhcGhkcihoZWFwLCAoZHVrX2hlYXBoZHIgKikgRFVLX0hDT01QRlVOQ19HRVRfTEVY RU5WKGhlYXAsIGYpKTsKKwkJZHVrX19tYXJrX2hlYXBoZHIoaGVhcCwgKGR1a19oZWFwaGRyICop IERVS19IQ09NUEZVTkNfR0VUX1ZBUkVOVihoZWFwLCBmKSk7CisKKwkJaWYgKERVS19IQ09NUEZV TkNfR0VUX0RBVEEoaGVhcCwgZikgIT0gTlVMTCkgeworCQkJdHYgPSBEVUtfSENPTVBGVU5DX0dF VF9DT05TVFNfQkFTRShoZWFwLCBmKTsKKwkJCXR2X2VuZCA9IERVS19IQ09NUEZVTkNfR0VUX0NP TlNUU19FTkQoaGVhcCwgZik7CisJCQl3aGlsZSAodHYgPCB0dl9lbmQpIHsKKwkJCQlkdWtfX21h cmtfdHZhbChoZWFwLCB0dik7CisJCQkJdHYrKzsKKwkJCX0KKworCQkJZm4gPSBEVUtfSENPTVBG VU5DX0dFVF9GVU5DU19CQVNFKGhlYXAsIGYpOworCQkJZm5fZW5kID0gRFVLX0hDT01QRlVOQ19H RVRfRlVOQ1NfRU5EKGhlYXAsIGYpOworCQkJd2hpbGUgKGZuIDwgZm5fZW5kKSB7CisJCQkJZHVr X19tYXJrX2hlYXBoZHJfbm9ubnVsbChoZWFwLCAoZHVrX2hlYXBoZHIgKikgKmZuKTsKKwkJCQlm bisrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogTWF5IGhhcHBlbiBpbiBzb21lIG91dC1vZi1t ZW1vcnkgY29ybmVyIGNhc2VzLiAqLworCQkJRFVLX0QoRFVLX0RQUklOVCgiZHVrX2hjb21wZnVu YyAnZGF0YScgaXMgTlVMTCwgc2tpcHBpbmcgbWFya2luZyIpKTsKKwkJfQorCX0gZWxzZSBpZiAo RFVLX0hPQkpFQ1RfSVNfREVDRU5WKGgpKSB7CisJCWR1a19oZGVjZW52ICplID0gKGR1a19oZGVj ZW52ICopIGg7CisJCURVS19BU1NFUlRfSERFQ0VOVl9WQUxJRChlKTsKKwkJZHVrX19tYXJrX2hl YXBoZHIoaGVhcCwgKGR1a19oZWFwaGRyICopIGUtPnRocmVhZCk7CisJCWR1a19fbWFya19oZWFw aGRyKGhlYXAsIChkdWtfaGVhcGhkciAqKSBlLT52YXJtYXApOworCX0gZWxzZSBpZiAoRFVLX0hP QkpFQ1RfSVNfT0JKRU5WKGgpKSB7CisJCWR1a19ob2JqZW52ICplID0gKGR1a19ob2JqZW52ICop IGg7CisJCURVS19BU1NFUlRfSE9CSkVOVl9WQUxJRChlKTsKKwkJZHVrX19tYXJrX2hlYXBoZHJf bm9ubnVsbChoZWFwLCAoZHVrX2hlYXBoZHIgKikgZS0+dGFyZ2V0KTsKKyNpZiBkZWZpbmVkKERV S19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19C VUZPQkooaCkpIHsKKwkJZHVrX2hidWZvYmogKmIgPSAoZHVrX2hidWZvYmogKikgaDsKKwkJRFVL X0FTU0VSVF9IQlVGT0JKX1ZBTElEKGIpOworCQlkdWtfX21hcmtfaGVhcGhkcihoZWFwLCAoZHVr X2hlYXBoZHIgKikgYi0+YnVmKTsKKwkJZHVrX19tYXJrX2hlYXBoZHIoaGVhcCwgKGR1a19oZWFw aGRyICopIGItPmJ1Zl9wcm9wKTsKKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQ UE9SVCAqLworCX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfQk9VTkRGVU5DKGgpKSB7CisJCWR1 a19oYm91bmRmdW5jICpmID0gKGR1a19oYm91bmRmdW5jICopICh2b2lkICopIGg7CisJCURVS19B U1NFUlRfSEJPVU5ERlVOQ19WQUxJRChmKTsKKwkJZHVrX19tYXJrX3R2YWwoaGVhcCwgJmYtPnRh cmdldCk7CisJCWR1a19fbWFya190dmFsKGhlYXAsICZmLT50aGlzX2JpbmRpbmcpOworCQlkdWtf X21hcmtfdHZhbHMoaGVhcCwgZi0+YXJncywgZi0+bmFyZ3MpOworI2lmIGRlZmluZWQoRFVLX1VT RV9FUzZfUFJPWFkpCisJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19QUk9YWShoKSkgeworCQlk dWtfaHByb3h5ICpwID0gKGR1a19ocHJveHkgKikgaDsKKwkJRFVLX0FTU0VSVF9IUFJPWFlfVkFM SUQocCk7CisJCWR1a19fbWFya19oZWFwaGRyX25vbm51bGwoaGVhcCwgKGR1a19oZWFwaGRyICop IHAtPnRhcmdldCk7CisJCWR1a19fbWFya19oZWFwaGRyX25vbm51bGwoaGVhcCwgKGR1a19oZWFw aGRyICopIHAtPmhhbmRsZXIpOworI2VuZGlmICAvKiBEVUtfVVNFX0VTNl9QUk9YWSAqLworCX0g ZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfVEhSRUFEKGgpKSB7CisJCWR1a19odGhyZWFkICp0ID0g KGR1a19odGhyZWFkICopIGg7CisJCWR1a19hY3RpdmF0aW9uICphY3Q7CisJCWR1a190dmFsICp0 djsKKworCQlEVUtfQVNTRVJUX0hUSFJFQURfVkFMSUQodCk7CisKKwkJdHYgPSB0LT52YWxzdGFj azsKKwkJd2hpbGUgKHR2IDwgdC0+dmFsc3RhY2tfdG9wKSB7CisJCQlkdWtfX21hcmtfdHZhbCho ZWFwLCB0dik7CisJCQl0disrOworCQl9CisKKwkJZm9yIChhY3QgPSB0LT5jYWxsc3RhY2tfY3Vy cjsgYWN0ICE9IE5VTEw7IGFjdCA9IGFjdC0+cGFyZW50KSB7CisJCQlkdWtfX21hcmtfaGVhcGhk cihoZWFwLCAoZHVrX2hlYXBoZHIgKikgRFVLX0FDVF9HRVRfRlVOQyhhY3QpKTsKKwkJCWR1a19f bWFya19oZWFwaGRyKGhlYXAsIChkdWtfaGVhcGhkciAqKSBhY3QtPnZhcl9lbnYpOworCQkJZHVr X19tYXJrX2hlYXBoZHIoaGVhcCwgKGR1a19oZWFwaGRyICopIGFjdC0+bGV4X2Vudik7CisjaWYg ZGVmaW5lZChEVUtfVVNFX05PTlNURF9GVU5DX0NBTExFUl9QUk9QRVJUWSkKKwkJCWR1a19fbWFy a19oZWFwaGRyKGhlYXAsIChkdWtfaGVhcGhkciAqKSBhY3QtPnByZXZfY2FsbGVyKTsKKyNlbmRp ZgorI2lmIDAgIC8qIG5vdGhpbmcgbm93ICovCisJCQlmb3IgKGNhdCA9IGFjdC0+Y2F0OyBjYXQg IT0gTlVMTDsgY2F0ID0gY2F0LT5wYXJlbnQpIHsKKwkJCX0KKyNlbmRpZgorCQl9CisKKwkJZHVr X19tYXJrX2hlYXBoZHIoaGVhcCwgKGR1a19oZWFwaGRyICopIHQtPnJlc3VtZXIpOworCisJCWZv ciAoaSA9IDA7IGkgPCBEVUtfTlVNX0JVSUxUSU5TOyBpKyspIHsKKwkJCWR1a19fbWFya19oZWFw aGRyKGhlYXAsIChkdWtfaGVhcGhkciAqKSB0LT5idWlsdGluc1tpXSk7CisJCX0KKwl9IGVsc2Ug eworCQkvKiBXZSBtYXkgY29tZSBoZXJlIGlmIHRoZSBvYmplY3Qgc2hvdWxkIGhhdmUgYSBGQVNU UkVGUyBmbGFnCisJCSAqIGJ1dCBpdCdzIG1pc3NpbmcgZm9yIHNvbWUgcmVhc29uLiAgQXNzZXJ0 IGZvciBuZXZlciBnZXR0aW5nCisJCSAqIGhlcmU7IGhvd2V2ZXIsIG90aGVyIHRoYW4gcGVyZm9y bWFuY2UsIHRoaXMgaXMgaGFybWxlc3MuCisJCSAqLworCQlEVUtfRChEVUtfRFBSSU5UKCJtaXNz aW5nIEZBU1RSRUZTIGZsYWcgZm9yOiAlIWlPIiwgaCkpOworCQlEVUtfQVNTRVJUKDApOworCX0K K30KKworLyogTWFyayBhbnkgZHVrX2hlYXBoZHIgdHlwZS4gIFJlY3Vyc2lvbiB0cmFja2luZyBo YXBwZW5zIG9ubHkgaGVyZS4gKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fbWFya19oZWFwaGRyKGR1 a19oZWFwICpoZWFwLCBkdWtfaGVhcGhkciAqaCkgeworCURVS19EREQoRFVLX0RERFBSSU5UKCJk dWtfX21hcmtfaGVhcGhkciAlcCwgdHlwZSAlbGQiLAorCSAgICAgICAgICAgICAgICAgICAgICh2 b2lkICopIGgsCisJICAgICAgICAgICAgICAgICAgICAgKGggIT0gTlVMTCA/IChsb25nKSBEVUtf SEVBUEhEUl9HRVRfVFlQRShoKSA6IChsb25nKSAtMSkpKTsKKworCS8qIFhYWDogYWRkIG5vbi1u dWxsIHZhcmlhbnQ/ICovCisJaWYgKGggPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCisJRFVL X0FTU0VSVCghRFVLX0hFQVBIRFJfSEFTX1JFQURPTkxZKGgpIHx8IERVS19IRUFQSERSX0hBU19S RUFDSEFCTEUoaCkpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpICYmIGRlZmlu ZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJaWYgKCFEVUtfSEVBUEhEUl9IQVNfUkVB RE9OTFkoaCkpIHsKKwkJaC0+aF9hc3NlcnRfcmVmY291bnQrKzsgIC8qIENvbXBhcmlzb24gcmVm Y291bnQ6IGJ1bXAgZXZlbiBpZiBhbHJlYWR5IHJlYWNoYWJsZS4gKi8KKwl9CisjZW5kaWYKKwlp ZiAoRFVLX0hFQVBIRFJfSEFTX1JFQUNIQUJMRShoKSkgeworCQlEVUtfREREKERVS19ERERQUklO VCgiYWxyZWFkeSBtYXJrZWQgcmVhY2hhYmxlLCBza2lwIikpOworCQlyZXR1cm47CisJfQorI2lm IGRlZmluZWQoRFVLX1VTRV9ST01fT0JKRUNUUykKKwkvKiBSRUFET05MWSBvYmplY3RzIGFsd2F5 cyBoYXZlIFJFQUNIQUJMRSBzZXQsIHNvIHRoZSBjaGVjayBhYm92ZQorCSAqIHdpbGwgcHJldmVu dCBSRUFET05MWSBvYmplY3RzIGZyb20gYmVpbmcgbWFya2VkIGhlcmUuCisJICovCisJRFVLX0FT U0VSVCghRFVLX0hFQVBIRFJfSEFTX1JFQURPTkxZKGgpKTsKKyNlbmRpZgorCisJRFVLX0hFQVBI RFJfU0VUX1JFQUNIQUJMRShoKTsKKworCWlmIChoZWFwLT5tc19yZWN1cnNpb25fZGVwdGggPj0g RFVLX1VTRV9NQVJLX0FORF9TV0VFUF9SRUNMSU1JVCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJt YXJrLWFuZC1zd2VlcCByZWN1cnNpb24gbGltaXQgcmVhY2hlZCwgbWFya2luZyBhcyB0ZW1wcm9v dDogJXAiLCAodm9pZCAqKSBoKSk7CisJCURVS19IRUFQX1NFVF9NQVJLQU5EU1dFRVBfUkVDTElN SVRfUkVBQ0hFRChoZWFwKTsKKwkJRFVLX0hFQVBIRFJfU0VUX1RFTVBST09UKGgpOworCQlyZXR1 cm47CisJfQorCisJaGVhcC0+bXNfcmVjdXJzaW9uX2RlcHRoKys7CisJRFVLX0FTU0VSVChoZWFw LT5tc19yZWN1cnNpb25fZGVwdGggIT0gMCk7ICAvKiBXcmFwLiAqLworCisJc3dpdGNoIChEVUtf SEVBUEhEUl9HRVRfVFlQRShoKSkgeworCWNhc2UgRFVLX0hUWVBFX1NUUklORzoKKwkJZHVrX19t YXJrX2hzdHJpbmcoaGVhcCwgKGR1a19oc3RyaW5nICopIGgpOworCQlicmVhazsKKwljYXNlIERV S19IVFlQRV9PQkpFQ1Q6CisJCWR1a19fbWFya19ob2JqZWN0KGhlYXAsIChkdWtfaG9iamVjdCAq KSBoKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfSFRZUEVfQlVGRkVSOgorCQkvKiBub3RoaW5nIHRv IG1hcmsgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFVLX0QoRFVLX0RQUklOVCgiYXR0ZW1w dCB0byBtYXJrIGhlYXBoZHIgJXAgd2l0aCBpbnZhbGlkIGh0eXBlICVsZCIsICh2b2lkICopIGgs IChsb25nKSBEVUtfSEVBUEhEUl9HRVRfVFlQRShoKSkpOworCQlEVUtfVU5SRUFDSEFCTEUoKTsK Kwl9CisKKwlEVUtfQVNTRVJUKGhlYXAtPm1zX3JlY3Vyc2lvbl9kZXB0aCA+IDApOworCWhlYXAt Pm1zX3JlY3Vyc2lvbl9kZXB0aC0tOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX21hcmtfdHZh bChkdWtfaGVhcCAqaGVhcCwgZHVrX3R2YWwgKnR2KSB7CisJRFVLX0RERChEVUtfREREUFJJTlQo ImR1a19fbWFya190dmFsICVwIiwgKHZvaWQgKikgdHYpKTsKKwlpZiAodHYgPT0gTlVMTCkgewor CQlyZXR1cm47CisJfQorCWlmIChEVUtfVFZBTF9JU19IRUFQX0FMTE9DQVRFRCh0dikpIHsKKwkJ ZHVrX2hlYXBoZHIgKmg7CisJCWggPSBEVUtfVFZBTF9HRVRfSEVBUEhEUih0dik7CisJCURVS19B U1NFUlQoaCAhPSBOVUxMKTsKKwkJZHVrX19tYXJrX2hlYXBoZHJfbm9ubnVsbChoZWFwLCBoKTsK Kwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fbWFya190dmFscyhkdWtfaGVhcCAqaGVhcCwg ZHVrX3R2YWwgKnR2LCBkdWtfaWR4X3QgY291bnQpIHsKKwlEVUtfQVNTRVJUKGNvdW50ID09IDAg fHwgdHYgIT0gTlVMTCk7CisKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKERVS19UVkFM X0lTX0hFQVBfQUxMT0NBVEVEKHR2KSkgeworCQkJZHVrX2hlYXBoZHIgKmg7CisJCQloID0gRFVL X1RWQUxfR0VUX0hFQVBIRFIodHYpOworCQkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQkJZHVr X19tYXJrX2hlYXBoZHJfbm9ubnVsbChoZWFwLCBoKTsKKwkJfQorCQl0disrOworCX0KK30KKwor LyogTWFyayBhbnkgZHVrX2hlYXBoZHIgdHlwZSwgY2FsbGVyIGd1YXJhbnRlZXMgYSBub24tTlVM TCBwb2ludGVyLiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19tYXJrX2hlYXBoZHJfbm9ubnVsbChk dWtfaGVhcCAqaGVhcCwgZHVrX2hlYXBoZHIgKmgpIHsKKwkvKiBGb3Igbm93LCBqdXN0IGNhbGwg dGhlIGdlbmVyaWMgaGFuZGxlci4gIENoYW5nZSB3aGVuIGNhbGwgc2l0ZXMKKwkgKiBhcmUgY2hh bmdlZCB0b28uCisJICovCisJZHVrX19tYXJrX2hlYXBoZHIoaGVhcCwgaCk7Cit9CisKKy8qCisg KiAgTWFyayB0aGUgaGVhcC4KKyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX21hcmtfcm9vdHNf aGVhcChkdWtfaGVhcCAqaGVhcCkgeworCWR1a19zbWFsbF91aW50X3QgaTsKKworCURVS19ERChE VUtfRERQUklOVCgiZHVrX19tYXJrX3Jvb3RzX2hlYXA6ICVwIiwgKHZvaWQgKikgaGVhcCkpOwor CisJZHVrX19tYXJrX2hlYXBoZHIoaGVhcCwgKGR1a19oZWFwaGRyICopIGhlYXAtPmhlYXBfdGhy ZWFkKTsKKwlkdWtfX21hcmtfaGVhcGhkcihoZWFwLCAoZHVrX2hlYXBoZHIgKikgaGVhcC0+aGVh cF9vYmplY3QpOworCisJZm9yIChpID0gMDsgaSA8IERVS19IRUFQX05VTV9TVFJJTkdTOyBpKysp IHsKKwkJZHVrX2hzdHJpbmcgKmggPSBEVUtfSEVBUF9HRVRfU1RSSU5HKGhlYXAsIGkpOworCQlk dWtfX21hcmtfaGVhcGhkcihoZWFwLCAoZHVrX2hlYXBoZHIgKikgaCk7CisJfQorCisJZHVrX19t YXJrX3R2YWwoaGVhcCwgJmhlYXAtPmxqLnZhbHVlMSk7CisJZHVrX19tYXJrX3R2YWwoaGVhcCwg JmhlYXAtPmxqLnZhbHVlMik7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9S VCkKKwlmb3IgKGkgPSAwOyBpIDwgaGVhcC0+ZGJnX2JyZWFrcG9pbnRfY291bnQ7IGkrKykgewor CQlkdWtfX21hcmtfaGVhcGhkcihoZWFwLCAoZHVrX2hlYXBoZHIgKikgaGVhcC0+ZGJnX2JyZWFr cG9pbnRzW2ldLmZpbGVuYW1lKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqICBNYXJrIHVucmVh Y2hhYmxlLCBmaW5hbGl6YWJsZSBvYmplY3RzLgorICoKKyAqICBTdWNoIG9iamVjdHMgd2lsbCBi ZSBtb3ZlZCBhc2lkZSBhbmQgdGhlaXIgZmluYWxpemVycyBydW4gbGF0ZXIuICBUaGV5CisgKiAg aGF2ZSB0byBiZSB0cmVhdGVkIGFzIHJlYWNoYWJpbGl0eSByb290cyBmb3IgdGhlaXIgcHJvcGVy dGllcyBldGMgdG8KKyAqICByZW1haW4gYWxsb2NhdGVkLiAgVGhpcyBtYXJraW5nIGlzIG9ubHkg ZG9uZSBmb3IgdW5yZWFjaGFibGUgdmFsdWVzIHdoaWNoCisgKiAgd291bGQgYmUgc3dlcHQgbGF0 ZXIuCisgKgorICogIE9iamVjdHMgYXJlIGZpcnN0IG1hcmtlZCBGSU5BTElaQUJMRSBhbmQgb25s eSB0aGVuIG1hcmtlZCBhcyByZWFjaGFiaWxpdHkKKyAqICByb290czsgb3RoZXJ3aXNlIGNpcmN1 bGFyIHJlZmVyZW5jZXMgbWlnaHQgYmUgaGFuZGxlZCBpbmNvbnNpc3RlbnRseS4KKyAqLworCisj aWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorRFVLX0xPQ0FMIHZvaWQgZHVr X19tYXJrX2ZpbmFsaXphYmxlKGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2hlYXBoZHIgKmhkcjsK KwlkdWtfc2l6ZV90IGNvdW50X2ZpbmFsaXphYmxlID0gMDsKKworCURVS19ERChEVUtfRERQUklO VCgiZHVrX19tYXJrX2ZpbmFsaXphYmxlOiAlcCIsICh2b2lkICopIGhlYXApKTsKKworCURVS19B U1NFUlQoaGVhcC0+aGVhcF90aHJlYWQgIT0gTlVMTCk7CisKKwloZHIgPSBoZWFwLT5oZWFwX2Fs bG9jYXRlZDsKKwl3aGlsZSAoaGRyICE9IE5VTEwpIHsKKwkJLyogQSBmaW5hbGl6ZXIgaXMgbG9v a2VkIHVwIGZyb20gdGhlIG9iamVjdCBhbmQgdXAgaXRzCisJCSAqIHByb3RvdHlwZSBjaGFpbiAo d2hpY2ggYWxsb3dzIGluaGVyaXRlZCBmaW5hbGl6ZXJzKS4KKwkJICogVGhlIGZpbmFsaXplciBp cyBjaGVja2VkIGZvciB1c2luZyBhIGR1a19ob2JqZWN0IGZsYWcKKwkJICogd2hpY2ggaXMga2Vw dCBpbiBzeW5jIHdpdGggdGhlIHByZXNlbmNlIGFuZCBjYWxsYWJpbGl0eQorCQkgKiBvZiBhIF9G aW5hbGl6ZXIgaGlkZGVuIHN5bWJvbC4KKwkJICovCisKKwkJaWYgKCFEVUtfSEVBUEhEUl9IQVNf UkVBQ0hBQkxFKGhkcikgJiYKKwkJICAgIERVS19IRUFQSERSX0lTX09CSkVDVChoZHIpICYmCisJ CSAgICAhRFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpFRChoZHIpICYmCisJCSAgICBEVUtfSE9CSkVD VF9IQVNfRklOQUxJWkVSX0ZBU1QoaGVhcCwgKGR1a19ob2JqZWN0ICopIGhkcikpIHsKKwkJCS8q IGhlYXBoZHI6CisJCQkgKiAgLSBpcyBub3QgcmVhY2hhYmxlCisJCQkgKiAgLSBpcyBhbiBvYmpl Y3QKKwkJCSAqICAtIGlzIG5vdCBhIGZpbmFsaXplZCBvYmplY3Qgd2FpdGluZyBmb3IgcmVzY3Vl L2tlZXAgZGVjaXNpb24KKwkJCSAqICAtIGhhcyBhIGZpbmFsaXplcgorCQkJICovCisKKwkJCURV S19ERChEVUtfRERQUklOVCgidW5yZWFjaGFibGUgaGVhcCBvYmplY3Qgd2lsbCBiZSAiCisJCQkg ICAgICAgICAgICAgICAgICAgImZpbmFsaXplZCAtPiBtYXJrIGFzIGZpbmFsaXphYmxlICIKKwkJ CSAgICAgICAgICAgICAgICAgICAiYW5kIHRyZWF0IGFzIGEgcmVhY2hhYmlsaXR5IHJvb3Q6ICVw IiwKKwkJCSAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBoZHIpKTsKKwkJCURVS19BU1NFUlQo IURVS19IRUFQSERSX0hBU19SRUFET05MWShoZHIpKTsKKwkJCURVS19IRUFQSERSX1NFVF9GSU5B TElaQUJMRShoZHIpOworCQkJY291bnRfZmluYWxpemFibGUrKzsKKwkJfQorCisJCWhkciA9IERV S19IRUFQSERSX0dFVF9ORVhUKGhlYXAsIGhkcik7CisJfQorCisJaWYgKGNvdW50X2ZpbmFsaXph YmxlID09IDApIHsKKwkJcmV0dXJuOworCX0KKworCURVS19ERChEVUtfRERQUklOVCgibWFya2Vk ICVsZCBoZWFwIG9iamVjdHMgYXMgZmluYWxpemFibGUsIG5vdyBtYXJrIHRoZW0gcmVhY2hhYmxl IiwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvdW50X2ZpbmFsaXphYmxlKSk7CisKKwlo ZHIgPSBoZWFwLT5oZWFwX2FsbG9jYXRlZDsKKwl3aGlsZSAoaGRyICE9IE5VTEwpIHsKKwkJaWYg KERVS19IRUFQSERSX0hBU19GSU5BTElaQUJMRShoZHIpKSB7CisJCQlkdWtfX21hcmtfaGVhcGhk cl9ub25udWxsKGhlYXAsIGhkcik7CisJCX0KKworCQloZHIgPSBEVUtfSEVBUEhEUl9HRVRfTkVY VChoZWFwLCBoZHIpOworCX0KKworCS8qIENhbGxlciB3aWxsIGZpbmlzaCB0aGUgbWFya2luZyBw cm9jZXNzIGlmIHdlIGhpdCBhIHJlY3Vyc2lvbiBsaW1pdC4gKi8KK30KKyNlbmRpZiAgLyogRFVL X1VTRV9GSU5BTElaRVJfU1VQUE9SVCAqLworCisvKgorICogIE1hcmsgb2JqZWN0cyBvbiBmaW5h bGl6ZV9saXN0LgorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQp CitEVUtfTE9DQUwgdm9pZCBkdWtfX21hcmtfZmluYWxpemVfbGlzdChkdWtfaGVhcCAqaGVhcCkg eworCWR1a19oZWFwaGRyICpoZHI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWR1a19z aXplX3QgY291bnRfZmluYWxpemVfbGlzdCA9IDA7CisjZW5kaWYKKworCURVS19ERChEVUtfRERQ UklOVCgiZHVrX19tYXJrX2ZpbmFsaXplX2xpc3Q6ICVwIiwgKHZvaWQgKikgaGVhcCkpOworCisJ aGRyID0gaGVhcC0+ZmluYWxpemVfbGlzdDsKKwl3aGlsZSAoaGRyICE9IE5VTEwpIHsKKwkJZHVr X19tYXJrX2hlYXBoZHJfbm9ubnVsbChoZWFwLCBoZHIpOworCQloZHIgPSBEVUtfSEVBUEhEUl9H RVRfTkVYVChoZWFwLCBoZHIpOworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwkJY291bnRf ZmluYWxpemVfbGlzdCsrOworI2VuZGlmCisJfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVH KQorCWlmIChjb3VudF9maW5hbGl6ZV9saXN0ID4gMCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJt YXJrZWQgJWxkIG9iamVjdHMgb24gdGhlIGZpbmFsaXplX2xpc3QgYXMgcmVhY2hhYmxlIChwcmV2 aW91cyBmaW5hbGl6ZXIgcnVuIHNraXBwZWQpIiwKKwkJICAgICAgICAgICAgICAgICAobG9uZykg Y291bnRfZmluYWxpemVfbGlzdCkpOworCX0KKyNlbmRpZgorfQorI2VuZGlmICAvKiBEVUtfVVNF X0ZJTkFMSVpFUl9TVVBQT1JUICovCisKKy8qCisgKiAgRmFsbGJhY2sgbWFya2luZyBoYW5kbGVy IGlmIHJlY3Vyc2lvbiBsaW1pdCBpcyByZWFjaGVkLgorICoKKyAqICBJdGVyYXRlcyAndGVtcHJv b3RzJyB1bnRpbCByZWN1cnNpb24gbGltaXQgaXMgbm8gbG9uZ2VyIGhpdC4gIFRlbXByb290cwor ICogIGNhbiBiZSBpbiBoZWFwX2FsbG9jYXRlZCBvciBmaW5hbGl6ZV9saXN0OyByZWZ6ZXJvX2xp c3QgaXMgbm93IGFsd2F5cworICogIGVtcHR5IGZvciBtYXJrLWFuZC1zd2VlcC4gIEEgdGVtcHJv b3QgbWF5IG9jY3VyIGluIGZpbmFsaXplX2xpc3Qgbm93IGlmCisgKiAgdGhlcmUgYXJlIG9iamVj dHMgb24gdGhlIGZpbmFsaXplX2xpc3QgYW5kIHVzZXIgY29kZSBjcmVhdGVzIGEgcmVmZXJlbmNl CisgKiAgZnJvbSBhbiBvYmplY3QgaW4gaGVhcF9hbGxvY2F0ZWQgdG8gdGhlIG9iamVjdCBpbiBm aW5hbGl6ZV9saXN0ICh3aGljaCBpcworICogIG5vdyBhbGxvd2VkKSwgYW5kIGl0IGhhcHBlbmVk IHRvIGNvaW5jaWRlIHdpdGggdGhlIHJlY3Vyc2lvbiBkZXB0aCBsaW1pdC4KKyAqCisgKiAgVGhp cyBpcyBhIHNsb3cgc2NhbiwgYnV0IGd1YXJhbnRlZXMgdGhhdCB3ZSBmaW5pc2ggd2l0aCBhIGJv dW5kZWQgQyBzdGFjay4KKyAqCisgKiAgTm90ZSB0aGF0IG5vZGVzIG1heSBoYXZlIGJlZW4gbWFy a2VkIGFzIHRlbXByb290cyBiZWZvcmUgdGhpcyBzY2FuIGJlZ3VuLAorICogIE9SIHRoZXkgbWF5 IGhhdmUgYmVlbiBtYXJrZWQgZHVyaW5nIHRoZSBzY2FuIChhcyB3ZSBwcm9jZXNzIG5vZGVzCisg KiAgcmVjdXJzaXZlbHkgYWxzbyBkdXJpbmcgdGhlIHNjYW4pLiAgVGhpcyBpcyBpbnRlbmRlZCBi ZWhhdmlvci4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorRFVLX0xPQ0FMIHZv aWQgZHVrX19oYW5kbGVfdGVtcHJvb3QoZHVrX2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpoZHIs IGR1a19zaXplX3QgKmNvdW50KSB7CisjZWxzZQorRFVLX0xPQ0FMIHZvaWQgZHVrX19oYW5kbGVf dGVtcHJvb3QoZHVrX2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpoZHIpIHsKKyNlbmRpZgorCURV S19BU1NFUlQoaGRyICE9IE5VTEwpOworCisJaWYgKCFEVUtfSEVBUEhEUl9IQVNfVEVNUFJPT1Qo aGRyKSkgeworCQlEVUtfREREKERVS19ERERQUklOVCgibm90IGEgdGVtcCByb290OiAlcCIsICh2 b2lkICopIGhkcikpOworCQlyZXR1cm47CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoImZv dW5kIGEgdGVtcCByb290OiAlcCIsICh2b2lkICopIGhkcikpOworCURVS19IRUFQSERSX0NMRUFS X1RFTVBST09UKGhkcik7CisJRFVLX0hFQVBIRFJfQ0xFQVJfUkVBQ0hBQkxFKGhkcik7ICAvKiBE b25lIHNvIHRoYXQgZHVrX19tYXJrX2hlYXBoZHIoKSB3b3JrcyBjb3JyZWN0bHkuICovCisjaWYg ZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpICYmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0Vf Q09VTlRJTkcpCisJaGRyLT5oX2Fzc2VydF9yZWZjb3VudC0tOyAgLyogU2FtZSBub2RlIHZpc2l0 ZWQgdHdpY2UuICovCisjZW5kaWYKKwlkdWtfX21hcmtfaGVhcGhkcl9ub25udWxsKGhlYXAsIGhk cik7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJKCpjb3VudCkrKzsKKyNlbmRpZgor fQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX21hcmtfdGVtcHJvb3RzX2J5X2hlYXBfc2NhbihkdWtf aGVhcCAqaGVhcCkgeworCWR1a19oZWFwaGRyICpoZHI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RF QlVHKQorCWR1a19zaXplX3QgY291bnQ7CisjZW5kaWYKKworCURVS19ERChEVUtfRERQUklOVCgi ZHVrX19tYXJrX3RlbXByb290c19ieV9oZWFwX3NjYW46ICVwIiwgKHZvaWQgKikgaGVhcCkpOwor CisJd2hpbGUgKERVS19IRUFQX0hBU19NQVJLQU5EU1dFRVBfUkVDTElNSVRfUkVBQ0hFRChoZWFw KSkgeworCQlEVUtfREQoRFVLX0REUFJJTlQoInJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkLCBkb2lu ZyBoZWFwIHNjYW4gdG8gY29udGludWUgZnJvbSB0ZW1wcm9vdHMiKSk7CisKKyNpZiBkZWZpbmVk KERVS19VU0VfREVCVUcpCisJCWNvdW50ID0gMDsKKyNlbmRpZgorCQlEVUtfSEVBUF9DTEVBUl9N QVJLQU5EU1dFRVBfUkVDTElNSVRfUkVBQ0hFRChoZWFwKTsKKworCQloZHIgPSBoZWFwLT5oZWFw X2FsbG9jYXRlZDsKKwkJd2hpbGUgKGhkcikgeworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykK KwkJCWR1a19faGFuZGxlX3RlbXByb290KGhlYXAsIGhkciwgJmNvdW50KTsKKyNlbHNlCisJCQlk dWtfX2hhbmRsZV90ZW1wcm9vdChoZWFwLCBoZHIpOworI2VuZGlmCisJCQloZHIgPSBEVUtfSEVB UEhEUl9HRVRfTkVYVChoZWFwLCBoZHIpOworCQl9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRklO QUxJWkVSX1NVUFBPUlQpCisJCWhkciA9IGhlYXAtPmZpbmFsaXplX2xpc3Q7CisJCXdoaWxlICho ZHIpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCQlkdWtfX2hhbmRsZV90ZW1wcm9v dChoZWFwLCBoZHIsICZjb3VudCk7CisjZWxzZQorCQkJZHVrX19oYW5kbGVfdGVtcHJvb3QoaGVh cCwgaGRyKTsKKyNlbmRpZgorCQkJaGRyID0gRFVLX0hFQVBIRFJfR0VUX05FWFQoaGVhcCwgaGRy KTsKKwkJfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCURVS19ERChE VUtfRERQUklOVCgidGVtcHJvb3QgbWFyayBoZWFwIHNjYW4gcHJvY2Vzc2VkICVsZCB0ZW1wIHJv b3RzIiwgKGxvbmcpIGNvdW50KSk7CisjZW5kaWYKKwl9Cit9CisKKy8qCisgKiAgRmluYWxpemUg cmVmY291bnRzIGZvciBoZWFwIGVsZW1lbnRzIGp1c3QgYWJvdXQgdG8gYmUgZnJlZWQuCisgKiAg VGhpcyBtdXN0IGJlIGRvbmUgZm9yIGFsbCBvYmplY3RzIGJlZm9yZSBmcmVlaW5nIHRvIGF2b2lk IGFueQorICogIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLgorICoKKyAqICBOb3RlIHRoYXQg dGhpcyBtdXN0IGRlZHVjZSB0aGUgc2V0IG9mIG9iamVjdHMgdG8gYmUgZnJlZWQKKyAqICBpZGVu dGljYWxseSB0byBkdWtfX3N3ZWVwX2hlYXAoKS4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNF X1JFRkVSRU5DRV9DT1VOVElORykKK0RVS19MT0NBTCB2b2lkIGR1a19fZmluYWxpemVfcmVmY291 bnRzKGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2hlYXBoZHIgKmhkcjsKKworCURVS19BU1NFUlQo aGVhcC0+aGVhcF90aHJlYWQgIT0gTlVMTCk7CisKKwlEVUtfREQoRFVLX0REUFJJTlQoImR1a19f ZmluYWxpemVfcmVmY291bnRzOiBoZWFwPSVwIiwgKHZvaWQgKikgaGVhcCkpOworCisJaGRyID0g aGVhcC0+aGVhcF9hbGxvY2F0ZWQ7CisJd2hpbGUgKGhkcikgeworCQlpZiAoIURVS19IRUFQSERS X0hBU19SRUFDSEFCTEUoaGRyKSkgeworCQkJLyoKKwkJCSAqICBVbnJlYWNoYWJsZSBvYmplY3Qg YWJvdXQgdG8gYmUgc3dlcHQuICBGaW5hbGl6ZSB0YXJnZXQgcmVmY291bnRzCisJCQkgKiAgKG9i amVjdHMgd2hpY2ggdGhlIHVucmVhY2hhYmxlIG9iamVjdCBwb2ludHMgdG8pIHdpdGhvdXQgZG9p bmcKKwkJCSAqICByZWZ6ZXJvIHByb2Nlc3NpbmcuICBSZWN1cnNpdmUgZGVjcmVmcyBhcmUgYWxz byBwcmV2ZW50ZWQgd2hlbgorCQkJICogIHJlZnplcm8gcHJvY2Vzc2luZyBpcyBkaXNhYmxlZC4K KwkJCSAqCisJCQkgKiAgVmFsdWUgY2Fubm90IGJlIGEgZmluYWxpemFibGUgb2JqZWN0LCBhcyB0 aGV5IGhhdmUgYmVlbiBtYWRlCisJCQkgKiAgdGVtcG9yYXJpbHkgcmVhY2hhYmxlIGZvciB0aGlz IHJvdW5kLgorCQkJICovCisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ1bnJlYWNoYWJsZSBv YmplY3QsIHJlZmNvdW50IGZpbmFsaXplIGJlZm9yZSBzd2VlcGluZzogJXAiLCAodm9pZCAqKSBo ZHIpKTsKKworCQkJLyogRmluYWxpemUgdXNpbmcgaGVhcC0+aGVhcF90aHJlYWQ7IERFQ1JFRiBo YXMgYQorCQkJICogc3VwcHJlc3MgY2hlY2sgZm9yIG1hcmstYW5kLXN3ZWVwIHdoaWNoIGlzIGJh c2VkCisJCQkgKiBvbiBoZWFwLT5tc19ydW5uaW5nLgorCQkJICovCisJCQlkdWtfaGVhcGhkcl9y ZWZjb3VudF9maW5hbGl6ZV9ub3J6KGhlYXAsIGhkcik7CisJCX0KKworCQloZHIgPSBEVUtfSEVB UEhEUl9HRVRfTkVYVChoZWFwLCBoZHIpOworCX0KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZF UkVOQ0VfQ09VTlRJTkcgKi8KKworLyoKKyAqICBDbGVhciAocmVhY2hhYmxlKSBmbGFncyBvZiBm aW5hbGl6ZV9saXN0LgorICoKKyAqICBXZSBjb3VsZCBtb3N0bHkgZG8gaW4gdGhlIHN3ZWVwIHBo YXNlIHdoZW4gd2UgbW92ZSBvYmplY3RzIGZyb20gdGhlCisgKiAgaGVhcCBpbnRvIHRoZSBmaW5h bGl6ZV9saXN0LiAgSG93ZXZlciwgaWYgYSBmaW5hbGl6ZXIgcnVuIGlzIHNraXBwZWQKKyAqICBk dXJpbmcgYSBtYXJrLWFuZC1zd2VlcCwgdGhlIG9iamVjdHMgb24gdGhlIGZpbmFsaXplX2xpc3Qg d2lsbCBiZSBtYXJrZWQKKyAqICByZWFjaGFibGUgZHVyaW5nIHRoZSBuZXh0IG1hcmstYW5kLXN3 ZWVwLiAgU2luY2UgdGhleSdyZSBhbHJlYWR5IG9uIHRoZQorICogIGZpbmFsaXplX2xpc3QsIG5v LW9uZSB3aWxsIGJlIGNsZWFyaW5nIHRoZWlyIFJFQUNIQUJMRSBmbGFnIHNvIHdlIGRvIGl0Cisg KiAgaGVyZS4gIChUaGlzIG5vdyBvdmVybGFwcyB3aXRoIHRoZSBzd2VlcCBoYW5kbGluZyBpbiBh IGhhcm1sZXNzIHdheS4pCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfU1VQ UE9SVCkKK0RVS19MT0NBTCB2b2lkIGR1a19fY2xlYXJfZmluYWxpemVfbGlzdF9mbGFncyhkdWtf aGVhcCAqaGVhcCkgeworCWR1a19oZWFwaGRyICpoZHI7CisKKwlEVUtfREQoRFVLX0REUFJJTlQo ImR1a19fY2xlYXJfZmluYWxpemVfbGlzdF9mbGFnczogJXAiLCAodm9pZCAqKSBoZWFwKSk7CisK KwloZHIgPSBoZWFwLT5maW5hbGl6ZV9saXN0OworCXdoaWxlIChoZHIpIHsKKwkJRFVLX0hFQVBI RFJfQ0xFQVJfUkVBQ0hBQkxFKGhkcik7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMp CisJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpBQkxFKGhkcikgfHwgXAorCQkg ICAgICAgICAgIChoZWFwLT5jdXJyZW50bHlfZmluYWxpemluZyA9PSBoZHIpKTsKKyNlbmRpZgor CQkvKiBEVUtfSEVBUEhEUl9GTEFHX0ZJTkFMSVpFRCBtYXkgYmUgc2V0LiAqLworCQlEVUtfQVNT RVJUKCFEVUtfSEVBUEhEUl9IQVNfVEVNUFJPT1QoaGRyKSk7CisJCWhkciA9IERVS19IRUFQSERS X0dFVF9ORVhUKGhlYXAsIGhkcik7CisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNFX0ZJTkFMSVpF Ul9TVVBQT1JUICovCisKKy8qCisgKiAgU3dlZXAgc3RyaW5ndGFibGUuCisgKi8KKworRFVLX0xP Q0FMIHZvaWQgZHVrX19zd2VlcF9zdHJpbmd0YWJsZShkdWtfaGVhcCAqaGVhcCwgZHVrX3NpemVf dCAqb3V0X2NvdW50X2tlZXApIHsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtfaHN0cmluZyAqcHJl djsKKwlkdWtfdWludDMyX3QgaTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJZHVrX3Np emVfdCBjb3VudF9mcmVlID0gMDsKKyNlbmRpZgorCWR1a19zaXplX3QgY291bnRfa2VlcCA9IDA7 CisKKwlEVUtfREQoRFVLX0REUFJJTlQoImR1a19fc3dlZXBfc3RyaW5ndGFibGU6ICVwIiwgKHZv aWQgKikgaGVhcCkpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCWlm IChoZWFwLT5zdHJ0YWJsZTE2ID09IE5VTEwpIHsKKyNlbHNlCisJaWYgKGhlYXAtPnN0cnRhYmxl ID09IE5VTEwpIHsKKyNlbmRpZgorCQlnb3RvIGRvbmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IGhlYXAtPnN0X3NpemU7IGkrKykgeworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09N UCkKKwkJaCA9IERVS19VU0VfSEVBUFBUUl9ERUMxNihoZWFwLT5oZWFwX3VkYXRhLCBoZWFwLT5z dHJ0YWJsZTE2W2ldKTsKKyNlbHNlCisJCWggPSBoZWFwLT5zdHJ0YWJsZVtpXTsKKyNlbmRpZgor CQlwcmV2ID0gTlVMTDsKKwkJd2hpbGUgKGggIT0gTlVMTCkgeworCQkJZHVrX2hzdHJpbmcgKm5l eHQ7CisJCQluZXh0ID0gaC0+aGRyLmhfbmV4dDsKKworCQkJaWYgKERVS19IRUFQSERSX0hBU19S RUFDSEFCTEUoKGR1a19oZWFwaGRyICopIGgpKQorCQkJeworCQkJCURVS19IRUFQSERSX0NMRUFS X1JFQUNIQUJMRSgoZHVrX2hlYXBoZHIgKikgaCk7CisJCQkJY291bnRfa2VlcCsrOworCQkJCXBy ZXYgPSBoOworCQkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCQkJY291 bnRfZnJlZSsrOworI2VuZGlmCisKKwkJCQkvKiBGb3IgcGlubmVkIHN0cmluZ3MgdGhlIHJlZmNv dW50IGhhcyBiZWVuCisJCQkJICogYnVtcGVkLiAgV2UgY291bGQgdW5idW1wIGl0IGhlcmUgYmVm b3JlCisJCQkJICogZnJlZWluZywgYnV0IHRoYXQncyBhY3R1YWxseSBub3QgbmVjZXNzYXJ5CisJ CQkJICogZXhjZXB0IGZvciBhc3NlcnRpb25zLgorCQkJCSAqLworI2lmIDAKKwkJCQlpZiAoRFVL X0hTVFJJTkdfSEFTX1BJTk5FRF9MSVRFUkFMKGgpKSB7CisJCQkJCURVS19BU1NFUlQoRFVLX0hF QVBIRFJfR0VUX1JFRkNPVU5UKChkdWtfaGVhcGhkciAqKSBoKSA+IDBVKTsKKwkJCQkJRFVLX0hT VFJJTkdfREVDUkVGX05PUlooaGVhcC0+aGVhcF90aHJlYWQsIGgpOworCQkJCQlEVUtfSFNUUklO R19DTEVBUl9QSU5ORURfTElURVJBTChoKTsKKwkJCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKERV S19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCQkJCS8qIE5vbi16ZXJvIHJlZmNvdW50cyBzaG91 bGQgbm90IGhhcHBlbiBmb3IgdW5yZWFjaGFibGUgc3RyaW5ncywKKwkJCQkgKiBiZWNhdXNlIHdl IHJlZmNvdW50IGZpbmFsaXplIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdoaWNoCisJCQkJICog c2hvdWxkIGhhdmUgZGVjcmVhc2VkIHVucmVhY2hhYmxlIHN0cmluZyByZWZjb3VudHMgdG8gemVy bworCQkJCSAqIChldmVuIGZvciBjeWNsZXMpLiAgSG93ZXZlciwgcGlubmVkIHN0cmluZ3MgaGF2 ZSBhICsxIGJ1bXAuCisJCQkJICovCisJCQkJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfUkVG Q09VTlQoKGR1a19oZWFwaGRyICopIGgpID09CisJCQkJICAgICAgICAgICBEVUtfSFNUUklOR19I QVNfUElOTkVEX0xJVEVSQUwoaCkgPyAxVSA6IDBVKTsKKyNlbmRpZgorCisJCQkJLyogRGVhbCB3 aXRoIHdlYWsgcmVmZXJlbmNlcyBmaXJzdC4gKi8KKwkJCQlkdWtfaGVhcF9zdHJjYWNoZV9zdHJp bmdfcmVtb3ZlKGhlYXAsIChkdWtfaHN0cmluZyAqKSBoKTsKKworCQkJCS8qIFJlbW92ZSB0aGUg c3RyaW5nIGZyb20gdGhlIHN0cmluZyB0YWJsZS4gKi8KKwkJCQlkdWtfaGVhcF9zdHJ0YWJsZV91 bmxpbmtfcHJldihoZWFwLCAoZHVrX2hzdHJpbmcgKikgaCwgKGR1a19oc3RyaW5nICopIHByZXYp OworCisJCQkJLyogRnJlZSBpbm5lciByZWZlcmVuY2VzICh0aGVzZSBleGlzdCBlLmcuIHdoZW4g ZXh0ZXJuYWwKKwkJCQkgKiBzdHJpbmdzIGFyZSBlbmFibGVkKSBhbmQgdGhlIHN0cnVjdCBpdHNl bGYuCisJCQkJICovCisJCQkJZHVrX2ZyZWVfaHN0cmluZyhoZWFwLCAoZHVrX2hzdHJpbmcgKikg aCk7CisKKwkJCQkvKiBEb24ndCB1cGRhdGUgJ3ByZXYnOyBpdCBzaG91bGQgYmUgbGFzdCBzdHJp bmcga2VwdC4gKi8KKwkJCX0KKworCQkJaCA9IG5leHQ7CisJCX0KKwl9CisKKyBkb25lOgorI2lm IGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwlEVUtfRChEVUtfRFBSSU5UKCJtYXJrLWFuZC1zd2Vl cCBzd2VlcCBzdHJpbmd0YWJsZTogJWxkIGZyZWVkLCAlbGQga2VwdCIsCisJICAgICAgICAgICAg ICAgICAobG9uZykgY291bnRfZnJlZSwgKGxvbmcpIGNvdW50X2tlZXApKTsKKyNlbmRpZgorCSpv dXRfY291bnRfa2VlcCA9IGNvdW50X2tlZXA7Cit9CisKKy8qCisgKiAgU3dlZXAgaGVhcC4KKyAq LworCitEVUtfTE9DQUwgdm9pZCBkdWtfX3N3ZWVwX2hlYXAoZHVrX2hlYXAgKmhlYXAsIGR1a19z bWFsbF91aW50X3QgZmxhZ3MsIGR1a19zaXplX3QgKm91dF9jb3VudF9rZWVwKSB7CisJZHVrX2hl YXBoZHIgKnByZXY7ICAvKiBsYXN0IGVsZW1lbnQgdGhhdCB3YXMgbGVmdCBpbiB0aGUgaGVhcCAq LworCWR1a19oZWFwaGRyICpjdXJyOworCWR1a19oZWFwaGRyICpuZXh0OworI2lmIGRlZmluZWQo RFVLX1VTRV9ERUJVRykKKwlkdWtfc2l6ZV90IGNvdW50X2ZyZWUgPSAwOworCWR1a19zaXplX3Qg Y291bnRfZmluYWxpemUgPSAwOworCWR1a19zaXplX3QgY291bnRfcmVzY3VlID0gMDsKKyNlbmRp ZgorCWR1a19zaXplX3QgY291bnRfa2VlcCA9IDA7CisKKwlEVUtfREQoRFVLX0REUFJJTlQoImR1 a19fc3dlZXBfaGVhcDogJXAiLCAodm9pZCAqKSBoZWFwKSk7CisKKwlwcmV2ID0gTlVMTDsKKwlj dXJyID0gaGVhcC0+aGVhcF9hbGxvY2F0ZWQ7CisJaGVhcC0+aGVhcF9hbGxvY2F0ZWQgPSBOVUxM OworCXdoaWxlIChjdXJyKSB7CisJCS8qIFN0cmluZ3MgYW5kIFJPTSBvYmplY3RzIGFyZSBuZXZl ciBwbGFjZWQgb24gdGhlIGhlYXAgYWxsb2NhdGVkIGxpc3QuICovCisJCURVS19BU1NFUlQoRFVL X0hFQVBIRFJfR0VUX1RZUEUoY3VycikgIT0gRFVLX0hUWVBFX1NUUklORyk7CisJCURVS19BU1NF UlQoIURVS19IRUFQSERSX0hBU19SRUFET05MWShjdXJyKSk7CisKKwkJbmV4dCA9IERVS19IRUFQ SERSX0dFVF9ORVhUKGhlYXAsIGN1cnIpOworCisJCWlmIChEVUtfSEVBUEhEUl9IQVNfUkVBQ0hB QkxFKGN1cnIpKSB7CisJCQkvKgorCQkJICogIFJlYWNoYWJsZSBvYmplY3Q6CisJCQkgKiAgICAt IElmIEZJTkFMSVpBQkxFIC0+IGFjdHVhbGx5IHVucmVhY2hhYmxlIChidXQgbWFya2VkCisJCQkg KiAgICAgIGFydGlmaWNpYWxseSByZWFjaGFibGUpLCBxdWV1ZSB0byBmaW5hbGl6ZV9saXN0Lgor CQkJICogICAgLSBJZiAhRklOQUxJWkFCTEUgYnV0IEZJTkFMSVpFRCAtPiByZXNjdWVkIGFmdGVy CisJCQkgKiAgICAgIGZpbmFsaXplciBleGVjdXRpb24uCisJCQkgKiAgICAtIE90aGVyd2lzZSBq dXN0IGEgbm9ybWFsLCByZWFjaGFibGUgb2JqZWN0LgorCQkJICoKKwkJCSAqICBPYmplY3RzIHdo aWNoIGFyZSBrZXB0IGFyZSBxdWV1ZWQgdG8gaGVhcF9hbGxvY2F0ZWQKKwkJCSAqICB0YWlsICh3 ZSdyZSBlc3NlbnRpYWxseSBmaWx0ZXJpbmcgaGVhcF9hbGxvY2F0ZWQgaW4KKwkJCSAqICBwcmFj dGljZSkuCisJCQkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCkK KwkJCWlmIChEVUtfVU5MSUtFTFkoRFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpBQkxFKGN1cnIpKSkg eworCQkJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19GSU5BTElaRUQoY3VycikpOworCQkJ CURVS19BU1NFUlQoRFVLX0hFQVBIRFJfR0VUX1RZUEUoY3VycikgPT0gRFVLX0hUWVBFX09CSkVD VCk7CisJCQkJRFVLX0REKERVS19ERFBSSU5UKCJzd2VlcDsgcmVhY2hhYmxlLCBmaW5hbGl6YWJs ZSAtLT4gbW92ZSB0byBmaW5hbGl6ZV9saXN0OiAlcCIsICh2b2lkICopIGN1cnIpKTsKKworI2lm IGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJCQkJRFVLX0hFQVBIRFJfUFJF SU5DX1JFRkNPVU5UKGN1cnIpOyAgLyogQnVtcCByZWZjb3VudCBzbyB0aGF0IHJlZnplcm8gbmV2 ZXIgb2NjdXJzIHdoZW4gcGVuZGluZyBhIGZpbmFsaXplciBjYWxsLiAqLworI2VuZGlmCisJCQkJ RFVLX0hFQVBfSU5TRVJUX0lOVE9fRklOQUxJWkVfTElTVChoZWFwLCBjdXJyKTsKKyNpZiBkZWZp bmVkKERVS19VU0VfREVCVUcpCisJCQkJY291bnRfZmluYWxpemUrKzsKKyNlbmRpZgorCQkJfQor CQkJZWxzZQorI2VuZGlmICAvKiBEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUICovCisJCQl7CisJ CQkJaWYgKERVS19VTkxJS0VMWShEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkVEKGN1cnIpKSkgewor CQkJCQlEVUtfQVNTRVJUKCFEVUtfSEVBUEhEUl9IQVNfRklOQUxJWkFCTEUoY3VycikpOworCQkJ CQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9UWVBFKGN1cnIpID09IERVS19IVFlQRV9PQkpF Q1QpOworCisJCQkJCWlmIChmbGFncyAmIERVS19NU19GTEFHX1BPU1RQT05FX1JFU0NVRSkgewor CQkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJzd2VlcDsgcmVhY2hhYmxlLCBmaW5hbGl6ZWQsIGJ1 dCBwb3N0cG9uaW5nIHJlc2N1ZSBkZWNpc2lvbnMgLS0+IGtlZXAgb2JqZWN0ICh3aXRoIEZJTkFM SVpFRCBzZXQpOiAlIWlPIiwgY3VycikpOworCQkJCQkJY291bnRfa2VlcCsrOworCQkJCQl9IGVs c2UgeworCQkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJzd2VlcDsgcmVhY2hhYmxlLCBmaW5hbGl6 ZWQgLS0+IHJlc2N1ZWQgYWZ0ZXIgZmluYWxpemF0aW9uOiAlcCIsICh2b2lkICopIGN1cnIpKTsK KyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQpCisJCQkJCQlEVUtfSEVBUEhE Ul9DTEVBUl9GSU5BTElaRUQoY3Vycik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfREVC VUcpCisJCQkJCQljb3VudF9yZXNjdWUrKzsKKyNlbmRpZgorCQkJCQl9CisJCQkJfSBlbHNlIHsK KwkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJzd2VlcDsgcmVhY2hhYmxlIC0tPiBrZWVwOiAlIWlP IiwgY3VycikpOworCQkJCQljb3VudF9rZWVwKys7CisJCQkJfQorCisJCQkJaWYgKHByZXYgIT0g TlVMTCkgeworCQkJCQlEVUtfQVNTRVJUKGhlYXAtPmhlYXBfYWxsb2NhdGVkICE9IE5VTEwpOwor CQkJCQlEVUtfSEVBUEhEUl9TRVRfTkVYVChoZWFwLCBwcmV2LCBjdXJyKTsKKwkJCQl9IGVsc2Ug eworCQkJCQlEVUtfQVNTRVJUKGhlYXAtPmhlYXBfYWxsb2NhdGVkID09IE5VTEwpOworCQkJCQlo ZWFwLT5oZWFwX2FsbG9jYXRlZCA9IGN1cnI7CisJCQkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9E T1VCTEVfTElOS0VEX0hFQVApCisJCQkJRFVLX0hFQVBIRFJfU0VUX1BSRVYoaGVhcCwgY3Vyciwg cHJldik7CisjZW5kaWYKKwkJCQlEVUtfQVNTRVJUX0hFQVBIRFJfTElOS1MoaGVhcCwgcHJldik7 CisJCQkJRFVLX0FTU0VSVF9IRUFQSERSX0xJTktTKGhlYXAsIGN1cnIpOworCQkJCXByZXYgPSBj dXJyOworCQkJfQorCisJCQkvKgorCQkJICogIFNocmluayBjaGVjayBmb3IgdmFsdWUgc3RhY2tz IGhlcmUuICBXZSdyZSBpbnNpZGUKKwkJCSAqICBtc19wcmV2ZW50X2NvdW50IHByb3RlY3Rpb24g d2hpY2ggcHJldmVudHMgcmVjdXJzaXZlCisJCQkgKiAgbWFyay1hbmQtc3dlZXAgYW5kIHJlZnpl cm8gZmluYWxpemVycywgc28gdGhlcmUgYXJlCisJCQkgKiAgbm8gc2lkZSBlZmZlY3RzIHRoYXQg d291bGQgYWZmZWN0IHRoZSBoZWFwIGxpc3RzLgorCQkJICovCisJCQlpZiAoRFVLX0hFQVBIRFJf SVNfT0JKRUNUKGN1cnIpICYmIERVS19IT0JKRUNUX0lTX1RIUkVBRCgoZHVrX2hvYmplY3QgKikg Y3VycikpIHsKKwkJCQlkdWtfaHRocmVhZCAqdGhyX2N1cnIgPSAoZHVrX2h0aHJlYWQgKikgY3Vy cjsKKwkJCQlEVUtfREQoRFVLX0REUFJJTlQoInZhbHVlIHN0YWNrIHNocmluayBjaGVjayBmb3Ig dGhyZWFkOiAlIU8iLCBjdXJyKSk7CisJCQkJZHVrX3ZhbHN0YWNrX3Nocmlua19jaGVja19ub3Ro cm93KHRocl9jdXJyLCBmbGFncyAmIERVS19NU19GTEFHX0VNRVJHRU5DWSAvKnNudWcqLyk7CisJ CQl9CisKKwkJCURVS19IRUFQSERSX0NMRUFSX1JFQUNIQUJMRShjdXJyKTsKKwkJCS8qIEtlZXAg RklOQUxJWkVEIGlmIHNldCwgdXNlZCBpZiByZXNjdWUgZGVjaXNpb25zIGFyZSBwb3N0cG9uZWQu ICovCisJCQkvKiBLZWVwIEZJTkFMSVpBQkxFIGZvciBvYmplY3RzIG9uIGZpbmFsaXplX2xpc3Qu ICovCisJCQlEVUtfQVNTRVJUKCFEVUtfSEVBUEhEUl9IQVNfUkVBQ0hBQkxFKGN1cnIpKTsKKwkJ fSBlbHNlIHsKKwkJCS8qCisJCQkgKiAgVW5yZWFjaGFibGUgb2JqZWN0OgorCQkJICogICAgLSBJ ZiBGSU5BTElaRUQsIG9iamVjdCB3YXMgZmluYWxpemVkIGJ1dCBub3QKKwkJCSAqICAgICAgcmVz Y3VlZC4gIFRoaXMgZG9lc24ndCBhZmZlY3QgZnJlZWluZy4KKwkJCSAqICAgIC0gT3RoZXJ3aXNl IG5vcm1hbCB1bnJlYWNoYWJsZSBvYmplY3QuCisJCQkgKgorCQkJICogIFRoZXJlJ3Mgbm8gZ3Vh cmQgcHJldmVudGluZyBhIEZJTkFMSVpFRCBvYmplY3QKKwkJCSAqICBmcm9tIGJlaW5nIGZyZWVk IHdoaWxlIGZpbmFsaXplcnMgZXhlY3V0ZTogdGhlCisJCQkgKiAgYXJ0aWZpY2lhbCBmaW5hbGl6 ZV9saXN0IHJlYWNoYWJpbGl0eSByb290cyBjYW4ndAorCQkJICogIGNhdXNlIGFuIGluY29ycmVj dCBmcmVlIGRlY2lzaW9uIChidXQgY2FuIGNhdXNlCisJCQkgKiAgYW4gaW5jb3JyZWN0IHJlc2N1 ZSBkZWNpc2lvbikuCisJCQkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09V TlRJTkcpCisJCQkvKiBOb24temVybyByZWZjb3VudHMgc2hvdWxkIG5vdCBoYXBwZW4gYmVjYXVz ZSB3ZSByZWZjb3VudAorCQkJICogZmluYWxpemUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgd2hp Y2ggc2hvdWxkIGNhbmNlbCBvdXQKKwkJCSAqIHJlZmNvdW50cyAoZXZlbiBmb3IgY3ljbGVzKS4K KwkJCSAqLworCQkJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoY3VycikgPT0g MCk7CisjZW5kaWYKKwkJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19GSU5BTElaQUJMRShj dXJyKSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCQlpZiAoRFVLX0hFQVBIRFJf SEFTX0ZJTkFMSVpFRChjdXJyKSkgeworCQkJCURVS19ERChEVUtfRERQUklOVCgic3dlZXA7IHVu cmVhY2hhYmxlLCBmaW5hbGl6ZWQgLS0+IGZpbmFsaXplZCBvYmplY3Qgbm90IHJlc2N1ZWQ6ICVw IiwgKHZvaWQgKikgY3VycikpOworCQkJfSBlbHNlIHsKKwkJCQlEVUtfREQoRFVLX0REUFJJTlQo InN3ZWVwOyBub3QgcmVhY2hhYmxlIC0tPiBmcmVlOiAlcCIsICh2b2lkICopIGN1cnIpKTsKKwkJ CX0KKworI2VuZGlmCisKKwkJCS8qIE5vdGU6IG9iamVjdCBjYW5ub3QgYmUgYSBmaW5hbGl6YWJs ZSB1bnJlYWNoYWJsZSBvYmplY3QsIGFzCisJCQkgKiB0aGV5IGhhdmUgYmVlbiBtYXJrZWQgdGVt cG9yYXJpbHkgcmVhY2hhYmxlIGZvciB0aGlzIHJvdW5kLAorCQkJICogYW5kIGFyZSBoYW5kbGVk IGFib3ZlLgorCQkJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCQljb3VudF9m cmVlKys7CisjZW5kaWYKKworCQkJLyogV2VhayByZWZzIHNob3VsZCBiZSBoYW5kbGVkIGhlcmUs IGJ1dCBubyB3ZWFrIHJlZnMgZm9yCisJCQkgKiBhbnkgbm9uLXN0cmluZyBvYmplY3RzIGV4aXN0 IHJpZ2h0IG5vdy4KKwkJCSAqLworCisJCQkvKiBGcmVlIG9iamVjdCBhbmQgYWxsIGF1eGlsaWFy eSAobm9uLWhlYXApIGFsbG9jcy4gKi8KKwkJCWR1a19oZWFwX2ZyZWVfaGVhcGhkcl9yYXcoaGVh cCwgY3Vycik7CisJCX0KKworCQljdXJyID0gbmV4dDsKKwl9CisKKwlpZiAocHJldiAhPSBOVUxM KSB7CisJCURVS19IRUFQSERSX1NFVF9ORVhUKGhlYXAsIHByZXYsIE5VTEwpOworCX0KKwlEVUtf QVNTRVJUX0hFQVBIRFJfTElOS1MoaGVhcCwgcHJldik7CisKKyNpZiBkZWZpbmVkKERVS19VU0Vf REVCVUcpCisJRFVLX0QoRFVLX0RQUklOVCgibWFyay1hbmQtc3dlZXAgc3dlZXAgb2JqZWN0cyAo bm9uLXN0cmluZyk6ICVsZCBmcmVlZCwgJWxkIGtlcHQsICVsZCByZXNjdWVkLCAlbGQgcXVldWVk IGZvciBmaW5hbGl6YXRpb24iLAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGNvdW50X2ZyZWUs IChsb25nKSBjb3VudF9rZWVwLCAobG9uZykgY291bnRfcmVzY3VlLCAobG9uZykgY291bnRfZmlu YWxpemUpKTsKKyNlbmRpZgorCSpvdXRfY291bnRfa2VlcCA9IGNvdW50X2tlZXA7Cit9CisKKy8q CisgKiAgTGl0Y2FjaGUgaGVscGVycy4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0xJVENB Q0hFX1NJWkUpCitEVUtfTE9DQUwgdm9pZCBkdWtfX3dpcGVfbGl0Y2FjaGUoZHVrX2hlYXAgKmhl YXApIHsKKwlkdWtfdWludF90IGk7CisJZHVrX2xpdGNhY2hlX2VudHJ5ICplOworCisJZSA9IGhl YXAtPmxpdGNhY2hlOworCWZvciAoaSA9IDA7IGkgPCBEVUtfVVNFX0xJVENBQ0hFX1NJWkU7IGkr KykgeworCQllLT5hZGRyID0gTlVMTDsKKwkJLyogZS0+aCBkb2VzIG5vdCBuZWVkIHRvIGJlIGlu dmFsaWRhdGVkOiB3aGVuIGUtPmFkZHIgaXMKKwkJICogTlVMTCwgZS0+aCBpcyBjb25zaWRlcmVk IGdhcmJhZ2UuCisJCSAqLworCQllKys7CisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNFX0xJVENB Q0hFX1NJWkUgKi8KKworLyoKKyAqICBPYmplY3QgY29tcGFjdGlvbi4KKyAqCisgKiAgQ29tcGFj dGlvbiBpcyBhc3N1bWVkIHRvIG5ldmVyIHRocm93IGFuIGVycm9yLgorICovCisKK0RVS19MT0NB TCBpbnQgZHVrX19wcm90ZWN0ZWRfY29tcGFjdF9vYmplY3QoZHVrX2h0aHJlYWQgKnRociwgdm9p ZCAqdWRhdGEpIHsKKwlkdWtfaG9iamVjdCAqb2JqOworCS8qIFhYWDogZm9yIHRocmVhZHMsIGNv bXBhY3Qgc3RhY2tzPyAqLworCisJRFVLX1VOUkVGKHVkYXRhKTsKKwlvYmogPSBkdWtfa25vd25f aG9iamVjdCh0aHIsIC0xKTsKKwlkdWtfaG9iamVjdF9jb21wYWN0X3Byb3BzKHRociwgb2JqKTsK KwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKK0RVS19MT0NBTCB2 b2lkIGR1a19fY29tcGFjdF9vYmplY3RfbGlzdChkdWtfaGVhcCAqaGVhcCwgZHVrX2h0aHJlYWQg KnRociwgZHVrX2hlYXBoZHIgKnN0YXJ0LCBkdWtfc2l6ZV90ICpwX2NvdW50X2NoZWNrLCBkdWtf c2l6ZV90ICpwX2NvdW50X2NvbXBhY3QsIGR1a19zaXplX3QgKnBfY291bnRfYnl0ZXNfc2F2ZWQp IHsKKyNlbHNlCitEVUtfTE9DQUwgdm9pZCBkdWtfX2NvbXBhY3Rfb2JqZWN0X2xpc3QoZHVrX2hl YXAgKmhlYXAsIGR1a19odGhyZWFkICp0aHIsIGR1a19oZWFwaGRyICpzdGFydCkgeworI2VuZGlm CisJZHVrX2hlYXBoZHIgKmN1cnI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWR1a19z aXplX3Qgb2xkX3NpemUsIG5ld19zaXplOworI2VuZGlmCisJZHVrX2hvYmplY3QgKm9iajsKKwor CURVS19VTlJFRihoZWFwKTsKKworCWN1cnIgPSBzdGFydDsKKwl3aGlsZSAoY3VycikgeworCQlE VUtfREREKERVS19ERERQUklOVCgibWFyay1hbmQtc3dlZXAgY29tcGFjdDogJXAiLCAodm9pZCAq KSBjdXJyKSk7CisKKwkJaWYgKERVS19IRUFQSERSX0dFVF9UWVBFKGN1cnIpICE9IERVS19IVFlQ RV9PQkpFQ1QpIHsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCQlvYmogPSAoZHVrX2hvYmplY3QgKikg Y3VycjsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwkJb2xkX3NpemUgPSBEVUtfSE9C SkVDVF9QX0NPTVBVVEVfU0laRShEVUtfSE9CSkVDVF9HRVRfRVNJWkUob2JqKSwKKwkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob2Jq KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9H RVRfSFNJWkUob2JqKSk7CisjZW5kaWYKKworCQlEVUtfREQoRFVLX0REUFJJTlQoImNvbXBhY3Qg b2JqZWN0OiAlcCIsICh2b2lkICopIG9iaikpOworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgb2Jq KTsKKwkJLyogWFhYOiBkaXNhYmxlIGVycm9yIGhhbmRsZXJzIGZvciBkdXJhdGlvbiBvZiBjb21w YWN0aW9uPyAqLworCQlkdWtfc2FmZV9jYWxsKHRociwgZHVrX19wcm90ZWN0ZWRfY29tcGFjdF9v YmplY3QsIE5VTEwsIDEsIDApOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCQluZXdf c2l6ZSA9IERVS19IT0JKRUNUX1BfQ09NUFVURV9TSVpFKERVS19IT0JKRUNUX0dFVF9FU0laRShv YmopLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNU X0dFVF9BU0laRShvYmopLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERVS19IT0JKRUNUX0dFVF9IU0laRShvYmopKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtf VVNFX0RFQlVHKQorCQkoKnBfY291bnRfY29tcGFjdCkrKzsKKwkJKCpwX2NvdW50X2J5dGVzX3Nh dmVkKSArPSAoZHVrX3NpemVfdCkgKG9sZF9zaXplIC0gbmV3X3NpemUpOworI2VuZGlmCisKKwkg bmV4dDoKKwkJY3VyciA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhlYXAsIGN1cnIpOworI2lmIGRl ZmluZWQoRFVLX1VTRV9ERUJVRykKKwkJKCpwX2NvdW50X2NoZWNrKSsrOworI2VuZGlmCisJfQor fQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2NvbXBhY3Rfb2JqZWN0cyhkdWtfaGVhcCAqaGVhcCkg eworCS8qIFhYWDogd2hpY2ggbGlzdHMgc2hvdWxkIHBhcnRpY2lwYXRlPyAgdG8gYmUgZmluYWxp emVkPyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwlkdWtfc2l6ZV90IGNvdW50X2No ZWNrID0gMDsKKwlkdWtfc2l6ZV90IGNvdW50X2NvbXBhY3QgPSAwOworCWR1a19zaXplX3QgY291 bnRfYnl0ZXNfc2F2ZWQgPSAwOworI2VuZGlmCisKKwlEVUtfREQoRFVLX0REUFJJTlQoImR1a19f Y29tcGFjdF9vYmplY3RzOiAlcCIsICh2b2lkICopIGhlYXApKTsKKworCURVS19BU1NFUlQoaGVh cC0+aGVhcF90aHJlYWQgIT0gTlVMTCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJ ZHVrX19jb21wYWN0X29iamVjdF9saXN0KGhlYXAsIGhlYXAtPmhlYXBfdGhyZWFkLCBoZWFwLT5o ZWFwX2FsbG9jYXRlZCwgJmNvdW50X2NoZWNrLCAmY291bnRfY29tcGFjdCwgJmNvdW50X2J5dGVz X3NhdmVkKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQpCisJZHVrX19j b21wYWN0X29iamVjdF9saXN0KGhlYXAsIGhlYXAtPmhlYXBfdGhyZWFkLCBoZWFwLT5maW5hbGl6 ZV9saXN0LCAmY291bnRfY2hlY2ssICZjb3VudF9jb21wYWN0LCAmY291bnRfYnl0ZXNfc2F2ZWQp OworI2VuZGlmCisjZWxzZQorCWR1a19fY29tcGFjdF9vYmplY3RfbGlzdChoZWFwLCBoZWFwLT5o ZWFwX3RocmVhZCwgaGVhcC0+aGVhcF9hbGxvY2F0ZWQpOworI2lmIGRlZmluZWQoRFVLX1VTRV9G SU5BTElaRVJfU1VQUE9SVCkKKwlkdWtfX2NvbXBhY3Rfb2JqZWN0X2xpc3QoaGVhcCwgaGVhcC0+ aGVhcF90aHJlYWQsIGhlYXAtPmZpbmFsaXplX2xpc3QpOworI2VuZGlmCisjZW5kaWYKKyNpZiBk ZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCURVS19BU1NFUlQoaGVhcC0+cmVm emVyb19saXN0ID09IE5VTEwpOyAgLyogQWx3YXlzIGhhbmRsZWQgdG8gY29tcGxldGlvbiBpbmxp bmUgaW4gREVDUkVGLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJ RFVLX0QoRFVLX0RQUklOVCgibWFyay1hbmQtc3dlZXAgY29tcGFjdCBvYmplY3RzOiAlbGQgY2hl Y2tlZCwgJWxkIGNvbXBhY3Rpb24gYXR0ZW1wdHMsICVsZCBieXRlcyBzYXZlZCBieSBjb21wYWN0 aW9uIiwKKwkgICAgICAgICAgICAgICAgIChsb25nKSBjb3VudF9jaGVjaywgKGxvbmcpIGNvdW50 X2NvbXBhY3QsIChsb25nKSBjb3VudF9ieXRlc19zYXZlZCkpOworI2VuZGlmCit9CisKKy8qCisg KiAgQXNzZXJ0aW9uIGhlbHBlcnMuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJ T05TKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19hc3NlcnRfaGVhcGhkcl9mbGFncyhkdWtfaGVhcCAq aGVhcCkgeworCWR1a19oZWFwaGRyICpoZHI7CisKKwloZHIgPSBoZWFwLT5oZWFwX2FsbG9jYXRl ZDsKKwl3aGlsZSAoaGRyKSB7CisJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19SRUFDSEFC TEUoaGRyKSk7CisJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19URU1QUk9PVChoZHIpKTsK KwkJRFVLX0FTU0VSVCghRFVLX0hFQVBIRFJfSEFTX0ZJTkFMSVpBQkxFKGhkcikpOworCQkvKiBt YXkgaGF2ZSBGSU5BTElaRUQgKi8KKwkJaGRyID0gRFVLX0hFQVBIRFJfR0VUX05FWFQoaGVhcCwg aGRyKTsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCURV S19BU1NFUlQoaGVhcC0+cmVmemVyb19saXN0ID09IE5VTEwpOyAgLyogQWx3YXlzIGhhbmRsZWQg dG8gY29tcGxldGlvbiBpbmxpbmUgaW4gREVDUkVGLiAqLworI2VuZGlmCit9CisKKyNpZiBkZWZp bmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19hc3Nl cnRfdmFsaWRfcmVmY291bnRzKGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2hlYXBoZHIgKmhkciA9 IGhlYXAtPmhlYXBfYWxsb2NhdGVkOworCXdoaWxlIChoZHIpIHsKKwkJLyogQ2Fubm90IHJlYWxs eSBhc3NlcnQgbXVjaCB3LnIudC4gcmVmY291bnRzIG5vdy4gKi8KKworCQlpZiAoRFVLX0hFQVBI RFJfR0VUX1JFRkNPVU5UKGhkcikgPT0gMCAmJgorCQkgICAgRFVLX0hFQVBIRFJfSEFTX0ZJTkFM SVpFRChoZHIpKSB7CisJCQkvKiBBbiBvYmplY3QgbWF5IGJlIGluIGhlYXBfYWxsb2NhdGVkIGxp c3Qgd2l0aCBhIHplcm8KKwkJCSAqIHJlZmNvdW50IGlmIGl0IGhhcyBqdXN0IGJlZW4gZmluYWxp emVkIGFuZCBpcyB3YWl0aW5nCisJCQkgKiB0byBiZSBjb2xsZWN0ZWQgYnkgdGhlIG5leHQgY3lj bGUuCisJCQkgKiAoVGhpcyBkb2Vzbid0IGN1cnJlbnRseSBoYXBwZW4gaG93ZXZlci4pCisJCQkg Ki8KKwkJfSBlbHNlIGlmIChEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoaGRyKSA9PSAwKSB7CisJ CQkvKiBBbiBvYmplY3QgbWF5IGJlIGluIGhlYXBfYWxsb2NhdGVkIGxpc3Qgd2l0aCBhIHplcm8K KwkJCSAqIHJlZmNvdW50IGFsc28gaWYgaXQgaXMgYSB0ZW1wb3Jhcnkgb2JqZWN0IGNyZWF0ZWQK KwkJCSAqIGR1cmluZyBkZWJ1Z2dlciBwYXVzZWQgc3RhdGUuICBJdCB3aWxsIGdldCBjb2xsZWN0 ZWQKKwkJCSAqIGJ5IG1hcmstYW5kLXN3ZWVwIGJhc2VkIG9uIGl0cyByZWFjaGFiaWxpdHkgc3Rh dHVzCisJCQkgKiAocHJlc3VtYWJseSBub3QgcmVhY2hhYmxlIGJlY2F1c2UgcmVmY291bnQgaXMg MCkuCisJCQkgKi8KKwkJfQorCQlEVUtfQVNTRVJUX0RJU0FCTEUoRFVLX0hFQVBIRFJfR0VUX1JF RkNPVU5UKGhkcikgPj0gMCk7ICAvKiBVbnNpZ25lZC4gKi8KKwkJaGRyID0gRFVLX0hFQVBIRFJf R0VUX05FWFQoaGVhcCwgaGRyKTsKKwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fY2xlYXJf YXNzZXJ0X3JlZmNvdW50cyhkdWtfaGVhcCAqaGVhcCkgeworCWR1a19oZWFwaGRyICpjdXJyOwor CWR1a191aW50MzJfdCBpOworCisJZm9yIChjdXJyID0gaGVhcC0+aGVhcF9hbGxvY2F0ZWQ7IGN1 cnIgIT0gTlVMTDsgY3VyciA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhlYXAsIGN1cnIpKSB7CisJ CWN1cnItPmhfYXNzZXJ0X3JlZmNvdW50ID0gMDsKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJ TkFMSVpFUl9TVVBQT1JUKQorCWZvciAoY3VyciA9IGhlYXAtPmZpbmFsaXplX2xpc3Q7IGN1cnIg IT0gTlVMTDsgY3VyciA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhlYXAsIGN1cnIpKSB7CisJCWN1 cnItPmhfYXNzZXJ0X3JlZmNvdW50ID0gMDsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19V U0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCWZvciAoY3VyciA9IGhlYXAtPnJlZnplcm9fbGlzdDsg Y3VyciAhPSBOVUxMOyBjdXJyID0gRFVLX0hFQVBIRFJfR0VUX05FWFQoaGVhcCwgY3VycikpIHsK KwkJY3Vyci0+aF9hc3NlcnRfcmVmY291bnQgPSAwOworCX0KKyNlbmRpZgorCisJZm9yIChpID0g MDsgaSA8IGhlYXAtPnN0X3NpemU7IGkrKykgeworCQlkdWtfaHN0cmluZyAqaDsKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkKKwkJaCA9IERVS19VU0VfSEVBUFBUUl9ERUMx NihoZWFwLT5oZWFwX3VkYXRhLCBoZWFwLT5zdHJ0YWJsZTE2W2ldKTsKKyNlbHNlCisJCWggPSBo ZWFwLT5zdHJ0YWJsZVtpXTsKKyNlbmRpZgorCQl3aGlsZSAoaCAhPSBOVUxMKSB7CisJCQkoKGR1 a19oZWFwaGRyICopIGgpLT5oX2Fzc2VydF9yZWZjb3VudCA9IDA7CisJCQloID0gaC0+aGRyLmhf bmV4dDsKKwkJfQorCX0KK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19jaGVja19yZWZjb3VudF9o ZWFwaGRyKGR1a19oZWFwaGRyICpoZHIpIHsKKwlkdWtfYm9vbF90IGNvdW50X29rOworCWR1a19z aXplX3QgZXhwZWN0X3JlZmM7CisKKwkvKiBUaGUgcmVmY291bnQgY2hlY2sgb25seSBtYWtlcyBz ZW5zZSBmb3IgcmVhY2hhYmxlIG9iamVjdHMgb24KKwkgKiBoZWFwX2FsbG9jYXRlZCBvciBzdHJp bmcgdGFibGUsIGFmdGVyIHRoZSBzd2VlcCBwaGFzZS4gIFByaW9yIHRvCisJICogc3dlZXAgcGhh c2UgcmVmY291bnRzIHdpbGwgaW5jbHVkZSByZWZlcmVuY2VzIHRoYXQgYXJlIG5vdCB2aXNpYmxl CisJICogdmlhIHJlYWNoYWJpbGl0eSByb290cy4KKwkgKgorCSAqIEJlY2F1c2Ugd2UncmUgY2Fs bGVkIGFmdGVyIHRoZSBzd2VlcCBwaGFzZSwgYWxsIGhlYXAgb2JqZWN0cyBvbgorCSAqIGhlYXBf YWxsb2NhdGVkIGFyZSByZWFjaGFibGUuICBSRUFDSEFCTEUgZmxhZ3MgaGF2ZSBhbHJlYWR5IGJl ZW4KKwkgKiBjbGVhcmVkIHNvIHdlIGNhbid0IGNoZWNrIHRoZW0uCisJICovCisKKwkvKiBST00g b2JqZWN0cyBoYXZlIGludGVudGlvbmFsbHkgaW5jb3JyZWN0IHJlZmNvdW50ICgxKSwgYnV0IHdl IHdvbid0CisJICogY2hlY2sgdGhlbS4KKwkgKi8KKwlEVUtfQVNTRVJUKCFEVUtfSEVBUEhEUl9I QVNfUkVBRE9OTFkoaGRyKSk7CisKKwlleHBlY3RfcmVmYyA9IGhkci0+aF9hc3NlcnRfcmVmY291 bnQ7CisJaWYgKERVS19IRUFQSERSX0lTX1NUUklORyhoZHIpICYmIERVS19IU1RSSU5HX0hBU19Q SU5ORURfTElURVJBTCgoZHVrX2hzdHJpbmcgKikgaGRyKSkgeworCQlleHBlY3RfcmVmYysrOwor CX0KKwljb3VudF9vayA9ICgoZHVrX3NpemVfdCkgRFVLX0hFQVBIRFJfR0VUX1JFRkNPVU5UKGhk cikgPT0gZXhwZWN0X3JlZmMpOworCWlmICghY291bnRfb2spIHsKKwkJRFVLX0QoRFVLX0RQUklO VCgicmVmY291bnQgbWlzbWF0Y2ggZm9yOiAlcDogaGVhZGVyPSVsZCBjb3VudGVkPSVsZCAtLT4g JSFpTyIsCisJCSAgICAgICAgICAgICAgICAgKHZvaWQgKikgaGRyLCAobG9uZykgRFVLX0hFQVBI RFJfR0VUX1JFRkNPVU5UKGhkciksCisJCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhkci0+aF9h c3NlcnRfcmVmY291bnQsIGhkcikpOworCQlEVUtfQVNTRVJUKDApOworCX0KK30KKworRFVLX0xP Q0FMIHZvaWQgZHVrX19jaGVja19hc3NlcnRfcmVmY291bnRzKGR1a19oZWFwICpoZWFwKSB7CisJ ZHVrX2hlYXBoZHIgKmN1cnI7CisJZHVrX3VpbnQzMl90IGk7CisKKwlmb3IgKGN1cnIgPSBoZWFw LT5oZWFwX2FsbG9jYXRlZDsgY3VyciAhPSBOVUxMOyBjdXJyID0gRFVLX0hFQVBIRFJfR0VUX05F WFQoaGVhcCwgY3VycikpIHsKKwkJZHVrX19jaGVja19yZWZjb3VudF9oZWFwaGRyKGN1cnIpOwor CX0KKyNpZiBkZWZpbmVkKERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQpCisJZm9yIChjdXJyID0g aGVhcC0+ZmluYWxpemVfbGlzdDsgY3VyciAhPSBOVUxMOyBjdXJyID0gRFVLX0hFQVBIRFJfR0VU X05FWFQoaGVhcCwgY3VycikpIHsKKwkJZHVrX19jaGVja19yZWZjb3VudF9oZWFwaGRyKGN1cnIp OworCX0KKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IGhlYXAtPnN0X3NpemU7IGkrKykgewor CQlkdWtfaHN0cmluZyAqaDsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkK KwkJaCA9IERVS19VU0VfSEVBUFBUUl9ERUMxNihoZWFwLT5oZWFwX3VkYXRhLCBoZWFwLT5zdHJ0 YWJsZTE2W2ldKTsKKyNlbHNlCisJCWggPSBoZWFwLT5zdHJ0YWJsZVtpXTsKKyNlbmRpZgorCQl3 aGlsZSAoaCAhPSBOVUxMKSB7CisJCQlkdWtfX2NoZWNrX3JlZmNvdW50X2hlYXBoZHIoKGR1a19o ZWFwaGRyICopIGgpOworCQkJaCA9IGgtPmhkci5oX25leHQ7CisJCX0KKwl9Cit9CisjZW5kaWYg IC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf TElUQ0FDSEVfU0laRSkKK0RVS19MT0NBTCB2b2lkIGR1a19fYXNzZXJ0X2xpdGNhY2hlX251bGxz KGR1a19oZWFwICpoZWFwKSB7CisJZHVrX3VpbnRfdCBpOworCWR1a19saXRjYWNoZV9lbnRyeSAq ZTsKKworCWUgPSBoZWFwLT5saXRjYWNoZTsKKwlmb3IgKGkgPSAwOyBpIDwgRFVLX1VTRV9MSVRD QUNIRV9TSVpFOyBpKyspIHsKKwkJLyogRW50cnkgYWRkcmVzc2VzIHdlcmUgTlVMTGVkIGJlZm9y ZSBtYXJrLWFuZC1zd2VlcCwgY2hlY2sKKwkJICogdGhhdCB0aGV5J3JlIHN0aWxsIE5VTEwgYWZ0 ZXJ3YXJkcyB0byBlbnN1cmUgbm8gcG9pbnRlcnMKKwkJICogd2VyZSByZWNvcmRlZCB0aHJvdWdo IGFueSBzaWRlIGVmZmVjdHMuCisJCSAqLworCQlEVUtfQVNTRVJUKGUtPmFkZHIgPT0gTlVMTCk7 CisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNFX0xJVENBQ0hFX1NJWkUgKi8KKyNlbmRpZiAgLyog RFVLX1VTRV9BU1NFUlRJT05TICovCisKKy8qCisgKiAgU3RhdHMgZHVtcC4KKyAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19kdW1wX3N0YXRzKGR1 a19oZWFwICpoZWFwKSB7CisJRFVLX0QoRFVLX0RQUklOVCgic3RhdHMgZXhlY3V0b3I6IG9wY29k ZXM9JWxkLCBpbnRlcnJ1cHQ9JWxkLCB0aHJvdz0lbGQiLAorCSAgICAgICAgICAgICAgICAgKGxv bmcpIGhlYXAtPnN0YXRzX2V4ZWNfb3Bjb2RlcywgKGxvbmcpIGhlYXAtPnN0YXRzX2V4ZWNfaW50 ZXJydXB0LAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX2V4ZWNfdGhyb3cp KTsKKwlEVUtfRChEVUtfRFBSSU5UKCJzdGF0cyBjYWxsOiBhbGw9JWxkLCB0YWlsY2FsbD0lbGQs IGVjbWF0b2VjbWE9JWxkIiwKKwkgICAgICAgICAgICAgICAgIChsb25nKSBoZWFwLT5zdGF0c19j YWxsX2FsbCwgKGxvbmcpIGhlYXAtPnN0YXRzX2NhbGxfdGFpbGNhbGwsCisJICAgICAgICAgICAg ICAgICAobG9uZykgaGVhcC0+c3RhdHNfY2FsbF9lY21hdG9lY21hKSk7CisJRFVLX0QoRFVLX0RQ UklOVCgic3RhdHMgc2FmZWNhbGw6IGFsbD0lbGQsIG5vdGhyb3c9JWxkLCB0aHJvdz0lbGQiLAor CSAgICAgICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX3NhZmVjYWxsX2FsbCwgKGxvbmcp IGhlYXAtPnN0YXRzX3NhZmVjYWxsX25vdGhyb3csCisJICAgICAgICAgICAgICAgICAobG9uZykg aGVhcC0+c3RhdHNfc2FmZWNhbGxfdGhyb3cpKTsKKwlEVUtfRChEVUtfRFBSSU5UKCJzdGF0cyBt YXJrLWFuZC1zd2VlcDogdHJ5X2NvdW50PSVsZCwgc2tpcF9jb3VudD0lbGQsIGVtZXJnZW5jeV9j b3VudD0lbGQiLAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX21zX3RyeV9j b3VudCwgKGxvbmcpIGhlYXAtPnN0YXRzX21zX3NraXBfY291bnQsCisJICAgICAgICAgICAgICAg ICAobG9uZykgaGVhcC0+c3RhdHNfbXNfZW1lcmdlbmN5X2NvdW50KSk7CisJRFVLX0QoRFVLX0RQ UklOVCgic3RhdHMgc3RyaW5ndGFibGU6IGludGVybl9oaXQ9JWxkLCBpbnRlcm5fbWlzcz0lbGQs ICIKKwkgICAgICAgICAgICAgICAgICJyZXNpemVfY2hlY2s9JWxkLCByZXNpemVfZ3Jvdz0lbGQs IHJlc2l6ZV9zaHJpbms9JWxkLCAiCisJICAgICAgICAgICAgICAgICAibGl0Y2FjaGVfaGl0PSVs ZCwgbGl0Y2FjaGVfbWlzcz0lbGQsIGxpdGNhY2hlX3Bpbj0lbGQiLAorCSAgICAgICAgICAgICAg ICAgKGxvbmcpIGhlYXAtPnN0YXRzX3N0cnRhYl9pbnRlcm5faGl0LCAobG9uZykgaGVhcC0+c3Rh dHNfc3RydGFiX2ludGVybl9taXNzLAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0 YXRzX3N0cnRhYl9yZXNpemVfY2hlY2ssIChsb25nKSBoZWFwLT5zdGF0c19zdHJ0YWJfcmVzaXpl X2dyb3csCisJICAgICAgICAgICAgICAgICAobG9uZykgaGVhcC0+c3RhdHNfc3RydGFiX3Jlc2l6 ZV9zaHJpbmssIChsb25nKSBoZWFwLT5zdGF0c19zdHJ0YWJfbGl0Y2FjaGVfaGl0LAorCSAgICAg ICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX3N0cnRhYl9saXRjYWNoZV9taXNzLCAobG9u ZykgaGVhcC0+c3RhdHNfc3RydGFiX2xpdGNhY2hlX3BpbikpOworCURVS19EKERVS19EUFJJTlQo InN0YXRzIG9iamVjdDogcmVhbGxvY19wcm9wcz0lbGQsIGFiYW5kb25fYXJyYXk9JWxkIiwKKwkg ICAgICAgICAgICAgICAgIChsb25nKSBoZWFwLT5zdGF0c19vYmplY3RfcmVhbGxvY19wcm9wcywg KGxvbmcpIGhlYXAtPnN0YXRzX29iamVjdF9hYmFuZG9uX2FycmF5KSk7CisJRFVLX0QoRFVLX0RQ UklOVCgic3RhdHMgZ2V0b3ducHJvcGRlc2M6IGNvdW50PSVsZCwgaGl0PSVsZCwgbWlzcz0lbGQi LAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX2dldG93bnByb3BkZXNjX2Nv dW50LCAobG9uZykgaGVhcC0+c3RhdHNfZ2V0b3ducHJvcGRlc2NfaGl0LAorCSAgICAgICAgICAg ICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX2dldG93bnByb3BkZXNjX21pc3MpKTsKKwlEVUtfRChE VUtfRFBSSU5UKCJzdGF0cyBnZXRwcm9wZGVzYzogY291bnQ9JWxkLCBoaXQ9JWxkLCBtaXNzPSVs ZCIsCisJICAgICAgICAgICAgICAgICAobG9uZykgaGVhcC0+c3RhdHNfZ2V0cHJvcGRlc2NfY291 bnQsIChsb25nKSBoZWFwLT5zdGF0c19nZXRwcm9wZGVzY19oaXQsCisJICAgICAgICAgICAgICAg ICAobG9uZykgaGVhcC0+c3RhdHNfZ2V0cHJvcGRlc2NfbWlzcykpOworCURVS19EKERVS19EUFJJ TlQoInN0YXRzIGdldHByb3A6IGFsbD0lbGQsIGFycmF5aWR4PSVsZCwgYnVmb2JqaWR4PSVsZCwg IgorCSAgICAgICAgICAgICAgICAgImJ1ZmZlcmlkeD0lbGQsIGJ1ZmZlcmxlbj0lbGQsIHN0cmlu Z2lkeD0lbGQsIHN0cmluZ2xlbj0lbGQsICIKKwkgICAgICAgICAgICAgICAgICJwcm94eT0lbGQs IGFyZ3VtZW50cz0lbGQiLAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX2dl dHByb3BfYWxsLCAobG9uZykgaGVhcC0+c3RhdHNfZ2V0cHJvcF9hcnJheWlkeCwKKwkgICAgICAg ICAgICAgICAgIChsb25nKSBoZWFwLT5zdGF0c19nZXRwcm9wX2J1Zm9iamlkeCwgKGxvbmcpIGhl YXAtPnN0YXRzX2dldHByb3BfYnVmZmVyaWR4LAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGhl YXAtPnN0YXRzX2dldHByb3BfYnVmZmVybGVuLCAobG9uZykgaGVhcC0+c3RhdHNfZ2V0cHJvcF9z dHJpbmdpZHgsCisJICAgICAgICAgICAgICAgICAobG9uZykgaGVhcC0+c3RhdHNfZ2V0cHJvcF9z dHJpbmdsZW4sIChsb25nKSBoZWFwLT5zdGF0c19nZXRwcm9wX3Byb3h5LAorCSAgICAgICAgICAg ICAgICAgKGxvbmcpIGhlYXAtPnN0YXRzX2dldHByb3BfYXJndW1lbnRzKSk7CisJRFVLX0QoRFVL X0RQUklOVCgic3RhdHMgcHV0cHJvcDogYWxsPSVsZCwgYXJyYXlpZHg9JWxkLCBidWZvYmppZHg9 JWxkLCAiCisJICAgICAgICAgICAgICAgICAiYnVmZmVyaWR4PSVsZCwgcHJveHk9JWxkIiwKKwkg ICAgICAgICAgICAgICAgIChsb25nKSBoZWFwLT5zdGF0c19wdXRwcm9wX2FsbCwgKGxvbmcpIGhl YXAtPnN0YXRzX3B1dHByb3BfYXJyYXlpZHgsCisJICAgICAgICAgICAgICAgICAobG9uZykgaGVh cC0+c3RhdHNfcHV0cHJvcF9idWZvYmppZHgsIChsb25nKSBoZWFwLT5zdGF0c19wdXRwcm9wX2J1 ZmZlcmlkeCwKKwkgICAgICAgICAgICAgICAgIChsb25nKSBoZWFwLT5zdGF0c19wdXRwcm9wX3By b3h5KSk7CisJRFVLX0QoRFVLX0RQUklOVCgic3RhdHMgZ2V0dmFyOiBhbGw9JWxkIiwKKwkgICAg ICAgICAgICAgICAgIChsb25nKSBoZWFwLT5zdGF0c19nZXR2YXJfYWxsKSk7CisJRFVLX0QoRFVL X0RQUklOVCgic3RhdHMgcHV0dmFyOiBhbGw9JWxkIiwKKwkgICAgICAgICAgICAgICAgIChsb25n KSBoZWFwLT5zdGF0c19wdXR2YXJfYWxsKSk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUcg Ki8KKworLyoKKyAqICBNYWluIG1hcmstYW5kLXN3ZWVwIGZ1bmN0aW9uLgorICoKKyAqICAnZmxh Z3MnIHJlcHJlc2VudHMgdGhlIGZlYXR1cmVzIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiAgVGhl IGN1cnJlbnQKKyAqICBoZWFwLT5tc19iYXNlX2ZsYWdzIGlzIE9SZWQgYXV0b21hdGljYWxseSBp bnRvIHRoZSBmbGFnczsgdGhlIGJhc2UgZmxhZ3MKKyAqICBtYXNrIHR5cGljYWxseSBwcmV2ZW50 cyBjZXJ0YWluIG1hcmstYW5kLXN3ZWVwIG9wZXJhdGlvbiB0byBhdm9pZCB0cm91YmxlLgorICov CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFwX21hcmtfYW5kX3N3ZWVwKGR1a19oZWFwICpo ZWFwLCBkdWtfc21hbGxfdWludF90IGZsYWdzKSB7CisJZHVrX3NpemVfdCBjb3VudF9rZWVwX29i ajsKKwlkdWtfc2l6ZV90IGNvdW50X2tlZXBfc3RyOworI2lmIGRlZmluZWQoRFVLX1VTRV9WT0xV TlRBUllfR0MpCisJZHVrX3NpemVfdCB0bXA7CisjZW5kaWYKKworCURVS19TVEFUU19JTkMoaGVh cCwgc3RhdHNfbXNfdHJ5X2NvdW50KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJaWYg KGZsYWdzICYgRFVLX01TX0ZMQUdfRU1FUkdFTkNZKSB7CisJCURVS19TVEFUU19JTkMoaGVhcCwg c3RhdHNfbXNfZW1lcmdlbmN5X2NvdW50KTsKKwl9CisjZW5kaWYKKworCS8qIElmIGRlYnVnZ2Vy IGlzIHBhdXNlZCwgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisJ ICogVGhpcyBpcyBhY2hpZXZlZCBieSBidW1waW5nIG1zX3ByZXZlbnRfY291bnQgd2hlbiBiZWNv bWluZyBwYXVzZWQuCisJICovCisJRFVLX0FTU0VSVCghRFVLX0hFQVBfSEFTX0RFQlVHR0VSX1BB VVNFRChoZWFwKSB8fCBoZWFwLT5tc19wcmV2ZW50X2NvdW50ID4gMCk7CisKKwkvKiBQcmV2ZW50 aW9uL3JlY3Vyc2lvbiBjaGVjayBhcyBzb29uIGFzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgbWF5CisJ ICogYmUgY2FsbGVkIGEgbnVtYmVyIG9mIHRpbWVzIHdoZW4gdm9sdW50YXJ5IG1hcmstYW5kLXN3 ZWVwIGlzCisJICogcGVuZGluZy4KKwkgKi8KKwlpZiAoaGVhcC0+bXNfcHJldmVudF9jb3VudCAh PSAwKSB7CisJCURVS19ERChEVUtfRERQUklOVCgicmVqZWN0IHJlY3Vyc2l2ZSBtYXJrLWFuZC1z d2VlcCIpKTsKKwkJRFVLX1NUQVRTX0lOQyhoZWFwLCBzdGF0c19tc19za2lwX2NvdW50KTsKKwkJ cmV0dXJuOworCX0KKwlEVUtfQVNTRVJUKGhlYXAtPm1zX3J1bm5pbmcgPT0gMCk7ICAvKiBtc19w cmV2ZW50X2NvdW50IGlzIGJ1bXBlZCB3aGVuIG1zX3J1bm5pbmcgaXMgc2V0ICovCisKKwkvKiBI ZWFwX3RocmVhZCBpcyB1c2VkIGR1cmluZyBtYXJrLWFuZC1zd2VlcCBmb3IgcmVmY291bnQgZmlu YWxpemF0aW9uCisJICogKGl0J3MgYWxzbyB1c2VkIGZvciBmaW5hbGl6ZXIgZXhlY3V0aW9uIG9u Y2UgbWFyay1hbmQtc3dlZXAgaXMKKwkgKiBjb21wbGV0ZSkuICBIZWFwIGFsbG9jYXRpb24gY29k ZSBlbnN1cmVzIGhlYXBfdGhyZWFkIGlzIHNldCBhbmQKKwkgKiBwcm9wZXJseSBpbml0aWFsaXpl ZCBiZWZvcmUgc2V0dGluZyBtc19wcmV2ZW50X2NvdW50IHRvIDAuCisJICovCisJRFVLX0FTU0VS VChoZWFwLT5oZWFwX3RocmVhZCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGhlYXAtPmhlYXBfdGhy ZWFkLT52YWxzdGFjayAhPSBOVUxMKTsKKworCURVS19EKERVS19EUFJJTlQoImdhcmJhZ2UgY29s bGVjdCAobWFyay1hbmQtc3dlZXApIHN0YXJ0aW5nLCByZXF1ZXN0ZWQgZmxhZ3M6IDB4JTA4bHgs IGVmZmVjdGl2ZSBmbGFnczogMHglMDhseCIsCisJICAgICAgICAgICAgICAgICAodW5zaWduZWQg bG9uZykgZmxhZ3MsICh1bnNpZ25lZCBsb25nKSAoZmxhZ3MgfCBoZWFwLT5tc19iYXNlX2ZsYWdz KSkpOworCisJZmxhZ3MgfD0gaGVhcC0+bXNfYmFzZV9mbGFnczsKKyNpZiBkZWZpbmVkKERVS19V U0VfRklOQUxJWkVSX1NVUFBPUlQpCisJaWYgKGhlYXAtPmZpbmFsaXplX2xpc3QgIT0gTlVMTCkg eworCQlmbGFncyB8PSBEVUtfTVNfRkxBR19QT1NUUE9ORV9SRVNDVUU7CisJfQorI2VuZGlmCisK KwkvKgorCSAqICBBc3NlcnRpb25zIGJlZm9yZQorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNF X0FTU0VSVElPTlMpCisJRFVLX0FTU0VSVChoZWFwLT5tc19wcmV2ZW50X2NvdW50ID09IDApOwor CURVS19BU1NFUlQoaGVhcC0+bXNfcnVubmluZyA9PSAwKTsKKwlEVUtfQVNTRVJUKCFEVUtfSEVB UF9IQVNfREVCVUdHRVJfUEFVU0VEKGhlYXApKTsKKwlEVUtfQVNTRVJUKCFEVUtfSEVBUF9IQVNf TUFSS0FORFNXRUVQX1JFQ0xJTUlUX1JFQUNIRUQoaGVhcCkpOworCURVS19BU1NFUlQoaGVhcC0+ bXNfcmVjdXJzaW9uX2RlcHRoID09IDApOworCWR1a19fYXNzZXJ0X2hlYXBoZHJfZmxhZ3MoaGVh cCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwkvKiBOb3RlOiBo ZWFwLT5yZWZ6ZXJvX2ZyZWVfcnVubmluZyBtYXkgYmUgdHJ1ZTsgYSByZWZjb3VudAorCSAqIGZp bmFsaXplciBtYXkgdHJpZ2dlciBhIG1hcmstYW5kLXN3ZWVwLgorCSAqLworCWR1a19fYXNzZXJ0 X3ZhbGlkX3JlZmNvdW50cyhoZWFwKTsKKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09V TlRJTkcgKi8KKyNlbmRpZiAgLyogRFVLX1VTRV9BU1NFUlRJT05TICovCisKKwkvKgorCSAqICBC ZWdpbgorCSAqLworCisJRFVLX0FTU0VSVChoZWFwLT5tc19wcmV2ZW50X2NvdW50ID09IDApOwor CURVS19BU1NFUlQoaGVhcC0+bXNfcnVubmluZyA9PSAwKTsKKwloZWFwLT5tc19wcmV2ZW50X2Nv dW50ID0gMTsKKwloZWFwLT5tc19ydW5uaW5nID0gMTsKKworCS8qCisJICogIEZyZWUgYWN0aXZh dGlvbi9jYXRjaGVyIGZyZWVsaXN0cyBvbiBldmVyeSBtYXJrLWFuZC1zd2VlcCBmb3Igbm93Lgor CSAqICBUaGlzIGlzIGFuIGluaXRpYWwgcm91Z2ggZHJhZnQ7IGlkZWFsbHkgd2UnZCBrZWVwIGNv dW50IG9mIHRoZQorCSAqICBmcmVlbGlzdCBzaXplIGFuZCBmcmVlIG9ubHkgZXhjZXNzIGVudHJp ZXMuCisJICovCisKKwlEVUtfRChEVUtfRFBSSU5UKCJmcmVlaW5nIHRlbXBvcmFyeSBmcmVlbGlz dHMiKSk7CisJZHVrX2hlYXBfZnJlZV9mcmVlbGlzdHMoaGVhcCk7CisKKwkvKgorCSAqICBNYXJr IHJvb3RzLCBob3BpbmcgdGhhdCByZWN1cnNpb24gbGltaXQgaXMgbm90IG5vcm1hbGx5IGhpdC4K KwkgKiAgSWYgcmVjdXJzaW9uIGxpbWl0IGlzIGhpdCwgcnVuIGFkZGl0aW9uYWwgcmVhY2hhYmls aXR5IHJvdW5kcworCSAqICBzdGFydGluZyBmcm9tICJ0ZW1wcm9vdHMiIHVudGlsIG1hcmtpbmcg aXMgY29tcGxldGUuCisJICoKKwkgKiAgTWFya2luZyBoYXBwZW5zIGluIHR3byBwaGFzZXM6IGZp cnN0IHdlIG1hcmsgYWN0dWFsIHJlYWNoYWJpbGl0eQorCSAqICByb290cyAoYW5kIHJ1biAidGVt cHJvb3RzIiB0byBjb21wbGV0ZSB0aGUgcHJvY2VzcykuICBUaGVuIHdlCisJICogIGNoZWNrIHdo aWNoIG9iamVjdHMgYXJlIHVucmVhY2hhYmxlIGFuZCBhcmUgZmluYWxpemFibGU7IHN1Y2gKKwkg KiAgb2JqZWN0cyBhcmUgbWFya2VkIGFzIEZJTkFMSVpBQkxFIGFuZCBtYXJrZWQgYXMgcmVhY2hh YmlsaXR5CisJICogIChhbmQgInRlbXByb290cyIgaXMgcnVuIGFnYWluIHRvIGNvbXBsZXRlIHRo ZSBwcm9jZXNzKS4KKwkgKgorCSAqICBUaGUgaGVhcCBmaW5hbGl6ZV9saXN0IG11c3QgYWxzbyBi ZSBtYXJrZWQgYXMgYSByZWFjaGFiaWxpdHkgcm9vdC4KKwkgKiAgVGhlcmUgbWF5IGJlIG9iamVj dHMgb24gdGhlIGxpc3QgZnJvbSBhIHByZXZpb3VzIHJvdW5kIGlmIHRoZQorCSAqICBwcmV2aW91 cyBydW4gaGFkIGZpbmFsaXplciBza2lwIGZsYWcuCisJICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfQVNTRVJUSU9OUykgJiYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwlk dWtfX2NsZWFyX2Fzc2VydF9yZWZjb3VudHMoaGVhcCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKERV S19VU0VfTElUQ0FDSEVfU0laRSkKKwlkdWtfX3dpcGVfbGl0Y2FjaGUoaGVhcCk7CisjZW5kaWYK KwlkdWtfX21hcmtfcm9vdHNfaGVhcChoZWFwKTsgICAgICAgICAgICAgICAvKiBNYXJrIG1haW4g cmVhY2hhYmlsaXR5IHJvb3RzLiAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09V TlRJTkcpCisJRFVLX0FTU0VSVChoZWFwLT5yZWZ6ZXJvX2xpc3QgPT0gTlVMTCk7ICAgLyogQWx3 YXlzIGhhbmRsZWQgdG8gY29tcGxldGlvbiBpbmxpbmUgaW4gREVDUkVGLiAqLworI2VuZGlmCisJ ZHVrX19tYXJrX3RlbXByb290c19ieV9oZWFwX3NjYW4oaGVhcCk7ICAgLyogVGVtcHJvb3RzLiAq LworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorCWR1a19fbWFya19m aW5hbGl6YWJsZShoZWFwKTsgICAgICAgICAgICAgIC8qIE1hcmsgZmluYWxpemFibGUgYXMgcmVh Y2hhYmlsaXR5IHJvb3RzLiAqLworCWR1a19fbWFya19maW5hbGl6ZV9saXN0KGhlYXApOyAgICAg ICAgICAgIC8qIE1hcmsgZmluYWxpemVyIHdvcmsgbGlzdCBhcyByZWFjaGFiaWxpdHkgcm9vdHMu ICovCisjZW5kaWYKKwlkdWtfX21hcmtfdGVtcHJvb3RzX2J5X2hlYXBfc2NhbihoZWFwKTsgICAv KiBUZW1wcm9vdHMuICovCisKKwkvKgorCSAqICBTd2VlcCBnYXJiYWdlIGFuZCByZW1vdmUgbWFy a2luZyBmbGFncywgYW5kIG1vdmUgb2JqZWN0cyB3aXRoCisJICogIGZpbmFsaXplcnMgdG8gdGhl IGZpbmFsaXplciB3b3JrIGxpc3QuCisJICoKKwkgKiAgT2JqZWN0cyB0byBiZSBzd2VwdCBuZWVk IHRvIGdldCB0aGVpciByZWZjb3VudHMgZmluYWxpemVkIGJlZm9yZQorCSAqICB0aGV5IGFyZSBz d2VwdC4gIEluIG90aGVyIHdvcmRzLCB0aGVpciB0YXJnZXQgb2JqZWN0IHJlZmNvdW50cworCSAq ICBuZWVkIHRvIGJlIGRlY3JlYXNlZC4gIFRoaXMgaGFzIHRvIGJlIGRvbmUgYmVmb3JlIGZyZWVp bmcgYW55CisJICogIG9iamVjdHMgdG8gYXZvaWQgZGVjcmVmJ2luZyBkYW5nbGluZyBwb2ludGVy cyAod2hpY2ggbWF5IGhhcHBlbgorCSAqICBldmVuIHdpdGhvdXQgYnVncywgZS5nLiB3aXRoIHJl ZmVyZW5jZSBsb29wcykKKwkgKgorCSAqICBCZWNhdXNlIHN0cmluZ3MgZG9uJ3QgcG9pbnQgdG8g b3RoZXIgaGVhcCBvYmplY3RzLCBzaW1pbGFyCisJICogIGZpbmFsaXphdGlvbiBpcyBub3QgbmVj ZXNzYXJ5IGZvciBzdHJpbmdzLgorCSAqLworCisJLyogWFhYOiBtb3JlIGVtZXJnZW5jeSBiZWhh dmlvciwgZS5nLiBmaW5kIHNtYWxsZXIgaGFzaCBzaXplcyBldGMgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJZHVrX19maW5hbGl6ZV9yZWZjb3VudHMoaGVh cCk7CisjZW5kaWYKKwlkdWtfX3N3ZWVwX2hlYXAoaGVhcCwgZmxhZ3MsICZjb3VudF9rZWVwX29i aik7CisJZHVrX19zd2VlcF9zdHJpbmd0YWJsZShoZWFwLCAmY291bnRfa2VlcF9zdHIpOworI2lm IGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKSAmJiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNF X0NPVU5USU5HKQorCWR1a19fY2hlY2tfYXNzZXJ0X3JlZmNvdW50cyhoZWFwKTsKKyNlbmRpZgor I2lmIGRlZmluZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJRFVLX0FTU0VSVChoZWFw LT5yZWZ6ZXJvX2xpc3QgPT0gTlVMTCk7ICAgLyogQWx3YXlzIGhhbmRsZWQgdG8gY29tcGxldGlv biBpbmxpbmUgaW4gREVDUkVGLiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFM SVpFUl9TVVBQT1JUKQorCWR1a19fY2xlYXJfZmluYWxpemVfbGlzdF9mbGFncyhoZWFwKTsKKyNl bmRpZgorCisJLyoKKwkgKiAgT2JqZWN0IGNvbXBhY3Rpb24gKGVtZXJnZW5jeSBvbmx5KS4KKwkg KgorCSAqICBPYmplY3QgY29tcGFjdGlvbiBpcyBhIHNlcGFyYXRlIHN0ZXAgYWZ0ZXIgc3dlZXBp bmcsIGFzIHRoZXJlIGlzCisJICogIG1vcmUgZnJlZSBtZW1vcnkgZm9yIGl0IHRvIHdvcmsgd2l0 aC4gIEFsc28sIGN1cnJlbnRseSBjb21wYWN0aW9uCisJICogIG1heSBpbnNlcnQgbmV3IG9iamVj dHMgaW50byB0aGUgaGVhcCBhbGxvY2F0ZWQgbGlzdCBhbmQgdGhlIHN0cmluZworCSAqICB0YWJs ZSB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGRvIGR1cmluZyBhIHN3ZWVwICh0aGUgcmVhY2hhYmls aXR5CisJICogIGZsYWdzIG9mIHN1Y2ggb2JqZWN0cyB3b3VsZCBiZSBpbmNvcnJlY3QpLiAgVGhl IG9iamVjdHMgaW5zZXJ0ZWQKKwkgKiAgYXJlIGN1cnJlbnRseToKKwkgKgorCSAqICAgIC0gYSB0 ZW1wb3JhcnkgZHVrX2hidWZmZXIgZm9yIGEgbmV3IHByb3BlcnRpZXMgYWxsb2NhdGlvbgorCSAq ICAgIC0gaWYgYXJyYXkgcGFydCBpcyBhYmFuZG9uZWQsIHN0cmluZyBrZXlzIGFyZSBpbnRlcm5l ZAorCSAqCisJICogIFRoZSBvYmplY3QgaW5zZXJ0aW9ucyBnbyB0byB0aGUgZnJvbnQgb2YgdGhl IGxpc3QsIHNvIHRoZXkgZG8gbm90CisJICogIGNhdXNlIGFuIGluZmluaXRlIGxvb3AgKHRoZXkg YXJlIG5vdCBjb21wYWN0ZWQpLgorCSAqLworCisJaWYgKChmbGFncyAmIERVS19NU19GTEFHX0VN RVJHRU5DWSkgJiYKKwkgICAgIShmbGFncyAmIERVS19NU19GTEFHX05PX09CSkVDVF9DT01QQUNU SU9OKSkgeworCQlkdWtfX2NvbXBhY3Rfb2JqZWN0cyhoZWFwKTsKKwl9CisKKwkvKgorCSAqICBT dHJpbmcgdGFibGUgcmVzaXplIGNoZWNrLgorCSAqCisJICogIFRoaXMgaXMgbWFpbmx5IHVzZWZ1 bCBpbiBlbWVyZ2VuY3kgR0M6IGlmIHRoZSBzdHJpbmcgdGFibGUgbG9hZAorCSAqICBmYWN0b3Ig aXMgcmVhbGx5IGxvdyBmb3Igc29tZSByZWFzb24sIHdlIGNhbiBzaHJpbmsgdGhlIHN0cmluZwor CSAqICB0YWJsZSB0byBhIHNtYWxsZXIgc2l6ZSBhbmQgZnJlZSBzb21lIG1lbW9yeSBpbiB0aGUg cHJvY2Vzcy4KKwkgKiAgT25seSBleGVjdXRlIGluIGVtZXJnZW5jeSBHQy4gIFN0cmluZyB0YWJs ZSBoYXMgaW50ZXJuYWwgZmxhZ3MKKwkgKiAgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBy ZXNpemluZyBpZiB0aGlzIG1hcmstYW5kLXN3ZWVwIHBhc3MKKwkgKiAgd2FzIHRyaWdnZXJlZCBi eSBhIHN0cmluZyB0YWJsZSByZXNpemUuCisJICovCisKKwlpZiAoZmxhZ3MgJiBEVUtfTVNfRkxB R19FTUVSR0VOQ1kpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgic3RyaW5ndGFibGUgcmVzaXplIGNo ZWNrIGluIGVtZXJnZW5jeSBnYyIpKTsKKwkJZHVrX2hlYXBfc3RydGFibGVfZm9yY2VfcmVzaXpl KGhlYXApOworCX0KKworCS8qCisJICogIEZpbmlzaAorCSAqLworCisJRFVLX0FTU0VSVChoZWFw LT5tc19wcmV2ZW50X2NvdW50ID09IDEpOworCWhlYXAtPm1zX3ByZXZlbnRfY291bnQgPSAwOwor CURVS19BU1NFUlQoaGVhcC0+bXNfcnVubmluZyA9PSAxKTsKKwloZWFwLT5tc19ydW5uaW5nID0g MDsKKworCS8qCisJICogIEFzc2VydGlvbnMgYWZ0ZXIKKwkgKi8KKworI2lmIGRlZmluZWQoRFVL X1VTRV9BU1NFUlRJT05TKQorCURVS19BU1NFUlQoaGVhcC0+bXNfcHJldmVudF9jb3VudCA9PSAw KTsKKwlEVUtfQVNTRVJUKCFEVUtfSEVBUF9IQVNfTUFSS0FORFNXRUVQX1JFQ0xJTUlUX1JFQUNI RUQoaGVhcCkpOworCURVS19BU1NFUlQoaGVhcC0+bXNfcmVjdXJzaW9uX2RlcHRoID09IDApOwor CWR1a19fYXNzZXJ0X2hlYXBoZHJfZmxhZ3MoaGVhcCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JF RkVSRU5DRV9DT1VOVElORykKKwkvKiBOb3RlOiBoZWFwLT5yZWZ6ZXJvX2ZyZWVfcnVubmluZyBt YXkgYmUgdHJ1ZTsgYSByZWZjb3VudAorCSAqIGZpbmFsaXplciBtYXkgdHJpZ2dlciBhIG1hcmst YW5kLXN3ZWVwLgorCSAqLworCWR1a19fYXNzZXJ0X3ZhbGlkX3JlZmNvdW50cyhoZWFwKTsKKyNl bmRpZiAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcgKi8KKyNpZiBkZWZpbmVkKERVS19V U0VfTElUQ0FDSEVfU0laRSkKKwlkdWtfX2Fzc2VydF9saXRjYWNoZV9udWxscyhoZWFwKTsKKyNl bmRpZiAgLyogRFVLX1VTRV9MSVRDQUNIRV9TSVpFICovCisjZW5kaWYgIC8qIERVS19VU0VfQVNT RVJUSU9OUyAqLworCisJLyoKKwkgKiAgUmVzZXQgdHJpZ2dlciBjb3VudGVyCisJICovCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfVk9MVU5UQVJZX0dDKQorCXRtcCA9IChjb3VudF9rZWVwX29iaiAr IGNvdW50X2tlZXBfc3RyKSAvIDI1NjsKKwloZWFwLT5tc190cmlnZ2VyX2NvdW50ZXIgPSAoZHVr X2ludF90KSAoCisJICAgICh0bXAgKiBEVUtfSEVBUF9NQVJLX0FORF9TV0VFUF9UUklHR0VSX01V TFQpICsKKwkgICAgRFVLX0hFQVBfTUFSS19BTkRfU1dFRVBfVFJJR0dFUl9BREQpOworCURVS19E KERVS19EUFJJTlQoImdhcmJhZ2UgY29sbGVjdCAobWFyay1hbmQtc3dlZXApIGZpbmlzaGVkOiAl bGQgb2JqZWN0cyBrZXB0LCAlbGQgc3RyaW5ncyBrZXB0LCB0cmlnZ2VyIHJlc2V0IHRvICVsZCIs CisJICAgICAgICAgICAgICAgICAobG9uZykgY291bnRfa2VlcF9vYmosIChsb25nKSBjb3VudF9r ZWVwX3N0ciwgKGxvbmcpIGhlYXAtPm1zX3RyaWdnZXJfY291bnRlcikpOworI2Vsc2UKKwlEVUtf RChEVUtfRFBSSU5UKCJnYXJiYWdlIGNvbGxlY3QgKG1hcmstYW5kLXN3ZWVwKSBmaW5pc2hlZDog JWxkIG9iamVjdHMga2VwdCwgJWxkIHN0cmluZ3Mga2VwdCwgbm8gdm9sdW50YXJ5IHRyaWdnZXIi LAorCSAgICAgICAgICAgICAgICAgKGxvbmcpIGNvdW50X2tlZXBfb2JqLCAobG9uZykgY291bnRf a2VlcF9zdHIpKTsKKyNlbmRpZgorCisJLyoKKwkgKiAgU3RhdHMgZHVtcAorCSAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWR1a19fZHVtcF9zdGF0cyhoZWFwKTsKKyNlbmRpZgor CisJLyoKKwkgKiAgRmluYWxpemUgb2JqZWN0cyBpbiB0aGUgZmluYWxpemF0aW9uIHdvcmsgbGlz dC4gIEZpbmFsaXplZAorCSAqICBvYmplY3RzIGFyZSBxdWV1ZWQgYmFjayB0byBoZWFwX2FsbG9j YXRlZCB3aXRoIEZJTkFMSVpFRCBzZXQuCisJICoKKwkgKiAgU2luY2UgZmluYWxpemVycyBtYXkg Y2F1c2UgYXJiaXRyYXJ5IHNpZGUgZWZmZWN0cywgdGhleSBhcmUKKwkgKiAgcHJldmVudGVkIGUu Zy4gZHVyaW5nIHN0cmluZyB0YWJsZSBhbmQgb2JqZWN0IHByb3BlcnR5IGFsbG9jYXRpb24KKwkg KiAgcmVzaXppbmcgdXNpbmcgaGVhcC0+cGZfcHJldmVudF9jb3VudC4gIEluIHRoaXMgY2FzZSB0 aGUgb2JqZWN0cworCSAqICByZW1haW4gaW4gdGhlIGZpbmFsaXphdGlvbiB3b3JrIGxpc3QgYWZ0 ZXIgbWFyay1hbmQtc3dlZXAgZXhpdHMKKwkgKiAgYW5kIHRoZXkgbWF5IGJlIGZpbmFsaXplZCBv biB0aGUgbmV4dCBwYXNzIG9yIGFueSBERUNSRUYgY2hlY2tpbmcKKwkgKiAgZm9yIGZpbmFsaXpl X2xpc3QuCisJICoKKwkgKiAgQXMgb2YgRHVrdGFwZSAyLjEgZmluYWxpemF0aW9uIGhhcHBlbnMg b3V0c2lkZSBtYXJrLWFuZC1zd2VlcAorCSAqICBwcm90ZWN0aW9uLiAgTWFyay1hbmQtc3dlZXAg aXMgYWxsb3dlZCB3aGlsZSB0aGUgZmluYWxpemVfbGlzdAorCSAqICBpcyBiZWluZyBwcm9jZXNz ZWQsIGJ1dCBubyByZXNjdWUgZGVjaXNpb25zIGFyZSBkb25lIHdoaWxlIHRoZQorCSAqICBwcm9j ZXNzIGlzIG9uLWdvaW5nLiAgVGhpcyBhdm9pZHMgaW5jb3JyZWN0IHJlc2N1ZSBkZWNpc2lvbnMK KwkgKiAgaWYgYW4gb2JqZWN0IGlzIGNvbnNpZGVyZWQgcmVhY2hhYmxlIChhbmQgdGh1cyByZXNj dWVkKSBiZWNhdXNlCisJICogIG9mIGEgcmVmZXJlbmNlIHZpYSBmaW5hbGl6ZV9saXN0ICh3aGlj aCBpcyBjb25zaWRlcmVkIGEgcmVhY2hhYmlsaXR5CisJICogIHJvb3QpLiAgV2hlbiBmaW5hbGl6 ZV9saXN0IGlzIGJlaW5nIHByb2Nlc3NlZCwgcmVhY2hhYmxlIG9iamVjdHMKKwkgKiAgd2l0aCBG SU5BTElaRUQgc2V0IHdpbGwganVzdCBrZWVwIHRoZWlyIEZJTkFMSVpFRCBmbGFnIGZvciBsYXRl cgorCSAqICBtYXJrLWFuZC1zd2VlcCBwcm9jZXNzaW5nLgorCSAqCisJICogIFRoaXMgY291bGQg YWxzbyBiZSBoYW5kbGVkIChhIGJpdCBiZXR0ZXIpIGJ5IGhhdmluZyBhIG1vcmUgcmVmaW5lZAor CSAqICBub3Rpb24gb2YgcmVhY2hhYmlsaXR5IGZvciByZXNjdWUvZnJlZSBkZWNpc2lvbnMuCisJ ICoKKwkgKiAgWFhYOiBhdm9pZCBmaW5hbGl6ZXIgZXhlY3V0aW9uIHdoZW4gZG9pbmcgZW1lcmdl bmN5IEdDPworCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQor CS8qIEF0dGVtcHQgdG8gcHJvY2VzcyBmaW5hbGl6ZV9saXN0LCBwZl9wcmV2ZW50X2NvdW50IGNo ZWNrCisJICogaXMgaW5zaWRlIHRoZSB0YXJnZXQuCisJICovCisJZHVrX2hlYXBfcHJvY2Vzc19m aW5hbGl6ZV9saXN0KGhlYXApOworI2VuZGlmICAvKiBEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JU ICovCit9CisvKgorICogIE1lbW9yeSBhbGxvY2F0aW9uIGhhbmRsaW5nLgorICovCisKKy8qICNp bmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyoKKyAqICBW b2x1bnRhcnkgR0MgY2hlY2sKKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZPTFVOVEFSWV9H QykKK0RVS19MT0NBTCBEVUtfSU5MSU5FIHZvaWQgZHVrX19jaGVja192b2x1bnRhcnlfZ2MoZHVr X2hlYXAgKmhlYXApIHsKKwlpZiAoRFVLX1VOTElLRUxZKC0tKGhlYXApLT5tc190cmlnZ2VyX2Nv dW50ZXIgPCAwKSkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykKKwkJaWYgKGhlYXAtPm1z X3ByZXZlbnRfY291bnQgPT0gMCkgeworCQkJRFVLX0QoRFVLX0RQUklOVCgidHJpZ2dlcmluZyB2 b2x1bnRhcnkgbWFyay1hbmQtc3dlZXAiKSk7CisJCX0gZWxzZSB7CisJCQlEVUtfREQoRFVLX0RE UFJJTlQoImdjIGJsb2NrZWQgLT4gc2tpcCB2b2x1bnRhcnkgbWFyay1hbmQtc3dlZXAgbm93Iikp OworCQl9CisjZW5kaWYKKworCQkvKiBQcmV2ZW50aW9uIGNoZWNrcyBpbiB0aGUgY2FsbCB0YXJn ZXQgaGFuZGxlIGNhc2VzIHdoZXJlCisJCSAqIHZvbHVudGFyeSBHQyBpcyBub3QgYWxsb3dlZC4g IFRoZSB2b2x1bnRhcnkgR0MgdHJpZ2dlcgorCQkgKiBjb3VudGVyIGlzIG9ubHkgcmV3cml0dGVu IGlmIG1hcmstYW5kLXN3ZWVwIGFjdHVhbGx5IHJ1bnMuCisJCSAqLworCQlkdWtfaGVhcF9tYXJr X2FuZF9zd2VlcChoZWFwLCBEVUtfTVNfRkxBR19WT0xVTlRBUlkgLypmbGFncyovKTsKKwl9Cit9 CisjZGVmaW5lIERVS19fVk9MVU5UQVJZX1BFUklPRElDX0dDKGhlYXApICBkbyB7IGR1a19fY2hl Y2tfdm9sdW50YXJ5X2djKChoZWFwKSk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEVUtf X1ZPTFVOVEFSWV9QRVJJT0RJQ19HQyhoZWFwKSAgLyogbm8gdm9sdW50YXJ5IGdjICovCisjZW5k aWYgIC8qIERVS19VU0VfVk9MVU5UQVJZX0dDICovCisKKy8qCisgKiAgQWxsb2NhdGUgbWVtb3J5 IHdpdGggZ2FyYmFnZSBjb2xsZWN0aW9uCisgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgKmR1a19o ZWFwX21lbV9hbGxvYyhkdWtfaGVhcCAqaGVhcCwgZHVrX3NpemVfdCBzaXplKSB7CisJdm9pZCAq cmVzOworCWR1a19zbWFsbF9pbnRfdCBpOworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOwor CURVS19BU1NFUlRfRElTQUJMRShzaXplID49IDApOworCisJLyoKKwkgKiAgVm9sdW50YXJ5IHBl cmlvZGljIEdDIChpZiBlbmFibGVkKQorCSAqLworCisJRFVLX19WT0xVTlRBUllfUEVSSU9ESUNf R0MoaGVhcCk7CisKKwkvKgorCSAqICBGaXJzdCBhdHRlbXB0CisJICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfR0NfVE9SVFVSRSkKKwkvKiBTaW11bGF0ZSBhbGxvYyBmYWlsdXJlIG9uIGV2ZXJ5 IGFsbG9jLCBleGNlcHQgd2hlbiBtYXJrLWFuZC1zd2VlcAorCSAqIGlzIHJ1bm5pbmcuCisJICov CisJaWYgKGhlYXAtPm1zX3ByZXZlbnRfY291bnQgPT0gMCkgeworCQlEVUtfREREKERVS19ERERQ UklOVCgiZ2MgdG9ydHVyZSBlbmFibGVkLCBwcmV0ZW5kIHRoYXQgZmlyc3QgYWxsb2MgYXR0ZW1w dCBmYWlscyIpKTsKKwkJcmVzID0gTlVMTDsKKwkJRFVLX1VOUkVGKHJlcyk7CisJCWdvdG8gc2tp cF9hdHRlbXB0OworCX0KKyNlbmRpZgorCXJlcyA9IGhlYXAtPmFsbG9jX2Z1bmMoaGVhcC0+aGVh cF91ZGF0YSwgc2l6ZSk7CisJaWYgKERVS19MSUtFTFkocmVzIHx8IHNpemUgPT0gMCkpIHsKKwkJ LyogRm9yIHplcm8gc2l6ZSBhbGxvY2F0aW9ucyBOVUxMIGlzIGFsbG93ZWQuICovCisJCXJldHVy biByZXM7CisJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9HQ19UT1JUVVJFKQorIHNraXBfYXR0ZW1w dDoKKyNlbmRpZgorCisJRFVLX0QoRFVLX0RQUklOVCgiZmlyc3QgYWxsb2MgYXR0ZW1wdCBmYWls ZWQsIGF0dGVtcHQgdG8gZ2MgYW5kIHJldHJ5IikpOworCisjaWYgMAorCS8qCisJICogIEF2b2lk IGEgR0MgaWYgR0MgaXMgYWxyZWFkeSBydW5uaW5nLiAgVGhpcyBjYW4gaGFwcGVuIGF0IGEgbGF0 ZQorCSAqICBzdGFnZSBpbiBhIEdDIHdoZW4gd2UgdHJ5IHRvIGUuZy4gcmVzaXplIHRoZSBzdHJp bmd0YWJsZQorCSAqICBvciBjb21wYWN0IG9iamVjdHMuCisJICoKKwkgKiAgTk9URTogZXhwbGlj aXQgaGFuZGxpbmcgaXNuJ3QgYWN0dWFsbHkgYmUgbmVlZGVkOiBpZiB0aGUgR0MgaXMKKwkgKiAg bm90IGFsbG93ZWQsIGR1a19oZWFwX21hcmtfYW5kX3N3ZWVwKCkgd2lsbCByZWplY3QgaXQgZm9y IGV2ZXJ5CisJICogIGF0dGVtcHQgaW4gdGhlIGxvb3AgYmVsb3csIHJlc3VsdGluZyBpbiBhIE5V TEwgc2FtZSBhcyBoZXJlLgorCSAqLworCisJaWYgKGhlYXAtPm1zX3ByZXZlbnRfY291bnQgIT0g MCkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJkdWtfaGVhcF9tZW1fYWxsb2MoKSBmYWlsZWQsIGdj IGluIHByb2dyZXNzIChnYyBza2lwcGVkKSwgYWxsb2Mgc2l6ZSAlbGQiLCAobG9uZykgc2l6ZSkp OworCQlyZXR1cm4gTlVMTDsKKwl9CisjZW5kaWYKKworCS8qCisJICogIFJldHJ5IHdpdGggc2V2 ZXJhbCBHQyBhdHRlbXB0cy4gIEluaXRpYWwgYXR0ZW1wdHMgYXJlIG1hZGUgd2l0aG91dAorCSAq ICBlbWVyZ2VuY3kgbW9kZTsgbGF0ZXIgYXR0ZW1wdHMgdXNlIGVtZXJnZW5jeSBtb2RlIHdoaWNo IG1pbmltaXplcworCSAqICBtZW1vcnkgYWxsb2NhdGlvbnMgZm9yY2libHkuCisJICovCisKKwlm b3IgKGkgPSAwOyBpIDwgRFVLX0hFQVBfQUxMT0NfRkFJTF9NQVJLQU5EU1dFRVBfTElNSVQ7IGkr KykgeworCQlkdWtfc21hbGxfdWludF90IGZsYWdzOworCisJCWZsYWdzID0gMDsKKwkJaWYgKGkg Pj0gRFVLX0hFQVBfQUxMT0NfRkFJTF9NQVJLQU5EU1dFRVBfRU1FUkdFTkNZX0xJTUlUIC0gMSkg eworCQkJZmxhZ3MgfD0gRFVLX01TX0ZMQUdfRU1FUkdFTkNZOworCQl9CisKKwkJZHVrX2hlYXBf bWFya19hbmRfc3dlZXAoaGVhcCwgZmxhZ3MpOworCisJCXJlcyA9IGhlYXAtPmFsbG9jX2Z1bmMo aGVhcC0+aGVhcF91ZGF0YSwgc2l6ZSk7CisJCWlmIChyZXMpIHsKKwkJCURVS19EKERVS19EUFJJ TlQoImR1a19oZWFwX21lbV9hbGxvYygpIHN1Y2NlZWRlZCBhZnRlciBnYyAocGFzcyAlbGQpLCBh bGxvYyBzaXplICVsZCIsCisJCQkgICAgICAgICAgICAgICAgIChsb25nKSAoaSArIDEpLCAobG9u Zykgc2l6ZSkpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKworCURVS19EKERVS19EUFJJTlQo ImR1a19oZWFwX21lbV9hbGxvYygpIGZhaWxlZCBldmVuIGFmdGVyIGdjLCBhbGxvYyBzaXplICVs ZCIsIChsb25nKSBzaXplKSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lk ICpkdWtfaGVhcF9tZW1fYWxsb2NfemVyb2VkKGR1a19oZWFwICpoZWFwLCBkdWtfc2l6ZV90IHNp emUpIHsKKwl2b2lkICpyZXM7CisKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisJRFVLX0FT U0VSVF9ESVNBQkxFKHNpemUgPj0gMCk7CisKKwlyZXMgPSBEVUtfQUxMT0MoaGVhcCwgc2l6ZSk7 CisJaWYgKERVS19MSUtFTFkocmVzICE9IE5VTEwpKSB7CisJCWR1a19tZW16ZXJvKHJlcywgc2l6 ZSk7CisJfQorCXJldHVybiByZXM7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkICpkdWtfaGVhcF9t ZW1fYWxsb2NfY2hlY2tlZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfc2l6ZV90IHNpemUpIHsKKwl2 b2lkICpyZXM7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlyZXMgPSBkdWtfaGVhcF9t ZW1fYWxsb2ModGhyLT5oZWFwLCBzaXplKTsKKwlpZiAoRFVLX0xJS0VMWShyZXMgIT0gTlVMTCB8 fCBzaXplID09IDApKSB7CisJCXJldHVybiByZXM7CisJfQorCURVS19FUlJPUl9BTExPQ19GQUlM RUQodGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKK30KKworRFVLX0lOVEVS TkFMIHZvaWQgKmR1a19oZWFwX21lbV9hbGxvY19jaGVja2VkX3plcm9lZChkdWtfaHRocmVhZCAq dGhyLCBkdWtfc2l6ZV90IHNpemUpIHsKKwl2b2lkICpyZXM7CisKKwlEVUtfQVNTRVJUKHRociAh PSBOVUxMKTsKKwlyZXMgPSBkdWtfaGVhcF9tZW1fYWxsb2NfemVyb2VkKHRoci0+aGVhcCwgc2l6 ZSk7CisJaWYgKERVS19MSUtFTFkocmVzICE9IE5VTEwgfHwgc2l6ZSA9PSAwKSkgeworCQlyZXR1 cm4gcmVzOworCX0KKwlEVUtfRVJST1JfQUxMT0NfRkFJTEVEKHRocik7CisJRFVLX1dPX05PUkVU VVJOKHJldHVybiBOVUxMOyk7Cit9CisKKy8qCisgKiAgUmVhbGxvY2F0ZSBtZW1vcnkgd2l0aCBn YXJiYWdlIGNvbGxlY3Rpb24KKyAqLworCitEVUtfSU5URVJOQUwgdm9pZCAqZHVrX2hlYXBfbWVt X3JlYWxsb2MoZHVrX2hlYXAgKmhlYXAsIHZvaWQgKnB0ciwgZHVrX3NpemVfdCBuZXdzaXplKSB7 CisJdm9pZCAqcmVzOworCWR1a19zbWFsbF9pbnRfdCBpOworCisJRFVLX0FTU0VSVChoZWFwICE9 IE5VTEwpOworCS8qIHB0ciBtYXkgYmUgTlVMTCAqLworCURVS19BU1NFUlRfRElTQUJMRShuZXdz aXplID49IDApOworCisJLyoKKwkgKiAgVm9sdW50YXJ5IHBlcmlvZGljIEdDIChpZiBlbmFibGVk KQorCSAqLworCisJRFVLX19WT0xVTlRBUllfUEVSSU9ESUNfR0MoaGVhcCk7CisKKwkvKgorCSAq ICBGaXJzdCBhdHRlbXB0CisJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfR0NfVE9SVFVSRSkK KwkvKiBTaW11bGF0ZSBhbGxvYyBmYWlsdXJlIG9uIGV2ZXJ5IHJlYWxsb2MsIGV4Y2VwdCB3aGVu IG1hcmstYW5kLXN3ZWVwCisJICogaXMgcnVubmluZy4KKwkgKi8KKwlpZiAoaGVhcC0+bXNfcHJl dmVudF9jb3VudCA9PSAwKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJnYyB0b3J0dXJlIGVu YWJsZWQsIHByZXRlbmQgdGhhdCBmaXJzdCByZWFsbG9jIGF0dGVtcHQgZmFpbHMiKSk7CisJCXJl cyA9IE5VTEw7CisJCURVS19VTlJFRihyZXMpOworCQlnb3RvIHNraXBfYXR0ZW1wdDsKKwl9Cisj ZW5kaWYKKwlyZXMgPSBoZWFwLT5yZWFsbG9jX2Z1bmMoaGVhcC0+aGVhcF91ZGF0YSwgcHRyLCBu ZXdzaXplKTsKKwlpZiAoRFVLX0xJS0VMWShyZXMgfHwgbmV3c2l6ZSA9PSAwKSkgeworCQkvKiBG b3IgemVybyBzaXplIGFsbG9jYXRpb25zIE5VTEwgaXMgYWxsb3dlZC4gKi8KKwkJcmV0dXJuIHJl czsKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0dDX1RPUlRVUkUpCisgc2tpcF9hdHRlbXB0Ogor I2VuZGlmCisKKwlEVUtfRChEVUtfRFBSSU5UKCJmaXJzdCByZWFsbG9jIGF0dGVtcHQgZmFpbGVk LCBhdHRlbXB0IHRvIGdjIGFuZCByZXRyeSIpKTsKKworI2lmIDAKKwkvKgorCSAqICBBdm9pZCBh IEdDIGlmIEdDIGlzIGFscmVhZHkgcnVubmluZy4gIFNlZSBkdWtfaGVhcF9tZW1fYWxsb2MoKS4K KwkgKi8KKworCWlmIChoZWFwLT5tc19wcmV2ZW50X2NvdW50ICE9IDApIHsKKwkJRFVLX0QoRFVL X0RQUklOVCgiZHVrX2hlYXBfbWVtX3JlYWxsb2MoKSBmYWlsZWQsIGdjIGluIHByb2dyZXNzIChn YyBza2lwcGVkKSwgYWxsb2Mgc2l6ZSAlbGQiLCAobG9uZykgbmV3c2l6ZSkpOworCQlyZXR1cm4g TlVMTDsKKwl9CisjZW5kaWYKKworCS8qCisJICogIFJldHJ5IHdpdGggc2V2ZXJhbCBHQyBhdHRl bXB0cy4gIEluaXRpYWwgYXR0ZW1wdHMgYXJlIG1hZGUgd2l0aG91dAorCSAqICBlbWVyZ2VuY3kg bW9kZTsgbGF0ZXIgYXR0ZW1wdHMgdXNlIGVtZXJnZW5jeSBtb2RlIHdoaWNoIG1pbmltaXplcwor CSAqICBtZW1vcnkgYWxsb2NhdGlvbnMgZm9yY2libHkuCisJICovCisKKwlmb3IgKGkgPSAwOyBp IDwgRFVLX0hFQVBfQUxMT0NfRkFJTF9NQVJLQU5EU1dFRVBfTElNSVQ7IGkrKykgeworCQlkdWtf c21hbGxfdWludF90IGZsYWdzOworCisJCWZsYWdzID0gMDsKKwkJaWYgKGkgPj0gRFVLX0hFQVBf QUxMT0NfRkFJTF9NQVJLQU5EU1dFRVBfRU1FUkdFTkNZX0xJTUlUIC0gMSkgeworCQkJZmxhZ3Mg fD0gRFVLX01TX0ZMQUdfRU1FUkdFTkNZOworCQl9CisKKwkJZHVrX2hlYXBfbWFya19hbmRfc3dl ZXAoaGVhcCwgZmxhZ3MpOworCisJCXJlcyA9IGhlYXAtPnJlYWxsb2NfZnVuYyhoZWFwLT5oZWFw X3VkYXRhLCBwdHIsIG5ld3NpemUpOworCQlpZiAocmVzIHx8IG5ld3NpemUgPT0gMCkgeworCQkJ RFVLX0QoRFVLX0RQUklOVCgiZHVrX2hlYXBfbWVtX3JlYWxsb2MoKSBzdWNjZWVkZWQgYWZ0ZXIg Z2MgKHBhc3MgJWxkKSwgYWxsb2Mgc2l6ZSAlbGQiLAorCQkJICAgICAgICAgICAgICAgICAobG9u ZykgKGkgKyAxKSwgKGxvbmcpIG5ld3NpemUpKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisK KwlEVUtfRChEVUtfRFBSSU5UKCJkdWtfaGVhcF9tZW1fcmVhbGxvYygpIGZhaWxlZCBldmVuIGFm dGVyIGdjLCBhbGxvYyBzaXplICVsZCIsIChsb25nKSBuZXdzaXplKSk7CisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiAgUmVhbGxvY2F0ZSBtZW1vcnkgd2l0aCBnYXJiYWdlIGNvbGxlY3Rpb24s IHVzaW5nIGEgY2FsbGJhY2sgdG8gcHJvdmlkZQorICogIHRoZSBjdXJyZW50IGFsbG9jYXRlZCBw b2ludGVyLiAgVGhpcyB2YXJpYW50IGlzIHVzZWQgd2hlbiBhIG1hcmstYW5kLXN3ZWVwCisgKiAg KGUuZy4gZmluYWxpemVycykgbWlnaHQgY2hhbmdlIHRoZSBvcmlnaW5hbCBwb2ludGVyLgorICov CisKK0RVS19JTlRFUk5BTCB2b2lkICpkdWtfaGVhcF9tZW1fcmVhbGxvY19pbmRpcmVjdChkdWtf aGVhcCAqaGVhcCwgZHVrX21lbV9nZXRwdHIgY2IsIHZvaWQgKnVkLCBkdWtfc2l6ZV90IG5ld3Np emUpIHsKKwl2b2lkICpyZXM7CisJZHVrX3NtYWxsX2ludF90IGk7CisKKwlEVUtfQVNTRVJUKGhl YXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVF9ESVNBQkxFKG5ld3NpemUgPj0gMCk7CisKKwkvKgor CSAqICBWb2x1bnRhcnkgcGVyaW9kaWMgR0MgKGlmIGVuYWJsZWQpCisJICovCisKKwlEVUtfX1ZP TFVOVEFSWV9QRVJJT0RJQ19HQyhoZWFwKTsKKworCS8qCisJICogIEZpcnN0IGF0dGVtcHQKKwkg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9HQ19UT1JUVVJFKQorCS8qIFNpbXVsYXRlIGFsbG9j IGZhaWx1cmUgb24gZXZlcnkgcmVhbGxvYywgZXhjZXB0IHdoZW4gbWFyay1hbmQtc3dlZXAKKwkg KiBpcyBydW5uaW5nLgorCSAqLworCWlmIChoZWFwLT5tc19wcmV2ZW50X2NvdW50ID09IDApIHsK KwkJRFVLX0RERChEVUtfREREUFJJTlQoImdjIHRvcnR1cmUgZW5hYmxlZCwgcHJldGVuZCB0aGF0 IGZpcnN0IGluZGlyZWN0IHJlYWxsb2MgYXR0ZW1wdCBmYWlscyIpKTsKKwkJcmVzID0gTlVMTDsK KwkJRFVLX1VOUkVGKHJlcyk7CisJCWdvdG8gc2tpcF9hdHRlbXB0OworCX0KKyNlbmRpZgorCXJl cyA9IGhlYXAtPnJlYWxsb2NfZnVuYyhoZWFwLT5oZWFwX3VkYXRhLCBjYihoZWFwLCB1ZCksIG5l d3NpemUpOworCWlmIChEVUtfTElLRUxZKHJlcyB8fCBuZXdzaXplID09IDApKSB7CisJCS8qIEZv ciB6ZXJvIHNpemUgYWxsb2NhdGlvbnMgTlVMTCBpcyBhbGxvd2VkLiAqLworCQlyZXR1cm4gcmVz OworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfR0NfVE9SVFVSRSkKKyBza2lwX2F0dGVtcHQ6Cisj ZW5kaWYKKworCURVS19EKERVS19EUFJJTlQoImZpcnN0IGluZGlyZWN0IHJlYWxsb2MgYXR0ZW1w dCBmYWlsZWQsIGF0dGVtcHQgdG8gZ2MgYW5kIHJldHJ5IikpOworCisjaWYgMAorCS8qCisJICog IEF2b2lkIGEgR0MgaWYgR0MgaXMgYWxyZWFkeSBydW5uaW5nLiAgU2VlIGR1a19oZWFwX21lbV9h bGxvYygpLgorCSAqLworCisJaWYgKGhlYXAtPm1zX3ByZXZlbnRfY291bnQgIT0gMCkgeworCQlE VUtfRChEVUtfRFBSSU5UKCJkdWtfaGVhcF9tZW1fcmVhbGxvY19pbmRpcmVjdCgpIGZhaWxlZCwg Z2MgaW4gcHJvZ3Jlc3MgKGdjIHNraXBwZWQpLCBhbGxvYyBzaXplICVsZCIsIChsb25nKSBuZXdz aXplKSk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiAgUmV0cnkgd2l0 aCBzZXZlcmFsIEdDIGF0dGVtcHRzLiAgSW5pdGlhbCBhdHRlbXB0cyBhcmUgbWFkZSB3aXRob3V0 CisJICogIGVtZXJnZW5jeSBtb2RlOyBsYXRlciBhdHRlbXB0cyB1c2UgZW1lcmdlbmN5IG1vZGUg d2hpY2ggbWluaW1pemVzCisJICogIG1lbW9yeSBhbGxvY2F0aW9ucyBmb3JjaWJseS4KKwkgKi8K KworCWZvciAoaSA9IDA7IGkgPCBEVUtfSEVBUF9BTExPQ19GQUlMX01BUktBTkRTV0VFUF9MSU1J VDsgaSsrKSB7CisJCWR1a19zbWFsbF91aW50X3QgZmxhZ3M7CisKKyNpZiBkZWZpbmVkKERVS19V U0VfREVCVUcpCisJCXZvaWQgKnB0cl9wcmU7CisJCXZvaWQgKnB0cl9wb3N0OworI2VuZGlmCisK KyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCXB0cl9wcmUgPSBjYihoZWFwLCB1ZCk7Cisj ZW5kaWYKKwkJZmxhZ3MgPSAwOworCQlpZiAoaSA+PSBEVUtfSEVBUF9BTExPQ19GQUlMX01BUktB TkRTV0VFUF9FTUVSR0VOQ1lfTElNSVQgLSAxKSB7CisJCQlmbGFncyB8PSBEVUtfTVNfRkxBR19F TUVSR0VOQ1k7CisJCX0KKworCQlkdWtfaGVhcF9tYXJrX2FuZF9zd2VlcChoZWFwLCBmbGFncyk7 CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCQlwdHJfcG9zdCA9IGNiKGhlYXAsIHVkKTsK KwkJaWYgKHB0cl9wcmUgIT0gcHRyX3Bvc3QpIHsKKwkJCURVS19ERChEVUtfRERQUklOVCgicmVh bGxvYyBiYXNlIHBvaW50ZXIgY2hhbmdlZCBieSBtYXJrLWFuZC1zd2VlcDogJXAgLT4gJXAiLAor CQkJICAgICAgICAgICAgICAgICAgICh2b2lkICopIHB0cl9wcmUsICh2b2lkICopIHB0cl9wb3N0 KSk7CisJCX0KKyNlbmRpZgorCisJCS8qIE5vdGU6IGtleSBpc3N1ZSBoZXJlIGlzIHRvIHJlLWxv b2t1cCB0aGUgYmFzZSBwb2ludGVyIG9uIGV2ZXJ5IGF0dGVtcHQuCisJCSAqIFRoZSBwb2ludGVy IGJlaW5nIHJlYWxsb2NhdGVkIG1heSBjaGFuZ2UgYWZ0ZXIgZXZlcnkgbWFyay1hbmQtc3dlZXAu CisJCSAqLworCisJCXJlcyA9IGhlYXAtPnJlYWxsb2NfZnVuYyhoZWFwLT5oZWFwX3VkYXRhLCBj YihoZWFwLCB1ZCksIG5ld3NpemUpOworCQlpZiAocmVzIHx8IG5ld3NpemUgPT0gMCkgeworCQkJ RFVLX0QoRFVLX0RQUklOVCgiZHVrX2hlYXBfbWVtX3JlYWxsb2NfaW5kaXJlY3QoKSBzdWNjZWVk ZWQgYWZ0ZXIgZ2MgKHBhc3MgJWxkKSwgYWxsb2Mgc2l6ZSAlbGQiLAorCQkJICAgICAgICAgICAg ICAgICAobG9uZykgKGkgKyAxKSwgKGxvbmcpIG5ld3NpemUpKTsKKwkJCXJldHVybiByZXM7CisJ CX0KKwl9CisKKwlEVUtfRChEVUtfRFBSSU5UKCJkdWtfaGVhcF9tZW1fcmVhbGxvY19pbmRpcmVj dCgpIGZhaWxlZCBldmVuIGFmdGVyIGdjLCBhbGxvYyBzaXplICVsZCIsIChsb25nKSBuZXdzaXpl KSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAgRnJlZSBtZW1vcnkKKyAqLworCitEVUtf SU5URVJOQUwgdm9pZCBkdWtfaGVhcF9tZW1fZnJlZShkdWtfaGVhcCAqaGVhcCwgdm9pZCAqcHRy KSB7CisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCS8qIHB0ciBtYXkgYmUgTlVMTCAqLwor CisJLyogTXVzdCBiZWhhdmUgbGlrZSBhIG5vLW9wIHdpdGggTlVMTCBhbmQgYW55IHBvaW50ZXIg cmV0dXJuZWQgZnJvbQorCSAqIG1hbGxvYy9yZWFsbG9jIHdpdGggemVybyBzaXplLgorCSAqLwor CWhlYXAtPmZyZWVfZnVuYyhoZWFwLT5oZWFwX3VkYXRhLCBwdHIpOworCisJLyogTmV2ZXIgcGVy Zm9ybSBhIEdDIChldmVuIHZvbHVudGFyeSkgaW4gYSBtZW1vcnkgZnJlZSwgb3RoZXJ3aXNlCisJ ICogYWxsIGNhbGwgc2l0ZXMgZG9pbmcgZnJlZXMgd291bGQgbmVlZCB0byBkZWFsIHdpdGggdGhl IHNpZGUgZWZmZWN0cy4KKwkgKiBObyBuZWVkIHRvIHVwZGF0ZSB2b2x1bnRhcnkgR0MgY291bnRl ciBlaXRoZXIuCisJICovCit9CisKKy8qIGF1dG9tYXRpYyB1bmRlZnMgKi8KKyN1bmRlZiBEVUtf X1ZPTFVOVEFSWV9QRVJJT0RJQ19HQworLyoKKyAqICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZHVr X2hlYXAuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNs dWRlZCAqLworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaGVhcF9pbnNlcnRfaW50b19oZWFwX2Fs bG9jYXRlZChkdWtfaGVhcCAqaGVhcCwgZHVrX2hlYXBoZHIgKmhkcikgeworCWR1a19oZWFwaGRy ICpyb290OworCisJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfVFlQRShoZHIpICE9IERVS19I VFlQRV9TVFJJTkcpOworCisJcm9vdCA9IGhlYXAtPmhlYXBfYWxsb2NhdGVkOworI2lmIGRlZmlu ZWQoRFVLX1VTRV9ET1VCTEVfTElOS0VEX0hFQVApCisJaWYgKHJvb3QgIT0gTlVMTCkgeworCQlE VUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9QUkVWKGhlYXAsIHJvb3QpID09IE5VTEwpOworCQlE VUtfSEVBUEhEUl9TRVRfUFJFVihoZWFwLCByb290LCBoZHIpOworCX0KKwlEVUtfSEVBUEhEUl9T RVRfUFJFVihoZWFwLCBoZHIsIE5VTEwpOworI2VuZGlmCisJRFVLX0hFQVBIRFJfU0VUX05FWFQo aGVhcCwgaGRyLCByb290KTsKKwlEVUtfQVNTRVJUX0hFQVBIRFJfTElOS1MoaGVhcCwgaGRyKTsK KwlEVUtfQVNTRVJUX0hFQVBIRFJfTElOS1MoaGVhcCwgcm9vdCk7CisJaGVhcC0+aGVhcF9hbGxv Y2F0ZWQgPSBoZHI7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5H KQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBfcmVtb3ZlX2Zyb21faGVhcF9hbGxvY2F0ZWQo ZHVrX2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpoZHIpIHsKKwlkdWtfaGVhcGhkciAqcHJldjsK KwlkdWtfaGVhcGhkciAqbmV4dDsKKworCS8qIFN0cmluZ3MgYXJlIGluIHN0cmluZyB0YWJsZS4g Ki8KKwlEVUtfQVNTRVJUKGhkciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dF VF9UWVBFKGhkcikgIT0gRFVLX0hUWVBFX1NUUklORyk7CisKKwkvKiBUYXJnZXQgJ2hkcicgbXVz dCBiZSBpbiBoZWFwX2FsbG9jYXRlZCAobm90IGUuZy4gZmluYWxpemVfbGlzdCkuCisJICogSWYg bm90LCBoZWFwIGxpc3RzIHdpbGwgYmVjb21lIGNvcnJ1cHRlZCBzbyBhc3NlcnQgZWFybHkgZm9y IGl0LgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCXsKKwkJZHVrX2hl YXBoZHIgKnRtcDsKKwkJZm9yICh0bXAgPSBoZWFwLT5oZWFwX2FsbG9jYXRlZDsgdG1wICE9IE5V TEw7IHRtcCA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhlYXAsIHRtcCkpIHsKKwkJCWlmICh0bXAg PT0gaGRyKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJRFVLX0FTU0VSVCh0bXAgPT0gaGRy KTsKKwl9CisjZW5kaWYKKworCS8qIFJlYWQvd3JpdGUgb25seSBvbmNlIHRvIG1pbmltaXplIHBv aW50ZXIgY29tcHJlc3Npb24gY2FsbHMuICovCisJcHJldiA9IERVS19IRUFQSERSX0dFVF9QUkVW KGhlYXAsIGhkcik7CisJbmV4dCA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhlYXAsIGhkcik7CisK KwlpZiAocHJldiAhPSBOVUxMKSB7CisJCURVS19BU1NFUlQoaGVhcC0+aGVhcF9hbGxvY2F0ZWQg IT0gaGRyKTsKKwkJRFVLX0hFQVBIRFJfU0VUX05FWFQoaGVhcCwgcHJldiwgbmV4dCk7CisJfSBl bHNlIHsKKwkJRFVLX0FTU0VSVChoZWFwLT5oZWFwX2FsbG9jYXRlZCA9PSBoZHIpOworCQloZWFw LT5oZWFwX2FsbG9jYXRlZCA9IG5leHQ7CisJfQorCWlmIChuZXh0ICE9IE5VTEwpIHsKKwkJRFVL X0hFQVBIRFJfU0VUX1BSRVYoaGVhcCwgbmV4dCwgcHJldik7CisJfSBlbHNlIHsKKwkJOworCX0K K30KKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCkKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFw X2luc2VydF9pbnRvX2ZpbmFsaXplX2xpc3QoZHVrX2hlYXAgKmhlYXAsIGR1a19oZWFwaGRyICpo ZHIpIHsKKwlkdWtfaGVhcGhkciAqcm9vdDsKKworCXJvb3QgPSBoZWFwLT5maW5hbGl6ZV9saXN0 OworI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTElOS0VEX0hFQVApCisJRFVLX0hFQVBIRFJf U0VUX1BSRVYoaGVhcCwgaGRyLCBOVUxMKTsKKwlpZiAocm9vdCAhPSBOVUxMKSB7CisJCURVS19B U1NFUlQoRFVLX0hFQVBIRFJfR0VUX1BSRVYoaGVhcCwgcm9vdCkgPT0gTlVMTCk7CisJCURVS19I RUFQSERSX1NFVF9QUkVWKGhlYXAsIHJvb3QsIGhkcik7CisJfQorI2VuZGlmCisJRFVLX0hFQVBI RFJfU0VUX05FWFQoaGVhcCwgaGRyLCByb290KTsKKwlEVUtfQVNTRVJUX0hFQVBIRFJfTElOS1Mo aGVhcCwgaGRyKTsKKwlEVUtfQVNTRVJUX0hFQVBIRFJfTElOS1MoaGVhcCwgcm9vdCk7CisJaGVh cC0+ZmluYWxpemVfbGlzdCA9IGhkcjsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9GSU5BTElaRVJf U1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorRFVL X0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBfcmVtb3ZlX2Zyb21fZmluYWxpemVfbGlzdChkdWtfaGVh cCAqaGVhcCwgZHVrX2hlYXBoZHIgKmhkcikgeworI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVf TElOS0VEX0hFQVApCisJZHVrX2hlYXBoZHIgKm5leHQ7CisJZHVrX2hlYXBoZHIgKnByZXY7CisK KwluZXh0ID0gRFVLX0hFQVBIRFJfR0VUX05FWFQoaGVhcCwgaGRyKTsKKwlwcmV2ID0gRFVLX0hF QVBIRFJfR0VUX1BSRVYoaGVhcCwgaGRyKTsKKwlpZiAobmV4dCAhPSBOVUxMKSB7CisJCURVS19B U1NFUlQoRFVLX0hFQVBIRFJfR0VUX1BSRVYoaGVhcCwgbmV4dCkgPT0gaGRyKTsKKwkJRFVLX0hF QVBIRFJfU0VUX1BSRVYoaGVhcCwgbmV4dCwgcHJldik7CisJfQorCWlmIChwcmV2ID09IE5VTEwp IHsKKwkJRFVLX0FTU0VSVChoZHIgPT0gaGVhcC0+ZmluYWxpemVfbGlzdCk7CisJCWhlYXAtPmZp bmFsaXplX2xpc3QgPSBuZXh0OworCX0gZWxzZSB7CisJCURVS19BU1NFUlQoaGRyICE9IGhlYXAt PmZpbmFsaXplX2xpc3QpOworCQlEVUtfSEVBUEhEUl9TRVRfTkVYVChoZWFwLCBwcmV2LCBuZXh0 KTsKKwl9CisjZWxzZQorCWR1a19oZWFwaGRyICpuZXh0OworCWR1a19oZWFwaGRyICpjdXJyOwor CisJLyogUmFuZG9tIHJlbW92YWwgaXMgZXhwZW5zaXZlOiB3ZSBuZWVkIHRvIGxvY2F0ZSB0aGUg cHJldmlvdXMgZWxlbWVudAorCSAqIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhICdwcmV2JyBwb2lu dGVyLgorCSAqLworCWN1cnIgPSBoZWFwLT5maW5hbGl6ZV9saXN0OworCWlmIChjdXJyID09IGhk cikgeworCQloZWFwLT5maW5hbGl6ZV9saXN0ID0gRFVLX0hFQVBIRFJfR0VUX05FWFQoaGVhcCwg Y3Vycik7CisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVChoZHIgIT0gaGVhcC0+ZmluYWxpemVfbGlz dCk7CisJCWZvciAoOzspIHsKKwkJCURVS19BU1NFUlQoY3VyciAhPSBOVUxMKTsgIC8qIENhbGxl ciByZXNwb25zaWJpbGl0eS4gKi8KKworCQkJbmV4dCA9IERVS19IRUFQSERSX0dFVF9ORVhUKGhl YXAsIGN1cnIpOworCQkJaWYgKG5leHQgPT0gaGRyKSB7CisJCQkJbmV4dCA9IERVS19IRUFQSERS X0dFVF9ORVhUKGhlYXAsIGhkcik7CisJCQkJRFVLX0hFQVBIRFJfU0VUX05FWFQoaGVhcCwgY3Vy ciwgbmV4dCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKK30KKyNlbmRpZiAg LyogRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FT U0VSVElPTlMpCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaGVhcF9pbl9oZWFwX2FsbG9j YXRlZChkdWtfaGVhcCAqaGVhcCwgZHVrX2hlYXBoZHIgKnB0cikgeworCWR1a19oZWFwaGRyICpj dXJyOworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKworCWZvciAoY3VyciA9IGhlYXAtPmhl YXBfYWxsb2NhdGVkOyBjdXJyICE9IE5VTEw7IGN1cnIgPSBEVUtfSEVBUEhEUl9HRVRfTkVYVCho ZWFwLCBjdXJyKSkgeworCQlpZiAoY3VyciA9PSBwdHIpIHsKKwkJCXJldHVybiAxOworCQl9CisJ fQorCXJldHVybiAwOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0FTU0VSVElPTlMgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9JTlRFUlJVUFRfQ09VTlRFUikKK0RVS19JTlRFUk5BTCB2b2lkIGR1 a19oZWFwX3N3aXRjaF90aHJlYWQoZHVrX2hlYXAgKmhlYXAsIGR1a19odGhyZWFkICpuZXdfdGhy KSB7CisJZHVrX2h0aHJlYWQgKmN1cnJfdGhyOworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwp OworCisJaWYgKG5ld190aHIgIT0gTlVMTCkgeworCQljdXJyX3RociA9IGhlYXAtPmN1cnJfdGhy ZWFkOworCQlpZiAoY3Vycl90aHIgPT0gTlVMTCkgeworCQkJLyogRm9yIGluaXRpYWwgZW50cnkg dXNlIGRlZmF1bHQgdmFsdWU7IHplcm8gZm9yY2VzIGFuCisJCQkgKiBpbnRlcnJ1cHQgYmVmb3Jl IGV4ZWN1dGluZyB0aGUgZmlyc3QgaW5zdHVyY3Rpb24uCisJCQkgKi8KKwkJCURVS19ERChEVUtf RERQUklOVCgic3dpdGNoIHRocmVhZCwgaW5pdGlhbCBlbnRyeSwgaW5pdCBkZWZhdWx0IGludGVy cnVwdCBjb3VudGVyIikpOworCQkJbmV3X3Roci0+aW50ZXJydXB0X2NvdW50ZXIgPSAwOworCQkJ bmV3X3Roci0+aW50ZXJydXB0X2luaXQgPSAwOworCQl9IGVsc2UgeworCQkJLyogQ29weSBpbnRl cnJ1cHQgY291bnRlci9pbml0IHZhbHVlIHN0YXRlIHRvIG5ldyB0aHJlYWQgKGlmIGFueSkuCisJ CQkgKiBJdCdzIE9LIGZvciBuZXdfdGhyIHRvIGJlIHRoZSBzYW1lIGFzIGN1cnJfdGhyLgorCQkJ ICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCQkJaWYgKG5ld190aHIgIT0gY3Vycl90 aHIpIHsKKwkJCQlEVUtfREQoRFVLX0REUFJJTlQoInN3aXRjaCB0aHJlYWQsIG5vdCBpbml0aWFs IGVudHJ5LCBjb3B5IGludGVycnVwdCBjb3VudGVyIikpOworCQkJfQorI2VuZGlmCisJCQluZXdf dGhyLT5pbnRlcnJ1cHRfY291bnRlciA9IGN1cnJfdGhyLT5pbnRlcnJ1cHRfY291bnRlcjsKKwkJ CW5ld190aHItPmludGVycnVwdF9pbml0ID0gY3Vycl90aHItPmludGVycnVwdF9pbml0OworCQl9 CisJfSBlbHNlIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJzd2l0Y2ggdGhyZWFkLCBuZXcgdGhy ZWFkIGlzIE5VTEwsIG5vIGludGVycnVwdCBjb3VudGVyIGNoYW5nZXMiKSk7CisJfQorCisJaGVh cC0+Y3Vycl90aHJlYWQgPSBuZXdfdGhyOyAgLyogbWF5IGJlIE5VTEwgKi8KK30KKyNlbmRpZiAg LyogRFVLX1VTRV9JTlRFUlJVUFRfQ09VTlRFUiAqLworLyoKKyAqICBSZWZlcmVuY2UgY291bnRp bmcgaW1wbGVtZW50YXRpb24uCisgKgorICogIElOQ1JFRi9ERUNSRUYsIGZpbmFsaXphdGlvbiBh bmQgZnJlZWluZyBvZiBvYmplY3RzIHdob3NlIHJlZmNvdW50IHJlYWNoZXMKKyAqICB6ZXJvIChy ZWZ6ZXJvKS4gIFRoZXNlIG9wZXJhdGlvbnMgYXJlIHZlcnkgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZl LCBzbworICogIHZhcmlvdXMgc21hbGwgdHJpY2tzIGFyZSB1c2VkIGluIGFuIGF0dGVtcHQgdG8g bWF4aW1pemUgc3BlZWQuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxy ZWFkeSBpbmNsdWRlZCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9DT1VOVElO RykKKworI2lmICFkZWZpbmVkKERVS19VU0VfRE9VQkxFX0xJTktFRF9IRUFQKQorI2Vycm9yIGlu dGVybmFsIGVycm9yLCByZWZlcmVuY2UgY291bnRpbmcgcmVxdWlyZXMgYSBkb3VibGUgbGlua2Vk IGhlYXAKKyNlbmRpZgorCisvKgorICogIEhlYXAgb2JqZWN0IHJlZmNvdW50IGZpbmFsaXphdGlv bi4KKyAqCisgKiAgV2hlbiBhbiBvYmplY3QgaXMgYWJvdXQgdG8gYmUgZnJlZWQsIGFsbCBvdGhl ciBvYmplY3RzIGl0IHJlZmVycyB0byBtdXN0CisgKiAgYmUgZGVjcmVmJ2QuICBSZWZjb3VudCBm aW5hbGl6YXRpb24gZG9lcyBOT1QgZnJlZSB0aGUgb2JqZWN0IG9yIGl0cyBpbm5lcgorICogIGFs bG9jYXRpb25zIChtYXJrLWFuZC1zd2VlcCBzaGFyZXMgdGhlc2UgaGVscGVycyksIGl0IGp1c3Qg bWFuaXB1bGF0ZXMKKyAqICB0aGUgcmVmY291bnRzLgorICoKKyAqICBOb3RlIHRoYXQgYW55IG9m IHRoZSBERUNSRUZzIG1heSBjYXVzZSBhIHJlZmNvdW50IHRvIGRyb3AgdG8gemVyby4gIElmIHNv LAorICogIHRoZSBvYmplY3Qgd29uJ3QgYmUgcmVmemVybyBwcm9jZXNzZWQgaW5saW5lLCBidXQg d2lsbCBqdXN0IGJlIHF1ZXVlZCB0bworICogIHJlZnplcm9fbGlzdCBhbmQgcHJvY2Vzc2VkIGJ5 IGFuIGVhcmxpZXIgY2FsbGVyIHdvcmtpbmcgb24gcmVmemVyb19saXN0LAorICogIGVsaW1pbmF0 aW5nIEMgcmVjdXJzaW9uIGZyb20gZXZlbiBsb25nIHJlZnplcm8gY2FzY2FkZXMuICBJZiByZWZ6 ZXJvCisgKiAgZmluYWxpemF0aW9uIGlzIHRyaWdnZXJlZCBieSBtYXJrLWFuZC1zd2VlcCwgcmVm emVybyBjb25kaXRpb25zIGFyZSBpZ25vcmVkCisgKiAgKG9iamVjdHMgYXJlIG5vdCBldmVuIHF1 ZXVlZCB0byByZWZ6ZXJvX2xpc3QpIGJlY2F1c2UgbWFyay1hbmQtc3dlZXAgZGVhbHMKKyAqICB3 aXRoIHRoZW07IHJlZmNvdW50cyBhcmUgc3RpbGwgdXBkYXRlZCBzbyB0aGF0IHRoZXkgcmVtYWlu IGluIHN5bmMgd2l0aAorICogIGFjdHVhbCByZWZlcmVuY2VzLgorICovCisKK0RVS19MT0NBTCB2 b2lkIGR1a19fZGVjcmVmX3R2YWxzX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2 LCBkdWtfaWR4X3QgY291bnQpIHsKKwlEVUtfQVNTRVJUKGNvdW50ID09IDAgfHwgdHYgIT0gTlVM TCk7CisKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJRFVLX1RWQUxfREVDUkVGX05PUloodGhy LCB0dik7CisJCXR2Kys7CisJfQorfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaG9iamVjdF9y ZWZjb3VudF9maW5hbGl6ZV9ub3J6KGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqaCkgewor CWR1a19odGhyZWFkICp0aHI7CisJZHVrX3VpbnRfZmFzdDMyX3QgaTsKKwlkdWtfdWludF9mYXN0 MzJfdCBuOworCWR1a19wcm9wdmFsdWUgKnBfdmFsOworCWR1a190dmFsICpwX3R2OworCWR1a19o c3RyaW5nICoqcF9rZXk7CisJZHVrX3VpbnQ4X3QgKnBfZmxhZzsKKwlkdWtfaG9iamVjdCAqaF9w cm90bzsKKworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGhlYXAtPmhl YXBfdGhyZWFkICE9IE5VTEwpOworCURVS19BU1NFUlQoaCk7CisJRFVLX0FTU0VSVChEVUtfSEVB UEhEUl9HRVRfVFlQRSgoZHVrX2hlYXBoZHIgKikgaCkgPT0gRFVLX0hUWVBFX09CSkVDVCk7CisK Kwl0aHIgPSBoZWFwLT5oZWFwX3RocmVhZDsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwor CXBfa2V5ID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZX0JBU0UoaGVhcCwgaCk7CisJcF92YWwgPSBE VUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9CQVNFKGhlYXAsIGgpOworCXBfZmxhZyA9IERVS19IT0JK RUNUX0VfR0VUX0ZMQUdTX0JBU0UoaGVhcCwgaCk7CisJbiA9IERVS19IT0JKRUNUX0dFVF9FTkVY VChoKTsKKwl3aGlsZSAobi0tID4gMCkgeworCQlkdWtfaHN0cmluZyAqa2V5OworCisJCWtleSA9 IHBfa2V5W25dOworCQlpZiAoRFVLX1VOTElLRUxZKGtleSA9PSBOVUxMKSkgeworCQkJY29udGlu dWU7CisJCX0KKwkJRFVLX0hTVFJJTkdfREVDUkVGX05PUloodGhyLCBrZXkpOworCQlpZiAoRFVL X1VOTElLRUxZKHBfZmxhZ1tuXSAmIERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSkgeworCQkJ ZHVrX2hvYmplY3QgKmhfZ2V0c2V0OworCQkJaF9nZXRzZXQgPSBwX3ZhbFtuXS5hLmdldDsKKwkJ CURVS19BU1NFUlQoaF9nZXRzZXQgPT0gTlVMTCB8fCBEVUtfSEVBUEhEUl9JU19PQkpFQ1QoKGR1 a19oZWFwaGRyICopIGhfZ2V0c2V0KSk7CisJCQlEVUtfSE9CSkVDVF9ERUNSRUZfTk9SWl9BTExP V05VTEwodGhyLCBoX2dldHNldCk7CisJCQloX2dldHNldCA9IHBfdmFsW25dLmEuc2V0OworCQkJ RFVLX0FTU0VSVChoX2dldHNldCA9PSBOVUxMIHx8IERVS19IRUFQSERSX0lTX09CSkVDVCgoZHVr X2hlYXBoZHIgKikgaF9nZXRzZXQpKTsKKwkJCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX0FMTE9X TlVMTCh0aHIsIGhfZ2V0c2V0KTsKKwkJfSBlbHNlIHsKKwkJCWR1a190dmFsICp0dl92YWw7CisJ CQl0dl92YWwgPSAmcF92YWxbbl0udjsKKwkJCURVS19UVkFMX0RFQ1JFRl9OT1JaKHRociwgdHZf dmFsKTsKKwkJfQorCX0KKworCXBfdHYgPSBEVUtfSE9CSkVDVF9BX0dFVF9CQVNFKGhlYXAsIGgp OworCW4gPSBEVUtfSE9CSkVDVF9HRVRfQVNJWkUoaCk7CisJd2hpbGUgKG4tLSA+IDApIHsKKwkJ ZHVrX3R2YWwgKnR2X3ZhbDsKKwkJdHZfdmFsID0gcF90diArIG47CisJCURVS19UVkFMX0RFQ1JF Rl9OT1JaKHRociwgdHZfdmFsKTsKKwl9CisKKwkvKiBIYXNoIHBhcnQgaXMgYSAnd2VhayByZWZl cmVuY2UnIGFuZCBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gcmVmY291bnRzLiAqLworCisJaF9wcm90 byA9IChkdWtfaG9iamVjdCAqKSBEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKGhlYXAsIGgpOwor CURVS19BU1NFUlQoaF9wcm90byA9PSBOVUxMIHx8IERVS19IRUFQSERSX0lTX09CSkVDVCgoZHVr X2hlYXBoZHIgKikgaF9wcm90bykpOworCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX0FMTE9XTlVM TCh0aHIsIGhfcHJvdG8pOworCisJLyogWFhYOiBPYmplY3Qgc3ViY2xhc3MgdGVzdHMgYXJlIHF1 aXRlIGF3a3dhcmQgYXQgcHJlc2VudCwgaWRlYWxseQorCSAqIHdlIHNob3VsZCBiZSBhYmxlIHRv IHN3aXRjaC1jYXNlIGhlcmUgd2l0aCBhIGRlbnNlIGluZGV4IChzdWJ0eXBlCisJICogbnVtYmVy IG9yIHNvbWV0aGluZykuICBGb3Igbm93LCBmYXN0IHBhdGggcGxhaW4gb2JqZWN0cyBhbmQgYXJy YXlzCisJICogYW5kIGJpdCB0ZXN0IHRoZSByZXN0IGluZGl2aWR1YWxseS4KKwkgKi8KKworCWlm IChEVUtfSE9CSkVDVF9IQVNfRkFTVFJFRlMoaCkpIHsKKwkJLyogUGxhaW4gb2JqZWN0IG9yIGFy cmF5LCBub3RoaW5nIG1vcmUgdG8gZG8uICBXaGlsZSBhCisJCSAqIGR1a19oYXJyYXkgaGFzIGFk ZGl0aW9uYWwgZmllbGRzLCBub25lIG9mIHRoZW0gbmVlZAorCQkgKiBERUNSRUYgdXBkYXRlcy4K KwkJICovCisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfQUxMT1dTX0ZBU1RSRUZTKGgpKTsKKwkJ cmV0dXJuOworCX0KKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX1BST0hJQklUU19GQVNUUkVGUyho KSk7CisKKwkvKiBTbG93IHBhdGg6IHNwZWNpYWwgb2JqZWN0LCBzdGFydCBiaXQgY2hlY2tzIGZy b20gbW9zdCBsaWtlbHkuICovCisKKwkvKiBYWFg6IHJlb3JnLCBtb3JlIGNvbW1vbiBmaXJzdCAq LworCWlmIChEVUtfSE9CSkVDVF9JU19DT01QRlVOQyhoKSkgeworCQlkdWtfaGNvbXBmdW5jICpm ID0gKGR1a19oY29tcGZ1bmMgKikgaDsKKwkJZHVrX3R2YWwgKnR2LCAqdHZfZW5kOworCQlkdWtf aG9iamVjdCAqKmZ1bmNzLCAqKmZ1bmNzX2VuZDsKKworCQlEVUtfQVNTRVJUX0hDT01QRlVOQ19W QUxJRChmKTsKKworCQlpZiAoRFVLX0xJS0VMWShEVUtfSENPTVBGVU5DX0dFVF9EQVRBKGhlYXAs IGYpICE9IE5VTEwpKSB7CisJCQl0diA9IERVS19IQ09NUEZVTkNfR0VUX0NPTlNUU19CQVNFKGhl YXAsIGYpOworCQkJdHZfZW5kID0gRFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0VORChoZWFwLCBm KTsKKwkJCXdoaWxlICh0diA8IHR2X2VuZCkgeworCQkJCURVS19UVkFMX0RFQ1JFRl9OT1JaKHRo ciwgdHYpOworCQkJCXR2Kys7CisJCQl9CisKKwkJCWZ1bmNzID0gRFVLX0hDT01QRlVOQ19HRVRf RlVOQ1NfQkFTRShoZWFwLCBmKTsKKwkJCWZ1bmNzX2VuZCA9IERVS19IQ09NUEZVTkNfR0VUX0ZV TkNTX0VORChoZWFwLCBmKTsKKwkJCXdoaWxlIChmdW5jcyA8IGZ1bmNzX2VuZCkgeworCQkJCWR1 a19ob2JqZWN0ICpoX2Z1bmM7CisJCQkJaF9mdW5jID0gKmZ1bmNzOworCQkJCURVS19BU1NFUlQo aF9mdW5jICE9IE5VTEwpOworCQkJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfSVNfT0JKRUNUKChk dWtfaGVhcGhkciAqKSBoX2Z1bmMpKTsKKwkJCQlEVUtfSENPTVBGVU5DX0RFQ1JFRl9OT1JaKHRo ciwgKGR1a19oY29tcGZ1bmMgKikgaF9mdW5jKTsKKwkJCQlmdW5jcysrOworCQkJfQorCQl9IGVs c2UgeworCQkJLyogTWF5IGhhcHBlbiBpbiBzb21lIG91dC1vZi1tZW1vcnkgY29ybmVyIGNhc2Vz LiAqLworCQkJRFVLX0QoRFVLX0RQUklOVCgiZHVrX2hjb21wZnVuYyAnZGF0YScgaXMgTlVMTCwg c2tpcHBpbmcgZGVjcmVmIikpOworCQl9CisKKwkJRFVLX0hFQVBIRFJfREVDUkVGX0FMTE9XTlVM TCh0aHIsIChkdWtfaGVhcGhkciAqKSBEVUtfSENPTVBGVU5DX0dFVF9MRVhFTlYoaGVhcCwgZikp OworCQlEVUtfSEVBUEhEUl9ERUNSRUZfQUxMT1dOVUxMKHRociwgKGR1a19oZWFwaGRyICopIERV S19IQ09NUEZVTkNfR0VUX1ZBUkVOVihoZWFwLCBmKSk7CisJCURVS19IRUFQSERSX0RFQ1JFRl9B TExPV05VTEwodGhyLCAoZHVrX2hidWZmZXIgKikgRFVLX0hDT01QRlVOQ19HRVRfREFUQShoZWFw LCBmKSk7CisJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19ERUNFTlYoaCkpIHsKKwkJZHVrX2hk ZWNlbnYgKmUgPSAoZHVrX2hkZWNlbnYgKikgaDsKKwkJRFVLX0FTU0VSVF9IREVDRU5WX1ZBTElE KGUpOworCQlEVUtfSFRIUkVBRF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhyLCBlLT50aHJlYWQp OworCQlEVUtfSE9CSkVDVF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhyLCBlLT52YXJtYXApOwor CX0gZWxzZSBpZiAoRFVLX0hPQkpFQ1RfSVNfT0JKRU5WKGgpKSB7CisJCWR1a19ob2JqZW52ICpl ID0gKGR1a19ob2JqZW52ICopIGg7CisJCURVS19BU1NFUlRfSE9CSkVOVl9WQUxJRChlKTsKKwkJ RFVLX0FTU0VSVChlLT50YXJnZXQgIT0gTlVMTCk7ICAvKiBSZXF1aXJlZCBmb3Igb2JqZWN0IGVu dmlyb25tZW50cy4gKi8KKwkJRFVLX0hPQkpFQ1RfREVDUkVGX05PUloodGhyLCBlLT50YXJnZXQp OworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKwl9IGVsc2UgaWYg KERVS19IT0JKRUNUX0lTX0JVRk9CSihoKSkgeworCQlkdWtfaGJ1Zm9iaiAqYiA9IChkdWtfaGJ1 Zm9iaiAqKSBoOworCQlEVUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQoYik7CisJCURVS19IQlVGRkVS X0RFQ1JFRl9OT1JaX0FMTE9XTlVMTCh0aHIsIChkdWtfaGJ1ZmZlciAqKSBiLT5idWYpOworCQlE VUtfSE9CSkVDVF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhyLCAoZHVrX2hvYmplY3QgKikgYi0+ YnVmX3Byb3ApOworI2VuZGlmICAvKiBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUICovCisJ fSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19CT1VOREZVTkMoaCkpIHsKKwkJZHVrX2hib3VuZGZ1 bmMgKmYgPSAoZHVrX2hib3VuZGZ1bmMgKikgKHZvaWQgKikgaDsKKwkJRFVLX0FTU0VSVF9IQk9V TkRGVU5DX1ZBTElEKGYpOworCQlEVUtfVFZBTF9ERUNSRUZfTk9SWih0aHIsICZmLT50YXJnZXQp OworCQlEVUtfVFZBTF9ERUNSRUZfTk9SWih0aHIsICZmLT50aGlzX2JpbmRpbmcpOworCQlkdWtf X2RlY3JlZl90dmFsc19ub3J6KHRociwgZi0+YXJncywgZi0+bmFyZ3MpOworI2lmIGRlZmluZWQo RFVLX1VTRV9FUzZfUFJPWFkpCisJfSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19QUk9YWShoKSkg eworCQlkdWtfaHByb3h5ICpwID0gKGR1a19ocHJveHkgKikgaDsKKwkJRFVLX0FTU0VSVF9IUFJP WFlfVkFMSUQocCk7CisJCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaKHRociwgcC0+dGFyZ2V0KTsK KwkJRFVLX0hPQkpFQ1RfREVDUkVGX05PUloodGhyLCBwLT5oYW5kbGVyKTsKKyNlbmRpZiAgLyog RFVLX1VTRV9FUzZfUFJPWFkgKi8KKwl9IGVsc2UgaWYgKERVS19IT0JKRUNUX0lTX1RIUkVBRCho KSkgeworCQlkdWtfaHRocmVhZCAqdCA9IChkdWtfaHRocmVhZCAqKSBoOworCQlkdWtfYWN0aXZh dGlvbiAqYWN0OworCQlkdWtfdHZhbCAqdHY7CisKKwkJRFVLX0FTU0VSVF9IVEhSRUFEX1ZBTElE KHQpOworCisJCXR2ID0gdC0+dmFsc3RhY2s7CisJCXdoaWxlICh0diA8IHQtPnZhbHN0YWNrX3Rv cCkgeworCQkJRFVLX1RWQUxfREVDUkVGX05PUloodGhyLCB0dik7CisJCQl0disrOworCQl9CisK KwkJZm9yIChhY3QgPSB0LT5jYWxsc3RhY2tfY3VycjsgYWN0ICE9IE5VTEw7IGFjdCA9IGFjdC0+ cGFyZW50KSB7CisJCQlEVUtfSE9CSkVDVF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhyLCAoZHVr X2hvYmplY3QgKikgRFVLX0FDVF9HRVRfRlVOQyhhY3QpKTsKKwkJCURVS19IT0JKRUNUX0RFQ1JF Rl9OT1JaX0FMTE9XTlVMTCh0aHIsIChkdWtfaG9iamVjdCAqKSBhY3QtPnZhcl9lbnYpOworCQkJ RFVLX0hPQkpFQ1RfREVDUkVGX05PUlpfQUxMT1dOVUxMKHRociwgKGR1a19ob2JqZWN0ICopIGFj dC0+bGV4X2Vudik7CisjaWYgZGVmaW5lZChEVUtfVVNFX05PTlNURF9GVU5DX0NBTExFUl9QUk9Q RVJUWSkKKwkJCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX0FMTE9XTlVMTCh0aHIsIChkdWtfaG9i amVjdCAqKSBhY3QtPnByZXZfY2FsbGVyKTsKKyNlbmRpZgorI2lmIDAgIC8qIG5vdGhpbmcgbm93 ICovCisJCQlmb3IgKGNhdCA9IGFjdC0+Y2F0OyBjYXQgIT0gTlVMTDsgY2F0ID0gY2F0LT5wYXJl bnQpIHsKKwkJCX0KKyNlbmRpZgorCQl9CisKKworCQlmb3IgKGkgPSAwOyBpIDwgRFVLX05VTV9C VUlMVElOUzsgaSsrKSB7CisJCQlEVUtfSE9CSkVDVF9ERUNSRUZfTk9SWl9BTExPV05VTEwodGhy LCAoZHVrX2hvYmplY3QgKikgdC0+YnVpbHRpbnNbaV0pOworCQl9CisKKwkJRFVLX0hUSFJFQURf REVDUkVGX05PUlpfQUxMT1dOVUxMKHRociwgKGR1a19odGhyZWFkICopIHQtPnJlc3VtZXIpOwor CX0gZWxzZSB7CisJCS8qIFdlIG1heSBjb21lIGhlcmUgaWYgdGhlIG9iamVjdCBzaG91bGQgaGF2 ZSBhIEZBU1RSRUZTIGZsYWcKKwkJICogYnV0IGl0J3MgbWlzc2luZyBmb3Igc29tZSByZWFzb24u ICBBc3NlcnQgZm9yIG5ldmVyIGdldHRpbmcKKwkJICogaGVyZTsgaG93ZXZlciwgb3RoZXIgdGhh biBwZXJmb3JtYW5jZSwgdGhpcyBpcyBoYXJtbGVzcy4KKwkJICovCisJCURVS19EKERVS19EUFJJ TlQoIm1pc3NpbmcgRkFTVFJFRlMgZmxhZyBmb3I6ICUhaU8iLCBoKSk7CisJCURVS19BU1NFUlQo MCk7CisJfQorfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaGVhcGhkcl9yZWZjb3VudF9maW5h bGl6ZV9ub3J6KGR1a19oZWFwICpoZWFwLCBkdWtfaGVhcGhkciAqaGRyKSB7CisJRFVLX0FTU0VS VChoZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQoaGVhcC0+aGVhcF90aHJlYWQgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVChoZHIgIT0gTlVMTCk7CisKKwlpZiAoRFVLX0hFQVBIRFJfSVNfT0JKRUNU KGhkcikpIHsKKwkJZHVrX2hvYmplY3RfcmVmY291bnRfZmluYWxpemVfbm9yeihoZWFwLCAoZHVr X2hvYmplY3QgKikgaGRyKTsKKwl9CisJLyogRFVLX0hUWVBFX0JVRkZFUjogbm90aGluZyB0byBm aW5hbGl6ZSAqLworCS8qIERVS19IVFlQRV9TVFJJTkc6IG5vdGhpbmcgdG8gZmluYWxpemUgKi8K K30KKworLyoKKyAqICBSZWZ6ZXJvIHByb2Nlc3NpbmcgZm9yIGR1a19ob2JqZWN0OiBxdWV1ZSBh IHJlZnplcm8nZWQgb2JqZWN0IHRvIGVpdGhlcgorICogIGZpbmFsaXplX2xpc3Qgb3IgcmVmemVy b19saXN0IGFuZCBwcm9jZXNzIHRoZSByZWxldmVudCBsaXN0KHMpIGlmCisgKiAgbmVjZXNzYXJ5 LgorICoKKyAqICBSZWZ6ZXJvX2xpc3QgaXMgc2luZ2xlIGxpbmtlZCwgd2l0aCBvbmx5ICdwcmV2 JyBwb2ludGVycyBzZXQgYW5kIHZhbGlkLgorICogIEFsbCAnbmV4dCcgcG9pbnRlcnMgYXJlIGlu dGVudGlvbmFsbHkgbGVmdCBhcyBnYXJiYWdlLiAgVGhpcyBkb2Vzbid0CisgKiAgbWF0dGVyIGJl Y2F1c2UgcmVmemVyb19saXN0IGlzIHByb2Nlc3NlZCB0byBjb21wbGV0aW9uIGJlZm9yZSBhbnkg b3RoZXIKKyAqICBjb2RlIChsaWtlIG1hcmstYW5kLXN3ZWVwKSBtaWdodCB3YWxrIHRoZSBsaXN0 LgorICoKKyAqICBJbiBtb3JlIGRldGFpbDoKKyAqCisgKiAgLSBPbiBmaXJzdCBpbnNlcnQgcmVm emVyb19saXN0IGlzIE5VTEwgYW5kIHRoZSBuZXcgb2JqZWN0IGJlY29tZXMgdGhlCisgKiAgICBm aXJzdCBhbmQgb25seSBlbGVtZW50IG9uIHRoZSBsaXN0OyBkdWtfX3JlZmNvdW50X2ZyZWVfcGVu ZGluZygpIGlzCisgKiAgICBjYWxsZWQgYW5kIGl0IHN0YXJ0cyBwcm9jZXNzaW5nIHRoZSBsaXN0 IGZyb20gdGhlIGluaXRpYWwgZWxlbWVudCwKKyAqICAgIGkuZS4gdGhlIGxpc3QgdGFpbC4KKyAq CisgKiAgLSBBcyBlYWNoIG9iamVjdCBpcyByZWZjb3VudCBmaW5hbGl6ZWQsIG5ldyBvYmplY3Rz IG1heSBiZSBxdWV1ZWQgdG8KKyAqICAgIHJlZnplcm9fbGlzdCBoZWFkLiAgVGhlaXIgJ25leHQn IHBvaW50ZXJzIGFyZSBsZWZ0IGFzIGdhcmJhZ2UsIGJ1dAorICogICAgJ3ByZXYnIHBvaW50cyBh cmUgc2V0IGNvcnJlY3RseSwgd2l0aCB0aGUgZWxlbWVudCBhdCByZWZ6ZXJvX2xpc3QKKyAqICAg IGhhdmluZyBhIE5VTEwgJ3ByZXYnIHBvaW50ZXIuICBUaGUgZmFjdCB0aGF0IHJlZnplcm9fbGlz dCBpcyBub24tTlVMTAorICogICAgaXMgdXNlZCB0byByZWplY3QgKDEpIHJlY3Vyc2l2ZSBkdWtf X3JlZmNvdW50X2ZyZWVfcGVuZGluZygpIGFuZAorICogICAgKDIpIGZpbmFsaXplX2xpc3QgcHJv Y2Vzc2luZyBjYWxscy4KKyAqCisgKiAgLSBXaGVuIHdlJ3JlIGRvbmUgd2l0aCB0aGUgY3VycmVu dCBvYmplY3QsIHJlYWQgaXRzICdwcmV2JyBwb2ludGVyIGFuZAorICogICAgZnJlZSB0aGUgb2Jq ZWN0LiAgSWYgJ3ByZXYnIGlzIE5VTEwsIHdlJ3ZlIHJlYWNoZWQgaGVhZCBvZiBsaXN0IGFuZCBh cmUKKyAqICAgIGRvbmU6IHNldCByZWZ6ZXJvX2xpc3QgdG8gTlVMTCBhbmQgcHJvY2VzcyBwZW5k aW5nIGZpbmFsaXplcnMuICBPdGhlcndpc2UKKyAqICAgIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhl IGxpc3QuCisgKgorICogIEEgcmVmemVybyBjYXNjYWRlIGlzIGZyZWUgb2Ygc2lkZSBlZmZlY3Rz IGJlY2F1c2UgaXQgb25seSBpbnZvbHZlcworICogIHF1ZXVlaW5nIG1vcmUgb2JqZWN0cyBhbmQg ZnJlZWluZyBtZW1vcnk7IGZpbmFsaXplciBleGVjdXRpb24gaXMgYmxvY2tlZAorICogIGluIHRo ZSBjb2RlIHBhdGggcXVldWVpbmcgb2JqZWN0cyB0byBmaW5hbGl6ZV9saXN0LiAgQXMgYSByZXN1 bHQgdGhlCisgKiAgaW5pdGlhbCByZWZ6ZXJvIGNhbGwgKHdoaWNoIHRyaWdnZXJzIGR1a19fcmVm Y291bnRfZnJlZV9wZW5kaW5nKCkpIG11c3QKKyAqICBjaGVjayBmaW5hbGl6ZV9saXN0IHNvIHRo YXQgZmluYWxpemVycyBhcmUgZXhlY3V0ZWQgc25hcHBpbHkuCisgKgorICogIElmIGZpbmFsaXpl X2xpc3QgcHJvY2Vzc2luZyBzdGFydHMgZmlyc3QsIHJlZnplcm8gbWF5IG9jY3VyIHdoaWxlIHdl J3JlCisgKiAgcHJvY2Vzc2luZyBmaW5hbGl6ZXJzLiAgVGhhdCdzIGZpbmU6IHRoYXQgcGFydGlj dWxhciByZWZ6ZXJvIGNhc2NhZGUgaXMKKyAqICBoYW5kbGVkIHRvIGNvbXBsZXRpb24gd2l0aG91 dCBzaWRlIGVmZmVjdHMuICBPbmNlIHRoZSBjYXNjYWRlIGlzIGNvbXBsZXRlLAorICogIHdlJ2xs IHJ1biBwZW5kaW5nIGZpbmFsaXplcnMgYnV0IG5vdGljZSB0aGF0IHdlJ3JlIGFscmVhZHkgZG9p bmcgdGhhdCBhbmQKKyAqICByZXR1cm4uCisgKgorICogIFRoaXMgY291bGQgYmUgZXhwYW5kZWQg dG8gYWxsb3cgaW5jcmVtZW50YWwgZnJlZWluZzoganVzdCBiYWlsIG91dAorICogIGVhcmx5IGFu ZCByZXN1bWUgYXQgYSBmdXR1cmUgYWxsb2MvZGVjcmVmL3JlZnplcm8uICBIb3dldmVyLCBpZiB0 aGF0CisgKiAgd2VyZSBkb25lLCB0aGUgbGlzdCBzdHJ1Y3R1cmUgd291bGQgbmVlZCB0byBiZSBr ZXB0IGNvbnNpc3RlbnQgYXQgYWxsCisgKiAgdGltZXMsIG1hcmstYW5kLXN3ZWVwIHdvdWxkIG5l ZWQgdG8gaGFuZGxlIHJlZnplcm9fbGlzdCwgZXRjLgorICovCisKK0RVS19MT0NBTCB2b2lkIGR1 a19fcmVmY291bnRfZnJlZV9wZW5kaW5nKGR1a19oZWFwICpoZWFwKSB7CisJZHVrX2hlYXBoZHIg KmN1cnI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCWR1a19pbnRfdCBjb3VudCA9IDA7 CisjZW5kaWYKKworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKworCWN1cnIgPSBoZWFwLT5y ZWZ6ZXJvX2xpc3Q7CisJRFVLX0FTU0VSVChjdXJyICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVL X0hFQVBIRFJfR0VUX1BSRVYoaGVhcCwgY3VycikgPT0gTlVMTCk7ICAvKiBXZSdyZSBjYWxsZWQg b24gaW5pdGlhbCBpbnNlcnQgb25seS4gKi8KKwkvKiBjdXJyLT5uZXh0IGlzIEdBUkJBR0UuICov CisKKwlkbyB7CisJCWR1a19oZWFwaGRyICpwcmV2OworCisJCURVS19EREQoRFVLX0RERFBSSU5U KCJyZWZ6ZXJvIHByb2Nlc3NpbmcgJXA6ICUhTyIsICh2b2lkICopIGN1cnIsIChkdWtfaGVhcGhk ciAqKSBjdXJyKSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCWNvdW50Kys7Cisj ZW5kaWYKKworCQlEVUtfQVNTRVJUKGN1cnIgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoRFVLX0hF QVBIRFJfR0VUX1RZUEUoY3VycikgPT0gRFVLX0hUWVBFX09CSkVDVCk7ICAvKiBjdXJyZW50bHks IGFsd2F5cyB0aGUgY2FzZSAqLworCQkvKiBGSU5BTElaRUQgbWF5IGJlIHNldDsgZG9uJ3QgY2Fy ZSBhYm91dCBmbGFncyBoZXJlLiAqLworCisJCS8qIFJlZmNvdW50IGZpbmFsaXplICdjdXJyJy4g IFJlZnplcm9fbGlzdCBtdXN0IGJlIG5vbi1OVUxMCisJCSAqIGhlcmUgdG8gcHJldmVudCByZWN1 cnNpdmUgZW50cnkgdG8gZHVrX19yZWZjb3VudF9mcmVlX3BlbmRpbmcoKS4KKwkJICovCisJCURV S19BU1NFUlQoaGVhcC0+cmVmemVyb19saXN0ICE9IE5VTEwpOworCQlkdWtfaG9iamVjdF9yZWZj b3VudF9maW5hbGl6ZV9ub3J6KGhlYXAsIChkdWtfaG9iamVjdCAqKSBjdXJyKTsKKworCQlwcmV2 ID0gRFVLX0hFQVBIRFJfR0VUX1BSRVYoaGVhcCwgY3Vycik7CisJCURVS19BU1NFUlQoKHByZXYg PT0gTlVMTCAmJiBoZWFwLT5yZWZ6ZXJvX2xpc3QgPT0gY3VycikgfHwgXAorCQkgICAgICAgICAg IChwcmV2ICE9IE5VTEwgJiYgaGVhcC0+cmVmemVyb19saXN0ICE9IGN1cnIpKTsKKwkJLyogcHJl di0+bmV4dCBpcyBpbnRlbnRpb25hbGx5IG5vdCB1cGRhdGVkIGFuZCBpcyBnYXJiYWdlLiAqLwor CisJCWR1a19mcmVlX2hvYmplY3QoaGVhcCwgKGR1a19ob2JqZWN0ICopIGN1cnIpOyAgLyogSW52 YWxpZGF0ZXMgJ2N1cnInLiAqLworCisJCWN1cnIgPSBwcmV2OworCX0gd2hpbGUgKGN1cnIgIT0g TlVMTCk7CisKKwloZWFwLT5yZWZ6ZXJvX2xpc3QgPSBOVUxMOworCisJRFVLX0REKERVS19ERFBS SU5UKCJyZWZ6ZXJvIHByb2Nlc3NlZCAlbGQgb2JqZWN0cyIsIChsb25nKSBjb3VudCkpOworfQor CitEVUtfTE9DQUwgRFVLX0lOTElORSB2b2lkIGR1a19fcmVmY291bnRfcmVmemVyb19ob2JqZWN0 KGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfYm9vbF90IHNraXBfZnJlZV9w ZW5kaW5nKSB7CisJZHVrX2hlYXBoZHIgKmhkcjsKKwlkdWtfaGVhcGhkciAqcm9vdDsKKworCURV S19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGhlYXAtPmhlYXBfdGhyZWFkICE9 IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hFQVBI RFJfR0VUX1RZUEUoKGR1a19oZWFwaGRyICopIG9iaikgPT0gRFVLX0hUWVBFX09CSkVDVCk7CisK KwloZHIgPSAoZHVrX2hlYXBoZHIgKikgb2JqOworCisJLyogUmVmemVybydkIG9iamVjdHMgbXVz dCBiZSBpbiBoZWFwX2FsbG9jYXRlZC4gIFRoZXkgY2FuJ3QgYmUgaW4KKwkgKiBmaW5hbGl6ZV9s aXN0IGJlY2F1c2UgYWxsIG9iamVjdHMgb24gZmluYWxpemVfbGlzdCBoYXZlIGFuCisJICogYXJ0 aWZpY2lhbCArMSByZWZjb3VudCBidW1wLgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NF UlRJT05TKQorCURVS19BU1NFUlQoZHVrX2hlYXBfaW5faGVhcF9hbGxvY2F0ZWQoaGVhcCwgKGR1 a19oZWFwaGRyICopIG9iaikpOworI2VuZGlmCisKKwlEVUtfSEVBUF9SRU1PVkVfRlJPTV9IRUFQ X0FMTE9DQVRFRChoZWFwLCBoZHIpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZJTkFMSVpFUl9T VVBQT1JUKQorCS8qIFRoaXMgZmluYWxpemVyIGNoZWNrIE1VU1QgQkUgc2lkZSBlZmZlY3QgZnJl ZS4gIEl0IHNob3VsZCBhbHNvIGJlCisJICogYXMgZmFzdCBhcyBwb3NzaWJsZSBiZWNhdXNlIGl0 J3MgYXBwbGllZCB0byBldmVyeSBvYmplY3QgZnJlZWQuCisJICovCisJaWYgKERVS19VTkxJS0VM WShEVUtfSE9CSkVDVF9IQVNfRklOQUxJWkVSX0ZBU1QoaGVhcCwgKGR1a19ob2JqZWN0ICopIGhk cikgIT0gMFUpKSB7CisJCS8qIFNwZWNpYWwgY2FzZTogRklOQUxJWkVEIG1heSBiZSBzZXQgaWYg bWFyay1hbmQtc3dlZXAgcXVldWVkCisJCSAqIG9iamVjdCBmb3IgZmluYWxpemF0aW9uLCB0aGUg ZmluYWxpemVyIHdhcyBleGVjdXRlZCAoYW5kCisJCSAqIEZJTkFMSVpFRCBzZXQpLCBtYXJrLWFu ZC1zd2VlcCBoYXNuJ3QgeWV0IHByb2Nlc3NlZCB0aGUKKwkJICogb2JqZWN0IGFnYWluLCBidXQg aXRzIHJlZmNvdW50IGRyb3BzIHRvIHplcm8uICBGcmVlIHdpdGhvdXQKKwkJICogcnVubmluZyB0 aGUgZmluYWxpemVyIGFnYWluLgorCQkgKi8KKwkJaWYgKERVS19IRUFQSERSX0hBU19GSU5BTEla RUQoaGRyKSkgeworCQkJRFVLX0QoRFVLX0RQUklOVCgicmVmemVybydkIG9iamVjdCBoYXMgZmlu YWxpemVyIGFuZCBGSU5BTElaRUQgaXMgc2V0IC0+IGZyZWUiKSk7CisJCX0gZWxzZSB7CisJCQkv KiBTZXQgRklOQUxJWkFCTEUgZmxhZyBzbyB0aGF0IGFsbCBvYmplY3RzIG9uIGZpbmFsaXplX2xp c3QKKwkJCSAqIHdpbGwgaGF2ZSBpdCBzZXQgYW5kIGFyZSB0aHVzIGRldGVjdGFibGUgYmFzZWQg b24gdGhlCisJCQkgKiBmbGFnIGFsb25lLgorCQkJICovCisJCQlEVUtfSEVBUEhEUl9TRVRfRklO QUxJWkFCTEUoaGRyKTsKKwkJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19GSU5BTElaRUQo aGRyKSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCQkJLyog QnVtcCByZWZjb3VudCBvbiBmaW5hbGl6ZV9saXN0IGluc2VydCBzbyB0aGF0IGEKKwkJCSAqIHJl Znplcm8gY2FuIG5ldmVyIG9jY3VyIHdoZW4gYW4gb2JqZWN0IGlzIHdhaXRpbmcKKwkJCSAqIGZv ciBpdHMgZmluYWxpemVyIGNhbGwuICBSZWZ6ZXJvIG1pZ2h0IG90aGVyd2lzZQorCQkJICogbm93 IGhhcHBlbiBiZWNhdXNlIHdlIGFsbG93IGR1a19wdXNoX2hlYXBwdHIoKSBmb3IKKwkJCSAqIG9i amVjdHMgcGVuZGluZyBmaW5hbGl6YXRpb24uCisJCQkgKi8KKwkJCURVS19IRUFQSERSX1BSRUlO Q19SRUZDT1VOVChoZHIpOworI2VuZGlmCisJCQlEVUtfSEVBUF9JTlNFUlRfSU5UT19GSU5BTEla RV9MSVNUKGhlYXAsIGhkcik7CisKKwkJCS8qIFByb2Nlc3MgZmluYWxpemVycyB1bmxlc3Mgc2tp cHBpbmcgaXMgZXhwbGljaXRseQorCQkJICogcmVxdWVzdGVkIChOT1JaKSBvciByZWZ6ZXJvX2xp c3QgaXMgYmVpbmcgcHJvY2Vzc2VkCisJCQkgKiAoYXZvaWRzIHNpZGUgZWZmZWN0cyBkdXJpbmcg YSByZWZ6ZXJvIGNhc2NhZGUpLgorCQkJICogSWYgcmVmemVyb19saXN0IGlzIHByb2Nlc3NlZCwg dGhlIGluaXRpYWwgcmVmemVybworCQkJICogY2FsbCB3aWxsIHJ1biBwZW5kaW5nIGZpbmFsaXpl cnMgd2hlbiByZWZ6ZXJvX2xpc3QKKwkJCSAqIGlzIGRvbmUuCisJCQkgKi8KKwkJCWlmICghc2tp cF9mcmVlX3BlbmRpbmcgJiYgaGVhcC0+cmVmemVyb19saXN0ID09IE5VTEwpIHsKKwkJCQlkdWtf aGVhcF9wcm9jZXNzX2ZpbmFsaXplX2xpc3QoaGVhcCk7CisJCQl9CisJCQlyZXR1cm47CisJCX0K Kwl9CisjZW5kaWYgIC8qIERVS19VU0VfRklOQUxJWkVSX1NVUFBPUlQgKi8KKworCS8qIE5vIG5l ZWQgdG8gZmluYWxpemUsIGZyZWUgb2JqZWN0IHZpYSByZWZ6ZXJvX2xpc3QuICovCisKKwlyb290 ID0gaGVhcC0+cmVmemVyb19saXN0OworCisJRFVLX0hFQVBIRFJfU0VUX1BSRVYoaGVhcCwgaGRy LCBOVUxMKTsKKwkvKiAnbmV4dCcgaXMgbGVmdCBhcyBHQVJCQUdFLiAqLworCWhlYXAtPnJlZnpl cm9fbGlzdCA9IGhkcjsKKworCWlmIChyb290ID09IE5VTEwpIHsKKwkJLyogT2JqZWN0IGlzIG5v dyBxdWV1ZWQuICBSZWZ6ZXJvX2xpc3Qgd2FzIE5VTEwgc28KKwkJICogbm8tb25lIGlzIGN1cnJl bnRseSBwcm9jZXNzaW5nIGl0OyBkbyBpdCBoZXJlLgorCQkgKiBXaXRoIHJlZnplcm8gcHJvY2Vz c2luZyBqdXN0IGRvaW5nIGEgY2FzY2FkZSBvZgorCQkgKiBmcmVlIGNhbGxzLCB3ZSBjYW4gcHJv Y2VzcyBpdCBkaXJlY3RseSBldmVuIHdoZW4KKwkJICogTk9SWiBtYWNyb3MgYXJlIHVzZWQ6IHRo ZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMuCisJCSAqLworCQlkdWtfX3JlZmNvdW50X2ZyZWVfcGVu ZGluZyhoZWFwKTsKKwkJRFVLX0FTU0VSVChoZWFwLT5yZWZ6ZXJvX2xpc3QgPT0gTlVMTCk7CisK KwkJLyogUHJvY2VzcyBmaW5hbGl6ZXJzIG9ubHkgYWZ0ZXIgdGhlIGVudGlyZSBjYXNjYWRlCisJ CSAqIGlzIGZpbmlzaGVkLiAgSW4gbW9zdCBjYXNlcyB0aGVyZSdzIG5vdGhpbmcgdG8KKwkJICog ZmluYWxpemUsIHNvIGZhc3QgcGF0aCBjaGVjayB0byBhdm9pZCBhIGNhbGwuCisJCSAqLworI2lm IGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCkKKwkJaWYgKCFza2lwX2ZyZWVfcGVu ZGluZyAmJiBEVUtfVU5MSUtFTFkoaGVhcC0+ZmluYWxpemVfbGlzdCAhPSBOVUxMKSkgeworCQkJ ZHVrX2hlYXBfcHJvY2Vzc19maW5hbGl6ZV9saXN0KGhlYXApOworCQl9CisjZW5kaWYKKwl9IGVs c2UgeworCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9QUkVWKGhlYXAsIHJvb3QpID09IE5V TEwpOworCQlEVUtfSEVBUEhEUl9TRVRfUFJFVihoZWFwLCByb290LCBoZHIpOworCisJCS8qIE9i amVjdCBpcyBub3cgcXVldWVkLiAgQmVjYXVzZSByZWZ6ZXJvX2xpc3Qgd2FzCisJCSAqIG5vbi1O VUxMLCBpdCdzIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkIGJ5IHNvbWVvbmUKKwkJICogaW4gdGhl IEMgY2FsbCBzdGFjaywgc28gd2UncmUgZG9uZS4KKwkJICovCisJfQorfQorCisjaWYgZGVmaW5l ZChEVUtfVVNFX0ZJTkFMSVpFUl9TVVBQT1JUKQorRFVLX0lOVEVSTkFMIERVS19BTFdBWVNfSU5M SU5FIHZvaWQgZHVrX3JlZnplcm9fY2hlY2tfZmFzdChkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVL X0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisJ RFVLX0FTU0VSVCh0aHItPmhlYXAtPnJlZnplcm9fbGlzdCA9PSBOVUxMKTsgIC8qIFByb2Nlc3Nl ZCB0byBjb21wbGV0aW9uIGlubGluZS4gKi8KKworCWlmIChEVUtfVU5MSUtFTFkodGhyLT5oZWFw LT5maW5hbGl6ZV9saXN0ICE9IE5VTEwpKSB7CisJCWR1a19oZWFwX3Byb2Nlc3NfZmluYWxpemVf bGlzdCh0aHItPmhlYXApOworCX0KK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3JlZnplcm9f Y2hlY2tfc2xvdyhkdWtfaHRocmVhZCAqdGhyKSB7CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAt PnJlZnplcm9fbGlzdCA9PSBOVUxMKTsgIC8qIFByb2Nlc3NlZCB0byBjb21wbGV0aW9uIGlubGlu ZS4gKi8KKworCWlmIChEVUtfVU5MSUtFTFkodGhyLT5oZWFwLT5maW5hbGl6ZV9saXN0ICE9IE5V TEwpKSB7CisJCWR1a19oZWFwX3Byb2Nlc3NfZmluYWxpemVfbGlzdCh0aHItPmhlYXApOworCX0K K30KKyNlbmRpZiAgLyogRFVLX1VTRV9GSU5BTElaRVJfU1VQUE9SVCAqLworCisvKgorICogIFJl Znplcm8gcHJvY2Vzc2luZyBmb3IgZHVrX2hzdHJpbmcuCisgKi8KKworRFVLX0xPQ0FMIERVS19J TkxJTkUgdm9pZCBkdWtfX3JlZmNvdW50X3JlZnplcm9faHN0cmluZyhkdWtfaGVhcCAqaGVhcCwg ZHVrX2hzdHJpbmcgKnN0cikgeworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNT RVJUKGhlYXAtPmhlYXBfdGhyZWFkICE9IE5VTEwpOworCURVS19BU1NFUlQoc3RyICE9IE5VTEwp OworCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfR0VUX1RZUEUoKGR1a19oZWFwaGRyICopIHN0cikg PT0gRFVLX0hUWVBFX1NUUklORyk7CisKKwlkdWtfaGVhcF9zdHJjYWNoZV9zdHJpbmdfcmVtb3Zl KGhlYXAsIHN0cik7CisJZHVrX2hlYXBfc3RydGFibGVfdW5saW5rKGhlYXAsIHN0cik7CisJZHVr X2ZyZWVfaHN0cmluZyhoZWFwLCBzdHIpOworfQorCisvKgorICogIFJlZnplcm8gcHJvY2Vzc2lu ZyBmb3IgZHVrX2hidWZmZXIuCisgKi8KKworRFVLX0xPQ0FMIERVS19JTkxJTkUgdm9pZCBkdWtf X3JlZmNvdW50X3JlZnplcm9faGJ1ZmZlcihkdWtfaGVhcCAqaGVhcCwgZHVrX2hidWZmZXIgKmJ1 ZikgeworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGhlYXAtPmhlYXBf dGhyZWFkICE9IE5VTEwpOworCURVS19BU1NFUlQoYnVmICE9IE5VTEwpOworCURVS19BU1NFUlQo RFVLX0hFQVBIRFJfR0VUX1RZUEUoKGR1a19oZWFwaGRyICopIGJ1ZikgPT0gRFVLX0hUWVBFX0JV RkZFUik7CisKKwlEVUtfSEVBUF9SRU1PVkVfRlJPTV9IRUFQX0FMTE9DQVRFRChoZWFwLCAoZHVr X2hlYXBoZHIgKikgYnVmKTsKKwlkdWtfZnJlZV9oYnVmZmVyKGhlYXAsIGJ1Zik7Cit9CisKKy8q CisgKiAgSW5jcmVmIGFuZCBkZWNyZWYgZnVuY3Rpb25zLgorICoKKyAqICBEZWNyZWYgbWF5IHRy aWdnZXIgaW1tZWRpYXRlIHJlZnplcm8gaGFuZGxpbmcsIHdoaWNoIG1heSBmcmVlIGFuZCBmaW5h bGl6ZQorICogIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygb2JqZWN0cyAoYSAiREVDUkVGIGNhc2Nh ZGUiKS4KKyAqCisgKiAgUmVmemVybyBoYW5kbGluZyBpcyBza2lwcGVkIGVudGlyZWx5IGlmICgx KSBtYXJrLWFuZC1zd2VlcCBpcyBydW5uaW5nIG9yCisgKiAgKDIpIGV4ZWN1dGlvbiBpcyBwYXVz ZWQgaW4gdGhlIGRlYnVnZ2VyLiAgVGhlIG9iamVjdHMgYXJlIGxlZnQgaW4gdGhlIGhlYXAsCisg KiAgYW5kIHdpbGwgYmUgZnJlZWQgYnkgbWFyay1hbmQtc3dlZXAgb3IgZXZlbnR1YWwgaGVhcCBk ZXN0cnVjdGlvbi4KKyAqCisgKiAgVGhpcyBpcyBuZWNlc3NhcnkgZHVyaW5nIG1hcmstYW5kLXN3 ZWVwIGJlY2F1c2UgcmVmY291bnRzIGFyZSBhbHNvIHVwZGF0ZWQKKyAqICBkdXJpbmcgdGhlIHN3 ZWVwIHBoYXNlIChvdGhlcndpc2Ugb2JqZWN0cyByZWZlcmVuY2VkIGJ5IGEgc3dlcHQgb2JqZWN0 CisgKiAgd291bGQgaGF2ZSBpbmNvcnJlY3QgcmVmY291bnRzKSB3aGljaCB0aGVuIGNhbGxzIGhl cmUuICBUaGlzIGNvdWxkIGJlCisgKiAgYXZvaWRlZCBieSB1c2luZyBzZXBhcmF0ZSBkZWNyZWYg bWFjcm9zIGluIG1hcmstYW5kLXN3ZWVwOyBob3dldmVyLAorICogIG1hcmstYW5kLXN3ZWVwIGFs c28gY2FsbHMgZmluYWxpemVycyB3aGljaCB3b3VsZCB1c2UgdGhlIG9yZGluYXJ5IGRlY3JlZgor ICogIG1hY3JvcyBhbnl3YXkuCisgKgorICogIFdlIGNhbid0IHByb2Nlc3MgcmVmemVyb3MgKD0g ZnJlZSBvYmplY3RzKSB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBydW5uaW5nCisgKiAgYXMgdGhlIGRl YnVnZ2VyIG1pZ2h0IG1ha2UgYW4gb2JqZWN0IHVucmVhY2hhYmxlIGJ1dCBzdGlsbCBjb250aW51 ZQorICogIGluc3BlY3RpbmcgaXQgKG9yIGV2ZW4gY2F1c2UgaXQgdG8gYmUgcHVzaGVkIGJhY2sp LiAgU28gd2UgbXVzdCByZWx5IG9uCisgKiAgbWFyay1hbmQtc3dlZXAgdG8gY29sbGVjdCB0aGVt LgorICoKKyAqICBUaGUgRFVLX19SWl9TVVBQUkVTU19DSEVDSygpIGNvbmRpdGlvbiBpcyBhbHNv IHVzZWQgaW4gaGVhcCBkZXN0cnVjdGlvbgorICogIHdoZW4gcnVubmluZyBmaW5hbGl6ZXJzIGZv ciByZW1haW5pbmcgb2JqZWN0czogdGhlIGZsYWcgcHJldmVudHMgb2JqZWN0cworICogIGZyb20g YmVpbmcgbW92ZWQgYXJvdW5kIGluIGhlYXAgbGlua2VkIGxpc3RzIHdoaWxlIHRoYXQncyBiZWlu ZyBkb25lLgorICoKKyAqICBUaGUgc3VwcHJlc3MgY29uZGl0aW9uIGlzIGltcG9ydGFudCB0byBw ZXJmb3JtYW5jZS4KKyAqLworCisjZGVmaW5lIERVS19fUlpfU1VQUFJFU1NfQVNTRVJUMSgpIGRv IHsgXAorCQlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsgXAorCQlEVUtfQVNTRVJUKHRoci0+aGVh cCAhPSBOVUxMKTsgXAorCQkvKiBXaGVuIG1hcmstYW5kLXN3ZWVwIHJ1bnMsIGhlYXBfdGhyZWFk IG11c3QgZXhpc3QuICovIFwKKwkJRFVLX0FTU0VSVCh0aHItPmhlYXAtPm1zX3J1bm5pbmcgPT0g MCB8fCB0aHItPmhlYXAtPmhlYXBfdGhyZWFkICE9IE5VTEwpOyBcCisJCS8qIFdoZW4gbWFyay1h bmQtc3dlZXAgcnVucywgdGhlICd0aHInIGFyZ3VtZW50IGFsd2F5cyBtYXRjaGVzIGhlYXBfdGhy ZWFkLiBcCisJCSAqIFRoaXMgY291bGQgYmUgdXNlZCB0byBlLmcuIHN1cHByZXNzIGNoZWNrIGFn YWluc3QgJ3RocicgZGlyZWN0bHkgKGFuZCBcCisJCSAqIGtub3dpbmcgaXQgd291bGQgYmUgaGVh cF90aHJlYWQpOyBub3QgcmVhbGx5IHVzZWQgbm93LiBcCisJCSAqLyBcCisJCURVS19BU1NFUlQo dGhyLT5oZWFwLT5tc19ydW5uaW5nID09IDAgfHwgdGhyID09IHRoci0+aGVhcC0+aGVhcF90aHJl YWQpOyBcCisJCS8qIFdlIG1heSBiZSBjYWxsZWQgd2hlbiB0aGUgaGVhcCBpcyBpbml0aWFsaXpp bmcgYW5kIHdlIHByb2Nlc3MgXAorCQkgKiByZWZ6ZXJvcyBub3JtYWxseSwgYnV0IG1hcmstYW5k LXN3ZWVwIGFuZCBmaW5hbGl6ZXJzIGFyZSBwcmV2ZW50ZWQgXAorCQkgKiBpZiB0aGF0J3MgdGhl IGNhc2UuIFwKKwkJICovIFwKKwkJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmhlYXBfaW5pdGlhbGl6 aW5nID09IDAgfHwgdGhyLT5oZWFwLT5tc19wcmV2ZW50X2NvdW50ID4gMCk7IFwKKwkJRFVLX0FT U0VSVCh0aHItPmhlYXAtPmhlYXBfaW5pdGlhbGl6aW5nID09IDAgfHwgdGhyLT5oZWFwLT5wZl9w cmV2ZW50X2NvdW50ID4gMCk7IFwKKwl9IHdoaWxlICgwKQorCisjaWYgZGVmaW5lZChEVUtfVVNF X0RFQlVHR0VSX1NVUFBPUlQpCisjZGVmaW5lIERVS19fUlpfU1VQUFJFU1NfQVNTRVJUMigpIGRv IHsgXAorCQkvKiBXaGVuIGRlYnVnZ2VyIGlzIHBhdXNlZCwgbXNfcnVubmluZyBpcyBzZXQuICov IFwKKwkJRFVLX0FTU0VSVCghRFVLX0hFQVBfSEFTX0RFQlVHR0VSX1BBVVNFRCh0aHItPmhlYXAp IHx8IHRoci0+aGVhcC0+bXNfcnVubmluZyAhPSAwKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5l IERVS19fUlpfU1VQUFJFU1NfQ09ORCgpICAoaGVhcC0+bXNfcnVubmluZyAhPSAwKQorI2Vsc2UK KyNkZWZpbmUgRFVLX19SWl9TVVBQUkVTU19BU1NFUlQyKCkgZG8geyB9IHdoaWxlICgwKQorI2Rl ZmluZSBEVUtfX1JaX1NVUFBSRVNTX0NPTkQoKSAgKGhlYXAtPm1zX3J1bm5pbmcgIT0gMCkKKyNl bmRpZiAgLyogRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUICovCisKKyNkZWZpbmUgRFVLX19SWl9T VVBQUkVTU19DSEVDSygpIGRvIHsgXAorCQlEVUtfX1JaX1NVUFBSRVNTX0FTU0VSVDEoKTsgXAor CQlEVUtfX1JaX1NVUFBSRVNTX0FTU0VSVDIoKTsgXAorCQlpZiAoRFVLX1VOTElLRUxZKERVS19f UlpfU1VQUFJFU1NfQ09ORCgpKSkgeyBcCisJCQlEVUtfREREKERVS19ERERQUklOVCgicmVmemVy byBoYW5kbGluZyBzdXBwcmVzc2VkIChub3QgZXZlbiBxdWV1ZWQpIHdoZW4gbWFyay1hbmQtc3dl ZXAgcnVubmluZywgb2JqZWN0OiAlcCIsICh2b2lkICopIGgpKTsgXAorCQkJcmV0dXJuOyBcCisJ CX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX19SWl9TVFJJTkcoKSBkbyB7IFwKKwkJ ZHVrX19yZWZjb3VudF9yZWZ6ZXJvX2hzdHJpbmcoaGVhcCwgKGR1a19oc3RyaW5nICopIGgpOyBc CisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19SWl9CVUZGRVIoKSBkbyB7IFwKKwkJZHVrX19y ZWZjb3VudF9yZWZ6ZXJvX2hidWZmZXIoaGVhcCwgKGR1a19oYnVmZmVyICopIGgpOyBcCisJfSB3 aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19SWl9PQkpFQ1QoKSBkbyB7IFwKKwkJZHVrX19yZWZjb3Vu dF9yZWZ6ZXJvX2hvYmplY3QoaGVhcCwgKGR1a19ob2JqZWN0ICopIGgsIHNraXBfZnJlZV9wZW5k aW5nKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIFhYWDogdGVzdCB0aGUgZWZmZWN0IG9mIGlubGlu aW5nIGhlcmUgdnMuIE5PSU5MSU5FIGluIHJlZnplcm8gaGVscGVycyAqLworI2lmIGRlZmluZWQo RFVLX1VTRV9GQVNUX1JFRkNPVU5UX0RFRkFVTFQpCisjZGVmaW5lIERVS19fUlpfSU5MSU5FIERV S19BTFdBWVNfSU5MSU5FCisjZWxzZQorI2RlZmluZSBEVUtfX1JaX0lOTElORSAvKm5vcCovCisj ZW5kaWYKKworRFVLX0xPQ0FMIERVS19fUlpfSU5MSU5FIHZvaWQgZHVrX19oc3RyaW5nX3JlZnpl cm9faGVscGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpoKSB7CisJZHVrX2hlYXAg KmhlYXA7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVM TCk7CisJaGVhcCA9IHRoci0+aGVhcDsKKworCURVS19fUlpfU1VQUFJFU1NfQ0hFQ0soKTsKKwlE VUtfX1JaX1NUUklORygpOworfQorCitEVUtfTE9DQUwgRFVLX19SWl9JTkxJTkUgdm9pZCBkdWtf X2hidWZmZXJfcmVmemVyb19oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXIgKmgp IHsKKwlkdWtfaGVhcCAqaGVhcDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19B U1NFUlQoaCAhPSBOVUxMKTsKKwloZWFwID0gdGhyLT5oZWFwOworCisJRFVLX19SWl9TVVBQUkVT U19DSEVDSygpOworCURVS19fUlpfQlVGRkVSKCk7Cit9CisKK0RVS19MT0NBTCBEVUtfX1JaX0lO TElORSB2b2lkIGR1a19faG9iamVjdF9yZWZ6ZXJvX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBk dWtfaG9iamVjdCAqaCwgZHVrX2Jvb2xfdCBza2lwX2ZyZWVfcGVuZGluZykgeworCWR1a19oZWFw ICpoZWFwOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChoICE9IE5V TEwpOworCWhlYXAgPSB0aHItPmhlYXA7CisKKwlEVUtfX1JaX1NVUFBSRVNTX0NIRUNLKCk7CisJ RFVLX19SWl9PQkpFQ1QoKTsKK30KKworRFVLX0xPQ0FMIERVS19fUlpfSU5MSU5FIHZvaWQgZHVr X19oZWFwaGRyX3JlZnplcm9faGVscGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19oZWFwaGRyICpo LCBkdWtfYm9vbF90IHNraXBfZnJlZV9wZW5kaW5nKSB7CisJZHVrX2hlYXAgKmhlYXA7CisJZHVr X3NtYWxsX3VpbnRfdCBodHlwZTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19B U1NFUlQoaCAhPSBOVUxMKTsKKwloZWFwID0gdGhyLT5oZWFwOworCisJaHR5cGUgPSAoZHVrX3Nt YWxsX3VpbnRfdCkgRFVLX0hFQVBIRFJfR0VUX1RZUEUoaCk7CisJRFVLX19SWl9TVVBQUkVTU19D SEVDSygpOworCisJc3dpdGNoIChodHlwZSkgeworCWNhc2UgRFVLX0hUWVBFX1NUUklORzoKKwkJ LyogU3RyaW5ncyBoYXZlIG5vIGludGVybmFsIHJlZmVyZW5jZXMgYnV0IGRvIGhhdmUgIndlYWsi CisJCSAqIHJlZmVyZW5jZXMgaW4gdGhlIHN0cmluZyBjYWNoZS4gIEFsc28gbm90ZSB0aGF0IHN0 cmluZ3MKKwkJICogYXJlIG5vdCBvbiB0aGUgaGVhcF9hbGxvY2F0ZWQgbGlzdCBsaWtlIG90aGVy IGhlYXAKKwkJICogZWxlbWVudHMuCisJCSAqLworCisJCURVS19fUlpfU1RSSU5HKCk7CisJCWJy ZWFrOworCisJY2FzZSBEVUtfSFRZUEVfT0JKRUNUOgorCQkvKiBPYmplY3RzIGhhdmUgaW50ZXJu YWwgcmVmZXJlbmNlcy4gIE11c3QgZmluYWxpemUgdGhyb3VnaAorCQkgKiB0aGUgInJlZnplcm8i IHdvcmsgbGlzdC4KKwkJICovCisKKwkJRFVLX19SWl9PQkpFQ1QoKTsKKwkJYnJlYWs7CisKKwlk ZWZhdWx0OgorCQkvKiBCdWZmZXJzIGhhdmUgbm8gaW50ZXJuYWwgcmVmZXJlbmNlcy4gIEhvd2V2 ZXIsIGEgZHluYW1pYworCQkgKiBidWZmZXIgaGFzIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiBmb3Ig dGhlIGJ1ZmZlci4gIFRoaXMgaXMKKwkJICogZnJlZWQgYnkgZHVrX2hlYXBfZnJlZV9oZWFwaGRy X3JhdygpLgorCQkgKi8KKworCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9UWVBFKGgpID09 IERVS19IVFlQRV9CVUZGRVIpOworCQlEVUtfX1JaX0JVRkZFUigpOworCQlicmVhazsKKwl9Cit9 CisKK0RVS19JTlRFUk5BTCBEVUtfTk9JTkxJTkUgdm9pZCBkdWtfaGVhcGhkcl9yZWZ6ZXJvKGR1 a19odGhyZWFkICp0aHIsIGR1a19oZWFwaGRyICpoKSB7CisJZHVrX19oZWFwaGRyX3JlZnplcm9f aGVscGVyKHRociwgaCwgMCAvKnNraXBfZnJlZV9wZW5kaW5nKi8pOworfQorCitEVUtfSU5URVJO QUwgRFVLX05PSU5MSU5FIHZvaWQgZHVrX2hlYXBoZHJfcmVmemVyb19ub3J6KGR1a19odGhyZWFk ICp0aHIsIGR1a19oZWFwaGRyICpoKSB7CisJZHVrX19oZWFwaGRyX3JlZnplcm9faGVscGVyKHRo ciwgaCwgMSAvKnNraXBfZnJlZV9wZW5kaW5nKi8pOworfQorCitEVUtfSU5URVJOQUwgRFVLX05P SU5MSU5FIHZvaWQgZHVrX2hzdHJpbmdfcmVmemVybyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaHN0 cmluZyAqaCkgeworCWR1a19faHN0cmluZ19yZWZ6ZXJvX2hlbHBlcih0aHIsIGgpOworfQorCitE VUtfSU5URVJOQUwgRFVLX05PSU5MSU5FIHZvaWQgZHVrX2hidWZmZXJfcmVmemVybyhkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaGJ1ZmZlciAqaCkgeworCWR1a19faGJ1ZmZlcl9yZWZ6ZXJvX2hlbHBl cih0aHIsIGgpOworfQorCitEVUtfSU5URVJOQUwgRFVLX05PSU5MSU5FIHZvaWQgZHVrX2hvYmpl Y3RfcmVmemVybyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqaCkgeworCWR1a19faG9i amVjdF9yZWZ6ZXJvX2hlbHBlcih0aHIsIGgsIDAgLypza2lwX2ZyZWVfcGVuZGluZyovKTsKK30K KworRFVLX0lOVEVSTkFMIERVS19OT0lOTElORSB2b2lkIGR1a19ob2JqZWN0X3JlZnplcm9fbm9y eihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqaCkgeworCWR1a19faG9iamVjdF9yZWZ6 ZXJvX2hlbHBlcih0aHIsIGgsIDEgLypza2lwX2ZyZWVfcGVuZGluZyovKTsKK30KKworI2lmICFk ZWZpbmVkKERVS19VU0VfRkFTVF9SRUZDT1VOVF9ERUZBVUxUKQorRFVLX0lOVEVSTkFMIHZvaWQg ZHVrX3R2YWxfaW5jcmVmKGR1a190dmFsICp0dikgeworCURVS19BU1NFUlQodHYgIT0gTlVMTCk7 CisKKwlpZiAoRFVLX1RWQUxfTkVFRFNfUkVGQ09VTlRfVVBEQVRFKHR2KSkgeworCQlkdWtfaGVh cGhkciAqaCA9IERVS19UVkFMX0dFVF9IRUFQSERSKHR2KTsKKwkJRFVLX0FTU0VSVChoICE9IE5V TEwpOworCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hUWVBFX1ZBTElEKGgpKTsKKwkJRFVLX0FT U0VSVF9ESVNBQkxFKGgtPmhfcmVmY291bnQgPj0gMCk7CisJCURVS19IRUFQSERSX1BSRUlOQ19S RUZDT1VOVChoKTsKKwkJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoaCkgIT0g MCk7ICAvKiBObyB3cmFwcGluZy4gKi8KKwl9Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a190 dmFsX2RlY3JlZihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHYpIHsKKwlEVUtfQVNTRVJU KHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJaWYgKERVS19UVkFM X05FRURTX1JFRkNPVU5UX1VQREFURSh0dikpIHsKKwkJZHVrX2hlYXBoZHIgKmggPSBEVUtfVFZB TF9HRVRfSEVBUEhEUih0dik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwkJRFVLX0FTU0VS VChEVUtfSEVBUEhEUl9IVFlQRV9WQUxJRChoKSk7CisJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJf R0VUX1JFRkNPVU5UKGgpID49IDEpOworI2lmIDAKKwkJaWYgKERVS19IRUFQSERSX1BSRURFQ19S RUZDT1VOVChoKSAhPSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwkJZHVrX2hlYXBoZHJfcmVmemVy byh0aHIsIGgpOworI2Vsc2UKKwkJZHVrX2hlYXBoZHJfZGVjcmVmKHRociwgaCk7CisjZW5kaWYK Kwl9Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a190dmFsX2RlY3JlZl9ub3J6KGR1a19odGhy ZWFkICp0aHIsIGR1a190dmFsICp0dikgeworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURV S19BU1NFUlQodHYgIT0gTlVMTCk7CisKKwlpZiAoRFVLX1RWQUxfTkVFRFNfUkVGQ09VTlRfVVBE QVRFKHR2KSkgeworCQlkdWtfaGVhcGhkciAqaCA9IERVS19UVkFMX0dFVF9IRUFQSERSKHR2KTsK KwkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hUWVBF X1ZBTElEKGgpKTsKKwkJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfUkVGQ09VTlQoaCkgPj0g MSk7CisjaWYgMAorCQlpZiAoRFVLX0hFQVBIRFJfUFJFREVDX1JFRkNPVU5UKGgpICE9IDApIHsK KwkJCXJldHVybjsKKwkJfQorCQlkdWtfaGVhcGhkcl9yZWZ6ZXJvX25vcnoodGhyLCBoKTsKKyNl bHNlCisJCWR1a19oZWFwaGRyX2RlY3JlZl9ub3J6KHRociwgaCk7CisjZW5kaWYKKwl9Cit9Cisj ZW5kaWYgIC8qICFEVUtfVVNFX0ZBU1RfUkVGQ09VTlRfREVGQVVMVCAqLworCisjZGVmaW5lIERV S19fREVDUkVGX0FTU0VSVFMoKSBkbyB7IFwKKwkJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7IFwK KwkJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7IFwKKwkJRFVLX0FTU0VSVChoICE9IE5V TEwpOyBcCisJCURVS19BU1NFUlQoRFVLX0hFQVBIRFJfSFRZUEVfVkFMSUQoKGR1a19oZWFwaGRy ICopIGgpKTsgXAorCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZDT1VOVCgoZHVrX2hl YXBoZHIgKikgaCkgPj0gMSk7IFwKKwl9IHdoaWxlICgwKQorI2lmIGRlZmluZWQoRFVLX1VTRV9S T01fT0JKRUNUUykKKyNkZWZpbmUgRFVLX19JTkNSRUZfU0hBUkVEKCkgZG8geyBcCisJCWlmIChE VUtfSEVBUEhEUl9IQVNfUkVBRE9OTFkoKGR1a19oZWFwaGRyICopIGgpKSB7IFwKKwkJCXJldHVy bjsgXAorCQl9IFwKKwkJRFVLX0hFQVBIRFJfUFJFSU5DX1JFRkNPVU5UKChkdWtfaGVhcGhkciAq KSBoKTsgXAorCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZDT1VOVCgoZHVrX2hlYXBo ZHIgKikgaCkgIT0gMCk7ICAvKiBObyB3cmFwcGluZy4gKi8gXAorCX0gd2hpbGUgKDApCisjZGVm aW5lIERVS19fREVDUkVGX1NIQVJFRCgpIGRvIHsgXAorCQlpZiAoRFVLX0hFQVBIRFJfSEFTX1JF QURPTkxZKChkdWtfaGVhcGhkciAqKSBoKSkgeyBcCisJCQlyZXR1cm47IFwKKwkJfSBcCisJCWlm IChEVUtfSEVBUEhEUl9QUkVERUNfUkVGQ09VTlQoKGR1a19oZWFwaGRyICopIGgpICE9IDApIHsg XAorCQkJcmV0dXJuOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEVUtf X0lOQ1JFRl9TSEFSRUQoKSBkbyB7IFwKKwkJRFVLX0hFQVBIRFJfUFJFSU5DX1JFRkNPVU5UKChk dWtfaGVhcGhkciAqKSBoKTsgXAorCQlEVUtfQVNTRVJUKERVS19IRUFQSERSX0dFVF9SRUZDT1VO VCgoZHVrX2hlYXBoZHIgKikgaCkgIT0gMCk7ICAvKiBObyB3cmFwcGluZy4gKi8gXAorCX0gd2hp bGUgKDApCisjZGVmaW5lIERVS19fREVDUkVGX1NIQVJFRCgpIGRvIHsgXAorCQlpZiAoRFVLX0hF QVBIRFJfUFJFREVDX1JFRkNPVU5UKChkdWtfaGVhcGhkciAqKSBoKSAhPSAwKSB7IFwKKwkJCXJl dHVybjsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChEVUtf VVNFX0ZBU1RfUkVGQ09VTlRfREVGQVVMVCkKKy8qIFRoaXMgd2lsbCBpbiBwcmFjdGljZSBiZSBp bmxpbmVkIGJlY2F1c2UgaXQncyBqdXN0IGFuIElOQyBpbnN0cnVjdGlvbnMKKyAqIGFuZCBhIGJp dCB0ZXN0ICsgSU5DIHdoZW4gUk9NIG9iamVjdHMgYXJlIGVuYWJsZWQuCisgKi8KK0RVS19JTlRF Uk5BTCB2b2lkIGR1a19oZWFwaGRyX2luY3JlZihkdWtfaGVhcGhkciAqaCkgeworCURVS19BU1NF UlQoaCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IRUFQSERSX0hUWVBFX1ZBTElEKGgpKTsK KwlEVUtfQVNTRVJUX0RJU0FCTEUoRFVLX0hFQVBIRFJfR0VUX1JFRkNPVU5UKGgpID49IDApOwor CisJRFVLX19JTkNSRUZfU0hBUkVEKCk7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFw aGRyX2RlY3JlZihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaGVhcGhkciAqaCkgeworCURVS19fREVD UkVGX0FTU0VSVFMoKTsKKwlEVUtfX0RFQ1JFRl9TSEFSRUQoKTsKKwlkdWtfaGVhcGhkcl9yZWZ6 ZXJvKHRociwgaCk7CisKKwkvKiBGb3JjZWQgbWFyay1hbmQtc3dlZXAgd2hlbiBHQyB0b3J0dXJl IGVuYWJsZWQ7IHRoaXMgY291bGQgaGFwcGVuCisJICogb24gYW55IERFQ1JFRiAoYnV0IG5vdCBE RUNSRUZfTk9SWikuCisJICovCisJRFVLX0dDX1RPUlRVUkUodGhyLT5oZWFwKTsKK30KK0RVS19J TlRFUk5BTCB2b2lkIGR1a19oZWFwaGRyX2RlY3JlZl9ub3J6KGR1a19odGhyZWFkICp0aHIsIGR1 a19oZWFwaGRyICpoKSB7CisJRFVLX19ERUNSRUZfQVNTRVJUUygpOworCURVS19fREVDUkVGX1NI QVJFRCgpOworCWR1a19oZWFwaGRyX3JlZnplcm9fbm9yeih0aHIsIGgpOworfQorI2VuZGlmICAv KiAhRFVLX1VTRV9GQVNUX1JFRkNPVU5UX0RFRkFVTFQgKi8KKworI2lmIDAgIC8qIE5vdCBuZWVk ZWQuICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaHN0cmluZ19kZWNyZWYoZHVrX2h0aHJlYWQg KnRociwgZHVrX2hzdHJpbmcgKmgpIHsKKwlEVUtfX0RFQ1JFRl9BU1NFUlRTKCk7CisJRFVLX19E RUNSRUZfU0hBUkVEKCk7CisJZHVrX2hzdHJpbmdfcmVmemVybyh0aHIsIGgpOworfQorRFVLX0lO VEVSTkFMIHZvaWQgZHVrX2hzdHJpbmdfZGVjcmVmX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVr X2hzdHJpbmcgKmgpIHsKKwlEVUtfX0RFQ1JFRl9BU1NFUlRTKCk7CisJRFVLX19ERUNSRUZfU0hB UkVEKCk7CisJZHVrX2hzdHJpbmdfcmVmemVyb19ub3J6KHRociwgaCk7Cit9CitEVUtfSU5URVJO QUwgdm9pZCBkdWtfaGJ1ZmZlcl9kZWNyZWYoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXIg KmgpIHsKKwlEVUtfX0RFQ1JFRl9BU1NFUlRTKCk7CisJRFVLX19ERUNSRUZfU0hBUkVEKCk7CisJ ZHVrX2hidWZmZXJfcmVmemVybyh0aHIsIGgpOworfQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hi dWZmZXJfZGVjcmVmX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX2hidWZmZXIgKmgpIHsKKwlE VUtfX0RFQ1JFRl9BU1NFUlRTKCk7CisJRFVLX19ERUNSRUZfU0hBUkVEKCk7CisJZHVrX2hidWZm ZXJfcmVmemVyb19ub3J6KHRociwgaCk7Cit9CitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaG9iamVj dF9kZWNyZWYoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKmgpIHsKKwlEVUtfX0RFQ1JF Rl9BU1NFUlRTKCk7CisJRFVLX19ERUNSRUZfU0hBUkVEKCk7CisJZHVrX2hvYmplY3RfcmVmemVy byh0aHIsIGgpOworfQorRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hvYmplY3RfZGVjcmVmX25vcnoo ZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKmgpIHsKKwlEVUtfX0RFQ1JFRl9BU1NFUlRT KCk7CisJRFVLX19ERUNSRUZfU0hBUkVEKCk7CisJZHVrX2hvYmplY3RfcmVmemVyb19ub3J6KHRo ciwgaCk7Cit9CisjZW5kaWYKKworI2Vsc2UgIC8qIERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5H ICovCisKKy8qIG5vIHJlZmNvdW50aW5nICovCisKKyNlbmRpZiAgLyogRFVLX1VTRV9SRUZFUkVO Q0VfQ09VTlRJTkcgKi8KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fREVD UkVGX0FTU0VSVFMKKyN1bmRlZiBEVUtfX0RFQ1JFRl9TSEFSRUQKKyN1bmRlZiBEVUtfX0lOQ1JF Rl9TSEFSRUQKKyN1bmRlZiBEVUtfX1JaX0JVRkZFUgorI3VuZGVmIERVS19fUlpfSU5MSU5FCisj dW5kZWYgRFVLX19SWl9PQkpFQ1QKKyN1bmRlZiBEVUtfX1JaX1NUUklORworI3VuZGVmIERVS19f UlpfU1VQUFJFU1NfQVNTRVJUMQorI3VuZGVmIERVS19fUlpfU1VQUFJFU1NfQVNTRVJUMgorI3Vu ZGVmIERVS19fUlpfU1VQUFJFU1NfQ0hFQ0sKKyN1bmRlZiBEVUtfX1JaX1NVUFBSRVNTX0NPTkQK Ky8qCisgKiAgU3RyaW5nIGNhY2hlLgorICoKKyAqICBQcm92aWRlcyBhIGNhY2hlIHRvIG9wdGlt aXplIGluZGV4ZWQgc3RyaW5nIGxvb2t1cHMuICBUaGUgY2FjaGUga2VlcHMKKyAqICB0cmFjayBv ZiAoYnl0ZSBvZmZzZXQsIGNoYXIgb2Zmc2V0KSBzdGF0ZXMgZm9yIGEgZml4ZWQgbnVtYmVyIG9m IHN0cmluZ3MuCisgKiAgT3RoZXJ3aXNlIHdlJ2QgbmVlZCB0byBzY2FuIGZyb20gZWl0aGVyIGVu ZCBvZiB0aGUgc3RyaW5nLCBhcyB3ZSBzdG9yZQorICogIHN0cmluZ3MgaW4gKGV4dGVuZGVkKSBV VEYtOC4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1 ZGVkICovCisKKy8qCisgKiAgRGVsZXRlIHJlZmVyZW5jZXMgdG8gZ2l2ZW4gaHN0cmluZyBmcm9t IHRoZSBoZWFwIHN0cmluZyBjYWNoZS4KKyAqCisgKiAgU3RyaW5nIGNhY2hlIHJlZmVyZW5jZXMg YXJlICd3ZWFrJzogdGhleSBhcmUgbm90IGNvdW50ZWQgdG93YXJkcworICogIHJlZmVyZW5jZSBj b3VudHMsIG5vciBzZXJ2ZSBhcyByb290cyBmb3IgbWFyay1hbmQtc3dlZXAuICBXaGVuIGFuCisg KiAgb2JqZWN0IGlzIGFib3V0IHRvIGJlIGZyZWVkLCBzdWNoIHJlZmVyZW5jZXMgbmVlZCB0byBi ZSByZW1vdmVkLgorICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFwX3N0cmNhY2hlX3N0 cmluZ19yZW1vdmUoZHVrX2hlYXAgKmhlYXAsIGR1a19oc3RyaW5nICpoKSB7CisJZHVrX3VpbnRf dCBpOworCWZvciAoaSA9IDA7IGkgPCBEVUtfSEVBUF9TVFJDQUNIRV9TSVpFOyBpKyspIHsKKwkJ ZHVrX3N0cmNhY2hlX2VudHJ5ICpjID0gaGVhcC0+c3RyY2FjaGUgKyBpOworCQlpZiAoYy0+aCA9 PSBoKSB7CisJCQlEVUtfREQoRFVLX0REUFJJTlQoImRlbGV0aW5nIHdlYWsgc3RyY2FjaGUgcmVm ZXJlbmNlIHRvIGhzdHJpbmcgJXAgZnJvbSBoZWFwICVwIiwKKwkJCSAgICAgICAgICAgICAgICAg ICAodm9pZCAqKSBoLCAodm9pZCAqKSBoZWFwKSk7CisJCQljLT5oID0gTlVMTDsKKworCQkJLyog WFhYOiB0aGUgc3RyaW5nIHNob3VsZG4ndCBhcHBlYXIgdHdpY2UsIGJ1dCB3ZSBub3cgbG9vcCB0 byB0aGUKKwkJCSAqIGVuZCBhbnl3YXk7IGlmIGZpeGVkLCBhZGQgYSBsb29waW5nIGFzc2VydGlv biB0byBlbnN1cmUgdGhlcmUKKwkJCSAqIGlzIG5vIGR1cGxpY2F0ZS4KKwkJCSAqLworCQl9CisJ fQorfQorCisvKgorICogIFN0cmluZyBzY2FubmluZyBoZWxwZXJzCisgKgorICogIEFsbCBieXRl cyBvdGhlciB0aGFuIFVURi04IGNvbnRpbnVhdGlvbiBieXRlcyAoWzB4ODAsMHhiZl0pIGFyZQor ICogIGNvbnNpZGVyZWQgdG8gY29udHJpYnV0ZSBhIGNoYXJhY3Rlci4gIFRoaXMgbXVzdCBtYXRj aCBob3cgc3RyaW5nCisgKiAgY2hhcmFjdGVyIGxlbmd0aCBpcyBjb21wdXRlZC4KKyAqLworCitE VUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgKmR1a19fc2Nhbl9mb3J3YXJkcyhjb25zdCBkdWtf dWludDhfdCAqcCwgY29uc3QgZHVrX3VpbnQ4X3QgKnEsIGR1a191aW50X2Zhc3QzMl90IG4pIHsK Kwl3aGlsZSAobiA+IDApIHsKKwkJZm9yICg7OykgeworCQkJcCsrOworCQkJaWYgKHAgPj0gcSkg eworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJaWYgKCgqcCAmIDB4YzApICE9IDB4ODApIHsK KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQluLS07CisJfQorCXJldHVybiBwOworfQorCitEVUtf TE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgKmR1a19fc2Nhbl9iYWNrd2FyZHMoY29uc3QgZHVrX3Vp bnQ4X3QgKnAsIGNvbnN0IGR1a191aW50OF90ICpxLCBkdWtfdWludF9mYXN0MzJfdCBuKSB7CisJ d2hpbGUgKG4gPiAwKSB7CisJCWZvciAoOzspIHsKKwkJCXAtLTsKKwkJCWlmIChwIDwgcSkgewor CQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJaWYgKCgqcCAmIDB4YzApICE9IDB4ODApIHsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCQluLS07CisJfQorCXJldHVybiBwOworfQorCisvKgorICog IENvbnZlcnQgY2hhciBvZmZzZXQgdG8gYnl0ZSBvZmZzZXQKKyAqCisgKiAgQXZvaWQgdXNpbmcg dGhlIHN0cmluZyBjYWNoZSBpZiBwb3NzaWJsZTogZm9yIEFTQ0lJIHN0cmluZ3MgYnl0ZSBhbmQK KyAqICBjaGFyIG9mZnNldHMgYXJlIGVxdWFsIGFuZCBmb3Igc2hvcnQgc3RyaW5ncyBkaXJlY3Qg c2Nhbm5pbmcgbWF5IGJlCisgKiAgYmV0dGVyIHRoYW4gdXNpbmcgdGhlIHN0cmluZyBjYWNoZSAo d2hpY2ggbWF5IGV2aWN0IGEgbW9yZSBpbXBvcnRhbnQKKyAqICBlbnRyeSkuCisgKgorICogIFR5 cGluZyBub3cgYXNzdW1lcyAzMi1iaXQgc3RyaW5nIGJ5dGUvY2hhciBvZmZzZXRzIChkdWtfdWlu dF9mYXN0MzJfdCkuCisgKiAgQmV0dGVyIHR5cGluZyBtaWdodCBiZSB0byB1c2UgZHVrX3NpemVf dC4KKyAqCisgKiAgQ2FsbGVyIHNob3VsZCBlbnN1cmUgJ2NoYXJfb2Zmc2V0JyBpcyB3aXRoaW4g dGhlIHN0cmluZyBib3VuZHMgWzAsY2hhcmxlbl0KKyAqICAoZW5kcG9pbnQgaXMgaW5jbHVzaXZl KS4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBubyBtZW1vcnkgdW5zYWZlCisgKiAgYmVoYXZp b3Igd2lsbCBoYXBwZW4gYnV0IGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLgorICovCisKK0RVS19J TlRFUk5BTCBkdWtfdWludF9mYXN0MzJfdCBkdWtfaGVhcF9zdHJjYWNoZV9vZmZzZXRfY2hhcjJi eXRlKGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpoLCBkdWtfdWludF9mYXN0MzJfdCBj aGFyX29mZnNldCkgeworCWR1a19oZWFwICpoZWFwOworCWR1a19zdHJjYWNoZV9lbnRyeSAqc2Nl OworCWR1a191aW50X2Zhc3QzMl90IGJ5dGVfb2Zmc2V0OworCWR1a191aW50X3QgaTsKKwlkdWtf Ym9vbF90IHVzZV9jYWNoZTsKKwlkdWtfdWludF9mYXN0MzJfdCBkaXN0X3N0YXJ0LCBkaXN0X2Vu ZCwgZGlzdF9zY2U7CisJZHVrX3VpbnRfZmFzdDMyX3QgY2hhcl9sZW5ndGg7CisJY29uc3QgZHVr X3VpbnQ4X3QgKnBfc3RhcnQ7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnBfZW5kOworCWNvbnN0IGR1 a191aW50OF90ICpwX2ZvdW5kOworCisJLyoKKwkgKiAgRm9yIEFTQ0lJIHN0cmluZ3MsIHRoZSBh bnN3ZXIgaXMgc2ltcGxlLgorCSAqLworCisJaWYgKERVS19MSUtFTFkoRFVLX0hTVFJJTkdfSVNf QVNDSUkoaCkpKSB7CisJCXJldHVybiBjaGFyX29mZnNldDsKKwl9CisKKwljaGFyX2xlbmd0aCA9 IChkdWtfdWludF9mYXN0MzJfdCkgRFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oaCk7CisJRFVLX0FT U0VSVChjaGFyX29mZnNldCA8PSBjaGFyX2xlbmd0aCk7CisKKwlpZiAoRFVLX0xJS0VMWShEVUtf SFNUUklOR19JU19BU0NJSShoKSkpIHsKKwkJLyogTXVzdCByZWNoZWNrIGJlY2F1c2UgdGhlICdp cyBhc2NpaScgZmxhZyBtYXkgYmUgc2V0CisJCSAqIGxhemlseS4gIEFsdGVybmF0aXZlbHksIHdl IGNvdWxkIGp1c3QgY29tcGFyZSBjaGFybGVuCisJCSAqIHRvIGJ5dGVsZW4uCisJCSAqLworCQly ZXR1cm4gY2hhcl9vZmZzZXQ7CisJfQorCisJLyoKKwkgKiAgRm9yIG5vbi1BU0NJSSBzdHJpbmdz LCB3ZSBuZWVkIHRvIHNjYW4gZm9yd2FyZHMgb3IgYmFja3dhcmRzCisJICogIGZyb20gc29tZSBz dGFydGluZyBwb2ludC4gIFRoZSBzdGFydGluZyBwb2ludCBtYXkgYmUgdGhlIHN0YXJ0CisJICog IG9yIGVuZCBvZiB0aGUgc3RyaW5nLCBvciBzb21lIGNhY2hlZCBtaWRwb2ludCBpbiB0aGUgc3Ry aW5nCisJICogIGNhY2hlLgorCSAqCisJICogIEZvciAic2hvcnQiIHN0cmluZ3Mgd2Ugc2ltcGx5 IHNjYW4gd2l0aG91dCBjaGVja2luZyBvciB1cGRhdGluZworCSAqICB0aGUgY2FjaGUuICBGb3Ig bG9uZ2VyIHN0cmluZ3Mgd2UgY2hlY2sgYW5kIHVwZGF0ZSB0aGUgY2FjaGUgYXMKKwkgKiAgbmVj ZXNzYXJ5LCBpbnNlcnRpbmcgYSBuZXcgY2FjaGUgZW50cnkgaWYgbm9uZSBleGlzdHMuCisJICov CisKKwlEVUtfREREKERVS19ERERQUklOVCgibm9uLWFzY2lpIHN0cmluZyAlcCwgY2hhcl9vZmZz ZXQ9JWxkLCBjbGVuPSVsZCwgYmxlbj0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgICh2b2lk ICopIGgsIChsb25nKSBjaGFyX29mZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykg RFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oaCksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpKSk7CisKKwloZWFwID0gdGhyLT5oZWFwOworCXNj ZSA9IE5VTEw7CisJdXNlX2NhY2hlID0gKGNoYXJfbGVuZ3RoID4gRFVLX0hFQVBfU1RSSU5HQ0FD SEVfTk9DQUNIRV9MSU1JVCk7CisKKwlpZiAodXNlX2NhY2hlKSB7CisjaWYgZGVmaW5lZChEVUtf VVNFX0RFQlVHX0xFVkVMKSAmJiAoRFVLX1VTRV9ERUJVR19MRVZFTCA+PSAyKQorCQlEVUtfRERE KERVS19ERERQUklOVCgic3RyaW5nY2FjaGUgYmVmb3JlIGNoYXIyYnl0ZSAodXNpbmcgY2FjaGUp OiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IERVS19IRUFQX1NUUkNBQ0hFX1NJWkU7IGkrKykgewor CQkJZHVrX3N0cmNhY2hlX2VudHJ5ICpjID0gaGVhcC0+c3RyY2FjaGUgKyBpOworCQkJRFVLX0RE RChEVUtfREREUFJJTlQoIiAgWyVsZF0gLT4gaD0lcCwgY2lkeD0lbGQsIGJpZHg9JWxkIiwKKwkJ CSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpLCAodm9pZCAqKSBjLT5oLCAobG9uZykgYy0+ Y2lkeCwgKGxvbmcpIGMtPmJpZHgpKTsKKwkJfQorI2VuZGlmCisKKwkJZm9yIChpID0gMDsgaSA8 IERVS19IRUFQX1NUUkNBQ0hFX1NJWkU7IGkrKykgeworCQkJZHVrX3N0cmNhY2hlX2VudHJ5ICpj ID0gaGVhcC0+c3RyY2FjaGUgKyBpOworCisJCQlpZiAoYy0+aCA9PSBoKSB7CisJCQkJc2NlID0g YzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogIFNjYW4gZnJvbSBzaG9y dGVzdCBkaXN0YW5jZToKKwkgKiAgICAtIHN0YXJ0IG9mIHN0cmluZworCSAqICAgIC0gZW5kIG9m IHN0cmluZworCSAqICAgIC0gY2FjaGUgZW50cnkgKGlmIGV4aXN0cykKKwkgKi8KKworCURVS19B U1NFUlQoRFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oaCkgPj0gY2hhcl9vZmZzZXQpOworCWRpc3Rf c3RhcnQgPSBjaGFyX29mZnNldDsKKwlkaXN0X2VuZCA9IGNoYXJfbGVuZ3RoIC0gY2hhcl9vZmZz ZXQ7CisJZGlzdF9zY2UgPSAwOyBEVUtfVU5SRUYoZGlzdF9zY2UpOyAgLyogaW5pdGlhbGl6ZSBm b3IgZGVidWcgcHJpbnRzLCBuZWVkZWQgaWYgc2NlPT1OVUxMICovCisKKwlwX3N0YXJ0ID0gKGNv bnN0IGR1a191aW50OF90ICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgpOworCXBfZW5kID0gKGNv bnN0IGR1a191aW50OF90ICopIChwX3N0YXJ0ICsgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkp OworCXBfZm91bmQgPSBOVUxMOworCisJaWYgKHNjZSkgeworCQlpZiAoY2hhcl9vZmZzZXQgPj0g c2NlLT5jaWR4KSB7CisJCQlkaXN0X3NjZSA9IGNoYXJfb2Zmc2V0IC0gc2NlLT5jaWR4OworCQkJ aWYgKChkaXN0X3NjZSA8PSBkaXN0X3N0YXJ0KSAmJiAoZGlzdF9zY2UgPD0gZGlzdF9lbmQpKSB7 CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm5vbi1hc2NpaSBzdHJpbmcsIHVzZV9jYWNoZT0l bGQsIHNjZT0lcDolbGQ6JWxkLCAiCisJCQkJICAgICAgICAgICAgICAgICAgICAgImRpc3Rfc3Rh cnQ9JWxkLCBkaXN0X2VuZD0lbGQsIGRpc3Rfc2NlPSVsZCA9PiAiCisJCQkJICAgICAgICAgICAg ICAgICAgICAgInNjYW4gZm9yd2FyZHMgZnJvbSBzY2UiLAorCQkJCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSB1c2VfY2FjaGUsICh2b2lkICopIChzY2UgPyBzY2UtPmggOiBOVUxMKSwKKwkJ CQkgICAgICAgICAgICAgICAgICAgICAoc2NlID8gKGxvbmcpIHNjZS0+Y2lkeCA6IChsb25nKSAt MSksCisJCQkJICAgICAgICAgICAgICAgICAgICAgKHNjZSA/IChsb25nKSBzY2UtPmJpZHggOiAo bG9uZykgLTEpLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBkaXN0X3N0YXJ0LCAo bG9uZykgZGlzdF9lbmQsIChsb25nKSBkaXN0X3NjZSkpOworCisJCQkJcF9mb3VuZCA9IGR1a19f c2Nhbl9mb3J3YXJkcyhwX3N0YXJ0ICsgc2NlLT5iaWR4LAorCQkJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcF9lbmQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0 X3NjZSk7CisJCQkJZ290byBzY2FuX2RvbmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkaXN0X3Nj ZSA9IHNjZS0+Y2lkeCAtIGNoYXJfb2Zmc2V0OworCQkJaWYgKChkaXN0X3NjZSA8PSBkaXN0X3N0 YXJ0KSAmJiAoZGlzdF9zY2UgPD0gZGlzdF9lbmQpKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJ TlQoIm5vbi1hc2NpaSBzdHJpbmcsIHVzZV9jYWNoZT0lbGQsIHNjZT0lcDolbGQ6JWxkLCAiCisJ CQkJICAgICAgICAgICAgICAgICAgICAgImRpc3Rfc3RhcnQ9JWxkLCBkaXN0X2VuZD0lbGQsIGRp c3Rfc2NlPSVsZCA9PiAiCisJCQkJICAgICAgICAgICAgICAgICAgICAgInNjYW4gYmFja3dhcmRz IGZyb20gc2NlIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgdXNlX2NhY2hlLCAo dm9pZCAqKSAoc2NlID8gc2NlLT5oIDogTlVMTCksCisJCQkJICAgICAgICAgICAgICAgICAgICAg KHNjZSA/IChsb25nKSBzY2UtPmNpZHggOiAobG9uZykgLTEpLAorCQkJCSAgICAgICAgICAgICAg ICAgICAgIChzY2UgPyAobG9uZykgc2NlLT5iaWR4IDogKGxvbmcpIC0xKSwKKwkJCQkgICAgICAg ICAgICAgICAgICAgICAobG9uZykgZGlzdF9zdGFydCwgKGxvbmcpIGRpc3RfZW5kLCAobG9uZykg ZGlzdF9zY2UpKTsKKworCQkJCXBfZm91bmQgPSBkdWtfX3NjYW5fYmFja3dhcmRzKHBfc3RhcnQg KyBzY2UtPmJpZHgsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zdGFydCwK KwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0X3NjZSk7CisJCQkJZ290byBz Y2FuX2RvbmU7CisJCQl9CisJCX0KKwl9CisKKwkvKiBubyBzY2UsIG9yIHNjZSBzY2FuIG5vdCBi ZXN0ICovCisKKwlpZiAoZGlzdF9zdGFydCA8PSBkaXN0X2VuZCkgeworCQlEVUtfREREKERVS19E RERQUklOVCgibm9uLWFzY2lpIHN0cmluZywgdXNlX2NhY2hlPSVsZCwgc2NlPSVwOiVsZDolbGQs ICIKKwkJICAgICAgICAgICAgICAgICAgICAgImRpc3Rfc3RhcnQ9JWxkLCBkaXN0X2VuZD0lbGQs IGRpc3Rfc2NlPSVsZCA9PiAiCisJCSAgICAgICAgICAgICAgICAgICAgICJzY2FuIGZvcndhcmRz IGZyb20gc3RyaW5nIHN0YXJ0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHVzZV9j YWNoZSwgKHZvaWQgKikgKHNjZSA/IHNjZS0+aCA6IE5VTEwpLAorCQkgICAgICAgICAgICAgICAg ICAgICAoc2NlID8gKGxvbmcpIHNjZS0+Y2lkeCA6IChsb25nKSAtMSksCisJCSAgICAgICAgICAg ICAgICAgICAgIChzY2UgPyAobG9uZykgc2NlLT5iaWR4IDogKGxvbmcpIC0xKSwKKwkJICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIGRpc3Rfc3RhcnQsIChsb25nKSBkaXN0X2VuZCwgKGxvbmcp IGRpc3Rfc2NlKSk7CisKKwkJcF9mb3VuZCA9IGR1a19fc2Nhbl9mb3J3YXJkcyhwX3N0YXJ0LAor CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfZW5kLAorCQkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRpc3Rfc3RhcnQpOworCX0gZWxzZSB7CisJCURVS19EREQoRFVLX0RERFBS SU5UKCJub24tYXNjaWkgc3RyaW5nLCB1c2VfY2FjaGU9JWxkLCBzY2U9JXA6JWxkOiVsZCwgIgor CQkgICAgICAgICAgICAgICAgICAgICAiZGlzdF9zdGFydD0lbGQsIGRpc3RfZW5kPSVsZCwgZGlz dF9zY2U9JWxkID0+ICIKKwkJICAgICAgICAgICAgICAgICAgICAgInNjYW4gYmFja3dhcmRzIGZy b20gc3RyaW5nIGVuZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSB1c2VfY2FjaGUs ICh2b2lkICopIChzY2UgPyBzY2UtPmggOiBOVUxMKSwKKwkJICAgICAgICAgICAgICAgICAgICAg KHNjZSA/IChsb25nKSBzY2UtPmNpZHggOiAobG9uZykgLTEpLAorCQkgICAgICAgICAgICAgICAg ICAgICAoc2NlID8gKGxvbmcpIHNjZS0+YmlkeCA6IChsb25nKSAtMSksCisJCSAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBkaXN0X3N0YXJ0LCAobG9uZykgZGlzdF9lbmQsIChsb25nKSBkaXN0 X3NjZSkpOworCisJCXBfZm91bmQgPSBkdWtfX3NjYW5fYmFja3dhcmRzKHBfZW5kLAorCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwX3N0YXJ0LAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaXN0X2VuZCk7CisJfQorCisgc2Nhbl9kb25lOgorCisJaWYgKERVS19VTkxJ S0VMWShwX2ZvdW5kID09IE5VTEwpKSB7CisJCS8qIFNjYW4gZXJyb3I6IHRoaXMgc2hvdWxkbid0 IG5vcm1hbGx5IGhhcHBlbjsgaXQgY291bGQgaGFwcGVuIGlmCisJCSAqIHN0cmluZyBpcyBub3Qg dmFsaWQgVVRGLTggZGF0YSwgYW5kIGNsZW4vYmxlbiBhcmUgbm90IGNvbnNpc3RlbnQKKwkJICog d2l0aCB0aGUgc2Nhbm5pbmcgYWxnb3JpdGhtLgorCQkgKi8KKwkJZ290byBzY2FuX2Vycm9yOwor CX0KKworCURVS19BU1NFUlQocF9mb3VuZCA+PSBwX3N0YXJ0KTsKKwlEVUtfQVNTRVJUKHBfZm91 bmQgPD0gcF9lbmQpOyAgLyogbWF5IGJlIGVxdWFsICovCisJYnl0ZV9vZmZzZXQgPSAoZHVrX3Vp bnQzMl90KSAocF9mb3VuZCAtIHBfc3RhcnQpOworCisJRFVLX0RERChEVUtfREREUFJJTlQoIi0+ IHN0cmluZyAlcCwgY2lkeCAlbGQgLT4gYmlkeCAlbGQiLAorCSAgICAgICAgICAgICAgICAgICAg ICh2b2lkICopIGgsIChsb25nKSBjaGFyX29mZnNldCwgKGxvbmcpIGJ5dGVfb2Zmc2V0KSk7CisK KwkvKgorCSAqICBVcGRhdGUgY2FjaGUgZW50cnkgKGFsbG9jYXRpbmcgaWYgbmVjZXNzYXJ5KSwg YW5kIG1vdmUgdGhlCisJICogIGNhY2hlIGVudHJ5IHRvIHRoZSBmaXJzdCBwbGFjZSAoaW4gYW4g IkxSVSIgcG9saWN5KS4KKwkgKi8KKworCWlmICh1c2VfY2FjaGUpIHsKKwkJLyogdXBkYXRlIGVu dHJ5LCBhbGxvY2F0aW5nIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoIXNjZSkgeworCQkJc2NlID0g aGVhcC0+c3RyY2FjaGUgKyBEVUtfSEVBUF9TVFJDQUNIRV9TSVpFIC0gMTsgIC8qIHRha2UgbGFz dCBlbnRyeSAqLworCQkJc2NlLT5oID0gaDsKKwkJfQorCQlEVUtfQVNTRVJUKHNjZSAhPSBOVUxM KTsKKwkJc2NlLT5iaWR4ID0gKGR1a191aW50MzJfdCkgKHBfZm91bmQgLSBwX3N0YXJ0KTsKKwkJ c2NlLT5jaWR4ID0gKGR1a191aW50MzJfdCkgY2hhcl9vZmZzZXQ7CisKKwkJLyogTFJVOiBtb3Zl IG91ciBlbnRyeSB0byBmaXJzdCAqLworCQlpZiAoc2NlID4gJmhlYXAtPnN0cmNhY2hlWzBdKSB7 CisJCQkvKgorCQkJICogICBBICAgICAgICAgICAgICAgICAgQworCQkJICogICBCICAgICAgICAg ICAgICAgICAgQQorCQkJICogICBDIDwtIHNjZSAgICA9PT4gICAgQgorCQkJICogICBEICAgICAg ICAgICAgICAgICAgRAorCQkJICovCisJCQlkdWtfc3RyY2FjaGVfZW50cnkgdG1wOworCisJCQl0 bXAgPSAqc2NlOworCQkJZHVrX21lbW1vdmUoKHZvaWQgKikgKCZoZWFwLT5zdHJjYWNoZVsxXSks CisJCQkgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAoJmhlYXAtPnN0cmNhY2hlWzBdKSwKKwkJ CSAgICAgICAgICAgIChzaXplX3QpICgoKGNoYXIgKikgc2NlKSAtICgoY2hhciAqKSAmaGVhcC0+ c3RyY2FjaGVbMF0pKSk7CisJCQloZWFwLT5zdHJjYWNoZVswXSA9IHRtcDsKKworCQkJLyogJ3Nj ZScgcG9pbnRzIHRvIHRoZSB3cm9uZyBlbnRyeSBoZXJlLCBidXQgaXMgbm8gbG9uZ2VyIHVzZWQg Ki8KKwkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR19MRVZFTCkgJiYgKERVS19VU0VfREVC VUdfTEVWRUwgPj0gMikKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInN0cmluZ2NhY2hlIGFmdGVy IGNoYXIyYnl0ZSAodXNpbmcgY2FjaGUpOiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IERVS19IRUFQ X1NUUkNBQ0hFX1NJWkU7IGkrKykgeworCQkJZHVrX3N0cmNhY2hlX2VudHJ5ICpjID0gaGVhcC0+ c3RyY2FjaGUgKyBpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIiAgWyVsZF0gLT4gaD0lcCwg Y2lkeD0lbGQsIGJpZHg9JWxkIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpLCAo dm9pZCAqKSBjLT5oLCAobG9uZykgYy0+Y2lkeCwgKGxvbmcpIGMtPmJpZHgpKTsKKwkJfQorI2Vu ZGlmCisJfQorCisJcmV0dXJuIGJ5dGVfb2Zmc2V0OworCisgc2Nhbl9lcnJvcjoKKwlEVUtfRVJS T1JfSU5URVJOQUwodGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKK30KKy8qCisg KiAgSGVhcCBzdHJpbmcgdGFibGUgaGFuZGxpbmcsIHN0cmluZyBpbnRlcm5pbmcuCisgKi8KKwor LyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKiBS ZXNpemUgY2hlY2tzIG5vdCBuZWVkZWQgaWYgbWluc2l6ZSA9PSBtYXhzaXplLCB0eXBpY2FsIGZv ciBsb3cgbWVtb3J5CisgKiB0YXJnZXRzLgorICovCisjZGVmaW5lIERVS19fU1RSVEFCX1JFU0la RV9DSEVDSworI2lmIChEVUtfVVNFX1NUUlRBQl9NSU5TSVpFID09IERVS19VU0VfU1RSVEFCX01B WFNJWkUpCisjdW5kZWYgRFVLX19TVFJUQUJfUkVTSVpFX0NIRUNLCisjZW5kaWYKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkKKyNkZWZpbmUgRFVLX19IRUFQUFRSX0VOQzE2 KGhlYXAscHRyKSAgICBEVUtfVVNFX0hFQVBQVFJfRU5DMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAo cHRyKSkKKyNkZWZpbmUgRFVLX19IRUFQUFRSX0RFQzE2KGhlYXAsdmFsKSAgICBEVUtfVVNFX0hF QVBQVFJfREVDMTYoKGhlYXApLT5oZWFwX3VkYXRhLCAodmFsKSkKKyNkZWZpbmUgRFVLX19HRVRf U1RSVEFCTEUoaGVhcCkgICAgICAgICAoKGhlYXApLT5zdHJ0YWJsZTE2KQorI2Vsc2UKKyNkZWZp bmUgRFVLX19IRUFQUFRSX0VOQzE2KGhlYXAscHRyKSAgICAocHRyKQorI2RlZmluZSBEVUtfX0hF QVBQVFJfREVDMTYoaGVhcCx2YWwpICAgICh2YWwpCisjZGVmaW5lIERVS19fR0VUX1NUUlRBQkxF KGhlYXApICAgICAgICAgKChoZWFwKS0+c3RydGFibGUpCisjZW5kaWYKKworI2RlZmluZSBEVUtf X1NUUlRBQl9VMzJfTUFYX1NUUkxFTiAgICAgIDEwICAgICAgICAgICAgICAgLyogNCcyOTQnOTY3 JzI5NSAqLworCisvKgorICogIERlYnVnIGR1bXAgc3RyaW5ndGFibGUuCisgKi8KKworI2lmIGRl ZmluZWQoRFVLX1VTRV9ERUJVRykKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19oZWFwX3N0cnRhYmxl X2R1bXAoZHVrX2hlYXAgKmhlYXApIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BUUkNP TVApCisJZHVrX3VpbnQxNl90ICpzdHJ0YWJsZTsKKyNlbHNlCisJZHVrX2hzdHJpbmcgKipzdHJ0 YWJsZTsKKyNlbmRpZgorCWR1a191aW50MzJfdCBpOworCWR1a19oc3RyaW5nICpoOworCWR1a19z aXplX3QgY291bnRfdG90YWwgPSAwOworCWR1a19zaXplX3QgY291bnRfY2hhaW47CisJZHVrX3Np emVfdCBjb3VudF9jaGFpbl9taW4gPSBEVUtfU0laRV9NQVg7CisJZHVrX3NpemVfdCBjb3VudF9j aGFpbl9tYXggPSAwOworCWR1a19zaXplX3QgY291bnRfbGVuWzhdOyAgLyogY2hhaW4gbGVuZ3Ro cyBmcm9tIDAgdG8gNyAqLworCisJaWYgKGhlYXAgPT0gTlVMTCkgeworCQlEVUtfRChEVUtfRFBS SU5UKCJzdHJpbmcgdGFibGUsIGhlYXA9TlVMTCIpKTsKKwkJcmV0dXJuOworCX0KKworCXN0cnRh YmxlID0gRFVLX19HRVRfU1RSVEFCTEUoaGVhcCk7CisJaWYgKHN0cnRhYmxlID09IE5VTEwpIHsK KwkJRFVLX0QoRFVLX0RQUklOVCgic3RyaW5nIHRhYmxlLCBzdHJ0YWI9TlVMTCIpKTsKKwkJcmV0 dXJuOworCX0KKworCWR1a19tZW16ZXJvKCh2b2lkICopIGNvdW50X2xlbiwgc2l6ZW9mKGNvdW50 X2xlbikpOworCWZvciAoaSA9IDA7IGkgPCBoZWFwLT5zdF9zaXplOyBpKyspIHsKKwkJaCA9IERV S19fSEVBUFBUUl9ERUMxNihoZWFwLCBzdHJ0YWJsZVtpXSk7CisJCWNvdW50X2NoYWluID0gMDsK KwkJd2hpbGUgKGggIT0gTlVMTCkgeworCQkJY291bnRfY2hhaW4rKzsKKwkJCWggPSBoLT5oZHIu aF9uZXh0OworCQl9CisJCWlmIChjb3VudF9jaGFpbiA8IHNpemVvZihjb3VudF9sZW4pIC8gc2l6 ZW9mKGR1a19zaXplX3QpKSB7CisJCQljb3VudF9sZW5bY291bnRfY2hhaW5dKys7CisJCX0KKwkJ Y291bnRfY2hhaW5fbWF4ID0gKGNvdW50X2NoYWluID4gY291bnRfY2hhaW5fbWF4ID8gY291bnRf Y2hhaW4gOiBjb3VudF9jaGFpbl9tYXgpOworCQljb3VudF9jaGFpbl9taW4gPSAoY291bnRfY2hh aW4gPCBjb3VudF9jaGFpbl9taW4gPyBjb3VudF9jaGFpbiA6IGNvdW50X2NoYWluX21pbik7CisJ CWNvdW50X3RvdGFsICs9IGNvdW50X2NoYWluOworCX0KKworCURVS19EKERVS19EUFJJTlQoInN0 cmluZyB0YWJsZSwgc3RydGFiPSVwLCBjb3VudD0lbHUsIGNoYWluIG1pbj0lbHUgbWF4PSVsdSBh dmc9JWxmOiAiCisJICAgICAgICAgICAgICAgICAiY291bnRzOiAlbHUgJWx1ICVsdSAlbHUgJWx1 ICVsdSAlbHUgJWx1IC4uLiIsCisJICAgICAgICAgICAgICAgICAodm9pZCAqKSBoZWFwLT5zdHJ0 YWJsZSwgKHVuc2lnbmVkIGxvbmcpIGNvdW50X3RvdGFsLAorCSAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpIGNvdW50X2NoYWluX21pbiwgKHVuc2lnbmVkIGxvbmcpIGNvdW50X2NoYWlu X21heCwKKwkgICAgICAgICAgICAgICAgIChkb3VibGUpIGNvdW50X3RvdGFsIC8gKGRvdWJsZSkg aGVhcC0+c3Rfc2l6ZSwKKwkgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBjb3VudF9s ZW5bMF0sICh1bnNpZ25lZCBsb25nKSBjb3VudF9sZW5bMV0sCisJICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgY291bnRfbGVuWzJdLCAodW5zaWduZWQgbG9uZykgY291bnRfbGVuWzNd LAorCSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGNvdW50X2xlbls0XSwgKHVuc2ln bmVkIGxvbmcpIGNvdW50X2xlbls1XSwKKwkgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25n KSBjb3VudF9sZW5bNl0sICh1bnNpZ25lZCBsb25nKSBjb3VudF9sZW5bN10pKTsKK30KKyNlbmRp ZiAgLyogRFVLX1VTRV9ERUJVRyAqLworCisvKgorICogIEFzc2VydGlvbiBoZWxwZXIgdG8gZW5z dXJlIHN0cnRhYmxlIGlzIHBvcHVsYXRlZCBjb3JyZWN0bHkuCisgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9BU1NFUlRJT05TKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19zdHJ0YWJsZV9hc3NlcnRf Y2hlY2tzKGR1a19oZWFwICpoZWFwKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJD T01QKQorCWR1a191aW50MTZfdCAqc3RydGFibGU7CisjZWxzZQorCWR1a19oc3RyaW5nICoqc3Ry dGFibGU7CisjZW5kaWYKKwlkdWtfdWludDMyX3QgaTsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtf c2l6ZV90IGNvdW50ID0gMDsKKworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKworCXN0cnRh YmxlID0gRFVLX19HRVRfU1RSVEFCTEUoaGVhcCk7CisJaWYgKHN0cnRhYmxlICE9IE5VTEwpIHsK KwkJRFVLX0FTU0VSVChoZWFwLT5zdF9zaXplICE9IDApOworCQlEVUtfQVNTRVJUKGhlYXAtPnN0 X21hc2sgPT0gaGVhcC0+c3Rfc2l6ZSAtIDEpOworCisJCWZvciAoaSA9IDA7IGkgPCBoZWFwLT5z dF9zaXplOyBpKyspIHsKKwkJCWggPSBEVUtfX0hFQVBQVFJfREVDMTYoaGVhcCwgc3RydGFibGVb aV0pOworCQkJd2hpbGUgKGggIT0gTlVMTCkgeworCQkJCURVS19BU1NFUlQoKERVS19IU1RSSU5H X0dFVF9IQVNIKGgpICYgaGVhcC0+c3RfbWFzaykgPT0gaSk7CisJCQkJY291bnQrKzsKKwkJCQlo ID0gaC0+aGRyLmhfbmV4dDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCURVS19BU1NFUlQoaGVh cC0+c3Rfc2l6ZSA9PSAwKTsKKwkJRFVLX0FTU0VSVChoZWFwLT5zdF9tYXNrID09IDApOworCX0K KworI2lmIGRlZmluZWQoRFVLX19TVFJUQUJfUkVTSVpFX0NIRUNLKQorCURVS19BU1NFUlQoY291 bnQgPT0gKGR1a19zaXplX3QpIGhlYXAtPnN0X2NvdW50KTsKKyNlbmRpZgorfQorI2VuZGlmICAv KiBEVUtfVVNFX0FTU0VSVElPTlMgKi8KKworLyoKKyAqICBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6 ZSBhIGR1a19oc3RyaW5nLgorICoKKyAqICBSZXR1cm5zIGEgTlVMTCBpZiBhbGxvY2F0aW9uIG9y IGluaXRpYWxpemF0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbi4KKyAqCisgKiAgVGhlIHN0cmlu ZyB3b24ndCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBzdHJpbmcgdGFibGUgYW5kIGlzbid0IHRyYWNr ZWQgaW4KKyAqICBhbnkgd2F5IChsaW5rIHBvaW50ZXJzIHdpbGwgYmUgTlVMTCkuICBUaGUgY2Fs bGVyIG11c3QgcGxhY2UgdGhlIHN0cmluZworICogIGludG8gdGhlIHN0cmluZyB0YWJsZSB3aXRo b3V0IGFueSByaXNrIG9mIGEgbG9uZ2ptcCwgb3RoZXJ3aXNlIHRoZSBzdHJpbmcKKyAqICBpcyBs ZWFrZWQuCisgKi8KKworRFVLX0xPQ0FMIGR1a19oc3RyaW5nICpkdWtfX3N0cnRhYmxlX2FsbG9j X2hzdHJpbmcoZHVrX2hlYXAgKmhlYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkdWtfdWludDhfdCAqc3RyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VpbnQzMl90IGJsZW4s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf dWludDMyX3Qgc3RyaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGR1a191aW50OF90ICpleHRkYXRhKSB7CisJZHVrX2hzdHJpbmcg KnJlczsKKwljb25zdCBkdWtfdWludDhfdCAqZGF0YTsKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0hT VFJJTkdfQVJSSURYKQorCWR1a191YXJyaWR4X3QgZHVtbXk7CisjZW5kaWYKKworCURVS19BU1NF UlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfVU5SRUYoZXh0ZGF0YSk7CisKKyNpZiBkZWZpbmVkKERV S19VU0VfU1RSTEVOMTYpCisJLyogSWYgYmxlbiA8PSAweGZmZmZVTCwgY2xlbiBpcyBhbHNvIGd1 YXJhbnRlZWQgdG8gYmUgPD0gMHhmZmZmVUwuICovCisJaWYgKGJsZW4gPiAweGZmZmZVTCkgewor CQlEVUtfRChEVUtfRFBSSU5UKCIxNi1iaXQgc3RyaW5nIGJsZW4vY2xlbiBhY3RpdmUgYW5kIGJs ZW4gb3ZlciAxNiBiaXRzLCByZWplY3QgaW50ZXJuIikpOworCQlnb3RvIGFsbG9jX2Vycm9yOwor CX0KKyNlbmRpZgorCisJLyogWFhYOiBNZW16ZXJvaW5nIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJl IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5CisJICogYmVjYXVzZSB3ZSBjb3VsZCBqdXN0IGluaXRp YWxpemUgYWxsIGZpZWxkcyBleHBsaWNpdGx5IChhbG1vc3QKKwkgKiBhbGwgZmllbGRzIGFyZSBp bml0aWFsaXplZCBleHBsaWNpdGx5IGFueXdheSkuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNF X0hTVFJJTkdfRVhUREFUQSkgJiYgZGVmaW5lZChEVUtfVVNFX0VYVFNUUl9JTlRFUk5fQ0hFQ0sp CisJaWYgKGV4dGRhdGEpIHsKKwkJcmVzID0gKGR1a19oc3RyaW5nICopIERVS19BTExPQyhoZWFw LCBzaXplb2YoZHVrX2hzdHJpbmdfZXh0ZXJuYWwpKTsKKwkJaWYgKERVS19VTkxJS0VMWShyZXMg PT0gTlVMTCkpIHsKKwkJCWdvdG8gYWxsb2NfZXJyb3I7CisJCX0KKwkJZHVrX21lbXplcm8ocmVz LCBzaXplb2YoZHVrX2hzdHJpbmdfZXh0ZXJuYWwpKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhQ TElDSVRfTlVMTF9JTklUKQorCQlEVUtfSEVBUEhEUl9TVFJJTkdfSU5JVF9OVUxMUygmcmVzLT5o ZHIpOworI2VuZGlmCisJCURVS19IRUFQSERSX1NFVF9UWVBFX0FORF9GTEFHUygmcmVzLT5oZHIs IERVS19IVFlQRV9TVFJJTkcsIERVS19IU1RSSU5HX0ZMQUdfRVhUREFUQSk7CisKKwkJRFVLX0FT U0VSVChleHRkYXRhW2JsZW5dID09IDApOyAgLyogQXBwbGljYXRpb24gcmVzcG9uc2liaWxpdHku ICovCisJCWRhdGEgPSBleHRkYXRhOworCQkoKGR1a19oc3RyaW5nX2V4dGVybmFsICopIHJlcykt PmV4dGRhdGEgPSBleHRkYXRhOworCX0gZWxzZQorI2VuZGlmICAvKiBEVUtfVVNFX0hTVFJJTkdf RVhUREFUQSAmJiBEVUtfVVNFX0VYVFNUUl9JTlRFUk5fQ0hFQ0sgKi8KKwl7CisJCWR1a191aW50 OF90ICpkYXRhX3RtcDsKKworCQkvKiBOVUwgdGVybWluYXRlIGZvciBjb252ZW5pZW50IEMgYWNj ZXNzICovCisJCURVS19BU1NFUlQoc2l6ZW9mKGR1a19oc3RyaW5nKSArIGJsZW4gKyAxID4gYmxl bik7ICAvKiBObyB3cmFwLCBsaW1pdHMgZW5zdXJlLiAqLworCQlyZXMgPSAoZHVrX2hzdHJpbmcg KikgRFVLX0FMTE9DKGhlYXAsIHNpemVvZihkdWtfaHN0cmluZykgKyBibGVuICsgMSk7CisJCWlm IChEVUtfVU5MSUtFTFkocmVzID09IE5VTEwpKSB7CisJCQlnb3RvIGFsbG9jX2Vycm9yOworCQl9 CisJCWR1a19tZW16ZXJvKHJlcywgc2l6ZW9mKGR1a19oc3RyaW5nKSk7CisjaWYgZGVmaW5lZChE VUtfVVNFX0VYUExJQ0lUX05VTExfSU5JVCkKKwkJRFVLX0hFQVBIRFJfU1RSSU5HX0lOSVRfTlVM TFMoJnJlcy0+aGRyKTsKKyNlbmRpZgorCQlEVUtfSEVBUEhEUl9TRVRfVFlQRV9BTkRfRkxBR1Mo JnJlcy0+aGRyLCBEVUtfSFRZUEVfU1RSSU5HLCAwKTsKKworCQlkYXRhX3RtcCA9IChkdWtfdWlu dDhfdCAqKSAocmVzICsgMSk7CisJCWR1a19tZW1jcHkoZGF0YV90bXAsIHN0ciwgYmxlbik7CisJ CWRhdGFfdG1wW2JsZW5dID0gKGR1a191aW50OF90KSAwOworCQlkYXRhID0gKGNvbnN0IGR1a191 aW50OF90ICopIGRhdGFfdG1wOworCX0KKworCURVS19IU1RSSU5HX1NFVF9CWVRFTEVOKHJlcywg Ymxlbik7CisJRFVLX0hTVFJJTkdfU0VUX0hBU0gocmVzLCBzdHJoYXNoKTsKKworCURVS19BU1NF UlQoIURVS19IU1RSSU5HX0hBU19BUlJJRFgocmVzKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0hT VFJJTkdfQVJSSURYKQorCXJlcy0+YXJyaWR4ID0gZHVrX2pzX3RvX2FycmF5aW5kZXhfc3RyaW5n KGRhdGEsIGJsZW4pOworCWlmIChyZXMtPmFycmlkeCAhPSBEVUtfSFNUUklOR19OT19BUlJBWV9J TkRFWCkgeworI2Vsc2UKKwlkdW1teSA9IGR1a19qc190b19hcnJheWluZGV4X3N0cmluZyhkYXRh LCBibGVuKTsKKwlpZiAoZHVtbXkgIT0gRFVLX0hTVFJJTkdfTk9fQVJSQVlfSU5ERVgpIHsKKyNl bmRpZgorCQkvKiBBcnJheSBpbmRleCBzdHJpbmdzIGNhbm5vdCBiZSBzeW1ib2wgc3RyaW5ncywK KwkJICogYW5kIHRoZXkncmUgYWx3YXlzIHB1cmUgQVNDSUkgc28gYmxlbiA9PSBjbGVuLgorCQkg Ki8KKwkJRFVLX0hTVFJJTkdfU0VUX0FSUklEWChyZXMpOworCQlEVUtfSFNUUklOR19TRVRfQVND SUkocmVzKTsKKwkJRFVLX0FTU0VSVChkdWtfdW5pY29kZV91bnZhbGlkYXRlZF91dGY4X2xlbmd0 aChkYXRhLCAoZHVrX3NpemVfdCkgYmxlbikgPT0gYmxlbik7CisJfSBlbHNlIHsKKwkJLyogQmVj YXVzZSAnZGF0YScgaXMgTlVMLXRlcm1pbmF0ZWQsIHdlIGRvbid0IG5lZWQgYQorCQkgKiBibGVu ID4gMCBjaGVjayBoZXJlLiAgRm9yIE5VTCAoMHgwMCkgdGhlIHN5bWJvbAorCQkgKiBjaGVja3Mg d2lsbCBiZSBmYWxzZS4KKwkJICovCisJCWlmIChEVUtfVU5MSUtFTFkoZGF0YVswXSA+PSAweDgw VSkpIHsKKwkJCWlmIChkYXRhWzBdIDw9IDB4ODEpIHsKKwkJCQlEVUtfSFNUUklOR19TRVRfU1lN Qk9MKHJlcyk7CisJCQl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gMHg4MlUgfHwgZGF0YVswXSA9PSAw eGZmVSkgeworCQkJCURVS19IU1RSSU5HX1NFVF9ISURERU4ocmVzKTsKKwkJCQlEVUtfSFNUUklO R19TRVRfU1lNQk9MKHJlcyk7CisJCQl9CisJCX0KKworCQkvKiBVc2luZyBhbiBleHBsaWNpdCAn QVNDSUknIGZsYWcgaGFzIGxhcmdlciBmb290cHJpbnQgKG9uZSBjYWxsIHNpdGUKKwkJICogb25s eSkgYnV0IGlzIHF1aXRlIHVzZWZ1bCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGVyZSdzIG5vIGV4cGxp Y2l0CisJCSAqICdjbGVuJyBpbiBkdWtfaHN0cmluZy4KKwkJICoKKwkJICogVGhlIGZsYWcgaXMg c2V0IGxhemlseSBmb3IgUkFNIHN0cmluZ3MuCisJCSAqLworCQlEVUtfQVNTRVJUKCFEVUtfSFNU UklOR19IQVNfQVNDSUkocmVzKSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfSFNUUklOR19MQVpZ X0NMRU4pCisJCS8qIENoYXJsZW4gaW5pdGlhbGl6ZWQgdG8gMCwgdXBkYXRlZCBvbi10aGUtZmx5 LiAqLworI2Vsc2UKKwkJZHVrX2hzdHJpbmdfaW5pdF9jaGFybGVuKHJlcyk7ICAvKiBBbHNvIHNl dHMgQVNDSUkgZmxhZy4gKi8KKyNlbmRpZgorCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJp bnRlcm5lZCBzdHJpbmcsIGhhc2g9MHglMDhseCwgYmxlbj0lbGQsIGhhc19hcnJpZHg9JWxkLCBo YXNfZXh0ZGF0YT0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBE VUtfSFNUUklOR19HRVRfSEFTSChyZXMpLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBE VUtfSFNUUklOR19HRVRfQllURUxFTihyZXMpLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSAoRFVLX0hTVFJJTkdfSEFTX0FSUklEWChyZXMpID8gMSA6IDApLAorCSAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAoRFVLX0hTVFJJTkdfSEFTX0VYVERBVEEocmVzKSA/IDEgOiAwKSkpOwor CisJRFVLX0FTU0VSVChyZXMgIT0gTlVMTCk7CisJcmV0dXJuIHJlczsKKworIGFsbG9jX2Vycm9y OgorCXJldHVybiBOVUxMOworfQorCisvKgorICogIEdyb3cgc3RydGFibGUgYWxsb2NhdGlvbiBp bi1wbGFjZS4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfX1NUUlRBQl9SRVNJWkVfQ0hFQ0spCitE VUtfTE9DQUwgdm9pZCBkdWtfX3N0cnRhYmxlX2dyb3dfaW5wbGFjZShkdWtfaGVhcCAqaGVhcCkg eworCWR1a191aW50MzJfdCBuZXdfc3Rfc2l6ZTsKKwlkdWtfdWludDMyX3Qgb2xkX3N0X3NpemU7 CisJZHVrX3VpbnQzMl90IGk7CisJZHVrX2hzdHJpbmcgKmg7CisJZHVrX2hzdHJpbmcgKm5leHQ7 CisJZHVrX2hzdHJpbmcgKnByZXY7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01Q KQorCWR1a191aW50MTZfdCAqbmV3X3B0cjsKKwlkdWtfdWludDE2X3QgKm5ld19wdHJfaGlnaDsK KyNlbHNlCisJZHVrX2hzdHJpbmcgKipuZXdfcHRyOworCWR1a19oc3RyaW5nICoqbmV3X3B0cl9o aWdoOworI2VuZGlmCisKKwlEVUtfREQoRFVLX0REUFJJTlQoImdyb3cgaW4tcGxhY2U6ICVsdSAt PiAlbHUiLCAodW5zaWduZWQgbG9uZykgaGVhcC0+c3Rfc2l6ZSwgKHVuc2lnbmVkIGxvbmcpIGhl YXAtPnN0X3NpemUgKiAyKSk7CisKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisJRFVLX0FT U0VSVChoZWFwLT5zdF9yZXNpemluZyA9PSAxKTsKKwlEVUtfQVNTRVJUKGhlYXAtPnN0X3NpemUg Pj0gMik7CisJRFVLX0FTU0VSVCgoaGVhcC0+c3Rfc2l6ZSAmIChoZWFwLT5zdF9zaXplIC0gMSkp ID09IDApOyAgLyogMl5OICovCisJRFVLX0FTU0VSVChEVUtfX0dFVF9TVFJUQUJMRShoZWFwKSAh PSBOVUxMKTsKKworCURVS19TVEFUU19JTkMoaGVhcCwgc3RhdHNfc3RydGFiX3Jlc2l6ZV9ncm93 KTsKKworCW5ld19zdF9zaXplID0gaGVhcC0+c3Rfc2l6ZSA8PCAxVTsKKwlEVUtfQVNTRVJUKG5l d19zdF9zaXplID4gaGVhcC0+c3Rfc2l6ZSk7ICAvKiBObyBvdmVyZmxvdy4gKi8KKworCS8qIFJl YWxsb2NhdGUgdGhlIHN0cnRhYmxlIGZpcnN0IGFuZCB0aGVuIHdvcmsgaW4tcGxhY2UgdG8gcmVo YXNoCisJICogc3RyaW5ncy4gIFdlIGRvbid0IG5lZWQgYW4gaW5kaXJlY3QgYWxsb2NhdGlvbiBo ZXJlOiBldmVuIGlmIEdDCisJICogaXMgdHJpZ2dlcmVkIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRp b24sIHJlY3Vyc2l2ZSBzdHJ0YWJsZSByZXNpemUKKwkgKiBpcyBwcmV2ZW50ZWQgYnkgZmxhZ3Mu ICBUaGlzIGlzIGFsc28gd2h5IHdlIGRvbid0IG5lZWQgdG8gdXNlCisJICogRFVLX1JFQUxMT0Nf SU5ESVJFQ1QoKS4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkK KwluZXdfcHRyID0gKGR1a191aW50MTZfdCAqKSBEVUtfUkVBTExPQyhoZWFwLCBoZWFwLT5zdHJ0 YWJsZTE2LCBzaXplb2YoZHVrX3VpbnQxNl90KSAqIG5ld19zdF9zaXplKTsKKyNlbHNlCisJbmV3 X3B0ciA9IChkdWtfaHN0cmluZyAqKikgRFVLX1JFQUxMT0MoaGVhcCwgaGVhcC0+c3RydGFibGUs IHNpemVvZihkdWtfaHN0cmluZyAqKSAqIG5ld19zdF9zaXplKTsKKyNlbmRpZgorCWlmIChEVUtf VU5MSUtFTFkobmV3X3B0ciA9PSBOVUxMKSkgeworCQkvKiBJZiByZWFsbG9jIGZhaWxzIHdlIGNh biBjb250aW51ZSBub3JtYWxseTogdGhlIHN0cmluZyB0YWJsZQorCQkgKiB3b24ndCAiZmlsbCB1 cCIgYWx0aG91Z2ggY2hhaW5zIHdpbGwgZ3JhZHVhbGx5IGdldCBsb25nZXIuCisJCSAqIFdoZW4g c3RyaW5nIGluc2VydGlvbnMgY29udGludWUsIHdlJ2xsIHF1aXRlIHNvb24gdHJ5IGFnYWluCisJ CSAqIHdpdGggbm8gc3BlY2lhbCBoYW5kbGluZy4KKwkJICovCisJCURVS19EKERVS19EUFJJTlQo InN0cmluZyB0YWJsZSBncm93IGZhaWxlZCwgaWdub3JpbmciKSk7CisJCXJldHVybjsKKwl9Cisj aWYgZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCWhlYXAtPnN0cnRhYmxlMTYgPSBu ZXdfcHRyOworI2Vsc2UKKwloZWFwLT5zdHJ0YWJsZSA9IG5ld19wdHI7CisjZW5kaWYKKworCS8q IFJlaGFzaCBhIHNpbmdsZSBidWNrZXQgaW50byB0d28gc2VwYXJhdGUgb25lcy4gIFdoZW4gd2Ug Z3JvdworCSAqIGJ5IHgyIHRoZSBoaWdoZXN0ICduZXcnIGJpdCBkZXRlcm1pbmVzIHdoZXRoZXIg YSBzdHJpbmcgcmVtYWlucworCSAqIGluIGl0cyBvbGQgcG9zaXRpb24gKGJpdCBpcyAwKSBvciBn b2VzIHRvIGEgbmV3IG9uZSAoYml0IGlzIDEpLgorCSAqLworCisJb2xkX3N0X3NpemUgPSBoZWFw LT5zdF9zaXplOworCW5ld19wdHJfaGlnaCA9IG5ld19wdHIgKyBvbGRfc3Rfc2l6ZTsKKwlmb3Ig KGkgPSAwOyBpIDwgb2xkX3N0X3NpemU7IGkrKykgeworCQlkdWtfaHN0cmluZyAqbmV3X3Jvb3Q7 CisJCWR1a19oc3RyaW5nICpuZXdfcm9vdF9oaWdoOworCisJCWggPSBEVUtfX0hFQVBQVFJfREVD MTYoaGVhcCwgbmV3X3B0cltpXSk7CisJCW5ld19yb290ID0gaDsKKwkJbmV3X3Jvb3RfaGlnaCA9 IE5VTEw7CisKKwkJcHJldiA9IE5VTEw7CisJCXdoaWxlIChoICE9IE5VTEwpIHsKKwkJCWR1a191 aW50MzJfdCBtYXNrOworCisJCQlEVUtfQVNTRVJUKChEVUtfSFNUUklOR19HRVRfSEFTSChoKSAm IGhlYXAtPnN0X21hc2spID09IGkpOworCQkJbmV4dCA9IGgtPmhkci5oX25leHQ7CisKKwkJCS8q IEV4YW1wbGU6IGlmIHByZXZpb3VzIHNpemUgd2FzIDI1NiwgcHJldmlvdXMgbWFzayBpcyAweEZG CisJCQkgKiBhbmQgc2l6ZSBpcyAweDEwMCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgbmV3IGJp dCB0aGF0CisJCQkgKiBjb21lcyBpbnRvIHBsYXkuCisJCQkgKi8KKwkJCURVS19BU1NFUlQoaGVh cC0+c3RfbWFzayA9PSBvbGRfc3Rfc2l6ZSAtIDEpOworCQkJbWFzayA9IG9sZF9zdF9zaXplOwor CQkJaWYgKERVS19IU1RSSU5HX0dFVF9IQVNIKGgpICYgbWFzaykgeworCQkJCWlmIChwcmV2ICE9 IE5VTEwpIHsKKwkJCQkJcHJldi0+aGRyLmhfbmV4dCA9IGgtPmhkci5oX25leHQ7CisJCQkJfSBl bHNlIHsKKwkJCQkJRFVLX0FTU0VSVChoID09IG5ld19yb290KTsKKwkJCQkJbmV3X3Jvb3QgPSBo LT5oZHIuaF9uZXh0OworCQkJCX0KKworCQkJCWgtPmhkci5oX25leHQgPSBuZXdfcm9vdF9oaWdo OworCQkJCW5ld19yb290X2hpZ2ggPSBoOworCQkJfSBlbHNlIHsKKwkJCQlwcmV2ID0gaDsKKwkJ CX0KKwkJCWggPSBuZXh0OworCQl9CisKKwkJbmV3X3B0cltpXSA9IERVS19fSEVBUFBUUl9FTkMx NihoZWFwLCBuZXdfcm9vdCk7CisJCW5ld19wdHJfaGlnaFtpXSA9IERVS19fSEVBUFBUUl9FTkMx NihoZWFwLCBuZXdfcm9vdF9oaWdoKTsKKwl9CisKKwloZWFwLT5zdF9zaXplID0gbmV3X3N0X3Np emU7CisJaGVhcC0+c3RfbWFzayA9IG5ld19zdF9zaXplIC0gMTsKKworI2lmIGRlZmluZWQoRFVL X1VTRV9BU1NFUlRJT05TKQorCWR1a19fc3RydGFibGVfYXNzZXJ0X2NoZWNrcyhoZWFwKTsKKyNl bmRpZgorfQorI2VuZGlmICAvKiBEVUtfX1NUUlRBQl9SRVNJWkVfQ0hFQ0sgKi8KKworLyoKKyAq ICBTaHJpbmsgc3RydGFibGUgYWxsb2NhdGlvbiBpbi1wbGFjZS4KKyAqLworCisjaWYgZGVmaW5l ZChEVUtfX1NUUlRBQl9SRVNJWkVfQ0hFQ0spCitEVUtfTE9DQUwgdm9pZCBkdWtfX3N0cnRhYmxl X3Nocmlua19pbnBsYWNlKGR1a19oZWFwICpoZWFwKSB7CisJZHVrX3VpbnQzMl90IG5ld19zdF9z aXplOworCWR1a191aW50MzJfdCBpOworCWR1a19oc3RyaW5nICpoOworCWR1a19oc3RyaW5nICpv dGhlcjsKKwlkdWtfaHN0cmluZyAqcm9vdDsKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BU UkNPTVApCisJZHVrX3VpbnQxNl90ICpvbGRfcHRyOworCWR1a191aW50MTZfdCAqb2xkX3B0cl9o aWdoOworCWR1a191aW50MTZfdCAqbmV3X3B0cjsKKyNlbHNlCisJZHVrX2hzdHJpbmcgKipvbGRf cHRyOworCWR1a19oc3RyaW5nICoqb2xkX3B0cl9oaWdoOworCWR1a19oc3RyaW5nICoqbmV3X3B0 cjsKKyNlbmRpZgorCisJRFVLX0REKERVS19ERFBSSU5UKCJzaHJpbmsgaW4tcGxhY2U6ICVsdSAt PiAlbHUiLCAodW5zaWduZWQgbG9uZykgaGVhcC0+c3Rfc2l6ZSwgKHVuc2lnbmVkIGxvbmcpIGhl YXAtPnN0X3NpemUgLyAyKSk7CisKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisJRFVLX0FT U0VSVChoZWFwLT5zdF9yZXNpemluZyA9PSAxKTsKKwlEVUtfQVNTRVJUKGhlYXAtPnN0X3NpemUg Pj0gMik7CisJRFVLX0FTU0VSVCgoaGVhcC0+c3Rfc2l6ZSAmIChoZWFwLT5zdF9zaXplIC0gMSkp ID09IDApOyAgLyogMl5OICovCisJRFVLX0FTU0VSVChEVUtfX0dFVF9TVFJUQUJMRShoZWFwKSAh PSBOVUxMKTsKKworCURVS19TVEFUU19JTkMoaGVhcCwgc3RhdHNfc3RydGFiX3Jlc2l6ZV9zaHJp bmspOworCisJbmV3X3N0X3NpemUgPSBoZWFwLT5zdF9zaXplID4+IDFVOworCisJLyogQ29tYmlu ZSB0d28gYnVja2V0cyBpbnRvIGEgc2luZ2xlIG9uZS4gIFdoZW4gd2Ugc2hyaW5rLCBvbmUgaGFz aAorCSAqIGJpdCAoaGlnaGVzdCkgZGlzYXBwZWFycy4KKwkgKi8KKwlvbGRfcHRyID0gRFVLX19H RVRfU1RSVEFCTEUoaGVhcCk7CisJb2xkX3B0cl9oaWdoID0gb2xkX3B0ciArIG5ld19zdF9zaXpl OworCWZvciAoaSA9IDA7IGkgPCBuZXdfc3Rfc2l6ZTsgaSsrKSB7CisJCWggPSBEVUtfX0hFQVBQ VFJfREVDMTYoaGVhcCwgb2xkX3B0cltpXSk7CisJCW90aGVyID0gRFVLX19IRUFQUFRSX0RFQzE2 KGhlYXAsIG9sZF9wdHJfaGlnaFtpXSk7CisKKwkJaWYgKGggPT0gTlVMTCkgeworCQkJLyogRmly c3QgY2hhaW4gaXMgZW1wdHksIHNvIHVzZSBzZWNvbmQgb25lIGFzIGlzLiAqLworCQkJcm9vdCA9 IG90aGVyOworCQl9IGVsc2UgeworCQkJLyogRmluZCBlbmQgb2YgZmlyc3QgY2hhaW4sIGFuZCBs aW5rIGluIHRoZSBzZWNvbmQuICovCisJCQlyb290ID0gaDsKKwkJCXdoaWxlIChoLT5oZHIuaF9u ZXh0ICE9IE5VTEwpIHsKKwkJCQloID0gaC0+aGRyLmhfbmV4dDsKKwkJCX0KKwkJCWgtPmhkci5o X25leHQgPSBvdGhlcjsKKwkJfQorCisJCW9sZF9wdHJbaV0gPSBEVUtfX0hFQVBQVFJfRU5DMTYo aGVhcCwgcm9vdCk7CisJfQorCisJaGVhcC0+c3Rfc2l6ZSA9IG5ld19zdF9zaXplOworCWhlYXAt PnN0X21hc2sgPSBuZXdfc3Rfc2l6ZSAtIDE7CisKKwkvKiBUaGUgc3RydGFibGUgaXMgbm93IGNv bnNpc3RlbnQgYW5kIHdlIGNhbiByZWFsbG9jIHNhZmVseS4gIEV2ZW4KKwkgKiBpZiBzaWRlIGVm ZmVjdHMgY2F1c2Ugc3RyaW5nIGludGVybmluZyBvciByZW1vdmFsIHRoZSBzdHJ0YWJsZQorCSAq IHVwZGF0ZXMgYXJlIHNhZmUuICBSZWN1cnNpdmUgcmVzaXplIGhhcyBiZWVuIHByZXZlbnRlZCBi eSBjYWxsZXIuCisJICogVGhpcyBpcyBhbHNvIHdoeSB3ZSBkb24ndCBuZWVkIHRvIHVzZSBEVUtf UkVBTExPQ19JTkRJUkVDVCgpLgorCSAqCisJICogV2UgYXNzdW1lIGEgcmVhbGxvYygpIHRvIGEg c21hbGxlciBzaXplIGlzIGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4KKwkgKiBJdCB3b3VsZCBiZSBy ZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBoYW5kbGUgdGhlIGVycm9yIGJ5CisJICogZXNz ZW50aWFsbHkgcGVyZm9ybWluZyBhICJncm93IiBzdGVwIHRvIHJlY292ZXIuCisJICovCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BUUkNPTVApCisJbmV3X3B0ciA9IChkdWtfdWludDE2 X3QgKikgRFVLX1JFQUxMT0MoaGVhcCwgaGVhcC0+c3RydGFibGUxNiwgc2l6ZW9mKGR1a191aW50 MTZfdCkgKiBuZXdfc3Rfc2l6ZSk7CisJRFVLX0FTU0VSVChuZXdfcHRyICE9IE5VTEwpOworCWhl YXAtPnN0cnRhYmxlMTYgPSBuZXdfcHRyOworI2Vsc2UKKwluZXdfcHRyID0gKGR1a19oc3RyaW5n ICoqKSBEVUtfUkVBTExPQyhoZWFwLCBoZWFwLT5zdHJ0YWJsZSwgc2l6ZW9mKGR1a19oc3RyaW5n ICopICogbmV3X3N0X3NpemUpOworCURVS19BU1NFUlQobmV3X3B0ciAhPSBOVUxMKTsKKwloZWFw LT5zdHJ0YWJsZSA9IG5ld19wdHI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NF UlRJT05TKQorCWR1a19fc3RydGFibGVfYXNzZXJ0X2NoZWNrcyhoZWFwKTsKKyNlbmRpZgorfQor I2VuZGlmICAvKiBEVUtfX1NUUlRBQl9SRVNJWkVfQ0hFQ0sgKi8KKworLyoKKyAqICBHcm93L3No cmluayBjaGVjay4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfX1NUUlRBQl9SRVNJWkVfQ0hFQ0sp CitEVUtfTE9DQUwgRFVLX0NPTEQgRFVLX05PSU5MSU5FIHZvaWQgZHVrX19zdHJ0YWJsZV9yZXNp emVfY2hlY2soZHVrX2hlYXAgKmhlYXApIHsKKwlkdWtfdWludDMyX3QgbG9hZF9mYWN0b3I7ICAv KiBmaXhlZCBwb2ludCAqLworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworI2lmIGRlZmlu ZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkKKwlEVUtfQVNTRVJUKGhlYXAtPnN0cnRhYmxlMTYg IT0gTlVMTCk7CisjZWxzZQorCURVS19BU1NFUlQoaGVhcC0+c3RydGFibGUgIT0gTlVMTCk7Cisj ZW5kaWYKKworCURVS19TVEFUU19JTkMoaGVhcCwgc3RhdHNfc3RydGFiX3Jlc2l6ZV9jaGVjayk7 CisKKwkvKiBQcmV2ZW50IHJlY3Vyc2l2ZSByZXNpemluZy4gKi8KKwlpZiAoRFVLX1VOTElLRUxZ KGhlYXAtPnN0X3Jlc2l6aW5nICE9IDBVKSkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJwcmV2ZW50 IHJlY3Vyc2l2ZSBzdHJ0YWJsZSByZXNpemUiKSk7CisJCXJldHVybjsKKwl9CisKKwloZWFwLT5z dF9yZXNpemluZyA9IDE7CisKKwlEVUtfQVNTRVJUKGhlYXAtPnN0X3NpemUgPj0gMTZVKTsKKwlE VUtfQVNTRVJUKChoZWFwLT5zdF9zaXplID4+IDRVKSA+PSAxKTsKKwlsb2FkX2ZhY3RvciA9IGhl YXAtPnN0X2NvdW50IC8gKGhlYXAtPnN0X3NpemUgPj4gNFUpOworCisJRFVLX0REKERVS19ERFBS SU5UKCJyZXNpemUgY2hlY2sgc3RyaW5nIHRhYmxlOiBzaXplPSVsdSwgY291bnQ9JWx1LCBsb2Fk X2ZhY3Rvcj0lbHUgKGZpeGVkIHBvaW50IC40OyBmbG9hdCAlbGYpIiwKKwkgICAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcpIGhlYXAtPnN0X3NpemUsICh1bnNpZ25lZCBsb25nKSBoZWFw LT5zdF9jb3VudCwKKwkgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGxvYWRfZmFj dG9yLAorCSAgICAgICAgICAgICAgICAgICAoZG91YmxlKSBoZWFwLT5zdF9jb3VudCAvIChkb3Vi bGUpIGhlYXAtPnN0X3NpemUpKTsKKworCWlmIChsb2FkX2ZhY3RvciA+PSBEVUtfVVNFX1NUUlRB Ql9HUk9XX0xJTUlUKSB7CisJCWlmIChoZWFwLT5zdF9zaXplID49IERVS19VU0VfU1RSVEFCX01B WFNJWkUpIHsKKwkJCURVS19ERChEVUtfRERQUklOVCgid2FudCB0byBncm93IHN0cnRhYmxlIChi YXNlZCBvbiBsb2FkIGZhY3RvcikgYnV0IGFscmVhZHkgbWF4aW11bSBzaXplIikpOworCQl9IGVs c2UgeworCQkJRFVLX0QoRFVLX0RQUklOVCgiZ3JvdyBzdHJpbmcgdGFibGU6ICVsdSAtPiAlbHUi LCAodW5zaWduZWQgbG9uZykgaGVhcC0+c3Rfc2l6ZSwgKHVuc2lnbmVkIGxvbmcpIGhlYXAtPnN0 X3NpemUgKiAyKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorCQkJZHVrX2hlYXBfc3Ry dGFibGVfZHVtcChoZWFwKTsKKyNlbmRpZgorCQkJZHVrX19zdHJ0YWJsZV9ncm93X2lucGxhY2Uo aGVhcCk7CisJCX0KKwl9IGVsc2UgaWYgKGxvYWRfZmFjdG9yIDw9IERVS19VU0VfU1RSVEFCX1NI UklOS19MSU1JVCkgeworCQlpZiAoaGVhcC0+c3Rfc2l6ZSA8PSBEVUtfVVNFX1NUUlRBQl9NSU5T SVpFKSB7CisJCQlEVUtfREQoRFVLX0REUFJJTlQoIndhbnQgdG8gc2hyaW5rIHN0cnRhYmxlIChi YXNlZCBvbiBsb2FkIGZhY3RvcikgYnV0IGFscmVhZHkgbWluaW11bSBzaXplIikpOworCQl9IGVs c2UgeworCQkJRFVLX0QoRFVLX0RQUklOVCgic2hyaW5rIHN0cmluZyB0YWJsZTogJWx1IC0+ICVs dSIsICh1bnNpZ25lZCBsb25nKSBoZWFwLT5zdF9zaXplLCAodW5zaWduZWQgbG9uZykgaGVhcC0+ c3Rfc2l6ZSAvIDIpKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCQlkdWtfaGVhcF9z dHJ0YWJsZV9kdW1wKGhlYXApOworI2VuZGlmCisJCQlkdWtfX3N0cnRhYmxlX3Nocmlua19pbnBs YWNlKGhlYXApOworCQl9CisJfSBlbHNlIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJubyBuZWVk IGZvciBzdHJ0YWJsZSByZXNpemUiKSk7CisJfQorCisJaGVhcC0+c3RfcmVzaXppbmcgPSAwOwor fQorI2VuZGlmICAvKiBEVUtfX1NUUlRBQl9SRVNJWkVfQ0hFQ0sgKi8KKworLyoKKyAqICBUb3J0 dXJlIGdyb3cvc2hyaW5rOiB1bmNvbmRpdGlvbmFsbHkgZ3JvdyBhbmQgc2hyaW5rIGJhY2suCisg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJUQUJfVE9SVFVSRSkgJiYgZGVmaW5lZChEVUtf X1NUUlRBQl9SRVNJWkVfQ0hFQ0spCitEVUtfTE9DQUwgdm9pZCBkdWtfX3N0cnRhYmxlX3Jlc2l6 ZV90b3J0dXJlKGR1a19oZWFwICpoZWFwKSB7CisJZHVrX3VpbnQzMl90IG9sZF9zdF9zaXplOwor CisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCisJb2xkX3N0X3NpemUgPSBoZWFwLT5zdF9z aXplOworCWlmIChvbGRfc3Rfc2l6ZSA+PSBEVUtfVVNFX1NUUlRBQl9NQVhTSVpFKSB7CisJCXJl dHVybjsKKwl9CisKKwloZWFwLT5zdF9yZXNpemluZyA9IDE7CisJZHVrX19zdHJ0YWJsZV9ncm93 X2lucGxhY2UoaGVhcCk7CisJaWYgKGhlYXAtPnN0X3NpemUgPiBvbGRfc3Rfc2l6ZSkgeworCQlk dWtfX3N0cnRhYmxlX3Nocmlua19pbnBsYWNlKGhlYXApOworCX0KKwloZWFwLT5zdF9yZXNpemlu ZyA9IDA7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfU1RSVEFCX1RPUlRVUkUgJiYgRFVLX19TVFJU QUJfUkVTSVpFX0NIRUNLICovCisKKy8qCisgKiAgUmF3IGludGVybjsgc3RyaW5nIGFscmVhZHkg Y2hlY2tlZCBub3QgdG8gYmUgcHJlc2VudC4KKyAqLworCitEVUtfTE9DQUwgZHVrX2hzdHJpbmcg KmR1a19fc3RydGFibGVfZG9faW50ZXJuKGR1a19oZWFwICpoZWFwLCBjb25zdCBkdWtfdWludDhf dCAqc3RyLCBkdWtfdWludDMyX3QgYmxlbiwgZHVrX3VpbnQzMl90IHN0cmhhc2gpIHsKKwlkdWtf aHN0cmluZyAqcmVzOworCWNvbnN0IGR1a191aW50OF90ICpleHRkYXRhOworI2lmIGRlZmluZWQo RFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkKKwlkdWtfdWludDE2X3QgKnNsb3Q7CisjZWxzZQorCWR1 a19oc3RyaW5nICoqc2xvdDsKKyNlbmRpZgorCisJRFVLX0RERChEVUtfREREUFJJTlQoImRvX2lu dGVybjogaGVhcD0lcCwgc3RyPSVwLCBibGVuPSVsdSwgc3RyaGFzaD0lbHgsIHN0X3NpemU9JWx1 LCBzdF9jb3VudD0lbHUsIGxvYWQ9JWxmIiwKKwkgICAgICAgICAgICAgICAgICAgICAodm9pZCAq KSBoZWFwLCAoY29uc3Qgdm9pZCAqKSBzdHIsICh1bnNpZ25lZCBsb25nKSBibGVuLCAodW5zaWdu ZWQgbG9uZykgc3RyaGFzaCwKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykg aGVhcC0+c3Rfc2l6ZSwgKHVuc2lnbmVkIGxvbmcpIGhlYXAtPnN0X2NvdW50LAorCSAgICAgICAg ICAgICAgICAgICAgIChkb3VibGUpIGhlYXAtPnN0X2NvdW50IC8gKGRvdWJsZSkgaGVhcC0+c3Rf c2l6ZSkpOworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCisJLyogUHJldmVudCBhbnkg c2lkZSBlZmZlY3RzIG9uIHRoZSBzdHJpbmcgdGFibGUgYW5kIHRoZSBjYWxsZXIgcHJvdmlkZWQK KwkgKiBzdHIvYmxlbiBhcmd1bWVudHMgd2hpbGUgaW50ZXJuaW5nIGlzIGluIHByb2dyZXNzLiAg Rm9yIGV4YW1wbGUsIGlmCisJICogdGhlIGNhbGxlciBwcm92aWRlZCBzdHIvYmxlbiBmcm9tIGEg ZHluYW1pYyBidWZmZXIsIGEgZmluYWxpemVyCisJICogbWlnaHQgcmVzaXplIG9yIG1vZGlmeSB0 aGF0IGR5bmFtaWMgYnVmZmVyLCBpbnZhbGlkYXRpbmcgdGhlIGNhbGwKKwkgKiBhcmd1bWVudHMu CisJICoKKwkgKiBXaGlsZSBmaW5hbGl6ZXJzIG11c3QgYmUgcHJldmVudGVkLCBtYXJrLWFuZC1z d2VlcCBpdHNlbGYgaXMgZmluZS4KKwkgKiBSZWN1cnNpdmUgc3RyaW5nIHRhYmxlIHJlc2l6ZSBp cyBwcmV2ZW50ZWQgZXhwbGljaXRseSBoZXJlLgorCSAqLworCisJaGVhcC0+cGZfcHJldmVudF9j b3VudCsrOworCURVS19BU1NFUlQoaGVhcC0+cGZfcHJldmVudF9jb3VudCAhPSAwKTsgIC8qIFdy YXAuICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1RPUlRVUkUpICYmIGRlZmluZWQo RFVLX19TVFJUQUJfUkVTSVpFX0NIRUNLKQorCWR1a19fc3RydGFibGVfcmVzaXplX3RvcnR1cmUo aGVhcCk7CisjZW5kaWYKKworCS8qIFN0cmluZyB0YWJsZSBncm93L3NocmluayBjaGVjay4gIEJl Y2F1c2Ugb2YgY2hhaW5pbmcgKGFuZCBubworCSAqIGFjY3VtdWxhdGlvbiBpc3N1ZXMgYXMgd2l0 aCBoYXNoIHByb2JlIGNoYWlucyBhbmQgREVMRVRFRAorCSAqIG1hcmtlcnMpIHRoZXJlJ3MgbmV2 ZXIgYSBtYW5kYXRvcnkgbmVlZCB0byByZXNpemUgcmlnaHQgbm93LgorCSAqIENoZWNrIGZvciB0 aGUgcmVzaXplIG9ubHkgcGVyaW9kaWNhbGx5LCBiYXNlZCBvbiBzdF9jb3VudAorCSAqIGJpdCBw YXR0ZXJuLiAgQmVjYXVzZSBzdHJpbmcgdGFibGUgcmVtb3ZhbCBkb2Vzbid0IGRvIGEgc2hyaW5r CisJICogY2hlY2ssIHdlIGRvIHRoYXQgYWxzbyBoZXJlLgorCSAqCisJICogRG8gdGhlIHJlc2l6 ZSBhbmQgcG9zc2libGUgZ3Jvdy9zaHJpbmsgYmVmb3JlIHRoZSBuZXcgZHVrX2hzdHJpbmcKKwkg KiBoYXMgYmVlbiBhbGxvY2F0ZWQuICBPdGhlcndpc2Ugd2UgbWF5IHRyaWdnZXIgYSBHQyB3aGVu IHRoZSByZXN1bHQKKwkgKiBkdWtfaHN0cmluZyBpcyBub3QgeWV0IHN0cm9uZ2x5IHJlZmVyZW5j ZWQuCisJICovCisKKyNpZiBkZWZpbmVkKERVS19fU1RSVEFCX1JFU0laRV9DSEVDSykKKwlpZiAo RFVLX1VOTElLRUxZKChoZWFwLT5zdF9jb3VudCAmIERVS19VU0VfU1RSVEFCX1JFU0laRV9DSEVD S19NQVNLKSA9PSAwKSkgeworCQlkdWtfX3N0cnRhYmxlX3Jlc2l6ZV9jaGVjayhoZWFwKTsKKwl9 CisjZW5kaWYKKworCS8qIEV4dGVybmFsIHN0cmluZyBjaGVjayAobG93IG1lbW9yeSBvcHRpbWl6 YXRpb24pLiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0hTVFJJTkdfRVhUREFUQSkgJiYgZGVm aW5lZChEVUtfVVNFX0VYVFNUUl9JTlRFUk5fQ0hFQ0spCisJZXh0ZGF0YSA9IChjb25zdCBkdWtf dWludDhfdCAqKSBEVUtfVVNFX0VYVFNUUl9JTlRFUk5fQ0hFQ0soaGVhcC0+aGVhcF91ZGF0YSwg KHZvaWQgKikgRFVLX0xPU0VfQ09OU1Qoc3RyKSwgKGR1a19zaXplX3QpIGJsZW4pOworI2Vsc2UK KwlleHRkYXRhID0gKGNvbnN0IGR1a191aW50OF90ICopIE5VTEw7CisjZW5kaWYKKworCS8qIEFs bG9jYXRlIGFuZCBpbml0aWFsaXplIHN0cmluZywgbm90IHlldCBsaW5rZWQuICBUaGlzIG1heSBj YXVzZSBhCisJICogR0Mgd2hpY2ggbWF5IGNhdXNlIG90aGVyIHN0cmluZ3MgdG8gYmUgaW50ZXJu ZWQgYW5kIGluc2VydGVkIGludG8KKwkgKiB0aGUgc3RyaW5nIHRhYmxlIGJlZm9yZSB3ZSBpbnNl cnQgb3VyIHN0cmluZy4gIEZpbmFsaXplciBleGVjdXRpb24KKwkgKiBpcyBkaXNhYmxlZCBpbnRl bnRpb25hbGx5IHRvIGF2b2lkIGEgZmluYWxpemVyIGZyb20gZS5nLiByZXNpemluZworCSAqIGEg YnVmZmVyIHVzZWQgYXMgYSBkYXRhIGFyZWEgZm9yICdzdHInLgorCSAqLworCisJcmVzID0gZHVr X19zdHJ0YWJsZV9hbGxvY19oc3RyaW5nKGhlYXAsIHN0ciwgYmxlbiwgc3RyaGFzaCwgZXh0ZGF0 YSk7CisKKwkvKiBBbGxvdyBzaWRlIGVmZmVjdHMgYWdhaW46IEdDIG11c3QgYmUgYXZvaWRlZCB1 bnRpbCBkdWtfaHN0cmluZworCSAqIHJlc3VsdCAoaWYgc3VjY2Vzc2Z1bCkgaGFzIGJlZW4gSU5D UkVGJ2QuCisJICovCisJRFVLX0FTU0VSVChoZWFwLT5wZl9wcmV2ZW50X2NvdW50ID4gMCk7CisJ aGVhcC0+cGZfcHJldmVudF9jb3VudC0tOworCisJLyogQWxsb2MgZXJyb3IgaGFuZGxpbmcuICov CisKKwlpZiAoRFVLX1VOTElLRUxZKHJlcyA9PSBOVUxMKSkgeworI2lmIGRlZmluZWQoRFVLX1VT RV9IU1RSSU5HX0VYVERBVEEpICYmIGRlZmluZWQoRFVLX1VTRV9FWFRTVFJfSU5URVJOX0NIRUNL KQorCQlpZiAoZXh0ZGF0YSAhPSBOVUxMKSB7CisJCQlEVUtfVVNFX0VYVFNUUl9GUkVFKGhlYXAt PmhlYXBfdWRhdGEsIChjb25zdCB2b2lkICopIGV4dGRhdGEpOworCQl9CisjZW5kaWYKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJLyogSW5zZXJ0IGludG8gc3RyaW5nIHRhYmxlLiAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCXNsb3QgPSBoZWFwLT5zdHJ0YWJsZTE2 ICsgKHN0cmhhc2ggJiBoZWFwLT5zdF9tYXNrKTsKKyNlbHNlCisJc2xvdCA9IGhlYXAtPnN0cnRh YmxlICsgKHN0cmhhc2ggJiBoZWFwLT5zdF9tYXNrKTsKKyNlbmRpZgorCURVS19BU1NFUlQocmVz LT5oZHIuaF9uZXh0ID09IE5VTEwpOyAgLyogVGhpcyBpcyB0aGUgY2FzZSBub3csIGJ1dCB1bm5l Y2Vzc2FyeSB6ZXJvaW5nL05VTExpbmcuICovCisJcmVzLT5oZHIuaF9uZXh0ID0gRFVLX19IRUFQ UFRSX0RFQzE2KGhlYXAsICpzbG90KTsKKwkqc2xvdCA9IERVS19fSEVBUFBUUl9FTkMxNihoZWFw LCByZXMpOworCisJLyogVXBkYXRlIHN0cmluZyBjb3VudCBvbmx5IGZvciBzdWNjZXNzZnVsIGlu c2VydHMuICovCisKKyNpZiBkZWZpbmVkKERVS19fU1RSVEFCX1JFU0laRV9DSEVDSykKKwloZWFw LT5zdF9jb3VudCsrOworI2VuZGlmCisKKwkvKiBUaGUgZHVrX2hzdHJpbmcgaXMgaW4gdGhlIHN0 cmluZyB0YWJsZSBidXQgaXMgbm90IHlldCBzdHJvbmdseQorCSAqIHJlYWNoYWJsZS4gIENhbGxp bmcgY29kZSBNVVNUIE5PVCBtYWtlIGFueSBhbGxvY2F0aW9ucyBvciBvdGhlcgorCSAqIHNpZGUg ZWZmZWN0cyBiZWZvcmUgdGhlIGR1a19oc3RyaW5nIGhhcyBiZWVuIElOQ1JFRidkIGFuZCBtYWRl CisJICogcmVhY2hhYmxlLgorCSAqLworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqICBJbnRl cm4gYSBzdHJpbmcgZnJvbSBzdHIvYmxlbiwgcmV0dXJuaW5nIGVpdGhlciBhbiBleGlzdGluZyBk dWtfaHN0cmluZworICogIG9yIGFkZGluZyBhIG5ldyBvbmUgaW50byB0aGUgc3RyaW5nIHRhYmxl LiAgVGhlIGlucHV0IHN0cmluZyBkb2VzIC1ub3QtCisgKiAgbmVlZCB0byBiZSBOVUwgdGVybWlu YXRlZC4KKyAqCisgKiAgVGhlIGlucHV0ICdzdHInIGFyZ3VtZW50IG1heSBwb2ludCB0byBhIER1 a3RhcGUgbWFuYWdlZCBkYXRhIGFyZWEgc3VjaCBhcworICogIHRoZSBkYXRhIGFyZWEgb2YgYSBk eW5hbWljIGJ1ZmZlci4gIEl0J3MgY3J1Y2lhbCB0byBhdm9pZCBhbnkgc2lkZSBlZmZlY3RzCisg KiAgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGRhdGEgYXJlYSAoZS5nLiByZXNpemUgdGhlIGR5bmFt aWMgYnVmZmVyLCBvciB3cml0ZQorICogIHRvIHRoZSBidWZmZXIpIGJlZm9yZSB0aGUgc3RyaW5n IGlzIGZ1bGx5IGludGVybmVkLgorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX1NUUklO R1MpCitEVUtfTE9DQUwgZHVrX2hzdHJpbmcgKmR1a19fc3RydGFiX3JvbXN0cmluZ19sb29rdXAo ZHVrX2hlYXAgKmhlYXAsIGNvbnN0IGR1a191aW50OF90ICpzdHIsIGR1a19zaXplX3QgYmxlbiwg ZHVrX3VpbnQzMl90IHN0cmhhc2gpIHsKKwlkdWtfc2l6ZV90IGxvb2t1cF9oYXNoOworCWR1a19o c3RyaW5nICpjdXJyOworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCURVS19VTlJFRiho ZWFwKTsKKworCWxvb2t1cF9oYXNoID0gKGJsZW4gPDwgNCk7CisJaWYgKGJsZW4gPiAwKSB7CisJ CWxvb2t1cF9oYXNoICs9IHN0clswXTsKKwl9CisJbG9va3VwX2hhc2ggJj0gMHhmZjsKKworCWN1 cnIgPSAoZHVrX2hzdHJpbmcgKikgRFVLX0xPU0VfQ09OU1QoZHVrX3JvbV9zdHJpbmdzX2xvb2t1 cFtsb29rdXBfaGFzaF0pOworCXdoaWxlIChjdXJyICE9IE5VTEwpIHsKKwkJLyogVW5zYWZlIG1l bWNtcCgpIGJlY2F1c2UgZm9yIHplcm8gYmxlbiwgc3RyIG1heSBiZSBOVUxMLiAqLworCQlpZiAo c3RyaGFzaCA9PSBEVUtfSFNUUklOR19HRVRfSEFTSChjdXJyKSAmJgorCQkgICAgYmxlbiA9PSBE VUtfSFNUUklOR19HRVRfQllURUxFTihjdXJyKSAmJgorCQkgICAgZHVrX21lbWNtcF91bnNhZmUo KGNvbnN0IHZvaWQgKikgc3RyLCAoY29uc3Qgdm9pZCAqKSBEVUtfSFNUUklOR19HRVRfREFUQShj dXJyKSwgYmxlbikgPT0gMCkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImludGVybiBjaGVj azogcm9tIHN0cmluZzogJSFPLCBjb21wdXRlZCBoYXNoIDB4JTA4bHgsIHJvbSBoYXNoIDB4JTA4 bHgiLAorCQkJICAgICAgICAgICAgICAgICAgICAgY3VyciwgKHVuc2lnbmVkIGxvbmcpIHN0cmhh c2gsICh1bnNpZ25lZCBsb25nKSBEVUtfSFNUUklOR19HRVRfSEFTSChjdXJyKSkpOworCQkJcmV0 dXJuIGN1cnI7CisJCX0KKwkJY3VyciA9IGN1cnItPmhkci5oX25leHQ7CisJfQorCisJcmV0dXJu IE5VTEw7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfUk9NX1NUUklOR1MgKi8KKworRFVLX0lOVEVS TkFMIGR1a19oc3RyaW5nICpkdWtfaGVhcF9zdHJ0YWJsZV9pbnRlcm4oZHVrX2hlYXAgKmhlYXAs IGNvbnN0IGR1a191aW50OF90ICpzdHIsIGR1a191aW50MzJfdCBibGVuKSB7CisJZHVrX3VpbnQz Ml90IHN0cmhhc2g7CisJZHVrX2hzdHJpbmcgKmg7CisKKwlEVUtfREREKERVS19ERERQUklOVCgi aW50ZXJuIGNoZWNrOiBoZWFwPSVwLCBzdHI9JXAsIGJsZW49JWx1IiwgKHZvaWQgKikgaGVhcCwg KGNvbnN0IHZvaWQgKikgc3RyLCAodW5zaWduZWQgbG9uZykgYmxlbikpOworCisJLyogUHJlbGlt aW5hcmllcy4gKi8KKworCS8qIFhYWDogbWF5YmUganVzdCByZXF1aXJlICdzdHIgIT0gTlVMTCcg ZXZlbiBmb3IgemVybyBzaXplPyAqLworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKGJsZW4gPT0gMCB8fCBzdHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChibGVuIDw9IERV S19IU1RSSU5HX01BWF9CWVRFTEVOKTsgIC8qIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5z dXJpbmcgdGhpcy4gKi8KKwlzdHJoYXNoID0gZHVrX2hlYXBfaGFzaHN0cmluZyhoZWFwLCBzdHIs IChkdWtfc2l6ZV90KSBibGVuKTsKKworCS8qIFN0cmluZyB0YWJsZSBsb29rdXAuICovCisKKwlE VUtfQVNTRVJUKERVS19fR0VUX1NUUlRBQkxFKGhlYXApICE9IE5VTEwpOworCURVS19BU1NFUlQo aGVhcC0+c3Rfc2l6ZSA+IDApOworCURVS19BU1NFUlQoaGVhcC0+c3Rfc2l6ZSA9PSBoZWFwLT5z dF9tYXNrICsgMSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCWggPSBE VUtfX0hFQVBQVFJfREVDMTYoaGVhcCwgaGVhcC0+c3RydGFibGUxNltzdHJoYXNoICYgaGVhcC0+ c3RfbWFza10pOworI2Vsc2UKKwloID0gaGVhcC0+c3RydGFibGVbc3RyaGFzaCAmIGhlYXAtPnN0 X21hc2tdOworI2VuZGlmCisJd2hpbGUgKGggIT0gTlVMTCkgeworCQlpZiAoRFVLX0hTVFJJTkdf R0VUX0hBU0goaCkgPT0gc3RyaGFzaCAmJgorCQkgICAgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4o aCkgPT0gYmxlbiAmJgorCQkgICAgZHVrX21lbWNtcF91bnNhZmUoKGNvbnN0IHZvaWQgKikgc3Ry LCAoY29uc3Qgdm9pZCAqKSBEVUtfSFNUUklOR19HRVRfREFUQShoKSwgKHNpemVfdCkgYmxlbikg PT0gMCkgeworCQkJLyogRm91bmQgZXhpc3RpbmcgZW50cnkuICovCisJCQlEVUtfU1RBVFNfSU5D KGhlYXAsIHN0YXRzX3N0cnRhYl9pbnRlcm5faGl0KTsKKwkJCXJldHVybiBoOworCQl9CisJCWgg PSBoLT5oZHIuaF9uZXh0OworCX0KKworCS8qIFJPTSB0YWJsZSBsb29rdXAuICBCZWNhdXNlIHRo aXMgbG9va3VwIGlzIHNsb3dlciwgZG8gaXQgb25seSBhZnRlcgorCSAqIFJBTSBsb29rdXAuICBU aGlzIHdvcmtzIGJlY2F1c2Ugbm8gUk9NIHN0cmluZyBpcyBldmVyIGludGVybmVkIGludG8KKwkg KiB0aGUgUkFNIHN0cmluZyB0YWJsZS4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01f U1RSSU5HUykKKwloID0gZHVrX19zdHJ0YWJfcm9tc3RyaW5nX2xvb2t1cChoZWFwLCBzdHIsIGJs ZW4sIHN0cmhhc2gpOworCWlmIChoICE9IE5VTEwpIHsKKwkJRFVLX1NUQVRTX0lOQyhoZWFwLCBz dGF0c19zdHJ0YWJfaW50ZXJuX2hpdCk7CisJCXJldHVybiBoOworCX0KKyNlbmRpZgorCisJLyog Tm90IGZvdW5kIGluIHN0cmluZyB0YWJsZTsgaW5zZXJ0LiAqLworCisJRFVLX1NUQVRTX0lOQyho ZWFwLCBzdGF0c19zdHJ0YWJfaW50ZXJuX21pc3MpOworCWggPSBkdWtfX3N0cnRhYmxlX2RvX2lu dGVybihoZWFwLCBzdHIsIGJsZW4sIHN0cmhhc2gpOworCXJldHVybiBoOyAgLyogbWF5IGJlIE5V TEwgKi8KK30KKworLyoKKyAqICBJbnRlcm4gYSBzdHJpbmcgZnJvbSB1MzIuCisgKi8KKworLyog WFhYOiBDb3VsZCBhcnJhbmdlIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIHdlIGtub3cg dGhhdCB0aGUgcmVzdWx0CisgKiB3aWxsIGhhdmUgYW4gYXJyaWR4IGZsYWcgYW5kIGFuIEFTQ0lJ IGZsYWcsIHdvbid0IG5lZWQgYSBjbGVuIGNoZWNrLCBldGMuCisgKi8KKworRFVLX0lOVEVSTkFM IGR1a19oc3RyaW5nICpkdWtfaGVhcF9zdHJ0YWJsZV9pbnRlcm5fdTMyKGR1a19oZWFwICpoZWFw LCBkdWtfdWludDMyX3QgdmFsKSB7CisJZHVrX3VpbnQ4X3QgYnVmW0RVS19fU1RSVEFCX1UzMl9N QVhfU1RSTEVOXTsKKwlkdWtfdWludDhfdCAqcDsKKworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxM KTsKKworCS8qIFRoaXMgaXMgc21hbGxlciBhbmQgZmFzdGVyIHRoYW4gYSAlbHUgc3ByaW50Zi4g Ki8KKwlwID0gYnVmICsgc2l6ZW9mKGJ1Zik7CisJZG8geworCQlwLS07CisJCSpwID0gZHVrX2xj X2RpZ2l0c1t2YWwgJSAxMF07CisJCXZhbCA9IHZhbCAvIDEwOworCX0gd2hpbGUgKHZhbCAhPSAw KTsgIC8qIEZvciB2YWwgPT0gMCwgZW1pdCBleGFjdGx5IG9uZSAnMCcuICovCisJRFVLX0FTU0VS VChwID49IGJ1Zik7CisKKwlyZXR1cm4gZHVrX2hlYXBfc3RydGFibGVfaW50ZXJuKGhlYXAsIChj b25zdCBkdWtfdWludDhfdCAqKSBwLCAoZHVrX3VpbnQzMl90KSAoKGJ1ZiArIHNpemVvZihidWYp KSAtIHApKTsKK30KKworLyoKKyAqICBDaGVja2VkIGNvbnZlbmllbmNlIHZhcmlhbnRzLgorICoK KyAqICBYWFg6IEJlY2F1c2UgdGhlIG1haW4gdXNlIGNhc2UgaXMgZm9yIHRoZSBjaGVja2VkIHZh cmlhbnRzLCBtYWtlIHRoZW0gdGhlCisgKiAgbWFpbiBmdW5jdGlvbmFsaXR5IGFuZCBwcm92aWRl IGEgc2FmZSB2YXJpYW50IHNlcGFyYXRlbHkgKGl0IGlzIG9ubHkgbmVlZGVkCisgKiAgZHVyaW5n IGhlYXAgaW5pdCkuICBUaGUgcHJvYmxlbSB3aXRoIHRoYXQgaXMgdGhhdCBsb25nam1wIHN0YXRl IGFuZCBlcnJvcgorICogIGNyZWF0aW9uIG11c3QgYWxyZWFkeSBiZSBwb3NzaWJsZSB0byB0aHJv dy4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX2hzdHJpbmcgKmR1a19oZWFwX3N0cnRhYmxlX2lu dGVybl9jaGVja2VkKGR1a19odGhyZWFkICp0aHIsIGNvbnN0IGR1a191aW50OF90ICpzdHIsIGR1 a191aW50MzJfdCBibGVuKSB7CisJZHVrX2hzdHJpbmcgKnJlczsKKworCURVS19BU1NFUlQodGhy ICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQo YmxlbiA9PSAwIHx8IHN0ciAhPSBOVUxMKTsKKworCXJlcyA9IGR1a19oZWFwX3N0cnRhYmxlX2lu dGVybih0aHItPmhlYXAsIHN0ciwgYmxlbik7CisJaWYgKERVS19VTkxJS0VMWShyZXMgPT0gTlVM TCkpIHsKKwkJRFVLX0VSUk9SX0FMTE9DX0ZBSUxFRCh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4o cmV0dXJuIE5VTEw7KTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworI2lmIGRlZmluZWQoRFVLX1VT RV9MSVRDQUNIRV9TSVpFKQorRFVLX0xPQ0FMIGR1a191aW50X3QgZHVrX19zdHJ0YWJsZV9saXRj YWNoZV9rZXkoY29uc3QgZHVrX3VpbnQ4X3QgKnN0ciwgZHVrX3VpbnQzMl90IGJsZW4pIHsKKwlk dWtfdWludHB0cl90IGtleTsKKworCURVS19BU1NFUlQoRFVLX1VTRV9MSVRDQUNIRV9TSVpFID4g MCk7CisJRFVLX0FTU0VSVChEVUtfSVNfUE9XRVJfT0ZfVFdPKChkdWtfdWludF90KSBEVUtfVVNF X0xJVENBQ0hFX1NJWkUpKTsKKworCWtleSA9IChkdWtfdWludHB0cl90KSBibGVuIF4gKGR1a191 aW50cHRyX3QpIHN0cjsKKwlrZXkgJj0gKGR1a191aW50cHRyX3QpIChEVUtfVVNFX0xJVENBQ0hF X1NJWkUgLSAxKTsgIC8qIEFzc3VtZXMgc2l6ZSBpcyBwb3dlciBvZiAyLiAqLworCS8qIER1ZSB0 byBtYXNraW5nLCBjYXN0IGlzIGluIDMyLWJpdCByYW5nZS4gKi8KKwlEVUtfQVNTRVJUKGtleSA8 PSBEVUtfVUlOVF9NQVgpOworCXJldHVybiAoZHVrX3VpbnRfdCkga2V5OworfQorCitEVUtfSU5U RVJOQUwgZHVrX2hzdHJpbmcgKmR1a19oZWFwX3N0cnRhYmxlX2ludGVybl9saXRlcmFsX2NoZWNr ZWQoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgZHVrX3VpbnQ4X3QgKnN0ciwgZHVrX3VpbnQzMl90 IGJsZW4pIHsKKwlkdWtfdWludF90IGtleTsKKwlkdWtfbGl0Y2FjaGVfZW50cnkgKmVudDsKKwlk dWtfaHN0cmluZyAqaDsKKworCS8qIEZhc3QgcGF0aCBjaGVjazogbGl0ZXJhbCBleGlzdHMgaW4g bGl0ZXJhbCBjYWNoZS4gKi8KKwlrZXkgPSBkdWtfX3N0cnRhYmxlX2xpdGNhY2hlX2tleShzdHIs IGJsZW4pOworCWVudCA9IHRoci0+aGVhcC0+bGl0Y2FjaGUgKyBrZXk7CisJaWYgKGVudC0+YWRk ciA9PSBzdHIpIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJpbnRlcm4gY2hlY2sgZm9yIGNhY2hl ZCwgcGlubmVkIGxpdGVyYWw6IHN0cj0lcCwgYmxlbj0lbGQgLT4gZHVrX2hzdHJpbmcgJSFPIiwK KwkJICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHN0ciwgKGxvbmcpIGJsZW4sIChk dWtfaGVhcGhkciAqKSBlbnQtPmgpKTsKKwkJRFVLX0FTU0VSVChlbnQtPmggIT0gTlVMTCk7CisJ CURVS19BU1NFUlQoRFVLX0hTVFJJTkdfSEFTX1BJTk5FRF9MSVRFUkFMKGVudC0+aCkpOworCQlE VUtfU1RBVFNfSU5DKHRoci0+aGVhcCwgc3RhdHNfc3RydGFiX2xpdGNhY2hlX2hpdCk7CisJCXJl dHVybiBlbnQtPmg7CisJfQorCisJLyogSW50ZXJuIGFuZCB1cGRhdGUgKG92ZXJ3cml0ZSkgY2Fj aGUgZW50cnkuICovCisJaCA9IGR1a19oZWFwX3N0cnRhYmxlX2ludGVybl9jaGVja2VkKHRociwg c3RyLCBibGVuKTsKKwllbnQtPmFkZHIgPSBzdHI7CisJZW50LT5oID0gaDsKKwlEVUtfU1RBVFNf SU5DKHRoci0+aGVhcCwgc3RhdHNfc3RydGFiX2xpdGNhY2hlX21pc3MpOworCisJLyogUGluIHRo ZSBkdWtfaHN0cmluZyB1bnRpbCB0aGUgbmV4dCBtYXJrLWFuZC1zd2VlcC4gIFRoaXMgbWVhbnMK KwkgKiBsaXRjYWNoZSBlbnRyaWVzIGRvbid0IG5lZWQgdG8gYmUgaW52YWxpZGF0ZWQgdW50aWwg dGhlIG5leHQKKwkgKiBtYXJrLWFuZC1zd2VlcCBhcyB0aGVpciB0YXJnZXQgZHVrX2hzdHJpbmcg aXMgbm90IGZyZWVkIGJlZm9yZQorCSAqIHRoZSBtYXJrLWFuZC1zd2VlcCBoYXBwZW5zLiAgVGhl IHBpbiByZW1haW5zIGV2ZW4gaWYgdGhlIGxpdGVyYWwKKwkgKiBjYWNoZSBlbnRyeSBpcyBvdmVy d3JpdHRlbiwgYW5kIGlzIHN0aWxsIHVzZWZ1bCB0byBhdm9pZCBzdHJpbmcKKwkgKiB0YWJsZSB0 cmFmZmljLgorCSAqLworCWlmICghRFVLX0hTVFJJTkdfSEFTX1BJTk5FRF9MSVRFUkFMKGgpKSB7 CisJCURVS19ERChEVUtfRERQUklOVCgicGluIGR1a19oc3RyaW5nIGJlY2F1c2UgaXQgaXMgYSBs aXRlcmFsOiAlIU8iLCAoZHVrX2hlYXBoZHIgKikgaCkpOworCQlEVUtfQVNTRVJUKCFEVUtfSEVB UEhEUl9IQVNfUkVBRE9OTFkoKGR1a19oZWFwaGRyICopIGgpKTsKKwkJRFVLX0hTVFJJTkdfSU5D UkVGKHRociwgaCk7CisJCURVS19IU1RSSU5HX1NFVF9QSU5ORURfTElURVJBTChoKTsKKwkJRFVL X1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX3N0cnRhYl9saXRjYWNoZV9waW4pOworCX0KKwor CXJldHVybiBoOworfQorI2VuZGlmICAvKiBEVUtfVVNFX0xJVENBQ0hFX1NJWkUgKi8KKworRFVL X0lOVEVSTkFMIGR1a19oc3RyaW5nICpkdWtfaGVhcF9zdHJ0YWJsZV9pbnRlcm5fdTMyX2NoZWNr ZWQoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnQzMl90IHZhbCkgeworCWR1a19oc3RyaW5nICpy ZXM7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVhcCAh PSBOVUxMKTsKKworCXJlcyA9IGR1a19oZWFwX3N0cnRhYmxlX2ludGVybl91MzIodGhyLT5oZWFw LCB2YWwpOworCWlmIChEVUtfVU5MSUtFTFkocmVzID09IE5VTEwpKSB7CisJCURVS19FUlJPUl9B TExPQ19GQUlMRUQodGhyKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiBOVUxMOyk7CisJfQor CXJldHVybiByZXM7Cit9CisKKy8qCisgKiAgUmVtb3ZlICh1bmxpbmspIGEgc3RyaW5nIGZyb20g dGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKiAgSnVzdCB1bmxpbmtzIHRoZSBkdWtfaHN0cmluZywg bGVhdmluZyBsaW5rIHBvaW50ZXJzIGFzIGdhcmJhZ2UuCisgKiAgQ2FsbGVyIG11c3QgZnJlZSB0 aGUgc3RyaW5nIGl0c2VsZi4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFRkVSRU5DRV9D T1VOVElORykKKy8qIFVubGluayB3aXRob3V0IGEgJ3ByZXYnIHBvaW50ZXIuICovCitEVUtfSU5U RVJOQUwgdm9pZCBkdWtfaGVhcF9zdHJ0YWJsZV91bmxpbmsoZHVrX2hlYXAgKmhlYXAsIGR1a19o c3RyaW5nICpoKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCWR1a191 aW50MTZfdCAqc2xvdDsKKyNlbHNlCisJZHVrX2hzdHJpbmcgKipzbG90OworI2VuZGlmCisJZHVr X2hzdHJpbmcgKm90aGVyOworCWR1a19oc3RyaW5nICpwcmV2OworCisJRFVLX0RERChEVUtfRERE UFJJTlQoInJlbW92ZTogaGVhcD0lcCwgaD0lcCwgYmxlbj0lbHUsIHN0cmhhc2g9JWx4IiwKKwkg ICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBoZWFwLCAodm9pZCAqKSBoLAorCSAgICAgICAg ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoaCAhPSBOVUxMID8gRFVLX0hTVFJJTkdfR0VU X0JZVEVMRU4oaCkgOiAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykg KGggIT0gTlVMTCA/IERVS19IU1RSSU5HX0dFVF9IQVNIKGgpIDogMCkpKTsKKworCURVS19BU1NF UlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKyNpZiBkZWZpbmVk KERVS19fU1RSVEFCX1JFU0laRV9DSEVDSykKKwlEVUtfQVNTRVJUKGhlYXAtPnN0X2NvdW50ID4g MCk7CisJaGVhcC0+c3RfY291bnQtLTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX1NU UlRBQl9QVFJDT01QKQorCXNsb3QgPSBoZWFwLT5zdHJ0YWJsZTE2ICsgKERVS19IU1RSSU5HX0dF VF9IQVNIKGgpICYgaGVhcC0+c3RfbWFzayk7CisjZWxzZQorCXNsb3QgPSBoZWFwLT5zdHJ0YWJs ZSArIChEVUtfSFNUUklOR19HRVRfSEFTSChoKSAmIGhlYXAtPnN0X21hc2spOworI2VuZGlmCisJ b3RoZXIgPSBEVUtfX0hFQVBQVFJfREVDMTYoaGVhcCwgKnNsb3QpOworCURVS19BU1NFUlQob3Ro ZXIgIT0gTlVMTCk7ICAvKiBBdCBsZWFzdCBhcmd1bWVudCBzdHJpbmcgaXMgaW4gdGhlIGNoYWlu LiAqLworCisJcHJldiA9IE5VTEw7CisJd2hpbGUgKG90aGVyICE9IGgpIHsKKwkJcHJldiA9IG90 aGVyOworCQlvdGhlciA9IG90aGVyLT5oZHIuaF9uZXh0OworCQlEVUtfQVNTRVJUKG90aGVyICE9 IE5VTEwpOyAgLyogV2UnbGwgZXZlbnR1YWxseSBmaW5kICdoJy4gKi8KKwl9CisJaWYgKHByZXYg IT0gTlVMTCkgeworCQkvKiBNaWRkbGUgb2YgbGlzdC4gKi8KKwkJcHJldi0+aGRyLmhfbmV4dCA9 IGgtPmhkci5oX25leHQ7CisJfSBlbHNlIHsKKwkJLyogSGVhZCBvZiBsaXN0LiAqLworCQkqc2xv dCA9IERVS19fSEVBUFBUUl9FTkMxNihoZWFwLCBoLT5oZHIuaF9uZXh0KTsKKwl9CisKKwkvKiBU aGVyZSdzIG5vIHJlc2l6ZSBjaGVjayBvbiBhIHN0cmluZyBmcmVlLiAgVGhlIG5leHQgc3RyaW5n CisJICogaW50ZXJuIHdpbGwgZG8gb25lLgorCSAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX1JF RkVSRU5DRV9DT1VOVElORyAqLworCisvKiBVbmxpbmsgd2l0aCBhICdwcmV2JyBwb2ludGVyLiAq LworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2hlYXBfc3RydGFibGVfdW5saW5rX3ByZXYoZHVrX2hl YXAgKmhlYXAsIGR1a19oc3RyaW5nICpoLCBkdWtfaHN0cmluZyAqcHJldikgeworI2lmIGRlZmlu ZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkKKwlkdWtfdWludDE2X3QgKnNsb3Q7CisjZWxzZQor CWR1a19oc3RyaW5nICoqc2xvdDsKKyNlbmRpZgorCisJRFVLX0RERChEVUtfREREUFJJTlQoInJl bW92ZTogaGVhcD0lcCwgcHJldj0lcCwgaD0lcCwgYmxlbj0lbHUsIHN0cmhhc2g9JWx4IiwKKwkg ICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBoZWFwLCAodm9pZCAqKSBwcmV2LCAodm9pZCAq KSBoLAorCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoaCAhPSBOVUxMID8g RFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkgOiAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgKGggIT0gTlVMTCA/IERVS19IU1RSSU5HX0dFVF9IQVNIKGgpIDogMCkp KTsKKworCURVS19BU1NFUlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7 CisJRFVLX0FTU0VSVChwcmV2ID09IE5VTEwgfHwgcHJldi0+aGRyLmhfbmV4dCA9PSBoKTsKKwor I2lmIGRlZmluZWQoRFVLX19TVFJUQUJfUkVTSVpFX0NIRUNLKQorCURVS19BU1NFUlQoaGVhcC0+ c3RfY291bnQgPiAwKTsKKwloZWFwLT5zdF9jb3VudC0tOworI2VuZGlmCisKKwlpZiAocHJldiAh PSBOVUxMKSB7CisJCS8qIE1pZGRsZSBvZiBsaXN0LiAqLworCQlwcmV2LT5oZHIuaF9uZXh0ID0g aC0+aGRyLmhfbmV4dDsKKwl9IGVsc2UgeworCQkvKiBIZWFkIG9mIGxpc3QuICovCisjaWYgZGVm aW5lZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCQlzbG90ID0gaGVhcC0+c3RydGFibGUxNiAr IChEVUtfSFNUUklOR19HRVRfSEFTSChoKSAmIGhlYXAtPnN0X21hc2spOworI2Vsc2UKKwkJc2xv dCA9IGhlYXAtPnN0cnRhYmxlICsgKERVS19IU1RSSU5HX0dFVF9IQVNIKGgpICYgaGVhcC0+c3Rf bWFzayk7CisjZW5kaWYKKwkJRFVLX0FTU0VSVChEVUtfX0hFQVBQVFJfREVDMTYoaGVhcCwgKnNs b3QpID09IGgpOworCQkqc2xvdCA9IERVS19fSEVBUFBUUl9FTkMxNihoZWFwLCBoLT5oZHIuaF9u ZXh0KTsKKwl9Cit9CisKKy8qCisgKiAgRm9yY2Ugc3RyaW5nIHRhYmxlIHJlc2l6ZSBjaGVjayBp biBtYXJrLWFuZC1zd2VlcC4KKyAqLworCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaGVhcF9zdHJ0 YWJsZV9mb3JjZV9yZXNpemUoZHVrX2hlYXAgKmhlYXApIHsKKwkvKiBEb2VzIG9ubHkgb25lIGdy b3cvc2hyaW5rIHN0ZXAgaWYgbmVlZGVkLiAgVGhlIGhlYXAtPnN0X3Jlc2l6aW5nCisJICogZmxh ZyBwcm90ZWN0cyBhZ2FpbnN0IHJlY3Vyc2l2ZSByZXNpemluZy4KKwkgKi8KKworCURVS19BU1NF UlQoaGVhcCAhPSBOVUxMKTsKKwlEVUtfVU5SRUYoaGVhcCk7CisKKyNpZiBkZWZpbmVkKERVS19f U1RSVEFCX1JFU0laRV9DSEVDSykKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSVEFCX1BUUkNPTVAp CisJaWYgKGhlYXAtPnN0cnRhYmxlMTYgIT0gTlVMTCkgeworI2Vsc2UKKwlpZiAoaGVhcC0+c3Ry dGFibGUgIT0gTlVMTCkgeworI2VuZGlmCisJCWR1a19fc3RydGFibGVfcmVzaXplX2NoZWNrKGhl YXApOworCX0KKyNlbmRpZgorfQorCisvKgorICogIEZyZWUgc3RyaW5ncyBpbiB0aGUgc3RyaW5n IHRhYmxlIGFuZCB0aGUgc3RyaW5nIHRhYmxlIGl0c2VsZi4KKyAqLworCitEVUtfSU5URVJOQUwg dm9pZCBkdWtfaGVhcF9zdHJ0YWJsZV9mcmVlKGR1a19oZWFwICpoZWFwKSB7CisjaWYgZGVmaW5l ZChEVUtfVVNFX1NUUlRBQl9QVFJDT01QKQorCWR1a191aW50MTZfdCAqc3RydGFibGU7CisJZHVr X3VpbnQxNl90ICpzdDsKKyNlbHNlCisJZHVrX2hzdHJpbmcgKipzdHJ0YWJsZTsKKwlkdWtfaHN0 cmluZyAqKnN0OworI2VuZGlmCisJZHVrX2hzdHJpbmcgKmg7CisKKwlEVUtfQVNTRVJUKGhlYXAg IT0gTlVMTCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfX3N0cnRh YmxlX2Fzc2VydF9jaGVja3MoaGVhcCk7CisjZW5kaWYKKworCS8qIFN0cnRhYmxlIGNhbiBiZSBO VUxMIGlmIGhlYXAgaW5pdCBmYWlscy4gIEhvd2V2ZXIsIGluIHRoYXQgY2FzZQorCSAqIGhlYXAt PnN0X3NpemUgaXMgMCwgc28gc3RydGFibGUgPT0gc3RydGFibGVfZW5kIGFuZCB3ZSBza2lwIHRo ZQorCSAqIGxvb3Agd2l0aG91dCBhIHNwZWNpYWwgY2hlY2suCisJICovCisJc3RydGFibGUgPSBE VUtfX0dFVF9TVFJUQUJMRShoZWFwKTsKKwlzdCA9IHN0cnRhYmxlICsgaGVhcC0+c3Rfc2l6ZTsK KwlEVUtfQVNTRVJUKHN0cnRhYmxlICE9IE5VTEwgfHwgaGVhcC0+c3Rfc2l6ZSA9PSAwKTsKKwor CXdoaWxlIChzdHJ0YWJsZSAhPSBzdCkgeworCQktLXN0OworCQloID0gRFVLX19IRUFQUFRSX0RF QzE2KGhlYXAsICpzdCk7CisJCXdoaWxlIChoKSB7CisJCQlkdWtfaHN0cmluZyAqaF9uZXh0Owor CQkJaF9uZXh0ID0gaC0+aGRyLmhfbmV4dDsKKworCQkJLyogU3RyaW5ncyBtYXkgaGF2ZSBpbm5l ciByZWZzIChleHRkYXRhKSBpbiBzb21lIGNhc2VzLiAqLworCQkJZHVrX2ZyZWVfaHN0cmluZyho ZWFwLCBoKTsKKworCQkJaCA9IGhfbmV4dDsKKwkJfQorCX0KKworCURVS19GUkVFKGhlYXAsIHN0 cnRhYmxlKTsKK30KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fR0VUX1NU UlRBQkxFCisjdW5kZWYgRFVLX19IRUFQUFRSX0RFQzE2CisjdW5kZWYgRFVLX19IRUFQUFRSX0VO QzE2CisjdW5kZWYgRFVLX19TVFJUQUJfVTMyX01BWF9TVFJMRU4KKy8qCisgKiAgSG9iamVjdCBh bGxvY2F0aW9uLgorICoKKyAqICBQcm92aWRlcyBwcmltaXRpdmUgYWxsb2NhdGlvbiBmdW5jdGlv bnMgZm9yIGFsbCBvYmplY3QgdHlwZXMgKHBsYWluIG9iamVjdCwKKyAqICBjb21waWxlZCBmdW5j dGlvbiwgbmF0aXZlIGZ1bmN0aW9uLCB0aHJlYWQpLiAgVGhlIG9iamVjdCByZXR1cm4gaXMgbm90 IHlldAorICogIGluICJoZWFwIGFsbG9jYXRlZCIgbGlzdCBhbmQgaGFzIGEgcmVmY291bnQgb2Yg emVybywgc28gY2FsbGVyIG11c3QgY2FyZWZ1bC4KKyAqLworCisvKiBYWFg6IEluIG1vc3QgY2Fz ZXMgdGhlcmUncyBubyBuZWVkIGZvciBwbGFpbiBhbGxvY2F0aW9uIHdpdGhvdXQgcHVzaGluZwor ICogdG8gdGhlIHZhbHVlIHN0YWNrLiAgTWF5YmUgcmV3b3JrIGNvbnRyYWN0PworICovCisKKy8q ICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyoKKyAq ICBIZWxwZXJzLgorICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19faW5pdF9vYmplY3RfcGFydHMo ZHVrX2hlYXAgKmhlYXAsIGR1a191aW50X3QgaG9iamVjdF9mbGFncywgZHVrX2hvYmplY3QgKm9i aikgeworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCS8qIFplcm9lZCBieSBjYWxsZXIuICov CisKKwlvYmotPmhkci5oX2ZsYWdzID0gaG9iamVjdF9mbGFncyB8IERVS19IVFlQRV9PQkpFQ1Q7 CisJRFVLX0FTU0VSVChEVUtfSEVBUEhEUl9HRVRfVFlQRSgmb2JqLT5oZHIpID09IERVS19IVFlQ RV9PQkpFQ1QpOyAgLyogQXNzdW1lIHplcm8gc2hpZnQuICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfRVhQTElDSVRfTlVMTF9JTklUKQorCURVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEUoaGVhcCwg b2JqLCBOVUxMKTsKKwlEVUtfSE9CSkVDVF9TRVRfUFJPUFMoaGVhcCwgb2JqLCBOVUxMKTsKKyNl bmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJLyogWmVybyBlbmNvZGVkIHBv aW50ZXIgaXMgcmVxdWlyZWQgdG8gbWF0Y2ggTlVMTC4gKi8KKwlEVUtfSEVBUEhEUl9TRVRfTkVY VChoZWFwLCAmb2JqLT5oZHIsIE5VTEwpOworI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTElO S0VEX0hFQVApCisJRFVLX0hFQVBIRFJfU0VUX1BSRVYoaGVhcCwgJm9iai0+aGRyLCBOVUxMKTsK KyNlbmRpZgorI2VuZGlmCisJRFVLX0FTU0VSVF9IRUFQSERSX0xJTktTKGhlYXAsICZvYmotPmhk cik7CisJRFVLX0hFQVBfSU5TRVJUX0lOVE9fSEVBUF9BTExPQ0FURUQoaGVhcCwgJm9iai0+aGRy KTsKKworCS8qIG9iai0+cHJvcHMgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGFzIE5VTEwsIGFuZCBk dWtfaG9iamVjdF9wcm9wcy5jIG11c3QgZGVhbAorCSAqIHdpdGggdGhpcyBwcm9wZXJseS4gIFRo aXMgaXMgaW50ZW50aW9uYWw6IGVtcHR5IG9iamVjdHMgY29uc3VtZSBhIG1pbmltdW0KKwkgKiBh bW91bnQgb2YgbWVtb3J5LiAgRnVydGhlciwgYW4gaW5pdGlhbCBhbGxvY2F0aW9uIG1pZ2h0IGZh aWwgYW5kIGNhdXNlCisJICogJ29iaicgdG8gImxlYWsiIChyZXF1aXJlIGEgbWFyay1hbmQtc3dl ZXApIHNpbmNlIGl0IGlzIG5vdCByZWFjaGFibGUgeWV0LgorCSAqLworfQorCitEVUtfTE9DQUwg dm9pZCAqZHVrX19ob2JqZWN0X2FsbG9jX2luaXQoZHVrX2h0aHJlYWQgKnRociwgZHVrX3VpbnRf dCBob2JqZWN0X2ZsYWdzLCBkdWtfc2l6ZV90IHNpemUpIHsKKwl2b2lkICpyZXM7CisKKwlyZXMg PSAodm9pZCAqKSBEVUtfQUxMT0NfQ0hFQ0tFRF9aRVJPRUQodGhyLCBzaXplKTsKKwlEVUtfQVNT RVJUKHJlcyAhPSBOVUxMKTsKKwlkdWtfX2luaXRfb2JqZWN0X3BhcnRzKHRoci0+aGVhcCwgaG9i amVjdF9mbGFncywgKGR1a19ob2JqZWN0ICopIHJlcyk7CisJcmV0dXJuIHJlczsKK30KKworLyoK KyAqICBBbGxvY2F0ZSBhbiBkdWtfaG9iamVjdC4KKyAqCisgKiAgVGhlIGFsbG9jYXRlZCBvYmpl Y3QgaGFzIG5vIGFsbG9jYXRpb24gZm9yIHByb3BlcnRpZXM7IHRoZSBjYWxsZXIgbWF5CisgKiAg d2FudCB0byBmb3JjZSBhIHJlc2l6ZSBpZiBhIGRlc2lyZWQgc2l6ZSBpcyBrbm93bi4KKyAqCisg KiAgVGhlIGFsbG9jYXRlZCBvYmplY3QgaGFzIHplcm8gcmVmZXJlbmNlIGNvdW50IGFuZCBpcyBu b3QgcmVhY2hhYmxlLgorICogIFRoZSBjYWxsZXIgTVVTVCBtYWtlIHRoZSBvYmplY3QgcmVhY2hh YmxlIGFuZCBpbmNyZWFzZSBpdHMgcmVmZXJlbmNlCisgKiAgY291bnQgYmVmb3JlIGludm9raW5n IGFueSBvcGVyYXRpb24gdGhhdCBtaWdodCByZXF1aXJlIG1lbW9yeSBhbGxvY2F0aW9uLgorICov CisKK0RVS19JTlRFUk5BTCBkdWtfaG9iamVjdCAqZHVrX2hvYmplY3RfYWxsb2NfdW5jaGVja2Vk KGR1a19oZWFwICpoZWFwLCBkdWtfdWludF90IGhvYmplY3RfZmxhZ3MpIHsKKwlkdWtfaG9iamVj dCAqcmVzOworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCisJLyogZGlmZmVyZW50IG1l bW9yeSBsYXlvdXQsIGFsbG9jIHNpemUsIGFuZCBpbml0ICovCisJRFVLX0FTU0VSVCgoaG9iamVj dF9mbGFncyAmIERVS19IT0JKRUNUX0ZMQUdfQ09NUEZVTkMpID09IDApOworCURVS19BU1NFUlQo KGhvYmplY3RfZmxhZ3MgJiBEVUtfSE9CSkVDVF9GTEFHX05BVEZVTkMpID09IDApOworCURVS19B U1NFUlQoKGhvYmplY3RfZmxhZ3MgJiBEVUtfSE9CSkVDVF9GTEFHX0JPVU5ERlVOQykgPT0gMCk7 CisKKwlyZXMgPSAoZHVrX2hvYmplY3QgKikgRFVLX0FMTE9DX1pFUk9FRChoZWFwLCBzaXplb2Yo ZHVrX2hvYmplY3QpKTsKKwlpZiAoRFVLX1VOTElLRUxZKHJlcyA9PSBOVUxMKSkgeworCQlyZXR1 cm4gTlVMTDsKKwl9CisJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSVNfVEhSRUFEKHJlcykpOwor CisJZHVrX19pbml0X29iamVjdF9wYXJ0cyhoZWFwLCBob2JqZWN0X2ZsYWdzLCByZXMpOworCisJ RFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSVNfVEhSRUFEKHJlcykpOworCXJldHVybiByZXM7Cit9 CisKK0RVS19JTlRFUk5BTCBkdWtfaG9iamVjdCAqZHVrX2hvYmplY3RfYWxsb2MoZHVrX2h0aHJl YWQgKnRociwgZHVrX3VpbnRfdCBob2JqZWN0X2ZsYWdzKSB7CisJZHVrX2hvYmplY3QgKnJlczsK KworCXJlcyA9IChkdWtfaG9iamVjdCAqKSBkdWtfX2hvYmplY3RfYWxsb2NfaW5pdCh0aHIsIGhv YmplY3RfZmxhZ3MsIHNpemVvZihkdWtfaG9iamVjdCkpOworCXJldHVybiByZXM7Cit9CisKK0RV S19JTlRFUk5BTCBkdWtfaGNvbXBmdW5jICpkdWtfaGNvbXBmdW5jX2FsbG9jKGR1a19odGhyZWFk ICp0aHIsIGR1a191aW50X3QgaG9iamVjdF9mbGFncykgeworCWR1a19oY29tcGZ1bmMgKnJlczsK KworCXJlcyA9IChkdWtfaGNvbXBmdW5jICopIGR1a19faG9iamVjdF9hbGxvY19pbml0KHRociwg aG9iamVjdF9mbGFncywgc2l6ZW9mKGR1a19oY29tcGZ1bmMpKTsKKyNpZiBkZWZpbmVkKERVS19V U0VfRVhQTElDSVRfTlVMTF9JTklUKQorI2lmIGRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJ LyogTlVMTCBwb2ludGVyIGlzIHJlcXVpcmVkIHRvIGVuY29kZSB0byB6ZXJvLCBzbyBtZW1zZXQg aXMgZW5vdWdoLiAqLworI2Vsc2UKKwlyZXMtPmRhdGEgPSBOVUxMOworCXJlcy0+ZnVuY3MgPSBO VUxMOworCXJlcy0+Ynl0ZWNvZGUgPSBOVUxMOworI2VuZGlmCisJcmVzLT5sZXhfZW52ID0gTlVM TDsKKwlyZXMtPnZhcl9lbnYgPSBOVUxMOworI2VuZGlmCisKKwlyZXR1cm4gcmVzOworfQorCitE VUtfSU5URVJOQUwgZHVrX2huYXRmdW5jICpkdWtfaG5hdGZ1bmNfYWxsb2MoZHVrX2h0aHJlYWQg KnRociwgZHVrX3VpbnRfdCBob2JqZWN0X2ZsYWdzKSB7CisJZHVrX2huYXRmdW5jICpyZXM7CisK KwlyZXMgPSAoZHVrX2huYXRmdW5jICopIGR1a19faG9iamVjdF9hbGxvY19pbml0KHRociwgaG9i amVjdF9mbGFncywgc2l6ZW9mKGR1a19obmF0ZnVuYykpOworI2lmIGRlZmluZWQoRFVLX1VTRV9F WFBMSUNJVF9OVUxMX0lOSVQpCisJcmVzLT5mdW5jID0gTlVMTDsKKyNlbmRpZgorCisJcmV0dXJu IHJlczsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oYm91bmRmdW5jICpkdWtfaGJvdW5kZnVuY19h bGxvYyhkdWtfaGVhcCAqaGVhcCwgZHVrX3VpbnRfdCBob2JqZWN0X2ZsYWdzKSB7CisJZHVrX2hi b3VuZGZ1bmMgKnJlczsKKworCXJlcyA9IChkdWtfaGJvdW5kZnVuYyAqKSBEVUtfQUxMT0MoaGVh cCwgc2l6ZW9mKGR1a19oYm91bmRmdW5jKSk7CisJaWYgKCFyZXMpIHsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCWR1a19tZW16ZXJvKHJlcywgc2l6ZW9mKGR1a19oYm91bmRmdW5jKSk7CisKKwlkdWtf X2luaXRfb2JqZWN0X3BhcnRzKGhlYXAsIGhvYmplY3RfZmxhZ3MsICZyZXMtPm9iaik7CisKKwlE VUtfVFZBTF9TRVRfVU5ERUZJTkVEKCZyZXMtPnRhcmdldCk7CisJRFVLX1RWQUxfU0VUX1VOREVG SU5FRCgmcmVzLT50aGlzX2JpbmRpbmcpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VYUExJQ0lU X05VTExfSU5JVCkKKwlyZXMtPmFyZ3MgPSBOVUxMOworI2VuZGlmCisKKwlyZXR1cm4gcmVzOwor fQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorRFVLX0lOVEVS TkFMIGR1a19oYnVmb2JqICpkdWtfaGJ1Zm9ial9hbGxvYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf dWludF90IGhvYmplY3RfZmxhZ3MpIHsKKwlkdWtfaGJ1Zm9iaiAqcmVzOworCisJcmVzID0gKGR1 a19oYnVmb2JqICopIGR1a19faG9iamVjdF9hbGxvY19pbml0KHRociwgaG9iamVjdF9mbGFncywg c2l6ZW9mKGR1a19oYnVmb2JqKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0VYUExJQ0lUX05VTExf SU5JVCkKKwlyZXMtPmJ1ZiA9IE5VTEw7CisJcmVzLT5idWZfcHJvcCA9IE5VTEw7CisjZW5kaWYK KworCURVS19BU1NFUlRfSEJVRk9CSl9WQUxJRChyZXMpOworCXJldHVybiByZXM7Cit9CisjZW5k aWYgIC8qIERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworLyogQWxsb2NhdGUgYSBu ZXcgdGhyZWFkLgorICoKKyAqIExlYXZlcyB0aGUgYnVpbHQtaW5zIGFycmF5IHVuaW5pdGlhbGl6 ZWQuICBUaGUgY2FsbGVyIG11c3QgZWl0aGVyCisgKiBpbml0aWFsaXplIGEgbmV3IGdsb2JhbCBj b250ZXh0IG9yIHNoYXJlIGV4aXN0aW5nIGJ1aWx0LWlucyBmcm9tCisgKiBhbm90aGVyIHRocmVh ZC4KKyAqLworRFVLX0lOVEVSTkFMIGR1a19odGhyZWFkICpkdWtfaHRocmVhZF9hbGxvY191bmNo ZWNrZWQoZHVrX2hlYXAgKmhlYXAsIGR1a191aW50X3QgaG9iamVjdF9mbGFncykgeworCWR1a19o dGhyZWFkICpyZXM7CisKKwlyZXMgPSAoZHVrX2h0aHJlYWQgKikgRFVLX0FMTE9DKGhlYXAsIHNp emVvZihkdWtfaHRocmVhZCkpOworCWlmIChEVUtfVU5MSUtFTFkocmVzID09IE5VTEwpKSB7CisJ CXJldHVybiBOVUxMOworCX0KKwlkdWtfbWVtemVybyhyZXMsIHNpemVvZihkdWtfaHRocmVhZCkp OworCisJZHVrX19pbml0X29iamVjdF9wYXJ0cyhoZWFwLCBob2JqZWN0X2ZsYWdzLCAmcmVzLT5v YmopOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VYUExJQ0lUX05VTExfSU5JVCkKKwlyZXMtPnB0 cl9jdXJyX3BjID0gTlVMTDsKKwlyZXMtPmhlYXAgPSBOVUxMOworCXJlcy0+dmFsc3RhY2sgPSBO VUxMOworCXJlcy0+dmFsc3RhY2tfZW5kID0gTlVMTDsKKwlyZXMtPnZhbHN0YWNrX2FsbG9jX2Vu ZCA9IE5VTEw7CisJcmVzLT52YWxzdGFja19ib3R0b20gPSBOVUxMOworCXJlcy0+dmFsc3RhY2tf dG9wID0gTlVMTDsKKwlyZXMtPmNhbGxzdGFja19jdXJyID0gTlVMTDsKKwlyZXMtPnJlc3VtZXIg PSBOVUxMOworCXJlcy0+Y29tcGlsZV9jdHggPSBOVUxMLAorI2lmIGRlZmluZWQoRFVLX1VTRV9I RUFQUFRSMTYpCisJcmVzLT5zdHJzMTYgPSBOVUxMOworI2Vsc2UKKwlyZXMtPnN0cnMgPSBOVUxM OworI2VuZGlmCisJeworCQlkdWtfc21hbGxfdWludF90IGk7CisJCWZvciAoaSA9IDA7IGkgPCBE VUtfTlVNX0JVSUxUSU5TOyBpKyspIHsKKwkJCXJlcy0+YnVpbHRpbnNbaV0gPSBOVUxMOworCQl9 CisJfQorI2VuZGlmCisJLyogV2hlbiBub3RoaW5nIGlzIHJ1bm5pbmcsIEFQSSBjYWxscyBhcmUg aW4gbm9uLXN0cmljdCBtb2RlLiAqLworCURVS19BU1NFUlQocmVzLT5zdHJpY3QgPT0gMCk7CisK KwlyZXMtPmhlYXAgPSBoZWFwOworCisJLyogWFhYOiBBbnkgcmVhc29uIG5vdCB0byBtZXJnZSBk dWtfaHRocmVhZF9hbGxvYy5jIGhlcmU/ICovCisJcmV0dXJuIHJlczsKK30KKworRFVLX0lOVEVS TkFMIGR1a19odGhyZWFkICpkdWtfaHRocmVhZF9hbGxvYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf dWludF90IGhvYmplY3RfZmxhZ3MpIHsKKwlkdWtfaHRocmVhZCAqcmVzOworCisJcmVzID0gZHVr X2h0aHJlYWRfYWxsb2NfdW5jaGVja2VkKHRoci0+aGVhcCwgaG9iamVjdF9mbGFncyk7CisJaWYg KHJlcyA9PSBOVUxMKSB7CisJCURVS19FUlJPUl9BTExPQ19GQUlMRUQodGhyKTsKKwkJRFVLX1dP X05PUkVUVVJOKHJldHVybiBOVUxMOyk7CisJfQorCXJldHVybiByZXM7Cit9CisKK0RVS19JTlRF Uk5BTCBkdWtfaGFycmF5ICpkdWtfaGFycmF5X2FsbG9jKGR1a19odGhyZWFkICp0aHIsIGR1a191 aW50X3QgaG9iamVjdF9mbGFncykgeworCWR1a19oYXJyYXkgKnJlczsKKworCXJlcyA9IChkdWtf aGFycmF5ICopIGR1a19faG9iamVjdF9hbGxvY19pbml0KHRociwgaG9iamVjdF9mbGFncywgc2l6 ZW9mKGR1a19oYXJyYXkpKTsKKworCURVS19BU1NFUlQocmVzLT5sZW5ndGggPT0gMCk7CisKKwly ZXR1cm4gcmVzOworfQorCitEVUtfSU5URVJOQUwgZHVrX2hkZWNlbnYgKmR1a19oZGVjZW52X2Fs bG9jKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X3QgaG9iamVjdF9mbGFncykgeworCWR1a19o ZGVjZW52ICpyZXM7CisKKwlyZXMgPSAoZHVrX2hkZWNlbnYgKikgZHVrX19ob2JqZWN0X2FsbG9j X2luaXQodGhyLCBob2JqZWN0X2ZsYWdzLCBzaXplb2YoZHVrX2hkZWNlbnYpKTsKKyNpZiBkZWZp bmVkKERVS19VU0VfRVhQTElDSVRfTlVMTF9JTklUKQorCXJlcy0+dGhyZWFkID0gTlVMTDsKKwly ZXMtPnZhcm1hcCA9IE5VTEw7CisjZW5kaWYKKworCURVS19BU1NFUlQocmVzLT50aHJlYWQgPT0g TlVMTCk7CisJRFVLX0FTU0VSVChyZXMtPnZhcm1hcCA9PSBOVUxMKTsKKwlEVUtfQVNTRVJUKHJl cy0+cmVnYmFzZV9ieXRlb2ZmID09IDApOworCisJcmV0dXJuIHJlczsKK30KKworRFVLX0lOVEVS TkFMIGR1a19ob2JqZW52ICpkdWtfaG9iamVudl9hbGxvYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf dWludF90IGhvYmplY3RfZmxhZ3MpIHsKKwlkdWtfaG9iamVudiAqcmVzOworCisJcmVzID0gKGR1 a19ob2JqZW52ICopIGR1a19faG9iamVjdF9hbGxvY19pbml0KHRociwgaG9iamVjdF9mbGFncywg c2l6ZW9mKGR1a19ob2JqZW52KSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0VYUExJQ0lUX05VTExf SU5JVCkKKwlyZXMtPnRhcmdldCA9IE5VTEw7CisjZW5kaWYKKworCURVS19BU1NFUlQocmVzLT50 YXJnZXQgPT0gTlVMTCk7CisKKwlyZXR1cm4gcmVzOworfQorCitEVUtfSU5URVJOQUwgZHVrX2hw cm94eSAqZHVrX2hwcm94eV9hbGxvYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF90IGhvYmpl Y3RfZmxhZ3MpIHsKKwlkdWtfaHByb3h5ICpyZXM7CisKKwlyZXMgPSAoZHVrX2hwcm94eSAqKSBk dWtfX2hvYmplY3RfYWxsb2NfaW5pdCh0aHIsIGhvYmplY3RfZmxhZ3MsIHNpemVvZihkdWtfaHBy b3h5KSk7CisKKwkvKiBMZWF2ZSAtPnRhcmdldCBhbmQgLT5oYW5kbGVyIHVuaW5pdGlhbGl6ZWQs IGFzIGNhbGxlciB3aWxsIGFsd2F5cworCSAqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGVtIGJl Zm9yZSBhbnkgc2lkZSBlZmZlY3RzIGFyZSBwb3NzaWJsZS4KKwkgKi8KKworCXJldHVybiByZXM7 Cit9CisvKgorICogIE9iamVjdCBlbnVtZXJhdGlvbiBzdXBwb3J0LgorICoKKyAqICBDcmVhdGVz IGFuIGludGVybmFsIGVudW1lcmF0aW9uIHN0YXRlIG9iamVjdCB0byBiZSB1c2VkIGUuZy4gd2l0 aCBmb3ItaW4KKyAqICBlbnVtZXJhdGlvbi4gIFRoZSBzdGF0ZSBvYmplY3QgY29udGFpbnMgYSBz bmFwc2hvdCBvZiB0YXJnZXQgb2JqZWN0IGtleXMKKyAqICBhbmQgaW50ZXJuYWwgY29udHJvbCBz dGF0ZSBmb3IgZW51bWVyYXRpb24uICBFbnVtZXJhdG9yIGZsYWdzIGFsbG93IGNhbGxlcgorICog IHRvIGUuZy4gcmVxdWVzdCBpbnRlcm5hbC9ub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLCBhbmQg dG8gZW51bWVyYXRlIG9ubHkKKyAqICAib3duIiBwcm9wZXJ0aWVzLgorICoKKyAqICBBbHNvIGNy ZWF0ZXMgdGhlIHJlc3VsdCB2YWx1ZSBmb3IgZS5nLiBPYmplY3Qua2V5cygpIGJhc2VkIG9uIHRo ZSBzYW1lCisgKiAgaW50ZXJuYWwgc3RydWN0dXJlLgorICoKKyAqICBUaGlzIHNuYXBzaG90LWJh c2VkIGVudW1lcmF0aW9uIGFwcHJvYWNoIGlzIHVzZWQgdG8gc2ltcGxpZnkgZW51bWVyYXRpb246 CisgKiAgbm9uLXNuYXBzaG90LWJhc2VkIGFwcHJvYWNoZXMgYXJlIGRpZmZpY3VsdCB0byByZWNv bmNpbGUgd2l0aCBtdXRhdGluZworICogIHRoZSBlbnVtZXJhdGlvbiB0YXJnZXQsIHJ1bm5pbmcg bXVsdGlwbGUgbG9uZy1saXZlZCBlbnVtZXJhdG9ycyBhdCB0aGUKKyAqICBzYW1lIHRpbWUsIGdh cmJhZ2UgY29sbGVjdGlvbiBkZXRhaWxzLCBldGMuICBUaGUgZG93bnNpZGUgaXMgdGhhdCB0aGUK KyAqICBlbnVtZXJhdG9yIG9iamVjdCBpcyBtZW1vcnkgaW5lZmZpY2llbnQgZXNwZWNpYWxseSBm b3IgaXRlcmF0aW5nIGFycmF5cy4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAt PiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qIFhYWDogaWRlbnRpZnkgZW51bWVyYXRpb24gdGFy Z2V0IHdpdGggYW4gb2JqZWN0IGluZGV4IChub3QgdG9wIG9mIHN0YWNrKSAqLworCisvKiBGaXJz dCBlbnVtZXJhdGVkIGtleSBpbmRleCBpbiBlbnVtZXJhdG9yIG9iamVjdCwgbXVzdCBtYXRjaCBl eGFjdGx5IHRoZQorICogbnVtYmVyIG9mIGNvbnRyb2wgcHJvcGVydGllcyBpbnNlcnRlZCB0byB0 aGUgZW51bWVyYXRvci4KKyAqLworI2RlZmluZSBEVUtfX0VOVU1fU1RBUlRfSU5ERVggIDIKKwor LyogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdWZmaWNlcyBmb3IgRVMyMDE1IGZvciBub3cgYmVj YXVzZSB0aGVyZSdzIG5vIHN5bWJvbAorICogc29ydGluZywgc28gY29tbWVudGVkIG91dCBmb3Ig bm93LgorICovCisKKy8qCisgKiAgSGVscGVyIHRvIHNvcnQgZW51bWVyYXRpb24ga2V5cyB1c2lu ZyBhIGNhbGxiYWNrIGZvciBwYWlyd2lzZSBkdWtfaHN0cmluZworICogIGNvbXBhcmlzb25zLiAg VGhlIGtleXMgYXJlIGluIHRoZSBlbnVtZXJhdGlvbiBvYmplY3QgZW50cnkgcGFydCwgc3RhcnRp bmcKKyAqICBmcm9tIERVS19fRU5VTV9TVEFSVF9JTkRFWCwgYW5kIHRoZSBlbnRyeSBwYXJ0IGlz IGRlbnNlLiAgRW50cnkgcGFydCB2YWx1ZXMKKyAqICBhcmUgYWxsICJ0cnVlIiwgZS5nLiAiMSIg LT4gdHJ1ZSwgIjMiIC0+IHRydWUsICJmb28iIC0+IHRydWUsICIyIiAtPiB0cnVlLAorICogIHNv IGl0IHN1ZmZpY2VzIHRvIGp1c3Qgc3dpdGNoIGtleXMgd2l0aG91dCBzd2l0Y2hpbmcgdmFsdWVz LgorICoKKyAqICBFUzIwMTUgW1tPd25Qcm9wZXJ0eUtleXNdXSBlbnVtZXJhdGlvbiBvcmRlciBm b3Igb3JkaW5hcnkgb2JqZWN0czoKKyAqICAoMSkgYXJyYXkgaW5kaWNlcyBpbiBhc2NlbmRpbmcg b3JkZXIsCisgKiAgKDIpIG5vbi1hcnJheS1pbmRleCBrZXlzIGluIGluc2VydGlvbiBvcmRlciwg YW5kCisgKiAgKDMpIHN5bWJvbHMgaW4gaW5zZXJ0aW9uIG9yZGVyLgorICogIGh0dHA6Ly93d3cu ZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vcmRpbmFyeS1vYmplY3Qt aW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtb3ducHJvcGVydHlrZXlzLgorICoK KyAqICBUaGlzIHJ1bGUgaXMgYXBwbGllZCB0byAib3duIHByb3BlcnRpZXMiIGF0IGVhY2ggaW5o ZXJpdGFuY2UgbGV2ZWw7CisgKiAgbm9uLWR1cGxpY2F0ZSBwYXJlbnQga2V5cyBhbHdheXMgZm9s bG93IGNoaWxkIGtleXMuICBGb3IgZXhhbXBsZSwKKyAqICBhbiBpbmhlcml0ZWQgYXJyYXkgaW5k ZXggd2lsbCBlbnVtZXJhdGUgLWFmdGVyLSBhIHN5bWJvbCBpbiB0aGUKKyAqICBjaGlsZC4KKyAq CisgKiAgSW5zZXJ0aW9uIHNvcnQgaXMgdXNlZCBiZWNhdXNlICgxKSBpdCdzIHNpbXBsZSBhbmQg Y29tcGFjdCwgKDIpIHdvcmtzCisgKiAgaW4tcGxhY2UsICgzKSBtaW5pbWl6ZXMgb3BlcmF0aW9u cyBpZiBkYXRhIGlzIGFscmVhZHkgbmVhcmx5IHNvcnRlZCwKKyAqICAoNCkgZG9lc24ndCByZW9y ZGVyIGVsZW1lbnRzIGNvbnNpZGVyZWQgZXF1YWwuCisgKiAgaHR0cDovL2VuLndpa2lwZWRpYS5v cmcvd2lraS9JbnNlcnRpb25fc29ydAorICovCisKKy8qIFNvcnQga2V5LCBtdXN0IGhvbGQgYXJy YXkgaW5kaWNlcywgIm5vdCBhcnJheSBpbmRleCIgbWFya2VyLCBhbmQgb25lIG1vcmUKKyAqIGhp Z2hlciB2YWx1ZSBmb3Igc3ltYm9scy4KKyAqLworI2lmICFkZWZpbmVkKERVS19VU0VfU1lNQk9M X0JVSUxUSU4pCit0eXBlZGVmIGR1a191aW50MzJfdCBkdWtfX3NvcnRfa2V5X3Q7CisjZWxpZiBk ZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQordHlwZWRlZiBkdWtfdWludDY0X3QgZHVrX19zb3J0 X2tleV90OworI2Vsc2UKK3R5cGVkZWYgZHVrX2RvdWJsZV90IGR1a19fc29ydF9rZXlfdDsKKyNl bmRpZgorCisvKiBHZXQgc29ydCBrZXkgZm9yIGEgZHVrX2hzdHJpbmcuICovCitEVUtfTE9DQUwg ZHVrX19zb3J0X2tleV90IGR1a19faHN0cmluZ19zb3J0X2tleShkdWtfaHN0cmluZyAqeCkgewor CWR1a19fc29ydF9rZXlfdCB2YWw7CisKKwkvKiBGb3IgYXJyYXkgaW5kaWNlcyBbMCwweGZmZmZm ZmZlXSB1c2UgdGhlIGFycmF5IGluZGV4IGFzIGlzLgorCSAqIEZvciBzdHJpbmdzLCB1c2UgMHhm ZmZmZmZmZiwgdGhlIG1hcmtlciAnYXJyaWR4JyBhbHJlYWR5IGluCisJICogZHVrX2hzdHJpbmcu ICBGb3Igc3ltYm9scywgYW55IHZhbHVlIGFib3ZlIDB4ZmZmZmZmZmYgd29ya3MsCisJICogYXMg bG9uZyBhcyBpdCBpcyB0aGUgc2FtZSBmb3IgYWxsIHN5bWJvbHM7IGN1cnJlbnRseSBqdXN0IGFk ZAorCSAqIHRoZSBtYXNrZWQgZmxhZyBmaWVsZCBpbnRvIHRoZSBhcnJpZHggdGVtcG9yYXJ5Lgor CSAqLworCURVS19BU1NFUlQoeCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKCFEVUtfSFNUUklOR19I QVNfU1lNQk9MKHgpIHx8IERVS19IU1RSSU5HX0dFVF9BUlJJRFhfRkFTVCh4KSA9PSBEVUtfSFNU UklOR19OT19BUlJBWV9JTkRFWCk7CisKKwl2YWwgPSAoZHVrX19zb3J0X2tleV90KSBEVUtfSFNU UklOR19HRVRfQVJSSURYX0ZBU1QoeCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfU1lNQk9MX0JV SUxUSU4pCisJdmFsID0gdmFsICsgKGR1a19fc29ydF9rZXlfdCkgKERVS19IRUFQSERSX0dFVF9G TEFHU19SQVcoKGR1a19oZWFwaGRyICopIHgpICYgRFVLX0hTVFJJTkdfRkxBR19TWU1CT0wpOwor I2VuZGlmCisKKwlyZXR1cm4gKGR1a19fc29ydF9rZXlfdCkgdmFsOworfQorCisvKiBJbnNlcnQg ZWxlbWVudCAnYicgYWZ0ZXIgZWxlbWVudCAnYSc/ICovCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBk dWtfX3NvcnRfY29tcGFyZV9lczYoZHVrX2hzdHJpbmcgKmEsIGR1a19oc3RyaW5nICpiLCBkdWtf X3NvcnRfa2V5X3QgdmFsX2IpIHsKKwlkdWtfX3NvcnRfa2V5X3QgdmFsX2E7CisKKwlEVUtfQVNT RVJUKGEgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChiICE9IE5VTEwpOworCURVS19VTlJFRihiKTsg IC8qIE5vdCBhY3R1YWxseSBuZWVkZWQgbm93LCB2YWxfYiBzdWZmaWNlcy4gKi8KKworCXZhbF9h ID0gZHVrX19oc3RyaW5nX3NvcnRfa2V5KGEpOworCisJaWYgKHZhbF9hID4gdmFsX2IpIHsKKwkJ cmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQorfQorCitEVUtfTE9DQUwgdm9p ZCBkdWtfX3NvcnRfZW51bV9rZXlzX2VzNihkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAq aF9vYmosIGR1a19pbnRfZmFzdDMyX3QgaWR4X3N0YXJ0LCBkdWtfaW50X2Zhc3QzMl90IGlkeF9l bmQpIHsKKwlkdWtfaHN0cmluZyAqKmtleXM7CisJZHVrX2ludF9mYXN0MzJfdCBpZHg7CisKKwlE VUtfQVNTRVJUKGhfb2JqICE9IE5VTEwpOworCURVS19BU1NFUlQoaWR4X3N0YXJ0ID49IERVS19f RU5VTV9TVEFSVF9JTkRFWCk7CisJRFVLX0FTU0VSVChpZHhfZW5kID49IGlkeF9zdGFydCk7CisJ RFVLX1VOUkVGKHRocik7CisKKwlpZiAoaWR4X2VuZCA8PSBpZHhfc3RhcnQgKyAxKSB7CisJCXJl dHVybjsgIC8qIFplcm8gb3Igb25lIGVsZW1lbnQocykuICovCisJfQorCisJa2V5cyA9IERVS19I T0JKRUNUX0VfR0VUX0tFWV9CQVNFKHRoci0+aGVhcCwgaF9vYmopOworCisJZm9yIChpZHggPSBp ZHhfc3RhcnQgKyAxOyBpZHggPCBpZHhfZW5kOyBpZHgrKykgeworCQlkdWtfaHN0cmluZyAqaF9j dXJyOworCQlkdWtfaW50X2Zhc3QzMl90IGlkeF9pbnNlcnQ7CisJCWR1a19fc29ydF9rZXlfdCB2 YWxfY3VycjsKKworCQloX2N1cnIgPSBrZXlzW2lkeF07CisJCURVS19BU1NFUlQoaF9jdXJyICE9 IE5VTEwpOworCisJCS8qIFNjYW4gYmFja3dhcmRzIGZvciBpbnNlcnRpb24gcGxhY2UuICBUaGlz IHdvcmtzIHZlcnkgd2VsbAorCQkgKiB3aGVuIHRoZSBlbGVtZW50cyBhcmUgbmVhcmx5IGluIG9y ZGVyIHdoaWNoIGlzIHRoZSBjb21tb24KKwkJICogKGFuZCBvcHRpbWl6ZWQgZm9yKSBjYXNlLgor CQkgKi8KKworCQl2YWxfY3VyciA9IGR1a19faHN0cmluZ19zb3J0X2tleShoX2N1cnIpOyAgLyog UmVtYWlucyBzYW1lIGR1cmluZyBzY2FubmluZy4gKi8KKwkJZm9yIChpZHhfaW5zZXJ0ID0gaWR4 IC0gMTsgaWR4X2luc2VydCA+PSBpZHhfc3RhcnQ7IGlkeF9pbnNlcnQtLSkgeworCQkJZHVrX2hz dHJpbmcgKmhfaW5zZXJ0OworCQkJaF9pbnNlcnQgPSBrZXlzW2lkeF9pbnNlcnRdOworCQkJRFVL X0FTU0VSVChoX2luc2VydCAhPSBOVUxMKTsKKworCQkJaWYgKGR1a19fc29ydF9jb21wYXJlX2Vz NihoX2luc2VydCwgaF9jdXJyLCB2YWxfY3VycikpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor CQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kaWNlcywgaWR4X2luc2VydCA9PSBpZHhfc3RhcnQgLSAx IGFuZCBpZHhfaW5zZXJ0KysKKwkJICogYnJpbmdzIHVzIGJhY2sgdG8gaWR4X3N0YXJ0LgorCQkg Ki8KKwkJaWR4X2luc2VydCsrOworCQlEVUtfQVNTRVJUKGlkeF9pbnNlcnQgPj0gMCAmJiBpZHhf aW5zZXJ0IDw9IGlkeCk7CisKKwkJLyogICAgICAgIC4tLSBwX2luc2VydCAgIC4tLSBwX2N1cnIK KwkJICogICAgICAgIHYgICAgICAgICAgICAgIHYKKwkJICogIHwgLi4uIHwgaW5zZXJ0IHwgLi4u IHwgY3VycgorCQkgKi8KKworCQkvKiBUaGlzIGNvdWxkIGFsc28gZG9uZSB3aGVuIHRoZSBrZXlz IGFyZSBpbiBvcmRlciwgaS5lLgorCQkgKiBpZHhfaW5zZXJ0ID09IGlkeC4gIFRoZSByZXN1bHQg d291bGQgYmUgYW4gdW5uZWNlc3NhcnkKKwkJICogbWVtbW92ZSgpIGJ1dCB3ZSB1c2UgYW4gZXhw bGljaXQgY2hlY2sgYmVjYXVzZSB0aGUga2V5cworCQkgKiBhcmUgdmVyeSBvZnRlbiBpbiBvcmRl ciBhbHJlYWR5LgorCQkgKi8KKwkJaWYgKGlkeCAhPSBpZHhfaW5zZXJ0KSB7CisJCQlkdWtfbWVt bW92ZSgodm9pZCAqKSAoa2V5cyArIGlkeF9pbnNlcnQgKyAxKSwKKwkJCSAgICAgICAgICAgIChj b25zdCB2b2lkICopIChrZXlzICsgaWR4X2luc2VydCksCisJCQkgICAgICAgICAgICAoKHNpemVf dCkgKGlkeCAtIGlkeF9pbnNlcnQpICogc2l6ZW9mKGR1a19oc3RyaW5nICopKSk7CisJCQlrZXlz W2lkeF9pbnNlcnRdID0gaF9jdXJyOworCQl9CisJfQorfQorCisvKgorICogIENyZWF0ZSBhbiBp bnRlcm5hbCBlbnVtZXJhdG9yIG9iamVjdCBFLCB3aGljaCBoYXMgaXRzIGtleXMgb3JkZXJlZAor ICogIHRvIG1hdGNoIGRlc2lyZWQgZW51bWVyYXRpb24gb3JkZXJpbmcuICBBbHNvIGluaXRpYWxp emUgaW50ZXJuYWwgY29udHJvbAorICogIHByb3BlcnRpZXMgZm9yIGVudW1lcmF0aW9uLgorICoK KyAqICBOb3RlOiBpZiBhbiBhcnJheSB3YXMgdXNlZCB0byBob2xkIGVudW1lcmF0aW9uIGtleXMg aW5zdGVhZCwgYW4gYXJyYXkKKyAqICBzY2FuIHdvdWxkIGJlIG5lZWRlZCB0byBlbGltaW5hdGUg ZHVwbGljYXRlcyBmb3VuZCBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgorICovCisKK0RVS19MT0NB TCB2b2lkIGR1a19fYWRkX2VudW1fa2V5KGR1a19odGhyZWFkICp0aHIsIGR1a19oc3RyaW5nICpr KSB7CisJLyogJ2snIG1heSBiZSB1bnJlYWNoYWJsZSBvbiBlbnRyeSBzbyBtdXN0IHB1c2ggd2l0 aG91dCBhbnkKKwkgKiBwb3RlbnRpYWwgZm9yIEdDLgorCSAqLworCWR1a19wdXNoX2hzdHJpbmco dGhyLCBrKTsKKwlkdWtfcHVzaF90cnVlKHRocik7CisJZHVrX3B1dF9wcm9wKHRociwgLTMpOwor fQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FkZF9lbnVtX2tleV9zdHJpZHgoZHVrX2h0aHJlYWQg KnRociwgZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHgpIHsKKwlkdWtfX2FkZF9lbnVtX2tleSh0aHIs IERVS19IVEhSRUFEX0dFVF9TVFJJTkcodGhyLCBzdHJpZHgpKTsKK30KKworRFVLX0lOVEVSTkFM IHZvaWQgZHVrX2hvYmplY3RfZW51bWVyYXRvcl9jcmVhdGUoZHVrX2h0aHJlYWQgKnRociwgZHVr X3NtYWxsX3VpbnRfdCBlbnVtX2ZsYWdzKSB7CisJZHVrX2hvYmplY3QgKmVudW1fdGFyZ2V0Owor CWR1a19ob2JqZWN0ICpjdXJyOworCWR1a19ob2JqZWN0ICpyZXM7CisjaWYgZGVmaW5lZChEVUtf VVNFX0VTNl9QUk9YWSkKKwlkdWtfaG9iamVjdCAqaF9wcm94eV90YXJnZXQ7CisJZHVrX2hvYmpl Y3QgKmhfcHJveHlfaGFuZGxlcjsKKwlkdWtfaG9iamVjdCAqaF90cmFwX3Jlc3VsdDsKKyNlbmRp ZgorCWR1a191aW50X2Zhc3QzMl90IGksIGxlbjsgIC8qIHVzZWQgZm9yIGFycmF5LCBzdGFjaywg YW5kIGVudHJ5IGluZGljZXMgKi8KKwlkdWtfdWludF9mYXN0MzJfdCBzb3J0X3N0YXJ0X2luZGV4 OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwllbnVtX3RhcmdldCA9IGR1a19yZXF1 aXJlX2hvYmplY3QodGhyLCAtMSk7CisJRFVLX0FTU0VSVChlbnVtX3RhcmdldCAhPSBOVUxMKTsK KworCWR1a19wdXNoX2JhcmVfb2JqZWN0KHRocik7CisJcmVzID0gZHVrX2tub3duX2hvYmplY3Qo dGhyLCAtMSk7CisKKwkvKiBbZW51bV90YXJnZXQgcmVzXSAqLworCisJLyogVGFyZ2V0IG11c3Qg YmUgc3RvcmVkIHNvIHRoYXQgd2UgY2FuIHJlY2hlY2sgd2hldGhlciBvciBub3QKKwkgKiBrZXlz IHN0aWxsIGV4aXN0IHdoZW4gd2UgZW51bWVyYXRlLiAgVGhpcyBpcyBub3QgZG9uZSBpZiB0aGUK KwkgKiBlbnVtZXJhdGlvbiByZXN1bHQgY29tZXMgZnJvbSBhIHByb3h5IHRyYXAgYXMgdGhlcmUg aXMgbm8KKwkgKiByZWFsIG9iamVjdCB0byBjaGVjayBhZ2FpbnN0LgorCSAqLworCWR1a19wdXNo X2hvYmplY3QodGhyLCBlbnVtX3RhcmdldCk7CisJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0 aHIsIC0yLCBEVUtfU1RSSURYX0lOVF9UQVJHRVQpOworCisJLyogSW5pdGlhbGl6ZSBpbmRleCBz byB0aGF0IHdlIHNraXAgaW50ZXJuYWwgY29udHJvbCBrZXlzLiAqLworCWR1a19wdXNoX2ludCh0 aHIsIERVS19fRU5VTV9TVEFSVF9JTkRFWCk7CisJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0 aHIsIC0yLCBEVUtfU1RSSURYX0lOVF9ORVhUKTsKKworCS8qCisJICogIFByb3h5IG9iamVjdCBo YW5kbGluZworCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKwlpZiAoRFVL X0xJS0VMWSgoZW51bV9mbGFncyAmIERVS19FTlVNX05PX1BST1hZX0JFSEFWSU9SKSAhPSAwKSkg eworCQlnb3RvIHNraXBfcHJveHk7CisJfQorCWlmIChEVUtfTElLRUxZKCFkdWtfaG9iamVjdF9w cm94eV9jaGVjayhlbnVtX3RhcmdldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmhfcHJveHlfdGFyZ2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmaF9wcm94eV9oYW5kbGVyKSkpIHsKKwkJZ290byBza2lwX3Byb3h5OworCX0K KworCS8qIFhYWDogc2hhcmUgY29kZSB3aXRoIE9iamVjdC5rZXlzKCkgUHJveHkgaGFuZGxpbmcg Ki8KKworCS8qIEluIEVTMjAxNSBmb3ItaW4gaW52b2tlZCB0aGUgImVudW1lcmF0ZSIgdHJhcDsg aW4gRVMyMDE2ICJlbnVtZXJhdGUiCisJICogaGFzIGJlZW4gb2Jzb2xldGVkIGFuZCAib3duS2V5 cyIgaXMgdXNlZCBpbnN0ZWFkLgorCSAqLworCURVS19EREQoRFVLX0RERFBSSU5UKCJwcm94eSBl bnVtZXJhdGlvbiIpKTsKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwgaF9wcm94eV9oYW5kbGVyKTsK KwlpZiAoIWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwgRFVLX1NUUklEWF9PV05f S0VZUykpIHsKKwkJLyogTm8gbmVlZCB0byByZXBsYWNlIHRoZSAnZW51bV90YXJnZXQnIHZhbHVl IGluIHN0YWNrLCBvbmx5IHRoZQorCQkgKiBlbnVtX3RhcmdldCByZWZlcmVuY2UuICBUaGlzIGFs c28gZW5zdXJlcyB0aGF0IHRoZSBvcmlnaW5hbAorCQkgKiBlbnVtIHRhcmdldCBpcyByZWFjaGFi bGUsIHdoaWNoIGtlZXBzIHRoZSBwcm94eSBhbmQgdGhlIHByb3h5CisJCSAqIHRhcmdldCByZWFj aGFibGUuICBXZSBkbyBuZWVkIHRvIHJlcGxhY2UgdGhlIGludGVybmFsIF9UYXJnZXQuCisJCSAq LworCQlEVUtfREREKERVS19ERERQUklOVCgibm8gb3duS2V5cyB0cmFwLCBlbnVtZXJhdGUgcHJv eHkgdGFyZ2V0IGluc3RlYWQiKSk7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJoX3Byb3h5X3Rh cmdldD0lIU8iLCAoZHVrX2hlYXBoZHIgKikgaF9wcm94eV90YXJnZXQpKTsKKwkJZW51bV90YXJn ZXQgPSBoX3Byb3h5X3RhcmdldDsKKworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgZW51bV90YXJn ZXQpOyAgLyogLT4gWyAuLi4gZW51bV90YXJnZXQgcmVzIGhhbmRsZXIgdW5kZWZpbmVkIHRhcmdl dCBdICovCisJCWR1a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtNCwgRFVLX1NUUklEWF9J TlRfVEFSR0VUKTsKKworCQlkdWtfcG9wXzIodGhyKTsgIC8qIC0+IFsgLi4uIGVudW1fdGFyZ2V0 IHJlcyBdICovCisJCWdvdG8gc2tpcF9wcm94eTsKKwl9CisKKwkvKiBbIC4uLiBlbnVtX3Rhcmdl dCByZXMgaGFuZGxlciB0cmFwIF0gKi8KKwlkdWtfaW5zZXJ0KHRociwgLTIpOworCWR1a19wdXNo X2hvYmplY3QodGhyLCBoX3Byb3h5X3RhcmdldCk7ICAgIC8qIC0+IFsgLi4uIGVudW1fdGFyZ2V0 IHJlcyB0cmFwIGhhbmRsZXIgdGFyZ2V0IF0gKi8KKwlkdWtfY2FsbF9tZXRob2QodGhyLCAxIC8q bmFyZ3MqLyk7ICAgICAgICAvKiAtPiBbIC4uLiBlbnVtX3RhcmdldCByZXMgdHJhcF9yZXN1bHQg XSAqLworCWhfdHJhcF9yZXN1bHQgPSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgLTEpOworCURV S19VTlJFRihoX3RyYXBfcmVzdWx0KTsKKworCWR1a19wcm94eV9vd25rZXlzX3Bvc3Rwcm9jZXNz KHRociwgaF9wcm94eV90YXJnZXQsIGVudW1fZmxhZ3MpOworCS8qIC0+IFsgLi4uIGVudW1fdGFy Z2V0IHJlcyB0cmFwX3Jlc3VsdCBrZXlzX2FycmF5IF0gKi8KKworCS8qIENvcHkgY2xlYW5lZCB1 cCB0cmFwIHJlc3VsdCBrZXlzIGludG8gdGhlIGVudW1lcmF0b3Igb2JqZWN0LiAqLworCS8qIFhY WDogcmVzdWx0IGlzIGEgZGVuc2UgYXJyYXk7IGNvdWxkIG1ha2UgdXNlIG9mIHRoYXQuICovCisJ RFVLX0FTU0VSVChkdWtfaXNfYXJyYXkodGhyLCAtMSkpOworCWxlbiA9IChkdWtfdWludF9mYXN0 MzJfdCkgZHVrX2dldF9sZW5ndGgodGhyLCAtMSk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KSB7CisJCSh2b2lkKSBkdWtfZ2V0X3Byb3BfaW5kZXgodGhyLCAtMSwgKGR1a191YXJyaWR4X3Qp IGkpOworCQlEVUtfQVNTRVJUKGR1a19pc19zdHJpbmcodGhyLCAtMSkpOyAgLyogcG9zdHByb2Nl c3MgY2xlYW5lZCB1cCAqLworCQkvKiBbIC4uLiBlbnVtX3RhcmdldCByZXMgdHJhcF9yZXN1bHQg a2V5c19hcnJheSB2YWwgXSAqLworCQlkdWtfcHVzaF90cnVlKHRocik7CisJCS8qIFsgLi4uIGVu dW1fdGFyZ2V0IHJlcyB0cmFwX3Jlc3VsdCBrZXlzX2FycmF5IHZhbCB0cnVlIF0gKi8KKwkJZHVr X3B1dF9wcm9wKHRociwgLTUpOworCX0KKwkvKiBbIC4uLiBlbnVtX3RhcmdldCByZXMgdHJhcF9y ZXN1bHQga2V5c19hcnJheSBdICovCisJZHVrX3BvcF8yKHRocik7CisJZHVrX3JlbW92ZV9tMih0 aHIpOworCisJLyogWyAuLi4gcmVzIF0gKi8KKworCS8qIFRoZSBpbnRlcm5hbCBfVGFyZ2V0IHBy b3BlcnR5IGlzIGtlcHQgcG9pbnRpbmcgdG8gdGhlIG9yaWdpbmFsCisJICogZW51bWVyYXRpb24g dGFyZ2V0ICh0aGUgcHJveHkgb2JqZWN0KSwgc28gdGhhdCB0aGUgZW51bWVyYXRvcgorCSAqICdu ZXh0JyBvcGVyYXRpb24gY2FuIHJlYWQgcHJvcGVydHkgdmFsdWVzIGlmIHNvIHJlcXVlc3RlZC4g IFRoZQorCSAqIGZhY3QgdGhhdCB0aGUgX1RhcmdldCBpcyBhIHByb3h5IGRpc2FibGVzIGtleSBl eGlzdGVuY2UgY2hlY2sKKwkgKiBkdXJpbmcgZW51bWVyYXRpb24uCisJICovCisJRFVLX0RERChE VUtfREREUFJJTlQoInByb3h5IGVudW1lcmF0aW9uLCBmaW5hbCByZXM6ICUhTyIsIChkdWtfaGVh cGhkciAqKSByZXMpKTsKKwlnb3RvIGNvbXBhY3RfYW5kX3JldHVybjsKKworIHNraXBfcHJveHk6 CisjZW5kaWYgIC8qIERVS19VU0VfRVM2X1BST1hZICovCisKKwljdXJyID0gZW51bV90YXJnZXQ7 CisJc29ydF9zdGFydF9pbmRleCA9IERVS19fRU5VTV9TVEFSVF9JTkRFWDsKKwlEVUtfQVNTRVJU KERVS19IT0JKRUNUX0dFVF9FTkVYVChyZXMpID09IERVS19fRU5VTV9TVEFSVF9JTkRFWCk7CisJ d2hpbGUgKGN1cnIpIHsKKwkJZHVrX3VpbnRfZmFzdDMyX3Qgc29ydF9lbmRfaW5kZXg7CisjaWYg IWRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwkJZHVrX2Jvb2xfdCBuZWVkX3NvcnQgPSAw OworI2VuZGlmCisKKwkJLyogRW51bWVyYXRpb24gcHJvY2VlZHMgYnkgaW5oZXJpdGFuY2UgbGV2 ZWwuICBWaXJ0dWFsCisJCSAqIHByb3BlcnRpZXMgbmVlZCB0byBiZSBoYW5kbGVkIHNwZWNpYWxs eSwgZm9sbG93ZWQgYnkKKwkJICogYXJyYXkgcGFydCwgYW5kIGZpbmFsbHkgZW50cnkgcGFydC4K KwkJICoKKwkJICogSWYgdGhlcmUgYXJlIGFycmF5IGluZGV4IGtleXMgaW4gdGhlIGVudHJ5IHBh cnQgb3IgYW55CisJCSAqIG90aGVyIHJpc2sgb2YgdGhlIEVTMjAxNSBbW093blByb3BlcnR5S2V5 c11dIG9yZGVyIGJlaW5nCisJCSAqIHZpb2xhdGVkLCBuZWVkX3NvcnQgaXMgc2V0IGFuZCBhbiBl eHBsaWNpdCBFUzIwMTUgc29ydCBpcworCQkgKiBkb25lIGZvciB0aGUgaW5oZXJpdGFuY2UgbGV2 ZWwuCisJCSAqLworCisJCS8qIFhYWDogaW5oZXJpdGluZyBmcm9tIHByb3h5ICovCisKKwkJLyoK KwkJICogIFZpcnR1YWwgcHJvcGVydGllcy4KKwkJICoKKwkJICogIFN0cmluZyBhbmQgYnVmZmVy IGluZGljZXMgYXJlIHZpcnR1YWwgYW5kIGFsd2F5cyBlbnVtZXJhYmxlLAorCQkgKiAgJ2xlbmd0 aCcgaXMgdmlydHVhbCBhbmQgbm9uLWVudW1lcmFibGUuICBBcnJheSBhbmQgYXJndW1lbnRzCisJ CSAqICBvYmplY3QgcHJvcHMgaGF2ZSBzcGVjaWFsIGJlaGF2aW9yIGJ1dCBhcmUgY29uY3JldGUu CisJCSAqCisJCSAqICBTdHJpbmcgYW5kIGJ1ZmZlciBvYmplY3RzIGRvbid0IGhhdmUgYW4gYXJy YXkgcGFydCBzbyBhcyBsb25nCisJCSAqICBhcyB2aXJ0dWFsIGFycmF5IGluZGV4IGtleXMgYXJl IGVudW1lcmF0ZWQgZmlyc3QsIHdlIGRvbid0CisJCSAqICBuZWVkIHRvIHNldCBuZWVkX3NvcnQu CisJCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorCQlp ZiAoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19TVFJJTkdPQkooY3VycikgfHwgRFVLX0hPQkpFQ1Rf SVNfQlVGT0JKKGN1cnIpKSB7CisjZWxzZQorCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19T VFJJTkdPQkooY3VycikpIHsKKyNlbmRpZgorCQkJZHVrX2Jvb2xfdCBoYXZlX2xlbmd0aCA9IDE7 CisKKwkJCS8qIFN0cmluZyBhbmQgYnVmZmVyIGVudW1lcmF0aW9uIGJlaGF2aW9yIGlzIGlkZW50 aWNhbCBub3csCisJCQkgKiBzbyB1c2Ugc2hhcmVkIGhhbmRsZXIuCisJCQkgKi8KKwkJCWlmIChE VUtfSE9CSkVDVF9IQVNfRVhPVElDX1NUUklOR09CSihjdXJyKSkgeworCQkJCWR1a19oc3RyaW5n ICpoX3ZhbDsKKwkJCQloX3ZhbCA9IGR1a19ob2JqZWN0X2dldF9pbnRlcm5hbF92YWx1ZV9zdHJp bmcodGhyLT5oZWFwLCBjdXJyKTsKKwkJCQlEVUtfQVNTRVJUKGhfdmFsICE9IE5VTEwpOyAgLyog c3RyaW5nIG9iamVjdHMgbXVzdCBub3QgY3JlYXRlZCB3aXRob3V0IGludGVybmFsIHZhbHVlICov CisJCQkJbGVuID0gKGR1a191aW50X2Zhc3QzMl90KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTiho X3ZhbCk7CisJCQl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQor CQkJZWxzZSB7CisJCQkJZHVrX2hidWZvYmogKmhfYnVmb2JqOworCQkJCURVS19BU1NFUlQoRFVL X0hPQkpFQ1RfSVNfQlVGT0JKKGN1cnIpKTsKKwkJCQloX2J1Zm9iaiA9IChkdWtfaGJ1Zm9iaiAq KSBjdXJyOworCisJCQkJaWYgKGhfYnVmb2JqID09IE5VTEwgfHwgIWhfYnVmb2JqLT5pc190eXBl ZGFycmF5KSB7CisJCQkJCS8qIFplcm8gbGVuZ3RoIHNlZW1zIGxpa2UgYSBnb29kIGJlaGF2aW9y IGZvciBuZXV0ZXJlZCBidWZmZXJzLgorCQkJCQkgKiBBcnJheUJ1ZmZlciAobm9uLXZpZXcpIGFu ZCBEYXRhVmlldyBkb24ndCBoYXZlIGluZGV4IHByb3BlcnRpZXMKKwkJCQkJICogb3IgLmxlbmd0 aCBwcm9wZXJ0eS4KKwkJCQkJICovCisJCQkJCWxlbiA9IDA7CisJCQkJCWhhdmVfbGVuZ3RoID0g MDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaGVyZSdzIGludGVudGlvbmFsbHkgbm8gY2hlY2sg Zm9yCisJCQkJCSAqIGN1cnJlbnQgdW5kZXJseWluZyBidWZmZXIgbGVuZ3RoLgorCQkJCQkgKi8K KwkJCQkJbGVuID0gKGR1a191aW50X2Zhc3QzMl90KSAoaF9idWZvYmotPmxlbmd0aCA+PiBoX2J1 Zm9iai0+c2hpZnQpOworCQkJCX0KKwkJCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpF Q1RfU1VQUE9SVCAqLworCisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCQlkdWtf aHN0cmluZyAqazsKKworCQkJCS8qIFRoaXMgaXMgYSBiaXQgZnJhZ2lsZTogdGhlIHN0cmluZyBp cyBub3QKKwkJCQkgKiByZWFjaGFibGUgdW50aWwgaXQgaXMgcHVzaGVkIGJ5IHRoZSBoZWxwZXIu CisJCQkJICovCisJCQkJayA9IGR1a19oZWFwX3N0cnRhYmxlX2ludGVybl91MzJfY2hlY2tlZCh0 aHIsIChkdWtfdWludDMyX3QpIGkpOworCQkJCURVS19BU1NFUlQoayk7CisKKwkJCQlkdWtfX2Fk ZF9lbnVtX2tleSh0aHIsIGspOworCisJCQkJLyogW2VudW1fdGFyZ2V0IHJlc10gKi8KKwkJCX0K KworCQkJLyogJ2xlbmd0aCcgYW5kIG90aGVyIHZpcnR1YWwgcHJvcGVydGllcyBhcmUgbm90CisJ CQkgKiBlbnVtZXJhYmxlLCBidXQgYXJlIGluY2x1ZGVkIGlmIG5vbi1lbnVtZXJhYmxlCisJCQkg KiBwcm9wZXJ0aWVzIGFyZSByZXF1ZXN0ZWQuCisJCQkgKi8KKworCQkJaWYgKGhhdmVfbGVuZ3Ro ICYmIChlbnVtX2ZsYWdzICYgRFVLX0VOVU1fSU5DTFVERV9OT05FTlVNRVJBQkxFKSkgeworCQkJ CWR1a19fYWRkX2VudW1fa2V5X3N0cmlkeCh0aHIsIERVS19TVFJJRFhfTEVOR1RIKTsKKwkJCX0K KwkJfQorCisJCS8qCisJCSAqICBBcnJheSBwYXJ0CisJCSAqLworCisJCWZvciAoaSA9IDA7IGkg PCAoZHVrX3VpbnRfZmFzdDMyX3QpIERVS19IT0JKRUNUX0dFVF9BU0laRShjdXJyKTsgaSsrKSB7 CisJCQlkdWtfaHN0cmluZyAqazsKKwkJCWR1a190dmFsICp0djsKKworCQkJdHYgPSBEVUtfSE9C SkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCBjdXJyLCBpKTsKKwkJCWlmIChEVUtfVFZB TF9JU19VTlVTRUQodHYpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlrID0gZHVrX2hlYXBf c3RydGFibGVfaW50ZXJuX3UzMl9jaGVja2VkKHRociwgKGR1a191aW50MzJfdCkgaSk7ICAvKiBG cmFnaWxlIHJlYWNoYWJpbGl0eS4gKi8KKwkJCURVS19BU1NFUlQoayk7CisKKwkJCWR1a19fYWRk X2VudW1fa2V5KHRociwgayk7CisKKwkJCS8qIFtlbnVtX3RhcmdldCByZXNdICovCisJCX0KKwor CQlpZiAoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19BUlJBWShjdXJyKSkgeworCQkJLyogQXJyYXkg Lmxlbmd0aCBjb21lcyBhZnRlciBudW1lcmljIGluZGljZXMuICovCisJCQlpZiAoZW51bV9mbGFn cyAmIERVS19FTlVNX0lOQ0xVREVfTk9ORU5VTUVSQUJMRSkgeworCQkJCWR1a19fYWRkX2VudW1f a2V5X3N0cmlkeCh0aHIsIERVS19TVFJJRFhfTEVOR1RIKTsKKwkJCX0KKwkJfQorCisJCS8qCisJ CSAqICBFbnRyaWVzIHBhcnQKKwkJICovCisKKwkJZm9yIChpID0gMDsgaSA8IChkdWtfdWludF9m YXN0MzJfdCkgRFVLX0hPQkpFQ1RfR0VUX0VORVhUKGN1cnIpOyBpKyspIHsKKwkJCWR1a19oc3Ry aW5nICprOworCisJCQlrID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKHRoci0+aGVhcCwgY3Vyciwg aSk7CisJCQlpZiAoIWspIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghKGVudW1fZmxh Z3MgJiBEVUtfRU5VTV9JTkNMVURFX05PTkVOVU1FUkFCTEUpICYmCisJCQkgICAgIURVS19IT0JK RUNUX0VfU0xPVF9JU19FTlVNRVJBQkxFKHRoci0+aGVhcCwgY3VyciwgaSkpIHsKKwkJCQljb250 aW51ZTsKKwkJCX0KKwkJCWlmIChEVUtfVU5MSUtFTFkoRFVLX0hTVFJJTkdfSEFTX1NZTUJPTChr KSkpIHsKKwkJCQlpZiAoIShlbnVtX2ZsYWdzICYgRFVLX0VOVU1fSU5DTFVERV9ISURERU4pICYm CisJCQkJICAgIERVS19IU1RSSU5HX0hBU19ISURERU4oaykpIHsKKwkJCQkJY29udGludWU7CisJ CQkJfQorCQkJCWlmICghKGVudW1fZmxhZ3MgJiBEVUtfRU5VTV9JTkNMVURFX1NZTUJPTFMpKSB7 CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpF KQorCQkJCW5lZWRfc29ydCA9IDE7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJCQkJRFVLX0FTU0VS VCghRFVLX0hTVFJJTkdfSEFTX0hJRERFTihrKSk7ICAvKiB3b3VsZCBhbHNvIGhhdmUgc3ltYm9s IGZsYWcgKi8KKwkJCQlpZiAoZW51bV9mbGFncyAmIERVS19FTlVNX0VYQ0xVREVfU1RSSU5HUykg eworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoRFVLX0hTVFJJTkdfSEFTX0FS UklEWChrKSkgeworCQkJCS8qIFRoaXMgaW4gY3VycmVudGx5IG9ubHkgcG9zc2libGUgaWYgdGhl CisJCQkJICogb2JqZWN0IGhhcyBubyBhcnJheSBwYXJ0OiB0aGUgYXJyYXkgcGFydAorCQkJCSAq IGlzIGV4aGF1c3RpdmUgd2hlbiBpdCBpcyBwcmVzZW50LgorCQkJCSAqLworI2lmICFkZWZpbmVk KERVS19VU0VfUFJFRkVSX1NJWkUpCisJCQkJbmVlZF9zb3J0ID0gMTsKKyNlbmRpZgorCQkJfSBl bHNlIHsKKwkJCQlpZiAoZW51bV9mbGFncyAmIERVS19FTlVNX0FSUkFZX0lORElDRVNfT05MWSkg eworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCURVS19BU1NFUlQoRFVLX0hPQkpF Q1RfRV9TTE9UX0lTX0FDQ0VTU09SKHRoci0+aGVhcCwgY3VyciwgaSkgfHwKKwkJCSAgICAgICAg ICAgIURVS19UVkFMX0lTX1VOVVNFRCgmRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfUFRSKHRoci0+ aGVhcCwgY3VyciwgaSktPnYpKTsKKworCQkJZHVrX19hZGRfZW51bV9rZXkodGhyLCBrKTsKKwor CQkJLyogW2VudW1fdGFyZ2V0IHJlc10gKi8KKwkJfQorCisJCS8qIFNvcnQgZW51bWVyYXRlZCBr ZXlzIGFjY29yZGluZyB0byBFUzIwMTUgcmVxdWlyZW1lbnRzIGZvcgorCQkgKiB0aGUgImluaGVy aXRhbmNlIGxldmVsIiBqdXN0IHByb2Nlc3NlZC4gIFRoaXMgaXMgZmFyIGZyb20KKwkJICogb3B0 aW1hbCwgRVMyMDE1IHNlbWFudGljcyBjb3VsZCBiZSBhY2hpZXZlZCBtb3JlIGVmZmljaWVudGx5 CisJCSAqIGJ5IGhhbmRsaW5nIGFycmF5IGluZGV4IHN0cmluZyBrZXlzIChhbmQgc3ltYm9sIGtl eXMpCisJCSAqIHNwZWNpYWxseSBhYm92ZSBpbiBlZmZlY3QgZG9pbmcgdGhlIHNvcnQgaW5saW5l LgorCQkgKgorCQkgKiBTa2lwIHRoZSBzb3J0IGlmIGFycmF5IGluZGV4IHNvcnRpbmcgaXMgcmVx dWVzdGVkIGJlY2F1c2UKKwkJICogd2UgbXVzdCBjb25zaWRlciBhbGwga2V5cywgYWxzbyBpbmhl cml0ZWQsIHNvIGFuIGV4cGxpY2l0CisJCSAqIHNvcnQgaXMgZG9uZSBmb3IgdGhlIHdob2xlIHJl c3VsdCBhZnRlciB3ZSdyZSBkb25lIHdpdGggdGhlCisJCSAqIHByb3RvdHlwZSBjaGFpbi4KKwkJ ICoKKwkJICogQWxzbyBza2lwIHRoZSBzb3J0IGlmIG5lZWRfc29ydCA9PSAwLCBpLmUuIHdlIGtu b3cgZm9yCisJCSAqIGNlcnRhaW4gdGhhdCB0aGUgZW51bWVyYXRlZCBvcmRlciBpcyBhbHJlYWR5 IGNvcnJlY3QuCisJCSAqLworCQlzb3J0X2VuZF9pbmRleCA9IERVS19IT0JKRUNUX0dFVF9FTkVY VChyZXMpOworCisJCWlmICghKGVudW1fZmxhZ3MgJiBEVUtfRU5VTV9TT1JUX0FSUkFZX0lORElD RVMpKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCQkJZHVrX19zb3J0X2Vu dW1fa2V5c19lczYodGhyLCByZXMsIChkdWtfaW50X2Zhc3QzMl90KSBzb3J0X3N0YXJ0X2luZGV4 LCAoZHVrX2ludF9mYXN0MzJfdCkgc29ydF9lbmRfaW5kZXgpOworI2Vsc2UKKwkJCWlmIChuZWVk X3NvcnQpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgibmVlZCB0byBzb3J0IikpOworCQkJ CWR1a19fc29ydF9lbnVtX2tleXNfZXM2KHRociwgcmVzLCAoZHVrX2ludF9mYXN0MzJfdCkgc29y dF9zdGFydF9pbmRleCwgKGR1a19pbnRfZmFzdDMyX3QpIHNvcnRfZW5kX2luZGV4KTsKKwkJCX0g ZWxzZSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm5vIG5lZWQgdG8gc29ydCIpKTsKKwkJ CX0KKyNlbmRpZgorCQl9CisKKwkJc29ydF9zdGFydF9pbmRleCA9IHNvcnRfZW5kX2luZGV4Owor CisJCWlmIChlbnVtX2ZsYWdzICYgRFVLX0VOVU1fT1dOX1BST1BFUlRJRVNfT05MWSkgeworCQkJ YnJlYWs7CisJCX0KKworCQljdXJyID0gRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhl YXAsIGN1cnIpOworCX0KKworCS8qIFtlbnVtX3RhcmdldCByZXNdICovCisKKwlkdWtfcmVtb3Zl X20yKHRocik7CisKKwkvKiBbcmVzXSAqLworCisJaWYgKGVudW1fZmxhZ3MgJiBEVUtfRU5VTV9T T1JUX0FSUkFZX0lORElDRVMpIHsKKwkJLyogU29tZSBFNS9FNS4xIGFsZ29yaXRobXMgcmVxdWly ZSB0aGF0IGFycmF5IGluZGljZXMgYXJlIGl0ZXJhdGVkCisJCSAqIGluIGEgc3RyaWN0bHkgYXNj ZW5kaW5nIG9yZGVyLiAgVGhpcyBpcyB0aGUgY2FzZSBmb3IgZS5nLgorCQkgKiBBcnJheS5wcm90 b3R5cGUuZm9yRWFjaCgpIGFuZCBKU09OLnN0cmluZ2lmeSgpIFByb3BlcnR5TGlzdAorCQkgKiBo YW5kbGluZy4gIFRoZSBjYWxsZXIgY2FuIHJlcXVlc3QgYW4gZXhwbGljaXQgc29ydCBpbiB0aGVz ZQorCQkgKiBjYXNlcy4KKwkJICovCisKKwkJLyogU29ydCB0byBFUzIwMTUgb3JkZXIgd2hpY2gg d29ya3MgZm9yIHB1cmUgYXJyYXkgaW5jaWRlcyBidXQKKwkJICogYWxzbyBmb3IgbWl4ZWQga2V5 cy4KKwkJICovCisJCWR1a19fc29ydF9lbnVtX2tleXNfZXM2KHRociwgcmVzLCAoZHVrX2ludF9m YXN0MzJfdCkgRFVLX19FTlVNX1NUQVJUX0lOREVYLCAoZHVrX2ludF9mYXN0MzJfdCkgRFVLX0hP QkpFQ1RfR0VUX0VORVhUKHJlcykpOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJP WFkpCisgY29tcGFjdF9hbmRfcmV0dXJuOgorI2VuZGlmCisJLyogY29tcGFjdDsgbm8gbmVlZCB0 byBzZWFsIGJlY2F1c2Ugb2JqZWN0IGlzIGludGVybmFsICovCisJZHVrX2hvYmplY3RfY29tcGFj dF9wcm9wcyh0aHIsIHJlcyk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiY3JlYXRlZCBlbnVt ZXJhdG9yIG9iamVjdDogJSFpVCIsIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkp KTsKK30KKworLyoKKyAqICBSZXR1cm5zIG5vbi16ZXJvIGlmIGEga2V5IGFuZC9vciB2YWx1ZSB3 YXMgZW51bWVyYXRlZCwgYW5kOgorICoKKyAqICAgW2VudW1dIC0+IFtrZXldICAgICAgICAoZ2V0 X3ZhbHVlID09IDApCisgKiAgIFtlbnVtXSAtPiBba2V5IHZhbHVlXSAgKGdldF92YWx1ZSA9PSAx KQorICoKKyAqICBSZXR1cm5zIHplcm8gd2l0aG91dCBwdXNoaW5nIGFueXRoaW5nIG9uIHRoZSBz dGFjayBvdGhlcndpc2UuCisgKi8KK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0 X2VudW1lcmF0b3JfbmV4dChkdWtfaHRocmVhZCAqdGhyLCBkdWtfYm9vbF90IGdldF92YWx1ZSkg eworCWR1a19ob2JqZWN0ICplOworCWR1a19ob2JqZWN0ICplbnVtX3RhcmdldDsKKwlkdWtfaHN0 cmluZyAqcmVzID0gTlVMTDsKKwlkdWtfdWludF9mYXN0MzJfdCBpZHg7CisJZHVrX2Jvb2xfdCBj aGVja19leGlzdGVuY2U7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKworCS8qIFsuLi4g ZW51bV0gKi8KKworCWUgPSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgLTEpOworCisJLyogWFhY IHVzZSBnZXQgdHZhbCBwdHIsIG1vcmUgZWZmaWNpZW50ICovCisJZHVrX2dldF9wcm9wX3N0cmlk eF9zaG9ydCh0aHIsIC0xLCBEVUtfU1RSSURYX0lOVF9ORVhUKTsKKwlpZHggPSAoZHVrX3VpbnRf ZmFzdDMyX3QpIGR1a19yZXF1aXJlX3VpbnQodGhyLCAtMSk7CisJZHVrX3BvcCh0aHIpOworCURV S19EREQoRFVLX0RERFBSSU5UKCJlbnVtZXJhdGlvbjogaW5kZXggaXM6ICVsZCIsIChsb25nKSBp ZHgpKTsKKworCS8qIEVudW1lcmF0aW9uIGtleXMgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgZW51 bWVyYXRpb24gdGFyZ2V0ICh0byBzZWUKKwkgKiB0aGF0IHRoZXkgc3RpbGwgZXhpc3QpLiAgSW4g dGhlIHByb3h5IGVudW1lcmF0aW9uIGNhc2UgX1RhcmdldCB3aWxsCisJICogYmUgdGhlIHByb3h5 LCBhbmQgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZSBhZ2FpbnN0IHRoZSBwcm94eSBpcyBub3QKKwkg KiByZXF1aXJlZCAob3Igc2Vuc2libGUsIGFzIHRoZSBrZXlzIG1heSBiZSBmdWxseSB2aXJ0dWFs KS4KKwkgKi8KKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTEsIERVS19TVFJJRFhf SU5UX1RBUkdFVCk7CisJZW51bV90YXJnZXQgPSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgLTEp OworCURVS19BU1NFUlQoZW51bV90YXJnZXQgIT0gTlVMTCk7CisjaWYgZGVmaW5lZChEVUtfVVNF X0VTNl9QUk9YWSkKKwljaGVja19leGlzdGVuY2UgPSAoIURVS19IT0JKRUNUX0lTX1BST1hZKGVu dW1fdGFyZ2V0KSk7CisjZWxzZQorCWNoZWNrX2V4aXN0ZW5jZSA9IDE7CisjZW5kaWYKKwlkdWtf cG9wKHRocik7ICAvKiBzdGlsbCByZWFjaGFibGUgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5U KCJnZXR0aW5nIG5leHQgZW51bSB2YWx1ZSwgZW51bV90YXJnZXQ9JSFpTywgZW51bWVyYXRvcj0l IWlUIiwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgZW51bV90YXJnZXQs IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCS8qIG5vIGFycmF5IHBh cnQgKi8KKwlmb3IgKDs7KSB7CisJCWR1a19oc3RyaW5nICprOworCisJCWlmIChpZHggPj0gRFVL X0hPQkpFQ1RfR0VUX0VORVhUKGUpKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiZW51bWVy YXRpb246IHJhbiBvdXQgb2YgZWxlbWVudHMiKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHdl IGtub3cgdGhlc2UgYmVjYXVzZSBlbnVtIG9iamVjdHMgYXJlIGludGVybmFsbHkgY3JlYXRlZCAq LworCQlrID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKHRoci0+aGVhcCwgZSwgaWR4KTsKKwkJRFVL X0FTU0VSVChrICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9FX1NMT1RfSVNf QUNDRVNTT1IodGhyLT5oZWFwLCBlLCBpZHgpKTsKKwkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNf VU5VU0VEKCZEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRSh0aHItPmhlYXAsIGUsIGlkeCkudikpOwor CisJCWlkeCsrOworCisJCS8qIHJlY2hlY2sgdGhhdCB0aGUgcHJvcGVydHkgc3RpbGwgZXhpc3Rz ICovCisJCWlmIChjaGVja19leGlzdGVuY2UgJiYgIWR1a19ob2JqZWN0X2hhc3Byb3BfcmF3KHRo ciwgZW51bV90YXJnZXQsIGspKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgicHJvcGVydHkg ZGVsZXRlZCBkdXJpbmcgZW51bWVyYXRpb24sIHNraXAiKSk7CisJCQljb250aW51ZTsKKwkJfQor CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJlbnVtZXJhdGlvbjogZm91bmQgZWxlbWVudCwga2V5 OiAlIU8iLCAoZHVrX2hlYXBoZHIgKikgaykpOworCQlyZXMgPSBrOworCQlicmVhazsKKwl9CisK KwlEVUtfREREKERVS19ERERQUklOVCgiZW51bWVyYXRpb246IHVwZGF0aW5nIG5leHQgaW5kZXgg dG8gJWxkIiwgKGxvbmcpIGlkeCkpOworCisJZHVrX3B1c2hfdTMyKHRociwgKGR1a191aW50MzJf dCkgaWR4KTsKKwlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhf SU5UX05FWFQpOworCisJLyogWy4uLiBlbnVtXSAqLworCisJaWYgKHJlcykgeworCQlkdWtfcHVz aF9oc3RyaW5nKHRociwgcmVzKTsKKwkJaWYgKGdldF92YWx1ZSkgeworCQkJZHVrX3B1c2hfaG9i amVjdCh0aHIsIGVudW1fdGFyZ2V0KTsKKwkJCWR1a19kdXBfbTIodGhyKTsgICAgICAgLyogLT4g Wy4uLiBlbnVtIGtleSBlbnVtX3RhcmdldCBrZXldICovCisJCQlkdWtfZ2V0X3Byb3AodGhyLCAt Mik7IC8qIC0+IFsuLi4gZW51bSBrZXkgZW51bV90YXJnZXQgdmFsXSAqLworCQkJZHVrX3JlbW92 ZV9tMih0aHIpOyAgICAvKiAtPiBbLi4uIGVudW0ga2V5IHZhbF0gKi8KKwkJCWR1a19yZW1vdmUo dGhyLCAtMyk7ICAgLyogLT4gWy4uLiBrZXkgdmFsXSAqLworCQl9IGVsc2UgeworCQkJZHVrX3Jl bW92ZV9tMih0aHIpOyAgICAvKiAtPiBbLi4uIGtleV0gKi8KKwkJfQorCQlyZXR1cm4gMTsKKwl9 IGVsc2UgeworCQlkdWtfcG9wKHRocik7ICAvKiAtPiBbLi4uXSAqLworCQlyZXR1cm4gMDsKKwl9 Cit9CisKKy8qCisgKiAgR2V0IGVudW1lcmF0ZWQga2V5cyBpbiBhbiBFQ01BU2NyaXB0IGFycmF5 LiAgTWF0Y2hlcyBPYmplY3Qua2V5cygpIGJlaGF2aW9yCisgKiAgZGVzY3JpYmVkIGluIEU1IFNl Y3Rpb24gMTUuMi4zLjE0LgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfcmV0X3QgZHVrX2hvYmpl Y3RfZ2V0X2VudW1lcmF0ZWRfa2V5cyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21hbGxfdWludF90 IGVudW1fZmxhZ3MpIHsKKwlkdWtfaG9iamVjdCAqZTsKKwlkdWtfaHN0cmluZyAqKmtleXM7CisJ ZHVrX3R2YWwgKnR2OworCWR1a191aW50X2Zhc3QzMl90IGNvdW50OworCisJRFVLX0FTU0VSVCh0 aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChkdWtfZ2V0X2hvYmplY3QodGhyLCAtMSkgIT0gTlVM TCk7CisKKwkvKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZW51bWVyYXRvciB0byBnZXQgdGhlIChub24t ZHVwbGljYXRlZCkga2V5IGxpc3Q7CisJICogdGhlIGVudW1lcmF0b3Igc3RhdGUgaXMgaW5pdGlh bGl6ZWQgd2l0aG91dCBiZWluZyBuZWVkZWQsIGJ1dCB0aGF0CisJICogaGFzIGxpdHRsZSBpbXBh Y3QuCisJICovCisKKwlkdWtfaG9iamVjdF9lbnVtZXJhdG9yX2NyZWF0ZSh0aHIsIGVudW1fZmxh Z3MpOworCWUgPSBkdWtfa25vd25faG9iamVjdCh0aHIsIC0xKTsKKworCS8qIFtlbnVtX3Rhcmdl dCBlbnVtIHJlc10gKi8KKworCS8qIENyZWF0ZSBkZW5zZSByZXN1bHQgYXJyYXkgdG8gZXhhY3Qg c2l6ZS4gKi8KKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9FTkVYVChlKSA+PSBEVUtfX0VO VU1fU1RBUlRfSU5ERVgpOworCWNvdW50ID0gKGR1a191aW50MzJfdCkgKERVS19IT0JKRUNUX0dF VF9FTkVYVChlKSAtIERVS19fRU5VTV9TVEFSVF9JTkRFWCk7CisKKwkvKiBYWFg6IHVuaW5pdCB3 b3VsZCBiZSBPSyAqLworCXR2ID0gZHVrX3B1c2hfaGFycmF5X3dpdGhfc2l6ZV9vdXRwdHIodGhy LCAoZHVrX3VpbnQzMl90KSBjb3VudCk7CisJRFVLX0FTU0VSVChjb3VudCA9PSAwIHx8IHR2ICE9 IE5VTEwpOworCisJLyogRmlsbCByZXN1bHQgYXJyYXksIG5vIHNpZGUgZWZmZWN0cy4gKi8KKwor CWtleXMgPSBEVUtfSE9CSkVDVF9FX0dFVF9LRVlfQkFTRSh0aHItPmhlYXAsIGUpOworCWtleXMg Kz0gRFVLX19FTlVNX1NUQVJUX0lOREVYOworCisJd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJCWR1 a19oc3RyaW5nICprOworCisJCWsgPSAqa2V5cysrOworCQlEVUtfQVNTRVJUKGsgIT0gTlVMTCk7 ICAvKiBlbnVtZXJhdG9yIG11c3QgaGF2ZSBubyBrZXlzIGRlbGV0ZWQgKi8KKworCQlEVUtfVFZB TF9TRVRfU1RSSU5HKHR2LCBrKTsKKwkJdHYrKzsKKwkJRFVLX0hTVFJJTkdfSU5DUkVGKHRociwg ayk7CisJfQorCisJLyogW2VudW1fdGFyZ2V0IGVudW0gcmVzXSAqLworCWR1a19yZW1vdmVfbTIo dGhyKTsKKworCS8qIFtlbnVtX3RhcmdldCByZXNdICovCisKKwlyZXR1cm4gMTsgIC8qIHJldHVy biAxIHRvIGFsbG93IGNhbGxlcnMgdG8gdGFpbCBjYWxsICovCit9CisKKy8qIGF1dG9tYXRpYyB1 bmRlZnMgKi8KKyN1bmRlZiBEVUtfX0VOVU1fU1RBUlRfSU5ERVgKKy8qCisgKiAgTWlzYyBzdXBw b3J0IGZ1bmN0aW9ucworICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVh ZHkgaW5jbHVkZWQgKi8KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2hvYmplY3RfcHJv dG90eXBlX2NoYWluX2NvbnRhaW5zKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpoLCBk dWtfaG9iamVjdCAqcCwgZHVrX2Jvb2xfdCBpZ25vcmVfbG9vcCkgeworCWR1a191aW50X3Qgc2Fu aXR5OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisKKwkvKiBGYWxzZSBpZiB0aGUgb2Jq ZWN0IGlzIE5VTEwgb3IgdGhlIHByb3RvdHlwZSAncCcgaXMgTlVMTC4KKwkgKiBJbiBwYXJ0aWN1 bGFyLCBmYWxzZSBpZiBib3RoIGFyZSBOVUxMIChkb24ndCBjb21wYXJlIGVxdWFsKS4KKwkgKi8K KwlpZiAoaCA9PSBOVUxMIHx8IHAgPT0gTlVMTCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlzYW5p dHkgPSBEVUtfSE9CSkVDVF9QUk9UT1RZUEVfQ0hBSU5fU0FOSVRZOworCWRvIHsKKwkJaWYgKGgg PT0gcCkgeworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAoc2FuaXR5LS0gPT0gMCkgeworCQkJ aWYgKGlnbm9yZV9sb29wKSB7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCURVS19FUlJP Ul9SQU5HRSh0aHIsIERVS19TVFJfUFJPVE9UWVBFX0NIQUlOX0xJTUlUKTsKKwkJCQlEVUtfV09f Tk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJCX0KKwkJfQorCQloID0gRFVLX0hPQkpFQ1RfR0VUX1BS T1RPVFlQRSh0aHItPmhlYXAsIGgpOworCX0gd2hpbGUgKGgpOworCisJcmV0dXJuIDA7Cit9CisK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19ob2JqZWN0X3NldF9wcm90b3R5cGVfdXBkcmVmKGR1a19o dGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpoLCBkdWtfaG9iamVjdCAqcCkgeworI2lmIGRlZmlu ZWQoRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcpCisJZHVrX2hvYmplY3QgKnRtcDsKKworCURV S19BU1NFUlQoaCk7CisJdG1wID0gRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAs IGgpOworCURVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCBoLCBwKTsKKwlEVUtf SE9CSkVDVF9JTkNSRUZfQUxMT1dOVUxMKHRociwgcCk7ICAvKiBhdm9pZCBwcm9ibGVtcyBpZiBw ID09IGgtPnByb3RvdHlwZSAqLworCURVS19IT0JKRUNUX0RFQ1JFRl9BTExPV05VTEwodGhyLCB0 bXApOworI2Vsc2UKKwlEVUtfQVNTRVJUKGgpOworCURVS19VTlJFRih0aHIpOworCURVS19IT0JK RUNUX1NFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCBoLCBwKTsKKyNlbmRpZgorfQorLyoKKyAqICBI ZWxwZXJzIGZvciBjcmVhdGluZyBhbmQgcXVlcnlpbmcgcGMybGluZSBkZWJ1ZyBkYXRhLCB3aGlj aAorICogIGNvbnZlcnRzIGEgYnl0ZWNvZGUgcHJvZ3JhbSBjb3VudGVyIHRvIGEgc291cmNlIGxp bmUgbnVtYmVyLgorICoKKyAqICBUaGUgcnVuLXRpbWUgcGMybGluZSBkYXRhIGlzIGJpdC1wYWNr ZWQsIGFuZCBkb2N1bWVudGVkIGluOgorICoKKyAqICAgIGRvYy9mdW5jdGlvbi1vYmplY3RzLnJz dAorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9QQzJMSU5FKQorCisvKiBHZW5lcmF0ZSBwYzJsaW5l IGRhdGEgZm9yIGFuIGluc3RydWN0aW9uIHNlcXVlbmNlLCBsZWF2aW5nIGEgYnVmZmVyIG9uIHN0 YWNrIHRvcC4gKi8KK0RVS19JTlRFUk5BTCB2b2lkIGR1a19ob2JqZWN0X3BjMmxpbmVfcGFjayhk dWtfaHRocmVhZCAqdGhyLCBkdWtfY29tcGlsZXJfaW5zdHIgKmluc3RycywgZHVrX3VpbnRfZmFz dDMyX3QgbGVuZ3RoKSB7CisJZHVrX2hidWZmZXJfZHluYW1pYyAqaF9idWY7CisJZHVrX2JpdGVu Y29kZXJfY3R4IGJlX2N0eF9hbGxvYzsKKwlkdWtfYml0ZW5jb2Rlcl9jdHggKmJlX2N0eCA9ICZi ZV9jdHhfYWxsb2M7CisJZHVrX3VpbnQzMl90ICpoZHI7CisJZHVrX3NpemVfdCBuZXdfc2l6ZTsK KwlkdWtfdWludF9mYXN0MzJfdCBudW1faGVhZGVyX2VudHJpZXM7CisJZHVrX3VpbnRfZmFzdDMy X3QgY3Vycl9vZmZzZXQ7CisJZHVrX2ludF9mYXN0MzJfdCBjdXJyX2xpbmUsIG5leHRfbGluZSwg ZGlmZl9saW5lOworCWR1a191aW50X2Zhc3QzMl90IGN1cnJfcGM7CisJZHVrX3VpbnRfZmFzdDMy X3QgaGRyX2luZGV4OworCisJRFVLX0FTU0VSVChsZW5ndGggPD0gRFVLX0NPTVBJTEVSX01BWF9C WVRFQ09ERV9MRU5HVEgpOworCisJbnVtX2hlYWRlcl9lbnRyaWVzID0gKGxlbmd0aCArIERVS19Q QzJMSU5FX1NLSVAgLSAxKSAvIERVS19QQzJMSU5FX1NLSVA7CisJY3Vycl9vZmZzZXQgPSAoZHVr X3VpbnRfZmFzdDMyX3QpIChzaXplb2YoZHVrX3VpbnQzMl90KSArIG51bV9oZWFkZXJfZW50cmll cyAqIHNpemVvZihkdWtfdWludDMyX3QpICogMik7CisKKwlkdWtfcHVzaF9keW5hbWljX2J1ZmZl cih0aHIsIChkdWtfc2l6ZV90KSBjdXJyX29mZnNldCk7CisJaF9idWYgPSAoZHVrX2hidWZmZXJf ZHluYW1pYyAqKSBkdWtfa25vd25faGJ1ZmZlcih0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKERVS19I QlVGRkVSX0hBU19EWU5BTUlDKGhfYnVmKSAmJiAhRFVLX0hCVUZGRVJfSEFTX0VYVEVSTkFMKGhf YnVmKSk7CisKKwloZHIgPSAoZHVrX3VpbnQzMl90ICopIERVS19IQlVGRkVSX0RZTkFNSUNfR0VU X0RBVEFfUFRSKHRoci0+aGVhcCwgaF9idWYpOworCURVS19BU1NFUlQoaGRyICE9IE5VTEwpOwor CWhkclswXSA9IChkdWtfdWludDMyX3QpIGxlbmd0aDsgIC8qIHZhbGlkIHBjIHJhbmdlIGlzIFsw LCBsZW5ndGhbICovCisKKwljdXJyX3BjID0gMFU7CisJd2hpbGUgKGN1cnJfcGMgPCBsZW5ndGgp IHsKKwkJbmV3X3NpemUgPSAoZHVrX3NpemVfdCkgKGN1cnJfb2Zmc2V0ICsgRFVLX1BDMkxJTkVf TUFYX0RJRkZfTEVOR1RIKTsKKwkJZHVrX2hidWZmZXJfcmVzaXplKHRociwgaF9idWYsIG5ld19z aXplKTsKKworCQloZHIgPSAoZHVrX3VpbnQzMl90ICopIERVS19IQlVGRkVSX0RZTkFNSUNfR0VU X0RBVEFfUFRSKHRoci0+aGVhcCwgaF9idWYpOworCQlEVUtfQVNTRVJUKGhkciAhPSBOVUxMKTsK KwkJRFVLX0FTU0VSVChjdXJyX3BjIDwgbGVuZ3RoKTsKKwkJaGRyX2luZGV4ID0gMSArIChjdXJy X3BjIC8gRFVLX1BDMkxJTkVfU0tJUCkgKiAyOworCQljdXJyX2xpbmUgPSAoZHVrX2ludF9mYXN0 MzJfdCkgaW5zdHJzW2N1cnJfcGNdLmxpbmU7CisJCWhkcltoZHJfaW5kZXggKyAwXSA9IChkdWtf dWludDMyX3QpIGN1cnJfbGluZTsKKwkJaGRyW2hkcl9pbmRleCArIDFdID0gKGR1a191aW50MzJf dCkgY3Vycl9vZmZzZXQ7CisKKyNpZiAwCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJoZHJbJWxk XTogcGM9JWxkIGxpbmU9JWxkIG9mZnNldD0lbGQiLAorCQkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgKGN1cnJfcGMgLyBEVUtfUEMyTElORV9TS0lQKSwKKwkJICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIGN1cnJfcGMsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoZHJbaGRy X2luZGV4ICsgMF0sCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoZHJbaGRyX2luZGV4 ICsgMV0pKTsKKyNlbmRpZgorCisJCWR1a19tZW16ZXJvKGJlX2N0eCwgc2l6ZW9mKCpiZV9jdHgp KTsKKwkJYmVfY3R4LT5kYXRhID0gKChkdWtfdWludDhfdCAqKSBoZHIpICsgY3Vycl9vZmZzZXQ7 CisJCWJlX2N0eC0+bGVuZ3RoID0gKGR1a19zaXplX3QpIERVS19QQzJMSU5FX01BWF9ESUZGX0xF TkdUSDsKKworCQlmb3IgKDs7KSB7CisJCQljdXJyX3BjKys7CisJCQlpZiAoICgoY3Vycl9wYyAl IERVS19QQzJMSU5FX1NLSVApID09IDApIHx8ICAvKiBlbmQgb2YgZGlmZiBydW4gKi8KKwkJCSAg ICAgKGN1cnJfcGMgPj0gbGVuZ3RoKSApIHsgICAgICAgICAgICAgICAgIC8qIGVuZCBvZiBieXRl Y29kZSAqLworCQkJCWJyZWFrOworCQkJfQorCQkJRFVLX0FTU0VSVChjdXJyX3BjIDwgbGVuZ3Ro KTsKKwkJCW5leHRfbGluZSA9IChkdWtfaW50MzJfdCkgaW5zdHJzW2N1cnJfcGNdLmxpbmU7CisJ CQlkaWZmX2xpbmUgPSBuZXh0X2xpbmUgLSBjdXJyX2xpbmU7CisKKyNpZiAwCisJCQlEVUtfRERE KERVS19ERERQUklOVCgiY3Vycl9saW5lPSVsZCwgbmV4dF9saW5lPSVsZCAtPiBkaWZmX2xpbmU9 JWxkIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBjdXJyX2xpbmUsIChsb25nKSBu ZXh0X2xpbmUsIChsb25nKSBkaWZmX2xpbmUpKTsKKyNlbmRpZgorCisJCQlpZiAoZGlmZl9saW5l ID09IDApIHsKKwkJCQkvKiAwICovCisJCQkJZHVrX2JlX2VuY29kZShiZV9jdHgsIDAsIDEpOwor CQkJfSBlbHNlIGlmIChkaWZmX2xpbmUgPj0gMSAmJiBkaWZmX2xpbmUgPD0gNCkgeworCQkJCS8q IDEgMCA8MiBiaXRzPiAqLworCQkJCWR1a19iZV9lbmNvZGUoYmVfY3R4LCAoZHVrX3VpbnQzMl90 KSAoKDB4MDIgPDwgMikgKyAoZGlmZl9saW5lIC0gMSkpLCA0KTsKKwkJCX0gZWxzZSBpZiAoZGlm Zl9saW5lID49IC0weDgwICYmIGRpZmZfbGluZSA8PSAweDdmKSB7CisJCQkJLyogMSAxIDAgPDgg Yml0cz4gKi8KKwkJCQlEVUtfQVNTRVJUKGRpZmZfbGluZSArIDB4ODAgPj0gMCAmJiBkaWZmX2xp bmUgKyAweDgwIDw9IDB4ZmYpOworCQkJCWR1a19iZV9lbmNvZGUoYmVfY3R4LCAoZHVrX3VpbnQz Ml90KSAoKDB4MDYgPDwgOCkgKyAoZGlmZl9saW5lICsgMHg4MCkpLCAxMSk7CisJCQl9IGVsc2Ug eworCQkJCS8qIDEgMSAxIDwzMiBiaXRzPgorCQkJCSAqIEVuY29kZSBpbiB0d28gcGFydHMgdG8g YXZvaWQgYml0ZW5jb2RlIDI0LWJpdCBsaW1pdGF0aW9uCisJCQkJICovCisJCQkJZHVrX2JlX2Vu Y29kZShiZV9jdHgsIChkdWtfdWludDMyX3QpICgoMHgwNyA8PCAxNikgKyAoKG5leHRfbGluZSA+ PiAxNikgJiAweGZmZmYpKSwgMTkpOworCQkJCWR1a19iZV9lbmNvZGUoYmVfY3R4LCAoZHVrX3Vp bnQzMl90KSAobmV4dF9saW5lICYgMHhmZmZmKSwgMTYpOworCQkJfQorCisJCQljdXJyX2xpbmUg PSBuZXh0X2xpbmU7CisJCX0KKworCQlkdWtfYmVfZmluaXNoKGJlX2N0eCk7CisJCURVS19BU1NF UlQoIWJlX2N0eC0+dHJ1bmNhdGVkKTsKKworCQkvKiBiZV9jdHgtPm9mZnNldCA9PSBsZW5ndGgg b2YgZW5jb2RlZCBiaXRzdHJlYW0gKi8KKwkJY3Vycl9vZmZzZXQgKz0gKGR1a191aW50X2Zhc3Qz Ml90KSBiZV9jdHgtPm9mZnNldDsKKwl9CisKKwkvKiBjb21wYWN0ICovCisJbmV3X3NpemUgPSAo ZHVrX3NpemVfdCkgY3Vycl9vZmZzZXQ7CisJZHVrX2hidWZmZXJfcmVzaXplKHRociwgaF9idWYs IG5ld19zaXplKTsKKworCSh2b2lkKSBkdWtfdG9fZml4ZWRfYnVmZmVyKHRociwgLTEsIE5VTEwp OworCisJRFVLX0RERChEVUtfREREUFJJTlQoImZpbmFsIHBjMmxpbmUgZGF0YTogcGNfbGltaXQ9 JWxkLCBsZW5ndGg9JWxkLCAlbGYgYml0cy9vcGNvZGUgLS0+ICUhaXhUIiwKKwkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgbGVuZ3RoLCAobG9uZykgbmV3X3NpemUsIChkb3VibGUpIG5ld19z aXplICogOC4wIC8gKGRvdWJsZSkgbGVuZ3RoLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtf dHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKK30KKworLyogUEMgaXMgdW5zaWduZWQu ICBJZiBjYWxsZXIgZG9lcyBQQyBhcml0aG1ldGljIGFuZCBnZXRzIGEgbmVnYXRpdmUgcmVzdWx0 LAorICogaXQgd2lsbCBtYXAgdG8gYSBsYXJnZSBQQyB3aGljaCBpcyBvdXQgb2YgYm91bmRzIGFu ZCBjYXVzZXMgYSB6ZXJvIHRvIGJlCisgKiByZXR1cm5lZC4KKyAqLworRFVLX0xPQ0FMIGR1a191 aW50X2Zhc3QzMl90IGR1a19faG9iamVjdF9wYzJsaW5lX3F1ZXJ5X3JhdyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfaGJ1ZmZlcl9maXhlZCAqYnVmLCBkdWtfdWludF9mYXN0MzJfdCBwYykgeworCWR1 a19iaXRkZWNvZGVyX2N0eCBiZF9jdHhfYWxsb2M7CisJZHVrX2JpdGRlY29kZXJfY3R4ICpiZF9j dHggPSAmYmRfY3R4X2FsbG9jOworCWR1a191aW50MzJfdCAqaGRyOworCWR1a191aW50X2Zhc3Qz Ml90IHN0YXJ0X29mZnNldDsKKwlkdWtfdWludF9mYXN0MzJfdCBwY19saW1pdDsKKwlkdWtfdWlu dF9mYXN0MzJfdCBoZHJfaW5kZXg7CisJZHVrX3VpbnRfZmFzdDMyX3QgcGNfYmFzZTsKKwlkdWtf dWludF9mYXN0MzJfdCBuOworCWR1a191aW50X2Zhc3QzMl90IGN1cnJfbGluZTsKKworCURVS19B U1NFUlQoYnVmICE9IE5VTEwpOworCURVS19BU1NFUlQoIURVS19IQlVGRkVSX0hBU19EWU5BTUlD KChkdWtfaGJ1ZmZlciAqKSBidWYpICYmICFEVUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoKGR1a19o YnVmZmVyICopIGJ1ZikpOworCURVS19VTlJFRih0aHIpOworCisJLyoKKwkgKiAgVXNlIHRoZSBp bmRleCBpbiB0aGUgaGVhZGVyIHRvIGZpbmQgdGhlIHJpZ2h0IHN0YXJ0aW5nIHBvaW50CisJICov CisKKwloZHJfaW5kZXggPSBwYyAvIERVS19QQzJMSU5FX1NLSVA7CisJcGNfYmFzZSA9IGhkcl9p bmRleCAqIERVS19QQzJMSU5FX1NLSVA7CisJbiA9IHBjIC0gcGNfYmFzZTsKKworCWlmIChEVUtf SEJVRkZFUl9GSVhFRF9HRVRfU0laRShidWYpIDw9IHNpemVvZihkdWtfdWludDMyX3QpKSB7CisJ CURVS19ERChEVUtfRERQUklOVCgicGMybGluZSBsb29rdXAgZmFpbGVkOiBidWZmZXIgaXMgc21h bGxlciB0aGFuIG1pbmltYWwgaGVhZGVyIikpOworCQlnb3RvIHBjMmxpbmVfZXJyb3I7CisJfQor CisJaGRyID0gKGR1a191aW50MzJfdCAqKSAodm9pZCAqKSBEVUtfSEJVRkZFUl9GSVhFRF9HRVRf REFUQV9QVFIodGhyLT5oZWFwLCBidWYpOworCXBjX2xpbWl0ID0gaGRyWzBdOworCWlmIChwYyA+ PSBwY19saW1pdCkgeworCQkvKiBOb3RlOiBwYyBpcyB1bnNpZ25lZCBhbmQgY2Fubm90IGJlIG5l Z2F0aXZlICovCisJCURVS19ERChEVUtfRERQUklOVCgicGMybGluZSBsb29rdXAgZmFpbGVkOiBw YyBvdXQgb2YgYm91bmRzIChwYz0lbGQsIGxpbWl0PSVsZCkiLAorCQkgICAgICAgICAgICAgICAg ICAgKGxvbmcpIHBjLCAobG9uZykgcGNfbGltaXQpKTsKKwkJZ290byBwYzJsaW5lX2Vycm9yOwor CX0KKworCWN1cnJfbGluZSA9IGhkclsxICsgaGRyX2luZGV4ICogMl07CisJc3RhcnRfb2Zmc2V0 ID0gaGRyWzEgKyBoZHJfaW5kZXggKiAyICsgMV07CisJaWYgKChkdWtfc2l6ZV90KSBzdGFydF9v ZmZzZXQgPiBEVUtfSEJVRkZFUl9GSVhFRF9HRVRfU0laRShidWYpKSB7CisJCURVS19ERChEVUtf RERQUklOVCgicGMybGluZSBsb29rdXAgZmFpbGVkOiBzdGFydF9vZmZzZXQgb3V0IG9mIGJvdW5k cyAoc3RhcnRfb2Zmc2V0PSVsZCwgYnVmZmVyX3NpemU9JWxkKSIsCisJCSAgICAgICAgICAgICAg ICAgICAobG9uZykgc3RhcnRfb2Zmc2V0LCAobG9uZykgRFVLX0hCVUZGRVJfR0VUX1NJWkUoKGR1 a19oYnVmZmVyICopIGJ1ZikpKTsKKwkJZ290byBwYzJsaW5lX2Vycm9yOworCX0KKworCS8qCisJ ICogIEl0ZXJhdGUgdGhlIGJpdHN0cmVhbSAobGluZSBkaWZmcykgdW50aWwgUEMgaXMgcmVhY2hl ZAorCSAqLworCisJZHVrX21lbXplcm8oYmRfY3R4LCBzaXplb2YoKmJkX2N0eCkpOworCWJkX2N0 eC0+ZGF0YSA9ICgoZHVrX3VpbnQ4X3QgKikgaGRyKSArIHN0YXJ0X29mZnNldDsKKwliZF9jdHgt Pmxlbmd0aCA9IChkdWtfc2l6ZV90KSAoRFVLX0hCVUZGRVJfRklYRURfR0VUX1NJWkUoYnVmKSAt IHN0YXJ0X29mZnNldCk7CisKKyNpZiAwCisJRFVLX0RERChEVUtfREREUFJJTlQoInBjMmxpbmUg bG9va3VwOiBwYz0lbGQgLT4gaGRyX2luZGV4PSVsZCwgcGNfYmFzZT0lbGQsIG49JWxkLCBzdGFy dF9vZmZzZXQ9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGMsIChsb25nKSBo ZHJfaW5kZXgsIChsb25nKSBwY19iYXNlLCAobG9uZykgbiwgKGxvbmcpIHN0YXJ0X29mZnNldCkp OworI2VuZGlmCisKKwl3aGlsZSAobiA+IDApIHsKKyNpZiAwCisJCURVS19EREQoRFVLX0RERFBS SU5UKCJsb29rdXA6IG49JWxkLCBjdXJyX2xpbmU9JWxkIiwgKGxvbmcpIG4sIChsb25nKSBjdXJy X2xpbmUpKTsKKyNlbmRpZgorCisJCWlmIChkdWtfYmRfZGVjb2RlX2ZsYWcoYmRfY3R4KSkgewor CQkJaWYgKGR1a19iZF9kZWNvZGVfZmxhZyhiZF9jdHgpKSB7CisJCQkJaWYgKGR1a19iZF9kZWNv ZGVfZmxhZyhiZF9jdHgpKSB7CisJCQkJCS8qIDEgMSAxIDwzMiBiaXRzPiAqLworCQkJCQlkdWtf dWludF9mYXN0MzJfdCB0OworCQkJCQl0ID0gZHVrX2JkX2RlY29kZShiZF9jdHgsIDE2KTsgIC8q IHdvcmthcm91bmQ6IG1heCBuYml0cyA9IDI0IG5vdyAqLworCQkJCQl0ID0gKHQgPDwgMTYpICsg ZHVrX2JkX2RlY29kZShiZF9jdHgsIDE2KTsKKwkJCQkJY3Vycl9saW5lID0gdDsKKwkJCQl9IGVs c2UgeworCQkJCQkvKiAxIDEgMCA8OCBiaXRzPiAqLworCQkJCQlkdWtfdWludF9mYXN0MzJfdCB0 OworCQkJCQl0ID0gZHVrX2JkX2RlY29kZShiZF9jdHgsIDgpOworCQkJCQljdXJyX2xpbmUgPSBj dXJyX2xpbmUgKyB0IC0gMHg4MDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIDEgMCA8MiBi aXRzPiAqLworCQkJCWR1a191aW50X2Zhc3QzMl90IHQ7CisJCQkJdCA9IGR1a19iZF9kZWNvZGUo YmRfY3R4LCAyKTsKKwkJCQljdXJyX2xpbmUgPSBjdXJyX2xpbmUgKyB0ICsgMTsKKwkJCX0KKwkJ fSBlbHNlIHsKKwkJCS8qIDA6IG5vIGNoYW5nZSAqLworCQl9CisKKwkJbi0tOworCX0KKworCURV S19EREQoRFVLX0RERFBSSU5UKCJwYzJsaW5lIGxvb2t1cCByZXN1bHQ6IHBjICVsZCAtPiBsaW5l ICVsZCIsIChsb25nKSBwYywgKGxvbmcpIGN1cnJfbGluZSkpOworCXJldHVybiBjdXJyX2xpbmU7 CisKKyBwYzJsaW5lX2Vycm9yOgorCURVS19EKERVS19EUFJJTlQoInBjMmxpbmUgY29udmVyc2lv biBmYWlsZWQgZm9yIHBjPSVsZCIsIChsb25nKSBwYykpOworCXJldHVybiAwOworfQorCitEVUtf SU5URVJOQUwgZHVrX3VpbnRfZmFzdDMyX3QgZHVrX2hvYmplY3RfcGMybGluZV9xdWVyeShkdWtf aHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4X2Z1bmMsIGR1a191aW50X2Zhc3QzMl90IHBjKSB7 CisJZHVrX2hidWZmZXJfZml4ZWQgKnBjMmxpbmU7CisJZHVrX3VpbnRfZmFzdDMyX3QgbGluZTsK KworCS8qIFhYWDogbm93IHRoYXQgcGMybGluZSBpcyB1c2VkIGJ5IHRoZSBkZWJ1Z2dlciBxdWl0 ZSBoZWF2aWx5IGluCisJICogY2hlY2tlZCBleGVjdXRpb24sIHRoaXMgc2hvdWxkIGJlIG9wdGlt aXplZCB0byBhdm9pZCB2YWx1ZSBzdGFjaworCSAqIGFuZCBwZXJoYXBzIGFsc28gaW1wbGVtZW50 IHNvbWUgZm9ybSBvZiBwYzJsaW5lIGNhY2hpbmcgKHNlZQorCSAqIGZ1dHVyZSB3b3JrIGluIGRl YnVnZ2VyLnJzdCkuCisJICovCisKKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4KHRociwgaWR4X2Z1bmMs IERVS19TVFJJRFhfSU5UX1BDMkxJTkUpOworCXBjMmxpbmUgPSAoZHVrX2hidWZmZXJfZml4ZWQg KikgKHZvaWQgKikgZHVrX2dldF9oYnVmZmVyKHRociwgLTEpOworCWlmIChwYzJsaW5lICE9IE5V TEwpIHsKKwkJRFVLX0FTU0VSVCghRFVLX0hCVUZGRVJfSEFTX0RZTkFNSUMoKGR1a19oYnVmZmVy ICopIHBjMmxpbmUpICYmICFEVUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoKGR1a19oYnVmZmVyICop IHBjMmxpbmUpKTsKKwkJbGluZSA9IGR1a19faG9iamVjdF9wYzJsaW5lX3F1ZXJ5X3Jhdyh0aHIs IHBjMmxpbmUsIChkdWtfdWludF9mYXN0MzJfdCkgcGMpOworCX0gZWxzZSB7CisJCWxpbmUgPSAw OworCX0KKwlkdWtfcG9wKHRocik7CisKKwlyZXR1cm4gbGluZTsKK30KKworI2VuZGlmICAvKiBE VUtfVVNFX1BDMkxJTkUgKi8KKy8qCisgKiAgZHVrX2hvYmplY3QgcHJvcGVydHkgYWNjZXNzIGZ1 bmN0aW9uYWxpdHkuCisgKgorICogIFRoaXMgaXMgdmVyeSBjZW50cmFsIGZ1bmN0aW9uYWxpdHkg Zm9yIHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgY29tcGxpYW5jZS4KKyAqICBJdCBpcyBhbHNvIHJh dGhlciBpbnRyaWNhdGU7IHNlZSBob2JqZWN0LWFsZ29yaXRobXMucnN0IGZvciBkaXNjdXNzaW9u IG9uCisgKiAgdGhlIGFsZ29yaXRobXMgYW5kIG1lbW9yeS1tYW5hZ2VtZW50LnJzdCBmb3IgZGlz Y3Vzc2lvbiBvbiByZWZjb3VudHMgYW5kCisgKiAgc2lkZSBlZmZlY3QgaXNzdWVzLgorICoKKyAq ICBOb3RlczoKKyAqCisgKiAgICAtIEl0IG1pZ2h0IGJlIHRlbXB0aW5nIHRvIGFzc2VydCAicmVm Y291bnQgbm9uemVybyIgZm9yIG9iamVjdHMKKyAqICAgICAgYmVpbmcgb3BlcmF0ZWQgb24sIGJ1 dCB0aGF0J3Mgbm90IGFsd2F5cyBjb3JyZWN0OiBvYmplY3RzIHdpdGgKKyAqICAgICAgYSB6ZXJv IHJlZmNvdW50IG1heSBiZSBvcGVyYXRlZCBvbiBieSB0aGUgcmVmY291bnQgaW1wbGVtZW50YXRp b24KKyAqICAgICAgKGZpbmFsaXphdGlvbikgZm9yIGluc3RhbmNlLiAgSGVuY2UsIG5vIHJlZmNv dW50IGFzc2VydGlvbnMgYXJlIG1hZGUuCisgKgorICogICAgLSBNYW55IG9wZXJhdGlvbnMgKG1l bW9yeSBhbGxvY2F0aW9uLCBpZGVudGlmaWVyIG9wZXJhdGlvbnMsIGV0YykKKyAqICAgICAgbWF5 IGNhdXNlIGFyYml0cmFyeSBzaWRlIGVmZmVjdHMgKGUuZy4gdGhyb3VnaCBHQyBhbmQgZmluYWxp emF0aW9uKS4KKyAqICAgICAgVGhlc2Ugc2lkZSBlZmZlY3RzIG1heSBpbnZhbGlkYXRlIGR1a190 dmFsIHBvaW50ZXJzIHdoaWNoIHBvaW50IHRvCisgKiAgICAgIGFyZWFzIHN1YmplY3QgdG8gcmVh bGxvY2F0aW9uIChsaWtlIHZhbHVlIHN0YWNrKS4gIEhlYXAgb2JqZWN0cworICogICAgICB0aGVt c2VsdmVzIGhhdmUgc3RhYmxlIHBvaW50ZXJzLiAgSG9sZGluZyBoZWFwIG9iamVjdCBwb2ludGVy cyBvcgorICogICAgICBkdWtfdHZhbCBjb3BpZXMgaXMgbm90IHByb2JsZW1hdGljIHdpdGggcmVz cGVjdCB0byBzaWRlIGVmZmVjdHM7CisgKiAgICAgIGNhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIGhv bGRpbmcgYW5kIHVzaW5nIGFyZ3VtZW50IGR1a190dmFsIHBvaW50ZXJzLgorICoKKyAqICAgIC0g SWYgYSBmaW5hbGl6ZXIgaXMgZXhlY3V0ZWQsIGl0IG1heSBvcGVyYXRlIG9uIHRoZSB0aGUgc2Ft ZSBvYmplY3QKKyAqICAgICAgd2UncmUgY3VycmVudGx5IGRlYWxpbmcgd2l0aC4gIEZvciBpbnN0 YW5jZSwgdGhlIGZpbmFsaXplciBtaWdodAorICogICAgICBkZWxldGUgYSBjZXJ0YWluIHByb3Bl cnR5IHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gbG9va2VkIHVwIGFuZAorICogICAgICBjb25maXJt ZWQgdG8gZXhpc3QuICBJZGVhbGx5IGZpbmFsaXplcnMgd291bGQgYmUgZGlzYWJsZWQgaWYgR0MK KyAqICAgICAgaGFwcGVucyBkdXJpbmcgcHJvcGVydHkgYWNjZXNzLiAgQXQgdGhlIG1vbWVudCBw cm9wZXJ0eSB0YWJsZSByZWFsbG9jCisgKiAgICAgIGRpc2FibGVzIGZpbmFsaXplcnMsIGFuZCBh bGwgREVDUkVGcyBtYXkgY2F1c2UgYXJiaXRyYXJ5IGNoYW5nZXMgc28KKyAqICAgICAgaGFuZGxl IERFQ1JFRiBjYXJlZnVsbHkuCisgKgorICogICAgLSBUaGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBm b3IgYSBERUNSRUYgbWF0dGVycy4gIFdoZW4gREVDUkVGIGlzIGV4ZWN1dGVkLAorICogICAgICB0 aGUgZW50aXJlIG9iamVjdCBncmFwaCBtdXN0IGJlIGNvbnNpc3RlbnQ7IG5vdGUgdGhhdCBhIHJl Znplcm8gbWF5CisgKiAgICAgIGxlYWQgdG8gYSBtYXJrLWFuZC1zd2VlcCB0aHJvdWdoIGEgcmVm Y291bnQgZmluYWxpemVyLiAgVXNlIE5PUlogbWFjcm9zCisgKiAgICAgIGFuZCBhbiBleHBsaWNp dCBEVUtfUkVGWkVST19DSEVDS194eHgoKSBpZiBhY2hpZXZpbmcgY29ycmVjdCBvcmRlciBpcyBo YXJkLgorICovCisKKy8qCisgKiAgWFhYOiBhcnJheSBpbmRpY2VzIGFyZSBtb3N0bHkgdHlwZWQg YXMgZHVrX3VpbnQzMl90IGhlcmU7IGR1a191YXJyaWR4X3QKKyAqICBtaWdodCBiZSBtb3JlIGFw cHJvcHJpYXRlLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkg aW5jbHVkZWQgKi8KKworLyoKKyAqICBMb2NhbCBkZWZpbmVzCisgKi8KKworI2RlZmluZSBEVUtf X05PX0FSUkFZX0lOREVYICAgICAgICAgICAgIERVS19IU1RSSU5HX05PX0FSUkFZX0lOREVYCisK Ky8qIE1hcmtlciB2YWx1ZXMgZm9yIGhhc2ggcGFydC4gKi8KKyNkZWZpbmUgRFVLX19IQVNIX1VO VVNFRCAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9IQVNISURYX1VOVVNFRAorI2RlZmluZSBE VUtfX0hBU0hfREVMRVRFRCAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0hBU0hJRFhfREVMRVRF RAorCisvKiBWYWxzdGFjayBzcGFjZSB0aGF0IHN1ZmZpY2VzIGZvciBhbGwgbG9jYWwgY2FsbHMs IGV4Y2x1ZGluZyBhbnkgcmVjdXJzaW9uCisgKiBpbnRvIEVDTUFTY3JpcHQgb3IgRHVrdGFwZS9D IGNhbGxzIChQcm94eSwgZ2V0dGVycywgZXRjKS4KKyAqLworI2RlZmluZSBEVUtfX1ZBTFNUQUNL X1NQQUNFICAgICAgICAgICAgIDEwCisKKy8qIFZhbHN0YWNrIHNwYWNlIGFsbG9jYXRlZCBlc3Bl Y2lhbGx5IGZvciBwcm94eSBsb29rdXAgd2hpY2ggZG9lcyBhCisgKiByZWN1cnNpdmUgcHJvcGVy dHkgbG9va3VwLgorICovCisjZGVmaW5lIERVS19fVkFMU1RBQ0tfUFJPWFlfTE9PS1VQICAgICAg MjAKKworLyoKKyAqICBMb2NhbCBwcm90b3R5cGVzCisgKi8KKworRFVLX0xPQ0FMX0RFQ0wgZHVr X2Jvb2xfdCBkdWtfX2NoZWNrX2FyZ3VtZW50c19tYXBfZm9yX2dldChkdWtfaHRocmVhZCAqdGhy LCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAqa2V5LCBkdWtfcHJvcGRlc2MgKnRlbXBf ZGVzYyk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fY2hlY2tfYXJndW1lbnRzX21hcF9mb3Jf cHV0KGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpvYmosIGR1a19oc3RyaW5nICprZXks IGR1a19wcm9wZGVzYyAqdGVtcF9kZXNjLCBkdWtfYm9vbF90IHRocm93X2ZsYWcpOworRFVLX0xP Q0FMX0RFQ0wgdm9pZCBkdWtfX2NoZWNrX2FyZ3VtZW50c19tYXBfZm9yX2RlbGV0ZShkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAqa2V5LCBkdWtfcHJvcGRl c2MgKnRlbXBfZGVzYyk7CisKK0RVS19MT0NBTF9ERUNMIGR1a19ib29sX3QgZHVrX19oYW5kbGVf cHV0X2FycmF5X2xlbmd0aF9zbWFsbGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpv YmosIGR1a191aW50MzJfdCBvbGRfbGVuLCBkdWtfdWludDMyX3QgbmV3X2xlbiwgZHVrX2Jvb2xf dCBmb3JjZV9mbGFnLCBkdWtfdWludDMyX3QgKm91dF9yZXN1bHRfbGVuKTsKK0RVS19MT0NBTF9E RUNMIGR1a19ib29sX3QgZHVrX19oYW5kbGVfcHV0X2FycmF5X2xlbmd0aChkdWtfaHRocmVhZCAq dGhyLCBkdWtfaG9iamVjdCAqb2JqKTsKKworRFVLX0xPQ0FMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf X2dldF9wcm9wZGVzYyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0 cmluZyAqa2V5LCBkdWtfcHJvcGRlc2MgKm91dF9kZXNjLCBkdWtfc21hbGxfdWludF90IGZsYWdz KTsKK0RVS19MT0NBTF9ERUNMIGR1a19ib29sX3QgZHVrX19nZXRfb3duX3Byb3BkZXNjX3Jhdyhk dWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAqa2V5LCBkdWtf dWludDMyX3QgYXJyX2lkeCwgZHVrX3Byb3BkZXNjICpvdXRfZGVzYywgZHVrX3NtYWxsX3VpbnRf dCBmbGFncyk7CisKKy8qCisgKiAgTWlzYyBoZWxwZXJzCisgKi8KKworLyogQ29udmVydCBhIGR1 a190dmFsIG51bWJlciAoY2FsbGVyIGNoZWNrcykgdG8gYSAzMi1iaXQgaW5kZXguICBSZXR1cm5z CisgKiBEVUtfX05PX0FSUkFZX0lOREVYIGlmIHRoZSBudW1iZXIgaXMgbm90IHdob2xlIG9yIG5v dCBhIHZhbGlkIGFycmF5CisgKiBpbmRleC4KKyAqLworLyogWFhYOiBmb3IgZmFzdGludHMsIGNv dWxkIHVzZSBhIHZhcmlhbnQgd2hpY2ggYXNzdW1lcyBhIGRvdWJsZSBkdWtfdHZhbAorICogKGFu ZCBkb2Vzbid0IG5lZWQgdG8gY2hlY2sgZm9yIGZhc3RpbnQgYWdhaW4pLgorICovCitEVUtfTE9D QUwgZHVrX3VpbnQzMl90IGR1a19fdHZhbF9udW1iZXJfdG9fYXJyX2lkeChkdWtfdHZhbCAqdHYp IHsKKwlkdWtfZG91YmxlX3QgZGJsOworCWR1a191aW50MzJfdCBpZHg7CisKKwlEVUtfQVNTRVJU KHR2ICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2KSk7CisKKwkv KiAtMCBpcyBhY2NlcHRlZCBoZXJlIGFzIGluZGV4IDAgYmVjYXVzZSBUb1N0cmluZygtMCkgPT0g IjAiIHdoaWNoIGlzCisJICogaW4gY2Fub25pY2FsIGZvcm0gYW5kIHRodXMgYW4gYXJyYXkgaW5k ZXguCisJICovCisJZGJsID0gRFVLX1RWQUxfR0VUX05VTUJFUih0dik7CisJaWR4ID0gKGR1a191 aW50MzJfdCkgZGJsOworCWlmICgoZHVrX2RvdWJsZV90KSBpZHggPT0gZGJsKSB7CisJICAgICAg ICAvKiBJcyB3aG9sZSBhbmQgd2l0aGluIDMyIGJpdCByYW5nZS4gIElmIHRoZSB2YWx1ZSBoYXBw ZW5zIHRvIGJlIDB4RkZGRkZGRkYsCisJCSAqIGl0J3Mgbm90IGEgdmFsaWQgYXJyYXkgaW5kZXgg YnV0IHdpbGwgdGhlbiBtYXRjaCBEVUtfX05PX0FSUkFZX0lOREVYLgorCQkgKi8KKwkJcmV0dXJu IGlkeDsKKwl9CisJcmV0dXJuIERVS19fTk9fQVJSQVlfSU5ERVg7Cit9CisKKyNpZiBkZWZpbmVk KERVS19VU0VfRkFTVElOVCkKKy8qIENvbnZlcnQgYSBkdWtfdHZhbCBmYXN0aW50IChjYWxsZXIg Y2hlY2tzKSB0byBhIDMyLWJpdCBpbmRleC4gKi8KK0RVS19MT0NBTCBkdWtfdWludDMyX3QgZHVr X190dmFsX2Zhc3RpbnRfdG9fYXJyX2lkeChkdWtfdHZhbCAqdHYpIHsKKwlkdWtfaW50NjRfdCB0 OworCisJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX0ZB U1RJTlQodHYpKTsKKworCXQgPSBEVUtfVFZBTF9HRVRfRkFTVElOVCh0dik7CisJaWYgKCgoZHVr X3VpbnQ2NF90KSB0ICYgfkRVS19VNjRfQ09OU1RBTlQoMHhmZmZmZmZmZikpICE9IDApIHsKKwkJ LyogQ2F0Y2hlcyA+MHgxMDAwMDAwMDAgYW5kIG5lZ2F0aXZlIHZhbHVlcy4gKi8KKwkJcmV0dXJu IERVS19fTk9fQVJSQVlfSU5ERVg7CisJfQorCisJLyogSWYgdGhlIHZhbHVlIGhhcHBlbnMgdG8g YmUgMHhGRkZGRkZGRiwgaXQncyBub3QgYSB2YWxpZCBhcnJheSBpbmRleAorCSAqIGJ1dCB3aWxs IHRoZW4gbWF0Y2ggRFVLX19OT19BUlJBWV9JTkRFWC4KKwkgKi8KKwlyZXR1cm4gKGR1a191aW50 MzJfdCkgdDsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9GQVNUSU5UICovCisKKy8qIENvbnZlcnQg YSBkdWtfdHZhbCBvbiB0aGUgdmFsdWUgc3RhY2sgKGluIGEgdHJ1c3RlZCBpbmRleCB3ZSBkb24n dCB2YWxpZGF0ZSkKKyAqIHRvIGEgc3RyaW5nIG9yIHN5bWJvbCB1c2luZyBFUzIwMTUgVG9Qcm9w ZXJ0eUtleSgpOgorICogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYy LzYuMC8jc2VjLXRvcHJvcGVydHlrZXkuCisgKgorICogQWxzbyBjaGVjayBpZiBpdCdzIGEgdmFs aWQgYXJyYXkgaW5kZXggYW5kIHJldHVybiB0aGF0IChvciBEVUtfX05PX0FSUkFZX0lOREVYCisg KiBpZiBub3QpLgorICovCitEVUtfTE9DQUwgZHVrX3VpbnQzMl90IGR1a19fdG9fcHJvcGVydHlf a2V5KGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19oc3RyaW5nICoqb3V0X2gp IHsKKwlkdWtfdWludDMyX3QgYXJyX2lkeDsKKwlkdWtfaHN0cmluZyAqaDsKKwlkdWtfdHZhbCAq dHZfZHN0OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvdXRfaCAh PSBOVUxMKTsKKwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlkeCkpOworCURV S19BU1NFUlQoaWR4IDwgMCk7CisKKwkvKiBYWFg6IFRoZSByZXZpc2VkIEVTMjAxNSBUb1Byb3Bl cnR5S2V5KCkgaGFuZGxpbmcgKEVTNS4xIHdhcyBqdXN0CisJICogVG9TdHJpbmcoKSkgaW52b2x2 ZXMgYSBUb1ByaW1pdGl2ZSgpLCBhIHN5bWJvbCBjaGVjaywgYW5kIGZpbmFsbHkKKwkgKiBhIFRv U3RyaW5nKCkuICBGaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBoYXZlIGEgZ29vZCBmYXN0IHBh dGgKKwkgKiBidXQgc3RpbGwgYmUgY29tcGxpYW50IGFuZCBzaGFyZSBjb2RlLgorCSAqLworCisJ dHZfZHN0ID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIGlkeCk7ICAvKiBpbnRlbnRpb25hbGx5 IHVudmFsaWRhdGVkICovCisJaWYgKERVS19UVkFMX0lTX1NUUklORyh0dl9kc3QpKSB7CisJCS8q IE1vc3QgaW1wb3J0YW50IHBhdGg6IHN0cmluZ3MgYW5kIHBsYWluIHN5bWJvbHMgYXJlIHVzZWQg YXMKKwkJICogaXMuICBGb3Igc3ltYm9scyB0aGUgYXJyYXkgaW5kZXggY2hlY2sgYmVsb3cgaXMg dW5uZWNlc3NhcnkKKwkJICogKHRoZXkncmUgbmV2ZXIgdmFsaWQgYXJyYXkgaW5kaWNlcykgYnV0 IGNoZWNraW5nIHRoYXQgdGhlCisJCSAqIHN0cmluZyBpcyBhIHN5bWJvbCB3b3VsZCBtYWtlIHRo ZSBwbGFpbiBzdHJpbmcgcGF0aCBzbG93ZXIKKwkJICogdW5uZWNlc3NhcmlseS4KKwkJICovCisJ CWggPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2X2RzdCk7CisJfSBlbHNlIHsKKwkJaCA9IGR1a190 b19wcm9wZXJ0eV9rZXlfaHN0cmluZyh0aHIsIGlkeCk7CisJfQorCURVS19BU1NFUlQoaCAhPSBO VUxMKTsKKwkqb3V0X2ggPSBoOworCisJYXJyX2lkeCA9IERVS19IU1RSSU5HX0dFVF9BUlJJRFhf RkFTVChoKTsKKwlyZXR1cm4gYXJyX2lkeDsKK30KKworRFVLX0xPQ0FMIGR1a191aW50MzJfdCBk dWtfX3B1c2hfdHZhbF90b19wcm9wZXJ0eV9rZXkoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwg KnR2X2tleSwgZHVrX2hzdHJpbmcgKipvdXRfaCkgeworCWR1a19wdXNoX3R2YWwodGhyLCB0dl9r ZXkpOyAgLyogWFhYOiBjb3VsZCB1c2UgYW4gdW5zYWZlIHB1c2ggaGVyZSAqLworCXJldHVybiBk dWtfX3RvX3Byb3BlcnR5X2tleSh0aHIsIC0xLCBvdXRfaCk7Cit9CisKKy8qIFN0cmluZyBpcyBh biBvd24gKHZpcnR1YWwpIHByb3BlcnR5IG9mIGEgcGxhaW4gYnVmZmVyLiAqLworRFVLX0xPQ0FM IGR1a19ib29sX3QgZHVrX19rZXlfaXNfcGxhaW5fYnVmX293bnByb3AoZHVrX2h0aHJlYWQgKnRo ciwgZHVrX2hidWZmZXIgKmJ1ZiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX3VpbnQzMl90IGFycl9p ZHgpIHsKKwlEVUtfVU5SRUYodGhyKTsKKworCS8qIFZpcnR1YWwgaW5kZXggcHJvcGVydGllcy4g IENoZWNraW5nIGV4cGxpY2l0bHkgZm9yCisJICogJ2Fycl9pZHggIT0gRFVLX19OT19BUlJBWV9J TkRFWCcgaXMgbm90IG5lY2Vzc2FyeQorCSAqIGJlY2F1c2UgRFVLX19OT19BUlJBWV9JTkRFWGkg aXMgYWx3YXlzIGxhcmdlciB0aGFuCisJICogbWF4aW11bSBhbGxvd2VkIGJ1ZmZlciBzaXplLgor CSAqLworCURVS19BU1NFUlQoRFVLX19OT19BUlJBWV9JTkRFWCA+PSBEVUtfSEJVRkZFUl9HRVRf U0laRShidWYpKTsKKwlpZiAoYXJyX2lkeCA8IERVS19IQlVGRkVSX0dFVF9TSVpFKGJ1ZikpIHsK KwkJcmV0dXJuIDE7CisJfQorCisJLyogT3RoZXIgdmlydHVhbCBwcm9wZXJ0aWVzLiAqLworCXJl dHVybiAoa2V5ID09IERVS19IVEhSRUFEX1NUUklOR19MRU5HVEgodGhyKSk7Cit9CisKKy8qCisg KiAgSGVscGVycyBmb3IgbWFuYWdpbmcgcHJvcGVydHkgc3RvcmFnZSBzaXplCisgKi8KKworLyog R2V0IGRlZmF1bHQgaGFzaCBwYXJ0IHNpemUgZm9yIGEgY2VydGFpbiBlbnRyeSBwYXJ0IHNpemUu ICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJUKQorRFVLX0xPQ0FMIGR1 a191aW50MzJfdCBkdWtfX2dldF9kZWZhdWx0X2hfc2l6ZShkdWtfdWludDMyX3QgZV9zaXplKSB7 CisJRFVLX0FTU0VSVChlX3NpemUgPD0gRFVLX0hPQkpFQ1RfTUFYX1BST1BFUlRJRVMpOworCisJ aWYgKGVfc2l6ZSA+PSBEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QUk9QX0xJTUlUKSB7CisJCWR1a191 aW50MzJfdCByZXM7CisJCWR1a191aW50MzJfdCB0bXA7CisKKwkJLyogSGFzaCBzaXplIHNob3Vs ZCBiZSAyXk4gd2hlcmUgTiBpcyBjaG9zZW4gc28gdGhhdCAyXk4gaXMKKwkJICogbGFyZ2VyIHRo YW4gZV9zaXplLiAgRXh0cmEgc2hpZnRpbmcgaXMgdXNlZCB0byBlbnN1cmUgaGFzaAorCQkgKiBp cyByZWxhdGl2ZWx5IHNwYXJzZS4KKwkJICovCisJCXRtcCA9IGVfc2l6ZTsKKwkJcmVzID0gMjsg IC8qIFJlc3VsdCB3aWxsIGJlIDIgKiogKE4gKyAxKS4gKi8KKwkJd2hpbGUgKHRtcCA+PSAweDQw KSB7CisJCQl0bXAgPj49IDY7CisJCQlyZXMgPDw9IDY7CisJCX0KKwkJd2hpbGUgKHRtcCAhPSAw KSB7CisJCQl0bXAgPj49IDE7CisJCQlyZXMgPDw9IDE7CisJCX0KKwkJRFVLX0FTU0VSVCgoRFVL X0hPQkpFQ1RfTUFYX1BST1BFUlRJRVMgPDwgMlUpID4gRFVLX0hPQkpFQ1RfTUFYX1BST1BFUlRJ RVMpOyAgLyogV29uJ3Qgd3JhcCwgZXZlbiBzaGlmdGVkIGJ5IDIuICovCisJCURVS19BU1NFUlQo cmVzID4gZV9zaXplKTsKKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9 Cit9CisjZW5kaWYgIC8qIFVTRV9QUk9QX0hBU0hfUEFSVCAqLworCisvKiBHZXQgbWluaW11bSBl bnRyeSBwYXJ0IGdyb3d0aCBmb3IgYSBjZXJ0YWluIHNpemUuICovCitEVUtfTE9DQUwgZHVrX3Vp bnQzMl90IGR1a19fZ2V0X21pbl9ncm93X2UoZHVrX3VpbnQzMl90IGVfc2l6ZSkgeworCWR1a191 aW50MzJfdCByZXM7CisKKwlEVUtfQVNTRVJUKGVfc2l6ZSA8PSBEVUtfSE9CSkVDVF9NQVhfUFJP UEVSVElFUyk7CisKKwlyZXMgPSAoZV9zaXplICsgRFVLX1VTRV9IT0JKRUNUX0VOVFJZX01JTkdS T1dfQUREKSAvIERVS19VU0VfSE9CSkVDVF9FTlRSWV9NSU5HUk9XX0RJVklTT1I7CisJRFVLX0FT U0VSVChyZXMgPj0gMSk7ICAvKiBpbXBvcnRhbnQgZm9yIGNhbGxlcnMgKi8KKwlyZXR1cm4gcmVz OworfQorCisvKiBHZXQgbWluaW11bSBhcnJheSBwYXJ0IGdyb3d0aCBmb3IgYSBjZXJ0YWluIHNp emUuICovCitEVUtfTE9DQUwgZHVrX3VpbnQzMl90IGR1a19fZ2V0X21pbl9ncm93X2EoZHVrX3Vp bnQzMl90IGFfc2l6ZSkgeworCWR1a191aW50MzJfdCByZXM7CisKKwlEVUtfQVNTRVJUKChkdWtf c2l6ZV90KSBhX3NpemUgPD0gRFVLX0hPQkpFQ1RfTUFYX1BST1BFUlRJRVMpOworCisJcmVzID0g KGFfc2l6ZSArIERVS19VU0VfSE9CSkVDVF9BUlJBWV9NSU5HUk9XX0FERCkgLyBEVUtfVVNFX0hP QkpFQ1RfQVJSQVlfTUlOR1JPV19ESVZJU09SOworCURVS19BU1NFUlQocmVzID49IDEpOyAgLyog aW1wb3J0YW50IGZvciBjYWxsZXJzICovCisJcmV0dXJuIHJlczsKK30KKworLyogQ291bnQgYWN0 dWFsbHkgdXNlZCBlbnRyeSBwYXJ0IGVudHJpZXMgKG5vbi1OVUxMIGtleXMpLiAqLworRFVLX0xP Q0FMIGR1a191aW50MzJfdCBkdWtfX2NvdW50X3VzZWRfZV9rZXlzKGR1a19odGhyZWFkICp0aHIs IGR1a19ob2JqZWN0ICpvYmopIHsKKwlkdWtfdWludF9mYXN0MzJfdCBpOworCWR1a191aW50X2Zh c3QzMl90IG4gPSAwOworCWR1a19oc3RyaW5nICoqZTsKKworCURVS19BU1NFUlQob2JqICE9IE5V TEwpOworCURVS19VTlJFRih0aHIpOworCisJZSA9IERVS19IT0JKRUNUX0VfR0VUX0tFWV9CQVNF KHRoci0+aGVhcCwgb2JqKTsKKwlmb3IgKGkgPSAwOyBpIDwgRFVLX0hPQkpFQ1RfR0VUX0VORVhU KG9iaik7IGkrKykgeworCQlpZiAoKmUrKykgeworCQkJbisrOworCQl9CisJfQorCXJldHVybiAo ZHVrX3VpbnQzMl90KSBuOworfQorCisvKiBDb3VudCBhY3R1YWxseSB1c2VkIGFycmF5IHBhcnQg ZW50cmllcyBhbmQgYXJyYXkgbWluaW11bSBzaXplLgorICogTk9URTogJ291dF9taW5fc2l6ZScg Y2FuIGJlIGNvbXB1dGVkIG11Y2ggZmFzdGVyIGJ5IHN0YXJ0aW5nIGZyb20gdGhlCisgKiBlbmQg YW5kIGJyZWFraW5nIG91dCBlYXJseSB3aGVuIGZpbmRpbmcgZmlyc3QgdXNlZCBlbnRyeSwgYnV0 IHRoaXMgaXMKKyAqIG5vdCBuZWVkZWQgbm93LgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Nv bXB1dGVfYV9zdGF0cyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfdWlu dDMyX3QgKm91dF91c2VkLCBkdWtfdWludDMyX3QgKm91dF9taW5fc2l6ZSkgeworCWR1a191aW50 X2Zhc3QzMl90IGk7CisJZHVrX3VpbnRfZmFzdDMyX3QgdXNlZCA9IDA7CisJZHVrX3VpbnRfZmFz dDMyX3QgaGlnaGVzdF9pZHggPSAoZHVrX3VpbnRfZmFzdDMyX3QpIC0xOyAgLyogc2VlIGJlbG93 ICovCisJZHVrX3R2YWwgKmE7CisKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKwlEVUtfQVNT RVJUKG91dF91c2VkICE9IE5VTEwpOworCURVS19BU1NFUlQob3V0X21pbl9zaXplICE9IE5VTEwp OworCURVS19VTlJFRih0aHIpOworCisJYSA9IERVS19IT0JKRUNUX0FfR0VUX0JBU0UodGhyLT5o ZWFwLCBvYmopOworCWZvciAoaSA9IDA7IGkgPCBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob2JqKTsg aSsrKSB7CisJCWR1a190dmFsICp0diA9IGErKzsKKwkJaWYgKCFEVUtfVFZBTF9JU19VTlVTRUQo dHYpKSB7CisJCQl1c2VkKys7CisJCQloaWdoZXN0X2lkeCA9IGk7CisJCX0KKwl9CisKKwkvKiBJ bml0aWFsIHZhbHVlIGZvciBoaWdoZXN0X2lkeCBpcyAtMSBjb2VyY2VkIHRvIHVuc2lnbmVkLiAg VGhpcworCSAqIGlzIGEgYml0IG9kZCwgYnV0IChoaWdoZXN0X2lkeCArIDEpIHdpbGwgdGhlbiB3 cmFwIHRvIDAgYmVsb3cKKwkgKiBmb3Igb3V0X21pbl9zaXplIGFzIGludGVuZGVkLgorCSAqLwor CisJKm91dF91c2VkID0gKGR1a191aW50MzJfdCkgdXNlZDsKKwkqb3V0X21pbl9zaXplID0gKGR1 a191aW50MzJfdCkgKGhpZ2hlc3RfaWR4ICsgMSk7ICAvKiAwIGlmIG5vIHVzZWQgZW50cmllcyAq LworfQorCisvKiBDaGVjayBhcnJheSBkZW5zaXR5IGFuZCBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5v dCB0aGUgYXJyYXkgcGFydCBzaG91bGQgYmUgYWJhbmRvbmVkLiAqLworRFVLX0xPQ0FMIGR1a19i b29sX3QgZHVrX19hYmFuZG9uX2FycmF5X2RlbnNpdHlfY2hlY2soZHVrX3VpbnQzMl90IGFfdXNl ZCwgZHVrX3VpbnQzMl90IGFfc2l6ZSkgeworCS8qCisJICogIEFycmF5IGFiYW5kb24gY2hlY2s7 IGFiYW5kb24gaWY6CisJICoKKwkgKiAgICBuZXdfdXNlZCAvIG5ld19zaXplIDwgbGltaXQKKwkg KiAgICBuZXdfdXNlZCA8IGxpbWl0ICogbmV3X3NpemUgICAgICAgIHx8IGxpbWl0IGlzIDMgYml0 cyBmaXhlZCBwb2ludAorCSAqICAgIG5ld191c2VkIDwgbGltaXQnIC8gOCAqIG5ld19zaXplICAg fHwgKjgKKwkgKiAgICA4Km5ld191c2VkIDwgbGltaXQnICogbmV3X3NpemUgICAgIHx8IDo4CisJ ICogICAgbmV3X3VzZWQgPCBsaW1pdCcgKiAobmV3X3NpemUgLyA4KQorCSAqCisJICogIEhlcmUs IG5ld191c2VkID0gYV91c2VkLCBuZXdfc2l6ZSA9IGFfc2l6ZS4KKwkgKgorCSAqICBOb3RlOiBz b21lIGNhbGxlcnMgdXNlIGFwcHJveGltYXRlIHZhbHVlcyBmb3IgYV91c2VkIGFuZC9vciBhX3Np emUKKwkgKiAgKGUuZy4gZHJvcHBpbmcgYSAnKzEnIHRlcm0pLiAgVGhpcyBkb2Vzbid0IGFmZmVj dCB0aGUgdXNlZnVsbmVzcworCSAqICBvZiB0aGUgY2hlY2ssIGJ1dCBtYXkgY29uZnVzZSBkZWJ1 Z2dpbmcuCisJICovCisKKwlyZXR1cm4gKGFfdXNlZCA8IERVS19VU0VfSE9CSkVDVF9BUlJBWV9B QkFORE9OX0xJTUlUICogKGFfc2l6ZSA+PiAzKSk7Cit9CisKKy8qIEZhc3QgY2hlY2sgZm9yIGV4 dGVuZGluZyBhcnJheTogY2hlY2sgd2hldGhlciBvciBub3QgYSBzbG93IGRlbnNpdHkgY2hlY2sg aXMgcmVxdWlyZWQuICovCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2FiYW5kb25fYXJyYXlf c2xvd19jaGVja19yZXF1aXJlZChkdWtfdWludDMyX3QgYXJyX2lkeCwgZHVrX3VpbnQzMl90IG9s ZF9zaXplKSB7CisJLyoKKwkgKiAgSW4gYSBmYXN0IGNoZWNrIHdlIGFzc3VtZSBvbGRfc2l6ZSBl cXVhbHMgb2xkX3VzZWQgKGkuZS4sIGV4aXN0aW5nCisJICogIGFycmF5IGlzIGZ1bGx5IGRlbnNl KS4KKwkgKgorCSAqICBTbG93IGNoZWNrIGlmOgorCSAqCisJICogICAgKG5ld19zaXplIC0gb2xk X3NpemUpIC8gb2xkX3NpemUgPiBsaW1pdAorCSAqICAgIG5ld19zaXplIC0gb2xkX3NpemUgPiBs aW1pdCAqIG9sZF9zaXplCisJICogICAgbmV3X3NpemUgPiAoMSArIGxpbWl0KSAqIG9sZF9zaXpl ICAgICAgICB8fCBsaW1pdCcgaXMgMyBiaXRzIGZpeGVkIHBvaW50CisJICogICAgbmV3X3NpemUg PiAoMSArIChsaW1pdCcgLyA4KSkgKiBvbGRfc2l6ZSB8fCAqIDgKKwkgKiAgICA4ICogbmV3X3Np emUgPiAoOCArIGxpbWl0JykgKiBvbGRfc2l6ZSAgIHx8IDogOAorCSAqICAgIG5ld19zaXplID4g KDggKyBsaW1pdCcpICogKG9sZF9zaXplIC8gOCkKKwkgKiAgICBuZXdfc2l6ZSA+IGxpbWl0Jycg KiAob2xkX3NpemUgLyA4KSAgICAgIHx8IGxpbWl0JycgPSA5IC0+IG1heCAyNSUgaW5jcmVhc2UK KwkgKiAgICBhcnJfaWR4ICsgMSA+IGxpbWl0JycgKiAob2xkX3NpemUgLyA4KQorCSAqCisJICog IFRoaXMgY2hlY2sgZG9lc24ndCB3b3JrIHdlbGwgZm9yIHNtYWxsIHZhbHVlcywgc28gb2xkX3Np emUgaXMgcm91bmRlZAorCSAqICB1cCBmb3IgdGhlIGNoZWNrIChhbmQgdGhlICcrIDEnIG9mIGFy cl9pZHggY2FuIGJlIGlnbm9yZWQgaW4gcHJhY3RpY2UpOgorCSAqCisJICogICAgYXJyX2lkeCA+ IGxpbWl0JycgKiAoKG9sZF9zaXplICsgNykgLyA4KQorCSAqLworCisJcmV0dXJuIChhcnJfaWR4 ID4gRFVLX1VTRV9IT0JKRUNUX0FSUkFZX0ZBU1RfUkVTSVpFX0xJTUlUICogKChvbGRfc2l6ZSAr IDcpID4+IDMpKTsKK30KKworLyoKKyAqICBQcm94eSBoZWxwZXJzCisgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9FUzZfUFJPWFkpCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaG9iamVj dF9wcm94eV9jaGVjayhkdWtfaG9iamVjdCAqb2JqLCBkdWtfaG9iamVjdCAqKm91dF90YXJnZXQs IGR1a19ob2JqZWN0ICoqb3V0X2hhbmRsZXIpIHsKKwlkdWtfaHByb3h5ICpoX3Byb3h5OworCisJ RFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvdXRfdGFyZ2V0ICE9IE5VTEwp OworCURVS19BU1NFUlQob3V0X2hhbmRsZXIgIT0gTlVMTCk7CisKKwkvKiBDYWxsZXIgZG9lc24n dCBuZWVkIHRvIGNoZWNrIGV4b3RpYyBwcm94eSBiZWhhdmlvciAoYnV0IGRvZXMgc28gZm9yCisJ ICogc29tZSBmYXN0IHBhdGhzKS4KKwkgKi8KKwlpZiAoRFVLX0xJS0VMWSghRFVLX0hPQkpFQ1Rf SVNfUFJPWFkob2JqKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCWhfcHJveHkgPSAoZHVrX2hwcm94 eSAqKSBvYmo7CisJRFVLX0FTU0VSVF9IUFJPWFlfVkFMSUQoaF9wcm94eSk7CisKKwlEVUtfQVNT RVJUKGhfcHJveHktPmhhbmRsZXIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChoX3Byb3h5LT50YXJn ZXQgIT0gTlVMTCk7CisJKm91dF9oYW5kbGVyID0gaF9wcm94eS0+aGFuZGxlcjsKKwkqb3V0X3Rh cmdldCA9IGhfcHJveHktPnRhcmdldDsKKworCXJldHVybiAxOworfQorI2VuZGlmICAvKiBEVUtf VVNFX0VTNl9QUk9YWSAqLworCisvKiBHZXQgUHJveHkgdGFyZ2V0IG9iamVjdC4gIElmIHRoZSBh cmd1bWVudCBpcyBub3QgYSBQcm94eSwgcmV0dXJuIGl0IGFzIGlzLgorICogSWYgYSBQcm94eSBp cyByZXZva2VkLCBhbiBlcnJvciBpcyB0aHJvd24uCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0Vf RVM2X1BST1hZKQorRFVLX0lOVEVSTkFMIGR1a19ob2JqZWN0ICpkdWtfaG9iamVjdF9yZXNvbHZl X3Byb3h5X3RhcmdldChkdWtfaG9iamVjdCAqb2JqKSB7CisJRFVLX0FTU0VSVChvYmogIT0gTlVM TCk7CisKKwkvKiBSZXNvbHZlIFByb3h5IHRhcmdldHMgdW50aWwgUHJveHkgY2hhaW4gZW5kcy4g IE5vIGV4cGxpY2l0IGNoZWNrIGZvcgorCSAqIGEgUHJveHkgbG9vcDogdXNlciBjb2RlIGNhbm5v dCBjcmVhdGUgc3VjaCBhIGxvb3AgKGl0IHdvdWxkIG9ubHkgYmUKKwkgKiBwb3NzaWJsZSBieSBl ZGl0aW5nIGR1a19ocHJveHkgcmVmZXJlbmNlcyBkaXJlY3RseSkuCisJICovCisKKwl3aGlsZSAo RFVLX0hPQkpFQ1RfSVNfUFJPWFkob2JqKSkgeworCQlkdWtfaHByb3h5ICpoX3Byb3h5OworCisJ CWhfcHJveHkgPSAoZHVrX2hwcm94eSAqKSBvYmo7CisJCURVS19BU1NFUlRfSFBST1hZX1ZBTElE KGhfcHJveHkpOworCQlvYmogPSBoX3Byb3h5LT50YXJnZXQ7CisJCURVS19BU1NFUlQob2JqICE9 IE5VTEwpOworCX0KKworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCXJldHVybiBvYmo7Cit9 CisjZW5kaWYgIC8qIERVS19VU0VfRVM2X1BST1hZICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf RVM2X1BST1hZKQorRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19wcm94eV9jaGVja19wcm9wKGR1 a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpvYmosIGR1a19zbWFsbF91aW50X3Qgc3RyaWR4 X3RyYXAsIGR1a190dmFsICp0dl9rZXksIGR1a19ob2JqZWN0ICoqb3V0X3RhcmdldCkgeworCWR1 a19ob2JqZWN0ICpoX2hhbmRsZXI7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKG9iaiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X2tleSAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKG91dF90YXJnZXQgIT0gTlVMTCk7CisKKwlpZiAoIWR1a19ob2JqZWN0X3Byb3h5X2No ZWNrKG9iaiwgb3V0X3RhcmdldCwgJmhfaGFuZGxlcikpIHsKKwkJcmV0dXJuIDA7CisJfQorCURV S19BU1NFUlQoKm91dF90YXJnZXQgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChoX2hhbmRsZXIgIT0g TlVMTCk7CisKKwkvKiBYWFg6IEF0IHRoZSBtb21lbnQgRHVrdGFwZSBhY2Nlc3NlcyBpbnRlcm5h bCBrZXlzIGxpa2UgX0ZpbmFsaXplciB1c2luZyBhCisJICogbm9ybWFsIHByb3BlcnR5IHNldC9n ZXQgd2hpY2ggd291bGQgYWxsb3cgYSBwcm94eSBoYW5kbGVyIHRvIGludGVyZmVyZSB3aXRoCisJ ICogc3VjaCBiZWhhdmlvciBhbmQgdG8gZ2V0IGFjY2VzcyB0byBpbnRlcm5hbCBrZXkgc3RyaW5n cy4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbQorCSAqIGFzIHN1Y2ggYmVjYXVzZSBpbnRlcm5hbCBr ZXkgc3RyaW5ncyBjYW4gYmUgY3JlYXRlZCBpbiBvdGhlciB3YXlzIHRvbyAoZS5nLgorCSAqIHRo cm91Z2ggYnVmZmVycykuICBUaGUgYmVzdCBmaXggaXMgdG8gY2hhbmdlIER1a3RhcGUgaW50ZXJu YWwgbG9va3VwcyB0bworCSAqIHNraXAgcHJveHkgYmVoYXZpb3IuICBVbnRpbCB0aGF0LCBpbnRl cm5hbCBwcm9wZXJ0eSBhY2Nlc3NlcyBieXBhc3MgdGhlCisJICogcHJveHkgYW5kIGFyZSBhcHBs aWVkIHRvIHRoZSB0YXJnZXQgKGFzIGlmIHRoZSBoYW5kbGVyIGRpZCBub3QgZXhpc3QpLgorCSAq IFRoaXMgaGFzIHNvbWUgc2lkZSBlZmZlY3RzLCBzZWUgdGVzdC1iaS1wcm94eS1pbnRlcm5hbC1r ZXlzLmpzLgorCSAqLworCisJaWYgKERVS19UVkFMX0lTX1NUUklORyh0dl9rZXkpKSB7CisJCWR1 a19oc3RyaW5nICpoX2tleSA9IChkdWtfaHN0cmluZyAqKSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2 X2tleSk7CisJCURVS19BU1NFUlQoaF9rZXkgIT0gTlVMTCk7CisJCWlmIChEVUtfSFNUUklOR19I QVNfSElEREVOKGhfa2V5KSkgeworCQkJLyogU3ltYm9sIGFjY2Vzc2VzIG11c3QgZ28gdGhyb3Vn aCBwcm94eSBsb29rdXAgaW4gRVMyMDE1LgorCQkJICogSGlkZGVuIHN5bWJvbHMgYmVoYXZlIGxp a2UgRHVrdGFwZSAxLnggaW50ZXJuYWwga2V5cworCQkJICogYW5kIGN1cnJlbnRseSB3b24ndC4K KwkJCSAqLworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImhpZGRlbiBrZXksIHNraXAgcHJveHkg aGFuZGxlciBhbmQgYXBwbHkgdG8gdGFyZ2V0IikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisK KwkvKiBUaGUgaGFuZGxlciBpcyBsb29rZWQgdXAgd2l0aCBhIG5vcm1hbCBwcm9wZXJ0eSBsb29r dXA7IGl0IG1heSBiZSBhbgorCSAqIGFjY2Vzc29yIG9yIHRoZSBoYW5kbGVyIG9iamVjdCBpdHNl bGYgbWF5IGJlIGEgcHJveHkgb2JqZWN0LiAgSWYgdGhlCisJICogaGFuZGxlciBpcyBhIHByb3h5 LCB3ZSBuZWVkIHRvIGV4dGVuZCB0aGUgdmFsc3RhY2sgYXMgd2UgbWFrZSBhCisJICogcmVjdXJz aXZlIHByb3h5IGNoZWNrIHdpdGhvdXQgYSBmdW5jdGlvbiBjYWxsIGluIGJldHdlZW4gKGluIGZh Y3QKKwkgKiB0aGVyZSBpcyBubyBsaW1pdCB0byB0aGUgcG90ZW50aWFsIHJlY3Vyc2lvbiBoZXJl KS4KKwkgKgorCSAqIChGb3Igc2FuaXR5LCBwcm94eSBjcmVhdGlvbiByZWplY3RzIGFub3RoZXIg cHJveHkgb2JqZWN0IGFzIGVpdGhlcgorCSAqIHRoZSBoYW5kbGVyIG9yIHRoZSB0YXJnZXQgYXQg dGhlIG1vbWVudCBzbyByZWN1cnNpdmUgcHJveHkgY2FzZXMKKwkgKiBhcmUgbm90IHJlYWxpemVk IG5vdy4pCisJICovCisKKwkvKiBYWFg6IEMgcmVjdXJzaW9uIGxpbWl0IGlmIHByb3hpZXMgYXJl IGFsbG93ZWQgYXMgaGFuZGxlci90YXJnZXQgdmFsdWVzICovCisKKwlkdWtfcmVxdWlyZV9zdGFj ayh0aHIsIERVS19fVkFMU1RBQ0tfUFJPWFlfTE9PS1VQKTsKKwlkdWtfcHVzaF9ob2JqZWN0KHRo ciwgaF9oYW5kbGVyKTsKKwlpZiAoZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0xLCBz dHJpZHhfdHJhcCkpIHsKKwkJLyogLT4gWyAuLi4gaGFuZGxlciB0cmFwIF0gKi8KKwkJZHVrX2lu c2VydCh0aHIsIC0yKTsgIC8qIC0+IFsgLi4uIHRyYXAgaGFuZGxlciBdICovCisKKwkJLyogc3Rh Y2sgcHJlcHBlZCBmb3IgZnVuYyBjYWxsOiBbIC4uLiB0cmFwIGhhbmRsZXIgXSAqLworCQlyZXR1 cm4gMTsKKwl9IGVsc2UgeworCQlkdWtfcG9wXzJfdW5zYWZlKHRocik7CisJCXJldHVybiAwOwor CX0KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9FUzZfUFJPWFkgKi8KKworLyoKKyAqICBSZWFsbG9j YXRlIHByb3BlcnR5IGFsbG9jYXRpb24sIG1vdmluZyBwcm9wZXJ0aWVzIHRvIHRoZSBuZXcgYWxs b2NhdGlvbi4KKyAqCisgKiAgSW5jbHVkZXMga2V5IGNvbXBhY3Rpb24sIHJlaGFzaGluZywgYW5k IGNhbiBhbHNvIG9wdGlvbmFsbHkgYWJhbmRvbgorICogIHRoZSBhcnJheSBwYXJ0LCAnbWlncmF0 aW5nJyBhcnJheSBlbnRyaWVzIGludG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAqICBuZXcgZW50 cnkgcGFydC4KKyAqCisgKiAgVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgaW4tcGxhY2UgcmVhbGxv Y2F0aW9uIG9yIGp1c3QgY29tcGFjdGluZyBrZXlzCisgKiAgd2l0aG91dCByZXNpemluZyB0aGUg cHJvcGVydHkgYWxsb2NhdGlvbi4gIFRoaXMgaXMgaW50ZW50aW9uYWwgdG8ga2VlcAorICogIGNv ZGUgc2l6ZSBtaW5pbWFsLCBidXQgd291bGQgYmUgdXNlZnVsIGZ1dHVyZSB3b3JrLgorICoKKyAq ICBUaGUgaW1wbGVtZW50YXRpb24gaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGV4Y2Vw dCBmb3IgdGhlIGFycmF5CisgKiAgYWJhbmRvbm1lbnQgcHJvY2Vzcy4gIEFycmF5IGFiYW5kb25t ZW50IHJlcXVpcmVzIHRoYXQgbmV3IHN0cmluZyBrZXlzCisgKiAgYXJlIGludGVybmVkLCB3aGlj aCBtYXkgdHJpZ2dlciBHQy4gIEFsbCBrZXlzIGludGVybmVkIHNvIGZhciBtdXN0IGJlCisgKiAg cmVhY2hhYmxlIGZvciBHQyBhdCBhbGwgdGltZXMgYW5kIGNvcnJlY3RseSByZWZjb3VudGVkIGZv cjsgdmFsc3RhY2sgaXMKKyAqICB1c2VkIGZvciB0aGF0IG5vdy4KKyAqCisgKiAgQWxzbywgYSBH QyB0cmlnZ2VyZWQgZHVyaW5nIHRoaXMgcmVhbGxvY2F0aW9uIHByb2Nlc3MgbXVzdCBub3QgaW50 ZXJmZXJlCisgKiAgd2l0aCB0aGUgb2JqZWN0IGJlaW5nIHJlc2l6ZWQuICBUaGlzIGlzIGN1cnJl bnRseSBjb250cm9sbGVkIGJ5IHByZXZlbnRpbmcKKyAqICBmaW5hbGl6ZXJzIChhcyB0aGV5IG1h eSBhZmZlY3QgQU5ZIG9iamVjdCkgYW5kIG9iamVjdCBjb21wYWN0aW9uIGluCisgKiAgbWFyay1h bmQtc3dlZXAuICBJdCB3b3VsZCBzdWZmaWNlIHRvIHByb3RlY3Qgb25seSB0aGlzIHBhcnRpY3Vs YXIgb2JqZWN0CisgKiAgZnJvbSBjb21wYWN0aW9uLCBob3dldmVyLiAgREVDUkVGIHJlZnplcm8g Y2FzY2FkZXMgYXJlIHNpZGUgZWZmZWN0IGZyZWUKKyAqICBhbmQgT0suCisgKgorICogIE5vdGU6 IGJlY2F1c2Ugd2UgbmVlZCB0byBwb3RlbnRpYWxseSByZXNpemUgdGhlIHZhbHN0YWNrIChhcyBw YXJ0CisgKiAgb2YgYWJhbmRvbmluZyB0aGUgYXJyYXkgcGFydCksIGFueSB0dmFsIHBvaW50ZXJz IHRvIHRoZSB2YWxzdGFjaworICogIHdpbGwgYmVjb21lIGludmFsaWQgYWZ0ZXIgdGhpcyBjYWxs LgorICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19ob2JqZWN0X3JlYWxsb2NfcHJvcHMoZHVr X2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX2hvYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX3VpbnQzMl90IG5ld19lX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGR1a191aW50MzJfdCBuZXdfYV9zaXplLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfdWludDMyX3QgbmV3X2hfc2l6 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xf dCBhYmFuZG9uX2FycmF5KSB7CisJZHVrX3NtYWxsX3VpbnRfdCBwcmV2X21zX2Jhc2VfZmxhZ3M7 CisJZHVrX3VpbnQzMl90IG5ld19hbGxvY19zaXplOworCWR1a191aW50MzJfdCBuZXdfZV9zaXpl X2FkanVzdGVkOworCWR1a191aW50OF90ICpuZXdfcDsKKwlkdWtfaHN0cmluZyAqKm5ld19lX2s7 CisJZHVrX3Byb3B2YWx1ZSAqbmV3X2VfcHY7CisJZHVrX3VpbnQ4X3QgKm5ld19lX2Y7CisJZHVr X3R2YWwgKm5ld19hOworCWR1a191aW50MzJfdCAqbmV3X2g7CisJZHVrX3VpbnQzMl90IG5ld19l X25leHQ7CisJZHVrX3VpbnRfZmFzdDMyX3QgaTsKKwlkdWtfc2l6ZV90IGFycmF5X2NvcHlfc2l6 ZTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfYm9vbF90IHByZXZfZXJy b3Jfbm90X2FsbG93ZWQ7CisjZW5kaWYKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURV S19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19BU1NFUlQoIWFiYW5kb25fYXJyYXkgfHwgbmV3 X2Ffc2l6ZSA9PSAwKTsgIC8qIGlmIGFiYW5kb25fYXJyYXksIG5ld19hX3NpemUgbXVzdCBiZSAw ICovCisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPUFModGhyLT5oZWFwLCBvYmopICE9 IE5VTEwgfHwgKERVS19IT0JKRUNUX0dFVF9FU0laRShvYmopID09IDAgJiYgRFVLX0hPQkpFQ1Rf R0VUX0FTSVpFKG9iaikgPT0gMCkpOworCURVS19BU1NFUlQobmV3X2hfc2l6ZSA9PSAwIHx8IG5l d19oX3NpemUgPj0gbmV3X2Vfc2l6ZSk7ICAvKiByZXF1aXJlZCB0byBndWFyYW50ZWUgc3VjY2Vz cyBvZiByZWhhc2hpbmcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIGludGVudGlvbmFsbHkgdXNlIHVuYWRqdXN0ZWQgbmV3X2Vf c2l6ZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KKwlEVUtfQVNTRVJUKCFEVUtfSEVBUEhEUl9IQVNfUkVBRE9OTFkoKGR1a19o ZWFwaGRyICopIG9iaikpOworCURVS19BU1NFUlRfVkFMU1RBQ0tfU1BBQ0UodGhyLCBEVUtfX1ZB TFNUQUNLX1NQQUNFKTsKKworCURVS19TVEFUU19JTkModGhyLT5oZWFwLCBzdGF0c19vYmplY3Rf cmVhbGxvY19wcm9wcyk7CisKKwkvKgorCSAqICBQcmUgcmVzaXplIGFzc2VydGlvbnMuCisJICov CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwkvKiBYWFg6IHByZS1jaGVja3Mg KHN1Y2ggYXMgbm8gZHVwbGljYXRlIGtleXMpICovCisjZW5kaWYKKworCS8qCisJICogIEZvciBw cm9wZXJ0eSBsYXlvdXQgMSwgdHdlYWsgZV9zaXplIHRvIGVuc3VyZSB0aGF0IHRoZSB3aG9sZSBl bnRyeQorCSAqICBwYXJ0IChrZXkgKyB2YWwgKyBmbGFncykgaXMgYSBzdWl0YWJsZSBtdWx0aXBs ZSBmb3IgYWxpZ25tZW50CisJICogIChwbGF0Zm9ybSBzcGVjaWZpYykuCisJICoKKwkgKiAgUHJv cGVydHkgbGF5b3V0IDIgZG9lcyBub3QgcmVxdWlyZSB0aGlzIHR3ZWFraW5nIGFuZCBpcyBwcmVm ZXJyZWQKKwkgKiAgb24gbG93IFJBTSBwbGF0Zm9ybXMgcmVxdWlyaW5nIGFsaWdubWVudC4KKwkg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9IT0JKRUNUX0xBWU9VVF8yKSB8fCBkZWZpbmVkKERV S19VU0VfSE9CSkVDVF9MQVlPVVRfMykKKwlEVUtfREREKERVS19ERERQUklOVCgidXNpbmcgbGF5 b3V0IDIgb3IgMywgbm8gbmVlZCB0byBwYWQgZV9zaXplOiAlbGQiLCAobG9uZykgbmV3X2Vfc2l6 ZSkpOworCW5ld19lX3NpemVfYWRqdXN0ZWQgPSBuZXdfZV9zaXplOworI2VsaWYgZGVmaW5lZChE VUtfVVNFX0hPQkpFQ1RfTEFZT1VUXzEpICYmIChEVUtfSE9CSkVDVF9BTElHTl9UQVJHRVQgPT0g MSkKKwlEVUtfREREKERVS19ERERQUklOVCgidXNpbmcgbGF5b3V0IDEsIGJ1dCBubyBuZWVkIHRv IHBhZCBlX3NpemU6ICVsZCIsIChsb25nKSBuZXdfZV9zaXplKSk7CisJbmV3X2Vfc2l6ZV9hZGp1 c3RlZCA9IG5ld19lX3NpemU7CisjZWxpZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9MQVlPVVRf MSkgJiYgKChEVUtfSE9CSkVDVF9BTElHTl9UQVJHRVQgPT0gNCkgfHwgKERVS19IT0JKRUNUX0FM SUdOX1RBUkdFVCA9PSA4KSkKKwluZXdfZV9zaXplX2FkanVzdGVkID0gKG5ld19lX3NpemUgKyAo ZHVrX3VpbnQzMl90KSBEVUtfSE9CSkVDVF9BTElHTl9UQVJHRVQgLSAxVSkgJgorCSAgICAgICAg ICAgICAgICAgICAgICAofigoZHVrX3VpbnQzMl90KSBEVUtfSE9CSkVDVF9BTElHTl9UQVJHRVQg LSAxVSkpOworCURVS19EREQoRFVLX0RERFBSSU5UKCJ1c2luZyBsYXlvdXQgMSwgYW5kIGFsaWdu bWVudCB0YXJnZXQgaXMgJWxkLCBhZGp1c3RlZCBlX3NpemU6ICVsZCAtPiAlbGQiLAorCSAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBEVUtfSE9CSkVDVF9BTElHTl9UQVJHRVQsIChsb25nKSBu ZXdfZV9zaXplLCAobG9uZykgbmV3X2Vfc2l6ZV9hZGp1c3RlZCkpOworCURVS19BU1NFUlQobmV3 X2Vfc2l6ZV9hZGp1c3RlZCA+PSBuZXdfZV9zaXplKTsKKyNlbHNlCisjZXJyb3IgaW52YWxpZCBo b2JqZWN0IGxheW91dCBkZWZpbmVzCisjZW5kaWYKKworCS8qCisJICogIERlYnVnIGxvZ2dpbmcg YWZ0ZXIgYWRqdXN0bWVudC4KKwkgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJhdHRlbXB0 IHRvIHJlc2l6ZSBob2JqZWN0ICVwIHByb3BzICglbGQgLT4gJWxkIGJ5dGVzKSwgZnJvbSB7cD0l cCxlX3NpemU9JWxkLGVfbmV4dD0lbGQsYV9zaXplPSVsZCxoX3NpemU9JWxkfSB0byAiCisJICAg ICAgICAgICAgICAgICAgICAgIntlX3NpemU9JWxkLGFfc2l6ZT0lbGQsaF9zaXplPSVsZH0sIGFi YW5kb25fYXJyYXk9JWxkLCB1bmFkanVzdGVkIG5ld19lX3NpemU9JWxkIiwKKwkgICAgICAgICAg ICAgICAgICAgICAodm9pZCAqKSBvYmosCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIERV S19IT0JKRUNUX1BfQ09NUFVURV9TSVpFKERVS19IT0JKRUNUX0dFVF9FU0laRShvYmopLAorCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtf SE9CSkVDVF9HRVRfQVNJWkUob2JqKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKG9iaikpLAorCSAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfSE9CSkVDVF9QX0NPTVBVVEVfU0laRShuZXdf ZV9zaXplX2FkanVzdGVkLCBuZXdfYV9zaXplLCBuZXdfaF9zaXplKSwKKwkgICAgICAgICAgICAg ICAgICAgICAodm9pZCAqKSBEVUtfSE9CSkVDVF9HRVRfUFJPUFModGhyLT5oZWFwLCBvYmopLAor CSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfSE9CSkVDVF9HRVRfRVNJWkUob2JqKSwK KwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0hPQkpFQ1RfR0VUX0VORVhUKG9iaiks CisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIERVS19IT0JKRUNUX0dFVF9BU0laRShvYmop LAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfSE9CSkVDVF9HRVRfSFNJWkUob2Jq KSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgbmV3X2Vfc2l6ZV9hZGp1c3RlZCwKKwkg ICAgICAgICAgICAgICAgICAgICAobG9uZykgbmV3X2Ffc2l6ZSwKKwkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgbmV3X2hfc2l6ZSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgYWJh bmRvbl9hcnJheSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgbmV3X2Vfc2l6ZSkpOwor CisJLyoKKwkgKiAgUHJvcGVydHkgY291bnQgY2hlY2suICBUaGlzIGlzIHRoZSBvbmx5IHBvaW50 IHdoZXJlIHdlIGVuc3VyZSB0aGF0CisJICogIHdlIGRvbid0IGdldCBtb3JlIChhbGxvY2F0ZWQp IHByb3BlcnR5IHNwYWNlIHRoYXQgd2UgY2FuIGhhbmRsZS4KKwkgKiAgVGhlcmUgYXJlbid0IGhh cmQgbGltaXRzIGFzIHN1Y2gsIGJ1dCBzb21lIGFsZ29yaXRobXMgbWF5IGZhaWwKKwkgKiAgaWYg d2UgZ2V0IHRvbyBjbG9zZSB0byB0aGUgNEcgcHJvcGVydHkgbGltaXQuCisJICoKKwkgKiAgU2lu Y2UgdGhpcyB3b3JrcyBiYXNlZCBvbiBhbGxvY2F0aW9uIHNpemUgKG5vdCBhY3R1YWxseSB1c2Vk IHNpemUpLAorCSAqICB0aGUgbGltaXQgaXMgYSBiaXQgYXBwcm94aW1hdGUgYnV0IGdvb2QgZW5v dWdoIGluIHByYWN0aWNlLgorCSAqLworCisJaWYgKG5ld19lX3NpemVfYWRqdXN0ZWQgKyBuZXdf YV9zaXplID4gRFVLX0hPQkpFQ1RfTUFYX1BST1BFUlRJRVMpIHsKKwkJRFVLX0VSUk9SX0FMTE9D X0ZBSUxFRCh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJLyoKKwkg KiAgQ29tcHV0ZSBuZXcgYWxsb2Mgc2l6ZSBhbmQgYWxsb2MgbmV3IGFyZWEuCisJICoKKwkgKiAg VGhlIG5ldyBhcmVhIGlzIG5vdCB0cmFja2VkIGluIHRoZSBoZWFwIGF0IGFsbCwgc28gaXQncyBj cml0aWNhbAorCSAqICB3ZSBnZXQgdG8gZnJlZS9rZWVwIGl0IGluIGEgY29udHJvbGxlZCBtYW5u ZXIuCisJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwkvKiBXaG9sZSBw YXRoIG11c3QgYmUgZXJyb3IgdGhyb3cgZnJlZSwgYnV0IHdlIG1heSBiZSBjYWxsZWQgZnJvbQor CSAqIHdpdGhpbiBlcnJvciBoYW5kbGluZyBzbyBjYW4ndCBhc3NlcnQgZm9yIGVycm9yX25vdF9h bGxvd2VkID09IDAuCisJICovCisJcHJldl9lcnJvcl9ub3RfYWxsb3dlZCA9IHRoci0+aGVhcC0+ ZXJyb3Jfbm90X2FsbG93ZWQ7CisJdGhyLT5oZWFwLT5lcnJvcl9ub3RfYWxsb3dlZCA9IDE7Cisj ZW5kaWYKKwlwcmV2X21zX2Jhc2VfZmxhZ3MgPSB0aHItPmhlYXAtPm1zX2Jhc2VfZmxhZ3M7CisJ dGhyLT5oZWFwLT5tc19iYXNlX2ZsYWdzIHw9CisJICAgICAgICBEVUtfTVNfRkxBR19OT19PQkpF Q1RfQ09NUEFDVElPTjsgICAgICAvKiBBdm9pZCBhdHRlbXB0IHRvIGNvbXBhY3QgdGhlIGN1cnJl bnQgb2JqZWN0IChhbGwgb2JqZWN0cyByZWFsbHkpLiAqLworCXRoci0+aGVhcC0+cGZfcHJldmVu dF9jb3VudCsrOyAgICAgICAgICAgICAgICAgLyogQXZvaWQgZmluYWxpemVycy4gKi8KKwlEVUtf QVNTRVJUKHRoci0+aGVhcC0+cGZfcHJldmVudF9jb3VudCAhPSAwKTsgIC8qIFdyYXAuICovCisK KwluZXdfYWxsb2Nfc2l6ZSA9IERVS19IT0JKRUNUX1BfQ09NUFVURV9TSVpFKG5ld19lX3NpemVf YWRqdXN0ZWQsIG5ld19hX3NpemUsIG5ld19oX3NpemUpOworCURVS19EREQoRFVLX0RERFBSSU5U KCJuZXcgaG9iamVjdCBhbGxvY2F0aW9uIHNpemUgaXMgJWxkIiwgKGxvbmcpIG5ld19hbGxvY19z aXplKSk7CisJaWYgKG5ld19hbGxvY19zaXplID09IDApIHsKKwkJRFVLX0FTU0VSVChuZXdfZV9z aXplX2FkanVzdGVkID09IDApOworCQlEVUtfQVNTRVJUKG5ld19hX3NpemUgPT0gMCk7CisJCURV S19BU1NFUlQobmV3X2hfc2l6ZSA9PSAwKTsKKwkJbmV3X3AgPSBOVUxMOworCX0gZWxzZSB7CisJ CS8qIEFsbG9jIG1heSB0cmlnZ2VyIG1hcmstYW5kLXN3ZWVwIGJ1dCBubyBjb21wYWN0aW9uLCBh bmQKKwkJICogY2Fubm90IHRocm93LgorCQkgKi8KKyNpZiAwICAvKiBYWFg6IGluamVjdCB0ZXN0 ICovCisJCWlmICgxKSB7CisJCQluZXdfcCA9IE5VTEw7CisJCQlnb3RvIGFsbG9jX2ZhaWxlZDsK KwkJfQorI2VuZGlmCisJCW5ld19wID0gKGR1a191aW50OF90ICopIERVS19BTExPQyh0aHItPmhl YXAsIG5ld19hbGxvY19zaXplKTsKKwkJaWYgKG5ld19wID09IE5VTEwpIHsKKwkJCS8qIE5VTEwg YWx3YXlzIGluZGljYXRlcyBhbGxvYyBmYWlsdXJlIGJlY2F1c2UKKwkJCSAqIG5ld19hbGxvY19z aXplID4gMC4KKwkJCSAqLworCQkJZ290byBhbGxvY19mYWlsZWQ7CisJCX0KKwl9CisKKwkvKiBT ZXQgdXAgcG9pbnRlcnMgdG8gdGhlIG5ldyBwcm9wZXJ0eSBhcmVhOiB0aGlzIGlzIGhpZGRlbiBi ZWhpbmQgYSBtYWNybworCSAqIGJlY2F1c2UgaXQgaXMgbWVtb3J5IGxheW91dCBzcGVjaWZpYy4K KwkgKi8KKwlEVUtfSE9CSkVDVF9QX1NFVF9SRUFMTE9DX1BUUlMobmV3X3AsIG5ld19lX2ssIG5l d19lX3B2LCBuZXdfZV9mLCBuZXdfYSwgbmV3X2gsCisJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5ld19lX3NpemVfYWRqdXN0ZWQsIG5ld19hX3NpemUsIG5ld19oX3NpemUpOworCURV S19VTlJFRihuZXdfaCk7ICAvKiBoYXBwZW5zIHdoZW4gaGFzaCBwYXJ0IGRyb3BwZWQgKi8KKwlu ZXdfZV9uZXh0ID0gMDsKKworCS8qIGlmIG5ld19wID09IE5VTEwsIGFsbCBvZiB0aGVzZSBwb2lu dGVycyBhcmUgTlVMTCAqLworCURVS19BU1NFUlQoKG5ld19wICE9IE5VTEwpIHx8CisJICAgICAg ICAgICAobmV3X2VfayA9PSBOVUxMICYmIG5ld19lX3B2ID09IE5VTEwgJiYgbmV3X2VfZiA9PSBO VUxMICYmCisJICAgICAgICAgICAgbmV3X2EgPT0gTlVMTCAmJiBuZXdfaCA9PSBOVUxMKSk7CisK KwlEVUtfREREKERVS19ERERQUklOVCgibmV3IGFsbG9jIHNpemUgJWxkLCBuZXdfZV9rPSVwLCBu ZXdfZV9wdj0lcCwgbmV3X2VfZj0lcCwgbmV3X2E9JXAsIG5ld19oPSVwIiwKKwkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgbmV3X2FsbG9jX3NpemUsICh2b2lkICopIG5ld19lX2ssICh2b2lk ICopIG5ld19lX3B2LCAodm9pZCAqKSBuZXdfZV9mLAorCSAgICAgICAgICAgICAgICAgICAgICh2 b2lkICopIG5ld19hLCAodm9pZCAqKSBuZXdfaCkpOworCisJLyoKKwkgKiAgTWlncmF0ZSBhcnJh eSBwYXJ0IHRvIHN0YXJ0IG9mIGVudHJpZXMgaWYgcmVxdWVzdGVkLgorCSAqCisJICogIE5vdGU6 IGZyb20gYW4gZW51bWVyYXRpb24gcGVyc3BlY3RpdmUgdGhlIG9yZGVyIG9mIGVudHJ5IGtleXMg bWF0dGVycy4KKwkgKiAgQXJyYXkga2V5cyBzaG91bGQgYXBwZWFyIHdoZXJldmVyIHRoZXkgYXBw ZWFyZWQgYmVmb3JlIHRoZSBhcnJheSBhYmFuZG9uCisJICogIG9wZXJhdGlvbi4gIChUaGlzIG5v IGxvbmdlciBtYXR0ZXJzIG11Y2ggYmVjYXVzZSBrZXlzIGFyZSBFUzIwMTUgc29ydGVkLikKKwkg Ki8KKworCWlmIChhYmFuZG9uX2FycmF5KSB7CisJCS8qIEFzc3VtaW5nIG5ld19hX3NpemUgPT0g MCwgYW5kIHRoYXQgZW50cnkgcGFydCBjb250YWlucworCQkgKiBubyBjb25mbGljdGluZyBrZXlz LCByZWZjb3VudHMgZG8gbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQgZm9yCisJCSAqIHRoZSB2YWx1 ZXMsIGFzIHRoZXkgcmVtYWluIGV4YWN0bHkgdGhlIHNhbWUuCisJCSAqCisJCSAqIFRoZSBrZXlz LCBob3dldmVyLCBuZWVkIHRvIGJlIGludGVybmVkLCBpbmNyZWYnZCwgYW5kIGJlCisJCSAqIHJl YWNoYWJsZSBmb3IgR0MuICBBbnkgaW50ZXJuIGF0dGVtcHQgbWF5IHRyaWdnZXIgYSBHQyBhbmQK KwkJICogY2xhaW0gYW55IG5vbi1yZWFjaGFibGUgc3RyaW5ncywgc28gZXZlcnkga2V5IG11c3Qg YmUgcmVhY2hhYmxlCisJCSAqIGF0IGFsbCB0aW1lcy4gIFJlZmNvdW50cyBtdXN0IGJlIGNvcnJl Y3QgdG8gc2F0aXNmeSByZWZjb3VudAorCQkgKiBhc3NlcnRpb25zLgorCQkgKgorCQkgKiBBIGxv bmdqbXAgbXVzdCBub3Qgb2NjdXIgaGVyZSwgYXMgdGhlIG5ld19wIGFsbG9jYXRpb24gd291bGQK KwkJICogbGVhay4gIFJlZmNvdW50cyB3b3VsZCBjb21lIG91dCBjb3JyZWN0bHkgYXMgdGhlIGlu dGVybmVkCisJCSAqIHN0cmluZ3MgYXJlIHZhbHN0YWNrIHRyYWNrZWQuCisJCSAqLworCQlEVUtf QVNTRVJUKG5ld19hX3NpemUgPT0gMCk7CisKKwkJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0 YXRzX29iamVjdF9hYmFuZG9uX2FycmF5KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgRFVLX0hPQkpF Q1RfR0VUX0FTSVpFKG9iaik7IGkrKykgeworCQkJZHVrX3R2YWwgKnR2MTsKKwkJCWR1a190dmFs ICp0djI7CisJCQlkdWtfaHN0cmluZyAqa2V5OworCisJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNU X0dFVF9QUk9QUyh0aHItPmhlYXAsIG9iaikgIT0gTlVMTCk7CisKKwkJCXR2MSA9IERVS19IT0JK RUNUX0FfR0VUX1ZBTFVFX1BUUih0aHItPmhlYXAsIG9iaiwgaSk7CisJCQlpZiAoRFVLX1RWQUxf SVNfVU5VU0VEKHR2MSkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJRFVLX0FTU0VSVChu ZXdfcCAhPSBOVUxMICYmIG5ld19lX2sgIT0gTlVMTCAmJgorCQkJICAgICAgICAgICBuZXdfZV9w diAhPSBOVUxMICYmIG5ld19lX2YgIT0gTlVMTCk7CisKKwkJCS8qCisJCQkgKiAgSW50ZXJuIGtl eSB2aWEgdGhlIHZhbHN0YWNrIHRvIGVuc3VyZSByZWFjaGFiaWxpdHkgYmVoYXZlcworCQkJICog IHByb3Blcmx5LiAgV2UgbXVzdCBhdm9pZCBsb25nam1wJ3MgaGVyZSBzbyB1c2Ugbm9uLWNoZWNr ZWQKKwkJCSAqICBwcmltaXRpdmVzLgorCQkJICoKKwkJCSAqICBOb3RlOiBkdWtfY2hlY2tfc3Rh Y2soKSBwb3RlbnRpYWxseSByZWFsbG9jcyB0aGUgdmFsc3RhY2ssCisJCQkgKiAgaW52YWxpZGF0 aW5nIGFueSBkdWtfdHZhbCBwb2ludGVycyB0byB2YWxzdGFjay4gIENhbGxlcnMKKwkJCSAqICBt dXN0IGJlIGNhcmVmdWwuCisJCQkgKi8KKworI2lmIDAgIC8qIFhYWDogaW5qZWN0IHRlc3QgKi8K KwkJCWlmICgxKSB7CisJCQkJZ290byBhYmFuZG9uX2Vycm9yOworCQkJfQorI2VuZGlmCisJCQkv KiBOZXZlciBzaHJpbmtzOyBhdXRvLWFkZHMgRFVLX1ZBTFNUQUNLX0lOVEVSTkFMX0VYVFJBLCB3 aGljaAorCQkJICogaXMgZ2VuZXJvdXMuCisJCQkgKi8KKwkJCWlmICghZHVrX2NoZWNrX3N0YWNr KHRociwgMSkpIHsKKwkJCQlnb3RvIGFiYW5kb25fZXJyb3I7CisJCQl9CisJCQlEVUtfQVNTRVJU X1ZBTFNUQUNLX1NQQUNFKHRociwgMSk7CisJCQlrZXkgPSBkdWtfaGVhcF9zdHJ0YWJsZV9pbnRl cm5fdTMyKHRoci0+aGVhcCwgKGR1a191aW50MzJfdCkgaSk7CisJCQlpZiAoa2V5ID09IE5VTEwp IHsKKwkJCQlnb3RvIGFiYW5kb25fZXJyb3I7CisJCQl9CisJCQlkdWtfcHVzaF9oc3RyaW5nKHRo ciwga2V5KTsgIC8qIGtlZXAga2V5IHJlYWNoYWJsZSBmb3IgR0MgZXRjOyBndWFyYW50ZWVkIG5v dCB0byBmYWlsICovCisKKwkJCS8qIEtleSBpcyBub3cgcmVhY2hhYmxlIGluIHRoZSB2YWxzdGFj aywgZG9uJ3QgSU5DUkVGCisJCQkgKiB0aGUgbmV3IGFsbG9jYXRpb24geWV0ICh3ZSdsbCBzdGVh bCB0aGUgcmVmY291bnRzCisJCQkgKiBmcm9tIHRoZSB2YWx1ZSBzdGFjayBvbmNlIGFsbCBrZXlz IGFyZSBkb25lKS4KKwkJCSAqLworCisJCQluZXdfZV9rW25ld19lX25leHRdID0ga2V5OworCQkJ dHYyID0gJm5ld19lX3B2W25ld19lX25leHRdLnY7ICAvKiBhcnJheSBlbnRyaWVzIGFyZSBhbGwg cGxhaW4gdmFsdWVzICovCisJCQlEVUtfVFZBTF9TRVRfVFZBTCh0djIsIHR2MSk7CisJCQluZXdf ZV9mW25ld19lX25leHRdID0gRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEUgfAorCQkJICAgICAg ICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFHX0VOVU1FUkFCTEUgfAorCQkJICAgICAg ICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRTsKKwkJCW5ld19l X25leHQrKzsKKworCQkJLyogTm90ZTogbmV3X2VfbmV4dCBtYXRjaGVzIHB1c2hlZCB0ZW1wIGtl eSBjb3VudCwgYW5kIG5vdGhpbmcgY2FuCisJCQkgKiBmYWlsIGFib3ZlIGJldHdlZW4gdGhlIHB1 c2ggYW5kIHRoaXMgcG9pbnQuCisJCQkgKi8KKwkJfQorCisJCS8qIFN0ZWFsIHJlZmNvdW50cyBm cm9tIHZhbHVlIHN0YWNrLiAqLworCQlEVUtfREREKERVS19ERERQUklOVCgiYWJhbmRvbiBhcnJh eTogcG9wICVsZCBrZXkgdGVtcHMgZnJvbSB2YWxzdGFjayIsIChsb25nKSBuZXdfZV9uZXh0KSk7 CisJCWR1a19wb3Bfbl9ub2RlY3JlZl91bnNhZmUodGhyLCAoZHVrX2lkeF90KSBuZXdfZV9uZXh0 KTsKKwl9CisKKwkvKgorCSAqICBDb3B5IGtleXMgYW5kIHZhbHVlcyBpbiB0aGUgZW50cnkgcGFy dCAoY29tcGFjdGluZyB0aGVtIGF0IHRoZSBzYW1lIHRpbWUpLgorCSAqLworCisJZm9yIChpID0g MDsgaSA8IERVS19IT0JKRUNUX0dFVF9FTkVYVChvYmopOyBpKyspIHsKKwkJZHVrX2hzdHJpbmcg KmtleTsKKworCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9QUyh0aHItPmhlYXAsIG9i aikgIT0gTlVMTCk7CisKKwkJa2V5ID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKHRoci0+aGVhcCwg b2JqLCBpKTsKKwkJaWYgKGtleSA9PSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCURV S19BU1NFUlQobmV3X3AgIT0gTlVMTCAmJiBuZXdfZV9rICE9IE5VTEwgJiYKKwkJICAgICAgICAg ICBuZXdfZV9wdiAhPSBOVUxMICYmIG5ld19lX2YgIT0gTlVMTCk7CisKKwkJbmV3X2Vfa1tuZXdf ZV9uZXh0XSA9IGtleTsKKwkJbmV3X2VfcHZbbmV3X2VfbmV4dF0gPSBEVUtfSE9CSkVDVF9FX0dF VF9WQUxVRSh0aHItPmhlYXAsIG9iaiwgaSk7CisJCW5ld19lX2ZbbmV3X2VfbmV4dF0gPSBEVUtf SE9CSkVDVF9FX0dFVF9GTEFHUyh0aHItPmhlYXAsIG9iaiwgaSk7CisJCW5ld19lX25leHQrKzsK Kwl9CisJLyogdGhlIGVudHJpZXMgW25ld19lX25leHQsIG5ld19lX3NpemVfYWRqdXN0ZWRbIGFy ZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgb24gcHVycG9zZSAob2ssIG5vdCBnYyByZWFjaGFibGUpICov CisKKwkvKgorCSAqICBDb3B5IGFycmF5IGVsZW1lbnRzIHRvIG5ldyBhcnJheSBwYXJ0LiAgSWYg dGhlIG5ldyBhcnJheSBwYXJ0IGlzCisJICogIGxhcmdlciwgaW5pdGlhbGl6ZSB0aGUgdW51c2Vk IGVudHJpZXMgYXMgVU5VU0VEIGJlY2F1c2UgdGhleSBhcmUKKwkgKiAgR0MgcmVhY2hhYmxlLgor CSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJLyogQ2FsbGVyIG11c3Qg aGF2ZSBkZWNyZWYnZCB2YWx1ZXMgYWJvdmUgbmV3X2Ffc2l6ZSAoaWYgdGhhdCBpcyBuZWNlc3Nh cnkpLiAqLworCWlmICghYWJhbmRvbl9hcnJheSkgeworCQlmb3IgKGkgPSBuZXdfYV9zaXplOyBp IDwgRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaik7IGkrKykgeworCQkJZHVrX3R2YWwgKnR2Owor CQkJdHYgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCBvYmosIGkpOwor CQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19VTlVTRUQodHYpKTsKKwkJfQorCX0KKyNlbmRpZgor CWlmIChuZXdfYV9zaXplID4gRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaikpIHsKKwkJYXJyYXlf Y29weV9zaXplID0gc2l6ZW9mKGR1a190dmFsKSAqIERVS19IT0JKRUNUX0dFVF9BU0laRShvYmop OworCX0gZWxzZSB7CisJCWFycmF5X2NvcHlfc2l6ZSA9IHNpemVvZihkdWtfdHZhbCkgKiBuZXdf YV9zaXplOworCX0KKworCURVS19BU1NFUlQobmV3X2EgIT0gTlVMTCB8fCBhcnJheV9jb3B5X3Np emUgPT0gMFUpOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfR0VUX1BST1BTKHRoci0+aGVhcCwg b2JqKSAhPSBOVUxMIHx8IGFycmF5X2NvcHlfc2l6ZSA9PSAwVSk7CisJRFVLX0FTU0VSVChEVUtf SE9CSkVDVF9HRVRfQVNJWkUob2JqKSA+IDAgfHwgYXJyYXlfY29weV9zaXplID09IDBVKTsKKwlk dWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSBuZXdfYSwKKwkgICAgICAgICAgICAgICAgICAoY29u c3Qgdm9pZCAqKSBEVUtfSE9CSkVDVF9BX0dFVF9CQVNFKHRoci0+aGVhcCwgb2JqKSwKKwkgICAg ICAgICAgICAgICAgICBhcnJheV9jb3B5X3NpemUpOworCisJZm9yIChpID0gRFVLX0hPQkpFQ1Rf R0VUX0FTSVpFKG9iaik7IGkgPCBuZXdfYV9zaXplOyBpKyspIHsKKwkJZHVrX3R2YWwgKnR2ID0g Jm5ld19hW2ldOworCQlEVUtfVFZBTF9TRVRfVU5VU0VEKHR2KTsKKwl9CisKKwkvKgorCSAqICBS ZWJ1aWxkIHRoZSBoYXNoIHBhcnQgYWx3YXlzIGZyb20gc2NyYXRjaCAoZ3VhcmFudGVlZCB0byBm aW5pc2gKKwkgKiAgYXMgbG9uZyBhcyBjYWxsZXIgZ2F2ZSBjb25zaXN0ZW50IHBhcmFtZXRlcnMp LgorCSAqCisJICogIEFueSByZXNpemUgb2YgaGFzaCBwYXJ0IHJlcXVpcmVzIHJlaGFzaGluZy4g IEluIGFkZGl0aW9uLCBieSByZWhhc2hpbmcKKwkgKiAgZ2V0IHJpZCBvZiBhbnkgZWxlbWVudHMg bWFya2VkIGRlbGV0ZWQgKERVS19fSEFTSF9ERUxFVEVEKSB3aGljaCBpcyBjcml0aWNhbAorCSAq ICB0byBlbnN1cmluZyB0aGUgaGFzaCBwYXJ0IG5ldmVyIGZpbGxzIHVwLgorCSAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJUKQorCWlmIChuZXdfaF9zaXplID09IDAp IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIm5vIGhhc2ggcGFydCwgbm8gcmVoYXNoIikpOwor CX0gZWxzZSB7CisJCWR1a191aW50MzJfdCBtYXNrOworCisJCURVS19BU1NFUlQobmV3X2ggIT0g TlVMTCk7CisKKwkJLyogZmlsbCBuZXdfaCB3aXRoIHUzMiAweGZmID0gVU5VU0VEICovCisJCURV S19BU1NFUlQobmV3X2hfc2l6ZSA+IDApOworCQlkdWtfbWVtc2V0KG5ld19oLCAweGZmLCBzaXpl b2YoZHVrX3VpbnQzMl90KSAqIG5ld19oX3NpemUpOworCisJCURVS19BU1NFUlQobmV3X2VfbmV4 dCA8PSBuZXdfaF9zaXplKTsgIC8qIGVxdWFsaXR5IG5vdCBhY3R1YWxseSBwb3NzaWJsZSAqLwor CisJCW1hc2sgPSBuZXdfaF9zaXplIC0gMTsKKwkJZm9yIChpID0gMDsgaSA8IG5ld19lX25leHQ7 IGkrKykgeworCQkJZHVrX2hzdHJpbmcgKmtleSA9IG5ld19lX2tbaV07CisJCQlkdWtfdWludDMy X3Qgaiwgc3RlcDsKKworCQkJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisJCQlqID0gRFVLX0hT VFJJTkdfR0VUX0hBU0goa2V5KSAmIG1hc2s7CisJCQlzdGVwID0gMTsgIC8qIENhY2hlIGZyaWVu ZGx5IGJ1dCBjbHVzdGVyaW5nIHByb25lLiAqLworCisJCQlmb3IgKDs7KSB7CisJCQkJRFVLX0FT U0VSVChuZXdfaFtqXSAhPSBEVUtfX0hBU0hfREVMRVRFRCk7ICAvKiBzaG91bGQgbmV2ZXIgaGFw cGVuICovCisJCQkJaWYgKG5ld19oW2pdID09IERVS19fSEFTSF9VTlVTRUQpIHsKKwkJCQkJRFVL X0RERChEVUtfREREUFJJTlQoInJlYnVpbGQgaGl0ICVsZCAtPiAlbGQiLCAobG9uZykgaiwgKGxv bmcpIGkpKTsKKwkJCQkJbmV3X2hbal0gPSAoZHVrX3VpbnQzMl90KSBpOworCQkJCQlicmVhazsK KwkJCQl9CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJlYnVpbGQgbWlzcyAlbGQsIHN0ZXAg JWxkIiwgKGxvbmcpIGosIChsb25nKSBzdGVwKSk7CisJCQkJaiA9IChqICsgc3RlcCkgJiBtYXNr OworCisJCQkJLyogR3VhcmFudGVlZCB0byBmaW5pc2ggKGhhc2ggaXMgbGFyZ2VyIHRoYW4gI3By b3BzKS4gKi8KKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9IT0JKRUNUX0hBU0hf UEFSVCAqLworCisJLyoKKwkgKiAgTmljZSBkZWJ1ZyBsb2cuCisJICovCisKKwlEVUtfREQoRFVL X0REUFJJTlQoInJlc2l6ZWQgaG9iamVjdCAlcCBwcm9wcyAoJWxkIC0+ICVsZCBieXRlcyksIGZy b20ge3A9JXAsZV9zaXplPSVsZCxlX25leHQ9JWxkLGFfc2l6ZT0lbGQsaF9zaXplPSVsZH0gdG8g IgorCSAgICAgICAgICAgICAgICAgICAie3A9JXAsZV9zaXplPSVsZCxlX25leHQ9JWxkLGFfc2l6 ZT0lbGQsaF9zaXplPSVsZH0sIGFiYW5kb25fYXJyYXk9JWxkLCB1bmFkanVzdGVkIG5ld19lX3Np emU9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgb2JqLAorCSAgICAgICAgICAg ICAgICAgICAobG9uZykgRFVLX0hPQkpFQ1RfUF9DT01QVVRFX1NJWkUoRFVLX0hPQkpFQ1RfR0VU X0VTSVpFKG9iaiksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob2JqKSwKKwkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0dFVF9IU0la RShvYmopKSwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIG5ld19hbGxvY19zaXplLAorCSAg ICAgICAgICAgICAgICAgICAodm9pZCAqKSBEVUtfSE9CSkVDVF9HRVRfUFJPUFModGhyLT5oZWFw LCBvYmopLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0hPQkpFQ1RfR0VUX0VTSVpF KG9iaiksCisJICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfSE9CSkVDVF9HRVRfRU5FWFQo b2JqKSwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIERVS19IT0JKRUNUX0dFVF9BU0laRShv YmopLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKG9i aiksCisJICAgICAgICAgICAgICAgICAgICh2b2lkICopIG5ld19wLAorCSAgICAgICAgICAgICAg ICAgICAobG9uZykgbmV3X2Vfc2l6ZV9hZGp1c3RlZCwKKwkgICAgICAgICAgICAgICAgICAgKGxv bmcpIG5ld19lX25leHQsCisJICAgICAgICAgICAgICAgICAgIChsb25nKSBuZXdfYV9zaXplLAor CSAgICAgICAgICAgICAgICAgICAobG9uZykgbmV3X2hfc2l6ZSwKKwkgICAgICAgICAgICAgICAg ICAgKGxvbmcpIGFiYW5kb25fYXJyYXksCisJICAgICAgICAgICAgICAgICAgIChsb25nKSBuZXdf ZV9zaXplKSk7CisKKwkvKgorCSAqICBBbGwgZG9uZSwgc3dpdGNoIHByb3BlcnRpZXMgKCdwJykg YWxsb2NhdGlvbiB0byBuZXcgb25lLgorCSAqLworCisJRFVLX0ZSRUVfQ0hFQ0tFRCh0aHIsIERV S19IT0JKRUNUX0dFVF9QUk9QUyh0aHItPmhlYXAsIG9iaikpOyAgLyogTlVMTCBvYmotPnAgaXMg T0sgKi8KKwlEVUtfSE9CSkVDVF9TRVRfUFJPUFModGhyLT5oZWFwLCBvYmosIG5ld19wKTsKKwlE VUtfSE9CSkVDVF9TRVRfRVNJWkUob2JqLCBuZXdfZV9zaXplX2FkanVzdGVkKTsKKwlEVUtfSE9C SkVDVF9TRVRfRU5FWFQob2JqLCBuZXdfZV9uZXh0KTsKKwlEVUtfSE9CSkVDVF9TRVRfQVNJWkUo b2JqLCBuZXdfYV9zaXplKTsKKwlEVUtfSE9CSkVDVF9TRVRfSFNJWkUob2JqLCBuZXdfaF9zaXpl KTsKKworCS8qIENsZWFyIGFycmF5IHBhcnQgZmxhZyBvbmx5IGFmdGVyIHN3aXRjaGluZy4gKi8K KwlpZiAoYWJhbmRvbl9hcnJheSkgeworCQlEVUtfSE9CSkVDVF9DTEVBUl9BUlJBWV9QQVJUKG9i aik7CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoInJlc2l6ZSByZXN1bHQ6ICUhTyIsIChk dWtfaGVhcGhkciAqKSBvYmopKTsKKworCURVS19BU1NFUlQodGhyLT5oZWFwLT5wZl9wcmV2ZW50 X2NvdW50ID4gMCk7CisJdGhyLT5oZWFwLT5wZl9wcmV2ZW50X2NvdW50LS07CisJdGhyLT5oZWFw LT5tc19iYXNlX2ZsYWdzID0gcHJldl9tc19iYXNlX2ZsYWdzOworI2lmIGRlZmluZWQoRFVLX1VT RV9BU1NFUlRJT05TKQorCURVS19BU1NFUlQodGhyLT5oZWFwLT5lcnJvcl9ub3RfYWxsb3dlZCA9 PSAxKTsKKwl0aHItPmhlYXAtPmVycm9yX25vdF9hbGxvd2VkID0gcHJldl9lcnJvcl9ub3RfYWxs b3dlZDsKKyNlbmRpZgorCisJLyoKKwkgKiAgUG9zdCByZXNpemUgYXNzZXJ0aW9ucy4KKwkgKi8K KworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCS8qIFhYWDogcG9zdC1jaGVja3Mg KHN1Y2ggYXMgbm8gZHVwbGljYXRlIGtleXMpICovCisjZW5kaWYKKwlyZXR1cm47CisKKwkvKgor CSAqICBBYmFuZG9uIGFycmF5IGZhaWxlZC4gIFdlIGRvbid0IG5lZWQgdG8gREVDUkVGIGFueXRo aW5nCisJICogIGJlY2F1c2UgdGhlIHJlZmVyZW5jZXMgaW4gdGhlIG5ldyBhbGxvY2F0aW9uIGFy ZSBub3QKKwkgKiAgSU5DUkVGJ2QgdW50aWwgYWJhbmRvbiBpcyBjb21wbGV0ZS4gIFRoZSBzdHJp bmcgaW50ZXJuZWQKKwkgKiAga2V5cyBhcmUgb24gdGhlIHZhbHVlIHN0YWNrIGFuZCBhcmUgaGFu ZGxlZCBub3JtYWxseSBieQorCSAqICB1bndpbmQuCisJICovCisKKyBhYmFuZG9uX2Vycm9yOgor IGFsbG9jX2ZhaWxlZDoKKwlEVUtfRChEVUtfRFBSSU5UKCJvYmplY3QgcHJvcGVydHkgdGFibGUg cmVzaXplIGZhaWxlZCIpKTsKKworCURVS19GUkVFX0NIRUNLRUQodGhyLCBuZXdfcCk7ICAvKiBP SyBmb3IgTlVMTC4gKi8KKworCXRoci0+aGVhcC0+cGZfcHJldmVudF9jb3VudC0tOworCXRoci0+ aGVhcC0+bXNfYmFzZV9mbGFncyA9IHByZXZfbXNfYmFzZV9mbGFnczsKKyNpZiBkZWZpbmVkKERV S19VU0VfQVNTRVJUSU9OUykKKwlEVUtfQVNTRVJUKHRoci0+aGVhcC0+ZXJyb3Jfbm90X2FsbG93 ZWQgPT0gMSk7CisJdGhyLT5oZWFwLT5lcnJvcl9ub3RfYWxsb3dlZCA9IHByZXZfZXJyb3Jfbm90 X2FsbG93ZWQ7CisjZW5kaWYKKworCURVS19FUlJPUl9BTExPQ19GQUlMRUQodGhyKTsKKwlEVUtf V09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKy8qCisgKiAgSGVscGVycyB0byByZXNpemUgcHJv cGVydGllcyBhbGxvY2F0aW9uIG9uIHNwZWNpZmljIG5lZWRzLgorICovCisKK0RVS19JTlRFUk5B TCB2b2lkIGR1a19ob2JqZWN0X3Jlc2l6ZV9lbnRyeXBhcnQoZHVrX2h0aHJlYWQgKnRociwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3Qg Km9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVr X3VpbnQzMl90IG5ld19lX3NpemUpIHsKKwlkdWtfdWludDMyX3Qgb2xkX2Vfc2l6ZTsKKwlkdWtf dWludDMyX3QgbmV3X2Ffc2l6ZTsKKwlkdWtfdWludDMyX3QgbmV3X2hfc2l6ZTsKKworCURVS19B U1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCisJb2xkX2Vf c2l6ZSA9IERVS19IT0JKRUNUX0dFVF9FU0laRShvYmopOworCWlmIChvbGRfZV9zaXplID4gbmV3 X2Vfc2l6ZSkgeworCQluZXdfZV9zaXplID0gb2xkX2Vfc2l6ZTsKKwl9CisjaWYgZGVmaW5lZChE VUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJUKQorCW5ld19oX3NpemUgPSBkdWtfX2dldF9kZWZhdWx0 X2hfc2l6ZShuZXdfZV9zaXplKTsKKyNlbHNlCisJbmV3X2hfc2l6ZSA9IDA7CisjZW5kaWYKKwlu ZXdfYV9zaXplID0gRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaik7CisKKwlkdWtfaG9iamVjdF9y ZWFsbG9jX3Byb3BzKHRociwgb2JqLCBuZXdfZV9zaXplLCBuZXdfYV9zaXplLCBuZXdfaF9zaXpl LCAwKTsKK30KKworI2lmIDAgIC8qdW51c2VkICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaG9i amVjdF9yZXNpemVfYXJyYXlwYXJ0KGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0ICpvYmosCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a191aW50MzJfdCBuZXdf YV9zaXplKSB7CisJZHVrX3VpbnQzMl90IG9sZF9hX3NpemU7CisJZHVrX3VpbnQzMl90IG5ld19l X3NpemU7CisJZHVrX3VpbnQzMl90IG5ld19oX3NpemU7CisKKwlEVUtfQVNTRVJUKHRociAhPSBO VUxMKTsKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKworCWlmICghRFVLX0hPQkpFQ1RfSEFT X0FSUkFZX1BBUlQob2JqKSkgeworCQlyZXR1cm47CisJfQorCW9sZF9hX3NpemUgPSBEVUtfSE9C SkVDVF9HRVRfQVNJWkUob2JqKTsKKwlpZiAob2xkX2Ffc2l6ZSA+IG5ld19hX3NpemUpIHsKKwkJ bmV3X2Ffc2l6ZSA9IG9sZF9hX3NpemU7CisJfQorCW5ld19lX3NpemUgPSBEVUtfSE9CSkVDVF9H RVRfRVNJWkUob2JqKTsKKwluZXdfaF9zaXplID0gRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKG9iaik7 CisKKwlkdWtfaG9iamVjdF9yZWFsbG9jX3Byb3BzKHRociwgb2JqLCBuZXdfZV9zaXplLCBuZXdf YV9zaXplLCBuZXdfaF9zaXplLCAwKTsKK30KKyNlbmRpZgorCisvKiBHcm93IGVudHJ5IHBhcnQg YWxsb2NhdGlvbiBmb3Igb25lIGFkZGl0aW9uYWwgZW50cnkuICovCitEVUtfTE9DQUwgdm9pZCBk dWtfX2dyb3dfcHJvcHNfZm9yX25ld19lbnRyeV9pdGVtKGR1a19odGhyZWFkICp0aHIsIGR1a19o b2JqZWN0ICpvYmopIHsKKwlkdWtfdWludDMyX3Qgb2xkX2VfdXNlZDsgIC8qIGFjdHVhbGx5IHVz ZWQsIG5vbi1OVUxMIGVudHJpZXMgKi8KKwlkdWtfdWludDMyX3QgbmV3X2Vfc2l6ZTsKKwlkdWtf dWludDMyX3QgbmV3X2Ffc2l6ZTsKKwlkdWtfdWludDMyX3QgbmV3X2hfc2l6ZTsKKworCURVS19B U1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCisJLyogRHVr dGFwZSAwLjExLjAgYW5kIHByaW9yIHRyaWVkIHRvIG9wdGltaXplIHRoZSByZXNpemUgYnkgbm90 CisJICogY291bnRpbmcgdGhlIG51bWJlciBvZiBhY3R1YWxseSB1c2VkIGtleXMgcHJpb3IgdG8g dGhlIHJlc2l6ZS4KKwkgKiBUaGlzIHdvcmtlZCBtb3N0bHkgd2VsbCBidXQgYWxzbyBjYXVzZWQg d2VpcmQgbGVhay1saWtlIGJlaGF2aW9yCisJICogYXMgaW46IHRlc3QtYnVnLW9iamVjdC1wcm9w LWFsbG9jLXVuYm91bmRlZC5qcy4gIFNvLCBub3cgd2UgY291bnQKKwkgKiB0aGUga2V5cyBleHBs aWNpdGx5IHRvIGNvbXB1dGUgdGhlIG5ldyBlbnRyeSBwYXJ0IHNpemUuCisJICovCisKKwlvbGRf ZV91c2VkID0gZHVrX19jb3VudF91c2VkX2Vfa2V5cyh0aHIsIG9iaik7CisJbmV3X2Vfc2l6ZSA9 IG9sZF9lX3VzZWQgKyBkdWtfX2dldF9taW5fZ3Jvd19lKG9sZF9lX3VzZWQpOworI2lmIGRlZmlu ZWQoRFVLX1VTRV9IT0JKRUNUX0hBU0hfUEFSVCkKKwluZXdfaF9zaXplID0gZHVrX19nZXRfZGVm YXVsdF9oX3NpemUobmV3X2Vfc2l6ZSk7CisjZWxzZQorCW5ld19oX3NpemUgPSAwOworI2VuZGlm CisJbmV3X2Ffc2l6ZSA9IERVS19IT0JKRUNUX0dFVF9BU0laRShvYmopOworCURVS19BU1NFUlQo bmV3X2Vfc2l6ZSA+PSBvbGRfZV91c2VkICsgMSk7ICAvKiBkdWtfX2dldF9taW5fZ3Jvd19lKCkg aXMgYWx3YXlzID49IDEgKi8KKworCWR1a19ob2JqZWN0X3JlYWxsb2NfcHJvcHModGhyLCBvYmos IG5ld19lX3NpemUsIG5ld19hX3NpemUsIG5ld19oX3NpemUsIDApOworfQorCisvKiBHcm93IGFy cmF5IHBhcnQgZm9yIGEgbmV3IGhpZ2hlc3QgYXJyYXkgaW5kZXguICovCitEVUtfTE9DQUwgdm9p ZCBkdWtfX2dyb3dfcHJvcHNfZm9yX2FycmF5X2l0ZW0oZHVrX2h0aHJlYWQgKnRociwgZHVrX2hv YmplY3QgKm9iaiwgZHVrX3VpbnQzMl90IGhpZ2hlc3RfYXJyX2lkeCkgeworCWR1a191aW50MzJf dCBuZXdfZV9zaXplOworCWR1a191aW50MzJfdCBuZXdfYV9zaXplOworCWR1a191aW50MzJfdCBu ZXdfaF9zaXplOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvYmog IT0gTlVMTCk7CisJRFVLX0FTU0VSVChoaWdoZXN0X2Fycl9pZHggPj0gRFVLX0hPQkpFQ1RfR0VU X0FTSVpFKG9iaikpOworCisJLyogbWluaW11bSBuZXcgbGVuZ3RoIGlzIGhpZ2hlc3RfYXJyX2lk eCArIDEgKi8KKworCW5ld19lX3NpemUgPSBEVUtfSE9CSkVDVF9HRVRfRVNJWkUob2JqKTsKKwlu ZXdfaF9zaXplID0gRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKG9iaik7CisJbmV3X2Ffc2l6ZSA9IGhp Z2hlc3RfYXJyX2lkeCArIGR1a19fZ2V0X21pbl9ncm93X2EoaGlnaGVzdF9hcnJfaWR4KTsKKwlE VUtfQVNTRVJUKG5ld19hX3NpemUgPj0gaGlnaGVzdF9hcnJfaWR4ICsgMSk7ICAvKiBkdWtfX2dl dF9taW5fZ3Jvd19hKCkgaXMgYWx3YXlzID49IDEgKi8KKworCWR1a19ob2JqZWN0X3JlYWxsb2Nf cHJvcHModGhyLCBvYmosIG5ld19lX3NpemUsIG5ld19hX3NpemUsIG5ld19oX3NpemUsIDApOwor fQorCisvKiBBYmFuZG9uIGFycmF5IHBhcnQsIG1vdmluZyBhcnJheSBlbnRyaWVzIGludG8gZW50 cmllcyBwYXJ0LgorICogVGhpcyByZXF1aXJlcyBhIHByb3BzIHJlc2l6ZSwgd2hpY2ggaXMgYSBo ZWF2eSBvcGVyYXRpb24uCisgKiBXZSBhbHNvIGNvbXBhY3QgdGhlIGVudHJpZXMgcGFydCB3aGls ZSB3ZSdyZSBhdCBpdCwgYWx0aG91Z2gKKyAqIHRoaXMgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVk LgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FiYW5kb25fYXJyYXlfY2hlY2tlZChkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqKSB7CisJZHVrX3VpbnQzMl90IG5ld19lX3NpemU7 CisJZHVrX3VpbnQzMl90IG5ld19hX3NpemU7CisJZHVrX3VpbnQzMl90IG5ld19oX3NpemU7CisJ ZHVrX3VpbnQzMl90IGVfdXNlZDsgIC8qIGFjdHVhbGx5IHVzZWQsIG5vbi1OVUxMIGtleXMgKi8K KwlkdWtfdWludDMyX3QgYV91c2VkOworCWR1a191aW50MzJfdCBhX3NpemU7CisKKwlEVUtfQVNT RVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKworCWVfdXNlZCA9 IGR1a19fY291bnRfdXNlZF9lX2tleXModGhyLCBvYmopOworCWR1a19fY29tcHV0ZV9hX3N0YXRz KHRociwgb2JqLCAmYV91c2VkLCAmYV9zaXplKTsKKworCS8qCisJICogIE11c3QgZ3VhcmFudGVl IGFsbCBhY3R1YWxseSB1c2VkIGFycmF5IGVudHJpZXMgd2lsbCBmaXQgaW50bworCSAqICBuZXcg ZW50cnkgcGFydC4gIEFkZCBvbmUgZ3Jvd3RoIHN0ZXAgdG8gZW5zdXJlIHdlIGRvbid0IHJ1biBv dXQKKwkgKiAgb2Ygc3BhY2UgcmlnaHQgYXdheS4KKwkgKi8KKworCW5ld19lX3NpemUgPSBlX3Vz ZWQgKyBhX3VzZWQ7CisJbmV3X2Vfc2l6ZSA9IG5ld19lX3NpemUgKyBkdWtfX2dldF9taW5fZ3Jv d19lKG5ld19lX3NpemUpOworCW5ld19hX3NpemUgPSAwOworI2lmIGRlZmluZWQoRFVLX1VTRV9I T0JKRUNUX0hBU0hfUEFSVCkKKwluZXdfaF9zaXplID0gZHVrX19nZXRfZGVmYXVsdF9oX3NpemUo bmV3X2Vfc2l6ZSk7CisjZWxzZQorCW5ld19oX3NpemUgPSAwOworI2VuZGlmCisKKwlEVUtfREQo RFVLX0REUFJJTlQoImFiYW5kb24gYXJyYXkgcGFydCBmb3IgaG9iamVjdCAlcCwgIgorCSAgICAg ICAgICAgICAgICAgICAiYXJyYXkgc3RhdHMgYmVmb3JlOiBlX3VzZWQ9JWxkLCBhX3VzZWQ9JWxk LCBhX3NpemU9JWxkOyAiCisJICAgICAgICAgICAgICAgICAgICJyZXNpemUgdG8gZV9zaXplPSVs ZCwgYV9zaXplPSVsZCwgaF9zaXplPSVsZCIsCisJICAgICAgICAgICAgICAgICAgICh2b2lkICop IG9iaiwgKGxvbmcpIGVfdXNlZCwgKGxvbmcpIGFfdXNlZCwgKGxvbmcpIGFfc2l6ZSwKKwkgICAg ICAgICAgICAgICAgICAgKGxvbmcpIG5ld19lX3NpemUsIChsb25nKSBuZXdfYV9zaXplLCAobG9u ZykgbmV3X2hfc2l6ZSkpOworCisJZHVrX2hvYmplY3RfcmVhbGxvY19wcm9wcyh0aHIsIG9iaiwg bmV3X2Vfc2l6ZSwgbmV3X2Ffc2l6ZSwgbmV3X2hfc2l6ZSwgMSk7Cit9CisKKy8qCisgKiAgQ29t cGFjdCBhbiBvYmplY3QuICBNaW5pbWl6ZXMgYWxsb2NhdGlvbiBzaXplIGZvciBvYmplY3RzIHdo aWNoIGFyZQorICogIG5vdCBsaWtlbHkgdG8gYmUgZXh0ZW5kZWQuICBUaGlzIGlzIHVzZWZ1bCBm b3IgaW50ZXJuYWwgYW5kIG5vbi0KKyAqICBleHRlbnNpYmxlIG9iamVjdHMsIGJ1dCBjYW4gYWxz byBiZSBjYWxsZWQgZm9yIG5vbi1leHRlbnNpYmxlIG9iamVjdHMuCisgKiAgTWF5IGFiYW5kb24g dGhlIGFycmF5IHBhcnQgaWYgaXQgaXMgY29tcHV0ZWQgdG8gYmUgdG9vIHNwYXJzZS4KKyAqCisg KiAgVGhpcyBjYWxsIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlLCBhcyBpdCBuZWVkcyB0byBzY2Fu IGJvdGggdGhlCisgKiAgZW50cmllcyBhbmQgdGhlIGFycmF5IHBhcnQuCisgKgorICogIFRoZSBj YWxsIG1heSBmYWlsIGR1ZSB0byBhbGxvY2F0aW9uIGVycm9yLgorICovCisKK0RVS19JTlRFUk5B TCB2b2lkIGR1a19ob2JqZWN0X2NvbXBhY3RfcHJvcHMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hv YmplY3QgKm9iaikgeworCWR1a191aW50MzJfdCBlX3NpemU7ICAgICAgIC8qIGN1cnJlbnRseSB1 c2VkIC0+IG5ldyBzaXplICovCisJZHVrX3VpbnQzMl90IGFfc2l6ZTsgICAgICAgLyogY3VycmVu dGx5IHJlcXVpcmVkICovCisJZHVrX3VpbnQzMl90IGFfdXNlZDsgICAgICAgLyogYWN0dWFsbHkg dXNlZCAqLworCWR1a191aW50MzJfdCBoX3NpemU7CisJZHVrX2Jvb2xfdCBhYmFuZG9uX2FycmF5 OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7 CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX09CSkVDVFMpCisJaWYgKERVS19IRUFQSERSX0hB U19SRUFET05MWSgoZHVrX2hlYXBoZHIgKikgb2JqKSkgeworCQlEVUtfREQoRFVLX0REUFJJTlQo Imlnbm9yZSBhdHRlbXB0IHRvIGNvbXBhY3QgYSByb20gb2JqZWN0IikpOworCQlyZXR1cm47CisJ fQorI2VuZGlmCisKKwllX3NpemUgPSBkdWtfX2NvdW50X3VzZWRfZV9rZXlzKHRociwgb2JqKTsK KwlkdWtfX2NvbXB1dGVfYV9zdGF0cyh0aHIsIG9iaiwgJmFfdXNlZCwgJmFfc2l6ZSk7CisKKwlE VUtfREQoRFVLX0REUFJJTlQoImNvbXBhY3RpbmcgaG9iamVjdCwgdXNlZCBlIGtleXMgJWxkLCB1 c2VkIGEga2V5cyAlbGQsIG1pbiBhIHNpemUgJWxkLCAiCisJICAgICAgICAgICAgICAgICAgICJy ZXNpemVkIGFycmF5IGRlbnNpdHkgd291bGQgYmU6ICVsZC8lbGQgPSAlbGYiLAorCSAgICAgICAg ICAgICAgICAgICAobG9uZykgZV9zaXplLCAobG9uZykgYV91c2VkLCAobG9uZykgYV9zaXplLAor CSAgICAgICAgICAgICAgICAgICAobG9uZykgYV91c2VkLCAobG9uZykgYV9zaXplLAorCSAgICAg ICAgICAgICAgICAgICAoZG91YmxlKSBhX3VzZWQgLyAoZG91YmxlKSBhX3NpemUpKTsKKworCWlm IChkdWtfX2FiYW5kb25fYXJyYXlfZGVuc2l0eV9jaGVjayhhX3VzZWQsIGFfc2l6ZSkpIHsKKwkJ RFVLX0REKERVS19ERFBSSU5UKCJkZWNpZGVkIHRvIGFiYW5kb24gYXJyYXkgZHVyaW5nIGNvbXBh Y3Rpb24sIGFfdXNlZD0lbGQsIGFfc2l6ZT0lbGQiLAorCQkgICAgICAgICAgICAgICAgICAgKGxv bmcpIGFfdXNlZCwgKGxvbmcpIGFfc2l6ZSkpOworCQlhYmFuZG9uX2FycmF5ID0gMTsKKwkJZV9z aXplICs9IGFfdXNlZDsKKwkJYV9zaXplID0gMDsKKwl9IGVsc2UgeworCQlEVUtfREQoRFVLX0RE UFJJTlQoImRlY2lkZWQgdG8ga2VlcCBhcnJheSBkdXJpbmcgY29tcGFjdGlvbiIpKTsKKwkJYWJh bmRvbl9hcnJheSA9IDA7CisJfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfSEFTSF9Q QVJUKQorCWlmIChlX3NpemUgPj0gRFVLX1VTRV9IT0JKRUNUX0hBU0hfUFJPUF9MSU1JVCkgewor CQloX3NpemUgPSBkdWtfX2dldF9kZWZhdWx0X2hfc2l6ZShlX3NpemUpOworCX0gZWxzZSB7CisJ CWhfc2l6ZSA9IDA7CisJfQorI2Vsc2UKKwloX3NpemUgPSAwOworI2VuZGlmCisKKwlEVUtfREQo RFVLX0REUFJJTlQoImNvbXBhY3RpbmcgaG9iamVjdCAtPiBuZXcgZV9zaXplICVsZCwgbmV3IGFf c2l6ZT0lbGQsIG5ldyBoX3NpemU9JWxkLCBhYmFuZG9uX2FycmF5PSVsZCIsCisJICAgICAgICAg ICAgICAgICAgIChsb25nKSBlX3NpemUsIChsb25nKSBhX3NpemUsIChsb25nKSBoX3NpemUsIChs b25nKSBhYmFuZG9uX2FycmF5KSk7CisKKwlkdWtfaG9iamVjdF9yZWFsbG9jX3Byb3BzKHRociwg b2JqLCBlX3NpemUsIGFfc2l6ZSwgaF9zaXplLCBhYmFuZG9uX2FycmF5KTsKK30KKworLyoKKyAq ICBGaW5kIGFuIGV4aXN0aW5nIGtleSBmcm9tIGVudHJ5IHBhcnQgZWl0aGVyIGJ5IGxpbmVhciBz Y2FuIG9yIGJ5CisgKiAgdXNpbmcgdGhlIGhhc2ggaW5kZXggKGlmIGl0IGV4aXN0cykuCisgKgor ICogIFNldHMgZW50cnkgaW5kZXggKGFuZCBwb3NzaWJseSB0aGUgaGFzaCBpbmRleCkgdG8gb3V0 cHV0IHZhcmlhYmxlcywKKyAqICB3aGljaCBhbGxvd3MgdGhlIGNhbGxlciB0byB1cGRhdGUgdGhl IGVudHJ5IGFuZCBoYXNoIGVudHJpZXMgaW4tcGxhY2UuCisgKiAgSWYgZW50cnkgaXMgbm90IGZv dW5kLCBib3RoIHZhbHVlcyBhcmUgc2V0IHRvIC0xLiAgSWYgZW50cnkgaXMgZm91bmQKKyAqICBi dXQgdGhlcmUgaXMgbm8gaGFzaCBwYXJ0LCBoX2lkeCBpcyBzZXQgdG8gLTEuCisgKi8KKworRFVL X0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2hvYmplY3RfZmluZF9leGlzdGluZ19lbnRyeShkdWtf aGVhcCAqaGVhcCwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX2ludF90 ICplX2lkeCwgZHVrX2ludF90ICpoX2lkeCkgeworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOwor CURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQoZV9pZHggIT0gTlVMTCk7CisJ RFVLX0FTU0VSVChoX2lkeCAhPSBOVUxMKTsKKwlEVUtfVU5SRUYoaGVhcCk7CisKKwlpZiAoRFVL X0xJS0VMWShEVUtfSE9CSkVDVF9HRVRfSFNJWkUob2JqKSA9PSAwKSkKKwl7CisJCS8qIExpbmVh ciBzY2FuOiBtb3JlIGxpa2VseSBiZWNhdXNlIG1vc3Qgb2JqZWN0cyBhcmUgc21hbGwuCisJCSAq IFRoaXMgaXMgYW4gaW1wb3J0YW50IGZhc3QgcGF0aC4KKwkJICoKKwkJICogWFhYOiB0aGlzIG1p Z2h0IGJlIHdvcnRoIGlubGluaW5nIGZvciBwcm9wZXJ0eSBsb29rdXBzLgorCQkgKi8KKwkJZHVr X3VpbnRfZmFzdDMyX3QgaTsKKwkJZHVrX3VpbnRfZmFzdDMyX3QgbjsKKwkJZHVrX2hzdHJpbmcg KipoX2tleXNfYmFzZTsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImR1a19ob2JqZWN0X2ZpbmRf ZXhpc3RpbmdfZW50cnkoKSB1c2luZyBsaW5lYXIgc2NhbiBmb3IgbG9va3VwIikpOworCisJCWhf a2V5c19iYXNlID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZX0JBU0UoaGVhcCwgb2JqKTsKKwkJbiA9 IERVS19IT0JKRUNUX0dFVF9FTkVYVChvYmopOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7 CisJCQlpZiAoaF9rZXlzX2Jhc2VbaV0gPT0ga2V5KSB7CisJCQkJKmVfaWR4ID0gKGR1a19pbnRf dCkgaTsKKwkJCQkqaF9pZHggPSAtMTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKyNp ZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9IQVNIX1BBUlQpCisJZWxzZQorCXsKKwkJLyogaGFz aCBsb29rdXAgKi8KKwkJZHVrX3VpbnQzMl90IG47CisJCWR1a191aW50MzJfdCBpLCBzdGVwOwor CQlkdWtfdWludDMyX3QgKmhfYmFzZTsKKwkJZHVrX3VpbnQzMl90IG1hc2s7CisKKwkJRFVLX0RE RChEVUtfREREUFJJTlQoImR1a19ob2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnkoKSB1c2luZyBo YXNoIHBhcnQgZm9yIGxvb2t1cCIpKTsKKworCQloX2Jhc2UgPSBEVUtfSE9CSkVDVF9IX0dFVF9C QVNFKGhlYXAsIG9iaik7CisJCW4gPSBEVUtfSE9CSkVDVF9HRVRfSFNJWkUob2JqKTsKKwkJbWFz ayA9IG4gLSAxOworCQlpID0gRFVLX0hTVFJJTkdfR0VUX0hBU0goa2V5KSAmIG1hc2s7CisJCXN0 ZXAgPSAxOyAgLyogQ2FjaGUgZnJpZW5kbHkgYnV0IGNsdXN0ZXJpbmcgcHJvbmUuICovCisKKwkJ Zm9yICg7OykgeworCQkJZHVrX3VpbnQzMl90IHQ7CisKKwkJCURVS19BU1NFUlRfRElTQUJMRShp ID49IDApOyAgLyogdW5zaWduZWQgKi8KKwkJCURVS19BU1NFUlQoaSA8IERVS19IT0JKRUNUX0dF VF9IU0laRShvYmopKTsKKwkJCXQgPSBoX2Jhc2VbaV07CisJCQlEVUtfQVNTRVJUKHQgPT0gRFVL X19IQVNIX1VOVVNFRCB8fCB0ID09IERVS19fSEFTSF9ERUxFVEVEIHx8CisJCQkgICAgICAgICAg ICh0IDwgRFVLX0hPQkpFQ1RfR0VUX0VTSVpFKG9iaikpKTsgIC8qIHQgPj0gMCBhbHdheXMgdHJ1 ZSwgdW5zaWduZWQgKi8KKworCQkJaWYgKHQgPT0gRFVLX19IQVNIX1VOVVNFRCkgeworCQkJCWJy ZWFrOworCQkJfSBlbHNlIGlmICh0ID09IERVS19fSEFTSF9ERUxFVEVEKSB7CisJCQkJRFVLX0RE RChEVUtfREREUFJJTlQoImxvb2t1cCBtaXNzIChkZWxldGVkKSBpPSVsZCwgdD0lbGQiLAorCQkJ CSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpLCAobG9uZykgdCkpOworCQkJfSBlbHNlIHsK KwkJCQlEVUtfQVNTRVJUKHQgPCBEVUtfSE9CSkVDVF9HRVRfRVNJWkUob2JqKSk7CisJCQkJaWYg KERVS19IT0JKRUNUX0VfR0VUX0tFWShoZWFwLCBvYmosIHQpID09IGtleSkgeworCQkJCQlEVUtf REREKERVS19ERERQUklOVCgibG9va3VwIGhpdCBpPSVsZCwgdD0lbGQgLT4ga2V5ICVwIiwKKwkJ CQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGksIChsb25nKSB0LCAodm9pZCAqKSBrZXkp KTsKKwkJCQkJKmVfaWR4ID0gKGR1a19pbnRfdCkgdDsKKwkJCQkJKmhfaWR4ID0gKGR1a19pbnRf dCkgaTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJs b29rdXAgbWlzcyBpPSVsZCwgdD0lbGQiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSBpLCAobG9uZykgdCkpOworCQkJfQorCQkJaSA9IChpICsgc3RlcCkgJiBtYXNrOworCisJCQkv KiBHdWFyYW50ZWVkIHRvIGZpbmlzaCAoaGFzaCBpcyBsYXJnZXIgdGhhbiAjcHJvcHMpLiAqLwor CQl9CisJfQorI2VuZGlmICAvKiBEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJUICovCisKKwkvKiBO b3QgZm91bmQsIGxlYXZlIGVfaWR4IGFuZCBoX2lkeCB1bnNldC4gKi8KKwlyZXR1cm4gMDsKK30K KworLyogRm9yIGludGVybmFsIHVzZTogZ2V0IG5vbi1hY2Nlc3NvciBlbnRyeSB2YWx1ZSAqLwor RFVLX0lOVEVSTkFMIGR1a190dmFsICpkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5X3R2 YWxfcHRyKGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAqa2V5 KSB7CisJZHVrX2ludF90IGVfaWR4OworCWR1a19pbnRfdCBoX2lkeDsKKworCURVS19BU1NFUlQo b2JqICE9IE5VTEwpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19VTlJFRihoZWFw KTsKKworCWlmIChkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5KGhlYXAsIG9iaiwga2V5 LCAmZV9pZHgsICZoX2lkeCkpIHsKKwkJRFVLX0FTU0VSVChlX2lkeCA+PSAwKTsKKwkJaWYgKCFE VUtfSE9CSkVDVF9FX1NMT1RfSVNfQUNDRVNTT1IoaGVhcCwgb2JqLCBlX2lkeCkpIHsKKwkJCXJl dHVybiBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9UVkFMX1BUUihoZWFwLCBvYmosIGVfaWR4KTsK KwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogRm9yIGludGVybmFsIHVzZTogZ2V0IG5v bi1hY2Nlc3NvciBlbnRyeSB2YWx1ZSBhbmQgYXR0cmlidXRlcyAqLworRFVLX0lOVEVSTkFMIGR1 a190dmFsICpkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5X3R2YWxfcHRyX2FuZF9hdHRy cyhkdWtfaGVhcCAqaGVhcCwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtleSwgZHVr X3VpbnRfdCAqb3V0X2F0dHJzKSB7CisJZHVrX2ludF90IGVfaWR4OworCWR1a19pbnRfdCBoX2lk eDsKKworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwp OworCURVS19BU1NFUlQob3V0X2F0dHJzICE9IE5VTEwpOworCURVS19VTlJFRihoZWFwKTsKKwor CWlmIChkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5KGhlYXAsIG9iaiwga2V5LCAmZV9p ZHgsICZoX2lkeCkpIHsKKwkJRFVLX0FTU0VSVChlX2lkeCA+PSAwKTsKKwkJaWYgKCFEVUtfSE9C SkVDVF9FX1NMT1RfSVNfQUNDRVNTT1IoaGVhcCwgb2JqLCBlX2lkeCkpIHsKKwkJCSpvdXRfYXR0 cnMgPSBEVUtfSE9CSkVDVF9FX0dFVF9GTEFHUyhoZWFwLCBvYmosIGVfaWR4KTsKKwkJCXJldHVy biBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9UVkFMX1BUUihoZWFwLCBvYmosIGVfaWR4KTsKKwkJ fQorCX0KKwkvKiBJZiBub3QgZm91bmQsIG91dF9hdHRycyBpcyBsZWZ0IHVuc2V0LiAqLworCXJl dHVybiBOVUxMOworfQorCisvKiBGb3IgaW50ZXJuYWwgdXNlOiBnZXQgYXJyYXkgcGFydCB2YWx1 ZSAqLworRFVLX0lOVEVSTkFMIGR1a190dmFsICpkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2Fy cmF5X2VudHJ5X3R2YWxfcHRyKGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtf dWFycmlkeF90IGkpIHsKKwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxM KTsKKwlEVUtfVU5SRUYoaGVhcCk7CisKKwlpZiAoIURVS19IT0JKRUNUX0hBU19BUlJBWV9QQVJU KG9iaikpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChpID49IERVS19IT0JKRUNUX0dFVF9B U0laRShvYmopKSB7CisJCXJldHVybiBOVUxMOworCX0KKwl0diA9IERVS19IT0JKRUNUX0FfR0VU X1ZBTFVFX1BUUihoZWFwLCBvYmosIGkpOworCXJldHVybiB0djsKK30KKworLyoKKyAqICBBbGxv Y2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBlbnRyeSwgcmVzaXppbmcgdGhlIHByb3BlcnRpZXMg YWxsb2NhdGlvbgorICogIGlmIG5lY2Vzc2FyeS4gIFJldHVybnMgZW50cnkgaW5kZXggKGVfaWR4 KSBvciB0aHJvd3MgYW4gZXJyb3IgaWYgYWxsb2MgZmFpbHMuCisgKgorICogIFNldHMgdGhlIGtl eSBvZiB0aGUgZW50cnkgKGluY3JlYXNpbmcgdGhlIGtleSdzIHJlZmNvdW50KSwgYW5kIHVwZGF0 ZXMKKyAqICB0aGUgaGFzaCBwYXJ0IGlmIGl0IGV4aXN0cy4gIENhbGxlciBtdXN0IHNldCB2YWx1 ZSBhbmQgZmxhZ3MsIGFuZCB1cGRhdGUKKyAqICB0aGUgZW50cnkgdmFsdWUgcmVmY291bnQuICBB IGRlY3JlZiBmb3IgdGhlIHByZXZpb3VzIHZhbHVlIGlzIG5vdCBuZWNlc3NhcnkuCisgKi8KKwor RFVLX0xPQ0FMIGR1a19pbnRfdCBkdWtfX2hvYmplY3RfYWxsb2NfZW50cnlfY2hlY2tlZChkdWtf aHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAqa2V5KSB7CisJZHVr X3VpbnQzMl90IGlkeDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQo b2JqICE9IE5VTEwpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVL X0hPQkpFQ1RfR0VUX0VORVhUKG9iaikgPD0gRFVLX0hPQkpFQ1RfR0VUX0VTSVpFKG9iaikpOwor CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJLyoga2V5IG11c3Qgbm90IGFscmVh ZHkgZXhpc3QgaW4gZW50cnkgcGFydCAqLworCXsKKwkJZHVrX3VpbnRfZmFzdDMyX3QgaTsKKwkJ Zm9yIChpID0gMDsgaSA8IERVS19IT0JKRUNUX0dFVF9FTkVYVChvYmopOyBpKyspIHsKKwkJCURV S19BU1NFUlQoRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKHRoci0+aGVhcCwgb2JqLCBpKSAhPSBrZXkp OworCQl9CisJfQorI2VuZGlmCisKKwlpZiAoRFVLX0hPQkpFQ1RfR0VUX0VORVhUKG9iaikgPj0g RFVLX0hPQkpFQ1RfR0VUX0VTSVpFKG9iaikpIHsKKwkJLyogb25seSBuZWVkIHRvIGd1YXJhbnRl ZSAxIG1vcmUgc2xvdCwgYnV0IGFsbG9jYXRpb24gZ3Jvd3RoIGlzIGluIGNodW5rcyAqLworCQlE VUtfREREKERVS19ERERQUklOVCgiZW50cnkgcGFydCBmdWxsLCBhbGxvY2F0ZSBzcGFjZSBmb3Ig b25lIG1vcmUgZW50cnkiKSk7CisJCWR1a19fZ3Jvd19wcm9wc19mb3JfbmV3X2VudHJ5X2l0ZW0o dGhyLCBvYmopOworCX0KKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9FTkVYVChvYmopIDwg RFVLX0hPQkpFQ1RfR0VUX0VTSVpFKG9iaikpOworCWlkeCA9IERVS19IT0JKRUNUX1BPU1RJTkNf RU5FWFQob2JqKTsKKworCS8qIHByZXZpb3VzIHZhbHVlIGlzIGFzc3VtZWQgdG8gYmUgZ2FyYmFn ZSwgc28gZG9uJ3QgdG91Y2ggaXQgKi8KKwlEVUtfSE9CSkVDVF9FX1NFVF9LRVkodGhyLT5oZWFw LCBvYmosIGlkeCwga2V5KTsKKwlEVUtfSFNUUklOR19JTkNSRUYodGhyLCBrZXkpOworCisjaWYg ZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJUKQorCWlmIChEVUtfVU5MSUtFTFkoRFVL X0hPQkpFQ1RfR0VUX0hTSVpFKG9iaikgPiAwKSkgeworCQlkdWtfdWludDMyX3QgbiwgbWFzazsK KwkJZHVrX3VpbnQzMl90IGksIHN0ZXA7CisJCWR1a191aW50MzJfdCAqaF9iYXNlID0gRFVLX0hP QkpFQ1RfSF9HRVRfQkFTRSh0aHItPmhlYXAsIG9iaik7CisKKwkJbiA9IERVS19IT0JKRUNUX0dF VF9IU0laRShvYmopOworCQltYXNrID0gbiAtIDE7CisJCWkgPSBEVUtfSFNUUklOR19HRVRfSEFT SChrZXkpICYgbWFzazsKKwkJc3RlcCA9IDE7ICAvKiBDYWNoZSBmcmllbmRseSBidXQgY2x1c3Rl cmluZyBwcm9uZS4gKi8KKworCQlmb3IgKDs7KSB7CisJCQlkdWtfdWludDMyX3QgdCA9IGhfYmFz ZVtpXTsKKwkJCWlmICh0ID09IERVS19fSEFTSF9VTlVTRUQgfHwgdCA9PSBEVUtfX0hBU0hfREVM RVRFRCkgeworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJkdWtfX2hvYmplY3RfYWxsb2NfZW50 cnlfY2hlY2tlZCgpIGluc2VydGVkIGtleSBpbnRvIGhhc2ggcGFydCwgJWxkIC0+ICVsZCIsCisJ CQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGksIChsb25nKSBpZHgpKTsKKwkJCQlEVUtf QVNTRVJUX0RJU0FCTEUoaSA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJCQkJRFVLX0FTU0VSVChp IDwgRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKG9iaikpOworCQkJCURVS19BU1NFUlRfRElTQUJMRShp ZHggPj0gMCk7CisJCQkJRFVLX0FTU0VSVChpZHggPCBEVUtfSE9CSkVDVF9HRVRfRVNJWkUob2Jq KSk7CisJCQkJaF9iYXNlW2ldID0gaWR4OworCQkJCWJyZWFrOworCQkJfQorCQkJRFVLX0RERChE VUtfREREUFJJTlQoImR1a19faG9iamVjdF9hbGxvY19lbnRyeV9jaGVja2VkKCkgbWlzcyAlbGQi LCAobG9uZykgaSkpOworCQkJaSA9IChpICsgc3RlcCkgJiBtYXNrOworCisJCQkvKiBHdWFyYW50 ZWVkIHRvIGZpbmlzaCAoaGFzaCBpcyBsYXJnZXIgdGhhbiAjcHJvcHMpLiAqLworCQl9CisJfQor I2VuZGlmICAvKiBEVUtfVVNFX0hPQkpFQ1RfSEFTSF9QQVJUICovCisKKwkvKiBOb3RlOiB3ZSBj b3VsZCByZXR1cm4gdGhlIGhhc2ggaW5kZXggaGVyZSB0b28sIGJ1dCBpdCdzIG5vdAorCSAqIG5l ZWRlZCByaWdodCBub3cuCisJICovCisKKwlEVUtfQVNTRVJUX0RJU0FCTEUoaWR4ID49IDApOwor CURVS19BU1NFUlQoaWR4IDwgRFVLX0hPQkpFQ1RfR0VUX0VTSVpFKG9iaikpOworCURVS19BU1NF UlQoaWR4IDwgRFVLX0hPQkpFQ1RfR0VUX0VORVhUKG9iaikpOworCXJldHVybiAoZHVrX2ludF90 KSBpZHg7Cit9CisKKy8qCisgKiAgT2JqZWN0IGludGVybmFsIHZhbHVlCisgKgorICogIFJldHVy bmVkIHZhbHVlIGlzIGd1YXJhbnRlZWQgdG8gYmUgcmVhY2hhYmxlIC8gaW5jcmVmJ2QsIGNhbGxl ciBkb2VzIG5vdCBuZWVkCisgKiAgdG8gaW5jcmVmIE9SIGRlY3JlZi4gIE5vIHByb3hpZXMgb3Ig YWNjZXNzb3JzIGFyZSBpbnZva2VkLCBubyBwcm90b3R5cGUgd2Fsay4KKyAqLworCitEVUtfSU5U RVJOQUwgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9nZXRfaW50ZXJuYWxfdmFsdWUoZHVrX2hlYXAg KmhlYXAsIGR1a19ob2JqZWN0ICpvYmosIGR1a190dmFsICp0dl9vdXQpIHsKKwlkdWtfaW50X3Qg ZV9pZHg7CisJZHVrX2ludF90IGhfaWR4OworCisJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOwor CURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19BU1NFUlQodHZfb3V0ICE9IE5VTEwpOwor CisJLyogQWx3YXlzIGluIGVudHJ5IHBhcnQsIG5vIG5lZWQgdG8gbG9vayB1cCBwYXJlbnRzIGV0 Yy4gKi8KKwlpZiAoZHVrX2hvYmplY3RfZmluZF9leGlzdGluZ19lbnRyeShoZWFwLCBvYmosIERV S19IRUFQX1NUUklOR19JTlRfVkFMVUUoaGVhcCksICZlX2lkeCwgJmhfaWR4KSkgeworCQlEVUtf QVNTRVJUKGVfaWR4ID49IDApOworCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9FX1NMT1RfSVNf QUNDRVNTT1IoaGVhcCwgb2JqLCBlX2lkeCkpOworCQlEVUtfVFZBTF9TRVRfVFZBTCh0dl9vdXQs IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1RWQUxfUFRSKGhlYXAsIG9iaiwgZV9pZHgpKTsKKwkJ cmV0dXJuIDE7CisJfQorCURVS19UVkFMX1NFVF9VTkRFRklORUQodHZfb3V0KTsKKwlyZXR1cm4g MDsKK30KKworRFVLX0lOVEVSTkFMIGR1a19oc3RyaW5nICpkdWtfaG9iamVjdF9nZXRfaW50ZXJu YWxfdmFsdWVfc3RyaW5nKGR1a19oZWFwICpoZWFwLCBkdWtfaG9iamVjdCAqb2JqKSB7CisJZHVr X3R2YWwgdHY7CisKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvYmog IT0gTlVMTCk7CisKKwkvKiBUaGlzIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBhdm9p ZHMgY29tcGlsZXIgd2FybmluZ3M7IGUuZy4KKwkgKiBnY2Mgd29uJ3QgcmVsaWFibHkgZGV0ZWN0 IHRoYXQgbm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQgYmVsb3cuCisJICovCisJZHVrX21l bXplcm8oKHZvaWQgKikgJnR2LCBzaXplb2YoZHVrX3R2YWwpKTsKKworCWlmIChkdWtfaG9iamVj dF9nZXRfaW50ZXJuYWxfdmFsdWUoaGVhcCwgb2JqLCAmdHYpKSB7CisJCWR1a19oc3RyaW5nICpo OworCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1NUUklORygmdHYpKTsKKwkJaCA9IERVS19UVkFM X0dFVF9TVFJJTkcoJnR2KTsKKwkJLyogTm8gZXhwbGljaXQgY2hlY2sgZm9yIHN0cmluZyB2cy4g c3ltYm9sLCBhY2NlcHQgYm90aC4gKi8KKwkJcmV0dXJuIGg7CisJfQorCisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiAgQXJndW1lbnRzIGhhbmRsaW5nIGhlbHBlcnMgKGFyZ3VtZW50IG1hcCBt YWlubHkpLgorICoKKyAqICBBbiBhcmd1bWVudHMgb2JqZWN0IGhhcyBleG90aWMgYmVoYXZpb3Ig Zm9yIHNvbWUgbnVtZXJpYyBpbmRpY2VzLgorICogIEFjY2Vzc2VzIG1heSB0cmFuc2xhdGUgdG8g aWRlbnRpZmllciBvcGVyYXRpb25zIHdoaWNoIG1heSBoYXZlCisgKiAgYXJiaXRyYXJ5IHNpZGUg ZWZmZWN0cyAocG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIGFueSBkdWtfdHZhbAorICogIHBvaW50 ZXJzKS4KKyAqLworCisvKiBMb29rdXAgJ2tleScgZnJvbSBhcmd1bWVudHMgaW50ZXJuYWwgJ21h cCcsIHBlcmZvcm0gYSB2YXJpYWJsZSBsb29rdXAKKyAqIGlmIG1hcHBlZCwgYW5kIGxlYXZlIHRo ZSByZXN1bHQgb24gdG9wIG9mIHN0YWNrIChhbmQgcmV0dXJuIG5vbi16ZXJvKS4KKyAqIFVzZWQg aW4gRTUgU2VjdGlvbiAxMC42IGFsZ29yaXRobXMgW1tHZXRdXSBhbmQgW1tHZXRPd25Qcm9wZXJ0 eV1dLgorICovCitEVUtfTE9DQUwKK2R1a19ib29sX3QgZHVrX19sb29rdXBfYXJndW1lbnRzX21h cChkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGR1a19ob2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX2hzdHJpbmcgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk dWtfcHJvcGRlc2MgKnRlbXBfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkdWtfaG9iamVjdCAqKm91dF9tYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX2hvYmplY3QgKipvdXRfdmFyZW52KSB7CisJZHVrX2hvYmplY3QgKm1hcDsK KwlkdWtfaG9iamVjdCAqdmFyZW52OworCWR1a19ib29sX3QgcmM7CisKKwlEVUtfQVNTRVJUX1ZB TFNUQUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFDS19TUEFDRSk7CisKKwlEVUtfREREKERVS19E RERQUklOVCgiYXJndW1lbnRzIG1hcCBsb29rdXA6IHRocj0lcCwgb2JqPSVwLCBrZXk9JXAsIHRl bXBfZGVzYz0lcCAiCisJICAgICAgICAgICAgICAgICAgICAgIihvYmogLT4gJSFPLCBrZXkgLT4g JSFPKSIsCisJICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLCAodm9pZCAqKSBvYmos ICh2b2lkICopIGtleSwgKHZvaWQgKikgdGVtcF9kZXNjLAorCSAgICAgICAgICAgICAgICAgICAg IChkdWtfaGVhcGhkciAqKSBvYmosIChkdWtfaGVhcGhkciAqKSBrZXkpKTsKKworCWlmICghZHVr X2hvYmplY3RfZ2V0X293bl9wcm9wZGVzYyh0aHIsIG9iaiwgRFVLX0hUSFJFQURfU1RSSU5HX0lO VF9NQVAodGhyKSwgdGVtcF9kZXNjLCBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUpKSB7CisJ CURVS19EREQoRFVLX0RERFBSSU5UKCItPiBubyAnbWFwJyIpKTsKKwkJcmV0dXJuIDA7CisJfQor CisJbWFwID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKG1hcCAh PSBOVUxMKTsKKwlkdWtfcG9wX3Vuc2FmZSh0aHIpOyAgLyogbWFwIGlzIHJlYWNoYWJsZSB0aHJv dWdoIG9iaiAqLworCisJaWYgKCFkdWtfaG9iamVjdF9nZXRfb3duX3Byb3BkZXNjKHRociwgbWFw LCBrZXksIHRlbXBfZGVzYywgRFVLX0dFVERFU0NfRkxBR19QVVNIX1ZBTFVFKSkgeworCQlEVUtf REREKERVS19ERERQUklOVCgiLT4gJ21hcCcgZXhpc3RzLCBidXQga2V5IG5vdCBpbiBtYXAiKSk7 CisJCXJldHVybiAwOworCX0KKworCS8qIFsuLi4gdmFybmFtZV0gKi8KKwlEVUtfREREKERVS19E RERQUklOVCgiLT4gJ21hcCcgZXhpc3RzLCBhbmQgY29udGFpbnMga2V5LCBrZXkgaXMgbWFwcGVk IHRvIGFyZ3VtZW50L3ZhcmlhYmxlIGJpbmRpbmcgJSFUIiwKKwkgICAgICAgICAgICAgICAgICAg ICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJRFVLX0FTU0VSVChkdWtf aXNfc3RyaW5nKHRociwgLTEpKTsgIC8qIGd1YXJhbnRlZWQgd2hlbiBidWlsZGluZyBhcmd1bWVu dHMgKi8KKworCS8qIGdldCB2YXJlbnYgZm9yIHZhcm5hbWUgKGNhbGxlZSdzIGRlY2xhcmF0aXZl IGxleGljYWwgZW52aXJvbm1lbnQpICovCisJcmMgPSBkdWtfaG9iamVjdF9nZXRfb3duX3Byb3Bk ZXNjKHRociwgb2JqLCBEVUtfSFRIUkVBRF9TVFJJTkdfSU5UX1ZBUkVOVih0aHIpLCB0ZW1wX2Rl c2MsIERVS19HRVRERVNDX0ZMQUdfUFVTSF9WQUxVRSk7CisJRFVLX1VOUkVGKHJjKTsKKwlEVUtf QVNTRVJUKHJjICE9IDApOyAgLyogYXJndW1lbnRzIE1VU1QgaGF2ZSBhbiBpbml0aWFsaXplZCBs ZXhpY2FsIGVudmlyb25tZW50IHJlZmVyZW5jZSAqLworCXZhcmVudiA9IGR1a19yZXF1aXJlX2hv YmplY3QodGhyLCAtMSk7CisJRFVLX0FTU0VSVCh2YXJlbnYgIT0gTlVMTCk7CisJZHVrX3BvcF91 bnNhZmUodGhyKTsgIC8qIHZhcmVudiByZW1haW5zIHJlYWNoYWJsZSB0aHJvdWdoICdvYmonICov CisKKwlEVUtfREREKERVS19ERERQUklOVCgiYXJndW1lbnRzIHZhcmVudiBpczogJSFkTyIsIChk dWtfaGVhcGhkciAqKSB2YXJlbnYpKTsKKworCS8qIHN1Y2Nlc3M6IGxlYXZlIHZhcm5hbWUgaW4g c3RhY2sgKi8KKwkqb3V0X21hcCA9IG1hcDsKKwkqb3V0X3ZhcmVudiA9IHZhcmVudjsKKwlyZXR1 cm4gMTsgIC8qIFsuLi4gdmFybmFtZV0gKi8KK30KKworLyogTG9va3VwICdrZXknIGZyb20gYXJn dW1lbnRzIGludGVybmFsICdtYXAnLCBhbmQgbGVhdmUgcmVwbGFjZW1lbnQgdmFsdWUKKyAqIG9u IHN0YWNrIHRvcCBpZiBtYXBwZWQgKGFuZCByZXR1cm4gbm9uLXplcm8pLgorICogVXNlZCBpbiBF NSBTZWN0aW9uIDEwLjYgYWxnb3JpdGhtIGZvciBbW0dldE93blByb3BlcnR5XV0gKHVzZWQgYnkg W1tHZXRdXSkuCisgKi8KK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fY2hlY2tfYXJndW1lbnRz X21hcF9mb3JfZ2V0KGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpvYmosIGR1a19oc3Ry aW5nICprZXksIGR1a19wcm9wZGVzYyAqdGVtcF9kZXNjKSB7CisJZHVrX2hvYmplY3QgKm1hcDsK KwlkdWtfaG9iamVjdCAqdmFyZW52OworCWR1a19oc3RyaW5nICp2YXJuYW1lOworCisJRFVLX0FT U0VSVF9WQUxTVEFDS19TUEFDRSh0aHIsIERVS19fVkFMU1RBQ0tfU1BBQ0UpOworCisJaWYgKCFk dWtfX2xvb2t1cF9hcmd1bWVudHNfbWFwKHRociwgb2JqLCBrZXksIHRlbXBfZGVzYywgJm1hcCwg JnZhcmVudikpIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImFyZ3VtZW50czoga2V5IG5vdCBt YXBwZWQsIG5vIGV4b3RpYyBnZXQgYmVoYXZpb3IiKSk7CisJCXJldHVybiAwOworCX0KKworCS8q IFsuLi4gdmFybmFtZV0gKi8KKworCXZhcm5hbWUgPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwg LTEpOworCURVS19BU1NFUlQodmFybmFtZSAhPSBOVUxMKTsKKwlkdWtfcG9wX3Vuc2FmZSh0aHIp OyAgLyogdmFybmFtZSBpcyBzdGlsbCByZWFjaGFibGUgKi8KKworCURVS19EREQoRFVLX0RERFBS SU5UKCJhcmd1bWVudHMgb2JqZWN0IGF1dG9tYXRpYyBnZXR2YXIgZm9yIGEgYm91bmQgdmFyaWFi bGU7ICIKKwkgICAgICAgICAgICAgICAgICAgICAia2V5PSUhTywgdmFybmFtZT0lIU8iLAorCSAg ICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBrZXksCisJICAgICAgICAgICAgICAg ICAgICAgKGR1a19oZWFwaGRyICopIHZhcm5hbWUpKTsKKworCSh2b2lkKSBkdWtfanNfZ2V0dmFy X2VudnJlYyh0aHIsIHZhcmVudiwgdmFybmFtZSwgMSAvKnRocm93Ki8pOworCisJLyogWy4uLiB2 YWx1ZSB0aGlzX2JpbmRpbmddICovCisKKwlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCisJLyogbGVh dmUgcmVzdWx0IG9uIHN0YWNrIHRvcCAqLworCXJldHVybiAxOworfQorCisvKiBMb29rdXAgJ2tl eScgZnJvbSBhcmd1bWVudHMgaW50ZXJuYWwgJ21hcCcsIHBlcmZvcm0gYSB2YXJpYWJsZSB3cml0 ZSBpZiBtYXBwZWQuCisgKiBVc2VkIGluIEU1IFNlY3Rpb24gMTAuNiBhbGdvcml0aG0gZm9yIFtb RGVmaW5lT3duUHJvcGVydHldXSAodXNlZCBieSBbW1B1dF1dKS4KKyAqIEFzc3VtZXMgc3RhY2sg dG9wIGNvbnRhaW5zICdwdXQnIHZhbHVlICh3aGljaCBpcyBOT1QgcG9wcGVkKS4KKyAqLworRFVL X0xPQ0FMIHZvaWQgZHVrX19jaGVja19hcmd1bWVudHNfbWFwX2Zvcl9wdXQoZHVrX2h0aHJlYWQg KnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX3Byb3BkZXNjICp0 ZW1wX2Rlc2MsIGR1a19ib29sX3QgdGhyb3dfZmxhZykgeworCWR1a19ob2JqZWN0ICptYXA7CisJ ZHVrX2hvYmplY3QgKnZhcmVudjsKKwlkdWtfaHN0cmluZyAqdmFybmFtZTsKKworCURVS19BU1NF UlRfVkFMU1RBQ0tfU1BBQ0UodGhyLCBEVUtfX1ZBTFNUQUNLX1NQQUNFKTsKKworCWlmICghZHVr X19sb29rdXBfYXJndW1lbnRzX21hcCh0aHIsIG9iaiwga2V5LCB0ZW1wX2Rlc2MsICZtYXAsICZ2 YXJlbnYpKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJhcmd1bWVudHM6IGtleSBub3QgbWFw cGVkLCBubyBleG90aWMgcHV0IGJlaGF2aW9yIikpOworCQlyZXR1cm47CisJfQorCisJLyogWy4u LiBwdXRfdmFsdWUgdmFybmFtZV0gKi8KKworCXZhcm5hbWUgPSBkdWtfcmVxdWlyZV9oc3RyaW5n KHRociwgLTEpOworCURVS19BU1NFUlQodmFybmFtZSAhPSBOVUxMKTsKKwlkdWtfcG9wX3Vuc2Fm ZSh0aHIpOyAgLyogdmFybmFtZSBpcyBzdGlsbCByZWFjaGFibGUgKi8KKworCURVS19EREQoRFVL X0RERFBSSU5UKCJhcmd1bWVudHMgb2JqZWN0IGF1dG9tYXRpYyBwdXR2YXIgZm9yIGEgYm91bmQg dmFyaWFibGU7ICIKKwkgICAgICAgICAgICAgICAgICAgICAia2V5PSUhTywgdmFybmFtZT0lIU8s IHZhbHVlPSUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a19oZWFwaGRyICopIGtleSwK KwkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgdmFybmFtZSwKKwkgICAgICAg ICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKSkpOwor CisJLyogWy4uLiBwdXRfdmFsdWVdICovCisKKwkvKgorCSAqICBOb3RlOiBhbHRob3VnaCBhcmd1 bWVudHMgb2JqZWN0IHZhcmlhYmxlIG1hcHBpbmdzIGFyZSBvbmx5IGVzdGFibGlzaGVkCisJICog IGZvciBub24tc3RyaWN0IGZ1bmN0aW9ucyAoYW5kIGEgY2FsbCB0byBhIG5vbi1zdHJpY3QgZnVu Y3Rpb24gY3JlYXRlZAorCSAqICB0aGUgYXJndW1lbnRzIG9iamVjdCBpbiBxdWVzdGlvbiksIGFu IGlubmVyIHN0cmljdCBmdW5jdGlvbiBtYXkgYmUgZG9pbmcKKwkgKiAgdGhlIGFjdHVhbCBwcm9w ZXJ0eSB3cml0ZS4gIEhlbmNlIHRoZSB0aHJvd19mbGFnIGFwcGxpZWQgaGVyZSBjb21lcyBmcm9t CisJICogIHRoZSBwcm9wZXJ0eSB3cml0ZSBjYWxsLgorCSAqLworCisJZHVrX2pzX3B1dHZhcl9l bnZyZWModGhyLCB2YXJlbnYsIHZhcm5hbWUsIGR1a19yZXF1aXJlX3R2YWwodGhyLCAtMSksIHRo cm93X2ZsYWcpOworCisJLyogWy4uLiBwdXRfdmFsdWVdICovCit9CisKKy8qIExvb2t1cCAna2V5 JyBmcm9tIGFyZ3VtZW50cyBpbnRlcm5hbCAnbWFwJywgZGVsZXRlIG1hcHBpbmcgaWYgZm91bmQu CisgKiBVc2VkIGluIEU1IFNlY3Rpb24gMTAuNiBhbGdvcml0aG0gZm9yIFtbRGVsZXRlXV0uICBO b3RlIHRoYXQgdGhlCisgKiB2YXJpYWJsZS9hcmd1bWVudCBpdHNlbGYgKHdoZXJlIHRoZSBtYXAg cG9pbnRzKSBpcyBub3QgZGVsZXRlZC4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19jaGVja19h cmd1bWVudHNfbWFwX2Zvcl9kZWxldGUoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9i aiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX3Byb3BkZXNjICp0ZW1wX2Rlc2MpIHsKKwlkdWtfaG9i amVjdCAqbWFwOworCisJRFVLX0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIsIERVS19fVkFMU1RB Q0tfU1BBQ0UpOworCisJaWYgKCFkdWtfaG9iamVjdF9nZXRfb3duX3Byb3BkZXNjKHRociwgb2Jq LCBEVUtfSFRIUkVBRF9TVFJJTkdfSU5UX01BUCh0aHIpLCB0ZW1wX2Rlc2MsIERVS19HRVRERVND X0ZMQUdfUFVTSF9WQUxVRSkpIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImFyZ3VtZW50czog a2V5IG5vdCBtYXBwZWQsIG5vIGV4b3RpYyBkZWxldGUgYmVoYXZpb3IiKSk7CisJCXJldHVybjsK Kwl9CisKKwltYXAgPSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgLTEpOworCURVS19BU1NFUlQo bWFwICE9IE5VTEwpOworCWR1a19wb3BfdW5zYWZlKHRocik7ICAvKiBtYXAgaXMgcmVhY2hhYmxl IHRocm91Z2ggb2JqICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiLT4gaGF2ZSAnbWFwJywg ZGVsZXRlIGtleSAlIU8gZnJvbSBtYXAgKGlmIGV4aXN0cykpOyBpZ25vcmUgcmVzdWx0IiwKKwkg ICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikga2V5KSk7CisKKwkvKiBOb3RlOiBu byByZWN1cnNpb24gaXNzdWUsIHdlIGNhbiB0cnVzdCAnbWFwJyB0byBiZWhhdmUgKi8KKwlEVUtf QVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0JFSEFWSU9SKG1hcCkpOworCURVS19EREQo RFVLX0RERFBSSU5UKCJtYXAgYmVmb3JlIGRlbGV0aW9uOiAlIU8iLCAoZHVrX2hlYXBoZHIgKikg bWFwKSk7CisJKHZvaWQpIGR1a19ob2JqZWN0X2RlbHByb3BfcmF3KHRociwgbWFwLCBrZXksIDAp OyAgLyogaWdub3JlIHJlc3VsdCAqLworCURVS19EREQoRFVLX0RERFBSSU5UKCJtYXAgYWZ0ZXIg ZGVsZXRpb246ICUhTyIsIChkdWtfaGVhcGhkciAqKSBtYXApKTsKK30KKworLyoKKyAqICBFQ01B U2NyaXB0IGNvbXBsaWFudCBbW0dldE93blByb3BlcnR5XV0oUCksIGZvciBpbnRlcm5hbCB1c2Ug b25seS4KKyAqCisgKiAgSWYgcHJvcGVydHkgaXMgZm91bmQ6CisgKiAgICAtIEZpbGxzIGRlc2Ny aXB0b3IgZmllbGRzIHRvICdvdXRfZGVzYycKKyAqICAgIC0gSWYgRFVLX0dFVERFU0NfRkxBR19Q VVNIX1ZBTFVFIGlzIHNldCwgcHVzaGVzIGEgdmFsdWUgcmVsYXRlZCB0byB0aGUKKyAqICAgICAg cHJvcGVydHkgb250byB0aGUgc3RhY2sgKCd1bmRlZmluZWQnIGZvciBhY2Nlc3NvciBwcm9wZXJ0 aWVzKS4KKyAqICAgIC0gUmV0dXJucyBub24temVybworICoKKyAqICBJZiBwcm9wZXJ0eSBpcyBu b3QgZm91bmQ6CisgKiAgICAtICdvdXRfZGVzYycgaXMgbGVmdCBpbiB1bnRvdWNoZWQgc3RhdGUg KHBvc3NpYmx5IGdhcmJhZ2UpCisgKiAgICAtIE5vdGhpbmcgaXMgcHVzaGVkIG9udG8gdGhlIHN0 YWNrIChub3QgZXZlbiB3aXRoIERVS19HRVRERVNDX0ZMQUdfUFVTSF9WQUxVRQorICogICAgICBz ZXQpCisgKiAgICAtIFJldHVybnMgemVybworICoKKyAqICBOb3RlczoKKyAqCisgKiAgICAtIEdl dHRpbmcgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIG1heSBjYXVzZSBhbiBhbGxvY2F0aW9uIChhbmQg aGVuY2UKKyAqICAgICAgR0MpIHRvIHRha2UgcGxhY2UsIGhlbmNlIHJlYWNoYWJpbGl0eSBhbmQg cmVmY291bnQgb2YgYWxsIHJlbGF0ZWQKKyAqICAgICAgdmFsdWVzIG1hdHRlci4gIFJlYWxsb2Nh dGlvbiBvZiB2YWx1ZSBzdGFjaywgcHJvcGVydGllcywgZXRjIG1heQorICogICAgICBpbnZhbGlk YXRlIG1hbnkgZHVrX3R2YWwgcG9pbnRlcnMgKGNvbmNyZXRlbHksIHRob3NlIHdoaWNoIHJlc2lk ZQorICogICAgICBpbiBtZW1vcnkgYXJlYXMgc3ViamVjdCB0byByZWFsbG9jYXRpb24pLiAgSG93 ZXZlciwgaGVhcCBvYmplY3QKKyAqICAgICAgcG9pbnRlcnMgYXJlIG5ldmVyIGFmZmVjdGVkICho ZWFwIG9iamVjdHMgaGF2ZSBzdGFibGUgcG9pbnRlcnMpLgorICoKKyAqICAgIC0gVGhlIHZhbHVl IG9mIGEgcGxhaW4gcHJvcGVydHkgaXMgYWx3YXlzIHJlYWNoYWJsZSBhbmQgaGFzIGEgbm9uLXpl cm8KKyAqICAgICAgcmVmZXJlbmNlIGNvdW50LgorICoKKyAqICAgIC0gVGhlIHZhbHVlIG9mIGEg dmlydHVhbCBwcm9wZXJ0eSBpcyBub3QgbmVjZXNzYXJpbHkgcmVhY2hhYmxlIGZyb20KKyAqICAg ICAgZWxzZXdoZXJlIGFuZCBtYXkgaGF2ZSBhIHJlZmNvdW50IG9mIHplcm8uICBIZW5jZSB3ZSBw dXNoIGl0IG9udG8KKyAqICAgICAgdGhlIHZhbHN0YWNrIGZvciB0aGUgY2FsbGVyLCB3aGljaCBl bnN1cmVzIGl0IHJlbWFpbnMgcmVhY2hhYmxlCisgKiAgICAgIHdoaWxlIGl0IGlzIG5lZWRlZC4K KyAqCisgKiAgICAtIFRoZXJlIGFyZSBubyB2aXJ0dWFsIGFjY2Vzc29yIHByb3BlcnRpZXMuICBI ZW5jZSwgYWxsIGdldHRlcnMgYW5kCisgKiAgICAgIHNldHRlcnMgYXJlIGFsd2F5cyByZWxhdGVk IHRvIGNvbmNyZXRlbHkgc3RvcmVkIHByb3BlcnRpZXMsIHdoaWNoCisgKiAgICAgIGVuc3VyZXMg dGhhdCB0aGUgZ2V0L3NldCBmdW5jdGlvbnMgaW4gdGhlIHJlc3VsdGluZyBkZXNjcmlwdG9yIGFy ZQorICogICAgICByZWFjaGFibGUgYW5kIGhhdmUgbm9uLXplcm8gcmVmY291bnRzLiAgU2hvdWxk IHRoZXJlIGJlIHZpcnR1YWwKKyAqICAgICAgYWNjZXNzb3IgcHJvcGVydGllcyBsYXRlciwgdGhp cyB3b3VsZCBuZWVkIHRvIGNoYW5nZS4KKyAqLworCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtf X2dldF9vd25fcHJvcGRlc2NfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpvYmos IGR1a19oc3RyaW5nICprZXksIGR1a191aW50MzJfdCBhcnJfaWR4LCBkdWtfcHJvcGRlc2MgKm91 dF9kZXNjLCBkdWtfc21hbGxfdWludF90IGZsYWdzKSB7CisJZHVrX3R2YWwgKnR2OworCisJRFVL X0RERChEVUtfREREUFJJTlQoImR1a19ob2JqZWN0X2dldF9vd25fcHJvcGRlc2M6IHRocj0lcCwg b2JqPSVwLCBrZXk9JXAsIG91dF9kZXNjPSVwLCBmbGFncz0lbHgsICIKKwkgICAgICAgICAgICAg ICAgICAgICAiYXJyX2lkeD0lbGQgKG9iaiAtPiAlIU8sIGtleSAtPiAlIU8pIiwKKwkgICAgICAg ICAgICAgICAgICAgICAodm9pZCAqKSB0aHIsICh2b2lkICopIG9iaiwgKHZvaWQgKikga2V5LCAo dm9pZCAqKSBvdXRfZGVzYywKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgZmxhZ3MsIChs b25nKSBhcnJfaWR4LAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBvYmos IChkdWtfaGVhcGhkciAqKSBrZXkpKTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURV S19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOwor CURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQob3V0X2Rlc2MgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIsIERVS19fVkFMU1RBQ0tfU1BBQ0UpOwor CisJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX2dldG93bnByb3BkZXNjX2NvdW50KTsK KworCS8qIEVhY2ggY29kZSBwYXRoIHJldHVybmluZyAxICg9IGZvdW5kKSBtdXN0IGZpbGwgaW4g YWxsIHRoZSBvdXRwdXQKKwkgKiBkZXNjcmlwdG9yIGZpZWxkcy4gIFdlIGRvbid0IGRvIGl0IGJl Zm9yZWhhbmQgYmVjYXVzZSBpdCdkIGJlCisJICogdW5uZWNlc3Nhcnkgd29yayBpZiB0aGUgcHJv cGVydHkgaXNuJ3QgZm91bmQgYW5kIHdvdWxkIGhhcHBlbgorCSAqIG11bHRpcGxlIHRpbWVzIGZv ciBhbiBpbmhlcml0YW5jZSBjaGFpbi4KKwkgKi8KKwlEVUtfQVNTRVJUX1NFVF9HQVJCQUdFKG91 dF9kZXNjLCBzaXplb2YoKm91dF9kZXNjKSk7CisjaWYgMAorCW91dF9kZXNjLT5mbGFncyA9IDA7 CisJb3V0X2Rlc2MtPmdldCA9IE5VTEw7CisJb3V0X2Rlc2MtPnNldCA9IE5VTEw7CisJb3V0X2Rl c2MtPmVfaWR4ID0gLTE7CisJb3V0X2Rlc2MtPmhfaWR4ID0gLTE7CisJb3V0X2Rlc2MtPmFfaWR4 ID0gLTE7CisjZW5kaWYKKworCS8qCisJICogIFRyeSBlbnRyaWVzIHBhcnQgZmlyc3QgYmVjYXVz ZSBpdCdzIHRoZSBjb21tb24gY2FzZS4KKwkgKgorCSAqICBBcnJheSBwYXJ0IGxvb2t1cHMgYXJl IHVzdWFsbHkgaGFuZGxlZCBieSB0aGUgYXJyYXkgZmFzdCBwYXRoLCBhbmQKKwkgKiAgYXJlIG5v dCB1c3VhbGx5IGluaGVyaXRlZC4gIEFycmF5IGFuZCBlbnRyeSBwYXJ0cyBuZXZlciBjb250YWlu IHRoZQorCSAqICBzYW1lIGtleXMgc28gdGhlIGVudHJ5IHBhcnQgdnMuIGFycmF5IHBhcnQgb3Jk ZXIgZG9lc24ndCBtYXR0ZXIuCisJICovCisKKwlpZiAoZHVrX2hvYmplY3RfZmluZF9leGlzdGlu Z19lbnRyeSh0aHItPmhlYXAsIG9iaiwga2V5LCAmb3V0X2Rlc2MtPmVfaWR4LCAmb3V0X2Rlc2Mt PmhfaWR4KSkgeworCQlkdWtfaW50X3QgZV9pZHggPSBvdXRfZGVzYy0+ZV9pZHg7CisJCURVS19B U1NFUlQob3V0X2Rlc2MtPmVfaWR4ID49IDApOworCQlvdXRfZGVzYy0+YV9pZHggPSAtMTsKKwkJ b3V0X2Rlc2MtPmZsYWdzID0gRFVLX0hPQkpFQ1RfRV9HRVRfRkxBR1ModGhyLT5oZWFwLCBvYmos IGVfaWR4KTsKKwkJb3V0X2Rlc2MtPmdldCA9IE5VTEw7CisJCW91dF9kZXNjLT5zZXQgPSBOVUxM OworCQlpZiAoRFVLX1VOTElLRUxZKG91dF9kZXNjLT5mbGFncyAmIERVS19QUk9QREVTQ19GTEFH X0FDQ0VTU09SKSkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+IGZvdW5kIGFjY2Vzc29y IHByb3BlcnR5IGluIGVudHJ5IHBhcnQiKSk7CisJCQlvdXRfZGVzYy0+Z2V0ID0gRFVLX0hPQkpF Q1RfRV9HRVRfVkFMVUVfR0VUVEVSKHRoci0+aGVhcCwgb2JqLCBlX2lkeCk7CisJCQlvdXRfZGVz Yy0+c2V0ID0gRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfU0VUVEVSKHRoci0+aGVhcCwgb2JqLCBl X2lkeCk7CisJCQlpZiAoZmxhZ3MgJiBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUpIHsKKwkJ CQkvKiBhIGR1bW15IHVuZGVmaW5lZCB2YWx1ZSBpcyBwdXNoZWQgdG8gbWFrZSB2YWxzdGFjawor CQkJCSAqIGJlaGF2aW9yIHVuaWZvcm0gZm9yIGNhbGxlcgorCQkJCSAqLworCQkJCWR1a19wdXNo X3VuZGVmaW5lZCh0aHIpOworCQkJfQorCQl9IGVsc2UgeworCQkJRFVLX0RERChEVUtfREREUFJJ TlQoIi0+IGZvdW5kIHBsYWluIHByb3BlcnR5IGluIGVudHJ5IHBhcnQiKSk7CisJCQl0diA9IERV S19IT0JKRUNUX0VfR0VUX1ZBTFVFX1RWQUxfUFRSKHRoci0+aGVhcCwgb2JqLCBlX2lkeCk7CisJ CQlpZiAoZmxhZ3MgJiBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUpIHsKKwkJCQlkdWtfcHVz aF90dmFsKHRociwgdHYpOworCQkJfQorCQl9CisJCWdvdG8gcHJvcF9mb3VuZDsKKwl9CisKKwkv KgorCSAqICBUcnkgYXJyYXkgcGFydC4KKwkgKi8KKworCWlmIChEVUtfSE9CSkVDVF9IQVNfQVJS QVlfUEFSVChvYmopICYmIGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCkgeworCQlpZiAo YXJyX2lkeCA8IERVS19IT0JKRUNUX0dFVF9BU0laRShvYmopKSB7CisJCQl0diA9IERVS19IT0JK RUNUX0FfR0VUX1ZBTFVFX1BUUih0aHItPmhlYXAsIG9iaiwgYXJyX2lkeCk7CisJCQlpZiAoIURV S19UVkFMX0lTX1VOVVNFRCh0dikpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiLT4gZm91 bmQgaW4gYXJyYXkgcGFydCIpKTsKKwkJCQlpZiAoZmxhZ3MgJiBEVUtfR0VUREVTQ19GTEFHX1BV U0hfVkFMVUUpIHsKKwkJCQkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2KTsKKwkJCQl9CisJCQkJLyog aW1wbGljaXQgYXR0cmlidXRlcyAqLworCQkJCW91dF9kZXNjLT5mbGFncyA9IERVS19QUk9QREVT Q19GTEFHX1dSSVRBQkxFIHwKKwkJCQkgICAgICAgICAgICAgICAgICBEVUtfUFJPUERFU0NfRkxB R19DT05GSUdVUkFCTEUgfAorCQkJCSAgICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFH X0VOVU1FUkFCTEU7CisJCQkJb3V0X2Rlc2MtPmdldCA9IE5VTEw7CisJCQkJb3V0X2Rlc2MtPnNl dCA9IE5VTEw7CisJCQkJb3V0X2Rlc2MtPmVfaWR4ID0gLTE7CisJCQkJb3V0X2Rlc2MtPmhfaWR4 ID0gLTE7CisJCQkJb3V0X2Rlc2MtPmFfaWR4ID0gKGR1a19pbnRfdCkgYXJyX2lkeDsgIC8qIFhY WDogbGltaXQgMkcgZHVlIHRvIGJlaW5nIHNpZ25lZCAqLworCQkJCWdvdG8gcHJvcF9mb3VuZDsK KwkJCX0KKwkJfQorCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBub3QgZm91bmQgYXMg YSBjb25jcmV0ZSBwcm9wZXJ0eSIpKTsKKworCS8qCisJICogIE5vdCBmb3VuZCBhcyBhIGNvbmNy ZXRlIHByb3BlcnR5LCBjaGVjayBmb3IgdmlydHVhbCBwcm9wZXJ0aWVzLgorCSAqLworCisJaWYg KCFEVUtfSE9CSkVDVF9IQVNfVklSVFVBTF9QUk9QRVJUSUVTKG9iaikpIHsKKwkJLyogUXVpY2sg c2tpcC4gKi8KKwkJZ290byBwcm9wX25vdF9mb3VuZDsKKwl9CisKKwlpZiAoRFVLX0hPQkpFQ1Rf SEFTX0VYT1RJQ19BUlJBWShvYmopKSB7CisJCWR1a19oYXJyYXkgKmE7CisKKwkJRFVLX0RERChE VUtfREREUFJJTlQoImFycmF5IG9iamVjdCBleG90aWMgcHJvcGVydHkgZ2V0IGZvciBrZXk6ICUh TywgYXJyX2lkeDogJWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGR1a19oZWFwaGRyICop IGtleSwgKGxvbmcpIGFycl9pZHgpKTsKKworCQlhID0gKGR1a19oYXJyYXkgKikgb2JqOworCQlE VUtfQVNTRVJUX0hBUlJBWV9WQUxJRChhKTsKKworCQlpZiAoa2V5ID09IERVS19IVEhSRUFEX1NU UklOR19MRU5HVEgodGhyKSkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+IGZvdW5kLCBr ZXkgaXMgJ2xlbmd0aCcsIGxlbmd0aCBleG90aWMgYmVoYXZpb3IiKSk7CisKKwkJCWlmIChmbGFn cyAmIERVS19HRVRERVNDX0ZMQUdfUFVTSF9WQUxVRSkgeworCQkJCWR1a19wdXNoX3VpbnQodGhy LCAoZHVrX3VpbnRfdCkgYS0+bGVuZ3RoKTsKKwkJCX0KKwkJCW91dF9kZXNjLT5mbGFncyA9IERV S19QUk9QREVTQ19GTEFHX1ZJUlRVQUw7CisJCQlpZiAoRFVLX0hBUlJBWV9MRU5HVEhfV1JJVEFC TEUoYSkpIHsKKwkJCQlvdXRfZGVzYy0+ZmxhZ3MgfD0gRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFC TEU7CisJCQl9CisJCQlvdXRfZGVzYy0+Z2V0ID0gTlVMTDsKKwkJCW91dF9kZXNjLT5zZXQgPSBO VUxMOworCQkJb3V0X2Rlc2MtPmVfaWR4ID0gLTE7CisJCQlvdXRfZGVzYy0+aF9pZHggPSAtMTsK KwkJCW91dF9kZXNjLT5hX2lkeCA9IC0xOworCisJCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9I QVNfRVhPVElDX0FSR1VNRU5UUyhvYmopKTsKKwkJCWdvdG8gcHJvcF9mb3VuZF9ub2V4b3RpYzsg IC8qIGNhbm5vdCBiZSBhcmd1bWVudHMgZXhvdGljICovCisJCX0KKwl9IGVsc2UgaWYgKERVS19I T0JKRUNUX0hBU19FWE9USUNfU1RSSU5HT0JKKG9iaikpIHsKKwkJRFVLX0RERChEVUtfREREUFJJ TlQoInN0cmluZyBvYmplY3QgZXhvdGljIHByb3BlcnR5IGdldCBmb3Iga2V5OiAlIU8sIGFycl9p ZHg6ICVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBrZXksIChs b25nKSBhcnJfaWR4KSk7CisKKwkJLyogWFhYOiBjaGFybGVuOyBhdm9pZCBtdWx0aXBsZSBsb29r dXBzPyAqLworCisJCWlmIChhcnJfaWR4ICE9IERVS19fTk9fQVJSQVlfSU5ERVgpIHsKKwkJCWR1 a19oc3RyaW5nICpoX3ZhbDsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImFycmF5IGluZGV4 IGV4aXN0cyIpKTsKKworCQkJaF92YWwgPSBkdWtfaG9iamVjdF9nZXRfaW50ZXJuYWxfdmFsdWVf c3RyaW5nKHRoci0+aGVhcCwgb2JqKTsKKwkJCURVS19BU1NFUlQoaF92YWwpOworCQkJaWYgKGFy cl9pZHggPCBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoX3ZhbCkpIHsKKwkJCQlEVUtfREREKERV S19ERERQUklOVCgiLT4gZm91bmQsIGFycmF5IGluZGV4IGluc2lkZSBzdHJpbmciKSk7CisJCQkJ aWYgKGZsYWdzICYgRFVLX0dFVERFU0NfRkxBR19QVVNIX1ZBTFVFKSB7CisJCQkJCWR1a19wdXNo X2hzdHJpbmcodGhyLCBoX3ZhbCk7CisJCQkJCWR1a19zdWJzdHJpbmcodGhyLCAtMSwgYXJyX2lk eCwgYXJyX2lkeCArIDEpOyAgLyogW3N0cl0gLT4gW3N1YnN0cl0gKi8KKwkJCQl9CisJCQkJb3V0 X2Rlc2MtPmZsYWdzID0gRFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSB8ICAvKiBFNSBTZWN0 aW9uIDE1LjUuNS4yICovCisJCQkJICAgICAgICAgICAgICAgICAgRFVLX1BST1BERVNDX0ZMQUdf VklSVFVBTDsKKwkJCQlvdXRfZGVzYy0+Z2V0ID0gTlVMTDsKKwkJCQlvdXRfZGVzYy0+c2V0ID0g TlVMTDsKKwkJCQlvdXRfZGVzYy0+ZV9pZHggPSAtMTsKKwkJCQlvdXRfZGVzYy0+aF9pZHggPSAt MTsKKwkJCQlvdXRfZGVzYy0+YV9pZHggPSAtMTsKKworCQkJCURVS19BU1NFUlQoIURVS19IT0JK RUNUX0hBU19FWE9USUNfQVJHVU1FTlRTKG9iaikpOworCQkJCWdvdG8gcHJvcF9mb3VuZF9ub2V4 b3RpYzsgIC8qIGNhbm5vdCBiZSBhcmd1bWVudHMgZXhvdGljICovCisJCQl9IGVsc2UgeworCQkJ CS8qIGluZGV4IGlzIGFib3ZlIGludGVybmFsIHN0cmluZyBsZW5ndGggLT4gcHJvcGVydHkgaXMg ZnVsbHkgbm9ybWFsICovCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImFycmF5IGluZGV4IG91 dHNpZGUgc3RyaW5nIC0+IG5vcm1hbCBwcm9wZXJ0eSIpKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChr ZXkgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0xFTkdUSCh0aHIpKSB7CisJCQlkdWtfaHN0cmluZyAq aF92YWw7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBmb3VuZCwga2V5IGlzICdsZW5n dGgnLCBsZW5ndGggZXhvdGljIGJlaGF2aW9yIikpOworCisJCQloX3ZhbCA9IGR1a19ob2JqZWN0 X2dldF9pbnRlcm5hbF92YWx1ZV9zdHJpbmcodGhyLT5oZWFwLCBvYmopOworCQkJRFVLX0FTU0VS VChoX3ZhbCAhPSBOVUxMKTsKKwkJCWlmIChmbGFncyAmIERVS19HRVRERVNDX0ZMQUdfUFVTSF9W QUxVRSkgeworCQkJCWR1a19wdXNoX3VpbnQodGhyLCAoZHVrX3VpbnRfdCkgRFVLX0hTVFJJTkdf R0VUX0NIQVJMRU4oaF92YWwpKTsKKwkJCX0KKwkJCW91dF9kZXNjLT5mbGFncyA9IERVS19QUk9Q REVTQ19GTEFHX1ZJUlRVQUw7ICAvKiBFNSBTZWN0aW9uIDE1LjUuNS4xICovCisJCQlvdXRfZGVz Yy0+Z2V0ID0gTlVMTDsKKwkJCW91dF9kZXNjLT5zZXQgPSBOVUxMOworCQkJb3V0X2Rlc2MtPmVf aWR4ID0gLTE7CisJCQlvdXRfZGVzYy0+aF9pZHggPSAtMTsKKwkJCW91dF9kZXNjLT5hX2lkeCA9 IC0xOworCisJCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FSR1VNRU5UUyhv YmopKTsKKwkJCWdvdG8gcHJvcF9mb3VuZF9ub2V4b3RpYzsgIC8qIGNhbm5vdCBiZSBhcmd1bWVu dHMgZXhvdGljICovCisJCX0KKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0JVRkZFUk9CSkVDVF9T VVBQT1JUKQorCWVsc2UgaWYgKERVS19IT0JKRUNUX0lTX0JVRk9CSihvYmopKSB7CisJCWR1a19o YnVmb2JqICpoX2J1Zm9iajsKKwkJZHVrX3VpbnRfdCBieXRlX29mZjsKKwkJZHVrX3NtYWxsX3Vp bnRfdCBlbGVtX3NpemU7CisKKwkJaF9idWZvYmogPSAoZHVrX2hidWZvYmogKikgb2JqOworCQlE VUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQoaF9idWZvYmopOworCQlEVUtfREREKERVS19ERERQUklO VCgiYnVmb2JqIHByb3BlcnR5IGdldCBmb3Iga2V5OiAlIU8sIGFycl9pZHg6ICVsZCIsCisJCSAg ICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBrZXksIChsb25nKSBhcnJfaWR4KSk7 CisKKwkJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCAmJiBEVUtfSEJVRk9CSl9I QVNfVklSVFVBTF9JTkRJQ0VTKGhfYnVmb2JqKSkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQo ImFycmF5IGluZGV4IGV4aXN0cyIpKTsKKworCQkJLyogQ2FyZWZ1bCB3aXRoIHdyYXBwaW5nOiBh cnJfaWR4IHVwc2hpZnQgbWF5IGVhc2lseSB3cmFwLCB3aGVyZWFzCisJCQkgKiBsZW5ndGggZG93 bnNoaWZ0IHdvbid0LgorCQkJICovCisJCQlpZiAoYXJyX2lkeCA8IChoX2J1Zm9iai0+bGVuZ3Ro ID4+IGhfYnVmb2JqLT5zaGlmdCkpIHsKKwkJCQlieXRlX29mZiA9IGFycl9pZHggPDwgaF9idWZv YmotPnNoaWZ0OyAgLyogbm8gd3JhcCBhc3N1bWluZyBoX2J1Zm9iai0+bGVuZ3RoIGlzIHZhbGlk ICovCisJCQkJZWxlbV9zaXplID0gKGR1a19zbWFsbF91aW50X3QpICgxVSA8PCBoX2J1Zm9iai0+ c2hpZnQpOworCQkJCWlmIChmbGFncyAmIERVS19HRVRERVNDX0ZMQUdfUFVTSF9WQUxVRSkgewor CQkJCQlkdWtfdWludDhfdCAqZGF0YTsKKworCQkJCQlpZiAoaF9idWZvYmotPmJ1ZiAhPSBOVUxM ICYmIERVS19IQlVGT0JKX1ZBTElEX0JZVEVPRkZTRVRfRVhDTChoX2J1Zm9iaiwgYnl0ZV9vZmYg KyBlbGVtX3NpemUpKSB7CisJCQkJCQlkYXRhID0gKGR1a191aW50OF90ICopIERVS19IQlVGRkVS X0dFVF9EQVRBX1BUUih0aHItPmhlYXAsIGhfYnVmb2JqLT5idWYpICsgaF9idWZvYmotPm9mZnNl dCArIGJ5dGVfb2ZmOworCQkJCQkJZHVrX2hidWZvYmpfcHVzaF92YWxpZGF0ZWRfcmVhZCh0aHIs IGhfYnVmb2JqLCBkYXRhLCBlbGVtX3NpemUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJRFVLX0Qo RFVLX0RQUklOVCgiYnVmb2JqIGFjY2VzcyBvdXQgb2YgdW5kZXJseWluZyBidWZmZXIsIGlnbm9y aW5nIChyZWFkIHplcm8pIikpOworCQkJCQkJZHVrX3B1c2hfdWludCh0aHIsIDApOworCQkJCQl9 CisJCQkJfQorCQkJCW91dF9kZXNjLT5mbGFncyA9IERVS19QUk9QREVTQ19GTEFHX1dSSVRBQkxF IHwKKwkJCQkgICAgICAgICAgICAgICAgICBEVUtfUFJPUERFU0NfRkxBR19WSVJUVUFMOworCQkJ CWlmIChEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKG9iaikgIT0gRFVLX0hPQkpFQ1RfQ0xB U1NfQVJSQVlCVUZGRVIpIHsKKwkJCQkJLyogQXJyYXlCdWZmZXIgaW5kaWNlcyBhcmUgbm9uLXN0 YW5kYXJkIGFuZCBhcmUKKwkJCQkJICogbm9uLWVudW1lcmFibGUgdG8gYXZvaWQgdGhlaXIgc2Vy aWFsaXphdGlvbi4KKwkJCQkJICovCisJCQkJCW91dF9kZXNjLT5mbGFncyB8PSBEVUtfUFJPUERF U0NfRkxBR19FTlVNRVJBQkxFOworCQkJCX0KKwkJCQlvdXRfZGVzYy0+Z2V0ID0gTlVMTDsKKwkJ CQlvdXRfZGVzYy0+c2V0ID0gTlVMTDsKKwkJCQlvdXRfZGVzYy0+ZV9pZHggPSAtMTsKKwkJCQlv dXRfZGVzYy0+aF9pZHggPSAtMTsKKwkJCQlvdXRfZGVzYy0+YV9pZHggPSAtMTsKKworCQkJCURV S19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19FWE9USUNfQVJHVU1FTlRTKG9iaikpOworCQkJCWdv dG8gcHJvcF9mb3VuZF9ub2V4b3RpYzsgIC8qIGNhbm5vdCBiZSBlLmcuIGFyZ3VtZW50cyBleG90 aWMsIHNpbmNlIGV4b3RpYyAndHJhaXRzJyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlICovCisJCQl9 IGVsc2UgeworCQkJCS8qIGluZGV4IGlzIGFib3ZlIGludGVybmFsIGJ1ZmZlciBsZW5ndGggLT4g cHJvcGVydHkgaXMgZnVsbHkgbm9ybWFsICovCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImFy cmF5IGluZGV4IG91dHNpZGUgYnVmZmVyIC0+IG5vcm1hbCBwcm9wZXJ0eSIpKTsKKwkJCX0KKwkJ fSBlbHNlIGlmIChrZXkgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0xFTkdUSCh0aHIpICYmIERVS19I QlVGT0JKX0hBU19WSVJUVUFMX0lORElDRVMoaF9idWZvYmopKSB7CisJCQlEVUtfREREKERVS19E RERQUklOVCgiLT4gZm91bmQsIGtleSBpcyAnbGVuZ3RoJywgbGVuZ3RoIGV4b3RpYyBiZWhhdmlv ciIpKTsKKworCQkJaWYgKGZsYWdzICYgRFVLX0dFVERFU0NfRkxBR19QVVNIX1ZBTFVFKSB7CisJ CQkJLyogTGVuZ3RoIGluIGVsZW1lbnRzOiB0YWtlIGludG8gYWNjb3VudCBzaGlmdCwgYnV0CisJ CQkJICogaW50ZW50aW9uYWxseSBkb24ndCBjaGVjayB0aGUgdW5kZXJseWluZyBidWZmZXIgaGVy ZS4KKwkJCQkgKi8KKwkJCQlkdWtfcHVzaF91aW50KHRociwgaF9idWZvYmotPmxlbmd0aCA+PiBo X2J1Zm9iai0+c2hpZnQpOworCQkJfQorCQkJb3V0X2Rlc2MtPmZsYWdzID0gRFVLX1BST1BERVND X0ZMQUdfVklSVFVBTDsKKwkJCW91dF9kZXNjLT5nZXQgPSBOVUxMOworCQkJb3V0X2Rlc2MtPnNl dCA9IE5VTEw7CisJCQlvdXRfZGVzYy0+ZV9pZHggPSAtMTsKKwkJCW91dF9kZXNjLT5oX2lkeCA9 IC0xOworCQkJb3V0X2Rlc2MtPmFfaWR4ID0gLTE7CisKKwkJCURVS19BU1NFUlQoIURVS19IT0JK RUNUX0hBU19FWE9USUNfQVJHVU1FTlRTKG9iaikpOworCQkJZ290byBwcm9wX2ZvdW5kX25vZXhv dGljOyAgLyogY2Fubm90IGJlIGFyZ3VtZW50cyBleG90aWMgKi8KKwkJfQorCX0KKyNlbmRpZiAg LyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCisJLyogQXJyYXkgcHJvcGVydGll cyBoYXZlIGV4b3RpYyBiZWhhdmlvciBidXQgdGhleSBhcmUgY29uY3JldGUsCisJICogc28gbm8g c3BlY2lhbCBoYW5kbGluZyBoZXJlLgorCSAqCisJICogQXJndW1lbnRzIGV4b3RpYyBiZWhhdmlv ciAoRTUgU2VjdGlvbiAxMC42LCBbW0dldE93blByb3BlcnR5XV0KKwkgKiBpcyBvbmx5IHJlbGV2 YW50IGFzIGEgcG9zdC1jaGVjayBpbXBsZW1lbnRlZCBiZWxvdzsgaGVuY2Ugbm8KKwkgKiBjaGVj ayBoZXJlLgorCSAqLworCisJLyoKKwkgKiAgTm90IGZvdW5kIGFzIGNvbmNyZXRlIG9yIHZpcnR1 YWwuCisJICovCisKKyBwcm9wX25vdF9mb3VuZDoKKwlEVUtfREREKERVS19ERERQUklOVCgiLT4g bm90IGZvdW5kICh2aXJ0dWFsLCBlbnRyeSBwYXJ0LCBvciBhcnJheSBwYXJ0KSIpKTsKKwlEVUtf U1RBVFNfSU5DKHRoci0+aGVhcCwgc3RhdHNfZ2V0b3ducHJvcGRlc2NfbWlzcyk7CisJcmV0dXJu IDA7CisKKwkvKgorCSAqICBGb3VuZC4KKwkgKgorCSAqICBBcmd1bWVudHMgb2JqZWN0IGhhcyBl eG90aWMgcG9zdC1wcm9jZXNzaW5nLCBzZWUgRTUgU2VjdGlvbiAxMC42LAorCSAqICBkZXNjcmlw dGlvbiBvZiBbW0dldE93blByb3BlcnR5XV0gdmFyaWFudCBmb3IgYXJndW1lbnRzLgorCSAqLwor CisgcHJvcF9mb3VuZDoKKwlEVUtfREREKERVS19ERERQUklOVCgiLT4gcHJvcGVydHkgZm91bmQs IGNoZWNraW5nIGZvciBhcmd1bWVudHMgZXhvdGljIHBvc3QtYmVoYXZpb3IiKSk7CisKKwkvKiBO b3RlczoKKwkgKiAgLSBPbmx5IG51bWJlcmVkIGluZGljZXMgYXJlIHJlbGV2YW50LCBzbyBhcnJf aWR4IGZhc3QgcmVqZWN0IGlzIGdvb2QKKwkgKiAgICAodGhpcyBpcyB2YWxpZCB1bmxlc3MgdGhl cmUgYXJlIG1vcmUgdGhhbiA0KiozMi0xIGFyZ3VtZW50cykuCisJICogIC0gU2luY2UgdmFyaWFi bGUgbG9va3VwIGhhcyBubyBzaWRlIGVmZmVjdHMsIHRoaXMgY2FuIGJlIHNraXBwZWQgaWYKKwkg KiAgICBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUgaXMgbm90IHNldC4KKwkgKi8KKworCWlm IChEVUtfVU5MSUtFTFkoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19BUkdVTUVOVFMob2JqKSAmJgor CSAgICAgICAgICAgICAgICAgYXJyX2lkeCAhPSBEVUtfX05PX0FSUkFZX0lOREVYICYmCisJICAg ICAgICAgICAgICAgICAoZmxhZ3MgJiBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUpKSkgewor CQlkdWtfcHJvcGRlc2MgdGVtcF9kZXNjOworCisJCS8qIE1hZ2ljYWxseSBib3VuZCB2YXJpYWJs ZSBjYW5ub3QgYmUgYW4gYWNjZXNzb3IuICBIb3dldmVyLAorCQkgKiB0aGVyZSBtYXkgYmUgYW4g YWNjZXNzb3IgcHJvcGVydHkgKG9yIGEgcGxhaW4gcHJvcGVydHkpIGluCisJCSAqIHBsYWNlIHdp dGggbWFnaWMgYmVoYXZpb3IgcmVtb3ZlZC4gIFRoaXMgaGFwcGVucyBlLmcuIHdoZW4KKwkJICog YSBtYWdpYyBwcm9wZXJ0eSBpcyByZWRlZmluZWQgd2l0aCBkZWZpbmVQcm9wZXJ0eSgpLgorCQkg KiBDYW5ub3QgYXNzZXJ0IGZvciAibm90IGFjY2Vzc29yIiBoZXJlLgorCQkgKi8KKworCQkvKiBy ZXBsYWNlcyB0b3Agb2Ygc3RhY2sgd2l0aCBuZXcgdmFsdWUgaWYgbmVjZXNzYXJ5ICovCisJCURV S19BU1NFUlQoKGZsYWdzICYgRFVLX0dFVERFU0NfRkxBR19QVVNIX1ZBTFVFKSAhPSAwKTsKKwor CQkvKiBUaGlzIGNhbiBwZXJmb3JtIGEgdmFyaWFibGUgbG9va3VwIGJ1dCBvbmx5IGludG8gYSBk ZWNsYXJhdGl2ZQorCQkgKiBlbnZpcm9ubWVudCB3aGljaCBoYXMgbm8gc2lkZSBlZmZlY3RzLgor CQkgKi8KKwkJaWYgKGR1a19fY2hlY2tfYXJndW1lbnRzX21hcF9mb3JfZ2V0KHRociwgb2JqLCBr ZXksICZ0ZW1wX2Rlc2MpKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiLT4gYXJndW1lbnRz IGV4b3RpYyBiZWhhdmlvciBvdmVycmlkZXMgcmVzdWx0OiAlIVQgLT4gJSFUIiwKKwkJCSAgICAg ICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMiksCisJCQkg ICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7 CisJCQkvKiBbLi4uIG9sZF9yZXN1bHQgcmVzdWx0XSAtPiBbLi4uIHJlc3VsdF0gKi8KKwkJCWR1 a19yZW1vdmVfbTIodGhyKTsKKwkJfQorCX0KKworIHByb3BfZm91bmRfbm9leG90aWM6CisJRFVL X1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX2dldG93bnByb3BkZXNjX2hpdCk7CisJcmV0dXJu IDE7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X2dldF9vd25fcHJv cGRlc2MoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtl eSwgZHVrX3Byb3BkZXNjICpvdXRfZGVzYywgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgeworCURV S19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19B U1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQob3V0X2Rlc2MgIT0gTlVMTCk7CisJRFVL X0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIsIERVS19fVkFMU1RBQ0tfU1BBQ0UpOworCisJcmV0 dXJuIGR1a19fZ2V0X293bl9wcm9wZGVzY19yYXcodGhyLCBvYmosIGtleSwgRFVLX0hTVFJJTkdf R0VUX0FSUklEWF9TTE9XKGtleSksIG91dF9kZXNjLCBmbGFncyk7Cit9CisKKy8qCisgKiAgRUNN QVNjcmlwdCBjb21wbGlhbnQgW1tHZXRQcm9wZXJ0eV1dKFApLCBmb3IgaW50ZXJuYWwgdXNlIG9u bHkuCisgKgorICogIElmIHByb3BlcnR5IGlzIGZvdW5kOgorICogICAgLSBGaWxscyBkZXNjcmlw dG9yIGZpZWxkcyB0byAnb3V0X2Rlc2MnCisgKiAgICAtIElmIERVS19HRVRERVNDX0ZMQUdfUFVT SF9WQUxVRSBpcyBzZXQsIHB1c2hlcyBhIHZhbHVlIHJlbGF0ZWQgdG8gdGhlCisgKiAgICAgIHBy b3BlcnR5IG9udG8gdGhlIHN0YWNrICgndW5kZWZpbmVkJyBmb3IgYWNjZXNzb3IgcHJvcGVydGll cykuCisgKiAgICAtIFJldHVybnMgbm9uLXplcm8KKyAqCisgKiAgSWYgcHJvcGVydHkgaXMgbm90 IGZvdW5kOgorICogICAgLSAnb3V0X2Rlc2MnIGlzIGxlZnQgaW4gdW50b3VjaGVkIHN0YXRlIChw b3NzaWJseSBnYXJiYWdlKQorICogICAgLSBOb3RoaW5nIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFj ayAobm90IGV2ZW4gd2l0aCBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUKKyAqICAgICAgc2V0 KQorICogICAgLSBSZXR1cm5zIHplcm8KKyAqCisgKiAgTWF5IGNhdXNlIGFyYml0cmFyeSBzaWRl IGVmZmVjdHMgYW5kIGludmFsaWRhdGUgKG1vc3QpIGR1a190dmFsCisgKiAgcG9pbnRlcnMuCisg Ki8KKworRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19nZXRfcHJvcGRlc2MoZHVrX2h0aHJlYWQg KnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtleSwgZHVrX3Byb3BkZXNjICpv dXRfZGVzYywgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgeworCWR1a19ob2JqZWN0ICpjdXJyOwor CWR1a191aW50MzJfdCBhcnJfaWR4OworCWR1a191aW50X3Qgc2FuaXR5OworCisJRFVLX0FTU0VS VCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FT U0VSVChvYmogIT0gTlVMTCk7CisJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisJRFVLX0FTU0VS VChvdXRfZGVzYyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUX1ZBTFNUQUNLX1NQQUNFKHRociwgRFVL X19WQUxTVEFDS19TUEFDRSk7CisKKwlEVUtfU1RBVFNfSU5DKHRoci0+aGVhcCwgc3RhdHNfZ2V0 cHJvcGRlc2NfY291bnQpOworCisJYXJyX2lkeCA9IERVS19IU1RSSU5HX0dFVF9BUlJJRFhfRkFT VChrZXkpOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImR1a19fZ2V0X3Byb3BkZXNjOiB0aHI9 JXAsIG9iaj0lcCwga2V5PSVwLCBvdXRfZGVzYz0lcCwgZmxhZ3M9JWx4LCAiCisJICAgICAgICAg ICAgICAgICAgICAgImFycl9pZHg9JWxkIChvYmogLT4gJSFPLCBrZXkgLT4gJSFPKSIsCisJICAg ICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLCAodm9pZCAqKSBvYmosICh2b2lkICopIGtl eSwgKHZvaWQgKikgb3V0X2Rlc2MsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGZsYWdz LCAobG9uZykgYXJyX2lkeCwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikg b2JqLCAoZHVrX2hlYXBoZHIgKikga2V5KSk7CisKKwljdXJyID0gb2JqOworCURVS19BU1NFUlQo Y3VyciAhPSBOVUxMKTsKKwlzYW5pdHkgPSBEVUtfSE9CSkVDVF9QUk9UT1RZUEVfQ0hBSU5fU0FO SVRZOworCWRvIHsKKwkJaWYgKGR1a19fZ2V0X293bl9wcm9wZGVzY19yYXcodGhyLCBjdXJyLCBr ZXksIGFycl9pZHgsIG91dF9kZXNjLCBmbGFncykpIHsKKwkJCS8qIHN0YWNrIGNvbnRhaW5zIHZh bHVlIChpZiByZXF1ZXN0ZWQpLCAnb3V0X2Rlc2MnIGlzIHNldCAqLworCQkJRFVLX1NUQVRTX0lO Qyh0aHItPmhlYXAsIHN0YXRzX2dldHByb3BkZXNjX2hpdCk7CisJCQlyZXR1cm4gMTsKKwkJfQor CisJCS8qIG5vdCBmb3VuZCBpbiAnY3VycicsIG5leHQgaW4gcHJvdG90eXBlIGNoYWluOyBpbXBv c2UgbWF4IGRlcHRoICovCisJCWlmIChEVUtfVU5MSUtFTFkoc2FuaXR5LS0gPT0gMCkpIHsKKwkJ CWlmIChmbGFncyAmIERVS19HRVRERVNDX0ZMQUdfSUdOT1JFX1BST1RPTE9PUCkgeworCQkJCS8q IHRyZWF0IGxpa2UgcHJvcGVydHkgbm90IGZvdW5kICovCisJCQkJYnJlYWs7CisJCQl9IGVsc2Ug eworCQkJCURVS19FUlJPUl9SQU5HRSh0aHIsIERVS19TVFJfUFJPVE9UWVBFX0NIQUlOX0xJTUlU KTsKKwkJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJCX0KKwkJfQorCQljdXJyID0g RFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGN1cnIpOworCX0gd2hpbGUgKGN1 cnIgIT0gTlVMTCk7CisKKwkvKiBvdXRfZGVzYyBpcyBsZWZ0IHVudG91Y2hlZCAocG9zc2libHkg Z2FyYmFnZSksIGNhbGxlciBtdXN0IHVzZSByZXR1cm4KKwkgKiB2YWx1ZSB0byBkZXRlcm1pbmUg d2hldGhlciBvdXRfZGVzYyBjYW4gYmUgbG9va2VkIHVwCisJICovCisKKwlEVUtfU1RBVFNfSU5D KHRoci0+aGVhcCwgc3RhdHNfZ2V0cHJvcGRlc2NfbWlzcyk7CisJcmV0dXJuIDA7Cit9CisKKy8q CisgKiAgU2hhbGxvdyBmYXN0IHBhdGggY2hlY2tzIGZvciBhY2Nlc3NpbmcgYXJyYXkgZWxlbWVu dHMgd2l0aCBudW1lcmljCisgKiAgaW5kaWNlcy4gIFRoZSBnb2FsIGlzIHRvIHRyeSB0byBhdm9p ZCBjb2VyY2luZyBhbiBhcnJheSBpbmRleCB0byBhbgorICogIChpbnRlcm5lZCkgc3RyaW5nIGZv ciB0aGUgbW9zdCBjb21tb24gbG9va3VwcywgaW4gcGFydGljdWxhciwgZm9yCisgKiAgc3RhbmRh cmQgQXJyYXkgb2JqZWN0cy4KKyAqCisgKiAgSW50ZXJuaW5nIGlzIGF2b2lkZWQgYnV0IG9ubHkg Zm9yIGEgdmVyeSBuYXJyb3cgc2V0IG9mIGNhc2VzOgorICogICAgLSBPYmplY3QgaGFzIGFycmF5 IHBhcnQsIGluZGV4IGlzIHdpdGhpbiBhcnJheSBhbGxvY2F0aW9uLCBhbmQKKyAqICAgICAgdmFs dWUgaXMgbm90IHVudXNlZCAoPSBrZXkgZXhpc3RzKQorICogICAgLSBPYmplY3QgaGFzIG5vIGlu dGVyZmVyaW5nIGV4b3RpYyBiZWhhdmlvciAoZS5nLiBhcmd1bWVudHMgb3IKKyAqICAgICAgc3Ry aW5nIG9iamVjdCBleG90aWMgYmVoYXZpb3JzIGludGVyZmVyZSwgYXJyYXkgZXhvdGljCisgKiAg ICAgIGJlaGF2aW9yIGRvZXMgbm90KS4KKyAqCisgKiAgQ3VycmVudCBzaG9ydGNvbWluZzogaWYg a2V5IGRvZXMgbm90IGV4aXN0IChldmVuIGlmIGl0IGlzIHdpdGhpbgorICogIHRoZSBhcnJheSBh bGxvY2F0aW9uIHJhbmdlKSBhIHNsb3cgcGF0aCBsb29rdXAgd2l0aCBpbnRlcm5pbmcgaXMKKyAq ICBhbHdheXMgcmVxdWlyZWQuICBUaGlzIGNhbiBwcm9iYWJseSBiZSBmaXhlZCBzbyB0aGF0IHRo ZXJlIGlzIGEKKyAqICBxdWljayBmYXN0IHBhdGggZm9yIG5vbi1leGlzdGVudCBlbGVtZW50cyBh cyB3ZWxsLCBhdCBsZWFzdCBmb3IKKyAqICBzdGFuZGFyZCBBcnJheSBvYmplY3RzLgorICovCisK KyNpZiBkZWZpbmVkKERVS19VU0VfQVJSQVlfUFJPUF9GQVNUUEFUSCkKK0RVS19MT0NBTCBkdWtf dHZhbCAqZHVrX19nZXRwcm9wX3NoYWxsb3dfZmFzdHBhdGhfYXJyYXlfdHZhbChkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfdHZhbCAqdHZfa2V5KSB7CisJZHVrX3R2YWwg KnR2OworCWR1a191aW50MzJfdCBpZHg7CisKKwlEVUtfVU5SRUYodGhyKTsKKworCWlmICghKERV S19IT0JKRUNUX0hBU19BUlJBWV9QQVJUKG9iaikgJiYKKwkgICAgICFEVUtfSE9CSkVDVF9IQVNf RVhPVElDX0FSR1VNRU5UUyhvYmopICYmCisJICAgICAhRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19T VFJJTkdPQkoob2JqKSAmJgorCSAgICAgIURVS19IT0JKRUNUX0lTX0JVRk9CSihvYmopICYmCisJ ICAgICAhRFVLX0hPQkpFQ1RfSVNfUFJPWFkob2JqKSkpIHsKKwkJLyogTXVzdCBoYXZlIGFycmF5 IHBhcnQgYW5kIG5vIGNvbmZsaWN0aW5nIGV4b3RpYyBiZWhhdmlvcnMuCisJCSAqIERvZXNuJ3Qg bmVlZCB0byBoYXZlIGFycmF5IHNwZWNpYWwgYmVoYXZpb3IsIGUuZy4gQXJndW1lbnRzCisJCSAq IG9iamVjdCBoYXMgYXJyYXkgcGFydC4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8q IEFycmF5cyBuZXZlciBoYXZlIG90aGVyIGV4b3RpYyBiZWhhdmlvcnMuICovCisKKwlEVUtfRERE KERVS19ERERQUklOVCgiZmFzdCBwYXRoIGF0dGVtcHQgKG5vIGV4b3RpYyBzdHJpbmcvYXJndW1l bnRzL2J1ZmZlciAiCisJICAgICAgICAgICAgICAgICAgICAgImJlaGF2aW9yLCBvYmplY3QgaGFz IGFycmF5IHBhcnQpIikpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJaWYgKERV S19UVkFMX0lTX0ZBU1RJTlQodHZfa2V5KSkgeworCQlpZHggPSBkdWtfX3R2YWxfZmFzdGludF90 b19hcnJfaWR4KHR2X2tleSk7CisJfSBlbHNlCisjZW5kaWYKKwlpZiAoRFVLX1RWQUxfSVNfRE9V QkxFKHR2X2tleSkpIHsKKwkJaWR4ID0gZHVrX190dmFsX251bWJlcl90b19hcnJfaWR4KHR2X2tl eSk7CisJfSBlbHNlIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImtleSBpcyBub3QgYSBudW1i ZXIiKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIElmIGluZGV4IGlzIG5vdCB2YWxpZCwg aWR4IHdpbGwgYmUgRFVLX19OT19BUlJBWV9JTkRFWCB3aGljaAorCSAqIGlzIDB4ZmZmZmZmZmZV TC4gIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoYXQgZXhwbGljaXRseQorCSAqIGJlY2F1 c2UgMHhmZmZmZmZmZlVMIHdpbGwgbmV2ZXIgYmUgaW5zaWRlIG9iamVjdCAnYV9zaXplJy4KKwkg Ki8KKworCWlmIChpZHggPj0gRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaikpIHsKKwkJRFVLX0RE RChEVUtfREREUFJJTlQoImtleSBpcyBub3QgYW4gYXJyYXkgaW5kZXggb3Igb3V0c2lkZSBhcnJh eSBwYXJ0IikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJRFVLX0FTU0VSVChpZHggIT0gMHhmZmZm ZmZmZlVMKTsKKwlEVUtfQVNTRVJUKGlkeCAhPSBEVUtfX05PX0FSUkFZX0lOREVYKTsKKworCS8q IFhYWDogZm9yIGFycmF5IGluc3RhbmNlcyB3ZSBjb3VsZCB0YWtlIGEgc2hvcnRjdXQgaGVyZSBh bmQgYXNzdW1lCisJICogQXJyYXkucHJvdG90eXBlIGRvZXNuJ3QgY29udGFpbiBhbiBhcnJheSBp bmRleCBwcm9wZXJ0eS4KKwkgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJrZXkgaXMgYSB2 YWxpZCBhcnJheSBpbmRleCBhbmQgaW5zaWRlIGFycmF5IHBhcnQiKSk7CisJdHYgPSBEVUtfSE9C SkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCBvYmosIGlkeCk7CisJaWYgKCFEVUtfVFZB TF9JU19VTlVTRUQodHYpKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBmYXN0IHBhdGgg c3VjY2Vzc2Z1bCIpKTsKKwkJcmV0dXJuIHR2OworCX0KKworCURVS19EREQoRFVLX0RERFBSSU5U KCJmYXN0IHBhdGggYXR0ZW1wdCBmYWlsZWQsIGZhbGwgYmFjayB0byBzbG93IHBhdGgiKSk7CisJ cmV0dXJuIE5VTEw7Cit9CisKK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fcHV0cHJvcF9zaGFs bG93X2Zhc3RwYXRoX2FycmF5X3R2YWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9i aiwgZHVrX3R2YWwgKnR2X2tleSwgZHVrX3R2YWwgKnR2X3ZhbCkgeworCWR1a190dmFsICp0djsK KwlkdWtfaGFycmF5ICphOworCWR1a191aW50MzJfdCBpZHg7CisJZHVrX3VpbnQzMl90IG9sZF9s ZW4sIG5ld19sZW47CisKKwlpZiAoIShEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FSUkFZKG9iaikg JiYKKwkgICAgICBEVUtfSE9CSkVDVF9IQVNfQVJSQVlfUEFSVChvYmopICYmCisJICAgICAgRFVL X0hPQkpFQ1RfSEFTX0VYVEVOU0lCTEUob2JqKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCURVS19B U1NFUlQoIURVS19IRUFQSERSX0hBU19SRUFET05MWSgoZHVrX2hlYXBoZHIgKikgb2JqKSk7ICAv KiBjYWxsZXIgZW5zdXJlcyAqLworCisJYSA9IChkdWtfaGFycmF5ICopIG9iajsKKwlEVUtfQVNT RVJUX0hBUlJBWV9WQUxJRChhKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCWlm IChEVUtfVFZBTF9JU19GQVNUSU5UKHR2X2tleSkpIHsKKwkJaWR4ID0gZHVrX190dmFsX2Zhc3Rp bnRfdG9fYXJyX2lkeCh0dl9rZXkpOworCX0gZWxzZQorI2VuZGlmCisJaWYgKERVS19UVkFMX0lT X0RPVUJMRSh0dl9rZXkpKSB7CisJCWlkeCA9IGR1a19fdHZhbF9udW1iZXJfdG9fYXJyX2lkeCh0 dl9rZXkpOworCX0gZWxzZSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJrZXkgaXMgbm90IGEg bnVtYmVyIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBpbmRleCBpcyBub3QgdmFsaWQs IGlkeCB3aWxsIGJlIERVS19fTk9fQVJSQVlfSU5ERVggd2hpY2gKKwkgKiBpcyAweGZmZmZmZmZm VUwuICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGF0IGV4cGxpY2l0bHkKKwkgKiBiZWNh dXNlIDB4ZmZmZmZmZmZVTCB3aWxsIG5ldmVyIGJlIGluc2lkZSBvYmplY3QgJ2Ffc2l6ZScuCisJ ICovCisKKwlpZiAoaWR4ID49IERVS19IT0JKRUNUX0dFVF9BU0laRShvYmopKSB7ICAvKiBmb3Ig cmVzaXppbmcgb2YgYXJyYXkgcGFydCwgdXNlIHNsb3cgcGF0aCAqLworCQlyZXR1cm4gMDsKKwl9 CisJRFVLX0FTU0VSVChpZHggIT0gMHhmZmZmZmZmZlVMKTsKKwlEVUtfQVNTRVJUKGlkeCAhPSBE VUtfX05PX0FSUkFZX0lOREVYKTsKKworCW9sZF9sZW4gPSBhLT5sZW5ndGg7CisKKwlpZiAoaWR4 ID49IG9sZF9sZW4pIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIndyaXRlIG5ldyBhcnJheSBl bnRyeSByZXF1aXJlcyBsZW5ndGggdXBkYXRlICIKKwkJICAgICAgICAgICAgICAgICAgICAgIihh cnJfaWR4PSVsZCwgb2xkX2xlbj0lbGQpIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IGlkeCwgKGxvbmcpIG9sZF9sZW4pKTsKKwkJaWYgKERVS19IQVJSQVlfTEVOR1RIX05PTldSSVRB QkxFKGEpKSB7CisJCQkvKiBUaGUgY29ycmVjdCBiZWhhdmlvciBoZXJlIGlzIGVpdGhlciBhIHNp bGVudCBlcnJvcgorCQkJICogb3IgYSBUeXBlRXJyb3IsIGRlcGVuZGluZyBvbiBzdHJpY3RuZXNz LiAgRmFsbCBiYWNrCisJCQkgKiB0byB0aGUgc2xvdyBwYXRoIHRvIGhhbmRsZSB0aGUgc2l0dWF0 aW9uLgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQluZXdfbGVuID0gaWR4ICsgMTsKKwor CQkoKGR1a19oYXJyYXkgKikgb2JqKS0+bGVuZ3RoID0gbmV3X2xlbjsKKwl9CisKKwl0diA9IERV S19IT0JKRUNUX0FfR0VUX1ZBTFVFX1BUUih0aHItPmhlYXAsIG9iaiwgaWR4KTsKKwlEVUtfVFZB TF9TRVRfVFZBTF9VUERSRUYodGhyLCB0diwgdHZfdmFsKTsgIC8qIHNpZGUgZWZmZWN0cyAqLwor CisJRFVLX0RERChEVUtfREREUFJJTlQoImFycmF5IGZhc3QgcGF0aCBzdWNjZXNzIGZvciBpbmRl eCAlbGQiLCAobG9uZykgaWR4KSk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0Vf QVJSQVlfUFJPUF9GQVNUUEFUSCAqLworCisvKgorICogIEZhc3QgcGF0aCBmb3IgYnVmb2JqIGdl dHByb3AvcHV0cHJvcAorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NV UFBPUlQpCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2dldHByb3BfZmFzdHBhdGhfYnVmb2Jq X3R2YWwoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX3R2YWwgKnR2X2tl eSkgeworCWR1a191aW50MzJfdCBpZHg7CisJZHVrX2hidWZvYmogKmhfYnVmb2JqOworCWR1a191 aW50X3QgYnl0ZV9vZmY7CisJZHVrX3NtYWxsX3VpbnRfdCBlbGVtX3NpemU7CisJZHVrX3VpbnQ4 X3QgKmRhdGE7CisKKwlpZiAoIURVS19IT0JKRUNUX0lTX0JVRk9CSihvYmopKSB7CisJCXJldHVy biAwOworCX0KKwloX2J1Zm9iaiA9IChkdWtfaGJ1Zm9iaiAqKSBvYmo7CisJaWYgKCFEVUtfSEJV Rk9CSl9IQVNfVklSVFVBTF9JTkRJQ0VTKGhfYnVmb2JqKSkgeworCQlyZXR1cm4gMDsKKwl9CisK KyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwlpZiAoRFVLX1RWQUxfSVNfRkFTVElOVCh0 dl9rZXkpKSB7CisJCWlkeCA9IGR1a19fdHZhbF9mYXN0aW50X3RvX2Fycl9pZHgodHZfa2V5KTsK Kwl9IGVsc2UKKyNlbmRpZgorCWlmIChEVUtfVFZBTF9JU19ET1VCTEUodHZfa2V5KSkgeworCQlp ZHggPSBkdWtfX3R2YWxfbnVtYmVyX3RvX2Fycl9pZHgodHZfa2V5KTsKKwl9IGVsc2UgeworCQly ZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBpbmRleCBpcyBub3QgdmFsaWQsIGlkeCB3aWxsIGJlIERV S19fTk9fQVJSQVlfSU5ERVggd2hpY2gKKwkgKiBpcyAweGZmZmZmZmZmVUwuICBXZSBkb24ndCBu ZWVkIHRvIGNoZWNrIGZvciB0aGF0IGV4cGxpY2l0bHkKKwkgKiBiZWNhdXNlIDB4ZmZmZmZmZmZV TCB3aWxsIG5ldmVyIGJlIGluc2lkZSBidWZvYmogbGVuZ3RoLgorCSAqLworCisJLyogQ2FyZWZ1 bCB3aXRoIHdyYXBwaW5nIChsZWZ0IHNoaWZ0aW5nIGlkeCB3b3VsZCBiZSB1bnNhZmUpLiAqLwor CWlmIChpZHggPj0gKGhfYnVmb2JqLT5sZW5ndGggPj4gaF9idWZvYmotPnNoaWZ0KSkgeworCQly ZXR1cm4gMDsKKwl9CisJRFVLX0FTU0VSVChpZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCk7CisK KwlieXRlX29mZiA9IGlkeCA8PCBoX2J1Zm9iai0+c2hpZnQ7ICAvKiBubyB3cmFwIGFzc3VtaW5n IGhfYnVmb2JqLT5sZW5ndGggaXMgdmFsaWQgKi8KKwllbGVtX3NpemUgPSAoZHVrX3NtYWxsX3Vp bnRfdCkgKDFVIDw8IGhfYnVmb2JqLT5zaGlmdCk7CisKKwlpZiAoaF9idWZvYmotPmJ1ZiAhPSBO VUxMICYmIERVS19IQlVGT0JKX1ZBTElEX0JZVEVPRkZTRVRfRVhDTChoX2J1Zm9iaiwgYnl0ZV9v ZmYgKyBlbGVtX3NpemUpKSB7CisJCWRhdGEgPSAoZHVrX3VpbnQ4X3QgKikgRFVLX0hCVUZGRVJf R0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaF9idWZvYmotPmJ1ZikgKyBoX2J1Zm9iai0+b2Zmc2V0 ICsgYnl0ZV9vZmY7CisJCWR1a19oYnVmb2JqX3B1c2hfdmFsaWRhdGVkX3JlYWQodGhyLCBoX2J1 Zm9iaiwgZGF0YSwgZWxlbV9zaXplKTsKKwl9IGVsc2UgeworCQlEVUtfRChEVUtfRFBSSU5UKCJi dWZvYmogYWNjZXNzIG91dCBvZiB1bmRlcmx5aW5nIGJ1ZmZlciwgaWdub3JpbmcgKHJlYWQgemVy bykiKSk7CisJCWR1a19wdXNoX3VpbnQodGhyLCAwKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKyNl bmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChE VUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUKQorRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19w dXRwcm9wX2Zhc3RwYXRoX2J1Zm9ial90dmFsKGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0 ICpvYmosIGR1a190dmFsICp0dl9rZXksIGR1a190dmFsICp0dl92YWwpIHsKKwlkdWtfdWludDMy X3QgaWR4OworCWR1a19oYnVmb2JqICpoX2J1Zm9iajsKKwlkdWtfdWludF90IGJ5dGVfb2ZmOwor CWR1a19zbWFsbF91aW50X3QgZWxlbV9zaXplOworCWR1a191aW50OF90ICpkYXRhOworCisJaWYg KCEoRFVLX0hPQkpFQ1RfSVNfQlVGT0JKKG9iaikgJiYKKwkgICAgICBEVUtfVFZBTF9JU19OVU1C RVIodHZfdmFsKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCURVS19BU1NFUlQoIURVS19IRUFQSERS X0hBU19SRUFET05MWSgoZHVrX2hlYXBoZHIgKikgb2JqKSk7ICAvKiBjYWxsZXIgZW5zdXJlczsg cm9tIG9iamVjdHMgYXJlIG5ldmVyIGJ1Zm9ianMgbm93ICovCisKKwloX2J1Zm9iaiA9IChkdWtf aGJ1Zm9iaiAqKSBvYmo7CisJaWYgKCFEVUtfSEJVRk9CSl9IQVNfVklSVFVBTF9JTkRJQ0VTKGhf YnVmb2JqKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElO VCkKKwlpZiAoRFVLX1RWQUxfSVNfRkFTVElOVCh0dl9rZXkpKSB7CisJCWlkeCA9IGR1a19fdHZh bF9mYXN0aW50X3RvX2Fycl9pZHgodHZfa2V5KTsKKwl9IGVsc2UKKyNlbmRpZgorCWlmIChEVUtf VFZBTF9JU19ET1VCTEUodHZfa2V5KSkgeworCQlpZHggPSBkdWtfX3R2YWxfbnVtYmVyX3RvX2Fy cl9pZHgodHZfa2V5KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBpbmRl eCBpcyBub3QgdmFsaWQsIGlkeCB3aWxsIGJlIERVS19fTk9fQVJSQVlfSU5ERVggd2hpY2gKKwkg KiBpcyAweGZmZmZmZmZmVUwuICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGF0IGV4cGxp Y2l0bHkKKwkgKiBiZWNhdXNlIDB4ZmZmZmZmZmZVTCB3aWxsIG5ldmVyIGJlIGluc2lkZSBidWZv YmogbGVuZ3RoLgorCSAqLworCisJLyogQ2FyZWZ1bCB3aXRoIHdyYXBwaW5nIChsZWZ0IHNoaWZ0 aW5nIGlkeCB3b3VsZCBiZSB1bnNhZmUpLiAqLworCWlmIChpZHggPj0gKGhfYnVmb2JqLT5sZW5n dGggPj4gaF9idWZvYmotPnNoaWZ0KSkgeworCQlyZXR1cm4gMDsKKwl9CisJRFVLX0FTU0VSVChp ZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCk7CisKKwlieXRlX29mZiA9IGlkeCA8PCBoX2J1Zm9i ai0+c2hpZnQ7ICAvKiBubyB3cmFwIGFzc3VtaW5nIGhfYnVmb2JqLT5sZW5ndGggaXMgdmFsaWQg Ki8KKwllbGVtX3NpemUgPSAoZHVrX3NtYWxsX3VpbnRfdCkgKDFVIDw8IGhfYnVmb2JqLT5zaGlm dCk7CisKKwkvKiBWYWx1ZSBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlciBpbiB0aGUgZmFzdCBw YXRoIHNvIHRoZXJlCisJICogYXJlIG5vIHNpZGUgZWZmZWN0cyBpbiB3cml0ZSBjb2VyY2lvbi4K KwkgKi8KKwlkdWtfcHVzaF90dmFsKHRociwgdHZfdmFsKTsKKwlEVUtfQVNTRVJUKGR1a19pc19u dW1iZXIodGhyLCAtMSkpOworCisJaWYgKGhfYnVmb2JqLT5idWYgIT0gTlVMTCAmJiBEVUtfSEJV Rk9CSl9WQUxJRF9CWVRFT0ZGU0VUX0VYQ0woaF9idWZvYmosIGJ5dGVfb2ZmICsgZWxlbV9zaXpl KSkgeworCQlkYXRhID0gKGR1a191aW50OF90ICopIERVS19IQlVGRkVSX0dFVF9EQVRBX1BUUih0 aHItPmhlYXAsIGhfYnVmb2JqLT5idWYpICsgaF9idWZvYmotPm9mZnNldCArIGJ5dGVfb2ZmOwor CQlkdWtfaGJ1Zm9ial92YWxpZGF0ZWRfd3JpdGUodGhyLCBoX2J1Zm9iaiwgZGF0YSwgZWxlbV9z aXplKTsKKwl9IGVsc2UgeworCQlEVUtfRChEVUtfRFBSSU5UKCJidWZvYmogYWNjZXNzIG91dCBv ZiB1bmRlcmx5aW5nIGJ1ZmZlciwgaWdub3JpbmcgKHdyaXRlIHNraXBwZWQpIikpOworCX0KKwor CWR1a19wb3BfdW5zYWZlKHRocik7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYgIC8qIERVS19VU0Vf QlVGRkVST0JKRUNUX1NVUFBPUlQgKi8KKworLyoKKyAqICBHRVRQUk9QOiBFQ01BU2NyaXB0IHBy b3BlcnR5IHJlYWQuCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2hvYmplY3Rf Z2V0cHJvcChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZfb2JqLCBkdWtfdHZhbCAqdHZf a2V5KSB7CisJZHVrX3R2YWwgdHZfb2JqX2NvcHk7CisJZHVrX3R2YWwgdHZfa2V5X2NvcHk7CisJ ZHVrX2hvYmplY3QgKmN1cnIgPSBOVUxMOworCWR1a19oc3RyaW5nICprZXkgPSBOVUxMOworCWR1 a191aW50MzJfdCBhcnJfaWR4ID0gRFVLX19OT19BUlJBWV9JTkRFWDsKKwlkdWtfcHJvcGRlc2Mg ZGVzYzsKKwlkdWtfdWludF90IHNhbml0eTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJnZXRw cm9wOiB0aHI9JXAsIG9iaj0lcCwga2V5PSVwIChvYmogLT4gJSFULCBrZXkgLT4gJSFUKSIsCisJ ICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLCAodm9pZCAqKSB0dl9vYmosICh2b2lk ICopIHR2X2tleSwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgdHZfb2JqLCAo ZHVrX3R2YWwgKikgdHZfa2V5KSk7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKHRoci0+aGVhcCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X29iaiAhPSBOVUxMKTsK KwlEVUtfQVNTRVJUKHR2X2tleSAhPSBOVUxMKTsKKworCURVS19BU1NFUlRfVkFMU1RBQ0tfU1BB Q0UodGhyLCBEVUtfX1ZBTFNUQUNLX1NQQUNFKTsKKworCURVS19TVEFUU19JTkModGhyLT5oZWFw LCBzdGF0c19nZXRwcm9wX2FsbCk7CisKKwkvKgorCSAqICBNYWtlIGEgY29weSBvZiB0dl9vYmos IHR2X2tleSwgYW5kIHR2X3ZhbCB0byBhdm9pZCBhbnkgaXNzdWVzIG9mCisJICogIHRoZW0gYmVp bmcgaW52YWxpZGF0ZWQgYnkgYSB2YWxzdGFjayByZXNpemUuCisJICoKKwkgKiAgWFhYOiB0aGlz IGlzIG5vdyBhbiBvdmVya2lsbCBmb3IgbWFueSBmYXN0IHBhdGhzLiAgUmV3b3JrIHRoaXMKKwkg KiAgdG8gYmUgZmFzdGVyIChhbHRob3VnaCBzd2l0Y2hpbmcgdG8gYSB2YWxzdGFjayBkaXNjaXBs aW5lIG1pZ2h0CisJICogIGJlIGEgYmV0dGVyIHNvbHV0aW9uIG92ZXJhbGwpLgorCSAqLworCisJ RFVLX1RWQUxfU0VUX1RWQUwoJnR2X29ial9jb3B5LCB0dl9vYmopOworCURVS19UVkFMX1NFVF9U VkFMKCZ0dl9rZXlfY29weSwgdHZfa2V5KTsKKwl0dl9vYmogPSAmdHZfb2JqX2NvcHk7CisJdHZf a2V5ID0gJnR2X2tleV9jb3B5OworCisJLyoKKwkgKiAgQ29lcmNpb24gYW5kIGZhc3QgcGF0aCBw cm9jZXNzaW5nCisJICovCisKKwlzd2l0Y2ggKERVS19UVkFMX0dFVF9UQUcodHZfb2JqKSkgewor CWNhc2UgRFVLX1RBR19VTkRFRklORUQ6CisJY2FzZSBEVUtfVEFHX05VTEw6IHsKKwkJLyogTm90 ZTogdW5jb25kaXRpb25hbCB0aHJvdyAqLworCQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBv YmplY3QgaXMgdW5kZWZpbmVkIG9yIG51bGwgLT4gcmVqZWN0IikpOworI2lmIGRlZmluZWQoRFVL X1VTRV9QQVJBTk9JRF9FUlJPUlMpCisJCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9JTlZB TElEX0JBU0UpOworI2Vsc2UKKwkJRFVLX0VSUk9SX0ZNVDIodGhyLCBEVUtfRVJSX1RZUEVfRVJS T1IsICJjYW5ub3QgcmVhZCBwcm9wZXJ0eSAlcyBvZiAlcyIsCisJCSAgICAgICAgICAgICAgIGR1 a19wdXNoX3N0cmluZ190dmFsX3JlYWRhYmxlKHRociwgdHZfa2V5KSwgZHVrX3B1c2hfc3RyaW5n X3R2YWxfcmVhZGFibGUodGhyLCB0dl9vYmopKTsKKyNlbmRpZgorCQlEVUtfV09fTk9SRVRVUk4o cmV0dXJuIDA7KTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBEVUtfVEFHX0JPT0xFQU46IHsKKwkJ RFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IGlzIGEgYm9vbGVhbiwgc3RhcnQgbG9v a3VwIGZyb20gYm9vbGVhbiBwcm90b3R5cGUiKSk7CisJCWN1cnIgPSB0aHItPmJ1aWx0aW5zW0RV S19CSURYX0JPT0xFQU5fUFJPVE9UWVBFXTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBEVUtfVEFH X1NUUklORzogeworCQlkdWtfaHN0cmluZyAqaCA9IERVS19UVkFMX0dFVF9TVFJJTkcodHZfb2Jq KTsKKwkJZHVrX2ludF90IHBvcF9jb3VudDsKKworCQlpZiAoRFVLX1VOTElLRUxZKERVS19IU1RS SU5HX0hBU19TWU1CT0woaCkpKSB7CisJCQkvKiBTeW1ib2xzIChFUzIwMTUgb3IgaGlkZGVuKSBk b24ndCBoYXZlIHZpcnR1YWwgcHJvcGVydGllcy4gKi8KKwkJCURVS19EREQoRFVLX0RERFBSSU5U KCJiYXNlIG9iamVjdCBpcyBhIHN5bWJvbCwgc3RhcnQgbG9va3VwIGZyb20gc3ltYm9sIHByb3Rv dHlwZSIpKTsKKwkJCWN1cnIgPSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX1NZTUJPTF9QUk9UT1RZ UEVdOworCQkJYnJlYWs7CisJCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQlp ZiAoRFVLX1RWQUxfSVNfRkFTVElOVCh0dl9rZXkpKSB7CisJCQlhcnJfaWR4ID0gZHVrX190dmFs X2Zhc3RpbnRfdG9fYXJyX2lkeCh0dl9rZXkpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImJh c2Ugb2JqZWN0IHN0cmluZywga2V5IGlzIGEgZmFzdC1wYXRoIGZhc3RpbnQ7IGFycl9pZHggJWxk IiwgKGxvbmcpIGFycl9pZHgpKTsKKwkJCXBvcF9jb3VudCA9IDA7CisJCX0gZWxzZQorI2VuZGlm CisJCWlmIChEVUtfVFZBTF9JU19OVU1CRVIodHZfa2V5KSkgeworCQkJYXJyX2lkeCA9IGR1a19f dHZhbF9udW1iZXJfdG9fYXJyX2lkeCh0dl9rZXkpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQo ImJhc2Ugb2JqZWN0IHN0cmluZywga2V5IGlzIGEgZmFzdC1wYXRoIG51bWJlcjsgYXJyX2lkeCAl bGQiLCAobG9uZykgYXJyX2lkeCkpOworCQkJcG9wX2NvdW50ID0gMDsKKwkJfSBlbHNlIHsKKwkJ CWFycl9pZHggPSBkdWtfX3B1c2hfdHZhbF90b19wcm9wZXJ0eV9rZXkodGhyLCB0dl9rZXksICZr ZXkpOworCQkJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisJCQlEVUtfREREKERVS19ERERQUklO VCgiYmFzZSBvYmplY3Qgc3RyaW5nLCBrZXkgaXMgYSBub24tZmFzdC1wYXRoIG51bWJlcjsgYWZ0 ZXIgIgorCQkJICAgICAgICAgICAgICAgICAgICAgImNvZXJjaW9uIGtleSBpcyAlIVQsIGFycl9p ZHggJWxkIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2 YWwodGhyLCAtMSksIChsb25nKSBhcnJfaWR4KSk7CisJCQlwb3BfY291bnQgPSAxOworCQl9CisK KwkJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCAmJgorCQkgICAgYXJyX2lkeCA8 IERVS19IU1RSSU5HX0dFVF9DSEFSTEVOKGgpKSB7CisJCQlkdWtfcG9wX25fdW5zYWZlKHRociwg cG9wX2NvdW50KTsKKwkJCWR1a19wdXNoX2hzdHJpbmcodGhyLCBoKTsKKwkJCWR1a19zdWJzdHJp bmcodGhyLCAtMSwgYXJyX2lkeCwgYXJyX2lkeCArIDEpOyAgLyogW3N0cl0gLT4gW3N1YnN0cl0g Ki8KKworCQkJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX2dldHByb3Bfc3RyaW5naWR4 KTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiAlIVQgKGJhc2UgaXMgc3RyaW5nLCBrZXkg aXMgYW4gaW5kZXggaW5zaWRlIHN0cmluZyBsZW5ndGggIgorCQkJICAgICAgICAgICAgICAgICAg ICAgImFmdGVyIGNvZXJjaW9uIC0+IHJldHVybiBjaGFyKSIsCisJCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJCQlyZXR1cm4gMTsK KwkJfQorCisJCWlmIChwb3BfY291bnQgPT0gMCkgeworCQkJLyogVGhpcyBpcyBhIHByZXR0eSBh d2t3YXJkIGNvbnRyb2wgZmxvdywgYnV0IHdlIG5lZWQgdG8gcmVjaGVjayB0aGUKKwkJCSAqIGtl eSBjb2VyY2lvbiBoZXJlLgorCQkJICovCisJCQlhcnJfaWR4ID0gZHVrX19wdXNoX3R2YWxfdG9f cHJvcGVydHlfa2V5KHRociwgdHZfa2V5LCAma2V5KTsKKwkJCURVS19BU1NFUlQoa2V5ICE9IE5V TEwpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IHN0cmluZywga2V5IGlz IGEgbm9uLWZhc3QtcGF0aCBudW1iZXI7IGFmdGVyICIKKwkJCSAgICAgICAgICAgICAgICAgICAg ICJjb2VyY2lvbiBrZXkgaXMgJSFULCBhcnJfaWR4ICVsZCIsCisJCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpLCAobG9uZykgYXJyX2lkeCkp OworCQl9CisKKwkJaWYgKGtleSA9PSBEVUtfSFRIUkVBRF9TVFJJTkdfTEVOR1RIKHRocikpIHsK KwkJCWR1a19wb3BfdW5zYWZlKHRocik7ICAvKiBba2V5XSAtPiBbXSAqLworCQkJZHVrX3B1c2hf dWludCh0aHIsIChkdWtfdWludF90KSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoKSk7ICAvKiBb XSAtPiBbcmVzXSAqLworCisJCQlEVUtfU1RBVFNfSU5DKHRoci0+aGVhcCwgc3RhdHNfZ2V0cHJv cF9zdHJpbmdsZW4pOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+ICUhVCAoYmFzZSBpcyBz dHJpbmcsIGtleSBpcyAnbGVuZ3RoJyBhZnRlciBjb2VyY2lvbiAtPiAiCisJCQkgICAgICAgICAg ICAgICAgICAgICAicmV0dXJuIHN0cmluZyBsZW5ndGgpIiwKKwkJCSAgICAgICAgICAgICAgICAg ICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwkJCXJldHVybiAxOwor CQl9CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IGlzIGEgc3RyaW5nLCBz dGFydCBsb29rdXAgZnJvbSBzdHJpbmcgcHJvdG90eXBlIikpOworCQljdXJyID0gdGhyLT5idWls dGluc1tEVUtfQklEWF9TVFJJTkdfUFJPVE9UWVBFXTsKKwkJZ290byBsb29rdXA7ICAvKiBhdm9p ZCBkb3VibGUgY29lcmNpb24gKi8KKwl9CisKKwljYXNlIERVS19UQUdfT0JKRUNUOiB7CisjaWYg ZGVmaW5lZChEVUtfVVNFX0FSUkFZX1BST1BfRkFTVFBBVEgpCisJCWR1a190dmFsICp0bXA7Cisj ZW5kaWYKKworCQljdXJyID0gRFVLX1RWQUxfR0VUX09CSkVDVCh0dl9vYmopOworCQlEVUtfQVNT RVJUKGN1cnIgIT0gTlVMTCk7CisKKwkJLyogWFhYOiBhcnJheSAubGVuZ3RoIGZhc3QgcGF0aCAo aW1wb3J0YW50IGluIGUuZy4gbG9vcHMpPyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FSUkFZ X1BST1BfRkFTVFBBVEgpCisJCXRtcCA9IGR1a19fZ2V0cHJvcF9zaGFsbG93X2Zhc3RwYXRoX2Fy cmF5X3R2YWwodGhyLCBjdXJyLCB0dl9rZXkpOworCQlpZiAodG1wKSB7CisJCQlkdWtfcHVzaF90 dmFsKHRociwgdG1wKTsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+ICUhVCAoYmFzZSBp cyBvYmplY3QsIGtleSBpcyBhIG51bWJlciwgYXJyYXkgcGFydCAiCisJCQkgICAgICAgICAgICAg ICAgICAgICAiZmFzdCBwYXRoKSIsCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwg KikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJCQlEVUtfU1RBVFNfSU5DKHRoci0+aGVhcCwg c3RhdHNfZ2V0cHJvcF9hcnJheWlkeCk7CisJCQlyZXR1cm4gMTsKKwkJfQorI2VuZGlmCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfQlVGRkVST0JKRUNUX1NVUFBPUlQpCisJCWlmIChkdWtfX2dldHBy b3BfZmFzdHBhdGhfYnVmb2JqX3R2YWwodGhyLCBjdXJyLCB0dl9rZXkpICE9IDApIHsKKwkJCS8q IFJlYWQgdmFsdWUgcHVzaGVkIG9uIHN0YWNrLiAqLworCQkJRFVLX0RERChEVUtfREREUFJJTlQo Ii0+ICUhVCAoYmFzZSBpcyBidWZvYmosIGtleSBpcyBhIG51bWJlciwgYnVmb2JqICIKKwkJCSAg ICAgICAgICAgICAgICAgICAgICJmYXN0IHBhdGgpIiwKKwkJCSAgICAgICAgICAgICAgICAgICAg IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwkJCURVS19TVEFUU19JTkMo dGhyLT5oZWFwLCBzdGF0c19nZXRwcm9wX2J1Zm9iamlkeCk7CisJCQlyZXR1cm4gMTsKKwkJfQor I2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1BST1hZKQorCQlpZiAoRFVLX1VOTElL RUxZKERVS19IT0JKRUNUX0lTX1BST1hZKGN1cnIpKSkgeworCQkJZHVrX2hvYmplY3QgKmhfdGFy Z2V0OworCisJCQlpZiAoZHVrX19wcm94eV9jaGVja19wcm9wKHRociwgY3VyciwgRFVLX1NUUklE WF9HRVQsIHR2X2tleSwgJmhfdGFyZ2V0KSkgeworCQkJCS8qIC0+IFsgLi4uIHRyYXAgaGFuZGxl ciBdICovCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+IHByb3h5IG9iamVjdCAnZ2V0JyBm b3Iga2V5ICUhVCIsIChkdWtfdHZhbCAqKSB0dl9rZXkpKTsKKwkJCQlEVUtfU1RBVFNfSU5DKHRo ci0+aGVhcCwgc3RhdHNfZ2V0cHJvcF9wcm94eSk7CisJCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIs IGhfdGFyZ2V0KTsgIC8qIHRhcmdldCAqLworCQkJCWR1a19wdXNoX3R2YWwodGhyLCB0dl9rZXkp OyAgICAgICAvKiBQICovCisJCQkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X29iaik7ICAgICAgIC8q IFJlY2VpdmVyOiBQcm94eSBvYmplY3QgKi8KKwkJCQlkdWtfY2FsbF9tZXRob2QodGhyLCAzIC8q bmFyZ3MqLyk7CisKKwkJCQkvKiBUYXJnZXQgb2JqZWN0IG11c3QgYmUgY2hlY2tlZCBmb3IgYSBj b25mbGljdGluZworCQkJCSAqIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkuCisJCQkJICovCisJ CQkJYXJyX2lkeCA9IGR1a19fcHVzaF90dmFsX3RvX3Byb3BlcnR5X2tleSh0aHIsIHR2X2tleSwg JmtleSk7CisJCQkJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisKKwkJCQlpZiAoZHVrX19nZXRf b3duX3Byb3BkZXNjX3Jhdyh0aHIsIGhfdGFyZ2V0LCBrZXksIGFycl9pZHgsICZkZXNjLCBEVUtf R0VUREVTQ19GTEFHX1BVU0hfVkFMVUUpKSB7CisJCQkJCWR1a190dmFsICp0dl9ob29rID0gZHVr X3JlcXVpcmVfdHZhbCh0aHIsIC0zKTsgIC8qIHZhbHVlIGZyb20gaG9vayAqLworCQkJCQlkdWtf dHZhbCAqdHZfdGFyZyA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCAtMSk7ICAvKiB2YWx1ZSBmcm9t IHRhcmdldCAqLworCQkJCQlkdWtfYm9vbF90IGRhdGFkZXNjX3JlamVjdDsKKwkJCQkJZHVrX2Jv b2xfdCBhY2NkZXNjX3JlamVjdDsKKworCQkJCQlEVUtfREREKERVS19ERERQUklOVCgicHJveHkg J2dldCc6IHRhcmdldCBoYXMgbWF0Y2hpbmcgcHJvcGVydHkgJSFPLCBjaGVjayBmb3IgIgorCQkJ CQkgICAgICAgICAgICAgICAgICAgICAiY29uZmxpY3RpbmcgcHJvcGVydHk7IHR2X2hvb2s9JSFU LCB0dl90YXJnPSUhVCwgZGVzYy5mbGFncz0weCUwOGx4LCAiCisJCQkJCSAgICAgICAgICAgICAg ICAgICAgICJkZXNjLmdldD0lcCwgZGVzYy5zZXQ9JXAiLAorCQkJCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX2hlYXBoZHIgKikga2V5LCAoZHVrX3R2YWwgKikgdHZfaG9vaywgKGR1a190dmFs ICopIHR2X3RhcmcsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBk ZXNjLmZsYWdzLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBkZXNjLmdldCwg KHZvaWQgKikgZGVzYy5zZXQpKTsKKworCQkJCQlkYXRhZGVzY19yZWplY3QgPSAhKGRlc2MuZmxh Z3MgJiBEVUtfUFJPUERFU0NfRkxBR19BQ0NFU1NPUikgJiYKKwkJCQkJICAgICAgICAgICAgICAg ICAgIShkZXNjLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKSAmJgorCQkJ CQkgICAgICAgICAgICAgICAgICAhKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19XUklU QUJMRSkgJiYKKwkJCQkJICAgICAgICAgICAgICAgICAgIWR1a19qc19zYW1ldmFsdWUodHZfaG9v aywgdHZfdGFyZyk7CisJCQkJCWFjY2Rlc2NfcmVqZWN0ID0gKGRlc2MuZmxhZ3MgJiBEVUtfUFJP UERFU0NfRkxBR19BQ0NFU1NPUikgJiYKKwkJCQkJICAgICAgICAgICAgICAgICAhKGRlc2MuZmxh Z3MgJiBEVUtfUFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEUpICYmCisJCQkJCSAgICAgICAgICAg ICAgICAgKGRlc2MuZ2V0ID09IE5VTEwpICYmCisJCQkJCSAgICAgICAgICAgICAgICAgIURVS19U VkFMX0lTX1VOREVGSU5FRCh0dl9ob29rKTsKKwkJCQkJaWYgKGRhdGFkZXNjX3JlamVjdCB8fCBh Y2NkZXNjX3JlamVjdCkgeworCQkJCQkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX1BST1hZ X1JFSkVDVEVEKTsKKwkJCQkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCQkJCQl9CisK KwkJCQkJZHVrX3BvcF8yX3Vuc2FmZSh0aHIpOworCQkJCX0gZWxzZSB7CisJCQkJCWR1a19wb3Bf dW5zYWZlKHRocik7CisJCQkJfQorCQkJCXJldHVybiAxOyAgLyogcmV0dXJuIHZhbHVlICovCisJ CQl9CisKKwkJCWN1cnIgPSBoX3RhcmdldDsgIC8qIHJlc3VtZSBsb29rdXAgZnJvbSB0YXJnZXQg Ki8KKwkJCURVS19UVkFMX1NFVF9PQkpFQ1QodHZfb2JqLCBjdXJyKTsKKwkJfQorI2VuZGlmICAv KiBEVUtfVVNFX0VTNl9QUk9YWSAqLworCisJCWlmIChEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FS R1VNRU5UUyhjdXJyKSkgeworCQkJYXJyX2lkeCA9IGR1a19fcHVzaF90dmFsX3RvX3Byb3BlcnR5 X2tleSh0aHIsIHR2X2tleSwgJmtleSk7CisJCQlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKwor CQkJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX2dldHByb3BfYXJndW1lbnRzKTsKKwkJ CWlmIChkdWtfX2NoZWNrX2FyZ3VtZW50c19tYXBfZm9yX2dldCh0aHIsIGN1cnIsIGtleSwgJmRl c2MpKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+ICUhVCAoYmFzZSBpcyBvYmplY3Qg d2l0aCBhcmd1bWVudHMgZXhvdGljIGJlaGF2aW9yLCAiCisJCQkJICAgICAgICAgICAgICAgICAg ICAgImtleSBtYXRjaGVzIG1hZ2ljYWxseSBib3VuZCBwcm9wZXJ0eSAtPiBza2lwIHN0YW5kYXJk ICIKKwkJCQkgICAgICAgICAgICAgICAgICAgICAiR2V0IHdpdGggcmVwbGFjZW1lbnQgdmFsdWUp IiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRo ciwgLTEpKSk7CisKKwkJCQkvKiBubyBuZWVkIGZvciAnY2FsbGVyJyBwb3N0LWNoZWNrLCBiZWNh dXNlICdrZXknIG11c3QgYmUgYW4gYXJyYXkgaW5kZXggKi8KKworCQkJCWR1a19yZW1vdmVfbTIo dGhyKTsgIC8qIFtrZXkgcmVzdWx0XSAtPiBbcmVzdWx0XSAqLworCQkJCXJldHVybiAxOworCQkJ fQorCisJCQlnb3RvIGxvb2t1cDsgIC8qIGF2b2lkIGRvdWJsZSBjb2VyY2lvbiAqLworCQl9CisJ CWJyZWFrOworCX0KKworCS8qIEJ1ZmZlciBoYXMgdmlydHVhbCBwcm9wZXJ0aWVzIHNpbWlsYXIg dG8gc3RyaW5nLCBidXQgaW5kZXhlZCB2YWx1ZXMKKwkgKiBhcmUgbnVtYmVycywgbm90IDEtYnl0 ZSBidWZmZXJzL3N0cmluZ3Mgd2hpY2ggd291bGQgcGVyZm9ybSBiYWRseS4KKwkgKi8KKwljYXNl IERVS19UQUdfQlVGRkVSOiB7CisJCWR1a19oYnVmZmVyICpoID0gRFVLX1RWQUxfR0VUX0JVRkZF Uih0dl9vYmopOworCQlkdWtfaW50X3QgcG9wX2NvdW50OworCisJCS8qCisJCSAqICBCZWNhdXNl IGJ1ZmZlciB2YWx1ZXMgYXJlIG9mdGVuIGxvb3BlZCBvdmVyLCBhIG51bWJlciBmYXN0IHBhdGgK KwkJICogIGlzIGltcG9ydGFudC4KKwkJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElO VCkKKwkJaWYgKERVS19UVkFMX0lTX0ZBU1RJTlQodHZfa2V5KSkgeworCQkJYXJyX2lkeCA9IGR1 a19fdHZhbF9mYXN0aW50X3RvX2Fycl9pZHgodHZfa2V5KTsKKwkJCURVS19EREQoRFVLX0RERFBS SU5UKCJiYXNlIG9iamVjdCBidWZmZXIsIGtleSBpcyBhIGZhc3QtcGF0aCBmYXN0aW50OyBhcnJf aWR4ICVsZCIsIChsb25nKSBhcnJfaWR4KSk7CisJCQlwb3BfY291bnQgPSAwOworCQl9CisJCWVs c2UKKyNlbmRpZgorCQlpZiAoRFVLX1RWQUxfSVNfTlVNQkVSKHR2X2tleSkpIHsKKwkJCWFycl9p ZHggPSBkdWtfX3R2YWxfbnVtYmVyX3RvX2Fycl9pZHgodHZfa2V5KTsKKwkJCURVS19EREQoRFVL X0RERFBSSU5UKCJiYXNlIG9iamVjdCBidWZmZXIsIGtleSBpcyBhIGZhc3QtcGF0aCBudW1iZXI7 IGFycl9pZHggJWxkIiwgKGxvbmcpIGFycl9pZHgpKTsKKwkJCXBvcF9jb3VudCA9IDA7CisJCX0g ZWxzZSB7CisJCQlhcnJfaWR4ID0gZHVrX19wdXNoX3R2YWxfdG9fcHJvcGVydHlfa2V5KHRociwg dHZfa2V5LCAma2V5KTsKKwkJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCQkJRFVLX0RERChE VUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IGJ1ZmZlciwga2V5IGlzIGEgbm9uLWZhc3QtcGF0aCBu dW1iZXI7IGFmdGVyICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJjb2VyY2lvbiBrZXkgaXMg JSFULCBhcnJfaWR4ICVsZCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikg ZHVrX2dldF90dmFsKHRociwgLTEpLCAobG9uZykgYXJyX2lkeCkpOworCQkJcG9wX2NvdW50ID0g MTsKKwkJfQorCisJCWlmIChhcnJfaWR4ICE9IERVS19fTk9fQVJSQVlfSU5ERVggJiYKKwkJICAg IGFycl9pZHggPCBEVUtfSEJVRkZFUl9HRVRfU0laRShoKSkgeworCQkJZHVrX3BvcF9uX3Vuc2Fm ZSh0aHIsIHBvcF9jb3VudCk7CisJCQlkdWtfcHVzaF91aW50KHRociwgKChkdWtfdWludDhfdCAq KSBEVUtfSEJVRkZFUl9HRVRfREFUQV9QVFIodGhyLT5oZWFwLCBoKSlbYXJyX2lkeF0pOworCQkJ RFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX2dldHByb3BfYnVmZmVyaWR4KTsKKwkJCURV S19EREQoRFVLX0RERFBSSU5UKCItPiAlIVQgKGJhc2UgaXMgYnVmZmVyLCBrZXkgaXMgYW4gaW5k ZXggaW5zaWRlIGJ1ZmZlciBsZW5ndGggIgorCQkJICAgICAgICAgICAgICAgICAgICAgImFmdGVy IGNvZXJjaW9uIC0+IHJldHVybiBieXRlIGFzIG51bWJlcikiLAorCQkJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkJcmV0dXJuIDE7 CisJCX0KKworCQlpZiAocG9wX2NvdW50ID09IDApIHsKKwkJCS8qIFRoaXMgaXMgYSBwcmV0dHkg YXdrd2FyZCBjb250cm9sIGZsb3csIGJ1dCB3ZSBuZWVkIHRvIHJlY2hlY2sgdGhlCisJCQkgKiBr ZXkgY29lcmNpb24gaGVyZS4KKwkJCSAqLworCQkJYXJyX2lkeCA9IGR1a19fcHVzaF90dmFsX3Rv X3Byb3BlcnR5X2tleSh0aHIsIHR2X2tleSwgJmtleSk7CisJCQlEVUtfQVNTRVJUKGtleSAhPSBO VUxMKTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJiYXNlIG9iamVjdCBidWZmZXIsIGtleSBp cyBhIG5vbi1mYXN0LXBhdGggbnVtYmVyOyBhZnRlciAiCisJCQkgICAgICAgICAgICAgICAgICAg ICAiY29lcmNpb24ga2V5IGlzICUhVCwgYXJyX2lkeCAlbGQiLAorCQkJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwgKGxvbmcpIGFycl9pZHgp KTsKKwkJfQorCisJCWlmIChrZXkgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0xFTkdUSCh0aHIpKSB7 CisJCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOyAgLyogW2tleV0gLT4gW10gKi8KKwkJCWR1a19wdXNo X3VpbnQodGhyLCAoZHVrX3VpbnRfdCkgRFVLX0hCVUZGRVJfR0VUX1NJWkUoaCkpOyAgLyogW10g LT4gW3Jlc10gKi8KKwkJCURVS19TVEFUU19JTkModGhyLT5oZWFwLCBzdGF0c19nZXRwcm9wX2J1 ZmZlcmxlbik7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiAlIVQgKGJhc2UgaXMgYnVm ZmVyLCBrZXkgaXMgJ2xlbmd0aCcgIgorCQkJICAgICAgICAgICAgICAgICAgICAgImFmdGVyIGNv ZXJjaW9uIC0+IHJldHVybiBidWZmZXIgbGVuZ3RoKSIsCisJCQkgICAgICAgICAgICAgICAgICAg ICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJCQlyZXR1cm4gMTsKKwkJ fQorCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJiYXNlIG9iamVjdCBpcyBhIGJ1ZmZlciwgc3Rh cnQgbG9va3VwIGZyb20gVWludDhBcnJheSBwcm90b3R5cGUiKSk7CisJCWN1cnIgPSB0aHItPmJ1 aWx0aW5zW0RVS19CSURYX1VJTlQ4QVJSQVlfUFJPVE9UWVBFXTsKKwkJZ290byBsb29rdXA7ICAv KiBhdm9pZCBkb3VibGUgY29lcmNpb24gKi8KKwl9CisKKwljYXNlIERVS19UQUdfUE9JTlRFUjog eworCQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBvYmplY3QgaXMgYSBwb2ludGVyLCBzdGFy dCBsb29rdXAgZnJvbSBwb2ludGVyIHByb3RvdHlwZSIpKTsKKwkJY3VyciA9IHRoci0+YnVpbHRp bnNbRFVLX0JJRFhfUE9JTlRFUl9QUk9UT1RZUEVdOworCQlicmVhazsKKwl9CisKKwljYXNlIERV S19UQUdfTElHSFRGVU5DOiB7CisJCS8qIExpZ2h0ZnVuY3MgaW5oZXJpdCBnZXR0ZXIgLm5hbWUg YW5kIC5sZW5ndGggZnJvbSAlTmF0aXZlRnVuY3Rpb25Qcm90b3R5cGUlLiAqLworCQlEVUtfRERE KERVS19ERERQUklOVCgiYmFzZSBvYmplY3QgaXMgYSBsaWdodGZ1bmMsIHN0YXJ0IGxvb2t1cCBm cm9tIGZ1bmN0aW9uIHByb3RvdHlwZSIpKTsKKwkJY3VyciA9IHRoci0+YnVpbHRpbnNbRFVLX0JJ RFhfTkFUSVZFX0ZVTkNUSU9OX1BST1RPVFlQRV07CisJCWJyZWFrOworCX0KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9GQVNUSU5UKQorCWNhc2UgRFVLX1RBR19GQVNUSU5UOgorI2VuZGlmCisJZGVm YXVsdDogeworCQkvKiBudW1iZXIgKi8KKwkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2Jq ZWN0IGlzIGEgbnVtYmVyLCBzdGFydCBsb29rdXAgZnJvbSBudW1iZXIgcHJvdG90eXBlIikpOwor CQlEVUtfQVNTRVJUKCFEVUtfVFZBTF9JU19VTlVTRUQodHZfb2JqKSk7CisJCURVS19BU1NFUlQo RFVLX1RWQUxfSVNfTlVNQkVSKHR2X29iaikpOworCQljdXJyID0gdGhyLT5idWlsdGluc1tEVUtf QklEWF9OVU1CRVJfUFJPVE9UWVBFXTsKKwkJYnJlYWs7CisJfQorCX0KKworCS8qIGtleSBjb2Vy Y2lvbiAodW5sZXNzIGFscmVhZHkgY29lcmNlZCBhYm92ZSkgKi8KKwlEVUtfQVNTRVJUKGtleSA9 PSBOVUxMKTsKKwlhcnJfaWR4ID0gZHVrX19wdXNoX3R2YWxfdG9fcHJvcGVydHlfa2V5KHRociwg dHZfa2V5LCAma2V5KTsKKwlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKwkvKgorCSAqICBQcm9w ZXJ0eSBsb29rdXAKKwkgKi8KKworIGxvb2t1cDoKKwkvKiBba2V5XSAoY29lcmNlZCkgKi8KKwlE VUtfQVNTRVJUKGN1cnIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisKKwlz YW5pdHkgPSBEVUtfSE9CSkVDVF9QUk9UT1RZUEVfQ0hBSU5fU0FOSVRZOworCWRvIHsKKwkJaWYg KCFkdWtfX2dldF9vd25fcHJvcGRlc2NfcmF3KHRociwgY3Vyciwga2V5LCBhcnJfaWR4LCAmZGVz YywgRFVLX0dFVERFU0NfRkxBR19QVVNIX1ZBTFVFKSkgeworCQkJZ290byBuZXh0X2luX2NoYWlu OworCQl9CisKKwkJaWYgKGRlc2MuZ2V0ICE9IE5VTEwpIHsKKwkJCS8qIGFjY2Vzc29yIHdpdGgg ZGVmaW5lZCBnZXR0ZXIgKi8KKwkJCURVS19BU1NFUlQoKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERF U0NfRkxBR19BQ0NFU1NPUikgIT0gMCk7CisKKwkJCWR1a19wb3BfdW5zYWZlKHRocik7ICAgICAg ICAgICAgICAvKiBba2V5IHVuZGVmaW5lZF0gLT4gW2tleV0gKi8KKwkJCWR1a19wdXNoX2hvYmpl Y3QodGhyLCBkZXNjLmdldCk7CisJCQlkdWtfcHVzaF90dmFsKHRociwgdHZfb2JqKTsgICAgICAg Lyogbm90ZTogb3JpZ2luYWwsIHVuY29lcmNlZCBiYXNlICovCisjaWYgZGVmaW5lZChEVUtfVVNF X05PTlNURF9HRVRURVJfS0VZX0FSR1VNRU5UKQorCQkJZHVrX2R1cF9tMyh0aHIpOworCQkJZHVr X2NhbGxfbWV0aG9kKHRociwgMSk7ICAgICAgICAgIC8qIFtrZXkgZ2V0dGVyIHRoaXMga2V5XSAt PiBba2V5IHJldHZhbF0gKi8KKyNlbHNlCisJCQlkdWtfY2FsbF9tZXRob2QodGhyLCAwKTsgICAg ICAgICAgLyogW2tleSBnZXR0ZXIgdGhpc10gLT4gW2tleSByZXR2YWxdICovCisjZW5kaWYKKwkJ fSBlbHNlIHsKKwkJCS8qIFtrZXkgdmFsdWVdIG9yIFtrZXkgdW5kZWZpbmVkXSAqLworCisJCQkv KiBkYXRhIHByb3BlcnR5IG9yIGFjY2Vzc29yIHdpdGhvdXQgZ2V0dGVyICovCisJCQlEVUtfQVNT RVJUKCgoZGVzYy5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSA9PSAwKSB8fAor CQkJICAgICAgICAgICAoZGVzYy5nZXQgPT0gTlVMTCkpOworCisJCQkvKiBpZiBhY2Nlc3NvciB3 aXRob3V0IGdldHRlciwgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZCAqLworCQkJRFVLX0FTU0VS VCgoKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19BQ0NFU1NPUikgPT0gMCkgfHwKKwkJ CSAgICAgICAgICAgZHVrX2lzX3VuZGVmaW5lZCh0aHIsIC0xKSk7CisKKwkJCS8qIE5vdGU6IGZv ciBhbiBhY2Nlc3NvciB3aXRob3V0IGdldHRlciwgZmFsbGluZyB0aHJvdWdoIHRvCisJCQkgKiBj aGVjayBmb3IgImNhbGxlciIgZXhvdGljIGJlaGF2aW9yIGlzIHVubmVjZXNzYXJ5IGFzCisJCQkg KiAidW5kZWZpbmVkIiB3aWxsIG5ldmVyIGFjdGl2YXRlIHRoZSBiZWhhdmlvci4gIEJ1dCBpdCBk b2VzCisJCQkgKiBubyBoYXJtLCBzbyB3ZSdsbCBkbyBpdCBhbnl3YXkuCisJCQkgKi8KKwkJfQor CisJCWdvdG8gZm91bmQ7ICAvKiBba2V5IHJlc3VsdF0gKi8KKworCSBuZXh0X2luX2NoYWluOgor CQkvKiBYWFg6IG9wdGlvbiB0byBwcmV0ZW5kIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QgaWYgc2Fu aXR5IGxpbWl0IGlzCisJCSAqIGhpdCBtaWdodCBiZSB1c2VmdWwuCisJCSAqLworCQlpZiAoRFVL X1VOTElLRUxZKHNhbml0eS0tID09IDApKSB7CisJCQlEVUtfRVJST1JfUkFOR0UodGhyLCBEVUtf U1RSX1BST1RPVFlQRV9DSEFJTl9MSU1JVCk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7 KTsKKwkJfQorCQljdXJyID0gRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGN1 cnIpOworCX0gd2hpbGUgKGN1cnIgIT0gTlVMTCk7CisKKwkvKgorCSAqICBOb3QgZm91bmQKKwkg Ki8KKworCWR1a190b191bmRlZmluZWQodGhyLCAtMSk7ICAvKiBba2V5XSAtPiBbdW5kZWZpbmVk XSAoZGVmYXVsdCB2YWx1ZSkgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCItPiAlIVQgKG5v dCBmb3VuZCkiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJcmV0dXJu IDA7CisKKwkvKgorCSAqICBGb3VuZDsgcG9zdC1wcm9jZXNzaW5nIChGdW5jdGlvbiBhbmQgYXJn dW1lbnRzIG9iamVjdHMpCisJICovCisKKyBmb3VuZDoKKwkvKiBba2V5IHJlc3VsdF0gKi8KKwor I2lmICFkZWZpbmVkKERVS19VU0VfTk9OU1REX0ZVTkNfQ0FMTEVSX1BST1BFUlRZKQorCS8qIFNw ZWNpYWwgYmVoYXZpb3IgZm9yICdjYWxsZXInIHByb3BlcnR5IG9mIChub24tYm91bmQpIGZ1bmN0 aW9uIG9iamVjdHMKKwkgKiBhbmQgbm9uLXN0cmljdCBBcmd1bWVudHMgb2JqZWN0czogaWYgJ2Nh bGxlcicgLXZhbHVlLSAoISkgaXMgYSBzdHJpY3QKKwkgKiBtb2RlIGZ1bmN0aW9uLCB0aHJvdyBh IFR5cGVFcnJvciAoRTUgU2VjdGlvbnMgMTUuMy41LjQsIDEwLjYpLgorCSAqIFF1aXRlIGludGVy ZXN0aW5nbHksIGEgbm9uLXN0cmljdCBmdW5jdGlvbiB3aXRoIG5vIGZvcm1hbCBhcmd1bWVudHMK KwkgKiB3aWxsIGdldCBhbiBhcmd1bWVudHMgb2JqZWN0IC13aXRob3V0LSBzcGVjaWFsICdjYWxs ZXInIGJlaGF2aW9yIQorCSAqCisJICogVGhlIEU1LjEgc3BlYyBpcyBhIGJpdCBhbWJpZ3VvdXMg aWYgdGhpcyBzcGVjaWFsIGJlaGF2aW9yIGFwcGxpZXMgd2hlbgorCSAqIGEgYm91bmQgZnVuY3Rp b24gaXMgdGhlIGJhc2UgdmFsdWUgKG5vdCB0aGUgJ2NhbGxlcicgdmFsdWUpOiBTZWN0aW9uCisJ ICogMTUuMy40LjUgKGRlc2NyaWJpbmcgYmluZCgpKSBzdGF0ZXMgdGhhdCBbW0dldF1dIGZvciBi b3VuZCBmdW5jdGlvbnMKKwkgKiBtYXRjaGVzIHRoYXQgb2YgU2VjdGlvbiAxNS4zLjUuNCAoW1tH ZXRdXSBmb3IgRnVuY3Rpb24gaW5zdGFuY2VzKS4KKwkgKiBIb3dldmVyLCBTZWN0aW9uIDEzLjMu NS40IGhhcyAiTk9URTogRnVuY3Rpb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nCisJICogRnVuY3Rp b24ucHJvdG90eXBlLmJpbmQgdXNlIHRoZSBkZWZhdWx0IFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k LiIKKwkgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoaXMgbWVhbnMgdGhh dCBib3VuZCBmdW5jdGlvbnMKKwkgKiBzaG91bGQgbm90IGhhdmUgdGhlIHNwZWNpYWwgW1tHZXRd XSBiZWhhdmlvci4KKwkgKgorCSAqIFRoZSBFNS4xIHNwZWMgaXMgYWxzbyBhIGJpdCB1bmNsZWFy IGlmIHRoZSBUeXBlRXJyb3IgdGhyb3dpbmcgaXMKKwkgKiBhcHBsaWVkIGlmIHRoZSAnY2FsbGVy JyB2YWx1ZSBpcyBhIHN0cmljdCBib3VuZCBmdW5jdGlvbi4gIFRoZQorCSAqIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gd2lsbCB0aHJvdyBldmVuIGZvciBib3RoIHN0cmljdCBub24tYm91bmQKKwkg KiBhbmQgc3RyaWN0IGJvdW5kIGZ1bmN0aW9ucy4KKwkgKgorCSAqIFNlZSB0ZXN0LWRldi1zdHJp Y3QtZnVuYy1hcy1jYWxsZXItcHJvcC12YWx1ZS5qcyBmb3IgcXVpdGUgZXh0ZW5zaXZlCisJICog dGVzdHMuCisJICoKKwkgKiBUaGlzIGV4b3RpYyBiZWhhdmlvciBpcyBkaXNhYmxlZCB3aGVuIHRo ZSBub24tc3RhbmRhcmQgJ2NhbGxlcicgcHJvcGVydHkKKwkgKiBpcyBlbmFibGVkLCBhcyBpdCBj b25mbGljdHMgd2l0aCB0aGUgZnJlZSB1c2Ugb2YgJ2NhbGxlcicuCisJICovCisJaWYgKGtleSA9 PSBEVUtfSFRIUkVBRF9TVFJJTkdfQ0FMTEVSKHRocikgJiYKKwkgICAgRFVLX1RWQUxfSVNfT0JK RUNUKHR2X29iaikpIHsKKwkJZHVrX2hvYmplY3QgKm9yaWcgPSBEVUtfVFZBTF9HRVRfT0JKRUNU KHR2X29iaik7CisJCURVS19BU1NFUlQob3JpZyAhPSBOVUxMKTsKKworCQlpZiAoRFVLX0hPQkpF Q1RfSVNfTk9OQk9VTkRfRlVOQ1RJT04ob3JpZykgfHwKKwkJICAgIERVS19IT0JKRUNUX0hBU19F WE9USUNfQVJHVU1FTlRTKG9yaWcpKSB7CisJCQlkdWtfaG9iamVjdCAqaDsKKworCQkJLyogWFhY OiBUaGUgVHlwZUVycm9yIGlzIGN1cnJlbnRseSBub3QgYXBwbGllZCB0byBib3VuZAorCQkJICog ZnVuY3Rpb25zIGJlY2F1c2UgdGhlICdzdHJpY3QnIGZsYWcgaXMgbm90IGNvcGllZCBieQorCQkJ ICogYmluZCgpLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBjb3JyZWN0LCB0aGUgc3BlY2lmaWNh dGlvbgorCQkJICogb25seSByZWZlcnMgdG8gdGhlIHZhbHVlIGJlaW5nIGEgInN0cmljdCBtb2Rl IEZ1bmN0aW9uCisJCQkgKiBvYmplY3QiIHdoaWNoIGlzIGFtYmlndW91cy4KKwkJCSAqLworCQkJ RFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX0JPVU5ERlVOQyhvcmlnKSk7CisKKwkJCWggPSBk dWtfZ2V0X2hvYmplY3QodGhyLCAtMSk7ICAvKiBOVUxMIGlmIG5vdCBhbiBvYmplY3QgKi8KKwkJ CWlmIChoICYmCisJCQkgICAgRFVLX0hPQkpFQ1RfSVNfRlVOQ1RJT04oaCkgJiYKKwkJCSAgICBE VUtfSE9CSkVDVF9IQVNfU1RSSUNUKGgpKSB7CisJCQkJLyogWFhYOiBzdWZmaWNpZW50IHRvIGNo ZWNrICdzdHJpY3QnLCBhc3NlcnQgZm9yICdpcyBmdW5jdGlvbicgKi8KKwkJCQlEVUtfRVJST1Jf VFlQRSh0aHIsIERVS19TVFJfU1RSSUNUX0NBTExFUl9SRUFEKTsKKwkJCQlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuIDA7KTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAgIC8qICFEVUtfVVNFX05PTlNU RF9GVU5DX0NBTExFUl9QUk9QRVJUWSAqLworCisJZHVrX3JlbW92ZV9tMih0aHIpOyAgLyogW2tl eSByZXN1bHRdIC0+IFtyZXN1bHRdICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiLT4gJSFU IChmb3VuZCkiLCAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJcmV0dXJu IDE7Cit9CisKKy8qCisgKiAgSEFTUFJPUDogRUNNQVNjcmlwdCBwcm9wZXJ0eSBleGlzdGVuY2Ug Y2hlY2sgKCJpbiIgb3BlcmF0b3IpLgorICoKKyAqICBJbnRlcmVzdGluZ2x5LCB0aGUgJ2luJyBv cGVyYXRvciBkb2VzIG5vdCBkbyBhbnkgY29lcmNpb24gb2YKKyAqICB0aGUgdGFyZ2V0IG9iamVj dC4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9oYXNwcm9wKGR1 a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dl9vYmosIGR1a190dmFsICp0dl9rZXkpIHsKKwlk dWtfdHZhbCB0dl9rZXlfY29weTsKKwlkdWtfaG9iamVjdCAqb2JqOworCWR1a19oc3RyaW5nICpr ZXk7CisJZHVrX3VpbnQzMl90IGFycl9pZHg7CisJZHVrX2Jvb2xfdCByYzsKKwlkdWtfcHJvcGRl c2MgZGVzYzsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJoYXNwcm9wOiB0aHI9JXAsIG9iaj0l cCwga2V5PSVwIChvYmogLT4gJSFULCBrZXkgLT4gJSFUKSIsCisJICAgICAgICAgICAgICAgICAg ICAgKHZvaWQgKikgdGhyLCAodm9pZCAqKSB0dl9vYmosICh2b2lkICopIHR2X2tleSwKKwkgICAg ICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgdHZfb2JqLCAoZHVrX3R2YWwgKikgdHZfa2V5 KSk7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVhcCAh PSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X29iaiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X2tl eSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUX1ZBTFNUQUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFD S19TUEFDRSk7CisKKwlEVUtfVFZBTF9TRVRfVFZBTCgmdHZfa2V5X2NvcHksIHR2X2tleSk7CisJ dHZfa2V5ID0gJnR2X2tleV9jb3B5OworCisJLyoKKwkgKiAgVGhlICdpbicgb3BlcmF0b3IgcmVx dWlyZXMgYW4gb2JqZWN0IGFzIGl0cyByaWdodCBoYW5kIHNpZGUsCisJICogIHRocm93aW5nIGEg VHlwZUVycm9yIHVuY29uZGl0aW9uYWxseSBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZS4KKwkgKgor CSAqICBIb3dldmVyLCBsaWdodGZ1bmNzIG5lZWQgdG8gYmVoYXZlIGxpa2UgZnVsbHkgZmxlZGdl ZCBvYmplY3RzCisJICogIGhlcmUgdG8gYmUgbWF4aW1hbGx5IHRyYW5zcGFyZW50LCBzbyB3ZSBu ZWVkIHRvIGhhbmRsZSB0aGVtCisJICogIGhlcmUuICBTYW1lIGdvZXMgZm9yIHBsYWluIGJ1ZmZl cnMgd2hpY2ggYmVoYXZlIGxpa2UgQXJyYXlCdWZmZXJzLgorCSAqLworCisJLyogWFhYOiBSZWZh Y3RvciBrZXkgY29lcmNpb24gc28gdGhhdCBpdCdzIG9ubHkgY2FsbGVkIG9uY2UuICBJdCBjYW4n dAorCSAqIGJlIHRyaXZpYWxseSBsaWZ0ZWQgaGVyZSBiZWNhdXNlIHRoZSBvYmplY3QgbXVzdCBi ZSB0eXBlIGNoZWNrZWQKKwkgKiBmaXJzdC4KKwkgKi8KKworCWlmIChEVUtfVFZBTF9JU19PQkpF Q1QodHZfb2JqKSkgeworCQlvYmogPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X29iaik7CisJCURV S19BU1NFUlQob2JqICE9IE5VTEwpOworCisJCWFycl9pZHggPSBkdWtfX3B1c2hfdHZhbF90b19w cm9wZXJ0eV9rZXkodGhyLCB0dl9rZXksICZrZXkpOworCX0gZWxzZSBpZiAoRFVLX1RWQUxfSVNf QlVGRkVSKHR2X29iaikpIHsKKwkJYXJyX2lkeCA9IGR1a19fcHVzaF90dmFsX3RvX3Byb3BlcnR5 X2tleSh0aHIsIHR2X2tleSwgJmtleSk7CisJCWlmIChkdWtfX2tleV9pc19wbGFpbl9idWZfb3du cHJvcCh0aHIsIERVS19UVkFMX0dFVF9CVUZGRVIodHZfb2JqKSwga2V5LCBhcnJfaWR4KSkgewor CQkJcmMgPSAxOworCQkJZ290byBwb3BfYW5kX3JldHVybjsKKwkJfQorCQlvYmogPSB0aHItPmJ1 aWx0aW5zW0RVS19CSURYX1VJTlQ4QVJSQVlfUFJPVE9UWVBFXTsKKwl9IGVsc2UgaWYgKERVS19U VkFMX0lTX0xJR0hURlVOQyh0dl9vYmopKSB7CisJCWFycl9pZHggPSBkdWtfX3B1c2hfdHZhbF90 b19wcm9wZXJ0eV9rZXkodGhyLCB0dl9rZXksICZrZXkpOworCisJCS8qIElmIG5vdCBmb3VuZCwg cmVzdW1lIGV4aXN0ZW5jZSBjaGVjayBmcm9tICVOYXRpdmVGdW5jdGlvblByb3RvdHlwZSUuCisJ CSAqIFdlIGNhbiBqdXN0IHN1YnN0aXR1dGUgdGhlIHZhbHVlIGluIHRoaXMgY2FzZTsgbm90aGlu ZyB3aWxsCisJCSAqIG5lZWQgdGhlIG9yaWdpbmFsIGJhc2UgdmFsdWUgKGFzIHdvdWxkIGJlIHRo ZSBjYXNlIHdpdGggZS5nLgorCQkgKiBzZXR0ZXJzL2dldHRlcnMuCisJCSAqLworCQlvYmogPSB0 aHItPmJ1aWx0aW5zW0RVS19CSURYX05BVElWRV9GVU5DVElPTl9QUk9UT1RZUEVdOworCX0gZWxz ZSB7CisJCS8qIE5vdGU6IHVuY29uZGl0aW9uYWwgdGhyb3cgKi8KKwkJRFVLX0RERChEVUtfRERE UFJJTlQoImJhc2Ugb2JqZWN0IGlzIG5vdCBhbiBvYmplY3QgLT4gcmVqZWN0IikpOworCQlEVUtf RVJST1JfVFlQRSh0aHIsIERVS19TVFJfSU5WQUxJRF9CQVNFKTsKKwkJRFVLX1dPX05PUkVUVVJO KHJldHVybiAwOyk7CisJfQorCisJLyogWFhYOiBmYXN0IHBhdGggZm9yIGFycmF5cz8gKi8KKwor CURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURV S19VTlJFRihhcnJfaWR4KTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJaWYg KERVS19VTkxJS0VMWShEVUtfSE9CSkVDVF9JU19QUk9YWShvYmopKSkgeworCQlkdWtfaG9iamVj dCAqaF90YXJnZXQ7CisJCWR1a19ib29sX3QgdG1wX2Jvb2w7CisKKwkJLyogWFhYOiB0aGUga2V5 IGluICdrZXkgaW4gb2JqJyBpcyBzdHJpbmcgY29lcmNlZCBiZWZvcmUgd2UncmUgY2FsbGVkCisJ CSAqICh3aGljaCBpcyB0aGUgcmVxdWlyZWQgYmVoYXZpb3IgaW4gRTUvRTUuMS9FNikgc28gdGhl IGtleSBpcyBhIHN0cmluZworCQkgKiBoZXJlIGFscmVhZHkuCisJCSAqLworCisJCWlmIChkdWtf X3Byb3h5X2NoZWNrX3Byb3AodGhyLCBvYmosIERVS19TVFJJRFhfSEFTLCB0dl9rZXksICZoX3Rh cmdldCkpIHsKKwkJCS8qIFsgLi4uIGtleSB0cmFwIGhhbmRsZXIgXSAqLworCQkJRFVLX0RERChE VUtfREREUFJJTlQoIi0+IHByb3h5IG9iamVjdCAnaGFzJyBmb3Iga2V5ICUhVCIsIChkdWtfdHZh bCAqKSB0dl9rZXkpKTsKKwkJCWR1a19wdXNoX2hvYmplY3QodGhyLCBoX3RhcmdldCk7ICAvKiB0 YXJnZXQgKi8KKwkJCWR1a19wdXNoX3R2YWwodGhyLCB0dl9rZXkpOyAgICAgICAvKiBQICovCisJ CQlkdWtfY2FsbF9tZXRob2QodGhyLCAyIC8qbmFyZ3MqLyk7CisJCQl0bXBfYm9vbCA9IGR1a190 b19ib29sZWFuX3RvcF9wb3AodGhyKTsKKwkJCWlmICghdG1wX2Jvb2wpIHsKKwkJCQkvKiBUYXJn ZXQgb2JqZWN0IG11c3QgYmUgY2hlY2tlZCBmb3IgYSBjb25mbGljdGluZworCQkJCSAqIG5vbi1j b25maWd1cmFibGUgcHJvcGVydHkuCisJCQkJICovCisKKwkJCQlpZiAoZHVrX19nZXRfb3duX3By b3BkZXNjX3Jhdyh0aHIsIGhfdGFyZ2V0LCBrZXksIGFycl9pZHgsICZkZXNjLCAwIC8qZmxhZ3Mq LykpIHsgIC8qIGRvbid0IHB1c2ggdmFsdWUgKi8KKwkJCQkJRFVLX0RERChEVUtfREREUFJJTlQo InByb3h5ICdoYXMnOiB0YXJnZXQgaGFzIG1hdGNoaW5nIHByb3BlcnR5ICUhTywgY2hlY2sgZm9y ICIKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgImNvbmZsaWN0aW5nIHByb3BlcnR5OyBkZXNj LmZsYWdzPTB4JTA4bHgsICIKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgImRlc2MuZ2V0PSVw LCBkZXNjLnNldD0lcCIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAq KSBrZXksICh1bnNpZ25lZCBsb25nKSBkZXNjLmZsYWdzLAorCQkJCQkgICAgICAgICAgICAgICAg ICAgICAodm9pZCAqKSBkZXNjLmdldCwgKHZvaWQgKikgZGVzYy5zZXQpKTsKKwkJCQkJLyogWFhY OiBFeHRlbnNpYmlsaXR5IGNoZWNrIGZvciB0YXJnZXQgdXNlcyBJc0V4dGVuc2libGUoKS4gIElm IHdlCisJCQkJCSAqIGltcGxlbWVudGVkIHRoZSBpc0V4dGVuc2libGUgdHJhcCBhbmQgZGlkbid0 IHJlamVjdCBwcm94aWVzIGFzCisJCQkJCSAqIHByb3h5IHRhcmdldHMsIGl0IHNob3VsZCBiZSBy ZXNwZWN0ZWQgaGVyZS4KKwkJCQkJICovCisJCQkJCWlmICghKChkZXNjLmZsYWdzICYgRFVLX1BS T1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKSAmJiAgLyogcHJvcGVydHkgaXMgY29uZmlndXJhYmxl IGFuZCAqLworCQkJCQkgICAgICBEVUtfSE9CSkVDVF9IQVNfRVhURU5TSUJMRShoX3RhcmdldCkp KSB7ICAgICAgICAgIC8qIC4uLiB0YXJnZXQgaXMgZXh0ZW5zaWJsZSAqLworCQkJCQkJRFVLX0VS Uk9SX1RZUEUodGhyLCBEVUtfU1RSX1BST1hZX1JFSkVDVEVEKTsKKwkJCQkJCURVS19XT19OT1JF VFVSTihyZXR1cm4gMDspOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlkdWtfcG9wX3Vuc2Fm ZSh0aHIpOyAgLyogWyBrZXkgXSAtPiBbXSAqLworCQkJcmV0dXJuIHRtcF9ib29sOworCQl9CisK KwkJb2JqID0gaF90YXJnZXQ7ICAvKiByZXN1bWUgY2hlY2sgZnJvbSBwcm94eSB0YXJnZXQgKi8K Kwl9CisjZW5kaWYgIC8qIERVS19VU0VfRVM2X1BST1hZICovCisKKwkvKiBYWFg6IGlubGluZSBp bnRvIGEgcHJvdG90eXBlIHdhbGtpbmcgbG9vcD8gKi8KKworCXJjID0gZHVrX19nZXRfcHJvcGRl c2ModGhyLCBvYmosIGtleSwgJmRlc2MsIDAgLypmbGFncyovKTsgIC8qIGRvbid0IHB1c2ggdmFs dWUgKi8KKwkvKiBmYWxsIHRocm91Z2ggKi8KKworIHBvcF9hbmRfcmV0dXJuOgorCWR1a19wb3Bf dW5zYWZlKHRocik7ICAvKiBbIGtleSBdIC0+IFtdICovCisJcmV0dXJuIHJjOworfQorCisvKgor ICogIEhBU1BST1AgdmFyaWFudCB1c2VkIGludGVybmFsbHkuCisgKgorICogIFRoaXMgcHJpbWl0 aXZlIG11c3QgbmV2ZXIgdGhyb3cgYW4gZXJyb3IsIGNhbGxlcnMgcmVseSBvbiB0aGlzLgorICog IEluIHBhcnRpY3VsYXIsIGRvbid0IHRocm93IGFuIGVycm9yIGZvciBwcm90b3R5cGUgbG9vcHM7 IGluc3RlYWQsCisgKiAgcHJldGVuZCBsaWtlIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IGlm IGEgcHJvdG90eXBlIHNhbml0eSBsaW1pdAorICogIGlzIHJlYWNoZWQuCisgKgorICogIERvZXMg bm90IGltcGxlbWVudCBwcm94eSBiZWhhdmlvcjogaWYgYXBwbGllZCB0byBhIHByb3h5IG9iamVj dCwKKyAqICByZXR1cm5zIGtleSBleGlzdGVuY2Ugb24gdGhlIHByb3h5IG9iamVjdCBpdHNlbGYu CisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2hvYmplY3RfaGFzcHJvcF9yYXco ZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2hzdHJpbmcgKmtleSkgewor CWR1a19wcm9wZGVzYyBkdW1teTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19B U1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURV S19BU1NFUlQoa2V5ICE9IE5VTEwpOworCisJRFVLX0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIs IERVS19fVkFMU1RBQ0tfU1BBQ0UpOworCisJcmV0dXJuIGR1a19fZ2V0X3Byb3BkZXNjKHRociwg b2JqLCBrZXksICZkdW1teSwgRFVLX0dFVERFU0NfRkxBR19JR05PUkVfUFJPVE9MT09QKTsgIC8q IGRvbid0IHB1c2ggdmFsdWUgKi8KK30KKworLyoKKyAqICBIZWxwZXI6IGhhbmRsZSBBcnJheSBv YmplY3QgJ2xlbmd0aCcgd3JpdGUgd2hpY2ggYXV0b21hdGljYWxseQorICogIGRlbGV0ZXMgcHJv cGVydGllcywgc2VlIEU1IFNlY3Rpb24gMTUuNC41LjEsIHN0ZXAgMy4gIFRoaXMgaXMKKyAqICBx dWl0ZSB0cmlja3kgdG8gZ2V0IHJpZ2h0LgorICoKKyAqICBVc2VkIGJ5IGR1a19ob2JqZWN0X3B1 dHByb3AoKS4KKyAqLworCisvKiBDb2VyY2UgYSBuZXcgLmxlbmd0aCBjYW5kaWRhdGUgdG8gYSBu dW1iZXIgYW5kIGNoZWNrIHRoYXQgaXQncyBhIHZhbGlkCisgKiAubGVuZ3RoLgorICovCitEVUtf TE9DQUwgZHVrX3VpbnQzMl90IGR1a19fdG9fbmV3X2FycmF5X2xlbmd0aF9jaGVja2VkKGR1a19o dGhyZWFkICp0aHIsIGR1a190dmFsICp0dikgeworCWR1a191aW50MzJfdCByZXM7CisJZHVrX2Rv dWJsZV90IGQ7CisKKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorI2lmIGRlZmlu ZWQoRFVLX1VTRV9GQVNUSU5UKQorCS8qIFdoZW4gZmFzdGludHMgYXJlIGVuYWJsZWQsIHRoZSBt b3N0IGludGVyZXN0aW5nIGNhc2UgaXMgYXNzaWduaW5nCisJICogYSBmYXN0aW50IHRvIC5sZW5n dGggKGUuZy4gYXJyLmxlbmd0aCA9IDApLgorCSAqLworCWlmIChEVUtfVFZBTF9JU19GQVNUSU5U KHR2KSkgeworCQkvKiBWZXJ5IGNvbW1vbiBjYXNlLiAqLworCQlkdWtfaW50NjRfdCBmaTsKKwkJ ZmkgPSBEVUtfVFZBTF9HRVRfRkFTVElOVCh0dik7CisJCWlmIChmaSA8IDAgfHwgZmkgPiBEVUtf STY0X0NPTlNUQU5UKDB4ZmZmZmZmZmYpKSB7CisJCQlnb3RvIGZhaWxfcmFuZ2U7CisJCX0KKwkJ cmV0dXJuIChkdWtfdWludDMyX3QpIGZpOworCX0KKyNlbHNlICAvKiBEVUtfVVNFX0ZBU1RJTlQg Ki8KKwkvKiBXaGVuIGZhc3RpbnRzIGFyZSBub3QgZW5hYmxlZCwgdGhlIG1vc3QgaW50ZXJlc3Rp bmcgY2FzZSBpcyBhbnkKKwkgKiBudW1iZXIuCisJICovCisJaWYgKERVS19UVkFMX0lTX0RPVUJM RSh0dikpIHsKKwkJZCA9IERVS19UVkFMX0dFVF9OVU1CRVIodHYpOworCX0KKyNlbmRpZiAgLyog RFVLX1VTRV9GQVNUSU5UICovCisJZWxzZQorI2VuZGlmICAvKiAhRFVLX1VTRV9QUkVGRVJfU0la RSAqLworCXsKKwkJLyogSW4gYWxsIG90aGVyIGNhc2VzLCBhbmQgd2hlbiBkb2luZyBhIHNpemUg b3B0aW1pemVkIGJ1aWxkLAorCQkgKiBmYWxsIGJhY2sgdG8gdGhlIGNvbXByZWhlbnNpdmUgaGFu ZGxlci4KKwkJICovCisJCWQgPSBkdWtfanNfdG9udW1iZXIodGhyLCB0dik7CisJfQorCisJLyog UmVmdXNlIHRvIHVwZGF0ZSBhbiBBcnJheSdzICdsZW5ndGgnIHRvIGEgdmFsdWUgb3V0c2lkZSB0 aGUKKwkgKiAzMi1iaXQgcmFuZ2UuICBOZWdhdGl2ZSB6ZXJvIGlzIGFjY2VwdGVkIGFzIHplcm8u CisJICovCisJcmVzID0gZHVrX2RvdWJsZV90b191aW50MzJfdChkKTsKKwlpZiAoKGR1a19kb3Vi bGVfdCkgcmVzICE9IGQpIHsKKwkJZ290byBmYWlsX3JhbmdlOworCX0KKworCXJldHVybiByZXM7 CisKKyBmYWlsX3JhbmdlOgorCURVS19FUlJPUl9SQU5HRSh0aHIsIERVS19TVFJfSU5WQUxJRF9B UlJBWV9MRU5HVEgpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworfQorCisvKiBEZWxl dGUgZWxlbWVudHMgcmVxdWlyZWQgYnkgYSBzbWFsbGVyIGxlbmd0aCwgdGFraW5nIGludG8gYWNj b3VudAorICogcG90ZW50aWFsbHkgbm9uLWNvbmZpZ3VyYWJsZSBlbGVtZW50cy4gIFJldHVybnMg bm9uLXplcm8gaWYgYWxsCisgKiBlbGVtZW50cyBjb3VsZCBiZSBkZWxldGVkLCBhbmQgemVybyBp ZiBhbGwgb3Igc29tZSBlbGVtZW50cyBjb3VsZAorICogbm90IGJlIGRlbGV0ZWQuICBBbHNvIHdy aXRlcyBmaW5hbCAidGFyZ2V0IGxlbmd0aCIgdG8gJ291dF9yZXN1bHRfbGVuJy4KKyAqIFRoaXMg aXMgdGhlIGxlbmd0aCB2YWx1ZSB0aGF0IHNob3VsZCBnbyBpbnRvIHRoZSAnbGVuZ3RoJyBwcm9w ZXJ0eQorICogKG11c3QgYmUgc2V0IGJ5IHRoZSBjYWxsZXIpLiAgTmV2ZXIgdGhyb3dzIGFuIGVy cm9yLgorICovCitEVUtfTE9DQUwKK2R1a19ib29sX3QgZHVrX19oYW5kbGVfcHV0X2FycmF5X2xl bmd0aF9zbWFsbGVyKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VpbnQzMl90IG9sZF9sZW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfdWludDMy X3QgbmV3X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGR1a19ib29sX3QgZm9yY2VfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1a191aW50MzJfdCAqb3V0X3Jlc3VsdF9sZW4pIHsKKwlkdWtf dWludDMyX3QgdGFyZ2V0X2xlbjsKKwlkdWtfdWludF9mYXN0MzJfdCBpOworCWR1a191aW50MzJf dCBhcnJfaWR4OworCWR1a19oc3RyaW5nICprZXk7CisJZHVrX3R2YWwgKnR2OworCWR1a19ib29s X3QgcmM7CisKKwlEVUtfREREKERVS19ERERQUklOVCgibmV3IGFycmF5IGxlbmd0aCBzbWFsbGVy IHRoYW4gb2xkICglbGQgLT4gJWxkKSwgIgorCSAgICAgICAgICAgICAgICAgICAgICJwcm9iYWJs eSBuZWVkIHRvIHJlbW92ZSBlbGVtZW50cyIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IG9sZF9sZW4sIChsb25nKSBuZXdfbGVuKSk7CisKKwkvKgorCSAqICBOZXcgbGVuZ3RoIGlzIHNt YWxsZXIgdGhhbiBvbGQgbGVuZ3RoLCBuZWVkIHRvIGRlbGV0ZSBwcm9wZXJ0aWVzIGFib3ZlCisJ ICogIHRoZSBuZXcgbGVuZ3RoLgorCSAqCisJICogIElmIGFycmF5IHBhcnQgZXhpc3RzLCB0aGlz IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYXJyYXkgZW50cmllcyBjYW5ub3QKKwkgKiAgYmUgbm9uLWNv bmZpZ3VyYWJsZSBzbyB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gd29yay4KKwkgKgorCSAqICBJZiBh cnJheSBwYXJ0IGRvZXMgbm90IGV4aXN0LCBhcnJheS1pbmRleGVkIHZhbHVlcyBhcmUgc2NhdHRl cmVkCisJICogIGluIHRoZSBlbnRyeSBwYXJ0LCBhbmQgc29tZSBtYXkgbm90IGJlIGNvbmZpZ3Vy YWJsZSAocHJldmVudGluZyBsZW5ndGgKKwkgKiAgZnJvbSBiZWNvbWluZyBsb3dlciB0aGFuIHRo ZWlyIGluZGV4ICsgMSkuICBUbyBoYW5kbGUgdGhlIGFsZ29yaXRobQorCSAqICBpbiBFNSBTZWN0 aW9uIDE1LjQuNS4xLCBzdGVwIGwgY29ycmVjdGx5LCB3ZSBzY2FuIHRoZSBlbnRpcmUgcHJvcGVy dHkKKwkgKiAgc2V0IHR3aWNlLgorCSAqLworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJ RFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisJRFVLX0FTU0VSVChuZXdfbGVuIDwgb2xkX2xlbik7 CisJRFVLX0FTU0VSVChvdXRfcmVzdWx0X2xlbiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUX1ZBTFNU QUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFDS19TUEFDRSk7CisKKwlEVUtfQVNTRVJUKERVS19I T0JKRUNUX0hBU19FWE9USUNfQVJSQVkob2JqKSk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9J U19BUlJBWShvYmopKTsKKworCWlmIChEVUtfSE9CSkVDVF9IQVNfQVJSQVlfUEFSVChvYmopKSB7 CisJCS8qCisJCSAqICBBbGwgZGVmaW5lZCBhcnJheS1pbmRleGVkIHByb3BlcnRpZXMgYXJlIGlu IHRoZSBhcnJheSBwYXJ0CisJCSAqICAod2UgYXNzdW1lIHRoZSBhcnJheSBwYXJ0IGlzIGNvbXBy ZWhlbnNpdmUpLCBhbmQgYWxsIGFycmF5CisJCSAqICBlbnRyaWVzIGFyZSB3cml0YWJsZSwgY29u ZmlndXJhYmxlLCBhbmQgZW51bWVyYWJsZS4gIFRodXMsCisJCSAqICBub3RoaW5nIGNhbiBwcmV2 ZW50IGFycmF5IGVudHJpZXMgZnJvbSBiZWluZyBkZWxldGVkLgorCQkgKi8KKworCQlEVUtfRERE KERVS19ERERQUklOVCgiaGF2ZSBhcnJheSBwYXJ0LCBlYXN5IGNhc2UiKSk7CisKKwkJaWYgKG9s ZF9sZW4gPCBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob2JqKSkgeworCQkJLyogWFhYOiBhc3NlcnRp b24gdGhhdCBlbnRyaWVzID49IG9sZF9sZW4gYXJlIGFscmVhZHkgdW51c2VkICovCisJCQlpID0g b2xkX2xlbjsKKwkJfSBlbHNlIHsKKwkJCWkgPSBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob2JqKTsK KwkJfQorCQlEVUtfQVNTRVJUKGkgPD0gRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaikpOworCisJ CXdoaWxlIChpID4gbmV3X2xlbikgeworCQkJaS0tOworCQkJdHYgPSBEVUtfSE9CSkVDVF9BX0dF VF9WQUxVRV9QVFIodGhyLT5oZWFwLCBvYmosIGkpOworCQkJRFVLX1RWQUxfU0VUX1VOVVNFRF9V UERSRUYodGhyLCB0dik7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJfQorCisJCSpvdXRfcmVzdWx0 X2xlbiA9IG5ld19sZW47CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qCisJCSAqICBFbnRy aWVzIHBhcnQgaXMgYSBiaXQgbW9yZSBjb21wbGV4LgorCQkgKi8KKworCQkvKiBTdGFnZSAxOiBm aW5kIGhpZ2hlc3QgcHJldmVudGluZyBub24tY29uZmlndXJhYmxlIGVudHJ5IChpZiBhbnkpLgor CQkgKiBXaGVuIGZvcmNpbmcsIGlnbm9yZSBub24tY29uZmlndXJhYmlsaXR5LgorCQkgKi8KKwor CQlEVUtfREREKERVS19ERERQUklOVCgibm8gYXJyYXkgcGFydCwgc2xvdyBjYXNlIikpOworCisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJhcnJheSBsZW5ndGggd3JpdGUsIG5vIGFycmF5IHBhcnQs IHN0YWdlIDE6IGZpbmQgdGFyZ2V0X2xlbiAiCisJCSAgICAgICAgICAgICAgICAgICAgICIoaGln aGVzdCBwcmV2ZW50aW5nIG5vbi1jb25maWd1cmFibGUgZW50cnkgKGlmIGFueSkpIikpOworCisJ CXRhcmdldF9sZW4gPSBuZXdfbGVuOworCQlpZiAoZm9yY2VfZmxhZykgeworCQkJRFVLX0RERChE VUtfREREUFJJTlQoImFycmF5IGxlbmd0aCB3cml0ZSwgbm8gYXJyYXkgcGFydDsgZm9yY2UgZmxh ZyAtPiBza2lwIHN0YWdlIDEiKSk7CisJCQlnb3RvIHNraXBfc3RhZ2UxOworCQl9CisJCWZvciAo aSA9IDA7IGkgPCBEVUtfSE9CSkVDVF9HRVRfRU5FWFQob2JqKTsgaSsrKSB7CisJCQlrZXkgPSBE VUtfSE9CSkVDVF9FX0dFVF9LRVkodGhyLT5oZWFwLCBvYmosIGkpOworCQkJaWYgKCFrZXkpIHsK KwkJCQlEVUtfREREKERVS19ERERQUklOVCgic2tpcCBlbnRyeSBpbmRleCAlbGQ6IG51bGwga2V5 IiwgKGxvbmcpIGkpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghRFVLX0hTVFJJTkdf SEFTX0FSUklEWChrZXkpKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInNraXAgZW50cnkg aW5kZXggJWxkOiBrZXkgbm90IGFuIGFycmF5IGluZGV4IiwgKGxvbmcpIGkpKTsKKwkJCQljb250 aW51ZTsKKwkJCX0KKworCQkJRFVLX0FTU0VSVChEVUtfSFNUUklOR19IQVNfQVJSSURYKGtleSkp OyAgLyogWFhYOiBtYWNybyBjaGVja3MgZm9yIGFycmF5IGluZGV4IGZsYWcsIHdoaWNoIGlzIHVu bmVjZXNzYXJ5IGhlcmUgKi8KKwkJCWFycl9pZHggPSBEVUtfSFNUUklOR19HRVRfQVJSSURYX1NM T1coa2V5KTsKKwkJCURVS19BU1NFUlQoYXJyX2lkeCAhPSBEVUtfX05PX0FSUkFZX0lOREVYKTsK KwkJCURVS19BU1NFUlQoYXJyX2lkeCA8IG9sZF9sZW4pOyAgLyogY29uc2lzdGVuY3kgcmVxdWly ZXMgdGhpcyAqLworCisJCQlpZiAoYXJyX2lkeCA8IG5ld19sZW4pIHsKKwkJCQlEVUtfREREKERV S19ERERQUklOVCgic2tpcCBlbnRyeSBpbmRleCAlbGQ6IGtleSBpcyBhcnJheSBpbmRleCAlbGQs IGJlbG93IG5ld19sZW4iLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpLCAobG9u ZykgYXJyX2lkeCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKERVS19IT0JKRUNUX0Vf U0xPVF9JU19DT05GSUdVUkFCTEUodGhyLT5oZWFwLCBvYmosIGkpKSB7CisJCQkJRFVLX0RERChE VUtfREREUFJJTlQoInNraXAgZW50cnkgaW5kZXggJWxkOiBrZXkgaXMgYSByZWxldmFudCBhcnJh eSBpbmRleCAlbGQsIGJ1dCBjb25maWd1cmFibGUiLAorCQkJCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSBpLCAobG9uZykgYXJyX2lkeCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkv KiByZWxldmFudCBhcnJheSBpbmRleCBpcyBub24tY29uZmlndXJhYmxlLCBibG9ja3Mgd3JpdGUg Ki8KKwkJCWlmIChhcnJfaWR4ID49IHRhcmdldF9sZW4pIHsKKwkJCQlEVUtfREREKERVS19ERERQ UklOVCgiZW50cnkgYXQgaW5kZXggJWxkIGhhcyBhcnJfaWR4ICVsZCwgaXMgbm90IGNvbmZpZ3Vy YWJsZSwgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGUgdGFyZ2V0X2xlbiAlbGQg LT4gJWxkIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcpIGFycl9p ZHgsIChsb25nKSB0YXJnZXRfbGVuLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSAo YXJyX2lkeCArIDEpKSk7CisJCQkJdGFyZ2V0X2xlbiA9IGFycl9pZHggKyAxOworCQkJfQorCQl9 CisJIHNraXBfc3RhZ2UxOgorCisJCS8qIHN0YWdlIDI6IGRlbGV0ZSBjb25maWd1cmFibGUgZW50 cmllcyBhYm92ZSB0YXJnZXQgbGVuZ3RoICovCisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIm9s ZF9sZW49JWxkLCBuZXdfbGVuPSVsZCwgdGFyZ2V0X2xlbj0lbGQiLAorCQkgICAgICAgICAgICAg ICAgICAgICAobG9uZykgb2xkX2xlbiwgKGxvbmcpIG5ld19sZW4sIChsb25nKSB0YXJnZXRfbGVu KSk7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImFycmF5IGxlbmd0aCB3cml0ZSwgbm8gYXJy YXkgcGFydCwgc3RhZ2UgMjogcmVtb3ZlICIKKwkJICAgICAgICAgICAgICAgICAgICAgImVudHJp ZXMgPj0gdGFyZ2V0X2xlbiIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgRFVLX0hPQkpFQ1RfR0VU X0VORVhUKG9iaik7IGkrKykgeworCQkJa2V5ID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKHRoci0+ aGVhcCwgb2JqLCBpKTsKKwkJCWlmICgha2V5KSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQo InNraXAgZW50cnkgaW5kZXggJWxkOiBudWxsIGtleSIsIChsb25nKSBpKSk7CisJCQkJY29udGlu dWU7CisJCQl9CisJCQlpZiAoIURVS19IU1RSSU5HX0hBU19BUlJJRFgoa2V5KSkgeworCQkJCURV S19EREQoRFVLX0RERFBSSU5UKCJza2lwIGVudHJ5IGluZGV4ICVsZDoga2V5IG5vdCBhbiBhcnJh eSBpbmRleCIsIChsb25nKSBpKSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCURVS19BU1NF UlQoRFVLX0hTVFJJTkdfSEFTX0FSUklEWChrZXkpKTsgIC8qIFhYWDogbWFjcm8gY2hlY2tzIGZv ciBhcnJheSBpbmRleCBmbGFnLCB3aGljaCBpcyB1bm5lY2Vzc2FyeSBoZXJlICovCisJCQlhcnJf aWR4ID0gRFVLX0hTVFJJTkdfR0VUX0FSUklEWF9TTE9XKGtleSk7CisJCQlEVUtfQVNTRVJUKGFy cl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCk7CisJCQlEVUtfQVNTRVJUKGFycl9pZHggPCBv bGRfbGVuKTsgIC8qIGNvbnNpc3RlbmN5IHJlcXVpcmVzIHRoaXMgKi8KKworCQkJaWYgKGFycl9p ZHggPCB0YXJnZXRfbGVuKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInNraXAgZW50cnkg aW5kZXggJWxkOiBrZXkgaXMgYXJyYXkgaW5kZXggJWxkLCBiZWxvdyB0YXJnZXRfbGVuIiwKKwkJ CQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcpIGFycl9pZHgpKTsKKwkJCQlj b250aW51ZTsKKwkJCX0KKwkJCURVS19BU1NFUlQoZm9yY2VfZmxhZyB8fCBEVUtfSE9CSkVDVF9F X1NMT1RfSVNfQ09ORklHVVJBQkxFKHRoci0+aGVhcCwgb2JqLCBpKSk7ICAvKiBzdGFnZSAxIGd1 YXJhbnRlZXMgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImRlbGV0ZSBlbnRyeSBpbmRl eCAlbGQ6IGtleSBpcyBhcnJheSBpbmRleCAlbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIGksIChsb25nKSBhcnJfaWR4KSk7CisKKwkJCS8qCisJCQkgKiAgU2xvdyBkZWxldGUs IGJ1dCB3ZSBkb24ndCBjYXJlIGFzIHdlJ3JlIGFscmVhZHkgaW4gYSB2ZXJ5IHNsb3cgcGF0aC4K KwkJCSAqICBUaGUgZGVsZXRlIGFsd2F5cyBzdWNjZWVkczoga2V5IGhhcyBubyBleG90aWMgYmVo YXZpb3IsIHByb3BlcnR5CisJCQkgKiAgaXMgY29uZmlndXJhYmxlLCBhbmQgbm8gcmVzaXplIG9j Y3Vycy4KKwkJCSAqLworCQkJcmMgPSBkdWtfaG9iamVjdF9kZWxwcm9wX3Jhdyh0aHIsIG9iaiwg a2V5LCBmb3JjZV9mbGFnID8gRFVLX0RFTFBST1BfRkxBR19GT1JDRSA6IDApOworCQkJRFVLX1VO UkVGKHJjKTsKKwkJCURVS19BU1NFUlQocmMgIT0gMCk7CisJCX0KKworCQkvKiBzdGFnZSAzOiB1 cGRhdGUgbGVuZ3RoIChkb25lIGJ5IGNhbGxlciksIGRlY2lkZSByZXR1cm4gY29kZSAqLworCisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJhcnJheSBsZW5ndGggd3JpdGUsIG5vIGFycmF5IHBhcnQs IHN0YWdlIDM6IHVwZGF0ZSBsZW5ndGggKGRvbmUgYnkgY2FsbGVyKSIpKTsKKworCQkqb3V0X3Jl c3VsdF9sZW4gPSB0YXJnZXRfbGVuOworCisJCWlmICh0YXJnZXRfbGVuID09IG5ld19sZW4pIHsK KwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ0YXJnZXRfbGVuIG1hdGNoZXMgbmV3X2xlbiwgcmV0 dXJuIHN1Y2Nlc3MiKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlEVUtfREREKERVS19ERERQUklO VCgidGFyZ2V0X2xlbiBkb2VzIG5vdCBtYXRjaCBuZXdfbGVuIChzb21lIGVudHJ5IHByZXZlbnRl ZCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJmdWxsIGxlbmd0aCBhZGp1c3RtZW50KSwgcmV0 dXJuIGVycm9yIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlEVUtfVU5SRUFDSEFCTEUoKTsKK30K KworLyogWFhYOiBpcyB2YWxzdGFjayB0b3AgYmVzdCBwbGFjZSBmb3IgYXJndW1lbnQ/ICovCitE VUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2hhbmRsZV9wdXRfYXJyYXlfbGVuZ3RoKGR1a19odGhy ZWFkICp0aHIsIGR1a19ob2JqZWN0ICpvYmopIHsKKwlkdWtfaGFycmF5ICphOworCWR1a191aW50 MzJfdCBvbGRfbGVuOworCWR1a191aW50MzJfdCBuZXdfbGVuOworCWR1a191aW50MzJfdCByZXN1 bHRfbGVuOworCWR1a19ib29sX3QgcmM7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiaGFuZGxp bmcgYSBwdXQgb3BlcmF0aW9uIHRvIGFycmF5ICdsZW5ndGgnIGV4b3RpYyBwcm9wZXJ0eSwgIgor CSAgICAgICAgICAgICAgICAgICAgICJuZXcgdmFsOiAlIVQiLAorCSAgICAgICAgICAgICAgICAg ICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCURVS19BU1NFUlQo dGhyICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCisJRFVLX0FTU0VSVF9W QUxTVEFDS19TUEFDRSh0aHIsIERVS19fVkFMU1RBQ0tfU1BBQ0UpOworCisJRFVLX0FTU0VSVChE VUtfSE9CSkVDVF9IQVNfRVhPVElDX0FSUkFZKG9iaikpOworCURVS19BU1NFUlQoRFVLX0hPQkpF Q1RfSVNfQVJSQVkob2JqKSk7CisJYSA9IChkdWtfaGFycmF5ICopIG9iajsKKwlEVUtfQVNTRVJU X0hBUlJBWV9WQUxJRChhKTsKKworCURVS19BU1NFUlQoZHVrX2lzX3ZhbGlkX2luZGV4KHRociwg LTEpKTsKKworCS8qCisJICogIEdldCBvbGQgYW5kIG5ldyBsZW5ndGgKKwkgKi8KKworCW9sZF9s ZW4gPSBhLT5sZW5ndGg7CisJbmV3X2xlbiA9IGR1a19fdG9fbmV3X2FycmF5X2xlbmd0aF9jaGVj a2VkKHRociwgRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKSk7CisJRFVLX0RERChEVUtfRERE UFJJTlQoIm9sZF9sZW49JWxkLCBuZXdfbGVuPSVsZCIsIChsb25nKSBvbGRfbGVuLCAobG9uZykg bmV3X2xlbikpOworCisJLyoKKwkgKiAgV3JpdGFiaWxpdHkgY2hlY2sKKwkgKi8KKworCWlmIChE VUtfSEFSUkFZX0xFTkdUSF9OT05XUklUQUJMRShhKSkgeworCQlEVUtfREREKERVS19ERERQUklO VCgibGVuZ3RoIGlzIG5vdCB3cml0YWJsZSwgZmFpbCIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ LyoKKwkgKiAgTmV3IGxlbmd0aCBub3QgbG93ZXIgdGhhbiBvbGQgbGVuZ3RoID0+IG5vIGNoYW5n ZXMgbmVlZGVkCisJICogIChub3QgZXZlbiBhcnJheSBhbGxvY2F0aW9uKS4KKwkgKi8KKworCWlm IChuZXdfbGVuID49IG9sZF9sZW4pIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIm5ldyBsZW5n dGggaXMgc2FtZSBvciBoaWdoZXIgdGhhbiBvbGQgbGVuZ3RoLCBqdXN0IHVwZGF0ZSBsZW5ndGgs IG5vIGRlbGV0aW9ucyIpKTsKKwkJYS0+bGVuZ3RoID0gbmV3X2xlbjsKKwkJcmV0dXJuIDE7CisJ fQorCisJRFVLX0RERChEVUtfREREUFJJTlQoIm5ldyBsZW5ndGggaXMgbG93ZXIgdGhhbiBvbGQg bGVuZ3RoLCBwcm9iYWJseSBtdXN0IGRlbGV0ZSBlbnRyaWVzIikpOworCisJLyoKKwkgKiAgTmV3 IGxlbmd0aCBsb3dlciB0aGFuIG9sZCBsZW5ndGggPT4gZGVsZXRlIGVsZW1lbnRzLCB0aGVuCisJ ICogIHVwZGF0ZSBsZW5ndGguCisJICoKKwkgKiAgTm90ZTogZXZlbiB0aG91Z2ggYSBidW5jaCBv ZiBlbGVtZW50cyBoYXZlIGJlZW4gZGVsZXRlZCwgdGhlICdkZXNjJyBpcworCSAqICBzdGlsbCB2 YWxpZCBhcyBwcm9wZXJ0aWVzIGhhdmVuJ3QgYmVlbiByZXNpemVkIChhbmQgZW50cmllcyBjb21w YWN0ZWQpLgorCSAqLworCisJcmMgPSBkdWtfX2hhbmRsZV9wdXRfYXJyYXlfbGVuZ3RoX3NtYWxs ZXIodGhyLCBvYmosIG9sZF9sZW4sIG5ld19sZW4sIDAgLypmb3JjZV9mbGFnKi8sICZyZXN1bHRf bGVuKTsKKwlEVUtfQVNTRVJUKHJlc3VsdF9sZW4gPj0gbmV3X2xlbiAmJiByZXN1bHRfbGVuIDw9 IG9sZF9sZW4pOworCisJYS0+bGVuZ3RoID0gcmVzdWx0X2xlbjsKKworCS8qIFhYWDogc2hyaW5r IGFycmF5IGFsbG9jYXRpb24gb3IgZW50cmllcyBjb21wYWN0aW9uIGhlcmU/ICovCisKKwlyZXR1 cm4gcmM7Cit9CisKKy8qCisgKiAgUFVUUFJPUDogRUNNQVNjcmlwdCBwcm9wZXJ0eSB3cml0ZS4K KyAqCisgKiAgVW5saWtlIEVDTUFTY3JpcHQgcHJpbWl0aXZlIHdoaWNoIHJldHVybnMgbm90aGlu ZywgcmV0dXJucyAxIHRvIGluZGljYXRlCisgKiAgc3VjY2VzcyBhbmQgMCB0byBpbmRpY2F0ZSBm YWlsdXJlIChhc3N1bWluZyB0aHJvdyBpcyBub3Qgc2V0KS4KKyAqCisgKiAgVGhpcyBpcyBhbiBl eHRyZW1lbHkgdHJpY2t5IGZ1bmN0aW9uLiAgU29tZSBleGFtcGxlczoKKyAqCisgKiAgICAqIEN1 cnJlbnRseSBhIGRlY3JlZiBtYXkgdHJpZ2dlciBhIEdDLCB3aGljaCBtYXkgY29tcGFjdCBhbiBv YmplY3QncworICogICAgICBwcm9wZXJ0eSBhbGxvY2F0aW9uLiAgQ29uc2VxdWVudGx5LCBhbnkg ZW50cnkgaW5kaWNlcyAoZV9pZHgpIHdpbGwKKyAqICAgICAgYmUgcG90ZW50aWFsbHkgaW52YWxp ZGF0ZWQgYnkgYSBkZWNyZWYuCisgKgorICogICAgKiBFeG90aWMgYmVoYXZpb3JzIChzdHJpbmdz LCBhcnJheXMsIGFyZ3VtZW50cyBvYmplY3QpIHJlcXVpcmUsCisgKiAgICAgIGFtb25nIG90aGVy IHRoaW5nczoKKyAqCisgKiAgICAgIC0gUHJlcHJvY2Vzc2luZyBiZWZvcmUgYW5kIHBvc3Rwcm9j ZXNzaW5nIGFmdGVyIGFuIGFjdHVhbCBwcm9wZXJ0eQorICogICAgICAgIHdyaXRlLiAgRm9yIGV4 YW1wbGUsIGFycmF5IGluZGV4IHdyaXRlIHJlcXVpcmVzIHByZS1jaGVja2luZyB0aGUKKyAqICAg ICAgICBhcnJheSAnbGVuZ3RoJyBwcm9wZXJ0eSBmb3IgYWNjZXNzIGNvbnRyb2wsIGFuZCBtYXkg cmVxdWlyZSBhbgorICogICAgICAgIGFycmF5ICdsZW5ndGgnIHVwZGF0ZSBhZnRlciB0aGUgYWN0 dWFsIHdyaXRlIGhhcyBzdWNjZWVkZWQgKGJ1dAorICogICAgICAgIG5vdCBpZiBpdCBmYWlscyku CisgKgorICogICAgICAtIERlbGV0aW9uIG9mIG11bHRpcGxlIGVudHJpZXMsIGFzIGEgcmVzdWx0 IG9mIGFycmF5ICdsZW5ndGgnIHdyaXRlLgorICoKKyAqICAgICogSW5wdXQgdmFsdWVzIGFyZSB0 YWtlbiBhcyBwb2ludGVycyB3aGljaCBtYXkgcG9pbnQgdG8gdGhlIHZhbHN0YWNrLgorICogICAg ICBJZiB2YWxzdGFjayBpcyByZXNpemVkIGJlY2F1c2Ugb2YgdGhlIHB1dCAodGhpcyBtYXkgaGFw cGVuIGF0IGxlYXN0CisgKiAgICAgIHdoZW4gdGhlIGFycmF5IHBhcnQgaXMgYWJhbmRvbmVkKSwg dGhlIHBvaW50ZXJzIGNhbiBiZSBpbnZhbGlkYXRlZC4KKyAqICAgICAgKFdlIGN1cnJlbnRseSBt YWtlIGEgY29weSBvZiBhbGwgb2YgdGhlIGlucHV0IHZhbHVlcyB0byBhdm9pZCBpc3N1ZXMuKQor ICovCisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X3B1dHByb3AoZHVrX2h0 aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2X29iaiwgZHVrX3R2YWwgKnR2X2tleSwgZHVrX3R2YWwg KnR2X3ZhbCwgZHVrX2Jvb2xfdCB0aHJvd19mbGFnKSB7CisJZHVrX3R2YWwgdHZfb2JqX2NvcHk7 CisJZHVrX3R2YWwgdHZfa2V5X2NvcHk7CisJZHVrX3R2YWwgdHZfdmFsX2NvcHk7CisJZHVrX2hv YmplY3QgKm9yaWcgPSBOVUxMOyAgLyogTlVMTCBpZiB0dl9vYmogaXMgcHJpbWl0aXZlICovCisJ ZHVrX2hvYmplY3QgKmN1cnI7CisJZHVrX2hzdHJpbmcgKmtleSA9IE5VTEw7CisJZHVrX3Byb3Bk ZXNjIGRlc2M7CisJZHVrX3R2YWwgKnR2OworCWR1a191aW50MzJfdCBhcnJfaWR4OworCWR1a19i b29sX3QgcmM7CisJZHVrX2ludF90IGVfaWR4OworCWR1a191aW50X3Qgc2FuaXR5OworCWR1a191 aW50MzJfdCBuZXdfYXJyYXlfbGVuZ3RoID0gMDsgIC8qIDAgPSBubyB1cGRhdGUgKi8KKworCURV S19EREQoRFVLX0RERFBSSU5UKCJwdXRwcm9wOiB0aHI9JXAsIG9iaj0lcCwga2V5PSVwLCB2YWw9 JXAsIHRocm93PSVsZCAiCisJICAgICAgICAgICAgICAgICAgICAgIihvYmogLT4gJSFULCBrZXkg LT4gJSFULCB2YWwgLT4gJSFUKSIsCisJICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhy LCAodm9pZCAqKSB0dl9vYmosICh2b2lkICopIHR2X2tleSwgKHZvaWQgKikgdHZfdmFsLAorCSAg ICAgICAgICAgICAgICAgICAgIChsb25nKSB0aHJvd19mbGFnLCAoZHVrX3R2YWwgKikgdHZfb2Jq LCAoZHVrX3R2YWwgKikgdHZfa2V5LCAoZHVrX3R2YWwgKikgdHZfdmFsKSk7CisKKwlEVUtfQVNT RVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+aGVhcCAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKHR2X29iaiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X2tleSAhPSBOVUxMKTsKKwlE VUtfQVNTRVJUKHR2X3ZhbCAhPSBOVUxMKTsKKworCURVS19BU1NFUlRfVkFMU1RBQ0tfU1BBQ0Uo dGhyLCBEVUtfX1ZBTFNUQUNLX1NQQUNFKTsKKworCURVS19TVEFUU19JTkModGhyLT5oZWFwLCBz dGF0c19wdXRwcm9wX2FsbCk7CisKKwkvKgorCSAqICBNYWtlIGEgY29weSBvZiB0dl9vYmosIHR2 X2tleSwgYW5kIHR2X3ZhbCB0byBhdm9pZCBhbnkgaXNzdWVzIG9mCisJICogIHRoZW0gYmVpbmcg aW52YWxpZGF0ZWQgYnkgYSB2YWxzdGFjayByZXNpemUuCisJICoKKwkgKiAgWFhYOiB0aGlzIGlz IGFuIG92ZXJraWxsIGZvciBzb21lIHBhdGhzLCBzbyBvcHRpbWl6ZSB0aGlzIGxhdGVyCisJICog IChvciBtYXliZSBzd2l0Y2ggdG8gYSBzdGFjayBhcmd1bWVudHMgbW9kZWwgZW50aXJlbHkpLgor CSAqLworCisJRFVLX1RWQUxfU0VUX1RWQUwoJnR2X29ial9jb3B5LCB0dl9vYmopOworCURVS19U VkFMX1NFVF9UVkFMKCZ0dl9rZXlfY29weSwgdHZfa2V5KTsKKwlEVUtfVFZBTF9TRVRfVFZBTCgm dHZfdmFsX2NvcHksIHR2X3ZhbCk7CisJdHZfb2JqID0gJnR2X29ial9jb3B5OworCXR2X2tleSA9 ICZ0dl9rZXlfY29weTsKKwl0dl92YWwgPSAmdHZfdmFsX2NvcHk7CisKKwkvKgorCSAqICBDb2Vy Y2lvbiBhbmQgZmFzdCBwYXRoIHByb2Nlc3NpbmcuCisJICovCisKKwlzd2l0Y2ggKERVS19UVkFM X0dFVF9UQUcodHZfb2JqKSkgeworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6CisJY2FzZSBEVUtf VEFHX05VTEw6IHsKKwkJLyogTm90ZTogdW5jb25kaXRpb25hbCB0aHJvdyAqLworCQlEVUtfRERE KERVS19ERERQUklOVCgiYmFzZSBvYmplY3QgaXMgdW5kZWZpbmVkIG9yIG51bGwgLT4gcmVqZWN0 IChvYmplY3Q9JSFpVCkiLAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgdHZf b2JqKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BBUkFOT0lEX0VSUk9SUykKKwkJRFVLX0VSUk9S X1RZUEUodGhyLCBEVUtfU1RSX0lOVkFMSURfQkFTRSk7CisjZWxzZQorCQlEVUtfRVJST1JfRk1U Mih0aHIsIERVS19FUlJfVFlQRV9FUlJPUiwgImNhbm5vdCB3cml0ZSBwcm9wZXJ0eSAlcyBvZiAl cyIsCisJCSAgICAgICAgICAgICAgIGR1a19wdXNoX3N0cmluZ190dmFsX3JlYWRhYmxlKHRociwg dHZfa2V5KSwgZHVrX3B1c2hfc3RyaW5nX3R2YWxfcmVhZGFibGUodGhyLCB0dl9vYmopKTsKKyNl bmRpZgorCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJYnJlYWs7CisJfQorCisJY2Fz ZSBEVUtfVEFHX0JPT0xFQU46IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0 IGlzIGEgYm9vbGVhbiwgc3RhcnQgbG9va3VwIGZyb20gYm9vbGVhbiBwcm90b3R5cGUiKSk7CisJ CWN1cnIgPSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0JPT0xFQU5fUFJPVE9UWVBFXTsKKwkJYnJl YWs7CisJfQorCisJY2FzZSBEVUtfVEFHX1NUUklORzogeworCQlkdWtfaHN0cmluZyAqaCA9IERV S19UVkFMX0dFVF9TVFJJTkcodHZfb2JqKTsKKworCQkvKgorCQkgKiAgTm90ZTogY3VycmVudGx5 IG5vIGZhc3QgcGF0aCBmb3IgYXJyYXkgaW5kZXggd3JpdGVzLgorCQkgKiAgVGhleSB3b24ndCBi ZSBwb3NzaWJsZSBhbnl3YXkgYXMgc3RyaW5ncyBhcmUgaW1tdXRhYmxlLgorCQkgKi8KKworCQlE VUtfQVNTRVJUKGtleSA9PSBOVUxMKTsKKwkJYXJyX2lkeCA9IGR1a19fcHVzaF90dmFsX3RvX3By b3BlcnR5X2tleSh0aHIsIHR2X2tleSwgJmtleSk7CisJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwp OworCisJCWlmIChEVUtfVU5MSUtFTFkoRFVLX0hTVFJJTkdfSEFTX1NZTUJPTChoKSkpIHsKKwkJ CS8qIFN5bWJvbHMgKEVTMjAxNSBvciBoaWRkZW4pIGRvbid0IGhhdmUgdmlydHVhbCBwcm9wZXJ0 aWVzLiAqLworCQkJY3VyciA9IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfU1lNQk9MX1BST1RPVFlQ RV07CisJCQlnb3RvIGxvb2t1cDsKKwkJfQorCisJCWlmIChrZXkgPT0gRFVLX0hUSFJFQURfU1RS SU5HX0xFTkdUSCh0aHIpKSB7CisJCQlnb3RvIGZhaWxfbm90X3dyaXRhYmxlOworCQl9CisKKwkJ aWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCAmJgorCQkgICAgYXJyX2lkeCA8IERV S19IU1RSSU5HX0dFVF9DSEFSTEVOKGgpKSB7CisJCQlnb3RvIGZhaWxfbm90X3dyaXRhYmxlOwor CQl9CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IGlzIGEgc3RyaW5nLCBz dGFydCBsb29rdXAgZnJvbSBzdHJpbmcgcHJvdG90eXBlIikpOworCQljdXJyID0gdGhyLT5idWls dGluc1tEVUtfQklEWF9TVFJJTkdfUFJPVE9UWVBFXTsKKwkJZ290byBsb29rdXA7ICAvKiBhdm9p ZCBkb3VibGUgY29lcmNpb24gKi8KKwl9CisKKwljYXNlIERVS19UQUdfT0JKRUNUOiB7CisJCW9y aWcgPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X29iaik7CisJCURVS19BU1NFUlQob3JpZyAhPSBO VUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01fT0JKRUNUUykKKwkJLyogV2l0aCB0aGlz IGNoZWNrIGluIHBsYWNlIGZhc3QgcGF0aHMgd29uJ3QgbmVlZCByZWFkLW9ubHkKKwkJICogb2Jq ZWN0IGNoZWNrcy4gIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IGlmIHRoZXJlIGFyZQor CQkgKiBzZXR0ZXJzIHRoYXQgY2F1c2Ugbm8gd3JpdGVzIHRvIFJPTSBvYmplY3RzLCBidXQgY3Vy cmVudAorCQkgKiBidWlsdC1pbnMgZG9uJ3QgaGF2ZSBzdWNoIHNldHRlcnMuCisJCSAqLworCQlp ZiAoRFVLX0hFQVBIRFJfSEFTX1JFQURPTkxZKChkdWtfaGVhcGhkciAqKSBvcmlnKSkgeworCQkJ RFVLX0REKERVS19ERFBSSU5UKCJhdHRlbXB0IHRvIHB1dHByb3Agb24gcmVhZC1vbmx5IHRhcmdl dCBvYmplY3QiKSk7CisJCQlnb3RvIGZhaWxfbm90X3dyaXRhYmxlX25vX3BvcDsgIC8qIE11c3Qg YXZvaWQgZHVrX3BvcCgpIGluIGV4aXQgcGF0aCAqLworCQl9CisjZW5kaWYKKworCQkvKiBUaGUg ZmFzdCBwYXRoIGZvciBhcnJheSBwcm9wZXJ0eSBwdXQgaXMgbm90IGZ1bGx5IGNvbXBsaWFudDoK KwkJICogSWYgb25lIHBsYWNlcyBjb25mbGljdGluZyBudW1iZXItaW5kZXhlZCBwcm9wZXJ0aWVz IGludG8KKwkJICogQXJyYXkucHJvdG90eXBlIChmb3IgZXhhbXBsZSwgYSBub24td3JpdGFibGUg QXJyYXkucHJvdG90eXBlWzddKQorCQkgKiB0aGUgZmFzdCBwYXRoIHdpbGwgaW5jb3JyZWN0bHkg aWdub3JlIHRoZW0uCisJCSAqCisJCSAqIFRoaXMgZmFzdCBwYXRoIGNvdWxkIGJlIG1hZGUgY29t cGxpYW50IGJ5IGZhbGxpbmcgdGhyb3VnaAorCQkgKiB0byB0aGUgc2xvdyBwYXRoIGlmIHRoZSBw cmV2aW91cyB2YWx1ZSB3YXMgVU5VU0VELiAgVGhpcyB3b3VsZAorCQkgKiBhbHNvIHJlbW92ZSB0 aGUgbmVlZCB0byBjaGVjayBmb3IgZXh0ZW5zaWJpbGl0eS4gIFJpZ2h0IG5vdyBhCisJCSAqIG5v bi1leHRlbnNpYmxlIGFycmF5IGlzIHNsb3dlciB0aGFuIGFuIGV4dGVuc2libGUgb25lIGFzIGZh cgorCQkgKiBhcyB3cml0ZXMgYXJlIGNvbmNlcm5lZC4KKwkJICoKKwkJICogVGhlIGZhc3QgcGF0 aCBiZWhhdmlvciBpcyBkb2N1bWVudGVkIGluIG1vcmUgZGV0YWlsIGhlcmU6CisJCSAqIHRlc3Rz L2VjbWFzY3JpcHQvdGVzdC1taXNjLWFycmF5LWZhc3Qtd3JpdGUuanMKKwkJICovCisKKwkJLyog WFhYOiBhcnJheSAubGVuZ3RoPyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FSUkFZX1BST1Bf RkFTVFBBVEgpCisJCWlmIChkdWtfX3B1dHByb3Bfc2hhbGxvd19mYXN0cGF0aF9hcnJheV90dmFs KHRociwgb3JpZywgdHZfa2V5LCB0dl92YWwpICE9IDApIHsKKwkJCURVS19EREQoRFVLX0RERFBS SU5UKCJhcnJheSBmYXN0IHBhdGggc3VjY2VzcyIpKTsKKwkJCURVS19TVEFUU19JTkModGhyLT5o ZWFwLCBzdGF0c19wdXRwcm9wX2FycmF5aWR4KTsKKwkJCXJldHVybiAxOworCQl9CisjZW5kaWYK KworI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCkKKwkJaWYgKGR1a19f cHV0cHJvcF9mYXN0cGF0aF9idWZvYmpfdHZhbCh0aHIsIG9yaWcsIHR2X2tleSwgdHZfdmFsKSAh PSAwKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBpcyBidWZvYmosIGtleSBpcyBh IG51bWJlciwgYnVmb2JqIGZhc3QgcGF0aCIpKTsKKwkJCURVS19TVEFUU19JTkModGhyLT5oZWFw LCBzdGF0c19wdXRwcm9wX2J1Zm9iamlkeCk7CisJCQlyZXR1cm4gMTsKKwkJfQorI2VuZGlmCisK KyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1BST1hZKQorCQlpZiAoRFVLX1VOTElLRUxZKERVS19I T0JKRUNUX0lTX1BST1hZKG9yaWcpKSkgeworCQkJZHVrX2hvYmplY3QgKmhfdGFyZ2V0OworCQkJ ZHVrX2Jvb2xfdCB0bXBfYm9vbDsKKworCQkJaWYgKGR1a19fcHJveHlfY2hlY2tfcHJvcCh0aHIs IG9yaWcsIERVS19TVFJJRFhfU0VULCB0dl9rZXksICZoX3RhcmdldCkpIHsKKwkJCQkvKiAtPiBb IC4uLiB0cmFwIGhhbmRsZXIgXSAqLworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBwcm94 eSBvYmplY3QgJ3NldCcgZm9yIGtleSAlIVQiLCAoZHVrX3R2YWwgKikgdHZfa2V5KSk7CisJCQkJ RFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX3B1dHByb3BfcHJveHkpOworCQkJCWR1a19w dXNoX2hvYmplY3QodGhyLCBoX3RhcmdldCk7ICAvKiB0YXJnZXQgKi8KKwkJCQlkdWtfcHVzaF90 dmFsKHRociwgdHZfa2V5KTsgICAgICAgLyogUCAqLworCQkJCWR1a19wdXNoX3R2YWwodGhyLCB0 dl92YWwpOyAgICAgICAvKiBWICovCisJCQkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X29iaik7ICAg ICAgIC8qIFJlY2VpdmVyOiBQcm94eSBvYmplY3QgKi8KKwkJCQlkdWtfY2FsbF9tZXRob2QodGhy LCA0IC8qbmFyZ3MqLyk7CisJCQkJdG1wX2Jvb2wgPSBkdWtfdG9fYm9vbGVhbl90b3BfcG9wKHRo cik7CisJCQkJaWYgKCF0bXBfYm9vbCkgeworCQkJCQlnb3RvIGZhaWxfcHJveHlfcmVqZWN0ZWQ7 CisJCQkJfQorCisJCQkJLyogVGFyZ2V0IG9iamVjdCBtdXN0IGJlIGNoZWNrZWQgZm9yIGEgY29u ZmxpY3RpbmcKKwkJCQkgKiBub24tY29uZmlndXJhYmxlIHByb3BlcnR5LgorCQkJCSAqLworCQkJ CWFycl9pZHggPSBkdWtfX3B1c2hfdHZhbF90b19wcm9wZXJ0eV9rZXkodGhyLCB0dl9rZXksICZr ZXkpOworCQkJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCisJCQkJaWYgKGR1a19fZ2V0X293 bl9wcm9wZGVzY19yYXcodGhyLCBoX3RhcmdldCwga2V5LCBhcnJfaWR4LCAmZGVzYywgRFVLX0dF VERFU0NfRkxBR19QVVNIX1ZBTFVFKSkgeworCQkJCQlkdWtfdHZhbCAqdHZfdGFyZyA9IGR1a19y ZXF1aXJlX3R2YWwodGhyLCAtMSk7CisJCQkJCWR1a19ib29sX3QgZGF0YWRlc2NfcmVqZWN0Owor CQkJCQlkdWtfYm9vbF90IGFjY2Rlc2NfcmVqZWN0OworCisJCQkJCURVS19EREQoRFVLX0RERFBS SU5UKCJwcm94eSAnc2V0JzogdGFyZ2V0IGhhcyBtYXRjaGluZyBwcm9wZXJ0eSAlIU8sIGNoZWNr IGZvciAiCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICJjb25mbGljdGluZyBwcm9wZXJ0eTsg dHZfdmFsPSUhVCwgdHZfdGFyZz0lIVQsIGRlc2MuZmxhZ3M9MHglMDhseCwgIgorCQkJCQkgICAg ICAgICAgICAgICAgICAgICAiZGVzYy5nZXQ9JXAsIGRlc2Muc2V0PSVwIiwKKwkJCQkJICAgICAg ICAgICAgICAgICAgICAgKGR1a19oZWFwaGRyICopIGtleSwgKGR1a190dmFsICopIHR2X3ZhbCwg KGR1a190dmFsICopIHR2X3RhcmcsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBsb25nKSBkZXNjLmZsYWdzLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBk ZXNjLmdldCwgKHZvaWQgKikgZGVzYy5zZXQpKTsKKworCQkJCQlkYXRhZGVzY19yZWplY3QgPSAh KGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19BQ0NFU1NPUikgJiYKKwkJCQkJICAgICAg ICAgICAgICAgICAgIShkZXNjLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxF KSAmJgorCQkJCQkgICAgICAgICAgICAgICAgICAhKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERFU0Nf RkxBR19XUklUQUJMRSkgJiYKKwkJCQkJICAgICAgICAgICAgICAgICAgIWR1a19qc19zYW1ldmFs dWUodHZfdmFsLCB0dl90YXJnKTsKKwkJCQkJYWNjZGVzY19yZWplY3QgPSAoZGVzYy5mbGFncyAm IERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSAmJgorCQkJCQkgICAgICAgICAgICAgICAgICEo ZGVzYy5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkgJiYKKwkJCQkJICAg ICAgICAgICAgICAgICAoZGVzYy5zZXQgPT0gTlVMTCk7CisJCQkJCWlmIChkYXRhZGVzY19yZWpl Y3QgfHwgYWNjZGVzY19yZWplY3QpIHsKKwkJCQkJCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NU Ul9QUk9YWV9SRUpFQ1RFRCk7CisJCQkJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJ CQkJfQorCisJCQkJCWR1a19wb3BfMl91bnNhZmUodGhyKTsKKwkJCQl9IGVsc2UgeworCQkJCQlk dWtfcG9wX3Vuc2FmZSh0aHIpOworCQkJCX0KKwkJCQlyZXR1cm4gMTsgIC8qIHN1Y2Nlc3MgKi8K KwkJCX0KKworCQkJb3JpZyA9IGhfdGFyZ2V0OyAgLyogcmVzdW1lIHdyaXRlIHRvIHRhcmdldCAq LworCQkJRFVLX1RWQUxfU0VUX09CSkVDVCh0dl9vYmosIG9yaWcpOworCQl9CisjZW5kaWYgIC8q IERVS19VU0VfRVM2X1BST1hZICovCisKKwkJY3VyciA9IG9yaWc7CisJCWJyZWFrOworCX0KKwor CWNhc2UgRFVLX1RBR19CVUZGRVI6IHsKKwkJZHVrX2hidWZmZXIgKmggPSBEVUtfVFZBTF9HRVRf QlVGRkVSKHR2X29iaik7CisJCWR1a19pbnRfdCBwb3BfY291bnQgPSAwOworCisJCS8qCisJCSAq ICBCZWNhdXNlIGJ1ZmZlciB2YWx1ZXMgbWF5IGJlIGxvb3BlZCBvdmVyIGFuZCByZWFkL3dyaXR0 ZW4KKwkJICogIGZyb20sIGFuIGFycmF5IGluZGV4IGZhc3QgcGF0aCBpcyBpbXBvcnRhbnQuCisJ CSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJCWlmIChEVUtfVFZBTF9JU19G QVNUSU5UKHR2X2tleSkpIHsKKwkJCWFycl9pZHggPSBkdWtfX3R2YWxfZmFzdGludF90b19hcnJf aWR4KHR2X2tleSk7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBvYmplY3QgYnVmZmVy LCBrZXkgaXMgYSBmYXN0LXBhdGggZmFzdGludDsgYXJyX2lkeCAlbGQiLCAobG9uZykgYXJyX2lk eCkpOworCQkJcG9wX2NvdW50ID0gMDsKKwkJfSBlbHNlCisjZW5kaWYKKwkJaWYgKERVS19UVkFM X0lTX05VTUJFUih0dl9rZXkpKSB7CisJCQlhcnJfaWR4ID0gZHVrX190dmFsX251bWJlcl90b19h cnJfaWR4KHR2X2tleSk7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBvYmplY3QgYnVm ZmVyLCBrZXkgaXMgYSBmYXN0LXBhdGggbnVtYmVyOyBhcnJfaWR4ICVsZCIsIChsb25nKSBhcnJf aWR4KSk7CisJCQlwb3BfY291bnQgPSAwOworCQl9IGVsc2UgeworCQkJYXJyX2lkeCA9IGR1a19f cHVzaF90dmFsX3RvX3Byb3BlcnR5X2tleSh0aHIsIHR2X2tleSwgJmtleSk7CisJCQlEVUtfQVNT RVJUKGtleSAhPSBOVUxMKTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJiYXNlIG9iamVjdCBi dWZmZXIsIGtleSBpcyBhIG5vbi1mYXN0LXBhdGggbnVtYmVyOyBhZnRlciAiCisJCQkgICAgICAg ICAgICAgICAgICAgICAiY29lcmNpb24ga2V5IGlzICUhVCwgYXJyX2lkeCAlbGQiLAorCQkJICAg ICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwgKGxv bmcpIGFycl9pZHgpKTsKKwkJCXBvcF9jb3VudCA9IDE7CisJCX0KKworCQlpZiAoYXJyX2lkeCAh PSBEVUtfX05PX0FSUkFZX0lOREVYICYmCisJCSAgICBhcnJfaWR4IDwgRFVLX0hCVUZGRVJfR0VU X1NJWkUoaCkpIHsKKwkJCWR1a191aW50OF90ICpkYXRhOworCQkJRFVLX0RERChEVUtfREREUFJJ TlQoIndyaXRpbmcgdG8gYnVmZmVyIGRhdGEgYXQgaW5kZXggJWxkIiwgKGxvbmcpIGFycl9pZHgp KTsKKwkJCWRhdGEgPSAoZHVrX3VpbnQ4X3QgKikgRFVLX0hCVUZGRVJfR0VUX0RBVEFfUFRSKHRo ci0+aGVhcCwgaCk7CisKKwkJCS8qIFhYWDogZHVrX3RvX2ludCgpIGVuc3VyZXMgd2UnbGwgZ2V0 IDggbG93ZXN0IGJpdHMgYXMKKwkJCSAqIGFzIGlucHV0IGlzIHdpdGhpbiBkdWtfaW50X3QgcmFu Z2UgKGNhcHBlZCBvdXRzaWRlIGl0KS4KKwkJCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNU SU5UKQorCQkJLyogQnVmZmVyIHdyaXRlcyBhcmUgb2Z0ZW4gaW50ZWdlcnMuICovCisJCQlpZiAo RFVLX1RWQUxfSVNfRkFTVElOVCh0dl92YWwpKSB7CisJCQkJZGF0YVthcnJfaWR4XSA9IChkdWtf dWludDhfdCkgRFVLX1RWQUxfR0VUX0ZBU1RJTlRfVTMyKHR2X3ZhbCk7CisJCQl9CisJCQllbHNl CisjZW5kaWYKKwkJCXsKKwkJCQlkdWtfcHVzaF90dmFsKHRociwgdHZfdmFsKTsKKwkJCQlkYXRh W2Fycl9pZHhdID0gKGR1a191aW50OF90KSBkdWtfdG9fdWludDMyKHRociwgLTEpOworCQkJCXBv cF9jb3VudCsrOworCQkJfQorCisJCQlkdWtfcG9wX25fdW5zYWZlKHRociwgcG9wX2NvdW50KTsK KwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJyZXN1bHQ6IHN1Y2Nlc3MgKGJ1ZmZlciBkYXRhIHdy aXRlKSIpKTsKKwkJCURVS19TVEFUU19JTkModGhyLT5oZWFwLCBzdGF0c19wdXRwcm9wX2J1ZmZl cmlkeCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChwb3BfY291bnQgPT0gMCkgeworCQkJ LyogVGhpcyBpcyBhIHByZXR0eSBhd2t3YXJkIGNvbnRyb2wgZmxvdywgYnV0IHdlIG5lZWQgdG8g cmVjaGVjayB0aGUKKwkJCSAqIGtleSBjb2VyY2lvbiBoZXJlLgorCQkJICovCisJCQlhcnJfaWR4 ID0gZHVrX19wdXNoX3R2YWxfdG9fcHJvcGVydHlfa2V5KHRociwgdHZfa2V5LCAma2V5KTsKKwkJ CURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ug b2JqZWN0IGJ1ZmZlciwga2V5IGlzIGEgbm9uLWZhc3QtcGF0aCBudW1iZXI7IGFmdGVyICIKKwkJ CSAgICAgICAgICAgICAgICAgICAgICJjb2VyY2lvbiBrZXkgaXMgJSFULCBhcnJfaWR4ICVsZCIs CisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwg LTEpLCAobG9uZykgYXJyX2lkeCkpOworCQl9CisKKwkJaWYgKGtleSA9PSBEVUtfSFRIUkVBRF9T VFJJTkdfTEVOR1RIKHRocikpIHsKKwkJCWdvdG8gZmFpbF9ub3Rfd3JpdGFibGU7CisJCX0KKwor CQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBvYmplY3QgaXMgYSBidWZmZXIsIHN0YXJ0IGxv b2t1cCBmcm9tIFVpbnQ4QXJyYXkgcHJvdG90eXBlIikpOworCQljdXJyID0gdGhyLT5idWlsdGlu c1tEVUtfQklEWF9VSU5UOEFSUkFZX1BST1RPVFlQRV07CisJCWdvdG8gbG9va3VwOyAgLyogYXZv aWQgZG91YmxlIGNvZXJjaW9uICovCisJfQorCisJY2FzZSBEVUtfVEFHX1BPSU5URVI6IHsKKwkJ RFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IGlzIGEgcG9pbnRlciwgc3RhcnQgbG9v a3VwIGZyb20gcG9pbnRlciBwcm90b3R5cGUiKSk7CisJCWN1cnIgPSB0aHItPmJ1aWx0aW5zW0RV S19CSURYX1BPSU5URVJfUFJPVE9UWVBFXTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBEVUtfVEFH X0xJR0hURlVOQzogeworCQkvKiBMaWdodGZ1bmNzIGhhdmUgbm8gb3duIHByb3BlcnRpZXMgYW5k IGFyZSBjb25zaWRlcmVkIG5vbi1leHRlbnNpYmxlLgorCQkgKiBIb3dldmVyLCB0aGUgd3JpdGUg bWF5IGJlIGNhcHR1cmVkIGJ5IGFuIGluaGVyaXRlZCBzZXR0ZXIgd2hpY2gKKwkJICogbWVhbnMg d2UgY2FuJ3Qgc3RvcCB0aGUgbG9va3VwIGhlcmUuCisJCSAqLworCQlEVUtfREREKERVS19ERERQ UklOVCgiYmFzZSBvYmplY3QgaXMgYSBsaWdodGZ1bmMsIHN0YXJ0IGxvb2t1cCBmcm9tIGZ1bmN0 aW9uIHByb3RvdHlwZSIpKTsKKwkJY3VyciA9IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfTkFUSVZF X0ZVTkNUSU9OX1BST1RPVFlQRV07CisJCWJyZWFrOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VT RV9GQVNUSU5UKQorCWNhc2UgRFVLX1RBR19GQVNUSU5UOgorI2VuZGlmCisJZGVmYXVsdDogewor CQkvKiBudW1iZXIgKi8KKwkJRFVLX0RERChEVUtfREREUFJJTlQoImJhc2Ugb2JqZWN0IGlzIGEg bnVtYmVyLCBzdGFydCBsb29rdXAgZnJvbSBudW1iZXIgcHJvdG90eXBlIikpOworCQlEVUtfQVNT RVJUKERVS19UVkFMX0lTX05VTUJFUih0dl9vYmopKTsKKwkJY3VyciA9IHRoci0+YnVpbHRpbnNb RFVLX0JJRFhfTlVNQkVSX1BST1RPVFlQRV07CisJCWJyZWFrOworCX0KKwl9CisKKwlEVUtfQVNT RVJUKGtleSA9PSBOVUxMKTsKKwlhcnJfaWR4ID0gZHVrX19wdXNoX3R2YWxfdG9fcHJvcGVydHlf a2V5KHRociwgdHZfa2V5LCAma2V5KTsKKwlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKworIGxv b2t1cDoKKworCS8qCisJICogIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGFscmVhZHkgZXhp c3RzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisJICogIE5vdGUgdGhhdCB0aGUgYWN0dWFsIHdy aXRlIGdvZXMgaW50byB0aGUgb3JpZ2luYWwgYmFzZSBvYmplY3QKKwkgKiAgKGV4Y2VwdCBpZiBh biBhY2Nlc3NvciBwcm9wZXJ0eSBjYXB0dXJlcyB0aGUgd3JpdGUpLgorCSAqLworCisJLyogW2tl eV0gKi8KKworCURVS19BU1NFUlQoY3VyciAhPSBOVUxMKTsKKwlzYW5pdHkgPSBEVUtfSE9CSkVD VF9QUk9UT1RZUEVfQ0hBSU5fU0FOSVRZOworCWRvIHsKKwkJaWYgKCFkdWtfX2dldF9vd25fcHJv cGRlc2NfcmF3KHRociwgY3Vyciwga2V5LCBhcnJfaWR4LCAmZGVzYywgMCAvKmZsYWdzKi8pKSB7 ICAvKiBkb24ndCBwdXNoIHZhbHVlICovCisJCQlnb3RvIG5leHRfaW5fY2hhaW47CisJCX0KKwor CQlpZiAoZGVzYy5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSB7CisJCQkvKgor CQkJICogIEZvdW5kIGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5IChvd24gb3IgaW5oZXJpdGVk KS4KKwkJCSAqICBDYWxsIHNldHRlciB3aXRoICd0aGlzJyBzZXQgdG8gb3JpZywgYW5kIHZhbHVl IGFzIHRoZSBvbmx5IGFyZ3VtZW50LgorCQkJICogIFNldHRlciBjYWxscyBhcmUgT0sgZXZlbiBm b3IgUk9NIG9iamVjdHMuCisJCQkgKgorCQkJICogIE5vdGU6IG5vIGV4b3RpYyBhcmd1bWVudHMg b2JqZWN0IGJlaGF2aW9yLCBiZWNhdXNlIFtbUHV0XV0gbmV2ZXIKKwkJCSAqICBjYWxscyBbW0Rl ZmluZU93blByb3BlcnR5XV0gKEU1IFNlY3Rpb24gOC4xMi41LCBzdGVwIDUuYikuCisJCQkgKi8K KworCQkJZHVrX2hvYmplY3QgKnNldHRlcjsKKworCQkJRFVLX0REKERVS19ERFBSSU5UKCJwdXQg dG8gYW4gb3duIG9yIGluaGVyaXRlZCBhY2Nlc3NvciwgY2FsbGluZyBzZXR0ZXIiKSk7CisKKwkJ CXNldHRlciA9IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1NFVFRFUih0aHItPmhlYXAsIGN1cnIs IGRlc2MuZV9pZHgpOworCQkJaWYgKCFzZXR0ZXIpIHsKKwkJCQlnb3RvIGZhaWxfbm9fc2V0dGVy OworCQkJfQorCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHNldHRlcik7CisJCQlkdWtfcHVzaF90 dmFsKHRociwgdHZfb2JqKTsgIC8qIG5vdGU6IG9yaWdpbmFsLCB1bmNvZXJjZWQgYmFzZSAqLwor CQkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X3ZhbCk7ICAvKiBba2V5IHNldHRlciB0aGlzIHZhbF0g Ki8KKyNpZiBkZWZpbmVkKERVS19VU0VfTk9OU1REX1NFVFRFUl9LRVlfQVJHVU1FTlQpCisJCQlk dWtfZHVwX200KHRocik7CisJCQlkdWtfY2FsbF9tZXRob2QodGhyLCAyKTsgICAgIC8qIFtrZXkg c2V0dGVyIHRoaXMgdmFsIGtleV0gLT4gW2tleSByZXR2YWxdICovCisjZWxzZQorCQkJZHVrX2Nh bGxfbWV0aG9kKHRociwgMSk7ICAgICAvKiBba2V5IHNldHRlciB0aGlzIHZhbF0gLT4gW2tleSBy ZXR2YWxdICovCisjZW5kaWYKKwkJCWR1a19wb3BfdW5zYWZlKHRocik7ICAgICAgICAgLyogaWdu b3JlIHJldHZhbCAtPiBba2V5XSAqLworCQkJZ290byBzdWNjZXNzX25vX2FyZ3VtZW50c19leG90 aWM7CisJCX0KKworCQlpZiAob3JpZyA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogIEZvdW5kIGV4 aXN0aW5nIG93biBvciBpbmhlcml0ZWQgcGxhaW4gcHJvcGVydHksIGJ1dCBvcmlnaW5hbAorCQkJ ICogIGJhc2UgaXMgYSBwcmltaXRpdmUgdmFsdWUuCisJCQkgKi8KKwkJCURVS19ERChEVUtfRERQ UklOVCgiYXR0ZW1wdCB0byBjcmVhdGUgYSBuZXcgcHJvcGVydHkgaW4gYSBwcmltaXRpdmUgYmFz ZSBvYmplY3QiKSk7CisJCQlnb3RvIGZhaWxfYmFzZV9wcmltaXRpdmU7CisJCX0KKworCQlpZiAo Y3VyciAhPSBvcmlnKSB7CisJCQkvKgorCQkJICogIEZvdW5kIGV4aXN0aW5nIGluaGVyaXRlZCBw bGFpbiBwcm9wZXJ0eS4KKwkJCSAqICBEbyBhbiBhY2Nlc3MgY29udHJvbCBjaGVjaywgYW5kIGlm IE9LLCB3cml0ZQorCQkJICogIG5ldyBwcm9wZXJ0eSB0byAnb3JpZycuCisJCQkgKi8KKwkJCWlm ICghRFVLX0hPQkpFQ1RfSEFTX0VYVEVOU0lCTEUob3JpZykpIHsKKwkJCQlEVUtfREQoRFVLX0RE UFJJTlQoImZvdW5kIGV4aXN0aW5nIGluaGVyaXRlZCBwbGFpbiBwcm9wZXJ0eSwgYnV0IG9yaWdp bmFsIG9iamVjdCBpcyBub3QgZXh0ZW5zaWJsZSIpKTsKKwkJCQlnb3RvIGZhaWxfbm90X2V4dGVu c2libGU7CisJCQl9CisJCQlpZiAoIShkZXNjLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfV1JJ VEFCTEUpKSB7CisJCQkJRFVLX0REKERVS19ERFBSSU5UKCJmb3VuZCBleGlzdGluZyBpbmhlcml0 ZWQgcGxhaW4gcHJvcGVydHksIG9yaWdpbmFsIG9iamVjdCBpcyBleHRlbnNpYmxlLCBidXQgaW5o ZXJpdGVkIHByb3BlcnR5IGlzIG5vdCB3cml0YWJsZSIpKTsKKwkJCQlnb3RvIGZhaWxfbm90X3dy aXRhYmxlOworCQkJfQorCQkJRFVLX0REKERVS19ERFBSSU5UKCJwdXQgdG8gbmV3IHByb3BlcnR5 LCBvYmplY3QgZXh0ZW5zaWJsZSwgaW5oZXJpdGVkIHByb3BlcnR5IGZvdW5kIGFuZCBpcyB3cml0 YWJsZSIpKTsKKwkJCWdvdG8gY3JlYXRlX25ldzsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiAg Rm91bmQgZXhpc3Rpbmcgb3duIChub24taW5oZXJpdGVkKSBwbGFpbiBwcm9wZXJ0eS4KKwkJCSAq ICBEbyBhbiBhY2Nlc3MgY29udHJvbCBjaGVjayBhbmQgdXBkYXRlIGluIHBsYWNlLgorCQkJICov CisKKwkJCWlmICghKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSkpIHsK KwkJCQlEVUtfREQoRFVLX0REUFJJTlQoImZvdW5kIGV4aXN0aW5nIG93biAobm9uLWluaGVyaXRl ZCkgcGxhaW4gcHJvcGVydHksIGJ1dCBwcm9wZXJ0eSBpcyBub3Qgd3JpdGFibGUiKSk7CisJCQkJ Z290byBmYWlsX25vdF93cml0YWJsZTsKKwkJCX0KKwkJCWlmIChkZXNjLmZsYWdzICYgRFVLX1BS T1BERVNDX0ZMQUdfVklSVFVBTCkgeworCQkJCURVS19ERChEVUtfRERQUklOVCgiZm91bmQgZXhp c3Rpbmcgb3duIChub24taW5oZXJpdGVkKSB2aXJ0dWFsIHByb3BlcnR5LCBwcm9wZXJ0eSBpcyB3 cml0YWJsZSIpKTsKKworCQkJCWlmIChEVUtfSE9CSkVDVF9JU19BUlJBWShjdXJyKSkgeworCQkJ CQkvKgorCQkJCQkgKiAgV3JpdGUgdG8gJ2xlbmd0aCcgb2YgYW4gYXJyYXkgaXMgYSB2ZXJ5IGNv bXBsZXggY2FzZQorCQkJCQkgKiAgaGFuZGxlZCBpbiBhIGhlbHBlciB3aGljaCB1cGRhdGVzIGJv dGggdGhlIGFycmF5IGVsZW1lbnRzCisJCQkJCSAqICBhbmQgd3JpdGVzIHRoZSBuZXcgJ2xlbmd0 aCcuICBUaGUgd3JpdGUgbWF5IHJlc3VsdCBpbiBhbgorCQkJCQkgKiAgdW5jb25kaXRpb25hbCBS YW5nZUVycm9yIG9yIGEgcGFydGlhbCB3cml0ZSAoaW5kaWNhdGVkCisJCQkJCSAqICBieSBhIHJl dHVybiBjb2RlKS4KKwkJCQkJICoKKwkJCQkJICogIE5vdGU6IHRoZSBoZWxwZXIgaGFzIGFuIHVu bmVjZXNzYXJ5IHdyaXRhYmlsaXR5IGNoZWNrCisJCQkJCSAqICBmb3IgJ2xlbmd0aCcsIHdlIGFs cmVhZHkga25vdyBpdCBpcyB3cml0YWJsZS4KKwkJCQkJICovCisJCQkJCURVS19BU1NFUlQoa2V5 ID09IERVS19IVEhSRUFEX1NUUklOR19MRU5HVEgodGhyKSk7ICAvKiBvbmx5IHZpcnR1YWwgYXJy YXkgcHJvcGVydHkgKi8KKworCQkJCQlEVUtfREREKERVS19ERERQUklOVCgid3JpdGluZyBleGlz dGluZyAnbGVuZ3RoJyBwcm9wZXJ0eSB0byBhcnJheSBleG90aWMsIGludm9rZSBjb21wbGV4IGhl bHBlciIpKTsKKworCQkJCQkvKiBYWFg6IHRoZSBoZWxwZXIgY3VycmVudGx5IGFzc3VtZXMgc3Rh Y2sgdG9wIGNvbnRhaW5zIG5ldworCQkJCQkgKiAnbGVuZ3RoJyB2YWx1ZSBhbmQgdGhlIHdob2xl IGNhbGxpbmcgY29udmVudGlvbiBpcyBub3QgdmVyeQorCQkJCQkgKiBjb21wYXRpYmxlIHdpdGgg d2hhdCB3ZSBuZWVkLgorCQkJCQkgKi8KKworCQkJCQlkdWtfcHVzaF90dmFsKHRociwgdHZfdmFs KTsgIC8qIFtrZXkgdmFsXSAqLworCQkJCQlyYyA9IGR1a19faGFuZGxlX3B1dF9hcnJheV9sZW5n dGgodGhyLCBvcmlnKTsKKwkJCQkJZHVrX3BvcF91bnNhZmUodGhyKTsgIC8qIFtrZXkgdmFsXSAt PiBba2V5XSAqLworCQkJCQlpZiAoIXJjKSB7CisJCQkJCQlnb3RvIGZhaWxfYXJyYXlfbGVuZ3Ro X3BhcnRpYWw7CisJCQkJCX0KKworCQkJCQkvKiBrZXkgaXMgJ2xlbmd0aCcsIGNhbm5vdCBtYXRj aCBhcmd1bWVudCBleG90aWMgYmVoYXZpb3IgKi8KKwkJCQkJZ290byBzdWNjZXNzX25vX2FyZ3Vt ZW50c19leG90aWM7CisJCQkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQ UE9SVCkKKwkJCQllbHNlIGlmIChEVUtfSE9CSkVDVF9JU19CVUZPQkooY3VycikpIHsKKwkJCQkJ ZHVrX2hidWZvYmogKmhfYnVmb2JqOworCQkJCQlkdWtfdWludF90IGJ5dGVfb2ZmOworCQkJCQlk dWtfc21hbGxfdWludF90IGVsZW1fc2l6ZTsKKworCQkJCQloX2J1Zm9iaiA9IChkdWtfaGJ1Zm9i aiAqKSBjdXJyOworCQkJCQlEVUtfQVNTRVJUX0hCVUZPQkpfVkFMSUQoaF9idWZvYmopOworCisJ CQkJCURVS19ERChEVUtfRERQUklOVCgid3JpdGFibGUgdmlydHVhbCBwcm9wZXJ0eSBpcyBpbiBi dWZmZXIgb2JqZWN0IikpOworCisJCQkJCS8qIENhcmVmdWwgd2l0aCB3cmFwcGluZzogYXJyX2lk eCB1cHNoaWZ0IG1heSBlYXNpbHkgd3JhcCwgd2hlcmVhcworCQkJCQkgKiBsZW5ndGggZG93bnNo aWZ0IHdvbid0LgorCQkJCQkgKi8KKwkJCQkJaWYgKGFycl9pZHggPCAoaF9idWZvYmotPmxlbmd0 aCA+PiBoX2J1Zm9iai0+c2hpZnQpICYmIERVS19IQlVGT0JKX0hBU19WSVJUVUFMX0lORElDRVMo aF9idWZvYmopKSB7CisJCQkJCQlkdWtfdWludDhfdCAqZGF0YTsKKwkJCQkJCURVS19EREQoRFVL X0RERFBSSU5UKCJ3cml0aW5nIHRvIGJ1ZmZlciBkYXRhIGF0IGluZGV4ICVsZCIsIChsb25nKSBh cnJfaWR4KSk7CisKKwkJCQkJCURVS19BU1NFUlQoYXJyX2lkeCAhPSBEVUtfX05PX0FSUkFZX0lO REVYKTsgIC8qIGluZGV4L2xlbmd0aCBjaGVjayBndWFyYW50ZWVzICovCisJCQkJCQlieXRlX29m ZiA9IGFycl9pZHggPDwgaF9idWZvYmotPnNoaWZ0OyAgICAgICAvKiBubyB3cmFwIGFzc3VtaW5n IGhfYnVmb2JqLT5sZW5ndGggaXMgdmFsaWQgKi8KKwkJCQkJCWVsZW1fc2l6ZSA9IChkdWtfc21h bGxfdWludF90KSAoMVUgPDwgaF9idWZvYmotPnNoaWZ0KTsKKworCQkJCQkJLyogQ29lcmNlIHRv IG51bWJlciBiZWZvcmUgdmFsaWRhdGluZyBwb2ludGVycyBldGMgc28gdGhhdCB0aGUKKwkJCQkJ CSAqIG51bWJlciBjb2VyY2lvbnMgaW4gZHVrX2hidWZvYmpfdmFsaWRhdGVkX3dyaXRlKCkgYXJl CisJCQkJCQkgKiBndWFyYW50ZWVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUgYW5kIG5vdCBpbnZh bGlkYXRlIHRoZQorCQkJCQkJICogcG9pbnRlciBjaGVja3Mgd2UgZG8gaGVyZS4KKwkJCQkJCSAq LworCQkJCQkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X3ZhbCk7CisJCQkJCQkodm9pZCkgZHVrX3Rv X251bWJlcl9tMSh0aHIpOworCisJCQkJCQlpZiAoaF9idWZvYmotPmJ1ZiAhPSBOVUxMICYmIERV S19IQlVGT0JKX1ZBTElEX0JZVEVPRkZTRVRfRVhDTChoX2J1Zm9iaiwgYnl0ZV9vZmYgKyBlbGVt X3NpemUpKSB7CisJCQkJCQkJZGF0YSA9IChkdWtfdWludDhfdCAqKSBEVUtfSEJVRkZFUl9HRVRf REFUQV9QVFIodGhyLT5oZWFwLCBoX2J1Zm9iai0+YnVmKSArIGhfYnVmb2JqLT5vZmZzZXQgKyBi eXRlX29mZjsKKwkJCQkJCQlkdWtfaGJ1Zm9ial92YWxpZGF0ZWRfd3JpdGUodGhyLCBoX2J1Zm9i aiwgZGF0YSwgZWxlbV9zaXplKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJRFVLX0QoRFVLX0RQ UklOVCgiYnVmb2JqIGFjY2VzcyBvdXQgb2YgdW5kZXJseWluZyBidWZmZXIsIGlnbm9yaW5nICh3 cml0ZSBza2lwcGVkKSIpKTsKKwkJCQkJCX0KKwkJCQkJCWR1a19wb3BfdW5zYWZlKHRocik7CisJ CQkJCQlnb3RvIHN1Y2Nlc3Nfbm9fYXJndW1lbnRzX2V4b3RpYzsKKwkJCQkJfQorCQkJCX0KKyNl bmRpZiAgLyogRFVLX1VTRV9CVUZGRVJPQkpFQ1RfU1VQUE9SVCAqLworCisJCQkJRFVLX0QoRFVL X0RQUklOVCgic2hvdWxkIG5vdCBoYXBwZW4sIGtleSAlIU8iLCBrZXkpKTsKKwkJCQlnb3RvIGZh aWxfaW50ZXJuYWw7ICAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQkJfQorCQkJRFVLX0REKERV S19ERFBSSU5UKCJwdXQgdG8gZXhpc3Rpbmcgb3duIHBsYWluIHByb3BlcnR5LCBwcm9wZXJ0eSBp cyB3cml0YWJsZSIpKTsKKwkJCWdvdG8gdXBkYXRlX29sZDsKKwkJfQorCQlEVUtfVU5SRUFDSEFC TEUoKTsKKworCSBuZXh0X2luX2NoYWluOgorCQkvKiBYWFg6IG9wdGlvbiB0byBwcmV0ZW5kIHBy b3BlcnR5IGRvZXNuJ3QgZXhpc3QgaWYgc2FuaXR5IGxpbWl0IGlzCisJCSAqIGhpdCBtaWdodCBi ZSB1c2VmdWwuCisJCSAqLworCQlpZiAoRFVLX1VOTElLRUxZKHNhbml0eS0tID09IDApKSB7CisJ CQlEVUtfRVJST1JfUkFOR0UodGhyLCBEVUtfU1RSX1BST1RPVFlQRV9DSEFJTl9MSU1JVCk7CisJ CQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJfQorCQljdXJyID0gRFVLX0hPQkpFQ1Rf R0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGN1cnIpOworCX0gd2hpbGUgKGN1cnIgIT0gTlVMTCk7 CisKKwkvKgorCSAqICBQcm9wZXJ0eSBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluLgorCSAq LworCisJRFVLX0RERChEVUtfREREUFJJTlQoInByb3BlcnR5IG5vdCBmb3VuZCBpbiBwcm90b3R5 cGUgY2hhaW4iKSk7CisKKwlpZiAob3JpZyA9PSBOVUxMKSB7CisJCURVS19ERChEVUtfRERQUklO VCgiYXR0ZW1wdCB0byBjcmVhdGUgYSBuZXcgcHJvcGVydHkgaW4gYSBwcmltaXRpdmUgYmFzZSBv YmplY3QiKSk7CisJCWdvdG8gZmFpbF9iYXNlX3ByaW1pdGl2ZTsKKwl9CisKKwlpZiAoIURVS19I T0JKRUNUX0hBU19FWFRFTlNJQkxFKG9yaWcpKSB7CisJCURVS19ERChEVUtfRERQUklOVCgicHV0 IHRvIGEgbmV3IHByb3BlcnR5IChub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluKSwgYnV0IG9y aWdpbmFsIG9iamVjdCBub3QgZXh0ZW5zaWJsZSIpKTsKKwkJZ290byBmYWlsX25vdF9leHRlbnNp YmxlOworCX0KKworCWdvdG8gY3JlYXRlX25ldzsKKworIHVwZGF0ZV9vbGQ6CisKKwkvKgorCSAq ICBVcGRhdGUgYW4gZXhpc3RpbmcgcHJvcGVydHkgb2YgdGhlIGJhc2Ugb2JqZWN0LgorCSAqLwor CisJLyogW2tleV0gKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJ1cGRhdGUgYW4gZXhpc3Rp bmcgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCIpKTsKKworCURVS19BU1NFUlQob3Jp ZyAhPSBOVUxMKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX09CSkVDVFMpCisJLyogVGhpcyBz aG91bGQgbm90IGhhcHBlbiBiZWNhdXNlIERVS19UQUdfT0JKRUNUIGNhc2UgY2hlY2tzCisJICog Zm9yIHRoaXMgYWxyZWFkeSwgYnV0IGNoZWNrIGp1c3QgaW4gY2FzZS4KKwkgKi8KKwlpZiAoRFVL X0hFQVBIRFJfSEFTX1JFQURPTkxZKChkdWtfaGVhcGhkciAqKSBvcmlnKSkgeworCQlnb3RvIGZh aWxfbm90X3dyaXRhYmxlOworCX0KKyNlbmRpZgorCisJLyogQWx0aG91Z2ggdGhlcmUgYXJlIHdy aXRhYmxlIHZpcnR1YWwgcHJvcGVydGllcyAoZS5nLiBwbGFpbiBidWZmZXIKKwkgKiBhbmQgYnVm ZmVyIG9iamVjdCBudW1iZXIgaW5kaWNlcyksIHRoZXkgYXJlIGhhbmRsZWQgYmVmb3JlIHdlIGNv bWUKKwkgKiBoZXJlLgorCSAqLworCURVS19BU1NFUlQoKGRlc2MuZmxhZ3MgJiBEVUtfUFJPUERF U0NfRkxBR19WSVJUVUFMKSA9PSAwKTsKKwlEVUtfQVNTRVJUKGRlc2MuYV9pZHggPj0gMCB8fCBk ZXNjLmVfaWR4ID49IDApOworCisJLyogQXJyYXkgb3duIHByb3BlcnR5IC5sZW5ndGggaXMgaGFu ZGxlZCBhYm92ZS4gKi8KKwlEVUtfQVNTRVJUKCEoRFVLX0hPQkpFQ1RfSVNfQVJSQVkob3JpZykg JiYga2V5ID09IERVS19IVEhSRUFEX1NUUklOR19MRU5HVEgodGhyKSkpOworCisJaWYgKGRlc2Mu ZV9pZHggPj0gMCkgeworCQl0diA9IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1RWQUxfUFRSKHRo ci0+aGVhcCwgb3JpZywgZGVzYy5lX2lkeCk7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJwcmV2 aW91cyBlbnRyeSB2YWx1ZTogJSFpVCIsIChkdWtfdHZhbCAqKSB0dikpOworCQlEVUtfVFZBTF9T RVRfVFZBTF9VUERSRUYodGhyLCB0diwgdHZfdmFsKTsgIC8qIHNpZGUgZWZmZWN0czsgZV9pZHgg bWF5IGJlIGludmFsaWRhdGVkICovCisJCS8qIGRvbid0IHRvdWNoIHByb3BlcnR5IGF0dHJpYnV0 ZXMgb3IgaGFzaCBwYXJ0ICovCisJCURVS19ERChEVUtfRERQUklOVCgicHV0IHRvIGFuIGV4aXN0 aW5nIGVudHJ5IGF0IGluZGV4ICVsZCAtPiBuZXcgdmFsdWUgJSFpVCIsCisJCSAgICAgICAgICAg ICAgICAgICAobG9uZykgZGVzYy5lX2lkeCwgKGR1a190dmFsICopIHR2KSk7CisJfSBlbHNlIHsK KwkJLyogTm90ZTogYXJyYXkgZW50cmllcyBhcmUgYWx3YXlzIHdyaXRhYmxlLCBzbyB0aGUgd3Jp dGFiaWxpdHkgY2hlY2sKKwkJICogYWJvdmUgaXMgcG9pbnRsZXNzIGZvciB0aGVtLiAgVGhlIGNo ZWNrIGNvdWxkIGJlIGF2b2lkZWQgd2l0aCBzb21lCisJCSAqIHJlZmFjdG9yaW5nIGJ1dCBpcyBw cm9iYWJseSBub3Qgd29ydGggaXQuCisJCSAqLworCisJCURVS19BU1NFUlQoZGVzYy5hX2lkeCA+ PSAwKTsKKwkJdHYgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCBvcmln LCBkZXNjLmFfaWR4KTsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInByZXZpb3VzIGFycmF5IHZh bHVlOiAlIWlUIiwgKGR1a190dmFsICopIHR2KSk7CisJCURVS19UVkFMX1NFVF9UVkFMX1VQRFJF Rih0aHIsIHR2LCB0dl92YWwpOyAgLyogc2lkZSBlZmZlY3RzOyBhX2lkeCBtYXkgYmUgaW52YWxp ZGF0ZWQgKi8KKwkJRFVLX0REKERVS19ERFBSSU5UKCJwdXQgdG8gYW4gZXhpc3RpbmcgYXJyYXkg ZW50cnkgYXQgaW5kZXggJWxkIC0+IG5ldyB2YWx1ZSAlIWlUIiwKKwkJICAgICAgICAgICAgICAg ICAgIChsb25nKSBkZXNjLmFfaWR4LCAoZHVrX3R2YWwgKikgdHYpKTsKKwl9CisKKwkvKiBSZWdh cmRsZXNzIG9mIHdoZXRoZXIgcHJvcGVydHkgaXMgZm91bmQgaW4gZW50cnkgb3IgYXJyYXkgcGFy dCwKKwkgKiBpdCBtYXkgaGF2ZSBhcmd1bWVudHMgZXhvdGljIGJlaGF2aW9yIChhcnJheSBpbmRp Y2VzIG1heSByZXNpZGUKKwkgKiBpbiBlbnRyeSBwYXJ0IGZvciBhYmFuZG9uZWQgLyBub24tZXhp c3RlbnQgYXJyYXkgcGFydHMpLgorCSAqLworCWdvdG8gc3VjY2Vzc193aXRoX2FyZ3VtZW50c19l eG90aWM7CisKKyBjcmVhdGVfbmV3OgorCisJLyoKKwkgKiAgQ3JlYXRlIGEgbmV3IHByb3BlcnR5 IGluIHRoZSBvcmlnaW5hbCBvYmplY3QuCisJICoKKwkgKiAgRXhvdGljIHByb3BlcnRpZXMgbmVl ZCB0byBiZSByZWNvbnNpZGVyZWQgaGVyZSBmcm9tIGEgd3JpdGUKKwkgKiAgcGVyc3BlY3RpdmUg KG5vdCBqdXN0IHByb3BlcnR5IGF0dHJpYnV0ZXMgcGVyc3BlY3RpdmUpLgorCSAqICBIb3dldmVy LCB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9iamVjdCBhbHJlYWR5LAorCSAq ICBzbyB0aGlzIGxpbWl0cyB0aGUga2luZCBvZiBleG90aWMgcHJvcGVydGllcyB0aGF0IGFwcGx5 LgorCSAqLworCisJLyogW2tleV0gKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJjcmVhdGUg bmV3IHByb3BlcnR5IHRvIG9yaWdpbmFsIG9iamVjdCIpKTsKKworCURVS19BU1NFUlQob3JpZyAh PSBOVUxMKTsKKworCS8qIEFycmF5IG93biBwcm9wZXJ0eSAubGVuZ3RoIGlzIGhhbmRsZWQgYWJv dmUuICovCisJRFVLX0FTU0VSVCghKERVS19IT0JKRUNUX0lTX0FSUkFZKG9yaWcpICYmIGtleSA9 PSBEVUtfSFRIUkVBRF9TVFJJTkdfTEVOR1RIKHRocikpKTsKKworI2lmIGRlZmluZWQoRFVLX1VT RV9ST01fT0JKRUNUUykKKwkvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGJlY2F1c2UgRFVLX1RB R19PQkpFQ1QgY2FzZSBjaGVja3MKKwkgKiBmb3IgdGhpcyBhbHJlYWR5LCBidXQgY2hlY2sganVz dCBpbiBjYXNlLgorCSAqLworCWlmIChEVUtfSEVBUEhEUl9IQVNfUkVBRE9OTFkoKGR1a19oZWFw aGRyICopIG9yaWcpKSB7CisJCWdvdG8gZmFpbF9ub3Rfd3JpdGFibGU7CisJfQorI2VuZGlmCisK KwkvKiBOb3QgcG9zc2libGUgYmVjYXVzZSBhcnJheSBvYmplY3QgJ2xlbmd0aCcgaXMgcHJlc2Vu dAorCSAqIGZyb20gaXRzIGNyZWF0aW9uIGFuZCBjYW5ub3QgYmUgZGVsZXRlZCwgYW5kIGlzIHRo dXMKKwkgKiBjYXVnaHQgYXMgYW4gZXhpc3RpbmcgcHJvcGVydHkgYWJvdmUuCisJICovCisJRFVL X0FTU0VSVCghKERVS19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkob3JpZykgJiYKKwkgICAgICAg ICAgICAga2V5ID09IERVS19IVEhSRUFEX1NUUklOR19MRU5HVEgodGhyKSkpOworCisJaWYgKERV S19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkob3JpZykgJiYKKwkgICAgYXJyX2lkeCAhPSBEVUtf X05PX0FSUkFZX0lOREVYKSB7CisJCS8qIGF1dG9tYXRpYyBsZW5ndGggdXBkYXRlICovCisJCWR1 a191aW50MzJfdCBvbGRfbGVuOworCQlkdWtfaGFycmF5ICphOworCisJCWEgPSAoZHVrX2hhcnJh eSAqKSBvcmlnOworCQlEVUtfQVNTRVJUX0hBUlJBWV9WQUxJRChhKTsKKworCQlvbGRfbGVuID0g YS0+bGVuZ3RoOworCisJCWlmIChhcnJfaWR4ID49IG9sZF9sZW4pIHsKKwkJCURVS19EREQoRFVL X0RERFBSSU5UKCJ3cml0ZSBuZXcgYXJyYXkgZW50cnkgcmVxdWlyZXMgbGVuZ3RoIHVwZGF0ZSAi CisJCQkgICAgICAgICAgICAgICAgICAgICAiKGFycl9pZHg9JWxkLCBvbGRfbGVuPSVsZCkiLAor CQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGFycl9pZHgsIChsb25nKSBvbGRfbGVuKSk7 CisKKwkJCWlmIChEVUtfSEFSUkFZX0xFTkdUSF9OT05XUklUQUJMRShhKSkgeworCQkJCURVS19E RChEVUtfRERQUklOVCgiYXR0ZW1wdCB0byBleHRlbmQgYXJyYXksIGJ1dCBhcnJheSAnbGVuZ3Ro JyBpcyBub3Qgd3JpdGFibGUiKSk7CisJCQkJZ290byBmYWlsX25vdF93cml0YWJsZTsKKwkJCX0K KworCQkJLyogTm90ZTogYWN0dWFsIHVwZGF0ZSBoYXBwZW5zIG9uY2Ugd3JpdGUgaGFzIGJlZW4g Y29tcGxldGVkCisJCQkgKiB3aXRob3V0IGVycm9yIGJlbG93LiAgVGhlIHdyaXRlIHNob3VsZCBh bHdheXMgc3VjY2VlZAorCQkJICogZnJvbSBhIHNwZWNpZmljYXRpb24gdmlld3BvaW50LCBidXQg d2UgbWF5IGUuZy4gcnVuIG91dAorCQkJICogb2YgbWVtb3J5LiAgSXQncyBzYWZlciBpbiB0aGlz IG9yZGVyLgorCQkJICovCisKKwkJCURVS19BU1NFUlQoYXJyX2lkeCAhPSAweGZmZmZmZmZmVUwp OworCQkJbmV3X2FycmF5X2xlbmd0aCA9IGFycl9pZHggKyAxOyAgLyogZmxhZyBmb3IgbGF0ZXIg d3JpdGUgKi8KKwkJfSBlbHNlIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ3cml0ZSBuZXcg YXJyYXkgZW50cnkgZG9lcyBub3QgcmVxdWlyZSBsZW5ndGggdXBkYXRlICIKKwkJCSAgICAgICAg ICAgICAgICAgICAgICIoYXJyX2lkeD0lbGQsIG9sZF9sZW49JWxkKSIsCisJCQkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgYXJyX2lkeCwgKGxvbmcpIG9sZF9sZW4pKTsKKwkJfQorCX0KKwor IC8qIHdyaXRlX3RvX2FycmF5X3BhcnQ6ICovCisKKwkvKgorCSAqICBXcml0ZSB0byBhcnJheSBw YXJ0PworCSAqCisJICogIE5vdGU6IGFycmF5IGFiYW5kb25kaW5nIHJlcXVpcmVzIGEgcHJvcGVy dHkgcmVzaXplIHdoaWNoIHVzZXMKKwkgKiAgJ3JlY2hlY2tzJyB2YWxzdGFjayBmb3IgdGVtcG9y YXJpZXMgYW5kIG1heSBjYXVzZSBhbnkgZXhpc3RpbmcKKwkgKiAgdmFsc3RhY2sgcG9pbnRlcnMg dG8gYmUgaW52YWxpZGF0ZWQuICBUbyBwcm90ZWN0IGFnYWluc3QgdGhpcywKKwkgKiAgdHZfb2Jq LCB0dl9rZXksIGFuZCB0dl92YWwgYXJlIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgaW5wdXRzLgor CSAqLworCisJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCAmJgorCSAgICBEVUtf SE9CSkVDVF9IQVNfQVJSQVlfUEFSVChvcmlnKSkgeworCQlpZiAoYXJyX2lkeCA8IERVS19IT0JK RUNUX0dFVF9BU0laRShvcmlnKSkgeworCQkJZ290byBub19hcnJheV9ncm93dGg7CisJCX0KKwor CQkvKgorCQkgKiAgQXJyYXkgbmVlZHMgdG8gZ3JvdywgYnV0IHdlIGRvbid0IHdhbnQgaXQgYmVj b21pbmcgdG9vIHNwYXJzZS4KKwkJICogIElmIGl0IHdlcmUgdG8gYmVjb21lIHNwYXJzZSwgYWJh bmRvbiBhcnJheSBwYXJ0LCBtb3ZpbmcgYWxsCisJCSAqICBhcnJheSBlbnRyaWVzIGludG8gdGhl IGVudHJpZXMgcGFydCAoZm9yIGdvb2QpLgorCQkgKgorCQkgKiAgU2luY2Ugd2UgZG9uJ3Qga2Vl cCB0cmFjayBvZiBhY3R1YWwgZGVuc2l0eSAodXNlZCB2cy4gc2l6ZSkgb2YKKwkJICogIHRoZSBh cnJheSBwYXJ0LCB3ZSBuZWVkIHRvIGVzdGltYXRlIHNvbWVob3cuICBUaGUgY2hlY2sgaXMgbWFk ZQorCQkgKiAgaW4gdHdvIHBhcnRzOgorCQkgKgorCQkgKiAgICAtIENoZWNrIHdoZXRoZXIgdGhl IHJlc2l6ZSBuZWVkIGlzIHNtYWxsIGNvbXBhcmVkIHRvIHRoZQorCQkgKiAgICAgIGN1cnJlbnQg c2l6ZSAocmVsYXRpdmVseSk7IGlmIHNvLCByZXNpemUgd2l0aG91dCBmdXJ0aGVyCisJCSAqICAg ICAgY2hlY2tpbmcgKGVzc2VudGlhbGx5IHdlIGFzc3VtZSB0aGF0IHRoZSBvcmlnaW5hbCBwYXJ0 IGlzCisJCSAqICAgICAgImRlbnNlIiBzbyB0aGF0IHRoZSByZXN1bHQgd291bGQgYmUgZGVuc2Ug ZW5vdWdoKS4KKwkJICoKKwkJICogICAgLSBPdGhlcndpc2UsIGNvbXB1dGUgdGhlIHJlc2l6ZSB1 c2luZyBhbiBhY3R1YWwgZGVuc2l0eQorCQkgKiAgICAgIG1lYXN1cmVtZW50IGJhc2VkIG9uIGNv dW50aW5nIHRoZSB1c2VkIGFycmF5IGVudHJpZXMuCisJCSAqLworCisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJ3cml0ZSB0byBuZXcgYXJyYXkgcmVxdWlyZXMgYXJyYXkgcmVzaXplLCBkZWNpZGUg d2hldGhlciB0byBkbyBhICIKKwkJICAgICAgICAgICAgICAgICAgICAgImZhc3QgcmVzaXplIHdp dGhvdXQgYWJhbmRvbiBjaGVjayAoYXJyX2lkeD0lbGQsIG9sZF9zaXplPSVsZCkiLAorCQkgICAg ICAgICAgICAgICAgICAgICAobG9uZykgYXJyX2lkeCwgKGxvbmcpIERVS19IT0JKRUNUX0dFVF9B U0laRShvcmlnKSkpOworCisJCWlmIChkdWtfX2FiYW5kb25fYXJyYXlfc2xvd19jaGVja19yZXF1 aXJlZChhcnJfaWR4LCBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob3JpZykpKSB7CisJCQlkdWtfdWlu dDMyX3Qgb2xkX3VzZWQ7CisJCQlkdWtfdWludDMyX3Qgb2xkX3NpemU7CisKKwkJCURVS19EREQo RFVLX0RERFBSSU5UKCI9PiBmYXN0IGNoZWNrIGlzIE5PVCBPSywgZG8gc2xvdyBjaGVjayBmb3Ig YXJyYXkgYWJhbmRvbiIpKTsKKworCQkJZHVrX19jb21wdXRlX2Ffc3RhdHModGhyLCBvcmlnLCAm b2xkX3VzZWQsICZvbGRfc2l6ZSk7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJhYmFuZG9u IGNoZWNrLCBhcnJheSBzdGF0czogb2xkX3VzZWQ9JWxkLCBvbGRfc2l6ZT0lbGQsIGFycl9pZHg9 JWxkIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBvbGRfdXNlZCwgKGxvbmcpIG9s ZF9zaXplLCAobG9uZykgYXJyX2lkeCkpOworCisJCQkvKiBOb3RlOiBpbnRlbnRpb25hbGx5IHVz ZSBhcHByb3hpbWF0aW9ucyB0byBzaGF2ZSBhIGZldyBpbnN0cnVjdGlvbnM6CisJCQkgKiAgIGFf dXNlZCA9IG9sZF91c2VkICAoYWNjdXJhdGU6IG9sZF91c2VkICsgMSkKKwkJCSAqICAgYV9zaXpl ID0gYXJyX2lkeCAgIChhY2N1cmF0ZTogYXJyX2lkeCArIDEpCisJCQkgKi8KKwkJCWlmIChkdWtf X2FiYW5kb25fYXJyYXlfZGVuc2l0eV9jaGVjayhvbGRfdXNlZCwgYXJyX2lkeCkpIHsKKwkJCQlE VUtfREQoRFVLX0REUFJJTlQoIndyaXRlIHRvIG5ldyBhcnJheSBlbnRyeSBiZXlvbmQgY3VycmVu dCBsZW5ndGgsICIKKwkJCQkgICAgICAgICAgICAgICAgICAgImRlY2lkZWQgdG8gYWJhbmRvbiBh cnJheSBwYXJ0ICh3b3VsZCBiZWNvbWUgdG9vIHNwYXJzZSkiKSk7CisKKwkJCQkvKiBhYmFuZG9u aW5nIHJlcXVpcmVzIGEgcHJvcHMgYWxsb2NhdGlvbiByZXNpemUgYW5kCisJCQkJICogJ3JlY2hl Y2tzJyB0aGUgdmFsc3RhY2ssIGludmFsaWRhdGluZyBhbnkgZXhpc3RpbmcKKwkJCQkgKiB2YWxz dGFjayB2YWx1ZSBwb2ludGVycyEKKwkJCQkgKi8KKwkJCQlkdWtfX2FiYW5kb25fYXJyYXlfY2hl Y2tlZCh0aHIsIG9yaWcpOworCQkJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19BUlJBWV9Q QVJUKG9yaWcpKTsKKworCQkJCWdvdG8gd3JpdGVfdG9fZW50cnlfcGFydDsKKwkJCX0KKworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoIj0+IGRlY2lkZWQgdG8ga2VlcCBhcnJheSBwYXJ0IikpOwor CQl9IGVsc2UgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIj0+IGZhc3QgcmVzaXplIGlzIE9L IikpOworCQl9CisKKwkJRFVLX0REKERVS19ERFBSSU5UKCJ3cml0ZSB0byBuZXcgYXJyYXkgZW50 cnkgYmV5b25kIGN1cnJlbnQgbGVuZ3RoLCAiCisJCSAgICAgICAgICAgICAgICAgICAiZGVjaWRl ZCB0byBleHRlbmQgY3VycmVudCBhbGxvY2F0aW9uIikpOworCisJCWR1a19fZ3Jvd19wcm9wc19m b3JfYXJyYXlfaXRlbSh0aHIsIG9yaWcsIGFycl9pZHgpOworCisJIG5vX2FycmF5X2dyb3d0aDoK KworCQkvKiBOb3RlOiBhc3N1bWUgYXJyYXkgcGFydCBpcyBjb21wcmVoZW5zaXZlLCBzbyB0aGF0 IGVpdGhlcgorCQkgKiB0aGUgd3JpdGUgZ29lcyB0byB0aGUgYXJyYXkgcGFydCwgb3Igd2UndmUg YWJhbmRvbmVkIHRoZQorCQkgKiBhcnJheSBhYm92ZSAoYW5kIHdpbGwgbm90IGNvbWUgaGVyZSku CisJCSAqLworCisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSEFTX0FSUkFZX1BBUlQob3JpZykp OworCQlEVUtfQVNTRVJUKGFycl9pZHggPCBEVUtfSE9CSkVDVF9HRVRfQVNJWkUob3JpZykpOwor CisJCXR2ID0gRFVLX0hPQkpFQ1RfQV9HRVRfVkFMVUVfUFRSKHRoci0+aGVhcCwgb3JpZywgYXJy X2lkeCk7CisJCS8qIHByZXYgdmFsdWUgbXVzdCBiZSB1bnVzZWQsIG5vIGRlY3JlZiAqLworCQlE VUtfQVNTRVJUKERVS19UVkFMX0lTX1VOVVNFRCh0dikpOworCQlEVUtfVFZBTF9TRVRfVFZBTCh0 diwgdHZfdmFsKTsKKwkJRFVLX1RWQUxfSU5DUkVGKHRociwgdHYpOworCQlEVUtfREQoRFVLX0RE UFJJTlQoInB1dCB0byBuZXcgYXJyYXkgZW50cnk6ICVsZCAtPiAlIVQiLAorCQkgICAgICAgICAg ICAgICAgICAgKGxvbmcpIGFycl9pZHgsIChkdWtfdHZhbCAqKSB0dikpOworCisJCS8qIE5vdGU6 IGFycmF5IHBhcnQgdmFsdWVzIGFyZSBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dLAorCQkg KiBhbmQgW1tDb25maWd1cmFibGVdXSB3aGljaCBtYXRjaGVzIHRoZSByZXF1aXJlZCBhdHRyaWJ1 dGVzCisJCSAqIGhlcmUuCisJCSAqLworCQlnb3RvIGVudHJ5X3VwZGF0ZWQ7CisJfQorCisgd3Jp dGVfdG9fZW50cnlfcGFydDoKKworCS8qCisJICogIFdyaXRlIHRvIGVudHJ5IHBhcnQKKwkgKi8K KworCS8qIGVudHJ5IGFsbG9jYXRpb24gdXBkYXRlcyBoYXNoIHBhcnQgYW5kIGluY3JlYXNlcyB0 aGUga2V5CisJICogcmVmY291bnQ7IG1heSBuZWVkIGEgcHJvcHMgYWxsb2NhdGlvbiByZXNpemUg YnV0IGRvZXNuJ3QKKwkgKiAncmVjaGVjaycgdGhlIHZhbHN0YWNrLgorCSAqLworCWVfaWR4ID0g ZHVrX19ob2JqZWN0X2FsbG9jX2VudHJ5X2NoZWNrZWQodGhyLCBvcmlnLCBrZXkpOworCURVS19B U1NFUlQoZV9pZHggPj0gMCk7CisKKwl0diA9IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1RWQUxf UFRSKHRoci0+aGVhcCwgb3JpZywgZV9pZHgpOworCS8qIHByZXYgdmFsdWUgY2FuIGJlIGdhcmJh Z2UsIG5vIGRlY3JlZiAqLworCURVS19UVkFMX1NFVF9UVkFMKHR2LCB0dl92YWwpOworCURVS19U VkFMX0lOQ1JFRih0aHIsIHR2KTsKKwlEVUtfSE9CSkVDVF9FX1NFVF9GTEFHUyh0aHItPmhlYXAs IG9yaWcsIGVfaWR4LCBEVUtfUFJPUERFU0NfRkxBR1NfV0VDKTsKKwlnb3RvIGVudHJ5X3VwZGF0 ZWQ7CisKKyBlbnRyeV91cGRhdGVkOgorCisJLyoKKwkgKiAgUG9zc2libGUgcGVuZGluZyBhcnJh eSBsZW5ndGggdXBkYXRlLCB3aGljaCBtdXN0IG9ubHkgYmUgZG9uZQorCSAqICBpZiB0aGUgYWN0 dWFsIGVudHJ5IHdyaXRlIHN1Y2NlZWRlZC4KKwkgKi8KKworCWlmIChuZXdfYXJyYXlfbGVuZ3Ro ID4gMCkgeworCQkvKiBOb3RlOiB6ZXJvIHdvcmtzIGFzIGEgIm5vIHVwZGF0ZSIgbWFya2VyIGJl Y2F1c2UgdGhlIG5ldyBsZW5ndGgKKwkJICogY2FuIG5ldmVyIGJlIHplcm8gYWZ0ZXIgYSBuZXcg cHJvcGVydHkgaXMgd3JpdHRlbi4KKwkJICovCisKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9I QVNfRVhPVElDX0FSUkFZKG9yaWcpKTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgid3JpdGUg c3VjY2Vzc2Z1bCwgcGVuZGluZyBhcnJheSBsZW5ndGggdXBkYXRlIHRvOiAlbGQiLAorCQkgICAg ICAgICAgICAgICAgICAgICAobG9uZykgbmV3X2FycmF5X2xlbmd0aCkpOworCisJCSgoZHVrX2hh cnJheSAqKSBvcmlnKS0+bGVuZ3RoID0gbmV3X2FycmF5X2xlbmd0aDsKKwl9CisKKwkvKgorCSAq ICBBcmd1bWVudHMgZXhvdGljIGJlaGF2aW9yIG5vdCBwb3NzaWJsZSBmb3IgbmV3IHByb3BlcnRp ZXM6IGFsbAorCSAqICBtYWdpY2FsbHkgYm91bmQgcHJvcGVydGllcyBhcmUgaW5pdGlhbGx5IHBy ZXNlbnQgaW4gdGhlIGFyZ3VtZW50cworCSAqICBvYmplY3QsIGFuZCBpZiB0aGV5IGFyZSBkZWxl dGVkLCB0aGUgYmluZGluZyBpcyBhbHNvIHJlbW92ZWQgZnJvbQorCSAqICBwYXJhbWV0ZXIgbWFw LgorCSAqLworCisJZ290byBzdWNjZXNzX25vX2FyZ3VtZW50c19leG90aWM7CisKKyBzdWNjZXNz X3dpdGhfYXJndW1lbnRzX2V4b3RpYzoKKworCS8qCisJICogIEFyZ3VtZW50cyBvYmplY3RzIGhh dmUgZXhvdGljIFtbRGVmaW5lT3duUHJvcGVydHldXSB3aGljaCB1cGRhdGVzCisJICogIHRoZSBp bnRlcm5hbCAnbWFwJyBvZiBhcmd1bWVudHMgZm9yIHdyaXRlcyB0byBjdXJyZW50bHkgbWFwcGVk CisJICogIGFyZ3VtZW50cy4gIE1vcmUgY29ucmV0ZWx5LCB3cml0ZXMgdG8gbWFwcGVkIGFyZ3Vt ZW50cyBnZW5lcmF0ZQorCSAqICBhIHdyaXRlIHRvIGEgYm91bmQgdmFyaWFibGUuCisJICoKKwkg KiAgVGhlIFtbUHV0XV0gYWxnb3JpdGhtIGludm9rZXMgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGZv ciBleGlzdGluZworCSAqICBkYXRhIHByb3BlcnRpZXMgYW5kIG5ldyBwcm9wZXJ0aWVzLCBidXQg bm90IGZvciBleGlzdGluZyBhY2Nlc3NvcnMuCisJICogIEhlbmNlLCBpbiBFNSBTZWN0aW9uIDEw LjYgKFtbRGVmaW5lZE93blByb3BlcnR5XV0gYWxnb3JpdGhtKSwgd2UKKwkgKiAgaGF2ZSBhIERl c2Mgd2l0aCAnVmFsdWUnIChhbmQgcG9zc2libHkgb3RoZXIgcHJvcGVydGllcyB0b28pLCBhbmQK KwkgKiAgd2UgZW5kIHVwIGluIHN0ZXAgNS5iLmkuCisJICovCisKKwlpZiAoYXJyX2lkeCAhPSBE VUtfX05PX0FSUkFZX0lOREVYICYmCisJICAgIERVS19IT0JKRUNUX0hBU19FWE9USUNfQVJHVU1F TlRTKG9yaWcpKSB7CisJCS8qIE5vdGU6IG9ubHkgbnVtYmVyZWQgaW5kaWNlcyBhcmUgcmVsZXZh bnQsIHNvIGFycl9pZHggZmFzdCByZWplY3QKKwkJICogaXMgZ29vZCAodGhpcyBpcyB2YWxpZCB1 bmxlc3MgdGhlcmUgYXJlIG1vcmUgdGhhbiA0KiozMi0xIGFyZ3VtZW50cykuCisJCSAqLworCisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJwdXRwcm9wIHN1Y2Nlc3NmdWwsIGFyZ3VtZW50cyBleG90 aWMgYmVoYXZpb3IgbmVlZGVkIikpOworCisJCS8qIE5vdGU6IHdlIGNhbiByZXVzZSAnZGVzYycg aGVyZSAqLworCisJCS8qIFhYWDogdG9wIG9mIHN0YWNrIG11c3QgY29udGFpbiB2YWx1ZSwgd2hp Y2ggaGVscGVyIGRvZXNuJ3QgdG91Y2gsCisJCSAqIHJld29yayB0byB1c2UgdHZfdmFsIGRpcmVj dGx5PworCQkgKi8KKworCQlkdWtfcHVzaF90dmFsKHRociwgdHZfdmFsKTsKKwkJKHZvaWQpIGR1 a19fY2hlY2tfYXJndW1lbnRzX21hcF9mb3JfcHV0KHRociwgb3JpZywga2V5LCAmZGVzYywgdGhy b3dfZmxhZyk7CisJCWR1a19wb3BfdW5zYWZlKHRocik7CisJfQorCS8qIGZhbGwgdGhydSAqLwor Cisgc3VjY2Vzc19ub19hcmd1bWVudHNfZXhvdGljOgorCS8qIHNoYXJlZCBleGl0IHBhdGggbm93 ICovCisJRFVLX0RERChEVUtfREREUFJJTlQoInJlc3VsdDogc3VjY2VzcyIpKTsKKwlkdWtfcG9w X3Vuc2FmZSh0aHIpOyAgLyogcmVtb3ZlIGtleSAqLworCXJldHVybiAxOworCisjaWYgZGVmaW5l ZChEVUtfVVNFX0VTNl9QUk9YWSkKKyBmYWlsX3Byb3h5X3JlamVjdGVkOgorCURVS19EREQoRFVL X0RERFBSSU5UKCJyZXN1bHQ6IGVycm9yLCBwcm94eSByZWplY3RzIikpOworCWlmICh0aHJvd19m bGFnKSB7CisJCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9QUk9YWV9SRUpFQ1RFRCk7CisJ CURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKwkvKiBOb3RlOiBubyBrZXkgb24gc3Rh Y2sgKi8KKwlyZXR1cm4gMDsKKyNlbmRpZgorCisgZmFpbF9iYXNlX3ByaW1pdGl2ZToKKwlEVUtf REREKERVS19ERERQUklOVCgicmVzdWx0OiBlcnJvciwgYmFzZSBwcmltaXRpdmUiKSk7CisJaWYg KHRocm93X2ZsYWcpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfUEFSQU5PSURfRVJST1JTKQorCQlE VUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfSU5WQUxJRF9CQVNFKTsKKyNlbHNlCisJCURVS19F UlJPUl9GTVQyKHRociwgRFVLX0VSUl9UWVBFX0VSUk9SLCAiY2Fubm90IHdyaXRlIHByb3BlcnR5 ICVzIG9mICVzIiwKKwkJICAgICAgICAgICAgICAgZHVrX3B1c2hfc3RyaW5nX3R2YWxfcmVhZGFi bGUodGhyLCB0dl9rZXkpLCBkdWtfcHVzaF9zdHJpbmdfdHZhbF9yZWFkYWJsZSh0aHIsIHR2X29i aikpOworI2VuZGlmCisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKwlkdWtfcG9w X3Vuc2FmZSh0aHIpOyAgLyogcmVtb3ZlIGtleSAqLworCXJldHVybiAwOworCisgZmFpbF9ub3Rf ZXh0ZW5zaWJsZToKKwlEVUtfREREKERVS19ERERQUklOVCgicmVzdWx0OiBlcnJvciwgbm90IGV4 dGVuc2libGUiKSk7CisJaWYgKHRocm93X2ZsYWcpIHsKKwkJRFVLX0VSUk9SX1RZUEUodGhyLCBE VUtfU1RSX05PVF9FWFRFTlNJQkxFKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJ fQorCWR1a19wb3BfdW5zYWZlKHRocik7ICAvKiByZW1vdmUga2V5ICovCisJcmV0dXJuIDA7CisK KyBmYWlsX25vdF93cml0YWJsZToKKwlEVUtfREREKERVS19ERERQUklOVCgicmVzdWx0OiBlcnJv ciwgbm90IHdyaXRhYmxlIikpOworCWlmICh0aHJvd19mbGFnKSB7CisJCURVS19FUlJPUl9UWVBF KHRociwgRFVLX1NUUl9OT1RfV1JJVEFCTEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7 KTsKKwl9CisJZHVrX3BvcF91bnNhZmUodGhyKTsgIC8qIHJlbW92ZSBrZXkgKi8KKwlyZXR1cm4g MDsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01fT0JKRUNUUykKKyBmYWlsX25vdF93cml0YWJs ZV9ub19wb3A6CisJRFVLX0RERChEVUtfREREUFJJTlQoInJlc3VsdDogZXJyb3IsIG5vdCB3cml0 YWJsZSIpKTsKKwlpZiAodGhyb3dfZmxhZykgeworCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19T VFJfTk9UX1dSSVRBQkxFKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJfQorCXJl dHVybiAwOworI2VuZGlmCisKKyBmYWlsX2FycmF5X2xlbmd0aF9wYXJ0aWFsOgorCURVS19ERChE VUtfRERQUklOVCgicmVzdWx0OiBlcnJvciwgYXJyYXkgbGVuZ3RoIHdyaXRlIG9ubHkgcGFydGlh bGx5IHN1Y2Nlc3NmdWwiKSk7CisJaWYgKHRocm93X2ZsYWcpIHsKKwkJRFVLX0VSUk9SX1RZUEUo dGhyLCBEVUtfU1RSX05PVF9DT05GSUdVUkFCTEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJu IDA7KTsKKwl9CisJZHVrX3BvcF91bnNhZmUodGhyKTsgIC8qIHJlbW92ZSBrZXkgKi8KKwlyZXR1 cm4gMDsKKworIGZhaWxfbm9fc2V0dGVyOgorCURVS19EREQoRFVLX0RERFBSSU5UKCJyZXN1bHQ6 IGVycm9yLCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRob3V0IHNldHRlciIpKTsKKwlpZiAodGhyb3df ZmxhZykgeworCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfU0VUVEVSX1VOREVGSU5FRCk7 CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0KKwlkdWtfcG9wX3Vuc2FmZSh0aHIp OyAgLyogcmVtb3ZlIGtleSAqLworCXJldHVybiAwOworCisgZmFpbF9pbnRlcm5hbDoKKwlEVUtf REREKERVS19ERERQUklOVCgicmVzdWx0OiBlcnJvciwgaW50ZXJuYWwiKSk7CisJaWYgKHRocm93 X2ZsYWcpIHsKKwkJRFVLX0VSUk9SX0lOVEVSTkFMKHRocik7CisJCURVS19XT19OT1JFVFVSTihy ZXR1cm4gMDspOworCX0KKwlkdWtfcG9wX3Vuc2FmZSh0aHIpOyAgLyogcmVtb3ZlIGtleSAqLwor CXJldHVybiAwOworfQorCisvKgorICogIEVDTUFTY3JpcHQgY29tcGxpYW50IFtbRGVsZXRlXV0o UCwgVGhyb3cpLgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X2Rl bHByb3BfcmF3KGR1a19odGhyZWFkICp0aHIsIGR1a19ob2JqZWN0ICpvYmosIGR1a19oc3RyaW5n ICprZXksIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtfcHJvcGRlc2MgZGVzYzsKKwlk dWtfdHZhbCAqdHY7CisJZHVrX3VpbnQzMl90IGFycl9pZHg7CisJZHVrX2Jvb2xfdCB0aHJvd19m bGFnOworCWR1a19ib29sX3QgZm9yY2VfZmxhZzsKKworCXRocm93X2ZsYWcgPSAoZmxhZ3MgJiBE VUtfREVMUFJPUF9GTEFHX1RIUk9XKTsKKwlmb3JjZV9mbGFnID0gKGZsYWdzICYgRFVLX0RFTFBS T1BfRkxBR19GT1JDRSk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZGVscHJvcF9yYXc6IHRo cj0lcCwgb2JqPSVwLCBrZXk9JXAsIHRocm93PSVsZCwgZm9yY2U9JWxkIChvYmogLT4gJSFPLCBr ZXkgLT4gJSFPKSIsCisJICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLCAodm9pZCAq KSBvYmosICh2b2lkICopIGtleSwgKGxvbmcpIHRocm93X2ZsYWcsIChsb25nKSBmb3JjZV9mbGFn LAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBvYmosIChkdWtfaGVhcGhk ciAqKSBrZXkpKTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhy LT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19BU1NFUlQo a2V5ICE9IE5VTEwpOworCisJRFVLX0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIsIERVS19fVkFM U1RBQ0tfU1BBQ0UpOworCisJYXJyX2lkeCA9IERVS19IU1RSSU5HX0dFVF9BUlJJRFhfRkFTVChr ZXkpOworCisJLyogMCA9IGRvbid0IHB1c2ggY3VycmVudCB2YWx1ZSAqLworCWlmICghZHVrX19n ZXRfb3duX3Byb3BkZXNjX3Jhdyh0aHIsIG9iaiwga2V5LCBhcnJfaWR4LCAmZGVzYywgMCAvKmZs YWdzKi8pKSB7ICAvKiBkb24ndCBwdXNoIHZhbHVlICovCisJCURVS19EREQoRFVLX0RERFBSSU5U KCJwcm9wZXJ0eSBub3QgZm91bmQsIHN1Y2NlZWQgYWx3YXlzIikpOworCQlnb3RvIHN1Y2Nlc3M7 CisJfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX1JPTV9PQkpFQ1RTKQorCWlmIChEVUtfSEVBUEhE Ul9IQVNfUkVBRE9OTFkoKGR1a19oZWFwaGRyICopIG9iaikpIHsKKwkJRFVLX0REKERVS19ERFBS SU5UKCJhdHRlbXB0IHRvIGRlbHByb3Agb24gcmVhZC1vbmx5IHRhcmdldCBvYmplY3QiKSk7CisJ CWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxlOworCX0KKyNlbmRpZgorCisJaWYgKChkZXNjLmZs YWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKSA9PSAwICYmICFmb3JjZV9mbGFn KSB7CisJCWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxlOworCX0KKwlpZiAoZGVzYy5hX2lkeCA8 IDAgJiYgZGVzYy5lX2lkeCA8IDApIHsKKwkJLyogQ3VycmVudGx5IHRoZXJlIGFyZSBubyBkZWxl dGFibGUgdmlydHVhbCBwcm9wZXJ0aWVzLCBidXQKKwkJICogd2l0aCBmb3JjZV9mbGFnIHdlIG1p Z2h0IGF0dGVtcHQgdG8gZGVsZXRlIG9uZS4KKwkJICovCisJCURVS19ERChEVUtfRERQUklOVCgi ZGVsZXRlIGZhaWxlZDogcHJvcGVydHkgZm91bmQsIGZvcmNlIGZsYWcsIGJ1dCB2aXJ0dWFsIChh bmQgaW1wbGljaXRseSBub24tY29uZmlndXJhYmxlKSIpKTsKKwkJZ290byBmYWlsX3ZpcnR1YWw7 CisJfQorCisJaWYgKGRlc2MuYV9pZHggPj0gMCkgeworCQlEVUtfQVNTRVJUKGRlc2MuZV9pZHgg PCAwKTsKKworCQl0diA9IERVS19IT0JKRUNUX0FfR0VUX1ZBTFVFX1BUUih0aHItPmhlYXAsIG9i aiwgZGVzYy5hX2lkeCk7CisJCURVS19UVkFMX1NFVF9VTlVTRURfVVBEUkVGKHRociwgdHYpOyAg Lyogc2lkZSBlZmZlY3RzICovCisJCWdvdG8gc3VjY2VzczsKKwl9IGVsc2UgeworCQlEVUtfQVNT RVJUKGRlc2MuYV9pZHggPCAwKTsKKworCQkvKiByZW1vdmUgaGFzaCBlbnRyeSAobm8gZGVjcmVm KSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9IT0JKRUNUX0hBU0hfUEFSVCkKKwkJaWYgKGRlc2Mu aF9pZHggPj0gMCkgeworCQkJZHVrX3VpbnQzMl90ICpoX2Jhc2UgPSBEVUtfSE9CSkVDVF9IX0dF VF9CQVNFKHRoci0+aGVhcCwgb2JqKTsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJlbW92 aW5nIGhhc2ggZW50cnkgYXQgaF9pZHggJWxkIiwgKGxvbmcpIGRlc2MuaF9pZHgpKTsKKwkJCURV S19BU1NFUlQoRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKG9iaikgPiAwKTsKKwkJCURVS19BU1NFUlQo KGR1a191aW50MzJfdCkgZGVzYy5oX2lkeCA8IERVS19IT0JKRUNUX0dFVF9IU0laRShvYmopKTsK KwkJCWhfYmFzZVtkZXNjLmhfaWR4XSA9IERVS19fSEFTSF9ERUxFVEVEOworCQl9IGVsc2Ugewor CQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfSFNJWkUob2JqKSA9PSAwKTsKKwkJfQorI2Vs c2UKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfSFNJWkUob2JqKSA9PSAwKTsKKyNlbmRp ZgorCisJCS8qIFJlbW92ZSB2YWx1ZS4gIFRoaXMgcmVxdWlyZXMgbXVsdGlwbGUgd3JpdGVzIHNv IGF2b2lkIHNpZGUKKwkJICogZWZmZWN0cyB2aWEgbm8tcmVmemVybyBtYWNyb3Mgc28gdGhhdCBl X2lkeCBpcyBub3QKKwkJICogaW52YWxpZGF0ZWQuCisJCSAqLworCQlEVUtfREREKERVS19ERERQ UklOVCgiYmVmb3JlIHJlbW92aW5nIHZhbHVlLCBlX2lkeCAlbGQsIGtleSAlcCwga2V5IGF0IHNs b3QgJXAiLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgZGVzYy5lX2lkeCwgKHZvaWQg Kikga2V5LCAodm9pZCAqKSBEVUtfSE9CSkVDVF9FX0dFVF9LRVkodGhyLT5oZWFwLCBvYmosIGRl c2MuZV9pZHgpKSk7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJyZW1vdmluZyB2YWx1ZSBhdCBl X2lkeCAlbGQiLCAobG9uZykgZGVzYy5lX2lkeCkpOworCQlpZiAoRFVLX0hPQkpFQ1RfRV9TTE9U X0lTX0FDQ0VTU09SKHRoci0+aGVhcCwgb2JqLCBkZXNjLmVfaWR4KSkgeworCQkJZHVrX2hvYmpl Y3QgKnRtcDsKKworCQkJdG1wID0gRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfR0VUVEVSKHRoci0+ aGVhcCwgb2JqLCBkZXNjLmVfaWR4KTsKKwkJCURVS19IT0JKRUNUX0VfU0VUX1ZBTFVFX0dFVFRF Uih0aHItPmhlYXAsIG9iaiwgZGVzYy5lX2lkeCwgTlVMTCk7CisJCQlEVUtfVU5SRUYodG1wKTsK KwkJCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX0FMTE9XTlVMTCh0aHIsIHRtcCk7CisKKwkJCXRt cCA9IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVFX1NFVFRFUih0aHItPmhlYXAsIG9iaiwgZGVzYy5l X2lkeCk7CisJCQlEVUtfSE9CSkVDVF9FX1NFVF9WQUxVRV9TRVRURVIodGhyLT5oZWFwLCBvYmos IGRlc2MuZV9pZHgsIE5VTEwpOworCQkJRFVLX1VOUkVGKHRtcCk7CisJCQlEVUtfSE9CSkVDVF9E RUNSRUZfTk9SWl9BTExPV05VTEwodGhyLCB0bXApOworCQl9IGVsc2UgeworCQkJdHYgPSBEVUtf SE9CSkVDVF9FX0dFVF9WQUxVRV9UVkFMX1BUUih0aHItPmhlYXAsIG9iaiwgZGVzYy5lX2lkeCk7 CisJCQlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRl9OT1JaKHRociwgdHYpOworCQl9Cisj aWYgMAorCQkvKiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJlY2F1c2UgaWYga2V5ID09IE5VTEws IGZsYWcgTVVTVCBiZSBpZ25vcmVkLiAqLworCQlEVUtfSE9CSkVDVF9FX1NFVF9GTEFHUyh0aHIt PmhlYXAsIG9iaiwgZGVzYy5lX2lkeCwgMCk7CisjZW5kaWYKKworCQkvKiBSZW1vdmUga2V5LiAq LworCQlEVUtfREREKERVS19ERERQUklOVCgiYmVmb3JlIHJlbW92aW5nIGtleSwgZV9pZHggJWxk LCBrZXkgJXAsIGtleSBhdCBzbG90ICVwIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IGRlc2MuZV9pZHgsICh2b2lkICopIGtleSwgKHZvaWQgKikgRFVLX0hPQkpFQ1RfRV9HRVRfS0VZ KHRoci0+aGVhcCwgb2JqLCBkZXNjLmVfaWR4KSkpOworCQlEVUtfREREKERVS19ERERQUklOVCgi cmVtb3Zpbmcga2V5IGF0IGVfaWR4ICVsZCIsIChsb25nKSBkZXNjLmVfaWR4KSk7CisJCURVS19B U1NFUlQoa2V5ID09IERVS19IT0JKRUNUX0VfR0VUX0tFWSh0aHItPmhlYXAsIG9iaiwgZGVzYy5l X2lkeCkpOworCQlEVUtfSE9CSkVDVF9FX1NFVF9LRVkodGhyLT5oZWFwLCBvYmosIGRlc2MuZV9p ZHgsIE5VTEwpOworCQlEVUtfSFNUUklOR19ERUNSRUZfTk9SWih0aHIsIGtleSk7CisKKwkJLyog VHJpZ2dlciByZWZ6ZXJvIHNpZGUgZWZmZWN0cyBvbmx5IHdoZW4gd2UncmUgZG9uZSBhcyBhCisJ CSAqIGZpbmFsaXplciBtaWdodCBvcGVyYXRlIG9uIHRoZSBvYmplY3QgYW5kIGFmZmVjdCB0aGUK KwkJICogZV9pZHggd2UncmUgc3VwcG9zZWQgdG8gdXNlLgorCQkgKi8KKwkJRFVLX1JFRlpFUk9f Q0hFQ0tfU0xPVyh0aHIpOworCQlnb3RvIHN1Y2Nlc3M7CisJfQorCisJRFVLX1VOUkVBQ0hBQkxF KCk7CisKKyBzdWNjZXNzOgorCS8qCisJICogIEFyZ3VtZW50IGV4b3RpYyBbW0RlbGV0ZV1dIGJl aGF2aW9yIChFNSBTZWN0aW9uIDEwLjYpIGlzCisJICogIGEgcG9zdC1jaGVjaywga2VlcGluZyBh cmd1bWVudHMgaW50ZXJuYWwgJ21hcCcgaW4gc3luYyB3aXRoCisJICogIGFueSBzdWNjZXNzZnVs IGRlbGV0ZXMgKG5vdGUgdGhhdCBwcm9wZXJ0eSBkb2VzIG5vdCBuZWVkIHRvCisJICogIGV4aXN0 IGZvciBkZWxldGUgdG8gJ3N1Y2NlZWQnKS4KKwkgKgorCSAqICBEZWxldGUga2V5IGZyb20gJ21h cCcuICBTaW5jZSAnbWFwJyBvbmx5IGNvbnRhaW5zIGFycmF5IGluZGV4CisJICogIGtleXMsIHdl IGNhbiB1c2UgYXJyX2lkeCBmb3IgYSBmYXN0IHNraXAuCisJICovCisKKwlEVUtfREREKERVS19E RERQUklOVCgiZGVsZXRlIHN1Y2Nlc3NmdWwsIGNoZWNrIGZvciBhcmd1bWVudHMgZXhvdGljIGJl aGF2aW9yIikpOworCisJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCAmJiBEVUtf SE9CSkVDVF9IQVNfRVhPVElDX0FSR1VNRU5UUyhvYmopKSB7CisJCS8qIE5vdGU6IG9ubHkgbnVt YmVyZWQgaW5kaWNlcyBhcmUgcmVsZXZhbnQsIHNvIGFycl9pZHggZmFzdCByZWplY3QKKwkJICog aXMgZ29vZCAodGhpcyBpcyB2YWxpZCB1bmxlc3MgdGhlcmUgYXJlIG1vcmUgdGhhbiA0KiozMi0x IGFyZ3VtZW50cykuCisJCSAqLworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJkZWxldGUgc3Vj Y2Vzc2Z1bCwgYXJndW1lbnRzIGV4b3RpYyBiZWhhdmlvciBuZWVkZWQiKSk7CisKKwkJLyogTm90 ZTogd2UgY2FuIHJldXNlICdkZXNjJyBoZXJlICovCisJCSh2b2lkKSBkdWtfX2NoZWNrX2FyZ3Vt ZW50c19tYXBfZm9yX2RlbGV0ZSh0aHIsIG9iaiwga2V5LCAmZGVzYyk7CisJfQorCisJRFVLX0RE RChEVUtfREREUFJJTlQoImRlbGV0ZSBzdWNjZXNzZnVsIikpOworCXJldHVybiAxOworCisgZmFp bF92aXJ0dWFsOiAgLyoganVzdCB1c2UgdGhlIHNhbWUgIm5vdCBjb25maWd1cmFibGUiIGVycm9y IG1lc3NhZ2UgKi8KKyBmYWlsX25vdF9jb25maWd1cmFibGU6CisJRFVLX0RERChEVUtfREREUFJJ TlQoImRlbGV0ZSBmYWlsZWQ6IHByb3BlcnR5IGZvdW5kLCBub3QgY29uZmlndXJhYmxlIikpOwor CisJaWYgKHRocm93X2ZsYWcpIHsKKwkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX05PVF9D T05GSUdVUkFCTEUpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwl9CisJcmV0dXJu IDA7Cit9CisKKy8qCisgKiAgREVMUFJPUDogRUNNQVNjcmlwdCBwcm9wZXJ0eSBkZWxldGlvbi4K KyAqLworCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9kZWxwcm9wKGR1a19o dGhyZWFkICp0aHIsIGR1a190dmFsICp0dl9vYmosIGR1a190dmFsICp0dl9rZXksIGR1a19ib29s X3QgdGhyb3dfZmxhZykgeworCWR1a19oc3RyaW5nICprZXkgPSBOVUxMOworI2lmIGRlZmluZWQo RFVLX1VTRV9FUzZfUFJPWFkpCisJZHVrX3Byb3BkZXNjIGRlc2M7CisjZW5kaWYKKwlkdWtfaW50 X3QgZW50cnlfdG9wOworCWR1a191aW50MzJfdCBhcnJfaWR4ID0gRFVLX19OT19BUlJBWV9JTkRF WDsKKwlkdWtfYm9vbF90IHJjOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImRlbHByb3A6IHRo cj0lcCwgb2JqPSVwLCBrZXk9JXAgKG9iaiAtPiAlIVQsIGtleSAtPiAlIVQpIiwKKwkgICAgICAg ICAgICAgICAgICAgICAodm9pZCAqKSB0aHIsICh2b2lkICopIHR2X29iaiwgKHZvaWQgKikgdHZf a2V5LAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSB0dl9vYmosIChkdWtfdHZh bCAqKSB0dl9rZXkpKTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQo dGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQodHZfb2JqICE9IE5VTEwpOworCURVS19B U1NFUlQodHZfa2V5ICE9IE5VTEwpOworCisJRFVLX0FTU0VSVF9WQUxTVEFDS19TUEFDRSh0aHIs IERVS19fVkFMU1RBQ0tfU1BBQ0UpOworCisJLyogU3RvcmluZyB0aGUgZW50cnkgdG9wIGlzIGNo ZWFwZXIgaGVyZSB0byBlbnN1cmUgc3RhY2sgaXMgY29ycmVjdCBhdCBleGl0LAorCSAqIGFzIHRo ZXJlIGFyZSBzZXZlcmFsIHBhdGhzIG91dC4KKwkgKi8KKwllbnRyeV90b3AgPSBkdWtfZ2V0X3Rv cCh0aHIpOworCisJaWYgKERVS19UVkFMX0lTX1VOREVGSU5FRCh0dl9vYmopIHx8CisJICAgIERV S19UVkFMX0lTX05VTEwodHZfb2JqKSkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiYmFzZSBv YmplY3QgaXMgdW5kZWZpbmVkIG9yIG51bGwgLT4gcmVqZWN0IikpOworCQlnb3RvIGZhaWxfaW52 YWxpZF9iYXNlX3VuY29uZDsKKwl9CisKKwlkdWtfcHVzaF90dmFsKHRociwgdHZfb2JqKTsKKwlk dWtfcHVzaF90dmFsKHRociwgdHZfa2V5KTsKKworCXR2X29iaiA9IERVS19HRVRfVFZBTF9ORUdJ RFgodGhyLCAtMik7CisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0dl9vYmopKSB7CisJCWR1a19o b2JqZWN0ICpvYmogPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X29iaik7CisJCURVS19BU1NFUlQo b2JqICE9IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKwkJaWYgKERV S19VTkxJS0VMWShEVUtfSE9CSkVDVF9JU19QUk9YWShvYmopKSkgeworCQkJZHVrX2hvYmplY3Qg KmhfdGFyZ2V0OworCQkJZHVrX2Jvb2xfdCB0bXBfYm9vbDsKKworCQkJLyogTm90ZTogcHJveHkg aGFuZGxpbmcgbXVzdCBoYXBwZW4gYmVmb3JlIGtleSBpcyBzdHJpbmcgY29lcmNlZC4gKi8KKwor CQkJaWYgKGR1a19fcHJveHlfY2hlY2tfcHJvcCh0aHIsIG9iaiwgRFVLX1NUUklEWF9ERUxFVEVf UFJPUEVSVFksIHR2X2tleSwgJmhfdGFyZ2V0KSkgeworCQkJCS8qIC0+IFsgLi4uIG9iaiBrZXkg dHJhcCBoYW5kbGVyIF0gKi8KKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiLT4gcHJveHkgb2Jq ZWN0ICdkZWxldGVQcm9wZXJ0eScgZm9yIGtleSAlIVQiLCAoZHVrX3R2YWwgKikgdHZfa2V5KSk7 CisJCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIGhfdGFyZ2V0KTsgIC8qIHRhcmdldCAqLworCQkJ CWR1a19kdXBfbTQodGhyKTsgIC8qIFAgKi8KKwkJCQlkdWtfY2FsbF9tZXRob2QodGhyLCAyIC8q bmFyZ3MqLyk7CisJCQkJdG1wX2Jvb2wgPSBkdWtfdG9fYm9vbGVhbl90b3BfcG9wKHRocik7CisJ CQkJaWYgKCF0bXBfYm9vbCkgeworCQkJCQlnb3RvIGZhaWxfcHJveHlfcmVqZWN0ZWQ7ICAvKiBy ZXR2YWwgaW5kaWNhdGVzIGRlbGV0ZSBmYWlsZWQgKi8KKwkJCQl9CisKKwkJCQkvKiBUYXJnZXQg b2JqZWN0IG11c3QgYmUgY2hlY2tlZCBmb3IgYSBjb25mbGljdGluZworCQkJCSAqIG5vbi1jb25m aWd1cmFibGUgcHJvcGVydHkuCisJCQkJICovCisJCQkJdHZfa2V5ID0gRFVLX0dFVF9UVkFMX05F R0lEWCh0aHIsIC0xKTsKKwkJCQlhcnJfaWR4ID0gZHVrX19wdXNoX3R2YWxfdG9fcHJvcGVydHlf a2V5KHRociwgdHZfa2V5LCAma2V5KTsKKwkJCQlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKwor CQkJCWlmIChkdWtfX2dldF9vd25fcHJvcGRlc2NfcmF3KHRociwgaF90YXJnZXQsIGtleSwgYXJy X2lkeCwgJmRlc2MsIDAgLypmbGFncyovKSkgeyAgLyogZG9uJ3QgcHVzaCB2YWx1ZSAqLworCQkJ CQlkdWtfc21hbGxfaW50X3QgZGVzY19yZWplY3Q7CisKKwkJCQkJRFVLX0RERChEVUtfREREUFJJ TlQoInByb3h5ICdkZWxldGVQcm9wZXJ0eSc6IHRhcmdldCBoYXMgbWF0Y2hpbmcgcHJvcGVydHkg JSFPLCBjaGVjayBmb3IgIgorCQkJCQkgICAgICAgICAgICAgICAgICAgICAiY29uZmxpY3Rpbmcg cHJvcGVydHk7IGRlc2MuZmxhZ3M9MHglMDhseCwgIgorCQkJCQkgICAgICAgICAgICAgICAgICAg ICAiZGVzYy5nZXQ9JXAsIGRlc2Muc2V0PSVwIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAg KGR1a19oZWFwaGRyICopIGtleSwgKHVuc2lnbmVkIGxvbmcpIGRlc2MuZmxhZ3MsCisJCQkJCSAg ICAgICAgICAgICAgICAgICAgICh2b2lkICopIGRlc2MuZ2V0LCAodm9pZCAqKSBkZXNjLnNldCkp OworCisJCQkJCWRlc2NfcmVqZWN0ID0gIShkZXNjLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdf Q09ORklHVVJBQkxFKTsKKwkJCQkJaWYgKGRlc2NfcmVqZWN0KSB7CisJCQkJCQkvKiB1bmNvbmRp dGlvbmFsICovCisJCQkJCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfUFJPWFlfUkVKRUNU RUQpOworCQkJCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJCQkJCX0KKwkJCQl9CisJ CQkJcmMgPSAxOyAgLyogc3VjY2VzcyAqLworCQkJCWdvdG8gZG9uZV9yYzsKKwkJCX0KKworCQkJ b2JqID0gaF90YXJnZXQ7ICAvKiByZXN1bWUgZGVsZXRlIHRvIHRhcmdldCAqLworCQl9CisjZW5k aWYgIC8qIERVS19VU0VfRVM2X1BST1hZICovCisKKwkJYXJyX2lkeCA9IGR1a19fdG9fcHJvcGVy dHlfa2V5KHRociwgLTEsICZrZXkpOworCQlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKworCQly YyA9IGR1a19ob2JqZWN0X2RlbHByb3BfcmF3KHRociwgb2JqLCBrZXksIHRocm93X2ZsYWcgPyBE VUtfREVMUFJPUF9GTEFHX1RIUk9XIDogMCk7CisJCWdvdG8gZG9uZV9yYzsKKwl9IGVsc2UgaWYg KERVS19UVkFMX0lTX1NUUklORyh0dl9vYmopKSB7CisJCS8qIFN0cmluZyBoYXMgLmxlbmd0aCBh bmQgYXJyYXkgaW5kZXggdmlydHVhbCBwcm9wZXJ0aWVzCisJCSAqIHdoaWNoIGNhbid0IGJlIGRl bGV0ZWQuICBObyBuZWVkIGZvciBhIHN5bWJvbCBjaGVjazsKKwkJICogbm8gb2ZmZW5kaW5nIHZp cnR1YWwgc3ltYm9scyBleGlzdC4KKwkJICovCisJCS8qIFhYWDogdW5uZWNlc3Nhcnkgc3RyaW5n IGNvZXJjaW9uIGZvciBhcnJheSBpbmRpY2VzLAorCQkgKiBpbnRlbnRpb25hbCB0byBrZWVwIHNt YWxsLgorCQkgKi8KKwkJZHVrX2hzdHJpbmcgKmggPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2X29i aik7CisJCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKworCQlhcnJfaWR4ID0gZHVrX190b19wcm9w ZXJ0eV9rZXkodGhyLCAtMSwgJmtleSk7CisJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCisJ CWlmIChrZXkgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0xFTkdUSCh0aHIpKSB7CisJCQlnb3RvIGZh aWxfbm90X2NvbmZpZ3VyYWJsZTsKKwkJfQorCisJCWlmIChhcnJfaWR4ICE9IERVS19fTk9fQVJS QVlfSU5ERVggJiYKKwkJICAgIGFycl9pZHggPCBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoKSkg eworCQkJZ290byBmYWlsX25vdF9jb25maWd1cmFibGU7CisJCX0KKwl9IGVsc2UgaWYgKERVS19U VkFMX0lTX0JVRkZFUih0dl9vYmopKSB7CisJCS8qIFhYWDogdW5uZWNlc3Nhcnkgc3RyaW5nIGNv ZXJjaW9uIGZvciBhcnJheSBpbmRpY2VzLAorCQkgKiBpbnRlbnRpb25hbCB0byBrZWVwIHNtYWxs OyBzb21lIG92ZXJsYXAgd2l0aCBzdHJpbmcKKwkJICogaGFuZGxpbmcuCisJCSAqLworCQlkdWtf aGJ1ZmZlciAqaCA9IERVS19UVkFMX0dFVF9CVUZGRVIodHZfb2JqKTsKKwkJRFVLX0FTU0VSVCho ICE9IE5VTEwpOworCisJCWFycl9pZHggPSBkdWtfX3RvX3Byb3BlcnR5X2tleSh0aHIsIC0xLCAm a2V5KTsKKwkJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7CisKKwkJaWYgKGtleSA9PSBEVUtfSFRI UkVBRF9TVFJJTkdfTEVOR1RIKHRocikpIHsKKwkJCWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxl OworCQl9CisKKwkJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCAmJgorCQkgICAg YXJyX2lkeCA8IERVS19IQlVGRkVSX0dFVF9TSVpFKGgpKSB7CisJCQlnb3RvIGZhaWxfbm90X2Nv bmZpZ3VyYWJsZTsKKwkJfQorCX0gZWxzZSBpZiAoRFVLX1RWQUxfSVNfTElHSFRGVU5DKHR2X29i aikpIHsKKwkJLyogTGlnaHRmdW5jIGhhcyBubyB2aXJ0dWFsIHByb3BlcnRpZXMgc2luY2UgRHVr dGFwZSAyLjIKKwkJICogc28gc3VjY2Vzcy4gIFN0aWxsIG11c3QgY29lcmNlIGtleSBmb3Igc2lk ZSBlZmZlY3RzLgorCQkgKi8KKworCQlhcnJfaWR4ID0gZHVrX190b19wcm9wZXJ0eV9rZXkodGhy LCAtMSwgJmtleSk7CisJCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCQlEVUtfVU5SRUYoa2V5 KTsKKwl9CisKKwkvKiBub24tb2JqZWN0IGJhc2UsIG5vIG9mZmVuZGluZyB2aXJ0dWFsIHByb3Bl cnR5ICovCisJcmMgPSAxOworCWdvdG8gZG9uZV9yYzsKKworIGRvbmVfcmM6CisJZHVrX3NldF90 b3BfdW5zYWZlKHRociwgZW50cnlfdG9wKTsKKwlyZXR1cm4gcmM7CisKKyBmYWlsX2ludmFsaWRf YmFzZV91bmNvbmQ6CisJLyogTm90ZTogdW5jb25kaXRpb25hbCB0aHJvdyAqLworCURVS19BU1NF UlQoZHVrX2dldF90b3AodGhyKSA9PSBlbnRyeV90b3ApOworI2lmIGRlZmluZWQoRFVLX1VTRV9Q QVJBTk9JRF9FUlJPUlMpCisJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX0lOVkFMSURfQkFT RSk7CisjZWxzZQorCURVS19FUlJPUl9GTVQyKHRociwgRFVLX0VSUl9UWVBFX0VSUk9SLCAiY2Fu bm90IGRlbGV0ZSBwcm9wZXJ0eSAlcyBvZiAlcyIsCisJICAgICAgICAgICAgICAgZHVrX3B1c2hf c3RyaW5nX3R2YWxfcmVhZGFibGUodGhyLCB0dl9rZXkpLCBkdWtfcHVzaF9zdHJpbmdfdHZhbF9y ZWFkYWJsZSh0aHIsIHR2X29iaikpOworI2VuZGlmCisJRFVLX1dPX05PUkVUVVJOKHJldHVybiAw Oyk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1BST1hZKQorIGZhaWxfcHJveHlfcmVqZWN0 ZWQ6CisJaWYgKHRocm93X2ZsYWcpIHsKKwkJRFVLX0VSUk9SX1RZUEUodGhyLCBEVUtfU1RSX1BS T1hZX1JFSkVDVEVEKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJfQorCWR1a19z ZXRfdG9wX3Vuc2FmZSh0aHIsIGVudHJ5X3RvcCk7CisJcmV0dXJuIDA7CisjZW5kaWYKKworIGZh aWxfbm90X2NvbmZpZ3VyYWJsZToKKwlpZiAodGhyb3dfZmxhZykgeworCQlEVUtfRVJST1JfVFlQ RSh0aHIsIERVS19TVFJfTk9UX0NPTkZJR1VSQUJMRSk7CisJCURVS19XT19OT1JFVFVSTihyZXR1 cm4gMDspOworCX0KKwlkdWtfc2V0X3RvcF91bnNhZmUodGhyLCBlbnRyeV90b3ApOworCXJldHVy biAwOworfQorCisvKgorICogIEludGVybmFsIGhlbHBlciB0byBkZWZpbmUgYSBwcm9wZXJ0eSB3 aXRoIHNwZWNpZmljIGZsYWdzLCBpZ25vcmluZworICogIG5vcm1hbCBzZW1hbnRpY3Mgc3VjaCBh cyBleHRlbnNpYmlsaXR5LCB3cml0ZSBwcm90ZWN0aW9uIGV0Yy4KKyAqICBPdmVyd3JpdGVzIGFu eSBleGlzdGluZyB2YWx1ZSBhbmQgYXR0cmlidXRlcyB1bmxlc3MgY2FsbGVyIHJlcXVlc3RzCisg KiAgdGhhdCB2YWx1ZSBvbmx5IGJlIHVwZGF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0 cy4KKyAqCisgKiAgRG9lcyBub3Qgc3VwcG9ydDoKKyAqICAgIC0gdmlydHVhbCBwcm9wZXJ0aWVz IChlcnJvciBpZiB3cml0ZSBhdHRlbXB0ZWQpCisgKiAgICAtIGdldHRlci9zZXR0ZXIgcHJvcGVy dGllcyAoZXJyb3IgaWYgd3JpdGUgYXR0ZW1wdGVkKQorICogICAgLSBub24tZGVmYXVsdCAoIT0g V0VDKSBhdHRyaWJ1dGVzIGZvciBhcnJheSBlbnRyaWVzIChlcnJvciBpZiBhdHRlbXB0ZWQpCisg KiAgICAtIGFycmF5IGFiYW5kb25pbmc6IGlmIGFycmF5IHBhcnQgZXhpc3RzLCBpdCBpcyBhbHdh eXMgZXh0ZW5kZWQKKyAqICAgIC0gYXJyYXkgJ2xlbmd0aCcgdXBkYXRpbmcKKyAqCisgKiAgU3Rh Y2s6IFsuLi4gaW5fdmFsXSAtPiBbXQorICoKKyAqICBVc2VkIGZvciBlLmcuIGJ1aWx0LWluIGlu aXRpYWxpemF0aW9uIGFuZCBlbnZpcm9ubWVudCByZWNvcmQKKyAqICBvcGVyYXRpb25zLgorICov CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19ob2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9pbnRlcm5h bChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfaHN0cmluZyAqa2V5LCBk dWtfc21hbGxfdWludF90IGZsYWdzKSB7CisJZHVrX3Byb3BkZXNjIGRlc2M7CisJZHVrX3VpbnQz Ml90IGFycl9pZHg7CisJZHVrX2ludF90IGVfaWR4OworCWR1a190dmFsICp0djEgPSBOVUxMOwor CWR1a190dmFsICp0djIgPSBOVUxMOworCWR1a19zbWFsbF91aW50X3QgcHJvcGZsYWdzID0gZmxh Z3MgJiBEVUtfUFJPUERFU0NfRkxBR1NfTUFTSzsgIC8qIG1hc2sgb3V0IGZsYWdzIG5vdCBhY3R1 YWxseSBzdG9yZWQgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJkZWZpbmUgbmV3IHByb3Bl cnR5IChpbnRlcm5hbCk6IHRocj0lcCwgb2JqPSUhTywga2V5PSUhTywgZmxhZ3M9MHglMDJseCwg dmFsPSUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLCAoZHVrX2hlYXBo ZHIgKikgb2JqLCAoZHVrX2hlYXBoZHIgKikga2V5LAorCSAgICAgICAgICAgICAgICAgICAgICh1 bnNpZ25lZCBsb25nKSBmbGFncywgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkp OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0g TlVMTCk7CisJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisJRFVLX0FTU0VSVChrZXkgIT0gTlVM TCk7CisJRFVLX0FTU0VSVCghRFVLX0hFQVBIRFJfSEFTX1JFQURPTkxZKChkdWtfaGVhcGhkciAq KSBvYmopKTsKKwlEVUtfQVNTRVJUX1ZBTFNUQUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFDS19T UEFDRSk7CisJRFVLX0FTU0VSVChkdWtfaXNfdmFsaWRfaW5kZXgodGhyLCAtMSkpOyAgLyogY29u dGFpbnMgdmFsdWUgKi8KKworCWFycl9pZHggPSBEVUtfSFNUUklOR19HRVRfQVJSSURYX1NMT1co a2V5KTsKKworCWlmIChkdWtfX2dldF9vd25fcHJvcGRlc2NfcmF3KHRociwgb2JqLCBrZXksIGFy cl9pZHgsICZkZXNjLCAwIC8qZmxhZ3MqLykpIHsgIC8qIGRvbid0IHB1c2ggdmFsdWUgKi8KKwkJ aWYgKGRlc2MuZV9pZHggPj0gMCkgeworCQkJaWYgKGZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdf Tk9fT1ZFUldSSVRFKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInByb3BlcnR5IGFscmVh ZHkgZXhpc3RzIGluIHRoZSBlbnRyeSBwYXJ0IC0+IHNraXAgYXMgcmVxdWVzdGVkIikpOworCQkJ CWdvdG8gcG9wX2V4aXQ7CisJCQl9CisJCQlEVUtfREREKERVS19ERERQUklOVCgicHJvcGVydHkg YWxyZWFkeSBleGlzdHMgaW4gdGhlIGVudHJ5IHBhcnQgLT4gdXBkYXRlIHZhbHVlIGFuZCBhdHRy aWJ1dGVzIikpOworCQkJaWYgKERVS19VTkxJS0VMWShEVUtfSE9CSkVDVF9FX1NMT1RfSVNfQUND RVNTT1IodGhyLT5oZWFwLCBvYmosIGRlc2MuZV9pZHgpKSkgeworCQkJCURVS19EKERVS19EUFJJ TlQoImV4aXN0aW5nIHByb3BlcnR5IGlzIGFuIGFjY2Vzc29yLCBub3Qgc3VwcG9ydGVkIikpOwor CQkJCWdvdG8gZXJyb3JfaW50ZXJuYWw7CisJCQl9CisKKwkJCURVS19IT0JKRUNUX0VfU0VUX0ZM QUdTKHRoci0+aGVhcCwgb2JqLCBkZXNjLmVfaWR4LCBwcm9wZmxhZ3MpOworCQkJdHYxID0gRFVL X0hPQkpFQ1RfRV9HRVRfVkFMVUVfVFZBTF9QVFIodGhyLT5oZWFwLCBvYmosIGRlc2MuZV9pZHgp OworCQl9IGVsc2UgaWYgKGRlc2MuYV9pZHggPj0gMCkgeworCQkJaWYgKGZsYWdzICYgRFVLX1BS T1BERVNDX0ZMQUdfTk9fT1ZFUldSSVRFKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInBy b3BlcnR5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBhcnJheSBwYXJ0IC0+IHNraXAgYXMgcmVxdWVz dGVkIikpOworCQkJCWdvdG8gcG9wX2V4aXQ7CisJCQl9CisJCQlEVUtfREREKERVS19ERERQUklO VCgicHJvcGVydHkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFycmF5IHBhcnQgLT4gdXBkYXRlIHZh bHVlIChhc3NlcnQgYXR0cmlidXRlcykiKSk7CisJCQlpZiAocHJvcGZsYWdzICE9IERVS19QUk9Q REVTQ19GTEFHU19XRUMpIHsKKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJleGlzdGluZyBwcm9wZXJ0 eSBpbiBhcnJheSBwYXJ0LCBidXQgcHJvcGZsYWdzIG5vdCBXRUMgKDB4JTAybHgpIiwKKwkJCQkg ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBwcm9wZmxhZ3MpKTsKKwkJCQlnb3RvIGVy cm9yX2ludGVybmFsOworCQkJfQorCisJCQl0djEgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9Q VFIodGhyLT5oZWFwLCBvYmosIGRlc2MuYV9pZHgpOworCQl9IGVsc2UgeworCQkJaWYgKGZsYWdz ICYgRFVLX1BST1BERVNDX0ZMQUdfTk9fT1ZFUldSSVRFKSB7CisJCQkJRFVLX0RERChEVUtfRERE UFJJTlQoInByb3BlcnR5IGFscmVhZHkgZXhpc3RzIGJ1dCBpcyB2aXJ0dWFsIC0+IHNraXAgYXMg cmVxdWVzdGVkIikpOworCQkJCWdvdG8gcG9wX2V4aXQ7CisJCQl9CisJCQlpZiAoa2V5ID09IERV S19IVEhSRUFEX1NUUklOR19MRU5HVEgodGhyKSAmJiBEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FS UkFZKG9iaikpIHsKKwkJCQlkdWtfdWludDMyX3QgbmV3X2xlbjsKKyNpZiBkZWZpbmVkKERVS19V U0VfREVCVUcpCisJCQkJZHVrX3VpbnQzMl90IHByZXZfbGVuOworCQkJCXByZXZfbGVuID0gKChk dWtfaGFycmF5ICopIG9iaiktPmxlbmd0aDsKKyNlbmRpZgorCQkJCW5ld19sZW4gPSBkdWtfX3Rv X25ld19hcnJheV9sZW5ndGhfY2hlY2tlZCh0aHIsIERVS19HRVRfVFZBTF9ORUdJRFgodGhyLCAt MSkpOworCQkJCSgoZHVrX2hhcnJheSAqKSBvYmopLT5sZW5ndGggPSBuZXdfbGVuOworCQkJCURV S19EKERVS19EUFJJTlQoImludGVybmFsIGRlZmluZSBwcm9wZXJ0eSBmb3IgYXJyYXkgLmxlbmd0 aDogJWxkIC0+ICVsZCIsCisJCQkJICAgICAgICAgICAgICAgICAobG9uZykgcHJldl9sZW4sIChs b25nKSAoKGR1a19oYXJyYXkgKikgb2JqKS0+bGVuZ3RoKSk7CisJCQkJZ290byBwb3BfZXhpdDsK KwkJCX0KKwkJCURVS19ERChEVUtfRERQUklOVCgicHJvcGVydHkgYWxyZWFkeSBleGlzdHMgYnV0 IGlzIHZpcnR1YWwgLT4gZmFpbHVyZSIpKTsKKwkJCWdvdG8gZXJyb3JfdmlydHVhbDsKKwkJfQor CisJCWdvdG8gd3JpdGVfdmFsdWU7CisJfQorCisJaWYgKERVS19IT0JKRUNUX0hBU19BUlJBWV9Q QVJUKG9iaikpIHsKKwkJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCkgeworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoInByb3BlcnR5IGRvZXMgbm90IGV4aXN0LCBvYmplY3QgaGFz IGFycmF5IHBhcnQgLT4gcG9zc2libHkgZXh0ZW5kIGFycmF5IHBhcnQgYW5kIHdyaXRlIHZhbHVl IChhc3NlcnQgYXR0cmlidXRlcykiKSk7CisJCQlEVUtfQVNTRVJUKHByb3BmbGFncyA9PSBEVUtf UFJPUERFU0NfRkxBR1NfV0VDKTsKKworCQkJLyogYWx3YXlzIGdyb3cgdGhlIGFycmF5LCBubyBz cGFyc2UgLyBhYmFuZG9uIHN1cHBvcnQgaGVyZSAqLworCQkJaWYgKGFycl9pZHggPj0gRFVLX0hP QkpFQ1RfR0VUX0FTSVpFKG9iaikpIHsKKwkJCQlkdWtfX2dyb3dfcHJvcHNfZm9yX2FycmF5X2l0 ZW0odGhyLCBvYmosIGFycl9pZHgpOworCQkJfQorCisJCQlEVUtfQVNTRVJUKGFycl9pZHggPCBE VUtfSE9CSkVDVF9HRVRfQVNJWkUob2JqKSk7CisJCQl0djEgPSBEVUtfSE9CSkVDVF9BX0dFVF9W QUxVRV9QVFIodGhyLT5oZWFwLCBvYmosIGFycl9pZHgpOworCQkJZ290byB3cml0ZV92YWx1ZTsK KwkJfQorCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJwcm9wZXJ0eSBkb2VzIG5vdCBleGlz dCwgb2JqZWN0IGJlbG9uZ3MgaW4gZW50cnkgcGFydCAtPiBhbGxvY2F0ZSBuZXcgZW50cnkgYW5k IHdyaXRlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIikpOworCWVfaWR4ID0gZHVrX19ob2JqZWN0X2Fs bG9jX2VudHJ5X2NoZWNrZWQodGhyLCBvYmosIGtleSk7ICAvKiBpbmNyZWFzZXMga2V5IHJlZmNv dW50ICovCisJRFVLX0FTU0VSVChlX2lkeCA+PSAwKTsKKwlEVUtfSE9CSkVDVF9FX1NFVF9GTEFH Uyh0aHItPmhlYXAsIG9iaiwgZV9pZHgsIHByb3BmbGFncyk7CisJdHYxID0gRFVLX0hPQkpFQ1Rf RV9HRVRfVkFMVUVfVFZBTF9QVFIodGhyLT5oZWFwLCBvYmosIGVfaWR4KTsKKwkvKiBuZXcgZW50 cnk6IHByZXZpb3VzIHZhbHVlIGlzIGdhcmJhZ2U7IHNldCB0byB1bmRlZmluZWQgdG8gc2hhcmUg d3JpdGVfdmFsdWUgKi8KKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEKHR2MSk7CisJZ290byB3cml0 ZV92YWx1ZTsKKworIHdyaXRlX3ZhbHVlOgorCS8qIHR2MSBwb2ludHMgdG8gdmFsdWUgc3RvcmFn ZSAqLworCisJdHYyID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKTsgIC8qIGxhdGUgbG9va3Vw LCBhdm9pZCBzaWRlIGVmZmVjdHMgKi8KKwlEVUtfREREKERVS19ERERQUklOVCgid3JpdGluZy91 cGRhdGluZyB2YWx1ZTogJSFUIC0+ICUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190 dmFsICopIHR2MSwgKGR1a190dmFsICopIHR2MikpOworCisJRFVLX1RWQUxfU0VUX1RWQUxfVVBE UkVGKHRociwgdHYxLCB0djIpOyAgLyogc2lkZSBlZmZlY3RzICovCisJZ290byBwb3BfZXhpdDsK KworIHBvcF9leGl0OgorCWR1a19wb3BfdW5zYWZlKHRocik7ICAvKiByZW1vdmUgaW5fdmFsICov CisJcmV0dXJuOworCisgZXJyb3JfdmlydHVhbDogIC8qIHNoYXJlIGVycm9yIG1lc3NhZ2UgKi8K KyBlcnJvcl9pbnRlcm5hbDoKKwlEVUtfRVJST1JfSU5URVJOQUwodGhyKTsKKwlEVUtfV09fTk9S RVRVUk4ocmV0dXJuOyk7Cit9CisKKy8qCisgKiAgRmFzdCBwYXRoIGZvciBkZWZpbmluZyBhcnJh eSBpbmRleGVkIHZhbHVlcyB3aXRob3V0IGludGVybmluZyB0aGUga2V5LgorICogIFRoaXMgaXMg dXNlZCBieSBlLmcuIGNvZGUgZm9yIEFycmF5IHByb3RvdHlwZSBhbmQgdHJhY2ViYWNrIGNyZWF0 aW9uIHNvCisgKiAgbXVzdCBhdm9pZCBpbnRlcm5pbmcuCisgKi8KKworRFVLX0lOVEVSTkFMIHZv aWQgZHVrX2hvYmplY3RfZGVmaW5lX3Byb3BlcnR5X2ludGVybmFsX2FycmlkeChkdWtfaHRocmVh ZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqLCBkdWtfdWFycmlkeF90IGFycl9pZHgsIGR1a19zbWFs bF91aW50X3QgZmxhZ3MpIHsKKwlkdWtfaHN0cmluZyAqa2V5OworCWR1a190dmFsICp0djEsICp0 djI7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZGVmaW5lIG5ldyBwcm9wZXJ0eSAoaW50ZXJu YWwpIGFycl9pZHggZmFzdCBwYXRoOiB0aHI9JXAsIG9iaj0lIU8sICIKKwkgICAgICAgICAgICAg ICAgICAgICAiYXJyX2lkeD0lbGQsIGZsYWdzPTB4JTAybHgsIHZhbD0lIVQiLAorCSAgICAgICAg ICAgICAgICAgICAgICh2b2lkICopIHRociwgb2JqLCAobG9uZykgYXJyX2lkeCwgKHVuc2lnbmVk IGxvbmcpIGZsYWdzLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0 X3R2YWwodGhyLCAtMSkpKTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NF UlQodGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5VTEwpOworCURVS19B U1NFUlQoIURVS19IRUFQSERSX0hBU19SRUFET05MWSgoZHVrX2hlYXBoZHIgKikgb2JqKSk7CisK KwlpZiAoRFVLX0hPQkpFQ1RfSEFTX0FSUkFZX1BBUlQob2JqKSAmJgorCSAgICBhcnJfaWR4ICE9 IERVS19fTk9fQVJSQVlfSU5ERVggJiYKKwkgICAgZmxhZ3MgPT0gRFVLX1BST1BERVNDX0ZMQUdT X1dFQykgeworCQlEVUtfQVNTRVJUKChmbGFncyAmIERVS19QUk9QREVTQ19GTEFHX05PX09WRVJX UklURSkgPT0gMCk7ICAvKiBjb3ZlcmVkIGJ5IGNvbXBhcmlzb24gKi8KKworCQlEVUtfREREKERV S19ERERQUklOVCgiZGVmaW5lIHByb3BlcnR5IHRvIGFycmF5IHBhcnQgKHByb3BlcnR5IG1heSBv ciBtYXkgbm90IGV4aXN0IHlldCkiKSk7CisKKwkJLyogYWx3YXlzIGdyb3cgdGhlIGFycmF5LCBu byBzcGFyc2UgLyBhYmFuZG9uIHN1cHBvcnQgaGVyZSAqLworCQlpZiAoYXJyX2lkeCA+PSBEVUtf SE9CSkVDVF9HRVRfQVNJWkUob2JqKSkgeworCQkJZHVrX19ncm93X3Byb3BzX2Zvcl9hcnJheV9p dGVtKHRociwgb2JqLCBhcnJfaWR4KTsKKwkJfQorCisJCURVS19BU1NFUlQoYXJyX2lkeCA8IERV S19IT0JKRUNUX0dFVF9BU0laRShvYmopKTsKKwkJdHYxID0gRFVLX0hPQkpFQ1RfQV9HRVRfVkFM VUVfUFRSKHRoci0+aGVhcCwgb2JqLCBhcnJfaWR4KTsKKwkJdHYyID0gZHVrX3JlcXVpcmVfdHZh bCh0aHIsIC0xKTsKKworCQlEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUYodGhyLCB0djEsIHR2Mik7 ICAvKiBzaWRlIGVmZmVjdHMgKi8KKworCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOyAgLyogWyAuLi52 YWwgXSAtPiBbIC4uLiBdICovCisJCXJldHVybjsKKwl9CisKKwlEVUtfREREKERVS19ERERQUklO VCgiZGVmaW5lIHByb3BlcnR5IGZhc3QgcGF0aCBkaWRuJ3Qgd29yaywgdXNlIHNsb3cgcGF0aCIp KTsKKworCWtleSA9IGR1a19wdXNoX3VpbnRfdG9faHN0cmluZyh0aHIsIChkdWtfdWludF90KSBh cnJfaWR4KTsKKwlEVUtfQVNTRVJUKGtleSAhPSBOVUxMKTsKKwlkdWtfaW5zZXJ0KHRociwgLTIp OyAgLyogWyAuLi4gdmFsIGtleSBdIC0+IFsgLi4uIGtleSB2YWwgXSAqLworCisJZHVrX2hvYmpl Y3RfZGVmaW5lX3Byb3BlcnR5X2ludGVybmFsKHRociwgb2JqLCBrZXksIGZsYWdzKTsKKworCWR1 a19wb3BfdW5zYWZlKHRocik7ICAvKiBbIC4uLiBrZXkgXSAtPiBbIC4uLiBdICovCit9CisKKy8q CisgKiAgSW50ZXJuYWwgaGVscGVycyBmb3IgbWFuYWdpbmcgb2JqZWN0ICdsZW5ndGgnCisgKi8K KworRFVLX0lOVEVSTkFMIGR1a19zaXplX3QgZHVrX2hvYmplY3RfZ2V0X2xlbmd0aChkdWtfaHRo cmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqb2JqKSB7CisJZHVrX2RvdWJsZV90IHZhbDsKKworCURV S19BU1NFUlRfQ1RYX1ZBTElEKHRocik7CisJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisKKwkv KiBGYXN0IHBhdGggZm9yIEFycmF5cy4gKi8KKwlpZiAoRFVLX0hPQkpFQ1RfSEFTX0VYT1RJQ19B UlJBWShvYmopKSB7CisJCXJldHVybiAoKGR1a19oYXJyYXkgKikgb2JqKS0+bGVuZ3RoOworCX0K KworCS8qIFNsb3cgcGF0aCwgLmxlbmd0aCBjYW4gYmUgZS5nLiBhY2Nlc3Nvciwgb2JqIGNhbiBi ZSBhIFByb3h5LCBldGMuICovCisJZHVrX3B1c2hfaG9iamVjdCh0aHIsIG9iaik7CisJZHVrX3B1 c2hfaHN0cmluZ19zdHJpZHgodGhyLCBEVUtfU1RSSURYX0xFTkdUSCk7CisJKHZvaWQpIGR1a19o b2JqZWN0X2dldHByb3AodGhyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19HRVRf VFZBTF9ORUdJRFgodGhyLCAtMiksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0dF VF9UVkFMX05FR0lEWCh0aHIsIC0xKSk7CisJdmFsID0gZHVrX3RvX251bWJlcl9tMSh0aHIpOwor CWR1a19wb3BfM191bnNhZmUodGhyKTsKKworCS8qIFRoaXMgaXNuJ3QgcGFydCBvZiBFQ01BU2Ny aXB0IHNlbWFudGljczsgcmV0dXJuIGEgdmFsdWUgd2l0aGluCisJICogZHVrX3NpemVfdCByYW5n ZSwgb3IgMCBvdGhlcndpc2UuCisJICovCisJaWYgKHZhbCA+PSAwLjAgJiYgdmFsIDw9IChkdWtf ZG91YmxlX3QpIERVS19TSVpFX01BWCkgeworCQlyZXR1cm4gKGR1a19zaXplX3QpIHZhbDsKKwl9 CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgRmFzdCBmaW5hbGl6ZXIgY2hlY2sgZm9yIGFuIG9i amVjdC4gIFdhbGtzIHRoZSBwcm90b3R5cGUgY2hhaW4sIGNoZWNraW5nCisgKiAgZm9yIGZpbmFs aXplciBwcmVzZW5jZSB1c2luZyBEVUtfSE9CSkVDVF9GTEFHX0hBVkVfRklOQUxJWkVSIHdoaWNo IGlzIGtlcHQKKyAqICBpbiBzeW5jIHdpdGggdGhlIGFjdHVhbCBwcm9wZXJ0eSB3aGVuIHNldHRp bmcvcmVtb3ZpbmcgdGhlIGZpbmFsaXplci4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0hF QVBQVFIxNikKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19ob2JqZWN0X2hhc19maW5hbGl6 ZXJfZmFzdF9yYXcoZHVrX2hlYXAgKmhlYXAsIGR1a19ob2JqZWN0ICpvYmopIHsKKyNlbHNlCitE VUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9oYXNfZmluYWxpemVyX2Zhc3RfcmF3 KGR1a19ob2JqZWN0ICpvYmopIHsKKyNlbmRpZgorCWR1a191aW50X3Qgc2FuaXR5OworCisJRFVL X0FTU0VSVChvYmogIT0gTlVMTCk7CisKKwlzYW5pdHkgPSBEVUtfSE9CSkVDVF9QUk9UT1RZUEVf Q0hBSU5fU0FOSVRZOworCWRvIHsKKwkJaWYgKERVS19VTkxJS0VMWShEVUtfSE9CSkVDVF9IQVNf SEFWRV9GSU5BTElaRVIob2JqKSkpIHsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChEVUtfVU5M SUtFTFkoc2FuaXR5LS0gPT0gMCkpIHsKKwkJCURVS19EKERVS19EUFJJTlQoInByb3RvdHlwZSBs b29wIHdoZW4gY2hlY2tpbmcgZm9yIGZpbmFsaXplciBleGlzdGVuY2U7IHJldHVybmluZyBmYWxz ZSIpKTsKKwkJCXJldHVybiAwOworCQl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0hFQVBQVFIxNikK KwkJRFVLX0FTU0VSVChoZWFwICE9IE5VTEwpOworCQlvYmogPSBEVUtfSE9CSkVDVF9HRVRfUFJP VE9UWVBFKGhlYXAsIG9iaik7CisjZWxzZQorCQlvYmogPSBEVUtfSE9CSkVDVF9HRVRfUFJPVE9U WVBFKE5VTEwsIG9iaik7ICAvKiAnaGVhcCcgYXJnIGlnbm9yZWQgKi8KKyNlbmRpZgorCX0gd2hp bGUgKG9iaiAhPSBOVUxMKTsKKworCXJldHVybiAwOworfQorCisvKgorICogIE9iamVjdC5nZXRP d25Qcm9wZXJ0eURlc2NyaXB0b3IoKSAgKEU1IFNlY3Rpb25zIDE1LjIuMy4zLCA4LjEwLjQpCisg KgorICogIFsgLi4uIGtleSBdIC0+IFsgLi4uIGRlc2MvdW5kZWZpbmVkIF0KKyAqLworCitEVUtf SU5URVJOQUwgdm9pZCBkdWtfaG9iamVjdF9vYmplY3RfZ2V0X293bl9wcm9wZXJ0eV9kZXNjcmlw dG9yKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBvYmpfaWR4KSB7CisJZHVrX2hvYmplY3Qg Km9iajsKKwlkdWtfaHN0cmluZyAqa2V5OworCWR1a19wcm9wZGVzYyBwZDsKKworCURVS19BU1NF UlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCisJb2Jq ID0gZHVrX3JlcXVpcmVfaG9iamVjdF9wcm9tb3RlX21hc2sodGhyLCBvYmpfaWR4LCBEVUtfVFlQ RV9NQVNLX0xJR0hURlVOQyB8IERVS19UWVBFX01BU0tfQlVGRkVSKTsKKwlrZXkgPSBkdWtfdG9f cHJvcGVydHlfa2V5X2hzdHJpbmcodGhyLCAtMSk7CisJRFVLX0FTU0VSVChrZXkgIT0gTlVMTCk7 CisKKwlEVUtfQVNTRVJUX1ZBTFNUQUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFDS19TUEFDRSk7 CisKKwlpZiAoIWR1a19ob2JqZWN0X2dldF9vd25fcHJvcGRlc2ModGhyLCBvYmosIGtleSwgJnBk LCBEVUtfR0VUREVTQ19GTEFHX1BVU0hfVkFMVUUpKSB7CisJCWR1a19wdXNoX3VuZGVmaW5lZCh0 aHIpOworCQlkdWtfcmVtb3ZlX20yKHRocik7CisJCXJldHVybjsKKwl9CisKKwlkdWtfcHVzaF9v YmplY3QodGhyKTsKKworCS8qIFsgLi4uIGtleSB2YWx1ZSBkZXNjIF0gKi8KKworCWlmIChEVUtf UFJPUERFU0NfSVNfQUNDRVNTT1IoJnBkKSkgeworCQkvKiBJZiBhIHNldHRlci9nZXR0ZXIgaXMg bWlzc2luZyAodW5kZWZpbmVkKSwgdGhlIGRlc2NyaXB0b3IgbXVzdAorCQkgKiBzdGlsbCBoYXZl IHRoZSBwcm9wZXJ0eSBwcmVzZW50IHdpdGggdGhlIHZhbHVlICd1bmRlZmluZWQnLgorCQkgKi8K KwkJaWYgKHBkLmdldCkgeworCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHBkLmdldCk7CisJCX0g ZWxzZSB7CisJCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsKKwkJfQorCQlkdWtfcHV0X3Byb3Bf c3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfR0VUKTsKKwkJaWYgKHBkLnNldCkgewor CQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHBkLnNldCk7CisJCX0gZWxzZSB7CisJCQlkdWtfcHVz aF91bmRlZmluZWQodGhyKTsKKwkJfQorCQlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg LTIsIERVS19TVFJJRFhfU0VUKTsKKwl9IGVsc2UgeworCQlkdWtfZHVwX20yKHRocik7CisJCWR1 a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9WQUxVRSk7CisJCWR1 a19wdXNoX2Jvb2xlYW4odGhyLCBEVUtfUFJPUERFU0NfSVNfV1JJVEFCTEUoJnBkKSk7CisJCWR1 a19wdXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9XUklUQUJMRSk7CisJ fQorCWR1a19wdXNoX2Jvb2xlYW4odGhyLCBEVUtfUFJPUERFU0NfSVNfRU5VTUVSQUJMRSgmcGQp KTsKKwlkdWtfcHV0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfRU5VTUVS QUJMRSk7CisJZHVrX3B1c2hfYm9vbGVhbih0aHIsIERVS19QUk9QREVTQ19JU19DT05GSUdVUkFC TEUoJnBkKSk7CisJZHVrX3B1dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0yLCBEVUtfU1RSSURY X0NPTkZJR1VSQUJMRSk7CisKKwkvKiBbIC4uLiBrZXkgdmFsdWUgZGVzYyBdICovCisKKwlkdWtf cmVwbGFjZSh0aHIsIC0zKTsKKwlkdWtfcG9wX3Vuc2FmZSh0aHIpOyAgLyogLT4gWyAuLi4gZGVz YyBdICovCit9CisKKy8qCisgKiAgTm9ybWFsaXplUHJvcGVydHlEZXNjcmlwdG9yKCkgcmVsYXRl ZCBoZWxwZXIuCisgKgorICogIEludGVybmFsIGhlbHBlciB3aGljaCB2YWxpZGF0ZXMgYW5kIG5v cm1hbGl6ZXMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yCisgKiAgcmVwcmVzZW50ZWQgYXMgYW4gRUNN QVNjcmlwdCBvYmplY3QgKGUuZy4gYXJndW1lbnQgdG8gZGVmaW5lUHJvcGVydHkoKSkuCisgKiAg VGhlIG91dHB1dCBvZiB0aGlzIGNvbnZlcnNpb24gaXMgYSBzZXQgb2YgZGVmcHJvcF9mbGFncyBh bmQgcG9zc2libHkKKyAqICBzb21lIHZhbHVlcyBwdXNoZWQgb24gdGhlIHZhbHVlIHN0YWNrIHRv ICgxKSBlbnN1cmUgYm9ycm93ZWQgcG9pbnRlcnMKKyAqICByZW1haW4gdmFsaWQsIGFuZCAoMikg YXZvaWQgdW5uZWNlc3NhcnkgcG9wcyBmb3IgZm9vdHByaW50IHJlYXNvbnMuCisgKiAgQ2FsbGVy IG11c3QgbWFuYWdlIHN0YWNrIHRvcCBjYXJlZnVsbHkgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHZh bHVlcworICogIHB1c2hlZCBkZXBlbmRzIG9uIHRoZSBpbnB1dCBwcm9wZXJ0eSBkZXNjcmlwdG9y LgorICoKKyAqICBUaGUgb3JpZ2luYWwgZGVzY3JpcHRvciBvYmplY3QgbXVzdCBub3QgYmUgYWx0 ZXJlZCBpbiB0aGUgcHJvY2Vzcy4KKyAqLworCisvKiBYWFg6IHZlcnkgYmFzaWMgb3B0aW1pemF0 aW9uIC0+IGR1a19nZXRfcHJvcF9zdHJpZHhfdG9wICovCisKK0RVS19JTlRFUk5BTAordm9pZCBk dWtfaG9iamVjdF9wcmVwYXJlX3Byb3BlcnR5X2Rlc2NyaXB0b3IoZHVrX2h0aHJlYWQgKnRociwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19pZHhfdCBp ZHhfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf dWludF90ICpvdXRfZGVmcHJvcF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGR1a19pZHhfdCAqb3V0X2lkeF92YWx1ZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0ICoqb3V0X2dldHRlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0 ICoqb3V0X3NldHRlcikgeworCWR1a19pZHhfdCBpZHhfdmFsdWUgPSAtMTsKKwlkdWtfaG9iamVj dCAqZ2V0dGVyID0gTlVMTDsKKwlkdWtfaG9iamVjdCAqc2V0dGVyID0gTlVMTDsKKwlkdWtfYm9v bF90IGlzX2RhdGFfZGVzYyA9IDA7CisJZHVrX2Jvb2xfdCBpc19hY2NfZGVzYyA9IDA7CisJZHVr X3VpbnRfdCBkZWZwcm9wX2ZsYWdzID0gMDsKKworCURVS19BU1NFUlQob3V0X2RlZnByb3BfZmxh Z3MgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvdXRfaWR4X3ZhbHVlICE9IE5VTEwpOworCURVS19B U1NFUlQob3V0X2dldHRlciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG91dF9zZXR0ZXIgIT0gTlVM TCk7CisJRFVLX0FTU0VSVChpZHhfaW4gPD0gMHg3ZmZmTCk7ICAvKiBzaG9ydCB2YXJpYW50cyB3 b3VsZCBiZSBPSywgYnV0IG5vdCB1c2VkIHRvIGF2b2lkIHNoaWZ0cyAqLworCisJLyogTXVzdCBi ZSBhbiBvYmplY3QsIG90aGVyd2lzZSBUeXBlRXJyb3IgKEU1LjEgU2VjdGlvbiA4LjEwLjUsIHN0 ZXAgMSkuICovCisJaWR4X2luID0gZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KHRociwgaWR4 X2luKTsKKwkodm9pZCkgZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIsIGlkeF9pbik7CisKKwkvKiBU aGUgY29lcmNpb24gb3JkZXIgbXVzdCBtYXRjaCB0aGUgVG9Qcm9wZXJ0eURlc2NyaXB0b3IoKSBh bGdvcml0aG0KKwkgKiBzbyB0aGF0IHNpZGUgZWZmZWN0cyBpbiBjb2VyY2lvbiBoYXBwZW4gaW4g dGhlIGNvcnJlY3Qgb3JkZXIuCisJICogKFRoaXMgb3JkZXIgYWxzbyBoYXBwZW5zIHRvIGJlIGNv bXBhdGlibGUgd2l0aCBkdWtfZGVmX3Byb3AoKSwKKwkgKiBhbHRob3VnaCBpdCBkb2Vzbid0IG1h dHRlciBpbiBwcmFjdGljZS4pCisJICovCisKKwlpZiAoZHVrX2dldF9wcm9wX3N0cmlkeCh0aHIs IGlkeF9pbiwgRFVLX1NUUklEWF9WQUxVRSkpIHsKKwkJaXNfZGF0YV9kZXNjID0gMTsKKwkJZGVm cHJvcF9mbGFncyB8PSBEVUtfREVGUFJPUF9IQVZFX1ZBTFVFOworCQlpZHhfdmFsdWUgPSBkdWtf Z2V0X3RvcF9pbmRleCh0aHIpOworCX0KKworCWlmIChkdWtfZ2V0X3Byb3Bfc3RyaWR4KHRociwg aWR4X2luLCBEVUtfU1RSSURYX1dSSVRBQkxFKSkgeworCQlpc19kYXRhX2Rlc2MgPSAxOworCQlp ZiAoZHVrX3RvX2Jvb2xlYW5fdG9wX3BvcCh0aHIpKSB7CisJCQlkZWZwcm9wX2ZsYWdzIHw9IERV S19ERUZQUk9QX0hBVkVfV1JJVEFCTEUgfCBEVUtfREVGUFJPUF9XUklUQUJMRTsKKwkJfSBlbHNl IHsKKwkJCWRlZnByb3BfZmxhZ3MgfD0gRFVLX0RFRlBST1BfSEFWRV9XUklUQUJMRTsKKwkJfQor CX0KKworCWlmIChkdWtfZ2V0X3Byb3Bfc3RyaWR4KHRociwgaWR4X2luLCBEVUtfU1RSSURYX0dF VCkpIHsKKwkJZHVrX3R2YWwgKnR2ID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKTsKKwkJZHVr X2hvYmplY3QgKmhfZ2V0OworCisJCWlmIChEVUtfVFZBTF9JU19VTkRFRklORUQodHYpKSB7CisJ CQkvKiB1bmRlZmluZWQgaXMgYWNjZXB0ZWQgKi8KKwkJCURVS19BU1NFUlQoZ2V0dGVyID09IE5V TEwpOworCQl9IGVsc2UgeworCQkJLyogTk9URTogbGlnaHRmdW5jcyBhcmUgY29lcmNlZCB0byBm dWxsIGZ1bmN0aW9ucyBiZWNhdXNlCisJCQkgKiBsaWdodGZ1bmNzIGRvbid0IGZpdCBpbnRvIGEg cHJvcGVydHkgdmFsdWUgc2xvdC4gIFRoaXMKKwkJCSAqIGhhcyBzb21lIHNpZGUgZWZmZWN0cywg c2VlIHRlc3QtZGV2LWxpZ2h0ZnVuYy1hY2Nlc3Nvci5qcy4KKwkJCSAqLworCQkJaF9nZXQgPSBk dWtfZ2V0X2hvYmplY3RfcHJvbW90ZV9sZnVuYyh0aHIsIC0xKTsKKwkJCWlmIChoX2dldCA9PSBO VUxMIHx8ICFEVUtfSE9CSkVDVF9JU19DQUxMQUJMRShoX2dldCkpIHsKKwkJCQlnb3RvIHR5cGVf ZXJyb3I7CisJCQl9CisJCQlnZXR0ZXIgPSBoX2dldDsKKwkJfQorCQlpc19hY2NfZGVzYyA9IDE7 CisJCWRlZnByb3BfZmxhZ3MgfD0gRFVLX0RFRlBST1BfSEFWRV9HRVRURVI7CisJfQorCisJaWYg KGR1a19nZXRfcHJvcF9zdHJpZHgodGhyLCBpZHhfaW4sIERVS19TVFJJRFhfU0VUKSkgeworCQlk dWtfdHZhbCAqdHYgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgLTEpOworCQlkdWtfaG9iamVjdCAq aF9zZXQ7CisKKwkJaWYgKERVS19UVkFMX0lTX1VOREVGSU5FRCh0dikpIHsKKwkJCS8qIHVuZGVm aW5lZCBpcyBhY2NlcHRlZCAqLworCQkJRFVLX0FTU0VSVChzZXR0ZXIgPT0gTlVMTCk7CisJCX0g IGVsc2UgeworCQkJLyogTk9URTogbGlnaHRmdW5jcyBhcmUgY29lcmNlZCB0byBmdWxsIGZ1bmN0 aW9ucyBiZWNhdXNlCisJCQkgKiBsaWdodGZ1bmNzIGRvbid0IGZpdCBpbnRvIGEgcHJvcGVydHkg dmFsdWUgc2xvdC4gIFRoaXMKKwkJCSAqIGhhcyBzb21lIHNpZGUgZWZmZWN0cywgc2VlIHRlc3Qt ZGV2LWxpZ2h0ZnVuYy1hY2Nlc3Nvci5qcy4KKwkJCSAqLworCQkJaF9zZXQgPSBkdWtfZ2V0X2hv YmplY3RfcHJvbW90ZV9sZnVuYyh0aHIsIC0xKTsKKwkJCWlmIChoX3NldCA9PSBOVUxMIHx8ICFE VUtfSE9CSkVDVF9JU19DQUxMQUJMRShoX3NldCkpIHsKKwkJCQlnb3RvIHR5cGVfZXJyb3I7CisJ CQl9CisJCQlzZXR0ZXIgPSBoX3NldDsKKwkJfQorCQlpc19hY2NfZGVzYyA9IDE7CisJCWRlZnBy b3BfZmxhZ3MgfD0gRFVLX0RFRlBST1BfSEFWRV9TRVRURVI7CisJfQorCisJaWYgKGR1a19nZXRf cHJvcF9zdHJpZHgodGhyLCBpZHhfaW4sIERVS19TVFJJRFhfRU5VTUVSQUJMRSkpIHsKKwkJaWYg KGR1a190b19ib29sZWFuX3RvcF9wb3AodGhyKSkgeworCQkJZGVmcHJvcF9mbGFncyB8PSBEVUtf REVGUFJPUF9IQVZFX0VOVU1FUkFCTEUgfCBEVUtfREVGUFJPUF9FTlVNRVJBQkxFOworCQl9IGVs c2UgeworCQkJZGVmcHJvcF9mbGFncyB8PSBEVUtfREVGUFJPUF9IQVZFX0VOVU1FUkFCTEU7CisJ CX0KKwl9CisKKwlpZiAoZHVrX2dldF9wcm9wX3N0cmlkeCh0aHIsIGlkeF9pbiwgRFVLX1NUUklE WF9DT05GSUdVUkFCTEUpKSB7CisJCWlmIChkdWtfdG9fYm9vbGVhbl90b3BfcG9wKHRocikpIHsK KwkJCWRlZnByb3BfZmxhZ3MgfD0gRFVLX0RFRlBST1BfSEFWRV9DT05GSUdVUkFCTEUgfCBEVUtf REVGUFJPUF9DT05GSUdVUkFCTEU7CisJCX0gZWxzZSB7CisJCQlkZWZwcm9wX2ZsYWdzIHw9IERV S19ERUZQUk9QX0hBVkVfQ09ORklHVVJBQkxFOworCQl9CisJfQorCisJaWYgKGlzX2RhdGFfZGVz YyAmJiBpc19hY2NfZGVzYykgeworCQlnb3RvIHR5cGVfZXJyb3I7CisJfQorCisJKm91dF9kZWZw cm9wX2ZsYWdzID0gZGVmcHJvcF9mbGFnczsKKwkqb3V0X2lkeF92YWx1ZSA9IGlkeF92YWx1ZTsK Kwkqb3V0X2dldHRlciA9IGdldHRlcjsKKwkqb3V0X3NldHRlciA9IHNldHRlcjsKKworCS8qIFsg Li4uIFttdWx0aXBsZSB2YWx1ZXNdIF0gKi8KKwlyZXR1cm47CisKKyB0eXBlX2Vycm9yOgorCURV S19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9JTlZBTElEX0RFU0NSSVBUT1IpOworCURVS19XT19O T1JFVFVSTihyZXR1cm47KTsKK30KKworLyoKKyAqICBPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBy ZWxhdGVkIGhlbHBlciAoRTUgU2VjdGlvbiAxNS4yLjMuNikuCisgKiAgQWxzbyBoYW5kbGVzIEVT MjAxNSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KCkuCisgKgorICogIElubGluZXMgYWxsIFtbRGVm aW5lT3duUHJvcGVydHldXSBleG90aWMgYmVoYXZpb3JzLgorICoKKyAqICBOb3RlOiBFQ01BU2Ny aXB0IGNvbXBsaWFudCBbW0RlZmluZU93blByb3BlcnR5XV0oUCwgRGVzYywgVGhyb3cpIGlzIG5v dAorICogIGltcGxlbWVudGVkIGRpcmVjdGx5LCBidXQgT2JqZWN0LmRlZmluZVByb3BlcnR5KCkg c2VydmVzIGl0cyBwdXJwb3NlLgorICogIFdlIGRvbid0IG5lZWQgdGhlIFtbRGVmaW5lT3duUHJv cGVydHldXSBpbnRlcm5hbGx5IGFuZCB3ZSBkb24ndCBoYXZlIGEKKyAqICBwcm9wZXJ0eSBkZXNj cmlwdG9yIHdpdGggJ21pc3NpbmcgdmFsdWVzJyBzbyBpdCdzIGVhc2llciB0byBhdm9pZCBpdAor ICogIGVudGlyZWx5LgorICoKKyAqICBOb3RlOiB0aGlzIGlzIG9ubHkgY2FsbGVkIGZvciBhY3R1 YWwgb2JqZWN0cywgbm90IHByaW1pdGl2ZSB2YWx1ZXMuCisgKiAgVGhpcyBtdXN0IHN1cHBvcnQg dmlydHVhbCBwcm9wZXJ0aWVzIGZvciBmdWxsIG9iamVjdHMgKGUuZy4gU3RyaW5ncykKKyAqICBi dXQgbm90IGZvciBwbGFpbiB2YWx1ZXMgKGUuZy4gc3RyaW5ncykuICBMaWdodGZ1bmNzLCBldmVu IHRob3VnaAorICogIHByaW1pdGl2ZSBpbiBhIHNlbnNlLCBhcmUgdHJlYXRlZCBsaWtlIG9iamVj dHMgYW5kIGFjY2VwdGVkIGFzIHRhcmdldAorICogIHZhbHVlcy4KKyAqLworCisvKiBYWFg6IHRo aXMgaXMgYSBtYWpvciB0YXJnZXQgZm9yIHNpemUgb3B0aW1pemF0aW9uICovCitEVUtfSU5URVJO QUwKK2R1a19ib29sX3QgZHVrX2hvYmplY3RfZGVmaW5lX3Byb3BlcnR5X2hlbHBlcihkdWtfaHRo cmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGR1a191aW50X3QgZGVmcHJvcF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19oc3RyaW5nICprZXksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IGlkeF92YWx1ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAq Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19o b2JqZWN0ICpzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX2Jvb2xfdCB0aHJvd19mbGFnKSB7CisJZHVrX3VpbnQzMl90IGFycl9pZHg7CisJZHVr X3R2YWwgdHY7CisJZHVrX2Jvb2xfdCBoYXNfZW51bWVyYWJsZTsKKwlkdWtfYm9vbF90IGhhc19j b25maWd1cmFibGU7CisJZHVrX2Jvb2xfdCBoYXNfd3JpdGFibGU7CisJZHVrX2Jvb2xfdCBoYXNf dmFsdWU7CisJZHVrX2Jvb2xfdCBoYXNfZ2V0OworCWR1a19ib29sX3QgaGFzX3NldDsKKwlkdWtf Ym9vbF90IGlzX2VudW1lcmFibGU7CisJZHVrX2Jvb2xfdCBpc19jb25maWd1cmFibGU7CisJZHVr X2Jvb2xfdCBpc193cml0YWJsZTsKKwlkdWtfYm9vbF90IGZvcmNlX2ZsYWc7CisJZHVrX3NtYWxs X3VpbnRfdCBuZXdfZmxhZ3M7CisJZHVrX3Byb3BkZXNjIGN1cnI7CisJZHVrX3VpbnQzMl90IGFy cmlkeF9uZXdfYXJyYXlfbGVuZ3RoOyAgLyogIT0gMCA9PiBwb3N0LXVwZGF0ZSBmb3IgYXJyYXkg J2xlbmd0aCcgKHVzZWQgd2hlbiBrZXkgaXMgYW4gYXJyYXkgaW5kZXgpICovCisJZHVrX3VpbnQz Ml90IGFycmxlbl9vbGRfbGVuOworCWR1a191aW50MzJfdCBhcnJsZW5fbmV3X2xlbjsKKwlkdWtf Ym9vbF90IHBlbmRpbmdfd3JpdGVfcHJvdGVjdDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwp OworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQob2JqICE9IE5V TEwpOworCURVS19BU1NFUlQoa2V5ICE9IE5VTEwpOworCS8qIGlkeF92YWx1ZSBtYXkgYmUgPCAw IChubyB2YWx1ZSksIHNldCBhbmQgZ2V0IG1heSBiZSBOVUxMICovCisKKwlEVUtfQVNTRVJUX1ZB TFNUQUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFDS19TUEFDRSk7CisKKwkvKiBBbGwgdGhlIGZs YWdzIGZpdCBpbiAxNiBiaXRzLCBzbyB3aWxsIGZpdCBpbnRvIGR1a19ib29sX3QuICovCisKKwlo YXNfd3JpdGFibGUgPSAoZGVmcHJvcF9mbGFncyAmIERVS19ERUZQUk9QX0hBVkVfV1JJVEFCTEUp OworCWhhc19lbnVtZXJhYmxlID0gKGRlZnByb3BfZmxhZ3MgJiBEVUtfREVGUFJPUF9IQVZFX0VO VU1FUkFCTEUpOworCWhhc19jb25maWd1cmFibGUgPSAoZGVmcHJvcF9mbGFncyAmIERVS19ERUZQ Uk9QX0hBVkVfQ09ORklHVVJBQkxFKTsKKwloYXNfdmFsdWUgPSAoZGVmcHJvcF9mbGFncyAmIERV S19ERUZQUk9QX0hBVkVfVkFMVUUpOworCWhhc19nZXQgPSAoZGVmcHJvcF9mbGFncyAmIERVS19E RUZQUk9QX0hBVkVfR0VUVEVSKTsKKwloYXNfc2V0ID0gKGRlZnByb3BfZmxhZ3MgJiBEVUtfREVG UFJPUF9IQVZFX1NFVFRFUik7CisJaXNfd3JpdGFibGUgPSAoZGVmcHJvcF9mbGFncyAmIERVS19E RUZQUk9QX1dSSVRBQkxFKTsKKwlpc19lbnVtZXJhYmxlID0gKGRlZnByb3BfZmxhZ3MgJiBEVUtf REVGUFJPUF9FTlVNRVJBQkxFKTsKKwlpc19jb25maWd1cmFibGUgPSAoZGVmcHJvcF9mbGFncyAm IERVS19ERUZQUk9QX0NPTkZJR1VSQUJMRSk7CisJZm9yY2VfZmxhZyA9IChkZWZwcm9wX2ZsYWdz ICYgRFVLX0RFRlBST1BfRk9SQ0UpOworCisJYXJyX2lkeCA9IERVS19IU1RSSU5HX0dFVF9BUlJJ RFhfU0xPVyhrZXkpOworCisJYXJyaWR4X25ld19hcnJheV9sZW5ndGggPSAwOworCXBlbmRpbmdf d3JpdGVfcHJvdGVjdCA9IDA7CisJYXJybGVuX29sZF9sZW4gPSAwOworCWFycmxlbl9uZXdfbGVu ID0gMDsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJoYXNfZW51bWVyYWJsZT0lbGQgaXNfZW51 bWVyYWJsZT0lbGQgIgorCSAgICAgICAgICAgICAgICAgICAgICJoYXNfY29uZmlndXJhYmxlPSVs ZCBpc19jb25maWd1cmFibGU9JWxkICIKKwkgICAgICAgICAgICAgICAgICAgICAiaGFzX3dyaXRh YmxlPSVsZCBpc193cml0YWJsZT0lbGQgIgorCSAgICAgICAgICAgICAgICAgICAgICJoYXNfdmFs dWU9JWxkIHZhbHVlPSUhVCAiCisJICAgICAgICAgICAgICAgICAgICAgImhhc19nZXQ9JWxkIGdl dD0lcD0lIU8gIgorCSAgICAgICAgICAgICAgICAgICAgICJoYXNfc2V0PSVsZCBzZXQ9JXA9JSFP ICIKKwkgICAgICAgICAgICAgICAgICAgICAiYXJyX2lkeD0lbGQgdGhyb3dfZmxhZz0hJWxkIiwK KwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaGFzX2VudW1lcmFibGUsIChsb25nKSBpc19l bnVtZXJhYmxlLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoYXNfY29uZmlndXJhYmxl LCAobG9uZykgaXNfY29uZmlndXJhYmxlLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBo YXNfd3JpdGFibGUsIChsb25nKSBpc193cml0YWJsZSwKKwkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgaGFzX3ZhbHVlLCAoZHVrX3R2YWwgKikgKGlkeF92YWx1ZSA+PSAwID8gZHVrX2dldF90 dmFsKHRociwgaWR4X3ZhbHVlKSA6IE5VTEwpLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSBoYXNfZ2V0LCAodm9pZCAqKSBnZXQsIChkdWtfaGVhcGhkciAqKSBnZXQsCisJICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGhhc19zZXQsICh2b2lkICopIHNldCwgKGR1a19oZWFwaGRyICop IHNldCwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgYXJyX2lkeCwgKGxvbmcpIHRocm93 X2ZsYWcpKTsKKworCS8qCisJICogIEFycmF5IGV4b3RpYyBiZWhhdmlvcnMgY2FuIGJlIGltcGxl bWVudGVkIGF0IHRoaXMgcG9pbnQuICBUaGUgbG9jYWwgdmFyaWFibGVzCisJICogIGFyZSBlc3Nl bnRpYWxseSBhICd2YWx1ZSBjb3B5JyBvZiB0aGUgaW5wdXQgZGVzY3JpcHRvciAoRGVzYyksIHdo aWNoIGlzIG1vZGlmaWVkCisJICogIGJ5IHRoZSBBcnJheSBbW0RlZmluZU93blByb3BlcnR5XV0g KEU1IFNlY3Rpb24gMTUuNC41LjEpLgorCSAqLworCisJaWYgKCFEVUtfSE9CSkVDVF9IQVNfRVhP VElDX0FSUkFZKG9iaikpIHsKKwkJZ290byBza2lwX2FycmF5X2V4b3RpYzsKKwl9CisKKwlpZiAo a2V5ID09IERVS19IVEhSRUFEX1NUUklOR19MRU5HVEgodGhyKSkgeworCQlkdWtfaGFycmF5ICph OworCisJCS8qIEU1IFNlY3Rpb24gMTUuNC41LjEsIHN0ZXAgMywgc3RlcHMgYSAtIGkgYXJlIGlt cGxlbWVudGVkIGhlcmUsIGogLSBuIGF0IHRoZSBlbmQgKi8KKwkJaWYgKCFoYXNfdmFsdWUpIHsK KwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJleG90aWMgYXJyYXkgYmVoYXZpb3IgZm9yICdsZW5n dGgnLCBidXQgbm8gdmFsdWUgaW4gZGVzY3JpcHRvciAtPiBub3JtYWwgYmVoYXZpb3IiKSk7CisJ CQlnb3RvIHNraXBfYXJyYXlfZXhvdGljOworCQl9CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQo ImV4b3RpYyBhcnJheSBiZWhhdmlvciBmb3IgJ2xlbmd0aCcsIHZhbHVlIHByZXNlbnQgaW4gZGVz Y3JpcHRvciAtPiBleG90aWMgYmVoYXZpb3IiKSk7CisKKwkJLyoKKwkJICogIEdldCBvbGQgYW5k IG5ldyBsZW5ndGgKKwkJICovCisKKwkJYSA9IChkdWtfaGFycmF5ICopIG9iajsKKwkJRFVLX0FT U0VSVF9IQVJSQVlfVkFMSUQoYSk7CisJCWFycmxlbl9vbGRfbGVuID0gYS0+bGVuZ3RoOworCisJ CURVS19BU1NFUlQoaWR4X3ZhbHVlID49IDApOworCQlhcnJsZW5fbmV3X2xlbiA9IGR1a19fdG9f bmV3X2FycmF5X2xlbmd0aF9jaGVja2VkKHRociwgRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIGlk eF92YWx1ZSkpOworCQlkdWtfcHVzaF91MzIodGhyLCBhcnJsZW5fbmV3X2xlbik7CisJCWR1a19y ZXBsYWNlKHRociwgaWR4X3ZhbHVlKTsgIC8qIHN0ZXAgMy5lOiByZXBsYWNlICdEZXNjLltbVmFs dWVdXScgKi8KKworCQlEVUtfREREKERVS19ERERQUklOVCgib2xkX2xlbj0lbGQsIG5ld19sZW49 JWxkIiwgKGxvbmcpIGFycmxlbl9vbGRfbGVuLCAobG9uZykgYXJybGVuX25ld19sZW4pKTsKKwor CQlpZiAoYXJybGVuX25ld19sZW4gPj0gYXJybGVuX29sZF9sZW4pIHsKKwkJCS8qIHN0YW5kYXJk IGJlaGF2aW9yLCBzdGVwIDMuZi5pICovCisJCQlEVUtfREREKERVS19ERERQUklOVCgibmV3IGxl bmd0aCBpcyBzYW1lIG9yIGhpZ2hlciBhcyBwcmV2aW91cyA9PiBzdGFuZGFyZCBiZWhhdmlvciIp KTsKKwkJCWdvdG8gc2tpcF9hcnJheV9leG90aWM7CisJCX0KKwkJRFVLX0RERChEVUtfREREUFJJ TlQoIm5ldyBsZW5ndGggaXMgc21hbGxlciB0aGFuIHByZXZpb3VzID0+IGV4b3RpYyBwb3N0IGJl aGF2aW9yIikpOworCisJCS8qIFhYWDogY29uc29saWRhdGVkIGFsZ29yaXRobSBzdGVwIDE1LmYg LT4gcmVkdW5kYW50PyAqLworCQlpZiAoRFVLX0hBUlJBWV9MRU5HVEhfTk9OV1JJVEFCTEUoYSkg JiYgIWZvcmNlX2ZsYWcpIHsKKwkJCS8qIEFycmF5IC5sZW5ndGggaXMgYWx3YXlzIG5vbi1jb25m aWd1cmFibGU7IGlmIGl0J3MgYWxzbworCQkJICogbm9uLXdyaXRhYmxlLCBkb24ndCBhbGxvdyBp dCB0byBiZSB3cml0dGVuLgorCQkJICovCisJCQlnb3RvIGZhaWxfbm90X2NvbmZpZ3VyYWJsZTsK KwkJfQorCisJCS8qIHN0ZXBzIDMuaCBhbmQgMy5pICovCisJCWlmIChoYXNfd3JpdGFibGUgJiYg IWlzX3dyaXRhYmxlKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiZGVzYyB3cml0YWJsZSBp cyBmYWxzZSwgZm9yY2UgaXQgYmFjayB0byB0cnVlLCBhbmQgZmxhZyBwZW5kaW5nIHdyaXRlIHBy b3RlY3QiKSk7CisJCQlpc193cml0YWJsZSA9IDE7CisJCQlwZW5kaW5nX3dyaXRlX3Byb3RlY3Qg PSAxOworCQl9CisKKwkJLyogcmVtYWluaW5nIGFjdHVhbCBzdGVwcyBhcmUgY2FycmllZCBvdXQg aWYgc3RhbmRhcmQgRGVmaW5lT3duUHJvcGVydHkgc3VjY2VlZHMgKi8KKwl9IGVsc2UgaWYgKGFy cl9pZHggIT0gRFVLX19OT19BUlJBWV9JTkRFWCkgeworCQkvKiBYWFg6IGFueSBjaGFuY2Ugb2Yg dW5pZnlpbmcgdGhpcyB3aXRoIHRoZSAnbGVuZ3RoJyBrZXkgaGFuZGxpbmc/ICovCisKKwkJLyog RTUgU2VjdGlvbiAxNS40LjUuMSwgc3RlcCA0ICovCisJCWR1a191aW50MzJfdCBvbGRfbGVuOwor CQlkdWtfaGFycmF5ICphOworCisJCWEgPSAoZHVrX2hhcnJheSAqKSBvYmo7CisJCURVS19BU1NF UlRfSEFSUkFZX1ZBTElEKGEpOworCisJCW9sZF9sZW4gPSBhLT5sZW5ndGg7CisKKwkJaWYgKGFy cl9pZHggPj0gb2xkX2xlbikgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImRlZmluZVByb3Bl cnR5IHJlcXVpcmVzIGFycmF5IGxlbmd0aCB1cGRhdGUgIgorCQkJICAgICAgICAgICAgICAgICAg ICAgIihhcnJfaWR4PSVsZCwgb2xkX2xlbj0lbGQpIiwKKwkJCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSBhcnJfaWR4LCAobG9uZykgb2xkX2xlbikpOworCisJCQlpZiAoRFVLX0hBUlJBWV9M RU5HVEhfTk9OV1JJVEFCTEUoYSkgJiYgIWZvcmNlX2ZsYWcpIHsKKwkJCQkvKiBBcnJheSAubGVu Z3RoIGlzIGFsd2F5cyBub24tY29uZmlndXJhYmxlLCBzbworCQkJCSAqIGlmIGl0J3MgYWxzbyBu b24td3JpdGFibGUsIGRvbid0IGFsbG93IGEgdmFsdWUKKwkJCQkgKiB3cml0ZS4gIFdpdGggZm9y Y2UgZmxhZyBhbGxvdyB3cml0aW5nLgorCQkJCSAqLworCQkJCWdvdG8gZmFpbF9ub3RfY29uZmln dXJhYmxlOworCQkJfQorCisJCQkvKiBhY3R1YWwgdXBkYXRlIGhhcHBlbnMgb25jZSB3cml0ZSBo YXMgYmVlbiBjb21wbGV0ZWQgd2l0aG91dAorCQkJICogZXJyb3IgYmVsb3cuCisJCQkgKi8KKwkJ CURVS19BU1NFUlQoYXJyX2lkeCAhPSAweGZmZmZmZmZmVUwpOworCQkJYXJyaWR4X25ld19hcnJh eV9sZW5ndGggPSBhcnJfaWR4ICsgMTsKKwkJfSBlbHNlIHsKKwkJCURVS19EREQoRFVLX0RERFBS SU5UKCJkZWZpbmVQcm9wZXJ0eSBkb2VzIG5vdCByZXF1aXJlIGxlbmd0aCB1cGRhdGUgIgorCQkJ ICAgICAgICAgICAgICAgICAgICAgIihhcnJfaWR4PSVsZCwgb2xkX2xlbj0lbGQpIC0+IHN0YW5k YXJkIGJlaGF2aW9yIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBhcnJfaWR4LCAo bG9uZykgb2xkX2xlbikpOworCQl9CisJfQorIHNraXBfYXJyYXlfZXhvdGljOgorCisJLyogWFhY OiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3Igd3JpdGluZyBidWZmZXIgb2JqZWN0 CisJICogaW5kZXhlZCBlbGVtZW50cyBoZXJlLiAgQXR0ZW1wdCB0byBkbyBzbyB3aWxsIHN1Y2Nl ZWQgYW5kCisJICogd3JpdGUgYSBjb25jcmV0ZSBwcm9wZXJ0eSBpbnRvIHRoZSBidWZmZXIgb2Jq ZWN0LiAgVGhpcyBzaG91bGQKKwkgKiBiZSBmaXhlZCBhdCBzb21lIHBvaW50IGJ1dCBiZWNhdXNl IGJ1ZmZlcnMgYXJlIGEgY3VzdG9tIGZlYXR1cmUKKwkgKiBhbnl3YXksIHRoaXMgaXMgcmVsYXRp dmVseSB1bmltcG9ydGFudC4KKwkgKi8KKworCS8qCisJICogIEFjdHVhbCBPYmplY3QuZGVmaW5l UHJvcGVydHkoKSBkZWZhdWx0IGFsZ29yaXRobS4KKwkgKi8KKworCS8qCisJICogIEZpcnN0IGNo ZWNrIHdoZXRoZXIgcHJvcGVydHkgZXhpc3RzOyBpZiBub3QsIHNpbXBsZSBjYXNlLiAgVGhpcyBj b3ZlcnMKKwkgKiAgc3RlcHMgMS00LgorCSAqLworCisJaWYgKCFkdWtfX2dldF9vd25fcHJvcGRl c2NfcmF3KHRociwgb2JqLCBrZXksIGFycl9pZHgsICZjdXJyLCBEVUtfR0VUREVTQ19GTEFHX1BV U0hfVkFMVUUpKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJwcm9wZXJ0eSBkb2VzIG5vdCBl eGlzdCIpKTsKKworCQlpZiAoIURVS19IT0JKRUNUX0hBU19FWFRFTlNJQkxFKG9iaikgJiYgIWZv cmNlX2ZsYWcpIHsKKwkJCWdvdG8gZmFpbF9ub3RfZXh0ZW5zaWJsZTsKKwkJfQorCisjaWYgZGVm aW5lZChEVUtfVVNFX1JPTV9PQkpFQ1RTKQorCQkvKiBST00gb2JqZWN0cyBhcmUgbmV2ZXIgZXh0 ZW5zaWJsZSBidXQgZm9yY2UgZmxhZyBtYXkKKwkJICogYWxsb3cgdXMgdG8gY29tZSBoZXJlIGFu eXdheS4KKwkJICovCisJCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19SRUFET05MWSgoZHVr X2hlYXBoZHIgKikgb2JqKSB8fCAhRFVLX0hPQkpFQ1RfSEFTX0VYVEVOU0lCTEUob2JqKSk7CisJ CWlmIChEVUtfSEVBUEhEUl9IQVNfUkVBRE9OTFkoKGR1a19oZWFwaGRyICopIG9iaikpIHsKKwkJ CURVS19EKERVS19EUFJJTlQoImF0dGVtcHQgdG8gZGVmaW5lIHByb3BlcnR5IG9uIGEgcmVhZC1v bmx5IHRhcmdldCBvYmplY3QiKSk7CisJCQlnb3RvIGZhaWxfbm90X2NvbmZpZ3VyYWJsZTsKKwkJ fQorI2VuZGlmCisKKwkJLyogWFhYOiBzaGFyZSBmaW5hbCBzZXR0aW5nIGNvZGUgZm9yIHZhbHVl IGFuZCBmbGFncz8gIGRpZmZpY3VsdCBiZWNhdXNlCisJCSAqIHJlZmNvdW50IGNvZGUgaXMgZGlm ZmVyZW50LiAgU2hhcmUgZW50cnkgYWxsb2NhdGlvbj8gIEJ1dCBjYW4ndCBhbGxvY2F0ZQorCQkg KiB1bnRpbCBhcnJheSBpbmRleCBjaGVja2VkLgorCQkgKi8KKworCQkvKiBzdGVwcyA0LmEgYW5k IDQuYiBhcmUgdHJpY2t5ICovCisJCWlmIChoYXNfc2V0IHx8IGhhc19nZXQpIHsKKwkJCWR1a19p bnRfdCBlX2lkeDsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImNyZWF0ZSBuZXcgYWNjZXNz b3IgcHJvcGVydHkiKSk7CisKKwkJCURVS19BU1NFUlQoaGFzX3NldCB8fCBzZXQgPT0gTlVMTCk7 CisJCQlEVUtfQVNTRVJUKGhhc19nZXQgfHwgZ2V0ID09IE5VTEwpOworCQkJRFVLX0FTU0VSVCgh aGFzX3ZhbHVlKTsKKwkJCURVS19BU1NFUlQoIWhhc193cml0YWJsZSk7CisKKwkJCW5ld19mbGFn cyA9IERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SOyAgLyogZGVmYXVsdHMsIEU1IFNlY3Rpb24g OC42LjEsIFRhYmxlIDcgKi8KKwkJCWlmIChoYXNfZW51bWVyYWJsZSAmJiBpc19lbnVtZXJhYmxl KSB7CisJCQkJbmV3X2ZsYWdzIHw9IERVS19QUk9QREVTQ19GTEFHX0VOVU1FUkFCTEU7CisJCQl9 CisJCQlpZiAoaGFzX2NvbmZpZ3VyYWJsZSAmJiBpc19jb25maWd1cmFibGUpIHsKKwkJCQluZXdf ZmxhZ3MgfD0gRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFOworCQkJfQorCisJCQlpZiAo YXJyX2lkeCAhPSBEVUtfX05PX0FSUkFZX0lOREVYICYmIERVS19IT0JKRUNUX0hBU19BUlJBWV9Q QVJUKG9iaikpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiYWNjZXNzb3IgY2Fubm90IGdv IHRvIGFycmF5IHBhcnQsIGFiYW5kb24gYXJyYXkiKSk7CisJCQkJZHVrX19hYmFuZG9uX2FycmF5 X2NoZWNrZWQodGhyLCBvYmopOworCQkJfQorCisJCQkvKiB3cml0ZSB0byBlbnRyeSBwYXJ0ICov CisJCQllX2lkeCA9IGR1a19faG9iamVjdF9hbGxvY19lbnRyeV9jaGVja2VkKHRociwgb2JqLCBr ZXkpOworCQkJRFVLX0FTU0VSVChlX2lkeCA+PSAwKTsKKworCQkJRFVLX0hPQkpFQ1RfRV9TRVRf VkFMVUVfR0VUVEVSKHRoci0+aGVhcCwgb2JqLCBlX2lkeCwgZ2V0KTsKKwkJCURVS19IT0JKRUNU X0VfU0VUX1ZBTFVFX1NFVFRFUih0aHItPmhlYXAsIG9iaiwgZV9pZHgsIHNldCk7CisJCQlEVUtf SE9CSkVDVF9JTkNSRUZfQUxMT1dOVUxMKHRociwgZ2V0KTsKKwkJCURVS19IT0JKRUNUX0lOQ1JF Rl9BTExPV05VTEwodGhyLCBzZXQpOworCisJCQlEVUtfSE9CSkVDVF9FX1NFVF9GTEFHUyh0aHIt PmhlYXAsIG9iaiwgZV9pZHgsIG5ld19mbGFncyk7CisJCQlnb3RvIHN1Y2Nlc3NfZXhvdGljczsK KwkJfSBlbHNlIHsKKwkJCWR1a19pbnRfdCBlX2lkeDsKKwkJCWR1a190dmFsICp0djI7CisKKwkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJjcmVhdGUgbmV3IGRhdGEgcHJvcGVydHkiKSk7CisKKwkJ CURVS19BU1NFUlQoIWhhc19zZXQpOworCQkJRFVLX0FTU0VSVCghaGFzX2dldCk7CisKKwkJCW5l d19mbGFncyA9IDA7ICAvKiBkZWZhdWx0cywgRTUgU2VjdGlvbiA4LjYuMSwgVGFibGUgNyAqLwor CQkJaWYgKGhhc193cml0YWJsZSAmJiBpc193cml0YWJsZSkgeworCQkJCW5ld19mbGFncyB8PSBE VUtfUFJPUERFU0NfRkxBR19XUklUQUJMRTsKKwkJCX0KKwkJCWlmIChoYXNfZW51bWVyYWJsZSAm JiBpc19lbnVtZXJhYmxlKSB7CisJCQkJbmV3X2ZsYWdzIHw9IERVS19QUk9QREVTQ19GTEFHX0VO VU1FUkFCTEU7CisJCQl9CisJCQlpZiAoaGFzX2NvbmZpZ3VyYWJsZSAmJiBpc19jb25maWd1cmFi bGUpIHsKKwkJCQluZXdfZmxhZ3MgfD0gRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFOwor CQkJfQorCQkJaWYgKGhhc192YWx1ZSkgeworCQkJCWR1a190dmFsICp0dl90bXAgPSBkdWtfcmVx dWlyZV90dmFsKHRociwgaWR4X3ZhbHVlKTsKKwkJCQlEVUtfVFZBTF9TRVRfVFZBTCgmdHYsIHR2 X3RtcCk7CisJCQl9IGVsc2UgeworCQkJCURVS19UVkFMX1NFVF9VTkRFRklORUQoJnR2KTsgIC8q IGRlZmF1bHQgdmFsdWUgKi8KKwkJCX0KKworCQkJaWYgKGFycl9pZHggIT0gRFVLX19OT19BUlJB WV9JTkRFWCAmJiBEVUtfSE9CSkVDVF9IQVNfQVJSQVlfUEFSVChvYmopKSB7CisJCQkJaWYgKG5l d19mbGFncyA9PSBEVUtfUFJPUERFU0NfRkxBR1NfV0VDKSB7CisjaWYgMAorCQkJCQlEVUtfRERE KERVS19ERERQUklOVCgibmV3IGRhdGEgcHJvcGVydHkgYXR0cmlidXRlcyBtYXRjaCBhcnJheSBk ZWZhdWx0cywgYXR0ZW1wdCB0byB3cml0ZSB0byBhcnJheSBwYXJ0IikpOworCQkJCQkvKiBtYXkg YmVjb21lIHNwYXJzZS4uLiovCisjZW5kaWYKKwkJCQkJLyogWFhYOiBoYW5kbGluZyBmb3IgYXJy YXkgcGFydCBtaXNzaW5nIG5vdzsgdGhpcyBkb2Vzbid0IGFmZmVjdAorCQkJCQkgKiBjb21wbGlh bmNlIGJ1dCBjYXVzZXMgYXJyYXkgZW50cnkgd3JpdGVzIHVzaW5nIGRlZmluZVByb3BlcnR5KCkK KwkJCQkJICogdG8gYWx3YXlzIGFiYW5kb24gYXJyYXkgcGFydC4KKwkJCQkJICovCisJCQkJfQor CQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJuZXcgZGF0YSBwcm9wZXJ0eSBjYW5ub3QgZ28gdG8g YXJyYXkgcGFydCwgYWJhbmRvbiBhcnJheSIpKTsKKwkJCQlkdWtfX2FiYW5kb25fYXJyYXlfY2hl Y2tlZCh0aHIsIG9iaik7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQl9CisKKwkJCS8qIHdy aXRlIHRvIGVudHJ5IHBhcnQgKi8KKwkJCWVfaWR4ID0gZHVrX19ob2JqZWN0X2FsbG9jX2VudHJ5 X2NoZWNrZWQodGhyLCBvYmosIGtleSk7CisJCQlEVUtfQVNTRVJUKGVfaWR4ID49IDApOworCQkJ dHYyID0gRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfVFZBTF9QVFIodGhyLT5oZWFwLCBvYmosIGVf aWR4KTsKKwkJCURVS19UVkFMX1NFVF9UVkFMKHR2MiwgJnR2KTsKKwkJCURVS19UVkFMX0lOQ1JF Rih0aHIsIHR2Mik7CisKKwkJCURVS19IT0JKRUNUX0VfU0VUX0ZMQUdTKHRoci0+aGVhcCwgb2Jq LCBlX2lkeCwgbmV3X2ZsYWdzKTsKKwkJCWdvdG8gc3VjY2Vzc19leG90aWNzOworCQl9CisJCURV S19VTlJFQUNIQUJMRSgpOworCX0KKworCS8qIHdlIGN1cnJlbnRseSBhc3N1bWUgdmlydHVhbCBw cm9wZXJ0aWVzIGFyZSBub3QgY29uZmlndXJhYmxlIChhcyBub25lIG9mIHRoZW0gYXJlKSAqLwor CURVS19BU1NFUlQoKGN1cnIuZV9pZHggPj0gMCB8fCBjdXJyLmFfaWR4ID49IDApIHx8ICEoY3Vy ci5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkpOworCisJLyogW29iaiBr ZXkgZGVzYyB2YWx1ZSBnZXQgc2V0IGN1cnJfdmFsdWVdICovCisKKwkvKgorCSAqICBQcm9wZXJ0 eSBhbHJlYWR5IGV4aXN0cy4gIFN0ZXBzIDUtNiBkZXRlY3Qgd2hldGhlciBhbnkgY2hhbmdlcyBu ZWVkCisJICogIHRvIGJlIG1hZGUuCisJICovCisKKwlpZiAoaGFzX2VudW1lcmFibGUpIHsKKwkJ aWYgKGlzX2VudW1lcmFibGUpIHsKKwkJCWlmICghKGN1cnIuZmxhZ3MgJiBEVUtfUFJPUERFU0Nf RkxBR19FTlVNRVJBQkxFKSkgeworCQkJCWdvdG8gbmVlZF9jaGVjazsKKwkJCX0KKwkJfSBlbHNl IHsKKwkJCWlmIChjdXJyLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSkgewor CQkJCWdvdG8gbmVlZF9jaGVjazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaGFzX2NvbmZpZ3VyYWJs ZSkgeworCQlpZiAoaXNfY29uZmlndXJhYmxlKSB7CisJCQlpZiAoIShjdXJyLmZsYWdzICYgRFVL X1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKSkgeworCQkJCWdvdG8gbmVlZF9jaGVjazsKKwkJ CX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjdXJyLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQ09O RklHVVJBQkxFKSB7CisJCQkJZ290byBuZWVkX2NoZWNrOworCQkJfQorCQl9CisJfQorCWlmICho YXNfdmFsdWUpIHsKKwkJZHVrX3R2YWwgKnRtcDE7CisJCWR1a190dmFsICp0bXAyOworCisJCS8q IGF0dGVtcHQgdG8gY2hhbmdlIGZyb20gYWNjZXNzb3IgdG8gZGF0YSBwcm9wZXJ0eSAqLworCQlp ZiAoY3Vyci5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSB7CisJCQlnb3RvIG5l ZWRfY2hlY2s7CisJCX0KKworCQl0bXAxID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIC0xKTsgICAg ICAgICAvKiBjdXJyIHZhbHVlICovCisJCXRtcDIgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4 X3ZhbHVlKTsgIC8qIG5ldyB2YWx1ZSAqLworCQlpZiAoIWR1a19qc19zYW1ldmFsdWUodG1wMSwg dG1wMikpIHsKKwkJCWdvdG8gbmVlZF9jaGVjazsKKwkJfQorCX0KKwlpZiAoaGFzX3dyaXRhYmxl KSB7CisJCS8qIGF0dGVtcHQgdG8gY2hhbmdlIGZyb20gYWNjZXNzb3IgdG8gZGF0YSBwcm9wZXJ0 eSAqLworCQlpZiAoY3Vyci5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSB7CisJ CQlnb3RvIG5lZWRfY2hlY2s7CisJCX0KKworCQlpZiAoaXNfd3JpdGFibGUpIHsKKwkJCWlmICgh KGN1cnIuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSkpIHsKKwkJCQlnb3RvIG5l ZWRfY2hlY2s7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY3Vyci5mbGFncyAmIERVS19QUk9Q REVTQ19GTEFHX1dSSVRBQkxFKSB7CisJCQkJZ290byBuZWVkX2NoZWNrOworCQkJfQorCQl9CisJ fQorCWlmIChoYXNfc2V0KSB7CisJCWlmIChjdXJyLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdf QUNDRVNTT1IpIHsKKwkJCWlmIChzZXQgIT0gY3Vyci5zZXQpIHsKKwkJCQlnb3RvIG5lZWRfY2hl Y2s7CisJCQl9CisJCX0gZWxzZSB7CisJCQlnb3RvIG5lZWRfY2hlY2s7CisJCX0KKwl9CisJaWYg KGhhc19nZXQpIHsKKwkJaWYgKGN1cnIuZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19BQ0NFU1NP UikgeworCQkJaWYgKGdldCAhPSBjdXJyLmdldCkgeworCQkJCWdvdG8gbmVlZF9jaGVjazsKKwkJ CX0KKwkJfSBlbHNlIHsKKwkJCWdvdG8gbmVlZF9jaGVjazsKKwkJfQorCX0KKworCS8qIHByb3Bl cnR5IGV4aXN0cywgZWl0aGVyICdkZXNjJyBpcyBlbXB0eSwgb3IgYWxsIHZhbHVlcworCSAqIG1h dGNoIChTYW1lVmFsdWUpCisJICovCisJZ290byBzdWNjZXNzX25vX2V4b3RpY3M7CisKKyBuZWVk X2NoZWNrOgorCisJLyoKKwkgKiAgU29tZSBjaGFuZ2UocykgbmVlZCB0byBiZSBtYWRlLiAgU3Rl cHMgNy0xMS4KKwkgKi8KKworCS8qIHNoYXJlZCBjaGVja3MgZm9yIGFsbCBkZXNjcmlwdG9yIHR5 cGVzICovCisJaWYgKCEoY3Vyci5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJM RSkgJiYgIWZvcmNlX2ZsYWcpIHsKKwkJaWYgKGhhc19jb25maWd1cmFibGUgJiYgaXNfY29uZmln dXJhYmxlKSB7CisJCQlnb3RvIGZhaWxfbm90X2NvbmZpZ3VyYWJsZTsKKwkJfQorCQlpZiAoaGFz X2VudW1lcmFibGUpIHsKKwkJCWlmIChjdXJyLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfRU5V TUVSQUJMRSkgeworCQkJCWlmICghaXNfZW51bWVyYWJsZSkgeworCQkJCQlnb3RvIGZhaWxfbm90 X2NvbmZpZ3VyYWJsZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChpc19lbnVtZXJhYmxl KSB7CisJCQkJCWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxlOworCQkJCX0KKwkJCX0KKwkJfQor CX0KKworCS8qIFZpcnR1YWwgcHJvcGVydGllcyBkb24ndCBoYXZlIGJhY2tpbmcgc28gdGhleSBj YW4ndCBtb3N0bHkgYmUKKwkgKiBlZGl0ZWQuICBTb21lIHZpcnR1YWwgcHJvcGVydGllcyBhcmUs IGhvd2V2ZXIsIHdyaXRhYmxlOiBmb3IKKwkgKiBleGFtcGxlLCB2aXJ0dWFsIGluZGV4IHByb3Bl cnRpZXMgb2YgYnVmZmVyIG9iamVjdHMgYW5kIEFycmF5CisJICogaW5zdGFuY2UgLmxlbmd0aC4g IFRoZXNlIGFyZSBub3QgY29uZmlndXJhYmxlIHNvIHRoZSBjaGVja3MKKwkgKiBhYm92ZSBtb3N0 bHkgY292ZXIgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZW0sIGV4Y2VwdCB3aGVuIHRoZQorCSAqIGR1 a19kZWZfcHJvcCgpIGNhbGwgaXMgdXNlZCB3aXRoIERVS19ERUZQUk9QX0ZPUkNFOyBldmVuIGlu CisJICogdGhhdCBjYXNlIHdlIGNhbid0IGZvcmNpYmx5IGNoYW5nZSB0aGUgcHJvcGVydHkgYXR0 cmlidXRlcworCSAqIGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIGNvbmNyZXRlIGJhY2tpbmcuCisJ ICovCisKKwkvKiBYWFg6IGZvciBST00gb2JqZWN0cyB0b28gaXQnZCBiZSBiZXN0IGlmIHZhbHVl IG1vZGlmeSB3YXMKKwkgKiBhbGxvd2VkIGlmIHRoZSB2YWx1ZSBtYXRjaGVzIFNhbWVWYWx1ZS4K KwkgKi8KKwkvKiBSZWplY3QgYXR0ZW1wdCB0byBjaGFuZ2UgYSByZWFkLW9ubHkgb2JqZWN0LiAq LworI2lmIGRlZmluZWQoRFVLX1VTRV9ST01fT0JKRUNUUykKKwlpZiAoRFVLX0hFQVBIRFJfSEFT X1JFQURPTkxZKChkdWtfaGVhcGhkciAqKSBvYmopKSB7CisJCURVS19ERChEVUtfRERQUklOVCgi YXR0ZW1wdCB0byBkZWZpbmUgcHJvcGVydHkgb24gcmVhZC1vbmx5IHRhcmdldCBvYmplY3QiKSk7 CisJCWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxlOworCX0KKyNlbmRpZgorCisJLyogZGVzY3Jp cHRvciB0eXBlIHNwZWNpZmljIGNoZWNrcyAqLworCWlmIChoYXNfc2V0IHx8IGhhc19nZXQpIHsK KwkJLyogSXNBY2Nlc3NvckRlc2NyaXB0b3IoZGVzYykgPT0gdHJ1ZSAqLworCQlEVUtfQVNTRVJU KCFoYXNfd3JpdGFibGUpOworCQlEVUtfQVNTRVJUKCFoYXNfdmFsdWUpOworCisJCWlmIChjdXJy LmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQUNDRVNTT1IpIHsKKwkJCS8qIGN1cnIgYW5kIGRl c2MgYXJlIGFjY2Vzc29ycyAqLworCQkJaWYgKCEoY3Vyci5mbGFncyAmIERVS19QUk9QREVTQ19G TEFHX0NPTkZJR1VSQUJMRSkgJiYgIWZvcmNlX2ZsYWcpIHsKKwkJCQlpZiAoaGFzX3NldCAmJiBz ZXQgIT0gY3Vyci5zZXQpIHsKKwkJCQkJZ290byBmYWlsX25vdF9jb25maWd1cmFibGU7CisJCQkJ fQorCQkJCWlmIChoYXNfZ2V0ICYmIGdldCAhPSBjdXJyLmdldCkgeworCQkJCQlnb3RvIGZhaWxf bm90X2NvbmZpZ3VyYWJsZTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlkdWtfYm9vbF90 IHJjOworCQkJZHVrX3R2YWwgKnR2MTsKKworCQkJLyogY3VyciBpcyBkYXRhLCBkZXNjIGlzIGFj Y2Vzc29yICovCisJCQlpZiAoIShjdXJyLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQ09ORklH VVJBQkxFKSAmJiAhZm9yY2VfZmxhZykgeworCQkJCWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxl OworCQkJfQorCisJCQlEVUtfREREKERVS19ERERQUklOVCgiY29udmVydCBwcm9wZXJ0eSB0byBh Y2Nlc3NvciBwcm9wZXJ0eSIpKTsKKwkJCWlmIChjdXJyLmFfaWR4ID49IDApIHsKKwkJCQlEVUtf REREKERVS19ERERQUklOVCgicHJvcGVydHkgdG8gY29udmVydCBpcyBzdG9yZWQgaW4gYW4gYXJy YXkgZW50cnksIGFiYW5kb24gYXJyYXkgYW5kIHJlLWxvb2t1cCIpKTsKKwkJCQlkdWtfX2FiYW5k b25fYXJyYXlfY2hlY2tlZCh0aHIsIG9iaik7CisJCQkJZHVrX3BvcF91bnNhZmUodGhyKTsgIC8q IHJlbW92ZSBvbGQgdmFsdWUgKi8KKwkJCQlyYyA9IGR1a19fZ2V0X293bl9wcm9wZGVzY19yYXco dGhyLCBvYmosIGtleSwgYXJyX2lkeCwgJmN1cnIsIERVS19HRVRERVNDX0ZMQUdfUFVTSF9WQUxV RSk7CisJCQkJRFVLX1VOUkVGKHJjKTsKKwkJCQlEVUtfQVNTRVJUKHJjICE9IDApOworCQkJCURV S19BU1NFUlQoY3Vyci5lX2lkeCA+PSAwICYmIGN1cnIuYV9pZHggPCAwKTsKKwkJCX0KKwkJCWlm IChjdXJyLmVfaWR4IDwgMCkgeworCQkJCURVS19BU1NFUlQoY3Vyci5hX2lkeCA8IDAgJiYgY3Vy ci5lX2lkeCA8IDApOworCQkJCWdvdG8gZmFpbF92aXJ0dWFsOyAgLyogc2FmZWd1YXJkIGZvciB2 aXJ0dWFsIHByb3BlcnR5ICovCisJCQl9CisKKwkJCURVS19BU1NFUlQoY3Vyci5lX2lkeCA+PSAw KTsKKwkJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0VfU0xPVF9JU19BQ0NFU1NPUih0aHItPmhl YXAsIG9iaiwgY3Vyci5lX2lkeCkpOworCisJCQl0djEgPSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxV RV9UVkFMX1BUUih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCk7CisJCQlEVUtfVFZBTF9TRVRf VU5ERUZJTkVEX1VQRFJFRl9OT1JaKHRociwgdHYxKTsgIC8qIFhYWDoganVzdCBkZWNyZWYgKi8K KworCQkJRFVLX0hPQkpFQ1RfRV9TRVRfVkFMVUVfR0VUVEVSKHRoci0+aGVhcCwgb2JqLCBjdXJy LmVfaWR4LCBOVUxMKTsKKwkJCURVS19IT0JKRUNUX0VfU0VUX1ZBTFVFX1NFVFRFUih0aHItPmhl YXAsIG9iaiwgY3Vyci5lX2lkeCwgTlVMTCk7CisJCQlEVUtfSE9CSkVDVF9FX1NMT1RfQ0xFQVJf V1JJVEFCTEUodGhyLT5oZWFwLCBvYmosIGN1cnIuZV9pZHgpOworCQkJRFVLX0hPQkpFQ1RfRV9T TE9UX1NFVF9BQ0NFU1NPUih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCk7CisKKwkJCURVS19E REQoRFVLX0RERFBSSU5UKCJmbGFncyBhZnRlciBkYXRhLT5hY2Nlc3NvciBjb252ZXJzaW9uOiAw eCUwMmx4IiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBEVUtfSE9C SkVDVF9FX0dFVF9GTEFHUyh0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCkpKTsKKwkJCS8qIFVw ZGF0ZSBjdXJyLmZsYWdzOyBmYXN0ZXIgdGhhbiBhIHJlLWxvb2t1cC4gKi8KKwkJCWN1cnIuZmxh Z3MgJj0gfkRVS19QUk9QREVTQ19GTEFHX1dSSVRBQkxFOworCQkJY3Vyci5mbGFncyB8PSBEVUtf UFJPUERFU0NfRkxBR19BQ0NFU1NPUjsKKwkJfQorCX0gZWxzZSBpZiAoaGFzX3ZhbHVlIHx8IGhh c193cml0YWJsZSkgeworCQkvKiBJc0RhdGFEZXNjcmlwdG9yKGRlc2MpID09IHRydWUgKi8KKwkJ RFVLX0FTU0VSVCghaGFzX3NldCk7CisJCURVS19BU1NFUlQoIWhhc19nZXQpOworCisJCWlmIChj dXJyLmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfQUNDRVNTT1IpIHsKKwkJCWR1a19ob2JqZWN0 ICp0bXA7CisKKwkJCS8qIGN1cnIgaXMgYWNjZXNzb3IsIGRlc2MgaXMgZGF0YSAqLworCQkJaWYg KCEoY3Vyci5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRSkgJiYgIWZvcmNl X2ZsYWcpIHsKKwkJCQlnb3RvIGZhaWxfbm90X2NvbmZpZ3VyYWJsZTsKKwkJCX0KKworCQkJLyog Y3VyciBpcyBhY2Nlc3NvciAtPiBjYW5ub3QgYmUgaW4gYXJyYXkgcGFydC4gKi8KKwkJCURVS19B U1NFUlQoY3Vyci5hX2lkeCA8IDApOworCQkJaWYgKGN1cnIuZV9pZHggPCAwKSB7CisJCQkJZ290 byBmYWlsX3ZpcnR1YWw7ICAvKiBzYWZlZ3VhcmQ7IG5vIHZpcnR1YWwgYWNjZXNzb3JzIG5vdyAq LworCQkJfQorCisJCQlEVUtfREREKERVS19ERERQUklOVCgiY29udmVydCBwcm9wZXJ0eSB0byBk YXRhIHByb3BlcnR5IikpOworCisJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0VfU0xPVF9JU19B Q0NFU1NPUih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCkpOworCQkJdG1wID0gRFVLX0hPQkpF Q1RfRV9HRVRfVkFMVUVfR0VUVEVSKHRoci0+aGVhcCwgb2JqLCBjdXJyLmVfaWR4KTsKKwkJCURV S19VTlJFRih0bXApOworCQkJRFVLX0hPQkpFQ1RfRV9TRVRfVkFMVUVfR0VUVEVSKHRoci0+aGVh cCwgb2JqLCBjdXJyLmVfaWR4LCBOVUxMKTsKKwkJCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX0FM TE9XTlVMTCh0aHIsIHRtcCk7CisJCQl0bXAgPSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9TRVRU RVIodGhyLT5oZWFwLCBvYmosIGN1cnIuZV9pZHgpOworCQkJRFVLX1VOUkVGKHRtcCk7CisJCQlE VUtfSE9CSkVDVF9FX1NFVF9WQUxVRV9TRVRURVIodGhyLT5oZWFwLCBvYmosIGN1cnIuZV9pZHgs IE5VTEwpOworCQkJRFVLX0hPQkpFQ1RfREVDUkVGX05PUlpfQUxMT1dOVUxMKHRociwgdG1wKTsK KworCQkJRFVLX1RWQUxfU0VUX1VOREVGSU5FRChEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9UVkFM X1BUUih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCkpOworCQkJRFVLX0hPQkpFQ1RfRV9TTE9U X0NMRUFSX1dSSVRBQkxFKHRoci0+aGVhcCwgb2JqLCBjdXJyLmVfaWR4KTsKKwkJCURVS19IT0JK RUNUX0VfU0xPVF9DTEVBUl9BQ0NFU1NPUih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCk7CisK KwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJmbGFncyBhZnRlciBhY2Nlc3Nvci0+ZGF0YSBjb252 ZXJzaW9uOiAweCUwMmx4IiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25n KSBEVUtfSE9CSkVDVF9FX0dFVF9GTEFHUyh0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCkpKTsK KworCQkJLyogVXBkYXRlIGN1cnIuZmxhZ3M7IGZhc3RlciB0aGFuIGEgcmUtbG9va3VwLiAqLwor CQkJY3Vyci5mbGFncyAmPSB+KERVS19QUk9QREVTQ19GTEFHX1dSSVRBQkxFIHwgRFVLX1BST1BE RVNDX0ZMQUdfQUNDRVNTT1IpOworCQl9IGVsc2UgeworCQkJLyogY3VyciBhbmQgZGVzYyBhcmUg ZGF0YSAqLworCQkJaWYgKCEoY3Vyci5mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VS QUJMRSkgJiYgIWZvcmNlX2ZsYWcpIHsKKwkJCQlpZiAoIShjdXJyLmZsYWdzICYgRFVLX1BST1BE RVNDX0ZMQUdfV1JJVEFCTEUpICYmIGhhc193cml0YWJsZSAmJiBpc193cml0YWJsZSkgeworCQkJ CQlnb3RvIGZhaWxfbm90X2NvbmZpZ3VyYWJsZTsKKwkJCQl9CisJCQkJLyogTm90ZTogY2hhbmdp bmcgZnJvbSB3cml0YWJsZSB0byBub24td3JpdGFibGUgaXMgT0sgKi8KKwkJCQlpZiAoIShjdXJy LmZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEUpICYmIGhhc192YWx1ZSkgeworCQkJ CQlkdWtfdHZhbCAqdG1wMSA9IGR1a19yZXF1aXJlX3R2YWwodGhyLCAtMSk7ICAgICAgICAgLyog Y3VyciB2YWx1ZSAqLworCQkJCQlkdWtfdHZhbCAqdG1wMiA9IGR1a19yZXF1aXJlX3R2YWwodGhy LCBpZHhfdmFsdWUpOyAgLyogbmV3IHZhbHVlICovCisJCQkJCWlmICghZHVrX2pzX3NhbWV2YWx1 ZSh0bXAxLCB0bXAyKSkgeworCQkJCQkJZ290byBmYWlsX25vdF9jb25maWd1cmFibGU7CisJCQkJ CX0KKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBJc0dlbmVyaWNEZXNjcmlwdG9y KGRlc2MpID09IHRydWU7IHRoaXMgbWVhbnMgaW4gcHJhY3RpY2UgdGhhdCAnZGVzYycKKwkJICog b25seSBoYXMgW1tFbnVtZXJhYmxlXV0gb3IgW1tDb25maWd1cmFibGVdXSBmbGFnIHVwZGF0ZXMs IHdoaWNoIGFyZQorCQkgKiBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCisJCSAqLworCisJCURVS19B U1NFUlQoIWhhc192YWx1ZSAmJiAhaGFzX3dyaXRhYmxlICYmICFoYXNfZ2V0ICYmICFoYXNfc2V0 KTsKKwl9CisKKwkvKgorCSAqICBTdGFydCBkb2luZyBwcm9wZXJ0eSBhdHRyaWJ1dGVzIHVwZGF0 ZXMuICBTdGVwcyAxMi0xMy4KKwkgKgorCSAqICBTdGFydCBieSBjb21wdXRpbmcgbmV3IGF0dHJp YnV0ZSBmbGFncyB3aXRob3V0IHdyaXRpbmcgeWV0LgorCSAqICBQcm9wZXJ0eSB0eXBlIGNvbnZl cnNpb24gaXMgZG9uZSBhYm92ZSBpZiBuZWNlc3NhcnkuCisJICovCisKKwluZXdfZmxhZ3MgPSBj dXJyLmZsYWdzOworCisJaWYgKGhhc19lbnVtZXJhYmxlKSB7CisJCWlmIChpc19lbnVtZXJhYmxl KSB7CisJCQluZXdfZmxhZ3MgfD0gRFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRTsKKwkJfSBl bHNlIHsKKwkJCW5ld19mbGFncyAmPSB+RFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRTsKKwkJ fQorCX0KKwlpZiAoaGFzX2NvbmZpZ3VyYWJsZSkgeworCQlpZiAoaXNfY29uZmlndXJhYmxlKSB7 CisJCQluZXdfZmxhZ3MgfD0gRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFOworCQl9IGVs c2UgeworCQkJbmV3X2ZsYWdzICY9IH5EVUtfUFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEU7CisJ CX0KKwl9CisJaWYgKGhhc193cml0YWJsZSkgeworCQlpZiAoaXNfd3JpdGFibGUpIHsKKwkJCW5l d19mbGFncyB8PSBEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRTsKKwkJfSBlbHNlIHsKKwkJCW5l d19mbGFncyAmPSB+RFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEU7CisJCX0KKwl9CisKKwkvKiBY WFg6IHdyaXRlIHByb3RlY3QgYWZ0ZXIgZmxhZz8gLT4gYW55IGNoYW5jZSBvZiBoYW5kbGluZyBp dCBoZXJlPyAqLworCisJRFVLX0RERChEVUtfREREUFJJTlQoIm5ldyBmbGFncyB0aGF0IHdlIHdh bnQgdG8gd3JpdGU6IDB4JTAybHgiLAorCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nKSBuZXdfZmxhZ3MpKTsKKworCS8qCisJICogIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBh YmFuZG9uIGFuIGFycmF5IHBhcnQgKGlmIGl0IGV4aXN0cykKKwkgKi8KKworCWlmIChjdXJyLmFf aWR4ID49IDApIHsKKwkJZHVrX2Jvb2xfdCByYzsKKworCQlEVUtfQVNTRVJUKGN1cnIuZV9pZHgg PCAwKTsKKworCQlpZiAobmV3X2ZsYWdzID09IERVS19QUk9QREVTQ19GTEFHU19XRUMpIHsKKwkJ CWR1a190dmFsICp0djEsICp0djI7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJhcnJheSBp bmRleCwgbmV3IHByb3BlcnR5IGF0dHJpYnV0ZXMgbWF0Y2ggYXJyYXkgZGVmYXVsdHMsIHVwZGF0 ZSBpbi1wbGFjZSIpKTsKKworCQkJRFVLX0FTU0VSVChjdXJyLmZsYWdzID09IERVS19QUk9QREVT Q19GTEFHU19XRUMpOyAgLyogbXVzdCBoYXZlIGJlZW4sIHNpbmNlIGluIGFycmF5IHBhcnQgKi8K KwkJCURVS19BU1NFUlQoIWhhc19zZXQpOworCQkJRFVLX0FTU0VSVCghaGFzX2dldCk7CisJCQlE VUtfQVNTRVJUKGlkeF92YWx1ZSA+PSAwKTsgIC8qIG11c3QgYmU6IGlmIGF0dHJpYnV0ZXMgbWF0 Y2ggYW5kIHdlIGdldCBoZXJlIHRoZSB2YWx1ZSBtdXN0IGRpZmZlciAob3RoZXJ3aXNlIG5vIGNo YW5nZSkgKi8KKworCQkJdHYyID0gZHVrX3JlcXVpcmVfdHZhbCh0aHIsIGlkeF92YWx1ZSk7CisJ CQl0djEgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCBvYmosIGN1cnIu YV9pZHgpOworCQkJRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGKHRociwgdHYxLCB0djIpOyAgLyog c2lkZSBlZmZlY3RzOyBtYXkgaW52YWxpZGF0ZSBhX2lkeCAqLworCQkJZ290byBzdWNjZXNzX2V4 b3RpY3M7CisJCX0KKworCQlEVUtfREREKERVS19ERERQUklOVCgiYXJyYXkgaW5kZXgsIG5ldyBw cm9wZXJ0eSBhdHRyaWJ1dGVzIGRvIG5vdCBtYXRjaCBhcnJheSBkZWZhdWx0cywgYWJhbmRvbiBh cnJheSBhbmQgcmUtbG9va3VwIikpOworCQlkdWtfX2FiYW5kb25fYXJyYXlfY2hlY2tlZCh0aHIs IG9iaik7CisJCWR1a19wb3BfdW5zYWZlKHRocik7ICAvKiByZW1vdmUgb2xkIHZhbHVlICovCisJ CXJjID0gZHVrX19nZXRfb3duX3Byb3BkZXNjX3Jhdyh0aHIsIG9iaiwga2V5LCBhcnJfaWR4LCAm Y3VyciwgRFVLX0dFVERFU0NfRkxBR19QVVNIX1ZBTFVFKTsKKwkJRFVLX1VOUkVGKHJjKTsKKwkJ RFVLX0FTU0VSVChyYyAhPSAwKTsKKwkJRFVLX0FTU0VSVChjdXJyLmVfaWR4ID49IDAgJiYgY3Vy ci5hX2lkeCA8IDApOworCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJ1cGRhdGluZyBleGlz dGluZyBwcm9wZXJ0eSBpbiBlbnRyeSBwYXJ0IikpOworCisJLyogQXJyYXkgY2FzZSBpcyBoYW5k bGVkIGNvbXByZWhlbnNpdmVseSBhYm92ZTogZWl0aGVyIGluIGVudHJ5CisJICogcGFydCBvciBh IHZpcnR1YWwgcHJvcGVydHkuCisJICovCisJRFVLX0FTU0VSVChjdXJyLmFfaWR4IDwgMCk7CisK KwlEVUtfREREKERVS19ERERQUklOVCgidXBkYXRlIGV4aXN0aW5nIHByb3BlcnR5IGF0dHJpYnV0 ZXMiKSk7CisJaWYgKGN1cnIuZV9pZHggPj0gMCkgeworCQlEVUtfSE9CSkVDVF9FX1NFVF9GTEFH Uyh0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCwgbmV3X2ZsYWdzKTsKKwl9IGVsc2UgeworCQkv KiBGb3IgQXJyYXkgLmxlbmd0aCB0aGUgb25seSBhbGxvd2VkIHRyYW5zaXRpb24gaXMgZm9yIC5s ZW5ndGgKKwkJICogdG8gYmVjb21lIG5vbi13cml0YWJsZS4KKwkJICovCisJCWlmIChrZXkgPT0g RFVLX0hUSFJFQURfU1RSSU5HX0xFTkdUSCh0aHIpICYmIERVS19IT0JKRUNUX0hBU19FWE9USUNf QVJSQVkob2JqKSkgeworCQkJZHVrX2hhcnJheSAqYTsKKwkJCWEgPSAoZHVrX2hhcnJheSAqKSBv Ymo7CisJCQlEVUtfREQoRFVLX0REUFJJTlQoIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpIGF0dHJp YnV0ZSB1cGRhdGUgZm9yIGR1a19oYXJyYXkgLmxlbmd0aCAtPiAlMDJseCIsICh1bnNpZ25lZCBs b25nKSBuZXdfZmxhZ3MpKTsKKwkJCURVS19BU1NFUlRfSEFSUkFZX1ZBTElEKGEpOworCQkJaWYg KChuZXdfZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR1NfRUMpICE9IChjdXJyLmZsYWdzICYgRFVL X1BST1BERVNDX0ZMQUdTX0VDKSkgeworCQkJCURVS19EKERVS19EUFJJTlQoIk9iamVjdC5kZWZp bmVQcm9wZXJ0eSgpIGF0dGVtcHQgdG8gY2hhbmdlIHZpcnR1YWwgYXJyYXkgLmxlbmd0aCBlbnVt ZXJhYmxlIG9yIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUsIGZhaWwiKSk7CisJCQkJZ290byBmYWls X3ZpcnR1YWw7CisJCQl9CisJCQlpZiAobmV3X2ZsYWdzICYgRFVLX1BST1BERVNDX0ZMQUdfV1JJ VEFCTEUpIHsKKwkJCQlEVUtfSEFSUkFZX1NFVF9MRU5HVEhfV1JJVEFCTEUoYSk7CisJCQl9IGVs c2UgeworCQkJCURVS19IQVJSQVlfU0VUX0xFTkdUSF9OT05XUklUQUJMRShhKTsKKwkJCX0KKwkJ fQorCX0KKworCWlmIChoYXNfc2V0KSB7CisJCWR1a19ob2JqZWN0ICp0bXA7CisKKwkJLyogVmly dHVhbCBwcm9wZXJ0aWVzIGFyZSBub24tY29uZmlndXJhYmxlIGJ1dCB3aXRoIGEgJ2ZvcmNlJwor CQkgKiBmbGFnIHdlIG1pZ2h0IGNvbWUgaGVyZSBzbyBjaGVjayBleHBsaWNpdGx5IGZvciB2aXJ0 dWFsLgorCQkgKi8KKwkJaWYgKGN1cnIuZV9pZHggPCAwKSB7CisJCQlnb3RvIGZhaWxfdmlydHVh bDsKKwkJfQorCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ1cGRhdGUgZXhpc3RpbmcgcHJvcGVy dHkgc2V0dGVyIikpOworCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0VfU0xPVF9JU19BQ0NFU1NP Uih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCkpOworCisJCXRtcCA9IERVS19IT0JKRUNUX0Vf R0VUX1ZBTFVFX1NFVFRFUih0aHItPmhlYXAsIG9iaiwgY3Vyci5lX2lkeCk7CisJCURVS19VTlJF Rih0bXApOworCQlEVUtfSE9CSkVDVF9FX1NFVF9WQUxVRV9TRVRURVIodGhyLT5oZWFwLCBvYmos IGN1cnIuZV9pZHgsIHNldCk7CisJCURVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwodGhyLCBz ZXQpOworCQlEVUtfSE9CSkVDVF9ERUNSRUZfQUxMT1dOVUxMKHRociwgdG1wKTsgIC8qIHNpZGUg ZWZmZWN0czsgbWF5IGludmFsaWRhdGUgZV9pZHggKi8KKwl9CisJaWYgKGhhc19nZXQpIHsKKwkJ ZHVrX2hvYmplY3QgKnRtcDsKKworCQlpZiAoY3Vyci5lX2lkeCA8IDApIHsKKwkJCWdvdG8gZmFp bF92aXJ0dWFsOworCQl9CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInVwZGF0ZSBleGlzdGlu ZyBwcm9wZXJ0eSBnZXR0ZXIiKSk7CisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfRV9TTE9UX0lT X0FDQ0VTU09SKHRoci0+aGVhcCwgb2JqLCBjdXJyLmVfaWR4KSk7CisKKwkJdG1wID0gRFVLX0hP QkpFQ1RfRV9HRVRfVkFMVUVfR0VUVEVSKHRoci0+aGVhcCwgb2JqLCBjdXJyLmVfaWR4KTsKKwkJ RFVLX1VOUkVGKHRtcCk7CisJCURVS19IT0JKRUNUX0VfU0VUX1ZBTFVFX0dFVFRFUih0aHItPmhl YXAsIG9iaiwgY3Vyci5lX2lkeCwgZ2V0KTsKKwkJRFVLX0hPQkpFQ1RfSU5DUkVGX0FMTE9XTlVM TCh0aHIsIGdldCk7CisJCURVS19IT0JKRUNUX0RFQ1JFRl9BTExPV05VTEwodGhyLCB0bXApOyAg Lyogc2lkZSBlZmZlY3RzOyBtYXkgaW52YWxpZGF0ZSBlX2lkeCAqLworCX0KKwlpZiAoaGFzX3Zh bHVlKSB7CisJCWR1a190dmFsICp0djEsICp0djI7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQo InVwZGF0ZSBleGlzdGluZyBwcm9wZXJ0eSB2YWx1ZSIpKTsKKworCQlpZiAoY3Vyci5lX2lkeCA+ PSAwKSB7CisJCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9FX1NMT1RfSVNfQUNDRVNTT1IodGhy LT5oZWFwLCBvYmosIGN1cnIuZV9pZHgpKTsKKwkJCXR2MiA9IGR1a19yZXF1aXJlX3R2YWwodGhy LCBpZHhfdmFsdWUpOworCQkJdHYxID0gRFVLX0hPQkpFQ1RfRV9HRVRfVkFMVUVfVFZBTF9QVFIo dGhyLT5oZWFwLCBvYmosIGN1cnIuZV9pZHgpOworCQkJRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVG KHRociwgdHYxLCB0djIpOyAgLyogc2lkZSBlZmZlY3RzOyBtYXkgaW52YWxpZGF0ZSBlX2lkeCAq LworCQl9IGVsc2UgeworCQkJRFVLX0FTU0VSVChjdXJyLmFfaWR4IDwgMCk7ICAvKiBhcnJheSBw YXJ0IGNhc2UgaGFuZGxlZCBjb21wcmVoZW5zaXZlbHkgcHJldmlvdXNseSAqLworCisJCQlEVUtf REQoRFVLX0REUFJJTlQoIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpLCB2YWx1ZSB1cGRhdGUgZm9y IHZpcnR1YWwgcHJvcGVydHkiKSk7CisJCQkvKiBYWFg6IFVpbnQ4QXJyYXkgYW5kIG90aGVyIHR5 cGVkIGFycmF5IHZpcnR1YWwgd3JpdGVzIG5vdCBjdXJyZW50bHkKKwkJCSAqIGhhbmRsZWQuCisJ CQkgKi8KKwkJCWlmIChrZXkgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0xFTkdUSCh0aHIpICYmIERV S19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkob2JqKSkgeworCQkJCWR1a19oYXJyYXkgKmE7CisJ CQkJYSA9IChkdWtfaGFycmF5ICopIG9iajsKKwkJCQlEVUtfREQoRFVLX0REUFJJTlQoIk9iamVj dC5kZWZpbmVQcm9wZXJ0eSgpIHZhbHVlIHVwZGF0ZSBmb3IgZHVrX2hhcnJheSAubGVuZ3RoIC0+ ICVsZCIsIChsb25nKSBhcnJsZW5fbmV3X2xlbikpOworCQkJCURVS19BU1NFUlRfSEFSUkFZX1ZB TElEKGEpOworCQkJCWEtPmxlbmd0aCA9IGFycmxlbl9uZXdfbGVuOworCQkJfSBlbHNlIHsKKwkJ CQlnb3RvIGZhaWxfdmlydHVhbDsgIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisJCQl9CisJCX0K Kwl9CisKKwkvKgorCSAqICBTdGFuZGFyZCBhbGdvcml0aG0gc3VjY2VlZGVkIHdpdGhvdXQgZXJy b3JzLCBjaGVjayBmb3IgZXhvdGljIHBvc3QtYmVoYXZpb3JzLgorCSAqCisJICogIEFyZ3VtZW50 cyBleG90aWMgYmVoYXZpb3IgaW4gRTUgU2VjdGlvbiAxMC42IG9jY3VycyBhZnRlciB0aGUgc3Rh bmRhcmQKKwkgKiAgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1 bGx5LgorCSAqCisJICogIEFycmF5IGV4b3RpYyBiZWhhdmlvciBpbiBFNSBTZWN0aW9uIDE1LjQu NS4xIGlzIGltcGxlbWVudGVkIHBhcnRseQorCSAqICBwcmlvciB0byB0aGUgZGVmYXVsdCBbW0Rl ZmluZU93blByb3BlcnR5XV0sIGJ1dDoKKwkgKiAgICAtIGZvciBhbiBhcnJheSBpbmRleCBrZXkg KGUuZy4gIjEwIikgdGhlIGZpbmFsICdsZW5ndGgnIHVwZGF0ZSBvY2N1cnMgaGVyZQorCSAqICAg IC0gZm9yICdsZW5ndGgnIGtleSB0aGUgZWxlbWVudCBkZWxldGlvbiBhbmQgJ2xlbmd0aCcgdXBk YXRlIG9jY3VycyBoZXJlCisJICovCisKKyBzdWNjZXNzX2V4b3RpY3M6CisKKwkvKiBjdXJyLmFf aWR4IG9yIGN1cnIuZV9pZHggbWF5IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCBieSBzaWRlIGVmZmVj dHMKKwkgKiBhYm92ZS4KKwkgKi8KKworCS8qIFtvYmoga2V5IGRlc2MgdmFsdWUgZ2V0IHNldCBj dXJyX3ZhbHVlXSAqLworCisJaWYgKERVS19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkob2JqKSkg eworCQlkdWtfaGFycmF5ICphOworCisJCWEgPSAoZHVrX2hhcnJheSAqKSBvYmo7CisJCURVS19B U1NFUlRfSEFSUkFZX1ZBTElEKGEpOworCisJCWlmIChhcnJpZHhfbmV3X2FycmF5X2xlbmd0aCA+ IDApIHsKKwkJCS8qCisJCQkgKiAgTm90ZTogemVybyB3b3JrcyBhcyBhICJubyB1cGRhdGUiIG1h cmtlciBiZWNhdXNlIHRoZSBuZXcgbGVuZ3RoCisJCQkgKiAgY2FuIG5ldmVyIGJlIHplcm8gYWZ0 ZXIgYSBuZXcgcHJvcGVydHkgaXMgd3JpdHRlbi4KKwkJCSAqLworCisJCQkvKiBFNSBTZWN0aW9u IDE1LjQuNS4xLCBzdGVwcyA0LmUuaSAtIDQuZS5paSAqLworCisJCQlEVUtfREREKERVS19ERERQ UklOVCgiZGVmaW5lUHJvcGVydHkgc3VjY2Vzc2Z1bCwgcGVuZGluZyBhcnJheSBsZW5ndGggdXBk YXRlIHRvOiAlbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGFycmlkeF9uZXdf YXJyYXlfbGVuZ3RoKSk7CisKKwkJCWEtPmxlbmd0aCA9IGFycmlkeF9uZXdfYXJyYXlfbGVuZ3Ro OworCQl9CisKKwkJaWYgKGtleSA9PSBEVUtfSFRIUkVBRF9TVFJJTkdfTEVOR1RIKHRocikgJiYg YXJybGVuX25ld19sZW4gPCBhcnJsZW5fb2xkX2xlbikgeworCQkJLyoKKwkJCSAqICBFNSBTZWN0 aW9uIDE1LjQuNS4xLCBzdGVwcyAzLmsgLSAzLm4uICBUaGUgb3JkZXIgYXQgdGhlIGVuZCBjb21i aW5lcworCQkJICogIHRoZSBlcnJvciBjYXNlIDMubC5paWkgYW5kIHRoZSBzdWNjZXNzIGNhc2Ug My5tLTMubi4KKwkJCSAqLworCisJCQkvKiBYWFg6IGludmVzdGlnYXRlIHdoZXRoZXIgd3JpdGUg cHJvdGVjdCBjYW4gYmUgaGFuZGxlZCBhYm92ZSwgaWYgd2UKKwkJCSAqIGp1c3QgdXBkYXRlIGxl bmd0aCBoZXJlIHdoaWxlIGlnbm9yaW5nIGl0cyBwcm90ZWN0ZWQgc3RhdHVzCisJCQkgKi8KKwor CQkJZHVrX3VpbnQzMl90IHJlc3VsdF9sZW47CisJCQlkdWtfYm9vbF90IHJjOworCisJCQlEVUtf REREKERVS19ERERQUklOVCgiZGVmaW5lUHJvcGVydHkgc3VjY2Vzc2Z1bCwga2V5IGlzICdsZW5n dGgnLCBleG90aWMgYXJyYXkgYmVoYXZpb3IsICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJk b2luZyBhcnJheSBlbGVtZW50IGRlbGV0aW9uIGFuZCBsZW5ndGggdXBkYXRlIikpOworCisJCQly YyA9IGR1a19faGFuZGxlX3B1dF9hcnJheV9sZW5ndGhfc21hbGxlcih0aHIsIG9iaiwgYXJybGVu X29sZF9sZW4sIGFycmxlbl9uZXdfbGVuLCBmb3JjZV9mbGFnLCAmcmVzdWx0X2xlbik7CisKKwkJ CS8qIHVwZGF0ZSBsZW5ndGggKGN1cnIgcG9pbnRzIHRvIGxlbmd0aCwgYW5kIHdlIGFzc3VtZSBp dCdzIHN0aWxsIHZhbGlkKSAqLworCQkJRFVLX0FTU0VSVChyZXN1bHRfbGVuID49IGFycmxlbl9u ZXdfbGVuICYmIHJlc3VsdF9sZW4gPD0gYXJybGVuX29sZF9sZW4pOworCisJCQlhLT5sZW5ndGgg PSByZXN1bHRfbGVuOworCisJCQlpZiAocGVuZGluZ193cml0ZV9wcm90ZWN0KSB7CisJCQkJRFVL X0RERChEVUtfREREUFJJTlQoInNldHRpbmcgYXJyYXkgbGVuZ3RoIG5vbi13cml0YWJsZSAocGVu ZGluZyB3cml0YWJpbGl0eSB1cGRhdGUpIikpOworCQkJCURVS19IQVJSQVlfU0VUX0xFTkdUSF9O T05XUklUQUJMRShhKTsKKwkJCX0KKworCQkJLyogWFhYOiBzaHJpbmsgYXJyYXkgYWxsb2NhdGlv biBvciBlbnRyaWVzIGNvbXBhY3Rpb24gaGVyZT8gKi8KKwkJCWlmICghcmMpIHsKKwkJCQlEVUtf REQoRFVLX0REUFJJTlQoImFycmF5IGxlbmd0aCB3cml0ZSBvbmx5IHBhcnRpYWxseSBzdWNjZXNz ZnVsIikpOworCQkJCWdvdG8gZmFpbF9ub3RfY29uZmlndXJhYmxlOworCQkJfQorCQl9CisJfSBl bHNlIGlmIChhcnJfaWR4ICE9IERVS19fTk9fQVJSQVlfSU5ERVggJiYgRFVLX0hPQkpFQ1RfSEFT X0VYT1RJQ19BUkdVTUVOVFMob2JqKSkgeworCQlkdWtfaG9iamVjdCAqbWFwOworCQlkdWtfaG9i amVjdCAqdmFyZW52OworCisJCURVS19BU1NFUlQoYXJyaWR4X25ld19hcnJheV9sZW5ndGggPT0g MCk7CisJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19FWE9USUNfQVJSQVkob2JqKSk7ICAv KiB0cmFpdHMgYXJlIHNlcGFyYXRlOyBpbiBwYXJ0aWN1bGFyLCBhcmd1bWVudHMgbm90IGFuIGFy cmF5ICovCisKKwkJbWFwID0gTlVMTDsKKwkJdmFyZW52ID0gTlVMTDsKKwkJaWYgKCFkdWtfX2xv b2t1cF9hcmd1bWVudHNfbWFwKHRociwgb2JqLCBrZXksICZjdXJyLCAmbWFwLCAmdmFyZW52KSkg eworCQkJZ290byBzdWNjZXNzX25vX2V4b3RpY3M7CisJCX0KKwkJRFVLX0FTU0VSVChtYXAgIT0g TlVMTCk7CisJCURVS19BU1NFUlQodmFyZW52ICE9IE5VTEwpOworCisJCS8qIFtvYmoga2V5IGRl c2MgdmFsdWUgZ2V0IHNldCBjdXJyX3ZhbHVlIHZhcm5hbWVdICovCisKKwkJaWYgKGhhc19zZXQg fHwgaGFzX2dldCkgeworCQkJLyogPSBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSAqLworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoImRlZmluZVByb3BlcnR5IHN1Y2Nlc3NmdWwsIGtleSBtYXBw ZWQgdG8gYXJndW1lbnRzICdtYXAnICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJjaGFuZ2Vk IHRvIGFuIGFjY2Vzc29yLCBkZWxldGUgYXJndW1lbnRzIGJpbmRpbmciKSk7CisKKwkJCSh2b2lk KSBkdWtfaG9iamVjdF9kZWxwcm9wX3Jhdyh0aHIsIG1hcCwga2V5LCAwKTsgIC8qIGlnbm9yZSBy ZXN1bHQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIE5vdGU6IHRoaXMgb3JkZXIgbWF0dGVycyAoZmlu YWwgdmFsdWUgYmVmb3JlIGRlbGV0aW5nIG1hcCBlbnRyeSBtdXN0IGJlIGRvbmUpICovCisJCQlE VUtfREREKERVS19ERERQUklOVCgiZGVmaW5lUHJvcGVydHkgc3VjY2Vzc2Z1bCwga2V5IG1hcHBl ZCB0byBhcmd1bWVudHMgJ21hcCcsICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJjaGVjayBm b3IgdmFsdWUgdXBkYXRlIC8gYmluZGluZyBkZWxldGlvbiIpKTsKKworCQkJaWYgKGhhc192YWx1 ZSkgeworCQkJCWR1a19oc3RyaW5nICp2YXJuYW1lOworCisJCQkJRFVLX0RERChEVUtfREREUFJJ TlQoImRlZmluZVByb3BlcnR5IHN1Y2Nlc3NmdWwsIGtleSBtYXBwZWQgdG8gYXJndW1lbnRzICdt YXAnLCAiCisJCQkJICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZSBib3VuZCB2YWx1ZSAodmFy aWFibGUvYXJndW1lbnQpIikpOworCisJCQkJdmFybmFtZSA9IGR1a19yZXF1aXJlX2hzdHJpbmco dGhyLCAtMSk7CisJCQkJRFVLX0FTU0VSVCh2YXJuYW1lICE9IE5VTEwpOworCisJCQkJRFVLX0RE RChEVUtfREREUFJJTlQoImFyZ3VtZW50cyBvYmplY3QgYXV0b21hdGljIHB1dHZhciBmb3IgYSBi b3VuZCB2YXJpYWJsZTsgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJrZXk9JSFPLCB2YXJu YW1lPSUhTywgdmFsdWU9JSFUIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBo ZHIgKikga2V5LAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSB2YXJu YW1lLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfcmVxdWlyZV90 dmFsKHRociwgaWR4X3ZhbHVlKSkpOworCisJCQkJLyogc3RyaWN0IGZsYWcgZm9yIHB1dHZhciBj b21lcyBmcm9tIG91ciBjYWxsZXIgKGN1cnJlbnRseTogZml4ZWQpICovCisJCQkJZHVrX2pzX3B1 dHZhcl9lbnZyZWModGhyLCB2YXJlbnYsIHZhcm5hbWUsIGR1a19yZXF1aXJlX3R2YWwodGhyLCBp ZHhfdmFsdWUpLCAxIC8qdGhyb3dfZmxhZyovKTsKKwkJCX0KKwkJCWlmIChoYXNfd3JpdGFibGUg JiYgIWlzX3dyaXRhYmxlKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImRlZmluZVByb3Bl cnR5IHN1Y2Nlc3NmdWwsIGtleSBtYXBwZWQgdG8gYXJndW1lbnRzICdtYXAnLCAiCisJCQkJICAg ICAgICAgICAgICAgICAgICAgImNoYW5nZWQgdG8gbm9uLXdyaXRhYmxlLCBkZWxldGUgYXJndW1l bnRzIGJpbmRpbmciKSk7CisKKwkJCQkodm9pZCkgZHVrX2hvYmplY3RfZGVscHJvcF9yYXcodGhy LCBtYXAsIGtleSwgMCk7ICAvKiBpZ25vcmUgcmVzdWx0ICovCisJCQl9CisJCX0KKworCQkvKiAn dmFybmFtZScgaXMgaW4gc3RhY2sgaW4gdGhpcyBlbHNlIGJyYW5jaCwgbGVhdmluZyBhbiB1bmJh bGFuY2VkIHN0YWNrIGJlbG93LAorCQkgKiBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciBub3cuCisJ CSAqLworCX0KKworIHN1Y2Nlc3Nfbm9fZXhvdGljczoKKwkvKiBTb21lIGNvZGUgcGF0aHMgdXNl IE5PUlogbWFjcm9zIGZvciBzaW1wbGljaXR5LCBlbnN1cmUgcmVmemVybworCSAqIGhhbmRsaW5n IGlzIGNvbXBsZXRlZC4KKwkgKi8KKwlEVUtfUkVGWkVST19DSEVDS19TTE9XKHRocik7CisJcmV0 dXJuIDE7CisKKyBmYWlsX25vdF9leHRlbnNpYmxlOgorCWlmICh0aHJvd19mbGFnKSB7CisJCURV S19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9OT1RfRVhURU5TSUJMRSk7CisJCURVS19XT19OT1JF VFVSTihyZXR1cm4gMDspOworCX0KKwlyZXR1cm4gMDsKKworIGZhaWxfdmlydHVhbDogIC8qIGp1 c3QgdXNlIHRoZSBzYW1lICJub3QgY29uZmlndXJhYmxlIiBlcnJvciBtZXNzYWdlIiAqLworIGZh aWxfbm90X2NvbmZpZ3VyYWJsZToKKwlpZiAodGhyb3dfZmxhZykgeworCQlEVUtfRVJST1JfVFlQ RSh0aHIsIERVS19TVFJfTk9UX0NPTkZJR1VSQUJMRSk7CisJCURVS19XT19OT1JFVFVSTihyZXR1 cm4gMDspOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBPYmplY3QucHJvdG90eXBlLmhh c093blByb3BlcnR5KCkgYW5kIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUo KS4KKyAqLworCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaG9iamVjdF9vYmplY3Rfb3du cHJvcF9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCByZXF1aXJlZF9k ZXNjX2ZsYWdzKSB7CisJZHVrX2hzdHJpbmcgKmhfdjsKKwlkdWtfaG9iamVjdCAqaF9vYmo7CisJ ZHVrX3Byb3BkZXNjIGRlc2M7CisJZHVrX2Jvb2xfdCByZXQ7CisKKwkvKiBjb2VyY2lvbiBvcmRl ciBtYXR0ZXJzICovCisJaF92ID0gZHVrX3RvX2hzdHJpbmdfYWNjZXB0c3ltYm9sKHRociwgMCk7 CisJRFVLX0FTU0VSVChoX3YgIT0gTlVMTCk7CisKKwloX29iaiA9IGR1a19wdXNoX3RoaXNfY29l cmNpYmxlX3RvX29iamVjdCh0aHIpOworCURVS19BU1NFUlQoaF9vYmogIT0gTlVMTCk7CisKKwly ZXQgPSBkdWtfaG9iamVjdF9nZXRfb3duX3Byb3BkZXNjKHRociwgaF9vYmosIGhfdiwgJmRlc2Ms IDAgLypmbGFncyovKTsgIC8qIGRvbid0IHB1c2ggdmFsdWUgKi8KKworCWR1a19wdXNoX2Jvb2xl YW4odGhyLCByZXQgJiYgKChkZXNjLmZsYWdzICYgcmVxdWlyZWRfZGVzY19mbGFncykgPT0gcmVx dWlyZWRfZGVzY19mbGFncykpOworCXJldHVybiAxOworfQorCisvKgorICogIE9iamVjdC5zZWFs KCkgYW5kIE9iamVjdC5mcmVlemUoKSAgKEU1IFNlY3Rpb25zIDE1LjIuMy44IGFuZCAxNS4yLjMu OSkKKyAqCisgKiAgU2luY2UgdGhlIGFsZ29yaXRobXMgYXJlIHNpbWlsYXIsIGEgaGVscGVyIHBy b3ZpZGVzIGJvdGggZnVuY3Rpb25zLgorICogIEZyZWV6aW5nIGlzIGVzc2VudGlhbGx5IHNlYWxp bmcgKyBtYWtpbmcgcGxhaW4gcHJvcGVydGllcyBub24td3JpdGFibGUuCisgKgorICogIE5vdGU6 IHZpcnR1YWwgKG5vbi1jb25jcmV0ZSkgcHJvcGVydGllcyB3aGljaCBhcmUgbm9uLWNvbmZpZ3Vy YWJsZSBidXQKKyAqICB3cml0YWJsZSB3b3VsZCBwb3NlIHNvbWUgcHJvYmxlbXMsIGJ1dCBzdWNo IHByb3BlcnRpZXMgZG8gbm90IGN1cnJlbnRseQorICogIGV4aXN0IChhbGwgdmlydHVhbCBwcm9w ZXJ0aWVzIGFyZSBub24tY29uZmlndXJhYmxlIGFuZCBub24td3JpdGFibGUpLgorICogIElmIHRo ZXkgZGlkIGV4aXN0LCB0aGUgbm9uLWNvbmZpZ3VyYWJpbGl0eSBkb2VzIE5PVCBwcmV2ZW50IHRo ZW0gZnJvbQorICogIGJlY29taW5nIG5vbi13cml0YWJsZS4gIEhvd2V2ZXIsIHRoaXMgY2hhbmdl IHNob3VsZCBiZSByZWNvcmRlZCBzb21laG93CisgKiAgc28gdGhhdCBpdCB3b3VsZCB0dXJuIHVw IChlLmcuIHdoZW4gZ2V0dGluZyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciksCisgKiAgcmVxdWly aW5nIHNvbWUgYWRkaXRpb25hbCBmbGFncyBpbiB0aGUgb2JqZWN0LgorICovCisKK0RVS19JTlRF Uk5BTCB2b2lkIGR1a19ob2JqZWN0X29iamVjdF9zZWFsX2ZyZWV6ZV9oZWxwZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX2hvYmplY3QgKm9iaiwgZHVrX2Jvb2xfdCBpc19mcmVlemUpIHsKKwlkdWtf dWludF9mYXN0MzJfdCBpOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VS VCh0aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvYmogIT0gTlVMTCk7CisKKwlEVUtf QVNTRVJUX1ZBTFNUQUNLX1NQQUNFKHRociwgRFVLX19WQUxTVEFDS19TUEFDRSk7CisKKyNpZiBk ZWZpbmVkKERVS19VU0VfUk9NX09CSkVDVFMpCisJaWYgKERVS19IRUFQSERSX0hBU19SRUFET05M WSgoZHVrX2hlYXBoZHIgKikgb2JqKSkgeworCQlEVUtfREQoRFVLX0REUFJJTlQoImF0dGVtcHQg dG8gc2VhbC9mcmVlemUgYSByZWFkb25seSBvYmplY3QsIHJlamVjdCIpKTsKKwkJRFVLX0VSUk9S X1RZUEUodGhyLCBEVUtfU1RSX05PVF9DT05GSUdVUkFCTEUpOworCQlEVUtfV09fTk9SRVRVUk4o cmV0dXJuOyk7CisJfQorI2VuZGlmCisKKwkvKgorCSAqICBBYmFuZG9uIGFycmF5IHBhcnQgYmVj YXVzZSBhbGwgcHJvcGVydGllcyBtdXN0IGJlY29tZSBub24tY29uZmlndXJhYmxlLgorCSAqICBO b3RlIHRoYXQgdGhpcyBpcyBub3cgZG9uZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBpcyBh bHdheXMgdGhlIGNhc2UKKwkgKiAgKHNraXBzIGNoZWNrLCBidXQgcGVyZm9ybWFuY2UgcHJvYmxl bSBpZiBjYWxsZXIgd291bGQgZG8gdGhpcyBtYW55IHRpbWVzCisJICogIGZvciB0aGUgc2FtZSBv YmplY3Q7IG5vdCBsaWtlbHkpLgorCSAqLworCisJZHVrX19hYmFuZG9uX2FycmF5X2NoZWNrZWQo dGhyLCBvYmopOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaikgPT0gMCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgRFVLX0hPQkpFQ1RfR0VUX0VORVhUKG9iaik7IGkrKykgewor CQlkdWtfdWludDhfdCAqZnA7CisKKwkJLyogc2luY2UgZHVrX19hYmFuZG9uX2FycmF5X2NoZWNr ZWQoKSBjYXVzZXMgYSByZXNpemUsIHRoZXJlIHNob3VsZCBiZSBubyBnYXBzIGluIGtleXMgKi8K KwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9FX0dFVF9LRVkodGhyLT5oZWFwLCBvYmosIGkpICE9 IE5VTEwpOworCisJCS8qIGF2b2lkIG11bHRpcGxlIGNvbXB1dGF0aW9ucyBvZiBmbGFncyBhZGRy ZXNzOyBieXBhc3NlcyBtYWNyb3MgKi8KKwkJZnAgPSBEVUtfSE9CSkVDVF9FX0dFVF9GTEFHU19Q VFIodGhyLT5oZWFwLCBvYmosIGkpOworCQlpZiAoaXNfZnJlZXplICYmICEoKCpmcCkgJiBEVUtf UFJPUERFU0NfRkxBR19BQ0NFU1NPUikpIHsKKwkJCSpmcCAmPSB+KERVS19QUk9QREVTQ19GTEFH X1dSSVRBQkxFIHwgRFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFKTsKKwkJfSBlbHNlIHsK KwkJCSpmcCAmPSB+RFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFOworCQl9CisJfQorCisJ RFVLX0hPQkpFQ1RfQ0xFQVJfRVhURU5TSUJMRShvYmopOworCisJLyogbm8gbmVlZCB0byBjb21w YWN0IHNpbmNlIHdlIGFscmVhZHkgZGlkIHRoYXQgaW4gZHVrX19hYmFuZG9uX2FycmF5X2NoZWNr ZWQoKQorCSAqIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW4gYXJyYXkgcGFydCBleGlzdGVkIG9y IG5vdC4KKwkgKi8KKworCXJldHVybjsKK30KKworLyoKKyAqICBPYmplY3QuaXNTZWFsZWQoKSBh bmQgT2JqZWN0LmlzRnJvemVuKCkgIChFNSBTZWN0aW9ucyAxNS4yLjMuMTEsIDE1LjIuMy4xMykK KyAqCisgKiAgU2luY2UgdGhlIGFsZ29yaXRobXMgYXJlIHNpbWlsYXIsIGEgaGVscGVyIHByb3Zp ZGVzIGJvdGggZnVuY3Rpb25zLgorICogIEZyZWV6aW5nIGlzIGVzc2VudGlhbGx5IHNlYWxpbmcg KyBtYWtpbmcgcGxhaW4gcHJvcGVydGllcyBub24td3JpdGFibGUuCisgKgorICogIE5vdGU6IGFs bCB2aXJ0dWFsIChub24tY29uY3JldGUpIHByb3BlcnRpZXMgYXJlIGN1cnJlbnRseSBub24tY29u ZmlndXJhYmxlCisgKiAgYW5kIG5vbi13cml0YWJsZSAoYW5kIHRoZXJlIGFyZSBubyBhY2Nlc3Nv ciB2aXJ0dWFsIHByb3BlcnRpZXMpLCBzbyB0aGV5IGRvbid0CisgKiAgbmVlZCB0byBiZSBjb25z aWRlcmVkIGhlcmUgbm93LgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19ob2Jq ZWN0X29iamVjdF9pc19zZWFsZWRfZnJvemVuX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtf aG9iamVjdCAqb2JqLCBkdWtfYm9vbF90IGlzX2Zyb3plbikgeworCWR1a191aW50X2Zhc3QzMl90 IGk7CisKKwlEVUtfQVNTRVJUKG9iaiAhPSBOVUxMKTsKKwlEVUtfVU5SRUYodGhyKTsKKworCS8q IE5vdGU6IG5vIGFsbG9jYXRpb24gcHJlc3N1cmUsIG5vIG5lZWQgdG8gY2hlY2sgcmVmY291bnRz IGV0YyAqLworCisJLyogbXVzdCBub3QgYmUgZXh0ZW5zaWJsZSAqLworCWlmIChEVUtfSE9CSkVD VF9IQVNfRVhURU5TSUJMRShvYmopKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIGFsbCB2aXJ0 dWFsIHByb3BlcnRpZXMgYXJlIG5vbi1jb25maWd1cmFibGUgYW5kIG5vbi13cml0YWJsZSAqLwor CisJLyogZW50cnkgcGFydCBtdXN0IG5vdCBjb250YWluIGFueSBjb25maWd1cmFibGUgcHJvcGVy dGllcywgb3IKKwkgKiB3cml0YWJsZSBwcm9wZXJ0aWVzIChpZiBpc19mcm96ZW4pLgorCSAqLwor CWZvciAoaSA9IDA7IGkgPCBEVUtfSE9CSkVDVF9HRVRfRU5FWFQob2JqKTsgaSsrKSB7CisJCWR1 a19zbWFsbF91aW50X3QgZmxhZ3M7CisKKwkJaWYgKCFEVUtfSE9CSkVDVF9FX0dFVF9LRVkodGhy LT5oZWFwLCBvYmosIGkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGF2b2lkIG11bHRp cGxlIGNvbXB1dGF0aW9ucyBvZiBmbGFncyBhZGRyZXNzOyBieXBhc3NlcyBtYWNyb3MgKi8KKwkJ ZmxhZ3MgPSAoZHVrX3NtYWxsX3VpbnRfdCkgRFVLX0hPQkpFQ1RfRV9HRVRfRkxBR1ModGhyLT5o ZWFwLCBvYmosIGkpOworCisJCWlmIChmbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VS QUJMRSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGlzX2Zyb3plbiAmJgorCQkgICAgIShm bGFncyAmIERVS19QUk9QREVTQ19GTEFHX0FDQ0VTU09SKSAmJgorCQkgICAgKGZsYWdzICYgRFVL X1BST1BERVNDX0ZMQUdfV1JJVEFCTEUpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8q IGFycmF5IHBhcnQgbXVzdCBub3QgY29udGFpbiBhbnkgbm9uLXVudXNlZCBwcm9wZXJ0aWVzLCBh cyB0aGV5IHdvdWxkCisJICogYmUgY29uZmlndXJhYmxlIGFuZCB3cml0YWJsZS4KKwkgKi8KKwlm b3IgKGkgPSAwOyBpIDwgRFVLX0hPQkpFQ1RfR0VUX0FTSVpFKG9iaik7IGkrKykgeworCQlkdWtf dHZhbCAqdHYgPSBEVUtfSE9CSkVDVF9BX0dFVF9WQUxVRV9QVFIodGhyLT5oZWFwLCBvYmosIGkp OworCQlpZiAoIURVS19UVkFMX0lTX1VOVVNFRCh0dikpIHsKKwkJCXJldHVybiAwOworCQl9CisJ fQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKCkg YW5kIE9iamVjdC5pc0V4dGVuc2libGUoKSAgKEU1IFNlY3Rpb25zIDE1LjIuMy4xMCwgMTUuMi4z LjEzKQorICoKKyAqICBOb3QgbmVlZGVkLCBpbXBsZW1lbnRlZCBieSBtYWNyb3MgRFVLX0hPQkpF Q1Rfe0hBUyxDTEVBUixTRVR9X0VYVEVOU0lCTEUKKyAqICBhbmQgdGhlIE9iamVjdCBidWlsdC1p biBiaW5kaW5ncy4KKyAqLworCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYgRFVLX19I QVNIX0RFTEVURUQKKyN1bmRlZiBEVUtfX0hBU0hfVU5VU0VECisjdW5kZWYgRFVLX19OT19BUlJB WV9JTkRFWAorI3VuZGVmIERVS19fVkFMU1RBQ0tfUFJPWFlfTE9PS1VQCisjdW5kZWYgRFVLX19W QUxTVEFDS19TUEFDRQorLyoKKyAqICBNaXNjIHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKworLyog I2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgorICog IGR1a19oc3RyaW5nIGNoYXJDb2RlQXQsIHdpdGggYW5kIHdpdGhvdXQgc3Vycm9nYXRlIGF3YXJl bmVzcworICovCisKK0RVS19JTlRFUk5BTCBkdWtfdWNvZGVwb2ludF90IGR1a19oc3RyaW5nX2No YXJfY29kZV9hdF9yYXcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hzdHJpbmcgKmgsIGR1a191aW50 X3QgcG9zLCBkdWtfYm9vbF90IHN1cnJvZ2F0ZV9hd2FyZSkgeworCWR1a191aW50MzJfdCBib2Zm OworCWNvbnN0IGR1a191aW50OF90ICpwLCAqcF9zdGFydCwgKnBfZW5kOworCWR1a191Y29kZXBv aW50X3QgY3AxOworCWR1a191Y29kZXBvaW50X3QgY3AyOworCisJLyogQ2FsbGVyIG11c3QgY2hl Y2sgY2hhcmFjdGVyIG9mZnNldCB0byBiZSBpbnNpZGUgdGhlIHN0cmluZy4gKi8KKwlEVUtfQVNT RVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJRFVLX0FTU0VSVF9E SVNBQkxFKHBvcyA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FTU0VSVChwb3MgPCAoZHVr X3VpbnRfdCkgRFVLX0hTVFJJTkdfR0VUX0NIQVJMRU4oaCkpOworCisJYm9mZiA9IChkdWtfdWlu dDMyX3QpIGR1a19oZWFwX3N0cmNhY2hlX29mZnNldF9jaGFyMmJ5dGUodGhyLCBoLCAoZHVrX3Vp bnQzMl90KSBwb3MpOworCURVS19EREQoRFVLX0RERFBSSU5UKCJjaGFyQ29kZUF0OiBwb3M9JWxk IC0+IGJvZmY9JWxkLCBzdHI9JSFPIiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgcG9z LCAobG9uZykgYm9mZiwgKGR1a19oZWFwaGRyICopIGgpKTsKKwlEVUtfQVNTRVJUX0RJU0FCTEUo Ym9mZiA+PSAwKTsKKwlEVUtfQVNTRVJUKGJvZmYgPCBEVUtfSFNUUklOR19HRVRfQllURUxFTiho KSk7CisKKwlwX3N0YXJ0ID0gRFVLX0hTVFJJTkdfR0VUX0RBVEEoaCk7CisJcF9lbmQgPSBwX3N0 YXJ0ICsgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCk7CisJcCA9IHBfc3RhcnQgKyBib2ZmOwor CURVS19EREQoRFVLX0RERFBSSU5UKCJwX3N0YXJ0PSVwLCBwX2VuZD0lcCwgcD0lcCIsCisJICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgcF9zdGFydCwgKGNvbnN0IHZvaWQgKikg cF9lbmQsCisJICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgcCkpOworCisJLyog Rm9yIGludmFsaWQgVVRGLTggKG5ldmVyIGhhcHBlbnMgZm9yIHN0YW5kYXJkIEVDTUFTY3JpcHQg c3RyaW5ncykKKwkgKiByZXR1cm4gVStGRkZEIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KKwkgKi8K KwlpZiAoZHVrX3VuaWNvZGVfZGVjb2RlX3h1dGY4KHRociwgJnAsIHBfc3RhcnQsIHBfZW5kLCAm Y3AxKSkgeworCQlpZiAoc3Vycm9nYXRlX2F3YXJlICYmIGNwMSA+PSAweGQ4MDBVTCAmJiBjcDEg PD0gMHhkYmZmVUwpIHsKKwkJCS8qIFRoZSBkZWNvZGUgaGVscGVyIGlzIG1lbW9yeSBzYWZlIGV2 ZW4gaWYgJ2NwMScgd2FzCisJCQkgKiBkZWNvZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBh bmQgJ3AnIGlzIG5vIGxvbmdlcgorCQkJICogd2l0aGluIHN0cmluZyBtZW1vcnkgcmFuZ2UuCisJ CQkgKi8KKwkJCWNwMiA9IDA7ICAvKiBJZiBjYWxsIGZhaWxzLCB0aGlzIGlzIGxlZnQgdW50b3Vj aGVkIGFuZCB3b24ndCBtYXRjaCBjcDIgY2hlY2suICovCisJCQkodm9pZCkgZHVrX3VuaWNvZGVf ZGVjb2RlX3h1dGY4KHRociwgJnAsIHBfc3RhcnQsIHBfZW5kLCAmY3AyKTsKKwkJCWlmIChjcDIg Pj0gMHhkYzAwVUwgJiYgY3AyIDw9IDB4ZGZmZlVMKSB7CisJCQkJY3AxID0gKGR1a191Y29kZXBv aW50X3QpICgoKGNwMSAtIDB4ZDgwMFVMKSA8PCAxMCkgKyAoY3AyIC0gMHhkYzAwVUwpICsgMHgx MDAwMFVMKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWNwMSA9IERVS19VTklDT0RFX0NQX1JF UExBQ0VNRU5UX0NIQVJBQ1RFUjsKKwl9CisKKwlyZXR1cm4gY3AxOworfQorCisvKgorICogIGR1 a19oc3RyaW5nIGNoYXJsZW4sIHdoZW4gbGF6eSBjaGFybGVuIGRpc2FibGVkCisgKi8KKworI2lm ICFkZWZpbmVkKERVS19VU0VfSFNUUklOR19MQVpZX0NMRU4pCisjaWYgIWRlZmluZWQoRFVLX1VT RV9IU1RSSU5HX0NMRU4pCisjZXJyb3Igbm9uLWxhenkgZHVrX2hzdHJpbmcgY2hhcmxlbiBidXQg RFVLX1VTRV9IU1RSSU5HX0NMRU4gbm90IHNldAorI2VuZGlmCitEVUtfSU5URVJOQUwgdm9pZCBk dWtfaHN0cmluZ19pbml0X2NoYXJsZW4oZHVrX2hzdHJpbmcgKmgpIHsKKwlkdWtfdWludDMyX3Qg Y2xlbjsKKworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKCFEVUtfSFNUUklO R19IQVNfQVNDSUkoaCkpOworCURVS19BU1NFUlQoIURVS19IRUFQSERSX0hBU19SRUFET05MWSgo ZHVrX2hlYXBoZHIgKikgaCkpOworCisJY2xlbiA9IGR1a191bmljb2RlX3VudmFsaWRhdGVkX3V0 ZjhfbGVuZ3RoKERVS19IU1RSSU5HX0dFVF9EQVRBKGgpLCBEVUtfSFNUUklOR19HRVRfQllURUxF TihoKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUkxFTjE2KQorCURVS19BU1NFUlQoY2xlbiA8 PSAweGZmZmZVTCk7ICAvKiBCeXRlbGVuZ3RoIGNoZWNrZWQgZHVyaW5nIGludGVybmluZy4gKi8K KwloLT5jbGVuMTYgPSAoZHVrX3VpbnQxNl90KSBjbGVuOworI2Vsc2UKKwloLT5jbGVuID0gKGR1 a191aW50MzJfdCkgY2xlbjsKKyNlbmRpZgorCWlmIChEVUtfTElLRUxZKGNsZW4gPT0gRFVLX0hT VFJJTkdfR0VUX0JZVEVMRU4oaCkpKSB7CisJCURVS19IU1RSSU5HX1NFVF9BU0NJSShoKTsKKwl9 Cit9CisKK0RVS19JTlRFUk5BTCBEVUtfSE9UIGR1a19zaXplX3QgZHVrX2hzdHJpbmdfZ2V0X2No YXJsZW4oZHVrX2hzdHJpbmcgKmgpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSTEVOMTYpCisJ cmV0dXJuIGgtPmNsZW4xNjsKKyNlbHNlCisJcmV0dXJuIGgtPmNsZW47CisjZW5kaWYKK30KKyNl bmRpZiAgLyogIURVS19VU0VfSFNUUklOR19MQVpZX0NMRU4gKi8KKworLyoKKyAqICBkdWtfaHN0 cmluZyBjaGFybGVuLCB3aGVuIGxhenkgY2hhcmxlbiBlbmFibGVkCisgKi8KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9IU1RSSU5HX0xBWllfQ0xFTikKKyNpZiBkZWZpbmVkKERVS19VU0VfSFNUUklO R19DTEVOKQorRFVLX0xPQ0FMIERVS19DT0xEIGR1a19zaXplX3QgZHVrX19oc3RyaW5nX2dldF9j aGFybGVuX3Nsb3dwYXRoKGR1a19oc3RyaW5nICpoKSB7CisJZHVrX3NpemVfdCByZXM7CisKKwlE VUtfQVNTRVJUKGgtPmNsZW4gPT0gMCk7ICAvKiBDaGVja2VkIGJ5IGNhbGxlci4gKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9ST01fU1RSSU5HUykKKwkvKiBST00gc3RyaW5ncyBoYXZlIHByZWNv bXB1dGVkIGNsZW4sIGJ1dCBpZiB0aGUgY29tcHV0ZWQgY2xlbiBpcyB6ZXJvCisJICogd2UgY2Fu IHN0aWxsIGNvbWUgaGVyZSBhbmQgY2FuJ3Qgd3JpdGUgYW55dGhpbmcuCisJICovCisJaWYgKERV S19IRUFQSERSX0hBU19SRUFET05MWSgoZHVrX2hlYXBoZHIgKikgaCkpIHsKKwkJcmV0dXJuIDA7 CisJfQorI2VuZGlmCisKKwlyZXMgPSBkdWtfdW5pY29kZV91bnZhbGlkYXRlZF91dGY4X2xlbmd0 aChEVUtfSFNUUklOR19HRVRfREFUQShoKSwgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkpOwor I2lmIGRlZmluZWQoRFVLX1VTRV9TVFJMRU4xNikKKwlEVUtfQVNTRVJUKHJlcyA8PSAweGZmZmZV TCk7ICAvKiBCeXRlbGVuZ3RoIGNoZWNrZWQgZHVyaW5nIGludGVybmluZy4gKi8KKwloLT5jbGVu MTYgPSAoZHVrX3VpbnQxNl90KSByZXM7CisjZWxzZQorCWgtPmNsZW4gPSAoZHVrX3VpbnQzMl90 KSByZXM7CisjZW5kaWYKKwlpZiAoRFVLX0xJS0VMWShyZXMgPT0gRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oaCkpKSB7CisJCURVS19IU1RSSU5HX1NFVF9BU0NJSShoKTsKKwl9CisJcmV0dXJuIHJl czsKK30KKyNlbHNlICAvKiBEVUtfVVNFX0hTVFJJTkdfQ0xFTiAqLworRFVLX0xPQ0FMIGR1a19z aXplX3QgZHVrX19oc3RyaW5nX2dldF9jaGFybGVuX3Nsb3dwYXRoKGR1a19oc3RyaW5nICpoKSB7 CisJaWYgKERVS19MSUtFTFkoRFVLX0hTVFJJTkdfSEFTX0FTQ0lJKGgpKSkgeworCQkvKiBNb3N0 IHByYWN0aWNhbCBzdHJpbmdzIHdpbGwgZ28gaGVyZS4gKi8KKwkJcmV0dXJuIERVS19IU1RSSU5H X0dFVF9CWVRFTEVOKGgpOworCX0gZWxzZSB7CisJCS8qIEFTQ0lJIGZsYWcgaXMgbGF6eSwgc28g c2V0IGl0IGhlcmUuICovCisJCWR1a19zaXplX3QgcmVzOworCisJCS8qIFhYWDogaGVyZSB3ZSBj b3VsZCB1c2UgdGhlIHN0cmNhY2hlIHRvIHNwZWVkIHVwIHRoZQorCQkgKiBjb21wdXRhdGlvbiAo bWF0dGVycyBmb3IgJ2kgPCBzdHIubGVuZ3RoJyBsb29wcykuCisJCSAqLworCisJCXJlcyA9IGR1 a191bmljb2RlX3VudmFsaWRhdGVkX3V0ZjhfbGVuZ3RoKERVS19IU1RSSU5HX0dFVF9EQVRBKGgp LCBEVUtfSFNUUklOR19HRVRfQllURUxFTihoKSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUk9N X1NUUklOR1MpCisJCWlmIChEVUtfSEVBUEhEUl9IQVNfUkVBRE9OTFkoKGR1a19oZWFwaGRyICop IGgpKSB7CisJCQkvKiBGb3IgUk9NIHN0cmluZ3MsIGNhbid0IHdyaXRlIGFueXRoaW5nOyBBU0NJ SSBmbGFnCisJCQkgKiBpcyBwcmVzZXQgc28gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQuCisJ CQkgKi8KKwkJCXJldHVybiByZXM7CisJCX0KKyNlbmRpZgorCQlpZiAoRFVLX0xJS0VMWShyZXMg PT0gRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkpKSB7CisJCQlEVUtfSFNUUklOR19TRVRfQVND SUkoaCk7CisJCX0KKwkJcmV0dXJuIHJlczsKKwl9Cit9CisjZW5kaWYgIC8qIERVS19VU0VfSFNU UklOR19DTEVOICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfSFNUUklOR19DTEVOKQorRFVLX0lO VEVSTkFMIERVS19IT1QgZHVrX3NpemVfdCBkdWtfaHN0cmluZ19nZXRfY2hhcmxlbihkdWtfaHN0 cmluZyAqaCkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJMRU4xNikKKwlpZiAoRFVLX0xJS0VM WShoLT5jbGVuMTYgIT0gMCkpIHsKKwkJcmV0dXJuIGgtPmNsZW4xNjsKKwl9CisjZWxzZQorCWlm IChEVUtfTElLRUxZKGgtPmNsZW4gIT0gMCkpIHsKKwkJcmV0dXJuIGgtPmNsZW47CisJfQorI2Vu ZGlmCisJcmV0dXJuIGR1a19faHN0cmluZ19nZXRfY2hhcmxlbl9zbG93cGF0aChoKTsKK30KKyNl bHNlICAvKiBEVUtfVVNFX0hTVFJJTkdfQ0xFTiAqLworRFVLX0lOVEVSTkFMIERVS19IT1QgZHVr X3NpemVfdCBkdWtfaHN0cmluZ19nZXRfY2hhcmxlbihkdWtfaHN0cmluZyAqaCkgeworCS8qIEFs d2F5cyB1c2Ugc2xvdyBwYXRoLiAqLworCXJldHVybiBkdWtfX2hzdHJpbmdfZ2V0X2NoYXJsZW5f c2xvd3BhdGgoaCk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfSFNUUklOR19DTEVOICovCisjZW5k aWYgIC8qIERVS19VU0VfSFNUUklOR19MQVpZX0NMRU4gKi8KKworLyoKKyAqICBDb21wYXJlIGR1 a19oc3RyaW5nIHRvIGFuIEFTQ0lJIGNzdHJpbmcuCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19i b29sX3QgZHVrX2hzdHJpbmdfZXF1YWxzX2FzY2lpX2NzdHJpbmcoZHVrX2hzdHJpbmcgKmgsIGNv bnN0IGNoYXIgKmNzdHIpIHsKKwlkdWtfc2l6ZV90IGxlbjsKKworCURVS19BU1NFUlQoaCAhPSBO VUxMKTsKKwlEVUtfQVNTRVJUKGNzdHIgIT0gTlVMTCk7CisKKwlsZW4gPSBEVUtfU1RSTEVOKGNz dHIpOworCWlmIChsZW4gIT0gRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCkpIHsKKwkJcmV0dXJu IDA7CisJfQorCWlmIChkdWtfbWVtY21wKChjb25zdCB2b2lkICopIGNzdHIsIChjb25zdCB2b2lk ICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgpLCBsZW4pID09IDApIHsKKwkJcmV0dXJuIDE7CisJ fQorCXJldHVybiAwOworfQorLyoKKyAqICBkdWtfaHRocmVhZCBhbGxvY2F0aW9uIGFuZCBmcmVl aW5nLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVk ZWQgKi8KKworLyoKKyAqICBBbGxvY2F0ZSBpbml0aWFsIHN0YWNrcyBmb3IgYSB0aHJlYWQuICBO b3RlIHRoYXQgJ3RocicgbXVzdCBiZSByZWFjaGFibGUKKyAqICBhcyBhIGdhcmJhZ2UgY29sbGVj dGlvbiBtYXkgYmUgdHJpZ2dlcmVkIGJ5IHRoZSBhbGxvY2F0aW9uIGF0dGVtcHRzLgorICogIFJl dHVybnMgemVybyAod2l0aG91dCBsZWFraW5nIG1lbW9yeSkgaWYgaW5pdCBmYWlscy4KKyAqLwor CitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfaHRocmVhZF9pbml0X3N0YWNrcyhkdWtfaGVh cCAqaGVhcCwgZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19zaXplX3QgYWxsb2Nfc2l6ZTsKKwlk dWtfc2l6ZV90IGk7CisKKwlEVUtfQVNTRVJUKGhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0 aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrID09IE5VTEwpOworCURVS19B U1NFUlQodGhyLT52YWxzdGFja19lbmQgPT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0 YWNrX2FsbG9jX2VuZCA9PSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfYm90dG9t ID09IE5VTEwpOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190b3AgPT0gTlVMTCk7CisJRFVL X0FTU0VSVCh0aHItPmNhbGxzdGFja19jdXJyID09IE5VTEwpOworCisJLyogdmFsc3RhY2sgKi8K KwlEVUtfQVNTRVJUKERVS19WQUxTVEFDS19BUElfRU5UUllfTUlOSU1VTSA8PSBEVUtfVkFMU1RB Q0tfSU5JVElBTF9TSVpFKTsKKwlhbGxvY19zaXplID0gc2l6ZW9mKGR1a190dmFsKSAqIERVS19W QUxTVEFDS19JTklUSUFMX1NJWkU7CisJdGhyLT52YWxzdGFjayA9IChkdWtfdHZhbCAqKSBEVUtf QUxMT0MoaGVhcCwgYWxsb2Nfc2l6ZSk7CisJaWYgKCF0aHItPnZhbHN0YWNrKSB7CisJCWdvdG8g ZmFpbDsKKwl9CisJZHVrX21lbXplcm8odGhyLT52YWxzdGFjaywgYWxsb2Nfc2l6ZSk7CisJdGhy LT52YWxzdGFja19lbmQgPSB0aHItPnZhbHN0YWNrICsgRFVLX1ZBTFNUQUNLX0FQSV9FTlRSWV9N SU5JTVVNOworCXRoci0+dmFsc3RhY2tfYWxsb2NfZW5kID0gdGhyLT52YWxzdGFjayArIERVS19W QUxTVEFDS19JTklUSUFMX1NJWkU7CisJdGhyLT52YWxzdGFja19ib3R0b20gPSB0aHItPnZhbHN0 YWNrOworCXRoci0+dmFsc3RhY2tfdG9wID0gdGhyLT52YWxzdGFjazsKKworCWZvciAoaSA9IDA7 IGkgPCBEVUtfVkFMU1RBQ0tfSU5JVElBTF9TSVpFOyBpKyspIHsKKwkJRFVLX1RWQUxfU0VUX1VO REVGSU5FRCgmdGhyLT52YWxzdGFja1tpXSk7CisJfQorCisJcmV0dXJuIDE7CisKKyBmYWlsOgor CURVS19GUkVFKGhlYXAsIHRoci0+dmFsc3RhY2spOworCURVS19BU1NFUlQodGhyLT5jYWxsc3Rh Y2tfY3VyciA9PSBOVUxMKTsKKworCXRoci0+dmFsc3RhY2sgPSBOVUxMOworCXJldHVybiAwOwor fQorCisvKiBGb3IgaW5kaXJlY3QgYWxsb2NzLiAqLworCitEVUtfSU5URVJOQUwgdm9pZCAqZHVr X2h0aHJlYWRfZ2V0X3ZhbHN0YWNrX3B0cihkdWtfaGVhcCAqaGVhcCwgdm9pZCAqdWQpIHsKKwlk dWtfaHRocmVhZCAqdGhyID0gKGR1a19odGhyZWFkICopIHVkOworCURVS19VTlJFRihoZWFwKTsK KwlyZXR1cm4gKHZvaWQgKikgdGhyLT52YWxzdGFjazsKK30KKy8qCisgKiAgSW5pdGlhbGl6ZSBi dWlsdC1pbiBvYmplY3RzLiAgQ3VycmVudCB0aHJlYWQgbXVzdCBoYXZlIGEgdmFsc3RhY2sKKyAq ICBhbmQgaW5pdGlhbGl6YXRpb24gZXJyb3JzIG1heSBsb25nam1wLCBzbyBhIHNldGptcCgpIGNh dGNoIHBvaW50CisgKiAgbXVzdCBleGlzdC4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJu YWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCisgKiAgRW5jb2RpbmcgY29uc3RhbnRz LCBtdXN0IG1hdGNoIGdlbmJ1aWx0aW5zLnB5CisgKi8KKworI2RlZmluZSBEVUtfX1BST1BfRkxB R1NfQklUUyAgICAgICAgICAgICAzCisjZGVmaW5lIERVS19fTEVOR1RIX1BST1BfQklUUyAgICAg ICAgICAgIDMKKyNkZWZpbmUgRFVLX19OQVJHU19CSVRTICAgICAgICAgICAgICAgICAgMworI2Rl ZmluZSBEVUtfX1BST1BfVFlQRV9CSVRTICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgRFVLX19O QVJHU19WQVJBUkdTX01BUktFUiAgICAgICAgMHgwNworCisjZGVmaW5lIERVS19fUFJPUF9UWVBF X0RPVUJMRSAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX19QUk9QX1RZUEVfU1RSSU5HICAgICAg ICAgICAgMQorI2RlZmluZSBEVUtfX1BST1BfVFlQRV9TVFJJRFggICAgICAgICAgICAyCisjZGVm aW5lIERVS19fUFJPUF9UWVBFX0JVSUxUSU4gICAgICAgICAgIDMKKyNkZWZpbmUgRFVLX19QUk9Q X1RZUEVfVU5ERUZJTkVEICAgICAgICAgNAorI2RlZmluZSBEVUtfX1BST1BfVFlQRV9CT09MRUFO X1RSVUUgICAgICA1CisjZGVmaW5lIERVS19fUFJPUF9UWVBFX0JPT0xFQU5fRkFMU0UgICAgIDYK KyNkZWZpbmUgRFVLX19QUk9QX1RZUEVfQUNDRVNTT1IgICAgICAgICAgNworCisvKgorICogIENy ZWF0ZSBidWlsdC1pbiBvYmplY3RzIGJ5IHBhcnNpbmcgYW4gaW5pdCBiaXRzdHJlYW0gZ2VuZXJh dGVkCisgKiAgYnkgZ2VuYnVpbHRpbnMucHkuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9S T01fT0JKRUNUUykKKyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX0dMT0JBTF9DTE9ORSkgfHwgZGVm aW5lZChEVUtfVVNFX1JPTV9HTE9CQUxfSU5IRVJJVCkKK0RVS19MT0NBTCB2b2lkIGR1a19fZHVw bGljYXRlX3JhbV9nbG9iYWxfb2JqZWN0KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaG9iamVj dCAqaF9nbG9iYWw7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JPTV9HTE9CQUxfQ0xPTkUpCisJZHVr X2hvYmplY3QgKmhfb2xkZ2xvYmFsOworCWR1a191aW50OF90ICpwcm9wczsKKwlkdWtfc2l6ZV90 IGFsbG9jX3NpemU7CisjZW5kaWYKKwlkdWtfaG9iamVjdCAqaF9vYmplbnY7CisKKwkvKiBYWFg6 IHJlZmFjdG9yIGludG8gaW50ZXJuYWwgaGVscGVyLCBkdWtfY2xvbmVfaG9iamVjdCgpICovCisK KyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX0dMT0JBTF9JTkhFUklUKQorCS8qIEluaGVyaXQgZnJv bSBST00tYmFzZWQgZ2xvYmFsIG9iamVjdDogbGVzcyBSQU0gdXNhZ2UsIGxlc3MgdHJhbnNwYXJl bnQuICovCisJaF9nbG9iYWwgPSBkdWtfcHVzaF9vYmplY3RfaGVscGVyKHRociwKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwK KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19GQVNU UkVGUyB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0NM QVNTX0FTX0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX0dMT0JBTCksCisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERVS19CSURYX0dMT0JBTCk7CisJRFVLX0FTU0VSVChoX2dsb2Jh bCAhPSBOVUxMKTsKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9ST01fR0xPQkFMX0NMT05FKQorCS8q IENsb25lIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBST00tYmFzZWQgZ2xvYmFsIG9iamVjdCB0byBj cmVhdGUgYQorCSAqIGZ1bGx5IFJBTS1iYXNlZCBnbG9iYWwgb2JqZWN0LiAgVXNlcyBtb3JlIG1l bW9yeSB0aGFuIHRoZSBpbmhlcml0CisJICogbW9kZWwgYnV0IG1vcmUgY29tcGxpYW50LgorCSAq LworCWhfZ2xvYmFsID0gZHVrX3B1c2hfb2JqZWN0X2hlbHBlcih0aHIsCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMg fAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19B U19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19HTE9CQUwpLAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfQklEWF9PQkpFQ1RfUFJPVE9UWVBFKTsKKwlEVUtfQVNTRVJUKGhf Z2xvYmFsICE9IE5VTEwpOworCWhfb2xkZ2xvYmFsID0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9H TE9CQUxdOworCURVS19BU1NFUlQoaF9vbGRnbG9iYWwgIT0gTlVMTCk7CisKKwkvKiBDb3B5IHRo ZSBwcm9wZXJ0eSB0YWJsZSB2ZXJiYXRpbTsgdGhpcyBoYW5kbGVzIGF0dHJpYnV0ZXMgZXRjLgor CSAqIEZvciBST00gb2JqZWN0cyBpdCdzIG5vdCBuZWNlc3NhcnkgKG9yIHBvc3NpYmxlKSB0byB1 cGRhdGUKKwkgKiByZWZjb3VudHMgc28gbGVhdmUgdGhlbSBhcyBpcy4KKwkgKi8KKwlhbGxvY19z aXplID0gRFVLX0hPQkpFQ1RfUF9BTExPQ19TSVpFKGhfb2xkZ2xvYmFsKTsKKwlEVUtfQVNTRVJU KGFsbG9jX3NpemUgPiAwKTsKKwlwcm9wcyA9IERVS19BTExPQ19DSEVDS0VEKHRociwgYWxsb2Nf c2l6ZSk7CisJRFVLX0FTU0VSVChwcm9wcyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JK RUNUX0dFVF9QUk9QUyh0aHItPmhlYXAsIGhfb2xkZ2xvYmFsKSAhPSBOVUxMKTsKKwlkdWtfbWVt Y3B5KCh2b2lkICopIHByb3BzLCAoY29uc3Qgdm9pZCAqKSBEVUtfSE9CSkVDVF9HRVRfUFJPUFMo dGhyLT5oZWFwLCBoX29sZGdsb2JhbCksIGFsbG9jX3NpemUpOworCisJLyogWFhYOiBrZWVwIHBy b3BlcnR5IGF0dHJpYnV0ZXMgb3IgdHdlYWsgdGhlbSBoZXJlPworCSAqIFByb3BlcnRpZXMgd2ls bCBub3cgYmUgbm9uLWNvbmZpZ3VyYWJsZSBldmVuIHdoZW4gdGhleSdyZQorCSAqIG5vcm1hbGx5 IGNvbmZpZ3VyYWJsZSBmb3IgdGhlIGdsb2JhbCBvYmplY3QuCisJICovCisKKwlEVUtfQVNTRVJU KERVS19IT0JKRUNUX0dFVF9QUk9QUyh0aHItPmhlYXAsIGhfZ2xvYmFsKSA9PSBOVUxMKTsKKwlE VUtfSE9CSkVDVF9TRVRfUFJPUFModGhyLT5oZWFwLCBoX2dsb2JhbCwgcHJvcHMpOworCURVS19I T0JKRUNUX1NFVF9FU0laRShoX2dsb2JhbCwgRFVLX0hPQkpFQ1RfR0VUX0VTSVpFKGhfb2xkZ2xv YmFsKSk7CisJRFVLX0hPQkpFQ1RfU0VUX0VORVhUKGhfZ2xvYmFsLCBEVUtfSE9CSkVDVF9HRVRf RU5FWFQoaF9vbGRnbG9iYWwpKTsKKwlEVUtfSE9CSkVDVF9TRVRfQVNJWkUoaF9nbG9iYWwsIERV S19IT0JKRUNUX0dFVF9BU0laRShoX29sZGdsb2JhbCkpOworCURVS19IT0JKRUNUX1NFVF9IU0la RShoX2dsb2JhbCwgRFVLX0hPQkpFQ1RfR0VUX0hTSVpFKGhfb2xkZ2xvYmFsKSk7CisjZWxzZQor I2Vycm9yIGludGVybmFsIGVycm9yIGluIGNvbmZpZyBkZWZpbmVzCisjZW5kaWYKKworCWR1a19o b2JqZWN0X2NvbXBhY3RfcHJvcHModGhyLCBoX2dsb2JhbCk7CisJRFVLX0FTU0VSVCh0aHItPmJ1 aWx0aW5zW0RVS19CSURYX0dMT0JBTF0gIT0gTlVMTCk7CisJRFVLX0FTU0VSVCghRFVLX0hFQVBI RFJfTkVFRFNfUkVGQ09VTlRfVVBEQVRFKChkdWtfaGVhcGhkciAqKSB0aHItPmJ1aWx0aW5zW0RV S19CSURYX0dMT0JBTF0pKTsgIC8qIG5vIG5lZWQgdG8gZGVjcmVmOiBST00gb2JqZWN0ICovCisJ dGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9CQUxdID0gaF9nbG9iYWw7CisJRFVLX0hPQkpFQ1Rf SU5DUkVGKHRociwgaF9nbG9iYWwpOworCURVS19EKERVS19EUFJJTlQoImR1cGxpY2F0ZWQgZ2xv YmFsIG9iamVjdDogJSFPIiwgaF9nbG9iYWwpKTsKKworCS8qIENyZWF0ZSBhIGZyZXNoIG9iamVj dCBlbnZpcm9ubWVudCBmb3IgdGhlIGdsb2JhbCBzY29wZS4gIFRoaXMgaXMKKwkgKiBuZWVkZWQg c28gdGhhdCB0aGUgZ2xvYmFsIHNjb3BlIHBvaW50cyB0byB0aGUgbmV3bHkgY3JlYXRlZCBSQU0t YmFzZWQKKwkgKiBnbG9iYWwgb2JqZWN0LgorCSAqLworCWhfb2JqZW52ID0gKGR1a19ob2JqZWN0 ICopIGR1a19ob2JqZW52X2FsbG9jKHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FT X0ZMQUdTKERVS19IT0JKRUNUX0NMQVNTX09CSkVOVikpOworCURVS19BU1NFUlQoaF9vYmplbnYg IT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRoci0+aGVh cCwgaF9vYmplbnYpID09IE5VTEwpOworCWR1a19wdXNoX2hvYmplY3QodGhyLCBoX29iamVudik7 CisKKwlEVUtfQVNTRVJUKGhfZ2xvYmFsICE9IE5VTEwpOworCSgoZHVrX2hvYmplbnYgKikgaF9v YmplbnYpLT50YXJnZXQgPSBoX2dsb2JhbDsKKwlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBoX2ds b2JhbCk7CisJRFVLX0FTU0VSVCgoKGR1a19ob2JqZW52ICopIGhfb2JqZW52KS0+aGFzX3RoaXMg PT0gMCk7CisKKwlEVUtfQVNTRVJUKHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfR0xPQkFMX0VOVl0g IT0gTlVMTCk7CisJRFVLX0FTU0VSVCghRFVLX0hFQVBIRFJfTkVFRFNfUkVGQ09VTlRfVVBEQVRF KChkdWtfaGVhcGhkciAqKSB0aHItPmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF9FTlZdKSk7ICAv KiBubyBuZWVkIHRvIGRlY3JlZjogUk9NIG9iamVjdCAqLworCXRoci0+YnVpbHRpbnNbRFVLX0JJ RFhfR0xPQkFMX0VOVl0gPSBoX29iamVudjsKKwlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBoX29i amVudik7CisJRFVLX0QoRFVLX0RQUklOVCgiZHVwbGljYXRlZCBnbG9iYWwgZW52OiAlIU8iLCBo X29iamVudikpOworCisJRFVLX0FTU0VSVF9IT0JKRU5WX1ZBTElEKChkdWtfaG9iamVudiAqKSBo X29iamVudik7CisKKwlkdWtfcG9wXzIodGhyKTsgIC8qIFBvcCBnbG9iYWwgb2JqZWN0IGFuZCBn bG9iYWwgZW52LiAqLworfQorI2VuZGlmICAvKiBEVUtfVVNFX1JPTV9HTE9CQUxfQ0xPTkUgfHwg RFVLX1VTRV9ST01fR0xPQkFMX0lOSEVSSVQgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2h0 aHJlYWRfY3JlYXRlX2J1aWx0aW5fb2JqZWN0cyhkdWtfaHRocmVhZCAqdGhyKSB7CisJLyogU2V0 dXAgYnVpbHRpbnMgZnJvbSBST00gb2JqZWN0cy4gIEFsbCBoZWFwcy90aHJlYWRzIHdpbGwgc2hh cmUKKwkgKiB0aGUgc2FtZSByZWFkb25seSBvYmplY3RzLgorCSAqLworCWR1a19zbWFsbF91aW50 X3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBEVUtfTlVNX0JVSUxUSU5TOyBpKyspIHsKKwkJZHVr X2hvYmplY3QgKmg7CisJCWggPSAoZHVrX2hvYmplY3QgKikgRFVLX0xPU0VfQ09OU1QoZHVrX3Jv bV9idWlsdGluc19iaWR4W2ldKTsKKwkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQl0aHItPmJ1 aWx0aW5zW2ldID0gaDsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUk9NX0dMT0JBTF9DTE9O RSkgfHwgZGVmaW5lZChEVUtfVVNFX1JPTV9HTE9CQUxfSU5IRVJJVCkKKwkvKiBCeSBkZWZhdWx0 IHRoZSBnbG9iYWwgb2JqZWN0IGlzIHJlYWQtb25seSB3aGljaCBpcyBvZnRlbiBtdWNoCisJICog bW9yZSBvZiBhbiBpc3N1ZSB0aGFuIGhhdmluZyByZWFkLW9ubHkgYnVpbHQtaW4gb2JqZWN0cyAo bGlrZQorCSAqIFJlZ0V4cCwgRGF0ZSwgZXRjKS4gIFVzZSBhIFJBTS1iYXNlZCBjb3B5IG9mIHRo ZSBnbG9iYWwgb2JqZWN0CisJICogYW5kIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgb2JqZWN0IGZv ciBjb252ZW5pZW5jZS4KKwkgKi8KKwlkdWtfX2R1cGxpY2F0ZV9yYW1fZ2xvYmFsX29iamVjdCh0 aHIpOworI2VuZGlmCit9CisjZWxzZSAgLyogRFVLX1VTRV9ST01fT0JKRUNUUyAqLworRFVLX0xP Q0FMIHZvaWQgZHVrX19wdXNoX3N0cmlkeChkdWtfaHRocmVhZCAqdGhyLCBkdWtfYml0ZGVjb2Rl cl9jdHggKmJkKSB7CisJZHVrX3NtYWxsX3VpbnRfdCBuOworCisJbiA9IChkdWtfc21hbGxfdWlu dF90KSBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOworCURVS19BU1NFUlRfRElTQUJMRShuID49 IDApOyAgLyogdW5zaWduZWQgKi8KKwlEVUtfQVNTRVJUKG4gPCBEVUtfSEVBUF9OVU1fU1RSSU5H Uyk7CisJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgodGhyLCBuKTsKK30KK0RVS19MT0NBTCB2b2lk IGR1a19fcHVzaF9zdHJpbmcoZHVrX2h0aHJlYWQgKnRociwgZHVrX2JpdGRlY29kZXJfY3R4ICpi ZCkgeworCS8qIFhYWDogYnVpbHQtaW5zIGRhdGEgY291bGQgcHJvdmlkZSBhIG1heGltdW0gbGVu Z3RoIHRoYXQgaXMKKwkgKiBhY3R1YWxseSBuZWVkZWQ7IGJpdHBhY2tlZCBtYXggbGVuZ3RoIGlz IG5vdyAyNTYgYnl0ZXMuCisJICovCisJZHVrX3VpbnQ4X3QgdG1wW0RVS19CRF9CSVRQQUNLRURf U1RSSU5HX01BWExFTl07CisJZHVrX3NtYWxsX3VpbnRfdCBsZW47CisKKwlsZW4gPSBkdWtfYmRf ZGVjb2RlX2JpdHBhY2tlZF9zdHJpbmcoYmQsIHRtcCk7CisJZHVrX3B1c2hfbHN0cmluZyh0aHIs IChjb25zdCBjaGFyICopIHRtcCwgKGR1a19zaXplX3QpIGxlbik7Cit9CitEVUtfTE9DQUwgdm9p ZCBkdWtfX3B1c2hfc3RyaWR4X29yX3N0cmluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfYml0ZGVj b2Rlcl9jdHggKmJkKSB7CisJZHVrX3NtYWxsX3VpbnRfdCBuOworCisJbiA9IChkdWtfc21hbGxf dWludF90KSBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOworCWlmIChuID09IDApIHsKKwkJZHVr X19wdXNoX3N0cmluZyh0aHIsIGJkKTsKKwl9IGVsc2UgeworCQluLS07CisJCURVS19BU1NFUlQo biA8IERVS19IRUFQX05VTV9TVFJJTkdTKTsKKwkJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgodGhy LCBuKTsKKwl9Cit9CitEVUtfTE9DQUwgdm9pZCBkdWtfX3B1c2hfZG91YmxlKGR1a19odGhyZWFk ICp0aHIsIGR1a19iaXRkZWNvZGVyX2N0eCAqYmQpIHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1Owor CWR1a19zbWFsbF91aW50X3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLyog RW5jb2RpbmcgZW5kaWFubmVzcyBtdXN0IG1hdGNoIHRhcmdldCBtZW1vcnkgbGF5b3V0LAorCQkg KiBidWlsZCBzY3JpcHRzIGFuZCBnZW5idWlsdGlucy5weSBtdXN0IGVuc3VyZSB0aGlzLgorCQkg Ki8KKwkJZHUudWNbaV0gPSAoZHVrX3VpbnQ4X3QpIGR1a19iZF9kZWNvZGUoYmQsIDgpOworCX0K KworCWR1a19wdXNoX251bWJlcih0aHIsIGR1LmQpOyAgLyogcHVzaCBvcGVyYXRpb24gbm9ybWFs aXplcyBOYU5zICovCit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19odGhyZWFkX2NyZWF0ZV9i dWlsdGluX29iamVjdHMoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19iaXRkZWNvZGVyX2N0eCBi ZF9jdHg7CisJZHVrX2JpdGRlY29kZXJfY3R4ICpiZCA9ICZiZF9jdHg7ICAvKiBjb252ZW5pZW5j ZSAqLworCWR1a19ob2JqZWN0ICpoOworCWR1a19zbWFsbF91aW50X3QgaSwgajsKKworCURVS19E KERVS19EUFJJTlQoIklOSVRCVUlMVElOUyBCRUdJTjogRFVLX05VTV9CVUlMVElOUz0lZCwgRFVL X05VTV9CVUlMVElOU19BTEw9JWQiLCAoaW50KSBEVUtfTlVNX0JVSUxUSU5TLCAoaW50KSBEVUtf TlVNX0FMTF9CVUlMVElOUykpOworCisJZHVrX21lbXplcm8oJmJkX2N0eCwgc2l6ZW9mKGJkX2N0 eCkpOworCWJkLT5kYXRhID0gKGNvbnN0IGR1a191aW50OF90ICopIGR1a19idWlsdGluc19kYXRh OworCWJkLT5sZW5ndGggPSAoZHVrX3NpemVfdCkgRFVLX0JVSUxUSU5TX0RBVEFfTEVOR1RIOwor CisJLyoKKwkgKiAgRmlyc3QgY3JlYXRlIGFsbCBidWlsdC1pbiBiYXJlIG9iamVjdHMgb24gdGhl IGVtcHR5IHZhbHN0YWNrLgorCSAqCisJICogIEJ1aWx0LWlucyBpbiB0aGUgaW5kZXggcmFuZ2Ug WzAsRFVLX05VTV9CVUlMVElOUy0xXSBoYXZlIHZhbHVlCisJICogIHN0YWNrIGluZGljZXMgbWF0 Y2hpbmcgdGhlaXIgZXZlbnR1YWwgdGhyLT5idWlsdGluc1tdIGluZGV4LgorCSAqCisJICogIEJ1 aWx0LWlucyBpbiB0aGUgaW5kZXggcmFuZ2UgW0RVS19OVU1fQlVJTFRJTlMsRFVLX05VTV9BTExf QlVJTFRJTlNdCisJICogIHdpbGwgZXhpc3Qgb24gdGhlIHZhbHVlIHN0YWNrIGR1cmluZyBpbml0 IGJ1dCB3b24ndCBiZSBwbGFjZWQKKwkgKiAgaW50byB0aHItPmJ1aWx0aW5zW10uICBUaGVzZSBh cmUgb2JqZWN0cyByZWZlcmVuY2VkIGluIHNvbWUgd2F5CisJICogIGZyb20gdGhyLT5idWlsdGlu c1tdIHJvb3RzIGJ1dCB3aGljaCBkb24ndCBuZWVkIHRvIGJlIGluZGV4ZWQgYnkKKwkgKiAgRHVr dGFwZSB0aHJvdWdoIHRoci0+YnVpbHRpbnNbXSAoZS5nLiB1c2VyIGN1c3RvbSBvYmplY3RzKS4K KwkgKgorCSAqICBJbnRlcm5hbCBwcm90b3R5cGVzIHdpbGwgYmUgaW5jb3JyZWN0IChOVUxMKSBh dCB0aGlzIHN0YWdlLgorCSAqLworCisJZHVrX3JlcXVpcmVfc3RhY2sodGhyLCBEVUtfTlVNX0FM TF9CVUlMVElOUyk7CisKKwlEVUtfREQoRFVLX0REUFJJTlQoImNyZWF0ZSBlbXB0eSBidWlsdC1p bnMiKSk7CisJRFVLX0FTU0VSVF9UT1AodGhyLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgRFVLX05V TV9BTExfQlVJTFRJTlM7IGkrKykgeworCQlkdWtfc21hbGxfdWludF90IGNsYXNzX251bTsKKwkJ ZHVrX3NtYWxsX2ludF90IGxlbiA9IC0xOyAgLyogbXVzdCBiZSBzaWduZWQgKi8KKworCQljbGFz c19udW0gPSAoZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2JkX2RlY29kZV92YXJ1aW50KGJkKTsKKwkJ bGVuID0gKGR1a19zbWFsbF9pbnRfdCkgZHVrX2JkX2RlY29kZV9mbGFnZ2VkX3NpZ25lZChiZCwg RFVLX19MRU5HVEhfUFJPUF9CSVRTLCAoZHVrX2ludDMyX3QpIC0xIC8qZGVmX3ZhbHVlKi8pOwor CisJCWlmIChjbGFzc19udW0gPT0gRFVLX0hPQkpFQ1RfQ0xBU1NfRlVOQ1RJT04pIHsKKwkJCWR1 a19zbWFsbF91aW50X3QgbmF0aWR4OworCQkJZHVrX3NtYWxsX2ludF90IGNfbmFyZ3M7ICAvKiBt dXN0IGhvbGQgRFVLX1ZBUkFSR1MgKi8KKwkJCWR1a19jX2Z1bmN0aW9uIGNfZnVuYzsKKwkJCWR1 a19pbnQxNl90IG1hZ2ljOworCisJCQlEVUtfREREKERVS19ERERQUklOVCgibGVuPSVsZCIsIChs b25nKSBsZW4pKTsKKwkJCURVS19BU1NFUlQobGVuID49IDApOworCisJCQluYXRpZHggPSAoZHVr X3NtYWxsX3VpbnRfdCkgZHVrX2JkX2RlY29kZV92YXJ1aW50KGJkKTsKKwkJCURVS19BU1NFUlQo bmF0aWR4ICE9IDApOworCQkJY19mdW5jID0gZHVrX2JpX25hdGl2ZV9mdW5jdGlvbnNbbmF0aWR4 XTsKKwkJCURVS19BU1NFUlQoY19mdW5jICE9IE5VTEwpOworCisJCQljX25hcmdzID0gKGR1a19z bWFsbF9pbnRfdCkgZHVrX2JkX2RlY29kZV9mbGFnZ2VkX3NpZ25lZChiZCwgRFVLX19OQVJHU19C SVRTLCBsZW4gLypkZWZfdmFsdWUqLyk7CisJCQlpZiAoY19uYXJncyA9PSBEVUtfX05BUkdTX1ZB UkFSR1NfTUFSS0VSKSB7CisJCQkJY19uYXJncyA9IERVS19WQVJBUkdTOworCQkJfQorCisJCQkv KiBYWFg6IHNldCBtYWdpYyBkaXJlY3RseSBoZXJlPyAoaXQgY291bGQgc2hhcmUgdGhlIGNfbmFy Z3MgYXJnKSAqLworCQkJKHZvaWQpIGR1a19wdXNoX2NfZnVuY3Rpb25fYnVpbHRpbih0aHIsIGNf ZnVuYywgY19uYXJncyk7CisJCQloID0gZHVrX2tub3duX2hvYmplY3QodGhyLCAtMSk7CisKKwkJ CS8qIEN1cnJlbnRseSBhbGwgYnVpbHQtaW4gbmF0aXZlIGZ1bmN0aW9ucyBhcmUgc3RyaWN0Lgor CQkJICogZHVrX3B1c2hfY19mdW5jdGlvbigpIG5vdyBzZXRzIHN0cmljdCBmbGFnLCBzbworCQkJ ICogYXNzZXJ0IGZvciBpdC4KKwkJCSAqLworCQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNf U1RSSUNUKGgpKTsKKworCQkJLyogWFhYOiBmdW5jdGlvbiBwcm9wZXJ0aWVzICovCisKKwkJCWR1 a19fcHVzaF9zdHJpZHhfb3Jfc3RyaW5nKHRociwgYmQpOworI2lmIGRlZmluZWQoRFVLX1VTRV9G VU5DX05BTUVfUFJPUEVSVFkpCisJCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsCisJ CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAtMiwKKwkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19TVFJJRFhfTkFNRSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19QUk9QREVTQ19GTEFHU19DKTsKKyNlbHNlCisJCQlkdWtfcG9wKHRocik7ICAvKiBOb3QgdmVy eSBpZGVhbCBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4gKi8KKyNlbmRpZgorCisJCQkvKiBBbG1v c3QgYWxsIGdsb2JhbCBsZXZlbCBGdW5jdGlvbiBvYmplY3RzIGFyZSBjb25zdHJ1Y3RhYmxlCisJ CQkgKiBidXQgbm90IGFsbDogRnVuY3Rpb24ucHJvdG90eXBlIGlzIGEgbm9uLWNvbnN0cnVjdGFi bGUsCisJCQkgKiBjYWxsYWJsZSBGdW5jdGlvbi4KKwkJCSAqLworCQkJaWYgKGR1a19iZF9kZWNv ZGVfZmxhZyhiZCkpIHsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19DT05TVFJVQ1RB QkxFKGgpKTsKKwkJCX0gZWxzZSB7CisJCQkJRFVLX0hPQkpFQ1RfQ0xFQVJfQ09OU1RSVUNUQUJM RShoKTsKKwkJCX0KKworCQkJLyogQ2FzdCBjb252ZXJ0cyBtYWdpYyB0byAxNi1iaXQgc2lnbmVk IHZhbHVlICovCisJCQltYWdpYyA9IChkdWtfaW50MTZfdCkgZHVrX2JkX2RlY29kZV92YXJ1aW50 KGJkKTsKKwkJCSgoZHVrX2huYXRmdW5jICopIGgpLT5tYWdpYyA9IG1hZ2ljOworCQl9IGVsc2Ug aWYgKGNsYXNzX251bSA9PSBEVUtfSE9CSkVDVF9DTEFTU19BUlJBWSkgeworCQkJZHVrX3B1c2hf YXJyYXkodGhyKTsKKwkJfSBlbHNlIGlmIChjbGFzc19udW0gPT0gRFVLX0hPQkpFQ1RfQ0xBU1Nf T0JKRU5WKSB7CisJCQlkdWtfaG9iamVudiAqZW52OworCQkJZHVrX2hvYmplY3QgKmdsb2JhbDsK KworCQkJRFVLX0FTU0VSVChpID09IERVS19CSURYX0dMT0JBTF9FTlYpOworCQkJRFVLX0FTU0VS VChEVUtfQklEWF9HTE9CQUxfRU5WID4gRFVLX0JJRFhfR0xPQkFMKTsKKworCQkJZW52ID0gZHVr X2hvYmplbnZfYWxsb2ModGhyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVD VF9DTEFTU19PQkpFTlYpKTsKKwkJCURVS19BU1NFUlQoZW52LT50YXJnZXQgPT0gTlVMTCk7CisJ CQlkdWtfcHVzaF9ob2JqZWN0KHRociwgKGR1a19ob2JqZWN0ICopIGVudik7CisKKwkJCWdsb2Jh bCA9IGR1a19rbm93bl9ob2JqZWN0KHRociwgRFVLX0JJRFhfR0xPQkFMKTsKKwkJCURVS19BU1NF UlQoZ2xvYmFsICE9IE5VTEwpOworCQkJZW52LT50YXJnZXQgPSBnbG9iYWw7CisJCQlEVUtfSE9C SkVDVF9JTkNSRUYodGhyLCBnbG9iYWwpOworCQkJRFVLX0FTU0VSVChlbnYtPmhhc190aGlzID09 IDApOworCisJCQlEVUtfQVNTRVJUX0hPQkpFTlZfVkFMSUQoZW52KTsKKwkJfSBlbHNlIHsKKwkJ CURVS19BU1NFUlQoY2xhc3NfbnVtICE9IERVS19IT0JKRUNUX0NMQVNTX0RFQ0VOVik7CisKKwkJ CSh2b2lkKSBkdWtfcHVzaF9vYmplY3RfaGVscGVyKHRociwKKwkJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRkFTVFJFRlMgfAorCQkJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFLAorCQkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLTEpOyAgLyogbm8gcHJvdG90eXBlIG9yIGNsYXNzIHll dCAqLworCisJCX0KKworCQloID0gZHVrX2tub3duX2hvYmplY3QodGhyLCAtMSk7CisJCURVS19I T0JKRUNUX1NFVF9DTEFTU19OVU1CRVIoaCwgY2xhc3NfbnVtKTsKKworCQlpZiAoaSA8IERVS19O VU1fQlVJTFRJTlMpIHsKKwkJCXRoci0+YnVpbHRpbnNbaV0gPSBoOworCQkJRFVLX0hPQkpFQ1Rf SU5DUkVGKHRociwgJmgtPmhkcik7CisJCX0KKworCQlpZiAobGVuID49IDApIHsKKwkJCS8qIElu IEVTMjAxNSsgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IC5sZW5ndGggcHJvcGVydHkKKwkJCSAq IGhhcyBwcm9wZXJ0eSBhdHRyaWJ1dGVzIEMgKGNvbmZpZ3VyYWJsZSBvbmx5KToKKwkJCSAqIGh0 dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2Ny aXB0LXN0YW5kYXJkLWJ1aWx0LWluLW9iamVjdHMKKwkJCSAqCisJCQkgKiBBcnJheS5wcm90b3R5 cGUgcmVtYWlucyBhbiBBcnJheSBpbnN0YW5jZSBpbiBFUzIwMTUrCisJCQkgKiBhbmQgaXRzIGxl bmd0aCBoYXMgYXR0cmlidXRlcyBXICh3cml0YWJsZSBvbmx5KS4KKwkJCSAqIEJlY2F1c2UgLmxl bmd0aCBpcyBub3cgdmlydHVhbCBmb3IgZHVrX2hhcnJheSwgaXQgaXMKKwkJCSAqIG5vdCBlbmNv ZGVkIGV4cGxpY2l0bHkgaW4gaW5pdCBkYXRhLgorCQkJICovCisKKwkJCURVS19BU1NFUlQoY2xh c3NfbnVtICE9IERVS19IT0JKRUNUX0NMQVNTX0FSUkFZKTsgIC8qIC5sZW5ndGggaXMgdmlydHVh bCAqLworCQkJZHVrX3B1c2hfaW50KHRociwgbGVuKTsKKwkJCWR1a194ZGVmX3Byb3Bfc3RyaWR4 X3Nob3J0KHRociwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0yLAorCQkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX1NUUklEWF9MRU5HVEgsCisJCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfUFJPUERFU0NfRkxBR1NfQyk7CisJCX0KKworCQkvKiBlbmFibGUg ZXhvdGljIGJlaGF2aW9ycyBsYXN0ICovCisKKwkJaWYgKGNsYXNzX251bSA9PSBEVUtfSE9CSkVD VF9DTEFTU19BUlJBWSkgeworCQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FS UkFZKGgpKTsgIC8qIHNldCBieSBkdWtfcHVzaF9hcnJheSgpICovCisJCX0KKwkJaWYgKGNsYXNz X251bSA9PSBEVUtfSE9CSkVDVF9DTEFTU19TVFJJTkcpIHsKKwkJCURVS19IT0JKRUNUX1NFVF9F WE9USUNfU1RSSU5HT0JKKGgpOworCQl9CisKKwkJLyogc29tZSBhc3NlcnRpb25zICovCisKKwkJ RFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfRVhURU5TSUJMRShoKSk7CisJCS8qIERVS19IT0JK RUNUX0ZMQUdfQ09OU1RSVUNUQUJMRSB2YXJpZXMgKi8KKwkJRFVLX0FTU0VSVCghRFVLX0hPQkpF Q1RfSEFTX0JPVU5ERlVOQyhoKSk7CisJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19DT01Q RlVOQyhoKSk7CisJCS8qIERVS19IT0JKRUNUX0ZMQUdfTkFURlVOQyB2YXJpZXMgKi8KKwkJRFVL X0FTU0VSVCghRFVLX0hPQkpFQ1RfSVNfVEhSRUFEKGgpKTsKKwkJRFVLX0FTU0VSVCghRFVLX0hP QkpFQ1RfSEFTX0FSUkFZX1BBUlQoaCkgfHwgY2xhc3NfbnVtID09IERVS19IT0JKRUNUX0NMQVNT X0FSUkFZKTsKKwkJLyogRFVLX0hPQkpFQ1RfRkxBR19TVFJJQ1QgdmFyaWVzICovCisJCURVS19B U1NFUlQoIURVS19IT0JKRUNUX0hBU19OQVRGVU5DKGgpIHx8ICAvKiBhbGwgbmF0aXZlIGZ1bmN0 aW9ucyBoYXZlIE5FV0VOViAqLworCQkgICAgICAgICAgIERVS19IT0JKRUNUX0hBU19ORVdFTlYo aCkpOworCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfTkFNRUJJTkRJTkcoaCkpOworCQlE VUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfQ1JFQVRFQVJHUyhoKSk7CisJCS8qIERVS19IT0JK RUNUX0ZMQUdfRVhPVElDX0FSUkFZIHZhcmllcyAqLworCQkvKiBEVUtfSE9CSkVDVF9GTEFHX0VY T1RJQ19TVFJJTkdPQkogdmFyaWVzICovCisJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19F WE9USUNfQVJHVU1FTlRTKGgpKTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgiY3JlYXRlZCBi dWlsdC1pbiAlbGQsIGNsYXNzPSVsZCwgbGVuZ3RoPSVsZCIsIChsb25nKSBpLCAobG9uZykgY2xh c3NfbnVtLCAobG9uZykgbGVuKSk7CisJfQorCisJLyoKKwkgKiAgVGhlbiBkZWNvZGUgdGhlIGJ1 aWx0aW5zIGluaXQgZGF0YSAoc2VlIGdlbmJ1aWx0aW5zLnB5KSB0bworCSAqICBpbml0IG9iamVj dHMuICBJbnRlcm5hbCBwcm90b3R5cGVzIGFyZSBzZXQgYXQgdGhpcyBzdGFnZSwKKwkgKiAgd2l0 aCB0aHItPmJ1aWx0aW5zW10gcG9wdWxhdGVkLgorCSAqLworCisJRFVLX0REKERVS19ERFBSSU5U KCJpbml0aWFsaXplIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIikpOworCWZvciAoaSA9IDA7 IGkgPCBEVUtfTlVNX0FMTF9CVUlMVElOUzsgaSsrKSB7CisJCWR1a19zbWFsbF91aW50X3QgdDsK KwkJZHVrX3NtYWxsX3VpbnRfdCBudW07CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImluaXRp YWxpemluZyBidWlsdC1pbiBvYmplY3QgYXQgaW5kZXggJWxkIiwgKGxvbmcpIGkpKTsKKwkJaCA9 IGR1a19rbm93bl9ob2JqZWN0KHRociwgKGR1a19pZHhfdCkgaSk7CisKKwkJdCA9IChkdWtfc21h bGxfdWludF90KSBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOworCQlpZiAodCA+IDApIHsKKwkJ CXQtLTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJzZXQgaW50ZXJuYWwgcHJvdG90eXBlOiBi dWlsdC1pbiAlbGQiLCAobG9uZykgdCkpOworCQkJRFVLX0hPQkpFQ1RfU0VUX1BST1RPVFlQRV9V UERSRUYodGhyLCBoLCBkdWtfa25vd25faG9iamVjdCh0aHIsIChkdWtfaWR4X3QpIHQpKTsKKwkJ fSBlbHNlIGlmIChEVUtfSE9CSkVDVF9JU19OQVRGVU5DKGgpKSB7CisJCQkvKiBTdGFuZGFyZCBu YXRpdmUgYnVpbHQtaW5zIGNhbm5vdCBpbmhlcml0IGZyb20KKwkJCSAqICVOYXRpdmVGdW5jdGlv blByb3RvdHlwZSUsIHRoZXkgYXJlIHJlcXVpcmVkIHRvCisJCQkgKiBpbmhlcml0IGZyb20gRnVu Y3Rpb24ucHJvdG90eXBlIGRpcmVjdGx5LgorCQkJICovCisJCQlEVUtfQVNTRVJUKHRoci0+YnVp bHRpbnNbRFVLX0JJRFhfRlVOQ1RJT05fUFJPVE9UWVBFXSAhPSBOVUxMKTsKKwkJCURVS19IT0JK RUNUX1NFVF9QUk9UT1RZUEVfVVBEUkVGKHRociwgaCwgdGhyLT5idWlsdGluc1tEVUtfQklEWF9G VU5DVElPTl9QUk9UT1RZUEVdKTsKKwkJfQorCisJCXQgPSAoZHVrX3NtYWxsX3VpbnRfdCkgZHVr X2JkX2RlY29kZV92YXJ1aW50KGJkKTsKKwkJaWYgKHQgPiAwKSB7CisJCQkvKiAncHJvdG90eXBl JyBwcm9wZXJ0eSBmb3IgYWxsIGJ1aWx0LWluIG9iamVjdHMgKHdoaWNoIGhhdmUgaXQpIGhhcyBh dHRyaWJ1dGVzOgorCQkJICogIFtbV3JpdGFibGVdXSA9IGZhbHNlLAorCQkJICogIFtbRW51bWVy YWJsZV1dID0gZmFsc2UsCisJCQkgKiAgW1tDb25maWd1cmFibGVdXSA9IGZhbHNlCisJCQkgKi8K KwkJCXQtLTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJzZXQgZXh0ZXJuYWwgcHJvdG90eXBl OiBidWlsdC1pbiAlbGQiLCAobG9uZykgdCkpOworCQkJZHVrX2R1cCh0aHIsIChkdWtfaWR4X3Qp IHQpOworCQkJZHVrX3hkZWZfcHJvcF9zdHJpZHgodGhyLCAoZHVrX2lkeF90KSBpLCBEVUtfU1RS SURYX1BST1RPVFlQRSwgRFVLX1BST1BERVNDX0ZMQUdTX05PTkUpOworCQl9CisKKwkJdCA9IChk dWtfc21hbGxfdWludF90KSBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOworCQlpZiAodCA+IDAp IHsKKwkJCS8qICdjb25zdHJ1Y3RvcicgcHJvcGVydHkgZm9yIGFsbCBidWlsdC1pbiBvYmplY3Rz ICh3aGljaCBoYXZlIGl0KSBoYXMgYXR0cmlidXRlczoKKwkJCSAqICBbW1dyaXRhYmxlXV0gPSB0 cnVlLAorCQkJICogIFtbRW51bWVyYWJsZV1dID0gZmFsc2UsCisJCQkgKiAgW1tDb25maWd1cmFi bGVdXSA9IHRydWUKKwkJCSAqLworCQkJdC0tOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInNl dCBleHRlcm5hbCBjb25zdHJ1Y3RvcjogYnVpbHQtaW4gJWxkIiwgKGxvbmcpIHQpKTsKKwkJCWR1 a19kdXAodGhyLCAoZHVrX2lkeF90KSB0KTsKKwkJCWR1a194ZGVmX3Byb3Bfc3RyaWR4KHRociwg KGR1a19pZHhfdCkgaSwgRFVLX1NUUklEWF9DT05TVFJVQ1RPUiwgRFVLX1BST1BERVNDX0ZMQUdT X1dDKTsKKwkJfQorCisJCS8qIG5vcm1hbCB2YWx1ZWQgcHJvcGVydGllcyAqLworCQludW0gPSAo ZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2JkX2RlY29kZV92YXJ1aW50KGJkKTsKKwkJRFVLX0RERChE VUtfREREUFJJTlQoImJ1aWx0LWluIG9iamVjdCAlbGQsICVsZCBub3JtYWwgdmFsdWVkIHByb3Bl cnRpZXMiLCAobG9uZykgaSwgKGxvbmcpIG51bSkpOworCQlmb3IgKGogPSAwOyBqIDwgbnVtOyBq KyspIHsKKwkJCWR1a19zbWFsbF91aW50X3QgZGVmcHJvcF9mbGFnczsKKworCQkJZHVrX19wdXNo X3N0cmlkeF9vcl9zdHJpbmcodGhyLCBiZCk7CisKKwkJCS8qCisJCQkgKiAgUHJvcGVydHkgYXR0 cmlidXRlIGRlZmF1bHRzIGFyZSBkZWZpbmVkIGluIEU1IFNlY3Rpb24gMTUgKGZpcnN0CisJCQkg KiAgZmV3IHBhZ2VzKTsgdGhlcmUgaXMgYSBkZWZhdWx0IGZvciBhbGwgcHJvcGVydGllcyBhbmQg YSBzcGVjaWFsCisJCQkgKiAgZGVmYXVsdCBmb3IgJ2xlbmd0aCcgcHJvcGVydGllcy4gIFZhcmlh dGlvbiBmcm9tIHRoZSBkZWZhdWx0cyBpcworCQkJICogIHNpZ25hbGVkIHVzaW5nIGEgc2luZ2xl IGZsYWcgYml0IGluIHRoZSBiaXRzdHJlYW0uCisJCQkgKi8KKworCQkJZGVmcHJvcF9mbGFncyA9 IChkdWtfc21hbGxfdWludF90KSBkdWtfYmRfZGVjb2RlX2ZsYWdnZWQoYmQsCisJCQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfX1BS T1BfRkxBR1NfQklUUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChkdWtfdWludDMyX3QpIERVS19QUk9QREVTQ19GTEFHU19XQyk7 CisJCQlkZWZwcm9wX2ZsYWdzIHw9IERVS19ERUZQUk9QX0ZPUkNFIHwKKwkJCSAgICAgICAgICAg ICAgICAgRFVLX0RFRlBST1BfSEFWRV9WQUxVRSB8CisJCQkgICAgICAgICAgICAgICAgIERVS19E RUZQUk9QX0hBVkVfV1JJVEFCTEUgfAorCQkJICAgICAgICAgICAgICAgICBEVUtfREVGUFJPUF9I QVZFX0VOVU1FUkFCTEUgfAorCQkJICAgICAgICAgICAgICAgICBEVUtfREVGUFJPUF9IQVZFX0NP TkZJR1VSQUJMRTsgIC8qIERlZmF1bHRzIGZvciBkYXRhIHByb3BlcnRpZXMuICovCisKKwkJCS8q IFRoZSB3cml0YWJsZSwgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlIGZsYWdzIGluIHByb3BfZmxh Z3MKKwkJCSAqIG1hdGNoIGJvdGggZHVrX2RlZl9wcm9wKCkgYW5kIGludGVybmFsIHByb3BlcnR5 IGZsYWdzLgorCQkJICovCisJCQlEVUtfQVNTRVJUKERVS19QUk9QREVTQ19GTEFHX1dSSVRBQkxF ID09IERVS19ERUZQUk9QX1dSSVRBQkxFKTsKKwkJCURVS19BU1NFUlQoRFVLX1BST1BERVNDX0ZM QUdfRU5VTUVSQUJMRSA9PSBEVUtfREVGUFJPUF9FTlVNRVJBQkxFKTsKKwkJCURVS19BU1NFUlQo RFVLX1BST1BERVNDX0ZMQUdfQ09ORklHVVJBQkxFID09IERVS19ERUZQUk9QX0NPTkZJR1VSQUJM RSk7CisKKwkJCXQgPSAoZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2JkX2RlY29kZShiZCwgRFVLX19Q Uk9QX1RZUEVfQklUUyk7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJidWlsdC1pbiAlbGQs IG5vcm1hbC12YWx1ZWQgcHJvcGVydHkgJWxkLCBrZXkgJSFULCBmbGFncyAweCUwMmx4LCB0eXBl ICVsZCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcpIGosIGR1a19n ZXRfdHZhbCh0aHIsIC0xKSwgKHVuc2lnbmVkIGxvbmcpIGRlZnByb3BfZmxhZ3MsIChsb25nKSB0 KSk7CisKKwkJCXN3aXRjaCAodCkgeworCQkJY2FzZSBEVUtfX1BST1BfVFlQRV9ET1VCTEU6IHsK KwkJCQlkdWtfX3B1c2hfZG91YmxlKHRociwgYmQpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2Fz ZSBEVUtfX1BST1BfVFlQRV9TVFJJTkc6IHsKKwkJCQlkdWtfX3B1c2hfc3RyaW5nKHRociwgYmQp OworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBEVUtfX1BST1BfVFlQRV9TVFJJRFg6IHsKKwkJ CQlkdWtfX3B1c2hfc3RyaWR4KHRociwgYmQpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBE VUtfX1BST1BfVFlQRV9CVUlMVElOOiB7CisJCQkJZHVrX3NtYWxsX3VpbnRfdCBiaWR4OworCisJ CQkJYmlkeCA9IChkdWtfc21hbGxfdWludF90KSBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOwor CQkJCWR1a19kdXAodGhyLCAoZHVrX2lkeF90KSBiaWR4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ CWNhc2UgRFVLX19QUk9QX1RZUEVfVU5ERUZJTkVEOiB7CisJCQkJZHVrX3B1c2hfdW5kZWZpbmVk KHRocik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIERVS19fUFJPUF9UWVBFX0JPT0xFQU5f VFJVRTogeworCQkJCWR1a19wdXNoX3RydWUodGhyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNh c2UgRFVLX19QUk9QX1RZUEVfQk9PTEVBTl9GQUxTRTogeworCQkJCWR1a19wdXNoX2ZhbHNlKHRo cik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIERVS19fUFJPUF9UWVBFX0FDQ0VTU09SOiB7 CisJCQkJZHVrX3NtYWxsX3VpbnRfdCBuYXRpZHhfZ2V0dGVyID0gKGR1a19zbWFsbF91aW50X3Qp IGR1a19iZF9kZWNvZGVfdmFydWludChiZCk7CisJCQkJZHVrX3NtYWxsX3VpbnRfdCBuYXRpZHhf c2V0dGVyID0gKGR1a19zbWFsbF91aW50X3QpIGR1a19iZF9kZWNvZGVfdmFydWludChiZCk7CisJ CQkJZHVrX3NtYWxsX3VpbnRfdCBhY2Nlc3Nvcl9tYWdpYyA9IChkdWtfc21hbGxfdWludF90KSBk dWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOworCQkJCWR1a19jX2Z1bmN0aW9uIGNfZnVuY19nZXR0 ZXI7CisJCQkJZHVrX2NfZnVuY3Rpb24gY19mdW5jX3NldHRlcjsKKworCQkJCURVS19EREQoRFVL X0RERFBSSU5UKCJidWlsdC1pbiBhY2Nlc3NvciBwcm9wZXJ0eTogb2JqaWR4PSVsZCwga2V5PSUh VCwgZ2V0dGVyaWR4PSVsZCwgc2V0dGVyaWR4PSVsZCwgZmxhZ3M9MHglMDRseCIsCisJCQkJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIGksIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwgKGxvbmcp IG5hdGlkeF9nZXR0ZXIsIChsb25nKSBuYXRpZHhfc2V0dGVyLCAodW5zaWduZWQgbG9uZykgZGVm cHJvcF9mbGFncykpOworCisJCQkJY19mdW5jX2dldHRlciA9IGR1a19iaV9uYXRpdmVfZnVuY3Rp b25zW25hdGlkeF9nZXR0ZXJdOworCQkJCWlmIChjX2Z1bmNfZ2V0dGVyICE9IE5VTEwpIHsKKwkJ CQkJZHVrX3B1c2hfY19mdW5jdGlvbl9idWlsdGluX25vY29uc3RydWN0KHRociwgY19mdW5jX2dl dHRlciwgMCk7ICAvKiBhbHdheXMgMCBhcmdzICovCisJCQkJCWR1a19zZXRfbWFnaWModGhyLCAt MSwgKGR1a19pbnRfdCkgYWNjZXNzb3JfbWFnaWMpOworCQkJCQlkZWZwcm9wX2ZsYWdzIHw9IERV S19ERUZQUk9QX0hBVkVfR0VUVEVSOworCQkJCX0KKwkJCQljX2Z1bmNfc2V0dGVyID0gZHVrX2Jp X25hdGl2ZV9mdW5jdGlvbnNbbmF0aWR4X3NldHRlcl07CisJCQkJaWYgKGNfZnVuY19zZXR0ZXIg IT0gTlVMTCkgeworCQkJCQlkdWtfcHVzaF9jX2Z1bmN0aW9uX2J1aWx0aW5fbm9jb25zdHJ1Y3Qo dGhyLCBjX2Z1bmNfc2V0dGVyLCAxKTsgIC8qIGFsd2F5cyAxIGFyZyAqLworCQkJCQlkdWtfc2V0 X21hZ2ljKHRociwgLTEsIChkdWtfaW50X3QpIGFjY2Vzc29yX21hZ2ljKTsKKwkJCQkJZGVmcHJv cF9mbGFncyB8PSBEVUtfREVGUFJPUF9IQVZFX1NFVFRFUjsKKwkJCQl9CisKKwkJCQkvKiBXcml0 YWJsZSBmbGFnIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYW4gYWNjZXNzb3IuICovCisJCQkJRFVL X0FTU0VSVCgoZGVmcHJvcF9mbGFncyAmIERVS19QUk9QREVTQ19GTEFHX1dSSVRBQkxFKSA9PSAw KTsgIC8qIGdlbmJ1aWx0aW5zLnB5IGVuc3VyZXMgKi8KKworCQkJCWRlZnByb3BfZmxhZ3MgJj0g fihEVUtfREVGUFJPUF9IQVZFX1ZBTFVFIHwgRFVLX0RFRlBST1BfSEFWRV9XUklUQUJMRSk7CisJ CQkJZGVmcHJvcF9mbGFncyB8PSBEVUtfREVGUFJPUF9IQVZFX0VOVU1FUkFCTEUgfCBEVUtfREVG UFJPUF9IQVZFX0NPTkZJR1VSQUJMRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6IHsK KwkJCQkvKiBleGhhdXN0aXZlICovCisJCQkJRFVLX1VOUkVBQ0hBQkxFKCk7CisJCQl9CisJCQl9 CisKKwkJCWR1a19kZWZfcHJvcCh0aHIsIChkdWtfaWR4X3QpIGksIGRlZnByb3BfZmxhZ3MpOwor CQkJRFVLX0FTU0VSVF9UT1AodGhyLCBEVUtfTlVNX0FMTF9CVUlMVElOUyk7CisJCX0KKworCQkv KiBuYXRpdmUgZnVuY3Rpb24gcHJvcGVydGllcyAqLworCQludW0gPSAoZHVrX3NtYWxsX3VpbnRf dCkgZHVrX2JkX2RlY29kZV92YXJ1aW50KGJkKTsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImJ1 aWx0LWluIG9iamVjdCAlbGQsICVsZCBmdW5jdGlvbiB2YWx1ZWQgcHJvcGVydGllcyIsIChsb25n KSBpLCAobG9uZykgbnVtKSk7CisJCWZvciAoaiA9IDA7IGogPCBudW07IGorKykgeworCQkJZHVr X2hzdHJpbmcgKmhfa2V5OworCQkJZHVrX3NtYWxsX3VpbnRfdCBuYXRpZHg7CisJCQlkdWtfaW50 X3QgY19uYXJnczsgIC8qIG11c3QgaG9sZCBEVUtfVkFSQVJHUyAqLworCQkJZHVrX3NtYWxsX3Vp bnRfdCBjX2xlbmd0aDsKKwkJCWR1a19pbnQxNl90IG1hZ2ljOworCQkJZHVrX2NfZnVuY3Rpb24g Y19mdW5jOworCQkJZHVrX2huYXRmdW5jICpoX2Z1bmM7CisjaWYgZGVmaW5lZChEVUtfVVNFX0xJ R0hURlVOQ19CVUlMVElOUykKKwkJCWR1a19zbWFsbF9pbnRfdCBsaWdodGZ1bmNfZWxpZ2libGU7 CisjZW5kaWYKKwkJCWR1a19zbWFsbF91aW50X3QgZGVmcHJvcF9mbGFnczsKKworCQkJZHVrX19w dXNoX3N0cmlkeF9vcl9zdHJpbmcodGhyLCBiZCk7CisJCQloX2tleSA9IGR1a19rbm93bl9oc3Ry aW5nKHRociwgLTEpOworCQkJRFVLX1VOUkVGKGhfa2V5KTsKKwkJCW5hdGlkeCA9IChkdWtfc21h bGxfdWludF90KSBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoYmQpOworCisJCQljX2xlbmd0aCA9IChk dWtfc21hbGxfdWludF90KSBkdWtfYmRfZGVjb2RlKGJkLCBEVUtfX0xFTkdUSF9QUk9QX0JJVFMp OworCQkJY19uYXJncyA9IChkdWtfaW50X3QpIGR1a19iZF9kZWNvZGVfZmxhZ2dlZChiZCwgRFVL X19OQVJHU19CSVRTLCAoZHVrX3VpbnQzMl90KSBjX2xlbmd0aCAvKmRlZl92YWx1ZSovKTsKKwkJ CWlmIChjX25hcmdzID09IERVS19fTkFSR1NfVkFSQVJHU19NQVJLRVIpIHsKKwkJCQljX25hcmdz ID0gRFVLX1ZBUkFSR1M7CisJCQl9CisKKwkJCWNfZnVuYyA9IGR1a19iaV9uYXRpdmVfZnVuY3Rp b25zW25hdGlkeF07CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJidWlsdC1pbiAlbGQsIGZ1 bmN0aW9uLXZhbHVlZCBwcm9wZXJ0eSAlbGQsIGtleSAlIU8sIG5hdGlkeCAlbGQsIGxlbmd0aCAl bGQsIG5hcmdzICVsZCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcp IGosIChkdWtfaGVhcGhkciAqKSBoX2tleSwgKGxvbmcpIG5hdGlkeCwgKGxvbmcpIGNfbGVuZ3Ro LAorCQkJICAgICAgICAgICAgICAgICAgICAgKGNfbmFyZ3MgPT0gRFVLX1ZBUkFSR1MgPyAobG9u ZykgLTEgOiAobG9uZykgY19uYXJncykpKTsKKworCQkJLyogQ2FzdCBjb252ZXJ0cyBtYWdpYyB0 byAxNi1iaXQgc2lnbmVkIHZhbHVlICovCisJCQltYWdpYyA9IChkdWtfaW50MTZfdCkgZHVrX2Jk X2RlY29kZV92YXJ1aW50KGJkKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9MSUdIVEZVTkNfQlVJ TFRJTlMpCisJCQlsaWdodGZ1bmNfZWxpZ2libGUgPQorCQkJCSgoY19uYXJncyA+PSBEVUtfTEZV TkNfTkFSR1NfTUlOICYmIGNfbmFyZ3MgPD0gRFVLX0xGVU5DX05BUkdTX01BWCkgfHwgKGNfbmFy Z3MgPT0gRFVLX1ZBUkFSR1MpKSAmJgorCQkJCShjX2xlbmd0aCA8PSBEVUtfTEZVTkNfTEVOR1RI X01BWCkgJiYKKwkJCQkobWFnaWMgPj0gRFVLX0xGVU5DX01BR0lDX01JTiAmJiBtYWdpYyA8PSBE VUtfTEZVTkNfTUFHSUNfTUFYKTsKKworCQkJLyogVGhlc2UgZnVuY3Rpb25zIGhhdmUgdHJvdWJs ZSB3b3JraW5nIGFzIGxpZ2h0ZnVuY3MuCisJCQkgKiBTb21lIG9mIHRoZW0gaGF2ZSBzcGVjaWZp YyBhc3NlcnRzIGFuZCBzb21lIG1heSBoYXZlCisJCSAgICAgICAgICogYWRkaXRpb25hbCBwcm9w ZXJ0aWVzIChlLmcuICdyZXF1aXJlLmlkJyBtYXkgYmUgd3JpdHRlbikuCisJCQkgKi8KKwkJCWlm IChjX2Z1bmMgPT0gZHVrX2JpX2dsb2JhbF9vYmplY3RfZXZhbCkgeworCQkJCWxpZ2h0ZnVuY19l bGlnaWJsZSA9IDA7CisJCQl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0NPUk9VVElORV9TVVBQT1JU KQorCQkJaWYgKGNfZnVuYyA9PSBkdWtfYmlfdGhyZWFkX3lpZWxkIHx8CisJCQkgICAgY19mdW5j ID09IGR1a19iaV90aHJlYWRfcmVzdW1lKSB7CisJCQkJbGlnaHRmdW5jX2VsaWdpYmxlID0gMDsK KwkJCX0KKyNlbmRpZgorCQkJaWYgKGNfZnVuYyA9PSBkdWtfYmlfZnVuY3Rpb25fcHJvdG90eXBl X2NhbGwgfHwKKwkJCSAgICBjX2Z1bmMgPT0gZHVrX2JpX2Z1bmN0aW9uX3Byb3RvdHlwZV9hcHBs eSB8fAorCQkJICAgIGNfZnVuYyA9PSBkdWtfYmlfcmVmbGVjdF9hcHBseSB8fAorCQkJICAgIGNf ZnVuYyA9PSBkdWtfYmlfcmVmbGVjdF9jb25zdHJ1Y3QpIHsKKwkJCQlsaWdodGZ1bmNfZWxpZ2li bGUgPSAwOworCQkJfQorCisJCQlpZiAobGlnaHRmdW5jX2VsaWdpYmxlKSB7CisJCQkJZHVrX3R2 YWwgdHZfbGZ1bmM7CisJCQkJZHVrX3NtYWxsX3VpbnRfdCBsZl9uYXJncyA9IChkdWtfc21hbGxf dWludF90KSAoY19uYXJncyA9PSBEVUtfVkFSQVJHUyA/IERVS19MRlVOQ19OQVJHU19WQVJBUkdT IDogY19uYXJncyk7CisJCQkJZHVrX3NtYWxsX3VpbnRfdCBsZl9mbGFncyA9IERVS19MRlVOQ19G TEFHU19QQUNLKG1hZ2ljLCBjX2xlbmd0aCwgbGZfbmFyZ3MpOworCQkJCURVS19UVkFMX1NFVF9M SUdIVEZVTkMoJnR2X2xmdW5jLCBjX2Z1bmMsIGxmX2ZsYWdzKTsKKwkJCQlkdWtfcHVzaF90dmFs KHRociwgJnR2X2xmdW5jKTsKKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJidWlsdC1pbiBmdW5jdGlv biBlbGlnaWJsZSBhcyBsaWdodCBmdW5jdGlvbjogaT0lZCwgaj0lZCBjX2xlbmd0aD0lbGQsIGNf bmFyZ3M9JWxkLCBtYWdpYz0lbGQgLT4gJSFpVCIsIChpbnQpIGksIChpbnQpIGosIChsb25nKSBj X2xlbmd0aCwgKGxvbmcpIGNfbmFyZ3MsIChsb25nKSBtYWdpYywgZHVrX2dldF90dmFsKHRociwg LTEpKSk7CisJCQkJZ290byBsaWdodGZ1bmNfc2tpcDsKKwkJCX0KKworCQkJRFVLX0QoRFVLX0RQ UklOVCgiYnVpbHQtaW4gZnVuY3Rpb24gTk9UIEVMSUdJQkxFIGFzIGxpZ2h0IGZ1bmN0aW9uOiBp PSVkLCBqPSVkIGNfbGVuZ3RoPSVsZCwgY19uYXJncz0lbGQsIG1hZ2ljPSVsZCIsIChpbnQpIGks IChpbnQpIGosIChsb25nKSBjX2xlbmd0aCwgKGxvbmcpIGNfbmFyZ3MsIChsb25nKSBtYWdpYykp OworI2VuZGlmICAvKiBEVUtfVVNFX0xJR0hURlVOQ19CVUlMVElOUyAqLworCisJCQkvKiBbIChi dWlsdGluIG9iamVjdHMpIG5hbWUgXSAqLworCisJCQlkdWtfcHVzaF9jX2Z1bmN0aW9uX2J1aWx0 aW5fbm9jb25zdHJ1Y3QodGhyLCBjX2Z1bmMsIGNfbmFyZ3MpOworCQkJaF9mdW5jID0gZHVrX2tu b3duX2huYXRmdW5jKHRociwgLTEpOworCQkJRFVLX1VOUkVGKGhfZnVuYyk7CisKKwkJCS8qIFhY WDogYWRkIGludG8gaW5pdCBkYXRhPyAqLworCisJCQkvKiBTcGVjaWFsIGNhbGwgaGFuZGxpbmcs IG5vdCBkZXNjcmliZWQgaW4gaW5pdCBkYXRhLiAqLworCQkJaWYgKGNfZnVuYyA9PSBkdWtfYmlf Z2xvYmFsX29iamVjdF9ldmFsIHx8CisJCQkgICAgY19mdW5jID09IGR1a19iaV9mdW5jdGlvbl9w cm90b3R5cGVfY2FsbCB8fAorCQkJICAgIGNfZnVuYyA9PSBkdWtfYmlfZnVuY3Rpb25fcHJvdG90 eXBlX2FwcGx5IHx8CisJCQkgICAgY19mdW5jID09IGR1a19iaV9yZWZsZWN0X2FwcGx5IHx8CisJ CQkgICAgY19mdW5jID09IGR1a19iaV9yZWZsZWN0X2NvbnN0cnVjdCkgeworCQkJCURVS19IT0JK RUNUX1NFVF9TUEVDSUFMX0NBTEwoKGR1a19ob2JqZWN0ICopIGhfZnVuYyk7CisJCQl9CisKKwkJ CS8qIEN1cnJlbnRseSBhbGwgYnVpbHQtaW4gbmF0aXZlIGZ1bmN0aW9ucyBhcmUgc3RyaWN0Lgor CQkJICogVGhpcyBkb2Vzbid0IG1hdHRlciBmb3IgbWFueSBmdW5jdGlvbnMsIGJ1dCBlLmcuCisJ CQkgKiBTdHJpbmcucHJvdG90eXBlLmNoYXJBdCAoYW5kIG90aGVyIHN0cmluZyBmdW5jdGlvbnMp CisJCQkgKiByZWx5IG9uIGJlaW5nIHN0cmljdCBzbyB0aGF0IHRoZWlyICd0aGlzJyBiaW5kaW5n IGlzCisJCQkgKiBub3QgYXV0b21hdGljYWxseSBjb2VyY2VkLgorCQkJICovCisJCQlEVUtfSE9C SkVDVF9TRVRfU1RSSUNUKChkdWtfaG9iamVjdCAqKSBoX2Z1bmMpOworCisJCQkvKiBObyBidWls dC1pbiBmdW5jdGlvbnMgYXJlIGNvbnN0cnVjdGFibGUgZXhjZXB0IHRoZSB0b3AKKwkJCSAqIGxl dmVsIG9uZXMgKE51bWJlciwgZXRjKS4KKwkJCSAqLworCQkJRFVLX0FTU0VSVCghRFVLX0hPQkpF Q1RfSEFTX0NPTlNUUlVDVEFCTEUoKGR1a19ob2JqZWN0ICopIGhfZnVuYykpOworCisJCQkvKiBY WFg6IGFueSB3YXkgdG8gYXZvaWQgZGVjb2RpbmcgbWFnaWMgYml0OyB0aGVyZSBhcmUgcXVpdGUK KwkJCSAqIG1hbnkgZnVuY3Rpb24gcHJvcGVydGllcyBhbmQgcmVsYXRpdmVseSBmZXcgd2l0aCBt YWdpYyB2YWx1ZXMuCisJCQkgKi8KKwkJCWhfZnVuYy0+bWFnaWMgPSBtYWdpYzsKKworCQkJLyog WyAoYnVpbHRpbiBvYmplY3RzKSBuYW1lIGZ1bmMgXSAqLworCisJCQlkdWtfcHVzaF91aW50KHRo ciwgY19sZW5ndGgpOworCQkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVL X1NUUklEWF9MRU5HVEgsIERVS19QUk9QREVTQ19GTEFHU19DKTsKKworCQkJZHVrX2R1cF9tMih0 aHIpOworCQkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9O QU1FLCBEVUtfUFJPUERFU0NfRkxBR1NfQyk7CisKKwkJCS8qIFhYWDogb3RoZXIgcHJvcGVydGll cyBvZiBmdW5jdGlvbiBpbnN0YW5jZXM7ICdhcmd1bWVudHMnLCAnY2FsbGVyJy4gKi8KKworCQkJ RFVLX0REKERVS19ERFBSSU5UKCJidWlsdC1pbiBvYmplY3QgJWxkLCBmdW5jdGlvbiBwcm9wZXJ0 eSAlbGQgLT4gJSFUIiwKKwkJCSAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGxvbmcpIGos IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCQkJLyogWyAoYnVpbHRp biBvYmplY3RzKSBuYW1lIGZ1bmMgXSAqLworCisJCQkvKgorCQkJICogIFRoZSBkZWZhdWx0IHBy b3BlcnR5IGF0dHJpYnV0ZXMgYXJlIGNvcnJlY3QgZm9yIGFsbAorCQkJICogIGZ1bmN0aW9uIHZh bHVlZCBwcm9wZXJ0aWVzIG9mIGJ1aWx0LWluIG9iamVjdHMgbm93LgorCQkJICovCisKKyNpZiBk ZWZpbmVkKERVS19VU0VfTElHSFRGVU5DX0JVSUxUSU5TKQorCQkgbGlnaHRmdW5jX3NraXA6Cisj ZW5kaWYKKworCQkJZGVmcHJvcF9mbGFncyA9IChkdWtfc21hbGxfdWludF90KSBkdWtfYmRfZGVj b2RlX2ZsYWdnZWQoYmQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfX1BST1BfRkxBR1NfQklUUywKKwkJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWludDMy X3QpIERVS19QUk9QREVTQ19GTEFHU19XQyk7CisJCQlkZWZwcm9wX2ZsYWdzIHw9IERVS19ERUZQ Uk9QX0ZPUkNFIHwKKwkJCSAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfSEFWRV9WQUxVRSB8 CisJCQkgICAgICAgICAgICAgICAgIERVS19ERUZQUk9QX0hBVkVfV1JJVEFCTEUgfAorCQkJICAg ICAgICAgICAgICAgICBEVUtfREVGUFJPUF9IQVZFX0VOVU1FUkFCTEUgfAorCQkJICAgICAgICAg ICAgICAgICBEVUtfREVGUFJPUF9IQVZFX0NPTkZJR1VSQUJMRTsKKwkJCURVS19BU1NFUlQoRFVL X1BST1BERVNDX0ZMQUdfV1JJVEFCTEUgPT0gRFVLX0RFRlBST1BfV1JJVEFCTEUpOworCQkJRFVL X0FTU0VSVChEVUtfUFJPUERFU0NfRkxBR19FTlVNRVJBQkxFID09IERVS19ERUZQUk9QX0VOVU1F UkFCTEUpOworCQkJRFVLX0FTU0VSVChEVUtfUFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEUgPT0g RFVLX0RFRlBST1BfQ09ORklHVVJBQkxFKTsKKworCQkJZHVrX2RlZl9wcm9wKHRociwgKGR1a19p ZHhfdCkgaSwgZGVmcHJvcF9mbGFncyk7CisKKwkJCS8qIFsgKGJ1aWx0aW4gb2JqZWN0cykgXSAq LworCQl9CisJfQorCisJLyoKKwkgKiAgU3BlY2lhbCBwb3N0LXR3ZWFrcywgZm9yIGNhc2VzIG5v dCBjb3ZlcmVkIGJ5IHRoZSBpbml0IGRhdGEgZm9ybWF0LgorCSAqCisJICogIC0gU2V0IERhdGUu cHJvdG90eXBlLnRvR01UU3RyaW5nIHRvIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLgorCSAq ICAgIHRvR01UU3RyaW5nIGlzIHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgRnVuY3Rpb24gb2Jq ZWN0IGFzCisJICogICAgdG9VVENTdHJpbmcgaW4gRTUgU2VjdGlvbiBCLjIuNi4gIE5vdGUgdGhh dCB3aGlsZSBTbWpzIHJlc3BlY3RzCisJICogICAgdGhpcywgVjggZG9lcyBub3QgKHRoZSBGdW5j dGlvbiBvYmplY3RzIGFyZSBkaXN0aW5jdCkuCisJICoKKwkgKiAgLSBNYWtlIERvdWJsZUVycm9y IG5vbi1leHRlbnNpYmxlLgorCSAqCisJICogIC0gQWRkIGluZm8gYWJvdXQgbW9zdCBpbXBvcnRh bnQgZWZmZWN0aXZlIGNvbXBpbGUgb3B0aW9ucyB0byBEdWt0YXBlLgorCSAqCisJICogIC0gUG9z c2libHkgcmVtb3ZlIHNvbWUgcHJvcGVydGllcyAodmFsdWVzIG9yIG1ldGhvZHMpIHdoaWNoIGFy ZSBub3QKKwkgKiAgICBkZXNpcmFibGUgd2l0aCBjdXJyZW50IGZlYXR1cmUgb3B0aW9ucyBidXQg YXJlIG5vdCBjdXJyZW50bHkKKwkgKiAgICBjb25kaXRpb25hbCBpbiBpbml0IGRhdGEuCisJICov CisKKyNpZiBkZWZpbmVkKERVS19VU0VfREFURV9CVUlMVElOKQorCWR1a19nZXRfcHJvcF9zdHJp ZHhfc2hvcnQodGhyLCBEVUtfQklEWF9EQVRFX1BST1RPVFlQRSwgRFVLX1NUUklEWF9UT19VVENf U1RSSU5HKTsKKwlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIERVS19CSURYX0RBVEVf UFJPVE9UWVBFLCBEVUtfU1RSSURYX1RPX0dNVF9TVFJJTkcsIERVS19QUk9QREVTQ19GTEFHU19X Qyk7CisjZW5kaWYKKworCWggPSBkdWtfa25vd25faG9iamVjdCh0aHIsIERVS19CSURYX0RPVUJM RV9FUlJPUik7CisJRFVLX0hPQkpFQ1RfQ0xFQVJfRVhURU5TSUJMRShoKTsKKworI2lmICFkZWZp bmVkKERVS19VU0VfRVM2X09CSkVDVF9QUk9UT19QUk9QRVJUWSkKKwlEVUtfREQoRFVLX0REUFJJ TlQoImRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyBidWlsdC1pbiB3aGljaCBpcyBu b3QgZW5hYmxlZCBpbiBmZWF0dXJlcyIpKTsKKwkodm9pZCkgZHVrX2hvYmplY3RfZGVscHJvcF9y YXcodGhyLCB0aHItPmJ1aWx0aW5zW0RVS19CSURYX09CSkVDVF9QUk9UT1RZUEVdLCBEVUtfSFRI UkVBRF9TVFJJTkdfX19QUk9UT19fKHRociksIERVS19ERUxQUk9QX0ZMQUdfVEhST1cpOworI2Vu ZGlmCisKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0VTNl9PQkpFQ1RfU0VUUFJPVE9UWVBFT0YpCisJ RFVLX0REKERVS19ERFBSSU5UKCJkZWxldGUgT2JqZWN0LnNldFByb3RvdHlwZU9mIGJ1aWx0LWlu IHdoaWNoIGlzIG5vdCBlbmFibGVkIGluIGZlYXR1cmVzIikpOworCSh2b2lkKSBkdWtfaG9iamVj dF9kZWxwcm9wX3Jhdyh0aHIsIHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfT0JKRUNUX0NPTlNUUlVD VE9SXSwgRFVLX0hUSFJFQURfU1RSSU5HX1NFVF9QUk9UT1RZUEVfT0YodGhyKSwgRFVLX0RFTFBS T1BfRkxBR19USFJPVyk7CisjZW5kaWYKKworCS8qIFhYWDogcmVsb2NhdGUgKi8KKwlkdWtfcHVz aF9zdHJpbmcodGhyLAorCQkJLyogRW5kaWFubmVzcyBpbmRpY2F0b3IgKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfSU5URUdFUl9MRSkKKwkgICAgICAgICAgICAgICAgImwiCisjZWxpZiBkZWZpbmVk KERVS19VU0VfSU5URUdFUl9CRSkKKwkgICAgICAgICAgICAgICAgImIiCisjZWxpZiBkZWZpbmVk KERVS19VU0VfSU5URUdFUl9NRSkgIC8qIGludGVnZXIgbWl4ZWQgZW5kaWFuIG5vdCByZWFsbHkg dXNlZCBub3cgKi8KKwkgICAgICAgICAgICAgICAgIm0iCisjZWxzZQorCSAgICAgICAgICAgICAg ICAiPyIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTEUpCisJICAgICAgICAg ICAgICAgICJsIgorI2VsaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9CRSkKKwkgICAgICAgICAg ICAgICAgImIiCisjZWxpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX01FKQorCSAgICAgICAgICAg ICAgICAibSIKKyNlbHNlCisJICAgICAgICAgICAgICAgICI/IgorI2VuZGlmCisJICAgICAgICAg ICAgICAgICIgIgorCQkJLyogUGFja2VkIG9yIHVucGFja2VkIHR2YWwgKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfUEFDS0VEX1RWQUwpCisJICAgICAgICAgICAgICAgICJwIgorI2Vsc2UKKwkgICAg ICAgICAgICAgICAgInUiCisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwkJ CSJmIgorI2VuZGlmCisJCQkiICIKKwkJCS8qIExvdyBtZW1vcnkvcGVyZm9ybWFuY2Ugb3B0aW9u cyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJUQUJfUFRSQ09NUCkKKwkJCSJzIgorI2VuZGlm CisjaWYgIWRlZmluZWQoRFVLX1VTRV9IRUFQUFRSMTYpICYmICFkZWZpbmVkKERVS19EQVRBUFRS MTYpICYmICFkZWZpbmVkKERVS19GVU5DUFRSMTYpCisJCQkibiIKKyNlbmRpZgorI2lmIGRlZmlu ZWQoRFVLX1VTRV9IRUFQUFRSMTYpCisJCQkiaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VT RV9EQVRBUFRSMTYpCisJCQkiZCIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9GVU5DUFRS MTYpCisJCQkiZiIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZDT1VOVDE2KQorCQkJ IlIiCisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSSEFTSDE2KQorCQkJIkgiCisjZW5k aWYKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSTEVOMTYpCisJCQkiUyIKKyNlbmRpZgorI2lmIGRl ZmluZWQoRFVLX1VTRV9CVUZMRU4xNikKKwkJCSJCIgorI2VuZGlmCisjaWYgZGVmaW5lZChEVUtf VVNFX09CSlNJWkVTMTYpCisJCQkiTyIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9MSUdI VEZVTkNfQlVJTFRJTlMpCisJCQkiTCIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9ST01f U1RSSU5HUykgfHwgZGVmaW5lZChEVUtfVVNFX1JPTV9PQkpFQ1RTKQorCQkJLyogWFhYOiBUaGlz IHdvbid0IGJlIHNob3duIGluIHByYWN0aWNlIG5vdworCQkJICogYmVjYXVzZSB0aGlzIGNvZGUg aXMgbm90IHJ1biB3aGVuIGJ1aWx0aW5zCisJCQkgKiBhcmUgaW4gUk9NLgorCQkJICovCisJCQki WiIKKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9MSVRDQUNIRV9TSVpFKQorCQkJImwiCisj ZW5kaWYKKwkgICAgICAgICAgICAgICAgIiAiCisJCQkvKiBPYmplY3QgcHJvcGVydHkgYWxsb2Nh dGlvbiBsYXlvdXQgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfSE9CSkVDVF9MQVlPVVRfMSkKKwkJ CSJwMSIKKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9IT0JKRUNUX0xBWU9VVF8yKQorCQkJInAyIgor I2VsaWYgZGVmaW5lZChEVUtfVVNFX0hPQkpFQ1RfTEFZT1VUXzMpCisJCQkicDMiCisjZWxzZQor CQkJInA/IgorI2VuZGlmCisJCQkiICIKKwkJCS8qIEFsaWdubWVudCBndWFyYW50ZWUgKi8KKyNp ZiAoRFVLX1VTRV9BTElHTl9CWSA9PSA0KQorCQkJImE0IgorI2VsaWYgKERVS19VU0VfQUxJR05f QlkgPT0gOCkKKwkJCSJhOCIKKyNlbGlmIChEVUtfVVNFX0FMSUdOX0JZID09IDEpCisJCQkiYTEi CisjZWxzZQorI2Vycm9yIGludmFsaWQgRFVLX1VTRV9BTElHTl9CWQorI2VuZGlmCisJCQkiICIK KwkJCS8qIEFyY2hpdGVjdHVyZSwgT1MsIGFuZCBjb21waWxlciBzdHJpbmdzICovCisJICAgICAg ICAgICAgICAgIERVS19VU0VfQVJDSF9TVFJJTkcKKwkJCSIgIgorCSAgICAgICAgICAgICAgICBE VUtfVVNFX09TX1NUUklORworCQkJIiAiCisJICAgICAgICAgICAgICAgIERVS19VU0VfQ09NUElM RVJfU1RSSU5HKTsKKwlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIERVS19CSURYX0RV S1RBUEUsIERVS19TVFJJRFhfRU5WLCBEVUtfUFJPUERFU0NfRkxBR1NfV0MpOworCisJLyoKKwkg KiAgU2luY2UgYnVpbHQtaW5zIGFyZSBub3Qgb2Z0ZW4gZXh0ZW5kZWQsIGNvbXBhY3QgdGhlbS4K KwkgKi8KKworCURVS19ERChEVUtfRERQUklOVCgiY29tcGFjdCBidWlsdC1pbnMiKSk7CisJZm9y IChpID0gMDsgaSA8IERVS19OVU1fQUxMX0JVSUxUSU5TOyBpKyspIHsKKwkJZHVrX2hvYmplY3Rf Y29tcGFjdF9wcm9wcyh0aHIsIGR1a19rbm93bl9ob2JqZWN0KHRociwgKGR1a19pZHhfdCkgaSkp OworCX0KKworCURVS19EKERVS19EUFJJTlQoIklOSVRCVUlMVElOUyBFTkQiKSk7CisKKyNpZiBk ZWZpbmVkKERVS19VU0VfREVCVUdfTEVWRUwpICYmIChEVUtfVVNFX0RFQlVHX0xFVkVMID49IDEp CisJZm9yIChpID0gMDsgaSA8IERVS19OVU1fQUxMX0JVSUxUSU5TOyBpKyspIHsKKwkJRFVLX0RE KERVS19ERFBSSU5UKCJidWlsdC1pbiBvYmplY3QgJWxkIGFmdGVyIGluaXRpYWxpemF0aW9uIGFu ZCBjb21wYWN0aW5nOiAlIUBpTyIsCisJCSAgICAgICAgICAgICAgICAgICAobG9uZykgaSwgKGR1 a19oZWFwaGRyICopIGR1a19yZXF1aXJlX2hvYmplY3QodGhyLCBpKSkpOworCX0KKyNlbmRpZgor CisJLyoKKwkgKiAgUG9wIGJ1aWx0LWlucyBmcm9tIHN0YWNrOiB0aGV5IGFyZSBub3cgSU5DUkVG J2QgYW5kCisJICogIHJlYWNoYWJsZSBmcm9tIHRoZSBidWlsdGluc1tdIGFycmF5IG9yIGluZGly ZWN0bHkKKwkgKiAgdGhyb3VnaCBidWlsdGluc1tdLgorCSAqLworCisJZHVrX3NldF90b3AodGhy LCAwKTsKKwlEVUtfQVNTRVJUX1RPUCh0aHIsIDApOworfQorI2VuZGlmICAvKiBEVUtfVVNFX1JP TV9PQkpFQ1RTICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19odGhyZWFkX2NvcHlfYnVpbHRp bl9vYmplY3RzKGR1a19odGhyZWFkICp0aHJfZnJvbSwgZHVrX2h0aHJlYWQgKnRocl90bykgewor CWR1a19zbWFsbF91aW50X3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBEVUtfTlVNX0JVSUxUSU5T OyBpKyspIHsKKwkJdGhyX3RvLT5idWlsdGluc1tpXSA9IHRocl9mcm9tLT5idWlsdGluc1tpXTsK KwkJRFVLX0hPQkpFQ1RfSU5DUkVGX0FMTE9XTlVMTCh0aHJfdG8sIHRocl90by0+YnVpbHRpbnNb aV0pOyAgLyogc2lkZSBlZmZlY3QgZnJlZSAqLworCX0KK30KKworLyogYXV0b21hdGljIHVuZGVm cyAqLworI3VuZGVmIERVS19fTEVOR1RIX1BST1BfQklUUworI3VuZGVmIERVS19fTkFSR1NfQklU UworI3VuZGVmIERVS19fTkFSR1NfVkFSQVJHU19NQVJLRVIKKyN1bmRlZiBEVUtfX1BST1BfRkxB R1NfQklUUworI3VuZGVmIERVS19fUFJPUF9UWVBFX0FDQ0VTU09SCisjdW5kZWYgRFVLX19QUk9Q X1RZUEVfQklUUworI3VuZGVmIERVS19fUFJPUF9UWVBFX0JPT0xFQU5fRkFMU0UKKyN1bmRlZiBE VUtfX1BST1BfVFlQRV9CT09MRUFOX1RSVUUKKyN1bmRlZiBEVUtfX1BST1BfVFlQRV9CVUlMVElO CisjdW5kZWYgRFVLX19QUk9QX1RZUEVfRE9VQkxFCisjdW5kZWYgRFVLX19QUk9QX1RZUEVfU1RS SURYCisjdW5kZWYgRFVLX19QUk9QX1RZUEVfU1RSSU5HCisjdW5kZWYgRFVLX19QUk9QX1RZUEVf VU5ERUZJTkVECisvKgorICogIFRocmVhZCBzdXBwb3J0LgorICovCisKKy8qICNpbmNsdWRlIGR1 a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQg ZHVrX2h0aHJlYWRfdGVybWluYXRlKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNTRVJUKHRo ciAhPSBOVUxMKTsKKworCXdoaWxlICh0aHItPmNhbGxzdGFja19jdXJyICE9IE5VTEwpIHsKKwkJ ZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl91bndpbmRfbm9yeih0aHIpOworCX0KKworCXRoci0+dmFs c3RhY2tfYm90dG9tID0gdGhyLT52YWxzdGFjazsKKwlkdWtfc2V0X3RvcCh0aHIsIDApOyAgLyog dW53aW5kcyB2YWxzdGFjaywgdXBkYXRpbmcgcmVmY291bnRzICovCisKKwl0aHItPnN0YXRlID0g RFVLX0hUSFJFQURfU1RBVEVfVEVSTUlOQVRFRDsKKworCS8qIEhlcmUgd2UgY291bGQgcmVtb3Zl IHJlZmVyZW5jZXMgdG8gYnVpbHQtaW5zLCBidXQgaXQgbWF5IG5vdCBiZQorCSAqIHdvcnRoIHRo ZSBlZmZvcnQgYmVjYXVzZSBidWlsdC1pbnMgYXJlIHF1aXRlIGxpa2VseSB0byBiZSBzaGFyZWQK KwkgKiB3aXRoIGFub3RoZXIgKHVudGVybWluYXRlZCkgdGhyZWFkLCBhbmQgdGVybWluYXRlZCB0 aHJlYWRzIGFyZSBhbHNvCisJICogdXN1YWxseSBnYXJiYWdlIGNvbGxlY3RlZCBxdWl0ZSBxdWlj a2x5LgorCSAqCisJICogV2UgY291bGQgYWxzbyBzaHJpbmsgdGhlIHZhbHVlIHN0YWNrIGhlcmUs IGJ1dCB0aGF0IGFsc28gbWF5IG5vdAorCSAqIGJlIHdvcnRoIHRoZSBlZmZvcnQgZm9yIHRoZSBz YW1lIHJlYXNvbi4KKwkgKi8KKworCURVS19SRUZaRVJPX0NIRUNLX1NMT1codGhyKTsKK30KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorRFVLX0lOVEVSTkFMIGR1a191 aW50X2Zhc3QzMl90IGR1a19odGhyZWFkX2dldF9hY3RfY3Vycl9wYyhkdWtfaHRocmVhZCAqdGhy LCBkdWtfYWN0aXZhdGlvbiAqYWN0KSB7CisJZHVrX2luc3RyX3QgKmJjb2RlOworCisJRFVLX0FT U0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJRFVLX1VOUkVG KHRocik7CisKKwkvKiBYWFg6IHN0b3JlICdiY29kZScgcG9pbnRlciB0byBhY3RpdmF0aW9uIGZv ciBmYXN0ZXIgbG9va3VwPyAqLworCWlmIChhY3QtPmZ1bmMgJiYgRFVLX0hPQkpFQ1RfSVNfQ09N UEZVTkMoYWN0LT5mdW5jKSkgeworCQliY29kZSA9IERVS19IQ09NUEZVTkNfR0VUX0NPREVfQkFT RSh0aHItPmhlYXAsIChkdWtfaGNvbXBmdW5jICopIChhY3QtPmZ1bmMpKTsKKwkJcmV0dXJuIChk dWtfdWludF9mYXN0MzJfdCkgKGFjdC0+Y3Vycl9wYyAtIGJjb2RlKTsKKwl9CisJcmV0dXJuIDA7 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCAqLworCitEVUtfSU5URVJO QUwgZHVrX3VpbnRfZmFzdDMyX3QgZHVrX2h0aHJlYWRfZ2V0X2FjdF9wcmV2X3BjKGR1a19odGhy ZWFkICp0aHIsIGR1a19hY3RpdmF0aW9uICphY3QpIHsKKwlkdWtfaW5zdHJfdCAqYmNvZGU7CisJ ZHVrX3VpbnRfZmFzdDMyX3QgcmV0OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVL X0FTU0VSVChhY3QgIT0gTlVMTCk7CisJRFVLX1VOUkVGKHRocik7CisKKwlpZiAoYWN0LT5mdW5j ICYmIERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKGFjdC0+ZnVuYykpIHsKKwkJYmNvZGUgPSBEVUtf SENPTVBGVU5DX0dFVF9DT0RFX0JBU0UodGhyLT5oZWFwLCAoZHVrX2hjb21wZnVuYyAqKSAoYWN0 LT5mdW5jKSk7CisJCXJldCA9IChkdWtfdWludF9mYXN0MzJfdCkgKGFjdC0+Y3Vycl9wYyAtIGJj b2RlKTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCXJldC0tOworCQl9CisJCXJldHVybiByZXQ7CisJ fQorCXJldHVybiAwOworfQorCisvKiBXcml0ZSBieXRlY29kZSBleGVjdXRvcidzIGN1cnJfcGMg YmFjayB0byB0b3Btb3N0IGFjdGl2YXRpb24gKGlmIGFueSkuICovCitEVUtfSU5URVJOQUwgdm9p ZCBkdWtfaHRocmVhZF9zeW5jX2N1cnJwYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2FjdGl2 YXRpb24gKmFjdDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJaWYgKHRoci0+cHRy X2N1cnJfcGMgIT0gTlVMTCkgeworCQkvKiBwdHJfY3Vycl9wYyAhPSBOVUxMIG9ubHkgd2hlbiBi eXRlY29kZSBleGVjdXRvciBpcyBhY3RpdmUuICovCisJCURVS19BU1NFUlQodGhyLT5jYWxsc3Rh Y2tfdG9wID4gMCk7CisJCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciAhPSBOVUxMKTsK KwkJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwkJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7 CisJCWFjdC0+Y3Vycl9wYyA9ICp0aHItPnB0cl9jdXJyX3BjOworCX0KK30KKworRFVLX0lOVEVS TkFMIHZvaWQgZHVrX2h0aHJlYWRfc3luY19hbmRfbnVsbF9jdXJycGMoZHVrX2h0aHJlYWQgKnRo cikgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsK KworCWlmICh0aHItPnB0cl9jdXJyX3BjICE9IE5VTEwpIHsKKwkJLyogcHRyX2N1cnJfcGMgIT0g TlVMTCBvbmx5IHdoZW4gYnl0ZWNvZGUgZXhlY3V0b3IgaXMgYWN0aXZlLiAqLworCQlEVUtfQVNT RVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+IDApOworCQlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNr X2N1cnIgIT0gTlVMTCk7CisJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJCURVS19BU1NF UlQoYWN0ICE9IE5VTEwpOworCQlhY3QtPmN1cnJfcGMgPSAqdGhyLT5wdHJfY3Vycl9wYzsKKwkJ dGhyLT5wdHJfY3Vycl9wYyA9IE5VTEw7CisJfQorfQorLyoKKyAqICBUaHJlYWQgc3RhY2sgKG1h aW5seSBjYWxsIHN0YWNrKSBwcmltaXRpdmVzOiBhbGxvY2F0aW9uIG9mIGFjdGl2YXRpb25zLAor ICogIHVud2luZGluZyBjYXRjaGVycyBhbmQgYWN0aXZhdGlvbnMsIGV0Yy4KKyAqCisgKiAgVmFs dWUgc3RhY2sgaGFuZGxpbmcgaXMgYSBwYXJ0IG9mIHRoZSBBUEkgaW1wbGVtZW50YXRpb24uCisg Ki8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLwor CisvKiBVbndpbmQgdGhlIHRvcG1vc3QgY2F0Y2hlciBvZiB0aGUgY3VycmVudCBhY3RpdmF0aW9u IChjYWxsZXIgbXVzdCBjaGVjayB0aGF0CisgKiBib3RoIGV4aXN0KSB3aXRob3V0IHNpZGUgZWZm ZWN0cy4KKyAqLworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2h0aHJlYWRfY2F0Y2hlcl91bndpbmRf bm9yeihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqYWN0KSB7CisJZHVrX2NhdGNo ZXIgKmNhdDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoYWN0ICE9 IE5VTEwpOworCURVS19BU1NFUlQoYWN0LT5jYXQgIT0gTlVMTCk7ICAvKiBjYWxsZXIgbXVzdCBj aGVjayAqLworCWNhdCA9IGFjdC0+Y2F0OworCURVS19BU1NFUlQoY2F0ICE9IE5VTEwpOworCisJ RFVLX0RERChEVUtfREREUFJJTlQoInVud2luZGluZyBjYXRjaCBzdGFjayBlbnRyeSAlcCAobGV4 ZW52IGNoZWNrIGlzIGRvbmUpIiwgKHZvaWQgKikgY2F0KSk7CisKKwlpZiAoRFVLX0NBVF9IQVNf TEVYRU5WX0FDVElWRShjYXQpKSB7CisJCWR1a19ob2JqZWN0ICplbnY7CisKKwkJZW52ID0gYWN0 LT5sZXhfZW52OyAgICAgICAgICAgICAvKiBjdXJyZW50IGxleF9lbnYgb2YgdGhlIGFjdGl2YXRp b24gKGNyZWF0ZWQgZm9yIGNhdGNoZXIpICovCisJCURVS19BU1NFUlQoZW52ICE9IE5VTEwpOyAg ICAgICAgLyogbXVzdCBiZSwgc2luY2UgZW52IHdhcyBjcmVhdGVkIHdoZW4gY2F0Y2hlciB3YXMg Y3JlYXRlZCAqLworCQlhY3QtPmxleF9lbnYgPSBEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRo ci0+aGVhcCwgZW52KTsgIC8qIHByb3RvdHlwZSBpcyBsZXhfZW52IGJlZm9yZSBjYXRjaGVyIGNy ZWF0ZWQgKi8KKwkJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgYWN0LT5sZXhfZW52KTsKKwkJRFVL X0hPQkpFQ1RfREVDUkVGX05PUloodGhyLCBlbnYpOworCisJCS8qIFRoZXJlIGlzIG5vIG5lZWQg dG8gZGVjcmVmIGFueXRoaW5nIGVsc2UgdGhhbiAnZW52JzogaWYgJ2VudicKKwkJICogYmVjb21l cyB1bnJlYWNoYWJsZSwgcmVmemVybyB3aWxsIGhhbmRsZSBkZWNyZWYnaW5nIGl0cyBwcm90b3R5 cGUuCisJCSAqLworCX0KKworCWFjdC0+Y2F0ID0gY2F0LT5wYXJlbnQ7CisJZHVrX2h0aHJlYWRf Y2F0Y2hlcl9mcmVlKHRociwgY2F0KTsKK30KKworLyogU2FtZSBhcyBhYm92ZSwgYnV0IGNhbGxl ciBpcyBjZXJ0YWluIG5vIGNhdGNoZXItcmVsYXRlZCBsZXhlbnYgbWF5IGV4aXN0LiAqLworRFVL X0lOVEVSTkFMIHZvaWQgZHVrX2h0aHJlYWRfY2F0Y2hlcl91bndpbmRfbm9sZXhlbnZfbm9yeihk dWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqYWN0KSB7CisJZHVrX2NhdGNoZXIgKmNh dDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwp OworCURVS19BU1NFUlQoYWN0LT5jYXQgIT0gTlVMTCk7ICAvKiBjYWxsZXIgbXVzdCBjaGVjayAq LworCWNhdCA9IGFjdC0+Y2F0OworCURVS19BU1NFUlQoY2F0ICE9IE5VTEwpOworCisJRFVLX0RE RChEVUtfREREUFJJTlQoInVud2luZGluZyBjYXRjaCBzdGFjayBlbnRyeSAlcCAobGV4ZW52IGNo ZWNrIGlzIG5vdCBkb25lKSIsICh2b2lkICopIGNhdCkpOworCisJRFVLX0FTU0VSVCghRFVLX0NB VF9IQVNfTEVYRU5WX0FDVElWRShjYXQpKTsKKworCWFjdC0+Y2F0ID0gY2F0LT5wYXJlbnQ7CisJ ZHVrX2h0aHJlYWRfY2F0Y2hlcl9mcmVlKHRociwgY2F0KTsKK30KKworRFVLX0xPQ0FMCisjaWYg ZGVmaW5lZChEVUtfVVNFX0NBQ0hFX0NBVENIRVIpCitEVUtfTk9JTkxJTkUKKyNlbmRpZgorZHVr X2NhdGNoZXIgKmR1a19faHRocmVhZF9jYXRjaGVyX2FsbG9jX3Nsb3coZHVrX2h0aHJlYWQgKnRo cikgeworCWR1a19jYXRjaGVyICpjYXQ7CisKKwljYXQgPSAoZHVrX2NhdGNoZXIgKikgRFVLX0FM TE9DX0NIRUNLRUQodGhyLCBzaXplb2YoZHVrX2NhdGNoZXIpKTsKKwlEVUtfQVNTRVJUKGNhdCAh PSBOVUxMKTsKKwlyZXR1cm4gY2F0OworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0NBQ0hFX0NB VENIRVIpCitEVUtfSU5URVJOQUwgRFVLX0lOTElORSBkdWtfY2F0Y2hlciAqZHVrX2h0aHJlYWRf Y2F0Y2hlcl9hbGxvYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2NhdGNoZXIgKmNhdDsKKwor CURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJY2F0ID0gdGhyLT5oZWFwLT5jYXRjaGVyX2Zy ZWU7CisJaWYgKERVS19MSUtFTFkoY2F0ICE9IE5VTEwpKSB7CisJCXRoci0+aGVhcC0+Y2F0Y2hl cl9mcmVlID0gY2F0LT5wYXJlbnQ7CisJCXJldHVybiBjYXQ7CisJfQorCisJcmV0dXJuIGR1a19f aHRocmVhZF9jYXRjaGVyX2FsbG9jX3Nsb3codGhyKTsKK30KKyNlbHNlICAvKiBEVUtfVVNFX0NB Q0hFX0NBVENIRVIgKi8KK0RVS19JTlRFUk5BTCBkdWtfY2F0Y2hlciAqZHVrX2h0aHJlYWRfY2F0 Y2hlcl9hbGxvYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJcmV0dXJuIGR1a19faHRocmVhZF9jYXRj aGVyX2FsbG9jX3Nsb3codGhyKTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9DQUNIRV9DQVRDSEVS ICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19odGhyZWFkX2NhdGNoZXJfZnJlZShkdWtfaHRo cmVhZCAqdGhyLCBkdWtfY2F0Y2hlciAqY2F0KSB7CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVChjYXQgIT0gTlVMTCk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQ0FDSEVf Q0FUQ0hFUikKKwkvKiBVbmNvbmRpdGlvbmFsIGNhY2hpbmcgZm9yIG5vdzsgZnJlZWQgaW4gbWFy ay1hbmQtc3dlZXAuICovCisJY2F0LT5wYXJlbnQgPSB0aHItPmhlYXAtPmNhdGNoZXJfZnJlZTsK Kwl0aHItPmhlYXAtPmNhdGNoZXJfZnJlZSA9IGNhdDsKKyNlbHNlCisJRFVLX0ZSRUVfQ0hFQ0tF RCh0aHIsICh2b2lkICopIGNhdCk7CisjZW5kaWYKK30KKworRFVLX0xPQ0FMCisjaWYgZGVmaW5l ZChEVUtfVVNFX0NBQ0hFX0FDVElWQVRJT04pCitEVUtfTk9JTkxJTkUKKyNlbmRpZgorZHVrX2Fj dGl2YXRpb24gKmR1a19faHRocmVhZF9hY3RpdmF0aW9uX2FsbG9jX3Nsb3coZHVrX2h0aHJlYWQg KnRocikgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisKKwlhY3QgPSAoZHVrX2FjdGl2YXRpb24g KikgRFVLX0FMTE9DX0NIRUNLRUQodGhyLCBzaXplb2YoZHVrX2FjdGl2YXRpb24pKTsKKwlEVUtf QVNTRVJUKGFjdCAhPSBOVUxMKTsKKwlyZXR1cm4gYWN0OworfQorCisjaWYgZGVmaW5lZChEVUtf VVNFX0NBQ0hFX0FDVElWQVRJT04pCitEVUtfSU5URVJOQUwgRFVLX0lOTElORSBkdWtfYWN0aXZh dGlvbiAqZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl9hbGxvYyhkdWtfaHRocmVhZCAqdGhyKSB7CisJ ZHVrX2FjdGl2YXRpb24gKmFjdDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJYWN0 ID0gdGhyLT5oZWFwLT5hY3RpdmF0aW9uX2ZyZWU7CisJaWYgKERVS19MSUtFTFkoYWN0ICE9IE5V TEwpKSB7CisJCXRoci0+aGVhcC0+YWN0aXZhdGlvbl9mcmVlID0gYWN0LT5wYXJlbnQ7CisJCXJl dHVybiBhY3Q7CisJfQorCisJcmV0dXJuIGR1a19faHRocmVhZF9hY3RpdmF0aW9uX2FsbG9jX3Ns b3codGhyKTsKK30KKyNlbHNlICAvKiBEVUtfVVNFX0NBQ0hFX0FDVElWQVRJT04gKi8KK0RVS19J TlRFUk5BTCBkdWtfYWN0aXZhdGlvbiAqZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl9hbGxvYyhkdWtf aHRocmVhZCAqdGhyKSB7CisJcmV0dXJuIGR1a19faHRocmVhZF9hY3RpdmF0aW9uX2FsbG9jX3Ns b3codGhyKTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9DQUNIRV9BQ1RJVkFUSU9OICovCisKKwor RFVLX0lOVEVSTkFMIHZvaWQgZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl9mcmVlKGR1a19odGhyZWFk ICp0aHIsIGR1a19hY3RpdmF0aW9uICphY3QpIHsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsK KwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9DQUNIRV9B Q1RJVkFUSU9OKQorCS8qIFVuY29uZGl0aW9uYWwgY2FjaGluZyBmb3Igbm93OyBmcmVlZCBpbiBt YXJrLWFuZC1zd2VlcC4gKi8KKwlhY3QtPnBhcmVudCA9IHRoci0+aGVhcC0+YWN0aXZhdGlvbl9m cmVlOworCXRoci0+aGVhcC0+YWN0aXZhdGlvbl9mcmVlID0gYWN0OworI2Vsc2UKKwlEVUtfRlJF RV9DSEVDS0VEKHRociwgKHZvaWQgKikgYWN0KTsKKyNlbmRpZgorfQorCisvKiBJbnRlcm5hbCBo ZWxwZXI6IHByb2Nlc3MgdGhlIHVud2luZCBmb3IgdGhlIHRvcG1vc3QgYWN0aXZhdGlvbiBvZiBh IHRocmVhZCwKKyAqIGJ1dCBsZWF2ZSB0aGUgZHVrX2FjdGl2YXRpb24gaW4gcGxhY2UgZm9yIHBv c3NpYmxlIHRhaWxjYWxsIHJldXNlLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FjdGl2YXRp b25fdW53aW5kX25vZnJlZV9ub3J6KGR1a19odGhyZWFkICp0aHIpIHsKKyNpZiBkZWZpbmVkKERV S19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlkdWtfaGVhcCAqaGVhcDsKKyNlbmRpZgorCWR1a19h Y3RpdmF0aW9uICphY3Q7CisJZHVrX2hvYmplY3QgKmZ1bmM7CisJZHVrX2hvYmplY3QgKnRtcDsK KworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tf Y3VyciAhPSBOVUxMKTsgIC8qIGNhbGxlciBtdXN0IGNoZWNrICovCisJRFVLX0FTU0VSVCh0aHIt PmNhbGxzdGFja190b3AgPiAwKTsKKwlhY3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCURVS19B U1NFUlQoYWN0ICE9IE5VTEwpOworCS8qIFdpdGggbGlnaHRmdW5jcywgYWN0ICdmdW5jJyBtYXkg YmUgTlVMTC4gKi8KKworCS8qIFdpdGggZHVrX2FjdGl2YXRpb24gcmVjb3JkcyBhbGxvY2F0ZWQg c2VwYXJhdGVseSwgJ2FjdCcgaXMgYSBzdGFibGUKKwkgKiBwb2ludGVyIGFuZCBub3QgYWZmZWN0 ZWQgYnkgc2lkZSBlZmZlY3RzLgorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX05PTlNURF9G VU5DX0NBTExFUl9QUk9QRVJUWSkKKwkvKgorCSAqICBSZXN0b3JlICdjYWxsZXInIHByb3BlcnR5 IGZvciBub24tc3RyaWN0IGNhbGxlZSBmdW5jdGlvbnMuCisJICovCisKKwlmdW5jID0gRFVLX0FD VF9HRVRfRlVOQyhhY3QpOworCWlmIChmdW5jICE9IE5VTEwgJiYgIURVS19IT0JKRUNUX0hBU19T VFJJQ1QoZnVuYykpIHsKKwkJZHVrX3R2YWwgKnR2X2NhbGxlcjsKKwkJZHVrX3R2YWwgdHZfdG1w OworCQlkdWtfaG9iamVjdCAqaF90bXA7CisKKwkJdHZfY2FsbGVyID0gZHVrX2hvYmplY3RfZmlu ZF9leGlzdGluZ19lbnRyeV90dmFsX3B0cih0aHItPmhlYXAsIGZ1bmMsIERVS19IVEhSRUFEX1NU UklOR19DQUxMRVIodGhyKSk7CisKKwkJLyogVGhlIGFjdC0+cHJldl9jYWxsZXIgc2hvdWxkIG9u bHkgYmUgc2V0IGlmIHRoZSBlbnRyeSBmb3IgJ2NhbGxlcicKKwkJICogZXhpc3RzIChhcyBpdCBp cyBvbmx5IHNldCBpbiB0aGF0IGNhc2UsIGFuZCB0aGUgcHJvcGVydHkgaXMgbm90CisJCSAqIGNv bmZpZ3VyYWJsZSksIGJ1dCBoYW5kbGUgYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJCSAqLworCisJ CWlmICh0dl9jYWxsZXIpIHsKKwkJCURVS19UVkFMX1NFVF9UVkFMKCZ0dl90bXAsIHR2X2NhbGxl cik7CisJCQlpZiAoYWN0LT5wcmV2X2NhbGxlcikgeworCQkJCS8qIEp1c3QgdHJhbnNmZXIgdGhl IHJlZmNvdW50IGZyb20gYWN0LT5wcmV2X2NhbGxlciB0byB0dl9jYWxsZXIsCisJCQkJICogc28g bm8gbmVlZCBmb3IgYSByZWZjb3VudCB1cGRhdGUuICBUaGlzIGlzIHRoZSBleHBlY3RlZCBjYXNl LgorCQkJCSAqLworCQkJCURVS19UVkFMX1NFVF9PQkpFQ1QodHZfY2FsbGVyLCBhY3QtPnByZXZf Y2FsbGVyKTsKKwkJCQlhY3QtPnByZXZfY2FsbGVyID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJ RFVLX1RWQUxfU0VUX05VTEwodHZfY2FsbGVyKTsgICAvKiBubyBpbmNyZWYgbmVlZGVkICovCisJ CQkJRFVLX0FTU0VSVChhY3QtPnByZXZfY2FsbGVyID09IE5VTEwpOworCQkJfQorCQkJRFVLX1RW QUxfREVDUkVGX05PUloodGhyLCAmdHZfdG1wKTsKKwkJfSBlbHNlIHsKKwkJCWhfdG1wID0gYWN0 LT5wcmV2X2NhbGxlcjsKKwkJCWlmIChoX3RtcCkgeworCQkJCWFjdC0+cHJldl9jYWxsZXIgPSBO VUxMOworCQkJCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaKHRociwgaF90bXApOworCQkJfQorCQl9 CisJCURVS19BU1NFUlQoYWN0LT5wcmV2X2NhbGxlciA9PSBOVUxMKTsKKwl9CisjZW5kaWYKKwor CS8qCisJICogIFVud2luZCBkZWJ1Z2dlciBzdGF0ZS4gIElmIHdlIHVud2luZCB3aGlsZSBzdGVw cGluZworCSAqICAoZm9yIGFueSBzdGVwIHR5cGUpLCBwYXVzZSBleGVjdXRpb24uICBUaGlzIGlz IHRoZQorCSAqICBvbmx5IHBsYWNlIGV4cGxpY2l0bHkgaGFuZGxpbmcgYSBzdGVwIG91dC4KKwkg Ki8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorCWhlYXAgPSB0aHIt PmhlYXA7CisJaWYgKGhlYXAtPmRiZ19wYXVzZV9hY3QgPT0gdGhyLT5jYWxsc3RhY2tfY3Vycikg eworCQlpZiAoaGVhcC0+ZGJnX3BhdXNlX2ZsYWdzICYgRFVLX1BBVVNFX0ZMQUdfRlVOQ19FWElU KSB7CisJCQlEVUtfRChEVUtfRFBSSU5UKCJQQVVTRSBUUklHR0VSRUQgYnkgZnVuY3Rpb24gZXhp dCIpKTsKKwkJCWR1a19kZWJ1Z19zZXRfcGF1c2VkKGhlYXApOworCQl9IGVsc2UgeworCQkJRFVL X0QoRFVLX0RQUklOVCgidW53b3VuZCBwYXN0IGRiZ19wYXVzZV9hY3QsIHNldCB0byBOVUxMIikp OworCQkJaGVhcC0+ZGJnX3BhdXNlX2FjdCA9IE5VTEw7ICAvKiBhdm9pZCBzdGFsZSBwb2ludGVy cyAqLworCQl9CisJCURVS19BU1NFUlQoaGVhcC0+ZGJnX3BhdXNlX2FjdCA9PSBOVUxMKTsKKwl9 CisjZW5kaWYKKworCS8qCisJICogIFVud2luZCBjYXRjaGVycy4KKwkgKgorCSAqICBTaW5jZSB0 aGVyZSBhcmUgbm8gcmVmZXJlbmNlcyBpbiB0aGUgY2F0Y2hlciBzdHJ1Y3R1cmUsCisJICogIHVu d2luZGluZyBpcyBxdWl0ZSBzaW1wbGUuICBUaGUgb25seSB0aGluZyB3ZSBuZWVkIHRvCisJICog IGxvb2sgb3V0IGZvciBpcyBwb3BwaW5nIGEgcG9zc2libGUgbGV4aWNhbCBlbnZpcm9ubWVudAor CSAqICBlc3RhYmxpc2hlZCBmb3IgYW4gYWN0aXZlIGNhdGNoIGNsYXVzZS4KKwkgKi8KKworCXdo aWxlIChhY3QtPmNhdCAhPSBOVUxMKSB7CisJCWR1a19odGhyZWFkX2NhdGNoZXJfdW53aW5kX25v cnoodGhyLCBhY3QpOworCX0KKworCS8qCisJICogIENsb3NlIGVudmlyb25tZW50IHJlY29yZChz KSBpZiB0aGV5IGV4aXN0LgorCSAqCisJICogIE9ubHkgdmFyaWFibGUgZW52aXJvbm1lbnRzIGFy ZSBjbG9zZWQuICBJZiBsZXhfZW52ICE9IHZhcl9lbnYsIGl0CisJICogIGNhbm5vdCBjdXJyZW50 bHkgY29udGFpbiBhbnkgcmVnaXN0ZXIgYm91bmQgZGVjbGFyYXRpb25zLgorCSAqCisJICogIE9u bHkgZW52aXJvbm1lbnRzIGNyZWF0ZWQgZm9yIGEgTkVXRU5WIGZ1bmN0aW9uIGFyZSBjbG9zZWQu ICBJZiBhbgorCSAqICBlbnZpcm9ubWVudCBpcyBjcmVhdGVkIGZvciBlLmcuIGFuIGV2YWwgY2Fs bCwgaXQgbXVzdCBub3QgYmUgY2xvc2VkLgorCSAqLworCisJZnVuYyA9IERVS19BQ1RfR0VUX0ZV TkMoYWN0KTsKKwlpZiAoZnVuYyAhPSBOVUxMICYmICFEVUtfSE9CSkVDVF9IQVNfTkVXRU5WKGZ1 bmMpKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJza2lwIGNsb3NpbmcgZW52aXJvbm1lbnRz LCBlbnZzIG5vdCBvd25lZCBieSB0aGlzIGFjdGl2YXRpb24iKSk7CisJCWdvdG8gc2tpcF9lbnZf Y2xvc2U7CisJfQorCS8qIGZ1bmMgaXMgTlVMTCBmb3IgbGlnaHRmdW5jICovCisKKwkvKiBDYXRj aCBzaXRlcyBhcmUgcmVxdWlyZWQgdG8gY2xlYW4gdXAgdGhlaXIgZW52aXJvbm1lbnRzCisJICog aW4gRklOQUxMWSBwYXJ0IGJlZm9yZSBwcm9wYWdhdGluZywgc28gdGhpcyBzaG91bGQKKwkgKiBh bHdheXMgaG9sZCBoZXJlLgorCSAqLworCURVS19BU1NFUlQoYWN0LT5sZXhfZW52ID09IGFjdC0+ dmFyX2Vudik7CisKKwkvKiBYWFg6IENsb3NpbmcgdGhlIGVudmlyb25tZW50IHJlY29yZCBjb3Bp ZXMgdmFsdWVzIGZyb20gcmVnaXN0ZXJzCisJICogaW50byB0aGUgc2NvcGUgb2JqZWN0LiAgSXQn cyBzaWRlIGVmZmVjdCBmcmVlIGFzIHN1Y2gsIGJ1dCBtYXkKKwkgKiBjdXJyZW50bHkgcnVuIG91 dCBvZiBtZW1vcnkgd2hpY2ggY2F1c2VzIGFuIGVycm9yIHRocm93LiAgVGhpcyBpcworCSAqIGFu IGFjdHVhbCBzYW5kYm94aW5nIHByb2JsZW0gZm9yIGVycm9yIHVud2luZHMsIGFuZCBuZWVkcyB0 byBiZQorCSAqIGZpeGVkIGUuZy4gYnkgcHJlYWxsb2NhdGluZyB0aGUgc2NvcGUgcHJvcGVydHkg c2xvdHMuCisJICovCisJaWYgKGFjdC0+dmFyX2VudiAhPSBOVUxMKSB7CisJCURVS19EREQoRFVL X0RERFBSSU5UKCJjbG9zaW5nIHZhcl9lbnYgcmVjb3JkICVwIC0+ICUhTyIsCisJCSAgICAgICAg ICAgICAgICAgICAgICh2b2lkICopIGFjdC0+dmFyX2VudiwgKGR1a19oZWFwaGRyICopIGFjdC0+ dmFyX2VudikpOworCQlkdWtfanNfY2xvc2VfZW52aXJvbm1lbnRfcmVjb3JkKHRociwgYWN0LT52 YXJfZW52KTsKKwl9CisKKyBza2lwX2Vudl9jbG9zZToKKworCS8qCisJICogIFVwZGF0ZSBwcmV2 ZW50Y291bnQKKwkgKi8KKworCWlmIChhY3QtPmZsYWdzICYgRFVLX0FDVF9GTEFHX1BSRVZFTlRf WUlFTEQpIHsKKwkJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja19wcmV2ZW50Y291bnQgPj0gMSk7 CisJCXRoci0+Y2FsbHN0YWNrX3ByZXZlbnRjb3VudC0tOworCX0KKworCS8qCisJICogIFJlZmVy ZW5jZSBjb3VudCB1cGRhdGVzLCB1c2luZyBOT1JaIG1hY3JvcyBzbyB3ZSBkb24ndAorCSAqICBu ZWVkIHRvIGhhbmRsZSBzaWRlIGVmZmVjdHMuCisJICoKKwkgKiAgZHVrX2FjdGl2YXRpb24gcG9p bnRlcnMgbGlrZSBhY3QtPnZhcl9lbnYgYXJlIGludGVudGlvbmFsbHkKKwkgKiAgbGVmdCBhcyBn YXJiYWdlIGFuZCBub3QgTlVMTGVkLiAgV2l0aG91dCBzaWRlIGVmZmVjdHMgdGhleQorCSAqICBj YW4ndCBiZSB1c2VkIHdoZW4gdGhlIHZhbHVlcyBhcmUgZGFuZ2xpbmcvZ2FyYmFnZS4KKwkgKi8K KworCURVS19IT0JKRUNUX0RFQ1JFRl9OT1JaX0FMTE9XTlVMTCh0aHIsIGFjdC0+dmFyX2Vudik7 CisJRFVLX0hPQkpFQ1RfREVDUkVGX05PUlpfQUxMT1dOVUxMKHRociwgYWN0LT5sZXhfZW52KTsK Kwl0bXAgPSBEVUtfQUNUX0dFVF9GVU5DKGFjdCk7CisJRFVLX0hPQkpFQ1RfREVDUkVGX05PUlpf QUxMT1dOVUxMKHRociwgdG1wKTsKKwlEVUtfVU5SRUYodG1wKTsKK30KKworLyogVW53aW5kIHRv cG1vc3QgZHVrX2FjdGl2YXRpb24gb2YgYSB0aHJlYWQsIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0 IGFuCisgKiBhY3RpdmF0aW9uIGV4aXN0cy4gIFRoZSBjYWxsIGlzIHNpZGUgZWZmZWN0IGZyZWUs IGV4Y2VwdCB0aGF0IHNjb3BlCisgKiBjbG9zdXJlIG1heSBjdXJyZW50bHkgdGhyb3cgYW4gb3V0 LW9mLW1lbW9yeSBlcnJvci4KKyAqLworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2h0aHJlYWRfYWN0 aXZhdGlvbl91bndpbmRfbm9yeihkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX2FjdGl2YXRpb24g KmFjdDsKKworCWR1a19fYWN0aXZhdGlvbl91bndpbmRfbm9mcmVlX25vcnoodGhyKTsKKworCURV S19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+ Y2FsbHN0YWNrX3RvcCA+IDApOworCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJdGhyLT5j YWxsc3RhY2tfY3VyciA9IGFjdC0+cGFyZW50OworCXRoci0+Y2FsbHN0YWNrX3RvcC0tOworCisJ LyogSWRlYWxseSB3ZSdkIHJlc3RvcmUgdmFsdWUgc3RhY2sgcmVzZXJ2ZSBoZXJlIHRvIGNhbGxl cidzIHZhbHVlLgorCSAqIFRoaXMgZG9lc24ndCB3b3JrIGZvciBjdXJyZW50IHVud2luZCBjYWxs IHNpdGVzIGhvd2V2ZXIsIGJlY2F1c2UKKwkgKiB0aGUgY3VycmVudCAodW53b3VuZCkgdmFsdWUg c3RhY2sgdG9wIG1heSBiZSBhYm92ZSB0aGUgcmVzZXJ2ZS4KKwkgKiBUaHVzIHZhbHVlIHN0YWNr IHJlc2VydmUgaXMgcmVzdG9yZWQgYnkgdGhlIGNhbGwgc2l0ZXMuCisJICovCisKKwkvKiBYWFg6 IGlubGluZSBmb3IgcGVyZm9ybWFuY2UgYnVpbGRzPyAqLworCWR1a19odGhyZWFkX2FjdGl2YXRp b25fZnJlZSh0aHIsIGFjdCk7CisKKwkvKiBXZSBjb3VsZCBjbGVhciB0aGUgYm9vay1rZWVwaW5n IHZhcmlhYmxlcyBsaWtlIHJldHZhbF9ieXRlb2ZmIGZvcgorCSAqIHRoZSB0b3Btb3N0IGFjdGl2 YXRpb24sIGJ1dCBkb24ndCBkbyBzbyBub3cgYXMgaXQncyBub3QgbmVjZXNzYXJ5LgorCSAqLwor fQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfaHRocmVhZF9hY3RpdmF0aW9uX3Vud2luZF9yZXVz ZV9ub3J6KGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfX2FjdGl2YXRpb25fdW53aW5kX25vZnJl ZV9ub3J6KHRocik7Cit9CisKKy8qIEdldCBkdWtfYWN0aXZhdGlvbiBmb3IgZ2l2ZW4gY2FsbHN0 YWNrIGxldmVsIG9yIE5VTEwgaWYgbGV2ZWwgaXMgaW52YWxpZAorICogb3IgZGVlcGVyIHRoYW4g dGhlIGNhbGwgc3RhY2suICBMZXZlbCAtMSByZWZlcnMgdG8gY3VycmVudCBhY3RpdmF0aW9uLCAt MgorICogdG8gaXRzIGNhbGxlciwgZXRjLiAgU3RhcnRpbmcgZnJvbSBEdWt0YXBlIDIuMiBmaW5k aW5nIHRoZSBhY3RpdmF0aW9uIGlzCisgKiBhIGxpbmtlZCBsaXN0IHNjYW4gd2hpY2ggZ2V0cyBt b3JlIGV4cGVuc2l2ZSB0aGUgZGVlcGVyIHRoZSBsb29rdXAgaXMuCisgKi8KK0RVS19JTlRFUk5B TCBkdWtfYWN0aXZhdGlvbiAqZHVrX2h0aHJlYWRfZ2V0X2FjdGl2YXRpb25fZm9yX2xldmVsKGR1 a19odGhyZWFkICp0aHIsIGR1a19pbnRfdCBsZXZlbCkgeworCWR1a19hY3RpdmF0aW9uICphY3Q7 CisKKwlpZiAobGV2ZWwgPj0gMCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJYWN0ID0gdGhyLT5j YWxsc3RhY2tfY3VycjsKKwlmb3IgKDs7KSB7CisJCWlmIChhY3QgPT0gTlVMTCkgeworCQkJcmV0 dXJuIGFjdDsKKwkJfQorCQlpZiAobGV2ZWwgPT0gLTEpIHsKKwkJCXJldHVybiBhY3Q7CisJCX0K KwkJbGV2ZWwrKzsKKwkJYWN0ID0gYWN0LT5wYXJlbnQ7CisJfQorCS8qIG5ldmVyIGhlcmUgKi8K K30KKworI2lmIGRlZmluZWQoRFVLX1VTRV9GSU5BTElaRVJfVE9SVFVSRSkKK0RVS19JTlRFUk5B TCB2b2lkIGR1a19odGhyZWFkX3ZhbHN0YWNrX3RvcnR1cmVfcmVhbGxvYyhkdWtfaHRocmVhZCAq dGhyKSB7CisJZHVrX3NpemVfdCBhbGxvY19zaXplOworCWR1a190dmFsICpuZXdfcHRyOworCWR1 a19wdHJkaWZmX3QgYWxsb2NfZW5kX29mZjsKKwlkdWtfcHRyZGlmZl90IGVuZF9vZmY7CisJZHVr X3B0cmRpZmZfdCBib3R0b21fb2ZmOworCWR1a19wdHJkaWZmX3QgdG9wX29mZjsKKworCWlmICh0 aHItPnZhbHN0YWNrID09IE5VTEwpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgic2tpcCB2YWxzdGFj ayB0b3J0dXJlIHJlYWxsb2MsIHZhbHN0YWNrIGlzIE5VTEwiKSk7CisJCXJldHVybjsKKwl9CisK KwlhbGxvY19lbmRfb2ZmID0gKGR1a19wdHJkaWZmX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52 YWxzdGFja19hbGxvY19lbmQgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjayk7CisJZW5k X29mZiA9IChkdWtfcHRyZGlmZl90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfZW5k IC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spOworCWJvdHRvbV9vZmYgPSAoZHVrX3B0 cmRpZmZfdCkgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX2JvdHRvbSAtIChkdWtfdWlu dDhfdCAqKSB0aHItPnZhbHN0YWNrKTsKKwl0b3Bfb2ZmID0gKGR1a19wdHJkaWZmX3QpICgoZHVr X3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja190b3AgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxz dGFjayk7CisJYWxsb2Nfc2l6ZSA9IChkdWtfc2l6ZV90KSBhbGxvY19lbmRfb2ZmOworCWlmIChh bGxvY19zaXplID09IDApIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgic2tpcCB2YWxzdGFjayB0b3J0 dXJlIHJlYWxsb2MsIGFsbG9jX3NpemUgaXMgemVybyIpKTsKKwkJcmV0dXJuOworCX0KKworCS8q IFVzZSBEVUtfQUxMT0NfUkFXKCkgdG8gYXZvaWQgc2lkZSBlZmZlY3RzLiAqLworCW5ld19wdHIg PSAoZHVrX3R2YWwgKikgRFVLX0FMTE9DX1JBVyh0aHItPmhlYXAsIGFsbG9jX3NpemUpOworCWlm IChuZXdfcHRyICE9IE5VTEwpIHsKKwkJZHVrX21lbWNweSgodm9pZCAqKSBuZXdfcHRyLCAoY29u c3Qgdm9pZCAqKSB0aHItPnZhbHN0YWNrLCBhbGxvY19zaXplKTsKKwkJZHVrX21lbXNldCgodm9p ZCAqKSB0aHItPnZhbHN0YWNrLCAweDU1LCBhbGxvY19zaXplKTsKKwkJRFVLX0ZSRUVfQ0hFQ0tF RCh0aHIsICh2b2lkICopIHRoci0+dmFsc3RhY2spOworCQl0aHItPnZhbHN0YWNrID0gbmV3X3B0 cjsKKwkJdGhyLT52YWxzdGFja19hbGxvY19lbmQgPSAoZHVrX3R2YWwgKikgKChkdWtfdWludDhf dCAqKSBuZXdfcHRyICsgYWxsb2NfZW5kX29mZik7CisJCXRoci0+dmFsc3RhY2tfZW5kID0gKGR1 a190dmFsICopICgoZHVrX3VpbnQ4X3QgKikgbmV3X3B0ciArIGVuZF9vZmYpOworCQl0aHItPnZh bHN0YWNrX2JvdHRvbSA9IChkdWtfdHZhbCAqKSAoKGR1a191aW50OF90ICopIG5ld19wdHIgKyBi b3R0b21fb2ZmKTsKKwkJdGhyLT52YWxzdGFja190b3AgPSAoZHVrX3R2YWwgKikgKChkdWtfdWlu dDhfdCAqKSBuZXdfcHRyICsgdG9wX29mZik7CisJfSBlbHNlIHsKKwkJRFVLX0QoRFVLX0RQUklO VCgiZmFpbGVkIHRvIHJlYWxsb2MgdmFsc3RhY2sgZm9yIHRvcnR1cmUsIGlnbm9yZSIpKTsKKwl9 Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRklOQUxJWkVSX1RPUlRVUkUgKi8KKy8qCisgKiAgU2hh cmVkIGhlbHBlcnMgZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucworICovCisKKy8qICNpbmNsdWRl IGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyogRUNNQVNjcmlwdCBt b2R1bHVzICgnJScpIGRvZXMgbm90IG1hdGNoIElFRUUgNzU0ICJyZW1haW5kZXIiIG9wZXJhdGlv bgorICogKGltcGxlbWVudGVkIGJ5IHJlbWFpbmRlcigpIGluIEM5OSkgYnV0IGRvZXMgc2VlbSB0 byBtYXRjaCBBTlNJIEMgZm1vZCgpLgorICogQ29tcGFyZSBFNSBTZWN0aW9uIDExLjUuMyBhbmQg Im1hbiBmbW9kIi4KKyAqLworRFVLX0lOVEVSTkFMIGRvdWJsZSBkdWtfanNfYXJpdGhfbW9kKGRv dWJsZSBkMSwgZG91YmxlIGQyKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BPV19XT1JLQVJPVU5E UykKKwkvKiBTcGVjaWZpYyBmaXhlcyB0byBjb21tb24gZm1vZCgpIGltcGxlbWVudGF0aW9uIGlz c3VlczoKKwkgKiAtIHRlc3QtYnVnLW1pbmd3LW1hdGgtaXNzdWVzLmpzCisJICovCisJaWYgKERV S19JU0lORihkMikpIHsKKwkJaWYgKERVS19JU0lORihkMSkpIHsKKwkJCXJldHVybiBEVUtfRE9V QkxFX05BTjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBkMTsKKwkJfQorCX0gZWxzZSBpZiAoZDEg PT0gMC4wKSB7CisJCS8qIGQxICsvLTAgaXMgcmV0dXJuZWQgYXMgaXMgKHByZXNlcnZpbmcgc2ln bikgZXhjZXB0IHdoZW4KKwkJICogZDIgaXMgemVybyBvciBOYU4uCisJCSAqLworCQlpZiAoZDIg PT0gMC4wIHx8IERVS19JU05BTihkMikpIHsKKwkJCXJldHVybiBEVUtfRE9VQkxFX05BTjsKKwkJ fSBlbHNlIHsKKwkJCXJldHVybiBkMTsKKwkJfQorCX0KKyNlbHNlCisJLyogU29tZSBJU08gQyBh c3N1bXB0aW9ucy4gKi8KKwlEVUtfQVNTRVJUKERVS19GTU9EKDEuMCwgRFVLX0RPVUJMRV9JTkZJ TklUWSkgPT0gMS4wKTsKKwlEVUtfQVNTRVJUKERVS19GTU9EKC0xLjAsIERVS19ET1VCTEVfSU5G SU5JVFkpID09IC0xLjApOworCURVS19BU1NFUlQoRFVLX0ZNT0QoMS4wLCAtRFVLX0RPVUJMRV9J TkZJTklUWSkgPT0gMS4wKTsKKwlEVUtfQVNTRVJUKERVS19GTU9EKC0xLjAsIC1EVUtfRE9VQkxF X0lORklOSVRZKSA9PSAtMS4wKTsKKwlEVUtfQVNTRVJUKERVS19JU05BTihEVUtfRk1PRChEVUtf RE9VQkxFX0lORklOSVRZLCBEVUtfRE9VQkxFX0lORklOSVRZKSkpOworCURVS19BU1NFUlQoRFVL X0lTTkFOKERVS19GTU9EKERVS19ET1VCTEVfSU5GSU5JVFksIC1EVUtfRE9VQkxFX0lORklOSVRZ KSkpOworCURVS19BU1NFUlQoRFVLX0lTTkFOKERVS19GTU9EKC1EVUtfRE9VQkxFX0lORklOSVRZ LCBEVUtfRE9VQkxFX0lORklOSVRZKSkpOworCURVS19BU1NFUlQoRFVLX0lTTkFOKERVS19GTU9E KC1EVUtfRE9VQkxFX0lORklOSVRZLCAtRFVLX0RPVUJMRV9JTkZJTklUWSkpKTsKKwlEVUtfQVNT RVJUKERVS19GTU9EKDAuMCwgMS4wKSA9PSAwLjAgJiYgRFVLX1NJR05CSVQoRFVLX0ZNT0QoMC4w LCAxLjApKSA9PSAwKTsKKwlEVUtfQVNTRVJUKERVS19GTU9EKC0wLjAsIDEuMCkgPT0gMC4wICYm IERVS19TSUdOQklUKERVS19GTU9EKC0wLjAsIDEuMCkpICE9IDApOworCURVS19BU1NFUlQoRFVL X0ZNT0QoMC4wLCBEVUtfRE9VQkxFX0lORklOSVRZKSA9PSAwLjAgJiYgRFVLX1NJR05CSVQoRFVL X0ZNT0QoMC4wLCBEVUtfRE9VQkxFX0lORklOSVRZKSkgPT0gMCk7CisJRFVLX0FTU0VSVChEVUtf Rk1PRCgtMC4wLCBEVUtfRE9VQkxFX0lORklOSVRZKSA9PSAwLjAgJiYgRFVLX1NJR05CSVQoRFVL X0ZNT0QoLTAuMCwgRFVLX0RPVUJMRV9JTkZJTklUWSkpICE9IDApOworCURVS19BU1NFUlQoRFVL X0ZNT0QoMC4wLCAtRFVLX0RPVUJMRV9JTkZJTklUWSkgPT0gMC4wICYmIERVS19TSUdOQklUKERV S19GTU9EKDAuMCwgRFVLX0RPVUJMRV9JTkZJTklUWSkpID09IDApOworCURVS19BU1NFUlQoRFVL X0ZNT0QoLTAuMCwgLURVS19ET1VCTEVfSU5GSU5JVFkpID09IDAuMCAmJiBEVUtfU0lHTkJJVChE VUtfRk1PRCgtMC4wLCAtRFVLX0RPVUJMRV9JTkZJTklUWSkpICE9IDApOworCURVS19BU1NFUlQo RFVLX0lTTkFOKERVS19GTU9EKDAuMCwgMC4wKSkpOworCURVS19BU1NFUlQoRFVLX0lTTkFOKERV S19GTU9EKC0wLjAsIDAuMCkpKTsKKwlEVUtfQVNTRVJUKERVS19JU05BTihEVUtfRk1PRCgwLjAs IC0wLjApKSk7CisJRFVLX0FTU0VSVChEVUtfSVNOQU4oRFVLX0ZNT0QoLTAuMCwgLTAuMCkpKTsK KwlEVUtfQVNTRVJUKERVS19JU05BTihEVUtfRk1PRCgwLjAsIERVS19ET1VCTEVfTkFOKSkpOwor CURVS19BU1NFUlQoRFVLX0lTTkFOKERVS19GTU9EKC0wLjAsIERVS19ET1VCTEVfTkFOKSkpOwor I2VuZGlmCisKKwlyZXR1cm4gKGR1a19kb3VibGVfdCkgRFVLX0ZNT0QoKGRvdWJsZSkgZDEsIChk b3VibGUpIGQyKTsKK30KKworLyogU2hhcmVkIGhlbHBlciBmb3IgTWF0aC5wb3coKSBhbmQgZXhw b25lbnRpYXRpb24gb3BlcmF0b3IuICovCitEVUtfSU5URVJOQUwgZG91YmxlIGR1a19qc19hcml0 aF9wb3coZG91YmxlIHgsIGRvdWJsZSB5KSB7CisJLyogVGhlIEFOU0kgQyBwb3coKSBzZW1hbnRp Y3MgZGlmZmVyIGZyb20gRUNNQVNjcmlwdC4KKwkgKgorCSAqIEUuZy4gd2hlbiB4PT0xIGFuZCB5 IGlzICsvLSBpbmZpbml0ZSwgdGhlIEVDTUFTY3JpcHQgcmVxdWlyZWQKKwkgKiByZXN1bHQgaXMg TmFOLCB3aGlsZSBhdCBsZWFzdCBMaW51eCBwb3coKSByZXR1cm5zIDEuCisJICovCisKKwlkdWtf c21hbGxfaW50X3QgY3gsIGN5LCBzeDsKKworCURVS19VTlJFRihjeCk7CisJRFVLX1VOUkVGKHN4 KTsKKwljeSA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKHkpOworCisJaWYgKGN5 ID09IERVS19GUF9OQU4pIHsKKwkJZ290byByZXRfbmFuOworCX0KKwlpZiAoRFVLX0ZBQlMoeCkg PT0gMS4wICYmIGN5ID09IERVS19GUF9JTkZJTklURSkgeworCQlnb3RvIHJldF9uYW47CisJfQor CisjaWYgZGVmaW5lZChEVUtfVVNFX1BPV19XT1JLQVJPVU5EUykKKwkvKiBTcGVjaWZpYyBmaXhl cyB0byBjb21tb24gcG93KCkgaW1wbGVtZW50YXRpb24gaXNzdWVzOgorCSAqICAgLSB0ZXN0LWJ1 Zy1uZXRic2QtbWF0aC1wb3cuanM6IE5ldEJTRCA2LjAgb24geDg2IChhdCBsZWFzdCkKKwkgKiAg IC0gdGVzdC1idWctbWluZ3ctbWF0aC1pc3N1ZXMuanMKKwkgKi8KKwljeCA9IChkdWtfc21hbGxf aW50X3QpIERVS19GUENMQVNTSUZZKHgpOworCWlmIChjeCA9PSBEVUtfRlBfWkVSTyAmJiB5IDwg MC4wKSB7CisJCXN4ID0gKGR1a19zbWFsbF9pbnRfdCkgRFVLX1NJR05CSVQoeCk7CisJCWlmIChz eCA9PSAwKSB7CisJCQkvKiBNYXRoLnBvdygrMCx5KSBzaG91bGQgYmUgSW5maW5pdHkgd2hlbiB5 PDAuICBOZXRCU0QgcG93KCkKKwkJCSAqIHJldHVybnMgLUluZmluaXR5IGluc3RlYWQgd2hlbiB5 IGlzIDwwIGFuZCBmaW5pdGUuICBUaGUKKwkJCSAqIGlmLWNsYXVzZSBhbHNvIGNhdGNoZXMgeSA9 PSAtSW5maW5pdHkgKHdoaWNoIHdvcmtzIGV2ZW4KKwkJCSAqIHdpdGhvdXQgdGhlIGZpeCkuCisJ CQkgKi8KKwkJCXJldHVybiBEVUtfRE9VQkxFX0lORklOSVRZOworCQl9IGVsc2UgeworCQkJLyog TWF0aC5wb3coLTAseSkgd2hlcmUgeTwwIHNob3VsZCBiZToKKwkJCSAqICAgLSAtSW5maW5pdHkg aWYgeTwwIGFuZCBhbiBvZGQgaW50ZWdlcgorCQkJICogICAtIEluZmluaXR5IGlmIHk8MCBidXQg bm90IGFuIG9kZCBpbnRlZ2VyCisJCQkgKiBOZXRCU0QgcG93KCkgcmV0dXJucyAtSW5maW5pdHkg Zm9yIGFsbCBmaW5pdGUgeTwwLiAgVGhlCisJCQkgKiBpZi1jbGF1c2UgYWxzbyBjYXRjaGVzIHkg PT0gLUluZmluaXR5ICh3aGljaCB3b3JrcyBldmVuCisJCQkgKiB3aXRob3V0IHRoZSBmaXgpLgor CQkJICovCisKKwkJCS8qIGZtb2QoKSByZXR1cm4gdmFsdWUgaGFzIHNhbWUgc2lnbiBhcyBpbnB1 dCAobmVnYXRpdmUpIHNvCisJCQkgKiB0aGUgcmVzdWx0IGhlcmUgd2lsbCBiZSBpbiB0aGUgcmFu Z2UgXS0yLDBdLCAtMSBpbmRpY2F0ZXMKKwkJCSAqIG9kZC4gIElmIHggaXMgLUluZmluaXR5LCBO YU4gaXMgcmV0dXJuZWQgYW5kIHRoZSBvZGQgY2hlY2sKKwkJCSAqIGFsd2F5cyBjb25jbHVkZXMg Im5vdCBvZGQiIHdoaWNoIHJlc3VsdHMgaW4gZGVzaXJlZCBvdXRjb21lLgorCQkJICovCisJCQlk b3VibGUgdG1wID0gRFVLX0ZNT0QoeSwgMik7CisJCQlpZiAodG1wID09IC0xLjApIHsKKwkJCQly ZXR1cm4gLURVS19ET1VCTEVfSU5GSU5JVFk7CisJCQl9IGVsc2UgeworCQkJCS8qIE5vdCBvZGQs IG9yIHkgPT0gLUluZmluaXR5ICovCisJCQkJcmV0dXJuIERVS19ET1VCTEVfSU5GSU5JVFk7CisJ CQl9CisJCX0KKwl9IGVsc2UgaWYgKGN4ID09IERVS19GUF9OQU4pIHsKKwkJaWYgKHkgPT0gMC4w KSB7CisJCQkvKiBOYU4gKiogKy8tIDAgc2hvdWxkIGFsd2F5cyBiZSAxLCBidXQgaXMgTmFOIG9u CisJCQkgKiBhdCBsZWFzdCBzb21lIEN5Z3dpbi9NaW5HVyB2ZXJzaW9ucy4KKwkJCSAqLworCQkJ cmV0dXJuIDEuMDsKKwkJfQorCX0KKyNlbHNlCisJLyogU29tZSBJU08gQyBhc3N1bXB0aW9ucy4g Ki8KKwlEVUtfQVNTRVJUKERVS19QT1coRFVLX0RPVUJMRV9OQU4sIDAuMCkgPT0gMS4wKTsKKwlE VUtfQVNTRVJUKERVS19JU0lORihEVUtfUE9XKDAuMCwgLTEuMCkpICYmIERVS19TSUdOQklUKERV S19QT1coMC4wLCAtMS4wKSkgPT0gMCk7CisJRFVLX0FTU0VSVChEVUtfSVNJTkYoRFVLX1BPVygt MC4wLCAtMi4wKSkgJiYgRFVLX1NJR05CSVQoRFVLX1BPVygtMC4wLCAtMi4wKSkgPT0gMCk7CisJ RFVLX0FTU0VSVChEVUtfSVNJTkYoRFVLX1BPVygtMC4wLCAtMy4wKSkgJiYgRFVLX1NJR05CSVQo RFVLX1BPVygtMC4wLCAtMy4wKSkgIT0gMCk7CisjZW5kaWYKKworCXJldHVybiBEVUtfUE9XKHgs IHkpOworCisgcmV0X25hbjoKKwlyZXR1cm4gRFVLX0RPVUJMRV9OQU47Cit9CisvKgorICogIENh bGwgaGFuZGxpbmcuCisgKgorICogIGR1a19oYW5kbGVfY2FsbF91bnByb3RlY3RlZCgpOgorICoK KyAqICAgIC0gVW5wcm90ZWN0ZWQgY2FsbCB0byBFQ01BU2NyaXB0IG9yIER1a3RhcGUvQyBmdW5j dGlvbiwgZnJvbSBuYXRpdmUKKyAqICAgICAgY29kZSBvciBieXRlY29kZSBleGVjdXRvci4KKyAq CisgKiAgICAtIEFsc28gaGFuZGxlcyBFY21hLXRvLUVjbWEgY2FsbHMgd2hpY2ggcmV1c2VzIGEg Y3VycmVudGx5IHJ1bm5pbmcKKyAqICAgICAgZXhlY3V0b3IgaW5zdGFuY2UgdG8gYXZvaWQgbmF0 aXZlIHJlY3Vyc2lvbi4gIENhbGwgc2V0dXAgaXMgZG9uZQorICogICAgICBub3JtYWxseSwgYnV0 IGp1c3QgYmVmb3JlIGNhbGxpbmcgdGhlIGJ5dGVjb2RlIGV4ZWN1dG9yIGEgc3BlY2lhbAorICog ICAgICByZXR1cm4gY29kZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBjYWxsaW5nIGV4ZWN1 dG9yIGlzIHJldXNlZC4KKyAqCisgKiAgICAtIEFsc28gaGFuZGxlcyB0YWlsY2FsbHMsIGkuZS4g cmV1c2Ugb2YgY3VycmVudCBkdWtfYWN0aXZhdGlvbi4KKyAqCisgKiAgICAtIEFsc28gaGFuZGxl cyBzZXR1cCBmb3IgaW5pdGlhbCBEdWt0YXBlLlRocmVhZC5yZXN1bWUoKS4KKyAqCisgKiAgZHVr X2hhbmRsZV9zYWZlX2NhbGwoKToKKyAqCisgKiAgICAtIFByb3RlY3RlZCBDIGNhbGwgd2l0aGlu IGN1cnJlbnQgYWN0aXZhdGlvbi4KKyAqCisgKiAgc2V0am1wKCkgYW5kIGxvY2FsIHZhcmlhYmxl cyBoYXZlIGEgbmFzdHkgaW50ZXJhY3Rpb24sIHNlZSBleGVjdXRpb24ucnN0OworICogIG5vbi12 b2xhdGlsZSBsb2NhbHMgbW9kaWZpZWQgYWZ0ZXIgc2V0am1wKCkgY2FsbCBhcmUgbm90IGd1YXJh bnRlZWQgdG8KKyAqICBrZWVwIHRoZWlyIHZhbHVlIGFuZCBjYW4gY2F1c2UgY29tcGlsZXIgb3Ig Y29tcGlsZXIgdmVyc2lvbiBzcGVjaWZpYworICogIGRpZmZpY3VsdCB0byByZXBsaWNhdGUgaXNz dWVzLgorICoKKyAqICBTZWUgJ2V4ZWN1dGlvbi5yc3QnLgorICovCisKKy8qICNpbmNsdWRlIGR1 a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyogWFhYOiBoZWFwLT5lcnJv cl9ub3RfYWxsb3dlZCBmb3Igc3VjY2VzcyBwYXRoIHRvbz8gKi8KKworLyoKKyAqICBMaW1pdCBj aGVjayBoZWxwZXJzLgorICovCisKKy8qIEFsbG93IGhlYWRyb29tIGZvciBjYWxscyBkdXJpbmcg ZXJyb3IgYXVnbWVudGF0aW9uIChzZWUgR0gtMTkxKS4KKyAqIFdlIGFsbG93IHNwYWNlIGZvciAx MCBhZGRpdGlvbmFsIHJlY3Vyc2lvbnMsIHdpdGggb25lIGV4dHJhCisgKiBmb3IsIGUuZy4gYSBw cmludCgpIGNhbGwgYXQgdGhlIGRlZXBlc3QgbGV2ZWwsIGFuZCBhbiBleHRyYQorICogKzEgZm9y IHByb3RlY3RlZCBjYWxsIHdyYXBwaW5nLgorICovCisjZGVmaW5lIERVS19fQVVHTUVOVF9DQUxM X1JFTEFYX0NPVU5UICAoMTAgKyAyKQorCitEVUtfTE9DQUwgRFVLX05PSU5MSU5FIHZvaWQgZHVr X19jYWxsX2NfcmVjdXJzaW9uX2xpbWl0X2NoZWNrX3Nsb3dwYXRoKGR1a19odGhyZWFkICp0aHIp IHsKKwkvKiBXaGVuIGF1Z21lbnRpbmcgYW4gZXJyb3IsIHRoZSBlZmZlY3RpdmUgbGltaXQgaXMg YSBiaXQgaGlnaGVyLgorCSAqIENoZWNrIGZvciBpdCBvbmx5IGlmIHRoZSBmYXN0IHBhdGggY2hl Y2sgZmFpbHMuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJST1JfVEhST1cp IHx8IGRlZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VSUk9SX0NSRUFURSkKKwlpZiAodGhyLT5oZWFw LT5hdWdtZW50aW5nX2Vycm9yKSB7CisJCWlmICh0aHItPmhlYXAtPmNhbGxfcmVjdXJzaW9uX2Rl cHRoIDwgdGhyLT5oZWFwLT5jYWxsX3JlY3Vyc2lvbl9saW1pdCArIERVS19fQVVHTUVOVF9DQUxM X1JFTEFYX0NPVU5UKSB7CisJCQlEVUtfRChEVUtfRFBSSU5UKCJDIHJlY3Vyc2lvbiBsaW1pdCBy ZWFjaGVkIGJ1dCBhdWdtZW50aW5nIGVycm9yIGFuZCB3aXRoaW4gcmVsYXhlZCBsaW1pdCIpKTsK KwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZgorCisJRFVLX0QoRFVLX0RQUklOVCgiY2FsbCBw cmV2ZW50ZWQgYmVjYXVzZSBDIHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkIikpOworCURVS19FUlJP Ul9SQU5HRSh0aHIsIERVS19TVFJfQ19DQUxMU1RBQ0tfTElNSVQpOworCURVS19XT19OT1JFVFVS TihyZXR1cm47KTsKK30KKworRFVLX0xPQ0FMIERVS19BTFdBWVNfSU5MSU5FIHZvaWQgZHVrX19j YWxsX2NfcmVjdXJzaW9uX2xpbWl0X2NoZWNrKGR1a19odGhyZWFkICp0aHIpIHsKKwlEVUtfQVNT RVJUKHRoci0+aGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGggPj0gMCk7CisJRFVLX0FTU0VSVCh0 aHItPmhlYXAtPmNhbGxfcmVjdXJzaW9uX2RlcHRoIDw9IHRoci0+aGVhcC0+Y2FsbF9yZWN1cnNp b25fbGltaXQpOworCisJLyogVGhpcyBjaGVjayBpcyBmb3JjaWJseSBpbmxpbmVkIGJlY2F1c2Ug aXQncyB2ZXJ5IGNoZWFwIGFuZCBhbG1vc3QKKwkgKiBhbHdheXMgcGFzc2VzLiAgVGhlIHNsb3cg cGF0aCBpcyBmb3JjaWJseSBub2lubGluZS4KKwkgKi8KKwlpZiAoRFVLX0xJS0VMWSh0aHItPmhl YXAtPmNhbGxfcmVjdXJzaW9uX2RlcHRoIDwgdGhyLT5oZWFwLT5jYWxsX3JlY3Vyc2lvbl9saW1p dCkpIHsKKwkJcmV0dXJuOworCX0KKworCWR1a19fY2FsbF9jX3JlY3Vyc2lvbl9saW1pdF9jaGVj a19zbG93cGF0aCh0aHIpOworfQorCitEVUtfTE9DQUwgRFVLX05PSU5MSU5FIHZvaWQgZHVrX19j YWxsX2NhbGxzdGFja19saW1pdF9jaGVja19zbG93cGF0aChkdWtfaHRocmVhZCAqdGhyKSB7CisJ LyogV2hlbiBhdWdtZW50aW5nIGFuIGVycm9yLCB0aGUgZWZmZWN0aXZlIGxpbWl0IGlzIGEgYml0 IGhpZ2hlci4KKwkgKiBDaGVjayBmb3IgaXQgb25seSBpZiB0aGUgZmFzdCBwYXRoIGNoZWNrIGZh aWxzLgorCSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9BVUdNRU5UX0VSUk9SX1RIUk9XKSB8fCBk ZWZpbmVkKERVS19VU0VfQVVHTUVOVF9FUlJPUl9DUkVBVEUpCisJaWYgKHRoci0+aGVhcC0+YXVn bWVudGluZ19lcnJvcikgeworCQlpZiAodGhyLT5jYWxsc3RhY2tfdG9wIDwgRFVLX1VTRV9DQUxM U1RBQ0tfTElNSVQgKyBEVUtfX0FVR01FTlRfQ0FMTF9SRUxBWF9DT1VOVCkgeworCQkJRFVLX0Qo RFVLX0RQUklOVCgiY2FsbCBzdGFjayBsaW1pdCByZWFjaGVkIGJ1dCBhdWdtZW50aW5nIGVycm9y IGFuZCB3aXRoaW4gcmVsYXhlZCBsaW1pdCIpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRp ZgorCisJLyogWFhYOiBlcnJvciBtZXNzYWdlIGlzIGEgYml0IG1pc2xlYWRpbmc6IHdlIHJlYWNo ZWQgYSByZWN1cnNpb24KKwkgKiBsaW1pdCB3aGljaCBpcyBhbHNvIGVzc2VudGlhbGx5IHRoZSBz YW1lIGFzIGEgQyBjYWxsc3RhY2sgbGltaXQKKwkgKiAoZXhjZXB0IHBlcmhhcHMgd2l0aCBzb21l IHJlbGF4ZWQgdGhyZWFkaW5nIGFzc3VtcHRpb25zKS4KKwkgKi8KKwlEVUtfRChEVUtfRFBSSU5U KCJjYWxsIHByZXZlbnRlZCBiZWNhdXNlIGNhbGwgc3RhY2sgbGltaXQgcmVhY2hlZCIpKTsKKwlE VUtfRVJST1JfUkFOR0UodGhyLCBEVUtfU1RSX0NBTExTVEFDS19MSU1JVCk7CisJRFVLX1dPX05P UkVUVVJOKHJldHVybjspOworfQorCitEVUtfTE9DQUwgRFVLX0FMV0FZU19JTkxJTkUgdm9pZCBk dWtfX2NhbGxfY2FsbHN0YWNrX2xpbWl0X2NoZWNrKGR1a19odGhyZWFkICp0aHIpIHsKKwkvKiBU aGlzIGNoZWNrIGlzIGZvcmNpYmx5IGlubGluZWQgYmVjYXVzZSBpdCdzIHZlcnkgY2hlYXAgYW5k IGFsbW9zdAorCSAqIGFsd2F5cyBwYXNzZXMuICBUaGUgc2xvdyBwYXRoIGlzIGZvcmNpYmx5IG5v aW5saW5lLgorCSAqLworCWlmIChEVUtfTElLRUxZKHRoci0+Y2FsbHN0YWNrX3RvcCA8IERVS19V U0VfQ0FMTFNUQUNLX0xJTUlUKSkgeworCQlyZXR1cm47CisJfQorCisJZHVrX19jYWxsX2NhbGxz dGFja19saW1pdF9jaGVja19zbG93cGF0aCh0aHIpOworfQorCisvKgorICogIEludGVycnVwdCBj b3VudGVyIGZpeHVwIChmb3IgZGV2ZWxvcG1lbnQgb25seSkuCisgKi8KKworI2lmIGRlZmluZWQo RFVLX1VTRV9JTlRFUlJVUFRfQ09VTlRFUikgJiYgZGVmaW5lZChEVUtfVVNFX0RFQlVHKQorRFVL X0xPQ0FMIHZvaWQgZHVrX19pbnRlcnJ1cHRfZml4dXAoZHVrX2h0aHJlYWQgKnRociwgZHVrX2h0 aHJlYWQgKmVudHJ5X2N1cnJfdGhyZWFkKSB7CisJLyogQ3VycmVudGx5IHRoZSBieXRlY29kZSBl eGVjdXRvciBhbmQgZXhlY3V0b3IgaW50ZXJydXB0CisJICogaW5zdHJ1Y3Rpb24gY291bnRzIGFy ZSBvZmYgYmVjYXVzZSB3ZSBkb24ndCBleGVjdXRlIHRoZQorCSAqIGludGVycnVwdCBoYW5kbGVy IHdoZW4gd2UncmUgYWJvdXQgdG8gZXhpdCBmcm9tIHRoZSBpbml0aWFsCisJICogdXNlciBjYWxs IGludG8gRHVrdGFwZS4KKwkgKgorCSAqIElmIHdlIHdlcmUgdG8gZXhlY3V0ZSB0aGUgaW50ZXJy dXB0IGhhbmRsZXIgaGVyZSwgdGhlIGNvdW50cworCSAqIHdvdWxkIG1hdGNoLiAgWW91IGNhbiBl bmFibGUgdGhpcyBibG9jayBtYW51YWxseSB0byBjaGVjaworCSAqIHRoYXQgdGhpcyBpcyB0aGUg Y2FzZS4KKwkgKi8KKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhy LT5oZWFwICE9IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVSUlVQVF9ERUJVR19G SVhVUCkKKwlpZiAoZW50cnlfY3Vycl90aHJlYWQgPT0gTlVMTCkgeworCQl0aHItPmludGVycnVw dF9pbml0ID0gdGhyLT5pbnRlcnJ1cHRfaW5pdCAtIHRoci0+aW50ZXJydXB0X2NvdW50ZXI7CisJ CXRoci0+aGVhcC0+aW5zdF9jb3VudF9pbnRlcnJ1cHQgKz0gdGhyLT5pbnRlcnJ1cHRfaW5pdDsK KwkJRFVLX0REKERVS19ERFBSSU5UKCJkZWJ1ZyB0ZXN0OiB1cGRhdGVkIGludGVycnVwdCBjb3Vu dCBvbiBleGl0IHRvICIKKwkJICAgICAgICAgICAgICAgICAgICJ1c2VyIGNvZGUsIGluc3RydWN0 aW9uIGNvdW50czogZXhlY3V0b3I9JWxkLCBpbnRlcnJ1cHQ9JWxkIiwKKwkJICAgICAgICAgICAg ICAgICAgIChsb25nKSB0aHItPmhlYXAtPmluc3RfY291bnRfZXhlYywgKGxvbmcpIHRoci0+aGVh cC0+aW5zdF9jb3VudF9pbnRlcnJ1cHQpKTsKKwkJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmluc3Rf Y291bnRfZXhlYyA9PSB0aHItPmhlYXAtPmluc3RfY291bnRfaW50ZXJydXB0KTsKKwl9CisjZWxz ZQorCURVS19VTlJFRih0aHIpOworCURVS19VTlJFRihlbnRyeV9jdXJyX3RocmVhZCk7CisjZW5k aWYKK30KKyNlbmRpZgorCisvKgorICogIEFyZ3VtZW50cyBvYmplY3QgY3JlYXRpb24uCisgKgor ICogIENyZWF0aW5nIGFyZ3VtZW50cyBvYmplY3RzIGludm9sdmVzIG1hbnkgc21hbGwgZGV0YWls cywgc2VlIEU1IFNlY3Rpb24KKyAqICAxMC42IGZvciB0aGUgc3BlY2lmaWMgcmVxdWlyZW1lbnRz LiAgTXVjaCBvZiB0aGUgYXJndW1lbnRzIG9iamVjdCBleG90aWMKKyAqICBiZWhhdmlvciBpcyBp bXBsZW1lbnRlZCBpbiBkdWtfaG9iamVjdF9wcm9wcy5jLCBhbmQgaXMgZW5hYmxlZCBieSB0aGUK KyAqICBvYmplY3QgZmxhZyBEVUtfSE9CSkVDVF9GTEFHX0VYT1RJQ19BUkdVTUVOVFMuCisgKi8K KworRFVLX0xPQ0FMIHZvaWQgZHVrX19jcmVhdGVfYXJndW1lbnRzX29iamVjdChkdWtfaHRocmVh ZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf aG9iamVjdCAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX2hvYmplY3QgKnZhcmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX2lkeF90IGlkeF9hcmdzKSB7CisJZHVrX2hvYmplY3QgKmFyZzsgICAg ICAgICAgLyogJ2FyZ3VtZW50cycgKi8KKwlkdWtfaG9iamVjdCAqZm9ybWFsczsgICAgICAvKiBm b3JtYWxzIGZvciAnZnVuYycgKG1heSBiZSBOVUxMIGlmIGZ1bmMgaXMgYSBDIGZ1bmN0aW9uKSAq LworCWR1a19pZHhfdCBpX2FyZzsKKwlkdWtfaWR4X3QgaV9tYXA7CisJZHVrX2lkeF90IGlfbWFw cGVkbmFtZXM7CisJZHVrX2lkeF90IGlfZm9ybWFsczsKKwlkdWtfaWR4X3QgaV9hcmdiYXNlOwor CWR1a19pZHhfdCBuX2Zvcm1hbHM7CisJZHVrX2lkeF90IGlkeDsKKwlkdWtfaWR4X3QgbnVtX3N0 YWNrX2FyZ3M7CisJZHVrX2Jvb2xfdCBuZWVkX21hcDsKKworCURVS19BU1NFUlQodGhyICE9IE5V TEwpOworCURVS19BU1NFUlQoZnVuYyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNU X0lTX05PTkJPVU5EX0ZVTkNUSU9OKGZ1bmMpKTsKKwlEVUtfQVNTRVJUKHZhcmVudiAhPSBOVUxM KTsKKworCS8qIFsgLi4uIGZ1bmMgdGhpcyBhcmcxKEBpZHhfYXJncykgLi4uIGFyZ04gZW52b2Jq IF0KKwkgKiBbIGFyZzEoQGlkeF9hcmdzKSAuLi4gYXJnTiBlbnZvYmogXSAoZm9yIHRhaWxjYWxs cykKKwkgKi8KKworCW5lZWRfbWFwID0gMDsKKworCWlfYXJnYmFzZSA9IGlkeF9hcmdzOworCW51 bV9zdGFja19hcmdzID0gZHVrX2dldF90b3AodGhyKSAtIGlfYXJnYmFzZSAtIDE7CisJRFVLX0FT U0VSVChpX2FyZ2Jhc2UgPj0gMCk7CisJRFVLX0FTU0VSVChudW1fc3RhY2tfYXJncyA+PSAwKTsK KworCWR1a19wdXNoX2hvYmplY3QodGhyLCBmdW5jKTsKKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3No b3J0KHRociwgLTEsIERVS19TVFJJRFhfSU5UX0ZPUk1BTFMpOworCWZvcm1hbHMgPSBkdWtfZ2V0 X2hvYmplY3QodGhyLCAtMSk7CisJaWYgKGZvcm1hbHMpIHsKKwkJbl9mb3JtYWxzID0gKGR1a19p ZHhfdCkgZHVrX2dldF9sZW5ndGgodGhyLCAtMSk7CisJfSBlbHNlIHsKKwkJLyogVGhpcyBzaG91 bGRuJ3QgaGFwcGVuIHdpdGhvdXQgdGFtcGVyaW5nIG9mIGludGVybmFsCisJCSAqIHByb3BlcnRp ZXM6IGlmIGEgZnVuY3Rpb24gYWNjZXNzZXMgJ2FyZ3VtZW50cycsIF9Gb3JtYWxzCisJCSAqIGlz IGtlcHQuICBDaGVjayBmb3IgdGhlIGNhc2UgYW55d2F5IGluIGNhc2UgaW50ZXJuYWwKKwkJICog cHJvcGVydGllcyBoYXZlIGJlZW4gbW9kaWZpZWQgbWFudWFsbHkuCisJCSAqLworCQlEVUtfRChE VUtfRFBSSU5UKCJfRm9ybWFscyBpcyB1bmRlZmluZWQgd2hlbiBjcmVhdGluZyBhcmd1bWVudHMs IHVzZSBuX2Zvcm1hbHMgPT0gMCIpKTsKKwkJbl9mb3JtYWxzID0gMDsKKwl9CisJZHVrX3JlbW92 ZV9tMih0aHIpOyAgLyogbGVhdmUgZm9ybWFscyBvbiBzdGFjayBmb3IgbGF0ZXIgdXNlICovCisJ aV9mb3JtYWxzID0gZHVrX3JlcXVpcmVfdG9wX2luZGV4KHRocik7CisKKwlEVUtfQVNTRVJUKG5f Zm9ybWFscyA+PSAwKTsKKwlEVUtfQVNTRVJUKGZvcm1hbHMgIT0gTlVMTCB8fCBuX2Zvcm1hbHMg PT0gMCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZnVuYz0lIU8sIGZvcm1hbHM9JSFPLCBu X2Zvcm1hbHM9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgZnVu YywgKGR1a19oZWFwaGRyICopIGZvcm1hbHMsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IG5fZm9ybWFscykpOworCisJLyogWyAuLi4gZm9ybWFscyBdICovCisKKwkvKgorCSAqICBDcmVh dGUgcmVxdWlyZWQgb2JqZWN0czoKKwkgKiAgICAtICdhcmd1bWVudHMnIG9iamVjdDogYXJyYXkt bGlrZSwgYnV0IG5vdCBhbiBhcnJheQorCSAqICAgIC0gJ21hcCcgb2JqZWN0OiBpbnRlcm5hbCBv YmplY3QsIHRpZWQgdG8gJ2FyZ3VtZW50cycKKwkgKiAgICAtICdtYXBwZWROYW1lcycgb2JqZWN0 OiB0ZW1wb3JhcnkgdmFsdWUgdXNlZCBkdXJpbmcgY29uc3RydWN0aW9uCisJICovCisKKwlhcmcg PSBkdWtfcHVzaF9vYmplY3RfaGVscGVyKHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RSRUZTIHwKKwkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfQVJSQVlfUEFSVCB8CisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFT U19BUkdVTUVOVFMpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0JJRFhfT0JK RUNUX1BST1RPVFlQRSk7CisJRFVLX0FTU0VSVChhcmcgIT0gTlVMTCk7CisJKHZvaWQpIGR1a19w dXNoX29iamVjdF9oZWxwZXIodGhyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX0hPQkpFQ1RfRkxBR19GQVNUUkVGUyB8CisJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX0hPQkpFQ1RfQ0xBU1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfT0JKRUNU KSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7ICAvKiBubyBwcm90b3R5cGUg Ki8KKwkodm9pZCkgZHVrX3B1c2hfb2JqZWN0X2hlbHBlcih0aHIsCisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1RfRkxBR19FWFRFTlNJQkxFIHwKKwkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0ZBU1RSRUZTIHwKKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9DTEFTU19BU19GTEFHUyhEVUtfSE9C SkVDVF9DTEFTU19PQkpFQ1QpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsg IC8qIG5vIHByb3RvdHlwZSAqLworCWlfYXJnID0gZHVrX2dldF90b3AodGhyKSAtIDM7CisJaV9t YXAgPSBpX2FyZyArIDE7CisJaV9tYXBwZWRuYW1lcyA9IGlfYXJnICsgMjsKKworCS8qIFsgLi4u IGZvcm1hbHMgYXJndW1lbnRzIG1hcCBtYXBwZWROYW1lcyBdICovCisKKwlEVUtfREREKERVS19E RERQUklOVCgiY3JlYXRlZCBhcmd1bWVudHMgcmVsYXRlZCBvYmplY3RzOiAiCisJICAgICAgICAg ICAgICAgICAgICAgImFyZ3VtZW50cyBhdCBpbmRleCAlbGQgLT4gJSFPICIKKwkgICAgICAgICAg ICAgICAgICAgICAibWFwIGF0IGluZGV4ICVsZCAtPiAlIU8gIgorCSAgICAgICAgICAgICAgICAg ICAgICJtYXBwZWRuYW1lcyBhdCBpbmRleCAlbGQgLT4gJSFPIiwKKwkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgaV9hcmcsIChkdWtfaGVhcGhkciAqKSBkdWtfZ2V0X2hvYmplY3QodGhyLCBp X2FyZyksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGlfbWFwLCAoZHVrX2hlYXBoZHIg KikgZHVrX2dldF9ob2JqZWN0KHRociwgaV9tYXApLAorCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBpX21hcHBlZG5hbWVzLCAoZHVrX2hlYXBoZHIgKikgZHVrX2dldF9ob2JqZWN0KHRociwg aV9tYXBwZWRuYW1lcykpKTsKKworCS8qCisJICogIEluaXQgYXJndW1lbnRzIHByb3BlcnRpZXMs IG1hcCwgZXRjLgorCSAqLworCisJZHVrX3B1c2hfaW50KHRociwgbnVtX3N0YWNrX2FyZ3MpOwor CWR1a194ZGVmX3Byb3Bfc3RyaWR4KHRociwgaV9hcmcsIERVS19TVFJJRFhfTEVOR1RILCBEVUtf UFJPUERFU0NfRkxBR1NfV0MpOworCisJLyoKKwkgKiAgSW5pdCBhcmd1bWVudCByZWxhdGVkIHBy b3BlcnRpZXMuCisJICovCisKKwkvKiBzdGVwIDExICovCisJaWR4ID0gbnVtX3N0YWNrX2FyZ3Mg LSAxOworCXdoaWxlIChpZHggPj0gMCkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiYXJnIGlk eCAlbGQsIGFyZ2Jhc2U9JWxkLCBhcmdpZHg9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIGlkeCwgKGxvbmcpIGlfYXJnYmFzZSwgKGxvbmcpIChpX2FyZ2Jhc2UgKyBpZHgpKSk7 CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImRlZmluZSBhcmd1bWVudHNbJWxkXT1hcmciLCAo bG9uZykgaWR4KSk7CisJCWR1a19kdXAodGhyLCBpX2FyZ2Jhc2UgKyBpZHgpOworCQlkdWtfeGRl Zl9wcm9wX2luZGV4X3dlYyh0aHIsIGlfYXJnLCAoZHVrX3VhcnJpZHhfdCkgaWR4KTsKKwkJRFVL X0RERChEVUtfREREUFJJTlQoImRlZmluZWQgYXJndW1lbnRzWyVsZF09YXJnIiwgKGxvbmcpIGlk eCkpOworCisJCS8qIHN0ZXAgMTEuYyBpcyByZWxldmFudCBvbmx5IGlmIG5vbi1zdHJpY3QgKGNo ZWNrZWQgaW4gMTEuYy5paSkgKi8KKwkJaWYgKCFEVUtfSE9CSkVDVF9IQVNfU1RSSUNUKGZ1bmMp ICYmIGlkeCA8IG5fZm9ybWFscykgeworCQkJRFVLX0FTU0VSVChmb3JtYWxzICE9IE5VTEwpOwor CisJCQlEVUtfREREKERVS19ERERQUklOVCgic3RyaWN0IGZ1bmN0aW9uLCBpbmRleCB3aXRoaW4g Zm9ybWFscyAoJWxkIDwgJWxkKSIsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaWR4 LCAobG9uZykgbl9mb3JtYWxzKSk7CisKKwkJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIsIGlfZm9y bWFscywgKGR1a191YXJyaWR4X3QpIGlkeCk7CisJCQlEVUtfQVNTRVJUKGR1a19pc19zdHJpbmco dGhyLCAtMSkpOworCisJCQlkdWtfZHVwX3RvcCh0aHIpOyAgLyogWyAuLi4gbmFtZSBuYW1lIF0g Ki8KKworCQkJaWYgKCFkdWtfaGFzX3Byb3AodGhyLCBpX21hcHBlZG5hbWVzKSkgeworCQkJCS8q IHN0ZXBzIDExLmMuaWkuMSAtIDExLmMuaWkuNCwgYnV0IG91ciBpbnRlcm5hbCBib29rLWtlZXBp bmcKKwkJCQkgKiBkaWZmZXJzIGZyb20gdGhlIHJlZmVyZW5jZSBtb2RlbAorCQkJCSAqLworCisJ CQkJLyogWyAuLi4gbmFtZSBdICovCisKKwkJCQluZWVkX21hcCA9IDE7CisKKwkJCQlEVUtfRERE KERVS19ERERQUklOVCgic2V0IG1hcHBlZG5hbWVzWyVzXT0lbGQiLAorCQkJCSAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBjaGFyICopIGR1a19nZXRfc3RyaW5nKHRociwgLTEpLAorCQkJCSAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBpZHgpKTsKKwkJCQlkdWtfZHVwX3RvcCh0aHIpOyAg ICAgICAgICAgICAgICAgICAgICAvKiBuYW1lICovCisJCQkJKHZvaWQpIGR1a19wdXNoX3VpbnRf dG9faHN0cmluZyh0aHIsIChkdWtfdWludF90KSBpZHgpOyAgLyogaW5kZXggKi8KKwkJCQlkdWtf eGRlZl9wcm9wX3dlYyh0aHIsIGlfbWFwcGVkbmFtZXMpOyAgLyogb3V0IG9mIHNwZWMsIG11c3Qg YmUgY29uZmlndXJhYmxlICovCisKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgic2V0IG1hcFsl bGRdPSVzIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgaWR4LAorCQkJCSAgICAg ICAgICAgICAgICAgICAgIGR1a19nZXRfc3RyaW5nKHRociwgLTEpKSk7CisJCQkJZHVrX2R1cF90 b3AodGhyKTsgICAgICAgICAvKiBuYW1lICovCisJCQkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWMo dGhyLCBpX21hcCwgKGR1a191YXJyaWR4X3QpIGlkeCk7ICAvKiBvdXQgb2Ygc3BlYywgbXVzdCBi ZSBjb25maWd1cmFibGUgKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogZHVrX2hhc19wcm9wKCkgcG9w cGVkIHRoZSBzZWNvbmQgJ25hbWUnICovCisJCQl9CisKKwkJCS8qIFsgLi4uIG5hbWUgXSAqLwor CQkJZHVrX3BvcCh0aHIpOyAgLyogcG9wICduYW1lJyAqLworCQl9CisKKwkJaWR4LS07CisJfQor CisJRFVLX0RERChEVUtfREREUFJJTlQoImFjdHVhbCBhcmd1bWVudHMgcHJvY2Vzc2VkIikpOwor CisJLyogc3RlcCAxMiAqLworCWlmIChuZWVkX21hcCkgeworCQlEVUtfREREKERVS19ERERQUklO VCgiYWRkaW5nICdtYXAnIGFuZCAndmFyZW52JyB0byBhcmd1bWVudHMgb2JqZWN0IikpOworCisJ CS8qIHNob3VsZCBuZXZlciBoYXBwZW4gZm9yIGEgc3RyaWN0IGNhbGxlZSAqLworCQlEVUtfQVNT RVJUKCFEVUtfSE9CSkVDVF9IQVNfU1RSSUNUKGZ1bmMpKTsKKworCQlkdWtfZHVwKHRociwgaV9t YXApOworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeCh0aHIsIGlfYXJnLCBEVUtfU1RSSURYX0lOVF9N QVAsIERVS19QUk9QREVTQ19GTEFHU19OT05FKTsgIC8qIG91dCBvZiBzcGVjLCBkb24ndCBjYXJl ICovCisKKwkJLyogVGhlIHZhcmlhYmxlIGVudmlyb25tZW50IGZvciBtYWdpYyB2YXJpYWJsZSBi aW5kaW5ncyBuZWVkcyB0byBiZQorCQkgKiBnaXZlbiBieSB0aGUgY2FsbGVyIGFuZCByZWNvcmRl ZCBpbiB0aGUgYXJndW1lbnRzIG9iamVjdC4KKwkJICoKKwkJICogU2VlIEU1IFNlY3Rpb24gMTAu NiwgdGhlIGNyZWF0aW9uIG9mIHNldHRlcnMvZ2V0dGVycy4KKwkJICoKKwkJICogVGhlIHZhcmlh YmxlIGVudmlyb25tZW50IGFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjYWxsZWUsIHNvCisJ CSAqIGFuIGV4cGxpY2l0IChpbnRlcm5hbCkgY2FsbGVlIHByb3BlcnR5IGlzIG5vdCBuZWVkZWQu CisJCSAqLworCisJCWR1a19wdXNoX2hvYmplY3QodGhyLCB2YXJlbnYpOworCQlkdWtfeGRlZl9w cm9wX3N0cmlkeCh0aHIsIGlfYXJnLCBEVUtfU1RSSURYX0lOVF9WQVJFTlYsIERVS19QUk9QREVT Q19GTEFHU19OT05FKTsgIC8qIG91dCBvZiBzcGVjLCBkb24ndCBjYXJlICovCisJfQorCisJLyog c3RlcHMgMTMtMTQgKi8KKwlpZiAoRFVLX0hPQkpFQ1RfSEFTX1NUUklDVChmdW5jKSkgeworCQkv KiBDYWxsZWUvY2FsbGVyIGFyZSB0aHJvd2VycyBhbmQgYXJlIG5vdCBkZWxldGFibGUgZXRjLiAg VGhleQorCQkgKiBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhcyB2aXJ0dWFsIHByb3BlcnRpZXMsIGJ1 dCBjdXJyZW50bHkKKwkJICogdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgdmlydHVhbCBwcm9wZXJ0 aWVzIHdoaWNoIGFyZSBhY2Nlc3NvcnMKKwkJICogKG9ubHkgcGxhaW4gdmlydHVhbCBwcm9wZXJ0 aWVzKS4gIFRoaXMgd291bGQgbm90IGJlIGRpZmZpY3VsdAorCQkgKiB0byBjaGFuZ2UgaW4gZHVr X2hvYmplY3RfcHJvcHMsIGJ1dCB3ZSBjYW4gbWFrZSB0aGUgdGhyb3dlcnMKKwkJICogbm9ybWFs LCBjb25jcmV0ZSBwcm9wZXJ0aWVzIGp1c3QgYXMgZWFzaWx5LgorCQkgKgorCQkgKiBOb3RlIHRo YXQgdGhlIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhhdCB0aGUgKnNhbWUqIHRocm93ZXIKKwkJ ICogYnVpbHQtaW4gb2JqZWN0IGlzIHVzZWQgaGVyZSEgIFNlZSBFNSBTZWN0aW9uIDEwLjYgbWFp bgorCQkgKiBhbGdvcml0bSwgc3RlcCAxNCwgYW5kIFNlY3Rpb24gMTMuMi4zIHdoaWNoIGRlc2Ny aWJlcyB0aGUKKwkJICogdGhyb3dlci4gIFNlZSB0ZXN0IGNhc2UgdGVzdC1hcmd1bWVudHMtdGhy b3dlcnMuanMuCisJCSAqLworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJzdHJpY3QgZnVuY3Rp b24sIHNldHRpbmcgY2FsbGVyL2NhbGxlZSB0byB0aHJvd2VycyIpKTsKKworCQlkdWtfeGRlZl9w cm9wX3N0cmlkeF90aHJvd2VyKHRociwgaV9hcmcsIERVS19TVFJJRFhfQ0FMTEVSKTsKKwkJZHVr X3hkZWZfcHJvcF9zdHJpZHhfdGhyb3dlcih0aHIsIGlfYXJnLCBEVUtfU1RSSURYX0NBTExFRSk7 CisJfSBlbHNlIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIm5vbi1zdHJpY3QgZnVuY3Rpb24s IHNldHRpbmcgY2FsbGVlIHRvIGFjdHVhbCB2YWx1ZSIpKTsKKwkJZHVrX3B1c2hfaG9iamVjdCh0 aHIsIGZ1bmMpOworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeCh0aHIsIGlfYXJnLCBEVUtfU1RSSURY X0NBTExFRSwgRFVLX1BST1BERVNDX0ZMQUdTX1dDKTsKKwl9CisKKwkvKiBzZXQgZXhvdGljIGJl aGF2aW9yIG9ubHkgYWZ0ZXIgd2UncmUgZG9uZSAqLworCWlmIChuZWVkX21hcCkgeworCQkvKiBF eG90aWMgYmVoYXZpb3JzIGFyZSBvbmx5IGVuYWJsZWQgZm9yIGFyZ3VtZW50cyBvYmplY3RzCisJ CSAqIHdoaWNoIGhhdmUgYSBwYXJhbWV0ZXIgbWFwIChzZWUgRTUgU2VjdGlvbiAxMC42IG1haW4K KwkJICogYWxnb3JpdGhtLCBzdGVwIDEyKS4KKwkJICoKKwkJICogSW4gcGFydGljdWxhciwgYSBu b24tc3RyaWN0IGFyZ3VtZW50cyBvYmplY3Qgd2l0aCBubworCQkgKiBtYXBwZWQgZm9ybWFscyBk b2VzICpOT1QqIGdldCBleG90aWMgYmVoYXZpb3IsIGV2ZW4KKwkJICogZm9yIGUuZy4gImNhbGxl ciIgcHJvcGVydHkuICBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUKKwkJICogYnV0IHNlZW1z IHRvIGJlIHRoZSBjYXNlLgorCQkgKi8KKworCQkvKiBjYW5ub3QgYmUgc3RyaWN0IChuZXZlciBt YXBwZWQgdmFyaWFibGVzKSAqLworCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfU1RSSUNU KGZ1bmMpKTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgiZW5hYmxpbmcgZXhvdGljIGJlaGF2 aW9yIGZvciBhcmd1bWVudHMgb2JqZWN0IikpOworCQlEVUtfSE9CSkVDVF9TRVRfRVhPVElDX0FS R1VNRU5UUyhhcmcpOworCX0gZWxzZSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJub3QgZW5h YmxpbmcgZXhvdGljIGJlaGF2aW9yIGZvciBhcmd1bWVudHMgb2JqZWN0IikpOworCX0KKworCURV S19EREQoRFVLX0RERFBSSU5UKCJmaW5hbCBhcmd1bWVudHMgcmVsYXRlZCBvYmplY3RzOiAiCisJ ICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyBhdCBpbmRleCAlbGQgLT4gJSFPICIKKwkg ICAgICAgICAgICAgICAgICAgICAibWFwIGF0IGluZGV4ICVsZCAtPiAlIU8gIgorCSAgICAgICAg ICAgICAgICAgICAgICJtYXBwZWRuYW1lcyBhdCBpbmRleCAlbGQgLT4gJSFPIiwKKwkgICAgICAg ICAgICAgICAgICAgICAobG9uZykgaV9hcmcsIChkdWtfaGVhcGhkciAqKSBkdWtfZ2V0X2hvYmpl Y3QodGhyLCBpX2FyZyksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGlfbWFwLCAoZHVr X2hlYXBoZHIgKikgZHVrX2dldF9ob2JqZWN0KHRociwgaV9tYXApLAorCSAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBpX21hcHBlZG5hbWVzLCAoZHVrX2hlYXBoZHIgKikgZHVrX2dldF9ob2Jq ZWN0KHRociwgaV9tYXBwZWRuYW1lcykpKTsKKworCS8qIFsgYXJncyhuKSBlbnZvYmogZm9ybWFs cyBhcmd1bWVudHMgbWFwIG1hcHBlZG5hbWVzIF0gKi8KKworCWR1a19wb3BfMih0aHIpOworCWR1 a19yZW1vdmVfbTIodGhyKTsKKworCS8qIFsgYXJncyhuKSBlbnZvYmogYXJndW1lbnRzIF0gKi8K K30KKworLyogSGVscGVyIGZvciBjcmVhdGluZyB0aGUgYXJndW1lbnRzIG9iamVjdCBhbmQgYWRk aW5nIGl0IHRvIHRoZSBlbnYgcmVjb3JkCisgKiBvbiB0b3Agb2YgdGhlIHZhbHVlIHN0YWNrLgor ICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2hhbmRsZV9jcmVhdGVhcmdzX2Zvcl9jYWxsKGR1a19o dGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGR1a19ob2JqZWN0ICpmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqZW52LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X2FyZ3MpIHsKKwlEVUtfREREKERV S19ERERQUklOVCgiY3JlYXRpbmcgYXJndW1lbnRzIG9iamVjdCBmb3IgZnVuY3Rpb24gY2FsbCIp KTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoZnVuYyAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKGVudiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hB U19DUkVBVEVBUkdTKGZ1bmMpKTsKKworCS8qIFsgLi4uIGFyZzEgLi4uIGFyZ04gZW52b2JqIF0g Ki8KKworCWR1a19fY3JlYXRlX2FyZ3VtZW50c19vYmplY3QodGhyLAorCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnVuYywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudiwK KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeF9hcmdzKTsKKworCS8qIFsgLi4uIGFy ZzEgLi4uIGFyZ04gZW52b2JqIGFyZ29iaiBdICovCisKKwlkdWtfeGRlZl9wcm9wX3N0cmlkeF9z aG9ydCh0aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgLTIsCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX1NUUklEWF9MQ19BUkdVTUVOVFMsCisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0hPQkpFQ1RfSEFTX1NUUklDVChmdW5jKSA/IERVS19QUk9QREVTQ19G TEFHU19FIDogICAvKiBzdHJpY3Q6IG5vbi1kZWxldGFibGUsIG5vbi13cml0YWJsZSAqLworCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfUFJPUERFU0NfRkxBR1NfV0UpOyAgLyogbm9uLXN0cmljdDogbm9uLWRlbGV0YWJsZSwgd3Jp dGFibGUgKi8KKwkvKiBbIC4uLiBhcmcxIC4uLiBhcmdOIGVudm9iaiBdICovCit9CisKKy8qCisg KiAgSGVscGVycyBmb3IgY29uc3RydWN0b3IgY2FsbCBoYW5kbGluZy4KKyAqCisgKiAgVGhlcmUg YXJlIHR3byBbW0NvbnN0cnVjdF1dIG9wZXJhdGlvbnMgaW4gdGhlIHNwZWNpZmljYXRpb246Cisg KgorICogICAgLSBFNSBTZWN0aW9uIDEzLjIuMjogZm9yIEZ1bmN0aW9uIG9iamVjdHMKKyAqICAg IC0gRTUgU2VjdGlvbiAxNS4zLjQuNS4yOiBmb3IgImJvdW5kIiBGdW5jdGlvbiBvYmplY3RzCisg KgorICogIFRoZSBjaGFpbiBvZiBib3VuZCBmdW5jdGlvbnMgaXMgcmVzb2x2ZWQgaW4gU2VjdGlv biAxNS4zLjQuNS4yLAorICogIHdpdGggYXJndW1lbnRzICJwaWxpbmcgdXAiIHVudGlsIHRoZSBb W0NvbnN0cnVjdF1dIGludGVybmFsCisgKiAgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgZmluYWws IGFjdHVhbCBGdW5jdGlvbiBvYmplY3QuICBOb3RlCisgKiAgdGhhdCB0aGUgInByb3RvdHlwZSIg cHJvcGVydHkgaXMgbG9va2VkIHVwICpvbmx5KiBmcm9tIHRoZQorICogIGZpbmFsIG9iamVjdCwg KmJlZm9yZSogY2FsbGluZyB0aGUgY29uc3RydWN0b3IuCisgKgorICogIFNpbmNlIER1a3RhcGUg Mi4yIGJvdW5kIGZ1bmN0aW9ucyBhcmUgcmVwcmVzZW50ZWQgd2l0aCB0aGUKKyAqICBkdWtfaGJv dW5kZnVuYyBpbnRlcm5hbCB0eXBlLCBhbmQgYm91bmQgZnVuY3Rpb24gY2hhaW5zIGFyZQorICog IGNvbGxhcHNlZCB3aGVuIGEgYm91bmQgZnVuY3Rpb24gaXMgY3JlYXRlZC4gIEFzIGEgcmVzdWx0 LCB0aGUKKyAqICBkaXJlY3QgdGFyZ2V0IG9mIGEgZHVrX2hib3VuZGZ1bmMgaXMgYWx3YXlzIG5v bi1ib3VuZCBhbmQgdGhlCisgKiAgdGhpcy9hcmd1bWVudCBsaXN0cyBoYXZlIGJlZW4gcmVzb2x2 ZWQuCisgKgorICogIFdoZW4gY29uc3RydWN0aW5nIG5ldyBBcnJheSBpbnN0YW5jZXMsIGFuIHVu bmVjZXNzYXJ5IG9iamVjdCBpcworICogIGNyZWF0ZWQgYW5kIGRpc2NhcmRlZCBub3c6IHRoZSBz dGFuZGFyZCBbW0NvbnN0cnVjdF1dIGNyZWF0ZXMgYW4KKyAqICBvYmplY3QsIGFuZCBjYWxscyB0 aGUgQXJyYXkgY29uc3RydWN0b3IuICBUaGUgQXJyYXkgY29uc3RydWN0b3IKKyAqICByZXR1cm5z IGFuIEFycmF5IGluc3RhbmNlLCB3aGljaCBpcyB1c2VkIGFzIHRoZSByZXN1bHQgdmFsdWUgZm9y CisgKiAgdGhlICJuZXciIG9wZXJhdGlvbjsgdGhlIG9iamVjdCBjcmVhdGVkIGJlZm9yZSB0aGUg QXJyYXkgY29uc3RydWN0b3IKKyAqICBjYWxsIGlzIGRpc2NhcmRlZC4KKyAqCisgKiAgVGhpcyB3 b3VsZCBiZSBlYXN5IHRvIGZpeCwgZS5nLiBieSBrbm93aW5nIHRoYXQgdGhlIEFycmF5IGNvbnN0 cnVjdG9yCisgKiAgd2lsbCBhbHdheXMgY3JlYXRlIGEgcmVwbGFjZW1lbnQgb2JqZWN0IGFuZCBz a2lwIGNyZWF0aW5nIHRoZSBmYWxsYmFjaworICogIG9iamVjdCBpbiB0aGF0IGNhc2UuCisgKi8K KworLyogVXBkYXRlIGRlZmF1bHQgaW5zdGFuY2UgcHJvdG90eXBlIGZvciBjb25zdHJ1Y3RvciBj YWxsLiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX191cGRhdGVfZGVmYXVsdF9pbnN0YW5jZV9wcm90 byhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4X2Z1bmMpIHsKKwlkdWtfaG9iamVjdCAq cHJvdG87CisJZHVrX2hvYmplY3QgKmZhbGxiYWNrOworCisJRFVLX0FTU0VSVChkdWtfaXNfY29u c3RydWN0YWJsZSh0aHIsIGlkeF9mdW5jKSk7CisKKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0 KHRociwgaWR4X2Z1bmMsIERVS19TVFJJRFhfUFJPVE9UWVBFKTsKKwlwcm90byA9IGR1a19nZXRf aG9iamVjdCh0aHIsIC0xKTsKKwlpZiAocHJvdG8gPT0gTlVMTCkgeworCQlEVUtfREREKERVS19E RERQUklOVCgiY29uc3RydWN0b3IgaGFzIG5vICdwcm90b3R5cGUnIHByb3BlcnR5LCBvciB2YWx1 ZSBub3QgYW4gb2JqZWN0ICIKKwkJICAgICAgICAgICAgICAgICAgICAgIi0+IGxlYXZlIHN0YW5k YXJkIE9iamVjdCBwcm90b3R5cGUgYXMgZmFsbGJhY2sgcHJvdG90eXBlIikpOworCX0gZWxzZSB7 CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJjb25zdHJ1Y3RvciBoYXMgJ3Byb3RvdHlwZScgcHJv cGVydHkgd2l0aCBvYmplY3QgdmFsdWUgIgorCQkgICAgICAgICAgICAgICAgICAgICAiLT4gc2V0 IGZhbGxiYWNrIHByb3RvdHlwZSB0byB0aGF0IHZhbHVlOiAlIWlPIiwgKGR1a19oZWFwaGRyICop IHByb3RvKSk7CisJCS8qIE9yaWdpbmFsIGZhbGxiYWNrIChkZWZhdWx0IGluc3RhbmNlKSBpcyB1 bnRvdWNoZWQgd2hlbgorCQkgKiByZXNvbHZpbmcgYm91bmQgZnVuY3Rpb25zIGV0Yy4KKwkJICov CisJCWZhbGxiYWNrID0gZHVrX2tub3duX2hvYmplY3QodGhyLCBpZHhfZnVuYyArIDEpOworCQlE VUtfQVNTRVJUKGZhbGxiYWNrICE9IE5VTEwpOworCQlEVUtfSE9CSkVDVF9TRVRfUFJPVE9UWVBF X1VQRFJFRih0aHIsIGZhbGxiYWNrLCBwcm90byk7CisJfQorCWR1a19wb3AodGhyKTsKK30KKwor LyogUG9zdHByb2Nlc3M6IHJldHVybiB2YWx1ZSBzcGVjaWFsIGhhbmRsaW5nLCBlcnJvciBhdWdt ZW50YXRpb24uICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfY2FsbF9jb25zdHJ1Y3RfcG9zdHBy b2Nlc3MoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX3VpbnRfdCBwcm94eV9pbnZhcmlhbnQp IHsKKwkvKiBVc2UgZWl0aGVyIGZhbGxiYWNrIChkZWZhdWx0IGluc3RhbmNlKSBvciByZXR2YWwg ZGVwZW5kaW5nCisJICogb24gcmV0dmFsIHR5cGUuICBOZWVkcyB0byBiZSBjYWxsZWQgYmVmb3Jl IHVud2luZCBiZWNhdXNlCisJICogdGhlIGRlZmF1bHQgaW5zdGFuY2UgaXMgcmVhZCBmcm9tIHRo ZSBjdXJyZW50IChpbW11dGFibGUpCisJICogJ3RoaXMnIGJpbmRpbmcuCisJICoKKwkgKiBGb3Ig UHJveHkgJ2NvbnN0cnVjdCcgY2FsbHMgdGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFuCisJICog T2JqZWN0ICh3ZSBhY2NlcHQgb2JqZWN0LWxpa2UgdmFsdWVzIGxpa2UgYnVmZmVycyBhbmQKKwkg KiBsaWdodGZ1bmNzIHRvbykuICBJZiBub3QsIFR5cGVFcnJvci4KKwkgKi8KKwlpZiAoZHVrX2No ZWNrX3R5cGVfbWFzayh0aHIsIC0xLCBEVUtfVFlQRV9NQVNLX09CSkVDVCB8CisJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19CVUZGRVIgfAorCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfTElHSFRGVU5DKSkgeworCQlE VUtfREREKERVS19ERERQUklOVCgicmVwbGFjZW1lbnQgdmFsdWUiKSk7CisJfSBlbHNlIHsKKwkJ aWYgKERVS19VTkxJS0VMWShwcm94eV9pbnZhcmlhbnQgIT0gMFUpKSB7CisJCQkvKiBQcm94eSAn Y29uc3RydWN0JyByZXR1cm4gdmFsdWUgaW52YXJpYW50IHZpb2xhdGVkLiAqLworCQkJRFVLX0VS Uk9SX1RZUEVfSU5WQUxJRF9UUkFQX1JFU1VMVCh0aHIpOworCQkJRFVLX1dPX05PUkVUVVJOKHJl dHVybjspOworCQl9CisJCS8qIFhYWDogZGlyZWN0IHZhbHVlIHN0YWNrIGFjY2VzcyAqLworCQlk dWtfcG9wKHRocik7CisJCWR1a19wdXNoX3RoaXModGhyKTsKKwl9CisKKyNpZiBkZWZpbmVkKERV S19VU0VfQVVHTUVOVF9FUlJPUl9DUkVBVEUpCisJLyogQXVnbWVudCBjcmVhdGVkIGVycm9ycyB1 cG9uIGNyZWF0aW9uLCBub3Qgd2hlbiB0aGV5IGFyZSB0aHJvd24gb3IKKwkgKiByZXRocm93bi4g IF9fRklMRV9fIGFuZCBfX0xJTkVfXyBhcmUgbm90IGRlc2lyYWJsZSBoZXJlOyB0aGUgY2FsbAor CSAqIHN0YWNrIHJlZmxlY3RzIHRoZSBjYWxsZXIgd2hpY2ggaXMgY29ycmVjdC4gIFNraXAgdG9w bW9zdCwgdW53b3VuZAorCSAqIGFjdGl2YXRpb24gd2hlbiBjcmVhdGluZyBhIHRyYWNlYmFjay4g IElmIHRoci0+cHRyX2N1cnJfcGMgd2FzICE9CisJICogTlVMTCB3ZSdkIG5lZWQgdG8gc3luYyB0 aGUgY3VycmVudCBQQyBzbyB0aGF0IHRoZSB0cmFjZWJhY2sgY29tZXMKKwkgKiBvdXQgcmlnaHQ7 IGhvd2V2ZXIgaXQgaXMgYWx3YXlzIHN5bmNlZCBoZXJlIHNvIGp1c3QgYXNzZXJ0IGZvciBpdC4K KwkgKi8KKwlEVUtfQVNTRVJUKHRoci0+cHRyX2N1cnJfcGMgPT0gTlVMTCk7CisJZHVrX2Vycl9h dWdtZW50X2Vycm9yX2NyZWF0ZSh0aHIsIHRociwgTlVMTCwgMCwgRFVLX0FVR01FTlRfRkxBR19O T0JMQU1FX0ZJTEVMSU5FIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfQVVHTUVOVF9GTEFHX1NLSVBfT05FKTsKKyNlbmRpZgorfQorCisvKgor ICogIEhlbHBlciBmb3IgaGFuZGxpbmcgYSBib3VuZCBmdW5jdGlvbiB3aGVuIGEgY2FsbCBpcyBi ZWluZyBtYWRlLgorICoKKyAqICBBc3N1bWVzIHRoYXQgYm91bmQgZnVuY3Rpb24gY2hhaW5zIGhh dmUgYmVlbiAiY29sbGFwc2VkIiBzbyB0aGF0IGVpdGhlcgorICogIHRoZSB0YXJnZXQgaXMgbm9u LWJvdW5kIG9yIHRoZXJlIGlzIG9uZSBib3VuZCBmdW5jdGlvbiB0aGF0IHBvaW50cyB0byBhCisg KiAgbm9uYm91bmQgdGFyZ2V0LgorICoKKyAqICBQcmVwZW5kcyB0aGUgYm91bmQgYXJndW1lbnRz IHRvIHRoZSB2YWx1ZSBzdGFjayAoYXQgaWR4X2Z1bmMgKyAyKS4KKyAqICBUaGUgJ3RoaXMnIGJp bmRpbmcgaXMgYWxzbyB1cGRhdGVkIGlmIG5lY2Vzc2FyeSAoYXQgaWR4X2Z1bmMgKyAxKS4KKyAq ICBOb3RlIHRoYXQgZm9yIGNvbnN0cnVjdG9yIGNhbGxzIHRoZSAndGhpcycgYmluZGluZyBpcyBu ZXZlciB1cGRhdGVkIGJ5CisgKiAgW1tCb3VuZFRoaXNdXS4KKyAqLworCitEVUtfTE9DQUwgdm9p ZCBkdWtfX2hhbmRsZV9ib3VuZF9jaGFpbl9mb3JfY2FsbChkdWtfaHRocmVhZCAqdGhyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IGlk eF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX2Jvb2xfdCBpc19jb25zdHJ1Y3Rvcl9jYWxsKSB7CisJZHVrX3R2YWwgKnR2X2Z1bmM7CisJ ZHVrX2hvYmplY3QgKmZ1bmM7CisJZHVrX2lkeF90IGxlbjsKKworCURVS19BU1NFUlQodGhyICE9 IE5VTEwpOworCisJLyogT24gZW50cnksIGl0ZW0gYXQgaWR4X2Z1bmMgaXMgYSBib3VuZCwgbm9u LWxpZ2h0d2VpZ2h0IGZ1bmN0aW9uLAorCSAqIGJ1dCB3ZSBkb24ndCByZWx5IG9uIHRoYXQgYmVs b3cuCisJICovCisKKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gaWR4X2Z1bmMgKyAy KTsKKworCXR2X2Z1bmMgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4X2Z1bmMpOworCURVS19B U1NFUlQodHZfZnVuYyAhPSBOVUxMKTsKKworCWlmIChEVUtfVFZBTF9JU19PQkpFQ1QodHZfZnVu YykpIHsKKwkJZnVuYyA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHZfZnVuYyk7CisKKwkJLyogWFhY OiBzZXBhcmF0ZSBoZWxwZXIgZnVuY3Rpb24sIG91dCBvZiBmYXN0IHBhdGg/ICovCisJCWlmIChE VUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKGZ1bmMpKSB7CisJCQlkdWtfaGJvdW5kZnVuYyAqaF9i b3VuZDsKKwkJCWR1a190dmFsICp0dl9hcmdzOworCQkJZHVrX3R2YWwgKnR2X2dhcDsKKworCQkJ aF9ib3VuZCA9IChkdWtfaGJvdW5kZnVuYyAqKSAodm9pZCAqKSBmdW5jOworCQkJdHZfYXJncyA9 IGhfYm91bmQtPmFyZ3M7CisJCQlsZW4gPSBoX2JvdW5kLT5uYXJnczsKKwkJCURVS19BU1NFUlQo bGVuID09IDAgfHwgdHZfYXJncyAhPSBOVUxMKTsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQo ImJvdW5kIGZ1bmN0aW9uIGVuY291bnRlcmVkLCBwdHI9JXA6ICUhVCIsCisJCQkgICAgICAgICAg ICAgICAgICAgICAodm9pZCAqKSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X2Z1bmMpLCB0dl9mdW5j KSk7CisKKwkJCS8qIFsgLi4uIGZ1bmMgdGhpcyBhcmcxIC4uLiBhcmdOIF0gKi8KKworCQkJaWYg KGlzX2NvbnN0cnVjdG9yX2NhbGwpIHsKKwkJCQkvKiBTZWU6IHRlc3RzL2VjbWFzY3JpcHQvdGVz dC1zcGVjLWJvdW5kLWNvbnN0cnVjdG9yLmpzICovCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQo ImNvbnN0cnVjdG9yIGNhbGw6IGRvbid0IHVwZGF0ZSB0aGlzIGJpbmRpbmciKSk7CisJCQl9IGVs c2UgeworCQkJCS8qIFhYWDogZHVrX3JlcGxhY2VfdHZhbCAqLworCQkJCWR1a19wdXNoX3R2YWwo dGhyLCAmaF9ib3VuZC0+dGhpc19iaW5kaW5nKTsKKwkJCQlkdWtfcmVwbGFjZSh0aHIsIGlkeF9m dW5jICsgMSk7ICAvKiBpZHhfdGhpcyA9IGlkeF9mdW5jICsgMSAqLworCQkJfQorCisJCQkvKiBb IC4uLiBmdW5jIHRoaXMgYXJnMSAuLi4gYXJnTiBdICovCisKKwkJCWR1a19yZXF1aXJlX3N0YWNr KHRociwgbGVuKTsKKworCQkJdHZfZ2FwID0gZHVrX3Jlc2VydmVfZ2FwKHRociwgaWR4X2Z1bmMg KyAyLCBsZW4pOworCQkJZHVrX2NvcHlfdHZhbHNfaW5jcmVmKHRociwgdHZfZ2FwLCB0dl9hcmdz LCAoZHVrX3NpemVfdCkgbGVuKTsKKworCQkJLyogWyAuLi4gZnVuYyB0aGlzIDxib3VuZCBhcmdz PiBhcmcxIC4uLiBhcmdOIF0gKi8KKworCQkJZHVrX3B1c2hfdHZhbCh0aHIsICZoX2JvdW5kLT50 YXJnZXQpOworCQkJZHVrX3JlcGxhY2UodGhyLCBpZHhfZnVuYyk7ICAvKiByZXBsYWNlIGluIHN0 YWNrICovCisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJib3VuZCBmdW5jdGlvbiBoYW5kbGVk LCBpZHhfZnVuYz0lbGQsIGN1cnIgZnVuYz0lIVQiLAorCQkJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIGlkeF9mdW5jLCBkdWtfZ2V0X3R2YWwodGhyLCBpZHhfZnVuYykpKTsKKwkJfQorCX0g ZWxzZSBpZiAoRFVLX1RWQUxfSVNfTElHSFRGVU5DKHR2X2Z1bmMpKSB7CisJCS8qIExpZ2h0d2Vp Z2h0IGZ1bmN0aW9uOiBuZXZlciBib3VuZCwgc28gdGVybWluYXRlLiAqLworCQk7CisJfSBlbHNl IHsKKwkJLyogU2hvdWxkbid0IGhhcHBlbiwgc28gdWdseSBlcnJvciBpcyBlbm91Z2guICovCisJ CURVS19FUlJPUl9JTlRFUk5BTCh0aHIpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJ fQorCisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0aHIpID49IGlkeF9mdW5jICsgMik7CisKKwlE VUtfREREKERVS19ERERQUklOVCgiZmluYWwgbm9uLWJvdW5kIGZ1bmN0aW9uIGlzOiAlIVQiLCBk dWtfZ2V0X3R2YWwodGhyLCBpZHhfZnVuYykpKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NF UlRJT05TKQorCXR2X2Z1bmMgPSBkdWtfcmVxdWlyZV90dmFsKHRociwgaWR4X2Z1bmMpOworCURV S19BU1NFUlQoRFVLX1RWQUxfSVNfTElHSFRGVU5DKHR2X2Z1bmMpIHx8IERVS19UVkFMX0lTX09C SkVDVCh0dl9mdW5jKSk7CisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0dl9mdW5jKSkgeworCQlm dW5jID0gRFVLX1RWQUxfR0VUX09CSkVDVCh0dl9mdW5jKTsKKwkJRFVLX0FTU0VSVChmdW5jICE9 IE5VTEwpOworCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKGZ1bmMpKTsK KwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfQ09NUEZVTkMoZnVuYykgfHwKKwkJICAgICAg ICAgICBEVUtfSE9CSkVDVF9IQVNfTkFURlVOQyhmdW5jKSk7CisJfQorI2VuZGlmCit9CisKKy8q CisgKiAgSGVscGVyIGZvciBpbmxpbmUgaGFuZGxpbmcgb2YgLmNhbGwoKSwgLmFwcGx5KCksIGFu ZCAuY29uc3RydWN0KCkuCisgKi8KKworRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19oYW5kbGVf c3BlY2lhbGZ1bmNzX2Zvcl9jYWxsKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHhfZnVu YywgZHVrX2hvYmplY3QgKmZ1bmMsIGR1a19zbWFsbF91aW50X3QgKmNhbGxfZmxhZ3MsIGR1a19i b29sX3QgZmlyc3QpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfY19m dW5jdGlvbiBuYXRmdW5jOworI2VuZGlmCisJZHVrX3R2YWwgKnR2X2FyZ3M7CisKKwlEVUtfQVNT RVJUKGZ1bmMgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCgoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9G TEFHX0NPTlNUUlVDVCkgPT0gMCk7ICAvKiBDYWxsZXIuICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfQVNTRVJUSU9OUykKKwluYXRmdW5jID0gKChkdWtfaG5hdGZ1bmMgKikgZnVuYyktPmZ1bmM7 CisJRFVLX0FTU0VSVChuYXRmdW5jICE9IE5VTEwpOworI2VuZGlmCisKKwkvKiBPbiBldmVyeSBy b3VuZCBvZiBmdW5jdGlvbiByZXNvbHV0aW9uIGF0IGxlYXN0IHRhcmdldCBmdW5jdGlvbiBhbmQK KwkgKiAndGhpcycgYmluZGluZyBhcmUgc2V0LiAgV2UgY2FuIGFzc3VtZSB0aGF0IGhlcmUsIGFu ZCBtdXN0IGd1YXJhbnRlZQorCSAqIGl0IG9uIGV4aXQuICBWYWx1ZSBzdGFjayByZXNlcnZlIGlz IGV4dGVuZGVkIGZvciBib3VuZCBmdW5jdGlvbiBhbmQKKwkgKiAuYXBwbHkoKSB1bnBhY2tpbmcg c28gd2UgZG9uJ3QgbmVlZCB0byBleHRlbmQgaXQgaGVyZSB3aGVuIHdlIG5lZWQgYQorCSAqIGZl dyBzbG90cy4KKwkgKi8KKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gaWR4X2Z1bmMg KyAyKTsKKworCS8qIEhhbmRsZSBuYXRpdmUgJ2V2YWwnIHNwZWNpYWxseS4gIEEgZGlyZWN0IGV2 YWwgY2hlY2sgaXMgb25seSBtYWRlCisJICogZm9yIHRoZSBmaXJzdCByZXNvbHV0aW9uIGF0dGVt cHQ7IGUuZy4gYSBib3VuZCBldmFsIGNhbGwgaXMgLW5vdC0KKwkgKiBhIGRpcmVjdCBldmFsIGNh bGwuCisJICovCisJaWYgKERVS19VTkxJS0VMWSgoKGR1a19obmF0ZnVuYyAqKSBmdW5jKS0+bWFn aWMgPT0gMTUpKSB7CisJCS8qIEZvciBub3cgbm8gc3BlY2lhbCBoYW5kbGluZyBleGNlcHQgZm9y IGRpcmVjdCBldmFsCisJCSAqIGRldGVjdGlvbi4KKwkJICovCisJCURVS19BU1NFUlQoKChkdWtf aG5hdGZ1bmMgKikgZnVuYyktPmZ1bmMgPT0gZHVrX2JpX2dsb2JhbF9vYmplY3RfZXZhbCk7CisJ CWlmIChmaXJzdCAmJiAoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NBTExFRF9BU19FVkFM KSkgeworCQkJKmNhbGxfZmxhZ3MgPSAoKmNhbGxfZmxhZ3MgJiB+RFVLX0NBTExfRkxBR19DQUxM RURfQVNfRVZBTCkgfCBEVUtfQ0FMTF9GTEFHX0RJUkVDVF9FVkFMOworCQl9CisJCURVS19BU1NF UlQoZHVrX2dldF90b3AodGhyKSA+PSBpZHhfZnVuYyArIDIpOworCQlyZXR1cm4gMTsgIC8qIHN0 b3AgcmVzb2x2aW5nICovCisJfQorCisJLyogSGFuZGxlIHNwZWNpYWwgZnVuY3Rpb25zIGJhc2Vk IG9uIHRoZSBEVUtfSE9CSkVDVF9GTEFHX1NQRUNJQUxfQ0FMTAorCSAqIGZsYWc7IHRoZWlyIG1h Z2ljIHZhbHVlIGlzIHVzZWQgZm9yIHN3aXRjaC1jYXNlLgorCSAqCisJICogTk9URTogZHVrX3Vu cGFja19hcnJheV9saWtlKCkgcmVzZXJ2ZXMgdmFsdWUgc3RhY2sgc3BhY2UKKwkgKiBmb3IgdGhl IHJlc3VsdCB2YWx1ZXMgKHVubGlrZSBtb3N0IG90aGVyIHZhbHVlIHN0YWNrIGNhbGxzKS4KKwkg Ki8KKwlzd2l0Y2ggKCgoZHVrX2huYXRmdW5jICopIGZ1bmMpLT5tYWdpYykgeworCWNhc2UgMDog eyAgLyogMD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCgpICovCisJCS8qIFZhbHVlIHN0YWNrOgor CQkgKiBpZHhfZnVuYyArIDA6IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKCkgIFtyZW1vdmVkXQor CQkgKiBpZHhfZnVuYyArIDE6IHRoaXMgYmluZGluZyBmb3IgLmNhbGwgKHRhcmdldCBmdW5jdGlv bikKKwkJICogaWR4X2Z1bmMgKyAyOiAxc3QgYXJndW1lbnQgdG8gLmNhbGwsIGRlc2lyZWQgJ3Ro aXMnIGJpbmRpbmcKKwkJICogaWR4X2Z1bmMgKyAzOiAybmQgYXJndW1lbnQgdG8gLmNhbGwsIGRl c2lyZWQgMXN0IGFyZ3VtZW50IGZvciB1bHRpbWF0ZSB0YXJnZXQKKwkJICogLi4uCisJCSAqCisJ CSAqIFJlbW92ZSBpZHhfZnVuYyArIDAgdG8gZ2V0OgorCQkgKiBpZHhfZnVuYyArIDA6IHRhcmdl dCBmdW5jdGlvbgorCQkgKiBpZHhfZnVuYyArIDE6IHRoaXMgYmluZGluZworCQkgKiBpZHhfZnVu YyArIDI6IGNhbGwgYXJndW1lbnRzCisJCSAqIC4uLgorCQkgKi8KKwkJRFVLX0FTU0VSVChuYXRm dW5jID09IGR1a19iaV9mdW5jdGlvbl9wcm90b3R5cGVfY2FsbCk7CisJCWR1a19yZW1vdmVfdW5z YWZlKHRociwgaWR4X2Z1bmMpOworCQl0dl9hcmdzID0gdGhyLT52YWxzdGFja19ib3R0b20gKyBp ZHhfZnVuYyArIDI7CisJCWlmICh0aHItPnZhbHN0YWNrX3RvcCA8IHR2X2FyZ3MpIHsKKwkJCURV S19BU1NFUlQodHZfYXJncyA8PSB0aHItPnZhbHN0YWNrX2VuZCk7CisJCQl0aHItPnZhbHN0YWNr X3RvcCA9IHR2X2FyZ3M7ICAvKiBhdCBsZWFzdCB0YXJnZXQgZnVuY3Rpb24gYW5kICd0aGlzJyBi aW5kaW5nIHByZXNlbnQgKi8KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSAxOiB7ICAvKiAxPUZ1 bmN0aW9uLnByb3RvdHlwZS5hcHBseSgpICovCisJCS8qIFZhbHVlIHN0YWNrOgorCQkgKiBpZHhf ZnVuYyArIDA6IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSgpICBbcmVtb3ZlZF0KKwkJICogaWR4 X2Z1bmMgKyAxOiB0aGlzIGJpbmRpbmcgZm9yIC5hcHBseSAodGFyZ2V0IGZ1bmN0aW9uKQorCQkg KiBpZHhfZnVuYyArIDI6IDFzdCBhcmd1bWVudCB0byAuYXBwbHksIGRlc2lyZWQgJ3RoaXMnIGJp bmRpbmcKKwkJICogaWR4X2Z1bmMgKyAzOiAybmQgYXJndW1lbnQgdG8gLmFwcGx5LCBhcmdBcnJh eQorCQkgKiBbYW55dGhpbmcgYWZ0ZXIgdGhpcyBNVVNUIGJlIGlnbm9yZWRdCisJCSAqCisJCSAq IFJlbW92ZSBpZHhfZnVuYyArIDAgYW5kIHVucGFjayB0aGUgYXJnQXJyYXkgdG8gZ2V0OgorCQkg KiBpZHhfZnVuYyArIDA6IHRhcmdldCBmdW5jdGlvbgorCQkgKiBpZHhfZnVuYyArIDE6IHRoaXMg YmluZGluZworCQkgKiBpZHhfZnVuYyArIDI6IGNhbGwgYXJndW1lbnRzCisJCSAqIC4uLgorCQkg Ki8KKwkJRFVLX0FTU0VSVChuYXRmdW5jID09IGR1a19iaV9mdW5jdGlvbl9wcm90b3R5cGVfYXBw bHkpOworCQlkdWtfcmVtb3ZlX3Vuc2FmZSh0aHIsIGlkeF9mdW5jKTsKKwkJZ290byBhcHBseV9z aGFyZWQ7CisJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4pCisJY2FzZSAy OiB7ICAvKiAyPVJlZmxlY3QuYXBwbHkoKSAqLworCQkvKiBWYWx1ZSBzdGFjazoKKwkJICogaWR4 X2Z1bmMgKyAwOiBSZWZsZWN0LmFwcGx5KCkgIFtyZW1vdmVkXQorCQkgKiBpZHhfZnVuYyArIDE6 IHRoaXMgYmluZGluZyBmb3IgLmFwcGx5IChpZ25vcmVkLCB1c3VhbGx5IFJlZmxlY3QpICBbcmVt b3ZlZF0KKwkJICogaWR4X2Z1bmMgKyAyOiAxc3QgYXJndW1lbnQgdG8gLmFwcGx5LCB0YXJnZXQg ZnVuY3Rpb24KKwkJICogaWR4X2Z1bmMgKyAzOiAybmQgYXJndW1lbnQgdG8gLmFwcGx5LCBkZXNp cmVkICd0aGlzJyBiaW5kaW5nCisJCSAqIGlkeF9mdW5jICsgNDogM3JkIGFyZ3VtZW50IHRvIC5h cHBseSwgYXJnQXJyYXkKKwkJICogW2FueXRoaW5nIGFmdGVyIHRoaXMgTVVTVCBiZSBpZ25vcmVk XQorCQkgKgorCQkgKiBSZW1vdmUgaWR4X2Z1bmMgKyAwIGFuZCBpZHhfZnVuYyArIDEsIGFuZCB1 bnBhY2sgdGhlIGFyZ0FycmF5IHRvIGdldDoKKwkJICogaWR4X2Z1bmMgKyAwOiB0YXJnZXQgZnVu Y3Rpb24KKwkJICogaWR4X2Z1bmMgKyAxOiB0aGlzIGJpbmRpbmcKKwkJICogaWR4X2Z1bmMgKyAy OiBjYWxsIGFyZ3VtZW50cworCQkgKiAuLi4KKwkJICovCisJCURVS19BU1NFUlQobmF0ZnVuYyA9 PSBkdWtfYmlfcmVmbGVjdF9hcHBseSk7CisJCWR1a19yZW1vdmVfbl91bnNhZmUodGhyLCBpZHhf ZnVuYywgMik7CisJCWdvdG8gYXBwbHlfc2hhcmVkOworCX0KKwljYXNlIDM6IHsgIC8qIDM9UmVm bGVjdC5jb25zdHJ1Y3QoKSAqLworCQkvKiBWYWx1ZSBzdGFjazoKKwkJICogaWR4X2Z1bmMgKyAw OiBSZWZsZWN0LmNvbnN0cnVjdCgpICBbcmVtb3ZlZF0KKwkJICogaWR4X2Z1bmMgKyAxOiB0aGlz IGJpbmRpbmcgZm9yIC5jb25zdHJ1Y3QgKGlnbm9yZWQsIHVzdWFsbHkgUmVmbGVjdCkgIFtyZW1v dmVkXQorCQkgKiBpZHhfZnVuYyArIDI6IDFzdCBhcmd1bWVudCB0byAuY29uc3RydWN0LCB0YXJn ZXQgZnVuY3Rpb24KKwkJICogaWR4X2Z1bmMgKyAzOiAybmQgYXJndW1lbnQgdG8gLmNvbnN0cnVj dCwgYXJnQXJyYXkKKwkJICogaWR4X2Z1bmMgKyA0OiAzcmQgYXJndW1lbnQgdG8gLmNvbnN0cnVj dCwgbmV3VGFyZ2V0CisJCSAqIFthbnl0aGluZyBhZnRlciB0aGlzIE1VU1QgYmUgaWdub3JlZF0K KwkJICoKKwkJICogUmVtb3ZlIGlkeF9mdW5jICsgMCBhbmQgaWR4X2Z1bmMgKyAxLCB1bnBhY2sg dGhlIGFyZ0FycmF5LAorCQkgKiBhbmQgaW5zZXJ0IGRlZmF1bHQgaW5zdGFuY2UgKHByb3RvdHlw ZSBub3QgeWV0IHVwZGF0ZWQpLCB0byBnZXQ6CisJCSAqIGlkeF9mdW5jICsgMDogdGFyZ2V0IGZ1 bmN0aW9uCisJCSAqIGlkeF9mdW5jICsgMTogdGhpcyBiaW5kaW5nIChkZWZhdWx0IGluc3RhbmNl KQorCQkgKiBpZHhfZnVuYyArIDI6IGNvbnN0cnVjdG9yIGNhbGwgYXJndW1lbnRzCisJCSAqIC4u LgorCQkgKgorCQkgKiBDYWxsIGZsYWdzIG11c3QgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBm YWN0IHRoYXQgd2UncmUKKwkJICogbm93IGRlYWxpbmcgd2l0aCBhIGNvbnN0cnVjdG9yIGNhbGws IGFuZCBlLmcuIHRoZSAndGhpcycKKwkJICogYmluZGluZyBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4g aWYgdGhlIHRhcmdldCBpcyBib3VuZC4KKwkJICoKKwkJICogbmV3VGFyZ2V0IGlzIGNoZWNrZWQg YnV0IG5vdCB5ZXQgcGFzc2VkIG9ud2FyZHMuCisJCSAqLworCisJCWR1a19pZHhfdCB0b3A7CisK KwkJRFVLX0FTU0VSVChuYXRmdW5jID09IGR1a19iaV9yZWZsZWN0X2NvbnN0cnVjdCk7CisJCSpj YWxsX2ZsYWdzIHw9IERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUOworCQlkdWtfcmVtb3ZlX25fdW5z YWZlKHRociwgaWR4X2Z1bmMsIDIpOworCQl0b3AgPSBkdWtfZ2V0X3RvcCh0aHIpOworCQlpZiAo IWR1a19pc19jb25zdHJ1Y3RhYmxlKHRociwgaWR4X2Z1bmMpKSB7CisJCQkvKiBUYXJnZXQgY29u c3RydWN0YWJpbGl0eSBtdXN0IGJlIGNoZWNrZWQgYmVmb3JlCisJCQkgKiB1bnBhY2tpbmcgYXJn QXJyYXkgKHdoaWNoIG1heSBjYXVzZSBzaWRlIGVmZmVjdHMpLgorCQkJICogSnVzdCByZXR1cm47 IGNhbGxlciB3aWxsIHRocm93IHRoZSBlcnJvci4KKwkJCSAqLworCQkJZHVrX3NldF90b3BfdW5z YWZlKHRociwgaWR4X2Z1bmMgKyAyKTsgIC8qIHNhdGlzZnkgYXNzZXJ0cyAqLworCQkJYnJlYWs7 CisJCX0KKwkJZHVrX3B1c2hfb2JqZWN0KHRocik7CisJCWR1a19pbnNlcnQodGhyLCBpZHhfZnVu YyArIDEpOyAgLyogZGVmYXVsdCBpbnN0YW5jZSAqLworCisJCS8qIFsgLi4uIGZ1bmMgZGVmYXVs dF9pbnN0YW5jZSBhcmdBcnJheSBuZXdUYXJnZXQ/IF0gKi8KKworCQl0b3AgPSBkdWtfZ2V0X3Rv cCh0aHIpOworCQlpZiAodG9wIDwgaWR4X2Z1bmMgKyAzKSB7CisJCQkvKiBhcmdBcnJheSBpcyBh IG1hbmRhdG9yeSBhcmd1bWVudCBmb3IgUmVmbGVjdC5jb25zdHJ1Y3QoKS4gKi8KKwkJCURVS19F UlJPUl9UWVBFX0lOVkFMSURfQVJHUyh0aHIpOworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAw Oyk7CisJCX0KKwkJaWYgKHRvcCA+IGlkeF9mdW5jICsgMykgeworCQkJaWYgKCFkdWtfc3RyaWN0 X2VxdWFscyh0aHIsIGlkeF9mdW5jLCBpZHhfZnVuYyArIDMpKSB7CisJCQkJLyogWFhYOiBbW0Nv bnN0cnVjdF1dIG5ld1RhcmdldCBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KKwkJCQlEVUtfRVJS T1JfVU5TVVBQT1JURUQodGhyKTsKKwkJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJ CX0KKwkJCWR1a19zZXRfdG9wX3Vuc2FmZSh0aHIsIGlkeF9mdW5jICsgMyk7ICAvKiByZW1vdmUg YW55IGFyZ3MgYmV5b25kIGFyZ0FycmF5ICovCisJCX0KKwkJRFVLX0FTU0VSVChkdWtfZ2V0X3Rv cCh0aHIpID09IGlkeF9mdW5jICsgMyk7CisJCURVS19BU1NFUlQoZHVrX2lzX3ZhbGlkX2luZGV4 KHRociwgaWR4X2Z1bmMgKyAyKSk7CisJCSh2b2lkKSBkdWtfdW5wYWNrX2FycmF5X2xpa2UodGhy LCBpZHhfZnVuYyArIDIpOyAgLyogWFhYOiBzaG91bGQgYWxzbyByZW1vdmUgdGFyZ2V0IHRvIGJl IHN5bW1ldHJpYyB3aXRoIGR1a19wYWNrKCk/ICovCisJCWR1a19yZW1vdmUodGhyLCBpZHhfZnVu YyArIDIpOworCQlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gaWR4X2Z1bmMgKyAyKTsK KwkJYnJlYWs7CisJfQorI2VuZGlmICAvKiBEVUtfVVNFX1JFRkxFQ1RfQlVJTFRJTiAqLworCWRl ZmF1bHQ6IHsKKwkJRFVLX0FTU0VSVCgwKTsKKwkJRFVLX1VOUkVBQ0hBQkxFKCk7CisJfQorCX0K KworCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA+PSBpZHhfZnVuYyArIDIpOworCXJldHVy biAwOyAgLyoga2VlcCByZXNvbHZpbmcgKi8KKworIGFwcGx5X3NoYXJlZDoKKwl0dl9hcmdzID0g dGhyLT52YWxzdGFja19ib3R0b20gKyBpZHhfZnVuYyArIDI7CisJaWYgKHRoci0+dmFsc3RhY2tf dG9wIDw9IHR2X2FyZ3MpIHsKKwkJRFVLX0FTU0VSVCh0dl9hcmdzIDw9IHRoci0+dmFsc3RhY2tf ZW5kKTsKKwkJdGhyLT52YWxzdGFja190b3AgPSB0dl9hcmdzOyAgLyogYXQgbGVhc3QgdGFyZ2V0 IGZ1bmMgYW5kICd0aGlzJyBiaW5kaW5nIHByZXNlbnQgKi8KKwkJLyogTm8gbmVlZCB0byBjaGVj ayBmb3IgYXJnQXJyYXkuICovCisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0 aHIpID49IGlkeF9mdW5jICsgMyk7ICAvKiBpZHhfZnVuYyArIDIgY292ZXJlZCBhYm92ZSAqLwor CQlpZiAodGhyLT52YWxzdGFja190b3AgPiB0dl9hcmdzICsgMSkgeworCQkJZHVrX3NldF90b3Bf dW5zYWZlKHRociwgaWR4X2Z1bmMgKyAzKTsgIC8qIHJlbW92ZSBhbnkgYXJncyBiZXlvbmQgYXJn QXJyYXkgKi8KKwkJfQorCQlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlkeF9m dW5jICsgMikpOworCQlpZiAoIWR1a19pc19jYWxsYWJsZSh0aHIsIGlkeF9mdW5jKSkgeworCQkJ LyogQXZvaWQgdW5wYWNrIHNpZGUgZWZmZWN0cyBpZiB0aGUgdGFyZ2V0IGlzbid0IGNhbGxhYmxl LgorCQkJICogQ2FsbGluZyBjb2RlIHdpbGwgdGhyb3cgdGhlIGFjdHVhbCBlcnJvci4KKwkJCSAq LworCQl9IGVsc2UgeworCQkJKHZvaWQpIGR1a191bnBhY2tfYXJyYXlfbGlrZSh0aHIsIGlkeF9m dW5jICsgMik7CisJCQlkdWtfcmVtb3ZlKHRociwgaWR4X2Z1bmMgKyAyKTsKKwkJfQorCX0KKwlE VUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gaWR4X2Z1bmMgKyAyKTsKKwlyZXR1cm4gMDsg IC8qIGtlZXAgcmVzb2x2aW5nICovCit9CisKKy8qCisgKiAgSGVscGVyIGZvciBQcm94eSBoYW5k bGluZy4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKK0RVS19MT0NBTCB2 b2lkIGR1a19faGFuZGxlX3Byb3h5X2Zvcl9jYWxsKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhf dCBpZHhfZnVuYywgZHVrX2hwcm94eSAqaF9wcm94eSwgZHVrX3NtYWxsX3VpbnRfdCAqY2FsbF9m bGFncykgeworCWR1a19ib29sX3QgcmM7CisKKwkvKiBWYWx1ZSBzdGFjazoKKwkgKiBpZHhfZnVu YyArIDA6IFByb3h5IG9iamVjdAorCSAqIGlkeF9mdW5jICsgMTogdGhpcyBiaW5kaW5nIGZvciBj YWxsCisJICogaWR4X2Z1bmMgKyAyOiAxc3QgYXJndW1lbnQgZm9yIGNhbGwKKwkgKiBpZHhfZnVu YyArIDM6IDJuZCBhcmd1bWVudCBmb3IgY2FsbAorCSAqIC4uLgorCSAqCisJICogSWYgUHJveHkg ZG9lc24ndCBoYXZlIGEgdHJhcCBmb3IgdGhlIGNhbGwgKCdhcHBseScgb3IgJ2NvbnN0cnVjdCcp LAorCSAqIHJlcGxhY2UgUHJveHkgb2JqZWN0IHdpdGggdGFyZ2V0IG9iamVjdC4KKwkgKgorCSAq IElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5vcm1hbCBjYWxsIGFuZCB0aGUgUHJveHkgaGFzIGFu ICdhcHBseScKKwkgKiB0cmFwLCBtYW5pcHVsYXRlIHZhbHVlIHN0YWNrIHRvOgorCSAqCisJICog aWR4X2Z1bmMgKyAwOiB0cmFwCisJICogaWR4X2Z1bmMgKyAxOiBQcm94eSdzIGhhbmRsZXIKKwkg KiBpZHhfZnVuYyArIDI6IFByb3h5J3MgdGFyZ2V0CisJICogaWR4X2Z1bmMgKyAzOiB0aGlzIGJp bmRpbmcgZm9yIGNhbGwgKGZyb20gaWR4X2Z1bmMgKyAxKQorCSAqIGlkeF9mdW5jICsgNDogY2Fs bCBhcmd1bWVudHMgcGFja2VkIHRvIGFuIGFycmF5CisJICoKKwkgKiBJZiB3ZSdyZSBkZWFsaW5n IHdpdGggYSBjb25zdHJ1Y3RvciBjYWxsIGFuZCB0aGUgUHJveHkgaGFzIGEKKwkgKiAnY29uc3Ry dWN0JyB0cmFwLCBtYW5pcHVsYXRlIHZhbHVlIHN0YWNrIHRvOgorCSAqCisJICogaWR4X2Z1bmMg KyAwOiB0cmFwCisJICogaWR4X2Z1bmMgKyAxOiBQcm94eSdzIGhhbmRsZXIKKwkgKiBpZHhfZnVu YyArIDI6IFByb3h5J3MgdGFyZ2V0CisJICogaWR4X2Z1bmMgKyAzOiBjYWxsIGFyZ3VtZW50cyBw YWNrZWQgdG8gYW4gYXJyYXkKKwkgKiBpZHhfZnVuYyArIDQ6IG5ld1RhcmdldCA9PSBQcm94eSBv YmplY3QgaGVyZQorCSAqCisJICogQXMgd2UgZG9uJ3QgeWV0IGhhdmUgcHJvcGVyIG5ld1Rhcmdl dCBzdXBwb3J0LCB0aGUgbmV3VGFyZ2V0IGF0CisJICogaWR4X2Z1bmMgKyAzIGlzIGp1c3QgdGhl IG9yaWdpbmFsIGNvbnN0cnVjdG9yIGJlaW5nIGNhbGxlZCwgaS5lLgorCSAqIHRoZSBQcm94eSBv YmplY3QgKG5vdCB0aGUgdGFyZ2V0KS4gIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCBpbnN0YW5jZQor CSAqIChvcmlnaW5hbCAndGhpcycgYmluZGluZykgaXMgZHJvcHBlZCBhbmQgaWdub3JlZC4KKwkg Ki8KKworCWR1a19wdXNoX2hvYmplY3QodGhyLCBoX3Byb3h5LT5oYW5kbGVyKTsKKwlyYyA9IGR1 a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwgKCpjYWxsX2ZsYWdzICYgRFVLX0NBTExf RkxBR19DT05TVFJVQ1QpID8gRFVLX1NUUklEWF9DT05TVFJVQ1QgOiBEVUtfU1RSSURYX0FQUExZ KTsKKwlpZiAocmMgPT0gMCkgeworCQkvKiBOb3QgZm91bmQsIGNvbnRpbnVlIHRvIHRhcmdldC4g IElmIHRoaXMgaXMgYSBjb25zdHJ1Y3QKKwkJICogY2FsbCwgdXBkYXRlIGRlZmF1bHQgaW5zdGFu Y2UgcHJvdG90eXBlIHVzaW5nIHRoZSBQcm94eSwKKwkJICogbm90IHRoZSB0YXJnZXQuCisJCSAq LworCQlpZiAoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVCkgeworCQkJaWYg KCEoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0RFRkFVTFRfSU5TVEFOQ0VfVVBEQVRFRCkp IHsKKwkJCQkqY2FsbF9mbGFncyB8PSBEVUtfQ0FMTF9GTEFHX0RFRkFVTFRfSU5TVEFOQ0VfVVBE QVRFRDsKKwkJCQlkdWtfX3VwZGF0ZV9kZWZhdWx0X2luc3RhbmNlX3Byb3RvKHRociwgaWR4X2Z1 bmMpOworCQkJfQorCQl9CisJCWR1a19wb3BfMih0aHIpOworCQlkdWtfcHVzaF9ob2JqZWN0KHRo ciwgaF9wcm94eS0+dGFyZ2V0KTsKKwkJZHVrX3JlcGxhY2UodGhyLCBpZHhfZnVuYyk7CisJCXJl dHVybjsKKwl9CisKKwkvKiBIZXJlIHdlIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBp ZHhfZnVuYyB3aGlsZQorCSAqIGhfcHJveHkgaXMgc3RpbGwgbmVlZGVkLCBvdGhlcndpc2UgaF9w cm94eSBtYXkgYmVjb21lCisJICogZGFuZ2xpbmcuICBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIGUu Zy4gdXNpbmcgYQorCSAqIGR1a19wYWNrX3NsaWNlKCkgd2l0aCBhIGZyZWVmb3JtIHNsaWNlLgor CSAqLworCisJLyogSGVyZToKKwkgKiBpZHhfZnVuYyArIDA6IFByb3h5IG9iamVjdAorCSAqIGlk eF9mdW5jICsgMTogdGhpcyBiaW5kaW5nIGZvciBjYWxsCisJICogaWR4X2Z1bmMgKyAyOiAxc3Qg YXJndW1lbnQgZm9yIGNhbGwKKwkgKiBpZHhfZnVuYyArIDM6IDJuZCBhcmd1bWVudCBmb3IgY2Fs bAorCSAqIC4uLgorCSAqIGlkeF9mdW5jICsgTjogaGFuZGxlcgorCSAqIGlkeF9mdW5jICsgTiAr IDE6IHRyYXAKKwkgKi8KKworCWR1a19pbnNlcnQodGhyLCBpZHhfZnVuYyArIDEpOworCWR1a19p bnNlcnQodGhyLCBpZHhfZnVuYyArIDIpOworCWR1a19wdXNoX2hvYmplY3QodGhyLCBoX3Byb3h5 LT50YXJnZXQpOworCWR1a19pbnNlcnQodGhyLCBpZHhfZnVuYyArIDMpOworCWR1a19wYWNrKHRo ciwgZHVrX2dldF90b3AodGhyKSAtIChpZHhfZnVuYyArIDUpKTsKKworCS8qIEhlcmU6CisJICog aWR4X2Z1bmMgKyAwOiBQcm94eSBvYmplY3QKKwkgKiBpZHhfZnVuYyArIDE6IHRyYXAKKwkgKiBp ZHhfZnVuYyArIDI6IFByb3h5J3MgaGFuZGxlcgorCSAqIGlkeF9mdW5jICsgMzogUHJveHkncyB0 YXJnZXQKKwkgKiBpZHhfZnVuYyArIDQ6IHRoaXMgYmluZGluZyBmb3IgY2FsbAorCSAqIGlkeF9m dW5jICsgNTogYXJndW1lbnRzIGFycmF5CisJICovCisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0 aHIpID09IGlkeF9mdW5jICsgNik7CisKKwlpZiAoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFH X0NPTlNUUlVDVCkgeworCQkqY2FsbF9mbGFncyB8PSBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVF9Q Uk9YWTsgIC8qIEVuYWJsZSAnY29uc3RydWN0JyB0cmFwIHJldHVybiBpbnZhcmlhbnQgY2hlY2su ICovCisJCSpjYWxsX2ZsYWdzICY9IH4oRFVLX0NBTExfRkxBR19DT05TVFJVQ1QpOyAgICAgLyog UmVzdW1lIGFzIG5vbi1jb25zdHJ1Y3RvciBjYWxsIHRvIHRoZSB0cmFwLiAqLworCisJCS8qICdh cHBseScgYXJnczogdGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJheQorCQkgKiAnY29uc3RydWN0JyBh cmdzOiB0YXJnZXQsIGFyZ0FycmF5LCBuZXdUYXJnZXQKKwkJICovCisJCWR1a19yZW1vdmUodGhy LCBpZHhfZnVuYyArIDQpOworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgKGR1a19ob2JqZWN0ICop IGhfcHJveHkpOworCX0KKworCS8qIEZpbmFsaXplIHZhbHVlIHN0YWNrIGxheW91dCBieSByZW1v dmluZyBQcm94eSByZWZlcmVuY2UuICovCisJZHVrX3JlbW92ZSh0aHIsIGlkeF9mdW5jKTsKKwlo X3Byb3h5ID0gTlVMTDsgIC8qIGludmFsaWRhdGVkICovCisJRFVLX0FTU0VSVChkdWtfZ2V0X3Rv cCh0aHIpID09IGlkeF9mdW5jICsgNSk7Cit9CisjZW5kaWYgIC8qIERVS19VU0VfRVM2X1BST1hZ ICovCisKKy8qCisgKiAgSGVscGVyIGZvciBzZXR0aW5nIHVwIHZhcl9lbnYgYW5kIGxleF9lbnYg b2YgYW4gYWN0aXZhdGlvbiwKKyAqICBhc3N1bWluZyBpdCBkb2VzIE5PVCBoYXZlIHRoZSBEVUtf SE9CSkVDVF9GTEFHX05FV0VOViBmbGFnLgorICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19faGFu ZGxlX29sZGVudl9mb3JfY2FsbChkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ob2JqZWN0ICpmdW5jLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19hY3RpdmF0aW9uICphY3QpIHsKKwlk dWtfaGNvbXBmdW5jICpmOworCWR1a19ob2JqZWN0ICpoX2xleDsKKwlkdWtfaG9iamVjdCAqaF92 YXI7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGZ1bmMgIT0gTlVM TCk7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1Rf SEFTX05FV0VOVihmdW5jKSk7CisJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX0NSRUFURUFS R1MoZnVuYykpOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoZnVuYykpOwor CURVS19VTlJFRih0aHIpOworCisJZiA9IChkdWtfaGNvbXBmdW5jICopIGZ1bmM7CisJaF9sZXgg PSBEVUtfSENPTVBGVU5DX0dFVF9MRVhFTlYodGhyLT5oZWFwLCBmKTsKKwloX3ZhciA9IERVS19I Q09NUEZVTkNfR0VUX1ZBUkVOVih0aHItPmhlYXAsIGYpOworCURVS19BU1NFUlQoaF9sZXggIT0g TlVMTCk7ICAvKiBBbHdheXMgdHJ1ZSBmb3IgY2xvc3VyZXMgKG5vdCBmb3IgdGVtcGxhdGVzKSAq LworCURVS19BU1NFUlQoaF92YXIgIT0gTlVMTCk7CisJYWN0LT5sZXhfZW52ID0gaF9sZXg7CisJ YWN0LT52YXJfZW52ID0gaF92YXI7CisJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgaF9sZXgpOwor CURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIGhfdmFyKTsKK30KKworLyoKKyAqICBIZWxwZXIgZm9y IHVwZGF0aW5nIGNhbGxlZSAnY2FsbGVyJyBwcm9wZXJ0eS4KKyAqLworCisjaWYgZGVmaW5lZChE VUtfVVNFX05PTlNURF9GVU5DX0NBTExFUl9QUk9QRVJUWSkKK0RVS19MT0NBTCB2b2lkIGR1a19f dXBkYXRlX2Z1bmNfY2FsbGVyX3Byb3AoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hvYmplY3QgKmZ1 bmMpIHsKKwlkdWtfdHZhbCAqdHZfY2FsbGVyOworCWR1a19ob2JqZWN0ICpoX3RtcDsKKwlkdWtf YWN0aXZhdGlvbiAqYWN0X2NhbGxlZTsKKwlkdWtfYWN0aXZhdGlvbiAqYWN0X2NhbGxlcjsKKwor CURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoZnVuYyAhPSBOVUxMKTsKKwlE VUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKGZ1bmMpKTsgIC8qIGJvdW5kIGNo YWluIHJlc29sdmVkICovCisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja190b3AgPj0gMSk7CisK KwlpZiAoRFVLX0hPQkpFQ1RfSEFTX1NUUklDVChmdW5jKSkgeworCQkvKiBTdHJpY3QgZnVuY3Rp b25zIGRvbid0IGdldCB0aGVpciAnY2FsbGVyJyB1cGRhdGVkLiAqLworCQlyZXR1cm47CisJfQor CisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja190b3AgPiAwKTsKKwlhY3RfY2FsbGVlID0gdGhy LT5jYWxsc3RhY2tfY3VycjsKKwlEVUtfQVNTRVJUKGFjdF9jYWxsZWUgIT0gTlVMTCk7CisJYWN0 X2NhbGxlciA9ICh0aHItPmNhbGxzdGFja190b3AgPj0gMiA/IGFjdF9jYWxsZWUtPnBhcmVudCA6 IE5VTEwpOworCisJLyogWFhYOiBjaGVjayAuY2FsbGVyIHdyaXRhYmlsaXR5PyAqLworCisJLyog QmFja3VwICdjYWxsZXInIHByb3BlcnR5IGFuZCB1cGRhdGUgaXRzIHZhbHVlLiAqLworCXR2X2Nh bGxlciA9IGR1a19ob2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnlfdHZhbF9wdHIodGhyLT5oZWFw LCBmdW5jLCBEVUtfSFRIUkVBRF9TVFJJTkdfQ0FMTEVSKHRocikpOworCWlmICh0dl9jYWxsZXIp IHsKKwkJLyogSWYgY2FsbGVyIGlzIGdsb2JhbC9ldmFsIGNvZGUsICdjYWxsZXInIHNob3VsZCBi ZSBzZXQgdG8KKwkJICogJ251bGwnLgorCQkgKgorCQkgKiBYWFg6IHRoZXJlIGlzIG5vIGV4b3Rp YyBmbGFnIHRvIGluZmVyIHRoaXMgY29ycmVjdGx5IG5vdy4KKwkJICogVGhlIE5FV0VOViBmbGFn IGlzIHVzZWQgbm93IHdoaWNoIHdvcmtzIGFzIGludGVuZGVkIGZvcgorCQkgKiBldmVyeXRoaW5n IChnbG9iYWwgY29kZSwgbm9uLXN0cmljdCBldmFsIGNvZGUsIGFuZCBmdW5jdGlvbnMpCisJCSAq IGV4Y2VwdCBzdHJpY3QgZXZhbCBjb2RlLiAgQm91bmQgZnVuY3Rpb25zIGFyZSBuZXZlciBhbiBp c3N1ZQorCQkgKiBiZWNhdXNlICdmdW5jJyBoYXMgYmVlbiByZXNvbHZlZCB0byBhIG5vbi1ib3Vu ZCBmdW5jdGlvbi4KKwkJICovCisKKwkJaWYgKGFjdF9jYWxsZXIgIT0gTlVMTCkgeworCQkJLyog YWN0X2NhbGxlci0+ZnVuYyBtYXkgYmUgTlVMTCBpbiBzb21lIGZpbmFsaXphdGlvbiBjYXNlcywK KwkJCSAqIGp1c3QgdHJlYXQgbGlrZSB3ZSBkb24ndCBrbm93IHRoZSBjYWxsZXIuCisJCQkgKi8K KwkJCWlmIChhY3RfY2FsbGVyLT5mdW5jICYmICFEVUtfSE9CSkVDVF9IQVNfTkVXRU5WKGFjdF9j YWxsZXItPmZ1bmMpKSB7CisJCQkJLyogU2V0dGluZyB0byBOVUxMIGNhdXNlcyAnY2FsbGVyJyB0 byBiZSBzZXQgdG8KKwkJCQkgKiAnbnVsbCcgYXMgZGVzaXJlZC4KKwkJCQkgKi8KKwkJCQlhY3Rf Y2FsbGVyID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCWlmIChEVUtfVFZBTF9JU19PQkpFQ1QodHZf Y2FsbGVyKSkgeworCQkJaF90bXAgPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X2NhbGxlcik7CisJ CQlEVUtfQVNTRVJUKGhfdG1wICE9IE5VTEwpOworCQkJYWN0X2NhbGxlZS0+cHJldl9jYWxsZXIg PSBoX3RtcDsKKworCQkJLyogUHJldmlvdXMgdmFsdWUgZG9lc24ndCBuZWVkIHJlZmNvdW50IGNo YW5nZXMgYmVjYXVzZSBpdHMgb3duZXJzaGlwCisJCQkgKiBpcyB0cmFuc2ZlcnJlZCB0byBwcmV2 X2NhbGxlci4KKwkJCSAqLworCisJCQlpZiAoYWN0X2NhbGxlciAhPSBOVUxMKSB7CisJCQkJRFVL X0FTU0VSVChhY3RfY2FsbGVyLT5mdW5jICE9IE5VTEwpOworCQkJCURVS19UVkFMX1NFVF9PQkpF Q1QodHZfY2FsbGVyLCBhY3RfY2FsbGVyLT5mdW5jKTsKKwkJCQlEVUtfVFZBTF9JTkNSRUYodGhy LCB0dl9jYWxsZXIpOworCQkJfSBlbHNlIHsKKwkJCQlEVUtfVFZBTF9TRVRfTlVMTCh0dl9jYWxs ZXIpOyAgLyogbm8gaW5jcmVmICovCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiAnY2FsbGVyJyBt dXN0IG9ubHkgdGFrZSBvbiAnbnVsbCcgb3IgZnVuY3Rpb24gdmFsdWUgKi8KKwkJCURVS19BU1NF UlQoIURVS19UVkFMX0lTX0hFQVBfQUxMT0NBVEVEKHR2X2NhbGxlcikpOworCQkJRFVLX0FTU0VS VChhY3RfY2FsbGVlLT5wcmV2X2NhbGxlciA9PSBOVUxMKTsKKwkJCWlmIChhY3RfY2FsbGVyICE9 IE5VTEwgJiYgYWN0X2NhbGxlci0+ZnVuYykgeworCQkJCS8qIFRvbGVyYXRlIGFjdF9jYWxsZXIt PmZ1bmMgPT0gTlVMTCB3aGljaCBoYXBwZW5zIGluCisJCQkJICogc29tZSBmaW5hbGl6YXRpb24g Y2FzZXM7IHRyZWF0IGxpa2UgdW5rbm93biBjYWxsZXIuCisJCQkJICovCisJCQkJRFVLX1RWQUxf U0VUX09CSkVDVCh0dl9jYWxsZXIsIGFjdF9jYWxsZXItPmZ1bmMpOworCQkJCURVS19UVkFMX0lO Q1JFRih0aHIsIHR2X2NhbGxlcik7CisJCQl9IGVsc2UgeworCQkJCURVS19UVkFMX1NFVF9OVUxM KHR2X2NhbGxlcik7ICAvKiBubyBpbmNyZWYgKi8KKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAg LyogRFVLX1VTRV9OT05TVERfRlVOQ19DQUxMRVJfUFJPUEVSVFkgKi8KKworLyoKKyAqICBTaGFy ZWQgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBmaW5hbCwgbm9uLWJvdW5kIHRhcmdldCBmdW5j dGlvbiBvZiB0aGUKKyAqICBjYWxsIGFuZCB0aGUgZWZmZWN0aXZlICd0aGlzJyBiaW5kaW5nLiAg UmVzb2x2ZXMgYm91bmQgZnVuY3Rpb25zIGFuZAorICogIGFwcGxpZXMgLmNhbGwoKSwgLmFwcGx5 KCksIGFuZCAuY29uc3RydWN0KCkgaW5saW5lLgorICoKKyAqICBQcm94eSB0cmFwcyBhcmUgYWxz byBoYW5kbGVkIGlubGluZSBzbyB0aGF0IGlmIHRoZSB0YXJnZXQgaXMgYSBQcm94eSB3aXRoCisg KiAgYSAnY2FsbCcgb3IgJ2NvbnN0cnVjdCcgdHJhcCwgdGhlIHRyYXAgaGFuZGxlciBpcyBjYWxs ZWQgd2l0aCBhIG1vZGlmaWVkCisgKiAgYXJndW1lbnQgbGlzdC4KKyAqCisgKiAgT25jZSB0aGUg Ym91bmQgZnVuY3Rpb24gLyAuY2FsbCgpIC8gLmFwcGx5KCkgLyAuY29uc3RydWN0KCkgc2VxdWVu Y2UgaGFzCisgKiAgYmVlbiByZXNvbHZlZCwgdGhlIHZhbHVlIGF0IGlkeF9mdW5jICsgMSBtYXkg bmVlZCBjb2VyY2lvbiBkZXNjcmliZWQgaW4KKyAqICBFNSBTZWN0aW9uIDEwLjQuMy4KKyAqCisg KiAgQSBjYWxsIHRoYXQgYmVnaW5zIGFzIGEgbm9uLWNvbnN0cnVjdG9yIGNhbGwgbWF5IGJlIGNv bnZlcnRlZCBpbnRvIGEKKyAqICBjb25zdHJ1Y3RvciBjYWxsIGR1cmluZyB0aGUgcmVzb2x1dGlv biBwcm9jZXNzIGlmIFJlZmxlY3QuY29uc3RydWN0KCkKKyAqICBpcyBpbnZva2VkLiAgVGhpcyBp cyBoYW5kbGVkIGJ5IHVwZGF0aW5nIHRoZSBjYWxsZXIncyBjYWxsX2ZsYWdzLgorICoKKyAqICBG b3IgZ2xvYmFsIGFuZCBldmFsIGNvZGUgKEU1IFNlY3Rpb25zIDEwLjQuMSBhbmQgMTAuNC4yKSwg d2UgYXNzdW1lCisgKiAgdGhhdCB0aGUgY2FsbGVyIGhhcyBwcm92aWRlZCB0aGUgY29ycmVjdCAn dGhpcycgYmluZGluZyBleHBsaWNpdGx5CisgKiAgd2hlbiBjYWxsaW5nLCBpLmUuOgorICoKKyAq ICAgIC0gZ2xvYmFsIGNvZGU6IHRoaXM9Z2xvYmFsIG9iamVjdAorICogICAgLSBkaXJlY3QgZXZh bDogdGhpcz1jb3B5IGZyb20gZXZhbCgpIGNhbGxlcidzIHRoaXMgYmluZGluZworICogICAgLSBv dGhlciBldmFsOiAgdGhpcz1nbG9iYWwgb2JqZWN0CisgKgorICogIFRoZSAndGhpcycgY29lcmNp b24gbWF5IGNhdXNlIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGwgd2l0aCBhcmJpdHJhcnkKKyAq ICBzaWRlIGVmZmVjdHMsIGJlY2F1c2UgVG9PYmplY3QoKSBtYXkgYmUgY2FsbGVkLgorICovCisK K0RVS19MT0NBTCBEVUtfSU5MSU5FIHZvaWQgZHVrX19jb2VyY2Vfbm9uc3RyaWN0X3RoaXNfYmlu ZGluZyhkdWtfaHRocmVhZCAqdGhyLCBkdWtfaWR4X3QgaWR4X3RoaXMpIHsKKwlkdWtfdHZhbCAq dHZfdGhpczsKKwlkdWtfaG9iamVjdCAqb2JqX2dsb2JhbDsKKworCXR2X3RoaXMgPSB0aHItPnZh bHN0YWNrX2JvdHRvbSArIGlkeF90aGlzOworCXN3aXRjaCAoRFVLX1RWQUxfR0VUX1RBRyh0dl90 aGlzKSkgeworCWNhc2UgRFVLX1RBR19PQkpFQ1Q6CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ0 aGlzIGJpbmRpbmc6IG5vbi1zdHJpY3QsIG9iamVjdCAtPiB1c2UgZGlyZWN0bHkiKSk7CisJCWJy ZWFrOworCWNhc2UgRFVLX1RBR19VTkRFRklORUQ6CisJY2FzZSBEVUtfVEFHX05VTEw6CisJCURV S19EREQoRFVLX0RERFBSSU5UKCJ0aGlzIGJpbmRpbmc6IG5vbi1zdHJpY3QsIHVuZGVmaW5lZC9u dWxsIC0+IHVzZSBnbG9iYWwgb2JqZWN0IikpOworCQlvYmpfZ2xvYmFsID0gdGhyLT5idWlsdGlu c1tEVUtfQklEWF9HTE9CQUxdOworCQkvKiBYWFg6IGF2b2lkIHRoaXMgY2hlY2sgc29tZWhvdyAq LworCQlpZiAoRFVLX0xJS0VMWShvYmpfZ2xvYmFsICE9IE5VTEwpKSB7CisJCQlEVUtfQVNTRVJU KCFEVUtfVFZBTF9JU19IRUFQX0FMTE9DQVRFRCh0dl90aGlzKSk7ICAvKiBubyBuZWVkIHRvIGRl Y3JlZiBwcmV2aW91cyB2YWx1ZSAqLworCQkJRFVLX1RWQUxfU0VUX09CSkVDVCh0dl90aGlzLCBv YmpfZ2xvYmFsKTsKKwkJCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIG9ial9nbG9iYWwpOworCQl9 IGVsc2UgeworCQkJLyogVGhpcyBtYXkgb25seSBoYXBwZW4gaWYgYnVpbHQtaW5zIGFyZSBiZWlu ZyAidG9ybiBkb3duIi4KKwkJCSAqIFRoaXMgYmVoYXZpb3IgaXMgb3V0IG9mIHNwZWNpZmljYXRp b24gc2NvcGUuCisJCQkgKi8KKwkJCURVS19EKERVS19EUFJJTlQoInRoaXMgYmluZGluZzogd2Fu dGVkIHRvIHVzZSBnbG9iYWwgb2JqZWN0LCBidXQgaXQgaXMgTlVMTCAtPiB1c2luZyB1bmRlZmlu ZWQgaW5zdGVhZCIpKTsKKwkJCURVS19BU1NFUlQoIURVS19UVkFMX0lTX0hFQVBfQUxMT0NBVEVE KHR2X3RoaXMpKTsgIC8qIG5vIG5lZWQgdG8gZGVjcmVmIHByZXZpb3VzIHZhbHVlICovCisJCQlE VUtfVFZBTF9TRVRfVU5ERUZJTkVEKHR2X3RoaXMpOyAgLyogbm90aGluZyB0byBpbmNyZWYgKi8K KwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBQbGFpbiBidWZmZXJzIGFuZCBsaWdodGZ1 bmNzIGFyZSBvYmplY3QgY29lcmNlZC4gIExpZ2h0ZnVuY3MKKwkJICogdmVyeSByYXJlbHkgY29t ZSBoZXJlIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIGNhbGwgdGFyZ2V0IHdvdWxkCisJCSAqIG5lZWQg dG8gYmUgYSBub24tc3RyaWN0IG5vbi1saWdodGZ1bmMgKGxpZ2h0ZnVuY3MgYXJlIGNvbnNpZGVy ZWQKKwkJICogc3RyaWN0KSB3aXRoIGFuIGV4cGxpY2l0IGxpZ2h0ZnVuYyAndGhpcycgYmluZGlu Zy4KKwkJICovCisJCURVS19BU1NFUlQoIURVS19UVkFMX0lTX1VOVVNFRCh0dl90aGlzKSk7CisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJ0aGlzIGJpbmRpbmc6IG5vbi1zdHJpY3QsIG5vdCBvYmpl Y3QvdW5kZWZpbmVkL251bGwgLT4gdXNlIFRvT2JqZWN0KHZhbHVlKSIpKTsKKwkJZHVrX3RvX29i amVjdCh0aHIsIGlkeF90aGlzKTsgIC8qIG1heSBoYXZlIHNpZGUgZWZmZWN0cyAqLworCQlicmVh azsKKwl9Cit9CisKK0RVS19MT0NBTCBEVUtfQUxXQVlTX0lOTElORSBkdWtfYm9vbF90IGR1a19f cmVzb2x2ZV90YXJnZXRfZmFzdHBhdGhfY2hlY2soZHVrX2h0aHJlYWQgKnRociwgZHVrX2lkeF90 IGlkeF9mdW5jLCBkdWtfaG9iamVjdCAqKm91dF9mdW5jLCBkdWtfc21hbGxfdWludF90IGNhbGxf ZmxhZ3MpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisJRFVLX1VOUkVGKHRo cik7CisJRFVLX1VOUkVGKGlkeF9mdW5jKTsKKwlEVUtfVU5SRUYob3V0X2Z1bmMpOworCURVS19V TlJFRihjYWxsX2ZsYWdzKTsKKyNlbHNlICAvKiBEVUtfVVNFX1BSRUZFUl9TSVpFICovCisJZHVr X3R2YWwgKnR2X2Z1bmM7CisJZHVrX2hvYmplY3QgKmZ1bmM7CisKKwlpZiAoRFVLX1VOTElLRUxZ KGNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVCkpIHsKKwkJcmV0dXJuIDA7CisJ fQorCisJdHZfZnVuYyA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCBpZHhfZnVuYyk7CisJRFVL X0FTU0VSVCh0dl9mdW5jICE9IE5VTEwpOworCisJaWYgKERVS19MSUtFTFkoRFVLX1RWQUxfSVNf T0JKRUNUKHR2X2Z1bmMpKSkgeworCQlmdW5jID0gRFVLX1RWQUxfR0VUX09CSkVDVCh0dl9mdW5j KTsKKwkJaWYgKERVS19IT0JKRUNUX0lTX0NBTExBQkxFKGZ1bmMpICYmCisJCSAgICAhRFVLX0hP QkpFQ1RfSEFTX0JPVU5ERlVOQyhmdW5jKSAmJgorCQkgICAgIURVS19IT0JKRUNUX0hBU19TUEVD SUFMX0NBTEwoZnVuYykpIHsKKwkJCSpvdXRfZnVuYyA9IGZ1bmM7CisKKwkJCWlmIChEVUtfSE9C SkVDVF9IQVNfU1RSSUNUKGZ1bmMpKSB7CisJCQkJLyogU3RyaWN0IGZ1bmN0aW9uOiBubyAndGhp cycgY29lcmNpb24uICovCisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCWR1a19fY29lcmNlX25v bnN0cmljdF90aGlzX2JpbmRpbmcodGhyLCBpZHhfZnVuYyArIDEpOworCQkJcmV0dXJuIDE7CisJ CX0KKwl9IGVsc2UgaWYgKERVS19UVkFMX0lTX0xJR0hURlVOQyh0dl9mdW5jKSkgeworCQkqb3V0 X2Z1bmMgPSBOVUxMOworCisJCS8qIExpZ2h0ZnVuY3MgYXJlIGNvbnNpZGVyZWQgc3RyaWN0LCBz byAndGhpcycgYmluZGluZyBpcworCQkgKiB1c2VkIGFzIGlzLiAgVGhleSdyZSBuZXZlciBib3Vu ZCwgYWx3YXlzIGNvbnN0cnVjdGFibGUsCisJCSAqIGFuZCBuZXZlciBzcGVjaWFsIGZ1bmN0aW9u cy4KKwkJICovCisJCXJldHVybiAxOworCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9QUkVGRVJfU0la RSAqLworCXJldHVybiAwOyAgLyogbGV0IHNsb3cgcGF0aCBkZWFsIHdpdGggaXQgKi8KK30KKwor RFVLX0xPQ0FMIGR1a19ob2JqZWN0ICpkdWtfX3Jlc29sdmVfdGFyZ2V0X2Z1bmNfYW5kX3RoaXNf YmluZGluZyhkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X2Z1bmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGR1a19zbWFsbF91aW50X3QgKmNhbGxfZmxhZ3MpIHsKKwlkdWtfdHZhbCAqdHZfZnVu YzsKKwlkdWtfaG9iamVjdCAqZnVuYzsKKwlkdWtfYm9vbF90IGZpcnN0OworCisJRFVLX0FTU0VS VChkdWtfZ2V0X3RvcCh0aHIpID49IGlkeF9mdW5jICsgMik7CisKKwlmb3IgKGZpcnN0ID0gMTs7 IGZpcnN0ID0gMCkgeworCQlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gaWR4X2Z1bmMg KyAyKTsKKworCQl0dl9mdW5jID0gRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIGlkeF9mdW5jKTsK KwkJRFVLX0FTU0VSVCh0dl9mdW5jICE9IE5VTEwpOworCisJCWlmIChEVUtfVFZBTF9JU19PQkpF Q1QodHZfZnVuYykpIHsKKwkJCWZ1bmMgPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X2Z1bmMpOwor CisJCQlpZiAoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVCkgeworCQkJCWlm IChEVUtfVU5MSUtFTFkoIURVS19IT0JKRUNUX0hBU19DT05TVFJVQ1RBQkxFKGZ1bmMpKSkgewor CQkJCQlnb3RvIG5vdF9jb25zdHJ1Y3RhYmxlOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYg KERVS19VTkxJS0VMWSghRFVLX0hPQkpFQ1RfSVNfQ0FMTEFCTEUoZnVuYykpKSB7CisJCQkJCWdv dG8gbm90X2NhbGxhYmxlOworCQkJCX0KKwkJCX0KKworCQkJaWYgKERVS19MSUtFTFkoIURVS19I T0JKRUNUX0hBU19CT1VOREZVTkMoZnVuYykgJiYKKwkJCSAgICAgICAgICAgICAgICFEVUtfSE9C SkVDVF9IQVNfU1BFQ0lBTF9DQUxMKGZ1bmMpICYmCisJCQkgICAgICAgICAgICAgICAhRFVLX0hP QkpFQ1RfSEFTX0VYT1RJQ19QUk9YWU9CSihmdW5jKSkpIHsKKwkJCQkvKiBDb21tb24gY2FzZSwg c28gdGVzdCBmb3IgdXNpbmcgYSBzaW5nbGUgYml0ZmllbGQgdGVzdC4KKwkJCQkgKiBCcmVhayBv dXQgdG8gaGFuZGxlIHRoaXMgY29lcmNpb24gZXRjLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJ fQorCisJCQkvKiBYWFg6IGNvdWxkIHNldCBzcGVjaWFsY2FsbCBmb3IgYm91bmRmdW5jcyB0b28s IHNpbXBsaWZ5IGNoZWNrIGFib3ZlICovCisKKwkJCWlmIChEVUtfSE9CSkVDVF9IQVNfQk9VTkRG VU5DKGZ1bmMpKSB7CisJCQkJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX1NQRUNJQUxfQ0FM TChmdW5jKSk7CisJCQkJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSVNfTkFURlVOQyhmdW5jKSk7 CisKKwkJCQkvKiBDYWxsYWJsZS9jb25zdHJ1Y3RhYmxlIGZsYWdzIGFyZSB0aGUgc2FtZQorCQkJ CSAqIGZvciB0aGUgYm91bmQgZnVuY3Rpb24gYW5kIGl0cyB0YXJnZXQsIHNvCisJCQkJICogd2Ug ZG9uJ3QgbmVlZCB0byBjaGVjayB0aGVtIGhlcmUsIHdlIGNhbgorCQkJCSAqIGNoZWNrIHRoZW0g ZnJvbSB0aGUgdGFyZ2V0IG9ubHkuCisJCQkJICovCisJCQkJZHVrX19oYW5kbGVfYm91bmRfY2hh aW5fZm9yX2NhbGwodGhyLCBpZHhfZnVuYywgKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NP TlNUUlVDVCk7CisKKwkJCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX09CSkVDVChkdWtfcmVxdWly ZV90dmFsKHRociwgaWR4X2Z1bmMpKSB8fAorCQkJCSAgICAgICAgICAgRFVLX1RWQUxfSVNfTElH SFRGVU5DKGR1a19yZXF1aXJlX3R2YWwodGhyLCBpZHhfZnVuYykpKTsKKwkJCX0gZWxzZSB7CisJ CQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfU1BFQ0lBTF9DQUxMKGZ1bmMpKTsKKworI2lm IGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJCQkJaWYgKERVS19IT0JKRUNUX0hBU19FWE9U SUNfUFJPWFlPQkooZnVuYykpIHsKKwkJCQkJLyogSWYgbm8gdHJhcCwgcmVzdW1lIHByb2Nlc3Np bmcgZnJvbSBQcm94eSB0cmFwLgorCQkJCQkgKiBJZiB0cmFwIGV4aXN0cywgaGVscGVyIGNvbnZl cnRzIGNhbGwgaW50byBhIHRyYXAKKwkJCQkJICogY2FsbDsgdGhpcyBtYXkgY2hhbmdlIGEgY29u c3RydWN0b3IgY2FsbCBpbnRvIGEKKwkJCQkJICogbm9ybWFsIChub24tY29uc3RydWN0b3IpIHRy YXAgY2FsbC4gIFdlIG11c3QKKwkJCQkJICogY29udGludWUgcHJvY2Vzc2luZyBldmVuIHdoZW4g YSB0cmFwIGlzIGZvdW5kIGFzCisJCQkJCSAqIHRoZSB0cmFwIG1heSBiZSBib3VuZC4KKwkJCQkJ ICovCisJCQkJCWR1a19faGFuZGxlX3Byb3h5X2Zvcl9jYWxsKHRociwgaWR4X2Z1bmMsIChkdWtf aHByb3h5ICopIGZ1bmMsIGNhbGxfZmxhZ3MpOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYKKwkJ CQl7CisJCQkJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfTkFURlVOQyhmdW5jKSk7CisJCQkJ CURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSEFTX0NBTExBQkxFKGZ1bmMpKTsKKwkJCQkJRFVLX0FT U0VSVCghRFVLX0hPQkpFQ1RfSEFTX0NPTlNUUlVDVEFCTEUoZnVuYykpOworCQkJCQkvKiBDb25z dHJ1Y3RhYmxlIGNoZWNrIGFscmVhZHkgZG9uZSBhYm92ZS4gKi8KKworCQkJCQlpZiAoZHVrX19o YW5kbGVfc3BlY2lhbGZ1bmNzX2Zvcl9jYWxsKHRociwgaWR4X2Z1bmMsIGZ1bmMsIGNhbGxfZmxh Z3MsIGZpcnN0KSAhPSAwKSB7CisJCQkJCQkvKiBFbmNvdW50ZXJlZCBuYXRpdmUgZXZhbCBjYWxs LCBub3JtYWwgY2FsbAorCQkJCQkJICogY29udGV4dC4gIEJyZWFrIG91dCwgaGFuZGxlIHRoaXMg Y29lcmNpb24gZXRjLgorCQkJCQkJICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKwkJCS8qIFJldHJ5IGxvb3AuICovCisJCX0gZWxzZSBpZiAoRFVLX1RWQUxfSVNfTElHSFRG VU5DKHR2X2Z1bmMpKSB7CisJCQkvKiBMaWdodGZ1bmNzIGFyZToKKwkJCSAqICAgLSBBbHdheXMg c3RyaWN0LCBzbyBubyAndGhpcycgY29lcmNpb24uCisJCQkgKiAgIC0gQWx3YXlzIGNhbGxhYmxl LgorCQkJICogICAtIEFsd2F5cyBjb25zdHJ1Y3RhYmxlLgorCQkJICogICAtIE5ldmVyIHNwZWNp YWxmdW5jcy4KKwkJCSAqLworCQkJZnVuYyA9IE5VTEw7CisJCQlnb3RvIGZpbmlzaGVkOworCQl9 IGVsc2UgeworCQkJZ290byBub3RfY2FsbGFibGU7CisJCX0KKwl9CisKKwlEVUtfQVNTRVJUKGZ1 bmMgIT0gTlVMTCk7CisKKwlpZiAoIURVS19IT0JKRUNUX0hBU19TVFJJQ1QoZnVuYykpIHsKKwkJ LyogTm9uLXN0cmljdCB0YXJnZXQgbmVlZHMgJ3RoaXMnIGNvZXJjaW9uLgorCQkgKiBUaGlzIGhh cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGludmFsaWRhdGluZworCQkgKiAndHZfZnVuYycuCisJ CSAqLworCQlkdWtfX2NvZXJjZV9ub25zdHJpY3RfdGhpc19iaW5kaW5nKHRociwgaWR4X2Z1bmMg KyAxKTsKKwl9CisJaWYgKCpjYWxsX2ZsYWdzICYgRFVLX0NBTExfRkxBR19DT05TVFJVQ1QpIHsK KwkJaWYgKCEoKmNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0RFRkFVTFRfSU5TVEFOQ0VfVVBE QVRFRCkpIHsKKwkJCSpjYWxsX2ZsYWdzIHw9IERVS19DQUxMX0ZMQUdfREVGQVVMVF9JTlNUQU5D RV9VUERBVEVEOworCQkJZHVrX191cGRhdGVfZGVmYXVsdF9pbnN0YW5jZV9wcm90byh0aHIsIGlk eF9mdW5jKTsKKwkJfQorCX0KKworIGZpbmlzaGVkOgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0FT U0VSVElPTlMpCisJeworCQlkdWtfdHZhbCAqdHZfdG1wOworCisJCXR2X3RtcCA9IGR1a19nZXRf dHZhbCh0aHIsIGlkeF9mdW5jKTsKKwkJRFVLX0FTU0VSVCh0dl90bXAgIT0gTlVMTCk7CisKKwkJ RFVLX0FTU0VSVCgoRFVLX1RWQUxfSVNfT0JKRUNUKHR2X3RtcCkgJiYgRFVLX0hPQkpFQ1RfSVNf Q0FMTEFCTEUoRFVLX1RWQUxfR0VUX09CSkVDVCh0dl90bXApKSkgfHwKKwkJICAgICAgICAgICBE VUtfVFZBTF9JU19MSUdIVEZVTkModHZfdG1wKSk7CisJCURVS19BU1NFUlQoZnVuYyA9PSBOVUxM IHx8ICFEVUtfSE9CSkVDVF9IQVNfQk9VTkRGVU5DKGZ1bmMpKTsKKwkJRFVLX0FTU0VSVChmdW5j ID09IE5VTEwgfHwgKERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKGZ1bmMpIHx8CisJCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9JU19OQVRGVU5DKGZ1bmMpKSk7CisJCURV S19BU1NFUlQoZnVuYyA9PSBOVUxMIHx8IChEVUtfSE9CSkVDVF9IQVNfQ09OU1RSVUNUQUJMRShm dW5jKSB8fAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpjYWxsX2ZsYWdzICYgRFVL X0NBTExfRkxBR19DT05TVFJVQ1QpID09IDApKTsKKwl9CisjZW5kaWYKKworCXJldHVybiBmdW5j OworCisgbm90X2NhbGxhYmxlOgorCURVS19BU1NFUlQodHZfZnVuYyAhPSBOVUxMKTsKKworI2lm IGRlZmluZWQoRFVLX1VTRV9WRVJCT1NFX0VSUk9SUykKKwkvKiBHRVRQUk9QQyBkZWxheWVkIGVy cm9yIGhhbmRsaW5nOiB3aGVuIHRhcmdldCBpcyBub3QgY2FsbGFibGUsCisJICogR0VUUFJPUEMg cmVwbGFjZXMgaWR4X2Z1bmMrMCB3aXRoIGFuIEVycm9yIChub24tY2FsbGFibGUpIHdpdGgKKwkg KiBhIGhpZGRlbiBTeW1ib2wgdG8gc2lnbmlmeSBpdCdzIHRvIGJlIHRocm93biBhcyBpcyBoZXJl LiAgVGhlCisJICogaGlkZGVuIFN5bWJvbCBpcyBvbmx5IGNoZWNrZWQgYXMgYW4gb3duIHByb3Bl cnR5LCBub3QgaW5oZXJpdGVkCisJICogKHdoaWNoIHdvdWxkIGJlIGRhbmdlcm91cykuCisJICov CisJaWYgKERVS19UVkFMX0lTX09CSkVDVCh0dl9mdW5jKSkgeworCQlpZiAoZHVrX2hvYmplY3Rf ZmluZF9leGlzdGluZ19lbnRyeV90dmFsX3B0cih0aHItPmhlYXAsIERVS19UVkFMX0dFVF9PQkpF Q1QodHZfZnVuYyksIERVS19IVEhSRUFEX1NUUklOR19JTlRfVEFSR0VUKHRocikpICE9IE5VTEwp IHsKKwkJCWR1a19wdXNoX3R2YWwodGhyLCB0dl9mdW5jKTsKKwkJCSh2b2lkKSBkdWtfdGhyb3co dGhyKTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCQl9CisJfQorI2VuZGlm CisKKyNpZiBkZWZpbmVkKERVS19VU0VfVkVSQk9TRV9FUlJPUlMpCisjaWYgZGVmaW5lZChEVUtf VVNFX1BBUkFOT0lEX0VSUk9SUykKKwlEVUtfRVJST1JfRk1UMSh0aHIsIERVS19FUlJfVFlQRV9F UlJPUiwgIiVzIG5vdCBjYWxsYWJsZSIsIGR1a19nZXRfdHlwZV9uYW1lKHRociwgaWR4X2Z1bmMp KTsKKyNlbHNlCisJRFVLX0VSUk9SX0ZNVDEodGhyLCBEVUtfRVJSX1RZUEVfRVJST1IsICIlcyBu b3QgY2FsbGFibGUiLCBkdWtfcHVzaF9zdHJpbmdfdHZhbF9yZWFkYWJsZSh0aHIsIHR2X2Z1bmMp KTsKKyNlbmRpZgorI2Vsc2UKKwlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfTk9UX0NBTExB QkxFKTsKKyNlbmRpZgorCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworCisgbm90X2Nv bnN0cnVjdGFibGU6CisJLyogRm9yIG5vdyBHRVRQUk9QQyBkZWxheWVkIGVycm9yIG5vdCBuZWVk ZWQgZm9yIGNvbnN0cnVjdG9yIGNhbGxzLiAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9WRVJCT1NF X0VSUk9SUykKKyNpZiBkZWZpbmVkKERVS19VU0VfUEFSQU5PSURfRVJST1JTKQorCURVS19FUlJP Ul9GTVQxKHRociwgRFVLX0VSUl9UWVBFX0VSUk9SLCAiJXMgbm90IGNvbnN0cnVjdGFibGUiLCBk dWtfZ2V0X3R5cGVfbmFtZSh0aHIsIGlkeF9mdW5jKSk7CisjZWxzZQorCURVS19FUlJPUl9GTVQx KHRociwgRFVLX0VSUl9UWVBFX0VSUk9SLCAiJXMgbm90IGNvbnN0cnVjdGFibGUiLCBkdWtfcHVz aF9zdHJpbmdfdHZhbF9yZWFkYWJsZSh0aHIsIHR2X2Z1bmMpKTsKKyNlbmRpZgorI2Vsc2UKKwlE VUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfTk9UX0NPTlNUUlVDVEFCTEUpOworI2VuZGlmCisJ RFVLX1dPX05PUkVUVVJOKHJldHVybiBOVUxMOyk7Cit9CisKKy8qCisgKiAgTWFuaXB1bGF0ZSB2 YWx1ZSBzdGFjayBzbyB0aGF0IGV4YWN0bHkgJ251bV9zdGFja19yZXRzJyByZXR1cm4KKyAqICB2 YWx1ZXMgYXJlIGF0ICdpZHhfcmV0YmFzZScgaW4gZXZlcnkgY2FzZSwgYXNzdW1pbmcgdGhlcmUg YXJlCisgKiAgJ3JjJyByZXR1cm4gdmFsdWVzIG9uIHRvcCBvZiBzdGFjay4KKyAqCisgKiAgVGhp cyBpcyBhIGJpdCB0cmlja3ksIGJlY2F1c2UgdGhlIGNhbGxlZCBDIGZ1bmN0aW9uIG9wZXJhdGVz IGluCisgKiAgdGhlIHNhbWUgYWN0aXZhdGlvbiByZWNvcmQgYW5kIG1heSBoYXZlIGUuZy4gcG9w cGVkIHRoZSBzdGFjaworICogIGVtcHR5IChiZWxvdyBpZHhfcmV0YmFzZSkuCisgKi8KKworRFVL X0xPQ0FMIHZvaWQgZHVrX19zYWZlX2NhbGxfYWRqdXN0X3ZhbHN0YWNrKGR1a19odGhyZWFkICp0 aHIsIGR1a19pZHhfdCBpZHhfcmV0YmFzZSwgZHVrX2lkeF90IG51bV9zdGFja19yZXRzLCBkdWtf aWR4X3QgbnVtX2FjdHVhbF9yZXRzKSB7CisJZHVrX2lkeF90IGlkeF9yY2Jhc2U7CisKKwlEVUtf QVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGlkeF9yZXRiYXNlID49IDApOworCURV S19BU1NFUlQobnVtX3N0YWNrX3JldHMgPj0gMCk7CisJRFVLX0FTU0VSVChudW1fYWN0dWFsX3Jl dHMgPj0gMCk7CisKKwlpZHhfcmNiYXNlID0gZHVrX2dldF90b3AodGhyKSAtIG51bV9hY3R1YWxf cmV0czsgIC8qIGJhc2Ugb2Yga25vd24gcmV0dXJuIHZhbHVlcyAqLworCWlmIChEVUtfVU5MSUtF TFkoaWR4X3JjYmFzZSA8IDApKSB7CisJCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9JTlZB TElEX0NGVU5DX1JDKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0KKworCURVS19E REQoRFVLX0RERFBSSU5UKCJhZGp1c3QgdmFsc3RhY2sgYWZ0ZXIgZnVuYyBjYWxsOiAiCisJICAg ICAgICAgICAgICAgICAgICAgIm51bV9zdGFja19yZXRzPSVsZCwgbnVtX2FjdHVhbF9yZXRzPSVs ZCwgc3RhY2tfdG9wPSVsZCwgaWR4X3JldGJhc2U9JWxkLCBpZHhfcmNiYXNlPSVsZCIsCisJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIG51bV9zdGFja19yZXRzLCAobG9uZykgbnVtX2FjdHVh bF9yZXRzLCAobG9uZykgZHVrX2dldF90b3AodGhyKSwKKwkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgaWR4X3JldGJhc2UsIChsb25nKSBpZHhfcmNiYXNlKSk7CisKKwlEVUtfQVNTRVJUKGlk eF9yY2Jhc2UgPj0gMCk7ICAvKiBjYWxsZXIgbXVzdCBjaGVjayAqLworCisJLyogU3BhY2UgZm9y IG51bV9zdGFja19yZXRzIHdhcyByZXNlcnZlZCBiZWZvcmUgdGhlIHNhZmUgY2FsbC4KKwkgKiBC ZWNhdXNlIHZhbHVlIHN0YWNrIHJlc2VydmUgY2Fubm90IHNocmluayBleGNlcHQgaW4gY2FsbCBy ZXR1cm5zLAorCSAqIHRoZSByZXNlcnZlIGlzIHN0aWxsIGluIHBsYWNlLiAgQWRqdXN0IHZhbHN0 YWNrLCBjYXJlZnVsbHkKKwkgKiBlbnN1cmluZyB3ZSBkb24ndCBvdmVyc3RlcCB0aGUgcmVzZXJ2 ZS4KKwkgKi8KKworCS8qIE1hdGNoIGlkeF9yY2Jhc2Ugd2l0aCBpZHhfcmV0YmFzZSBzbyB0aGF0 IHRoZSByZXR1cm4gdmFsdWVzCisJICogc3RhcnQgYXQgdGhlIGNvcnJlY3QgaW5kZXguCisJICov CisJaWYgKGlkeF9yY2Jhc2UgPiBpZHhfcmV0YmFzZSkgeworCQlkdWtfaWR4X3QgY291bnQgPSBp ZHhfcmNiYXNlIC0gaWR4X3JldGJhc2U7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImVsZW1l bnRzIGF0L2FmdGVyIGlkeF9yZXRiYXNlIGhhdmUgZW5vdWdoIHRvIGNvdmVyIGZ1bmMgcmV0dmFs cyAiCisJCSAgICAgICAgICAgICAgICAgICAgICIoaWR4X3JldGJhc2U9JWxkLCBpZHhfcmNiYXNl PSVsZCkiLCAobG9uZykgaWR4X3JldGJhc2UsIChsb25nKSBpZHhfcmNiYXNlKSk7CisKKwkJLyog UmVtb3ZlIHZhbHVlcyBiZXR3ZWVuIGlyY19yY2Jhc2UgKHN0YXJ0IG9mIGludGVuZGVkIHJldHVy bgorCQkgKiB2YWx1ZXMpIGFuZCBpZHhfcmV0YmFzZSB0byBsb3dlciByZXR1cm4gdmFsdWVzIHRv IGlkeF9yZXRiYXNlLgorCQkgKi8KKwkJRFVLX0FTU0VSVChjb3VudCA+IDApOworCQlkdWtfcmVt b3ZlX24odGhyLCBpZHhfcmV0YmFzZSwgY291bnQpOyAgLyogbWF5IGJlIE5PUlogKi8KKwl9IGVs c2UgeworCQlkdWtfaWR4X3QgY291bnQgPSBpZHhfcmV0YmFzZSAtIGlkeF9yY2Jhc2U7CisKKwkJ RFVLX0RERChEVUtfREREUFJJTlQoIm5vdCBlbm91Z2ggZWxlbWVudHMgYXQvYWZ0ZXIgaWR4X3Jl dGJhc2UgdG8gY292ZXIgZnVuYyByZXR2YWxzICIKKwkJICAgICAgICAgICAgICAgICAgICAgIihp ZHhfcmV0YmFzZT0lbGQsIGlkeF9yY2Jhc2U9JWxkKSIsIChsb25nKSBpZHhfcmV0YmFzZSwgKGxv bmcpIGlkeF9yY2Jhc2UpKTsKKworCQkvKiBJbnNlcnQgJ3VuZGVmaW5lZCcgYXQgaWR4X3JjYmFz ZSAoc3RhcnQgb2YgaW50ZW5kZWQgcmV0dXJuCisJCSAqIHZhbHVlcykgdG8gbGlmdCByZXR1cm4g dmFsdWVzIHRvIGlkeF9yZXRiYXNlLgorCQkgKi8KKwkJRFVLX0FTU0VSVChjb3VudCA+PSAwKTsK KwkJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2VuZCAtIHRoci0+dmFsc3RhY2tfdG9wID49IGNv dW50KTsgIC8qIHJlc2VydmUgY2Fubm90IHNocmluayAqLworCQlkdWtfaW5zZXJ0X3VuZGVmaW5l ZF9uKHRociwgaWR4X3JjYmFzZSwgY291bnQpOworCX0KKworCS8qIENob3AgZXh0cmEgcmV0dmFs cyBhd2F5IC8gZXh0ZW5kIHdpdGggdW5kZWZpbmVkLiAqLworCWR1a19zZXRfdG9wX3Vuc2FmZSh0 aHIsIGlkeF9yZXRiYXNlICsgbnVtX3N0YWNrX3JldHMpOworfQorCisvKgorICogIEFjdGl2YXRp b24gc2V0dXAgZm9yIHRhaWxjYWxscyBhbmQgbm9uLXRhaWxjYWxscy4KKyAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX1RBSUxDQUxMKQorRFVLX0xPQ0FMIGR1a19zbWFsbF91aW50X3QgZHVrX19j YWxsX3NldHVwX2FjdF9hdHRlbXB0X3RhaWxjYWxsKGR1a19odGhyZWFkICp0aHIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX3NtYWxsX3VpbnRfdCBjYWxsX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19pZHhfdCBpZHhfZnVuYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfaG9iamVjdCAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc2l6ZV90IGVudHJ5X3ZhbHN0 YWNrX2JvdHRvbV9ieXRlb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zaXplX3QgZW50cnlfdmFsc3RhY2tfZW5k X2J5dGVvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX2lkeF90ICpvdXRfbmFyZ3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90 ICpvdXRfbnJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX3NpemVfdCAqb3V0X3ZzX21pbl9ieXRlcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkdWtfYWN0aXZhdGlvbiAqKm91dF9hY3QpIHsKKwlkdWtfYWN0aXZhdGlvbiAqYWN0OworCWR1 a190dmFsICp0djEsICp0djI7CisJZHVrX2lkeF90IGlkeF9hcmdzOworCWR1a19zbWFsbF91aW50 X3QgZmxhZ3MxLCBmbGFnczI7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQp CisJZHVrX2FjdGl2YXRpb24gKnByZXZfcGF1c2VfYWN0OworI2VuZGlmCisKKwlEVUtfVU5SRUYo ZW50cnlfdmFsc3RhY2tfZW5kX2J5dGVvZmYpOworCisJLyogVGFpbGNhbGwgY2Fubm90IGJlIGZs YWdnZWQgdG8gcmVzdW1lIGNhbGxzLCBhbmQgYQorCSAqIHByZXZpb3VzIGZyYW1lIG11c3QgZXhp c3QuCisJICovCisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja190b3AgPj0gMSk7CisKKwlhY3Qg PSB0aHItPmNhbGxzdGFja19jdXJyOworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCSpvdXRf YWN0ID0gYWN0OworCisJaWYgKGZ1bmMgPT0gTlVMTCB8fCAhRFVLX0hPQkpFQ1RfSVNfQ09NUEZV TkMoZnVuYykpIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInRhaWwgY2FsbCBwcmV2ZW50ZWQg YnkgdGFyZ2V0IG5vdCBiZWluZyBlY21hIGZ1bmN0aW9uIikpOworCQlyZXR1cm4gMDsKKwl9CisJ aWYgKGFjdC0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfUFJFVkVOVF9ZSUVMRCkgeworCQlEVUtfRERE KERVS19ERERQUklOVCgidGFpbCBjYWxsIHByZXZlbnRlZCBieSBjdXJyZW50IGFjdGl2YXRpb24g aGF2aW5nIERVS19BQ1RfRkxBR19QUkVWRU5UX1lJRUxEIikpOworCQlyZXR1cm4gMDsKKwl9CisJ LyogVGFpbGNhbGwgaXMgb25seSBhbGxvd2VkIGlmIGN1cnJlbnQgYW5kIGNhbmRpZGF0ZQorCSAq IGZ1bmN0aW9uIGhhdmUgaWRlbnRpY2FsIHJldHVybiB2YWx1ZSBoYW5kbGluZy4gIFRoZXJlCisJ ICogYXJlIHRocmVlIHBvc3NpYmxlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBjYXNlczoKKwkgKiAg IDEuIE5vcm1hbCBmdW5jdGlvbiBjYWxsLCBubyBzcGVjaWFsIHJldHVybiB2YWx1ZSBoYW5kbGlu Zy4KKwkgKiAgIDIuIENvbnN0cnVjdG9yIGNhbGwsIHJldHVybiB2YWx1ZSByZXBsYWNlbWVudCBv YmplY3QgY2hlY2suCisJICogICAzLiBQcm94eSAnY29uc3RydWN0JyB0cmFwIGNhbGwsIHJldHVy biB2YWx1ZSBpbnZhcmlhbnQgY2hlY2suCisJICovCisJZmxhZ3MxID0gKGR1a19zbWFsbF91aW50 X3QpICgoYWN0LT5mbGFncyAmIERVS19BQ1RfRkxBR19DT05TVFJVQ1QpID8gMSA6IDApCisjaWYg ZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKwkgICAgICAgICB8IChkdWtfc21hbGxfdWludF90 KSAoKGFjdC0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfQ09OU1RSVUNUX1BST1hZKSA/IDIgOiAwKQor I2VuZGlmCisJICAgICAgICAgOworCWZsYWdzMiA9IChkdWtfc21hbGxfdWludF90KSAoKGNhbGxf ZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVCkgPyAxIDogMCkKKyNpZiBkZWZpbmVkKERV S19VU0VfRVM2X1BST1hZKQorCSAgICAgICAgIHwgKGR1a19zbWFsbF91aW50X3QpICgoY2FsbF9m bGFncyAmIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUX1BST1hZKSA/IDIgOiAwKTsKKyNlbmRpZgor CSAgICAgICAgIDsKKwlpZiAoZmxhZ3MxICE9IGZsYWdzMikgeworCQlEVUtfREREKERVS19ERERQ UklOVCgidGFpbCBjYWxsIHByZXZlbnRlZCBieSBpbmNvbXBhdGlibGUgcmV0dXJuIHZhbHVlIGhh bmRsaW5nIikpOworCQlyZXR1cm4gMDsKKwl9CisJRFVLX0FTU0VSVCgoKGFjdC0+ZmxhZ3MgJiBE VUtfQUNUX0ZMQUdfQ09OU1RSVUNUKSAmJiAoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfQ09O U1RSVUNUKSkgfHwKKwkgICAgICAgICAgICghKGFjdC0+ZmxhZ3MgJiBEVUtfQUNUX0ZMQUdfQ09O U1RSVUNUKSAmJiAhKGNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVCkpKTsKKwlE VUtfQVNTRVJUKCgoYWN0LT5mbGFncyAmIERVS19BQ1RfRkxBR19DT05TVFJVQ1RfUFJPWFkpICYm IChjYWxsX2ZsYWdzICYgRFVLX0NBTExfRkxBR19DT05TVFJVQ1RfUFJPWFkpKSB8fAorCSAgICAg ICAgICAgKCEoYWN0LT5mbGFncyAmIERVS19BQ1RfRkxBR19DT05TVFJVQ1RfUFJPWFkpICYmICEo Y2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUX1BST1hZKSkpOworCWlmIChEVUtf SE9CSkVDVF9IQVNfTk9UQUlMKGZ1bmMpKSB7CisJCS8qIFNlZTogdGVzdC1idWctdGFpbGNhbGwt cHJldmVudHlpZWxkLWFzc2VydC5jLiAqLworCQlEVUtfREREKERVS19ERERQUklOVCgidGFpbCBj YWxsIHByZXZlbnRlZCBieSBmdW5jdGlvbiBoYXZpbmcgYSBub3RhaWwgZmxhZyIpKTsKKwkJcmV0 dXJuIDA7CisJfQorCisJLyoKKwkgKiAgVGFpbGNhbGwgaGFuZGxpbmcKKwkgKgorCSAqICBBbHRo b3VnaCB0aGUgY2FsbHN0YWNrIGVudHJ5IGlzIHJldXNlZCwgd2UgbmVlZCB0byBleHBsaWNpdGx5 IHVud2luZAorCSAqICB0aGUgY3VycmVudCBhY3RpdmF0aW9uIChvciBzaW11bGF0ZSBhbiB1bndp bmQpLiAgSW4gcGFydGljdWxhciwgdGhlCisJICogIGN1cnJlbnQgYWN0aXZhdGlvbiBtdXN0IGJl IGNsb3NlZCwgb3RoZXJ3aXNlIHNvbWV0aGluZyBsaWtlCisJICogIHRlc3QtYnVnLXJlZHVjZS1q dWRvZnlyLmpzIHJlc3VsdHMuICBBbHNvIGNhdGNoZXJzIG5lZWQgdG8gYmUgdW53b3VuZAorCSAq ICBiZWNhdXNlIHRoZXJlIG1heSBiZSBub24tZXJyb3ItY2F0Y2hpbmcgbGFiZWwgZW50cmllcyBp biB2YWxpZCB0YWlsIGNhbGxzLgorCSAqCisJICogIFNwZWNpYWwgYXR0ZW50aW9uIGlzIG5lZWRl ZCBmb3IgZGVidWdnZXIgYW5kIHBhdXNlIGJlaGF2aW9yIHdoZW4KKwkgKiAgcmV1c2luZyBhbiBh Y3RpdmF0aW9uLgorCSAqICAgIC0gRGlzYWJsZSBTdGVwT3V0IHByb2Nlc3NpbmcgZm9yIHRoZSBh Y3RpdmF0aW9uIHVud2luZCBiZWNhdXNlCisJICogICAgICB3ZSByZXVzZSB0aGUgYWN0aXZhdGlv biwgc2VlOgorCSAqICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3N2YWFyYWxhL2R1a3RhcGUvaXNz dWVzLzE2ODQuCisJICogICAgLSBEaXNhYmxlIGxpbmUgY2hhbmdlIHBhdXNlIGZsYWcgcGVybWFu ZW50bHkgaWYgYWN0ID09IGRiZ19wYXVzZV9hY3QKKwkgKiAgICAgIChpZiBzZXQpIGJlY2F1c2Ug aXQgd291bGQgbm8gbG9uZ2VyIGJlIHJlbGV2YW50LCBzZWU6CisJICogICAgICBodHRwczovL2dp dGh1Yi5jb20vc3ZhYXJhbGEvZHVrdGFwZS9pc3N1ZXMvMTcyNiwKKwkgKiAgICAgIGh0dHBzOi8v Z2l0aHViLmNvbS9zdmFhcmFsYS9kdWt0YXBlL2lzc3Vlcy8xNzg2LgorCSAqICAgIC0gQ2hlY2sg Zm9yIGZ1bmN0aW9uIGVudHJ5IChlLmcuIFN0ZXBJbnRvKSBwYXVzZSBmbGFnIGhlcmUsIGJlY2F1 c2UKKwkgKiAgICAgIHRoZSBleGVjdXRvciBwYXVzZSBjaGVjayB3b24ndCB0cmlnZ2VyIGR1ZSB0 byBzaGFyZWQgYWN0aXZhdGlvbiwgc2VlOgorCSAqICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3N2 YWFyYWxhL2R1a3RhcGUvaXNzdWVzLzE3MjYuCisJICovCisKKwlEVUtfREREKERVS19ERERQUklO VCgiaXMgdGFpbCBjYWxsLCByZXVzaW5nIGFjdGl2YXRpb24gYXQgY2FsbHN0YWNrIHRvcCwgYXQg aW5kZXggJWxkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICh0aHItPmNh bGxzdGFja190b3AgLSAxKSkpOworCisJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX0JPVU5E RlVOQyhmdW5jKSk7CisJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX05BVEZVTkMoZnVuYykp OworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSEFTX0NPTVBGVU5DKGZ1bmMpKTsKKwlEVUtfQVNT RVJUKChhY3QtPmZsYWdzICYgRFVLX0FDVF9GTEFHX1BSRVZFTlRfWUlFTEQpID09IDApOworCURV S19BU1NFUlQoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfQUxMT1dfRUNNQVRPRUNNQSk7CisK KwkvKiBVbndpbmQgdGhlIHRvcG1vc3QgY2FsbHN0YWNrIGVudHJ5IGJlZm9yZSByZXVzaW5nIGl0 LiAgVGhpcworCSAqIGFsc28gdW53aW5kcyB0aGUgY2F0Y2hlcnMgcmVsYXRlZCB0byB0aGUgdG9w bW9zdCBlbnRyeS4KKwkgKi8KKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+IDApOwor CURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciAhPSBOVUxMKTsKKyNpZiBkZWZpbmVkKERV S19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlpZiAoYWN0ID09IHRoci0+aGVhcC0+ZGJnX3BhdXNl X2FjdCkgeworCQl0aHItPmhlYXAtPmRiZ19wYXVzZV9mbGFncyAmPSB+RFVLX1BBVVNFX0ZMQUdf TElORV9DSEFOR0U7CisJfQorCisJcHJldl9wYXVzZV9hY3QgPSB0aHItPmhlYXAtPmRiZ19wYXVz ZV9hY3Q7CisJdGhyLT5oZWFwLT5kYmdfcGF1c2VfYWN0ID0gTlVMTDsKKwlpZiAodGhyLT5oZWFw LT5kYmdfcGF1c2VfZmxhZ3MgJiBEVUtfUEFVU0VfRkxBR19GVU5DX0VOVFJZKSB7CisJCURVS19E KERVS19EUFJJTlQoIlBBVVNFIFRSSUdHRVJFRCBieSBmdW5jdGlvbiBlbnRyeSAodGFpbGNhbGwp IikpOworCQlkdWtfZGVidWdfc2V0X3BhdXNlZCh0aHItPmhlYXApOworCX0KKyNlbmRpZgorCWR1 a19odGhyZWFkX2FjdGl2YXRpb25fdW53aW5kX3JldXNlX25vcnoodGhyKTsKKyNpZiBkZWZpbmVk KERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwl0aHItPmhlYXAtPmRiZ19wYXVzZV9hY3QgPSBw cmV2X3BhdXNlX2FjdDsKKyNlbmRpZgorCURVS19BU1NFUlQoYWN0ID09IHRoci0+Y2FsbHN0YWNr X2N1cnIpOworCisJLyogWFhYOiBXZSBjb3VsZCByZXN0b3JlIHRoZSBjYWxsZXIncyB2YWx1ZSBz dGFjayByZXNlcnZlCisJICogaGVyZSwgYXMgaWYgd2UgZGlkIGFuIGFjdHVhbCB1bndpbmQtYW5k LWNhbGwuICBXaXRob3V0CisJICogdGhlIHJlc3RvcmF0aW9uLCB2YWx1ZSBzdGFjayByZXNlcnZl IG1heSByZW1haW4gaGlnaGVyCisJICogdGhhbiB3b3VsZCBvdGhlcndpc2UgYmUgcG9zc2libGUg dW50aWwgd2UgcmV0dXJuIHRvIGEKKwkgKiBub24tdGFpbGNhbGwuCisJICovCisKKwkvKiBUaGVu IHJldXNlIHRoZSB1bndvdW5kIGFjdGl2YXRpb24uICovCisJYWN0LT5jYXQgPSBOVUxMOworCWFj dC0+dmFyX2VudiA9IE5VTEw7CisJYWN0LT5sZXhfZW52ID0gTlVMTDsKKwlEVUtfQVNTRVJUKGZ1 bmMgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfQ09NUEZVTkMoZnVuYykp OworCWFjdC0+ZnVuYyA9IGZ1bmM7ICAvKiBkb24ndCB3YW50IGFuIGludGVybWVkaWF0ZSBleHBv c2VkIHN0YXRlIHdpdGggZnVuYyA9PSBOVUxMICovCisjaWYgZGVmaW5lZChEVUtfVVNFX05PTlNU RF9GVU5DX0NBTExFUl9QUk9QRVJUWSkKKwlhY3QtPnByZXZfY2FsbGVyID0gTlVMTDsKKyNlbmRp ZgorCS8qIGRvbid0IHdhbnQgYW4gaW50ZXJtZWRpYXRlIGV4cG9zZWQgc3RhdGUgd2l0aCBpbnZh bGlkIHBjICovCisJYWN0LT5jdXJyX3BjID0gRFVLX0hDT01QRlVOQ19HRVRfQ09ERV9CQVNFKHRo ci0+aGVhcCwgKGR1a19oY29tcGZ1bmMgKikgZnVuYyk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RF QlVHR0VSX1NVUFBPUlQpCisJYWN0LT5wcmV2X2xpbmUgPSAwOworI2VuZGlmCisJRFVLX1RWQUxf U0VUX09CSkVDVCgmYWN0LT50dl9mdW5jLCBmdW5jKTsgIC8qIGJvcnJvd2VkLCBubyByZWZjb3Vu dCAqLworCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIGZ1bmMpOworCisJYWN0LT5mbGFncyA9IERV S19BQ1RfRkxBR19UQUlMQ0FMTEVEOworCWlmIChEVUtfSE9CSkVDVF9IQVNfU1RSSUNUKGZ1bmMp KSB7CisJCWFjdC0+ZmxhZ3MgfD0gRFVLX0FDVF9GTEFHX1NUUklDVDsKKwl9CisJaWYgKGNhbGxf ZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVCkgeworCQlhY3QtPmZsYWdzIHw9IERVS19B Q1RfRkxBR19DT05TVFJVQ1Q7CisJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJ aWYgKGNhbGxfZmxhZ3MgJiBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVF9QUk9YWSkgeworCQlhY3Qt PmZsYWdzIHw9IERVS19BQ1RfRkxBR19DT05TVFJVQ1RfUFJPWFk7CisJfQorI2VuZGlmCisKKwlE VUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkMoYWN0KSA9PSBmdW5jKTsgICAgICAvKiBhbHJlYWR5 IHVwZGF0ZWQgKi8KKwlEVUtfQVNTRVJUKGFjdC0+dmFyX2VudiA9PSBOVUxMKTsKKwlEVUtfQVNT RVJUKGFjdC0+bGV4X2VudiA9PSBOVUxMKTsKKwlhY3QtPmJvdHRvbV9ieXRlb2ZmID0gZW50cnlf dmFsc3RhY2tfYm90dG9tX2J5dGVvZmY7ICAvKiB0YWlsIGNhbGwgLT4gcmV1c2UgY3VycmVudCAi ZnJhbWUiICovCisjaWYgMAorCS8qIFRvcG1vc3QgYWN0aXZhdGlvbiByZXR2YWxfYnl0ZW9mZiBp cyBjb25zaWRlcmVkIGdhcmJhZ2UsIG5vIG5lZWQgdG8gaW5pdC4gKi8KKwlhY3QtPnJldHZhbF9i eXRlb2ZmID0gMDsKKyNlbmRpZgorCS8qIEZpbGxlZCBpbiB3aGVuIGZpbmFsIHJlc2VydmUgaXMg a25vd24sIGR1bW15IHZhbHVlIGRvZXNuJ3QgbWF0dGVyCisJICogZXZlbiBpbiBlcnJvciB1bndp bmQgYmVjYXVzZSByZXNlcnZlX2J5dGVvZmYgaXMgb25seSB1c2VkIHdoZW4KKwkgKiByZXR1cm5p bmcgdG8gLXRoaXMtIGFjdGl2YXRpb24uCisJICovCisJYWN0LT5yZXNlcnZlX2J5dGVvZmYgPSAw OworCisJLyoKKwkgKiAgTWFuaXB1bGF0ZSB2YWxzdGFjayBzbyB0aGF0IGFyZ3MgYXJlIG9uIHRo ZSBjdXJyZW50IGJvdHRvbSBhbmQgdGhlCisJICogIHByZXZpb3VzIGNhbGxlcidzICd0aGlzJyBi aW5kaW5nICh3aGljaCBpcyB0aGUgdmFsdWUgcHJlY2VkaW5nIHRoZQorCSAqICBjdXJyZW50IGJv dHRvbSkgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmV3ICd0aGlzJyBiaW5kaW5nOgorCSAqCisJICog ICAgICAgWyAuLi4gdGhpc19vbGQgfCAoY3J1ZCkgZnVuYyB0aGlzX25ldyBhcmcxIC4uLiBhcmdO IF0KKwkgKiAgLS0+ICBbIC4uLiB0aGlzX25ldyB8IGFyZzEgLi4uIGFyZ04gXQorCSAqCisJICog IEZvciB0YWlsIGNhbGxpbmcgdG8gd29yayBwcm9wZXJseSwgdGhlIHZhbHN0YWNrIGJvdHRvbSBt dXN0IG5vdCBncm93CisJICogIGhlcmU7IG90aGVyd2lzZSBjcnVkIHdvdWxkIGFjY3VtdWxhdGUg b24gdGhlIHZhbHN0YWNrLgorCSAqLworCisJdHYxID0gdGhyLT52YWxzdGFja19ib3R0b20gLSAx OworCXR2MiA9IHRoci0+dmFsc3RhY2tfYm90dG9tICsgaWR4X2Z1bmMgKyAxOworCURVS19BU1NF UlQodHYxID49IHRoci0+dmFsc3RhY2sgJiYgdHYxIDwgdGhyLT52YWxzdGFja190b3ApOyAgLyog dHYxIGlzIC1iZWxvdy0gdmFsc3RhY2tfYm90dG9tICovCisJRFVLX0FTU0VSVCh0djIgPj0gdGhy LT52YWxzdGFja19ib3R0b20gJiYgdHYyIDwgdGhyLT52YWxzdGFja190b3ApOworCURVS19UVkFM X1NFVF9UVkFMX1VQRFJFRih0aHIsIHR2MSwgdHYyKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCisJ aWR4X2FyZ3MgPSBpZHhfZnVuYyArIDI7CisJZHVrX3JlbW92ZV9uKHRociwgMCwgaWR4X2FyZ3Mp OyAgLyogbWF5IGJlIE5PUlogKi8KKworCWlkeF9mdW5jID0gMDsgRFVLX1VOUkVGKGlkeF9mdW5j KTsgIC8qIHJlYWxseSAnbm90IGFwcGxpY2FibGUnIGFueW1vcmUsIHNob3VsZCBub3QgYmUgcmVm ZXJlbmNlZCBhZnRlciB0aGlzICovCisJaWR4X2FyZ3MgPSAwOworCisJKm91dF9uYXJncyA9ICgo ZHVrX2hjb21wZnVuYyAqKSBmdW5jKS0+bmFyZ3M7CisJKm91dF9ucmVncyA9ICgoZHVrX2hjb21w ZnVuYyAqKSBmdW5jKS0+bnJlZ3M7CisJRFVLX0FTU0VSVCgqb3V0X25yZWdzID49IDApOworCURV S19BU1NFUlQoKm91dF9ucmVncyA+PSAqb3V0X25hcmdzKTsKKwkqb3V0X3ZzX21pbl9ieXRlcyA9 IGVudHJ5X3ZhbHN0YWNrX2JvdHRvbV9ieXRlb2ZmICsgc2l6ZW9mKGR1a190dmFsKSAqICgoZHVr X3NpemVfdCkgKm91dF9ucmVncyArIERVS19WQUxTVEFDS19JTlRFUk5BTF9FWFRSQSk7CisKKwor I2lmIGRlZmluZWQoRFVLX1VTRV9OT05TVERfRlVOQ19DQUxMRVJfUFJPUEVSVFkpCisjaWYgZGVm aW5lZChEVUtfVVNFX1RBSUxDQUxMKQorI2Vycm9yIGluY29ycmVjdCBvcHRpb25zOiB0YWlsIGNh bGxzIGVuYWJsZWQgd2l0aCBmdW5jdGlvbiBjYWxsZXIgcHJvcGVydHkKKyNlbmRpZgorCS8qIFhY WDogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgcHJvcGVybHkgZm9yIHRhaWwgY2FsbHMsIHNv CisJICogdGFpbCBjYWxscyBhcmUgZGlzYWJsZWQgd2hlbiBEVUtfVVNFX05PTlNURF9GVU5DX0NB TExFUl9QUk9QRVJUWQorCSAqIGlzIGluIHVzZS4KKwkgKi8KKwlkdWtfX3VwZGF0ZV9mdW5jX2Nh bGxlcl9wcm9wKHRociwgZnVuYyk7CisjZW5kaWYKKworCS8qIFsgLi4uIHRoaXNfbmV3IHwgYXJn MSAuLi4gYXJnTiBdICovCisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9UQUlM Q0FMTCAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX2NhbGxfc2V0dXBfYWN0X25vdF90YWlsY2Fs bChkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX3NtYWxsX3VpbnRfdCBjYWxsX2ZsYWdzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IGlkeF9mdW5jLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3Qg KmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk dWtfc2l6ZV90IGVudHJ5X3ZhbHN0YWNrX2JvdHRvbV9ieXRlb2ZmLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3NpemVfdCBlbnRyeV92YWxzdGFj a19lbmRfYnl0ZW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGR1a19pZHhfdCAqb3V0X25hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90ICpvdXRfbnJlZ3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc2l6ZV90ICpvdXRfdnNfbWlu X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX2FjdGl2YXRpb24gKipvdXRfYWN0KSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtf YWN0aXZhdGlvbiAqbmV3X2FjdDsKKworCURVS19VTlJFRihlbnRyeV92YWxzdGFja19lbmRfYnl0 ZW9mZik7CisKKwlEVUtfREREKERVS19ERERQUklOVCgibm90IGEgdGFpbCBjYWxsLCBwdXNoaW5n IGEgbmV3IGFjdGl2YXRpb24gdG8gY2FsbHN0YWNrLCB0byBpbmRleCAlbGQiLAorCSAgICAgICAg ICAgICAgICAgICAgIChsb25nKSAodGhyLT5jYWxsc3RhY2tfdG9wKSkpOworCisJZHVrX19jYWxs X2NhbGxzdGFja19saW1pdF9jaGVjayh0aHIpOworCW5ld19hY3QgPSBkdWtfaHRocmVhZF9hY3Rp dmF0aW9uX2FsbG9jKHRocik7CisJRFVLX0FTU0VSVChuZXdfYWN0ICE9IE5VTEwpOworCisJYWN0 ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwlpZiAoYWN0ICE9IE5VTEwpIHsKKwkJLyoKKwkJICog IFVwZGF0ZSByZXR1cm4gdmFsdWUgc3RhY2sgaW5kZXggb2YgY3VycmVudCBhY3RpdmF0aW9uIChp ZiBhbnkpLgorCQkgKgorCQkgKiAgQWx0aG91Z2ggaXQgbWlnaHQgc2VlbSB0aGlzIGlzIG5vdCBu ZWNlc3NhcnkgKGJ5dGVjb2RlIGV4ZWN1dG9yCisJCSAqICBkb2VzIHRoaXMgZm9yIEVDTUFTY3Jp cHQtdG8tRUNNQVNjcmlwdCBjYWxsczsgb3RoZXIgY2FsbHMgYXJlCisJCSAqICBoYW5kbGVkIGhl cmUpLCB0aGlzIHR1cm5zIG91dCB0byBiZSBuZWNlc3NhcnkgZm9yIGhhbmRsaW5nIHlpZWxkCisJ CSAqICBhbmQgcmVzdW1lLiAgRm9yIHRoZW0sIGFuIEVDTUFTY3JpcHQtdG8tbmF0aXZlIGNhbGwg aGFwcGVucywgYW5kCisJCSAqICB0aGUgRUNNQVNjcmlwdCBjYWxsJ3MgcmV0dmFsX2J5dGVvZmYg bXVzdCBiZSBzZXQgZm9yIHRoaW5ncyB0byB3b3JrLgorCQkgKi8KKworCQlhY3QtPnJldHZhbF9i eXRlb2ZmID0gZW50cnlfdmFsc3RhY2tfYm90dG9tX2J5dGVvZmYgKyAoZHVrX3NpemVfdCkgaWR4 X2Z1bmMgKiBzaXplb2YoZHVrX3R2YWwpOworCX0KKworCW5ld19hY3QtPnBhcmVudCA9IGFjdDsK Kwl0aHItPmNhbGxzdGFja19jdXJyID0gbmV3X2FjdDsKKwl0aHItPmNhbGxzdGFja190b3ArKzsK KwlhY3QgPSBuZXdfYWN0OworCSpvdXRfYWN0ID0gYWN0OworCisJRFVLX0FTU0VSVCh0aHItPnZh bHN0YWNrX3RvcCA+IHRoci0+dmFsc3RhY2tfYm90dG9tKTsgIC8qIGF0IGxlYXN0IGVmZmVjdGl2 ZSAndGhpcycgKi8KKwlEVUtfQVNTRVJUKGZ1bmMgPT0gTlVMTCB8fCAhRFVLX0hPQkpFQ1RfSEFT X0JPVU5ERlVOQyhmdW5jKSk7CisKKwlhY3QtPmNhdCA9IE5VTEw7CisKKwlhY3QtPmZsYWdzID0g MDsKKwlpZiAoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUKSB7CisJCWFjdC0+ ZmxhZ3MgfD0gRFVLX0FDVF9GTEFHX0NPTlNUUlVDVDsKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNF X0VTNl9QUk9YWSkKKwlpZiAoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUX1BS T1hZKSB7CisJCWFjdC0+ZmxhZ3MgfD0gRFVLX0FDVF9GTEFHX0NPTlNUUlVDVF9QUk9YWTsKKwl9 CisjZW5kaWYKKwlpZiAoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfRElSRUNUX0VWQUwpIHsK KwkJYWN0LT5mbGFncyB8PSBEVUtfQUNUX0ZMQUdfRElSRUNUX0VWQUw7CisJfQorCisJLyogc3Rh cnQgb2YgYXJndW1lbnRzOiBpZHhfZnVuYyArIDIuICovCisJYWN0LT5mdW5jID0gZnVuYzsgIC8q IE5VTEwgZm9yIGxpZ2h0ZnVuYyAqLworCWlmIChEVUtfTElLRUxZKGZ1bmMgIT0gTlVMTCkpIHsK KwkJRFVLX1RWQUxfU0VUX09CSkVDVCgmYWN0LT50dl9mdW5jLCBmdW5jKTsgIC8qIGJvcnJvd2Vk LCBubyByZWZjb3VudCAqLworCQlpZiAoRFVLX0hPQkpFQ1RfSEFTX1NUUklDVChmdW5jKSkgewor CQkJYWN0LT5mbGFncyB8PSBEVUtfQUNUX0ZMQUdfU1RSSUNUOworCQl9CisJCWlmIChEVUtfSE9C SkVDVF9JU19DT01QRlVOQyhmdW5jKSkgeworCQkJKm91dF9uYXJncyA9ICgoZHVrX2hjb21wZnVu YyAqKSBmdW5jKS0+bmFyZ3M7CisJCQkqb3V0X25yZWdzID0gKChkdWtfaGNvbXBmdW5jICopIGZ1 bmMpLT5ucmVnczsKKwkJCURVS19BU1NFUlQoKm91dF9ucmVncyA+PSAwKTsKKwkJCURVS19BU1NF UlQoKm91dF9ucmVncyA+PSAqb3V0X25hcmdzKTsKKwkJCSpvdXRfdnNfbWluX2J5dGVzID0gZW50 cnlfdmFsc3RhY2tfYm90dG9tX2J5dGVvZmYgKworCQkJCXNpemVvZihkdWtfdHZhbCkgKiAoKGR1 a19zaXplX3QpIGlkeF9mdW5jICsgMlUgKyAoZHVrX3NpemVfdCkgKm91dF9ucmVncyArIERVS19W QUxTVEFDS19JTlRFUk5BTF9FWFRSQSk7CisJCX0gZWxzZSB7CisJCQkvKiBUcnVlIGJlY2F1c2Ug b2YgY2FsbCB0YXJnZXQgbG9va3VwIGNoZWNrcy4gKi8KKwkJCURVS19BU1NFUlQoRFVLX0hPQkpF Q1RfSVNfTkFURlVOQyhmdW5jKSk7CisKKwkJCSpvdXRfbmFyZ3MgPSAoKGR1a19obmF0ZnVuYyAq KSBmdW5jKS0+bmFyZ3M7CisJCQkqb3V0X25yZWdzID0gKm91dF9uYXJnczsKKwkJCWlmICgqb3V0 X25hcmdzID49IDApIHsKKwkJCQkqb3V0X3ZzX21pbl9ieXRlcyA9IGVudHJ5X3ZhbHN0YWNrX2Jv dHRvbV9ieXRlb2ZmICsKKwkJCQkJc2l6ZW9mKGR1a190dmFsKSAqICgoZHVrX3NpemVfdCkgaWR4 X2Z1bmMgKyAyVSArIChkdWtfc2l6ZV90KSAqb3V0X25yZWdzICsgRFVLX1ZBTFNUQUNLX0FQSV9F TlRSWV9NSU5JTVVNICsgRFVLX1ZBTFNUQUNLX0lOVEVSTkFMX0VYVFJBKTsKKwkJCX0gZWxzZSB7 CisJCQkJLyogVmFyYXJnIGZ1bmN0aW9uLiAqLworCQkJCWR1a19zaXplX3QgdmFsc3RhY2tfdG9w X2J5dGVvZmYgPSAoZHVrX3NpemVfdCkgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX3Rv cCAtICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjaykpOworCQkJCSpvdXRfdnNfbWluX2J5 dGVzID0gdmFsc3RhY2tfdG9wX2J5dGVvZmYgKworCQkJCQlzaXplb2YoZHVrX3R2YWwpICogKERV S19WQUxTVEFDS19BUElfRU5UUllfTUlOSU1VTSArIERVS19WQUxTVEFDS19JTlRFUk5BTF9FWFRS QSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlkdWtfc21hbGxfdWludF90IGxmX2ZsYWdzOwor CQlkdWtfdHZhbCAqdHZfZnVuYzsKKworCQlhY3QtPmZsYWdzIHw9IERVS19BQ1RfRkxBR19TVFJJ Q1Q7CisKKwkJdHZfZnVuYyA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCBpZHhfZnVuYyk7CisJ CURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTElHSFRGVU5DKHR2X2Z1bmMpKTsKKwkJRFVLX1RWQUxf U0VUX1RWQUwoJmFjdC0+dHZfZnVuYywgdHZfZnVuYyk7ICAvKiBib3Jyb3dlZCwgbm8gcmVmY291 bnQgKi8KKworCQlsZl9mbGFncyA9IERVS19UVkFMX0dFVF9MSUdIVEZVTkNfRkxBR1ModHZfZnVu Yyk7CisJCSpvdXRfbmFyZ3MgPSBEVUtfTEZVTkNfRkxBR1NfR0VUX05BUkdTKGxmX2ZsYWdzKTsK KwkJaWYgKCpvdXRfbmFyZ3MgIT0gRFVLX0xGVU5DX05BUkdTX1ZBUkFSR1MpIHsKKwkJCSpvdXRf dnNfbWluX2J5dGVzID0gZW50cnlfdmFsc3RhY2tfYm90dG9tX2J5dGVvZmYgKworCQkJCXNpemVv ZihkdWtfdHZhbCkgKiAoKGR1a19zaXplX3QpIGlkeF9mdW5jICsgMlUgKyAoZHVrX3NpemVfdCkg Km91dF9uYXJncyArIERVS19WQUxTVEFDS19BUElfRU5UUllfTUlOSU1VTSArIERVS19WQUxTVEFD S19JTlRFUk5BTF9FWFRSQSk7CisJCX0gZWxzZSB7CisJCQlkdWtfc2l6ZV90IHZhbHN0YWNrX3Rv cF9ieXRlb2ZmID0gKGR1a19zaXplX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja190 b3AgLSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spKTsKKwkJCSpvdXRfdnNfbWluX2J5 dGVzID0gdmFsc3RhY2tfdG9wX2J5dGVvZmYgKworCQkJCXNpemVvZihkdWtfdHZhbCkgKiAoRFVL X1ZBTFNUQUNLX0FQSV9FTlRSWV9NSU5JTVVNICsgRFVLX1ZBTFNUQUNLX0lOVEVSTkFMX0VYVFJB KTsKKwkJCSpvdXRfbmFyZ3MgPSAtMTsgIC8qIHZhcmFyZyAqLworCQl9CisJCSpvdXRfbnJlZ3Mg PSAqb3V0X25hcmdzOworCX0KKworCWFjdC0+dmFyX2VudiA9IE5VTEw7CisJYWN0LT5sZXhfZW52 ID0gTlVMTDsKKyNpZiBkZWZpbmVkKERVS19VU0VfTk9OU1REX0ZVTkNfQ0FMTEVSX1BST1BFUlRZ KQorCWFjdC0+cHJldl9jYWxsZXIgPSBOVUxMOworI2VuZGlmCisJYWN0LT5jdXJyX3BjID0gTlVM TDsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlhY3QtPnByZXZfbGlu ZSA9IDA7CisjZW5kaWYKKwlhY3QtPmJvdHRvbV9ieXRlb2ZmID0gZW50cnlfdmFsc3RhY2tfYm90 dG9tX2J5dGVvZmYgKyBzaXplb2YoZHVrX3R2YWwpICogKChkdWtfc2l6ZV90KSBpZHhfZnVuYyAr IDJVKTsKKyNpZiAwCisJYWN0LT5yZXR2YWxfYnl0ZW9mZiA9IDA7ICAgLyogdG9wbW9zdCBhY3Rp dmF0aW9uIHJldHZhbF9ieXRlb2ZmIGlzIGNvbnNpZGVyZWQgZ2FyYmFnZSwgbm8gbmVlZCB0byBp bml0ICovCisjZW5kaWYKKwkvKiBGaWxsZWQgaW4gd2hlbiBmaW5hbCByZXNlcnZlIGlzIGtub3du LCBkdW1teSB2YWx1ZSBkb2Vzbid0IG1hdHRlcgorCSAqIGV2ZW4gaW4gZXJyb3IgdW53aW5kIGJl Y2F1c2UgcmVzZXJ2ZV9ieXRlb2ZmIGlzIG9ubHkgdXNlZCB3aGVuCisJICogcmV0dXJuaW5nIHRv IC10aGlzLSBhY3RpdmF0aW9uLgorCSAqLworCWFjdC0+cmVzZXJ2ZV9ieXRlb2ZmID0gMDsgIC8q IGZpbGxlZCBpbiBieSBjYWxsZXIgKi8KKworCS8qIFhYWDogSXMgdGhpcyBJTkNSRUYgbmVjZXNz YXJ5PyAnZnVuYycgaXMgYWx3YXlzIGEgYm9ycm93ZWQKKwkgKiByZWZlcmVuY2UgcmVhY2hhYmxl IHRocm91Z2ggdGhlIHZhbHVlIHN0YWNrPyAgSWYgY2hhbmdlZCwgc3RhY2sKKwkgKiB1bndpbmQg Y29kZSBhbHNvIG5lZWRzIHRvIGJlIGZpeGVkIHRvIG1hdGNoLgorCSAqLworCURVS19IT0JKRUNU X0lOQ1JFRl9BTExPV05VTEwodGhyLCBmdW5jKTsgIC8qIGFjdC0+ZnVuYyAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX05PTlNURF9GVU5DX0NBTExFUl9QUk9QRVJUWSkKKwlpZiAoZnVuYykgewor CQlkdWtfX3VwZGF0ZV9mdW5jX2NhbGxlcl9wcm9wKHRociwgZnVuYyk7CisJfQorI2VuZGlmCit9 CisKKy8qCisgKiAgRW52aXJvbm1lbnQgc2V0dXAuCisgKi8KKworRFVLX0xPQ0FMIHZvaWQgZHVr X19jYWxsX2Vudl9zZXR1cChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaG9iamVjdCAqZnVuYywgZHVr X2FjdGl2YXRpb24gKmFjdCwgZHVrX2lkeF90IGlkeF9hcmdzKSB7CisJZHVrX2hvYmplY3QgKmVu djsKKworCURVS19BU1NFUlQoZnVuYyA9PSBOVUxMIHx8ICFEVUtfSE9CSkVDVF9IQVNfQk9VTkRG VU5DKGZ1bmMpKTsgIC8qIGJvdW5kIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQg Ki8KKworCWlmIChEVUtfTElLRUxZKGZ1bmMgIT0gTlVMTCkpIHsKKwkJaWYgKERVS19MSUtFTFko RFVLX0hPQkpFQ1RfSEFTX05FV0VOVihmdW5jKSkpIHsKKwkJCWlmIChEVUtfTElLRUxZKCFEVUtf SE9CSkVDVF9IQVNfQ1JFQVRFQVJHUyhmdW5jKSkpIHsKKwkJCQkvKiBVc2UgYSBuZXcgZW52aXJv bm1lbnQgYnV0IHRoZXJlJ3Mgbm8gJ2FyZ3VtZW50cycgb2JqZWN0OworCQkJCSAqIGRlbGF5ZWQg ZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24uICBUaGlzIGlzIHRoZSBtb3N0CisJCQkJICogY29t bW9uIGNhc2UuCisJCQkJICovCisJCQkJRFVLX0FTU0VSVChhY3QtPmxleF9lbnYgPT0gTlVMTCk7 CisJCQkJRFVLX0FTU0VSVChhY3QtPnZhcl9lbnYgPT0gTlVMTCk7CisJCQl9IGVsc2UgeworCQkJ CS8qIFVzZSBhIG5ldyBlbnZpcm9ubWVudCBhbmQgdGhlcmUncyBhbiAnYXJndW1lbnRzJyBvYmpl Y3QuCisJCQkJICogV2UgbmVlZCB0byBpbml0aWFsaXplIGl0IHJpZ2h0IG5vdy4KKwkJCQkgKi8K KworCQkJCS8qIHRoaXJkIGFyZzogYWJzb2x1dGUgaW5kZXggKHRvIGVudGlyZSB2YWxzdGFjaykg b2YgYm90dG9tX2J5dGVvZmYgb2YgbmV3IGFjdGl2YXRpb24gKi8KKwkJCQllbnYgPSBkdWtfY3Jl YXRlX2FjdGl2YXRpb25fZW52aXJvbm1lbnRfcmVjb3JkKHRociwgZnVuYywgYWN0LT5ib3R0b21f Ynl0ZW9mZik7CisJCQkJRFVLX0FTU0VSVChlbnYgIT0gTlVMTCk7CisKKwkJCQkvKiBbIC4uLiBm dW5jIHRoaXMgYXJnMSAuLi4gYXJnTiBlbnZvYmogXSAqLworCisJCQkJRFVLX0FTU0VSVChEVUtf SE9CSkVDVF9IQVNfQ1JFQVRFQVJHUyhmdW5jKSk7CisJCQkJZHVrX19oYW5kbGVfY3JlYXRlYXJn c19mb3JfY2FsbCh0aHIsIGZ1bmMsIGVudiwgaWR4X2FyZ3MpOworCisJCQkJLyogWyAuLi4gZnVu YyB0aGlzIGFyZzEgLi4uIGFyZ04gZW52b2JqIF0gKi8KKworCQkJCWFjdC0+bGV4X2VudiA9IGVu djsKKwkJCQlhY3QtPnZhcl9lbnYgPSBlbnY7CisJCQkJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwg ZW52KTsKKwkJCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBlbnYpOyAgLyogWFhYOiBpbmNyZWYg YnkgY291bnQgKDIpIGRpcmVjdGx5ICovCisJCQkJZHVrX3BvcCh0aHIpOworCQkJfQorCQl9IGVs c2UgeworCQkJLyogVXNlIGV4aXN0aW5nIGVudiAoZS5nLiBmb3Igbm9uLXN0cmljdCBldmFsKTsg Y2Fubm90IGhhdmUKKwkJCSAqIGFuIG93biAnYXJndW1lbnRzJyBvYmplY3QgKGJ1dCBjYW4gcmVm ZXIgdG8gYW4gZXhpc3Rpbmcgb25lKS4KKwkJCSAqLworCisJCQlEVUtfQVNTRVJUKCFEVUtfSE9C SkVDVF9IQVNfQ1JFQVRFQVJHUyhmdW5jKSk7CisKKwkJCWR1a19faGFuZGxlX29sZGVudl9mb3Jf Y2FsbCh0aHIsIGZ1bmMsIGFjdCk7CisKKwkJCURVS19BU1NFUlQoYWN0LT5sZXhfZW52ICE9IE5V TEwpOworCQkJRFVLX0FTU0VSVChhY3QtPnZhcl9lbnYgIT0gTlVMTCk7CisJCX0KKwl9IGVsc2Ug eworCQkvKiBMaWdodGZ1bmNzIGFyZSBhbHdheXMgbmF0aXZlIGZ1bmN0aW9ucyBhbmQgaGF2ZSAi bmV3ZW52Ii4gKi8KKwkJRFVLX0FTU0VSVChhY3QtPmxleF9lbnYgPT0gTlVMTCk7CisJCURVS19B U1NFUlQoYWN0LT52YXJfZW52ID09IE5VTEwpOworCX0KK30KKworLyoKKyAqICBNaXNjIHNoYXJl ZCBoZWxwZXJzLgorICovCisKKy8qIENoZWNrIHRocmVhZCBzdGF0ZSwgdXBkYXRlIGN1cnJlbnQg dGhyZWFkLiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19jYWxsX3RocmVhZF9zdGF0ZV91cGRhdGUo ZHVrX2h0aHJlYWQgKnRocikgeworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJaWYgKERV S19MSUtFTFkodGhyID09IHRoci0+aGVhcC0+Y3Vycl90aHJlYWQpKSB7CisJCWlmIChEVUtfVU5M SUtFTFkodGhyLT5zdGF0ZSAhPSBEVUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HKSkgeworCQkJLyog U2hvdWxkIGFjdHVhbGx5IG5ldmVyIGhhcHBlbiwgYnV0IGNoZWNrIGFueXdheS4gKi8KKwkJCWdv dG8gdGhyZWFkX3N0YXRlX2Vycm9yOworCQl9CisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVCh0aHIt PmhlYXAtPmN1cnJfdGhyZWFkID09IE5VTEwgfHwKKwkJICAgICAgICAgICB0aHItPmhlYXAtPmN1 cnJfdGhyZWFkLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HKTsKKwkJaWYgKERV S19VTkxJS0VMWSh0aHItPnN0YXRlICE9IERVS19IVEhSRUFEX1NUQVRFX0lOQUNUSVZFKSkgewor CQkJZ290byB0aHJlYWRfc3RhdGVfZXJyb3I7CisJCX0KKwkJRFVLX0hFQVBfU1dJVENIX1RIUkVB RCh0aHItPmhlYXAsIHRocik7CisJCXRoci0+c3RhdGUgPSBEVUtfSFRIUkVBRF9TVEFURV9SVU5O SU5HOworCisJCS8qIE11bHRpcGxlIHRocmVhZHMgbWF5IGJlIHNpbXVsdGFuZW91c2x5IGluIHRo ZSBSVU5OSU5HCisJCSAqIHN0YXRlLCBidXQgbm90IGluIHRoZSBzYW1lICJyZXN1bWUgY2hhaW4i LgorCQkgKi8KKwl9CisJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmN1cnJfdGhyZWFkID09IHRocik7 CisJRFVLX0FTU0VSVCh0aHItPnN0YXRlID09IERVS19IVEhSRUFEX1NUQVRFX1JVTk5JTkcpOwor CXJldHVybjsKKworIHRocmVhZF9zdGF0ZV9lcnJvcjoKKwlEVUtfRVJST1JfRk1UMSh0aHIsIERV S19FUlJfVFlQRV9FUlJPUiwgImludmFsaWQgdGhyZWFkIHN0YXRlICglbGQpIiwgKGxvbmcpIHRo ci0+c3RhdGUpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyoKKyAqICBNYWlu IHVucHJvdGVjdGVkIGNhbGwgaGFuZGxlciwgaGFuZGxlczoKKyAqCisgKiAgICAtIEFsbCBjb21i aW5hdGlvbnMgb2YgbmF0aXZlL0VDTUFTY3JpcHQgY2FsbGVyIGFuZCBuYXRpdmUvRUNNQVNjcmlw dAorICogICAgICB0YXJnZXQuCisgKgorICogICAgLSBPcHRpbWl6ZWQgRUNNQVNjcmlwdC10by1F Q01BU2NyaXB0IGNhbGwgd2hlcmUgY2FsbCBoYW5kbGluZyBvbmx5CisgKiAgICAgIHNldHMgdXAg YSBuZXcgZHVrX2FjdGl2YXRpb24gYnV0IHJldXNlcyBhbiBleGlzdGluZyBieXRlY29kZSBleGVj dXRvcgorICogICAgICAodGhlIGNhbGxlcikgd2l0aG91dCBuYXRpdmUgcmVjdXJzaW9uLgorICoK KyAqICAgIC0gVGFpbGNhbGxzLCB3aGVyZSBhbiBhY3RpdmF0aW9uIGlzIHJldXNlZCB3aXRob3V0 IGluY3JlYXNpbmcgY2FsbAorICogICAgICBzdGFjayAoZHVrX2FjdGl2YXRpb24pIGRlcHRoLgor ICoKKyAqICAgIC0gU2V0dXAgZm9yIGFuIGluaXRpYWwgRHVrdGFwZS5UaHJlYWQucmVzdW1lKCku CisgKgorICogIFRoZSBjYWxsIGhhbmRsZXIgZG9lc24ndCBwcm92aWRlIGFueSBwcm90ZWN0aW9u IGd1YXJhbnRlZXMsIHByb3RlY3RlZCBjYWxscworICogIG11c3QgYmUgaW1wbGVtZW50ZWQgZS5n LiBieSB3cmFwcGluZyB0aGUgY2FsbCBpbiBhIGR1a19zYWZlX2NhbGwoKS4KKyAqICBDYWxsIHNl dHVwIG1heSBmYWlsIGF0IGFueSBzdGFnZSwgZXZlbiB3aGVuIHRoZSBuZXcgYWN0aXZhdGlvbiBp cyBpbgorICogIHBsYWNlOyB0aGUgb25seSBndWFyYW50ZWUgaXMgdGhhdCB0aGUgc3RhdGUgaXMg Y29uc2lzdGVudCBmb3IgdW53aW5kaW5nLgorICovCisKK0RVS19MT0NBTCBkdWtfaW50X3QgZHVr X19oYW5kbGVfY2FsbF9yYXcoZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IGlkeF9mdW5jLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc21hbGxfdWludF90IGNhbGxfZmxhZ3MpIHsK KyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlkdWtfYWN0aXZhdGlvbiAqZW50cnlf YWN0OworCWR1a19zaXplX3QgZW50cnlfY2FsbHN0YWNrX3RvcDsKKyNlbmRpZgorCWR1a19zaXpl X3QgZW50cnlfdmFsc3RhY2tfYm90dG9tX2J5dGVvZmY7CisJZHVrX3NpemVfdCBlbnRyeV92YWxz dGFja19lbmRfYnl0ZW9mZjsKKwlkdWtfaW50X3QgZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGg7 CisJZHVrX2h0aHJlYWQgKmVudHJ5X2N1cnJfdGhyZWFkOworCWR1a191aW50X2Zhc3Q4X3QgZW50 cnlfdGhyZWFkX3N0YXRlOworCWR1a19pbnN0cl90ICoqZW50cnlfcHRyX2N1cnJfcGM7CisJZHVr X2lkeF90IGlkeF9hcmdzOworCWR1a19pZHhfdCBuYXJnczsgICAgICAgICAgICAvKiAjIGFyZ3Vt ZW50IHJlZ2lzdGVycyB0YXJnZXQgZnVuY3Rpb24gd2FudHMgKDwgMCA9PiAiYXMgaXMiKSAqLwor CWR1a19pZHhfdCBucmVnczsgICAgICAgICAgICAvKiAjIHRvdGFsIHJlZ2lzdGVycyB0YXJnZXQg ZnVuY3Rpb24gd2FudHMgb24gZW50cnkgKDwgMCA9PiAiYXMgaXMiKSAqLworCWR1a19zaXplX3Qg dnNfbWluX2J5dGVzOyAgICAvKiBtaW5pbXVtIHZhbHVlIHN0YWNrIHNpemUgKGJ5dGVzKSBmb3Ig aGFuZGxpbmcgY2FsbCAqLworCWR1a19ob2JqZWN0ICpmdW5jOyAgICAgICAgICAvKiAnZnVuYycg b24gc3RhY2sgKGJvcnJvd2VkIHJlZmVyZW5jZSkgKi8KKwlkdWtfYWN0aXZhdGlvbiAqYWN0Owor CWR1a19yZXRfdCByYzsKKwlkdWtfc21hbGxfdWludF90IHVzZV90YWlsY2FsbDsKKworCURVS19B U1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT5oZWFwICE9IE5VTEwpOworCS8q IEFzc2VydHMgZm9yIGhlYXAtPmN1cnJfdGhyZWFkIG9taXR0ZWQ6IGl0IG1heSBiZSBOVUxMLCAn dGhyJywgb3IKKwkgKiBhbnkgb3RoZXIgdGhyZWFkIChlLmcuIHdoZW4gaGVhcCB0aHJlYWQgaXMg dXNlZCB0byBydW4gZmluYWxpemVycykuCisJICovCisJRFVLX0FTU0VSVF9DVFhfVkFMSUQodGhy KTsKKwlEVUtfQVNTRVJUKGR1a19pc192YWxpZF9pbmRleCh0aHIsIGlkeF9mdW5jKSk7CisJRFVL X0FTU0VSVChpZHhfZnVuYyA+PSAwKTsKKworCURVS19TVEFUU19JTkModGhyLT5oZWFwLCBzdGF0 c19jYWxsX2FsbCk7CisKKwkvKiBJZiBhIHRhaWwgY2FsbDoKKwkgKiAgIC0gYW4gRUNNQVNjcmlw dCBhY3RpdmF0aW9uIG11c3QgYmUgb24gdG9wIG9mIHRoZSBjYWxsc3RhY2sKKwkgKiAgIC0gdGhl cmUgY2Fubm90IGJlIGFueSBjYXRjaCBzdGFjayBlbnRyaWVzIHRoYXQgd291bGQgY2F0Y2gKKwkg KiAgICAgYSByZXR1cm4KKwkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlp ZiAoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfVEFJTENBTEwpIHsKKwkJZHVrX2FjdGl2YXRp b24gKnRtcF9hY3Q7CisJCWR1a19jYXRjaGVyICp0bXBfY2F0OworCisJCURVS19BU1NFUlQodGhy LT5jYWxsc3RhY2tfdG9wID49IDEpOworCQlEVUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkModGhy LT5jYWxsc3RhY2tfY3VycikgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNf Q09NUEZVTkMoRFVLX0FDVF9HRVRfRlVOQyh0aHItPmNhbGxzdGFja19jdXJyKSkpOworCisJCS8q IE5vIGVudHJ5IGluIHRoZSBjYXRjaCBzdGFjayB3aGljaCB3b3VsZCBhY3R1YWxseSBjYXRjaCBh CisJCSAqIHRocm93IGNhbiByZWZlciB0byB0aGUgY2FsbHN0YWNrIGVudHJ5IGJlaW5nIHJldXNl ZC4KKwkJICogVGhlcmUgKmNhbiogYmUgY2F0Y2ggc3RhY2sgZW50cmllcyByZWZlcnJpbmcgdG8g dGhlIGN1cnJlbnQKKwkJICogY2FsbHN0YWNrIGVudHJ5IGFzIGxvbmcgYXMgdGhleSBkb24ndCBj YXRjaCAoZS5nLiBsYWJlbCBzaXRlcykuCisJCSAqLworCisJCXRtcF9hY3QgPSB0aHItPmNhbGxz dGFja19jdXJyOworCQlmb3IgKHRtcF9jYXQgPSB0bXBfYWN0LT5jYXQ7IHRtcF9jYXQgIT0gTlVM TDsgdG1wX2NhdCA9IHRtcF9jYXQtPnBhcmVudCkgeworCQkJRFVLX0FTU0VSVChEVUtfQ0FUX0dF VF9UWVBFKHRtcF9jYXQpID09IERVS19DQVRfVFlQRV9MQUJFTCk7IC8qIGEgbm9uLWNhdGNoaW5n IGVudHJ5ICovCisJCX0KKwl9CisjZW5kaWYgIC8qIERVS19VU0VfQVNTRVJUSU9OUyAqLworCisJ LyoKKwkgKiAgU3RvcmUgZW50cnkgc3RhdGUuCisJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0Vf QVNTRVJUSU9OUykKKwllbnRyeV9hY3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCWVudHJ5X2Nh bGxzdGFja190b3AgPSB0aHItPmNhbGxzdGFja190b3A7CisjZW5kaWYKKwllbnRyeV92YWxzdGFj a19ib3R0b21fYnl0ZW9mZiA9IChkdWtfc2l6ZV90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFs c3RhY2tfYm90dG9tIC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spOworCWVudHJ5X3Zh bHN0YWNrX2VuZF9ieXRlb2ZmID0gKGR1a19zaXplX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52 YWxzdGFja19lbmQgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjayk7CisJZW50cnlfY2Fs bF9yZWN1cnNpb25fZGVwdGggPSB0aHItPmhlYXAtPmNhbGxfcmVjdXJzaW9uX2RlcHRoOworCWVu dHJ5X2N1cnJfdGhyZWFkID0gdGhyLT5oZWFwLT5jdXJyX3RocmVhZDsgIC8qIG1heSBiZSBOVUxM IGlmIGZpcnN0IGNhbGwgKi8KKwllbnRyeV90aHJlYWRfc3RhdGUgPSB0aHItPnN0YXRlOworCWVu dHJ5X3B0cl9jdXJyX3BjID0gdGhyLT5wdHJfY3Vycl9wYzsgIC8qIG1heSBiZSBOVUxMICovCisK KwkvKiBJZiB0aHItPnB0cl9jdXJyX3BjIGlzIHNldCwgc3luYyBjdXJyX3BjIHRvIGFjdC0+cGMu ICBUaGVuIE5VTEwKKwkgKiB0aHItPnB0cl9jdXJyX3BjIHNvIHRoYXQgaXQncyBub3QgYWNjaWRl bnRhbGx5IHVzZWQgd2l0aCBhbiBpbmNvcnJlY3QKKwkgKiBhY3RpdmF0aW9uIHdoZW4gc2lkZSBl ZmZlY3RzIG9jY3VyLgorCSAqLworCWR1a19odGhyZWFkX3N5bmNfYW5kX251bGxfY3VycnBjKHRo cik7CisJRFVLX0FTU0VSVCh0aHItPnB0cl9jdXJyX3BjID09IE5VTEwpOworCisJRFVLX0REKERV S19ERFBSSU5UKCJkdWtfX2hhbmRsZV9jYWxsX3JhdzogdGhyPSVwLCBpZHhfZnVuYz0lbGQsICIK KwkgICAgICAgICAgICAgICAgICAgImNhbGxfZmxhZ3M9MHglMDhseCAoY29uc3RydWN0b3I9JWxk KSwgIgorCSAgICAgICAgICAgICAgICAgICAidmFsc3RhY2tfdG9wPSVsZCwgaWR4X2Z1bmM9JWxk LCBpZHhfYXJncz0lbGQsIHJlY19kZXB0aD0lbGQvJWxkLCAiCisJICAgICAgICAgICAgICAgICAg ICJlbnRyeV92YWxzdGFja19ib3R0b21fYnl0ZW9mZj0lbGQsIGVudHJ5X3ZhbHN0YWNrX2VuZF9i eXRlb2ZmPSVsZCwgIgorCSAgICAgICAgICAgICAgICAgICAiZW50cnlfY2FsbF9yZWN1cnNpb25f ZGVwdGg9JWxkLCAiCisJICAgICAgICAgICAgICAgICAgICJlbnRyeV9jdXJyX3RocmVhZD0lcCwg ZW50cnlfdGhyZWFkX3N0YXRlPSVsZCIsCisJICAgICAgICAgICAgICAgICAgICh2b2lkICopIHRo ciwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIGlkeF9mdW5jLAorCSAgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZykgY2FsbF9mbGFncywKKwkgICAgICAgICAgICAgICAgICAgKGxv bmcpICgoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfQ09OU1RSVUNUKSAhPSAwID8gMSA6IDAp LAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgZHVrX2dldF90b3AodGhyKSwKKwkgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGlkeF9mdW5jLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykg KGlkeF9mdW5jICsgMiksCisJICAgICAgICAgICAgICAgICAgIChsb25nKSB0aHItPmhlYXAtPmNh bGxfcmVjdXJzaW9uX2RlcHRoLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgdGhyLT5oZWFw LT5jYWxsX3JlY3Vyc2lvbl9saW1pdCwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5 X3ZhbHN0YWNrX2JvdHRvbV9ieXRlb2ZmLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgZW50 cnlfdmFsc3RhY2tfZW5kX2J5dGVvZmYsCisJICAgICAgICAgICAgICAgICAgIChsb25nKSBlbnRy eV9jYWxsX3JlY3Vyc2lvbl9kZXB0aCwKKwkgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgZW50 cnlfY3Vycl90aHJlYWQsCisJICAgICAgICAgICAgICAgICAgIChsb25nKSBlbnRyeV90aHJlYWRf c3RhdGUpKTsKKworCS8qCisJICogIFRocmVhZCBzdGF0ZSBjaGVjayBhbmQgYm9vay1rZWVwaW5n LgorCSAqLworCisJZHVrX19jYWxsX3RocmVhZF9zdGF0ZV91cGRhdGUodGhyKTsKKworCS8qCisJ ICogIFJlc29sdmUgZmluYWwgdGFyZ2V0IGZ1bmN0aW9uOyBoYW5kbGUgYm91bmQgZnVuY3Rpb25z IGFuZCBzcGVjaWFsCisJICogIGZ1bmN0aW9ucyBsaWtlIC5jYWxsKCkgYW5kIC5hcHBseSgpLiAg QWxzbyBmaWd1cmUgb3V0IHRoZSBlZmZlY3RpdmUKKwkgKiAgJ3RoaXMnIGJpbmRpbmcsIHdoaWNo IHJlcGxhY2VzIHRoZSBjdXJyZW50IHZhbHVlIGF0IGlkeF9mdW5jICsgMS4KKwkgKi8KKworCWlm IChEVUtfTElLRUxZKGR1a19fcmVzb2x2ZV90YXJnZXRfZmFzdHBhdGhfY2hlY2sodGhyLCBpZHhf ZnVuYywgJmZ1bmMsIGNhbGxfZmxhZ3MpICE9IDBVKSkgeworCQlEVUtfREREKERVS19ERERQUklO VCgiZmFzdCBwYXRoIHRhcmdldCByZXNvbHZlIikpOworCX0gZWxzZSB7CisJCURVS19EREQoRFVL X0RERFBSSU5UKCJzbG93IHBhdGggdGFyZ2V0IHJlc29sdmUiKSk7CisJCWZ1bmMgPSBkdWtfX3Jl c29sdmVfdGFyZ2V0X2Z1bmNfYW5kX3RoaXNfYmluZGluZyh0aHIsIGlkeF9mdW5jLCAmY2FsbF9m bGFncyk7CisJfQorCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSAtIGlkeF9mdW5jID49IDIp OyAgLyogYXQgbGVhc3QgZnVuYyBhbmQgdGhpcyBwcmVzZW50ICovCisKKwlEVUtfQVNTRVJUKGZ1 bmMgPT0gTlVMTCB8fCAhRFVLX0hPQkpFQ1RfSEFTX0JPVU5ERlVOQyhmdW5jKSk7CisJRFVLX0FT U0VSVChmdW5jID09IE5VTEwgfHwgKERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKGZ1bmMpIHx8CisJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0lTX05BVEZVTkMoZnVuYykp KTsKKworCS8qIFsgLi4uIGZ1bmMgdGhpcyBhcmcxIC4uLiBhcmdOIF0gKi8KKworCS8qCisJICog IFNldHVwIGEgcHJlbGltaW5hcnkgYWN0aXZhdGlvbiBhbmQgZmlndXJlIG91dCBuYXJncy9ucmVn cyBhbmQKKwkgKiAgdmFsdWUgc3RhY2sgbWluaW11bSBzaXplLgorCSAqCisJICogIERvbid0IHRv dWNoIHZhbHN0YWNrX2JvdHRvbSBvciB2YWxzdGFja190b3AgeWV0IHNvIHRoYXQgRHVrdGFwZSBB UEkKKwkgKiAgY2FsbHMgd29yayBub3JtYWxseS4KKwkgKgorCSAqICBCZWNhdXNlICdhY3QnIGlz IG5vdCB6ZXJvZWQsIGFsbCBmaWVsZHMgbXVzdCBiZSBmaWxsZWQgaW4uCisJICovCisKKwkvKiBT aG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYnV0IGluaXRpYWxpemUgdG8gc2lsZW5jZSB3YXJuaW5n cy4gKi8KKwlhY3QgPSBOVUxMOworCW5hcmdzID0gMDsKKwlucmVncyA9IDA7CisJdnNfbWluX2J5 dGVzID0gMDsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9UQUlMQ0FMTCkKKwl1c2VfdGFpbGNhbGwg PSAoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfVEFJTENBTEwpOworCWlmICh1c2VfdGFpbGNh bGwpIHsKKwkJdXNlX3RhaWxjYWxsID0gZHVrX19jYWxsX3NldHVwX2FjdF9hdHRlbXB0X3RhaWxj YWxsKHRociwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhbGxfZmxhZ3MsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZHhfZnVuYywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMsCisJCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV92YWxzdGFja19ib3R0b21fYnl0ZW9m ZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVudHJ5X3ZhbHN0YWNrX2VuZF9ieXRlb2ZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hcmdzLAorCQkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5yZWdzLAorCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZzX21pbl9ieXRlcywKKwkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhY3Qp OworCX0KKyNlbHNlCisJRFVLX0FTU0VSVCgoY2FsbF9mbGFncyAmIERVS19DQUxMX0ZMQUdfVEFJ TENBTEwpID09IDApOyAgLyogY29tcGlsZXIgZW5zdXJlcyB0aGlzICovCisJdXNlX3RhaWxjYWxs ID0gMDsKKyNlbmRpZgorCisJaWYgKHVzZV90YWlsY2FsbCkgeworCQlpZHhfYXJncyA9IDA7CisJ CURVS19TVEFUU19JTkModGhyLT5oZWFwLCBzdGF0c19jYWxsX3RhaWxjYWxsKTsKKwl9IGVsc2Ug eworCQlkdWtfX2NhbGxfc2V0dXBfYWN0X25vdF90YWlsY2FsbCh0aHIsCisJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbGxfZmxhZ3MsCisJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlkeF9mdW5jLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmdW5jLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV92YWxzdGFj a19ib3R0b21fYnl0ZW9mZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50 cnlfdmFsc3RhY2tfZW5kX2J5dGVvZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZuYXJncywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5yZWdzLAor CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnNfbWluX2J5dGVzLAorCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWN0KTsKKwkJaWR4X2FyZ3MgPSBpZHhfZnVu YyArIDI7CisJfQorCS8qIEFmdGVyIHRoaXMgcG9pbnQgaWR4X2Z1bmMgaXMgbm8gbG9uZ2VyIHZh bGlkIGZvciB0YWlsY2FsbHMuICovCisKKwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKworCS8q IFsgLi4uIGZ1bmMgdGhpcyBhcmcxIC4uLiBhcmdOIF0gKi8KKworCS8qCisJICogIEVudmlyb25t ZW50IHJlY29yZCBjcmVhdGlvbiBhbmQgJ2FyZ3VtZW50cycgb2JqZWN0IGNyZWF0aW9uLgorCSAq ICBOYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIG5hbWUgYmluZGluZyBpcyBoYW5kbGVkIGJ5IHRo ZQorCSAqICBjb21waWxlcjsgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3MgcGFyZW50IGVudiB3aWxs IGNvbnRhaW4KKwkgKiAgdGhlIChpbW11dGFibGUpIGJpbmRpbmcgYWxyZWFkeS4KKwkgKgorCSAq ICBUaGlzIGhhbmRsaW5nIGlzIG5vdyBpZGVudGljYWwgZm9yIEMgYW5kIEVDTUFTY3JpcHQgZnVu Y3Rpb25zLgorCSAqICBDIGZ1bmN0aW9ucyBhbHdheXMgaGF2ZSB0aGUgJ05FV0VOVicgZmxhZyBz ZXQsIHNvIHRoZWlyCisJICogIGVudmlyb25tZW50IHJlY29yZCBpbml0aWFsaXphdGlvbiBpcyBk ZWxheWVkICh3aGljaCBpcyBnb29kKS4KKwkgKgorCSAqICBEZWxheWVkIGNyZWF0aW9uIChvbiBk ZW1hbmQpIGlzIGhhbmRsZWQgaW4gZHVrX2pzX3Zhci5jLgorCSAqLworCisJZHVrX19jYWxsX2Vu dl9zZXR1cCh0aHIsIGZ1bmMsIGFjdCwgaWR4X2FyZ3MpOworCisJLyogWyAuLi4gZnVuYyB0aGlz IGFyZzEgLi4uIGFyZ04gXSAqLworCisJLyoKKwkgKiAgU2V0dXAgdmFsdWUgc3RhY2s6IGNsYW1w IHRvICduYXJncycsIGZpbGwgdXAgdG8gJ25yZWdzJywKKwkgKiAgZW5zdXJlIHZhbHVlIHN0YWNr IHNpemUgbWF0Y2hlcyB0YXJnZXQgcmVxdWlyZW1lbnRzLCBhbmQKKwkgKiAgc3dpdGNoIHZhbHVl IHN0YWNrIGJvdHRvbS4gIFZhbHN0YWNrIHRvcCBpcyBrZXB0LgorCSAqCisJICogIFZhbHVlIHN0 YWNrIGNhbiBvbmx5IGdyb3cgaGVyZS4KKwkgKi8KKworCWR1a192YWxzdGFja19ncm93X2NoZWNr X3Rocm93KHRociwgdnNfbWluX2J5dGVzKTsKKwlhY3QtPnJlc2VydmVfYnl0ZW9mZiA9IChkdWtf c2l6ZV90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfZW5kIC0gKGR1a191aW50OF90 ICopIHRoci0+dmFsc3RhY2spOworCisJaWYgKHVzZV90YWlsY2FsbCkgeworCQlEVUtfQVNTRVJU KG5yZWdzID49IDApOworCQlEVUtfQVNTRVJUKG5yZWdzID49IG5hcmdzKTsKKwkJZHVrX3NldF90 b3BfYW5kX3dpcGUodGhyLCBucmVncywgbmFyZ3MpOworCX0gZWxzZSB7CisJCWlmIChucmVncyA+ PSAwKSB7CisJCQlEVUtfQVNTRVJUKG5yZWdzID49IG5hcmdzKTsKKwkJCWR1a19zZXRfdG9wX2Fu ZF93aXBlKHRociwgaWR4X2Z1bmMgKyAyICsgbnJlZ3MsIGlkeF9mdW5jICsgMiArIG5hcmdzKTsK KwkJfSBlbHNlIHsKKwkJCTsKKwkJfQorCQl0aHItPnZhbHN0YWNrX2JvdHRvbSA9IHRoci0+dmFs c3RhY2tfYm90dG9tICsgaWR4X2Z1bmMgKyAyOworCX0KKwlEVUtfQVNTRVJUKHRoci0+dmFsc3Rh Y2tfYm90dG9tID49IHRoci0+dmFsc3RhY2spOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja190 b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQodGhyLT52YWxzdGFja19l bmQgPj0gdGhyLT52YWxzdGFja190b3ApOworCisJLyoKKwkgKiAgTWFrZSB0aGUgYWN0dWFsIGNh bGwuICBGb3IgRWNtYS10by1FY21hIGNhbGxzIGRldGVjdCB0aGF0CisJICogIHNldHVwIGlzIGNv bXBsZXRlLCB0aGVuIHJldHVybiB3aXRoIGEgc3RhdHVzIGNvZGUgdGhhdCBhbGxvd3MKKwkgKiAg dGhlIGNhbGxlciB0byByZXVzZSB0aGUgcnVubmluZyBleGVjdXRvci4KKwkgKi8KKworCWlmIChm dW5jICE9IE5VTEwgJiYgRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoZnVuYykpIHsKKwkJLyoKKwkJ ICogIEVDTUFTY3JpcHQgY2FsbC4KKwkJICovCisKKwkJRFVLX0FTU0VSVChmdW5jICE9IE5VTEwp OworCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19DT01QRlVOQyhmdW5jKSk7CisJCWFjdC0+ Y3Vycl9wYyA9IERVS19IQ09NUEZVTkNfR0VUX0NPREVfQkFTRSh0aHItPmhlYXAsIChkdWtfaGNv bXBmdW5jICopIGZ1bmMpOworCisJCWlmIChjYWxsX2ZsYWdzICYgRFVLX0NBTExfRkxBR19BTExP V19FQ01BVE9FQ01BKSB7CisJCQlEVUtfREQoRFVLX0REUFJJTlQoImF2b2lkIG5hdGl2ZSBjYWxs LCB1c2UgZXhpc3RpbmcgZXhlY3V0b3IiKSk7CisJCQlEVUtfU1RBVFNfSU5DKHRoci0+aGVhcCwg c3RhdHNfY2FsbF9lY21hdG9lY21hKTsKKwkJCURVS19BU1NFUlQoKGFjdC0+ZmxhZ3MgJiBEVUtf QUNUX0ZMQUdfUFJFVkVOVF9ZSUVMRCkgPT0gMCk7CisJCQlEVUtfUkVGWkVST19DSEVDS19GQVNU KHRocik7CisJCQlEVUtfQVNTRVJUKHRoci0+cHRyX2N1cnJfcGMgPT0gTlVMTCk7CisJCQlyZXR1 cm4gMTsgIC8qIDE9cmV1c2UgZXhlY3V0b3IgKi8KKwkJfQorCQlEVUtfQVNTRVJUKHVzZV90YWls Y2FsbCA9PSAwKTsKKworCQkvKiBkdWtfaHRocmVhZF9hY3RpdmF0aW9uX3Vud2luZF9ub3J6KCkg d2lsbCBkZWNyZWFzZSB0aGlzIG9uIHVud2luZCAqLworCQlEVUtfQVNTRVJUKChhY3QtPmZsYWdz ICYgRFVLX0FDVF9GTEFHX1BSRVZFTlRfWUlFTEQpID09IDApOworCQlhY3QtPmZsYWdzIHw9IERV S19BQ1RfRkxBR19QUkVWRU5UX1lJRUxEOworCQl0aHItPmNhbGxzdGFja19wcmV2ZW50Y291bnQr KzsKKworCQkvKiBYWFg6IHdlIGNvdWxkIGp1c3QgZG8gdGhpcyBvbiBlbnRyeSByZWdhcmRsZXNz IG9mIHJldXNlLCBhcyBsb25nCisJCSAqIGFzIHJlY3Vyc2lvbiBkZXB0aCBpcyBkZWNyZWFzZWQg Zm9yIGUyZSBjYXNlLgorCQkgKi8KKwkJZHVrX19jYWxsX2NfcmVjdXJzaW9uX2xpbWl0X2NoZWNr KHRocik7CisJCXRoci0+aGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGgrKzsKKworCQkvKiBbIC4u LiBmdW5jIHRoaXMgfCBhcmcxIC4uLiBhcmdOIF0gKCd0aGlzJyBtdXN0IHByZWNlZGUgbmV3IGJv dHRvbSkgKi8KKworCQkvKgorCQkgKiAgQnl0ZWNvZGUgZXhlY3V0b3IgY2FsbC4KKwkJICoKKwkJ ICogIEV4ZWN1dGUgYnl0ZWNvZGUsIGhhbmRsaW5nIGFueSByZWN1cnNpdmUgZnVuY3Rpb24gY2Fs bHMgYW5kCisJCSAqICB0aHJlYWQgcmVzdW1wdGlvbnMuICBSZXR1cm5zIHdoZW4gZXhlY3V0aW9u IHdvdWxkIHJldHVybiBmcm9tCisJCSAqICB0aGUgZW50cnkgbGV2ZWwgYWN0aXZhdGlvbi4gIFdo ZW4gdGhlIGV4ZWN1dG9yIHJldHVybnMsIGEKKwkJICogIHNpbmdsZSByZXR1cm4gdmFsdWUgaXMg bGVmdCBvbiB0aGUgc3RhY2sgdG9wLgorCQkgKgorCQkgKiAgVGhlIG9ubHkgcG9zc2libGUgbG9u Z2ptcCgpIGlzIGFuIGVycm9yIChEVUtfTEpfVFlQRV9USFJPVyksCisJCSAqICBvdGhlciB0eXBl cyBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBleGVjdXRvci4KKwkJICovCisKKwkJLyog dGhyLT5wdHJfY3Vycl9wYyBpcyBzZXQgYnkgYnl0ZWNvZGUgZXhlY3V0b3IgZWFybHkgb24gZW50 cnkgKi8KKwkJRFVLX0FTU0VSVCh0aHItPnB0cl9jdXJyX3BjID09IE5VTEwpOworCQlEVUtfRERE KERVS19ERERQUklOVCgiZW50ZXJpbmcgYnl0ZWNvZGUgZXhlY3V0aW9uIikpOworCQlkdWtfanNf ZXhlY3V0ZV9ieXRlY29kZSh0aHIpOworCQlEVUtfREREKERVS19ERERQUklOVCgicmV0dXJuZWQg ZnJvbSBieXRlY29kZSBleGVjdXRpb24iKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogIE5hdGl2 ZSBjYWxsLgorCQkgKi8KKworCQlEVUtfQVNTRVJUKGZ1bmMgPT0gTlVMTCB8fCAoKGR1a19obmF0 ZnVuYyAqKSBmdW5jKS0+ZnVuYyAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVCh1c2VfdGFpbGNhbGwg PT0gMCk7CisKKwkJLyogWyAuLi4gZnVuYyB0aGlzIHwgYXJnMSAuLi4gYXJnTiBdICgndGhpcycg bXVzdCBwcmVjZWRlIG5ldyBib3R0b20pICovCisKKwkJLyogZHVrX2h0aHJlYWRfYWN0aXZhdGlv bl91bndpbmRfbm9yeigpIHdpbGwgZGVjcmVhc2UgdGhpcyBvbiB1bndpbmQgKi8KKwkJRFVLX0FT U0VSVCgoYWN0LT5mbGFncyAmIERVS19BQ1RfRkxBR19QUkVWRU5UX1lJRUxEKSA9PSAwKTsKKwkJ YWN0LT5mbGFncyB8PSBEVUtfQUNUX0ZMQUdfUFJFVkVOVF9ZSUVMRDsKKwkJdGhyLT5jYWxsc3Rh Y2tfcHJldmVudGNvdW50Kys7CisKKwkJLyogWFhYOiB3ZSBjb3VsZCBqdXN0IGRvIHRoaXMgb24g ZW50cnkgcmVnYXJkbGVzcyBvZiByZXVzZSwgYXMgbG9uZworCQkgKiBhcyByZWN1cnNpb24gZGVw dGggaXMgZGVjcmVhc2VkIGZvciBlMmUgY2FzZS4KKwkJICovCisJCWR1a19fY2FsbF9jX3JlY3Vy c2lvbl9saW1pdF9jaGVjayh0aHIpOworCQl0aHItPmhlYXAtPmNhbGxfcmVjdXJzaW9uX2RlcHRo Kys7CisKKwkJLyogRm9yIG5hdGl2ZSBjYWxscyBtdXN0IGJlIE5VTEwgc28gd2UgZG9uJ3Qgc3lu YyBiYWNrICovCisJCURVS19BU1NFUlQodGhyLT5wdHJfY3Vycl9wYyA9PSBOVUxMKTsKKworCQkv KiBYWFg6IG5hdGl2ZSBmdW5jcHRyIGNvdWxkIGNvbWUgb3V0IG9mIGNhbGwgc2V0dXAuICovCisJ CWlmIChmdW5jKSB7CisJCQlyYyA9ICgoZHVrX2huYXRmdW5jICopIGZ1bmMpLT5mdW5jKHRocik7 CisJCX0gZWxzZSB7CisJCQlkdWtfdHZhbCAqdHZfZnVuYzsKKwkJCWR1a19jX2Z1bmN0aW9uIGZ1 bmNwdHI7CisKKwkJCXR2X2Z1bmMgPSAmYWN0LT50dl9mdW5jOworCQkJRFVLX0FTU0VSVChEVUtf VFZBTF9JU19MSUdIVEZVTkModHZfZnVuYykpOworCQkJZnVuY3B0ciA9IERVS19UVkFMX0dFVF9M SUdIVEZVTkNfRlVOQ1BUUih0dl9mdW5jKTsKKwkJCXJjID0gZnVuY3B0cih0aHIpOworCQl9CisK KwkJLyogQXV0b21hdGljIGVycm9yIHRocm93aW5nLCByZXR2YWwgY2hlY2suICovCisKKwkJaWYg KHJjID09IDApIHsKKwkJCURVS19BU1NFUlQodGhyLT52YWxzdGFjayA8IHRoci0+dmFsc3RhY2tf ZW5kKTsKKwkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHRoci0+dmFsc3RhY2tf dG9wKSk7CisJCQl0aHItPnZhbHN0YWNrX3RvcCsrOworCQl9IGVsc2UgaWYgKHJjID09IDEpIHsK KwkJCTsKKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCWR1a19lcnJvcl90aHJvd19mcm9tX25l Z2F0aXZlX3JjKHRociwgcmMpOworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJCX0g ZWxzZSB7CisJCQlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfSU5WQUxJRF9DRlVOQ19SQyk7 CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJfQorCX0KKwlEVUtfQVNTRVJUKHRo ci0+cHRyX2N1cnJfcGMgPT0gTlVMTCk7CisJRFVLX0FTU0VSVCh1c2VfdGFpbGNhbGwgPT0gMCk7 CisKKwkvKgorCSAqICBDb25zdHJ1Y3RvciBjYWxsIHBvc3QgcHJvY2Vzc2luZy4KKwkgKi8KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJaWYgKGNhbGxfZmxhZ3MgJiAoRFVLX0NB TExfRkxBR19DT05TVFJVQ1QgfCBEVUtfQ0FMTF9GTEFHX0NPTlNUUlVDVF9QUk9YWSkpIHsKKwkJ ZHVrX2NhbGxfY29uc3RydWN0X3Bvc3Rwcm9jZXNzKHRociwgY2FsbF9mbGFncyAmIERVS19DQUxM X0ZMQUdfQ09OU1RSVUNUX1BST1hZKTsKKwl9CisjZWxzZQorCWlmIChjYWxsX2ZsYWdzICYgRFVL X0NBTExfRkxBR19DT05TVFJVQ1QpIHsKKwkJZHVrX2NhbGxfY29uc3RydWN0X3Bvc3Rwcm9jZXNz KHRociwgMCk7CisJfQorI2VuZGlmCisKKwkvKgorCSAqICBVbndpbmQsIHJlc3RvcmUgdmFsc3Rh Y2sgYm90dG9tIGFuZCBvdGhlciBib29rLWtlZXBpbmcuCisJICovCisKKwlEVUtfQVNTRVJUKHRo ci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja19j dXJyLT5wYXJlbnQgPT0gZW50cnlfYWN0KTsKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX3Rv cCA9PSBlbnRyeV9jYWxsc3RhY2tfdG9wICsgMSk7CisJZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl91 bndpbmRfbm9yeih0aHIpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciA9PSBlbnRy eV9hY3QpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID09IGVudHJ5X2NhbGxzdGFj a190b3ApOworCisJdGhyLT52YWxzdGFja19ib3R0b20gPSAoZHVrX3R2YWwgKikgKHZvaWQgKikg KChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrICsgZW50cnlfdmFsc3RhY2tfYm90dG9tX2J5 dGVvZmYpOworCS8qIGtlZXAgY3VycmVudCB2YWxzdGFja190b3AgKi8KKwlEVUtfQVNTRVJUKHRo ci0+dmFsc3RhY2tfYm90dG9tID49IHRoci0+dmFsc3RhY2spOworCURVS19BU1NFUlQodGhyLT52 YWxzdGFja190b3AgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCURVS19BU1NFUlQodGhyLT52 YWxzdGFja19lbmQgPj0gdGhyLT52YWxzdGFja190b3ApOworCURVS19BU1NFUlQodGhyLT52YWxz dGFja190b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSA+PSBpZHhfZnVuYyArIDEpOworCisJLyog UmV0dXJuIHZhbHVlIGhhbmRsaW5nLiAqLworCisJLyogWyAuLi4gZnVuYyB0aGlzIChjcnVkKSBy ZXR2YWwgXSAqLworCisJeworCQlkdWtfdHZhbCAqdHZfcmV0OworCQlkdWtfdHZhbCAqdHZfZnVu cmV0OworCisJCXR2X3JldCA9IHRoci0+dmFsc3RhY2tfYm90dG9tICsgaWR4X2Z1bmM7CisJCXR2 X2Z1bnJldCA9IHRoci0+dmFsc3RhY2tfdG9wIC0gMTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFT VElOVCkKKwkJLyogRXhwbGljaXQgY2hlY2sgZm9yIGZhc3RpbnQgZG93bmdyYWRlLiAqLworCQlE VUtfVFZBTF9DSEtGQVNUX0lOUExBQ0VfRkFTVCh0dl9mdW5yZXQpOworI2VuZGlmCisJCURVS19U VkFMX1NFVF9UVkFMX1VQRFJFRih0aHIsIHR2X3JldCwgdHZfZnVucmV0KTsgIC8qIHNpZGUgZWZm ZWN0cyAqLworCX0KKworCWR1a19zZXRfdG9wX3Vuc2FmZSh0aHIsIGlkeF9mdW5jICsgMSk7CisK KwkvKiBbIC4uLiByZXR2YWwgXSAqLworCisJLyogUmVzdG9yZSBjYWxsZXIncyB2YWx1ZSBzdGFj ayByZXNlcnZlIChjYW5ub3QgZmFpbCkuICovCisJRFVLX0FTU0VSVCgoZHVrX3VpbnQ4X3QgKikg dGhyLT52YWxzdGFjayArIGVudHJ5X3ZhbHN0YWNrX2VuZF9ieXRlb2ZmID49IChkdWtfdWludDhf dCAqKSB0aHItPnZhbHN0YWNrX3RvcCk7CisJRFVLX0FTU0VSVCgoZHVrX3VpbnQ4X3QgKikgdGhy LT52YWxzdGFjayArIGVudHJ5X3ZhbHN0YWNrX2VuZF9ieXRlb2ZmIDw9IChkdWtfdWludDhfdCAq KSB0aHItPnZhbHN0YWNrX2FsbG9jX2VuZCk7CisJdGhyLT52YWxzdGFja19lbmQgPSAoZHVrX3R2 YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrICsgZW50cnlfdmFs c3RhY2tfZW5kX2J5dGVvZmYpOworCisJLyogWFhYOiBUcmlhbCB2YWx1ZSBzdGFjayBzaHJpbmsg d291bGQgYmUgT0sgaGVyZSwgYnV0IHdlJ2QgbmVlZAorCSAqIHRvIHByZXZlbnQgc2lkZSBlZmZl Y3RzIG9mIHRoZSBwb3RlbnRpYWwgcmVhbGxvYy4KKwkgKi8KKworCS8qIFJlc3RvcmUgZW50cnkg dGhyZWFkIGV4ZWN1dG9yIGN1cnJfcGMgc3RhY2sgZnJhbWUgcG9pbnRlci4gKi8KKwl0aHItPnB0 cl9jdXJyX3BjID0gZW50cnlfcHRyX2N1cnJfcGM7CisKKwlEVUtfSEVBUF9TV0lUQ0hfVEhSRUFE KHRoci0+aGVhcCwgZW50cnlfY3Vycl90aHJlYWQpOyAgLyogbWF5IGJlIE5VTEwgKi8KKwl0aHIt PnN0YXRlID0gKGR1a191aW50OF90KSBlbnRyeV90aHJlYWRfc3RhdGU7CisKKwkvKiBEaXNhYmxl ZCBhc3NlcnQ6IHRyaWdnZXJlZCB3aXRoIHNvbWUgdG9ydHVyZSB0ZXN0cy4gKi8KKyNpZiAwCisJ RFVLX0FTU0VSVCgodGhyLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9JTkFDVElWRSAmJiB0 aHItPmhlYXAtPmN1cnJfdGhyZWFkID09IE5VTEwpIHx8ICAvKiBmaXJzdCBjYWxsICovCisJICAg ICAgICAgICAodGhyLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9JTkFDVElWRSAmJiB0aHIt PmhlYXAtPmN1cnJfdGhyZWFkICE9IE5VTEwpIHx8ICAvKiBvdGhlciBjYWxsICovCisJICAgICAg ICAgICAodGhyLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HICYmIHRoci0+aGVh cC0+Y3Vycl90aHJlYWQgPT0gdGhyKSk7ICAgICAvKiBjdXJyZW50IHRocmVhZCAqLworI2VuZGlm CisKKwl0aHItPmhlYXAtPmNhbGxfcmVjdXJzaW9uX2RlcHRoID0gZW50cnlfY2FsbF9yZWN1cnNp b25fZGVwdGg7CisKKwkvKiBJZiB0aGUgZGVidWdnZXIgaXMgYWN0aXZlIHdlIG5lZWQgdG8gZm9y Y2UgYW4gaW50ZXJydXB0IHNvIHRoYXQKKwkgKiBkZWJ1Z2dlciBicmVha3BvaW50cyBhcmUgcmVj aGVja2VkLiAgVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGZ1bmN0aW9uCisJICogY2FsbHMgY2F1c2Vk IGJ5IHNpZGUgZWZmZWN0cyAoZS5nLiB3aGVuIGRvaW5nIGEgRFVLX09QX0dFVFBST1ApLCBzZWUK KwkgKiBHSC0zMDMuICBPbmx5IG5lZWRlZCBmb3Igc3VjY2VzcyBwYXRoLCBlcnJvciBwYXRoIGFs d2F5cyBjYXVzZXMgYQorCSAqIGJyZWFrcG9pbnQgcmVjaGVjayBpbiB0aGUgZXhlY3V0b3IuICBJ dCB3b3VsZCBiZSBlbm91Z2ggdG8gc2V0IHRoaXMKKwkgKiBvbmx5IHdoZW4gcmV0dXJuaW5nIHRv IGFuIEVDTUFTY3JpcHQgYWN0aXZhdGlvbiwgYnV0IHNldHRpbmcgdGhlIGZsYWcKKwkgKiBvbiBl dmVyeSByZXR1cm4gc2hvdWxkIGhhdmUgbm8gaWxsIGVmZmVjdC4KKwkgKi8KKyNpZiBkZWZpbmVk KERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlpZiAoZHVrX2RlYnVnX2lzX2F0dGFjaGVkKHRo ci0+aGVhcCkpIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJyZXR1cm5pbmcgd2l0aCBkZWJ1Z2dl ciBlbmFibGVkLCBmb3JjZSBpbnRlcnJ1cHQiKSk7CisJCURVS19BU1NFUlQodGhyLT5pbnRlcnJ1 cHRfY291bnRlciA8PSB0aHItPmludGVycnVwdF9pbml0KTsKKwkJdGhyLT5pbnRlcnJ1cHRfaW5p dCAtPSB0aHItPmludGVycnVwdF9jb3VudGVyOworCQl0aHItPmludGVycnVwdF9jb3VudGVyID0g MDsKKwkJdGhyLT5oZWFwLT5kYmdfZm9yY2VfcmVzdGFydCA9IDE7CisJfQorI2VuZGlmCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfSU5URVJSVVBUX0NPVU5URVIpICYmIGRlZmluZWQoRFVLX1VTRV9E RUJVRykKKwlkdWtfX2ludGVycnVwdF9maXh1cCh0aHIsIGVudHJ5X2N1cnJfdGhyZWFkKTsKKyNl bmRpZgorCisJLyogUmVzdG9yZWQgYnkgc3VjY2VzcyBwYXRoLiAqLworCURVS19BU1NFUlQodGhy LT5oZWFwLT5jYWxsX3JlY3Vyc2lvbl9kZXB0aCA9PSBlbnRyeV9jYWxsX3JlY3Vyc2lvbl9kZXB0 aCk7CisJRFVLX0FTU0VSVCh0aHItPnB0cl9jdXJyX3BjID09IGVudHJ5X3B0cl9jdXJyX3BjKTsK KwlEVUtfQVNTRVJUX0xKU1RBVEVfVU5TRVQodGhyLT5oZWFwKTsKKworCURVS19SRUZaRVJPX0NI RUNLX0ZBU1QodGhyKTsKKworCXJldHVybiAwOyAgLyogMD1jYWxsIGhhbmRsZWQgaW5saW5lICov Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfaW50X3QgZHVrX2hhbmRsZV9jYWxsX3VucHJvdGVjdGVk X25hcmdzKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgbmFyZ3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc21hbGxfdWlu dF90IGNhbGxfZmxhZ3MpIHsKKwlkdWtfaWR4X3QgaWR4X2Z1bmM7CisJRFVLX0FTU0VSVChkdWtf Z2V0X3RvcCh0aHIpID49IG5hcmdzICsgMik7CisJaWR4X2Z1bmMgPSBkdWtfZ2V0X3RvcCh0aHIp IC0gKG5hcmdzICsgMik7CisJRFVLX0FTU0VSVChpZHhfZnVuYyA+PSAwKTsKKwlyZXR1cm4gZHVr X2hhbmRsZV9jYWxsX3VucHJvdGVjdGVkKHRociwgaWR4X2Z1bmMsIGNhbGxfZmxhZ3MpOworfQor CitEVUtfSU5URVJOQUwgZHVrX2ludF90IGR1a19oYW5kbGVfY2FsbF91bnByb3RlY3RlZChkdWtf aHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX2lkeF90IGlkeF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3NtYWxsX3VpbnRfdCBjYWxsX2ZsYWdzKSB7CisJ RFVLX0FTU0VSVChkdWtfaXNfdmFsaWRfaW5kZXgodGhyLCBpZHhfZnVuYykpOworCURVS19BU1NF UlQoaWR4X2Z1bmMgPj0gMCk7CisJcmV0dXJuIGR1a19faGFuZGxlX2NhbGxfcmF3KHRociwgaWR4 X2Z1bmMsIGNhbGxfZmxhZ3MpOworfQorCisvKgorICogIGR1a19oYW5kbGVfc2FmZV9jYWxsKCk6 IG1ha2UgYSAiQyBwcm90ZWN0ZWQgY2FsbCIgd2l0aGluIHRoZQorICogIGN1cnJlbnQgYWN0aXZh dGlvbi4KKyAqCisgKiAgVGhlIGFsbG93ZWQgdGhyZWFkIHN0YXRlcyBmb3IgbWFraW5nIGEgY2Fs bCBhcmUgdGhlIHNhbWUgYXMgZm9yCisgKiAgZHVrX2hhbmRsZV9jYWxsX3Byb3RlY3RlZCgpLgor ICoKKyAqICBFdmVuIHRob3VnaCB0aGlzIGNhbGwgaXMgcHJvdGVjdGVkLCBlcnJvcnMgYXJlIHRo cm93biBmb3IgaW5zYW5lIGFyZ3VtZW50cworICogIGFuZCBtYXkgcmVzdWx0IGluIGEgZmF0YWwg ZXJyb3IgdW5sZXNzIHRoZXJlJ3MgYW5vdGhlciBwcm90ZWN0ZWQgY2FsbCB3aGljaAorICogIGNh dGNoZXMgc3VjaCBlcnJvcnMuCisgKgorICogIFRoZSBlcnJvciBoYW5kbGluZyBwYXRoIHNob3Vs ZCBiZSBlcnJvciBmcmVlLCBldmVuIGZvciBvdXQtb2YtbWVtb3J5CisgKiAgZXJyb3JzLCB0byBl bnN1cmUgc2FmZSBzYW5kYm94aW5nLiAgKEFzIG9mIER1a3RhcGUgMi4yLjAgdGhpcyBpcyBub3QK KyAqICB5ZXQgdGhlIGNhc2UgZm9yIGVudmlyb25tZW50IGNsb3Npbmcgd2hpY2ggbWF5IHJ1biBv dXQgb2YgbWVtb3J5LCBzZWUKKyAqICBYWFggbm90ZXMgYmVsb3cuKQorICovCisKK0RVS19MT0NB TCB2b2lkIGR1a19faGFuZGxlX3NhZmVfY2FsbF9pbm5lcihkdWtfaHRocmVhZCAqdGhyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zYWZlX2NhbGxfZnVu Y3Rpb24gZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICp1ZGF0YSwKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc2l6ZV90IGVudHJ5X3ZhbHN0YWNr X2JvdHRvbV9ieXRlb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGR1a19zaXplX3QgZW50cnlfY2FsbHN0YWNrX3RvcCwKKyNlbmRpZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19odGhyZWFkICplbnRyeV9jdXJyX3Ro cmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfdWlu dF9mYXN0OF90IGVudHJ5X3RocmVhZF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X3JldGJhc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IG51bV9zdGFja19yZXRzKSB7CisJ ZHVrX3JldF90IHJjOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVF9D VFhfVkFMSUQodGhyKTsKKworCS8qCisJICogIFRocmVhZCBzdGF0ZSBjaGVjayBhbmQgYm9vay1r ZWVwaW5nLgorCSAqLworCisJZHVrX19jYWxsX3RocmVhZF9zdGF0ZV91cGRhdGUodGhyKTsKKwor CS8qCisJICogIFJlY3Vyc2lvbiBsaW1pdCBjaGVjay4KKwkgKi8KKworCWR1a19fY2FsbF9jX3Jl Y3Vyc2lvbl9saW1pdF9jaGVjayh0aHIpOworCXRoci0+aGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVw dGgrKzsKKworCS8qCisJICogIE1ha2UgdGhlIEMgY2FsbC4KKwkgKi8KKworCXJjID0gZnVuYyh0 aHIsIHVkYXRhKTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJzYWZlX2NhbGwsIGZ1bmMgcmM9 JWxkIiwgKGxvbmcpIHJjKSk7CisKKwkvKgorCSAqICBWYWxzdGFjayBtYW5pcHVsYXRpb24gZm9y IHJlc3VsdHMuCisJICovCisKKwkvKiB3ZSdyZSBydW5uaW5nIGluc2lkZSB0aGUgY2FsbGVyJ3Mg YWN0aXZhdGlvbiwgc28gbm8gY2hhbmdlIGluIGNhbGwvY2F0Y2ggc3RhY2sgb3IgdmFsc3RhY2sg Ym90dG9tICovCisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja190b3AgPT0gZW50cnlfY2FsbHN0 YWNrX3RvcCk7CisJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX2JvdHRvbSA+PSB0aHItPnZhbHN0 YWNrKTsKKwlEVUtfQVNTRVJUKChkdWtfc2l6ZV90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFs c3RhY2tfYm90dG9tIC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spID09IGVudHJ5X3Zh bHN0YWNrX2JvdHRvbV9ieXRlb2ZmKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfdG9wID49 IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwlEVUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfZW5kID49 IHRoci0+dmFsc3RhY2tfdG9wKTsKKworCWlmIChEVUtfVU5MSUtFTFkocmMgPCAwKSkgeworCQlk dWtfZXJyb3JfdGhyb3dfZnJvbV9uZWdhdGl2ZV9yYyh0aHIsIHJjKTsKKwkJRFVLX1dPX05PUkVU VVJOKHJldHVybjspOworCX0KKwlEVUtfQVNTRVJUKHJjID49IDApOworCisJZHVrX19zYWZlX2Nh bGxfYWRqdXN0X3ZhbHN0YWNrKHRociwgaWR4X3JldGJhc2UsIG51bV9zdGFja19yZXRzLCByYyk7 ICAvKiB0aHJvd3MgZm9yIGluc2FuZSByYyAqLworCisJRFVLX0hFQVBfU1dJVENIX1RIUkVBRCh0 aHItPmhlYXAsIGVudHJ5X2N1cnJfdGhyZWFkKTsgIC8qIG1heSBiZSBOVUxMICovCisJdGhyLT5z dGF0ZSA9IChkdWtfdWludDhfdCkgZW50cnlfdGhyZWFkX3N0YXRlOworfQorCitEVUtfTE9DQUwg dm9pZCBkdWtfX2hhbmRsZV9zYWZlX2NhbGxfZXJyb3IoZHVrX2h0aHJlYWQgKnRociwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfYWN0aXZhdGlvbiAqZW50 cnlfYWN0LAorI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zaXplX3QgZW50cnlfY2FsbHN0YWNrX3Rv cCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1 a19odGhyZWFkICplbnRyeV9jdXJyX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfdWludF9mYXN0OF90IGVudHJ5X3RocmVhZF9zdGF0ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgaWR4X3Jl dGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lk eF90IG51bV9zdGFja19yZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGR1a19zaXplX3QgZW50cnlfdmFsc3RhY2tfYm90dG9tX2J5dGVvZmYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2ptcGJ1ZiAqb2xkX2ptcGJ1 Zl9wdHIpIHsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUX0NUWF9WQUxJ RCh0aHIpOworCisJLyoKKwkgKiAgRXJyb3IgZHVyaW5nIGNhbGwuICBUaGUgZXJyb3IgdmFsdWUg aXMgYXQgaGVhcC0+bGoudmFsdWUxLgorCSAqCisJICogIFRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHdl IGRvIGlzIHJlc3RvcmUgdGhlIHByZXZpb3VzIHNldGptcCBjYXRjaGVyLgorCSAqICBUaGlzIG1l YW5zIHRoYXQgYW55IGVycm9yIGluIGVycm9yIGhhbmRsaW5nIHdpbGwgcHJvcGFnYXRlIG91dHdh cmRzCisJICogIGluc3RlYWQgb2YgY2F1c2luZyBhIHNldGptcCgpIHJlLWVudHJ5IGFib3ZlLgor CSAqLworCisJRFVLX0RERChEVUtfREREUFJJTlQoImVycm9yIGNhdWdodCBkdXJpbmcgcHJvdGVj dGVkIGR1a19oYW5kbGVfc2FmZV9jYWxsKCkiKSk7CisKKwkvKiBPdGhlciBsb25nam1wIHR5cGVz IGFyZSBoYW5kbGVkIGJ5IGV4ZWN1dG9yIGJlZm9yZSBwcm9wYWdhdGluZworCSAqIHRoZSBlcnJv ciBoZXJlLgorCSAqLworCURVS19BU1NFUlQodGhyLT5oZWFwLT5sai50eXBlID09IERVS19MSl9U WVBFX1RIUk9XKTsKKwlEVUtfQVNTRVJUX0xKU1RBVEVfU0VUKHRoci0+aGVhcCk7CisKKwkvKiBF aXRoZXIgcG9pbnRlciBtYXkgYmUgTlVMTCAoYXQgZW50cnkpLCBzbyBkb24ndCBhc3NlcnQuICov CisJdGhyLT5oZWFwLT5sai5qbXBidWZfcHRyID0gb2xkX2ptcGJ1Zl9wdHI7CisKKwkvKiBYWFg6 IGNhbGxzdGFjayB1bndpbmQgbWF5IG5vdyB0aHJvdyBhbiBlcnJvciB3aGVuIGNsb3NpbmcKKwkg KiBzY29wZXM7IHRoaXMgaXMgYSBzYW5kYm94aW5nIGlzc3VlLCBkZXNjcmliZWQgaW46CisJICog aHR0cHM6Ly9naXRodWIuY29tL3N2YWFyYWxhL2R1a3RhcGUvaXNzdWVzLzQ3NgorCSAqLworCS8q IFhYWDogInVud2luZCB0byIgcHJpbWl0aXZlPyAqLworCisJRFVLX0FTU0VSVCh0aHItPmNhbGxz dGFja190b3AgPj0gZW50cnlfY2FsbHN0YWNrX3RvcCk7CisJd2hpbGUgKHRoci0+Y2FsbHN0YWNr X2N1cnIgIT0gZW50cnlfYWN0KSB7CisJCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciAh PSBOVUxMKTsKKwkJZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl91bndpbmRfbm9yeih0aHIpOworCX0K KwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA9PSBlbnRyeV9jYWxsc3RhY2tfdG9wKTsK KworCS8qIFN3aXRjaCBhY3RpdmUgdGhyZWFkIGJlZm9yZSBhbnkgc2lkZSBlZmZlY3RzIHRvIGF2 b2lkIGEKKwkgKiBkYW5nbGluZyBjdXJyX3RocmVhZCBwb2ludGVyLgorCSAqLworCURVS19IRUFQ X1NXSVRDSF9USFJFQUQodGhyLT5oZWFwLCBlbnRyeV9jdXJyX3RocmVhZCk7ICAvKiBtYXkgYmUg TlVMTCAqLworCXRoci0+c3RhdGUgPSAoZHVrX3VpbnQ4X3QpIGVudHJ5X3RocmVhZF9zdGF0ZTsK KworCURVS19BU1NFUlQodGhyLT5oZWFwLT5jdXJyX3RocmVhZCA9PSBlbnRyeV9jdXJyX3RocmVh ZCk7CisJRFVLX0FTU0VSVCh0aHItPnN0YXRlID09IGVudHJ5X3RocmVhZF9zdGF0ZSk7CisKKwkv KiBSZXN0b3JlIHZhbHN0YWNrIGJvdHRvbS4gKi8KKwl0aHItPnZhbHN0YWNrX2JvdHRvbSA9IChk dWtfdHZhbCAqKSAodm9pZCAqKSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2sgKyBlbnRy eV92YWxzdGFja19ib3R0b21fYnl0ZW9mZik7CisKKwkvKiBbIC4uLiB8IChjcnVkKSBdICovCisK KwkvKiBYWFg6IGVuc3VyZSBzcGFjZSBpbiB2YWxzdGFjayAobm93IHJlbGllcyBvbiBpbnRlcm5h bCByZXNlcnZlKT8gKi8KKwlkdWtfcHVzaF90dmFsKHRociwgJnRoci0+aGVhcC0+bGoudmFsdWUx KTsKKworCS8qIFsgLi4uIHwgKGNydWQpIGVycm9iaiBdICovCisKKwlEVUtfQVNTRVJUKGR1a19n ZXRfdG9wKHRocikgPj0gMSk7ICAvKiBhdCBsZWFzdCBlcnJvYmogbXVzdCBiZSBvbiBzdGFjayAq LworCisJZHVrX19zYWZlX2NhbGxfYWRqdXN0X3ZhbHN0YWNrKHRociwgaWR4X3JldGJhc2UsIG51 bV9zdGFja19yZXRzLCAxKTsgIC8qIDEgPSBudW0gYWN0dWFsICdyZXR1cm4gdmFsdWVzJyAqLwor CisJLyogWyAuLi4gfCBdIG9yIFsgLi4uIHwgZXJyb2JqIChNICogdW5kZWZpbmVkKV0gd2hlcmUg TSA9IG51bV9zdGFja19yZXRzIC0gMSAqLworCisJLyogUmVzZXQgbG9uZ2ptcCBzdGF0ZS4gKi8K Kwl0aHItPmhlYXAtPmxqLnR5cGUgPSBEVUtfTEpfVFlQRV9VTktOT1dOOworCXRoci0+aGVhcC0+ bGouaXNlcnJvciA9IDA7CisJRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERSRUZfTk9SWih0aHIs ICZ0aHItPmhlYXAtPmxqLnZhbHVlMSk7CisJRFVLX1RWQUxfU0VUX1VOREVGSU5FRF9VUERSRUZf Tk9SWih0aHIsICZ0aHItPmhlYXAtPmxqLnZhbHVlMik7CisKKwkvKiBFcnJvciBoYW5kbGluZyBj b21wbGV0ZSwgcmVtb3ZlIHNpZGUgZWZmZWN0IHByb3RlY3Rpb25zLiAgQ2FsbGVyCisJICogd2ls bCBwcm9jZXNzIHBlbmRpbmcgZmluYWxpemVycy4KKwkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0Vf QVNTRVJUSU9OUykKKwlEVUtfQVNTRVJUKHRoci0+aGVhcC0+ZXJyb3Jfbm90X2FsbG93ZWQgPT0g MSk7CisJdGhyLT5oZWFwLT5lcnJvcl9ub3RfYWxsb3dlZCA9IDA7CisjZW5kaWYKKwlEVUtfQVNT RVJUKHRoci0+aGVhcC0+cGZfcHJldmVudF9jb3VudCA+IDApOworCXRoci0+aGVhcC0+cGZfcHJl dmVudF9jb3VudC0tOworCURVS19ERChEVUtfRERQUklOVCgic2FmZSBjYWxsIGVycm9yIGhhbmRs ZWQsIHBmX3ByZXZlbnRfY291bnQgdXBkYXRlZCB0byAlbGQiLCAobG9uZykgdGhyLT5oZWFwLT5w Zl9wcmV2ZW50X2NvdW50KSk7CisKKwkvKiB0aHItPnB0cl9jdXJyX3BjIGlzIHJlc3RvcmVkIGJ5 CisJICogZHVrX19oYW5kbGVfc2FmZV9jYWxsX3NoYXJlZF91bndpbmQoKSB3aGljaCBpcyBhbHNv IHVzZWQgZm9yCisJICogc3VjY2VzcyBwYXRoLgorCSAqLworfQorCitEVUtfTE9DQUwgdm9pZCBk dWtfX2hhbmRsZV9zYWZlX2NhbGxfc2hhcmVkX3Vud2luZChkdWtfaHRocmVhZCAqdGhyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90 IGlkeF9yZXRiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX2lkeF90IG51bV9zdGFja19yZXRzLAorI2lmIGRlZmluZWQoRFVLX1VTRV9B U1NFUlRJT05TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHVrX3NpemVfdCBlbnRyeV9jYWxsc3RhY2tfdG9wLAorI2VuZGlmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaW50X3QgZW50cnlf Y2FsbF9yZWN1cnNpb25fZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfaHRocmVhZCAqZW50cnlfY3Vycl90aHJlYWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaW5zdHJfdCAq KmVudHJ5X3B0cl9jdXJyX3BjKSB7CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FT U0VSVF9DVFhfVkFMSUQodGhyKTsKKwlEVUtfVU5SRUYoaWR4X3JldGJhc2UpOworCURVS19VTlJF RihudW1fc3RhY2tfcmV0cyk7CisJRFVLX1VOUkVGKGVudHJ5X2N1cnJfdGhyZWFkKTsKKworCURV S19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID09IGVudHJ5X2NhbGxzdGFja190b3ApOworCisJ LyogUmVzdG9yZSBlbnRyeSB0aHJlYWQgZXhlY3V0b3IgY3Vycl9wYyBzdGFjayBmcmFtZSBwb2lu dGVyLgorCSAqIFhYWDogd291bGQgYmUgZW5vdWdoIHRvIGRvIGluIGVycm9yIHBhdGggb25seSwg c2hvdWxkIG5lc3QKKwkgKiBjbGVhbmx5IGluIHN1Y2Nlc3MgcGF0aC4KKwkgKi8KKwl0aHItPnB0 cl9jdXJyX3BjID0gZW50cnlfcHRyX2N1cnJfcGM7CisKKwl0aHItPmhlYXAtPmNhbGxfcmVjdXJz aW9uX2RlcHRoID0gZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGg7CisKKwkvKiBzdGFjayBkaXNj aXBsaW5lIGNvbnNpc3RlbmN5IGNoZWNrICovCisJRFVLX0FTU0VSVChkdWtfZ2V0X3RvcCh0aHIp ID09IGlkeF9yZXRiYXNlICsgbnVtX3N0YWNrX3JldHMpOworCisJLyogQSBkZWJ1Z2dlciBmb3Jj ZWQgaW50ZXJydXB0IGNoZWNrIGlzIG5vdCBuZWVkZWQgaGVyZSwgYXMKKwkgKiBwcm9ibGVtYXRp YyBzYWZlIGNhbGxzIGFyZSBub3QgY2F1c2VkIGJ5IHNpZGUgZWZmZWN0cy4KKwkgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9JTlRFUlJVUFRfQ09VTlRFUikgJiYgZGVmaW5lZChEVUtfVVNFX0RF QlVHKQorCWR1a19faW50ZXJydXB0X2ZpeHVwKHRociwgZW50cnlfY3Vycl90aHJlYWQpOworI2Vu ZGlmCit9CisKK0RVS19JTlRFUk5BTCBkdWtfaW50X3QgZHVrX2hhbmRsZV9zYWZlX2NhbGwoZHVr X2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX3NhZmVfY2FsbF9mdW5jdGlvbiBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICp1ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX2lkeF90IG51bV9zdGFja19hcmdzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaWR4X3QgbnVtX3N0YWNrX3Jl dHMpIHsKKwlkdWtfYWN0aXZhdGlvbiAqZW50cnlfYWN0OworCWR1a19zaXplX3QgZW50cnlfdmFs c3RhY2tfYm90dG9tX2J5dGVvZmY7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJ ZHVrX3NpemVfdCBlbnRyeV92YWxzdGFja19lbmRfYnl0ZW9mZjsKKwlkdWtfc2l6ZV90IGVudHJ5 X2NhbGxzdGFja190b3A7CisJZHVrX3NpemVfdCBlbnRyeV9jYWxsc3RhY2tfcHJldmVudGNvdW50 OworI2VuZGlmCisJZHVrX2ludF90IGVudHJ5X2NhbGxfcmVjdXJzaW9uX2RlcHRoOworCWR1a19o dGhyZWFkICplbnRyeV9jdXJyX3RocmVhZDsKKwlkdWtfdWludF9mYXN0OF90IGVudHJ5X3RocmVh ZF9zdGF0ZTsKKwlkdWtfaW5zdHJfdCAqKmVudHJ5X3B0cl9jdXJyX3BjOworCWR1a19qbXBidWYg Km9sZF9qbXBidWZfcHRyID0gTlVMTDsKKwlkdWtfam1wYnVmIG91cl9qbXBidWY7CisJZHVrX2lk eF90IGlkeF9yZXRiYXNlOworCWR1a19pbnRfdCByZXR2YWw7CisKKwlEVUtfQVNTRVJUKHRociAh PSBOVUxMKTsKKwlEVUtfQVNTRVJUKGR1a19nZXRfdG9wKHRocikgPj0gbnVtX3N0YWNrX2FyZ3Mp OyAgLyogQ2FsbGVyIGVuc3VyZXMuICovCisKKwlEVUtfU1RBVFNfSU5DKHRoci0+aGVhcCwgc3Rh dHNfc2FmZWNhbGxfYWxsKTsKKworCS8qIFZhbHVlIHN0YWNrIHJlc2VydmUgaGFuZGxpbmc6IHNh ZmUgY2FsbCBhc3N1bWVzIGNhbGxlciBoYXMgcmVzZXJ2ZWQKKwkgKiBzcGFjZSBmb3IgbnJldHMg KGFzc3VtaW5nIG9wdGltYWwgdW53aW5kIHByb2Nlc3NpbmcpLiAgVmFsdWUgc3RhY2sKKwkgKiBy ZXNlcnZlIGlzIG5vdCBzdG9yZWQvcmVzdG9yZWQgYXMgZm9yIG5vcm1hbCBjYWxscyBiZWNhdXNl IGEgc2FmZQorCSAqIGNhbGwgY29uY2VwdHVhbGx5IGhhcHBlbnMgaW4gdGhlIHNhbWUgYWN0aXZh dGlvbi4KKwkgKi8KKworCS8qIENhcmVmdWwgd2l0aCBpbmRpY2VzIGxpa2UgJy14JzsgaWYgJ3gn IGlzIHplcm8sIGl0IHJlZmVycyB0byBib3R0b20gKi8KKwllbnRyeV9hY3QgPSB0aHItPmNhbGxz dGFja19jdXJyOworCWVudHJ5X3ZhbHN0YWNrX2JvdHRvbV9ieXRlb2ZmID0gKGR1a19zaXplX3Qp ICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19ib3R0b20gLSAoZHVrX3VpbnQ4X3QgKikg dGhyLT52YWxzdGFjayk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJZW50cnlf dmFsc3RhY2tfZW5kX2J5dGVvZmYgPSAoZHVrX3NpemVfdCkgKChkdWtfdWludDhfdCAqKSB0aHIt PnZhbHN0YWNrX2VuZCAtIChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrKTsKKwllbnRyeV9j YWxsc3RhY2tfdG9wID0gdGhyLT5jYWxsc3RhY2tfdG9wOworCWVudHJ5X2NhbGxzdGFja19wcmV2 ZW50Y291bnQgPSB0aHItPmNhbGxzdGFja19wcmV2ZW50Y291bnQ7CisjZW5kaWYKKwllbnRyeV9j YWxsX3JlY3Vyc2lvbl9kZXB0aCA9IHRoci0+aGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGg7CisJ ZW50cnlfY3Vycl90aHJlYWQgPSB0aHItPmhlYXAtPmN1cnJfdGhyZWFkOyAgLyogbWF5IGJlIE5V TEwgaWYgZmlyc3QgY2FsbCAqLworCWVudHJ5X3RocmVhZF9zdGF0ZSA9IHRoci0+c3RhdGU7CisJ ZW50cnlfcHRyX2N1cnJfcGMgPSB0aHItPnB0cl9jdXJyX3BjOyAgLyogbWF5IGJlIE5VTEwgKi8K KwlpZHhfcmV0YmFzZSA9IGR1a19nZXRfdG9wKHRocikgLSBudW1fc3RhY2tfYXJnczsgIC8qIG5v dCBhIHZhbGlkIHN0YWNrIGluZGV4IGlmIG51bV9zdGFja19hcmdzID09IDAgKi8KKwlEVUtfQVNT RVJUKGlkeF9yZXRiYXNlID49IDApOworCisJRFVLX0FTU0VSVCgoZHVrX2lkeF90KSAodGhyLT52 YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSkgPj0gbnVtX3N0YWNrX2FyZ3MpOyAg LyogQ2FsbGVyIGVuc3VyZXMuICovCisJRFVLX0FTU0VSVCgoZHVrX2lkeF90KSAodGhyLT52YWxz dGFja19lbmQgLSAodGhyLT52YWxzdGFja19ib3R0b20gKyBpZHhfcmV0YmFzZSkpID49IG51bV9z dGFja19yZXRzKTsgIC8qIENhbGxlciBlbnN1cmVzLiAqLworCisJLyogQ2Fubm90IHBvcnRhYmx5 IGRlYnVnIHByaW50IGEgZnVuY3Rpb24gcG9pbnRlciwgaGVuY2UgJ2Z1bmMnIG5vdCBwcmludGVk ISAqLworCURVS19ERChEVUtfRERQUklOVCgiZHVrX2hhbmRsZV9zYWZlX2NhbGw6IHRocj0lcCwg bnVtX3N0YWNrX2FyZ3M9JWxkLCBudW1fc3RhY2tfcmV0cz0lbGQsICIKKwkgICAgICAgICAgICAg ICAgICAgInZhbHN0YWNrX3RvcD0lbGQsIGlkeF9yZXRiYXNlPSVsZCwgcmVjX2RlcHRoPSVsZC8l bGQsICIKKwkgICAgICAgICAgICAgICAgICAgImVudHJ5X2FjdD0lcCwgZW50cnlfdmFsc3RhY2tf Ym90dG9tX2J5dGVvZmY9JWxkLCBlbnRyeV9jYWxsX3JlY3Vyc2lvbl9kZXB0aD0lbGQsICIKKwkg ICAgICAgICAgICAgICAgICAgImVudHJ5X2N1cnJfdGhyZWFkPSVwLCBlbnRyeV90aHJlYWRfc3Rh dGU9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLAorCSAgICAgICAgICAg ICAgICAgICAobG9uZykgbnVtX3N0YWNrX2FyZ3MsCisJICAgICAgICAgICAgICAgICAgIChsb25n KSBudW1fc3RhY2tfcmV0cywKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIGR1a19nZXRfdG9w KHRociksCisJICAgICAgICAgICAgICAgICAgIChsb25nKSBpZHhfcmV0YmFzZSwKKwkgICAgICAg ICAgICAgICAgICAgKGxvbmcpIHRoci0+aGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGgsCisJICAg ICAgICAgICAgICAgICAgIChsb25nKSB0aHItPmhlYXAtPmNhbGxfcmVjdXJzaW9uX2xpbWl0LAor CSAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBlbnRyeV9hY3QsCisJICAgICAgICAgICAgICAg ICAgIChsb25nKSBlbnRyeV92YWxzdGFja19ib3R0b21fYnl0ZW9mZiwKKwkgICAgICAgICAgICAg ICAgICAgKGxvbmcpIGVudHJ5X2NhbGxfcmVjdXJzaW9uX2RlcHRoLAorCSAgICAgICAgICAgICAg ICAgICAodm9pZCAqKSBlbnRyeV9jdXJyX3RocmVhZCwKKwkgICAgICAgICAgICAgICAgICAgKGxv bmcpIGVudHJ5X3RocmVhZF9zdGF0ZSkpOworCisJLyogU2V0am1wIGNhdGNocG9pbnQgc2V0dXAu ICovCisJb2xkX2ptcGJ1Zl9wdHIgPSB0aHItPmhlYXAtPmxqLmptcGJ1Zl9wdHI7CisJdGhyLT5o ZWFwLT5sai5qbXBidWZfcHRyID0gJm91cl9qbXBidWY7CisKKwkvKiBQcmV2ZW50IHlpZWxkcyBm b3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzYWZlIGNhbGwuICBUaGlzIG9ubHkKKwkgKiBtYXR0ZXJz IGlmIHRoZSBleGVjdXRvciBtYWtlcyBzYWZlIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0CisJICog eWllbGQsIHRoaXMgZG9lc24ndCBjdXJyZW50bHkgaGFwcGVuLgorCSAqLworCXRoci0+Y2FsbHN0 YWNrX3ByZXZlbnRjb3VudCsrOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0NQUF9FWENFUFRJT05T KQorCXRyeSB7CisjZWxzZQorCURVS19BU1NFUlQodGhyLT5oZWFwLT5sai5qbXBidWZfcHRyID09 ICZvdXJfam1wYnVmKTsKKwlpZiAoRFVLX1NFVEpNUChvdXJfam1wYnVmLmpiKSA9PSAwKSB7CisJ CS8qIFN1Y2Nlc3MgcGF0aC4gKi8KKyNlbmRpZgorCQlEVUtfREREKERVS19ERERQUklOVCgic2Fm ZV9jYWxsIHNldGptcCBjYXRjaHBvaW50IHNldHVwIGNvbXBsZXRlIikpOworCisJCWR1a19faGFu ZGxlX3NhZmVfY2FsbF9pbm5lcih0aHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBm dW5jLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRhdGEsCisjaWYgZGVmaW5lZChE VUtfVVNFX0FTU0VSVElPTlMpCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV92 YWxzdGFja19ib3R0b21fYnl0ZW9mZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dHJ5X2NhbGxzdGFja190b3AsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVudHJ5X2N1cnJfdGhyZWFkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlf dGhyZWFkX3N0YXRlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4X3JldGJhc2Us CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc3RhY2tfcmV0cyk7CisKKwkJRFVL X1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX3NhZmVjYWxsX25vdGhyb3cpOworCisJCS8qIEVp dGhlciBwb2ludGVyIG1heSBiZSBOVUxMIChhdCBlbnRyeSksIHNvIGRvbid0IGFzc2VydCAqLwor CQl0aHItPmhlYXAtPmxqLmptcGJ1Zl9wdHIgPSBvbGRfam1wYnVmX3B0cjsKKworCQkvKiBJZiBj YWxscyBoYXBwZW4gaW5zaWRlIHRoZSBzYWZlIGNhbGwsIHRoZXNlIGFyZSByZXN0b3JlZCBieQor CQkgKiB3aGF0ZXZlciBjYWxscyBhcmUgbWFkZS4gIFJlc2VydmUgY2Fubm90IGRlY3JlYXNlLgor CQkgKi8KKwkJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja19jdXJyID09IGVudHJ5X2FjdCk7CisJ CURVS19BU1NFUlQoKGR1a19zaXplX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19l bmQgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjaykgPj0gZW50cnlfdmFsc3RhY2tfZW5k X2J5dGVvZmYpOworCisJCXJldHZhbCA9IERVS19FWEVDX1NVQ0NFU1M7CisjaWYgZGVmaW5lZChE VUtfVVNFX0NQUF9FWENFUFRJT05TKQorCX0gY2F0Y2ggKGR1a19pbnRlcm5hbF9leGNlcHRpb24g JmV4YykgeworCQlEVUtfVU5SRUYoZXhjKTsKKyNlbHNlCisJfSBlbHNlIHsKKwkJLyogRXJyb3Ig cGF0aC4gKi8KKyNlbmRpZgorCQlEVUtfQVNTRVJUKChkdWtfc2l6ZV90KSAoKGR1a191aW50OF90 ICopIHRoci0+dmFsc3RhY2tfZW5kIC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spID49 IGVudHJ5X3ZhbHN0YWNrX2VuZF9ieXRlb2ZmKTsKKworCQlEVUtfU1RBVFNfSU5DKHRoci0+aGVh cCwgc3RhdHNfc2FmZWNhbGxfdGhyb3cpOworCisJCWR1a19faGFuZGxlX3NhZmVfY2FsbF9lcnJv cih0aHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9hY3QsCisjaWYgZGVm aW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bnRyeV9jYWxsc3RhY2tfdG9wLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnRyeV9jdXJyX3RocmVhZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5 X3RocmVhZF9zdGF0ZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeF9yZXRiYXNl LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3N0YWNrX3JldHMsCisJCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV92YWxzdGFja19ib3R0b21fYnl0ZW9mZiwKKwkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9qbXBidWZfcHRyKTsKKworCQlyZXR2YWwg PSBEVUtfRVhFQ19FUlJPUjsKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0NQUF9FWENFUFRJT05T KQorCWNhdGNoIChkdWtfZmF0YWxfZXhjZXB0aW9uICZleGMpIHsKKwkJRFVLX0QoRFVLX0RQUklO VCgicmV0aHJvdyBkdWtfZmF0YWxfZXhjZXB0aW9uIikpOworCQl0aHJvdzsKKwl9IGNhdGNoIChz dGQ6OmV4Y2VwdGlvbiAmZXhjKSB7CisJCWNvbnN0IGNoYXIgKndoYXQgPSBleGMud2hhdCgpOwor CQlEVUtfQVNTRVJUKChkdWtfc2l6ZV90KSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tf ZW5kIC0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spID49IGVudHJ5X3ZhbHN0YWNrX2Vu ZF9ieXRlb2ZmKTsKKwkJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX3NhZmVjYWxsX3Ro cm93KTsKKwkJaWYgKCF3aGF0KSB7CisJCQl3aGF0ID0gInVua25vd24iOworCQl9CisJCURVS19E KERVS19EUFJJTlQoInVuZXhwZWN0ZWQgYysrIHN0ZDo6ZXhjZXB0aW9uIChwZXJoYXBzIHRocm93 biBieSB1c2VyIGNvZGUpIikpOworCQl0cnkgeworCQkJRFVLX0VSUk9SX0ZNVDEodGhyLCBEVUtf RVJSX1RZUEVfRVJST1IsICJjYXVnaHQgaW52YWxpZCBjKysgc3RkOjpleGNlcHRpb24gJyVzJyAo cGVyaGFwcyB0aHJvd24gYnkgdXNlciBjb2RlKSIsIHdoYXQpOworCQkJRFVLX1dPX05PUkVUVVJO KHJldHVybiAwOyk7CisJCX0gY2F0Y2ggKGR1a19pbnRlcm5hbF9leGNlcHRpb24gZXhjKSB7CisJ CQlEVUtfRChEVUtfRFBSSU5UKCJjYXVnaHQgYXBpIGVycm9yIHRocm93biBmcm9tIHVuZXhwZWN0 ZWQgYysrIHN0ZDo6ZXhjZXB0aW9uIikpOworCQkJRFVLX1VOUkVGKGV4Yyk7CisJCQlkdWtfX2hh bmRsZV9zYWZlX2NhbGxfZXJyb3IodGhyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVudHJ5X2FjdCwKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwkJCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnRyeV9jYWxsc3RhY2tfdG9wLAorI2VuZGlmCisJCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfY3Vycl90aHJlYWQsCisJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW50cnlfdGhyZWFkX3N0YXRlLAorCQkJICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlkeF9yZXRiYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg IG51bV9zdGFja19yZXRzLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X3Zh bHN0YWNrX2JvdHRvbV9ieXRlb2ZmLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9s ZF9qbXBidWZfcHRyKTsKKwkJCXJldHZhbCA9IERVS19FWEVDX0VSUk9SOworCQl9CisJfSBjYXRj aCAoLi4uKSB7CisJCURVS19EKERVS19EUFJJTlQoInVuZXhwZWN0ZWQgYysrIGV4Y2VwdGlvbiAo cGVyaGFwcyB0aHJvd24gYnkgdXNlciBjb2RlKSIpKTsKKwkJRFVLX0FTU0VSVCgoZHVrX3NpemVf dCkgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX2VuZCAtIChkdWtfdWludDhfdCAqKSB0 aHItPnZhbHN0YWNrKSA+PSBlbnRyeV92YWxzdGFja19lbmRfYnl0ZW9mZik7CisJCURVS19TVEFU U19JTkModGhyLT5oZWFwLCBzdGF0c19zYWZlY2FsbF90aHJvdyk7CisJCXRyeSB7CisJCQlEVUtf RVJST1JfVFlQRSh0aHIsICJjYXVnaHQgaW52YWxpZCBjKysgZXhjZXB0aW9uIChwZXJoYXBzIHRo cm93biBieSB1c2VyIGNvZGUpIik7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwkJ fSBjYXRjaCAoZHVrX2ludGVybmFsX2V4Y2VwdGlvbiBleGMpIHsKKwkJCURVS19EKERVS19EUFJJ TlQoImNhdWdodCBhcGkgZXJyb3IgdGhyb3duIGZyb20gdW5leHBlY3RlZCBjKysgZXhjZXB0aW9u IikpOworCQkJRFVLX1VOUkVGKGV4Yyk7CisJCQlkdWtfX2hhbmRsZV9zYWZlX2NhbGxfZXJyb3Io dGhyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2FjdCwKKyNpZiBkZWZp bmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bnRyeV9jYWxsc3RhY2tfdG9wLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW50cnlfY3Vycl90aHJlYWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50 cnlfdGhyZWFkX3N0YXRlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeF9yZXRi YXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zdGFja19yZXRzLAorCQkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X3ZhbHN0YWNrX2JvdHRvbV9ieXRlb2Zm LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9qbXBidWZfcHRyKTsKKwkJCXJl dHZhbCA9IERVS19FWEVDX0VSUk9SOworCQl9CisJfQorI2VuZGlmCisKKwlEVUtfQVNTRVJUKHRo ci0+aGVhcC0+bGouam1wYnVmX3B0ciA9PSBvbGRfam1wYnVmX3B0cik7ICAvKiBzdWNjZXNzL2Vy cm9yIHBhdGggYm90aCBkbyB0aGlzICovCisKKwlEVUtfQVNTRVJUX0xKU1RBVEVfVU5TRVQodGhy LT5oZWFwKTsKKworCURVS19BU1NFUlQoKGR1a19zaXplX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhy LT52YWxzdGFja19lbmQgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjaykgPj0gZW50cnlf dmFsc3RhY2tfZW5kX2J5dGVvZmYpOworCWR1a19faGFuZGxlX3NhZmVfY2FsbF9zaGFyZWRfdW53 aW5kKHRociwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhfcmV0YmFz ZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc3RhY2tfcmV0cywK KyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnRyeV9jYWxsc3RhY2tfdG9wLAorI2VuZGlmCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGgsCisJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfY3Vycl90aHJlYWQsCisJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfcHRyX2N1cnJfcGMpOworCisJ LyogUmVzdG9yZSBwcmV2ZW50Y291bnQuICovCisJdGhyLT5jYWxsc3RhY2tfcHJldmVudGNvdW50 LS07CisJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja19wcmV2ZW50Y291bnQgPT0gZW50cnlfY2Fs bHN0YWNrX3ByZXZlbnRjb3VudCk7CisKKwkvKiBGaW5hbCBhc3NlcnRzLiAqLworCURVS19BU1NF UlQodGhyLT5jYWxsc3RhY2tfY3VyciA9PSBlbnRyeV9hY3QpOworCURVS19BU1NFUlQoKGR1a19z aXplX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19ib3R0b20gLSAoZHVrX3VpbnQ4 X3QgKikgdGhyLT52YWxzdGFjaykgPT0gZW50cnlfdmFsc3RhY2tfYm90dG9tX2J5dGVvZmYpOwor CURVS19BU1NFUlQoKGR1a19zaXplX3QpICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19l bmQgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjaykgPj0gZW50cnlfdmFsc3RhY2tfZW5k X2J5dGVvZmYpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID09IGVudHJ5X2NhbGxz dGFja190b3ApOworCURVS19BU1NFUlQodGhyLT5oZWFwLT5jYWxsX3JlY3Vyc2lvbl9kZXB0aCA9 PSBlbnRyeV9jYWxsX3JlY3Vyc2lvbl9kZXB0aCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAtPmN1 cnJfdGhyZWFkID09IGVudHJ5X2N1cnJfdGhyZWFkKTsKKwlEVUtfQVNTRVJUKHRoci0+c3RhdGUg PT0gZW50cnlfdGhyZWFkX3N0YXRlKTsKKwlEVUtfQVNTRVJUKHRoci0+cHRyX2N1cnJfcGMgPT0g ZW50cnlfcHRyX2N1cnJfcGMpOworCURVS19BU1NFUlQoZHVrX2dldF90b3AodGhyKSA9PSBpZHhf cmV0YmFzZSArIG51bV9zdGFja19yZXRzKTsKKwlEVUtfQVNTRVJUX0xKU1RBVEVfVU5TRVQodGhy LT5oZWFwKTsKKworCS8qIFBlbmRpbmcgc2lkZSBlZmZlY3RzLiAqLworCURVS19SRUZaRVJPX0NI RUNLX0ZBU1QodGhyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiAgUHJvcGVydHkt YmFzZWQgY2FsbCAoZm9vLm5vU3VjaCgpKSBlcnJvciBzZXR1cDogcmVwbGFjZSB0YXJnZXQgZnVu Y3Rpb24KKyAqICBvbiBzdGFjayB0b3Agd2l0aCBhIHNwZWNpYWxseSB0YWdnZWQgKGhpZGRlbiBT eW1ib2wpIGVycm9yIHdoaWNoIGdldHMKKyAqICB0aHJvd24gaW4gY2FsbCBoYW5kbGluZyBhdCB0 aGUgcHJvcGVyIHNwb3QgdG8gZm9sbG93IEVDTUFTY3JpcHQgc2VtYW50aWNzLgorICovCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfVkVSQk9TRV9FUlJPUlMpCitEVUtfSU5URVJOQUwgRFVLX05PSU5M SU5FIERVS19DT0xEIHZvaWQgZHVrX2NhbGxfc2V0dXBfcHJvcGNhbGxfZXJyb3IoZHVrX2h0aHJl YWQgKnRociwgZHVrX3R2YWwgKnR2X3RhcmcsIGR1a190dmFsICp0dl9iYXNlLCBkdWtfdHZhbCAq dHZfa2V5KSB7CisJY29uc3QgY2hhciAqc3RyMSwgKnN0cjIsICpzdHIzOworCWR1a19pZHhfdCBl bnRyeV90b3A7CisKKwllbnRyeV90b3AgPSBkdWtfZ2V0X3RvcCh0aHIpOworCisJLyogTXVzdCBz dGFiaWxpemUgcG9pbnRlcnMgZmlyc3QuICBBcmd1bWVudCBjb252ZW50aW9uIGlzIGEgYml0IGF3 a3dhcmQsCisJICogaXQgY29tZXMgZnJvbSB0aGUgZXhlY3V0b3IgY2FsbCBzaXRlIHdoZXJlIHNv bWUgYXJndW1lbnRzIG1heSBub3QgYmUKKwkgKiBvbiB0aGUgdmFsdWUgc3RhY2sgKGNvbnN0cyku CisJICovCisJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X2Jhc2UpOworCWR1a19wdXNoX3R2YWwodGhy LCB0dl9rZXkpOworCWR1a19wdXNoX3R2YWwodGhyLCB0dl90YXJnKTsKKworCURVS19HQ19UT1JU VVJFKHRoci0+aGVhcCk7CisKKwkvKiBXZSBvbmx5IHB1c2ggYW4gZXJyb3IsIHJlcGxhY2luZyB0 aGUgY2FsbCB0YXJnZXQgKGF0IGlkeF9mdW5jKQorCSAqIHdpdGggdGhlIGVycm9yIHRvIGVuc3Vy ZSBzaWRlIGVmZmVjdHMgY29tZSBvdXQgY29ycmVjdGx5OgorCSAqIC0gUHJvcGVydHkgcmVhZAor CSAqIC0gQ2FsbCBhcmd1bWVudCBldmFsdWF0aW9uCisJICogLSBDYWxsYWJpbGl0eSBjaGVjayBh bmQgZXJyb3IgdGhyb3duLgorCSAqCisJICogQSBoaWRkZW4gU3ltYm9sIG9uIHRoZSBlcnJvciBv YmplY3QgcHVzaGVkIGhlcmUgaXMgdXNlZCBieQorCSAqIGNhbGwgaGFuZGxpbmcgdG8gZmlndXJl IG91dCB0aGUgZXJyb3IgaXMgdG8gYmUgdGhyb3duIGFzIGlzLgorCSAqIEl0IGlzIENSSVRJQ0FM IHRoYXQgdGhlIGhpZGRlbiBTeW1ib2wgY2FuIG5ldmVyIG9jY3VyIG9uIGEKKwkgKiB1c2VyIHZp c2libGUgb2JqZWN0IHRoYXQgbWF5IGdldCB0aHJvd24uCisJICovCisKKyNpZiBkZWZpbmVkKERV S19VU0VfUEFSQU5PSURfRVJST1JTKQorCXN0cjEgPSBkdWtfZ2V0X3R5cGVfbmFtZSh0aHIsIC0x KTsKKwlzdHIyID0gZHVrX2dldF90eXBlX25hbWUodGhyLCAtMik7CisJc3RyMyA9IGR1a19nZXRf dHlwZV9uYW1lKHRociwgLTMpOworCWR1a19wdXNoX2Vycm9yX29iamVjdCh0aHIsIERVS19FUlJf VFlQRV9FUlJPUiB8IERVS19FUlJDT0RFX0ZMQUdfTk9CTEFNRV9GSUxFTElORSwgIiVzIG5vdCBj YWxsYWJsZSAocHJvcGVydHkgJXMgb2YgJXMpIiwgc3RyMSwgc3RyMiwgc3RyMyk7CisjZWxzZQor CXN0cjEgPSBkdWtfcHVzaF9zdHJpbmdfcmVhZGFibGUodGhyLCAtMSk7CisJc3RyMiA9IGR1a19w dXNoX3N0cmluZ19yZWFkYWJsZSh0aHIsIC0zKTsKKwlzdHIzID0gZHVrX3B1c2hfc3RyaW5nX3Jl YWRhYmxlKHRociwgLTUpOworCWR1a19wdXNoX2Vycm9yX29iamVjdCh0aHIsIERVS19FUlJfVFlQ RV9FUlJPUiB8IERVS19FUlJDT0RFX0ZMQUdfTk9CTEFNRV9GSUxFTElORSwgIiVzIG5vdCBjYWxs YWJsZSAocHJvcGVydHkgJXMgb2YgJXMpIiwgc3RyMSwgc3RyMiwgc3RyMyk7CisjZW5kaWYKKwor CWR1a19wdXNoX3RydWUodGhyKTsKKwlkdWtfcHV0X3Byb3Bfc3RyaWR4KHRociwgLTIsIERVS19T VFJJRFhfSU5UX1RBUkdFVCk7ICAvKiBNYXJrZXIgcHJvcGVydHksIHJldXNlIF9UYXJnZXQuICov CisKKwkvKiBbIDxucmVncz4gcHJvcFZhbHVlIDx2YXJpYWJsZT4gZXJyb3IgXSAqLworCWR1a19y ZXBsYWNlKHRociwgZW50cnlfdG9wIC0gMSk7CisJZHVrX3NldF90b3AodGhyLCBlbnRyeV90b3Ap OworCisJRFVLX0FTU0VSVCghZHVrX2lzX2NhbGxhYmxlKHRociwgLTEpKTsgIC8qIENyaXRpY2Fs IHNvIHRoYXQgY2FsbCBoYW5kbGluZyB3aWxsIHRocm93IHRoZSBlcnJvci4gKi8KK30KKyNlbmRp ZiAgLyogRFVLX1VTRV9WRVJCT1NFX0VSUk9SUyAqLworCisvKiBhdXRvbWF0aWMgdW5kZWZzICov CisjdW5kZWYgRFVLX19BVUdNRU5UX0NBTExfUkVMQVhfQ09VTlQKKy8qCisgKiAgRUNNQVNjcmlw dCBjb21waWxlci4KKyAqCisgKiAgUGFyc2VzIGFuIGlucHV0IHN0cmluZyBhbmQgZ2VuZXJhdGVz IGEgZnVuY3Rpb24gdGVtcGxhdGUgcmVzdWx0LgorICogIENvbXBpbGF0aW9uIG1heSBoYXBwZW4g aW4gbXVsdGlwbGUgY29udGV4dHMgKGdsb2JhbCBjb2RlLCBldmFsCisgKiAgY29kZSwgZnVuY3Rp b24gY29kZSkuCisgKgorICogIFRoZSBwYXJzZXIgdXNlcyBhIHRyYWRpdGlvbmFsIHRvcC1kb3du IHJlY3Vyc2l2ZSBwYXJzaW5nIGZvciB0aGUKKyAqICBzdGF0ZW1lbnQgbGV2ZWwsIGFuZCBhbiBv cGVyYXRvciBwcmVjZWRlbmNlIGJhc2VkIHRvcC1kb3duIGFwcHJvYWNoCisgKiAgZm9yIHRoZSBl eHByZXNzaW9uIGxldmVsLiAgVGhlIGF0dGVtcHQgaXMgdG8gbWluaW1pemUgdGhlIEMgc3RhY2sK KyAqICBkZXB0aC4gIEJ5dGVjb2RlIGlzIGdlbmVyYXRlZCBkaXJlY3RseSB3aXRob3V0IGFuIGlu dGVybWVkaWF0ZQorICogIHJlcHJlc2VudGF0aW9uICh0cmVlKSwgYXQgdGhlIGNvc3Qgb2YgbmVl ZGluZyB0d28gKGFuZCBzb21ldGltZXMKKyAqICB0aHJlZSkgcGFzc2VzIG92ZXIgZWFjaCBmdW5j dGlvbi4KKyAqCisgKiAgVGhlIHRvcC1kb3duIHJlY3Vyc2l2ZSBwYXJzZXIgZnVuY3Rpb25zIGFy ZSBuYW1lZCAiZHVrX19wYXJzZV9YWFgiLgorICoKKyAqICBSZWN1cnNpb24gbGltaXRzIGFyZSBp biBrZXkgZnVuY3Rpb25zIHRvIHByZXZlbnQgYXJiaXRyYXJ5IEMgcmVjdXJzaW9uOgorICogIGZ1 bmN0aW9uIGJvZHkgcGFyc2luZywgc3RhdGVtZW50IHBhcnNpbmcsIGFuZCBleHByZXNzaW9uIHBh cnNpbmcuCisgKgorICogIFNlZSBkb2MvY29tcGlsZXIucnN0IGZvciBkaXNjdXNzaW9uIG9uIHRo ZSBkZXNpZ24uCisgKgorICogIEEgZmV3IHR5cGluZyBub3RlczoKKyAqCisgKiAgICAtIGR1a19y ZWdjb25zdF90OiBzaWduZWQsIGhpZ2hlc3QgYml0IHNldCAoPCAwKSBtZWFucyBjb25zdGFudCwK KyAqICAgICAgc29tZSBjYWxsIHNpdGVzIHVzZSAtMSBmb3IgIm5vbmUiIChlcXVpdmFsZW50IHRv IGNvbnN0YW50IDB4N2ZmZmZmZmYpCisgKiAgICAtIFBDIHZhbHVlczogZHVrX2ludF90LCBuZWdh dGl2ZSB2YWx1ZXMgdXNlZCBhcyBtYXJrZXJzCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVy bmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKiBJZiBoaWdoZXN0IGJpdCBvZiBhIHJl Z2lzdGVyIG51bWJlciBpcyBzZXQsIGl0IHJlZmVycyB0byBhIGNvbnN0YW50IGluc3RlYWQuCisg KiBXaGVuIGludGVycHJldGVkIGFzIGEgc2lnbmVkIHZhbHVlLCB0aGlzIG1lYW5zIGNvbnN0IHZh bHVlcyBhcmUgYWx3YXlzCisgKiBuZWdhdGl2ZSAod2hlbiBpbnRlcnByZXRlZCBhcyB0d28ncyBj b21wbGVtZW50KS4gIEZvciBleGFtcGxlIERVS19fSVNSRUdfVEVNUCgpCisgKiB1c2VzIHRoaXMg YXBwcm9hY2ggdG8gYXZvaWQgYW4gZXhwbGljaXQgRFVLX19JU1JFRygpIGNoZWNrICh0aGUgY29u ZGl0aW9uIGlzCisgKiBsb2dpY2FsbHkgIid4JyBpcyBhIHJlZ2lzdGVyIEFORCAneCcgPj0gdGVt cF9maXJzdCIpLgorICovCisjZGVmaW5lIERVS19fQ09OU1RfTUFSS0VSICAgICAgICAgICAgICAg ICAgIERVS19SRUdDT05TVF9DT05TVF9NQVJLRVIKKyNkZWZpbmUgRFVLX19SRU1PVkVDT05TVCh4 KSAgICAgICAgICAgICAgICAgKCh4KSAmIH5EVUtfX0NPTlNUX01BUktFUikKKyNkZWZpbmUgRFVL X19JU1JFRyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA+PSAwKQorI2RlZmluZSBEVUtf X0lTQ09OU1QoeCkgICAgICAgICAgICAgICAgICAgICAoKHgpIDwgMCkKKyNkZWZpbmUgRFVLX19J U1JFR19URU1QKGNvbXBfY3R4LHgpICAgICAgICAgKChkdWtfaW50MzJfdCkgKHgpID49IChkdWtf aW50MzJfdCkgKChjb21wX2N0eCktPmN1cnJfZnVuYy50ZW1wX2ZpcnN0KSkgICAvKiBDaGVjayBm b3IgeCA+PSB0ZW1wX2ZpcnN0ICYmIHggPj0gMCBieSBjb21wYXJpbmcgYXMgc2lnbmVkLiAqLwor I2RlZmluZSBEVUtfX0lTUkVHX05PVFRFTVAoY29tcF9jdHgseCkgICAgICAoKGR1a191aW50MzJf dCkgKHgpIDwgKGR1a191aW50MzJfdCkgKChjb21wX2N0eCktPmN1cnJfZnVuYy50ZW1wX2ZpcnN0 KSkgIC8qIENoZWNrIGZvciB4ID49IDAgJiYgeCA8IHRlbXBfZmlyc3QgYnkgaW50ZXJwcmV0aW5n IGFzIHVuc2lnbmVkLiAqLworI2RlZmluZSBEVUtfX0dFVFRFTVAoY29tcF9jdHgpICAgICAgICAg ICAgICAoKGNvbXBfY3R4KS0+Y3Vycl9mdW5jLnRlbXBfbmV4dCkKKyNkZWZpbmUgRFVLX19TRVRU RU1QKGNvbXBfY3R4LHgpICAgICAgICAgICAgKChjb21wX2N0eCktPmN1cnJfZnVuYy50ZW1wX25l eHQgPSAoeCkpICAvKiBkYW5nZXJvdXM6IG11c3Qgb25seSBsb3dlciAodGVtcF9tYXggbm90IHVw ZGF0ZWQpICovCisjZGVmaW5lIERVS19fU0VUVEVNUF9DSEVDS01BWChjb21wX2N0eCx4KSAgIGR1 a19fc2V0dGVtcF9jaGVja21heCgoY29tcF9jdHgpLCh4KSkKKyNkZWZpbmUgRFVLX19BTExPQ1RF TVAoY29tcF9jdHgpICAgICAgICAgICAgZHVrX19hbGxvY3RlbXAoKGNvbXBfY3R4KSkKKyNkZWZp bmUgRFVLX19BTExPQ1RFTVBTKGNvbXBfY3R4LGNvdW50KSAgICAgZHVrX19hbGxvY3RlbXBzKChj b21wX2N0eCksKGNvdW50KSkKKworLyogSW5pdCB2YWx1ZSBzZXQgc2l6ZSBmb3IgYXJyYXkgYW5k IG9iamVjdCBsaXRlcmFscy4gKi8KKyNkZWZpbmUgRFVLX19NQVhfQVJSQVlfSU5JVF9WQUxVRVMg ICAgICAgIDIwCisjZGVmaW5lIERVS19fTUFYX09CSkVDVF9JTklUX1BBSVJTICAgICAgICAxMAor CisvKiBYWFg6IGhhY2ssIHJlbW92ZSB3aGVuIGNvbnN0IGxvb2t1cCBpcyBub3QgTyhuKSAqLwor I2RlZmluZSBEVUtfX0dFVENPTlNUX01BWF9DT05TVFNfQ0hFQ0sgICAgMjU2CisKKy8qIFRoZXNl IGxpbWl0cyBhcmUgYmFzZWQgb24gYnl0ZWNvZGUgbGltaXRzLiAgTWF4IHRlbXBzIGlzIGxpbWl0 ZWQKKyAqIGJ5IGR1a19oY29tcGZ1bmMgbmFyZ3MvbnJlZ3MgZmllbGRzIGJlaW5nIDE2IGJpdHMu CisgKi8KKyNkZWZpbmUgRFVLX19NQVhfQ09OU1RTICAgICAgICAgICAgICAgICAgIERVS19CQ19C Q19NQVgKKyNkZWZpbmUgRFVLX19NQVhfRlVOQ1MgICAgICAgICAgICAgICAgICAgIERVS19CQ19C Q19NQVgKKyNkZWZpbmUgRFVLX19NQVhfVEVNUFMgICAgICAgICAgICAgICAgICAgIDB4ZmZmZkwK KworLyogSW5pdGlhbCBieXRlY29kZSBzaXplIGFsbG9jYXRpb24uICovCisjaWYgZGVmaW5lZChE VUtfVVNFX1BSRUZFUl9TSVpFKQorI2RlZmluZSBEVUtfX0JDX0lOSVRJQUxfSU5TVFMgICAgICAg ICAgICAgMTYKKyNlbHNlCisjZGVmaW5lIERVS19fQkNfSU5JVElBTF9JTlNUUyAgICAgICAgICAg ICAyNTYKKyNlbmRpZgorCisjZGVmaW5lIERVS19fUkVDVVJTSU9OX0lOQ1JFQVNFKGNvbXBfY3R4 LHRocikgIGRvIHsgXAorCQlEVUtfREREKERVS19ERERQUklOVCgiUkVDVVJTSU9OIElOQ1JFQVNF OiAlczolbGQiLCAoY29uc3QgY2hhciAqKSBEVUtfRklMRV9NQUNSTywgKGxvbmcpIERVS19MSU5F X01BQ1JPKSk7IFwKKwkJZHVrX19jb21wX3JlY3Vyc2lvbl9pbmNyZWFzZSgoY29tcF9jdHgpKTsg XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX19SRUNVUlNJT05fREVDUkVBU0UoY29tcF9j dHgsdGhyKSAgZG8geyBcCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJSRUNVUlNJT04gREVDUkVB U0U6ICVzOiVsZCIsIChjb25zdCBjaGFyICopIERVS19GSUxFX01BQ1JPLCAobG9uZykgRFVLX0xJ TkVfTUFDUk8pKTsgXAorCQlkdWtfX2NvbXBfcmVjdXJzaW9uX2RlY3JlYXNlKChjb21wX2N0eCkp OyBcCisJfSB3aGlsZSAoMCkKKworLyogVmFsdWUgc3RhY2sgc2xvdCBsaW1pdHM6IHRoZXNlIGFy ZSBxdWl0ZSBhcHByb3hpbWF0ZSByaWdodCBub3csIGFuZAorICogYmVjYXVzZSB0aGV5IG92ZXJs YXAgaW4gY29udHJvbCBmbG93LCBzb21lIGNvdWxkIGJlIGVsaW1pbmF0ZWQuCisgKi8KKyNkZWZp bmUgRFVLX19DT01QSUxFX0VOVFJZX1NMT1RTICAgICAgICAgIDgKKyNkZWZpbmUgRFVLX19GVU5D VElPTl9JTklUX1JFUVVJUkVfU0xPVFMgIDE2CisjZGVmaW5lIERVS19fRlVOQ1RJT05fQk9EWV9S RVFVSVJFX1NMT1RTICAxNgorI2RlZmluZSBEVUtfX1BBUlNFX1NUQVRFTUVOVFNfU0xPVFMgICAg ICAgMTYKKyNkZWZpbmUgRFVLX19QQVJTRV9FWFBSX1NMT1RTICAgICAgICAgICAgIDE2CisKKy8q IFRlbXBvcmFyeSBzdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGEgc3RhY2sgYWxsb2NhdGVkIHJlZ2lv biB0aHJvdWdoCisgKiBkdWtfc2FmZV9jYWxsKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlk dWtfc21hbGxfdWludF90IGZsYWdzOworCWR1a19jb21waWxlcl9jdHggY29tcF9jdHhfYWxsb2M7 CisJZHVrX2xleGVyX3BvaW50IGxleF9wdF9hbGxvYzsKK30gZHVrX19jb21waWxlcl9zdGtzdGF0 ZTsKKworLyoKKyAqICBQcm90b3R5cGVzCisgKi8KKworLyogbGV4aW5nICovCitEVUtfTE9DQUxf REVDTCB2b2lkIGR1a19fYWR2YW5jZV9oZWxwZXIoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19zbWFsbF9pbnRfdCBleHBlY3QpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2FkdmFu Y2VfZXhwZWN0KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfc21hbGxfaW50X3QgZXhw ZWN0KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19hZHZhbmNlKGR1a19jb21waWxlcl9jdHgg KmN0eCk7CisKKy8qIGZ1bmN0aW9uIGhlbHBlcnMgKi8KK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVr X19pbml0X2Z1bmNfdmFsc3RhY2tfc2xvdHMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpOwor RFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3Jlc2V0X2Z1bmNfZm9yX3Bhc3MyKGR1a19jb21waWxl cl9jdHggKmNvbXBfY3R4KTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19pbml0X3Zhcm1hcF9h bmRfcHJvbG9ndWVfZm9yX3Bhc3MyKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfcmVn Y29uc3RfdCAqb3V0X3N0bXRfdmFsdWVfcmVnKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19j b252ZXJ0X3RvX2Z1bmNfdGVtcGxhdGUoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpOworRFVL X0xPQ0FMX0RFQ0wgZHVrX2ludF90IGR1a19fY2xlYW51cF92YXJtYXAoZHVrX2NvbXBpbGVyX2N0 eCAqY29tcF9jdHgpOworCisvKiBjb2RlIGVtaXNzaW9uICovCitEVUtfTE9DQUxfREVDTCBkdWtf aW50X3QgZHVrX19nZXRfY3VycmVudF9wYyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCk7CitE VUtfTE9DQUxfREVDTCBkdWtfY29tcGlsZXJfaW5zdHIgKmR1a19fZ2V0X2luc3RyX3B0cihkdWtf Y29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2ludF90IHBjKTsKK0RVS19MT0NBTF9ERUNMIHZv aWQgZHVrX19lbWl0KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaW5zdHJfdCBpbnMp OworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VtaXRfb3Bfb25seShkdWtfY29tcGlsZXJfY3R4 ICpjb21wX2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBvcCk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1 a19fZW1pdF9hX2JfYyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3NtYWxsX3VpbnRf dCBvcF9mbGFncywgZHVrX3JlZ2NvbnN0X3QgYSwgZHVrX3JlZ2NvbnN0X3QgYiwgZHVrX3JlZ2Nv bnN0X3QgYyk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZW1pdF9hX2IoZHVrX2NvbXBpbGVy X2N0eCAqY29tcF9jdHgsIGR1a19zbWFsbF91aW50X3Qgb3BfZmxhZ3MsIGR1a19yZWdjb25zdF90 IGEsIGR1a19yZWdjb25zdF90IGIpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VtaXRfYl9j KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfc21hbGxfdWludF90IG9wX2ZsYWdzLCBk dWtfcmVnY29uc3RfdCBiLCBkdWtfcmVnY29uc3RfdCBjKTsKKyNpZiAwICAvKiB1bnVzZWQgKi8K K0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbWl0X2EoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9j dHgsIGR1a19zbWFsbF91aW50X3Qgb3BfZmxhZ3MsIGR1a19yZWdjb25zdF90IGEpOworRFVLX0xP Q0FMX0RFQ0wgdm9pZCBkdWtfX2VtaXRfYihkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVr X3NtYWxsX3VpbnRfdCBvcF9mbGFncywgZHVrX3JlZ2NvbnN0X3QgYik7CisjZW5kaWYKK0RVS19M T0NBTF9ERUNMIHZvaWQgZHVrX19lbWl0X2FfYmMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19zbWFsbF91aW50X3Qgb3BfZmxhZ3MsIGR1a19yZWdjb25zdF90IGEsIGR1a19yZWdjb25z dF90IGJjKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19lbWl0X2JjKGR1a19jb21waWxlcl9j dHggKmNvbXBfY3R4LCBkdWtfc21hbGxfdWludF90IG9wLCBkdWtfcmVnY29uc3RfdCBiYyk7CitE VUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZW1pdF9hYmMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9j dHgsIGR1a19zbWFsbF91aW50X3Qgb3AsIGR1a19yZWdjb25zdF90IGFiYyk7CitEVUtfTE9DQUxf REVDTCB2b2lkIGR1a19fZW1pdF9sb2FkX2ludDMyKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4 LCBkdWtfcmVnY29uc3RfdCByZWcsIGR1a19pbnQzMl90IHZhbCk7CitEVUtfTE9DQUxfREVDTCB2 b2lkIGR1a19fZW1pdF9sb2FkX2ludDMyX25vc2h1ZmZsZShkdWtfY29tcGlsZXJfY3R4ICpjb21w X2N0eCwgZHVrX3JlZ2NvbnN0X3QgcmVnLCBkdWtfaW50MzJfdCB2YWwpOworRFVLX0xPQ0FMX0RF Q0wgdm9pZCBkdWtfX2VtaXRfanVtcChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2lu dF90IHRhcmdldF9wYyk7CitEVUtfTE9DQUxfREVDTCBkdWtfaW50X3QgZHVrX19lbWl0X2p1bXBf ZW1wdHkoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBk dWtfX2luc2VydF9qdW1wX2VudHJ5KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaW50 X3QganVtcF9wYyk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fcGF0Y2hfanVtcChkdWtfY29t cGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2ludF90IGp1bXBfcGMsIGR1a19pbnRfdCB0YXJnZXRf cGMpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3BhdGNoX2p1bXBfaGVyZShkdWtfY29tcGls ZXJfY3R4ICpjb21wX2N0eCwgZHVrX2ludF90IGp1bXBfcGMpOworRFVLX0xPQ0FMX0RFQ0wgdm9p ZCBkdWtfX3BhdGNoX3RyeWNhdGNoKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaW50 X3QgbGRjb25zdF9wYywgZHVrX2ludF90IHRyeWNhdGNoX3BjLCBkdWtfcmVnY29uc3RfdCByZWdf Y2F0Y2gsIGR1a19yZWdjb25zdF90IGNvbnN0X3Zhcm5hbWUsIGR1a19zbWFsbF91aW50X3QgZmxh Z3MpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2VtaXRfaWZfZmFsc2Vfc2tpcChkdWtfY29t cGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3JlZ2NvbnN0X3QgcmVnY29uc3QpOworRFVLX0xPQ0FM X0RFQ0wgdm9pZCBkdWtfX2VtaXRfaWZfdHJ1ZV9za2lwKGR1a19jb21waWxlcl9jdHggKmNvbXBf Y3R4LCBkdWtfcmVnY29uc3RfdCByZWdjb25zdCk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19f ZW1pdF9pbnZhbGlkKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KTsKKworLyogaXZhbHVlL2lz cGVjIGhlbHBlcnMgKi8KK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19pdmFsdWVfcmVnY29uc3Qo ZHVrX2l2YWx1ZSAqeCwgZHVrX3JlZ2NvbnN0X3QgcmVnY29uc3QpOworRFVLX0xPQ0FMX0RFQ0wg dm9pZCBkdWtfX2l2YWx1ZV9wbGFpbl9mcm9tc3RhY2soZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9j dHgsIGR1a19pdmFsdWUgKngpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2l2YWx1ZV92YXJf ZnJvbXN0YWNrKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICp4KTsKK0RV S19MT0NBTF9ERUNMIHZvaWQgZHVrX19pdmFsdWVfdmFyX2hzdHJpbmcoZHVrX2NvbXBpbGVyX2N0 eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKngsIGR1a19oc3RyaW5nICpoKTsKK0RVS19MT0NBTF9E RUNMIHZvaWQgZHVrX19jb3B5X2lzcGVjKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtf aXNwZWMgKnNyYywgZHVrX2lzcGVjICpkc3QpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2Nv cHlfaXZhbHVlKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpzcmMsIGR1 a19pdmFsdWUgKmRzdCk7CitEVUtfTE9DQUxfREVDTCBkdWtfcmVnY29uc3RfdCBkdWtfX2FsbG9j dGVtcHMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19zbWFsbF9pbnRfdCBudW0pOwor RFVLX0xPQ0FMX0RFQ0wgZHVrX3JlZ2NvbnN0X3QgZHVrX19hbGxvY3RlbXAoZHVrX2NvbXBpbGVy X2N0eCAqY29tcF9jdHgpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3NldHRlbXBfY2hlY2tt YXgoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19yZWdjb25zdF90IHRlbXBfbmV4dCk7 CitEVUtfTE9DQUxfREVDTCBkdWtfcmVnY29uc3RfdCBkdWtfX2dldGNvbnN0KGR1a19jb21waWxl cl9jdHggKmNvbXBfY3R4KTsKK0RVS19MT0NBTF9ERUNMCitkdWtfcmVnY29uc3RfdCBkdWtfX2lz cGVjX3RvcmVnY29uc3RfcmF3KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaXNwZWMgKngsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19yZWdjb25zdF90IGZvcmNlZF9yZWcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zbWFsbF91aW50 X3QgZmxhZ3MpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2lzcGVjX3RvZm9yY2VkcmVnKGR1 a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXNwZWMgKngsIGR1a19yZWdjb25zdF90IGZv cmNlZF9yZWcpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2l2YWx1ZV90b3BsYWluX3Jhdyhk dWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqeCwgZHVrX3JlZ2NvbnN0X3Qg Zm9yY2VkX3JlZyk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19faXZhbHVlX3RvcGxhaW4oZHVr X2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKngpOworRFVLX0xPQ0FMX0RFQ0wg dm9pZCBkdWtfX2l2YWx1ZV90b3BsYWluX2lnbm9yZShkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0 eCwgZHVrX2l2YWx1ZSAqeCk7CitEVUtfTE9DQUxfREVDTAorZHVrX3JlZ2NvbnN0X3QgZHVrX19p dmFsdWVfdG9yZWdjb25zdF9yYXcoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaXZhbHVlICp4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3JlZ2NvbnN0X3QgZm9yY2Vk X3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zbWFs bF91aW50X3QgZmxhZ3MpOworRFVLX0xPQ0FMX0RFQ0wgZHVrX3JlZ2NvbnN0X3QgZHVrX19pdmFs dWVfdG9yZWcoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKngpOworI2lm IDAgIC8qIHVudXNlZCAqLworRFVLX0xPQ0FMX0RFQ0wgZHVrX3JlZ2NvbnN0X3QgZHVrX19pdmFs dWVfdG90ZW1wKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICp4KTsKKyNl bmRpZgorRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhkdWtfY29t cGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqeCwgZHVrX2ludF90IGZvcmNlZF9yZWcp OworRFVLX0xPQ0FMX0RFQ0wgZHVrX3JlZ2NvbnN0X3QgZHVrX19pdmFsdWVfdG9yZWdjb25zdChk dWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqeCk7CitEVUtfTE9DQUxfREVD TCBkdWtfcmVnY29uc3RfdCBkdWtfX2l2YWx1ZV90b3RlbXBjb25zdChkdWtfY29tcGlsZXJfY3R4 ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqeCk7CisKKy8qIGlkZW50aWZpZXIgaGFuZGxpbmcgKi8K K0RVS19MT0NBTF9ERUNMIGR1a19yZWdjb25zdF90IGR1a19fbG9va3VwX2FjdGl2ZV9yZWdpc3Rl cl9iaW5kaW5nKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KTsKK0RVS19MT0NBTF9ERUNMIGR1 a19ib29sX3QgZHVrX19sb29rdXBfbGhzKGR1a19jb21waWxlcl9jdHggKmN0eCwgZHVrX3JlZ2Nv bnN0X3QgKm91dF9yZWdfdmFyYmluZCwgZHVrX3JlZ2NvbnN0X3QgKm91dF9yY192YXJuYW1lKTsK KworLyogbGFiZWwgaGFuZGxpbmcgKi8KK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19hZGRfbGFi ZWwoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19oc3RyaW5nICpoX2xhYmVsLCBkdWtf aW50X3QgcGNfbGFiZWwsIGR1a19pbnRfdCBsYWJlbF9pZCk7CitEVUtfTE9DQUxfREVDTCB2b2lk IGR1a19fdXBkYXRlX2xhYmVsX2ZsYWdzKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtf aW50X3QgbGFiZWxfaWQsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpOworRFVLX0xPQ0FMX0RFQ0wg dm9pZCBkdWtfX2xvb2t1cF9hY3RpdmVfbGFiZWwoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19oc3RyaW5nICpoX2xhYmVsLCBkdWtfYm9vbF90IGlzX2JyZWFrLCBkdWtfaW50X3QgKm91 dF9sYWJlbF9pZCwgZHVrX2ludF90ICpvdXRfbGFiZWxfY2F0Y2hfZGVwdGgsIGR1a19pbnRfdCAq b3V0X2xhYmVsX3BjLCBkdWtfYm9vbF90ICpvdXRfaXNfY2xvc2VzdCk7CitEVUtfTE9DQUxfREVD TCB2b2lkIGR1a19fcmVzZXRfbGFiZWxzX3RvX2xlbmd0aChkdWtfY29tcGlsZXJfY3R4ICpjb21w X2N0eCwgZHVrX3NpemVfdCBsZW4pOworCisvKiB0b3AtZG93biBleHByZXNzaW9uIHBhcnNlciAq LworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2V4cHJfbnVkKGR1a19jb21waWxlcl9jdHggKmNv bXBfY3R4LCBkdWtfaXZhbHVlICpyZXMpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2V4cHJf bGVkKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpsZWZ0LCBkdWtfaXZh bHVlICpyZXMpOworRFVLX0xPQ0FMX0RFQ0wgZHVrX3NtYWxsX3VpbnRfdCBkdWtfX2V4cHJfbGJw KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KTsKK0RVS19MT0NBTF9ERUNMIGR1a19ib29sX3Qg ZHVrX19leHByX2lzX2VtcHR5KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KTsKKworLyogZXhw cnRvcCBpcyB0aGUgdG9wIGxldmVsIHZhcmlhbnQgd2hpY2ggcmVzZXRzIG51ZC9sZWQgY291bnRz ICovCitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZXhwcihkdWtfY29tcGlsZXJfY3R4ICpjb21w X2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfc21hbGxfdWludF90IHJicF9mbGFncyk7CitEVUtf TE9DQUxfREVDTCB2b2lkIGR1a19fZXhwcnRvcChkdWtfY29tcGlsZXJfY3R4ICpjdHgsIGR1a19p dmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MpOworCisvKiBjb252ZW5pZW5j ZSBoZWxwZXJzICovCisjaWYgMCAgLyogdW51c2VkICovCitEVUtfTE9DQUxfREVDTCBkdWtfcmVn Y29uc3RfdCBkdWtfX2V4cHJfdG9yZWcoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19p dmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MpOworI2VuZGlmCisjaWYgMCAg LyogdW51c2VkICovCitEVUtfTE9DQUxfREVDTCBkdWtfcmVnY29uc3RfdCBkdWtfX2V4cHJfdG90 ZW1wKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19zbWFs bF91aW50X3QgcmJwX2ZsYWdzKTsKKyNlbmRpZgorRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2V4 cHJfdG9mb3JjZWRyZWcoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJl cywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MsIGR1a19yZWdjb25zdF90IGZvcmNlZF9yZWcp OworRFVLX0xPQ0FMX0RFQ0wgZHVrX3JlZ2NvbnN0X3QgZHVrX19leHByX3RvcmVnY29uc3QoZHVr X2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRf dCByYnBfZmxhZ3MpOworI2lmIDAgIC8qIHVudXNlZCAqLworRFVLX0xPQ0FMX0RFQ0wgZHVrX3Jl Z2NvbnN0X3QgZHVrX19leHByX3RvdGVtcGNvbnN0KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4 LCBkdWtfaXZhbHVlICpyZXMsIGR1a19zbWFsbF91aW50X3QgcmJwX2ZsYWdzKTsKKyNlbmRpZgor RFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2V4cHJfdG9wbGFpbihkdWtfY29tcGlsZXJfY3R4ICpj b21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfc21hbGxfdWludF90IHJicF9mbGFncyk7CitE VUtfTE9DQUxfREVDTCB2b2lkIGR1a19fZXhwcl90b3BsYWluX2lnbm9yZShkdWtfY29tcGlsZXJf Y3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfc21hbGxfdWludF90IHJicF9mbGFn cyk7CitEVUtfTE9DQUxfREVDTCBkdWtfcmVnY29uc3RfdCBkdWtfX2V4cHJ0b3BfdG9yZWcoZHVr X2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRf dCByYnBfZmxhZ3MpOworI2lmIDAgIC8qIHVudXNlZCAqLworRFVLX0xPQ0FMX0RFQ0wgZHVrX3Jl Z2NvbnN0X3QgZHVrX19leHBydG9wX3RvdGVtcChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwg ZHVrX2l2YWx1ZSAqcmVzLCBkdWtfc21hbGxfdWludF90IHJicF9mbGFncyk7CisjZW5kaWYKK0RV S19MT0NBTF9ERUNMIHZvaWQgZHVrX19leHBydG9wX3RvZm9yY2VkcmVnKGR1a19jb21waWxlcl9j dHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19zbWFsbF91aW50X3QgcmJwX2ZsYWdz LCBkdWtfcmVnY29uc3RfdCBmb3JjZWRfcmVnKTsKK0RVS19MT0NBTF9ERUNMIGR1a19yZWdjb25z dF90IGR1a19fZXhwcnRvcF90b3JlZ2NvbnN0KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBk dWtfaXZhbHVlICpyZXMsIGR1a19zbWFsbF91aW50X3QgcmJwX2ZsYWdzKTsKKyNpZiAwICAvKiB1 bnVzZWQgKi8KK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19leHBydG9wX3RvcGxhaW5faWdub3Jl KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19zbWFsbF91 aW50X3QgcmJwX2ZsYWdzKTsKKyNlbmRpZgorCisvKiBleHByZXNzaW9uIHBhcnNpbmcgaGVscGVy cyAqLworRFVLX0xPQ0FMX0RFQ0wgZHVrX2ludF90IGR1a19fcGFyc2VfYXJndW1lbnRzKGR1a19j b21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMpOworRFVLX0xPQ0FMX0RFQ0wg dm9pZCBkdWtfX251ZF9hcnJheV9saXRlcmFsKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBk dWtfaXZhbHVlICpyZXMpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX251ZF9vYmplY3RfbGl0 ZXJhbChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzKTsKKworLyog c3RhdGVtZW50IHBhcnNpbmcgKi8KK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19wYXJzZV92YXJf ZGVjbChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfc21h bGxfdWludF90IGV4cHJfZmxhZ3MsIGR1a19yZWdjb25zdF90ICpvdXRfcmVnX3ZhcmJpbmQsIGR1 a19yZWdjb25zdF90ICpvdXRfcmNfdmFybmFtZSk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19f cGFyc2VfdmFyX3N0bXQoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJl cywgZHVrX3NtYWxsX3VpbnRfdCBleHByX2ZsYWdzKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVr X19wYXJzZV9mb3Jfc3RtdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAq cmVzLCBkdWtfaW50X3QgcGNfbGFiZWxfc2l0ZSk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19f cGFyc2Vfc3dpdGNoX3N0bXQoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUg KnJlcywgZHVrX2ludF90IHBjX2xhYmVsX3NpdGUpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtf X3BhcnNlX2lmX3N0bXQoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJl cyk7CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fcGFyc2VfZG9fc3RtdChkdWtfY29tcGlsZXJf Y3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfaW50X3QgcGNfbGFiZWxfc2l0ZSk7 CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fcGFyc2Vfd2hpbGVfc3RtdChkdWtfY29tcGlsZXJf Y3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfaW50X3QgcGNfbGFiZWxfc2l0ZSk7 CitEVUtfTE9DQUxfREVDTCB2b2lkIGR1a19fcGFyc2VfYnJlYWtfb3JfY29udGludWVfc3RtdChk dWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzKTsKK0RVS19MT0NBTF9E RUNMIHZvaWQgZHVrX19wYXJzZV9yZXR1cm5fc3RtdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0 eCwgZHVrX2l2YWx1ZSAqcmVzKTsKK0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19wYXJzZV90aHJv d19zdG10KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMpOworRFVL X0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3BhcnNlX3RyeV9zdG10KGR1a19jb21waWxlcl9jdHggKmNv bXBfY3R4LCBkdWtfaXZhbHVlICpyZXMpOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3BhcnNl X3dpdGhfc3RtdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzKTsK K0RVS19MT0NBTF9ERUNMIHZvaWQgZHVrX19wYXJzZV9zdG10KGR1a19jb21waWxlcl9jdHggKmNv bXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19ib29sX3QgYWxsb3dfc291cmNlX2VsZW0pOwor RFVLX0xPQ0FMX0RFQ0wgZHVrX2ludF90IGR1a19fc3RtdF9sYWJlbF9zaXRlKGR1a19jb21waWxl cl9jdHggKmNvbXBfY3R4LCBkdWtfaW50X3QgbGFiZWxfaWQpOworRFVLX0xPQ0FMX0RFQ0wgdm9p ZCBkdWtfX3BhcnNlX3N0bXRzKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfYm9vbF90 IGFsbG93X3NvdXJjZV9lbGVtLCBkdWtfYm9vbF90IGV4cGVjdF9lb2YsIGR1a19ib29sX3QgcmVn ZXhwX2FmdGVyKTsKKworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3BhcnNlX2Z1bmNfYm9keShk dWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2Jvb2xfdCBleHBlY3RfZW9mLCBkdWtfYm9v bF90IGltcGxpY2l0X3JldHVybl92YWx1ZSwgZHVrX2Jvb2xfdCByZWdleHBfYWZ0ZXIsIGR1a19z bWFsbF9pbnRfdCBleHBlY3RfdG9rZW4pOworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX3BhcnNl X2Z1bmNfZm9ybWFscyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCk7CitEVUtfTE9DQUxfREVD TCB2b2lkIGR1a19fcGFyc2VfZnVuY19saWtlX3JhdyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0 eCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncyk7CitEVUtfTE9DQUxfREVDTCBkdWtfaW50X3QgZHVr X19wYXJzZV9mdW5jX2xpa2VfZm51bShkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3Nt YWxsX3VpbnRfdCBmbGFncyk7CisKKyNkZWZpbmUgRFVLX19GVU5DX0ZMQUdfREVDTCAgICAgICAg ICAgICgxIDw8IDApICAgLyogUGFyc2luZyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAqLworI2Rl ZmluZSBEVUtfX0ZVTkNfRkxBR19HRVRTRVQgICAgICAgICAgKDEgPDwgMSkgICAvKiBQYXJzaW5n IGFuIG9iamVjdCBsaXRlcmFsIGdldHRlci9zZXR0ZXIuICovCisjZGVmaW5lIERVS19fRlVOQ19G TEFHX01FVERFRiAgICAgICAgICAoMSA8PCAyKSAgIC8qIFBhcnNpbmcgYW4gb2JqZWN0IGxpdGVy YWwgbWV0aG9kIGRlZmluaXRpb24gc2hvcnRoYW5kLiAqLworI2RlZmluZSBEVUtfX0ZVTkNfRkxB R19QVVNITkFNRV9QQVNTMSAgKDEgPDwgMykgICAvKiBQdXNoIGZ1bmN0aW9uIG5hbWUgd2hlbiBj cmVhdGluZyB0ZW1wbGF0ZSAoZmlyc3QgcGFzcyBvbmx5KS4gKi8KKyNkZWZpbmUgRFVLX19GVU5D X0ZMQUdfVVNFX1BSRVZUT0tFTiAgICgxIDw8IDQpICAgLyogVXNlIHByZXZfdG9rZW4gdG8gc3Rh cnQgZnVuY3Rpb24gcGFyc2luZyAod29ya2Fyb3VuZCBmb3Igb2JqZWN0IGxpdGVyYWwpLiAqLwor CisvKgorICogIFBhcnNlciBjb250cm9sIHZhbHVlcyBmb3IgdG9rZW5zLiAgVGhlIHRva2VuIHRh YmxlIGlzIG9yZGVyZWQgYnkgdGhlCisgKiAgRFVLX1RPS19YWFggZGVmaW5lcy4KKyAqCisgKiAg VGhlIGJpbmRpbmcgcG93ZXJzIGFyZSBmb3IgbGJwKCkgdXNlIChpLmUuIGZvciB1c2UgaW4gbGVk KCkgY29udGV4dCkuCisgKiAgQmluZGluZyBwb3dlcnMgYXJlIHBvc2l0aXZlIGZvciB0eXBpbmcg Y29udmVuaWVuY2UsIGFuZCBiaXRzIGF0IHRoZQorICogIHRvcCBzaG91bGQgYmUgcmVzZXJ2ZWQg Zm9yIGZsYWdzLiAgQmluZGluZyBwb3dlciBzdGVwIG11c3QgYmUgaGlnaGVyCisgKiAgdGhhbiAx IHNvIHRoYXQgYmluZGluZyBwb3dlciAibGJwIC0gMSIgY2FuIGJlIHVzZWQgZm9yIHJpZ2h0IGFz c29jaWF0aXZlCisgKiAgb3BlcmF0b3JzLiAgQ3VycmVudGx5IGEgc3RlcCBvZiAyIGlzIHVzZWQg KHdoaWNoIGZyZWVzIG9uZSBtb3JlIGJpdCBmb3IKKyAqICBmbGFncykuCisgKi8KKworLyogWFhY OiBhY3R1YWxseSBzaW5nbGUgc3RlcCBsZXZlbHMgd291bGQgd29yayBqdXN0IGZpbmUsIGNsZWFu IHVwICovCisKKy8qIGJpbmRpbmcgcG93ZXIgImxldmVscyIgKHNlZSBkb2MvY29tcGlsZXIucnN0 KSAqLworI2RlZmluZSBEVUtfX0JQX0lOVkFMSUQgICAgICAgICAgICAgICAgMCAgICAgICAgICAg ICAvKiBhbHdheXMgdGVybWluYXRlcyBsZWQoKSAqLworI2RlZmluZSBEVUtfX0JQX0VPRiAgICAg ICAgICAgICAgICAgICAgMgorI2RlZmluZSBEVUtfX0JQX0NMT1NJTkcgICAgICAgICAgICAgICAg NCAgICAgICAgICAgICAvKiB0b2tlbiBjbG9zZXMgZXhwcmVzc2lvbiwgZS5nLiAnKScsICddJyAq LworI2RlZmluZSBEVUtfX0JQX0ZPUl9FWFBSICAgICAgICAgICAgICAgRFVLX19CUF9DTE9TSU5H ICAgIC8qIGJwIHRvIHVzZSB3aGVuIHBhcnNpbmcgYSB0b3AgbGV2ZWwgRXhwcmVzc2lvbiAqLwor I2RlZmluZSBEVUtfX0JQX0NPTU1BICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBEVUtfX0JQ X0FTU0lHTk1FTlQgICAgICAgICAgICAgOAorI2RlZmluZSBEVUtfX0JQX0NPTkRJVElPTkFMICAg ICAgICAgICAgMTAKKyNkZWZpbmUgRFVLX19CUF9MT1IgICAgICAgICAgICAgICAgICAgIDEyCisj ZGVmaW5lIERVS19fQlBfTEFORCAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBEVUtfX0JQ X0JPUiAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRFVLX19CUF9CWE9SICAgICAgICAg ICAgICAgICAgIDE4CisjZGVmaW5lIERVS19fQlBfQkFORCAgICAgICAgICAgICAgICAgICAyMAor I2RlZmluZSBEVUtfX0JQX0VRVUFMSVRZICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgRFVLX19C UF9SRUxBVElPTkFMICAgICAgICAgICAgIDI0CisjZGVmaW5lIERVS19fQlBfU0hJRlQgICAgICAg ICAgICAgICAgICAyNgorI2RlZmluZSBEVUtfX0JQX0FERElUSVZFICAgICAgICAgICAgICAgMjgK KyNkZWZpbmUgRFVLX19CUF9NVUxUSVBMSUNBVElWRSAgICAgICAgIDMwCisjZGVmaW5lIERVS19f QlBfRVhQT05FTlRJQVRJT04gICAgICAgICAzMgorI2RlZmluZSBEVUtfX0JQX1BPU1RGSVggICAg ICAgICAgICAgICAgMzQKKyNkZWZpbmUgRFVLX19CUF9DQUxMICAgICAgICAgICAgICAgICAgIDM2 CisjZGVmaW5lIERVS19fQlBfTUVNQkVSICAgICAgICAgICAgICAgICAzOAorCisjZGVmaW5lIERV S19fVE9LRU5fTEJQX0JQX01BU0sgICAgICAgICAweDFmCisjZGVmaW5lIERVS19fVE9LRU5fTEJQ X0ZMQUdfTk9fUkVHRVhQICAoMSA8PCA1KSAgIC8qIHJlZ2V4cCBsaXRlcmFsIG11c3Qgbm90IGZv bGxvdyB0aGlzIHRva2VuICovCisjZGVmaW5lIERVS19fVE9LRU5fTEJQX0ZMQUdfVEVSTUlOQVRF UyAoMSA8PCA2KSAgIC8qIHRlcm1pbmF0ZXMgZXhwcmVzc2lvbjsgZS5nLiBwb3N0LWluY3JlbWVu dC8tZGVjcmVtZW50ICovCisjZGVmaW5lIERVS19fVE9LRU5fTEJQX0ZMQUdfVU5VU0VEICAgICAo MSA8PCA3KSAgIC8qIHVudXNlZCAqLworCisjZGVmaW5lIERVS19fVE9LRU5fTEJQX0dFVF9CUCh4 KSAgICAgICAoKGR1a19zbWFsbF91aW50X3QpICgoKHgpICYgRFVLX19UT0tFTl9MQlBfQlBfTUFT SykgKiAyKSkKKworI2RlZmluZSBEVUtfX01LX0xCUChicCkgICAgICAgICAgICAgICAgKChicCkg Pj4gMSkgICAgLyogYnAgaXMgYXNzdW1lZCB0byBiZSBldmVuICovCisjZGVmaW5lIERVS19fTUtf TEJQX0ZMQUdTKGJwLGZsYWdzKSAgICAoKChicCkgPj4gMSkgfCAoZmxhZ3MpKQorCitEVUtfTE9D QUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX190b2tlbl9sYnBbXSA9IHsKKwlEVUtfX01LX0xCUChE VUtfX0JQX0VPRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19F T0YgKi8KKwlEVUtfX01LX0xCUF9GTEFHUyhEVUtfX0JQX0lOVkFMSUQsIERVS19fVE9LRU5fTEJQ X0ZMQUdfTk9fUkVHRVhQKSwgIC8qIERVS19UT0tfSURFTlRJRklFUiAqLworCURVS19fTUtfTEJQ KERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9L X0JSRUFLICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERVS19UT0tfQ0FTRSAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5W QUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0NBVENIICovCisJ RFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERVS19UT0tfQ09OVElOVUUgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19ERUJVR0dFUiAqLworCURVS19f TUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE VUtfVE9LX0RFRkFVTFQgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19ERUxFVEUgKi8KKwlEVUtfX01LX0xCUChE VUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19E TyAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEVUtfVE9LX0VMU0UgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQp LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19GSU5BTExZICovCisJRFVL X19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERVS19UT0tfRk9SICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfRlVOQ1RJT04gKi8KKwlEVUtfX01LX0xCUChE VUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19J RiAqLworCURVS19fTUtfTEJQKERVS19fQlBfUkVMQVRJT05BTCksICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEVUtfVE9LX0lOICovCisJRFVLX19NS19MQlAoRFVLX19CUF9SRUxBVElPTkFM KSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfSU5TVEFOQ0VPRiAqLworCURV S19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBEVUtfVE9LX05FVyAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX1JFVFVSTiAqLworCURVS19fTUtfTEJQKERV S19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX1NX SVRDSCAqLworCURVS19fTUtfTEJQX0ZMQUdTKERVS19fQlBfSU5WQUxJRCwgRFVLX19UT0tFTl9M QlBfRkxBR19OT19SRUdFWFApLCAgLyogRFVLX1RPS19USElTICovCisJRFVLX19NS19MQlAoRFVL X19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfVEhS T1cgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRFVLX1RPS19UUlkgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQp LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19UWVBFT0YgKi8KKwlEVUtf X01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RFVLX1RPS19WQVIgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19DT05TVCAqLworCURVS19fTUtfTEJQKERVS19f QlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX1ZPSUQg Ki8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRFVLX1RPS19XSElMRSAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCks ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX1dJVEggKi8KKwlEVUtfX01L X0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVL X1RPS19DTEFTUyAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0VOVU0gKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQ X0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19FWFBPUlQg Ki8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRFVLX1RPS19FWFRFTkRTICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElE KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfSU1QT1JUICovCisJRFVL X19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERVS19UT0tfU1VQRVIgKi8KKwlEVUtfX01LX0xCUF9GTEFHUyhEVUtfX0JQX0lOVkFMSUQsIERV S19fVE9LRU5fTEJQX0ZMQUdfTk9fUkVHRVhQKSwgIC8qIERVS19UT0tfTlVMTCAqLworCURVS19f TUtfTEJQX0ZMQUdTKERVS19fQlBfSU5WQUxJRCwgRFVLX19UT0tFTl9MQlBfRkxBR19OT19SRUdF WFApLCAgLyogRFVLX1RPS19UUlVFICovCisJRFVLX19NS19MQlBfRkxBR1MoRFVLX19CUF9JTlZB TElELCBEVUtfX1RPS0VOX0xCUF9GTEFHX05PX1JFR0VYUCksICAvKiBEVUtfVE9LX0ZBTFNFICov CisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERVS19UT0tfR0VUICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfU0VUICovCisJRFVLX19NS19MQlAo RFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tf SU1QTEVNRU5UUyAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0lOVEVSRkFDRSAqLworCURVS19fTUtfTEJQKERV S19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0xF VCAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5WQUxJRCksICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEVUtfVE9LX1BBQ0tBR0UgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lOVkFM SUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19QUklWQVRFICovCisJ RFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERVS19UT0tfUFJPVEVDVEVEICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfUFVCTElDICovCisJRFVLX19N S19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERV S19UT0tfU1RBVElDICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfWUlFTEQgKi8KKwlEVUtfX01LX0xCUChEVUtf X0JQX0lOVkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19MQ1VS TFkgKi8KKwlEVUtfX01LX0xCUF9GTEFHUyhEVUtfX0JQX0lOVkFMSUQsIERVS19fVE9LRU5fTEJQ X0ZMQUdfTk9fUkVHRVhQKSwgIC8qIERVS19UT0tfUkNVUkxZICovCisJRFVLX19NS19MQlAoRFVL X19CUF9NRU1CRVIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfTEJS QUNLRVQgKi8KKwlEVUtfX01LX0xCUF9GTEFHUyhEVUtfX0JQX0NMT1NJTkcsIERVS19fVE9LRU5f TEJQX0ZMQUdfTk9fUkVHRVhQKSwgIC8qIERVS19UT0tfUkJSQUNLRVQgKi8KKwlEVUtfX01LX0xC UChEVUtfX0JQX0NBTEwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RP S19MUEFSRU4gKi8KKwlEVUtfX01LX0xCUF9GTEFHUyhEVUtfX0JQX0NMT1NJTkcsIERVS19fVE9L RU5fTEJQX0ZMQUdfTk9fUkVHRVhQKSwgIC8qIERVS19UT0tfUlBBUkVOICovCisJRFVLX19NS19M QlAoRFVLX19CUF9NRU1CRVIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19U T0tfUEVSSU9EICovCisJRFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERVS19UT0tfU0VNSUNPTE9OICovCisJRFVLX19NS19MQlAoRFVL X19CUF9DT01NQSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfQ09N TUEgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX1JFTEFUSU9OQUwpLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRFVLX1RPS19MVCAqLworCURVS19fTUtfTEJQKERVS19fQlBfUkVMQVRJT05B TCksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0dUICovCisJRFVLX19NS19M QlAoRFVLX19CUF9SRUxBVElPTkFMKSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19U T0tfTEUgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX1JFTEFUSU9OQUwpLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRFVLX1RPS19HRSAqLworCURVS19fTUtfTEJQKERVS19fQlBfRVFVQUxJ VFkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0VRICovCisJRFVLX19N S19MQlAoRFVLX19CUF9FUVVBTElUWSksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERV S19UT0tfTkVRICovCisJRFVLX19NS19MQlAoRFVLX19CUF9FUVVBTElUWSksICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERVS19UT0tfU0VRICovCisJRFVLX19NS19MQlAoRFVLX19CUF9F UVVBTElUWSksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfU05FUSAqLwor CURVS19fTUtfTEJQKERVS19fQlBfQURESVRJVkUpLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEVUtfVE9LX0FERCAqLworCURVS19fTUtfTEJQKERVS19fQlBfQURESVRJVkUpLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX1NVQiAqLworCURVS19fTUtfTEJQKERV S19fQlBfTVVMVElQTElDQVRJVkUpLCAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX01V TCAqLworCURVS19fTUtfTEJQKERVS19fQlBfTVVMVElQTElDQVRJVkUpLCAgICAgICAgICAgICAg ICAgICAgICAvKiBEVUtfVE9LX0RJViAqLworCURVS19fTUtfTEJQKERVS19fQlBfTVVMVElQTElD QVRJVkUpLCAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX01PRCAqLworCURVS19fTUtf TEJQKERVS19fQlBfRVhQT05FTlRJQVRJT04pLCAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtf VE9LX0VYUCAqLworCURVS19fTUtfTEJQKERVS19fQlBfUE9TVEZJWCksICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEVUtfVE9LX0lOQ1JFTUVOVCAqLworCURVS19fTUtfTEJQKERVS19f QlBfUE9TVEZJWCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0RFQ1JF TUVOVCAqLworCURVS19fTUtfTEJQKERVS19fQlBfU0hJRlQpLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBEVUtfVE9LX0FMU0hJRlQgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX1NI SUZUKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19BUlNISUZUICov CisJRFVLX19NS19MQlAoRFVLX19CUF9TSElGVCksICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERVS19UT0tfUlNISUZUICovCisJRFVLX19NS19MQlAoRFVLX19CUF9CQU5EKSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfQkFORCAqLworCURVS19fTUtf TEJQKERVS19fQlBfQk9SKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtf VE9LX0JPUiAqLworCURVS19fTUtfTEJQKERVS19fQlBfQlhPUiksICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEVUtfVE9LX0JYT1IgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0lO VkFMSUQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19MTk9UICovCisJ RFVLX19NS19MQlAoRFVLX19CUF9JTlZBTElEKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERVS19UT0tfQk5PVCAqLworCURVS19fTUtfTEJQKERVS19fQlBfTEFORCksICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0xBTkQgKi8KKwlEVUtfX01LX0xCUChE VUtfX0JQX0xPUiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19M T1IgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0NPTkRJVElPTkFMKSwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRFVLX1RPS19RVUVTVElPTiAqLworCURVS19fTUtfTEJQKERVS19fQlBfSU5W QUxJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0NPTE9OICovCisJ RFVLX19NS19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERVS19UT0tfRVFVQUxTSUdOICovCisJRFVLX19NS19MQlAoRFVLX19CUF9BU1NJR05NRU5U KSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfQUREX0VRICovCisJRFVLX19N S19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERV S19UT0tfU1VCX0VRICovCisJRFVLX19NS19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfTVVMX0VRICovCisJRFVLX19NS19MQlAoRFVL X19CUF9BU1NJR05NRU5UKSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfRElW X0VRICovCisJRFVLX19NS19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERVS19UT0tfTU9EX0VRICovCisJRFVLX19NS19MQlAoRFVLX19CUF9BU1NJ R05NRU5UKSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfRVhQX0VRICovCisJ RFVLX19NS19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERVS19UT0tfQUxTSElGVF9FUSAqLworCURVS19fTUtfTEJQKERVS19fQlBfQVNTSUdOTUVO VCksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEVUtfVE9LX0FSU0hJRlRfRVEgKi8KKwlE VUtfX01LX0xCUChEVUtfX0JQX0FTU0lHTk1FTlQpLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRFVLX1RPS19SU0hJRlRfRVEgKi8KKwlEVUtfX01LX0xCUChEVUtfX0JQX0FTU0lHTk1FTlQp LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRFVLX1RPS19CQU5EX0VRICovCisJRFVLX19N S19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERV S19UT0tfQk9SX0VRICovCisJRFVLX19NS19MQlAoRFVLX19CUF9BU1NJR05NRU5UKSwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERVS19UT0tfQlhPUl9FUSAqLworCURVS19fTUtfTEJQX0ZM QUdTKERVS19fQlBfSU5WQUxJRCwgRFVLX19UT0tFTl9MQlBfRkxBR19OT19SRUdFWFApLCAgLyog RFVLX1RPS19OVU1CRVIgKi8KKwlEVUtfX01LX0xCUF9GTEFHUyhEVUtfX0JQX0lOVkFMSUQsIERV S19fVE9LRU5fTEJQX0ZMQUdfTk9fUkVHRVhQKSwgIC8qIERVS19UT0tfU1RSSU5HICovCisJRFVL X19NS19MQlBfRkxBR1MoRFVLX19CUF9JTlZBTElELCBEVUtfX1RPS0VOX0xCUF9GTEFHX05PX1JF R0VYUCksICAvKiBEVUtfVE9LX1JFR0VYUCAqLworfTsKKworLyoKKyAqICBNaXNjIGhlbHBlcnMK KyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX2NvbXBfcmVjdXJzaW9uX2luY3JlYXNlKGR1a19j b21waWxlcl9jdHggKmNvbXBfY3R4KSB7CisJRFVLX0FTU0VSVChjb21wX2N0eCAhPSBOVUxMKTsK KwlEVUtfQVNTRVJUKGNvbXBfY3R4LT5yZWN1cnNpb25fZGVwdGggPj0gMCk7CisJaWYgKGNvbXBf Y3R4LT5yZWN1cnNpb25fZGVwdGggPj0gY29tcF9jdHgtPnJlY3Vyc2lvbl9saW1pdCkgeworCQlE VUtfRVJST1JfUkFOR0UoY29tcF9jdHgtPnRociwgRFVLX1NUUl9DT01QSUxFUl9SRUNVUlNJT05f TElNSVQpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCWNvbXBfY3R4LT5yZWN1 cnNpb25fZGVwdGgrKzsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19jb21wX3JlY3Vyc2lvbl9k ZWNyZWFzZShkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCkgeworCURVS19BU1NFUlQoY29tcF9j dHggIT0gTlVMTCk7CisJRFVLX0FTU0VSVChjb21wX2N0eC0+cmVjdXJzaW9uX2RlcHRoID4gMCk7 CisJY29tcF9jdHgtPnJlY3Vyc2lvbl9kZXB0aC0tOworfQorCitEVUtfTE9DQUwgZHVrX2Jvb2xf dCBkdWtfX2hzdHJpbmdfaXNfZXZhbF9vcl9hcmd1bWVudHMoZHVrX2NvbXBpbGVyX2N0eCAqY29t cF9jdHgsIGR1a19oc3RyaW5nICpoKSB7CisJRFVLX1VOUkVGKGNvbXBfY3R4KTsKKwlEVUtfQVNT RVJUKGggIT0gTlVMTCk7CisJcmV0dXJuIERVS19IU1RSSU5HX0hBU19FVkFMX09SX0FSR1VNRU5U UyhoKTsKK30KKworRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19oc3RyaW5nX2lzX2V2YWxfb3Jf YXJndW1lbnRzX2luX3N0cmljdF9tb2RlKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtf aHN0cmluZyAqaCkgeworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlyZXR1cm4gKGNvbXBfY3R4 LT5jdXJyX2Z1bmMuaXNfc3RyaWN0ICYmCisJICAgICAgICBEVUtfSFNUUklOR19IQVNfRVZBTF9P Ul9BUkdVTUVOVFMoaCkpOworfQorCisvKgorICogIFBhcnNlciBkdWtfX2FkdmFuY2UoKSB0b2tl biBlYXRpbmcgZnVuY3Rpb25zCisgKi8KKworLyogWFhYOiB2YWxzdGFjayBoYW5kbGluZyBpcyBh d2t3YXJkLiAgQWRkIGEgdmFsc3RhY2sgaGVscGVyIHdoaWNoCisgKiBhdm9pZHMgZHVwKCk6aW5n OyB2YWxzdGFja19jb3B5KHNyYywgZHN0KT8KKyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Fk dmFuY2VfaGVscGVyKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfc21hbGxfaW50X3Qg ZXhwZWN0KSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisJZHVrX2Jvb2xf dCByZWdleHA7CisKKwlEVUtfQVNTRVJUX0RJU0FCTEUoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA+ PSAwKTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FTU0VSVChjb21wX2N0eC0+Y3Vycl90b2tlbi50 IDw9IERVS19UT0tfTUFYVkFMKTsgIC8qIE1BWFZBTCBpcyBpbmNsdXNpdmUgKi8KKworCS8qCisJ ICogIFVzZSBjdXJyZW50IHRva2VuIHRvIGRlY2lkZSB3aGV0aGVyIGEgUmVnRXhwIGNhbiBmb2xs b3cuCisJICoKKwkgKiAgV2UgY2FuIHVzZSBlaXRoZXIgJ3QnIG9yICd0X25vcmVzJzsgdGhlIGxh dHRlciB3b3VsZCBub3QKKwkgKiAgcmVjb2duaXplIGtleXdvcmRzLiAgU29tZSBrZXl3b3JkcyBj YW4gYmUgZm9sbG93ZWQgYnkgYQorCSAqICBSZWdFeHAgKGUuZy4gInJldHVybiIpLCBzbyB1c2lu ZyAndCcgaXMgYmV0dGVyLiAgVGhpcyBpcworCSAqICBub3QgdHJpdmlhbCwgc2VlIGRvYy9jb21w aWxlci5yc3QuCisJICovCisKKwlyZWdleHAgPSAxOworCWlmIChkdWtfX3Rva2VuX2xicFtjb21w X2N0eC0+Y3Vycl90b2tlbi50XSAmIERVS19fVE9LRU5fTEJQX0ZMQUdfTk9fUkVHRVhQKSB7CisJ CXJlZ2V4cCA9IDA7CisJfQorCWlmIChjb21wX2N0eC0+Y3Vycl9mdW5jLnJlamVjdF9yZWdleHBf aW5fYWR2KSB7CisJCWNvbXBfY3R4LT5jdXJyX2Z1bmMucmVqZWN0X3JlZ2V4cF9pbl9hZHYgPSAw OworCQlyZWdleHAgPSAwOworCX0KKwlpZiAoY29tcF9jdHgtPmN1cnJfZnVuYy5hbGxvd19yZWdl eHBfaW5fYWR2KSB7CisJCWNvbXBfY3R4LT5jdXJyX2Z1bmMuYWxsb3dfcmVnZXhwX2luX2FkdiA9 IDA7CisJCXJlZ2V4cCA9IDE7CisJfQorCisJaWYgKGV4cGVjdCA+PSAwICYmIGNvbXBfY3R4LT5j dXJyX3Rva2VuLnQgIT0gKGR1a19zbWFsbF91aW50X3QpIGV4cGVjdCkgeworCQlEVUtfRChEVUtf RFBSSU5UKCJwYXJzZSBlcnJvcjogZXhwZWN0PSVsZCwgZ290PSVsZCIsCisJCSAgICAgICAgICAg ICAgICAgKGxvbmcpIGV4cGVjdCwgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQpKTsKKwkJ RFVLX0VSUk9SX1NZTlRBWCh0aHIsIERVS19TVFJfUEFSU0VfRVJST1IpOworCQlEVUtfV09fTk9S RVRVUk4ocmV0dXJuOyk7CisJfQorCisJLyogbWFrZSBjdXJyZW50IHRva2VuIHRoZSBwcmV2aW91 czsgbmVlZCB0byBmaWRkbGUgd2l0aCB2YWxzdGFjayAiYmFja2luZyBzdG9yZSIgKi8KKwlkdWtf bWVtY3B5KCZjb21wX2N0eC0+cHJldl90b2tlbiwgJmNvbXBfY3R4LT5jdXJyX3Rva2VuLCBzaXpl b2YoZHVrX3Rva2VuKSk7CisJZHVrX2NvcHkodGhyLCBjb21wX2N0eC0+dG9rMTFfaWR4LCBjb21w X2N0eC0+dG9rMjFfaWR4KTsKKwlkdWtfY29weSh0aHIsIGNvbXBfY3R4LT50b2sxMl9pZHgsIGNv bXBfY3R4LT50b2syMl9pZHgpOworCisJLyogcGFyc2UgbmV3IHRva2VuICovCisJZHVrX2xleGVy X3BhcnNlX2pzX2lucHV0X2VsZW1lbnQoJmNvbXBfY3R4LT5sZXgsCisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmNvbXBfY3R4LT5jdXJyX3Rva2VuLAorCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfc3RyaWN0LAorCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4cCk7CisKKwlEVUtfREREKERVS19ERERQ UklOVCgiYWR2YW5jZTogY3VycjogdG9rPSVsZC8lbGQsJWxkLHRlcm09JWxkLCUhVCwlIVQgIgor CSAgICAgICAgICAgICAgICAgICAgICJwcmV2OiB0b2s9JWxkLyVsZCwlbGQsdGVybT0lbGQsJSFU LCUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX3Rva2Vu LnQsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX3Rva2VuLnRf bm9yZXMsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX3Rva2Vu LnN0YXJ0X2xpbmUsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJy X3Rva2VuLmxpbmV0ZXJtLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtf Z2V0X3R2YWwodGhyLCBjb21wX2N0eC0+dG9rMTFfaWR4KSwKKwkgICAgICAgICAgICAgICAgICAg ICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgY29tcF9jdHgtPnRvazEyX2lkeCksCisJ ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5wcmV2X3Rva2VuLnQsCisJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5wcmV2X3Rva2VuLnRfbm9yZXMsCisJ ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5wcmV2X3Rva2VuLnN0YXJ0X2xp bmUsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5wcmV2X3Rva2VuLmxp bmV0ZXJtLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwo dGhyLCBjb21wX2N0eC0+dG9rMjFfaWR4KSwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2 YWwgKikgZHVrX2dldF90dmFsKHRociwgY29tcF9jdHgtPnRvazIyX2lkeCkpKTsKK30KKworLyog YWR2YW5jZSwgZXhwZWN0aW5nIGN1cnJlbnQgdG9rZW4gdG8gYmUgYSBzcGVjaWZpYyB0b2tlbjsg cGFyc2UgbmV4dCB0b2tlbiBpbiByZWdleHAgY29udGV4dCAqLworRFVLX0xPQ0FMIHZvaWQgZHVr X19hZHZhbmNlX2V4cGVjdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3NtYWxsX2lu dF90IGV4cGVjdCkgeworCWR1a19fYWR2YW5jZV9oZWxwZXIoY29tcF9jdHgsIGV4cGVjdCk7Cit9 CisKKy8qIGFkdmFuY2UsIHdoYXRldmVyIHRoZSBjdXJyZW50IHRva2VuIGlzOyBwYXJzZSBuZXh0 IHRva2VuIGluIHJlZ2V4cCBjb250ZXh0ICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FkdmFuY2Uo ZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpIHsKKwlkdWtfX2FkdmFuY2VfaGVscGVyKGNvbXBf Y3R4LCAtMSk7Cit9CisKKy8qCisgKiAgSGVscGVycyBmb3IgZHVrX2NvbXBpbGVyX2Z1bmMuCisg Ki8KKworLyogaW5pdCBmdW5jdGlvbiBzdGF0ZTogaW5pdHMgdmFsc3RhY2sgYWxsb2NhdGlvbnMg Ki8KK0RVS19MT0NBTCB2b2lkIGR1a19faW5pdF9mdW5jX3ZhbHN0YWNrX3Nsb3RzKGR1a19jb21w aWxlcl9jdHggKmNvbXBfY3R4KSB7CisJZHVrX2NvbXBpbGVyX2Z1bmMgKmZ1bmMgPSAmY29tcF9j dHgtPmN1cnJfZnVuYzsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKwlkdWtf aWR4X3QgZW50cnlfdG9wOworCisJZW50cnlfdG9wID0gZHVrX2dldF90b3AodGhyKTsKKworCWR1 a19tZW16ZXJvKGZ1bmMsIHNpemVvZigqZnVuYykpOyAgLyogaW50ZW50aW9uYWwgb3ZlcmxhcCB3 aXRoIGVhcmxpZXIgbWVtemVybyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9FWFBMSUNJVF9OVUxM X0lOSVQpCisJZnVuYy0+aF9uYW1lID0gTlVMTDsKKwlmdW5jLT5oX2NvbnN0cyA9IE5VTEw7CisJ ZnVuYy0+aF9mdW5jcyA9IE5VTEw7CisJZnVuYy0+aF9kZWNscyA9IE5VTEw7CisJZnVuYy0+aF9s YWJlbG5hbWVzID0gTlVMTDsKKwlmdW5jLT5oX2xhYmVsaW5mb3MgPSBOVUxMOworCWZ1bmMtPmhf YXJnbmFtZXMgPSBOVUxMOworCWZ1bmMtPmhfdmFybWFwID0gTlVMTDsKKyNlbmRpZgorCisJZHVr X3JlcXVpcmVfc3RhY2sodGhyLCBEVUtfX0ZVTkNUSU9OX0lOSVRfUkVRVUlSRV9TTE9UUyk7CisK KwlEVUtfQldfSU5JVF9QVVNIQlVGKHRociwgJmZ1bmMtPmJ3X2NvZGUsIERVS19fQkNfSU5JVElB TF9JTlNUUyAqIHNpemVvZihkdWtfY29tcGlsZXJfaW5zdHIpKTsKKwkvKiBjb2RlX2lkeCA9IGVu dHJ5X3RvcCArIDAgKi8KKworCWR1a19wdXNoX2FycmF5KHRocik7CisJZnVuYy0+Y29uc3RzX2lk eCA9IGVudHJ5X3RvcCArIDE7CisJZnVuYy0+aF9jb25zdHMgPSBEVUtfR0VUX0hPQkpFQ1RfUE9T SURYKHRociwgZW50cnlfdG9wICsgMSk7CisJRFVLX0FTU0VSVChmdW5jLT5oX2NvbnN0cyAhPSBO VUxMKTsKKworCWR1a19wdXNoX2FycmF5KHRocik7CisJZnVuYy0+ZnVuY3NfaWR4ID0gZW50cnlf dG9wICsgMjsKKwlmdW5jLT5oX2Z1bmNzID0gRFVLX0dFVF9IT0JKRUNUX1BPU0lEWCh0aHIsIGVu dHJ5X3RvcCArIDIpOworCURVS19BU1NFUlQoZnVuYy0+aF9mdW5jcyAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKGZ1bmMtPmZudW1fbmV4dCA9PSAwKTsKKworCWR1a19wdXNoX2FycmF5KHRocik7CisJ ZnVuYy0+ZGVjbHNfaWR4ID0gZW50cnlfdG9wICsgMzsKKwlmdW5jLT5oX2RlY2xzID0gRFVLX0dF VF9IT0JKRUNUX1BPU0lEWCh0aHIsIGVudHJ5X3RvcCArIDMpOworCURVS19BU1NFUlQoZnVuYy0+ aF9kZWNscyAhPSBOVUxMKTsKKworCWR1a19wdXNoX2FycmF5KHRocik7CisJZnVuYy0+bGFiZWxu YW1lc19pZHggPSBlbnRyeV90b3AgKyA0OworCWZ1bmMtPmhfbGFiZWxuYW1lcyA9IERVS19HRVRf SE9CSkVDVF9QT1NJRFgodGhyLCBlbnRyeV90b3AgKyA0KTsKKwlEVUtfQVNTRVJUKGZ1bmMtPmhf bGFiZWxuYW1lcyAhPSBOVUxMKTsKKworCWR1a19wdXNoX2R5bmFtaWNfYnVmZmVyKHRociwgMCk7 CisJZnVuYy0+bGFiZWxpbmZvc19pZHggPSBlbnRyeV90b3AgKyA1OworCWZ1bmMtPmhfbGFiZWxp bmZvcyA9IChkdWtfaGJ1ZmZlcl9keW5hbWljICopIGR1a19rbm93bl9oYnVmZmVyKHRociwgZW50 cnlfdG9wICsgNSk7CisJRFVLX0FTU0VSVChmdW5jLT5oX2xhYmVsaW5mb3MgIT0gTlVMTCk7CisJ RFVLX0FTU0VSVChEVUtfSEJVRkZFUl9IQVNfRFlOQU1JQyhmdW5jLT5oX2xhYmVsaW5mb3MpICYm ICFEVUtfSEJVRkZFUl9IQVNfRVhURVJOQUwoZnVuYy0+aF9sYWJlbGluZm9zKSk7CisKKwlkdWtf cHVzaF9hcnJheSh0aHIpOworCWZ1bmMtPmFyZ25hbWVzX2lkeCA9IGVudHJ5X3RvcCArIDY7CisJ ZnVuYy0+aF9hcmduYW1lcyA9IERVS19HRVRfSE9CSkVDVF9QT1NJRFgodGhyLCBlbnRyeV90b3Ag KyA2KTsKKwlEVUtfQVNTRVJUKGZ1bmMtPmhfYXJnbmFtZXMgIT0gTlVMTCk7CisKKwlkdWtfcHVz aF9iYXJlX29iamVjdCh0aHIpOworCWZ1bmMtPnZhcm1hcF9pZHggPSBlbnRyeV90b3AgKyA3Owor CWZ1bmMtPmhfdmFybWFwID0gRFVLX0dFVF9IT0JKRUNUX1BPU0lEWCh0aHIsIGVudHJ5X3RvcCAr IDcpOworCURVS19BU1NFUlQoZnVuYy0+aF92YXJtYXAgIT0gTlVMTCk7Cit9CisKKy8qIHJlc2V0 IGZ1bmN0aW9uIHN0YXRlIChwcmVwYXJlIGZvciBwYXNzIDIpICovCitEVUtfTE9DQUwgdm9pZCBk dWtfX3Jlc2V0X2Z1bmNfZm9yX3Bhc3MyKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KSB7CisJ ZHVrX2NvbXBpbGVyX2Z1bmMgKmZ1bmMgPSAmY29tcF9jdHgtPmN1cnJfZnVuYzsKKwlkdWtfaHRo cmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKworCS8qIHJlc2V0IGJ5dGVjb2RlIGJ1ZmZlciBi dXQga2VlcCBjdXJyZW50IHNpemU7IHBhc3MgMiB3aWxsCisJICogcmVxdWlyZSBzYW1lIGFtb3Vu dCBvciBtb3JlLgorCSAqLworCURVS19CV19SRVNFVF9TSVpFKHRociwgJmZ1bmMtPmJ3X2NvZGUp OworCisJZHVrX3NldF9sZW5ndGgodGhyLCBmdW5jLT5jb25zdHNfaWR4LCAwKTsKKwkvKiBrZWVw IGZ1bmMtPmhfZnVuY3M7IGlubmVyIGZ1bmN0aW9ucyBhcmUgbm90IHJlcGFyc2VkIHRvIGF2b2lk IE8oZGVwdGheMikgcGFyc2luZyAqLworCWZ1bmMtPmZudW1fbmV4dCA9IDA7CisJLyogZHVrX3Nl dF9sZW5ndGgodGhyLCBmdW5jLT5mdW5jc19pZHgsIDApOyAqLworCWR1a19zZXRfbGVuZ3RoKHRo ciwgZnVuYy0+bGFiZWxuYW1lc19pZHgsIDApOworCWR1a19oYnVmZmVyX3Jlc2V0KHRociwgZnVu Yy0+aF9sYWJlbGluZm9zKTsKKwkvKiBrZWVwIGZ1bmMtPmhfYXJnbmFtZXM7IGl0IGlzIGZpeGVk IGZvciBhbGwgcGFzc2VzICovCisKKwkvKiB0cnVuY2F0ZWQgaW4gY2FzZSBwYXNzIDMgbmVlZGVk ICovCisJZHVrX3B1c2hfYmFyZV9vYmplY3QodGhyKTsKKwlkdWtfcmVwbGFjZSh0aHIsIGZ1bmMt PnZhcm1hcF9pZHgpOworCWZ1bmMtPmhfdmFybWFwID0gRFVLX0dFVF9IT0JKRUNUX1BPU0lEWCh0 aHIsIGZ1bmMtPnZhcm1hcF9pZHgpOworCURVS19BU1NFUlQoZnVuYy0+aF92YXJtYXAgIT0gTlVM TCk7Cit9CisKKy8qIGNsZWFudXAgdmFybWFwIGZyb20gYW55IG51bGwgZW50cmllcywgY29tcGFj dCBpdCwgZXRjOyByZXR1cm5zIG51bWJlcgorICogb2YgZmluYWwgZW50cmllcyBhZnRlciBjbGVh bnVwLgorICovCitEVUtfTE9DQUwgZHVrX2ludF90IGR1a19fY2xlYW51cF92YXJtYXAoZHVrX2Nv bXBpbGVyX2N0eCAqY29tcF9jdHgpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRo cjsKKwlkdWtfaG9iamVjdCAqaF92YXJtYXA7CisJZHVrX2hzdHJpbmcgKmhfa2V5OworCWR1a190 dmFsICp0djsKKwlkdWtfdWludDMyX3QgaSwgZV9uZXh0OworCWR1a19pbnRfdCByZXQ7CisKKwkv KiBbIC4uLiB2YXJtYXAgXSAqLworCisJaF92YXJtYXAgPSBEVUtfR0VUX0hPQkpFQ1RfTkVHSURY KHRociwgLTEpOworCURVS19BU1NFUlQoaF92YXJtYXAgIT0gTlVMTCk7CisKKwlyZXQgPSAwOwor CWVfbmV4dCA9IERVS19IT0JKRUNUX0dFVF9FTkVYVChoX3Zhcm1hcCk7CisJZm9yIChpID0gMDsg aSA8IGVfbmV4dDsgaSsrKSB7CisJCWhfa2V5ID0gRFVLX0hPQkpFQ1RfRV9HRVRfS0VZKHRoci0+ aGVhcCwgaF92YXJtYXAsIGkpOworCQlpZiAoIWhfa2V5KSB7CisJCQljb250aW51ZTsKKwkJfQor CisJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0VfU0xPVF9JU19BQ0NFU1NPUih0aHItPmhlYXAs IGhfdmFybWFwLCBpKSk7CisKKwkJLyogVGhlIGVudHJpZXMgY2FuIGVpdGhlciBiZSByZWdpc3Rl ciBudW1iZXJzIG9yICdudWxsJyB2YWx1ZXMuCisJCSAqIFRodXMsIG5vIG5lZWQgdG8gREVDUkVG IHRoZW0gYW5kIGdldCBzaWRlIGVmZmVjdHMuICBERUNSRUYnaW5nCisJCSAqIHRoZSBrZXlzIChz dHJpbmdzKSBjYW4gY2F1c2UgbWVtb3J5IHRvIGJlIGZyZWVkIGJ1dCBubyBzaWRlCisJCSAqIGVm ZmVjdHMgYXMgc3RyaW5ncyBkb24ndCBoYXZlIGZpbmFsaXplcnMuICBUaGlzIGlzIHdoeSB3ZSBj YW4KKwkJICogcmVseSBvbiB0aGUgb2JqZWN0IHByb3BlcnRpZXMgbm90IGNoYW5naW5nIGZyb20g dW5kZXJuZWF0aCB1cy4KKwkJICovCisKKwkJdHYgPSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9U VkFMX1BUUih0aHItPmhlYXAsIGhfdmFybWFwLCBpKTsKKwkJaWYgKCFEVUtfVFZBTF9JU19OVU1C RVIodHYpKSB7CisJCQlEVUtfQVNTRVJUKCFEVUtfVFZBTF9JU19IRUFQX0FMTE9DQVRFRCh0dikp OworCQkJRFVLX0hPQkpFQ1RfRV9TRVRfS0VZKHRoci0+aGVhcCwgaF92YXJtYXAsIGksIE5VTEwp OworCQkJRFVLX0hTVFJJTkdfREVDUkVGKHRociwgaF9rZXkpOworCQkJLyogd2hlbiBrZXkgaXMg TlVMTCwgdmFsdWUgaXMgZ2FyYmFnZSBzbyBubyBuZWVkIHRvIHNldCAqLworCQl9IGVsc2Ugewor CQkJcmV0Kys7CisJCX0KKwl9CisKKwlkdWtfY29tcGFjdF9tMSh0aHIpOworCisJcmV0dXJuIHJl dDsKK30KKworLyogQ29udmVydCBkdWtfY29tcGlsZXJfZnVuYyBpbnRvIGEgZnVuY3Rpb24gdGVt cGxhdGUsIGxlYXZpbmcgdGhlIHJlc3VsdAorICogb24gdG9wIG9mIHN0YWNrLgorICovCisvKiBY WFg6IGF3a3dhcmQgYW5kIGJsb2F0ZWQgYXNtIC0tIHVzZSBmYXN0ZXIgaW50ZXJuYWwgYWNjZXNz ZXMgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fY29udmVydF90b19mdW5jX3RlbXBsYXRlKGR1a19j b21waWxlcl9jdHggKmNvbXBfY3R4KSB7CisJZHVrX2NvbXBpbGVyX2Z1bmMgKmZ1bmMgPSAmY29t cF9jdHgtPmN1cnJfZnVuYzsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKwlk dWtfaGNvbXBmdW5jICpoX3JlczsKKwlkdWtfaGJ1ZmZlcl9maXhlZCAqaF9kYXRhOworCWR1a19z aXplX3QgY29uc3RzX2NvdW50OworCWR1a19zaXplX3QgZnVuY3NfY291bnQ7CisJZHVrX3NpemVf dCBjb2RlX2NvdW50OworCWR1a19zaXplX3QgY29kZV9zaXplOworCWR1a19zaXplX3QgZGF0YV9z aXplOworCWR1a19zaXplX3QgaTsKKwlkdWtfdHZhbCAqcF9jb25zdDsKKwlkdWtfaG9iamVjdCAq KnBfZnVuYzsKKwlkdWtfaW5zdHJfdCAqcF9pbnN0cjsKKwlkdWtfY29tcGlsZXJfaW5zdHIgKnFf aW5zdHI7CisJZHVrX3R2YWwgKnR2OworCWR1a19ib29sX3Qga2VlcF92YXJtYXA7CisJZHVrX2Jv b2xfdCBrZWVwX2Zvcm1hbHM7CisjaWYgIWRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JU KQorCWR1a19zaXplX3QgZm9ybWFsc19sZW5ndGg7CisjZW5kaWYKKworCURVS19EREQoRFVLX0RE RFBSSU5UKCJjb252ZXJ0aW5nIGR1a19jb21waWxlcl9mdW5jIHRvIGZ1bmN0aW9uL3RlbXBsYXRl IikpOworCisJLyoKKwkgKiAgUHVzaCByZXN1bHQgb2JqZWN0IGFuZCBpbml0IGl0cyBmbGFncwor CSAqLworCisJLyogVmFsc3RhY2sgc2hvdWxkIHN1ZmZpY2UgaGVyZSwgcmVxdWlyZWQgb24gZnVu Y3Rpb24gdmFsc3RhY2sgaW5pdCAqLworCisJaF9yZXMgPSBkdWtfcHVzaF9oY29tcGZ1bmModGhy KTsKKwlEVUtfQVNTRVJUKGhfcmVzICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1Rf R0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIChkdWtfaG9iamVjdCAqKSBoX3JlcykgPT0gdGhyLT5i dWlsdGluc1tEVUtfQklEWF9GVU5DVElPTl9QUk9UT1RZUEVdKTsKKwlEVUtfSE9CSkVDVF9TRVRf UFJPVE9UWVBFX1VQRFJFRih0aHIsIChkdWtfaG9iamVjdCAqKSBoX3JlcywgTlVMTCk7ICAvKiBG dW5jdGlvbiB0ZW1wbGF0ZXMgYXJlICJiYXJlIG9iamVjdHMiLiAqLworCisJaWYgKGZ1bmMtPmlz X2Z1bmN0aW9uKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJmdW5jdGlvbiAtPiBzZXQgTkVX RU5WIikpOworCQlEVUtfSE9CSkVDVF9TRVRfTkVXRU5WKChkdWtfaG9iamVjdCAqKSBoX3Jlcyk7 CisKKwkJaWYgKCFmdW5jLT5pc19hcmd1bWVudHNfc2hhZG93ZWQpIHsKKwkJCS8qIGFyZ3VtZW50 cyBvYmplY3Qgd291bGQgYmUgYWNjZXNzaWJsZTsgbm90ZSB0aGF0IHNoYWRvd2luZworCQkJICog YmluZGluZ3MgYXJlIGFyZ3VtZW50cyBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIG5laXRoZXIK KwkJCSAqIG9mIHdoaWNoIGFyZSBkZWxldGFibGUsIHNvIHRoaXMgaXMgc2FmZS4KKwkJCSAqLwor CisJCQlpZiAoZnVuYy0+aWRfYWNjZXNzX2FyZ3VtZW50cyB8fCBmdW5jLT5tYXlfZGlyZWN0X2V2 YWwpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiZnVuY3Rpb24gbWF5IGFjY2VzcyAnYXJn dW1lbnRzJyBvYmplY3QgZGlyZWN0bHkgb3IgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJp bmRpcmVjdGx5IC0+IHNldCBDUkVBVEVBUkdTIikpOworCQkJCURVS19IT0JKRUNUX1NFVF9DUkVB VEVBUkdTKChkdWtfaG9iamVjdCAqKSBoX3Jlcyk7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGZ1 bmMtPmlzX2V2YWwgJiYgZnVuYy0+aXNfc3RyaWN0KSB7CisJCURVS19EREQoRFVLX0RERFBSSU5U KCJzdHJpY3QgZXZhbCBjb2RlIC0+IHNldCBORVdFTlYiKSk7CisJCURVS19IT0JKRUNUX1NFVF9O RVdFTlYoKGR1a19ob2JqZWN0ICopIGhfcmVzKTsKKwl9IGVsc2UgeworCQkvKiBub24tc3RyaWN0 IGV2YWw6IGVudiBpcyBjYWxsZXIncyBlbnYgb3IgZ2xvYmFsIGVudiAoZGlyZWN0IHZzLiBpbmRp cmVjdCBjYWxsKQorCQkgKiBnbG9iYWwgY29kZTogZW52IGlzIGlzIGdsb2JhbCBlbnYKKwkJICov CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJub24tc3RyaWN0IGV2YWwgY29kZSBvciBnbG9iYWwg Y29kZSAtPiBubyBORVdFTlYiKSk7CisJCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19ORVdF TlYoKGR1a19ob2JqZWN0ICopIGhfcmVzKSk7CisJfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZV TkNfTkFNRV9QUk9QRVJUWSkKKwlpZiAoZnVuYy0+aXNfZnVuY3Rpb24gJiYgZnVuYy0+aXNfbmFt ZWJpbmRpbmcgJiYgZnVuYy0+aF9uYW1lICE9IE5VTEwpIHsKKwkJLyogT2JqZWN0IGxpdGVyYWwg c2V0L2dldCBmdW5jdGlvbnMgaGF2ZSBhIG5hbWUgKHByb3BlcnR5CisJCSAqIG5hbWUpIGJ1dCBt dXN0IG5vdCBoYXZlIGEgbGV4aWNhbCBuYW1lIGJpbmRpbmcsIHNlZQorCQkgKiB0ZXN0LWJ1Zy1n ZXRzZXQtZnVuYy1uYW1lLmpzLgorCQkgKi8KKwkJRFVLX0RERChEVUtfREREUFJJTlQoImZ1bmN0 aW9uIGV4cHJlc3Npb24gd2l0aCBhIG5hbWUgLT4gc2V0IE5BTUVCSU5ESU5HIikpOworCQlEVUtf SE9CSkVDVF9TRVRfTkFNRUJJTkRJTkcoKGR1a19ob2JqZWN0ICopIGhfcmVzKTsKKwl9CisjZW5k aWYKKworCWlmIChmdW5jLT5pc19zdHJpY3QpIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImZ1 bmN0aW9uIGlzIHN0cmljdCAtPiBzZXQgU1RSSUNUIikpOworCQlEVUtfSE9CSkVDVF9TRVRfU1RS SUNUKChkdWtfaG9iamVjdCAqKSBoX3Jlcyk7CisJfQorCisJaWYgKGZ1bmMtPmlzX25vdGFpbCkg eworCQlEVUtfREREKERVS19ERERQUklOVCgiZnVuY3Rpb24gaXMgbm90YWlsIC0+IHNldCBOT1RB SUwiKSk7CisJCURVS19IT0JKRUNUX1NFVF9OT1RBSUwoKGR1a19ob2JqZWN0ICopIGhfcmVzKTsK Kwl9CisKKwlpZiAoZnVuYy0+aXNfY29uc3RydWN0YWJsZSkgeworCQlEVUtfREREKERVS19ERERQ UklOVCgiZnVuY3Rpb24gaXMgY29uc3RydWN0YWJsZSAtPiBzZXQgQ09OU1RSVUNUQUJMRSIpKTsK KwkJRFVLX0hPQkpFQ1RfU0VUX0NPTlNUUlVDVEFCTEUoKGR1a19ob2JqZWN0ICopIGhfcmVzKTsK Kwl9CisKKwkvKgorCSAqICBCdWlsZCBmdW5jdGlvbiBmaXhlZCBzaXplICdkYXRhJyBidWZmZXIs IHdoaWNoIGNvbnRhaW5zIGJ5dGVjb2RlLAorCSAqICBjb25zdGFudHMsIGFuZCBpbm5lciBmdW5j dGlvbiByZWZlcmVuY2VzLgorCSAqCisJICogIER1cmluZyB0aGUgYnVpbGRpbmcgcGhhc2UgJ2Rh dGEnIGlzIHJlYWNoYWJsZSBidXQgaW5jb21wbGV0ZS4KKwkgKiAgT25seSBpbmNyZWYncyBvY2N1 ciBkdXJpbmcgYnVpbGRpbmcgKG5vIHJlZnplcm8gb3IgR0MgaGFwcGVucyksCisJICogIHNvIHRo ZSBidWlsZGluZyBwcm9jZXNzIGlzIGF0b21pYy4KKwkgKi8KKworCWNvbnN0c19jb3VudCA9IGR1 a19ob2JqZWN0X2dldF9sZW5ndGgodGhyLCBmdW5jLT5oX2NvbnN0cyk7CisJZnVuY3NfY291bnQg PSBkdWtfaG9iamVjdF9nZXRfbGVuZ3RoKHRociwgZnVuYy0+aF9mdW5jcykgLyAzOworCWNvZGVf Y291bnQgPSBEVUtfQldfR0VUX1NJWkUodGhyLCAmZnVuYy0+YndfY29kZSkgLyBzaXplb2YoZHVr X2NvbXBpbGVyX2luc3RyKTsKKwljb2RlX3NpemUgPSBjb2RlX2NvdW50ICogc2l6ZW9mKGR1a19p bnN0cl90KTsKKworCWRhdGFfc2l6ZSA9IGNvbnN0c19jb3VudCAqIHNpemVvZihkdWtfdHZhbCkg KworCSAgICAgICAgICAgIGZ1bmNzX2NvdW50ICogc2l6ZW9mKGR1a19ob2JqZWN0ICopICsKKwkg ICAgICAgICAgICBjb2RlX3NpemU7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiY29uc3RzX2Nv dW50PSVsZCwgZnVuY3NfY291bnQ9JWxkLCBjb2RlX3NpemU9JWxkIC0+ICIKKwkgICAgICAgICAg ICAgICAgICAgICAiZGF0YV9zaXplPSVsZColbGQgKyAlbGQqJWxkICsgJWxkID0gJWxkIiwKKwkg ICAgICAgICAgICAgICAgICAgICAobG9uZykgY29uc3RzX2NvdW50LCAobG9uZykgZnVuY3NfY291 bnQsIChsb25nKSBjb2RlX3NpemUsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbnN0 c19jb3VudCwgKGxvbmcpIHNpemVvZihkdWtfdHZhbCksCisJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIGZ1bmNzX2NvdW50LCAobG9uZykgc2l6ZW9mKGR1a19ob2JqZWN0ICopLAorCSAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBjb2RlX3NpemUsIChsb25nKSBkYXRhX3NpemUpKTsKKwor CWR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8odGhyLCBkYXRhX3NpemUpOworCWhfZGF0YSA9 IChkdWtfaGJ1ZmZlcl9maXhlZCAqKSAodm9pZCAqKSBkdWtfa25vd25faGJ1ZmZlcih0aHIsIC0x KTsKKworCURVS19IQ09NUEZVTkNfU0VUX0RBVEEodGhyLT5oZWFwLCBoX3JlcywgKGR1a19oYnVm ZmVyICopIGhfZGF0YSk7CisJRFVLX0hFQVBIRFJfSU5DUkVGKHRociwgaF9kYXRhKTsKKworCXBf Y29uc3QgPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgRFVLX0hCVUZGRVJfRklYRURfR0VUX0RBVEFf UFRSKHRoci0+aGVhcCwgaF9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uc3RzX2NvdW50OyBp KyspIHsKKwkJRFVLX0FTU0VSVChpIDw9IERVS19VQVJSSURYX01BWCk7ICAvKiBjb25zdCBsaW1p dHMgKi8KKwkJdHYgPSBkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2FycmF5X2VudHJ5X3R2YWxf cHRyKHRoci0+aGVhcCwgZnVuYy0+aF9jb25zdHMsIChkdWtfdWFycmlkeF90KSBpKTsKKwkJRFVL X0FTU0VSVCh0diAhPSBOVUxMKTsKKwkJRFVLX1RWQUxfU0VUX1RWQUwocF9jb25zdCwgdHYpOwor CQlwX2NvbnN0Kys7CisJCURVS19UVkFMX0lOQ1JFRih0aHIsIHR2KTsgIC8qIG1heSBiZSBhIHN0 cmluZyBjb25zdGFudCAqLworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJjb25zdGFudDogJSFU IiwgKGR1a190dmFsICopIHR2KSk7CisJfQorCisJcF9mdW5jID0gKGR1a19ob2JqZWN0ICoqKSBw X2NvbnN0OworCURVS19IQ09NUEZVTkNfU0VUX0ZVTkNTKHRoci0+aGVhcCwgaF9yZXMsIHBfZnVu Yyk7CisJZm9yIChpID0gMDsgaSA8IGZ1bmNzX2NvdW50OyBpKyspIHsKKwkJZHVrX2hvYmplY3Qg Kmg7CisJCURVS19BU1NFUlQoaSAqIDMgPD0gRFVLX1VBUlJJRFhfTUFYKTsgIC8qIGZ1bmMgbGlt aXRzICovCisJCXR2ID0gZHVrX2hvYmplY3RfZmluZF9leGlzdGluZ19hcnJheV9lbnRyeV90dmFs X3B0cih0aHItPmhlYXAsIGZ1bmMtPmhfZnVuY3MsIChkdWtfdWFycmlkeF90KSAoaSAqIDMpKTsK KwkJRFVLX0FTU0VSVCh0diAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19PQkpF Q1QodHYpKTsKKwkJaCA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCQlEVUtfQVNTRVJUKGgg IT0gTlVMTCk7CisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoaCkpOworCQkq cF9mdW5jKysgPSBoOworCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBoKTsKKworCQlEVUtfRERE KERVS19ERERQUklOVCgiaW5uZXIgZnVuY3Rpb246ICVwIC0+ICUhaU8iLAorCQkgICAgICAgICAg ICAgICAgICAgICAodm9pZCAqKSBoLCAoZHVrX2hlYXBoZHIgKikgaCkpOworCX0KKworCXBfaW5z dHIgPSAoZHVrX2luc3RyX3QgKikgcF9mdW5jOworCURVS19IQ09NUEZVTkNfU0VUX0JZVEVDT0RF KHRoci0+aGVhcCwgaF9yZXMsIHBfaW5zdHIpOworCisJLyogY29weSBieXRlY29kZSBpbnN0cnVj dGlvbnMgb25lIGF0IGEgdGltZSAqLworCXFfaW5zdHIgPSAoZHVrX2NvbXBpbGVyX2luc3RyICop ICh2b2lkICopIERVS19CV19HRVRfQkFTRVBUUih0aHIsICZmdW5jLT5id19jb2RlKTsKKwlmb3Ig KGkgPSAwOyBpIDwgY29kZV9jb3VudDsgaSsrKSB7CisJCXBfaW5zdHJbaV0gPSBxX2luc3RyW2ld LmluczsKKwl9CisJLyogTm90ZTogJ3FfaW5zdHInIGlzIHN0aWxsIHVzZWQgYmVsb3cgKi8KKwor CURVS19BU1NFUlQoKGR1a191aW50OF90ICopIChwX2luc3RyICsgY29kZV9jb3VudCkgPT0gRFVL X0hCVUZGRVJfRklYRURfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgaF9kYXRhKSArIGRhdGFfc2l6 ZSk7CisKKwlkdWtfcG9wKHRocik7ICAvKiAnZGF0YScgKGFuZCBldmVyeXRoaW5nIGluIGl0KSBp cyByZWFjaGFibGUgdGhyb3VnaCBoX3JlcyBub3cgKi8KKworCS8qCisJICogIEluaXQgbm9uLXBy b3BlcnR5IHJlc3VsdCBmaWVsZHMKKwkgKgorCSAqICAnbnJlZ3MnIGNvbnRyb2xzIGhvdyBsYXJn ZSBhIHJlZ2lzdGVyIGZyYW1lIGlzIGFsbG9jYXRlZC4KKwkgKgorCSAqICAnbmFyZ3MnIGNvbnRy b2xzIGhvdyBtYW55IGZvcm1hbCBhcmd1bWVudHMgYXJlIHdyaXR0ZW4gdG8gcmVnaXN0ZXJzOgor CSAqICByMCwgLi4uIHIobmFyZ3MtMSkuICBUaGUgcmVtYWluaW5nIHJlZ2lzdGVycyBhcmUgaW5p dGlhbGl6ZWQgdG8KKwkgKiAgdW5kZWZpbmVkLgorCSAqLworCisJRFVLX0FTU0VSVChmdW5jLT50 ZW1wX21heCA+PSAwKTsKKwloX3Jlcy0+bnJlZ3MgPSAoZHVrX3VpbnQxNl90KSBmdW5jLT50ZW1w X21heDsKKwloX3Jlcy0+bmFyZ3MgPSAoZHVrX3VpbnQxNl90KSBkdWtfaG9iamVjdF9nZXRfbGVu Z3RoKHRociwgZnVuYy0+aF9hcmduYW1lcyk7CisJRFVLX0FTU0VSVChoX3Jlcy0+bnJlZ3MgPj0g aF9yZXMtPm5hcmdzKTsgIC8qIHBhc3MyIGFsbG9jYXRpb24gaGFuZGxlcyB0aGlzICovCisjaWYg ZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJaF9yZXMtPnN0YXJ0X2xpbmUgPSAo ZHVrX3VpbnQzMl90KSBmdW5jLT5taW5fbGluZTsKKwloX3Jlcy0+ZW5kX2xpbmUgPSAoZHVrX3Vp bnQzMl90KSBmdW5jLT5tYXhfbGluZTsKKyNlbmRpZgorCisJLyoKKwkgKiAgSW5pdCBvYmplY3Qg cHJvcGVydGllcworCSAqCisJICogIFByb3BlcnRpZXMgc2hvdWxkIGJlIGFkZGVkIGluIGRlY3Jl YXNpbmcgb3JkZXIgb2YgYWNjZXNzIGZyZXF1ZW5jeS4KKwkgKiAgKE5vdCB2ZXJ5IGNyaXRpY2Fs IGZvciBmdW5jdGlvbiB0ZW1wbGF0ZXMuKQorCSAqLworCisJRFVLX0RERChEVUtfREREUFJJTlQo ImluaXQgZnVuY3Rpb24gcHJvcGVydGllcyIpKTsKKworCS8qIFsgLi4uIHJlcyBdICovCisKKwkv KiBfVmFybWFwOiBvbWl0dGVkIGlmIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgbm90IHRvIGRvIGEg c2xvdyBwYXRoCisJICogaWRlbnRpZmllciBhY2Nlc3MgdGhhdCBtaWdodCBiZSBjYXVnaHQgYnkg bG9jYWxseSBkZWNsYXJlZCB2YXJpYWJsZXMuCisJICogVGhlIHZhcm1hcCBjYW4gYWxzbyBiZSBv bWl0dGVkIGlmIGl0IHR1cm5zIG91dCBlbXB0eSBvZiBhY3R1YWwKKwkgKiByZWdpc3RlciBtYXBw aW5ncyBhZnRlciBhIGNsZWFudXAuICBXaGVuIGRlYnVnZ2luZyBpcyBlbmFibGVkLCB3ZQorCSAq IGFsd2F5cyBuZWVkIHRoZSB2YXJtYXAgdG8gYmUgYWJsZSB0byBsb29rdXAgdmFyaWFibGVzIGF0 IGFueSBwb2ludC4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JU KQorCURVS19ERChEVUtfRERQUklOVCgia2VlcGluZyBfVmFybWFwIGJlY2F1c2UgZGVidWdnZXIg c3VwcG9ydCBpcyBlbmFibGVkIikpOworCWtlZXBfdmFybWFwID0gMTsKKyNlbHNlCisJaWYgKGZ1 bmMtPmlkX2FjY2Vzc19zbG93X293biB8fCAgIC8qIGRpcmVjdGx5IHVzZXMgc2xvdyBhY2Nlc3Nl cyB0aGF0IG1heSBtYXRjaCBvd24gdmFyaWFibGVzICovCisJICAgIGZ1bmMtPmlkX2FjY2Vzc19h cmd1bWVudHMgfHwgIC8qIGFjY2Vzc2VzICdhcmd1bWVudHMnIGRpcmVjdGx5ICovCisJICAgIGZ1 bmMtPm1heV9kaXJlY3RfZXZhbCB8fCAgICAgIC8qIG1heSBpbmRpcmVjdGx5IHNsb3cgYWNjZXNz IHRocm91Z2ggYSBkaXJlY3QgZXZhbCAqLworCSAgICBmdW5jc19jb3VudCA+IDApIHsgICAgICAg ICAgICAvKiBoYXMgaW5uZXIgZnVuY3Rpb25zIHdoaWNoIG1heSBzbG93IGFjY2VzcyAoWFhYOiB0 aGlzIGNhbiBiZSBvcHRpbWl6ZWQgYnkgbG9va2luZyBhdCB0aGUgaW5uZXIgZnVuY3Rpb25zKSAq LworCQlEVUtfREQoRFVLX0REUFJJTlQoImtlZXBpbmcgX1Zhcm1hcCBiZWNhdXNlIG9mIGRpcmVj dCBldmFsLCBzbG93IHBhdGggYWNjZXNzIHRoYXQgbWF5IG1hdGNoIGxvY2FsIHZhcmlhYmxlcywg b3IgcHJlc2VuY2Ugb2YgaW5uZXIgZnVuY3Rpb25zIikpOworCQlrZWVwX3Zhcm1hcCA9IDE7CisJ fSBlbHNlIHsKKwkJRFVLX0REKERVS19ERFBSSU5UKCJkcm9wcGluZyBfVmFybWFwIikpOworCQlr ZWVwX3Zhcm1hcCA9IDA7CisJfQorI2VuZGlmCisKKwlpZiAoa2VlcF92YXJtYXApIHsKKwkJZHVr X2ludF90IG51bV91c2VkOworCQlkdWtfZHVwKHRociwgZnVuYy0+dmFybWFwX2lkeCk7CisJCW51 bV91c2VkID0gZHVrX19jbGVhbnVwX3Zhcm1hcChjb21wX2N0eCk7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJjbGVhbmVkIHVwIHZhcm1hcDogJSFUIChudW1fdXNlZD0lbGQpIiwKKwkJICAgICAg ICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwgKGxvbmcp IG51bV91c2VkKSk7CisKKwkJaWYgKG51bV91c2VkID4gMCkgeworCQkJZHVrX3hkZWZfcHJvcF9z dHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfVkFSTUFQLCBEVUtfUFJPUERFU0Nf RkxBR1NfTk9ORSk7CisJCX0gZWxzZSB7CisJCQlEVUtfREQoRFVLX0REUFJJTlQoInZhcm1hcCBp cyBlbXB0eSBhZnRlciBjbGVhbnVwIC0+IG5vIG5lZWQgdG8gYWRkIikpOworCQkJZHVrX3BvcCh0 aHIpOworCQl9CisJfQorCisJLyogX0Zvcm1hbHM6IG9taXR0ZWQgaWYgZnVuY3Rpb24gaXMgZ3Vh cmFudGVlZCBub3QgdG8gbmVlZCBhIChub24tc3RyaWN0KQorCSAqIGFyZ3VtZW50cyBvYmplY3Qs IGFuZCBfRm9ybWFscy5sZW5ndGggbWF0Y2hlcyBuYXJncyBleGFjdGx5LgorCSAqCisJICogTm9u LWFycm93IGZ1bmN0aW9ucyBjYW4ndCBzZWUgYW4gb3V0ZXIgZnVuY3Rpb24ncyAnYXJndW1lbnQn IGJpbmRpbmcKKwkgKiAoYmVjYXVzZSB0aGV5IGhhdmUgdGhlaXIgb3duKSwgYnV0IGFycm93IGZ1 bmN0aW9ucyBjYW4uICBXaGVuIGFycm93CisJICogZnVuY3Rpb25zIGFyZSBhZGRlZCwgdGhpcyBj b25kaXRpb24gd291bGQgbmVlZCB0byBiZSBhZGRlZDoKKwkgKiAgICAgaW5uZXJfYXJyb3dfZnVu Y3NfY291bnQgPiAwICAgaW5uZXIgYXJyb3cgZnVuY3Rpb25zIG1heSBhY2Nlc3MgJ2FyZ3VtZW50 cycKKwkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlEVUtfREQo RFVLX0REUFJJTlQoImtlZXBpbmcgX0Zvcm1hbHMgYmVjYXVzZSBkZWJ1Z2dlciBzdXBwb3J0IGlz IGVuYWJsZWQiKSk7CisJa2VlcF9mb3JtYWxzID0gMTsKKyNlbHNlCisJZm9ybWFsc19sZW5ndGgg PSBkdWtfZ2V0X2xlbmd0aCh0aHIsIGZ1bmMtPmFyZ25hbWVzX2lkeCk7CisJaWYgKGZvcm1hbHNf bGVuZ3RoICE9IChkdWtfc2l6ZV90KSBoX3Jlcy0+bmFyZ3MpIHsKKwkJLyogTmFyZ3Mgbm90IGVu b3VnaCBmb3IgY2xvc3VyZSAubGVuZ3RoOiBrZWVwIF9Gb3JtYWxzIHJlZ2FyZGxlc3MKKwkJICog b2YgaXRzIGxlbmd0aC4gIFNob3VsZG4ndCBoYXBwZW4gaW4gcHJhY3RpY2UgYXQgdGhlIG1vbWVu dC4KKwkJICovCisJCURVS19ERChEVUtfRERQUklOVCgia2VlcGluZyBfRm9ybWFscyBiZWNhdXNl IF9Gb3JtYWxzLmxlbmd0aCAhPSBuYXJncyIpKTsKKwkJa2VlcF9mb3JtYWxzID0gMTsKKwl9IGVs c2UgaWYgKChmdW5jLT5pZF9hY2Nlc3NfYXJndW1lbnRzIHx8IGZ1bmMtPm1heV9kaXJlY3RfZXZh bCkgJiYKKwkgICAgICAgICAgIChmb3JtYWxzX2xlbmd0aCA+IDApKSB7CisJCS8qIERpcmVjdCBl dmFsIChtYXkgYWNjZXNzICdhcmd1bWVudHMnKSBvciBhY2Nlc3NlcyAnYXJndW1lbnRzJworCQkg KiBleHBsaWNpdGx5OiBrZWVwIF9Gb3JtYWxzIHVubGVzcyBpdCBpcyB6ZXJvIGxlbmd0aC4KKwkJ ICovCisJCURVS19ERChEVUtfRERQUklOVCgia2VlcGluZyBfRm9ybWFscyBiZWNhdXNlIG9mIGRp cmVjdCBldmFsIG9yIGV4cGxpY2l0IGFjY2VzcyB0byAnYXJndW1lbnRzJywgYW5kIF9Gb3JtYWxz Lmxlbmd0aCAhPSAwIikpOworCQlrZWVwX2Zvcm1hbHMgPSAxOworCX0gZWxzZSB7CisJCURVS19E RChEVUtfRERQUklOVCgib21pdHRpbmcgX0Zvcm1hbHMsIG5hcmdzIG1hdGNoZXMgX0Zvcm1hbHMu bGVuZ3RoLCBzbyBubyBwcm9wZXJ0aWVzIGFkZGVkIikpOworCQlrZWVwX2Zvcm1hbHMgPSAwOwor CX0KKyNlbmRpZgorCisJaWYgKGtlZXBfZm9ybWFscykgeworCQlkdWtfZHVwKHRociwgZnVuYy0+ YXJnbmFtZXNfaWR4KTsKKwkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVL X1NUUklEWF9JTlRfRk9STUFMUywgRFVLX1BST1BERVNDX0ZMQUdTX05PTkUpOworCX0KKworCS8q IG5hbWUgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRlVOQ19OQU1FX1BST1BFUlRZKQorCWlmIChm dW5jLT5oX25hbWUpIHsKKwkJZHVrX3B1c2hfaHN0cmluZyh0aHIsIGZ1bmMtPmhfbmFtZSk7CisJ CURVS19ERChEVUtfRERQUklOVCgic2V0dGluZyBmdW5jdGlvbiB0ZW1wbGF0ZSAubmFtZSB0byAl IVQiLCBkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hv cnQodGhyLCAtMiwgRFVLX1NUUklEWF9OQU1FLCBEVUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7CisJ fQorI2VuZGlmICAvKiBEVUtfVVNFX0ZVTkNfTkFNRV9QUk9QRVJUWSAqLworCisJLyogX1NvdXJj ZSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9OT05TVERfRlVOQ19TT1VSQ0VfUFJPUEVSVFkpCisJ aWYgKDApIHsKKwkJLyogWFhYOiBDdXJyZW50bHkgZnVuY3Rpb24gc291cmNlIGNvZGUgaXMgbm90 IHN0b3JlZCwgYXMgaXQgaXMgbm90CisJCSAqIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC4gIFNv dXJjZSBjb2RlIHNob3VsZCBub3QgYmUgc3RvcmVkIGJ5CisJCSAqIGRlZmF1bHQgKHVzZXIgc2hv dWxkIGVuYWJsZSBpdCBleHBsaWNpdGx5KSwgYW5kIHRoZSBzb3VyY2Ugc2hvdWxkCisJCSAqIHBy b2JhYmx5IGJlIGNvbXByZXNzZWQgd2l0aCBhIHRyaXZpYWwgdGV4dCBjb21wcmVzc29yOyBhdmVy YWdlCisJCSAqIGNvbXByZXNzaW9uIG9mIDIwLTMwJSBpcyBxdWl0ZSBlYXN5IHRvIGFjaGlldmUg ZXZlbiB3aXRoIGEgdHJpdmlhbAorCQkgKiBjb21wcmVzc29yIChSTEUgKyBiYWNrd2FyZHMgbG9v a3VwKS4KKwkJICoKKwkJICogRGVidWdnaW5nIG5lZWRzIHNvdXJjZSBjb2RlIHRvIGJlIHVzZWZ1 bDogc29tZXRpbWVzIGlucHV0IGNvZGUgaXMKKwkJICogbm90IGZvdW5kIGluIGZpbGVzIGFzIGl0 IG1heSBiZSBnZW5lcmF0ZWQgYW5kIHRoZW4gZXZhbCgpJ2QsIGdpdmVuCisJCSAqIGJ5IGR5bmFt aWMgQyBjb2RlLCBldGMuCisJCSAqCisJCSAqIE90aGVyIGlzc3VlczoKKwkJICoKKwkJICogICAt IE5lZWQgdG9rZW5pemVyIGluZGljZXMgZm9yIHN0YXJ0IGFuZCBlbmQgdG8gc3Vic3RyaW5nCisJ CSAqICAgLSBBbHdheXMgbm9ybWFsaXplIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHBhcnQ/CisJCSAq ICAgLSBJZiB3ZSBrZWVwIF9Gb3JtYWxzLCBvbmx5IG5lZWQgdG8gc3RvcmUgYm9keQorCQkgKi8K KworCQkvKgorCQkgKiAgRm9yIGdsb2JhbCBvciBldmFsIGNvZGUgdGhpcyBpcyBzdHJhaWdodGZv cndhcmQuICBGb3IgZnVuY3Rpb25zCisJCSAqICBjcmVhdGVkIHdpdGggdGhlIEZ1bmN0aW9uIGNv bnN0cnVjdG9yIHdlIG9ubHkgZ2V0IHRoZSBzb3VyY2UgZm9yCisJCSAqICB0aGUgYm9keSBhbmQg bXVzdCBtYW51ZmFjdHVyZSB0aGUgImZ1bmN0aW9uIC4uLiIgcGFydC4KKwkJICoKKwkJICogIEZv ciBpbnN0YW5jZSwgZm9yIGNvbnN0cnVjdGVkIGZ1bmN0aW9ucyAodjgpOgorCQkgKgorCQkgKiAg ICA+IGEgPSBuZXcgRnVuY3Rpb24oImZvbyIsICJiYXIiLCAicHJpbnQoZm9vKSIpOworCQkgKiAg ICBbRnVuY3Rpb25dCisJCSAqICAgID4gYS50b1N0cmluZygpCisJCSAqICAgICdmdW5jdGlvbiBh bm9ueW1vdXMoZm9vLGJhcikge1xucHJpbnQoZm9vKVxufScKKwkJICoKKwkJICogIFNpbWlsYXJs eSBmb3IgZS5nLiBnZXR0ZXJzICh2OCk6CisJCSAqCisJCSAqICAgID4geCA9IHsgZ2V0IGEoZm9v LGJhcikgeyBwcmludChmb28pOyB9IH0KKwkJICogICAgeyBhOiBbR2V0dGVyXSB9CisJCSAqICAg ID4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih4LCAnYScpLmdldC50b1N0cmluZygp CisJCSAqICAgICdmdW5jdGlvbiBhKGZvbyxiYXIpIHsgcHJpbnQoZm9vKTsgfScKKwkJICovCisK KyNpZiAwCisJCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiWFhYIik7CisJCWR1a194ZGVmX3Byb3Bf c3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfSU5UX1NPVVJDRSwgRFVLX1BST1BERVND X0ZMQUdTX05PTkUpOworI2VuZGlmCisJfQorI2VuZGlmICAvKiBEVUtfVVNFX05PTlNURF9GVU5D X1NPVVJDRV9QUk9QRVJUWSAqLworCisJLyogX1BjMmxpbmUgKi8KKyNpZiBkZWZpbmVkKERVS19V U0VfUEMyTElORSkKKwlpZiAoMSkgeworCQkvKgorCQkgKiAgU2l6ZS1vcHRpbWl6ZWQgcGMtPmxp bmUgbWFwcGluZy4KKwkJICovCisKKwkJRFVLX0FTU0VSVChjb2RlX2NvdW50IDw9IERVS19DT01Q SUxFUl9NQVhfQllURUNPREVfTEVOR1RIKTsKKwkJZHVrX2hvYmplY3RfcGMybGluZV9wYWNrKHRo ciwgcV9pbnN0ciwgKGR1a191aW50X2Zhc3QzMl90KSBjb2RlX2NvdW50KTsgIC8qIC0+IHB1c2hl cyBmaXhlZCBidWZmZXIgKi8KKwkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwg RFVLX1NUUklEWF9JTlRfUEMyTElORSwgRFVLX1BST1BERVNDX0ZMQUdTX05PTkUpOworCisJCS8q IFhYWDogaWYgYXNzZXJ0aW9ucyBlbmFibGVkLCB3YWxrIHRocm91Z2ggYWxsIHZhbGlkIFBDcwor CQkgKiBhbmQgY2hlY2sgbGluZSBtYXBwaW5nLgorCQkgKi8KKwl9CisjZW5kaWYgIC8qIERVS19V U0VfUEMyTElORSAqLworCisJLyogZmlsZU5hbWUgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRlVO Q19GSUxFTkFNRV9QUk9QRVJUWSkKKwlpZiAoY29tcF9jdHgtPmhfZmlsZW5hbWUpIHsKKwkJLyoK KwkJICogIFNvdXJjZSBmaWxlbmFtZSAob3IgZXF1aXZhbGVudCksIGZvciBpZGVudGlmeWluZyB0 aHJvd24gZXJyb3JzLgorCQkgKi8KKworCQlkdWtfcHVzaF9oc3RyaW5nKHRociwgY29tcF9jdHgt PmhfZmlsZW5hbWUpOworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0yLCBEVUtf U1RSSURYX0ZJTEVfTkFNRSwgRFVLX1BST1BERVNDX0ZMQUdTX05PTkUpOworCX0KKyNlbmRpZgor CisJRFVLX0REKERVS19ERFBSSU5UKCJjb252ZXJ0ZWQgZnVuY3Rpb246ICUhaXhUIiwKKwkgICAg ICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCisJ LyoKKwkgKiAgQ29tcGFjdCB0aGUgZnVuY3Rpb24gdGVtcGxhdGUuCisJICovCisKKwlkdWtfY29t cGFjdF9tMSh0aHIpOworCisJLyoKKwkgKiAgRGVidWcgZHVtcGluZworCSAqLworCisjaWYgZGVm aW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAmJiAoRFVLX1VTRV9ERUJVR19MRVZFTCA+PSAyKQor CXsKKwkJZHVrX2hjb21wZnVuYyAqaDsKKwkJZHVrX2luc3RyX3QgKnAsICpwX3N0YXJ0LCAqcF9l bmQ7CisKKwkJaCA9IChkdWtfaGNvbXBmdW5jICopIGR1a19nZXRfaG9iamVjdCh0aHIsIC0xKTsK KwkJcF9zdGFydCA9IChkdWtfaW5zdHJfdCAqKSBEVUtfSENPTVBGVU5DX0dFVF9DT0RFX0JBU0Uo dGhyLT5oZWFwLCBoKTsKKwkJcF9lbmQgPSAoZHVrX2luc3RyX3QgKikgRFVLX0hDT01QRlVOQ19H RVRfQ09ERV9FTkQodGhyLT5oZWFwLCBoKTsKKworCQlwID0gcF9zdGFydDsKKwkJd2hpbGUgKHAg PCBwX2VuZCkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIkJDICUwNGxkOiAlIUkgICAgICAg IDsgMHglMDhseCBvcD0lbGQgKCUhQykgYT0lbGQgYj0lbGQgYz0lbGQiLAorCQkJICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIChwIC0gcF9zdGFydCksCisJCQkgICAgICAgICAgICAgICAgICAg ICAoZHVrX2luc3RyX3QpICgqcCksCisJCQkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg bG9uZykgKCpwKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfREVDX09QKCpw KSwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfREVDX09QKCpwKSwKKwkJCSAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBEVUtfREVDX0EoKnApLAorCQkJICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIERVS19ERUNfQigqcCksCisJCQkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgRFVLX0RFQ19DKCpwKSkpOworCQkJcCsrOworCQl9CisJfQorI2VuZGlmCit9CisKKy8q CisgKiAgQ29kZSBlbWlzc2lvbiBoZWxwZXJzCisgKgorICogIFNvbWUgZW1pc3Npb24gaGVscGVy cyB1bmRlcnN0YW5kIHRoZSByYW5nZSBvZiB0YXJnZXQgYW5kIHNvdXJjZSByZWcvY29uc3QKKyAq ICB2YWx1ZXMgYW5kIGF1dG9tYXRpY2FsbHkgZW1pdCBzaHVmZmxpbmcgY29kZSBpZiBuZWNlc3Nh cnkuICBUaGlzIGlzIHRoZQorICogIGNhc2Ugd2hlbiB0aGUgc2xvdCBpbiBxdWVzdGlvbiAoQSwg QiwgQykgaXMgdXNlZCBpbiB0aGUgc3RhbmRhcmQgd2F5IGFuZAorICogIGZvciBvcGNvZGVzIHRo ZSBlbWlzc2lvbiBoZWxwZXJzIGV4cGxpY2l0bHkgdW5kZXJzdGFuZCAobGlrZSBEVUtfT1BfTVBV VE9CSikuCisgKgorICogIFRoZSBzdGFuZGFyZCB3YXkgaXMgdGhhdDoKKyAqICAgIC0gc2xvdCBB IGlzIGEgdGFyZ2V0IHJlZ2lzdGVyCisgKiAgICAtIHNsb3QgQiBpcyBhIHNvdXJjZSByZWdpc3Rl ci9jb25zdGFudAorICogICAgLSBzbG90IEMgaXMgYSBzb3VyY2UgcmVnaXN0ZXIvY29uc3RhbnQK KyAqCisgKiAgSWYgYSBzbG90IGlzIHVzZWQgaW4gYSBub24tc3RhbmRhcmQgd2F5IHRoZSBjYWxs ZXIgbXVzdCBpbmRpY2F0ZSB0aGlzCisgKiAgc29tZWhvdy4gIElmIGEgc2xvdCBpcyB1c2VkIGFz IGEgdGFyZ2V0IGluc3RlYWQgb2YgYSBzb3VyY2UgKG9yIHZpY2UKKyAqICB2ZXJzYSksIHRoaXMg Y2FuIGJlIGluZGljYXRlZCB3aXRoIGEgZmxhZyB0byB0cmlnZ2VyIHByb3BlciBzaHVmZmxpbmcK KyAqICAoZS5nLiBEVUtfX0VNSVRfRkxBR19CX0lTX1RBUkdFVCkuICBJZiB0aGUgdmFsdWUgaW4g dGhlIHNsb3QgaXMgbm90CisgKiAgcmVnaXN0ZXIvY29uc3QgcmVsYXRlZCBhdCBhbGwsIHRoZSBj YWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmF3IHZhbHVlCisgKiAgZml0cyBpbnRvIHRoZSBj b3JyZXNwb25kaW5nIHNsb3Qgc28gYXMgdG8gbm90IHRyaWdnZXIgc2h1ZmZsaW5nLiAgVGhlCisg KiAgY2FsbGVyIG11c3Qgc2V0IGEgIm5vIHNodWZmbGUiIGZsYWcgdG8gZW5zdXJlIGNvbXBpbGF0 aW9uIGZhaWxzIGlmCisgKiAgc2h1ZmZsaW5nIHdlcmUgdG8gYmUgdHJpZ2dlcmVkIGJlY2F1c2Ug b2YgYW4gaW50ZXJuYWwgZXJyb3IuCisgKgorICogIEZvciBzbG90cyBCIGFuZCBDIHRoZSByYXcg c2xvdCBzaXplIGlzIDkgYml0cyBidXQgb25lIGJpdCBpcyByZXNlcnZlZCBmb3IKKyAqICB0aGUg cmVnL2NvbnN0IGluZGljYXRvci4gIFRvIHVzZSB0aGUgZnVsbCA5LWJpdCByYW5nZSBmb3IgYSBy YXcgdmFsdWUsCisgKiAgc2h1ZmZsaW5nIG11c3QgYmUgZGlzYWJsZWQgd2l0aCB0aGUgRFVLX19F TUlUX0ZMQUdfTk9fU0hVRkZMRV97QixDfSBmbGFnLgorICogIFNodWZmbGluZyBpcyBvbmx5IGRv bmUgZm9yIEEsIEIsIGFuZCBDIHNsb3RzLCBub3QgdGhlIGxhcmdlciBCQyBvciBBQkMgc2xvdHMu CisgKgorICogIFRoZXJlIGlzIGNhbGwgaGFuZGxpbmcgc3BlY2lmaWMgdW5kZXJzdGFuZGluZyBp biB0aGUgQS1CLUMgZW1pdHRlciB0bworICogIGNvbnZlcnQgY2FsbCBzZXR1cCBhbmQgY2FsbCBp bnN0cnVjdGlvbnMgaW50byBpbmRpcmVjdCBvbmVzIGlmIG5lY2Vzc2FyeS4KKyAqLworCisvKiBD b2RlIGVtaXNzaW9uIGZsYWdzLCBwYXNzZWQgaW4gdGhlICdvcGNvZGUnIGZpZWxkLiAgT3Bjb2Rl ICsgZmxhZ3MKKyAqIGZpdCBpbnRvIDE2IGJpdHMgZm9yIG5vdywgc28gdXNlIGR1a19zbWFsbF91 aW50X3QuCisgKi8KKyNkZWZpbmUgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9BICAgICAgKDEg PDwgOCkKKyNkZWZpbmUgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9CICAgICAgKDEgPDwgOSkK KyNkZWZpbmUgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9DICAgICAgKDEgPDwgMTApCisjZGVm aW5lIERVS19fRU1JVF9GTEFHX0FfSVNfU09VUkNFICAgICAgICgxIDw8IDExKSAgLyogc2xvdCBB IGlzIGEgc291cmNlIChkZWZhdWx0OiB0YXJnZXQpICovCisjZGVmaW5lIERVS19fRU1JVF9GTEFH X0JfSVNfVEFSR0VUICAgICAgICgxIDw8IDEyKSAgLyogc2xvdCBCIGlzIGEgdGFyZ2V0IChkZWZh dWx0OiBzb3VyY2UpICovCisjZGVmaW5lIERVS19fRU1JVF9GTEFHX0NfSVNfVEFSR0VUICAgICAg ICgxIDw8IDEzKSAgLyogc2xvdCBDIGlzIGEgdGFyZ2V0IChkZWZhdWx0OiBzb3VyY2UpICovCisj ZGVmaW5lIERVS19fRU1JVF9GTEFHX0JDX1JFR0NPTlNUICAgICAgICgxIDw8IDE0KSAgLyogc2xv dHMgQiBhbmQgQyBhcmUgcmVnL2NvbnN0ICovCisjZGVmaW5lIERVS19fRU1JVF9GTEFHX1JFU0VS VkVfSlVNUFNMT1QgICgxIDw8IDE1KSAgLyogcmVzZXJ2ZSBhIGp1bXBzbG90IGFmdGVyIGluc3Ry IGJlZm9yZSB0YXJnZXQgc3BpbGxpbmcsIHVzZWQgZm9yIE5FWFRFTlVNICovCisKKy8qIFhYWDog bWFjcm8gc21hbGxlciB0aGFuIGNhbGw/ICovCitEVUtfTE9DQUwgZHVrX2ludF90IGR1a19fZ2V0 X2N1cnJlbnRfcGMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpIHsKKwlkdWtfY29tcGlsZXJf ZnVuYyAqZnVuYzsKKwlmdW5jID0gJmNvbXBfY3R4LT5jdXJyX2Z1bmM7CisJcmV0dXJuIChkdWtf aW50X3QpIChEVUtfQldfR0VUX1NJWkUoY29tcF9jdHgtPnRociwgJmZ1bmMtPmJ3X2NvZGUpIC8g c2l6ZW9mKGR1a19jb21waWxlcl9pbnN0cikpOworfQorCitEVUtfTE9DQUwgZHVrX2NvbXBpbGVy X2luc3RyICpkdWtfX2dldF9pbnN0cl9wdHIoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1 a19pbnRfdCBwYykgeworCURVS19BU1NFUlQocGMgPj0gMCk7CisJRFVLX0FTU0VSVCgoZHVrX3Np emVfdCkgcGMgPCAoZHVrX3NpemVfdCkgKERVS19CV19HRVRfU0laRShjb21wX2N0eC0+dGhyLCAm Y29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlKSAvIHNpemVvZihkdWtfY29tcGlsZXJfaW5zdHIp KSk7CisJcmV0dXJuICgoZHVrX2NvbXBpbGVyX2luc3RyICopICh2b2lkICopIERVS19CV19HRVRf QkFTRVBUUihjb21wX2N0eC0+dGhyLCAmY29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlKSkgKyBw YzsKK30KKworLyogZW1pdCBpbnN0cnVjdGlvbjsgY291bGQgcmV0dXJuIFBDIGJ1dCB0aGF0J3Mg bm90IG5lZWRlZCBpbiB0aGUgbWFqb3JpdHkKKyAqIG9mIGNhc2VzLgorICovCitEVUtfTE9DQUwg dm9pZCBkdWtfX2VtaXQoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pbnN0cl90IGlu cykgeworI2lmIGRlZmluZWQoRFVLX1VTRV9QQzJMSU5FKQorCWR1a19pbnRfdCBsaW5lOworI2Vu ZGlmCisJZHVrX2NvbXBpbGVyX2luc3RyICppbnN0cjsKKworCURVS19EREQoRFVLX0RERFBSSU5U KCJkdWtfX2VtaXQ6IDB4JTA4bHggY3Vycl90b2tlbi5zdGFydF9saW5lPSVsZCBwcmV2X3Rva2Vu LnN0YXJ0X2xpbmU9JWxkIHBjPSVsZCAtLT4gJSFJIiwKKwkgICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgaW5zLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBjb21wX2N0 eC0+Y3Vycl90b2tlbi5zdGFydF9saW5lLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBj b21wX2N0eC0+cHJldl90b2tlbi5zdGFydF9saW5lLAorCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KSwKKwkgICAgICAgICAgICAgICAgICAg ICAoZHVrX2luc3RyX3QpIGlucykpOworCisJaW5zdHIgPSAoZHVrX2NvbXBpbGVyX2luc3RyICop ICh2b2lkICopIERVS19CV19FTlNVUkVfR0VUUFRSKGNvbXBfY3R4LT50aHIsICZjb21wX2N0eC0+ Y3Vycl9mdW5jLmJ3X2NvZGUsIHNpemVvZihkdWtfY29tcGlsZXJfaW5zdHIpKTsKKwlEVUtfQldf QUREX1BUUihjb21wX2N0eC0+dGhyLCAmY29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlLCBzaXpl b2YoZHVrX2NvbXBpbGVyX2luc3RyKSk7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUEMyTElORSkK KwkvKiBUaGUgbGluZSBudW1iZXIgdHJhY2tpbmcgaXMgYSBiaXQgaW5jb25zaXN0ZW50IHJpZ2h0 IG5vdywgd2hpY2gKKwkgKiBhZmZlY3RzIGRlYnVnZ2VyIGFjY3VyYWN5LiAgTW9zdGx5IGNhbGwg c2l0ZXMgZW1pdCBvcGNvZGVzIHdoZW4KKwkgKiB0aGV5IGhhdmUgcGFyc2VkIGEgdG9rZW4gKHNh eSBhIHRlcm1pbmF0aW5nIHNlbWljb2xvbikgYW5kIGNhbGxlZAorCSAqIGR1a19fYWR2YW5jZSgp LiAgSW4gdGhpcyBjYXNlIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgcHJldmlvdXMKKwkgKiB0b2tl biBpcyB0aGUgbW9zdCBhY2N1cmF0ZSBvbmUgKGV4Y2VwdCBpbiBwcm9sb2d1ZSB3aGVyZQorCSAq IHByZXZfdG9rZW4uc3RhcnRfbGluZSBpcyAwKS4gIFRoaXMgaXMgcHJvYmFibHkgbm90IDEwMCUg Y29ycmVjdAorCSAqIHJpZ2h0IG5vdy4KKwkgKi8KKwkvKiBhcHByb3hpbWF0aW9uLCBjbG9zZSBl bm91Z2ggKi8KKwlsaW5lID0gY29tcF9jdHgtPnByZXZfdG9rZW4uc3RhcnRfbGluZTsKKwlpZiAo bGluZSA9PSAwKSB7CisJCWxpbmUgPSBjb21wX2N0eC0+Y3Vycl90b2tlbi5zdGFydF9saW5lOwor CX0KKyNlbmRpZgorCisJaW5zdHItPmlucyA9IGluczsKKyNpZiBkZWZpbmVkKERVS19VU0VfUEMy TElORSkKKwlpbnN0ci0+bGluZSA9IChkdWtfdWludDMyX3QpIGxpbmU7CisjZW5kaWYKKyNpZiBk ZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlpZiAobGluZSA8IGNvbXBfY3R4LT5j dXJyX2Z1bmMubWluX2xpbmUpIHsKKwkJY29tcF9jdHgtPmN1cnJfZnVuYy5taW5fbGluZSA9IGxp bmU7CisJfQorCWlmIChsaW5lID4gY29tcF9jdHgtPmN1cnJfZnVuYy5tYXhfbGluZSkgeworCQlj b21wX2N0eC0+Y3Vycl9mdW5jLm1heF9saW5lID0gbGluZTsKKwl9CisjZW5kaWYKKworCS8qIExp bWl0IGNoZWNrcyBmb3IgYnl0ZWNvZGUgYnl0ZSBzaXplIGFuZCBsaW5lIG51bWJlci4gKi8KKwlp ZiAoRFVLX1VOTElLRUxZKERVS19CV19HRVRfU0laRShjb21wX2N0eC0+dGhyLCAmY29tcF9jdHgt PmN1cnJfZnVuYy5id19jb2RlKSA+IERVS19VU0VfRVNCQ19NQVhfQllURVMpKSB7CisJCWdvdG8g ZmFpbF9iY19saW1pdDsKKwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX1BDMkxJTkUpICYmIGRlZmlu ZWQoRFVLX1VTRV9FU0JDX0xJTUlUUykKKyNpZiBkZWZpbmVkKERVS19VU0VfQlVGTEVOMTYpCisJ LyogQnVmZmVyIGxlbmd0aCBpcyBib3VuZGVkIHRvIDB4ZmZmZiBhdXRvbWF0aWNhbGx5LCBhdm9p ZCBjb21waWxlIHdhcm5pbmcuICovCisJaWYgKERVS19VTkxJS0VMWShsaW5lID4gRFVLX1VTRV9F U0JDX01BWF9MSU5FTlVNQkVSKSkgeworCQlnb3RvIGZhaWxfYmNfbGltaXQ7CisJfQorI2Vsc2UK KwlpZiAoRFVLX1VOTElLRUxZKGxpbmUgPiBEVUtfVVNFX0VTQkNfTUFYX0xJTkVOVU1CRVIpKSB7 CisJCWdvdG8gZmFpbF9iY19saW1pdDsKKwl9CisjZW5kaWYKKyNlbmRpZgorCisJcmV0dXJuOwor CisgIGZhaWxfYmNfbGltaXQ6CisJRFVLX0VSUk9SX1JBTkdFKGNvbXBfY3R4LT50aHIsIERVS19T VFJfQllURUNPREVfTElNSVQpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyog VXBkYXRlIGZ1bmN0aW9uIG1pbi9tYXggbGluZSBmcm9tIGN1cnJlbnQgdG9rZW4uICBOZWVkZWQg dG8gaW1wcm92ZQorICogZnVuY3Rpb24gbGluZSByYW5nZSBpbmZvcm1hdGlvbiBmb3IgZGVidWdn aW5nLCBzbyB0aGF0IGUuZy4gb3BlbmluZworICogY3VybHkgYnJhY2UgaXMgY292ZXJlZCBieSBs aW5lIHJhbmdlIGV2ZW4gd2hlbiBubyBvcGNvZGVzIGFyZSBlbWl0dGVkCisgKiBmb3IgdGhlIGxp bmUgY29udGFpbmluZyB0aGUgYnJhY2UuCisgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fdXBkYXRl X2xpbmVpbmZvX2N1cnJ0b2tlbihkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCkgeworI2lmIGRl ZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorCWR1a19pbnRfdCBsaW5lOworCisJbGlu ZSA9IGNvbXBfY3R4LT5jdXJyX3Rva2VuLnN0YXJ0X2xpbmU7CisJaWYgKGxpbmUgPT0gMCkgewor CQlyZXR1cm47CisJfQorCWlmIChsaW5lIDwgY29tcF9jdHgtPmN1cnJfZnVuYy5taW5fbGluZSkg eworCQljb21wX2N0eC0+Y3Vycl9mdW5jLm1pbl9saW5lID0gbGluZTsKKwl9CisJaWYgKGxpbmUg PiBjb21wX2N0eC0+Y3Vycl9mdW5jLm1heF9saW5lKSB7CisJCWNvbXBfY3R4LT5jdXJyX2Z1bmMu bWF4X2xpbmUgPSBsaW5lOworCX0KKyNlbHNlCisJRFVLX1VOUkVGKGNvbXBfY3R4KTsKKyNlbmRp ZgorfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfb3Bfb25seShkdWtfY29tcGlsZXJfY3R4 ICpjb21wX2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBvcCkgeworCWR1a19fZW1pdChjb21wX2N0eCwg RFVLX0VOQ19PUF9BQkMob3AsIDApKTsKK30KKworLyogSW1wb3J0YW50IG1haW4gcHJpbWl0aXZl LiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19lbWl0X2FfYl9jKGR1a19jb21waWxlcl9jdHggKmNv bXBfY3R4LCBkdWtfc21hbGxfdWludF90IG9wX2ZsYWdzLCBkdWtfcmVnY29uc3RfdCBhLCBkdWtf cmVnY29uc3RfdCBiLCBkdWtfcmVnY29uc3RfdCBjKSB7CisJZHVrX2luc3RyX3QgaW5zID0gMDsK KwlkdWtfaW50X3QgYV9vdXQgPSAtMTsKKwlkdWtfaW50X3QgYl9vdXQgPSAtMTsKKwlkdWtfaW50 X3QgY19vdXQgPSAtMTsKKwlkdWtfaW50X3QgdG1wOworCWR1a19zbWFsbF91aW50X3Qgb3AgPSBv cF9mbGFncyAmIDB4ZmZVOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImVtaXQ6IG9wX2ZsYWdz PSUwNGx4LCBhPSVsZCwgYj0lbGQsIGM9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAodW5z aWduZWQgbG9uZykgb3BfZmxhZ3MsIChsb25nKSBhLCAobG9uZykgYiwgKGxvbmcpIGMpKTsKKwor CS8qIFdlIGNvdWxkIHJlbHkgb24gbWF4IHRlbXAvY29uc3QgY2hlY2tzOiBpZiB0aGV5IGRvbid0 IGV4Y2VlZCBCQworCSAqIGxpbWl0LCBub3RoaW5nIGhlcmUgY2FuIGVpdGhlciAoanVzdCBhc3Nl cnRzIHdvdWxkIGJlIGVub3VnaCkuCisJICogQ3VycmVudGx5IHdlIGNoZWNrIGZvciB0aGUgbGlt aXRzLCB3aGljaCBwcm92aWRlcyBhZGRpdGlvbmFsCisJICogcHJvdGVjdGlvbiBhZ2FpbnN0IGNy ZWF0aW5nIGludmFsaWQgYnl0ZWNvZGUgZHVlIHRvIGNvbXBpbGVyCisJICogYnVncy4KKwkgKi8K KworCURVS19BU1NFUlRfRElTQUJMRSgob3BfZmxhZ3MgJiAweGZmKSA+PSBEVUtfQkNfT1BfTUlO KTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FTU0VSVCgob3BfZmxhZ3MgJiAweGZmKSA8PSBEVUtf QkNfT1BfTUFYKTsKKwlEVUtfQVNTRVJUKERVS19fSVNSRUcoYSkpOworCURVS19BU1NFUlQoYiAh PSAtMSk7ICAvKiBOb3QgJ25vbmUnLiAqLworCURVS19BU1NFUlQoYyAhPSAtMSk7ICAvKiBOb3Qg J25vbmUnLiAqLworCisJLyogSW5wdXQgc2h1ZmZsaW5nIGhhcHBlbnMgYmVmb3JlIHRoZSBhY3R1 YWwgb3BlcmF0aW9uLCB3aGlsZSBvdXRwdXQKKwkgKiBzaHVmZmxpbmcgaGFwcGVucyBhZnRlcndh cmRzLiAgT3V0cHV0IHNodWZmbGluZyBkZWNpc2lvbnMgYXJlIHN0aWxsCisJICogbWFkZSBhdCB0 aGUgc2FtZSB0aW1lIHRvIHJlZHVjZSBicmFuY2ggY2x1dHRlcjsgb3V0cHV0IHNodWZmbGUgZGVj aXNpb25zCisJICogYXJlIHJlY29yZGVkIGludG8gWF9vdXQgdmFyaWFibGVzLgorCSAqLworCisJ LyogU2xvdCBBOiBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgcmVnL2NvbnN0LiAqLworCisjaWYg ZGVmaW5lZChEVUtfVVNFX1NIVUZGTEVfVE9SVFVSRSkKKwlpZiAoYSA8PSBEVUtfQkNfQV9NQVgg JiYgKG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9BKSkgeworI2Vsc2UKKwlp ZiAoYSA8PSBEVUtfQkNfQV9NQVgpIHsKKyNlbmRpZgorCQk7CisJfSBlbHNlIGlmIChvcF9mbGFn cyAmIERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQSkgeworCQlEVUtfRChEVUtfRFBSSU5UKCJv dXQgb2YgcmVnczogJ2EnIChyZWcpIG5lZWRzIHNodWZmbGluZyBidXQgc2h1ZmZsZSBwcm9oaWJp dGVkLCBhOiAlbGQiLCAobG9uZykgYSkpOworCQlnb3RvIGVycm9yX291dG9mcmVnczsKKwl9IGVs c2UgaWYgKGEgPD0gRFVLX0JDX0JDX01BWCkgeworCQljb21wX2N0eC0+Y3Vycl9mdW5jLm5lZWRz X3NodWZmbGUgPSAxOworCQl0bXAgPSBjb21wX2N0eC0+Y3Vycl9mdW5jLnNodWZmbGUxOworCQlp ZiAob3BfZmxhZ3MgJiBEVUtfX0VNSVRfRkxBR19BX0lTX1NPVVJDRSkgeworCQkJZHVrX19lbWl0 KGNvbXBfY3R4LCBEVUtfRU5DX09QX0FfQkMoRFVLX09QX0xEUkVHLCB0bXAsIGEpKTsKKwkJfSBl bHNlIHsKKwkJCS8qIE91dHB1dCBzaHVmZmxlIG5lZWRlZCBhZnRlciBtYWluIG9wZXJhdGlvbiAq LworCQkJYV9vdXQgPSBhOworCisJCQkvKiBUaGUgRFVLX09QX0NTVkFSIG91dHB1dCBzaHVmZmxl IGFzc3VtZXMgc2h1ZmZsZSByZWdpc3RlcnMgYXJlCisJCQkgKiBjb25zZWN1dGl2ZS4KKwkJCSAq LworCQkJRFVLX0FTU0VSVCgoY29tcF9jdHgtPmN1cnJfZnVuYy5zaHVmZmxlMSA9PSAwICYmIGNv bXBfY3R4LT5jdXJyX2Z1bmMuc2h1ZmZsZTIgPT0gMCkgfHwKKwkJCSAgICAgICAgICAgKGNvbXBf Y3R4LT5jdXJyX2Z1bmMuc2h1ZmZsZTIgPT0gY29tcF9jdHgtPmN1cnJfZnVuYy5zaHVmZmxlMSAr IDEpKTsKKwkJCWlmIChvcCA9PSBEVUtfT1BfQ1NWQVIpIHsKKwkJCQkvKiBGb3IgQ1NWQVIgdGhl IGxpbWl0IGlzIG9uZSBzbWFsbGVyIGJlY2F1c2Ugb3V0cHV0IHNodWZmbGUKKwkJCQkgKiBtdXN0 IGJlIGFibGUgdG8gZXhwcmVzcyAnYSArIDEnIGluIEJDLgorCQkJCSAqLworCQkJCWlmIChhICsg MSA+IERVS19CQ19CQ19NQVgpIHsKKwkJCQkJZ290byBlcnJvcl9vdXRvZnJlZ3M7CisJCQkJfQor CQkJfQorCQl9CisJCWEgPSB0bXA7CisJfSBlbHNlIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgib3V0 IG9mIHJlZ3M6ICdhJyAocmVnKSBuZWVkcyBzaHVmZmxpbmcgYnV0IGRvZXMgbm90IGZpdCBpbnRv IEJDLCBhOiAlbGQiLCAobG9uZykgYSkpOworCQlnb3RvIGVycm9yX291dG9mcmVnczsKKwl9CisK KwkvKiBTbG90IEI6IHJlZy9jb25zdCBzdXBwb3J0LCBtYXBwZWQgdG8gYml0IDAgb2Ygb3Bjb2Rl LiAqLworCisJaWYgKChiICYgRFVLX19DT05TVF9NQVJLRVIpICE9IDApIHsKKwkJRFVLX0FTU0VS VCgob3BfZmxhZ3MgJiBEVUtfX0VNSVRfRkxBR19OT19TSFVGRkxFX0IpID09IDApOworCQlEVUtf QVNTRVJUKChvcF9mbGFncyAmIERVS19fRU1JVF9GTEFHX0JfSVNfVEFSR0VUKSA9PSAwKTsKKwkJ YiA9IGIgJiB+RFVLX19DT05TVF9NQVJLRVI7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NIVUZGTEVf VE9SVFVSRSkKKwkJaWYgKDApIHsKKyNlbHNlCisJCWlmIChiIDw9IDB4ZmYpIHsKKyNlbmRpZgor CQkJaWYgKG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfQkNfUkVHQ09OU1QpIHsKKwkJCQkvKiBP cGNvZGUgZm9sbG93cyBCL0MgcmVnL2NvbnN0IGNvbnZlbnRpb24uICovCisJCQkJRFVLX0FTU0VS VCgob3AgJiAweDAxKSA9PSAwKTsKKwkJCQlpbnMgfD0gRFVLX0VOQ19PUF9BX0JfQygweDAxLCAw LCAwLCAwKTsgIC8qIGNvbnN0IGZsYWcgZm9yIEIgKi8KKwkJCX0gZWxzZSB7CisJCQkJRFVLX0Qo RFVLX0RQUklOVCgiQiBpcyBjb25zdCwgb3Bjb2RlIGlzIG5vdCBCL0MgcmVnL2NvbnN0OiAleCIs IG9wX2ZsYWdzKSk7CisJCQl9CisJCX0gZWxzZSBpZiAoYiA8PSBEVUtfQkNfQkNfTUFYKSB7CisJ CQljb21wX2N0eC0+Y3Vycl9mdW5jLm5lZWRzX3NodWZmbGUgPSAxOworCQkJdG1wID0gY29tcF9j dHgtPmN1cnJfZnVuYy5zaHVmZmxlMjsKKwkJCWR1a19fZW1pdChjb21wX2N0eCwgRFVLX0VOQ19P UF9BX0JDKERVS19PUF9MRENPTlNULCB0bXAsIGIpKTsKKwkJCWIgPSB0bXA7CisJCX0gZWxzZSB7 CisJCQlEVUtfRChEVUtfRFBSSU5UKCJvdXQgb2YgcmVnczogJ2InIChjb25zdCkgbmVlZHMgc2h1 ZmZsaW5nIGJ1dCBkb2VzIG5vdCBmaXQgaW50byBCQywgYjogJWxkIiwgKGxvbmcpIGIpKTsKKwkJ CWdvdG8gZXJyb3Jfb3V0b2ZyZWdzOworCQl9CisJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKERVS19V U0VfU0hVRkZMRV9UT1JUVVJFKQorCQlpZiAoYiA8PSAweGZmICYmIChvcF9mbGFncyAmIERVS19f RU1JVF9GTEFHX05PX1NIVUZGTEVfQikpIHsKKyNlbHNlCisJCWlmIChiIDw9IDB4ZmYpIHsKKyNl bmRpZgorCQkJOworCQl9IGVsc2UgaWYgKG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfTk9fU0hV RkZMRV9CKSB7CisJCQlpZiAoYiA+IERVS19CQ19CX01BWCkgeworCQkJCS8qIE5vdGU6IDB4ZmYg IT0gRFVLX0JDX0JfTUFYICovCisJCQkJRFVLX0QoRFVLX0RQUklOVCgib3V0IG9mIHJlZ3M6ICdi JyAocmVnKSBuZWVkcyBzaHVmZmxpbmcgYnV0IHNodWZmbGUgcHJvaGliaXRlZCwgYjogJWxkIiwg KGxvbmcpIGIpKTsKKwkJCQlnb3RvIGVycm9yX291dG9mcmVnczsKKwkJCX0KKwkJfSBlbHNlIGlm IChiIDw9IERVS19CQ19CQ19NQVgpIHsKKwkJCWNvbXBfY3R4LT5jdXJyX2Z1bmMubmVlZHNfc2h1 ZmZsZSA9IDE7CisJCQl0bXAgPSBjb21wX2N0eC0+Y3Vycl9mdW5jLnNodWZmbGUyOworCQkJaWYg KG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfQl9JU19UQVJHRVQpIHsKKwkJCQkvKiBPdXRwdXQg c2h1ZmZsZSBuZWVkZWQgYWZ0ZXIgbWFpbiBvcGVyYXRpb24gKi8KKwkJCQliX291dCA9IGI7CisJ CQl9CisJCQlpZiAoIShvcF9mbGFncyAmIERVS19fRU1JVF9GTEFHX0JfSVNfVEFSR0VUKSkgewor CQkJCWlmIChvcCA9PSBEVUtfT1BfTVBVVE9CSiB8fCBvcCA9PSBEVUtfT1BfTVBVVEFSUikgewor CQkJCQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBNUFVUT0JKL01QVVRBUlIgc2h1ZmZsaW5nLgor CQkJCQkgKiBGb3IgZWFjaCwgc2xvdCBCIGlkZW50aWZpZXMgdGhlIGZpcnN0IHJlZ2lzdGVyIG9m IGEgcmFuZ2UKKwkJCQkJICogb2YgcmVnaXN0ZXJzLCBzbyBub3JtYWwgc2h1ZmZsaW5nIHdvbid0 IHdvcmsuICBJbnN0ZWFkLAorCQkJCQkgKiBhbiBpbmRpcmVjdCB2ZXJzaW9uIG9mIHRoZSBvcGNv ZGUgaXMgdXNlZC4KKwkJCQkJICovCisJCQkJCURVS19BU1NFUlQoKG9wX2ZsYWdzICYgRFVLX19F TUlUX0ZMQUdfQl9JU19UQVJHRVQpID09IDApOworCQkJCQlkdWtfX2VtaXRfbG9hZF9pbnQzMl9u b3NodWZmbGUoY29tcF9jdHgsIHRtcCwgYik7CisJCQkJCURVS19BU1NFUlQoRFVLX09QX01QVVRP QkpJID09IERVS19PUF9NUFVUT0JKICsgMSk7CisJCQkJCURVS19BU1NFUlQoRFVLX09QX01QVVRB UlJJID09IERVS19PUF9NUFVUQVJSICsgMSk7CisJCQkJCW9wX2ZsYWdzKys7ICAvKiBpbmRpcmVj dCBvcGNvZGUgZm9sbG93cyBkaXJlY3QgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlkdWtfX2VtaXQo Y29tcF9jdHgsIERVS19FTkNfT1BfQV9CQyhEVUtfT1BfTERSRUcsIHRtcCwgYikpOworCQkJCX0K KwkJCX0KKwkJCWIgPSB0bXA7CisJCX0gZWxzZSB7CisJCQlEVUtfRChEVUtfRFBSSU5UKCJvdXQg b2YgcmVnczogJ2InIChyZWcpIG5lZWRzIHNodWZmbGluZyBidXQgZG9lcyBub3QgZml0IGludG8g QkMsIGI6ICVsZCIsIChsb25nKSBiKSk7CisJCQlnb3RvIGVycm9yX291dG9mcmVnczsKKwkJfQor CX0KKworCS8qIFNsb3QgQzogcmVnL2NvbnN0IHN1cHBvcnQsIG1hcHBlZCB0byBiaXQgMSBvZiBv cGNvZGUuICovCisKKwlpZiAoKGMgJiBEVUtfX0NPTlNUX01BUktFUikgIT0gMCkgeworCQlEVUtf QVNTRVJUKChvcF9mbGFncyAmIERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQykgPT0gMCk7CisJ CURVS19BU1NFUlQoKG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfQ19JU19UQVJHRVQpID09IDAp OworCQljID0gYyAmIH5EVUtfX0NPTlNUX01BUktFUjsKKyNpZiBkZWZpbmVkKERVS19VU0VfU0hV RkZMRV9UT1JUVVJFKQorCQlpZiAoMCkgeworI2Vsc2UKKwkJaWYgKGMgPD0gMHhmZikgeworI2Vu ZGlmCisJCQlpZiAob3BfZmxhZ3MgJiBEVUtfX0VNSVRfRkxBR19CQ19SRUdDT05TVCkgeworCQkJ CS8qIE9wY29kZSBmb2xsb3dzIEIvQyByZWcvY29uc3QgY29udmVudGlvbi4gKi8KKwkJCQlEVUtf QVNTRVJUKChvcCAmIDB4MDIpID09IDApOworCQkJCWlucyB8PSBEVUtfRU5DX09QX0FfQl9DKDB4 MDIsIDAsIDAsIDApOyAgLyogY29uc3QgZmxhZyBmb3IgQyAqLworCQkJfSBlbHNlIHsKKwkJCQlE VUtfRChEVUtfRFBSSU5UKCJDIGlzIGNvbnN0LCBvcGNvZGUgaXMgbm90IEIvQyByZWcvY29uc3Q6 ICV4Iiwgb3BfZmxhZ3MpKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjIDw9IERVS19CQ19CQ19NQVgp IHsKKwkJCWNvbXBfY3R4LT5jdXJyX2Z1bmMubmVlZHNfc2h1ZmZsZSA9IDE7CisJCQl0bXAgPSBj b21wX2N0eC0+Y3Vycl9mdW5jLnNodWZmbGUzOworCQkJZHVrX19lbWl0KGNvbXBfY3R4LCBEVUtf RU5DX09QX0FfQkMoRFVLX09QX0xEQ09OU1QsIHRtcCwgYykpOworCQkJYyA9IHRtcDsKKwkJfSBl bHNlIHsKKwkJCURVS19EKERVS19EUFJJTlQoIm91dCBvZiByZWdzOiAnYycgKGNvbnN0KSBuZWVk cyBzaHVmZmxpbmcgYnV0IGRvZXMgbm90IGZpdCBpbnRvIEJDLCBjOiAlbGQiLCAobG9uZykgYykp OworCQkJZ290byBlcnJvcl9vdXRvZnJlZ3M7CisJCX0KKwl9IGVsc2UgeworI2lmIGRlZmluZWQo RFVLX1VTRV9TSFVGRkxFX1RPUlRVUkUpCisJCWlmIChjIDw9IDB4ZmYgJiYgKG9wX2ZsYWdzICYg RFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9DKSkgeworI2Vsc2UKKwkJaWYgKGMgPD0gMHhmZikg eworI2VuZGlmCisJCQk7CisJCX0gZWxzZSBpZiAob3BfZmxhZ3MgJiBEVUtfX0VNSVRfRkxBR19O T19TSFVGRkxFX0MpIHsKKwkJCWlmIChjID4gRFVLX0JDX0NfTUFYKSB7CisJCQkJLyogTm90ZTog MHhmZiAhPSBEVUtfQkNfQ19NQVggKi8KKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJvdXQgb2YgcmVn czogJ2MnIChyZWcpIG5lZWRzIHNodWZmbGluZyBidXQgc2h1ZmZsZSBwcm9oaWJpdGVkLCBjOiAl bGQiLCAobG9uZykgYykpOworCQkJCWdvdG8gZXJyb3Jfb3V0b2ZyZWdzOworCQkJfQorCQl9IGVs c2UgaWYgKGMgPD0gRFVLX0JDX0JDX01BWCkgeworCQkJY29tcF9jdHgtPmN1cnJfZnVuYy5uZWVk c19zaHVmZmxlID0gMTsKKwkJCXRtcCA9IGNvbXBfY3R4LT5jdXJyX2Z1bmMuc2h1ZmZsZTM7CisJ CQlpZiAob3BfZmxhZ3MgJiBEVUtfX0VNSVRfRkxBR19DX0lTX1RBUkdFVCkgeworCQkJCS8qIE91 dHB1dCBzaHVmZmxlIG5lZWRlZCBhZnRlciBtYWluIG9wZXJhdGlvbiAqLworCQkJCWNfb3V0ID0g YzsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX19lbWl0KGNvbXBfY3R4LCBEVUtfRU5DX09QX0FfQkMo RFVLX09QX0xEUkVHLCB0bXAsIGMpKTsKKwkJCX0KKwkJCWMgPSB0bXA7CisJCX0gZWxzZSB7CisJ CQlEVUtfRChEVUtfRFBSSU5UKCJvdXQgb2YgcmVnczogJ2MnIChyZWcpIG5lZWRzIHNodWZmbGlu ZyBidXQgZG9lcyBub3QgZml0IGludG8gQkMsIGM6ICVsZCIsIChsb25nKSBjKSk7CisJCQlnb3Rv IGVycm9yX291dG9mcmVnczsKKwkJfQorCX0KKworCS8qIE1haW4gb3BlcmF0aW9uICovCisKKwlE VUtfQVNTRVJUKGEgPj0gRFVLX0JDX0FfTUlOKTsKKwlEVUtfQVNTRVJUKGEgPD0gRFVLX0JDX0Ff TUFYKTsKKwlEVUtfQVNTRVJUKGIgPj0gRFVLX0JDX0JfTUlOKTsKKwlEVUtfQVNTRVJUKGIgPD0g RFVLX0JDX0JfTUFYKTsKKwlEVUtfQVNTRVJUKGMgPj0gRFVLX0JDX0NfTUlOKTsKKwlEVUtfQVNT RVJUKGMgPD0gRFVLX0JDX0NfTUFYKTsKKworCWlucyB8PSBEVUtfRU5DX09QX0FfQl9DKG9wX2Zs YWdzICYgMHhmZiwgYSwgYiwgYyk7CisJZHVrX19lbWl0KGNvbXBfY3R4LCBpbnMpOworCisJLyog TkVYVEVOVU0gbmVlZHMgYSBqdW1wIHNsb3QgcmlnaHQgYWZ0ZXIgdGhlIG1haW4gaW5zdHJ1Y3Rp b24uCisJICogV2hlbiB0aGUgSlVNUCBpcyB0YWtlbiwgb3V0cHV0IHNwaWxsaW5nIGlzIG5vdCBu ZWVkZWQgc28gdGhpcworCSAqIHdvcmthcm91bmQgaXMgcG9zc2libGUuICBUaGUganVtcCBzbG90 IFBDIGlzIGV4Y2VwdGlvbmFsbHkKKwkgKiBwbHVtYmVkIHRocm91Z2ggY29tcF9jdHggdG8gbWlu aW1pemUgY2FsbCBzaXRlcy4KKwkgKi8KKwlpZiAob3BfZmxhZ3MgJiBEVUtfX0VNSVRfRkxBR19S RVNFUlZFX0pVTVBTTE9UKSB7CisJCWNvbXBfY3R4LT5lbWl0X2p1bXBzbG90X3BjID0gZHVrX19n ZXRfY3VycmVudF9wYyhjb21wX2N0eCk7CisJCWR1a19fZW1pdF9hYmMoY29tcF9jdHgsIERVS19P UF9KVU1QLCAwKTsKKwl9CisKKwkvKiBPdXRwdXQgc2h1ZmZsaW5nOiBvbmx5IG9uZSBvdXRwdXQg cmVnaXN0ZXIgaXMgcmVhbGlzdGljYWxseSBwb3NzaWJsZS4KKwkgKgorCSAqIChaZXJvIHdvdWxk IG5vcm1hbGx5IGJlIGFuIE9LIG1hcmtlciB2YWx1ZTogaWYgdGhlIHRhcmdldCByZWdpc3Rlcgor CSAqIHdhcyB6ZXJvLCBpdCB3b3VsZCBuZXZlciBiZSBzaHVmZmxlZC4gIEJ1dCB3aXRoIERVS19V U0VfU0hVRkZMRV9UT1JUVVJFCisJICogdGhpcyBpcyBubyBsb25nZXIgdHJ1ZSwgc28gdXNlIC0x IGFzIGEgbWFya2VyIGluc3RlYWQuKQorCSAqLworCisJaWYgKGFfb3V0ID49IDApIHsKKwkJRFVL X0FTU0VSVChiX291dCA8IDApOworCQlEVUtfQVNTRVJUKGNfb3V0IDwgMCk7CisJCWR1a19fZW1p dChjb21wX2N0eCwgRFVLX0VOQ19PUF9BX0JDKERVS19PUF9TVFJFRywgYSwgYV9vdXQpKTsKKwor CQlpZiAob3AgPT0gRFVLX09QX0NTVkFSKSB7CisJCQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBD U1ZBUiBzaHVmZmxpbmcuICBUaGUgdmFyaWFibGUgbG9va3VwCisJCQkgKiByZXN1bHRzIGluIGEg PHZhbHVlLCB0aGlzIGJpbmRpbmc+IHBhaXIgaW4gc3VjY2Vzc2l2ZQorCQkJICogcmVnaXN0ZXJz IHNvIHVzZSB0d28gc2h1ZmZsZSByZWdpc3RlcnMgYW5kIHR3byBvdXRwdXQKKwkJCSAqIGxvYWRz LiAgKEluIHByYWN0aWNlIHRoaXMgaXMgZGVhZCBjb2RlIGJlY2F1c2UgdGVtcC9jb25zdAorCQkJ ICogbGltaXQgaXMgcmVhY2hlZCBmaXJzdC4pCisJCQkgKi8KKwkJCWR1a19fZW1pdChjb21wX2N0 eCwgRFVLX0VOQ19PUF9BX0JDKERVS19PUF9TVFJFRywgYSArIDEsIGFfb3V0ICsgMSkpOworCQl9 CisJfSBlbHNlIGlmIChiX291dCA+PSAwKSB7CisJCURVS19BU1NFUlQoYV9vdXQgPCAwKTsKKwkJ RFVLX0FTU0VSVChjX291dCA8IDApOworCQlkdWtfX2VtaXQoY29tcF9jdHgsIERVS19FTkNfT1Bf QV9CQyhEVUtfT1BfU1RSRUcsIGIsIGJfb3V0KSk7CisJfSBlbHNlIGlmIChjX291dCA+PSAwKSB7 CisJCURVS19BU1NFUlQoYl9vdXQgPCAwKTsKKwkJRFVLX0FTU0VSVChjX291dCA8IDApOworCQlk dWtfX2VtaXQoY29tcF9jdHgsIERVS19FTkNfT1BfQV9CQyhEVUtfT1BfU1RSRUcsIGMsIGNfb3V0 KSk7CisJfQorCisJcmV0dXJuOworCisgZXJyb3Jfb3V0b2ZyZWdzOgorCURVS19FUlJPUl9SQU5H RShjb21wX2N0eC0+dGhyLCBEVUtfU1RSX1JFR19MSU1JVCk7CisJRFVLX1dPX05PUkVUVVJOKHJl dHVybjspOworfQorCisvKiBGb3IgbWFueSBvZiB0aGUgaGVscGVycyBiZWxvdyBpdCdkIGJlIHRl Y2huaWNhbGx5IGNvcnJlY3QgdG8gYWRkCisgKiAibm8gc2h1ZmZsZSIgZmxhZ3MgZm9yIHBhcmFt ZXRlcnMgcGFzc2VkIGluIGFzIHplcm8uICBGb3IgZXhhbXBsZSwKKyAqIGR1a19fZW1pdF9hX2Io KSBzaG91bGQgY2FsbCBkdWtfX2VtaXRfYV9iX2MoKSB3aXRoIEMgc2V0IHRvIDAsIGFuZAorICog RFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9DIGFkZGVkIHRvIG9wX2ZsYWdzLiAgSG93ZXZlciwg c2luY2UgdGhlCisgKiBDIHZhbHVlIGlzIDAsIGl0J2xsIG5ldmVyIGdldCBzaHVmZmxlZCBzbyBh ZGRpbmcgdGhlIGZsYWcgaXMganVzdAorICogdW5uZWNlc3NhcnkgYWRkaXRpb25hbCBjb2RlLiAg VGhpcyBpcyB1bmZvcnR1bmF0ZWx5IG5vdCB0cnVlIGZvcgorICogInNodWZmbGUgdG9ydHVyZSIg bW9kZSB3aGljaCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLgorICovCisKK0RVS19MT0NBTCB2b2lk IGR1a19fZW1pdF9hX2IoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19zbWFsbF91aW50 X3Qgb3BfZmxhZ3MsIGR1a19yZWdjb25zdF90IGEsIGR1a19yZWdjb25zdF90IGIpIHsKKyNpZiBk ZWZpbmVkKERVS19VU0VfU0hVRkZMRV9UT1JUVVJFKQorCW9wX2ZsYWdzIHw9IERVS19fRU1JVF9G TEFHX05PX1NIVUZGTEVfQzsKKyNlbmRpZgorCWR1a19fZW1pdF9hX2JfYyhjb21wX2N0eCwgb3Bf ZmxhZ3MsIGEsIGIsIDApOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfYl9jKGR1a19j b21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfc21hbGxfdWludF90IG9wX2ZsYWdzLCBkdWtfcmVn Y29uc3RfdCBiLCBkdWtfcmVnY29uc3RfdCBjKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NIVUZG TEVfVE9SVFVSRSkKKwlvcF9mbGFncyB8PSBEVUtfX0VNSVRfRkxBR19OT19TSFVGRkxFX0E7Cisj ZW5kaWYKKwlkdWtfX2VtaXRfYV9iX2MoY29tcF9jdHgsIG9wX2ZsYWdzLCAwLCBiLCBjKTsKK30K KworI2lmIDAgIC8qIHVudXNlZCAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19lbWl0X2EoZHVrX2Nv bXBpbGVyX2N0eCAqY29tcF9jdHgsIGludCBvcF9mbGFncywgaW50IGEpIHsKKyNpZiBkZWZpbmVk KERVS19VU0VfU0hVRkZMRV9UT1JUVVJFKQorCW9wX2ZsYWdzIHw9IERVS19fRU1JVF9GTEFHX05P X1NIVUZGTEVfQiB8IERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQzsKKyNlbmRpZgorCWR1a19f ZW1pdF9hX2JfYyhjb21wX2N0eCwgb3BfZmxhZ3MsIGEsIDAsIDApOworfQorI2VuZGlmCisKKyNp ZiAwICAvKiB1bnVzZWQgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fZW1pdF9iKGR1a19jb21waWxl cl9jdHggKmNvbXBfY3R4LCBkdWtfc21hbGxfdWludF90IG9wX2ZsYWdzLCBkdWtfcmVnY29uc3Rf dCBiKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NIVUZGTEVfVE9SVFVSRSkKKwlvcF9mbGFncyB8 PSBEVUtfX0VNSVRfRkxBR19OT19TSFVGRkxFX0EgfCBEVUtfX0VNSVRfRkxBR19OT19TSFVGRkxF X0M7CisjZW5kaWYKKwlkdWtfX2VtaXRfYV9iX2MoY29tcF9jdHgsIG9wX2ZsYWdzLCAwLCBiLCAw KTsKK30KKyNlbmRpZgorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfYV9iYyhkdWtfY29tcGls ZXJfY3R4ICpjb21wX2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBvcF9mbGFncywgZHVrX3JlZ2NvbnN0 X3QgYSwgZHVrX3JlZ2NvbnN0X3QgYmMpIHsKKwlkdWtfaW5zdHJfdCBpbnM7CisJZHVrX2ludF90 IHRtcDsKKworCS8qIGFsbG93IGNhbGxlciB0byBnaXZlIGEgY29uc3QgbnVtYmVyIHdpdGggdGhl IERVS19fQ09OU1RfTUFSS0VSICovCisJRFVLX0FTU0VSVChiYyAhPSAtMSk7ICAvKiBOb3QgJ25v bmUnLiAqLworCWJjID0gYmMgJiAofkRVS19fQ09OU1RfTUFSS0VSKTsKKworCURVS19BU1NFUlRf RElTQUJMRSgob3BfZmxhZ3MgJiAweGZmKSA+PSBEVUtfQkNfT1BfTUlOKTsgIC8qIHVuc2lnbmVk ICovCisJRFVLX0FTU0VSVCgob3BfZmxhZ3MgJiAweGZmKSA8PSBEVUtfQkNfT1BfTUFYKTsKKwlE VUtfQVNTRVJUKGJjID49IERVS19CQ19CQ19NSU4pOworCURVS19BU1NFUlQoYmMgPD0gRFVLX0JD X0JDX01BWCk7CisJRFVLX0FTU0VSVCgoYmMgJiBEVUtfX0NPTlNUX01BUktFUikgPT0gMCk7CisK KwlpZiAoYmMgPD0gRFVLX0JDX0JDX01BWCkgeworCQk7CisJfSBlbHNlIHsKKwkJLyogTm8gQkMg c2h1ZmZsaW5nIG5vdy4gKi8KKwkJZ290byBlcnJvcl9vdXRvZnJlZ3M7CisJfQorCisjaWYgZGVm aW5lZChEVUtfVVNFX1NIVUZGTEVfVE9SVFVSRSkKKwlpZiAoYSA8PSBEVUtfQkNfQV9NQVggJiYg KG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9BKSkgeworI2Vsc2UKKwlpZiAo YSA8PSBEVUtfQkNfQV9NQVgpIHsKKyNlbmRpZgorCQlpbnMgPSBEVUtfRU5DX09QX0FfQkMob3Bf ZmxhZ3MgJiAweGZmLCBhLCBiYyk7CisJCWR1a19fZW1pdChjb21wX2N0eCwgaW5zKTsKKwl9IGVs c2UgaWYgKG9wX2ZsYWdzICYgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9BKSB7CisJCWdvdG8g ZXJyb3Jfb3V0b2ZyZWdzOworCX0gZWxzZSBpZiAoKG9wX2ZsYWdzICYgMHhmMFUpID09IERVS19P UF9DQUxMMCkgeworCQljb21wX2N0eC0+Y3Vycl9mdW5jLm5lZWRzX3NodWZmbGUgPSAxOworCQl0 bXAgPSBjb21wX2N0eC0+Y3Vycl9mdW5jLnNodWZmbGUxOworCQlkdWtfX2VtaXRfbG9hZF9pbnQz Ml9ub3NodWZmbGUoY29tcF9jdHgsIHRtcCwgYSk7CisJCW9wX2ZsYWdzIHw9IERVS19CQ19DQUxM X0ZMQUdfSU5ESVJFQ1Q7CisJCWlucyA9IERVS19FTkNfT1BfQV9CQyhvcF9mbGFncyAmIDB4ZmYs IHRtcCwgYmMpOworCQlkdWtfX2VtaXQoY29tcF9jdHgsIGlucyk7CisJfSBlbHNlIGlmIChhIDw9 IERVS19CQ19CQ19NQVgpIHsKKwkJY29tcF9jdHgtPmN1cnJfZnVuYy5uZWVkc19zaHVmZmxlID0g MTsKKwkJdG1wID0gY29tcF9jdHgtPmN1cnJfZnVuYy5zaHVmZmxlMTsKKwkJaW5zID0gRFVLX0VO Q19PUF9BX0JDKG9wX2ZsYWdzICYgMHhmZiwgdG1wLCBiYyk7CisJCWlmIChvcF9mbGFncyAmIERV S19fRU1JVF9GTEFHX0FfSVNfU09VUkNFKSB7CisJCQlkdWtfX2VtaXQoY29tcF9jdHgsIERVS19F TkNfT1BfQV9CQyhEVUtfT1BfTERSRUcsIHRtcCwgYSkpOworCQkJZHVrX19lbWl0KGNvbXBfY3R4 LCBpbnMpOworCQl9IGVsc2UgeworCQkJZHVrX19lbWl0KGNvbXBfY3R4LCBpbnMpOworCQkJZHVr X19lbWl0KGNvbXBfY3R4LCBEVUtfRU5DX09QX0FfQkMoRFVLX09QX1NUUkVHLCB0bXAsIGEpKTsK KwkJfQorCX0gZWxzZSB7CisJCWdvdG8gZXJyb3Jfb3V0b2ZyZWdzOworCX0KKwlyZXR1cm47CisK KyBlcnJvcl9vdXRvZnJlZ3M6CisJRFVLX0VSUk9SX1JBTkdFKGNvbXBfY3R4LT50aHIsIERVS19T VFJfUkVHX0xJTUlUKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKK0RVS19MT0NB TCB2b2lkIGR1a19fZW1pdF9iYyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3NtYWxs X3VpbnRfdCBvcCwgZHVrX3JlZ2NvbnN0X3QgYmMpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfU0hV RkZMRV9UT1JUVVJFKQorCW9wIHw9IERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQTsKKyNlbmRp ZgorCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LCBvcCwgMCwgYmMpOworfQorCitEVUtfTE9DQUwg dm9pZCBkdWtfX2VtaXRfYWJjKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfc21hbGxf dWludF90IG9wLCBkdWtfcmVnY29uc3RfdCBhYmMpIHsKKwlkdWtfaW5zdHJfdCBpbnM7CisKKwlE VUtfQVNTRVJUX0RJU0FCTEUob3AgPj0gRFVLX0JDX09QX01JTik7ICAvKiB1bnNpZ25lZCAqLwor CURVS19BU1NFUlQob3AgPD0gRFVLX0JDX09QX01BWCk7CisJRFVLX0FTU0VSVF9ESVNBQkxFKGFi YyA+PSBEVUtfQkNfQUJDX01JTik7ICAvKiB1bnNpZ25lZCAqLworCURVS19BU1NFUlQoYWJjIDw9 IERVS19CQ19BQkNfTUFYKTsKKwlEVUtfQVNTRVJUKChhYmMgJiBEVUtfX0NPTlNUX01BUktFUikg PT0gMCk7CisJRFVLX0FTU0VSVChhYmMgIT0gLTEpOyAgLyogTm90ICdub25lJy4gKi8KKworCWlm IChhYmMgPD0gRFVLX0JDX0FCQ19NQVgpIHsKKwkJOworCX0gZWxzZSB7CisJCWdvdG8gZXJyb3Jf b3V0b2ZyZWdzOworCX0KKwlpbnMgPSBEVUtfRU5DX09QX0FCQyhvcCwgYWJjKTsKKwlEVUtfRERE KERVS19ERERQUklOVCgiZHVrX19lbWl0X2FiYzogMHglMDhseCBsaW5lPSVsZCBwYz0lbGQgb3A9 JWxkICglIUMpIGFiYz0lbGQgKCUhSSkiLAorCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBsb25nKSBpbnMsIChsb25nKSBjb21wX2N0eC0+Y3Vycl90b2tlbi5zdGFydF9saW5lLAorCSAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KSwg KGxvbmcpIG9wLCAobG9uZykgb3AsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGFiYywg KGR1a19pbnN0cl90KSBpbnMpKTsKKwlkdWtfX2VtaXQoY29tcF9jdHgsIGlucyk7CisJcmV0dXJu OworCisgZXJyb3Jfb3V0b2ZyZWdzOgorCURVS19FUlJPUl9SQU5HRShjb21wX2N0eC0+dGhyLCBE VUtfU1RSX1JFR19MSU1JVCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCitEVUtf TE9DQUwgdm9pZCBkdWtfX2VtaXRfbG9hZF9pbnQzMl9yYXcoZHVrX2NvbXBpbGVyX2N0eCAqY29t cF9jdHgsIGR1a19yZWdjb25zdF90IHJlZywgZHVrX2ludDMyX3QgdmFsLCBkdWtfc21hbGxfdWlu dF90IG9wX2ZsYWdzKSB7CisJLyogWFhYOiBTaHVmZmxpbmcgc3VwcG9ydCBjb3VsZCBiZSBpbXBs ZW1lbnRlZCBoZXJlIHNvIHRoYXQgTERJTlQrTERJTlRYCisJICogd291bGQgb25seSBzaHVmZmxl IG9uY2UgKGluc3RlYWQgb2YgdHdpY2UpLiAgVGhlIGN1cnJlbnQgY29kZSB3b3JrcworCSAqIHRo b3VnaCwgYW5kIGhhcyBhIHNtYWxsZXIgY29tcGlsZXIgZm9vdHByaW50LgorCSAqLworCisJaWYg KCh2YWwgPj0gKGR1a19pbnQzMl90KSBEVUtfQkNfQkNfTUlOIC0gKGR1a19pbnQzMl90KSBEVUtf QkNfTERJTlRfQklBUykgJiYKKwkgICAgKHZhbCA8PSAoZHVrX2ludDMyX3QpIERVS19CQ19CQ19N QVggLSAoZHVrX2ludDMyX3QpIERVS19CQ19MRElOVF9CSUFTKSkgeworCQlEVUtfREREKERVS19E RERQUklOVCgiZW1pdCBMRElOVCB0byByZWcgJWxkIGZvciAlbGQiLCAobG9uZykgcmVnLCAobG9u ZykgdmFsKSk7CisJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LCBEVUtfT1BfTERJTlQgfCBvcF9m bGFncywgcmVnLCAoZHVrX3JlZ2NvbnN0X3QpICh2YWwgKyAoZHVrX2ludDMyX3QpIERVS19CQ19M RElOVF9CSUFTKSk7CisJfSBlbHNlIHsKKwkJZHVrX2ludDMyX3QgaGkgPSB2YWwgPj4gRFVLX0JD X0xESU5UWF9TSElGVDsKKwkJZHVrX2ludDMyX3QgbG8gPSB2YWwgJiAoKCgoZHVrX2ludDMyX3Qp IDEpIDw8IERVS19CQ19MRElOVFhfU0hJRlQpIC0gMSk7CisJCURVS19BU1NFUlQobG8gPj0gMCk7 CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJlbWl0IExESU5UK0xESU5UWCB0byByZWcgJWxkIGZv ciAlbGQgLT4gaGkgJWxkLCBsbyAlbGQiLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykg cmVnLCAobG9uZykgdmFsLCAobG9uZykgaGksIChsb25nKSBsbykpOworCQlkdWtfX2VtaXRfYV9i Yyhjb21wX2N0eCwgRFVLX09QX0xESU5UIHwgb3BfZmxhZ3MsIHJlZywgKGR1a19yZWdjb25zdF90 KSAoaGkgKyAoZHVrX2ludDMyX3QpIERVS19CQ19MRElOVF9CSUFTKSk7CisJCWR1a19fZW1pdF9h X2JjKGNvbXBfY3R4LCBEVUtfT1BfTERJTlRYIHwgb3BfZmxhZ3MsIHJlZywgKGR1a19yZWdjb25z dF90KSBsbyk7CisJfQorfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfbG9hZF9pbnQzMihk dWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3JlZ2NvbnN0X3QgcmVnLCBkdWtfaW50MzJf dCB2YWwpIHsKKwlkdWtfX2VtaXRfbG9hZF9pbnQzMl9yYXcoY29tcF9jdHgsIHJlZywgdmFsLCAw IC8qb3BfZmxhZ3MqLyk7Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfU0hVRkZMRV9UT1JUVVJF KQorLyogVXNlZCBieSBkdWtfX2VtaXQqKCkgY2FsbHMgc28gdGhhdCB3ZSBkb24ndCBzaHVmZmxl IHRoZSBsb2FkaW50cyB0aGF0CisgKiBhcmUgbmVlZGVkIHRvIGhhbmRsZSBpbmRpcmVjdCBvcGNv ZGVzLgorICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfbG9hZF9pbnQzMl9ub3NodWZmbGUo ZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19yZWdjb25zdF90IHJlZywgZHVrX2ludDMy X3QgdmFsKSB7CisJZHVrX19lbWl0X2xvYWRfaW50MzJfcmF3KGNvbXBfY3R4LCByZWcsIHZhbCwg RFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9BIC8qb3BfZmxhZ3MqLyk7Cit9CisjZWxzZQorRFVL X0xPQ0FMIHZvaWQgZHVrX19lbWl0X2xvYWRfaW50MzJfbm9zaHVmZmxlKGR1a19jb21waWxlcl9j dHggKmNvbXBfY3R4LCBkdWtfcmVnY29uc3RfdCByZWcsIGR1a19pbnQzMl90IHZhbCkgeworCS8q IFdoZW4gdG9ydHVyZSBub3QgZW5hYmxlZCwgY2FuIGp1c3QgdXNlIHRoZSBzYW1lIGhlbHBlciBi ZWNhdXNlCisJICogJ3JlZycgd29uJ3QgZ2V0IHNwaWxsZWQuCisJICovCisJRFVLX0FTU0VSVChy ZWcgPD0gRFVLX0JDX0FfTUFYKTsKKwlkdWtfX2VtaXRfbG9hZF9pbnQzMihjb21wX2N0eCwgcmVn LCB2YWwpOworfQorI2VuZGlmCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZW1pdF9qdW1wKGR1a19j b21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaW50X3QgdGFyZ2V0X3BjKSB7CisJZHVrX2ludF90 IGN1cnJfcGM7CisJZHVrX2ludF90IG9mZnNldDsKKworCWN1cnJfcGMgPSAoZHVrX2ludF90KSAo RFVLX0JXX0dFVF9TSVpFKGNvbXBfY3R4LT50aHIsICZjb21wX2N0eC0+Y3Vycl9mdW5jLmJ3X2Nv ZGUpIC8gc2l6ZW9mKGR1a19jb21waWxlcl9pbnN0cikpOworCW9mZnNldCA9IChkdWtfaW50X3Qp IHRhcmdldF9wYyAtIChkdWtfaW50X3QpIGN1cnJfcGMgLSAxOworCURVS19BU1NFUlQob2Zmc2V0 ICsgRFVLX0JDX0pVTVBfQklBUyA+PSBEVUtfQkNfQUJDX01JTik7CisJRFVLX0FTU0VSVChvZmZz ZXQgKyBEVUtfQkNfSlVNUF9CSUFTIDw9IERVS19CQ19BQkNfTUFYKTsKKwlkdWtfX2VtaXRfYWJj KGNvbXBfY3R4LCBEVUtfT1BfSlVNUCwgKGR1a19yZWdjb25zdF90KSAob2Zmc2V0ICsgRFVLX0JD X0pVTVBfQklBUykpOworfQorCitEVUtfTE9DQUwgZHVrX2ludF90IGR1a19fZW1pdF9qdW1wX2Vt cHR5KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KSB7CisJZHVrX2ludF90IHJldDsKKworCXJl dCA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpOyAgLyogdXNlZnVsIGZvciBwYXRjaGlu ZyBqdW1wcyBsYXRlciAqLworCWR1a19fZW1pdF9vcF9vbmx5KGNvbXBfY3R4LCBEVUtfT1BfSlVN UCk7CisJcmV0dXJuIHJldDsKK30KKworLyogSW5zZXJ0IGFuIGVtcHR5IGp1bXAgaW4gdGhlIG1p ZGRsZSBvZiBjb2RlIGVtaXR0ZWQgZWFybGllci4gIFRoaXMgaXMKKyAqIGN1cnJlbnRseSBuZWVk ZWQgZm9yIGNvbXBpbGluZyBmb3ItaW4uCisgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19faW5zZXJ0 X2p1bXBfZW50cnkoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pbnRfdCBqdW1wX3Bj KSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BDMkxJTkUpCisJZHVrX2ludF90IGxpbmU7CisjZW5k aWYKKwlkdWtfY29tcGlsZXJfaW5zdHIgKmluc3RyOworCWR1a19zaXplX3Qgb2Zmc2V0OworCisJ RFVLX0FTU0VSVChqdW1wX3BjID49IDApOworCW9mZnNldCA9IChkdWtfc2l6ZV90KSBqdW1wX3Bj ICogc2l6ZW9mKGR1a19jb21waWxlcl9pbnN0cik7CisJaW5zdHIgPSAoZHVrX2NvbXBpbGVyX2lu c3RyICopICh2b2lkICopCisJICAgICAgICBEVUtfQldfSU5TRVJUX0VOU1VSRV9BUkVBKGNvbXBf Y3R4LT50aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wX2N0eC0+ Y3Vycl9mdW5jLmJ3X2NvZGUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m ZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a19jb21w aWxlcl9pbnN0cikpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1BDMkxJTkUpCisJbGluZSA9IGNv bXBfY3R4LT5jdXJyX3Rva2VuLnN0YXJ0X2xpbmU7ICAvKiBhcHByb3hpbWF0aW9uLCBjbG9zZSBl bm91Z2ggKi8KKyNlbmRpZgorCWluc3RyLT5pbnMgPSBEVUtfRU5DX09QX0FCQyhEVUtfT1BfSlVN UCwgMCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BDMkxJTkUpCisJaW5zdHItPmxpbmUgPSAoZHVr X3VpbnQzMl90KSBsaW5lOworI2VuZGlmCisKKwlEVUtfQldfQUREX1BUUihjb21wX2N0eC0+dGhy LCAmY29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlLCBzaXplb2YoZHVrX2NvbXBpbGVyX2luc3Ry KSk7CisJaWYgKERVS19VTkxJS0VMWShEVUtfQldfR0VUX1NJWkUoY29tcF9jdHgtPnRociwgJmNv bXBfY3R4LT5jdXJyX2Z1bmMuYndfY29kZSkgPiBEVUtfVVNFX0VTQkNfTUFYX0JZVEVTKSkgewor CQlnb3RvIGZhaWxfYmNfbGltaXQ7CisJfQorCXJldHVybjsKKworICBmYWlsX2JjX2xpbWl0Ogor CURVS19FUlJPUl9SQU5HRShjb21wX2N0eC0+dGhyLCBEVUtfU1RSX0JZVEVDT0RFX0xJTUlUKTsK KwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKy8qIERvZXMgbm90IGFzc3VtZSB0aGF0 IGp1bXBfcGMgY29udGFpbnMgYSBEVUtfT1BfSlVNUCBwcmV2aW91c2x5OyB0aGlzIGlzIGludGVu dGlvbmFsCisgKiB0byBhbGxvdyBlLmcuIGFuIElOVkFMSUQgb3Bjb2RlIGJlIG92ZXJ3cml0dGVu IHdpdGggYSBKVU1QIChsYWJlbCBtYW5hZ2VtZW50IHVzZXMgdGhpcykuCisgKi8KK0RVS19MT0NB TCB2b2lkIGR1a19fcGF0Y2hfanVtcChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2lu dF90IGp1bXBfcGMsIGR1a19pbnRfdCB0YXJnZXRfcGMpIHsKKwlkdWtfY29tcGlsZXJfaW5zdHIg Kmluc3RyOworCWR1a19pbnRfdCBvZmZzZXQ7CisKKwkvKiBhbGxvdyBuZWdhdGl2ZSBQQ3MsIGJl aGF2ZSBhcyBhIG5vLW9wICovCisJaWYgKGp1bXBfcGMgPCAwKSB7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJkdWtfX3BhdGNoX2p1bXAoKTogbm9wIGNhbGwsIGp1bXBfcGM9JWxkICg8MCksIHRh cmdldF9wYz0lbGQiLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykganVtcF9wYywgKGxv bmcpIHRhcmdldF9wYykpOworCQlyZXR1cm47CisJfQorCURVS19BU1NFUlQoanVtcF9wYyA+PSAw KTsKKworCS8qIFhYWDogcmFuZ2UgYXNzZXJ0ICovCisJaW5zdHIgPSBkdWtfX2dldF9pbnN0cl9w dHIoY29tcF9jdHgsIGp1bXBfcGMpOworCURVS19BU1NFUlQoaW5zdHIgIT0gTlVMTCk7CisKKwkv KiBYWFg6IHJhbmdlIGFzc2VydCAqLworCW9mZnNldCA9IHRhcmdldF9wYyAtIGp1bXBfcGMgLSAx OworCisJaW5zdHItPmlucyA9IERVS19FTkNfT1BfQUJDKERVS19PUF9KVU1QLCBvZmZzZXQgKyBE VUtfQkNfSlVNUF9CSUFTKTsKKwlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19wYXRjaF9qdW1w KCk6IGp1bXBfcGM9JWxkLCB0YXJnZXRfcGM9JWxkLCBvZmZzZXQ9JWxkIiwKKwkgICAgICAgICAg ICAgICAgICAgICAobG9uZykganVtcF9wYywgKGxvbmcpIHRhcmdldF9wYywgKGxvbmcpIG9mZnNl dCkpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3BhdGNoX2p1bXBfaGVyZShkdWtfY29tcGls ZXJfY3R4ICpjb21wX2N0eCwgZHVrX2ludF90IGp1bXBfcGMpIHsKKwlkdWtfX3BhdGNoX2p1bXAo Y29tcF9jdHgsIGp1bXBfcGMsIGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpKTsKK30KKwor RFVLX0xPQ0FMIHZvaWQgZHVrX19wYXRjaF90cnljYXRjaChkdWtfY29tcGlsZXJfY3R4ICpjb21w X2N0eCwgZHVrX2ludF90IGxkY29uc3RfcGMsIGR1a19pbnRfdCB0cnljYXRjaF9wYywgZHVrX3Jl Z2NvbnN0X3QgcmVnX2NhdGNoLCBkdWtfcmVnY29uc3RfdCBjb25zdF92YXJuYW1lLCBkdWtfc21h bGxfdWludF90IGZsYWdzKSB7CisJZHVrX2NvbXBpbGVyX2luc3RyICppbnN0cjsKKworCURVS19B U1NFUlQoRFVLX19JU1JFRyhyZWdfY2F0Y2gpKTsKKworCWluc3RyID0gZHVrX19nZXRfaW5zdHJf cHRyKGNvbXBfY3R4LCBsZGNvbnN0X3BjKTsKKwlEVUtfQVNTRVJUKERVS19ERUNfT1AoaW5zdHIt PmlucykgPT0gRFVLX09QX0xEQ09OU1QpOworCURVS19BU1NFUlQoaW5zdHIgIT0gTlVMTCk7CisJ aWYgKGNvbnN0X3Zhcm5hbWUgJiBEVUtfX0NPTlNUX01BUktFUikgeworCQkvKiBIYXZlIGEgY2F0 Y2ggdmFyaWFibGUuICovCisJCWNvbnN0X3Zhcm5hbWUgPSBjb25zdF92YXJuYW1lICYgKH5EVUtf X0NPTlNUX01BUktFUik7CisJCWlmIChyZWdfY2F0Y2ggPiBEVUtfQkNfQkNfTUFYIHx8IGNvbnN0 X3Zhcm5hbWUgPiBEVUtfQkNfQkNfTUFYKSB7CisJCQkvKiBDYXRjaCBhdHRlbXB0cyB0byB1c2Ug b3V0LW9mLXJhbmdlIHJlZy9jb25zdC4gIFdpdGhvdXQgdGhpcworCQkJICogY2hlY2sgRHVrdGFw ZSAwLjEyLjAgY291bGQgZ2VuZXJhdGUgaW52YWxpZCBjb2RlIHdoaWNoIGNhdXNlZAorCQkJICog YW4gYXNzZXJ0IGZhaWx1cmUgb24gZXhlY3V0aW9uLiAgVGhpcyBlcnJvciBpcyB0cmlnZ2VyZWQg ZS5nLgorCQkJICogZm9yIGZ1bmN0aW9ucyB3aXRoIGEgbG90IG9mIGNvbnN0YW50cyBhbmQgYSB0 cnktY2F0Y2ggc3RhdGVtZW50LgorCQkJICogU2h1ZmZsaW5nIG9yIG9wY29kZSBzZW1hbnRpY3Mg Y2hhbmdlIGlzIG5lZWRlZCB0byBmaXggdGhlIGlzc3VlLgorCQkJICogU2VlOiB0ZXN0LWJ1Zy10 cnljYXRjaC1tYW55LWNvbnN0YW50cy5qcy4KKwkJCSAqLworCQkJRFVLX0QoRFVLX0RQUklOVCgi ZmFpbGVkIHRvIHBhdGNoIHRyeWNhdGNoOiBmbGFncz0lbGQsIHJlZ19jYXRjaD0lbGQsIGNvbnN0 X3Zhcm5hbWU9JWxkICgweCUwOGx4KSIsCisJCQkgICAgICAgICAgICAgICAgIChsb25nKSBmbGFn cywgKGxvbmcpIHJlZ19jYXRjaCwgKGxvbmcpIGNvbnN0X3Zhcm5hbWUsIChsb25nKSBjb25zdF92 YXJuYW1lKSk7CisJCQlEVUtfRVJST1JfUkFOR0UoY29tcF9jdHgtPnRociwgRFVLX1NUUl9SRUdf TElNSVQpOworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQl9CisJCWluc3RyLT5pbnMg fD0gRFVLX0VOQ19PUF9BX0JDKDAsIDAsIGNvbnN0X3Zhcm5hbWUpOworCX0gZWxzZSB7CisJCS8q IE5vIGNhdGNoIHZhcmlhYmxlLCBlLmcuIGEgdHJ5LWZpbmFsbHk7IHJlcGxhY2UgTERDT05TVCB3 aXRoCisJCSAqIE5PUCB0byBhdm9pZCBhIGJvZ3VzIExEQ09OU1QuCisJCSAqLworCQlpbnN0ci0+ aW5zID0gRFVLX0VOQ19PUChEVUtfT1BfTk9QKTsKKwl9CisKKwlpbnN0ciA9IGR1a19fZ2V0X2lu c3RyX3B0cihjb21wX2N0eCwgdHJ5Y2F0Y2hfcGMpOworCURVS19BU1NFUlQoaW5zdHIgIT0gTlVM TCk7CisJRFVLX0FTU0VSVF9ESVNBQkxFKGZsYWdzID49IERVS19CQ19BX01JTik7CisJRFVLX0FT U0VSVChmbGFncyA8PSBEVUtfQkNfQV9NQVgpOworCWluc3RyLT5pbnMgPSBEVUtfRU5DX09QX0Ff QkMoRFVLX09QX1RSWUNBVENILCBmbGFncywgcmVnX2NhdGNoKTsKK30KKworRFVLX0xPQ0FMIHZv aWQgZHVrX19lbWl0X2lmX2ZhbHNlX3NraXAoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1 a19yZWdjb25zdF90IHJlZ2NvbnN0KSB7CisJZHVrX3NtYWxsX3VpbnRfdCBvcDsKKworCW9wID0g RFVLX19JU1JFRyhyZWdjb25zdCkgPyBEVUtfT1BfSUZGQUxTRV9SIDogRFVLX09QX0lGRkFMU0Vf QzsKKwlkdWtfX2VtaXRfYmMoY29tcF9jdHgsIG9wLCByZWdjb25zdCk7ICAvKiBoZWxwZXIgd2ls bCByZW1vdmUgY29uc3QgZmxhZyAqLworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2VtaXRfaWZf dHJ1ZV9za2lwKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfcmVnY29uc3RfdCByZWdj b25zdCkgeworCWR1a19zbWFsbF91aW50X3Qgb3A7CisKKwlvcCA9IERVS19fSVNSRUcocmVnY29u c3QpID8gRFVLX09QX0lGVFJVRV9SIDogRFVLX09QX0lGVFJVRV9DOworCWR1a19fZW1pdF9iYyhj b21wX2N0eCwgb3AsIHJlZ2NvbnN0KTsgIC8qIGhlbHBlciB3aWxsIHJlbW92ZSBjb25zdCBmbGFn ICovCit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fZW1pdF9pbnZhbGlkKGR1a19jb21waWxlcl9j dHggKmNvbXBfY3R4KSB7CisJZHVrX19lbWl0X29wX29ubHkoY29tcF9jdHgsIERVS19PUF9JTlZB TElEKTsKK30KKworLyoKKyAqICBQZWVwaG9sZSBvcHRpbWl6ZXIgZm9yIGZpbmlzaGVkIGJ5dGVj b2RlLgorICoKKyAqICBEb2VzIG5vdCByZW1vdmUgb3Bjb2RlczsgY3VycmVudGx5IG9ubHkgc3Ry YWlnaHRlbnMgb3V0IHVuY29uZGl0aW9uYWwKKyAqICBqdW1wIGNoYWlucyB3aGljaCBhcmUgZ2Vu ZXJhdGVkIGJ5IHNldmVyYWwgY29udHJvbCBzdHJ1Y3R1cmVzLgorICovCisKK0RVS19MT0NBTCB2 b2lkIGR1a19fcGVlcGhvbGVfb3B0aW1pemVfYnl0ZWNvZGUoZHVrX2NvbXBpbGVyX2N0eCAqY29t cF9jdHgpIHsKKwlkdWtfY29tcGlsZXJfaW5zdHIgKmJjOworCWR1a19zbWFsbF91aW50X3QgaXRl cjsKKwlkdWtfaW50X3QgaSwgbjsKKwlkdWtfaW50X3QgY291bnRfb3B0OworCisJYmMgPSAoZHVr X2NvbXBpbGVyX2luc3RyICopICh2b2lkICopIERVS19CV19HRVRfQkFTRVBUUihjb21wX2N0eC0+ dGhyLCAmY29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlKTsKKyNpZiBkZWZpbmVkKERVS19VU0Vf QlVGTEVOMTYpCisJLyogTm8gbmVlZCB0byBhc3NlcnQsIGJ1ZmZlciBzaXplIG1heGltdW0gaXMg MHhmZmZmLiAqLworI2Vsc2UKKwlEVUtfQVNTRVJUKChkdWtfc2l6ZV90KSBEVUtfQldfR0VUX1NJ WkUoY29tcF9jdHgtPnRociwgJmNvbXBfY3R4LT5jdXJyX2Z1bmMuYndfY29kZSkgLyBzaXplb2Yo ZHVrX2NvbXBpbGVyX2luc3RyKSA8PSAoZHVrX3NpemVfdCkgRFVLX0lOVF9NQVgpOyAgLyogYnl0 ZWNvZGUgbGltaXRzICovCisjZW5kaWYKKwluID0gKGR1a19pbnRfdCkgKERVS19CV19HRVRfU0la RShjb21wX2N0eC0+dGhyLCAmY29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlKSAvIHNpemVvZihk dWtfY29tcGlsZXJfaW5zdHIpKTsKKworCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBEVUtfQ09NUElM RVJfUEVFUEhPTEVfTUFYSVRFUjsgaXRlcisrKSB7CisJCWNvdW50X29wdCA9IDA7CisKKwkJZm9y IChpID0gMDsgaSA8IG47IGkrKykgeworCQkJZHVrX2luc3RyX3QgaW5zOworCQkJZHVrX2ludF90 IHRhcmdldF9wYzE7CisJCQlkdWtfaW50X3QgdGFyZ2V0X3BjMjsKKworCQkJaW5zID0gYmNbaV0u aW5zOworCQkJaWYgKERVS19ERUNfT1AoaW5zKSAhPSBEVUtfT1BfSlVNUCkgeworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQl0YXJnZXRfcGMxID0gaSArIDEgKyAoZHVrX2ludF90KSBEVUtfREVD X0FCQyhpbnMpIC0gKGR1a19pbnRfdCkgRFVLX0JDX0pVTVBfQklBUzsKKwkJCURVS19EREQoRFVL X0RERFBSSU5UKCJjb25zaWRlciBqdW1wIGF0IHBjICVsZDsgdGFyZ2V0X3BjPSVsZCIsIChsb25n KSBpLCAobG9uZykgdGFyZ2V0X3BjMSkpOworCQkJRFVLX0FTU0VSVCh0YXJnZXRfcGMxID49IDAp OworCQkJRFVLX0FTU0VSVCh0YXJnZXRfcGMxIDwgbik7CisKKwkJCS8qIE5vdGU6IGlmIHRhcmdl dF9wYzEgPT0gaSwgd2UnbGwgb3B0aW1pemUgYSBqdW1wIHRvIGl0c2VsZi4KKwkJCSAqIFRoaXMg ZG9lcyBub3QgbmVlZCB0byBiZSBjaGVja2VkIGZvciBleHBsaWNpdGx5OyB0aGUgY2FzZQorCQkJ ICogaXMgcmFyZSBhbmQgbWF4IGl0ZXIgYnJlYWtzIHVzIG91dC4KKwkJCSAqLworCisJCQlpbnMg PSBiY1t0YXJnZXRfcGMxXS5pbnM7CisJCQlpZiAoRFVLX0RFQ19PUChpbnMpICE9IERVS19PUF9K VU1QKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXRhcmdldF9wYzIgPSB0YXJnZXRfcGMx ICsgMSArIChkdWtfaW50X3QpIERVS19ERUNfQUJDKGlucykgLSAoZHVrX2ludF90KSBEVUtfQkNf SlVNUF9CSUFTOworCisJCQlEVUtfREREKERVS19ERERQUklOVCgib3B0aW1pemluZyBqdW1wIGF0 IHBjICVsZDsgb2xkIHRhcmdldCBpcyAlbGQgLT4gbmV3IHRhcmdldCBpcyAlbGQiLAorCQkJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIGksIChsb25nKSB0YXJnZXRfcGMxLCAobG9uZykgdGFy Z2V0X3BjMikpOworCisJCQliY1tpXS5pbnMgPSBEVUtfRU5DX09QX0FCQyhEVUtfT1BfSlVNUCwg dGFyZ2V0X3BjMiAtIChpICsgMSkgKyBEVUtfQkNfSlVNUF9CSUFTKTsKKworCQkJY291bnRfb3B0 Kys7CisJCX0KKworCQlEVUtfREQoRFVLX0REUFJJTlQoIm9wdGltaXplZCAlbGQganVtcHMgb24g cGVlcGhvbGUgcm91bmQgJWxkIiwgKGxvbmcpIGNvdW50X29wdCwgKGxvbmcpIChpdGVyICsgMSkp KTsKKworCQlpZiAoY291bnRfb3B0ID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisv KgorICogIEludGVybWVkaWF0ZSB2YWx1ZSBoZWxwZXJzCisgKi8KKworLyogRmxhZ3MgZm9yIGlu dGVybWVkaWF0ZSB2YWx1ZSBjb2VyY2lvbnMuICBBIGZsYWcgZm9yIHVzaW5nIGEgZm9yY2VkIHJl ZworICogaXMgbm90IG5lZWRlZCwgdGhlIGZvcmNlZF9yZWcgYXJndW1lbnQgc3VmZmljZXMgYW5k IGdlbmVyYXRlcyBiZXR0ZXIKKyAqIGNvZGUgKGl0IGlzIGNoZWNrZWQgYXMgaXQgaXMgdXNlZCku CisgKi8KKy8qIFhYWDogRFVLX19JVkFMX0ZMQUdfUkVRVUlSRV9TSE9SVCBpcyBwYXNzZWQgYnV0 IG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQKKyAqIGJ5IGlzcGVjL2l2YWx1ZSBvcGVyYXRpb25z LgorICovCisjZGVmaW5lIERVS19fSVZBTF9GTEFHX0FMTE9XX0NPTlNUICAgICAgICAgICgxIDw8 IDApICAvKiBhbGxvdyBhIGNvbnN0YW50IHRvIGJlIHJldHVybmVkICovCisjZGVmaW5lIERVS19f SVZBTF9GTEFHX1JFUVVJUkVfVEVNUCAgICAgICAgICgxIDw8IDEpICAvKiByZXF1aXJlIGEgKG11 dGFibGUpIHRlbXBvcmFyeSBhcyBhIHJlc3VsdCAob3IgYSBjb25zdCBpZiBhbGxvd2VkKSAqLwor I2RlZmluZSBEVUtfX0lWQUxfRkxBR19SRVFVSVJFX1NIT1JUICAgICAgICAoMSA8PCAyKSAgLyog cmVxdWlyZSBhIHNob3J0ICg4LWJpdCkgcmVnL2NvbnN0IHdoaWNoIGZpdHMgaW50byBieXRlY29k ZSBCL0Mgc2xvdCAqLworCisvKiBYWFg6IHNvbWUgY29kZSBtaWdodCBiZW5lZml0IGZyb20gRFVL X19TRVRURU1QX0lGVEVNUCh0aHIseCkgKi8KKworI2lmIDAgIC8qIGVuYWJsZSBtYW51YWxseSBm b3IgZHVtcGluZyAqLworI2RlZmluZSBEVUtfX0RVTVBfSVNQRUMoY29tcGN0eCxpc3BlYykgZG8g eyBkdWtfX2R1bXBfaXNwZWMoKGNvbXBjdHgpLCAoaXNwZWMpKTsgfSB3aGlsZSAoMCkKKyNkZWZp bmUgRFVLX19EVU1QX0lWQUxVRShjb21wY3R4LGl2YWx1ZSkgZG8geyBkdWtfX2R1bXBfaXZhbHVl KChjb21wY3R4KSwgKGl2YWx1ZSkpOyB9IHdoaWxlICgwKQorCitEVUtfTE9DQUwgdm9pZCBkdWtf X2R1bXBfaXNwZWMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pc3BlYyAqeCkgewor CURVS19EKERVS19EUFJJTlQoImlzcGVjIGR1bXA6IHQ9JWxkIHJlZ2NvbnN0PTB4JTA4bHgsIHZh bHN0YWNrX2lkeD0lbGQsIHZhbHVlPSUhVCIsCisJICAgICAgICAgICAgICAgICAobG9uZykgeC0+ dCwgKHVuc2lnbmVkIGxvbmcpIHgtPnJlZ2NvbnN0LCAobG9uZykgeC0+dmFsc3RhY2tfaWR4LAor CSAgICAgICAgICAgICAgICAgZHVrX2dldF90dmFsKGNvbXBfY3R4LT50aHIsIHgtPnZhbHN0YWNr X2lkeCkpKTsKK30KK0RVS19MT0NBTCB2b2lkIGR1a19fZHVtcF9pdmFsdWUoZHVrX2NvbXBpbGVy X2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKngpIHsKKwlEVUtfRChEVUtfRFBSSU5UKCJpdmFs dWUgZHVtcDogdD0lbGQgb3A9JWxkICIKKwkgICAgICAgICAgICAgICAgICJ4MT17dD0lbGQgcmVn Y29uc3Q9MHglMDhseCB2YWxzdGFja19pZHg9JWxkIHZhbHVlPSUhVH0gIgorCSAgICAgICAgICAg ICAgICAgIngyPXt0PSVsZCByZWdjb25zdD0weCUwOGx4IHZhbHN0YWNrX2lkeD0lbGQgdmFsdWU9 JSFUfSIsCisJCSAgICAgICAgIChsb25nKSB4LT50LCAobG9uZykgeC0+b3AsCisJICAgICAgICAg ICAgICAgICAobG9uZykgeC0+eDEudCwgKHVuc2lnbmVkIGxvbmcpIHgtPngxLnJlZ2NvbnN0LCAo bG9uZykgeC0+eDEudmFsc3RhY2tfaWR4LAorCSAgICAgICAgICAgICAgICAgZHVrX2dldF90dmFs KGNvbXBfY3R4LT50aHIsIHgtPngxLnZhbHN0YWNrX2lkeCksCisJICAgICAgICAgICAgICAgICAo bG9uZykgeC0+eDIudCwgKHVuc2lnbmVkIGxvbmcpIHgtPngyLnJlZ2NvbnN0LCAobG9uZykgeC0+ eDIudmFsc3RhY2tfaWR4LAorCSAgICAgICAgICAgICAgICAgZHVrX2dldF90dmFsKGNvbXBfY3R4 LT50aHIsIHgtPngyLnZhbHN0YWNrX2lkeCkpKTsKK30KKyNlbHNlCisjZGVmaW5lIERVS19fRFVN UF9JU1BFQyhjb21wX2N0eCx4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVLX19EVU1QX0lW QUxVRShjb21wX2N0eCx4KSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitEVUtfTE9DQUwgdm9p ZCBkdWtfX2l2YWx1ZV9yZWdjb25zdChkdWtfaXZhbHVlICp4LCBkdWtfcmVnY29uc3RfdCByZWdj b25zdCkgeworCXgtPnQgPSBEVUtfSVZBTF9QTEFJTjsKKwl4LT54MS50ID0gRFVLX0lTUEVDX1JF R0NPTlNUOworCXgtPngxLnJlZ2NvbnN0ID0gcmVnY29uc3Q7Cit9CisKK0RVS19MT0NBTCB2b2lk IGR1a19faXZhbHVlX3BsYWluX2Zyb21zdGFjayhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwg ZHVrX2l2YWx1ZSAqeCkgeworCXgtPnQgPSBEVUtfSVZBTF9QTEFJTjsKKwl4LT54MS50ID0gRFVL X0lTUEVDX1ZBTFVFOworCWR1a19yZXBsYWNlKGNvbXBfY3R4LT50aHIsIHgtPngxLnZhbHN0YWNr X2lkeCk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19faXZhbHVlX3Zhcl9mcm9tc3RhY2soZHVr X2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKngpIHsKKwl4LT50ID0gRFVLX0lW QUxfVkFSOworCXgtPngxLnQgPSBEVUtfSVNQRUNfVkFMVUU7CisJZHVrX3JlcGxhY2UoY29tcF9j dHgtPnRociwgeC0+eDEudmFsc3RhY2tfaWR4KTsKK30KKworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBk dWtfX2l2YWx1ZV92YXJfaHN0cmluZyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2 YWx1ZSAqeCwgZHVrX2hzdHJpbmcgKmgpIHsKKwlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisJZHVr X3B1c2hfaHN0cmluZyhjb21wX2N0eC0+dGhyLCBoKTsKKwlkdWtfX2l2YWx1ZV92YXJfZnJvbXN0 YWNrKGNvbXBfY3R4LCB4KTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19jb3B5X2lzcGVjKGR1 a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXNwZWMgKnNyYywgZHVrX2lzcGVjICpkc3Qp IHsKKwlkc3QtPnQgPSBzcmMtPnQ7CisJZHN0LT5yZWdjb25zdCA9IHNyYy0+cmVnY29uc3Q7CisJ ZHVrX2NvcHkoY29tcF9jdHgtPnRociwgc3JjLT52YWxzdGFja19pZHgsIGRzdC0+dmFsc3RhY2tf aWR4KTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19jb3B5X2l2YWx1ZShkdWtfY29tcGlsZXJf Y3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqc3JjLCBkdWtfaXZhbHVlICpkc3QpIHsKKwlkc3Qt PnQgPSBzcmMtPnQ7CisJZHN0LT5vcCA9IHNyYy0+b3A7CisJZHN0LT54MS50ID0gc3JjLT54MS50 OworCWRzdC0+eDEucmVnY29uc3QgPSBzcmMtPngxLnJlZ2NvbnN0OworCWRzdC0+eDIudCA9IHNy Yy0+eDIudDsKKwlkc3QtPngyLnJlZ2NvbnN0ID0gc3JjLT54Mi5yZWdjb25zdDsKKwlkdWtfY29w eShjb21wX2N0eC0+dGhyLCBzcmMtPngxLnZhbHN0YWNrX2lkeCwgZHN0LT54MS52YWxzdGFja19p ZHgpOworCWR1a19jb3B5KGNvbXBfY3R4LT50aHIsIHNyYy0+eDIudmFsc3RhY2tfaWR4LCBkc3Qt PngyLnZhbHN0YWNrX2lkeCk7Cit9CisKK0RVS19MT0NBTCBkdWtfcmVnY29uc3RfdCBkdWtfX2Fs bG9jdGVtcHMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19zbWFsbF9pbnRfdCBudW0p IHsKKwlkdWtfcmVnY29uc3RfdCByZXM7CisKKwlyZXMgPSBjb21wX2N0eC0+Y3Vycl9mdW5jLnRl bXBfbmV4dDsKKwljb21wX2N0eC0+Y3Vycl9mdW5jLnRlbXBfbmV4dCArPSBudW07CisKKwlpZiAo Y29tcF9jdHgtPmN1cnJfZnVuYy50ZW1wX25leHQgPiBEVUtfX01BWF9URU1QUykgeyAgLyogPT0g RFVLX19NQVhfVEVNUFMgaXMgT0sgKi8KKwkJRFVLX0VSUk9SX1JBTkdFKGNvbXBfY3R4LT50aHIs IERVS19TVFJfVEVNUF9MSU1JVCk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCX0K KworCS8qIG1haW50YWluIGhpZ2hlc3QgJ3VzZWQnIHRlbXBvcmFyeSwgbmVlZGVkIHRvIGZpZ3Vy ZSBvdXQgbnJlZ3Mgb2YgZnVuY3Rpb24gKi8KKwlpZiAoY29tcF9jdHgtPmN1cnJfZnVuYy50ZW1w X25leHQgPiBjb21wX2N0eC0+Y3Vycl9mdW5jLnRlbXBfbWF4KSB7CisJCWNvbXBfY3R4LT5jdXJy X2Z1bmMudGVtcF9tYXggPSBjb21wX2N0eC0+Y3Vycl9mdW5jLnRlbXBfbmV4dDsKKwl9CisKKwly ZXR1cm4gcmVzOworfQorCitEVUtfTE9DQUwgZHVrX3JlZ2NvbnN0X3QgZHVrX19hbGxvY3RlbXAo ZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpIHsKKwlyZXR1cm4gZHVrX19hbGxvY3RlbXBzKGNv bXBfY3R4LCAxKTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19zZXR0ZW1wX2NoZWNrbWF4KGR1 a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfcmVnY29uc3RfdCB0ZW1wX25leHQpIHsKKwlj b21wX2N0eC0+Y3Vycl9mdW5jLnRlbXBfbmV4dCA9IHRlbXBfbmV4dDsKKwlpZiAodGVtcF9uZXh0 ID4gY29tcF9jdHgtPmN1cnJfZnVuYy50ZW1wX21heCkgeworCQljb21wX2N0eC0+Y3Vycl9mdW5j LnRlbXBfbWF4ID0gdGVtcF9uZXh0OworCX0KK30KKworLyogZ2V0IGNvbnN0IGZvciB2YWx1ZSBh dCB2YWxzdGFjayB0b3AgKi8KK0RVS19MT0NBTCBkdWtfcmVnY29uc3RfdCBkdWtfX2dldGNvbnN0 KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4KSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBf Y3R4LT50aHI7CisJZHVrX2NvbXBpbGVyX2Z1bmMgKmYgPSAmY29tcF9jdHgtPmN1cnJfZnVuYzsK KwlkdWtfdHZhbCAqdHYxOworCWR1a19pbnRfdCBpLCBuLCBuX2NoZWNrOworCisJbiA9IChkdWtf aW50X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgZi0+Y29uc3RzX2lkeCk7CisKKwl0djEgPSBEVUtf R0VUX1RWQUxfTkVHSURYKHRociwgLTEpOworCURVS19BU1NFUlQodHYxICE9IE5VTEwpOworCisj aWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJLyogRXhwbGljaXQgY2hlY2sgZm9yIGZhc3Rp bnQgZG93bmdyYWRlLiAqLworCURVS19UVkFMX0NIS0ZBU1RfSU5QTEFDRV9TTE9XKHR2MSk7Cisj ZW5kaWYKKworCS8qIFNhbml0eSB3b3JrYXJvdW5kIGZvciBoYW5kbGluZyBmdW5jdGlvbnMgd2l0 aCBhIGxhcmdlIG51bWJlciBvZgorCSAqIGNvbnN0YW50cyBhdCBsZWFzdCBzb21ld2hhdCByZWFz b25hYmx5LiAgT3RoZXJ3aXNlIGNoZWNraW5nIHdoZXRoZXIKKwkgKiB3ZSBhbHJlYWR5IGhhdmUg dGhlIGNvbnN0YW50IHdvdWxkIGdyb3cgdmVyeSBzbG93IChhcyBpdCBpcyBPKE5eMikpLgorCSAq LworCW5fY2hlY2sgPSAobiA+IERVS19fR0VUQ09OU1RfTUFYX0NPTlNUU19DSEVDSyA/IERVS19f R0VUQ09OU1RfTUFYX0NPTlNUU19DSEVDSyA6IG4pOworCWZvciAoaSA9IDA7IGkgPCBuX2NoZWNr OyBpKyspIHsKKwkJZHVrX3R2YWwgKnR2MiA9IERVS19IT0JKRUNUX0FfR0VUX1ZBTFVFX1BUUih0 aHItPmhlYXAsIGYtPmhfY29uc3RzLCBpKTsKKworCQkvKiBTdHJpY3QgZXF1YWxpdHkgaXMgTk9U IGVub3VnaCwgYmVjYXVzZSB3ZSBjYW5ub3QgdXNlIHRoZSBzYW1lCisJCSAqIGNvbnN0YW50IGZv ciBlLmcuICswIGFuZCAtMC4KKwkJICovCisJCWlmIChkdWtfanNfc2FtZXZhbHVlKHR2MSwgdHYy KSkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJldXNlZCBleGlzdGluZyBjb25zdGFudCBm b3IgJSFUIC0+IGNvbnN0IGluZGV4ICVsZCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVr X3R2YWwgKikgdHYxLCAobG9uZykgaSkpOworCQkJZHVrX3BvcCh0aHIpOworCQkJcmV0dXJuIChk dWtfcmVnY29uc3RfdCkgaSB8IChkdWtfcmVnY29uc3RfdCkgRFVLX19DT05TVF9NQVJLRVI7CisJ CX0KKwl9CisKKwlpZiAobiA+IERVS19fTUFYX0NPTlNUUykgeworCQlEVUtfRVJST1JfUkFOR0Uo Y29tcF9jdHgtPnRociwgRFVLX1NUUl9DT05TVF9MSU1JVCk7CisJCURVS19XT19OT1JFVFVSTihy ZXR1cm4gMDspOworCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJhbGxvY2F0aW5nIG5ldyBj b25zdGFudCBmb3IgJSFUIC0+IGNvbnN0IGluZGV4ICVsZCIsCisJICAgICAgICAgICAgICAgICAg ICAgKGR1a190dmFsICopIHR2MSwgKGxvbmcpIG4pKTsKKwkodm9pZCkgZHVrX3B1dF9wcm9wX2lu ZGV4KHRociwgZi0+Y29uc3RzX2lkeCwgKGR1a191YXJyaWR4X3QpIG4pOyAgLyogaW52YWxpZGF0 ZXMgdHYxLCB0djIgKi8KKwlyZXR1cm4gKGR1a19yZWdjb25zdF90KSBuIHwgKGR1a19yZWdjb25z dF90KSBEVUtfX0NPTlNUX01BUktFUjsKK30KKworRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19j b25zdF9uZWVkc19yZWZjb3VudChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3JlZ2Nv bnN0X3QgcmMpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVGRVJFTkNFX0NPVU5USU5HKQorCWR1 a19jb21waWxlcl9mdW5jICpmID0gJmNvbXBfY3R4LT5jdXJyX2Z1bmM7CisJZHVrX2Jvb2xfdCBy ZXQ7CisKKwlEVUtfQVNTRVJUKChyYyAmIERVS19fQ09OU1RfTUFSS0VSKSA9PSAwKTsgIC8qIGNh bGxlciByZW1vdmVzIGNvbnN0IG1hcmtlciAqLworCSh2b2lkKSBkdWtfZ2V0X3Byb3BfaW5kZXgo Y29tcF9jdHgtPnRociwgZi0+Y29uc3RzX2lkeCwgKGR1a191YXJyaWR4X3QpIHJjKTsKKwlyZXQg PSAhZHVrX2lzX251bWJlcihjb21wX2N0eC0+dGhyLCAtMSk7ICAvKiBub3cgb25seSBudW1iZXIv c3RyaW5nLCBzbyBjb25zZXJ2YXRpdmUgY2hlY2sgKi8KKwlkdWtfcG9wKGNvbXBfY3R4LT50aHIp OworCXJldHVybiByZXQ7CisjZWxzZQorCURVS19VTlJFRihjb21wX2N0eCk7CisJRFVLX1VOUkVG KHJjKTsKKwlEVUtfQVNTRVJUKChyYyAmIERVS19fQ09OU1RfTUFSS0VSKSA9PSAwKTsgIC8qIGNh bGxlciByZW1vdmVzIGNvbnN0IG1hcmtlciAqLworCXJldHVybiAwOworI2VuZGlmCit9CisKKy8q IEdldCB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgYW4gZHVrX2lzcGVjIHRvIGEgcmVnaXN0ZXIg b3IgY29uc3RhbnQuCisgKiBUaGUgY2FsbGVyIGNhbiBjb250cm9sIHRoZSByZXN1bHQgYnkgaW5k aWNhdGluZyB3aGV0aGVyIG9yIG5vdDoKKyAqCisgKiAgICgxKSBhIGNvbnN0YW50IGlzIGFsbG93 ZWQgKHNvbWV0aW1lcyB0aGUgY2FsbGVyIG5lZWRzIHRoZSByZXN1bHQgdG8KKyAqICAgICAgIGJl IGluIGEgcmVnaXN0ZXIpCisgKgorICogICAoMikgYSB0ZW1wb3JhcnkgcmVnaXN0ZXIgaXMgcmVx dWlyZWQgKHVzdWFsbHkgd2hlbiBjYWxsZXIgcmVxdWlyZXMKKyAqICAgICAgIHRoZSByZWdpc3Rl ciB0byBiZSBzYWZlbHkgbXV0YWJsZTsgbm9ybWFsbHkgZWl0aGVyIGEgYm91bmQKKyAqICAgICAg IHJlZ2lzdGVyIG9yIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyIGFyZSBib3RoIE9LKQorICoKKyAqICAg KDMpIGEgZm9yY2VkIHJlZ2lzdGVyIHRhcmdldCBuZWVkcyB0byBiZSB1c2VkCisgKgorICogQnl0 ZWNvZGUgbWF5IGJlIGVtaXR0ZWQgdG8gZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeSB2YWx1ZS4gIFRo ZSByZXR1cm4KKyAqIHZhbHVlIGlzIGVpdGhlciBhIHJlZ2lzdGVyIG9yIGEgY29uc3RhbnQuCisg Ki8KKworRFVLX0xPQ0FMCitkdWtfcmVnY29uc3RfdCBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3 KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfaXNwZWMgKngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19yZWdjb25zdF90IGZvcmNlZF9yZWcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtf aHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJk dWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3KCk6IHg9eyVsZDolbGQ6JSFUfSwgIgorCSAgICAgICAg ICAgICAgICAgICAgICJmb3JjZWRfcmVnPSVsZCwgZmxhZ3MgMHglMDhseDogYWxsb3dfY29uc3Q9 JWxkIHJlcXVpcmVfdGVtcD0lbGQgcmVxdWlyZV9zaG9ydD0lbGQiLAorCSAgICAgICAgICAgICAg ICAgICAgIChsb25nKSB4LT50LAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSB4LT5yZWdj b25zdCwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRo ciwgeC0+dmFsc3RhY2tfaWR4KSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgZm9yY2Vk X3JlZywKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgZmxhZ3MsCisJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpICgoZmxhZ3MgJiBEVUtfX0lWQUxfRkxBR19BTExPV19D T05TVCkgPyAxIDogMCksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgoZmxhZ3MgJiBE VUtfX0lWQUxfRkxBR19SRVFVSVJFX1RFTVApID8gMSA6IDApLAorCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSAoKGZsYWdzICYgRFVLX19JVkFMX0ZMQUdfUkVRVUlSRV9TSE9SVCkgPyAxIDog MCkpKTsKKworCXN3aXRjaCAoeC0+dCkgeworCWNhc2UgRFVLX0lTUEVDX1ZBTFVFOiB7CisJCWR1 a190dmFsICp0djsKKworCQl0diA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCB4LT52YWxzdGFj a19pZHgpOworCQlEVUtfQVNTRVJUKHR2ICE9IE5VTEwpOworCisJCXN3aXRjaCAoRFVLX1RWQUxf R0VUX1RBRyh0dikpIHsKKwkJY2FzZSBEVUtfVEFHX1VOREVGSU5FRDogeworCQkJLyogTm90ZTog YWx0aG91Z2ggdGhlcmUgaXMgbm8gJ3VuZGVmaW5lZCcgbGl0ZXJhbCwgdW5kZWZpbmVkCisJCQkg KiB2YWx1ZXMgY2FuIG9jY3VyIGR1cmluZyBjb21waWxhdGlvbiBhcyBhIHJlc3VsdCBvZiBlLmcu CisJCQkgKiB0aGUgJ3ZvaWQnIG9wZXJhdG9yLgorCQkJICovCisJCQlkdWtfcmVnY29uc3RfdCBk ZXN0ID0gKGZvcmNlZF9yZWcgPj0gMCA/IGZvcmNlZF9yZWcgOiBEVUtfX0FMTE9DVEVNUChjb21w X2N0eCkpOworCQkJZHVrX19lbWl0X2JjKGNvbXBfY3R4LCBEVUtfT1BfTERVTkRFRiwgZGVzdCk7 CisJCQlyZXR1cm4gZGVzdDsKKwkJfQorCQljYXNlIERVS19UQUdfTlVMTDogeworCQkJZHVrX3Jl Z2NvbnN0X3QgZGVzdCA9IChmb3JjZWRfcmVnID49IDAgPyBmb3JjZWRfcmVnIDogRFVLX19BTExP Q1RFTVAoY29tcF9jdHgpKTsKKwkJCWR1a19fZW1pdF9iYyhjb21wX2N0eCwgRFVLX09QX0xETlVM TCwgZGVzdCk7CisJCQlyZXR1cm4gZGVzdDsKKwkJfQorCQljYXNlIERVS19UQUdfQk9PTEVBTjog eworCQkJZHVrX3JlZ2NvbnN0X3QgZGVzdCA9IChmb3JjZWRfcmVnID49IDAgPyBmb3JjZWRfcmVn IDogRFVLX19BTExPQ1RFTVAoY29tcF9jdHgpKTsKKwkJCWR1a19fZW1pdF9iYyhjb21wX2N0eCwK KwkJCSAgICAgICAgICAgICAoRFVLX1RWQUxfR0VUX0JPT0xFQU4odHYpID8gRFVLX09QX0xEVFJV RSA6IERVS19PUF9MREZBTFNFKSwKKwkJCSAgICAgICAgICAgICBkZXN0KTsKKwkJCXJldHVybiBk ZXN0OworCQl9CisJCWNhc2UgRFVLX1RBR19QT0lOVEVSOiB7CisJCQlEVUtfVU5SRUFDSEFCTEUo KTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX1RBR19TVFJJTkc6IHsKKwkJCWR1a19oc3Ry aW5nICpoOworCQkJZHVrX3JlZ2NvbnN0X3QgZGVzdDsKKwkJCWR1a19yZWdjb25zdF90IGNvbnN0 aWR4OworCisJCQloID0gRFVLX1RWQUxfR0VUX1NUUklORyh0dik7CisJCQlEVUtfVU5SRUYoaCk7 CisJCQlEVUtfQVNTRVJUKGggIT0gTlVMTCk7CisKKyNpZiAwICAvKiBYWFg6IHRvIGJlIGltcGxl bWVudGVkPyAqLworCQkJLyogVXNlIHNwZWNpYWwgb3Bjb2RlcyB0byBsb2FkIHNob3J0IHN0cmlu Z3MgKi8KKwkJCWlmIChEVUtfSFNUUklOR19HRVRfQllURUxFTihoKSA8PSAyKSB7CisJCQkJLyog RW5jb2RlIGludG8gYSBzaW5nbGUgb3Bjb2RlICgxOCBiaXRzIGNhbiBlbmNvZGUgMS0yIGJ5dGVz ICsgbGVuZ3RoIGluZGljYXRvcikgKi8KKwkJCX0gZWxzZSBpZiAoRFVLX0hTVFJJTkdfR0VUX0JZ VEVMRU4oaCkgPD0gNikgeworCQkJCS8qIEVuY29kZSBpbnRvIGEgZG91YmxlIGNvbnN0YW50ICg1 MyBiaXRzIGNhbiBlbmNvZGUgNio4ID0gNDggYml0cyArIDMtYml0IGxlbmd0aCAqLworCQkJfQor I2VuZGlmCisJCQlkdWtfZHVwKHRociwgeC0+dmFsc3RhY2tfaWR4KTsKKwkJCWNvbnN0aWR4ID0g ZHVrX19nZXRjb25zdChjb21wX2N0eCk7CisKKwkJCWlmIChmbGFncyAmIERVS19fSVZBTF9GTEFH X0FMTE9XX0NPTlNUKSB7CisJCQkJcmV0dXJuIGNvbnN0aWR4OworCQkJfQorCisJCQlkZXN0ID0g KGZvcmNlZF9yZWcgPj0gMCA/IGZvcmNlZF9yZWcgOiBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCkp OworCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsIERVS19PUF9MRENPTlNULCBkZXN0LCBjb25z dGlkeCk7CisJCQlyZXR1cm4gZGVzdDsKKwkJfQorCQljYXNlIERVS19UQUdfT0JKRUNUOiB7CisJ CQlEVUtfVU5SRUFDSEFCTEUoKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX1RBR19CVUZG RVI6IHsKKwkJCURVS19VTlJFQUNIQUJMRSgpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtf VEFHX0xJR0hURlVOQzogeworCQkJRFVLX1VOUkVBQ0hBQkxFKCk7CisJCQlicmVhazsKKwkJfQor I2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQljYXNlIERVS19UQUdfRkFTVElOVDoKKyNl bmRpZgorCQlkZWZhdWx0OiB7CisJCQkvKiBudW1iZXIgKi8KKwkJCWR1a19yZWdjb25zdF90IGRl c3Q7CisJCQlkdWtfcmVnY29uc3RfdCBjb25zdGlkeDsKKwkJCWR1a19kb3VibGVfdCBkdmFsOwor CQkJZHVrX2ludDMyX3QgaXZhbDsKKworCQkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNfVU5VU0VE KHR2KSk7CisJCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05VTUJFUih0dikpOworCQkJZHZhbCA9 IERVS19UVkFMX0dFVF9OVU1CRVIodHYpOworCisJCQlpZiAoIShmbGFncyAmIERVS19fSVZBTF9G TEFHX0FMTE9XX0NPTlNUKSkgeworCQkJCS8qIEEgbnVtYmVyIGNhbiBiZSBsb2FkZWQgZWl0aGVy IHRocm91Z2ggYSBjb25zdGFudCwgdXNpbmcKKwkJCQkgKiBMRElOVCwgb3IgdXNpbmcgTERJTlQr TERJTlRYLiAgTERJTlQgaXMgYWx3YXlzIGEgc2l6ZSB3aW4sCisJCQkJICogTERJTlQrTERJTlRY IGlzIG5vdCBpZiB0aGUgY29uc3RhbnQgaXMgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKwkJCQkgKiBD dXJyZW50bHkgYWx3YXlzIHByZWZlciBMRElOVCtMRElOVFggb3ZlciBhIGRvdWJsZSBjb25zdGFu dC4KKwkJCQkgKi8KKworCQkJCWlmIChkdWtfaXNfd2hvbGVfZ2V0X2ludDMyX25vbmVnemVybyhk dmFsLCAmaXZhbCkpIHsKKwkJCQkJZGVzdCA9IChmb3JjZWRfcmVnID49IDAgPyBmb3JjZWRfcmVn IDogRFVLX19BTExPQ1RFTVAoY29tcF9jdHgpKTsKKwkJCQkJZHVrX19lbWl0X2xvYWRfaW50MzIo Y29tcF9jdHgsIGRlc3QsIGl2YWwpOworCQkJCQlyZXR1cm4gZGVzdDsKKwkJCQl9CisJCQl9CisK KwkJCWR1a19kdXAodGhyLCB4LT52YWxzdGFja19pZHgpOworCQkJY29uc3RpZHggPSBkdWtfX2dl dGNvbnN0KGNvbXBfY3R4KTsKKworCQkJaWYgKGZsYWdzICYgRFVLX19JVkFMX0ZMQUdfQUxMT1df Q09OU1QpIHsKKwkJCQlyZXR1cm4gY29uc3RpZHg7CisJCQl9IGVsc2UgeworCQkJCWRlc3QgPSAo Zm9yY2VkX3JlZyA+PSAwID8gZm9yY2VkX3JlZyA6IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KSk7 CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsIERVS19PUF9MRENPTlNULCBkZXN0LCBjb25z dGlkeCk7CisJCQkJcmV0dXJuIGRlc3Q7CisJCQl9CisJCX0KKwkJfSAgLyogZW5kIHN3aXRjaCAq LworCQlnb3RvIGZhaWxfaW50ZXJuYWw7ICAvKiBuZXZlciBoZXJlICovCisJfQorCWNhc2UgRFVL X0lTUEVDX1JFR0NPTlNUOiB7CisJCWlmIChmb3JjZWRfcmVnID49IDApIHsKKwkJCWlmIChEVUtf X0lTQ09OU1QoeC0+cmVnY29uc3QpKSB7CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsIERV S19PUF9MRENPTlNULCBmb3JjZWRfcmVnLCB4LT5yZWdjb25zdCk7CisJCQl9IGVsc2UgaWYgKHgt PnJlZ2NvbnN0ICE9IGZvcmNlZF9yZWcpIHsKKwkJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwg RFVLX09QX0xEUkVHLCBmb3JjZWRfcmVnLCB4LT5yZWdjb25zdCk7CisJCQl9IGVsc2UgeworCQkJ CTsgLyogYWxyZWFkeSBpbiBjb3JyZWN0IHJlZyAqLworCQkJfQorCQkJcmV0dXJuIGZvcmNlZF9y ZWc7CisJCX0KKworCQlEVUtfQVNTRVJUKGZvcmNlZF9yZWcgPCAwKTsKKwkJaWYgKERVS19fSVND T05TVCh4LT5yZWdjb25zdCkpIHsKKwkJCWlmICghKGZsYWdzICYgRFVLX19JVkFMX0ZMQUdfQUxM T1dfQ09OU1QpKSB7CisJCQkJZHVrX3JlZ2NvbnN0X3QgZGVzdCA9IERVS19fQUxMT0NURU1QKGNv bXBfY3R4KTsKKwkJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwgRFVLX09QX0xEQ09OU1QsIGRl c3QsIHgtPnJlZ2NvbnN0KTsKKwkJCQlyZXR1cm4gZGVzdDsKKwkJCX0KKwkJCXJldHVybiB4LT5y ZWdjb25zdDsKKwkJfQorCisJCURVS19BU1NFUlQoZm9yY2VkX3JlZyA8IDAgJiYgIURVS19fSVND T05TVCh4LT5yZWdjb25zdCkpOworCQlpZiAoKGZsYWdzICYgRFVLX19JVkFMX0ZMQUdfUkVRVUlS RV9URU1QKSAmJiAhRFVLX19JU1JFR19URU1QKGNvbXBfY3R4LCB4LT5yZWdjb25zdCkpIHsKKwkJ CWR1a19yZWdjb25zdF90IGRlc3QgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCQlkdWtf X2VtaXRfYV9iYyhjb21wX2N0eCwgRFVLX09QX0xEUkVHLCBkZXN0LCB4LT5yZWdjb25zdCk7CisJ CQlyZXR1cm4gZGVzdDsKKwkJfQorCQlyZXR1cm4geC0+cmVnY29uc3Q7CisJfQorCWRlZmF1bHQ6 IHsKKwkJYnJlYWs7ICAvKiBuZXZlciBoZXJlICovCisJfQorCX0KKworIGZhaWxfaW50ZXJuYWw6 CisJRFVLX0VSUk9SX0lOVEVSTkFMKHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7 Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19faXNwZWNfdG9mb3JjZWRyZWcoZHVrX2NvbXBpbGVy X2N0eCAqY29tcF9jdHgsIGR1a19pc3BlYyAqeCwgZHVrX3JlZ2NvbnN0X3QgZm9yY2VkX3JlZykg eworCURVS19BU1NFUlQoZm9yY2VkX3JlZyA+PSAwKTsKKwkodm9pZCkgZHVrX19pc3BlY190b3Jl Z2NvbnN0X3Jhdyhjb21wX2N0eCwgeCwgZm9yY2VkX3JlZywgMCAvKmZsYWdzKi8pOworfQorCisv KiBDb2VyY2UgYW4gZHVrX2l2YWx1ZSB0byBhICdwbGFpbicgdmFsdWUgYnkgZ2VuZXJhdGluZyB0 aGUgbmVjZXNzYXJ5CisgKiBhcml0aG1ldGljIG9wZXJhdGlvbnMsIHByb3BlcnR5IGFjY2Vzcywg b3IgdmFyaWFibGUgYWNjZXNzIGJ5dGVjb2RlLgorICogVGhlIGR1a19pdmFsdWUgYXJndW1lbnQg KCd4JykgaXMgY29udmVydGVkIGludG8gYSBwbGFpbiB2YWx1ZSBhcyBhCisgKiBzaWRlIGVmZmVj dC4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19pdmFsdWVfdG9wbGFpbl9yYXcoZHVrX2NvbXBp bGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKngsIGR1a19yZWdjb25zdF90IGZvcmNlZF9y ZWcpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKworCURVS19EREQoRFVL X0RERFBSSU5UKCJkdWtfX2l2YWx1ZV90b3BsYWluX3JhdygpOiB4PXt0PSVsZCxvcD0lbGQseDE9 eyVsZDolbGQ6JSFUfSx4Mj17JWxkOiVsZDolIVR9fSwgIgorCSAgICAgICAgICAgICAgICAgICAg ICJmb3JjZWRfcmVnPSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHgtPnQsIChs b25nKSB4LT5vcCwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgeC0+eDEudCwgKGxvbmcp IHgtPngxLnJlZ2NvbnN0LAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtf Z2V0X3R2YWwodGhyLCB4LT54MS52YWxzdGFja19pZHgpLAorCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSB4LT54Mi50LCAobG9uZykgeC0+eDIucmVnY29uc3QsCisJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIHgtPngyLnZhbHN0YWNrX2lkeCks CisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGZvcmNlZF9yZWcpKTsKKworCXN3aXRjaCAo eC0+dCkgeworCWNhc2UgRFVLX0lWQUxfUExBSU46IHsKKwkJcmV0dXJuOworCX0KKwkvKiBYWFg6 IHN1cHBvcnQgdW5hcnkgYXJpdGhtZXRpYyBpdmFsdWVzICh1c2VmdWw/KSAqLworCWNhc2UgRFVL X0lWQUxfQVJJVEg6IHsKKwkJZHVrX3JlZ2NvbnN0X3QgYXJnMTsKKwkJZHVrX3JlZ2NvbnN0X3Qg YXJnMjsKKwkJZHVrX3JlZ2NvbnN0X3QgZGVzdDsKKwkJZHVrX3R2YWwgKnR2MTsKKwkJZHVrX3R2 YWwgKnR2MjsKKworCQlEVUtfREREKERVS19ERERQUklOVCgiYXJpdGggdG8gcGxhaW4gY29udmVy c2lvbiIpKTsKKworCQkvKiBpbmxpbmUgYXJpdGhtZXRpYyBjaGVjayBmb3IgY29uc3RhbnQgdmFs dWVzICovCisJCS8qIFhYWDogdXNlIHRoZSBleGFjdGx5IHNhbWUgYXJpdGhtZXRpYyBmdW5jdGlv biBoZXJlIGFzIGluIGV4ZWN1dG9yICovCisJCWlmICh4LT54MS50ID09IERVS19JU1BFQ19WQUxV RSAmJiB4LT54Mi50ID09IERVS19JU1BFQ19WQUxVRSAmJiB4LT50ID09IERVS19JVkFMX0FSSVRI KSB7CisJCQl0djEgPSBEVUtfR0VUX1RWQUxfUE9TSURYKHRociwgeC0+eDEudmFsc3RhY2tfaWR4 KTsKKwkJCXR2MiA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCB4LT54Mi52YWxzdGFja19pZHgp OworCQkJRFVLX0FTU0VSVCh0djEgIT0gTlVMTCk7CisJCQlEVUtfQVNTRVJUKHR2MiAhPSBOVUxM KTsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImFyaXRoOiB0djE9JSFULCB0djI9JSFUIiwK KwkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSB0djEsCisJCQkgICAgICAgICAg ICAgICAgICAgICAoZHVrX3R2YWwgKikgdHYyKSk7CisKKwkJCWlmIChEVUtfVFZBTF9JU19OVU1C RVIodHYxKSAmJiBEVUtfVFZBTF9JU19OVU1CRVIodHYyKSkgeworCQkJCWR1a19kb3VibGVfdCBk MSA9IERVS19UVkFMX0dFVF9OVU1CRVIodHYxKTsKKwkJCQlkdWtfZG91YmxlX3QgZDIgPSBEVUtf VFZBTF9HRVRfTlVNQkVSKHR2Mik7CisJCQkJZHVrX2RvdWJsZV90IGQzOworCQkJCWR1a19ib29s X3QgYWNjZXB0X2ZvbGQgPSAxOworCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImFyaXRoIGlu bGluZSBjaGVjazogZDE9JWxmLCBkMj0lbGYsIG9wPSVsZCIsCisJCQkJICAgICAgICAgICAgICAg ICAgICAgKGRvdWJsZSkgZDEsIChkb3VibGUpIGQyLCAobG9uZykgeC0+b3ApKTsKKwkJCQlzd2l0 Y2ggKHgtPm9wKSB7CisJCQkJY2FzZSBEVUtfT1BfQUREOiB7CisJCQkJCWQzID0gZDEgKyBkMjsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNhc2UgRFVLX09QX1NVQjogeworCQkJCQlkMyA9IGQx IC0gZDI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljYXNlIERVS19PUF9NVUw6IHsKKwkJCQkJ ZDMgPSBkMSAqIGQyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBEVUtfT1BfRElWOiB7 CisJCQkJCS8qIERpdmlzaW9uLWJ5LXplcm8gaXMgdW5kZWZpbmVkCisJCQkJCSAqIGJlaGF2aW9y LCBzbyByZWx5IG9uIGEgaGVscGVyLgorCQkJCQkgKi8KKwkJCQkJZDMgPSBkdWtfZG91YmxlX2Rp dihkMSwgZDIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBEVUtfT1BfRVhQOiB7CisJ CQkJCWQzID0gKGR1a19kb3VibGVfdCkgZHVrX2pzX2FyaXRoX3BvdygoZG91YmxlKSBkMSwgKGRv dWJsZSkgZDIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZGVmYXVsdDogeworCQkJCQlkMyA9 IDAuMDsgIC8qIFdvbid0IGJlIHVzZWQsIGJ1dCBzaWxlbmNlIE1TVkMgL1c0IHdhcm5pbmcuICov CisJCQkJCWFjY2VwdF9mb2xkID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCX0KKworCQkJ CWlmIChhY2NlcHRfZm9sZCkgeworCQkJCQlkdWtfZG91YmxlX3VuaW9uIGR1OworCQkJCQlkdS5k ID0gZDM7CisJCQkJCURVS19EQkxVTklPTl9OT1JNQUxJWkVfTkFOX0NIRUNLKCZkdSk7CisJCQkJ CWQzID0gZHUuZDsKKworCQkJCQl4LT50ID0gRFVLX0lWQUxfUExBSU47CisJCQkJCURVS19BU1NF UlQoeC0+eDEudCA9PSBEVUtfSVNQRUNfVkFMVUUpOworCQkJCQlEVUtfVFZBTF9TRVRfTlVNQkVS KHR2MSwgZDMpOyAgLyogb2xkIHZhbHVlIGlzIG51bWJlcjogbm8gcmVmY291bnQgKi8KKwkJCQkJ cmV0dXJuOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoeC0+b3AgPT0gRFVLX09QX0FERCAmJiBEVUtf VFZBTF9JU19TVFJJTkcodHYxKSAmJiBEVUtfVFZBTF9JU19TVFJJTkcodHYyKSkgeworCQkJCS8q IElubGluZSBzdHJpbmcgY29uY2F0ZW5hdGlvbi4gIE5vIG5lZWQgdG8gY2hlY2sgZm9yCisJCQkJ ICogc3ltYm9scywgYXMgYWxsIGlucHV0cyBhcmUgdmFsaWQgRUNNQVNjcmlwdCBzdHJpbmdzLgor CQkJCSAqLworCQkJCWR1a19kdXAodGhyLCB4LT54MS52YWxzdGFja19pZHgpOworCQkJCWR1a19k dXAodGhyLCB4LT54Mi52YWxzdGFja19pZHgpOworCQkJCWR1a19jb25jYXQodGhyLCAyKTsKKwkJ CQlkdWtfcmVwbGFjZSh0aHIsIHgtPngxLnZhbHN0YWNrX2lkeCk7CisJCQkJeC0+dCA9IERVS19J VkFMX1BMQUlOOworCQkJCURVS19BU1NFUlQoeC0+eDEudCA9PSBEVUtfSVNQRUNfVkFMVUUpOwor CQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWFyZzEgPSBkdWtfX2lzcGVjX3RvcmVnY29uc3Rf cmF3KGNvbXBfY3R4LCAmeC0+eDEsIC0xLCBEVUtfX0lWQUxfRkxBR19BTExPV19DT05TVCB8IERV S19fSVZBTF9GTEFHX1JFUVVJUkVfU0hPUlQgLypmbGFncyovKTsKKwkJYXJnMiA9IGR1a19faXNw ZWNfdG9yZWdjb25zdF9yYXcoY29tcF9jdHgsICZ4LT54MiwgLTEsIERVS19fSVZBTF9GTEFHX0FM TE9XX0NPTlNUIHwgRFVLX19JVkFMX0ZMQUdfUkVRVUlSRV9TSE9SVCAvKmZsYWdzKi8pOworCisJ CS8qIElmIGZvcmNlZCByZWcsIHVzZSBpdCBhcyBkZXN0aW5hdGlvbi4gIE90aGVyd2lzZSB0cnkg dG8KKwkJICogdXNlIGVpdGhlciBjb2VyY2VkIGlzcGVjIGlmIGl0IGlzIGEgdGVtcG9yYXJ5Lgor CQkgKi8KKwkJaWYgKGZvcmNlZF9yZWcgPj0gMCkgeworCQkJZGVzdCA9IGZvcmNlZF9yZWc7CisJ CX0gZWxzZSBpZiAoRFVLX19JU1JFR19URU1QKGNvbXBfY3R4LCBhcmcxKSkgeworCQkJZGVzdCA9 IGFyZzE7CisJCX0gZWxzZSBpZiAoRFVLX19JU1JFR19URU1QKGNvbXBfY3R4LCBhcmcyKSkgewor CQkJZGVzdCA9IGFyZzI7CisJCX0gZWxzZSB7CisJCQlkZXN0ID0gRFVLX19BTExPQ1RFTVAoY29t cF9jdHgpOworCQl9CisKKwkJRFVLX0FTU0VSVChEVUtfX0lTUkVHKGRlc3QpKTsKKwkJZHVrX19l bWl0X2FfYl9jKGNvbXBfY3R4LCB4LT5vcCB8IERVS19fRU1JVF9GTEFHX0JDX1JFR0NPTlNULCBk ZXN0LCBhcmcxLCBhcmcyKTsKKworCQlkdWtfX2l2YWx1ZV9yZWdjb25zdCh4LCBkZXN0KTsKKwkJ cmV0dXJuOworCX0KKwljYXNlIERVS19JVkFMX1BST1A6IHsKKwkJLyogWFhYOiB2ZXJ5IHNpbWls YXIgdG8gRFVLX0lWQUxfQVJJVEggLSBtZXJnZT8gKi8KKwkJZHVrX3JlZ2NvbnN0X3QgYXJnMTsK KwkJZHVrX3JlZ2NvbnN0X3QgYXJnMjsKKwkJZHVrX3JlZ2NvbnN0X3QgZGVzdDsKKworCQkvKiBO ZWVkIGEgc2hvcnQgcmVnL2NvbnN0LCBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbXV0YWJsZSB0ZW1w LiAqLworCQlhcmcxID0gZHVrX19pc3BlY190b3JlZ2NvbnN0X3Jhdyhjb21wX2N0eCwgJngtPngx LCAtMSwgRFVLX19JVkFMX0ZMQUdfQUxMT1dfQ09OU1QgfCBEVUtfX0lWQUxfRkxBR19SRVFVSVJF X1NIT1JUIC8qZmxhZ3MqLyk7CisJCWFyZzIgPSBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3KGNv bXBfY3R4LCAmeC0+eDIsIC0xLCBEVUtfX0lWQUxfRkxBR19BTExPV19DT05TVCB8IERVS19fSVZB TF9GTEFHX1JFUVVJUkVfU0hPUlQgLypmbGFncyovKTsKKworCQkvKiBQaWNrIGEgZGVzdGluYXRp b24gcmVnaXN0ZXIuICBJZiBlaXRoZXIgYmFzZSB2YWx1ZSBvciBrZXkKKwkJICogaGFwcGVucyB0 byBiZSBhIHRlbXAgdmFsdWUsIHJldXNlIGl0IGFzIHRoZSBkZXN0aW5hdGlvbi4KKwkJICoKKwkJ ICogWFhYOiBUaGUgdGVtcCBtdXN0IGJlIGEgIm11dGFibGUiIG9uZSwgaS5lLiBzdWNoIHRoYXQg bm8KKwkJICogb3RoZXIgZXhwcmVzc2lvbiBpcyB1c2luZyBpdCBhbnltb3JlLiAgSGVyZSB0aGlz IHNob3VsZCBiZQorCQkgKiB0aGUgY2FzZSBiZWNhdXNlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5 IGFjY2VzcyBleHByZXNzaW9uCisJCSAqIGlzIG5laXRoZXIgdGhlIGJhc2Ugbm9yIHRoZSBrZXks IGJ1dCB0aGUgbG9va3VwIHJlc3VsdC4KKwkJICovCisKKwkJaWYgKGZvcmNlZF9yZWcgPj0gMCkg eworCQkJZGVzdCA9IGZvcmNlZF9yZWc7CisJCX0gZWxzZSBpZiAoRFVLX19JU1JFR19URU1QKGNv bXBfY3R4LCBhcmcxKSkgeworCQkJZGVzdCA9IGFyZzE7CisJCX0gZWxzZSBpZiAoRFVLX19JU1JF R19URU1QKGNvbXBfY3R4LCBhcmcyKSkgeworCQkJZGVzdCA9IGFyZzI7CisJCX0gZWxzZSB7CisJ CQlkZXN0ID0gRFVLX19BTExPQ1RFTVAoY29tcF9jdHgpOworCQl9CisKKwkJZHVrX19lbWl0X2Ff Yl9jKGNvbXBfY3R4LAorCQkgICAgICAgICAgICAgICAgRFVLX09QX0dFVFBST1AgfCBEVUtfX0VN SVRfRkxBR19CQ19SRUdDT05TVCwKKwkJICAgICAgICAgICAgICAgIGRlc3QsCisJCSAgICAgICAg ICAgICAgICBhcmcxLAorCQkgICAgICAgICAgICAgICAgYXJnMik7CisKKwkJZHVrX19pdmFsdWVf cmVnY29uc3QoeCwgZGVzdCk7CisJCXJldHVybjsKKwl9CisJY2FzZSBEVUtfSVZBTF9WQVI6IHsK KwkJLyogeDEgbXVzdCBiZSBhIHN0cmluZyAqLworCQlkdWtfcmVnY29uc3RfdCBkZXN0OworCQlk dWtfcmVnY29uc3RfdCByZWdfdmFyYmluZDsKKwkJZHVrX3JlZ2NvbnN0X3QgcmNfdmFybmFtZTsK KworCQlEVUtfQVNTRVJUKHgtPngxLnQgPT0gRFVLX0lTUEVDX1ZBTFVFKTsKKworCQlkdWtfZHVw KHRociwgeC0+eDEudmFsc3RhY2tfaWR4KTsKKwkJaWYgKGR1a19fbG9va3VwX2xocyhjb21wX2N0 eCwgJnJlZ192YXJiaW5kLCAmcmNfdmFybmFtZSkpIHsKKwkJCWR1a19faXZhbHVlX3JlZ2NvbnN0 KHgsIHJlZ192YXJiaW5kKTsKKwkJfSBlbHNlIHsKKwkJCWRlc3QgPSAoZm9yY2VkX3JlZyA+PSAw ID8gZm9yY2VkX3JlZyA6IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KSk7CisJCQlkdWtfX2VtaXRf YV9iYyhjb21wX2N0eCwgRFVLX09QX0dFVFZBUiwgZGVzdCwgcmNfdmFybmFtZSk7CisJCQlkdWtf X2l2YWx1ZV9yZWdjb25zdCh4LCBkZXN0KTsKKwkJfQorCQlyZXR1cm47CisJfQorCWNhc2UgRFVL X0lWQUxfTk9ORToKKwlkZWZhdWx0OiB7CisJCURVS19EKERVS19EUFJJTlQoImludmFsaWQgaXZh bHVlIHR5cGU6ICVsZCIsIChsb25nKSB4LT50KSk7CisJCWJyZWFrOworCX0KKwl9CisKKwlEVUtf RVJST1JfSU5URVJOQUwodGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKy8q IGV2YWx1YXRlIHRvIHBsYWluIHZhbHVlLCBubyBmb3JjZWQgcmVnaXN0ZXIgKHRlbXAvYm91bmQg cmVnIGJvdGggb2spICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2l2YWx1ZV90b3BsYWluKGR1a19j b21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICp4KSB7CisJZHVrX19pdmFsdWVfdG9w bGFpbl9yYXcoY29tcF9jdHgsIHgsIC0xIC8qZm9yY2VkX3JlZyovKTsKK30KKworLyogZXZhbHVh dGUgdG8gZmluYWwgZm9ybSAoZS5nLiBjb2VyY2UgR0VUUFJPUCB0byBjb2RlKSwgdGhyb3cgYXdh eSB0ZW1wICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2l2YWx1ZV90b3BsYWluX2lnbm9yZShkdWtf Y29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqeCkgeworCWR1a19yZWdjb25zdF90 IHRlbXA7CisKKwkvKiBJZiBkdWtfX2l2YWx1ZV90b3BsYWluX3JhdygpIGFsbG9jYXRlcyBhIHRl bXAsIGZvcmdldCBpdCBhbmQKKwkgKiByZXN0b3JlIG5leHQgdGVtcCBzdGF0ZS4KKwkgKi8KKwl0 ZW1wID0gRFVLX19HRVRURU1QKGNvbXBfY3R4KTsKKwlkdWtfX2l2YWx1ZV90b3BsYWluX3Jhdyhj b21wX2N0eCwgeCwgLTEgLypmb3JjZWRfcmVnKi8pOworCURVS19fU0VUVEVNUChjb21wX2N0eCwg dGVtcCk7Cit9CisKKy8qIENvZXJjZSBhbiBkdWtfaXZhbHVlIHRvIGEgcmVnaXN0ZXIgb3IgY29u c3RhbnQ7IHJlc3VsdCByZWdpc3RlciBtYXkKKyAqIGJlIGEgdGVtcCBvciBhIGJvdW5kIHJlZ2lz dGVyLgorICoKKyAqIFRoZSBkdWtfaXZhbHVlIGFyZ3VtZW50ICgneCcpIGlzIGNvbnZlcnRlZCBp bnRvIGEgcmVnY29uc3QgYXMgYQorICogc2lkZSBlZmZlY3QuCisgKi8KK0RVS19MT0NBTAorZHVr X3JlZ2NvbnN0X3QgZHVrX19pdmFsdWVfdG9yZWdjb25zdF9yYXcoZHVrX2NvbXBpbGVyX2N0eCAq Y29tcF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf aXZhbHVlICp4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVr X3JlZ2NvbnN0X3QgZm9yY2VkX3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0g Y29tcF9jdHgtPnRocjsKKwlkdWtfcmVnY29uc3RfdCByZWc7CisJRFVLX1VOUkVGKHRocik7CisK KwlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19pdmFsdWVfdG9yZWdjb25zdF9yYXcoKTogeD17 dD0lbGQsb3A9JWxkLHgxPXslbGQ6JWxkOiUhVH0seDI9eyVsZDolbGQ6JSFUfX0sICIKKwkgICAg ICAgICAgICAgICAgICAgICAiZm9yY2VkX3JlZz0lbGQsIGZsYWdzIDB4JTA4bHg6IGFsbG93X2Nv bnN0PSVsZCByZXF1aXJlX3RlbXA9JWxkIHJlcXVpcmVfc2hvcnQ9JWxkIiwKKwkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgeC0+dCwgKGxvbmcpIHgtPm9wLAorCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSB4LT54MS50LCAobG9uZykgeC0+eDEucmVnY29uc3QsCisJICAgICAgICAgICAg ICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIHgtPngxLnZhbHN0YWNrX2lk eCksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHgtPngyLnQsIChsb25nKSB4LT54Mi5y ZWdjb25zdCwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFs KHRociwgeC0+eDIudmFsc3RhY2tfaWR4KSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykg Zm9yY2VkX3JlZywKKwkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgZmxhZ3Ms CisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgoZmxhZ3MgJiBEVUtfX0lWQUxfRkxBR19B TExPV19DT05TVCkgPyAxIDogMCksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgoZmxh Z3MgJiBEVUtfX0lWQUxfRkxBR19SRVFVSVJFX1RFTVApID8gMSA6IDApLAorCSAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAoKGZsYWdzICYgRFVLX19JVkFMX0ZMQUdfUkVRVUlSRV9TSE9SVCkg PyAxIDogMCkpKTsKKworCS8qIGZpcnN0IGNvZXJjZSB0byBhIHBsYWluIHZhbHVlICovCisJZHVr X19pdmFsdWVfdG9wbGFpbl9yYXcoY29tcF9jdHgsIHgsIGZvcmNlZF9yZWcpOworCURVS19BU1NF UlQoeC0+dCA9PSBEVUtfSVZBTF9QTEFJTik7CisKKwkvKiB0aGVuIHRvIGEgcmVnaXN0ZXIgKi8K KwlyZWcgPSBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3KGNvbXBfY3R4LCAmeC0+eDEsIGZvcmNl ZF9yZWcsIGZsYWdzKTsKKwlkdWtfX2l2YWx1ZV9yZWdjb25zdCh4LCByZWcpOworCisJcmV0dXJu IHJlZzsKK30KKworRFVLX0xPQ0FMIGR1a19yZWdjb25zdF90IGR1a19faXZhbHVlX3RvcmVnKGR1 a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICp4KSB7CisJcmV0dXJuIGR1a19f aXZhbHVlX3RvcmVnY29uc3RfcmF3KGNvbXBfY3R4LCB4LCAtMSwgMCAvKmZsYWdzKi8pOworfQor CisjaWYgMCAgLyogdW51c2VkICovCitEVUtfTE9DQUwgZHVrX3JlZ2NvbnN0X3QgZHVrX19pdmFs dWVfdG90ZW1wKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICp4KSB7CisJ cmV0dXJuIGR1a19faXZhbHVlX3RvcmVnY29uc3RfcmF3KGNvbXBfY3R4LCB4LCAtMSwgRFVLX19J VkFMX0ZMQUdfUkVRVUlSRV9URU1QIC8qZmxhZ3MqLyk7Cit9CisjZW5kaWYKKworRFVLX0xPQ0FM IHZvaWQgZHVrX19pdmFsdWVfdG9mb3JjZWRyZWcoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19pdmFsdWUgKngsIGR1a19pbnRfdCBmb3JjZWRfcmVnKSB7CisJRFVLX0FTU0VSVChmb3Jj ZWRfcmVnID49IDApOworCSh2b2lkKSBkdWtfX2l2YWx1ZV90b3JlZ2NvbnN0X3Jhdyhjb21wX2N0 eCwgeCwgZm9yY2VkX3JlZywgMCAvKmZsYWdzKi8pOworfQorCitEVUtfTE9DQUwgZHVrX3JlZ2Nv bnN0X3QgZHVrX19pdmFsdWVfdG9yZWdjb25zdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwg ZHVrX2l2YWx1ZSAqeCkgeworCXJldHVybiBkdWtfX2l2YWx1ZV90b3JlZ2NvbnN0X3Jhdyhjb21w X2N0eCwgeCwgLTEsIERVS19fSVZBTF9GTEFHX0FMTE9XX0NPTlNUIC8qZmxhZ3MqLyk7Cit9CisK K0RVS19MT0NBTCBkdWtfcmVnY29uc3RfdCBkdWtfX2l2YWx1ZV90b3RlbXBjb25zdChkdWtfY29t cGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqeCkgeworCXJldHVybiBkdWtfX2l2YWx1 ZV90b3JlZ2NvbnN0X3Jhdyhjb21wX2N0eCwgeCwgLTEsIERVS19fSVZBTF9GTEFHX0FMTE9XX0NP TlNUIHwgRFVLX19JVkFMX0ZMQUdfUkVRVUlSRV9URU1QIC8qZmxhZ3MqLyk7Cit9CisKKy8qIFRo ZSBpc3N1ZXMgYmVsb3cgY2FuIGJlIHNvbHZlZCB3aXRoIGJldHRlciBmbGFncyAqLworCisvKiBY WFg6IG1hbnkgb3BlcmF0aW9ucyBhY3R1YWxseSB3YW50IHRvZm9yY2VkdGVtcCgpIC0tIGJyYW5k IG5ldyB0ZW1wPyAqLworLyogWFhYOiBuZWVkIGEgdG9wbGFpbl9pZ25vcmUoKSB3aGljaCB3aWxs IG9ubHkgY29lcmNlIGEgdmFsdWUgdG8gYSB0ZW1wCisgKiByZWdpc3RlciBpZiBpdCBtaWdodCBo YXZlIGEgc2lkZSBlZmZlY3QuICBTaWRlLWVmZmVjdCBmcmVlIHZhbHVlcyBkbyBub3QKKyAqIG5l ZWQgdG8gYmUgY29lcmNlZC4KKyAqLworCisvKgorICogIElkZW50aWZpZXIgaGFuZGxpbmcKKyAq LworCitEVUtfTE9DQUwgZHVrX3JlZ2NvbnN0X3QgZHVrX19sb29rdXBfYWN0aXZlX3JlZ2lzdGVy X2JpbmRpbmcoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgpIHsKKwlkdWtfaHRocmVhZCAqdGhy ID0gY29tcF9jdHgtPnRocjsKKwlkdWtfaHN0cmluZyAqaF92YXJuYW1lOworCWR1a19yZWdjb25z dF90IHJldDsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJyZXNvbHZpbmcgaWRlbnRpZmllciBy ZWZlcmVuY2UgdG8gJyUhVCciLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBk dWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKworCS8qCisJICogIFNwZWNpYWwgbmFtZSBoYW5kbGlu ZworCSAqLworCisJaF92YXJuYW1lID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCAtMSk7CisKKwlp ZiAoaF92YXJuYW1lID09IERVS19IVEhSRUFEX1NUUklOR19MQ19BUkdVTUVOVFModGhyKSkgewor CQlEVUtfREREKERVS19ERERQUklOVCgiZmxhZ2dpbmcgZnVuY3Rpb24gYXMgYWNjZXNzaW5nICdh cmd1bWVudHMnIikpOworCQljb21wX2N0eC0+Y3Vycl9mdW5jLmlkX2FjY2Vzc19hcmd1bWVudHMg PSAxOworCX0KKworCS8qCisJICogIEluc2lkZSBvbmUgb3IgbW9yZSAnd2l0aCcgc3RhdGVtZW50 cyBmYWxsIGJhY2sgdG8gc2xvdyBwYXRoIGFsd2F5cy4KKwkgKiAgKFNlZSBlLmcuIHRlc3Qtc3Rt dC13aXRoLmpzLikKKwkgKi8KKworCWlmIChjb21wX2N0eC0+Y3Vycl9mdW5jLndpdGhfZGVwdGgg PiAwKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJpZGVudGlmaWVyIGxvb2t1cCBpbnNpZGUg YSAnd2l0aCcgLT4gZmFsbCBiYWNrIHRvIHNsb3cgcGF0aCIpKTsKKwkJZ290byBzbG93X3BhdGhf b3duOworCX0KKworCS8qCisJICogIEFueSBjYXRjaCBiaW5kaW5ncyAoImNhdGNoIChlKSIpIGFs c28gYWZmZWN0IGlkZW50aWZpZXIgYmluZGluZy4KKwkgKgorCSAqICBDdXJyZW50bHksIHRoZSB2 YXJtYXAgaXMgbW9kaWZpZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2F0Y2gKKwkgKiAgY2xh dXNlIHRvIGVuc3VyZSBhbnkgaWRlbnRpZmllciBhY2Nlc3NlcyB3aXRoIHRoZSBjYXRjaCB2YXJp YWJsZQorCSAqICBuYW1lIHdpbGwgdXNlIHNsb3cgcGF0aC4KKwkgKi8KKworCWR1a19nZXRfcHJv cCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMudmFybWFwX2lkeCk7CisJaWYgKGR1a19pc19udW1i ZXIodGhyLCAtMSkpIHsKKwkJcmV0ID0gZHVrX3RvX2ludCh0aHIsIC0xKTsKKwkJZHVrX3BvcCh0 aHIpOworCX0gZWxzZSB7CisJCWR1a19wb3AodGhyKTsKKwkJaWYgKGNvbXBfY3R4LT5jdXJyX2Z1 bmMuY2F0Y2hfZGVwdGggPiAwIHx8IGNvbXBfY3R4LT5jdXJyX2Z1bmMud2l0aF9kZXB0aCA+IDAp IHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJzbG93IHBhdGggYWNjZXNzIGZyb20gaW5zaWRl IGEgdHJ5LWNhdGNoIG9yIHdpdGggbmVlZHMgX1Zhcm1hcCIpKTsKKwkJCWdvdG8gc2xvd19wYXRo X293bjsKKwkJfSBlbHNlIHsKKwkJCS8qIEluIHRoaXMgY2FzZSB3ZSdyZSBkb2luZyBhIHZhcmlh YmxlIGxvb2t1cCB0aGF0IGRvZXNuJ3QKKwkJCSAqIG1hdGNoIG91ciBvd24gdmFyaWFibGVzLCBz byBfVmFybWFwIHdvbid0IGJlIG5lZWRlZCBhdAorCQkJICogcnVuIHRpbWUuCisJCQkgKi8KKwkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJzbG93IHBhdGggYWNjZXNzIG91dHNpZGUgb2YgdHJ5LWNh dGNoIGFuZCB3aXRoLCBubyBuZWVkIGZvciBfVmFybWFwIikpOworCQkJZ290byBzbG93X3BhdGhf bm90b3duOworCQl9CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoImlkZW50aWZpZXIgbG9v a3VwIC0+IHJlZyAlbGQiLCAobG9uZykgcmV0KSk7CisJcmV0dXJuIHJldDsKKworIHNsb3dfcGF0 aF9ub3Rvd246CisJRFVLX0RERChEVUtfREREUFJJTlQoImlkZW50aWZpZXIgbG9va3VwIC0+IHNs b3cgcGF0aCwgbm90IG93biB2YXJpYWJsZSIpKTsKKworCWNvbXBfY3R4LT5jdXJyX2Z1bmMuaWRf YWNjZXNzX3Nsb3cgPSAxOworCXJldHVybiAoZHVrX3JlZ2NvbnN0X3QpIC0xOworCisgc2xvd19w YXRoX293bjoKKwlEVUtfREREKERVS19ERERQUklOVCgiaWRlbnRpZmllciBsb29rdXAgLT4gc2xv dyBwYXRoLCBtYXkgYmUgb3duIHZhcmlhYmxlIikpOworCisJY29tcF9jdHgtPmN1cnJfZnVuYy5p ZF9hY2Nlc3Nfc2xvdyA9IDE7CisJY29tcF9jdHgtPmN1cnJfZnVuYy5pZF9hY2Nlc3Nfc2xvd19v d24gPSAxOworCXJldHVybiAoZHVrX3JlZ2NvbnN0X3QpIC0xOworfQorCisvKiBMb29rdXAgYW4g aWRlbnRpZmllciBuYW1lIGluIHRoZSBjdXJyZW50IHZhcm1hcCwgaW5kaWNhdGluZyB3aGV0aGVy IHRoZQorICogaWRlbnRpZmllciBpcyByZWdpc3Rlci1ib3VuZCBhbmQgaWYgbm90LCBhbGxvY2F0 aW5nIGEgY29uc3RhbnQgZm9yIHRoZQorICogaWRlbnRpZmllciBuYW1lLiAgUmV0dXJucyAxIGlm IHJlZ2lzdGVyLWJvdW5kLCAwIG90aGVyd2lzZS4gIENhbGxlciBjYW4KKyAqIGFsc28gY2hlY2sg KG91dF9yZWdfdmFyYmluZCA+PSAwKSB0byBjaGVjayB3aGV0aGVyIG9yIG5vdCBpZGVudGlmaWVy IGlzCisgKiByZWdpc3RlciBib3VuZC4gIFRoZSBjYWxsZXIgbXVzdCBOT1QgdXNlIG91dF9yY192 YXJuYW1lIGF0IGFsbCB1bmxlc3MKKyAqIHJldHVybiBjb2RlIGlzIDAgb3Igb3V0X3JlZ192YXJi aW5kIGlzIDwgMDsgdGhpcyBpcyBiZWN1YXNlIG91dF9yY192YXJuYW1lCisgKiBpcyB1bnNpZ25l ZCBhbmQgZG9lc24ndCBoYXZlIGEgInVudXNlZCIgLyBub25lIHZhbHVlLgorICovCitEVUtfTE9D QUwgZHVrX2Jvb2xfdCBkdWtfX2xvb2t1cF9saHMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19yZWdjb25zdF90ICpvdXRfcmVnX3ZhcmJpbmQsIGR1a19yZWdjb25zdF90ICpvdXRfcmNf dmFybmFtZSkgeworCWR1a19odGhyZWFkICp0aHIgPSBjb21wX2N0eC0+dGhyOworCWR1a19yZWdj b25zdF90IHJlZ192YXJiaW5kOworCWR1a19yZWdjb25zdF90IHJjX3Zhcm5hbWU7CisKKwkvKiBb IC4uLiB2YXJuYW1lIF0gKi8KKworCWR1a19kdXBfdG9wKHRocik7CisJcmVnX3ZhcmJpbmQgPSBk dWtfX2xvb2t1cF9hY3RpdmVfcmVnaXN0ZXJfYmluZGluZyhjb21wX2N0eCk7CisKKwlpZiAocmVn X3ZhcmJpbmQgPj0gMCkgeworCQkqb3V0X3JlZ192YXJiaW5kID0gcmVnX3ZhcmJpbmQ7CisJCSpv dXRfcmNfdmFybmFtZSA9IDA7ICAvKiBkdWtfcmVnY29uc3RfdCBpcyB1bnNpZ25lZCwgc28gdXNl IDAgYXMgZHVtbXkgdmFsdWUgKGlnbm9yZWQgYnkgY2FsbGVyKSAqLworCQlkdWtfcG9wKHRocik7 CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJjX3Zhcm5hbWUgPSBkdWtfX2dldGNvbnN0KGNv bXBfY3R4KTsKKwkJKm91dF9yZWdfdmFyYmluZCA9IC0xOworCQkqb3V0X3JjX3Zhcm5hbWUgPSBy Y192YXJuYW1lOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiAgTGFiZWwgaGFuZGxpbmcK KyAqCisgKiAgTGFiZWxzIGFyZSBpbml0aWFsbHkgYWRkZWQgd2l0aCBmbGFncyBwcm9oaWJpdGlu ZyBib3RoIGJyZWFrIGFuZCBjb250aW51ZS4KKyAqICBXaGVuIHRoZSBzdGF0ZW1lbnQgdHlwZSBp cyBmaW5hbGx5IHVuY292ZXJlZCAoYWZ0ZXIgcG90ZW50aWFsbHkgbXVsdGlwbGUKKyAqICBsYWJl bHMpLCBhbGwgdGhlIGxhYmVscyBhcmUgdXBkYXRlZCB0byBhbGxvdy9wcm9oaWJpdCBicmVhayBh bmQgY29udGludWUuCisgKi8KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19hZGRfbGFiZWwoZHVrX2Nv bXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19oc3RyaW5nICpoX2xhYmVsLCBkdWtfaW50X3QgcGNf bGFiZWwsIGR1a19pbnRfdCBsYWJlbF9pZCkgeworCWR1a19odGhyZWFkICp0aHIgPSBjb21wX2N0 eC0+dGhyOworCWR1a19zaXplX3QgbjsKKwlkdWtfc2l6ZV90IG5ld19zaXplOworCWR1a191aW50 OF90ICpwOworCWR1a19sYWJlbGluZm8gKmxpX3N0YXJ0LCAqbGk7CisKKwkvKiBEdXBsaWNhdGUg KHNoYWRvd2luZykgbGFiZWxzIGFyZSBub3QgYWxsb3dlZCwgZXhjZXB0IGZvciB0aGUgZW1wdHkK KwkgKiBsYWJlbHMgKHdoaWNoIGFyZSB1c2VkIGFzIGRlZmF1bHQgbGFiZWxzIGZvciBzd2l0Y2gg YW5kIGl0ZXJhdGlvbgorCSAqIHN0YXRlbWVudHMpLgorCSAqCisJICogV2UgY291bGQgYWxzbyBh bGxvdyBzaGFkb3dpbmcgb2Ygbm9uLWVtcHR5IHBlbmRpbmcgbGFiZWxzIHdpdGhvdXQgYW55CisJ ICogb3RoZXIgaXNzdWVzIHRoYW4gYnJlYWtpbmcgdGhlIHJlcXVpcmVkIGxhYmVsIHNoYWRvd2lu ZyByZXF1aXJlbWVudHMKKwkgKiBvZiB0aGUgRTUgc3BlY2lmaWNhdGlvbiwgc2VlIFNlY3Rpb24g MTIuMTIuCisJICovCisKKwlwID0gKGR1a191aW50OF90ICopIERVS19IQlVGRkVSX0RZTkFNSUNf R0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgY29tcF9jdHgtPmN1cnJfZnVuYy5oX2xhYmVsaW5mb3Mp OworCWxpX3N0YXJ0ID0gKGR1a19sYWJlbGluZm8gKikgKHZvaWQgKikgcDsKKwlsaSA9IChkdWtf bGFiZWxpbmZvICopICh2b2lkICopIChwICsgRFVLX0hCVUZGRVJfR0VUX1NJWkUoY29tcF9jdHgt PmN1cnJfZnVuYy5oX2xhYmVsaW5mb3MpKTsKKwluID0gKGR1a19zaXplX3QpIChsaSAtIGxpX3N0 YXJ0KTsKKworCXdoaWxlIChsaSA+IGxpX3N0YXJ0KSB7CisJCWxpLS07CisKKwkJaWYgKGxpLT5o X2xhYmVsID09IGhfbGFiZWwgJiYgaF9sYWJlbCAhPSBEVUtfSFRIUkVBRF9TVFJJTkdfRU1QVFlf U1RSSU5HKHRocikpIHsKKwkJCURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtfU1RSX0RVUExJQ0FU RV9MQUJFTCk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCX0KKwl9CisKKwlkdWtf cHVzaF9oc3RyaW5nKHRociwgaF9sYWJlbCk7CisJRFVLX0FTU0VSVChuIDw9IERVS19VQVJSSURY X01BWCk7ICAvKiBsYWJlbCBsaW1pdHMgKi8KKwkodm9pZCkgZHVrX3B1dF9wcm9wX2luZGV4KHRo ciwgY29tcF9jdHgtPmN1cnJfZnVuYy5sYWJlbG5hbWVzX2lkeCwgKGR1a191YXJyaWR4X3QpIG4p OworCisJbmV3X3NpemUgPSAobiArIDEpICogc2l6ZW9mKGR1a19sYWJlbGluZm8pOworCWR1a19o YnVmZmVyX3Jlc2l6ZSh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuaF9sYWJlbGluZm9zLCBuZXdf c2l6ZSk7CisJLyogWFhYOiBzbGFjayBoYW5kbGluZywgc2xvdyBub3cgKi8KKworCS8qIHJlbG9v a3VwIGFmdGVyIHBvc3NpYmxlIHJlYWxsb2MgKi8KKwlwID0gKGR1a191aW50OF90ICopIERVS19I QlVGRkVSX0RZTkFNSUNfR0VUX0RBVEFfUFRSKHRoci0+aGVhcCwgY29tcF9jdHgtPmN1cnJfZnVu Yy5oX2xhYmVsaW5mb3MpOworCWxpX3N0YXJ0ID0gKGR1a19sYWJlbGluZm8gKikgKHZvaWQgKikg cDsKKwlEVUtfVU5SRUYobGlfc3RhcnQpOyAgLyogc2lsZW5jZSBzY2FuLWJ1aWxkIHdhcm5pbmcg Ki8KKwlsaSA9IChkdWtfbGFiZWxpbmZvICopICh2b2lkICopIChwICsgRFVLX0hCVUZGRVJfR0VU X1NJWkUoY29tcF9jdHgtPmN1cnJfZnVuYy5oX2xhYmVsaW5mb3MpKTsKKwlsaS0tOworCisJLyog TGFiZWxzIGNhbiBiZSB1c2VkIGZvciBpdGVyYXRpb24gc3RhdGVtZW50cyBidXQgYWxzbyBmb3Ig b3RoZXIgc3RhdGVtZW50cywKKwkgKiBpbiBwYXJ0aWN1bGFyIGEgbGFiZWwgY2FuIGJlIHVzZWQg Zm9yIGEgYmxvY2sgc3RhdGVtZW50LiAgQWxsIGNhc2VzIG9mIGEKKwkgKiBuYW1lZCBsYWJlbCBh Y2NlcHQgYSAnYnJlYWsnIHNvIHRoYXQgZmxhZyBpcyBzZXQgaGVyZS4gIEl0ZXJhdGlvbiBzdGF0 ZW1lbnRzCisJICogYWxzbyBhbGxvdyAnY29udGludWUnLCBzbyB0aGF0IGZsYWcgaXMgdXBkYXRl ZCB3aGVuIHdlIGZpZ3VyZSBvdXQgdGhlCisJICogc3RhdGVtZW50IHR5cGUuCisJICovCisKKwls aS0+ZmxhZ3MgPSBEVUtfTEFCRUxfRkxBR19BTExPV19CUkVBSzsKKwlsaS0+bGFiZWxfaWQgPSBs YWJlbF9pZDsKKwlsaS0+aF9sYWJlbCA9IGhfbGFiZWw7CisJbGktPmNhdGNoX2RlcHRoID0gY29t cF9jdHgtPmN1cnJfZnVuYy5jYXRjaF9kZXB0aDsgICAvKiBjYXRjaCBkZXB0aCBmcm9tIGN1cnJl bnQgZnVuYyAqLworCWxpLT5wY19sYWJlbCA9IHBjX2xhYmVsOworCisJRFVLX0RERChEVUtfRERE UFJJTlQoInJlZ2lzdGVyZWQgbGFiZWw6IGZsYWdzPTB4JTA4bHgsIGlkPSVsZCwgbmFtZT0lIU8s IGNhdGNoX2RlcHRoPSVsZCwgcGNfbGFiZWw9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgbGktPmZsYWdzLCAobG9uZykgbGktPmxhYmVsX2lkLCAoZHVrX2hlYXBo ZHIgKikgbGktPmhfbGFiZWwsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGxpLT5jYXRj aF9kZXB0aCwgKGxvbmcpIGxpLT5wY19sYWJlbCkpOworfQorCisvKiBVcGRhdGUgYWxsIGxhYmVs cyB3aXRoIG1hdGNoaW5nIGxhYmVsX2lkLiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX191cGRhdGVf bGFiZWxfZmxhZ3MoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pbnRfdCBsYWJlbF9p ZCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgeworCWR1a191aW50OF90ICpwOworCWR1a19sYWJl bGluZm8gKmxpX3N0YXJ0LCAqbGk7CisKKwlwID0gKGR1a191aW50OF90ICopIERVS19IQlVGRkVS X0RZTkFNSUNfR0VUX0RBVEFfUFRSKGNvbXBfY3R4LT50aHItPmhlYXAsIGNvbXBfY3R4LT5jdXJy X2Z1bmMuaF9sYWJlbGluZm9zKTsKKwlsaV9zdGFydCA9IChkdWtfbGFiZWxpbmZvICopICh2b2lk ICopIHA7CisJbGkgPSAoZHVrX2xhYmVsaW5mbyAqKSAodm9pZCAqKSAocCArIERVS19IQlVGRkVS X0dFVF9TSVpFKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaF9sYWJlbGluZm9zKSk7CisKKwkvKiBNYXRj aCBsYWJlbHMgc3RhcnRpbmcgZnJvbSBsYXRlc3Q7IG9uY2UgbGFiZWxfaWQgbm8gbG9uZ2VyIG1h dGNoZXMsIHdlIGNhbgorCSAqIHNhZmVseSBleGl0IHdpdGhvdXQgY2hlY2tpbmcgdGhlIHJlc3Qg b2YgdGhlIGxhYmVscyAob25seSB0aGUgdG9wbW9zdCBsYWJlbHMKKwkgKiBhcmUgZXZlciB1cGRh dGVkKS4KKwkgKi8KKwl3aGlsZSAobGkgPiBsaV9zdGFydCkgeworCQlsaS0tOworCisJCWlmIChs aS0+bGFiZWxfaWQgIT0gbGFiZWxfaWQpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJRFVLX0RERChE VUtfREREUFJJTlQoInVwZGF0aW5nIChvdmVyd3JpdGluZykgbGFiZWwgZmxhZ3MgZm9yIGxpPSVw LCBsYWJlbF9pZD0lbGQsIGZsYWdzPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgICh2b2lk ICopIGxpLCAobG9uZykgbGFiZWxfaWQsIChsb25nKSBmbGFncykpOworCisJCWxpLT5mbGFncyA9 IGZsYWdzOworCX0KK30KKworLyogTG9va3VwIGFjdGl2ZSBsYWJlbCBpbmZvcm1hdGlvbi4gIEJy ZWFrL2NvbnRpbnVlIGRpc3RpbmN0aW9uIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUgc3dpdGNoCisg KiBzdGF0ZW1lbnQgcmVsYXRlZCBsYWJlbHMgY29ycmVjdGx5OiBhIHN3aXRjaCB3aWxsIG9ubHkg Y2F0Y2ggYSAnYnJlYWsnLCBub3QgYSAnY29udGludWUnLgorICoKKyAqIEFuIGV4cGxpY2l0IGxh YmVsIGNhbm5vdCBhcHBlYXIgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGFjdGl2ZSBzZXQsIGJ1dCBl bXB0eSBsYWJlbHMgKHVubGFiZWxsZWQKKyAqIGl0ZXJhdGlvbiBhbmQgc3dpdGNoIHN0YXRlbWVu dHMpIGNhbi4gIEEgYnJlYWsgd2lsbCBtYXRjaCB0aGUgY2xvc2VzdCB1bmxhYmVsbGVkIG9yIGxh YmVsbGVkCisgKiBzdGF0ZW1lbnQuICBBIGNvbnRpbnVlIHdpbGwgbWF0Y2ggdGhlIGNsb3Nlc3Qg dW5sYWJlbGxlZCBvciBsYWJlbGxlZCBpdGVyYXRpb24gc3RhdGVtZW50LiAgSXQgaXMKKyAqIGEg c3ludGF4IGVycm9yIGlmIGEgY29udGludWUgbWF0Y2hlcyBhIGxhYmVsbGVkIHN3aXRjaCBzdGF0 ZW1lbnQ7IGJlY2F1c2UgYW4gZXhwbGljaXQgbGFiZWwgY2Fubm90CisgKiBiZSBkdXBsaWNhdGVk LCB0aGUgY29udGludWUgY2Fubm90IG1hdGNoIGFueSB2YWxpZCBsYWJlbCBvdXRzaWRlIHRoZSBz d2l0Y2guCisgKgorICogQSBzaWRlIGVmZmVjdCBvZiB0aGVzZSBydWxlcyBpcyB0aGF0IGEgTEFC RUwgc3RhdGVtZW50IHJlbGF0ZWQgdG8gYSBzd2l0Y2ggc2hvdWxkIG5ldmVyIGFjdHVhbGx5Cisg KiBjYXRjaCBhIGNvbnRpbnVlIGFicnVwdCBjb21wbGV0aW9uIGF0IHJ1bi10aW1lLiAgSGVuY2Ug YW4gSU5WQUxJRCBvcGNvZGUgY2FuIGJlIHBsYWNlZCBpbiB0aGUKKyAqIGNvbnRpbnVlIHNsb3Qg b2YgdGhlIHN3aXRjaCdzIExBQkVMIHN0YXRlbWVudC4KKyAqLworCisvKiBYWFg6IGF3a3dhcmQs IGVzcGVjaWFsbHkgdGhlIGJ1bmNoIG9mIHNlcGFyYXRlIG91dHB1dCB2YWx1ZXMgLT4gb3V0cHV0 IHN0cnVjdD8gKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fbG9va3VwX2FjdGl2ZV9sYWJlbChkdWtf Y29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2hzdHJpbmcgKmhfbGFiZWwsIGR1a19ib29sX3Qg aXNfYnJlYWssIGR1a19pbnRfdCAqb3V0X2xhYmVsX2lkLCBkdWtfaW50X3QgKm91dF9sYWJlbF9j YXRjaF9kZXB0aCwgZHVrX2ludF90ICpvdXRfbGFiZWxfcGMsIGR1a19ib29sX3QgKm91dF9pc19j bG9zZXN0KSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisJZHVrX3VpbnQ4 X3QgKnA7CisJZHVrX2xhYmVsaW5mbyAqbGlfc3RhcnQsICpsaV9lbmQsICpsaTsKKwlkdWtfYm9v bF90IG1hdGNoID0gMDsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJsb29raW5nIHVwIGFjdGl2 ZSBsYWJlbDogbGFiZWw9JyUhTycsIGlzX2JyZWFrPSVsZCIsCisJICAgICAgICAgICAgICAgICAg ICAgKGR1a19oZWFwaGRyICopIGhfbGFiZWwsIChsb25nKSBpc19icmVhaykpOworCisJRFVLX1VO UkVGKHRocik7CisKKwlwID0gKGR1a191aW50OF90ICopIERVS19IQlVGRkVSX0RZTkFNSUNfR0VU X0RBVEFfUFRSKHRoci0+aGVhcCwgY29tcF9jdHgtPmN1cnJfZnVuYy5oX2xhYmVsaW5mb3MpOwor CWxpX3N0YXJ0ID0gKGR1a19sYWJlbGluZm8gKikgKHZvaWQgKikgcDsKKwlsaV9lbmQgPSAoZHVr X2xhYmVsaW5mbyAqKSAodm9pZCAqKSAocCArIERVS19IQlVGRkVSX0dFVF9TSVpFKGNvbXBfY3R4 LT5jdXJyX2Z1bmMuaF9sYWJlbGluZm9zKSk7CisJbGkgPSBsaV9lbmQ7CisKKwkvKiBNYXRjaCBs YWJlbHMgc3RhcnRpbmcgZnJvbSBsYXRlc3QgbGFiZWwgYmVjYXVzZSB0aGVyZSBjYW4gYmUgZHVw bGljYXRlIGVtcHR5CisJICogbGFiZWxzIGluIHRoZSBsYWJlbCBzZXQuCisJICovCisJd2hpbGUg KGxpID4gbGlfc3RhcnQpIHsKKwkJbGktLTsKKworCQlpZiAobGktPmhfbGFiZWwgIT0gaF9sYWJl bCkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImxhYmVsaW5mb1slbGRdIC0+JyUhTycgIT0g JSFPIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSAobGkgLSBsaV9zdGFydCksCisJ CQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbGktPmhfbGFiZWwsCisJCQkg ICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgaF9sYWJlbCkpOworCQkJY29udGlu dWU7CisJCX0KKworCQlEVUtfREREKERVS19ERERQUklOVCgibGFiZWxpbmZvWyVsZF0gLT4gJyUh TycgbGFiZWwgbmFtZSBtYXRjaGVzIChzdGlsbCBuZWVkIHRvIGNoZWNrIHR5cGUpIiwKKwkJICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIChsaSAtIGxpX3N0YXJ0KSwgKGR1a19oZWFwaGRyICop IGhfbGFiZWwpKTsKKworCQkvKiBjdXJyZW50bHkgYWxsIGxhYmVscyBhY2NlcHQgYSBicmVhaywg c28gbm8gZXhwbGljaXQgY2hlY2sgZm9yIGl0IG5vdyAqLworCQlEVUtfQVNTRVJUKGxpLT5mbGFn cyAmIERVS19MQUJFTF9GTEFHX0FMTE9XX0JSRUFLKTsKKworCQlpZiAoaXNfYnJlYWspIHsKKwkJ CS8qIGJyZWFrIG1hdGNoZXMgYWx3YXlzICovCisJCQltYXRjaCA9IDE7CisJCQlicmVhazsKKwkJ fSBlbHNlIGlmIChsaS0+ZmxhZ3MgJiBEVUtfTEFCRUxfRkxBR19BTExPV19DT05USU5VRSkgewor CQkJLyogaXRlcmF0aW9uIHN0YXRlbWVudHMgYWxsb3cgY29udGludWUgKi8KKwkJCW1hdGNoID0g MTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogY29udGludWUgbWF0Y2hlZCB0aGlzIGxh YmVsIC0tIHdlIGNhbiBvbmx5IGNvbnRpbnVlIGlmIHRoaXMgaXMgdGhlIGVtcHR5CisJCQkgKiBs YWJlbCwgZm9yIHdoaWNoIGR1cGxpY2F0aW9uIGlzIGFsbG93ZWQsIGFuZCB0aHVzIHRoZXJlIGlz IGhvcGUgb2YKKwkJCSAqIGZpbmRpbmcgYSBtYXRjaCBkZWVwZXIgaW4gdGhlIGxhYmVsIHN0YWNr LgorCQkJICovCisJCQlpZiAoaF9sYWJlbCAhPSBEVUtfSFRIUkVBRF9TVFJJTkdfRU1QVFlfU1RS SU5HKHRocikpIHsKKwkJCQlEVUtfRVJST1JfU1lOVEFYKHRociwgRFVLX1NUUl9JTlZBTElEX0xB QkVMKTsKKwkJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCQl9IGVsc2UgeworCQkJCURV S19EREQoRFVLX0RERFBSSU5UKCJjb250aW51ZSBtYXRjaGVkIGFuIGVtcHR5IGxhYmVsIHdoaWNo IGRvZXMgbm90ICIKKwkJCQkgICAgICAgICAgICAgICAgICAgICAiYWxsb3cgYSBjb250aW51ZSAt PiBjb250aW51ZSBsb29rdXAgZGVlcGVyIGluIGxhYmVsIHN0YWNrIikpOworCQkJfQorCQl9CisJ fQorCS8qIFhYWDogbWF0Y2ggZmxhZyBpcyBhd2t3YXJkLCByZXdvcmsgKi8KKwlpZiAoIW1hdGNo KSB7CisJCURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtfU1RSX0lOVkFMSURfTEFCRUwpOworCQlE VUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJRFVLX0RERChEVUtfREREUFJJTlQoImxh YmVsIG1hdGNoOiAlIU8gLT4gbGFiZWxfaWQgJWxkLCBjYXRjaF9kZXB0aD0lbGQsIHBjX2xhYmVs PSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a19oZWFwaGRyICopIGhfbGFiZWwsIChs b25nKSBsaS0+bGFiZWxfaWQsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGxpLT5jYXRj aF9kZXB0aCwgKGxvbmcpIGxpLT5wY19sYWJlbCkpOworCisJKm91dF9sYWJlbF9pZCA9IGxpLT5s YWJlbF9pZDsKKwkqb3V0X2xhYmVsX2NhdGNoX2RlcHRoID0gbGktPmNhdGNoX2RlcHRoOworCSpv dXRfbGFiZWxfcGMgPSBsaS0+cGNfbGFiZWw7CisJKm91dF9pc19jbG9zZXN0ID0gKGxpID09IGxp X2VuZCAtIDEpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3Jlc2V0X2xhYmVsc190b19sZW5n dGgoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19zaXplX3QgbGVuKSB7CisJZHVrX2h0 aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisKKwlkdWtfc2V0X2xlbmd0aCh0aHIsIGNvbXBf Y3R4LT5jdXJyX2Z1bmMubGFiZWxuYW1lc19pZHgsIGxlbik7CisJZHVrX2hidWZmZXJfcmVzaXpl KHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy5oX2xhYmVsaW5mb3MsIHNpemVvZihkdWtfbGFiZWxp bmZvKSAqIGxlbik7Cit9CisKKy8qCisgKiAgRXhwcmVzc2lvbiBwYXJzaW5nOiBkdWtfX2V4cHJf bnVkKCksIGR1a19fZXhwcl9sZWQoKSwgZHVrX19leHByX2xicCgpLCBhbmQgaGVscGVycy4KKyAq CisgKiAgLSBkdWtfX2V4cHJfbnVkKCk6ICgibnVsbCBkZW5vdGF0aW9uIik6IHByb2Nlc3MgcHJl dl90b2tlbiBhcyBhICJzdGFydCIgb2YgYW4gZXhwcmVzc2lvbiAoZS5nLiBsaXRlcmFsKQorICog IC0gZHVrX19leHByX2xlZCgpOiAoImxlZnQgZGVub3RhdGlvbiIpOiBwcm9jZXNzIHByZXZfdG9r ZW4gaW4gdGhlICJtaWRkbGUiIG9mIGFuIGV4cHJlc3Npb24gKGUuZy4gb3BlcmF0b3IpCisgKiAg LSBkdWtfX2V4cHJfbGJwKCk6ICgibGVmdC1iaW5kaW5nIHBvd2VyIik6IHJldHVybiBsZWZ0LWJp bmRpbmcgcG93ZXIgb2YgY3Vycl90b2tlbgorICovCisKKy8qIG9iamVjdCBsaXRlcmFsIGtleSB0 cmFja2luZyBmbGFncyAqLworI2RlZmluZSBEVUtfX09CSl9MSVRfS0VZX1BMQUlOICAoMSA8PCAw KSAgLyoga2V5IGVuY291bnRlcmVkIGFzIGEgcGxhaW4gcHJvcGVydHkgKi8KKyNkZWZpbmUgRFVL X19PQkpfTElUX0tFWV9HRVQgICAgKDEgPDwgMSkgIC8qIGtleSBlbmNvdW50ZXJlZCBhcyBhIGdl dHRlciAqLworI2RlZmluZSBEVUtfX09CSl9MSVRfS0VZX1NFVCAgICAoMSA8PCAyKSAgLyoga2V5 IGVuY291bnRlcmVkIGFzIGEgc2V0dGVyICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19fbnVkX2Fy cmF5X2xpdGVyYWwoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcykg eworCWR1a19odGhyZWFkICp0aHIgPSBjb21wX2N0eC0+dGhyOworCWR1a19yZWdjb25zdF90IHJl Z19vYmo7ICAgICAgICAgICAgICAgICAvKiByZXN1bHQgcmVnICovCisJZHVrX3JlZ2NvbnN0X3Qg cmVnX3RlbXA7ICAgICAgICAgICAgICAgIC8qIHRlbXAgcmVnICovCisJZHVrX3JlZ2NvbnN0X3Qg dGVtcF9zdGFydDsgICAgICAgICAgICAgIC8qIHRlbXAgcmVnIHZhbHVlIGZvciBzdGFydCBvZiBs b29wICovCisJZHVrX3NtYWxsX3VpbnRfdCBtYXhfaW5pdF92YWx1ZXM7ICAvKiBtYXggIyBvZiB2 YWx1ZXMgaW5pdGlhbGl6ZWQgaW4gb25lIE1QVVRBUlIgc2V0ICovCisJZHVrX3NtYWxsX3VpbnRf dCBudW1fdmFsdWVzOyAgICAgICAvKiBudW1iZXIgb2YgdmFsdWVzIGluIGN1cnJlbnQgTVBVVEFS UiBzZXQgKi8KKwlkdWtfdWFycmlkeF90IGN1cnJfaWR4OyAgICAgICAgICAgIC8qIGN1cnJlbnQg KG5leHQpIGFycmF5IGluZGV4ICovCisJZHVrX3VhcnJpZHhfdCBzdGFydF9pZHg7ICAgICAgICAg ICAvKiBzdGFydCBhcnJheSBpbmRleCBvZiBjdXJyZW50IE1QVVRBUlIgc2V0ICovCisJZHVrX3Vh cnJpZHhfdCBpbml0X2lkeDsgICAgICAgICAgICAvKiBsYXN0IGFycmF5IGluZGV4IGV4cGxpY2l0 bHkgaW5pdGlhbGl6ZWQsICsxICovCisJZHVrX2Jvb2xfdCByZXF1aXJlX2NvbW1hOyAgICAgICAg ICAvKiBuZXh0IGxvb3AgcmVxdWlyZXMgYSBjb21tYSAqLworI2lmICFkZWZpbmVkKERVS19VU0Vf UFJFRkVSX1NJWkUpCisJZHVrX2ludF90IHBjX25ld2FycjsKKwlkdWtfY29tcGlsZXJfaW5zdHIg Kmluc3RyOworI2VuZGlmCisKKwkvKiBEVUtfVE9LX0xCUkFDS0VUIGFscmVhZHkgZWF0ZW4sIGN1 cnJlbnQgdG9rZW4gaXMgcmlnaHQgYWZ0ZXIgdGhhdCAqLworCURVS19BU1NFUlQoY29tcF9jdHgt PnByZXZfdG9rZW4udCA9PSBEVUtfVE9LX0xCUkFDS0VUKTsKKworCW1heF9pbml0X3ZhbHVlcyA9 IERVS19fTUFYX0FSUkFZX0lOSVRfVkFMVUVTOyAgLyogWFhYOiBkZXBlbmQgb24gYXZhaWxhYmxl IHRlbXBzPyAqLworCisJcmVnX29iaiA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KTsKKyNpZiAh ZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCXBjX25ld2FyciA9IGR1a19fZ2V0X2N1cnJl bnRfcGMoY29tcF9jdHgpOworI2VuZGlmCisJZHVrX19lbWl0X2JjKGNvbXBfY3R4LCBEVUtfT1Bf TkVXQVJSLCByZWdfb2JqKTsgIC8qIFhYWDogcGF0Y2ggaW5pdGlhbCBzaXplIGhpbnQgYWZ0ZXJ3 YXJkcz8gKi8KKwl0ZW1wX3N0YXJ0ID0gRFVLX19HRVRURU1QKGNvbXBfY3R4KTsKKworCS8qCisJ ICogIEVtaXQgaW5pdGlhbGl6ZXJzIGluIHNldHMgb2YgbWF4aW11bSBtYXhfaW5pdF92YWx1ZXMu CisJICogIENvcm5lciBjYXNlcyBzdWNoIGFzIHNpbmdsZSB2YWx1ZSBpbml0aWFsaXplcnMgZG8g bm90IGhhdmUKKwkgKiAgc3BlY2lhbCBoYW5kbGluZyBub3cuCisJICoKKwkgKiAgRWxpZGVkIGVs ZW1lbnRzIG11c3Qgbm90IGJlIGVtaXR0ZWQgYXMgJ3VuZGVmaW5lZCcgdmFsdWVzLAorCSAqICBi ZWNhdXNlIHN1Y2ggdmFsdWVzIHdvdWxkIGJlIGVudW1lcmFibGUgKHdoaWNoIGlzIGluY29ycmVj dCkuCisJICogIEFsc28gbm90ZSB0aGF0IHRyYWlsaW5nIGVsaXNpb25zIG11c3QgYmUgcmVmbGVj dGVkIGluIHRoZQorCSAqICBsZW5ndGggb2YgdGhlIGZpbmFsIGFycmF5IGJ1dCBjYXVzZSBubyBl bGVtZW50cyB0byBiZSBhY3R1YWxseQorCSAqICBpbnNlcnRlZC4KKwkgKi8KKworCWN1cnJfaWR4 ID0gMDsKKwlpbml0X2lkeCA9IDA7ICAgICAgICAgLyogdHJhY2tzIG1heGltdW0gaW5pdGlhbGl6 ZWQgaW5kZXggKyAxICovCisJc3RhcnRfaWR4ID0gMDsKKwlyZXF1aXJlX2NvbW1hID0gMDsKKwor CWZvciAoOzspIHsKKwkJbnVtX3ZhbHVlcyA9IDA7CisJCURVS19fU0VUVEVNUChjb21wX2N0eCwg dGVtcF9zdGFydCk7CisKKwkJaWYgKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19S QlJBQ0tFVCkgeworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKDs7KSB7CisJCQlpZiAoY29tcF9j dHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX1JCUkFDS0VUKSB7CisJCQkJLyogdGhlIG91dGVy IGxvb3Agd2lsbCByZWNoZWNrIGFuZCBleGl0ICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8q IGNvbW1hIGNoZWNrICovCisJCQlpZiAocmVxdWlyZV9jb21tYSkgeworCQkJCWlmIChjb21wX2N0 eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfQ09NTUEpIHsKKwkJCQkJLyogY29tbWEgYWZ0ZXIg YSB2YWx1ZSwgZXhwZWN0ZWQgKi8KKwkJCQkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsKKwkJCQkJ cmVxdWlyZV9jb21tYSA9IDA7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSB7CisJCQkJCWdv dG8gc3ludGF4X2Vycm9yOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbXBfY3R4LT5j dXJyX3Rva2VuLnQgPT0gRFVLX1RPS19DT01NQSkgeworCQkJCQkvKiBlbGlzaW9uIC0gZmx1c2gg Ki8KKwkJCQkJY3Vycl9pZHgrKzsKKwkJCQkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsKKwkJCQkJ LyogaWYgbnVtX3ZhbHVlcyA+IDAsIE1QVVRBUlIgZW1pdHRlZCBieSBvdXRlciBsb29wIGFmdGVy IGJyZWFrICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qIGVsc2UgYW4gYXJyYXkg aW5pdGlhbGl6ZXIgZWxlbWVudCAqLworCisJCQkvKiBpbml0aWFsIGluZGV4ICovCisJCQlpZiAo bnVtX3ZhbHVlcyA9PSAwKSB7CisJCQkJc3RhcnRfaWR4ID0gY3Vycl9pZHg7CisJCQkJcmVnX3Rl bXAgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCQkJZHVrX19lbWl0X2xvYWRfaW50MzIo Y29tcF9jdHgsIHJlZ190ZW1wLCAoZHVrX2ludDMyX3QpIHN0YXJ0X2lkeCk7CisJCQl9CisKKwkJ CXJlZ190ZW1wID0gRFVLX19BTExPQ1RFTVAoY29tcF9jdHgpOyAgIC8qIGFsbG9jIHRlbXAganVz dCBpbiBjYXNlLCB0byB1cGRhdGUgbWF4IHRlbXAgKi8KKwkJCURVS19fU0VUVEVNUChjb21wX2N0 eCwgcmVnX3RlbXApOworCQkJZHVrX19leHByX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCByZXMsIERV S19fQlBfQ09NTUEgLypyYnBfZmxhZ3MqLywgcmVnX3RlbXAgLypmb3JjZWRfcmVnKi8pOworCQkJ RFVLX19TRVRURU1QKGNvbXBfY3R4LCByZWdfdGVtcCArIDEpOworCisJCQludW1fdmFsdWVzKys7 CisJCQljdXJyX2lkeCsrOworCQkJcmVxdWlyZV9jb21tYSA9IDE7CisKKwkJCWlmIChudW1fdmFs dWVzID49IG1heF9pbml0X3ZhbHVlcykgeworCQkJCS8qIE1QVVRBUlIgZW1pdHRlZCBieSBvdXRl ciBsb29wICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobnVtX3ZhbHVlcyA+IDAp IHsKKwkJCS8qIC0gQSBpcyBhIHNvdXJjZSByZWdpc3RlciAoaXQncyBub3QgYSB3cml0ZSB0YXJn ZXQsIGJ1dCB1c2VkCisJCQkgKiAgIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXQgb2JqZWN0KSBidXQg Y2FuIGJlIHNodWZmbGVkLgorCQkJICogLSBCIGNhbm5vdCBiZSBzaHVmZmxlZCBub3JtYWxseSBi ZWNhdXNlIGl0IGlkZW50aWZpZXMgYSByYW5nZQorCQkJICogICBvZiByZWdpc3RlcnMsIHRoZSBl bWl0dGVyIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGlzCisJCQkgKiAgICh0aGUgIm5vIHNo dWZmbGUiIGZsYWcgbXVzdCBub3QgYmUgc2V0KS4KKwkJCSAqIC0gQyBpcyBhIG5vbi1yZWdpc3Rl ciBudW1iZXIgYW5kIGNhbm5vdCBiZSBzaHVmZmxlZCwgYnV0CisJCQkgKiAgIG5ldmVyIG5lZWRz IHRvIGJlLgorCQkJICovCisJCQlkdWtfX2VtaXRfYV9iX2MoY29tcF9jdHgsCisJCQkgICAgICAg ICAgICAgICAgRFVLX09QX01QVVRBUlIgfAorCQkJICAgICAgICAgICAgICAgICAgICBEVUtfX0VN SVRfRkxBR19OT19TSFVGRkxFX0MgfAorCQkJICAgICAgICAgICAgICAgICAgICBEVUtfX0VNSVRf RkxBR19BX0lTX1NPVVJDRSwKKwkJCSAgICAgICAgICAgICAgICByZWdfb2JqLAorCQkJICAgICAg ICAgICAgICAgIHRlbXBfc3RhcnQsCisJCQkgICAgICAgICAgICAgICAgKGR1a19yZWdjb25zdF90 KSAobnVtX3ZhbHVlcyArIDEpKTsKKwkJCWluaXRfaWR4ID0gc3RhcnRfaWR4ICsgbnVtX3ZhbHVl czsKKworCQkJLyogbnVtX3ZhbHVlcyBhbmQgdGVtcF9zdGFydCByZXNldCBhdCB0b3Agb2Ygb3V0 ZXIgbG9vcCAqLworCQl9CisJfQorCisJLyogVXBkYXRlIGluaXRpbCBzaXplIGZvciBORVdBUlIs IGRvZXNuJ3QgbmVlZCB0byBiZSBleGFjdCBhbmQgaXMKKwkgKiBjYXBwZWQgYXQgQSBmaWVsZCBs aW1pdC4KKwkgKi8KKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCWluc3RyID0g ZHVrX19nZXRfaW5zdHJfcHRyKGNvbXBfY3R4LCBwY19uZXdhcnIpOworCWluc3RyLT5pbnMgfD0g RFVLX0VOQ19PUF9BKDAsIGN1cnJfaWR4ID4gRFVLX0JDX0FfTUFYID8gRFVLX0JDX0FfTUFYIDog Y3Vycl9pZHgpOworI2VuZGlmCisKKwlEVUtfQVNTRVJUKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQg PT0gRFVLX1RPS19SQlJBQ0tFVCk7CisJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsKKworCURVS19E REQoRFVLX0RERFBSSU5UKCJhcnJheSBsaXRlcmFsIGRvbmUsIGN1cnJpZHg9JWxkLCBpbml0aWR4 PSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGN1cnJfaWR4LCAobG9uZykgaW5p dF9pZHgpKTsKKworCS8qIHRyYWlsaW5nIGVsaXNpb25zPyAqLworCWlmIChjdXJyX2lkeCA+IGlu aXRfaWR4KSB7CisJCS8qIHllcywgbXVzdCBzZXQgYXJyYXkgbGVuZ3RoIGV4cGxpY2l0bHkgKi8K KwkJRFVLX0RERChEVUtfREREUFJJTlQoImFycmF5IGxpdGVyYWwgaGFzIHRyYWlsaW5nIGVsaXNp b25zIHdoaWNoIGFmZmVjdCBpdHMgbGVuZ3RoIikpOworCQlyZWdfdGVtcCA9IERVS19fQUxMT0NU RU1QKGNvbXBfY3R4KTsKKwkJZHVrX19lbWl0X2xvYWRfaW50MzIoY29tcF9jdHgsIHJlZ190ZW1w LCAoZHVrX2ludF90KSBjdXJyX2lkeCk7CisJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LAorCQkg ICAgICAgICAgICAgICBEVUtfT1BfU0VUQUxFTiB8IERVS19fRU1JVF9GTEFHX0FfSVNfU09VUkNF LAorCQkgICAgICAgICAgICAgICByZWdfb2JqLAorCQkgICAgICAgICAgICAgICByZWdfdGVtcCk7 CisJfQorCisJRFVLX19TRVRURU1QKGNvbXBfY3R4LCB0ZW1wX3N0YXJ0KTsKKworCWR1a19faXZh bHVlX3JlZ2NvbnN0KHJlcywgcmVnX29iaik7CisJcmV0dXJuOworCisgc3ludGF4X2Vycm9yOgor CURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtfU1RSX0lOVkFMSURfQVJSQVlfTElURVJBTCk7CisJ RFVLX1dPX05PUkVUVVJOKHJldHVybjspOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisJZHVrX3Jl Z2NvbnN0X3QgcmVnX29iajsKKwlkdWtfcmVnY29uc3RfdCB0ZW1wX3N0YXJ0OworCWR1a19zbWFs bF91aW50X3QgbnVtX3BhaXJzOworCWR1a19zbWFsbF91aW50X3QgbnVtX3RvdGFsX3BhaXJzOwor fSBkdWtfX29iamxpdF9zdGF0ZTsKKworRFVLX0xPQ0FMIHZvaWQgZHVrX19vYmpsaXRfZmx1c2hf a2V5cyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX19vYmpsaXRfc3RhdGUgKnN0KSB7 CisJaWYgKHN0LT5udW1fcGFpcnMgPiAwKSB7CisJCS8qIC0gQSBpcyBhIHNvdXJjZSByZWdpc3Rl ciAoaXQncyBub3QgYSB3cml0ZSB0YXJnZXQsIGJ1dCB1c2VkCisJCSAqICAgdG8gaWRlbnRpZnkg dGhlIHRhcmdldCBvYmplY3QpIGJ1dCBjYW4gYmUgc2h1ZmZsZWQuCisJCSAqIC0gQiBjYW5ub3Qg YmUgc2h1ZmZsZWQgbm9ybWFsbHkgYmVjYXVzZSBpdCBpZGVudGlmaWVzIGEgcmFuZ2UKKwkJICog ICBvZiByZWdpc3RlcnMsIHRoZSBlbWl0dGVyIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGlz CisJCSAqICAgKHRoZSAibm8gc2h1ZmZsZSIgZmxhZyBtdXN0IG5vdCBiZSBzZXQpLgorCQkgKiAt IEMgaXMgYSBub24tcmVnaXN0ZXIgbnVtYmVyIGFuZCBjYW5ub3QgYmUgc2h1ZmZsZWQsIGJ1dAor CQkgKiAgIG5ldmVyIG5lZWRzIHRvIGJlLgorCQkgKi8KKwkJRFVLX0FTU0VSVChzdC0+bnVtX3Bh aXJzID4gMCk7CisJCWR1a19fZW1pdF9hX2JfYyhjb21wX2N0eCwKKwkJICAgICAgICAgICAgICAg IERVS19PUF9NUFVUT0JKIHwKKwkJICAgICAgICAgICAgICAgICAgICBEVUtfX0VNSVRfRkxBR19O T19TSFVGRkxFX0MgfAorCQkgICAgICAgICAgICAgICAgICAgIERVS19fRU1JVF9GTEFHX0FfSVNf U09VUkNFLAorCQkgICAgICAgICAgICAgICAgc3QtPnJlZ19vYmosCisJCSAgICAgICAgICAgICAg ICBzdC0+dGVtcF9zdGFydCwKKwkJICAgICAgICAgICAgICAgIChkdWtfcmVnY29uc3RfdCkgKHN0 LT5udW1fcGFpcnMgKiAyKSk7CisJCXN0LT5udW1fdG90YWxfcGFpcnMgKz0gc3QtPm51bV9wYWly czsKKwkJc3QtPm51bV9wYWlycyA9IDA7CisJfQorCURVS19fU0VUVEVNUChjb21wX2N0eCwgc3Qt PnRlbXBfc3RhcnQpOworfQorCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX29iamxpdF9sb2Fk X2tleShkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfdG9r ZW4gKnRvaywgZHVrX3JlZ2NvbnN0X3QgcmVnX3RlbXApIHsKKwlpZiAodG9rLT50X25vcmVzID09 IERVS19UT0tfSURFTlRJRklFUiB8fCB0b2stPnRfbm9yZXMgPT0gRFVLX1RPS19TVFJJTkcpIHsK KwkJLyogc2FtZSBoYW5kbGluZyBmb3IgaWRlbnRpZmllcnMgYW5kIHN0cmluZ3MgKi8KKwkJRFVL X0FTU0VSVCh0b2stPnN0cjEgIT0gTlVMTCk7CisJCWR1a19wdXNoX2hzdHJpbmcoY29tcF9jdHgt PnRociwgdG9rLT5zdHIxKTsKKwl9IGVsc2UgaWYgKHRvay0+dCA9PSBEVUtfVE9LX05VTUJFUikg eworCQkvKiBudW1iZXJzIGNhbiBiZSBsb2FkZWQgYXMgbnVtYmVycyBhbmQgY29lcmNlZCBvbiB0 aGUgZmx5ICovCisJCWR1a19wdXNoX251bWJlcihjb21wX2N0eC0+dGhyLCB0b2stPm51bSk7CisJ fSBlbHNlIHsKKwkJcmV0dXJuIDE7ICAvKiBlcnJvciAqLworCX0KKworCWR1a19faXZhbHVlX3Bs YWluX2Zyb21zdGFjayhjb21wX2N0eCwgcmVzKTsKKwlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHJl Z190ZW1wICsgMSk7CisJZHVrX19pdmFsdWVfdG9mb3JjZWRyZWcoY29tcF9jdHgsIHJlcywgcmVn X3RlbXApOworCURVS19fU0VUVEVNUChjb21wX2N0eCwgcmVnX3RlbXAgKyAxKTsKKwlyZXR1cm4g MDsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19udWRfb2JqZWN0X2xpdGVyYWwoZHVrX2NvbXBp bGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcykgeworCWR1a19odGhyZWFkICp0aHIg PSBjb21wX2N0eC0+dGhyOworCWR1a19fb2JqbGl0X3N0YXRlIHN0OworCWR1a19yZWdjb25zdF90 IHJlZ190ZW1wOyAgICAgICAgICAvKiB0ZW1wIHJlZyAqLworCWR1a19zbWFsbF91aW50X3QgbWF4 X2luaXRfcGFpcnM7ICAvKiBtYXggIyBvZiBrZXktdmFsdWUgcGFpcnMgaW5pdGlhbGl6ZWQgaW4g b25lIE1QVVRPQkogc2V0ICovCisJZHVrX2Jvb2xfdCBmaXJzdDsgICAgICAgICAgICAgICAgIC8q IGZpcnN0IHZhbHVlOiBjb21tYSBtdXN0IG5vdCBwcmVjZWRlIHRoZSB2YWx1ZSAqLworCWR1a19i b29sX3QgaXNfc2V0LCBpc19nZXQ7ICAgICAgICAvKiB0ZW1wcyAqLworI2lmICFkZWZpbmVkKERV S19VU0VfUFJFRkVSX1NJWkUpCisJZHVrX2ludF90IHBjX25ld29iajsKKwlkdWtfY29tcGlsZXJf aW5zdHIgKmluc3RyOworI2VuZGlmCisKKwlEVUtfQVNTRVJUKGNvbXBfY3R4LT5wcmV2X3Rva2Vu LnQgPT0gRFVLX1RPS19MQ1VSTFkpOworCisJbWF4X2luaXRfcGFpcnMgPSBEVUtfX01BWF9PQkpF Q1RfSU5JVF9QQUlSUzsgIC8qIFhYWDogZGVwZW5kIG9uIGF2YWlsYWJsZSB0ZW1wcz8gKi8KKwor CXN0LnJlZ19vYmogPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7ICAgIC8qIHRhcmdldCBvYmpl Y3QgKi8KKwlzdC50ZW1wX3N0YXJ0ID0gRFVLX19HRVRURU1QKGNvbXBfY3R4KTsgICAvKiBzdGFy dCBvZiBNUFVUT0JKIGFyZ3VtZW50IGxpc3QgKi8KKwlzdC5udW1fcGFpcnMgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Yga2V5L3ZhbHVlIHBhaXJzIGVtaXR0ZWQgZm9y IGN1cnJlbnQgTVBVVE9CSiBzZXQgKi8KKwlzdC5udW1fdG90YWxfcGFpcnMgPSAwOyAgICAgICAg ICAgICAgICAgICAvKiBudW1iZXIgb2Yga2V5L3ZhbHVlIHBhaXJzIGVtaXR0ZWQgb3ZlcmFsbCAq LworCisjaWYgIWRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwlwY19uZXdvYmogPSBkdWtf X2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsKKyNlbmRpZgorCWR1a19fZW1pdF9iYyhjb21wX2N0 eCwgRFVLX09QX05FV09CSiwgc3QucmVnX29iaik7CisKKwkvKgorCSAqICBFbWl0IGluaXRpYWxp emVycyBpbiBzZXRzIG9mIG1heGltdW0gbWF4X2luaXRfcGFpcnMga2V5cy4KKwkgKiAgU2V0dGVy L2dldHRlciBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYW5kIHRlcm1pbmF0ZXMgdGhlCisJICogIGN1 cnJlbnQgc2V0IG9mIGluaXRpYWxpemVyIHZhbHVlcy4gIENvcm5lciBjYXNlcyBzdWNoIGFzCisJ ICogIHNpbmdsZSB2YWx1ZSBpbml0aWFsaXplcnMgZG8gbm90IGhhdmUgc3BlY2lhbCBoYW5kbGlu ZyBub3cuCisJICovCisKKwlmaXJzdCA9IDE7CisJZm9yICg7OykgeworCQkvKgorCQkgKiAgRVM1 IGFuZCBFUzIwMTUrIHByb3ZpZGUgYSBsb3Qgb2YgZGlmZmVyZW50IFByb3BlcnR5RGVmaW5pdGlv bgorCQkgKiAgZm9ybWF0cywgc2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9l Y21hLTI2Mi82LjAvI3NlYy1vYmplY3QtaW5pdGlhbGl6ZXIuCisJCSAqCisJCSAqICBQcm9wZXJ0 eU5hbWUgY2FuIGJlIElkZW50aWZpZXJOYW1lIChpbmNsdWRlcyByZXNlcnZlZCB3b3JkcyksIGEg c3RyaW5nCisJCSAqICBsaXRlcmFsLCBvciBhIG51bWJlciBsaXRlcmFsLiAgTm90ZSB0aGF0IElk ZW50aWZpZXJOYW1lIGFsbG93cyAnZ2V0JyBhbmQKKwkJICogICdzZXQnIHRvbywgc28gd2UgbmVl ZCB0byBsb29rIGFoZWFkIHRvIHRoZSBuZXh0IHRva2VuIHRvIGRpc3Rpbmd1aXNoOgorCQkgKgor CQkgKiAgICAgeyBnZXQgOiAxIH0KKwkJICoKKwkJICogIGFuZAorCQkgKgorCQkgKiAgICAgeyBn ZXQgZm9vKCkgeyByZXR1cm4gMSB9IH0KKwkJICogICAgIHsgZ2V0IGdldCgpIHsgcmV0dXJuIDEg fSB9ICAgIC8vICdnZXQnIGFzIGdldHRlciBwcm9wZXJ0eW5hbWUKKwkJICoKKwkJICogIEZpbmFs bHksIGEgdHJhaWxpbmcgY29tbWEgaXMgYWxsb3dlZC4KKwkJICoKKwkJICogIEtleSBuYW1lIGlz IGNvZXJjZWQgdG8gc3RyaW5nIGF0IGNvbXBpbGUgdGltZSAoYW5kIGVuZHMgdXAgYXMgYQorCQkg KiAgYSBzdHJpbmcgY29uc3RhbnQpIGV2ZW4gZm9yIG51bWVyaWMga2V5cyAoZS5nLiAiezE6J2Zv byd9IikuCisJCSAqICBUaGVzZSBjb3VsZCBiZSBlbWl0dGVkIHVzaW5nIGUuZy4gTERJTlQsIGJ1 dCB0aGF0IHNlZW1zIGhhcmRseQorCQkgKiAgd29ydGggdGhlIGVmZm9ydCBhbmQgd291bGQgaW5j cmVhc2UgY29kZSBzaXplLgorCQkgKi8KKworCQlEVUtfREREKERVS19ERERQUklOVCgib2JqZWN0 IGxpdGVyYWwgbG9vcCwgY3Vycl90b2tlbi0+dCA9ICVsZCIsCisJCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBjb21wX2N0eC0+Y3Vycl90b2tlbi50KSk7CisKKwkJaWYgKGNvbXBfY3R4LT5j dXJyX3Rva2VuLnQgPT0gRFVLX1RPS19SQ1VSTFkpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYg KGZpcnN0KSB7CisJCQlmaXJzdCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoY29tcF9jdHgtPmN1 cnJfdG9rZW4udCAhPSBEVUtfVE9LX0NPTU1BKSB7CisJCQkJZ290byBzeW50YXhfZXJyb3I7CisJ CQl9CisJCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOworCQkJaWYgKGNvbXBfY3R4LT5jdXJyX3Rv a2VuLnQgPT0gRFVLX1RPS19SQ1VSTFkpIHsKKwkJCQkvKiB0cmFpbGluZyBjb21tYSBmb2xsb3dl ZCBieSByY3VybHkgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIEFkdmFuY2UgdG8g Z2V0IG9uZSBzdGVwIG9mIGxvb2t1cC4gKi8KKwkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsKKwor CQkvKiBGbHVzaCBjdXJyZW50IE1QVVRPQkogaWYgZW5vdWdoIG1hbnkgcGFpcnMgZ2F0aGVyZWQu ICovCisJCWlmIChzdC5udW1fcGFpcnMgPj0gbWF4X2luaXRfcGFpcnMpIHsKKwkJCWR1a19fb2Jq bGl0X2ZsdXNoX2tleXMoY29tcF9jdHgsICZzdCk7CisJCQlEVUtfQVNTRVJUKHN0Lm51bV9wYWly cyA9PSAwKTsKKwkJfQorCisJCS8qIFJlc2V0IHRlbXAgcmVnaXN0ZXIgc3RhdGUgYW5kIHJlc2Vy dmUgcmVnX3RlbXAgYW5kCisJCSAqIHJlZ190ZW1wICsgMSBmb3IgaGFuZGxpbmcgdGhlIGN1cnJl bnQgcHJvcGVydHkuCisJCSAqLworCQlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHN0LnRlbXBfc3Rh cnQgKyAyICogKGR1a19yZWdjb25zdF90KSBzdC5udW1fcGFpcnMpOworCQlyZWdfdGVtcCA9IERV S19fQUxMT0NURU1QUyhjb21wX2N0eCwgMik7CisKKwkJLyogTk9URTogImdldCIgYW5kICJzZXQi IGFyZSBub3Qgb2ZmaWNpYWxseSBSZXNlcnZlZFdvcmRzIGFuZCB0aGUgbGV4ZXIKKwkJICogY3Vy cmVudGx5IHRyZWF0cyB0aGVtIGFsd2F5cyBsaWtlIG9yZGluYXJ5IGlkZW50aWZpZXJzIChEVUtf VE9LX0dFVAorCQkgKiBhbmQgRFVLX1RPS19TRVQgYXJlIHVudXNlZCkuICBUaGV5IG5lZWQgdG8g YmUgZGV0ZWN0ZWQgYmFzZWQgb24gdGhlCisJCSAqIGlkZW50aWZpZXIgc3RyaW5nIGNvbnRlbnQu CisJCSAqLworCisJCWlzX2dldCA9IChjb21wX2N0eC0+cHJldl90b2tlbi50ID09IERVS19UT0tf SURFTlRJRklFUiAmJgorCQkgICAgICAgICAgY29tcF9jdHgtPnByZXZfdG9rZW4uc3RyMSA9PSBE VUtfSFRIUkVBRF9TVFJJTkdfR0VUKHRocikpOworCQlpc19zZXQgPSAoY29tcF9jdHgtPnByZXZf dG9rZW4udCA9PSBEVUtfVE9LX0lERU5USUZJRVIgJiYKKwkJICAgICAgICAgIGNvbXBfY3R4LT5w cmV2X3Rva2VuLnN0cjEgPT0gRFVLX0hUSFJFQURfU1RSSU5HX1NFVCh0aHIpKTsKKwkJaWYgKChp c19nZXQgfHwgaXNfc2V0KSAmJiBjb21wX2N0eC0+Y3Vycl90b2tlbi50ICE9IERVS19UT0tfQ09M T04pIHsKKwkJCS8qIGdldHRlci9zZXR0ZXIgKi8KKwkJCWR1a19pbnRfdCBmbnVtOworCisJCQlk dWtfX29iamxpdF9mbHVzaF9rZXlzKGNvbXBfY3R4LCAmc3QpOworCQkJRFVLX0FTU0VSVChEVUtf X0dFVFRFTVAoY29tcF9jdHgpID09IHN0LnRlbXBfc3RhcnQpOyAgLyogMiByZWdzIGFyZSBndWFy YW50ZWVkIHRvIGJlIGFsbG9jYXRlZCB3LnIudC4gdGVtcF9tYXggKi8KKwkJCXJlZ190ZW1wID0g RFVLX19BTExPQ1RFTVBTKGNvbXBfY3R4LCAyKTsKKworCQkJaWYgKGR1a19fb2JqbGl0X2xvYWRf a2V5KGNvbXBfY3R4LCByZXMsICZjb21wX2N0eC0+Y3Vycl90b2tlbiwgcmVnX3RlbXApICE9IDAp IHsKKwkJCQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJCX0KKworCQkJLyogY3Vycl90b2tlbiA9IGdl dC9zZXQgbmFtZSAqLworCQkJZm51bSA9IGR1a19fcGFyc2VfZnVuY19saWtlX2ZudW0oY29tcF9j dHgsIERVS19fRlVOQ19GTEFHX0dFVFNFVCk7CisKKwkJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4 LAorCQkJICAgICAgICAgICAgICAgRFVLX09QX0NMT1NVUkUsCisJCQkgICAgICAgICAgICAgICBz dC50ZW1wX3N0YXJ0ICsgMSwKKwkJCSAgICAgICAgICAgICAgIChkdWtfcmVnY29uc3RfdCkgZm51 bSk7CisKKwkJCS8qIFNsb3QgQyBpcyB1c2VkIGluIGEgbm9uLXN0YW5kYXJkIGZhc2hpb24gKHJh bmdlIG9mIHJlZ3MpLAorCQkJICogZW1pdHRlciBjb2RlIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZv ciBpdCAobXVzdCBub3Qgc2V0IHRoZQorCQkJICogIm5vIHNodWZmbGUiIGZsYWcpLgorCQkJICov CisJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwKKwkJCSAgICAgICAgICAgICAgKGlzX2dldCA/ IERVS19PUF9JTklUR0VUIDogRFVLX09QX0lOSVRTRVQpIHwgRFVLX19FTUlUX0ZMQUdfQV9JU19T T1VSQ0UsCisJCQkgICAgICAgICAgICAgIHN0LnJlZ19vYmosCisJCQkgICAgICAgICAgICAgIHN0 LnRlbXBfc3RhcnQpOyAgIC8qIHRlbXBfc3RhcnQrMCA9IGtleSwgdGVtcF9zdGFydCsxID0gY2xv c3VyZSAqLworCisJCQlEVUtfQVNTRVJUKHN0Lm51bV9wYWlycyA9PSAwKTsgIC8qIHRlbXAgc3Rh dGUgaXMgcmVzZXQgb24gbmV4dCBsb29wICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNikKKwkJ fSBlbHNlIGlmIChjb21wX2N0eC0+cHJldl90b2tlbi50ID09IERVS19UT0tfSURFTlRJRklFUiAm JgorCQkgICAgICAgICAgIChjb21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfQ09NTUEg fHwgY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX1JDVVJMWSkpIHsKKwkJCWR1a19i b29sX3QgbG9hZF9yYzsKKworCQkJbG9hZF9yYyA9IGR1a19fb2JqbGl0X2xvYWRfa2V5KGNvbXBf Y3R4LCByZXMsICZjb21wX2N0eC0+cHJldl90b2tlbiwgcmVnX3RlbXApOworCQkJRFVLX1VOUkVG KGxvYWRfcmMpOworCQkJRFVLX0FTU0VSVChsb2FkX3JjID09IDApOyAgLyogYWx3YXlzIHN1Y2Nl ZWRzIGJlY2F1c2UgdG9rZW4gaXMgaWRlbnRpZmllciAqLworCisJCQlkdWtfX2l2YWx1ZV92YXJf aHN0cmluZyhjb21wX2N0eCwgcmVzLCBjb21wX2N0eC0+cHJldl90b2tlbi5zdHIxKTsKKwkJCURV S19BU1NFUlQoRFVLX19HRVRURU1QKGNvbXBfY3R4KSA9PSByZWdfdGVtcCArIDEpOworCQkJZHVr X19pdmFsdWVfdG9mb3JjZWRyZWcoY29tcF9jdHgsIHJlcywgcmVnX3RlbXAgKyAxKTsKKworCQkJ c3QubnVtX3BhaXJzKys7CisJCX0gZWxzZSBpZiAoKGNvbXBfY3R4LT5wcmV2X3Rva2VuLnQgPT0g RFVLX1RPS19JREVOVElGSUVSIHx8CisJCSAgICAgICAgICAgIGNvbXBfY3R4LT5wcmV2X3Rva2Vu LnQgPT0gRFVLX1RPS19TVFJJTkcgfHwKKwkJICAgICAgICAgICAgY29tcF9jdHgtPnByZXZfdG9r ZW4udCA9PSBEVUtfVE9LX05VTUJFUikgJiYKKwkJICAgICAgICAgICBjb21wX2N0eC0+Y3Vycl90 b2tlbi50ID09IERVS19UT0tfTFBBUkVOKSB7CisJCQlkdWtfaW50X3QgZm51bTsKKworCQkJLyog UGFyc2luZy13aXNlIHRoZXJlJ3MgYSBzbWFsbCBoaWNrdXAgaGVyZTogdGhlIHRva2VuIHBhcnNp bmcKKwkJCSAqIHN0YXRlIGlzIG9uZSBzdGVwIHRvbyBhZHZhbmNlZCBmb3IgdGhlIGZ1bmN0aW9u IHBhcnNlIGhlbHBlcgorCQkJICogY29tcGFyZWQgdG8gb3RoZXIgY2FzZXMuICBUaGUgY3VycmVu dCBzb2x1dGlvbiBpcyBhbiBleHRyYQorCQkJICogZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGZ1 bmN0aW9uIHBhcnNpbmcgc2hvdWxkIHVzZSB0aGUKKwkJCSAqIGN1cnJlbnQgb3IgdGhlIHByZXZp b3VzIHRva2VuIHRvIHN0YXJ0aW5nIHBhcnNpbmcgZnJvbS4KKwkJCSAqLworCisJCQlpZiAoZHVr X19vYmpsaXRfbG9hZF9rZXkoY29tcF9jdHgsIHJlcywgJmNvbXBfY3R4LT5wcmV2X3Rva2VuLCBy ZWdfdGVtcCkgIT0gMCkgeworCQkJCWdvdG8gc3ludGF4X2Vycm9yOworCQkJfQorCisJCQlmbnVt ID0gZHVrX19wYXJzZV9mdW5jX2xpa2VfZm51bShjb21wX2N0eCwgRFVLX19GVU5DX0ZMQUdfVVNF X1BSRVZUT0tFTiB8IERVS19fRlVOQ19GTEFHX01FVERFRik7CisKKwkJCWR1a19fZW1pdF9hX2Jj KGNvbXBfY3R4LAorCQkJICAgICAgICAgICAgICAgRFVLX09QX0NMT1NVUkUsCisJCQkgICAgICAg ICAgICAgICByZWdfdGVtcCArIDEsCisJCQkgICAgICAgICAgICAgICAoZHVrX3JlZ2NvbnN0X3Qp IGZudW0pOworCisJCQlzdC5udW1fcGFpcnMrKzsKKyNlbmRpZiAgLyogRFVLX1VTRV9FUzYgKi8K KwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2KQorCQkJaWYgKGNvbXBfY3R4LT5w cmV2X3Rva2VuLnQgPT0gRFVLX1RPS19MQlJBQ0tFVCkgeworCQkJCS8qIEVTMjAxNSBjb21wdXRl ZCBwcm9wZXJ0eSBuYW1lLiAgRXhlY3V0b3IgVG9Qcm9wZXJ0eUtleSgpCisJCQkJICogY29lcmNl cyB0aGUga2V5IGF0IHJ1bnRpbWUuCisJCQkJICovCisJCQkJRFVLX19TRVRURU1QKGNvbXBfY3R4 LCByZWdfdGVtcCk7CisJCQkJZHVrX19leHByX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCByZXMsIERV S19fQlBfRk9SX0VYUFIsIHJlZ190ZW1wKTsKKwkJCQlkdWtfX2FkdmFuY2VfZXhwZWN0KGNvbXBf Y3R4LCBEVUtfVE9LX1JCUkFDS0VUKTsKKworCQkJCS8qIFhYWDogSWYgbmV4dCB0b2tlbiBpcyAn KCcgd2UncmUgZGVhbGluZyB3aXRoCisJCQkJICogdGhlIG1ldGhvZCBzaG9ydGhhbmQgd2l0aCBh IGNvbXB1dGVkIG5hbWUsCisJCQkJICogZS5nLiB7IFtTeW1ib2wuZm9yKCdmb28nKV0oYSxiKSB7 fSB9LiAgVGhpcworCQkJCSAqIGZvcm0gaXMgbm90IHlldCBzdXBwb3J0ZWQgYW5kIGNhdXNlcyBh CisJCQkJICogU3ludGF4RXJyb3Igb24gdGhlIERVS19UT0tfQ09MT04gY2hlY2sgYmVsb3cuCisJ CQkJICovCisJCQl9CisJCQllbHNlCisjZW5kaWYgIC8qIERVS19VU0VfRVM2ICovCisJCQl7CisJ CQkJaWYgKGR1a19fb2JqbGl0X2xvYWRfa2V5KGNvbXBfY3R4LCByZXMsICZjb21wX2N0eC0+cHJl dl90b2tlbiwgcmVnX3RlbXApICE9IDApIHsKKwkJCQkJZ290byBzeW50YXhfZXJyb3I7CisJCQkJ fQorCQkJfQorCisJCQlkdWtfX2FkdmFuY2VfZXhwZWN0KGNvbXBfY3R4LCBEVUtfVE9LX0NPTE9O KTsKKworCQkJRFVLX19TRVRURU1QKGNvbXBfY3R4LCByZWdfdGVtcCArIDEpOworCQkJZHVrX19l eHByX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCByZXMsIERVS19fQlBfQ09NTUEgLypyYnBfZmxhZ3Mq LywgcmVnX3RlbXAgKyAxIC8qZm9yY2VkX3JlZyovKTsKKworCQkJc3QubnVtX3BhaXJzKys7CisJ CX0KKwl9ICAvKiBwcm9wZXJ0eSBsb29wICovCisKKwkvKiBGbHVzaCByZW1haW5pbmcgcHJvcGVy dGllcy4gKi8KKwlkdWtfX29iamxpdF9mbHVzaF9rZXlzKGNvbXBfY3R4LCAmc3QpOworCURVS19B U1NFUlQoc3QubnVtX3BhaXJzID09IDApOworCURVS19BU1NFUlQoRFVLX19HRVRURU1QKGNvbXBf Y3R4KSA9PSBzdC50ZW1wX3N0YXJ0KTsKKworCS8qIFVwZGF0ZSBpbml0aWFsIHNpemUgZm9yIE5F V09CSi4gIFRoZSBpbml0IHNpemUgZG9lc24ndCBuZWVkIHRvIGJlCisJICogZXhhY3QgYXMgdGhl IHB1cnBvc2UgaXMganVzdCB0byBhdm9pZCBvYmplY3QgcmVzaXplcyBpbiBjb21tb24KKwkgKiBj YXNlcy4gIFRoZSBzaXplIGlzIGNhcHBlZCB0byBmaWVsZCBBIGxpbWl0LCBhbmQgd2lsbCBiZSB0 b28gaGlnaAorCSAqIGlmIHRoZSBvYmplY3QgbGl0ZXJhbCBjb250YWlucyBkdXBsaWNhdGUga2V5 cyAodGhpcyBpcyBoYXJtbGVzcyBidXQKKwkgKiBpbmNyZWFzZXMgbWVtb3J5IHRyYWZmaWMgaWYg dGhlIG9iamVjdCBpcyBjb21wYWN0ZWQgbGF0ZXIgb24pLgorCSAqLworI2lmICFkZWZpbmVkKERV S19VU0VfUFJFRkVSX1NJWkUpCisJaW5zdHIgPSBkdWtfX2dldF9pbnN0cl9wdHIoY29tcF9jdHgs IHBjX25ld29iaik7CisJaW5zdHItPmlucyB8PSBEVUtfRU5DX09QX0EoMCwgc3QubnVtX3RvdGFs X3BhaXJzID4gRFVLX0JDX0FfTUFYID8gRFVLX0JDX0FfTUFYIDogc3QubnVtX3RvdGFsX3BhaXJz KTsKKyNlbmRpZgorCisJRFVLX0FTU0VSVChjb21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19U T0tfUkNVUkxZKTsKKwlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOyAgLyogTm8gUmVnRXhwIGFmdGVy IG9iamVjdCBsaXRlcmFsLiAqLworCisJZHVrX19pdmFsdWVfcmVnY29uc3QocmVzLCBzdC5yZWdf b2JqKTsKKwlyZXR1cm47CisKKyBzeW50YXhfZXJyb3I6CisJRFVLX0VSUk9SX1NZTlRBWCh0aHIs IERVS19TVFJfSU5WQUxJRF9PQkpFQ1RfTElURVJBTCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVy bjspOworfQorCisvKiBQYXJzZSBhcmd1bWVudCBsaXN0LiAgQXJndW1lbnRzIGFyZSB3cml0dGVu IHRvIHRlbXBzIHN0YXJ0aW5nIGZyb20KKyAqICJuZXh0IHRlbXAiLiAgUmV0dXJucyBudW1iZXIg b2YgYXJndW1lbnRzIHBhcnNlZC4gIEV4cGVjdHMgbGVmdCBwYXJlbgorICogdG8gYmUgYWxyZWFk eSBlYXRlbiwgYW5kIGVhdHMgdGhlIHJpZ2h0IHBhcmVuIGJlZm9yZSByZXR1cm5pbmcuCisgKi8K K0RVS19MT0NBTCBkdWtfaW50X3QgZHVrX19wYXJzZV9hcmd1bWVudHMoZHVrX2NvbXBpbGVyX2N0 eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcykgeworCWR1a19pbnRfdCBuYXJncyA9IDA7CisJ ZHVrX3JlZ2NvbnN0X3QgcmVnX3RlbXA7CisKKwkvKiBOb3RlOiBleHBlY3QgdGhhdCBjYWxsZXIg aGFzIGFscmVhZHkgZWF0ZW4gdGhlIGxlZnQgcGFyZW4gKi8KKworCURVS19EREQoRFVLX0RERFBS SU5UKCJzdGFydCBwYXJzaW5nIGFyZ3VtZW50cywgcHJldl90b2tlbi50PSVsZCwgY3Vycl90b2tl bi50PSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5wcmV2X3Rv a2VuLnQsIChsb25nKSBjb21wX2N0eC0+Y3Vycl90b2tlbi50KSk7CisKKwlmb3IgKDs7KSB7CisJ CWlmIChjb21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfUlBBUkVOKSB7CisJCQlicmVh azsKKwkJfQorCQlpZiAobmFyZ3MgPiAwKSB7CisJCQlkdWtfX2FkdmFuY2VfZXhwZWN0KGNvbXBf Y3R4LCBEVUtfVE9LX0NPTU1BKTsKKwkJfQorCisJCS8qIFdlIHdhbnQgdGhlIGFyZ3VtZW50IGV4 cHJlc3Npb24gdmFsdWUgdG8gZ28gdG8gIm5leHQgdGVtcCIKKwkJICogd2l0aG91dCBhZGRpdGlv bmFsIG1vdmVzLiAgVGhhdCBzaG91bGQgYWxtb3N0IGFsd2F5cyBiZSB0aGUKKwkJICogY2FzZSwg YnV0IHdlIGRvdWJsZSBjaGVjayBhZnRlciBleHByZXNzaW9uIHBhcnNpbmcuCisJCSAqCisJCSAq IFRoaXMgaXMgbm90IHRoZSBjbGVhbmVzdCBwb3NzaWJsZSBhcHByb2FjaC4KKwkJICovCisKKwkJ cmVnX3RlbXAgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7ICAvKiBidW1wIHVwICJhbGxvY2F0 ZWQiIHJlZyBjb3VudCwganVzdCBpbiBjYXNlICovCisJCURVS19fU0VUVEVNUChjb21wX2N0eCwg cmVnX3RlbXApOworCisJCS8qIGJpbmRpbmcgcG93ZXIgbXVzdCBiZSBoaWdoIGVub3VnaCB0byBO T1QgYWxsb3cgY29tbWEgZXhwcmVzc2lvbnMgZGlyZWN0bHkgKi8KKwkJZHVrX19leHByX3RvZm9y Y2VkcmVnKGNvbXBfY3R4LCByZXMsIERVS19fQlBfQ09NTUEgLypyYnBfZmxhZ3MqLywgcmVnX3Rl bXApOyAgLyogYWx3YXlzIGFsbG93ICdpbicsIGNvZXJjZSB0byAndHInIGp1c3QgaW4gY2FzZSAq LworCisJCURVS19fU0VUVEVNUChjb21wX2N0eCwgcmVnX3RlbXAgKyAxKTsKKwkJbmFyZ3MrKzsK KworCQlEVUtfREREKERVS19ERERQUklOVCgiYXJndW1lbnQgIyVsZCB3cml0dGVuIGludG8gcmVn ICVsZCIsIChsb25nKSBuYXJncywgKGxvbmcpIHJlZ190ZW1wKSk7CisJfQorCisJLyogZWF0IHRo ZSByaWdodCBwYXJlbiAqLworCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tf UlBBUkVOKTsgIC8qIFJlZ0V4cCBtb2RlIGRvZXMgbm90IG1hdHRlci4gKi8KKworCURVS19EREQo RFVLX0RERFBSSU5UKCJlbmQgcGFyc2luZyBhcmd1bWVudHMiKSk7CisKKwlyZXR1cm4gbmFyZ3M7 Cit9CisKK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fZXhwcl9pc19lbXB0eShkdWtfY29tcGls ZXJfY3R4ICpjb21wX2N0eCkgeworCS8qIGVtcHR5IGV4cHJlc3Npb25zIGNhbiBiZSBkZXRlY3Rl ZCBjb252ZW5pZW50bHkgd2l0aCBudWQvbGVkIGNvdW50cyAqLworCXJldHVybiAoY29tcF9jdHgt PmN1cnJfZnVuYy5udWRfY291bnQgPT0gMCkgJiYKKwkgICAgICAgKGNvbXBfY3R4LT5jdXJyX2Z1 bmMubGVkX2NvdW50ID09IDApOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2V4cHJfbnVkKGR1 a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMpIHsKKwlkdWtfaHRocmVh ZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKwlkdWtfdG9rZW4gKnRrOworCWR1a19yZWdjb25zdF90 IHRlbXBfYXRfZW50cnk7CisJZHVrX3NtYWxsX3VpbnRfdCB0b2s7CisJZHVrX3VpbnQzMl90IGFy Z3M7ICAvKiB0ZW1wIHZhcmlhYmxlIHRvIHBhc3MgY29uc3RhbnRzIGFuZCBmbGFncyB0byBzaGFy ZWQgY29kZSAqLworCisJLyoKKwkgKiAgY3R4LT5wcmV2X3Rva2VuICAgICB0b2tlbiB0byBwcm9j ZXNzIHdpdGggZHVrX19leHByX251ZCgpCisJICogIGN0eC0+Y3Vycl90b2tlbiAgICAgdXBkYXRl ZCBieSBjYWxsZXIKKwkgKgorCSAqICBOb3RlOiB0aGUgdG9rZW4gaW4gdGhlIHN3aXRjaCBiZWxv dyBoYXMgYWxyZWFkeSBiZWVuIGVhdGVuLgorCSAqLworCisJdGVtcF9hdF9lbnRyeSA9IERVS19f R0VUVEVNUChjb21wX2N0eCk7CisKKwljb21wX2N0eC0+Y3Vycl9mdW5jLm51ZF9jb3VudCsrOwor CisJdGsgPSAmY29tcF9jdHgtPnByZXZfdG9rZW47CisJdG9rID0gdGstPnQ7CisJcmVzLT50ID0g RFVLX0lWQUxfTk9ORTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJkdWtfX2V4cHJfbnVkKCks IHByZXZfdG9rZW4udD0lbGQsIGFsbG93X2luPSVsZCwgcGFyZW5fbGV2ZWw9JWxkIiwKKwkgICAg ICAgICAgICAgICAgICAgICAobG9uZykgdGstPnQsIChsb25nKSBjb21wX2N0eC0+Y3Vycl9mdW5j LmFsbG93X2luLCAobG9uZykgY29tcF9jdHgtPmN1cnJfZnVuYy5wYXJlbl9sZXZlbCkpOworCisJ c3dpdGNoICh0b2spIHsKKworCS8qIFBSSU1BUlkgRVhQUkVTU0lPTlMgKi8KKworCWNhc2UgRFVL X1RPS19USElTOiB7CisJCWR1a19yZWdjb25zdF90IHJlZ190ZW1wOworCQlyZWdfdGVtcCA9IERV S19fQUxMT0NURU1QKGNvbXBfY3R4KTsKKwkJZHVrX19lbWl0X2JjKGNvbXBfY3R4LAorCQkgICAg ICAgICAgICAgRFVLX09QX0xEVEhJUywKKwkJICAgICAgICAgICAgIHJlZ190ZW1wKTsKKwkJZHVr X19pdmFsdWVfcmVnY29uc3QocmVzLCByZWdfdGVtcCk7CisJCXJldHVybjsKKwl9CisJY2FzZSBE VUtfVE9LX0lERU5USUZJRVI6IHsKKwkJZHVrX19pdmFsdWVfdmFyX2hzdHJpbmcoY29tcF9jdHgs IHJlcywgdGstPnN0cjEpOworCQlyZXR1cm47CisJfQorCWNhc2UgRFVLX1RPS19OVUxMOiB7CisJ CWR1a19wdXNoX251bGwodGhyKTsKKwkJZ290byBwbGFpbl92YWx1ZTsKKwl9CisJY2FzZSBEVUtf VE9LX1RSVUU6IHsKKwkJZHVrX3B1c2hfdHJ1ZSh0aHIpOworCQlnb3RvIHBsYWluX3ZhbHVlOwor CX0KKwljYXNlIERVS19UT0tfRkFMU0U6IHsKKwkJZHVrX3B1c2hfZmFsc2UodGhyKTsKKwkJZ290 byBwbGFpbl92YWx1ZTsKKwl9CisJY2FzZSBEVUtfVE9LX05VTUJFUjogeworCQlkdWtfcHVzaF9u dW1iZXIodGhyLCB0ay0+bnVtKTsKKwkJZ290byBwbGFpbl92YWx1ZTsKKwl9CisJY2FzZSBEVUtf VE9LX1NUUklORzogeworCQlEVUtfQVNTRVJUKHRrLT5zdHIxICE9IE5VTEwpOworCQlkdWtfcHVz aF9oc3RyaW5nKHRociwgdGstPnN0cjEpOworCQlnb3RvIHBsYWluX3ZhbHVlOworCX0KKwljYXNl IERVS19UT0tfUkVHRVhQOiB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1JFR0VYUF9TVVBQT1JUKQor CQlkdWtfcmVnY29uc3RfdCByZWdfdGVtcDsKKwkJZHVrX3JlZ2NvbnN0X3QgcmNfcmVfYnl0ZWNv ZGU7ICAvKiBjb25zdCAqLworCQlkdWtfcmVnY29uc3RfdCByY19yZV9zb3VyY2U7ICAgIC8qIGNv bnN0ICovCisKKwkJRFVLX0FTU0VSVCh0ay0+c3RyMSAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVCh0 ay0+c3RyMiAhPSBOVUxMKTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgiZW1pdHRpbmcgcmVn ZXhwIG9wLCBzdHIxPSUhTywgc3RyMj0lIU8iLAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVr X2hlYXBoZHIgKikgdGstPnN0cjEsCisJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhk ciAqKSB0ay0+c3RyMikpOworCisJCXJlZ190ZW1wID0gRFVLX19BTExPQ1RFTVAoY29tcF9jdHgp OworCQlkdWtfcHVzaF9oc3RyaW5nKHRociwgdGstPnN0cjEpOworCQlkdWtfcHVzaF9oc3RyaW5n KHRociwgdGstPnN0cjIpOworCisJCS8qIFsgLi4uIHBhdHRlcm4gZmxhZ3MgXSAqLworCisJCWR1 a19yZWdleHBfY29tcGlsZSh0aHIpOworCisJCS8qIFsgLi4uIGVzY2FwZWRfc291cmNlIGJ5dGVj b2RlIF0gKi8KKworCQlyY19yZV9ieXRlY29kZSA9IGR1a19fZ2V0Y29uc3QoY29tcF9jdHgpOwor CQlyY19yZV9zb3VyY2UgPSBkdWtfX2dldGNvbnN0KGNvbXBfY3R4KTsKKworCQlkdWtfX2VtaXRf YV9iX2MoY29tcF9jdHgsCisJCSAgICAgICAgICAgICAgICBEVUtfT1BfUkVHRVhQIHwgRFVLX19F TUlUX0ZMQUdfQkNfUkVHQ09OU1QsCisJCSAgICAgICAgICAgICAgICByZWdfdGVtcCAvKmEqLywK KwkJICAgICAgICAgICAgICAgIHJjX3JlX2J5dGVjb2RlIC8qYiovLAorCQkgICAgICAgICAgICAg ICAgcmNfcmVfc291cmNlIC8qYyovKTsKKworCQlkdWtfX2l2YWx1ZV9yZWdjb25zdChyZXMsIHJl Z190ZW1wKTsKKwkJcmV0dXJuOworI2Vsc2UgIC8qIERVS19VU0VfUkVHRVhQX1NVUFBPUlQgKi8K KwkJZ290byBzeW50YXhfZXJyb3I7CisjZW5kaWYgIC8qIERVS19VU0VfUkVHRVhQX1NVUFBPUlQg Ki8KKwl9CisJY2FzZSBEVUtfVE9LX0xCUkFDS0VUOiB7CisJCURVS19EREQoRFVLX0RERFBSSU5U KCJwYXJzaW5nIGFycmF5IGxpdGVyYWwiKSk7CisJCWR1a19fbnVkX2FycmF5X2xpdGVyYWwoY29t cF9jdHgsIHJlcyk7CisJCXJldHVybjsKKwl9CisJY2FzZSBEVUtfVE9LX0xDVVJMWTogeworCQlE VUtfREREKERVS19ERERQUklOVCgicGFyc2luZyBvYmplY3QgbGl0ZXJhbCIpKTsKKwkJZHVrX19u dWRfb2JqZWN0X2xpdGVyYWwoY29tcF9jdHgsIHJlcyk7CisJCXJldHVybjsKKwl9CisJY2FzZSBE VUtfVE9LX0xQQVJFTjogeworCQlkdWtfYm9vbF90IHByZXZfYWxsb3dfaW47CisKKwkJY29tcF9j dHgtPmN1cnJfZnVuYy5wYXJlbl9sZXZlbCsrOworCQlwcmV2X2FsbG93X2luID0gY29tcF9jdHgt PmN1cnJfZnVuYy5hbGxvd19pbjsKKwkJY29tcF9jdHgtPmN1cnJfZnVuYy5hbGxvd19pbiA9IDE7 IC8qIHJlc2V0ICdhbGxvd19pbicgZm9yIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiAqLworCisJ CWR1a19fZXhwcihjb21wX2N0eCwgcmVzLCBEVUtfX0JQX0ZPUl9FWFBSIC8qcmJwX2ZsYWdzKi8p OyAgLyogRXhwcmVzc2lvbiwgdGVybWluYXRlcyBhdCBhICcpJyAqLworCisJCWR1a19fYWR2YW5j ZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfUlBBUkVOKTsgIC8qIE5vIFJlZ0V4cCBhZnRlciBw YXJlbnRoZXNpemVkIGV4cHJlc3Npb24uICovCisJCWNvbXBfY3R4LT5jdXJyX2Z1bmMuYWxsb3df aW4gPSBwcmV2X2FsbG93X2luOworCQljb21wX2N0eC0+Y3Vycl9mdW5jLnBhcmVuX2xldmVsLS07 CisJCXJldHVybjsKKwl9CisKKwkvKiBNRU1CRVIvTkVXL0NBTEwgRVhQUkVTU0lPTlMgKi8KKwor CWNhc2UgRFVLX1RPS19ORVc6IHsKKwkJLyoKKwkJICogIFBhcnNpbmcgYW4gZXhwcmVzc2lvbiBz dGFydGluZyB3aXRoICduZXcnIGlzIHRyaWNreSBiZWNhdXNlCisJCSAqICB0aGVyZSBhcmUgbXVs dGlwbGUgcG9zc2libGUgcHJvZHVjdGlvbnMgZGVyaXZpbmcgZnJvbQorCQkgKiAgTGVmdEhhbmRT aWRlRXhwcmVzc2lvbiB3aGljaCBiZWdpbiB3aXRoICduZXcnLgorCQkgKgorCQkgKiAgV2UgY3Vy cmVudGx5IHJlc29ydCB0byBvbmUtdG9rZW4gbG9va2FoZWFkIHRvIGRpc3Rpbmd1aXNoIHRoZQor CQkgKiAgY2FzZXMuICBIb3BlZnVsbHkgdGhpcyBpcyBjb3JyZWN0LiAgVGhlIGJpbmRpbmcgcG93 ZXIgbXVzdCBiZQorCQkgKiAgc3VjaCB0aGF0IHBhcnNpbmcgZW5kcyBhdCBhbiBMUEFSRU4gKENh bGxFeHByZXNzaW9uKSBidXQgbm90IGF0CisJCSAqICBhIFBFUklPRCBvciBMQlJBQ0tFVCAoTWVt YmVyRXhwcmVzc2lvbikuCisJCSAqCisJCSAqICBTZWUgZG9jL2NvbXBpbGVyLnJzdCBmb3IgZGlz Y3Vzc2lvbiBvbiB0aGUgcGFyc2luZyBhcHByb2FjaCwKKwkJICogIGFuZCB0ZXN0Y2FzZXMvdGVz dC1kZXYtbmV3LmpzIGZvciBhIGJ1bmNoIG9mIGRvY3VtZW50ZWQgdGVzdHMuCisJCSAqLworCisJ CWR1a19yZWdjb25zdF90IHJlZ190YXJnZXQ7CisJCWR1a19pbnRfdCBuYXJnczsKKworCQlEVUtf REREKERVS19ERERQUklOVCgiYmVnaW4gcGFyc2luZyBuZXcgZXhwcmVzc2lvbiIpKTsKKworCQly ZWdfdGFyZ2V0ID0gRFVLX19BTExPQ1RFTVBTKGNvbXBfY3R4LCAyKTsKKworI2lmIGRlZmluZWQo RFVLX1VTRV9FUzYpCisJCWlmIChjb21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfUEVS SU9EKSB7CisJCQkvKiBuZXcudGFyZ2V0ICovCisJCQlEVUtfREREKERVS19ERERQUklOVCgibmV3 LnRhcmdldCIpKTsKKwkJCWR1a19fYWR2YW5jZShjb21wX2N0eCk7CisJCQlpZiAoY29tcF9jdHgt PmN1cnJfdG9rZW4udF9ub3JlcyAhPSBEVUtfVE9LX0lERU5USUZJRVIgfHwKKwkJCSAgICAhZHVr X2hzdHJpbmdfZXF1YWxzX2FzY2lpX2NzdHJpbmcoY29tcF9jdHgtPmN1cnJfdG9rZW4uc3RyMSwg InRhcmdldCIpKSB7CisJCQkJZ290byBzeW50YXhfZXJyb3JfbmV3dGFyZ2V0OworCQkJfQorCQkJ aWYgKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfZ2xvYmFsKSB7CisJCQkJZ290byBzeW50YXhfZXJy b3JfbmV3dGFyZ2V0OworCQkJfQorCQkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsKKwkJCWR1a19f ZW1pdF9iYyhjb21wX2N0eCwKKwkJCSAgICAgICAgICAgICBEVUtfT1BfTkVXVEFSR0VULAorCQkJ ICAgICAgICAgICAgIHJlZ190YXJnZXQpOworCQkJZHVrX19pdmFsdWVfcmVnY29uc3QocmVzLCBy ZWdfdGFyZ2V0KTsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmICAvKiBEVUtfVVNFX0VTNiAqLwor CisJCWR1a19fZXhwcl90b2ZvcmNlZHJlZyhjb21wX2N0eCwgcmVzLCBEVUtfX0JQX0NBTEwgLypy YnBfZmxhZ3MqLywgcmVnX3RhcmdldCAvKmZvcmNlZF9yZWcqLyk7CisJCWR1a19fZW1pdF9iYyhj b21wX2N0eCwgRFVLX09QX05FV09CSiwgcmVnX3RhcmdldCArIDEpOyAgLyogZGVmYXVsdCBpbnN0 YW5jZSAqLworCQlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHJlZ190YXJnZXQgKyAyKTsKKworCQkv KiBYWFg6ICduZXcgb2JqLm5vU3VjaCgpJyBkb2Vzbid0IHVzZSBHRVRQUk9QQyBub3cgd2hpY2gK KwkJICogbWFrZXMgdGhlIGVycm9yIG1lc3NhZ2Ugd29yc2UgdGhhbiBmb3Igb2JqLm5vU3VjaCgp LgorCQkgKi8KKworCQlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX0xQQVJF TikgeworCQkJLyogJ25ldycgTWVtYmVyRXhwcmVzc2lvbiBBcmd1bWVudHMgKi8KKwkJCURVS19E REQoRFVLX0RERFBSSU5UKCJuZXcgZXhwcmVzc2lvbiBoYXMgYXJndW1lbnQgbGlzdCIpKTsKKwkJ CWR1a19fYWR2YW5jZShjb21wX2N0eCk7CisJCQluYXJncyA9IGR1a19fcGFyc2VfYXJndW1lbnRz KGNvbXBfY3R4LCByZXMpOyAgLyogcGFyc2UgYXJncyBzdGFydGluZyBmcm9tICJuZXh0IHRlbXAi LCByZWdfdGFyZ2V0ICsgMSAqLworCQkJLyogcmlnaHQgcGFyZW4gZWF0ZW4gKi8KKwkJfSBlbHNl IHsKKwkJCS8qICduZXcnIE1lbWJlckV4cHJlc3Npb24gKi8KKwkJCURVS19EREQoRFVLX0RERFBS SU5UKCJuZXcgZXhwcmVzc2lvbiBoYXMgbm8gYXJndW1lbnQgbGlzdCIpKTsKKwkJCW5hcmdzID0g MDsKKwkJfQorCisJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LAorCQkgICAgICAgICAgICAgIERV S19PUF9DQUxMMCB8IERVS19CQ19DQUxMX0ZMQUdfQ09OU1RSVUNULAorCQkgICAgICAgICAgICAg IG5hcmdzIC8qbnVtX2FyZ3MqLywKKwkJICAgICAgICAgICAgICByZWdfdGFyZ2V0IC8qdGFyZ2V0 Ki8pOworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJlbmQgcGFyc2luZyBuZXcgZXhwcmVzc2lv biIpKTsKKworCQlkdWtfX2l2YWx1ZV9yZWdjb25zdChyZXMsIHJlZ190YXJnZXQpOworCQlyZXR1 cm47CisJfQorCisJLyogRlVOQ1RJT04gRVhQUkVTU0lPTlMgKi8KKworCWNhc2UgRFVLX1RPS19G VU5DVElPTjogeworCQkvKiBGdW5jdGlvbiBleHByZXNzaW9uLiAgTm90ZSB0aGF0IGFueSBzdGF0 ZW1lbnQgYmVnaW5uaW5nIHdpdGggJ2Z1bmN0aW9uJworCQkgKiBpcyBoYW5kbGVkIGJ5IHRoZSBz dGF0ZW1lbnQgcGFyc2VyIGFzIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIG9yIGEKKwkJICogbm9u LXN0YW5kYXJkIGZ1bmN0aW9uIGV4cHJlc3Npb24vc3RhdGVtZW50IChvciBhIFN5bnRheEVycm9y KS4gIFdlIG9ubHkKKwkJICogaGFuZGxlIGFjdHVhbCBmdW5jdGlvbiBleHByZXNzaW9ucyAob2Nj dXJyaW5nIGluc2lkZSBhbiBleHByZXNzaW9uKSBoZXJlLgorCQkgKgorCQkgKiBPKGRlcHRoXjIp IHBhcnNlIGNvdW50IGZvciBpbm5lciBmdW5jdGlvbnMgaXMgaGFuZGxlZCBieSByZWNvcmRpbmcg YQorCQkgKiBsZXhlciBvZmZzZXQgb24gdGhlIGZpcnN0IGNvbXBpbGF0aW9uIHBhc3MsIHNvIHRo YXQgdGhlIGZ1bmN0aW9uIGNhbgorCQkgKiBiZSBlZmZpY2llbnRseSBza2lwcGVkIG9uIHRoZSBz ZWNvbmQgcGFzcy4gIFRoaXMgaXMgZW5jYXBzdWxhdGVkIGludG8KKwkJICogZHVrX19wYXJzZV9m dW5jX2xpa2VfZm51bSgpLgorCQkgKi8KKworCQlkdWtfcmVnY29uc3RfdCByZWdfdGVtcDsKKwkJ ZHVrX2ludF90IGZudW07CisKKwkJcmVnX3RlbXAgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7 CisKKwkJLyogY3Vycl90b2tlbiBmb2xsb3dzICdmdW5jdGlvbicgKi8KKwkJZm51bSA9IGR1a19f cGFyc2VfZnVuY19saWtlX2ZudW0oY29tcF9jdHgsIDAgLypmbGFncyovKTsKKwkJRFVLX0RERChE VUtfREREUFJJTlQoInBhcnNlZCBpbm5lciBmdW5jdGlvbiAtPiBmbnVtICVsZCIsIChsb25nKSBm bnVtKSk7CisKKwkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJCSAgICAgICAgICAgICAgIERV S19PUF9DTE9TVVJFLAorCQkgICAgICAgICAgICAgICByZWdfdGVtcCAvKmEqLywKKwkJICAgICAg ICAgICAgICAgKGR1a19yZWdjb25zdF90KSBmbnVtIC8qYmMqLyk7CisKKwkJZHVrX19pdmFsdWVf cmVnY29uc3QocmVzLCByZWdfdGVtcCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBVTkFSWSBFWFBS RVNTSU9OUyAqLworCisJY2FzZSBEVUtfVE9LX0RFTEVURTogeworCQkvKiBEZWxldGUgc2VtYW50 aWNzIGFyZSBhIGJpdCB0cmlja3kuICBUaGUgZGVzY3JpcHRpb24gaW4gRTUgc3BlY2lmaWNhdGlv bgorCQkgKiBpcyBraW5kIG9mIGNvbmZ1c2luZywgYmVjYXVzZSBpdCBkaXN0aW5ndWlzaGVzIGJl dHdlZW4gcmVzb2x2YWJpbGl0eSBvZgorCQkgKiBhIHJlZmVyZW5jZSAod2hpY2ggaXMgb25seSBr bm93biBhdCBydW50aW1lKSBzZWVtaW5nbHkgYXQgY29tcGlsZSB0aW1lCisJCSAqICg9IFN5bnRh eEVycm9yIHRocm93aW5nKS4KKwkJICovCisJCWR1a19fZXhwcihjb21wX2N0eCwgcmVzLCBEVUtf X0JQX01VTFRJUExJQ0FUSVZFIC8qcmJwX2ZsYWdzKi8pOyAgLyogVW5hcnlFeHByZXNzaW9uICov CisJCWlmIChyZXMtPnQgPT0gRFVLX0lWQUxfVkFSKSB7CisJCQkvKiBub3QgYWxsb3dlZCBpbiBz dHJpY3QgbW9kZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHJlc29sdmVzOworCQkJICogaW4gbm9u LXN0cmljdCBtb2RlIERFTFZBUiBoYW5kbGVzIGJvdGggbm9uLXJlc29sdmluZyBhbmQKKwkJCSAq IHJlc29sdmluZyBjYXNlcyAodGhlIHNwZWNpZmljYXRpb24gZGVzY3JpcHRpb24gaXMgYSBiaXQg Y29uZnVzaW5nKS4KKwkJCSAqLworCisJCQlkdWtfcmVnY29uc3RfdCByZWdfdGVtcDsKKwkJCWR1 a19yZWdjb25zdF90IHJlZ192YXJiaW5kOworCQkJZHVrX3JlZ2NvbnN0X3QgcmNfdmFybmFtZTsK KworCQkJaWYgKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfc3RyaWN0KSB7CisJCQkJRFVLX0VSUk9S X1NZTlRBWCh0aHIsIERVS19TVFJfQ0FOTk9UX0RFTEVURV9JREVOVElGSUVSKTsKKwkJCQlEVUtf V09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCQl9CisKKwkJCURVS19fU0VUVEVNUChjb21wX2N0eCwg dGVtcF9hdF9lbnRyeSk7CisJCQlyZWdfdGVtcCA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KTsK KworCQkJZHVrX2R1cCh0aHIsIHJlcy0+eDEudmFsc3RhY2tfaWR4KTsKKwkJCWlmIChkdWtfX2xv b2t1cF9saHMoY29tcF9jdHgsICZyZWdfdmFyYmluZCwgJnJjX3Zhcm5hbWUpKSB7CisJCQkJLyog cmVnaXN0ZXIgYm91bmQgdmFyaWFibGVzIGFyZSBub24tY29uZmlndXJhYmxlIC0+IGFsd2F5cyBm YWxzZSAqLworCQkJCWR1a19fZW1pdF9iYyhjb21wX2N0eCwKKwkJCQkgICAgICAgICAgICAgRFVL X09QX0xERkFMU0UsCisJCQkJICAgICAgICAgICAgIHJlZ190ZW1wKTsKKwkJCX0gZWxzZSB7CisJ CQkJZHVrX2R1cCh0aHIsIHJlcy0+eDEudmFsc3RhY2tfaWR4KTsKKwkJCQlyY192YXJuYW1lID0g ZHVrX19nZXRjb25zdChjb21wX2N0eCk7CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJ CQkJICAgICAgICAgICAgICAgRFVLX09QX0RFTFZBUiwKKwkJCQkgICAgICAgICAgICAgICByZWdf dGVtcCwKKwkJCQkgICAgICAgICAgICAgICByY192YXJuYW1lKTsKKwkJCX0KKwkJCWR1a19faXZh bHVlX3JlZ2NvbnN0KHJlcywgcmVnX3RlbXApOworCQl9IGVsc2UgaWYgKHJlcy0+dCA9PSBEVUtf SVZBTF9QUk9QKSB7CisJCQlkdWtfcmVnY29uc3RfdCByZWdfdGVtcDsKKwkJCWR1a19yZWdjb25z dF90IHJlZ19vYmo7CisJCQlkdWtfcmVnY29uc3RfdCByY19rZXk7CisKKwkJCURVS19fU0VUVEVN UChjb21wX2N0eCwgdGVtcF9hdF9lbnRyeSk7CisJCQlyZWdfdGVtcCA9IERVS19fQUxMT0NURU1Q KGNvbXBfY3R4KTsKKwkJCXJlZ19vYmogPSBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3KGNvbXBf Y3R4LCAmcmVzLT54MSwgLTEgLypmb3JjZWRfcmVnKi8sIDAgLypmbGFncyovKTsgIC8qIGRvbid0 IGFsbG93IGNvbnN0ICovCisJCQlyY19rZXkgPSBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3KGNv bXBfY3R4LCAmcmVzLT54MiwgLTEgLypmb3JjZWRfcmVnKi8sIERVS19fSVZBTF9GTEFHX0FMTE9X X0NPTlNUIC8qZmxhZ3MqLyk7CisJCQlkdWtfX2VtaXRfYV9iX2MoY29tcF9jdHgsCisJCQkgICAg ICAgICAgICAgICAgRFVLX09QX0RFTFBST1AgfCBEVUtfX0VNSVRfRkxBR19CQ19SRUdDT05TVCwK KwkJCSAgICAgICAgICAgICAgICByZWdfdGVtcCwKKwkJCSAgICAgICAgICAgICAgICByZWdfb2Jq LAorCQkJICAgICAgICAgICAgICAgIHJjX2tleSk7CisKKwkJCWR1a19faXZhbHVlX3JlZ2NvbnN0 KHJlcywgcmVnX3RlbXApOworCQl9IGVsc2UgeworCQkJLyogbm9uLVJlZmVyZW5jZSBkZWxldGlv biBpcyBhbHdheXMgJ3RydWUnLCBldmVuIGluIHN0cmljdCBtb2RlICovCisJCQlkdWtfcHVzaF90 cnVlKHRocik7CisJCQlnb3RvIHBsYWluX3ZhbHVlOworCQl9CisJCXJldHVybjsKKwl9CisJY2Fz ZSBEVUtfVE9LX1ZPSUQ6IHsKKwkJZHVrX19leHByX3RvcGxhaW5faWdub3JlKGNvbXBfY3R4LCBy ZXMsIERVS19fQlBfTVVMVElQTElDQVRJVkUgLypyYnBfZmxhZ3MqLyk7ICAvKiBVbmFyeUV4cHJl c3Npb24gKi8KKwkJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7CisJCWdvdG8gcGxhaW5fdmFsdWU7 CisJfQorCWNhc2UgRFVLX1RPS19UWVBFT0Y6IHsKKwkJLyogJ3R5cGVvZicgbXVzdCBoYW5kbGUg dW5yZXNvbHZhYmxlIHJlZmVyZW5jZXMgd2l0aG91dCB0aHJvd2luZworCQkgKiBhIFJlZmVyZW5j ZUVycm9yIChFNSBTZWN0aW9uIDExLjQuMykuICBSZWdpc3RlciBtYXBwZWQgdmFsdWVzCisJCSAq IHdpbGwgbmV2ZXIgYmUgdW5yZXNvbHZhYmxlIHNvIHNwZWNpYWwgaGFuZGxpbmcgaXMgb25seSBy ZXF1aXJlZAorCQkgKiB3aGVuIGFuIGlkZW50aWZpZXIgaXMgYSAic2xvdyBwYXRoIiBvbmUuCisJ CSAqLworCQlkdWtfX2V4cHIoY29tcF9jdHgsIHJlcywgRFVLX19CUF9NVUxUSVBMSUNBVElWRSAv KnJicF9mbGFncyovKTsgIC8qIFVuYXJ5RXhwcmVzc2lvbiAqLworCisJCWlmIChyZXMtPnQgPT0g RFVLX0lWQUxfVkFSKSB7CisJCQlkdWtfcmVnY29uc3RfdCByZWdfdmFyYmluZDsKKwkJCWR1a19y ZWdjb25zdF90IHJjX3Zhcm5hbWU7CisJCQlkdWtfcmVnY29uc3RfdCByZWdfdGVtcDsKKworCQkJ ZHVrX2R1cCh0aHIsIHJlcy0+eDEudmFsc3RhY2tfaWR4KTsKKwkJCWlmICghZHVrX19sb29rdXBf bGhzKGNvbXBfY3R4LCAmcmVnX3ZhcmJpbmQsICZyY192YXJuYW1lKSkgeworCQkJCURVS19EREQo RFVLX0RERFBSSU5UKCJ0eXBlb2YgZm9yIGFuIGlkZW50aWZpZXIgbmFtZSB3aGljaCBjb3VsZCBu b3QgYmUgcmVzb2x2ZWQgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJhdCBjb21waWxlIHRp bWUsIG5lZWQgdG8gdXNlIHNwZWNpYWwgcnVuLXRpbWUgaGFuZGxpbmciKSk7CisJCQkJcmVnX3Rl bXAgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9j dHgsCisJCQkJICAgICAgICAgICAgICAgRFVLX09QX1RZUEVPRklELAorCQkJCSAgICAgICAgICAg ICAgIHJlZ190ZW1wLAorCQkJCSAgICAgICAgICAgICAgIHJjX3Zhcm5hbWUpOworCQkJCWR1a19f aXZhbHVlX3JlZ2NvbnN0KHJlcywgcmVnX3RlbXApOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQor CisJCWFyZ3MgPSBEVUtfT1BfVFlQRU9GOworCQlnb3RvIHVuYXJ5OworCX0KKwljYXNlIERVS19U T0tfSU5DUkVNRU5UOiB7CisJCWFyZ3MgPSAoRFVLX09QX1BSRUlOQ1AgPDwgOCkgKyBEVUtfT1Bf UFJFSU5DUjsKKwkJZ290byBwcmVpbmNkZWM7CisJfQorCWNhc2UgRFVLX1RPS19ERUNSRU1FTlQ6 IHsKKwkJYXJncyA9IChEVUtfT1BfUFJFREVDUCA8PCA4KSArIERVS19PUF9QUkVERUNSOworCQln b3RvIHByZWluY2RlYzsKKwl9CisJY2FzZSBEVUtfVE9LX0FERDogeworCQkvKiB1bmFyeSBwbHVz ICovCisJCWR1a19fZXhwcihjb21wX2N0eCwgcmVzLCBEVUtfX0JQX01VTFRJUExJQ0FUSVZFIC8q cmJwX2ZsYWdzKi8pOyAgLyogVW5hcnlFeHByZXNzaW9uICovCisJCWlmIChyZXMtPnQgPT0gRFVL X0lWQUxfUExBSU4gJiYgcmVzLT54MS50ID09IERVS19JU1BFQ19WQUxVRSAmJgorCQkgICAgZHVr X2lzX251bWJlcih0aHIsIHJlcy0+eDEudmFsc3RhY2tfaWR4KSkgeworCQkJLyogdW5hcnkgcGx1 cyBvZiBhIG51bWJlciBpcyBpZGVudGl0eSAqLworCQkJcmV0dXJuOworCQl9CisJCWFyZ3MgPSBE VUtfT1BfVU5QOworCQlnb3RvIHVuYXJ5OworCX0KKwljYXNlIERVS19UT0tfU1VCOiB7CisJCS8q IHVuYXJ5IG1pbnVzICovCisJCWR1a19fZXhwcihjb21wX2N0eCwgcmVzLCBEVUtfX0JQX01VTFRJ UExJQ0FUSVZFIC8qcmJwX2ZsYWdzKi8pOyAgLyogVW5hcnlFeHByZXNzaW9uICovCisJCWlmIChy ZXMtPnQgPT0gRFVLX0lWQUxfUExBSU4gJiYgcmVzLT54MS50ID09IERVS19JU1BFQ19WQUxVRSAm JgorCQkgICAgZHVrX2lzX251bWJlcih0aHIsIHJlcy0+eDEudmFsc3RhY2tfaWR4KSkgeworCQkJ LyogdGhpcyBvcHRpbWl6YXRpb24gaXMgaW1wb3J0YW50IHRvIGhhbmRsZSBuZWdhdGl2ZSBsaXRl cmFscworCQkJICogKHdoaWNoIGFyZSBub3QgZGlyZWN0bHkgcHJvdmlkZWQgYnkgdGhlIGxleGlj YWwgZ3JhbW1hcikKKwkJCSAqLworCQkJZHVrX3R2YWwgKnR2X251bTsKKwkJCWR1a19kb3VibGVf dW5pb24gZHU7CisKKwkJCXR2X251bSA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCByZXMtPngx LnZhbHN0YWNrX2lkeCk7CisJCQlEVUtfQVNTRVJUKHR2X251bSAhPSBOVUxMKTsKKwkJCURVS19B U1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2X251bSkpOworCQkJZHUuZCA9IERVS19UVkFMX0dF VF9OVU1CRVIodHZfbnVtKTsKKwkJCWR1LmQgPSAtZHUuZDsKKwkJCURVS19EQkxVTklPTl9OT1JN QUxJWkVfTkFOX0NIRUNLKCZkdSk7CisJCQlEVUtfVFZBTF9TRVRfTlVNQkVSKHR2X251bSwgZHUu ZCk7CisJCQlyZXR1cm47CisJCX0KKwkJYXJncyA9IERVS19PUF9VTk07CisJCWdvdG8gdW5hcnk7 CisJfQorCWNhc2UgRFVLX1RPS19CTk9UOiB7CisJCWR1a19fZXhwcihjb21wX2N0eCwgcmVzLCBE VUtfX0JQX01VTFRJUExJQ0FUSVZFIC8qcmJwX2ZsYWdzKi8pOyAgLyogVW5hcnlFeHByZXNzaW9u ICovCisJCWFyZ3MgPSBEVUtfT1BfQk5PVDsKKwkJZ290byB1bmFyeTsKKwl9CisJY2FzZSBEVUtf VE9LX0xOT1Q6IHsKKwkJZHVrX19leHByKGNvbXBfY3R4LCByZXMsIERVS19fQlBfTVVMVElQTElD QVRJVkUgLypyYnBfZmxhZ3MqLyk7ICAvKiBVbmFyeUV4cHJlc3Npb24gKi8KKwkJaWYgKHJlcy0+ dCA9PSBEVUtfSVZBTF9QTEFJTiAmJiByZXMtPngxLnQgPT0gRFVLX0lTUEVDX1ZBTFVFKSB7CisJ CQkvKiBWZXJ5IG1pbmltYWwgaW5saW5pbmcgdG8gaGFuZGxlIGNvbW1vbiBpZGlvbXMgJyEwJyBh bmQgJyExJywKKwkJCSAqIGFuZCBhbHNvIGJvb2xlYW4gYXJndW1lbnRzIGxpa2UgJyFmYWxzZScg YW5kICchdHJ1ZScuCisJCQkgKi8KKwkJCWR1a190dmFsICp0dl92YWw7CisKKwkJCXR2X3ZhbCA9 IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCByZXMtPngxLnZhbHN0YWNrX2lkeCk7CisJCQlEVUtf QVNTRVJUKHR2X3ZhbCAhPSBOVUxMKTsKKwkJCWlmIChEVUtfVFZBTF9JU19OVU1CRVIodHZfdmFs KSkgeworCQkJCWR1a19kb3VibGVfdCBkOworCQkJCWQgPSBEVUtfVFZBTF9HRVRfTlVNQkVSKHR2 X3ZhbCk7CisJCQkJaWYgKGQgPT0gMC4wKSB7CisJCQkJCS8qIE1hdGNoZXMgYm90aCArMCBhbmQg LTAgb24gcHVycG9zZS4gKi8KKwkJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImlubGluZWQgbG5v dDogITAgLT4gdHJ1ZSIpKTsKKwkJCQkJRFVLX1RWQUxfU0VUX0JPT0xFQU5fVFJVRSh0dl92YWwp OworCQkJCQlyZXR1cm47CisJCQkJfSBlbHNlIGlmIChkID09IDEuMCkgeworCQkJCQlEVUtfRERE KERVS19ERERQUklOVCgiaW5saW5lZCBsbm90OiAhMSAtPiBmYWxzZSIpKTsKKwkJCQkJRFVLX1RW QUxfU0VUX0JPT0xFQU5fRkFMU0UodHZfdmFsKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0g ZWxzZSBpZiAoRFVLX1RWQUxfSVNfQk9PTEVBTih0dl92YWwpKSB7CisJCQkJZHVrX3NtYWxsX3Vp bnRfdCB2OworCQkJCXYgPSBEVUtfVFZBTF9HRVRfQk9PTEVBTih0dl92YWwpOworCQkJCURVS19E REQoRFVLX0RERFBSSU5UKCJpbmxpbmVkIGxub3QgYm9vbGVhbjogJWxkIiwgKGxvbmcpIHYpKTsK KwkJCQlEVUtfQVNTRVJUKHYgPT0gMCB8fCB2ID09IDEpOworCQkJCURVS19UVkFMX1NFVF9CT09M RUFOKHR2X3ZhbCwgdiBeIDB4MDEpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlhcmdzID0g RFVLX09QX0xOT1Q7CisJCWdvdG8gdW5hcnk7CisJfQorCisJfSAgLyogZW5kIHN3aXRjaCAqLwor CisJRFVLX0VSUk9SX1NZTlRBWCh0aHIsIERVS19TVFJfUEFSU0VfRVJST1IpOworCURVS19XT19O T1JFVFVSTihyZXR1cm47KTsKKworIHVuYXJ5OgorCXsKKwkJLyogVW5hcnkgb3Bjb2RlcyB1c2Ug anVzdCB0aGUgJ0JDJyByZWdpc3RlciBzb3VyY2UgYmVjYXVzZSBpdAorCQkgKiBtYXRjaGVzIGN1 cnJlbnQgc2h1ZmZsZSBsaW1pdHMsIGFuZCBtYXBzIGNsZWFubHkgdG8gMTYgaGlnaAorCQkgKiBi aXRzIG9mIHRoZSBvcGNvZGUuCisJCSAqLworCisJCWR1a19yZWdjb25zdF90IHJlZ19zcmMsIHJl Z19yZXM7CisKKwkJcmVnX3NyYyA9IGR1a19faXZhbHVlX3RvcmVnY29uc3RfcmF3KGNvbXBfY3R4 LCByZXMsIC0xIC8qZm9yY2VkX3JlZyovLCAwIC8qZmxhZ3MqLyk7CisJCWlmIChEVUtfX0lTUkVH X1RFTVAoY29tcF9jdHgsIHJlZ19zcmMpKSB7CisJCQlyZWdfcmVzID0gcmVnX3NyYzsKKwkJfSBl bHNlIHsKKwkJCXJlZ19yZXMgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCX0KKwkJZHVr X19lbWl0X2FfYmMoY29tcF9jdHgsCisJCSAgICAgICAgICAgICBhcmdzLAorCQkgICAgICAgICAg ICAgcmVnX3JlcywKKwkJICAgICAgICAgICAgIHJlZ19zcmMpOworCQlkdWtfX2l2YWx1ZV9yZWdj b25zdChyZXMsIHJlZ19yZXMpOworCQlyZXR1cm47CisJfQorCisgcHJlaW5jZGVjOgorCXsKKwkJ LyogcHJlaW5jcmVtZW50IGFuZCBwcmVkZWNyZW1lbnQgKi8KKwkJZHVrX3JlZ2NvbnN0X3QgcmVn X3JlczsKKwkJZHVrX3NtYWxsX3VpbnRfdCBhcmdzX29wMSA9IGFyZ3MgJiAweGZmOyAgLyogRFVL X09QX1BSRUlOQ1IvRFVLX09QX1BSRURFQ1IgKi8KKwkJZHVrX3NtYWxsX3VpbnRfdCBhcmdzX29w MiA9IGFyZ3MgPj4gODsgICAgLyogRFVLX09QX1BSRUlOQ1BfUlIvRFVLX09QX1BSRURFQ1BfUlIg Ki8KKworCQkvKiBTcGVjaWZpYyBhc3N1bXB0aW9ucyBmb3Igb3Bjb2RlIG51bWJlcmluZy4gKi8K KwkJRFVLX0FTU0VSVChEVUtfT1BfUFJFSU5DUiArIDQgPT0gRFVLX09QX1BSRUlOQ1YpOworCQlE VUtfQVNTRVJUKERVS19PUF9QUkVERUNSICsgNCA9PSBEVUtfT1BfUFJFREVDVik7CisKKwkJcmVn X3JlcyA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KTsKKworCQlkdWtfX2V4cHIoY29tcF9jdHgs IHJlcywgRFVLX19CUF9NVUxUSVBMSUNBVElWRSAvKnJicF9mbGFncyovKTsgIC8qIFVuYXJ5RXhw cmVzc2lvbiAqLworCQlpZiAocmVzLT50ID09IERVS19JVkFMX1ZBUikgeworCQkJZHVrX2hzdHJp bmcgKmhfdmFybmFtZTsKKwkJCWR1a19yZWdjb25zdF90IHJlZ192YXJiaW5kOworCQkJZHVrX3Jl Z2NvbnN0X3QgcmNfdmFybmFtZTsKKworCQkJaF92YXJuYW1lID0gZHVrX2tub3duX2hzdHJpbmco dGhyLCByZXMtPngxLnZhbHN0YWNrX2lkeCk7CisKKwkJCWlmIChkdWtfX2hzdHJpbmdfaXNfZXZh bF9vcl9hcmd1bWVudHNfaW5fc3RyaWN0X21vZGUoY29tcF9jdHgsIGhfdmFybmFtZSkpIHsKKwkJ CQlnb3RvIHN5bnRheF9lcnJvcjsKKwkJCX0KKworCQkJZHVrX2R1cCh0aHIsIHJlcy0+eDEudmFs c3RhY2tfaWR4KTsKKwkJCWlmIChkdWtfX2xvb2t1cF9saHMoY29tcF9jdHgsICZyZWdfdmFyYmlu ZCwgJnJjX3Zhcm5hbWUpKSB7CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJCQkJICAg ICAgICAgICAgICAgYXJnc19vcDEsICAvKiBlLmcuIERVS19PUF9QUkVJTkNSICovCisJCQkJICAg ICAgICAgICAgICAgcmVnX3JlcywKKwkJCQkgICAgICAgICAgICAgICByZWdfdmFyYmluZCk7CisJ CQl9IGVsc2UgeworCQkJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LAorCQkJCSAgICAgICAgICAg ICAgICBhcmdzX29wMSArIDQsICAvKiBlLmcuIERVS19PUF9QUkVJTkNWICovCisJCQkJICAgICAg ICAgICAgICAgIHJlZ19yZXMsCisJCQkJICAgICAgICAgICAgICAgIHJjX3Zhcm5hbWUpOworCQkJ fQorCisJCQlEVUtfREREKERVS19ERERQUklOVCgicHJlaW5jZGVjIHRvICclIU8nIC0+IHJlZ192 YXJiaW5kPSVsZCwgcmNfdmFybmFtZT0lbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGR1 a19oZWFwaGRyICopIGhfdmFybmFtZSwgKGxvbmcpIHJlZ192YXJiaW5kLCAobG9uZykgcmNfdmFy bmFtZSkpOworCQl9IGVsc2UgaWYgKHJlcy0+dCA9PSBEVUtfSVZBTF9QUk9QKSB7CisJCQlkdWtf cmVnY29uc3RfdCByZWdfb2JqOyAgLyogYWxsb2NhdGUgdG8gcmVnIG9ubHkgKG5vdCBjb25zdCkg Ki8KKwkJCWR1a19yZWdjb25zdF90IHJjX2tleTsKKwkJCXJlZ19vYmogPSBkdWtfX2lzcGVjX3Rv cmVnY29uc3RfcmF3KGNvbXBfY3R4LCAmcmVzLT54MSwgLTEgLypmb3JjZWRfcmVnKi8sIDAgLypm bGFncyovKTsgIC8qIGRvbid0IGFsbG93IGNvbnN0ICovCisJCQlyY19rZXkgPSBkdWtfX2lzcGVj X3RvcmVnY29uc3RfcmF3KGNvbXBfY3R4LCAmcmVzLT54MiwgLTEgLypmb3JjZWRfcmVnKi8sIERV S19fSVZBTF9GTEFHX0FMTE9XX0NPTlNUIC8qZmxhZ3MqLyk7CisJCQlkdWtfX2VtaXRfYV9iX2Mo Y29tcF9jdHgsCisJCQkgICAgICAgICAgICAgICAgYXJnc19vcDIgfCBEVUtfX0VNSVRfRkxBR19C Q19SRUdDT05TVCwgIC8qIGUuZy4gRFVLX09QX1BSRUlOQ1AgKi8KKwkJCSAgICAgICAgICAgICAg ICByZWdfcmVzLAorCQkJICAgICAgICAgICAgICAgIHJlZ19vYmosCisJCQkgICAgICAgICAgICAg ICAgcmNfa2V5KTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRlY2huaWNhbGx5IHJldHVybiB2YWx1ZSBp cyBub3QgbmVlZGVkIGJlY2F1c2UgSU5WTEhTIHdpbGwKKwkJCSAqIHVuY29uZGl0aWFsbHkgdGhy b3cgYSBSZWZlcmVuY2VFcnJvci4gIENvZXJjaW9uIGlzIG5lY2Vzc2FyeQorCQkJICogZm9yIHBy b3BlciBzZW1hbnRpY3MgKGNvbnNpZGVyIFRvTnVtYmVyKCkgY2FsbGVkIGZvciBhbiBvYmplY3Qp LgorCQkJICogVXNlIERVS19PUF9VTlAgd2l0aCBhIGR1bW15IHJlZ2lzdGVyIHRvIGdldCBUb051 bWJlcigpLgorCQkJICovCisKKwkJCWR1a19faXZhbHVlX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCBy ZXMsIHJlZ19yZXMpOworCQkJZHVrX19lbWl0X2JjKGNvbXBfY3R4LAorCQkJICAgICAgICAgICAg IERVS19PUF9VTlAsCisJCQkgICAgICAgICAgICAgcmVnX3Jlcyk7ICAvKiBmb3Igc2lkZSBlZmZl Y3RzLCByZXN1bHQgaWdub3JlZCAqLworCQkJZHVrX19lbWl0X29wX29ubHkoY29tcF9jdHgsCisJ CQkgICAgICAgICAgICAgICAgICBEVUtfT1BfSU5WTEhTKTsKKwkJfQorCQlEVUtfX1NFVFRFTVAo Y29tcF9jdHgsIHJlZ19yZXMgKyAxKTsKKwkJZHVrX19pdmFsdWVfcmVnY29uc3QocmVzLCByZWdf cmVzKTsKKwkJcmV0dXJuOworCX0KKworIHBsYWluX3ZhbHVlOgorCXsKKwkJLyogU3RhY2sgdG9w IGNvbnRhaW5zIHBsYWluIHZhbHVlICovCisJCWR1a19faXZhbHVlX3BsYWluX2Zyb21zdGFjayhj b21wX2N0eCwgcmVzKTsKKwkJcmV0dXJuOworCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzYp Cisgc3ludGF4X2Vycm9yX25ld3RhcmdldDoKKwlEVUtfRVJST1JfU1lOVEFYKHRociwgRFVLX1NU Ul9JTlZBTElEX05FV1RBUkdFVCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworI2VuZGlm CisKKyBzeW50YXhfZXJyb3I6CisJRFVLX0VSUk9SX1NZTlRBWCh0aHIsIERVS19TVFJfSU5WQUxJ RF9FWFBSRVNTSU9OKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKy8qIFhYWDog YWRkIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBjYWxsZXIgY2FyZXMgYWJvdXQgcmV0dXJuIHZh bHVlOyB0aGlzCisgKiBhZmZlY3RzIGUuZy4gaGFuZGxpbmcgb2YgYXNzaWdubWVudCBleHByZXNz aW9ucy4gIFRoaXMgY2hhbmdlIG5lZWRzIEFQSQorICogY2hhbmdlcyBlbHNld2hlcmUgdG9vLgor ICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2V4cHJfbGVkKGR1a19jb21waWxlcl9jdHggKmNvbXBf Y3R4LCBkdWtfaXZhbHVlICpsZWZ0LCBkdWtfaXZhbHVlICpyZXMpIHsKKwlkdWtfaHRocmVhZCAq dGhyID0gY29tcF9jdHgtPnRocjsKKwlkdWtfdG9rZW4gKnRrOworCWR1a19zbWFsbF91aW50X3Qg dG9rOworCWR1a191aW50MzJfdCBhcmdzOyAgLyogdGVtcCB2YXJpYWJsZSB0byBwYXNzIGNvbnN0 YW50cyBhbmQgZmxhZ3MgdG8gc2hhcmVkIGNvZGUgKi8KKworCS8qCisJICogIGN0eC0+cHJldl90 b2tlbiAgICAgdG9rZW4gdG8gcHJvY2VzcyB3aXRoIGR1a19fZXhwcl9sZWQoKQorCSAqICBjdHgt PmN1cnJfdG9rZW4gICAgIHVwZGF0ZWQgYnkgY2FsbGVyCisJICovCisKKwljb21wX2N0eC0+Y3Vy cl9mdW5jLmxlZF9jb3VudCsrOworCisJLyogVGhlIHRva2VuIGluIHRoZSBzd2l0Y2ggaGFzIGFs cmVhZHkgYmVlbiBlYXRlbiBoZXJlICovCisJdGsgPSAmY29tcF9jdHgtPnByZXZfdG9rZW47CisJ dG9rID0gdGstPnQ7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19leHByX2xlZCgpLCBw cmV2X3Rva2VuLnQ9JWxkLCBhbGxvd19pbj0lbGQsIHBhcmVuX2xldmVsPSVsZCIsCisJICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIHRrLT50LCAobG9uZykgY29tcF9jdHgtPmN1cnJfZnVuYy5h bGxvd19pbiwgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMucGFyZW5fbGV2ZWwpKTsKKworCS8q IFhYWDogZGVmYXVsdCBwcmlvcml0eSBmb3IgaW5maXggb3BlcmF0b3JzIGlzIGR1a19fZXhwcl9s YnAodG9rKSAtPiBnZXQgaXQgaGVyZT8gKi8KKworCXN3aXRjaCAodG9rKSB7CisKKwkvKiBQUklN QVJZIEVYUFJFU1NJT05TICovCisKKwljYXNlIERVS19UT0tfUEVSSU9EOiB7CisJCS8qIFByb3Bl cnR5IGFjY2VzcyBleHByZXNzaW9ucyBhcmUgY3JpdGljYWwgZm9yIGNvcnJlY3QgTEhTIG9yZGVy aW5nLAorCQkgKiBzZWUgY29tbWVudHMgaW4gZHVrX19leHByKCkhCisJCSAqCisJCSAqIEEgY29u c2VydmF0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHVzZSBkdWtfX2l2YWx1ZV90b3RlbXBjb25z dCgpCisJCSAqIGZvciAnbGVmdCcuICBIb3dldmVyLCBhbGxvd2luZyBhIHJlZy1ib3VuZCB2YXJp YWJsZSBzZWVtcyBzYWZlIGhlcmUKKwkJICogYW5kIGlzIG5pY2UgYmVjYXVzZSAiZm9vLmJhciIg aXMgYSBjb21tb24gZXhwcmVzc2lvbi4gIElmIHRoZSBpdmFsdWUKKwkJICogaXMgdXNlZCBpbiBh biBleHByZXNzaW9uIGEgR0VUUFJPUCB3aWxsIG9jY3VyIGJlZm9yZSBhbnkgY2hhbmdlcyB0bwor CQkgKiB0aGUgYmFzZSB2YWx1ZSBjYW4gb2NjdXIuICBJZiB0aGUgaXZhbHVlIGlzIHVzZWQgYXMg YW4gYXNzaWdubWVudAorCQkgKiBMSFMsIHRoZSBhc3NpZ25tZW50IGNvZGUgd2lsbCBlbnN1cmUg dGhlIGJhc2UgdmFsdWUgaXMgc2FmZSBmcm9tCisJCSAqIFJIUyBtdXRhdGlvbi4KKwkJICovCisK KwkJLyogWFhYOiBUaGlzIG5vdyBjb2VyY2VzIGFuIGlkZW50aWZpZXIgaW50byBhIEdFVFZBUiB0 byBhIHRlbXAsIHdoaWNoCisJCSAqIGNhdXNlcyBhbiBleHRyYSBMRFJFRyBpbiBjYWxsIHNldHVw LiAgSXQncyBzdWZmaWNpZW50IHRvIGNvZXJjZSB0byBhCisJCSAqIHVuYXJ5IGl2YWx1ZT8KKwkJ ICovCisJCWR1a19faXZhbHVlX3RvcGxhaW4oY29tcF9jdHgsIGxlZnQpOworCisJCS8qIE5COiBt dXN0IGFjY2VwdCByZXNlcnZlZCB3b3JkcyBhcyBwcm9wZXJ0eSBuYW1lICovCisJCWlmIChjb21w X2N0eC0+Y3Vycl90b2tlbi50X25vcmVzICE9IERVS19UT0tfSURFTlRJRklFUikgeworCQkJRFVL X0VSUk9SX1NZTlRBWCh0aHIsIERVS19TVFJfRVhQRUNURURfSURFTlRJRklFUik7CisJCQlEVUtf V09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCX0KKworCQlyZXMtPnQgPSBEVUtfSVZBTF9QUk9QOwor CQlkdWtfX2NvcHlfaXNwZWMoY29tcF9jdHgsICZsZWZ0LT54MSwgJnJlcy0+eDEpOyAgLyogbGVm dC54MSAtPiByZXMueDEgKi8KKwkJRFVLX0FTU0VSVChjb21wX2N0eC0+Y3Vycl90b2tlbi5zdHIx ICE9IE5VTEwpOworCQlkdWtfcHVzaF9oc3RyaW5nKHRociwgY29tcF9jdHgtPmN1cnJfdG9rZW4u c3RyMSk7CisJCWR1a19yZXBsYWNlKHRociwgcmVzLT54Mi52YWxzdGFja19pZHgpOworCQlyZXMt PngyLnQgPSBEVUtfSVNQRUNfVkFMVUU7CisKKwkJLyogc3BlY2lhbCBSZWdFeHAgbGl0ZXJhbCBo YW5kbGluZyBhZnRlciBJZGVudGlmaWVyTmFtZSAqLworCQljb21wX2N0eC0+Y3Vycl9mdW5jLnJl amVjdF9yZWdleHBfaW5fYWR2ID0gMTsKKworCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOworCQly ZXR1cm47CisJfQorCWNhc2UgRFVLX1RPS19MQlJBQ0tFVDogeworCQkvKiBQcm9wZXJ0eSBhY2Nl c3MgZXhwcmVzc2lvbnMgYXJlIGNyaXRpY2FsIGZvciBjb3JyZWN0IExIUyBvcmRlcmluZywKKwkJ ICogc2VlIGNvbW1lbnRzIGluIGR1a19fZXhwcigpIQorCQkgKi8KKworCQkvKiBYWFg6IG9wdGlt aXplIHRlbXAgcmVnIHVzZSAqLworCQkvKiBYWFg6IHNpbWlsYXIgY29lcmNpb24gaXNzdWUgYXMg aW4gRFVLX1RPS19QRVJJT0QgKi8KKwkJLyogWFhYOiBjb2VyY2UgdG8gcmVncz8gaXQgbWlnaHQg YmUgYmV0dGVyIGZvciBlbnVtZXJhdGlvbiB1c2UsIHdoZXJlIHRoZQorCQkgKiBzYW1lIFBST1Ag aXZhbHVlIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMuICBPciBwZXJoYXBzIGNvZXJjZSBQUk9QIGZ1 cnRoZXIKKwkJICogdGhlcmU/CisJCSAqLworCQkvKiBYWFg6IGZvciBzaW1wbGUgY2FzZXMgbGlr ZSB4Wyd5J10gYW4gdW5uZWNlc3NhcnkgTERSRUcgaXMKKwkJICogZW1pdHRlZCBmb3IgdGhlIGJh c2UgdmFsdWU7IGNvdWxkIGF2b2lkIGl0IGlmIHdlIGtuZXcgdGhhdAorCQkgKiB0aGUga2V5IGV4 cHJlc3Npb24gaXMgc2FmZSAoZS5nLiBqdXN0IGEgc2luZ2xlIGxpdGVyYWwpLgorCQkgKi8KKwor CQkvKiBUaGUgJ2xlZnQnIHZhbHVlIG11c3Qgbm90IGJlIGEgcmVnaXN0ZXIgYm91bmQgdmFyaWFi bGUKKwkJICogYmVjYXVzZSBpdCBtYXkgYmUgbXV0YXRlZCBkdXJpbmcgdGhlIHJlc3Qgb2YgdGhl IGV4cHJlc3Npb24KKwkJICogYW5kIEU1LjEgU2VjdGlvbiAxMS4yLjEgc3BlY2lmaWVzIHRoZSBv cmRlciBvZiBldmFsdWF0aW9uCisJCSAqIHNvIHRoYXQgdGhlIGJhc2UgdmFsdWUgaXMgZXZhbHVh dGVkIGZpcnN0LgorCQkgKiBTZWU6IHRlc3QtYnVnLW5lc3RlZC1wcm9wLW11dGF0ZS5qcy4KKwkJ ICovCisJCWR1a19faXZhbHVlX3RvdGVtcGNvbnN0KGNvbXBfY3R4LCBsZWZ0KTsKKwkJZHVrX19l eHByX3RvcGxhaW4oY29tcF9jdHgsIHJlcywgRFVLX19CUF9GT1JfRVhQUiAvKnJicF9mbGFncyov KTsgIC8qIEV4cHJlc3Npb24sICddJyB0ZXJtaW5hdGVzICovCisJCWR1a19fYWR2YW5jZV9leHBl Y3QoY29tcF9jdHgsIERVS19UT0tfUkJSQUNLRVQpOworCisJCXJlcy0+dCA9IERVS19JVkFMX1BS T1A7CisJCWR1a19fY29weV9pc3BlYyhjb21wX2N0eCwgJnJlcy0+eDEsICZyZXMtPngyKTsgICAv KiByZXMueDEgLT4gcmVzLngyICovCisJCWR1a19fY29weV9pc3BlYyhjb21wX2N0eCwgJmxlZnQt PngxLCAmcmVzLT54MSk7ICAvKiBsZWZ0LngxIC0+IHJlcy54MSAqLworCQlyZXR1cm47CisJfQor CWNhc2UgRFVLX1RPS19MUEFSRU46IHsKKwkJLyogZnVuY3Rpb24gY2FsbCAqLworCQlkdWtfcmVn Y29uc3RfdCByZWdfY3MgPSBEVUtfX0FMTE9DVEVNUFMoY29tcF9jdHgsIDIpOworCQlkdWtfaW50 X3QgbmFyZ3M7CisJCWR1a19zbWFsbF91aW50X3QgY2FsbF9vcCA9IERVS19PUF9DQUxMMDsKKwor CQkvKiBYWFg6IGF0dGVtcHQgdG8gZ2V0IHRoZSBjYWxsIHJlc3VsdCB0byAibmV4dCB0ZW1wIiB3 aGVuZXZlcgorCQkgKiBwb3NzaWJsZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWdpc3RlciBzaHVm Zmxlcy4KKwkJICovCisKKwkJLyoKKwkJICogIFNldHVwIGNhbGw6IHRhcmdldCBhbmQgJ3RoaXMn IGJpbmRpbmcuICBUaHJlZSBjYXNlczoKKwkJICoKKwkJICogICAgMS4gSWRlbnRpZmllciBiYXNl IChlLmcuICJmb28oKSIpCisJCSAqICAgIDIuIFByb3BlcnR5IGJhc2UgKGUuZy4gImZvby5iYXIo KSIpCisJCSAqICAgIDMuIFJlZ2lzdGVyIGJhc2UgKGUuZy4gImZvbygpKCkiOyBpLmUuIHdoZW4g YSByZXR1cm4gdmFsdWUgaXMgYSBmdW5jdGlvbikKKwkJICovCisKKwkJaWYgKGxlZnQtPnQgPT0g RFVLX0lWQUxfVkFSKSB7CisJCQlkdWtfaHN0cmluZyAqaF92YXJuYW1lOworCQkJZHVrX3JlZ2Nv bnN0X3QgcmVnX3ZhcmJpbmQ7CisJCQlkdWtfcmVnY29uc3RfdCByY192YXJuYW1lOworCisJCQlE VUtfREREKERVS19ERERQUklOVCgiZnVuY3Rpb24gY2FsbCB3aXRoIGlkZW50aWZpZXIgYmFzZSIp KTsKKworCQkJaF92YXJuYW1lID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCBsZWZ0LT54MS52YWxz dGFja19pZHgpOworCQkJaWYgKGhfdmFybmFtZSA9PSBEVUtfSFRIUkVBRF9TVFJJTkdfRVZBTCh0 aHIpKSB7CisJCQkJLyogUG90ZW50aWFsIGRpcmVjdCBldmFsIGNhbGwgZGV0ZWN0ZWQsIGZsYWcg dGhlIENBTEwKKwkJCQkgKiBzbyB0aGF0IGEgcnVuLXRpbWUgImRpcmVjdCBldmFsIiBjaGVjayBp cyBtYWRlIGFuZAorCQkJCSAqIHNwZWNpYWwgYmVoYXZpb3IgbWF5IGJlIHRyaWdnZXJlZC4gIE5v dGUgdGhhdCB0aGlzCisJCQkJICogZG9lcyBub3QgcHJldmVudCAnZXZhbCcgZnJvbSBiZWluZyBy ZWdpc3RlciBib3VuZC4KKwkJCQkgKi8KKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiZnVuY3Rp b24gY2FsbCB3aXRoIGlkZW50aWZpZXIgJ2V2YWwnICIKKwkJCQkgICAgICAgICAgICAgICAgICAg ICAiLT4gdXNpbmcgRVZBTENBTEwsIG1hcmtpbmcgZnVuY3Rpb24gIgorCQkJCSAgICAgICAgICAg ICAgICAgICAgICJhcyBtYXlfZGlyZWN0X2V2YWwiKSk7CisJCQkJY2FsbF9vcCB8PSBEVUtfQkNf Q0FMTF9GTEFHX0NBTExFRF9BU19FVkFMOworCQkJCWNvbXBfY3R4LT5jdXJyX2Z1bmMubWF5X2Rp cmVjdF9ldmFsID0gMTsKKwkJCX0KKworCQkJZHVrX2R1cCh0aHIsIGxlZnQtPngxLnZhbHN0YWNr X2lkeCk7CisJCQlpZiAoZHVrX19sb29rdXBfbGhzKGNvbXBfY3R4LCAmcmVnX3ZhcmJpbmQsICZy Y192YXJuYW1lKSkgeworCQkJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LAorCQkJCSAgICAgICAg ICAgICAgRFVLX09QX0NTUkVHIHwgRFVLX19FTUlUX0ZMQUdfQV9JU19TT1VSQ0UsCisJCQkJICAg ICAgICAgICAgICByZWdfdmFyYmluZCwKKwkJCQkgICAgICAgICAgICAgIHJlZ19jcyArIDApOwor CQkJfSBlbHNlIHsKKwkJCQkvKiBYWFg6IGV4cGFuZCB0YXJnZXQgcmVnaXN0ZXIgb3IgY29uc3Rh bnQgZmllbGQgdG8KKwkJCQkgKiByZWR1Y2Ugc2h1ZmZsaW5nLgorCQkJCSAqLworCQkJCURVS19B U1NFUlQoRFVLX19JU0NPTlNUKHJjX3Zhcm5hbWUpKTsKKwkJCQlkdWtfX2VtaXRfYV9iKGNvbXBf Y3R4LAorCQkJCSAgICAgICAgICAgICAgRFVLX09QX0NTVkFSIHwgRFVLX19FTUlUX0ZMQUdfQkNf UkVHQ09OU1QsCisJCQkJICAgICAgICAgICAgICByZWdfY3MgKyAwLAorCQkJCSAgICAgICAgICAg ICAgcmNfdmFybmFtZSk7CisJCQl9CisJCX0gZWxzZSBpZiAobGVmdC0+dCA9PSBEVUtfSVZBTF9Q Uk9QKSB7CisJCQkvKiBDYWxsIHRocm91Z2ggYSBwcm9wZXJ0eSBsb29rdXAsIEU1IFNlY3Rpb24g MTEuMi4zLCBzdGVwIDYuYS5pLAorCQkJICogRTUgU2VjdGlvbiAxMC40LjMuICBUaGVyZSB1c2Vk IHRvIGJlIGEgc2VwYXJhdGUgQ1NQUk9QIG9wY29kZQorCQkJICogYnV0IGEgdHlwaWNhbCBjYWxs IHNldHVwIHRvb2sgMyBvcGNvZGVzIChlLmcuIExEUkVHLCBMRENPTlNULAorCQkJICogQ1NQUk9Q KSBhbmQgdGhlIHNhbWUgY2FuIGJlIGFjaGlldmVkIHdpdGggb3JkaW5hcnkgbG9hZHMuCisJCQkg Ki8KKyNpZiBkZWZpbmVkKERVS19VU0VfVkVSQk9TRV9FUlJPUlMpCisJCQlkdWtfcmVnY29uc3Rf dCByZWdfa2V5OworI2VuZGlmCisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJmdW5jdGlvbiBj YWxsIHdpdGggcHJvcGVydHkgYmFzZSIpKTsKKworCQkJLyogWFhYOiBGb3IgTWF0aC5zaW4oKSB0 aGlzIGdlbmVyYXRlczogTERDT05TVCArIExEUkVHICsKKwkJCSAqIEdFVFBST1BDICsgY2FsbC4g IFRoZSBMRFJFRyBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIExEQ09OU1QKKwkJCSAqIGNvdWxkIGJl IGxvYWRlZCBkaXJlY3RseSBpbnRvIHJlZ19jcyArIDEuICBUaGlzIGRvZXNuJ3QKKwkJCSAqIGhh cHBlbiBub3cgYmVjYXVzZSBhIHZhcmlhYmxlIGNhbm5vdCBiZSBpbiBsZWZ0LT54MSBvZiBhCisJ CQkgKiBEVUtfSVZBTF9QUk9QLiAgV2UgY291bGQgbm90aWNlIHRoYXQgbGVmdC0+eDEgaXMgYSB0 ZW1wCisJCQkgKiBhbmQgcmV1c2UsIGJ1dCBpdCB3b3VsZCBzdGlsbCBiZSBpbiB0aGUgd3Jvbmcg cG9zaXRpb24KKwkJCSAqIChyZWdfY3MgKyAwIHJhdGhlciB0aGFuIHJlZ19jcyArIDEpLgorCQkJ ICovCisJCQlkdWtfX2lzcGVjX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCAmbGVmdC0+eDEsIHJlZ19j cyArIDEpOyAgLyogYmFzZSAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9WRVJCT1NFX0VSUk9SUykK KwkJCXJlZ19rZXkgPSBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3KGNvbXBfY3R4LCAmbGVmdC0+ eDIsIC0xLCBEVUtfX0lWQUxfRkxBR19BTExPV19DT05TVCAvKmZsYWdzKi8pOworCQkJZHVrX19l bWl0X2FfYl9jKGNvbXBfY3R4LAorCQkJICAgICAgICAgICAgICAgIERVS19PUF9HRVRQUk9QQyB8 IERVS19fRU1JVF9GTEFHX0JDX1JFR0NPTlNULAorCQkJICAgICAgICAgICAgICAgIHJlZ19jcyAr IDAsCisJCQkgICAgICAgICAgICAgICAgcmVnX2NzICsgMSwKKwkJCSAgICAgICAgICAgICAgICBy ZWdfa2V5KTsKKyNlbHNlCisJCQlkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0eCwgbGVm dCwgcmVnX2NzICsgMCk7ICAvKiBiYXNlW2tleV0gKi8KKyNlbmRpZgorCQl9IGVsc2UgeworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoImZ1bmN0aW9uIGNhbGwgd2l0aCByZWdpc3RlciBiYXNlIikp OworCisJCQlkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0eCwgbGVmdCwgcmVnX2NzICsg MCk7CisjaWYgMAorCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJCQkgICAgICAgICAgICAg ICBEVUtfT1BfQ1NSRUcgfCBEVUtfX0VNSVRfRkxBR19BX0lTX1NPVVJDRSwKKwkJCSAgICAgICAg ICAgICAgIHJlZ19jcyArIDAsCisJCQkgICAgICAgICAgICAgICByZWdfY3MgKyAwKTsgIC8qIGlu LXBsYWNlIHNldHVwICovCisjZW5kaWYKKwkJCS8qIEJlY2F1c2Ugb2YgaW4tcGxhY2Ugc2V0dXAs IFJFR0NTIGlzIGVxdWl2YWxlbnQgdG8KKwkJCSAqIGp1c3QgdGhpcyBMRFVOREVGLgorCQkJICov CisJCQlkdWtfX2VtaXRfYmMoY29tcF9jdHgsIERVS19PUF9MRFVOREVGLCByZWdfY3MgKyAxKTsK KwkJfQorCisJCURVS19fU0VUVEVNUChjb21wX2N0eCwgcmVnX2NzICsgMik7CisJCW5hcmdzID0g ZHVrX19wYXJzZV9hcmd1bWVudHMoY29tcF9jdHgsIHJlcyk7ICAvKiBwYXJzZSBhcmdzIHN0YXJ0 aW5nIGZyb20gIm5leHQgdGVtcCIgKi8KKworCQkvKiBUYWlsY2FsbHMgYXJlIGhhbmRsZWQgYnkg YmFjay1wYXRjaGluZyB0aGUgYWxyZWFkeSBlbWl0dGVkIG9wY29kZQorCQkgKiBsYXRlciBpbiBy ZXR1cm4gc3RhdGVtZW50IHBhcnNlci4KKwkJICovCisKKwkJZHVrX19lbWl0X2FfYmMoY29tcF9j dHgsCisJCSAgICAgICAgICAgICAgIGNhbGxfb3AsCisJCSAgICAgICAgICAgICAgIChkdWtfcmVn Y29uc3RfdCkgbmFyZ3MgLypudW1hcmdzKi8sCisJCSAgICAgICAgICAgICAgIHJlZ19jcyAvKmJh c2VyZWcqLyk7CisJCURVS19fU0VUVEVNUChjb21wX2N0eCwgcmVnX2NzICsgMSk7ICAgIC8qIHJl c3VsdCBpbiBjc3JlZyAqLworCisJCWR1a19faXZhbHVlX3JlZ2NvbnN0KHJlcywgcmVnX2NzKTsK KwkJcmV0dXJuOworCX0KKworCS8qIFBPU1RGSVggRVhQUkVTU0lPTiAqLworCisJY2FzZSBEVUtf VE9LX0lOQ1JFTUVOVDogeworCQlhcmdzID0gKERVS19PUF9QT1NUSU5DUF9SUiA8PCAxNikgKyAo RFVLX09QX1BPU1RJTkNSIDw8IDgpICsgMDsKKwkJZ290byBwb3N0aW5jZGVjOworCX0KKwljYXNl IERVS19UT0tfREVDUkVNRU5UOiB7CisJCWFyZ3MgPSAoRFVLX09QX1BPU1RERUNQX1JSIDw8IDE2 KSArIChEVUtfT1BfUE9TVERFQ1IgPDwgOCkgKyAwOworCQlnb3RvIHBvc3RpbmNkZWM7CisJfQor CisJLyogRVhQT05FTlRJQVRJT04gRVhQUkVTU0lPTiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNF X0VTN19FWFBfT1BFUkFUT1IpCisJY2FzZSBEVUtfVE9LX0VYUDogeworCQlhcmdzID0gKERVS19P UF9FWFAgPDwgOCkgKyBEVUtfX0JQX0VYUE9ORU5USUFUSU9OIC0gMTsgIC8qIFVuYXJ5RXhwcmVz c2lvbiAqLworCQlnb3RvIGJpbmFyeTsKKwl9CisjZW5kaWYKKworCS8qIE1VTFRJUExJQ0FUSVZF IEVYUFJFU1NJT04gKi8KKworCWNhc2UgRFVLX1RPS19NVUw6IHsKKwkJYXJncyA9IChEVUtfT1Bf TVVMIDw8IDgpICsgRFVLX19CUF9NVUxUSVBMSUNBVElWRTsgIC8qIEV4cG9uZW50aWF0aW9uRXhw cmVzc2lvbiAqLworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBEVUtfVE9LX0RJVjogeworCQlh cmdzID0gKERVS19PUF9ESVYgPDwgOCkgKyBEVUtfX0JQX01VTFRJUExJQ0FUSVZFOyAgLyogRXhw b25lbnRpYXRpb25FeHByZXNzaW9uICovCisJCWdvdG8gYmluYXJ5OworCX0KKwljYXNlIERVS19U T0tfTU9EOiB7CisJCWFyZ3MgPSAoRFVLX09QX01PRCA8PCA4KSArIERVS19fQlBfTVVMVElQTElD QVRJVkU7ICAvKiBFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gKi8KKwkJZ290byBiaW5hcnk7CisJ fQorCisJLyogQURESVRJVkUgRVhQUkVTU0lPTiAqLworCisJY2FzZSBEVUtfVE9LX0FERDogewor CQlhcmdzID0gKERVS19PUF9BREQgPDwgOCkgKyBEVUtfX0JQX0FERElUSVZFOyAgLyogTXVsdGlw bGljYXRpdmVFeHByZXNzaW9uICovCisJCWdvdG8gYmluYXJ5OworCX0KKwljYXNlIERVS19UT0tf U1VCOiB7CisJCWFyZ3MgPSAoRFVLX09QX1NVQiA8PCA4KSArIERVS19fQlBfQURESVRJVkU7ICAv KiBNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24gKi8KKwkJZ290byBiaW5hcnk7CisJfQorCisJLyog U0hJRlQgRVhQUkVTU0lPTiAqLworCisJY2FzZSBEVUtfVE9LX0FMU0hJRlQ6IHsKKwkJLyogPDwg Ki8KKwkJYXJncyA9IChEVUtfT1BfQkFTTCA8PCA4KSArIERVS19fQlBfU0hJRlQ7CisJCWdvdG8g YmluYXJ5OworCX0KKwljYXNlIERVS19UT0tfQVJTSElGVDogeworCQkvKiA+PiAqLworCQlhcmdz ID0gKERVS19PUF9CQVNSIDw8IDgpICsgRFVLX19CUF9TSElGVDsKKwkJZ290byBiaW5hcnk7CisJ fQorCWNhc2UgRFVLX1RPS19SU0hJRlQ6IHsKKwkJLyogPj4+ICovCisJCWFyZ3MgPSAoRFVLX09Q X0JMU1IgPDwgOCkgKyBEVUtfX0JQX1NISUZUOworCQlnb3RvIGJpbmFyeTsKKwl9CisKKwkvKiBS RUxBVElPTkFMIEVYUFJFU1NJT04gKi8KKworCWNhc2UgRFVLX1RPS19MVDogeworCQkvKiA8ICov CisJCWFyZ3MgPSAoRFVLX09QX0xUIDw8IDgpICsgRFVLX19CUF9SRUxBVElPTkFMOworCQlnb3Rv IGJpbmFyeTsKKwl9CisJY2FzZSBEVUtfVE9LX0dUOiB7CisJCWFyZ3MgPSAoRFVLX09QX0dUIDw8 IDgpICsgRFVLX19CUF9SRUxBVElPTkFMOworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBEVUtf VE9LX0xFOiB7CisJCWFyZ3MgPSAoRFVLX09QX0xFIDw8IDgpICsgRFVLX19CUF9SRUxBVElPTkFM OworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBEVUtfVE9LX0dFOiB7CisJCWFyZ3MgPSAoRFVL X09QX0dFIDw8IDgpICsgRFVLX19CUF9SRUxBVElPTkFMOworCQlnb3RvIGJpbmFyeTsKKwl9CisJ Y2FzZSBEVUtfVE9LX0lOU1RBTkNFT0Y6IHsKKwkJYXJncyA9IChEVUtfT1BfSU5TVE9GIDw8IDgp ICsgRFVLX19CUF9SRUxBVElPTkFMOworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBEVUtfVE9L X0lOOiB7CisJCWFyZ3MgPSAoRFVLX09QX0lOIDw8IDgpICsgRFVLX19CUF9SRUxBVElPTkFMOwor CQlnb3RvIGJpbmFyeTsKKwl9CisKKwkvKiBFUVVBTElUWSBFWFBSRVNTSU9OICovCisKKwljYXNl IERVS19UT0tfRVE6IHsKKwkJYXJncyA9IChEVUtfT1BfRVEgPDwgOCkgKyBEVUtfX0JQX0VRVUFM SVRZOworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBEVUtfVE9LX05FUTogeworCQlhcmdzID0g KERVS19PUF9ORVEgPDwgOCkgKyBEVUtfX0JQX0VRVUFMSVRZOworCQlnb3RvIGJpbmFyeTsKKwl9 CisJY2FzZSBEVUtfVE9LX1NFUTogeworCQlhcmdzID0gKERVS19PUF9TRVEgPDwgOCkgKyBEVUtf X0JQX0VRVUFMSVRZOworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBEVUtfVE9LX1NORVE6IHsK KwkJYXJncyA9IChEVUtfT1BfU05FUSA8PCA4KSArIERVS19fQlBfRVFVQUxJVFk7CisJCWdvdG8g YmluYXJ5OworCX0KKworCS8qIEJJVFdJU0UgRVhQUkVTU0lPTlMgKi8KKworCWNhc2UgRFVLX1RP S19CQU5EOiB7CisJCWFyZ3MgPSAoRFVLX09QX0JBTkQgPDwgOCkgKyBEVUtfX0JQX0JBTkQ7CisJ CWdvdG8gYmluYXJ5OworCX0KKwljYXNlIERVS19UT0tfQlhPUjogeworCQlhcmdzID0gKERVS19P UF9CWE9SIDw8IDgpICsgRFVLX19CUF9CWE9SOworCQlnb3RvIGJpbmFyeTsKKwl9CisJY2FzZSBE VUtfVE9LX0JPUjogeworCQlhcmdzID0gKERVS19PUF9CT1IgPDwgOCkgKyBEVUtfX0JQX0JPUjsK KwkJZ290byBiaW5hcnk7CisJfQorCisJLyogTE9HSUNBTCBFWFBSRVNTSU9OUyAqLworCisJY2Fz ZSBEVUtfVE9LX0xBTkQ6IHsKKwkJLyogc3ludGFjdGljYWxseSBsZWZ0LWFzc29jaWF0aXZlIGJ1 dCBwYXJzZWQgYXMgcmlnaHQtYXNzb2NpYXRpdmUgKi8KKwkJYXJncyA9ICgxIDw8IDgpICsgRFVL X19CUF9MQU5EIC0gMTsKKwkJZ290byBiaW5hcnlfbG9naWNhbDsKKwl9CisJY2FzZSBEVUtfVE9L X0xPUjogeworCQkvKiBzeW50YWN0aWNhbGx5IGxlZnQtYXNzb2NpYXRpdmUgYnV0IHBhcnNlZCBh cyByaWdodC1hc3NvY2lhdGl2ZSAqLworCQlhcmdzID0gKDAgPDwgOCkgKyBEVUtfX0JQX0xPUiAt IDE7CisJCWdvdG8gYmluYXJ5X2xvZ2ljYWw7CisJfQorCisJLyogQ09ORElUSU9OQUwgRVhQUkVT U0lPTiAqLworCisJY2FzZSBEVUtfVE9LX1FVRVNUSU9OOiB7CisJCS8qIFhYWDogY29tbW9uIHJl ZyBhbGxvY2F0aW9uIG5lZWQgaXMgdG8gcmV1c2UgYSBzdWItZXhwcmVzc2lvbidzIHRlbXAgcmVn LAorCQkgKiBidXQgb25seSBpZiBpdCByZWFsbHkgaXMgYSB0ZW1wLiAgTm90aGluZyBmYW5jeSBo ZXJlIG5vdy4KKwkJICovCisJCWR1a19yZWdjb25zdF90IHJlZ190ZW1wOworCQlkdWtfaW50X3Qg cGNfanVtcDE7CisJCWR1a19pbnRfdCBwY19qdW1wMjsKKworCQlyZWdfdGVtcCA9IERVS19fQUxM T0NURU1QKGNvbXBfY3R4KTsKKwkJZHVrX19pdmFsdWVfdG9mb3JjZWRyZWcoY29tcF9jdHgsIGxl ZnQsIHJlZ190ZW1wKTsKKwkJZHVrX19lbWl0X2lmX3RydWVfc2tpcChjb21wX2N0eCwgcmVnX3Rl bXApOworCQlwY19qdW1wMSA9IGR1a19fZW1pdF9qdW1wX2VtcHR5KGNvbXBfY3R4KTsgIC8qIGp1 bXAgdG8gZmFsc2UgKi8KKwkJZHVrX19leHByX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCByZXMsIERV S19fQlBfQ09NTUEgLypyYnBfZmxhZ3MqLywgcmVnX3RlbXAgLypmb3JjZWRfcmVnKi8pOyAgLyog QXNzaWdubWVudEV4cHJlc3Npb24gKi8KKwkJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwg RFVLX1RPS19DT0xPTik7CisJCXBjX2p1bXAyID0gZHVrX19lbWl0X2p1bXBfZW1wdHkoY29tcF9j dHgpOyAgLyoganVtcCB0byBlbmQgKi8KKwkJZHVrX19wYXRjaF9qdW1wX2hlcmUoY29tcF9jdHgs IHBjX2p1bXAxKTsKKwkJZHVrX19leHByX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCByZXMsIERVS19f QlBfQ09NTUEgLypyYnBfZmxhZ3MqLywgcmVnX3RlbXAgLypmb3JjZWRfcmVnKi8pOyAgLyogQXNz aWdubWVudEV4cHJlc3Npb24gKi8KKwkJZHVrX19wYXRjaF9qdW1wX2hlcmUoY29tcF9jdHgsIHBj X2p1bXAyKTsKKworCQlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHJlZ190ZW1wICsgMSk7CisJCWR1 a19faXZhbHVlX3JlZ2NvbnN0KHJlcywgcmVnX3RlbXApOworCQlyZXR1cm47CisJfQorCisJLyog QVNTSUdOTUVOVCBFWFBSRVNTSU9OICovCisKKwljYXNlIERVS19UT0tfRVFVQUxTSUdOOiB7CisJ CS8qCisJCSAqICBBc3NpZ25tZW50cyBhcmUgcmlnaHQgYXNzb2NpYXRpdmUsIGFsbG93cyBlLmcu CisJCSAqICAgIGEgPSA1OworCQkgKiAgICBhICs9IGIgPSA5OyAgIC8vIHNhbWUgYXMgYSArPSAo YiA9IDkpCisJCSAqICAtPiBleHByZXNzaW9uIHZhbHVlIDE0LCBhID0gMTQsIGIgPSA5CisJCSAq CisJCSAqICBSaWdodCBhc3NvY2lhdGl2aW5lc3MgaXMgcmVmbGVjdGVkIGluIHRoZSBCUCBmb3Ig cmVjdXJzaW9uLAorCQkgKiAgIi0xIiBlbnN1cmVzIGFzc2lnbm1lbnQgb3BlcmF0aW9ucyBhcmUg YWxsb3dlZC4KKwkJICoKKwkJICogIFhYWDoganVzdCB1c2UgRFVLX19CUF9DT01NQSAoaS5lLiBu byBuZWVkIGZvciAyLXN0ZXAgYnAgbGV2ZWxzKT8KKwkJICovCisJCWFyZ3MgPSAoRFVLX09QX05P TkUgPDwgOCkgKyBEVUtfX0JQX0FTU0lHTk1FTlQgLSAxOyAgIC8qIERVS19PUF9OT05FIG1hcmtz IGEgJ3BsYWluJyBhc3NpZ25tZW50ICovCisJCWdvdG8gYXNzaWduOworCX0KKwljYXNlIERVS19U T0tfQUREX0VROiB7CisJCS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFyZ3MgPSAoRFVLX09Q X0FERCA8PCA4KSArIERVS19fQlBfQVNTSUdOTUVOVCAtIDE7CisJCWdvdG8gYXNzaWduOworCX0K KwljYXNlIERVS19UT0tfU1VCX0VROiB7CisJCS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFy Z3MgPSAoRFVLX09QX1NVQiA8PCA4KSArIERVS19fQlBfQVNTSUdOTUVOVCAtIDE7CisJCWdvdG8g YXNzaWduOworCX0KKwljYXNlIERVS19UT0tfTVVMX0VROiB7CisJCS8qIHJpZ2h0IGFzc29jaWF0 aXZlICovCisJCWFyZ3MgPSAoRFVLX09QX01VTCA8PCA4KSArIERVS19fQlBfQVNTSUdOTUVOVCAt IDE7CisJCWdvdG8gYXNzaWduOworCX0KKwljYXNlIERVS19UT0tfRElWX0VROiB7CisJCS8qIHJp Z2h0IGFzc29jaWF0aXZlICovCisJCWFyZ3MgPSAoRFVLX09QX0RJViA8PCA4KSArIERVS19fQlBf QVNTSUdOTUVOVCAtIDE7CisJCWdvdG8gYXNzaWduOworCX0KKwljYXNlIERVS19UT0tfTU9EX0VR OiB7CisJCS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFyZ3MgPSAoRFVLX09QX01PRCA8PCA4 KSArIERVS19fQlBfQVNTSUdOTUVOVCAtIDE7CisJCWdvdG8gYXNzaWduOworCX0KKyNpZiBkZWZp bmVkKERVS19VU0VfRVM3X0VYUF9PUEVSQVRPUikKKwljYXNlIERVS19UT0tfRVhQX0VROiB7CisJ CS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFyZ3MgPSAoRFVLX09QX0VYUCA8PCA4KSArIERV S19fQlBfQVNTSUdOTUVOVCAtIDE7CisJCWdvdG8gYXNzaWduOworCX0KKyNlbmRpZgorCWNhc2Ug RFVLX1RPS19BTFNISUZUX0VROiB7CisJCS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFyZ3Mg PSAoRFVLX09QX0JBU0wgPDwgOCkgKyBEVUtfX0JQX0FTU0lHTk1FTlQgLSAxOworCQlnb3RvIGFz c2lnbjsKKwl9CisJY2FzZSBEVUtfVE9LX0FSU0hJRlRfRVE6IHsKKwkJLyogcmlnaHQgYXNzb2Np YXRpdmUgKi8KKwkJYXJncyA9IChEVUtfT1BfQkFTUiA8PCA4KSArIERVS19fQlBfQVNTSUdOTUVO VCAtIDE7CisJCWdvdG8gYXNzaWduOworCX0KKwljYXNlIERVS19UT0tfUlNISUZUX0VROiB7CisJ CS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFyZ3MgPSAoRFVLX09QX0JMU1IgPDwgOCkgKyBE VUtfX0JQX0FTU0lHTk1FTlQgLSAxOworCQlnb3RvIGFzc2lnbjsKKwl9CisJY2FzZSBEVUtfVE9L X0JBTkRfRVE6IHsKKwkJLyogcmlnaHQgYXNzb2NpYXRpdmUgKi8KKwkJYXJncyA9IChEVUtfT1Bf QkFORCA8PCA4KSArIERVS19fQlBfQVNTSUdOTUVOVCAtIDE7CisJCWdvdG8gYXNzaWduOworCX0K KwljYXNlIERVS19UT0tfQk9SX0VROiB7CisJCS8qIHJpZ2h0IGFzc29jaWF0aXZlICovCisJCWFy Z3MgPSAoRFVLX09QX0JPUiA8PCA4KSArIERVS19fQlBfQVNTSUdOTUVOVCAtIDE7CisJCWdvdG8g YXNzaWduOworCX0KKwljYXNlIERVS19UT0tfQlhPUl9FUTogeworCQkvKiByaWdodCBhc3NvY2lh dGl2ZSAqLworCQlhcmdzID0gKERVS19PUF9CWE9SIDw8IDgpICsgRFVLX19CUF9BU1NJR05NRU5U IC0gMTsKKwkJZ290byBhc3NpZ247CisJfQorCisJLyogQ09NTUEgKi8KKworCWNhc2UgRFVLX1RP S19DT01NQTogeworCQkvKiByaWdodCBhc3NvY2lhdGl2ZSAqLworCisJCWR1a19faXZhbHVlX3Rv cGxhaW5faWdub3JlKGNvbXBfY3R4LCBsZWZ0KTsgIC8qIG5lZWQgc2lkZSBlZmZlY3RzLCBub3Qg dmFsdWUgKi8KKwkJZHVrX19leHByX3RvcGxhaW4oY29tcF9jdHgsIHJlcywgRFVLX19CUF9DT01N QSAtIDEgLypyYnBfZmxhZ3MqLyk7CisKKwkJLyogcmV0dXJuICdyZXMnIChvZiByaWdodCBwYXJ0 KSBhcyBvdXIgcmVzdWx0ICovCisJCXJldHVybjsKKwl9CisKKwlkZWZhdWx0OiB7CisJCWJyZWFr OworCX0KKwl9CisKKwlEVUtfRChEVUtfRFBSSU5UKCJwYXJzZSBlcnJvcjogdW5leHBlY3RlZCB0 b2tlbjogJWxkIiwgKGxvbmcpIHRvaykpOworCURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtfU1RS X1BBUlNFX0VSUk9SKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisKKyNpZiAwCisJLyog WFhYOiBzaGFyZWQgaGFuZGxpbmcgZm9yICdkdWtfX2V4cHJfbGhzJz8gKi8KKwlpZiAoY29tcF9j dHgtPmN1cnJfZnVuYy5wYXJlbl9sZXZlbCA9PSAwICYmIFhYWCkgeworCQljb21wX2N0eC0+Y3Vy cl9mdW5jLmR1a19fZXhwcl9saHMgPSAwOworCX0KKyNlbmRpZgorCisgYmluYXJ5OgorCS8qCisJ ICogIFNoYXJlZCBoYW5kbGluZyBvZiBiaW5hcnkgb3BlcmF0aW9ucworCSAqCisJICogIGFyZ3Mg PSAob3Bjb2RlIDw8IDgpICsgcmJwCisJICovCisJeworCQlkdWtfX2l2YWx1ZV90b3BsYWluKGNv bXBfY3R4LCBsZWZ0KTsKKwkJZHVrX19leHByX3RvcGxhaW4oY29tcF9jdHgsIHJlcywgYXJncyAm IDB4ZmYgLypyYnBfZmxhZ3MqLyk7CisKKwkJLyogY29tYmluZSBsZWZ0LT54MSBhbmQgcmVzLT54 MSAocmlnaHQtPngxLCByZWFsbHkpIC0+IChsZWZ0LT54MSBPUCByZXMtPngxKSAqLworCQlEVUtf QVNTRVJUKGxlZnQtPnQgPT0gRFVLX0lWQUxfUExBSU4pOworCQlEVUtfQVNTRVJUKHJlcy0+dCA9 PSBEVUtfSVZBTF9QTEFJTik7CisKKwkJcmVzLT50ID0gRFVLX0lWQUxfQVJJVEg7CisJCXJlcy0+ b3AgPSAoYXJncyA+PiA4KSAmIDB4ZmY7CisKKwkJcmVzLT54Mi50ID0gcmVzLT54MS50OworCQly ZXMtPngyLnJlZ2NvbnN0ID0gcmVzLT54MS5yZWdjb25zdDsKKwkJZHVrX2NvcHkodGhyLCByZXMt PngxLnZhbHN0YWNrX2lkeCwgcmVzLT54Mi52YWxzdGFja19pZHgpOworCisJCXJlcy0+eDEudCA9 IGxlZnQtPngxLnQ7CisJCXJlcy0+eDEucmVnY29uc3QgPSBsZWZ0LT54MS5yZWdjb25zdDsKKwkJ ZHVrX2NvcHkodGhyLCBsZWZ0LT54MS52YWxzdGFja19pZHgsIHJlcy0+eDEudmFsc3RhY2tfaWR4 KTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgiYmluYXJ5IG9wLCByZXM6IHQ9JWxkLCB4MS50 PSVsZCwgeDEucmVnY29uc3Q9MHglMDhseCwgeDIudD0lbGQsIHgyLnJlZ2NvbnN0PTB4JTA4bHgi LAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgcmVzLT50LCAobG9uZykgcmVzLT54MS50 LCAodW5zaWduZWQgbG9uZykgcmVzLT54MS5yZWdjb25zdCwgKGxvbmcpIHJlcy0+eDIudCwgKHVu c2lnbmVkIGxvbmcpIHJlcy0+eDIucmVnY29uc3QpKTsKKwkJcmV0dXJuOworCX0KKworIGJpbmFy eV9sb2dpY2FsOgorCS8qCisJICogIFNoYXJlZCBoYW5kbGluZyBmb3IgbG9naWNhbCBBTkQgYW5k IGxvZ2ljYWwgT1IuCisJICoKKwkgKiAgYXJncyA9ICh0cnV0aHZhbCA8PCA4KSArIHJicAorCSAq CisJICogIFRydXRodmFsIGRldGVybWluZXMgd2hlbiB0byBza2lwIHJpZ2h0LWhhbmQtc2lkZS4K KwkgKiAgRm9yIGxvZ2ljYWwgQU5EIHRydXRodmFsPTEsIGZvciBsb2dpY2FsIE9SIHRydXRodmFs PTAuCisJICoKKwkgKiAgU2VlIGRvYy9jb21waWxlci5yc3QgZm9yIGRpc2N1c3Npb24gb24gY29t cGlsaW5nIGxvZ2ljYWwKKwkgKiAgQU5EIGFuZCBPUiBleHByZXNzaW9ucy4gIFRoZSBhcHByb2Fj aCBoZXJlIGlzIHZlcnkgc2ltcGxpc3RpYywKKwkgKiAgZ2VuZXJhdGluZyBleHRyYSBqdW1wcyBh bmQgbXVsdGlwbGUgZXZhbHVhdGlvbnMgb2YgdHJ1dGggdmFsdWVzLAorCSAqICBidXQgZ2VuZXJh dGVzIGNvZGUgb24tdGhlLWZseSB3aXRoIG9ubHkgbG9jYWwgYmFjay1wYXRjaGluZy4KKwkgKgor CSAqICBCb3RoIGxvZ2ljYWwgQU5EIGFuZCBPUiBhcmUgc3ludGFjdGljYWxseSBsZWZ0LWFzc29j aWF0ZWQuCisJICogIEhvd2V2ZXIsIGxvZ2ljYWwgQU5EcyBhcmUgY29tcGlsZWQgYXMgcmlnaHQg YXNzb2NpYXRpdmUKKwkgKiAgZXhwcmVzc2lvbnMsIGkuZS4gIkEgJiYgQiAmJiBDIiBhcyAiQSAm JiAoQiAmJiBDKSIsIHRvIGFsbG93CisJICogIHNraXAganVtcHMgdG8gc2tpcCBvdmVyIHRoZSBl bnRpcmUgdGFpbC4gIFNpbWlsYXJseSBmb3IgbG9naWNhbCBPUi4KKwkgKi8KKworCXsKKwkJZHVr X3JlZ2NvbnN0X3QgcmVnX3RlbXA7CisJCWR1a19pbnRfdCBwY19qdW1wOworCQlkdWtfc21hbGxf dWludF90IGFyZ3NfdHJ1dGh2YWwgPSBhcmdzID4+IDg7CisJCWR1a19zbWFsbF91aW50X3QgYXJn c19yYnAgPSBhcmdzICYgMHhmZjsKKworCQkvKiBYWFg6IHVub3B0aW1hbCB1c2Ugb2YgdGVtcHMs IHJlc2V0dGluZyAqLworCisJCXJlZ190ZW1wID0gRFVLX19BTExPQ1RFTVAoY29tcF9jdHgpOwor CisJCWR1a19faXZhbHVlX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCBsZWZ0LCByZWdfdGVtcCk7CisJ CURVS19BU1NFUlQoRFVLX19JU1JFRyhyZWdfdGVtcCkpOworCQlkdWtfX2VtaXRfYmMoY29tcF9j dHgsCisJCSAgICAgICAgICAgIChhcmdzX3RydXRodmFsID8gRFVLX09QX0lGVFJVRV9SIDogRFVL X09QX0lGRkFMU0VfUiksCisJCSAgICAgICAgICAgIHJlZ190ZW1wKTsgIC8qIHNraXAganVtcCBj b25kaXRpb25hbGx5ICovCisJCXBjX2p1bXAgPSBkdWtfX2VtaXRfanVtcF9lbXB0eShjb21wX2N0 eCk7CisJCWR1a19fZXhwcl90b2ZvcmNlZHJlZyhjb21wX2N0eCwgcmVzLCBhcmdzX3JicCAvKnJi cF9mbGFncyovLCByZWdfdGVtcCAvKmZvcmNlZF9yZWcqLyk7CisJCWR1a19fcGF0Y2hfanVtcF9o ZXJlKGNvbXBfY3R4LCBwY19qdW1wKTsKKworCQlkdWtfX2l2YWx1ZV9yZWdjb25zdChyZXMsIHJl Z190ZW1wKTsKKwkJcmV0dXJuOworCX0KKworIGFzc2lnbjoKKwkvKgorCSAqICBTaGFyZWQgYXNz aWdubWVudCBleHByZXNzaW9uIGhhbmRsaW5nCisJICoKKwkgKiAgYXJncyA9IChvcGNvZGUgPDwg OCkgKyByYnAKKwkgKgorCSAqICBJZiAnb3Bjb2RlJyBpcyBEVUtfT1BfTk9ORSwgcGxhaW4gYXNz aWdubWVudCB3aXRob3V0IGFyaXRobWV0aWMuCisJICogIFN5bnRhY3RpY2FsbHkgdmFsaWQgbGVm dC1oYW5kLXNpZGUgZm9ybXMgd2hpY2ggYXJlIG5vdCBhY2NlcHRlZCBhcworCSAqICBsZWZ0LWhh bmQtc2lkZSB2YWx1ZXMgKGUuZy4gYXMgaW4gImYoKSA9IDEiKSBtdXN0IE5PVCBjYXVzZSBhCisJ ICogIFN5bnRheEVycm9yLCBidXQgcmF0aGVyIGEgcnVuLXRpbWUgUmVmZXJlbmNlRXJyb3IuCisJ ICoKKwkgKiAgV2hlbiBldmFsdWF0aW5nIFggPG9wPj0gWSwgdGhlIExIUyAoWCkgaXMgY29uY2Vw dHVhbGx5IGV2YWx1YXRlZAorCSAqICB0byBhIHRlbXBvcmFyeSBmaXJzdC4gIFRoZSBSSFMgaXMg dGhlbiBldmFsdWF0ZWQuICBGaW5hbGx5LCB0aGUKKwkgKiAgPG9wPiBpcyBhcHBsaWVkIHRvIHRo ZSBpbml0aWFsIHZhbHVlIG9mIFJIUyAobm90IHRoZSB2YWx1ZSBhZnRlcgorCSAqICBSSFMgZXZh bHVhdGlvbiksIGFuZCB3cml0dGVuIHRvIFguICBEb2luZyBzbyBjb25jcmV0ZWx5IGdlbmVyYXRl cworCSAqICBpbmVmZmljaWVudCBjb2RlIHNvIHdlJ2QgbGlrZSB0byBhdm9pZCB0aGUgdGVtcG9y YXJ5IHdoZW4gcG9zc2libGUuCisJICogIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3N2YWFyYWxh L2R1a3RhcGUvcHVsbC85OTIuCisJICoKKwkgKiAgVGhlIGV4cHJlc3Npb24gdmFsdWUgKGZpbmFs IExIUyB2YWx1ZSwgd3JpdHRlbiB0byBSSFMpIGlzCisJICogIGNvbmNlcHR1YWxseSBjb3BpZWQg aW50byBhIGZyZXNoIHRlbXBvcmFyeSBzbyB0aGF0IGl0IHdvbid0CisJICogIGNoYW5nZSBldmVu IGlmIHRoZSBMSFMvUkhTIHZhbHVlcyBjaGFuZ2UgaW4gb3V0ZXIgZXhwcmVzc2lvbnMuCisJICog IEZvciBleGFtcGxlLCBpdCdkIGJlIGdlbmVyYWxseSBpbmNvcnJlY3QgZm9yIHRoZSBleHByZXNz aW9uIHZhbHVlCisJICogIHRvIGJlIHRoZSBSSFMgcmVnaXN0ZXIgYmluZGluZywgdW5sZXNzIHRo ZXJlJ3MgYSBndWFyYW50ZWUgdGhhdCBpdAorCSAqICB3b24ndCBjaGFuZ2UgZHVyaW5nIGZ1cnRo ZXIgZXhwcmVzc2lvbiBldmFsdWF0aW9uLiAgVXNpbmcgdGhlCisJICogIHRlbXBvcmFyeSBjb25j cmV0ZWx5IHByb2R1Y2VzIGluZWZmaWNpZW50IGJ5dGVjb2RlLCBzbyB3ZSB0cnkgdG8KKwkgKiAg YXZvaWQgdGhlIGV4dHJhIHRlbXBvcmFyeSBmb3Igc29tZSBrbm93bi10by1iZS1zYWZlIGNhc2Vz LgorCSAqICBDdXJyZW50bHkgdGhlIG9ubHkgc2FmZSBjYXNlIHdlIGRldGVjdCBpcyBhICJ0b3Ag bGV2ZWwgYXNzaWdubWVudCIsCisJICogIGZvciBleGFtcGxlICJ4ID0geSArIHo7Iiwgd2hlcmUg dGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiB2YWx1ZSBpcworCSAqICBpZ25vcmVkLgorCSAqICBT ZWU6IHRlc3QtZGV2LWFzc2lnbi1leHByLmpzIGFuZCB0ZXN0LWJ1Zy1hc3NpZ24tbXV0YXRlLWdo MzgxLmpzLgorCSAqLworCisJeworCQlkdWtfc21hbGxfdWludF90IGFyZ3Nfb3AgPSBhcmdzID4+ IDg7CisJCWR1a19zbWFsbF91aW50X3QgYXJnc19yYnAgPSBhcmdzICYgMHhmZjsKKwkJZHVrX2Jv b2xfdCB0b3BsZXZlbF9hc3NpZ247CisKKwkJLyogWFhYOiBoZXJlIHdlIG5lZWQgdG8ga25vdyBp ZiAnbGVmdCcgaXMgbGVmdC1oYW5kLXNpZGUgY29tcGF0aWJsZS4KKwkJICogVGhhdCBpbmZvcm1h dGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGZyb20gY3VycmVudCBleHByIHBhcnNpbmcKKwkJ ICogc3RhdGU7IGl0IHdvdWxkIG5lZWQgdG8gYmUgY2FycmllZCBpbnRvIHRoZSAnbGVmdCcgaXZh bHVlIG9yIGJ5CisJCSAqIHNvbWUgb3RoZXIgbWVhbnMuCisJCSAqLworCisJCS8qIEEgdG9wLWxl dmVsIGFzc2lnbm1lbnQgaXMgZS5nLiAieCA9IHk7Ii4gIEZvciB0aGVzZSBpdCdzIHNhZmUKKwkJ ICogdG8gdXNlIHRoZSBSSFMgYXMtaXMgYXMgdGhlIGV4cHJlc3Npb24gdmFsdWUsIGV2ZW4gaWYg dGhlIFJIUworCQkgKiBpcyBhIHJlZy1ib3VuZCBpZGVudGlmaWVyLiAgVGhlIFJIUyAoJ3Jlcycp IGlzIHJpZ2h0IGFzc29jaWF0aXZlCisJCSAqIHNvIGl0IGhhcyBjb25zdW1lZCBhbGwgb3RoZXIg YXNzaWdubWVudCBsZXZlbCBvcGVyYXRpb25zOyB0aGUKKwkJICogb25seSByZWxldmFudCBsb3dl ciBiaW5kaW5nIHBvd2VyIGNvbnN0cnVjdCBpcyBjb21tYSBvcGVyYXRvcgorCQkgKiB3aGljaCB3 aWxsIGlnbm9yZSB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBwcm92aWRlZCBoZXJlLiAgVXN1YWxseQor CQkgKiB0aGUgdG9wIGxldmVsIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiB2YWx1ZSBpcyBpZ25vcmVk LCBidXQgaXQKKwkJICogaXMgcmVsZXZhbnQgZm9yIGUuZy4gZXZhbCBjb2RlLgorCQkgKi8KKwkJ dG9wbGV2ZWxfYXNzaWduID0gKGNvbXBfY3R4LT5jdXJyX2Z1bmMubnVkX2NvdW50ID09IDEgJiYg Lyogb25lIHRva2VuIGJlZm9yZSAqLworCQkgICAgICAgICAgICAgICAgICAgY29tcF9jdHgtPmN1 cnJfZnVuYy5sZWRfY291bnQgPT0gMSk7ICAvKiBvbmUgb3BlcmF0b3IgKD0gYXNzaWduKSAqLwor CQlEVUtfREREKERVS19ERERQUklOVCgiYXNzaWdubWVudDogbnVkX2NvdW50PSVsZCwgbGVkX2Nv dW50PSVsZCwgdG9wbGV2ZWxfYXNzaWduPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBjb21wX2N0eC0+Y3Vycl9mdW5jLm51ZF9jb3VudCwKKwkJICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMubGVkX2NvdW50LAorCQkgICAgICAgICAgICAg ICAgICAgICAobG9uZykgdG9wbGV2ZWxfYXNzaWduKSk7CisKKwkJaWYgKGxlZnQtPnQgPT0gRFVL X0lWQUxfVkFSKSB7CisJCQlkdWtfaHN0cmluZyAqaF92YXJuYW1lOworCQkJZHVrX3JlZ2NvbnN0 X3QgcmVnX3ZhcmJpbmQ7CisJCQlkdWtfcmVnY29uc3RfdCByY192YXJuYW1lOworCisJCQlEVUtf QVNTRVJUKGxlZnQtPngxLnQgPT0gRFVLX0lTUEVDX1ZBTFVFKTsgIC8qIExIUyBpcyBhbHJlYWR5 IHNpZGUgZWZmZWN0IGZyZWUgKi8KKworCQkJaF92YXJuYW1lID0gZHVrX2tub3duX2hzdHJpbmco dGhyLCBsZWZ0LT54MS52YWxzdGFja19pZHgpOworCQkJaWYgKGR1a19faHN0cmluZ19pc19ldmFs X29yX2FyZ3VtZW50c19pbl9zdHJpY3RfbW9kZShjb21wX2N0eCwgaF92YXJuYW1lKSkgeworCQkJ CS8qIEU1IFNlY3Rpb24gMTEuMTMuMSAoYW5kIG90aGVycyBmb3Igb3RoZXIgYXNzaWdubWVudHMp LCBzdGVwIDQuICovCisJCQkJZ290byBzeW50YXhfZXJyb3JfbHZhbHVlOworCQkJfQorCQkJZHVr X2R1cCh0aHIsIGxlZnQtPngxLnZhbHN0YWNrX2lkeCk7CisJCQkodm9pZCkgZHVrX19sb29rdXBf bGhzKGNvbXBfY3R4LCAmcmVnX3ZhcmJpbmQsICZyY192YXJuYW1lKTsKKworCQkJaWYgKGFyZ3Nf b3AgPT0gRFVLX09QX05PTkUpIHsKKwkJCQlkdWtfX2V4cHIoY29tcF9jdHgsIHJlcywgYXJnc19y YnAgLypyYnBfZmxhZ3MqLyk7CisJCQkJaWYgKHRvcGxldmVsX2Fzc2lnbikgeworCQkJCQkvKiBB bnkgJ3Jlcycgd2lsbCBkby4gKi8KKwkJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInBsYWluIGFz c2lnbm1lbnQsIHRvcGxldmVsIGFzc2lnbiwgdXNlIGFzIGlzIikpOworCQkJCX0gZWxzZSB7CisJ CQkJCS8qICdyZXMnIG11c3QgYmUgYSBwbGFpbiBpdmFsdWUsIGFuZCBub3QgcmVnaXN0ZXItYm91 bmQgdmFyaWFibGUuICovCisJCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJwbGFpbiBhc3NpZ25t ZW50LCBub3QgdG9wbGV2ZWwgYXNzaWduLCBlbnN1cmUgbm90IGEgcmVnLWJvdW5kIGlkZW50aWZp ZXIiKSk7CisJCQkJCWlmIChyZXMtPnQgIT0gRFVLX0lWQUxfUExBSU4gfHwgKHJlcy0+eDEudCA9 PSBEVUtfSVNQRUNfUkVHQ09OU1QgJiYKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRFVLX19JU1JFR19OT1RURU1QKGNvbXBfY3R4LCByZXMtPngxLnJlZ2NvbnN0KSkpIHsK KwkJCQkJCWR1a19faXZhbHVlX3RvdGVtcGNvbnN0KGNvbXBfY3R4LCByZXMpOworCQkJCQl9CisJ CQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBGb3IgWCA8b3A+PSBZIHdlIG5lZWQgdG8gZXZhbHVh dGUgdGhlIHByZS1vcAorCQkJCSAqIHZhbHVlIG9mIFggYmVmb3JlIGV2YWx1YXRpbmcgdGhlIFJI UzogdGhlIFJIUworCQkJCSAqIGNhbiBjaGFuZ2UgWCwgYnV0IHdoZW4gd2UgZG8gPG9wPiB3ZSBt dXN0IHVzZQorCQkJCSAqIHRoZSBwcmUtb3AgdmFsdWUuCisJCQkJICovCisJCQkJZHVrX3JlZ2Nv bnN0X3QgcmVnX3RlbXA7CisKKwkJCQlyZWdfdGVtcCA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4 KTsKKworCQkJCWlmIChyZWdfdmFyYmluZCA+PSAwKSB7CisJCQkJCWR1a19yZWdjb25zdF90IHJl Z19yZXM7CisJCQkJCWR1a19yZWdjb25zdF90IHJlZ19zcmM7CisJCQkJCWR1a19pbnRfdCBwY190 ZW1wX2xvYWQ7CisJCQkJCWR1a19pbnRfdCBwY19iZWZvcmVfcmhzOworCQkJCQlkdWtfaW50X3Qg cGNfYWZ0ZXJfcmhzOworCisJCQkJCWlmICh0b3BsZXZlbF9hc3NpZ24pIHsKKwkJCQkJCS8qICdy ZWdfdmFyYmluZCcgaXMgdGhlIG9wZXJhdGlvbiByZXN1bHQgYW5kIGNhbiBhbHNvCisJCQkJCQkg KiBiZWNvbWUgdGhlIGV4cHJlc3Npb24gdmFsdWUgZm9yIHRvcCBsZXZlbCBhc3NpZ25tZW50cwor CQkJCQkJICogc3VjaCBhczogInZhciB4OyB4ICs9IHk7Ii4KKwkJCQkJCSAqLworCQkJCQkJRFVL X0REKERVS19ERFBSSU5UKCI8b3A+PSBleHByZXNzaW9uIGlzIHRvcCBsZXZlbCwgd3JpdGUgZGly ZWN0bHkgdG8gcmVnX3ZhcmJpbmQiKSk7CisJCQkJCQlyZWdfcmVzID0gcmVnX3ZhcmJpbmQ7CisJ CQkJCX0gZWxzZSB7CisJCQkJCQkvKiBOb3Qgc2FmZSB0byB1c2UgJ3JlZ192YXJiaW5kJyBhcyBh c3NpZ25tZW50IGV4cHJlc3Npb24KKwkJCQkJCSAqIHZhbHVlLCBzbyBnbyB0aHJvdWdoIGEgdGVt cC4KKwkJCQkJCSAqLworCQkJCQkJRFVLX0REKERVS19ERFBSSU5UKCI8b3A+PSBleHByZXNzaW9u IGlzIG5vdCB0b3AgbGV2ZWwsIHdyaXRlIHRvIHJlZ190ZW1wIikpOworCQkJCQkJcmVnX3JlcyA9 IHJlZ190ZW1wOyAgLyogcmVnX3JlcyBzaG91bGQgYmUgc21hbGxlc3QgcG9zc2libGUgKi8KKwkJ CQkJCXJlZ190ZW1wID0gRFVLX19BTExPQ1RFTVAoY29tcF9jdHgpOworCQkJCQl9CisKKwkJCQkJ LyogVHJ5IHRvIG9wdGltaXplIFggPG9wPj0gWSBmb3IgcmVnLWJvdW5kCisJCQkJCSAqIHZhcmlh Ymxlcy4gIERldGVjdCBzaWRlLWVmZmVjdCBmcmVlIFJIUworCQkJCQkgKiBuYXJyb3dseSBieSBz ZWVpbmcgd2hldGhlciBpdCBlbWl0cyBjb2RlLgorCQkJCQkgKiBJZiBub3QsIHJld2luZCB0aGUg Y29kZSBlbWl0dGVyIGFuZCBvdmVyd3JpdGUKKwkJCQkJICogdGhlIHVubmVjZXNzYXJ5IHRlbXAg cmVnIGxvYWQuCisJCQkJCSAqLworCisJCQkJCXBjX3RlbXBfbG9hZCA9IGR1a19fZ2V0X2N1cnJl bnRfcGMoY29tcF9jdHgpOworCQkJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwKKwkJCQkJICAg ICAgICAgICAgICAgRFVLX09QX0xEUkVHLAorCQkJCQkgICAgICAgICAgICAgICByZWdfdGVtcCwK KwkJCQkJICAgICAgICAgICAgICAgcmVnX3ZhcmJpbmQpOworCisJCQkJCXBjX2JlZm9yZV9yaHMg PSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsKKwkJCQkJZHVrX19leHByX3RvcmVnY29u c3QoY29tcF9jdHgsIHJlcywgYXJnc19yYnAgLypyYnBfZmxhZ3MqLyk7CisJCQkJCURVS19BU1NF UlQocmVzLT50ID09IERVS19JVkFMX1BMQUlOICYmIHJlcy0+eDEudCA9PSBEVUtfSVNQRUNfUkVH Q09OU1QpOworCQkJCQlwY19hZnRlcl9yaHMgPSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4 KTsKKworCQkJCQlEVUtfREQoRFVLX0REUFJJTlQoInBjX3RlbXBfbG9hZD0lbGQsIHBjX2JlZm9y ZV9yaHM9JWxkLCBwY19hZnRlcl9yaHM9JWxkIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgIChs b25nKSBwY190ZW1wX2xvYWQsIChsb25nKSBwY19iZWZvcmVfcmhzLAorCQkJCQkgICAgICAgICAg ICAgICAgICAgKGxvbmcpIHBjX2FmdGVyX3JocykpOworCisJCQkJCWlmIChwY19hZnRlcl9yaHMg PT0gcGNfYmVmb3JlX3JocykgeworCQkJCQkJLyogTm90ZTogaWYgdGhlIHJlZ190ZW1wIGxvYWQg Z2VuZXJhdGVkIHNodWZmbGluZworCQkJCQkJICogaW5zdHJ1Y3Rpb25zLCB3ZSBtYXkgbmVlZCB0 byByZXdpbmQgbW9yZSB0aGFuCisJCQkJCQkgKiBvbmUgaW5zdHJ1Y3Rpb24sIHNvIHVzZSBleHBs aWNpdCBQQyBjb21wdXRhdGlvbi4KKwkJCQkJCSAqLworCQkJCQkJRFVLX0REKERVS19ERFBSSU5U KCJyaHMgaXMgc2lkZSBlZmZlY3QgZnJlZSwgcmV3aW5kIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSB0 ZW1wIGZvciByZWctYmFzZWQgPG9wPj0iKSk7CisJCQkJCQlEVUtfQldfQUREX1BUUihjb21wX2N0 eC0+dGhyLCAmY29tcF9jdHgtPmN1cnJfZnVuYy5id19jb2RlLCAocGNfdGVtcF9sb2FkIC0gcGNf YmVmb3JlX3JocykgKiAoZHVrX2ludF90KSBzaXplb2YoZHVrX2NvbXBpbGVyX2luc3RyKSk7CisJ CQkJCQlyZWdfc3JjID0gcmVnX3ZhcmJpbmQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlEVUtfREQo RFVLX0REUFJJTlQoInJocyBldmFsdWF0aW9uIGVtaXR0ZWQgY29kZSwgbm90IHN1cmUgaWYgcmhz IGlzIHNpZGUgZWZmZWN0IGZyZWU7IHVzZSB0ZW1wIHJlZyBmb3IgTEhTIikpOworCQkJCQkJcmVn X3NyYyA9IHJlZ190ZW1wOworCQkJCQl9CisKKwkJCQkJZHVrX19lbWl0X2FfYl9jKGNvbXBfY3R4 LAorCQkJCQkgICAgICAgICAgICAgICAgYXJnc19vcCB8IERVS19fRU1JVF9GTEFHX0JDX1JFR0NP TlNULAorCQkJCQkgICAgICAgICAgICAgICAgcmVnX3JlcywKKwkJCQkJICAgICAgICAgICAgICAg IHJlZ19zcmMsCisJCQkJCSAgICAgICAgICAgICAgICByZXMtPngxLnJlZ2NvbnN0KTsKKworCQkJ CQlyZXMtPngxLnJlZ2NvbnN0ID0gcmVnX3JlczsKKworCQkJCQkvKiBFbnN1cmUgY29tcGFjdCB1 c2Ugb2YgdGVtcHMuICovCisJCQkJCWlmIChEVUtfX0lTUkVHX1RFTVAoY29tcF9jdHgsIHJlZ19y ZXMpKSB7CisJCQkJCQlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHJlZ19yZXMgKyAxKTsKKwkJCQkJ fQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdoZW4gTEhTIGlzIG5vdCByZWdpc3RlciBib3VuZCwg YWx3YXlzIGdvIHRocm91Z2ggYQorCQkJCQkgKiB0ZW1wb3JhcnkuICBObyBvcHRpbWl6YXRpb24g Zm9yIHRvcCBsZXZlbCBhc3NpZ25tZW50LgorCQkJCQkgKi8KKworCQkJCQlkdWtfX2VtaXRfYV9i Yyhjb21wX2N0eCwKKwkJCQkJICAgICAgICAgICAgICAgRFVLX09QX0dFVFZBUiwKKwkJCQkJICAg ICAgICAgICAgICAgcmVnX3RlbXAsCisJCQkJCSAgICAgICAgICAgICAgIHJjX3Zhcm5hbWUpOwor CisJCQkJCWR1a19fZXhwcl90b3JlZ2NvbnN0KGNvbXBfY3R4LCByZXMsIGFyZ3NfcmJwIC8qcmJw X2ZsYWdzKi8pOworCQkJCQlEVUtfQVNTRVJUKHJlcy0+dCA9PSBEVUtfSVZBTF9QTEFJTiAmJiBy ZXMtPngxLnQgPT0gRFVLX0lTUEVDX1JFR0NPTlNUKTsKKworCQkJCQlkdWtfX2VtaXRfYV9iX2Mo Y29tcF9jdHgsCisJCQkJCSAgICAgICAgICAgICAgICBhcmdzX29wIHwgRFVLX19FTUlUX0ZMQUdf QkNfUkVHQ09OU1QsCisJCQkJCSAgICAgICAgICAgICAgICByZWdfdGVtcCwKKwkJCQkJICAgICAg ICAgICAgICAgIHJlZ190ZW1wLAorCQkJCQkgICAgICAgICAgICAgICAgcmVzLT54MS5yZWdjb25z dCk7CisJCQkJCXJlcy0+eDEucmVnY29uc3QgPSByZWdfdGVtcDsKKwkJCQl9CisKKwkJCQlEVUtf QVNTRVJUKHJlcy0+dCA9PSBEVUtfSVZBTF9QTEFJTiAmJiByZXMtPngxLnQgPT0gRFVLX0lTUEVD X1JFR0NPTlNUKTsKKwkJCX0KKworCQkJLyogQXQgdGhpcyBwb2ludCAncmVzJyBob2xkcyB0aGUg cG90ZW50aWFsIGV4cHJlc3Npb24gdmFsdWUuCisJCQkgKiBJdCBjYW4gYmUgYmFzaWNhbGx5IGFu eSBpdmFsdWUgaGVyZSwgaW5jbHVkaW5nIGEgcmVnLWJvdW5kCisJCQkgKiBpZGVudGlmaWVyIChp ZiBjb2RlIGFib3ZlIGRlZW1zIGl0IHNhZmUpIG9yIGEgdW5hcnkvYmluYXJ5CisJCQkgKiBvcGVy YXRpb24uICBPcGVyYXRpb25zIG11c3QgYmUgcmVzb2x2ZWQgdG8gYSBzaWRlIGVmZmVjdCBmcmVl CisJCQkgKiBwbGFpbiB2YWx1ZSwgYW5kIHRoZSBzaWRlIGVmZmVjdHMgbXVzdCBoYXBwZW4gZXhh Y3RseSBvbmNlLgorCQkJICovCisKKwkJCWlmIChyZWdfdmFyYmluZCA+PSAwKSB7CisJCQkJaWYg KHJlcy0+dCAhPSBEVUtfSVZBTF9QTEFJTikgeworCQkJCQkvKiBSZXNvbHZlICdyZXMnIGRpcmVj dGx5IGludG8gdGhlIExIUyBiaW5kaW5nLCBhbmQgdXNlCisJCQkJCSAqIHRoYXQgYXMgdGhlIGV4 cHJlc3Npb24gdmFsdWUgaWYgc2FmZS4gIElmIG5vdCBzYWZlLAorCQkJCQkgKiByZXNvbHZlIHRv IGEgdGVtcC9jb25zdCBhbmQgY29weSB0byBMSFMuCisJCQkJCSAqLworCQkJCQlpZiAodG9wbGV2 ZWxfYXNzaWduKSB7CisJCQkJCQlkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0eCwgcmVz LCAoZHVrX2ludF90KSByZWdfdmFyYmluZCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkdWtfX2l2 YWx1ZV90b3RlbXBjb25zdChjb21wX2N0eCwgcmVzKTsKKwkJCQkJCWR1a19fY29weV9pdmFsdWUo Y29tcF9jdHgsIHJlcywgbGVmdCk7ICAvKiB1c2UgJ2xlZnQnIGFzIGEgdGVtcCAqLworCQkJCQkJ ZHVrX19pdmFsdWVfdG9mb3JjZWRyZWcoY29tcF9jdHgsIGxlZnQsIChkdWtfaW50X3QpIHJlZ192 YXJiaW5kKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFVzZSAncmVzJyBhcyB0aGUg ZXhwcmVzc2lvbiB2YWx1ZSAoaXQncyBzaWRlIGVmZmVjdAorCQkJCQkgKiBmcmVlIGFuZCBtYXkg YmUgYSBwbGFpbiB2YWx1ZSwgYSByZWdpc3Rlciwgb3IgYQorCQkJCQkgKiBjb25zdGFudCkgYW5k IHdyaXRlIGl0IHRvIHRoZSBMSFMgYmluZGluZyB0b28uCisJCQkJCSAqLworCQkJCQlkdWtfX2Nv cHlfaXZhbHVlKGNvbXBfY3R4LCByZXMsIGxlZnQpOyAgLyogdXNlICdsZWZ0JyBhcyBhIHRlbXAg Ki8KKwkJCQkJZHVrX19pdmFsdWVfdG9mb3JjZWRyZWcoY29tcF9jdHgsIGxlZnQsIChkdWtfaW50 X3QpIHJlZ192YXJiaW5kKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIE9ubHkgYSByZWcg Zml0cyBpbnRvICdBJyBzbyBjb2VyY2UgJ3JlcycgaW50byBhIHJlZ2lzdGVyCisJCQkJICogZm9y IFBVVFZBUi4KKwkJCQkgKgorCQkJCSAqIFhYWDogaGVyZSB0aGUgY3VycmVudCBBL0IvQyBzcGxp dCBpcyBzdWJvcHRpbWFsOiB3ZSBjb3VsZAorCQkJCSAqIGp1c3QgdXNlIDkgYml0cyBmb3IgcmVn X3JlcyAoYW5kIHN1cHBvcnQgY29uc3RhbnRzKSBhbmQgMTcKKwkJCQkgKiBpbnN0ZWFkIG9mIDE4 IGJpdHMgZm9yIHRoZSB2YXJuYW1lIGNvbnN0IGluZGV4LgorCQkJCSAqLworCisJCQkJZHVrX19p dmFsdWVfdG9yZWcoY29tcF9jdHgsIHJlcyk7CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgs CisJCQkJICAgICAgICAgICAgICAgRFVLX09QX1BVVFZBUiB8IERVS19fRU1JVF9GTEFHX0FfSVNf U09VUkNFLAorCQkJCSAgICAgICAgICAgICAgIHJlcy0+eDEucmVnY29uc3QsCisJCQkJICAgICAg ICAgICAgICAgcmNfdmFybmFtZSk7CisJCQl9CisKKwkJCS8qICdyZXMnIGNvbnRhaW5zIGV4cHJl c3Npb24gdmFsdWUgKi8KKwkJfSBlbHNlIGlmIChsZWZ0LT50ID09IERVS19JVkFMX1BST1ApIHsK KwkJCS8qIEU1IFNlY3Rpb24gMTEuMTMuMSAoYW5kIG90aGVycykgc3RlcCA0IG5ldmVyIG1hdGNo ZXMgZm9yIHByb3Agd3JpdGVzIC0+IG5vIGNoZWNrICovCisJCQlkdWtfcmVnY29uc3RfdCByZWdf b2JqOworCQkJZHVrX3JlZ2NvbnN0X3QgcmNfa2V5OworCQkJZHVrX3JlZ2NvbnN0X3QgcmNfcmVz OworCQkJZHVrX3JlZ2NvbnN0X3QgcmVnX3RlbXA7CisKKwkJCS8qIFByb3BlcnR5IGFjY2VzcyBl eHByZXNzaW9ucyAoJ2FbYl0nKSBhcmUgY3JpdGljYWwgdG8gY29ycmVjdAorCQkJICogTEhTIGV2 YWx1YXRpb24gb3JkZXJpbmcsIHNlZSB0ZXN0LWRldi1hc3NpZ24tZXZhbC1vcmRlciouanMuCisJ CQkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBMSFMgdGFyZ2V0IHNsb3QgKGJhc2Ugb2Jq ZWN0IGFuZAorCQkJICoga2V5KSBkb24ndCBjaGFuZ2UgZHVyaW5nIFJIUyBldmFsdWF0aW9uLiAg VGhlIG9ubHkgY29uY3JldGUKKwkJCSAqIHByb2JsZW0gaXMgYSByZWdpc3RlciByZWZlcmVuY2Ug dG8gYSB2YXJpYWJsZS1ib3VuZCByZWdpc3RlcgorCQkJICogKGkuZS4sIG5vbi10ZW1wKS4gIFJl cXVpcmUgdGVtcCByZWdzIGZvciBib3RoIGtleSBhbmQgYmFzZS4KKwkJCSAqCisJCQkgKiBEb24n dCBhbGxvdyBhIGNvbnN0YW50IGZvciB0aGUgb2JqZWN0IChldmVuIGZvciBhIG51bWJlcgorCQkJ ICogZXRjKSwgYXMgaXQgZ29lcyBpbnRvIHRoZSAnQScgZmllbGQgb2YgdGhlIG9wY29kZS4KKwkJ CSAqLworCisJCQlyZWdfb2JqID0gZHVrX19pc3BlY190b3JlZ2NvbnN0X3Jhdyhjb21wX2N0eCwK KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZWZ0LT54MSwKKwkJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xIC8qZm9yY2VkX3JlZyovLAorCQkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX19JVkFMX0ZMQUdfUkVRVUlS RV9URU1QIC8qZmxhZ3MqLyk7CisKKwkJCXJjX2tleSA9IGR1a19faXNwZWNfdG9yZWdjb25zdF9y YXcoY29tcF9jdHgsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZWZ0 LT54MiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgLypmb3JjZWRf cmVnKi8sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19fSVZBTF9G TEFHX1JFUVVJUkVfVEVNUCB8IERVS19fSVZBTF9GTEFHX0FMTE9XX0NPTlNUIC8qZmxhZ3MqLyk7 CisKKwkJCS8qIEV2YWx1YXRlIFJIUyBvbmx5IHdoZW4gTEhTIGlzIHNhZmUuICovCisKKwkJCWlm IChhcmdzX29wID09IERVS19PUF9OT05FKSB7CisJCQkJZHVrX19leHByX3RvcmVnY29uc3QoY29t cF9jdHgsIHJlcywgYXJnc19yYnAgLypyYnBfZmxhZ3MqLyk7CisJCQkJRFVLX0FTU0VSVChyZXMt PnQgPT0gRFVLX0lWQUxfUExBSU4gJiYgcmVzLT54MS50ID09IERVS19JU1BFQ19SRUdDT05TVCk7 CisJCQkJcmNfcmVzID0gcmVzLT54MS5yZWdjb25zdDsKKwkJCX0gZWxzZSB7CisJCQkJcmVnX3Rl bXAgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCQkJZHVrX19lbWl0X2FfYl9jKGNvbXBf Y3R4LAorCQkJCSAgICAgICAgICAgICAgICBEVUtfT1BfR0VUUFJPUCB8IERVS19fRU1JVF9GTEFH X0JDX1JFR0NPTlNULAorCQkJCSAgICAgICAgICAgICAgICByZWdfdGVtcCwKKwkJCQkgICAgICAg ICAgICAgICAgcmVnX29iaiwKKwkJCQkgICAgICAgICAgICAgICAgcmNfa2V5KTsKKworCQkJCWR1 a19fZXhwcl90b3JlZ2NvbnN0KGNvbXBfY3R4LCByZXMsIGFyZ3NfcmJwIC8qcmJwX2ZsYWdzKi8p OworCQkJCURVS19BU1NFUlQocmVzLT50ID09IERVS19JVkFMX1BMQUlOICYmIHJlcy0+eDEudCA9 PSBEVUtfSVNQRUNfUkVHQ09OU1QpOworCisJCQkJZHVrX19lbWl0X2FfYl9jKGNvbXBfY3R4LAor CQkJCSAgICAgICAgICAgICAgICBhcmdzX29wIHwgRFVLX19FTUlUX0ZMQUdfQkNfUkVHQ09OU1Qs CisJCQkJICAgICAgICAgICAgICAgIHJlZ190ZW1wLAorCQkJCSAgICAgICAgICAgICAgICByZWdf dGVtcCwKKwkJCQkgICAgICAgICAgICAgICAgcmVzLT54MS5yZWdjb25zdCk7CisJCQkJcmNfcmVz ID0gcmVnX3RlbXA7CisJCQl9CisKKwkJCWR1a19fZW1pdF9hX2JfYyhjb21wX2N0eCwKKwkJCSAg ICAgICAgICAgICAgICBEVUtfT1BfUFVUUFJPUCB8IERVS19fRU1JVF9GTEFHX0FfSVNfU09VUkNF IHwgRFVLX19FTUlUX0ZMQUdfQkNfUkVHQ09OU1QsCisJCQkgICAgICAgICAgICAgICAgcmVnX29i aiwKKwkJCSAgICAgICAgICAgICAgICByY19rZXksCisJCQkgICAgICAgICAgICAgICAgcmNfcmVz KTsKKworCQkJZHVrX19pdmFsdWVfcmVnY29uc3QocmVzLCByY19yZXMpOworCQl9IGVsc2Ugewor CQkJLyogTm8gc3VwcG9ydCBmb3IgbHZhbHVlcyByZXR1cm5lZCBmcm9tIG5ldyBvciBmdW5jdGlv biBjYWxsIGV4cHJlc3Npb25zLgorCQkJICogSG93ZXZlciwgdGhlc2UgbXVzdCBOT1QgY2F1c2Ug Y29tcGlsZS10aW1lIFN5bnRheEVycm9ycywgYnV0IHJ1bi10aW1lCisJCQkgKiBSZWZlcmVuY2VF cnJvcnMuICBCb3RoIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIG9mIHRoZSBhc3NpZ25tZW50IG11c3Qg YmUKKwkJCSAqIGV2YWx1YXRlZCBiZWZvcmUgdGhyb3dpbmcgYSBSZWZlcmVuY2VFcnJvci4gIEZv ciBpbnN0YW5jZToKKwkJCSAqCisJCQkgKiAgICAgZigpID0gZygpOworCQkJICoKKwkJCSAqIG11 c3QgcmVzdWx0IGluIGYoKSBiZWluZyBldmFsdWF0ZWQsIHRoZW4gZygpIGJlaW5nIGV2YWx1YXRl ZCwgYW5kCisJCQkgKiBmaW5hbGx5LCBhIFJlZmVyZW5jZUVycm9yIGJlaW5nIHRocm93bi4gIFNl ZSBFNSBTZWN0aW9uIDExLjEzLjEuCisJCQkgKi8KKworCQkJZHVrX3JlZ2NvbnN0X3QgcmNfcmVz OworCisJCQkvKiBGaXJzdCBldmFsdWF0ZSBMSFMgZnVsbHkgdG8gZW5zdXJlIGFsbCBzaWRlIGVm ZmVjdHMgYXJlIG91dC4gKi8KKwkJCWR1a19faXZhbHVlX3RvcGxhaW5faWdub3JlKGNvbXBfY3R4 LCBsZWZ0KTsKKworCQkJLyogVGhlbiBldmFsdWF0ZSBSSFMgZnVsbHkgKGl0cyB2YWx1ZSBiZWNv bWVzIHRoZSBleHByZXNzaW9uIHZhbHVlIHRvbykuCisJCQkgKiBUZWNobmljYWxseSB3ZSdkIG5l ZWQgdGhlIHNpZGUgZWZmZWN0IHNhZmV0eSBjaGVjayBoZXJlIHRvbywgYnV0IGJlY2F1c2UKKwkJ CSAqIHdlIGFsd2F5cyB0aHJvdyB1c2luZyBJTlZMSFMgdGhlIHJlc3VsdCBkb2Vzbid0IG1hdHRl ci4KKwkJCSAqLworCQkJcmNfcmVzID0gZHVrX19leHByX3RvcmVnY29uc3QoY29tcF9jdHgsIHJl cywgYXJnc19yYnAgLypyYnBfZmxhZ3MqLyk7CisKKwkJCWR1a19fZW1pdF9vcF9vbmx5KGNvbXBf Y3R4LCBEVUtfT1BfSU5WTEhTKTsKKworCQkJZHVrX19pdmFsdWVfcmVnY29uc3QocmVzLCByY19y ZXMpOworCQl9CisKKwkJcmV0dXJuOworCX0KKworIHBvc3RpbmNkZWM6CisJeworCQkvKgorCQkg KiAgUG9zdC1pbmNyZW1lbnQvZGVjcmVtZW50IHdpbGwgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1 ZSBhcyBpdHMKKwkJICogIHJlc3VsdCB2YWx1ZS4gIEhvd2V2ZXIsIGV2ZW4gdGhhdCB2YWx1ZSB3 aWxsIGJlIGNvZXJjZWQgdXNpbmcKKwkJICogIFRvTnVtYmVyKCkgd2hpY2ggaXMgcXVpdGUgYXdr d2FyZC4gIFNwZWNpZmljIGJ5dGVjb2RlIG9wY29kZXMKKwkJICogIGFyZSB1c2VkIHRvIGhhbmRs ZSB0aGVzZSBzZW1hbnRpY3MuCisJCSAqCisJCSAqICBOb3RlIHRoYXQgcG9zdCBpbmNyZW1lbnQv ZGVjcmVtZW50IGhhcyBhICJubyBMaW5lVGVybWluYXRvciBoZXJlIgorCQkgKiAgcmVzdHJpY3Rp b24uICBUaGlzIGlzIGhhbmRsZWQgYnkgZHVrX19leHByX2xicCgpLCB3aGljaCBmb3JjaWJseSB0 ZXJtaW5hdGVzCisJCSAqICB0aGUgcHJldmlvdXMgZXhwcmVzc2lvbiBpZiBhIExpbmVUZXJtaW5h dG9yIG9jY3VycyBiZWZvcmUgJysrJy8nLS0nLgorCQkgKi8KKworCQlkdWtfcmVnY29uc3RfdCBy ZWdfcmVzOworCQlkdWtfc21hbGxfdWludF90IGFyZ3Nfb3AxID0gKGFyZ3MgPj4gOCkgJiAweGZm OyAgLyogRFVLX09QX1BPU1RJTkNSL0RVS19PUF9QT1NUREVDUiAqLworCQlkdWtfc21hbGxfdWlu dF90IGFyZ3Nfb3AyID0gYXJncyA+PiAxNjsgICAgICAgICAgLyogRFVLX09QX1BPU1RJTkNQX1JS L0RVS19PUF9QT1NUREVDUF9SUiAqLworCisJCS8qIFNwZWNpZmljIGFzc3VtcHRpb25zIGZvciBv cGNvZGUgbnVtYmVyaW5nLiAqLworCQlEVUtfQVNTRVJUKERVS19PUF9QT1NUSU5DUiArIDQgPT0g RFVLX09QX1BPU1RJTkNWKTsKKwkJRFVLX0FTU0VSVChEVUtfT1BfUE9TVERFQ1IgKyA0ID09IERV S19PUF9QT1NUREVDVik7CisKKwkJcmVnX3JlcyA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KTsK KworCQlpZiAobGVmdC0+dCA9PSBEVUtfSVZBTF9WQVIpIHsKKwkJCWR1a19oc3RyaW5nICpoX3Zh cm5hbWU7CisJCQlkdWtfcmVnY29uc3RfdCByZWdfdmFyYmluZDsKKwkJCWR1a19yZWdjb25zdF90 IHJjX3Zhcm5hbWU7CisKKwkJCWhfdmFybmFtZSA9IGR1a19rbm93bl9oc3RyaW5nKHRociwgbGVm dC0+eDEudmFsc3RhY2tfaWR4KTsKKworCQkJaWYgKGR1a19faHN0cmluZ19pc19ldmFsX29yX2Fy Z3VtZW50c19pbl9zdHJpY3RfbW9kZShjb21wX2N0eCwgaF92YXJuYW1lKSkgeworCQkJCWdvdG8g c3ludGF4X2Vycm9yOworCQkJfQorCisJCQlkdWtfZHVwKHRociwgbGVmdC0+eDEudmFsc3RhY2tf aWR4KTsKKwkJCWlmIChkdWtfX2xvb2t1cF9saHMoY29tcF9jdHgsICZyZWdfdmFyYmluZCwgJnJj X3Zhcm5hbWUpKSB7CisJCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJCQkJICAgICAgICAg ICAgICAgYXJnc19vcDEsICAvKiBlLmcuIERVS19PUF9QT1NUSU5DUiAqLworCQkJCSAgICAgICAg ICAgICAgIHJlZ19yZXMsCisJCQkJICAgICAgICAgICAgICAgcmVnX3ZhcmJpbmQpOworCQkJfSBl bHNlIHsKKwkJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwKKwkJCQkgICAgICAgICAgICAgICBh cmdzX29wMSArIDQsICAvKiBlLmcuIERVS19PUF9QT1NUSU5DViAqLworCQkJCSAgICAgICAgICAg ICAgIHJlZ19yZXMsCisJCQkJICAgICAgICAgICAgICAgcmNfdmFybmFtZSk7CisJCQl9CisKKwkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJwb3N0aW5jZGVjIHRvICclIU8nIC0+IHJlZ192YXJiaW5k PSVsZCwgcmNfdmFybmFtZT0lbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGR1a19oZWFw aGRyICopIGhfdmFybmFtZSwgKGxvbmcpIHJlZ192YXJiaW5kLCAobG9uZykgcmNfdmFybmFtZSkp OworCQl9IGVsc2UgaWYgKGxlZnQtPnQgPT0gRFVLX0lWQUxfUFJPUCkgeworCQkJZHVrX3JlZ2Nv bnN0X3QgcmVnX29iajsgIC8qIGFsbG9jYXRlIHRvIHJlZyBvbmx5IChub3QgY29uc3QpICovCisJ CQlkdWtfcmVnY29uc3RfdCByY19rZXk7CisKKwkJCXJlZ19vYmogPSBkdWtfX2lzcGVjX3RvcmVn Y29uc3RfcmF3KGNvbXBfY3R4LCAmbGVmdC0+eDEsIC0xIC8qZm9yY2VkX3JlZyovLCAwIC8qZmxh Z3MqLyk7ICAvKiBkb24ndCBhbGxvdyBjb25zdCAqLworCQkJcmNfa2V5ID0gZHVrX19pc3BlY190 b3JlZ2NvbnN0X3Jhdyhjb21wX2N0eCwgJmxlZnQtPngyLCAtMSAvKmZvcmNlZF9yZWcqLywgRFVL X19JVkFMX0ZMQUdfQUxMT1dfQ09OU1QgLypmbGFncyovKTsKKwkJCWR1a19fZW1pdF9hX2JfYyhj b21wX2N0eCwKKwkJCSAgICAgICAgICAgICAgICBhcmdzX29wMiB8IERVS19fRU1JVF9GTEFHX0JD X1JFR0NPTlNULCAgLyogZS5nLiBEVUtfT1BfUE9TVElOQ1AgKi8KKwkJCSAgICAgICAgICAgICAg ICByZWdfcmVzLAorCQkJICAgICAgICAgICAgICAgIHJlZ19vYmosCisJCQkgICAgICAgICAgICAg ICAgcmNfa2V5KTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRlY2huaWNhbGx5IHJldHVybiB2YWx1ZSBp cyBub3QgbmVlZGVkIGJlY2F1c2UgSU5WTEhTIHdpbGwKKwkJCSAqIHVuY29uZGl0aWFsbHkgdGhy b3cgYSBSZWZlcmVuY2VFcnJvci4gIENvZXJjaW9uIGlzIG5lY2Vzc2FyeQorCQkJICogZm9yIHBy b3BlciBzZW1hbnRpY3MgKGNvbnNpZGVyIFRvTnVtYmVyKCkgY2FsbGVkIGZvciBhbiBvYmplY3Qp LgorCQkJICogVXNlIERVS19PUF9VTlAgd2l0aCBhIGR1bW15IHJlZ2lzdGVyIHRvIGdldCBUb051 bWJlcigpLgorCQkJICovCisJCQlkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0eCwgbGVm dCwgcmVnX3Jlcyk7CisJCQlkdWtfX2VtaXRfYmMoY29tcF9jdHgsCisJCQkgICAgICAgICAgICAg RFVLX09QX1VOUCwKKwkJCSAgICAgICAgICAgICByZWdfcmVzKTsgIC8qIGZvciBzaWRlIGVmZmVj dHMsIHJlc3VsdCBpZ25vcmVkICovCisJCQlkdWtfX2VtaXRfb3Bfb25seShjb21wX2N0eCwKKwkJ CSAgICAgICAgICAgICAgICAgIERVS19PUF9JTlZMSFMpOworCQl9CisKKwkJRFVLX19TRVRURU1Q KGNvbXBfY3R4LCByZWdfcmVzICsgMSk7CisJCWR1a19faXZhbHVlX3JlZ2NvbnN0KHJlcywgcmVn X3Jlcyk7CisJCXJldHVybjsKKwl9CisKKyBzeW50YXhfZXJyb3I6CisJRFVLX0VSUk9SX1NZTlRB WCh0aHIsIERVS19TVFJfSU5WQUxJRF9FWFBSRVNTSU9OKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0 dXJuOyk7CisKKyBzeW50YXhfZXJyb3JfbHZhbHVlOgorCURVS19FUlJPUl9TWU5UQVgodGhyLCBE VUtfU1RSX0lOVkFMSURfTFZBTFVFKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisK K0RVS19MT0NBTCBkdWtfc21hbGxfdWludF90IGR1a19fZXhwcl9sYnAoZHVrX2NvbXBpbGVyX2N0 eCAqY29tcF9jdHgpIHsKKwlkdWtfc21hbGxfdWludF90IHRvayA9IGNvbXBfY3R4LT5jdXJyX3Rv a2VuLnQ7CisKKwlEVUtfQVNTRVJUX0RJU0FCTEUodG9rID49IERVS19UT0tfTUlOVkFMKTsgIC8q IHVuc2lnbmVkICovCisJRFVLX0FTU0VSVCh0b2sgPD0gRFVLX1RPS19NQVhWQUwpOworCURVS19B U1NFUlQoc2l6ZW9mKGR1a19fdG9rZW5fbGJwKSA9PSBEVUtfVE9LX01BWFZBTCArIDEpOworCisJ LyogWFhYOiBpbnRlZ3JhdGUgc3VwcG9ydCBmb3IgdGhpcyBpbnRvIGxlZCgpIGluc3RlYWQ/CisJ ICogU2ltaWxhciBpc3N1ZSBhcyBwb3N0LWluY3JlbWVudC9wb3N0LWRlY3JlbWVudC4KKwkgKi8K KworCS8qIHByZXZlbnQgZHVrX19leHByX2xlZCgpIGJ5IHVzaW5nIGEgYmluZGluZyBwb3dlciBs ZXNzIHRoYW4gYW55dGhpbmcgdmFsaWQgKi8KKwlpZiAodG9rID09IERVS19UT0tfSU4gJiYgIWNv bXBfY3R4LT5jdXJyX2Z1bmMuYWxsb3dfaW4pIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCh0 b2sgPT0gRFVLX1RPS19ERUNSRU1FTlQgfHwgdG9rID09IERVS19UT0tfSU5DUkVNRU5UKSAmJgor CSAgICAoY29tcF9jdHgtPmN1cnJfdG9rZW4ubGluZXRlcm0pKSB7CisJCS8qICcrKycgb3IgJy0t JyBpbiBhIHBvc3QtaW5jcmVtZW50L2RlY3JlbWVudCBwb3NpdGlvbiwKKwkJICogYW5kIGEgTGlu ZVRlcm1pbmF0b3Igb2NjdXJzIGJldHdlZW4gdGhlIG9wZXJhdG9yIGFuZAorCQkgKiB0aGUgcHJl Y2VkaW5nIGV4cHJlc3Npb24uICBGb3JjZSB0aGUgcHJldmlvdXMgZXhwcgorCQkgKiB0byB0ZXJt aW5hdGUsIGluIGVmZmVjdCB0cmVhdGluZyBlLmcuICJhLGJcbisrIiBhcworCQkgKiAiYSxiOysr IiAoPSBTeW50YXhFcnJvcikuCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gRFVL X19UT0tFTl9MQlBfR0VUX0JQKGR1a19fdG9rZW5fbGJwW3Rva10pOyAgLyogZm9ybWF0IGlzIGJp dCBwYWNrZWQgKi8KK30KKworLyoKKyAqICBFeHByZXNzaW9uIHBhcnNpbmcuCisgKgorICogIFVw b24gZW50cnkgdG8gJ2V4cHInIGFuZCBpdHMgdmFyaWFudHMsICdjdXJyX3RvaycgaXMgYXNzdW1l ZCB0byBiZSB0aGUKKyAqICBmaXJzdCB0b2tlbiBvZiB0aGUgZXhwcmVzc2lvbi4gIFVwb24gZXhp dCwgJ2N1cnJfdG9rJyB3aWxsIGJlIHRoZSBmaXJzdAorICogIHRva2VuIG5vdCBwYXJ0IG9mIHRo ZSBleHByZXNzaW9uIChlLmcuIHNlbWljb2xvbiB0ZXJtaW5hdGluZyBhbiBleHByZXNzaW9uCisg KiAgc3RhdGVtZW50KS4KKyAqLworCisjZGVmaW5lIERVS19fRVhQUl9SQlBfTUFTSyAgICAgICAg ICAgMHhmZgorI2RlZmluZSBEVUtfX0VYUFJfRkxBR19SRUpFQ1RfSU4gICAgICgxIDw8IDgpICAg LyogcmVqZWN0ICdpbicgdG9rZW4gKHVzZWQgZm9yIGZvci1pbikgKi8KKyNkZWZpbmUgRFVLX19F WFBSX0ZMQUdfQUxMT1dfRU1QVFkgICAoMSA8PCA5KSAgIC8qIGFsbG93IGVtcHR5IGV4cHJlc3Np b24gKi8KKyNkZWZpbmUgRFVLX19FWFBSX0ZMQUdfUkVRVUlSRV9JTklUICAoMSA8PCAxMCkgIC8q IHJlcXVpcmUgaW5pdGlhbGl6ZXIgZm9yIHZhci9jb25zdCAqLworCisvKiBtYWluIGV4cHJlc3Np b24gcGFyc2VyIGZ1bmN0aW9uICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2V4cHIoZHVrX2NvbXBp bGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBf ZmxhZ3MpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKwlkdWtfaXZhbHVl IHRtcF9hbGxvYzsgICAvKiAncmVzJyBpcyB1c2VkIGZvciAibGVmdCIsIGFuZCAndG1wJyBmb3Ig InJpZ2h0IiAqLworCWR1a19pdmFsdWUgKnRtcCA9ICZ0bXBfYWxsb2M7CisJZHVrX3NtYWxsX3Vp bnRfdCByYnA7CisKKwlEVUtfX1JFQ1VSU0lPTl9JTkNSRUFTRShjb21wX2N0eCwgdGhyKTsKKwor CWR1a19yZXF1aXJlX3N0YWNrKHRociwgRFVLX19QQVJTRV9FWFBSX1NMT1RTKTsKKworCS8qIGZp bHRlciBvdXQgZmxhZ3MgZnJvbSBleHBydG9wIHJicF9mbGFncyBoZXJlIHRvIHNhdmUgc3BhY2Ug Ki8KKwlyYnAgPSByYnBfZmxhZ3MgJiBEVUtfX0VYUFJfUkJQX01BU0s7CisKKwlEVUtfREREKERV S19ERERQUklOVCgiZHVrX19leHByKCksIHJicF9mbGFncz0lbGQsIHJicD0lbGQsIGFsbG93X2lu PSVsZCwgcGFyZW5fbGV2ZWw9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgcmJw X2ZsYWdzLCAobG9uZykgcmJwLCAobG9uZykgY29tcF9jdHgtPmN1cnJfZnVuYy5hbGxvd19pbiwK KwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcF9jdHgtPmN1cnJfZnVuYy5wYXJlbl9s ZXZlbCkpOworCisJZHVrX21lbXplcm8oJnRtcF9hbGxvYywgc2l6ZW9mKHRtcF9hbGxvYykpOwor CXRtcC0+eDEudmFsc3RhY2tfaWR4ID0gZHVrX2dldF90b3AodGhyKTsKKwl0bXAtPngyLnZhbHN0 YWNrX2lkeCA9IHRtcC0+eDEudmFsc3RhY2tfaWR4ICsgMTsKKwlkdWtfcHVzaF91bmRlZmluZWQo dGhyKTsKKwlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsKKworCS8qIFhYWDogd2hlcmUgdG8gcmVs ZWFzZSB0ZW1wIHJlZ3MgaW4gaW50ZXJtZWRpYXRlIGV4cHJlc3Npb25zPworCSAqIGUuZy4gMSsy KzMgLT4gZG9uJ3QgaW5mbGF0ZSB0ZW1wIHJlZ2lzdGVyIGNvdW50IHdoZW4gcGFyc2luZyB0aGlz LgorCSAqIHRoYXQgcGFydGljdWxhciBleHByZXNzaW9uIHRlbXAgcmVncyBjYW4gYmUgZm9yY2Vk IGhlcmUuCisJICovCisKKwkvKiBYWFg6IGluY3JlYXNlIGN0eC0+ZXhwcl90b2tlbnMgaGVyZSBm b3IgZXZlcnkgY29uc3VtZWQgdG9rZW4KKwkgKiAodGhpcyB3b3VsZCBiZSBhIG5pY2Ugc3RhdGlz dGljKT8KKwkgKi8KKworCWlmIChjb21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfU0VN SUNPTE9OIHx8IGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19SUEFSRU4pIHsKKwkJ LyogWFhYOiBwb3NzaWJseSBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgZW1wdHkgZXhwcmVzc2lvbiAq LworCQlEVUtfREREKERVS19ERERQUklOVCgiZW1wdHkgZXhwcmVzc2lvbiIpKTsKKwkJaWYgKCEo cmJwX2ZsYWdzICYgRFVLX19FWFBSX0ZMQUdfQUxMT1dfRU1QVFkpKSB7CisJCQlEVUtfRVJST1Jf U1lOVEFYKHRociwgRFVLX1NUUl9FTVBUWV9FWFBSX05PVF9BTExPV0VEKTsKKwkJCURVS19XT19O T1JFVFVSTihyZXR1cm47KTsKKwkJfQorCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsKKwkJZHVr X19pdmFsdWVfcGxhaW5fZnJvbXN0YWNrKGNvbXBfY3R4LCByZXMpOworCQlnb3RvIGNsZWFudXA7 CisJfQorCisJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsKKwlkdWtfX2V4cHJfbnVkKGNvbXBfY3R4 LCByZXMpOyAgLyogcmV1c2UgJ3JlcycgYXMgJ2xlZnQnICovCisJd2hpbGUgKHJicCA8IGR1a19f ZXhwcl9sYnAoY29tcF9jdHgpKSB7CisJCWR1a19fYWR2YW5jZShjb21wX2N0eCk7CisJCWR1a19f ZXhwcl9sZWQoY29tcF9jdHgsIHJlcywgdG1wKTsKKwkJZHVrX19jb3B5X2l2YWx1ZShjb21wX2N0 eCwgdG1wLCByZXMpOyAgLyogdG1wIC0+IHJlcyAqLworCX0KKworIGNsZWFudXA6CisJLyogZmlu YWwgcmVzdWx0IGlzIGFscmVhZHkgaW4gJ3JlcycgKi8KKworCWR1a19wb3BfMih0aHIpOworCisJ RFVLX19SRUNVUlNJT05fREVDUkVBU0UoY29tcF9jdHgsIHRocik7Cit9CisKK0RVS19MT0NBTCB2 b2lkIGR1a19fZXhwcnRvcChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAq cmVzLCBkdWtfc21hbGxfdWludF90IHJicF9mbGFncykgeworCWR1a19odGhyZWFkICp0aHIgPSBj b21wX2N0eC0+dGhyOworCisJLyogTm90ZTogdGhlc2UgdmFyaWFibGVzIG11c3QgcmVzaWRlIGlu ICdjdXJyX2Z1bmMnIGluc3RlYWQgb2YgdGhlIGdsb2JhbAorCSAqIGNvbnRleHQ6IHdoZW4gcGFy c2luZyBmdW5jdGlvbiBleHByZXNzaW9ucywgZXhwcmVzc2lvbiBwYXJzaW5nIGlzIG5lc3RlZC4K KwkgKi8KKwljb21wX2N0eC0+Y3Vycl9mdW5jLm51ZF9jb3VudCA9IDA7CisJY29tcF9jdHgtPmN1 cnJfZnVuYy5sZWRfY291bnQgPSAwOworCWNvbXBfY3R4LT5jdXJyX2Z1bmMucGFyZW5fbGV2ZWwg PSAwOworCWNvbXBfY3R4LT5jdXJyX2Z1bmMuZXhwcl9saHMgPSAxOworCWNvbXBfY3R4LT5jdXJy X2Z1bmMuYWxsb3dfaW4gPSAocmJwX2ZsYWdzICYgRFVLX19FWFBSX0ZMQUdfUkVKRUNUX0lOID8g MCA6IDEpOworCisJZHVrX19leHByKGNvbXBfY3R4LCByZXMsIHJicF9mbGFncyk7CisKKwlpZiAo IShyYnBfZmxhZ3MgJiBEVUtfX0VYUFJfRkxBR19BTExPV19FTVBUWSkgJiYgZHVrX19leHByX2lz X2VtcHR5KGNvbXBfY3R4KSkgeworCQlEVUtfRVJST1JfU1lOVEFYKHRociwgRFVLX1NUUl9FTVBU WV9FWFBSX05PVF9BTExPV0VEKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCX0KK30K KworLyogQSBidW5jaCBvZiBoZWxwZXJzIChmb3Igc2l6ZSBvcHRpbWl6YXRpb24pIHRoYXQgY29t YmluZSBkdWtfX2V4cHIoKS9kdWtfX2V4cHJ0b3AoKQorICogYW5kIHJlc3VsdCBjb252ZXJzaW9u cy4KKyAqCisgKiBFYWNoIGhlbHBlciBuZWVkcyBhdCBsZWFzdCAyLTMgY2FsbHMgdG8gbWFrZSBp dCB3b3J0aCB3aGlsZSB0byB3cmFwLgorICovCisKKyNpZiAwICAvKiB1bnVzZWQgKi8KK0RVS19M T0NBTCBkdWtfcmVnY29uc3RfdCBkdWtfX2V4cHJfdG9yZWcoZHVrX2NvbXBpbGVyX2N0eCAqY29t cF9jdHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MpIHsKKwlk dWtfX2V4cHIoY29tcF9jdHgsIHJlcywgcmJwX2ZsYWdzKTsKKwlyZXR1cm4gZHVrX19pdmFsdWVf dG9yZWcoY29tcF9jdHgsIHJlcyk7Cit9CisjZW5kaWYKKworI2lmIDAgIC8qIHVudXNlZCAqLwor RFVLX0xPQ0FMIGR1a19yZWdjb25zdF90IGR1a19fZXhwcl90b3RlbXAoZHVrX2NvbXBpbGVyX2N0 eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3Mp IHsKKwlkdWtfX2V4cHIoY29tcF9jdHgsIHJlcywgcmJwX2ZsYWdzKTsKKwlyZXR1cm4gZHVrX19p dmFsdWVfdG90ZW1wKGNvbXBfY3R4LCByZXMpOworfQorI2VuZGlmCisKK0RVS19MT0NBTCB2b2lk IGR1a19fZXhwcl90b2ZvcmNlZHJlZyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2 YWx1ZSAqcmVzLCBkdWtfc21hbGxfdWludF90IHJicF9mbGFncywgZHVrX3JlZ2NvbnN0X3QgZm9y Y2VkX3JlZykgeworCURVS19BU1NFUlQoZm9yY2VkX3JlZyA+PSAwKTsKKwlkdWtfX2V4cHIoY29t cF9jdHgsIHJlcywgcmJwX2ZsYWdzKTsKKwlkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0 eCwgcmVzLCBmb3JjZWRfcmVnKTsKK30KKworRFVLX0xPQ0FMIGR1a19yZWdjb25zdF90IGR1a19f ZXhwcl90b3JlZ2NvbnN0KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpy ZXMsIGR1a19zbWFsbF91aW50X3QgcmJwX2ZsYWdzKSB7CisJZHVrX19leHByKGNvbXBfY3R4LCBy ZXMsIHJicF9mbGFncyk7CisJcmV0dXJuIGR1a19faXZhbHVlX3RvcmVnY29uc3QoY29tcF9jdHgs IHJlcyk7Cit9CisKKyNpZiAwICAvKiB1bnVzZWQgKi8KK0RVS19MT0NBTCBkdWtfcmVnY29uc3Rf dCBkdWtfX2V4cHJfdG90ZW1wY29uc3QoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19p dmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MpIHsKKwlkdWtfX2V4cHIoY29t cF9jdHgsIHJlcywgcmJwX2ZsYWdzKTsKKwlyZXR1cm4gZHVrX19pdmFsdWVfdG90ZW1wY29uc3Qo Y29tcF9jdHgsIHJlcyk7Cit9CisjZW5kaWYKKworRFVLX0xPQ0FMIHZvaWQgZHVrX19leHByX3Rv cGxhaW4oZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3Nt YWxsX3VpbnRfdCByYnBfZmxhZ3MpIHsKKwlkdWtfX2V4cHIoY29tcF9jdHgsIHJlcywgcmJwX2Zs YWdzKTsKKwlkdWtfX2l2YWx1ZV90b3BsYWluKGNvbXBfY3R4LCByZXMpOworfQorCitEVUtfTE9D QUwgdm9pZCBkdWtfX2V4cHJfdG9wbGFpbl9pZ25vcmUoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9j dHgsIGR1a19pdmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MpIHsKKwlkdWtf X2V4cHIoY29tcF9jdHgsIHJlcywgcmJwX2ZsYWdzKTsKKwlkdWtfX2l2YWx1ZV90b3BsYWluX2ln bm9yZShjb21wX2N0eCwgcmVzKTsKK30KKworRFVLX0xPQ0FMIGR1a19yZWdjb25zdF90IGR1a19f ZXhwcnRvcF90b3JlZyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVz LCBkdWtfc21hbGxfdWludF90IHJicF9mbGFncykgeworCWR1a19fZXhwcnRvcChjb21wX2N0eCwg cmVzLCByYnBfZmxhZ3MpOworCXJldHVybiBkdWtfX2l2YWx1ZV90b3JlZyhjb21wX2N0eCwgcmVz KTsKK30KKworI2lmIDAgIC8qIHVudXNlZCAqLworRFVLX0xPQ0FMIGR1a19yZWdjb25zdF90IGR1 a19fZXhwcnRvcF90b3RlbXAoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUg KnJlcywgZHVrX3NtYWxsX3VpbnRfdCByYnBfZmxhZ3MpIHsKKwlkdWtfX2V4cHJ0b3AoY29tcF9j dHgsIHJlcywgcmJwX2ZsYWdzKTsKKwlyZXR1cm4gZHVrX19pdmFsdWVfdG90ZW1wKGNvbXBfY3R4 LCByZXMpOworfQorI2VuZGlmCisKK0RVS19MT0NBTCB2b2lkIGR1a19fZXhwcnRvcF90b2ZvcmNl ZHJlZyhkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfc21h bGxfdWludF90IHJicF9mbGFncywgZHVrX3JlZ2NvbnN0X3QgZm9yY2VkX3JlZykgeworCURVS19B U1NFUlQoZm9yY2VkX3JlZyA+PSAwKTsKKwlkdWtfX2V4cHJ0b3AoY29tcF9jdHgsIHJlcywgcmJw X2ZsYWdzKTsKKwlkdWtfX2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0eCwgcmVzLCBmb3JjZWRf cmVnKTsKK30KKworRFVLX0xPQ0FMIGR1a19yZWdjb25zdF90IGR1a19fZXhwcnRvcF90b3JlZ2Nv bnN0KGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19zbWFs bF91aW50X3QgcmJwX2ZsYWdzKSB7CisJZHVrX19leHBydG9wKGNvbXBfY3R4LCByZXMsIHJicF9m bGFncyk7CisJcmV0dXJuIGR1a19faXZhbHVlX3RvcmVnY29uc3QoY29tcF9jdHgsIHJlcyk7Cit9 CisKKyNpZiAwICAvKiB1bnVzZWQgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fZXhwcnRvcF90b3Bs YWluX2lnbm9yZShkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBp bnQgcmJwX2ZsYWdzKSB7CisJZHVrX19leHBydG9wKGNvbXBfY3R4LCByZXMsIHJicF9mbGFncyk7 CisJZHVrX19pdmFsdWVfdG9wbGFpbl9pZ25vcmUoY29tcF9jdHgsIHJlcyk7Cit9CisjZW5kaWYK KworLyoKKyAqICBQYXJzZSBhbiBpbmRpdmlkdWFsIHNvdXJjZSBlbGVtZW50ICh0b3AgbGV2ZWwg c3RhdGVtZW50KSBvciBhIHN0YXRlbWVudC4KKyAqCisgKiAgSGFuZGxlcyBsYWJlbGVkIHN0YXRl bWVudHMgYXV0b21hdGljYWxseSAocGVlbGluZyBhd2F5IGxhYmVscyBiZWZvcmUKKyAqICBwYXJz aW5nIGFuIGV4cHJlc3Npb24gdGhhdCBmb2xsb3dzIHRoZSBsYWJlbChzKSkuCisgKgorICogIFVw b24gZW50cnksICdjdXJyX3RvaycgY29udGFpbnMgdGhlIGZpcnN0IHRva2VuIG9mIHRoZSBzdGF0 ZW1lbnQgKHBhcnNlZAorICogIGluICJhbGxvdyByZWdleHAgbGl0ZXJhbCIgbW9kZSkuICBVcG9u IGV4aXQsICdjdXJyX3RvaycgY29udGFpbnMgdGhlIGZpcnN0CisgKiAgdG9rZW4gZm9sbG93aW5n IHRoZSBzdGF0ZW1lbnQgKGlmIHRoZSBzdGF0ZW1lbnQgaGFzIGEgdGVybWluYXRvciwgdGhpcyBp cworICogIHRoZSB0b2tlbiBhZnRlciB0aGUgdGVybWluYXRvcikuCisgKi8KKworI2RlZmluZSBE VUtfX0hBU19WQUwgICAgICAgICAgICAgICAgICAoMSA8PCAwKSAgLyogc3RtdCBoYXMgbm9uLWVt cHR5IHZhbHVlICovCisjZGVmaW5lIERVS19fSEFTX1RFUk0gICAgICAgICAgICAgICAgICgxIDw8 IDEpICAvKiBzdG10IGhhcyBleHBsaWNpdC9pbXBsaWNpdCBzZW1pY29sb24gdGVybWluYXRvciAq LworI2RlZmluZSBEVUtfX0FMTE9XX0FVVE9fU0VNSV9BTFdBWVMgICAoMSA8PCAyKSAgLyogYWxs b3cgYXV0b21hdGljIHNlbWljb2xvbiBldmVuIHdpdGhvdXQgbGluZXRlcm0gKGNvbXBhdGliaWxp dHkpICovCisjZGVmaW5lIERVS19fU1RJTExfUFJPTE9HVUUgICAgICAgICAgICgxIDw8IDMpICAv KiBzdGF0ZW1lbnQgZG9lcyBub3QgdGVybWluYXRlIGRpcmVjdGl2ZSBwcm9sb2d1ZSAqLworI2Rl ZmluZSBEVUtfX0lTX1RFUk1JTkFMICAgICAgICAgICAgICAoMSA8PCA0KSAgLyogc3RhdGVtZW50 IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGVybWluYWwgKGNvbnRyb2wgZG9lc24ndCBmbG93IHRvIG5l eHQgc3RhdGVtZW50KSAqLworCisvKiBQYXJzZSBhIHNpbmdsZSB2YXJpYWJsZSBkZWNsYXJhdGlv biAoZS5nLiAiaSIgb3IgImk9MTAiKS4gIEEgbGVhZGluZyAndmFyJworICogaGFzIGFscmVhZHkg YmVlbiBlYXRlbi4gIFRoZXNlIGlzIG5vIHJldHVybiB2YWx1ZSBpbiAncmVzJywgaXQgaXMgdXNl ZCBvbmx5CisgKiBhcyBhIHRlbXBvcmFyeS4KKyAqCisgKiBXaGVuIGNhbGxlZCBmcm9tICdmb3It aW4nIHN0YXRlbWVudCBwYXJzZXIsIHRoZSBpbml0aWFsaXplciBleHByZXNzaW9uIG11c3QKKyAq IG5vdCBhbGxvdyB0aGUgJ2luJyB0b2tlbi4gIFRoZSBjYWxsZXIgc3VwcGx5IGFkZGl0aW9uYWwg ZXhwcmVzc2lvbiBwYXJzaW5nCisgKiBmbGFncyAobGlrZSBEVUtfX0VYUFJfRkxBR19SRUpFQ1Rf SU4pIGluICdleHByX2ZsYWdzJy4KKyAqCisgKiBGaW5hbGx5LCBvdXRfcmNfdmFybmFtZSBhbmQg b3V0X3JlZ192YXJiaW5kIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3Qgd2hlcmUKKyAqIHRoZSBpZGVu dGlmaWVyIGlzIGJvdW5kOgorICoKKyAqICAgIElmIHJlZ2lzdGVyIGJvdW5kOiAgICAgIG91dF9y ZWdfdmFyYmluZCA+PSAwLCBvdXRfcmNfdmFybmFtZSA9PSAwIChpZ25vcmUpCisgKiAgICBJZiBu b3QgcmVnaXN0ZXIgYm91bmQ6ICBvdXRfcmVnX3ZhcmJpbmQgPCAwLCBvdXRfcmNfdmFybmFtZSA+ PSAwCisgKgorICogVGhlc2UgYWxsb3cgdGhlIGNhbGxlciB0byB1c2UgdGhlIHZhcmlhYmxlIGZv ciBmdXJ0aGVyIGFzc2lnbm1lbnQsIGUuZy4KKyAqIGFzIGlzIGRvbmUgaW4gJ2Zvci1pbicgcGFy c2luZy4KKyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX3BhcnNlX3Zhcl9kZWNsKGR1a19jb21w aWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19zbWFsbF91aW50X3QgZXhw cl9mbGFncywgZHVrX3JlZ2NvbnN0X3QgKm91dF9yZWdfdmFyYmluZCwgZHVrX3JlZ2NvbnN0X3Qg Km91dF9yY192YXJuYW1lKSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisJ ZHVrX2hzdHJpbmcgKmhfdmFybmFtZTsKKwlkdWtfcmVnY29uc3RfdCByZWdfdmFyYmluZDsKKwlk dWtfcmVnY29uc3RfdCByY192YXJuYW1lOworCisJLyogYXNzdW1lICd2YXInIGhhcyBiZWVuIGVh dGVuICovCisKKwkvKiBOb3RlOiBJZGVudGlmaWVyIHJlamVjdHMgcmVzZXJ2ZWQgd29yZHMgKi8K KwlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCAhPSBEVUtfVE9LX0lERU5USUZJRVIpIHsKKwkJ Z290byBzeW50YXhfZXJyb3I7CisJfQorCWhfdmFybmFtZSA9IGNvbXBfY3R4LT5jdXJyX3Rva2Vu LnN0cjE7CisKKwlEVUtfQVNTRVJUKGhfdmFybmFtZSAhPSBOVUxMKTsKKworCS8qIHN0cmljdCBt b2RlIHJlc3RyaWN0aW9ucyAoRTUgU2VjdGlvbiAxMi4yLjEpICovCisJaWYgKGR1a19faHN0cmlu Z19pc19ldmFsX29yX2FyZ3VtZW50c19pbl9zdHJpY3RfbW9kZShjb21wX2N0eCwgaF92YXJuYW1l KSkgeworCQlnb3RvIHN5bnRheF9lcnJvcjsKKwl9CisKKwkvKiByZWdpc3RlciBkZWNsYXJhdGlv bnMgaW4gZmlyc3QgcGFzcyAqLworCWlmIChjb21wX2N0eC0+Y3Vycl9mdW5jLmluX3NjYW5uaW5n KSB7CisJCWR1a191YXJyaWR4X3QgbjsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInJlZ2lzdGVy IHZhcmlhYmxlIGRlY2xhcmF0aW9uICUhTyBpbiBwYXNzIDEiLAorCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX2hlYXBoZHIgKikgaF92YXJuYW1lKSk7CisJCW4gPSAoZHVrX3VhcnJpZHhfdCkg ZHVrX2dldF9sZW5ndGgodGhyLCBjb21wX2N0eC0+Y3Vycl9mdW5jLmRlY2xzX2lkeCk7CisJCWR1 a19wdXNoX2hzdHJpbmcodGhyLCBoX3Zhcm5hbWUpOworCQlkdWtfcHV0X3Byb3BfaW5kZXgodGhy LCBjb21wX2N0eC0+Y3Vycl9mdW5jLmRlY2xzX2lkeCwgbik7CisJCWR1a19wdXNoX2ludCh0aHIs IERVS19ERUNMX1RZUEVfVkFSICsgKDAgPDwgOCkpOworCQlkdWtfcHV0X3Byb3BfaW5kZXgodGhy LCBjb21wX2N0eC0+Y3Vycl9mdW5jLmRlY2xzX2lkeCwgbiArIDEpOworCX0KKworCWR1a19wdXNo X2hzdHJpbmcodGhyLCBoX3Zhcm5hbWUpOyAgLyogcHVzaCBiZWZvcmUgYWR2YW5jaW5nIHRvIGtl ZXAgcmVhY2hhYmxlICovCisKKwkvKiByZWdpc3RlciBiaW5kaW5nIGxvb2t1cCBpcyBiYXNlZCBv biB2YXJtYXAgKGV2ZW4gaW4gZmlyc3QgcGFzcykgKi8KKwlkdWtfZHVwX3RvcCh0aHIpOworCSh2 b2lkKSBkdWtfX2xvb2t1cF9saHMoY29tcF9jdHgsICZyZWdfdmFyYmluZCwgJnJjX3Zhcm5hbWUp OworCisJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsgIC8qIGVhdCBpZGVudGlmaWVyICovCisKKwlp ZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX0VRVUFMU0lHTikgeworCQlkdWtf X2FkdmFuY2UoY29tcF9jdHgpOworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ2YXJkZWNsLCBh c3NpZ24gdG8gJyUhTycgLT4gcmVnX3ZhcmJpbmQ9JWxkLCByY192YXJuYW1lPSVsZCIsCisJCSAg ICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBoX3Zhcm5hbWUsIChsb25nKSByZWdf dmFyYmluZCwgKGxvbmcpIHJjX3Zhcm5hbWUpKTsKKworCQlkdWtfX2V4cHJ0b3AoY29tcF9jdHgs IHJlcywgRFVLX19CUF9DT01NQSB8IGV4cHJfZmxhZ3MgLypyYnBfZmxhZ3MqLyk7ICAvKiBBc3Np Z25tZW50RXhwcmVzc2lvbiAqLworCisJCWlmIChyZWdfdmFyYmluZCA+PSAwKSB7CisJCQlkdWtf X2l2YWx1ZV90b2ZvcmNlZHJlZyhjb21wX2N0eCwgcmVzLCByZWdfdmFyYmluZCk7CisJCX0gZWxz ZSB7CisJCQlkdWtfcmVnY29uc3RfdCByZWdfdmFsOworCQkJcmVnX3ZhbCA9IGR1a19faXZhbHVl X3RvcmVnKGNvbXBfY3R4LCByZXMpOworCQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJCQkg ICAgICAgICAgICAgICBEVUtfT1BfUFVUVkFSIHwgRFVLX19FTUlUX0ZMQUdfQV9JU19TT1VSQ0Us CisJCQkgICAgICAgICAgICAgICByZWdfdmFsLAorCQkJICAgICAgICAgICAgICAgcmNfdmFybmFt ZSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZXhwcl9mbGFncyAmIERVS19fRVhQUl9GTEFHX1JF UVVJUkVfSU5JVCkgeworCQkJLyogVXNlZCBmb3IgbWluaW1hbCAnY29uc3QnOiBpbml0aWFsaXpl ciByZXF1aXJlZC4gKi8KKwkJCWdvdG8gc3ludGF4X2Vycm9yOworCQl9CisJfQorCisJZHVrX3Bv cCh0aHIpOyAgLyogcG9wIHZhcm5hbWUgKi8KKworCSpvdXRfcmNfdmFybmFtZSA9IHJjX3Zhcm5h bWU7CisJKm91dF9yZWdfdmFyYmluZCA9IHJlZ192YXJiaW5kOworCisJcmV0dXJuOworCisgc3lu dGF4X2Vycm9yOgorCURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtfU1RSX0lOVkFMSURfVkFSX0RF Q0xBUkFUSU9OKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKK0RVS19MT0NBTCB2 b2lkIGR1a19fcGFyc2VfdmFyX3N0bXQoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19p dmFsdWUgKnJlcywgZHVrX3NtYWxsX3VpbnRfdCBleHByX2ZsYWdzKSB7CisJZHVrX3JlZ2NvbnN0 X3QgcmVnX3ZhcmJpbmQ7CisJZHVrX3JlZ2NvbnN0X3QgcmNfdmFybmFtZTsKKworCWR1a19fYWR2 YW5jZShjb21wX2N0eCk7ICAvKiBlYXQgJ3ZhcicgKi8KKworCWZvciAoOzspIHsKKwkJLyogcmNf dmFybmFtZSBhbmQgcmVnX3ZhcmJpbmQgYXJlIGlnbm9yZWQgaGVyZSAqLworCQlkdWtfX3BhcnNl X3Zhcl9kZWNsKGNvbXBfY3R4LCByZXMsIDAgfCBleHByX2ZsYWdzLCAmcmVnX3ZhcmJpbmQsICZy Y192YXJuYW1lKTsKKworCQlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCAhPSBEVUtfVE9LX0NP TU1BKSB7CisJCQlicmVhazsKKwkJfQorCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOworCX0KK30K KworRFVLX0xPQ0FMIHZvaWQgZHVrX19wYXJzZV9mb3Jfc3RtdChkdWtfY29tcGlsZXJfY3R4ICpj b21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfaW50X3QgcGNfbGFiZWxfc2l0ZSkgeworCWR1 a19odGhyZWFkICp0aHIgPSBjb21wX2N0eC0+dGhyOworCWR1a19pbnRfdCBwY192MzRfbGhzOyAg ICAgICAgIC8qIHN0YXJ0IHZhcmlhbnQgMy80IGxlZnQtaGFuZC1zaWRlIGNvZGUgKEwxIGluIGRv Yy9jb21waWxlci5yc3QgZXhhbXBsZSkgKi8KKwlkdWtfcmVnY29uc3RfdCB0ZW1wX3Jlc2V0OyAg ICAvKiBrbm9jayBiYWNrICJuZXh0IHRlbXAiIHRvIHRoaXMgd2hlbmV2ZXIgcG9zc2libGUgKi8K KwlkdWtfcmVnY29uc3RfdCByZWdfdGVtcHM7ICAgICAvKiBwcmVhbGxvY2F0ZWQgdGVtcG9yYXJp ZXMgKDIpIGZvciB2YXJpYW50cyAzIGFuZCA0ICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgi c3RhcnQgcGFyc2luZyBhIGZvci9mb3ItaW4gc3RhdGVtZW50IikpOworCisJLyogVHdvIHRlbXBv cmFyaWVzIGFyZSBwcmVhbGxvY2F0ZWQgaGVyZSBmb3IgdmFyaWFudHMgMyBhbmQgNCB3aGljaCBu ZWVkCisJICogcmVnaXN0ZXJzIHdoaWNoIGFyZSBuZXZlciBjbG9iYmVyZWQgYnkgZXhwcmVzc2lv bnMgaW4gdGhlIGxvb3AKKwkgKiAoY29uY3JldGVseTogZm9yIHRoZSBlbnVtZXJhdG9yIG9iamVj dCBhbmQgdGhlIG5leHQgZW51bWVyYXRlZCB2YWx1ZSkuCisJICogVmFyaWFudHMgMSBhbmQgMiAi cmVsZWFzZSIgdGhlc2UgdGVtcHMuCisJICovCisKKwlyZWdfdGVtcHMgPSBEVUtfX0FMTE9DVEVN UFMoY29tcF9jdHgsIDIpOworCisJdGVtcF9yZXNldCA9IERVS19fR0VUVEVNUChjb21wX2N0eCk7 CisKKwkvKgorCSAqICBGb3IvZm9yLWluIG1haW4gdmFyaWFudHMgYXJlOgorCSAqCisJICogICAg MS4gZm9yIChFeHByZXNzaW9uTm9Jbl9vcHQ7IEV4cHJlc3Npb25fb3B0OyBFeHByZXNzaW9uX29w dCkgU3RhdGVtZW50CisJICogICAgMi4gZm9yICh2YXIgVmFyaWFibGVEZWNsYXJhdGlvbk5vSW47 IEV4cHJlc3Npb25fb3B0OyBFeHByZXNzaW9uX29wdCkgU3RhdGVtZW50CisJICogICAgMy4gZm9y IChMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIGluIEV4cHJlc3Npb24pIFN0YXRlbWVudAorCSAqICAg IDQuIGZvciAodmFyIFZhcmlhYmxlRGVjbGFyYXRpb25Ob0luIGluIEV4cHJlc3Npb24pIFN0YXRl bWVudAorCSAqCisJICogIFBhcnNpbmcgdGhlc2Ugd2l0aG91dCBhcmJpdHJhcnkgbG9va2FoZWFk IG9yIGJhY2t0cmFja2luZyBpcyByZWxhdGl2ZWx5CisJICogIHRyaWNreSBidXQgd2UgbWFuYWdl IHRvIGRvIHNvIGZvciBub3cuCisJICoKKwkgKiAgU2VlIGRvYy9jb21waWxlci5yc3QgZm9yIGEg ZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiBjb250cm9sIGZsb3cKKwkgKiAgaXNzdWVzLCBldmFsdWF0 aW9uIG9yZGVyIGlzc3VlcywgZXRjLgorCSAqLworCisJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsg IC8qIGVhdCAnZm9yJyAqLworCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tf TFBBUkVOKTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJkZXRlY3RpbmcgZm9yL2Zvci1pbiBs b29wIHZhcmlhbnQsIHBjPSVsZCIsIChsb25nKSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4 KSkpOworCisJLyogYSBsYWJlbCBzaXRlIGhhcyBiZWVuIGVtaXR0ZWQgYnkgZHVrX19wYXJzZV9z dG10KCkgYXV0b21hdGljYWxseQorCSAqIChpdCB3aWxsIGFsc28gZW1pdCB0aGUgRU5ETEFCRUwp LgorCSAqLworCisJaWYgKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19WQVIpIHsK KwkJLyoKKwkJICogIFZhcmlhbnQgMiBvciA0CisJCSAqLworCisJCWR1a19yZWdjb25zdF90IHJl Z192YXJiaW5kOyAgLyogdmFyaWFibGUgYmluZGluZyByZWdpc3RlciBpZiByZWdpc3Rlci1ib3Vu ZCAob3RoZXJ3aXNlIDwgMCkgKi8KKwkJZHVrX3JlZ2NvbnN0X3QgcmNfdmFybmFtZTsgICAvKiB2 YXJpYWJsZSBuYW1lIHJlZy9jb25zdCwgaWYgdmFyaWFibGUgbm90IHJlZ2lzdGVyLWJvdW5kICov CisKKwkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsgIC8qIGVhdCAndmFyJyAqLworCQlkdWtfX3Bh cnNlX3Zhcl9kZWNsKGNvbXBfY3R4LCByZXMsIERVS19fRVhQUl9GTEFHX1JFSkVDVF9JTiwgJnJl Z192YXJiaW5kLCAmcmNfdmFybmFtZSk7CisJCURVS19fU0VUVEVNUChjb21wX2N0eCwgdGVtcF9y ZXNldCk7CisKKwkJaWYgKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19JTikgewor CQkJLyoKKwkJCSAqICBWYXJpYW50IDQKKwkJCSAqLworCisJCQlEVUtfREREKERVS19ERERQUklO VCgiZGV0ZWN0ZWQgZm9yIHZhcmlhbnQgNDogZm9yICh2YXIgVmFyaWFibGVEZWNsYXJhdGlvbk5v SW4gaW4gRXhwcmVzc2lvbikgU3RhdGVtZW50IikpOworCQkJcGNfdjM0X2xocyA9IGR1a19fZ2V0 X2N1cnJlbnRfcGMoY29tcF9jdHgpOyAgLyoganVtcCBpcyBpbnNlcnRlZCBoZXJlICovCisJCQlp ZiAocmVnX3ZhcmJpbmQgPj0gMCkgeworCQkJCWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LAorCQkJ CSAgICAgICAgICAgICAgIERVS19PUF9MRFJFRywKKwkJCQkgICAgICAgICAgICAgICByZWdfdmFy YmluZCwKKwkJCQkgICAgICAgICAgICAgICByZWdfdGVtcHMgKyAwKTsKKwkJCX0gZWxzZSB7CisJ CQkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJCQkJICAgICAgICAgICAgICAgRFVLX09QX1BV VFZBUiB8IERVS19fRU1JVF9GTEFHX0FfSVNfU09VUkNFLAorCQkJCSAgICAgICAgICAgICAgIHJl Z190ZW1wcyArIDAsCisJCQkJICAgICAgICAgICAgICAgcmNfdmFybmFtZSk7CisJCQl9CisJCQln b3RvIHBhcnNlXzNfb3JfNDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiAgVmFyaWFudCAyCisJ CQkgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImRldGVjdGVkIGZvciB2YXJpYW50IDI6 IGZvciAodmFyIFZhcmlhYmxlRGVjbGFyYXRpb25Ob0luOyBFeHByZXNzaW9uX29wdDsgRXhwcmVz c2lvbl9vcHQpIFN0YXRlbWVudCIpKTsKKwkJCWZvciAoOzspIHsKKwkJCQkvKiBtb3JlIGluaXRp YWxpemVycyAqLworCQkJCWlmIChjb21wX2N0eC0+Y3Vycl90b2tlbi50ICE9IERVS19UT0tfQ09N TUEpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ2YXJp YW50IDIgaGFzIGFub3RoZXIgdmFyaWFibGUgaW5pdGlhbGl6ZXIiKSk7CisKKwkJCQlkdWtfX2Fk dmFuY2UoY29tcF9jdHgpOyAgLyogZWF0IGNvbW1hICovCisJCQkJZHVrX19wYXJzZV92YXJfZGVj bChjb21wX2N0eCwgcmVzLCBEVUtfX0VYUFJfRkxBR19SRUpFQ1RfSU4sICZyZWdfdmFyYmluZCwg JnJjX3Zhcm5hbWUpOworCQkJfQorCQkJZ290byBwYXJzZV8xX29yXzI7CisJCX0KKwl9IGVsc2Ug eworCQkvKgorCQkgKiAgVmFyaWFudCAxIG9yIDMKKwkJICovCisKKwkJcGNfdjM0X2xocyA9IGR1 a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpOyAgLyoganVtcCBpcyBpbnNlcnRlZCBoZXJlICh2 YXJpYW50IDMpICovCisKKwkJLyogTm90ZSB0aGF0IGR1a19fZXhwcnRvcCgpIGhlcmUgY2FuIGNs b2JiZXIgYW55IHJlZyBhYm92ZSBjdXJyZW50IHRlbXBfbmV4dCwKKwkJICogc28gYW55IGxvb3Ag dmFyaWFibGVzIChlLmcuIGVudW1lcmF0b3IpIG11c3QgYmUgInByZWFsbG9jYXRlZCIuCisJCSAq LworCisJCS8qIGRvbid0IGNvZXJjZSB5ZXQgdG8gYSBwbGFpbiB2YWx1ZSAodmFyaWFudCAzIG5l ZWRzIHNwZWNpYWwgaGFuZGxpbmcpICovCisJCWR1a19fZXhwcnRvcChjb21wX2N0eCwgcmVzLCBE VUtfX0JQX0ZPUl9FWFBSIHwgRFVLX19FWFBSX0ZMQUdfUkVKRUNUX0lOIHwgRFVLX19FWFBSX0ZM QUdfQUxMT1dfRU1QVFkgLypyYnBfZmxhZ3MqLyk7ICAvKiBFeHByZXNzaW9uICovCisJCWlmIChj b21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfSU4pIHsKKwkJCS8qCisJCQkgKiAgVmFy aWFudCAzCisJCQkgKi8KKworCQkJLyogWFhYOiBuZWVkIHRvIGRldGVybWluZSBMSFMgdHlwZSwg YW5kIGNoZWNrIHRoYXQgaXQgaXMgTEhTIGNvbXBhdGlibGUgKi8KKwkJCURVS19EREQoRFVLX0RE RFBSSU5UKCJkZXRlY3RlZCBmb3IgdmFyaWFudCAzOiBmb3IgKExlZnRIYW5kU2lkZUV4cHJlc3Np b24gaW4gRXhwcmVzc2lvbikgU3RhdGVtZW50IikpOworCQkJaWYgKGR1a19fZXhwcl9pc19lbXB0 eShjb21wX2N0eCkpIHsKKwkJCQlnb3RvIHN5bnRheF9lcnJvcjsgIC8qIExlZnRIYW5kU2lkZUV4 cHJlc3Npb24gZG9lcyBub3QgYWxsb3cgZW1wdHkgZXhwcmVzc2lvbiAqLworCQkJfQorCisJCQlp ZiAocmVzLT50ID09IERVS19JVkFMX1ZBUikgeworCQkJCWR1a19yZWdjb25zdF90IHJlZ192YXJi aW5kOworCQkJCWR1a19yZWdjb25zdF90IHJjX3Zhcm5hbWU7CisKKwkJCQlkdWtfZHVwKHRociwg cmVzLT54MS52YWxzdGFja19pZHgpOworCQkJCWlmIChkdWtfX2xvb2t1cF9saHMoY29tcF9jdHgs ICZyZWdfdmFyYmluZCwgJnJjX3Zhcm5hbWUpKSB7CisJCQkJCWR1a19fZW1pdF9hX2JjKGNvbXBf Y3R4LAorCQkJCQkgICAgICAgICAgICAgICBEVUtfT1BfTERSRUcsCisJCQkJCSAgICAgICAgICAg ICAgIHJlZ192YXJiaW5kLAorCQkJCQkgICAgICAgICAgICAgICByZWdfdGVtcHMgKyAwKTsKKwkJ CQl9IGVsc2UgeworCQkJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwKKwkJCQkJICAgICAgICAg ICAgICAgRFVLX09QX1BVVFZBUiB8IERVS19fRU1JVF9GTEFHX0FfSVNfU09VUkNFLAorCQkJCQkg ICAgICAgICAgICAgICByZWdfdGVtcHMgKyAwLAorCQkJCQkgICAgICAgICAgICAgICByY192YXJu YW1lKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHJlcy0+dCA9PSBEVUtfSVZBTF9QUk9QKSB7CisJ CQkJLyogRG9uJ3QgYWxsb3cgYSBjb25zdGFudCBmb3IgdGhlIG9iamVjdCAoZXZlbiBmb3IgYSBu dW1iZXIgZXRjKSwgYXMKKwkJCQkgKiBpdCBnb2VzIGludG8gdGhlICdBJyBmaWVsZCBvZiB0aGUg b3Bjb2RlLgorCQkJCSAqLworCQkJCWR1a19yZWdjb25zdF90IHJlZ19vYmo7CisJCQkJZHVrX3Jl Z2NvbnN0X3QgcmNfa2V5OworCQkJCXJlZ19vYmogPSBkdWtfX2lzcGVjX3RvcmVnY29uc3RfcmF3 KGNvbXBfY3R4LCAmcmVzLT54MSwgLTEgLypmb3JjZWRfcmVnKi8sIDAgLypmbGFncyovKTsgIC8q IGRvbid0IGFsbG93IGNvbnN0ICovCisJCQkJcmNfa2V5ID0gZHVrX19pc3BlY190b3JlZ2NvbnN0 X3Jhdyhjb21wX2N0eCwgJnJlcy0+eDIsIC0xIC8qZm9yY2VkX3JlZyovLCBEVUtfX0lWQUxfRkxB R19BTExPV19DT05TVCAvKmZsYWdzKi8pOworCQkJCWR1a19fZW1pdF9hX2JfYyhjb21wX2N0eCwK KwkJCQkgICAgICAgICAgICAgICAgRFVLX09QX1BVVFBST1AgfCBEVUtfX0VNSVRfRkxBR19BX0lT X1NPVVJDRSB8IERVS19fRU1JVF9GTEFHX0JDX1JFR0NPTlNULAorCQkJCSAgICAgICAgICAgICAg ICByZWdfb2JqLAorCQkJCSAgICAgICAgICAgICAgICByY19rZXksCisJCQkJICAgICAgICAgICAg ICAgIHJlZ190ZW1wcyArIDApOworCQkJfSBlbHNlIHsKKwkJCQlkdWtfX2l2YWx1ZV90b3BsYWlu X2lnbm9yZShjb21wX2N0eCwgcmVzKTsgIC8qIGp1c3QgaW4gY2FzZSAqLworCQkJCWR1a19fZW1p dF9vcF9vbmx5KGNvbXBfY3R4LAorCQkJCSAgICAgICAgICAgICAgICAgIERVS19PUF9JTlZMSFMp OworCQkJfQorCQkJZ290byBwYXJzZV8zX29yXzQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICog IFZhcmlhbnQgMQorCQkJICovCisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJkZXRlY3RlZCBm b3IgdmFyaWFudCAxOiBmb3IgKEV4cHJlc3Npb25Ob0luX29wdDsgRXhwcmVzc2lvbl9vcHQ7IEV4 cHJlc3Npb25fb3B0KSBTdGF0ZW1lbnQiKSk7CisJCQlkdWtfX2l2YWx1ZV90b3BsYWluX2lnbm9y ZShjb21wX2N0eCwgcmVzKTsKKwkJCWdvdG8gcGFyc2VfMV9vcl8yOworCQl9CisJfQorCisgcGFy c2VfMV9vcl8yOgorCS8qCisJICogIFBhcnNlIHZhcmlhbnQgMSBvciAyLiAgVGhlIGZpcnN0IHBh cnQgZXhwcmVzc2lvbiAod2hpY2ggZGlmZmVycworCSAqICBpbiB0aGUgdmFyaWFudHMpIGhhcyBh bHJlYWR5IGJlZW4gcGFyc2VkIGFuZCBpdHMgY29kZSBlbWl0dGVkLgorCSAqCisJICogIHJlZ190 ZW1wcyArIDA6IHVudXNlZAorCSAqICByZWdfdGVtcHMgKyAxOiB1bnVzZWQKKwkgKi8KKwl7CisJ CWR1a19yZWdjb25zdF90IHJjX2NvbmQ7CisJCWR1a19pbnRfdCBwY19sMSwgcGNfbDIsIHBjX2wz LCBwY19sNDsKKwkJZHVrX2ludF90IHBjX2p1bXB0b19sMywgcGNfanVtcHRvX2w0OworCQlkdWtf Ym9vbF90IGV4cHJfY19lbXB0eTsKKworCQlEVUtfREREKERVS19ERERQUklOVCgic2hhcmVkIGNv ZGUgZm9yIHBhcnNpbmcgdmFyaWFudHMgMSBhbmQgMiIpKTsKKworCQkvKiAicmVsZWFzZSIgcHJl YWxsb2NhdGVkIHRlbXBzIHNpbmNlIHdlIHdvbid0IG5lZWQgdGhlbSAqLworCQl0ZW1wX3Jlc2V0 ID0gcmVnX3RlbXBzICsgMDsKKwkJRFVLX19TRVRURU1QKGNvbXBfY3R4LCB0ZW1wX3Jlc2V0KTsK KworCQlkdWtfX2FkdmFuY2VfZXhwZWN0KGNvbXBfY3R4LCBEVUtfVE9LX1NFTUlDT0xPTik7CisK KwkJcGNfbDEgPSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsKKwkJZHVrX19leHBydG9w KGNvbXBfY3R4LCByZXMsIERVS19fQlBfRk9SX0VYUFIgfCBEVUtfX0VYUFJfRkxBR19BTExPV19F TVBUWSAvKnJicF9mbGFncyovKTsgIC8qIEV4cHJlc3Npb25fb3B0ICovCisJCWlmIChkdWtfX2V4 cHJfaXNfZW1wdHkoY29tcF9jdHgpKSB7CisJCQkvKiBubyBuZWVkIHRvIGNvZXJjZSAqLworCQkJ cGNfanVtcHRvX2wzID0gZHVrX19lbWl0X2p1bXBfZW1wdHkoY29tcF9jdHgpOyAgLyogdG8gYm9k eSAqLworCQkJcGNfanVtcHRvX2w0ID0gLTE7ICAvKiBvbWl0dGVkICovCisJCX0gZWxzZSB7CisJ CQlyY19jb25kID0gZHVrX19pdmFsdWVfdG9yZWdjb25zdChjb21wX2N0eCwgcmVzKTsKKwkJCWR1 a19fZW1pdF9pZl9mYWxzZV9za2lwKGNvbXBfY3R4LCByY19jb25kKTsKKwkJCXBjX2p1bXB0b19s MyA9IGR1a19fZW1pdF9qdW1wX2VtcHR5KGNvbXBfY3R4KTsgIC8qIHRvIGJvZHkgKi8KKwkJCXBj X2p1bXB0b19sNCA9IGR1a19fZW1pdF9qdW1wX2VtcHR5KGNvbXBfY3R4KTsgIC8qIHRvIGV4aXQg Ki8KKwkJfQorCQlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHRlbXBfcmVzZXQpOworCisJCWR1a19f YWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfU0VNSUNPTE9OKTsKKworCQlwY19sMiA9 IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpOworCQlkdWtfX2V4cHJ0b3AoY29tcF9jdHgs IHJlcywgRFVLX19CUF9GT1JfRVhQUiB8IERVS19fRVhQUl9GTEFHX0FMTE9XX0VNUFRZIC8qcmJw X2ZsYWdzKi8pOyAgLyogRXhwcmVzc2lvbl9vcHQgKi8KKwkJaWYgKGR1a19fZXhwcl9pc19lbXB0 eShjb21wX2N0eCkpIHsKKwkJCS8qIG5vIG5lZWQgdG8gY29lcmNlICovCisJCQlleHByX2NfZW1w dHkgPSAxOworCQkJLyogSlVNUCBMMSBvbWl0dGVkICovCisJCX0gZWxzZSB7CisJCQlkdWtfX2l2 YWx1ZV90b3BsYWluX2lnbm9yZShjb21wX2N0eCwgcmVzKTsKKwkJCWV4cHJfY19lbXB0eSA9IDA7 CisJCQlkdWtfX2VtaXRfanVtcChjb21wX2N0eCwgcGNfbDEpOworCQl9CisJCURVS19fU0VUVEVN UChjb21wX2N0eCwgdGVtcF9yZXNldCk7CisKKwkJY29tcF9jdHgtPmN1cnJfZnVuYy5hbGxvd19y ZWdleHBfaW5fYWR2ID0gMTsKKwkJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwgRFVLX1RP S19SUEFSRU4pOyAgLyogQWxsb3cgUmVnRXhwIGFzIHBhcnQgb2YgbmV4dCBzdG10LiAqLworCisJ CXBjX2wzID0gZHVrX19nZXRfY3VycmVudF9wYyhjb21wX2N0eCk7CisJCWR1a19fcGFyc2Vfc3Rt dChjb21wX2N0eCwgcmVzLCAwIC8qYWxsb3dfc291cmNlX2VsZW0qLyk7CisJCWlmIChleHByX2Nf ZW1wdHkpIHsKKwkJCWR1a19fZW1pdF9qdW1wKGNvbXBfY3R4LCBwY19sMSk7CisJCX0gZWxzZSB7 CisJCQlkdWtfX2VtaXRfanVtcChjb21wX2N0eCwgcGNfbDIpOworCQl9CisJCS8qIHRlbXAgcmVz ZXQgaXMgbm90IG5lY2Vzc2FyeSBhZnRlciBkdWtfX3BhcnNlX3N0bXQoKSwgd2hpY2ggYWxyZWFk eSBkb2VzIGl0ICovCisKKwkJcGNfbDQgPSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsK KworCQlEVUtfREREKERVS19ERERQUklOVCgicGF0Y2hpbmcganVtcHM6IGp1bXB0b19sMzogJWxk LT4lbGQsIGp1bXB0b19sNDogJWxkLT4lbGQsICIKKwkJICAgICAgICAgICAgICAgICAgICAgImJy ZWFrOiAlbGQtPiVsZCwgY29udGludWU6ICVsZC0+JWxkIiwKKwkJCSAgICAgICAgICAgICAobG9u ZykgcGNfanVtcHRvX2wzLCAobG9uZykgcGNfbDMsIChsb25nKSBwY19qdW1wdG9fbDQsIChsb25n KSBwY19sNCwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIChwY19sYWJlbF9zaXRlICsg MSksIChsb25nKSBwY19sNCwgKGxvbmcpIChwY19sYWJlbF9zaXRlICsgMiksIChsb25nKSBwY19s MikpOworCisJCWR1a19fcGF0Y2hfanVtcChjb21wX2N0eCwgcGNfanVtcHRvX2wzLCBwY19sMyk7 CisJCWR1a19fcGF0Y2hfanVtcChjb21wX2N0eCwgcGNfanVtcHRvX2w0LCBwY19sNCk7CisJCWR1 a19fcGF0Y2hfanVtcChjb21wX2N0eCwKKwkJICAgICAgICAgICAgICAgIHBjX2xhYmVsX3NpdGUg KyAxLAorCQkgICAgICAgICAgICAgICAgcGNfbDQpOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBicmVhayBqdW1wICovCisJCWR1a19fcGF0Y2hfanVtcChjb21wX2N0eCwKKwkJICAgICAgICAg ICAgICAgIHBjX2xhYmVsX3NpdGUgKyAyLAorCQkgICAgICAgICAgICAgICAgZXhwcl9jX2VtcHR5 ID8gcGNfbDEgOiBwY19sMik7ICAvKiBjb250aW51ZSBqdW1wICovCisJfQorCWdvdG8gZmluaXNo ZWQ7CisKKyBwYXJzZV8zX29yXzQ6CisJLyoKKwkgKiAgUGFyc2UgdmFyaWFudCAzIG9yIDQuCisJ ICoKKwkgKiAgRm9yIHZhcmlhbnQgMyAoZS5nLiAiZm9yIChBIGluIEMpIEQ7IikgdGhlIGNvZGUg Zm9yIEEgKGV4Y2VwdCB0aGUKKwkgKiAgZmluYWwgcHJvcGVydHkvdmFyaWFibGUgd3JpdGUpIGhh cyBhbHJlYWR5IGJlZW4gZW1pdHRlZC4gIFRoZSBmaXJzdAorCSAqICBpbnN0cnVjdGlvbiBvZiB0 aGF0IGNvZGUgaXMgYXQgcGNfdjM0X2xoczsgYSBKVU1QIG5lZWRzIHRvIGJlIGluc2VydGVkCisJ ICogIHRoZXJlIHRvIHNhdGlzZnkgY29udHJvbCBmbG93IG5lZWRzLgorCSAqCisJICogIEZvciB2 YXJpYW50IDQsIGlmIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBoYWQgYW4gaW5pdGlhbGl6ZXIK KwkgKiAgKGUuZy4gImZvciAodmFyIEEgPSBCIGluIEMpIEQ7IikgdGhlIGNvZGUgZm9yIHRoZSBh c3NpZ25tZW50CisJICogIChCKSBoYXMgYWxyZWFkeSBiZWVuIGVtaXR0ZWQuCisJICoKKwkgKiAg VmFyaWFibGVzIHNldCBiZWZvcmUgZW50ZXJpbmcgaGVyZToKKwkgKgorCSAqICAgIHBjX3YzNF9s aHM6ICAgIGluc2VydCBhICJKVU1QIEwyIiBoZXJlIChzZWUgZG9jL2NvbXBpbGVyLnJzdCBleGFt cGxlKS4KKwkgKiAgICByZWdfdGVtcHMgKyAwOiBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlICh3cml0 dGVuIHRvIExIUykKKwkgKiAgICByZWdfdGVtcHMgKyAxOiBlbnVtZXJhdG9yIG9iamVjdAorCSAq LworCXsKKwkJZHVrX2ludF90IHBjX2wxLCBwY19sMiwgcGNfbDMsIHBjX2w0LCBwY19sNTsKKwkJ ZHVrX2ludF90IHBjX2p1bXB0b19sMiwgcGNfanVtcHRvX2wzLCBwY19qdW1wdG9fbDQsIHBjX2p1 bXB0b19sNTsKKwkJZHVrX3JlZ2NvbnN0X3QgcmVnX3RhcmdldDsKKworCQlEVUtfREREKERVS19E RERQUklOVCgic2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgdmFyaWFudHMgMyBhbmQgNCwgcGNfdjM0 X2xocz0lbGQiLCAobG9uZykgcGNfdjM0X2xocykpOworCisJCURVS19fU0VUVEVNUChjb21wX2N0 eCwgdGVtcF9yZXNldCk7CisKKwkJLyogRmlyc3Qgd2UgbmVlZCB0byBpbnNlcnQgYSBqdW1wIGlu IHRoZSBtaWRkbGUgb2YgcHJldmlvdXNseQorCQkgKiBlbWl0dGVkIGNvZGUgdG8gZ2V0IHRoZSBj b250cm9sIGZsb3cgcmlnaHQuICBObyBqdW1wcyBjYW4KKwkJICogY3Jvc3MgdGhlIHBvc2l0aW9u IHdoZXJlIHRoZSBqdW1wIGlzIGluc2VydGVkLiAgU2VlIGRvYy9jb21waWxlci5yc3QKKwkJICog Zm9yIGRpc2N1c3Npb24gb24gdGhlIGludHJpY2FjaWVzIG9mIGNvbnRyb2wgZmxvdyBhbmQgc2lk ZSBlZmZlY3RzCisJCSAqIGZvciB2YXJpYW50cyAzIGFuZCA0LgorCQkgKi8KKworCQlkdWtfX2lu c2VydF9qdW1wX2VudHJ5KGNvbXBfY3R4LCBwY192MzRfbGhzKTsKKwkJcGNfanVtcHRvX2wyID0g cGNfdjM0X2xoczsgIC8qIGluc2VydGVkIGp1bXAgKi8KKwkJcGNfbDEgPSBwY192MzRfbGhzICsg MTsgICAgIC8qICsxLCByaWdodCBhZnRlciBpbnNlcnRlZCBqdW1wICovCisKKwkJLyogVGhlIGNv ZGUgZm9yIHdyaXRpbmcgcmVnX3RlbXBzICsgMCB0byB0aGUgbGVmdCBoYW5kIHNpZGUgaGFzIGFs cmVhZHkKKwkJICogYmVlbiBlbWl0dGVkLgorCQkgKi8KKworCQlwY19qdW1wdG9fbDMgPSBkdWtf X2VtaXRfanVtcF9lbXB0eShjb21wX2N0eCk7ICAvKiAtPiBsb29wIGJvZHkgKi8KKworCQlkdWtf X2FkdmFuY2UoY29tcF9jdHgpOyAgLyogZWF0ICdpbicgKi8KKworCQkvKiBQYXJzZSBlbnVtZXJh dGlvbiB0YXJnZXQgYW5kIGluaXRpYWxpemUgZW51bWVyYXRvci4gIEZvciAnbnVsbCcgYW5kICd1 bmRlZmluZWQnLAorCQkgKiBJTklURU5VTSB3aWxsIGNyZWF0ZXMgYSAnbnVsbCcgZW51bWVyYXRv ciB3aGljaCB3b3JrcyBsaWtlIGFuIGVtcHR5IGVudW1lcmF0b3IKKwkJICogKEU1IFNlY3Rpb24g MTIuNi40LCBzdGVwIDMpLiAgTm90ZSB0aGF0IElOSVRFTlVNIHJlcXVpcmVzIHRoZSB2YWx1ZSB0 byBiZSBpbiBhCisJCSAqIHJlZ2lzdGVyIChjb25zdGFudCBub3QgYWxsb3dlZCkuCisJCSAqLwor CisJCXBjX2wyID0gZHVrX19nZXRfY3VycmVudF9wYyhjb21wX2N0eCk7CisJCXJlZ190YXJnZXQg PSBkdWtfX2V4cHJ0b3BfdG9yZWcoY29tcF9jdHgsIHJlcywgRFVLX19CUF9GT1JfRVhQUiAvKnJi cF9mbGFncyovKTsgIC8qIEV4cHJlc3Npb24gKi8KKwkJZHVrX19lbWl0X2JfYyhjb21wX2N0eCwK KwkJICAgICAgICAgICAgICBEVUtfT1BfSU5JVEVOVU0gfCBEVUtfX0VNSVRfRkxBR19CX0lTX1RB UkdFVCwKKwkJICAgICAgICAgICAgICByZWdfdGVtcHMgKyAxLAorCQkgICAgICAgICAgICAgIHJl Z190YXJnZXQpOworCQlwY19qdW1wdG9fbDQgPSBkdWtfX2VtaXRfanVtcF9lbXB0eShjb21wX2N0 eCk7CisJCURVS19fU0VUVEVNUChjb21wX2N0eCwgdGVtcF9yZXNldCk7CisKKwkJY29tcF9jdHgt PmN1cnJfZnVuYy5hbGxvd19yZWdleHBfaW5fYWR2ID0gMTsKKwkJZHVrX19hZHZhbmNlX2V4cGVj dChjb21wX2N0eCwgRFVLX1RPS19SUEFSRU4pOyAgLyogQWxsb3cgUmVnRXhwIGFzIHBhcnQgb2Yg bmV4dCBzdG10LiAqLworCisJCXBjX2wzID0gZHVrX19nZXRfY3VycmVudF9wYyhjb21wX2N0eCk7 CisJCWR1a19fcGFyc2Vfc3RtdChjb21wX2N0eCwgcmVzLCAwIC8qYWxsb3dfc291cmNlX2VsZW0q Lyk7CisJCS8qIHRlbXAgcmVzZXQgaXMgbm90IG5lY2Vzc2FyeSBhZnRlciBkdWtfX3BhcnNlX3N0 bXQoKSwgd2hpY2ggYWxyZWFkeSBkb2VzIGl0ICovCisKKwkJLyogTkVYVEVOVU0gbmVlZHMgYSBq dW1wIHNsb3QgcmlnaHQgYWZ0ZXIgdGhlIG1haW4gb3Bjb2RlLgorCQkgKiBXZSBuZWVkIHRoZSBj b2RlIGVtaXR0ZXIgdG8gcmVzZXJ2ZSB0aGUgc2xvdDogaWYgdGhlcmUncworCQkgKiB0YXJnZXQg c2h1ZmZsaW5nLCB0aGUgdGFyZ2V0IHNodWZmbGUgb3Bjb2RlcyBtdXN0IGhhcHBlbgorCQkgKiBh ZnRlciB0aGUganVtcCBzbG90IChmb3IgTkVYVEVOVU0gdGhlIHNodWZmbGUgb3Bjb2RlcyBhcmUK KwkJICogbm90IG5lZWRlZCBpZiB0aGUgZW51bSBpcyBmaW5pc2hlZCkuCisJCSAqLworCQlwY19s NCA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpOworCQlkdWtfX2VtaXRfYl9jKGNvbXBf Y3R4LAorCQkgICAgICAgICAgICAgIERVS19PUF9ORVhURU5VTSB8IERVS19fRU1JVF9GTEFHX0Jf SVNfVEFSR0VUIHwgRFVLX19FTUlUX0ZMQUdfUkVTRVJWRV9KVU1QU0xPVCwKKwkJICAgICAgICAg ICAgICByZWdfdGVtcHMgKyAwLAorCQkgICAgICAgICAgICAgIHJlZ190ZW1wcyArIDEpOworCQlw Y19qdW1wdG9fbDUgPSBjb21wX2N0eC0+ZW1pdF9qdW1wc2xvdF9wYzsgIC8qIE5FWFRFTlVNIGp1 bXAgc2xvdDogZXhlY3V0ZWQgd2hlbiBlbnVtIGZpbmlzaGVkICovCisJCWR1a19fZW1pdF9qdW1w KGNvbXBfY3R4LCBwY19sMSk7ICAvKiBqdW1wIHRvIG5leHQgbG9vcCwgdXNpbmcgcmVnX3YzNF9p dGVyIGFzIGl0ZXJhdGVkIHZhbHVlICovCisKKwkJcGNfbDUgPSBkdWtfX2dldF9jdXJyZW50X3Bj KGNvbXBfY3R4KTsKKworCQkvKiBYWFg6IHNpbmNlIHRoZSBlbnVtZXJhdG9yIG1heSBiZSBhIG1l bW9yeSBleHBlbnNpdmUgb2JqZWN0LAorCQkgKiBwZXJoYXBzIGNsZWFyIGl0IGV4cGxpY2l0bHkg aGVyZT8gIElmIHNvLCBicmVhayBqdW1wIG11c3QKKwkJICogZ28gdGhyb3VnaCB0aGlzIGNsZWFy aW5nIG9wZXJhdGlvbi4KKwkJICovCisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInBhdGNoaW5n IGp1bXBzOiBqdW1wdG9fbDI6ICVsZC0+JWxkLCBqdW1wdG9fbDM6ICVsZC0+JWxkLCAiCisJCSAg ICAgICAgICAgICAgICAgICAgICJqdW1wdG9fbDQ6ICVsZC0+JWxkLCBqdW1wdG9fbDU6ICVsZC0+ JWxkLCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJicmVhazogJWxkLT4lbGQsIGNvbnRpbnVl OiAlbGQtPiVsZCIsCisJCQkgICAgICAgICAgICAgKGxvbmcpIHBjX2p1bXB0b19sMiwgKGxvbmcp IHBjX2wyLCAobG9uZykgcGNfanVtcHRvX2wzLCAobG9uZykgcGNfbDMsCisJCQkgICAgICAgICAg ICAgKGxvbmcpIHBjX2p1bXB0b19sNCwgKGxvbmcpIHBjX2w0LCAobG9uZykgcGNfanVtcHRvX2w1 LCAobG9uZykgcGNfbDUsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSAocGNfbGFiZWxf c2l0ZSArIDEpLCAobG9uZykgcGNfbDUsIChsb25nKSAocGNfbGFiZWxfc2l0ZSArIDIpLCAobG9u ZykgcGNfbDQpKTsKKworCQlkdWtfX3BhdGNoX2p1bXAoY29tcF9jdHgsIHBjX2p1bXB0b19sMiwg cGNfbDIpOworCQlkdWtfX3BhdGNoX2p1bXAoY29tcF9jdHgsIHBjX2p1bXB0b19sMywgcGNfbDMp OworCQlkdWtfX3BhdGNoX2p1bXAoY29tcF9jdHgsIHBjX2p1bXB0b19sNCwgcGNfbDQpOworCQlk dWtfX3BhdGNoX2p1bXAoY29tcF9jdHgsIHBjX2p1bXB0b19sNSwgcGNfbDUpOworCQlkdWtfX3Bh dGNoX2p1bXAoY29tcF9jdHgsIHBjX2xhYmVsX3NpdGUgKyAxLCBwY19sNSk7ICAvKiBicmVhayBq dW1wICovCisJCWR1a19fcGF0Y2hfanVtcChjb21wX2N0eCwgcGNfbGFiZWxfc2l0ZSArIDIsIHBj X2w0KTsgIC8qIGNvbnRpbnVlIGp1bXAgKi8KKwl9CisJZ290byBmaW5pc2hlZDsKKworIGZpbmlz aGVkOgorCURVS19EREQoRFVLX0RERFBSSU5UKCJlbmQgcGFyc2luZyBhIGZvci9mb3ItaW4gc3Rh dGVtZW50IikpOworCXJldHVybjsKKworIHN5bnRheF9lcnJvcjoKKwlEVUtfRVJST1JfU1lOVEFY KHRociwgRFVLX1NUUl9JTlZBTElEX0ZPUik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOwor fQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3BhcnNlX3N3aXRjaF9zdG10KGR1a19jb21waWxlcl9j dHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMsIGR1a19pbnRfdCBwY19sYWJlbF9zaXRlKSB7 CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisJZHVrX3JlZ2NvbnN0X3QgdGVt cF9hdF9sb29wOworCWR1a19yZWdjb25zdF90IHJjX3N3aXRjaDsgICAgLyogcmVnL2NvbnN0IGZv ciBzd2l0Y2ggdmFsdWUgKi8KKwlkdWtfcmVnY29uc3RfdCByY19jYXNlOyAgICAgIC8qIHJlZy9j b25zdCBmb3IgY2FzZSB2YWx1ZSAqLworCWR1a19yZWdjb25zdF90IHJlZ190ZW1wOyAgICAgLyog Z2VuZXJhbCB0ZW1wIHJlZ2lzdGVyICovCisJZHVrX2ludF90IHBjX3ByZXZjYXNlID0gLTE7CisJ ZHVrX2ludF90IHBjX3ByZXZzdG10ID0gLTE7CisJZHVrX2ludF90IHBjX2RlZmF1bHQgPSAtMTsg ICAvKiAtMSA9PSBub3Qgc2V0LCAtMiA9PSBwZW5kaW5nIChuZXh0IHN0YXRlbWVudCBsaXN0KSAq LworCisJLyogTm90ZTogbmVnYXRpdmUgcGMgdmFsdWVzIGFyZSBpZ25vcmVkIHdoZW4gcGF0Y2hp bmcganVtcHMsIHNvIG5vIGV4cGxpY2l0IGNoZWNrcyBuZWVkZWQgKi8KKworCS8qCisJICogIFN3 aXRjaCBpcyBwcmV0dHkgY29tcGxpY2F0ZWQgYmVjYXVzZSBvZiBzZXZlcmFsIGNvbmZsaWN0aW5n IGNvbmNlcm5zOgorCSAqCisJICogICAgLSBXYW50IHRvIGdlbmVyYXRlIGNvZGUgd2l0aG91dCBh biBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24sCisJICogICAgICBpLmUuLCBpbiBvbmUgZ28K KwkgKgorCSAqICAgIC0gQ2FzZSBzZWxlY3RvcnMgYXJlIGV4cHJlc3Npb25zLCBub3QgdmFsdWVz LCBhbmQgbWF5IHRodXMgZS5nLiB0aHJvdworCSAqICAgICAgZXhjZXB0aW9ucyAod2hpY2ggY2F1 c2VzIGV2YWx1YXRpb24gb3JkZXIgY29uY2VybnMpCisJICoKKwkgKiAgICAtIEV2YWx1YXRpb24g c2VtYW50aWNzIG9mIGNhc2Ugc2VsZWN0b3JzIGFuZCBkZWZhdWx0IGNsYXVzZSBuZWVkIHRvIGJl CisJICogICAgICBjYXJlZnVsbHkgaW1wbGVtZW50ZWQgdG8gcHJvdmlkZSBjb3JyZWN0IGJlaGF2 aW9yIGV2ZW4gd2l0aCBjYXNlIHZhbHVlCisJICogICAgICBzaWRlIGVmZmVjdHMKKwkgKgorCSAq ICAgIC0gRmFsbCB0aHJvdWdoIGNhc2UgYW5kIGRlZmF1bHQgY2xhdXNlczsgYXZvaWRpbmcgZGVh ZCBKVU1QcyBpZiBjYXNlCisJICogICAgICBlbmRzIHdpdGggYW4gdW5jb25kaXRpb25hbCBqdW1w IChhIGJyZWFrIG9yIGEgY29udGludWUpCisJICoKKwkgKiAgICAtIFRoZSBzYW1lIGNhc2UgdmFs dWUgbWF5IG9jY3VyIG11bHRpcGxlIHRpbWVzLCBidXQgZXZhbHVhdGlvbiBydWxlcworCSAqICAg ICAgb25seSBwcm9jZXNzIHRoZSBmaXJzdCBtYXRjaCBiZWZvcmUgc3dpdGNoaW5nIHRvIGEgInBy b3BhZ2F0aW9uIiBtb2RlCisJICogICAgICB3aGVyZSBjYXNlIHZhbHVlcyBhcmUgbm8gbG9uZ2Vy IGV2YWx1YXRlZAorCSAqCisJICogIFNlZSBFNSBTZWN0aW9uIDEyLjExLiAgQWxzbyBzZWUgZG9j L2NvbXBpbGVyLnJzdCBmb3IgY29tcGlsYXRpb24KKwkgKiAgZGlzY3Vzc2lvbi4KKwkgKi8KKwor CWR1a19fYWR2YW5jZShjb21wX2N0eCk7CisJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwg RFVLX1RPS19MUEFSRU4pOworCXJjX3N3aXRjaCA9IGR1a19fZXhwcnRvcF90b3JlZ2NvbnN0KGNv bXBfY3R4LCByZXMsIERVS19fQlBfRk9SX0VYUFIgLypyYnBfZmxhZ3MqLyk7CisJZHVrX19hZHZh bmNlX2V4cGVjdChjb21wX2N0eCwgRFVLX1RPS19SUEFSRU4pOyAgLyogUmVnRXhwIG1vZGUgZG9l cyBub3QgbWF0dGVyLiAqLworCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tf TENVUkxZKTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJzd2l0Y2ggdmFsdWUgaW4gcmVnaXN0 ZXIgJWxkIiwgKGxvbmcpIHJjX3N3aXRjaCkpOworCisJdGVtcF9hdF9sb29wID0gRFVLX19HRVRU RU1QKGNvbXBfY3R4KTsKKworCWZvciAoOzspIHsKKwkJZHVrX2ludF90IG51bV9zdG10czsKKwkJ ZHVrX3NtYWxsX3VpbnRfdCB0b2s7CisKKwkJLyogc3VmZmljaWVudCBmb3Iga2VlcGluZyB0ZW1w IHJlZyBudW1iZXJzIGluIGNoZWNrICovCisJCURVS19fU0VUVEVNUChjb21wX2N0eCwgdGVtcF9h dF9sb29wKTsKKworCQlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX1JDVVJM WSkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiAgUGFyc2UgYSBjYXNlIG9yIGRlZmF1 bHQgY2xhdXNlLgorCQkgKi8KKworCQlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtf VE9LX0NBU0UpIHsKKwkJCS8qCisJCQkgKiAgQ2FzZSBjbGF1c2UuCisJCQkgKgorCQkJICogIE5v dGU6IGNhbm5vdCB1c2UgcmVnX2Nhc2UgYXMgYSB0ZW1wIHJlZ2lzdGVyIChmb3IgU0VRIHRhcmdl dCkKKwkJCSAqICBiZWNhdXNlIGl0IG1heSBiZSBhIGNvbnN0YW50LgorCQkJICovCisKKwkJCWR1 a19fcGF0Y2hfanVtcF9oZXJlKGNvbXBfY3R4LCBwY19wcmV2Y2FzZSk7ICAvKiBjaGFpbiBqdW1w cyBmb3IgY2FzZQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIGV2YWx1YXRpb24gYW5kIGNoZWNraW5nCisJCQkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkJCWR1a19fYWR2YW5jZShjb21wX2N0eCk7 CisJCQlyY19jYXNlID0gZHVrX19leHBydG9wX3RvcmVnY29uc3QoY29tcF9jdHgsIHJlcywgRFVL X19CUF9GT1JfRVhQUiAvKnJicF9mbGFncyovKTsKKwkJCWR1a19fYWR2YW5jZV9leHBlY3QoY29t cF9jdHgsIERVS19UT0tfQ09MT04pOworCisJCQlyZWdfdGVtcCA9IERVS19fQUxMT0NURU1QKGNv bXBfY3R4KTsKKwkJCWR1a19fZW1pdF9hX2JfYyhjb21wX2N0eCwKKwkJCSAgICAgICAgICAgICAg ICBEVUtfT1BfU0VRIHwgRFVLX19FTUlUX0ZMQUdfQkNfUkVHQ09OU1QsCisJCQkgICAgICAgICAg ICAgICAgcmVnX3RlbXAsCisJCQkgICAgICAgICAgICAgICAgcmNfc3dpdGNoLAorCQkJICAgICAg ICAgICAgICAgIHJjX2Nhc2UpOworCQkJZHVrX19lbWl0X2lmX3RydWVfc2tpcChjb21wX2N0eCwg cmVnX3RlbXApOworCisJCQkvKiBqdW1wIHRvIG5leHQgY2FzZSBjbGF1c2UgKi8KKwkJCXBjX3By ZXZjYXNlID0gZHVrX19lbWl0X2p1bXBfZW1wdHkoY29tcF9jdHgpOyAgLyogbm8gbWF0Y2gsIG5l eHQgY2FzZSAqLworCisJCQkvKiBzdGF0ZW1lbnRzIGdvIGhlcmUgKGlmIGFueSkgb24gbmV4dCBs b29wICovCisJCX0gZWxzZSBpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX0RF RkFVTFQpIHsKKwkJCS8qCisJCQkgKiAgRGVmYXVsdCBjbGF1c2UuCisJCQkgKi8KKworCQkJaWYg KHBjX2RlZmF1bHQgPj0gMCkgeworCQkJCWdvdG8gc3ludGF4X2Vycm9yOworCQkJfQorCQkJZHVr X19hZHZhbmNlKGNvbXBfY3R4KTsKKwkJCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERV S19UT0tfQ09MT04pOworCisJCQkvKiBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9zdmFhcmFs YS9kdWt0YXBlL2lzc3Vlcy8xNTU6CisJCQkgKiBJZiAnZGVmYXVsdCcgaXMgZmlyc3QgY2xhdXNl IChkZXRlY3RlZCBieSBwY19wcmV2Y2FzZSA8IDApCisJCQkgKiB3ZSBuZWVkIHRvIGVuc3VyZSB3 ZSBzdGF5IGluIHRoZSBtYXRjaGluZyBjaGFpbi4KKwkJCSAqLworCQkJaWYgKHBjX3ByZXZjYXNl IDwgMCkgeworCQkJCURVS19ERChEVUtfRERQUklOVCgiZGVmYXVsdCBjbGF1c2UgaXMgZmlyc3Qs IGVtaXQgcHJldmNhc2UganVtcCIpKTsKKwkJCQlwY19wcmV2Y2FzZSA9IGR1a19fZW1pdF9qdW1w X2VtcHR5KGNvbXBfY3R4KTsKKwkJCX0KKworCQkJLyogZGVmYXVsdCBjbGF1c2UgbWF0Y2hlcyBu ZXh0IHN0YXRlbWVudCBsaXN0IChpZiBhbnkpICovCisJCQlwY19kZWZhdWx0ID0gLTI7CisJCX0g ZWxzZSB7CisJCQkvKiBDb2RlIGlzIG5vdCBhY2NlcHRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhc2Uv ZGVmYXVsdCBjbGF1c2UgKi8KKwkJCWdvdG8gc3ludGF4X2Vycm9yOworCQl9CisKKwkJLyoKKwkJ ICogIFBhcnNlIGNvZGUgYWZ0ZXIgdGhlIGNsYXVzZS4gIFBvc3NpYmxlIHRlcm1pbmF0b3JzIGFy ZQorCQkgKiAgJ2Nhc2UnLCAnZGVmYXVsdCcsIGFuZCAnfScuCisJCSAqCisJCSAqICBOb3RlIHRo YXQgdGhlcmUgbWF5IGJlIG5vIGNvZGUgYXQgYWxsLCBub3QgZXZlbiBhbiBlbXB0eSBzdGF0ZW1l bnQsCisJCSAqICBiZXR3ZWVuIGNhc2UgY2xhdXNlcy4gIFRoaXMgbXVzdCBiZSBoYW5kbGVkIGp1 c3QgbGlrZSBhbiBlbXB0eSBzdGF0ZW1lbnQKKwkJICogIChvbWl0dGluZyBzZWVtaW5nbHkgcG9p bnRsZXNzIEpVTVBzKSwgdG8gYXZvaWQgc2l0dWF0aW9ucyBsaWtlCisJCSAqICB0ZXN0LWJ1Zy1j YXNlLWZhbGx0aHJvdWdoLmpzLgorCQkgKi8KKworCQludW1fc3RtdHMgPSAwOworCQlpZiAocGNf ZGVmYXVsdCA9PSAtMikgeworCQkJcGNfZGVmYXVsdCA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29t cF9jdHgpOworCQl9CisKKwkJLyogTm90ZTogdGhpcyBpcyBjb3JyZWN0IGV2ZW4gZm9yIGRlZmF1 bHQgY2xhdXNlIHN0YXRlbWVudHM6CisJCSAqIHRoZXkgcGFydGljaXBhdGUgaW4gJ2ZhbGwtdGhy b3VnaCcgYmVoYXZpb3IgZXZlbiBpZiB0aGUKKwkJICogZGVmYXVsdCBjbGF1c2UgaXMgaW4gdGhl IG1pZGRsZS4KKwkJICovCisJCWR1a19fcGF0Y2hfanVtcF9oZXJlKGNvbXBfY3R4LCBwY19wcmV2 c3RtdCk7ICAvKiBjaGFpbiBqdW1wcyBmb3IgJ2ZhbGwtdGhyb3VnaCcKKwkJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFmdGVyIGEgY2FzZSBtYXRjaGVz LgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisK KwkJZm9yICg7OykgeworCQkJdG9rID0gY29tcF9jdHgtPmN1cnJfdG9rZW4udDsKKwkJCWlmICh0 b2sgPT0gRFVLX1RPS19DQVNFIHx8IHRvayA9PSBEVUtfVE9LX0RFRkFVTFQgfHwKKwkJCSAgICB0 b2sgPT0gRFVLX1RPS19SQ1VSTFkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW51bV9zdG10cysr OworCQkJZHVrX19wYXJzZV9zdG10KGNvbXBfY3R4LCByZXMsIDAgLyphbGxvd19zb3VyY2VfZWxl bSovKTsKKwkJfQorCisJCS8qIGZhbGwtdGhyb3VnaCBqdW1wIHRvIG5leHQgY29kZSBvZiBuZXh0 IGNhc2UgKGJhY2twYXRjaGVkKSAqLworCQlwY19wcmV2c3RtdCA9IGR1a19fZW1pdF9qdW1wX2Vt cHR5KGNvbXBfY3R4KTsKKworCQkvKiBYWFg6IHdvdWxkIGJlIG5pY2UgdG8gb21pdCB0aGlzIGp1 bXAgd2hlbiB0aGUganVtcCBpcyBub3QKKwkJICogcmVhY2hhYmxlLCBhdCBsZWFzdCBpbiB0aGUg b2J2aW91cyBjYXNlcyAoc3VjaCBhcyB0aGUgY2FzZQorCQkgKiBlbmRpbmcgd2l0aCBhICdicmVh aycuCisJCSAqCisJCSAqIFBlcmhhcHMgZHVrX19wYXJzZV9zdG10KCkgY291bGQgcHJvdmlkZSBz b21lIGluZm8gb24gd2hldGhlcgorCQkgKiB0aGUgc3RhdGVtZW50IGlzIGEgImRlYWQgZW5kIj8K KwkJICoKKwkJICogSWYgaW1wbGVtZW50ZWQsIGp1c3Qgc2V0IHBjX3ByZXZzdG10IHRvIC0xIHdo ZW4gbm90IG5lZWRlZC4KKwkJICovCisJfQorCisJRFVLX0FTU0VSVChjb21wX2N0eC0+Y3Vycl90 b2tlbi50ID09IERVS19UT0tfUkNVUkxZKTsKKwljb21wX2N0eC0+Y3Vycl9mdW5jLmFsbG93X3Jl Z2V4cF9pbl9hZHYgPSAxOworCWR1a19fYWR2YW5jZShjb21wX2N0eCk7ICAvKiBBbGxvdyBSZWdF eHAgYXMgcGFydCBvZiBuZXh0IHN0bXQuICovCisKKwkvKiBkZWZhdWx0IGNhc2UgY29udHJvbCBm bG93IHBhdGNodXA7IG5vdGUgdGhhdCBpZiBwY19wcmV2Y2FzZSA8IDAKKwkgKiAoaS5lLiBubyBj YXNlIGNsYXVzZXMpLCBjb250cm9sIGVudGVycyBkZWZhdWx0IGNhc2UgYXV0b21hdGljYWxseS4K KwkgKi8KKwlpZiAocGNfZGVmYXVsdCA+PSAwKSB7CisJCS8qIGRlZmF1bHQgY2FzZSBleGlzdHM6 IGdvIHRoZXJlIGlmIG5vIGNhc2UgbWF0Y2hlcyAqLworCQlkdWtfX3BhdGNoX2p1bXAoY29tcF9j dHgsIHBjX3ByZXZjYXNlLCBwY19kZWZhdWx0KTsKKwl9IGVsc2UgeworCQkvKiBkZWZhdWx0IGNh c2UgZG9lcyBub3QgZXhpc3QsIG9yIG5vIHN0YXRlbWVudHMgcHJlc2VudAorCQkgKiBhZnRlciBk ZWZhdWx0IGNhc2U6IGZpbmlzaCBjYXNlIGV2YWx1YXRpb24KKwkJICovCisJCWR1a19fcGF0Y2hf anVtcF9oZXJlKGNvbXBfY3R4LCBwY19wcmV2Y2FzZSk7CisJfQorCisJLyogZmFsbC10aHJvdWdo IGNvbnRyb2wgZmxvdyBwYXRjaHVwOyBub3RlIHRoYXQgcGNfcHJldnN0bXQgbWF5IGJlCisJICog PCAwIChpLmUuIG5vIGNhc2UgY2xhdXNlcyksIGluIHdoaWNoIGNhc2UgdGhpcyBpcyBhIG5vLW9w LgorCSAqLworCWR1a19fcGF0Y2hfanVtcF9oZXJlKGNvbXBfY3R4LCBwY19wcmV2c3RtdCk7CisK KwkvKiBjb250aW51ZSBqdW1wIG5vdCBwYXRjaGVkLCBhbiBJTlZBTElEIG9wY29kZSByZW1haW5z IHRoZXJlICovCisJZHVrX19wYXRjaF9qdW1wX2hlcmUoY29tcF9jdHgsIHBjX2xhYmVsX3NpdGUg KyAxKTsgIC8qIGJyZWFrIGp1bXAgKi8KKworCS8qIE5vdGU6ICdmYXN0JyBicmVha3Mgd2lsbCBq dW1wIHRvIHBjX2xhYmVsX3NpdGUgKyAxLCB3aGljaCB3aWxsCisJICogdGhlbiBqdW1wIGhlcmUu ICBUaGUgZG91YmxlIGp1bXAgd2lsbCBiZSBlbGltaW5hdGVkIGJ5IGEKKwkgKiBwZWVwaG9sZSBw YXNzLCByZXN1bHRpbmcgaW4gYW4gb3B0aW1hbCBqdW1wIGhlcmUuICBUaGUgbGFiZWwKKwkgKiBz aXRlIGp1bXBzIHdpbGwgcmVtYWluIGluIGJ5dGVjb2RlIGFuZCB3aWxsIHdhc3RlIGNvZGUgc2l6 ZS4KKwkgKi8KKworCXJldHVybjsKKworIHN5bnRheF9lcnJvcjoKKwlEVUtfRVJST1JfU1lOVEFY KHRociwgRFVLX1NUUl9JTlZBTElEX1NXSVRDSCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjsp OworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3BhcnNlX2lmX3N0bXQoZHVrX2NvbXBpbGVyX2N0 eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcykgeworCWR1a19yZWdjb25zdF90IHRlbXBfcmVz ZXQ7CisJZHVrX3JlZ2NvbnN0X3QgcmNfY29uZDsKKwlkdWtfaW50X3QgcGNfanVtcF9mYWxzZTsK KworCURVS19EREQoRFVLX0RERFBSSU5UKCJiZWdpbiBwYXJzaW5nIGlmIHN0YXRlbWVudCIpKTsK KworCXRlbXBfcmVzZXQgPSBEVUtfX0dFVFRFTVAoY29tcF9jdHgpOworCisJZHVrX19hZHZhbmNl KGNvbXBfY3R4KTsgIC8qIGVhdCAnaWYnICovCisJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0 eCwgRFVLX1RPS19MUEFSRU4pOworCisJcmNfY29uZCA9IGR1a19fZXhwcnRvcF90b3JlZ2NvbnN0 KGNvbXBfY3R4LCByZXMsIERVS19fQlBfRk9SX0VYUFIgLypyYnBfZmxhZ3MqLyk7CisJZHVrX19l bWl0X2lmX3RydWVfc2tpcChjb21wX2N0eCwgcmNfY29uZCk7CisJcGNfanVtcF9mYWxzZSA9IGR1 a19fZW1pdF9qdW1wX2VtcHR5KGNvbXBfY3R4KTsgIC8qIGp1bXAgdG8gZW5kIG9yIGVsc2UgcGFy dCAqLworCURVS19fU0VUVEVNUChjb21wX2N0eCwgdGVtcF9yZXNldCk7CisKKwljb21wX2N0eC0+ Y3Vycl9mdW5jLmFsbG93X3JlZ2V4cF9pbl9hZHYgPSAxOworCWR1a19fYWR2YW5jZV9leHBlY3Qo Y29tcF9jdHgsIERVS19UT0tfUlBBUkVOKTsgIC8qIEFsbG93IFJlZ0V4cCBhcyBwYXJ0IG9mIG5l eHQgc3RtdC4gKi8KKworCWR1a19fcGFyc2Vfc3RtdChjb21wX2N0eCwgcmVzLCAwIC8qYWxsb3df c291cmNlX2VsZW0qLyk7CisKKwkvKiBUaGUgJ2Vsc2UnIGFtYmlndWl0eSBpcyByZXNvbHZlZCBi eSAnZWxzZScgYmluZGluZyB0byB0aGUgaW5uZXJtb3N0CisJICogY29uc3RydWN0LCBzbyBncmVl ZHkgbWF0Y2hpbmcgaXMgY29ycmVjdCBoZXJlLgorCSAqLworCisJaWYgKGNvbXBfY3R4LT5jdXJy X3Rva2VuLnQgPT0gRFVLX1RPS19FTFNFKSB7CisJCWR1a19pbnRfdCBwY19qdW1wX2VuZDsKKwor CQlEVUtfREREKERVS19ERERQUklOVCgiaWYgaGFzIGVsc2UgcGFydCIpKTsKKworCQlkdWtfX2Fk dmFuY2UoY29tcF9jdHgpOworCisJCXBjX2p1bXBfZW5kID0gZHVrX19lbWl0X2p1bXBfZW1wdHko Y29tcF9jdHgpOyAgLyoganVtcCBmcm9tIHRydWUgcGFydCB0byBlbmQgKi8KKwkJZHVrX19wYXRj aF9qdW1wX2hlcmUoY29tcF9jdHgsIHBjX2p1bXBfZmFsc2UpOworCisJCWR1a19fcGFyc2Vfc3Rt dChjb21wX2N0eCwgcmVzLCAwIC8qYWxsb3dfc291cmNlX2VsZW0qLyk7CisKKwkJZHVrX19wYXRj aF9qdW1wX2hlcmUoY29tcF9jdHgsIHBjX2p1bXBfZW5kKTsKKwl9IGVsc2UgeworCQlEVUtfRERE KERVS19ERERQUklOVCgiaWYgZG9lcyBub3QgaGF2ZSBlbHNlIHBhcnQiKSk7CisKKwkJZHVrX19w YXRjaF9qdW1wX2hlcmUoY29tcF9jdHgsIHBjX2p1bXBfZmFsc2UpOworCX0KKworCURVS19EREQo RFVLX0RERFBSSU5UKCJlbmQgcGFyc2luZyBpZiBzdGF0ZW1lbnQiKSk7Cit9CisKK0RVS19MT0NB TCB2b2lkIGR1a19fcGFyc2VfZG9fc3RtdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVr X2l2YWx1ZSAqcmVzLCBkdWtfaW50X3QgcGNfbGFiZWxfc2l0ZSkgeworCWR1a19yZWdjb25zdF90 IHJjX2NvbmQ7CisJZHVrX2ludF90IHBjX3N0YXJ0OworCisJRFVLX0RERChEVUtfREREUFJJTlQo ImJlZ2luIHBhcnNpbmcgZG8gc3RhdGVtZW50IikpOworCisJZHVrX19hZHZhbmNlKGNvbXBfY3R4 KTsgIC8qIEVhdCAnZG8nOyBhbGxvdyBSZWdFeHAgYXMgcGFydCBvZiBuZXh0IHN0bXQuICovCisK KwlwY19zdGFydCA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpOworCWR1a19fcGFyc2Vf c3RtdChjb21wX2N0eCwgcmVzLCAwIC8qYWxsb3dfc291cmNlX2VsZW0qLyk7CisJZHVrX19wYXRj aF9qdW1wX2hlcmUoY29tcF9jdHgsIHBjX2xhYmVsX3NpdGUgKyAyKTsgIC8qIGNvbnRpbnVlIGp1 bXAgKi8KKworCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfV0hJTEUpOwor CWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfTFBBUkVOKTsKKworCXJjX2Nv bmQgPSBkdWtfX2V4cHJ0b3BfdG9yZWdjb25zdChjb21wX2N0eCwgcmVzLCBEVUtfX0JQX0ZPUl9F WFBSIC8qcmJwX2ZsYWdzKi8pOworCWR1a19fZW1pdF9pZl9mYWxzZV9za2lwKGNvbXBfY3R4LCBy Y19jb25kKTsKKwlkdWtfX2VtaXRfanVtcChjb21wX2N0eCwgcGNfc3RhcnQpOworCS8qIG5vIG5l ZWQgdG8gcmVzZXQgdGVtcHMsIGFzIHdlJ3JlIGZpbmlzaGVkIGVtaXR0aW5nIGNvZGUgKi8KKwor CWNvbXBfY3R4LT5jdXJyX2Z1bmMuYWxsb3dfcmVnZXhwX2luX2FkdiA9IDE7ICAvKiBBbGxvdyBS ZWdFeHAgYXMgcGFydCBvZiBuZXh0IHN0bXQuICovCisJZHVrX19hZHZhbmNlX2V4cGVjdChjb21w X2N0eCwgRFVLX1RPS19SUEFSRU4pOworCisJZHVrX19wYXRjaF9qdW1wX2hlcmUoY29tcF9jdHgs IHBjX2xhYmVsX3NpdGUgKyAxKTsgIC8qIGJyZWFrIGp1bXAgKi8KKworCURVS19EREQoRFVLX0RE RFBSSU5UKCJlbmQgcGFyc2luZyBkbyBzdGF0ZW1lbnQiKSk7Cit9CisKK0RVS19MT0NBTCB2b2lk IGR1a19fcGFyc2Vfd2hpbGVfc3RtdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2 YWx1ZSAqcmVzLCBkdWtfaW50X3QgcGNfbGFiZWxfc2l0ZSkgeworCWR1a19yZWdjb25zdF90IHRl bXBfcmVzZXQ7CisJZHVrX3JlZ2NvbnN0X3QgcmNfY29uZDsKKwlkdWtfaW50X3QgcGNfc3RhcnQ7 CisJZHVrX2ludF90IHBjX2p1bXBfZmFsc2U7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiYmVn aW4gcGFyc2luZyB3aGlsZSBzdGF0ZW1lbnQiKSk7CisKKwl0ZW1wX3Jlc2V0ID0gRFVLX19HRVRU RU1QKGNvbXBfY3R4KTsKKworCWR1a19fYWR2YW5jZShjb21wX2N0eCk7ICAvKiBlYXQgJ3doaWxl JyAqLworCisJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwgRFVLX1RPS19MUEFSRU4pOwor CisJcGNfc3RhcnQgPSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsKKwlkdWtfX3BhdGNo X2p1bXBfaGVyZShjb21wX2N0eCwgcGNfbGFiZWxfc2l0ZSArIDIpOyAgLyogY29udGludWUganVt cCAqLworCisJcmNfY29uZCA9IGR1a19fZXhwcnRvcF90b3JlZ2NvbnN0KGNvbXBfY3R4LCByZXMs IERVS19fQlBfRk9SX0VYUFIgLypyYnBfZmxhZ3MqLyk7CisJZHVrX19lbWl0X2lmX3RydWVfc2tp cChjb21wX2N0eCwgcmNfY29uZCk7CisJcGNfanVtcF9mYWxzZSA9IGR1a19fZW1pdF9qdW1wX2Vt cHR5KGNvbXBfY3R4KTsKKwlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHRlbXBfcmVzZXQpOworCisJ Y29tcF9jdHgtPmN1cnJfZnVuYy5hbGxvd19yZWdleHBfaW5fYWR2ID0gMTsKKwlkdWtfX2FkdmFu Y2VfZXhwZWN0KGNvbXBfY3R4LCBEVUtfVE9LX1JQQVJFTik7ICAvKiBBbGxvdyBSZWdFeHAgYXMg cGFydCBvZiBuZXh0IHN0bXQuICovCisKKwlkdWtfX3BhcnNlX3N0bXQoY29tcF9jdHgsIHJlcywg MCAvKmFsbG93X3NvdXJjZV9lbGVtKi8pOworCWR1a19fZW1pdF9qdW1wKGNvbXBfY3R4LCBwY19z dGFydCk7CisKKwlkdWtfX3BhdGNoX2p1bXBfaGVyZShjb21wX2N0eCwgcGNfanVtcF9mYWxzZSk7 CisJZHVrX19wYXRjaF9qdW1wX2hlcmUoY29tcF9jdHgsIHBjX2xhYmVsX3NpdGUgKyAxKTsgIC8q IGJyZWFrIGp1bXAgKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJlbmQgcGFyc2luZyB3aGls ZSBzdGF0ZW1lbnQiKSk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fcGFyc2VfYnJlYWtfb3Jf Y29udGludWVfc3RtdChkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVz KSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisJZHVrX2Jvb2xfdCBpc19i cmVhayA9IChjb21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfQlJFQUspOworCWR1a19p bnRfdCBsYWJlbF9pZDsKKwlkdWtfaW50X3QgbGFiZWxfY2F0Y2hfZGVwdGg7CisJZHVrX2ludF90 IGxhYmVsX3BjOyAgLyogcG9pbnRzIHRvIExBQkVMOyBwYysxID0ganVtcCBzaXRlIGZvciBicmVh azsgcGMrMiA9IGp1bXAgc2l0ZSBmb3IgY29udGludWUgKi8KKwlkdWtfYm9vbF90IGxhYmVsX2lz X2Nsb3Nlc3Q7CisKKwlEVUtfVU5SRUYocmVzKTsKKworCWR1a19fYWR2YW5jZShjb21wX2N0eCk7 ICAvKiBlYXQgJ2JyZWFrJyBvciAnY29udGludWUnICovCisKKwlpZiAoY29tcF9jdHgtPmN1cnJf dG9rZW4udCA9PSBEVUtfVE9LX1NFTUlDT0xPTiB8fCAgLyogZXhwbGljaXQgc2VtaSBmb2xsb3dz ICovCisJICAgIGNvbXBfY3R4LT5jdXJyX3Rva2VuLmxpbmV0ZXJtIHx8ICAgICAgICAgICAgICAg IC8qIGF1dG9tYXRpYyBzZW1pIHdpbGwgYmUgaW5zZXJ0ZWQgKi8KKwkgICAgY29tcF9jdHgtPmN1 cnJfdG9rZW4uYWxsb3dfYXV0b19zZW1pKSB7ICAgICAgICAgLyogYXV0b21hdGljIHNlbWkgd2ls bCBiZSBpbnNlcnRlZCAqLworCQkvKiBicmVhay9jb250aW51ZSB3aXRob3V0IGxhYmVsICovCisK KwkJZHVrX19sb29rdXBfYWN0aXZlX2xhYmVsKGNvbXBfY3R4LCBEVUtfSFRIUkVBRF9TVFJJTkdf RU1QVFlfU1RSSU5HKHRociksIGlzX2JyZWFrLCAmbGFiZWxfaWQsICZsYWJlbF9jYXRjaF9kZXB0 aCwgJmxhYmVsX3BjLCAmbGFiZWxfaXNfY2xvc2VzdCk7CisJfSBlbHNlIGlmIChjb21wX2N0eC0+ Y3Vycl90b2tlbi50ID09IERVS19UT0tfSURFTlRJRklFUikgeworCQkvKiBicmVhay9jb250aW51 ZSB3aXRoIGxhYmVsIChsYWJlbCBjYW5ub3QgYmUgYSByZXNlcnZlZCB3b3JkLCBwcm9kdWN0aW9u IGlzICdJZGVudGlmaWVyJyAqLworCQlEVUtfQVNTRVJUKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnN0 cjEgIT0gTlVMTCk7CisJCWR1a19fbG9va3VwX2FjdGl2ZV9sYWJlbChjb21wX2N0eCwgY29tcF9j dHgtPmN1cnJfdG9rZW4uc3RyMSwgaXNfYnJlYWssICZsYWJlbF9pZCwgJmxhYmVsX2NhdGNoX2Rl cHRoLCAmbGFiZWxfcGMsICZsYWJlbF9pc19jbG9zZXN0KTsKKwkJZHVrX19hZHZhbmNlKGNvbXBf Y3R4KTsKKwl9IGVsc2UgeworCQlEVUtfRVJST1JfU1lOVEFYKHRociwgRFVLX1NUUl9JTlZBTElE X0JSRUFLX0NPTlRfTEFCRUwpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJfQorCisJ LyogVXNlIGEgZmFzdCBicmVhay9jb250aW51ZSB3aGVuIHBvc3NpYmxlLiAgQSBmYXN0IGJyZWFr L2NvbnRpbnVlIGlzCisJICoganVzdCBhIGp1bXAgdG8gdGhlIExBQkVMIGJyZWFrL2NvbnRpbnVl IGp1bXAgc2xvdCwgd2hpY2ggdGhlbiBqdW1wcworCSAqIHRvIGFuIGFwcHJvcHJpYXRlIHBsYWNl IChmb3IgYnJlYWssIGdvaW5nIHRocm91Z2ggRU5ETEFCRUwgY29ycmVjdGx5KS4KKwkgKiBUaGUg cGVlcGhvbGUgb3B0aW1pemVyIHdpbGwgb3B0aW1pemUgdGhlIGp1bXAgdG8gYSBkaXJlY3Qgb25l LgorCSAqLworCisJaWYgKGxhYmVsX2NhdGNoX2RlcHRoID09IGNvbXBfY3R4LT5jdXJyX2Z1bmMu Y2F0Y2hfZGVwdGggJiYKKwkgICAgbGFiZWxfaXNfY2xvc2VzdCkgeworCQlEVUtfREREKERVS19E RERQUklOVCgiYnJlYWsvY29udGludWU6IGlzX2JyZWFrPSVsZCwgbGFiZWxfaWQ9JWxkLCBsYWJl bF9pc19jbG9zZXN0PSVsZCwgIgorCQkgICAgICAgICAgICAgICAgICAgICAibGFiZWxfY2F0Y2hf ZGVwdGg9JWxkLCBjYXRjaF9kZXB0aD0lbGQgIgorCQkgICAgICAgICAgICAgICAgICAgICAiLT4g dXNlIGZhc3QgdmFyaWFudCAoZGlyZWN0IGp1bXApIiwKKwkJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIGlzX2JyZWFrLCAobG9uZykgbGFiZWxfaWQsIChsb25nKSBsYWJlbF9pc19jbG9zZXN0 LAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgbGFiZWxfY2F0Y2hfZGVwdGgsIChsb25n KSBjb21wX2N0eC0+Y3Vycl9mdW5jLmNhdGNoX2RlcHRoKSk7CisKKwkJZHVrX19lbWl0X2p1bXAo Y29tcF9jdHgsIGxhYmVsX3BjICsgKGlzX2JyZWFrID8gMSA6IDIpKTsKKwl9IGVsc2UgeworCQlE VUtfREREKERVS19ERERQUklOVCgiYnJlYWsvY29udGludWU6IGlzX2JyZWFrPSVsZCwgbGFiZWxf aWQ9JWxkLCBsYWJlbF9pc19jbG9zZXN0PSVsZCwgIgorCQkgICAgICAgICAgICAgICAgICAgICAi bGFiZWxfY2F0Y2hfZGVwdGg9JWxkLCBjYXRjaF9kZXB0aD0lbGQgIgorCQkgICAgICAgICAgICAg ICAgICAgICAiLT4gdXNlIHNsb3cgdmFyaWFudCAobG9uZ2ptcCkiLAorCQkgICAgICAgICAgICAg ICAgICAgICAobG9uZykgaXNfYnJlYWssIChsb25nKSBsYWJlbF9pZCwgKGxvbmcpIGxhYmVsX2lz X2Nsb3Nlc3QsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBsYWJlbF9jYXRjaF9kZXB0 aCwgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuY2F0Y2hfZGVwdGgpKTsKKworCQlkdWtfX2Vt aXRfYmMoY29tcF9jdHgsCisJCSAgICAgICAgICAgICBpc19icmVhayA/IERVS19PUF9CUkVBSyA6 IERVS19PUF9DT05USU5VRSwKKwkJICAgICAgICAgICAgIChkdWtfcmVnY29uc3RfdCkgbGFiZWxf aWQpOworCX0KK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19wYXJzZV9yZXR1cm5fc3RtdChkdWtf Y29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzKSB7CisJZHVrX2h0aHJlYWQg KnRociA9IGNvbXBfY3R4LT50aHI7CisJZHVrX3JlZ2NvbnN0X3QgcmNfdmFsOworCisJZHVrX19h ZHZhbmNlKGNvbXBfY3R4KTsgIC8qIGVhdCAncmV0dXJuJyAqLworCisJLyogQSAncmV0dXJuJyBz dGF0ZW1lbnQgaXMgb25seSBhbGxvd2VkIGluc2lkZSBhbiBhY3R1YWwgZnVuY3Rpb24gYm9keSwK KwkgKiBub3QgYXMgcGFydCBvZiBldmFsIG9yIGdsb2JhbCBjb2RlLgorCSAqLworCWlmICghY29t cF9jdHgtPmN1cnJfZnVuYy5pc19mdW5jdGlvbikgeworCQlEVUtfRVJST1JfU1lOVEFYKHRociwg RFVLX1NUUl9JTlZBTElEX1JFVFVSTik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwl9 CisKKwlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX1NFTUlDT0xPTiB8fCAg LyogZXhwbGljaXQgc2VtaSBmb2xsb3dzICovCisJICAgIGNvbXBfY3R4LT5jdXJyX3Rva2VuLmxp bmV0ZXJtIHx8ICAgICAgICAgICAgICAgIC8qIGF1dG9tYXRpYyBzZW1pIHdpbGwgYmUgaW5zZXJ0 ZWQgKi8KKwkgICAgY29tcF9jdHgtPmN1cnJfdG9rZW4uYWxsb3dfYXV0b19zZW1pKSB7ICAgICAg ICAgLyogYXV0b21hdGljIHNlbWkgd2lsbCBiZSBpbnNlcnRlZCAqLworCQlEVUtfREREKERVS19E RERQUklOVCgiZW1wdHkgcmV0dXJuIHZhbHVlIC0+IHVuZGVmaW5lZCIpKTsKKwkJZHVrX19lbWl0 X29wX29ubHkoY29tcF9jdHgsIERVS19PUF9SRVRVTkRFRik7CisJfSBlbHNlIHsKKwkJZHVrX2lu dF90IHBjX2JlZm9yZV9leHByOworCQlkdWtfaW50X3QgcGNfYWZ0ZXJfZXhwcjsKKworCQlEVUtf REREKERVS19ERERQUklOVCgicmV0dXJuIHdpdGggYSB2YWx1ZSIpKTsKKworCQlEVUtfVU5SRUYo cGNfYmVmb3JlX2V4cHIpOworCQlEVUtfVU5SRUYocGNfYWZ0ZXJfZXhwcik7CisKKwkJcGNfYmVm b3JlX2V4cHIgPSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsKKwkJcmNfdmFsID0gZHVr X19leHBydG9wX3RvcmVnY29uc3QoY29tcF9jdHgsIHJlcywgRFVLX19CUF9GT1JfRVhQUiAvKnJi cF9mbGFncyovKTsKKwkJcGNfYWZ0ZXJfZXhwciA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9j dHgpOworCisJCS8qIFRhaWwgY2FsbCBjaGVjazogaWYgbGFzdCBvcGNvZGUgZW1pdHRlZCB3YXMg Q0FMTCwgYW5kCisJCSAqIHRoZSBjb250ZXh0IGFsbG93cyBpdCwgYWRkIGEgdGFpbGNhbGwgZmxh ZyB0byB0aGUgQ0FMTC4KKwkJICogVGhpcyBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IGEgdGFpbCBj YWxsIHdpbGwgYmUgYWxsb3dlZCBhdAorCQkgKiBydW50aW1lLCBzbyB0aGUgUkVUVVJOIG11c3Qg c3RpbGwgYmUgZW1pdHRlZC4gIChEdWt0YXBlCisJCSAqIDAuMTAuMCBhdm9pZGVkIHRoaXMgYW5k IHNpbXVsYXRlZCBhIFJFVFVSTiBpZiBhIHRhaWwgY2FsbAorCQkgKiBjb3VsZG4ndCBiZSB1c2Vk IGF0IHJ1bnRpbWU7IGJ1dCB0aGlzIGRpZG4ndCB3b3JrCisJCSAqIGNvcnJlY3RseSB3aXRoIGEg dGhyZWFkIHlpZWxkL3Jlc3VtZSwgc2VlCisJCSAqIHRlc3QtYnVnLXRhaWxjYWxsLXRocmVhZC15 aWVsZC1yZXN1bWUuanMgZm9yIGRpc2N1c3Npb24uKQorCQkgKgorCQkgKiBJbiBhZGRpdGlvbiB0 byB0aGUgbGFzdCBvcGNvZGUgYmVpbmcgQ0FMTCwgd2UgYWxzbyBuZWVkIHRvCisJCSAqIGJlIHN1 cmUgdGhhdCAncmNfdmFsJyBpcyB0aGUgcmVzdWx0IHJlZ2lzdGVyIG9mIHRoZSBDQUxMLgorCQkg KiBGb3IgaW5zdGFuY2UsIGZvciB0aGUgZXhwcmVzc2lvbiAncmV0dXJuIDAsIChmdW5jdGlvbiAo KQorCQkgKiB7IHJldHVybiAxOyB9KSwgMicgdGhlIGxhc3Qgb3Bjb2RlIGVtaXR0ZWQgaXMgQ0FM TCAobm8KKwkJICogYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgJzInKSBidXQgJ3JjX3ZhbCcgaW5k aWNhdGVzCisJCSAqIGNvbnN0YW50ICcyJy4gIFNpbWlsYXJseSBpZiAnMicgaXMgcmVwbGFjZWQg YnkgYSByZWdpc3RlcgorCQkgKiBib3VuZCB2YXJpYWJsZSwgbm8gb3Bjb2RlcyBhcmUgZW1pdHRl ZCBidXQgdGFpbCBjYWxsIHdvdWxkCisJCSAqIGJlIGluY29ycmVjdC4KKwkJICoKKwkJICogVGhp cyBpcyB0cmlja3kgYW5kIGVhc3kgdG8gZ2V0IHdyb25nLiAgSXQgd291bGQgYmUgYmVzdCB0bwor CQkgKiB0cmFjayBlbm91Z2ggZXhwcmVzc2lvbiBtZXRhZGF0YSB0byBjaGVjayB0aGF0ICdyY192 YWwnIGNhbWUKKwkJICogZnJvbSB0aGF0IGxhc3QgQ0FMTCBpbnN0cnVjdGlvbi4gIFdlIGRvbid0 IGhhdmUgdGhhdCBtZXRhZGF0YQorCQkgKiBub3csIHNvIHdlIGNoZWNrIHRoYXQgJ3JjX3ZhbCcg aXMgYSB0ZW1wb3JhcnkgcmVnaXN0ZXIgcmVzdWx0CisJCSAqIChub3QgYSBjb25zdGFudCBvciBh IHJlZ2lzdGVyIGJvdW5kIHZhcmlhYmxlKS4gIFRoZXJlIHNob3VsZAorCQkgKiBiZSBubyB3YXkg Y3VycmVudGx5IGZvciAncmNfdmFsJyB0byBiZSBhIHRlbXBvcmFyeSBmb3IgYW4KKwkJICogZXhw cmVzc2lvbiBmb2xsb3dpbmcgdGhlIENBTEwgaW5zdHJ1Y3Rpb24gd2l0aG91dCBlbWl0dGluZwor CQkgKiBzb21lIG9wY29kZXMgZm9sbG93aW5nIHRoZSBDQUxMLiAgVGhpcyBwcm94eSBjaGVjayBp cyB1c2VkCisJCSAqIGJlbG93LgorCQkgKgorCQkgKiBTZWU6IHRlc3QtYnVnLWNvbW1hLWV4cHIt Z2gxMzEuanMuCisJCSAqCisJCSAqIFRoZSBub24tc3RhbmRhcmQgJ2NhbGxlcicgcHJvcGVydHkg ZGlzYWJsZXMgdGFpbCBjYWxscworCQkgKiBiZWNhdXNlIHRoZXkgcG9zZSBzb21lIHNwZWNpYWwg Y2FzZXMgd2hpY2ggaGF2ZW4ndCBiZWVuCisJCSAqIGZpeGVkIHlldC4KKwkJICovCisKKyNpZiBk ZWZpbmVkKERVS19VU0VfVEFJTENBTEwpCisJCWlmIChjb21wX2N0eC0+Y3Vycl9mdW5jLmNhdGNo X2RlcHRoID09IDAgJiYgICAvKiBubyBjYXRjaGVycyAqLworCQkgICAgcGNfYWZ0ZXJfZXhwciA+ IHBjX2JlZm9yZV9leHByKSB7ICAgICAgICAgLyogYXQgbGVhc3Qgb25lIG9wY29kZSBlbWl0dGVk ICovCisJCQlkdWtfY29tcGlsZXJfaW5zdHIgKmluc3RyOworCQkJZHVrX2luc3RyX3QgaW5zOwor CQkJZHVrX3NtYWxsX3VpbnRfdCBvcDsKKworCQkJaW5zdHIgPSBkdWtfX2dldF9pbnN0cl9wdHIo Y29tcF9jdHgsIHBjX2FmdGVyX2V4cHIgLSAxKTsKKwkJCURVS19BU1NFUlQoaW5zdHIgIT0gTlVM TCk7CisKKwkJCWlucyA9IGluc3RyLT5pbnM7CisJCQlvcCA9IChkdWtfc21hbGxfdWludF90KSBE VUtfREVDX09QKGlucyk7CisJCQlpZiAoKG9wICYgfjB4MGZVKSA9PSBEVUtfT1BfQ0FMTDAgJiYK KwkJCSAgICBEVUtfX0lTUkVHX1RFTVAoY29tcF9jdHgsIHJjX3ZhbCkgLyogc2VlIGFib3ZlICov KSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJldHVybiBzdGF0ZW1lbnQgZGV0ZWN0ZWQg YSB0YWlsIGNhbGwgb3Bwb3J0dW5pdHk6ICIKKwkJCQkgICAgICAgICAgICAgICAgICAgICAiY2F0 Y2ggZGVwdGggaXMgMCwgZHVrX19leHBydG9wKCkgZW1pdHRlZCA+PSAxIGluc3RydWN0aW9ucywg IgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJhbmQgbGFzdCBpbnN0cnVjdGlvbiBpcyBhIENB TEwgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICItPiBjaGFuZ2UgdG8gVEFJTENBTEwiKSk7 CisJCQkJaW5zIHw9IERVS19FTkNfT1AoRFVLX0JDX0NBTExfRkxBR19UQUlMQ0FMTCk7CisJCQkJ aW5zdHItPmlucyA9IGluczsKKwkJCX0KKwkJfQorI2VuZGlmICAvKiBEVUtfVVNFX1RBSUxDQUxM ICovCisKKwkJaWYgKERVS19fSVNSRUcocmNfdmFsKSkgeworCQkJZHVrX19lbWl0X2JjKGNvbXBf Y3R4LCBEVUtfT1BfUkVUUkVHLCByY192YWwpOworCQl9IGVsc2UgeworCQkJcmNfdmFsID0gRFVL X19SRU1PVkVDT05TVChyY192YWwpOworCQkJaWYgKGR1a19fY29uc3RfbmVlZHNfcmVmY291bnQo Y29tcF9jdHgsIHJjX3ZhbCkpIHsKKwkJCQlkdWtfX2VtaXRfYmMoY29tcF9jdHgsIERVS19PUF9S RVRDT05TVCwgcmNfdmFsKTsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX19lbWl0X2JjKGNvbXBfY3R4 LCBEVUtfT1BfUkVUQ09OU1ROLCByY192YWwpOworCQkJfQorCQl9CisJfQorfQorCitEVUtfTE9D QUwgdm9pZCBkdWtfX3BhcnNlX3Rocm93X3N0bXQoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19pdmFsdWUgKnJlcykgeworCWR1a19yZWdjb25zdF90IHJlZ192YWw7CisKKwlkdWtfX2Fk dmFuY2UoY29tcF9jdHgpOyAgLyogZWF0ICd0aHJvdycgKi8KKworCS8qIFVubGlrZSBicmVhay9j b250aW51ZSwgdGhyb3cgc3RhdGVtZW50IGRvZXMgbm90IGFsbG93IGFuIGVtcHR5IHZhbHVlLiAq LworCisJaWYgKGNvbXBfY3R4LT5jdXJyX3Rva2VuLmxpbmV0ZXJtKSB7CisJCURVS19FUlJPUl9T WU5UQVgoY29tcF9jdHgtPnRociwgRFVLX1NUUl9JTlZBTElEX1RIUk9XKTsKKwkJRFVLX1dPX05P UkVUVVJOKHJldHVybjspOworCX0KKworCXJlZ192YWwgPSBkdWtfX2V4cHJ0b3BfdG9yZWcoY29t cF9jdHgsIHJlcywgRFVLX19CUF9GT1JfRVhQUiAvKnJicF9mbGFncyovKTsKKwlkdWtfX2VtaXRf YmMoY29tcF9jdHgsCisJICAgICAgICAgICAgIERVS19PUF9USFJPVywKKwkgICAgICAgICAgICAg cmVnX3ZhbCk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fcGFyc2VfdHJ5X3N0bXQoZHVrX2Nv bXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19pdmFsdWUgKnJlcykgeworCWR1a19odGhyZWFkICp0 aHIgPSBjb21wX2N0eC0+dGhyOworCWR1a19yZWdjb25zdF90IHJlZ19jYXRjaDsgICAgICAvKiBy ZWdfY2F0Y2grMCBhbmQgcmVnX2NhdGNoKzEgYXJlIHJlc2VydmVkIGZvciBUUllDQVRDSCAqLwor CWR1a19yZWdjb25zdF90IHJjX3Zhcm5hbWUgPSAwOworCWR1a19zbWFsbF91aW50X3QgdHJ5Y2F0 Y2hfZmxhZ3MgPSAwOworCWR1a19pbnRfdCBwY19sZGNvbnN0ID0gLTE7CisJZHVrX2ludF90IHBj X3RyeWNhdGNoID0gLTE7CisJZHVrX2ludF90IHBjX2NhdGNoID0gLTE7CisJZHVrX2ludF90IHBj X2ZpbmFsbHkgPSAtMTsKKworCURVS19VTlJFRihyZXMpOworCisJLyoKKwkgKiAgU2VlIHRoZSBm b2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBmb3IgZGlzY3Vzc2lvbjoKKwkgKgorCSAqICAgIGRvYy9l eGVjdXRpb24ucnN0OiBjb250cm9sIGZsb3cgZGV0YWlscworCSAqCisJICogIFRyeSwgY2F0Y2gs IGFuZCBmaW5hbGx5ICJwYXJ0cyIgYXJlIEJsb2Nrcywgbm90IFN0YXRlbWVudHMsIHNvCisJICog IHRoZXkgbXVzdCBhbHdheXMgYmUgZGVsaW1pdGVkIGJ5IGN1cmx5IGJyYWNlcy4gIFRoaXMgaXMg dW5saWtlIGUuZy4KKwkgKiAgdGhlIGlmIHN0YXRlbWVudCwgd2hpY2ggYWNjZXB0cyBhbnkgU3Rh dGVtZW50LiAgVGhpcyBlbGltaW5hdGVzIGFueQorCSAqICBxdWVzdGlvbnMgb2YgbWF0Y2hpbmcg cGFydHMgb2YgbmVzdGVkIHRyeSBzdGF0ZW1lbnRzLiAgVGhlIEJsb2NrCisJICogIHBhcnNpbmcg aXMgaW1wbGVtZW50ZWQgaW5saW5lIGhlcmUgKGluc3RlYWQgb2YgY2FsbGluZyBvdXQpLgorCSAq CisJICogIEZpbmFsbHkgcGFydCBoYXMgYSAnbGV0IHNjb3BlZCcgdmFyaWFibGUsIHdoaWNoIHJl cXVpcmVzIGEgZmV3IGtpbmtzCisJICogIGhlcmUuCisJICovCisKKwljb21wX2N0eC0+Y3Vycl9m dW5jLmNhdGNoX2RlcHRoKys7CisKKwlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOyAgLyogZWF0ICd0 cnknICovCisKKwlyZWdfY2F0Y2ggPSBEVUtfX0FMTE9DVEVNUFMoY29tcF9jdHgsIDIpOworCisJ LyogVGhlIHRhcmdldCBmb3IgdGhpcyBMRENPTlNUIG1heSBuZWVkIG91dHB1dCBzaHVmZmxpbmcs IGJ1dCB3ZSBhc3N1bWUKKwkgKiB0aGF0ICdwY19sZGNvbnN0JyB3aWxsIGJlIHRoZSBMRENPTlNU IHRoYXQgd2UgY2FuIHBhdGNoIGxhdGVyLiAgVGhpcworCSAqIHNob3VsZCBiZSB0aGUgY2FzZSBi ZWNhdXNlIHRoZXJlJ3Mgbm8gaW5wdXQgc2h1ZmZsaW5nLiAgKElmIHRoZXJlJ3MKKwkgKiBubyBj YXRjaCBjbGF1c2UsIHRoaXMgTERDT05TVCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBOT1AuKQor CSAqLworCXBjX2xkY29uc3QgPSBkdWtfX2dldF9jdXJyZW50X3BjKGNvbXBfY3R4KTsKKwlkdWtf X2VtaXRfYV9iYyhjb21wX2N0eCwgRFVLX09QX0xEQ09OU1QsIHJlZ19jYXRjaCwgMCAvKnBhdGNo ZWQgbGF0ZXIqLyk7CisKKwlwY190cnljYXRjaCA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9j dHgpOworCWR1a19fZW1pdF9pbnZhbGlkKGNvbXBfY3R4KTsgIC8qIFRSWUNBVENILCBjYW5ub3Qg ZW1pdCBub3cgKG5vdCBlbm91Z2ggaW5mbykgKi8KKwlkdWtfX2VtaXRfaW52YWxpZChjb21wX2N0 eCk7ICAvKiBqdW1wIGZvciAnY2F0Y2gnIGNhc2UgKi8KKwlkdWtfX2VtaXRfaW52YWxpZChjb21w X2N0eCk7ICAvKiBqdW1wIGZvciAnZmluYWxseScgY2FzZSBvciBlbmQgKGlmIG5vIGZpbmFsbHkp ICovCisKKwkvKiB0cnkgcGFydCAqLworCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERV S19UT0tfTENVUkxZKTsKKwlkdWtfX3BhcnNlX3N0bXRzKGNvbXBfY3R4LCAwIC8qYWxsb3dfc291 cmNlX2VsZW0qLywgMCAvKmV4cGVjdF9lb2YqLywgMSAvKnJlZ2V4cF9hZnRlciovKTsKKwkvKiB0 aGUgRFVLX1RPS19SQ1VSTFkgaXMgZWF0ZW4gYnkgZHVrX19wYXJzZV9zdG10cygpICovCisJZHVr X19lbWl0X29wX29ubHkoY29tcF9jdHgsIERVS19PUF9FTkRUUlkpOworCisJaWYgKGNvbXBfY3R4 LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19DQVRDSCkgeworCQkvKgorCQkgKiAgVGhlIGNhdGNo IHZhcmlhYmxlIG11c3QgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBuZXcgYWxsb2NhdGVkCisJ CSAqICByZWdpc3RlciBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYXRjaCBjbGF1c2UuICBXZSBu ZWVkIHRvIHN0b3JlCisJCSAqICBhbmQgcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRo ZSB2YXJtYXAgZW50cnkgKGlmIGFueSkuCisJCSAqLworCisJCS8qCisJCSAqICBOb3RlOiBjdXJy ZW50bHkgcmVnaXN0ZXIgYmluZGluZ3MgbXVzdCBiZSBmaXhlZCBmb3IgdGhlIGVudGlyZQorCQkg KiAgZnVuY3Rpb24uICBTbywgZXZlbiB0aG91Z2ggdGhlIGNhdGNoIHZhcmlhYmxlIGlzIGluIGEg cmVnaXN0ZXIKKwkJICogIHdlIGtub3csIHdlIG11c3QgdXNlIGFuIGV4cGxpY2l0IGVudmlyb25t ZW50IHJlY29yZCBhbmQgc2xvdyBwYXRoCisJCSAqICBhY2Nlc3NlcyB0byByZWFkL3dyaXRlIHRo ZSBjYXRjaCBiaW5kaW5nIHRvIG1ha2UgY2xvc3VyZXMgY3JlYXRlZAorCQkgKiAgd2l0aGluIHRo ZSBjYXRjaCBjbGF1c2Ugd29yayBjb3JyZWN0bHkuICBUaGlzIHJlc3RyaWN0aW9uIHNob3VsZAor CQkgKiAgYmUgZml4YWJsZSAoYXQgbGVhc3QgaW4gY29tbW9uIGNhc2VzKSBsYXRlci4KKwkJICoK KwkJICogIFNlZTogdGVzdC1idWctY2F0Y2gtYmluZGluZy0yLmpzLgorCQkgKgorCQkgKiAgWFhY OiBpbXByb3ZlIHRvIGdldCBmYXN0IHBhdGggYWNjZXNzIHRvIG1vc3QgY2F0Y2ggY2xhdXNlcy4K KwkJICovCisKKwkJZHVrX2hzdHJpbmcgKmhfdmFyOworCQlkdWtfaW50X3QgdmFybWFwX3ZhbHVl OyAgLyogZm9yIHN0b3JpbmcvcmVzdG9yaW5nIHRoZSB2YXJtYXAgYmluZGluZyBmb3IgY2F0Y2gg dmFyaWFibGUgKi8KKworCQlEVUtfREREKERVS19ERERQUklOVCgic3RhY2sgdG9wIGF0IHN0YXJ0 IG9mIGNhdGNoIGNsYXVzZTogJWxkIiwgKGxvbmcpIGR1a19nZXRfdG9wKHRocikpKTsKKworCQl0 cnljYXRjaF9mbGFncyB8PSBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19IQVZFX0NBVENIOworCisJCXBj X2NhdGNoID0gZHVrX19nZXRfY3VycmVudF9wYyhjb21wX2N0eCk7CisKKwkJZHVrX19hZHZhbmNl KGNvbXBfY3R4KTsKKwkJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwgRFVLX1RPS19MUEFS RU4pOworCisJCWlmIChjb21wX2N0eC0+Y3Vycl90b2tlbi50ICE9IERVS19UT0tfSURFTlRJRklF UikgeworCQkJLyogSWRlbnRpZmllciwgaS5lLiBkb24ndCBhbGxvdyByZXNlcnZlZCB3b3JkcyAq LworCQkJZ290byBzeW50YXhfZXJyb3I7CisJCX0KKwkJaF92YXIgPSBjb21wX2N0eC0+Y3Vycl90 b2tlbi5zdHIxOworCQlEVUtfQVNTRVJUKGhfdmFyICE9IE5VTEwpOworCisJCWR1a19wdXNoX2hz dHJpbmcodGhyLCBoX3Zhcik7ICAvKiBrZWVwIGluIG9uIHZhbHN0YWNrLCB1c2UgYm9ycm93ZWQg cmVmIGJlbG93ICovCisKKwkJaWYgKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfc3RyaWN0ICYmCisJ CSAgICAoKGhfdmFyID09IERVS19IVEhSRUFEX1NUUklOR19FVkFMKHRocikpIHx8CisJCSAgICAg KGhfdmFyID09IERVS19IVEhSRUFEX1NUUklOR19MQ19BUkdVTUVOVFModGhyKSkpKSB7CisJCQlE VUtfREREKERVS19ERERQUklOVCgiY2F0Y2ggaWRlbnRpZmllciAnZXZhbCcgb3IgJ2FyZ3VtZW50 cycgaW4gc3RyaWN0IG1vZGUgLT4gU3ludGF4RXJyb3IiKSk7CisJCQlnb3RvIHN5bnRheF9lcnJv cjsKKwkJfQorCisJCWR1a19kdXBfdG9wKHRocik7CisJCXJjX3Zhcm5hbWUgPSBkdWtfX2dldGNv bnN0KGNvbXBfY3R4KTsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImNhdGNoIGNsYXVzZSwgcmNf dmFybmFtZT0weCUwOGx4ICglbGQpIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVk IGxvbmcpIHJjX3Zhcm5hbWUsIChsb25nKSByY192YXJuYW1lKSk7CisKKwkJZHVrX19hZHZhbmNl KGNvbXBfY3R4KTsKKwkJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwgRFVLX1RPS19SUEFS RU4pOworCisJCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfTENVUkxZKTsK KworCQlEVUtfREREKERVS19ERERQUklOVCgidmFybWFwIGJlZm9yZSBtb2RpZnlpbmcgZm9yIGNh dGNoIGNsYXVzZTogJSFpVCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBk dWtfZ2V0X3R2YWwodGhyLCBjb21wX2N0eC0+Y3Vycl9mdW5jLnZhcm1hcF9pZHgpKSk7CisKKwkJ ZHVrX2R1cF90b3AodGhyKTsKKwkJZHVrX2dldF9wcm9wKHRociwgY29tcF9jdHgtPmN1cnJfZnVu Yy52YXJtYXBfaWR4KTsKKwkJaWYgKGR1a19pc191bmRlZmluZWQodGhyLCAtMSkpIHsKKwkJCXZh cm1hcF92YWx1ZSA9IC0yOworCQl9IGVsc2UgaWYgKGR1a19pc19udWxsKHRociwgLTEpKSB7CisJ CQl2YXJtYXBfdmFsdWUgPSAtMTsKKwkJfSBlbHNlIHsKKwkJCURVS19BU1NFUlQoZHVrX2lzX251 bWJlcih0aHIsIC0xKSk7CisJCQl2YXJtYXBfdmFsdWUgPSBkdWtfZ2V0X2ludCh0aHIsIC0xKTsK KwkJCURVS19BU1NFUlQodmFybWFwX3ZhbHVlID49IDApOworCQl9CisJCWR1a19wb3AodGhyKTsK KworI2lmIDAKKwkJLyogSXQnZCBiZSBuaWNlIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMgLSBi dXQgaXQgZG9lc24ndAorCQkgKiB3b3JrIGZvciBjbG9zdXJlcyBjcmVhdGVkIGluc2lkZSB0aGUg Y2F0Y2ggY2xhdXNlLgorCQkgKi8KKwkJZHVrX2R1cF90b3AodGhyKTsKKwkJZHVrX3B1c2hfaW50 KHRociwgKGR1a19pbnRfdCkgKHJlZ19jYXRjaCArIDApKTsKKwkJZHVrX3B1dF9wcm9wKHRociwg Y29tcF9jdHgtPmN1cnJfZnVuYy52YXJtYXBfaWR4KTsKKyNlbmRpZgorCQlkdWtfZHVwX3RvcCh0 aHIpOworCQlkdWtfcHVzaF9udWxsKHRocik7CisJCWR1a19wdXRfcHJvcCh0aHIsIGNvbXBfY3R4 LT5jdXJyX2Z1bmMudmFybWFwX2lkeCk7CisKKwkJZHVrX19lbWl0X2FfYmMoY29tcF9jdHgsCisJ CSAgICAgICAgICAgICAgIERVS19PUF9QVVRWQVIgfCBEVUtfX0VNSVRfRkxBR19BX0lTX1NPVVJD RSwKKwkJICAgICAgICAgICAgICAgcmVnX2NhdGNoICsgMCAvKnZhbHVlKi8sCisJCSAgICAgICAg ICAgICAgIHJjX3Zhcm5hbWUgLyp2YXJuYW1lKi8pOworCisJCURVS19EREQoRFVLX0RERFBSSU5U KCJ2YXJtYXAgYmVmb3JlIHBhcnNpbmcgY2F0Y2ggY2xhdXNlOiAlIWlUIiwKKwkJICAgICAgICAg ICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIGNvbXBfY3R4LT5jdXJy X2Z1bmMudmFybWFwX2lkeCkpKTsKKworCQlkdWtfX3BhcnNlX3N0bXRzKGNvbXBfY3R4LCAwIC8q YWxsb3dfc291cmNlX2VsZW0qLywgMCAvKmV4cGVjdF9lb2YqLywgMSAvKnJlZ2V4cF9hZnRlciov KTsKKwkJLyogdGhlIERVS19UT0tfUkNVUkxZIGlzIGVhdGVuIGJ5IGR1a19fcGFyc2Vfc3RtdHMo KSAqLworCisJCWlmICh2YXJtYXBfdmFsdWUgPT0gLTIpIHsKKwkJCS8qIG5vdCBwcmVzZW50ICov CisJCQlkdWtfZGVsX3Byb3AodGhyLCBjb21wX2N0eC0+Y3Vycl9mdW5jLnZhcm1hcF9pZHgpOwor CQl9IGVsc2UgeworCQkJaWYgKHZhcm1hcF92YWx1ZSA9PSAtMSkgeworCQkJCWR1a19wdXNoX251 bGwodGhyKTsKKwkJCX0gZWxzZSB7CisJCQkJRFVLX0FTU0VSVCh2YXJtYXBfdmFsdWUgPj0gMCk7 CisJCQkJZHVrX3B1c2hfaW50KHRociwgdmFybWFwX3ZhbHVlKTsKKwkJCX0KKwkJCWR1a19wdXRf cHJvcCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMudmFybWFwX2lkeCk7CisJCX0KKwkJLyogdmFy bmFtZSBpcyBwb3BwZWQgYnkgYWJvdmUgY29kZSAqLworCisJCURVS19EREQoRFVLX0RERFBSSU5U KCJ2YXJtYXAgYWZ0ZXIgcmVzdG9yZSBjYXRjaCBjbGF1c2U6ICUhaVQiLAorCQkgICAgICAgICAg ICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgY29tcF9jdHgtPmN1cnJf ZnVuYy52YXJtYXBfaWR4KSkpOworCisJCWR1a19fZW1pdF9vcF9vbmx5KGNvbXBfY3R4LAorCQkg ICAgICAgICAgICAgICAgICBEVUtfT1BfRU5EQ0FUQ0gpOworCisJCS8qCisJCSAqICBYWFg6IGZv ciBub3csIGluZGljYXRlIHRoYXQgYW4gZXhwZW5zaXZlIGNhdGNoIGJpbmRpbmcKKwkJICogIGRl Y2xhcmF0aXZlIGVudmlyb25tZW50IGlzIGFsd2F5cyBuZWVkZWQuICBJZiB3ZSBkb24ndAorCQkg KiAgbmVlZCBpdCwgd2UgZG9uJ3QgbmVlZCB0aGUgY29uc3RfdmFybmFtZSBlaXRoZXIuCisJCSAq LworCisJCXRyeWNhdGNoX2ZsYWdzIHw9IERVS19CQ19UUllDQVRDSF9GTEFHX0NBVENIX0JJTkRJ Tkc7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInN0YWNrIHRvcCBhdCBlbmQgb2YgY2F0Y2gg Y2xhdXNlOiAlbGQiLCAobG9uZykgZHVrX2dldF90b3AodGhyKSkpOworCX0KKworCWlmIChjb21w X2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfRklOQUxMWSkgeworCQl0cnljYXRjaF9mbGFn cyB8PSBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19IQVZFX0ZJTkFMTFk7CisKKwkJcGNfZmluYWxseSA9 IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgpOworCisJCWR1a19fYWR2YW5jZShjb21wX2N0 eCk7CisKKwkJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwgRFVLX1RPS19MQ1VSTFkpOwor CQlkdWtfX3BhcnNlX3N0bXRzKGNvbXBfY3R4LCAwIC8qYWxsb3dfc291cmNlX2VsZW0qLywgMCAv KmV4cGVjdF9lb2YqLywgMSAvKnJlZ2V4cF9hZnRlciovKTsKKwkJLyogdGhlIERVS19UT0tfUkNV UkxZIGlzIGVhdGVuIGJ5IGR1a19fcGFyc2Vfc3RtdHMoKSAqLworCQlkdWtfX2VtaXRfYWJjKGNv bXBfY3R4LAorCQkgICAgICAgICAgICAgIERVS19PUF9FTkRGSU4sCisJCSAgICAgICAgICAgICAg cmVnX2NhdGNoKTsgIC8qIHJldGhyb3cgKi8KKwl9CisKKwlpZiAoISh0cnljYXRjaF9mbGFncyAm IERVS19CQ19UUllDQVRDSF9GTEFHX0hBVkVfQ0FUQ0gpICYmCisJICAgICEodHJ5Y2F0Y2hfZmxh Z3MgJiBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19IQVZFX0ZJTkFMTFkpKSB7CisJCS8qIG11c3QgaGF2 ZSBjYXRjaCBhbmQvb3IgZmluYWxseSAqLworCQlnb3RvIHN5bnRheF9lcnJvcjsKKwl9CisKKwkv KiBJZiB0aGVyZSdzIG5vIGNhdGNoIGJsb2NrLCByY192YXJuYW1lIHdpbGwgYmUgMCBhbmQgZHVr X19wYXRjaF90cnljYXRjaCgpCisJICogd2lsbCByZXBsYWNlIHRoZSBMRENPTlNUIHdpdGggYSBO T1AuICBGb3IgYW55IGFjdHVhbCBjb25zdGFudCAoaW5jbHVkaW5nCisJICogY29uc3RhbnQgMCkg dGhlIERVS19fQ09OU1RfTUFSS0VSIGZsYWcgd2lsbCBiZSBzZXQgaW4gcmNfdmFybmFtZS4KKwkg Ki8KKworCWR1a19fcGF0Y2hfdHJ5Y2F0Y2goY29tcF9jdHgsCisJICAgICAgICAgICAgICAgICAg ICBwY19sZGNvbnN0LAorCSAgICAgICAgICAgICAgICAgICAgcGNfdHJ5Y2F0Y2gsCisJICAgICAg ICAgICAgICAgICAgICByZWdfY2F0Y2gsCisJICAgICAgICAgICAgICAgICAgICByY192YXJuYW1l LAorCSAgICAgICAgICAgICAgICAgICAgdHJ5Y2F0Y2hfZmxhZ3MpOworCisJaWYgKHRyeWNhdGNo X2ZsYWdzICYgRFVLX0JDX1RSWUNBVENIX0ZMQUdfSEFWRV9DQVRDSCkgeworCQlEVUtfQVNTRVJU KHBjX2NhdGNoID49IDApOworCQlkdWtfX3BhdGNoX2p1bXAoY29tcF9jdHgsIHBjX3RyeWNhdGNo ICsgMSwgcGNfY2F0Y2gpOworCX0KKworCWlmICh0cnljYXRjaF9mbGFncyAmIERVS19CQ19UUllD QVRDSF9GTEFHX0hBVkVfRklOQUxMWSkgeworCQlEVUtfQVNTRVJUKHBjX2ZpbmFsbHkgPj0gMCk7 CisJCWR1a19fcGF0Y2hfanVtcChjb21wX2N0eCwgcGNfdHJ5Y2F0Y2ggKyAyLCBwY19maW5hbGx5 KTsKKwl9IGVsc2UgeworCQkvKiB3aXRob3V0IGZpbmFsbHksIHRoZSBzZWNvbmQganVtcCBzbG90 IGlzIHVzZWQgdG8ganVtcCB0byBlbmQgb2Ygc3RtdCAqLworCQlkdWtfX3BhdGNoX2p1bXBfaGVy ZShjb21wX2N0eCwgcGNfdHJ5Y2F0Y2ggKyAyKTsKKwl9CisKKwljb21wX2N0eC0+Y3Vycl9mdW5j LmNhdGNoX2RlcHRoLS07CisJcmV0dXJuOworCisgc3ludGF4X2Vycm9yOgorCURVS19FUlJPUl9T WU5UQVgodGhyLCBEVUtfU1RSX0lOVkFMSURfVFJZKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJu Oyk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fcGFyc2Vfd2l0aF9zdG10KGR1a19jb21waWxl cl9jdHggKmNvbXBfY3R4LCBkdWtfaXZhbHVlICpyZXMpIHsKKwlkdWtfaW50X3QgcGNfdHJ5Y2F0 Y2g7CisJZHVrX2ludF90IHBjX2ZpbmlzaGVkOworCWR1a19yZWdjb25zdF90IHJlZ19jYXRjaDsK KwlkdWtfc21hbGxfdWludF90IHRyeWNhdGNoX2ZsYWdzOworCisJaWYgKGNvbXBfY3R4LT5jdXJy X2Z1bmMuaXNfc3RyaWN0KSB7CisJCURVS19FUlJPUl9TWU5UQVgoY29tcF9jdHgtPnRociwgRFVL X1NUUl9XSVRIX0lOX1NUUklDVF9NT0RFKTsKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOwor CX0KKworCWNvbXBfY3R4LT5jdXJyX2Z1bmMuY2F0Y2hfZGVwdGgrKzsKKworCWR1a19fYWR2YW5j ZShjb21wX2N0eCk7ICAvKiBlYXQgJ3dpdGgnICovCisKKwlyZWdfY2F0Y2ggPSBEVUtfX0FMTE9D VEVNUFMoY29tcF9jdHgsIDIpOworCisJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0eCwgRFVL X1RPS19MUEFSRU4pOworCWR1a19fZXhwcnRvcF90b2ZvcmNlZHJlZyhjb21wX2N0eCwgcmVzLCBE VUtfX0JQX0ZPUl9FWFBSIC8qcmJwX2ZsYWdzKi8sIHJlZ19jYXRjaCk7CisJY29tcF9jdHgtPmN1 cnJfZnVuYy5hbGxvd19yZWdleHBfaW5fYWR2ID0gMTsKKwlkdWtfX2FkdmFuY2VfZXhwZWN0KGNv bXBfY3R4LCBEVUtfVE9LX1JQQVJFTik7ICAvKiBBbGxvdyBSZWdFeHAgYXMgcGFydCBvZiBuZXh0 IHN0bXQuICovCisKKwlwY190cnljYXRjaCA9IGR1a19fZ2V0X2N1cnJlbnRfcGMoY29tcF9jdHgp OworCXRyeWNhdGNoX2ZsYWdzID0gRFVLX0JDX1RSWUNBVENIX0ZMQUdfV0lUSF9CSU5ESU5HOwor CWR1a19fZW1pdF9hX2JjKGNvbXBfY3R4LAorCSAgICAgICAgICAgICAgICBEVUtfT1BfVFJZQ0FU Q0ggfCBEVUtfX0VNSVRfRkxBR19OT19TSFVGRkxFX0EsCisJICAgICAgICAgICAgICAgIChkdWtf cmVnY29uc3RfdCkgdHJ5Y2F0Y2hfZmxhZ3MgLyphKi8sCisJICAgICAgICAgICAgICAgIHJlZ19j YXRjaCAvKmJjKi8pOworCWR1a19fZW1pdF9pbnZhbGlkKGNvbXBfY3R4KTsgIC8qIGNhdGNoIGp1 bXAgKi8KKwlkdWtfX2VtaXRfaW52YWxpZChjb21wX2N0eCk7ICAvKiBmaW5pc2hlZCBqdW1wICov CisKKwlkdWtfX3BhcnNlX3N0bXQoY29tcF9jdHgsIHJlcywgMCAvKmFsbG93X3NvdXJjZV9lbGVt Ki8pOworCWR1a19fZW1pdF9vcF9vbmx5KGNvbXBfY3R4LCBEVUtfT1BfRU5EVFJZKTsKKworCXBj X2ZpbmlzaGVkID0gZHVrX19nZXRfY3VycmVudF9wYyhjb21wX2N0eCk7CisKKwlkdWtfX3BhdGNo X2p1bXAoY29tcF9jdHgsIHBjX3RyeWNhdGNoICsgMiwgcGNfZmluaXNoZWQpOworCisJY29tcF9j dHgtPmN1cnJfZnVuYy5jYXRjaF9kZXB0aC0tOworfQorCitEVUtfTE9DQUwgZHVrX2ludF90IGR1 a19fc3RtdF9sYWJlbF9zaXRlKGR1a19jb21waWxlcl9jdHggKmNvbXBfY3R4LCBkdWtfaW50X3Qg bGFiZWxfaWQpIHsKKwkvKiBpZiBhIHNpdGUgYWxyZWFkeSBleGlzdHMsIG5vcDogbWF4IG9uZSBs YWJlbCBzaXRlIHBlciBzdGF0ZW1lbnQgKi8KKwlpZiAobGFiZWxfaWQgPj0gMCkgeworCQlyZXR1 cm4gbGFiZWxfaWQ7CisJfQorCisJbGFiZWxfaWQgPSBjb21wX2N0eC0+Y3Vycl9mdW5jLmxhYmVs X25leHQrKzsKKwlEVUtfREREKERVS19ERERQUklOVCgiYWxsb2NhdGVkIG5ldyBsYWJlbCBpZCBm b3IgbGFiZWwgc2l0ZTogJWxkIiwgKGxvbmcpIGxhYmVsX2lkKSk7CisKKwlkdWtfX2VtaXRfYmMo Y29tcF9jdHgsCisJICAgICAgICAgICAgIERVS19PUF9MQUJFTCwKKwkgICAgICAgICAgICAgKGR1 a19yZWdjb25zdF90KSBsYWJlbF9pZCk7CisJZHVrX19lbWl0X2ludmFsaWQoY29tcF9jdHgpOwor CWR1a19fZW1pdF9pbnZhbGlkKGNvbXBfY3R4KTsKKworCXJldHVybiBsYWJlbF9pZDsKK30KKwor LyogUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LgorICoKKyAqIENyZWF0ZXMgYSBsYWJlbCBzaXRl ICh3aXRoIGFuIGVtcHR5IGxhYmVsKSBhdXRvbWF0aWNhbGx5IGZvciBpdGVyYXRpb24KKyAqIHN0 YXRlbWVudHMuICBBbHNvICJwZWVscyBvZmYiIGFueSBsYWJlbCBzdGF0ZW1lbnRzIGZvciBleHBs aWNpdCBsYWJlbHMuCisgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fcGFyc2Vfc3RtdChkdWtfY29t cGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX2l2YWx1ZSAqcmVzLCBkdWtfYm9vbF90IGFsbG93X3Nv dXJjZV9lbGVtKSB7CisJZHVrX2h0aHJlYWQgKnRociA9IGNvbXBfY3R4LT50aHI7CisJZHVrX2Jv b2xfdCBkaXJfcHJvbF9hdF9lbnRyeTsgICAgLyogZGlyZWN0aXZlIHByb2xvZ3VlIHN0YXR1cyBh dCBlbnRyeSAqLworCWR1a19yZWdjb25zdF90IHRlbXBfYXRfZW50cnk7CisJZHVrX3NpemVfdCBs YWJlbHNfbGVuX2F0X2VudHJ5OworCWR1a19pbnRfdCBwY19hdF9lbnRyeTsgICAgICAgICAgIC8q IGFzc3VtZWQgdG8gYWxzbyBiZSBQQyBvZiAiTEFCRUwiICovCisJZHVrX2ludF90IHN0bXRfaWQ7 CisJZHVrX3NtYWxsX3VpbnRfdCBzdG10X2ZsYWdzID0gMDsKKwlkdWtfaW50X3QgbGFiZWxfaWQg PSAtMTsKKwlkdWtfc21hbGxfdWludF90IHRvazsKKwlkdWtfYm9vbF90IHRlc3RfZnVuY19kZWNs OworCisJRFVLX19SRUNVUlNJT05fSU5DUkVBU0UoY29tcF9jdHgsIHRocik7CisKKwl0ZW1wX2F0 X2VudHJ5ID0gRFVLX19HRVRURU1QKGNvbXBfY3R4KTsKKwlwY19hdF9lbnRyeSA9IGR1a19fZ2V0 X2N1cnJlbnRfcGMoY29tcF9jdHgpOworCWxhYmVsc19sZW5fYXRfZW50cnkgPSBkdWtfZ2V0X2xl bmd0aCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMubGFiZWxuYW1lc19pZHgpOworCXN0bXRfaWQg PSBjb21wX2N0eC0+Y3Vycl9mdW5jLnN0bXRfbmV4dCsrOworCWRpcl9wcm9sX2F0X2VudHJ5ID0g Y29tcF9jdHgtPmN1cnJfZnVuYy5pbl9kaXJlY3RpdmVfcHJvbG9ndWU7CisKKwlEVUtfVU5SRUYo c3RtdF9pZCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgicGFyc2luZyBhIHN0YXRlbWVudCwg c3RtdF9pZD0lbGQsIHRlbXBfYXRfZW50cnk9JWxkLCBsYWJlbHNfbGVuX2F0X2VudHJ5PSVsZCwg IgorCSAgICAgICAgICAgICAgICAgICAgICJpc19zdHJpY3Q9JWxkLCBpbl9kaXJlY3RpdmVfcHJv bG9ndWU9JWxkLCBjYXRjaF9kZXB0aD0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSBzdG10X2lkLCAobG9uZykgdGVtcF9hdF9lbnRyeSwgKGxvbmcpIGxhYmVsc19sZW5fYXRfZW50 cnksCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNf c3RyaWN0LCAobG9uZykgY29tcF9jdHgtPmN1cnJfZnVuYy5pbl9kaXJlY3RpdmVfcHJvbG9ndWUs CisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuY2F0Y2hf ZGVwdGgpKTsKKworCS8qIFRoZSBkaXJlY3RpdmUgcHJvbG9ndWUgZmxhZyBpcyBjbGVhcmVkIGJ5 IGRlZmF1bHQgc28gdGhhdCBpdCBpcworCSAqIHVuc2V0IGZvciBhbnkgcmVjdXJzaXZlIHN0YXRl bWVudCBwYXJzaW5nLiAgSXQgaXMgb25seSAicmV2aXZlZCIKKwkgKiBpZiBhIGRpcmVjdGl2ZSBp cyBkZXRlY3RlZC4gIChXZSBjb3VsZCBhbHNvIG1ha2UgZGlyZWN0aXZlcyBvbmx5CisJICogYWxs b3dlZCBpZiAnYWxsb3dfc291cmNlX2VsZW0nIHdhcyB0cnVlLikKKwkgKi8KKwljb21wX2N0eC0+ Y3Vycl9mdW5jLmluX2RpcmVjdGl2ZV9wcm9sb2d1ZSA9IDA7CisKKyByZXRyeV9wYXJzZToKKwor CURVS19EREQoRFVLX0RERFBSSU5UKCJ0cnkgc3RtdCBwYXJzZSwgc3RtdF9pZD0lbGQsIGxhYmVs X2lkPSVsZCwgYWxsb3dfc291cmNlX2VsZW09JWxkLCBjYXRjaF9kZXB0aD0lbGQiLAorCSAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBzdG10X2lkLCAobG9uZykgbGFiZWxfaWQsIChsb25nKSBh bGxvd19zb3VyY2VfZWxlbSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcF9jdHgt PmN1cnJfZnVuYy5jYXRjaF9kZXB0aCkpOworCisJLyoKKwkgKiAgRGV0ZWN0IGl0ZXJhdGlvbiBz dGF0ZW1lbnRzOyBpZiBlbmNvdW50ZXJlZCwgZXN0YWJsaXNoIGFuCisJICogIGVtcHR5IGxhYmVs LgorCSAqLworCisJdG9rID0gY29tcF9jdHgtPmN1cnJfdG9rZW4udDsKKwlpZiAodG9rID09IERV S19UT0tfRk9SIHx8IHRvayA9PSBEVUtfVE9LX0RPIHx8IHRvayA9PSBEVUtfVE9LX1dISUxFIHx8 CisJICAgIHRvayA9PSBEVUtfVE9LX1NXSVRDSCkgeworCQlEVUtfREREKERVS19ERERQUklOVCgi aXRlcmF0aW9uL3N3aXRjaCBzdGF0ZW1lbnQgLT4gYWRkIGVtcHR5IGxhYmVsIikpOworCisJCWxh YmVsX2lkID0gZHVrX19zdG10X2xhYmVsX3NpdGUoY29tcF9jdHgsIGxhYmVsX2lkKTsKKwkJZHVr X19hZGRfbGFiZWwoY29tcF9jdHgsCisJCSAgICAgICAgICAgICAgIERVS19IVEhSRUFEX1NUUklO R19FTVBUWV9TVFJJTkcodGhyKSwKKwkJICAgICAgICAgICAgICAgcGNfYXRfZW50cnkgLypwY19s YWJlbCovLAorCQkgICAgICAgICAgICAgICBsYWJlbF9pZCk7CisJfQorCisJLyoKKwkgKiAgTWFp biBzd2l0Y2ggZm9yIHN0YXRlbWVudCAvIHNvdXJjZSBlbGVtZW50IHR5cGUuCisJICovCisKKwlz d2l0Y2ggKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQpIHsKKwljYXNlIERVS19UT0tfRlVOQ1RJT046 IHsKKwkJLyoKKwkJICogIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBmdW5jdGlvbiBleHByZXNzaW9u LCBvciAobm9uLXN0YW5kYXJkKQorCQkgKiAgZnVuY3Rpb24gc3RhdGVtZW50LgorCQkgKgorCQkg KiAgVGhlIEU1IHNwZWNpZmljYXRpb24gb25seSBhbGxvd3MgZnVuY3Rpb24gZGVjbGFyYXRpb25z IGF0CisJCSAqICB0aGUgdG9wIGxldmVsIChpbiAic291cmNlIGVsZW1lbnRzIikuICBBbiBFeHBy ZXNzaW9uU3RhdGVtZW50CisJCSAqICBpcyBleHBsaWNpdGx5IG5vdCBhbGxvd2VkIHRvIGJlZ2lu IHdpdGggYSAiZnVuY3Rpb24iIGtleXdvcmQKKwkJICogIChFNSBTZWN0aW9uIDEyLjQpLiAgSGVu Y2UgYW55IG5vbi1lcnJvciBzZW1hbnRpY3MgZm9yIHN1Y2gKKwkJICogIG5vbi10b3AtbGV2ZWwg c3RhdGVtZW50cyBhcmUgbm9uLXN0YW5kYXJkLiAgRHVrdGFwZSBzZW1hbnRpY3MKKwkJICogIGZv ciBmdW5jdGlvbiBzdGF0ZW1lbnRzIGFyZSBtb2RlbGxlZCBhZnRlciBWOCwgc2VlCisJCSAqICB0 ZXN0LWRldi1mdW5jLWRlY2wtb3V0c2lkZS10b3AuanMuCisJCSAqLworCQl0ZXN0X2Z1bmNfZGVj bCA9IGFsbG93X3NvdXJjZV9lbGVtOworI2lmIGRlZmluZWQoRFVLX1VTRV9OT05TVERfRlVOQ19T VE1UKQorCQkvKiBMZW5pZW50OiBhbGxvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgb3V0c2lkZSB0 b3AgbGV2ZWwgaW4KKwkJICogbm9uLXN0cmljdCBtb2RlIGJ1dCByZWplY3QgdGhlbSBpbiBzdHJp Y3QgbW9kZS4KKwkJICovCisJCXRlc3RfZnVuY19kZWNsID0gdGVzdF9mdW5jX2RlY2wgfHwgIWNv bXBfY3R4LT5jdXJyX2Z1bmMuaXNfc3RyaWN0OworI2VuZGlmICAvKiBEVUtfVVNFX05PTlNURF9G VU5DX1NUTVQgKi8KKwkJLyogU3RyaWN0OiBuZXZlciBhbGxvdyBmdW5jdGlvbiBkZWNsYXJhdGlv bnMgb3V0c2lkZSB0b3AgbGV2ZWwuICovCisJCWlmICh0ZXN0X2Z1bmNfZGVjbCkgeworCQkJLyog RnVuY3Rpb25EZWNsYXJhdGlvbjogbm90IHN0cmljdGx5IGEgc3RhdGVtZW50IGJ1dCBoYW5kbGVk IGFzIHN1Y2guCisJCQkgKgorCQkJICogTyhkZXB0aF4yKSBwYXJzZSBjb3VudCBmb3IgaW5uZXIg ZnVuY3Rpb25zIGlzIGhhbmRsZWQgYnkgcmVjb3JkaW5nIGEKKwkJCSAqIGxleGVyIG9mZnNldCBv biB0aGUgZmlyc3QgY29tcGlsYXRpb24gcGFzcywgc28gdGhhdCB0aGUgZnVuY3Rpb24gY2FuCisJ CQkgKiBiZSBlZmZpY2llbnRseSBza2lwcGVkIG9uIHRoZSBzZWNvbmQgcGFzcy4gIFRoaXMgaXMg ZW5jYXBzdWxhdGVkIGludG8KKwkJCSAqIGR1a19fcGFyc2VfZnVuY19saWtlX2ZudW0oKS4KKwkJ CSAqLworCisJCQlkdWtfaW50X3QgZm51bTsKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9O UykKKwkJCWR1a19pZHhfdCB0b3BfYmVmb3JlOworI2VuZGlmCisKKwkJCURVS19EREQoRFVLX0RE RFBSSU5UKCJmdW5jdGlvbiBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQiKSk7CisKKyNpZiBkZWZpbmVk KERVS19VU0VfQVNTRVJUSU9OUykKKwkJCXRvcF9iZWZvcmUgPSBkdWtfZ2V0X3RvcCh0aHIpOwor I2VuZGlmCisKKwkJCWR1a19fYWR2YW5jZShjb21wX2N0eCk7ICAvKiBlYXQgJ2Z1bmN0aW9uJyAq LworCQkJZm51bSA9IGR1a19fcGFyc2VfZnVuY19saWtlX2ZudW0oY29tcF9jdHgsIERVS19fRlVO Q19GTEFHX0RFQ0wgfCBEVUtfX0ZVTkNfRkxBR19QVVNITkFNRV9QQVNTMSk7CisKKwkJCS8qIFRo ZSB2YWx1ZSBzdGFjayBjb252ZW50aW9uIGhlcmUgaXMgYSBiaXQgb2RkOiB0aGUgZnVuY3Rpb24K KwkJCSAqIG5hbWUgaXMgb25seSBwdXNoZWQgb24gcGFzcyAxIChpbl9zY2FubmluZyksIGFuZCBp cyBuZWVkZWQKKwkJCSAqIHRvIHByb2Nlc3MgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorCQkJICov CisJCQlpZiAoY29tcF9jdHgtPmN1cnJfZnVuYy5pbl9zY2FubmluZykgeworCQkJCWR1a191YXJy aWR4X3QgbjsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCQkJCURVS19BU1NF UlQoZHVrX2dldF90b3AodGhyKSA9PSB0b3BfYmVmb3JlICsgMSk7CisjZW5kaWYKKwkJCQlEVUtf REREKERVS19ERERQUklOVCgicmVnaXN0ZXIgZnVuY3Rpb24gZGVjbGFyYXRpb24gJSFUIGluIHBh c3MgMSwgZm51bSAlbGQiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIGR1a19nZXRfdHZhbCh0 aHIsIC0xKSwgKGxvbmcpIGZudW0pKTsKKwkJCQluID0gKGR1a191YXJyaWR4X3QpIGR1a19nZXRf bGVuZ3RoKHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy5kZWNsc19pZHgpOworCQkJCS8qIGZ1bmNu YW1lIGlzIGF0IGluZGV4IC0xICovCisJCQkJZHVrX3B1dF9wcm9wX2luZGV4KHRociwgY29tcF9j dHgtPmN1cnJfZnVuYy5kZWNsc19pZHgsIG4pOworCQkJCWR1a19wdXNoX2ludCh0aHIsIChkdWtf aW50X3QpIChEVUtfREVDTF9UWVBFX0ZVTkMgKyAoZm51bSA8PCA4KSkpOworCQkJCWR1a19wdXRf cHJvcF9pbmRleCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuZGVjbHNfaWR4LCBuICsgMSk7CisJ CQl9IGVsc2UgeworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCQkJCURVS19BU1NF UlQoZHVrX2dldF90b3AodGhyKSA9PSB0b3BfYmVmb3JlKTsKKyNlbmRpZgorCQkJfQorCisJCQkv KiBubyBzdGF0ZW1lbnQgdmFsdWUgKHVubGlrZSBmdW5jdGlvbiBleHByZXNzaW9uKSAqLworCQkJ c3RtdF9mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCURVS19FUlJPUl9TWU5U QVgodGhyLCBEVUtfU1RSX0ZVTkNfU1RNVF9OT1RfQUxMT1dFRCk7CisJCQlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuOyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RPS19MQ1VSTFk6IHsK KwkJRFVLX0RERChEVUtfREREUFJJTlQoImJsb2NrIHN0YXRlbWVudCIpKTsKKwkJZHVrX19hZHZh bmNlKGNvbXBfY3R4KTsKKwkJZHVrX19wYXJzZV9zdG10cyhjb21wX2N0eCwgMCAvKmFsbG93X3Nv dXJjZV9lbGVtKi8sIDAgLypleHBlY3RfZW9mKi8sIDEgLypyZWdleHBfYWZ0ZXIqLyk7CisJCS8q IHRoZSBEVUtfVE9LX1JDVVJMWSBpcyBlYXRlbiBieSBkdWtfX3BhcnNlX3N0bXRzKCkgKi8KKwkJ aWYgKGxhYmVsX2lkID49IDApIHsKKwkJCWR1a19fcGF0Y2hfanVtcF9oZXJlKGNvbXBfY3R4LCBw Y19hdF9lbnRyeSArIDEpOyAgLyogYnJlYWsganVtcCAqLworCQl9CisJCXN0bXRfZmxhZ3MgPSAw OworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVE9LX0NPTlNUOiB7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJjb25zdGFudCBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQiKSk7CisJCWR1a19fcGFyc2Vf dmFyX3N0bXQoY29tcF9jdHgsIHJlcywgRFVLX19FWFBSX0ZMQUdfUkVRVUlSRV9JTklUIC8qZXhw cl9mbGFncyovKTsKKwkJc3RtdF9mbGFncyA9IERVS19fSEFTX1RFUk07CisJCWJyZWFrOworCX0K KwljYXNlIERVS19UT0tfVkFSOiB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ2YXJpYWJsZSBk ZWNsYXJhdGlvbiBzdGF0ZW1lbnQiKSk7CisJCWR1a19fcGFyc2VfdmFyX3N0bXQoY29tcF9jdHgs IHJlcywgMCAvKmV4cHJfZmxhZ3MqLyk7CisJCXN0bXRfZmxhZ3MgPSBEVUtfX0hBU19URVJNOwor CQlicmVhazsKKwl9CisJY2FzZSBEVUtfVE9LX1NFTUlDT0xPTjogeworCQkvKiBlbXB0eSBzdGF0 ZW1lbnQgd2l0aCBhbiBleHBsaWNpdCBzZW1pY29sb24gKi8KKwkJRFVLX0RERChEVUtfREREUFJJ TlQoImVtcHR5IHN0YXRlbWVudCIpKTsKKwkJc3RtdF9mbGFncyA9IERVS19fSEFTX1RFUk07CisJ CWJyZWFrOworCX0KKwljYXNlIERVS19UT0tfSUY6IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQo ImlmIHN0YXRlbWVudCIpKTsKKwkJZHVrX19wYXJzZV9pZl9zdG10KGNvbXBfY3R4LCByZXMpOwor CQlpZiAobGFiZWxfaWQgPj0gMCkgeworCQkJZHVrX19wYXRjaF9qdW1wX2hlcmUoY29tcF9jdHgs IHBjX2F0X2VudHJ5ICsgMSk7ICAvKiBicmVhayBqdW1wICovCisJCX0KKwkJc3RtdF9mbGFncyA9 IDA7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UT0tfRE86IHsKKwkJLyoKKwkJICogIERvLXdo aWxlIHN0YXRlbWVudCBpcyBtb3N0bHkgdHJpdmlhbCwgYnV0IHRoZXJlIGlzIHNwZWNpYWwKKwkJ ICogIGhhbmRsaW5nIGZvciBhdXRvbWF0aWMgc2VtaWNvbG9uIGhhbmRsaW5nICh0cmlnZ2VyZWQg YnkgdGhlCisJCSAqICBEVUtfX0FMTE9XX0FVVE9fU0VNSV9BTFdBWVMpIGZsYWcgcmVsYXRlZCB0 byBhIGJ1ZyBmaWxlZCBhdDoKKwkJICoKKwkJICogICAgaHR0cHM6Ly9idWdzLmVjbWFzY3JpcHQu b3JnL3Nob3dfYnVnLmNnaT9pZD04CisJCSAqCisJCSAqICBTZWUgZG9jL2NvbXBpbGVyLnJzdCBm b3IgZGV0YWlscy4KKwkJICovCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJkbyBzdGF0ZW1lbnQi KSk7CisJCURVS19BU1NFUlQobGFiZWxfaWQgPj0gMCk7CisJCWR1a19fdXBkYXRlX2xhYmVsX2Zs YWdzKGNvbXBfY3R4LAorCQkgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbF9pZCwKKwkJICAg ICAgICAgICAgICAgICAgICAgICAgRFVLX0xBQkVMX0ZMQUdfQUxMT1dfQlJFQUsgfCBEVUtfTEFC RUxfRkxBR19BTExPV19DT05USU5VRSk7CisJCWR1a19fcGFyc2VfZG9fc3RtdChjb21wX2N0eCwg cmVzLCBwY19hdF9lbnRyeSk7CisJCXN0bXRfZmxhZ3MgPSBEVUtfX0hBU19URVJNIHwgRFVLX19B TExPV19BVVRPX1NFTUlfQUxXQVlTOyAgLyogRFVLX19BTExPV19BVVRPX1NFTUlfQUxXQVlTIHdv cmthcm91bmQgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RPS19XSElMRTogeworCQlEVUtf REREKERVS19ERERQUklOVCgid2hpbGUgc3RhdGVtZW50IikpOworCQlEVUtfQVNTRVJUKGxhYmVs X2lkID49IDApOworCQlkdWtfX3VwZGF0ZV9sYWJlbF9mbGFncyhjb21wX2N0eCwKKwkJICAgICAg ICAgICAgICAgICAgICAgICAgbGFiZWxfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIERV S19MQUJFTF9GTEFHX0FMTE9XX0JSRUFLIHwgRFVLX0xBQkVMX0ZMQUdfQUxMT1dfQ09OVElOVUUp OworCQlkdWtfX3BhcnNlX3doaWxlX3N0bXQoY29tcF9jdHgsIHJlcywgcGNfYXRfZW50cnkpOwor CQlzdG10X2ZsYWdzID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RPS19GT1I6IHsKKwkJ LyoKKwkJICogIEZvci9mb3ItaW4gc3RhdGVtZW50IGlzIGNvbXBsaWNhdGVkIHRvIHBhcnNlIGJl Y2F1c2UKKwkJICogIGRldGVybWluaW5nIHRoZSBzdGF0ZW1lbnQgdHlwZSAodGhyZWUtcGFydCBm b3IgdnMuIGEKKwkJICogIGZvci1pbikgcmVxdWlyZXMgcG90ZW50aWFsIGJhY2t0cmFja2luZy4K KwkJICoKKwkJICogIFNlZSB0aGUgaGVscGVyIGZvciB0aGUgbWVzc3kgc3R1ZmYuCisJCSAqLwor CQlEVUtfREREKERVS19ERERQUklOVCgiZm9yL2Zvci1pbiBzdGF0ZW1lbnQiKSk7CisJCURVS19B U1NFUlQobGFiZWxfaWQgPj0gMCk7CisJCWR1a19fdXBkYXRlX2xhYmVsX2ZsYWdzKGNvbXBfY3R4 LAorCQkgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbF9pZCwKKwkJICAgICAgICAgICAgICAg ICAgICAgICAgRFVLX0xBQkVMX0ZMQUdfQUxMT1dfQlJFQUsgfCBEVUtfTEFCRUxfRkxBR19BTExP V19DT05USU5VRSk7CisJCWR1a19fcGFyc2VfZm9yX3N0bXQoY29tcF9jdHgsIHJlcywgcGNfYXRf ZW50cnkpOworCQlzdG10X2ZsYWdzID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RPS19D T05USU5VRToKKwljYXNlIERVS19UT0tfQlJFQUs6IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQo ImJyZWFrL2NvbnRpbnVlIHN0YXRlbWVudCIpKTsKKwkJZHVrX19wYXJzZV9icmVha19vcl9jb250 aW51ZV9zdG10KGNvbXBfY3R4LCByZXMpOworCQlzdG10X2ZsYWdzID0gRFVLX19IQVNfVEVSTSB8 IERVS19fSVNfVEVSTUlOQUw7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UT0tfUkVUVVJOOiB7 CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJyZXR1cm4gc3RhdGVtZW50IikpOworCQlkdWtfX3Bh cnNlX3JldHVybl9zdG10KGNvbXBfY3R4LCByZXMpOworCQlzdG10X2ZsYWdzID0gRFVLX19IQVNf VEVSTSB8IERVS19fSVNfVEVSTUlOQUw7CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UT0tfV0lU SDogeworCQlEVUtfREREKERVS19ERERQUklOVCgid2l0aCBzdGF0ZW1lbnQiKSk7CisJCWNvbXBf Y3R4LT5jdXJyX2Z1bmMud2l0aF9kZXB0aCsrOworCQlkdWtfX3BhcnNlX3dpdGhfc3RtdChjb21w X2N0eCwgcmVzKTsKKwkJaWYgKGxhYmVsX2lkID49IDApIHsKKwkJCWR1a19fcGF0Y2hfanVtcF9o ZXJlKGNvbXBfY3R4LCBwY19hdF9lbnRyeSArIDEpOyAgLyogYnJlYWsganVtcCAqLworCQl9CisJ CWNvbXBfY3R4LT5jdXJyX2Z1bmMud2l0aF9kZXB0aC0tOworCQlzdG10X2ZsYWdzID0gMDsKKwkJ YnJlYWs7CisJfQorCWNhc2UgRFVLX1RPS19TV0lUQ0g6IHsKKwkJLyoKKwkJICogIFRoZSBzd2l0 Y2ggc3RhdGVtZW50IGlzIHByZXR0eSBtZXNzeSB0byBjb21waWxlLgorCQkgKiAgU2VlIHRoZSBo ZWxwZXIgZm9yIGRldGFpbHMuCisJCSAqLworCQlEVUtfREREKERVS19ERERQUklOVCgic3dpdGNo IHN0YXRlbWVudCIpKTsKKwkJRFVLX0FTU0VSVChsYWJlbF9pZCA+PSAwKTsKKwkJZHVrX191cGRh dGVfbGFiZWxfZmxhZ3MoY29tcF9jdHgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVs X2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICBEVUtfTEFCRUxfRkxBR19BTExPV19CUkVB Syk7ICAvKiBkb24ndCBhbGxvdyBjb250aW51ZSAqLworCQlkdWtfX3BhcnNlX3N3aXRjaF9zdG10 KGNvbXBfY3R4LCByZXMsIHBjX2F0X2VudHJ5KTsKKwkJc3RtdF9mbGFncyA9IDA7CisJCWJyZWFr OworCX0KKwljYXNlIERVS19UT0tfVEhST1c6IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInRo cm93IHN0YXRlbWVudCIpKTsKKwkJZHVrX19wYXJzZV90aHJvd19zdG10KGNvbXBfY3R4LCByZXMp OworCQlzdG10X2ZsYWdzID0gRFVLX19IQVNfVEVSTSB8IERVS19fSVNfVEVSTUlOQUw7CisJCWJy ZWFrOworCX0KKwljYXNlIERVS19UT0tfVFJZOiB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJ0 cnkgc3RhdGVtZW50IikpOworCQlkdWtfX3BhcnNlX3RyeV9zdG10KGNvbXBfY3R4LCByZXMpOwor CQlzdG10X2ZsYWdzID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RPS19ERUJVR0dFUjog eworCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dF Ul9TVVBQT1JUKQorCQlEVUtfREREKERVS19ERERQUklOVCgiZGVidWdnZXIgc3RhdGVtZW50OiBk ZWJ1Z2dpbmcgZW5hYmxlZCwgZW1pdCBkZWJ1Z2dlciBvcGNvZGUiKSk7CisJCWR1a19fZW1pdF9v cF9vbmx5KGNvbXBfY3R4LCBEVUtfT1BfREVCVUdHRVIpOworI2Vsc2UKKwkJRFVLX0RERChEVUtf REREUFJJTlQoImRlYnVnZ2VyIHN0YXRlbWVudDogaWdub3JlZCIpKTsKKyNlbmRpZgorCQlzdG10 X2ZsYWdzID0gRFVLX19IQVNfVEVSTTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJLyoK KwkJICogIEVsc2UsIG11c3QgYmUgb25lIG9mOgorCQkgKiAgICAtIEV4cHJlc3Npb25TdGF0ZW1l bnQsIHBvc3NpYmx5IGEgZGlyZWN0aXZlIChTdHJpbmcpCisJCSAqICAgIC0gTGFiZWxsZWRTdGF0 ZW1lbnQgKElkZW50aWZpZXIgZm9sbG93ZWQgYnkgJzonKQorCQkgKgorCQkgKiAgRXhwcmVzc2lv bnMgYmVnaW5uaW5nIHdpdGggJ2Z1bmN0aW9uJyBrZXl3b3JkIGFyZSBjb3ZlcmVkIGJ5IGEgY2Fz ZQorCQkgKiAgYWJvdmUgKHN1Y2ggZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHN0YW5k YXJkIEU1IGFueXdheSkuCisJCSAqICBBbHNvIGV4cHJlc3Npb25zIHN0YXJ0aW5nIHdpdGggJ3sn IGFyZSBpbnRlcnByZXRlZCBhcyBibG9jaworCQkgKiAgc3RhdGVtZW50cy4gIFNlZSBFNSBTZWN0 aW9uIDEyLjQuCisJCSAqCisJCSAqICBEaXJlY3RpdmUgZGV0ZWN0aW9uIGlzIHRyaWNreTsgc2Vl IEU1IFNlY3Rpb24gMTQuMSBvbiBkaXJlY3RpdmUKKwkJICogIHByb2xvZ3VlLiAgQSBkaXJlY3Rp dmUgaXMgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQgd2l0aCBhIHNpbmdsZQorCQkgKiAgc3RyaW5n IGxpdGVyYWwgYW5kIGFuIGV4cGxpY2l0IG9yIGF1dG9tYXRpYyBzZW1pY29sb24uICBFc2NhcGUK KwkJICogIGNoYXJhY3RlcnMgYXJlIHNpZ25pZmljYW50IGFuZCBubyBwYXJlbnMgZXRjIGFyZSBh bGxvd2VkOgorCQkgKgorCQkgKiAgICAndXNlIHN0cmljdCc7ICAgICAgICAgIC8vIHZhbGlkICd1 c2Ugc3RyaWN0JyBkaXJlY3RpdmUKKwkJICogICAgJ3VzZVx1MDAyMHN0cmljdCc7ICAgICAvLyB2 YWxpZCBkaXJlY3RpdmUsIG5vdCBhICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUKKwkJICogICAgKCd1 c2Ugc3RyaWN0Jyk7ICAgICAgICAvLyBub3QgYSB2YWxpZCBkaXJlY3RpdmUKKwkJICoKKwkJICog IFRoZSBleHByZXNzaW9uIGlzIGRldGVybWluZWQgdG8gY29uc2lzdCBvZiBhIHNpbmdsZSBzdHJp bmcgbGl0ZXJhbAorCQkgKiAgYmFzZWQgb24gZHVrX19leHByX251ZCgpIGFuZCBkdWtfX2V4cHJf bGVkKCkgY2FsbCBjb3VudHMuICBUaGUgc3RyaW5nIGxpdGVyYWwKKwkJICogIG9mIGEgJ3VzZSBz dHJpY3QnIGRpcmVjdGl2ZSBpcyBkZXRlcm1pbmVkIHRvIGxhY2sgYW55IGVzY2FwZXMgYmFzZWQK KwkJICogIG51bV9lc2NhcGVzIGNvdW50IGZyb20gdGhlIGxleGVyLiAgTm90ZSB0aGF0IG90aGVy IGRpcmVjdGl2ZXMgbWF5IGJlCisJCSAqICBhbGxvd2VkIHRvIGNvbnRhaW4gZXNjYXBlcywgc28g YSBkaXJlY3RpdmUgd2l0aCBlc2NhcGVzIGRvZXMgbm90CisJCSAqICB0ZXJtaW5hdGUgYSBkaXJl Y3RpdmUgcHJvbG9ndWUuCisJCSAqCisJCSAqICBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhl IGV4cHJlc3Npb24gcGFyc2VyIHdpbGwgbm90IGVtaXQgYW55CisJCSAqICBjb2RlIGZvciBhIHNp bmdsZSB0b2tlbiBleHByZXNzaW9uLiAgSG93ZXZlciwgaXQgd2lsbCBnZW5lcmF0ZSBhbgorCQkg KiAgaW50ZXJtZWRpYXRlIHZhbHVlIHdoaWNoIHdlIHdpbGwgdGhlbiBzdWNjZXNzZnVsbHkgaWdu b3JlLgorCQkgKgorCQkgKiAgQSBzaW1pbGFyIGFwcHJvYWNoIGlzIHVzZWQgZm9yIGxhYmVscy4K KwkJICovCisKKwkJZHVrX2Jvb2xfdCBzaW5nbGVfdG9rZW47CisKKwkJRFVLX0RERChEVUtfRERE UFJJTlQoImV4cHJlc3Npb24gc3RhdGVtZW50IikpOworCQlkdWtfX2V4cHJ0b3AoY29tcF9jdHgs IHJlcywgRFVLX19CUF9GT1JfRVhQUiAvKnJicF9mbGFncyovKTsKKworCQlzaW5nbGVfdG9rZW4g PSAoY29tcF9jdHgtPmN1cnJfZnVuYy5udWRfY291bnQgPT0gMSAmJiAgLyogb25lIHRva2VuICov CisJCSAgICAgICAgICAgICAgICBjb21wX2N0eC0+Y3Vycl9mdW5jLmxlZF9jb3VudCA9PSAwKTsg ICAvKiBubyBvcGVyYXRvcnMgKi8KKworCQlpZiAoc2luZ2xlX3Rva2VuICYmCisJCSAgICBjb21w X2N0eC0+cHJldl90b2tlbi50ID09IERVS19UT0tfSURFTlRJRklFUiAmJgorCQkgICAgY29tcF9j dHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX0NPTE9OKSB7CisJCQkvKgorCQkJICogIERldGVj dGVkIGxhYmVsCisJCQkgKi8KKworCQkJZHVrX2hzdHJpbmcgKmhfbGFiOworCisJCQkvKiBleHBl Y3RlZCBpdmFsICovCisJCQlEVUtfQVNTRVJUKHJlcy0+dCA9PSBEVUtfSVZBTF9WQVIpOworCQkJ RFVLX0FTU0VSVChyZXMtPngxLnQgPT0gRFVLX0lTUEVDX1ZBTFVFKTsKKwkJCURVS19BU1NFUlQo RFVLX1RWQUxfSVNfU1RSSU5HKGR1a19nZXRfdHZhbCh0aHIsIHJlcy0+eDEudmFsc3RhY2tfaWR4 KSkpOworCQkJaF9sYWIgPSBjb21wX2N0eC0+cHJldl90b2tlbi5zdHIxOworCQkJRFVLX0FTU0VS VChoX2xhYiAhPSBOVUxMKTsKKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImV4cGxpY2l0IGxh YmVsIHNpdGUgZm9yIGxhYmVsICclIU8nIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtf aGVhcGhkciAqKSBoX2xhYikpOworCisJCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOyAgLyogZWF0 IGNvbG9uICovCisKKwkJCWxhYmVsX2lkID0gZHVrX19zdG10X2xhYmVsX3NpdGUoY29tcF9jdHgs IGxhYmVsX2lkKTsKKworCQkJZHVrX19hZGRfbGFiZWwoY29tcF9jdHgsCisJCQkgICAgICAgICAg ICAgICBoX2xhYiwKKwkJCSAgICAgICAgICAgICAgIHBjX2F0X2VudHJ5IC8qcGNfbGFiZWwqLywK KwkJCSAgICAgICAgICAgICAgIGxhYmVsX2lkKTsKKworCQkJLyogYSBzdGF0ZW1lbnQgZm9sbG93 aW5nIGEgbGFiZWwgY2Fubm90IGJlIGEgc291cmNlIGVsZW1lbnQKKwkJCSAqIChhIGZ1bmN0aW9u IGRlY2xhcmF0aW9uKS4KKwkJCSAqLworCQkJYWxsb3dfc291cmNlX2VsZW0gPSAwOworCisJCQlE VUtfREREKERVS19ERERQUklOVCgibGFiZWwgaGFuZGxlZCwgcmV0cnkgc3RhdGVtZW50IHBhcnNp bmciKSk7CisJCQlnb3RvIHJldHJ5X3BhcnNlOworCQl9CisKKwkJc3RtdF9mbGFncyA9IDA7CisK KwkJaWYgKGRpcl9wcm9sX2F0X2VudHJ5ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog c3RpbGwgaW4gcHJvbG9ndWUgKi8KKwkJICAgIHNpbmdsZV90b2tlbiAmJiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogc2luZ2xlIHN0cmluZyB0b2tlbiAqLworCQkgICAgY29tcF9j dHgtPnByZXZfdG9rZW4udCA9PSBEVUtfVE9LX1NUUklORykgeworCQkJLyoKKwkJCSAqICBEZXRl Y3RlZCBhIGRpcmVjdGl2ZQorCQkJICovCisJCQlkdWtfaHN0cmluZyAqaF9kaXI7CisKKwkJCS8q IGV4cGVjdGVkIGl2YWwgKi8KKwkJCURVS19BU1NFUlQocmVzLT50ID09IERVS19JVkFMX1BMQUlO KTsKKwkJCURVS19BU1NFUlQocmVzLT54MS50ID09IERVS19JU1BFQ19WQUxVRSk7CisJCQlEVUtf QVNTRVJUKERVS19UVkFMX0lTX1NUUklORyhkdWtfZ2V0X3R2YWwodGhyLCByZXMtPngxLnZhbHN0 YWNrX2lkeCkpKTsKKwkJCWhfZGlyID0gY29tcF9jdHgtPnByZXZfdG9rZW4uc3RyMTsKKwkJCURV S19BU1NFUlQoaF9kaXIgIT0gTlVMTCk7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJwb3Rl bnRpYWwgZGlyZWN0aXZlOiAlIU8iLCBoX2RpcikpOworCisJCQlzdG10X2ZsYWdzIHw9IERVS19f U1RJTExfUFJPTE9HVUU7CisKKwkJCS8qIE5vdGU6IGVzY2FwZWQgY2hhcmFjdGVycyBkaWZmZXJl bnRpYXRlIGRpcmVjdGl2ZXMgKi8KKworCQkJaWYgKGNvbXBfY3R4LT5wcmV2X3Rva2VuLm51bV9l c2NhcGVzID4gMCkgeworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJkaXJlY3RpdmUgY29udGFp bnMgZXNjYXBlczogdmFsaWQgZGlyZWN0aXZlICIKKwkJCQkgICAgICAgICAgICAgICAgICAgICAi YnV0IHdlIGlnbm9yZSBzdWNoIGRpcmVjdGl2ZXMiKSk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJ CQkJICogVGhlIGxlbmd0aCBjb21wYXJpc29ucyBhcmUgcHJlc2VudCB0byBoYW5kbGUKKwkJCQkg KiBzdHJpbmdzIGxpa2UgInVzZSBzdHJpY3RcdTAwMDBmb28iIGFzIHJlcXVpcmVkLgorCQkJCSAq LworCisJCQkJaWYgKERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGhfZGlyKSA9PSAxMCAmJgorCQkJ CSAgICBEVUtfU1RSQ01QKChjb25zdCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfZGly KSwgInVzZSBzdHJpY3QiKSA9PSAwKSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUklDVF9ERUNM KQorCQkJCQlEVUtfREREKERVS19ERERQUklOVCgidXNlIHN0cmljdCBkaXJlY3RpdmUgZGV0ZWN0 ZWQ6IHN0cmljdCBmbGFnICVsZCAtPiAlbGQiLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgY29tcF9jdHgtPmN1cnJfZnVuYy5pc19zdHJpY3QsIChsb25nKSAxKSk7CisJCQkJCWNv bXBfY3R4LT5jdXJyX2Z1bmMuaXNfc3RyaWN0ID0gMTsKKyNlbHNlCisJCQkJCURVS19EREQoRFVL X0RERFBSSU5UKCJ1c2Ugc3RyaWN0IGRldGVjdGVkIGJ1dCBzdHJpY3QgZGVjbGFyYXRpb25zIGRp c2FibGVkLCBpZ25vcmluZyIpKTsKKyNlbmRpZgorCQkJCX0gZWxzZSBpZiAoRFVLX0hTVFJJTkdf R0VUX0JZVEVMRU4oaF9kaXIpID09IDE0ICYmCisJCQkJICAgICAgICAgICBEVUtfU1RSQ01QKChj b25zdCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGhfZGlyKSwgInVzZSBkdWsgbm90YWls IikgPT0gMCkgeworCQkJCQlEVUtfREREKERVS19ERERQUklOVCgidXNlIGR1ayBub3RhaWwgZGly ZWN0aXZlIGRldGVjdGVkOiBub3RhaWwgZmxhZyAlbGQgLT4gJWxkIiwKKwkJCQkJICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfbm90YWlsLCAobG9uZykg MSkpOworCQkJCQljb21wX2N0eC0+Y3Vycl9mdW5jLmlzX25vdGFpbCA9IDE7CisJCQkJfSBlbHNl IHsKKwkJCQkJRFVLX0REKERVS19ERFBSSU5UKCJ1bmtub3duIGRpcmVjdGl2ZTogJyUhTycsIGln bm9yaW5nIGJ1dCBub3QgdGVybWluYXRpbmcgIgorCQkJCQkgICAgICAgICAgICAgICAgICAgImRp cmVjdGl2ZSBwcm9sb2d1ZSIsIChkdWtfaG9iamVjdCAqKSBoX2RpcikpOworCQkJCX0KKwkJCX0K KwkJfSBlbHNlIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJub24tZGlyZWN0aXZlIGV4cHJl c3Npb24gc3RhdGVtZW50IG9yIG5vIGxvbmdlciBpbiBwcm9sb2d1ZTsgIgorCQkJICAgICAgICAg ICAgICAgICAgICAgInByb2xvZ3VlIHRlcm1pbmF0ZWQgaWYgc3RpbGwgYWN0aXZlIikpOworICAg ICAgICAgICAgICAgIH0KKworCQlzdG10X2ZsYWdzIHw9IERVS19fSEFTX1ZBTCB8IERVS19fSEFT X1RFUk07CisJfQorCX0gIC8qIGVuZCBzd2l0Y2ggKHRvaykgKi8KKworCS8qCisJICogIFN0YXRl bWVudCB2YWx1ZSBoYW5kbGluZy4KKwkgKgorCSAqICBHbG9iYWwgY29kZSBhbmQgZXZhbCBjb2Rl IGhhcyBhbiBpbXBsaWNpdCByZXR1cm4gdmFsdWUKKwkgKiAgd2hpY2ggY29tZXMgZnJvbSB0aGUg bGFzdCBzdGF0ZW1lbnQgd2l0aCBhIHZhbHVlCisJICogICh0ZWNobmljYWxseSBhIG5vbi0iZW1w dHkiIGNvbnRpbnVhdGlvbiwgd2hpY2ggaXMKKwkgKiAgZGlmZmVyZW50IGZyb20gYW4gZW1wdHkg c3RhdGVtZW50KS4KKwkgKgorCSAqICBTaW5jZSB3ZSBkb24ndCBrbm93IHdoZXRoZXIgYSBsYXRl ciBzdGF0ZW1lbnQgd2lsbAorCSAqICBvdmVycmlkZSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQg c3RhdGVtZW50LCB3ZSBuZWVkCisJICogIHRvIGNvZXJjZSB0aGUgc3RhdGVtZW50IHZhbHVlIHRv IGEgcmVnaXN0ZXIgYWxsb2NhdGVkCisJICogIGZvciBpbXBsaWNpdCByZXR1cm4gdmFsdWVzLiAg SW4gb3RoZXIgY2FzZXMgd2UgbmVlZAorCSAqICB0byBjb2VyY2UgdGhlIHN0YXRlbWVudCB2YWx1 ZSB0byBhIHBsYWluIHZhbHVlIHRvIGdldAorCSAqICBhbnkgc2lkZSBlZmZlY3RzIG91dCAoY29u c2lkZXIgZS5nLiAiZm9vLmJhcjsiKS4KKwkgKi8KKworCS8qIFhYWDogd2hhdCBhYm91dCBzdGF0 ZW1lbnRzIHdoaWNoIGxlYXZlIGEgaGFsZi1jb29rZWQgdmFsdWUgaW4gJ3JlcycKKwkgKiBidXQg aGF2ZSBubyBzdG10IHZhbHVlPyAgQW55IHN1Y2ggc3RhdGVtZW50cz8KKwkgKi8KKworCWlmIChz dG10X2ZsYWdzICYgRFVLX19IQVNfVkFMKSB7CisJCWR1a19yZWdjb25zdF90IHJlZ19zdG10X3Zh bHVlID0gY29tcF9jdHgtPmN1cnJfZnVuYy5yZWdfc3RtdF92YWx1ZTsKKwkJaWYgKHJlZ19zdG10 X3ZhbHVlID49IDApIHsKKwkJCWR1a19faXZhbHVlX3RvZm9yY2VkcmVnKGNvbXBfY3R4LCByZXMs IHJlZ19zdG10X3ZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJCWR1a19faXZhbHVlX3RvcGxhaW5faWdu b3JlKGNvbXBfY3R4LCByZXMpOworCQl9CisJfSBlbHNlIHsKKwkJOworCX0KKworCS8qCisJICog IFN0YXRlbWVudCB0ZXJtaW5hdG9yIGNoZWNrLCBpbmNsdWRpbmcgYXV0b21hdGljIHNlbWljb2xv bgorCSAqICBoYW5kbGluZy4gIEFmdGVyIHRoaXMgc3RlcCwgJ2N1cnJfdG9rJyBzaG91bGQgYmUg dGhlIGZpcnN0CisJICogIHRva2VuIGFmdGVyIGEgcG9zc2libGUgc3RhdGVtZW50IHRlcm1pbmF0 b3IuCisJICovCisKKwlpZiAoc3RtdF9mbGFncyAmIERVS19fSEFTX1RFUk0pIHsKKwkJaWYgKGNv bXBfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19TRU1JQ09MT04pIHsKKwkJCURVS19EREQo RFVLX0RERFBSSU5UKCJleHBsaWNpdCBzZW1pY29sb24gdGVybWluYXRlcyBzdGF0ZW1lbnQiKSk7 CisJCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOworCQl9IGVsc2UgeworCQkJaWYgKGNvbXBfY3R4 LT5jdXJyX3Rva2VuLmFsbG93X2F1dG9fc2VtaSkgeworCQkJCURVS19EREQoRFVLX0RERFBSSU5U KCJhdXRvbWF0aWMgc2VtaWNvbG9uIHRlcm1pbmF0ZXMgc3RhdGVtZW50IikpOworCQkJfSBlbHNl IGlmIChzdG10X2ZsYWdzICYgRFVLX19BTExPV19BVVRPX1NFTUlfQUxXQVlTKSB7CisJCQkJLyog WFhYOiBtYWtlIHRoaXMgbGVuaWVuY2UgZGVwZW5kZW50IG9uIGZsYWdzIG9yIHN0cmljdG5lc3M/ ICovCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImF1dG9tYXRpYyBzZW1pY29sb24gdGVybWlu YXRlcyBzdGF0ZW1lbnQgKGFsbG93ZWQgZm9yIGNvbXBhdGliaWxpdHkgIgorCQkJCSAgICAgICAg ICAgICAgICAgICAgICJldmVuIHRob3VnaCBubyBsaW5ldGVybSBwcmVzZW50IGJlZm9yZSBuZXh0 IHRva2VuKSIpKTsKKwkJCX0gZWxzZSB7CisJCQkJRFVLX0VSUk9SX1NZTlRBWCh0aHIsIERVS19T VFJfVU5URVJNSU5BVEVEX1NUTVQpOworCQkJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwkJ CX0KKwkJfQorCX0gZWxzZSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJzdGF0ZW1lbnQgaGFz IG5vIHRlcm1pbmF0b3IiKSk7CisJfQorCisJLyoKKwkgKiAgRGlyZWN0aXZlIHByb2xvZ3VlIHRy YWNraW5nLgorCSAqLworCisJaWYgKHN0bXRfZmxhZ3MgJiBEVUtfX1NUSUxMX1BST0xPR1VFKSB7 CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJzZXR0aW5nIGluX2RpcmVjdGl2ZV9wcm9sb2d1ZSIp KTsKKwkJY29tcF9jdHgtPmN1cnJfZnVuYy5pbl9kaXJlY3RpdmVfcHJvbG9ndWUgPSAxOworCX0K KworCS8qCisJICogIENsZWFudXBzIChhbGwgc3RhdGVtZW50IHBhcnNpbmcgZmxvd3MgdGhyb3Vn aCBoZXJlKS4KKwkgKgorCSAqICBQb3AgbGFiZWwgc2l0ZSBhbmQgcmVzZXQgbGFiZWxzLiAgUmVz ZXQgJ25leHQgdGVtcCcgdG8gdmFsdWUgYXQKKwkgKiAgZW50cnkgdG8gcmV1c2UgdGVtcHMuCisJ ICovCisKKwlpZiAobGFiZWxfaWQgPj0gMCkgeworCQlkdWtfX2VtaXRfYmMoY29tcF9jdHgsCisJ CSAgICAgICAgICAgICBEVUtfT1BfRU5ETEFCRUwsCisJCSAgICAgICAgICAgICAoZHVrX3JlZ2Nv bnN0X3QpIGxhYmVsX2lkKTsKKwl9CisKKwlEVUtfX1NFVFRFTVAoY29tcF9jdHgsIHRlbXBfYXRf ZW50cnkpOworCisJZHVrX19yZXNldF9sYWJlbHNfdG9fbGVuZ3RoKGNvbXBfY3R4LCBsYWJlbHNf bGVuX2F0X2VudHJ5KTsKKworCS8qIFhYWDogcmV0dXJuIGluZGljYXRpb24gb2YgInRlcm1pbmFs bmVzcyIgKGUuZy4gYSAndGhyb3cnIGlzIHRlcm1pbmFsKSAqLworCisJRFVLX19SRUNVUlNJT05f REVDUkVBU0UoY29tcF9jdHgsIHRocik7Cit9CisKKy8qCisgKiAgUGFyc2UgYSBzdGF0ZW1lbnQg bGlzdC4KKyAqCisgKiAgSGFuZGxlcyBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbiBhbmQg aW1wbGljaXQgcmV0dXJuIHZhbHVlLgorICoKKyAqICBVcG9uIGVudHJ5LCAnY3Vycl90b2snIHNo b3VsZCBjb250YWluIHRoZSBmaXJzdCB0b2tlbiBvZiB0aGUgZmlyc3QKKyAqICBzdGF0ZW1lbnQg KHBhcnNlZCBpbiB0aGUgImFsbG93IHJlZ2V4cCBsaXRlcmFsIiBtb2RlKS4gIFVwb24gZXhpdCwK KyAqICAnY3Vycl90b2snIGNvbnRhaW5zIHRoZSB0b2tlbiBmb2xsb3dpbmcgdGhlIHN0YXRlbWVu dCBsaXN0IHRlcm1pbmF0b3IKKyAqICAoRU9GIG9yIGNsb3NpbmcgYnJhY2UpLgorICovCisKK0RV S19MT0NBTCB2b2lkIGR1a19fcGFyc2Vfc3RtdHMoZHVrX2NvbXBpbGVyX2N0eCAqY29tcF9jdHgs IGR1a19ib29sX3QgYWxsb3dfc291cmNlX2VsZW0sIGR1a19ib29sX3QgZXhwZWN0X2VvZiwgZHVr X2Jvb2xfdCByZWdleHBfYWZ0ZXIpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRo cjsKKwlkdWtfaXZhbHVlIHJlc19hbGxvYzsKKwlkdWtfaXZhbHVlICpyZXMgPSAmcmVzX2FsbG9j OworCisJLyogU2V0dXAgc3RhdGUuICBJbml0aWFsIGl2YWx1ZSBpcyAndW5kZWZpbmVkJy4gKi8K KworCWR1a19yZXF1aXJlX3N0YWNrKHRociwgRFVLX19QQVJTRV9TVEFURU1FTlRTX1NMT1RTKTsK KworCS8qIFhYWDogJ3Jlcycgc2V0dXAgY2FuIGJlIG1vdmVkIHRvIGZ1bmN0aW9uIGJvZHkgbGV2 ZWw7IGluIGZhY3QsIHR3byAncmVzJworCSAqIGludGVybWVkaWF0ZSB2YWx1ZXMgc3VmZmljZSBm b3IgcGFyc2luZyBvZiBlYWNoIGZ1bmN0aW9uLiAgTmVzdGluZyBpcyBuZWVkZWQKKwkgKiBmb3Ig bmVzdGVkIGZ1bmN0aW9ucyAod2hpY2ggbWF5IG9jY3VyIGluc2lkZSBleHByZXNzaW9ucykuCisJ ICovCisKKwlkdWtfbWVtemVybygmcmVzX2FsbG9jLCBzaXplb2YocmVzX2FsbG9jKSk7CisJcmVz LT50ID0gRFVLX0lWQUxfUExBSU47CisJcmVzLT54MS50ID0gRFVLX0lTUEVDX1ZBTFVFOworCXJl cy0+eDEudmFsc3RhY2tfaWR4ID0gZHVrX2dldF90b3AodGhyKTsKKwlyZXMtPngyLnZhbHN0YWNr X2lkeCA9IHJlcy0+eDEudmFsc3RhY2tfaWR4ICsgMTsKKwlkdWtfcHVzaF91bmRlZmluZWQodGhy KTsKKwlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsKKworCS8qIFBhcnNlIHN0YXRlbWVudHMgdW50 aWwgYSBjbG9zaW5nIHRva2VuIChFT0Ygb3IgJ30nKSBpcyBmb3VuZC4gKi8KKworCWZvciAoOzsp IHsKKwkJLyogQ2hlY2sgd2hldGhlciBzdGF0ZW1lbnQgbGlzdCBlbmRzLiAqLworCisJCWlmIChl eHBlY3RfZW9mKSB7CisJCQlpZiAoY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX0VP RikgeworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGNvbXBfY3R4LT5jdXJy X3Rva2VuLnQgPT0gRFVLX1RPS19SQ1VSTFkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJ CS8qIENoZWNrIHN0YXRlbWVudCB0eXBlIGJhc2VkIG9uIHRoZSBmaXJzdCB0b2tlbiB0eXBlLgor CQkgKgorCQkgKiBOb3RlOiBleHByZXNzaW9uIHBhcnNpbmcgaGVscGVycyBleHBlY3QgJ2N1cnJf dG9rJyB0bworCQkgKiBjb250YWluIHRoZSBmaXJzdCB0b2tlbiBvZiB0aGUgZXhwcmVzc2lvbiB1 cG9uIGVudHJ5LgorCQkgKi8KKworCQlEVUtfREREKERVS19ERERQUklOVCgiVE9LRU4gJWxkIChu b24td2hpdGVzcGFjZSwgbm9uLWNvbW1lbnQpIiwgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX3Rva2Vu LnQpKTsKKworCQlkdWtfX3BhcnNlX3N0bXQoY29tcF9jdHgsIHJlcywgYWxsb3dfc291cmNlX2Vs ZW0pOworCX0KKworCS8qIFJlZ0V4cCBpcyBhbGxvd2VkIC8gbm90IGFsbG93ZWQgZGVwZW5kaW5n IG9uIGNvbnRleHQuICBGb3IgZnVuY3Rpb24KKwkgKiBkZWNsYXJhdGlvbnMgUmVnRXhwIGlzIGFs bG93ZWQgYmVjYXVzZSBpdCBmb2xsb3dzIGEgZnVuY3Rpb24KKwkgKiBkZWNsYXJhdGlvbiBzdGF0 ZW1lbnQgYW5kIG1heSBhcHBlYXIgYXMgcGFydCBvZiB0aGUgbmV4dCBzdGF0ZW1lbnQuCisJICog Rm9yIGZ1bmN0aW9uIGV4cHJlc3Npb25zIFJlZ0V4cCBpcyBub3QgYWxsb3dlZCwgYW5kIGl0J3Mg cG9zc2libGUKKwkgKiB0byBkbyBzb21ldGhpbmcgbGlrZSAnKGZ1bmN0aW9uICgpIHt9IC8gMTIz KScuCisJICovCisJaWYgKHJlZ2V4cF9hZnRlcikgeworCQljb21wX2N0eC0+Y3Vycl9mdW5jLmFs bG93X3JlZ2V4cF9pbl9hZHYgPSAxOworCX0KKwlkdWtfX2FkdmFuY2UoY29tcF9jdHgpOworCisJ LyogVGVhciBkb3duIHN0YXRlLiAqLworCisJZHVrX3BvcF8yKHRocik7Cit9CisKKy8qCisgKiAg RGVjbGFyYXRpb24gYmluZGluZyBpbnN0YW50aWF0aW9uIGNvbmNlcHR1YWxseSBoYXBwZW5zIHdo ZW4gY2FsbGluZyBhCisgKiAgZnVuY3Rpb247IGZvciB1cyBpdCBlc3NlbnRpYWxseSBtZWFucyB0 aGF0IGZ1bmN0aW9uIHByb2xvZ3VlLiAgVGhlCisgKiAgY29uY2VwdHVhbCBwcm9jZXNzIGlzIGRl c2NyaWJlZCBpbiBFNSBTZWN0aW9uIDEwLjUuCisgKgorICogIFdlIG5lZWQgdG8ga2VlcCB0cmFj ayBvZiBhbGwgZW5jb3VudGVyZWQgaWRlbnRpZmllcnMgdG8gKDEpIGNyZWF0ZSBhbgorICogIGlk ZW50aWZpZXItdG8tcmVnaXN0ZXIgbWFwICgidmFybWFwIik7IGFuZCAoMikgZGV0ZWN0IGR1cGxp Y2F0ZQorICogIGRlY2xhcmF0aW9ucy4gIElkZW50aWZpZXJzIHdoaWNoIGFyZSBub3QgYm91bmQg dG8gcmVnaXN0ZXJzIHN0aWxsIG5lZWQKKyAqICB0byBiZSB0cmFja2VkIGZvciBkZXRlY3Rpbmcg ZHVwbGljYXRlcy4gIEN1cnJlbnRseSBzdWNoIGlkZW50aWZpZXJzCisgKiAgYXJlIHB1dCBpbnRv IHRoZSB2YXJtYXAgd2l0aCBhICdudWxsJyB2YWx1ZSwgd2hpY2ggaXMgbGF0ZXIgY2xlYW5lZCB1 cC4KKyAqCisgKiAgVG8gc3VwcG9ydCBmdW5jdGlvbnMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiB2 YXJpYWJsZSBhbmQgZnVuY3Rpb24KKyAqICBkZWNsYXJhdGlvbnMsIHJlZ2lzdGVycyBhcmUgbm90 IGFsbG9jYXRlZCBiZXlvbmQgYSBjZXJ0YWluIGxpbWl0OworICogIGFmdGVyIHRoYXQgbGltaXQs IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIG5lZWQgc2xvdyBwYXRoIGFjY2Vzcy4KKyAqICBBcmd1 bWVudHMgYXJlIGN1cnJlbnRseSBhbHdheXMgcmVnaXN0ZXIgYm91bmQsIHdoaWNoIGltcG9zZXMg YSBoYXJkCisgKiAgKGFuZCByZWxhdGl2ZWx5IHNtYWxsKSBhcmd1bWVudCBjb3VudCBsaW1pdC4K KyAqCisgKiAgU29tZSBiaW5kaW5ncyBpbiBFNSBhcmUgbm90IGNvbmZpZ3VyYWJsZSAoPSBkZWxl dGFibGUpIGFuZCBhbG1vc3QgYWxsCisgKiAgYXJlIG11dGFibGUgKHdyaXRhYmxlKS4gIEV4Y2Vw dGlvbnMgYXJlOgorICoKKyAqICAgIC0gVGhlICdhcmd1bWVudHMnIGJpbmRpbmcsIGVzdGFibGlz aGVkIG9ubHkgaWYgbm8gc2hhZG93aW5nIGFyZ3VtZW50CisgKiAgICAgIG9yIGZ1bmN0aW9uIGRl Y2xhcmF0aW9uIGV4aXN0cy4gIFdlIGhhbmRsZSAnYXJndW1lbnRzJyBjcmVhdGlvbgorICogICAg ICBhbmQgYmluZGluZyB0aHJvdWdoIGFuIGV4cGxpY2l0IHNsb3cgcGF0aCBlbnZpcm9ubWVudCBy ZWNvcmQuCisgKgorICogICAgLSBUaGUgIm5hbWUiIGJpbmRpbmcgZm9yIGEgbmFtZWQgZnVuY3Rp b24gZXhwcmVzc2lvbi4gIFRoaXMgaXMgYWxzbworICogICAgICBoYW5kbGVkIHRocm91Z2ggYW4g ZXhwbGljaXQgc2xvdyBwYXRoIGVudmlyb25tZW50IHJlY29yZC4KKyAqLworCisvKiBYWFg6IGFk ZCBzdXBwb3J0IGZvciB2YXJpYWJsZXMgdG8gbm90IGJlIHJlZ2lzdGVyIGJvdW5kIGFsd2F5cywg dG8KKyAqIGhhbmRsZSBjYXNlcyB3aXRoIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgdmFyaWFibGVz PworICovCisKK0RVS19MT0NBTCB2b2lkIGR1a19faW5pdF92YXJtYXBfYW5kX3Byb2xvZ3VlX2Zv cl9wYXNzMihkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3JlZ2NvbnN0X3QgKm91dF9z dG10X3ZhbHVlX3JlZykgeworCWR1a19odGhyZWFkICp0aHIgPSBjb21wX2N0eC0+dGhyOworCWR1 a19oc3RyaW5nICpoX25hbWU7CisJZHVrX2Jvb2xfdCBjb25maWd1cmFibGVfYmluZGluZ3M7CisJ ZHVrX3VhcnJpZHhfdCBudW1fYXJnczsKKwlkdWtfdWFycmlkeF90IG51bV9kZWNsczsKKwlkdWtf cmVnY29uc3RfdCByY19uYW1lOworCWR1a19zbWFsbF91aW50X3QgZGVjbHZhcl9mbGFnczsKKwlk dWtfdWFycmlkeF90IGk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJZHVrX2lk eF90IGVudHJ5X3RvcDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMp CisJZW50cnlfdG9wID0gZHVrX2dldF90b3AodGhyKTsKKyNlbmRpZgorCisJLyoKKwkgKiAgUHJl bGltaW5hcmllcworCSAqLworCisJY29uZmlndXJhYmxlX2JpbmRpbmdzID0gY29tcF9jdHgtPmN1 cnJfZnVuYy5pc19ldmFsOworCURVS19EREQoRFVLX0RERFBSSU5UKCJjb25maWd1cmFibGVfYmlu ZGluZ3M9JWxkIiwgKGxvbmcpIGNvbmZpZ3VyYWJsZV9iaW5kaW5ncykpOworCisJLyogdmFybWFw IGlzIGFscmVhZHkgaW4gY29tcF9jdHgtPmN1cnJfZnVuYy52YXJtYXBfaWR4ICovCisKKwkvKgor CSAqICBGdW5jdGlvbiBmb3JtYWwgYXJndW1lbnRzLCBhbHdheXMgYm91bmQgdG8gcmVnaXN0ZXJz CisJICogICh0aGVyZSdzIG5vIHN1cHBvcnQgZm9yIHNodWZmbGluZyB0aGVtIG5vdykuCisJICov CisKKwludW1fYXJncyA9IChkdWtfdWFycmlkeF90KSBkdWtfZ2V0X2xlbmd0aCh0aHIsIGNvbXBf Y3R4LT5jdXJyX2Z1bmMuYXJnbmFtZXNfaWR4KTsKKwlEVUtfREREKERVS19ERERQUklOVCgibnVt X2FyZ3M9JWxkIiwgKGxvbmcpIG51bV9hcmdzKSk7CisJLyogWFhYOiBjaGVjayBudW1fYXJncyAq LworCisJZm9yIChpID0gMDsgaSA8IG51bV9hcmdzOyBpKyspIHsKKwkJZHVrX2dldF9wcm9wX2lu ZGV4KHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy5hcmduYW1lc19pZHgsIGkpOworCQloX25hbWUg PSBkdWtfa25vd25faHN0cmluZyh0aHIsIC0xKTsKKworCQlpZiAoY29tcF9jdHgtPmN1cnJfZnVu Yy5pc19zdHJpY3QpIHsKKwkJCWlmIChkdWtfX2hzdHJpbmdfaXNfZXZhbF9vcl9hcmd1bWVudHMo Y29tcF9jdHgsIGhfbmFtZSkpIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiYXJnIG5hbWVk ICdldmFsJyBvciAnYXJndW1lbnRzJyBpbiBzdHJpY3QgbW9kZSAtPiBTeW50YXhFcnJvciIpKTsK KwkJCQlnb3RvIGVycm9yX2FyZ25hbWU7CisJCQl9CisJCQlkdWtfZHVwX3RvcCh0aHIpOworCQkJ aWYgKGR1a19oYXNfcHJvcCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMudmFybWFwX2lkeCkpIHsK KwkJCQlEVUtfREREKERVS19ERERQUklOVCgiZHVwbGljYXRlIGFyZyBuYW1lIGluIHN0cmljdCBt b2RlIC0+IFN5bnRheEVycm9yIikpOworCQkJCWdvdG8gZXJyb3JfYXJnbmFtZTsKKwkJCX0KKwor CQkJLyogRW5zdXJlIGFyZ3VtZW50IG5hbWUgaXMgbm90IGEgcmVzZXJ2ZWQgd29yZCBpbiBjdXJy ZW50CisJCQkgKiAoZmluYWwpIHN0cmljdG5lc3MuICBGb3JtYWwgYXJndW1lbnQgcGFyc2luZyBt YXkgbm90CisJCQkgKiBjYXRjaCByZXNlcnZlZCBuYW1lcyBpZiBzdHJpY3RuZXNzIGNoYW5nZXMg ZHVyaW5nCisJCQkgKiBwYXJzaW5nLgorCQkJICoKKwkJCSAqIFdlIG9ubHkgbmVlZCB0byBkbyB0 aGlzIGluIHN0cmljdCBtb2RlIGJlY2F1c2Ugbm9uLXN0cmljdAorCQkJICoga2V5d29yZCBhcmUg YWx3YXlzIGRldGVjdGVkIGluIGZvcm1hbCBhcmd1bWVudCBwYXJzaW5nLgorCQkJICovCisKKwkJ CWlmIChEVUtfSFNUUklOR19IQVNfU1RSSUNUX1JFU0VSVkVEX1dPUkQoaF9uYW1lKSkgeworCQkJ CWdvdG8gZXJyb3JfYXJnbmFtZTsKKwkJCX0KKwkJfQorCisJCS8qIG92ZXJ3cml0ZSBhbnkgcHJl dmlvdXMgYmluZGluZyBvZiB0aGUgc2FtZSBuYW1lOyB0aGUgZWZmZWN0IGlzCisJCSAqIHRoYXQg bGFzdCBhcmd1bWVudCBvZiBhIGNlcnRhaW4gbmFtZSB3aW5zLgorCQkgKi8KKworCQkvKiBvbmx5 IGZ1bmN0aW9ucyBjYW4gaGF2ZSBhcmd1bWVudHMgKi8KKwkJRFVLX0FTU0VSVChjb21wX2N0eC0+ Y3Vycl9mdW5jLmlzX2Z1bmN0aW9uKTsKKwkJZHVrX3B1c2hfdWFycmlkeCh0aHIsIGkpOyAgLyog LT4gWyAuLi4gbmFtZSBpbmRleCBdICovCisJCWR1a19wdXRfcHJvcCh0aHIsIGNvbXBfY3R4LT5j dXJyX2Z1bmMudmFybWFwX2lkeCk7IC8qIC0+IFsgLi4uIF0gKi8KKworCQkvKiBubyBjb2RlIG5l ZWRzIHRvIGJlIGVtaXR0ZWQsIHRoZSByZWdzIGFscmVhZHkgaGF2ZSB2YWx1ZXMgKi8KKwl9CisK KwkvKiB1c2UgdGVtcF9uZXh0IGZvciB0cmFja2luZyByZWdpc3RlciBhbGxvY2F0aW9ucyAqLwor CURVS19fU0VUVEVNUF9DSEVDS01BWChjb21wX2N0eCwgKGR1a19yZWdjb25zdF90KSBudW1fYXJn cyk7CisKKwkvKgorCSAqICBBZnRlciBhcmd1bWVudHMsIGFsbG9jYXRlIHNwZWNpYWwgcmVnaXN0 ZXJzIChsaWtlIHNodWZmbGluZyB0ZW1wcykKKwkgKi8KKworCWlmIChvdXRfc3RtdF92YWx1ZV9y ZWcpIHsKKwkJKm91dF9zdG10X3ZhbHVlX3JlZyA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KTsK Kwl9CisJaWYgKGNvbXBfY3R4LT5jdXJyX2Z1bmMubmVlZHNfc2h1ZmZsZSkgeworCQlkdWtfcmVn Y29uc3RfdCBzaHVmZmxlX2Jhc2UgPSBEVUtfX0FMTE9DVEVNUFMoY29tcF9jdHgsIDMpOworCQlj b21wX2N0eC0+Y3Vycl9mdW5jLnNodWZmbGUxID0gc2h1ZmZsZV9iYXNlOworCQljb21wX2N0eC0+ Y3Vycl9mdW5jLnNodWZmbGUyID0gc2h1ZmZsZV9iYXNlICsgMTsKKwkJY29tcF9jdHgtPmN1cnJf ZnVuYy5zaHVmZmxlMyA9IHNodWZmbGVfYmFzZSArIDI7CisJCURVS19EKERVS19EUFJJTlQoInNo dWZmbGUgcmVnaXN0ZXJzIG5lZWRlZCBieSBmdW5jdGlvbiwgYWxsb2NhdGVkOiAlbGQgJWxkICVs ZCIsCisJCSAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuc2h1ZmZs ZTEsCisJCSAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuc2h1ZmZs ZTIsCisJCSAgICAgICAgICAgICAgICAgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMuc2h1ZmZs ZTMpKTsKKwl9CisJaWYgKGNvbXBfY3R4LT5jdXJyX2Z1bmMudGVtcF9uZXh0ID4gMHgxMDApIHsK KwkJRFVLX0QoRFVLX0RQUklOVCgibm90IGVub3VnaCA4LWJpdCByZWdzOiB0ZW1wX25leHQ9JWxk IiwgKGxvbmcpIGNvbXBfY3R4LT5jdXJyX2Z1bmMudGVtcF9uZXh0KSk7CisJCWdvdG8gZXJyb3Jf b3V0b2ZyZWdzOworCX0KKworCS8qCisJICogIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucworCSAqLwor CisJbnVtX2RlY2xzID0gKGR1a191YXJyaWR4X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgY29tcF9j dHgtPmN1cnJfZnVuYy5kZWNsc19pZHgpOworCURVS19EREQoRFVLX0RERFBSSU5UKCJudW1fZGVj bHM9JWxkIC0+ICUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG51bV9kZWNscywK KwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgY29t cF9jdHgtPmN1cnJfZnVuYy5kZWNsc19pZHgpKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV9kZWNs czsgaSArPSAyKSB7CisJCWR1a19pbnRfdCBkZWNsX3R5cGU7CisJCWR1a19pbnRfdCBmbnVtOwor CisJCWR1a19nZXRfcHJvcF9pbmRleCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuZGVjbHNfaWR4 LCBpICsgMSk7ICAvKiBkZWNsIHR5cGUgKi8KKwkJZGVjbF90eXBlID0gZHVrX3RvX2ludCh0aHIs IC0xKTsKKwkJZm51bSA9IGRlY2xfdHlwZSA+PiA4OyAgLyogWFhYOiBtYWNyb3MgKi8KKwkJZGVj bF90eXBlID0gZGVjbF90eXBlICYgMHhmZjsKKwkJZHVrX3BvcCh0aHIpOworCisJCWlmIChkZWNs X3R5cGUgIT0gRFVLX0RFQ0xfVFlQRV9GVU5DKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWR1 a19nZXRfcHJvcF9pbmRleCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuZGVjbHNfaWR4LCBpKTsg IC8qIGRlY2wgbmFtZSAqLworCisJCS8qIFhYWDogc3BpbGxpbmcgKi8KKwkJaWYgKGNvbXBfY3R4 LT5jdXJyX2Z1bmMuaXNfZnVuY3Rpb24pIHsKKwkJCWR1a19yZWdjb25zdF90IHJlZ19iaW5kOwor CQkJZHVrX2R1cF90b3AodGhyKTsKKwkJCWlmIChkdWtfaGFzX3Byb3AodGhyLCBjb21wX2N0eC0+ Y3Vycl9mdW5jLnZhcm1hcF9pZHgpKSB7CisJCQkJLyogc2hhZG93ZWQ7IHVwZGF0ZSB2YWx1ZSAq LworCQkJCWR1a19kdXBfdG9wKHRocik7CisJCQkJZHVrX2dldF9wcm9wKHRociwgY29tcF9jdHgt PmN1cnJfZnVuYy52YXJtYXBfaWR4KTsKKwkJCQlyZWdfYmluZCA9IGR1a190b19pbnQodGhyLCAt MSk7ICAvKiBbIC4uLiBuYW1lIHJlZ19iaW5kIF0gKi8KKwkJCQlkdWtfX2VtaXRfYV9iYyhjb21w X2N0eCwKKwkJCQkgICAgICAgICAgICAgICBEVUtfT1BfQ0xPU1VSRSwKKwkJCQkgICAgICAgICAg ICAgICByZWdfYmluZCwKKwkJCQkgICAgICAgICAgICAgICAoZHVrX3JlZ2NvbnN0X3QpIGZudW0p OworCQkJfSBlbHNlIHsKKwkJCQkvKiBmdW5jdGlvbjogYWx3YXlzIHJlZ2lzdGVyIGJvdW5kICov CisJCQkJcmVnX2JpbmQgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCQkJZHVrX19lbWl0 X2FfYmMoY29tcF9jdHgsCisJCQkJICAgICAgICAgICAgICAgRFVLX09QX0NMT1NVUkUsCisJCQkJ ICAgICAgICAgICAgICAgcmVnX2JpbmQsCisJCQkJICAgICAgICAgICAgICAgKGR1a19yZWdjb25z dF90KSBmbnVtKTsKKwkJCQlkdWtfcHVzaF9pbnQodGhyLCAoZHVrX2ludF90KSByZWdfYmluZCk7 CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbiBmb3IgZ2xvYmFs L2V2YWwgY29kZSBpcyBlbWl0dGVkIGV2ZW4KKwkJCSAqIGZvciBkdXBsaWNhdGVzLCBiZWNhdXNl IG9mIEU1IFNlY3Rpb24gMTAuNSwgc3RlcCA1LmUgb2YKKwkJCSAqIEU1LjEgKHNwZWNpYWwgYmVo YXZpb3IgZm9yIHZhcmlhYmxlIGJvdW5kIHRvIGdsb2JhbCBvYmplY3QpLgorCQkJICoKKwkJCSAq IERFQ0xWQVIgd2lsbCBub3QgcmUtZGVjbGFyZSBhIHZhcmlhYmxlIGFzIHN1Y2gsIGJ1dCB3aWxs CisJCQkgKiB1cGRhdGUgdGhlIGJpbmRpbmcgdmFsdWUuCisJCQkgKi8KKworCQkJZHVrX3JlZ2Nv bnN0X3QgcmVnX3RlbXAgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisJCQlkdWtfZHVwX3Rv cCh0aHIpOworCQkJcmNfbmFtZSA9IGR1a19fZ2V0Y29uc3QoY29tcF9jdHgpOworCQkJZHVrX3B1 c2hfbnVsbCh0aHIpOworCisJCQlkdWtfX2VtaXRfYV9iYyhjb21wX2N0eCwKKwkJCSAgICAgICAg ICAgICAgIERVS19PUF9DTE9TVVJFLAorCQkJICAgICAgICAgICAgICAgcmVnX3RlbXAsCisJCQkg ICAgICAgICAgICAgICAoZHVrX3JlZ2NvbnN0X3QpIGZudW0pOworCisJCQlkZWNsdmFyX2ZsYWdz ID0gRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEUgfAorCQkJICAgICAgICAgICAgICAgIERVS19Q Uk9QREVTQ19GTEFHX0VOVU1FUkFCTEUgfAorCQkJICAgICAgICAgICAgICAgIERVS19CQ19ERUNM VkFSX0ZMQUdfRlVOQ19ERUNMOworCisJCQlpZiAoY29uZmlndXJhYmxlX2JpbmRpbmdzKSB7CisJ CQkJZGVjbHZhcl9mbGFncyB8PSBEVUtfUFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEU7CisJCQl9 CisKKwkJCWR1a19fZW1pdF9hX2JfYyhjb21wX2N0eCwKKwkJCSAgICAgICAgICAgICAgICBEVUtf T1BfREVDTFZBUiB8IERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQSB8IERVS19fRU1JVF9GTEFH X0JDX1JFR0NPTlNULAorCQkJICAgICAgICAgICAgICAgIChkdWtfcmVnY29uc3RfdCkgZGVjbHZh cl9mbGFncyAvKmZsYWdzKi8sCisJCQkgICAgICAgICAgICAgICAgcmNfbmFtZSAvKm5hbWUqLywK KwkJCSAgICAgICAgICAgICAgICByZWdfdGVtcCAvKnZhbHVlKi8pOworCisJCQlEVUtfX1NFVFRF TVAoY29tcF9jdHgsIHJlZ190ZW1wKTsgIC8qIGZvcmdldCB0ZW1wICovCisJCX0KKworCQlEVUtf REREKERVS19ERERQUklOVCgiZnVuY3Rpb24gZGVjbGFyYXRpb24gdG8gdmFybWFwOiAlIVQgLT4g JSFUIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0 aHIsIC0yKSwKKwkJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZh bCh0aHIsIC0xKSkpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJCURVS19BU1NF UlQoRFVLX1RWQUxfSVNfTlVMTChkdWtfZ2V0X3R2YWwodGhyLCAtMSkpIHx8IERVS19UVkFMX0lT X0ZBU1RJTlQoZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisjZW5kaWYKKwkJZHVrX3B1dF9wcm9w KHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy52YXJtYXBfaWR4KTsgIC8qIFsgLi4uIG5hbWUgcmVn L251bGwgXSAtPiBbIC4uLiBdICovCisJfQorCisJLyoKKwkgKiAgJ2FyZ3VtZW50cycgYmluZGlu ZyBpcyBzcGVjaWFsOyBpZiBhIHNoYWRvd2luZyBhcmd1bWVudCBvcgorCSAqICBmdW5jdGlvbiBk ZWNsYXJhdGlvbiBleGlzdHMsIGFuIGFyZ3VtZW50cyBvYmplY3Qgd2lsbAorCSAqICBkZWZpbml0 ZWx5IG5vdCBiZSBuZWVkZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgaWRlbnRpZmllcgor CSAqICAnYXJndW1lbnRzJyBpcyByZWZlcmVuY2VkIGluc2lkZSB0aGUgZnVuY3Rpb24gYm9keS4K KwkgKi8KKworCWlmIChkdWtfaGFzX3Byb3Bfc3RyaWR4KHRociwgY29tcF9jdHgtPmN1cnJfZnVu Yy52YXJtYXBfaWR4LCBEVUtfU1RSSURYX0xDX0FSR1VNRU5UUykpIHsKKwkJRFVLX0RERChEVUtf REREUFJJTlQoIidhcmd1bWVudHMnIGlzIHNoYWRvd2VkIGJ5IGFyZ3VtZW50IG9yIGZ1bmN0aW9u IGRlY2xhcmF0aW9uICIKKwkJICAgICAgICAgICAgICAgICAgICAgIi0+IGFyZ3VtZW50cyBvYmpl Y3QgY3JlYXRpb24gY2FuIGJlIHNraXBwZWQiKSk7CisJCWNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNf YXJndW1lbnRzX3NoYWRvd2VkID0gMTsKKwl9CisKKwkvKgorCSAqICBWYXJpYWJsZSBkZWNsYXJh dGlvbnMuCisJICoKKwkgKiAgVW5saWtlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgdmFyaWFibGUg ZGVjbGFyYXRpb24gdmFsdWVzIGRvbid0IGdldAorCSAqICBhc3NpZ25lZCBvbiBlbnRyeS4gIElm IGEgYmluZGluZyBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBqdXN0CisJICogIGln bm9yZSBpdCBzaWxlbnRseS4KKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBudW1fZGVjbHM7IGkg Kz0gMikgeworCQlkdWtfaW50X3QgZGVjbF90eXBlOworCisJCWR1a19nZXRfcHJvcF9pbmRleCh0 aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuZGVjbHNfaWR4LCBpICsgMSk7ICAvKiBkZWNsIHR5cGUg Ki8KKwkJZGVjbF90eXBlID0gZHVrX3RvX2ludCh0aHIsIC0xKTsKKwkJZGVjbF90eXBlID0gZGVj bF90eXBlICYgMHhmZjsKKwkJZHVrX3BvcCh0aHIpOworCisJCWlmIChkZWNsX3R5cGUgIT0gRFVL X0RFQ0xfVFlQRV9WQVIpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHVrX2dldF9wcm9wX2lu ZGV4KHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy5kZWNsc19pZHgsIGkpOyAgLyogZGVjbCBuYW1l ICovCisKKwkJaWYgKGR1a19oYXNfcHJvcCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMudmFybWFw X2lkeCkpIHsKKwkJCS8qIHNoYWRvd2VkLCBpZ25vcmUgKi8KKwkJfSBlbHNlIHsKKwkJCWR1a19n ZXRfcHJvcF9pbmRleCh0aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuZGVjbHNfaWR4LCBpKTsgIC8q IGRlY2wgbmFtZSAqLworCQkJaF9uYW1lID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCAtMSk7CisK KwkJCWlmIChoX25hbWUgPT0gRFVLX0hUSFJFQURfU1RSSU5HX0xDX0FSR1VNRU5UUyh0aHIpICYm CisJCQkgICAgIWNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfYXJndW1lbnRzX3NoYWRvd2VkKSB7CisJ CQkJLyogRTUgU2VjdGlvbiBzdGVwcyA3LTggKi8KKwkJCQlEVUtfREREKERVS19ERERQUklOVCgi J2FyZ3VtZW50cycgbm90IHNoYWRvd2VkIGJ5IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sICIKKwkJ CQkgICAgICAgICAgICAgICAgICAgICAiYnV0IGFwcGVhcnMgYXMgYSB2YXJpYWJsZSBkZWNsYXJh dGlvbiAtPiB0cmVhdCBhcyAiCisJCQkJICAgICAgICAgICAgICAgICAgICAgImEgbm8tb3AgZm9y IHZhcmlhYmxlIGRlY2xhcmF0aW9uIHB1cnBvc2VzIikpOworCQkJCWR1a19wb3AodGhyKTsKKwkJ CQljb250aW51ZTsKKwkJCX0KKworCQkJLyogWFhYOiBzcGlsbGluZyAqLworCQkJaWYgKGNvbXBf Y3R4LT5jdXJyX2Z1bmMuaXNfZnVuY3Rpb24pIHsKKwkJCQlkdWtfcmVnY29uc3RfdCByZWdfYmlu ZCA9IERVS19fQUxMT0NURU1QKGNvbXBfY3R4KTsKKwkJCQkvKiBubyBuZWVkIHRvIGluaXQgcmVn LCBpdCB3aWxsIGJlIHVuZGVmaW5lZCBvbiBlbnRyeSAqLworCQkJCWR1a19wdXNoX2ludCh0aHIs IChkdWtfaW50X3QpIHJlZ19iaW5kKTsKKwkJCX0gZWxzZSB7CisJCQkJZHVrX2R1cF90b3AodGhy KTsKKwkJCQlyY19uYW1lID0gZHVrX19nZXRjb25zdChjb21wX2N0eCk7CisJCQkJZHVrX3B1c2hf bnVsbCh0aHIpOworCisJCQkJZGVjbHZhcl9mbGFncyA9IERVS19QUk9QREVTQ19GTEFHX1dSSVRB QkxFIHwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgIERVS19QUk9QREVTQ19GTEFHX0VOVU1F UkFCTEU7CisJCQkJaWYgKGNvbmZpZ3VyYWJsZV9iaW5kaW5ncykgeworCQkJCQlkZWNsdmFyX2Zs YWdzIHw9IERVS19QUk9QREVTQ19GTEFHX0NPTkZJR1VSQUJMRTsKKwkJCQl9CisKKwkJCQlkdWtf X2VtaXRfYV9iX2MoY29tcF9jdHgsCisJCQkJICAgICAgICAgICAgICAgIERVS19PUF9ERUNMVkFS IHwgRFVLX19FTUlUX0ZMQUdfTk9fU0hVRkZMRV9BIHwgRFVLX19FTUlUX0ZMQUdfQkNfUkVHQ09O U1QsCisJCQkJICAgICAgICAgICAgICAgIChkdWtfcmVnY29uc3RfdCkgZGVjbHZhcl9mbGFncyAv KmZsYWdzKi8sCisJCQkJICAgICAgICAgICAgICAgIHJjX25hbWUgLypuYW1lKi8sCisJCQkJICAg ICAgICAgICAgICAgIDAgLyp2YWx1ZSovKTsKKwkJCX0KKworCQkJZHVrX3B1dF9wcm9wKHRociwg Y29tcF9jdHgtPmN1cnJfZnVuYy52YXJtYXBfaWR4KTsgIC8qIFsgLi4uIG5hbWUgcmVnL251bGwg XSAtPiBbIC4uLiBdICovCisJCX0KKwl9CisKKwkvKgorCSAqICBXcmFwIHVwCisJICovCisKKwlE VUtfREREKERVS19ERERQUklOVCgidmFybWFwOiAlIVQsIGlzX2FyZ3VtZW50c19zaGFkb3dlZD0l bGQiLAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhy LCBjb21wX2N0eC0+Y3Vycl9mdW5jLnZhcm1hcF9pZHgpLAorCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSBjb21wX2N0eC0+Y3Vycl9mdW5jLmlzX2FyZ3VtZW50c19zaGFkb3dlZCkpOworCisJ RFVLX0FTU0VSVF9UT1AodGhyLCBlbnRyeV90b3ApOworCXJldHVybjsKKworIGVycm9yX291dG9m cmVnczoKKwlEVUtfRVJST1JfUkFOR0UodGhyLCBEVUtfU1RSX1JFR19MSU1JVCk7CisJRFVLX1dP X05PUkVUVVJOKHJldHVybjspOworCisgZXJyb3JfYXJnbmFtZToKKwlEVUtfRVJST1JfU1lOVEFY KHRociwgRFVLX1NUUl9JTlZBTElEX0FSR19OQU1FKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJu Oyk7Cit9CisKKy8qCisgKiAgUGFyc2UgYSBmdW5jdGlvbi1ib2R5LWxpa2UgZXhwcmVzc2lvbiAo RnVuY3Rpb25Cb2R5IG9yIFByb2dyYW0KKyAqICBpbiBFNSBncmFtbWFyKSB1c2luZyBhIHR3by1w YXNzIHBhcnNlLiAgVGhlIHByb2R1Y3Rpb25zIGFwcGVhcgorICogIGluIHRoZSBmb2xsb3dpbmcg Y29udGV4dHM6CisgKgorICogICAgLSBmdW5jdGlvbiBleHByZXNzaW9uCisgKiAgICAtIGZ1bmN0 aW9uIHN0YXRlbWVudAorICogICAgLSBmdW5jdGlvbiBkZWNsYXJhdGlvbgorICogICAgLSBnZXR0 ZXIgaW4gb2JqZWN0IGxpdGVyYWwKKyAqICAgIC0gc2V0dGVyIGluIG9iamVjdCBsaXRlcmFsCisg KiAgICAtIGdsb2JhbCBjb2RlCisgKiAgICAtIGV2YWwgY29kZQorICogICAgLSBGdW5jdGlvbiBj b25zdHJ1Y3RvciBib2R5CisgKgorICogIFRoaXMgZnVuY3Rpb24gb25seSBwYXJzZXMgdGhlIHN0 YXRlbWVudCBsaXN0IG9mIHRoZSBib2R5OyB0aGUgYXJndW1lbnQKKyAqICBsaXN0IGFuZCBwb3Nz aWJsZSBmdW5jdGlvbiBuYW1lIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci4KKyAq ICBGb3IgaW5zdGFuY2UsIGZvciBGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGFyZ3VtZW50IG5h bWVzIGFyZSBvcmlnaW5hbGx5CisgKiAgb24gdGhlIHZhbHVlIHN0YWNrLiAgVGhlIHBhcnNpbmcg b2Ygc3RhdGVtZW50cyBlbmRzIGVpdGhlciBhdCBhbiBFT0Ygb3IKKyAqICBhIGNsb3NpbmcgYnJh Y2U7IHRoaXMgaXMgY29udHJvbGxlZCBieSBhbiBpbnB1dCBmbGFnLgorICoKKyAqICBOb3RlIHRo YXQgdGhlcmUgYXJlIG1hbnkgZGlmZmVyZW5jZXMgYWZmZWN0aW5nIHBhcnNpbmcgYW5kIGV2ZW4g Y29kZQorICogIGdlbmVyYXRpb246CisgKgorICogICAgLSBHbG9iYWwgYW5kIGV2YWwgY29kZSBo YXZlIGFuIGltcGxpY2l0IHJldHVybiB2YWx1ZSBnZW5lcmF0ZWQKKyAqICAgICAgYnkgdGhlIGxh c3Qgc3RhdGVtZW50OyBmdW5jdGlvbiBjb2RlIGRvZXMgbm90CisgKgorICogICAgLSBHbG9iYWwg Y29kZSwgZXZhbCBjb2RlLCBhbmQgRnVuY3Rpb24gY29uc3RydWN0b3IgYm9keSBlbmQgaW4KKyAq ICAgICAgYW4gRU9GLCBvdGhlciBib2RpZXMgaW4gYSBjbG9zaW5nIGJyYWNlICgnfScpCisgKgor ICogIFVwb24gZW50cnksICdjdXJyX3RvaycgaXMgaWdub3JlZCBhbmQgdGhlIGZ1bmN0aW9uIHdp bGwgcHVsbCBpbiB0aGUKKyAqICBmaXJzdCB0b2tlbiBvbiBpdHMgb3duLiAgVXBvbiBleGl0LCAn Y3Vycl90b2snIGlzIHRoZSB0ZXJtaW5hdGluZworICogIHRva2VuIChFT0Ygb3IgY2xvc2luZyBi cmFjZSkuCisgKi8KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19wYXJzZV9mdW5jX2JvZHkoZHVrX2Nv bXBpbGVyX2N0eCAqY29tcF9jdHgsIGR1a19ib29sX3QgZXhwZWN0X2VvZiwgZHVrX2Jvb2xfdCBp bXBsaWNpdF9yZXR1cm5fdmFsdWUsIGR1a19ib29sX3QgcmVnZXhwX2FmdGVyLCBkdWtfc21hbGxf aW50X3QgZXhwZWN0X3Rva2VuKSB7CisJZHVrX2NvbXBpbGVyX2Z1bmMgKmZ1bmM7CisJZHVrX2h0 aHJlYWQgKnRocjsKKwlkdWtfcmVnY29uc3RfdCByZWdfc3RtdF92YWx1ZSA9IC0xOworCWR1a19s ZXhlcl9wb2ludCBsZXhfcHQ7CisJZHVrX3JlZ2NvbnN0X3QgdGVtcF9maXJzdDsKKwlkdWtfc21h bGxfaW50X3QgY29tcGlsZV9yb3VuZCA9IDE7CisKKwlEVUtfQVNTRVJUKGNvbXBfY3R4ICE9IE5V TEwpOworCisJdGhyID0gY29tcF9jdHgtPnRocjsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsK KworCWZ1bmMgPSAmY29tcF9jdHgtPmN1cnJfZnVuYzsKKwlEVUtfQVNTRVJUKGZ1bmMgIT0gTlVM TCk7CisKKwlEVUtfX1JFQ1VSU0lPTl9JTkNSRUFTRShjb21wX2N0eCwgdGhyKTsKKworCWR1a19y ZXF1aXJlX3N0YWNrKHRociwgRFVLX19GVU5DVElPTl9CT0RZX1JFUVVJUkVfU0xPVFMpOworCisJ LyoKKwkgKiAgU3RvcmUgbGV4ZXIgcG9zaXRpb24gZm9yIGEgbGF0ZXIgcmV3aW5kCisJICovCisK KwlEVUtfTEVYRVJfR0VUUE9JTlQoJmNvbXBfY3R4LT5sZXgsICZsZXhfcHQpOworCisJLyoKKwkg KiAgUHJvZ3JhbSBjb2RlIChnbG9iYWwgYW5kIGV2YWwgY29kZSkgaGFzIGFuIGltcGxpY2l0IHJl dHVybiB2YWx1ZQorCSAqICBmcm9tIHRoZSBsYXN0IHN0YXRlbWVudCB2YWx1ZSAoZS5nLiBldmFs KCIxOyAyKzM7IikgcmV0dXJucyAzKS4KKwkgKiAgVGhpcyBpcyBub3QgdGhlIGNhc2Ugd2l0aCBm dW5jdGlvbnMuICBJZiBpbXBsaWNpdCBzdGF0ZW1lbnQgcmV0dXJuCisJICogIHZhbHVlIGlzIHJl cXVlc3RlZCwgYWxsIHN0YXRlbWVudHMgYXJlIGNvZXJjZWQgdG8gYSByZWdpc3RlcgorCSAqICBh bGxvY2F0ZWQgaGVyZSwgYW5kIHVzZWQgaW4gdGhlIGltcGxpY2l0IHJldHVybiBzdGF0ZW1lbnQg YmVsb3cuCisJICovCisKKwkvKiBYWFg6IHRoaXMgaXMgcG9pbnRsZXNzIGhlcmUgYmVjYXVzZSBw YXNzIDEgaXMgdGhyb3ctYXdheSAqLworCWlmIChpbXBsaWNpdF9yZXR1cm5fdmFsdWUpIHsKKwkJ cmVnX3N0bXRfdmFsdWUgPSBEVUtfX0FMTE9DVEVNUChjb21wX2N0eCk7CisKKwkJLyogSWYgYW4g aW1wbGljaXQgcmV0dXJuIHZhbHVlIGlzIG5lZWRlZCBieSBjYWxsZXIsIGl0IG11c3QgYmUKKwkJ ICogaW5pdGlhbGl6ZWQgdG8gJ3VuZGVmaW5lZCcgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoZXRo ZXIgYW55CisJCSAqIG5vbi1lbXB0eSAod2hlcmUgImVtcHR5IiBpcyBhIGNvbnRpbnVhdGlvbiB0 eXBlLCBhbmQgZGlmZmVyZW50CisJCSAqIGZyb20gYW4gZW1wdHkgc3RhdGVtZW50KSBzdGF0ZW1l bnRzIHdpbGwgYmUgZXhlY3V0ZWQuCisJCSAqCisJCSAqIEhvd2V2ZXIsIHNpbmNlIDFzdCBwYXNz IGlzIGEgdGhyb3dhd2F5IG9uZSwgbm8gbmVlZCB0byBlbWl0CisJCSAqIGl0IGhlcmUuCisJCSAq LworI2lmIDAKKwkJZHVrX19lbWl0X2JjKGNvbXBfY3R4LAorCQkgICAgICAgICAgICAgRFVLX09Q X0xEVU5ERUYsCisJCSAgICAgICAgICAgICAwKTsKKyNlbmRpZgorCX0KKworCS8qCisJICogIEZp cnN0IHBhc3MuCisJICoKKwkgKiAgR2F0aGVyIHZhcmlhYmxlL2Z1bmN0aW9uIGRlY2xhcmF0aW9u cyBuZWVkZWQgZm9yIHNlY29uZCBwYXNzLgorCSAqICBDb2RlIGdlbmVyYXRlZCBpcyBkdW1teSBh bmQgZGlzY2FyZGVkLgorCSAqLworCisJZnVuYy0+aW5fZGlyZWN0aXZlX3Byb2xvZ3VlID0gMTsK KwlmdW5jLT5pbl9zY2FubmluZyA9IDE7CisJZnVuYy0+bWF5X2RpcmVjdF9ldmFsID0gMDsKKwlm dW5jLT5pZF9hY2Nlc3NfYXJndW1lbnRzID0gMDsKKwlmdW5jLT5pZF9hY2Nlc3Nfc2xvdyA9IDA7 CisJZnVuYy0+aWRfYWNjZXNzX3Nsb3dfb3duID0gMDsKKwlmdW5jLT5yZWdfc3RtdF92YWx1ZSA9 IHJlZ19zdG10X3ZhbHVlOworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQor CWZ1bmMtPm1pbl9saW5lID0gRFVLX0lOVF9NQVg7CisJZnVuYy0+bWF4X2xpbmUgPSAwOworI2Vu ZGlmCisKKwkvKiBkdWtfX3BhcnNlX3N0bXRzKCkgZXhwZWN0cyBjdXJyX3RvayB0byBiZSBzZXQ7 IHBhcnNlIGluICJhbGxvdworCSAqIHJlZ2V4cCBsaXRlcmFsIiBtb2RlIHdpdGggY3VycmVudCBz dHJpY3RuZXNzLgorCSAqLworCWlmIChleHBlY3RfdG9rZW4gPj0gMCkgeworCQkvKiBFYXRpbmcg YSBsZWZ0IGN1cmx5OyByZWdleHAgbW9kZSBpcyBhbGxvd2VkIGJ5IGxlZnQgY3VybHkKKwkJICog YmFzZWQgb24gZHVrX190b2tlbl9sYnBbXSBhdXRvbWF0aWNhbGx5LgorCQkgKi8KKwkJRFVLX0FT U0VSVChleHBlY3RfdG9rZW4gPT0gRFVLX1RPS19MQ1VSTFkpOworCQlkdWtfX3VwZGF0ZV9saW5l aW5mb19jdXJydG9rZW4oY29tcF9jdHgpOworCQlkdWtfX2FkdmFuY2VfZXhwZWN0KGNvbXBfY3R4 LCBleHBlY3RfdG9rZW4pOworCX0gZWxzZSB7CisJCS8qIE5lZWQgdG8gc2V0IGN1cnJfdG9rZW4u dCBiZWNhdXNlIGxleGluZyByZWdleHAgbW9kZSBkZXBlbmRzIG9uIGN1cnJlbnQKKwkJICogdG9r ZW4gdHlwZS4gIFplcm8gdmFsdWUgY2F1c2VzICJhbGxvdyByZWdleHAiIG1vZGUuCisJCSAqLwor CQljb21wX2N0eC0+Y3Vycl90b2tlbi50ID0gMDsKKwkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsK Kwl9CisKKwlEVUtfREREKERVS19ERERQUklOVCgiYmVnaW4gMXN0IHBhc3MiKSk7CisJZHVrX19w YXJzZV9zdG10cyhjb21wX2N0eCwKKwkgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgIC8q IGFsbG93IHNvdXJjZSBlbGVtZW50cyAqLworCSAgICAgICAgICAgICAgICAgZXhwZWN0X2VvZiwg ICAgLyogZXhwZWN0IEVPRiBpbnN0ZWFkIG9mIH0gKi8KKwkgICAgICAgICAgICAgICAgIHJlZ2V4 cF9hZnRlcik7IC8qIHJlZ2V4cCBhZnRlciAqLworCURVS19EREQoRFVLX0RERFBSSU5UKCJlbmQg MXN0IHBhc3MiKSk7CisKKwkvKgorCSAqICBTZWNvbmQgKGFuZCBwb3NzaWJseSB0aGlyZCkgcGFz cy4KKwkgKgorCSAqICBHZW5lcmF0ZSBhY3R1YWwgY29kZS4gIEluIG1vc3QgY2FzZXMgdGhlIG5l ZWQgZm9yIHNodWZmbGUKKwkgKiAgcmVnaXN0ZXJzIGlzIGRldGVjdGVkIGR1cmluZyBwYXNzIDEs IGJ1dCBpbiBzb21lIGNvcm5lciBjYXNlcworCSAqICB3ZSdsbCBvbmx5IGRldGVjdCBpdCBkdXJp bmcgcGFzcyAyIGFuZCBhIHRoaXJkIHBhc3MgaXMgdGhlbgorCSAqICBuZWVkZWQgKHNlZSBHSC0x MTUpLgorCSAqLworCisJZm9yICg7OykgeworCQlkdWtfYm9vbF90IG5lZWRzX3NodWZmbGVfYmVm b3JlID0gY29tcF9jdHgtPmN1cnJfZnVuYy5uZWVkc19zaHVmZmxlOworCQljb21waWxlX3JvdW5k Kys7CisKKwkJLyoKKwkJICogIFJld2luZCBsZXhlci4KKwkJICoKKwkJICogIGR1a19fcGFyc2Vf c3RtdHMoKSBleHBlY3RzIGN1cnJfdG9rIHRvIGJlIHNldDsgcGFyc2UgaW4gImFsbG93IHJlZ2V4 cAorCQkgKiAgbGl0ZXJhbCIgbW9kZSB3aXRoIGN1cnJlbnQgc3RyaWN0bmVzcy4KKwkJICoKKwkJ ICogIGN1cnJfdG9rZW4gbGluZSBudW1iZXIgaW5mbyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgZm9y IHBhc3MgMiBiZWZvcmUKKwkJICogIGdlbmVyYXRpbmcgcHJvbG9ndWUsIHRvIGVuc3VyZSBwcm9s b2d1ZSBieXRlY29kZSBnZXRzIG5pY2UgbGluZSBudW1iZXJzLgorCQkgKi8KKworCQlEVUtfRERE KERVS19ERERQUklOVCgicmV3aW5kIGxleGVyIikpOworCQlEVUtfTEVYRVJfU0VUUE9JTlQoJmNv bXBfY3R4LT5sZXgsICZsZXhfcHQpOworCQljb21wX2N0eC0+Y3Vycl90b2tlbi50ID0gMDsgIC8q IHRoaXMgaXMgbmVlZGVkIGZvciByZWdleHAgbW9kZSAqLworCQljb21wX2N0eC0+Y3Vycl90b2tl bi5zdGFydF9saW5lID0gMDsgIC8qIG5lZWRlZCBmb3IgbGluZSBudW1iZXIgdHJhY2tpbmcgKGJl Y29tZXMgcHJldl90b2tlbi5zdGFydF9saW5lKSAqLworCQlkdWtfX2FkdmFuY2UoY29tcF9jdHgp OworCisJCS8qCisJCSAqICBSZXNldCBmdW5jdGlvbiBzdGF0ZSBhbmQgcGVyZm9ybSByZWdpc3Rl ciBhbGxvY2F0aW9uLCB3aGljaCBjcmVhdGVzCisJCSAqICAndmFybWFwJyBmb3Igc2Vjb25kIHBh c3MuICBGdW5jdGlvbiBwcm9sb2d1ZSBmb3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLAorCQkgKiAg YmluZGluZyB2YWx1ZSBpbml0aWFsaXphdGlvbnMgZXRjIGlzIGVtaXR0ZWQgYXMgYSBieS1wcm9k dWN0LgorCQkgKgorCQkgKiAgU3RyaWN0IG1vZGUgcmVzdHJpY3Rpb25zIGZvciBkdXBsaWNhdGUg YW5kIGludmFsaWQgYXJndW1lbnQKKwkJICogIG5hbWVzIGFyZSBjaGVja2VkIGhlcmUgbm93IHRo YXQgd2Uga25vdyB3aGV0aGVyIHRoZSBmdW5jdGlvbgorCQkgKiAgaXMgYWN0dWFsbHkgc3RyaWN0 LiAgU2VlOiB0ZXN0LWRldi1zdHJpY3QtbW9kZS1ib3VuZGFyeS5qcy4KKwkJICoKKwkJICogIElu bmVyIGZ1bmN0aW9ucyBhcmUgY29tcGlsZWQgZHVyaW5nIHBhc3MgMSBhbmQgYXJlIG5vdCByZXNl dC4KKwkJICovCisKKwkJZHVrX19yZXNldF9mdW5jX2Zvcl9wYXNzMihjb21wX2N0eCk7CisJCWZ1 bmMtPmluX2RpcmVjdGl2ZV9wcm9sb2d1ZSA9IDE7CisJCWZ1bmMtPmluX3NjYW5uaW5nID0gMDsK KworCQkvKiBtdXN0IGJlIGFibGUgdG8gZW1pdCBjb2RlLCBhbGxvYyBjb25zdHMsIGV0Yy4gKi8K KworCQlkdWtfX2luaXRfdmFybWFwX2FuZF9wcm9sb2d1ZV9mb3JfcGFzczIoY29tcF9jdHgsCisJ CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1wbGljaXRfcmV0dXJu X3ZhbHVlID8gJnJlZ19zdG10X3ZhbHVlIDogTlVMTCkpOworCQlmdW5jLT5yZWdfc3RtdF92YWx1 ZSA9IHJlZ19zdG10X3ZhbHVlOworCisJCXRlbXBfZmlyc3QgPSBEVUtfX0dFVFRFTVAoY29tcF9j dHgpOworCisJCWZ1bmMtPnRlbXBfZmlyc3QgPSB0ZW1wX2ZpcnN0OworCQlmdW5jLT50ZW1wX25l eHQgPSB0ZW1wX2ZpcnN0OworCQlmdW5jLT5zdG10X25leHQgPSAwOworCQlmdW5jLT5sYWJlbF9u ZXh0ID0gMDsKKworCQkvKiBYWFg6IGluaXQgb3IgYXNzZXJ0IGNhdGNoIGRlcHRoIGV0YyAtLSBh bGwgdmFsdWVzICovCisJCWZ1bmMtPmlkX2FjY2Vzc19hcmd1bWVudHMgPSAwOworCQlmdW5jLT5p ZF9hY2Nlc3Nfc2xvdyA9IDA7CisJCWZ1bmMtPmlkX2FjY2Vzc19zbG93X293biA9IDA7CisKKwkJ LyoKKwkJICogIENoZWNrIGZ1bmN0aW9uIG5hbWUgdmFsaWRpdHkgbm93IHRoYXQgd2Uga25vdyBz dHJpY3RuZXNzLgorCQkgKiAgVGhpcyBvbmx5IGFwcGxpZXMgdG8gZnVuY3Rpb24gZGVjbGFyYXRp b25zIGFuZCBleHByZXNzaW9ucywKKwkJICogIG5vdCBzZXR0ZXIvZ2V0dGVyIG5hbWUuCisJCSAq CisJCSAqICBTZWU6IHRlc3QtZGV2LXN0cmljdC1tb2RlLWJvdW5kYXJ5LmpzCisJCSAqLworCisJ CWlmIChmdW5jLT5pc19mdW5jdGlvbiAmJiAhZnVuYy0+aXNfc2V0Z2V0ICYmIGZ1bmMtPmhfbmFt ZSAhPSBOVUxMKSB7CisJCQlpZiAoZnVuYy0+aXNfc3RyaWN0KSB7CisJCQkJaWYgKGR1a19faHN0 cmluZ19pc19ldmFsX29yX2FyZ3VtZW50cyhjb21wX2N0eCwgZnVuYy0+aF9uYW1lKSkgeworCQkJ CQlEVUtfREREKERVS19ERERQUklOVCgiZnVuYyBuYW1lIGlzICdldmFsJyBvciAnYXJndW1lbnRz JyBpbiBzdHJpY3QgbW9kZSIpKTsKKwkJCQkJZ290byBlcnJvcl9mdW5jbmFtZTsKKwkJCQl9CisJ CQkJaWYgKERVS19IU1RSSU5HX0hBU19TVFJJQ1RfUkVTRVJWRURfV09SRChmdW5jLT5oX25hbWUp KSB7CisJCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJmdW5jIG5hbWUgaXMgYSByZXNlcnZlZCB3 b3JkIGluIHN0cmljdCBtb2RlIikpOworCQkJCQlnb3RvIGVycm9yX2Z1bmNuYW1lOworCQkJCX0K KwkJCX0gZWxzZSB7CisJCQkJaWYgKERVS19IU1RSSU5HX0hBU19SRVNFUlZFRF9XT1JEKGZ1bmMt PmhfbmFtZSkgJiYKKwkJCQkgICAgIURVS19IU1RSSU5HX0hBU19TVFJJQ1RfUkVTRVJWRURfV09S RChmdW5jLT5oX25hbWUpKSB7CisJCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJmdW5jIG5hbWUg aXMgYSByZXNlcnZlZCB3b3JkIGluIG5vbi1zdHJpY3QgbW9kZSIpKTsKKwkJCQkJZ290byBlcnJv cl9mdW5jbmFtZTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiAgU2Vjb25kIHBhc3Mg cGFyc2luZy4KKwkJICovCisKKwkJaWYgKGltcGxpY2l0X3JldHVybl92YWx1ZSkgeworCQkJLyog RGVmYXVsdCBpbXBsaWNpdCByZXR1cm4gdmFsdWUuICovCisJCQlkdWtfX2VtaXRfYmMoY29tcF9j dHgsCisJCQkgICAgICAgICAgICAgRFVLX09QX0xEVU5ERUYsCisJCQkgICAgICAgICAgICAgMCk7 CisJCX0KKworCQlEVUtfREREKERVS19ERERQUklOVCgiYmVnaW4gMm5kIHBhc3MiKSk7CisJCWR1 a19fcGFyc2Vfc3RtdHMoY29tcF9jdHgsCisJCSAgICAgICAgICAgICAgICAgMSwgICAgICAgICAg ICAgLyogYWxsb3cgc291cmNlIGVsZW1lbnRzICovCisJCSAgICAgICAgICAgICAgICAgZXhwZWN0 X2VvZiwgICAgLyogZXhwZWN0IEVPRiBpbnN0ZWFkIG9mIH0gKi8KKwkJICAgICAgICAgICAgICAg ICByZWdleHBfYWZ0ZXIpOyAvKiByZWdleHAgYWZ0ZXIgKi8KKwkJRFVLX0RERChEVUtfREREUFJJ TlQoImVuZCAybmQgcGFzcyIpKTsKKworCQlkdWtfX3VwZGF0ZV9saW5laW5mb19jdXJydG9rZW4o Y29tcF9jdHgpOworCisJCWlmIChuZWVkc19zaHVmZmxlX2JlZm9yZSA9PSBjb21wX2N0eC0+Y3Vy cl9mdW5jLm5lZWRzX3NodWZmbGUpIHsKKwkJCS8qIFNodWZmbGUgZGVjaXNpb24gbm90IGNoYW5n ZWQuICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoY29tcGlsZV9yb3VuZCA+PSAzKSB7CisJCQkv KiBTaG91bGQgbmV2ZXIgaGFwcGVuIGJ1dCBhdm9pZCBpbmZpbml0ZSBsb29wIGp1c3QgaW4gY2Fz ZS4gKi8KKwkJCURVS19EKERVS19EUFJJTlQoIm1vcmUgdGhhbiAzIGNvbXBpbGUgcGFzc2VzIG5l ZWRlZCwgc2hvdWxkIG5ldmVyIGhhcHBlbiIpKTsKKwkJCURVS19FUlJPUl9JTlRFUk5BTCh0aHIp OworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQl9CisJCURVS19EKERVS19EUFJJTlQo Im5lZWQgYWRkaXRpb25hbCByb3VuZCB0byBjb21waWxlIGZ1bmN0aW9uLCByb3VuZCBub3cgJWQi LCAoaW50KSBjb21waWxlX3JvdW5kKSk7CisJfQorCisJLyoKKwkgKiAgRW1pdCBhIGZpbmFsIFJF VFVSTi4KKwkgKgorCSAqICBJdCB3b3VsZCBiZSBuaWNlIHRvIGF2b2lkIGVtaXR0aW5nIGFuIHVu bmVjZXNzYXJ5ICJyZXR1cm4iIG9wY29kZQorCSAqICBpZiB0aGUgY3VycmVudCBQQyBpcyBub3Qg cmVhY2hhYmxlLiAgSG93ZXZlciwgdGhpcyBjYW5ub3QgYmUgcmVsaWFibHkKKwkgKiAgZGV0ZWN0 ZWQ7IGV2ZW4gaWYgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uIGlzIGFuIHVuY29uZGl0aW9uYWwg anVtcCwKKwkgKiAgdGhlcmUgbWF5IGJlIGEgcHJldmlvdXMganVtcCB3aGljaCBqdW1wcyB0byBj dXJyZW50IFBDICh3aGljaCBpcyB0aGUKKwkgKiAgY2FzZSBmb3IgaXRlcmF0aW9uIGFuZCBjb25k aXRpb25hbCBzdGF0ZW1lbnRzLCBmb3IgaW5zdGFuY2UpLgorCSAqLworCisJLyogWFhYOiByZXF1 ZXN0IGEgImxhc3Qgc3RhdGVtZW50IGlzIHRlcm1pbmFsIiBmcm9tIGR1a19fcGFyc2Vfc3RtdCgp IGFuZCBkdWtfX3BhcnNlX3N0bXRzKCk7CisJICogd2UgY291bGQgYXZvaWQgdGhlIGxhc3QgUkVU VVJOIGlmIHdlIGNvdWxkIGVuc3VyZSB0aGVyZSBpcyBubyB3YXkgdG8gZ2V0IGhlcmUKKwkgKiAo ZGlyZWN0bHkgb3IgdmlhIGEganVtcCkKKwkgKi8KKworCURVS19BU1NFUlQoY29tcF9jdHgtPmN1 cnJfZnVuYy5jYXRjaF9kZXB0aCA9PSAwKTsKKwlpZiAocmVnX3N0bXRfdmFsdWUgPj0gMCkgewor CQlEVUtfQVNTRVJUKERVS19fSVNSRUcocmVnX3N0bXRfdmFsdWUpKTsKKwkJZHVrX19lbWl0X2Jj KGNvbXBfY3R4LCBEVUtfT1BfUkVUUkVHLCByZWdfc3RtdF92YWx1ZSAvKnJlZyovKTsKKwl9IGVs c2UgeworCQlkdWtfX2VtaXRfb3Bfb25seShjb21wX2N0eCwgRFVLX09QX1JFVFVOREVGKTsKKwl9 CisKKwkvKgorCSAqICBQZWVwaG9sZSBvcHRpbWl6ZSBKVU1QIGNoYWlucy4KKwkgKi8KKworCWR1 a19fcGVlcGhvbGVfb3B0aW1pemVfYnl0ZWNvZGUoY29tcF9jdHgpOworCisJLyoKKwkgKiAgY29t cF9jdHgtPmN1cnJfZnVuYyBpcyBub3cgcmVhZHkgdG8gYmUgY29udmVydGVkIGludG8gYW4gYWN0 dWFsCisJICogIGZ1bmN0aW9uIHRlbXBsYXRlLgorCSAqLworCisJRFVLX19SRUNVUlNJT05fREVD UkVBU0UoY29tcF9jdHgsIHRocik7CisJcmV0dXJuOworCisgZXJyb3JfZnVuY25hbWU6CisJRFVL X0VSUk9SX1NZTlRBWCh0aHIsIERVS19TVFJfSU5WQUxJRF9GVU5DX05BTUUpOworCURVS19XT19O T1JFVFVSTihyZXR1cm47KTsKK30KKworLyoKKyAqICBQYXJzZSBhIGZ1bmN0aW9uLWxpa2UgZXhw cmVzc2lvbjoKKyAqCisgKiAgICAtIGZ1bmN0aW9uIGV4cHJlc3Npb24KKyAqICAgIC0gZnVuY3Rp b24gZGVjbGFyYXRpb24KKyAqICAgIC0gZnVuY3Rpb24gc3RhdGVtZW50IChub24tc3RhbmRhcmQp CisgKiAgICAtIHNldHRlci9nZXR0ZXIKKyAqCisgKiAgQWRkcyB0aGUgZnVuY3Rpb24gdG8gY29t cF9jdHgtPmN1cnJfZnVuYyBmdW5jdGlvbiB0YWJsZSBhbmQgcmV0dXJucyB0aGUKKyAqICBmdW5j dGlvbiBudW1iZXIuCisgKgorICogIE9uIGVudHJ5LCBjdXJyX3Rva2VuIHBvaW50cyB0bzoKKyAq CisgKiAgICAtIHRoZSB0b2tlbiBhZnRlciAnZnVuY3Rpb24nIGZvciBmdW5jdGlvbiBleHByZXNz aW9uL2RlY2xhcmF0aW9uL3N0YXRlbWVudAorICogICAgLSB0aGUgdG9rZW4gYWZ0ZXIgJ3NldCcg b3IgJ2dldCcgZm9yIHNldHRlci9nZXR0ZXIKKyAqLworCisvKiBQYXJzZSBmb3JtYWxzLiAqLwor RFVLX0xPQ0FMIHZvaWQgZHVrX19wYXJzZV9mdW5jX2Zvcm1hbHMoZHVrX2NvbXBpbGVyX2N0eCAq Y29tcF9jdHgpIHsKKwlkdWtfaHRocmVhZCAqdGhyID0gY29tcF9jdHgtPnRocjsKKwlkdWtfYm9v bF90IGZpcnN0ID0gMTsKKwlkdWtfdWFycmlkeF90IG47CisKKwlmb3IgKDs7KSB7CisJCWlmIChj b21wX2N0eC0+Y3Vycl90b2tlbi50ID09IERVS19UT0tfUlBBUkVOKSB7CisJCQlicmVhazsKKwkJ fQorCisJCWlmIChmaXJzdCkgeworCQkJLyogbm8gY29tbWEgKi8KKwkJCWZpcnN0ID0gMDsKKwkJ fSBlbHNlIHsKKwkJCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfQ09NTUEp OworCQl9CisKKwkJLyogTm90ZTogd2hlbiBwYXJzaW5nIGEgZm9ybWFsIGxpc3QgaW4gbm9uLXN0 cmljdCBjb250ZXh0LCBlLmcuCisJCSAqICJpbXBsZW1lbnRzIiBpcyBwYXJzZWQgYXMgYW4gaWRl bnRpZmllci4gIFdoZW4gdGhlIGZ1bmN0aW9uIGlzCisJCSAqIGxhdGVyIGRldGVjdGVkIHRvIGJl IHN0cmljdCwgdGhlIGFyZ3VtZW50IGxpc3QgbXVzdCBiZSByZWNoZWNrZWQKKwkJICogYWdhaW5z dCBhIGxhcmdlciBzZXQgb2YgcmVzZXJ2ZWQgd29yZHMgKHRoYXQgb2Ygc3RyaWN0IG1vZGUpLgor CQkgKiBUaGlzIGlzIGhhbmRsZWQgYnkgZHVrX19wYXJzZV9mdW5jX2JvZHkoKS4gIEhlcmUgd2Ug cmVjb2duaXplCisJCSAqIHdoYXRldmVyIHRva2VucyBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBp biBjdXJyZW50IHN0cmljdG5lc3MKKwkJICogKHdoaWNoIGlzIG5vdCBhbHdheXMgZW5vdWdoKS4K KwkJICovCisKKwkJaWYgKGNvbXBfY3R4LT5jdXJyX3Rva2VuLnQgIT0gRFVLX1RPS19JREVOVElG SUVSKSB7CisJCQlEVUtfRVJST1JfU1lOVEFYKHRociwgRFVLX1NUUl9FWFBFQ1RFRF9JREVOVElG SUVSKTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwkJfQorCQlEVUtfQVNTRVJUKGNv bXBfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1RPS19JREVOVElGSUVSKTsKKwkJRFVLX0FTU0VS VChjb21wX2N0eC0+Y3Vycl90b2tlbi5zdHIxICE9IE5VTEwpOworCQlEVUtfREREKERVS19ERERQ UklOVCgiZm9ybWFsIGFyZ3VtZW50OiAlIU8iLAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVr X2hlYXBoZHIgKikgY29tcF9jdHgtPmN1cnJfdG9rZW4uc3RyMSkpOworCisJCS8qIFhYWDogYXBw ZW5kIHByaW1pdGl2ZSAqLworCQlkdWtfcHVzaF9oc3RyaW5nKHRociwgY29tcF9jdHgtPmN1cnJf dG9rZW4uc3RyMSk7CisJCW4gPSAoZHVrX3VhcnJpZHhfdCkgZHVrX2dldF9sZW5ndGgodGhyLCBj b21wX2N0eC0+Y3Vycl9mdW5jLmFyZ25hbWVzX2lkeCk7CisJCWR1a19wdXRfcHJvcF9pbmRleCh0 aHIsIGNvbXBfY3R4LT5jdXJyX2Z1bmMuYXJnbmFtZXNfaWR4LCBuKTsKKworCQlkdWtfX2FkdmFu Y2UoY29tcF9jdHgpOyAgLyogZWF0IGlkZW50aWZpZXIgKi8KKwl9Cit9CisKKy8qIFBhcnNlIGEg ZnVuY3Rpb24tbGlrZSBleHByZXNzaW9uLCBhc3N1bWluZyB0aGF0ICdjb21wX2N0eC0+Y3Vycl9m dW5jJyBpcworICogY29ycmVjdGx5IHNldCB1cC4gIEFzc3VtZXMgdGhhdCBjdXJyX3Rva2VuIGlz IGp1c3QgYWZ0ZXIgJ2Z1bmN0aW9uJyAob3IKKyAqICdzZXQnLydnZXQnIGV0YykuCisgKi8KK0RV S19MT0NBTCB2b2lkIGR1a19fcGFyc2VfZnVuY19saWtlX3JhdyhkdWtfY29tcGlsZXJfY3R4ICpj b21wX2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgeworCWR1a19odGhyZWFkICp0aHIgPSBj b21wX2N0eC0+dGhyOworCWR1a190b2tlbiAqdG9rOworCWR1a19ib29sX3Qgbm9fYWR2YW5jZTsK KworCURVS19BU1NFUlQoY29tcF9jdHgtPmN1cnJfZnVuYy5udW1fZm9ybWFscyA9PSAwKTsKKwlE VUtfQVNTRVJUKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfZnVuY3Rpb24gPT0gMSk7CisJRFVLX0FT U0VSVChjb21wX2N0eC0+Y3Vycl9mdW5jLmlzX2V2YWwgPT0gMCk7CisJRFVLX0FTU0VSVChjb21w X2N0eC0+Y3Vycl9mdW5jLmlzX2dsb2JhbCA9PSAwKTsKKwlEVUtfQVNTRVJUKGNvbXBfY3R4LT5j dXJyX2Z1bmMuaXNfc2V0Z2V0ID09ICgoZmxhZ3MgJiBEVUtfX0ZVTkNfRkxBR19HRVRTRVQpICE9 IDApKTsKKworCWR1a19fdXBkYXRlX2xpbmVpbmZvX2N1cnJ0b2tlbihjb21wX2N0eCk7CisKKwkv KgorCSAqICBGdW5jdGlvbiBuYW1lIChpZiBhbnkpCisJICoKKwkgKiAgV2UgZG9uJ3QgY2hlY2sg Zm9yIHByb2hpYml0ZWQgbmFtZXMgaGVyZSwgYmVjYXVzZSB3ZSBkb24ndAorCSAqICB5ZXQga25v dyB3aGV0aGVyIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHN0cmljdC4gIEZ1bmN0aW9uIGJvZHkKKwkg KiAgcGFyc2luZyBoYW5kbGVzIHRoaXMgcmV0cm9hY3RpdmVseS4KKwkgKgorCSAqICBGb3IgZnVu Y3Rpb24gZXhwcmVzc2lvbnMgYW5kIGRlY2xhcmF0aW9ucyBmdW5jdGlvbiBuYW1lIG11c3QKKwkg KiAgYmUgYW4gSWRlbnRpZmVyIChleGNsdWRlcyByZXNlcnZlZCB3b3JkcykuICBGb3Igc2V0dGVy L2dldHRlcgorCSAqICBpdCBpcyBhIFByb3BlcnR5TmFtZSB3aGljaCBhbGxvd3MgcmVzZXJ2ZWQg d29yZHMgYW5kIGFsc28KKwkgKiAgc3RyaW5ncyBhbmQgbnVtYmVycyAoZS5nLiAieyBnZXQgMSgp IHsgLi4uIH0gfSIpLgorCSAqCisJICogIEZ1bmN0aW9uIHBhcnNpbmcgbWF5IHN0YXJ0IGVpdGhl ciBmcm9tIHByZXZfdG9rZW4gb3IgY3Vycl90b2tlbgorCSAqICAob2JqZWN0IGxpdGVyYWwgbWV0 aG9kIGRlZmluaXRpb24gdXNlcyBwcmV2X3Rva2VuIGZvciBleGFtcGxlKS4KKwkgKiAgVGhpcyBp cyBkZWFsdCB3aXRoIGZvciB0aGUgaW5pdGlhbCB0b2tlbi4KKwkgKi8KKworCW5vX2FkdmFuY2Ug PSAoZmxhZ3MgJiBEVUtfX0ZVTkNfRkxBR19VU0VfUFJFVlRPS0VOKTsKKwlpZiAobm9fYWR2YW5j ZSkgeworCQl0b2sgPSAmY29tcF9jdHgtPnByZXZfdG9rZW47CisJfSBlbHNlIHsKKwkJdG9rID0g JmNvbXBfY3R4LT5jdXJyX3Rva2VuOworCX0KKworCWlmIChmbGFncyAmIERVS19fRlVOQ19GTEFH X0dFVFNFVCkgeworCQkvKiBQcm9wZXJ0eU5hbWUgLT4gSWRlbnRpZmllck5hbWUgfCBTdHJpbmdM aXRlcmFsIHwgTnVtZXJpY0xpdGVyYWwgKi8KKwkJaWYgKHRvay0+dF9ub3JlcyA9PSBEVUtfVE9L X0lERU5USUZJRVIgfHwgdG9rLT50ID09IERVS19UT0tfU1RSSU5HKSB7CisJCQlkdWtfcHVzaF9o c3RyaW5nKHRociwgdG9rLT5zdHIxKTsgICAgICAgLyoga2VlcCBpbiB2YWxzdGFjayAqLworCQl9 IGVsc2UgaWYgKHRvay0+dCA9PSBEVUtfVE9LX05VTUJFUikgeworCQkJZHVrX3B1c2hfbnVtYmVy KHRociwgdG9rLT5udW0pOworCQkJZHVrX3RvX3N0cmluZyh0aHIsIC0xKTsKKwkJfSBlbHNlIHsK KwkJCURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtfU1RSX0lOVkFMSURfR0VUU0VUX05BTUUpOwor CQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQl9CisJCWNvbXBfY3R4LT5jdXJyX2Z1bmMu aF9uYW1lID0gZHVrX2tub3duX2hzdHJpbmcodGhyLCAtMSk7ICAvKiBib3Jyb3dlZCByZWZlcmVu Y2UgKi8KKwl9IGVsc2UgeworCQkvKiBGdW5jdGlvbiBuYW1lIGlzIGFuIElkZW50aWZpZXIgKG5v dCBJZGVudGlmaWVyTmFtZSksIGJ1dCB3ZSBnZXQKKwkJICogdGhlIHJhdyBuYW1lIChub3QgcmVj b2duaXppbmcga2V5d29yZHMpIGhlcmUgYW5kIHBlcmZvcm0gdGhlIG5hbWUKKwkJICogY2hlY2tz IG9ubHkgYWZ0ZXIgcGFzcyAxLgorCQkgKi8KKwkJaWYgKHRvay0+dF9ub3JlcyA9PSBEVUtfVE9L X0lERU5USUZJRVIpIHsKKwkJCWR1a19wdXNoX2hzdHJpbmcodGhyLCB0b2stPnN0cjEpOyAgICAg ICAvKiBrZWVwIGluIHZhbHN0YWNrICovCisJCQljb21wX2N0eC0+Y3Vycl9mdW5jLmhfbmFtZSA9 IGR1a19rbm93bl9oc3RyaW5nKHRociwgLTEpOyAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisJ CX0gZWxzZSB7CisJCQkvKiB2YWxzdGFjayB3aWxsIGJlIHVuYmFsYW5jZWQsIHdoaWNoIGlzIE9L ICovCisJCQlEVUtfQVNTRVJUKChmbGFncyAmIERVS19fRlVOQ19GTEFHX0dFVFNFVCkgPT0gMCk7 CisJCQlEVUtfQVNTRVJUKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaF9uYW1lID09IE5VTEwpOworCQkJ bm9fYWR2YW5jZSA9IDE7CisJCQlpZiAoZmxhZ3MgJiBEVUtfX0ZVTkNfRkxBR19ERUNMKSB7CisJ CQkJRFVLX0VSUk9SX1NZTlRBWCh0aHIsIERVS19TVFJfRlVOQ19OQU1FX1JFUVVJUkVEKTsKKwkJ CQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCQl9CisJCX0KKwl9CisKKwlEVUtfREQoRFVL X0REUFJJTlQoImZ1bmN0aW9uIG5hbWU6ICUhTyIsCisJICAgICAgICAgICAgICAgICAgIChkdWtf aGVhcGhkciAqKSBjb21wX2N0eC0+Y3Vycl9mdW5jLmhfbmFtZSkpOworCisJaWYgKCFub19hZHZh bmNlKSB7CisJCWR1a19fYWR2YW5jZShjb21wX2N0eCk7CisJfQorCisJLyoKKwkgKiAgRm9ybWFs IGFyZ3VtZW50IGxpc3QKKwkgKgorCSAqICBXZSBkb24ndCBjaGVjayBmb3IgcHJvaGliaXRlZCBu YW1lcyBvciBmb3IgZHVwbGljYXRlIGFyZ3VtZW50CisJICogIG5hbWVzIGhlcmUsIGJlY2FzZSB3 ZSBkb24ndCB5ZXQga25vdyB3aGV0aGVyIHRoZSBmdW5jdGlvbiB3aWxsCisJICogIGJlIHN0cmlj dC4gIEZ1bmN0aW9uIGJvZHkgcGFyc2luZyBoYW5kbGVzIHRoaXMgcmV0cm9hY3RpdmVseS4KKwkg Ki8KKworCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgsIERVS19UT0tfTFBBUkVOKTsKKwor CWR1a19fcGFyc2VfZnVuY19mb3JtYWxzKGNvbXBfY3R4KTsKKworCURVS19BU1NFUlQoY29tcF9j dHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfVE9LX1JQQVJFTik7CisJZHVrX19hZHZhbmNlKGNvbXBf Y3R4KTsKKworCS8qCisJICogIFBhcnNlIGZ1bmN0aW9uIGJvZHkKKwkgKi8KKworCWR1a19fcGFy c2VfZnVuY19ib2R5KGNvbXBfY3R4LAorCSAgICAgICAgICAgICAgICAgICAgIDAsICAgLyogZXhw ZWN0X2VvZiAqLworCSAgICAgICAgICAgICAgICAgICAgIDAsICAgLyogaW1wbGljaXRfcmV0dXJu X3ZhbHVlICovCisJICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJiBEVUtfX0ZVTkNfRkxBR19E RUNMLCAvKiByZWdleHBfYWZ0ZXIgKi8KKwkgICAgICAgICAgICAgICAgICAgICBEVUtfVE9LX0xD VVJMWSk7ICAvKiBleHBlY3RfdG9rZW4gKi8KKworCS8qCisJICogIENvbnZlcnQgZHVrX2NvbXBp bGVyX2Z1bmMgdG8gYSBmdW5jdGlvbiB0ZW1wbGF0ZSBhbmQgYWRkIGl0CisJICogIHRvIHRoZSBw YXJlbnQgZnVuY3Rpb24gdGFibGUuCisJICovCisKKwlkdWtfX2NvbnZlcnRfdG9fZnVuY190ZW1w bGF0ZShjb21wX2N0eCk7ICAvKiAtPiBbIC4uLiBmdW5jIF0gKi8KK30KKworLyogUGFyc2UgYW4g aW5uZXIgZnVuY3Rpb24sIGFkZGluZyB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgdG8gdGhlIGN1cnJl bnQgZnVuY3Rpb24ncworICogZnVuY3Rpb24gdGFibGUuICBSZXR1cm4gYSBmdW5jdGlvbiBudW1i ZXIgdG8gYmUgdXNlZCBieSB0aGUgb3V0ZXIgZnVuY3Rpb24uCisgKgorICogQXZvaWRpbmcgTyhk ZXB0aF4yKSBpbm5lciBmdW5jdGlvbiBwYXJzaW5nIGlzIGhhbmRsZWQgaGVyZS4gIE9uIHRoZSBm aXJzdCBwYXNzLAorICogY29tcGlsZSBhbmQgcmVnaXN0ZXIgdGhlIGZ1bmN0aW9uIG5vcm1hbGx5 IGludG8gdGhlICdmdW5jcycgYXJyYXksIGFsc28gcmVjb3JkaW5nCisgKiBhIGxleGVyIHBvaW50 IChvZmZzZXQvbGluZSkgdG8gdGhlIGNsb3NpbmcgYnJhY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgT24g dGhlIHNlY29uZAorICogcGFzcywgc2tpcCB0aGUgZnVuY3Rpb24gYW5kIHJldHVybiB0aGUgc2Ft ZSAnZm51bScgYXMgb24gdGhlIGZpcnN0IHBhc3MgYnkgdXNpbmcKKyAqIGEgcnVubmluZyBjb3Vu dGVyLgorICoKKyAqIEFuIHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCB3 aGVuIHBhcnNpbmcgdGhlIGlubmVyIGZ1bmN0aW9uLCBhbG1vc3QKKyAqIG5vdGhpbmcgaXMga25v d24gb2YgdGhlIG91dGVyIGZ1bmN0aW9uLCBpLmUuIHRoZSBpbm5lciBmdW5jdGlvbidzIHNjb3Bl LiAgV2UgZG9uJ3QKKyAqIG5lZWQgdGhhdCBpbmZvcm1hdGlvbiBhdCB0aGUgbW9tZW50LCBidXQg aXQgd291bGQgYWxsb3cgc29tZSBvcHRpbWl6YXRpb25zIGlmIGl0CisgKiB3ZXJlIHVzZWQuCisg Ki8KK0RVS19MT0NBTCBkdWtfaW50X3QgZHVrX19wYXJzZV9mdW5jX2xpa2VfZm51bShkdWtfY29t cGlsZXJfY3R4ICpjb21wX2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBmbGFncykgeworCWR1a19odGhy ZWFkICp0aHIgPSBjb21wX2N0eC0+dGhyOworCWR1a19jb21waWxlcl9mdW5jIG9sZF9mdW5jOwor CWR1a19pZHhfdCBlbnRyeV90b3A7CisJZHVrX2ludF90IGZudW07CisKKwkvKgorCSAqICBPbiBz ZWNvbmQgcGFzcywgc2tpcCB0aGUgZnVuY3Rpb24uCisJICovCisKKwlpZiAoIWNvbXBfY3R4LT5j dXJyX2Z1bmMuaW5fc2Nhbm5pbmcpIHsKKwkJZHVrX2xleGVyX3BvaW50IGxleF9wdDsKKworCQlm bnVtID0gY29tcF9jdHgtPmN1cnJfZnVuYy5mbnVtX25leHQrKzsKKwkJZHVrX2dldF9wcm9wX2lu ZGV4KHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy5mdW5jc19pZHgsIChkdWtfdWFycmlkeF90KSAo Zm51bSAqIDMgKyAxKSk7CisJCWxleF9wdC5vZmZzZXQgPSAoZHVrX3NpemVfdCkgZHVrX3RvX3Vp bnQodGhyLCAtMSk7CisJCWR1a19wb3AodGhyKTsKKwkJZHVrX2dldF9wcm9wX2luZGV4KHRociwg Y29tcF9jdHgtPmN1cnJfZnVuYy5mdW5jc19pZHgsIChkdWtfdWFycmlkeF90KSAoZm51bSAqIDMg KyAyKSk7CisJCWxleF9wdC5saW5lID0gZHVrX3RvX2ludCh0aHIsIC0xKTsKKwkJZHVrX3BvcCh0 aHIpOworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJzZWNvbmQgcGFzcyBvZiBhbiBpbm5lciBm dW5jLCBza2lwIHRoZSBmdW5jdGlvbiwgcmVwYXJzZSBjbG9zaW5nIGJyYWNlOyBsZXggb2Zmc2V0 PSVsZCwgbGluZT0lbGQiLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgbGV4X3B0Lm9m ZnNldCwgKGxvbmcpIGxleF9wdC5saW5lKSk7CisKKwkJRFVLX0xFWEVSX1NFVFBPSU5UKCZjb21w X2N0eC0+bGV4LCAmbGV4X3B0KTsKKwkJY29tcF9jdHgtPmN1cnJfdG9rZW4udCA9IDA7ICAvKiB0 aGlzIGlzIG5lZWRlZCBmb3IgcmVnZXhwIG1vZGUgKi8KKwkJY29tcF9jdHgtPmN1cnJfdG9rZW4u c3RhcnRfbGluZSA9IDA7ICAvKiBuZWVkZWQgZm9yIGxpbmUgbnVtYmVyIHRyYWNraW5nIChiZWNv bWVzIHByZXZfdG9rZW4uc3RhcnRfbGluZSkgKi8KKwkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsK KworCQkvKiBSZWdFeHAgaXMgbm90IGFsbG93ZWQgYWZ0ZXIgYSBmdW5jdGlvbiBleHByZXNzaW9u LCBlLmcuIGluCisJCSAqIChmdW5jdGlvbiAoKSB7fSAvIDEyMykuICBBIFJlZ0V4cCAqaXMqIGFs bG93ZWQgYWZ0ZXIgYQorCQkgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiEKKwkJICovCisJCWlmIChm bGFncyAmIERVS19fRlVOQ19GTEFHX0RFQ0wpIHsKKwkJCWNvbXBfY3R4LT5jdXJyX2Z1bmMuYWxs b3dfcmVnZXhwX2luX2FkdiA9IDE7CisJCX0KKwkJZHVrX19hZHZhbmNlX2V4cGVjdChjb21wX2N0 eCwgRFVLX1RPS19SQ1VSTFkpOworCisJCXJldHVybiBmbnVtOworCX0KKworCS8qCisJICogIE9u IGZpcnN0IHBhc3MsIHBlcmZvcm0gYWN0dWFsIHBhcnNpbmcuICBSZW1lbWJlciB2YWxzdGFjayB0 b3Agb24gZW50cnkKKwkgKiAgdG8gcmVzdG9yZSBpdCBsYXRlciwgYW5kIHN3aXRjaCB0byB1c2lu ZyBhIG5ldyBmdW5jdGlvbiBpbiBjb21wX2N0eC4KKwkgKi8KKworCWVudHJ5X3RvcCA9IGR1a19n ZXRfdG9wKHRocik7CisJRFVLX0RERChEVUtfREREUFJJTlQoImJlZm9yZSBmdW5jOiBlbnRyeV90 b3A9JWxkLCBjdXJyX3Rvay5zdGFydF9vZmZzZXQ9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAg ICAobG9uZykgZW50cnlfdG9wLCAobG9uZykgY29tcF9jdHgtPmN1cnJfdG9rZW4uc3RhcnRfb2Zm c2V0KSk7CisKKwlkdWtfbWVtY3B5KCZvbGRfZnVuYywgJmNvbXBfY3R4LT5jdXJyX2Z1bmMsIHNp emVvZihkdWtfY29tcGlsZXJfZnVuYykpOworCisJZHVrX21lbXplcm8oJmNvbXBfY3R4LT5jdXJy X2Z1bmMsIHNpemVvZihkdWtfY29tcGlsZXJfZnVuYykpOworCWR1a19faW5pdF9mdW5jX3ZhbHN0 YWNrX3Nsb3RzKGNvbXBfY3R4KTsKKwlEVUtfQVNTRVJUKGNvbXBfY3R4LT5jdXJyX2Z1bmMubnVt X2Zvcm1hbHMgPT0gMCk7CisKKwkvKiBpbmhlcml0IGluaXRpYWwgc3RyaWN0bmVzcyBmcm9tIHBh cmVudCAqLworCWNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfc3RyaWN0ID0gb2xkX2Z1bmMuaXNfc3Ry aWN0OworCisJLyogWFhYOiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBzdG9yZSB0aGUgZmxh Z3MgaW50byB0aGUgY3Vycl9mdW5jCisJICogc3RydWN0IGFuZCB1c2UgdGhlbSBhcyBpcyB3aXRo b3V0IHRoaXMgZmxhZyBpbnRlcnByZXRhdGlvbiBzdGVwCisJICogaGVyZS4KKwkgKi8KKwlEVUtf QVNTRVJUKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaXNfbm90YWlsID09IDApOworCWNvbXBfY3R4LT5j dXJyX2Z1bmMuaXNfZnVuY3Rpb24gPSAxOworCURVS19BU1NFUlQoY29tcF9jdHgtPmN1cnJfZnVu Yy5pc19ldmFsID09IDApOworCURVS19BU1NFUlQoY29tcF9jdHgtPmN1cnJfZnVuYy5pc19nbG9i YWwgPT0gMCk7CisJY29tcF9jdHgtPmN1cnJfZnVuYy5pc19zZXRnZXQgPSAoKGZsYWdzICYgRFVL X19GVU5DX0ZMQUdfR0VUU0VUKSAhPSAwKTsKKwljb21wX2N0eC0+Y3Vycl9mdW5jLmlzX25hbWVi aW5kaW5nID0gIShmbGFncyAmIChEVUtfX0ZVTkNfRkxBR19HRVRTRVQgfAorCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19fRlVOQ19GTEFHX01FVERF RiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVL X19GVU5DX0ZMQUdfREVDTCkpOyAgLyogbm8gbmFtZSBiaW5kaW5nIGZvcjogZGVjbGFyYXRpb25z LCBvYmpsaXQgZ2V0c2V0LCBvYmpsaXQgbWV0aG9kIGRlZiAqLworCWNvbXBfY3R4LT5jdXJyX2Z1 bmMuaXNfY29uc3RydWN0YWJsZSA9ICEoZmxhZ3MgJiAoRFVLX19GVU5DX0ZMQUdfR0VUU0VUIHwK KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19f RlVOQ19GTEFHX01FVERFRikpOyAgLyogbm90IGNvbnN0cnVjdGFibGU6IG9iamxpdCBnZXRzZXQs IG9iamxpdCBtZXRob2QgZGVmICovCisKKwkvKgorCSAqICBQYXJzZSBpbm5lciBmdW5jdGlvbgor CSAqLworCisJZHVrX19wYXJzZV9mdW5jX2xpa2VfcmF3KGNvbXBfY3R4LCBmbGFncyk7ICAvKiBw dXNoZXMgZnVuY3Rpb24gdGVtcGxhdGUgKi8KKworCS8qIHByZXZfdG9rZW4uc3RhcnRfb2Zmc2V0 IHBvaW50cyB0byB0aGUgY2xvc2luZyBicmFjZSBoZXJlOyB3aGVuIHNraXBwaW5nCisJICogd2Un cmUgZ29pbmcgdG8gcmVwYXJzZSB0aGUgY2xvc2luZyBicmFjZSB0byBlbnN1cmUgc2VtaWNvbG9u IGluc2VydGlvbgorCSAqIGV0YyB3b3JrIGFzIGV4cGVjdGVkLgorCSAqLworCURVS19EREQoRFVL X0RERFBSSU5UKCJhZnRlciBmdW5jOiBwcmV2X3Rvay5zdGFydF9vZmZzZXQ9JWxkLCBjdXJyX3Rv ay5zdGFydF9vZmZzZXQ9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcF9j dHgtPnByZXZfdG9rZW4uc3RhcnRfb2Zmc2V0LCAobG9uZykgY29tcF9jdHgtPmN1cnJfdG9rZW4u c3RhcnRfb2Zmc2V0KSk7CisJRFVLX0FTU0VSVChjb21wX2N0eC0+bGV4LmlucHV0W2NvbXBfY3R4 LT5wcmV2X3Rva2VuLnN0YXJ0X29mZnNldF0gPT0gKGR1a191aW50OF90KSBEVUtfQVNDX1JDVVJM WSk7CisKKwkvKiBYWFg6IGFwcGVuZCBwcmltaXRpdmUgKi8KKwlEVUtfQVNTRVJUKGR1a19nZXRf bGVuZ3RoKHRociwgb2xkX2Z1bmMuZnVuY3NfaWR4KSA9PSAoZHVrX3NpemVfdCkgKG9sZF9mdW5j LmZudW1fbmV4dCAqIDMpKTsKKwlmbnVtID0gb2xkX2Z1bmMuZm51bV9uZXh0Kys7CisKKwlpZiAo Zm51bSA+IERVS19fTUFYX0ZVTkNTKSB7CisJCURVS19FUlJPUl9SQU5HRShjb21wX2N0eC0+dGhy LCBEVUtfU1RSX0ZVTkNfTElNSVQpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwl9 CisKKwkvKiBhcnJheSB3cml0ZXMgYXV0b2luY3JlbWVudCBsZW5ndGggKi8KKwkodm9pZCkgZHVr X3B1dF9wcm9wX2luZGV4KHRociwgb2xkX2Z1bmMuZnVuY3NfaWR4LCAoZHVrX3VhcnJpZHhfdCkg KGZudW0gKiAzKSk7CisJZHVrX3B1c2hfc2l6ZV90KHRociwgY29tcF9jdHgtPnByZXZfdG9rZW4u c3RhcnRfb2Zmc2V0KTsKKwkodm9pZCkgZHVrX3B1dF9wcm9wX2luZGV4KHRociwgb2xkX2Z1bmMu ZnVuY3NfaWR4LCAoZHVrX3VhcnJpZHhfdCkgKGZudW0gKiAzICsgMSkpOworCWR1a19wdXNoX2lu dCh0aHIsIGNvbXBfY3R4LT5wcmV2X3Rva2VuLnN0YXJ0X2xpbmUpOworCSh2b2lkKSBkdWtfcHV0 X3Byb3BfaW5kZXgodGhyLCBvbGRfZnVuYy5mdW5jc19pZHgsIChkdWtfdWFycmlkeF90KSAoZm51 bSAqIDMgKyAyKSk7CisKKwkvKgorCSAqICBDbGVhbnVwOiByZXN0b3JlIG9yaWdpbmFsIGZ1bmN0 aW9uLCByZXN0b3JlIHZhbHN0YWNrIHN0YXRlLgorCSAqCisJICogIEZ1bmN0aW9uIGRlY2xhcmF0 aW9uIGhhbmRsaW5nIG5lZWRzIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGJlIHB1c2hlZAorCSAqICBv biB0aGUgdmFsdWUgc3RhY2suCisJICovCisKKwlpZiAoZmxhZ3MgJiBEVUtfX0ZVTkNfRkxBR19Q VVNITkFNRV9QQVNTMSkgeworCQlEVUtfQVNTRVJUKGNvbXBfY3R4LT5jdXJyX2Z1bmMuaF9uYW1l ICE9IE5VTEwpOworCQlkdWtfcHVzaF9oc3RyaW5nKHRociwgY29tcF9jdHgtPmN1cnJfZnVuYy5o X25hbWUpOworCQlkdWtfcmVwbGFjZSh0aHIsIGVudHJ5X3RvcCk7CisJCWR1a19zZXRfdG9wKHRo ciwgZW50cnlfdG9wICsgMSk7CisJfSBlbHNlIHsKKwkJZHVrX3NldF90b3AodGhyLCBlbnRyeV90 b3ApOworCX0KKwlkdWtfbWVtY3B5KCh2b2lkICopICZjb21wX2N0eC0+Y3Vycl9mdW5jLCAodm9p ZCAqKSAmb2xkX2Z1bmMsIHNpemVvZihkdWtfY29tcGlsZXJfZnVuYykpOworCisJcmV0dXJuIGZu dW07Cit9CisKKy8qCisgKiAgQ29tcGlsZSBpbnB1dCBzdHJpbmcgaW50byBhbiBleGVjdXRhYmxl IGZ1bmN0aW9uIHRlbXBsYXRlIHdpdGhvdXQKKyAqICBhcmd1bWVudHMuCisgKgorICogIFRoZSBz dHJpbmcgaXMgcGFyc2VkIGFzIHRoZSAiUHJvZ3JhbSIgcHJvZHVjdGlvbiBvZiBFQ01BU2NyaXB0 IEU1LgorICogIENvbXBpbGF0aW9uIGNvbnRleHQgY2FuIGJlIGVpdGhlciBnbG9iYWwgY29kZSBv ciBldmFsIGNvZGUgKHNlZSBFNQorICogIFNlY3Rpb25zIDE0IGFuZCAxNS4xLjIuMSkuCisgKgor ICogIElucHV0IHN0YWNrOiAgWyAuLi4gZmlsZW5hbWUgXQorICogIE91dHB1dCBzdGFjazogWyAu Li4gZnVuY190ZW1wbGF0ZSBdCisgKi8KKworLyogWFhYOiBzb3VyY2UgY29kZSBwcm9wZXJ0eSAq LworCitEVUtfTE9DQUwgZHVrX3JldF90IGR1a19fanNfY29tcGlsZV9yYXcoZHVrX2h0aHJlYWQg KnRociwgdm9pZCAqdWRhdGEpIHsKKwlkdWtfaHN0cmluZyAqaF9maWxlbmFtZTsKKwlkdWtfX2Nv bXBpbGVyX3N0a3N0YXRlICpjb21wX3N0azsKKwlkdWtfY29tcGlsZXJfY3R4ICpjb21wX2N0eDsK KwlkdWtfbGV4ZXJfcG9pbnQgKmxleF9wdDsKKwlkdWtfY29tcGlsZXJfZnVuYyAqZnVuYzsKKwlk dWtfaWR4X3QgZW50cnlfdG9wOworCWR1a19ib29sX3QgaXNfc3RyaWN0OworCWR1a19ib29sX3Qg aXNfZXZhbDsKKwlkdWtfYm9vbF90IGlzX2Z1bmNleHByOworCWR1a19zbWFsbF91aW50X3QgZmxh Z3M7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHVkYXRhICE9IE5V TEwpOworCisJLyoKKwkgKiAgQXJndW1lbnRzIGNoZWNrCisJICovCisKKwllbnRyeV90b3AgPSBk dWtfZ2V0X3RvcCh0aHIpOworCURVS19BU1NFUlQoZW50cnlfdG9wID49IDEpOworCisJY29tcF9z dGsgPSAoZHVrX19jb21waWxlcl9zdGtzdGF0ZSAqKSB1ZGF0YTsKKwljb21wX2N0eCA9ICZjb21w X3N0ay0+Y29tcF9jdHhfYWxsb2M7CisJbGV4X3B0ID0gJmNvbXBfc3RrLT5sZXhfcHRfYWxsb2M7 CisJRFVLX0FTU0VSVChjb21wX2N0eCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGxleF9wdCAhPSBO VUxMKTsKKworCWZsYWdzID0gY29tcF9zdGstPmZsYWdzOworCWlzX2V2YWwgPSAoZmxhZ3MgJiBE VUtfQ09NUElMRV9FVkFMID8gMSA6IDApOworCWlzX3N0cmljdCA9IChmbGFncyAmIERVS19DT01Q SUxFX1NUUklDVCA/IDEgOiAwKTsKKwlpc19mdW5jZXhwciA9IChmbGFncyAmIERVS19DT01QSUxF X0ZVTkNFWFBSID8gMSA6IDApOworCisJaF9maWxlbmFtZSA9IGR1a19nZXRfaHN0cmluZyh0aHIs IC0xKTsgIC8qIG1heSBiZSB1bmRlZmluZWQgKi8KKworCS8qCisJICogIEluaXQgY29tcGlsZXIg YW5kIGxleGVyIGNvbnRleHRzCisJICovCisKKwlmdW5jID0gJmNvbXBfY3R4LT5jdXJyX2Z1bmM7 CisjaWYgZGVmaW5lZChEVUtfVVNFX0VYUExJQ0lUX05VTExfSU5JVCkKKwljb21wX2N0eC0+dGhy ID0gTlVMTDsKKwljb21wX2N0eC0+aF9maWxlbmFtZSA9IE5VTEw7CisJY29tcF9jdHgtPnByZXZf dG9rZW4uc3RyMSA9IE5VTEw7CisJY29tcF9jdHgtPnByZXZfdG9rZW4uc3RyMiA9IE5VTEw7CisJ Y29tcF9jdHgtPmN1cnJfdG9rZW4uc3RyMSA9IE5VTEw7CisJY29tcF9jdHgtPmN1cnJfdG9rZW4u c3RyMiA9IE5VTEw7CisjZW5kaWYKKworCWR1a19yZXF1aXJlX3N0YWNrKHRociwgRFVLX19DT01Q SUxFX0VOVFJZX1NMT1RTKTsKKworCWR1a19wdXNoX2R5bmFtaWNfYnVmZmVyKHRociwgMCk7ICAg ICAgIC8qIGVudHJ5X3RvcCArIDAgKi8KKwlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsgICAgICAg ICAgICAgICAvKiBlbnRyeV90b3AgKyAxICovCisJZHVrX3B1c2hfdW5kZWZpbmVkKHRocik7ICAg ICAgICAgICAgICAgLyogZW50cnlfdG9wICsgMiAqLworCWR1a19wdXNoX3VuZGVmaW5lZCh0aHIp OyAgICAgICAgICAgICAgIC8qIGVudHJ5X3RvcCArIDMgKi8KKwlkdWtfcHVzaF91bmRlZmluZWQo dGhyKTsgICAgICAgICAgICAgICAvKiBlbnRyeV90b3AgKyA0ICovCisKKwljb21wX2N0eC0+dGhy ID0gdGhyOworCWNvbXBfY3R4LT5oX2ZpbGVuYW1lID0gaF9maWxlbmFtZTsKKwljb21wX2N0eC0+ dG9rMTFfaWR4ID0gZW50cnlfdG9wICsgMTsKKwljb21wX2N0eC0+dG9rMTJfaWR4ID0gZW50cnlf dG9wICsgMjsKKwljb21wX2N0eC0+dG9rMjFfaWR4ID0gZW50cnlfdG9wICsgMzsKKwljb21wX2N0 eC0+dG9rMjJfaWR4ID0gZW50cnlfdG9wICsgNDsKKwljb21wX2N0eC0+cmVjdXJzaW9uX2xpbWl0 ID0gRFVLX1VTRV9DT01QSUxFUl9SRUNMSU1JVDsKKworCS8qIGNvbXBfY3R4LT5sZXggaGFzIGJl ZW4gcHJlLWluaXRpYWxpemVkIGJ5IGNhbGxlcjogaXQgaGFzIGJlZW4KKwkgKiB6ZXJvZWQgYW5k IGlucHV0L2lucHV0X2xlbmd0aCBoYXMgYmVlbiBzZXQuCisJICovCisJY29tcF9jdHgtPmxleC50 aHIgPSB0aHI7CisJLyogY29tcF9jdHgtPmxleC5pbnB1dCBhbmQgY29tcF9jdHgtPmxleC5pbnB1 dF9sZW5ndGggZmlsbGVkIGJ5IGNhbGxlciAqLworCWNvbXBfY3R4LT5sZXguc2xvdDFfaWR4ID0g Y29tcF9jdHgtPnRvazExX2lkeDsKKwljb21wX2N0eC0+bGV4LnNsb3QyX2lkeCA9IGNvbXBfY3R4 LT50b2sxMl9pZHg7CisJY29tcF9jdHgtPmxleC5idWZfaWR4ID0gZW50cnlfdG9wICsgMDsKKwlj b21wX2N0eC0+bGV4LmJ1ZiA9IChkdWtfaGJ1ZmZlcl9keW5hbWljICopIGR1a19rbm93bl9oYnVm ZmVyKHRociwgZW50cnlfdG9wICsgMCk7CisJRFVLX0FTU0VSVChEVUtfSEJVRkZFUl9IQVNfRFlO QU1JQyhjb21wX2N0eC0+bGV4LmJ1ZikgJiYgIURVS19IQlVGRkVSX0hBU19FWFRFUk5BTChjb21w X2N0eC0+bGV4LmJ1ZikpOworCWNvbXBfY3R4LT5sZXgudG9rZW5fbGltaXQgPSBEVUtfQ09NUElM RVJfVE9LRU5fTElNSVQ7CisKKwlsZXhfcHQtPm9mZnNldCA9IDA7CisJbGV4X3B0LT5saW5lID0g MTsKKwlEVUtfTEVYRVJfU0VUUE9JTlQoJmNvbXBfY3R4LT5sZXgsIGxleF9wdCk7ICAgIC8qIGZp bGxzIHdpbmRvdyAqLworCWNvbXBfY3R4LT5jdXJyX3Rva2VuLnN0YXJ0X2xpbmUgPSAwOyAgLyog bmVlZGVkIGZvciBsaW5lIG51bWJlciB0cmFja2luZyAoYmVjb21lcyBwcmV2X3Rva2VuLnN0YXJ0 X2xpbmUpICovCisKKwkvKgorCSAqICBJbml0aWFsaXplIGZ1bmN0aW9uIHN0YXRlIGZvciBhIHpl cm8tYXJndW1lbnQgZnVuY3Rpb24KKwkgKi8KKworCWR1a19faW5pdF9mdW5jX3ZhbHN0YWNrX3Ns b3RzKGNvbXBfY3R4KTsKKwlEVUtfQVNTRVJUKGZ1bmMtPm51bV9mb3JtYWxzID09IDApOworCisJ aWYgKGlzX2Z1bmNleHByKSB7CisJCS8qIE5hbWUgd2lsbCBiZSBmaWxsZWQgZnJvbSBmdW5jdGlv biBleHByZXNzaW9uLCBub3QgYnkgY2FsbGVyLgorCQkgKiBUaGlzIGNhc2UgaXMgdXNlZCBieSBG dW5jdGlvbiBjb25zdHJ1Y3RvciBhbmQgZHVrX2NvbXBpbGUoKQorCQkgKiBBUEkgd2l0aCB0aGUg RFVLX0NPTVBJTEVfRlVOQ1RJT04gb3B0aW9uLgorCQkgKi8KKwkJRFVLX0FTU0VSVChmdW5jLT5o X25hbWUgPT0gTlVMTCk7CisJfSBlbHNlIHsKKwkJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgodGhy LCAoaXNfZXZhbCA/IERVS19TVFJJRFhfRVZBTCA6CisJCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEVUtfU1RSSURYX0dMT0JBTCkpOworCQlmdW5jLT5oX25hbWUgPSBk dWtfZ2V0X2hzdHJpbmcodGhyLCAtMSk7CisJfQorCisJLyoKKwkgKiAgUGFyc2UgYSBmdW5jdGlv biBib2R5IG9yIGEgZnVuY3Rpb24tbGlrZSBleHByZXNzaW9uLCBkZXBlbmRpbmcKKwkgKiAgb24g ZmxhZ3MuCisJICovCisKKwlEVUtfQVNTRVJUKGZ1bmMtPmlzX3NldGdldCA9PSAwKTsKKwlmdW5j LT5pc19zdHJpY3QgPSAoZHVrX3VpbnQ4X3QpIGlzX3N0cmljdDsKKwlEVUtfQVNTRVJUKGZ1bmMt PmlzX25vdGFpbCA9PSAwKTsKKworCWlmIChpc19mdW5jZXhwcikgeworCQlmdW5jLT5pc19mdW5j dGlvbiA9IDE7CisJCURVS19BU1NFUlQoZnVuYy0+aXNfZXZhbCA9PSAwKTsKKwkJRFVLX0FTU0VS VChmdW5jLT5pc19nbG9iYWwgPT0gMCk7CisJCWZ1bmMtPmlzX25hbWViaW5kaW5nID0gMTsKKwkJ ZnVuYy0+aXNfY29uc3RydWN0YWJsZSA9IDE7CisKKwkJZHVrX19hZHZhbmNlKGNvbXBfY3R4KTsg IC8qIGluaXQgJ2N1cnJfdG9rZW4nICovCisJCWR1a19fYWR2YW5jZV9leHBlY3QoY29tcF9jdHgs IERVS19UT0tfRlVOQ1RJT04pOworCQkodm9pZCkgZHVrX19wYXJzZV9mdW5jX2xpa2VfcmF3KGNv bXBfY3R4LCAwIC8qZmxhZ3MqLyk7CisJfSBlbHNlIHsKKwkJRFVLX0FTU0VSVChmdW5jLT5pc19m dW5jdGlvbiA9PSAwKTsKKwkJRFVLX0FTU0VSVChpc19ldmFsID09IDAgfHwgaXNfZXZhbCA9PSAx KTsKKwkJZnVuYy0+aXNfZXZhbCA9IChkdWtfdWludDhfdCkgaXNfZXZhbDsKKwkJZnVuYy0+aXNf Z2xvYmFsID0gKGR1a191aW50OF90KSAhaXNfZXZhbDsKKwkJRFVLX0FTU0VSVChmdW5jLT5pc19u YW1lYmluZGluZyA9PSAwKTsKKwkJRFVLX0FTU0VSVChmdW5jLT5pc19jb25zdHJ1Y3RhYmxlID09 IDApOworCisJCWR1a19fcGFyc2VfZnVuY19ib2R5KGNvbXBfY3R4LAorCQkgICAgICAgICAgICAg ICAgICAgICAxLCAgICAgICAgICAgICAvKiBleHBlY3RfZW9mICovCisJCSAgICAgICAgICAgICAg ICAgICAgIDEsICAgICAgICAgICAgIC8qIGltcGxpY2l0X3JldHVybl92YWx1ZSAqLworCQkgICAg ICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAvKiByZWdleHBfYWZ0ZXIgKGRvZXMgbm90 IG1hdHRlcikgKi8KKwkJICAgICAgICAgICAgICAgICAgICAgLTEpOyAgICAgICAgICAgLyogZXhw ZWN0X3Rva2VuICovCisJfQorCisJLyoKKwkgKiAgQ29udmVydCBkdWtfY29tcGlsZXJfZnVuYyB0 byBhIGZ1bmN0aW9uIHRlbXBsYXRlCisJICovCisKKwlkdWtfX2NvbnZlcnRfdG9fZnVuY190ZW1w bGF0ZShjb21wX2N0eCk7CisKKwkvKgorCSAqICBXcmFwcGluZyBkdWtfc2FmZV9jYWxsKCkgd2ls bCBtYW5nbGUgdGhlIHN0YWNrLCBqdXN0IHJldHVybiBzdGFjayB0b3AKKwkgKi8KKworCS8qIFsg Li4uIGZpbGVuYW1lICh0ZW1wcykgZnVuYyBdICovCisKKwlyZXR1cm4gMTsKK30KKworRFVLX0lO VEVSTkFMIHZvaWQgZHVrX2pzX2NvbXBpbGUoZHVrX2h0aHJlYWQgKnRociwgY29uc3QgZHVrX3Vp bnQ4X3QgKnNyY19idWZmZXIsIGR1a19zaXplX3Qgc3JjX2xlbmd0aCwgZHVrX3NtYWxsX3VpbnRf dCBmbGFncykgeworCWR1a19fY29tcGlsZXJfc3Rrc3RhdGUgY29tcF9zdGs7CisJZHVrX2NvbXBp bGVyX2N0eCAqcHJldl9jdHg7CisJZHVrX3JldF90IHNhZmVfcmM7CisKKwlEVUtfQVNTRVJUKHRo ciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHNyY19idWZmZXIgIT0gTlVMTCk7CisKKwkvKiBwcmVp bml0aWFsaXplIGxleGVyIHN0YXRlIHBhcnRpYWxseSAqLworCWR1a19tZW16ZXJvKCZjb21wX3N0 aywgc2l6ZW9mKGNvbXBfc3RrKSk7CisJY29tcF9zdGsuZmxhZ3MgPSBmbGFnczsKKwlEVUtfTEVY RVJfSU5JVENUWCgmY29tcF9zdGsuY29tcF9jdHhfYWxsb2MubGV4KTsKKwljb21wX3N0ay5jb21w X2N0eF9hbGxvYy5sZXguaW5wdXQgPSBzcmNfYnVmZmVyOworCWNvbXBfc3RrLmNvbXBfY3R4X2Fs bG9jLmxleC5pbnB1dF9sZW5ndGggPSBzcmNfbGVuZ3RoOworCWNvbXBfc3RrLmNvbXBfY3R4X2Fs bG9jLmxleC5mbGFncyA9IGZsYWdzOyAgLyogRm9yd2FyZCBmbGFncyBkaXJlY3RseSBmb3Igbm93 LiAqLworCisJLyogWyAuLi4gZmlsZW5hbWUgXSAqLworCisJcHJldl9jdHggPSB0aHItPmNvbXBp bGVfY3R4OworCXRoci0+Y29tcGlsZV9jdHggPSAmY29tcF9zdGsuY29tcF9jdHhfYWxsb2M7ICAv KiBmb3IgZHVrX2Vycm9yX2F1Z21lbnQuYyAqLworCXNhZmVfcmMgPSBkdWtfc2FmZV9jYWxsKHRo ciwgZHVrX19qc19jb21waWxlX3JhdywgKHZvaWQgKikgJmNvbXBfc3RrIC8qdWRhdGEqLywgMSAv Km5hcmdzKi8sIDEgLypucmV0cyovKTsKKwl0aHItPmNvbXBpbGVfY3R4ID0gcHJldl9jdHg7ICAv KiBtdXN0IHJlc3RvcmUgcmVsaWFibHkgYmVmb3JlIHJldHVybmluZyAqLworCisJaWYgKHNhZmVf cmMgIT0gRFVLX0VYRUNfU1VDQ0VTUykgeworCQlEVUtfRChEVUtfRFBSSU5UKCJjb21waWxhdGlv biBmYWlsZWQ6ICUhVCIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSkpOworCQkodm9pZCkgZHVrX3Ro cm93KHRocik7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwl9CisKKwkvKiBbIC4uLiB0 ZW1wbGF0ZSBdICovCit9CisKKy8qIGF1dG9tYXRpYyB1bmRlZnMgKi8KKyN1bmRlZiBEVUtfX0FM TE9DVEVNUAorI3VuZGVmIERVS19fQUxMT0NURU1QUworI3VuZGVmIERVS19fQUxMT1dfQVVUT19T RU1JX0FMV0FZUworI3VuZGVmIERVS19fQkNfSU5JVElBTF9JTlNUUworI3VuZGVmIERVS19fQlBf QURESVRJVkUKKyN1bmRlZiBEVUtfX0JQX0FTU0lHTk1FTlQKKyN1bmRlZiBEVUtfX0JQX0JBTkQK KyN1bmRlZiBEVUtfX0JQX0JPUgorI3VuZGVmIERVS19fQlBfQlhPUgorI3VuZGVmIERVS19fQlBf Q0FMTAorI3VuZGVmIERVS19fQlBfQ0xPU0lORworI3VuZGVmIERVS19fQlBfQ09NTUEKKyN1bmRl ZiBEVUtfX0JQX0NPTkRJVElPTkFMCisjdW5kZWYgRFVLX19CUF9FT0YKKyN1bmRlZiBEVUtfX0JQ X0VRVUFMSVRZCisjdW5kZWYgRFVLX19CUF9FWFBPTkVOVElBVElPTgorI3VuZGVmIERVS19fQlBf Rk9SX0VYUFIKKyN1bmRlZiBEVUtfX0JQX0lOVkFMSUQKKyN1bmRlZiBEVUtfX0JQX0xBTkQKKyN1 bmRlZiBEVUtfX0JQX0xPUgorI3VuZGVmIERVS19fQlBfTUVNQkVSCisjdW5kZWYgRFVLX19CUF9N VUxUSVBMSUNBVElWRQorI3VuZGVmIERVS19fQlBfUE9TVEZJWAorI3VuZGVmIERVS19fQlBfUkVM QVRJT05BTAorI3VuZGVmIERVS19fQlBfU0hJRlQKKyN1bmRlZiBEVUtfX0NPTVBJTEVfRU5UUllf U0xPVFMKKyN1bmRlZiBEVUtfX0NPTlNUX01BUktFUgorI3VuZGVmIERVS19fRFVNUF9JU1BFQwor I3VuZGVmIERVS19fRFVNUF9JVkFMVUUKKyN1bmRlZiBEVUtfX0VNSVRfRkxBR19BX0lTX1NPVVJD RQorI3VuZGVmIERVS19fRU1JVF9GTEFHX0JDX1JFR0NPTlNUCisjdW5kZWYgRFVLX19FTUlUX0ZM QUdfQl9JU19UQVJHRVQKKyN1bmRlZiBEVUtfX0VNSVRfRkxBR19DX0lTX1RBUkdFVAorI3VuZGVm IERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQQorI3VuZGVmIERVS19fRU1JVF9GTEFHX05PX1NI VUZGTEVfQgorI3VuZGVmIERVS19fRU1JVF9GTEFHX05PX1NIVUZGTEVfQworI3VuZGVmIERVS19f RU1JVF9GTEFHX1JFU0VSVkVfSlVNUFNMT1QKKyN1bmRlZiBEVUtfX0VYUFJfRkxBR19BTExPV19F TVBUWQorI3VuZGVmIERVS19fRVhQUl9GTEFHX1JFSkVDVF9JTgorI3VuZGVmIERVS19fRVhQUl9G TEFHX1JFUVVJUkVfSU5JVAorI3VuZGVmIERVS19fRVhQUl9SQlBfTUFTSworI3VuZGVmIERVS19f RlVOQ1RJT05fQk9EWV9SRVFVSVJFX1NMT1RTCisjdW5kZWYgRFVLX19GVU5DVElPTl9JTklUX1JF UVVJUkVfU0xPVFMKKyN1bmRlZiBEVUtfX0ZVTkNfRkxBR19ERUNMCisjdW5kZWYgRFVLX19GVU5D X0ZMQUdfR0VUU0VUCisjdW5kZWYgRFVLX19GVU5DX0ZMQUdfTUVUREVGCisjdW5kZWYgRFVLX19G VU5DX0ZMQUdfUFVTSE5BTUVfUEFTUzEKKyN1bmRlZiBEVUtfX0ZVTkNfRkxBR19VU0VfUFJFVlRP S0VOCisjdW5kZWYgRFVLX19HRVRDT05TVF9NQVhfQ09OU1RTX0NIRUNLCisjdW5kZWYgRFVLX19H RVRURU1QCisjdW5kZWYgRFVLX19IQVNfVEVSTQorI3VuZGVmIERVS19fSEFTX1ZBTAorI3VuZGVm IERVS19fSVNDT05TVAorI3VuZGVmIERVS19fSVNSRUcKKyN1bmRlZiBEVUtfX0lTUkVHX05PVFRF TVAKKyN1bmRlZiBEVUtfX0lTUkVHX1RFTVAKKyN1bmRlZiBEVUtfX0lTX1RFUk1JTkFMCisjdW5k ZWYgRFVLX19JVkFMX0ZMQUdfQUxMT1dfQ09OU1QKKyN1bmRlZiBEVUtfX0lWQUxfRkxBR19SRVFV SVJFX1NIT1JUCisjdW5kZWYgRFVLX19JVkFMX0ZMQUdfUkVRVUlSRV9URU1QCisjdW5kZWYgRFVL X19NQVhfQVJSQVlfSU5JVF9WQUxVRVMKKyN1bmRlZiBEVUtfX01BWF9DT05TVFMKKyN1bmRlZiBE VUtfX01BWF9GVU5DUworI3VuZGVmIERVS19fTUFYX09CSkVDVF9JTklUX1BBSVJTCisjdW5kZWYg RFVLX19NQVhfVEVNUFMKKyN1bmRlZiBEVUtfX01LX0xCUAorI3VuZGVmIERVS19fTUtfTEJQX0ZM QUdTCisjdW5kZWYgRFVLX19PQkpfTElUX0tFWV9HRVQKKyN1bmRlZiBEVUtfX09CSl9MSVRfS0VZ X1BMQUlOCisjdW5kZWYgRFVLX19PQkpfTElUX0tFWV9TRVQKKyN1bmRlZiBEVUtfX1BBUlNFX0VY UFJfU0xPVFMKKyN1bmRlZiBEVUtfX1BBUlNFX1NUQVRFTUVOVFNfU0xPVFMKKyN1bmRlZiBEVUtf X1JFQ1VSU0lPTl9ERUNSRUFTRQorI3VuZGVmIERVS19fUkVDVVJTSU9OX0lOQ1JFQVNFCisjdW5k ZWYgRFVLX19SRU1PVkVDT05TVAorI3VuZGVmIERVS19fU0VUVEVNUAorI3VuZGVmIERVS19fU0VU VEVNUF9DSEVDS01BWAorI3VuZGVmIERVS19fU1RJTExfUFJPTE9HVUUKKyN1bmRlZiBEVUtfX1RP S0VOX0xCUF9CUF9NQVNLCisjdW5kZWYgRFVLX19UT0tFTl9MQlBfRkxBR19OT19SRUdFWFAKKyN1 bmRlZiBEVUtfX1RPS0VOX0xCUF9GTEFHX1RFUk1JTkFURVMKKyN1bmRlZiBEVUtfX1RPS0VOX0xC UF9GTEFHX1VOVVNFRAorI3VuZGVmIERVS19fVE9LRU5fTEJQX0dFVF9CUAorLyoKKyAqICBFQ01B U2NyaXB0IGJ5dGVjb2RlIGV4ZWN1dG9yLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5h bC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyoKKyAqICBMb2NhbCBkZWNsYXJhdGlvbnMu CisgKi8KKworRFVLX0xPQ0FMX0RFQ0wgdm9pZCBkdWtfX2pzX2V4ZWN1dGVfYnl0ZWNvZGVfaW5u ZXIoZHVrX2h0aHJlYWQgKmVudHJ5X3RocmVhZCwgZHVrX2FjdGl2YXRpb24gKmVudHJ5X2FjdCk7 CisKKy8qCisgKiAgTWlzYyBoZWxwZXJzLgorICovCisKKy8qIEZvcmNlZCBpbmxpbmUgZGVjbGFy YXRpb24sIG9ubHkgYXBwbGllZCBmb3IgcGVyZm9ybWFuY2Ugb3JpZW50ZWQgYnVpbGQuICovCisj aWYgZGVmaW5lZChEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUpCisjZGVmaW5lIERVS19fSU5MSU5F X1BFUkYKKyNkZWZpbmUgRFVLX19OT0lOTElORV9QRVJGCisjZWxzZQorI2RlZmluZSBEVUtfX0lO TElORV9QRVJGIERVS19BTFdBWVNfSU5MSU5FCisjZGVmaW5lIERVS19fTk9JTkxJTkVfUEVSRiBE VUtfTk9JTkxJTkUKKyNlbmRpZgorCisvKiBSZXBsYWNlIHZhbHVlIHN0YWNrIHRvcCB0byB2YWx1 ZSBhdCAndHZfcHRyJy4gIE9wdGltaXplIGZvcgorICogcGVyZm9ybWFuY2UgYnkgb25seSBhcHBs eWluZyB0aGUgbmV0IHJlZmNvdW50IGNoYW5nZS4KKyAqLworI2RlZmluZSBEVUtfX1JFUExBQ0Vf VE9fVFZQVFIodGhyLHR2X3B0cikgZG8geyBcCisJCWR1a19odGhyZWFkICpkdWtfX3RocjsgXAor CQlkdWtfdHZhbCAqZHVrX190dnNyYzsgXAorCQlkdWtfdHZhbCAqZHVrX190dmRzdDsgXAorCQlk dWtfdHZhbCBkdWtfX3R2dG1wOyBcCisJCWR1a19fdGhyID0gKHRocik7IFwKKwkJZHVrX190dnNy YyA9IERVS19HRVRfVFZBTF9ORUdJRFgoZHVrX190aHIsIC0xKTsgXAorCQlkdWtfX3R2ZHN0ID0g KHR2X3B0cik7IFwKKwkJRFVLX1RWQUxfU0VUX1RWQUwoJmR1a19fdHZ0bXAsIGR1a19fdHZkc3Qp OyBcCisJCURVS19UVkFMX1NFVF9UVkFMKGR1a19fdHZkc3QsIGR1a19fdHZzcmMpOyBcCisJCURV S19UVkFMX1NFVF9VTkRFRklORUQoZHVrX190dnNyYyk7ICAvKiB2YWx1ZSBzdGFjayBpbml0IHBv bGljeSAqLyBcCisJCWR1a19fdGhyLT52YWxzdGFja190b3AgPSBkdWtfX3R2c3JjOyBcCisJCURV S19UVkFMX0RFQ1JFRihkdWtfX3RociwgJmR1a19fdHZ0bXApOyBcCisJfSB3aGlsZSAoMCkKKwor LyogWFhYOiBjYW5kaWRhdGUgb2YgYmVpbmcgYW4gaW50ZXJuYWwgc2hhcmVkIEFQSSBjYWxsICov CisjaWYgMCAgLyogdW51c2VkICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX3B1c2hfdHZhbHNfaW5j cmVmX29ubHkoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2X3NyYywgZHVrX3NtYWxsX3Vp bnRfZmFzdF90IGNvdW50KSB7CisJZHVrX3R2YWwgKnR2X2RzdDsKKwlkdWtfc2l6ZV90IGNvcHlf c2l6ZTsKKwlkdWtfc2l6ZV90IGk7CisKKwl0dl9kc3QgPSB0aHItPnZhbHN0YWNrX3RvcDsKKwlj b3B5X3NpemUgPSBzaXplb2YoZHVrX3R2YWwpICogY291bnQ7CisJZHVrX21lbWNweSgodm9pZCAq KSB0dl9kc3QsIChjb25zdCB2b2lkICopIHR2X3NyYywgY29weV9zaXplKTsKKwlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgeworCQlEVUtfVFZBTF9JTkNSRUYodGhyLCB0dl9kc3QpOworCQl0 dl9kc3QrKzsKKwl9CisJdGhyLT52YWxzdGFja190b3AgPSB0dl9kc3Q7Cit9CisjZW5kaWYKKwor LyoKKyAqICBBcml0aG1ldGljLCBiaW5hcnksIGFuZCBsb2dpY2FsIGhlbHBlcnMuCisgKgorICog IE5vdGU6IHRoZXJlIGlzIG5vIG9wY29kZSBmb3IgbG9naWNhbCBBTkQgb3IgbG9naWNhbCBPUjsg dGhpcyBpcyBvbgorICogIHB1cnBvc2UsIGJlY2F1c2UgdGhlIGV2YWx1dGlvbiBvcmRlciBzZW1h bnRpY3MgZm9yIHRoZW0gbWFrZSBzdWNoCisgKiAgb3Bjb2RlcyBwcmV0dHkgcG9pbnRsZXNzOiBz aG9ydCBjaXJjdWl0aW5nIG1lYW5zIHRoZXkgYXJlIG1vc3QKKyAqICBjb21mb3J0YWJseSBpbXBs ZW1lbnRlZCBhcyBqdW1wcy4gIEhvd2V2ZXIsIGEgbG9naWNhbCBOT1Qgb3Bjb2RlCisgKiAgaXMg dXNlZnVsLgorICoKKyAqICBOb3RlOiBjYXJlZnVsIHdpdGggZHVrX3R2YWwgcG9pbnRlcnMgaGVy ZTogdGhleSBhcmUgcG90ZW50aWFsbHkKKyAqICBpbnZhbGlkYXRlZCBieSBhbnkgREVDUkVGIGFu ZCBhbG1vc3QgYW55IEFQSSBjYWxsLiAgSXQncyBzdGlsbAorICogIHByZWZlcmFibGUgdG8gd29y ayB3aXRob3V0IG1ha2luZyBhIGNvcHkgYnV0IHRoYXQncyBub3QgYWx3YXlzCisgKiAgcG9zc2li bGUuCisgKi8KKworRFVLX0xPQ0FMIERVS19fSU5MSU5FX1BFUkYgZHVrX2RvdWJsZV90IGR1a19f Y29tcHV0ZV9tb2QoZHVrX2RvdWJsZV90IGQxLCBkdWtfZG91YmxlX3QgZDIpIHsKKwlyZXR1cm4g KGR1a19kb3VibGVfdCkgZHVrX2pzX2FyaXRoX21vZCgoZG91YmxlKSBkMSwgKGRvdWJsZSkgZDIp OworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTN19FWFBfT1BFUkFUT1IpCitEVUtfTE9DQUwg RFVLX19JTkxJTkVfUEVSRiBkdWtfZG91YmxlX3QgZHVrX19jb21wdXRlX2V4cChkdWtfZG91Ymxl X3QgZDEsIGR1a19kb3VibGVfdCBkMikgeworCXJldHVybiAoZHVrX2RvdWJsZV90KSBkdWtfanNf YXJpdGhfcG93KChkb3VibGUpIGQxLCAoZG91YmxlKSBkMik7Cit9CisjZW5kaWYKKworRFVLX0xP Q0FMIERVS19fSU5MSU5FX1BFUkYgdm9pZCBkdWtfX3ZtX2FyaXRoX2FkZChkdWtfaHRocmVhZCAq dGhyLCBkdWtfdHZhbCAqdHZfeCwgZHVrX3R2YWwgKnR2X3ksIGR1a19zbWFsbF91aW50X2Zhc3Rf dCBpZHhfeikgeworCS8qCisJICogIEFkZGl0aW9uIG9wZXJhdG9yIGlzIGRpZmZlcmVudCBmcm9t IG90aGVyIGFyaXRobWV0aWMKKwkgKiAgb3BlcmF0aW9ucyBpbiB0aGF0IGl0IGFsc28gcHJvdmlk ZXMgc3RyaW5nIGNvbmNhdGVuYXRpb24uCisJICogIEhlbmNlIGl0IGlzIGltcGxlbWVudGVkIHNl cGFyYXRlbHkuCisJICoKKwkgKiAgVGhlcmUgaXMgYSBmYXN0IHBhdGggZm9yIG51bWJlciBhZGRp dGlvbi4gIE90aGVyIGNhc2VzIGdvCisJICogIHRocm91Z2ggcG90ZW50aWFsbHkgbXVsdGlwbGUg Y29lcmNpb25zIGFzIGRlc2NyaWJlZCBpbiB0aGUKKwkgKiAgRTUgc3BlY2lmaWNhdGlvbi4gIEl0 IG1heSBiZSBwb3NzaWJsZSB0byByZWR1Y2UgdGhlIG51bWJlcgorCSAqICBvZiBjb2VyY2lvbnMs IGJ1dCB0aGlzIG11c3QgYmUgZG9uZSBjYXJlZnVsbHkgdG8gcHJlc2VydmUKKwkgKiAgdGhlIGV4 YWN0IHNlbWFudGljcy4KKwkgKgorCSAqICBFNSBTZWN0aW9uIDExLjYuMS4KKwkgKgorCSAqICBD dXN0b20gdHlwZXMgYWxzbyBoYXZlIHNwZWNpYWwgYmVoYXZpb3IgaW1wbGVtZW50ZWQgaGVyZS4K KwkgKi8KKworCWR1a19kb3VibGVfdW5pb24gZHU7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKHR2X3ggIT0gTlVMTCk7ICAvKiBtYXkgYmUgcmVnIG9yIGNvbnN0ICov CisJRFVLX0FTU0VSVCh0dl95ICE9IE5VTEwpOyAgLyogbWF5IGJlIHJlZyBvciBjb25zdCAqLwor CURVS19BU1NFUlRfRElTQUJMRShpZHhfeiA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FT U0VSVCgoZHVrX3VpbnRfdCkgaWR4X3ogPCAoZHVrX3VpbnRfdCkgZHVrX2dldF90b3AodGhyKSk7 CisKKwkvKgorCSAqICBGYXN0IHBhdGhzCisJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFT VElOVCkKKwlpZiAoRFVLX1RWQUxfSVNfRkFTVElOVCh0dl94KSAmJiBEVUtfVFZBTF9JU19GQVNU SU5UKHR2X3kpKSB7CisJCWR1a19pbnQ2NF90IHYxLCB2MiwgdjM7CisJCWR1a19pbnQzMl90IHYz X2hpOworCQlkdWtfdHZhbCAqdHZfejsKKworCQkvKiBJbnB1dCB2YWx1ZXMgYXJlIHNpZ25lZCA0 OC1iaXQgc28gd2UgY2FuIGRldGVjdCBvdmVyZmxvdworCQkgKiByZWxpYWJseSBmcm9tIGhpZ2gg Yml0cyBvciBqdXN0IGEgY29tcGFyaXNvbi4KKwkJICovCisKKwkJdjEgPSBEVUtfVFZBTF9HRVRf RkFTVElOVCh0dl94KTsKKwkJdjIgPSBEVUtfVFZBTF9HRVRfRkFTVElOVCh0dl95KTsKKwkJdjMg PSB2MSArIHYyOworCQl2M19oaSA9IChkdWtfaW50MzJfdCkgKHYzID4+IDMyKTsKKwkJaWYgKERV S19MSUtFTFkodjNfaGkgPj0gRFVLX0k2NF9DT05TVEFOVCgtMHg4MDAwKSAmJiB2M19oaSA8PSBE VUtfSTY0X0NPTlNUQU5UKDB4N2ZmZikpKSB7CisJCQl0dl96ID0gdGhyLT52YWxzdGFja19ib3R0 b20gKyBpZHhfejsKKwkJCURVS19UVkFMX1NFVF9GQVNUSU5UX1VQRFJFRih0aHIsIHR2X3osIHYz KTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJLyogb3Zl cmZsb3csIGZhbGwgdGhyb3VnaCAqLworCQkJOworCQl9CisJfQorI2VuZGlmICAvKiBEVUtfVVNF X0ZBU1RJTlQgKi8KKworCWlmIChEVUtfVFZBTF9JU19OVU1CRVIodHZfeCkgJiYgRFVLX1RWQUxf SVNfTlVNQkVSKHR2X3kpKSB7CisjaWYgIWRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpF KQorCQlkdWtfdHZhbCAqdHZfejsKKyNlbmRpZgorCisJCWR1LmQgPSBEVUtfVFZBTF9HRVRfTlVN QkVSKHR2X3gpICsgRFVLX1RWQUxfR0VUX05VTUJFUih0dl95KTsKKyNpZiBkZWZpbmVkKERVS19V U0VfRVhFQ19QUkVGRVJfU0laRSkKKwkJZHVrX3B1c2hfbnVtYmVyKHRociwgZHUuZCk7ICAvKiB3 aWxsIE5hTiBub3JtYWxpemUgcmVzdWx0ICovCisJCWR1a19yZXBsYWNlKHRociwgKGR1a19pZHhf dCkgaWR4X3opOworI2Vsc2UgIC8qIERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSAqLworCQlEVUtf REJMVU5JT05fTk9STUFMSVpFX05BTl9DSEVDSygmZHUpOworCQlEVUtfQVNTRVJUKERVS19EQkxV TklPTl9JU19OT1JNQUxJWkVEKCZkdSkpOworCQl0dl96ID0gdGhyLT52YWxzdGFja19ib3R0b20g KyBpZHhfejsKKwkJRFVLX1RWQUxfU0VUX05VTUJFUl9VUERSRUYodGhyLCB0dl96LCBkdS5kKTsg IC8qIHNpZGUgZWZmZWN0cyAqLworI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUg Ki8KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogIFNsb3cgcGF0aDogcG90ZW50aWFsbHkgcmVx dWlyZXMgZnVuY3Rpb24gY2FsbHMgZm9yIGNvZXJjaW9uCisJICovCisKKwlkdWtfcHVzaF90dmFs KHRociwgdHZfeCk7CisJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X3kpOworCWR1a190b19wcmltaXRp dmUodGhyLCAtMiwgRFVLX0hJTlRfTk9ORSk7ICAvKiBzaWRlIGVmZmVjdHMgLT4gZG9uJ3QgdXNl IHR2X3gsIHR2X3kgYWZ0ZXIgKi8KKwlkdWtfdG9fcHJpbWl0aXZlKHRociwgLTEsIERVS19ISU5U X05PTkUpOworCisJLyogU2luY2UgRHVrdGFwZSAyLnggcGxhaW4gYnVmZmVycyBhcmUgdHJlYXRl ZCBsaWtlIEFycmF5QnVmZmVyLiAqLworCWlmIChkdWtfaXNfc3RyaW5nKHRociwgLTIpIHx8IGR1 a19pc19zdHJpbmcodGhyLCAtMSkpIHsKKwkJLyogU3ltYm9scyBzaG91bGRuJ3QgdGVjaG5pY2Fs bHkgYmUgaGFuZGxlZCBoZXJlLCBidXQgc2hvdWxkCisJCSAqIGdvIGludG8gdGhlIGRlZmF1bHQg VG9OdW1iZXIoKSBjb2VyY2lvbiBwYXRoIGluc3RlYWQgYW5kCisJCSAqIGZhaWwgdGhlcmUgd2l0 aCBhIFR5cGVFcnJvci4gIEhvd2V2ZXIsIHRoZXJlJ3MgYSBUb1N0cmluZygpCisJCSAqIGluIGR1 a19jb25jYXRfMigpIHdoaWNoIGFsc28gZmFpbHMgd2l0aCBUeXBlRXJyb3Igc28gbm8KKwkJICog ZXhwbGljaXQgY2hlY2sgaXMgbmVlZGVkLgorCQkgKi8KKwkJZHVrX2NvbmNhdF8yKHRocik7ICAv KiBbLi4uIHMxIHMyXSAtPiBbLi4uIHMxK3MyXSAqLworCX0gZWxzZSB7CisJCWR1a19kb3VibGVf dCBkMSwgZDI7CisKKwkJZDEgPSBkdWtfdG9fbnVtYmVyX20yKHRocik7CisJCWQyID0gZHVrX3Rv X251bWJlcl9tMSh0aHIpOworCQlEVUtfQVNTRVJUKGR1a19pc19udW1iZXIodGhyLCAtMikpOwor CQlEVUtfQVNTRVJUKGR1a19pc19udW1iZXIodGhyLCAtMSkpOworCQlEVUtfQVNTRVJUX0RPVUJM RV9JU19OT1JNQUxJWkVEKGQxKTsKKwkJRFVLX0FTU0VSVF9ET1VCTEVfSVNfTk9STUFMSVpFRChk Mik7CisKKwkJZHUuZCA9IGQxICsgZDI7CisJCWR1a19wb3BfMl91bnNhZmUodGhyKTsKKwkJZHVr X3B1c2hfbnVtYmVyKHRociwgZHUuZCk7ICAvKiB3aWxsIE5hTiBub3JtYWxpemUgcmVzdWx0ICov CisJfQorCWR1a19yZXBsYWNlKHRociwgKGR1a19pZHhfdCkgaWR4X3opOyAgLyogc2lkZSBlZmZl Y3RzICovCit9CisKK0RVS19MT0NBTCBEVUtfX0lOTElORV9QRVJGIHZvaWQgZHVrX192bV9hcml0 aF9iaW5hcnlfb3AoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2X3gsIGR1a190dmFsICp0 dl95LCBkdWtfdWludF9mYXN0X3QgaWR4X3osIGR1a19zbWFsbF91aW50X2Zhc3RfdCBvcGNvZGUp IHsKKwkvKgorCSAqICBBcml0aG1ldGljIG9wZXJhdGlvbnMgb3RoZXIgdGhhbiAnKycgaGF2ZSBu dW1iZXItb25seSBzZW1hbnRpY3MKKwkgKiAgYW5kIGFyZSBpbXBsZW1lbnRlZCBoZXJlLiAgVGhl IHNlcGFyYXRlIHN3aXRjaC1jYXNlIGhlcmUgbWVhbnMgYQorCSAqICAiZG91YmxlIGRpc3BhdGNo IiBvZiB0aGUgYXJpdGhtZXRpYyBvcGNvZGUsIGJ1dCBzYXZlcyBjb2RlIHNwYWNlLgorCSAqCisJ ICogIEU1IFNlY3Rpb25zIDExLjUsIDExLjUuMSwgMTEuNS4yLCAxMS41LjMsIDExLjYsIDExLjYu MSwgMTEuNi4yLCAxMS42LjMuCisJICovCisKKwlkdWtfZG91YmxlX3QgZDEsIGQyOworCWR1a19k b3VibGVfdW5pb24gZHU7CisJZHVrX3NtYWxsX3VpbnRfZmFzdF90IG9wY29kZV9zaGlmdGVkOwor I2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKSB8fCAhZGVmaW5lZChEVUtfVVNFX0VYRUNfUFJF RkVSX1NJWkUpCisJZHVrX3R2YWwgKnR2X3o7CisjZW5kaWYKKworCURVS19BU1NFUlQodGhyICE9 IE5VTEwpOworCURVS19BU1NFUlQodHZfeCAhPSBOVUxMKTsgIC8qIG1heSBiZSByZWcgb3IgY29u c3QgKi8KKwlEVUtfQVNTRVJUKHR2X3kgIT0gTlVMTCk7ICAvKiBtYXkgYmUgcmVnIG9yIGNvbnN0 ICovCisJRFVLX0FTU0VSVF9ESVNBQkxFKGlkeF96ID49IDApOyAgLyogdW5zaWduZWQgKi8KKwlE VUtfQVNTRVJUKChkdWtfdWludF90KSBpZHhfeiA8IChkdWtfdWludF90KSBkdWtfZ2V0X3RvcCh0 aHIpKTsKKworCW9wY29kZV9zaGlmdGVkID0gb3Bjb2RlID4+IDI7ICAvKiBHZXQgYmFzZSBvcGNv ZGUgd2l0aG91dCByZWcvY29uc3QgbW9kaWZpZXJzLiAqLworCisjaWYgZGVmaW5lZChEVUtfVVNF X0ZBU1RJTlQpCisJaWYgKERVS19UVkFMX0lTX0ZBU1RJTlQodHZfeCkgJiYgRFVLX1RWQUxfSVNf RkFTVElOVCh0dl95KSkgeworCQlkdWtfaW50NjRfdCB2MSwgdjIsIHYzOworCQlkdWtfaW50MzJf dCB2M19oaTsKKworCQl2MSA9IERVS19UVkFMX0dFVF9GQVNUSU5UKHR2X3gpOworCQl2MiA9IERV S19UVkFMX0dFVF9GQVNUSU5UKHR2X3kpOworCisJCXN3aXRjaCAob3Bjb2RlX3NoaWZ0ZWQpIHsK KwkJY2FzZSBEVUtfT1BfU1VCID4+IDI6IHsKKwkJCXYzID0gdjEgLSB2MjsKKwkJCWJyZWFrOwor CQl9CisJCWNhc2UgRFVLX09QX01VTCA+PiAyOiB7CisJCQkvKiBNdXN0IGVuc3VyZSByZXN1bHQg aXMgNjQtYml0IChubyBvdmVyZmxvdyk7IGEKKwkJCSAqIHNpbXBsZSBhbmQgc3VmZmljaWVudCBm YXN0IHBhdGggaXMgdG8gYWxsb3cgb25seQorCQkJICogMzItYml0IGlucHV0cy4gIEF2b2lkIHpl cm8gaW5wdXRzIHRvIGF2b2lkCisJCQkgKiBuZWdhdGl2ZSB6ZXJvIGlzc3VlcyAoLTEgKiAwID0g LTAsIGZvciBpbnN0YW5jZSkuCisJCQkgKi8KKwkJCWlmICh2MSA+PSBEVUtfSTY0X0NPTlNUQU5U KC0weDgwMDAwMDAwKSAmJiB2MSA8PSBEVUtfSTY0X0NPTlNUQU5UKDB4N2ZmZmZmZmYpICYmIHYx ICE9IDAgJiYKKwkJCSAgICB2MiA+PSBEVUtfSTY0X0NPTlNUQU5UKC0weDgwMDAwMDAwKSAmJiB2 MiA8PSBEVUtfSTY0X0NPTlNUQU5UKDB4N2ZmZmZmZmYpICYmIHYyICE9IDApIHsKKwkJCQl2MyA9 IHYxICogdjI7CisJCQl9IGVsc2UgeworCQkJCWdvdG8gc2tpcF9mYXN0aW50OworCQkJfQorCQkJ YnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfRElWID4+IDI6IHsKKwkJCS8qIERvbid0IGFsbG93 IGEgemVybyBkaXZpc29yLiAgRmFzdCBwYXRoIGNoZWNrIGJ5CisJCQkgKiAidmVyaWZ5aW5nIiB3 aXRoIG11bHRpcGxpY2F0aW9uLiAgQWxzbyBhdm9pZCB6ZXJvCisJCQkgKiBkaXZpZGVuZCB0byBh dm9pZCBuZWdhdGl2ZSB6ZXJvIGlzc3VlcyAoMCAvIC0xID0gLTAKKwkJCSAqIGZvciBpbnN0YW5j ZSkuCisJCQkgKi8KKwkJCWlmICh2MSA9PSAwIHx8IHYyID09IDApIHsKKwkJCQlnb3RvIHNraXBf ZmFzdGludDsKKwkJCX0KKwkJCXYzID0gdjEgLyB2MjsKKwkJCWlmICh2MyAqIHYyICE9IHYxKSB7 CisJCQkJZ290byBza2lwX2Zhc3RpbnQ7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlIERV S19PUF9NT0QgPj4gMjogeworCQkJLyogRG9uJ3QgYWxsb3cgYSB6ZXJvIGRpdmlzb3IuICBSZXN0 cmljdCBib3RoIHYxIGFuZAorCQkJICogdjIgdG8gcG9zaXRpdmUgdmFsdWVzIHRvIGF2b2lkIGNv bXBpbGVyIHNwZWNpZmljCisJCQkgKiBiZWhhdmlvci4KKwkJCSAqLworCQkJaWYgKHYxIDwgMSB8 fCB2MiA8IDEpIHsKKwkJCQlnb3RvIHNraXBfZmFzdGludDsKKwkJCX0KKwkJCXYzID0gdjEgJSB2 MjsKKwkJCURVS19BU1NFUlQodjMgPj0gMCk7CisJCQlEVUtfQVNTRVJUKHYzIDwgdjIpOworCQkJ RFVLX0FTU0VSVCh2MSAtICh2MSAvIHYyKSAqIHYyID09IHYzKTsKKwkJCWJyZWFrOworCQl9CisJ CWRlZmF1bHQ6IHsKKwkJCS8qIFBvc3NpYmxlIHdpdGggRFVLX09QX0VYUC4gKi8KKwkJCWdvdG8g c2tpcF9mYXN0aW50OworCQl9CisJCX0KKworCQl2M19oaSA9IChkdWtfaW50MzJfdCkgKHYzID4+ IDMyKTsKKwkJaWYgKERVS19MSUtFTFkodjNfaGkgPj0gRFVLX0k2NF9DT05TVEFOVCgtMHg4MDAw KSAmJiB2M19oaSA8PSBEVUtfSTY0X0NPTlNUQU5UKDB4N2ZmZikpKSB7CisJCQl0dl96ID0gdGhy LT52YWxzdGFja19ib3R0b20gKyBpZHhfejsKKwkJCURVS19UVkFMX1NFVF9GQVNUSU5UX1VQRFJF Rih0aHIsIHR2X3osIHYzKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCQkJcmV0dXJuOworCQl9CisJ CS8qIGZhbGwgdGhyb3VnaCBpZiBvdmVyZmxvdyBldGMgKi8KKwl9Cisgc2tpcF9mYXN0aW50Ogor I2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJTlQgKi8KKworCWlmIChEVUtfVFZBTF9JU19OVU1CRVIo dHZfeCkgJiYgRFVLX1RWQUxfSVNfTlVNQkVSKHR2X3kpKSB7CisJCS8qIGZhc3QgcGF0aCAqLwor CQlkMSA9IERVS19UVkFMX0dFVF9OVU1CRVIodHZfeCk7CisJCWQyID0gRFVLX1RWQUxfR0VUX05V TUJFUih0dl95KTsKKwl9IGVsc2UgeworCQlkdWtfcHVzaF90dmFsKHRociwgdHZfeCk7CisJCWR1 a19wdXNoX3R2YWwodGhyLCB0dl95KTsKKwkJZDEgPSBkdWtfdG9fbnVtYmVyX20yKHRocik7ICAv KiBzaWRlIGVmZmVjdHMgKi8KKwkJZDIgPSBkdWtfdG9fbnVtYmVyX20xKHRocik7CisJCURVS19B U1NFUlQoZHVrX2lzX251bWJlcih0aHIsIC0yKSk7CisJCURVS19BU1NFUlQoZHVrX2lzX251bWJl cih0aHIsIC0xKSk7CisJCURVS19BU1NFUlRfRE9VQkxFX0lTX05PUk1BTElaRUQoZDEpOworCQlE VUtfQVNTRVJUX0RPVUJMRV9JU19OT1JNQUxJWkVEKGQyKTsKKwkJZHVrX3BvcF8yX3Vuc2FmZSh0 aHIpOworCX0KKworCXN3aXRjaCAob3Bjb2RlX3NoaWZ0ZWQpIHsKKwljYXNlIERVS19PUF9TVUIg Pj4gMjogeworCQlkdS5kID0gZDEgLSBkMjsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX09QX01V TCA+PiAyOiB7CisJCWR1LmQgPSBkMSAqIGQyOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfT1Bf RElWID4+IDI6IHsKKwkJLyogRGl2aXNpb24tYnktemVybyBpcyB1bmRlZmluZWQgYmVoYXZpb3Is IHNvCisJCSAqIHJlbHkgb24gYSBoZWxwZXIuCisJCSAqLworCQlkdS5kID0gZHVrX2RvdWJsZV9k aXYoZDEsIGQyKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX09QX01PRCA+PiAyOiB7CisJCWR1 LmQgPSBkdWtfX2NvbXB1dGVfbW9kKGQxLCBkMik7CisJCWJyZWFrOworCX0KKyNpZiBkZWZpbmVk KERVS19VU0VfRVM3X0VYUF9PUEVSQVRPUikKKwljYXNlIERVS19PUF9FWFAgPj4gMjogeworCQlk dS5kID0gZHVrX19jb21wdXRlX2V4cChkMSwgZDIpOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlk ZWZhdWx0OiB7CisJCURVS19VTlJFQUNIQUJMRSgpOworCQlkdS5kID0gRFVLX0RPVUJMRV9OQU47 ICAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlicmVhazsKKwl9CisJfQorCisjaWYgZGVmaW5l ZChEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUpCisJZHVrX3B1c2hfbnVtYmVyKHRociwgZHUuZCk7 ICAvKiB3aWxsIE5hTiBub3JtYWxpemUgcmVzdWx0ICovCisJZHVrX3JlcGxhY2UodGhyLCAoZHVr X2lkeF90KSBpZHhfeik7CisjZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisJ LyogaW1wb3J0YW50IHRvIHVzZSBub3JtYWxpemVkIE5hTiB3aXRoIDgtYnl0ZSB0YWdnZWQgdHlw ZXMgKi8KKwlEVUtfREJMVU5JT05fTk9STUFMSVpFX05BTl9DSEVDSygmZHUpOworCURVS19BU1NF UlQoRFVLX0RCTFVOSU9OX0lTX05PUk1BTElaRUQoJmR1KSk7CisJdHZfeiA9IHRoci0+dmFsc3Rh Y2tfYm90dG9tICsgaWR4X3o7CisJRFVLX1RWQUxfU0VUX05VTUJFUl9VUERSRUYodGhyLCB0dl96 LCBkdS5kKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJF RkVSX1NJWkUgKi8KK30KKworRFVLX0xPQ0FMIERVS19fSU5MSU5FX1BFUkYgdm9pZCBkdWtfX3Zt X2JpdHdpc2VfYmluYXJ5X29wKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dl94LCBkdWtf dHZhbCAqdHZfeSwgZHVrX3NtYWxsX3VpbnRfZmFzdF90IGlkeF96LCBkdWtfc21hbGxfdWludF9m YXN0X3Qgb3Bjb2RlKSB7CisJLyoKKwkgKiAgQmluYXJ5IGJpdHdpc2Ugb3BlcmF0aW9ucyB1c2Ug ZGlmZmVyZW50IGNvZXJjaW9ucyAoVG9JbnQzMiwgVG9VaW50MzIpCisJICogIGRlcGVuZGluZyBv biB0aGUgb3BlcmF0aW9uLiAgV2UgY29lcmNlIHRoZSBhcmd1bWVudHMgZmlyc3QgdXNpbmcKKwkg KiAgVG9JbnQzMigpLCBhbmQgdGhlbiBjYXN0IHRvIGFuIDMyLWJpdCB2YWx1ZSBpZiBuZWNlc3Nh cnkuICBOb3RlIHRoYXQKKwkgKiAgc3VjaCBjYXN0cyBtdXN0IGJlIGNvcnJlY3QgZXZlbiBpZiB0 aGVyZSBpcyBubyBuYXRpdmUgMzItYml0IHR5cGUKKwkgKiAgKGUuZy4sIGR1a19pbnQzMl90IGFu ZCBkdWtfdWludDMyX3QgYXJlIDY0LWJpdCkuCisJICoKKwkgKiAgRTUgU2VjdGlvbnMgMTEuMTAs IDExLjcuMSwgMTEuNy4yLCAxMS43LjMKKwkgKi8KKworCWR1a19pbnQzMl90IGkxLCBpMiwgaTM7 CisJZHVrX3VpbnQzMl90IHUxLCB1MiwgdTM7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQp CisJZHVrX2ludDY0X3QgZmkzOworI2Vsc2UKKwlkdWtfZG91YmxlX3QgZDM7CisjZW5kaWYKKwlk dWtfc21hbGxfdWludF9mYXN0X3Qgb3Bjb2RlX3NoaWZ0ZWQ7CisjaWYgZGVmaW5lZChEVUtfVVNF X0ZBU1RJTlQpIHx8ICFkZWZpbmVkKERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSkKKwlkdWtfdHZh bCAqdHZfejsKKyNlbmRpZgorCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VS VCh0dl94ICE9IE5VTEwpOyAgLyogbWF5IGJlIHJlZyBvciBjb25zdCAqLworCURVS19BU1NFUlQo dHZfeSAhPSBOVUxMKTsgIC8qIG1heSBiZSByZWcgb3IgY29uc3QgKi8KKwlEVUtfQVNTRVJUX0RJ U0FCTEUoaWR4X3ogPj0gMCk7ICAvKiB1bnNpZ25lZCAqLworCURVS19BU1NFUlQoKGR1a191aW50 X3QpIGlkeF96IDwgKGR1a191aW50X3QpIGR1a19nZXRfdG9wKHRocikpOworCisJb3Bjb2RlX3No aWZ0ZWQgPSBvcGNvZGUgPj4gMjsgIC8qIEdldCBiYXNlIG9wY29kZSB3aXRob3V0IHJlZy9jb25z dCBtb2RpZmllcnMuICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwlpZiAoRFVL X1RWQUxfSVNfRkFTVElOVCh0dl94KSAmJiBEVUtfVFZBTF9JU19GQVNUSU5UKHR2X3kpKSB7CisJ CWkxID0gKGR1a19pbnQzMl90KSBEVUtfVFZBTF9HRVRfRkFTVElOVF9JMzIodHZfeCk7CisJCWky ID0gKGR1a19pbnQzMl90KSBEVUtfVFZBTF9HRVRfRkFTVElOVF9JMzIodHZfeSk7CisJfQorCWVs c2UKKyNlbmRpZiAgLyogRFVLX1VTRV9GQVNUSU5UICovCisJeworCQlkdWtfcHVzaF90dmFsKHRo ciwgdHZfeCk7CisJCWR1a19wdXNoX3R2YWwodGhyLCB0dl95KTsKKwkJaTEgPSBkdWtfdG9faW50 MzIodGhyLCAtMik7CisJCWkyID0gZHVrX3RvX2ludDMyKHRociwgLTEpOworCQlkdWtfcG9wXzJf dW5zYWZlKHRocik7CisJfQorCisJc3dpdGNoIChvcGNvZGVfc2hpZnRlZCkgeworCWNhc2UgRFVL X09QX0JBTkQgPj4gMjogeworCQlpMyA9IGkxICYgaTI7CisJCWJyZWFrOworCX0KKwljYXNlIERV S19PUF9CT1IgPj4gMjogeworCQlpMyA9IGkxIHwgaTI7CisJCWJyZWFrOworCX0KKwljYXNlIERV S19PUF9CWE9SID4+IDI6IHsKKwkJaTMgPSBpMSBeIGkyOworCQlicmVhazsKKwl9CisJY2FzZSBE VUtfT1BfQkFTTCA+PiAyOiB7CisJCS8qIFNpZ25lZCBzaGlmdCwgbmFtZWQgImFyaXRobWV0aWMi IChhc2wpIGJlY2F1c2UgdGhlIHJlc3VsdAorCQkgKiBpcyBzaWduZWQsIGUuZy4gNDI5NDk2NzI5 NSA8PCAxIC0+IC0yLiAgTm90ZSB0aGF0IHJlc3VsdAorCQkgKiBtdXN0IGJlIG1hc2tlZC4KKwkJ ICovCisKKwkJdTIgPSAoKGR1a191aW50MzJfdCkgaTIpICYgMHhmZmZmZmZmZlVMOworCQlpMyA9 IChkdWtfaW50MzJfdCkgKCgoZHVrX3VpbnQzMl90KSBpMSkgPDwgKHUyICYgMHgxZlVMKSk7ICAv KiBFNSBTZWN0aW9uIDExLjcuMSwgc3RlcHMgNyBhbmQgOCAqLworCQlpMyA9IGkzICYgKChkdWtf aW50MzJfdCkgMHhmZmZmZmZmZlVMKTsgICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBsZWZ0 IHNoaWZ0LCBzaG91bGQgbWFzayAqLworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfT1BfQkFTUiA+ PiAyOiB7CisJCS8qIHNpZ25lZCBzaGlmdCAqLworCisJCXUyID0gKChkdWtfdWludDMyX3QpIGky KSAmIDB4ZmZmZmZmZmZVTDsKKwkJaTMgPSBpMSA+PiAodTIgJiAweDFmVUwpOyAgICAgICAgICAg ICAgICAgICAgICAvKiBFNSBTZWN0aW9uIDExLjcuMiwgc3RlcHMgNyBhbmQgOCAqLworCQlicmVh azsKKwl9CisJY2FzZSBEVUtfT1BfQkxTUiA+PiAyOiB7CisJCS8qIHVuc2lnbmVkIHNoaWZ0ICov CisKKwkJdTEgPSAoKGR1a191aW50MzJfdCkgaTEpICYgMHhmZmZmZmZmZlVMOworCQl1MiA9ICgo ZHVrX3VpbnQzMl90KSBpMikgJiAweGZmZmZmZmZmVUw7CisKKwkJLyogc3BlY2lhbCByZXN1bHQg dmFsdWUgaGFuZGxpbmcgKi8KKwkJdTMgPSB1MSA+PiAodTIgJiAweDFmVUwpOyAgICAgLyogRTUg U2VjdGlvbiAxMS43LjIsIHN0ZXBzIDcgYW5kIDggKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFT VElOVCkKKwkJZmkzID0gKGR1a19pbnQ2NF90KSB1MzsKKwkJZ290byBmYXN0aW50X3Jlc3VsdF9z ZXQ7CisjZWxzZQorCQlkMyA9IChkdWtfZG91YmxlX3QpIHUzOworCQlnb3RvIHJlc3VsdF9zZXQ7 CisjZW5kaWYKKwl9CisJZGVmYXVsdDogeworCQlEVUtfVU5SRUFDSEFCTEUoKTsKKwkJaTMgPSAw OyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJYnJlYWs7CisJfQorCX0KKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9GQVNUSU5UKQorCS8qIFJlc3VsdCBpcyBhbHdheXMgZmFzdGludCBjb21wYXRp YmxlLiAqLworCS8qIFhYWDogU2V0IDMyLWJpdCByZXN1bHQgKGJ1dCBtdXN0IHRoZW4gaGFuZGxl IHNpZ25lZCBhbmQKKwkgKiB1bnNpZ25lZCByZXN1bHRzIHNlcGFyYXRlbHkpLgorCSAqLworCWZp MyA9IChkdWtfaW50NjRfdCkgaTM7CisKKyBmYXN0aW50X3Jlc3VsdF9zZXQ6CisJdHZfeiA9IHRo ci0+dmFsc3RhY2tfYm90dG9tICsgaWR4X3o7CisJRFVLX1RWQUxfU0VUX0ZBU1RJTlRfVVBEUkVG KHRociwgdHZfeiwgZmkzKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworI2Vsc2UgIC8qIERVS19VU0Vf RkFTVElOVCAqLworCWQzID0gKGR1a19kb3VibGVfdCkgaTM7CisKKyByZXN1bHRfc2V0OgorCURV S19BU1NFUlQoIURVS19JU05BTihkMykpOyAgICAgICAgICAgIC8qICdkMycgaXMgbmV2ZXIgTmFO LCBzbyBubyBuZWVkIHRvIG5vcm1hbGl6ZSAqLworCURVS19BU1NFUlRfRE9VQkxFX0lTX05PUk1B TElaRUQoZDMpOyAgIC8qIGFsd2F5cyBub3JtYWxpemVkICovCisKKyNpZiBkZWZpbmVkKERVS19V U0VfRVhFQ19QUkVGRVJfU0laRSkKKwlkdWtfcHVzaF9udW1iZXIodGhyLCBkMyk7ICAvKiB3b3Vs ZCBOYU4gbm9ybWFsaXplIHJlc3VsdCwgYnV0IHVubmVjZXNzYXJ5ICovCisJZHVrX3JlcGxhY2Uo dGhyLCAoZHVrX2lkeF90KSBpZHhfeik7CisjZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9T SVpFICovCisJdHZfeiA9IHRoci0+dmFsc3RhY2tfYm90dG9tICsgaWR4X3o7CisJRFVLX1RWQUxf U0VUX05VTUJFUl9VUERSRUYodGhyLCB0dl96LCBkMyk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKyNl bmRpZiAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisjZW5kaWYgIC8qIERVS19VU0Vf RkFTVElOVCAqLworfQorCisvKiBJbi1wbGFjZSB1bmFyeSBvcGVyYXRpb24uICovCitEVUtfTE9D QUwgRFVLX19JTkxJTkVfUEVSRiB2b2lkIGR1a19fdm1fYXJpdGhfdW5hcnlfb3AoZHVrX2h0aHJl YWQgKnRociwgZHVrX3VpbnRfZmFzdF90IGlkeF9zcmMsIGR1a191aW50X2Zhc3RfdCBpZHhfZHN0 LCBkdWtfc21hbGxfdWludF9mYXN0X3Qgb3Bjb2RlKSB7CisJLyoKKwkgKiAgQXJpdGhtZXRpYyBv cGVyYXRpb25zIG90aGVyIHRoYW4gJysnIGhhdmUgbnVtYmVyLW9ubHkgc2VtYW50aWNzCisJICog IGFuZCBhcmUgaW1wbGVtZW50ZWQgaGVyZS4gIFRoZSBzZXBhcmF0ZSBzd2l0Y2gtY2FzZSBoZXJl IG1lYW5zIGEKKwkgKiAgImRvdWJsZSBkaXNwYXRjaCIgb2YgdGhlIGFyaXRobWV0aWMgb3Bjb2Rl LCBidXQgc2F2ZXMgY29kZSBzcGFjZS4KKwkgKgorCSAqICBFNSBTZWN0aW9ucyAxMS41LCAxMS41 LjEsIDExLjUuMiwgMTEuNS4zLCAxMS42LCAxMS42LjEsIDExLjYuMiwgMTEuNi4zLgorCSAqLwor CisJZHVrX3R2YWwgKnR2OworCWR1a19kb3VibGVfdCBkMTsKKwlkdWtfZG91YmxlX3VuaW9uIGR1 OworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvcGNvZGUgPT0gRFVL X09QX1VOTSB8fCBvcGNvZGUgPT0gRFVLX09QX1VOUCk7CisJRFVLX0FTU0VSVF9ESVNBQkxFKGlk eF9zcmMgPj0gMCk7CisJRFVLX0FTU0VSVF9ESVNBQkxFKGlkeF9kc3QgPj0gMCk7CisKKwl0diA9 IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCAoZHVrX2lkeF90KSBpZHhfc3JjKTsKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCWlmIChEVUtfVFZBTF9JU19GQVNUSU5UKHR2KSkgewor CQlkdWtfaW50NjRfdCB2MSwgdjI7CisKKwkJdjEgPSBEVUtfVFZBTF9HRVRfRkFTVElOVCh0dik7 CisJCWlmIChvcGNvZGUgPT0gRFVLX09QX1VOTSkgeworCQkJLyogVGhlIHNtYWxsZXN0IGZhc3Rp bnQgaXMgbm8gbG9uZ2VyIDQ4LWJpdCB3aGVuCisJCQkgKiBuZWdhdGVkLiAgUG9zaXRpdmUgemVy byBiZWNhbWVzIG5lZ2F0aXZlIHplcm8KKwkJCSAqIChjYW5ub3QgYmUgcmVwcmVzZW50ZWQpIHdo ZW4gbmVnYXRlZC4KKwkJCSAqLworCQkJaWYgKERVS19MSUtFTFkodjEgIT0gRFVLX0ZBU1RJTlRf TUlOICYmIHYxICE9IDApKSB7CisJCQkJdjIgPSAtdjE7CisJCQkJdHYgPSBEVUtfR0VUX1RWQUxf UE9TSURYKHRociwgKGR1a19pZHhfdCkgaWR4X2RzdCk7CisJCQkJRFVLX1RWQUxfU0VUX0ZBU1RJ TlRfVVBEUkVGKHRociwgdHYsIHYyKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJ CQkvKiBUb051bWJlcigpIGZvciBhIGZhc3RpbnQgaXMgYSBuby1vcC4gKi8KKwkJCURVS19BU1NF UlQob3Bjb2RlID09IERVS19PUF9VTlApOworCQkJdjIgPSB2MTsKKwkJCXR2ID0gRFVLX0dFVF9U VkFMX1BPU0lEWCh0aHIsIChkdWtfaWR4X3QpIGlkeF9kc3QpOworCQkJRFVLX1RWQUxfU0VUX0ZB U1RJTlRfVVBEUkVGKHRociwgdHYsIHYyKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBmYWxsIHRo cm91Z2ggaWYgb3ZlcmZsb3cgZXRjICovCisJfQorI2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJTlQg Ki8KKworCWlmIChEVUtfVFZBTF9JU19OVU1CRVIodHYpKSB7CisJCWQxID0gRFVLX1RWQUxfR0VU X05VTUJFUih0dik7CisJfSBlbHNlIHsKKwkJZDEgPSBkdWtfdG9fbnVtYmVyX3R2YWwodGhyLCB0 dik7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwl9CisKKwlpZiAob3Bjb2RlID09IERVS19PUF9VTlAp IHsKKwkJLyogVG9OdW1iZXIoKSBmb3IgYSBkb3VibGUgaXMgYSBuby1vcCwgYnV0IHVuYXJ5IHBs dXMgaXMKKwkJICogdXNlZCB0byBmb3JjZSBhIGZhc3RpbnQgY2hlY2sgc28gZG8gdGhhdCBoZXJl LgorCQkgKi8KKwkJZHUuZCA9IGQxOworCQlEVUtfQVNTRVJUKERVS19EQkxVTklPTl9JU19OT1JN QUxJWkVEKCZkdSkpOworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQl0diA9IERVS19H RVRfVFZBTF9QT1NJRFgodGhyLCAoZHVrX2lkeF90KSBpZHhfZHN0KTsKKwkJRFVLX1RWQUxfU0VU X05VTUJFUl9DSEtGQVNUX1VQRFJFRih0aHIsIHR2LCBkdS5kKTsgIC8qIGFsd2F5cyAnZmFzdCcs IGkuZS4gaW5saW5lZCAqLworCQlyZXR1cm47CisjZW5kaWYKKwl9IGVsc2UgeworCQlEVUtfQVNT RVJUKG9wY29kZSA9PSBEVUtfT1BfVU5NKTsKKwkJZHUuZCA9IC1kMTsKKwkJRFVLX0RCTFVOSU9O X05PUk1BTElaRV9OQU5fQ0hFQ0soJmR1KTsgIC8qIG1hbmRhdG9yeSBpZiBkdS5kIGlzIGEgTmFO ICovCisJCURVS19BU1NFUlQoRFVLX0RCTFVOSU9OX0lTX05PUk1BTElaRUQoJmR1KSk7CisJfQor CisJLyogWFhYOiBzaXplIG9wdGltaXplOiBwdXNoK3JlcGxhY2U/ICovCisJdHYgPSBEVUtfR0VU X1RWQUxfUE9TSURYKHRociwgKGR1a19pZHhfdCkgaWR4X2RzdCk7CisJRFVLX1RWQUxfU0VUX05V TUJFUl9VUERSRUYodGhyLCB0diwgZHUuZCk7Cit9CisKK0RVS19MT0NBTCBEVUtfX0lOTElORV9Q RVJGIHZvaWQgZHVrX192bV9iaXR3aXNlX25vdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF9m YXN0X3QgaWR4X3NyYywgZHVrX3VpbnRfZmFzdF90IGlkeF9kc3QpIHsKKwkvKgorCSAqICBFNSBT ZWN0aW9uIDExLjQuOAorCSAqLworCisJZHVrX3R2YWwgKnR2OworCWR1a19pbnQzMl90IGkxLCBp MjsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlRfRElTQUJMRShpZHhf c3JjID49IDApOworCURVS19BU1NFUlRfRElTQUJMRShpZHhfZHN0ID49IDApOworCURVS19BU1NF UlQoKGR1a191aW50X3QpIGlkeF9zcmMgPCAoZHVrX3VpbnRfdCkgZHVrX2dldF90b3AodGhyKSk7 CisJRFVLX0FTU0VSVCgoZHVrX3VpbnRfdCkgaWR4X2RzdCA8IChkdWtfdWludF90KSBkdWtfZ2V0 X3RvcCh0aHIpKTsKKworCXR2ID0gRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIChkdWtfaWR4X3Qp IGlkeF9zcmMpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJaWYgKERVS19UVkFM X0lTX0ZBU1RJTlQodHYpKSB7CisJCWkxID0gKGR1a19pbnQzMl90KSBEVUtfVFZBTF9HRVRfRkFT VElOVF9JMzIodHYpOworCX0KKwllbHNlCisjZW5kaWYgIC8qIERVS19VU0VfRkFTVElOVCAqLwor CXsKKwkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2KTsKKwkJaTEgPSBkdWtfdG9faW50MzIodGhyLCAt MSk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJZHVrX3BvcF91bnNhZmUodGhyKTsKKwl9CisKKwkv KiBSZXN1bHQgaXMgYWx3YXlzIGZhc3RpbnQgY29tcGF0aWJsZS4gKi8KKwlpMiA9IH5pMTsKKwl0 diA9IERVS19HRVRfVFZBTF9QT1NJRFgodGhyLCAoZHVrX2lkeF90KSBpZHhfZHN0KTsKKwlEVUtf VFZBTF9TRVRfSTMyX1VQRFJFRih0aHIsIHR2LCBpMik7ICAvKiBzaWRlIGVmZmVjdHMgKi8KK30K KworRFVLX0xPQ0FMIERVS19fSU5MSU5FX1BFUkYgdm9pZCBkdWtfX3ZtX2xvZ2ljYWxfbm90KGR1 a19odGhyZWFkICp0aHIsIGR1a191aW50X2Zhc3RfdCBpZHhfc3JjLCBkdWtfdWludF9mYXN0X3Qg aWR4X2RzdCkgeworCS8qCisJICogIEU1IFNlY3Rpb24gMTEuNC45CisJICovCisKKwlkdWtfdHZh bCAqdHY7CisJZHVrX2Jvb2xfdCByZXM7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlE VUtfQVNTRVJUX0RJU0FCTEUoaWR4X3NyYyA+PSAwKTsKKwlEVUtfQVNTRVJUX0RJU0FCTEUoaWR4 X2RzdCA+PSAwKTsKKwlEVUtfQVNTRVJUKChkdWtfdWludF90KSBpZHhfc3JjIDwgKGR1a191aW50 X3QpIGR1a19nZXRfdG9wKHRocikpOworCURVS19BU1NFUlQoKGR1a191aW50X3QpIGlkeF9kc3Qg PCAoZHVrX3VpbnRfdCkgZHVrX2dldF90b3AodGhyKSk7CisKKwkvKiBUb0Jvb2xlYW4oKSBkb2Vz IG5vdCByZXF1aXJlIGFueSBvcGVyYXRpb25zIHdpdGggc2lkZSBlZmZlY3RzIHNvCisJICogd2Ug Y2FuIGRvIGl0IGVmZmljaWVudGx5LiAgRm9yIGZvb3RwcmludCBpdCB3b3VsZCBiZSBiZXR0ZXIg dG8gdXNlCisJICogZHVrX2pzX3RvYm9vbGVhbigpIGFuZCB0aGVuIHB1c2grcmVwbGFjZSB0byB0 aGUgcmVzdWx0IHNsb3QuCisJICovCisJdHYgPSBEVUtfR0VUX1RWQUxfUE9TSURYKHRociwgKGR1 a19pZHhfdCkgaWR4X3NyYyk7CisJcmVzID0gZHVrX2pzX3RvYm9vbGVhbih0dik7ICAvKiBkb2Vz IG5vdCBtb2RpZnkgJ3R2JyAqLworCURVS19BU1NFUlQocmVzID09IDAgfHwgcmVzID09IDEpOwor CXJlcyBePSAxOworCXR2ID0gRFVLX0dFVF9UVkFMX1BPU0lEWCh0aHIsIChkdWtfaWR4X3QpIGlk eF9kc3QpOworCS8qIFhYWDogc2l6ZSBvcHRpbWl6ZTogcHVzaCtyZXBsYWNlPyAqLworCURVS19U VkFMX1NFVF9CT09MRUFOX1VQRFJFRih0aHIsIHR2LCByZXMpOyAgLyogc2lkZSBlZmZlY3RzICov Cit9CisKKy8qIFhYWDogc2l6ZSBvcHRpbWl6ZWQgdmFyaWFudCAqLworRFVLX0xPQ0FMIERVS19f SU5MSU5FX1BFUkYgdm9pZCBkdWtfX3ByZXBvc3RfaW5jZGVjX3JlZ19oZWxwZXIoZHVrX2h0aHJl YWQgKnRociwgZHVrX3R2YWwgKnR2X2RzdCwgZHVrX3R2YWwgKnR2X3NyYywgZHVrX3NtYWxsX3Vp bnRfdCBvcCkgeworCWR1a19kb3VibGVfdCB4LCB5LCB6OworCisJLyogVHdvIGxvd2VzdCBiaXRz IG9mIG9wY29kZSBhcmUgdXNlZCB0byBkaXN0aW5ndWlzaAorCSAqIHZhcmlhbnRzLiAgQml0IDAg PSBpbmMoMCkvZGVjKDEpLCBiaXQgMSA9IHByZSgwKS9wb3N0KDEpLgorCSAqLworCURVS19BU1NF UlQoKERVS19PUF9QUkVJTkNSICYgMHgwMykgPT0gMHgwMCk7CisJRFVLX0FTU0VSVCgoRFVLX09Q X1BSRURFQ1IgJiAweDAzKSA9PSAweDAxKTsKKwlEVUtfQVNTRVJUKChEVUtfT1BfUE9TVElOQ1Ig JiAweDAzKSA9PSAweDAyKTsKKwlEVUtfQVNTRVJUKChEVUtfT1BfUE9TVERFQ1IgJiAweDAzKSA9 PSAweDAzKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCWlmIChEVUtfVFZBTF9J U19GQVNUSU5UKHR2X3NyYykpIHsKKwkJZHVrX2ludDY0X3QgeF9maSwgeV9maSwgel9maTsKKwkJ eF9maSA9IERVS19UVkFMX0dFVF9GQVNUSU5UKHR2X3NyYyk7CisJCWlmIChvcCAmIDB4MDEpIHsK KwkJCWlmIChEVUtfVU5MSUtFTFkoeF9maSA9PSBEVUtfRkFTVElOVF9NSU4pKSB7CisJCQkJZ290 byBza2lwX2Zhc3RpbnQ7CisJCQl9CisJCQl5X2ZpID0geF9maSAtIDE7CisJCX0gZWxzZSB7CisJ CQlpZiAoRFVLX1VOTElLRUxZKHhfZmkgPT0gRFVLX0ZBU1RJTlRfTUFYKSkgeworCQkJCWdvdG8g c2tpcF9mYXN0aW50OworCQkJfQorCQkJeV9maSA9IHhfZmkgKyAxOworCQl9CisKKwkJRFVLX1RW QUxfU0VUX0ZBU1RJTlQodHZfc3JjLCB5X2ZpKTsgIC8qIG5vIG5lZWQgZm9yIHJlZmNvdW50IHVw ZGF0ZSAqLworCisJCXpfZmkgPSAob3AgJiAweDAyKSA/IHhfZmkgOiB5X2ZpOworCQlEVUtfVFZB TF9TRVRfRkFTVElOVF9VUERSRUYodGhyLCB0dl9kc3QsIHpfZmkpOyAgLyogc2lkZSBlZmZlY3Rz ICovCisJCXJldHVybjsKKwl9Cisgc2tpcF9mYXN0aW50OgorI2VuZGlmCisJaWYgKERVS19UVkFM X0lTX05VTUJFUih0dl9zcmMpKSB7CisJCS8qIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUg dGhlIHJlZ2lzdGVyCisJCSAqIGlzIGEgbnVtYmVyIChlLmcuIGxvb3AgY291bnRlcikuCisJCSAq LworCisJCXggPSBEVUtfVFZBTF9HRVRfTlVNQkVSKHR2X3NyYyk7CisJCWlmIChvcCAmIDB4MDEp IHsKKwkJCXkgPSB4IC0gMS4wOworCQl9IGVsc2UgeworCQkJeSA9IHggKyAxLjA7CisJCX0KKwor CQlEVUtfVFZBTF9TRVRfTlVNQkVSKHR2X3NyYywgeSk7ICAvKiBubyBuZWVkIGZvciByZWZjb3Vu dCB1cGRhdGUgKi8KKwl9IGVsc2UgeworCQkvKiBQcmVzZXJ2ZSBkdWtfdHZhbCBwb2ludGVyKHMp IGFjcm9zcyBhIHBvdGVudGlhbCB2YWxzdGFjaworCQkgKiByZXNpemUgYnkgY29udmVydGluZyB0 aGVtIGludG8gb2Zmc2V0cyB0ZW1wb3JhcmlseS4KKwkJICovCisJCWR1a19pZHhfdCBiYzsKKwkJ ZHVrX3NpemVfdCBvZmZfZHN0OworCisJCW9mZl9kc3QgPSAoZHVrX3NpemVfdCkgKChkdWtfdWlu dDhfdCAqKSB0dl9kc3QgLSAoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19ib3R0b20pOwor CQliYyA9IChkdWtfaWR4X3QpICh0dl9zcmMgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7ICAvKiBY WFg6IHBhc3MgaW5kZXggZXhwbGljaXRseT8gKi8KKwkJdHZfc3JjID0gTlVMTDsgIC8qIG5vIGxv bmdlciByZWZlcmVuY2VkICovCisKKwkJeCA9IGR1a190b19udW1iZXIodGhyLCBiYyk7CisJCWlm IChvcCAmIDB4MDEpIHsKKwkJCXkgPSB4IC0gMS4wOworCQl9IGVsc2UgeworCQkJeSA9IHggKyAx LjA7CisJCX0KKworCQlkdWtfcHVzaF9udW1iZXIodGhyLCB5KTsKKwkJZHVrX3JlcGxhY2UodGhy LCBiYyk7CisKKwkJdHZfZHN0ID0gKGR1a190dmFsICopICh2b2lkICopICgoKGR1a191aW50OF90 ICopIHRoci0+dmFsc3RhY2tfYm90dG9tKSArIG9mZl9kc3QpOworCX0KKworCXogPSAob3AgJiAw eDAyKSA/IHggOiB5OworCURVS19UVkFMX1NFVF9OVU1CRVJfVVBEUkVGKHRociwgdHZfZHN0LCB6 KTsgIC8qIHNpZGUgZWZmZWN0cyAqLworfQorCitEVUtfTE9DQUwgRFVLX19JTkxJTkVfUEVSRiB2 b2lkIGR1a19fcHJlcG9zdF9pbmNkZWNfdmFyX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBkdWtf c21hbGxfdWludF90IGlkeF9kc3QsIGR1a190dmFsICp0dl9pZCwgZHVrX3NtYWxsX3VpbnRfdCBv cCwgZHVrX3NtYWxsX3VpbnRfdCBpc19zdHJpY3QpIHsKKwlkdWtfYWN0aXZhdGlvbiAqYWN0Owor CWR1a19kb3VibGVfdCB4LCB5OworCWR1a19oc3RyaW5nICpuYW1lOworCisJLyogWFhYOiBUaGUg cHJlL3Bvc3QgaW5jL2RlYyBmb3IgYW4gaWRlbnRpZmllciBsb29rdXAgaXMKKwkgKiBtaXNzaW5n IHRoZSBpbXBvcnRhbnQgZmFzdCBwYXRoIHdoZXJlIHRoZSBpZGVudGlmaWVyCisJICogaGFzIGEg c3RvcmFnZSBsb2NhdGlvbiBlLmcuIGluIGEgc2NvcGUgb2JqZWN0IHNvIHRoYXQKKwkgKiBpdCBj YW4gYmUgdXBkYXRlZCBpbi1wbGFjZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBjYXNlCisJICogd2hl cmUgdGhlIGlkZW50aWZpZXIgaGFzIGEgc3RvcmFnZSBsb2NhdGlvbiBBTkQgdGhlCisJICogcHJl dmlvdXMgdmFsdWUgaXMgYSBudW1iZXIgc2hvdWxkIGJlIG9wdGltaXplZCBiZWNhdXNlCisJICog aXQncyBzaWRlIGVmZmVjdCBmcmVlLgorCSAqLworCisJLyogVHdvIGxvd2VzdCBiaXRzIG9mIG9w Y29kZSBhcmUgdXNlZCB0byBkaXN0aW5ndWlzaAorCSAqIHZhcmlhbnRzLiAgQml0IDAgPSBpbmMo MCkvZGVjKDEpLCBiaXQgMSA9IHByZSgwKS9wb3N0KDEpLgorCSAqLworCURVS19BU1NFUlQoKERV S19PUF9QUkVJTkNWICYgMHgwMykgPT0gMHgwMCk7CisJRFVLX0FTU0VSVCgoRFVLX09QX1BSRURF Q1YgJiAweDAzKSA9PSAweDAxKTsKKwlEVUtfQVNTRVJUKChEVUtfT1BfUE9TVElOQ1YgJiAweDAz KSA9PSAweDAyKTsKKwlEVUtfQVNTRVJUKChEVUtfT1BfUE9TVERFQ1YgJiAweDAzKSA9PSAweDAz KTsKKworCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfU1RSSU5HKHR2X2lkKSk7CisJbmFtZSA9IERV S19UVkFMX0dFVF9TVFJJTkcodHZfaWQpOworCURVS19BU1NFUlQobmFtZSAhPSBOVUxMKTsKKwlh Y3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCSh2b2lkKSBkdWtfanNfZ2V0dmFyX2FjdGl2YXRp b24odGhyLCBhY3QsIG5hbWUsIDEgLyp0aHJvdyovKTsgIC8qIC0+IFsgLi4uIHZhbCB0aGlzIF0g Ki8KKworCS8qIFhYWDogRmFzdGludCBmYXN0IHBhdGggd291bGQgYmUgdXNlZnVsIGhlcmUuICBB bHNvIGZhc3RpbnRzCisJICogbm93IGxvc2UgdGhlaXIgZmFzdGludCBzdGF0dXMgaW4gY3VycmVu dCBoYW5kbGluZyB3aGljaCBpcworCSAqIG5vdCBpbnR1aXRpdmUuCisJICovCisKKwl4ID0gZHVr X3RvX251bWJlcl9tMih0aHIpOworCWlmIChvcCAmIDB4MDEpIHsKKwkJeSA9IHggLSAxLjA7CisJ fSBlbHNlIHsKKwkJeSA9IHggKyAxLjA7CisJfQorCisJLyogWy4uLiB4IHRoaXNdICovCisKKwlp ZiAob3AgJiAweDAyKSB7CisJCWR1a19wdXNoX251bWJlcih0aHIsIHkpOyAgLyogLT4gWyAuLi4g eCB0aGlzIHkgXSAqLworCQlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKTsK KwkJZHVrX2pzX3B1dHZhcl9hY3RpdmF0aW9uKHRociwgYWN0LCBuYW1lLCBEVUtfR0VUX1RWQUxf TkVHSURYKHRociwgLTEpLCBpc19zdHJpY3QpOworCQlkdWtfcG9wXzJfdW5zYWZlKHRocik7ICAv KiAtPiBbIC4uLiB4IF0gKi8KKwl9IGVsc2UgeworCQlkdWtfcG9wXzJfdW5zYWZlKHRocik7ICAv KiAtPiBbIC4uLiBdICovCisJCWR1a19wdXNoX251bWJlcih0aHIsIHkpOyAgLyogLT4gWyAuLi4g eSBdICovCisJCURVS19BU1NFUlQoYWN0ID09IHRoci0+Y2FsbHN0YWNrX2N1cnIpOworCQlkdWtf anNfcHV0dmFyX2FjdGl2YXRpb24odGhyLCBhY3QsIG5hbWUsIERVS19HRVRfVFZBTF9ORUdJRFgo dGhyLCAtMSksIGlzX3N0cmljdCk7CisJfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0VYRUNfUFJF RkVSX1NJWkUpCisJZHVrX3JlcGxhY2UodGhyLCAoZHVrX2lkeF90KSBpZHhfZHN0KTsKKyNlbHNl ICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKwlEVUtfX1JFUExBQ0VfVE9fVFZQVFIo dGhyLCBEVUtfR0VUX1RWQUxfUE9TSURYKHRociwgKGR1a19pZHhfdCkgaWR4X2RzdCkpOworI2Vu ZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KK30KKworLyoKKyAqICBMb25nam1w IGFuZCBvdGhlciBjb250cm9sIGZsb3cgdHJhbnNmZXIgZm9yIHRoZSBieXRlY29kZSBleGVjdXRv ci4KKyAqCisgKiAgVGhlIGxvbmdqbXAgaGFuZGxlciBjYW4gaGFuZGxlIGFsbCBsb25nam1wIHR5 cGVzOiBlcnJvciwgeWllbGQsIGFuZAorICogIHJlc3VtZSAocHNldWRvdHlwZXMgYXJlIG5ldmVy IGFjdHVhbGx5IHRocm93bikuCisgKgorICogIEVycm9yIHBvbGljeSBmb3IgbG9uZ2ptcDogc2hv dWxkIG5vdCBvcmRpbmFyaWx5IHRocm93IGVycm9yczsgaWYgZXJyb3JzCisgKiAgb2NjdXIgKGUu Zy4gZHVlIHRvIG91dC1vZi1tZW1vcnkpIHRoZXkgYnViYmxlIG91dHdhcmRzIHJhdGhlciB0aGFu IGJlaW5nCisgKiAgaGFuZGxlZCByZWN1cnNpdmVseS4KKyAqLworCisjZGVmaW5lIERVS19fTE9O R0pNUF9SRVNUQVJUICAgMCAgLyogc3RhdGUgdXBkYXRlZCwgcmVzdGFydCBieXRlY29kZSBleGVj dXRpb24gKi8KKyNkZWZpbmUgRFVLX19MT05HSk1QX1JFVEhST1cgICAxICAvKiBleGl0IGJ5dGVj b2RlIGV4ZWN1dG9yIGJ5IHJldGhyb3dpbmcgYW4gZXJyb3IgdG8gY2FsbGVyICovCisKKyNkZWZp bmUgRFVLX19SRVRIQU5EX1JFU1RBUlQgICAwICAvKiBzdGF0ZSB1cGRhdGVkLCByZXN0YXJ0IGJ5 dGVjb2RlIGV4ZWN1dGlvbiAqLworI2RlZmluZSBEVUtfX1JFVEhBTkRfRklOSVNIRUQgIDEgIC8q IGV4aXQgYnl0ZWNvZGUgZXhlY3V0aW9uIHdpdGggcmV0dXJuIHZhbHVlICovCisKKy8qIFhYWDog b3B0aW1pemUgcmVjb25maWcgdmFsc3RhY2sgb3BlcmF0aW9ucyBzbyB0aGF0IHJlc2l6ZSwgY2xh bXAsIGFuZCBzZXR0aW5nCisgKiB0b3AgYXJlIGNvbWJpbmVkIGludG8gb25lIHBhc3MuCisgKi8K KworLyogUmVjb25maWd1cmUgdmFsdWUgc3RhY2sgZm9yIHJldHVybiB0byBhbiBFQ01BU2NyaXB0 IGZ1bmN0aW9uIGF0CisgKiBjYWxsc3RhY2sgdG9wIChjYWxsZXIgdW53aW5kcykuCisgKi8KK0RV S19MT0NBTCB2b2lkIGR1a19fcmVjb25maWdfdmFsc3RhY2tfZWNtYV9yZXR1cm4oZHVrX2h0aHJl YWQgKnRocikgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2hjb21wZnVuYyAqaF9mdW5j OworCWR1a19pZHhfdCBjbGFtcF90b3A7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlh Y3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCURV S19BU1NFUlQoRFVLX0FDVF9HRVRfRlVOQyhhY3QpICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVL X0hPQkpFQ1RfSVNfQ09NUEZVTkMoRFVLX0FDVF9HRVRfRlVOQyhhY3QpKSk7CisKKwkvKiBDbGFt cCBzbyB0aGF0IHZhbHVlcyBhdCAnY2xhbXBfdG9wJyBhbmQgYWJvdmUgYXJlIHdpcGVkIGFuZCB3 b24ndAorCSAqIHJldGFpbiByZWFjaGFibGUgZ2FyYmFnZS4gIFRoZW4gZXh0ZW5kIHRvICducmVn cycgYmVjYXVzZSB3ZSdyZQorCSAqIHJldHVybmluZyB0byBhbiBFQ01BU2NyaXB0IGZ1bmN0aW9u LgorCSAqLworCisJaF9mdW5jID0gKGR1a19oY29tcGZ1bmMgKikgRFVLX0FDVF9HRVRfRlVOQyhh Y3QpOworCisJdGhyLT52YWxzdGFja19ib3R0b20gPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgKChk dWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrICsgYWN0LT5ib3R0b21fYnl0ZW9mZik7CisJRFVL X0FTU0VSVChhY3QtPnJldHZhbF9ieXRlb2ZmID49IGFjdC0+Ym90dG9tX2J5dGVvZmYpOworCWNs YW1wX3RvcCA9IChkdWtfaWR4X3QpICgoYWN0LT5yZXR2YWxfYnl0ZW9mZiAtIGFjdC0+Ym90dG9t X2J5dGVvZmYgKyBzaXplb2YoZHVrX3R2YWwpKSAvIHNpemVvZihkdWtfdHZhbCkpOyAgLyogKzEg PSBvbmUgcmV0dmFsICovCisJZHVrX3NldF90b3BfYW5kX3dpcGUodGhyLCBoX2Z1bmMtPm5yZWdz LCBjbGFtcF90b3ApOworCisJRFVLX0FTU0VSVCgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFj a19lbmQgPj0gKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2sgKyBhY3QtPnJlc2VydmVfYnl0 ZW9mZik7CisJdGhyLT52YWxzdGFja19lbmQgPSAoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtf dWludDhfdCAqKSB0aHItPnZhbHN0YWNrICsgYWN0LT5yZXNlcnZlX2J5dGVvZmYpOworCisJLyog WFhYOiBhIGJlc3QgZWZmb3J0IHNocmluayBjaGVjayB3b3VsZCBiZSBPSyBoZXJlICovCit9CisK Ky8qIFJlY29uZmlndXJlIHZhbHVlIHN0YWNrIGZvciBhbiBFQ01BU2NyaXB0IGNhdGNoZXIuICBV c2UgdG9wbW9zdCBjYXRjaGVyCisgKiBpbiAnYWN0Jy4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVr X19yZWNvbmZpZ192YWxzdGFja19lY21hX2NhdGNoZXIoZHVrX2h0aHJlYWQgKnRociwgZHVrX2Fj dGl2YXRpb24gKmFjdCkgeworCWR1a19jYXRjaGVyICpjYXQ7CisJZHVrX2hjb21wZnVuYyAqaF9m dW5jOworCWR1a19zaXplX3QgaWR4X2JvdHRvbTsKKwlkdWtfaWR4X3QgY2xhbXBfdG9wOworCisJ RFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJRFVL X0FTU0VSVChEVUtfQUNUX0dFVF9GVU5DKGFjdCkgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtf SE9CSkVDVF9JU19DT01QRlVOQyhEVUtfQUNUX0dFVF9GVU5DKGFjdCkpKTsKKwljYXQgPSBhY3Qt PmNhdDsKKwlEVUtfQVNTRVJUKGNhdCAhPSBOVUxMKTsKKworCWhfZnVuYyA9IChkdWtfaGNvbXBm dW5jICopIERVS19BQ1RfR0VUX0ZVTkMoYWN0KTsKKworCXRoci0+dmFsc3RhY2tfYm90dG9tID0g KGR1a190dmFsICopICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjayArIGFj dC0+Ym90dG9tX2J5dGVvZmYpOworCWlkeF9ib3R0b20gPSAoZHVrX3NpemVfdCkgKHRoci0+dmFs c3RhY2tfYm90dG9tIC0gdGhyLT52YWxzdGFjayk7CisJRFVLX0FTU0VSVChjYXQtPmlkeF9iYXNl ID49IGlkeF9ib3R0b20pOworCWNsYW1wX3RvcCA9IChkdWtfaWR4X3QpIChjYXQtPmlkeF9iYXNl IC0gaWR4X2JvdHRvbSArIDIpOyAgLyogKzIgPSBjYXRjaGVyIHZhbHVlLCBjYXRjaGVyIGxqX3R5 cGUgKi8KKwlkdWtfc2V0X3RvcF9hbmRfd2lwZSh0aHIsIGhfZnVuYy0+bnJlZ3MsIGNsYW1wX3Rv cCk7CisKKwlEVUtfQVNTRVJUKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX2VuZCA+PSAo ZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFjayArIGFjdC0+cmVzZXJ2ZV9ieXRlb2ZmKTsKKwl0 aHItPnZhbHN0YWNrX2VuZCA9IChkdWtfdHZhbCAqKSAodm9pZCAqKSAoKGR1a191aW50OF90ICop IHRoci0+dmFsc3RhY2sgKyBhY3QtPnJlc2VydmVfYnl0ZW9mZik7CisKKwkvKiBYWFg6IGEgYmVz dCBlZmZvcnQgc2hyaW5rIGNoZWNrIHdvdWxkIGJlIE9LIGhlcmUgKi8KK30KKworLyogU2V0IGNh dGNoZXIgcmVnczogaWR4X2Jhc2UrMCA9IHZhbHVlLCBpZHhfYmFzZSsxID0gbGpfdHlwZS4KKyAq IE5vIHNpZGUgZWZmZWN0cy4KKyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19zZXRfY2F0Y2hlcl9y ZWdzX25vcnooZHVrX2h0aHJlYWQgKnRociwgZHVrX2NhdGNoZXIgKmNhdCwgZHVrX3R2YWwgKnR2 X3ZhbF91bnN0YWJsZSwgZHVrX3NtYWxsX3VpbnRfdCBsal90eXBlKSB7CisJZHVrX3R2YWwgKnR2 MTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQodHZfdmFsX3Vuc3Rh YmxlICE9IE5VTEwpOworCisJdHYxID0gdGhyLT52YWxzdGFjayArIGNhdC0+aWR4X2Jhc2U7CisJ RFVLX0FTU0VSVCh0djEgPCB0aHItPnZhbHN0YWNrX3RvcCk7CisJRFVLX1RWQUxfU0VUX1RWQUxf VVBEUkVGX05PUloodGhyLCB0djEsIHR2X3ZhbF91bnN0YWJsZSk7CisKKwl0djErKzsKKwlEVUtf QVNTRVJUKHR2MSA9PSB0aHItPnZhbHN0YWNrICsgY2F0LT5pZHhfYmFzZSArIDEpOworCURVS19B U1NFUlQodHYxIDwgdGhyLT52YWxzdGFja190b3ApOworCURVS19UVkFMX1NFVF9VMzJfVVBEUkVG X05PUloodGhyLCB0djEsIChkdWtfdWludDMyX3QpIGxqX3R5cGUpOworfQorCitEVUtfTE9DQUwg dm9pZCBkdWtfX2hhbmRsZV9jYXRjaChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZfdmFs X3Vuc3RhYmxlLCBkdWtfc21hbGxfdWludF90IGxqX3R5cGUpIHsKKwlkdWtfYWN0aXZhdGlvbiAq YWN0OworCWR1a19jYXRjaGVyICpjYXQ7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlE VUtfQVNTRVJUKHR2X3ZhbF91bnN0YWJsZSAhPSBOVUxMKTsKKworCWFjdCA9IHRoci0+Y2FsbHN0 YWNrX2N1cnI7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChhY3QtPmNh dCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19DQVRfR0VUX1RZUEUoYWN0LT5jYXQpID09IERV S19DQVRfVFlQRV9UQ0YpOworCisJZHVrX19zZXRfY2F0Y2hlcl9yZWdzX25vcnoodGhyLCBhY3Qt PmNhdCwgdHZfdmFsX3Vuc3RhYmxlLCBsal90eXBlKTsKKworCURVS19BU1NFUlQodGhyLT5jYWxs c3RhY2tfdG9wID49IDEpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkModGhyLT5jYWxsc3RhY2tfY3VycikgIT0g TlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DT01QRlVOQyhEVUtfQUNUX0dFVF9G VU5DKHRoci0+Y2FsbHN0YWNrX2N1cnIpKSk7CisKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNr X3RvcCA+PSAxKTsKKwlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKTsKKwlE VUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKwlkdWtfX3JlY29uZmlnX3ZhbHN0YWNrX2VjbWFfY2F0 Y2hlcih0aHIsIGFjdCk7CisKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+PSAxKTsK KwlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKTsKKwlEVUtfQVNTRVJUKGFj dCAhPSBOVUxMKTsKKwljYXQgPSBhY3QtPmNhdDsKKwlEVUtfQVNTRVJUKGNhdCAhPSBOVUxMKTsK KworCWFjdC0+Y3Vycl9wYyA9IGNhdC0+cGNfYmFzZSArIDA7ICAvKiArMCA9IGNhdGNoICovCisK KwkvKgorCSAqICBJZiBlbnRlcmluZyBhICdjYXRjaCcgYmxvY2sgd2hpY2ggcmVxdWlyZXMgYW4g YXV0b21hdGljCisJICogIGNhdGNoIHZhcmlhYmxlIGJpbmRpbmcsIGNyZWF0ZSB0aGUgbGV4aWNh bCBlbnZpcm9ubWVudC4KKwkgKgorCSAqICBUaGUgYmluZGluZyBpcyBtdXRhYmxlICg9IHdyaXRh YmxlKSBidXQgbm90IGRlbGV0YWJsZS4KKwkgKiAgU3RlcCA0IGZvciB0aGUgY2F0Y2ggcHJvZHVj dGlvbiBpbiBFNSBTZWN0aW9uIDEyLjE0OworCSAqICBubyB2YWx1ZSBpcyBnaXZlbiBmb3IgQ3Jl YXRlTXV0YWJsZUJpbmRpbmcgJ0QnIGFyZ3VtZW50LAorCSAqICB3aGljaCBpbXBsaWVzIHRoZSBi aW5kaW5nIGlzIG5vdCBkZWxldGFibGUuCisJICovCisKKwlpZiAoRFVLX0NBVF9IQVNfQ0FUQ0hf QklORElOR19FTkFCTEVEKGNhdCkpIHsKKwkJZHVrX2hkZWNlbnYgKm5ld19lbnY7CisKKwkJRFVL X0RERChEVUtfREREUFJJTlQoImNhdGNoZXIgaGFzIGFuIGF1dG9tYXRpYyBjYXRjaCBiaW5kaW5n IikpOworCisJCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID49IDEpOworCQlEVUtfQVNT RVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKTsKKwkJRFVLX0FTU0VSVChhY3QgIT0gTlVM TCk7CisKKwkJaWYgKGFjdC0+bGV4X2VudiA9PSBOVUxMKSB7CisJCQlEVUtfQVNTRVJUKGFjdC0+ dmFyX2VudiA9PSBOVUxMKTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJkZWxheWVkIGVudmly b25tZW50IGluaXRpYWxpemF0aW9uIikpOworCisJCQlkdWtfanNfaW5pdF9hY3RpdmF0aW9uX2Vu dmlyb25tZW50X3JlY29yZHNfZGVsYXllZCh0aHIsIGFjdCk7CisJCQlEVUtfQVNTRVJUKGFjdCA9 PSB0aHItPmNhbGxzdGFja19jdXJyKTsKKwkJCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCQl9 CisJCURVS19BU1NFUlQoYWN0LT5sZXhfZW52ICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKGFjdC0+ dmFyX2VudiAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChEVUtfQUNUX0dFVF9GVU5DKGFjdCkgIT0g TlVMTCk7CisKKwkJLyogWFhYOiBJZiBhbiBvdXQtb2YtbWVtb3J5IGhhcHBlbnMgaGVyZSwgbG9u Z2ptcCBzdGF0ZSBhc3NlcnRzCisJCSAqIHdpbGwgYmUgdHJpZ2dlcmVkIGF0IHByZXNlbnQgYW5k IGEgdHJ5LWNhdGNoIGZhaWxzIHRvIGNhdGNoLgorCQkgKiBUaGF0J3Mgbm90IHNhbmRib3hpbmcg ZmF0YWwgKEMgQVBJIHByb3RlY3RlZCBjYWxscyBhcmUgd2hhdAorCQkgKiBtYXR0ZXJzKSwgYW5k IHNjcmlwdCBjYXRjaCBjb2RlIGNhbiBpbW1lZGlhdGVseSB0aHJvdyBhbnl3YXkKKwkJICogZm9y IGFsbW9zdCBhbnkgb3BlcmF0aW9uLgorCQkgKi8KKwkJbmV3X2VudiA9IGR1a19oZGVjZW52X2Fs bG9jKHRociwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdf RVhURU5TSUJMRSB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9D TEFTU19BU19GTEFHUyhEVUtfSE9CSkVDVF9DTEFTU19ERUNFTlYpKTsKKwkJRFVLX0FTU0VSVChu ZXdfZW52ICE9IE5VTEwpOworCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgKGR1a19ob2JqZWN0ICop IG5ld19lbnYpOworCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUodGhyLT5o ZWFwLCAoZHVrX2hvYmplY3QgKikgbmV3X2VudikgPT0gTlVMTCk7CisJCURVS19EREQoRFVLX0RE RFBSSU5UKCJuZXdfZW52IGFsbG9jYXRlZDogJSFpTyIsIChkdWtfaGVhcGhkciAqKSBuZXdfZW52 KSk7CisKKwkJLyogTm90ZTogY3VycmVudGx5IHRoZSBjYXRjaCBiaW5kaW5nIGlzIGhhbmRsZWQg d2l0aG91dCBhIHJlZ2lzdGVyCisJCSAqIGJpbmRpbmcgYmVjYXVzZSB3ZSBkb24ndCBzdXBwb3J0 IGR5bmFtaWMgcmVnaXN0ZXIgYmluZGluZ3MgKHRoZXkKKwkJICogbXVzdCBiZSBmaXhlZCBmb3Ig YW4gZW50aXJlIGZ1bmN0aW9uKS4gIFNvLCB0aGVyZSBpcyBubyBuZWVkIHRvCisJCSAqIHJlY29y ZCByZWdiYXNlcyBldGMuCisJCSAqLworCisJCS8qIFhYWDogZHVrX3hkZWZfcHJvcCgpIG1heSBj YXVzZSBhbiBvdXQtb2YtbWVtb3J5LCBzZWUgYWJvdmUuICovCisJCURVS19BU1NFUlQoY2F0LT5o X3Zhcm5hbWUgIT0gTlVMTCk7CisJCWR1a19wdXNoX2hzdHJpbmcodGhyLCBjYXQtPmhfdmFybmFt ZSk7CisJCWR1a19wdXNoX3R2YWwodGhyLCB0aHItPnZhbHN0YWNrICsgY2F0LT5pZHhfYmFzZSk7 CisJCWR1a194ZGVmX3Byb3AodGhyLCAtMywgRFVLX1BST1BERVNDX0ZMQUdTX1cpOyAgLyogd3Jp dGFibGUsIG5vdCBjb25maWd1cmFibGUgKi8KKworCQlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNh bGxzdGFja19jdXJyKTsKKwkJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJCURVS19IT0JKRUNU X1NFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgbmV3X2VudiwgYWN0LT5s ZXhfZW52KTsKKwkJYWN0LT5sZXhfZW52ID0gKGR1a19ob2JqZWN0ICopIG5ld19lbnY7CisJCURV S19IT0JKRUNUX0lOQ1JFRih0aHIsIChkdWtfaG9iamVjdCAqKSBuZXdfZW52KTsgIC8qIHJlYWNo YWJsZSB0aHJvdWdoIGFjdGl2YXRpb24gKi8KKwkJLyogTmV0IHJlZmNvdW50IGNoYW5nZSB0byBh Y3QtPmxleF9lbnYgaXMgMDogaW5jcmVmIGZvciBuZXdfZW52J3MKKwkJICogcHJvdG90eXBlLCBk ZWNyZWYgZm9yIGFjdC0+bGV4X2VudiBvdmVyd3JpdGUuCisJCSAqLworCisJCURVS19DQVRfU0VU X0xFWEVOVl9BQ1RJVkUoY2F0KTsKKworCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCisJCURVS19E REQoRFVLX0RERFBSSU5UKCJuZXdfZW52IGZpbmlzaGVkOiAlIWlPIiwgKGR1a19oZWFwaGRyICop IG5ld19lbnYpKTsKKwl9CisKKwlEVUtfQ0FUX0NMRUFSX0NBVENIX0VOQUJMRUQoY2F0KTsKK30K KworRFVLX0xPQ0FMIHZvaWQgZHVrX19oYW5kbGVfZmluYWxseShkdWtfaHRocmVhZCAqdGhyLCBk dWtfdHZhbCAqdHZfdmFsX3Vuc3RhYmxlLCBkdWtfc21hbGxfdWludF90IGxqX3R5cGUpIHsKKwlk dWtfYWN0aXZhdGlvbiAqYWN0OworCWR1a19jYXRjaGVyICpjYXQ7CisKKwlEVUtfQVNTRVJUKHRo ciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHR2X3ZhbF91bnN0YWJsZSAhPSBOVUxMKTsKKworCWFj dCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJRFVL X0FTU0VSVChhY3QtPmNhdCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19DQVRfR0VUX1RZUEUo YWN0LT5jYXQpID09IERVS19DQVRfVFlQRV9UQ0YpOworCisJZHVrX19zZXRfY2F0Y2hlcl9yZWdz X25vcnoodGhyLCBhY3QtPmNhdCwgdHZfdmFsX3Vuc3RhYmxlLCBsal90eXBlKTsKKworCURVS19B U1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID49IDEpOworCURVS19BU1NFUlQodGhyLT5jYWxsc3Rh Y2tfY3VyciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkModGhyLT5jYWxs c3RhY2tfY3VycikgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DT01QRlVO QyhEVUtfQUNUX0dFVF9GVU5DKHRoci0+Y2FsbHN0YWNrX2N1cnIpKSk7CisKKwlEVUtfQVNTRVJU KHRoci0+Y2FsbHN0YWNrX3RvcCA+PSAxKTsKKwlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxz dGFja19jdXJyKTsKKwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKwlkdWtfX3JlY29uZmlnX3Zh bHN0YWNrX2VjbWFfY2F0Y2hlcih0aHIsIGFjdCk7CisKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0 YWNrX3RvcCA+PSAxKTsKKwlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKTsK KwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKwljYXQgPSBhY3QtPmNhdDsKKwlEVUtfQVNTRVJU KGNhdCAhPSBOVUxMKTsKKworCWFjdC0+Y3Vycl9wYyA9IGNhdC0+cGNfYmFzZSArIDE7ICAvKiAr MSA9IGZpbmFsbHkgKi8KKworCURVS19DQVRfQ0xFQVJfRklOQUxMWV9FTkFCTEVEKGNhdCk7Cit9 CisKK0RVS19MT0NBTCB2b2lkIGR1a19faGFuZGxlX2xhYmVsKGR1a19odGhyZWFkICp0aHIsIGR1 a19zbWFsbF91aW50X3QgbGpfdHlwZSkgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2Nh dGNoZXIgKmNhdDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCisJRFVLX0FTU0VSVCh0 aHItPmNhbGxzdGFja190b3AgPj0gMSk7CisJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwlE VUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkMoYWN0 KSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19DT01QRlVOQyhEVUtfQUNU X0dFVF9GVU5DKGFjdCkpKTsKKworCS8qICswID0gYnJlYWssICsxID0gY29udGludWUgKi8KKwlj YXQgPSBhY3QtPmNhdDsKKwlEVUtfQVNTRVJUKGNhdCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERV S19DQVRfR0VUX1RZUEUoY2F0KSA9PSBEVUtfQ0FUX1RZUEVfTEFCRUwpOworCisJYWN0LT5jdXJy X3BjID0gY2F0LT5wY19iYXNlICsgKGxqX3R5cGUgPT0gRFVLX0xKX1RZUEVfQ09OVElOVUUgPyAx IDogMCk7CisKKwkvKiB2YWxzdGFjayBzaG91bGQgbm90IG5lZWQgY2hhbmdlcyAqLworI2lmIGRl ZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9w ID49IDEpOworCURVS19BU1NFUlQoYWN0ID09IHRoci0+Y2FsbHN0YWNrX2N1cnIpOworCURVS19B U1NFUlQoYWN0ICE9IE5VTEwpOworCURVS19BU1NFUlQoKGR1a19zaXplX3QpICh0aHItPnZhbHN0 YWNrX3RvcCAtIHRoci0+dmFsc3RhY2tfYm90dG9tKSA9PQorCSAgICAgICAgICAgKGR1a19zaXpl X3QpICgoZHVrX2hjb21wZnVuYyAqKSBEVUtfQUNUX0dFVF9GVU5DKGFjdCkpLT5ucmVncyk7Cisj ZW5kaWYKK30KKworLyogQ2FsbGVkIGZvciBoYW5kbGluZyBib3RoIGEgbG9uZ2ptcCgpIHdpdGgg dHlwZSBEVUtfTEpfVFlQRV9ZSUVMRCBhbmQKKyAqIHdoZW4gYSBSRVRVUk4gb3Bjb2RlIHRlcm1p bmF0ZXMgYSB0aHJlYWQgYW5kIHlpZWxkcyB0byB0aGUgcmVzdW1lci4KKyAqIENhbGxlciB1bndp bmRzIHNvIHRoYXQgdG9wIG9mIGNhbGxzdGFjayBpcyB0aGUgYWN0aXZhdGlvbiB3ZSByZXR1cm4g dG8uCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfQ09ST1VUSU5FX1NVUFBPUlQpCitEVUtfTE9D QUwgdm9pZCBkdWtfX2hhbmRsZV95aWVsZChkdWtfaHRocmVhZCAqdGhyLCBkdWtfaHRocmVhZCAq cmVzdW1lciwgZHVrX3R2YWwgKnR2X3ZhbF91bnN0YWJsZSkgeworCWR1a19hY3RpdmF0aW9uICph Y3RfcmVzdW1lcjsKKwlkdWtfdHZhbCAqdHYxOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVChyZXN1bWVyICE9IE5VTEwpOworCURVS19BU1NFUlQodHZfdmFsX3Vuc3Rh YmxlICE9IE5VTEwpOworCWFjdF9yZXN1bWVyID0gcmVzdW1lci0+Y2FsbHN0YWNrX2N1cnI7CisJ RFVLX0FTU0VSVChhY3RfcmVzdW1lciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19BQ1RfR0VU X0ZVTkMoYWN0X3Jlc3VtZXIpICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNf Q09NUEZVTkMoRFVLX0FDVF9HRVRfRlVOQyhhY3RfcmVzdW1lcikpKTsgIC8qIHJlc3VtZSBjYWxs ZXIgbXVzdCBiZSBhbiBFQ01BU2NyaXB0IGZ1bmMgKi8KKworCXR2MSA9IChkdWtfdHZhbCAqKSAo dm9pZCAqKSAoKGR1a191aW50OF90ICopIHJlc3VtZXItPnZhbHN0YWNrICsgYWN0X3Jlc3VtZXIt PnJldHZhbF9ieXRlb2ZmKTsgIC8qIHJldHVybiB2YWx1ZSBmcm9tIER1a3RhcGUuVGhyZWFkLnJl c3VtZSgpICovCisJRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGKHRociwgdHYxLCB0dl92YWxfdW5z dGFibGUpOyAgLyogc2lkZSBlZmZlY3RzICovICAvKiBYWFg6IGF2b2lkIHNpZGUgZWZmZWN0cyAq LworCisJZHVrX19yZWNvbmZpZ192YWxzdGFja19lY21hX3JldHVybihyZXN1bWVyKTsKKworCS8q IGNhbGxlciBtdXN0IGNoYW5nZSBhY3RpdmUgdGhyZWFkLCBhbmQgc2V0IHRoci0+cmVzdW1lciB0 byBOVUxMICovCit9CisjZW5kaWYgIC8qIERVS19VU0VfQ09ST1VUSU5FX1NVUFBPUlQgKi8KKwor RFVLX0xPQ0FMIGR1a19zbWFsbF91aW50X3QgZHVrX19oYW5kbGVfbG9uZ2ptcChkdWtfaHRocmVh ZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqZW50cnlfYWN0KSB7CisJZHVrX3NtYWxsX3VpbnRfdCBy ZXR2YWwgPSBEVUtfX0xPTkdKTVBfUkVTVEFSVDsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwp OworCURVS19BU1NFUlQoZW50cnlfYWN0ICE9IE5VTEwpOworCisJLyogJ3RocicgaXMgdGhlIGN1 cnJlbnQgdGhyZWFkLCBhcyBuby1vbmUgcmVzdW1lcyBleGNlcHQgdXMgYW5kIHdlCisJICogc3dp dGNoICd0aHInIGluIHRoYXQgY2FzZS4KKwkgKi8KKwlEVUtfQVNTRVJUKHRociA9PSB0aHItPmhl YXAtPmN1cnJfdGhyZWFkKTsKKworCS8qCisJICogIChSZSl0cnkgaGFuZGxpbmcgdGhlIGxvbmdq bXAuCisJICoKKwkgKiAgQSBsb25nam1wIGhhbmRsZXIgbWF5IGNvbnZlcnQgdGhlIGxvbmdqbXAg dG8gYSBkaWZmZXJlbnQgdHlwZSBhbmQKKwkgKiAgInZpcnR1YWxseSIgcmV0aHJvdyBieSBnb3Rv J2luZyB0byAnY2hlY2tfbG9uZ2ptcCcuICBCZWZvcmUgdGhlIGdvdG8sCisJICogIHRoZSBmb2xs b3dpbmcgbXVzdCBiZSB1cGRhdGVkOgorCSAqICAgIC0gdGhlIGhlYXAgJ2xqJyBzdGF0ZQorCSAq ICAgIC0gJ3RocicgbXVzdCByZWZsZWN0IHRoZSAidGhyb3dpbmciIHRocmVhZAorCSAqLworCisg Y2hlY2tfbG9uZ2ptcDoKKworCURVS19ERChEVUtfRERQUklOVCgiaGFuZGxpbmcgbG9uZ2ptcDog dHlwZT0lbGQsIHZhbHVlMT0lIVQsIHZhbHVlMj0lIVQsIGlzZXJyb3I9JWxkIiwKKwkgICAgICAg ICAgICAgICAgICAgKGxvbmcpIHRoci0+aGVhcC0+bGoudHlwZSwKKwkgICAgICAgICAgICAgICAg ICAgKGR1a190dmFsICopICZ0aHItPmhlYXAtPmxqLnZhbHVlMSwKKwkgICAgICAgICAgICAgICAg ICAgKGR1a190dmFsICopICZ0aHItPmhlYXAtPmxqLnZhbHVlMiwKKwkgICAgICAgICAgICAgICAg ICAgKGxvbmcpIHRoci0+aGVhcC0+bGouaXNlcnJvcikpOworCisJc3dpdGNoICh0aHItPmhlYXAt PmxqLnR5cGUpIHsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9DT1JPVVRJTkVfU1VQUE9SVCkKKwlj YXNlIERVS19MSl9UWVBFX1JFU1VNRTogeworCQkvKgorCQkgKiAgTm90ZTogbGoudmFsdWUxIGlz ICd2YWx1ZScsIGxqLnZhbHVlMiBpcyAncmVzdW1lZScuCisJCSAqICBUaGlzIGRpZmZlcnMgZnJv bSBZSUVMRC4KKwkJICovCisKKwkJZHVrX3R2YWwgKnR2OworCQlkdWtfdHZhbCAqdHYyOworCQlk dWtfaHRocmVhZCAqcmVzdW1lZTsKKworCQkvKiBkdWtfYmlfZHVrX29iamVjdF95aWVsZCgpIGFu ZCBkdWtfYmlfZHVrX29iamVjdF9yZXN1bWUoKSBlbnN1cmUgYWxsIG9mIHRoZXNlIGFyZSBtZXQg Ki8KKworCQlEVUtfQVNTRVJUKHRoci0+c3RhdGUgPT0gRFVLX0hUSFJFQURfU1RBVEVfUlVOTklO Ryk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdW5jaGFuZ2VkIGJ5IER1a3RhcGUuVGhyZWFkLnJlc3VtZSgpICovCisJCURVS19BU1NF UlQodGhyLT5jYWxsc3RhY2tfdG9wID49IDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFQ01BU2NyaXB0 IGFjdGl2YXRpb24gKyBEdWt0YXBlLlRocmVhZC5yZXN1bWUoKSBhY3RpdmF0aW9uICovCisJCURV S19BU1NFUlQodGhyLT5jYWxsc3RhY2tfY3VyciAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVCh0aHIt PmNhbGxzdGFja19jdXJyLT5wYXJlbnQgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoRFVLX0FDVF9H RVRfRlVOQyh0aHItPmNhbGxzdGFja19jdXJyKSAhPSBOVUxMICYmCisJCSAgICAgICAgICAgRFVL X0hPQkpFQ1RfSVNfTkFURlVOQyhEVUtfQUNUX0dFVF9GVU5DKHRoci0+Y2FsbHN0YWNrX2N1cnIp KSAmJgorCQkgICAgICAgICAgICgoZHVrX2huYXRmdW5jICopIERVS19BQ1RfR0VUX0ZVTkModGhy LT5jYWxsc3RhY2tfY3VycikpLT5mdW5jID09IGR1a19iaV90aHJlYWRfcmVzdW1lKTsKKworCQl0 diA9ICZ0aHItPmhlYXAtPmxqLnZhbHVlMjsgIC8qIHJlc3VtZWUgKi8KKwkJRFVLX0FTU0VSVChE VUtfVFZBTF9JU19PQkpFQ1QodHYpKTsKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9HRVRfT0JKRUNU KHR2KSAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19USFJFQUQoRFVLX1RW QUxfR0VUX09CSkVDVCh0dikpKTsKKwkJcmVzdW1lZSA9IChkdWtfaHRocmVhZCAqKSBEVUtfVFZB TF9HRVRfT0JKRUNUKHR2KTsKKworCQlEVUtfQVNTRVJUKHJlc3VtZWUgIT0gTlVMTCk7CisJCURV S19BU1NFUlQocmVzdW1lZS0+cmVzdW1lciA9PSBOVUxMKTsKKwkJRFVLX0FTU0VSVChyZXN1bWVl LT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9JTkFDVElWRSB8fAorCQkgICAgICAgICAgIHJl c3VtZWUtPnN0YXRlID09IERVS19IVEhSRUFEX1NUQVRFX1lJRUxERUQpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2tlZCBieSBEdWt0 YXBlLlRocmVhZC5yZXN1bWUoKSAqLworCQlEVUtfQVNTRVJUKHJlc3VtZWUtPnN0YXRlICE9IERV S19IVEhSRUFEX1NUQVRFX1lJRUxERUQgfHwKKwkJICAgICAgICAgICByZXN1bWVlLT5jYWxsc3Rh Y2tfdG9wID49IDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFlJRUxERUQ6IEVDTUFTY3JpcHQgYWN0aXZhdGlv biArIER1a3RhcGUuVGhyZWFkLnlpZWxkKCkgYWN0aXZhdGlvbiAqLworCQlEVUtfQVNTRVJUKHJl c3VtZWUtPnN0YXRlICE9IERVS19IVEhSRUFEX1NUQVRFX1lJRUxERUQgfHwKKwkJICAgICAgICAg ICAoRFVLX0FDVF9HRVRfRlVOQyhyZXN1bWVlLT5jYWxsc3RhY2tfY3VycikgIT0gTlVMTCAmJgor CQkgICAgICAgICAgICBEVUtfSE9CSkVDVF9JU19OQVRGVU5DKERVS19BQ1RfR0VUX0ZVTkMocmVz dW1lZS0+Y2FsbHN0YWNrX2N1cnIpKSAmJgorCQkgICAgICAgICAgICAoKGR1a19obmF0ZnVuYyAq KSBEVUtfQUNUX0dFVF9GVU5DKHJlc3VtZWUtPmNhbGxzdGFja19jdXJyKSktPmZ1bmMgPT0gZHVr X2JpX3RocmVhZF95aWVsZCkpOworCQlEVUtfQVNTRVJUKHJlc3VtZWUtPnN0YXRlICE9IERVS19I VEhSRUFEX1NUQVRFX0lOQUNUSVZFIHx8CisJCSAgICAgICAgICAgcmVzdW1lZS0+Y2FsbHN0YWNr X3RvcCA9PSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJTkFDVElWRTogbm8gYWN0aXZhdGlvbiwgc2luZ2xl IGZ1bmN0aW9uIHZhbHVlIG9uIHZhbHN0YWNrICovCisKKwkJaWYgKHRoci0+aGVhcC0+bGouaXNl cnJvcikgeworCQkJLyoKKwkJCSAqICBUaHJvdyB0aGUgZXJyb3IgaW4gdGhlIHJlc3VtZWQgdGhy ZWFkJ3MgY29udGV4dDsgdGhlCisJCQkgKiAgZXJyb3IgdmFsdWUgaXMgcHVzaGVkIG9udG8gdGhl IHJlc3VtZWUgdmFsc3RhY2suCisJCQkgKgorCQkJICogIE5vdGU6IHRoZSBjYWxsc3RhY2sgb2Yg dGhlIHRhcmdldCBtYXkgZW1wdHkgaW4gdGhpcyBjYXNlCisJCQkgKiAgdG9vIChpLmUuIHRoZSB0 YXJnZXQgdGhyZWFkIGhhcyBuZXZlciBiZWVuIHJlc3VtZWQpLiAgVGhlCisJCQkgKiAgdmFsdWUg c3RhY2sgd2lsbCBjb250YWluIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGluIHRoYXQgY2FzZSwKKwkJ CSAqICB3aGljaCB3ZSBzaW1wbHkgaWdub3JlLgorCQkJICovCisKKwkJCURVS19BU1NFUlQocmVz dW1lZS0+cmVzdW1lciA9PSBOVUxMKTsKKwkJCXJlc3VtZWUtPnJlc3VtZXIgPSB0aHI7CisJCQlE VUtfSFRIUkVBRF9JTkNSRUYodGhyLCB0aHIpOworCQkJcmVzdW1lZS0+c3RhdGUgPSBEVUtfSFRI UkVBRF9TVEFURV9SVU5OSU5HOworCQkJdGhyLT5zdGF0ZSA9IERVS19IVEhSRUFEX1NUQVRFX1JF U1VNRUQ7CisJCQlEVUtfSEVBUF9TV0lUQ0hfVEhSRUFEKHRoci0+aGVhcCwgcmVzdW1lZSk7CisJ CQl0aHIgPSByZXN1bWVlOworCisJCQl0aHItPmhlYXAtPmxqLnR5cGUgPSBEVUtfTEpfVFlQRV9U SFJPVzsKKworCQkJLyogdGhyLT5oZWFwLT5sai52YWx1ZTEgaXMgYWxyZWFkeSB0aGUgdmFsdWUg dG8gdGhyb3cgKi8KKwkJCS8qIHRoci0+aGVhcC0+bGoudmFsdWUyIGlzICd0aHJlYWQnLCB3aWxs IGJlIHdpcGVkIG91dCBhdCB0aGUgZW5kICovCisKKwkJCURVS19BU1NFUlQodGhyLT5oZWFwLT5s ai5pc2Vycm9yKTsgIC8qIGFscmVhZHkgc2V0ICovCisKKwkJCURVS19ERChEVUtfRERQUklOVCgi LT4gcmVzdW1lIHdpdGggYW4gZXJyb3IsIGNvbnZlcnRlZCB0byBhIHRocm93IGluIHRoZSByZXN1 bWVlLCBwcm9wYWdhdGUiKSk7CisJCQlnb3RvIGNoZWNrX2xvbmdqbXA7CisJCX0gZWxzZSBpZiAo cmVzdW1lZS0+c3RhdGUgPT0gRFVLX0hUSFJFQURfU1RBVEVfWUlFTERFRCkgeworCQkJLyogVW53 aW5kIHByZXZpb3VzIER1a3RhcGUuVGhyZWFkLnlpZWxkKCkgY2FsbC4gIFRoZQorCQkJICogYWN0 aXZhdGlvbiByZW1haW5pbmcgbXVzdCBhbHdheXMgYmUgYW4gRUNNQVNjcmlwdAorCQkJICogY2Fs bCBub3cgKHlpZWxkKCkgYWNjZXB0cyBjYWxscyBmcm9tIEVDTUFTY3JpcHQKKwkJCSAqIG9ubHkp LgorCQkJICovCisJCQlkdWtfYWN0aXZhdGlvbiAqYWN0X3Jlc3VtZWU7CisKKwkJCURVS19BU1NF UlQocmVzdW1lZS0+Y2FsbHN0YWNrX3RvcCA+PSAyKTsKKwkJCWFjdF9yZXN1bWVlID0gcmVzdW1l ZS0+Y2FsbHN0YWNrX2N1cnI7ICAvKiBEdWt0YXBlLlRocmVhZC55aWVsZCgpICovCisJCQlEVUtf QVNTRVJUKGFjdF9yZXN1bWVlICE9IE5VTEwpOworCQkJYWN0X3Jlc3VtZWUgPSBhY3RfcmVzdW1l ZS0+cGFyZW50OyAgICAgIC8qIEVDTUFTY3JpcHQgY2FsbCBzaXRlIGZvciB5aWVsZCgpICovCisJ CQlEVUtfQVNTRVJUKGFjdF9yZXN1bWVlICE9IE5VTEwpOworCisJCQl0diA9IChkdWtfdHZhbCAq KSAodm9pZCAqKSAoKGR1a191aW50OF90ICopIHJlc3VtZWUtPnZhbHN0YWNrICsgYWN0X3Jlc3Vt ZWUtPnJldHZhbF9ieXRlb2ZmKTsgIC8qIHJldHVybiB2YWx1ZSBmcm9tIER1a3RhcGUuVGhyZWFk LnlpZWxkKCkgKi8KKwkJCURVS19BU1NFUlQodHYgPj0gcmVzdW1lZS0+dmFsc3RhY2sgJiYgdHYg PCByZXN1bWVlLT52YWxzdGFja190b3ApOworCQkJdHYyID0gJnRoci0+aGVhcC0+bGoudmFsdWUx OworCQkJRFVLX1RWQUxfU0VUX1RWQUxfVVBEUkVGKHRociwgdHYsIHR2Mik7ICAvKiBzaWRlIGVm ZmVjdHMgKi8gIC8qIFhYWDogYXZvaWQgc2lkZSBlZmZlY3RzICovCisKKwkJCWR1a19odGhyZWFk X2FjdGl2YXRpb25fdW53aW5kX25vcnoocmVzdW1lZSk7ICAvKiB1bndpbmQgdG8gJ3lpZWxkJyBj YWxsZXIgKi8KKwkJCS8qIG5vIG5lZWQgdG8gdW53aW5kIGNhdGNoIHN0YWNrICovCisKKwkJCWR1 a19fcmVjb25maWdfdmFsc3RhY2tfZWNtYV9yZXR1cm4ocmVzdW1lZSk7CisKKwkJCURVS19BU1NF UlQocmVzdW1lZS0+cmVzdW1lciA9PSBOVUxMKTsKKwkJCXJlc3VtZWUtPnJlc3VtZXIgPSB0aHI7 CisJCQlEVUtfSFRIUkVBRF9JTkNSRUYodGhyLCB0aHIpOworCQkJcmVzdW1lZS0+c3RhdGUgPSBE VUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HOworCQkJdGhyLT5zdGF0ZSA9IERVS19IVEhSRUFEX1NU QVRFX1JFU1VNRUQ7CisJCQlEVUtfSEVBUF9TV0lUQ0hfVEhSRUFEKHRoci0+aGVhcCwgcmVzdW1l ZSk7CisjaWYgMAorCQkJdGhyID0gcmVzdW1lZTsgIC8qIG5vdCBuZWVkZWQsIGFzIHdlIGV4aXQg cmlnaHQgYXdheSAqLworI2VuZGlmCisJCQlEVUtfREQoRFVLX0REUFJJTlQoIi0+IHJlc3VtZSB3 aXRoIGEgdmFsdWUsIHJlc3RhcnQgZXhlY3V0aW9uIGluIHJlc3VtZWUiKSk7CisJCQlyZXR2YWwg PSBEVUtfX0xPTkdKTVBfUkVTVEFSVDsKKwkJCWdvdG8gd2lwZV9hbmRfcmV0dXJuOworCQl9IGVs c2UgeworCQkJLyogSW5pdGlhbCByZXN1bWUgY2FsbC4gKi8KKwkJCWR1a19zbWFsbF91aW50X3Qg Y2FsbF9mbGFnczsKKwkJCWR1a19pbnRfdCBzZXR1cF9yYzsKKworCQkJLyogcmVzdW1lZTogWy4u LiBpbml0aWFsX2Z1bmNdICAoY3VycmVudGx5IGFjdHVhbGx5OiBbaW5pdGlhbF9mdW5jXSkgKi8K KworCQkJZHVrX3B1c2hfdW5kZWZpbmVkKHJlc3VtZWUpOworCQkJdHYgPSAmdGhyLT5oZWFwLT5s ai52YWx1ZTE7CisJCQlkdWtfcHVzaF90dmFsKHJlc3VtZWUsIHR2KTsKKworCQkJLyogcmVzdW1l ZTogWy4uLiBpbml0aWFsX2Z1bmMgdW5kZWZpbmVkKD0gdGhpcykgcmVzdW1lX3ZhbHVlIF0gKi8K KworCQkJY2FsbF9mbGFncyA9IERVS19DQUxMX0ZMQUdfQUxMT1dfRUNNQVRPRUNNQTsgIC8qIG5v dCB0YWlsY2FsbCwgZWNtYS10by1lY21hIChhc3N1bWVkIHRvIHN1Y2NlZWQpICovCisKKwkJCXNl dHVwX3JjID0gZHVrX2hhbmRsZV9jYWxsX3VucHJvdGVjdGVkX25hcmdzKHJlc3VtZWUsIDEgLypu YXJncyovLCBjYWxsX2ZsYWdzKTsKKwkJCWlmIChzZXR1cF9yYyA9PSAwKSB7CisJCQkJLyogVGhp cyBzaG91bGRuJ3QgaGFwcGVuOyBEdWt0YXBlLlRocmVhZC5yZXN1bWUoKQorCQkJCSAqIHNob3Vs ZCBtYWtlIHN1cmUgb2YgdGhhdC4gIElmIGl0IGRvZXMgaGFwcGVuCisJCQkJICogdGhpcyBpbnRl cm5hbCBlcnJvciB3aWxsIHByb3BhZ2F0ZSBvdXQgb2YgdGhlCisJCQkJICogZXhlY3V0b3Igd2hp Y2ggY2FuIGJlIHF1aXRlIG1pc2xlYWRpbmcuCisJCQkJICovCisJCQkJRFVLX0VSUk9SX0lOVEVS TkFMKHRocik7CisJCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7CisJCQl9CisKKwkJCURV S19BU1NFUlQocmVzdW1lZS0+cmVzdW1lciA9PSBOVUxMKTsKKwkJCXJlc3VtZWUtPnJlc3VtZXIg PSB0aHI7CisJCQlEVUtfSFRIUkVBRF9JTkNSRUYodGhyLCB0aHIpOworCQkJcmVzdW1lZS0+c3Rh dGUgPSBEVUtfSFRIUkVBRF9TVEFURV9SVU5OSU5HOworCQkJdGhyLT5zdGF0ZSA9IERVS19IVEhS RUFEX1NUQVRFX1JFU1VNRUQ7CisJCQlEVUtfSEVBUF9TV0lUQ0hfVEhSRUFEKHRoci0+aGVhcCwg cmVzdW1lZSk7CisjaWYgMAorCQkJdGhyID0gcmVzdW1lZTsgIC8qIG5vdCBuZWVkZWQsIGFzIHdl IGV4aXQgcmlnaHQgYXdheSAqLworI2VuZGlmCisJCQlEVUtfREQoRFVLX0REUFJJTlQoIi0+IHJl c3VtZSB3aXRoIGEgdmFsdWUsIHJlc3RhcnQgZXhlY3V0aW9uIGluIHJlc3VtZWUiKSk7CisJCQly ZXR2YWwgPSBEVUtfX0xPTkdKTVBfUkVTVEFSVDsKKwkJCWdvdG8gd2lwZV9hbmRfcmV0dXJuOwor CQl9CisJCURVS19VTlJFQUNIQUJMRSgpOworCQlicmVhazsgIC8qIG5ldmVyIGhlcmUgKi8KKwl9 CisKKwljYXNlIERVS19MSl9UWVBFX1lJRUxEOiB7CisJCS8qCisJCSAqICBDdXJyZW50bHkgb25s eSBhbGxvd2VkIG9ubHkgaWYgeWllbGRpbmcgdGhyZWFkIGhhcyBvbmx5CisJCSAqICBFQ01BU2Ny aXB0IGFjdGl2YXRpb25zIChleGNlcHQgZm9yIHRoZSBEdWt0YXBlLlRocmVhZC55aWVsZCgpCisJ CSAqICBjYWxsIGF0IHRoZSBjYWxsc3RhY2sgdG9wKSBhbmQgbm9uZSBvZiB0aGVtIGNvbnN0cnVj dG9yCisJCSAqICBjYWxscy4KKwkJICoKKwkJICogIFRoaXMgZXhjbHVkZXMgdGhlICdlbnRyeScg dGhyZWFkIHdoaWNoIHdpbGwgYWx3YXlzIGhhdmUKKwkJICogIGEgcHJldmVudGNvdW50ID4gMC4K KwkJICovCisKKwkJZHVrX2h0aHJlYWQgKnJlc3VtZXI7CisKKwkJLyogZHVrX2JpX2R1a19vYmpl Y3RfeWllbGQoKSBhbmQgZHVrX2JpX2R1a19vYmplY3RfcmVzdW1lKCkgZW5zdXJlIGFsbCBvZiB0 aGVzZSBhcmUgbWV0ICovCisKKyNpZiAwICAvKiBlbnRyeV90aHJlYWQgbm90IGF2YWlsYWJsZSBm b3IgYXNzZXJ0ICovCisJCURVS19BU1NFUlQodGhyICE9IGVudHJ5X3RocmVhZCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBEdWt0YXBlLlRocmVhZC55aWVsZCgpIHNob3VsZCBwcmV2ZW50ICovCisj ZW5kaWYKKwkJRFVLX0FTU0VSVCh0aHItPnN0YXRlID09IERVS19IVEhSRUFEX1NUQVRFX1JVTk5J TkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHVuY2hhbmdlZCBmcm9tIER1a3RhcGUuVGhyZWFkLnlpZWxkKCkgKi8KKwkJRFVLX0FT U0VSVCh0aHItPmNhbGxzdGFja190b3AgPj0gMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVDTUFTY3Jp cHQgYWN0aXZhdGlvbiArIER1a3RhcGUuVGhyZWFkLnlpZWxkKCkgYWN0aXZhdGlvbiAqLworCQlE VUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCk7CisJCURVS19BU1NFUlQodGhy LT5jYWxsc3RhY2tfY3Vyci0+cGFyZW50ICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKERVS19BQ1Rf R0VUX0ZVTkModGhyLT5jYWxsc3RhY2tfY3VycikgIT0gTlVMTCAmJgorCQkgICAgICAgICAgIERV S19IT0JKRUNUX0lTX05BVEZVTkMoRFVLX0FDVF9HRVRfRlVOQyh0aHItPmNhbGxzdGFja19jdXJy KSkgJiYKKwkJICAgICAgICAgICAoKGR1a19obmF0ZnVuYyAqKSBEVUtfQUNUX0dFVF9GVU5DKHRo ci0+Y2FsbHN0YWNrX2N1cnIpKS0+ZnVuYyA9PSBkdWtfYmlfdGhyZWFkX3lpZWxkKTsKKwkJRFVL X0FTU0VSVChEVUtfQUNUX0dFVF9GVU5DKHRoci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudCkgIT0g TlVMTCAmJgorCQkgICAgICAgICAgIERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKERVS19BQ1RfR0VU X0ZVTkModGhyLT5jYWxsc3RhY2tfY3Vyci0+cGFyZW50KSkpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFuIEVDTUFTY3JpcHQgZnVuY3Rpb24gKi8KKworCQlyZXN1bWVyID0gdGhy LT5yZXN1bWVyOworCisJCURVS19BU1NFUlQocmVzdW1lciAhPSBOVUxMKTsKKwkJRFVLX0FTU0VS VChyZXN1bWVyLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9SRVNVTUVEKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXR0ZW4gYnkg YSBwcmV2aW91cyBSRVNVTUUgaGFuZGxpbmcgKi8KKwkJRFVLX0FTU0VSVChyZXN1bWVyLT5jYWxs c3RhY2tfdG9wID49IDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVDTUFTY3JpcHQgYWN0aXZhdGlvbiArIER1 a3RhcGUuVGhyZWFkLnJlc3VtZSgpIGFjdGl2YXRpb24gKi8KKwkJRFVLX0FTU0VSVChyZXN1bWVy LT5jYWxsc3RhY2tfY3VyciAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChyZXN1bWVyLT5jYWxsc3Rh Y2tfY3Vyci0+cGFyZW50ICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKERVS19BQ1RfR0VUX0ZVTkMo cmVzdW1lci0+Y2FsbHN0YWNrX2N1cnIpICE9IE5VTEwgJiYKKwkJICAgICAgICAgICBEVUtfSE9C SkVDVF9JU19OQVRGVU5DKERVS19BQ1RfR0VUX0ZVTkMocmVzdW1lci0+Y2FsbHN0YWNrX2N1cnIp KSAmJgorCQkgICAgICAgICAgICgoZHVrX2huYXRmdW5jICopIERVS19BQ1RfR0VUX0ZVTkMocmVz dW1lci0+Y2FsbHN0YWNrX2N1cnIpKS0+ZnVuYyA9PSBkdWtfYmlfdGhyZWFkX3Jlc3VtZSk7CisJ CURVS19BU1NFUlQoRFVLX0FDVF9HRVRfRlVOQyhyZXN1bWVyLT5jYWxsc3RhY2tfY3Vyci0+cGFy ZW50KSAhPSBOVUxMICYmCisJCSAgICAgICAgICAgRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoRFVL X0FDVF9HRVRfRlVOQyhyZXN1bWVyLT5jYWxsc3RhY2tfY3Vyci0+cGFyZW50KSkpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhbiBFQ01BU2NyaXB0IGZ1bmN0aW9uICovCisKKwkJaWYg KHRoci0+aGVhcC0+bGouaXNlcnJvcikgeworCQkJdGhyLT5zdGF0ZSA9IERVS19IVEhSRUFEX1NU QVRFX1lJRUxERUQ7CisJCQl0aHItPnJlc3VtZXIgPSBOVUxMOworCQkJRFVLX0hUSFJFQURfREVD UkVGX05PUloodGhyLCByZXN1bWVyKTsKKwkJCXJlc3VtZXItPnN0YXRlID0gRFVLX0hUSFJFQURf U1RBVEVfUlVOTklORzsKKwkJCURVS19IRUFQX1NXSVRDSF9USFJFQUQodGhyLT5oZWFwLCByZXN1 bWVyKTsKKwkJCXRociA9IHJlc3VtZXI7CisKKwkJCXRoci0+aGVhcC0+bGoudHlwZSA9IERVS19M Sl9UWVBFX1RIUk9XOworCQkJLyogbGoudmFsdWUxIGlzIGFscmVhZHkgc2V0ICovCisJCQlEVUtf QVNTRVJUKHRoci0+aGVhcC0+bGouaXNlcnJvcik7ICAvKiBhbHJlYWR5IHNldCAqLworCisJCQlE VUtfREQoRFVLX0REUFJJTlQoIi0+IHlpZWxkIGFuIGVycm9yLCBjb252ZXJ0ZWQgdG8gYSB0aHJv dyBpbiB0aGUgcmVzdW1lciwgcHJvcGFnYXRlIikpOworCQkJZ290byBjaGVja19sb25nam1wOwor CQl9IGVsc2UgeworCQkJZHVrX2h0aHJlYWRfYWN0aXZhdGlvbl91bndpbmRfbm9yeihyZXN1bWVy KTsKKwkJCWR1a19faGFuZGxlX3lpZWxkKHRociwgcmVzdW1lciwgJnRoci0+aGVhcC0+bGoudmFs dWUxKTsKKworCQkJdGhyLT5zdGF0ZSA9IERVS19IVEhSRUFEX1NUQVRFX1lJRUxERUQ7CisJCQl0 aHItPnJlc3VtZXIgPSBOVUxMOworCQkJRFVLX0hUSFJFQURfREVDUkVGX05PUloodGhyLCByZXN1 bWVyKTsKKwkJCXJlc3VtZXItPnN0YXRlID0gRFVLX0hUSFJFQURfU1RBVEVfUlVOTklORzsKKwkJ CURVS19IRUFQX1NXSVRDSF9USFJFQUQodGhyLT5oZWFwLCByZXN1bWVyKTsKKyNpZiAwCisJCQl0 aHIgPSByZXN1bWVyOyAgLyogbm90IG5lZWRlZCwgYXMgd2UgZXhpdCByaWdodCBhd2F5ICovCisj ZW5kaWYKKworCQkJRFVLX0REKERVS19ERFBSSU5UKCItPiB5aWVsZCBhIHZhbHVlLCByZXN0YXJ0 IGV4ZWN1dGlvbiBpbiByZXN1bWVyIikpOworCQkJcmV0dmFsID0gRFVLX19MT05HSk1QX1JFU1RB UlQ7CisJCQlnb3RvIHdpcGVfYW5kX3JldHVybjsKKwkJfQorCQlEVUtfVU5SRUFDSEFCTEUoKTsK KwkJYnJlYWs7ICAvKiBuZXZlciBoZXJlICovCisJfQorI2VuZGlmICAvKiBEVUtfVVNFX0NPUk9V VElORV9TVVBQT1JUICovCisKKwljYXNlIERVS19MSl9UWVBFX1RIUk9XOiB7CisJCS8qCisJCSAq ICBUaHJlZSBwb3NzaWJsZSBvdXRjb21lczoKKwkJICogICAgKiBBIHRyeSBvciBmaW5hbGx5IGNh dGNoZXIgaXMgZm91bmQgPT4gcmVzdW1lIHRoZXJlLgorCQkgKiAgICAgIChvcikKKwkJICogICAg KiBUaGUgZXJyb3IgcHJvcGFnYXRlcyB0byB0aGUgYnl0ZWNvZGUgZXhlY3V0b3IgZW50cnkKKwkJ ICogICAgICBsZXZlbCAoYW5kIHdlJ3JlIGluIHRoZSBlbnRyeSB0aHJlYWQpID0+IHJldGhyb3cK KwkJICogICAgICB3aXRoIGEgbmV3IGxvbmdqbXAoKSwgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBwcmV2 aW91cworCQkgKiAgICAgIGNhdGNocG9pbnQuCisJCSAqICAgICogVGhlIGVycm9yIGlzIG5vdCBj YXVnaHQgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLCBzbworCQkgKiAgICAgIHRoZSB0aHJlYWQgZmlu aXNoZXMgd2l0aCBhbiBlcnJvci4gIFRoaXMgd29ya3MgbGlrZQorCQkgKiAgICAgIGEgeWllbGRl ZCBlcnJvciwgZXhjZXB0IHRoYXQgdGhlIHRocmVhZCBpcyBmaW5pc2hlZAorCQkgKiAgICAgIGFu ZCBjYW4gbm8gbG9uZ2VyIGJlIHJlc3VtZWQuICAoVGhlcmUgaXMgYWx3YXlzIGEKKwkJICogICAg ICByZXN1bWVyIGluIHRoaXMgY2FzZS4pCisJCSAqCisJCSAqICBOb3RlOiB1bnRpbCB3ZSBoaXQg dGhlIGVudHJ5IGxldmVsLCB0aGVyZSBjYW4gb25seSBiZQorCQkgKiAgRUNNQVNjcmlwdCBhY3Rp dmF0aW9ucy4KKwkJICovCisKKwkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJZHVrX2NhdGNoZXIg KmNhdDsKKwkJZHVrX2h0aHJlYWQgKnJlc3VtZXI7CisKKwkJZm9yICg7OykgeworCQkJYWN0ID0g dGhyLT5jYWxsc3RhY2tfY3VycjsKKwkJCWlmIChhY3QgPT0gTlVMTCkgeworCQkJCWJyZWFrOwor CQkJfQorCisJCQlmb3IgKDs7KSB7CisJCQkJY2F0ID0gYWN0LT5jYXQ7CisJCQkJaWYgKGNhdCA9 PSBOVUxMKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChEVUtfQ0FUX0hBU19DQVRD SF9FTkFCTEVEKGNhdCkpIHsKKwkJCQkJRFVLX0FTU0VSVChEVUtfQ0FUX0dFVF9UWVBFKGNhdCkg PT0gRFVLX0NBVF9UWVBFX1RDRik7CisKKwkJCQkJZHVrX19oYW5kbGVfY2F0Y2godGhyLAorCQkJ CQkgICAgICAgICAgICAgICAgICAmdGhyLT5oZWFwLT5sai52YWx1ZTEsCisJCQkJCSAgICAgICAg ICAgICAgICAgIERVS19MSl9UWVBFX1RIUk9XKTsKKworCQkJCQlEVUtfREQoRFVLX0REUFJJTlQo Ii0+IHRocm93IGNhdWdodCBieSBhICdjYXRjaCcgY2xhdXNlLCByZXN0YXJ0IGV4ZWN1dGlvbiIp KTsKKwkJCQkJcmV0dmFsID0gRFVLX19MT05HSk1QX1JFU1RBUlQ7CisJCQkJCWdvdG8gd2lwZV9h bmRfcmV0dXJuOworCQkJCX0KKworCQkJCWlmIChEVUtfQ0FUX0hBU19GSU5BTExZX0VOQUJMRUQo Y2F0KSkgeworCQkJCQlEVUtfQVNTRVJUKERVS19DQVRfR0VUX1RZUEUoY2F0KSA9PSBEVUtfQ0FU X1RZUEVfVENGKTsKKwkJCQkJRFVLX0FTU0VSVCghRFVLX0NBVF9IQVNfQ0FUQ0hfRU5BQkxFRChj YXQpKTsKKworCQkJCQlkdWtfX2hhbmRsZV9maW5hbGx5KHRociwKKwkJCQkJICAgICAgICAgICAg ICAgICAgICAmdGhyLT5oZWFwLT5sai52YWx1ZTEsCisJCQkJCSAgICAgICAgICAgICAgICAgICAg RFVLX0xKX1RZUEVfVEhST1cpOworCisJCQkJCURVS19ERChEVUtfRERQUklOVCgiLT4gdGhyb3cg Y2F1Z2h0IGJ5IGEgJ2ZpbmFsbHknIGNsYXVzZSwgcmVzdGFydCBleGVjdXRpb24iKSk7CisJCQkJ CXJldHZhbCA9IERVS19fTE9OR0pNUF9SRVNUQVJUOworCQkJCQlnb3RvIHdpcGVfYW5kX3JldHVy bjsKKwkJCQl9CisKKwkJCQlkdWtfaHRocmVhZF9jYXRjaGVyX3Vud2luZF9ub3J6KHRociwgYWN0 KTsKKwkJCX0KKworCQkJaWYgKGFjdCA9PSBlbnRyeV9hY3QpIHsKKwkJCQkvKiBOb3QgY2F1Z2h0 IGJ5IGFueXRoaW5nIGJlZm9yZSBlbnRyeSBsZXZlbDsgcmV0aHJvdyBhbmQgbGV0IHRoZQorCQkJ CSAqIGZpbmFsIGNhdGNoZXIgZmluaXNoIHVud2luZGluZyAoZXNwLiB2YWx1ZSBzdGFjaykuCisJ CQkJICovCisJCQkJRFVLX0QoRFVLX0RQUklOVCgiLT4gdGhyb3cgcHJvcGFnYXRlZCB1cCB0byBl bnRyeSBsZXZlbCwgcmV0aHJvdyBhbmQgZXhpdCBieXRlY29kZSBleGVjdXRvciIpKTsKKwkJCQly ZXR2YWwgPSBEVUtfX0xPTkdKTVBfUkVUSFJPVzsKKwkJCQlnb3RvIGp1c3RfcmV0dXJuOworCQkJ fQorCisJCQlkdWtfaHRocmVhZF9hY3RpdmF0aW9uX3Vud2luZF9ub3J6KHRocik7CisJCX0KKwor CQlEVUtfREQoRFVLX0REUFJJTlQoIi0+IHRocm93IG5vdCBjYXVnaHQgYnkgY3VycmVudCB0aHJl YWQsIHlpZWxkIGVycm9yIHRvIHJlc3VtZXIgYW5kIHJlY2hlY2sgbG9uZ2ptcCIpKTsKKworCQkv KiBOb3QgY2F1Z2h0IGJ5IGN1cnJlbnQgdGhyZWFkLCB0aHJlYWQgdGVybWluYXRlcyAoeWllbGQg ZXJyb3IgdG8gcmVzdW1lcik7CisJCSAqIG5vdGUgdGhhdCB0aGlzIG1heSBjYXVzZSBhIGNhc2Nh ZGUgaWYgdGhlIHJlc3VtZXIgdGVybWluYXRlcyB3aXRoIGFuIHVuY2F1Z2h0CisJCSAqIGV4Y2Vw dGlvbiBldGMgKHRoaXMgaXMgT0ssIGJ1dCBuZWVkcyBjYXJlZnVsIHRlc3RpbmcpLgorCQkgKi8K KworCQlEVUtfQVNTRVJUKHRoci0+cmVzdW1lciAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVCh0aHIt PnJlc3VtZXItPmNhbGxzdGFja190b3AgPj0gMik7ICAvKiBFQ01BU2NyaXB0IGFjdGl2YXRpb24g KyBEdWt0YXBlLlRocmVhZC5yZXN1bWUoKSBhY3RpdmF0aW9uICovCisJCURVS19BU1NFUlQodGhy LT5yZXN1bWVyLT5jYWxsc3RhY2tfY3VyciAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVCh0aHItPnJl c3VtZXItPmNhbGxzdGFja19jdXJyLT5wYXJlbnQgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoRFVL X0FDVF9HRVRfRlVOQyh0aHItPnJlc3VtZXItPmNhbGxzdGFja19jdXJyLT5wYXJlbnQpICE9IE5V TEwgJiYKKwkJICAgICAgICAgICBEVUtfSE9CSkVDVF9JU19DT01QRlVOQyhEVUtfQUNUX0dFVF9G VU5DKHRoci0+cmVzdW1lci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudCkpKTsgIC8qIGFuIEVDTUFT Y3JpcHQgZnVuY3Rpb24gKi8KKworCQlyZXN1bWVyID0gdGhyLT5yZXN1bWVyOworCisJCS8qIHJl c2V0IGxvbmdqbXAgKi8KKworCQlEVUtfQVNTRVJUKHRoci0+aGVhcC0+bGoudHlwZSA9PSBEVUtf TEpfVFlQRV9USFJPVyk7ICAvKiBhbHJlYWR5IHNldCAqLworCQkvKiBsai52YWx1ZTEgYWxyZWFk eSBzZXQgKi8KKworCQlkdWtfaHRocmVhZF90ZXJtaW5hdGUodGhyKTsgIC8qIHVwZGF0ZXMgdGhy ZWFkIHN0YXRlLCBtaW5pbWl6ZXMgaXRzIGFsbG9jYXRpb25zICovCisJCURVS19BU1NFUlQodGhy LT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9URVJNSU5BVEVEKTsKKworCQl0aHItPnJlc3Vt ZXIgPSBOVUxMOworCQlEVUtfSFRIUkVBRF9ERUNSRUZfTk9SWih0aHIsIHJlc3VtZXIpOworCQly ZXN1bWVyLT5zdGF0ZSA9IERVS19IVEhSRUFEX1NUQVRFX1JVTk5JTkc7CisJCURVS19IRUFQX1NX SVRDSF9USFJFQUQodGhyLT5oZWFwLCByZXN1bWVyKTsKKwkJdGhyID0gcmVzdW1lcjsKKwkJZ290 byBjaGVja19sb25nam1wOworCX0KKworCWNhc2UgRFVLX0xKX1RZUEVfQlJFQUs6ICAvKiBwc2V1 ZG90eXBlcywgbm90IHVzZWQgaW4gYWN0dWFsIGxvbmdqbXBzICovCisJY2FzZSBEVUtfTEpfVFlQ RV9DT05USU5VRToKKwljYXNlIERVS19MSl9UWVBFX1JFVFVSTjoKKwljYXNlIERVS19MSl9UWVBF X05PUk1BTDoKKwlkZWZhdWx0OiB7CisJCS8qIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBiZSBy b2J1c3QgKi8KKwkJRFVLX0QoRFVLX0RQUklOVCgiY2F1Z2h0IHVua25vd24gbG9uZ2ptcCB0eXBl ICVsZCwgdHJlYXQgYXMgaW50ZXJuYWwgZXJyb3IiLCAobG9uZykgdGhyLT5oZWFwLT5sai50eXBl KSk7CisJCWdvdG8gY29udmVydF90b19pbnRlcm5hbF9lcnJvcjsKKwl9CisKKwl9ICAvKiBlbmQg c3dpdGNoICovCisKKwlEVUtfVU5SRUFDSEFCTEUoKTsKKworIHdpcGVfYW5kX3JldHVybjoKKwkv KiB0aGlzIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBoZWxwcyBkZWJ1Z2dpbmcgKi8K Kwl0aHItPmhlYXAtPmxqLnR5cGUgPSBEVUtfTEpfVFlQRV9VTktOT1dOOworCXRoci0+aGVhcC0+ bGouaXNlcnJvciA9IDA7CisKKwlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRih0aHIsICZ0 aHItPmhlYXAtPmxqLnZhbHVlMSk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwlEVUtfVFZBTF9TRVRf VU5ERUZJTkVEX1VQRFJFRih0aHIsICZ0aHItPmhlYXAtPmxqLnZhbHVlMik7ICAvKiBzaWRlIGVm ZmVjdHMgKi8KKworCURVS19HQ19UT1JUVVJFKHRoci0+aGVhcCk7CisKKyBqdXN0X3JldHVybjoK KwlyZXR1cm4gcmV0dmFsOworCisgY29udmVydF90b19pbnRlcm5hbF9lcnJvcjoKKwkvKiBUaGlz IGNvdWxkIGFsc28gYmUgdGhyb3duIGludGVybmFsbHkgKHNldCB0aGUgZXJyb3IsIGdvdG8gY2hl Y2tfbG9uZ2ptcCksCisJICogYnV0IGl0J3MgYmV0dGVyIGZvciBpbnRlcm5hbCBlcnJvcnMgdG8g YnViYmxlIG91dHdhcmRzIHNvIHRoYXQgd2Ugd29uJ3QKKwkgKiBpbmZpbml0ZSBsb29wIGluIHRo aXMgY2F0Y2hwb2ludC4KKwkgKi8KKwlEVUtfRVJST1JfSU5URVJOQUwodGhyKTsKKwlEVUtfV09f Tk9SRVRVUk4ocmV0dXJuIDA7KTsKK30KKworLyogSGFuZGxlIGEgQlJFQUsvQ09OVElOVUUgb3Bj b2RlLiAgQXZvaWQgdXNpbmcgbG9uZ2ptcCgpIGZvciBCUkVBSy9DT05USU5VRQorICogaGFuZGxp bmcgYmVjYXVzZSBpdCBoYXMgYSBtZWFzdXJhYmxlIHBlcmZvcm1hbmNlIGltcGFjdCBpbiBvcmRp bmFyeQorICogZW52aXJvbm1lbnRzIGFuZCBhbiBleHRyZW1lIGltcGFjdCBpbiBFbXNjcmlwdGVu IChHSC0zNDIpLgorICovCitEVUtfTE9DQUwgRFVLX19OT0lOTElORV9QRVJGIHZvaWQgZHVrX19o YW5kbGVfYnJlYWtfb3JfY29udGludWUoZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfdWlu dF90IGxhYmVsX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGR1a19zbWFsbF91aW50X3QgbGpfdHlwZSkgeworCWR1a19h Y3RpdmF0aW9uICphY3Q7CisJZHVrX2NhdGNoZXIgKmNhdDsKKworCURVS19BU1NFUlQodGhyICE9 IE5VTEwpOworCisJLyogRmluZCBhIG1hdGNoaW5nIGxhYmVsIGNhdGNoZXIgb3IgJ2ZpbmFsbHkn IGNhdGNoZXIgaW4KKwkgKiB0aGUgc2FtZSBmdW5jdGlvbiwgdW53aW5kaW5nIGNhdGNoZXJzIGFz IHdlIGdvLgorCSAqCisJICogQSBsYWJlbCBjYXRjaGVyIG11c3QgYWx3YXlzIGV4aXN0IGFuZCB3 aWxsIG1hdGNoIHVubGVzcworCSAqIGEgJ2ZpbmFsbHknIGNhcHR1cmVzIHRoZSBicmVhay9jb250 aW51ZSBmaXJzdC4gIEl0IGlzIHRoZQorCSAqIGNvbXBpbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g ZW5zdXJlIHRoYXQgbGFiZWxzIGFyZSB1c2VkCisJICogY29ycmVjdGx5LgorCSAqLworCisJYWN0 ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKworCWZv ciAoOzspIHsKKwkJY2F0ID0gYWN0LT5jYXQ7CisJCWlmIChjYXQgPT0gTlVMTCkgeworCQkJYnJl YWs7CisJCX0KKworCQlEVUtfREREKERVS19ERERQUklOVCgiY29uc2lkZXJpbmcgY2F0Y2hlciAl cDogdHlwZT0lbGQgbGFiZWw9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikg Y2F0LAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0NBVF9HRVRfVFlQRShjYXQp LAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgRFVLX0NBVF9HRVRfTEFCRUwoY2F0KSkp OworCisJCS8qIFhYWDogYml0IG1hc2sgdGVzdDsgRklOQUxMWSA8LT4gVENGLCBzaW5nbGUgYml0 IG1hc2sgd291bGQgc3VmZmljZT8gKi8KKworCQlpZiAoRFVLX0NBVF9HRVRfVFlQRShjYXQpID09 IERVS19DQVRfVFlQRV9UQ0YgJiYKKwkJICAgIERVS19DQVRfSEFTX0ZJTkFMTFlfRU5BQkxFRChj YXQpKSB7CisJCQlkdWtfdHZhbCB0dl90bXA7CisKKwkJCURVS19UVkFMX1NFVF9VMzIoJnR2X3Rt cCwgKGR1a191aW50MzJfdCkgbGFiZWxfaWQpOworCQkJZHVrX19oYW5kbGVfZmluYWxseSh0aHIs ICZ0dl90bXAsIGxqX3R5cGUpOworCisJCQlEVUtfREQoRFVLX0REUFJJTlQoIi0+IGJyZWFrL2Nv bnRpbnVlIGNhdWdodCBieSAnZmluYWxseScsIHJlc3RhcnQgZXhlY3V0aW9uIikpOworCQkJcmV0 dXJuOworCQl9CisJCWlmIChEVUtfQ0FUX0dFVF9UWVBFKGNhdCkgPT0gRFVLX0NBVF9UWVBFX0xB QkVMICYmCisJCSAgICAoZHVrX3VpbnRfdCkgRFVLX0NBVF9HRVRfTEFCRUwoY2F0KSA9PSBsYWJl bF9pZCkgeworCQkJZHVrX19oYW5kbGVfbGFiZWwodGhyLCBsal90eXBlKTsKKworCQkJRFVLX0RE KERVS19ERFBSSU5UKCItPiBicmVhay9jb250aW51ZSBjYXVnaHQgYnkgYSBsYWJlbCBjYXRjaGVy IChpbiB0aGUgc2FtZSBmdW5jdGlvbiksIHJlc3RhcnQgZXhlY3V0aW9uIikpOworCQkJcmV0dXJu OworCQl9CisKKwkJZHVrX2h0aHJlYWRfY2F0Y2hlcl91bndpbmRfbm9yeih0aHIsIGFjdCk7CisJ fQorCisJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGJlIHJvYnVzdC4gKi8KKwlEVUtfRChE VUtfRFBSSU5UKCItPiBicmVhay9jb250aW51ZSBub3QgY2F1Z2h0IGJ5IGFueXRoaW5nIGluIHRo ZSBjdXJyZW50IGZ1bmN0aW9uIChzaG91bGQgbmV2ZXIgaGFwcGVuKSwgdGhyb3cgaW50ZXJuYWwg ZXJyb3IiKSk7CisJRFVLX0VSUk9SX0lOVEVSTkFMKHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJl dHVybjspOworfQorCisvKiBIYW5kbGUgYSBSRVRVUk4gb3Bjb2RlLiAgQXZvaWQgdXNpbmcgbG9u Z2ptcCgpIGZvciByZXR1cm4gaGFuZGxpbmcgYmVjYXVzZQorICogaXQgaGFzIGEgbWVhc3VyYWJs ZSBwZXJmb3JtYW5jZSBpbXBhY3QgaW4gb3JkaW5hcnkgZW52aXJvbm1lbnRzIGFuZCBhbiBleHRy ZW1lCisgKiBpbXBhY3QgaW4gRW1zY3JpcHRlbiAoR0gtMzQyKS4gIFJldHVybiB2YWx1ZSBpcyBv biB2YWx1ZSBzdGFjayB0b3AuCisgKi8KK0RVS19MT0NBTCBkdWtfc21hbGxfdWludF90IGR1a19f aGFuZGxlX3JldHVybihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqZW50cnlfYWN0 KSB7CisJZHVrX3R2YWwgKnR2MTsKKwlkdWtfdHZhbCAqdHYyOworI2lmIGRlZmluZWQoRFVLX1VT RV9DT1JPVVRJTkVfU1VQUE9SVCkKKwlkdWtfaHRocmVhZCAqcmVzdW1lcjsKKyNlbmRpZgorCWR1 a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2NhdGNoZXIgKmNhdDsKKworCS8qIFdlIGNhbiBkaXJl Y3RseSBhY2Nlc3MgdmFsdWUgc3RhY2sgaGVyZS4gKi8KKworCURVS19BU1NFUlQodGhyICE9IE5V TEwpOworCURVS19BU1NFUlQoZW50cnlfYWN0ICE9IE5VTEwpOworCURVS19BU1NFUlQodGhyLT52 YWxzdGFja190b3AgLSAxID49IHRoci0+dmFsc3RhY2tfYm90dG9tKTsKKwl0djEgPSB0aHItPnZh bHN0YWNrX3RvcCAtIDE7CisJRFVLX1RWQUxfQ0hLRkFTVF9JTlBMQUNFX0ZBU1QodHYxKTsgIC8q IGZhc3RpbnQgZG93bmdyYWRlIGNoZWNrIGZvciByZXR1cm4gdmFsdWVzICovCisKKwkvKgorCSAq ICBGb3VyIHBvc3NpYmxlIG91dGNvbWVzOgorCSAqCisJICogICAgMS4gQSAnZmluYWxseScgaW4g dGhlIHNhbWUgZnVuY3Rpb24gY2F0Y2hlcyB0aGUgJ3JldHVybicuCisJICogICAgICAgSXQgbWF5 IGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB3aGVuICdmaW5hbGx5JyBpcyBmaW5pc2hlZCwKKwkgKiAg ICAgICBvciBpdCBtYXkgYmUgbmV1dHJhbGl6ZWQgYnkgJ2ZpbmFsbHknIChib3RoIGhhbmRsZWQg YnkKKwkgKiAgICAgICBFTkRGSU4pLgorCSAqCisJICogICAgMi4gVGhlIHJldHVybiBoYXBwZW5z IGF0IHRoZSBlbnRyeSBsZXZlbCBvZiB0aGUgYnl0ZWNvZGUKKwkgKiAgICAgICBleGVjdXRvciwg c28gcmV0dXJuIGZyb20gdGhlIGV4ZWN1dG9yIChpbiBDIHN0YWNrKS4KKwkgKgorCSAqICAgIDMu IFRoZXJlIGlzIGEgY2FsbGluZyAoRUNNQVNjcmlwdCkgYWN0aXZhdGlvbiBpbiB0aGUgY2FsbAor CSAqICAgICAgIHN0YWNrID0+IHJldHVybiB0byBpdCwgaW4gdGhlIHNhbWUgZXhlY3V0b3IgaW5z dGFuY2UuCisJICoKKwkgKiAgICA0LiBUaGVyZSBpcyBubyBjYWxsaW5nIGFjdGl2YXRpb24sIGFu ZCB0aGUgdGhyZWFkIGlzCisJICogICAgICAgdGVybWluYXRlZC4gIFRoZXJlIGlzIGFsd2F5cyBh IHJlc3VtZXIgaW4gdGhpcyBjYXNlLAorCSAqICAgICAgIHdoaWNoIGdldHMgdGhlIHJldHVybiB2 YWx1ZSBzaW1pbGFybHkgdG8gYSAneWllbGQnCisJICogICAgICAgKGV4Y2VwdCB0aGF0IHRoZSBj dXJyZW50IHRocmVhZCBjYW4gbm8gbG9uZ2VyIGJlCisJICogICAgICAgcmVzdW1lZCkuCisJICov CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNr X3RvcCA+PSAxKTsKKworCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJRFVLX0FTU0VSVChh Y3QgIT0gTlVMTCk7CisKKwlmb3IgKDs7KSB7CisJCWNhdCA9IGFjdC0+Y2F0OworCQlpZiAoY2F0 ID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKERVS19DQVRfR0VUX1RZUEUoY2F0 KSA9PSBEVUtfQ0FUX1RZUEVfVENGICYmCisJCSAgICBEVUtfQ0FUX0hBU19GSU5BTExZX0VOQUJM RUQoY2F0KSkgeworCQkJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCAtIDEgPj0gdGhyLT52 YWxzdGFja19ib3R0b20pOworCQkJZHVrX19oYW5kbGVfZmluYWxseSh0aHIsIHRoci0+dmFsc3Rh Y2tfdG9wIC0gMSwgRFVLX0xKX1RZUEVfUkVUVVJOKTsKKworCQkJRFVLX0REKERVS19ERFBSSU5U KCItPiByZXR1cm4gY2F1Z2h0IGJ5ICdmaW5hbGx5JywgcmVzdGFydCBleGVjdXRpb24iKSk7CisJ CQlyZXR1cm4gRFVLX19SRVRIQU5EX1JFU1RBUlQ7CisJCX0KKworCQlkdWtfaHRocmVhZF9jYXRj aGVyX3Vud2luZF9ub3J6KHRociwgYWN0KTsKKwl9CisKKwlpZiAoYWN0ID09IGVudHJ5X2FjdCkg eworCQkvKiBSZXR1cm4gdG8gdGhlIGJ5dGVjb2RlIGV4ZWN1dG9yIGNhbGxlciB3aG8gd2lsbCB1 bndpbmQgc3RhY2tzCisJCSAqIGFuZCBoYW5kbGUgY29uc3RydWN0b3IgcG9zdC1wcm9jZXNzaW5n LgorCQkgKiBSZXR1cm4gdmFsdWUgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2sgdG9wOiBbIC4uLiBy ZXR2YWwgXS4KKwkJICovCisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIi0+IHJldHVybiBwcm9w YWdhdGVkIHVwIHRvIGVudHJ5IGxldmVsLCBleGl0IGJ5dGVjb2RlIGV4ZWN1dG9yIikpOworCQly ZXR1cm4gRFVLX19SRVRIQU5EX0ZJTklTSEVEOworCX0KKworCWlmICh0aHItPmNhbGxzdGFja190 b3AgPj0gMikgeworCQkvKiBUaGVyZSBpcyBhIGNhbGxlcjsgaXQgTVVTVCBiZSBhbiBFQ01BU2Ny aXB0IGNhbGxlciAob3RoZXJ3aXNlIGl0IHdvdWxkCisJCSAqIG1hdGNoIGVudHJ5X2FjdCBjaGVj aykuCisJCSAqLworCQlEVUtfREREKERVS19ERERQUklOVCgicmV0dXJuIHRvIEVDTUFTY3JpcHQg Y2FsbGVyLCByZXR2YWxfYnl0ZW9mZj0lbGQsIGxqX3ZhbHVlMT0lIVQiLAorCQkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgKHRoci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudC0+cmV0dmFsX2J5 dGVvZmYpLAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgJnRoci0+aGVhcC0+ bGoudmFsdWUxKSk7CisKKwkJRFVLX0FTU0VSVCh0aHItPmNhbGxzdGFja19jdXJyICE9IE5VTEwp OworCQlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudCAhPSBOVUxMKTsKKwkJ RFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DT01QRlVOQyhEVUtfQUNUX0dFVF9GVU5DKHRoci0+ Y2FsbHN0YWNrX2N1cnItPnBhcmVudCkpKTsgICAvKiBtdXN0IGJlIEVDTUFTY3JpcHQgKi8KKwor I2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUFJPWFkpCisJCWlmICh0aHItPmNhbGxzdGFja19jdXJy LT5mbGFncyAmIChEVUtfQUNUX0ZMQUdfQ09OU1RSVUNUIHwgRFVLX0FDVF9GTEFHX0NPTlNUUlVD VF9QUk9YWSkpIHsKKwkJCWR1a19jYWxsX2NvbnN0cnVjdF9wb3N0cHJvY2Vzcyh0aHIsIHRoci0+ Y2FsbHN0YWNrX2N1cnItPmZsYWdzICYgRFVLX0FDVF9GTEFHX0NPTlNUUlVDVF9QUk9YWSk7ICAv KiBzaWRlIGVmZmVjdHMgKi8KKwkJfQorI2Vsc2UKKwkJaWYgKHRoci0+Y2FsbHN0YWNrX2N1cnIt PmZsYWdzICYgRFVLX0FDVF9GTEFHX0NPTlNUUlVDVCkgeworCQkJZHVrX2NhbGxfY29uc3RydWN0 X3Bvc3Rwcm9jZXNzKHRociwgMCk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJfQorI2VuZGlmCisK KwkJdHYxID0gKGR1a190dmFsICopICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxz dGFjayArIHRoci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudC0+cmV0dmFsX2J5dGVvZmYpOworCQlE VUtfQVNTRVJUKHRoci0+dmFsc3RhY2tfdG9wIC0gMSA+PSB0aHItPnZhbHN0YWNrX2JvdHRvbSk7 CisJCXR2MiA9IHRoci0+dmFsc3RhY2tfdG9wIC0gMTsKKwkJRFVLX1RWQUxfU0VUX1RWQUxfVVBE UkVGKHRociwgdHYxLCB0djIpOyAgLyogc2lkZSBlZmZlY3RzICovCisKKwkJLyogQ2F0Y2ggc3Rh Y2sgdW53aW5kIGhhcHBlbnMgaW5saW5lIGluIGNhbGxzdGFjayB1bndpbmQuICovCisJCWR1a19o dGhyZWFkX2FjdGl2YXRpb25fdW53aW5kX25vcnoodGhyKTsKKworCQlkdWtfX3JlY29uZmlnX3Zh bHN0YWNrX2VjbWFfcmV0dXJuKHRocik7CisKKwkJRFVLX0REKERVS19ERFBSSU5UKCItPiByZXR1 cm4gbm90IGludGVyY2VwdGVkLCByZXN0YXJ0IGV4ZWN1dGlvbiBpbiBjYWxsZXIiKSk7CisJCXJl dHVybiBEVUtfX1JFVEhBTkRfUkVTVEFSVDsKKwl9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfQ09S T1VUSU5FX1NVUFBPUlQpCisJRFVLX0REKERVS19ERFBSSU5UKCJubyBjYWxsaW5nIGFjdGl2YXRp b24sIHRocmVhZCBmaW5pc2hlcyAoc2ltaWxhciB0byB5aWVsZCkiKSk7CisKKwlEVUtfQVNTRVJU KHRoci0+cmVzdW1lciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+cmVzdW1lci0+Y2FsbHN0 YWNrX3RvcCA+PSAyKTsgIC8qIEVDTUFTY3JpcHQgYWN0aXZhdGlvbiArIER1a3RhcGUuVGhyZWFk LnJlc3VtZSgpIGFjdGl2YXRpb24gKi8KKwlEVUtfQVNTRVJUKHRoci0+cmVzdW1lci0+Y2FsbHN0 YWNrX2N1cnIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPnJlc3VtZXItPmNhbGxzdGFja19j dXJyLT5wYXJlbnQgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfQUNUX0dFVF9GVU5DKHRoci0+ cmVzdW1lci0+Y2FsbHN0YWNrX2N1cnIpICE9IE5VTEwgJiYKKwkJCURVS19IT0JKRUNUX0lTX05B VEZVTkMoRFVLX0FDVF9HRVRfRlVOQyh0aHItPnJlc3VtZXItPmNhbGxzdGFja19jdXJyKSkgJiYK KwkJCSgoZHVrX2huYXRmdW5jICopIERVS19BQ1RfR0VUX0ZVTkModGhyLT5yZXN1bWVyLT5jYWxs c3RhY2tfY3VycikpLT5mdW5jID09IGR1a19iaV90aHJlYWRfcmVzdW1lKTsgIC8qIER1a3RhcGUu VGhyZWFkLnJlc3VtZSgpICovCisJRFVLX0FTU0VSVChEVUtfQUNUX0dFVF9GVU5DKHRoci0+cmVz dW1lci0+Y2FsbHN0YWNrX2N1cnItPnBhcmVudCkgIT0gTlVMTCAmJgorCQkJRFVLX0hPQkpFQ1Rf SVNfQ09NUEZVTkMoRFVLX0FDVF9HRVRfRlVOQyh0aHItPnJlc3VtZXItPmNhbGxzdGFja19jdXJy LT5wYXJlbnQpKSk7ICAvKiBhbiBFQ01BU2NyaXB0IGZ1bmN0aW9uICovCisJRFVLX0FTU0VSVCh0 aHItPnN0YXRlID09IERVS19IVEhSRUFEX1NUQVRFX1JVTk5JTkcpOworCURVS19BU1NFUlQodGhy LT5yZXN1bWVyLT5zdGF0ZSA9PSBEVUtfSFRIUkVBRF9TVEFURV9SRVNVTUVEKTsKKworCXJlc3Vt ZXIgPSB0aHItPnJlc3VtZXI7CisKKwkvKiBTaGFyZSB5aWVsZCBsb25nam1wIGhhbmRsZXIuCisJ ICoKKwkgKiBUaGlzIHNlcXVlbmNlIG9mIHN0ZXBzIGlzIGEgYml0IGZyYWdpbGUgKHNlZSBHSC0x ODQ1KToKKwkgKiAtIFdlIG5lZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tICd0aHInIChyZXN1bWVk IHRocmVhZCkgdmFsdWUgc3RhY2suCisJICogICBUaGUgdGVybWluYXRpb24gdW53aW5kcyBpdHMg dmFsdWUgc3RhY2ssIGxvc2luZyB0aGUgdmFsdWUuCisJICogLSBXZSBuZWVkIGEgcmVmY291bnRl ZCByZWZlcmVuY2UgZm9yICd0aHInLCB3aGljaCBtYXkgb25seSBleGlzdAorCSAqICAgaW4gdGhl IGNhbGxlciB2YWx1ZSBzdGFjay4gIFdlIGNhbid0IHVud2luZCBvciByZWNvbmZpZ3VyZSB0aGUK KwkgKiAgIGNhbGxlcidzIHZhbHVlIHN0YWNrIHdpdGhvdXQgcG90ZW50aWFsbHkgZnJlZWluZyAn dGhyJy4KKwkgKgorCSAqIEN1cnJlbnQgYXBwcm9hY2ggaXMgdG8gY2FwdHVyZSB0aGUgJ3Rocicg cmV0dXJuIHZhbHVlIGFuZCBzdG9yZQorCSAqIGEgcmVmZXJlbmNlIHRvICd0aHInIGluIHRoZSBj YWxsZXIgdmFsdWUgc3RhY2sgdGVtcG9yYXJpbHkuICBUaGlzCisJICoga2VlcHMgJ3RocicgcmVh Y2hhYmxlIHVudGlsIGZpbmFsIHlpZWxkL3JldHVybiBoYW5kbGluZyB3aGljaAorCSAqIHJlbW92 ZXMgdGhlIHJlZmVyZW5jZXMgYXRvbWF0aWNhbGx5LgorCSAqLworCisJRFVLX0FTU0VSVCh0aHIt PnZhbHN0YWNrX3RvcCAtIDEgPj0gdGhyLT52YWxzdGFja19ib3R0b20pOworCWR1a19odGhyZWFk X2FjdGl2YXRpb25fdW53aW5kX25vcnoocmVzdW1lcik7ICAvKiBNYXkgcmVtb3ZlIGxhc3QgcmVm ZXJlbmNlIHRvICd0aHInLCBidXQgaXMgTk9SWi4gKi8KKwlkdWtfcHVzaF90dmFsKHJlc3VtZXIs IHRoci0+dmFsc3RhY2tfdG9wIC0gMSk7ICAvKiBDYXB0dXJlIHJldHVybiB2YWx1ZSwgc2lkZSBl ZmZlY3QgZnJlZS4gKi8KKwlkdWtfcHVzaF9odGhyZWFkKHJlc3VtZXIsIHRocik7ICAvKiBNYWtl ICd0aHInIHJlYWNoYWJsZSBhZ2FpbiwgYmVmb3JlIHNpZGUgZWZmZWN0cy4gKi8KKworCWR1a19o dGhyZWFkX3Rlcm1pbmF0ZSh0aHIpOyAgLyogVXBkYXRlcyB0aHJlYWQgc3RhdGUsIG1pbmltaXpl cyBpdHMgYWxsb2NhdGlvbnMuICovCisJdGhyLT5yZXN1bWVyID0gTlVMTDsKKwlEVUtfSFRIUkVB RF9ERUNSRUYodGhyLCByZXN1bWVyKTsKKwlEVUtfQVNTRVJUKHRoci0+c3RhdGUgPT0gRFVLX0hU SFJFQURfU1RBVEVfVEVSTUlOQVRFRCk7CisKKwlyZXN1bWVyLT5zdGF0ZSA9IERVS19IVEhSRUFE X1NUQVRFX1JVTk5JTkc7CisJRFVLX0hFQVBfU1dJVENIX1RIUkVBRCh0aHItPmhlYXAsIHJlc3Vt ZXIpOworCisJRFVLX0FTU0VSVChyZXN1bWVyLT52YWxzdGFja190b3AgLSAyID49IHJlc3VtZXIt PnZhbHN0YWNrX2JvdHRvbSk7CisJZHVrX19oYW5kbGVfeWllbGQodGhyLCByZXN1bWVyLCByZXN1 bWVyLT52YWxzdGFja190b3AgLSAyKTsKKwl0aHIgPSBOVUxMOyAgLyogJ3RocicgaW52YWxpZGF0 ZWQgYnkgY2FsbCAqLworCisjaWYgMAorCXRociA9IHJlc3VtZXI7ICAvKiBub3QgbmVlZGVkICov CisjZW5kaWYKKworCURVS19ERChEVUtfRERQUklOVCgiLT4gcmV0dXJuIG5vdCBjYXVnaHQsIHRo cmVhZCB0ZXJtaW5hdGVkOyBoYW5kbGUgbGlrZSB5aWVsZCwgcmVzdGFydCBleGVjdXRpb24gaW4g cmVzdW1lciIpKTsKKwlyZXR1cm4gRFVLX19SRVRIQU5EX1JFU1RBUlQ7CisjZWxzZQorCS8qIFdp dGhvdXQgY29yb3V0aW5lIHN1cHBvcnQgdGhpcyBjYXNlIHNob3VsZCBuZXZlciBoYXBwZW4uICov CisJRFVLX0VSUk9SX0lOVEVSTkFMKHRocik7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybiAwOyk7 CisjZW5kaWYKK30KKworLyoKKyAqICBFeGVjdXRvciBpbnRlcnJ1cHQgaGFuZGxpbmcKKyAqCisg KiAgVGhlIGhhbmRsZXIgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBpbnRlcnJ1cHQgY291bnRkb3du IHJlYWNoZXMgemVybworICogIChvciBiZWxvdykuICBUaGUgaGFuZGxlciBtdXN0IHBlcmZvcm0g d2hhdGV2ZXIgY2hlY2tzIGFyZSBhY3RpdmF0ZWQsCisgKiAgZS5nLiBjaGVjayBmb3IgY3VtdWxh dGl2ZSBzdGVwIGNvdW50IHRvIGltcG9zZSBhbiBleGVjdXRpb24gc3RlcAorICogIGxpbWl0IG9y IGNoZWNrIGZvciBicmVha3BvaW50cyBvciBvdGhlciBkZWJ1Z2dlciBpbnRlcmFjdGlvbi4KKyAq CisgKiAgV2hlbiB0aGUgYWN0aW9ucyBhcmUgZG9uZSwgdGhlIGhhbmRsZXIgbXVzdCByZWluaXQg dGhlIGludGVycnVwdAorICogIGluaXQgYW5kIGNvdW50ZXIgdmFsdWVzLiAgVGhlICdpbml0JyB2 YWx1ZSBtdXN0IGluZGljYXRlIGhvdyBtYW55CisgKiAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGFy ZSBleGVjdXRlZCBiZWZvcmUgdGhlIG5leHQgaW50ZXJydXB0LiAgVGhlCisgKiAgY291bnRlciBt dXN0IGludGVyZmFjZSB3aXRoIHRoZSBieXRlY29kZSBleGVjdXRvciBsb29wLiAgQ29uY3JldGVs eSwKKyAqICB0aGUgbmV3IGluaXQgdmFsdWUgaXMgbm9ybWFsbHkgb25lIGhpZ2hlciB0aGFuIHRo ZSBuZXcgY291bnRlciB2YWx1ZS4KKyAqICBGb3IgaW5zdGFuY2UsIHRvIGV4ZWN1dGUgZXhhY3Rs eSBvbmUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gdGhlIGluaXQKKyAqICB2YWx1ZSBpcyBzZXQgdG8g MSBhbmQgdGhlIGNvdW50ZXIgdG8gMC4gIElmIGFuIGVycm9yIGlzIHRocm93biBieSB0aGUKKyAq ICBpbnRlcnJ1cHQgaGFuZGxlciwgdGhlIGNvdW50ZXJzIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFs dWUgKGUuZy4gYm90aAorICogIHRvIDAgdG8gY2F1c2UgYW4gaW50ZXJydXB0IHdoZW4gdGhlIG5l eHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gaXMgYWJvdXQKKyAqICB0byBiZSBleGVjdXRlZCBhZnRl ciBlcnJvciBoYW5kbGluZykuCisgKgorICogIE1haW50YWluaW5nIHRoZSBpbml0L2NvdW50ZXIg dmFsdWUgcHJvcGVybHkgaXMgaW1wb3J0YW50IGZvciBhY2N1cmF0ZQorICogIGJlaGF2aW9yLiAg Rm9yIGluc3RhbmNlLCBleGVjdXRvciBzdGVwIGxpbWl0IG5lZWRzIGEgY3VtdWxhdGl2ZSBzdGVw CisgKiAgY291bnQgd2hpY2ggaXMgc2ltcGx5IGNvbXB1dGVkIGFzIGEgc3VtIG9mICdpbml0JyB2 YWx1ZXMuICBUaGlzIG11c3QKKyAqICB3b3JrIGFjY3VyYXRlbHkgZXZlbiB3aGVuIHNpbmdsZSBz dGVwcGluZy4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVSUlVQVF9DT1VOVEVSKQor CisjZGVmaW5lIERVS19fSU5UX05PQUNUSU9OICAgIDAgICAgLyogbm8gc3BlY2lmaWMgYWN0aW9u LCByZXN1bWUgbm9ybWFsIGV4ZWN1dGlvbiAqLworI2RlZmluZSBEVUtfX0lOVF9SRVNUQVJUICAg ICAxICAgIC8qIG11c3QgImdvdG8gcmVzdGFydF9leGVjdXRpb24iLCBlLmcuIGJyZWFrcG9pbnRz IGNoYW5nZWQgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorRFVL X0xPQ0FMIHZvaWQgZHVrX19pbnRlcnJ1cHRfaGFuZGxlX2RlYnVnZ2VyKGR1a19odGhyZWFkICp0 aHIsIGR1a19ib29sX3QgKm91dF9pbW1lZGlhdGUsIGR1a19zbWFsbF91aW50X3QgKm91dF9pbnRl cnJ1cHRfcmV0dmFsKSB7CisJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfYnJlYWtwb2ludCAq YnA7CisJZHVrX2JyZWFrcG9pbnQgKipicF9hY3RpdmU7CisJZHVrX3VpbnRfZmFzdDMyX3QgbGlu ZSA9IDA7CisJZHVrX2Jvb2xfdCBwcm9jZXNzX21lc3NhZ2VzOworCWR1a19ib29sX3QgcHJvY2Vz c2VkX21lc3NhZ2VzID0gMDsKKworCURVS19BU1NFUlQodGhyLT5oZWFwLT5kYmdfcHJvY2Vzc2lu ZyA9PSAwKTsgIC8qIGRvbid0IHJlLWVudGVyIGUuZy4gZHVyaW5nIEV2YWwgKi8KKworCWFjdCA9 IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisKKwkvKiBJ dCBtaWdodCBzZWVtIHRoYXQgcmVwbGFjaW5nICd0aHItPmhlYXAnIHdpdGgganVzdCAnaGVhcCcg YmVsb3cKKwkgKiBtaWdodCBiZSBhIGdvb2QgaWRlYSwgYnV0IGl0IGluY3JlYXNlcyBjb2RlIHNp emUgc2xpZ2h0bHkKKwkgKiAocHJvYmFibHkgZHVlIHRvIHVubmVjZXNzYXJ5IHNwaWxsaW5nKSBh dCBsZWFzdCBvbiB4NjQuCisJICovCisKKwkvKgorCSAqICBTaW5nbGUgb3Bjb2RlIHN0ZXAgY2hl Y2sKKwkgKi8KKworCWlmICh0aHItPmhlYXAtPmRiZ19wYXVzZV9mbGFncyAmIERVS19QQVVTRV9G TEFHX09ORV9PUENPREVfQUNUSVZFKSB7CisJCURVS19EKERVS19EUFJJTlQoIlBBVVNFIFRSSUdH RVJFRCBieSBvbmUgb3Bjb2RlIHN0ZXAiKSk7CisJCWR1a19kZWJ1Z19zZXRfcGF1c2VkKHRoci0+ aGVhcCk7CisJfQorCisJLyoKKwkgKiAgQnJlYWtwb2ludCBhbmQgc3RlcCBzdGF0ZSBjaGVja3MK KwkgKi8KKworCWlmIChhY3QtPmZsYWdzICYgRFVLX0FDVF9GTEFHX0JSRUFLUE9JTlRfQUNUSVZF IHx8CisJICAgICh0aHItPmhlYXAtPmRiZ19wYXVzZV9hY3QgPT0gdGhyLT5jYWxsc3RhY2tfY3Vy cikpIHsKKwkJbGluZSA9IGR1a19kZWJ1Z19jdXJyX2xpbmUodGhyKTsKKworCQlpZiAoYWN0LT5w cmV2X2xpbmUgIT0gbGluZSkgeworCQkJLyogU3RlcHBlZD8gIFN0ZXAgb3V0IGlzIGhhbmRsZWQg YnkgY2FsbHN0YWNrIHVud2luZC4gKi8KKwkJCWlmICgodGhyLT5oZWFwLT5kYmdfcGF1c2VfZmxh Z3MgJiBEVUtfUEFVU0VfRkxBR19MSU5FX0NIQU5HRSkgJiYKKwkJCSAgICAodGhyLT5oZWFwLT5k YmdfcGF1c2VfYWN0ID09IHRoci0+Y2FsbHN0YWNrX2N1cnIpICYmCisJCQkgICAgKGxpbmUgIT0g dGhyLT5oZWFwLT5kYmdfcGF1c2Vfc3RhcnRsaW5lKSkgeworCQkJCURVS19EKERVS19EUFJJTlQo IlBBVVNFIFRSSUdHRVJFRCBieSBsaW5lIGNoYW5nZSwgYXQgbGluZSAlbGQiLAorCQkJCSAgICAg ICAgICAgICAgICAgKGxvbmcpIGxpbmUpKTsKKwkJCQlkdWtfZGVidWdfc2V0X3BhdXNlZCh0aHIt PmhlYXApOworCQkJfQorCisJCQkvKiBDaGVjayBmb3IgYnJlYWtwb2ludHMgb25seSBvbiBsaW5l IHRyYW5zaXRpb24uCisJCQkgKiBCcmVha3BvaW50IGlzIHRyaWdnZXJlZCB3aGVuIHdlIGVudGVy IHRoZSB0YXJnZXQKKwkJCSAqIGxpbmUgZnJvbSBhIGRpZmZlcmVudCBsaW5lLCBhbmQgdGhlIHBy ZXZpb3VzIGxpbmUKKwkJCSAqIHdhcyB3aXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24uCisJCQkgKgor CQkJICogVGhpcyBjb25kaXRpb24gaXMgdHJpY2t5OiB0aGUgY29uZGl0aW9uIHVzZWQgdG8gYmUK KwkJCSAqIHRoYXQgdHJhbnNpdGlvbiB0byAtb3IgYWNyb3NzLSB0aGUgYnJlYWtwb2ludCBsaW5l CisJCQkgKiB0cmlnZ2VyZWQgdGhlIGJyZWFrcG9pbnQuICBUaGlzIHNlZW1zIGludHVpdGl2ZWx5 CisJCQkgKiBiZXR0ZXIgYmVjYXVzZSBpdCBoYW5kbGVzIGJyZWFrcG9pbnRzIG9uIGxpbmVzIHdp dGgKKwkJCSAqIG5vIGVtaXR0ZWQgb3Bjb2RlczsgYnV0IHRoaXMgbGVhZHMgdG8gdGhlIGlzc3Vl CisJCQkgKiBkZXNjcmliZWQgaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9zdmFhcmFsYS9kdWt0YXBl L2lzc3Vlcy8yNjMuCisJCQkgKi8KKwkJCWJwX2FjdGl2ZSA9IHRoci0+aGVhcC0+ZGJnX2JyZWFr cG9pbnRzX2FjdGl2ZTsKKwkJCWZvciAoOzspIHsKKwkJCQlicCA9ICpicF9hY3RpdmUrKzsKKwkJ CQlpZiAoYnAgPT0gTlVMTCkgeworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlEVUtfQVNTRVJU KGJwLT5maWxlbmFtZSAhPSBOVUxMKTsKKwkJCQlpZiAoYWN0LT5wcmV2X2xpbmUgIT0gYnAtPmxp bmUgJiYgbGluZSA9PSBicC0+bGluZSkgeworCQkJCQlEVUtfRChEVUtfRFBSSU5UKCJQQVVTRSBU UklHR0VSRUQgYnkgYnJlYWtwb2ludCBhdCAlIU86JWxkIiwKKwkJCQkJICAgICAgICAgICAgICAg ICAoZHVrX2hlYXBoZHIgKikgYnAtPmZpbGVuYW1lLCAobG9uZykgYnAtPmxpbmUpKTsKKwkJCQkJ ZHVrX2RlYnVnX3NldF9wYXVzZWQodGhyLT5oZWFwKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7 CisJCQk7CisJCX0KKworCQlhY3QtPnByZXZfbGluZSA9IChkdWtfdWludDMyX3QpIGxpbmU7CisJ fQorCisJLyoKKwkgKiAgUmF0ZSBsaW1pdCBjaGVjayBmb3Igc2VuZGluZyBzdGF0dXMgdXBkYXRl IG9yIHBlZWtpbmcgaW50bworCSAqICB0aGUgZGVidWcgdHJhbnNwb3J0LiAgQm90aCBjYW4gYmUg ZXhwZW5zaXZlIG9wZXJhdGlvbnMgdGhhdAorCSAqICB3ZSBkb24ndCB3YW50IHRvIGRvIG9uIGV2 ZXJ5IG9wY29kZS4KKwkgKgorCSAqICBNYWtpbmcgc3VyZSB0aGUgaW50ZXJ2YWwgcmVtYWlucyBy ZWFzb25hYmxlIG9uIGEgd2lkZSB2YXJpZXR5CisJICogIG9mIHRhcmdldHMgYW5kIGJ5dGVjb2Rl IGlzIGRpZmZpY3VsdCB3aXRob3V0IGEgdGltZXN0YW1wLCBzbworCSAqICB3ZSB1c2UgYSBEYXRl LXByb3ZpZGVkIHRpbWVzdGFtcCBmb3IgdGhlIHJhdGUgbGltaXQgY2hlY2suCisJICogIEJ1dCBz aW5jZSBpdCdzIGFsc28gZXhwZW5zaXZlIHRvIGdldCBhIHRpbWVzdGFtcCwgYSBieXRlY29kZQor CSAqICBjb3VudGVyIGlzIHVzZWQgdG8gcmF0ZSBsaW1pdCBnZXR0aW5nIHRpbWVzdGFtcHMuCisJ ICovCisKKwlwcm9jZXNzX21lc3NhZ2VzID0gMDsKKwlpZiAodGhyLT5oZWFwLT5kYmdfc3RhdGVf ZGlydHkgfHwgRFVLX0hFQVBfSEFTX0RFQlVHR0VSX1BBVVNFRCh0aHItPmhlYXApIHx8IHRoci0+ aGVhcC0+ZGJnX2RldGFjaGluZykgeworCQkvKiBFbnRlciBtZXNzYWdlIHByb2Nlc3NpbmcgbG9v cCBmb3Igc2VuZGluZyBTdGF0dXMgbm90aWZ5cyBhbmQKKwkJICogdG8gZmluaXNoIGEgcGVuZGlu ZyBkZXRhY2guCisJCSAqLworCQlwcm9jZXNzX21lc3NhZ2VzID0gMTsKKwl9CisKKwkvKiBYWFg6 IHJlbW92ZSBoZWFwLT5kYmdfZXhlY19jb3VudGVyLCB1c2UgaGVhcC0+aW5zdF9jb3VudF9pbnRl cnJ1cHQgaW5zdGVhZD8gKi8KKwlEVUtfQVNTRVJUKHRoci0+aW50ZXJydXB0X2luaXQgPj0gMCk7 CisJdGhyLT5oZWFwLT5kYmdfZXhlY19jb3VudGVyICs9IChkdWtfdWludF90KSB0aHItPmludGVy cnVwdF9pbml0OworCWlmICh0aHItPmhlYXAtPmRiZ19leGVjX2NvdW50ZXIgLSB0aHItPmhlYXAt PmRiZ19sYXN0X2NvdW50ZXIgPj0gRFVLX0hFQVBfREJHX1JBVEVMSU1JVF9PUENPREVTKSB7CisJ CS8qIE92ZXJmbG93IG9mIHRoZSBleGVjdXRpb24gY291bnRlciBpcyBmaW5lIGFuZCBkb2Vzbid0 IGJyZWFrCisJCSAqIGFueXRoaW5nIGhlcmUuCisJCSAqLworCisJCWR1a19kb3VibGVfdCBub3cs IGRpZmZfbGFzdDsKKworCQl0aHItPmhlYXAtPmRiZ19sYXN0X2NvdW50ZXIgPSB0aHItPmhlYXAt PmRiZ19leGVjX2NvdW50ZXI7CisJCW5vdyA9IGR1a190aW1lX2dldF9tb25vdG9uaWNfdGltZSh0 aHIpOworCisJCWRpZmZfbGFzdCA9IG5vdyAtIHRoci0+aGVhcC0+ZGJnX2xhc3RfdGltZTsKKwkJ aWYgKGRpZmZfbGFzdCA8IDAuMCB8fCBkaWZmX2xhc3QgPj0gKGR1a19kb3VibGVfdCkgRFVLX0hF QVBfREJHX1JBVEVMSU1JVF9NSUxMSVNFQ1MpIHsKKwkJCS8qIE1vbm90b25pYyB0aW1lIHNob3Vs ZCBub3QgZXhwZXJpZW5jZSB0aW1lIGp1bXBzLAorCQkJICogYnV0IHRoZSBwcm92aWRlciBtYXkg YmUgbWlzc2luZyBhbmQgd2UncmUgYWN0dWFsbHkKKwkJCSAqIHVzaW5nIEVDTUFTY3JpcHQgdGlt ZS4gIFNvLCB0b2xlcmF0ZSBuZWdhdGl2ZSB2YWx1ZXMKKwkJCSAqIHNvIHRoYXQgYSB0aW1lIGp1 bXAgd29ya3MgcmVhc29uYWJseS4KKwkJCSAqCisJCQkgKiBTYW1lIGludGVydmFsIGlzIG5vdyB1 c2VkIGZvciBzdGF0dXMgc2VuZGluZyBhbmQKKwkJCSAqIHBlZWtpbmcuCisJCQkgKi8KKworCQkJ dGhyLT5oZWFwLT5kYmdfbGFzdF90aW1lID0gbm93OworCQkJdGhyLT5oZWFwLT5kYmdfc3RhdGVf ZGlydHkgPSAxOworCQkJcHJvY2Vzc19tZXNzYWdlcyA9IDE7CisJCX0KKwl9CisKKwkvKgorCSAq ICBQcm9jZXNzIG1lc3NhZ2VzIGFuZCBzZW5kIHN0YXR1cyBpZiBuZWNlc3NhcnkuCisJICoKKwkg KiAgSWYgd2UncmUgcGF1c2VkLCB3ZSdsbCBibG9jayBmb3IgbmV3IG1lc3NhZ2VzLiAgSWYgd2Un cmUgbm90CisJICogIHBhdXNlZCwgd2UnbGwgcHJvY2VzcyBhbnl0aGluZyB3ZSBjYW4gcGVlayBi dXQgd29uJ3QgYmxvY2sKKwkgKiAgZm9yIG1vcmUuICBEZXRhY2ggKGFuZCByZS1hdHRhY2gpIGhh bmRsaW5nIGlzIGFsbCBsb2NhbGl6ZWQKKwkgKiAgdG8gZHVrX2RlYnVnX3Byb2Nlc3NfbWVzc2Fn ZXMoKSB0b28uCisJICoKKwkgKiAgRGVidWdnZXIgd3JpdGVzIG91dHNpZGUgdGhlIG1lc3NhZ2Ug bG9vcCBtYXkgY2F1c2UgZGVidWdnZXIKKwkgKiAgZGV0YWNoMSBwaGFzZSB0byBydW4sIGFmdGVy IHdoaWNoIGRiZ19yZWFkX2NiID09IE5VTEwgYW5kCisJICogIGRiZ19kZXRhY2hpbmcgIT0gMC4g IFRoZSBtZXNzYWdlIGxvb3Agd2lsbCBmaW5pc2ggdGhlIGRldGFjaAorCSAqICBieSBydW5uaW5n IGRldGFjaDIgcGhhc2UsIHNvIGVudGVyIHRoZSBtZXNzYWdlIGxvb3AgYWxzbyB3aGVuCisJICog IGRldGFjaGluZy4KKwkgKi8KKworCWlmIChwcm9jZXNzX21lc3NhZ2VzKSB7CisJCURVS19BU1NF UlQodGhyLT5oZWFwLT5kYmdfcHJvY2Vzc2luZyA9PSAwKTsKKwkJcHJvY2Vzc2VkX21lc3NhZ2Vz ID0gZHVrX2RlYnVnX3Byb2Nlc3NfbWVzc2FnZXModGhyLCAwIC8qbm9fYmxvY2sqLyk7CisJCURV S19BU1NFUlQodGhyLT5oZWFwLT5kYmdfcHJvY2Vzc2luZyA9PSAwKTsKKwl9CisKKwkvKiBDb250 aW51ZSBjaGVja2VkIGV4ZWN1dGlvbiBpZiB0aGVyZSBhcmUgYnJlYWtwb2ludHMgb3Igd2UncmUg c3RlcHBpbmcuCisJICogQWxzbyB1c2UgY2hlY2tlZCBleGVjdXRpb24gaWYgcGF1c2VkIGZsYWcg aXMgYWN0aXZlIC0gaXQgc2hvdWxkbid0IGJlCisJICogYmVjYXVzZSB0aGUgZGVidWcgbWVzc2Fn ZSBsb29wIHNob3VsZG4ndCB0ZXJtaW5hdGUgaWYgaXQgd2FzLiAgU3RlcCBvdXQKKwkgKiBpcyBo YW5kbGVkIGJ5IGNhbGxzdGFjayB1bndpbmQgYW5kIGRvZXNuJ3QgbmVlZCBjaGVja2VkIGV4ZWN1 dGlvbi4KKwkgKiBOb3RlIHRoYXQgZGVidWdnZXIgbWF5IGhhdmUgZGV0YWNoZWQgZHVlIHRvIGVy cm9yIG9yIGV4cGxpY2l0IHJlcXVlc3QKKwkgKiBhYm92ZSwgc28gd2UgbXVzdCByZWNoZWNrIGF0 dGFjaCBzdGF0dXMuCisJICovCisKKwlpZiAoZHVrX2RlYnVnX2lzX2F0dGFjaGVkKHRoci0+aGVh cCkpIHsKKwkJRFVLX0FTU0VSVChhY3QgPT0gdGhyLT5jYWxsc3RhY2tfY3Vycik7CisJCURVS19B U1NFUlQoYWN0ICE9IE5VTEwpOworCQlpZiAoYWN0LT5mbGFncyAmIERVS19BQ1RfRkxBR19CUkVB S1BPSU5UX0FDVElWRSB8fAorCQkgICAgKHRoci0+aGVhcC0+ZGJnX3BhdXNlX2ZsYWdzICYgRFVL X1BBVVNFX0ZMQUdfT05FX09QQ09ERSkgfHwKKwkJICAgICgodGhyLT5oZWFwLT5kYmdfcGF1c2Vf ZmxhZ3MgJiBEVUtfUEFVU0VfRkxBR19MSU5FX0NIQU5HRSkgJiYKKwkJICAgICB0aHItPmhlYXAt PmRiZ19wYXVzZV9hY3QgPT0gdGhyLT5jYWxsc3RhY2tfY3VycikgfHwKKwkJICAgICBEVUtfSEVB UF9IQVNfREVCVUdHRVJfUEFVU0VEKHRoci0+aGVhcCkpIHsKKwkJCSpvdXRfaW1tZWRpYXRlID0g MTsKKwkJfQorCisJCS8qIElmIHdlIHByb2Nlc3NlZCBhbnkgZGVidWcgbWVzc2FnZXMgYnJlYWtw b2ludHMgbWF5IGhhdmUKKwkJICogY2hhbmdlZDsgcmVzdGFydCBleGVjdXRpb24gdG8gcmUtY2hl Y2sgYWN0aXZlIGJyZWFrcG9pbnRzLgorCQkgKi8KKwkJaWYgKHByb2Nlc3NlZF9tZXNzYWdlcykg eworCQkJRFVLX0QoRFVLX0RQUklOVCgicHJvY2Vzc2VkIGRlYnVnIG1lc3NhZ2VzLCByZXN0YXJ0 IGV4ZWN1dGlvbiB0byByZWNoZWNrIHBvc3NpYmx5IGNoYW5nZWQgYnJlYWtwb2ludHMiKSk7CisJ CQkqb3V0X2ludGVycnVwdF9yZXR2YWwgPSBEVUtfX0lOVF9SRVNUQVJUOworCQl9IGVsc2Ugewor CQkJaWYgKHRoci0+aGVhcC0+ZGJnX3BhdXNlX2ZsYWdzICYgRFVLX1BBVVNFX0ZMQUdfT05FX09Q Q09ERSkgeworCQkJCS8qIFNldCAncGF1c2UgYWZ0ZXIgb25lIG9wY29kZScgYWN0aXZlIG9ubHkg d2hlbiB3ZSdyZQorCQkJCSAqIGFjdHVhbGx5IGp1c3QgYWJvdXQgdG8gZXhlY3V0ZSBjb2RlLgor CQkJCSAqLworCQkJCXRoci0+aGVhcC0+ZGJnX3BhdXNlX2ZsYWdzIHw9IERVS19QQVVTRV9GTEFH X09ORV9PUENPREVfQUNUSVZFOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJRFVLX0QoRFVLX0RQ UklOVCgiZGVidWdnZXIgYmVjYW1lIGRldGFjaGVkLCByZXN1bWUgbm9ybWFsIGV4ZWN1dGlvbiIp KTsKKwl9Cit9CisjZW5kaWYgIC8qIERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCAqLworCitEVUtf TE9DQUwgRFVLX19OT0lOTElORV9QRVJGIERVS19DT0xEIGR1a19zbWFsbF91aW50X3QgZHVrX19l eGVjdXRvcl9pbnRlcnJ1cHQoZHVrX2h0aHJlYWQgKnRocikgeworCWR1a19pbnRfdCBjdHI7CisJ ZHVrX2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfaGNvbXBmdW5jICpmdW47CisJZHVrX2Jvb2xfdCBp bW1lZGlhdGUgPSAwOworCWR1a19zbWFsbF91aW50X3QgcmV0dmFsOworCisJRFVLX0FTU0VSVCh0 aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCh0aHItPmhlYXAgIT0gTlVMTCk7CisJRFVLX0FTU0VS VCh0aHItPmNhbGxzdGFja190b3AgPiAwKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVRykK Kwl0aHItPmhlYXAtPmluc3RfY291bnRfaW50ZXJydXB0ICs9IHRoci0+aW50ZXJydXB0X2luaXQ7 CisJRFVLX0REKERVS19ERFBSSU5UKCJleGVjdXRpb24gaW50ZXJydXB0LCBjb3VudGVyPSVsZCwg aW5pdD0lbGQsICIKKwkgICAgICAgICAgICAgICAgICAgImluc3RydWN0aW9uIGNvdW50czogZXhl Y3V0b3I9JWxkLCBpbnRlcnJ1cHQ9JWxkIiwKKwkgICAgICAgICAgICAgICAgICAgKGxvbmcpIHRo ci0+aW50ZXJydXB0X2NvdW50ZXIsIChsb25nKSB0aHItPmludGVycnVwdF9pbml0LAorCSAgICAg ICAgICAgICAgICAgICAobG9uZykgdGhyLT5oZWFwLT5pbnN0X2NvdW50X2V4ZWMsIChsb25nKSB0 aHItPmhlYXAtPmluc3RfY291bnRfaW50ZXJydXB0KSk7CisjZW5kaWYKKworCXJldHZhbCA9IERV S19fSU5UX05PQUNUSU9OOworCWN0ciA9IERVS19IVEhSRUFEX0lOVENUUl9ERUZBVUxUOworCisJ LyoKKwkgKiAgQXZvaWQgbmVzdGVkIGNhbGxzLiAgQ29uY3JldGVseSB0aGlzIGhhcHBlbnMgZHVy aW5nIGRlYnVnZ2luZywgZS5nLgorCSAqICB3aGVuIHdlIGV2YWwoKSBhbiBleHByZXNzaW9uLgor CSAqCisJICogIEFsc28gZG9uJ3QgaW50ZXJydXB0IGlmIHdlJ3JlIGN1cnJlbnRseSBkb2luZyBk ZWJ1ZyBwcm9jZXNzaW5nCisJICogICh3aGljaCBjYW4gYmUgaW5pdGlhdGVkIG91dHNpZGUgdGhl IGJ5dGVjb2RlIGV4ZWN1dG9yKSBhcyB0aGlzCisJICogIG1heSBjYXVzZSB0aGUgZGVidWdnZXIg dG8gYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5LiAgQ2hlY2sgcmVxdWlyZWQKKwkgKiAgZm9yIGNvcnJl Y3Qgb3BlcmF0aW9uIG9mIHRocm93IGludGVyY2VwdCBhbmQgb3RoZXIgImV4b3RpYyIgaGFsdGlu ZworCSAqIHNjZW5hcmlvcy4KKwkgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9T VVBQT1JUKQorCWlmIChEVUtfSEVBUF9IQVNfSU5URVJSVVBUX1JVTk5JTkcodGhyLT5oZWFwKSB8 fCB0aHItPmhlYXAtPmRiZ19wcm9jZXNzaW5nKSB7CisjZWxzZQorCWlmIChEVUtfSEVBUF9IQVNf SU5URVJSVVBUX1JVTk5JTkcodGhyLT5oZWFwKSkgeworI2VuZGlmCisJCURVS19ERChEVUtfRERQ UklOVCgibmVzdGVkIGV4ZWN1dG9yIGludGVycnVwdCwgaWdub3JpbmciKSk7CisKKwkJLyogU2V0 IGEgaGlnaCBpbnRlcnJ1cHQgY291bnRlcjsgdGhlIG9yaWdpbmFsIGV4ZWN1dG9yCisJCSAqIGlu dGVycnVwdCBpbnZvY2F0aW9uIHdpbGwgcmV3cml0ZSBiZWZvcmUgZXhpdGluZy4KKwkJICovCisJ CXRoci0+aW50ZXJydXB0X2luaXQgPSBjdHI7CisJCXRoci0+aW50ZXJydXB0X2NvdW50ZXIgPSBj dHIgLSAxOworCQlyZXR1cm4gRFVLX19JTlRfTk9BQ1RJT047CisJfQorCURVS19IRUFQX1NFVF9J TlRFUlJVUFRfUlVOTklORyh0aHItPmhlYXApOworCisJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3Vy cjsKKwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKworCWZ1biA9IChkdWtfaGNvbXBmdW5jICop IERVS19BQ1RfR0VUX0ZVTkMoYWN0KTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19DT01Q RlVOQygoZHVrX2hvYmplY3QgKikgZnVuKSk7CisKKwlEVUtfVU5SRUYoZnVuKTsKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9FWEVDX1RJTUVPVVRfQ0hFQ0spCisJLyoKKwkgKiAgRXhlY3V0aW9uIHRp bWVvdXQgY2hlY2sKKwkgKi8KKworCWlmIChEVUtfVVNFX0VYRUNfVElNRU9VVF9DSEVDSyh0aHIt PmhlYXAtPmhlYXBfdWRhdGEpKSB7CisJCS8qIEtlZXAgdGhyb3dpbmcgYW4gZXJyb3Igd2hlbmV2 ZXIgd2UgZ2V0IGhlcmUuICBUaGUgdW51c3VhbCB2YWx1ZXMKKwkJICogYXJlIHNldCB0aGlzIHdh eSBiZWNhdXNlIG5vIGluc3RydWN0aW9uIGlzIGV2ZXIgZXhlY3V0ZWQsIHdlIGp1c3QKKwkJICog dGhyb3cgYW4gZXJyb3IgdW50aWwgYWxsIHRyeS9jYXRjaC9maW5hbGx5IGFuZCBvdGhlciBjYXRj aHBvaW50cworCQkgKiBoYXZlIGJlZW4gZXhoYXVzdGVkLiAgRHVrdGFwZS9DIGNvZGUgZ2V0cyBj b250cm9sIGF0IGVhY2ggcHJvdGVjdGVkCisJCSAqIGNhbGwgYnV0IHdoZW5ldmVyIGl0IGVudGVy cyBiYWNrIGludG8gRHVrdGFwZSB0aGUgUmFuZ2VFcnJvciBnZXRzCisJCSAqIHJhaXNlZC4gIFVz ZXIgZXhlYyB0aW1lb3V0IGNoZWNrIG11c3QgY29uc2lzdGVudGx5IGluZGljYXRlIGEgdGltZW91 dAorCQkgKiB1bnRpbCB3ZSd2ZSBmdWxseSBidWJibGVkIG91dCBvZiBEdWt0YXBlLgorCQkgKi8K KwkJRFVLX0QoRFVLX0RQUklOVCgiZXhlY3V0aW9uIHRpbWVvdXQsIHRocm93aW5nIGEgUmFuZ2VF cnJvciIpKTsKKwkJdGhyLT5pbnRlcnJ1cHRfaW5pdCA9IDA7CisJCXRoci0+aW50ZXJydXB0X2Nv dW50ZXIgPSAwOworCQlEVUtfSEVBUF9DTEVBUl9JTlRFUlJVUFRfUlVOTklORyh0aHItPmhlYXAp OworCQlEVUtfRVJST1JfUkFOR0UodGhyLCAiZXhlY3V0aW9uIHRpbWVvdXQiKTsKKwkJRFVLX1dP X05PUkVUVVJOKHJldHVybiAwOyk7CisJfQorI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfVElNRU9V VF9DSEVDSyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJaWYg KCF0aHItPmhlYXAtPmRiZ19wcm9jZXNzaW5nICYmCisJICAgICh0aHItPmhlYXAtPmRiZ19yZWFk X2NiICE9IE5VTEwgfHwgdGhyLT5oZWFwLT5kYmdfZGV0YWNoaW5nKSkgeworCQkvKiBBdm9pZCBy ZWN1cnNpdmUgcmUtZW50cnk7IGVudGVyIHdoZW4gd2UncmUgYXR0YWNoZWQgb3IKKwkJICogZGV0 YWNoaW5nICh0byBmaW5pc2ggb2ZmIHRoZSBwZW5kaW5nIGRldGFjaCkuCisJCSAqLworCQlkdWtf X2ludGVycnVwdF9oYW5kbGVfZGVidWdnZXIodGhyLCAmaW1tZWRpYXRlLCAmcmV0dmFsKTsKKwkJ RFVLX0FTU0VSVChhY3QgPT0gdGhyLT5jYWxsc3RhY2tfY3Vycik7CisJfQorI2VuZGlmICAvKiBE VUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQgKi8KKworCS8qCisJICogIFVwZGF0ZSB0aGUgaW50ZXJy dXB0IGNvdW50ZXIKKwkgKi8KKworCWlmIChpbW1lZGlhdGUpIHsKKwkJLyogQ2F1c2UgYW4gaW50 ZXJydXB0IGFmdGVyIGV4ZWN1dGluZyBvbmUgaW5zdHJ1Y3Rpb24uICovCisJCWN0ciA9IDE7CisJ fQorCisJLyogVGhlIGNvdW50ZXIgdmFsdWUgaXMgb25lIGxlc3MgdGhhbiB0aGUgaW5pdCB2YWx1 ZTogaW5pdCB2YWx1ZSBzaG91bGQKKwkgKiBpbmRpY2F0ZSBob3cgbWFueSBpbnN0cnVjdGlvbnMg YXJlIGV4ZWN1dGVkIGJlZm9yZSBpbnRlcnJ1cHQuICBUbworCSAqIGV4ZWN1dGUgMSBpbnN0cnVj dGlvbiAoYWZ0ZXIgaW50ZXJydXB0IGhhbmRsZXIgcmV0dXJuKSwgY291bnRlciBtdXN0CisJICog YmUgMC4KKwkgKi8KKwlEVUtfQVNTRVJUKGN0ciA+PSAxKTsKKwl0aHItPmludGVycnVwdF9pbml0 ID0gY3RyOworCXRoci0+aW50ZXJydXB0X2NvdW50ZXIgPSBjdHIgLSAxOworCURVS19IRUFQX0NM RUFSX0lOVEVSUlVQVF9SVU5OSU5HKHRoci0+aGVhcCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQor I2VuZGlmICAvKiBEVUtfVVNFX0lOVEVSUlVQVF9DT1VOVEVSICovCisKKy8qCisgKiAgRGVidWdn ZXIgaGFuZGxpbmcgZm9yIGV4ZWN1dG9yIHJlc3RhcnQKKyAqCisgKiAgQ2hlY2sgZm9yIGJyZWFr cG9pbnRzLCBzdGVwcGluZywgZXRjLCBhbmQgZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgZXhlY3V0 ZQorICogIGluIGNoZWNrZWQgb3Igbm9ybWFsIG1vZGUuICBOb3RlIHRoYXQgd2UgY2FuJ3QgZG8g dGhpcyB3aGVuIGFuIGFjdGl2YXRpb24KKyAqICBpcyBjcmVhdGVkLCBiZWNhdXNlIGJyZWFrcG9p bnQgc3RhdHVzIChhbmQgc3RlcHBpbmcgc3RhdHVzKSBtYXkgY2hhbmdlCisgKiAgbGF0ZXIsIHNv IHdlIG11c3QgcmVjaGVjayBldmVyeSB0aW1lIHdlJ3JlIGV4ZWN1dGluZyBhbiBhY3RpdmF0aW9u LgorICogIFRoaXMgcHJpbWl0aXZlIHNob3VsZCBiZSBzaWRlIGVmZmVjdCBmcmVlIHRvIGF2b2lk IGNoYW5nZXMgZHVyaW5nIGNoZWNrLgorICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdH RVJfU1VQUE9SVCkKK0RVS19MT0NBTCB2b2lkIGR1a19fZXhlY3V0b3JfcmVjaGVja19kZWJ1Z2dl cihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYWN0aXZhdGlvbiAqYWN0LCBkdWtfaGNvbXBmdW5jICpm dW4pIHsKKwlkdWtfaGVhcCAqaGVhcDsKKwlkdWtfdHZhbCAqdHZfdG1wOworCWR1a19oc3RyaW5n ICpmaWxlbmFtZTsKKwlkdWtfc21hbGxfdWludF90IGJwX2lkeDsKKwlkdWtfYnJlYWtwb2ludCAq KmJwX2FjdGl2ZTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoYWN0 ICE9IE5VTEwpOworCURVS19BU1NFUlQoZnVuICE9IE5VTEwpOworCisJaGVhcCA9IHRoci0+aGVh cDsKKwlicF9hY3RpdmUgPSBoZWFwLT5kYmdfYnJlYWtwb2ludHNfYWN0aXZlOworCWFjdC0+Zmxh Z3MgJj0gfkRVS19BQ1RfRkxBR19CUkVBS1BPSU5UX0FDVElWRTsKKworCXR2X3RtcCA9IGR1a19o b2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnlfdHZhbF9wdHIodGhyLT5oZWFwLCAoZHVrX2hvYmpl Y3QgKikgZnVuLCBEVUtfSFRIUkVBRF9TVFJJTkdfRklMRV9OQU1FKHRocikpOworCWlmICh0dl90 bXAgJiYgRFVLX1RWQUxfSVNfU1RSSU5HKHR2X3RtcCkpIHsKKwkJZmlsZW5hbWUgPSBEVUtfVFZB TF9HRVRfU1RSSU5HKHR2X3RtcCk7CisKKwkJLyogRmlndXJlIG91dCBhbGwgYWN0aXZlIGJyZWFr cG9pbnRzLiAgQSBicmVha3BvaW50IGlzCisJCSAqIGNvbnNpZGVyZWQgYWN0aXZlIGlmIHRoZSBj dXJyZW50IGZ1bmN0aW9uJ3MgZmlsZU5hbWUKKwkJICogbWF0Y2hlcyB0aGUgYnJlYWtwb2ludCdz IGZpbGVOYW1lLCBBTkQgdGhlcmUgaXMgbm8KKwkJICogaW5uZXIgZnVuY3Rpb24gdGhhdCBoYXMg bWF0Y2hpbmcgbGluZSBudW1iZXJzCisJCSAqIChvdGhlcndpc2UgYSBicmVha3BvaW50IHdvdWxk IGJlIHRyaWdnZXJlZCBib3RoCisJCSAqIGluc2lkZSBhbmQgb3V0c2lkZSBvZiB0aGUgaW5uZXIg ZnVuY3Rpb24gd2hpY2ggd291bGQKKwkJICogYmUgY29uZnVzaW5nKS4gIEV4YW1wbGU6CisJCSAq CisJCSAqICAgICBmdW5jdGlvbiBmb28oKSB7CisJCSAqICAgICAgICAgcHJpbnQoJ2ZvbycpOwor CQkgKiAgICAgICAgIGZ1bmN0aW9uIGJhcigpIHsgICAgPC0uICBicmVha3BvaW50cyBpbiB0aGVz ZQorCQkgKiAgICAgICAgICAgICBwcmludCgnYmFyJyk7ICAgICB8ICBsaW5lcyBzaG91bGQgbm90 IGFmZmVjdAorCQkgKiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgPC0nICBmb28oKSBleGVj dXRpb24KKwkJICogICAgICAgICBiYXIoKTsKKwkJICogICAgIH0KKwkJICoKKwkJICogV2UgbmVl ZCBhIGZldyB0aGluZ3MgdGhhdCBhcmUgb25seSBhdmFpbGFibGUgd2hlbgorCQkgKiBkZWJ1Z2dl ciBzdXBwb3J0IGlzIGVuYWJsZWQ6ICgxKSBhIGxpbmUgcmFuZ2UgZm9yCisJCSAqIGVhY2ggZnVu Y3Rpb24sIGFuZCAoMikgYWNjZXNzIHRvIHRoZSBmdW5jdGlvbgorCQkgKiB0ZW1wbGF0ZSB0byBh Y2Nlc3MgdGhlIGlubmVyIGZ1bmN0aW9ucyAoYW5kIHRoZWlyCisJCSAqIGxpbmUgcmFuZ2VzKS4K KwkJICoKKwkJICogSXQncyBpbXBvcnRhbnQgdG8gaGF2ZSBhIG5hcnJvdyBtYXRjaCBmb3IgYWN0 aXZlCisJCSAqIGJyZWFrcG9pbnRzIHNvIHRoYXQgd2UgZG9uJ3QgZW50ZXIgY2hlY2tlZCBleGVj dXRpb24KKwkJICogd2hlbiB0aGF0J3Mgbm90IG5lY2Vzc2FyeS4gIEZvciBpbnN0YW5jZSwgaWYg d2UncmUKKwkJICogcnVubmluZyBpbnNpZGUgYSBjZXJ0YWluIGZ1bmN0aW9uIGFuZCB0aGVyZSdz CisJCSAqIGJyZWFrcG9pbnQgb3V0c2lkZSBpbiAoYWZ0ZXIgdGhlIGNhbGwgc2l0ZSksIHdlCisJ CSAqIGRvbid0IHdhbnQgdG8gc2xvdyBkb3duIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uCisJ CSAqLworCisJCWZvciAoYnBfaWR4ID0gMDsgYnBfaWR4IDwgaGVhcC0+ZGJnX2JyZWFrcG9pbnRf Y291bnQ7IGJwX2lkeCsrKSB7CisJCQlkdWtfYnJlYWtwb2ludCAqYnAgPSBoZWFwLT5kYmdfYnJl YWtwb2ludHMgKyBicF9pZHg7CisJCQlkdWtfaG9iamVjdCAqKmZ1bmNzLCAqKmZ1bmNzX2VuZDsK KwkJCWR1a19oY29tcGZ1bmMgKmlubmVyX2Z1bjsKKwkJCWR1a19ib29sX3QgYnBfbWF0Y2g7CisK KwkJCWlmIChicC0+ZmlsZW5hbWUgPT0gZmlsZW5hbWUgJiYKKwkJCSAgICBicC0+bGluZSA+PSBm dW4tPnN0YXJ0X2xpbmUgJiYgYnAtPmxpbmUgPD0gZnVuLT5lbmRfbGluZSkgeworCQkJCWJwX21h dGNoID0gMTsKKwkJCQlEVUtfREQoRFVLX0REUFJJTlQoImJyZWFrcG9pbnQgZmlsZW5hbWUgYW5k IGxpbmUgbWF0Y2g6ICIKKwkJCQkgICAgICAgICAgICAgICAgICAgIiVzOiVsZCB2cy4gJXMgKGxp bmUgJWxkIHZzLiAlbGQtJWxkKSIsCisJCQkJICAgICAgICAgICAgICAgICAgIERVS19IU1RSSU5H X0dFVF9EQVRBKGJwLT5maWxlbmFtZSksCisJCQkJICAgICAgICAgICAgICAgICAgIChsb25nKSBi cC0+bGluZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgRFVLX0hTVFJJTkdfR0VUX0RBVEEoZmls ZW5hbWUpLAorCQkJCSAgICAgICAgICAgICAgICAgICAobG9uZykgYnAtPmxpbmUsCisJCQkJICAg ICAgICAgICAgICAgICAgIChsb25nKSBmdW4tPnN0YXJ0X2xpbmUsCisJCQkJICAgICAgICAgICAg ICAgICAgIChsb25nKSBmdW4tPmVuZF9saW5lKSk7CisKKwkJCQlmdW5jcyA9IERVS19IQ09NUEZV TkNfR0VUX0ZVTkNTX0JBU0UodGhyLT5oZWFwLCBmdW4pOworCQkJCWZ1bmNzX2VuZCA9IERVS19I Q09NUEZVTkNfR0VUX0ZVTkNTX0VORCh0aHItPmhlYXAsIGZ1bik7CisJCQkJd2hpbGUgKGZ1bmNz ICE9IGZ1bmNzX2VuZCkgeworCQkJCQlpbm5lcl9mdW4gPSAoZHVrX2hjb21wZnVuYyAqKSAqZnVu Y3M7CisJCQkJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoKGR1a19ob2JqZWN0 ICopIGlubmVyX2Z1bikpOworCQkJCQlpZiAoYnAtPmxpbmUgPj0gaW5uZXJfZnVuLT5zdGFydF9s aW5lICYmIGJwLT5saW5lIDw9IGlubmVyX2Z1bi0+ZW5kX2xpbmUpIHsKKwkJCQkJCURVS19ERChE VUtfRERQUklOVCgiaW5uZXIgZnVuY3Rpb24gbWFza3MgKCdjYXB0dXJlcycpIGJyZWFrcG9pbnQi KSk7CisJCQkJCQlicF9tYXRjaCA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlmdW5j cysrOworCQkJCX0KKworCQkJCWlmIChicF9tYXRjaCkgeworCQkJCQkvKiBObyBuZWVkIHRvIGNo ZWNrIGZvciBzaXplIG9mIGJwX2FjdGl2ZSBsaXN0LAorCQkJCQkgKiBpdCdzIGFsd2F5cyBsYXJn ZXIgdGhhbiBtYXhpbXVtIG51bWJlciBvZgorCQkJCQkgKiBicmVha3BvaW50cy4KKwkJCQkJICov CisJCQkJCWFjdC0+ZmxhZ3MgfD0gRFVLX0FDVF9GTEFHX0JSRUFLUE9JTlRfQUNUSVZFOworCQkJ CQkqYnBfYWN0aXZlID0gaGVhcC0+ZGJnX2JyZWFrcG9pbnRzICsgYnBfaWR4OworCQkJCQlicF9h Y3RpdmUrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkqYnBfYWN0aXZlID0gTlVMTDsgIC8q IHRlcm1pbmF0ZSAqLworCisJRFVLX0REKERVS19ERFBSSU5UKCJBQ1RJVkUgQlJFQUtQT0lOVFM6 ICVsZCIsIChsb25nKSAoYnBfYWN0aXZlIC0gdGhyLT5oZWFwLT5kYmdfYnJlYWtwb2ludHNfYWN0 aXZlKSkpOworCisJLyogRm9yY2UgcGF1c2UgaWYgd2Ugd2VyZSBkb2luZyAic3RlcCBpbnRvIiBp biBhbm90aGVyIGFjdGl2YXRpb24uICovCisJaWYgKCh0aHItPmhlYXAtPmRiZ19wYXVzZV9mbGFn cyAmIERVS19QQVVTRV9GTEFHX0ZVTkNfRU5UUlkpICYmCisJICAgIHRoci0+aGVhcC0+ZGJnX3Bh dXNlX2FjdCAhPSB0aHItPmNhbGxzdGFja19jdXJyKSB7CisJCURVS19EKERVS19EUFJJTlQoIlBB VVNFIFRSSUdHRVJFRCBieSBmdW5jdGlvbiBlbnRyeSIpKTsKKwkJZHVrX2RlYnVnX3NldF9wYXVz ZWQodGhyLT5oZWFwKTsKKwl9CisKKwkvKiBGb3JjZSBpbnRlcnJ1cHQgcmlnaHQgYXdheSBpZiB3 ZSdyZSBwYXVzZWQgb3IgaW4gImNoZWNrZWQgbW9kZSIuCisJICogU3RlcCBvdXQgaXMgaGFuZGxl ZCBieSBjYWxsc3RhY2sgdW53aW5kLgorCSAqLworCWlmICgoYWN0LT5mbGFncyAmIERVS19BQ1Rf RkxBR19CUkVBS1BPSU5UX0FDVElWRSkgfHwKKwkgICAgRFVLX0hFQVBfSEFTX0RFQlVHR0VSX1BB VVNFRCh0aHItPmhlYXApIHx8CisJICAgICgodGhyLT5oZWFwLT5kYmdfcGF1c2VfZmxhZ3MgJiBE VUtfUEFVU0VfRkxBR19MSU5FX0NIQU5HRSkgJiYKKwkgICAgIHRoci0+aGVhcC0+ZGJnX3BhdXNl X2FjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKSkgeworCQkvKiBXZSdsbCBuZWVkIHRvIGludGVy cnVwdCBlYXJseSBzbyByZWNvbXB1dGUgdGhlIGluaXQKKwkJICogY291bnRlciB0byByZWZsZWN0 IHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zCisJCSAqIGV4ZWN1dGVkIHNvIHRo YXQgc3RlcCBjb3VudHMgZm9yIGUuZy4gZGVidWdnZXIgcmF0ZQorCQkgKiBsaW1pdGluZyBhcmUg YWNjdXJhdGUuCisJCSAqLworCQlEVUtfQVNTRVJUKHRoci0+aW50ZXJydXB0X2NvdW50ZXIgPD0g dGhyLT5pbnRlcnJ1cHRfaW5pdCk7CisJCXRoci0+aW50ZXJydXB0X2luaXQgPSB0aHItPmludGVy cnVwdF9pbml0IC0gdGhyLT5pbnRlcnJ1cHRfY291bnRlcjsKKwkJdGhyLT5pbnRlcnJ1cHRfY291 bnRlciA9IDA7CisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQgKi8K KworLyoKKyAqICBPcGNvZGUgaGFuZGxlcnMgZm9yIG9wY29kZXMgd2l0aCBhIGxvdCBvZiBjb2Rl IGFuZCB3aGljaCBhcmUgcmVsYXRpdmVseQorICogIHJhcmU7IE5PSU5MSU5FIHRvIHJlZHVjZSBh bW91bnQgb2YgY29kZSBpbiBtYWluIGJ5dGVjb2RlIGRpc3BhdGNoZXIuCisgKi8KKworRFVLX0xP Q0FMIERVS19fTk9JTkxJTkVfUEVSRiB2b2lkIGR1a19faGFuZGxlX29wX2luaXRzZXRfaW5pdGdl dChkdWtfaHRocmVhZCAqdGhyLCBkdWtfdWludF9mYXN0MzJfdCBpbnMpIHsKKwlkdWtfYm9vbF90 IGlzX3NldCA9IChEVUtfREVDX09QKGlucykgPT0gRFVLX09QX0lOSVRTRVQpOworCWR1a191aW50 X2Zhc3RfdCBpZHg7CisJZHVrX3VpbnRfdCBkZWZwcm9wX2ZsYWdzOworCisJLyogQSAtPiBvYmpl Y3QgcmVnaXN0ZXIgKGFjdHMgYXMgYSBzb3VyY2UpCisJICogQkMgLT4gQkMrMCBjb250YWlucyBr ZXksIEJDKzEgY2xvc3VyZSAodmFsdWUpCisJICovCisKKwkvKiBJTklUU0VUL0lOSVRHRVQgYXJl IG9ubHkgdXNlZCB0byBpbml0aWFsaXplIG9iamVjdCBsaXRlcmFsIGtleXMuCisJICogVGhlcmUg bWF5IGJlIGEgcHJldmlvdXMgcHJvcGVyeSBpbiBFUzIwMTUgYmVjYXVzZSBkdXBsaWNhdGUgcHJv cGVydHkKKwkgKiBuYW1lcyBhcmUgYWxsb3dlZC4KKwkgKi8KKworCS8qIFRoaXMgY291bGQgYmUg bWFkZSBtb3JlIG9wdGltYWwgYnkgYWNjZXNzaW5nIGludGVybmFscyBkaXJlY3RseS4gKi8KKwor CWlkeCA9IChkdWtfdWludF9mYXN0X3QpIERVS19ERUNfQkMoaW5zKTsKKwlkdWtfZHVwKHRociwg KGR1a19pZHhfdCkgKGlkeCArIDApKTsgIC8qIGtleSAqLworCWR1a19kdXAodGhyLCAoZHVrX2lk eF90KSAoaWR4ICsgMSkpOyAgLyogZ2V0dGVyL3NldHRlciAqLworCWlmIChpc19zZXQpIHsKKwkg ICAgICAgIGRlZnByb3BfZmxhZ3MgPSBEVUtfREVGUFJPUF9IQVZFX1NFVFRFUiB8CisJICAgICAg ICAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfRk9SQ0UgfAorCSAgICAgICAgICAgICAgICAg ICAgICAgIERVS19ERUZQUk9QX1NFVF9FTlVNRVJBQkxFIHwKKwkgICAgICAgICAgICAgICAgICAg ICAgICBEVUtfREVGUFJPUF9TRVRfQ09ORklHVVJBQkxFOworCX0gZWxzZSB7CisJICAgICAgICBk ZWZwcm9wX2ZsYWdzID0gRFVLX0RFRlBST1BfSEFWRV9HRVRURVIgfAorCSAgICAgICAgICAgICAg ICAgICAgICAgIERVS19ERUZQUk9QX0ZPUkNFIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICBE VUtfREVGUFJPUF9TRVRfRU5VTUVSQUJMRSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgRFVL X0RFRlBST1BfU0VUX0NPTkZJR1VSQUJMRTsKKwl9CisJZHVrX2RlZl9wcm9wKHRociwgKGR1a19p ZHhfdCkgRFVLX0RFQ19BKGlucyksIGRlZnByb3BfZmxhZ3MpOworfQorCitEVUtfTE9DQUwgRFVL X19OT0lOTElORV9QRVJGIHZvaWQgZHVrX19oYW5kbGVfb3BfdHJ5Y2F0Y2goZHVrX2h0aHJlYWQg KnRociwgZHVrX3VpbnRfZmFzdDMyX3QgaW5zLCBkdWtfaW5zdHJfdCAqY3Vycl9wYykgeworCWR1 a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2NhdGNoZXIgKmNhdDsKKwlkdWtfdHZhbCAqdHYxOwor CWR1a19zbWFsbF91aW50X2Zhc3RfdCBhOworCWR1a19zbWFsbF91aW50X2Zhc3RfdCBiYzsKKwor CS8qIEEgLT4gZmxhZ3MKKwkgKiBCQyAtPiByZWdfY2F0Y2g7IGJhc2UgcmVnaXN0ZXIgZm9yIHR3 byByZWdpc3RlcnMgdXNlZCBib3RoIGR1cmluZworCSAqICAgICAgIHRyeWNhdGNoIHNldHVwIGFu ZCB3aGVuIGNhdGNoIGlzIHRyaWdnZXJlZAorCSAqCisJICogICAgICBJZiBEVUtfQkNfVFJZQ0FU Q0hfRkxBR19DQVRDSF9CSU5ESU5HIHNldDoKKwkgKiAgICAgICAgICByZWdfY2F0Y2ggKyAwOiBj YXRjaCBiaW5kaW5nIHZhcmlhYmxlIG5hbWUgKHN0cmluZykuCisJICogICAgICAgICAgQXV0b21h dGljIGRlY2xhcmF0aXZlIGVudmlyb25tZW50IGlzIGVzdGFibGlzaGVkIGZvcgorCSAqICAgICAg ICAgIHRoZSBkdXJhdGlvbiBvZiB0aGUgJ2NhdGNoJyBjbGF1c2UuCisJICoKKwkgKiAgICAgIElm IERVS19CQ19UUllDQVRDSF9GTEFHX1dJVEhfQklORElORyBzZXQ6CisJICogICAgICAgICAgcmVn X2NhdGNoICsgMDogd2l0aCAndGFyZ2V0IHZhbHVlJywgd2hpY2ggaXMgY29lcmNlZCB0bworCSAq ICAgICAgICAgIGFuIG9iamVjdCBhbmQgdGhlbiB1c2VkIGFzIGEgYmluZGluZCBvYmplY3QgZm9y IGFuCisJICogICAgICAgICAgZW52aXJvbm1lbnQgcmVjb3JkLiAgVGhlIGJpbmRpbmcgaXMgaW5p dGlhbGl6ZWQgaGVyZSwgZm9yCisJICogICAgICAgICAgdGhlICd0cnknIGNsYXVzZS4KKwkgKgor CSAqIE5vdGUgdGhhdCBhIFRSWUNBVENIIGdlbmVyYXRlZCBmb3IgYSAnd2l0aCcgc3RhdGVtZW50 IGhhcyBubworCSAqIGNhdGNoIG9yIGZpbmFsbHkgcGFydHMuCisJICovCisKKwkvKiBYWFg6IFRS WUNBVENIIGhhbmRsaW5nIHNob3VsZCBiZSByZXdvcmtlZCB0byBhdm9pZCBjcmVhdGluZworCSAq IGFuIGV4cGxpY2l0IHNjb3BlIHVubGVzcyBpdCBpcyBhY3R1YWxseSBuZWVkZWQgKGUuZy4gZnVu Y3Rpb24KKwkgKiBpbnN0YW5jZXMgb3IgZXZhbCBpcyBleGVjdXRlZCBpbnNpZGUgdGhlIGNhdGNo IGJsb2NrKS4gIFRoaXMKKwkgKiByZXdvcmsgaXMgbm90IHRyaXZpYWwgYmVjYXVzZSB0aGUgY29t cGlsZXIgZG9lc24ndCBoYXZlIGFuCisJICogaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLiAg V2hlbiB0aGUgcmV3b3JrIGlzIGRvbmUsIHRoZQorCSAqIG9wY29kZSBmb3JtYXQgY2FuIGFsc28g YmUgbWFkZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKwkgKi8KKworCS8qIFhYWDogc2lkZSBlZmZl Y3QgaGFuZGxpbmcgaXMgcXVpdGUgYXdrd2FyZCBoZXJlICovCisKKwlEVUtfREREKERVS19ERERQ UklOVCgiVFJZQ0FUQ0g6IHJlZ19jYXRjaD0lbGQsIGhhdmVfY2F0Y2g9JWxkLCAiCisJICAgICAg ICAgICAgICAgICAgICAgImhhdmVfZmluYWxseT0lbGQsIGNhdGNoX2JpbmRpbmc9JWxkLCB3aXRo X2JpbmRpbmc9JWxkIChmbGFncz0weCUwMmx4KSIsCisJICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIERVS19ERUNfQkMoaW5zKSwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgKERVS19E RUNfQShpbnMpICYgRFVLX0JDX1RSWUNBVENIX0ZMQUdfSEFWRV9DQVRDSCA/IDEgOiAwKSwKKwkg ICAgICAgICAgICAgICAgICAgICAobG9uZykgKERVS19ERUNfQShpbnMpICYgRFVLX0JDX1RSWUNB VENIX0ZMQUdfSEFWRV9GSU5BTExZID8gMSA6IDApLAorCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSAoRFVLX0RFQ19BKGlucykgJiBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19DQVRDSF9CSU5ESU5H ID8gMSA6IDApLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSAoRFVLX0RFQ19BKGlucykg JiBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19XSVRIX0JJTkRJTkcgPyAxIDogMCksCisJICAgICAgICAg ICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIERVS19ERUNfQShpbnMpKSk7CisKKwlhID0gRFVL X0RFQ19BKGlucyk7CisJYmMgPSBEVUtfREVDX0JDKGlucyk7CisKKwkvKiBSZWdpc3RlcnMgJ2Jj JyBhbmQgJ2JjICsgMScgYXJlIHdyaXR0ZW4gaW4gbG9uZ2ptcCBoYW5kbGluZworCSAqIGFuZCBp ZiB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKHdoaWNoIGFyZSB0ZW1wb3JhcmllcykgYmVjb21lCisJ ICogdW5yZWFjaGFibGUgLWFuZC0gaGF2ZSBhIGZpbmFsaXplciwgdGhlcmUnbGwgYmUgYSBmdW5j dGlvbgorCSAqIGNhbGwgZHVyaW5nIGVycm9yIGhhbmRsaW5nIHdoaWNoIGlzIG5vdCBzdXBwb3J0 ZWQgbm93IChHSC0yODcpLgorCSAqIEVuc3VyZSB0aGF0IGJvdGggJ2JjJyBhbmQgJ2JjICsgMScg aGF2ZSBwcmltaXRpdmUgdmFsdWVzIHRvCisJICogZ3VhcmFudGVlIG5vIGZpbmFsaXplciBjYWxs cyBpbiBlcnJvciBoYW5kbGluZy4gIFNjcnViYmluZyBhbHNvCisJICogZW5zdXJlcyBmaW5hbGl6 ZXJzIGZvciB0aGUgcHJldmlvdXMgdmFsdWVzIHJ1biBoZXJlIHJhdGhlciB0aGFuCisJICogbGF0 ZXIuICBFcnJvciBoYW5kbGluZyByZWxhdGVkIHZhbHVlcyBhcmUgYWxzbyB3cml0dGVuIHRvICdi YycKKwkgKiBhbmQgJ2JjICsgMScgYnV0IHRob3NlIHZhbHVlcyBuZXZlciBiZWNvbWUgdW5yZWFj aGFibGUgZHVyaW5nCisJICogZXJyb3IgaGFuZGxpbmcsIHNvIHRoZXJlJ3Mgbm8gc2lkZSBlZmZl Y3QgcHJvYmxlbSBldmVuIGlmIHRoZQorCSAqIGVycm9yIHZhbHVlIGhhcyBhIGZpbmFsaXplci4K KwkgKi8KKwlkdWtfZHVwKHRociwgKGR1a19pZHhfdCkgYmMpOyAgLyogU3RhYmlsaXplIHZhbHVl LiAqLworCWR1a190b191bmRlZmluZWQodGhyLCAoZHVrX2lkeF90KSBiYyk7CisJZHVrX3RvX3Vu ZGVmaW5lZCh0aHIsIChkdWtfaWR4X3QpIChiYyArIDEpKTsKKworCS8qIEFsbG9jYXRlIGNhdGNo ZXIgYW5kIHBvcHVsYXRlIGl0LiAgRG9lc24ndCBoYXZlIHRvCisJICogYmUgZnVsbHkgYXRvbWlj LCBidXQgdGhlIGNhdGNoZXIgbXVzdCBiZSBpbiBhCisJICogY29uc2lzdGVudCBzdGF0ZSBpZiBz aWRlIGVmZmVjdHMgKHN1Y2ggYXMgZmluYWxpemVyCisJICogY2FsbHMpIG9jY3VyLgorCSAqLwor CisJY2F0ID0gZHVrX2h0aHJlYWRfY2F0Y2hlcl9hbGxvYyh0aHIpOworCURVS19BU1NFUlQoY2F0 ICE9IE5VTEwpOworCisJY2F0LT5mbGFncyA9IERVS19DQVRfVFlQRV9UQ0Y7CisJY2F0LT5oX3Zh cm5hbWUgPSBOVUxMOworCWNhdC0+cGNfYmFzZSA9IChkdWtfaW5zdHJfdCAqKSBjdXJyX3BjOyAg LyogcHJlLWluY3JlbWVudGVkLCBwb2ludHMgdG8gZmlyc3QganVtcCBzbG90ICovCisJY2F0LT5p ZHhfYmFzZSA9IChkdWtfc2l6ZV90KSAodGhyLT52YWxzdGFja19ib3R0b20gLSB0aHItPnZhbHN0 YWNrKSArIGJjOworCisJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwlEVUtfQVNTRVJUKGFj dCAhPSBOVUxMKTsKKwljYXQtPnBhcmVudCA9IGFjdC0+Y2F0OworCWFjdC0+Y2F0ID0gY2F0Owor CisJaWYgKGEgJiBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19IQVZFX0NBVENIKSB7CisJCWNhdC0+Zmxh Z3MgfD0gRFVLX0NBVF9GTEFHX0NBVENIX0VOQUJMRUQ7CisJfQorCWlmIChhICYgRFVLX0JDX1RS WUNBVENIX0ZMQUdfSEFWRV9GSU5BTExZKSB7CisJCWNhdC0+ZmxhZ3MgfD0gRFVLX0NBVF9GTEFH X0ZJTkFMTFlfRU5BQkxFRDsKKwl9CisJaWYgKGEgJiBEVUtfQkNfVFJZQ0FUQ0hfRkxBR19DQVRD SF9CSU5ESU5HKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJjYXRjaCBiaW5kaW5nIGZsYWcg c2V0IHRvIGNhdGNoZXIiKSk7CisJCWNhdC0+ZmxhZ3MgfD0gRFVLX0NBVF9GTEFHX0NBVENIX0JJ TkRJTkdfRU5BQkxFRDsKKwkJdHYxID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKTsKKwkJ RFVLX0FTU0VSVChEVUtfVFZBTF9JU19TVFJJTkcodHYxKSk7CisKKwkJLyogYm9ycm93ZWQgcmVm ZXJlbmNlOyBhbHRob3VnaCAndHYxJyBjb21lcyBmcm9tIGEgcmVnaXN0ZXIsCisJCSAqIGl0cyB2 YWx1ZSB3YXMgbG9hZGVkIHVzaW5nIExEQ09OU1Qgc28gdGhlIGNvbnN0YW50IHdpbGwKKwkJICog YWxzbyBleGlzdCBhbmQgYmUgcmVhY2hhYmxlLgorCQkgKi8KKwkJY2F0LT5oX3Zhcm5hbWUgPSBE VUtfVFZBTF9HRVRfU1RSSU5HKHR2MSk7CisJfSBlbHNlIGlmIChhICYgRFVLX0JDX1RSWUNBVENI X0ZMQUdfV0lUSF9CSU5ESU5HKSB7CisJCWR1a19ob2JqZW52ICplbnY7CisJCWR1a19ob2JqZWN0 ICp0YXJnZXQ7CisKKwkJLyogRGVsYXllZCBlbnYgaW5pdGlhbGl6YXRpb24gZm9yIGFjdGl2YXRp b24gKGlmIG5lZWRlZCkuICovCisJCURVS19BU1NFUlQodGhyLT5jYWxsc3RhY2tfdG9wID49IDEp OworCQlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJyKTsKKwkJRFVLX0FTU0VS VChhY3QgIT0gTlVMTCk7CisJCWlmIChhY3QtPmxleF9lbnYgPT0gTlVMTCkgeworCQkJRFVLX0RE RChEVUtfREREUFJJTlQoImRlbGF5ZWQgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24iKSk7CisJ CQlEVUtfQVNTRVJUKGFjdC0+dmFyX2VudiA9PSBOVUxMKTsKKworCQkJZHVrX2pzX2luaXRfYWN0 aXZhdGlvbl9lbnZpcm9ubWVudF9yZWNvcmRzX2RlbGF5ZWQodGhyLCBhY3QpOworCQkJRFVLX0FT U0VSVChhY3QgPT0gdGhyLT5jYWxsc3RhY2tfY3Vycik7CisJCQlEVUtfVU5SRUYoYWN0KTsgIC8q ICdhY3QnIGlzIG5vIGxvbmdlciBhY2Nlc3NlZCwgc2NhbmJ1aWxkIGZpeCAqLworCQl9CisJCURV S19BU1NFUlQoYWN0LT5sZXhfZW52ICE9IE5VTEwpOworCQlEVUtfQVNTRVJUKGFjdC0+dmFyX2Vu diAhPSBOVUxMKTsKKworCQkvKiBDb2VyY2UgJ3dpdGgnIHRhcmdldC4gKi8KKwkJdGFyZ2V0ID0g ZHVrX3RvX2hvYmplY3QodGhyLCAtMSk7CisJCURVS19BU1NFUlQodGFyZ2V0ICE9IE5VTEwpOwor CisJCS8qIENyZWF0ZSBhbiBvYmplY3QgZW52aXJvbm1lbnQ7IGl0IGlzIG5vdCBwdXNoZWQKKwkJ ICogc28gYXZvaWQgc2lkZSBlZmZlY3RzIHZlcnkgY2FyZWZ1bGx5IHVudGlsIGl0IGlzCisJCSAq IHJlZmVyZW5jZWQuCisJCSAqLworCQllbnYgPSBkdWtfaG9iamVudl9hbGxvYyh0aHIsCisJCSAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdfRVhURU5TSUJMRSB8CisJCSAg ICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JK RUNUX0NMQVNTX09CSkVOVikpOworCQlEVUtfQVNTRVJUKGVudiAhPSBOVUxMKTsKKwkJRFVLX0FT U0VSVChEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgKGR1a19ob2JqZWN0ICop IGVudikgPT0gTlVMTCk7CisJCWVudi0+dGFyZ2V0ID0gdGFyZ2V0OyAgLyogYWx3YXlzIHByb3Zp ZGVUaGlzPXRydWUgKi8KKwkJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgdGFyZ2V0KTsKKwkJZW52 LT5oYXNfdGhpcyA9IDE7CisJCURVS19BU1NFUlRfSE9CSkVOVl9WQUxJRChlbnYpOworCQlEVUtf REREKERVS19ERERQUklOVCgiZW52aXJvbm1lbnQgZm9yIHdpdGggYmluZGluZzogJSFpTyIsIGVu dikpOworCisJCURVS19BU1NFUlQoYWN0ID09IHRoci0+Y2FsbHN0YWNrX2N1cnIpOworCQlEVUtf QVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3Qg KikgZW52KSA9PSBOVUxMKTsKKwkJRFVLX0FTU0VSVChhY3QtPmxleF9lbnYgIT0gTlVMTCk7CisJ CURVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgZW52 LCBhY3QtPmxleF9lbnYpOworCQlhY3QtPmxleF9lbnYgPSAoZHVrX2hvYmplY3QgKikgZW52OyAg LyogTm93IHJlYWNoYWJsZS4gKi8KKwkJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgKGR1a19ob2Jq ZWN0ICopIGVudik7CisJCS8qIE5ldCByZWZjb3VudCBjaGFuZ2UgdG8gYWN0LT5sZXhfZW52IGlz IDA6IGluY3JlZiBmb3IgZW52J3MKKwkJICogcHJvdG90eXBlLCBkZWNyZWYgZm9yIGFjdC0+bGV4 X2VudiBvdmVyd3JpdGUuCisJCSAqLworCisJCS8qIFNldCBjYXRjaGVyIGxleF9lbnYgYWN0aXZl IChhZmZlY3RzIHVud2luZCkKKwkJICogb25seSB3aGVuIHRoZSB3aG9sZSBzZXR1cCBpcyBjb21w bGV0ZS4KKwkJICovCisJCWNhdCA9IGFjdC0+Y2F0OyAgLyogWFhYOiBiZXR0ZXIgdG8gcmVsb29r dXA/IG5vdCBtYW5kYXRvcnkgYmVjYXVzZSAnY2F0JyBpcyBzdGFibGUgKi8KKwkJY2F0LT5mbGFn cyB8PSBEVUtfQ0FUX0ZMQUdfTEVYRU5WX0FDVElWRTsKKwl9IGVsc2UgeworCQk7CisJfQorCisJ RFVLX0RERChEVUtfREREUFJJTlQoIlRSWUNBVENIIGNhdGNoZXI6IGZsYWdzPTB4JTA4bHgsIHBj X2Jhc2U9JWxkLCAiCisJICAgICAgICAgICAgICAgICAgICAgImlkeF9iYXNlPSVsZCwgaF92YXJu YW1lPSUhTyIsCisJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGNhdC0+Zmxh Z3MsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNhdC0+cGNfYmFzZSwgKGxvbmcpIGNh dC0+aWR4X2Jhc2UsIChkdWtfaGVhcGhkciAqKSBjYXQtPmhfdmFybmFtZSkpOworCisJZHVrX3Bv cF91bnNhZmUodGhyKTsKK30KKworRFVLX0xPQ0FMIERVS19fTk9JTkxJTkVfUEVSRiBkdWtfaW5z dHJfdCAqZHVrX19oYW5kbGVfb3BfZW5kdHJ5KGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X2Zh c3QzMl90IGlucykgeworCWR1a19hY3RpdmF0aW9uICphY3Q7CisJZHVrX2NhdGNoZXIgKmNhdDsK KwlkdWtfdHZhbCAqdHYxOworCWR1a19pbnN0cl90ICpwY19iYXNlOworCisJRFVLX1VOUkVGKGlu cyk7CisKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+PSAxKTsKKwlhY3QgPSB0aHIt PmNhbGxzdGFja19jdXJyOworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCWNhdCA9IGFjdC0+ Y2F0OworCURVS19BU1NFUlQoY2F0ICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0NBVF9HRVRf VFlQRShhY3QtPmNhdCkgPT0gRFVLX0NBVF9UWVBFX1RDRik7CisKKwlEVUtfREREKERVS19ERERQ UklOVCgiRU5EVFJZOiBjbGVhcmluZyBjYXRjaCBhY3RpdmUgZmxhZyAocmVnYXJkbGVzcyBvZiB3 aGV0aGVyIGl0IHdhcyBzZXQgb3Igbm90KSIpKTsKKwlEVUtfQ0FUX0NMRUFSX0NBVENIX0VOQUJM RUQoY2F0KTsKKworCXBjX2Jhc2UgPSBjYXQtPnBjX2Jhc2U7CisKKwlpZiAoRFVLX0NBVF9IQVNf RklOQUxMWV9FTkFCTEVEKGNhdCkpIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIkVORFRSWTog ZmluYWxseSBwYXJ0IGlzIGFjdGl2ZSwganVtcCB0aHJvdWdoIDJuZCBqdW1wIHNsb3Qgd2l0aCAn bm9ybWFsIGNvbnRpbnVhdGlvbiciKSk7CisKKwkJdHYxID0gdGhyLT52YWxzdGFjayArIGNhdC0+ aWR4X2Jhc2U7CisJCURVS19BU1NFUlQodHYxID49IHRoci0+dmFsc3RhY2sgJiYgdHYxIDwgdGhy LT52YWxzdGFja190b3ApOworCQlEVUtfVFZBTF9TRVRfVU5ERUZJTkVEX1VQRFJFRih0aHIsIHR2 MSk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJdHYxID0gTlVMTDsKKworCQl0djEgPSB0aHItPnZh bHN0YWNrICsgY2F0LT5pZHhfYmFzZSArIDE7CisJCURVS19BU1NFUlQodHYxID49IHRoci0+dmFs c3RhY2sgJiYgdHYxIDwgdGhyLT52YWxzdGFja190b3ApOworCQlEVUtfVFZBTF9TRVRfVTMyX1VQ RFJFRih0aHIsIHR2MSwgKGR1a191aW50MzJfdCkgRFVLX0xKX1RZUEVfTk9STUFMKTsgIC8qIHNp ZGUgZWZmZWN0cyAqLworCQl0djEgPSBOVUxMOworCisJCURVS19DQVRfQ0xFQVJfRklOQUxMWV9F TkFCTEVEKGNhdCk7CisJfSBlbHNlIHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoIkVORFRSWTog bm8gZmluYWxseSBwYXJ0LCBkaXNtYW50bGUgY2F0Y2hlciwganVtcCB0aHJvdWdoIDJuZCBqdW1w IHNsb3QgKHRvIGVuZCBvZiBzdGF0ZW1lbnQpIikpOworCisJCWR1a19odGhyZWFkX2NhdGNoZXJf dW53aW5kX25vcnoodGhyLCBhY3QpOyAgLyogbGV4ZW52IG1heSBiZSBzZXQgZm9yICd3aXRoJyBi aW5kaW5nICovCisJCS8qIG5vIG5lZWQgdG8gdW53aW5kIGNhbGxzdGFjayAqLworCX0KKworCXJl dHVybiBwY19iYXNlICsgMTsgIC8qIG5ldyBjdXJyX3BjIHZhbHVlICovCit9CisKK0RVS19MT0NB TCBEVUtfX05PSU5MSU5FX1BFUkYgZHVrX2luc3RyX3QgKmR1a19faGFuZGxlX29wX2VuZGNhdGNo KGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X2Zhc3QzMl90IGlucykgeworCWR1a19hY3RpdmF0 aW9uICphY3Q7CisJZHVrX2NhdGNoZXIgKmNhdDsKKwlkdWtfdHZhbCAqdHYxOworCWR1a19pbnN0 cl90ICpwY19iYXNlOworCisJRFVLX1VOUkVGKGlucyk7CisKKwlEVUtfQVNTRVJUKHRoci0+Y2Fs bHN0YWNrX3RvcCA+PSAxKTsKKwlhY3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCURVS19BU1NF UlQoYWN0ICE9IE5VTEwpOworCWNhdCA9IGFjdC0+Y2F0OworCURVS19BU1NFUlQoY2F0ICE9IE5V TEwpOworCURVS19BU1NFUlQoIURVS19DQVRfSEFTX0NBVENIX0VOQUJMRUQoY2F0KSk7ICAvKiBj bGVhcmVkIGJlZm9yZSBlbnRlcmluZyBjYXRjaCBwYXJ0ICovCisKKwlpZiAoRFVLX0NBVF9IQVNf TEVYRU5WX0FDVElWRShjYXQpKSB7CisJCWR1a19ob2JqZWN0ICpwcmV2X2VudjsKKworCQkvKiAn d2l0aCcgYmluZGluZyBoYXMgbm8gY2F0Y2ggY2xhdXNlLCBzbyBjYW4ndCBiZSBoZXJlIHVubGVz cyBhIG5vcm1hbCB0cnktY2F0Y2ggKi8KKwkJRFVLX0FTU0VSVChEVUtfQ0FUX0hBU19DQVRDSF9C SU5ESU5HX0VOQUJMRUQoY2F0KSk7CisJCURVS19BU1NFUlQoYWN0LT5sZXhfZW52ICE9IE5VTEwp OworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJFTkRDQVRDSDogcG9wcGluZyBjYXRjaGVyIHBh cnQgbGV4aWNhbCBlbnZpcm9ubWVudCIpKTsKKworCQlwcmV2X2VudiA9IGFjdC0+bGV4X2VudjsK KwkJRFVLX0FTU0VSVChwcmV2X2VudiAhPSBOVUxMKTsKKwkJYWN0LT5sZXhfZW52ID0gRFVLX0hP QkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIHByZXZfZW52KTsKKwkJRFVLX0NBVF9DTEVB Ul9MRVhFTlZfQUNUSVZFKGNhdCk7CisJCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIGFjdC0+bGV4 X2Vudik7CisJCURVS19IT0JKRUNUX0RFQ1JFRih0aHIsIHByZXZfZW52KTsgIC8qIHNpZGUgZWZm ZWN0cyAqLworCisJCURVS19BU1NFUlQoYWN0ID09IHRoci0+Y2FsbHN0YWNrX2N1cnIpOworCQlE VUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKwl9CisKKwlwY19iYXNlID0gY2F0LT5wY19iYXNlOwor CisJaWYgKERVS19DQVRfSEFTX0ZJTkFMTFlfRU5BQkxFRChjYXQpKSB7CisJCURVS19EREQoRFVL X0RERFBSSU5UKCJFTkRDQVRDSDogZmluYWxseSBwYXJ0IGlzIGFjdGl2ZSwganVtcCB0aHJvdWdo IDJuZCBqdW1wIHNsb3Qgd2l0aCAnbm9ybWFsIGNvbnRpbnVhdGlvbiciKSk7CisKKwkJdHYxID0g dGhyLT52YWxzdGFjayArIGNhdC0+aWR4X2Jhc2U7CisJCURVS19BU1NFUlQodHYxID49IHRoci0+ dmFsc3RhY2sgJiYgdHYxIDwgdGhyLT52YWxzdGFja190b3ApOworCQlEVUtfVFZBTF9TRVRfVU5E RUZJTkVEX1VQRFJFRih0aHIsIHR2MSk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJdHYxID0gTlVM TDsKKworCQl0djEgPSB0aHItPnZhbHN0YWNrICsgY2F0LT5pZHhfYmFzZSArIDE7CisJCURVS19B U1NFUlQodHYxID49IHRoci0+dmFsc3RhY2sgJiYgdHYxIDwgdGhyLT52YWxzdGFja190b3ApOwor CQlEVUtfVFZBTF9TRVRfVTMyX1VQRFJFRih0aHIsIHR2MSwgKGR1a191aW50MzJfdCkgRFVLX0xK X1RZUEVfTk9STUFMKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCQl0djEgPSBOVUxMOworCisJCURV S19DQVRfQ0xFQVJfRklOQUxMWV9FTkFCTEVEKGNhdCk7CisJfSBlbHNlIHsKKwkJRFVLX0RERChE VUtfREREUFJJTlQoIkVORENBVENIOiBubyBmaW5hbGx5IHBhcnQsIGRpc21hbnRsZSBjYXRjaGVy LCBqdW1wIHRocm91Z2ggMm5kIGp1bXAgc2xvdCAodG8gZW5kIG9mIHN0YXRlbWVudCkiKSk7CisK KwkJZHVrX2h0aHJlYWRfY2F0Y2hlcl91bndpbmRfbm9yeih0aHIsIGFjdCk7CisJCS8qIG5vIG5l ZWQgdG8gdW53aW5kIGNhbGxzdGFjayAqLworCX0KKworCXJldHVybiBwY19iYXNlICsgMTsgIC8q IG5ldyBjdXJyX3BjIHZhbHVlICovCit9CisKK0RVS19MT0NBTCBEVUtfX05PSU5MSU5FX1BFUkYg ZHVrX3NtYWxsX3VpbnRfdCBkdWtfX2hhbmRsZV9vcF9lbmRmaW4oZHVrX2h0aHJlYWQgKnRociwg ZHVrX3VpbnRfZmFzdDMyX3QgaW5zLCBkdWtfYWN0aXZhdGlvbiAqZW50cnlfYWN0KSB7CisJZHVr X2FjdGl2YXRpb24gKmFjdDsKKwlkdWtfdHZhbCAqdHYxOworCWR1a191aW50X3QgcmVnX2NhdGNo OworCWR1a19zbWFsbF91aW50X3QgY29udF90eXBlOworCWR1a19zbWFsbF91aW50X3QgcmV0X3Jl c3VsdDsKKworCURVS19BU1NFUlQodGhyLT5wdHJfY3Vycl9wYyA9PSBOVUxMKTsKKwlEVUtfQVNT RVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+PSAxKTsKKwlhY3QgPSB0aHItPmNhbGxzdGFja19jdXJy OworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCXJlZ19jYXRjaCA9IERVS19ERUNfQUJDKGlu cyk7CisKKwkvKiBDQVRDSCBmbGFnIG1heSBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGhlcmU7IGl0 IG1heSBiZSBlbmFibGVkIGlmCisJICogdGhlIHN0YXRlbWVudCBoYXMgYSBjYXRjaCBibG9jayBi dXQgdGhlIHRyeSBibG9jayBkb2VzIG5vdCB0aHJvdworCSAqIGFuIGVycm9yLgorCSAqLworCisJ RFVLX0RERChEVUtfREREUFJJTlQoIkVOREZJTjogY29tcGxldGlvbiB2YWx1ZT0lIVQsIHR5cGU9 JSFUIiwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgKHRoci0+dmFsc3RhY2tf Ym90dG9tICsgcmVnX2NhdGNoICsgMCksCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFs ICopICh0aHItPnZhbHN0YWNrX2JvdHRvbSArIHJlZ19jYXRjaCArIDEpKSk7CisKKwl0djEgPSB0 aHItPnZhbHN0YWNrX2JvdHRvbSArIHJlZ19jYXRjaCArIDE7ICAvKiB0eXBlICovCisJRFVLX0FT U0VSVChEVUtfVFZBTF9JU19OVU1CRVIodHYxKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJ TlQpCisJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19GQVNUSU5UKHR2MSkpOworCWNvbnRfdHlwZSA9 IChkdWtfc21hbGxfdWludF90KSBEVUtfVFZBTF9HRVRfRkFTVElOVF9VMzIodHYxKTsKKyNlbHNl CisJY29udF90eXBlID0gKGR1a19zbWFsbF91aW50X3QpIERVS19UVkFMX0dFVF9OVU1CRVIodHYx KTsKKyNlbmRpZgorCisJdHYxLS07ICAvKiB2YWx1ZSAqLworCisJc3dpdGNoIChjb250X3R5cGUp IHsKKwljYXNlIERVS19MSl9UWVBFX05PUk1BTDogeworCQlEVUtfREREKERVS19ERERQUklOVCgi RU5ERklOOiBmaW5hbGx5IHBhcnQgZmluaXNoaW5nIHdpdGggJ25vcm1hbCcgKG5vbi1hYnJ1cHQp IGNvbXBsZXRpb24gLT4gIgorCQkgICAgICAgICAgICAgICAgICAgICAiZGlzbWFudGxlIGNhdGNo ZXIsIHJlc3VtZSBleGVjdXRpb24gYWZ0ZXIgRU5ERklOIikpOworCisJCWR1a19odGhyZWFkX2Nh dGNoZXJfdW53aW5kX25vcnoodGhyLCBhY3QpOworCQkvKiBubyBuZWVkIHRvIHVud2luZCBjYWxs c3RhY2sgKi8KKwkJcmV0dXJuIDA7ICAvKiByZXN0YXJ0IGV4ZWN1dGlvbiAqLworCX0KKwljYXNl IERVS19MSl9UWVBFX1JFVFVSTjogeworCQlEVUtfREREKERVS19ERERQUklOVCgiRU5ERklOOiBm aW5hbGx5IHBhcnQgZmluaXNoaW5nIHdpdGggJ3JldHVybicgY29tcGxhdGlvbiAtPiBkaXNtYW50 bGUgIgorCQkgICAgICAgICAgICAgICAgICAgICAiY2F0Y2hlciwgaGFuZGxlIHJldHVybiwgbGou dmFsdWUxPSUhVCIsIHR2MSkpOworCisJCS8qIE5vdCBuZWNlc3NhcnkgdG8gdW53aW5kIGNhdGNo IHN0YWNrOiByZXR1cm4gaGFuZGxpbmcgd2lsbAorCQkgKiBkbyBpdC4gIFRoZSBmaW5hbGx5IGZs YWcgb2YgJ2NhdCcgaXMgbm8gbG9uZ2VyIHNldC4gIFRoZQorCQkgKiBjYXRjaCBmbGFnIG1heSBi ZSBzZXQsIGJ1dCBpdCdzIG5vdCBjaGVja2VkIGJ5IHJldHVybiBoYW5kbGluZy4KKwkJICovCisK KwkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2MSk7CisJCXJldF9yZXN1bHQgPSBkdWtfX2hhbmRsZV9y ZXR1cm4odGhyLCBlbnRyeV9hY3QpOworCQlpZiAocmV0X3Jlc3VsdCA9PSBEVUtfX1JFVEhBTkRf UkVTVEFSVCkgeworCQkJcmV0dXJuIDA7ICAvKiByZXN0YXJ0IGV4ZWN1dGlvbiAqLworCQl9CisJ CURVS19BU1NFUlQocmV0X3Jlc3VsdCA9PSBEVUtfX1JFVEhBTkRfRklOSVNIRUQpOworCisJCURV S19EREQoRFVLX0RERFBSSU5UKCJleGl0aW5nIGV4ZWN1dG9yIGFmdGVyIEVOREZJTiBhbmQgUkVU VVJOIChwc2V1ZG8pIGxvbmdqbXAgdHlwZSIpKTsKKwkJcmV0dXJuIDE7ICAvKiBleGl0IGV4ZWN1 dG9yICovCisJfQorCWNhc2UgRFVLX0xKX1RZUEVfQlJFQUs6CisJY2FzZSBEVUtfTEpfVFlQRV9D T05USU5VRTogeworCQlkdWtfdWludF90IGxhYmVsX2lkOworCQlkdWtfc21hbGxfdWludF90IGxq X3R5cGU7CisKKwkJLyogTm90IG5lY2Vzc2FyeSB0byB1bndpbmQgY2F0Y2ggc3RhY2s6IGJyZWFr L2NvbnRpbnVlCisJCSAqIGhhbmRsaW5nIHdpbGwgZG8gaXQuICBUaGUgZmluYWxseSBmbGFnIG9m ICdjYXQnIGlzCisJCSAqIG5vIGxvbmdlciBzZXQuICBUaGUgY2F0Y2ggZmxhZyBtYXkgYmUgc2V0 LCBidXQgaXQncworCQkgKiBub3QgY2hlY2tlZCBieSBicmVhay9jb250aW51ZSBoYW5kbGluZy4K KwkJICovCisKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19OVU1CRVIodHYxKSk7CisjaWYgZGVm aW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfRkFTVElOVCh0 djEpKTsKKwkJbGFiZWxfaWQgPSAoZHVrX3NtYWxsX3VpbnRfdCkgRFVLX1RWQUxfR0VUX0ZBU1RJ TlRfVTMyKHR2MSk7CisjZWxzZQorCQlsYWJlbF9pZCA9IChkdWtfc21hbGxfdWludF90KSBEVUtf VFZBTF9HRVRfTlVNQkVSKHR2MSk7CisjZW5kaWYKKwkJbGpfdHlwZSA9IGNvbnRfdHlwZTsKKwkJ ZHVrX19oYW5kbGVfYnJlYWtfb3JfY29udGludWUodGhyLCBsYWJlbF9pZCwgbGpfdHlwZSk7CisJ CXJldHVybiAwOyAgLyogcmVzdGFydCBleGVjdXRpb24gKi8KKwl9CisJZGVmYXVsdDogeworCQlE VUtfREREKERVS19ERERQUklOVCgiRU5ERklOOiBmaW5hbGx5IHBhcnQgZmluaXNoaW5nIHdpdGgg YWJydXB0IGNvbXBsZXRpb24sIGxqX3R5cGU9JWxkIC0+ICIKKwkJICAgICAgICAgICAgICAgICAg ICAgImRpc21hbnRsZSBjYXRjaGVyLCByZS10aHJvdyBlcnJvciIsCisJCSAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBjb250X3R5cGUpKTsKKworCQlkdWtfZXJyX3NldHVwX2xqc3RhdGUxKHRo ciwgKGR1a19zbWFsbF91aW50X3QpIGNvbnRfdHlwZSwgdHYxKTsKKwkJLyogTm8gZGVidWdnZXIg VGhyb3cgbm90aWZ5IGNoZWNrIG9uIHB1cnBvc2UgKHJldGhyb3cpLiAqLworCisJCURVS19BU1NF UlQodGhyLT5oZWFwLT5sai5qbXBidWZfcHRyICE9IE5VTEwpOyAgLyogYWx3YXlzIGluIGV4ZWN1 dG9yICovCisJCWR1a19lcnJfbG9uZ2ptcCh0aHIpOworCQlEVUtfVU5SRUFDSEFCTEUoKTsKKwl9 CisJfQorCisJRFVLX1VOUkVBQ0hBQkxFKCk7CisJcmV0dXJuIDA7Cit9CisKK0RVS19MT0NBTCBE VUtfX05PSU5MSU5FX1BFUkYgdm9pZCBkdWtfX2hhbmRsZV9vcF9pbml0ZW51bShkdWtfaHRocmVh ZCAqdGhyLCBkdWtfdWludF9mYXN0MzJfdCBpbnMpIHsKKwlkdWtfc21hbGxfdWludF90IGI7CisJ ZHVrX3NtYWxsX3VpbnRfdCBjOworCisJLyoKKwkgKiAgRW51bWVyYXRpb24gc2VtYW50aWNzIGNv bWUgZnJvbSBmb3ItaW4gc3RhdGVtZW50LCBFNSBTZWN0aW9uIDEyLjYuNC4KKwkgKiAgSWYgY2Fs bGVkIHdpdGggJ251bGwnIG9yICd1bmRlZmluZWQnLCB0aGlzIG9wY29kZSByZXR1cm5zICdudWxs JyBhcworCSAqICB0aGUgZW51bWVyYXRvciwgd2hpY2ggaXMgc3BlY2lhbCBjYXNlZCBpbiBORVhU RU5VTS4gIFRoaXMgc2ltcGxpZmllcworCSAqICB0aGUgY29tcGlsZXIgcGFydAorCSAqLworCisJ LyogQiAtPiByZWdpc3RlciBmb3Igd3JpdGluZyBlbnVtZXJhdG9yIG9iamVjdAorCSAqIEMgLT4g dmFsdWUgdG8gYmUgZW51bWVyYXRlZCAocmVnaXN0ZXIpCisJICovCisJYiA9IERVS19ERUNfQihp bnMpOworCWMgPSBEVUtfREVDX0MoaW5zKTsKKworCWlmIChkdWtfaXNfbnVsbF9vcl91bmRlZmlu ZWQodGhyLCAoZHVrX2lkeF90KSBjKSkgeworCQlkdWtfcHVzaF9udWxsKHRocik7CisJCWR1a19y ZXBsYWNlKHRociwgKGR1a19pZHhfdCkgYik7CisJfSBlbHNlIHsKKwkJZHVrX2R1cCh0aHIsIChk dWtfaWR4X3QpIGMpOworCQlkdWtfdG9fb2JqZWN0KHRociwgLTEpOworCQlkdWtfaG9iamVjdF9l bnVtZXJhdG9yX2NyZWF0ZSh0aHIsIDAgLyplbnVtX2ZsYWdzKi8pOyAgLyogWyAuLi4gdmFsIF0g LS0+IFsgLi4uIGVudW0gXSAqLworCQlkdWtfcmVwbGFjZSh0aHIsIChkdWtfaWR4X3QpIGIpOwor CX0KK30KKworRFVLX0xPQ0FMIERVS19fTk9JTkxJTkVfUEVSRiBkdWtfc21hbGxfdWludF90IGR1 a19faGFuZGxlX29wX25leHRlbnVtKGR1a19odGhyZWFkICp0aHIsIGR1a191aW50X2Zhc3QzMl90 IGlucykgeworCWR1a19zbWFsbF91aW50X3QgYjsKKwlkdWtfc21hbGxfdWludF90IGM7CisJZHVr X3NtYWxsX3VpbnRfdCBwY19za2lwID0gMDsKKworCS8qCisJICogIE5FWFRFTlVNIGNoZWNrcyB3 aGV0aGVyIHRoZSBlbnVtZXJhdG9yIHN0aWxsIGhhcyB1bmVudW1lcmF0ZWQKKwkgKiAga2V5cy4g IElmIHNvLCB0aGUgbmV4dCBrZXkgaXMgbG9hZGVkIHRvIHRoZSB0YXJnZXQgcmVnaXN0ZXIKKwkg KiAgYW5kIHRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHNraXBwZWQuICBPdGhlcndpc2UgdGhlIG5l eHQgaW5zdHJ1Y3Rpb24KKwkgKiAgd2lsbCBiZSBleGVjdXRlZCwganVtcGluZyBvdXQgb2YgdGhl IGVudW1lcmF0aW9uIGxvb3AuCisJICovCisKKwkvKiBCIC0+IHRhcmdldCByZWdpc3RlciBmb3Ig bmV4dCBrZXkKKwkgKiBDIC0+IGVudW0gcmVnaXN0ZXIKKwkgKi8KKwliID0gRFVLX0RFQ19CKGlu cyk7CisJYyA9IERVS19ERUNfQyhpbnMpOworCisJRFVLX0RERChEVUtfREREUFJJTlQoIk5FWFRF TlVNOiBiLT4lIVQsIGMtPiUhVCIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICop IGR1a19nZXRfdHZhbCh0aHIsIChkdWtfaWR4X3QpIGIpLAorCSAgICAgICAgICAgICAgICAgICAg IChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAoZHVrX2lkeF90KSBjKSkpOworCisJaWYg KGR1a19pc19vYmplY3QodGhyLCAoZHVrX2lkeF90KSBjKSkgeworCQkvKiBYWFg6IGFzc2VydCAn YycgaXMgYW4gZW51bWVyYXRvciAqLworCQlkdWtfZHVwKHRociwgKGR1a19pZHhfdCkgYyk7CisJ CWlmIChkdWtfaG9iamVjdF9lbnVtZXJhdG9yX25leHQodGhyLCAwIC8qZ2V0X3ZhbHVlKi8pKSB7 CisJCQkvKiBbIC4uLiBlbnVtIF0gLT4gWyAuLi4gbmV4dF9rZXkgXSAqLworCQkJRFVLX0RERChE VUtfREREUFJJTlQoImVudW0gYWN0aXZlLCBuZXh0IGtleSBpcyAlIVQsIHNraXAganVtcCBzbG90 ICIsCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRo ciwgLTEpKSk7CisJCQlwY19za2lwID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFsgLi4uIGVudW0g XSAtPiBbIC4uLiBdICovCisJCQlEVUtfREREKERVS19ERERQUklOVCgiZW51bSBmaW5pc2hlZCwg ZXhlY3V0ZSBqdW1wIHNsb3QiKSk7CisJCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX1VOREVGSU5F RCh0aHItPnZhbHN0YWNrX3RvcCkpOyAgLyogdmFsc3RhY2sgcG9saWN5ICovCisJCQl0aHItPnZh bHN0YWNrX3RvcCsrOworCQl9CisJCWR1a19yZXBsYWNlKHRociwgKGR1a19pZHhfdCkgYik7CisJ fSBlbHNlIHsKKwkJLyogJ251bGwnIGVudW1lcmF0b3IgY2FzZSAtPiBiZWhhdmUgYXMgd2l0aCBh biBlbXB0eSBlbnVtZXJhdG9yICovCisJCURVS19BU1NFUlQoZHVrX2lzX251bGwodGhyLCAoZHVr X2lkeF90KSBjKSk7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJlbnVtIGlzIG51bGwsIGV4ZWN1 dGUganVtcCBzbG90IikpOworCX0KKworCXJldHVybiBwY19za2lwOworfQorCisvKgorICogIENh bGwgaGFuZGxpbmcgaGVscGVycy4KKyAqLworCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2V4 ZWN1dG9yX2hhbmRsZV9jYWxsKGR1a19odGhyZWFkICp0aHIsIGR1a19pZHhfdCBpZHgsIGR1a19p ZHhfdCBuYXJncywgZHVrX3NtYWxsX3VpbnRfdCBjYWxsX2ZsYWdzKSB7CisJZHVrX2Jvb2xfdCBy YzsKKworCWR1a19zZXRfdG9wX3Vuc2FmZSh0aHIsIChkdWtfaWR4X3QpIChpZHggKyBuYXJncyAr IDIpKTsgICAvKiBbIC4uLiBmdW5jIHRoaXMgYXJnMSAuLi4gYXJnTiBdICovCisKKwkvKiBBdHRl bXB0IGFuIEVjbWEtdG8tRWNtYSBjYWxsIHNldHVwLiAgSWYgdGhlIGNhbGwKKwkgKiB0YXJnZXQg aXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIFJlZmxlY3QuY29uc3RydWN0KCksCisJICogdGhl IGNhbGwgbWF5IGNoYW5nZSBpbnRvIGEgY29uc3RydWN0b3IgY2FsbCBvbiB0aGUgZmx5LgorCSAq LworCXJjID0gKGR1a19ib29sX3QpIGR1a19oYW5kbGVfY2FsbF91bnByb3RlY3RlZCh0aHIsIGlk eCwgY2FsbF9mbGFncyk7CisJaWYgKHJjICE9IDApIHsKKwkJLyogRWNtYS10by1lY21hIGNhbGwg cG9zc2libGUsIG1heSBvciBtYXkgbm90CisJCSAqIGJlIGEgdGFpbCBjYWxsLiAgQXZvaWQgQyBy ZWN1cnNpb24gYnkKKwkJICogcmV1c2luZyBjdXJyZW50IGV4ZWN1dG9yIGluc3RhbmNlLgorCQkg Ki8KKwkJRFVLX0RERChEVUtfREREUFJJTlQoImVjbWEtdG8tZWNtYSBjYWxsIHNldHVwIHBvc3Np YmxlLCByZXN0YXJ0IGV4ZWN1dGlvbiIpKTsKKwkJLyogY3Vycl9wYyBzeW5jZWQgYnkgZHVrX2hh bmRsZV9jYWxsX3VucHJvdGVjdGVkKCkgKi8KKwkJRFVLX0FTU0VSVCh0aHItPnB0cl9jdXJyX3Bj ID09IE5VTEwpOworCQlyZXR1cm4gcmM7CisJfSBlbHNlIHsKKwkJLyogQ2FsbCB3YXMgaGFuZGxl ZCBpbmxpbmUuICovCisJfQorCURVS19BU1NFUlQodGhyLT5wdHJfY3Vycl9wYyAhPSBOVUxMKTsK KwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiAgRUNNQVNjcmlwdCBieXRlY29kZSBleGVjdXRvci4K KyAqCisgKiAgUmVzdW1lIGV4ZWN1dGlvbiBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkIGZyb20gaXRz IGN1cnJlbnQgYWN0aXZhdGlvbi4KKyAqICBSZXR1cm5zIHdoZW4gZXhlY3V0aW9uIHdvdWxkIHJl dHVybiBmcm9tIHRoZSBlbnRyeSBsZXZlbCBhY3RpdmF0aW9uLAorICogIGxlYXZpbmcgYSBzaW5n bGUgcmV0dXJuIHZhbHVlIG9uIHRvcCBvZiB0aGUgc3RhY2suICBGdW5jdGlvbiBjYWxscworICog IGFuZCB0aHJlYWQgcmVzdW1wdGlvbnMgYXJlIGhhbmRsZWQgaW50ZXJuYWxseS4gIElmIGFuIGVy cm9yIG9jY3VycywKKyAqICBhIGxvbmdqbXAoKSB3aXRoIHR5cGUgRFVLX0xKX1RZUEVfVEhST1cg aXMgY2FsbGVkIG9uIHRoZSBlbnRyeSBsZXZlbAorICogIHNldGptcCgpIGptcGJ1Zi4KKyAqCisg KiAgRUNNQVNjcmlwdCBmdW5jdGlvbiBjYWxscyBhbmQgY29yb3V0aW5lIHJlc3VtcHRpb25zIGFy ZSBoYW5kbGVkCisgKiAgaW50ZXJuYWxseSAoYnkgdGhlIG91dGVyIGV4ZWN1dG9yIGZ1bmN0aW9u KSB3aXRob3V0IHJlY3Vyc2l2ZSBDIGNhbGxzLgorICogIE90aGVyIGZ1bmN0aW9uIGNhbGxzIGFy ZSBoYW5kbGVkIHVzaW5nIGR1a19oYW5kbGVfY2FsbCgpLCBpbmNyZWFzaW5nCisgKiAgQyByZWN1 cnNpb24gZGVwdGguCisgKgorICogIEFicnVwdCBjb21wbGV0aW9ucyAoPSBsb25nIGNvbnRyb2wg dHJhbmZlcnMpIGFyZSBoYW5kbGVkIGVpdGhlcgorICogIGRpcmVjdGx5IGJ5IHJlY29uZmlndXJp bmcgcmVsZXZhbnQgc3RhY2tzIGFuZCByZXN0YXJ0aW5nIGV4ZWN1dGlvbiwKKyAqICBvciB2aWEg YSBsb25nam1wLiAgTG9uZ2ptcC1mcmVlIGhhbmRsaW5nIGlzIHByZWZlcmFibGUgZm9yIHBlcmZv cm1hbmNlCisgKiAgKGVzcGVjaWFsbHkgRW1zY3JpcHRlbiBwZXJmb3JtYW5jZSksIGFuZCBpcyB1 c2VkIGZvcjogYnJlYWssIGNvbnRpbnVlLAorICogIGFuZCByZXR1cm4uCisgKgorICogIEZvciBt b3JlIGRldGFpbGVkIG5vdGVzLCBzZWUgZG9jL2V4ZWN1dGlvbi5yc3QuCisgKgorICogIEFsc28g c2VlIGRvYy9jb2RlLWlzc3Vlcy5yc3QgZm9yIGRpc2N1c3Npb24gb2Ygc2V0am1wKCksIGxvbmdq bXAoKSwKKyAqICBhbmQgdm9sYXRpbGUuCisgKi8KKworLyogUHJlc2VuY2Ugb2YgJ2Z1bicgaXMg Y29uZmlnIGJhc2VkLCB0aGVyZSdzIGEgbWFyZ2luYWwgcGVyZm9ybWFuY2UKKyAqIGRpZmZlcmVu Y2UgYW5kIHRoZSBiZXN0IG9wdGlvbiBpcyBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorICovCisj aWYgZGVmaW5lZChEVUtfVVNFX0VYRUNfRlVOX0xPQ0FMKQorI2RlZmluZSBEVUtfX0ZVTigpICAg ICAgICAgIGZ1bgorI2Vsc2UKKyNkZWZpbmUgRFVLX19GVU4oKSAgICAgICAgICAoKGR1a19oY29t cGZ1bmMgKikgRFVLX0FDVF9HRVRfRlVOQygodGhyKS0+Y2FsbHN0YWNrX2N1cnIpKQorI2VuZGlm CisKKy8qIFN0cmljdCBmbGFnLiAqLworI2RlZmluZSBEVUtfX1NUUklDVCgpICAgICAgICgoZHVr X3NtYWxsX3VpbnRfdCkgRFVLX0hPQkpFQ1RfSEFTX1NUUklDVCgoZHVrX2hvYmplY3QgKikgRFVL X19GVU4oKSkpCisKKy8qIFJlZy9jb25zdCBhY2Nlc3MgbWFjcm9zOiB0aGVzZSBhcmUgdmVyeSBm b290cHJpbnQgYW5kIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZQorICogc28gbW9kaWZ5IHdpdGggY2Fy ZS4gIEFyZ3VtZW50cyBhcmUgc29tZXRpbWVzIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcyB3aGlj aAorICogaXMgbm90IGlkZWFsLgorICovCisjZGVmaW5lIERVS19fUkVHKHgpICAgICAgICAgKCoo dGhyLT52YWxzdGFja19ib3R0b20gKyAoeCkpKQorI2RlZmluZSBEVUtfX1JFR1AoeCkgICAgICAg ICh0aHItPnZhbHN0YWNrX2JvdHRvbSArICh4KSkKKyNkZWZpbmUgRFVLX19DT05TVCh4KSAgICAg ICAoKihjb25zdHMgKyAoeCkpKQorI2RlZmluZSBEVUtfX0NPTlNUUCh4KSAgICAgIChjb25zdHMg KyAoeCkpCisKKy8qIFJlZy9jb25zdCBhY2Nlc3MgbWFjcm9zIHdoaWNoIHRha2UgdGhlIDMyLWJp dCBpbnN0cnVjdGlvbiBhbmQgYXZvaWQgYW4KKyAqIGV4cGxpY2l0IGZpZWxkIGRlY29kaW5nIHN0 ZXAgYnkgdXNpbmcgc2hpZnRzIGFuZCBtYXNrcy4gIFRoZXNlIG11c3QgYmUKKyAqIGtlcHQgaW4g c3luYyB3aXRoIGR1a19qc19ieXRlY29kZS5oLiAgVGhlIHNoaWZ0L21hc2sgdmFsdWVzIGFyZSBj aG9zZW4KKyAqIHNvIHRoYXQgJ2lucycgY2FuIGJlIHNoaWZ0ZWQgYW5kIG1hc2tlZCBhbmQgdXNl ZCBhcyBhIC1ieXRlLSBvZmZzZXQKKyAqIGluc3RlYWQgb2YgYSBkdWtfdHZhbCBvZmZzZXQgd2hp Y2ggbmVlZHMgZnVydGhlciBzaGlmdGluZyAod2hpY2ggaXMgYW4KKyAqIGlzc3VlIG9uIHNvbWUs IGJ1dCBub3QgYWxsLCBDUFVzKS4KKyAqLworI2RlZmluZSBEVUtfX1JDQklUX0IgICAgICAgICAg IERVS19CQ19SRUdDT05TVF9CCisjZGVmaW5lIERVS19fUkNCSVRfQyAgICAgICAgICAgRFVLX0JD X1JFR0NPTlNUX0MKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19SRUdDT05TVF9PUFRJTUlaRSkK KyNpZiBkZWZpbmVkKERVS19VU0VfUEFDS0VEX1RWQUwpCisjZGVmaW5lIERVS19fVFZBTF9TSElG VCAgICAgICAgMyAgLyogc2l6ZW9mKGR1a190dmFsKSA9PSA4ICovCisjZWxzZQorI2RlZmluZSBE VUtfX1RWQUxfU0hJRlQgICAgICAgIDQgIC8qIHNpemVvZihkdWtfdHZhbCkgPT0gMTY7IG5vdCBh bHdheXMgdGhlIGNhc2Ugc28gYWxzbyBhc3NlcnRlZCBmb3IgKi8KKyNlbmRpZgorI2RlZmluZSBE VUtfX1NISUZUX0EgICAgICAgICAgIChEVUtfQkNfU0hJRlRfQSAtIERVS19fVFZBTF9TSElGVCkK KyNkZWZpbmUgRFVLX19TSElGVF9CICAgICAgICAgICAoRFVLX0JDX1NISUZUX0IgLSBEVUtfX1RW QUxfU0hJRlQpCisjZGVmaW5lIERVS19fU0hJRlRfQyAgICAgICAgICAgKERVS19CQ19TSElGVF9D IC0gRFVLX19UVkFMX1NISUZUKQorI2RlZmluZSBEVUtfX1NISUZUX0JDICAgICAgICAgIChEVUtf QkNfU0hJRlRfQkMgLSBEVUtfX1RWQUxfU0hJRlQpCisjZGVmaW5lIERVS19fTUFTS19BICAgICAg ICAgICAgKERVS19CQ19VTlNISUZURURfTUFTS19BIDw8IERVS19fVFZBTF9TSElGVCkKKyNkZWZp bmUgRFVLX19NQVNLX0IgICAgICAgICAgICAoRFVLX0JDX1VOU0hJRlRFRF9NQVNLX0IgPDwgRFVL X19UVkFMX1NISUZUKQorI2RlZmluZSBEVUtfX01BU0tfQyAgICAgICAgICAgIChEVUtfQkNfVU5T SElGVEVEX01BU0tfQyA8PCBEVUtfX1RWQUxfU0hJRlQpCisjZGVmaW5lIERVS19fTUFTS19CQyAg ICAgICAgICAgKERVS19CQ19VTlNISUZURURfTUFTS19CQyA8PCBEVUtfX1RWQUxfU0hJRlQpCisj ZGVmaW5lIERVS19fQllURU9GRl9BKGlucykgICAgKCgoaW5zKSA+PiBEVUtfX1NISUZUX0EpICYg RFVLX19NQVNLX0EpCisjZGVmaW5lIERVS19fQllURU9GRl9CKGlucykgICAgKCgoaW5zKSA+PiBE VUtfX1NISUZUX0IpICYgRFVLX19NQVNLX0IpCisjZGVmaW5lIERVS19fQllURU9GRl9DKGlucykg ICAgKCgoaW5zKSA+PiBEVUtfX1NISUZUX0MpICYgRFVLX19NQVNLX0MpCisjZGVmaW5lIERVS19f QllURU9GRl9CQyhpbnMpICAgKCgoaW5zKSA+PiBEVUtfX1NISUZUX0JDKSAmIERVS19fTUFTS19C QykKKworI2RlZmluZSBEVUtfX1JFR1BfQShpbnMpICAgICAgICgoZHVrX3R2YWwgKikgKHZvaWQg KikgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX2JvdHRvbSArIERVS19fQllURU9GRl9B KChpbnMpKSkpCisjZGVmaW5lIERVS19fUkVHUF9CKGlucykgICAgICAgKChkdWtfdHZhbCAqKSAo dm9pZCAqKSAoKGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2tfYm90dG9tICsgRFVLX19CWVRF T0ZGX0IoKGlucykpKSkKKyNkZWZpbmUgRFVLX19SRUdQX0MoaW5zKSAgICAgICAoKGR1a190dmFs ICopICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgdGhyLT52YWxzdGFja19ib3R0b20gKyBEVUtf X0JZVEVPRkZfQygoaW5zKSkpKQorI2RlZmluZSBEVUtfX1JFR1BfQkMoaW5zKSAgICAgICgoZHVr X3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX2JvdHRvbSAr IERVS19fQllURU9GRl9CQygoaW5zKSkpKQorI2RlZmluZSBEVUtfX0NPTlNUUF9BKGlucykgICAg ICgoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSBjb25zdHMgKyBEVUtfX0JZ VEVPRkZfQSgoaW5zKSkpKQorI2RlZmluZSBEVUtfX0NPTlNUUF9CKGlucykgICAgICgoZHVrX3R2 YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSBjb25zdHMgKyBEVUtfX0JZVEVPRkZfQigo aW5zKSkpKQorI2RlZmluZSBEVUtfX0NPTlNUUF9DKGlucykgICAgICgoZHVrX3R2YWwgKikgKHZv aWQgKikgKChkdWtfdWludDhfdCAqKSBjb25zdHMgKyBEVUtfX0JZVEVPRkZfQygoaW5zKSkpKQor I2RlZmluZSBEVUtfX0NPTlNUUF9CQyhpbnMpICAgICgoZHVrX3R2YWwgKikgKHZvaWQgKikgKChk dWtfdWludDhfdCAqKSBjb25zdHMgKyBEVUtfX0JZVEVPRkZfQkMoKGlucykpKSkKKyNkZWZpbmUg RFVLX19SRUdDT05TVFBfQihpbnMpICAoKGR1a190dmFsICopICh2b2lkICopICgoZHVrX3VpbnQ4 X3QgKikgKCgoaW5zKSAmIERVS19fUkNCSVRfQikgPyBjb25zdHMgOiB0aHItPnZhbHN0YWNrX2Jv dHRvbSkgKyBEVUtfX0JZVEVPRkZfQigoaW5zKSkpKQorI2RlZmluZSBEVUtfX1JFR0NPTlNUUF9D KGlucykgICgoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSAoKChpbnMpICYg RFVLX19SQ0JJVF9DKSA/IGNvbnN0cyA6IHRoci0+dmFsc3RhY2tfYm90dG9tKSArIERVS19fQllU RU9GRl9DKChpbnMpKSkpCisjZWxzZSAgLyogRFVLX1VTRV9FWEVDX1JFR0NPTlNUX09QVElNSVpF ICovCisvKiBTYWZlIGFsdGVybmF0aXZlcywgbm8gYXNzdW1wdGlvbiBhYm91dCBkdWtfdHZhbCBz aXplLiAqLworI2RlZmluZSBEVUtfX1JFR1BfQShpbnMpICAgICAgIERVS19fUkVHUChEVUtfREVD X0EoKGlucykpKQorI2RlZmluZSBEVUtfX1JFR1BfQihpbnMpICAgICAgIERVS19fUkVHUChEVUtf REVDX0IoKGlucykpKQorI2RlZmluZSBEVUtfX1JFR1BfQyhpbnMpICAgICAgIERVS19fUkVHUChE VUtfREVDX0MoKGlucykpKQorI2RlZmluZSBEVUtfX1JFR1BfQkMoaW5zKSAgICAgIERVS19fUkVH UChEVUtfREVDX0JDKChpbnMpKSkKKyNkZWZpbmUgRFVLX19DT05TVFBfQShpbnMpICAgICBEVUtf X0NPTlNUUChEVUtfREVDX0EoKGlucykpKQorI2RlZmluZSBEVUtfX0NPTlNUUF9CKGlucykgICAg IERVS19fQ09OU1RQKERVS19ERUNfQigoaW5zKSkpCisjZGVmaW5lIERVS19fQ09OU1RQX0MoaW5z KSAgICAgRFVLX19DT05TVFAoRFVLX0RFQ19DKChpbnMpKSkKKyNkZWZpbmUgRFVLX19DT05TVFBf QkMoaW5zKSAgICBEVUtfX0NPTlNUUChEVUtfREVDX0JDKChpbnMpKSkKKyNkZWZpbmUgRFVLX19S RUdDT05TVFBfQihpbnMpICAoKCgoaW5zKSAmIERVS19fUkNCSVRfQikgPyBjb25zdHMgOiB0aHIt PnZhbHN0YWNrX2JvdHRvbSkgKyBEVUtfREVDX0IoKGlucykpKQorI2RlZmluZSBEVUtfX1JFR0NP TlNUUF9DKGlucykgICgoKChpbnMpICYgRFVLX19SQ0JJVF9DKSA/IGNvbnN0cyA6IHRoci0+dmFs c3RhY2tfYm90dG9tKSArIERVS19ERUNfQygoaW5zKSkpCisjZW5kaWYgIC8qIERVS19VU0VfRVhF Q19SRUdDT05TVF9PUFRJTUlaRSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVhF Q1VUT1JfRVJST1JTKQorI2RlZmluZSBEVUtfX0lOVEVSTkFMX0VSUk9SKG1zZykgIGRvIHsgXAor CQlEVUtfRVJST1JfRVJST1IodGhyLCAobXNnKSk7IFwKKwkJRFVLX1dPX05PUkVUVVJOKHJldHVy bjspOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERVS19fSU5URVJOQUxfRVJST1Io bXNnKSAgZG8geyBcCisJCWdvdG8gaW50ZXJuYWxfZXJyb3I7IFwKKwl9IHdoaWxlICgwKQorI2Vu ZGlmCisKKyNkZWZpbmUgRFVLX19TWU5DX0NVUlJfUEMoKSAgZG8geyBcCisJCWR1a19hY3RpdmF0 aW9uICpkdWtfX2FjdDsgXAorCQlkdWtfX2FjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7IFwKKwkJ ZHVrX19hY3QtPmN1cnJfcGMgPSBjdXJyX3BjOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFVL X19TWU5DX0FORF9OVUxMX0NVUlJfUEMoKSAgZG8geyBcCisJCWR1a19hY3RpdmF0aW9uICpkdWtf X2FjdDsgXAorCQlkdWtfX2FjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7IFwKKwkJZHVrX19hY3Qt PmN1cnJfcGMgPSBjdXJyX3BjOyBcCisJCXRoci0+cHRyX2N1cnJfcGMgPSBOVUxMOyBcCisJfSB3 aGlsZSAoMCkKKworI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQorI2RlZmlu ZSBEVUtfX0xPT0tVUF9JTkRJUkVDVChpZHgpIGRvIHsgXAorCQkoaWR4KSA9IChkdWtfdWludF9m YXN0X3QpIGR1a19nZXRfdWludCh0aHIsIChkdWtfaWR4X3QpIChpZHgpKTsgXAorCX0gd2hpbGUg KDApCisjZWxpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKyNkZWZpbmUgRFVLX19MT09LVVBf SU5ESVJFQ1QoaWR4KSBkbyB7IFwKKwkJZHVrX3R2YWwgKnR2X2luZDsgXAorCQl0dl9pbmQgPSBE VUtfX1JFR1AoKGlkeCkpOyBcCisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2X2lu ZCkpOyBcCisJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfRkFTVElOVCh0dl9pbmQpKTsgIC8qIGNv bXBpbGVyIGd1YXJhbnRlZXMgKi8gXAorCQkoaWR4KSA9IChkdWtfdWludF9mYXN0X3QpIERVS19U VkFMX0dFVF9GQVNUSU5UX1UzMih0dl9pbmQpOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVm aW5lIERVS19fTE9PS1VQX0lORElSRUNUKGlkeCkgZG8geyBcCisJCWR1a190dmFsICp0dl9pbmQ7 IFwKKwkJdHZfaW5kID0gRFVLX19SRUdQKGlkeCk7IFwKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9J U19OVU1CRVIodHZfaW5kKSk7IFwKKwkJaWR4ID0gKGR1a191aW50X2Zhc3RfdCkgRFVLX1RWQUxf R0VUX05VTUJFUih0dl9pbmQpOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCitEVUtfTE9DQUwg dm9pZCBkdWtfX2hhbmRsZV9leGVjdXRvcl9lcnJvcihkdWtfaGVhcCAqaGVhcCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19hY3RpdmF0aW9uICplbnRyeV9h Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaW50X3Qg ZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfam1wYnVmICplbnRyeV9qbXBidWZfcHRyKSB7CisJZHVrX3NtYWxs X3VpbnRfdCBsal9yZXQ7CisKKwkvKiBMb25nam1wIGNhbGxlcnMgYXJlIHJlcXVpcmVkIHRvIHN5 bmMtYW5kLW51bGwgdGhyLT5wdHJfY3Vycl9wYworCSAqIGJlZm9yZSBsb25nam1wLgorCSAqLwor CURVS19BU1NFUlQoaGVhcC0+Y3Vycl90aHJlYWQgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChoZWFw LT5jdXJyX3RocmVhZC0+cHRyX2N1cnJfcGMgPT0gTlVMTCk7CisKKwkvKiBYWFg6IHNpZ25hbGxp bmcgdGhlIG5lZWQgdG8gc2hyaW5rIGNoZWNrIChvbmx5IGlmIHVud291bmQpICovCisKKwkvKiBN dXN0IGJlIHJlc3RvcmVkIGhlcmUgdG8gaGFuZGxlIGUuZy4geWllbGRzIHByb3Blcmx5LiAqLwor CWhlYXAtPmNhbGxfcmVjdXJzaW9uX2RlcHRoID0gZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGg7 CisKKwkvKiBTd2l0Y2ggdG8gY2FsbGVyJ3Mgc2V0am1wKCkgY2F0Y2hlciBzbyB0aGF0IGlmIGFu IGVycm9yIG9jY3VycworCSAqIGR1cmluZyBlcnJvciBoYW5kbGluZywgaXQgaXMgYWx3YXlzIHBy b3BhZ2F0ZWQgb3V0d2FyZHMgaW5zdGVhZAorCSAqIG9mIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9v cCBpbiBvdXIgb3duIGhhbmRsZXIuCisJICovCisJaGVhcC0+bGouam1wYnVmX3B0ciA9IChkdWtf am1wYnVmICopIGVudHJ5X2ptcGJ1Zl9wdHI7CisKKwlsal9yZXQgPSBkdWtfX2hhbmRsZV9sb25n am1wKGhlYXAtPmN1cnJfdGhyZWFkLCBlbnRyeV9hY3QpOworCisJLyogRXJyb3IgaGFuZGxpbmcg Y29tcGxldGUsIHJlbW92ZSBzaWRlIGVmZmVjdCBwcm90ZWN0aW9ucy4KKwkgKi8KKyNpZiBkZWZp bmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwlEVUtfQVNTRVJUKGhlYXAtPmVycm9yX25vdF9hbGxv d2VkID09IDEpOworCWhlYXAtPmVycm9yX25vdF9hbGxvd2VkID0gMDsKKyNlbmRpZgorCURVS19B U1NFUlQoaGVhcC0+cGZfcHJldmVudF9jb3VudCA+IDApOworCWhlYXAtPnBmX3ByZXZlbnRfY291 bnQtLTsKKwlEVUtfREQoRFVLX0REUFJJTlQoImV4ZWN1dG9yIGVycm9yIGhhbmRsZWQsIHBmX3By ZXZlbnRfY291bnQgdXBkYXRlZCB0byAlbGQiLCAobG9uZykgaGVhcC0+cGZfcHJldmVudF9jb3Vu dCkpOworCisJaWYgKGxqX3JldCA9PSBEVUtfX0xPTkdKTVBfUkVTVEFSVCkgeworCQkvKiBSZXN0 YXJ0IGJ5dGVjb2RlIGV4ZWN1dGlvbiwgcG9zc2libHkgd2l0aCBhIGNoYW5nZWQgdGhyZWFkLiAq LworCQlEVUtfUkVGWkVST19DSEVDS19TTE9XKGhlYXAtPmN1cnJfdGhyZWFkKTsKKwl9IGVsc2Ug eworCQkvKiBJZiBhbiBlcnJvciBpcyBwcm9wYWdhdGVkLCBkb24ndCBydW4gcmVmemVybyBjaGVj a3MgaGVyZS4KKwkJICogVGhlIG5leHQgY2F0Y2hlciB3aWxsIGRlYWwgd2l0aCB0aGF0LiAgUGZf cHJldmVudF9jb3VudAorCQkgKiB3aWxsIGJlIHJlLWJ1bXBlZCBieSB0aGUgbG9uZ2ptcC4KKwkJ ICovCisKKwkJRFVLX0FTU0VSVChsal9yZXQgPT0gRFVLX19MT05HSk1QX1JFVEhST1cpOyAgLyog UmV0aHJvdyBlcnJvciB0byBjYWxsaW5nIHN0YXRlLiAqLworCQlEVUtfQVNTRVJUKGhlYXAtPmxq LmptcGJ1Zl9wdHIgPT0gZW50cnlfam1wYnVmX3B0cik7ICAvKiBMb25nam1wIGhhbmRsaW5nIGhh cyByZXN0b3JlZCBqbXBidWZfcHRyLiAqLworCisJCS8qIFRocmVhZCBtYXkgaGF2ZSBjaGFuZ2Vk LCBlLmcuIFlJRUxEIGNvbnZlcnRlZCB0byBUSFJPVy4gKi8KKwkJZHVrX2Vycl9sb25nam1wKGhl YXAtPmN1cnJfdGhyZWFkKTsKKwkJRFVLX1VOUkVBQ0hBQkxFKCk7CisJfQorfQorCisvKiBPdXRl ciBleGVjdXRvciB3aXRoIHNldGptcC9sb25nam1wIGhhbmRsaW5nLiAqLworRFVLX0lOVEVSTkFM IHZvaWQgZHVrX2pzX2V4ZWN1dGVfYnl0ZWNvZGUoZHVrX2h0aHJlYWQgKmV4ZWNfdGhyKSB7CisJ LyogRW50cnkgbGV2ZWwgaW5mby4gKi8KKwlkdWtfaHRocmVhZCAqZW50cnlfdGhyZWFkOworCWR1 a19hY3RpdmF0aW9uICplbnRyeV9hY3Q7CisJZHVrX2ludF90IGVudHJ5X2NhbGxfcmVjdXJzaW9u X2RlcHRoOworCWR1a19qbXBidWYgKmVudHJ5X2ptcGJ1Zl9wdHI7CisJZHVrX2ptcGJ1ZiBvdXJf am1wYnVmOworCWR1a19oZWFwICpoZWFwOworCisJRFVLX0FTU0VSVChleGVjX3RociAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKGV4ZWNfdGhyLT5oZWFwICE9IE5VTEwpOworCURVS19BU1NFUlQoZXhl Y190aHItPmhlYXAtPmN1cnJfdGhyZWFkICE9IE5VTEwpOworCURVS19BU1NFUlRfUkVGQ09VTlRf Tk9OWkVST19IRUFQSERSKChkdWtfaGVhcGhkciAqKSBleGVjX3Rocik7CisJRFVLX0FTU0VSVChl eGVjX3Roci0+Y2FsbHN0YWNrX3RvcCA+PSAxKTsgIC8qIGF0IGxlYXN0IG9uZSBhY3RpdmF0aW9u LCBvdXJzICovCisJRFVLX0FTU0VSVChleGVjX3Roci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCk7 CisJRFVLX0FTU0VSVChEVUtfQUNUX0dFVF9GVU5DKGV4ZWNfdGhyLT5jYWxsc3RhY2tfY3Vycikg IT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DT01QRlVOQyhEVUtfQUNUX0dF VF9GVU5DKGV4ZWNfdGhyLT5jYWxsc3RhY2tfY3VycikpKTsKKworCURVS19HQ19UT1JUVVJFKGV4 ZWNfdGhyLT5oZWFwKTsKKworCWVudHJ5X3RocmVhZCA9IGV4ZWNfdGhyOworCWhlYXAgPSBlbnRy eV90aHJlYWQtPmhlYXA7CisJZW50cnlfYWN0ID0gZW50cnlfdGhyZWFkLT5jYWxsc3RhY2tfY3Vy cjsKKwlEVUtfQVNTRVJUKGVudHJ5X2FjdCAhPSBOVUxMKTsKKwllbnRyeV9jYWxsX3JlY3Vyc2lv bl9kZXB0aCA9IGVudHJ5X3RocmVhZC0+aGVhcC0+Y2FsbF9yZWN1cnNpb25fZGVwdGg7CisJZW50 cnlfam1wYnVmX3B0ciA9IGVudHJ5X3RocmVhZC0+aGVhcC0+bGouam1wYnVmX3B0cjsKKworCS8q CisJICogIE5vdGU6IHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB0aGUgc2V0am1wKCkgY2F0Y2hw b2ludCBpcworCSAqICBub3QgcmUtZW50cmFudCAobG9uZ2ptcCgpIGNhbm5vdCBiZSBjYWxsZWQg bW9yZSB0aGFuIG9uY2UKKwkgKiAgZm9yIGEgc2luZ2xlIHNldGptcCgpKS4KKwkgKgorCSAqICBT ZWUgZG9jL2NvZGUtaXNzdWVzLnJzdCBmb3Igbm90ZXMgb24gdmFyaWFibGUgYXNzaWdubWVudAor CSAqICBiZWZvcmUgYW5kIGFmdGVyIHNldGptcCgpLgorCSAqLworCisJZm9yICg7OykgeworCQlo ZWFwLT5sai5qbXBidWZfcHRyID0gJm91cl9qbXBidWY7CisJCURVS19BU1NFUlQoaGVhcC0+bGou am1wYnVmX3B0ciAhPSBOVUxMKTsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9DUFBfRVhDRVBUSU9O UykKKwkJdHJ5IHsKKyNlbHNlCisJCURVS19BU1NFUlQoaGVhcC0+bGouam1wYnVmX3B0ciA9PSAm b3VyX2ptcGJ1Zik7CisJCWlmIChEVUtfU0VUSk1QKG91cl9qbXBidWYuamIpID09IDApIHsKKyNl bmRpZgorCQkJLyogRXhlY3V0ZSBieXRlY29kZSB1bnRpbCByZXR1cm5lZCBvciBsb25nam1wKCku ICovCisJCQlkdWtfX2pzX2V4ZWN1dGVfYnl0ZWNvZGVfaW5uZXIoZW50cnlfdGhyZWFkLCBlbnRy eV9hY3QpOworCisJCQkvKiBTdWNjZXNzZnVsIHJldHVybjogcmVzdG9yZSBqbXBidWYgYW5kIHJl dHVybiB0byBjYWxsZXIuICovCisJCQloZWFwLT5sai5qbXBidWZfcHRyID0gZW50cnlfam1wYnVm X3B0cjsKKworCQkJcmV0dXJuOworI2lmIGRlZmluZWQoRFVLX1VTRV9DUFBfRVhDRVBUSU9OUykK KwkJfSBjYXRjaCAoZHVrX2ludGVybmFsX2V4Y2VwdGlvbiAmZXhjKSB7CisjZWxzZQorCQl9IGVs c2UgeworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0NQUF9FWENFUFRJT05TKQorCQkJRFVL X1VOUkVGKGV4Yyk7CisjZW5kaWYKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJsb25nam1wIGNh dWdodCBieSBieXRlY29kZSBleGVjdXRvciIpKTsKKwkJCURVS19TVEFUU19JTkMoZXhlY190aHIt PmhlYXAsIHN0YXRzX2V4ZWNfdGhyb3cpOworCisJCQlkdWtfX2hhbmRsZV9leGVjdXRvcl9lcnJv cihoZWFwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfYWN0LAorCQkJICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGgsCisJCQkg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9qbXBidWZfcHRyKTsKKwkJfQorI2lmIGRl ZmluZWQoRFVLX1VTRV9DUFBfRVhDRVBUSU9OUykKKwkJY2F0Y2ggKGR1a19mYXRhbF9leGNlcHRp b24gJmV4YykgeworCQkJRFVLX0QoRFVLX0RQUklOVCgicmV0aHJvdyBkdWtfZmF0YWxfZXhjZXB0 aW9uIikpOworCQkJdGhyb3c7CisJCX0gY2F0Y2ggKHN0ZDo6ZXhjZXB0aW9uICZleGMpIHsKKwkJ CWNvbnN0IGNoYXIgKndoYXQgPSBleGMud2hhdCgpOworCQkJaWYgKCF3aGF0KSB7CisJCQkJd2hh dCA9ICJ1bmtub3duIjsKKwkJCX0KKwkJCURVS19EKERVS19EUFJJTlQoInVuZXhwZWN0ZWQgYysr IHN0ZDo6ZXhjZXB0aW9uIChwZXJoYXBzIHRocm93biBieSB1c2VyIGNvZGUpIikpOworCQkJRFVL X1NUQVRTX0lOQyhleGVjX3Roci0+aGVhcCwgc3RhdHNfZXhlY190aHJvdyk7CisJCQl0cnkgewor CQkJCURVS19BU1NFUlQoaGVhcC0+Y3Vycl90aHJlYWQgIT0gTlVMTCk7CisJCQkJRFVLX0VSUk9S X0ZNVDEoaGVhcC0+Y3Vycl90aHJlYWQsIERVS19FUlJfVFlQRV9FUlJPUiwgImNhdWdodCBpbnZh bGlkIGMrKyBzdGQ6OmV4Y2VwdGlvbiAnJXMnIChwZXJoYXBzIHRocm93biBieSB1c2VyIGNvZGUp Iiwgd2hhdCk7CisJCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQkJfSBjYXRjaCAoZHVr X2ludGVybmFsX2V4Y2VwdGlvbiBleGMpIHsKKwkJCQlEVUtfRChEVUtfRFBSSU5UKCJjYXVnaHQg YXBpIGVycm9yIHRocm93biBmcm9tIHVuZXhwZWN0ZWQgYysrIHN0ZDo6ZXhjZXB0aW9uIikpOwor CQkJCURVS19VTlJFRihleGMpOworCQkJCWR1a19faGFuZGxlX2V4ZWN1dG9yX2Vycm9yKGhlYXAs CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfYWN0LAorCQkJCSAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVudHJ5X2NhbGxfcmVjdXJzaW9uX2RlcHRoLAorCQkJCSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2ptcGJ1Zl9wdHIpOworCQkJfQorCQl9IGNhdGNo ICguLi4pIHsKKwkJCURVS19EKERVS19EUFJJTlQoInVuZXhwZWN0ZWQgYysrIGV4Y2VwdGlvbiAo cGVyaGFwcyB0aHJvd24gYnkgdXNlciBjb2RlKSIpKTsKKwkJCURVS19TVEFUU19JTkMoZXhlY190 aHItPmhlYXAsIHN0YXRzX2V4ZWNfdGhyb3cpOworCQkJdHJ5IHsKKwkJCQlEVUtfQVNTRVJUKGhl YXAtPmN1cnJfdGhyZWFkICE9IE5VTEwpOworCQkJCURVS19FUlJPUl9UWVBFKGhlYXAtPmN1cnJf dGhyZWFkLCAiY2F1Z2h0IGludmFsaWQgYysrIGV4Y2VwdGlvbiAocGVyaGFwcyB0aHJvd24gYnkg dXNlciBjb2RlKSIpOworCQkJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwkJCX0gY2F0Y2gg KGR1a19pbnRlcm5hbF9leGNlcHRpb24gZXhjKSB7CisJCQkJRFVLX0QoRFVLX0RQUklOVCgiY2F1 Z2h0IGFwaSBlcnJvciB0aHJvd24gZnJvbSB1bmV4cGVjdGVkIGMrKyBleGNlcHRpb24iKSk7CisJ CQkJRFVLX1VOUkVGKGV4Yyk7CisJCQkJZHVrX19oYW5kbGVfZXhlY3V0b3JfZXJyb3IoaGVhcCwK KwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9hY3QsCisJCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW50cnlfY2FsbF9yZWN1cnNpb25fZGVwdGgsCisJCQkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW50cnlfam1wYnVmX3B0cik7CisJCQl9CisJCX0KKyNlbmRp ZgorCX0KKworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyogSW5uZXIgZXhlY3V0 b3IsIHBlcmZvcm1hbmNlIGNyaXRpY2FsLiAqLworRFVLX0xPQ0FMIERVS19OT0lOTElORSBEVUtf SE9UIHZvaWQgZHVrX19qc19leGVjdXRlX2J5dGVjb2RlX2lubmVyKGR1a19odGhyZWFkICplbnRy eV90aHJlYWQsIGR1a19hY3RpdmF0aW9uICplbnRyeV9hY3QpIHsKKwkvKiBDdXJyZW50IFBDLCBh Y2Nlc3NlZCBieSBvdGhlciBmdW5jdGlvbnMgdGhyb3VnaCB0aHItPnB0cl90b19jdXJyX3BjLgor CSAqIENyaXRpY2FsIGZvciBwZXJmb3JtYW5jZS4gIEl0IHdvdWxkIGJlIHNhZmVzdCB0byBtYWtl IHRoaXMgdm9sYXRpbGUsCisJICogYnV0IHRoYXQgZWxpbWluYXRlcyBwZXJmb3JtYW5jZSBiZW5l Zml0czsgYWxpYXNpbmcgZ3VhcmFudGVlcworCSAqIHNob3VsZCBiZSBlbm91Z2ggdGhvdWdoLgor CSAqLworCWR1a19pbnN0cl90ICpjdXJyX3BjOyAgICAgICAgIC8qIGJ5dGVjb2RlIGhhcyBhIHN0 YWJsZSBwb2ludGVyICovCisKKwkvKiBIb3QgdmFyaWFibGVzIGZvciBpbnRlcnByZXRhdGlvbi4g IENyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSwKKwkgKiBidXQgbXVzdCBhZGQgc3BhcmluZ2x5IHRv IG1pbmltaXplIHJlZ2lzdGVyIHNodWZmbGluZy4KKwkgKi8KKwlkdWtfaHRocmVhZCAqdGhyOyAg ICAgICAgICAgICAvKiBzdGFibGUgKi8KKwlkdWtfdHZhbCAqY29uc3RzOyAgICAgICAgICAgICAv KiBzdGFibGUgKi8KKwlkdWtfdWludF9mYXN0MzJfdCBpbnM7CisJLyogJ2Z1bmNzJyBpcyBxdWl0 ZSByYXJlbHkgdXNlZCwgc28gbm8gbG9jYWwgZm9yIGl0ICovCisjaWYgZGVmaW5lZChEVUtfVVNF X0VYRUNfRlVOX0xPQ0FMKQorCWR1a19oY29tcGZ1bmMgKmZ1bjsKKyNlbHNlCisJLyogJ2Z1bicg aXMgcXVpdGUgcmFyZWx5IHVzZWQsIHNvIG5vIGxvY2FsIGZvciBpdCAqLworI2VuZGlmCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfSU5URVJSVVBUX0NPVU5URVIpCisJZHVrX2ludF90IGludF9jdHI7 CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCWR1a19zaXplX3Qg dmFsc3RhY2tfdG9wX2Jhc2U7ICAgIC8qIHZhbHN0YWNrIHRvcCwgc2hvdWxkIG1hdGNoIGJlZm9y ZSBpbnRlcnByZXRpbmcgZWFjaCBvcCAobm8gbGVmdG92ZXJzKSAqLworI2VuZGlmCisKKwkvKiBP cHRpbWl6ZWQgcmVnL2NvbnN0IGFjY2VzcyBtYWNyb3MgYXNzdW1lIHNpemVvZihkdWtfdHZhbCkg dG8gYmUKKwkgKiBlaXRoZXIgOCBvciAxNi4gIEhlYXAgYWxsb2NhdGlvbiBjaGVja3MgdGhpcyBl dmVuIHdpdGhvdXQgYXNzZXJ0cworCSAqIGVuYWJsZWQgbm93IGJlY2F1c2UgaXQgY2FuJ3QgYmUg YXV0b2RldGVjdGVkIGluIGR1a19jb25maWcuaC4KKwkgKi8KKyNpZiAxCisjaWYgZGVmaW5lZChE VUtfVVNFX1BBQ0tFRF9UVkFMKQorCURVS19BU1NFUlQoc2l6ZW9mKGR1a190dmFsKSA9PSA4KTsK KyNlbHNlCisJRFVLX0FTU0VSVChzaXplb2YoZHVrX3R2YWwpID09IDE2KTsKKyNlbmRpZgorI2Vu ZGlmCisKKwlEVUtfR0NfVE9SVFVSRShlbnRyeV90aHJlYWQtPmhlYXApOworCisJLyoKKwkgKiAg UmVzdGFydCBleGVjdXRpb24gYnkgcmVsb2FkaW5nIHRocmVhZCBzdGF0ZS4KKwkgKgorCSAqICBO b3RlIHRoYXQgJ3RocicgYW5kIGFueSB0aHJlYWQgY29uZmlndXJhdGlvbiBtYXkgaGF2ZSBjaGFu Z2VkLAorCSAqICBzbyBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBzdXNwZWN0IGFuZCB3ZSBuZWVk IHRvIHJlaW5pdGlhbGl6ZS4KKwkgKgorCSAqICBUaGUgbnVtYmVyIG9mIGxvY2FsIHZhcmlhYmxl cyBzaG91bGQgYmUga2VwdCB0byBhIG1pbmltdW06IGlmCisJICogIHRoZSB2YXJpYWJsZXMgYXJl IHNwaWxsZWQsIHRoZXkgd2lsbCBuZWVkIHRvIGJlIGxvYWRlZCBmcm9tCisJICogIG1lbW9yeSBh bnl3YXkuCisJICoKKwkgKiAgQW55ICdnb3RvIHJlc3RhcnRfZXhlY3V0aW9uOycgY29kZSBwYXRo IGluIG9wY29kZSBkaXNwYXRjaCBtdXN0CisJICogIGVuc3VyZSAnY3Vycl9wYycgaXMgc3luY2Vk IGJhY2sgdG8gYWN0LT5jdXJyX3BjIGJlZm9yZSB0aGUgZ290bworCSAqICB0YWtlcyBwbGFjZS4K KwkgKgorCSAqICBUaGUgaW50ZXJwcmV0ZXIgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgd2l0aCBtZW1v cnkgcG9pbnRlcnMsIGFzCisJICogIG1hbnkgcG9pbnRlcnMgYXJlIG5vdCBndWFyYW50ZWVkIHRv IGJlICdzdGFibGUnIGFuZCBtYXkgYmUKKwkgKiAgcmVhbGxvY2F0ZWQgYW5kIHJlbG9jYXRlZCBv bi10aGUtZmx5IHF1aXRlIGVhc2lseSAoZS5nLiBieSBhCisJICogIG1lbW9yeSBhbGxvY2F0aW9u IG9yIGEgcHJvcGVydHkgYWNjZXNzKS4KKwkgKgorCSAqICBUaGUgZm9sbG93aW5nIGFyZSBhc3N1 bWVkIHRvIGhhdmUgc3RhYmxlIHBvaW50ZXJzOgorCSAqICAgIC0gdGhlIGN1cnJlbnQgdGhyZWFk CisJICogICAgLSB0aGUgY3VycmVudCBmdW5jdGlvbgorCSAqICAgIC0gdGhlIGJ5dGVjb2RlLCBj b25zdGFudCB0YWJsZSwgaW5uZXIgZnVuY3Rpb24gdGFibGUgb2YgdGhlCisJICogICAgICBjdXJy ZW50IGZ1bmN0aW9uIChhcyB0aGV5IGFyZSBhIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIGFsbG9jYXRp b24pCisJICoKKwkgKiAgVGhlIGZvbGxvd2luZyBhcmUgYXNzdW1lZCB0byBoYXZlIHNlbWktc3Rh YmxlIHBvaW50ZXJzOgorCSAqICAgIC0gdGhlIGN1cnJlbnQgYWN0aXZhdGlvbiBlbnRyeTogc3Rh YmxlIGFzIGxvbmcgYXMgY2FsbHN0YWNrCisJICogICAgICBpcyBub3QgY2hhbmdlZCAocmVhbGxv Y2F0ZWQgYnkgZ3Jvd2luZyBvciBzaHJpbmtpbmcpLCBvcgorCSAqICAgICAgYnkgYW55IGdhcmJh Z2UgY29sbGVjdGlvbiBpbnZvY2F0aW9uICh0aHJvdWdoIGZpbmFsaXplcnMpCisJICogICAgLSBO b3RlIGluIHBhcnRpY3VsYXIgdGhhdCBBTlkgREVDUkVGIGNhbiBpbnZhbGlkYXRlIHRoZQorCSAq ICAgICAgYWN0aXZhdGlvbiBwb2ludGVyLCBzbyBmb3IgdGhlIG1vc3QgcGFydCBhIGZyZXNoIGxv b2t1cAorCSAqICAgICAgaXMgcmVxdWlyZWQKKwkgKgorCSAqICBUaGUgZm9sbG93aW5nIGFyZSBu b3QgYXNzdW1lZCB0byBoYXZlIHN0YWJsZSBwb2ludGVycyBhdCBhbGw6CisJICogICAgLSB0aGUg dmFsdWUgc3RhY2sgKHJlZ2lzdGVycykgb2YgdGhlIGN1cnJlbnQgdGhyZWFkCisJICoKKwkgKiAg U2VlIGV4ZWN1dGlvbi5yc3QgZm9yIGRpc2N1c3Npb24uCisJICovCisKKyByZXN0YXJ0X2V4ZWN1 dGlvbjoKKworCS8qIExvb2t1cCBjdXJyZW50IHRocmVhZDsgdXNlIHRoZSBzdGFibGUgJ2VudHJ5 X3RocmVhZCcgZm9yIHRoaXMgdG8KKwkgKiBhdm9pZCBjbG9iYmVyIHdhcm5pbmdzLiAgQW55IHZh bGlkLCByZWFjaGFibGUgJ3RocicgdmFsdWUgd291bGQgYmUKKwkgKiBmaW5lIGZvciB0aGlzLCBz byB1c2luZyAnZW50cnlfdGhyZWFkJyBpcyBqdXN0IHRvIHNpbGVuY2Ugd2FybmluZ3MuCisJICov CisJdGhyID0gZW50cnlfdGhyZWFkLT5oZWFwLT5jdXJyX3RocmVhZDsKKwlEVUtfQVNTRVJUKHRo ciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNrX3RvcCA+PSAxKTsKKwlEVUtf QVNTRVJUKHRoci0+Y2FsbHN0YWNrX2N1cnIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfQUNU X0dFVF9GVU5DKHRoci0+Y2FsbHN0YWNrX2N1cnIpICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVL X0hPQkpFQ1RfSVNfQ09NUEZVTkMoRFVLX0FDVF9HRVRfRlVOQyh0aHItPmNhbGxzdGFja19jdXJy KSkpOworCisJRFVLX0dDX1RPUlRVUkUodGhyLT5oZWFwKTsKKworCXRoci0+cHRyX2N1cnJfcGMg PSAmY3Vycl9wYzsKKworCS8qIFJlbG9va3VwIGFuZCBpbml0aWFsaXplIGRpc3BhdGNoIGxvb3Ag dmFyaWFibGVzLiAgRGVidWdnZXIgY2hlY2suICovCisJeworCQlkdWtfYWN0aXZhdGlvbiAqYWN0 OworI2lmICFkZWZpbmVkKERVS19VU0VfRVhFQ19GVU5fTE9DQUwpCisJCWR1a19oY29tcGZ1bmMg KmZ1bjsKKyNlbmRpZgorCisJCS8qIEFzc3VtZSBpbnRlcnJ1cHQgaW5pdC9jb3VudGVyIGFyZSBw cm9wZXJseSBpbml0aWFsaXplZCBoZXJlLiAqLworCQkvKiBBc3N1bWUgdGhhdCB0aHItPnZhbHN0 YWNrX2JvdHRvbSBoYXMgYmVlbiBzZXQtdXAgYmVmb3JlIGdldHRpbmcgaGVyZS4gKi8KKworCQlh Y3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCQlEVUtfQVNTRVJUKGFjdCAhPSBOVUxMKTsKKwkJ ZnVuID0gKGR1a19oY29tcGZ1bmMgKikgRFVLX0FDVF9HRVRfRlVOQyhhY3QpOworCQlEVUtfQVNT RVJUKGZ1biAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVCh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+ dmFsc3RhY2tfYm90dG9tID09IGZ1bi0+bnJlZ3MpOworCQljb25zdHMgPSBEVUtfSENPTVBGVU5D X0dFVF9DT05TVFNfQkFTRSh0aHItPmhlYXAsIGZ1bik7CisJCURVS19BU1NFUlQoY29uc3RzICE9 IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHR0VSX1NVUFBPUlQpCisJCWlmIChE VUtfVU5MSUtFTFkoZHVrX2RlYnVnX2lzX2F0dGFjaGVkKHRoci0+aGVhcCkgJiYgIXRoci0+aGVh cC0+ZGJnX3Byb2Nlc3NpbmcpKSB7CisJCQlkdWtfX2V4ZWN1dG9yX3JlY2hlY2tfZGVidWdnZXIo dGhyLCBhY3QsIGZ1bik7CisJCQlEVUtfQVNTRVJUKGFjdCA9PSB0aHItPmNhbGxzdGFja19jdXJy KTsKKwkJCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCQl9CisjZW5kaWYgIC8qIERVS19VU0Vf REVCVUdHRVJfU1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0FTU0VSVElPTlMpCisJ CXZhbHN0YWNrX3RvcF9iYXNlID0gKGR1a19zaXplX3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRo ci0+dmFsc3RhY2spOworI2VuZGlmCisKKwkJLyogU2V0IHVwIGN1cnJfcGMgZm9yIG9wY29kZSBk aXNwYXRjaC4gKi8KKwkJY3Vycl9wYyA9IGFjdC0+Y3Vycl9wYzsKKwl9CisKKwlEVUtfREQoRFVL X0REUFJJTlQoInJlc3RhcnRpbmcgZXhlY3V0aW9uLCB0aHIgJXAsIGFjdCBpZHggJWxkLCBmdW4g JXAsIgorCSAgICAgICAgICAgICAgICAgICAiY29uc3RzICVwLCBmdW5jcyAlcCwgbGV2ICVsZCwg cmVnYm90ICVsZCwgcmVndG9wICVsZCwgIgorCSAgICAgICAgICAgICAgICAgICAicHJldmVudGNv dW50PSVsZCIsCisJICAgICAgICAgICAgICAgICAgICh2b2lkICopIHRociwKKwkgICAgICAgICAg ICAgICAgICAgKGxvbmcpICh0aHItPmNhbGxzdGFja190b3AgLSAxKSwKKwkgICAgICAgICAgICAg ICAgICAgKHZvaWQgKikgRFVLX19GVU4oKSwKKwkgICAgICAgICAgICAgICAgICAgKHZvaWQgKikg RFVLX0hDT01QRlVOQ19HRVRfQ09OU1RTX0JBU0UodGhyLT5oZWFwLCBEVUtfX0ZVTigpKSwKKwkg ICAgICAgICAgICAgICAgICAgKHZvaWQgKikgRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1NfQkFTRSh0 aHItPmhlYXAsIERVS19fRlVOKCkpLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgKHRoci0+ Y2FsbHN0YWNrX3RvcCAtIDEpLAorCSAgICAgICAgICAgICAgICAgICAobG9uZykgKHRoci0+dmFs c3RhY2tfYm90dG9tIC0gdGhyLT52YWxzdGFjayksCisJICAgICAgICAgICAgICAgICAgIChsb25n KSAodGhyLT52YWxzdGFja190b3AgLSB0aHItPnZhbHN0YWNrKSwKKwkgICAgICAgICAgICAgICAg ICAgKGxvbmcpIHRoci0+Y2FsbHN0YWNrX3ByZXZlbnRjb3VudCkpOworCisJLyogRGlzcGF0Y2gg bG9vcC4gKi8KKworCWZvciAoOzspIHsKKwkJZHVrX3VpbnQ4X3Qgb3A7CisKKwkJRFVLX0FTU0VS VCh0aHItPmNhbGxzdGFja190b3AgPj0gMSk7CisJCURVS19BU1NFUlQodGhyLT52YWxzdGFja190 b3AgLSB0aHItPnZhbHN0YWNrX2JvdHRvbSA9PSBEVUtfX0ZVTigpLT5ucmVncyk7CisJCURVS19B U1NFUlQoKGR1a19zaXplX3QpICh0aHItPnZhbHN0YWNrX3RvcCAtIHRoci0+dmFsc3RhY2spID09 IHZhbHN0YWNrX3RvcF9iYXNlKTsKKworCQkvKiBFeGVjdXRvciBpbnRlcnJ1cHQgY291bnRlciBj aGVjaywgdXNlZCB0byBpbXBsZW1lbnQgYnJlYWtwb2ludHMsCisJCSAqIGRlYnVnZ2luZyBpbnRl cmZhY2UsIGV4ZWN1dGlvbiB0aW1lb3V0cywgZXRjLiAgVGhlIGNvdW50ZXIgaXMgaGVhcAorCQkg KiBzcGVjaWZpYyBidXQgaXMgbWFpbnRhaW5lZCBpbiB0aGUgY3VycmVudCB0aHJlYWQgdG8gbWFr ZSB0aGUgY2hlY2sKKwkJICogYXMgZmFzdCBhcyBwb3NzaWJsZS4gIFRoZSBjb3VudGVyIGlzIGNv cGllZCBiYWNrIHRvIHRoZSBoZWFwIHN0cnVjdAorCQkgKiB3aGVuZXZlciBhIHRocmVhZCBzd2l0 Y2ggb2NjdXJzIGJ5IHRoZSBEVUtfSEVBUF9TV0lUQ0hfVEhSRUFEKCkgbWFjcm8uCisJCSAqLwor I2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFUlJVUFRfQ09VTlRFUikKKwkJaW50X2N0ciA9IHRoci0+ aW50ZXJydXB0X2NvdW50ZXI7CisJCWlmIChEVUtfTElLRUxZKGludF9jdHIgPiAwKSkgeworCQkJ dGhyLT5pbnRlcnJ1cHRfY291bnRlciA9IGludF9jdHIgLSAxOworCQl9IGVsc2UgeworCQkJLyog VHJpZ2dlciBhdCB6ZXJvIG9yIGJlbG93ICovCisJCQlkdWtfc21hbGxfdWludF90IGV4ZWNfaW50 X3JldDsKKworCQkJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX2V4ZWNfaW50ZXJydXB0 KTsKKworCQkJLyogV3JpdGUgY3Vycl9wYyBiYWNrIGZvciB0aGUgZGVidWdnZXIuICovCisJCQl7 CisJCQkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCQlEVUtfQVNTRVJUKHRoci0+Y2FsbHN0YWNr X3RvcCA+IDApOworCQkJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJCQkJRFVLX0FTU0VS VChhY3QgIT0gTlVMTCk7CisJCQkJYWN0LT5jdXJyX3BjID0gKGR1a19pbnN0cl90ICopIGN1cnJf cGM7CisJCQl9CisKKwkJCS8qIEZvcmNlZCByZXN0YXJ0IGNhdXNlZCBieSBhIGZ1bmN0aW9uIHJl dHVybjsgbXVzdCByZWNoZWNrCisJCQkgKiBkZWJ1Z2dlciBicmVha3BvaW50cyBiZWZvcmUgY2hl Y2tpbmcgbGluZSB0cmFuc2l0aW9ucywKKwkJCSAqIHNlZSBHSC0zMDMuICBSZXN0YXJ0IGFuZCB0 aGVuIGhhbmRsZSBpbnRlcnJ1cHRfY291bnRlcgorCQkJICogemVybyBhZ2Fpbi4KKwkJCSAqLwor I2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR0dFUl9TVVBQT1JUKQorCQkJaWYgKHRoci0+aGVhcC0+ ZGJnX2ZvcmNlX3Jlc3RhcnQpIHsKKwkJCQlEVUtfREQoRFVLX0REUFJJTlQoImRiZ19mb3JjZV9y ZXN0YXJ0IGZsYWcgZm9yY2VkIHJlc3RhcnQgZXhlY3V0aW9uIikpOyAgLyogR0gtMzAzICovCisJ CQkJdGhyLT5oZWFwLT5kYmdfZm9yY2VfcmVzdGFydCA9IDA7CisJCQkJZ290byByZXN0YXJ0X2V4 ZWN1dGlvbjsKKwkJCX0KKyNlbmRpZgorCisJCQlleGVjX2ludF9yZXQgPSBkdWtfX2V4ZWN1dG9y X2ludGVycnVwdCh0aHIpOworCQkJaWYgKGV4ZWNfaW50X3JldCA9PSBEVUtfX0lOVF9SRVNUQVJU KSB7CisJCQkJLyogY3Vycl9wYyBzeW5jZWQgYmFjayBhYm92ZSAqLworCQkJCWdvdG8gcmVzdGFy dF9leGVjdXRpb247CisJCQl9CisJCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9JTlRFUlJVUFRfQ09V TlRFUiAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9JTlRFUlJVUFRfQ09VTlRFUikgJiYgZGVmaW5l ZChEVUtfVVNFX0RFQlVHKQorCQkvKiBGb3IgY3Jvc3MtY2hlY2tpbmcgZHVyaW5nIGRldmVsb3Bt ZW50OiBlbnN1cmUgZGlzcGF0Y2ggY291bnQKKwkJICogbWF0Y2hlcyBjdW11bGF0aXZlIGludGVy cnVwdCBjb3VudGVyIGluaXQgdmFsdWUgc3Vtcy4KKwkJICovCisJCXRoci0+aGVhcC0+aW5zdF9j b3VudF9leGVjKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKSB8 fCBkZWZpbmVkKERVS19VU0VfREVCVUcpCisJCXsKKwkJCWR1a19hY3RpdmF0aW9uICphY3Q7CisJ CQlhY3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCQkJRFVLX0FTU0VSVChjdXJyX3BjID49IERV S19IQ09NUEZVTkNfR0VUX0NPREVfQkFTRSh0aHItPmhlYXAsIERVS19fRlVOKCkpKTsKKwkJCURV S19BU1NFUlQoY3Vycl9wYyA8IERVS19IQ09NUEZVTkNfR0VUX0NPREVfRU5EKHRoci0+aGVhcCwg RFVLX19GVU4oKSkpOworCQkJRFVLX1VOUkVGKGFjdCk7ICAvKiBpZiBkZWJ1Z2dpbmcgZGlzYWJs ZWQgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImV4ZWN1dGluZyBieXRlY29kZTogcGM9 JWxkLCBpbnM9MHglMDhseCwgb3A9JWxkLCB2YWxzdGFja190b3A9JWxkLyVsZCwgbnJlZ3M9JWxk ICAtLT4gICUhSSIsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgKGN1cnJfcGMgLSBE VUtfSENPTVBGVU5DX0dFVF9DT0RFX0JBU0UodGhyLT5oZWFwLCBEVUtfX0ZVTigpKSksCisJCQkg ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKmN1cnJfcGMsCisJCQkgICAgICAg ICAgICAgICAgICAgICAobG9uZykgRFVLX0RFQ19PUCgqY3Vycl9wYyksCisJCQkgICAgICAgICAg ICAgICAgICAgICAobG9uZykgKHRoci0+dmFsc3RhY2tfdG9wIC0gdGhyLT52YWxzdGFjayksCisJ CQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgKHRoci0+dmFsc3RhY2tfZW5kIC0gdGhyLT52 YWxzdGFjayksCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgKERVS19fRlVOKCkgPyBE VUtfX0ZVTigpLT5ucmVncyA6IC0xKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaW5z dHJfdCkgKmN1cnJfcGMpKTsKKwkJfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19VU0VfQVNT RVJUSU9OUykKKwkJLyogUXVpdGUgaGVhdnkgYXNzZXJ0OiBjaGVjayB2YWxzdGFjayBwb2xpY3ku ICBJbXByb3BlcgorCQkgKiBzaHVmZmxlIGluc3RydWN0aW9ucyBjYW4gd3JpdGUgYmV5b25kIHZh bHN0YWNrX3RvcC9lbmQKKwkJICogc28gdGhpcyBjaGVjayBjYXRjaGVzIHRoZW0gaW4gdGhlIGFj dC4KKwkJICovCisJCXsKKwkJCWR1a190dmFsICp0djsKKwkJCXR2ID0gdGhyLT52YWxzdGFja190 b3A7CisJCQl3aGlsZSAodHYgIT0gdGhyLT52YWxzdGFja19lbmQpIHsKKwkJCQlEVUtfQVNTRVJU KERVS19UVkFMX0lTX1VOREVGSU5FRCh0dikpOworCQkJCXR2Kys7CisJCQl9CisJCX0KKyNlbmRp ZgorCisJCWlucyA9ICpjdXJyX3BjKys7CisJCURVS19TVEFUU19JTkModGhyLT5oZWFwLCBzdGF0 c19leGVjX29wY29kZXMpOworCisJCS8qIFR5cGluZzogdXNlIGR1a19zbWFsbF8odSlpbnRfZmFz dF90IHdoZW4gZGVjb2Rpbmcgc21hbGwKKwkJICogb3Bjb2RlIGZpZWxkcyAob3AsIEEsIEIsIEMs IEJDKSB3aGljaCBmaXQgaW50byAxNiBiaXRzCisJCSAqIGFuZCBkdWtfKHUpaW50X2Zhc3RfdCB3 aGVuIGRlY29kaW5nIGxhcmdlciBmaWVsZHMgKGUuZy4KKwkJICogQUJDKS4gIFVzZSB1bnNpZ25l ZCB2YXJpYW50IGJ5IGRlZmF1bHQsIHNpZ25lZCB3aGVuIHRoZQorCQkgKiB2YWx1ZSBpcyB1c2Vk IGluIHNpZ25lZCBhcml0aG1ldGljLiAgVXNpbmcgdmFyaWFibGUgbmFtZXMKKwkJICogc3VjaCBh cyAnYScsICdiJywgJ2MnLCAnYmMnLCBldGMgbWFrZXMgaXQgZWFzaWVyIHRvIHNwb3QKKwkJICog dHlwaW5nIG1pc21hdGNoZXMuCisJCSAqLworCisJCS8qIFN3aXRjaCBiYXNlZCBvbiBvcGNvZGUu ICBDYXN0IHRvIDgtYml0IHVuc2lnbmVkIHZhbHVlIGFuZAorCQkgKiB1c2UgYSBmdWxseSBwb3B1 bGF0ZWQgY2FzZSBjbGF1c2VzIHNvIHRoYXQgdGhlIGNvbXBpbGVyCisJCSAqIHdpbGwgKGF0IGxl YXN0IHVzdWFsbHkpIG9taXQgYSBib3VuZHMgY2hlY2suCisJCSAqLworCQlvcCA9IChkdWtfdWlu dDhfdCkgRFVLX0RFQ19PUChpbnMpOworCQlzd2l0Y2ggKG9wKSB7CisKKwkJLyogU29tZSB1c2Vm dWwgbWFjcm9zLiAgVGhlc2UgYWNjZXNzIGlubmVyIGV4ZWN1dG9yIHZhcmlhYmxlcworCQkgKiBk aXJlY3RseSBzbyB0aGV5IG9ubHkgYXBwbHkgd2l0aGluIHRoZSBleGVjdXRvci4KKwkJICovCisj aWYgZGVmaW5lZChEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUpCisjZGVmaW5lIERVS19fUkVQTEFD RV9UT1BfQV9CUkVBSygpIHsgZ290byByZXBsYWNlX3RvcF9hOyB9CisjZGVmaW5lIERVS19fUkVQ TEFDRV9UT1BfQkNfQlJFQUsoKSB7IGdvdG8gcmVwbGFjZV90b3BfYmM7IH0KKyNkZWZpbmUgRFVL X19SRVBMQUNFX0JPT0xfQV9CUkVBSyhidmFsKSB7IFwKKwkJZHVrX2Jvb2xfdCBkdWtfX2J2YWw7 IFwKKwkJZHVrX19idmFsID0gKGJ2YWwpOyBcCisJCURVS19BU1NFUlQoZHVrX19idmFsID09IDAg fHwgZHVrX19idmFsID09IDEpOyBcCisJCWR1a19wdXNoX2Jvb2xlYW4odGhyLCBkdWtfX2J2YWwp OyBcCisJCURVS19fUkVQTEFDRV9UT1BfQV9CUkVBSygpOyBcCisJfQorI2Vsc2UKKyNkZWZpbmUg RFVLX19SRVBMQUNFX1RPUF9BX0JSRUFLKCkgeyBEVUtfX1JFUExBQ0VfVE9fVFZQVFIodGhyLCBE VUtfX1JFR1BfQShpbnMpKTsgYnJlYWs7IH0KKyNkZWZpbmUgRFVLX19SRVBMQUNFX1RPUF9CQ19C UkVBSygpIHsgRFVLX19SRVBMQUNFX1RPX1RWUFRSKHRociwgRFVLX19SRUdQX0JDKGlucykpOyBi cmVhazsgfQorI2RlZmluZSBEVUtfX1JFUExBQ0VfQk9PTF9BX0JSRUFLKGJ2YWwpIHsgXAorCQlk dWtfYm9vbF90IGR1a19fYnZhbDsgXAorCQlkdWtfdHZhbCAqZHVrX190dmRzdDsgXAorCQlkdWtf X2J2YWwgPSAoYnZhbCk7IFwKKwkJRFVLX0FTU0VSVChkdWtfX2J2YWwgPT0gMCB8fCBkdWtfX2J2 YWwgPT0gMSk7IFwKKwkJZHVrX190dmRzdCA9IERVS19fUkVHUF9BKGlucyk7IFwKKwkJRFVLX1RW QUxfU0VUX0JPT0xFQU5fVVBEUkVGKHRociwgZHVrX190dmRzdCwgZHVrX19idmFsKTsgXAorCQli cmVhazsgXAorCX0KKyNlbmRpZgorCisJCS8qIFhYWDogMTIgKyAxMiBiaXQgdmFyaWFudCBtaWdo dCBtYWtlIHNlbnNlIHRvbywgZm9yIGJvdGggcmVnIGFuZAorCQkgKiBjb25zdCBsb2Fkcy4KKwkJ ICovCisKKwkJLyogRm9yIExEUkVHLCBTVFJFRywgTERDT05TVCBmb290cHJpbnQgb3B0aW1pemVk IHZhcmlhbnRzIHdvdWxkIGp1c3QKKwkJICogZHVrX2R1cCgpICsgZHVrX3JlcGxhY2UoKSwgYnV0 IGJlY2F1c2UgdGhleSdyZSB1c2VkIHF1aXRlIGEgbG90CisJCSAqIHRoZXkncmUgY3VycmVudGx5 IGludGVudGlvbmFsbHkgbm90IHNpemUgb3B0aW1pemVkLgorCQkgKi8KKwkJY2FzZSBEVUtfT1Bf TERSRUc6IHsKKwkJCWR1a190dmFsICp0djEsICp0djI7CisKKwkJCXR2MSA9IERVS19fUkVHUF9B KGlucyk7CisJCQl0djIgPSBEVUtfX1JFR1BfQkMoaW5zKTsKKwkJCURVS19UVkFMX1NFVF9UVkFM X1VQRFJFRl9GQVNUKHRociwgdHYxLCB0djIpOyAgLyogc2lkZSBlZmZlY3RzICovCisJCQlicmVh azsKKwkJfQorCisJCWNhc2UgRFVLX09QX1NUUkVHOiB7CisJCQlkdWtfdHZhbCAqdHYxLCAqdHYy OworCisJCQl0djEgPSBEVUtfX1JFR1BfQShpbnMpOworCQkJdHYyID0gRFVLX19SRUdQX0JDKGlu cyk7CisJCQlEVUtfVFZBTF9TRVRfVFZBTF9VUERSRUZfRkFTVCh0aHIsIHR2MiwgdHYxKTsgIC8q IHNpZGUgZWZmZWN0cyAqLworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIERVS19PUF9MRENPTlNU OiB7CisJCQlkdWtfdHZhbCAqdHYxLCAqdHYyOworCisJCQl0djEgPSBEVUtfX1JFR1BfQShpbnMp OworCQkJdHYyID0gRFVLX19DT05TVFBfQkMoaW5zKTsKKwkJCURVS19UVkFMX1NFVF9UVkFMX1VQ RFJFRl9GQVNUKHRociwgdHYxLCB0djIpOyAgLyogc2lkZSBlZmZlY3RzICovCisJCQlicmVhazsK KwkJfQorCisJCS8qIExESU5UIGFuZCBMRElOVFggYXJlIGludGVuZGVkIHRvIGxvYWQgYW4gYXJi aXRyYXJ5IHNpZ25lZAorCQkgKiAzMi1iaXQgdmFsdWUuICBPbmx5IGFuIExESU5UK0xESU5UWCBz ZXF1ZW5jZSBpcyBzdXBwb3J0ZWQuCisJCSAqIFRoaXMgYWxzbyBndWFyYW50ZWVzIGFsbCB2YWx1 ZXMgcmVtYWluIGZhc3RpbnRzLgorCQkgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19QUkVG RVJfU0laRSkKKwkJY2FzZSBEVUtfT1BfTERJTlQ6IHsKKwkJCWR1a19pbnQzMl90IHZhbDsKKwor CQkJdmFsID0gKGR1a19pbnQzMl90KSBEVUtfREVDX0JDKGlucykgLSAoZHVrX2ludDMyX3QpIERV S19CQ19MRElOVF9CSUFTOworCQkJZHVrX3B1c2hfaW50KHRociwgdmFsKTsKKwkJCURVS19fUkVQ TEFDRV9UT1BfQV9CUkVBSygpOworCQl9CisJCWNhc2UgRFVLX09QX0xESU5UWDogeworCQkJZHVr X2ludDMyX3QgdmFsOworCisJCQl2YWwgPSAoZHVrX2ludDMyX3QpIGR1a19nZXRfaW50KHRociwg RFVLX0RFQ19BKGlucykpOworCQkJdmFsID0gKHZhbCA8PCBEVUtfQkNfTERJTlRYX1NISUZUKSAr IChkdWtfaW50MzJfdCkgRFVLX0RFQ19CQyhpbnMpOyAgLyogbm8gYmlhcyAqLworCQkJZHVrX3B1 c2hfaW50KHRociwgdmFsKTsKKwkJCURVS19fUkVQTEFDRV9UT1BfQV9CUkVBSygpOworCQl9Cisj ZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisJCWNhc2UgRFVLX09QX0xESU5U OiB7CisJCQlkdWtfdHZhbCAqdHYxOworCQkJZHVrX2ludDMyX3QgdmFsOworCisJCQl2YWwgPSAo ZHVrX2ludDMyX3QpIERVS19ERUNfQkMoaW5zKSAtIChkdWtfaW50MzJfdCkgRFVLX0JDX0xESU5U X0JJQVM7CisJCQl0djEgPSBEVUtfX1JFR1BfQShpbnMpOworCQkJRFVLX1RWQUxfU0VUX0kzMl9V UERSRUYodGhyLCB0djEsIHZhbCk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJCWJyZWFrOworCQl9 CisJCWNhc2UgRFVLX09QX0xESU5UWDogeworCQkJZHVrX3R2YWwgKnR2MTsKKwkJCWR1a19pbnQz Ml90IHZhbDsKKworCQkJdHYxID0gRFVLX19SRUdQX0EoaW5zKTsKKwkJCURVS19BU1NFUlQoRFVL X1RWQUxfSVNfTlVNQkVSKHR2MSkpOworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQkJ RFVLX0FTU0VSVChEVUtfVFZBTF9JU19GQVNUSU5UKHR2MSkpOworCQkJdmFsID0gRFVLX1RWQUxf R0VUX0ZBU1RJTlRfSTMyKHR2MSk7CisjZWxzZQorCQkJLyogWFhYOiBmYXN0IGRvdWJsZS10by1p bnQgY29udmVyc2lvbiwgd2Uga25vdyBudW1iZXIgaXMgaW50ZWdlciBpbiBbLTB4ODAwMDAwMDAs MHhmZmZmZmZmZl0uICovCisJCQl2YWwgPSAoZHVrX2ludDMyX3QpIERVS19UVkFMX0dFVF9OVU1C RVIodHYxKTsKKyNlbmRpZgorCQkJdmFsID0gKGR1a19pbnQzMl90KSAoKGR1a191aW50MzJfdCkg dmFsIDw8IERVS19CQ19MRElOVFhfU0hJRlQpICsgKGR1a19pbnQzMl90KSBEVUtfREVDX0JDKGlu cyk7ICAvKiBubyBiaWFzICovCisJCQlEVUtfVFZBTF9TRVRfSTMyX1VQRFJFRih0aHIsIHR2MSwg dmFsKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCQkJYnJlYWs7CisJCX0KKyNlbmRpZiAgLyogRFVL X1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19QUkVG RVJfU0laRSkKKwkJY2FzZSBEVUtfT1BfTERUSElTOiB7CisJCQlkdWtfcHVzaF90aGlzKHRocik7 CisJCQlEVUtfX1JFUExBQ0VfVE9QX0JDX0JSRUFLKCk7CisJCX0KKwkJY2FzZSBEVUtfT1BfTERV TkRFRjogeworCQkJZHVrX3RvX3VuZGVmaW5lZCh0aHIsIChkdWtfaWR4X3QpIERVS19ERUNfQkMo aW5zKSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9MRE5VTEw6IHsKKwkJCWR1a190 b19udWxsKHRociwgKGR1a19pZHhfdCkgRFVLX0RFQ19CQyhpbnMpKTsKKwkJCWJyZWFrOworCQl9 CisJCWNhc2UgRFVLX09QX0xEVFJVRTogeworCQkJZHVrX3B1c2hfdHJ1ZSh0aHIpOworCQkJRFVL X19SRVBMQUNFX1RPUF9CQ19CUkVBSygpOworCQl9CisJCWNhc2UgRFVLX09QX0xERkFMU0U6IHsK KwkJCWR1a19wdXNoX2ZhbHNlKHRocik7CisJCQlEVUtfX1JFUExBQ0VfVE9QX0JDX0JSRUFLKCk7 CisJCX0KKyNlbHNlICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKwkJY2FzZSBEVUtf T1BfTERUSElTOiB7CisJCQkvKiBOb3RlOiAndGhpcycgbWF5IGJlIGJvdW5kIHRvIGFueSB2YWx1 ZSwgbm90IGp1c3QgYW4gb2JqZWN0ICovCisJCQlkdWtfdHZhbCAqdHYxLCAqdHYyOworCisJCQl0 djEgPSBEVUtfX1JFR1BfQkMoaW5zKTsKKwkJCXR2MiA9IHRoci0+dmFsc3RhY2tfYm90dG9tIC0g MTsgIC8qICd0aGlzIGJpbmRpbmcnIGlzIGp1c3QgdW5kZXIgYm90dG9tICovCisJCQlEVUtfQVNT RVJUKHR2MiA+PSB0aHItPnZhbHN0YWNrKTsKKwkJCURVS19UVkFMX1NFVF9UVkFMX1VQRFJFRl9G QVNUKHRociwgdHYxLCB0djIpOyAgLyogc2lkZSBlZmZlY3RzICovCisJCQlicmVhazsKKwkJfQor CQljYXNlIERVS19PUF9MRFVOREVGOiB7CisJCQlkdWtfdHZhbCAqdHYxOworCisJCQl0djEgPSBE VUtfX1JFR1BfQkMoaW5zKTsKKwkJCURVS19UVkFMX1NFVF9VTkRFRklORURfVVBEUkVGKHRociwg dHYxKTsgIC8qIHNpZGUgZWZmZWN0cyAqLworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1Bf TEROVUxMOiB7CisJCQlkdWtfdHZhbCAqdHYxOworCisJCQl0djEgPSBEVUtfX1JFR1BfQkMoaW5z KTsKKwkJCURVS19UVkFMX1NFVF9OVUxMX1VQRFJFRih0aHIsIHR2MSk7ICAvKiBzaWRlIGVmZmVj dHMgKi8KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0xEVFJVRTogeworCQkJZHVrX3R2 YWwgKnR2MTsKKworCQkJdHYxID0gRFVLX19SRUdQX0JDKGlucyk7CisJCQlEVUtfVFZBTF9TRVRf Qk9PTEVBTl9VUERSRUYodGhyLCB0djEsIDEpOyAgLyogc2lkZSBlZmZlY3RzICovCisJCQlicmVh azsKKwkJfQorCQljYXNlIERVS19PUF9MREZBTFNFOiB7CisJCQlkdWtfdHZhbCAqdHYxOworCisJ CQl0djEgPSBEVUtfX1JFR1BfQkMoaW5zKTsKKwkJCURVS19UVkFMX1NFVF9CT09MRUFOX1VQRFJF Rih0aHIsIHR2MSwgMCk7ICAvKiBzaWRlIGVmZmVjdHMgKi8KKwkJCWJyZWFrOworCQl9CisjZW5k aWYgIC8qIERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSAqLworCisJCWNhc2UgRFVLX09QX0JOT1Q6 IHsKKwkJCWR1a19fdm1fYml0d2lzZV9ub3QodGhyLCBEVUtfREVDX0JDKGlucyksIERVS19ERUNf QShpbnMpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfTE5PVDogeworCQkJZHVr X192bV9sb2dpY2FsX25vdCh0aHIsIERVS19ERUNfQkMoaW5zKSwgRFVLX0RFQ19BKGlucykpOwor CQkJYnJlYWs7CisJCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQor CQljYXNlIERVS19PUF9VTk06CisJCWNhc2UgRFVLX09QX1VOUDogeworCQkJZHVrX192bV9hcml0 aF91bmFyeV9vcCh0aHIsIERVS19ERUNfQkMoaW5zKSwgRFVLX0RFQ19BKGlucyksIG9wKTsKKwkJ CWJyZWFrOworCQl9CisjZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisJCWNh c2UgRFVLX09QX1VOTTogeworCQkJZHVrX192bV9hcml0aF91bmFyeV9vcCh0aHIsIERVS19ERUNf QkMoaW5zKSwgRFVLX0RFQ19BKGlucyksIERVS19PUF9VTk0pOworCQkJYnJlYWs7CisJCX0KKwkJ Y2FzZSBEVUtfT1BfVU5QOiB7CisJCQlkdWtfX3ZtX2FyaXRoX3VuYXJ5X29wKHRociwgRFVLX0RF Q19CQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX1VOUCk7CisJCQlicmVhazsKKwkJfQor I2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKworI2lmIGRlZmluZWQoRFVL X1VTRV9FWEVDX1BSRUZFUl9TSVpFKQorCQljYXNlIERVS19PUF9UWVBFT0Y6IHsKKwkJCWR1a19z bWFsbF91aW50X3Qgc3RyaWR4OworCisJCQlzdHJpZHggPSBkdWtfanNfdHlwZW9mX3N0cmlkeChE VUtfX1JFR1BfQkMoaW5zKSk7CisJCQlEVUtfQVNTRVJUX1NUUklEWF9WQUxJRChzdHJpZHgpOwor CQkJZHVrX3B1c2hfaHN0cmluZ19zdHJpZHgodGhyLCBzdHJpZHgpOworCQkJRFVLX19SRVBMQUNF X1RPUF9BX0JSRUFLKCk7CisJCX0KKyNlbHNlICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUg Ki8KKwkJY2FzZSBEVUtfT1BfVFlQRU9GOiB7CisJCQlkdWtfdHZhbCAqdHY7CisJCQlkdWtfc21h bGxfdWludF90IHN0cmlkeDsKKwkJCWR1a19oc3RyaW5nICpoX3N0cjsKKworCQkJdHYgPSBEVUtf X1JFR1BfQkMoaW5zKTsKKwkJCXN0cmlkeCA9IGR1a19qc190eXBlb2Zfc3RyaWR4KHR2KTsKKwkJ CURVS19BU1NFUlRfU1RSSURYX1ZBTElEKHN0cmlkeCk7CisJCQloX3N0ciA9IERVS19IVEhSRUFE X0dFVF9TVFJJTkcodGhyLCBzdHJpZHgpOworCQkJdHYgPSBEVUtfX1JFR1BfQShpbnMpOworCQkJ RFVLX1RWQUxfU0VUX1NUUklOR19VUERSRUYodGhyLCB0diwgaF9zdHIpOworCQkJYnJlYWs7CisJ CX0KKyNlbmRpZiAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisKKwkJY2FzZSBEVUtf T1BfVFlQRU9GSUQ6IHsKKwkJCWR1a19zbWFsbF91aW50X3Qgc3RyaWR4OworI2lmICFkZWZpbmVk KERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSkKKwkJCWR1a19oc3RyaW5nICpoX3N0cjsKKyNlbmRp ZgorCQkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCWR1a19oc3RyaW5nICpuYW1lOworCQkJZHVr X3R2YWwgKnR2OworCisJCQkvKiBBIC0+IHRhcmdldCByZWdpc3RlcgorCQkJICogQkMgLT4gY29u c3RhbnQgaW5kZXggb2YgaWRlbnRpZmllciBuYW1lCisJCQkgKi8KKworCQkJdHYgPSBEVUtfX0NP TlNUUF9CQyhpbnMpOworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19TVFJJTkcodHYpKTsKKwkJ CW5hbWUgPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsKKwkJCXR2ID0gTlVMTDsgIC8qIGxvb2t1 cCBoYXMgc2lkZSBlZmZlY3RzICovCisJCQlhY3QgPSB0aHItPmNhbGxzdGFja19jdXJyOworCQkJ aWYgKGR1a19qc19nZXR2YXJfYWN0aXZhdGlvbih0aHIsIGFjdCwgbmFtZSwgMCAvKnRocm93Ki8p KSB7CisJCQkJLyogLT4gWy4uLiB2YWwgdGhpc10gKi8KKwkJCQl0diA9IERVS19HRVRfVFZBTF9O RUdJRFgodGhyLCAtMik7CisJCQkJc3RyaWR4ID0gZHVrX2pzX3R5cGVvZl9zdHJpZHgodHYpOwor CQkJCXR2ID0gTlVMTDsgIC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKwkJCQlkdWtfcG9wXzJfdW5z YWZlKHRocik7CisJCQl9IGVsc2UgeworCQkJCS8qIHVucmVzb2x2YWJsZSwgbm8gc3RhY2sgY2hh bmdlcyAqLworCQkJCXN0cmlkeCA9IERVS19TVFJJRFhfTENfVU5ERUZJTkVEOworCQkJfQorCQkJ RFVLX0FTU0VSVF9TVFJJRFhfVkFMSUQoc3RyaWR4KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhF Q19QUkVGRVJfU0laRSkKKwkJCWR1a19wdXNoX2hzdHJpbmdfc3RyaWR4KHRociwgc3RyaWR4KTsK KwkJCURVS19fUkVQTEFDRV9UT1BfQV9CUkVBSygpOworI2Vsc2UgIC8qIERVS19VU0VfRVhFQ19Q UkVGRVJfU0laRSAqLworCQkJaF9zdHIgPSBEVUtfSFRIUkVBRF9HRVRfU1RSSU5HKHRociwgc3Ry aWR4KTsKKwkJCXR2ID0gRFVLX19SRUdQX0EoaW5zKTsKKwkJCURVS19UVkFMX1NFVF9TVFJJTkdf VVBEUkVGKHRociwgdHYsIGhfc3RyKTsKKwkJCWJyZWFrOworI2VuZGlmICAvKiBEVUtfVVNFX0VY RUNfUFJFRkVSX1NJWkUgKi8KKwkJfQorCisJCS8qIEVxdWFsaXR5OiBFNSBTZWN0aW9ucyAxMS45 LjEsIDExLjkuMyAqLworCisjZGVmaW5lIERVS19fRVFfQk9EWShiYXJnLGNhcmcpIHsgXAorCQlk dWtfYm9vbF90IHRtcDsgXAorCQl0bXAgPSBkdWtfanNfZXF1YWxzKHRociwgKGJhcmcpLCAoY2Fy ZykpOyBcCisJCURVS19BU1NFUlQodG1wID09IDAgfHwgdG1wID09IDEpOyBcCisJCURVS19fUkVQ TEFDRV9CT09MX0FfQlJFQUsodG1wKTsgXAorCX0KKyNkZWZpbmUgRFVLX19ORVFfQk9EWShiYXJn LGNhcmcpIHsgXAorCQlkdWtfYm9vbF90IHRtcDsgXAorCQl0bXAgPSBkdWtfanNfZXF1YWxzKHRo ciwgKGJhcmcpLCAoY2FyZykpOyBcCisJCURVS19BU1NFUlQodG1wID09IDAgfHwgdG1wID09IDEp OyBcCisJCXRtcCBePSAxOyBcCisJCURVS19fUkVQTEFDRV9CT09MX0FfQlJFQUsodG1wKTsgXAor CX0KKyNkZWZpbmUgRFVLX19TRVFfQk9EWShiYXJnLGNhcmcpIHsgXAorCQlkdWtfYm9vbF90IHRt cDsgXAorCQl0bXAgPSBkdWtfanNfc3RyaWN0X2VxdWFscygoYmFyZyksIChjYXJnKSk7IFwKKwkJ RFVLX0FTU0VSVCh0bXAgPT0gMCB8fCB0bXAgPT0gMSk7IFwKKwkJRFVLX19SRVBMQUNFX0JPT0xf QV9CUkVBSyh0bXApOyBcCisJfQorI2RlZmluZSBEVUtfX1NORVFfQk9EWShiYXJnLGNhcmcpIHsg XAorCQlkdWtfYm9vbF90IHRtcDsgXAorCQl0bXAgPSBkdWtfanNfc3RyaWN0X2VxdWFscygoYmFy ZyksIChjYXJnKSk7IFwKKwkJRFVLX0FTU0VSVCh0bXAgPT0gMCB8fCB0bXAgPT0gMSk7IFwKKwkJ dG1wIF49IDE7IFwKKwkJRFVLX19SRVBMQUNFX0JPT0xfQV9CUkVBSyh0bXApOyBcCisJfQorI2lm IGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQorCQljYXNlIERVS19PUF9FUV9SUjoK KwkJY2FzZSBEVUtfT1BfRVFfQ1I6CisJCWNhc2UgRFVLX09QX0VRX1JDOgorCQljYXNlIERVS19P UF9FUV9DQzoKKwkJCURVS19fRVFfQk9EWShEVUtfX1JFR0NPTlNUUF9CKGlucyksIERVS19fUkVH Q09OU1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX05FUV9SUjoKKwkJY2FzZSBEVUtfT1BfTkVR X0NSOgorCQljYXNlIERVS19PUF9ORVFfUkM6CisJCWNhc2UgRFVLX09QX05FUV9DQzoKKwkJCURV S19fTkVRX0JPRFkoRFVLX19SRUdDT05TVFBfQihpbnMpLCBEVUtfX1JFR0NPTlNUUF9DKGlucykp OworCQljYXNlIERVS19PUF9TRVFfUlI6CisJCWNhc2UgRFVLX09QX1NFUV9DUjoKKwkJY2FzZSBE VUtfT1BfU0VRX1JDOgorCQljYXNlIERVS19PUF9TRVFfQ0M6CisJCQlEVUtfX1NFUV9CT0RZKERV S19fUkVHQ09OU1RQX0IoaW5zKSwgRFVLX19SRUdDT05TVFBfQyhpbnMpKTsKKwkJY2FzZSBEVUtf T1BfU05FUV9SUjoKKwkJY2FzZSBEVUtfT1BfU05FUV9DUjoKKwkJY2FzZSBEVUtfT1BfU05FUV9S QzoKKwkJY2FzZSBEVUtfT1BfU05FUV9DQzoKKwkJCURVS19fU05FUV9CT0RZKERVS19fUkVHQ09O U1RQX0IoaW5zKSwgRFVLX19SRUdDT05TVFBfQyhpbnMpKTsKKyNlbHNlICAvKiBEVUtfVVNFX0VY RUNfUFJFRkVSX1NJWkUgKi8KKwkJY2FzZSBEVUtfT1BfRVFfUlI6CisJCQlEVUtfX0VRX0JPRFko RFVLX19SRUdQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0VRX0NS OgorCQkJRFVLX19FUV9CT0RZKERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7 CisJCWNhc2UgRFVLX09QX0VRX1JDOgorCQkJRFVLX19FUV9CT0RZKERVS19fUkVHUF9CKGlucyks IERVS19fQ09OU1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0VRX0NDOgorCQkJRFVLX19FUV9C T0RZKERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpKTsKKwkJY2FzZSBEVUtf T1BfTkVRX1JSOgorCQkJRFVLX19ORVFfQk9EWShEVUtfX1JFR1BfQihpbnMpLCBEVUtfX1JFR1Bf QyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfTkVRX0NSOgorCQkJRFVLX19ORVFfQk9EWShEVUtfX0NP TlNUUF9CKGlucyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19PUF9ORVFfUkM6CisJ CQlEVUtfX05FUV9CT0RZKERVS19fUkVHUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7CisJ CWNhc2UgRFVLX09QX05FUV9DQzoKKwkJCURVS19fTkVRX0JPRFkoRFVLX19DT05TVFBfQihpbnMp LCBEVUtfX0NPTlNUUF9DKGlucykpOworCQljYXNlIERVS19PUF9TRVFfUlI6CisJCQlEVUtfX1NF UV9CT0RZKERVS19fUkVHUF9CKGlucyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19P UF9TRVFfQ1I6CisJCQlEVUtfX1NFUV9CT0RZKERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19SRUdQ X0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX1NFUV9SQzoKKwkJCURVS19fU0VRX0JPRFkoRFVLX19S RUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfU0VRX0NDOgor CQkJRFVLX19TRVFfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7 CisJCWNhc2UgRFVLX09QX1NORVFfUlI6CisJCQlEVUtfX1NORVFfQk9EWShEVUtfX1JFR1BfQihp bnMpLCBEVUtfX1JFR1BfQyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfU05FUV9DUjoKKwkJCURVS19f U05FUV9CT0RZKERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7CisJCWNhc2Ug RFVLX09QX1NORVFfUkM6CisJCQlEVUtfX1NORVFfQk9EWShEVUtfX1JFR1BfQihpbnMpLCBEVUtf X0NPTlNUUF9DKGlucykpOworCQljYXNlIERVS19PUF9TTkVRX0NDOgorCQkJRFVLX19TTkVRX0JP RFkoRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOworI2VuZGlmICAvKiBE VUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKworI2RlZmluZSBEVUtfX0NPTVBBUkVfQk9EWShh cmcxLGFyZzIsZmxhZ3MpIHsgXAorCQlkdWtfYm9vbF90IHRtcDsgXAorCQl0bXAgPSBkdWtfanNf Y29tcGFyZV9oZWxwZXIodGhyLCAoYXJnMSksIChhcmcyKSwgKGZsYWdzKSk7IFwKKwkJRFVLX0FT U0VSVCh0bXAgPT0gMCB8fCB0bXAgPT0gMSk7IFwKKwkJRFVLX19SRVBMQUNFX0JPT0xfQV9CUkVB Syh0bXApOyBcCisJfQorI2RlZmluZSBEVUtfX0dUX0JPRFkoYmFyZyxjYXJnKSBEVUtfX0NPTVBB UkVfQk9EWSgoY2FyZyksIChiYXJnKSwgMCkKKyNkZWZpbmUgRFVLX19HRV9CT0RZKGJhcmcsY2Fy ZykgRFVLX19DT01QQVJFX0JPRFkoKGJhcmcpLCAoY2FyZyksIERVS19DT01QQVJFX0ZMQUdfRVZB TF9MRUZUX0ZJUlNUIHwgRFVLX0NPTVBBUkVfRkxBR19ORUdBVEUpCisjZGVmaW5lIERVS19fTFRf Qk9EWShiYXJnLGNhcmcpIERVS19fQ09NUEFSRV9CT0RZKChiYXJnKSwgKGNhcmcpLCBEVUtfQ09N UEFSRV9GTEFHX0VWQUxfTEVGVF9GSVJTVCkKKyNkZWZpbmUgRFVLX19MRV9CT0RZKGJhcmcsY2Fy ZykgRFVLX19DT01QQVJFX0JPRFkoKGNhcmcpLCAoYmFyZyksIERVS19DT01QQVJFX0ZMQUdfTkVH QVRFKQorI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQorCQljYXNlIERVS19P UF9HVF9SUjoKKwkJY2FzZSBEVUtfT1BfR1RfQ1I6CisJCWNhc2UgRFVLX09QX0dUX1JDOgorCQlj YXNlIERVS19PUF9HVF9DQzoKKwkJCURVS19fR1RfQk9EWShEVUtfX1JFR0NPTlNUUF9CKGlucyks IERVS19fUkVHQ09OU1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0dFX1JSOgorCQljYXNlIERV S19PUF9HRV9DUjoKKwkJY2FzZSBEVUtfT1BfR0VfUkM6CisJCWNhc2UgRFVLX09QX0dFX0NDOgor CQkJRFVLX19HRV9CT0RZKERVS19fUkVHQ09OU1RQX0IoaW5zKSwgRFVLX19SRUdDT05TVFBfQyhp bnMpKTsKKwkJY2FzZSBEVUtfT1BfTFRfUlI6CisJCWNhc2UgRFVLX09QX0xUX0NSOgorCQljYXNl IERVS19PUF9MVF9SQzoKKwkJY2FzZSBEVUtfT1BfTFRfQ0M6CisJCQlEVUtfX0xUX0JPRFkoRFVL X19SRUdDT05TVFBfQihpbnMpLCBEVUtfX1JFR0NPTlNUUF9DKGlucykpOworCQljYXNlIERVS19P UF9MRV9SUjoKKwkJY2FzZSBEVUtfT1BfTEVfQ1I6CisJCWNhc2UgRFVLX09QX0xFX1JDOgorCQlj YXNlIERVS19PUF9MRV9DQzoKKwkJCURVS19fTEVfQk9EWShEVUtfX1JFR0NPTlNUUF9CKGlucyks IERVS19fUkVHQ09OU1RQX0MoaW5zKSk7CisjZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9T SVpFICovCisJCWNhc2UgRFVLX09QX0dUX1JSOgorCQkJRFVLX19HVF9CT0RZKERVS19fUkVHUF9C KGlucyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19PUF9HVF9DUjoKKwkJCURVS19f R1RfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERV S19PUF9HVF9SQzoKKwkJCURVS19fR1RfQk9EWShEVUtfX1JFR1BfQihpbnMpLCBEVUtfX0NPTlNU UF9DKGlucykpOworCQljYXNlIERVS19PUF9HVF9DQzoKKwkJCURVS19fR1RfQk9EWShEVUtfX0NP TlNUUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0dFX1JSOgor CQkJRFVLX19HRV9CT0RZKERVS19fUkVHUF9CKGlucyksIERVS19fUkVHUF9DKGlucykpOworCQlj YXNlIERVS19PUF9HRV9DUjoKKwkJCURVS19fR0VfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERV S19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19PUF9HRV9SQzoKKwkJCURVS19fR0VfQk9EWShE VUtfX1JFR1BfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOworCQljYXNlIERVS19PUF9HRV9D QzoKKwkJCURVS19fR0VfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5z KSk7CisJCWNhc2UgRFVLX09QX0xUX1JSOgorCQkJRFVLX19MVF9CT0RZKERVS19fUkVHUF9CKGlu cyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19PUF9MVF9DUjoKKwkJCURVS19fTFRf Qk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19P UF9MVF9SQzoKKwkJCURVS19fTFRfQk9EWShEVUtfX1JFR1BfQihpbnMpLCBEVUtfX0NPTlNUUF9D KGlucykpOworCQljYXNlIERVS19PUF9MVF9DQzoKKwkJCURVS19fTFRfQk9EWShEVUtfX0NPTlNU UF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0xFX1JSOgorCQkJ RFVLX19MRV9CT0RZKERVS19fUkVHUF9CKGlucyksIERVS19fUkVHUF9DKGlucykpOworCQljYXNl IERVS19PUF9MRV9DUjoKKwkJCURVS19fTEVfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19f UkVHUF9DKGlucykpOworCQljYXNlIERVS19PUF9MRV9SQzoKKwkJCURVS19fTEVfQk9EWShEVUtf X1JFR1BfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOworCQljYXNlIERVS19PUF9MRV9DQzoK KwkJCURVS19fTEVfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7 CisjZW5kaWYgIC8qIERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSAqLworCisJCS8qIE5vIHNpemUg b3B0aW1pemVkIHZhcmlhbnQgYXQgcHJlc2VudCBmb3IgSUYuICovCisJCWNhc2UgRFVLX09QX0lG VFJVRV9SOiB7CisJCQlpZiAoZHVrX2pzX3RvYm9vbGVhbihEVUtfX1JFR1BfQkMoaW5zKSkgIT0g MCkgeworCQkJCWN1cnJfcGMrKzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09Q X0lGVFJVRV9DOiB7CisJCQlpZiAoZHVrX2pzX3RvYm9vbGVhbihEVUtfX0NPTlNUUF9CQyhpbnMp KSAhPSAwKSB7CisJCQkJY3Vycl9wYysrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBE VUtfT1BfSUZGQUxTRV9SOiB7CisJCQlpZiAoZHVrX2pzX3RvYm9vbGVhbihEVUtfX1JFR1BfQkMo aW5zKSkgPT0gMCkgeworCQkJCWN1cnJfcGMrKzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNh c2UgRFVLX09QX0lGRkFMU0VfQzogeworCQkJaWYgKGR1a19qc190b2Jvb2xlYW4oRFVLX19DT05T VFBfQkMoaW5zKSkgPT0gMCkgeworCQkJCWN1cnJfcGMrKzsKKwkJCX0KKwkJCWJyZWFrOworCQl9 CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSkKKwkJY2FzZSBEVUtfT1Bf QUREX1JSOgorCQljYXNlIERVS19PUF9BRERfQ1I6CisJCWNhc2UgRFVLX09QX0FERF9SQzoKKwkJ Y2FzZSBEVUtfT1BfQUREX0NDOiB7CisJCQkvKiBYWFg6IGNvdWxkIGxlYXZlIHZhbHVlIG9uIHN0 YWNrIHRvcCBhbmQgZ290byByZXBsYWNlX3RvcF9hOyAqLworCQkJZHVrX192bV9hcml0aF9hZGQo dGhyLCBEVUtfX1JFR0NPTlNUUF9CKGlucyksIERVS19fUkVHQ09OU1RQX0MoaW5zKSwgRFVLX0RF Q19BKGlucykpOworCQkJYnJlYWs7CisJCX0KKyNlbHNlICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVS X1NJWkUgKi8KKwkJY2FzZSBEVUtfT1BfQUREX1JSOiB7CisJCQlkdWtfX3ZtX2FyaXRoX2FkZCh0 aHIsIERVS19fUkVHUF9CKGlucyksIERVS19fUkVHUF9DKGlucyksIERVS19ERUNfQShpbnMpKTsK KwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0FERF9DUjogeworCQkJZHVrX192bV9hcml0 aF9hZGQodGhyLCBEVUtfX0NPTlNUUF9CKGlucyksIERVS19fUkVHUF9DKGlucyksIERVS19ERUNf QShpbnMpKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0FERF9SQzogeworCQkJZHVr X192bV9hcml0aF9hZGQodGhyLCBEVUtfX1JFR1BfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyks IERVS19ERUNfQShpbnMpKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0FERF9DQzog eworCQkJZHVrX192bV9hcml0aF9hZGQodGhyLCBEVUtfX0NPTlNUUF9CKGlucyksIERVS19fQ09O U1RQX0MoaW5zKSwgRFVLX0RFQ19BKGlucykpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZiAgLyog RFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19Q UkVGRVJfU0laRSkKKwkJY2FzZSBEVUtfT1BfU1VCX1JSOgorCQljYXNlIERVS19PUF9TVUJfQ1I6 CisJCWNhc2UgRFVLX09QX1NVQl9SQzoKKwkJY2FzZSBEVUtfT1BfU1VCX0NDOgorCQljYXNlIERV S19PUF9NVUxfUlI6CisJCWNhc2UgRFVLX09QX01VTF9DUjoKKwkJY2FzZSBEVUtfT1BfTVVMX1JD OgorCQljYXNlIERVS19PUF9NVUxfQ0M6CisJCWNhc2UgRFVLX09QX0RJVl9SUjoKKwkJY2FzZSBE VUtfT1BfRElWX0NSOgorCQljYXNlIERVS19PUF9ESVZfUkM6CisJCWNhc2UgRFVLX09QX0RJVl9D QzoKKwkJY2FzZSBEVUtfT1BfTU9EX1JSOgorCQljYXNlIERVS19PUF9NT0RfQ1I6CisJCWNhc2Ug RFVLX09QX01PRF9SQzoKKwkJY2FzZSBEVUtfT1BfTU9EX0NDOgorI2lmIGRlZmluZWQoRFVLX1VT RV9FUzdfRVhQX09QRVJBVE9SKQorCQljYXNlIERVS19PUF9FWFBfUlI6CisJCWNhc2UgRFVLX09Q X0VYUF9DUjoKKwkJY2FzZSBEVUtfT1BfRVhQX1JDOgorCQljYXNlIERVS19PUF9FWFBfQ0M6Cisj ZW5kaWYgIC8qIERVS19VU0VfRVM3X0VYUF9PUEVSQVRPUiAqLworCQl7CisJCQkvKiBYWFg6IGNv dWxkIGxlYXZlIHZhbHVlIG9uIHN0YWNrIHRvcCBhbmQgZ290byByZXBsYWNlX3RvcF9hOyAqLwor CQkJZHVrX192bV9hcml0aF9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR0NPTlNUUF9CKGlucyksIERV S19fUkVHQ09OU1RQX0MoaW5zKSwgRFVLX0RFQ19BKGlucyksIG9wKTsKKwkJCWJyZWFrOworCQl9 CisjZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisJCWNhc2UgRFVLX09QX1NV Ql9SUjogeworCQkJZHVrX192bV9hcml0aF9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMp LCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX1NVQik7CisJCQlicmVh azsKKwkJfQorCQljYXNlIERVS19PUF9TVUJfQ1I6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5 X29wKHRociwgRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0Eo aW5zKSwgRFVLX09QX1NVQik7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9TVUJfUkM6 IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVL X19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX1NVQik7CisJCQlicmVhazsK KwkJfQorCQljYXNlIERVS19PUF9TVUJfQ0M6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29w KHRociwgRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyksIERVS19ERUNfQShp bnMpLCBEVUtfT1BfU1VCKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX01VTF9SUjog eworCQkJZHVrX192bV9hcml0aF9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMpLCBEVUtf X1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX01VTCk7CisJCQlicmVhazsKKwkJ fQorCQljYXNlIERVS19PUF9NVUxfQ1I6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRo ciwgRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwg RFVLX09QX01VTCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9NVUxfUkM6IHsKKwkJ CWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19DT05T VFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX01VTCk7CisJCQlicmVhazsKKwkJfQor CQljYXNlIERVS19PUF9NVUxfQ0M6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwg RFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBE VUtfT1BfTVVMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0RJVl9SUjogeworCQkJ ZHVrX192bV9hcml0aF9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMpLCBEVUtfX1JFR1Bf QyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0RJVik7CisJCQlicmVhazsKKwkJfQorCQlj YXNlIERVS19PUF9ESVZfQ1I6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVL X19DT05TVFBfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09Q X0RJVik7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9ESVZfUkM6IHsKKwkJCWR1a19f dm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhp bnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0RJVik7CisJCQlicmVhazsKKwkJfQorCQljYXNl IERVS19PUF9ESVZfQ0M6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19D T05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBEVUtfT1Bf RElWKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX01PRF9SUjogeworCQkJZHVrX192 bV9hcml0aF9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMp LCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX01PRCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERV S19PUF9NT0RfQ1I6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19DT05T VFBfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX01PRCk7 CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9NT0RfUkM6IHsKKwkJCWR1a19fdm1fYXJp dGhfYmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpLCBE VUtfREVDX0EoaW5zKSwgRFVLX09QX01PRCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19P UF9NT0RfQ0M6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19DT05TVFBf QihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBEVUtfT1BfTU9EKTsK KwkJCWJyZWFrOworCQl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0VTN19FWFBfT1BFUkFUT1IpCisJ CWNhc2UgRFVLX09QX0VYUF9SUjogeworCQkJZHVrX192bV9hcml0aF9iaW5hcnlfb3AodGhyLCBE VUtfX1JFR1BfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09Q X0VYUCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9FWFBfQ1I6IHsKKwkJCWR1a19f dm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX1JFR1BfQyhp bnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0VYUCk7CisJCQlicmVhazsKKwkJfQorCQljYXNl IERVS19PUF9FWFBfUkM6IHsKKwkJCWR1a19fdm1fYXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19S RUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0VY UCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9FWFBfQ0M6IHsKKwkJCWR1a19fdm1f YXJpdGhfYmluYXJ5X29wKHRociwgRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlu cyksIERVS19ERUNfQShpbnMpLCBEVUtfT1BfRVhQKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYg IC8qIERVS19VU0VfRVM3X0VYUF9PUEVSQVRPUiAqLworI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNf UFJFRkVSX1NJWkUgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQor CQljYXNlIERVS19PUF9CQU5EX1JSOgorCQljYXNlIERVS19PUF9CQU5EX0NSOgorCQljYXNlIERV S19PUF9CQU5EX1JDOgorCQljYXNlIERVS19PUF9CQU5EX0NDOgorCQljYXNlIERVS19PUF9CT1Jf UlI6CisJCWNhc2UgRFVLX09QX0JPUl9DUjoKKwkJY2FzZSBEVUtfT1BfQk9SX1JDOgorCQljYXNl IERVS19PUF9CT1JfQ0M6CisJCWNhc2UgRFVLX09QX0JYT1JfUlI6CisJCWNhc2UgRFVLX09QX0JY T1JfQ1I6CisJCWNhc2UgRFVLX09QX0JYT1JfUkM6CisJCWNhc2UgRFVLX09QX0JYT1JfQ0M6CisJ CWNhc2UgRFVLX09QX0JBU0xfUlI6CisJCWNhc2UgRFVLX09QX0JBU0xfQ1I6CisJCWNhc2UgRFVL X09QX0JBU0xfUkM6CisJCWNhc2UgRFVLX09QX0JBU0xfQ0M6CisJCWNhc2UgRFVLX09QX0JMU1Jf UlI6CisJCWNhc2UgRFVLX09QX0JMU1JfQ1I6CisJCWNhc2UgRFVLX09QX0JMU1JfUkM6CisJCWNh c2UgRFVLX09QX0JMU1JfQ0M6CisJCWNhc2UgRFVLX09QX0JBU1JfUlI6CisJCWNhc2UgRFVLX09Q X0JBU1JfQ1I6CisJCWNhc2UgRFVLX09QX0JBU1JfUkM6CisJCWNhc2UgRFVLX09QX0JBU1JfQ0M6 IHsKKwkJCS8qIFhYWDogY291bGQgbGVhdmUgdmFsdWUgb24gc3RhY2sgdG9wIGFuZCBnb3RvIHJl cGxhY2VfdG9wX2E7ICovCisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5X29wKHRociwgRFVLX19S RUdDT05TVFBfQihpbnMpLCBEVUtfX1JFR0NPTlNUUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBv cCk7CisJCQlicmVhazsKKwkJfQorI2Vsc2UgIC8qIERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSAq LworCQljYXNlIERVS19PUF9CQU5EX1JSOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5X29w KHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSwgRFVLX0RFQ19BKGlucyks IERVS19PUF9CQU5EKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0JBTkRfQ1I6IHsK KwkJCWR1a19fdm1fYml0d2lzZV9iaW5hcnlfb3AodGhyLCBEVUtfX0NPTlNUUF9CKGlucyksIERV S19fUkVHUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBEVUtfT1BfQkFORCk7CisJCQlicmVhazsK KwkJfQorCQljYXNlIERVS19PUF9CQU5EX1JDOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5 X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0Eo aW5zKSwgRFVLX09QX0JBTkQpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfQkFORF9D QzogeworCQkJZHVrX192bV9iaXR3aXNlX2JpbmFyeV9vcCh0aHIsIERVS19fQ09OU1RQX0IoaW5z KSwgRFVLX19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JBTkQpOworCQkJ YnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfQk9SX1JSOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2Vf YmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSwgRFVLX0RF Q19BKGlucyksIERVS19PUF9CT1IpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfQk9S X0NSOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5X29wKHRociwgRFVLX19DT05TVFBfQihp bnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JPUik7CisJCQli cmVhazsKKwkJfQorCQljYXNlIERVS19PUF9CT1JfUkM6IHsKKwkJCWR1a19fdm1fYml0d2lzZV9i aW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyksIERVS19E RUNfQShpbnMpLCBEVUtfT1BfQk9SKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0JP Ul9DQzogeworCQkJZHVrX192bV9iaXR3aXNlX2JpbmFyeV9vcCh0aHIsIERVS19fQ09OU1RQX0Io aW5zKSwgRFVLX19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JPUik7CisJ CQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9CWE9SX1JSOiB7CisJCQlkdWtfX3ZtX2JpdHdp c2VfYmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSwgRFVL X0RFQ19BKGlucyksIERVS19PUF9CWE9SKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09Q X0JYT1JfQ1I6IHsKKwkJCWR1a19fdm1fYml0d2lzZV9iaW5hcnlfb3AodGhyLCBEVUtfX0NPTlNU UF9CKGlucyksIERVS19fUkVHUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBEVUtfT1BfQlhPUik7 CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9CWE9SX1JDOiB7CisJCQlkdWtfX3ZtX2Jp dHdpc2VfYmluYXJ5X29wKHRociwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMp LCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JYT1IpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBE VUtfT1BfQlhPUl9DQzogeworCQkJZHVrX192bV9iaXR3aXNlX2JpbmFyeV9vcCh0aHIsIERVS19f Q09OU1RQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09Q X0JYT1IpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfQkFTTF9SUjogeworCQkJZHVr X192bV9iaXR3aXNlX2JpbmFyeV9vcCh0aHIsIERVS19fUkVHUF9CKGlucyksIERVS19fUkVHUF9D KGlucyksIERVS19ERUNfQShpbnMpLCBEVUtfT1BfQkFTTCk7CisJCQlicmVhazsKKwkJfQorCQlj YXNlIERVS19PUF9CQVNMX0NSOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5X29wKHRociwg RFVLX19DT05TVFBfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVL X09QX0JBU0wpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfQkFTTF9SQzogeworCQkJ ZHVrX192bV9iaXR3aXNlX2JpbmFyeV9vcCh0aHIsIERVS19fUkVHUF9CKGlucyksIERVS19fQ09O U1RQX0MoaW5zKSwgRFVLX0RFQ19BKGlucyksIERVS19PUF9CQVNMKTsKKwkJCWJyZWFrOworCQl9 CisJCWNhc2UgRFVLX09QX0JBU0xfQ0M6IHsKKwkJCWR1a19fdm1fYml0d2lzZV9iaW5hcnlfb3Ao dGhyLCBEVUtfX0NPTlNUUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSwgRFVLX0RFQ19BKGlu cyksIERVS19PUF9CQVNMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0JMU1JfUlI6 IHsKKwkJCWR1a19fdm1fYml0d2lzZV9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMpLCBE VUtfX1JFR1BfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JMU1IpOworCQkJYnJlYWs7 CisJCX0KKwkJY2FzZSBEVUtfT1BfQkxTUl9DUjogeworCQkJZHVrX192bV9iaXR3aXNlX2JpbmFy eV9vcCh0aHIsIERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSwgRFVLX0RFQ19B KGlucyksIERVS19PUF9CTFNSKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0JMU1Jf UkM6IHsKKwkJCWR1a19fdm1fYml0d2lzZV9iaW5hcnlfb3AodGhyLCBEVUtfX1JFR1BfQihpbnMp LCBEVUtfX0NPTlNUUF9DKGlucyksIERVS19ERUNfQShpbnMpLCBEVUtfT1BfQkxTUik7CisJCQli cmVhazsKKwkJfQorCQljYXNlIERVS19PUF9CTFNSX0NDOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2Vf YmluYXJ5X29wKHRociwgRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucyksIERV S19ERUNfQShpbnMpLCBEVUtfT1BfQkxTUik7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19P UF9CQVNSX1JSOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5X29wKHRociwgRFVLX19SRUdQ X0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSwgRFVLX0RFQ19BKGlucyksIERVS19PUF9CQVNSKTsK KwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX0JBU1JfQ1I6IHsKKwkJCWR1a19fdm1fYml0 d2lzZV9iaW5hcnlfb3AodGhyLCBEVUtfX0NPTlNUUF9CKGlucyksIERVS19fUkVHUF9DKGlucyks IERVS19ERUNfQShpbnMpLCBEVUtfT1BfQkFTUik7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERV S19PUF9CQVNSX1JDOiB7CisJCQlkdWtfX3ZtX2JpdHdpc2VfYmluYXJ5X29wKHRociwgRFVLX19S RUdQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JB U1IpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfQkFTUl9DQzogeworCQkJZHVrX192 bV9iaXR3aXNlX2JpbmFyeV9vcCh0aHIsIERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19DT05TVFBf QyhpbnMpLCBEVUtfREVDX0EoaW5zKSwgRFVLX09QX0JBU1IpOworCQkJYnJlYWs7CisJCX0KKyNl bmRpZiAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisKKwkJLyogRm9yIElOU1RPRiBh bmQgSU4sIEIgaXMgYWx3YXlzIGEgcmVnaXN0ZXIuICovCisjZGVmaW5lIERVS19fSU5TVE9GX0JP RFkoYmFyZyxjYXJnKSB7IFwKKwkJZHVrX2Jvb2xfdCB0bXA7IFwKKwkJdG1wID0gZHVrX2pzX2lu c3RhbmNlb2YodGhyLCAoYmFyZyksIChjYXJnKSk7IFwKKwkJRFVLX0FTU0VSVCh0bXAgPT0gMCB8 fCB0bXAgPT0gMSk7IFwKKwkJRFVLX19SRVBMQUNFX0JPT0xfQV9CUkVBSyh0bXApOyBcCisJfQor I2RlZmluZSBEVUtfX0lOX0JPRFkoYmFyZyxjYXJnKSB7IFwKKwkJZHVrX2Jvb2xfdCB0bXA7IFwK KwkJdG1wID0gZHVrX2pzX2luKHRociwgKGJhcmcpLCAoY2FyZykpOyBcCisJCURVS19BU1NFUlQo dG1wID09IDAgfHwgdG1wID09IDEpOyBcCisJCURVS19fUkVQTEFDRV9CT09MX0FfQlJFQUsodG1w KTsgXAorCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSkKKwkJY2FzZSBE VUtfT1BfSU5TVE9GX1JSOgorCQljYXNlIERVS19PUF9JTlNUT0ZfQ1I6CisJCWNhc2UgRFVLX09Q X0lOU1RPRl9SQzoKKwkJY2FzZSBEVUtfT1BfSU5TVE9GX0NDOgorCQkJRFVLX19JTlNUT0ZfQk9E WShEVUtfX1JFR0NPTlNUUF9CKGlucyksIERVS19fUkVHQ09OU1RQX0MoaW5zKSk7CisJCWNhc2Ug RFVLX09QX0lOX1JSOgorCQljYXNlIERVS19PUF9JTl9DUjoKKwkJY2FzZSBEVUtfT1BfSU5fUkM6 CisJCWNhc2UgRFVLX09QX0lOX0NDOgorCQkJRFVLX19JTl9CT0RZKERVS19fUkVHQ09OU1RQX0Io aW5zKSwgRFVLX19SRUdDT05TVFBfQyhpbnMpKTsKKyNlbHNlICAvKiBEVUtfVVNFX0VYRUNfUFJF RkVSX1NJWkUgKi8KKwkJY2FzZSBEVUtfT1BfSU5TVE9GX1JSOgorCQkJRFVLX19JTlNUT0ZfQk9E WShEVUtfX1JFR1BfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfSU5T VE9GX0NSOgorCQkJRFVLX19JTlNUT0ZfQk9EWShEVUtfX0NPTlNUUF9CKGlucyksIERVS19fUkVH UF9DKGlucykpOworCQljYXNlIERVS19PUF9JTlNUT0ZfUkM6CisJCQlEVUtfX0lOU1RPRl9CT0RZ KERVS19fUkVHUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0lO U1RPRl9DQzoKKwkJCURVS19fSU5TVE9GX0JPRFkoRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NP TlNUUF9DKGlucykpOworCQljYXNlIERVS19PUF9JTl9SUjoKKwkJCURVS19fSU5fQk9EWShEVUtf X1JFR1BfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfSU5fQ1I6CisJ CQlEVUtfX0lOX0JPRFkoRFVLX19DT05TVFBfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpKTsKKwkJ Y2FzZSBEVUtfT1BfSU5fUkM6CisJCQlEVUtfX0lOX0JPRFkoRFVLX19SRUdQX0IoaW5zKSwgRFVL X19DT05TVFBfQyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfSU5fQ0M6CisJCQlEVUtfX0lOX0JPRFko RFVLX19DT05TVFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOworI2VuZGlmICAvKiBEVUtf VVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKworCQkvKiBQcmUvcG9zdCBpbmMvZGVjIGZvciByZWdp c3RlciB2YXJpYWJsZXMsIGltcG9ydGFudCBmb3IgbG9vcHMuICovCisjaWYgZGVmaW5lZChEVUtf VVNFX0VYRUNfUFJFRkVSX1NJWkUpCisJCWNhc2UgRFVLX09QX1BSRUlOQ1I6CisJCWNhc2UgRFVL X09QX1BSRURFQ1I6CisJCWNhc2UgRFVLX09QX1BPU1RJTkNSOgorCQljYXNlIERVS19PUF9QT1NU REVDUjogeworCQkJZHVrX19wcmVwb3N0X2luY2RlY19yZWdfaGVscGVyKHRociwgRFVLX19SRUdQ X0EoaW5zKSwgRFVLX19SRUdQX0JDKGlucyksIG9wKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2Ug RFVLX09QX1BSRUlOQ1Y6CisJCWNhc2UgRFVLX09QX1BSRURFQ1Y6CisJCWNhc2UgRFVLX09QX1BP U1RJTkNWOgorCQljYXNlIERVS19PUF9QT1NUREVDVjogeworCQkJZHVrX19wcmVwb3N0X2luY2Rl Y192YXJfaGVscGVyKHRociwgRFVLX0RFQ19BKGlucyksIERVS19fQ09OU1RQX0JDKGlucyksIG9w LCBEVUtfX1NUUklDVCgpKTsKKwkJCWJyZWFrOworCQl9CisjZWxzZSAgLyogRFVLX1VTRV9FWEVD X1BSRUZFUl9TSVpFICovCisJCWNhc2UgRFVLX09QX1BSRUlOQ1I6IHsKKwkJCWR1a19fcHJlcG9z dF9pbmNkZWNfcmVnX2hlbHBlcih0aHIsIERVS19fUkVHUF9BKGlucyksIERVS19fUkVHUF9CQyhp bnMpLCBEVUtfT1BfUFJFSU5DUik7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19PUF9QUkVE RUNSOiB7CisJCQlkdWtfX3ByZXBvc3RfaW5jZGVjX3JlZ19oZWxwZXIodGhyLCBEVUtfX1JFR1Bf QShpbnMpLCBEVUtfX1JFR1BfQkMoaW5zKSwgRFVLX09QX1BSRURFQ1IpOworCQkJYnJlYWs7CisJ CX0KKwkJY2FzZSBEVUtfT1BfUE9TVElOQ1I6IHsKKwkJCWR1a19fcHJlcG9zdF9pbmNkZWNfcmVn X2hlbHBlcih0aHIsIERVS19fUkVHUF9BKGlucyksIERVS19fUkVHUF9CQyhpbnMpLCBEVUtfT1Bf UE9TVElOQ1IpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfT1BfUE9TVERFQ1I6IHsKKwkJ CWR1a19fcHJlcG9zdF9pbmNkZWNfcmVnX2hlbHBlcih0aHIsIERVS19fUkVHUF9BKGlucyksIERV S19fUkVHUF9CQyhpbnMpLCBEVUtfT1BfUE9TVERFQ1IpOworCQkJYnJlYWs7CisJCX0KKwkJY2Fz ZSBEVUtfT1BfUFJFSU5DVjogeworCQkJZHVrX19wcmVwb3N0X2luY2RlY192YXJfaGVscGVyKHRo ciwgRFVLX0RFQ19BKGlucyksIERVS19fQ09OU1RQX0JDKGlucyksIERVS19PUF9QUkVJTkNWLCBE VUtfX1NUUklDVCgpKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX09QX1BSRURFQ1Y6IHsK KwkJCWR1a19fcHJlcG9zdF9pbmNkZWNfdmFyX2hlbHBlcih0aHIsIERVS19ERUNfQShpbnMpLCBE VUtfX0NPTlNUUF9CQyhpbnMpLCBEVUtfT1BfUFJFREVDViwgRFVLX19TVFJJQ1QoKSk7CisJCQli cmVhazsKKwkJfQorCQljYXNlIERVS19PUF9QT1NUSU5DVjogeworCQkJZHVrX19wcmVwb3N0X2lu Y2RlY192YXJfaGVscGVyKHRociwgRFVLX0RFQ19BKGlucyksIERVS19fQ09OU1RQX0JDKGlucyks IERVS19PUF9QT1NUSU5DViwgRFVLX19TVFJJQ1QoKSk7CisJCQlicmVhazsKKwkJfQorCQljYXNl IERVS19PUF9QT1NUREVDVjogeworCQkJZHVrX19wcmVwb3N0X2luY2RlY192YXJfaGVscGVyKHRo ciwgRFVLX0RFQ19BKGlucyksIERVS19fQ09OU1RQX0JDKGlucyksIERVS19PUF9QT1NUREVDViwg RFVLX19TVFJJQ1QoKSk7CisJCQlicmVhazsKKwkJfQorI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNf UFJFRkVSX1NJWkUgKi8KKworCQkvKiBYWFg6IE1vdmUgdG8gc2VwYXJhdGUgaGVscGVyLCBvcHRp bWl6ZSBmb3IgcGVyZi9zaXplIHNlcGFyYXRlbHkuICovCisJCS8qIFByZWluYy9wcmVkZWMgZm9y IG9iamVjdCBwcm9wZXJ0aWVzLiAqLworCQljYXNlIERVS19PUF9QUkVJTkNQX1JSOgorCQljYXNl IERVS19PUF9QUkVJTkNQX0NSOgorCQljYXNlIERVS19PUF9QUkVJTkNQX1JDOgorCQljYXNlIERV S19PUF9QUkVJTkNQX0NDOgorCQljYXNlIERVS19PUF9QUkVERUNQX1JSOgorCQljYXNlIERVS19P UF9QUkVERUNQX0NSOgorCQljYXNlIERVS19PUF9QUkVERUNQX1JDOgorCQljYXNlIERVS19PUF9Q UkVERUNQX0NDOgorCQljYXNlIERVS19PUF9QT1NUSU5DUF9SUjoKKwkJY2FzZSBEVUtfT1BfUE9T VElOQ1BfQ1I6CisJCWNhc2UgRFVLX09QX1BPU1RJTkNQX1JDOgorCQljYXNlIERVS19PUF9QT1NU SU5DUF9DQzoKKwkJY2FzZSBEVUtfT1BfUE9TVERFQ1BfUlI6CisJCWNhc2UgRFVLX09QX1BPU1RE RUNQX0NSOgorCQljYXNlIERVS19PUF9QT1NUREVDUF9SQzoKKwkJY2FzZSBEVUtfT1BfUE9TVERF Q1BfQ0M6IHsKKwkJCWR1a190dmFsICp0dl9vYmo7CisJCQlkdWtfdHZhbCAqdHZfa2V5OworCQkJ ZHVrX3R2YWwgKnR2X3ZhbDsKKwkJCWR1a19ib29sX3QgcmM7CisJCQlkdWtfZG91YmxlX3QgeCwg eSwgejsKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUpCisJCQlkdWtfdHZh bCAqdHZfZHN0OworI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKworCQkJ LyogQSAtPiB0YXJnZXQgcmVnCisJCQkgKiBCIC0+IG9iamVjdCByZWcvY29uc3QgKG1heSBiZSBj b25zdCBlLmcuIGluICInZm9vJ1sxXSIpCisJCQkgKiBDIC0+IGtleSByZWcvY29uc3QKKwkJCSAq LworCisJCQkvKiBPcGNvZGUgYml0cyAwLTEgYXJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggcmVnL2Nv bnN0IHZhcmlhbnRzLgorCQkJICogT3Bjb2RlIGJpdHMgMi0zIGFyZSB1c2VkIHRvIGRpc3Rpbmd1 aXNoIGluYy9kZWMgdmFyaWFudHM6CisJCQkgKiBCaXQgMiA9IGluYygwKS9kZWMoMSksIGJpdCAz ID0gcHJlKDApL3Bvc3QoMSkuCisJCQkgKi8KKwkJCURVS19BU1NFUlQoKERVS19PUF9QUkVJTkNQ X1JSICYgMHgwYykgPT0gMHgwMCk7CisJCQlEVUtfQVNTRVJUKChEVUtfT1BfUFJFREVDUF9SUiAm IDB4MGMpID09IDB4MDQpOworCQkJRFVLX0FTU0VSVCgoRFVLX09QX1BPU1RJTkNQX1JSICYgMHgw YykgPT0gMHgwOCk7CisJCQlEVUtfQVNTRVJUKChEVUtfT1BfUE9TVERFQ1BfUlIgJiAweDBjKSA9 PSAweDBjKTsKKworCQkJdHZfb2JqID0gRFVLX19SRUdDT05TVFBfQihpbnMpOworCQkJdHZfa2V5 ID0gRFVLX19SRUdDT05TVFBfQyhpbnMpOworCQkJcmMgPSBkdWtfaG9iamVjdF9nZXRwcm9wKHRo ciwgdHZfb2JqLCB0dl9rZXkpOyAgLyogLT4gW3ZhbF0gKi8KKwkJCURVS19VTlJFRihyYyk7ICAv KiBpZ25vcmUgKi8KKwkJCXR2X29iaiA9IE5VTEw7ICAvKiBpbnZhbGlkYXRlZCAqLworCQkJdHZf a2V5ID0gTlVMTDsgIC8qIGludmFsaWRhdGVkICovCisKKwkJCS8qIFhYWDogRmFzdGludCBmYXN0 IHBhdGggd291bGQgYmUgdXNlZnVsIGhlcmUuICBBbHNvIGZhc3RpbnRzCisJCQkgKiBub3cgbG9z ZSB0aGVpciBmYXN0aW50IHN0YXR1cyBpbiBjdXJyZW50IGhhbmRsaW5nIHdoaWNoIGlzCisJCQkg KiBub3QgaW50dWl0aXZlLgorCQkJICovCisKKwkJCXggPSBkdWtfdG9fbnVtYmVyX20xKHRocik7 CisJCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCQkJaWYgKGlucyAmIERVS19CQ19JTkNERUNQX0ZM QUdfREVDKSB7CisJCQkJeSA9IHggLSAxLjA7CisJCQl9IGVsc2UgeworCQkJCXkgPSB4ICsgMS4w OworCQkJfQorCisJCQlkdWtfcHVzaF9udW1iZXIodGhyLCB5KTsKKwkJCXR2X3ZhbCA9IERVS19H RVRfVFZBTF9ORUdJRFgodGhyLCAtMSk7CisJCQlEVUtfQVNTRVJUKHR2X3ZhbCAhPSBOVUxMKTsK KwkJCXR2X29iaiA9IERVS19fUkVHQ09OU1RQX0IoaW5zKTsKKwkJCXR2X2tleSA9IERVS19fUkVH Q09OU1RQX0MoaW5zKTsKKwkJCXJjID0gZHVrX2hvYmplY3RfcHV0cHJvcCh0aHIsIHR2X29iaiwg dHZfa2V5LCB0dl92YWwsIERVS19fU1RSSUNUKCkpOworCQkJRFVLX1VOUkVGKHJjKTsgIC8qIGln bm9yZSAqLworCQkJdHZfb2JqID0gTlVMTDsgIC8qIGludmFsaWRhdGVkICovCisJCQl0dl9rZXkg PSBOVUxMOyAgLyogaW52YWxpZGF0ZWQgKi8KKwkJCWR1a19wb3BfdW5zYWZlKHRocik7CisKKwkJ CXogPSAoaW5zICYgRFVLX0JDX0lOQ0RFQ1BfRkxBR19QT1NUKSA/IHggOiB5OworI2lmIGRlZmlu ZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQorCQkJZHVrX3B1c2hfbnVtYmVyKHRociwgeik7 CisJCQlEVUtfX1JFUExBQ0VfVE9QX0FfQlJFQUsoKTsKKyNlbHNlCisJCQl0dl9kc3QgPSBEVUtf X1JFR1BfQShpbnMpOworCQkJRFVLX1RWQUxfU0VUX05VTUJFUl9VUERSRUYodGhyLCB0dl9kc3Qs IHopOworCQkJYnJlYWs7CisjZW5kaWYKKwkJfQorCisJCS8qIFhYWDogR0VUUFJPUCB3aGVyZSBv YmplY3QgaXMgJ3RoaXMnLCBHRVRQUk9QVD8KKwkJICogT2NjdXJzIHJlbGF0aXZlbHkgb2Z0ZW4g aW4gb2JqZWN0IG9yaWVudGVkIGNvZGUuCisJCSAqLworCisjZGVmaW5lIERVS19fR0VUUFJPUF9C T0RZKGJhcmcsY2FyZykgeyBcCisJCS8qIEEgLT4gdGFyZ2V0IHJlZyBcCisJCSAqIEIgLT4gb2Jq ZWN0IHJlZy9jb25zdCAobWF5IGJlIGNvbnN0IGUuZy4gaW4gIidmb28nWzFdIikgXAorCQkgKiBD IC0+IGtleSByZWcvY29uc3QgXAorCQkgKi8gXAorCQkodm9pZCkgZHVrX2hvYmplY3RfZ2V0cHJv cCh0aHIsIChiYXJnKSwgKGNhcmcpKTsgXAorCQlEVUtfX1JFUExBQ0VfVE9QX0FfQlJFQUsoKTsg XAorCX0KKyNkZWZpbmUgRFVLX19HRVRQUk9QQ19CT0RZKGJhcmcsY2FyZykgeyBcCisJCS8qIFNh bWUgYXMgR0VUUFJPUCBidXQgY2FsbGFiaWxpdHkgY2hlY2sgZm9yIHByb3BlcnR5LWJhc2VkIGNh bGxzLiAqLyBcCisJCWR1a190dmFsICp0dl9fdGFyZzsgXAorCQkodm9pZCkgZHVrX2hvYmplY3Rf Z2V0cHJvcCh0aHIsIChiYXJnKSwgKGNhcmcpKTsgXAorCQlEVUtfR0NfVE9SVFVSRSh0aHItPmhl YXApOyBcCisJCXR2X190YXJnID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0xKTsgXAorCQlp ZiAoRFVLX1VOTElLRUxZKCFkdWtfaXNfY2FsbGFibGVfdHZhbCh0aHIsIHR2X190YXJnKSkpIHsg XAorCQkJLyogSGVyZSB3ZSBpbnRlbnRpb25hbGx5IHJlLWV2YWx1YXRlIHRoZSBtYWNybyBcCisJ CQkgKiBhcmd1bWVudHMgdG8gZGVhbCB3aXRoIHBvdGVudGlhbGx5IGNoYW5nZWQgXAorCQkJICog dmFsc3RhY2sgYmFzZSBwb2ludGVyISBcCisJCQkgKi8gXAorCQkJZHVrX2NhbGxfc2V0dXBfcHJv cGNhbGxfZXJyb3IodGhyLCB0dl9fdGFyZywgKGJhcmcpLCAoY2FyZykpOyBcCisJCX0gXAorCQlE VUtfX1JFUExBQ0VfVE9QX0FfQlJFQUsoKTsgXAorCX0KKyNkZWZpbmUgRFVLX19QVVRQUk9QX0JP RFkoYWFyZyxiYXJnLGNhcmcpIHsgXAorCQkvKiBBIC0+IG9iamVjdCByZWcgXAorCQkgKiBCIC0+ IGtleSByZWcvY29uc3QgXAorCQkgKiBDIC0+IHZhbHVlIHJlZy9jb25zdCBcCisJCSAqIFwKKwkJ ICogTm90ZTogaW50ZW50aW9uYWwgZGlmZmVyZW5jZSB0byByZWdpc3RlciBhcnJhbmdlbWVudCBc CisJCSAqIG9mIGUuZy4gR0VUUFJPUDsgJ0EnIG11c3QgY29udGFpbiBhIHJlZ2lzdGVyLW9ubHkg dmFsdWUuIFwKKwkJICovIFwKKwkJKHZvaWQpIGR1a19ob2JqZWN0X3B1dHByb3AodGhyLCAoYWFy ZyksIChiYXJnKSwgKGNhcmcpLCBEVUtfX1NUUklDVCgpKTsgXAorCQlicmVhazsgXAorCX0KKyNk ZWZpbmUgRFVLX19ERUxQUk9QX0JPRFkoYmFyZyxjYXJnKSB7IFwKKwkJLyogQSAtPiByZXN1bHQg cmVnIFwKKwkJICogQiAtPiBvYmplY3QgcmVnIFwKKwkJICogQyAtPiBrZXkgcmVnL2NvbnN0IFwK KwkJICovIFwKKwkJZHVrX2Jvb2xfdCByYzsgXAorCQlyYyA9IGR1a19ob2JqZWN0X2RlbHByb3Ao dGhyLCAoYmFyZyksIChjYXJnKSwgRFVLX19TVFJJQ1QoKSk7IFwKKwkJRFVLX0FTU0VSVChyYyA9 PSAwIHx8IHJjID09IDEpOyBcCisJCURVS19fUkVQTEFDRV9CT09MX0FfQlJFQUsocmMpOyBcCisJ fQorI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFKQorCQljYXNlIERVS19PUF9H RVRQUk9QX1JSOgorCQljYXNlIERVS19PUF9HRVRQUk9QX0NSOgorCQljYXNlIERVS19PUF9HRVRQ Uk9QX1JDOgorCQljYXNlIERVS19PUF9HRVRQUk9QX0NDOgorCQkJRFVLX19HRVRQUk9QX0JPRFko RFVLX19SRUdDT05TVFBfQihpbnMpLCBEVUtfX1JFR0NPTlNUUF9DKGlucykpOworI2lmIGRlZmlu ZWQoRFVLX1VTRV9WRVJCT1NFX0VSUk9SUykKKwkJY2FzZSBEVUtfT1BfR0VUUFJPUENfUlI6CisJ CWNhc2UgRFVLX09QX0dFVFBST1BDX0NSOgorCQljYXNlIERVS19PUF9HRVRQUk9QQ19SQzoKKwkJ Y2FzZSBEVUtfT1BfR0VUUFJPUENfQ0M6CisJCQlEVUtfX0dFVFBST1BDX0JPRFkoRFVLX19SRUdD T05TVFBfQihpbnMpLCBEVUtfX1JFR0NPTlNUUF9DKGlucykpOworI2VuZGlmCisJCWNhc2UgRFVL X09QX1BVVFBST1BfUlI6CisJCWNhc2UgRFVLX09QX1BVVFBST1BfQ1I6CisJCWNhc2UgRFVLX09Q X1BVVFBST1BfUkM6CisJCWNhc2UgRFVLX09QX1BVVFBST1BfQ0M6CisJCQlEVUtfX1BVVFBST1Bf Qk9EWShEVUtfX1JFR1BfQShpbnMpLCBEVUtfX1JFR0NPTlNUUF9CKGlucyksIERVS19fUkVHQ09O U1RQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0RFTFBST1BfUlI6CisJCWNhc2UgRFVLX09QX0RF TFBST1BfUkM6ICAvKiBCIGlzIGFsd2F5cyByZWcgKi8KKwkJCURVS19fREVMUFJPUF9CT0RZKERV S19fUkVHUF9CKGlucyksIERVS19fUkVHQ09OU1RQX0MoaW5zKSk7CisjZWxzZSAgLyogRFVLX1VT RV9FWEVDX1BSRUZFUl9TSVpFICovCisJCWNhc2UgRFVLX09QX0dFVFBST1BfUlI6CisJCQlEVUtf X0dFVFBST1BfQk9EWShEVUtfX1JFR1BfQihpbnMpLCBEVUtfX1JFR1BfQyhpbnMpKTsKKwkJY2Fz ZSBEVUtfT1BfR0VUUFJPUF9DUjoKKwkJCURVS19fR0VUUFJPUF9CT0RZKERVS19fQ09OU1RQX0Io aW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0dFVFBST1BfUkM6CisJCQlE VUtfX0dFVFBST1BfQk9EWShEVUtfX1JFR1BfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOwor CQljYXNlIERVS19PUF9HRVRQUk9QX0NDOgorCQkJRFVLX19HRVRQUk9QX0JPRFkoRFVLX19DT05T VFBfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOworI2lmIGRlZmluZWQoRFVLX1VTRV9WRVJC T1NFX0VSUk9SUykKKwkJY2FzZSBEVUtfT1BfR0VUUFJPUENfUlI6CisJCQlEVUtfX0dFVFBST1BD X0JPRFkoRFVLX19SRUdQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09Q X0dFVFBST1BDX0NSOgorCQkJRFVLX19HRVRQUk9QQ19CT0RZKERVS19fQ09OU1RQX0IoaW5zKSwg RFVLX19SRUdQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX0dFVFBST1BDX1JDOgorCQkJRFVLX19H RVRQUk9QQ19CT0RZKERVS19fUkVHUF9CKGlucyksIERVS19fQ09OU1RQX0MoaW5zKSk7CisJCWNh c2UgRFVLX09QX0dFVFBST1BDX0NDOgorCQkJRFVLX19HRVRQUk9QQ19CT0RZKERVS19fQ09OU1RQ X0IoaW5zKSwgRFVLX19DT05TVFBfQyhpbnMpKTsKKyNlbmRpZgorCQljYXNlIERVS19PUF9QVVRQ Uk9QX1JSOgorCQkJRFVLX19QVVRQUk9QX0JPRFkoRFVLX19SRUdQX0EoaW5zKSwgRFVLX19SRUdQ X0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7CisJCWNhc2UgRFVLX09QX1BVVFBST1BfQ1I6CisJ CQlEVUtfX1BVVFBST1BfQk9EWShEVUtfX1JFR1BfQShpbnMpLCBEVUtfX0NPTlNUUF9CKGlucyks IERVS19fUkVHUF9DKGlucykpOworCQljYXNlIERVS19PUF9QVVRQUk9QX1JDOgorCQkJRFVLX19Q VVRQUk9QX0JPRFkoRFVLX19SRUdQX0EoaW5zKSwgRFVLX19SRUdQX0IoaW5zKSwgRFVLX19DT05T VFBfQyhpbnMpKTsKKwkJY2FzZSBEVUtfT1BfUFVUUFJPUF9DQzoKKwkJCURVS19fUFVUUFJPUF9C T0RZKERVS19fUkVHUF9BKGlucyksIERVS19fQ09OU1RQX0IoaW5zKSwgRFVLX19DT05TVFBfQyhp bnMpKTsKKwkJY2FzZSBEVUtfT1BfREVMUFJPUF9SUjogIC8qIEIgaXMgYWx3YXlzIHJlZyAqLwor CQkJRFVLX19ERUxQUk9QX0JPRFkoRFVLX19SRUdQX0IoaW5zKSwgRFVLX19SRUdQX0MoaW5zKSk7 CisJCWNhc2UgRFVLX09QX0RFTFBST1BfUkM6CisJCQlEVUtfX0RFTFBST1BfQk9EWShEVUtfX1JF R1BfQihpbnMpLCBEVUtfX0NPTlNUUF9DKGlucykpOworI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNf UFJFRkVSX1NJWkUgKi8KKworCQkvKiBObyBmYXN0IHBhdGggZm9yIERFQ0xWQVIgbm93LCBpdCdz IHF1aXRlIGEgcmFyZSBpbnN0cnVjdGlvbi4gKi8KKwkJY2FzZSBEVUtfT1BfREVDTFZBUl9SUjoK KwkJY2FzZSBEVUtfT1BfREVDTFZBUl9DUjoKKwkJY2FzZSBEVUtfT1BfREVDTFZBUl9SQzoKKwkJ Y2FzZSBEVUtfT1BfREVDTFZBUl9DQzogeworCQkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCWR1 a19zbWFsbF91aW50X2Zhc3RfdCBhID0gRFVLX0RFQ19BKGlucyk7CisJCQlkdWtfdHZhbCAqdHYx OworCQkJZHVrX2hzdHJpbmcgKm5hbWU7CisJCQlkdWtfc21hbGxfdWludF90IHByb3BfZmxhZ3M7 CisJCQlkdWtfYm9vbF90IGlzX2Z1bmNfZGVjbDsKKworCQkJdHYxID0gRFVLX19SRUdDT05TVFBf QihpbnMpOworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19TVFJJTkcodHYxKSk7CisJCQluYW1l ID0gRFVLX1RWQUxfR0VUX1NUUklORyh0djEpOworCQkJRFVLX0FTU0VSVChuYW1lICE9IE5VTEwp OworCisJCQlpc19mdW5jX2RlY2wgPSAoKGEgJiBEVUtfQkNfREVDTFZBUl9GTEFHX0ZVTkNfREVD TCkgIT0gMCk7CisKKwkJCS8qIFhYWDogZGVjbHZhciB0YWtlcyBhbiBkdWtfdHZhbCBwb2ludGVy LCB3aGljaCBpcyBhd2t3YXJkIGFuZAorCQkJICogc2hvdWxkIGJlIHJld29ya2VkLgorCQkJICov CisKKwkJCS8qIENvbXBpbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzZWxlY3RpbmcgcHJvcGVydHkg ZmxhZ3MgKGNvbmZpZ3VyYWJpbGl0eSwKKwkJCSAqIHdyaXRhYmlsaXR5LCBldGMpLgorCQkJICov CisJCQlwcm9wX2ZsYWdzID0gYSAmIERVS19QUk9QREVTQ19GTEFHU19NQVNLOworCisJCQlpZiAo aXNfZnVuY19kZWNsKSB7CisJCQkJZHVrX3B1c2hfdHZhbCh0aHIsIERVS19fUkVHQ09OU1RQX0Mo aW5zKSk7CisJCQl9IGVsc2UgeworCQkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVU5ERUZJTkVE KHRoci0+dmFsc3RhY2tfdG9wKSk7ICAvKiB2YWxzdGFjayBwb2xpY3kgKi8KKwkJCQl0aHItPnZh bHN0YWNrX3RvcCsrOworCQkJfQorCQkJdHYxID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0x KTsKKworCQkJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwkJCWlmIChkdWtfanNfZGVjbHZh cl9hY3RpdmF0aW9uKHRociwgYWN0LCBuYW1lLCB0djEsIHByb3BfZmxhZ3MsIGlzX2Z1bmNfZGVj bCkpIHsKKwkJCQlpZiAoaXNfZnVuY19kZWNsKSB7CisJCQkJCS8qIEFscmVhZHkgZGVjbGFyZWQs IHVwZGF0ZSB2YWx1ZS4gKi8KKwkJCQkJdHYxID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0x KTsKKwkJCQkJZHVrX2pzX3B1dHZhcl9hY3RpdmF0aW9uKHRociwgYWN0LCBuYW1lLCB0djEsIERV S19fU1RSSUNUKCkpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEFscmVhZHkgZGVjbGFyZWQgYnV0 IG5vIGluaXRpYWxpemVyIHZhbHVlCisJCQkJCSAqIChlLmcuICd2YXIgeHl6OycpLCBuby1vcC4K KwkJCQkJICovCisJCQkJfQorCQkJfQorCisJCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCQkJYnJl YWs7CisJCX0KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKwkJLyogVGhl IGNvbXBpbGVyIHNob3VsZCBuZXZlciBlbWl0IERVS19PUF9SRUdFWFAgaWYgdGhlcmUgaXMgbm8K KwkJICogcmVnZXhwIHN1cHBvcnQuCisJCSAqLworCQljYXNlIERVS19PUF9SRUdFWFBfUlI6CisJ CWNhc2UgRFVLX09QX1JFR0VYUF9DUjoKKwkJY2FzZSBEVUtfT1BfUkVHRVhQX1JDOgorCQljYXNl IERVS19PUF9SRUdFWFBfQ0M6IHsKKwkJCS8qIEEgLT4gdGFyZ2V0IHJlZ2lzdGVyCisJCQkgKiBC IC0+IGJ5dGVjb2RlIChhbHNvIGNvbnRhaW5zIGZsYWdzKQorCQkJICogQyAtPiBlc2NhcGVkIHNv dXJjZQorCQkJICovCisKKwkJCWR1a19wdXNoX3R2YWwodGhyLCBEVUtfX1JFR0NPTlNUUF9DKGlu cykpOworCQkJZHVrX3B1c2hfdHZhbCh0aHIsIERVS19fUkVHQ09OU1RQX0IoaW5zKSk7ICAvKiAt PiBbIC4uLiBlc2NhcGVkX3NvdXJjZSBieXRlY29kZSBdICovCisJCQlkdWtfcmVnZXhwX2NyZWF0 ZV9pbnN0YW5jZSh0aHIpOyAgIC8qIC0+IFsgLi4uIHJlZ2V4cF9pbnN0YW5jZSBdICovCisJCQlE VUtfX1JFUExBQ0VfVE9QX0FfQlJFQUsoKTsKKwkJfQorI2VuZGlmICAvKiBEVUtfVVNFX1JFR0VY UF9TVVBQT1JUICovCisKKwkJLyogWFhYOiAnYycgaXMgdW51c2VkLCB1c2Ugd2hvbGUgQkMsIGV0 Yy4gKi8KKwkJY2FzZSBEVUtfT1BfQ1NWQVJfUlI6CisJCWNhc2UgRFVLX09QX0NTVkFSX0NSOgor CQljYXNlIERVS19PUF9DU1ZBUl9SQzoKKwkJY2FzZSBEVUtfT1BfQ1NWQVJfQ0M6IHsKKwkJCS8q IFRoZSBzcGVjaWFsaXR5IG9mIGNhbGxpbmcgdGhyb3VnaCBhIHZhcmlhYmxlIGJpbmRpbmcgaXMg dGhhdCB0aGUKKwkJCSAqICd0aGlzJyB2YWx1ZSBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHZhcmlh YmxlIGxvb2t1cDogRTUgU2VjdGlvbiA2LmIuaS4KKwkJCSAqCisJCQkgKiBUaGUgb25seSAoc3Rh bmRhcmQpIGNhc2Ugd2hlcmUgdGhlICd0aGlzJyBiaW5kaW5nIGlzIG5vbi1udWxsIGlzIHdoZW4K KwkJCSAqICAgKDEpIHRoZSB2YXJpYWJsZSBpcyBmb3VuZCBpbiBhbiBvYmplY3QgZW52aXJvbm1l bnQgcmVjb3JkLCBhbmQKKwkJCSAqICAgKDIpIHRoYXQgb2JqZWN0IGVudmlyb25tZW50IHJlY29y ZCBpcyBhICd3aXRoJyBibG9jay4KKwkJCSAqLworCisJCQlkdWtfYWN0aXZhdGlvbiAqYWN0Owor CQkJZHVrX3VpbnRfZmFzdF90IGlkeDsKKwkJCWR1a190dmFsICp0djE7CisJCQlkdWtfaHN0cmlu ZyAqbmFtZTsKKworCQkJLyogQSAtPiB0YXJnZXQgcmVnaXN0ZXJzIChBLCBBICsgMSkgZm9yIGNh bGwgc2V0dXAKKwkJCSAqIEIgLT4gaWRlbnRpZmllciBuYW1lLCB1c3VhbGx5IGNvbnN0YW50IGJ1 dCBjYW4gYmUgYSByZWdpc3RlciBkdWUgdG8gc2h1ZmZsaW5nCisJCQkgKi8KKworCQkJdHYxID0g RFVLX19SRUdDT05TVFBfQihpbnMpOworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19TVFJJTkco dHYxKSk7CisJCQluYW1lID0gRFVLX1RWQUxfR0VUX1NUUklORyh0djEpOworCQkJRFVLX0FTU0VS VChuYW1lICE9IE5VTEwpOworCQkJYWN0ID0gdGhyLT5jYWxsc3RhY2tfY3VycjsKKwkJCSh2b2lk KSBkdWtfanNfZ2V0dmFyX2FjdGl2YXRpb24odGhyLCBhY3QsIG5hbWUsIDEgLyp0aHJvdyovKTsg IC8qIC0+IFsuLi4gdmFsIHRoaXNdICovCisKKwkJCWlkeCA9IChkdWtfdWludF9mYXN0X3QpIERV S19ERUNfQShpbnMpOworCisJCQkvKiBDb3VsZCBhZGQgZGlyZWN0IHZhbHVlIHN0YWNrIGhhbmRs aW5nLiAqLworCQkJZHVrX3JlcGxhY2UodGhyLCAoZHVrX2lkeF90KSAoaWR4ICsgMSkpOyAgLyog J3RoaXMnIGJpbmRpbmcgKi8KKwkJCWR1a19yZXBsYWNlKHRociwgKGR1a19pZHhfdCkgaWR4KTsg ICAgICAgIC8qIHZhcmlhYmxlIHZhbHVlIChmdW5jdGlvbiwgd2UgaG9wZSwgbm90IGNoZWNrZWQg aGVyZSkgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfQ0xPU1VSRTogeworCQkJ ZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCWR1a19oY29tcGZ1bmMgKmZ1bl9hY3Q7CisJCQlkdWtf c21hbGxfdWludF9mYXN0X3QgYmMgPSBEVUtfREVDX0JDKGlucyk7CisJCQlkdWtfaG9iamVjdCAq ZnVuX3RlbXA7CisKKwkJCS8qIEEgLT4gdGFyZ2V0IHJlZworCQkJICogQkMgLT4gaW5uZXIgZnVu Y3Rpb24gaW5kZXgKKwkJCSAqLworCisJCQlEVUtfREREKERVS19ERERQUklOVCgiQ0xPU1VSRSB0 byB0YXJnZXQgcmVnaXN0ZXIgJWxkLCBmbnVtICVsZCAoY291bnQgJWxkKSIsCisJCQkgICAgICAg ICAgICAgICAgICAgICAobG9uZykgRFVLX0RFQ19BKGlucyksIChsb25nKSBEVUtfREVDX0JDKGlu cyksIChsb25nKSBEVUtfSENPTVBGVU5DX0dFVF9GVU5DU19DT1VOVCh0aHItPmhlYXAsIERVS19f RlVOKCkpKSk7CisKKwkJCURVS19BU1NFUlRfRElTQUJMRShiYyA+PSAwKTsgLyogdW5zaWduZWQg Ki8KKwkJCURVS19BU1NFUlQoKGR1a191aW50X3QpIGJjIDwgKGR1a191aW50X3QpIERVS19IQ09N UEZVTkNfR0VUX0ZVTkNTX0NPVU5UKHRoci0+aGVhcCwgRFVLX19GVU4oKSkpOworCisJCQlhY3Qg PSB0aHItPmNhbGxzdGFja19jdXJyOworCQkJZnVuX2FjdCA9IChkdWtfaGNvbXBmdW5jICopIERV S19BQ1RfR0VUX0ZVTkMoYWN0KTsKKwkJCWZ1bl90ZW1wID0gRFVLX0hDT01QRlVOQ19HRVRfRlVO Q1NfQkFTRSh0aHItPmhlYXAsIGZ1bl9hY3QpW2JjXTsKKwkJCURVS19BU1NFUlQoZnVuX3RlbXAg IT0gTlVMTCk7CisJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0lTX0NPTVBGVU5DKGZ1bl90ZW1w KSk7CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJDTE9TVVJFOiBmdW5jdGlvbiB0ZW1wbGF0 ZSBpczogJXAgLT4gJSFPIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGZ1bl90 ZW1wLCAoZHVrX2hlYXBoZHIgKikgZnVuX3RlbXApKTsKKworCQkJaWYgKGFjdC0+bGV4X2VudiA9 PSBOVUxMKSB7CisJCQkJRFVLX0FTU0VSVChhY3QtPnZhcl9lbnYgPT0gTlVMTCk7CisJCQkJZHVr X2pzX2luaXRfYWN0aXZhdGlvbl9lbnZpcm9ubWVudF9yZWNvcmRzX2RlbGF5ZWQodGhyLCBhY3Qp OworCQkJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJCQl9CisJCQlEVUtfQVNTRVJUKGFj dC0+bGV4X2VudiAhPSBOVUxMKTsKKwkJCURVS19BU1NFUlQoYWN0LT52YXJfZW52ICE9IE5VTEwp OworCisJCQkvKiBmdW5jdGlvbnMgYWx3YXlzIGhhdmUgYSBORVdFTlYgZmxhZywgaS5lLiB0aGV5 IGdldCBhCisJCQkgKiBuZXcgdmFyaWFibGUgZGVjbGFyYXRpb24gZW52aXJvbm1lbnQsIHNvIG9u bHkgbGV4X2VudgorCQkJICogbWF0dGVycyBoZXJlLgorCQkJICovCisJCQlkdWtfanNfcHVzaF9j bG9zdXJlKHRociwKKwkJCSAgICAgICAgICAgICAgICAgICAgKGR1a19oY29tcGZ1bmMgKikgZnVu X3RlbXAsCisJCQkgICAgICAgICAgICAgICAgICAgIGFjdC0+dmFyX2VudiwKKwkJCSAgICAgICAg ICAgICAgICAgICAgYWN0LT5sZXhfZW52LAorCQkJICAgICAgICAgICAgICAgICAgICAxIC8qYWRk X2F1dG9fcHJvdG8qLyk7CisJCQlEVUtfX1JFUExBQ0VfVE9QX0FfQlJFQUsoKTsKKwkJfQorCisJ CWNhc2UgRFVLX09QX0dFVFZBUjogeworCQkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCWR1a190 dmFsICp0djE7CisJCQlkdWtfaHN0cmluZyAqbmFtZTsKKworCQkJdHYxID0gRFVLX19DT05TVFBf QkMoaW5zKTsKKwkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfU1RSSU5HKHR2MSkpOworCQkJbmFt ZSA9IERVS19UVkFMX0dFVF9TVFJJTkcodHYxKTsKKwkJCURVS19BU1NFUlQobmFtZSAhPSBOVUxM KTsKKwkJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJCQlEVUtfQVNTRVJUKGFjdCAhPSBO VUxMKTsKKwkJCSh2b2lkKSBkdWtfanNfZ2V0dmFyX2FjdGl2YXRpb24odGhyLCBhY3QsIG5hbWUs IDEgLyp0aHJvdyovKTsgIC8qIC0+IFsuLi4gdmFsIHRoaXNdICovCisJCQlkdWtfcG9wX3Vuc2Fm ZSh0aHIpOyAgLyogJ3RoaXMnIGJpbmRpbmcgaXMgbm90IG5lZWRlZCBoZXJlICovCisJCQlEVUtf X1JFUExBQ0VfVE9QX0FfQlJFQUsoKTsKKwkJfQorCisJCWNhc2UgRFVLX09QX1BVVFZBUjogewor CQkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCWR1a190dmFsICp0djE7CisJCQlkdWtfaHN0cmlu ZyAqbmFtZTsKKworCQkJdHYxID0gRFVLX19DT05TVFBfQkMoaW5zKTsKKwkJCURVS19BU1NFUlQo RFVLX1RWQUxfSVNfU1RSSU5HKHR2MSkpOworCQkJbmFtZSA9IERVS19UVkFMX0dFVF9TVFJJTkco dHYxKTsKKwkJCURVS19BU1NFUlQobmFtZSAhPSBOVUxMKTsKKworCQkJLyogWFhYOiBwdXR2YXIg dGFrZXMgYSBkdWtfdHZhbCBwb2ludGVyLCB3aGljaCBpcyBhd2t3YXJkIGFuZAorCQkJICogc2hv dWxkIGJlIHJld29ya2VkLgorCQkJICovCisKKwkJCXR2MSA9IERVS19fUkVHUF9BKGlucyk7ICAv KiB2YWwgKi8KKwkJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJCQlkdWtfanNfcHV0dmFy X2FjdGl2YXRpb24odGhyLCBhY3QsIG5hbWUsIHR2MSwgRFVLX19TVFJJQ1QoKSk7CisJCQlicmVh azsKKwkJfQorCisJCWNhc2UgRFVLX09QX0RFTFZBUjogeworCQkJZHVrX2FjdGl2YXRpb24gKmFj dDsKKwkJCWR1a190dmFsICp0djE7CisJCQlkdWtfaHN0cmluZyAqbmFtZTsKKwkJCWR1a19ib29s X3QgcmM7CisKKwkJCXR2MSA9IERVS19fQ09OU1RQX0JDKGlucyk7CisJCQlEVUtfQVNTRVJUKERV S19UVkFMX0lTX1NUUklORyh0djEpKTsKKwkJCW5hbWUgPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2 MSk7CisJCQlEVUtfQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisJCQlhY3QgPSB0aHItPmNhbGxzdGFj a19jdXJyOworCQkJcmMgPSBkdWtfanNfZGVsdmFyX2FjdGl2YXRpb24odGhyLCBhY3QsIG5hbWUp OworCQkJRFVLX19SRVBMQUNFX0JPT0xfQV9CUkVBSyhyYyk7CisJCX0KKworCQljYXNlIERVS19P UF9KVU1QOiB7CisJCQkvKiBOb3RlOiB3aXRob3V0IGV4cGxpY2l0IGNhc3QgdG8gc2lnbmVkLCBN U1ZDIHdpbGwKKwkJCSAqIGFwcGFyZW50bHkgZ2VuZXJhdGUgYSBsYXJnZSBwb3NpdGl2ZSBqdW1w IHdoZW4gdGhlCisJCQkgKiBiaWFzLWNvcnJlY3RlZCB2YWx1ZSB3b3VsZCBub3JtYWxseSBiZSBu ZWdhdGl2ZS4KKwkJCSAqLworCQkJY3Vycl9wYyArPSAoZHVrX2ludF9mYXN0X3QpIERVS19ERUNf QUJDKGlucykgLSAoZHVrX2ludF9mYXN0X3QpIERVS19CQ19KVU1QX0JJQVM7CisJCQlicmVhazsK KwkJfQorCisjZGVmaW5lIERVS19fUkVUVVJOX1NIQVJFRCgpIGRvIHsgXAorCQlkdWtfc21hbGxf dWludF90IHJldF9yZXN1bHQ7IFwKKwkJLyogZHVrX19oYW5kbGVfcmV0dXJuKCkgaXMgZ3VhcmFu dGVlZCBuZXZlciB0byB0aHJvdywgZXhjZXB0IFwKKwkJICogZm9yIHBvdGVudGlhbCBvdXQtb2Yt bWVtb3J5IHNpdHVhdGlvbnMgd2hpY2ggd2lsbCB0aGVuIFwKKwkJICogcHJvcGFnYXRlIG91dCBv ZiB0aGUgZXhlY3V0b3IgbG9uZ2ptcCBoYW5kbGVyLiBcCisJCSAqLyBcCisJCURVS19BU1NFUlQo dGhyLT5wdHJfY3Vycl9wYyA9PSBOVUxMKTsgXAorCQlyZXRfcmVzdWx0ID0gZHVrX19oYW5kbGVf cmV0dXJuKHRociwgZW50cnlfYWN0KTsgXAorCQlpZiAocmV0X3Jlc3VsdCA9PSBEVUtfX1JFVEhB TkRfUkVTVEFSVCkgeyBcCisJCQlnb3RvIHJlc3RhcnRfZXhlY3V0aW9uOyBcCisJCX0gXAorCQlE VUtfQVNTRVJUKHJldF9yZXN1bHQgPT0gRFVLX19SRVRIQU5EX0ZJTklTSEVEKTsgXAorCQlyZXR1 cm47IFwKKwl9IHdoaWxlICgwKQorI2lmIGRlZmluZWQoRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpF KQorCQljYXNlIERVS19PUF9SRVRSRUc6CisJCWNhc2UgRFVLX09QX1JFVENPTlNUOgorCQljYXNl IERVS19PUF9SRVRDT05TVE46CisJCWNhc2UgRFVLX09QX1JFVFVOREVGOiB7CisJCQkgLyogQkMg LT4gcmV0dXJuIHZhbHVlIHJlZy9jb25zdCAqLworCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VS Ul9QQygpOworCisJCQlpZiAob3AgPT0gRFVLX09QX1JFVFJFRykgeworCQkJCWR1a19wdXNoX3R2 YWwodGhyLCBEVUtfX1JFR1BfQkMoaW5zKSk7CisJCQl9IGVsc2UgaWYgKG9wID09IERVS19PUF9S RVRVTkRFRikgeworCQkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfVU5ERUZJTkVEKHRoci0+dmFs c3RhY2tfdG9wKSk7ICAvKiB2YWxzdGFjayBwb2xpY3kgKi8KKwkJCQl0aHItPnZhbHN0YWNrX3Rv cCsrOworCQkJfSBlbHNlIHsKKwkJCQlEVUtfQVNTRVJUKG9wID09IERVS19PUF9SRVRDT05TVCB8 fCBvcCA9PSBEVUtfT1BfUkVUQ09OU1ROKTsKKwkJCQlkdWtfcHVzaF90dmFsKHRociwgRFVLX19D T05TVFBfQkMoaW5zKSk7CisJCQl9CisKKwkJCURVS19fUkVUVVJOX1NIQVJFRCgpOworCQl9Cisj ZWxzZSAgLyogRFVLX1VTRV9FWEVDX1BSRUZFUl9TSVpFICovCisJCWNhc2UgRFVLX09QX1JFVFJF RzogeworCQkJZHVrX3R2YWwgKnR2OworCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VSUl9QQygp OworCQkJdHYgPSBEVUtfX1JFR1BfQkMoaW5zKTsKKwkJCURVS19UVkFMX1NFVF9UVkFMKHRoci0+ dmFsc3RhY2tfdG9wLCB0dik7CisJCQlEVUtfVFZBTF9JTkNSRUYodGhyLCB0dik7CisJCQl0aHIt PnZhbHN0YWNrX3RvcCsrOworCQkJRFVLX19SRVRVUk5fU0hBUkVEKCk7CisJCX0KKwkJLyogVGhp cyB3aWxsIGJlIHVudXNlZCB3aXRob3V0IHJlZmNvdW50aW5nLiAqLworCQljYXNlIERVS19PUF9S RVRDT05TVDogeworCQkJZHVrX3R2YWwgKnR2OworCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VS Ul9QQygpOworCQkJdHYgPSBEVUtfX0NPTlNUUF9CQyhpbnMpOworCQkJRFVLX1RWQUxfU0VUX1RW QUwodGhyLT52YWxzdGFja190b3AsIHR2KTsKKwkJCURVS19UVkFMX0lOQ1JFRih0aHIsIHR2KTsK KwkJCXRoci0+dmFsc3RhY2tfdG9wKys7CisJCQlEVUtfX1JFVFVSTl9TSEFSRUQoKTsKKwkJfQor CQljYXNlIERVS19PUF9SRVRDT05TVE46IHsKKwkJCWR1a190dmFsICp0djsKKworCQkJRFVLX19T WU5DX0FORF9OVUxMX0NVUlJfUEMoKTsKKwkJCXR2ID0gRFVLX19DT05TVFBfQkMoaW5zKTsKKwkJ CURVS19UVkFMX1NFVF9UVkFMKHRoci0+dmFsc3RhY2tfdG9wLCB0dik7CisjaWYgZGVmaW5lZChE VUtfVVNFX1JFRkVSRU5DRV9DT1VOVElORykKKwkJCS8qIFdpdGhvdXQgcmVmY291bnRpbmcgb25s eSBSRVRDT05TVE4gaXMgdXNlZC4gKi8KKwkJCURVS19BU1NFUlQoIURVS19UVkFMX0lTX0hFQVBf QUxMT0NBVEVEKHR2KSk7ICAvKiBubyBJTkNSRUYgZm9yIHRoaXMgY29uc3RhbnQgKi8KKyNlbmRp ZgorCQkJdGhyLT52YWxzdGFja190b3ArKzsKKwkJCURVS19fUkVUVVJOX1NIQVJFRCgpOworCQl9 CisJCWNhc2UgRFVLX09QX1JFVFVOREVGOiB7CisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VSUl9Q QygpOworCQkJdGhyLT52YWxzdGFja190b3ArKzsgIC8qIHZhbHVlIGF0IHZhbHN0YWNrIHRvcCBp cyBhbHJlYWR5IHVuZGVmaW5lZCBieSB2YWxzdGFjayBwb2xpY3kgKi8KKwkJCURVS19BU1NFUlQo RFVLX1RWQUxfSVNfVU5ERUZJTkVEKHRoci0+dmFsc3RhY2tfdG9wKSk7CisJCQlEVUtfX1JFVFVS Tl9TSEFSRUQoKTsKKwkJfQorI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8K KworCQljYXNlIERVS19PUF9MQUJFTDogeworCQkJZHVrX2FjdGl2YXRpb24gKmFjdDsKKwkJCWR1 a19jYXRjaGVyICpjYXQ7CisJCQlkdWtfc21hbGxfdWludF9mYXN0X3QgYmMgPSBEVUtfREVDX0JD KGlucyk7CisKKwkJCS8qIEFsbG9jYXRlIGNhdGNoZXIgYW5kIHBvcHVsYXRlIGl0IChtdXN0IGJl IGF0b21pYykuICovCisKKwkJCWNhdCA9IGR1a19odGhyZWFkX2NhdGNoZXJfYWxsb2ModGhyKTsK KwkJCURVS19BU1NFUlQoY2F0ICE9IE5VTEwpOworCisJCQljYXQtPmZsYWdzID0gKGR1a191aW50 MzJfdCkgKERVS19DQVRfVFlQRV9MQUJFTCB8IChiYyA8PCBEVUtfQ0FUX0xBQkVMX1NISUZUKSk7 CisJCQljYXQtPnBjX2Jhc2UgPSAoZHVrX2luc3RyX3QgKikgY3Vycl9wYzsgIC8qIHByZS1pbmNy ZW1lbnRlZCwgcG9pbnRzIHRvIGZpcnN0IGp1bXAgc2xvdCAqLworCQkJY2F0LT5pZHhfYmFzZSA9 IDA7ICAvKiB1bnVzZWQgZm9yIGxhYmVsICovCisJCQljYXQtPmhfdmFybmFtZSA9IE5VTEw7CisK KwkJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJCQlEVUtfQVNTRVJUKGFjdCAhPSBOVUxM KTsKKwkJCWNhdC0+cGFyZW50ID0gYWN0LT5jYXQ7CisJCQlhY3QtPmNhdCA9IGNhdDsKKworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoIkxBQkVMIGNhdGNoZXI6IGZsYWdzPTB4JTA4bHgsIHBjX2Jh c2U9JWxkLCAiCisJCQkgICAgICAgICAgICAgICAgICAgICAiaWR4X2Jhc2U9JWxkLCBoX3Zhcm5h bWU9JSFPLCBsYWJlbF9pZD0lbGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNh dC0+ZmxhZ3MsIChsb25nKSBjYXQtPnBjX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgY2F0LT5pZHhfYmFzZSwgKGR1a19oZWFwaGRyICopIGNhdC0+aF92YXJuYW1lLCAobG9u ZykgRFVLX0NBVF9HRVRfTEFCRUwoY2F0KSkpOworCisJCQljdXJyX3BjICs9IDI7ICAvKiBza2lw IGp1bXAgc2xvdHMgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfRU5ETEFCRUw6 IHsKKwkJCWR1a19hY3RpdmF0aW9uICphY3Q7CisjaWYgKGRlZmluZWQoRFVLX1VTRV9ERUJVR19M RVZFTCkgJiYgKERVS19VU0VfREVCVUdfTEVWRUwgPj0gMikpIHx8IGRlZmluZWQoRFVLX1VTRV9B U1NFUlRJT05TKQorCQkJZHVrX3NtYWxsX3VpbnRfZmFzdF90IGJjID0gRFVLX0RFQ19CQyhpbnMp OworI2VuZGlmCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVMKSAmJiAoRFVLX1VTRV9E RUJVR19MRVZFTCA+PSAyKQorCQkJRFVLX0RERChEVUtfREREUFJJTlQoIkVORExBQkVMICVsZCIs IChsb25nKSBiYykpOworI2VuZGlmCisKKwkJCWFjdCA9IHRoci0+Y2FsbHN0YWNrX2N1cnI7CisJ CQlEVUtfQVNTRVJUKGFjdC0+Y2F0ICE9IE5VTEwpOworCQkJRFVLX0FTU0VSVChEVUtfQ0FUX0dF VF9UWVBFKGFjdC0+Y2F0KSA9PSBEVUtfQ0FUX1RZUEVfTEFCRUwpOworCQkJRFVLX0FTU0VSVCgo ZHVrX3VpbnRfZmFzdF90KSBEVUtfQ0FUX0dFVF9MQUJFTChhY3QtPmNhdCkgPT0gYmMpOworCQkJ ZHVrX2h0aHJlYWRfY2F0Y2hlcl91bndpbmRfbm9sZXhlbnZfbm9yeih0aHIsIGFjdCk7CisKKwkJ CS8qIG5vIG5lZWQgdG8gdW53aW5kIGNhbGxzdGFjayAqLworCQkJYnJlYWs7CisJCX0KKworCQlj YXNlIERVS19PUF9CUkVBSzogeworCQkJZHVrX3NtYWxsX3VpbnRfZmFzdF90IGJjID0gRFVLX0RF Q19CQyhpbnMpOworCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VSUl9QQygpOworCQkJZHVrX19o YW5kbGVfYnJlYWtfb3JfY29udGludWUodGhyLCAoZHVrX3VpbnRfdCkgYmMsIERVS19MSl9UWVBF X0JSRUFLKTsKKwkJCWdvdG8gcmVzdGFydF9leGVjdXRpb247CisJCX0KKworCQljYXNlIERVS19P UF9DT05USU5VRTogeworCQkJZHVrX3NtYWxsX3VpbnRfZmFzdF90IGJjID0gRFVLX0RFQ19CQyhp bnMpOworCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VSUl9QQygpOworCQkJZHVrX19oYW5kbGVf YnJlYWtfb3JfY29udGludWUodGhyLCAoZHVrX3VpbnRfdCkgYmMsIERVS19MSl9UWVBFX0NPTlRJ TlVFKTsKKwkJCWdvdG8gcmVzdGFydF9leGVjdXRpb247CisJCX0KKworCQkvKiBYWFg6IG1vdmUg dG8gaGVscGVyLCB0b28gbGFyZ2UgdG8gYmUgaW5saW5lIGhlcmUgKi8KKwkJY2FzZSBEVUtfT1Bf VFJZQ0FUQ0g6IHsKKwkJCWR1a19faGFuZGxlX29wX3RyeWNhdGNoKHRociwgaW5zLCBjdXJyX3Bj KTsKKwkJCWN1cnJfcGMgKz0gMjsgIC8qIHNraXAganVtcCBzbG90cyAqLworCQkJYnJlYWs7CisJ CX0KKworCQljYXNlIERVS19PUF9FTkRUUlk6IHsKKwkJCWN1cnJfcGMgPSBkdWtfX2hhbmRsZV9v cF9lbmR0cnkodGhyLCBpbnMpOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIERVS19PUF9FTkRD QVRDSDogeworCQkJZHVrX19oYW5kbGVfb3BfZW5kY2F0Y2godGhyLCBpbnMpOworCQkJYnJlYWs7 CisJCX0KKworCQljYXNlIERVS19PUF9FTkRGSU46IHsKKwkJCS8qIFN5bmMgYW5kIE5VTEwgZWFy bHkuICovCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VSUl9QQygpOworCisJCQlpZiAoZHVrX19o YW5kbGVfb3BfZW5kZmluKHRociwgaW5zLCBlbnRyeV9hY3QpICE9IDApIHsKKwkJCQlyZXR1cm47 CisJCQl9CisKKwkJCS8qIE11c3QgcmVzdGFydCBiZWNhdXNlIHdlIE5VTExlZCBvdXQgY3Vycl9w Yy4gKi8KKwkJCWdvdG8gcmVzdGFydF9leGVjdXRpb247CisJCX0KKworCQljYXNlIERVS19PUF9U SFJPVzogeworCQkJZHVrX3NtYWxsX3VpbnRfZmFzdF90IGJjID0gRFVLX0RFQ19CQyhpbnMpOwor CisJCQkvKiBOb3RlOiBlcnJvcnMgYXJlIGF1Z21lbnRlZCB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQs IG5vdAorCQkJICogd2hlbiB0aGV5IGFyZSB0aHJvd24uICBTbywgZG9uJ3QgYXVnbWVudCBoZXJl LCBpdCB3b3VsZAorCQkJICogYnJlYWsgcmUtdGhyb3dpbmcgZm9yIGluc3RhbmNlLgorCQkJICov CisKKwkJCS8qIFN5bmMgc28gdGhhdCBhdWdtZW50YXRpb24gc2VlcyB1cC10by1kYXRlIGFjdGl2 YXRpb25zLCBOVUxMCisJCQkgKiB0aHItPnB0cl9jdXJyX3BjIHNvIHRoYXQgaXQncyBub3QgdXNl ZCBpZiBzaWRlIGVmZmVjdHMgb2NjdXIKKwkJCSAqIGluIGF1Z21lbnRhdGlvbiBvciBsb25nam1w IGhhbmRsaW5nLgorCQkJICovCisJCQlEVUtfX1NZTkNfQU5EX05VTExfQ1VSUl9QQygpOworCisJ CQlkdWtfZHVwKHRociwgKGR1a19pZHhfdCkgYmMpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQo IlRIUk9XIEVSUk9SIChCWVRFQ09ERSk6ICUhZFQgKGJlZm9yZSB0aHJvdyBhdWdtZW50KSIsCisJ CQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEp KSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FVR01FTlRfRVJST1JfVEhST1cpCisJCQlkdWtfZXJy X2F1Z21lbnRfZXJyb3JfdGhyb3codGhyKTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJUSFJP VyBFUlJPUiAoQllURUNPREUpOiAlIWRUIChhZnRlciB0aHJvdyBhdWdtZW50KSIsCisJCQkgICAg ICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7Cisj ZW5kaWYKKworCQkJZHVrX2Vycl9zZXR1cF9sanN0YXRlMSh0aHIsIERVS19MSl9UWVBFX1RIUk9X LCBEVUtfR0VUX1RWQUxfTkVHSURYKHRociwgLTEpKTsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVC VUdHRVJfU1VQUE9SVCkKKwkJCWR1a19lcnJfY2hlY2tfZGVidWdnZXJfaW50ZWdyYXRpb24odGhy KTsKKyNlbmRpZgorCisJCQlEVUtfQVNTRVJUKHRoci0+aGVhcC0+bGouam1wYnVmX3B0ciAhPSBO VUxMKTsgIC8qIGFsd2F5cyBpbiBleGVjdXRvciAqLworCQkJZHVrX2Vycl9sb25nam1wKHRocik7 CisJCQlEVUtfVU5SRUFDSEFCTEUoKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1Bf Q1NSRUc6IHsKKwkJCS8qCisJCQkgKiAgQXNzdW1pbmcgYSByZWdpc3RlciBiaW5kcyB0byBhIHZh cmlhYmxlIGRlY2xhcmVkIHdpdGhpbiB0aGlzCisJCQkgKiAgZnVuY3Rpb24gKGEgZGVjbGFyYXRp dmUgYmluZGluZyksIHRoZSAndGhpcycgZm9yIHRoZSBjYWxsCisJCQkgKiAgc2V0dXAgaXMgYWx3 YXlzICd1bmRlZmluZWQnLiAgRTUgU2VjdGlvbiAxMC4yLjEuMS42LgorCQkJICovCisKKwkJCWR1 a19zbWFsbF91aW50X2Zhc3RfdCBhID0gRFVLX0RFQ19BKGlucyk7CisJCQlkdWtfc21hbGxfdWlu dF9mYXN0X3QgYmMgPSBEVUtfREVDX0JDKGlucyk7CisKKwkJCS8qIEEgLT4gcmVnaXN0ZXIgY29u dGFpbmluZyB0YXJnZXQgZnVuY3Rpb24gKG5vdCB0eXBlIGNoZWNrZWQgaGVyZSkKKwkJCSAqIEJD IC0+IHRhcmdldCByZWdpc3RlcnMgKEJDLCBCQyArIDEpIGZvciBjYWxsIHNldHVwCisJCQkgKi8K KworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwkJCWR1a19kdXAodGhyLCAoZHVr X2lkeF90KSBhKTsKKwkJCWR1a19yZXBsYWNlKHRociwgKGR1a19pZHhfdCkgYmMpOworCQkJZHVr X3RvX3VuZGVmaW5lZCh0aHIsIChkdWtfaWR4X3QpIChiYyArIDEpKTsKKyNlbHNlCisJCQlkdWtf dHZhbCAqdHYxOworCQkJZHVrX3R2YWwgKnR2MjsKKwkJCWR1a190dmFsICp0djM7CisJCQlkdWtf dHZhbCB0dl90bXAxOworCQkJZHVrX3R2YWwgdHZfdG1wMjsKKworCQkJdHYxID0gRFVLX19SRUdQ KGJjKTsKKwkJCXR2MiA9IHR2MSArIDE7CisJCQlEVUtfVFZBTF9TRVRfVFZBTCgmdHZfdG1wMSwg dHYxKTsKKwkJCURVS19UVkFMX1NFVF9UVkFMKCZ0dl90bXAyLCB0djIpOworCQkJdHYzID0gRFVL X19SRUdQKGEpOworCQkJRFVLX1RWQUxfU0VUX1RWQUwodHYxLCB0djMpOworCQkJRFVLX1RWQUxf SU5DUkVGKHRociwgdHYxKTsgIC8qIG5vIHNpZGUgZWZmZWN0cyAqLworCQkJRFVLX1RWQUxfU0VU X1VOREVGSU5FRCh0djIpOyAgLyogbm8gbmVlZCBmb3IgaW5jcmVmICovCisJCQlEVUtfVFZBTF9E RUNSRUYodGhyLCAmdHZfdG1wMSk7CisJCQlEVUtfVFZBTF9ERUNSRUYodGhyLCAmdHZfdG1wMik7 CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKworCQkvKiBYWFg6IGluIHNvbWUgY2FzZXMgaXQn cyBmYXN0ZXIgTk9UIHRvIHJldXNlIHRoZSB2YWx1ZQorCQkgKiBzdGFjayBidXQgcmF0aGVyIGNv cHkgdGhlIGFyZ3VtZW50cyBvbiB0b3Agb2YgdGhlIHN0YWNrCisJCSAqIChtYWlubHkgd2hlbiB0 aGUgY2FsbGluZyB2YWx1ZSBzdGFjayBpcyBsYXJnZSBhbmQgdGhlIHZhbHVlCisJCSAqIHN0YWNr IHJlc2l6ZSB3b3VsZCBiZSBsYXJnZSkuCisJCSAqLworCisJCWNhc2UgRFVLX09QX0NBTEwwOgor CQljYXNlIERVS19PUF9DQUxMMToKKwkJY2FzZSBEVUtfT1BfQ0FMTDI6CisJCWNhc2UgRFVLX09Q X0NBTEwzOgorCQljYXNlIERVS19PUF9DQUxMNDoKKwkJY2FzZSBEVUtfT1BfQ0FMTDU6CisJCWNh c2UgRFVLX09QX0NBTEw2OgorCQljYXNlIERVS19PUF9DQUxMNzogeworCQkJLyogT3Bjb2RlIHBh Y2tzIDQgZmxhZyBiaXRzOiAxIGZvciBpbmRpcmVjdCwgMyBtYXAKKwkJCSAqIDE6MSB0byB0aHJl ZSBsb3dlc3QgY2FsbCBoYW5kbGluZyBmbGFncy4KKwkJCSAqCisJCQkgKiBBIC0+IG5hcmdzIG9y IHJlZ2lzdGVyIHdpdGggbmFyZ3MgKGluZGlyZWN0KQorCQkJICogQkMgLT4gYmFzZSByZWdpc3Rl ciBmb3IgY2FsbCAoYmFzZSAtPiBmdW5jLCBiYXNlKzEgLT4gdGhpcywgYmFzZSsyIC0+IGFyZzEg Li4uIGJhc2UrMitOLTEgLT4gYXJnTikKKwkJCSAqLworCisJCQlkdWtfaWR4X3QgbmFyZ3M7CisJ CQlkdWtfaWR4X3QgaWR4OworCQkJZHVrX3NtYWxsX3VpbnRfdCBjYWxsX2ZsYWdzOworI2lmICFk ZWZpbmVkKERVS19VU0VfRVhFQ19GVU5fTE9DQUwpCisJCQlkdWtfaGNvbXBmdW5jICpmdW47Cisj ZW5kaWYKKworCQkJRFVLX0FTU0VSVCgoRFVLX09QX0NBTEwwICYgMHgwZlUpID09IDApOworCQkJ RFVLX0FTU0VSVCgoaW5zICYgRFVLX0JDX0NBTExfRkxBR19JTkRJUkVDVCkgPT0gMCk7CisKKwkJ CW5hcmdzID0gKGR1a19pZHhfdCkgRFVLX0RFQ19BKGlucyk7CisJCQljYWxsX2ZsYWdzID0gKGlu cyAmIDB4MDdVKSB8IERVS19DQUxMX0ZMQUdfQUxMT1dfRUNNQVRPRUNNQTsKKwkJCWlkeCA9IChk dWtfaWR4X3QpIERVS19ERUNfQkMoaW5zKTsKKworCQkJaWYgKGR1a19fZXhlY3V0b3JfaGFuZGxl X2NhbGwodGhyLCBpZHgsIG5hcmdzLCBjYWxsX2ZsYWdzKSkgeworCQkJCS8qIGN1cnJfcGMgc3lu Y2VkIGJ5IGR1a19oYW5kbGVfY2FsbF91bnByb3RlY3RlZCgpICovCisJCQkJRFVLX0FTU0VSVCh0 aHItPnB0cl9jdXJyX3BjID09IE5VTEwpOworCQkJCWdvdG8gcmVzdGFydF9leGVjdXRpb247CisJ CQl9CisJCQlEVUtfQVNTRVJUKHRoci0+cHRyX2N1cnJfcGMgIT0gTlVMTCk7CisKKwkJCS8qIGR1 a19qc19jYWxsLmMgaXMgcmVxdWlyZWQgdG8gcmVzdG9yZSB0aGUgc3RhY2sgcmVzZXJ2ZQorCQkJ ICogc28gd2Ugb25seSBuZWVkIHRvIHJlc2V0IHRoZSB0b3AuCisJCQkgKi8KKyNpZiAhZGVmaW5l ZChEVUtfVVNFX0VYRUNfRlVOX0xPQ0FMKQorCQkJZnVuID0gRFVLX19GVU4oKTsKKyNlbmRpZgor CQkJZHVrX3NldF90b3BfdW5zYWZlKHRociwgKGR1a19pZHhfdCkgZnVuLT5ucmVncyk7CisKKwkJ CS8qIE5vIG5lZWQgdG8gcmVpbml0IHNldGptcCgpIGNhdGNocG9pbnQsIGFzIGNhbGwgaGFuZGxp bmcKKwkJCSAqIHdpbGwgc3RvcmUgYW5kIHJlc3RvcmUgb3VyIHN0YXRlLgorCQkJICoKKwkJCSAq IFdoZW4gZGVidWdnZXIgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byByZWNoZWNrIHRoZSBhY3RpdmF0 aW9uCisJCQkgKiBzdGF0dXMgYWZ0ZXIgcmV0dXJuaW5nLiAgVGhpcyBpcyBub3cgaGFuZGxlZCBi eSBjYWxsIGhhbmRsaW5nCisJCQkgKiBhbmQgaGVhcC0+ZGJnX2ZvcmNlX3Jlc3RhcnQuCisJCQkg Ki8KKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfQ0FMTDg6CisJCWNhc2UgRFVLX09Q X0NBTEw5OgorCQljYXNlIERVS19PUF9DQUxMMTA6CisJCWNhc2UgRFVLX09QX0NBTEwxMToKKwkJ Y2FzZSBEVUtfT1BfQ0FMTDEyOgorCQljYXNlIERVS19PUF9DQUxMMTM6CisJCWNhc2UgRFVLX09Q X0NBTEwxNDoKKwkJY2FzZSBEVUtfT1BfQ0FMTDE1OiB7CisJCQkvKiBJbmRpcmVjdCB2YXJpYW50 LiAqLworCQkJZHVrX3VpbnRfZmFzdF90IG5hcmdzOworCQkJZHVrX2lkeF90IGlkeDsKKwkJCWR1 a19zbWFsbF91aW50X3QgY2FsbF9mbGFnczsKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0VYRUNfRlVO X0xPQ0FMKQorCQkJZHVrX2hjb21wZnVuYyAqZnVuOworI2VuZGlmCisKKwkJCURVS19BU1NFUlQo KERVS19PUF9DQUxMMCAmIDB4MGZVKSA9PSAwKTsKKwkJCURVS19BU1NFUlQoKGlucyAmIERVS19C Q19DQUxMX0ZMQUdfSU5ESVJFQ1QpICE9IDApOworCisJCQluYXJncyA9IChkdWtfdWludF9mYXN0 X3QpIERVS19ERUNfQShpbnMpOworCQkJRFVLX19MT09LVVBfSU5ESVJFQ1QobmFyZ3MpOworCQkJ Y2FsbF9mbGFncyA9IChpbnMgJiAweDA3VSkgfCBEVUtfQ0FMTF9GTEFHX0FMTE9XX0VDTUFUT0VD TUE7CisJCQlpZHggPSAoZHVrX2lkeF90KSBEVUtfREVDX0JDKGlucyk7CisKKwkJCWlmIChkdWtf X2V4ZWN1dG9yX2hhbmRsZV9jYWxsKHRociwgaWR4LCAoZHVrX2lkeF90KSBuYXJncywgY2FsbF9m bGFncykpIHsKKwkJCQlEVUtfQVNTRVJUKHRoci0+cHRyX2N1cnJfcGMgPT0gTlVMTCk7CisJCQkJ Z290byByZXN0YXJ0X2V4ZWN1dGlvbjsKKwkJCX0KKwkJCURVS19BU1NFUlQodGhyLT5wdHJfY3Vy cl9wYyAhPSBOVUxMKTsKKworI2lmICFkZWZpbmVkKERVS19VU0VfRVhFQ19GVU5fTE9DQUwpCisJ CQlmdW4gPSBEVUtfX0ZVTigpOworI2VuZGlmCisJCQlkdWtfc2V0X3RvcF91bnNhZmUodGhyLCAo ZHVrX2lkeF90KSBmdW4tPm5yZWdzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1Bf TkVXT0JKOiB7CisJCQlkdWtfcHVzaF9vYmplY3QodGhyKTsKKyNpZiBkZWZpbmVkKERVS19VU0Vf QVNTRVJUSU9OUykKKwkJCXsKKwkJCQlkdWtfaG9iamVjdCAqaDsKKwkJCQloID0gZHVrX3JlcXVp cmVfaG9iamVjdCh0aHIsIC0xKTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9FU0la RShoKSA9PSAwKTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9FTkVYVChoKSA9PSAw KTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9BU0laRShoKSA9PSAwKTsKKwkJCQlE VUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9IU0laRShoKSA9PSAwKTsKKwkJCX0KKyNlbmRpZgor I2lmICFkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisJCQkvKiBYWFg6IGNvdWxkIGRvIGEg ZGlyZWN0IHByb3BzIHJlYWxsb2MsIGJ1dCBuZWVkIGhhc2ggc2l6ZSAqLworCQkJZHVrX2hvYmpl Y3RfcmVzaXplX2VudHJ5cGFydCh0aHIsIGR1a19rbm93bl9ob2JqZWN0KHRociwgLTEpLCBEVUtf REVDX0EoaW5zKSk7CisjZW5kaWYKKwkJCURVS19fUkVQTEFDRV9UT1BfQkNfQlJFQUsoKTsKKwkJ fQorCisJCWNhc2UgRFVLX09QX05FV0FSUjogeworCQkJZHVrX3B1c2hfYXJyYXkodGhyKTsKKyNp ZiBkZWZpbmVkKERVS19VU0VfQVNTRVJUSU9OUykKKwkJCXsKKwkJCQlkdWtfaG9iamVjdCAqaDsK KwkJCQloID0gZHVrX3JlcXVpcmVfaG9iamVjdCh0aHIsIC0xKTsKKwkJCQlEVUtfQVNTRVJUKERV S19IT0JKRUNUX0dFVF9FU0laRShoKSA9PSAwKTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNU X0dFVF9FTkVYVChoKSA9PSAwKTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9BU0la RShoKSA9PSAwKTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9IU0laRShoKSA9PSAw KTsKKwkJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19BUlJBWV9QQVJUKGgpKTsKKwkJCX0K KyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisJCQlkdWtfaG9iamVj dF9yZWFsbG9jX3Byb3BzKHRociwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2tu b3duX2hvYmplY3QodGhyLCAtMSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLypu ZXdfZV9zaXplKi8sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19ERUNfQShpbnMp IC8qbmV3X2Ffc2l6ZSovLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qbmV3X2hf c2l6ZSovLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qYWJhbmRvbl9hcnJheSov KTsKKyNpZiAwCisJCQlkdWtfaG9iamVjdF9yZXNpemVfYXJyYXlwYXJ0KHRociwgZHVrX2tub3du X2hvYmplY3QodGhyLCAtMSksIERVS19ERUNfQShpbnMpKTsKKyNlbmRpZgorI2VuZGlmCisJCQlE VUtfX1JFUExBQ0VfVE9QX0JDX0JSRUFLKCk7CisJCX0KKworCQljYXNlIERVS19PUF9NUFVUT0JK OgorCQljYXNlIERVS19PUF9NUFVUT0JKSTogeworCQkJZHVrX2lkeF90IG9ial9pZHg7CisJCQlk dWtfdWludF9mYXN0X3QgaWR4LCBpZHhfZW5kOworCQkJZHVrX3NtYWxsX3VpbnRfZmFzdF90IGNv dW50OworCisJCQkvKiBBIC0+IHJlZ2lzdGVyIG9mIHRhcmdldCBvYmplY3QKKwkJCSAqIEIgLT4g Zmlyc3QgcmVnaXN0ZXIgb2Yga2V5L3ZhbHVlIHBhaXIgbGlzdAorCQkJICogICAgICBvciByZWdp c3RlciBjb250YWluaW5nIGZpcnN0IHJlZ2lzdGVyIG51bWJlciBpZiBpbmRpcmVjdAorCQkJICog QyAtPiBudW1iZXIgb2Yga2V5L3ZhbHVlIHBhaXJzICogMgorCQkJICogICAgICAoPSBudW1iZXIg b2YgdmFsdWUgc3RhY2sgaW5kaWNlcyB1c2VkIHN0YXJ0aW5nIGZyb20gJ0InKQorCQkJICovCisK KwkJCW9ial9pZHggPSBEVUtfREVDX0EoaW5zKTsKKwkJCURVS19BU1NFUlQoZHVrX2lzX29iamVj dCh0aHIsIG9ial9pZHgpKTsKKworCQkJaWR4ID0gKGR1a191aW50X2Zhc3RfdCkgRFVLX0RFQ19C KGlucyk7CisJCQlpZiAoRFVLX0RFQ19PUChpbnMpID09IERVS19PUF9NUFVUT0JKSSkgeworCQkJ CURVS19fTE9PS1VQX0lORElSRUNUKGlkeCk7CisJCQl9CisKKwkJCWNvdW50ID0gKGR1a19zbWFs bF91aW50X2Zhc3RfdCkgRFVLX0RFQ19DKGlucyk7CisJCQlEVUtfQVNTRVJUKGNvdW50ID4gMCk7 ICAvKiBjb21waWxlciBndWFyYW50ZWVzICovCisJCQlpZHhfZW5kID0gaWR4ICsgY291bnQ7CisK KyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19JTkRJUkVDVF9CT1VORF9DSEVDSykKKwkJCWlmIChE VUtfVU5MSUtFTFkoaWR4X2VuZCA+IChkdWtfdWludF9mYXN0X3QpIGR1a19nZXRfdG9wKHRocikp KSB7CisJCQkJLyogWFhYOiB1c2UgZHVrX2lzX3ZhbGlkX2luZGV4KCkgaW5zdGVhZD8gKi8KKwkJ CQkvKiBYWFg6IGltcHJvdmUgY2hlY2s7IGNoZWNrIGFnYWluc3QgbnJlZ3MsIG5vdCBhZ2FpbnN0 IHRvcCAqLworCQkJCURVS19fSU5URVJOQUxfRVJST1IoIk1QVVRPQkogb3V0IG9mIGJvdW5kcyIp OworCQkJfQorI2VuZGlmCisKKwkJCS8qIFVzZSAnZm9yY2UnIGZsYWcgdG8gZHVrX2RlZl9wcm9w KCkgdG8gZW5zdXJlIHRoYXQgYW55CisJCQkgKiBpbmhlcml0ZWQgcHJvcGVydGllcyBkb24ndCBw cmV2ZW50IHRoZSBvcGVyYXRpb24uCisJCQkgKiBXaXRoIEVTMjAxNSBkdXBsaWNhdGUgcHJvcGVy dGllcyBhcmUgYWxsb3dlZCwgc28gdGhhdCB3ZQorCQkJICogbXVzdCBvdmVyd3JpdGUgYW55IHBy ZXZpb3VzIGRhdGEgb3IgYWNjZXNzb3IgcHJvcGVydHkuCisJCQkgKgorCQkJICogV2l0aCBFUzIw MTUgY29tcHV0ZWQgcHJvcGVydHkgbmFtZXMgdGhlIGxpdGVyYWwga2V5cworCQkJICogbWF5IGJl IGFyYml0cmFyeSB2YWx1ZXMgYW5kIG5lZWQgdG8gYmUgVG9Qcm9wZXJ0eUtleSgpCisJCQkgKiBj b2VyY2VkIGF0IHJ1bnRpbWUuCisJCQkgKi8KKwkJCWRvIHsKKwkJCQkvKiBYWFg6IGZhc3RlciBp bml0aWFsaXphdGlvbiAoZGlyZWN0IGFjY2VzcyBvciBiZXR0ZXIgcHJpbWl0aXZlcykgKi8KKwkJ CQlkdWtfZHVwKHRociwgKGR1a19pZHhfdCkgaWR4KTsKKwkJCQlkdWtfZHVwKHRociwgKGR1a19p ZHhfdCkgKGlkeCArIDEpKTsKKwkJCQlkdWtfZGVmX3Byb3AodGhyLCBvYmpfaWR4LCBEVUtfREVG UFJPUF9IQVZFX1ZBTFVFIHwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfREVG UFJPUF9GT1JDRSB8CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1Bf U0VUX1dSSVRBQkxFIHwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfREVGUFJP UF9TRVRfRU5VTUVSQUJMRSB8CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0RF RlBST1BfU0VUX0NPTkZJR1VSQUJMRSk7CisJCQkJaWR4ICs9IDI7CisJCQl9IHdoaWxlIChpZHgg PCBpZHhfZW5kKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfSU5JVFNFVDoKKwkJ Y2FzZSBEVUtfT1BfSU5JVEdFVDogeworCQkJZHVrX19oYW5kbGVfb3BfaW5pdHNldF9pbml0Z2V0 KHRociwgaW5zKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfTVBVVEFSUjoKKwkJ Y2FzZSBEVUtfT1BfTVBVVEFSUkk6IHsKKwkJCWR1a19pZHhfdCBvYmpfaWR4OworCQkJZHVrX3Vp bnRfZmFzdF90IGlkeCwgaWR4X2VuZDsKKwkJCWR1a19zbWFsbF91aW50X2Zhc3RfdCBjb3VudDsK KwkJCWR1a190dmFsICp0djE7CisJCQlkdWtfdWludDMyX3QgYXJyX2lkeDsKKworCQkJLyogQSAt PiByZWdpc3RlciBvZiB0YXJnZXQgb2JqZWN0CisJCQkgKiBCIC0+IGZpcnN0IHJlZ2lzdGVyIG9m IHZhbHVlIGRhdGEgKHN0YXJ0X2luZGV4LCB2YWx1ZTEsIHZhbHVlMiwgLi4uLCB2YWx1ZU4pCisJ CQkgKiAgICAgIG9yIHJlZ2lzdGVyIGNvbnRhaW5pbmcgZmlyc3QgcmVnaXN0ZXIgbnVtYmVyIGlm IGluZGlyZWN0CisJCQkgKiBDIC0+IG51bWJlciBvZiBrZXkvdmFsdWUgcGFpcnMgKE4pCisJCQkg Ki8KKworCQkJb2JqX2lkeCA9IERVS19ERUNfQShpbnMpOworCQkJRFVLX0FTU0VSVChkdWtfaXNf b2JqZWN0KHRociwgb2JqX2lkeCkpOworCisJCQlpZHggPSAoZHVrX3VpbnRfZmFzdF90KSBEVUtf REVDX0IoaW5zKTsKKwkJCWlmIChEVUtfREVDX09QKGlucykgPT0gRFVLX09QX01QVVRBUlJJKSB7 CisJCQkJRFVLX19MT09LVVBfSU5ESVJFQ1QoaWR4KTsKKwkJCX0KKworCQkJY291bnQgPSAoZHVr X3NtYWxsX3VpbnRfZmFzdF90KSBEVUtfREVDX0MoaW5zKTsKKwkJCURVS19BU1NFUlQoY291bnQg PiAwICsgMSk7ICAvKiBjb21waWxlciBndWFyYW50ZWVzICovCisJCQlpZHhfZW5kID0gaWR4ICsg Y291bnQ7CisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhFQ19JTkRJUkVDVF9CT1VORF9DSEVDSykK KwkJCWlmIChpZHhfZW5kID4gKGR1a191aW50X2Zhc3RfdCkgZHVrX2dldF90b3AodGhyKSkgewor CQkJCS8qIFhYWDogdXNlIGR1a19pc192YWxpZF9pbmRleCgpIGluc3RlYWQ/ICovCisJCQkJLyog WFhYOiBpbXByb3ZlIGNoZWNrOyBjaGVjayBhZ2FpbnN0IG5yZWdzLCBub3QgYWdhaW5zdCB0b3Ag Ki8KKwkJCQlEVUtfX0lOVEVSTkFMX0VSUk9SKCJNUFVUQVJSIG91dCBvZiBib3VuZHMiKTsKKwkJ CX0KKyNlbmRpZgorCisJCQl0djEgPSBEVUtfX1JFR1AoaWR4KTsKKwkJCURVS19BU1NFUlQoRFVL X1RWQUxfSVNfTlVNQkVSKHR2MSkpOworI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQkJ RFVLX0FTU0VSVChEVUtfVFZBTF9JU19GQVNUSU5UKHR2MSkpOworCQkJYXJyX2lkeCA9IChkdWtf dWludDMyX3QpIERVS19UVkFMX0dFVF9GQVNUSU5UX1UzMih0djEpOworI2Vsc2UKKwkJCWFycl9p ZHggPSAoZHVrX3VpbnQzMl90KSBEVUtfVFZBTF9HRVRfTlVNQkVSKHR2MSk7CisjZW5kaWYKKwkJ CWlkeCsrOworCisJCQlkbyB7CisJCQkJLyogZHVrX3hkZWZfcHJvcCgpIHdpbGwgZGVmaW5lIGFu IG93biBwcm9wZXJ0eSB3aXRob3V0IGFueSBhcnJheQorCQkJCSAqIHNwZWNpYWwgYmVoYXZpb3Jz LiAgV2UnbGwgbmVlZCB0byBzZXQgdGhlIGFycmF5IGxlbmd0aCBleHBsaWNpdGx5CisJCQkJICog aW4gdGhlIGVuZC4gIEZvciBhcnJheXMgd2l0aCBlbGlzaW9ucywgdGhlIGNvbXBpbGVyIHdpbGwg ZW1pdCBhbgorCQkJCSAqIGV4cGxpY2l0IFNFVEFMRU4gd2hpY2ggd2lsbCB1cGRhdGUgdGhlIGxl bmd0aC4KKwkJCQkgKi8KKworCQkJCS8qIFhYWDogYmVjYXVzZSB3ZSdyZSBkZWFsaW5nIHdpdGgg J293bicgcHJvcGVydGllcyBvZiBhIGZyZXNoIGFycmF5LAorCQkJCSAqIHRoZSBhcnJheSBpbml0 aWFsaXplciBzaG91bGQganVzdCBlbnN1cmUgdGhhdCB0aGUgYXJyYXkgaGFzIGEgbGFyZ2UKKwkJ CQkgKiBlbm91Z2ggYXJyYXkgcGFydCBhbmQgd3JpdGUgdGhlIHZhbHVlcyBkaXJlY3RseSBpbnRv IGFycmF5IHBhcnQsCisJCQkJICogYW5kIGZpbmFsbHkgc2V0ICdsZW5ndGgnIG1hbnVhbGx5IGlu IHRoZSBlbmQgKGFzIGFscmVhZHkgaGFwcGVucyBub3cpLgorCQkJCSAqLworCisJCQkJZHVrX2R1 cCh0aHIsIChkdWtfaWR4X3QpIGlkeCk7CisJCQkJZHVrX3hkZWZfcHJvcF9pbmRleF93ZWModGhy LCBvYmpfaWR4LCBhcnJfaWR4KTsKKworCQkJCWlkeCsrOworCQkJCWFycl9pZHgrKzsKKwkJCX0g d2hpbGUgKGlkeCA8IGlkeF9lbmQpOworCisJCQkvKiBYWFg6IEU1LjEgU2VjdGlvbiAxMS4xLjQg Y29lcmNlcyB0aGUgZmluYWwgbGVuZ3RoIHRocm91Z2gKKwkJCSAqIFRvVWludDMyKCkgd2hpY2gg aXMgb2RkIGJ1dCBoYXBwZW5zIG5vdyBhcyBhIHNpZGUgZWZmZWN0IG9mCisJCQkgKiAnYXJyX2lk eCcgdHlwZS4KKwkJCSAqLworCQkJZHVrX3NldF9sZW5ndGgodGhyLCBvYmpfaWR4LCAoZHVrX3Np emVfdCkgKGR1a191YXJyaWR4X3QpIGFycl9pZHgpOworCQkJYnJlYWs7CisJCX0KKworCQljYXNl IERVS19PUF9TRVRBTEVOOiB7CisJCQlkdWtfdHZhbCAqdHYxOworCQkJZHVrX2hvYmplY3QgKmg7 CisJCQlkdWtfdWludDMyX3QgbGVuOworCisJCQl0djEgPSBEVUtfX1JFR1BfQShpbnMpOworCQkJ RFVLX0FTU0VSVChEVUtfVFZBTF9JU19PQkpFQ1QodHYxKSk7CisJCQloID0gRFVLX1RWQUxfR0VU X09CSkVDVCh0djEpOworCQkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19BUlJBWShoKSk7CisK KwkJCXR2MSA9IERVS19fUkVHUF9CQyhpbnMpOworCQkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19O VU1CRVIodHYxKSk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJCQlEVUtfQVNTRVJU KERVS19UVkFMX0lTX0ZBU1RJTlQodHYxKSk7CisJCQlsZW4gPSAoZHVrX3VpbnQzMl90KSBEVUtf VFZBTF9HRVRfRkFTVElOVF9VMzIodHYxKTsKKyNlbHNlCisJCQlsZW4gPSAoZHVrX3VpbnQzMl90 KSBEVUtfVFZBTF9HRVRfTlVNQkVSKHR2MSk7CisjZW5kaWYKKwkJCSgoZHVrX2hhcnJheSAqKSBo KS0+bGVuZ3RoID0gbGVuOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIERVS19PUF9JTklURU5V TTogeworCQkJZHVrX19oYW5kbGVfb3BfaW5pdGVudW0odGhyLCBpbnMpOworCQkJYnJlYWs7CisJ CX0KKworCQljYXNlIERVS19PUF9ORVhURU5VTTogeworCQkJY3Vycl9wYyArPSBkdWtfX2hhbmRs ZV9vcF9uZXh0ZW51bSh0aHIsIGlucyk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgRFVLX09Q X0lOVkxIUzogeworCQkJRFVLX0VSUk9SX1JFRkVSRU5DRSh0aHIsIERVS19TVFJfSU5WQUxJRF9M VkFMVUUpOworCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQkJYnJlYWs7CisJCX0KKwor CQljYXNlIERVS19PUF9ERUJVR0dFUjogeworCQkJLyogT3Bjb2RlIG9ubHkgZW1pdHRlZCBieSBj b21waWxlciB3aGVuIGRlYnVnZ2VyCisJCQkgKiBzdXBwb3J0IGlzIGVuYWJsZWQuICBJZ25vcmUg aXQgc2lsZW50bHkgd2l0aG91dAorCQkJICogZGVidWdnZXIgc3VwcG9ydCwgaW4gY2FzZSBpdCBo YXMgYmVlbiBsb2FkZWQKKwkJCSAqIGZyb20gcHJlY29tcGlsZWQgYnl0ZWNvZGUuCisJCQkgKi8K KyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwkJCWlmIChkdWtfZGVidWdf aXNfYXR0YWNoZWQodGhyLT5oZWFwKSkgeworCQkJCURVS19EKERVS19EUFJJTlQoIkRFQlVHR0VS IHN0YXRlbWVudCBlbmNvdW50ZXJlZCwgaGFsdCBleGVjdXRpb24iKSk7CisJCQkJRFVLX19TWU5D X0FORF9OVUxMX0NVUlJfUEMoKTsKKwkJCQlkdWtfZGVidWdfaGFsdF9leGVjdXRpb24odGhyLCAx IC8qdXNlX3ByZXZfcGMqLyk7CisJCQkJRFVLX0QoRFVLX0RQUklOVCgiREVCVUdHRVIgc3RhdGVt ZW50IGZpbmlzaGVkLCByZXN1bWUgZXhlY3V0aW9uIikpOworCQkJCWdvdG8gcmVzdGFydF9leGVj dXRpb247CisJCQl9IGVsc2UgeworCQkJCURVS19EKERVS19EUFJJTlQoIkRFQlVHR0VSIHN0YXRl bWVudCBpZ25vcmVkLCBkZWJ1Z2dlciBub3QgYXR0YWNoZWQiKSk7CisJCQl9CisjZWxzZQorCQkJ RFVLX0QoRFVLX0RQUklOVCgiREVCVUdHRVIgc3RhdGVtZW50IGlnbm9yZWQsIG5vIGRlYnVnZ2Vy IHN1cHBvcnQiKSk7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfTk9Q OiB7CisJCQkvKiBOb3AsIGlnbm9yZWQsIGJ1dCBBQkMgZmllbGRzIG1heSBjYXJyeSBhIHZhbHVl IGUuZy4KKwkJCSAqIGZvciBpbmRpcmVjdCBvcGNvZGUgaGFuZGxpbmcuCisJCQkgKi8KKwkJCWJy ZWFrOworCQl9CisKKwkJY2FzZSBEVUtfT1BfSU5WQUxJRDogeworCQkJRFVLX0VSUk9SX0ZNVDEo dGhyLCBEVUtfRVJSX0VSUk9SLCAiSU5WQUxJRCBvcGNvZGUgKCVsZCkiLCAobG9uZykgRFVLX0RF Q19BQkMoaW5zKSk7CisJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCQlicmVhazsKKwkJ fQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNikKKwkJY2FzZSBEVUtfT1BfTkVXVEFSR0VUOiB7 CisJCQlkdWtfcHVzaF9uZXdfdGFyZ2V0KHRocik7CisJCQlEVUtfX1JFUExBQ0VfVE9QX0JDX0JS RUFLKCk7CisJCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9FUzYgKi8KKworI2lmICFkZWZpbmVkKERV S19VU0VfRVhFQ19QUkVGRVJfU0laRSkKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0VTN19FWFBfT1BF UkFUT1IpCisJCWNhc2UgRFVLX09QX0VYUF9SUjoKKwkJY2FzZSBEVUtfT1BfRVhQX0NSOgorCQlj YXNlIERVS19PUF9FWFBfUkM6CisJCWNhc2UgRFVLX09QX0VYUF9DQzoKKyNlbmRpZgorI2lmICFk ZWZpbmVkKERVS19VU0VfRVM2KQorCQljYXNlIERVS19PUF9ORVdUQVJHRVQ6CisjZW5kaWYKKyNp ZiAhZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JTKQorCQljYXNlIERVS19PUF9HRVRQUk9Q Q19SUjoKKwkJY2FzZSBEVUtfT1BfR0VUUFJPUENfQ1I6CisJCWNhc2UgRFVLX09QX0dFVFBST1BD X1JDOgorCQljYXNlIERVS19PUF9HRVRQUk9QQ19DQzoKKyNlbmRpZgorCQljYXNlIERVS19PUF9V TlVTRUQyMDc6CisJCWNhc2UgRFVLX09QX1VOVVNFRDIxMjoKKwkJY2FzZSBEVUtfT1BfVU5VU0VE MjEzOgorCQljYXNlIERVS19PUF9VTlVTRUQyMTQ6CisJCWNhc2UgRFVLX09QX1VOVVNFRDIxNToK KwkJY2FzZSBEVUtfT1BfVU5VU0VEMjE2OgorCQljYXNlIERVS19PUF9VTlVTRUQyMTc6CisJCWNh c2UgRFVLX09QX1VOVVNFRDIxODoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjE5OgorCQljYXNlIERV S19PUF9VTlVTRUQyMjA6CisJCWNhc2UgRFVLX09QX1VOVVNFRDIyMToKKwkJY2FzZSBEVUtfT1Bf VU5VU0VEMjIyOgorCQljYXNlIERVS19PUF9VTlVTRUQyMjM6CisJCWNhc2UgRFVLX09QX1VOVVNF RDIyNDoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjI1OgorCQljYXNlIERVS19PUF9VTlVTRUQyMjY6 CisJCWNhc2UgRFVLX09QX1VOVVNFRDIyNzoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjI4OgorCQlj YXNlIERVS19PUF9VTlVTRUQyMjk6CisJCWNhc2UgRFVLX09QX1VOVVNFRDIzMDoKKwkJY2FzZSBE VUtfT1BfVU5VU0VEMjMxOgorCQljYXNlIERVS19PUF9VTlVTRUQyMzI6CisJCWNhc2UgRFVLX09Q X1VOVVNFRDIzMzoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjM0OgorCQljYXNlIERVS19PUF9VTlVT RUQyMzU6CisJCWNhc2UgRFVLX09QX1VOVVNFRDIzNjoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjM3 OgorCQljYXNlIERVS19PUF9VTlVTRUQyMzg6CisJCWNhc2UgRFVLX09QX1VOVVNFRDIzOToKKwkJ Y2FzZSBEVUtfT1BfVU5VU0VEMjQwOgorCQljYXNlIERVS19PUF9VTlVTRUQyNDE6CisJCWNhc2Ug RFVLX09QX1VOVVNFRDI0MjoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjQzOgorCQljYXNlIERVS19P UF9VTlVTRUQyNDQ6CisJCWNhc2UgRFVLX09QX1VOVVNFRDI0NToKKwkJY2FzZSBEVUtfT1BfVU5V U0VEMjQ2OgorCQljYXNlIERVS19PUF9VTlVTRUQyNDc6CisJCWNhc2UgRFVLX09QX1VOVVNFRDI0 ODoKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjQ5OgorCQljYXNlIERVS19PUF9VTlVTRUQyNTA6CisJ CWNhc2UgRFVLX09QX1VOVVNFRDI1MToKKwkJY2FzZSBEVUtfT1BfVU5VU0VEMjUyOgorCQljYXNl IERVS19PUF9VTlVTRUQyNTM6CisJCWNhc2UgRFVLX09QX1VOVVNFRDI1NDoKKwkJY2FzZSBEVUtf T1BfVU5VU0VEMjU1OgorCQkvKiBGb3JjZSBhbGwgY2FzZSBjbGF1c2VzIHRvIG1hcCB0byBhbiBh Y3R1YWwgaGFuZGxlcgorCQkgKiBzbyB0aGF0IHRoZSBjb21waWxlciBjYW4gZW1pdCBhIGp1bXAg d2l0aG91dCBhIGJvdW5kcworCQkgKiBjaGVjazogdGhlIHN3aXRjaCBhcmd1bWVudCBpcyBhIGR1 a191aW50OF90IHNvIHRoYXQKKwkJICogdGhlIGNvbXBpbGVyIG1heSBiZSBhYmxlIHRvIGZpZ3Vy ZSBpdCBvdXQuICBUaGlzIGlzCisJCSAqIGEgc21hbGwgZGV0YWlsIGFuZCBvYnZpb3VzbHkgY29t cGlsZXIgZGVwZW5kZW50LgorCQkgKi8KKwkJLyogZGVmYXVsdDogY2xhdXNlIG9taXR0ZWQgb24g cHVycG9zZSAqLworI2Vsc2UgIC8qIERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSAqLworCQlkZWZh dWx0OgorI2VuZGlmICAvKiBEVUtfVVNFX0VYRUNfUFJFRkVSX1NJWkUgKi8KKwkJeworCQkJLyog RGVmYXVsdCBjYXNlIGNhdGNoZXMgaW52YWxpZC91bnN1cHBvcnRlZCBvcGNvZGVzLiAqLworCQkJ RFVLX0QoRFVLX0RQUklOVCgiaW52YWxpZCBvcGNvZGU6ICVsZCAtICUhSSIsIChsb25nKSBvcCwg aW5zKSk7CisJCQlEVUtfX0lOVEVSTkFMX0VSUk9SKCJpbnZhbGlkIG9wY29kZSIpOworCQkJYnJl YWs7CisJCX0KKworCQl9ICAvKiBlbmQgc3dpdGNoICovCisKKwkJY29udGludWU7CisKKwkJLyog U29tZSBzaGFyZWQgZXhpdCBwYXRocyBmb3Igb3Bjb2RlIGhhbmRsaW5nIGJlbG93LiAgVGhlc2UK KwkJICogYXJlIG1vc3RseSB1c2VmdWwgdG8gcmVkdWNlIGNvZGUgZm9vdHByaW50IHdoZW4gbXVs dGlwbGUKKwkJICogb3Bjb2RlcyBoYXZlIGEgc2ltaWxhciBlcGlsb2d1ZSAobGlrZSByZXBsYWNp bmcgc3RhY2sgdG9wCisJCSAqIHdpdGggaW5kZXggJ2EnKS4KKwkJICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfRVhFQ19QUkVGRVJfU0laRSkKKwkgcmVwbGFjZV90b3BfYToKKwkJRFVLX19SRVBM QUNFX1RPX1RWUFRSKHRociwgRFVLX19SRUdQX0EoaW5zKSk7CisJCWNvbnRpbnVlOworCSByZXBs YWNlX3RvcF9iYzoKKwkJRFVLX19SRVBMQUNFX1RPX1RWUFRSKHRociwgRFVLX19SRUdQX0JDKGlu cykpOworCQljb250aW51ZTsKKyNlbmRpZgorCX0KKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7 CisKKyNpZiAhZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVhFQ1VUT1JfRVJST1JTKQorIGludGVy bmFsX2Vycm9yOgorCURVS19FUlJPUl9JTlRFUk5BTCh0aHIpOworCURVS19XT19OT1JFVFVSTihy ZXR1cm47KTsKKyNlbmRpZgorfQorCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYgRFVL X19CWVRFT0ZGX0EKKyN1bmRlZiBEVUtfX0JZVEVPRkZfQgorI3VuZGVmIERVS19fQllURU9GRl9C QworI3VuZGVmIERVS19fQllURU9GRl9DCisjdW5kZWYgRFVLX19DT01QQVJFX0JPRFkKKyN1bmRl ZiBEVUtfX0NPTlNUCisjdW5kZWYgRFVLX19DT05TVFAKKyN1bmRlZiBEVUtfX0NPTlNUUF9BCisj dW5kZWYgRFVLX19DT05TVFBfQgorI3VuZGVmIERVS19fQ09OU1RQX0JDCisjdW5kZWYgRFVLX19D T05TVFBfQworI3VuZGVmIERVS19fREVMUFJPUF9CT0RZCisjdW5kZWYgRFVLX19FUV9CT0RZCisj dW5kZWYgRFVLX19GVU4KKyN1bmRlZiBEVUtfX0dFVFBST1BDX0JPRFkKKyN1bmRlZiBEVUtfX0dF VFBST1BfQk9EWQorI3VuZGVmIERVS19fR0VfQk9EWQorI3VuZGVmIERVS19fR1RfQk9EWQorI3Vu ZGVmIERVS19fSU5MSU5FX1BFUkYKKyN1bmRlZiBEVUtfX0lOU1RPRl9CT0RZCisjdW5kZWYgRFVL X19JTlRFUk5BTF9FUlJPUgorI3VuZGVmIERVS19fSU5UX05PQUNUSU9OCisjdW5kZWYgRFVLX19J TlRfUkVTVEFSVAorI3VuZGVmIERVS19fSU5fQk9EWQorI3VuZGVmIERVS19fTEVfQk9EWQorI3Vu ZGVmIERVS19fTE9OR0pNUF9SRVNUQVJUCisjdW5kZWYgRFVLX19MT05HSk1QX1JFVEhST1cKKyN1 bmRlZiBEVUtfX0xPT0tVUF9JTkRJUkVDVAorI3VuZGVmIERVS19fTFRfQk9EWQorI3VuZGVmIERV S19fTUFTS19BCisjdW5kZWYgRFVLX19NQVNLX0IKKyN1bmRlZiBEVUtfX01BU0tfQkMKKyN1bmRl ZiBEVUtfX01BU0tfQworI3VuZGVmIERVS19fTkVRX0JPRFkKKyN1bmRlZiBEVUtfX05PSU5MSU5F X1BFUkYKKyN1bmRlZiBEVUtfX1BVVFBST1BfQk9EWQorI3VuZGVmIERVS19fUkNCSVRfQgorI3Vu ZGVmIERVS19fUkNCSVRfQworI3VuZGVmIERVS19fUkVHCisjdW5kZWYgRFVLX19SRUdDT05TVFBf QgorI3VuZGVmIERVS19fUkVHQ09OU1RQX0MKKyN1bmRlZiBEVUtfX1JFR1AKKyN1bmRlZiBEVUtf X1JFR1BfQQorI3VuZGVmIERVS19fUkVHUF9CCisjdW5kZWYgRFVLX19SRUdQX0JDCisjdW5kZWYg RFVLX19SRUdQX0MKKyN1bmRlZiBEVUtfX1JFUExBQ0VfQk9PTF9BX0JSRUFLCisjdW5kZWYgRFVL X19SRVBMQUNFX1RPUF9BX0JSRUFLCisjdW5kZWYgRFVLX19SRVBMQUNFX1RPUF9CQ19CUkVBSwor I3VuZGVmIERVS19fUkVQTEFDRV9UT19UVlBUUgorI3VuZGVmIERVS19fUkVUSEFORF9GSU5JU0hF RAorI3VuZGVmIERVS19fUkVUSEFORF9SRVNUQVJUCisjdW5kZWYgRFVLX19SRVRVUk5fU0hBUkVE CisjdW5kZWYgRFVLX19TRVFfQk9EWQorI3VuZGVmIERVS19fU0hJRlRfQQorI3VuZGVmIERVS19f U0hJRlRfQgorI3VuZGVmIERVS19fU0hJRlRfQkMKKyN1bmRlZiBEVUtfX1NISUZUX0MKKyN1bmRl ZiBEVUtfX1NORVFfQk9EWQorI3VuZGVmIERVS19fU1RSSUNUCisjdW5kZWYgRFVLX19TWU5DX0FO RF9OVUxMX0NVUlJfUEMKKyN1bmRlZiBEVUtfX1NZTkNfQ1VSUl9QQworI3VuZGVmIERVS19fVFZB TF9TSElGVAorLyoKKyAqICBFQ01BU2NyaXB0IHNwZWNpZmljYXRpb24gYWxnb3JpdGhtIGFuZCBj b252ZXJzaW9uIGhlbHBlcnMuCisgKgorICogIFRoZXNlIGhlbHBlcnMgZW5jYXBzdWxhdGUgdGhl IHByaW1pdGl2ZSBFQ01BU2NyaXB0IG9wZXJhdGlvbiBzZW1hbnRpY3MsCisgKiAgYW5kIGFyZSB1 c2VkIGJ5IHRoZSBieXRlY29kZSBleGVjdXRvciBhbmQgdGhlIEFQSSAoYW1vbmcgb3RoZXIgcGxh Y2VzKS4KKyAqICBTb21lIHByaW1pdGl2ZXMgYXJlIG9ubHkgaW1wbGVtZW50ZWQgYXMgcGFydCBv ZiB0aGUgQVBJIGFuZCBoYXZlIG5vCisgKiAgImludGVybmFsIiBoZWxwZXIuICBUaGlzIGlzIHRo ZSBjYXNlIHdoZW4gYW4gaW50ZXJuYWwgaGVscGVyIHdvdWxkIG5vdAorICogIHJlYWxseSBiZSB1 c2VmdWw7IGUuZy4gdGhlIG9wZXJhdGlvbiBpcyByYXJlLCB1c2VzIHZhbHVlIHN0YWNrIGhlYXZp bHksCisgKiAgZXRjLgorICoKKyAqICBUaGUgb3BlcmF0aW9uIGFyZ3VtZW50cyBkZXBlbmQgb24g d2hhdCBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQKKyAqICB0aGUgb3BlcmF0aW9uOgorICoKKyAq ICAgIC0gSWYgYW4gb3BlcmF0aW9uIGlzIHNpbXBsZSBhbmQgc3RhdGVsZXNzLCBhbmQgaGFzIG5v IHNpZGUKKyAqICAgICAgZWZmZWN0cywgaXQgd29uJ3QgdGFrZSBhbiBkdWtfaHRocmVhZCBhcmd1 bWVudCBhbmQgaXRzCisgKiAgICAgIGFyZ3VtZW50cyBtYXkgYmUgZHVrX3R2YWwgcG9pbnRlcnMg KHdoaWNoIGFyZSBzYWZlIGFzIGxvbmcKKyAqICAgICAgYXMgbm8gc2lkZSBlZmZlY3RzIHRha2Ug cGxhY2UpLgorICoKKyAqICAgIC0gSWYgY29tcGxleCBjb2VyY2lvbnMgYXJlIHJlcXVpcmVkIChl LmcuIGEgIlRvTnVtYmVyIiBjb2VyY2lvbikKKyAqICAgICAgb3IgZXJyb3JzIG1heSBiZSB0aHJv d24sIHRoZSBvcGVyYXRpb24gdGFrZXMgYW4gZHVrX2h0aHJlYWQKKyAqICAgICAgYXJndW1lbnQu ICBUaGlzIGFsc28gaW1wbGllcyB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGhhdmUKKyAqICAgICAg YXJiaXRyYXJ5IHNpZGUgZWZmZWN0cywgaW52YWxpZGF0aW5nIGFueSBkdWtfdHZhbCBwb2ludGVy cy4KKyAqCisgKiAgICAtIEZvciBvcGVyYXRpb25zIHdpdGggcG90ZW50aWFsIHNpZGUgZWZmZWN0 cywgYXJndW1lbnRzIGNhbiBiZQorICogICAgICB0YWtlbiBpbiBzZXZlcmFsIHdheXM6CisgKgor ICogICAgICBhKSBhcyBkdWtfdHZhbCBwb2ludGVycywgd2hpY2ggbWFrZXMgc2Vuc2UgaWYgdGhl ICJjb21tb24gY2FzZSIKKyAqICAgICAgICAgY2FuIGJlIHJlc29sdmVkIHdpdGhvdXQgc2lkZSBl ZmZlY3RzIChlLmcuIGNvZXJjaW9uKTsgdGhlCisgKiAgICAgICAgIGFyZ3VtZW50cyBhcmUgcHVz aGVkIHRvIHRoZSB2YWxzdGFjayBmb3IgY29lcmNpb24gaWYKKyAqICAgICAgICAgbmVjZXNzYXJ5 CisgKgorICogICAgICBiKSBhcyBkdWtfdHZhbCB2YWx1ZXMKKyAqCisgKiAgICAgIGMpIGltcGxp Y2l0bHkgb24gdmFsdWUgc3RhY2sgdG9wCisgKgorICogICAgICBkKSBhcyBpbmRpY2VzIHRvIHRo ZSB2YWx1ZSBzdGFjaworICoKKyAqICBGdXR1cmUgd29yazoKKyAqCisgKiAgICAgLSBBcmd1bWVu dCBzdHlsZXMgbWF5IG5vdCBiZSB0aGUgbW9zdCBzZW5zaWJsZSBpbiBldmVyeSBjYXNlIG5vdy4K KyAqCisgKiAgICAgLSBJbi1wbGFjZSBjb2VyY2lvbnMgbWlnaHQgYmUgdXNlZnVsIGZvciBzZXZl cmFsIG9wZXJhdGlvbnMsIGlmCisgKiAgICAgICBpbi1wbGFjZSBjb2VyY2lvbiBpcyBPSyBmb3Ig dGhlIGJ5dGVjb2RlIGV4ZWN1dG9yIGFuZCB0aGUgQVBJLgorICovCisKKy8qICNpbmNsdWRlIGR1 a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyoKKyAqICBUb1ByaW1pdGl2 ZSgpICAoRTUgU2VjdGlvbiA5LjEpCisgKgorICogID09PiBpbXBsZW1lbnRlZCBpbiB0aGUgQVBJ LgorICovCisKKy8qCisgKiAgVG9Cb29sZWFuKCkgIChFNSBTZWN0aW9uIDkuMikKKyAqLworCitE VUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfanNfdG9ib29sZWFuKGR1a190dmFsICp0dikgewor CXN3aXRjaCAoRFVLX1RWQUxfR0VUX1RBRyh0dikpIHsKKwljYXNlIERVS19UQUdfVU5ERUZJTkVE OgorCWNhc2UgRFVLX1RBR19OVUxMOgorCQlyZXR1cm4gMDsKKwljYXNlIERVS19UQUdfQk9PTEVB TjoKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9HRVRfQk9PTEVBTih0dikgPT0gMCB8fCBEVUtfVFZB TF9HRVRfQk9PTEVBTih0dikgPT0gMSk7CisJCXJldHVybiBEVUtfVFZBTF9HRVRfQk9PTEVBTih0 dik7CisJY2FzZSBEVUtfVEFHX1NUUklORzogeworCQkvKiBTeW1ib2xzIFRvQm9vbGVhbigpIGNv ZXJjZSB0byB0cnVlLCByZWdhcmRsZXNzIG9mIHRoZWlyCisJCSAqIGRlc2NyaXB0aW9uLiAgVGhp cyBoYXBwZW5zIHdpdGggbm8gZXhwbGljaXQgY2hlY2sgYmVjYXVzZQorCQkgKiBvZiB0aGUgc3lt Ym9sIHJlcHJlc2VudGF0aW9uIGJ5dGUgcHJlZml4LgorCQkgKi8KKwkJZHVrX2hzdHJpbmcgKmgg PSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsKKwkJRFVLX0FTU0VSVChoICE9IE5VTEwpOworCQly ZXR1cm4gKERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpID4gMCA/IDEgOiAwKTsKKwl9CisJY2Fz ZSBEVUtfVEFHX09CSkVDVDogeworCQlyZXR1cm4gMTsKKwl9CisJY2FzZSBEVUtfVEFHX0JVRkZF UjogeworCQkvKiBNaW1pYyBVaW50OEFycmF5IHNlbWFudGljczogb2JqZWN0cyBjb2VyY2UgdHJ1 ZSwgcmVnYXJkbGVzcworCQkgKiBvZiBidWZmZXIgbGVuZ3RoICh6ZXJvIG9yIG5vdCkgb3IgY29u dGV4dC4KKwkJICovCisJCXJldHVybiAxOworCX0KKwljYXNlIERVS19UQUdfUE9JTlRFUjogewor CQl2b2lkICpwID0gRFVLX1RWQUxfR0VUX1BPSU5URVIodHYpOworCQlyZXR1cm4gKHAgIT0gTlVM TCA/IDEgOiAwKTsKKwl9CisJY2FzZSBEVUtfVEFHX0xJR0hURlVOQzogeworCQlyZXR1cm4gMTsK Kwl9CisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJY2FzZSBEVUtfVEFHX0ZBU1RJTlQ6 CisJCWlmIChEVUtfVFZBTF9HRVRfRkFTVElOVCh0dikgIT0gMCkgeworCQkJcmV0dXJuIDE7CisJ CX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCisJZGVmYXVsdDogeworCQkvKiBu dW1iZXIgKi8KKwkJZHVrX2RvdWJsZV90IGQ7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9T SVpFKQorCQlpbnQgYzsKKyNlbmRpZgorCQlEVUtfQVNTRVJUKCFEVUtfVFZBTF9JU19VTlVTRUQo dHYpKTsKKwkJRFVLX0FTU0VSVChEVUtfVFZBTF9JU19ET1VCTEUodHYpKTsKKwkJZCA9IERVS19U VkFMX0dFVF9ET1VCTEUodHYpOworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwkJ YyA9IERVS19GUENMQVNTSUZZKChkb3VibGUpIGQpOworCQlpZiAoYyA9PSBEVUtfRlBfWkVSTyB8 fCBjID09IERVS19GUF9OQU4pIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJcmV0dXJu IDE7CisJCX0KKyNlbHNlCisJCURVS19BU1NFUlQoZHVrX2RvdWJsZV9pc19uYW5fb3JfemVybyhk KSA9PSAwIHx8IGR1a19kb3VibGVfaXNfbmFuX29yX3plcm8oZCkgPT0gMSk7CisJCXJldHVybiBk dWtfZG91YmxlX2lzX25hbl9vcl96ZXJvKGQpIF4gMTsKKyNlbmRpZgorCX0KKwl9CisJRFVLX1VO UkVBQ0hBQkxFKCk7Cit9CisKKy8qCisgKiAgVG9OdW1iZXIoKSAgKEU1IFNlY3Rpb24gOS4zKQor ICoKKyAqICBWYWx1ZSB0byBjb252ZXJ0IG11c3QgYmUgb24gc3RhY2sgdG9wLCBhbmQgaXMgcG9w cGVkIGJlZm9yZSBleGl0LgorICoKKyAqICBTZWU6IGh0dHA6Ly93d3cuY3MuaW5kaWFuYS5lZHUv fmJ1cmdlci9GUC1QcmludGluZy1QTERJOTYucGRmCisgKiAgICAgICBodHRwOi8vd3d3LmNzLmlu ZGlhbmEuZWR1L35idXJnZXIvZnAvaW5kZXguaHRtbAorICoKKyAqICBOb3RlcyBvbiB0aGUgY29u dmVyc2lvbjoKKyAqCisgKiAgICAtIFRoZXJlIGFyZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgb24g dGhlIGFjY3VyYWN5IG9mIHRoZSBjb252ZXJzaW9uCisgKiAgICAgIHRocm91Z2ggYSAiTWF0aGVt YXRpY2FsIFZhbHVlIiAoTVYpLCBzbyB0aGlzIGNvbnZlcnNpb24gaXMgbm90CisgKiAgICAgIHRy aXZpYWwuCisgKgorICogICAgLSBRdWljayByZWplY3RzIChlLmcuIGJhc2VkIG9uIGZpcnN0IGNo YXIpIGFyZSBkaWZmaWN1bHQgYmVjYXVzZQorICogICAgICB0aGUgZ3JhbW1hciBhbGxvd3MgbGVh ZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCisgKgorICogICAgLSBRdWljayByZWplY3Qg YmFzZWQgb24gc3RyaW5nIGxlbmd0aCBpcyBkaWZmaWN1bHQgZXZlbiBhZnRlcgorICogICAgICBh Y2NvdW50aW5nIGZvciB3aGl0ZSBzcGFjZTsgdGhlcmUgbWF5IGJlIGFyYml0cmFyaWx5IG1hbnkK KyAqICAgICAgZGVjaW1hbCBkaWdpdHMuCisgKgorICogICAgLSBTdGFuZGFyZCBncmFtbWFyIGFs bG93cyBkZWNpbWFsIHZhbHVlcyAoIjEyMyIpLCBoZXggdmFsdWVzCisgKiAgICAgICgiMHgxMjMi KSBhbmQgaW5maW5pdGllcworICoKKyAqICAgIC0gVW5saWtlIHNvdXJjZSBjb2RlIGxpdGVyYWxz LCBUb051bWJlcigpIGNvZXJjZXMgZW1wdHkgc3RyaW5ncworICogICAgICBhbmQgc3RyaW5ncyB3 aXRoIG9ubHkgd2hpdGVzcGFjZSB0byB6ZXJvIChub3QgTmFOKS4KKyAqLworCisvKiBFNSBTZWN0 aW9uIDkuMy4xICovCitEVUtfTE9DQUwgZHVrX2RvdWJsZV90IGR1a19fdG9udW1iZXJfc3RyaW5n X3JhdyhkdWtfaHRocmVhZCAqdGhyKSB7CisJZHVrX3NtYWxsX3VpbnRfdCBzMm5fZmxhZ3M7CisJ ZHVrX2RvdWJsZV90IGQ7CisKKwlEVUtfQVNTRVJUKGR1a19pc19zdHJpbmcodGhyLCAtMSkpOwor CisJLyogUXVpdGUgbGVuaWVudCwgZS5nLiBhbGxvdyBlbXB0eSBhcyB6ZXJvLCBidXQgZG9uJ3Qg YWxsb3cgdHJhaWxpbmcKKwkgKiBnYXJiYWdlLgorCSAqLworCXMybl9mbGFncyA9IERVS19TMk5f RkxBR19UUklNX1dISVRFIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfRVhQIHwK KwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfUExVUyB8CisJICAgICAgICAgICAgRFVL X1MyTl9GTEFHX0FMTE9XX01JTlVTIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1df SU5GIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfRlJBQyB8CisJICAgICAgICAg ICAgRFVLX1MyTl9GTEFHX0FMTE9XX05BS0VEX0ZSQUMgfAorCSAgICAgICAgICAgIERVS19TMk5f RkxBR19BTExPV19FTVBUWV9GUkFDIHwKKwkgICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1df RU1QVFlfQVNfWkVSTyB8CisJICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX0xFQURJTkdf WkVSTyB8CisJICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX0FVVE9fSEVYX0lOVCB8CisJ ICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX0FVVE9fT0NUX0lOVCB8CisJICAgICAgICAg ICAgRFVLX1MyTl9GTEFHX0FMTE9XX0FVVE9fQklOX0lOVDsKKworCWR1a19udW1jb252X3BhcnNl KHRociwgMTAgLypyYWRpeCovLCBzMm5fZmxhZ3MpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1BS RUZFUl9TSVpFKQorCWQgPSBkdWtfZ2V0X251bWJlcih0aHIsIC0xKTsKKwlkdWtfcG9wX3Vuc2Fm ZSh0aHIpOworI2Vsc2UKKwl0aHItPnZhbHN0YWNrX3RvcC0tOworCURVS19BU1NFUlQoRFVLX1RW QUxfSVNfTlVNQkVSKHRoci0+dmFsc3RhY2tfdG9wKSk7CisJRFVLX0FTU0VSVChEVUtfVFZBTF9J U19ET1VCTEUodGhyLT52YWxzdGFja190b3ApKTsgIC8qIG5vIGZhc3RpbnQgY29udmVyc2lvbiBp biBudW1jb252IG5vdyAqLworCURVS19BU1NFUlQoIURVS19UVkFMX05FRURTX1JFRkNPVU5UX1VQ REFURSh0aHItPnZhbHN0YWNrX3RvcCkpOworCWQgPSBEVUtfVFZBTF9HRVRfRE9VQkxFKHRoci0+ dmFsc3RhY2tfdG9wKTsgIC8qIGFzc3VtZXMgbm90IGEgZmFzdGludCAqLworCURVS19UVkFMX1NF VF9VTkRFRklORUQodGhyLT52YWxzdGFja190b3ApOworI2VuZGlmCisKKwlyZXR1cm4gZDsKK30K KworRFVLX0lOVEVSTkFMIGR1a19kb3VibGVfdCBkdWtfanNfdG9udW1iZXIoZHVrX2h0aHJlYWQg KnRociwgZHVrX3R2YWwgKnR2KSB7CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FT U0VSVCh0diAhPSBOVUxMKTsKKworCXN3aXRjaCAoRFVLX1RWQUxfR0VUX1RBRyh0dikpIHsKKwlj YXNlIERVS19UQUdfVU5ERUZJTkVEOiB7CisJCS8qIHJldHVybiBhIHNwZWNpZmljIE5hTiAoYWx0 aG91Z2ggbm90IHN0cmljdGx5IG5lY2Vzc2FyeSkgKi8KKwkJZHVrX2RvdWJsZV91bmlvbiBkdTsK KwkJRFVLX0RCTFVOSU9OX1NFVF9OQU4oJmR1KTsKKwkJRFVLX0FTU0VSVChEVUtfREJMVU5JT05f SVNfTk9STUFMSVpFRCgmZHUpKTsKKwkJcmV0dXJuIGR1LmQ7CisJfQorCWNhc2UgRFVLX1RBR19O VUxMOiB7CisJCS8qICswLjAgKi8KKwkJcmV0dXJuIDAuMDsKKwl9CisJY2FzZSBEVUtfVEFHX0JP T0xFQU46IHsKKwkJaWYgKERVS19UVkFMX0lTX0JPT0xFQU5fVFJVRSh0dikpIHsKKwkJCXJldHVy biAxLjA7CisJCX0KKwkJcmV0dXJuIDAuMDsKKwl9CisJY2FzZSBEVUtfVEFHX1NUUklORzogewor CQkvKiBGb3IgU3ltYm9scyBUb051bWJlcigpIGlzIGFsd2F5cyBhIFR5cGVFcnJvci4gKi8KKwkJ ZHVrX2hzdHJpbmcgKmggPSBEVUtfVFZBTF9HRVRfU1RSSU5HKHR2KTsKKwkJaWYgKERVS19VTkxJ S0VMWShEVUtfSFNUUklOR19IQVNfU1lNQk9MKGgpKSkgeworCQkJRFVLX0VSUk9SX1RZUEUodGhy LCBEVUtfU1RSX0NBTk5PVF9OVU1CRVJfQ09FUkNFX1NZTUJPTCk7CisJCQlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuIDAuMDspOworCQl9CisJCWR1a19wdXNoX2hzdHJpbmcodGhyLCBoKTsKKwkJcmV0 dXJuIGR1a19fdG9udW1iZXJfc3RyaW5nX3Jhdyh0aHIpOworCX0KKwljYXNlIERVS19UQUdfQlVG RkVSOiAgLyogcGxhaW4gYnVmZmVyIHRyZWF0ZWQgbGlrZSBvYmplY3QgKi8KKwljYXNlIERVS19U QUdfT0JKRUNUOiB7CisJCWR1a19kb3VibGVfdCBkOworCQlkdWtfcHVzaF90dmFsKHRociwgdHYp OworCQlkdWtfdG9fcHJpbWl0aXZlKHRociwgLTEsIERVS19ISU5UX05VTUJFUik7ICAvKiAndHYn IGJlY29tZXMgaW52YWxpZCAqLworCisJCS8qIHJlY3Vyc2l2ZSBjYWxsIGZvciBhIHByaW1pdGl2 ZSB2YWx1ZSAoZ3VhcmFudGVlZCBub3QgdG8gY2F1c2Ugc2Vjb25kCisJCSAqIHJlY3Vyc2lvbiku CisJCSAqLworCQlEVUtfQVNTRVJUKGR1a19nZXRfdHZhbCh0aHIsIC0xKSAhPSBOVUxMKTsKKwkJ ZCA9IGR1a19qc190b251bWJlcih0aHIsIGR1a19nZXRfdHZhbCh0aHIsIC0xKSk7CisKKwkJZHVr X3BvcF91bnNhZmUodGhyKTsKKwkJcmV0dXJuIGQ7CisJfQorCWNhc2UgRFVLX1RBR19QT0lOVEVS OiB7CisJCS8qIENvZXJjZSBsaWtlIGJvb2xlYW4gKi8KKwkJdm9pZCAqcCA9IERVS19UVkFMX0dF VF9QT0lOVEVSKHR2KTsKKwkJcmV0dXJuIChwICE9IE5VTEwgPyAxLjAgOiAwLjApOworCX0KKwlj YXNlIERVS19UQUdfTElHSFRGVU5DOiB7CisJCS8qICsoZnVuY3Rpb24oKXt9KSAtPiBOYU4gKi8K KwkJcmV0dXJuIERVS19ET1VCTEVfTkFOOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElO VCkKKwljYXNlIERVS19UQUdfRkFTVElOVDoKKwkJcmV0dXJuIChkdWtfZG91YmxlX3QpIERVS19U VkFMX0dFVF9GQVNUSU5UKHR2KTsKKyNlbmRpZgorCWRlZmF1bHQ6IHsKKwkJLyogbnVtYmVyICov CisJCURVS19BU1NFUlQoIURVS19UVkFMX0lTX1VOVVNFRCh0dikpOworCQlEVUtfQVNTRVJUKERV S19UVkFMX0lTX0RPVUJMRSh0dikpOworCQlyZXR1cm4gRFVLX1RWQUxfR0VUX0RPVUJMRSh0dik7 CisJfQorCX0KKworCURVS19VTlJFQUNIQUJMRSgpOworfQorCisvKgorICogIFRvSW50ZWdlcigp ICAoRTUgU2VjdGlvbiA5LjQpCisgKi8KKworLyogZXhwb3NlZCwgdXNlZCBieSBlLmcuIGR1a19i aV9kYXRlLmMgKi8KK0RVS19JTlRFUk5BTCBkdWtfZG91YmxlX3QgZHVrX2pzX3RvaW50ZWdlcl9u dW1iZXIoZHVrX2RvdWJsZV90IHgpIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUp CisJZHVrX3NtYWxsX2ludF90IGMgPSAoZHVrX3NtYWxsX2ludF90KSBEVUtfRlBDTEFTU0lGWSh4 KTsKKworCWlmIChEVUtfVU5MSUtFTFkoYyA9PSBEVUtfRlBfTkFOKSkgeworCQlyZXR1cm4gMC4w OworCX0gZWxzZSBpZiAoRFVLX1VOTElLRUxZKGMgPT0gRFVLX0ZQX0lORklOSVRFKSkgeworCQly ZXR1cm4geDsKKwl9IGVsc2UgeworCQkvKiBGaW5pdGUsIGluY2x1ZGluZyBuZWcvcG9zIHplcm8u ICBOZWcgemVybyBzaWduIG11c3QgYmUKKwkJICogcHJlc2VydmVkLgorCQkgKi8KKwkJcmV0dXJu IGR1a19kb3VibGVfdHJ1bmNfdG93YXJkc196ZXJvKHgpOworCX0KKyNlbHNlICAvKiBEVUtfVVNF X1BSRUZFUl9TSVpFICovCisJLyogTmFOIGFuZCBJbmZpbml0eSBoYXZlIHRoZSBzYW1lIGV4cG9u ZW50IHNvIGl0J3MgYSBjaGVhcAorCSAqIGluaXRpYWwgY2hlY2sgZm9yIHRoZSByYXJlIHBhdGgu CisJICovCisJaWYgKERVS19VTkxJS0VMWShkdWtfZG91YmxlX2lzX25hbl9vcl9pbmYoeCkgIT0g MFUpKSB7CisJCWlmIChkdWtfZG91YmxlX2lzX25hbih4KSkgeworCQkJcmV0dXJuIDAuMDsKKwkJ fSBlbHNlIHsKKwkJCXJldHVybiB4OworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIGR1a19kb3Vi bGVfdHJ1bmNfdG93YXJkc196ZXJvKHgpOworCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9QUkVGRVJf U0laRSAqLworfQorCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1a19qc190b2ludGVnZXIo ZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2KSB7CisJLyogWFhYOiBmYXN0aW50ICovCisJ ZHVrX2RvdWJsZV90IGQgPSBkdWtfanNfdG9udW1iZXIodGhyLCB0dik7ICAvKiBpbnZhbGlkYXRl cyB0diAqLworCXJldHVybiBkdWtfanNfdG9pbnRlZ2VyX251bWJlcihkKTsKK30KKworLyoKKyAq ICBUb0ludDMyKCksIFRvVWludDMyKCksIFRvVWludDE2KCkgIChFNSBTZWN0aW9ucyA5LjUsIDku NiwgOS43KQorICovCisKKy8qIGNvbWJpbmVkIGFsZ29yaXRobSBtYXRjaGluZyBFNSBTZWN0aW9u cyA5LjUgYW5kIDkuNiAqLworRFVLX0xPQ0FMIGR1a19kb3VibGVfdCBkdWtfX3RvaW50MzJfdG91 aW50MzJfaGVscGVyKGR1a19kb3VibGVfdCB4LCBkdWtfYm9vbF90IGlzX3RvaW50MzIpIHsKKyNp ZiBkZWZpbmVkIChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCWR1a19zbWFsbF9pbnRfdCBjOworI2Vu ZGlmCisKKyNpZiBkZWZpbmVkIChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCWMgPSAoZHVrX3NtYWxs X2ludF90KSBEVUtfRlBDTEFTU0lGWSh4KTsKKwlpZiAoYyA9PSBEVUtfRlBfTkFOIHx8IGMgPT0g RFVLX0ZQX1pFUk8gfHwgYyA9PSBEVUtfRlBfSU5GSU5JVEUpIHsKKwkJcmV0dXJuIDAuMDsKKwl9 CisjZWxzZQorCWlmIChkdWtfZG91YmxlX2lzX25hbl96ZXJvX2luZih4KSkgeworCQlyZXR1cm4g MC4wOworCX0KKyNlbmRpZgorCisJLyogeCA9IHNpZ24oeCkgKiBmbG9vcihhYnMoeCkpLCBpLmUu IHRydW5jYXRlIHRvd2FyZHMgemVybywga2VlcCBzaWduICovCisJeCA9IGR1a19kb3VibGVfdHJ1 bmNfdG93YXJkc196ZXJvKHgpOworCisJLyogTk9URTogZm1vZCh4KSByZXN1bHQgc2lnbiBpcyBz YW1lIGFzIHNpZ24gb2YgeCwgd2hpY2gKKwkgKiBkaWZmZXJzIGZyb20gd2hhdCBKYXZhc2NyaXB0 IHdhbnRzIChzZWUgU2VjdGlvbiA5LjYpLgorCSAqLworCisJeCA9IERVS19GTU9EKHgsIERVS19E T1VCTEVfMlRPMzIpOyAgICAvKiAtPiB4IGluIF0tMioqMzIsIDIqKjMyWyAqLworCisJaWYgKHgg PCAwLjApIHsKKwkJeCArPSBEVUtfRE9VQkxFXzJUTzMyOworCX0KKwlEVUtfQVNTRVJUKHggPj0g MCAmJiB4IDwgRFVLX0RPVUJMRV8yVE8zMik7ICAvKiAtPiB4IGluIFswLCAyKiozMlsgKi8KKwor CWlmIChpc190b2ludDMyKSB7CisJCWlmICh4ID49IERVS19ET1VCTEVfMlRPMzEpIHsKKwkJCS8q IHggaW4gWzIqKjMxLCAyKiozMlsgKi8KKworCQkJeCAtPSBEVUtfRE9VQkxFXzJUTzMyOyAgLyog LT4geCBpbiBbLTIqKjMxLDIqKjMxWyAqLworCQl9CisJfQorCisJcmV0dXJuIHg7Cit9CisKK0RV S19JTlRFUk5BTCBkdWtfaW50MzJfdCBkdWtfanNfdG9pbnQzMihkdWtfaHRocmVhZCAqdGhyLCBk dWtfdHZhbCAqdHYpIHsKKwlkdWtfZG91YmxlX3QgZDsKKworI2lmIGRlZmluZWQoRFVLX1VTRV9G QVNUSU5UKQorCWlmIChEVUtfVFZBTF9JU19GQVNUSU5UKHR2KSkgeworCQlyZXR1cm4gRFVLX1RW QUxfR0VUX0ZBU1RJTlRfSTMyKHR2KTsKKwl9CisjZW5kaWYKKworCWQgPSBkdWtfanNfdG9udW1i ZXIodGhyLCB0dik7ICAvKiBpbnZhbGlkYXRlcyB0diAqLworCWQgPSBkdWtfX3RvaW50MzJfdG91 aW50MzJfaGVscGVyKGQsIDEpOworCURVS19BU1NFUlQoRFVLX0ZQQ0xBU1NJRlkoZCkgPT0gRFVL X0ZQX1pFUk8gfHwgRFVLX0ZQQ0xBU1NJRlkoZCkgPT0gRFVLX0ZQX05PUk1BTCk7CisJRFVLX0FT U0VSVChkID49IC0yMTQ3NDgzNjQ4LjAgJiYgZCA8PSAyMTQ3NDgzNjQ3LjApOyAgLyogWy0weDgw MDAwMDAwLDB4N2ZmZmZmZmZdICovCisJRFVLX0FTU0VSVChkID09ICgoZHVrX2RvdWJsZV90KSAo KGR1a19pbnQzMl90KSBkKSkpOyAgLyogd2hvbGUsIHdvbid0IGNsaXAgKi8KKwlyZXR1cm4gKGR1 a19pbnQzMl90KSBkOworfQorCisKK0RVS19JTlRFUk5BTCBkdWtfdWludDMyX3QgZHVrX2pzX3Rv dWludDMyKGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dikgeworCWR1a19kb3VibGVfdCBk OworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJaWYgKERVS19UVkFMX0lTX0ZBU1RJ TlQodHYpKSB7CisJCXJldHVybiBEVUtfVFZBTF9HRVRfRkFTVElOVF9VMzIodHYpOworCX0KKyNl bmRpZgorCisJZCA9IGR1a19qc190b251bWJlcih0aHIsIHR2KTsgIC8qIGludmFsaWRhdGVzIHR2 ICovCisJZCA9IGR1a19fdG9pbnQzMl90b3VpbnQzMl9oZWxwZXIoZCwgMCk7CisJRFVLX0FTU0VS VChEVUtfRlBDTEFTU0lGWShkKSA9PSBEVUtfRlBfWkVSTyB8fCBEVUtfRlBDTEFTU0lGWShkKSA9 PSBEVUtfRlBfTk9STUFMKTsKKwlEVUtfQVNTRVJUKGQgPj0gMC4wICYmIGQgPD0gNDI5NDk2NzI5 NS4wKTsgIC8qIFsweDAwMDAwMDAwLCAweGZmZmZmZmZmXSAqLworCURVS19BU1NFUlQoZCA9PSAo KGR1a19kb3VibGVfdCkgKChkdWtfdWludDMyX3QpIGQpKSk7ICAvKiB3aG9sZSwgd29uJ3QgY2xp cCAqLworCXJldHVybiAoZHVrX3VpbnQzMl90KSBkOworCit9CisKK0RVS19JTlRFUk5BTCBkdWtf dWludDE2X3QgZHVrX2pzX3RvdWludDE2KGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dikg eworCS8qIHNob3VsZCBiZSBhIHNhZmUgd2F5IHRvIGNvbXB1dGUgdGhpcyAqLworCXJldHVybiAo ZHVrX3VpbnQxNl90KSAoZHVrX2pzX3RvdWludDMyKHRociwgdHYpICYgMHgwMDAwZmZmZlUpOwor fQorCisvKgorICogIFRvU3RyaW5nKCkgIChFNSBTZWN0aW9uIDkuOCkKKyAqICBUb09iamVjdCgp ICAoRTUgU2VjdGlvbiA5LjkpCisgKiAgQ2hlY2tPYmplY3RDb2VyY2libGUoKSAgKEU1IFNlY3Rp b24gOS4xMCkKKyAqICBJc0NhbGxhYmxlKCkgIChFNSBTZWN0aW9uIDkuMTEpCisgKgorICogID09 PiBpbXBsZW1lbnRlZCBpbiB0aGUgQVBJLgorICovCisKKy8qCisgKiAgTG9vc2UgZXF1YWxpdHks IHN0cmljdCBlcXVhbGl0eSwgYW5kIFNhbWVWYWx1ZSAoRTUgU2VjdGlvbnMgMTEuOS4xLCAxMS45 LjQsCisgKiAgOS4xMikuICBUaGVzZSBoYXZlIG11Y2ggaW4gY29tbW9uIHNvIHRoZXkgY2FuIHNo YXJlIHNvbWUgaGVscGVycy4KKyAqCisgKiAgRnV0dXJlIHdvcmsgbm90ZXM6CisgKgorICogICAg LSBDdXJyZW50IGltcGxlbWVudGF0aW9uIChhbmQgc3BlYyBkZWZpbml0aW9uKSBoYXMgcmVjdXJz aW9uOyB0aGlzIHNob3VsZAorICogICAgICBiZSBmaXhlZCBpZiBwb3NzaWJsZS4KKyAqCisgKiAg ICAtIFN0cmluZy10by1udW1iZXIgY29lcmNpb24gc2hvdWxkIGJlIHBvc3NpYmxlIHdpdGhvdXQg Z29pbmcgdGhyb3VnaCB0aGUKKyAqICAgICAgdmFsdWUgc3RhY2sgKGFuZCBiZSBtb3JlIGNvbXBh Y3QpIGlmIGEgc2hhcmVkIGhlbHBlciBpcyBpbnZva2VkLgorICovCisKKy8qIE5vdGUgdGhhdCB0 aGlzIGlzIHRoZSBzYW1lIG9wZXJhdGlvbiBmb3Igc3RyaWN0IGFuZCBsb29zZSBlcXVhbGl0eToK KyAqICAtIEU1IFNlY3Rpb24gMTEuOS4zLCBzdGVwIDEuYyAobG9vc2UpCisgKiAgLSBFNSBTZWN0 aW9uIDExLjkuNiwgc3RlcCA0IChzdHJpY3QpCisgKi8KKworRFVLX0xPQ0FMIGR1a19ib29sX3Qg ZHVrX19qc19lcXVhbHNfbnVtYmVyKGR1a19kb3VibGVfdCB4LCBkdWtfZG91YmxlX3QgeSkgewor I2lmIGRlZmluZWQoRFVLX1VTRV9QQVJBTk9JRF9NQVRIKQorCS8qIFN0cmFpZ2h0Zm9yd2FyZCBh bGdvcml0aG0sIG1ha2VzIGZld2VyIGNvbXBpbGVyIGFzc3VtcHRpb25zLiAqLworCWR1a19zbWFs bF9pbnRfdCBjeCA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKHgpOworCWR1a19z bWFsbF9pbnRfdCBjeSA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKHkpOworCWlm IChjeCA9PSBEVUtfRlBfTkFOIHx8IGN5ID09IERVS19GUF9OQU4pIHsKKwkJcmV0dXJuIDA7CisJ fQorCWlmIChjeCA9PSBEVUtfRlBfWkVSTyAmJiBjeSA9PSBEVUtfRlBfWkVSTykgeworCQlyZXR1 cm4gMTsKKwl9CisJaWYgKHggPT0geSkgeworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cisj ZWxzZSAgLyogRFVLX1VTRV9QQVJBTk9JRF9NQVRIICovCisJLyogQmV0dGVyIGVxdWl2YWxlbnQg YWxnb3JpdGhtLiAgSWYgdGhlIGNvbXBpbGVyIGlzIGNvbXBsaWFudCwgQyBhbmQKKwkgKiBFQ01B U2NyaXB0IHNlbWFudGljcyBhcmUgaWRlbnRpY2FsIGZvciB0aGlzIHBhcnRpY3VsYXIgY29tcGFy aXNvbi4KKwkgKiBJbiBwYXJ0aWN1bGFyLCBOYU5zIG11c3QgbmV2ZXIgY29tcGFyZSBlcXVhbCBh bmQgemVyb2VzIG11c3QgY29tcGFyZQorCSAqIGVxdWFsIHJlZ2FyZGxlc3Mgb2Ygc2lnbi4gIENv dWxkIGFsc28gdXNlIGEgbWFjcm8sIGJ1dCB0aGlzIGlubGluZXMKKwkgKiBhbHJlYWR5IG5pY2Vs eSAobm8gZGlmZmVyZW5jZSBvbiBnY2MsIGZvciBpbnN0YW5jZSkuCisJICovCisJaWYgKHggPT0g eSkgeworCQkvKiBJRUVFIHJlcXVpcmVzIHRoYXQgTmFOcyBjb21wYXJlIGZhbHNlICovCisJCURV S19BU1NFUlQoRFVLX0ZQQ0xBU1NJRlkoeCkgIT0gRFVLX0ZQX05BTik7CisJCURVS19BU1NFUlQo RFVLX0ZQQ0xBU1NJRlkoeSkgIT0gRFVLX0ZQX05BTik7CisJCXJldHVybiAxOworCX0gZWxzZSB7 CisJCS8qIElFRUUgcmVxdWlyZXMgdGhhdCB6ZXJvcyBjb21wYXJlIHRoZSBzYW1lIHJlZ2FyZGxl c3MKKwkJICogb2YgdGhlaXIgc2lnbmVkLCBzbyBpZiBib3RoIHggYW5kIHkgYXJlIHplcm9lcywg dGhleQorCQkgKiBhcmUgY2F1Z2h0IGFib3ZlLgorCQkgKi8KKwkJRFVLX0FTU0VSVCghKERVS19G UENMQVNTSUZZKHgpID09IERVS19GUF9aRVJPICYmIERVS19GUENMQVNTSUZZKHkpID09IERVS19G UF9aRVJPKSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAgLyogRFVLX1VTRV9QQVJBTk9JRF9N QVRIICovCit9CisKK0RVS19MT0NBTCBkdWtfYm9vbF90IGR1a19fanNfc2FtZXZhbHVlX251bWJl cihkdWtfZG91YmxlX3QgeCwgZHVrX2RvdWJsZV90IHkpIHsKKyNpZiBkZWZpbmVkKERVS19VU0Vf UEFSQU5PSURfTUFUSCkKKwlkdWtfc21hbGxfaW50X3QgY3ggPSAoZHVrX3NtYWxsX2ludF90KSBE VUtfRlBDTEFTU0lGWSh4KTsKKwlkdWtfc21hbGxfaW50X3QgY3kgPSAoZHVrX3NtYWxsX2ludF90 KSBEVUtfRlBDTEFTU0lGWSh5KTsKKworCWlmIChjeCA9PSBEVUtfRlBfTkFOICYmIGN5ID09IERV S19GUF9OQU4pIHsKKwkJLyogU2FtZVZhbHVlKE5hTiwgTmFOKSA9IHRydWUsIHJlZ2FyZGxlc3Mg b2YgTmFOIHNpZ24gb3IgZXh0cmEgYml0cyAqLworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGN4ID09 IERVS19GUF9aRVJPICYmIGN5ID09IERVS19GUF9aRVJPKSB7CisJCS8qIE5vdGU6IGNhbm5vdCBh c3N1bWUgdGhhdCBhIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBvZiBzaWduYml0KCkgd291bGQKKwkJ ICogYWx3YXlzIGJlIHRoZSBzYW1lIC0tIGhlbmNlIGNhbm5vdCAocG9ydGFibHkpIHVzZSBzb21l dGhpbmcgbGlrZToKKwkJICoKKwkJICogICAgIHNpZ25iaXQoeCkgPT0gc2lnbmJpdCh5KQorCQkg Ki8KKwkJZHVrX3NtYWxsX2ludF90IHN4ID0gRFVLX1NJR05CSVQoeCkgPyAxIDogMDsKKwkJZHVr X3NtYWxsX2ludF90IHN5ID0gRFVLX1NJR05CSVQoeSkgPyAxIDogMDsKKwkJcmV0dXJuIChzeCA9 PSBzeSk7CisJfQorCisJLyogbm9ybWFsIGNvbXBhcmlzb247IGtub3duOgorCSAqICAgLSBib3Ro IHggYW5kIHkgYXJlIG5vdCBOYU5zIChidXQgb25lIG9mIHRoZW0gY2FuIGJlKQorCSAqICAgLSBi b3RoIHggYW5kIHkgYXJlIG5vdCB6ZXJvIChidXQgb25lIG9mIHRoZW0gY2FuIGJlKQorCSAqICAg LSB4IGFuZCB5IG1heSBiZSBkZW5vcm1hbCBvciBpbmZpbml0ZQorCSAqLworCisJcmV0dXJuICh4 ID09IHkpOworI2Vsc2UgIC8qIERVS19VU0VfUEFSQU5PSURfTUFUSCAqLworCWR1a19zbWFsbF9p bnRfdCBjeCA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKHgpOworCWR1a19zbWFs bF9pbnRfdCBjeSA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKHkpOworCisJaWYg KHggPT0geSkgeworCQkvKiBJRUVFIHJlcXVpcmVzIHRoYXQgTmFOcyBjb21wYXJlIGZhbHNlICov CisJCURVS19BU1NFUlQoRFVLX0ZQQ0xBU1NJRlkoeCkgIT0gRFVLX0ZQX05BTik7CisJCURVS19B U1NFUlQoRFVLX0ZQQ0xBU1NJRlkoeSkgIT0gRFVLX0ZQX05BTik7CisKKwkJLyogVXNpbmcgY2xh c3NpZmljYXRpb24gaGFzIHNtYWxsZXIgZm9vdHByaW50IHRoYW4gZGlyZWN0IGNvbXBhcmlzb24u ICovCisJCWlmIChEVUtfVU5MSUtFTFkoY3ggPT0gRFVLX0ZQX1pFUk8gJiYgY3kgPT0gRFVLX0ZQ X1pFUk8pKSB7CisJCQkvKiBOb3RlOiBjYW5ub3QgYXNzdW1lIHRoYXQgYSBub24temVybyByZXR1 cm4gdmFsdWUgb2Ygc2lnbmJpdCgpIHdvdWxkCisJCQkgKiBhbHdheXMgYmUgdGhlIHNhbWUgLS0g aGVuY2UgY2Fubm90IChwb3J0YWJseSkgdXNlIHNvbWV0aGluZyBsaWtlOgorCQkJICoKKwkJCSAq ICAgICBzaWduYml0KHgpID09IHNpZ25iaXQoeSkKKwkJCSAqLworCQkJcmV0dXJuIGR1a19kb3Vi bGVfc2FtZV9zaWduKHgsIHkpOworCQl9CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIElF RUUgcmVxdWlyZXMgdGhhdCB6ZXJvcyBjb21wYXJlIHRoZSBzYW1lIHJlZ2FyZGxlc3MKKwkJICog b2YgdGhlaXIgc2lnbiwgc28gaWYgYm90aCB4IGFuZCB5IGFyZSB6ZXJvZXMsIHRoZXkKKwkJICog YXJlIGNhdWdodCBhYm92ZS4KKwkJICovCisJCURVS19BU1NFUlQoIShEVUtfRlBDTEFTU0lGWSh4 KSA9PSBEVUtfRlBfWkVSTyAmJiBEVUtfRlBDTEFTU0lGWSh5KSA9PSBEVUtfRlBfWkVSTykpOwor CisJCS8qIERpZmZlcmVuY2UgdG8gbm9uLXN0cmljdC9zdHJpY3QgY29tcGFyaXNvbiBpcyB0aGF0 IE5hTnMgY29tcGFyZQorCQkgKiBlcXVhbCBhbmQgc2lnbmVkIHplcm8gc2lnbnMgbWF0dGVyLgor CQkgKi8KKwkJaWYgKERVS19VTkxJS0VMWShjeCA9PSBEVUtfRlBfTkFOICYmIGN5ID09IERVS19G UF9OQU4pKSB7CisJCQkvKiBTYW1lVmFsdWUoTmFOLCBOYU4pID0gdHJ1ZSwgcmVnYXJkbGVzcyBv ZiBOYU4gc2lnbiBvciBleHRyYSBiaXRzICovCisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4g MDsKKwl9CisjZW5kaWYgIC8qIERVS19VU0VfUEFSQU5PSURfTUFUSCAqLworfQorCitEVUtfSU5U RVJOQUwgZHVrX2Jvb2xfdCBkdWtfanNfZXF1YWxzX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLCBk dWtfdHZhbCAqdHZfeCwgZHVrX3R2YWwgKnR2X3ksIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsK KwlkdWtfdWludF90IHR5cGVfbWFza194OworCWR1a191aW50X3QgdHlwZV9tYXNrX3k7CisKKwkv KiBJZiBmbGFncyAhPSAwIChzdHJpY3Qgb3IgU2FtZVZhbHVlKSwgdGhyIGNhbiBiZSBOVUxMLiAg Rm9yIGxvb3NlCisJICogZXF1YWxzIGNvbXBhcmlzb24gaXQgbXVzdCBiZSAhPSBOVUxMLgorCSAq LworCURVS19BU1NFUlQoZmxhZ3MgIT0gMCB8fCB0aHIgIT0gTlVMTCk7CisKKwkvKgorCSAqICBT YW1lIHR5cGU/CisJICoKKwkgKiAgTm90ZTogc2luY2UgbnVtYmVyIHZhbHVlcyBoYXZlIG5vIGV4 cGxpY2l0IHRhZyBpbiB0aGUgOC1ieXRlCisJICogIHJlcHJlc2VudGF0aW9uLCBuZWVkIHRoZSBh d2t3YXJkIGlmICsgc3dpdGNoLgorCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQp CisJaWYgKERVS19UVkFMX0lTX0ZBU1RJTlQodHZfeCkgJiYgRFVLX1RWQUxfSVNfRkFTVElOVCh0 dl95KSkgeworCQlpZiAoRFVLX1RWQUxfR0VUX0ZBU1RJTlQodHZfeCkgPT0gRFVLX1RWQUxfR0VU X0ZBU1RJTlQodHZfeSkpIHsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7 CisJCX0KKwl9CisJZWxzZQorI2VuZGlmCisJaWYgKERVS19UVkFMX0lTX05VTUJFUih0dl94KSAm JiBEVUtfVFZBTF9JU19OVU1CRVIodHZfeSkpIHsKKwkJZHVrX2RvdWJsZV90IGQxLCBkMjsKKwor CQkvKiBDYXRjaGVzIGJvdGggZG91YmxlcyBhbmQgY2FzZXMgd2hlcmUgb25seSBvbmUgYXJndW1l bnQgaXMKKwkJICogYSBmYXN0aW50IHNvIGNhbid0IGFzc3VtZSBhIGRvdWJsZS4KKwkJICovCisJ CWQxID0gRFVLX1RWQUxfR0VUX05VTUJFUih0dl94KTsKKwkJZDIgPSBEVUtfVFZBTF9HRVRfTlVN QkVSKHR2X3kpOworCQlpZiAoRFVLX1VOTElLRUxZKChmbGFncyAmIERVS19FUVVBTFNfRkxBR19T QU1FVkFMVUUpICE9IDApKSB7CisJCQkvKiBTYW1lVmFsdWUgKi8KKwkJCXJldHVybiBkdWtfX2pz X3NhbWV2YWx1ZV9udW1iZXIoZDEsIGQyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGVxdWFscyBhbmQg c3RyaWN0IGVxdWFscyAqLworCQkJcmV0dXJuIGR1a19fanNfZXF1YWxzX251bWJlcihkMSwgZDIp OworCQl9CisJfSBlbHNlIGlmIChEVUtfVFZBTF9HRVRfVEFHKHR2X3gpID09IERVS19UVkFMX0dF VF9UQUcodHZfeSkpIHsKKwkJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2X3gpKSB7CisJCWNh c2UgRFVLX1RBR19VTkRFRklORUQ6CisJCWNhc2UgRFVLX1RBR19OVUxMOiB7CisJCQlyZXR1cm4g MTsKKwkJfQorCQljYXNlIERVS19UQUdfQk9PTEVBTjogeworCQkJcmV0dXJuIERVS19UVkFMX0dF VF9CT09MRUFOKHR2X3gpID09IERVS19UVkFMX0dFVF9CT09MRUFOKHR2X3kpOworCQl9CisJCWNh c2UgRFVLX1RBR19QT0lOVEVSOiB7CisJCQlyZXR1cm4gRFVLX1RWQUxfR0VUX1BPSU5URVIodHZf eCkgPT0gRFVLX1RWQUxfR0VUX1BPSU5URVIodHZfeSk7CisJCX0KKwkJY2FzZSBEVUtfVEFHX1NU UklORzoKKwkJY2FzZSBEVUtfVEFHX09CSkVDVDogeworCQkJLyogSGVhcCBwb2ludGVyIGNvbXBh cmlzb24gc3VmZmljZXMgZm9yIHN0cmluZ3MgYW5kIG9iamVjdHMuCisJCQkgKiBTeW1ib2xzIGNv bXBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIGludGVybmFsCisJCQkgKiByZXByZXNl bnRhdGlvbjsgYWdhaW4gaGVhcCBwb2ludGVyIGNvbXBhcmlzb24gc3VmZmljZXMuCisJCQkgKi8K KwkJCXJldHVybiBEVUtfVFZBTF9HRVRfSEVBUEhEUih0dl94KSA9PSBEVUtfVFZBTF9HRVRfSEVB UEhEUih0dl95KTsKKwkJfQorCQljYXNlIERVS19UQUdfQlVGRkVSOiB7CisJCQkvKiBJbiBEdWt0 YXBlIDIueCBwbGFpbiBidWZmZXJzIG1pbWljIFVpbnQ4QXJyYXkgb2JqZWN0cworCQkJICogc28g YWx3YXlzIGNvbXBhcmUgYnkgaGVhcCBwb2ludGVyLiAgSW4gRHVrdGFwZSAxLngKKwkJCSAqIHN0 cmljdCBjb21wYXJpc29uIHdvdWxkIGNvbXBhcmUgaGVhcCBwb2ludGVycyBhbmQKKwkJCSAqIG5v bi1zdHJpY3Qgd291bGQgY29tcGFyZSBjb250ZW50cy4KKwkJCSAqLworCQkJcmV0dXJuIERVS19U VkFMX0dFVF9IRUFQSERSKHR2X3gpID09IERVS19UVkFMX0dFVF9IRUFQSERSKHR2X3kpOworCQl9 CisJCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6IHsKKwkJCS8qIEF0IGxlYXN0ICdtYWdpYycgaGFz IGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIGZ1bmN0aW9uCisJCQkgKiBpZGVudGl0eS4KKwkJCSAq LworCQkJZHVrX3NtYWxsX3VpbnRfdCBsZl9mbGFnc194OworCQkJZHVrX3NtYWxsX3VpbnRfdCBs Zl9mbGFnc195OworCQkJZHVrX2NfZnVuY3Rpb24gZnVuY194OworCQkJZHVrX2NfZnVuY3Rpb24g ZnVuY195OworCisJCQlEVUtfVFZBTF9HRVRfTElHSFRGVU5DKHR2X3gsIGZ1bmNfeCwgbGZfZmxh Z3NfeCk7CisJCQlEVUtfVFZBTF9HRVRfTElHSFRGVU5DKHR2X3ksIGZ1bmNfeSwgbGZfZmxhZ3Nf eSk7CisJCQlyZXR1cm4gKChmdW5jX3ggPT0gZnVuY195KSAmJiAobGZfZmxhZ3NfeCA9PSBsZl9m bGFnc195KSkgPyAxIDogMDsKKwkJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQlj YXNlIERVS19UQUdfRkFTVElOVDoKKyNlbmRpZgorCQlkZWZhdWx0OiB7CisJCQlEVUtfQVNTRVJU KCFEVUtfVFZBTF9JU19VTlVTRUQodHZfeCkpOworCQkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNf VU5VU0VEKHR2X3kpKTsKKwkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2X3gpKTsK KwkJCURVS19BU1NFUlQoRFVLX1RWQUxfSVNfTlVNQkVSKHR2X3kpKTsKKwkJCURVS19VTlJFQUNI QUJMRSgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJfQorCX0KKworCWlmICgoZmxhZ3MgJiAoRFVL X0VRVUFMU19GTEFHX1NUUklDVCB8IERVS19FUVVBTFNfRkxBR19TQU1FVkFMVUUpKSAhPSAwKSB7 CisJCXJldHVybiAwOworCX0KKworCURVS19BU1NFUlQoZmxhZ3MgPT0gMCk7ICAvKiBub24tc3Ry aWN0IGVxdWFsaXR5IGZyb20gaGVyZSBvbiAqLworCisJLyoKKwkgKiAgVHlwZXMgYXJlIGRpZmZl cmVudDsgdmFyaW91cyBjYXNlcyBmb3Igbm9uLXN0cmljdCBjb21wYXJpc29uCisJICoKKwkgKiAg U2luY2UgY29tcGFyaXNvbiBpcyBzeW1tZXRyaWMsIHdlIHVzZSBhICJzd2FwIHRyaWNrIiB0byBy ZWR1Y2UKKwkgKiAgY29kZSBzaXplLgorCSAqLworCisJdHlwZV9tYXNrX3ggPSBkdWtfZ2V0X3R5 cGVfbWFza190dmFsKHR2X3gpOworCXR5cGVfbWFza195ID0gZHVrX2dldF90eXBlX21hc2tfdHZh bCh0dl95KTsKKworCS8qIFVuZGVmaW5lZC9udWxsIGFyZSBjb25zaWRlcmVkIGVxdWFsIChlLmcu ICJudWxsID09IHVuZGVmaW5lZCIgLT4gdHJ1ZSkuICovCisJaWYgKCh0eXBlX21hc2tfeCAmIChE VUtfVFlQRV9NQVNLX1VOREVGSU5FRCB8IERVS19UWVBFX01BU0tfTlVMTCkpICYmCisJICAgICh0 eXBlX21hc2tfeSAmIChEVUtfVFlQRV9NQVNLX05VTEwgfCBEVUtfVFlQRV9NQVNLX1VOREVGSU5F RCkpKSB7CisJCXJldHVybiAxOworCX0KKworCS8qIE51bWJlci9zdHJpbmcgLT4gY29lcmNlIHN0 cmluZyB0byBudW1iZXIgKGUuZy4gIicxLjUnID09IDEuNSIgLT4gdHJ1ZSkuICovCisJaWYgKCh0 eXBlX21hc2tfeCAmIERVS19UWVBFX01BU0tfTlVNQkVSKSAmJiAodHlwZV9tYXNrX3kgJiBEVUtf VFlQRV9NQVNLX1NUUklORykpIHsKKwkJaWYgKCFEVUtfVFZBTF9TVFJJTkdfSVNfU1lNQk9MKHR2 X3kpKSB7CisJCQlkdWtfZG91YmxlX3QgZDEsIGQyOworCQkJZDEgPSBEVUtfVFZBTF9HRVRfTlVN QkVSKHR2X3gpOworCQkJZDIgPSBkdWtfdG9fbnVtYmVyX3R2YWwodGhyLCB0dl95KTsKKwkJCXJl dHVybiBkdWtfX2pzX2VxdWFsc19udW1iZXIoZDEsIGQyKTsKKwkJfQorCX0KKwlpZiAoKHR5cGVf bWFza194ICYgRFVLX1RZUEVfTUFTS19TVFJJTkcpICYmICh0eXBlX21hc2tfeSAmIERVS19UWVBF X01BU0tfTlVNQkVSKSkgeworCQlpZiAoIURVS19UVkFMX1NUUklOR19JU19TWU1CT0wodHZfeCkp IHsKKwkJCWR1a19kb3VibGVfdCBkMSwgZDI7CisJCQlkMSA9IERVS19UVkFMX0dFVF9OVU1CRVIo dHZfeSk7CisJCQlkMiA9IGR1a190b19udW1iZXJfdHZhbCh0aHIsIHR2X3gpOworCQkJcmV0dXJu IGR1a19fanNfZXF1YWxzX251bWJlcihkMSwgZDIpOworCQl9CisJfQorCisJLyogQm9vbGVhbi9h bnkgLT4gY29lcmNlIGJvb2xlYW4gdG8gbnVtYmVyIGFuZCB0cnkgYWdhaW4uICBJZiBib29sZWFu IGlzCisJICogY29tcGFyZWQgdG8gYSBwb2ludGVyLCB0aGUgZmluYWwgY29tcGFyaXNvbiBhZnRl ciBjb2VyY2lvbiBub3cgYWx3YXlzCisJICogeWllbGRzIGZhbHNlIChhcyBwb2ludGVyIHZzLiBu dW1iZXIgY29tcGFyZXMgdG8gZmFsc2UpLCBidXQgdGhpcyBpcworCSAqIG5vdCBzcGVjaWFsIGNh c2VkLgorCSAqCisJICogVG9OdW1iZXIoYm9vbCkgaXMgKzEuMCBvciAwLjAuICBUYWdnZWQgYm9v bGVhbiB2YWx1ZSBpcyBhbHdheXMgMCBvciAxLgorCSAqLworCWlmICh0eXBlX21hc2tfeCAmIERV S19UWVBFX01BU0tfQk9PTEVBTikgeworCQlEVUtfQVNTRVJUKERVS19UVkFMX0dFVF9CT09MRUFO KHR2X3gpID09IDAgfHwgRFVLX1RWQUxfR0VUX0JPT0xFQU4odHZfeCkgPT0gMSk7CisJCWR1a19w dXNoX3VpbnQodGhyLCBEVUtfVFZBTF9HRVRfQk9PTEVBTih0dl94KSk7CisJCWR1a19wdXNoX3R2 YWwodGhyLCB0dl95KTsKKwkJZ290byByZWN1cnNpdmVfY2FsbDsKKwl9CisJaWYgKHR5cGVfbWFz a195ICYgRFVLX1RZUEVfTUFTS19CT09MRUFOKSB7CisJCURVS19BU1NFUlQoRFVLX1RWQUxfR0VU X0JPT0xFQU4odHZfeSkgPT0gMCB8fCBEVUtfVFZBTF9HRVRfQk9PTEVBTih0dl95KSA9PSAxKTsK KwkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X3gpOworCQlkdWtfcHVzaF91aW50KHRociwgRFVLX1RW QUxfR0VUX0JPT0xFQU4odHZfeSkpOworCQlnb3RvIHJlY3Vyc2l2ZV9jYWxsOworCX0KKworCS8q IFN0cmluZy1udW1iZXItc3ltYm9sL29iamVjdCAtPiBjb2VyY2Ugb2JqZWN0IHRvIHByaW1pdGl2 ZSAoYXBwYXJlbnRseSB3aXRob3V0IGhpbnQpLCB0aGVuIHRyeSBhZ2Fpbi4gKi8KKwlpZiAoKHR5 cGVfbWFza194ICYgKERVS19UWVBFX01BU0tfU1RSSU5HIHwgRFVLX1RZUEVfTUFTS19OVU1CRVIp KSAmJgorCSAgICAodHlwZV9tYXNrX3kgJiBEVUtfVFlQRV9NQVNLX09CSkVDVCkpIHsKKwkJLyog Tm8gc3ltYm9sIGNoZWNrIG5lZWRlZCBiZWNhdXNlIHN5bWJvbHMgYW5kIHN0cmluZ3MgYXJlIGFj Y2VwdGVkLiAqLworCQlkdWtfcHVzaF90dmFsKHRociwgdHZfeCk7CisJCWR1a19wdXNoX3R2YWwo dGhyLCB0dl95KTsKKwkJZHVrX3RvX3ByaW1pdGl2ZSh0aHIsIC0xLCBEVUtfSElOVF9OT05FKTsg IC8qIGFwcGFyZW50bHkgbm8gaGludD8gKi8KKwkJZ290byByZWN1cnNpdmVfY2FsbDsKKwl9CisJ aWYgKCh0eXBlX21hc2tfeCAmIERVS19UWVBFX01BU0tfT0JKRUNUKSAmJgorCSAgICAodHlwZV9t YXNrX3kgJiAoRFVLX1RZUEVfTUFTS19TVFJJTkcgfCBEVUtfVFlQRV9NQVNLX05VTUJFUikpKSB7 CisJCS8qIE5vIHN5bWJvbCBjaGVjayBuZWVkZWQgYmVjYXVzZSBzeW1ib2xzIGFuZCBzdHJpbmdz IGFyZSBhY2NlcHRlZC4gKi8KKwkJZHVrX3B1c2hfdHZhbCh0aHIsIHR2X3gpOworCQlkdWtfcHVz aF90dmFsKHRociwgdHZfeSk7CisJCWR1a190b19wcmltaXRpdmUodGhyLCAtMiwgRFVLX0hJTlRf Tk9ORSk7ICAvKiBhcHBhcmVudGx5IG5vIGhpbnQ/ICovCisJCWdvdG8gcmVjdXJzaXZlX2NhbGw7 CisJfQorCisJLyogTm90aGluZyB3b3JrZWQgLT4gbm90IGVxdWFsLiAqLworCXJldHVybiAwOwor CisgcmVjdXJzaXZlX2NhbGw6CisJLyogU2hhcmVkIGNvZGUgcGF0aCB0byBjYWxsIHRoZSBoZWxw ZXIgYWdhaW4gd2l0aCBhcmd1bWVudHMgb24gc3RhY2sgdG9wLiAqLworCXsKKwkJZHVrX2Jvb2xf dCByYzsKKwkJcmMgPSBkdWtfanNfZXF1YWxzX2hlbHBlcih0aHIsCisJCSAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0yKSwKKwkJICAgICAgICAgICAg ICAgICAgICAgICAgICBEVUtfR0VUX1RWQUxfTkVHSURYKHRociwgLTEpLAorCQkgICAgICAgICAg ICAgICAgICAgICAgICAgIDAgLypmbGFnczpub25zdHJpY3QqLyk7CisJCWR1a19wb3BfMl91bnNh ZmUodGhyKTsKKwkJcmV0dXJuIHJjOworCX0KK30KKworLyoKKyAqICBDb21wYXJpc29ucyAoeCA+ PSB5LCB4ID4geSwgeCA8PSB5LCB4IDwgeSkKKyAqCisgKiAgRTUgU2VjdGlvbiAxMS44LjU6IGlt cGxlbWVudCAneCA8IHknIGFuZCB0aGVuIHVzZSBuZWdhdGUgYW5kIGV2YWxfbGVmdF9maXJzdAor ICogIGZsYWdzIHRvIGdldCB0aGUgcmVzdC4KKyAqLworCisvKiBYWFg6IHRoaXMgc2hvdWxkIHBy b2JhYmx5IGp1c3Qgb3BlcmF0ZSBvbiB0aGUgc3RhY2sgdG9wLCBiZWNhdXNlIGl0CisgKiBuZWVk cyB0byBwdXNoIHN0dWZmIG9uIHRoZSBzdGFjayBhbnl3YXkuLi4KKyAqLworCitEVUtfSU5URVJO QUwgZHVrX3NtYWxsX2ludF90IGR1a19qc19kYXRhX2NvbXBhcmUoY29uc3QgZHVrX3VpbnQ4X3Qg KmJ1ZjEsIGNvbnN0IGR1a191aW50OF90ICpidWYyLCBkdWtfc2l6ZV90IGxlbjEsIGR1a19zaXpl X3QgbGVuMikgeworCWR1a19zaXplX3QgcHJlZml4X2xlbjsKKwlkdWtfc21hbGxfaW50X3QgcmM7 CisKKwlwcmVmaXhfbGVuID0gKGxlbjEgPD0gbGVuMiA/IGxlbjEgOiBsZW4yKTsKKworCS8qIGR1 a19tZW1jbXAoKSBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB6ZXJvIChlcXVhbCkgZm9yIHplcm8g bGVuZ3RoCisJICogaW5wdXRzLgorCSAqLworCXJjID0gZHVrX21lbWNtcF91bnNhZmUoKGNvbnN0 IHZvaWQgKikgYnVmMSwKKwkgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIGJ1 ZjIsCisJICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBwcmVmaXhfbGVuKTsKKworCWlm IChyYyA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAocmMgPiAwKSB7CisJCXJldHVy biAxOworCX0KKworCS8qIHByZWZpeCBtYXRjaGVzLCBsZW5ndGhzIG1hdHRlciBub3cgKi8KKwlp ZiAobGVuMSA8IGxlbjIpIHsKKwkJLyogZS5nLiAieCIgPCAieHgiICovCisJCXJldHVybiAtMTsK Kwl9IGVsc2UgaWYgKGxlbjEgPiBsZW4yKSB7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAw OworfQorCitEVUtfSU5URVJOQUwgZHVrX3NtYWxsX2ludF90IGR1a19qc19zdHJpbmdfY29tcGFy ZShkdWtfaHN0cmluZyAqaDEsIGR1a19oc3RyaW5nICpoMikgeworCS8qCisJICogIFN0cmluZyBj b21wYXJpc29uIChFNSBTZWN0aW9uIDExLjguNSwgc3RlcCA0KSwgd2hpY2gKKwkgKiAgbmVlZHMg dG8gY29tcGFyZSBjb2RlcG9pbnQgYnkgY29kZXBvaW50LgorCSAqCisJICogIEhvd2V2ZXIsIFVU Ri04IGFsbG93cyB1cyB0byB1c2Ugc3RyY21wIGRpcmVjdGx5OiB0aGUgc2hhcmVkCisJICogIHBy ZWZpeCB3aWxsIGJlIGVuY29kZWQgaWRlbnRpY2FsbHkgKFVURi04IGhhcyB1bmlxdWUgZW5jb2Rp bmcpCisJICogIGFuZCB0aGUgZmlyc3QgZGlmZmVyaW5nIGNoYXJhY3RlciBjYW4gYmUgY29tcGFy ZWQgd2l0aCBhIHNpbXBsZQorCSAqICB1bnNpZ25lZCBieXRlIGNvbXBhcmlzb24gKHdoaWNoIHN0 cmNtcCBkb2VzKS4KKwkgKgorCSAqICBUaGlzIHdpbGwgbm90IHdvcmsgcHJvcGVybHkgZm9yIG5v bi14dXRmLTggc3RyaW5ncywgYnV0IHRoaXMKKwkgKiAgaXMgbm90IGFuIGlzc3VlIGZvciBjb21w bGlhbmNlLgorCSAqLworCisJRFVLX0FTU0VSVChoMSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGgy ICE9IE5VTEwpOworCisJcmV0dXJuIGR1a19qc19kYXRhX2NvbXBhcmUoKGNvbnN0IGR1a191aW50 OF90ICopIERVS19IU1RSSU5HX0dFVF9EQVRBKGgxKSwKKwkgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaDIpLAorCSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfc2l6ZV90KSBEVUtfSFNUUklOR19HRVRfQllU RUxFTihoMSksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1a19zaXplX3QpIERVS19I U1RSSU5HX0dFVF9CWVRFTEVOKGgyKSk7Cit9CisKKyNpZiAwICAvKiB1bnVzZWQgKi8KK0RVS19J TlRFUk5BTCBkdWtfc21hbGxfaW50X3QgZHVrX2pzX2J1ZmZlcl9jb21wYXJlKGR1a19oZWFwICpo ZWFwLCBkdWtfaGJ1ZmZlciAqaDEsIGR1a19oYnVmZmVyICpoMikgeworCS8qIFNpbWlsYXIgdG8g U3RyaW5nIGNvbXBhcmlzb24uICovCisKKwlEVUtfQVNTRVJUKGgxICE9IE5VTEwpOworCURVS19B U1NFUlQoaDIgIT0gTlVMTCk7CisJRFVLX1VOUkVGKGhlYXApOworCisJcmV0dXJuIGR1a19qc19k YXRhX2NvbXBhcmUoKGNvbnN0IGR1a191aW50OF90ICopIERVS19IQlVGRkVSX0dFVF9EQVRBX1BU UihoZWFwLCBoMSksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGR1a191aW50 OF90ICopIERVS19IQlVGRkVSX0dFVF9EQVRBX1BUUihoZWFwLCBoMiksCisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGR1a19zaXplX3QpIERVS19IQlVGRkVSX0dFVF9TSVpFKGgxKSwKKwkg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX3NpemVfdCkgRFVLX0hCVUZGRVJfR0VUX1NJ WkUoaDIpKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCitEVUtf TE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2NvbXBhcmVfZmFzdGludChkdWtfYm9vbF90IHJldHZhbCwg ZHVrX2ludDY0X3QgdjEsIGR1a19pbnQ2NF90IHYyKSB7CisJRFVLX0FTU0VSVChyZXR2YWwgPT0g MCB8fCByZXR2YWwgPT0gMSk7CisJaWYgKHYxIDwgdjIpIHsKKwkJcmV0dXJuIHJldHZhbCBeIDE7 CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJldHZhbDsKKwl9Cit9CisjZW5kaWYKKworI2lmIGRlZmlu ZWQoRFVLX1VTRV9QQVJBTk9JRF9NQVRIKQorRFVLX0xPQ0FMIGR1a19ib29sX3QgZHVrX19jb21w YXJlX251bWJlcihkdWtfYm9vbF90IHJldHZhbCwgZHVrX2RvdWJsZV90IGQxLCBkdWtfZG91Ymxl X3QgZDIpIHsKKwlkdWtfc21hbGxfaW50X3QgYzEsIHMxLCBjMiwgczI7CisKKwlEVUtfQVNTRVJU KHJldHZhbCA9PSAwIHx8IHJldHZhbCA9PSAxKTsKKwljMSA9IChkdWtfc21hbGxfaW50X3QpIERV S19GUENMQVNTSUZZKGQxKTsKKwlzMSA9IChkdWtfc21hbGxfaW50X3QpIERVS19TSUdOQklUKGQx KTsKKwljMiA9IChkdWtfc21hbGxfaW50X3QpIERVS19GUENMQVNTSUZZKGQyKTsKKwlzMiA9IChk dWtfc21hbGxfaW50X3QpIERVS19TSUdOQklUKGQyKTsKKworCWlmIChjMSA9PSBEVUtfRlBfTkFO IHx8IGMyID09IERVS19GUF9OQU4pIHsKKwkJcmV0dXJuIDA7ICAvKiBBbHdheXMgZmFsc2UsIHJl Z2FyZGxlc3Mgb2YgbmVnYXRpb24uICovCisJfQorCisJaWYgKGMxID09IERVS19GUF9aRVJPICYm IGMyID09IERVS19GUF9aRVJPKSB7CisJCS8qIEZvciBhbGwgY29tYmluYXRpb25zOiArMCA8ICsw LCArMCA8IC0wLCAtMCA8ICswLCAtMCA8IC0wLAorCQkgKiBzdGVwcyBlLCBmLCBhbmQgZy4KKwkJ ICovCisJCXJldHVybiByZXR2YWw7ICAvKiBmYWxzZSAqLworCX0KKworCWlmIChkMSA9PSBkMikg eworCQlyZXR1cm4gcmV0dmFsOyAgLyogZmFsc2UgKi8KKwl9CisKKwlpZiAoYzEgPT0gRFVLX0ZQ X0lORklOSVRFICYmIHMxID09IDApIHsKKwkJLyogeCA9PSArSW5maW5pdHkgKi8KKwkJcmV0dXJu IHJldHZhbDsgIC8qIGZhbHNlICovCisJfQorCisJaWYgKGMyID09IERVS19GUF9JTkZJTklURSAm JiBzMiA9PSAwKSB7CisJCS8qIHkgPT0gK0luZmluaXR5ICovCisJCXJldHVybiByZXR2YWwgXiAx OyAgLyogdHJ1ZSAqLworCX0KKworCWlmIChjMiA9PSBEVUtfRlBfSU5GSU5JVEUgJiYgczIgIT0g MCkgeworCQkvKiB5ID09IC1JbmZpbml0eSAqLworCQlyZXR1cm4gcmV0dmFsOyAgLyogZmFsc2Ug Ki8KKwl9CisKKwlpZiAoYzEgPT0gRFVLX0ZQX0lORklOSVRFICYmIHMxICE9IDApIHsKKwkJLyog eCA9PSAtSW5maW5pdHkgKi8KKwkJcmV0dXJuIHJldHZhbCBeIDE7ICAvKiB0cnVlICovCisJfQor CisJaWYgKGQxIDwgZDIpIHsKKwkJcmV0dXJuIHJldHZhbCBeIDE7ICAvKiB0cnVlICovCisJfQor CisJcmV0dXJuIHJldHZhbDsgIC8qIGZhbHNlICovCit9CisjZWxzZSAgLyogRFVLX1VTRV9QQVJB Tk9JRF9NQVRIICovCitEVUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2NvbXBhcmVfbnVtYmVyKGR1 a19ib29sX3QgcmV0dmFsLCBkdWtfZG91YmxlX3QgZDEsIGR1a19kb3VibGVfdCBkMikgeworCS8q IFRoaXMgY29tcGFyaXNvbiB0cmVlIHJlbGllcyBkb2Vzbid0IG1hdGNoIHRoZSBleGFjdCBzdGVw cyBpbgorCSAqIEU1IFNlY3Rpb24gMTEuOC41IGJ1dCBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSBy ZXN1bHRzLiAgVGhlCisJICogc3RlcHMgcmVseSBvbiBleGFjdCBJRUVFIHNlbWFudGljcyBmb3Ig TmFOcywgZXRjLgorCSAqLworCisJRFVLX0FTU0VSVChyZXR2YWwgPT0gMCB8fCByZXR2YWwgPT0g MSk7CisJaWYgKGQxIDwgZDIpIHsKKwkJLyogSW4gbm8gY2FzZSBzaG91bGQgYm90aCAoZDEgPCBk MikgYW5kIChkMiA8IGQxKSBiZSB0cnVlLgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgbmVpdGhl ciBpcyB0cnVlIHRob3VnaCwgYW5kIHRoYXQncworCQkgKiBoYW5kbGVkIGJlbG93LgorCQkgKi8K KwkJRFVLX0FTU0VSVCghKGQyIDwgZDEpKTsKKworCQkvKiAtIGQxIDwgZDIsIGJvdGggZDEvZDIg YXJlIG5vcm1hbHMgKG5vdCBJbmZpbml0eSwgbm90IE5hTikKKwkJICogLSBkMiBpcyArSW5maW5p dHksIGQxICE9ICtJbmZpbml0eSBhbmQgTmFOCisJCSAqIC0gZDEgaXMgLUluZmluaXR5LCBkMiAh PSAtSW5maW5pdHkgYW5kIE5hTgorCQkgKi8KKwkJcmV0dXJuIHJldHZhbCBeIDE7CisJfSBlbHNl IHsKKwkJaWYgKGQyIDwgZDEpIHsKKwkJCS8qIC0gIShkMSA8IGQyKSwgYm90aCBkMS9kMiBhcmUg bm9ybWFscyAobm90IEluZmluaXR5LCBub3QgTmFOKQorCQkJICogLSBkMSBpcyArSW5maW5pdHks IGQyICE9ICtJbmZpbml0eSBhbmQgTmFOCisJCQkgKiAtIGQyIGlzIC1JbmZpbml0eSwgZDEgIT0g LUluZmluaXR5IGFuZCBOYU4KKwkJCSAqLworCQkJcmV0dXJuIHJldHZhbDsKKwkJfSBlbHNlIHsK KwkJCS8qIC0gZDEgYW5kL29yIGQyIGlzIE5hTgorCQkJICogLSBkMSBhbmQgZDIgYXJlIGJvdGgg Ky8tIDAKKwkJCSAqIC0gZDEgPT0gZDIgKGluY2x1ZGluZyBpbmZpbml0aWVzKQorCQkJICovCisJ CQlpZiAoZHVrX2RvdWJsZV9pc19uYW4oZDEpIHx8IGR1a19kb3VibGVfaXNfbmFuKGQyKSkgewor CQkJCS8qIE5vdGU6IHVuZGVmaW5lZCBmcm9tIFNlY3Rpb24gMTEuOC41IGFsd2F5cworCQkJCSAq IHJlc3VsdHMgaW4gZmFsc2UgcmV0dXJuIChzZWUgZS5nLiBTZWN0aW9uCisJCQkJICogMTEuOC4z KSAtIGhlbmNlIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUuCisJCQkJICovCisJCQkJcmV0dXJuIDA7 ICAvKiB6ZXJvIHJlZ2FyZGxlc3Mgb2YgbmVnYXRpb24gKi8KKwkJCX0gZWxzZSB7CisJCQkJcmV0 dXJuIHJldHZhbDsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9QQVJBTk9J RF9NQVRIICovCisKK0RVS19JTlRFUk5BTCBkdWtfYm9vbF90IGR1a19qc19jb21wYXJlX2hlbHBl cihkdWtfaHRocmVhZCAqdGhyLCBkdWtfdHZhbCAqdHZfeCwgZHVrX3R2YWwgKnR2X3ksIGR1a19z bWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtfZG91YmxlX3QgZDEsIGQyOworCWR1a19zbWFsbF9p bnRfdCByYzsKKwlkdWtfYm9vbF90IHJldHZhbDsKKworCURVS19BU1NFUlQoRFVLX0NPTVBBUkVf RkxBR19ORUdBVEUgPT0gMSk7ICAvKiBSZWx5IG9uIHRoaXMgZmxhZyBiZWluZyBsb3dlc3QuICov CisJcmV0dmFsID0gZmxhZ3MgJiBEVUtfQ09NUEFSRV9GTEFHX05FR0FURTsKKwlEVUtfQVNTRVJU KHJldHZhbCA9PSAwIHx8IHJldHZhbCA9PSAxKTsKKworCS8qIEZhc3QgcGF0aCBmb3IgZmFzdGlu dHMgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfRkFTVElOVCkKKwlpZiAoRFVLX0xJS0VMWShEVUtf VFZBTF9JU19GQVNUSU5UKHR2X3gpICYmIERVS19UVkFMX0lTX0ZBU1RJTlQodHZfeSkpKSB7CisJ CXJldHVybiBkdWtfX2NvbXBhcmVfZmFzdGludChyZXR2YWwsCisJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfVFZBTF9HRVRfRkFTVElOVCh0dl94KSwKKwkJICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERVS19UVkFMX0dFVF9GQVNUSU5UKHR2X3kpKTsKKwl9CisjZW5kaWYgIC8q IERVS19VU0VfRkFTVElOVCAqLworCisJLyogRmFzdCBwYXRoIGZvciBudW1iZXJzIChvbmUgb2Yg d2hpY2ggbWF5IGJlIGEgZmFzdGludCkgKi8KKyNpZiAhZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9T SVpFKQorCWlmIChEVUtfTElLRUxZKERVS19UVkFMX0lTX05VTUJFUih0dl94KSAmJiBEVUtfVFZB TF9JU19OVU1CRVIodHZfeSkpKSB7CisJCXJldHVybiBkdWtfX2NvbXBhcmVfbnVtYmVyKHJldHZh bCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RWQUxfR0VUX05VTUJFUih0dl94 KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RWQUxfR0VUX05VTUJFUih0dl95 KSk7CisJfQorI2VuZGlmCisKKwkvKiBTbG93IHBhdGggKi8KKworCWR1a19wdXNoX3R2YWwodGhy LCB0dl94KTsKKwlkdWtfcHVzaF90dmFsKHRociwgdHZfeSk7CisKKwlpZiAoZmxhZ3MgJiBEVUtf Q09NUEFSRV9GTEFHX0VWQUxfTEVGVF9GSVJTVCkgeworCQlkdWtfdG9fcHJpbWl0aXZlKHRociwg LTIsIERVS19ISU5UX05VTUJFUik7CisJCWR1a190b19wcmltaXRpdmUodGhyLCAtMSwgRFVLX0hJ TlRfTlVNQkVSKTsKKwl9IGVsc2UgeworCQlkdWtfdG9fcHJpbWl0aXZlKHRociwgLTEsIERVS19I SU5UX05VTUJFUik7CisJCWR1a190b19wcmltaXRpdmUodGhyLCAtMiwgRFVLX0hJTlRfTlVNQkVS KTsKKwl9CisKKwkvKiBOb3RlOiByZXVzZSB2YXJpYWJsZXMgKi8KKwl0dl94ID0gRFVLX0dFVF9U VkFMX05FR0lEWCh0aHIsIC0yKTsKKwl0dl95ID0gRFVLX0dFVF9UVkFMX05FR0lEWCh0aHIsIC0x KTsKKworCWlmIChEVUtfVFZBTF9JU19TVFJJTkcodHZfeCkgJiYgRFVLX1RWQUxfSVNfU1RSSU5H KHR2X3kpKSB7CisJCWR1a19oc3RyaW5nICpoMSA9IERVS19UVkFMX0dFVF9TVFJJTkcodHZfeCk7 CisJCWR1a19oc3RyaW5nICpoMiA9IERVS19UVkFMX0dFVF9TVFJJTkcodHZfeSk7CisJCURVS19B U1NFUlQoaDEgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoaDIgIT0gTlVMTCk7CisKKwkJaWYgKERV S19MSUtFTFkoIURVS19IU1RSSU5HX0hBU19TWU1CT0woaDEpICYmICFEVUtfSFNUUklOR19IQVNf U1lNQk9MKGgyKSkpIHsKKwkJCXJjID0gZHVrX2pzX3N0cmluZ19jb21wYXJlKGgxLCBoMik7CisJ CQlkdWtfcG9wXzJfdW5zYWZlKHRocik7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJcmV0dXJuIHJl dHZhbCBeIDE7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCX0KKwor CQkvKiBPbmUgb3IgYm90aCBhcmUgU3ltYm9sczogZmFsbCB0aHJvdWdoIHRvIGhhbmRsZSBpbiB0 aGUKKwkJICogZ2VuZXJpYyBwYXRoLiAgQ29uY3JldGVseSwgVG9OdW1iZXIoKSB3aWxsIGZhaWwu CisJCSAqLworCX0KKworCS8qIE9yZGVyaW5nIHNob3VsZCBub3QgbWF0dGVyIChFNSBTZWN0aW9u IDExLjguNSwgc3RlcCAzLmEpLiAqLworI2lmIDAKKwlpZiAoZmxhZ3MgJiBEVUtfQ09NUEFSRV9G TEFHX0VWQUxfTEVGVF9GSVJTVCkgeworCQlkMSA9IGR1a190b19udW1iZXJfbTIodGhyKTsKKwkJ ZDIgPSBkdWtfdG9fbnVtYmVyX20xKHRocik7CisJfSBlbHNlIHsKKwkJZDIgPSBkdWtfdG9fbnVt YmVyX20xKHRocik7CisJCWQxID0gZHVrX3RvX251bWJlcl9tMih0aHIpOworCX0KKyNlbmRpZgor CWQxID0gZHVrX3RvX251bWJlcl9tMih0aHIpOworCWQyID0gZHVrX3RvX251bWJlcl9tMSh0aHIp OworCisJLyogV2Ugd2FudCB0byBkdWtfcG9wXzJfdW5zYWZlKHRocik7IGJlY2F1c2UgdGhlIHZh bHVlcyBhcmUgbnVtYmVycworCSAqIG5vIGRlY3JlZiBjaGVjayBpcyBuZWVkZWQuCisJICovCisj aWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorCWR1a19wb3BfMl9ub2RlY3JlZl91bnNh ZmUodGhyKTsKKyNlbHNlCisJRFVLX0FTU0VSVCghRFVLX1RWQUxfTkVFRFNfUkVGQ09VTlRfVVBE QVRFKGR1a19nZXRfdHZhbCh0aHIsIC0yKSkpOworCURVS19BU1NFUlQoIURVS19UVkFMX05FRURT X1JFRkNPVU5UX1VQREFURShkdWtfZ2V0X3R2YWwodGhyLCAtMSkpKTsKKwlEVUtfQVNTRVJUKGR1 a19nZXRfdG9wKHRocikgPj0gMik7CisJdGhyLT52YWxzdGFja190b3AgLT0gMjsKKwl0dl94ID0g dGhyLT52YWxzdGFja190b3A7CisJdHZfeSA9IHR2X3ggKyAxOworCURVS19UVkFMX1NFVF9VTkRF RklORUQodHZfeCk7ICAvKiBWYWx1ZSBzdGFjayBwb2xpY3kgKi8KKwlEVUtfVFZBTF9TRVRfVU5E RUZJTkVEKHR2X3kpOworI2VuZGlmCisKKwlyZXR1cm4gZHVrX19jb21wYXJlX251bWJlcihyZXR2 YWwsIGQxLCBkMik7Cit9CisKKy8qCisgKiAgaW5zdGFuY2VvZgorICovCisKKy8qCisgKiAgRVMy MDE1IFNlY3Rpb24gNy4zLjE5IGRlc2NyaWJlcyB0aGUgT3JkaW5hcnlIYXNJbnN0YW5jZSgpIGFs Z29yaXRobQorICogIHdoaWNoIGNvdmVycyBib3RoIGJvdW5kIGFuZCBub24tYm91bmQgZnVuY3Rp b25zOyBpbiBlZmZlY3QgdGhlIGFsZ29yaXRobQorICogIGluY2x1ZGVzIEU1IFNlY3Rpb25zIDEx LjguNiwgMTUuMy41LjMsIGFuZCAxNS4zLjQuNS4zLgorICoKKyAqICBFUzIwMTUgU2VjdGlvbiAx Mi45LjQgZGVzY3JpYmVzIHRoZSBpbnN0YW5jZW9mIG9wZXJhdG9yIHdoaWNoIGZpcnN0CisgKiAg Y2hlY2tzIEBAaGFzSW5zdGFuY2Ugd2VsbC1rbm93biBzeW1ib2wgYW5kIGZhbGxzIGJhY2sgdG8K KyAqICBPcmRpbmFyeUhhc0luc3RhbmNlKCkuCisgKgorICogIExpbWl0ZWQgUHJveHkgc3VwcG9y dDogZG9uJ3Qgc3VwcG9ydCAnZ2V0UHJvdG90eXBlT2YnIHRyYXAgYnV0CisgKiAgY29udGludWUg bG9va3VwIGluIFByb3h5IHRhcmdldCBpZiB0aGUgdmFsdWUgaXMgYSBQcm94eS4KKyAqLworCitE VUtfTE9DQUwgZHVrX2Jvb2xfdCBkdWtfX2pzX2luc3RhbmNlb2ZfaGVscGVyKGR1a19odGhyZWFk ICp0aHIsIGR1a190dmFsICp0dl94LCBkdWtfdHZhbCAqdHZfeSwgZHVrX2Jvb2xfdCBza2lwX3N5 bV9jaGVjaykgeworCWR1a19ob2JqZWN0ICpmdW5jOworCWR1a19ob2JqZWN0ICp2YWw7CisJZHVr X2hvYmplY3QgKnByb3RvOworCWR1a190dmFsICp0djsKKwlkdWtfYm9vbF90IHNraXBfZmlyc3Q7 CisJZHVrX3VpbnRfdCBzYW5pdHk7CisKKwkvKgorCSAqICBHZXQgdGhlIHZhbHVlcyBvbnRvIHRo ZSBzdGFjayBmaXJzdC4gIEl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGNvdmVyCisJICogIHNvbWUg bm9ybWFsIGNhc2VzIHdpdGhvdXQgcmVzb3J0aW5nIHRvIHRoZSB2YWx1ZSBzdGFjay4KKwkgKgor CSAqICBUaGUgcmlnaHQgaGFuZCBzaWRlIGNvdWxkIGJlIGEgbGlnaHQgZnVuY3Rpb24gKGFzIHRo ZXkgZ2VuZXJhbGx5CisJICogIGJlaGF2ZSBsaWtlIG9iamVjdHMpLiAgTGlnaHQgZnVuY3Rpb25z IG5ldmVyIGhhdmUgYSAncHJvdG90eXBlJworCSAqICBwcm9wZXJ0eSBzbyBFNS4xIFNlY3Rpb24g MTUuMy41LjMgc3RlcCAzIGFsd2F5cyB0aHJvd3MgYSBUeXBlRXJyb3IuCisJICogIFVzaW5nIGR1 a19yZXF1aXJlX2hvYmplY3QoKSBpcyB0aHVzIGNvcnJlY3QgKGV4Y2VwdCBmb3IgZXJyb3IgbXNn KS4KKwkgKi8KKworCWR1a19wdXNoX3R2YWwodGhyLCB0dl94KTsKKwlkdWtfcHVzaF90dmFsKHRo ciwgdHZfeSk7CisJZnVuYyA9IGR1a19yZXF1aXJlX2hvYmplY3QodGhyLCAtMSk7CisJRFVLX0FT U0VSVChmdW5jICE9IE5VTEwpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NZTUJPTF9CVUlMVElO KQorCS8qCisJICogIEBAaGFzSW5zdGFuY2UgY2hlY2ssIEVTMjAxNSBTZWN0aW9uIDEyLjkuNCwg U3RlcHMgMi00LgorCSAqLworCWlmICghc2tpcF9zeW1fY2hlY2spIHsKKwkJaWYgKGR1a19nZXRf bWV0aG9kX3N0cmlkeCh0aHIsIC0xLCBEVUtfU1RSSURYX1dFTExLTk9XTl9TWU1CT0xfSEFTX0lO U1RBTkNFKSkgeworCQkJLyogWyAuLi4gbGhzIHJocyBmdW5jIF0gKi8KKwkJCWR1a19pbnNlcnQo dGhyLCAtMyk7ICAgIC8qIC0+IFsgLi4uIGZ1bmMgbGhzIHJocyBdICovCisJCQlkdWtfc3dhcF90 b3AodGhyLCAtMik7ICAvKiAtPiBbIC4uLiBmdW5jIHJocyh0aGlzKSBsaHMgXSAqLworCQkJZHVr X2NhbGxfbWV0aG9kKHRociwgMSk7CisJCQlyZXR1cm4gZHVrX3RvX2Jvb2xlYW5fdG9wX3BvcCh0 aHIpOworCQl9CisJfQorI2Vsc2UKKwlEVUtfVU5SRUYoc2tpcF9zeW1fY2hlY2spOworI2VuZGlm CisKKwkvKgorCSAqICBGb3IgYm91bmQgb2JqZWN0cywgW1tIYXNJbnN0YW5jZV1dIGp1c3QgY2Fs bHMgdGhlIHRhcmdldCBmdW5jdGlvbgorCSAqICBbW0hhc0luc3RhbmNlXV0uICBJZiB0aGF0IGlz IGFnYWluIGEgYm91bmQgb2JqZWN0LCByZXBlYXQgdW50aWwKKwkgKiAgd2UgZmluZCBhIG5vbi1i b3VuZCBGdW5jdGlvbiBvYmplY3QuCisJICoKKwkgKiAgVGhlIGJvdW5kIGZ1bmN0aW9uIGNoYWlu IGlzIG5vdyAiY29sbGFwc2VkIiBzbyB0aGVyZSBjYW4gYmUgb25seQorCSAqICBvbmUgYm91bmQg ZnVuY3Rpb24gaW4gdGhlIGNoYWluLgorCSAqLworCisJaWYgKCFEVUtfSE9CSkVDVF9JU19DQUxM QUJMRShmdW5jKSkgeworCQkvKgorCQkgKiAgTm90ZTogb2YgbmF0aXZlIEVDTUFTY3JpcHQgb2Jq ZWN0cywgb25seSBGdW5jdGlvbiBpbnN0YW5jZXMKKwkJICogIGhhdmUgYSBbW0hhc0luc3RhbmNl XV0gaW50ZXJuYWwgcHJvcGVydHkuICBDdXN0b20gb2JqZWN0cyBtaWdodAorCQkgKiAgYWxzbyBo YXZlIGl0LCBidXQgbm90IGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCisJCSAqCisJCSAqICBY WFg6IGFkZCBhIHNlcGFyYXRlIGZsYWcsIERVS19IT0JKRUNUX0ZMQUdfQUxMT1dfSU5TVEFOQ0VP Rj8KKwkJICovCisJCWdvdG8gZXJyb3JfaW52YWxpZF9ydmFsOworCX0KKworCWlmIChEVUtfSE9C SkVDVF9IQVNfQk9VTkRGVU5DKGZ1bmMpKSB7CisJCWR1a19wdXNoX3R2YWwodGhyLCAmKChkdWtf aGJvdW5kZnVuYyAqKSAodm9pZCAqKSBmdW5jKS0+dGFyZ2V0KTsKKwkJZHVrX3JlcGxhY2UodGhy LCAtMik7CisJCWZ1bmMgPSBkdWtfcmVxdWlyZV9ob2JqZWN0KHRociwgLTEpOyAgLyogbGlnaHRm dW5jIHRocm93cyAqLworCisJCS8qIFJlbHkgb24gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQoKSBu ZXZlciBjcmVhdGluZyBib3VuZAorCQkgKiBmdW5jdGlvbnMgd2hvc2UgdGFyZ2V0IGlzIG5vdCBw cm9wZXIuCisJCSAqLworCQlEVUtfQVNTRVJUKGZ1bmMgIT0gTlVMTCk7CisJCURVS19BU1NFUlQo RFVLX0hPQkpFQ1RfSVNfQ0FMTEFCTEUoZnVuYykpOworCX0KKworCS8qCisJICogICdmdW5jJyBp cyBub3cgYSBub24tYm91bmQgb2JqZWN0IHdoaWNoIHN1cHBvcnRzIFtbSGFzSW5zdGFuY2VdXQor CSAqICAod2hpY2ggaGVyZSBqdXN0IG1lYW5zIERVS19IT0JKRUNUX0ZMQUdfQ0FMTEFCTEUpLiAg TW92ZSBvbgorCSAqICB0byBleGVjdXRlIEU1IFNlY3Rpb24gMTUuMy41LjMuCisJICovCisKKwlE VUtfQVNTRVJUKGZ1bmMgIT0gTlVMTCk7CisJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1RfSEFTX0JP VU5ERlVOQyhmdW5jKSk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19DQUxMQUJMRShmdW5j KSk7CisKKwkvKiBbIC4uLiBsdmFsIHJ2YWwoZnVuYykgXSAqLworCisJLyogRm9yIGxpZ2h0ZnVu Y3MsIGJ1ZmZlcnMsIGFuZCBwb2ludGVycyBzdGFydCB0aGUgY29tcGFyaXNvbiBkaXJlY3RseQor CSAqIGZyb20gdGhlIHZpcnR1YWwgcHJvdG90eXBlIG9iamVjdC4KKwkgKi8KKwlza2lwX2ZpcnN0 ID0gMDsKKwl0diA9IERVS19HRVRfVFZBTF9ORUdJRFgodGhyLCAtMik7CisJc3dpdGNoIChEVUtf VFZBTF9HRVRfVEFHKHR2KSkgeworCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6CisJCXZhbCA9IHRo ci0+YnVpbHRpbnNbRFVLX0JJRFhfRlVOQ1RJT05fUFJPVE9UWVBFXTsKKwkJRFVLX0FTU0VSVCh2 YWwgIT0gTlVMTCk7CisJCWJyZWFrOworCWNhc2UgRFVLX1RBR19CVUZGRVI6CisJCXZhbCA9IHRo ci0+YnVpbHRpbnNbRFVLX0JJRFhfVUlOVDhBUlJBWV9QUk9UT1RZUEVdOworCQlEVUtfQVNTRVJU KHZhbCAhPSBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX1BPSU5URVI6CisJCXZhbCA9 IHRoci0+YnVpbHRpbnNbRFVLX0JJRFhfUE9JTlRFUl9QUk9UT1RZUEVdOworCQlEVUtfQVNTRVJU KHZhbCAhPSBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfVEFHX09CSkVDVDoKKwkJc2tpcF9m aXJzdCA9IDE7ICAvKiBJZ25vcmUgb2JqZWN0IGl0c2VsZiBvbiBmaXJzdCByb3VuZC4gKi8KKwkJ dmFsID0gRFVLX1RWQUxfR0VUX09CSkVDVCh0dik7CisJCURVS19BU1NFUlQodmFsICE9IE5VTEwp OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIHBvcDJfYW5kX2ZhbHNlOworCX0KKwlEVUtf QVNTRVJUKHZhbCAhPSBOVUxMKTsgIC8qIExvb3AgZG9lc24ndCBhY3R1YWxseSByZWx5IG9uIHRo aXMuICovCisKKwkvKiBMb29rIHVwIC5wcm90b3R5cGUgb2YgcnZhbC4gIExlYXZlIGl0IG9uIHRo ZSB2YWx1ZSBzdGFjayBpbiBjYXNlIGl0CisJICogaGFzIGJlZW4gdmlydHVhbGl6ZWQgKGUuZy4g Z2V0dGVyLCBQcm94eSB0cmFwKS4KKwkgKi8KKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRo ciwgLTEsIERVS19TVFJJRFhfUFJPVE9UWVBFKTsgIC8qIC0+IFsgLi4uIGx2YWwgcnZhbCBydmFs LnByb3RvdHlwZSBdICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JTKQorCXBy b3RvID0gZHVrX2dldF9ob2JqZWN0KHRociwgLTEpOworCWlmIChwcm90byA9PSBOVUxMKSB7CisJ CWdvdG8gZXJyb3JfaW52YWxpZF9ydmFsX25vcHJvdG87CisJfQorI2Vsc2UKKwlwcm90byA9IGR1 a19yZXF1aXJlX2hvYmplY3QodGhyLCAtMSk7CisjZW5kaWYKKworCXNhbml0eSA9IERVS19IT0JK RUNUX1BST1RPVFlQRV9DSEFJTl9TQU5JVFk7CisJZG8geworCQkvKgorCQkgKiAgTm90ZTogcHJv dG90eXBlIGNoYWluIGlzIGZvbGxvd2VkIEJFRk9SRSBmaXJzdCBjb21wYXJpc29uLiAgVGhpcwor CQkgKiAgbWVhbnMgdGhhdCB0aGUgaW5zdGFuY2VvZiBsdmFsIGlzIG5ldmVyIGl0c2VsZiBjb21w YXJlZCB0byB0aGUKKwkJICogIHJ2YWwucHJvdG90eXBlIHByb3BlcnR5LiAgVGhpcyBpcyBhcHBh cmVudGx5IGludGVudGlvbmFsLCBzZWUgRTUKKwkJICogIFNlY3Rpb24gMTUuMy41LjMsIHN0ZXAg NC5hLgorCQkgKgorCQkgKiAgQWxzbyBub3RlOgorCQkgKgorCQkgKiAgICAgIGpzPiAoZnVuY3Rp b24oKSB7fSkgaW5zdGFuY2VvZiBGdW5jdGlvbgorCQkgKiAgICAgIHRydWUKKwkJICogICAgICBq cz4gRnVuY3Rpb24gaW5zdGFuY2VvZiBGdW5jdGlvbgorCQkgKiAgICAgIHRydWUKKwkJICoKKwkJ ICogIEZvciB0aGUgbGF0dGVyLCBoX3Byb3RvIHdpbGwgYmUgRnVuY3Rpb24ucHJvdG90eXBlLCB3 aGljaCBpcyB0aGUKKwkJICogIGJ1aWx0LWluIEZ1bmN0aW9uIHByb3RvdHlwZS4gIEJlY2F1c2Ug RnVuY3Rpb24uW1tQcm90b3R5cGVdXSBpcworCQkgKiAgYWxzbyB0aGUgYnVpbHQtaW4gRnVuY3Rp b24gcHJvdG90eXBlLCB0aGUgcmVzdWx0IGlzIHRydWUuCisJCSAqLworCisJCWlmICghdmFsKSB7 CisJCQlnb3RvIHBvcDNfYW5kX2ZhbHNlOworCQl9CisKKwkJRFVLX0FTU0VSVCh2YWwgIT0gTlVM TCk7CisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKwkJdmFsID0gZHVrX2hvYmplY3Rf cmVzb2x2ZV9wcm94eV90YXJnZXQodmFsKTsKKyNlbmRpZgorCisJCWlmIChza2lwX2ZpcnN0KSB7 CisJCQlza2lwX2ZpcnN0ID0gMDsKKwkJfSBlbHNlIGlmICh2YWwgPT0gcHJvdG8pIHsKKwkJCWdv dG8gcG9wM19hbmRfdHJ1ZTsKKwkJfQorCisJCURVS19BU1NFUlQodmFsICE9IE5VTEwpOworCQl2 YWwgPSBEVUtfSE9CSkVDVF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgdmFsKTsKKwl9IHdoaWxl ICgtLXNhbml0eSA+IDApOworCisJaWYgKERVS19VTkxJS0VMWShzYW5pdHkgPT0gMCkpIHsKKwkJ RFVLX0VSUk9SX1JBTkdFKHRociwgRFVLX1NUUl9QUk9UT1RZUEVfQ0hBSU5fTElNSVQpOworCQlE VUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKwl9CisJRFVLX1VOUkVBQ0hBQkxFKCk7CisKKyBw b3AyX2FuZF9mYWxzZToKKwlkdWtfcG9wXzJfdW5zYWZlKHRocik7CisJcmV0dXJuIDA7CisKKyBw b3AzX2FuZF9mYWxzZToKKwlkdWtfcG9wXzNfdW5zYWZlKHRocik7CisJcmV0dXJuIDA7CisKKyBw b3AzX2FuZF90cnVlOgorCWR1a19wb3BfM191bnNhZmUodGhyKTsKKwlyZXR1cm4gMTsKKworIGVy cm9yX2ludmFsaWRfcnZhbDoKKwlEVUtfRVJST1JfVFlQRSh0aHIsIERVS19TVFJfSU5WQUxJRF9J TlNUQU5DRU9GX1JWQUwpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCisjaWYgZGVm aW5lZChEVUtfVVNFX1ZFUkJPU0VfRVJST1JTKQorIGVycm9yX2ludmFsaWRfcnZhbF9ub3Byb3Rv OgorCURVS19FUlJPUl9UWVBFKHRociwgRFVLX1NUUl9JTlZBTElEX0lOU1RBTkNFT0ZfUlZBTF9O T1BST1RPKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDA7KTsKKyNlbmRpZgorfQorCisjaWYg ZGVmaW5lZChEVUtfVVNFX1NZTUJPTF9CVUlMVElOKQorRFVLX0lOVEVSTkFMIGR1a19ib29sX3Qg ZHVrX2pzX2luc3RhbmNlb2Zfb3JkaW5hcnkoZHVrX2h0aHJlYWQgKnRociwgZHVrX3R2YWwgKnR2 X3gsIGR1a190dmFsICp0dl95KSB7CisJcmV0dXJuIGR1a19fanNfaW5zdGFuY2VvZl9oZWxwZXIo dGhyLCB0dl94LCB0dl95LCAxIC8qc2tpcF9zeW1fY2hlY2sqLyk7Cit9CisjZW5kaWYKKworRFVL X0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2pzX2luc3RhbmNlb2YoZHVrX2h0aHJlYWQgKnRociwg ZHVrX3R2YWwgKnR2X3gsIGR1a190dmFsICp0dl95KSB7CisJcmV0dXJuIGR1a19fanNfaW5zdGFu Y2VvZl9oZWxwZXIodGhyLCB0dl94LCB0dl95LCAwIC8qc2tpcF9zeW1fY2hlY2sqLyk7Cit9CisK Ky8qCisgKiAgaW4KKyAqLworCisvKgorICogIEU1IFNlY3Rpb25zIDExLjguNywgOC4xMi42Lgor ICoKKyAqICBCYXNpY2FsbHkganVzdCBhIHByb3BlcnR5IGV4aXN0ZW5jZSBjaGVjayB1c2luZyBb W0hhc1Byb3BlcnR5XV0uCisgKi8KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2pzX2lu KGR1a19odGhyZWFkICp0aHIsIGR1a190dmFsICp0dl94LCBkdWtfdHZhbCAqdHZfeSkgeworCWR1 a19ib29sX3QgcmV0dmFsOworCisJLyoKKwkgKiAgR2V0IHRoZSB2YWx1ZXMgb250byB0aGUgc3Rh Y2sgZmlyc3QuICBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBjb3ZlcgorCSAqICBzb21lIG5vcm1h bCBjYXNlcyB3aXRob3V0IHJlc29ydGluZyB0byB0aGUgdmFsdWUgc3RhY2sgKGUuZy4gaWYKKwkg KiAgbHZhbCBpcyBhbHJlYWR5IGEgc3RyaW5nKS4KKwkgKi8KKworCS8qIFhYWDogVGhlIEVTNS81 LjEvNiBzcGVjaWZpY2F0aW9ucyByZXF1aXJlIHRoYXQgdGhlIGtleSBpbiAna2V5IGluIG9iaicK KwkgKiBtdXN0IGJlIHN0cmluZyBjb2VyY2VkIGJlZm9yZSB0aGUgaW50ZXJuYWwgSGFzUHJvcGVy dHkoKSBhbGdvcml0aG0gaXMKKwkgKiBpbnZva2VkLiAgQSBmYXN0IHBhdGggc2tpcHBpbmcgY29l cmNpb24gY291bGQgYmUgc2FmZWx5IGltcGxlbWVudGVkIGZvcgorCSAqIG51bWJlcnMgKGFzIG51 bWJlci10by1zdHJpbmcgY29lcmNpb24gaGFzIG5vIHNpZGUgZWZmZWN0cykuICBGb3IgRVMyMDE1 CisJICogcHJveHkgYmVoYXZpb3IsIHRoZSB0cmFwICdrZXknIGFyZ3VtZW50IG11c3QgYmUgaW4g YSBzdHJpbmcgY29lcmNlZAorCSAqIGZvcm0gKHdoaWNoIGlzIGEgc2hhbWUpLgorCSAqLworCisJ LyogVHlwZUVycm9yIGlmIHJ2YWwgaXMgbm90IGFuIG9iamVjdCBvciBvYmplY3QgbGlrZSAoZS5n LiBsaWdodGZ1bmMKKwkgKiBvciBwbGFpbiBidWZmZXIpLgorCSAqLworCWR1a19wdXNoX3R2YWwo dGhyLCB0dl94KTsKKwlkdWtfcHVzaF90dmFsKHRociwgdHZfeSk7CisJZHVrX3JlcXVpcmVfdHlw ZV9tYXNrKHRociwgLTEsIERVS19UWVBFX01BU0tfT0JKRUNUIHwgRFVLX1RZUEVfTUFTS19MSUdI VEZVTkMgfCBEVUtfVFlQRV9NQVNLX0JVRkZFUik7CisKKwkodm9pZCkgZHVrX3RvX3Byb3BlcnR5 X2tleV9oc3RyaW5nKHRociwgLTIpOworCisJcmV0dmFsID0gZHVrX2hvYmplY3RfaGFzcHJvcCh0 aHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfR0VUX1RWQUxfTkVHSURYKHRo ciwgLTEpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0dFVF9UVkFMX05FR0lE WCh0aHIsIC0yKSk7CisKKwlkdWtfcG9wXzJfdW5zYWZlKHRocik7CisJcmV0dXJuIHJldHZhbDsK K30KKworLyoKKyAqICB0eXBlb2YKKyAqCisgKiAgRTUgU2VjdGlvbiAxMS40LjMuCisgKgorICog IFZlcnkgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIG9ubHkgcXVlc3Rpb24gaXMgd2hhdCB0byByZXR1 cm4gZm9yIG91cgorICogIG5vbi1zdGFuZGFyZCB0YWcgLyBvYmplY3QgdHlwZXMuCisgKgorICog IFRoZXJlIGlzIGFuIHVuZm9ydHVuYXRlIHN0cmluZyBjb25zdGFudCBkZWZpbmUgbmFtaW5nIHBy b2JsZW0gd2l0aAorICogIHR5cGVvZiByZXR1cm4gdmFsdWVzIGZvciBlLmcuICJPYmplY3QiIGFu ZCAib2JqZWN0IjsgY2FyZWZ1bCB3aXRoCisgKiAgdGhlIGJ1aWx0LWluIHN0cmluZyBkZWZpbmVz LiAgVGhlIExDX1hYWCBkZWZpbmVzIGFyZSB1c2VkIGZvciB0aGUKKyAqICBsb3dlcmNhc2UgdmFy aWFudHMgbm93LgorICovCisKK0RVS19JTlRFUk5BTCBkdWtfc21hbGxfdWludF90IGR1a19qc190 eXBlb2Zfc3RyaWR4KGR1a190dmFsICp0dl94KSB7CisJZHVrX3NtYWxsX3VpbnRfdCBzdHJpZHgg PSAwOworCisJc3dpdGNoIChEVUtfVFZBTF9HRVRfVEFHKHR2X3gpKSB7CisJY2FzZSBEVUtfVEFH X1VOREVGSU5FRDogeworCQlzdHJpZHggPSBEVUtfU1RSSURYX0xDX1VOREVGSU5FRDsKKwkJYnJl YWs7CisJfQorCWNhc2UgRFVLX1RBR19OVUxMOiB7CisJCS8qIE5vdGU6IG5vdCBhIHR5cG8sICJv YmplY3QiIGlzIHJldHVybmVkIGZvciBhIG51bGwgdmFsdWUuICovCisJCXN0cmlkeCA9IERVS19T VFJJRFhfTENfT0JKRUNUOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX0JPT0xFQU46IHsK KwkJc3RyaWR4ID0gRFVLX1NUUklEWF9MQ19CT09MRUFOOworCQlicmVhazsKKwl9CisJY2FzZSBE VUtfVEFHX1BPSU5URVI6IHsKKwkJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMuICovCisJCXN0 cmlkeCA9IERVS19TVFJJRFhfTENfUE9JTlRFUjsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX1RB R19TVFJJTkc6IHsKKwkJZHVrX2hzdHJpbmcgKnN0cjsKKworCQkvKiBBbGwgaW50ZXJuYWwga2V5 cyBhcmUgaWRlbnRpZmllZCBhcyBTeW1ib2xzLiAqLworCQlzdHIgPSBEVUtfVFZBTF9HRVRfU1RS SU5HKHR2X3gpOworCQlEVUtfQVNTRVJUKHN0ciAhPSBOVUxMKTsKKwkJaWYgKERVS19VTkxJS0VM WShEVUtfSFNUUklOR19IQVNfU1lNQk9MKHN0cikpKSB7CisJCQlzdHJpZHggPSBEVUtfU1RSSURY X0xDX1NZTUJPTDsKKwkJfSBlbHNlIHsKKwkJCXN0cmlkeCA9IERVS19TVFJJRFhfTENfU1RSSU5H OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERVS19UQUdfT0JKRUNUOiB7CisJCWR1a19ob2Jq ZWN0ICpvYmogPSBEVUtfVFZBTF9HRVRfT0JKRUNUKHR2X3gpOworCQlEVUtfQVNTRVJUKG9iaiAh PSBOVUxMKTsKKwkJaWYgKERVS19IT0JKRUNUX0lTX0NBTExBQkxFKG9iaikpIHsKKwkJCXN0cmlk eCA9IERVS19TVFJJRFhfTENfRlVOQ1RJT047CisJCX0gZWxzZSB7CisJCQlzdHJpZHggPSBEVUtf U1RSSURYX0xDX09CSkVDVDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBEVUtfVEFHX0JVRkZF UjogeworCQkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4gIEluIER1a3RhcGUgMS54IHRoaXMg d291bGQgYmUKKwkJICogJ2J1ZmZlcicsIGluIER1a3RhcGUgMi54IGNoYW5nZWQgdG8gJ29iamVj dCcgYmVjYXVzZSBwbGFpbgorCQkgKiBidWZmZXJzIG5vdyBtaW1pYyBVaW50OEFycmF5IG9iamVj dHMuCisJCSAqLworCQlzdHJpZHggPSBEVUtfU1RSSURYX0xDX09CSkVDVDsKKwkJYnJlYWs7CisJ fQorCWNhc2UgRFVLX1RBR19MSUdIVEZVTkM6IHsKKwkJc3RyaWR4ID0gRFVLX1NUUklEWF9MQ19G VU5DVElPTjsKKwkJYnJlYWs7CisJfQorI2lmIGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCWNh c2UgRFVLX1RBR19GQVNUSU5UOgorI2VuZGlmCisJZGVmYXVsdDogeworCQkvKiBudW1iZXIgKi8K KwkJRFVLX0FTU0VSVCghRFVLX1RWQUxfSVNfVU5VU0VEKHR2X3gpKTsKKwkJRFVLX0FTU0VSVChE VUtfVFZBTF9JU19OVU1CRVIodHZfeCkpOworCQlzdHJpZHggPSBEVUtfU1RSSURYX0xDX05VTUJF UjsKKwkJYnJlYWs7CisJfQorCX0KKworCURVS19BU1NFUlRfU1RSSURYX1ZBTElEKHN0cmlkeCk7 CisJcmV0dXJuIHN0cmlkeDsKK30KKworLyoKKyAqICBBcnJheSBpbmRleCBhbmQgbGVuZ3RoCisg KgorICogIEFycmF5IGluZGV4OiBFNSBTZWN0aW9uIDE1LjQKKyAqICBBcnJheSBsZW5ndGg6IEU1 IFNlY3Rpb24gMTUuNC41LjEgc3RlcHMgMy5jIC0gMy5kIChhcnJheSBsZW5ndGggd3JpdGUpCisg Ki8KKworLyogQ29tcHVyZSBhcnJheSBpbmRleCBmcm9tIHN0cmluZyBjb250ZXh0LCBvciByZXR1 cm4gYSAibm90IGFycmF5IGluZGV4IgorICogaW5kaWNhdG9yLgorICovCitEVUtfSU5URVJOQUwg ZHVrX3VhcnJpZHhfdCBkdWtfanNfdG9fYXJyYXlpbmRleF9zdHJpbmcoY29uc3QgZHVrX3VpbnQ4 X3QgKnN0ciwgZHVrX3VpbnQzMl90IGJsZW4pIHsKKwlkdWtfdWFycmlkeF90IHJlczsKKworCS8q IE9ubHkgc3RyaW5ncyB3aXRoIGJ5dGUgbGVuZ3RoIDEtMTAgY2FuIGJlIDMyLWJpdCBhcnJheSBp bmRpY2VzLgorCSAqIExlYWRpbmcgemVyb2VzIChleGNlcHQgJzAnIGFsb25lKSwgcGx1cy9taW51 cyBzaWducyBhcmUgbm90IGFsbG93ZWQuCisJICogV2UgY291bGQgZG8gYSBsb3Qgb2YgcHJlY2hl Y2tzIGhlcmUsIGJ1dCBzaW5jZSBtb3N0IHN0cmluZ3Mgd29uJ3QKKwkgKiBzdGFydCB3aXRoIGFu eSBkaWdpdHMsIGl0J3Mgc2ltcGxlciB0byBqdXN0IHBhcnNlIHRoZSBudW1iZXIgYW5kCisJICog ZmFpbCBxdWlja2x5LgorCSAqLworCisJcmVzID0gMDsKKwlpZiAoYmxlbiA9PSAwKSB7CisJCWdv dG8gcGFyc2VfZmFpbDsKKwl9CisJZG8geworCQlkdWtfdWFycmlkeF90IGRpZzsKKwkJZGlnID0g KGR1a191YXJyaWR4X3QpICgqc3RyKyspIC0gRFVLX0FTQ18wOworCisJCWlmIChkaWcgPD0gOVUp IHsKKwkJCS8qIENhcmVmdWwgb3ZlcmZsb3cgaGFuZGxpbmcuICBXaGVuIG11bHRpcGx5aW5nIGJ5 IDEwOgorCQkJICogLSAweDE5OTk5OTk4IHggMTAgPSAweGZmZmZmZmYwOiBubyBvdmVyZmxvdywg YW5kIGFkZGluZworCQkJICogICAwLi4uOSBpcyBzYWZlLgorCQkJICogLSAweDE5OTk5OTk5IHgg MTAgPSAweGZmZmZmZmZhOiBubyBvdmVyZmxvdywgYWRkaW5nCisJCQkgKiAgIDAuLi41IGlzIHNh ZmUsIDYuLi45IG92ZXJmbG93cy4KKwkJCSAqIC0gMHgxOTk5OTk5YSB4IDEwID0gMHgxMDAwMDAw MDQ6IGFsd2F5cyBvdmVyZmxvdy4KKwkJCSAqLworCQkJaWYgKERVS19VTkxJS0VMWShyZXMgPj0g MHgxOTk5OTk5OVVMKSkgeworCQkJCWlmIChyZXMgPj0gMHgxOTk5OTk5YVVMKSB7CisJCQkJCS8q IEFsd2F5cyBvdmVyZmxvdy4gKi8KKwkJCQkJZ290byBwYXJzZV9mYWlsOworCQkJCX0KKwkJCQlE VUtfQVNTRVJUKHJlcyA9PSAweDE5OTk5OTk5VUwpOworCQkJCWlmIChkaWcgPj0gNlUpIHsKKwkJ CQkJZ290byBwYXJzZV9mYWlsOworCQkJCX0KKwkJCQlyZXMgPSAweGZmZmZmZmZhVUwgKyBkaWc7 CisJCQkJRFVLX0FTU0VSVChyZXMgPj0gMHhmZmZmZmZmYVVMKTsKKwkJCQlEVUtfQVNTRVJUX0RJ U0FCTEUocmVzIDw9IDB4ZmZmZmZmZmZVTCk7ICAvKiByYW5nZSAqLworCQkJfSBlbHNlIHsKKwkJ CQlyZXMgPSByZXMgKiAxMFUgKyBkaWc7CisJCQkJaWYgKERVS19VTkxJS0VMWShyZXMgPT0gMCkp IHsKKwkJCQkJLyogSWYgJ3JlcycgaXMgMCwgcHJldmlvdXMgJ3JlcycgbXVzdAorCQkJCQkgKiBo YXZlIGJlZW4gMCBhbmQgd2Ugc2Nhbm5lZCBpbiBhIHplcm8uCisJCQkJCSAqIFRoaXMgaXMgb25s eSBhbGxvd2VkIGlmIGJsZW4gPT0gMSwKKwkJCQkJICogaS5lLiB0aGUgZXhhY3Qgc3RyaW5nICcw Jy4KKwkJCQkJICovCisJCQkJCWlmIChibGVuID09IChkdWtfdWludDMyX3QpIDEpIHsKKwkJCQkJ CXJldHVybiAwOworCQkJCQl9CisJCQkJCWdvdG8gcGFyc2VfZmFpbDsKKwkJCQl9CisJCQl9CisJ CX0gZWxzZSB7CisJCQkvKiBCZWNhdXNlICdkaWcnIGlzIHVuc2lnbmVkLCBjYXRjaGVzIGJvdGgg dmFsdWVzCisJCQkgKiBhYm92ZSAnOScgYW5kIGJlbG93ICcwJy4KKwkJCSAqLworCQkJZ290byBw YXJzZV9mYWlsOworCQl9CisJfSB3aGlsZSAoLS1ibGVuID4gMCk7CisKKwlyZXR1cm4gcmVzOwor CisgcGFyc2VfZmFpbDoKKwlyZXR1cm4gRFVLX0hTVFJJTkdfTk9fQVJSQVlfSU5ERVg7Cit9CisK KyNpZiAhZGVmaW5lZChEVUtfVVNFX0hTVFJJTkdfQVJSSURYKQorLyogR2V0IGFycmF5IGluZGV4 IGZvciBhIHN0cmluZyB3aGljaCBpcyBrbm93biB0byBiZSBhbiBhcnJheSBpbmRleC4gIFRoaXMg aGVscGVyCisgKiBpcyBuZWVkZWQgd2hlbiBkdWtfaHN0cmluZyBkb2Vzbid0IGNvbmNyZXRlbHkg c3RvcmUgdGhlIGFycmF5IGluZGV4LCBidXQgc3RyaW5ncworICogYXJlIGZsYWdnZWQgYXMgYXJy YXkgaW5kaWNlcyBhdCBpbnRlcm4gdGltZS4KKyAqLworRFVLX0lOVEVSTkFMIGR1a191YXJyaWR4 X3QgZHVrX2pzX3RvX2FycmF5aW5kZXhfaHN0cmluZ19mYXN0X2tub3duKGR1a19oc3RyaW5nICpo KSB7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisJZHVrX3VhcnJpZHhfdCByZXM7CisJZHVrX3Vp bnQ4X3QgdDsKKworCURVS19BU1NFUlQoaCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IU1RS SU5HX0hBU19BUlJJRFgoaCkpOworCisJcCA9IERVS19IU1RSSU5HX0dFVF9EQVRBKGgpOworCXJl cyA9IDA7CisJZm9yICg7OykgeworCQl0ID0gKnArKzsKKwkJaWYgKERVS19VTkxJS0VMWSh0ID09 IDApKSB7CisJCQkvKiBTY2FubmluZyB0byBOVUwgaXMgYWx3YXlzIHNhZmUgZm9yIGludGVybmVk IHN0cmluZ3MuICovCisJCQlicmVhazsKKwkJfQorCQlEVUtfQVNTRVJUKHQgPj0gKGR1a191aW50 OF90KSBEVUtfQVNDXzAgJiYgdCA8PSAoZHVrX3VpbnQ4X3QpIERVS19BU0NfOSk7CisJCXJlcyA9 IHJlcyAqIDEwVSArIChkdWtfdWFycmlkeF90KSB0IC0gKGR1a191YXJyaWR4X3QpIERVS19BU0Nf MDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworRFVLX0lOVEVSTkFMIGR1a191YXJyaWR4X3QgZHVr X2pzX3RvX2FycmF5aW5kZXhfaHN0cmluZ19mYXN0KGR1a19oc3RyaW5nICpoKSB7CisJRFVLX0FT U0VSVChoICE9IE5VTEwpOworCWlmICghRFVLX0hTVFJJTkdfSEFTX0FSUklEWChoKSkgeworCQly ZXR1cm4gRFVLX0hTVFJJTkdfTk9fQVJSQVlfSU5ERVg7CisJfQorCXJldHVybiBkdWtfanNfdG9f YXJyYXlpbmRleF9oc3RyaW5nX2Zhc3Rfa25vd24oaCk7Cit9CisjZW5kaWYgIC8qIERVS19VU0Vf SFNUUklOR19BUlJJRFggKi8KKy8qCisgKiAgSWRlbnRpZmllciBhY2Nlc3MgYW5kIGZ1bmN0aW9u IGNsb3N1cmUgaGFuZGxpbmcuCisgKgorICogIFByb3ZpZGVzIHRoZSBwcmltaXRpdmVzIGZvciBz bG93IHBhdGggaWRlbnRpZmllciBhY2Nlc3NlczogR0VUVkFSLAorICogIFBVVFZBUiwgREVMVkFS LCBldGMuICBUaGUgZmFzdCBwYXRoLCBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzZXMsIHNob3VsZAor ICogIGJlIHVzZWQgZm9yIG1vc3QgaWRlbnRpZmllciBhY2Nlc3Nlcy4gIENvbnNlcXVlbnRseSwg dGhlc2Ugc2xvdyBwYXRoCisgKiAgcHJpbWl0aXZlcyBzaG91bGQgYmUgb3B0aW1pemVkIGZvciBt YXhpbXVtIGNvbXBhY3RuZXNzLgorICoKKyAqICBFQ01BU2NyaXB0IGVudmlyb25tZW50IHJlY29y ZHMgKGRlY2xhcmF0aXZlIGFuZCBvYmplY3QpIGFyZSByZXByZXNlbnRlZAorICogIGFzIGludGVy bmFsIG9iamVjdHMgd2l0aCBjb250cm9sIGtleXMuICBFbnZpcm9ubWVudCByZWNvcmRzIGhhdmUg YQorICogIHBhcmVudCByZWNvcmQgKCJvdXRlciBlbnZpcm9ubWVudCByZWZlcmVuY2UiKSB3aGlj aCBpcyByZXByZXNlbnRlZCBieQorICogIHRoZSBpbXBsaWNpdCBwcm90b3R5cGUgZm9yIHRlY2hu aWNhbCByZWFzb25zIChpbiBvdGhlciB3b3JkcywgaXQgaXMgYQorICogIGNvbnZlbmllbnQgZmll bGQpLiAgVGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgZm9sbG93ZWQgaW4gdGhlIG9yZGluYXJ5 CisgKiAgc2Vuc2UgZm9yIHZhcmlhYmxlIGxvb2t1cHMuCisgKgorICogIFNlZSBpZGVudGlmaWVy LWhhbmRsaW5nLnJzdCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBpZGVudGlmaWVyIGFsZ29yaXRo bXMKKyAqICBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiAgU2VlIGZ1bmN0aW9uLW9i amVjdHMucnN0IGZvciBkZXRhaWxzIG9uCisgKiAgd2hhdCBmdW5jdGlvbiB0ZW1wbGF0ZXMgYW5k IGluc3RhbmNlcyBhcmUgZXhwZWN0ZWQgdG8gbG9vayBsaWtlLgorICoKKyAqICBDYXJlIG11c3Qg YmUgdGFrZW4gdG8gYXZvaWQgZHVrX3R2YWwgcG9pbnRlciBpbnZhbGlkYXRpb24gY2F1c2VkIGJ5 CisgKiAgZS5nLiB2YWx1ZSBzdGFjayBvciBvYmplY3QgcmVzaXppbmcuCisgKgorICogIFRPRE86 IHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9uIGluc3RhbmNlcyBjb3VsZCBiZSBpbml0aWFsaXplZCBt dWNoIG1vcmUKKyAqICBlZmZpY2llbnRseSBieSBjcmVhdGluZyBhIHByb3BlcnR5IGFsbG9jYXRp b24gZm9yIGEgY2VydGFpbiBzaXplIGFuZAorICogIGZpbGxpbmcgaW4ga2V5cyBhbmQgdmFsdWVz IGRpcmVjdGx5IChhbmQgSU5DUkVGaW5nIGJvdGggd2l0aCAiYnVsayBpbmNyZWYiCisgKiAgcHJp bWl0aXZlcy4KKyAqCisgKiAgWFhYOiBkdWtfaG9iamVjdF9nZXRwcm9wKCkgYW5kIGR1a19ob2Jq ZWN0X3B1dHByb3AoKSBjYWxscyBhcmUgYSBiaXQKKyAqICBhd2t3YXJkIChlc3BlY2lhbGx5IGJl Y2F1c2UgdGhleSBmb2xsb3cgdGhlIHByb3RvdHlwZSBjaGFpbik7IHJld29yaworICogIGlmICJy YXciIG93biBwcm9wZXJ0eSBoZWxwZXJzIGFyZSBhZGRlZC4KKyAqLworCisvKiAjaW5jbHVkZSBk dWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCisgKiAgTG9jYWwgcmVz dWx0IHR5cGUgZm9yIGR1a19fZ2V0X2lkZW50aWZpZXJfcmVmZXJlbmNlKCkgbG9va3VwLgorICov CisKK3R5cGVkZWYgc3RydWN0IHsKKwlkdWtfaG9iamVjdCAqZW52OworCWR1a19ob2JqZWN0ICpo b2xkZXI7ICAgICAgLyogZm9yIG9iamVjdC1ib3VuZCBpZGVudGlmaWVycyAqLworCWR1a190dmFs ICp2YWx1ZTsgICAgICAgICAgLyogZm9yIHJlZ2lzdGVyLWJvdW5kIGFuZCBkZWNsYXJhdGl2ZSBl bnYgaWRlbnRpZmllcnMgKi8KKwlkdWtfdWludF90IGF0dHJzOyAgICAgICAgIC8qIHByb3BlcnR5 IGF0dHJpYnV0ZXMgZm9yIGlkZW50aWZpZXIgKHJlbGV2YW50IGlmIHZhbHVlICE9IE5VTEwpICov CisJZHVrX2Jvb2xfdCBoYXNfdGhpczsgICAgICAvKiBmb3Igb2JqZWN0LWJvdW5kIGlkZW50aWZp ZXJzOiBwcm92aWRlICd0aGlzJyBiaW5kaW5nICovCit9IGR1a19faWRfbG9va3VwX3Jlc3VsdDsK KworLyoKKyAqICBDcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0IGJhc2VkIG9uIGEgInRlbXBs YXRlIGZ1bmN0aW9uIiB3aGljaCBjb250YWlucworICogIGNvbXBpbGVkIGJ5dGVjb2RlLCBjb25z dGFudHMsIGV0YywgYnV0IGxhY2tzIGEgbGV4aWNhbCBlbnZpcm9ubWVudC4KKyAqCisgKiAgRUNN QVNjcmlwdCByZXF1aXJlcyB0aGF0IGVhY2ggY3JlYXRlZCBjbG9zdXJlIGlzIGEgc2VwYXJhdGUg b2JqZWN0LCB3aXRoCisgKiAgaXRzIG93biBzZXQgb2YgZWRpdGFibGUgcHJvcGVydGllcy4gIEhv d2V2ZXIsIHN0cnVjdHVyZWQgcHJvcGVydHkgdmFsdWVzCisgKiAgKHN1Y2ggYXMgdGhlIGZvcm1h bCBhcmd1bWVudHMgbGlzdCBhbmQgdGhlIHZhcmlhYmxlIG1hcCkgYXJlIHNoYXJlZC4KKyAqICBB bHNvIHRoZSBieXRlY29kZSwgY29uc3RhbnRzLCBhbmQgaW5uZXIgZnVuY3Rpb25zIGFyZSBzaGFy ZWQuCisgKgorICogIFNlZSBFNSBTZWN0aW9uIDEzLjIgZm9yIGRldGFpbGVkIHJlcXVpcmVtZW50 cyBvbiB0aGUgZnVuY3Rpb24gb2JqZWN0czsKKyAqICB0aGVyZSBhcmUgbm8gc2ltaWxhciByZXF1 aXJlbWVudHMgZm9yIGZ1bmN0aW9uICJ0ZW1wbGF0ZXMiIHdoaWNoIGFyZSBhbgorICogIGltcGxl bWVudGF0aW9uIGRlcGVuZGVudCBpbnRlcm5hbCBmZWF0dXJlLiAgQWxzbyBzZWUgZnVuY3Rpb24t b2JqZWN0cy5yc3QKKyAqICBmb3IgYSBkaXNjdXNzaW9uIG9uIHRoZSBmdW5jdGlvbiBpbnN0YW5j ZSBwcm9wZXJ0aWVzIHByb3ZpZGVkIGJ5IHRoaXMKKyAqICBpbXBsZW1lbnRhdGlvbi4KKyAqCisg KiAgTm90ZXM6CisgKgorICogICAqIE9yZGVyIG9mIGludGVybmFsIHByb3BlcnRpZXMgc2hvdWxk IG1hdGNoIGZyZXF1ZW5jeSBvZiB1c2UsIHNpbmNlIHRoZQorICogICAgIHByb3BlcnRpZXMgd2ls bCBiZSBsaW5lYXJseSBzY2FubmVkIG9uIGxvb2t1cCAoZnVuY3Rpb25zIHVzdWFsbHkgZG9uJ3QK KyAqICAgICBoYXZlIGVub3VnaCBwcm9wZXJ0aWVzIHRvIHdhcnJhbnQgYSBoYXNoIHBhcnQpLgor ICoKKyAqICAgKiBUaGUgY3JlYXRlZCBjbG9zdXJlIGlzIGluZGVwZW5kZW50IG9mIGl0cyB0ZW1w bGF0ZTsgdGhleSBkbyBzaGFyZSB0aGUKKyAqICAgICBzYW1lICdkYXRhJyBidWZmZXIgb2JqZWN0 LCBidXQgdGhlIHRlbXBsYXRlIG9iamVjdCBpdHNlbGYgY2FuIGJlIGZyZWVkCisgKiAgICAgZXZl biBpZiB0aGUgY2xvc3VyZSBvYmplY3QgcmVtYWlucyByZWFjaGFibGUuCisgKi8KKworRFVLX0xP Q0FMIHZvaWQgZHVrX19pbmNfZGF0YV9pbm5lcl9yZWZjb3VudHMoZHVrX2h0aHJlYWQgKnRociwg ZHVrX2hjb21wZnVuYyAqZikgeworCWR1a190dmFsICp0diwgKnR2X2VuZDsKKwlkdWtfaG9iamVj dCAqKmZ1bmNzLCAqKmZ1bmNzX2VuZDsKKworCURVS19VTlJFRih0aHIpOworCisJLyogSWYgZnVu Y3Rpb24gY3JlYXRpb24gZmFpbHMgZHVlIHRvIG91dC1vZi1tZW1vcnksIHRoZSBkYXRhIGJ1ZmZl cgorCSAqIHBvaW50ZXIgbWF5IGJlIE5VTEwgaW4gc29tZSBjYXNlcy4gIFRoYXQncyBhY3R1YWxs eSBwb3NzaWJsZSBmb3IKKwkgKiBHQyBjb2RlLCBidXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGhl cmUgYmVjYXVzZSB0aGUgaW5jb21wbGV0ZQorCSAqIGZ1bmN0aW9uIHdpbGwgYmUgdW53b3VuZCBm cm9tIHRoZSB2YWx1ZSBzdGFjayBhbmQgbmV2ZXIgaW5zdGFudGlhdGVkLgorCSAqLworCURVS19B U1NFUlQoRFVLX0hDT01QRlVOQ19HRVRfREFUQSh0aHItPmhlYXAsIGYpICE9IE5VTEwpOworCisJ dHYgPSBEVUtfSENPTVBGVU5DX0dFVF9DT05TVFNfQkFTRSh0aHItPmhlYXAsIGYpOworCXR2X2Vu ZCA9IERVS19IQ09NUEZVTkNfR0VUX0NPTlNUU19FTkQodGhyLT5oZWFwLCBmKTsKKwl3aGlsZSAo dHYgPCB0dl9lbmQpIHsKKwkJRFVLX1RWQUxfSU5DUkVGKHRociwgdHYpOworCQl0disrOworCX0K KworCWZ1bmNzID0gRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1NfQkFTRSh0aHItPmhlYXAsIGYpOwor CWZ1bmNzX2VuZCA9IERVS19IQ09NUEZVTkNfR0VUX0ZVTkNTX0VORCh0aHItPmhlYXAsIGYpOwor CXdoaWxlIChmdW5jcyA8IGZ1bmNzX2VuZCkgeworCQlEVUtfSEVBUEhEUl9JTkNSRUYodGhyLCAo ZHVrX2hlYXBoZHIgKikgKmZ1bmNzKTsKKwkJZnVuY3MrKzsKKwl9Cit9CisKKy8qIFB1c2ggYSBu ZXcgY2xvc3VyZSBvbiB0aGUgc3RhY2suCisgKgorICogTm90ZTogaWYgZnVuX3RlbXAgaGFzIE5F V0VOViwgaS5lLiBhIG5ldyBsZXhpY2FsIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbgorICogaXMg Y3JlYXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQsIG9ubHkgb3V0ZXJfbGV4X2VudiBt YXR0ZXJzCisgKiAob3V0ZXJfdmFyX2VudiBpcyBpZ25vcmVkIGFuZCBtYXkgb3IgbWF5IG5vdCBi ZSBzYW1lIGFzIG91dGVyX2xleF9lbnYpLgorICovCisKK0RVS19MT0NBTCBjb25zdCBkdWtfdWlu dDE2X3QgZHVrX19jbG9zdXJlX2NvcHlfcHJvcGxpc3RbXSA9IHsKKwkvKiBvcmRlcjogbW9zdCBm cmVxdWVudCB0byBsZWFzdCBmcmVxdWVudCAqLworCURVS19TVFJJRFhfSU5UX1ZBUk1BUCwKKwlE VUtfU1RSSURYX0lOVF9GT1JNQUxTLAorI2lmIGRlZmluZWQoRFVLX1VTRV9QQzJMSU5FKQorCURV S19TVFJJRFhfSU5UX1BDMkxJTkUsCisjZW5kaWYKKyNpZiBkZWZpbmVkKERVS19VU0VfRlVOQ19G SUxFTkFNRV9QUk9QRVJUWSkKKwlEVUtfU1RSSURYX0ZJTEVfTkFNRSwKKyNlbmRpZgorI2lmIGRl ZmluZWQoRFVLX1VTRV9OT05TVERfRlVOQ19TT1VSQ0VfUFJPUEVSVFkpCisJRFVLX1NUUklEWF9J TlRfU09VUkNFCisjZW5kaWYKK307CisKK0RVS19JTlRFUk5BTAordm9pZCBkdWtfanNfcHVzaF9j bG9zdXJlKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hj b21wZnVuYyAqZnVuX3RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3Qg Km91dGVyX3Zhcl9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3QgKm91 dGVyX2xleF9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xfdCBhZGRfYXV0 b19wcm90bykgeworCWR1a19oY29tcGZ1bmMgKmZ1bl9jbG9zOworCWR1a19zbWFsbF91aW50X3Qg aTsKKwlkdWtfdWludF90IGxlbl92YWx1ZTsKKworCURVS19BU1NFUlQoZnVuX3RlbXAgIT0gTlVM TCk7CisJRFVLX0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9EQVRBKHRoci0+aGVhcCwgZnVuX3Rl bXApICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1ModGhyLT5o ZWFwLCBmdW5fdGVtcCkgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9C WVRFQ09ERSh0aHItPmhlYXAsIGZ1bl90ZW1wKSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG91dGVy X3Zhcl9lbnYgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvdXRlcl9sZXhfZW52ICE9IE5VTEwpOwor CURVS19VTlJFRihsZW5fdmFsdWUpOworCisJZnVuX2Nsb3MgPSBkdWtfcHVzaF9oY29tcGZ1bmMo dGhyKTsKKwlEVUtfQVNTRVJUKGZ1bl9jbG9zICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hP QkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIChkdWtfaG9iamVjdCAqKSBmdW5fY2xvcykg PT0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9GVU5DVElPTl9QUk9UT1RZUEVdKTsKKworCWR1a19w dXNoX2hvYmplY3QodGhyLCAmZnVuX3RlbXAtPm9iaik7ICAvKiAtPiBbIC4uLiBjbG9zdXJlIHRl bXBsYXRlIF0gKi8KKworCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoKGR1a19o b2JqZWN0ICopIGZ1bl9jbG9zKSk7CisJRFVLX0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9EQVRB KHRoci0+aGVhcCwgZnVuX2Nsb3MpID09IE5VTEwpOworCURVS19BU1NFUlQoRFVLX0hDT01QRlVO Q19HRVRfRlVOQ1ModGhyLT5oZWFwLCBmdW5fY2xvcykgPT0gTlVMTCk7CisJRFVLX0FTU0VSVChE VUtfSENPTVBGVU5DX0dFVF9CWVRFQ09ERSh0aHItPmhlYXAsIGZ1bl9jbG9zKSA9PSBOVUxMKTsK KworCURVS19IQ09NUEZVTkNfU0VUX0RBVEEodGhyLT5oZWFwLCBmdW5fY2xvcywgRFVLX0hDT01Q RlVOQ19HRVRfREFUQSh0aHItPmhlYXAsIGZ1bl90ZW1wKSk7CisJRFVLX0hDT01QRlVOQ19TRVRf RlVOQ1ModGhyLT5oZWFwLCBmdW5fY2xvcywgRFVLX0hDT01QRlVOQ19HRVRfRlVOQ1ModGhyLT5o ZWFwLCBmdW5fdGVtcCkpOworCURVS19IQ09NUEZVTkNfU0VUX0JZVEVDT0RFKHRoci0+aGVhcCwg ZnVuX2Nsb3MsIERVS19IQ09NUEZVTkNfR0VUX0JZVEVDT0RFKHRoci0+aGVhcCwgZnVuX3RlbXAp KTsKKworCS8qIE5vdGU6IGFsbCByZWZlcmVuY2VzIGluc2lkZSAnZGF0YScgbmVlZCB0byBnZXQg dGhlaXIgcmVmY291bnRzCisJICogdXBwZWQgdG9vLiAgVGhpcyBpcyB0aGUgY2FzZSBiZWNhdXNl IHJlZmNvdW50cyBhcmUgZGVjcmVhc2VkCisJICogdGhyb3VnaCBldmVyeSBmdW5jdGlvbiByZWZl cmVuY2luZyAnZGF0YScgaW5kZXBlbmRlbnRseS4KKwkgKi8KKworCURVS19IQlVGRkVSX0lOQ1JF Rih0aHIsIERVS19IQ09NUEZVTkNfR0VUX0RBVEEodGhyLT5oZWFwLCBmdW5fY2xvcykpOworCWR1 a19faW5jX2RhdGFfaW5uZXJfcmVmY291bnRzKHRociwgZnVuX3RlbXApOworCisJZnVuX2Nsb3Mt Pm5yZWdzID0gZnVuX3RlbXAtPm5yZWdzOworCWZ1bl9jbG9zLT5uYXJncyA9IGZ1bl90ZW1wLT5u YXJnczsKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdHRVJfU1VQUE9SVCkKKwlmdW5fY2xvcy0+ c3RhcnRfbGluZSA9IGZ1bl90ZW1wLT5zdGFydF9saW5lOworCWZ1bl9jbG9zLT5lbmRfbGluZSA9 IGZ1bl90ZW1wLT5lbmRfbGluZTsKKyNlbmRpZgorCisJRFVLX0FTU0VSVChEVUtfSENPTVBGVU5D X0dFVF9EQVRBKHRoci0+aGVhcCwgZnVuX2Nsb3MpICE9IE5VTEwpOworCURVS19BU1NFUlQoRFVL X0hDT01QRlVOQ19HRVRfRlVOQ1ModGhyLT5oZWFwLCBmdW5fY2xvcykgIT0gTlVMTCk7CisJRFVL X0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9CWVRFQ09ERSh0aHItPmhlYXAsIGZ1bl9jbG9zKSAh PSBOVUxMKTsKKworCS8qIFhYWDogQ291bGQgYWxzbyBjb3B5IGZyb20gdGVtcGxhdGUsIGJ1dCB0 aGVyZSdzIG5vIHdheSB0byBoYXZlIGFueQorCSAqIG90aGVyIHZhbHVlIGhlcmUgbm93ICh1c2Vk IGNvZGUgaGFzIG5vIGFjY2VzcyB0byB0aGUgdGVtcGxhdGUpLgorCSAqIFByb3RvdHlwZSBpcyBz ZXQgYnkgZHVrX3B1c2hfaGNvbXBmdW5jKCkuCisJICovCisJRFVLX0FTU0VSVChEVUtfSE9CSkVD VF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgJmZ1bl9jbG9zLT5vYmopID09IHRoci0+YnVpbHRp bnNbRFVLX0JJRFhfRlVOQ1RJT05fUFJPVE9UWVBFXSk7CisjaWYgMAorCURVS19IT0JKRUNUX1NF VF9QUk9UT1RZUEVfVVBEUkVGKHRociwgJmZ1bl9jbG9zLT5vYmosIHRoci0+YnVpbHRpbnNbRFVL X0JJRFhfRlVOQ1RJT05fUFJPVE9UWVBFXSk7CisjZW5kaWYKKworCS8qIENvcHkgZHVrX2hvYmpl Y3QgZmxhZ3MgYXMgaXMgZnJvbSB0aGUgdGVtcGxhdGUgdXNpbmcgYSBtYXNrLgorCSAqIExlYXZl IG91dCBkdWtfaGVhcGhkciBvd25lZCBmbGFncyBqdXN0IGluIGNhc2UgKGUuZy4gaWYgdGhlcmUn cworCSAqIHNvbWUgR0MgZmxhZyBvciBzaW1pbGFyKS4gIFNvbWUgZmxhZ3MgY2FuIHRoZW4gYmUg YWRqdXN0ZWQKKwkgKiBzZXBhcmF0ZWx5IGlmIG5lY2Vzc2FyeS4KKwkgKi8KKworCS8qIERVS19I RUFQSERSX1NFVF9GTEFHUygpIG1hc2tzIGNoYW5nZXMgdG8gbm9uLWR1a19oZWFwaGRyIGZsYWdz IG9ubHkuICovCisJRFVLX0hFQVBIRFJfU0VUX0ZMQUdTKChkdWtfaGVhcGhkciAqKSBmdW5fY2xv cywgRFVLX0hFQVBIRFJfR0VUX0ZMQUdTX1JBVygoZHVrX2hlYXBoZHIgKikgZnVuX3RlbXApKTsK KwlEVUtfREQoRFVLX0REUFJJTlQoImZ1bl90ZW1wIGhlYXBoZHIgZmxhZ3M6IDB4JTA4bHgsIGZ1 bl9jbG9zIGhlYXBoZHIgZmxhZ3M6IDB4JTA4bHgiLAorCSAgICAgICAgICAgICAgICAgICAodW5z aWduZWQgbG9uZykgRFVLX0hFQVBIRFJfR0VUX0ZMQUdTX1JBVygoZHVrX2hlYXBoZHIgKikgZnVu X3RlbXApLAorCSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgRFVLX0hFQVBIRFJf R0VUX0ZMQUdTX1JBVygoZHVrX2hlYXBoZHIgKikgZnVuX2Nsb3MpKSk7CisKKwlEVUtfQVNTRVJU KERVS19IT0JKRUNUX0hBU19FWFRFTlNJQkxFKCZmdW5fY2xvcy0+b2JqKSk7CisJRFVLX0FTU0VS VCghRFVLX0hPQkpFQ1RfSEFTX0JPVU5ERlVOQygmZnVuX2Nsb3MtPm9iaikpOworCURVS19BU1NF UlQoRFVLX0hPQkpFQ1RfSEFTX0NPTVBGVU5DKCZmdW5fY2xvcy0+b2JqKSk7CisJRFVLX0FTU0VS VCghRFVLX0hPQkpFQ1RfSEFTX05BVEZVTkMoJmZ1bl9jbG9zLT5vYmopKTsKKwlEVUtfQVNTRVJU KCFEVUtfSE9CSkVDVF9JU19USFJFQUQoJmZ1bl9jbG9zLT5vYmopKTsKKwkvKiBEVUtfSE9CSkVD VF9GTEFHX0FSUkFZX1BBUlQ6IGRvbid0IGNhcmUgKi8KKwkvKiBEVUtfSE9CSkVDVF9GTEFHX05F V0VOVjogaGFuZGxlZCBiZWxvdyAqLworCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19FWE9U SUNfQVJSQVkoJmZ1bl9jbG9zLT5vYmopKTsKKwlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNf RVhPVElDX1NUUklOR09CSigmZnVuX2Nsb3MtPm9iaikpOworCURVS19BU1NFUlQoIURVS19IT0JK RUNUX0hBU19FWE9USUNfQVJHVU1FTlRTKCZmdW5fY2xvcy0+b2JqKSk7CisKKwlpZiAoIURVS19I T0JKRUNUX0hBU19DT05TVFJVQ1RBQkxFKCZmdW5fY2xvcy0+b2JqKSkgeworCQkvKiBJZiB0aGUg dGVtcGxhdGUgaXMgbm90IGNvbnN0cnVjdGFibGUgZG9uJ3QgYWRkIGFuIGF1dG9tYXRpYworCQkg KiAucHJvdG90eXBlIHByb3BlcnR5LiAgVGhpcyBpcyB0aGUgY2FzZSBmb3IgZS5nLiBFUzIwMTUg b2JqZWN0CisJCSAqIGxpdGVyYWwgZ2V0dGVycy9zZXR0ZXJzIGFuZCBtZXRob2QgZGVmaW5pdGlv bnMuCisJCSAqLworCQlhZGRfYXV0b19wcm90byA9IDA7CisJfQorCisJLyoKKwkgKiAgU2V0dXAg ZW52aXJvbm1lbnQgcmVjb3JkIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIHRlbXBsYXRlIGFuZAor CSAqICBpdHMgZmxhZ3MuCisJICoKKwkgKiAgSWYgRFVLX0hPQkpFQ1RfSEFTX05FV0VOVihmdW5f dGVtcCkgaXMgdHJ1ZSwgdGhlIGVudmlyb25tZW50CisJICogIHJlY29yZHMgcmVwcmVzZW50IGlk ZW50aWZpZXJzICJvdXRzaWRlIiB0aGUgZnVuY3Rpb247IHRoZQorCSAqICAiaW5uZXIiIGVudmly b25tZW50IHJlY29yZHMgYXJlIGNyZWF0ZWQgb24gZGVtYW5kLiAgT3RoZXJ3aXNlLAorCSAqICB0 aGUgZW52aXJvbm1lbnQgcmVjb3JkcyBhcmUgdGhvc2UgdGhhdCB3aWxsIGJlIGRpcmVjdGx5IHVz ZWQKKwkgKiAgKGUuZy4gZm9yIGRlY2xhcmF0aW9ucykuCisJICoKKwkgKiAgX0xleGVudiBpcyBh bHdheXMgc2V0OyBfVmFyZW52IGRlZmF1bHRzIHRvIF9MZXhlbnYgaWYgbWlzc2luZywKKwkgKiAg c28gX1ZhcmVudiBpcyBvbmx5IHNldCBpZiBfTGV4ZW52ICE9IF9WYXJlbnYuCisJICoKKwkgKiAg VGhpcyBpcyByZWxhdGl2ZWx5IGNvbXBsZXgsIHNlZSBkb2MvaWRlbnRpZmllci1oYW5kbGluZy5y c3QuCisJICovCisKKwlpZiAoRFVLX0hPQkpFQ1RfSEFTX05FV0VOVigmZnVuX2Nsb3MtPm9iaikp IHsKKyNpZiBkZWZpbmVkKERVS19VU0VfRlVOQ19OQU1FX1BST1BFUlRZKQorCQlpZiAoRFVLX0hP QkpFQ1RfSEFTX05BTUVCSU5ESU5HKCZmdW5fY2xvcy0+b2JqKSkgeworCQkJZHVrX2hvYmplY3Qg KnByb3RvOworCQkJZHVrX2hkZWNlbnYgKm5ld19lbnY7CisKKwkJCS8qCisJCQkgKiAgTmFtZWQg ZnVuY3Rpb24gZXhwcmVzc2lvbiwgbmFtZSBuZWVkcyB0byBiZSBib3VuZAorCQkJICogIGluIGFu IGludGVybWVkaWF0ZSBlbnZpcm9ubWVudCByZWNvcmQuICBUaGUgIm91dGVyIgorCQkJICogIGxl eGljYWwvdmFyaWFibGUgZW52aXJvbm1lbnQgd2lsbCB0aHVzIGJlOgorCQkJICoKKwkJCSAqICBh KSB7IGZ1bmNuYW1lOiA8ZnVuYz4sIF9fcHJvdG90eXBlOiBvdXRlcl9sZXhfZW52IH0KKwkJCSAq ICBiKSB7IGZ1bmNuYW1lOiA8ZnVuYz4sIF9fcHJvdG90eXBlOiAgPGdsb2JhbGVudj4gfSAgKGlm IG91dGVyX2xleF9lbnYgbWlzc2luZykKKwkJCSAqLworCisJCQlpZiAob3V0ZXJfbGV4X2Vudikg eworCQkJCXByb3RvID0gb3V0ZXJfbGV4X2VudjsKKwkJCX0gZWxzZSB7CisJCQkJcHJvdG8gPSB0 aHItPmJ1aWx0aW5zW0RVS19CSURYX0dMT0JBTF9FTlZdOworCQkJfQorCisJCQkvKiAtPiBbIC4u LiBjbG9zdXJlIHRlbXBsYXRlIGVudiBdICovCisJCQluZXdfZW52ID0gZHVrX2hkZWNlbnZfYWxs b2ModGhyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0ZMQUdf RVhURU5TSUJMRSB8CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX0hPQkpFQ1Rf Q0xBU1NfQVNfRkxBR1MoRFVLX0hPQkpFQ1RfQ0xBU1NfREVDRU5WKSk7CisJCQlEVUtfQVNTRVJU KG5ld19lbnYgIT0gTlVMTCk7CisJCQlkdWtfcHVzaF9ob2JqZWN0KHRociwgKGR1a19ob2JqZWN0 ICopIG5ld19lbnYpOworCisJCQlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUo dGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikgbmV3X2VudikgPT0gTlVMTCk7CisJCQlEVUtfSE9C SkVDVF9TRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgKGR1a19ob2JqZWN0ICopIG5ld19lbnYsIHBy b3RvKTsKKwkJCURVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwodGhyLCBwcm90byk7CisKKwkJ CURVS19BU1NFUlQobmV3X2Vudi0+dGhyZWFkID09IE5VTEwpOyAgLyogQ2xvc2VkLiAqLworCQkJ RFVLX0FTU0VSVChuZXdfZW52LT52YXJtYXAgPT0gTlVMTCk7CisKKwkJCS8qIEl0J3MgaW1wb3J0 YW50IHRoYXQgZHVrX3hkZWZfcHJvcCgpIGlzIGEgJ3JhdyBkZWZpbmUnIHNvIHRoYXQgYW55CisJ CQkgKiBwcm9wZXJ0aWVzIGluIGFuIGFuY2VzdG9yIGFyZSBuZXZlciBhbiBpc3N1ZSAodGhleSBz aG91bGQgbmV2ZXIgYmUKKwkJCSAqIGUuZy4gbm9uLXdyaXRhYmxlLCBidXQganVzdCBpbiBjYXNl KS4KKwkJCSAqCisJCQkgKiBCZWNhdXNlIHRlbXBsYXRlIG9iamVjdHMgYXJlIG5vdCB2aXNpYmxl IHRvIHVzZXIgY29kZSwgdGhlIGNhc2UKKwkJCSAqIHdoZXJlIC5uYW1lIGlzIG1pc3Npbmcgc2hv dWxkbid0IGhhcHBlbiBpbiBwcmFjdGljZS4gIEl0IGl0IGRvZXMsCisJCQkgKiB0aGUgbmFtZSAn dW5kZWZpbmVkJyBnZXRzIGJvdW5kIGFuZCBtYXBzIHRvIHRoZSBjbG9zdXJlICh3aGljaCBpcwor CQkJICogYSBiaXQgb2RkLCBidXQgc2FmZSkuCisJCQkgKi8KKwkJCSh2b2lkKSBkdWtfZ2V0X3By b3Bfc3RyaWR4X3Nob3J0KHRociwgLTIsIERVS19TVFJJRFhfTkFNRSk7CisJCQkvKiAtPiBbIC4u LiBjbG9zdXJlIHRlbXBsYXRlIGVudiBmdW5jbmFtZSBdICovCisJCQlkdWtfZHVwX200KHRocik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0+IFsgLi4uIGNs b3N1cmUgdGVtcGxhdGUgZW52IGZ1bmNuYW1lIGNsb3N1cmUgXSAqLworCQkJZHVrX3hkZWZfcHJv cCh0aHIsIC0zLCBEVUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7ICAgICAgICAgICAvKiAtPiBbIC4u LiBjbG9zdXJlIHRlbXBsYXRlIGVudiBdICovCisJCQkvKiBlbnZbZnVuY25hbWVdID0gY2xvc3Vy ZSAqLworCisJCQkvKiBbIC4uLiBjbG9zdXJlIHRlbXBsYXRlIGVudiBdICovCisKKwkJCURVS19I Q09NUEZVTkNfU0VUX0xFWEVOVih0aHItPmhlYXAsIGZ1bl9jbG9zLCAoZHVrX2hvYmplY3QgKikg bmV3X2Vudik7CisJCQlEVUtfSENPTVBGVU5DX1NFVF9WQVJFTlYodGhyLT5oZWFwLCBmdW5fY2xv cywgKGR1a19ob2JqZWN0ICopIG5ld19lbnYpOworCQkJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwg KGR1a19ob2JqZWN0ICopIG5ld19lbnYpOworCQkJRFVLX0hPQkpFQ1RfSU5DUkVGKHRociwgKGR1 a19ob2JqZWN0ICopIG5ld19lbnYpOworCQkJZHVrX3BvcF91bnNhZmUodGhyKTsKKworCQkJLyog WyAuLi4gY2xvc3VyZSB0ZW1wbGF0ZSBdICovCisJCX0KKwkJZWxzZQorI2VuZGlmICAvKiBEVUtf VVNFX0ZVTkNfTkFNRV9QUk9QRVJUWSAqLworCQl7CisJCQkvKgorCQkJICogIE90aGVyIGNhc2Vz IChmdW5jdGlvbiBkZWNsYXJhdGlvbiwgYW5vbnltb3VzIGZ1bmN0aW9uIGV4cHJlc3Npb24sCisJ CQkgKiAgc3RyaWN0IGRpcmVjdCBldmFsIGNvZGUpLiAgVGhlICJvdXRlciIgZW52aXJvbm1lbnQg d2lsbCBiZSB3aGF0ZXZlcgorCQkJICogIHRoZSBjYWxsZXIgZ2F2ZSB1cy4KKwkJCSAqLworCisJ CQlEVUtfSENPTVBGVU5DX1NFVF9MRVhFTlYodGhyLT5oZWFwLCBmdW5fY2xvcywgb3V0ZXJfbGV4 X2Vudik7CisJCQlEVUtfSENPTVBGVU5DX1NFVF9WQVJFTlYodGhyLT5oZWFwLCBmdW5fY2xvcywg b3V0ZXJfbGV4X2Vudik7CisJCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBvdXRlcl9sZXhfZW52 KTsKKwkJCURVS19IT0JKRUNUX0lOQ1JFRih0aHIsIG91dGVyX2xleF9lbnYpOworCisJCQkvKiBb IC4uLiBjbG9zdXJlIHRlbXBsYXRlIF0gKi8KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqICBG dW5jdGlvbiBnZXRzIG5vIG5ldyBlbnZpcm9ubWVudCB3aGVuIGNhbGxlZC4gIFRoaXMgaXMgdGhl CisJCSAqICBjYXNlIGZvciBnbG9iYWwgY29kZSwgaW5kaXJlY3QgZXZhbCBjb2RlLCBhbmQgbm9u LXN0cmljdAorCQkgKiAgZGlyZWN0IGV2YWwgY29kZS4gIFRoZXJlIGlzIG5vIGRpcmVjdCBjb3Jy ZXNwb25kZW5jZSB0byB0aGUKKwkJICogIEU1IHNwZWNpZmljYXRpb24sIGFzIGdsb2JhbC9ldmFs IGNvZGUgaXMgbm90IGV4cG9zZWQgYXMgYQorCQkgKiAgZnVuY3Rpb24uCisJCSAqLworCisJCURV S19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19OQU1FQklORElORygmZnVuX3RlbXAtPm9iaikpOwor CisJCURVS19IQ09NUEZVTkNfU0VUX0xFWEVOVih0aHItPmhlYXAsIGZ1bl9jbG9zLCBvdXRlcl9s ZXhfZW52KTsKKwkJRFVLX0hDT01QRlVOQ19TRVRfVkFSRU5WKHRoci0+aGVhcCwgZnVuX2Nsb3Ms IG91dGVyX3Zhcl9lbnYpOworCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBvdXRlcl9sZXhfZW52 KTsgIC8qIE5VTExzIG5vdCBhbGxvd2VkOyBhc3NlcnRlZCBvbiBlbnRyeSAqLworCQlEVUtfSE9C SkVDVF9JTkNSRUYodGhyLCBvdXRlcl92YXJfZW52KTsKKwl9CisJRFVLX0RERChEVUtfREREUFJJ TlQoImNsb3N1cmUgdmFyZW52IC0+ICUhaXBPLCBsZXhlbnYgLT4gJSFpcE8iLAorCSAgICAgICAg ICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBmdW5fY2xvcy0+dmFyX2VudiwKKwkgICAgICAg ICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgZnVuX2Nsb3MtPmxleF9lbnYpKTsKKworCS8q IENhbGwgaGFuZGxpbmcgYXNzdW1lcyB0aGlzIGZvciBhbGwgY2FsbGFibGUgY2xvc3VyZXMuICov CisJRFVLX0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9MRVhFTlYodGhyLT5oZWFwLCBmdW5fY2xv cykgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSENPTVBGVU5DX0dFVF9WQVJFTlYodGhyLT5o ZWFwLCBmdW5fY2xvcykgIT0gTlVMTCk7CisKKwkvKgorCSAqICBDb3B5IHNvbWUgaW50ZXJuYWwg cHJvcGVydGllcyBkaXJlY3RseQorCSAqCisJICogIFRoZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbm9u LXdyaXRhYmxlIGFuZCBub24tZW51bWVyYWJsZSwgYnV0CisJICogIGNvbmZpZ3VyYWJsZS4KKwkg Ki8KKworCS8qIFsgLi4uIGNsb3N1cmUgdGVtcGxhdGUgXSAqLworCisJRFVLX0RERChEVUtfRERE UFJJTlQoImNvcHlpbmcgcHJvcGVydGllczogY2xvc3VyZT0lIWlULCB0ZW1wbGF0ZT0lIWlUIiwK KwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTIp LAorCSAgICAgICAgICAgICAgICAgICAgIChkdWtfdHZhbCAqKSBkdWtfZ2V0X3R2YWwodGhyLCAt MSkpKTsKKworCWZvciAoaSA9IDA7IGkgPCAoZHVrX3NtYWxsX3VpbnRfdCkgKHNpemVvZihkdWtf X2Nsb3N1cmVfY29weV9wcm9wbGlzdCkgLyBzaXplb2YoZHVrX3VpbnQxNl90KSk7IGkrKykgewor CQlkdWtfc21hbGxfaW50X3Qgc3RyaWR4ID0gKGR1a19zbWFsbF9pbnRfdCkgZHVrX19jbG9zdXJl X2NvcHlfcHJvcGxpc3RbaV07CisJCWlmIChkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg LTEsIHN0cmlkeCkpIHsKKwkJCS8qIFsgLi4uIGNsb3N1cmUgdGVtcGxhdGUgdmFsIF0gKi8KKwkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJjb3B5aW5nIHByb3BlcnR5LCBzdHJpZHg9JWxkIC0+IGZv dW5kIiwgKGxvbmcpIHN0cmlkeCkpOworCQkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhy LCAtMywgc3RyaWR4LCBEVUtfUFJPUERFU0NfRkxBR1NfQyk7CisJCX0gZWxzZSB7CisJCQlEVUtf REREKERVS19ERERQUklOVCgiY29weWluZyBwcm9wZXJ0eSwgc3RyaWR4PSVsZCAtPiBub3QgZm91 bmQiLCAobG9uZykgc3RyaWR4KSk7CisJCQlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCQl9CisJfQor CisJLyoKKwkgKiAgImxlbmd0aCIgbWFwcyB0byBudW1iZXIgb2YgZm9ybWFscyAoRTUgU2VjdGlv biAxMy4yKSBmb3IgZnVuY3Rpb24KKwkgKiAgZGVjbGFyYXRpb25zL2V4cHJlc3Npb25zIChub24t Ym91bmQgZnVuY3Rpb25zKS4gIE5vdGUgdGhhdCAnbmFyZ3MnCisJICogIGlzIE5PVCBuZWNlc3Nh cmlseSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIFVzZSBsZW5ndGgKKwkgKiAg b2YgX0Zvcm1hbHM7IGlmIG1pc3NpbmcsIGFzc3VtZSBuYXJncyBtYXRjaGVzIC5sZW5ndGguCisJ ICovCisKKwkvKiBbIC4uLiBjbG9zdXJlIHRlbXBsYXRlIF0gKi8KKworCS8qIFhYWDogdGhlc2Ug bG9va3VwcyBzaG91bGQgYmUganVzdCBvd24gcHJvcGVydHkgbG9va3VwcyBpbnN0ZWFkIG9mCisJ ICogbG9va2luZyB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uCisJICovCisJaWYgKGR1a19nZXRf cHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMSwgRFVLX1NUUklEWF9JTlRfRk9STUFMUykpIHsKKwkJ LyogWyAuLi4gY2xvc3VyZSB0ZW1wbGF0ZSBmb3JtYWxzIF0gKi8KKwkJbGVuX3ZhbHVlID0gKGR1 a191aW50X3QpIGR1a19nZXRfbGVuZ3RoKHRociwgLTEpOyAgLyogY291bGQgYWNjZXNzIGR1a19o YXJyYXkgZGlyZWN0bHksIG5vdCBpbXBvcnRhbnQgKi8KKwkJRFVLX0REKERVS19ERFBSSU5UKCJj bG9zdXJlIGxlbmd0aCBmcm9tIF9Gb3JtYWxzIC0+ICVsZCIsIChsb25nKSBsZW5fdmFsdWUpKTsK Kwl9IGVsc2UgeworCQlsZW5fdmFsdWUgPSBmdW5fdGVtcC0+bmFyZ3M7CisJCURVS19ERChEVUtf RERQUklOVCgiY2xvc3VyZSBsZW5ndGggZGVmYXVsdGVkIGZyb20gbmFyZ3MgLT4gJWxkIiwgKGxv bmcpIGxlbl92YWx1ZSkpOworCX0KKwlkdWtfcG9wX3Vuc2FmZSh0aHIpOworCisJZHVrX3B1c2hf dWludCh0aHIsIGxlbl92YWx1ZSk7ICAvKiBbIC4uLiBjbG9zdXJlIHRlbXBsYXRlIGxlbl92YWx1 ZSBdICovCisJZHVrX3hkZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMywgRFVLX1NUUklEWF9M RU5HVEgsIERVS19QUk9QREVTQ19GTEFHU19DKTsKKworCS8qCisJICogICJwcm90b3R5cGUiIGlz LCBieSBkZWZhdWx0LCBhIGZyZXNoIG9iamVjdCB3aXRoIHRoZSAiY29uc3RydWN0b3IiCisJICog IHByb3BlcnR5LgorCSAqCisJICogIE5vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgYSBjaXJjdWxhciBy ZWZlcmVuY2UgZm9yIGV2ZXJ5IGZ1bmN0aW9uCisJICogIGluc3RhbmNlIChjbG9zdXJlKSB3aGlj aCBwcmV2ZW50cyByZWZjb3VudC1iYXNlZCBjb2xsZWN0aW9uIG9mCisJICogIGZ1bmN0aW9uIGlu c3RhbmNlcy4KKwkgKgorCSAqICBYWFg6IFRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVs dCBwcm90b3R5cGUgb2JqZWN0LCBiZWNhdXNlCisJICogIG1hbnkgZnVuY3Rpb25zIGFyZSBub3Qg dXNlZCBhcyBjb25zdHJ1Y3RvcnMgYW5kIHRoZSBkZWZhdWx0CisJICogIHByb3RvdHlwZSBpcyB1 bm5lY2Vzc2FyeS4gIFBlcmhhcHMgaXQgY291bGQgYmUgY3JlYXRlZCBvbi1kZW1hbmQKKwkgKiAg d2hlbiBpdCBpcyBmaXJzdCBhY2Nlc3NlZD8KKwkgKi8KKworCS8qIFsgLi4uIGNsb3N1cmUgdGVt cGxhdGUgXSAqLworCisJaWYgKGFkZF9hdXRvX3Byb3RvKSB7CisJCWR1a19wdXNoX29iamVjdCh0 aHIpOyAgLyogLT4gWyAuLi4gY2xvc3VyZSB0ZW1wbGF0ZSBuZXdvYmogXSAqLworCQlkdWtfZHVw X20zKHRocik7ICAgICAgIC8qIC0+IFsgLi4uIGNsb3N1cmUgdGVtcGxhdGUgbmV3b2JqIGNsb3N1 cmUgXSAqLworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0yLCBEVUtfU1RSSURY X0NPTlNUUlVDVE9SLCBEVUtfUFJPUERFU0NfRkxBR1NfV0MpOyAgLyogLT4gWyAuLi4gY2xvc3Vy ZSB0ZW1wbGF0ZSBuZXdvYmogXSAqLworCQlkdWtfY29tcGFjdCh0aHIsIC0xKTsgIC8qIGNvbXBh Y3QgdGhlIHByb3RvdHlwZSAqLworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0z LCBEVUtfU1RSSURYX1BST1RPVFlQRSwgRFVLX1BST1BERVNDX0ZMQUdTX1cpOyAgICAgLyogLT4g WyAuLi4gY2xvc3VyZSB0ZW1wbGF0ZSBdICovCisJfQorCisJLyoKKwkgKiAgImFyZ3VtZW50cyIg YW5kICJjYWxsZXIiIG11c3QgYmUgbWFwcGVkIHRvIHRocm93ZXJzIGZvciBzdHJpY3QKKwkgKiAg bW9kZSBhbmQgYm91bmQgZnVuY3Rpb25zIChFNSBTZWN0aW9uIDE1LjMuNSkuCisJICoKKwkgKiAg WFhYOiBUaGlzIGlzIGV4cGVuc2l2ZSB0byBoYXZlIGZvciBldmVyeSBzdHJpY3QgZnVuY3Rpb24g aW5zdGFuY2UuCisJICogIFRyeSB0byBpbXBsZW1lbnQgYXMgdmlydHVhbCBwcm9wZXJ0aWVzIG9y IG9uLWRlbWFuZCBjcmVhdGVkIHByb3BlcnRpZXMuCisJICovCisKKwkvKiBbIC4uLiBjbG9zdXJl IHRlbXBsYXRlIF0gKi8KKworCWlmIChEVUtfSE9CSkVDVF9IQVNfU1RSSUNUKCZmdW5fY2xvcy0+ b2JqKSkgeworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF90aHJvd2VyKHRociwgLTIsIERVS19TVFJJ RFhfQ0FMTEVSKTsKKwkJZHVrX3hkZWZfcHJvcF9zdHJpZHhfdGhyb3dlcih0aHIsIC0yLCBEVUtf U1RSSURYX0xDX0FSR1VNRU5UUyk7CisJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKERVS19VU0VfTk9O U1REX0ZVTkNfQ0FMTEVSX1BST1BFUlRZKQorCQlEVUtfREREKERVS19ERERQUklOVCgiZnVuY3Rp b24gaXMgbm9uLXN0cmljdCBhbmQgbm9uLXN0YW5kYXJkICdjYWxsZXInIHByb3BlcnR5IGluIHVz ZSwgYWRkIGluaXRpYWwgJ251bGwnIHZhbHVlIikpOworCQlkdWtfcHVzaF9udWxsKHRocik7CisJ CWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwgLTMsIERVS19TVFJJRFhfQ0FMTEVSLCBE VUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7CisjZWxzZQorCQlEVUtfREREKERVS19ERERQUklOVCgi ZnVuY3Rpb24gaXMgbm9uLXN0cmljdCBhbmQgbm9uLXN0YW5kYXJkICdjYWxsZXInIHByb3BlcnR5 IG5vdCB1c2VkIikpOworI2VuZGlmCisJfQorCisJLyoKKwkgKiAgIm5hbWUiIHVzZWQgdG8gYmUg bm9uLXN0YW5kYXJkIGJ1dCBpcyBub3cgZGVmaW5lZCBieSBFUzIwMTUuCisJICogIEluIEVTMjAx NS9FUzIwMTYgdGhlIC5uYW1lIHByb3BlcnR5IGlzIGNvbmZpZ3VyYWJsZS4KKwkgKi8KKworCS8q IFsgLi4uIGNsb3N1cmUgdGVtcGxhdGUgXSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZVTkNf TkFNRV9QUk9QRVJUWSkKKwkvKiBYWFg6IExvb2sgZm9yIG93biBwcm9wZXJ0eSBvbmx5OyBkb2Vz bid0IG1hdHRlciBtdWNoIGJlY2F1c2UKKwkgKiB0ZW1wbGF0ZXMgYXJlIGJhcmUgb2JqZWN0cy4K KwkgKi8KKwlpZiAoZHVrX2dldF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0xLCBEVUtfU1RSSURY X05BTUUpKSB7CisJCS8qIFsgLi4uIGNsb3N1cmUgdGVtcGxhdGUgbmFtZSBdICovCisJCURVS19B U1NFUlQoZHVrX2lzX3N0cmluZyh0aHIsIC0xKSk7CisJCURVS19ERChEVUtfRERQUklOVCgic2V0 dGluZyBmdW5jdGlvbiBpbnN0YW5jZSBuYW1lIHRvICUhVCIsIGR1a19nZXRfdHZhbCh0aHIsIC0x KSkpOworCQlkdWtfeGRlZl9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC0zLCBEVUtfU1RSSURYX05B TUUsIERVS19QUk9QREVTQ19GTEFHU19DKTsgIC8qIC0+IFsgLi4uIGNsb3N1cmUgdGVtcGxhdGUg XSAqLworCX0gZWxzZSB7CisJCS8qIEFub255bW91cyBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBhIC5u YW1lIGluIEVTMjAxNSwgc28gZG9uJ3Qgc2V0CisJCSAqIGl0IG9uIHRoZSBpbnN0YW5jZSBlaXRo ZXIuICBUaGUgaW5zdGFuY2Ugd2lsbCB0aGVuIGluaGVyaXQKKwkJICogaXQgZnJvbSBGdW5jdGlv bi5wcm90b3R5cGUubmFtZS4KKwkJICovCisJCURVS19ERChEVUtfRERQUklOVCgibm90IHNldHRp bmcgZnVuY3Rpb24gaW5zdGFuY2UgLm5hbWUiKSk7CisJCWR1a19wb3BfdW5zYWZlKHRocik7CisJ fQorI2VuZGlmCisKKwkvKgorCSAqICBDb21wYWN0IHRoZSBjbG9zdXJlLCBpbiBtb3N0IGNhc2Vz IG5vIHByb3BlcnRpZXMgd2lsbCBiZSBhZGRlZCBsYXRlci4KKwkgKiAgQWxzbywgd2l0aG91dCB0 aGlzIHRoZSBjbG9zdXJlcyBlbmQgdXAgaGF2aW5nIHVudXNlZCBwcm9wZXJ0eSBzbG90cworCSAq ICAoZS5nLiBpbiBEdWt0YXBlIDAuOS4wLCA4IHNsb3RzIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQg b25seSA3IHVzZWQpLgorCSAqICBBIGJldHRlciBmdXR1cmUgc29sdXRpb24gd291bGQgYmUgdG8g YWxsb2NhdGUgdGhlIGNsb3N1cmUgZGlyZWN0bHkKKwkgKiAgdG8gY29ycmVjdCBzaXplIChhbmQg c2V0dXAgdGhlIHByb3BlcnRpZXMgZGlyZWN0bHkgd2l0aG91dCBnb2luZworCSAqICB0aHJvdWdo IHRoZSBBUEkpLgorCSAqLworCisJZHVrX2NvbXBhY3QodGhyLCAtMik7CisKKwkvKgorCSAqICBT b21lIGFzc2VydGlvbnMgKEU1IFNlY3Rpb24gMTMuMikuCisJICovCisKKwlEVUtfQVNTRVJUKERV S19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoJmZ1bl9jbG9zLT5vYmopID09IERVS19IT0JKRUNU X0NMQVNTX0ZVTkNUSU9OKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUo dGhyLT5oZWFwLCAmZnVuX2Nsb3MtPm9iaikgPT0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9GVU5D VElPTl9QUk9UT1RZUEVdKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19FWFRFTlNJQkxF KCZmdW5fY2xvcy0+b2JqKSk7CisJRFVLX0FTU0VSVChkdWtfaGFzX3Byb3Bfc3RyaWR4KHRociwg LTIsIERVS19TVFJJRFhfTEVOR1RIKSAhPSAwKTsKKwlEVUtfQVNTRVJUKGFkZF9hdXRvX3Byb3Rv ID09IDAgfHwgZHVrX2hhc19wcm9wX3N0cmlkeCh0aHIsIC0yLCBEVUtfU1RSSURYX1BST1RPVFlQ RSkgIT0gMCk7CisJLyogTWF5IGJlIG1pc3NpbmcgLm5hbWUgKi8KKwlEVUtfQVNTRVJUKCFEVUtf SE9CSkVDVF9IQVNfU1RSSUNUKCZmdW5fY2xvcy0+b2JqKSB8fAorCSAgICAgICAgICAgZHVrX2hh c19wcm9wX3N0cmlkeCh0aHIsIC0yLCBEVUtfU1RSSURYX0NBTExFUikgIT0gMCk7CisJRFVLX0FT U0VSVCghRFVLX0hPQkpFQ1RfSEFTX1NUUklDVCgmZnVuX2Nsb3MtPm9iaikgfHwKKwkgICAgICAg ICAgIGR1a19oYXNfcHJvcF9zdHJpZHgodGhyLCAtMiwgRFVLX1NUUklEWF9MQ19BUkdVTUVOVFMp ICE9IDApOworCisJLyoKKwkgKiAgRmluaXNoCisJICovCisKKwkvKiBbIC4uLiBjbG9zdXJlIHRl bXBsYXRlIF0gKi8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJjcmVhdGVkIGZ1bmN0aW9uIGlu c3RhbmNlOiB0ZW1wbGF0ZT0lIWlUIC0+IGNsb3N1cmU9JSFpVCIsCisJICAgICAgICAgICAgICAg ICAgICAgKGR1a190dmFsICopIGR1a19nZXRfdHZhbCh0aHIsIC0xKSwKKwkgICAgICAgICAgICAg ICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTIpKSk7CisKKwlkdWtfcG9w X3Vuc2FmZSh0aHIpOworCisJLyogWyAuLi4gY2xvc3VyZSBdICovCit9CisKKy8qCisgKiAgRGVs YXllZCBhY3RpdmF0aW9uIGVudmlyb25tZW50IHJlY29yZCBpbml0aWFsaXphdGlvbiAoZm9yIGZ1 bmN0aW9ucworICogIHdpdGggTkVXRU5WKS4KKyAqCisgKiAgVGhlIG5vbi1kZWxheWVkIGluaXRp YWxpemF0aW9uIGlzIGhhbmRsZWQgYnkgZHVrX2hhbmRsZV9jYWxsKCkuCisgKi8KKworLyogc2hh cmVkIGhlbHBlciAqLworRFVLX0lOVEVSTkFMCitkdWtfaG9iamVjdCAqZHVrX2NyZWF0ZV9hY3Rp dmF0aW9uX2Vudmlyb25tZW50X3JlY29yZChkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3QgKmZ1 bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkdWtfc2l6ZV90IGJvdHRvbV9ieXRlb2ZmKSB7CisJZHVrX2hkZWNlbnYgKmVudjsKKwlkdWtf aG9iamVjdCAqcGFyZW50OworCWR1a19oY29tcGZ1bmMgKmY7CisKKwlEVUtfQVNTRVJUKHRociAh PSBOVUxMKTsKKwlEVUtfQVNTRVJUKGZ1bmMgIT0gTlVMTCk7CisKKwlmID0gKGR1a19oY29tcGZ1 bmMgKikgZnVuYzsKKwlwYXJlbnQgPSBEVUtfSENPTVBGVU5DX0dFVF9MRVhFTlYodGhyLT5oZWFw LCBmKTsKKwlpZiAoIXBhcmVudCkgeworCQlwYXJlbnQgPSB0aHItPmJ1aWx0aW5zW0RVS19CSURY X0dMT0JBTF9FTlZdOworCX0KKworCWVudiA9IGR1a19oZGVjZW52X2FsbG9jKHRociwKKwkgICAg ICAgICAgICAgICAgICAgICAgICBEVUtfSE9CSkVDVF9GTEFHX0VYVEVOU0lCTEUgfAorCSAgICAg ICAgICAgICAgICAgICAgICAgIERVS19IT0JKRUNUX0NMQVNTX0FTX0ZMQUdTKERVS19IT0JKRUNU X0NMQVNTX0RFQ0VOVikpOworCURVS19BU1NFUlQoZW52ICE9IE5VTEwpOworCWR1a19wdXNoX2hv YmplY3QodGhyLCAoZHVrX2hvYmplY3QgKikgZW52KTsKKworCURVS19BU1NFUlQoRFVLX0hPQkpF Q1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIChkdWtfaG9iamVjdCAqKSBlbnYpID09IE5VTEwp OworCURVS19IT0JKRUNUX1NFVF9QUk9UT1RZUEUodGhyLT5oZWFwLCAoZHVrX2hvYmplY3QgKikg ZW52LCBwYXJlbnQpOworCURVS19IT0JKRUNUX0lOQ1JFRl9BTExPV05VTEwodGhyLCBwYXJlbnQp OyAgLyogcGFyZW50IGVudiBpcyB0aGUgcHJvdG90eXBlICovCisKKwkvKiBvcGVuIHNjb3BlIGlu Zm9ybWF0aW9uLCBmb3IgY29tcGlsZWQgZnVuY3Rpb25zIG9ubHkgKi8KKworCURVS19BU1NFUlQo ZW52LT50aHJlYWQgPT0gTlVMTCk7CisJRFVLX0FTU0VSVChlbnYtPnZhcm1hcCA9PSBOVUxMKTsK KwlEVUtfQVNTRVJUKGVudi0+cmVnYmFzZV9ieXRlb2ZmID09IDApOworCWlmIChEVUtfSE9CSkVD VF9JU19DT01QRlVOQyhmdW5jKSkgeworCQlkdWtfaG9iamVjdCAqdmFybWFwOworCQlkdWtfdHZh bCAqdHY7CisKKwkJdHYgPSBkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5X3R2YWxfcHRy KHRoci0+aGVhcCwgZnVuYywgRFVLX0hUSFJFQURfU1RSSU5HX0lOVF9WQVJNQVAodGhyKSk7CisJ CWlmICh0diAhPSBOVUxMICYmIERVS19UVkFMX0lTX09CSkVDVCh0dikpIHsKKwkJCURVS19BU1NF UlQoRFVLX1RWQUxfSVNfT0JKRUNUKHR2KSk7CisJCQl2YXJtYXAgPSBEVUtfVFZBTF9HRVRfT0JK RUNUKHR2KTsKKwkJCURVS19BU1NFUlQodmFybWFwICE9IE5VTEwpOworCQkJZW52LT52YXJtYXAg PSB2YXJtYXA7CisJCQlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCB2YXJtYXApOworCQkJZW52LT50 aHJlYWQgPSB0aHI7CisJCQlEVUtfSFRIUkVBRF9JTkNSRUYodGhyLCB0aHIpOworCQkJZW52LT5y ZWdiYXNlX2J5dGVvZmYgPSBib3R0b21fYnl0ZW9mZjsKKwkJfSBlbHNlIHsKKwkJCS8qIElmIGZ1 bmN0aW9uIGhhcyBubyBfVmFybWFwLCBsZWF2ZSB0aGUgZW52aXJvbm1lbnQgY2xvc2VkLiAqLwor CQkJRFVLX0FTU0VSVChlbnYtPnRocmVhZCA9PSBOVUxMKTsKKwkJCURVS19BU1NFUlQoZW52LT52 YXJtYXAgPT0gTlVMTCk7CisJCQlEVUtfQVNTRVJUKGVudi0+cmVnYmFzZV9ieXRlb2ZmID09IDAp OworCQl9CisJfQorCisJcmV0dXJuIChkdWtfaG9iamVjdCAqKSBlbnY7Cit9CisKK0RVS19JTlRF Uk5BTAordm9pZCBkdWtfanNfaW5pdF9hY3RpdmF0aW9uX2Vudmlyb25tZW50X3JlY29yZHNfZGVs YXllZChkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfYWN0aXZhdGlvbiAqYWN0KSB7CisJZHVrX2hvYmpl Y3QgKmZ1bmM7CisJZHVrX2hvYmplY3QgKmVudjsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwp OworCWZ1bmMgPSBEVUtfQUNUX0dFVF9GVU5DKGFjdCk7CisJRFVLX0FTU0VSVChmdW5jICE9IE5V TEwpOworCURVS19BU1NFUlQoIURVS19IT0JKRUNUX0hBU19CT1VOREZVTkMoZnVuYykpOyAgLyog Ym91bmQgZnVuY3Rpb25zIGFyZSBuZXZlciBpbiBhY3QgJ2Z1bmMnICovCisKKwkvKgorCSAqICBE ZWxheWVkIGluaXRpYWxpemF0aW9uIG9ubHkgb2NjdXJzIGZvciAnTkVXRU5WJyBmdW5jdGlvbnMu CisJICovCisKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0hBU19ORVdFTlYoZnVuYykpOworCURV S19BU1NFUlQoYWN0LT5sZXhfZW52ID09IE5VTEwpOworCURVS19BU1NFUlQoYWN0LT52YXJfZW52 ID09IE5VTEwpOworCisJZW52ID0gZHVrX2NyZWF0ZV9hY3RpdmF0aW9uX2Vudmlyb25tZW50X3Jl Y29yZCh0aHIsIGZ1bmMsIGFjdC0+Ym90dG9tX2J5dGVvZmYpOworCURVS19BU1NFUlQoZW52ICE9 IE5VTEwpOworCS8qICdhY3QnIGlzIGEgc3RhYmxlIHBvaW50ZXIsIHNvIHN0aWxsIE9LLiAqLwor CisJRFVLX0RERChEVUtfREREUFJJTlQoImNyZWF0ZWQgZGVsYXllZCBmcmVzaCBlbnY6ICUhaXBP IiwgKGR1a19oZWFwaGRyICopIGVudikpOworI2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR19MRVZF TCkgJiYgKERVS19VU0VfREVCVUdfTEVWRUwgPj0gMikKKwl7CisJCWR1a19ob2JqZWN0ICpwID0g ZW52OworCQl3aGlsZSAocCkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIiAgLT4gJSFpcE8i LCAoZHVrX2hlYXBoZHIgKikgcCkpOworCQkJcCA9IERVS19IT0JKRUNUX0dFVF9QUk9UT1RZUEUo dGhyLT5oZWFwLCBwKTsKKwkJfQorCX0KKyNlbmRpZgorCisJYWN0LT5sZXhfZW52ID0gZW52Owor CWFjdC0+dmFyX2VudiA9IGVudjsKKwlEVUtfSE9CSkVDVF9JTkNSRUYodGhyLCBlbnYpOyAgLyog WFhYOiBpbmNyZWYgYnkgY291bnQgKGhlcmUgMiB0aW1lcykgKi8KKwlEVUtfSE9CSkVDVF9JTkNS RUYodGhyLCBlbnYpOworCisJZHVrX3BvcF91bnNhZmUodGhyKTsKK30KKworLyoKKyAqICBDbG9z aW5nIGVudmlyb25tZW50IHJlY29yZHMuCisgKgorICogIFRoZSBlbnZpcm9ubWVudCByZWNvcmQg TVVTVCBiZSBjbG9zZWQgd2l0aCB0aGUgdGhyZWFkIHdoZXJlIGl0cyBhY3RpdmF0aW9uCisgKiAg aXM7IGkuZS4gaWYgJ2VudicgaXMgb3BlbiwgJ3RocicgbXVzdCBtYXRjaCBlbnYtPnRocmVhZCwg YW5kIHRoZSByZWdiYXNlCisgKiAgYW5kIHZhcm1hcCBtdXN0IHN0aWxsIGJlIHZhbGlkLiAgT24g ZW50cnksICdlbnYnIG11c3QgYmUgcmVhY2hhYmxlLgorICovCisKK0RVS19JTlRFUk5BTCB2b2lk IGR1a19qc19jbG9zZV9lbnZpcm9ubWVudF9yZWNvcmQoZHVrX2h0aHJlYWQgKnRociwgZHVrX2hv YmplY3QgKmVudikgeworCWR1a191aW50X2Zhc3QzMl90IGk7CisJZHVrX2hvYmplY3QgKnZhcm1h cDsKKwlkdWtfaHN0cmluZyAqa2V5OworCWR1a190dmFsICp0djsKKwlkdWtfdWludF90IHJlZ251 bTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoZW52ICE9IE5VTEwp OworCisJaWYgKERVS19VTkxJS0VMWSghRFVLX0hPQkpFQ1RfSVNfREVDRU5WKGVudikpKSB7CisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJlbnYgbm90IGEgZGVjbGFyYXRpdmUgcmVjb3JkOiAlIWlP IiwgKGR1a19oZWFwaGRyICopIGVudikpOworCQlyZXR1cm47CisJfQorCisJdmFybWFwID0gKChk dWtfaGRlY2VudiAqKSBlbnYpLT52YXJtYXA7CisJaWYgKHZhcm1hcCA9PSBOVUxMKSB7CisJCURV S19EREQoRFVLX0RERFBSSU5UKCJlbnYgYWxyZWFkeSBjbG9zZWQ6ICUhaU8iLCAoZHVrX2hlYXBo ZHIgKikgZW52KSk7CisKKwkJcmV0dXJuOworCX0KKwlEVUtfQVNTRVJUKCgoZHVrX2hkZWNlbnYg KikgZW52KS0+dGhyZWFkICE9IE5VTEwpOworCURVS19BU1NFUlRfSERFQ0VOVl9WQUxJRCgoZHVr X2hkZWNlbnYgKikgZW52KTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJjbG9zaW5nIGVudjog JSFpTyIsIChkdWtfaGVhcGhkciAqKSBlbnYpKTsKKwlEVUtfREREKERVS19ERERQUklOVCgidmFy bWFwOiAlIU8iLCAoZHVrX2hlYXBoZHIgKikgdmFybWFwKSk7CisKKwkvKiBFbnYgbXVzdCBiZSBj bG9zZWQgaW4gdGhlIHNhbWUgdGhyZWFkIGFzIHdoZXJlIGl0IHJ1bnMuICovCisJRFVLX0FTU0VS VCgoKGR1a19oZGVjZW52ICopIGVudiktPnRocmVhZCA9PSB0aHIpOworCisJLyogWFhYOiBhZGRp dGlvbmFsIGNvbmRpdGlvbnMgd2hlbiB0byBjbG9zZSB2YXJpYWJsZXM/IHdlIGRvbid0IHdhbnQg dG8gZG8gaXQKKwkgKiB1bmxlc3MgdGhlIGVudmlyb25tZW50IG1heSBoYXZlICJlc2NhcGVkIiAo cmVmZXJlbmNlZCBpbiBhIGZ1bmN0aW9uIGNsb3N1cmUpLgorCSAqIFdpdGggZGVsYXllZCBlbnZp cm9ubWVudHMsIHRoZSBleGlzdGVuY2UgaXMgcHJvYmFibHkgZ29vZCBlbm91Z2ggb2YgYSBjaGVj ay4KKwkgKi8KKworCS8qIE5vdGU6IHdlIHJlbHkgb24gdGhlIF9WYXJtYXAgaGF2aW5nIGEgYnVu Y2ggb2YgbmljZSBwcm9wZXJ0aWVzLCBsaWtlOgorCSAqICAtIGJlaW5nIGNvbXBhY3RlZCBhbmQg dW5tb2RpZmllZCBkdXJpbmcgdGhpcyBwcm9jZXNzCisJICogIC0gbm90IGNvbnRhaW5pbmcgYW4g YXJyYXkgcGFydAorCSAqICAtIGhhdmluZyBjb3JyZWN0IHZhbHVlIHR5cGVzCisJICovCisKKwlE VUtfREREKERVS19ERERQUklOVCgiY29weWluZyBib3VuZCByZWdpc3RlciB2YWx1ZXMsICVsZCBi b3VuZCByZWdzIiwgKGxvbmcpIERVS19IT0JKRUNUX0dFVF9FTkVYVCh2YXJtYXApKSk7CisKKwkv KiBDb3B5IG92ZXIgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMgZnJvbSB2YWx1ZSBzdGFjayB0byB0 aGUKKwkgKiBlbnZpcm9ubWVudCByZWNvcmQuICBUaGUgc2NvcGUgb2JqZWN0IGlzIGVtcHR5IGJ1 dCBtYXkKKwkgKiBpbmhlcml0IGZyb20gYW5vdGhlciBzY29wZSB3aGljaCBoYXMgY29uZmxpY3Rp bmcgbmFtZXMuCisJICovCisKKwkvKiBYWFg6IERvIHRoaXMgdXNpbmcgYSBvbmNlIGFsbG9jYXRl ZCBlbnRyeSBhcmVhLCBubyBzaWRlIGVmZmVjdHMuCisJICogSGFzaCBwYXJ0IHdvdWxkIG5lZWQg c3BlY2lhbCB0cmVhdG1lbnQgaG93ZXZlciAobWF5YmUgY29weSwgYW5kCisJICogdGhlbiByZWFs bG9jIHdpdGggaGFzaCBwYXJ0IGlmIGxhcmdlIGVub3VnaCkuCisJICovCisJZm9yIChpID0gMDsg aSA8IChkdWtfdWludF9mYXN0MzJfdCkgRFVLX0hPQkpFQ1RfR0VUX0VORVhUKHZhcm1hcCk7IGkr KykgeworCQlkdWtfc2l6ZV90IHJlZ2Jhc2VfYnl0ZW9mZjsKKworCQlrZXkgPSBEVUtfSE9CSkVD VF9FX0dFVF9LRVkodGhyLT5oZWFwLCB2YXJtYXAsIGkpOworCQlEVUtfQVNTRVJUKGtleSAhPSBO VUxMKTsgICAvKiBhc3N1bWUga2V5cyBhcmUgY29tcGFjdCBpbiBfVmFybWFwICovCisJCURVS19B U1NFUlQoIURVS19IT0JKRUNUX0VfU0xPVF9JU19BQ0NFU1NPUih0aHItPmhlYXAsIHZhcm1hcCwg aSkpOyAgLyogYXNzdW1lIHBsYWluIHZhbHVlcyAqLworCisJCXR2ID0gRFVLX0hPQkpFQ1RfRV9H RVRfVkFMVUVfVFZBTF9QVFIodGhyLT5oZWFwLCB2YXJtYXAsIGkpOworCQlEVUtfQVNTRVJUKERV S19UVkFMX0lTX05VTUJFUih0dikpOworCQlEVUtfQVNTRVJUKERVS19UVkFMX0dFVF9OVU1CRVIo dHYpIDw9IChkdWtfZG91YmxlX3QpIERVS19VSU5UMzJfTUFYKTsgIC8qIGxpbWl0cyAqLworI2lm IGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCQlEVUtfQVNTRVJUKERVS19UVkFMX0lTX0ZBU1RJ TlQodHYpKTsKKwkJcmVnbnVtID0gKGR1a191aW50X3QpIERVS19UVkFMX0dFVF9GQVNUSU5UX1Uz Mih0dik7CisjZWxzZQorCQlyZWdudW0gPSAoZHVrX3VpbnRfdCkgRFVLX1RWQUxfR0VUX05VTUJF Uih0dik7CisjZW5kaWYKKworCQlyZWdiYXNlX2J5dGVvZmYgPSAoKGR1a19oZGVjZW52ICopIGVu diktPnJlZ2Jhc2VfYnl0ZW9mZjsKKwkJRFVLX0FTU0VSVCgoZHVrX3VpbnQ4X3QgKikgdGhyLT52 YWxzdGFjayArIHJlZ2Jhc2VfYnl0ZW9mZiArIHNpemVvZihkdWtfdHZhbCkgKiByZWdudW0gPj0g KGR1a191aW50OF90ICopIHRoci0+dmFsc3RhY2spOworCQlEVUtfQVNTRVJUKChkdWtfdWludDhf dCAqKSB0aHItPnZhbHN0YWNrICsgcmVnYmFzZV9ieXRlb2ZmICsgc2l6ZW9mKGR1a190dmFsKSAq IHJlZ251bSA8IChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0YWNrX3RvcCk7CisKKwkJLyogSWYg cHJvcGVydHkgYWxyZWFkeSBleGlzdHMsIG92ZXJ3cml0ZXMgc2lsZW50bHkuCisJCSAqIFByb3Bl cnR5IGlzIHdyaXRhYmxlLCBidXQgbm90IGRlbGV0YWJsZSAobm90IGNvbmZpZ3VyYWJsZQorCQkg KiBpbiB0ZXJtcyBvZiBwcm9wZXJ0eSBhdHRyaWJ1dGVzKS4KKwkJICovCisJCWR1a19wdXNoX3R2 YWwodGhyLCAoZHVrX3R2YWwgKikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSB0aHItPnZhbHN0 YWNrICsgcmVnYmFzZV9ieXRlb2ZmICsgc2l6ZW9mKGR1a190dmFsKSAqIHJlZ251bSkpOworCQlE VUtfREREKERVS19ERERQUklOVCgiY2xvc2luZyBpZGVudGlmaWVyICUhTyAtPiByZWcgJWxkLCB2 YWx1ZSAlIVQiLAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikga2V5LAor CQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgcmVnbnVtLAorCQkgICAgICAgICAgICAgICAg ICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpKSk7CisJCWR1a19ob2JqZWN0 X2RlZmluZV9wcm9wZXJ0eV9pbnRlcm5hbCh0aHIsIGVudiwga2V5LCBEVUtfUFJPUERFU0NfRkxB R1NfV0UpOworCX0KKworCS8qIE5VTEwgYXRvbWljYWxseSB0byBhdm9pZCBpbmNvbnNpc3RlbnQg c3RhdGUgKyBzaWRlIGVmZmVjdHMuICovCisJRFVLX0hPQkpFQ1RfREVDUkVGX05PUloodGhyLCAo KGR1a19oZGVjZW52ICopIGVudiktPnRocmVhZCk7CisJRFVLX0hPQkpFQ1RfREVDUkVGX05PUloo dGhyLCAoKGR1a19oZGVjZW52ICopIGVudiktPnZhcm1hcCk7CisJKChkdWtfaGRlY2VudiAqKSBl bnYpLT50aHJlYWQgPSBOVUxMOworCSgoZHVrX2hkZWNlbnYgKikgZW52KS0+dmFybWFwID0gTlVM TDsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJlbnYgYWZ0ZXIgY2xvc2luZzogJSFPIiwgKGR1 a19oZWFwaGRyICopIGVudikpOworfQorCisvKgorICogIEdFVElEUkVGOiBhIEdldElkZW50aWZp ZXJSZWZlcmVuY2UtbGlrZSBoZWxwZXIuCisgKgorICogIFByb3ZpZGVzIGEgcGFyZW50IHRyYXZl cnNpbmcgbG9va3VwIGFuZCBhIHNpbmdsZSBsZXZlbCBsb29rdXAKKyAqICAoZm9yIEhhc0JpbmRp bmcpLgorICoKKyAqICBJbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgdmFsdWUsIHJldHVybnMgYSBi dW5jaCBvZiB2YWx1ZXMgYWxsb3dpbmcKKyAqICB0aGUgY2FsbGVyIHRvIHJlYWQsIHdyaXRlLCBv ciBkZWxldGUgdGhlIGJpbmRpbmcuICBWYWx1ZSBwb2ludGVycworICogIGFyZSBkdWtfdHZhbCBw b2ludGVycyB3aGljaCBjYW4gYmUgbXV0YXRlZCBkaXJlY3RseSBhcyBsb25nIGFzCisgKiAgcmVm Y291bnRzIGFyZSBwcm9wZXJseSB1cGRhdGVkLiAgTm90ZSB0aGF0IGFueSBvcGVyYXRpb24gd2hp Y2ggbWF5CisgKiAgcmVhbGxvY2F0ZSB2YWxzdGFja3Mgb3IgY29tcGFjdCBvYmplY3RzIG1heSBp bnZhbGlkYXRlIHRoZSByZXR1cm5lZAorICogIGR1a190dmFsIChidXQgbm90IG9iamVjdCkgcG9p bnRlcnMsIHNvIGNhbGxlciBtdXN0IGJlIHZlcnkgY2FyZWZ1bC4KKyAqCisgKiAgSWYgc3RhcnRp bmcgZW52aXJvbm1lbnQgcmVjb3JkICdlbnYnIGlzIGdpdmVuLCAnYWN0JyBpcyBpZ25vcmVkLgor ICogIEhvd2V2ZXIsIGlmICdlbnYnIGlzIE5VTEwsIHRoZSBjYWxsZXIgbWF5IGlkZW50aWZ5LCBp biAnYWN0JywgYW4KKyAqICBhY3RpdmF0aW9uIHdoaWNoIGhhc24ndCBoYWQgaXRzIGRlY2xhcmF0 aXZlIGVudmlyb25tZW50IGluaXRpYWxpemVkCisgKiAgeWV0LiAgVGhlIGFjdGl2YXRpb24gcmVn aXN0ZXJzIGFyZSB0aGVuIGxvb2tlZCB1cCwgYW5kIGl0cyBwYXJlbnQKKyAqICB0cmF2ZXJzZWQg bm9ybWFsbHkuCisgKgorICogIFRoZSAnb3V0JyBzdHJ1Y3R1cmUgdmFsdWVzIGFyZSBvbmx5IHZh bGlkIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiAgc3VjY2VzcyAobm9uLXplcm8pLgorICov CisKKy8qIGxvb2t1cCBuYW1lIGZyb20gYW4gb3BlbiBkZWNsYXJhdGl2ZSByZWNvcmQncyByZWdp c3RlcnMgKi8KK0RVS19MT0NBTAorZHVrX2Jvb2xfdCBkdWtfX2dldGlkX29wZW5fZGVjbF9lbnZf cmVncyhkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfaHN0cmluZyAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX2hkZWNlbnYgKmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHVrX19pZF9sb29rdXBfcmVzdWx0ICpvdXQpIHsKKwlkdWtfdHZhbCAq dHY7CisJZHVrX3NpemVfdCByZWdfcmVsOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJ RFVLX0FTU0VSVChuYW1lICE9IE5VTEwpOworCURVS19BU1NFUlQoZW52ICE9IE5VTEwpOworCURV S19BU1NFUlQob3V0ICE9IE5VTEwpOworCisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9JU19ERUNF TlYoKGR1a19ob2JqZWN0ICopIGVudikpOworCURVS19BU1NFUlRfSERFQ0VOVl9WQUxJRChlbnYp OworCisJaWYgKGVudi0+dGhyZWFkID09IE5VTEwpIHsKKwkJLyogYWxyZWFkeSBjbG9zZWQgKi8K KwkJcmV0dXJuIDA7CisJfQorCURVS19BU1NFUlQoZW52LT52YXJtYXAgIT0gTlVMTCk7CisKKwl0 diA9IGR1a19ob2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnlfdHZhbF9wdHIodGhyLT5oZWFwLCBl bnYtPnZhcm1hcCwgbmFtZSk7CisJaWYgKERVS19VTkxJS0VMWSh0diA9PSBOVUxMKSkgeworCQly ZXR1cm4gMDsKKwl9CisKKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05VTUJFUih0dikpOworCURV S19BU1NFUlQoRFVLX1RWQUxfR0VUX05VTUJFUih0dikgPD0gKGR1a19kb3VibGVfdCkgRFVLX1VJ TlQzMl9NQVgpOyAgLyogbGltaXRzICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpCisJ RFVLX0FTU0VSVChEVUtfVFZBTF9JU19GQVNUSU5UKHR2KSk7CisJcmVnX3JlbCA9IChkdWtfc2l6 ZV90KSBEVUtfVFZBTF9HRVRfRkFTVElOVF9VMzIodHYpOworI2Vsc2UKKwlyZWdfcmVsID0gKGR1 a19zaXplX3QpIERVS19UVkFMX0dFVF9OVU1CRVIodHYpOworI2VuZGlmCisJRFVLX0FTU0VSVF9E SVNBQkxFKHJlZ19yZWwgPj0gMCk7ICAvKiB1bnNpZ25lZCAqLworCisJdHYgPSAoZHVrX3R2YWwg KikgKHZvaWQgKikgKChkdWtfdWludDhfdCAqKSBlbnYtPnRocmVhZC0+dmFsc3RhY2sgKyBlbnYt PnJlZ2Jhc2VfYnl0ZW9mZiArIHNpemVvZihkdWtfdHZhbCkgKiByZWdfcmVsKTsKKwlEVUtfQVNT RVJUKHR2ID49IGVudi0+dGhyZWFkLT52YWxzdGFjayAmJiB0diA8IGVudi0+dGhyZWFkLT52YWxz dGFja19lbmQpOyAgLyogWFhYOiBtb3JlIGFjY3VyYXRlPyAqLworCisJb3V0LT52YWx1ZSA9IHR2 OworCW91dC0+YXR0cnMgPSBEVUtfUFJPUERFU0NfRkxBR1NfVzsgIC8qIHJlZ2lzdGVycyBhcmUg bXV0YWJsZSwgbm9uLWRlbGV0YWJsZSAqLworCW91dC0+ZW52ID0gKGR1a19ob2JqZWN0ICopIGVu djsKKwlvdXQtPmhvbGRlciA9IE5VTEw7CisJb3V0LT5oYXNfdGhpcyA9IDA7CisJcmV0dXJuIDE7 Cit9CisKKy8qIGxvb2t1cCBuYW1lIGZyb20gY3VycmVudCBhY3RpdmF0aW9uIHJlY29yZCdzIGZ1 bmN0aW9ucycgcmVnaXN0ZXJzICovCitEVUtfTE9DQUwKK2R1a19ib29sX3QgZHVrX19nZXRpZF9h Y3RpdmF0aW9uX3JlZ3MoZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHVrX2hzdHJpbmcgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGR1a19hY3RpdmF0aW9uICphY3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1a19faWRfbG9va3VwX3Jlc3VsdCAqb3V0KSB7CisJZHVrX3R2 YWwgKnR2OworCWR1a19ob2JqZWN0ICpmdW5jOworCWR1a19ob2JqZWN0ICp2YXJtYXA7CisJZHVr X3NpemVfdCByZWdfcmVsOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VS VChuYW1lICE9IE5VTEwpOworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCURVS19BU1NFUlQo b3V0ICE9IE5VTEwpOworCisJZnVuYyA9IERVS19BQ1RfR0VUX0ZVTkMoYWN0KTsKKwlEVUtfQVNT RVJUKGZ1bmMgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfTkVXRU5WKGZ1 bmMpKTsKKworCWlmICghRFVLX0hPQkpFQ1RfSVNfQ09NUEZVTkMoZnVuYykpIHsKKwkJcmV0dXJu IDA7CisJfQorCisJLyogWFhYOiBtb3ZlIHZhcm1hcCB0byBkdWtfaGNvbXBmdW5jIHN0cnVjdCBm aWVsZC4gKi8KKwl0diA9IGR1a19ob2JqZWN0X2ZpbmRfZXhpc3RpbmdfZW50cnlfdHZhbF9wdHIo dGhyLT5oZWFwLCBmdW5jLCBEVUtfSFRIUkVBRF9TVFJJTkdfSU5UX1ZBUk1BUCh0aHIpKTsKKwlp ZiAoIXR2KSB7CisJCXJldHVybiAwOworCX0KKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX09CSkVD VCh0dikpOworCXZhcm1hcCA9IERVS19UVkFMX0dFVF9PQkpFQ1QodHYpOworCURVS19BU1NFUlQo dmFybWFwICE9IE5VTEwpOworCisJdHYgPSBkdWtfaG9iamVjdF9maW5kX2V4aXN0aW5nX2VudHJ5 X3R2YWxfcHRyKHRoci0+aGVhcCwgdmFybWFwLCBuYW1lKTsKKwlpZiAoIXR2KSB7CisJCXJldHVy biAwOworCX0KKwlEVUtfQVNTRVJUKERVS19UVkFMX0lTX05VTUJFUih0dikpOworCXJlZ19yZWwg PSAoZHVrX3NpemVfdCkgRFVLX1RWQUxfR0VUX05VTUJFUih0dik7CisJRFVLX0FTU0VSVF9ESVNB QkxFKHJlZ19yZWwgPj0gMCk7CisJRFVLX0FTU0VSVChyZWdfcmVsIDwgKChkdWtfaGNvbXBmdW5j ICopIGZ1bmMpLT5ucmVncyk7CisKKwl0diA9IChkdWtfdHZhbCAqKSAodm9pZCAqKSAoKGR1a191 aW50OF90ICopIHRoci0+dmFsc3RhY2sgKyBhY3QtPmJvdHRvbV9ieXRlb2ZmKTsKKwl0diArPSBy ZWdfcmVsOworCisJb3V0LT52YWx1ZSA9IHR2OworCW91dC0+YXR0cnMgPSBEVUtfUFJPUERFU0Nf RkxBR1NfVzsgIC8qIHJlZ2lzdGVycyBhcmUgbXV0YWJsZSwgbm9uLWRlbGV0YWJsZSAqLworCW91 dC0+ZW52ID0gTlVMTDsKKwlvdXQtPmhvbGRlciA9IE5VTEw7CisJb3V0LT5oYXNfdGhpcyA9IDA7 CisJcmV0dXJuIDE7Cit9CisKK0RVS19MT0NBTAorZHVrX2Jvb2xfdCBkdWtfX2dldF9pZGVudGlm aWVyX3JlZmVyZW5jZShkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqZW52LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkdWtfaHN0cmluZyAqbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2FjdGl2YXRpb24gKmFjdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xfdCBwYXJlbnRzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfX2lkX2xvb2t1cF9yZXN1bHQg Km91dCkgeworCWR1a190dmFsICp0djsKKwlkdWtfdWludF90IHNhbml0eTsKKworCURVS19BU1NF UlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoZW52ICE9IE5VTEwgfHwgYWN0ICE9IE5VTEwp OworCURVS19BU1NFUlQobmFtZSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG91dCAhPSBOVUxMKTsK KworCURVS19BU1NFUlQoIWVudiB8fCBEVUtfSE9CSkVDVF9JU19FTlYoZW52KSk7CisJRFVLX0FT U0VSVCghZW52IHx8ICFEVUtfSE9CSkVDVF9IQVNfQVJSQVlfUEFSVChlbnYpKTsKKworCS8qCisJ ICogIENvbmNlcHR1YWxseSwgd2UgbG9vayBmb3IgdGhlIGlkZW50aWZpZXIgYmluZGluZyBieSBz dGFydGluZyBmcm9tCisJICogICdlbnYnIGFuZCBmb2xsb3dpbmcgdG8gY2hhaW4gb2YgZW52aXJv bm1lbnQgcmVjb3JkcyAocmVwcmVzZW50ZWQKKwkgKiAgYnkgdGhlIHByb3RvdHlwZSBjaGFpbiku CisJICoKKwkgKiAgSWYgJ2VudicgaXMgTlVMTCwgdGhlIGN1cnJlbnQgYWN0aXZhdGlvbiBkb2Vz IG5vdCB5ZXQgaGF2ZSBhbgorCSAqICBhbGxvY2F0ZWQgZGVjbGFyYXRpdmUgZW52aXJvbm1lbnQg cmVjb3JkOyB0aGlzIHNob3VsZCBiZSB0cmVhdGVkCisJICogIGV4YWN0bHkgYXMgaWYgdGhlIGVu dmlyb25tZW50IHJlY29yZCBleGlzdGVkIGJ1dCBoYWQgbm8gYmluZGluZ3MKKwkgKiAgb3RoZXIg dGhhbiByZWdpc3RlciBiaW5kaW5ncy4KKwkgKgorCSAqICBOb3RlOiB3ZSBhc3N1bWUgdGhhdCB3 aXRoIHRoZSBEVUtfSE9CSkVDVF9GTEFHX05FV0VOViBjbGVhcmVkCisJICogIHRoZSBlbnZpcm9u bWVudCB3aWxsIGFsd2F5cyBiZSBpbml0aWFsaXplZCBpbW1lZGlhdGVseTsgaGVuY2UKKwkgKiAg YSBOVUxMICdlbnYnIHNob3VsZCBvbmx5IGhhcHBlbiB3aXRoIHRoZSBmbGFnIHNldC4gIFRoaXMg aXMgdGhlCisJICogIGNhc2UgZm9yOiAoMSkgZnVuY3Rpb24gY2FsbHMsIGFuZCAoMikgc3RyaWN0 LCBkaXJlY3QgZXZhbCBjYWxscy4KKwkgKi8KKworCWlmIChlbnYgPT0gTlVMTCAmJiBhY3QgIT0g TlVMTCkgeworCQlkdWtfaG9iamVjdCAqZnVuYzsKKwkJZHVrX2hjb21wZnVuYyAqZjsKKworCQlE VUtfREREKERVS19ERERQUklOVCgiZHVrX19nZXRfaWRlbnRpZmllcl9yZWZlcmVuY2U6IGVudiBp cyBOVUxMLCBhY3RpdmF0aW9uIGlzIG5vbi1OVUxMIC0+ICIKKwkJICAgICAgICAgICAgICAgICAg ICAgImRlbGF5ZWQgZW52IGNhc2UsIGxvb2sgdXAgYWN0aXZhdGlvbiByZWdzIGZpcnN0IikpOwor CisJCS8qCisJCSAqICBUcnkgcmVnaXN0ZXJzCisJCSAqLworCisJCWlmIChkdWtfX2dldGlkX2Fj dGl2YXRpb25fcmVncyh0aHIsIG5hbWUsIGFjdCwgb3V0KSkgeworCQkJRFVLX0RERChEVUtfRERE UFJJTlQoImR1a19fZ2V0X2lkZW50aWZpZXJfcmVmZXJlbmNlIHN1Y2Nlc3NmdWw6ICIKKwkJCSAg ICAgICAgICAgICAgICAgICAgICJuYW1lPSUhTyAtPiB2YWx1ZT0lIVQsIGF0dHJzPSVsZCwgaGFz X3RoaXM9JWxkLCBlbnY9JSFPLCBob2xkZXI9JSFPICIKKwkJCSAgICAgICAgICAgICAgICAgICAg ICIoZm91bmQgZnJvbSByZWdpc3RlciBiaW5kaW5ncyB3aGVuIGVudj1OVUxMKSIsCisJCQkgICAg ICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbmFtZSwgKGR1a190dmFsICopIG91dC0+ dmFsdWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgb3V0LT5hdHRycywgKGxvbmcp IG91dC0+aGFzX3RoaXMsCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikg b3V0LT5lbnYsIChkdWtfaGVhcGhkciAqKSBvdXQtPmhvbGRlcikpOworCQkJcmV0dXJuIDE7CisJ CX0KKworCQlEVUtfREREKERVS19ERERQUklOVCgibm90IGZvdW5kIGluIGN1cnJlbnQgYWN0aXZh dGlvbiByZWdzIikpOworCisJCS8qCisJCSAqICBOb3QgZm91bmQgaW4gcmVnaXN0ZXJzLCBwcm9j ZWVkIHRvIHRoZSBwYXJlbnQgcmVjb3JkLgorCQkgKiAgSGVyZSB3ZSBuZWVkIHRvIGRldGVybWlu ZSB3aGF0IHRoZSBwYXJlbnQgd291bGQgYmUsCisJCSAqICBpZiAnZW52JyB3YXMgbm90IE5VTEwg KGkuZS4gc2FtZSBsb2dpYyBhcyB3aGVuIGluaXRpYWxpemluZworCQkgKiAgdGhlIHJlY29yZCku CisJCSAqCisJCSAqICBOb3RlIHRoYXQgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24gaXMgb25s eSBkZWZlcnJlZCB3aGVuCisJCSAqICBEVUtfSE9CSkVDVF9IQVNfTkVXRU5WIGlzIHNldCwgYW5k IHRoaXMgb25seSBoYXBwZW5zIGZvcjoKKwkJICogICAgLSBGdW5jdGlvbiBjb2RlCisJCSAqICAg IC0gU3RyaWN0IGV2YWwgY29kZQorCQkgKgorCQkgKiAgV2Ugb25seSBuZWVkIHRvIGNoZWNrIF9M ZXhlbnYgaGVyZTsgX1ZhcmVudiBleGlzdHMgb25seSBpZiBpdAorCQkgKiAgZGlmZmVycyBmcm9t IF9MZXhlbnYgKGFuZCB0aHVzIF9MZXhlbnYgd2lsbCBhbHNvIGJlIHByZXNlbnQpLgorCQkgKi8K KworCQlpZiAoIXBhcmVudHMpIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJkdWtfX2dldF9p ZGVudGlmaWVyX3JlZmVyZW5jZSBmYWlsZWQsIG5vIHBhcmVudCB0cmF2ZXJzYWwgIgorCQkJICAg ICAgICAgICAgICAgICAgICAgIihub3QgZm91bmQgZnJvbSByZWdpc3RlciBiaW5kaW5ncyB3aGVu IGVudj1OVUxMKSIpKTsKKwkJCWdvdG8gZmFpbF9ub3RfZm91bmQ7CisJCX0KKworCQlmdW5jID0g RFVLX0FDVF9HRVRfRlVOQyhhY3QpOworCQlEVUtfQVNTRVJUKGZ1bmMgIT0gTlVMTCk7CisJCURV S19BU1NFUlQoRFVLX0hPQkpFQ1RfSEFTX05FV0VOVihmdW5jKSk7CisJCWYgPSAoZHVrX2hjb21w ZnVuYyAqKSBmdW5jOworCisJCWVudiA9IERVS19IQ09NUEZVTkNfR0VUX0xFWEVOVih0aHItPmhl YXAsIGYpOworCQlpZiAoIWVudikgeworCQkJZW52ID0gdGhyLT5idWlsdGluc1tEVUtfQklEWF9H TE9CQUxfRU5WXTsKKwkJfQorCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJjb250aW51ZSBsb29r dXAgZnJvbSBlbnY6ICUhaU8iLAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIg KikgZW52KSk7CisJfQorCisJLyoKKwkgKiAgUHJvdG90eXBlIHdhbGtpbmcgc3RhcnRpbmcgZnJv bSAnZW52Jy4KKwkgKgorCSAqICAoJ2FjdCcgaXMgbm90IG5lZWRlZCBhbnl3aGVyZSBoZXJlLikK KwkgKi8KKworCXNhbml0eSA9IERVS19IT0JKRUNUX1BST1RPVFlQRV9DSEFJTl9TQU5JVFk7CisJ d2hpbGUgKGVudiAhPSBOVUxMKSB7CisJCWR1a19zbWFsbF91aW50X3QgY2w7CisJCWR1a191aW50 X3QgYXR0cnM7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImR1a19fZ2V0X2lkZW50aWZpZXJf cmVmZXJlbmNlLCBuYW1lPSUhTywgY29uc2lkZXJpbmcgZW52PSVwIC0+ICUhaU8iLAorCQkgICAg ICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbmFtZSwKKwkJICAgICAgICAgICAgICAg ICAgICAgKHZvaWQgKikgZW52LAorCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIg KikgZW52KSk7CisKKwkJRFVLX0FTU0VSVChlbnYgIT0gTlVMTCk7CisJCURVS19BU1NFUlQoRFVL X0hPQkpFQ1RfSVNfRU5WKGVudikpOworCQlEVUtfQVNTRVJUKCFEVUtfSE9CSkVDVF9IQVNfQVJS QVlfUEFSVChlbnYpKTsKKworCQljbCA9IERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1CRVIoZW52 KTsKKwkJRFVLX0FTU0VSVChjbCA9PSBEVUtfSE9CSkVDVF9DTEFTU19PQkpFTlYgfHwgY2wgPT0g RFVLX0hPQkpFQ1RfQ0xBU1NfREVDRU5WKTsKKwkJaWYgKGNsID09IERVS19IT0JKRUNUX0NMQVNT X0RFQ0VOVikgeworCQkJLyoKKwkJCSAqICBEZWNsYXJhdGl2ZSBlbnZpcm9ubWVudCByZWNvcmQu CisJCQkgKgorCQkJICogIElkZW50aWZpZXJzIGNhbiBuZXZlciBiZSBzdG9yZWQgaW4gYW5jZXN0 b3JzIGFuZCBhcmUKKwkJCSAqICBhbHdheXMgcGxhaW4gdmFsdWVzLCBzbyB3ZSBjYW4gdXNlIGFu IGludGVybmFsIGhlbHBlcgorCQkJICogIGFuZCBhY2Nlc3MgdGhlIHZhbHVlIGRpcmVjdGx5IHdp dGggYW4gZHVrX3R2YWwgcHRyLgorCQkJICoKKwkJCSAqICBBIGNsb3NlZCBlbnZpcm9ubWVudCBp cyBvbmx5IGluZGljYXRlZCBieSBpdCBtaXNzaW5nCisJCQkgKiAgdGhlICJib29rLWtlZXBpbmci IHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIGFjY2Vzc2luZworCQkJICogIHJlZ2lzdGVyLWJvdW5k IHZhcmlhYmxlcy4KKwkJCSAqLworCisJCQlEVUtfQVNTRVJUX0hERUNFTlZfVkFMSUQoKGR1a19o ZGVjZW52ICopIGVudik7CisJCQlpZiAoZHVrX19nZXRpZF9vcGVuX2RlY2xfZW52X3JlZ3ModGhy LCBuYW1lLCAoZHVrX2hkZWNlbnYgKikgZW52LCBvdXQpKSB7CisJCQkJRFVLX0RERChEVUtfRERE UFJJTlQoImR1a19fZ2V0X2lkZW50aWZpZXJfcmVmZXJlbmNlIHN1Y2Nlc3NmdWw6ICIKKwkJCQkg ICAgICAgICAgICAgICAgICAgICAibmFtZT0lIU8gLT4gdmFsdWU9JSFULCBhdHRycz0lbGQsIGhh c190aGlzPSVsZCwgZW52PSUhTywgaG9sZGVyPSUhTyAiCisJCQkJICAgICAgICAgICAgICAgICAg ICAgIihkZWNsYXJhdGl2ZSBlbnZpcm9ubWVudCByZWNvcmQsIHNjb3BlIG9wZW4sIGZvdW5kIGlu IHJlZ3MpIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbmFtZSwg KGR1a190dmFsICopIG91dC0+dmFsdWUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IG91dC0+YXR0cnMsIChsb25nKSBvdXQtPmhhc190aGlzLAorCQkJCSAgICAgICAgICAgICAgICAg ICAgIChkdWtfaGVhcGhkciAqKSBvdXQtPmVudiwgKGR1a19oZWFwaGRyICopIG91dC0+aG9sZGVy KSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCXR2ID0gZHVrX2hvYmplY3RfZmluZF9leGlz dGluZ19lbnRyeV90dmFsX3B0cl9hbmRfYXR0cnModGhyLT5oZWFwLCBlbnYsIG5hbWUsICZhdHRy cyk7CisJCQlpZiAodHYpIHsKKwkJCQlvdXQtPnZhbHVlID0gdHY7CisJCQkJb3V0LT5hdHRycyA9 IGF0dHJzOworCQkJCW91dC0+ZW52ID0gZW52OworCQkJCW91dC0+aG9sZGVyID0gZW52OworCQkJ CW91dC0+aGFzX3RoaXMgPSAwOworCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImR1a19fZ2V0 X2lkZW50aWZpZXJfcmVmZXJlbmNlIHN1Y2Nlc3NmdWw6ICIKKwkJCQkgICAgICAgICAgICAgICAg ICAgICAibmFtZT0lIU8gLT4gdmFsdWU9JSFULCBhdHRycz0lbGQsIGhhc190aGlzPSVsZCwgZW52 PSUhTywgaG9sZGVyPSUhTyAiCisJCQkJICAgICAgICAgICAgICAgICAgICAgIihkZWNsYXJhdGl2 ZSBlbnZpcm9ubWVudCByZWNvcmQsIGZvdW5kIGluIHByb3BlcnRpZXMpIiwKKwkJCQkgICAgICAg ICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbmFtZSwgKGR1a190dmFsICopIG91dC0+dmFs dWUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG91dC0+YXR0cnMsIChsb25nKSBv dXQtPmhhc190aGlzLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtfaGVhcGhkciAqKSBv dXQtPmVudiwgKGR1a19oZWFwaGRyICopIG91dC0+aG9sZGVyKSk7CisJCQkJcmV0dXJuIDE7CisJ CQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogIE9iamVjdCBlbnZpcm9ubWVudCByZWNvcmQu CisJCQkgKgorCQkJICogIEJpbmRpbmcgKHRhcmdldCkgb2JqZWN0IGlzIGFuIGV4dGVybmFsLCB1 bmNvbnRyb2xsZWQgb2JqZWN0LgorCQkJICogIElkZW50aWZpZXIgbWF5IGJlIGJvdW5kIGluIGFu IGFuY2VzdG9yIHByb3BlcnR5LCBhbmQgbWF5IGJlCisJCQkgKiAgYW4gYWNjZXNzb3IuICBUYXJn ZXQgY2FuIGFsc28gYmUgYSBQcm94eSB3aGljaCB3ZSBtdXN0IHN1cHBvcnQKKwkJCSAqICBoZXJl LgorCQkJICovCisKKwkJCS8qIFhYWDogd2UgY291bGQgc2F2ZSBzcGFjZSBieSB1c2luZyBfVGFy Z2V0IE9SIF9UaGlzLiAgSWYgX1RhcmdldCwgYXNzdW1lCisJCQkgKiB0aGlzIGJpbmRpbmcgaXMg dW5kZWZpbmVkLiAgSWYgX1RoaXMsIGFzc3VtZXMgdGhpcyBiaW5kaW5nIGlzIF9UaGlzLCBhbmQK KwkJCSAqIHRhcmdldCBpcyBhbHNvIF9UaGlzLiAgT25lIHByb3BlcnR5IHdvdWxkIHRoZW4gYmUg ZW5vdWdoLgorCQkJICovCisKKwkJCWR1a19ob2JqZWN0ICp0YXJnZXQ7CisJCQlkdWtfYm9vbF90 IGZvdW5kOworCisJCQlEVUtfQVNTRVJUKGNsID09IERVS19IT0JKRUNUX0NMQVNTX09CSkVOVik7 CisJCQlEVUtfQVNTRVJUX0hPQkpFTlZfVkFMSUQoKGR1a19ob2JqZW52ICopIGVudik7CisKKwkJ CXRhcmdldCA9ICgoZHVrX2hvYmplbnYgKikgZW52KS0+dGFyZ2V0OworCQkJRFVLX0FTU0VSVCh0 YXJnZXQgIT0gTlVMTCk7CisKKwkJCS8qIFRhcmdldCBtYXkgYmUgYSBQcm94eSBvciBwcm9wZXJ0 eSBtYXkgYmUgYW4gYWNjZXNzb3IsIHNvIHdlIG11c3QKKwkJCSAqIHVzZSBhbiBhY3R1YWwsIFBy b3h5LWF3YXJlIGhhc3Byb3AgY2hlY2sgaGVyZS4KKwkJCSAqCisJCQkgKiBvdXQtPmhvbGRlciBp cyBOT1Qgc2V0IHRvIHRoZSBhY3R1YWwgZHVrX2hvYmplY3Qgd2hlcmUgdGhlCisJCQkgKiBwcm9w ZXJ0eSBpcyBmb3VuZCwgYnV0IHJhdGhlciB0aGUgb2JqZWN0IGJpbmRpbmcgdGFyZ2V0IG9iamVj dC4KKwkJCSAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0VTNl9QUk9YWSkKKwkJCWlmIChEVUtf VU5MSUtFTFkoRFVLX0hPQkpFQ1RfSVNfUFJPWFkodGFyZ2V0KSkpIHsKKwkJCQlkdWtfdHZhbCB0 dl9uYW1lOworCQkJCWR1a190dmFsIHR2X3RhcmdldF90bXA7CisKKwkJCQlEVUtfQVNTRVJUKG5h bWUgIT0gTlVMTCk7CisJCQkJRFVLX1RWQUxfU0VUX1NUUklORygmdHZfbmFtZSwgbmFtZSk7CisJ CQkJRFVLX1RWQUxfU0VUX09CSkVDVCgmdHZfdGFyZ2V0X3RtcCwgdGFyZ2V0KTsKKworCQkJCWZv dW5kID0gZHVrX2hvYmplY3RfaGFzcHJvcCh0aHIsICZ0dl90YXJnZXRfdG1wLCAmdHZfbmFtZSk7 CisJCQl9IGVsc2UKKyNlbmRpZiAgLyogRFVLX1VTRV9FUzZfUFJPWFkgKi8KKwkJCXsKKwkJCQkv KiBYWFg6IGR1a19ob2JqZWN0X2hhc3Byb3AoKSB3b3VsZCBiZSBjb3JyZWN0IGZvcgorCQkJCSAq IG5vbi1Qcm94eSBvYmplY3RzIHRvbywgYnV0IGl0IGlzIGFib3V0IH4yMC0yNSUKKwkJCQkgKiBz bG93ZXIgYXQgcHJlc2VudCBzbyBzZXBhcmF0ZSBjb2RlIHBhdGhzIGZvcgorCQkJCSAqIFByb3h5 IGFuZCBub24tUHJveHkgbm93LgorCQkJCSAqLworCQkJCWZvdW5kID0gZHVrX2hvYmplY3RfaGFz cHJvcF9yYXcodGhyLCB0YXJnZXQsIG5hbWUpOworCQkJfQorCisJCQlpZiAoZm91bmQpIHsKKwkJ CQlvdXQtPnZhbHVlID0gTlVMTDsgIC8qIGNhbid0IGdldCB2YWx1ZSwgbWF5IGJlIGFjY2Vzc29y ICovCisJCQkJb3V0LT5hdHRycyA9IDA7ICAgICAvKiBpcnJlbGV2YW50IHdoZW4gb3V0LT52YWx1 ZSA9PSBOVUxMICovCisJCQkJb3V0LT5lbnYgPSBlbnY7CisJCQkJb3V0LT5ob2xkZXIgPSB0YXJn ZXQ7CisJCQkJb3V0LT5oYXNfdGhpcyA9ICgoZHVrX2hvYmplbnYgKikgZW52KS0+aGFzX3RoaXM7 CisKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiZHVrX19nZXRfaWRlbnRpZmllcl9yZWZlcmVu Y2Ugc3VjY2Vzc2Z1bDogIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJuYW1lPSUhTyAtPiB2 YWx1ZT0lIVQsIGF0dHJzPSVsZCwgaGFzX3RoaXM9JWxkLCBlbnY9JSFPLCBob2xkZXI9JSFPICIK KwkJCQkgICAgICAgICAgICAgICAgICAgICAiKG9iamVjdCBlbnZpcm9ubWVudCByZWNvcmQpIiwK KwkJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbmFtZSwgKGR1a190dmFs ICopIG91dC0+dmFsdWUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG91dC0+YXR0 cnMsIChsb25nKSBvdXQtPmhhc190aGlzLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChkdWtf aGVhcGhkciAqKSBvdXQtPmVudiwgKGR1a19oZWFwaGRyICopIG91dC0+aG9sZGVyKSk7CisJCQkJ cmV0dXJuIDE7CisJCQl9CisJCX0KKworCQlpZiAoIXBhcmVudHMpIHsKKwkJCURVS19EREQoRFVL X0RERFBSSU5UKCJkdWtfX2dldF9pZGVudGlmaWVyX3JlZmVyZW5jZSBmYWlsZWQsIG5vIHBhcmVu dCB0cmF2ZXJzYWwgIgorCQkJICAgICAgICAgICAgICAgICAgICAgIihub3QgZm91bmQgZnJvbSBm aXJzdCB0cmF2ZXJzZWQgZW52KSIpKTsKKwkJCWdvdG8gZmFpbF9ub3RfZm91bmQ7CisJCX0KKwor ICAgICAgICAgICAgICAgIGlmIChEVUtfVU5MSUtFTFkoc2FuaXR5LS0gPT0gMCkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIERVS19FUlJPUl9SQU5HRSh0aHIsIERVS19TVFJfUFJPVE9UWVBF X0NIQUlOX0xJTUlUKTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworICAgICAgICAg ICAgICAgIH0KKwkJZW52ID0gRFVLX0hPQkpFQ1RfR0VUX1BST1RPVFlQRSh0aHItPmhlYXAsIGVu dik7CisJfQorCisJLyoKKwkgKiAgTm90IGZvdW5kIChldmVuIGluIGdsb2JhbCBvYmplY3QpCisJ ICovCisKKyBmYWlsX25vdF9mb3VuZDoKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBIQVNWQVI6 IGNoZWNrIGlkZW50aWZpZXIgYmluZGluZyBmcm9tIGEgZ2l2ZW4gZW52aXJvbm1lbnQgcmVjb3Jk CisgKiAgd2l0aG91dCB0cmF2ZXJzaW5nIGl0cyBwYXJlbnRzLgorICoKKyAqICBUaGlzIHByaW1p dGl2ZSBpcyBub3QgZXhwb3NlZCB0byB1c2VyIGNvZGUgYXMgc3VjaCwgYnV0IGlzIHVzZWQKKyAq ICBpbnRlcm5hbGx5IGZvciBlLmcuIGRlY2xhcmF0aW9uIGJpbmRpbmcgaW5zdGFudGlhdGlvbi4K KyAqCisgKiAgU2VlIEU1IFNlY3Rpb25zOgorICogICAgMTAuMi4xLjEuMSBIYXNCaW5kaW5nKE4p CisgKiAgICAxMC4yLjEuMi4xIEhhc0JpbmRpbmcoTikKKyAqCisgKiAgTm90ZTogc3RyaWN0bmVz cyBoYXMgbm8gYmVhcmluZyBvbiB0aGlzIGNoZWNrLiAgSGVuY2Ugd2UgZG9uJ3QgdGFrZQorICog IGEgJ3N0cmljdCcgcGFyYW1ldGVyLgorICovCisKKyNpZiAwICAvKnVudXNlZCovCitEVUtfSU5U RVJOQUwKK2R1a19ib29sX3QgZHVrX2pzX2hhc3Zhcl9lbnZyZWMoZHVrX2h0aHJlYWQgKnRociwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmplY3QgKmVudiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hzdHJpbmcgKm5hbWUpIHsKKwlkdWtfX2lk X2xvb2t1cF9yZXN1bHQgcmVmOworCWR1a19ib29sX3QgcGFyZW50czsKKworCURVS19EREQoRFVL X0RERFBSSU5UKCJoYXN2YXI6IHRocj0lcCwgZW52PSVwLCBuYW1lPSUhTyAiCisJICAgICAgICAg ICAgICAgICAgICAgIihlbnYgLT4gJSFkTykiLAorCSAgICAgICAgICAgICAgICAgICAgICh2b2lk ICopIHRociwgKHZvaWQgKikgZW52LCAoZHVrX2hlYXBoZHIgKikgbmFtZSwKKwkgICAgICAgICAg ICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgZW52KSk7CisKKwlEVUtfQVNTRVJUKHRociAhPSBO VUxMKTsKKwlEVUtfQVNTRVJUKGVudiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG5hbWUgIT0gTlVM TCk7CisKKyAgICAgICAgRFVLX0FTU0VSVF9SRUZDT1VOVF9OT05aRVJPX0hFQVBIRFIoZW52KTsK KyAgICAgICAgRFVLX0FTU0VSVF9SRUZDT1VOVF9OT05aRVJPX0hFQVBIRFIobmFtZSk7CisKKwlE VUtfQVNTRVJUKERVS19IT0JKRUNUX0lTX0VOVihlbnYpKTsKKwlEVUtfQVNTRVJUKCFEVUtfSE9C SkVDVF9IQVNfQVJSQVlfUEFSVChlbnYpKTsKKworCS8qIGxvb2t1cCByZXN1bHRzIGlzIGlnbm9y ZWQgKi8KKwlwYXJlbnRzID0gMDsKKwlyZXR1cm4gZHVrX19nZXRfaWRlbnRpZmllcl9yZWZlcmVu Y2UodGhyLCBlbnYsIG5hbWUsIE5VTEwsIHBhcmVudHMsICZyZWYpOworfQorI2VuZGlmCisKKy8q CisgKiAgR0VUVkFSCisgKgorICogIFNlZSBFNSBTZWN0aW9uczoKKyAqICAgIDExLjEuMiBJZGVu dGlmaWVyIFJlZmVyZW5jZQorICogICAgMTAuMy4xIElkZW50aWZpZXIgUmVzb2x1dGlvbgorICog ICAgMTEuMTMuMSBTaW1wbGUgQXNzaWdubWVudCAgW2V4YW1wbGUgb2Ygd2hlcmUgdGhlIFJlZmVy ZW5jZSBpcyBHZXRWYWx1ZSdkXQorICogICAgOC43LjEgR2V0VmFsdWUgKFYpCisgKiAgICA4LjEy LjEgW1tHZXRPd25Qcm9wZXJ0eV1dIChQKQorICogICAgOC4xMi4yIFtbR2V0UHJvcGVydHldXSAo UCkKKyAqICAgIDguMTIuMyBbW0dldF1dIChQKQorICoKKyAqICBJZiAndGhyb3cnIGlzIHRydWUs IGFsd2F5cyBsZWF2ZXMgdHdvIHZhbHVlcyBvbiB0b3Agb2Ygc3RhY2s6IFt2YWwgdGhpc10uCisg KgorICogIElmICd0aHJvdycgaXMgZmFsc2UsIHJldHVybnMgMCBpZiBpZGVudGlmaWVyIGNhbm5v dCBiZSByZXNvbHZlZCwgYW5kIHRoZQorICogIHN0YWNrIHdpbGwgYmUgdW5hZmZlY3RlZCBpbiB0 aGlzIGNhc2UuICBJZiBpZGVudGlmaWVyIGlzIHJlc29sdmVkLCByZXR1cm5zCisgKiAgMSBhbmQg bGVhdmVzIFt2YWwgdGhpc10gb24gdG9wIG9mIHN0YWNrLgorICoKKyAqICBOb3RlOiB0aGUgJ3N0 cmljdCcgZmxhZyBvZiBhIHJlZmVyZW5jZSByZXR1cm5lZCBieSBHZXRJZGVudGlmaWVyUmVmZXJl bmNlCisgKiAgaXMgaWdub3JlZCBieSBHZXRWYWx1ZS4gIEhlbmNlIHdlIGRvbid0IHRha2UgYSAn c3RyaWN0JyBwYXJhbWV0ZXIuCisgKgorICogIFRoZSAndGhyb3cnIGZsYWcgaXMgbmVlZGVkIGZv ciBpbXBsZW1lbnRpbmcgJ3R5cGVvZicgZm9yIGFuIHVucmVmZXJlbmNlZAorICogIGlkZW50aWZp ZXIuICBBbiB1bnJlZmVyZW5jZSBpZGVudGlmaWVyIGluIG90aGVyIGNvbnRleHRzIGdlbmVyYXRl cyBhCisgKiAgUmVmZXJlbmNlRXJyb3IuCisgKi8KKworRFVLX0xPQ0FMCitkdWtfYm9vbF90IGR1 a19fZ2V0dmFyX2hlbHBlcihkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX2hvYmplY3QgKmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGR1a19hY3RpdmF0aW9uICphY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtf aHN0cmluZyAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ib29sX3Qg dGhyb3dfZmxhZykgeworCWR1a19faWRfbG9va3VwX3Jlc3VsdCByZWY7CisJZHVrX3R2YWwgdHZf dG1wX29iajsKKwlkdWtfdHZhbCB0dl90bXBfa2V5OworCWR1a19ib29sX3QgcGFyZW50czsKKwor CURVS19EREQoRFVLX0RERFBSSU5UKCJnZXR2YXI6IHRocj0lcCwgZW52PSVwLCBhY3Q9JXAsIG5h bWU9JSFPICIKKwkgICAgICAgICAgICAgICAgICAgICAiKGVudiAtPiAlIWRPKSIsCisJICAgICAg ICAgICAgICAgICAgICAgKHZvaWQgKikgdGhyLCAodm9pZCAqKSBlbnYsICh2b2lkICopIGFjdCwK KwkgICAgICAgICAgICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgbmFtZSwgKGR1a19oZWFwaGRy ICopIGVudikpOworCisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChuYW1l ICE9IE5VTEwpOworCS8qIGVudiBhbmQgYWN0IG1heSBiZSBOVUxMICovCisKKwlEVUtfU1RBVFNf SU5DKHRoci0+aGVhcCwgc3RhdHNfZ2V0dmFyX2FsbCk7CisKKyAgICAgICAgRFVLX0FTU0VSVF9S RUZDT1VOVF9OT05aRVJPX0hFQVBIRFIoZW52KTsKKyAgICAgICAgRFVLX0FTU0VSVF9SRUZDT1VO VF9OT05aRVJPX0hFQVBIRFIobmFtZSk7CisKKwlwYXJlbnRzID0gMTsgICAgIC8qIGZvbGxvdyBw YXJlbnQgY2hhaW4gKi8KKwlpZiAoZHVrX19nZXRfaWRlbnRpZmllcl9yZWZlcmVuY2UodGhyLCBl bnYsIG5hbWUsIGFjdCwgcGFyZW50cywgJnJlZikpIHsKKwkJaWYgKHJlZi52YWx1ZSkgeworCQkJ ZHVrX3B1c2hfdHZhbCh0aHIsIHJlZi52YWx1ZSk7CisJCQlkdWtfcHVzaF91bmRlZmluZWQodGhy KTsKKwkJfSBlbHNlIHsKKwkJCURVS19BU1NFUlQocmVmLmhvbGRlciAhPSBOVUxMKTsKKworCQkJ LyogcmVmLmhvbGRlciBpcyBzYWZlIGFjcm9zcyB0aGUgZ2V0cHJvcCBjYWxsIChldmVuCisJCQkg KiB3aXRoIHNpZGUgZWZmZWN0cykgYmVjYXVzZSAnZW52JyBpcyByZWFjaGFibGUgYW5kCisJCQkg KiByZWYuaG9sZGVyIGlzIGEgZGlyZWN0IGhlYXAgcG9pbnRlci4KKwkJCSAqLworCisJCQlEVUtf VFZBTF9TRVRfT0JKRUNUKCZ0dl90bXBfb2JqLCByZWYuaG9sZGVyKTsKKwkJCURVS19UVkFMX1NF VF9TVFJJTkcoJnR2X3RtcF9rZXksIG5hbWUpOworCQkJKHZvaWQpIGR1a19ob2JqZWN0X2dldHBy b3AodGhyLCAmdHZfdG1wX29iaiwgJnR2X3RtcF9rZXkpOyAgLyogW3ZhbHVlXSAqLworCisJCQlp ZiAocmVmLmhhc190aGlzKSB7CisJCQkJZHVrX3B1c2hfaG9iamVjdCh0aHIsIHJlZi5ob2xkZXIp OworCQkJfSBlbHNlIHsKKwkJCQlkdWtfcHVzaF91bmRlZmluZWQodGhyKTsKKwkJCX0KKworCQkJ LyogW3ZhbHVlIHRoaXNdICovCisJCX0KKworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlpZiAo dGhyb3dfZmxhZykgeworCQkJRFVLX0VSUk9SX0ZNVDEodGhyLCBEVUtfRVJSX1JFRkVSRU5DRV9F UlJPUiwKKwkJCSAgICAgICAgICAgICAgICJpZGVudGlmaWVyICclcycgdW5kZWZpbmVkIiwKKwkJ CSAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIERVS19IU1RSSU5HX0dFVF9EQVRBKG5hbWUp KTsKKwkJCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworCQl9CisKKwkJcmV0dXJuIDA7CisJ fQorfQorCitEVUtfSU5URVJOQUwKK2R1a19ib29sX3QgZHVrX2pzX2dldHZhcl9lbnZyZWMoZHVr X2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hvYmpl Y3QgKmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2hzdHJpbmcgKm5h bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19ib29sX3QgdGhyb3dfZmxh ZykgeworCXJldHVybiBkdWtfX2dldHZhcl9oZWxwZXIodGhyLCBlbnYsIE5VTEwsIG5hbWUsIHRo cm93X2ZsYWcpOworfQorCitEVUtfSU5URVJOQUwKK2R1a19ib29sX3QgZHVrX2pzX2dldHZhcl9h Y3RpdmF0aW9uKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfYWN0aXZhdGlvbiAqYWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX2hzdHJpbmcgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfYm9vbF90IHRocm93X2ZsYWcpIHsKKwlEVUtfQVNTRVJUKGFjdCAhPSBOVUxM KTsKKwlyZXR1cm4gZHVrX19nZXR2YXJfaGVscGVyKHRociwgYWN0LT5sZXhfZW52LCBhY3QsIG5h bWUsIHRocm93X2ZsYWcpOworfQorCisvKgorICogIFBVVFZBUgorICoKKyAqICBTZWUgRTUgU2Vj dGlvbnM6CisgKiAgICAxMS4xLjIgSWRlbnRpZmllciBSZWZlcmVuY2UKKyAqICAgIDEwLjMuMSBJ ZGVudGlmaWVyIFJlc29sdXRpb24KKyAqICAgIDExLjEzLjEgU2ltcGxlIEFzc2lnbm1lbnQgIFtl eGFtcGxlIG9mIHdoZXJlIHRoZSBSZWZlcmVuY2UgaXMgUHV0VmFsdWUnZF0KKyAqICAgIDguNy4y IFB1dFZhbHVlIChWLFcpICBbc2VlIGVzcGVjaWFsbHkgc3RlcCAzLmIsIHVuZGVmaW5lZCAtPiBh dXRvbWF0aWMgZ2xvYmFsIGluIG5vbi1zdHJpY3QgbW9kZV0KKyAqICAgIDguMTIuNCBbW0NhblB1 dF1dIChQKQorICogICAgOC4xMi41IFtbUHV0XV0gKFApCisgKgorICogIE5vdGU6IG1heSBpbnZh bGlkYXRlIGFueSB2YWxzdGFjayAob3Igb2JqZWN0KSBkdWtfdHZhbCBwb2ludGVycyBiZWNhdXNl CisgKiAgcHV0dGluZyBhIHZhbHVlIG1heSByZWFsbG9jYXRlIGFueSBvYmplY3Qgb3IgYW55IHZh bHN0YWNrLiAgQ2FsbGVyIGJld2FyZS4KKyAqLworCitEVUtfTE9DQUwKK3ZvaWQgZHVrX19wdXR2 YXJfaGVscGVyKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkdWtf aG9iamVjdCAqZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2FjdGl2YXRpb24gKmFj dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1a19oc3RyaW5nICpuYW1lLAorICAgICAgICAg ICAgICAgICAgICAgICAgZHVrX3R2YWwgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1 a19ib29sX3Qgc3RyaWN0KSB7CisJZHVrX19pZF9sb29rdXBfcmVzdWx0IHJlZjsKKwlkdWtfdHZh bCB0dl90bXBfb2JqOworCWR1a190dmFsIHR2X3RtcF9rZXk7CisJZHVrX2Jvb2xfdCBwYXJlbnRz OworCisJRFVLX1NUQVRTX0lOQyh0aHItPmhlYXAsIHN0YXRzX3B1dHZhcl9hbGwpOworCisJRFVL X0RERChEVUtfREREUFJJTlQoInB1dHZhcjogdGhyPSVwLCBlbnY9JXAsIGFjdD0lcCwgbmFtZT0l IU8sIHZhbD0lcCwgc3RyaWN0PSVsZCAiCisJICAgICAgICAgICAgICAgICAgICAgIihlbnYgLT4g JSFkTywgdmFsIC0+ICUhVCkiLAorCSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIHRociwg KHZvaWQgKikgZW52LCAodm9pZCAqKSBhY3QsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a19o ZWFwaGRyICopIG5hbWUsICh2b2lkICopIHZhbCwgKGxvbmcpIHN0cmljdCwKKwkgICAgICAgICAg ICAgICAgICAgICAoZHVrX2hlYXBoZHIgKikgZW52LCAoZHVrX3R2YWwgKikgdmFsKSk7CisKKwlE VUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisJRFVL X0FTU0VSVCh2YWwgIT0gTlVMTCk7CisJLyogZW52IGFuZCBhY3QgbWF5IGJlIE5VTEwgKi8KKwor ICAgICAgICBEVUtfQVNTRVJUX1JFRkNPVU5UX05PTlpFUk9fSEVBUEhEUihlbnYpOworICAgICAg ICBEVUtfQVNTRVJUX1JFRkNPVU5UX05PTlpFUk9fSEVBUEhEUihuYW1lKTsKKwlEVUtfQVNTRVJU X1JFRkNPVU5UX05PTlpFUk9fVFZBTCh2YWwpOworCisJLyoKKwkgKiAgSW4gc3RyaWN0IG1vZGUg RTUgcHJvdGVjdHMgJ2V2YWwnIGFuZCAnYXJndW1lbnRzJyBmcm9tIGJlaW5nCisJICogIGFzc2ln bmVkIHRvIChvciBldmVuIGRlY2xhcmVkIGFueXdoZXJlKS4gIEF0dGVtcHQgdG8gZG8gc28KKwkg KiAgc2hvdWxkIHJlc3VsdCBpbiBhIGNvbXBpbGUgdGltZSBTeW50YXhFcnJvci4gIFNlZSB0aGUg aW50ZXJuYWwKKwkgKiAgZGVzaWduIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisJICoKKwkg KiAgVGh1cywgd2Ugc2hvdWxkIG5ldmVyIGNvbWUgaGVyZSwgcnVuLXRpbWUsIGZvciBzdHJpY3Qg Y29kZSwKKwkgKiAgYW5kIG5hbWUgJ2V2YWwnIG9yICdhcmd1bWVudHMnLgorCSAqLworCisJRFVL X0FTU0VSVCghc3RyaWN0IHx8CisJICAgICAgICAgICAobmFtZSAhPSBEVUtfSFRIUkVBRF9TVFJJ TkdfRVZBTCh0aHIpICYmCisJICAgICAgICAgICAgbmFtZSAhPSBEVUtfSFRIUkVBRF9TVFJJTkdf TENfQVJHVU1FTlRTKHRocikpKTsKKworCS8qCisJICogIExvb2t1cCB2YXJpYWJsZSBhbmQgdXBk YXRlIGluLXBsYWNlIGlmIGZvdW5kLgorCSAqLworCisJcGFyZW50cyA9IDE7ICAgICAvKiBmb2xs b3cgcGFyZW50IGNoYWluICovCisKKwlpZiAoZHVrX19nZXRfaWRlbnRpZmllcl9yZWZlcmVuY2Uo dGhyLCBlbnYsIG5hbWUsIGFjdCwgcGFyZW50cywgJnJlZikpIHsKKwkJaWYgKHJlZi52YWx1ZSAm JiAocmVmLmF0dHJzICYgRFVLX1BST1BERVNDX0ZMQUdfV1JJVEFCTEUpKSB7CisJCQkvKiBVcGRh dGUgZHVrX3R2YWwgaW4tcGxhY2UgaWYgcG9pbnRlciBwcm92aWRlZCBhbmQgdGhlCisJCQkgKiBw cm9wZXJ0eSBpcyB3cml0YWJsZS4gIElmIHRoZSBwcm9wZXJ0eSBpcyBub3Qgd3JpdGFibGUKKwkJ CSAqIChpbW11dGFibGUgYmluZGluZyksIHVzZSBkdWtfaG9iamVjdF9wdXRwcm9wKCkgd2hpY2gK KwkJCSAqIHdpbGwgcmVzcGVjdCBtdXRhYmlsaXR5LgorCQkJICovCisJCQlkdWtfdHZhbCAqdHZf dmFsOworCisJCQl0dl92YWwgPSByZWYudmFsdWU7CisJCQlEVUtfQVNTRVJUKHR2X3ZhbCAhPSBO VUxMKTsKKwkJCURVS19UVkFMX1NFVF9UVkFMX1VQRFJFRih0aHIsIHR2X3ZhbCwgdmFsKTsgIC8q IHNpZGUgZWZmZWN0cyAqLworCisJCQkvKiByZWYudmFsdWUgaW52YWxpZGF0ZWQgaGVyZSAqLwor CQl9IGVsc2UgeworCQkJRFVLX0FTU0VSVChyZWYuaG9sZGVyICE9IE5VTEwpOworCisJCQlEVUtf VFZBTF9TRVRfT0JKRUNUKCZ0dl90bXBfb2JqLCByZWYuaG9sZGVyKTsKKwkJCURVS19UVkFMX1NF VF9TVFJJTkcoJnR2X3RtcF9rZXksIG5hbWUpOworCQkJKHZvaWQpIGR1a19ob2JqZWN0X3B1dHBy b3AodGhyLCAmdHZfdG1wX29iaiwgJnR2X3RtcF9rZXksIHZhbCwgc3RyaWN0KTsKKworCQkJLyog cmVmLnZhbHVlIGludmFsaWRhdGVkIGhlcmUgKi8KKwkJfQorCisJCXJldHVybjsKKwl9CisKKwkv KgorCSAqICBOb3QgZm91bmQ6IHdyaXRlIHRvIGdsb2JhbCBvYmplY3QgKG5vbi1zdHJpY3QpIG9y IFJlZmVyZW5jZUVycm9yCisJICogIChzdHJpY3QpOyBzZWUgRTUgU2VjdGlvbiA4LjcuMiwgc3Rl cCAzLgorCSAqLworCisJaWYgKHN0cmljdCkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiaWRl bnRpZmllciBiaW5kaW5nIG5vdCBmb3VuZCwgc3RyaWN0ID0+IHJlZmVyZW5jZSBlcnJvciIpKTsK KwkJRFVLX0VSUk9SX0ZNVDEodGhyLCBEVUtfRVJSX1JFRkVSRU5DRV9FUlJPUiwKKwkJICAgICAg ICAgICAgICAgImlkZW50aWZpZXIgJyVzJyB1bmRlZmluZWQiLAorCQkgICAgICAgICAgICAgICAo Y29uc3QgY2hhciAqKSBEVUtfSFNUUklOR19HRVRfREFUQShuYW1lKSk7CisJCURVS19XT19OT1JF VFVSTihyZXR1cm47KTsKKwl9CisKKwlEVUtfREREKERVS19ERERQUklOVCgiaWRlbnRpZmllciBi aW5kaW5nIG5vdCBmb3VuZCwgbm90IHN0cmljdCA9PiBzZXQgdG8gZ2xvYmFsIikpOworCisJRFVL X1RWQUxfU0VUX09CSkVDVCgmdHZfdG1wX29iaiwgdGhyLT5idWlsdGluc1tEVUtfQklEWF9HTE9C QUxdKTsKKwlEVUtfVFZBTF9TRVRfU1RSSU5HKCZ0dl90bXBfa2V5LCBuYW1lKTsKKwkodm9pZCkg ZHVrX2hvYmplY3RfcHV0cHJvcCh0aHIsICZ0dl90bXBfb2JqLCAmdHZfdG1wX2tleSwgdmFsLCAw KTsgIC8qIDAgPSBubyB0aHJvdyAqLworCisJLyogTkI6ICd2YWwnIG1heSBiZSBpbnZhbGlkYXRl ZCBoZXJlIGJlY2F1c2UgcHV0X3ZhbHVlIG1heSByZWFsbG9jIHZhbHN0YWNrLAorCSAqIGNhbGxl ciBiZXdhcmUuCisJICovCit9CisKK0RVS19JTlRFUk5BTAordm9pZCBkdWtfanNfcHV0dmFyX2Vu dnJlYyhkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9i amVjdCAqZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaHN0cmluZyAqbmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3R2YWwgKnZhbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX2Jvb2xfdCBzdHJpY3QpIHsKKwlkdWtfX3B1dHZhcl9oZWxwZXIodGhy LCBlbnYsIE5VTEwsIG5hbWUsIHZhbCwgc3RyaWN0KTsKK30KKworRFVLX0lOVEVSTkFMCit2b2lk IGR1a19qc19wdXR2YXJfYWN0aXZhdGlvbihkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX2FjdGl2YXRpb24gKmFjdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19oc3RyaW5nICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHVrX3R2YWwgKnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19i b29sX3Qgc3RyaWN0KSB7CisJRFVLX0FTU0VSVChhY3QgIT0gTlVMTCk7CisJZHVrX19wdXR2YXJf aGVscGVyKHRociwgYWN0LT5sZXhfZW52LCBhY3QsIG5hbWUsIHZhbCwgc3RyaWN0KTsKK30KKwor LyoKKyAqICBERUxWQVIKKyAqCisgKiAgU2VlIEU1IFNlY3Rpb25zOgorICogICAgMTEuNC4xIFRo ZSBkZWxldGUgb3BlcmF0b3IKKyAqICAgIDEwLjIuMS4xLjUgRGVsZXRlQmluZGluZyAoTikgIFtk ZWNsYXJhdGl2ZSBlbnZpcm9ubWVudCByZWNvcmRdCisgKiAgICAxMC4yLjEuMi41IERlbGV0ZUJp bmRpbmcgKE4pICBbb2JqZWN0IGVudmlyb25tZW50IHJlY29yZF0KKyAqCisgKiAgVmFyaWFibGUg YmluZGluZ3MgZXN0YWJsaXNoZWQgaW5zaWRlIGV2YWwoKSBhcmUgZGVsZXRhYmxlIChjb25maWd1 cmFibGUpLAorICogIG90aGVyIGJpbmRpbmdzIGFyZSBub3QsIGluY2x1ZGluZyB2YXJpYWJsZXMg ZGVjbGFyZWQgaW4gZ2xvYmFsIGxldmVsLgorICogIFJlZ2lzdGVycyBhcmUgYWx3YXlzIG5vbi1k ZWxldGFibGUsIGFuZCB0aGUgZGVsZXRpb24gb2Ygb3RoZXIgYmluZGluZ3MKKyAqICBpcyBjb250 cm9sbGVkIGJ5IHRoZSBjb25maWd1cmFibGUgZmxhZy4KKyAqCisgKiAgRm9yIHN0cmljdCBtb2Rl IGNvZGUsIHRoZSAnZGVsZXRlJyBvcGVyYXRvciBzaG91bGQgZmFpbCB3aXRoIGEgY29tcGlsZQor ICogIHRpbWUgU3ludGF4RXJyb3IgaWYgYXBwbGllZCB0byBpZGVudGlmaWVycy4gIEhlbmNlLCBu byBzdHJpY3QgbW9kZQorICogIHJ1bi10aW1lIGRlbGV0aW9uIG9mIGlkZW50aWZpZXJzIHNob3Vs ZCBldmVyIGhhcHBlbi4gIFRoaXMgZnVuY3Rpb24KKyAqICBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk IGZyb20gc3RyaWN0IG1vZGUgY29kZSEKKyAqLworCitEVUtfTE9DQUwKK2R1a19ib29sX3QgZHVr X19kZWx2YXJfaGVscGVyKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfaG9iamVjdCAqZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX2FjdGl2YXRpb24gKmFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19o c3RyaW5nICpuYW1lKSB7CisJZHVrX19pZF9sb29rdXBfcmVzdWx0IHJlZjsKKwlkdWtfYm9vbF90 IHBhcmVudHM7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZGVsdmFyOiB0aHI9JXAsIGVudj0l cCwgYWN0PSVwLCBuYW1lPSUhTyAiCisJICAgICAgICAgICAgICAgICAgICAgIihlbnYgLT4gJSFk TykiLAorCSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIHRociwgKHZvaWQgKikgZW52LCAo dm9pZCAqKSBhY3QsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a19oZWFwaGRyICopIG5hbWUs IChkdWtfaGVhcGhkciAqKSBlbnYpKTsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURV S19BU1NFUlQobmFtZSAhPSBOVUxMKTsKKwkvKiBlbnYgYW5kIGFjdCBtYXkgYmUgTlVMTCAqLwor CisgICAgICAgIERVS19BU1NFUlRfUkVGQ09VTlRfTk9OWkVST19IRUFQSERSKG5hbWUpOworCisJ cGFyZW50cyA9IDE7ICAgICAvKiBmb2xsb3cgcGFyZW50IGNoYWluICovCisKKwlpZiAoZHVrX19n ZXRfaWRlbnRpZmllcl9yZWZlcmVuY2UodGhyLCBlbnYsIG5hbWUsIGFjdCwgcGFyZW50cywgJnJl ZikpIHsKKwkJaWYgKHJlZi52YWx1ZSAmJiAhKHJlZi5hdHRycyAmIERVS19QUk9QREVTQ19GTEFH X0NPTkZJR1VSQUJMRSkpIHsKKwkJCS8qIElkZW50aWZpZXIgZm91bmQgaW4gcmVnaXN0ZXJzIChh bHdheXMgbm9uLWRlbGV0YWJsZSkKKwkJCSAqIG9yIGRlY2xhcmF0aXZlIGVudmlyb25tZW50IHJl Y29yZCBhbmQgbm9uLWNvbmZpZ3VyYWJsZS4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCX0KKwkJ RFVLX0FTU0VSVChyZWYuaG9sZGVyICE9IE5VTEwpOworCisJCXJldHVybiBkdWtfaG9iamVjdF9k ZWxwcm9wX3Jhdyh0aHIsIHJlZi5ob2xkZXIsIG5hbWUsIDApOworCX0KKworCS8qCisJICogIE5v dCBmb3VuZCAoZXZlbiBpbiBnbG9iYWwgb2JqZWN0KS4KKwkgKgorCSAqICBJbiBub24tc3RyaWN0 IG1vZGUgdGhpcyBpcyBhIHNpbGVudCBTVUNDRVNTICghKSwgc2VlIEU1IFNlY3Rpb24gMTEuNC4x LAorCSAqICBzdGVwIDMuYi4gIEluIHN0cmljdCBtb2RlIHRoaXMgY2FzZSBpcyBhIGNvbXBpbGUg dGltZSBTeW50YXhFcnJvciBzbworCSAqICB3ZSBzaG91bGQgbm90IGNvbWUgaGVyZS4KKwkgKi8K KworCURVS19EREQoRFVLX0RERFBSSU5UKCJpZGVudGlmaWVyIHRvIGJlIGRlbGV0ZWQgbm90IGZv dW5kOiBuYW1lPSUhTyAiCisJICAgICAgICAgICAgICAgICAgICAgIih0cmVhdGVkIGFzIHNpbGVu dCBzdWNjZXNzKSIsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a19oZWFwaGRyICopIG5hbWUp KTsKKwlyZXR1cm4gMTsKK30KKworI2lmIDAgIC8qdW51c2VkKi8KK0RVS19JTlRFUk5BTAorZHVr X2Jvb2xfdCBkdWtfanNfZGVsdmFyX2VudnJlYyhkdWtfaHRocmVhZCAqdGhyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqZW52LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfaHN0cmluZyAqbmFtZSkgeworCXJldHVybiBkdWtfX2RlbHZh cl9oZWxwZXIodGhyLCBlbnYsIE5VTEwsIG5hbWUpOworfQorI2VuZGlmCisKK0RVS19JTlRFUk5B TAorZHVrX2Jvb2xfdCBkdWtfanNfZGVsdmFyX2FjdGl2YXRpb24oZHVrX2h0aHJlYWQgKnRociwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19hY3RpdmF0aW9uICphY3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaHN0cmluZyAqbmFtZSkg eworCURVS19BU1NFUlQoYWN0ICE9IE5VTEwpOworCXJldHVybiBkdWtfX2RlbHZhcl9oZWxwZXIo dGhyLCBhY3QtPmxleF9lbnYsIGFjdCwgbmFtZSk7Cit9CisKKy8qCisgKiAgREVDTFZBUgorICoK KyAqICBTZWUgRTUgU2VjdGlvbnM6CisgKiAgICAxMC40LjMgRW50ZXJpbmcgRnVuY3Rpb24gQ29k ZQorICogICAgMTAuNSBEZWNsYXJhdGlvbiBCaW5kaW5nIEluc3RhbnRpb24KKyAqICAgIDEyLjIg VmFyaWFibGUgU3RhdGVtZW50CisgKiAgICAxMS4xLjIgSWRlbnRpZmllciBSZWZlcmVuY2UKKyAq ICAgIDEwLjMuMSBJZGVudGlmaWVyIFJlc29sdXRpb24KKyAqCisgKiAgVmFyaWFibGUgZGVjbGFy YXRpb24gYmVoYXZpb3IgaXMgbWFpbmx5IGRpc2N1c3NlZCBpbiBTZWN0aW9uIDEwLjUsCisgKiAg YW5kIGlzIG5vdCBkaXNjdXNzZWQgaW4gdGhlIGV4ZWN1dGlvbiBzZW1hbnRpY3MgKFNlY3Rpb25z IDExLTEzKS4KKyAqCisgKiAgQ29uY2VwdHVhbGx5IGRlY2xhcmF0aW9ucyBoYXBwZW4gd2hlbiBj b2RlIChnbG9iYWwsIGV2YWwsIGZ1bmN0aW9uKQorICogIGlzIGVudGVyZWQsIGJlZm9yZSBhbnkg dXNlciBjb2RlIGlzIGV4ZWN1dGVkLiAgSW4gcHJhY3RpY2UsIHJlZ2lzdGVyLQorICogIGJvdW5k IGlkZW50aWZpZXJzIGFyZSAnZGVjbGFyZWQnIGF1dG9tYXRpY2FsbHkgKGJ5IHZpcnR1ZSBvZiBi ZWluZworICogIGFsbG9jYXRlZCB0byByZWdpc3RlcnMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZSAn dW5kZWZpbmVkJykuICBPdGhlcgorICogIGlkZW50aWZpZXJzIGFyZSBkZWNsYXJlZCBpbiB0aGUg ZnVuY3Rpb24gcHJvbG9ndWUgd2l0aCB0aGlzIHByaW1pdGl2ZS4KKyAqCisgKiAgU2luY2Ugbm9u LXJlZ2lzdGVyIGJpbmRpbmdzIGV2ZW50dWFsbHkgYmFjayB0byBhbiBpbnRlcm5hbCBvYmplY3Qn cworICogIHByb3BlcnRpZXMsIHRoZSAncHJvcF9mbGFncycgYXJndW1lbnQgaXMgdXNlZCB0byBz cGVjaWZ5IGJpbmRpbmcKKyAqICB0eXBlOgorICoKKyAqICAgIC0gSW1tdXRhYmxlIGJpbmRpbmc6 IHNldCBEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSB0byBmYWxzZQorICogICAgLSBOb24tZGVs ZXRhYmxlIGJpbmRpbmc6IHNldCBEVUtfUFJPUERFU0NfRkxBR19DT05GSUdVUkFCTEUgdG8gZmFs c2UKKyAqICAgIC0gVGhlIGZsYWcgRFVLX1BST1BERVNDX0ZMQUdfRU5VTUVSQUJMRSBzaG91bGQg YmUgc2V0LCBhbHRob3VnaCBpdAorICogICAgICBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgZm9yIGlu dGVybmFsIG9iamVjdHMKKyAqCisgKiAgQWxsIGJpbmRpbmdzIGFyZSBub24tZGVsZXRhYmxlIG11 dGFibGUgYmluZGluZ3MgZXhjZXB0OgorICoKKyAqICAgIC0gRGVjbGFyYXRpb25zIGluIGV2YWwg Y29kZSAobXV0YWJsZSwgZGVsZXRhYmxlKQorICogICAgLSAnYXJndW1lbnRzJyBiaW5kaW5nIGlu IHN0cmljdCBmdW5jdGlvbiBjb2RlIChpbW11dGFibGUpCisgKiAgICAtIEZ1bmN0aW9uIG5hbWUg YmluZGluZyBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gKGltbXV0YWJsZSkKKyAqCisgKiAgRGVj bGFyYXRpb25zIG1heSBnbyB0byBkZWNsYXJhdGl2ZSBlbnZpcm9ubWVudCByZWNvcmRzIChhbHdh eXMKKyAqICBzbyBmb3IgZnVuY3Rpb25zKSwgYnV0IG1heSBhbHNvIGdvIHRvIG9iamVjdCBlbnZp cm9ubWVudCByZWNvcmRzCisgKiAgKGUuZy4gZ2xvYmFsIGNvZGUpLiAgVGhlIGdsb2JhbCBvYmpl Y3QgZW52aXJvbm1lbnQgaGFzIHNwZWNpYWwKKyAqICBiZWhhdmlvciB3aGVuIHJlLWRlY2xhcmlu ZyBhIGZ1bmN0aW9uIChidXQgbm90IGEgdmFyaWFibGUpOyBzZWUKKyAqICBFNS4xIHNwZWNpZmlj YXRpb24sIFNlY3Rpb24gMTAuNSwgc3RlcCA1LmUuCisgKgorICogIERlY2xhcmF0aW9ucyBhbHdh eXMgZ28gdG8gdGhlICd0b3AtbW9zdCcgZW52aXJvbm1lbnQgcmVjb3JkLCBpLmUuCisgKiAgd2Ug bmV2ZXIgY2hlY2sgdGhlIHJlY29yZCBjaGFpbi4gIEl0J3Mgbm90IGFuIGVycm9yIGV2ZW4gaWYg YQorICogIHByb3BlcnR5IChldmVuIGFuIGltbXV0YWJsZSBvciBub24tZGVsZXRhYmxlIG9uZSkg b2YgdGhlIHNhbWUgbmFtZQorICogIGFscmVhZHkgZXhpc3RzLgorICoKKyAqICBJZiBhIGRlY2xh cmVkIHZhcmlhYmxlIGFscmVhZHkgZXhpc3RzLCBpdHMgdmFsdWUgbmVlZHMgdG8gYmUgdXBkYXRl ZAorICogIChpZiBwb3NzaWJsZSkuICBSZXR1cm5zIDEgaWYgYSBQVVRWQVIgbmVlZHMgdG8gYmUg ZG9uZSBieSB0aGUgY2FsbGVyOworICogIG90aGVyd2lzZSByZXR1cm5zIDAuCisgKi8KKworRFVL X0xPQ0FMCitkdWtfYm9vbF90IGR1a19fZGVjbHZhcl9oZWxwZXIoZHVrX2h0aHJlYWQgKnRociwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfaG9iamVjdCAqZW52LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19oc3RyaW5nICpuYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1a190dmFsICp2YWwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHVrX3NtYWxsX3VpbnRfdCBwcm9wX2ZsYWdzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19ib29sX3QgaXNfZnVuY19kZWNsKSB7CisJZHVrX2hvYmplY3QgKmhv bGRlcjsKKwlkdWtfYm9vbF90IHBhcmVudHM7CisJZHVrX19pZF9sb29rdXBfcmVzdWx0IHJlZjsK KwlkdWtfdHZhbCAqdHY7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiZGVjbHZhcjogdGhyPSVw LCBlbnY9JXAsIG5hbWU9JSFPLCB2YWw9JSFULCBwcm9wX2ZsYWdzPTB4JTA4bHgsIGlzX2Z1bmNf ZGVjbD0lbGQgIgorCSAgICAgICAgICAgICAgICAgICAgICIoZW52IC0+ICUhaU8pIiwKKwkgICAg ICAgICAgICAgICAgICAgICAodm9pZCAqKSB0aHIsICh2b2lkICopIGVudiwgKGR1a19oZWFwaGRy ICopIG5hbWUsCisJICAgICAgICAgICAgICAgICAgICAgKGR1a190dmFsICopIHZhbCwgKHVuc2ln bmVkIGxvbmcpIHByb3BfZmxhZ3MsCisJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGlu dCkgaXNfZnVuY19kZWNsLCAoZHVrX2hlYXBoZHIgKikgZW52KSk7CisKKwlEVUtfQVNTRVJUKHRo ciAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGVudiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG5hbWUg IT0gTlVMTCk7CisJRFVLX0FTU0VSVCh2YWwgIT0gTlVMTCk7CisKKwkvKiBOb3RlOiBpbiBzdHJp Y3QgbW9kZSB0aGUgY29tcGlsZXIgc2hvdWxkIHJlamVjdCBleHBsaWNpdAorCSAqIGRlY2xhcmF0 aW9uIG9mICdldmFsJyBvciAnYXJndW1lbnRzJy4gIEhvd2V2ZXIsIGludGVybmFsCisJICogYnl0 ZWNvZGUgbWF5IGRlY2xhcmUgJ2FyZ3VtZW50cycgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLgor CSAqIFdlIGRvbid0IGJvdGhlciBjaGVja2luZyAob3IgYXNzZXJ0aW5nKSBmb3IgdGhlc2Ugbm93 LgorCSAqLworCisJLyogTm90ZTogdmFsIGlzIGEgc3RhYmxlIGR1a190dmFsIHBvaW50ZXIuICBU aGUgY2FsbGVyIG1ha2VzCisJICogYSB2YWx1ZSBjb3B5IGludG8gaXRzIHN0YWNrIGZyYW1lLCBz byAndHZfdmFsJyBpcyBub3Qgc3ViamVjdAorCSAqIHRvIHNpZGUgZWZmZWN0cyBoZXJlLgorCSAq LworCisJLyoKKwkgKiAgQ2hlY2sgd2hldGhlciBhbHJlYWR5IGRlY2xhcmVkLgorCSAqCisJICog IFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgYmluZGluZyBleGlzdHMgaW4gdGhlIGVudmly b25tZW50CisJICogIHdpdGhvdXQgd2Fsa2luZyBpdHMgcGFyZW50cy4gIEhvd2V2ZXIsIHdlIHN0 aWxsIG5lZWQgdG8gY2hlY2sKKwkgKiAgcmVnaXN0ZXItYm91bmQgaWRlbnRpZmllcnMgYW5kIHRo ZSBwcm90b3R5cGUgY2hhaW4gb2YgYW4gb2JqZWN0CisJICogIGVudmlyb25tZW50IHRhcmdldCBv YmplY3QuCisJICovCisKKwlwYXJlbnRzID0gMDsgIC8qIGp1c3QgY2hlY2sgJ2VudicgKi8KKwlp ZiAoZHVrX19nZXRfaWRlbnRpZmllcl9yZWZlcmVuY2UodGhyLCBlbnYsIG5hbWUsIE5VTEwsIHBh cmVudHMsICZyZWYpKSB7CisJCWR1a19pbnRfdCBlX2lkeDsKKwkJZHVrX2ludF90IGhfaWR4Owor CQlkdWtfc21hbGxfdWludF90IGZsYWdzOworCisJCS8qCisJCSAqICBWYXJpYWJsZSBhbHJlYWR5 IGRlY2xhcmVkLCBpZ25vcmUgcmUtZGVjbGFyYXRpb24uCisJCSAqICBUaGUgb25seSBleGNlcHRp b24gaXMgdGhlIHVwZGF0ZWQgYmVoYXZpb3Igb2YgRTUuMSBmb3IKKwkJICogIGdsb2JhbCBmdW5j dGlvbiBkZWNsYXJhdGlvbnMsIEU1LjEgU2VjdGlvbiAxMC41LCBzdGVwIDUuZS4KKwkJICogIFRo aXMgYmVoYXZpb3IgZG9lcyBub3QgYXBwbHkgdG8gZ2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9u cy4KKwkJICovCisKKwkJaWYgKCEoaXNfZnVuY19kZWNsICYmIGVudiA9PSB0aHItPmJ1aWx0aW5z W0RVS19CSURYX0dMT0JBTF9FTlZdKSkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoInJlLWRl Y2xhcmUgYSBiaW5kaW5nLCBpZ25vcmluZyIpKTsKKwkJCXJldHVybiAxOyAgLyogMSAtPiBuZWVk cyBhIFBVVFZBUiAqLworCQl9CisKKwkJLyoKKwkJICogIFNwZWNpYWwgYmVoYXZpb3IgaW4gRTUu MS4KKwkJICoKKwkJICogIE5vdGUgdGhhdCBldmVuIHRob3VnaCBwYXJlbnRzID09IDAsIHRoZSBj b25mbGljdGluZyBwcm9wZXJ0eQorCQkgKiAgbWF5IGJlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSAo Y3VycmVudGx5IG91ciBnbG9iYWwgb2JqZWN0J3MKKwkJICogIHByb3RvdHlwZSBpcyBPYmplY3Qu cHJvdG90eXBlKS4gIFN0ZXAgNS5lIGZpcnN0IG9wZXJhdGVzIG9uCisJCSAqICB0aGUgZXhpc3Rp bmcgcHJvcGVydHkgKHdoaWNoIGlzIHBvdGVudGlhbGx5IGluIGFuIGFuY2VzdG9yKQorCQkgKiAg YW5kIHRoZW4gZGVmaW5lcyBhIG5ldyBwcm9wZXJ0eSBpbiB0aGUgZ2xvYmFsIG9iamVjdCAoYW5k CisJCSAqICBuZXZlciBtb2RpZmllcyB0aGUgYW5jZXN0b3IpLgorCQkgKgorCQkgKiAgQWxzbyBu b3RlIHRoYXQgdGhpcyBsb2dpYyB3b3VsZCBiZWNvbWUgZXZlbiBtb3JlIGNvbXBsaWNhdGVkCisJ CSAqICBpZiB0aGUgY29uZmxpY3RpbmcgcHJvcGVydHkgbWlnaHQgYmUgYSB2aXJ0dWFsIG9uZS4g IE9iamVjdAorCQkgKiAgcHJvdG90eXBlIGhhcyBubyB2aXJ0dWFsIHByb3BlcnRpZXMsIHRob3Vn aC4KKwkJICoKKwkJICogIFhYWDogdGhpcyBpcyBub3cgdmVyeSBhd2t3YXJkLCByZXdvcmsuCisJ CSAqLworCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJyZS1kZWNsYXJlIGEgZnVuY3Rpb24gYmlu ZGluZyBpbiBnbG9iYWwgb2JqZWN0LCAiCisJCSAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGVk IEU1LjEgcHJvY2Vzc2luZyIpKTsKKworCQlEVUtfQVNTRVJUKHJlZi5ob2xkZXIgIT0gTlVMTCk7 CisJCWhvbGRlciA9IHJlZi5ob2xkZXI7CisKKwkJLyogaG9sZGVyIHdpbGwgYmUgc2V0IHRvIHRo ZSB0YXJnZXQgb2JqZWN0LCBub3QgdGhlIGFjdHVhbCBvYmplY3QKKwkJICogd2hlcmUgdGhlIHBy b3BlcnR5IHdhcyBmb3VuZCAoc2VlIGR1a19fZ2V0X2lkZW50aWZpZXJfcmVmZXJlbmNlKCkpLgor CQkgKi8KKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9HRVRfQ0xBU1NfTlVNQkVSKGhvbGRlcikg PT0gRFVLX0hPQkpFQ1RfQ0xBU1NfR0xPQkFMKTsKKwkJRFVLX0FTU0VSVCghRFVLX0hPQkpFQ1Rf SEFTX0VYT1RJQ19BUlJBWShob2xkZXIpKTsgIC8qIGdsb2JhbCBvYmplY3QgZG9lc24ndCBoYXZl IGFycmF5IHBhcnQgKi8KKworCQkvKiBYWFg6IHVzZSBhIGhlbHBlciBmb3IgcHJvdG90eXBlIHRy YXZlcnNhbDsgbm8gbG9vcCBjaGVjayBoZXJlICovCisJCS8qIG11c3QgYmUgZm91bmQ6IHdhcyBm b3VuZCBlYXJsaWVyLCBhbmQgY2Fubm90IGJlIGluaGVyaXRlZCAqLworCQlmb3IgKDs7KSB7CisJ CQlEVUtfQVNTRVJUKGhvbGRlciAhPSBOVUxMKTsKKwkJCWlmIChkdWtfaG9iamVjdF9maW5kX2V4 aXN0aW5nX2VudHJ5KHRoci0+aGVhcCwgaG9sZGVyLCBuYW1lLCAmZV9pZHgsICZoX2lkeCkpIHsK KwkJCQlEVUtfQVNTRVJUKGVfaWR4ID49IDApOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogU0NB TkJVSUxEOiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGRvZXNuJ3QgYWN0dWFsbHkgdHJpZ2dl ciwKKwkJCSAqIGFzc2VydGVkIGFib3ZlLgorCQkJICovCisJCQlob2xkZXIgPSBEVUtfSE9CSkVD VF9HRVRfUFJPVE9UWVBFKHRoci0+aGVhcCwgaG9sZGVyKTsKKwkJfQorCQlEVUtfQVNTRVJUKGhv bGRlciAhPSBOVUxMKTsKKwkJRFVLX0FTU0VSVChlX2lkeCA+PSAwKTsKKwkJLyogU0NBTkJVSUxE OiBzY2FuLWJ1aWxkIHByb2R1Y2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdhcm5pbmcK KwkJICogYmVsb3c7IGl0IG5ldmVyIGFjdHVhbGx5IHRyaWdnZXJzIGJlY2F1c2UgaG9sZGVyIGlz IGFjdHVhbGx5IG5ldmVyCisJCSAqIE5VTEwuCisJCSAqLworCisJCS8qIHJlZi5ob2xkZXIgaXMg Z2xvYmFsIG9iamVjdCwgaG9sZGVyIGlzIHRoZSBvYmplY3Qgd2l0aCB0aGUKKwkJICogY29uZmxp Y3RpbmcgcHJvcGVydHkuCisJCSAqLworCisJCWZsYWdzID0gRFVLX0hPQkpFQ1RfRV9HRVRfRkxB R1ModGhyLT5oZWFwLCBob2xkZXIsIGVfaWR4KTsKKwkJaWYgKCEoZmxhZ3MgJiBEVUtfUFJPUERF U0NfRkxBR19DT05GSUdVUkFCTEUpKSB7CisJCQlpZiAoZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxB R19BQ0NFU1NPUikgeworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJleGlzdGluZyBwcm9wZXJ0 eSBpcyBhIG5vbi1jb25maWd1cmFibGUgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJhY2Nl c3NvciAtPiByZWplY3QiKSk7CisJCQkJZ290byBmYWlsX2V4aXN0aW5nX2F0dHJpYnV0ZXM7CisJ CQl9CisJCQlpZiAoISgoZmxhZ3MgJiBEVUtfUFJPUERFU0NfRkxBR19XUklUQUJMRSkgJiYKKwkJ CSAgICAgIChmbGFncyAmIERVS19QUk9QREVTQ19GTEFHX0VOVU1FUkFCTEUpKSkgeworCQkJCURV S19EREQoRFVLX0RERFBSSU5UKCJleGlzdGluZyBwcm9wZXJ0eSBpcyBhIG5vbi1jb25maWd1cmFi bGUgIgorCQkJCSAgICAgICAgICAgICAgICAgICAgICJwbGFpbiBwcm9wZXJ0eSB3aGljaCBpcyBu b3Qgd3JpdGFibGUgYW5kICIKKwkJCQkgICAgICAgICAgICAgICAgICAgICAiZW51bWVyYWJsZSAt PiByZWplY3QiKSk7CisJCQkJZ290byBmYWlsX2V4aXN0aW5nX2F0dHJpYnV0ZXM7CisJCQl9CisK KwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJleGlzdGluZyBwcm9wZXJ0eSBpcyBub3QgY29uZmln dXJhYmxlIGJ1dCAiCisJCQkgICAgICAgICAgICAgICAgICAgICAiaXMgcGxhaW4sIGVudW1lcmFi bGUsIGFuZCB3cml0YWJsZSAtPiAiCisJCQkgICAgICAgICAgICAgICAgICAgICAiYWxsb3cgcmVk ZWNsYXJhdGlvbiIpKTsKKwkJfQorCisJCWlmIChob2xkZXIgPT0gcmVmLmhvbGRlcikgeworCQkJ LyogWFhYOiBpZiBkdWtfaG9iamVjdF9kZWZpbmVfcHJvcGVydHlfaW50ZXJuYWwoKSB3YXMgdXBk YXRlZAorCQkJICogdG8gaGFuZGxlIGEgcHJlLWV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5LCB0 aGlzIHdvdWxkIGJlCisJCQkgKiBhIHNpbXBsZSBjYWxsIChsaWtlIGZvciB0aGUgYW5jZXN0b3Ig Y2FzZSkuCisJCQkgKi8KKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJyZWRlZmluZSwgb2ZmZW5k aW5nIHByb3BlcnR5IGluIGdsb2JhbCBvYmplY3QgaXRzZWxmIikpOworCisJCQlpZiAoZmxhZ3Mg JiBEVUtfUFJPUERFU0NfRkxBR19BQ0NFU1NPUikgeworCQkJCWR1a19ob2JqZWN0ICp0bXA7CisK KwkJCQl0bXAgPSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9HRVRURVIodGhyLT5oZWFwLCBob2xk ZXIsIGVfaWR4KTsKKwkJCQlEVUtfSE9CSkVDVF9FX1NFVF9WQUxVRV9HRVRURVIodGhyLT5oZWFw LCBob2xkZXIsIGVfaWR4LCBOVUxMKTsKKwkJCQlEVUtfSE9CSkVDVF9ERUNSRUZfQUxMT1dOVUxM KHRociwgdG1wKTsKKwkJCQlEVUtfVU5SRUYodG1wKTsKKwkJCQl0bXAgPSBEVUtfSE9CSkVDVF9F X0dFVF9WQUxVRV9TRVRURVIodGhyLT5oZWFwLCBob2xkZXIsIGVfaWR4KTsKKwkJCQlEVUtfSE9C SkVDVF9FX1NFVF9WQUxVRV9TRVRURVIodGhyLT5oZWFwLCBob2xkZXIsIGVfaWR4LCBOVUxMKTsK KwkJCQlEVUtfSE9CSkVDVF9ERUNSRUZfQUxMT1dOVUxMKHRociwgdG1wKTsKKwkJCQlEVUtfVU5S RUYodG1wKTsKKwkJCX0gZWxzZSB7CisJCQkJdHYgPSBEVUtfSE9CSkVDVF9FX0dFVF9WQUxVRV9U VkFMX1BUUih0aHItPmhlYXAsIGhvbGRlciwgZV9pZHgpOworCQkJCURVS19UVkFMX1NFVF9VTkRF RklORURfVVBEUkVGKHRociwgdHYpOworCQkJfQorCisJCQkvKiBIZXJlIHZhbCB3b3VsZCBiZSBw b3RlbnRpYWxseSBpbnZhbGlkIGlmIHdlIGRpZG4ndCBtYWtlCisJCQkgKiBhIHZhbHVlIGNvcHkg YXQgdGhlIGNhbGxlci4KKwkJCSAqLworCisJCQl0diA9IERVS19IT0JKRUNUX0VfR0VUX1ZBTFVF X1RWQUxfUFRSKHRoci0+aGVhcCwgaG9sZGVyLCBlX2lkeCk7CisJCQlEVUtfVFZBTF9TRVRfVFZB TCh0diwgdmFsKTsKKwkJCURVS19UVkFMX0lOQ1JFRih0aHIsIHR2KTsKKwkJCURVS19IT0JKRUNU X0VfU0VUX0ZMQUdTKHRoci0+aGVhcCwgaG9sZGVyLCBlX2lkeCwgcHJvcF9mbGFncyk7CisKKwkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJ1cGRhdGVkIGdsb2JhbCBiaW5kaW5nLCBmaW5hbCByZXN1 bHQ6ICIKKwkJCSAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSAtPiAlIVQsIHByb3BfZmxhZ3M9 MHglMDhseCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgRFVLX0hPQkpF Q1RfRV9HRVRfVkFMVUVfVFZBTF9QVFIodGhyLT5oZWFwLCBob2xkZXIsIGVfaWR4KSwKKwkJCSAg ICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBwcm9wX2ZsYWdzKSk7CisJCX0gZWxz ZSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgicmVkZWZpbmUsIG9mZmVuZGluZyBwcm9wZXJ0 eSBpbiBhbmNlc3RvciIpKTsKKworCQkJRFVLX0FTU0VSVChyZWYuaG9sZGVyID09IHRoci0+YnVp bHRpbnNbRFVLX0JJRFhfR0xPQkFMXSk7CisJCQlkdWtfcHVzaF90dmFsKHRociwgdmFsKTsKKwkJ CWR1a19ob2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9pbnRlcm5hbCh0aHIsIHJlZi5ob2xkZXIsIG5h bWUsIHByb3BfZmxhZ3MpOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiAgTm90 IGZvdW5kIChpbiByZWdpc3RlcnMgb3IgcmVjb3JkIG9iamVjdHMpLiAgRGVjbGFyZQorCSAqICB0 byBjdXJyZW50IHZhcmlhYmxlIGVudmlyb25tZW50LgorCSAqLworCisJLyoKKwkgKiAgR2V0IGhv bGRlciBvYmplY3QKKwkgKi8KKworCWlmIChEVUtfSE9CSkVDVF9JU19ERUNFTlYoZW52KSkgewor CQlEVUtfQVNTRVJUX0hERUNFTlZfVkFMSUQoKGR1a19oZGVjZW52ICopIGVudik7CisJCWhvbGRl ciA9IGVudjsKKwl9IGVsc2UgeworCQlEVUtfQVNTRVJUX0hPQkpFTlZfVkFMSUQoKGR1a19ob2Jq ZW52ICopIGVudik7CisJCWhvbGRlciA9ICgoZHVrX2hvYmplbnYgKikgZW52KS0+dGFyZ2V0Owor CQlEVUtfQVNTRVJUKGhvbGRlciAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAqICBEZWZpbmUgbmV3 IHByb3BlcnR5CisJICoKKwkgKiAgTm90ZTogdGhpcyBtYXkgZmFpbCBpZiB0aGUgaG9sZGVyIGlz IG5vdCBleHRlbnNpYmxlLgorCSAqLworCisJLyogWFhYOiB0aGlzIGlzIGF3a3dhcmQgYXMgd2Ug dXNlIGFuIGludGVybmFsIG1ldGhvZCB3aGljaCBkb2Vzbid0IGhhbmRsZQorCSAqIGV4dGVuc2li aWxpdHkgZXRjIGNvcnJlY3RseS4gIEJhc2ljYWxseSB3ZSdkIHdhbnQgdG8gZG8gYSBbW0RlZmlu ZU93blByb3BlcnR5XV0KKwkgKiBvciBPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBoZXJlLgorCSAq LworCisJaWYgKCFEVUtfSE9CSkVDVF9IQVNfRVhURU5TSUJMRShob2xkZXIpKSB7CisJCWdvdG8g ZmFpbF9ub3RfZXh0ZW5zaWJsZTsKKwl9CisKKwlkdWtfcHVzaF9ob2JqZWN0KHRociwgaG9sZGVy KTsKKwlkdWtfcHVzaF9oc3RyaW5nKHRociwgbmFtZSk7CisJZHVrX3B1c2hfdHZhbCh0aHIsIHZh bCk7CisJZHVrX3hkZWZfcHJvcCh0aHIsIC0zLCBwcm9wX2ZsYWdzKTsgIC8qIFtob2xkZXIgbmFt ZSB2YWxdIC0+IFtob2xkZXJdICovCisJZHVrX3BvcF91bnNhZmUodGhyKTsKKworCXJldHVybiAw OworCisgZmFpbF9leGlzdGluZ19hdHRyaWJ1dGVzOgorIGZhaWxfbm90X2V4dGVuc2libGU6CisJ RFVLX0VSUk9SX1RZUEUodGhyLCAiZGVjbGFyYXRpb24gZmFpbGVkIik7CisJRFVLX1dPX05PUkVU VVJOKHJldHVybiAwOyk7Cit9CisKK0RVS19JTlRFUk5BTAorZHVrX2Jvb2xfdCBkdWtfanNfZGVj bHZhcl9hY3RpdmF0aW9uKGR1a19odGhyZWFkICp0aHIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHVrX2FjdGl2YXRpb24gKmFjdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfaHN0cmluZyAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfdHZhbCAqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19zbWFsbF91aW50X3QgcHJvcF9mbGFncywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfYm9vbF90IGlzX2Z1bmNfZGVjbCkgeworCWR1a19o b2JqZWN0ICplbnY7CisJZHVrX3R2YWwgdHZfdmFsX2NvcHk7CisKKwlEVUtfQVNTRVJUKGFjdCAh PSBOVUxMKTsKKworCS8qCisJICogIE1ha2UgYSB2YWx1ZSBjb3B5IG9mIHRoZSBpbnB1dCB2YWwu ICBUaGlzIGVuc3VyZXMgdGhhdAorCSAqICBzaWRlIGVmZmVjdHMgY2Fubm90IGludmFsaWRhdGUg dGhlIHBvaW50ZXIuCisJICovCisKKwlEVUtfVFZBTF9TRVRfVFZBTCgmdHZfdmFsX2NvcHksIHZh bCk7CisJdmFsID0gJnR2X3ZhbF9jb3B5OworCisJLyoKKwkgKiAgRGVsYXllZCBlbnYgY3JlYXRp b24gY2hlY2sKKwkgKi8KKworCWlmICghYWN0LT52YXJfZW52KSB7CisJCURVS19BU1NFUlQoYWN0 LT5sZXhfZW52ID09IE5VTEwpOworCQlkdWtfanNfaW5pdF9hY3RpdmF0aW9uX2Vudmlyb25tZW50 X3JlY29yZHNfZGVsYXllZCh0aHIsIGFjdCk7CisJCS8qICdhY3QnIGlzIGEgc3RhYmxlIHBvaW50 ZXIsIHNvIHN0aWxsIE9LLiAqLworCX0KKwlEVUtfQVNTRVJUKGFjdC0+bGV4X2VudiAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKGFjdC0+dmFyX2VudiAhPSBOVUxMKTsKKworCWVudiA9IGFjdC0+dmFy X2VudjsKKwlEVUtfQVNTRVJUKGVudiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNU X0lTX0VOVihlbnYpKTsKKworCXJldHVybiBkdWtfX2RlY2x2YXJfaGVscGVyKHRociwgZW52LCBu YW1lLCB2YWwsIHByb3BfZmxhZ3MsIGlzX2Z1bmNfZGVjbCk7Cit9CisvKgorICogIExleGVyIGZv ciBzb3VyY2UgZmlsZXMsIFRvTnVtYmVyKCkgc3RyaW5nIGNvbnZlcnNpb25zLCBSZWdFeHAgZXhw cmVzc2lvbnMsCisgKiAgYW5kIEpTT04uCisgKgorICogIFByb3ZpZGVzIGEgc3RyZWFtIG9mIEVD TUFTY3JpcHQgdG9rZW5zIGZyb20gYW4gVVRGLTgvQ0VTVS04IGJ1ZmZlci4gIFRoZQorICogIGNh bGxlciBjYW4gYWxzbyByZXdpbmQgdGhlIHRva2VuIHN0cmVhbSBpbnRvIGEgY2VydGFpbiBwb3Np dGlvbiB3aGljaCBpcworICogIG5lZWRlZCBieSB0aGUgY29tcGlsZXIgcGFydCBmb3IgbXVsdGkt cGFzcyBzY2FubmluZy4gIFRva2VucyBhcmUKKyAqICByZXByZXNlbnRlZCBhcyBkdWtfdG9rZW4g c3RydWN0dXJlcywgYW5kIGNvbnRhaW4gbGluZSBudW1iZXIgaW5mb3JtYXRpb24uCisgKiAgVG9r ZW4gdHlwZXMgYXJlIGlkZW50aWZpZWQgd2l0aCBEVUtfVE9LXyogZGVmaW5lcy4KKyAqCisgKiAg Q2hhcmFjdGVycyBhcmUgZGVjb2RlZCBpbnRvIGEgZml4ZWQgc2l6ZSBsb29rdXAgd2luZG93IGNv bnNpc3Rpbmcgb2YKKyAqICBkZWNvZGVkIFVuaWNvZGUgY29kZSBwb2ludHMsIHdpdGggd2luZG93 IHBvc2l0aW9ucyBwYXN0IHRoZSBlbmQgb2YgdGhlCisgKiAgaW5wdXQgZmlsbGVkIHdpdGggYW4g aW52YWxpZCBjb2RlcG9pbnQgKC0xKS4gIFRoZSB0b2tlbml6ZXIgY2FuIHRodXMKKyAqICBwZXJm b3JtIG11bHRpcGxlIGNoYXJhY3RlciBsb29rdXBzIGVmZmljaWVudGx5IGFuZCB3aXRoIGZldyBz YW5pdHkKKyAqICBjaGVja3MgKHN1Y2ggYXMgYWNjZXNzIG91dHNpZGUgdGhlIGVuZCBvZiB0aGUg aW5wdXQpLCB3aGljaCBrZWVwcyB0aGUKKyAqICB0b2tlbml6YXRpb24gY29kZSBzbWFsbCBhdCB0 aGUgY29zdCBvZiBwZXJmb3JtYW5jZS4KKyAqCisgKiAgQ2hhcmFjdGVyIGRhdGEgaW4gdG9rZW5z LCBzdWNoIGFzIGlkZW50aWZpZXIgbmFtZXMgYW5kIHN0cmluZyBsaXRlcmFscywKKyAqICBpcyBl bmNvZGVkIGludG8gQ0VTVS04IGZvcm1hdCBvbi10aGUtZmx5IHdoaWxlIHBhcnNpbmcgdGhlIHRv a2VuIGluCisgKiAgcXVlc3Rpb24uICBUaGUgc3RyaW5nIGRhdGEgaXMgbWFkZSByZWFjaGFibGUg dG8gZ2FyYmFnZSBjb2xsZWN0aW9uIGJ5CisgKiAgcGxhY2luZyB0aGUgdG9rZW4tcmVsYXRlZCB2 YWx1ZXMgaW4gdmFsdWUgc3RhY2sgZW50cmllcyBhbGxvY2F0ZWQgZm9yCisgKiAgdGhpcyBwdXJw b3NlIGJ5IHRoZSBjYWxsZXIuICBUaGUgY2hhcmFjdGVycyBleGlzdCBpbiBVbmljb2RlIGNvZGUg cG9pbnQKKyAqICBmb3JtIG9ubHkgaW4gdGhlIGZpeGVkIHNpemUgbG9va3VwIHdpbmRvdywgd2hp Y2gga2VlcHMgY2hhcmFjdGVyIGRhdGEKKyAqICBleHBhbnNpb24gKG9mIGVzcGVjaWFsbHkgQVND SUkgZGF0YSkgbG93LgorICoKKyAqICBUb2tlbiBwYXJzaW5nIHN1cHBvcnRzIHRoZSBmdWxsIHJh bmdlIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBkZXNjcmliZWQKKyAqICBpbiB0aGUgRTUgc3Bl Y2lmaWNhdGlvbi4gIFBhcnNpbmcgaGFzIGJlZW4gb3B0aW1pemVkIGZvciBBU0NJSSBjaGFyYWN0 ZXJzCisgKiAgYmVjYXVzZSBvcmRpbmFyeSBFQ01BU2NyaXB0IGNvZGUgY29uc2lzdHMgYWxtb3N0 IGVudGlyZWx5IG9mIEFTQ0lJCisgKiAgY2hhcmFjdGVycy4gIE1hdGNoaW5nIG9mIGNvbXBsZXgg VW5pY29kZSBjb2RlcG9pbnQgc2V0cyAoc3VjaCBhcyBpbiB0aGUKKyAqICBJZGVudGlmaWVyU3Rh cnQgYW5kIElkZW50aWZpZXJQYXJ0IHByb2R1Y3Rpb25zKSBpcyBvcHRpbWl6ZWQgZm9yIHNpemUs CisgKiAgYW5kIGlzIGRvbmUgdXNpbmcgYSBsaW5lYXIgc2NhbiBvZiBhIGJpdC1wYWNrZWQgbGlz dCBvZiByYW5nZXMuICBUaGlzIGlzCisgKiAgdmVyeSBzbG93LCBidXQgc2hvdWxkIG5ldmVyIGJl IGVudGVyZWQgdW5sZXNzIHRoZSBzb3VyY2UgY29kZSBhY3R1YWxseQorICogIGNvbnRhaW5zIFVu aWNvZGUgY2hhcmFjdGVycy4KKyAqCisgKiAgRUNNQVNjcmlwdCB0b2tlbml6YXRpb24gaXMgcGFy dGlhbGx5IGNvbnRleHQgc2Vuc2l0aXZlLiAgRmlyc3QsCisgKiAgYWRkaXRpb25hbCBmdXR1cmUg cmVzZXJ2ZWQgd29yZHMgYXJlIHJlY29nbml6ZWQgaW4gc3RyaWN0IG1vZGUgKHNlZSBFNQorICog IFNlY3Rpb24gNy42LjEuMikuICBTZWNvbmQsIGEgZm9yd2FyZCBzbGFzaCBjaGFyYWN0ZXIgKCcv JykgY2FuIGJlCisgKiAgcmVjb2duaXplZCBlaXRoZXIgYXMgc3RhcnRpbmcgYSBSZWdFeHAgbGl0 ZXJhbCBvciBhcyBhIGRpdmlzaW9uIG9wZXJhdG9yLAorICogIGRlcGVuZGluZyBvbiBjb250ZXh0 LiAgVGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgbmVjZXNzYXJ5IGNvbnRleHQgZmxhZ3MKKyAqICB3 aGVuIHJlcXVlc3RpbmcgYSBuZXcgdG9rZW4uCisgKgorICogIEZ1dHVyZSB3b3JrOgorICoKKyAq ICAgICogTWFrZSBsaW5lIG51bWJlciB0cmFja2luZyBvcHRpb25hbCwgYXMgaXQgY29uc3VtZXMg c3BhY2UuCisgKgorICogICAgKiBBZGQgYSBmZWF0dXJlIGZsYWcgZm9yIGRpc2FibGluZyBVVEYt OCBkZWNvZGluZyBvZiBpbnB1dCwgYXMgbW9zdAorICogICAgICBzb3VyY2UgY29kZSBpcyBBU0NJ SS4gIEJlY2F1c2Ugb2YgVW5pY29kZSBlc2NhcGVzIHdyaXR0ZW4gaW4gQVNDSUksCisgKiAgICAg IHRoaXMgZG9lcyBub3QgYWxsb3cgVW5pY29kZSBzdXBwb3J0IHRvIGJlIHJlbW92ZWQgZnJvbSBl LmcuCisgKiAgICAgIGR1a191bmljb2RlX2lzX2lkZW50aWZpZXJfc3RhcnQoKSBub3IgZG9lcyBp dCBhbGxvdyByZW1vdmFsIG9mIENFU1UtOAorICogICAgICBlbmNvZGluZyBvZiBlLmcuIHN0cmlu ZyBsaXRlcmFscy4KKyAqCisgKiAgICAqIEFkZCBhIGZlYXR1cmUgZmxhZyBmb3IgZGlzYWJsaW5n IFVuaWNvZGUgY29tcGxpYW5jZSBvZiBlLmcuIGlkZW50aWZpZXIKKyAqICAgICAgbmFtZXMuICBU aGlzIGFsbG93cyBmb3IgYSBidWlsZCBtb3JlIHRoYW4gYSBraWxvYnl0ZSBzbWFsbGVyLCBiZWNh dXNlCisgKiAgICAgIFVuaWNvZGUgcmFuZ2VzIG5lZWRlZCBieSBkdWtfdW5pY29kZV9pc19pZGVu dGlmaWVyX3N0YXJ0KCkgYW5kCisgKiAgICAgIGR1a191bmljb2RlX2lzX2lkZW50aWZpZXJfcGFy dCgpIGNhbiBiZSBkcm9wcGVkLiAgU3RyaW5nIGxpdGVyYWxzCisgKiAgICAgIHNob3VsZCBzdGls bCBiZSBhbGxvd2VkIHRvIGNvbnRhaW4gZXNjYXBlZCBVbmljb2RlLCBzbyB0aGlzIHN0aWxsIGRv ZXMKKyAqICAgICAgbm90IGFsbG93IHJlbW92YWwgb2YgQ0VTVS04IGVuY29kaW5nIG9mIGUuZy4g c3RyaW5nIGxpdGVyYWxzLgorICoKKyAqICAgICogQ2hhcmFjdGVyIGxvb2t1cCB0YWJsZXMgZm9y IGNvZGVwb2ludHMgYWJvdmUgQk1QIGNvdWxkIGJlIHN0cmlwcGVkLgorICoKKyAqICAgICogU3Ry aWN0bHkgc3BlYWtpbmcsIEU1IHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhhdCBzb3VyY2UgY29k ZSBjb25zaXN0cworICogICAgICBvZiAxNi1iaXQgY29kZSB1bml0cywgYW5kIGlmIG5vdCwgbXVz dCBiZSBjb25jZXB0dWFsbHkgY29udmVydGVkIHRvCisgKiAgICAgIHRoYXQgZm9ybWF0IGZpcnN0 LiAgVGhlIGN1cnJlbnQgbGV4ZXIgcHJvY2Vzc2VzIFVuaWNvZGUgY29kZSBwb2ludHMKKyAqICAg ICAgYW5kIGFsbG93cyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJNUC4gIFRoZXNlIHNob3VsZCBi ZSBjb252ZXJ0ZWQgdG8KKyAqICAgICAgc3Vycm9nYXRlIHBhaXJzIHdoaWxlIHJlYWRpbmcgdGhl IHNvdXJjZSBjaGFyYWN0ZXJzIGludG8gdGhlIHdpbmRvdywKKyAqICAgICAgbm90IGFmdGVyIHRv a2VucyBoYXZlIGJlZW4gZm9ybWVkIChhcyBpcyBkb25lIG5vdykuICBIb3dldmVyLCB0aGUgZml4 CisgKiAgICAgIGlzIG5vdCB0cml2aWFsIGJlY2F1c2UgdHdvIGNoYXJhY3RlcnMgYXJlIGRlY29k ZWQgZnJvbSBvbmUgY29kZXBvaW50LgorICoKKyAqICAgICogT3B0aW1pemUgZm9yIHNwZWVkIGFz IHdlbGwgYXMgc2l6ZS4gIExhcmdlIGlmLWVsc2UgbGFkZGVycyBhcmUgKGF0CisgKiAgICAgIGxl YXN0IHBvdGVudGlhbGx5KSBzbG93LgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5o IC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyoKKyAqICBWYXJpb3VzIGRlZmluZXMgYW5kIGZp bGUgc3BlY2lmaWMgaGVscGVyIG1hY3JvcworICovCisKKyNkZWZpbmUgRFVLX19NQVhfUkVfREVD RVNDX0RJR0lUUyAgICAgOQorI2RlZmluZSBEVUtfX01BWF9SRV9RVUFOVF9ESUdJVFMgICAgICA5 ICAgLyogRG9lcyBub3QgYWxsb3cgZS5nLiAyKiozMS0xLCBidXQgb25lIG1vcmUgd291bGQgYWxs b3cgb3ZlcmZsb3dzIG9mIHUzMi4gKi8KKworLyogd2hldGhlciB0byB1c2UgbWFjcm9zIG9yIGhl bHBlciBmdW5jdGlvbiBkZXBlbmRzIG9uIGNhbGwgY291bnQgKi8KKyNkZWZpbmUgRFVLX19JU0RJ R0lUKHgpICAgICAgICAgICgoeCkgPj0gRFVLX0FTQ18wICYmICh4KSA8PSBEVUtfQVNDXzkpCisj ZGVmaW5lIERVS19fSVNIRVhESUdJVCh4KSAgICAgICBkdWtfX2lzX2hleF9kaWdpdCgoeCkpCisj ZGVmaW5lIERVS19fSVNPQ1RESUdJVCh4KSAgICAgICAoKHgpID49IERVS19BU0NfMCAmJiAoeCkg PD0gRFVLX0FTQ183KQorI2RlZmluZSBEVUtfX0lTRElHSVQwMyh4KSAgICAgICAgKCh4KSA+PSBE VUtfQVNDXzAgJiYgKHgpIDw9IERVS19BU0NfMykKKyNkZWZpbmUgRFVLX19JU0RJR0lUNDcoeCkg ICAgICAgICgoeCkgPj0gRFVLX0FTQ180ICYmICh4KSA8PSBEVUtfQVNDXzcpCisKKy8qIGxleGVy IGNoYXJhY3RlciB3aW5kb3cgaGVscGVycyAqLworI2RlZmluZSBEVUtfX0xPT0tVUChsZXhfY3R4 LGlkeCkgICAgICAgICAgICAoKGxleF9jdHgpLT53aW5kb3dbKGlkeCldLmNvZGVwb2ludCkKKyNk ZWZpbmUgRFVLX19BRFZBTkNFQ0hBUlMobGV4X2N0eCxjb3VudCkgICAgZHVrX19hZHZhbmNlX2No YXJzKChsZXhfY3R4KSwgKGNvdW50KSkKKyNkZWZpbmUgRFVLX19BRFZBTkNFQllURVMobGV4X2N0 eCxjb3VudCkgICAgZHVrX19hZHZhbmNlX2J5dGVzKChsZXhfY3R4KSwgKGNvdW50KSkKKyNkZWZp bmUgRFVLX19JTklUQlVGRkVSKGxleF9jdHgpICAgICAgICAgICAgZHVrX19pbml0YnVmZmVyKChs ZXhfY3R4KSkKKyNkZWZpbmUgRFVLX19BUFBFTkRCVUZGRVIobGV4X2N0eCx4KSAgICAgICAgZHVr X19hcHBlbmRidWZmZXIoKGxleF9jdHgpLCAoZHVrX2NvZGVwb2ludF90KSAoeCkpCisjZGVmaW5l IERVS19fQVBQRU5EQlVGRkVSX0FTQ0lJKGxleF9jdHgseCkgIGR1a19fYXBwZW5kYnVmZmVyX2Fz Y2lpKChsZXhfY3R4KSwgKGR1a19jb2RlcG9pbnRfdCkgKHgpKQorCisvKiBsb29rdXAgc2hvcnRo YW5kcyAobm90ZTogYXNzdW1lIGNvbnRleHQgdmFyaWFibGUgaXMgbmFtZWQgJ2xleF9jdHgnKSAq LworI2RlZmluZSBEVUtfX0wwKCkgIERVS19fTE9PS1VQKGxleF9jdHgsIDApCisjZGVmaW5lIERV S19fTDEoKSAgRFVLX19MT09LVVAobGV4X2N0eCwgMSkKKyNkZWZpbmUgRFVLX19MMigpICBEVUtf X0xPT0tVUChsZXhfY3R4LCAyKQorI2RlZmluZSBEVUtfX0wzKCkgIERVS19fTE9PS1VQKGxleF9j dHgsIDMpCisjZGVmaW5lIERVS19fTDQoKSAgRFVLX19MT09LVVAobGV4X2N0eCwgNCkKKyNkZWZp bmUgRFVLX19MNSgpICBEVUtfX0xPT0tVUChsZXhfY3R4LCA1KQorCisvKiBwYWNrZWQgYWR2YW5j ZS90b2tlbiBudW1iZXIgbWFjcm8gdXNlZCBieSBtdWx0aXBsZSBmdW5jdGlvbnMgKi8KKyNkZWZp bmUgRFVLX19BRFZUT0soYWR2Ynl0ZXMsdG9rKSAgKCgoKGFkdmJ5dGVzKSAqIHNpemVvZihkdWtf bGV4ZXJfY29kZXBvaW50KSkgPDwgOCkgKyAodG9rKSkKKworLyoKKyAqICBBZHZhbmNlIGxvb2t1 cCB3aW5kb3cgYnkgTiBjaGFyYWN0ZXJzLCBmaWxsaW5nIGluIG5ldyBjaGFyYWN0ZXJzIGFzCisg KiAgbmVjZXNzYXJ5LiAgQWZ0ZXIgcmV0dXJuaW5nIGNhbGxlciBpcyBndWFyYW50ZWVkIGEgY2hh cmFjdGVyIHdpbmRvdyBvZgorICogIGF0IGxlYXN0IERVS19MRVhFUl9XSU5ET1dfU0laRSBjaGFy YWN0ZXJzLgorICoKKyAqICBUaGUgbWFpbiBmdW5jdGlvbiBkdWtfX2FkdmFuY2VfYnl0ZXMoKSBp cyBjYWxsZWQgYXQgbGVhc3Qgb25jZSBwZXIgZXZlcnkKKyAqICB0b2tlbiBzbyBpdCBoYXMgYSBt YWpvciBsZXhlci9jb21waWxlciBwZXJmb3JtYW5jZSBpbXBhY3QuICBUaGVyZSBhcmUgdHdvCisg KiAgdmFyaWFudHMgZm9yIHRoZSBtYWluIGR1a19fYWR2YW5jZV9ieXRlcygpIGFsZ29yaXRobTog YSBzbGlkaW5nIHdpbmRvdworICogIGFwcHJvYWNoIHdoaWNoIGlzIHNsaWdodGx5IGZhc3RlciBh dCB0aGUgY29zdCBvZiBsYXJnZXIgY29kZSBmb290cHJpbnQsCisgKiAgYW5kIGEgc2ltcGxlIGNv cHlpbmcgb25lLgorICoKKyAqICBEZWNvZGluZyBkaXJlY3RseSBmcm9tIHRoZSBzb3VyY2Ugc3Ry aW5nIHdvdWxkIGJlIGFub3RoZXIgbGV4aW5nIG9wdGlvbi4KKyAqICBCdXQgdGhlIGxvb2t1cCB3 aW5kb3cgYmFzZWQgYXBwcm9hY2ggaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgaGlkaW5nIHRoZQorICog IHNvdXJjZSBzdHJpbmcgYW5kIGl0cyBlbmNvZGluZyBlZmZlY3RpdmVseSB3aGljaCBnaXZlcyBt b3JlIGZsZXhpYmlsaXR5CisgKiAgZ29pbmcgZm9yd2FyZCB0byBlLmcuIHN1cHBvcnQgY2h1bmtl ZCBzdHJlYW1pbmcgb2Ygc291cmNlIGZyb20gZmxhc2guCisgKgorICogIERlY29kZXMgVVRGLTgv Q0VTVS04IGxlbmllbnRseSB3aXRoIHN1cHBvcnQgZm9yIGNvZGUgcG9pbnRzIGZyb20gVSswMDAw IHRvCisgKiAgVSsxMEZGRkYsIGNhdXNpbmcgYW4gZXJyb3IgaWYgdGhlIGlucHV0IGlzIHVucGFy c2VhYmxlLiAgTGVuaWVuY3kgbWVhbnM6CisgKgorICogICAgKiBVbmljb2RlIGNvZGUgcG9pbnQg dmFsaWRhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG5vdCBwZXJmb3JtZWQsCisgKiAgICAgIGV4Y2Vw dCB0byBjaGVjayB0aGF0IHRoZSBjb2RlcG9pbnQgZG9lcyBub3QgZXhjZWVkIDB4MTBmZmZmLgor ICoKKyAqICAgICogSW4gcGFydGljdWxhciwgc3Vycm9nYXRlIHBhaXJzIGFyZSBhbGxvd2VkIGFu ZCBub3QgY29tYmluZWQsIHdoaWNoCisgKiAgICAgIGFsbG93cyBzb3VyY2UgZmlsZXMgdG8gcmVw cmVzZW50IGFsbCBTb3VyY2VDaGFyYWN0ZXJzIHdpdGggQ0VTVS04LgorICogICAgICBCcm9rZW4g c3Vycm9nYXRlIHBhaXJzIGFyZSBhbGxvd2VkLCBhcyBFQ01BU2NyaXB0IGRvZXMgbm90IG1hbmRh dGUKKyAqICAgICAgdGhlaXIgdmFsaWRhdGlvbi4KKyAqCisgKiAgICAqIEFsbG93IG5vbi1zaG9y dGVzdCBVVEYtOCBlbmNvZGluZ3MuCisgKgorICogIExlbmllbmN5IGhlcmUgY2F1c2VzIGZldyBz ZWN1cml0eSBjb25jZXJucyBiZWNhdXNlIGFsbCBjaGFyYWN0ZXIgZGF0YSBpcworICogIGRlY29k ZWQgaW50byBVbmljb2RlIGNvZGVwb2ludHMgYmVmb3JlIGxleGVyIHByb2Nlc3NpbmcsIGFuZCBp cyB0aGVuCisgKiAgcmUtZW5jb2RlZCBpbnRvIENFU1UtOC4gIFRoZSBzb3VyY2UgY2FuIGJlIHBh cnNlZCBhcyBzdHJpY3QgVVRGLTggd2l0aAorICogIGEgY29tcGlsZXIgb3B0aW9uLiAgSG93ZXZl ciwgRUNNQVNjcmlwdCBzb3VyY2UgY2hhcmFjdGVycyBpbmNsdWRlIC1hbGwtCisgKiAgMTYtYml0 IHVuc2lnbmVkIGludGVnZXIgY29kZXBvaW50cywgc28gbGVuaWVuY3kgc2VlbXMgdG8gYmUgYXBw cm9wcmlhdGUuCisgKgorICogIE5vdGUgdGhhdCBjb2RlcG9pbnRzIGFib3ZlIHRoZSBCTVAgYXJl IG5vdCBzdHJpY3RseSBTb3VyY2VDaGFyYWN0ZXJzLAorICogIGJ1dCB0aGUgbGV4ZXIgc3RpbGwg YWNjZXB0cyB0aGVtIGFzIHN1Y2guICBCZWZvcmUgZW5kaW5nIHVwIGluIGEgc3RyaW5nCisgKiAg b3IgYW4gaWRlbnRpZmllciBuYW1lLCBjb2RlcG9pbnRzIGFib3ZlIEJNUCBhcmUgY29udmVydGVk IGludG8gc3Vycm9nYXRlCisgKiAgcGFpcnMgYW5kIHRoZW4gQ0VTVS04IGVuY29kZWQsIHJlc3Vs dGluZyBpbiAxNi1iaXQgVW5pY29kZSBkYXRhIGFzCisgKiAgZXhwZWN0ZWQgYnkgRUNNQVNjcmlw dC4KKyAqCisgKiAgQW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gZGVhbGluZyB3aXRoIGludmFs aWQgb3IgcGFydGlhbCBzZXF1ZW5jZXMKKyAqICB3b3VsZCBiZSB0byBza2lwIHRoZW0gYW5kIHJl cGxhY2UgdGhlbSB3aXRoIGUuZy4gdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQKKyAqICBjaGFyYWN0 ZXIgVStGRkZELiAgVGhpcyBoYXMgbGltaXRlZCB1dGlsaXR5IGJlY2F1c2UgYSByZXBsYWNlbWVu dCBjaGFyYWN0ZXIKKyAqICB3aWxsIG1vc3QgbGlrZWx5IGNhdXNlIGEgcGFyc2UgZXJyb3IsIHVu bGVzcyBpdCBvY2N1cnMgaW5zaWRlIGEgc3RyaW5nLgorICogIEZ1cnRoZXIsIEVDTUFTY3JpcHQg c291cmNlIGlzIHR5cGljYWxseSBwdXJlIEFTQ0lJLgorICoKKyAqICBTZWU6CisgKgorICogICAg IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgKKyAqICAgICBodHRwOi8vZW4ud2lr aXBlZGlhLm9yZy93aWtpL0NFU1UtOAorICogICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1s L3JmYzM2MjkKKyAqICAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0ludmFs aWRfYnl0ZV9zZXF1ZW5jZXMKKyAqCisgKiAgRnV0dXJlIHdvcms6CisgKgorICogICAgKiBSZWpl Y3Qgb3RoZXIgaW52YWxpZCBVbmljb2RlIHNlcXVlbmNlcyAoc2VlIFdpa2lwZWRpYSBlbnRyeSBm b3IgZXhhbXBsZXMpCisgKiAgICAgIGluIHN0cmljdCBVVEYtOCBtb2RlLgorICoKKyAqICAgICog U2l6ZSBvcHRpbWl6ZS4gIEFuIGF0dGVtcHQgdG8gdXNlIGEgMTYtYnl0ZSBsb29rdXAgdGFibGUg Zm9yIHRoZSBmaXJzdAorICogICAgICBieXRlIHJlc3VsdGVkIGluIGEgY29kZSBpbmNyZWFzZSB0 aG91Z2guCisgKgorICogICAgKiBJcyBjaGVja2luZyBhZ2FpbnN0IG1heGltdW0gMHgxMGZmZmYg cmVhbGx5IHVzZWZ1bD8gIDQtYnl0ZSBlbmNvZGluZworICogICAgICBpbXBvc2VzIGEgY2VydGFp biBsaW1pdCBhbnl3YXkuCisgKgorICogICAgKiBTdXBwb3J0IGNodW5rZWQgc3RyZWFtaW5nIG9m IHNvdXJjZSBjb2RlLiAgQ2FuIGJlIGltcGxlbWVudGVkIGVpdGhlcgorICogICAgICBieSBzdHJl YW1pbmcgY2h1bmtzIG9mIGJ5dGVzIG9yIGNodW5rcyBvZiBjb2RlcG9pbnRzLgorICovCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfTEVYRVJfU0xJRElOR19XSU5ET1cpCitEVUtfTE9DQUwgdm9pZCBk dWtfX2ZpbGxfbGV4ZXJfYnVmZmVyKGR1a19sZXhlcl9jdHggKmxleF9jdHgsIGR1a19zbWFsbF91 aW50X3Qgc3RhcnRfb2Zmc2V0X2J5dGVzKSB7CisJZHVrX2xleGVyX2NvZGVwb2ludCAqY3AsICpj cF9lbmQ7CisJZHVrX3Vjb2RlcG9pbnRfdCB4OworCWR1a19zbWFsbF91aW50X3QgY29udGxlbjsK Kwljb25zdCBkdWtfdWludDhfdCAqcCwgKnBfZW5kOworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJJ Q1RfVVRGOF9TT1VSQ0UpCisJZHVrX3Vjb2RlcG9pbnRfdCBtaW5jcDsKKyNlbmRpZgorCWR1a19p bnRfdCBpbnB1dF9saW5lOworCisJLyogVXNlIHRlbXBvcmFyaWVzIGFuZCB1cGRhdGUgbGV4X2N0 eCBvbmx5IHdoZW4gZmluaXNoZWQuICovCisJaW5wdXRfbGluZSA9IGxleF9jdHgtPmlucHV0X2xp bmU7CisJcCA9IGxleF9jdHgtPmlucHV0ICsgbGV4X2N0eC0+aW5wdXRfb2Zmc2V0OworCXBfZW5k ID0gbGV4X2N0eC0+aW5wdXQgKyBsZXhfY3R4LT5pbnB1dF9sZW5ndGg7CisKKwljcCA9IChkdWtf bGV4ZXJfY29kZXBvaW50ICopICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgbGV4X2N0eC0+YnVm ZmVyICsgc3RhcnRfb2Zmc2V0X2J5dGVzKTsKKwljcF9lbmQgPSBsZXhfY3R4LT5idWZmZXIgKyBE VUtfTEVYRVJfQlVGRkVSX1NJWkU7CisKKwlmb3IgKDsgY3AgIT0gY3BfZW5kOyBjcCsrKSB7CisJ CWNwLT5vZmZzZXQgPSAoZHVrX3NpemVfdCkgKHAgLSBsZXhfY3R4LT5pbnB1dCk7CisJCWNwLT5s aW5lID0gaW5wdXRfbGluZTsKKworCQkvKiBYWFg6IHBvdGVudGlhbCBpc3N1ZSB3aXRoIHNpZ25l ZCBwb2ludGVycywgcF9lbmQgPCBwLiAqLworCQlpZiAoRFVLX1VOTElLRUxZKHAgPj0gcF9lbmQp KSB7CisJCQkvKiBJZiBpbnB1dF9vZmZzZXQgd2VyZSBhc3NpZ25lZCBhIG5lZ2F0aXZlIHZhbHVl LCBpdCB3b3VsZAorCQkJICogcmVzdWx0IGluIGEgbGFyZ2UgcG9zaXRpdmUgdmFsdWUuICBNb3N0 IGxpa2VseSBpdCB3b3VsZCBiZQorCQkJICogbGFyZ2VyIHRoYW4gaW5wdXRfbGVuZ3RoIGFuZCBi ZSBjYXVnaHQgaGVyZS4gIEluIGFueSBjYXNlCisJCQkgKiBubyBtZW1vcnkgdW5zYWZlIGJlaGF2 aW9yIHdvdWxkIGhhcHBlbi4KKwkJCSAqLworCQkJY3AtPmNvZGVwb2ludCA9IC0xOworCQkJY29u dGludWU7CisJCX0KKworCQl4ID0gKGR1a191Y29kZXBvaW50X3QpICgqcCsrKTsKKworCQkvKiBG YXN0IHBhdGguICovCisKKwkJaWYgKERVS19MSUtFTFkoeCA8IDB4ODBVTCkpIHsKKwkJCURVS19B U1NFUlQoeCAhPSAweDIwMjhVTCAmJiB4ICE9IDB4MjAyOVVMKTsgIC8qIG5vdCBMUy9QUyAqLwor CQkJaWYgKERVS19VTkxJS0VMWSh4IDw9IDB4MDAwZFVMKSkgeworCQkJCWlmICgoeCA9PSAweDAw MGFVTCkgfHwKKwkJCQkgICAgKCh4ID09IDB4MDAwZFVMKSAmJiAocCA+PSBwX2VuZCB8fCAqcCAh PSAweDAwMGFVTCkpKSB7CisJCQkJCS8qIGxvb2t1cCBmb3IgMHgwMDBhIGFib3ZlIGFzc3VtZXMg c2hvcnRlc3QgZW5jb2Rpbmcgbm93ICovCisKKwkJCQkJLyogRTUgU2VjdGlvbiA3LjMsIHRyZWF0 IHRoZSBmb2xsb3dpbmcgYXMgbmV3bGluZXM6CisJCQkJCSAqICAgTEYKKwkJCQkJICogICBDUiBb bm90IGZvbGxvd2VkIGJ5IExGXQorCQkJCQkgKiAgIExTCisJCQkJCSAqICAgUFMKKwkJCQkJICoK KwkJCQkJICogRm9yIENSIExGLCBDUiBpcyBpZ25vcmVkIGlmIGl0IGlzIGZvbGxvd2VkIGJ5IExG LCBhbmQgdGhlIExGIHdpbGwgYnVtcAorCQkJCQkgKiB0aGUgbGluZSBudW1iZXIuCisJCQkJCSAq LworCQkJCQlpbnB1dF9saW5lKys7CisJCQkJfQorCQkJfQorCisJCQljcC0+Y29kZXBvaW50ID0g KGR1a19jb2RlcG9pbnRfdCkgeDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2xvdyBwYXRo LiAqLworCisJCWlmICh4IDwgMHhjMFVMKSB7CisJCQkvKiAxMHh4IHh4eHggLT4gaW52YWxpZCAq LworCQkJZ290byBlcnJvcl9lbmNvZGluZzsKKwkJfSBlbHNlIGlmICh4IDwgMHhlMFVMKSB7CisJ CQkvKiAxMTB4IHh4eHggICAxMHh4IHh4eHggICovCisJCQljb250bGVuID0gMTsKKyNpZiBkZWZp bmVkKERVS19VU0VfU1RSSUNUX1VURjhfU09VUkNFKQorCQkJbWluY3AgPSAweDgwVUw7CisjZW5k aWYKKwkJCXggPSB4ICYgMHgxZlVMOworCQl9IGVsc2UgaWYgKHggPCAweGYwVUwpIHsKKwkJCS8q IDExMTAgeHh4eCAgIDEweHggeHh4eCAgIDEweHggeHh4eCAqLworCQkJY29udGxlbiA9IDI7Cisj aWYgZGVmaW5lZChEVUtfVVNFX1NUUklDVF9VVEY4X1NPVVJDRSkKKwkJCW1pbmNwID0gMHg4MDBV TDsKKyNlbmRpZgorCQkJeCA9IHggJiAweDBmVUw7CisJCX0gZWxzZSBpZiAoeCA8IDB4ZjhVTCkg eworCQkJLyogMTExMSAweHh4ICAgMTB4eCB4eHh4ICAgMTB4eCB4eHh4ICAgMTB4eCB4eHh4ICov CisJCQljb250bGVuID0gMzsKKyNpZiBkZWZpbmVkKERVS19VU0VfU1RSSUNUX1VURjhfU09VUkNF KQorCQkJbWluY3AgPSAweDEwMDAwVUw7CisjZW5kaWYKKwkJCXggPSB4ICYgMHgwN1VMOworCQl9 IGVsc2UgeworCQkJLyogbm8gcG9pbnQgaW4gc3VwcG9ydGluZyBlbmNvZGluZ3Mgb2YgNSBvciBt b3JlIGJ5dGVzICovCisJCQlnb3RvIGVycm9yX2VuY29kaW5nOworCQl9CisKKwkJRFVLX0FTU0VS VChwX2VuZCA+PSBwKTsKKwkJaWYgKChkdWtfc2l6ZV90KSBjb250bGVuID4gKGR1a19zaXplX3Qp IChwX2VuZCAtIHApKSB7CisJCQlnb3RvIGVycm9yX2NsaXBwZWQ7CisJCX0KKworCQl3aGlsZSAo Y29udGxlbiA+IDApIHsKKwkJCWR1a19zbWFsbF91aW50X3QgeTsKKwkJCXkgPSAqcCsrOworCQkJ aWYgKCh5ICYgMHhjMFUpICE9IDB4ODBVKSB7CisJCQkJLyogY2hlY2sgdGhhdCBieXRlIGhhcyB0 aGUgZm9ybSAxMHh4IHh4eHggKi8KKwkJCQlnb3RvIGVycm9yX2VuY29kaW5nOworCQkJfQorCQkJ eCA9IHggPDwgNjsKKwkJCXggKz0geSAmIDB4M2ZVTDsKKwkJCWNvbnRsZW4tLTsKKwkJfQorCisJ CS8qIGNoZWNrIGZpbmFsIGNoYXJhY3RlciB2YWxpZGl0eSAqLworCisJCWlmICh4ID4gMHgxMGZm ZmZVTCkgeworCQkJZ290byBlcnJvcl9lbmNvZGluZzsKKwkJfQorI2lmIGRlZmluZWQoRFVLX1VT RV9TVFJJQ1RfVVRGOF9TT1VSQ0UpCisJCWlmICh4IDwgbWluY3AgfHwgKHggPj0gMHhkODAwVUwg JiYgeCA8PSAweGRmZmZVTCkgfHwgeCA9PSAweGZmZmVVTCkgeworCQkJZ290byBlcnJvcl9lbmNv ZGluZzsKKwkJfQorI2VuZGlmCisKKwkJRFVLX0FTU0VSVCh4ICE9IDB4MDAwYVVMICYmIHggIT0g MHgwMDBkVUwpOworCQlpZiAoKHggPT0gMHgyMDI4VUwpIHx8ICh4ID09IDB4MjAyOVVMKSkgewor CQkJaW5wdXRfbGluZSsrOworCQl9CisKKwkJY3AtPmNvZGVwb2ludCA9IChkdWtfY29kZXBvaW50 X3QpIHg7CisJfQorCisJbGV4X2N0eC0+aW5wdXRfb2Zmc2V0ID0gKGR1a19zaXplX3QpIChwIC0g bGV4X2N0eC0+aW5wdXQpOworCWxleF9jdHgtPmlucHV0X2xpbmUgPSBpbnB1dF9saW5lOworCXJl dHVybjsKKworIGVycm9yX2NsaXBwZWQ6ICAgLyogY2xpcHBlZCBjb2RlcG9pbnQgKi8KKyBlcnJv cl9lbmNvZGluZzogIC8qIGludmFsaWQgY29kZXBvaW50IGVuY29kaW5nIG9yIGNvZGVwb2ludCAq LworCWxleF9jdHgtPmlucHV0X29mZnNldCA9IChkdWtfc2l6ZV90KSAocCAtIGxleF9jdHgtPmlu cHV0KTsKKwlsZXhfY3R4LT5pbnB1dF9saW5lID0gaW5wdXRfbGluZTsKKworCURVS19FUlJPUl9T WU5UQVgobGV4X2N0eC0+dGhyLCBEVUtfU1RSX1NPVVJDRV9ERUNPREVfRkFJTEVEKTsKKwlEVUtf V09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fYWR2YW5jZV9i eXRlcyhkdWtfbGV4ZXJfY3R4ICpsZXhfY3R4LCBkdWtfc21hbGxfdWludF90IGNvdW50X2J5dGVz KSB7CisJZHVrX3NtYWxsX3VpbnRfdCB1c2VkX2J5dGVzLCBhdmFpbF9ieXRlczsKKworCURVS19B U1NFUlRfRElTQUJMRShjb3VudF9ieXRlcyA+PSAwKTsgIC8qIHVuc2lnbmVkICovCisJRFVLX0FT U0VSVChjb3VudF9ieXRlcyA8PSAoZHVrX3NtYWxsX3VpbnRfdCkgKERVS19MRVhFUl9XSU5ET1df U0laRSAqIHNpemVvZihkdWtfbGV4ZXJfY29kZXBvaW50KSkpOworCURVS19BU1NFUlQobGV4X2N0 eC0+d2luZG93ID49IGxleF9jdHgtPmJ1ZmZlcik7CisJRFVLX0FTU0VSVChsZXhfY3R4LT53aW5k b3cgPCBsZXhfY3R4LT5idWZmZXIgKyBEVUtfTEVYRVJfQlVGRkVSX1NJWkUpOworCURVS19BU1NF UlQoKGR1a191aW50OF90ICopIGxleF9jdHgtPndpbmRvdyArIGNvdW50X2J5dGVzIDw9IChkdWtf dWludDhfdCAqKSBsZXhfY3R4LT5idWZmZXIgKyBEVUtfTEVYRVJfQlVGRkVSX1NJWkUgKiBzaXpl b2YoZHVrX2xleGVyX2NvZGVwb2ludCkpOworCisJLyogWmVybyAnY291bnQnIGlzIGFsc28gYWxs b3dlZCB0byBtYWtlIGNhbGwgc2l0ZXMgZWFzaWVyLgorCSAqIEFyaXRobWV0aWMgaW4gYnl0ZXMg Z2VuZXJhdGVzIGJldHRlciBjb2RlIGluIEdDQy4KKwkgKi8KKworCWxleF9jdHgtPndpbmRvdyA9 IChkdWtfbGV4ZXJfY29kZXBvaW50ICopICh2b2lkICopICgoZHVrX3VpbnQ4X3QgKikgbGV4X2N0 eC0+d2luZG93ICsgY291bnRfYnl0ZXMpOyAgLyogYXZvaWQgbXVsdGlwbHkgKi8KKwl1c2VkX2J5 dGVzID0gKGR1a19zbWFsbF91aW50X3QpICgoZHVrX3VpbnQ4X3QgKikgbGV4X2N0eC0+d2luZG93 IC0gKGR1a191aW50OF90ICopIGxleF9jdHgtPmJ1ZmZlcik7CisJYXZhaWxfYnl0ZXMgPSBEVUtf TEVYRVJfQlVGRkVSX1NJWkUgKiBzaXplb2YoZHVrX2xleGVyX2NvZGVwb2ludCkgLSB1c2VkX2J5 dGVzOworCWlmIChhdmFpbF9ieXRlcyA8IChkdWtfc21hbGxfdWludF90KSAoRFVLX0xFWEVSX1dJ TkRPV19TSVpFICogc2l6ZW9mKGR1a19sZXhlcl9jb2RlcG9pbnQpKSkgeworCQkvKiBOb3QgZW5v dWdoIGRhdGEgdG8gcHJvdmlkZSBhIGZ1bGwgd2luZG93LCBzbyAic2Nyb2xsIiB3aW5kb3cgdG8K KwkJICogc3RhcnQgb2YgYnVmZmVyIGFuZCBmaWxsIHVwIHRoZSByZXN0LgorCQkgKi8KKwkJZHVr X21lbW1vdmUoKHZvaWQgKikgbGV4X2N0eC0+YnVmZmVyLAorCQkgICAgICAgICAgICAoY29uc3Qg dm9pZCAqKSBsZXhfY3R4LT53aW5kb3csCisJCSAgICAgICAgICAgIChzaXplX3QpIGF2YWlsX2J5 dGVzKTsKKwkJbGV4X2N0eC0+d2luZG93ID0gbGV4X2N0eC0+YnVmZmVyOworCQlkdWtfX2ZpbGxf bGV4ZXJfYnVmZmVyKGxleF9jdHgsIGF2YWlsX2J5dGVzKTsKKwl9Cit9CisKK0RVS19MT0NBTCB2 b2lkIGR1a19faW5pdF9sZXhlcl93aW5kb3coZHVrX2xleGVyX2N0eCAqbGV4X2N0eCkgeworCWxl eF9jdHgtPndpbmRvdyA9IGxleF9jdHgtPmJ1ZmZlcjsKKwlkdWtfX2ZpbGxfbGV4ZXJfYnVmZmVy KGxleF9jdHgsIDApOworfQorI2Vsc2UgIC8qIERVS19VU0VfTEVYRVJfU0xJRElOR19XSU5ET1cg Ki8KK0RVS19MT0NBTCBkdWtfY29kZXBvaW50X3QgZHVrX19yZWFkX2NoYXIoZHVrX2xleGVyX2N0 eCAqbGV4X2N0eCkgeworCWR1a191Y29kZXBvaW50X3QgeDsKKwlkdWtfc21hbGxfdWludF90IGxl bjsKKwlkdWtfc21hbGxfdWludF90IGk7CisJY29uc3QgZHVrX3VpbnQ4X3QgKnA7CisjaWYgZGVm aW5lZChEVUtfVVNFX1NUUklDVF9VVEY4X1NPVVJDRSkKKwlkdWtfdWNvZGVwb2ludF90IG1pbmNw OworI2VuZGlmCisJZHVrX3NpemVfdCBpbnB1dF9vZmZzZXQ7CisKKwlpbnB1dF9vZmZzZXQgPSBs ZXhfY3R4LT5pbnB1dF9vZmZzZXQ7CisJaWYgKERVS19VTkxJS0VMWShpbnB1dF9vZmZzZXQgPj0g bGV4X2N0eC0+aW5wdXRfbGVuZ3RoKSkgeworCQkvKiBJZiBpbnB1dF9vZmZzZXQgd2VyZSBhc3Np Z25lZCBhIG5lZ2F0aXZlIHZhbHVlLCBpdCB3b3VsZAorCQkgKiByZXN1bHQgaW4gYSBsYXJnZSBw b3NpdGl2ZSB2YWx1ZS4gIE1vc3QgbGlrZWx5IGl0IHdvdWxkIGJlCisJCSAqIGxhcmdlciB0aGFu IGlucHV0X2xlbmd0aCBhbmQgYmUgY2F1Z2h0IGhlcmUuICBJbiBhbnkgY2FzZQorCQkgKiBubyBt ZW1vcnkgdW5zYWZlIGJlaGF2aW9yIHdvdWxkIGhhcHBlbi4KKwkJICovCisJCXJldHVybiAtMTsK Kwl9CisKKwlwID0gbGV4X2N0eC0+aW5wdXQgKyBpbnB1dF9vZmZzZXQ7CisJeCA9IChkdWtfdWNv ZGVwb2ludF90KSAoKnApOworCisJaWYgKERVS19MSUtFTFkoeCA8IDB4ODBVTCkpIHsKKwkJLyog MHh4eCB4eHh4IC0+IGZhc3QgcGF0aCAqLworCisJCS8qIGlucHV0IG9mZnNldCB0cmFja2luZyAq LworCQlsZXhfY3R4LT5pbnB1dF9vZmZzZXQrKzsKKworCQlEVUtfQVNTRVJUKHggIT0gMHgyMDI4 VUwgJiYgeCAhPSAweDIwMjlVTCk7ICAvKiBub3QgTFMvUFMgKi8KKwkJaWYgKERVS19VTkxJS0VM WSh4IDw9IDB4MDAwZFVMKSkgeworCQkJaWYgKCh4ID09IDB4MDAwYVVMKSB8fAorCQkJICAgICgo eCA9PSAweDAwMGRVTCkgJiYgKGxleF9jdHgtPmlucHV0X29mZnNldCA+PSBsZXhfY3R4LT5pbnB1 dF9sZW5ndGggfHwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfY3R4LT5pbnB1dFts ZXhfY3R4LT5pbnB1dF9vZmZzZXRdICE9IDB4MDAwYVVMKSkpIHsKKwkJCQkvKiBsb29rdXAgZm9y IDB4MDAwYSBhYm92ZSBhc3N1bWVzIHNob3J0ZXN0IGVuY29kaW5nIG5vdyAqLworCisJCQkJLyog RTUgU2VjdGlvbiA3LjMsIHRyZWF0IHRoZSBmb2xsb3dpbmcgYXMgbmV3bGluZXM6CisJCQkJICog ICBMRgorCQkJCSAqICAgQ1IgW25vdCBmb2xsb3dlZCBieSBMRl0KKwkJCQkgKiAgIExTCisJCQkJ ICogICBQUworCQkJCSAqCisJCQkJICogRm9yIENSIExGLCBDUiBpcyBpZ25vcmVkIGlmIGl0IGlz IGZvbGxvd2VkIGJ5IExGLCBhbmQgdGhlIExGIHdpbGwgYnVtcAorCQkJCSAqIHRoZSBsaW5lIG51 bWJlci4KKwkJCQkgKi8KKwkJCQlsZXhfY3R4LT5pbnB1dF9saW5lKys7CisJCQl9CisJCX0KKwor CQlyZXR1cm4gKGR1a19jb2RlcG9pbnRfdCkgeDsKKwl9CisKKwkvKiBTbG93IHBhdGguICovCisK KwlpZiAoeCA8IDB4YzBVTCkgeworCQkvKiAxMHh4IHh4eHggLT4gaW52YWxpZCAqLworCQlnb3Rv IGVycm9yX2VuY29kaW5nOworCX0gZWxzZSBpZiAoeCA8IDB4ZTBVTCkgeworCQkvKiAxMTB4IHh4 eHggICAxMHh4IHh4eHggICovCisJCWxlbiA9IDI7CisjaWYgZGVmaW5lZChEVUtfVVNFX1NUUklD VF9VVEY4X1NPVVJDRSkKKwkJbWluY3AgPSAweDgwVUw7CisjZW5kaWYKKwkJeCA9IHggJiAweDFm VUw7CisJfSBlbHNlIGlmICh4IDwgMHhmMFVMKSB7CisJCS8qIDExMTAgeHh4eCAgIDEweHggeHh4 eCAgIDEweHggeHh4eCAqLworCQlsZW4gPSAzOworI2lmIGRlZmluZWQoRFVLX1VTRV9TVFJJQ1Rf VVRGOF9TT1VSQ0UpCisJCW1pbmNwID0gMHg4MDBVTDsKKyNlbmRpZgorCQl4ID0geCAmIDB4MGZV TDsKKwl9IGVsc2UgaWYgKHggPCAweGY4VUwpIHsKKwkJLyogMTExMSAweHh4ICAgMTB4eCB4eHh4 ICAgMTB4eCB4eHh4ICAgMTB4eCB4eHh4ICovCisJCWxlbiA9IDQ7CisjaWYgZGVmaW5lZChEVUtf VVNFX1NUUklDVF9VVEY4X1NPVVJDRSkKKwkJbWluY3AgPSAweDEwMDAwVUw7CisjZW5kaWYKKwkJ eCA9IHggJiAweDA3VUw7CisJfSBlbHNlIHsKKwkJLyogbm8gcG9pbnQgaW4gc3VwcG9ydGluZyBl bmNvZGluZ3Mgb2YgNSBvciBtb3JlIGJ5dGVzICovCisJCWdvdG8gZXJyb3JfZW5jb2Rpbmc7CisJ fQorCisJRFVLX0FTU0VSVChsZXhfY3R4LT5pbnB1dF9sZW5ndGggPj0gbGV4X2N0eC0+aW5wdXRf b2Zmc2V0KTsKKwlpZiAoKGR1a19zaXplX3QpIGxlbiA+IChkdWtfc2l6ZV90KSAobGV4X2N0eC0+ aW5wdXRfbGVuZ3RoIC0gbGV4X2N0eC0+aW5wdXRfb2Zmc2V0KSkgeworCQlnb3RvIGVycm9yX2Ns aXBwZWQ7CisJfQorCisJcCsrOworCWZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgeworCQlkdWtf c21hbGxfdWludF90IHk7CisJCXkgPSAqcCsrOworCQlpZiAoKHkgJiAweGMwVSkgIT0gMHg4MFUp IHsKKwkJCS8qIGNoZWNrIHRoYXQgYnl0ZSBoYXMgdGhlIGZvcm0gMTB4eCB4eHh4ICovCisJCQln b3RvIGVycm9yX2VuY29kaW5nOworCQl9CisJCXggPSB4IDw8IDY7CisJCXggKz0geSAmIDB4M2ZV TDsKKwl9CisKKwkvKiBjaGVjayBmaW5hbCBjaGFyYWN0ZXIgdmFsaWRpdHkgKi8KKworCWlmICh4 ID4gMHgxMGZmZmZVTCkgeworCQlnb3RvIGVycm9yX2VuY29kaW5nOworCX0KKyNpZiBkZWZpbmVk KERVS19VU0VfU1RSSUNUX1VURjhfU09VUkNFKQorCWlmICh4IDwgbWluY3AgfHwgKHggPj0gMHhk ODAwVUwgJiYgeCA8PSAweGRmZmZVTCkgfHwgeCA9PSAweGZmZmVVTCkgeworCQlnb3RvIGVycm9y X2VuY29kaW5nOworCX0KKyNlbmRpZgorCisJLyogaW5wdXQgb2Zmc2V0IHRyYWNraW5nICovCisJ bGV4X2N0eC0+aW5wdXRfb2Zmc2V0ICs9IGxlbjsKKworCS8qIGxpbmUgdHJhY2tpbmcgKi8KKwlE VUtfQVNTRVJUKHggIT0gMHgwMDBhVUwgJiYgeCAhPSAweDAwMGRVTCk7CisJaWYgKCh4ID09IDB4 MjAyOFVMKSB8fCAoeCA9PSAweDIwMjlVTCkpIHsKKwkJbGV4X2N0eC0+aW5wdXRfbGluZSsrOwor CX0KKworCXJldHVybiAoZHVrX2NvZGVwb2ludF90KSB4OworCisgZXJyb3JfY2xpcHBlZDogICAv KiBjbGlwcGVkIGNvZGVwb2ludCAqLworIGVycm9yX2VuY29kaW5nOiAgLyogaW52YWxpZCBjb2Rl cG9pbnQgZW5jb2Rpbmcgb3IgY29kZXBvaW50ICovCisJRFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4 LT50aHIsIERVS19TVFJfU09VUkNFX0RFQ09ERV9GQUlMRUQpOworCURVS19XT19OT1JFVFVSTihy ZXR1cm4gMDspOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FkdmFuY2VfYnl0ZXMoZHVrX2xl eGVyX2N0eCAqbGV4X2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBjb3VudF9ieXRlcykgeworCWR1a19z bWFsbF91aW50X3Qga2VlcF9ieXRlczsKKwlkdWtfbGV4ZXJfY29kZXBvaW50ICpjcCwgKmNwX2Vu ZDsKKworCURVS19BU1NFUlRfRElTQUJMRShjb3VudF9ieXRlcyA+PSAwKTsgIC8qIHVuc2lnbmVk ICovCisJRFVLX0FTU0VSVChjb3VudF9ieXRlcyA8PSAoZHVrX3NtYWxsX3VpbnRfdCkgKERVS19M RVhFUl9XSU5ET1dfU0laRSAqIHNpemVvZihkdWtfbGV4ZXJfY29kZXBvaW50KSkpOworCisJLyog WmVybyAnY291bnQnIGlzIGFsc28gYWxsb3dlZCB0byBtYWtlIGNhbGwgc2l0ZXMgZWFzaWVyLiAq LworCisJa2VlcF9ieXRlcyA9IERVS19MRVhFUl9XSU5ET1dfU0laRSAqIHNpemVvZihkdWtfbGV4 ZXJfY29kZXBvaW50KSAtIGNvdW50X2J5dGVzOworCWR1a19tZW1tb3ZlKCh2b2lkICopIGxleF9j dHgtPndpbmRvdywKKwkgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAoKGR1a191aW50OF90ICop IGxleF9jdHgtPndpbmRvdyArIGNvdW50X2J5dGVzKSwKKwkgICAgICAgICAgICAoc2l6ZV90KSBr ZWVwX2J5dGVzKTsKKworCWNwID0gKGR1a19sZXhlcl9jb2RlcG9pbnQgKikgKChkdWtfdWludDhf dCAqKSBsZXhfY3R4LT53aW5kb3cgKyBrZWVwX2J5dGVzKTsKKwljcF9lbmQgPSBsZXhfY3R4LT53 aW5kb3cgKyBEVUtfTEVYRVJfV0lORE9XX1NJWkU7CisJZm9yICg7IGNwICE9IGNwX2VuZDsgY3Ar KykgeworCQljcC0+b2Zmc2V0ID0gbGV4X2N0eC0+aW5wdXRfb2Zmc2V0OworCQljcC0+bGluZSA9 IGxleF9jdHgtPmlucHV0X2xpbmU7CisJCWNwLT5jb2RlcG9pbnQgPSBkdWtfX3JlYWRfY2hhcihs ZXhfY3R4KTsKKwl9Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19faW5pdF9sZXhlcl93aW5kb3co ZHVrX2xleGVyX2N0eCAqbGV4X2N0eCkgeworCS8qIENhbGwgd2l0aCBjb3VudCA9PSBEVUtfTEVY RVJfV0lORE9XX1NJWkUgdG8gZmlsbCBidWZmZXIgaW5pdGlhbGx5LiAqLworCWR1a19fYWR2YW5j ZV9ieXRlcyhsZXhfY3R4LCBEVUtfTEVYRVJfV0lORE9XX1NJWkUgKiBzaXplb2YoZHVrX2xleGVy X2NvZGVwb2ludCkpOyAgLyogZmlsbCB3aW5kb3cgKi8KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9M RVhFUl9TTElESU5HX1dJTkRPVyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FkdmFuY2VfY2hh cnMoZHVrX2xleGVyX2N0eCAqbGV4X2N0eCwgZHVrX3NtYWxsX3VpbnRfdCBjb3VudF9jaGFycykg eworCWR1a19fYWR2YW5jZV9ieXRlcyhsZXhfY3R4LCBjb3VudF9jaGFycyAqIHNpemVvZihkdWtf bGV4ZXJfY29kZXBvaW50KSk7Cit9CisKKy8qCisgKiAgKFJlKWluaXRpYWxpemUgdGhlIHRlbXBv cmFyeSBieXRlIGJ1ZmZlci4gIE1heSBiZSBjYWxsZWQgZXh0cmEgdGltZXMKKyAqICB3aXRoIGxp dHRsZSBpbXBhY3QuCisgKi8KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19pbml0YnVmZmVyKGR1a19s ZXhlcl9jdHggKmxleF9jdHgpIHsKKwkvKiBSZXVzZSBidWZmZXIgYXMgaXMgdW5sZXNzIGJ1ZmZl ciBoYXMgZ3Jvd24gbGFyZ2UuICovCisJaWYgKERVS19IQlVGRkVSX0RZTkFNSUNfR0VUX1NJWkUo bGV4X2N0eC0+YnVmKSA8IERVS19MRVhFUl9URU1QX0JVRl9MSU1JVCkgeworCQkvKiBLZWVwIGN1 cnJlbnQgc2l6ZSAqLworCX0gZWxzZSB7CisJCWR1a19oYnVmZmVyX3Jlc2l6ZShsZXhfY3R4LT50 aHIsIGxleF9jdHgtPmJ1ZiwgRFVLX0xFWEVSX1RFTVBfQlVGX0xJTUlUKTsKKwl9CisKKwlEVUtf QldfSU5JVF9XSVRIQlVGKGxleF9jdHgtPnRociwgJmxleF9jdHgtPmJ3LCBsZXhfY3R4LT5idWYp OworfQorCisvKgorICogIEFwcGVuZCBhIFVuaWNvZGUgY29kZXBvaW50IHRvIHRoZSB0ZW1wb3Jh cnkgYnl0ZSBidWZmZXIuICBQZXJmb3JtcworICogIENFU1UtOCBzdXJyb2dhdGUgcGFpciBlbmNv ZGluZyBmb3IgY29kZXBvaW50cyBhYm92ZSB0aGUgQk1QLgorICogIEV4aXN0aW5nIHN1cnJvZ2F0 ZSBwYWlycyBhcmUgYWxsb3dlZCBhbmQgYWxzbyBlbmNvZGVkIGludG8gQ0VTVS04LgorICovCisK K0RVS19MT0NBTCB2b2lkIGR1a19fYXBwZW5kYnVmZmVyKGR1a19sZXhlcl9jdHggKmxleF9jdHgs IGR1a19jb2RlcG9pbnRfdCB4KSB7CisJLyoKKwkgKiAgU2luY2UgY2hhcmFjdGVyIGRhdGEgaXMg b25seSBnZW5lcmF0ZWQgYnkgZGVjb2RpbmcgdGhlIHNvdXJjZSBvciBieQorCSAqICB0aGUgY29t cGlsZXIgaXRzZWxmLCB3ZSByZWx5IG9uIHRoZSBpbnB1dCBjb2RlcG9pbnRzIGJlaW5nIGNvcnJl Y3QKKwkgKiAgYW5kIGF2b2lkIGEgY2hlY2sgaGVyZS4KKwkgKgorCSAqICBDaGFyYWN0ZXIgZGF0 YSBjYW4gYWxzbyBjb21lIGhlcmUgdGhyb3VnaCBkZWNvZGluZyBvZiBVbmljb2RlCisJICogIGVz Y2FwZXMgKCJcdWRlYWRcdWJlZWYiKSBzbyBhbGwgMTYtYnV0IHVuc2lnbmVkIHZhbHVlcyBjYW4g YmUKKwkgKiAgcHJlc2VudCwgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYgaXMgc3Ry aWN0IFVURi04LgorCSAqLworCURVS19BU1NFUlQoeCA+PSAwICYmIHggPD0gMHgxMGZmZmZMKTsK KworCURVS19CV19XUklURV9FTlNVUkVfQ0VTVTgobGV4X2N0eC0+dGhyLCAmbGV4X2N0eC0+Yncs IChkdWtfdWNvZGVwb2ludF90KSB4KTsKK30KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19hcHBlbmRi dWZmZXJfYXNjaWkoZHVrX2xleGVyX2N0eCAqbGV4X2N0eCwgZHVrX2NvZGVwb2ludF90IHgpIHsK KwkvKiBBU0NJSSBjaGFyYWN0ZXJzIGNhbiBiZSBlbWl0dGVkIGFzIGEgc2luZ2xlIGJ5dGUgd2l0 aG91dCBlbmNvZGluZworCSAqIHdoaWNoIG1hdHRlcnMgZm9yIHNvbWUgZmFzdCBwYXRocy4KKwkg Ki8KKwlEVUtfQVNTRVJUKHggPj0gMCAmJiB4IDw9IDB4N2YpOworCisJRFVLX0JXX1dSSVRFX0VO U1VSRV9VOChsZXhfY3R4LT50aHIsICZsZXhfY3R4LT5idywgKGR1a191aW50OF90KSB4KTsKK30K KworLyoKKyAqICBJbnRlcm4gdGhlIHRlbXBvcmFyeSBieXRlIGJ1ZmZlciBpbnRvIGEgdmFsc3Rh Y2sgc2xvdAorICogIChpbiBwcmFjdGljZSwgc2xvdDEgb3Igc2xvdDIpLgorICovCisKK0RVS19M T0NBTCBkdWtfaHN0cmluZyAqZHVrX19pbnRlcm5idWZmZXIoZHVrX2xleGVyX2N0eCAqbGV4X2N0 eCwgZHVrX2lkeF90IHZhbHN0YWNrX2lkeCkgeworCURVS19BU1NFUlQodmFsc3RhY2tfaWR4ID09 IGxleF9jdHgtPnNsb3QxX2lkeCB8fCB2YWxzdGFja19pZHggPT0gbGV4X2N0eC0+c2xvdDJfaWR4 KTsKKworCURVS19CV19QVVNIX0FTX1NUUklORyhsZXhfY3R4LT50aHIsICZsZXhfY3R4LT5idyk7 CisJZHVrX3JlcGxhY2UobGV4X2N0eC0+dGhyLCB2YWxzdGFja19pZHgpOworCXJldHVybiBkdWtf a25vd25faHN0cmluZyhsZXhfY3R4LT50aHIsIHZhbHN0YWNrX2lkeCk7Cit9CisKKy8qCisgKiAg SW5pdCBsZXhlciBjb250ZXh0CisgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2xleGVyX2lu aXRjdHgoZHVrX2xleGVyX2N0eCAqbGV4X2N0eCkgeworCURVS19BU1NFUlQobGV4X2N0eCAhPSBO VUxMKTsKKworCWR1a19tZW16ZXJvKGxleF9jdHgsIHNpemVvZigqbGV4X2N0eCkpOworI2lmIGRl ZmluZWQoRFVLX1VTRV9FWFBMSUNJVF9OVUxMX0lOSVQpCisjaWYgZGVmaW5lZChEVUtfVVNFX0xF WEVSX1NMSURJTkdfV0lORE9XKQorCWxleF9jdHgtPndpbmRvdyA9IE5VTEw7CisjZW5kaWYKKwls ZXhfY3R4LT50aHIgPSBOVUxMOworCWxleF9jdHgtPmlucHV0ID0gTlVMTDsKKwlsZXhfY3R4LT5i dWYgPSBOVUxMOworI2VuZGlmCit9CisKKy8qCisgKiAgU2V0IGxleGVyIGlucHV0IHBvc2l0aW9u IGFuZCByZWluaXRpYWxpemUgbG9va3VwIHdpbmRvdy4KKyAqLworCitEVUtfSU5URVJOQUwgdm9p ZCBkdWtfbGV4ZXJfZ2V0cG9pbnQoZHVrX2xleGVyX2N0eCAqbGV4X2N0eCwgZHVrX2xleGVyX3Bv aW50ICpwdCkgeworCXB0LT5vZmZzZXQgPSBsZXhfY3R4LT53aW5kb3dbMF0ub2Zmc2V0OworCXB0 LT5saW5lID0gbGV4X2N0eC0+d2luZG93WzBdLmxpbmU7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lk IGR1a19sZXhlcl9zZXRwb2ludChkdWtfbGV4ZXJfY3R4ICpsZXhfY3R4LCBkdWtfbGV4ZXJfcG9p bnQgKnB0KSB7CisJRFVLX0FTU0VSVF9ESVNBQkxFKHB0LT5vZmZzZXQgPj0gMCk7ICAvKiB1bnNp Z25lZCAqLworCURVS19BU1NFUlQocHQtPmxpbmUgPj0gMSk7CisJbGV4X2N0eC0+aW5wdXRfb2Zm c2V0ID0gcHQtPm9mZnNldDsKKwlsZXhfY3R4LT5pbnB1dF9saW5lID0gcHQtPmxpbmU7CisJZHVr X19pbml0X2xleGVyX3dpbmRvdyhsZXhfY3R4KTsKK30KKworLyoKKyAqICBMZXhpbmcgaGVscGVy cworICovCisKKy8qIE51bWVyaWMgdmFsdWUgb2YgYSBoZXggZGlnaXQgKGFsc28gY292ZXJzIG9j dGFsIGFuZCBkZWNpbWFsIGRpZ2l0cykgb3IKKyAqIC0xIGlmIG5vdCBhIHZhbGlkIGhleCBkaWdp dC4KKyAqLworRFVLX0xPQ0FMIGR1a19jb2RlcG9pbnRfdCBkdWtfX2hleHZhbF92YWxpZGF0ZShk dWtfY29kZXBvaW50X3QgeCkgeworCWR1a19zbWFsbF9pbnRfdCB0OworCisJLyogSGVyZSAneCcg aXMgYSBVbmljb2RlIGNvZGVwb2ludCAqLworCWlmIChEVUtfTElLRUxZKHggPj0gMCAmJiB4IDw9 IDB4ZmYpKSB7CisJCXQgPSBkdWtfaGV4X2RlY3RhYlt4XTsKKwkJaWYgKERVS19MSUtFTFkodCA+ PSAwKSkgeworCQkJcmV0dXJuIHQ7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qIEp1 c3QgYSB3cmFwcGVyIGZvciBjYWxsIHNpdGVzIHdoZXJlICd4JyBpcyBrbm93biB0byBiZSB2YWxp ZCBzbworICogd2UgYXNzZXJ0IGZvciBpdCBiZWZvcmUgZGVjb2RpbmcuCisgKi8KK0RVS19MT0NB TCBkdWtfY29kZXBvaW50X3QgZHVrX19oZXh2YWwoZHVrX2NvZGVwb2ludF90IHgpIHsKKwlkdWtf Y29kZXBvaW50X3QgcmV0OworCisJRFVLX0FTU0VSVCgoeCA+PSBEVUtfQVNDXzAgJiYgeCA8PSBE VUtfQVNDXzkpIHx8CisJICAgICAgICAgICAoeCA+PSBEVUtfQVNDX0xDX0EgJiYgeCA8PSBEVUtf QVNDX0xDX0YpIHx8CisJICAgICAgICAgICAoeCA+PSBEVUtfQVNDX1VDX0EgJiYgeCA8PSBEVUtf QVNDX1VDX0YpKTsKKwlyZXQgPSBkdWtfX2hleHZhbF92YWxpZGF0ZSh4KTsKKwlEVUtfQVNTRVJU KHJldCA+PSAwICYmIHJldCA8PSAxNSk7CisJcmV0dXJuIHJldDsKK30KKworLyogaGF2aW5nIHRo aXMgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBwcm92aWRlZCBhIHNpemUgYmVuZWZpdCAqLworRFVL X0xPQ0FMIGR1a19ib29sX3QgZHVrX19pc19oZXhfZGlnaXQoZHVrX2NvZGVwb2ludF90IHgpIHsK KwlpZiAoRFVLX0xJS0VMWSh4ID49IDAgJiYgeCA8PSAweGZmKSkgeworCQlyZXR1cm4gKGR1a19o ZXhfZGVjdGFiW3hdID49IDApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogUGFyc2UgYSBVbmlj b2RlIGVzY2FwZSBvZiB0aGUgZm9ybSBceEhILCBcdUhISEgsIG9yIFx1e0grfS4gIFNoYXJlZCBi eQorICogc291cmNlIGFuZCBSZWdFeHAgcGFyc2luZy4KKyAqLworRFVLX0xPQ0FMIGR1a19jb2Rl cG9pbnRfdCBkdWtfX2xleGVyX3BhcnNlX2VzY2FwZShkdWtfbGV4ZXJfY3R4ICpsZXhfY3R4LCBk dWtfYm9vbF90IGFsbG93X2VzNikgeworCWR1a19zbWFsbF9pbnRfdCBkaWdpdHM7ICAvKiBJbml0 aWFsIHZhbHVlIDIgb3IgNCBmb3IgZml4ZWQgbGVuZ3RoIGVzY2FwZXMsIDAgZm9yIEVTMjAxNSBc dXtIK30uICovCisJZHVrX2NvZGVwb2ludF90IGVzY3ZhbDsKKwlkdWtfY29kZXBvaW50X3QgeDsK KwlkdWtfc21hbGxfdWludF90IGFkdjsKKworCURVS19BU1NFUlQoRFVLX19MMCgpID09IERVS19B U0NfQkFDS1NMQVNIKTsgIC8qIGNhbGxlciByZXNwb25zaWJpbGl0aWVzICovCisJRFVLX0FTU0VS VChEVUtfX0wxKCkgPT0gRFVLX0FTQ19MQ19YIHx8IERVS19fTDEoKSA9PSBEVUtfQVNDX0xDX1Up OworCURVS19VTlJFRihhbGxvd19lczYpOworCisJYWR2ID0gMjsKKwlkaWdpdHMgPSAyOworCWlm IChEVUtfX0wxKCkgPT0gRFVLX0FTQ19MQ19VKSB7CisJCWRpZ2l0cyA9IDQ7CisjaWYgZGVmaW5l ZChEVUtfVVNFX0VTNl9VTklDT0RFX0VTQ0FQRSkKKwkJaWYgKERVS19fTDIoKSA9PSBEVUtfQVND X0xDVVJMWSAmJiBhbGxvd19lczYpIHsKKwkJCWRpZ2l0cyA9IDA7CisJCQlhZHYgPSAzOworCQl9 CisjZW5kaWYKKwl9CisJRFVLX19BRFZBTkNFQ0hBUlMobGV4X2N0eCwgYWR2KTsKKworCWVzY3Zh bCA9IDA7CisJZm9yICg7OykgeworCQkvKiBPbmUgb2YgdGhlIGVzY2FwZSBmb3JtczogXHhISCwg XHVISEhILCBcdXtIK30uCisJCSAqIFRoZSAnZGlnaXRzJyB2YXJpYWJsZSB0cmFja3MgcGFyc2lu ZyBzdGF0ZSBhbmQgaXMKKwkJICogaW5pdGlhbGl6ZWQgdG86CisJCSAqCisJCSAqICAgXHhISCAg ICAgMgorCQkgKiAgIFx1SEggICAgIDQKKwkJICogICBcdXtIK30gICAwIGZpcnN0IHRpbWUsIHVw ZGF0ZWQgdG8gLTEgdG8gaW5kaWNhdGUKKwkJICogICAgICAgICAgICBhdCBsZWFzdCBvbmUgZGln aXQgaGFzIGJlZW4gcGFyc2VkCisJCSAqCisJCSAqIE9jdGFsIHBhcnNpbmcgaXMgaGFuZGxlZCBz ZXBhcmF0ZWx5IGJlY2F1c2UgaXQgY2FuIGJlCisJCSAqIGRvbmUgd2l0aCBmaXhlZCBsb29rYWhl YWQgYW5kIGFsc28gaGFzIHZhbGlkYXRpb24KKwkJICogcnVsZXMgd2hpY2ggZGVwZW5kIG9uIHRo ZSBlc2NhcGUgbGVuZ3RoICh3aGljaCBpcworCQkgKiB2YXJpYWJsZSkuCisJCSAqCisJCSAqIFdl IGRvbid0IG5lZWQgYSBzcGVjaWZpYyBjaGVjayBmb3IgeCA8IDAgKGVuZCBvZgorCQkgKiBpbnB1 dCkgb3IgZHVrX3VuaWNvZGVfaXNfbGluZV90ZXJtaW5hdG9yKHgpCisJCSAqIGJlY2F1c2UgdGhl ICdkaWcnIGRlY29kZSB3aWxsIGZhaWwgYW5kIGxlYWQgdG8gYQorCQkgKiBTeW50YXhFcnJvci4K KwkJICovCisJCWR1a19jb2RlcG9pbnRfdCBkaWc7CisKKwkJeCA9IERVS19fTDAoKTsKKwkJRFVL X19BRFZBTkNFQ0hBUlMobGV4X2N0eCwgMSk7CisKKwkJZGlnID0gZHVrX19oZXh2YWxfdmFsaWRh dGUoeCk7CisJCWlmIChkaWdpdHMgPiAwKSB7CisJCQlkaWdpdHMtLTsKKwkJCWlmIChkaWcgPCAw KSB7CisJCQkJZ290byBmYWlsX2VzY2FwZTsKKwkJCX0KKwkJCURVS19BU1NFUlQoZGlnID49IDB4 MDAgJiYgZGlnIDw9IDB4MGYpOworCQkJZXNjdmFsID0gKGVzY3ZhbCA8PCA0KSArIGRpZzsKKwkJ CWlmIChkaWdpdHMgPT0gMCkgeworCQkJCURVS19BU1NFUlQoZXNjdmFsID49IDAgJiYgZXNjdmFs IDw9IDB4ZmZmZkwpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworI2lmIGRlZmluZWQo RFVLX1VTRV9FUzZfVU5JQ09ERV9FU0NBUEUpCisJCQlEVUtfQVNTRVJUKGRpZ2l0cyA9PSAwIC8q IGZpcnN0IHRpbWUgKi8gfHwgZGlnaXRzID09IC0xIC8qIG90aGVycyAqLyk7CisJCQlpZiAoZGln ID49IDApIHsKKwkJCQlEVUtfQVNTRVJUKGRpZyA+PSAweDAwICYmIGRpZyA8PSAweDBmKTsKKwkJ CQllc2N2YWwgPSAoZXNjdmFsIDw8IDQpICsgZGlnOworCQkJCWlmIChlc2N2YWwgPiAweDEwZmZm ZkwpIHsKKwkJCQkJZ290byBmYWlsX2VzY2FwZTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHggPT0g RFVLX0FTQ19SQ1VSTFkpIHsKKwkJCQlpZiAoZGlnaXRzID09IDApIHsKKwkJCQkJLyogRW1wdHkg ZXNjYXBlLCBcdXt9LiAqLworCQkJCQlnb3RvIGZhaWxfZXNjYXBlOworCQkJCX0KKwkJCQlEVUtf QVNTRVJUKGVzY3ZhbCA+PSAwICYmIGVzY3ZhbCA8PSAweDEwZmZmZkwpOworCQkJCWJyZWFrOwor CQkJfSBlbHNlIHsKKwkJCQlnb3RvIGZhaWxfZXNjYXBlOworCQkJfQorCQkJZGlnaXRzID0gLTE7 ICAvKiBJbmRpY2F0ZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdC4gKi8KKyNlbHNlICAvKiBE VUtfVVNFX0VTNl9VTklDT0RFX0VTQ0FQRSAqLworCQkJRFVLX0FTU0VSVCgwKTsgIC8qIE5ldmVy IGhhcHBlbnMgaWYgXHV7SCt9IHN1cHBvcnQgZGlzYWJsZWQuICovCisjZW5kaWYgIC8qIERVS19V U0VfRVM2X1VOSUNPREVfRVNDQVBFICovCisJCX0KKwl9CisKKwlyZXR1cm4gZXNjdmFsOworCisg ZmFpbF9lc2NhcGU6CisJRFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50aHIsIERVS19TVFJfSU5W QUxJRF9FU0NBUEUpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gMDspOworfQorCisvKiBQYXJz ZSBsZWdhY3kgb2N0YWwgZXNjYXBlIG9mIHRoZSBmb3JtIFxOezEsM30sIGUuZy4gXDAsIFw1LCBc MDM3Ny4gIE1heGltdW0KKyAqIGFsbG93ZWQgdmFsdWUgaXMgXDAzNzcgKFUrMDBGRiksIGxvbmdl c3QgbWF0Y2ggaXMgdXNlZC4gIFVzZWQgZm9yIGJvdGggc3RyaW5nCisgKiBSZWdFeHAgb2N0YWwg ZXNjYXBlIHBhcnNpbmcuICBXaW5kb3dbMF0gbXVzdCBiZSB0aGUgc2xhc2ggJ1wnIGFuZCB0aGUg Zmlyc3QKKyAqIGRpZ2l0IG11c3QgYWxyZWFkeSBiZSB2YWxpZGF0ZWQgdG8gYmUgaW4gWzAtOV0g YnkgdGhlIGNhbGxlci4KKyAqLworRFVLX0xPQ0FMIGR1a19jb2RlcG9pbnRfdCBkdWtfX2xleGVy X3BhcnNlX2xlZ2FjeV9vY3RhbChkdWtfbGV4ZXJfY3R4ICpsZXhfY3R4LCBkdWtfc21hbGxfdWlu dF90ICpvdXRfYWR2LCBkdWtfYm9vbF90IHJlamVjdF9hbm5leF9iKSB7CisJZHVrX2NvZGVwb2lu dF90IGNwOworCWR1a19zbWFsbF91aW50X3QgbG9va3VwX2lkeDsKKwlkdWtfc21hbGxfdWludF90 IGFkdjsKKwlkdWtfY29kZXBvaW50X3QgdG1wOworCisJRFVLX0FTU0VSVChvdXRfYWR2ICE9IE5V TEwpOworCURVS19BU1NFUlQoRFVLX19MT09LVVAobGV4X2N0eCwgMCkgPT0gRFVLX0FTQ19CQUNL U0xBU0gpOworCURVS19BU1NFUlQoRFVLX19MT09LVVAobGV4X2N0eCwgMSkgPj0gRFVLX0FTQ18w ICYmIERVS19fTE9PS1VQKGxleF9jdHgsIDEpIDw9IERVS19BU0NfOSk7CisKKwljcCA9IDA7CisJ dG1wID0gMDsKKwlmb3IgKGxvb2t1cF9pZHggPSAxOyBsb29rdXBfaWR4IDw9IDM7IGxvb2t1cF9p ZHgrKykgeworCQlEVUtfREREKERVS19ERERQUklOVCgibG9va3VwX2lkeD0lbGQsIGNwPSVsZCIs IChsb25nKSBsb29rdXBfaWR4LCAobG9uZykgY3ApKTsKKwkJdG1wID0gRFVLX19MT09LVVAobGV4 X2N0eCwgbG9va3VwX2lkeCk7CisJCWlmICh0bXAgPCBEVUtfQVNDXzAgfHwgdG1wID4gRFVLX0FT Q183KSB7CisJCQkvKiBObyBtb3JlIHZhbGlkIGRpZ2l0cy4gKi8KKwkJCWJyZWFrOworCQl9CisJ CXRtcCA9IChjcCA8PCAzKSArICh0bXAgLSBEVUtfQVNDXzApOworCQlpZiAodG1wID4gMHhmZikg eworCQkJLyogVGhyZWUgZGlnaXQgb2N0YWwgZXNjYXBlcyBhYm92ZSBcMzc3ICg9IDB4ZmYpCisJ CQkgKiBhcmUgbm90IGFsbG93ZWQuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCWNwID0gdG1w OworCX0KKwlEVUtfREREKERVS19ERERQUklOVCgiZmluYWwgbG9va3VwX2lkeD0lbGQsIGNwPSVs ZCIsIChsb25nKSBsb29rdXBfaWR4LCAobG9uZykgY3ApKTsKKworCWFkdiA9IGxvb2t1cF9pZHg7 CisJaWYgKGxvb2t1cF9pZHggPT0gMSkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiXFw4IG9y IFxcOSAtPiB0cmVhdCBhcyBsaXRlcmFsLCBhY2NlcHQgaW4gc3RyaWN0IG1vZGUgdG9vIikpOwor CQlEVUtfQVNTRVJUKHRtcCA9PSBEVUtfQVNDXzggfHwgdG1wID09IERVS19BU0NfOSk7CisJCWNw ID0gdG1wOworCQlhZHYrKzsgIC8qIGNvcnJlY3Rpb24gdG8gYWJvdmUsIGVhdCBvZmZlbmRpbmcg Y2hhcmFjdGVyICovCisJfSBlbHNlIGlmIChsb29rdXBfaWR4ID09IDIgJiYgY3AgPT0gMCkgewor CQkvKiBOb3RlOiAnZm9vXDBiYXInIGlzIE9LIGluIHN0cmljdCBtb2RlLCBidXQgJ2Zvb1wwMGJh cicgaXMgbm90LgorCQkgKiBJdCB3b24ndCBiZSBpbnRlcnByZXRlZCBhcyAnZm9vXHV7MH0wYmFy JyBidXQgYXMgYSBTeW50YXhFcnJvci4KKwkJICovCisJCURVS19EREQoRFVLX0RERFBSSU5UKCJc XDAgLT4gYWNjZXB0IGluIHN0cmljdCBtb2RlIHRvbyIpKTsKKwl9IGVsc2UgeworCQkvKiBUaGlz IGNsYXVzZSBhbHNvIGhhbmRsZXMgbm9uLXNob3J0ZXN0IHplcm8sIGUuZy4gXDAwLiAqLworCQlp ZiAocmVqZWN0X2FubmV4X2IpIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJub24temVybyBv Y3RhbCBsaXRlcmFsICVsZCAtPiByZWplY3QgaW4gc3RyaWN0LW1vZGUiLCAobG9uZykgY3ApKTsK KwkJCWNwID0gLTE7CisJCX0gZWxzZSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgibm9uLXpl cm8gb2N0YWwgbGl0ZXJhbCAlbGQgLT4gYWNjZXB0ZWQiLCAobG9uZykgY3ApKTsKKwkJCURVS19B U1NFUlQoY3AgPj0gMCAmJiBjcCA8PSAweGZmKTsKKwkJfQorCX0KKworCSpvdXRfYWR2ID0gYWR2 OworCisJRFVLX0FTU0VSVCgoY3AgPj0gMCAmJiBjcCA8PSAweGZmKSB8fCAoY3AgPT0gLTEgJiYg cmVqZWN0X2FubmV4X2IpKTsKKwlyZXR1cm4gY3A7Cit9CisKKy8qIFhYWDogbW92ZSBzdHJpY3Qg bW9kZSB0byBsZXhfY3R4PyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19sZXhlcl9wYXJzZV9zdHJp bmdfbGl0ZXJhbChkdWtfbGV4ZXJfY3R4ICpsZXhfY3R4LCBkdWtfdG9rZW4gKm91dF90b2tlbiwg ZHVrX3NtYWxsX2ludF90IHF1b3RlLCBkdWtfYm9vbF90IHN0cmljdF9tb2RlKSB7CisJZHVrX3Nt YWxsX3VpbnRfdCBhZHY7CisKKwlmb3IgKGFkdiA9IDEgLyogaW5pdGlhbCBxdW90ZSAqLyA7Oykg eworCQlkdWtfY29kZXBvaW50X3QgeDsKKworCQlEVUtfX0FEVkFOQ0VDSEFSUyhsZXhfY3R4LCBh ZHYpOyAgLyogZWF0IG9wZW5pbmcgcXVvdGUgb24gZmlyc3QgbG9vcCAqLworCQl4ID0gRFVLX19M MCgpOworCisJCWFkdiA9IDE7CisJCWlmICh4ID09IHF1b3RlKSB7CisJCQlEVUtfX0FEVkFOQ0VD SEFSUyhsZXhfY3R4LCAxKTsgIC8qIGVhdCBjbG9zaW5nIHF1b3RlICovCisJCQlicmVhazsKKwkJ fSBlbHNlIGlmICh4ID09ICdcXCcpIHsKKwkJCS8qIERVS19fTDAgICAgICAgIC0+ICdcJyBjaGFy CisJCQkgKiBEVUtfX0wxIC4uLiBEVUtfX0w1IC0+IG1vcmUgbG9va3VwCisJCQkgKi8KKwkJCWR1 a19zbWFsbF9pbnRfdCBlbWl0Y3AgPSAtMTsKKworCQkJeCA9IERVS19fTDEoKTsKKworCQkJLyog SG93IG11Y2ggdG8gYWR2YW5jZSBiZWZvcmUgbmV4dCBsb29wLiAqLworCQkJYWR2ID0gMjsgIC8q IG5vdGU6IGxvbmcgbGl2ZSByYW5nZSAqLworCisJCQlzd2l0Y2ggKHgpIHsKKwkJCWNhc2UgJ1wn JzoKKwkJCQllbWl0Y3AgPSAweDAwMjc7CisJCQkJYnJlYWs7CisJCQljYXNlICciJzoKKwkJCQll bWl0Y3AgPSAweDAwMjI7CisJCQkJYnJlYWs7CisJCQljYXNlICdcXCc6CisJCQkJZW1pdGNwID0g MHgwMDVjOworCQkJCWJyZWFrOworCQkJY2FzZSAnYic6CisJCQkJZW1pdGNwID0gMHgwMDA4Owor CQkJCWJyZWFrOworCQkJY2FzZSAnZic6CisJCQkJZW1pdGNwID0gMHgwMDBjOworCQkJCWJyZWFr OworCQkJY2FzZSAnbic6CisJCQkJZW1pdGNwID0gMHgwMDBhOworCQkJCWJyZWFrOworCQkJY2Fz ZSAncic6CisJCQkJZW1pdGNwID0gMHgwMDBkOworCQkJCWJyZWFrOworCQkJY2FzZSAndCc6CisJ CQkJZW1pdGNwID0gMHgwMDA5OworCQkJCWJyZWFrOworCQkJY2FzZSAndic6CisJCQkJZW1pdGNw ID0gMHgwMDBiOworCQkJCWJyZWFrOworCQkJY2FzZSAneCc6CisJCQljYXNlICd1JzogeworCQkJ CWR1a19jb2RlcG9pbnRfdCBlc2NfY3A7CisJCQkJZXNjX2NwID0gZHVrX19sZXhlcl9wYXJzZV9l c2NhcGUobGV4X2N0eCwgMSAvKmFsbG93X2VzNiovKTsKKwkJCQlEVUtfX0FQUEVOREJVRkZFUihs ZXhfY3R4LCBlc2NfY3ApOworCQkJCWFkdiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZh dWx0OiB7CisJCQkJaWYgKGR1a191bmljb2RlX2lzX2xpbmVfdGVybWluYXRvcih4KSkgeworCQkJ CQkvKiBsaW5lIGNvbnRpbnVhdGlvbiAqLworCQkJCQlpZiAoeCA9PSAweDAwMGQgJiYgRFVLX19M MigpID09IDB4MDAwYSkgeworCQkJCQkJLyogQ1IgTEYgYWdhaW4gYSBzcGVjaWFsIGNhc2UgKi8K KwkJCQkJCWFkdiA9IDM7ICAvKiBsaW5lIHRlcm1pbmF0b3IsIENSLCBMRiAqLworCQkJCQl9CisJ CQkJfSBlbHNlIGlmIChEVUtfX0lTRElHSVQoeCkpIHsKKwkJCQkJLyoKKwkJCQkJICogIE9jdGFs IGVzY2FwZSBvciB6ZXJvIGVzY2FwZToKKwkJCQkJICogICAgXDAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvb2thaGVhZCBub3QgT2N0YWxEaWdpdCkKKwkJCQkJICogICAg XDEgLi4uIFw3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvb2thaGVhZCBub3QgT2N0 YWxEaWdpdCkKKwkJCQkJICogICAgXFplcm9Ub1RocmVlIE9jdGFsRGlnaXQgICAgICAgICAgICAg ICAgKGxvb2thaGVhZCBub3QgT2N0YWxEaWdpdCkKKwkJCQkJICogICAgXEZvdXJUb1NldmVuIE9j dGFsRGlnaXQgICAgICAgICAgICAgICAgKG5vIGxvb2thaGVhZCByZXN0cmljdGlvbnMpCisJCQkJ CSAqICAgIFxaZXJvVG9UaHJlZSBPY3RhbERpZ2l0IE9jdGFsRGlnaXQgICAgIChubyBsb29rYWhl YWQgcmVzdHJpY3Rpb25zKQorCQkJCQkgKgorCQkJCQkgKiAgWmVybyBlc2NhcGUgaXMgcGFydCBv ZiB0aGUgc3RhbmRhcmQgc3ludGF4LiAgT2N0YWwgZXNjYXBlcyBhcmUKKwkJCQkJICogIGRlZmlu ZWQgaW4gRTUgU2VjdGlvbiBCLjEuMiwgYW5kIGFyZSBvbmx5IGFsbG93ZWQgaW4gbm9uLXN0cmlj dCBtb2RlLgorCQkJCQkgKiAgQW55IG90aGVyIHByb2R1Y3Rpb25zIHN0YXJ0aW5nIHdpdGggYSBk ZWNpbWFsIGRpZ2l0IGFyZSBpbnZhbGlkCisJCQkJCSAqICBidXQgYXJlIGluIHByYWN0aWNlIHRy ZWF0ZWQgbGlrZSBpZGVudGl0eSBlc2NhcGVzLgorCQkJCQkgKgorCQkJCQkgKiAgUGFyc2Ugb2N0 YWwgKHVwIHRvIDMgZGlnaXRzKSBmcm9tIHRoZSBsb29rdXAgd2luZG93LgorCQkJCQkgKi8KKwor CQkJCQllbWl0Y3AgPSBkdWtfX2xleGVyX3BhcnNlX2xlZ2FjeV9vY3RhbChsZXhfY3R4LCAmYWR2 LCBzdHJpY3RfbW9kZSAvKnJlamVjdF9hbm5leF9iKi8pOworCQkJCQlpZiAoZW1pdGNwIDwgMCkg eworCQkJCQkJZ290byBmYWlsX2VzY2FwZTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoeCA8IDAp IHsKKwkJCQkJZ290byBmYWlsX3VudGVybWluYXRlZDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBl c2NhcGVkIE5vbkVzY2FwZUNoYXJhY3RlciAqLworCQkJCQlEVUtfX0FQUEVOREJVRkZFUihsZXhf Y3R4LCB4KTsKKwkJCQl9CisJCQl9ICAvKiBlbmQgZGVmYXVsdCBjbGF1c2UgKi8KKwkJCX0gIC8q IGVuZCBzd2l0Y2ggKi8KKworCQkJLyogU2hhcmVkIGhhbmRsaW5nIGZvciBzaW5nbGUgY29kZXBv aW50IGVzY2FwZXMuICovCisJCQlpZiAoZW1pdGNwID49IDApIHsKKwkJCQlEVUtfX0FQUEVOREJV RkZFUihsZXhfY3R4LCBlbWl0Y3ApOworCQkJfQorCisJCQkvKiBUcmFjayBudW1iZXIgb2YgZXNj YXBlczsgY291bnQgbm90IHJlYWxseSBuZWVkZWQgYnV0IGRpcmVjdGl2ZQorCQkJICogcHJvbG9n dWVzIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlcmUgd2VyZSBhbnkgZXNjYXBlcyBvciBsaW5l CisJCQkgKiBjb250aW51YXRpb25zIG9yIG5vdC4KKwkJCSAqLworCQkJb3V0X3Rva2VuLT5udW1f ZXNjYXBlcysrOworCQl9IGVsc2UgaWYgKHggPj0gMHgyMCAmJiB4IDw9IDB4N2YpIHsKKwkJCS8q IEZhc3QgcGF0aCBmb3IgQVNDSUkgY2FzZSwgYXZvaWRzIGxpbmUgdGVybWluYXRvcgorCQkJICog Y2hlY2sgYW5kIENFU1UtOCBlbmNvZGluZy4KKwkJCSAqLworCQkJRFVLX0FTU0VSVCh4ID49IDAp OworCQkJRFVLX0FTU0VSVCghZHVrX3VuaWNvZGVfaXNfbGluZV90ZXJtaW5hdG9yKHgpKTsKKwkJ CURVS19BU1NFUlQoeCAhPSBxdW90ZSk7CisJCQlEVUtfQVNTRVJUKHggIT0gRFVLX0FTQ19CQUNL U0xBU0gpOworCQkJRFVLX19BUFBFTkRCVUZGRVJfQVNDSUkobGV4X2N0eCwgeCk7CisJCX0gZWxz ZSBpZiAoeCA8IDAgfHwgZHVrX3VuaWNvZGVfaXNfbGluZV90ZXJtaW5hdG9yKHgpKSB7CisJCQln b3RvIGZhaWxfdW50ZXJtaW5hdGVkOworCQl9IGVsc2UgeworCQkJLyogQ2hhcmFjdGVyIHdoaWNo IGlzIHBhcnQgb2YgdGhlIHN0cmluZyBidXQgd2Fzbid0IGhhbmRsZWQKKwkJCSAqIGJ5IHRoZSBm YXN0IHBhdGguCisJCQkgKi8KKwkJCURVS19fQVBQRU5EQlVGRkVSKGxleF9jdHgsIHgpOworCQl9 CisJfSAvKiBzdHJpbmcgcGFyc2UgbG9vcCAqLworCisJcmV0dXJuOworCisgZmFpbF9lc2NhcGU6 CisJRFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50aHIsIERVS19TVFJfSU5WQUxJRF9FU0NBUEUp OworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKworIGZhaWxfdW50ZXJtaW5hdGVkOgorCURV S19FUlJPUl9TWU5UQVgobGV4X2N0eC0+dGhyLCBEVUtfU1RSX1VOVEVSTUlOQVRFRF9TVFJJTkcp OworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyogU2tpcCB0byBlbmQtb2YtbGlu ZSAob3IgZW5kLW9mLWZpbGUpLCB1c2VkIGZvciBzaW5nbGUgbGluZSBjb21tZW50cy4gKi8KK0RV S19MT0NBTCB2b2lkIGR1a19fbGV4ZXJfc2tpcF90b19lbmRvZmxpbmUoZHVrX2xleGVyX2N0eCAq bGV4X2N0eCkgeworCWZvciAoOzspIHsKKwkJZHVrX2NvZGVwb2ludF90IHg7CisKKwkJeCA9IERV S19fTDAoKTsKKwkJaWYgKHggPCAwIHx8IGR1a191bmljb2RlX2lzX2xpbmVfdGVybWluYXRvcih4 KSkgeworCQkJYnJlYWs7CisJCX0KKwkJRFVLX19BRFZBTkNFQ0hBUlMobGV4X2N0eCwgMSk7CisJ fQorfQorCisvKgorICogIFBhcnNlIEVDTUFTY3JpcHQgc291cmNlIElucHV0RWxlbWVudERpdiBv ciBJbnB1dEVsZW1lbnRSZWdFeHAKKyAqICAoRTUgU2VjdGlvbiA3KSwgc2tpcHBpbmcgd2hpdGVz cGFjZSwgY29tbWVudHMsIGFuZCBsaW5lIHRlcm1pbmF0b3JzLgorICoKKyAqICBQb3NzaWJsZSBy ZXN1bHRzIGFyZToKKyAqICAgICgxKSBhIHRva2VuCisgKiAgICAoMikgYSBsaW5lIHRlcm1pbmF0 b3IgKHNraXBwZWQpCisgKiAgICAoMykgYSBjb21tZW50IChza2lwcGVkKQorICogICAgKDQpIEVP RgorICoKKyAqICBXaGl0ZSBzcGFjZSBpcyBhdXRvbWF0aWNhbGx5IHNraXBwZWQgZnJvbSB0aGUg Y3VycmVudCBwb3NpdGlvbiAoYnV0CisgKiAgbm90IGFmdGVyIHRoZSBpbnB1dCBlbGVtZW50KS4g IElmIGlucHV0IGhhcyBhbHJlYWR5IGVuZGVkLCByZXR1cm5zCisgKiAgRFVLX1RPS19FT0YgaW5k ZWZpbml0ZWx5LiAgSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMsIHVzZXMgYW4gRFVLX0VSUk9SKCkK KyAqICBtYWNybyBjYWxsIChhbmQgaGVuY2UgYSBsb25nam1wIHRocm91Z2ggY3VycmVudCBoZWFw IGxvbmdqbXAgY29udGV4dCkuCisgKiAgQ29tbWVudHMgYW5kIGxpbmUgdGVybWluYXRvciB0b2tl bnMgYXJlIGF1dG9tYXRpY2FsbHkgc2tpcHBlZC4KKyAqCisgKiAgVGhlIGlucHV0IGVsZW1lbnQg YmVpbmcgbWF0Y2hlZCBpcyBkZXRlcm1pbmVkIGJ5IHJlZ2V4cF9tb2RlOyBpZiBzZXQsCisgKiAg cGFyc2VzIGEgSW5wdXRFbGVtZW50UmVnRXhwLCBvdGhlcndpc2UgYSBJbnB1dEVsZW1lbnREaXYu ICBUaGUKKyAqICBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgYXJlIGhhbmRsaW5nIG9mIHByb2R1 Y3Rpb25zIHN0YXJ0aW5nIHdpdGggYQorICogIGZvcndhcmQgc2xhc2guCisgKgorICogIElmIHN0 cmljdF9tb2RlIGlzIHNldCwgcmVjb2duaXplcyBhZGRpdGlvbmFsIGZ1dHVyZSByZXNlcnZlZCB3 b3JkcworICogIHNwZWNpZmljIHRvIHN0cmljdCBtb2RlLCBhbmQgcmVmdXNlcyB0byBwYXJzZSBv Y3RhbCBsaXRlcmFscy4KKyAqCisgKiAgVGhlIG1hdGNoaW5nIHN0cmF0ZWd5IGJlbG93IGlzIHRv IChjdXJyZW50bHkpIHVzZSBhIHNpeCBjaGFyYWN0ZXIKKyAqICBsb29rdXAgd2luZG93IHRvIHF1 aWNrbHkgZGV0ZXJtaW5lIHdoaWNoIHByb2R1Y3Rpb24gaXMgdGhlIC1sb25nZXN0LQorICogIG1h dGNoaW5nIG9uZSwgYW5kIHRoZW4gcGFyc2UgdGhhdC4gIFRoZSB0b3AtbGV2ZWwgaWYtZWxzZSBj bGF1c2VzCisgKiAgbWF0Y2ggdGhlIGZpcnN0IGNoYXJhY3RlciwgYW5kIHRoZSBjb2RlIGJsb2Nr cyBmb3IgZWFjaCBjbGF1c2UKKyAqICBoYW5kbGUgLWFsbC0gYWx0ZXJuYXRpdmVzIGZvciB0aGF0 IGZpcnN0IGNoYXJhY3Rlci4gIEVDTUFTY3JpcHQKKyAqICBzcGVjaWZpY2F0aW9uIHVzZXMgdGhl ICJsb25nZXN0IG1hdGNoIHdpbnMiIHNlbWFudGljcywgc28gdGhlIG9yZGVyCisgKiAgb2YgdGhl IGlmLWNsYXVzZXMgbWF0dGVycy4KKyAqCisgKiAgTWlzYyBub3RlczoKKyAqCisgKiAgICAqIEVD TUFTY3JpcHQgbnVtZXJpYyBsaXRlcmFscyBkbyBub3QgYWNjZXB0IGEgc2lnbiBjaGFyYWN0ZXIu CisgKiAgICAgIENvbnNlcXVlbnRseSBlLmcuICItMS4wIiBpcyBwYXJzZWQgYXMgdHdvIHRva2Vu czogYSBuZWdhdGl2ZQorICogICAgICBzaWduIGFuZCBhIHBvc2l0aXZlIG51bWVyaWMgbGl0ZXJh bC4gIFRoZSBjb21waWxlciBwZXJmb3JtcworICogICAgICB0aGUgbmVnYXRpb24gZHVyaW5nIGNv bXBpbGF0aW9uLCBzbyB0aGlzIGhhcyBubyBhZHZlcnNlIGltcGFjdC4KKyAqCisgKiAgICAqIFRo ZXJlIGlzIG5vIHRva2VuIGZvciAidW5kZWZpbmVkIjogaXQgaXMganVzdCBhIHZhbHVlIGF2YWls YWJsZQorICogICAgICBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0IChvciBzaW1wbHkgZXN0YWJsaXNo ZWQgYnkgZG9pbmcgYSByZWZlcmVuY2UKKyAqICAgICAgdG8gYW4gdW5kZWZpbmVkIHZhbHVlKS4K KyAqCisgKiAgICAqIFNvbWUgY29udGV4dHMgd2FudCBJZGVudGlmaWVyIHRva2Vucywgd2hpY2gg YXJlIElkZW50aWZpZXJOYW1lcworICogICAgICBleGNsdWRpbmcgcmVzZXJ2ZWQgd29yZHMsIHdo aWxlIHNvbWUgY29udGV4dHMgd2FudCBJZGVudGlmaWVyTmFtZXMKKyAqICAgICAgZGlyZWN0bHku ICBJbiB0aGUgbGF0dGVyIGNhc2UgZS5nLiAid2hpbGUiIGlzIGludGVycHJldGVkIGFzIGFuCisg KiAgICAgIGlkZW50aWZpZXIgbmFtZSwgbm90IGEgRFVLX1RPS19XSElMRSB0b2tlbi4gIFRoZSBz b2x1dGlvbiBoZXJlIGlzCisgKiAgICAgIHRvIHByb3ZpZGUgYm90aCB0b2tlbiB0eXBlczogRFVL X1RPS19XSElMRSBnb2VzIHRvICd0JyB3aGlsZQorICogICAgICBEVUtfVE9LX0lERU5USUZJRVIg Z29lcyB0byAndF9ub3JlcycsIGFuZCAnc2xvdDEnIGFsd2F5cyBjb250YWlucworICogICAgICB0 aGUgaWRlbnRpZmllciAvIGtleXdvcmQgbmFtZS4KKyAqCisgKiAgICAqIERpcmVjdGl2ZSBwcm9s b2d1ZSBuZWVkcyB0byBpZGVudGlmeSBzdHJpbmcgbGl0ZXJhbHMgc3VjaCBhcworICogICAgICAi dXNlIHN0cmljdCIgYW5kICd1c2Ugc3RyaWN0Jywgd2hpY2ggYXJlIHNlbnNpdGl2ZSB0byBsaW5l CisgKiAgICAgIGNvbnRpbnVhdGlvbnMgYW5kIGVzY2FwZSBzZXF1ZW5jZXMuICBGb3IgaW5zdGFu Y2UsICJ1c2VcdTAwMjBzdHJpY3QiCisgKiAgICAgIGlzIGEgdmFsaWQgZGlyZWN0aXZlIGJ1dCBp cyBkaXN0aW5jdCBmcm9tICJ1c2Ugc3RyaWN0Ii4gIFRoZSBzb2x1dGlvbgorICogICAgICBoZXJl IGlzIHRvIGRlY29kZSBlc2NhcGVzIHdoaWxlIHRva2VuaXppbmcsIGJ1dCB0byBrZWVwIHRyYWNr IG9mIHRoZQorICogICAgICBudW1iZXIgb2YgZXNjYXBlcy4gIERpcmVjdGl2ZSBkZXRlY3Rpb24g Y2FuIHRoZW4gY2hlY2sgdGhhdCB0aGUKKyAqICAgICAgbnVtYmVyIG9mIGVzY2FwZXMgaXMgemVy by4KKyAqCisgKiAgICAqIE11bHRpLWxpbmUgY29tbWVudHMgd2l0aCBvbmUgb3IgbW9yZSBpbnRl cm5hbCBMaW5lVGVybWluYXRvciBhcmUKKyAqICAgICAgdHJlYXRlZCBsaWtlIGEgbGluZSB0ZXJt aW5hdG9yIHRvIGNvbXBseSB3aXRoIGF1dG9tYXRpYyBzZW1pY29sb24KKyAqICAgICAgaW5zZXJ0 aW9uLgorICovCisKK0RVS19JTlRFUk5BTAordm9pZCBkdWtfbGV4ZXJfcGFyc2VfanNfaW5wdXRf ZWxlbWVudChkdWtfbGV4ZXJfY3R4ICpsZXhfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfdG9rZW4gKm91dF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xfdCBzdHJpY3RfbW9kZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2Jvb2xfdCByZWdleHBfbW9kZSkgeworCWR1a19j b2RlcG9pbnRfdCB4OyAgICAgICAgICAgLyogdGVtcG9yYXJ5LCBtdXN0IGJlIHNpZ25lZCBhbmQg MzItYml0IHRvIGhvbGQgVW5pY29kZSBjb2RlIHBvaW50cyAqLworCWR1a19zbWFsbF91aW50X3Qg YWR2dG9rID0gMDsgLyogKGFkdmFuY2UgPDwgOCkgKyB0b2tlbl90eXBlLCB1cGRhdGVkIGF0IGZ1 bmN0aW9uIGVuZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGluaXQgaXMgdW5u ZWNlc3NhcnkgYnV0IHN1cHByZXNzZXMgIm1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQiIHdhcm5p bmdzLgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJZHVrX2Jvb2xfdCBnb3Rf bGluZXRlcm0gPSAwOyAgLyogZ290IGxpbmV0ZXJtIHByZWNlZGluZyBub24td2hpdGVzcGFjZSwg bm9uLWxpbmV0ZXJtIHRva2VuICovCisKKwlpZiAoKytsZXhfY3R4LT50b2tlbl9jb3VudCA+PSBs ZXhfY3R4LT50b2tlbl9saW1pdCkgeworCQlnb3RvIGZhaWxfdG9rZW5fbGltaXQ7CisJfQorCisJ b3V0X3Rva2VuLT50ID0gRFVLX1RPS19FT0Y7CisJb3V0X3Rva2VuLT50X25vcmVzID0gRFVLX1RP S19JTlZBTElEOyAgLyogbWFya2VyOiBjb3B5IHQgaWYgbm90IGNoYW5nZWQgKi8KKyNpZiAwICAv KiBub3QgbmVjZXNzYXJ5IHRvIGluaXQsIGRpc2FibGVkIGZvciBmYXN0ZXIgcGFyc2luZyAqLwor CW91dF90b2tlbi0+bnVtID0gRFVLX0RPVUJMRV9OQU47CisJb3V0X3Rva2VuLT5zdHIxID0gTlVM TDsKKwlvdXRfdG9rZW4tPnN0cjIgPSBOVUxMOworI2VuZGlmCisJb3V0X3Rva2VuLT5udW1fZXNj YXBlcyA9IDA7CisJLyogb3V0X3Rva2VuLT5saW5ldGVybSBzZXQgYnkgY2FsbGVyICovCisKKwkv KiBUaGlzIHdvdWxkIGJlIG5pY2UsIGJ1dCBwYXJzaW5nIGlzIGZhc3RlciB3aXRob3V0IHJlc2V0 dGluZyB0aGUKKwkgKiB2YWx1ZSBzbG90cy4gIFRoZSBvbmx5IHNpZGUgZWZmZWN0IGlzIHRoYXQg cmVmZXJlbmNlcyB0byB0ZW1wb3JhcnkKKwkgKiBzdHJpbmcgdmFsdWVzIG1heSBsaW5nZXIgdW50 aWwgbGV4aW5nIGlzIGZpbmlzaGVkOyB0aGV5J3JlIHRoZW4KKwkgKiBmcmVlZCBub3JtYWxseS4K KwkgKi8KKyNpZiAwCisJZHVrX3RvX3VuZGVmaW5lZChsZXhfY3R4LT50aHIsIGxleF9jdHgtPnNs b3QxX2lkeCk7CisJZHVrX3RvX3VuZGVmaW5lZChsZXhfY3R4LT50aHIsIGxleF9jdHgtPnNsb3Qy X2lkeCk7CisjZW5kaWYKKworCS8qICdhZHZ0b2snIGluZGljYXRlcyBob3cgbXVjaCB0byBhZHZh bmNlIGFuZCB3aGljaCB0b2tlbiBpZCB0byBhc3NpZ24KKwkgKiBhdCB0aGUgZW5kLiAgVGhpcyBz aGFyZWQgZnVuY3Rpb25hbGl0eSBtaW5pbWl6ZXMgY29kZSBzaXplLiAgQWxsCisJICogY29kZSBw YXRocyBhcmUgcmVxdWlyZWQgdG8gc2V0ICdhZHZ0b2snIHRvIHNvbWUgdmFsdWUsIHNvIG5vIGRl ZmF1bHQKKwkgKiBpbml0IHZhbHVlIGlzIHVzZWQuICBDb2RlIHBhdGhzIGNhbGxpbmcgRFVLX0VS Uk9SKCkgbmV2ZXIgcmV0dXJuIHNvCisJICogdGhleSBkb24ndCBuZWVkIHRvIHNldCBhZHZ0b2su CisJICovCisKKwkvKgorCSAqICBNYXRjaGluZyBvcmRlcjoKKwkgKgorCSAqICAgIFB1bmN0dWF0 b3IgZmlyc3QgY2hhcnMsIGFsc28gY292ZXJzIGNvbW1lbnRzLCByZWdleHBzCisJICogICAgTGlu ZVRlcm1pbmF0b3IKKwkgKiAgICBJZGVudGlmaWVyIG9yIHJlc2VydmVkIHdvcmQsIGFsc28gY292 ZXJzIG51bGwvdHJ1ZS9mYWxzZSBsaXRlcmFscworCSAqICAgIE51bWVyaWNMaXRlcmFsCisJICog ICAgU3RyaW5nTGl0ZXJhbAorCSAqICAgIEVPRgorCSAqCisJICogIFRoZSBvcmRlciBkb2VzIG5v dCBtYXR0ZXIgYXMgbG9uZyBhcyB0aGUgbG9uZ2VzdCBtYXRjaCBpcworCSAqICBhbHdheXMgY29y cmVjdGx5IGlkZW50aWZpZWQuICBUaGVyZSBhcmUgb3JkZXIgZGVwZW5kZW5jaWVzCisJICogIGlu IHRoZSBjbGF1c2VzLCBzbyBpdCdzIG5vdCB0cml2aWFsIHRvIGNvbnZlcnQgdG8gYSBzd2l0Y2gu CisJICovCisKKyByZXN0YXJ0X2xpbmV1cGRhdGU6CisJb3V0X3Rva2VuLT5zdGFydF9saW5lID0g bGV4X2N0eC0+d2luZG93WzBdLmxpbmU7CisKKyByZXN0YXJ0OgorCW91dF90b2tlbi0+c3RhcnRf b2Zmc2V0ID0gbGV4X2N0eC0+d2luZG93WzBdLm9mZnNldDsKKworCXggPSBEVUtfX0wwKCk7CisK Kwlzd2l0Y2ggKHgpIHsKKwljYXNlIERVS19BU0NfU1BBQ0U6CisJY2FzZSBEVUtfQVNDX0hUOiAg LyogZmFzdCBwYXRocyBmb3Igc3BhY2UgYW5kIHRhYiAqLworCQlEVUtfX0FEVkFOQ0VDSEFSUyhs ZXhfY3R4LCAxKTsKKwkJZ290byByZXN0YXJ0OworCWNhc2UgRFVLX0FTQ19MRjogIC8qIExGIGxp bmUgdGVybWluYXRvcjsgQ1IgTEYgYW5kIFVuaWNvZGUgbGluZXRlcm1zIGFyZSBoYW5kbGVkIGlu IHNsb3cgcGF0aCAqLworCQlEVUtfX0FEVkFOQ0VDSEFSUyhsZXhfY3R4LCAxKTsKKwkJZ290X2xp bmV0ZXJtID0gMTsKKwkJZ290byByZXN0YXJ0X2xpbmV1cGRhdGU7CisjaWYgZGVmaW5lZChEVUtf VVNFX1NIRUJBTkdfQ09NTUVOVFMpCisJY2FzZSBEVUtfQVNDX0hBU0g6ICAvKiAnIycgKi8KKwkJ aWYgKERVS19fTDEoKSA9PSBEVUtfQVNDX0VYQ0xBTUFUSU9OICYmIGxleF9jdHgtPndpbmRvd1sw XS5vZmZzZXQgPT0gMCAmJgorCQkgICAgKGxleF9jdHgtPmZsYWdzICYgRFVLX0NPTVBJTEVfU0hF QkFORykpIHsKKwkJCS8qICJTaGViYW5nIiBjb21tZW50ICgnIyEgLi4uJykgb24gZmlyc3QgbGlu ZS4gKi8KKwkJCS8qIERVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIDIpIHdvdWxkIGJlIGNvcnJl Y3QgaGVyZSwgYnV0IG5vdCBuZWNlc3NhcnkgKi8KKwkJCWR1a19fbGV4ZXJfc2tpcF90b19lbmRv ZmxpbmUobGV4X2N0eCk7CisJCQlnb3RvIHJlc3RhcnQ7ICAvKiBsaW5lIHRlcm1pbmF0b3Igd2ls bCBiZSBoYW5kbGVkIG9uIG5leHQgcm91bmQgKi8KKwkJfQorCQlnb3RvIGZhaWxfdG9rZW47Cisj ZW5kaWYgIC8qIERVS19VU0VfU0hFQkFOR19DT01NRU5UUyAqLworCWNhc2UgRFVLX0FTQ19TTEFT SDogIC8qICcvJyAqLworCQlpZiAoRFVLX19MMSgpID09IERVS19BU0NfU0xBU0gpIHsKKwkJCS8q CisJCQkgKiAgRTUgU2VjdGlvbiA3LjQsIGFsbG93IFNvdXJjZUNoYXJhY3RlciAod2hpY2ggaXMg YW55IDE2LWJpdAorCQkJICogIGNvZGUgcG9pbnQpLgorCQkJICovCisKKwkJCS8qIERVS19fQURW QU5DRUNIQVJTKGxleF9jdHgsIDIpIHdvdWxkIGJlIGNvcnJlY3QgaGVyZSwgYnV0IG5vdCBuZWNl c3NhcnkgKi8KKwkJCWR1a19fbGV4ZXJfc2tpcF90b19lbmRvZmxpbmUobGV4X2N0eCk7CisJCQln b3RvIHJlc3RhcnQ7ICAvKiBsaW5lIHRlcm1pbmF0b3Igd2lsbCBiZSBoYW5kbGVkIG9uIG5leHQg cm91bmQgKi8KKwkJfSBlbHNlIGlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19TVEFSKSB7CisJCQkv KgorCQkJICogIEU1IFNlY3Rpb24gNy40LiAgSWYgdGhlIG11bHRpLWxpbmUgY29tbWVudCBjb250 YWlucyBhIG5ld2xpbmUsCisJCQkgKiAgaXQgaXMgdHJlYXRlZCBsaWtlIGEgc2luZ2xlIGxpbmUg dGVybWluYXRvciBmb3IgYXV0b21hdGljCisJCQkgKiAgc2VtaWNvbG9uIGluc2VydGlvbi4KKwkJ CSAqLworCisJCQlkdWtfYm9vbF90IGxhc3RfYXN0ZXJpc2sgPSAwOworCQkJRFVLX19BRFZBTkNF Q0hBUlMobGV4X2N0eCwgMik7CisJCQlmb3IgKDs7KSB7CisJCQkJeCA9IERVS19fTDAoKTsKKwkJ CQlpZiAoeCA8IDApIHsKKwkJCQkJZ290byBmYWlsX3VudGVybV9jb21tZW50OworCQkJCX0KKwkJ CQlEVUtfX0FEVkFOQ0VDSEFSUyhsZXhfY3R4LCAxKTsKKwkJCQlpZiAobGFzdF9hc3RlcmlzayAm JiB4ID09IERVS19BU0NfU0xBU0gpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChkdWtf dW5pY29kZV9pc19saW5lX3Rlcm1pbmF0b3IoeCkpIHsKKwkJCQkJZ290X2xpbmV0ZXJtID0gMTsK KwkJCQl9CisJCQkJbGFzdF9hc3RlcmlzayA9ICh4ID09IERVS19BU0NfU1RBUik7CisJCQl9CisJ CQlnb3RvIHJlc3RhcnRfbGluZXVwZGF0ZTsKKwkJfSBlbHNlIGlmIChyZWdleHBfbW9kZSkgewor I2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKwkJCS8qCisJCQkgKiAgIi8iIGZv bGxvd2VkIGJ5IHNvbWV0aGluZyBpbiByZWdleHAgbW9kZS4gIFNlZSBFNSBTZWN0aW9uIDcuOC41 LgorCQkJICoKKwkJCSAqICBSZWdFeHAgcGFyc2luZyBpcyBhIGJpdCBjb21wbGV4LiAgRmlyc3Qs IHRoZSByZWdleHAgYm9keSBpcyBkZWxpbWl0ZWQKKwkJCSAqICBieSBmb3J3YXJkIHNsYXNoZXMs IGJ1dCB0aGUgYm9keSBtYXkgYWxzbyBjb250YWluIGZvcndhcmQgc2xhc2hlcyBhcworCQkJICog IHBhcnQgb2YgYW4gZXNjYXBlIHNlcXVlbmNlIG9yIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcyAo ZGVsaW1pdGVkIGJ5CisJCQkgKiAgc3F1YXJlIGJyYWNrZXRzKS4gIEEgbWluaSBzdGF0ZSBtYWNo aW5lIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZXNlLgorCQkJICoKKwkJCSAqICBGdXJ0aGVyLCBh biBlYXJseSAocGFyc2UgdGltZSkgZXJyb3IgbXVzdCBiZSB0aHJvd24gaWYgdGhlIHJlZ2V4cAor CQkJICogIHdvdWxkIGNhdXNlIGEgcnVuLXRpbWUgZXJyb3Igd2hlbiB1c2VkIGluIHRoZSBleHBy ZXNzaW9uIG5ldyBSZWdFeHAoLi4uKS4KKwkJCSAqICBQYXJzaW5nIGhlcmUgc2ltcGx5IGV4dHJh Y3RzIHRoZSAoY2FuZGlkYXRlKSByZWdleHAsIGFuZCBhbHNvIGFjY2VwdHMKKwkJCSAqICBpbnZh bGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHdoaWNoIGFyZSBkZWxpbWl0ZWQgcHJvcGVybHkpLiAg VGhlIGNhbGxlcgorCQkJICogIChjb21waWxlcikgbXVzdCBwZXJmb3JtIGZpbmFsIHZhbGlkYXRp b24gYW5kIHJlZ2V4cCBjb21waWxhdGlvbi4KKwkJCSAqCisJCQkgKiAgUmVnRXhwIGZpcnN0IGNo YXIgbWF5IG5vdCBiZSAnLycgKHNpbmdsZSBsaW5lIGNvbW1lbnQpIG9yICcqJyAobXVsdGktCisJ CQkgKiAgbGluZSBjb21tZW50KS4gIFRoZXNlIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYWJv dmUsIHNvIHRoZXJlIGlzIG5vCisJCQkgKiAgbmVlZCBiZWxvdyBmb3Igc3BlY2lhbCBoYW5kbGlu ZyBvZiB0aGUgZmlyc3QgcmVnZXhwIGNoYXJhY3RlciBhcyBpbgorCQkJICogIHRoZSBFNSBwcm9k dWN0aW9ucy4KKwkJCSAqCisJCQkgKiAgQWJvdXQgdW5pY29kZSBlc2NhcGVzIHdpdGhpbiByZWdl eHAgbGl0ZXJhbHM6CisJCQkgKgorCQkJICogICAgICBFNSBTZWN0aW9uIDcuOC41IGdyYW1tYXIg ZG9lcyBOT1QgYWNjZXB0IFx1SEhISCBlc2NhcGVzLgorCQkJICogICAgICBIb3dldmVyLCBTZWN0 aW9uIDYgc3RhdGVzIHRoYXQgcmVnZXhwcyBhY2NlcHQgdGhlIGVzY2FwZXMsCisJCQkgKiAgICAg IHNlZSBwYXJhZ3JhcGggc3RhcnRpbmcgd2l0aCAiSW4gc3RyaW5nIGxpdGVyYWxzLi4uIi4KKwkJ CSAqICAgICAgVGhlIHJlZ2V4cCBncmFtbWFyLCB3aGljaCBzZWVzIHRoZSBkZWNvZGVkIHJlZ2V4 cCBsaXRlcmFsCisJCQkgKiAgICAgIChhZnRlciBsZXhpY2FsIHBhcnNpbmcpIERPRVMgaGF2ZSBh IFx1SEhISCB1bmljb2RlIGVzY2FwZS4KKwkJCSAqICAgICAgU28sIGZvciBpbnN0YW5jZToKKwkJ CSAqCisJCQkgKiAgICAgICAgICAvXHUxMjM0LworCQkJICoKKwkJCSAqICAgICAgc2hvdWxkIGZp cnN0IGJlIHBhcnNlZCBieSB0aGUgbGV4aWNhbCBncmFtbWFyIGFzOgorCQkJICoKKwkJCSAqICAg ICAgICAgICdcJyAndScgICAgICBSZWd1bGFyRXhwcmVzc2lvbkJhY2tzbGFzaFNlcXVlbmNlCisJ CQkgKiAgICAgICAgICAnMScgICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ob25UZXJtaW5hdG9y CisJCQkgKiAgICAgICAgICAnMicgICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ob25UZXJtaW5h dG9yCisJCQkgKiAgICAgICAgICAnMycgICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ob25UZXJt aW5hdG9yCisJCQkgKiAgICAgICAgICAnNCcgICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ob25U ZXJtaW5hdG9yCisJCQkgKgorCQkJICogICAgICBhbmQgdGhlIGVzY2FwZSBpdHNlbGYgaXMgdGhl biBwYXJzZWQgYnkgdGhlIHJlZ2V4cCBlbmdpbmUuCisJCQkgKiAgICAgIFRoaXMgaXMgdGhlIGN1 cnJlbnQgaW1wbGVtZW50YXRpb24uCisJCQkgKgorCQkJICogIE1pbm9yIHNwZWMgaW5jb25zaXN0 ZW5jeToKKwkJCSAqCisJCQkgKiAgICAgIEU1IFNlY3Rpb24gNy44LjUgUmVndWxhckV4cHJlc3Np b25CYWNrc2xhc2hTZXF1ZW5jZSBpczoKKwkJCSAqCisJCQkgKiAgICAgICAgIFwgUmVndWxhckV4 cHJlc3Npb25Ob25UZXJtaW5hdG9yCisJCQkgKgorCQkJICogICAgICB3aGlsZSBTZWN0aW9uIEEu MSBSZWd1bGFyRXhwcmVzc2lvbkJhY2tzbGFzaFNlcXVlbmNlIGlzOgorCQkJICoKKwkJCSAqICAg ICAgICAgXCBOb25UZXJtaW5hdG9yCisJCQkgKgorCQkJICogICAgICBUaGUgbGF0dGVyIGlzIG5v dCBub3JtYXRpdmUgYW5kIGEgdHlwby4KKwkJCSAqCisJCQkgKi8KKworCQkJLyogZmlyc3QsIHBh cnNlIHJlZ2V4cCBib2R5IHJvdWdobHkgKi8KKworCQkJZHVrX3NtYWxsX2ludF90IHN0YXRlID0g MDsgIC8qIDA9YmFzZSwgMT1lc2MsIDI9Y2xhc3MsIDM9Y2xhc3MrZXNjICovCisKKwkJCURVS19f SU5JVEJVRkZFUihsZXhfY3R4KTsKKwkJCWZvciAoOzspIHsKKwkJCQlEVUtfX0FEVkFOQ0VDSEFS UyhsZXhfY3R4LCAxKTsgIC8qIHNraXAgb3BlbmluZyBzbGFzaCBvbiBmaXJzdCBsb29wICovCisJ CQkJeCA9IERVS19fTDAoKTsKKwkJCQlpZiAoeCA8IDAgfHwgZHVrX3VuaWNvZGVfaXNfbGluZV90 ZXJtaW5hdG9yKHgpKSB7CisJCQkJCWdvdG8gZmFpbF91bnRlcm1fcmVnZXhwOworCQkJCX0KKwkJ CQl4ID0gRFVLX19MMCgpOyAgLyogcmUtcmVhZCB0byBhdm9pZCBzcGlsbCAvIGZldGNoICovCisJ CQkJaWYgKHN0YXRlID09IDApIHsKKwkJCQkJaWYgKHggPT0gRFVLX0FTQ19TTEFTSCkgeworCQkJ CQkJRFVLX19BRFZBTkNFQ0hBUlMobGV4X2N0eCwgMSk7ICAvKiBlYXQgY2xvc2luZyBzbGFzaCAq LworCQkJCQkJYnJlYWs7CisJCQkJCX0gZWxzZSBpZiAoeCA9PSBEVUtfQVNDX0JBQ0tTTEFTSCkg eworCQkJCQkJc3RhdGUgPSAxOworCQkJCQl9IGVsc2UgaWYgKHggPT0gRFVLX0FTQ19MQlJBQ0tF VCkgeworCQkJCQkJc3RhdGUgPSAyOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChzdGF0ZSA9PSAx KSB7CisJCQkJCXN0YXRlID0gMDsKKwkJCQl9IGVsc2UgaWYgKHN0YXRlID09IDIpIHsKKwkJCQkJ aWYgKHggPT0gRFVLX0FTQ19SQlJBQ0tFVCkgeworCQkJCQkJc3RhdGUgPSAwOworCQkJCQl9IGVs c2UgaWYgKHggPT0gRFVLX0FTQ19CQUNLU0xBU0gpIHsKKwkJCQkJCXN0YXRlID0gMzsKKwkJCQkJ fQorCQkJCX0gZWxzZSB7IC8qIHN0YXRlID09IDMgKi8KKwkJCQkJc3RhdGUgPSAyOworCQkJCX0K KwkJCQlEVUtfX0FQUEVOREJVRkZFUihsZXhfY3R4LCB4KTsKKwkJCX0KKwkJCW91dF90b2tlbi0+ c3RyMSA9IGR1a19faW50ZXJuYnVmZmVyKGxleF9jdHgsIGxleF9jdHgtPnNsb3QxX2lkeCk7CisK KwkJCS8qIHNlY29uZCwgcGFyc2UgZmxhZ3MgKi8KKworCQkJRFVLX19JTklUQlVGRkVSKGxleF9j dHgpOworCQkJZm9yICg7OykgeworCQkJCXggPSBEVUtfX0wwKCk7CisJCQkJaWYgKCFkdWtfdW5p Y29kZV9pc19pZGVudGlmaWVyX3BhcnQoeCkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXgg PSBEVUtfX0wwKCk7ICAvKiByZS1yZWFkIHRvIGF2b2lkIHNwaWxsIC8gZmV0Y2ggKi8KKwkJCQlE VUtfX0FQUEVOREJVRkZFUihsZXhfY3R4LCB4KTsKKwkJCQlEVUtfX0FEVkFOQ0VDSEFSUyhsZXhf Y3R4LCAxKTsKKwkJCX0KKwkJCW91dF90b2tlbi0+c3RyMiA9IGR1a19faW50ZXJuYnVmZmVyKGxl eF9jdHgsIGxleF9jdHgtPnNsb3QyX2lkeCk7CisKKwkJCURVS19fSU5JVEJVRkZFUihsZXhfY3R4 KTsgIC8qIGZyZWUgc29tZSBtZW1vcnkgKi8KKworCQkJLyogdmFsaWRhdGlvbiBvZiB0aGUgcmVn ZXhwIGlzIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5ICovCisKKwkJCWFkdnRvayA9IERVS19fQURW VE9LKDAsIERVS19UT0tfUkVHRVhQKTsKKyNlbHNlICAvKiBEVUtfVVNFX1JFR0VYUF9TVVBQT1JU ICovCisJCQlnb3RvIGZhaWxfcmVnZXhwX3N1cHBvcnQ7CisjZW5kaWYgIC8qIERVS19VU0VfUkVH RVhQX1NVUFBPUlQgKi8KKwkJfSBlbHNlIGlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19FUVVBTFMp IHsKKwkJCS8qICIvPSIgYW5kIG5vdCBpbiByZWdleHAgbW9kZSAqLworCQkJYWR2dG9rID0gRFVL X19BRFZUT0soMiwgRFVLX1RPS19ESVZfRVEpOworCQl9IGVsc2UgeworCQkJLyogIi8iIGFuZCBu b3QgaW4gcmVnZXhwIG1vZGUgKi8KKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tf RElWKTsKKwkJfQorCQlicmVhazsKKwljYXNlIERVS19BU0NfTENVUkxZOiAgLyogJ3snICovCisJ CWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tfTENVUkxZKTsKKwkJYnJlYWs7CisJY2Fz ZSBEVUtfQVNDX1JDVVJMWTogIC8qICd9JyAqLworCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygxLCBE VUtfVE9LX1JDVVJMWSk7CisJCWJyZWFrOworCWNhc2UgRFVLX0FTQ19MUEFSRU46ICAvKiAnKCcg Ki8KKwkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1RPS19MUEFSRU4pOworCQlicmVhazsK KwljYXNlIERVS19BU0NfUlBBUkVOOiAgLyogJyknICovCisJCWFkdnRvayA9IERVS19fQURWVE9L KDEsIERVS19UT0tfUlBBUkVOKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfQVNDX0xCUkFDS0VUOiAg LyogJ1snICovCisJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tfTEJSQUNLRVQpOwor CQlicmVhazsKKwljYXNlIERVS19BU0NfUkJSQUNLRVQ6ICAvKiAnXScgKi8KKwkJYWR2dG9rID0g RFVLX19BRFZUT0soMSwgRFVLX1RPS19SQlJBQ0tFVCk7CisJCWJyZWFrOworCWNhc2UgRFVLX0FT Q19QRVJJT0Q6ICAvKiAnLicgKi8KKwkJaWYgKERVS19fSVNESUdJVChEVUtfX0wxKCkpKSB7CisJ CQkvKiBQZXJpb2QgZm9sbG93ZWQgYnkgYSBkaWdpdCBjYW4gb25seSBzdGFydCBEZWNpbWFsTGl0 ZXJhbAorCQkJICogKGhhbmRsZWQgaW4gc2xvdyBwYXRoKS4gIFdlIGNvdWxkIGp1bXAgc3RyYWln aHQgaW50byB0aGUKKwkJCSAqIERlY2ltYWxMaXRlcmFsIGhhbmRsaW5nIGJ1dCBzaG91bGQgYXZv aWQgZ290byB0byBpbnNpZGUKKwkJCSAqIGEgYmxvY2suCisJCQkgKi8KKwkJCWdvdG8gc2xvd19w YXRoOworCQl9CisJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tfUEVSSU9EKTsKKwkJ YnJlYWs7CisJY2FzZSBEVUtfQVNDX1NFTUlDT0xPTjogIC8qICc7JyAqLworCQlhZHZ0b2sgPSBE VUtfX0FEVlRPSygxLCBEVUtfVE9LX1NFTUlDT0xPTik7CisJCWJyZWFrOworCWNhc2UgRFVLX0FT Q19DT01NQTogIC8qICcsJyAqLworCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygxLCBEVUtfVE9LX0NP TU1BKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfQVNDX0xBTkdMRTogIC8qICc8JyAqLworI2lmIGRl ZmluZWQoRFVLX1VTRV9IVE1MX0NPTU1FTlRTKQorCQlpZiAoRFVLX19MMSgpID09IERVS19BU0Nf RVhDTEFNQVRJT04gJiYgRFVLX19MMigpID09IERVS19BU0NfTUlOVVMgJiYgRFVLX19MMygpID09 IERVS19BU0NfTUlOVVMpIHsKKwkJCS8qCisJCQkgKiAgRVMyMDE1OiBCLjEuMywgaGFuZGxlICI8 IS0tIiBTaW5nbGVMaW5lSFRNTE9wZW5Db21tZW50CisJCQkgKi8KKworCQkJLyogRFVLX19BRFZB TkNFQ0hBUlMobGV4X2N0eCwgNCkgd291bGQgYmUgY29ycmVjdCBoZXJlLCBidXQgbm90IG5lY2Vz c2FyeSAqLworCQkJZHVrX19sZXhlcl9za2lwX3RvX2VuZG9mbGluZShsZXhfY3R4KTsKKwkJCWdv dG8gcmVzdGFydDsgIC8qIGxpbmUgdGVybWluYXRvciB3aWxsIGJlIGhhbmRsZWQgb24gbmV4dCBy b3VuZCAqLworCQl9CisJCWVsc2UKKyNlbmRpZiAgLyogRFVLX1VTRV9IVE1MX0NPTU1FTlRTICov CisJCWlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19MQU5HTEUgJiYgRFVLX19MMigpID09IERVS19B U0NfRVFVQUxTKSB7CisJCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygzLCBEVUtfVE9LX0FMU0hJRlRf RVEpOworCQl9IGVsc2UgaWYgKERVS19fTDEoKSA9PSBEVUtfQVNDX0VRVUFMUykgeworCQkJYWR2 dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1RPS19MRSk7CisJCX0gZWxzZSBpZiAoRFVLX19MMSgp ID09IERVS19BU0NfTEFOR0xFKSB7CisJCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygyLCBEVUtfVE9L X0FMU0hJRlQpOworCQl9IGVsc2UgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1RP S19MVCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEVUtfQVNDX1JBTkdMRTogIC8qICc+JyAqLwor CQlpZiAoRFVLX19MMSgpID09IERVS19BU0NfUkFOR0xFICYmIERVS19fTDIoKSA9PSBEVUtfQVND X1JBTkdMRSAmJiBEVUtfX0wzKCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsKKwkJCWFkdnRvayA9IERV S19fQURWVE9LKDQsIERVS19UT0tfUlNISUZUX0VRKTsKKwkJfSBlbHNlIGlmIChEVUtfX0wxKCkg PT0gRFVLX0FTQ19SQU5HTEUgJiYgRFVLX19MMigpID09IERVS19BU0NfUkFOR0xFKSB7CisJCQlh ZHZ0b2sgPSBEVUtfX0FEVlRPSygzLCBEVUtfVE9LX1JTSElGVCk7CisJCX0gZWxzZSBpZiAoRFVL X19MMSgpID09IERVS19BU0NfUkFOR0xFICYmIERVS19fTDIoKSA9PSBEVUtfQVNDX0VRVUFMUykg eworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMywgRFVLX1RPS19BUlNISUZUX0VRKTsKKwkJfSBl bHNlIGlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsKKwkJCWFkdnRvayA9IERVS19f QURWVE9LKDIsIERVS19UT0tfR0UpOworCQl9IGVsc2UgaWYgKERVS19fTDEoKSA9PSBEVUtfQVND X1JBTkdMRSkgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1RPS19BUlNISUZUKTsK KwkJfSBlbHNlIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tfR1QpOworCQl9 CisJCWJyZWFrOworCWNhc2UgRFVLX0FTQ19FUVVBTFM6ICAvKiAnPScgKi8KKwkJaWYgKERVS19f TDEoKSA9PSBEVUtfQVNDX0VRVUFMUyAmJiBEVUtfX0wyKCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsK KwkJCWFkdnRvayA9IERVS19fQURWVE9LKDMsIERVS19UT0tfU0VRKTsKKwkJfSBlbHNlIGlmIChE VUtfX0wxKCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIs IERVS19UT0tfRVEpOworCQl9IGVsc2UgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVL X1RPS19FUVVBTFNJR04pOworCQl9CisJCWJyZWFrOworCWNhc2UgRFVLX0FTQ19FWENMQU1BVElP TjogIC8qICchJyAqLworCQlpZiAoRFVLX19MMSgpID09IERVS19BU0NfRVFVQUxTICYmIERVS19f TDIoKSA9PSBEVUtfQVNDX0VRVUFMUykgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMywgRFVL X1RPS19TTkVRKTsKKwkJfSBlbHNlIGlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsK KwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19UT0tfTkVRKTsKKwkJfSBlbHNlIHsKKwkJ CWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tfTE5PVCk7CisJCX0KKwkJYnJlYWs7CisJ Y2FzZSBEVUtfQVNDX1BMVVM6ICAvKiAnKycgKi8KKwkJaWYgKERVS19fTDEoKSA9PSBEVUtfQVND X1BMVVMpIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19UT0tfSU5DUkVNRU5UKTsK KwkJfSBlbHNlIGlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsKKwkJCWFkdnRvayA9 IERVS19fQURWVE9LKDIsIERVS19UT0tfQUREX0VRKTsKKwkJfSBlbHNlIHsKKwkJCWFkdnRvayA9 IERVS19fQURWVE9LKDEsIERVS19UT0tfQUREKTsKKwkJfQorCQlicmVhazsKKwljYXNlIERVS19B U0NfTUlOVVM6ICAvKiAnLScgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfSFRNTF9DT01NRU5UUykK KwkJaWYgKGdvdF9saW5ldGVybSAmJiBEVUtfX0wxKCkgPT0gRFVLX0FTQ19NSU5VUyAmJiBEVUtf X0wyKCkgPT0gRFVLX0FTQ19SQU5HTEUpIHsKKwkJCS8qCisJCQkgKiAgRVMyMDE1OiBCLjEuMywg aGFuZGxlICItLT4iIFNpbmdsZUxpbmVIVE1MQ2xvc2VDb21tZW50CisJCQkgKiAgT25seSBhbGxv d2VkOgorCQkJICogIC0gb24gbmV3IGxpbmUKKwkJCSAqICAtIHByZWNlZGVkIG9ubHkgYnkgd2hp dGVzcGFjZQorCQkJICogIC0gcHJlY2VkZWQgYnkgZW5kIG9mIG11bHRpbGluZSBjb21tZW50IGFu ZCBvcHRpb25hbCB3aGl0ZXNwYWNlCisJCQkgKgorCQkJICogU2luY2Ugd2hpdGVzcGFjZSBnZW5l cmF0ZXMgbm8gdG9rZW5zLCBhbmQgbXVsdGlsaW5lIGNvbW1lbnRzCisJCQkgKiBhcmUgdHJlYXRl ZCBhcyBhIGxpbmUgZW5kaW5nLCBjb25zdWx0aW5nIGBnb3RfbGluZXRlcm1gIGlzCisJCQkgKiBz dWZmaWNpZW50IHRvIHRlc3QgZm9yIHRoZXNlIHRocmVlIG9wdGlvbnMuCisJCQkgKi8KKworCQkJ LyogRFVLX19BRFZBTkNFQ0hBUlMobGV4X2N0eCwgMykgd291bGQgYmUgY29ycmVjdCBoZXJlLCBi dXQgbm90IG5lY2Vzc2FyeSAqLworCQkJZHVrX19sZXhlcl9za2lwX3RvX2VuZG9mbGluZShsZXhf Y3R4KTsKKwkJCWdvdG8gcmVzdGFydDsgIC8qIGxpbmUgdGVybWluYXRvciB3aWxsIGJlIGhhbmRs ZWQgb24gbmV4dCByb3VuZCAqLworCQl9IGVsc2UKKyNlbmRpZiAgLyogRFVLX1VTRV9IVE1MX0NP TU1FTlRTICovCisJCWlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19NSU5VUykgeworCQkJYWR2dG9r ID0gRFVLX19BRFZUT0soMiwgRFVLX1RPS19ERUNSRU1FTlQpOworCQl9IGVsc2UgaWYgKERVS19f TDEoKSA9PSBEVUtfQVNDX0VRVUFMUykgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVL X1RPS19TVUJfRVEpOworCQl9IGVsc2UgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVL X1RPS19TVUIpOworCQl9CisJCWJyZWFrOworCWNhc2UgRFVLX0FTQ19TVEFSOiAgLyogJyonICov CisjaWYgZGVmaW5lZChEVUtfVVNFX0VTN19FWFBfT1BFUkFUT1IpCisJCWlmIChEVUtfX0wxKCkg PT0gRFVLX0FTQ19TVEFSICYmIERVS19fTDIoKSA9PSBEVUtfQVNDX0VRVUFMUykgeworCQkJYWR2 dG9rID0gRFVLX19BRFZUT0soMywgRFVLX1RPS19FWFBfRVEpOworCQl9IGVsc2UgaWYgKERVS19f TDEoKSA9PSBEVUtfQVNDX1NUQVIpIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19U T0tfRVhQKTsKKwkJfSBlbHNlCisjZW5kaWYKKwkJaWYgKERVS19fTDEoKSA9PSBEVUtfQVNDX0VR VUFMUykgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1RPS19NVUxfRVEpOworCQl9 IGVsc2UgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1RPS19NVUwpOworCQl9CisJ CWJyZWFrOworCWNhc2UgRFVLX0FTQ19QRVJDRU5UOiAgLyogJyUnICovCisJCWlmIChEVUtfX0wx KCkgPT0gRFVLX0FTQ19FUVVBTFMpIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19U T0tfTU9EX0VRKTsKKwkJfSBlbHNlIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19U T0tfTU9EKTsKKwkJfQorCQlicmVhazsKKwljYXNlIERVS19BU0NfQU1QOiAgLyogJyYnICovCisJ CWlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19BTVApIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9L KDIsIERVS19UT0tfTEFORCk7CisJCX0gZWxzZSBpZiAoRFVLX19MMSgpID09IERVS19BU0NfRVFV QUxTKSB7CisJCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygyLCBEVUtfVE9LX0JBTkRfRVEpOworCQl9 IGVsc2UgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1RPS19CQU5EKTsKKwkJfQor CQlicmVhazsKKwljYXNlIERVS19BU0NfUElQRTogIC8qICd8JyAqLworCQlpZiAoRFVLX19MMSgp ID09IERVS19BU0NfUElQRSkgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1RPS19M T1IpOworCQl9IGVsc2UgaWYgKERVS19fTDEoKSA9PSBEVUtfQVNDX0VRVUFMUykgeworCQkJYWR2 dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1RPS19CT1JfRVEpOworCQl9IGVsc2UgeworCQkJYWR2 dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1RPS19CT1IpOworCQl9CisJCWJyZWFrOworCWNhc2Ug RFVLX0FTQ19DQVJFVDogIC8qICdeJyAqLworCQlpZiAoRFVLX19MMSgpID09IERVS19BU0NfRVFV QUxTKSB7CisJCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygyLCBEVUtfVE9LX0JYT1JfRVEpOworCQl9 IGVsc2UgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1RPS19CWE9SKTsKKwkJfQor CQlicmVhazsKKwljYXNlIERVS19BU0NfVElMREU6ICAvKiAnficgKi8KKwkJYWR2dG9rID0gRFVL X19BRFZUT0soMSwgRFVLX1RPS19CTk9UKTsKKwkJYnJlYWs7CisJY2FzZSBEVUtfQVNDX1FVRVNU SU9OOiAgLyogJz8nICovCisJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19UT0tfUVVFU1RJ T04pOworCQlicmVhazsKKwljYXNlIERVS19BU0NfQ09MT046ICAvKiAnOicgKi8KKwkJYWR2dG9r ID0gRFVLX19BRFZUT0soMSwgRFVLX1RPS19DT0xPTik7CisJCWJyZWFrOworCWNhc2UgRFVLX0FT Q19ET1VCTEVRVU9URTogICAgLyogJyInICovCisJY2FzZSBEVUtfQVNDX1NJTkdMRVFVT1RFOiB7 ICAvKiAnXCcnICovCisJCURVS19fSU5JVEJVRkZFUihsZXhfY3R4KTsKKwkJZHVrX19sZXhlcl9w YXJzZV9zdHJpbmdfbGl0ZXJhbChsZXhfY3R4LCBvdXRfdG9rZW4sIHggLypxdW90ZSovLCBzdHJp Y3RfbW9kZSk7CisJCWR1a19faW50ZXJuYnVmZmVyKGxleF9jdHgsIGxleF9jdHgtPnNsb3QxX2lk eCk7CisJCW91dF90b2tlbi0+c3RyMSA9IGR1a19rbm93bl9oc3RyaW5nKGxleF9jdHgtPnRociwg bGV4X2N0eC0+c2xvdDFfaWR4KTsKKworCQlEVUtfX0lOSVRCVUZGRVIobGV4X2N0eCk7ICAvKiBm cmVlIHNvbWUgbWVtb3J5ICovCisKKwkJYWR2dG9rID0gRFVLX19BRFZUT0soMCwgRFVLX1RPS19T VFJJTkcpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJZ290byBzbG93X3BhdGg7CisJfSAg Lyogc3dpdGNoICovCisKKwlnb3RvIHNraXBfc2xvd19wYXRoOworCisgc2xvd19wYXRoOgorCWlm IChkdWtfdW5pY29kZV9pc19saW5lX3Rlcm1pbmF0b3IoeCkpIHsKKwkJaWYgKHggPT0gMHgwMDBk ICYmIERVS19fTDEoKSA9PSAweDAwMGEpIHsKKwkJCS8qCisJCQkgKiAgRTUgU2VjdGlvbiA3LjM6 IENSIExGIGlzIGRldGVjdGVkIGFzIGEgc2luZ2xlIGxpbmUgdGVybWluYXRvciBmb3IKKwkJCSAq ICBsaW5lIG51bWJlcnMuICBIZXJlIHdlIGFsc28gZGV0ZWN0IGl0IGFzIGEgc2luZ2xlIGxpbmUg dGVybWluYXRvcgorCQkJICogIHRva2VuLgorCQkJICovCisJCQlEVUtfX0FEVkFOQ0VDSEFSUyhs ZXhfY3R4LCAyKTsKKwkJfSBlbHNlIHsKKwkJCURVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIDEp OworCQl9CisJCWdvdF9saW5ldGVybSA9IDE7CisJCWdvdG8gcmVzdGFydF9saW5ldXBkYXRlOwor CX0gZWxzZSBpZiAoZHVrX3VuaWNvZGVfaXNfaWRlbnRpZmllcl9zdGFydCh4KSB8fCB4ID09IERV S19BU0NfQkFDS1NMQVNIKSB7CisJCS8qCisJCSAqICBQYXJzZSBhbiBpZGVudGlmaWVyIGFuZCB0 aGVuIGNoZWNrIHdoZXRoZXIgaXQgaXM6CisJCSAqICAgIC0gcmVzZXJ2ZWQgd29yZCAoa2V5d29y ZCBvciBvdGhlciByZXNlcnZlZCB3b3JkKQorCQkgKiAgICAtICJudWxsIiAgKE51bGxMaXRlcmFs KQorCQkgKiAgICAtICJ0cnVlIiAgKEJvb2xlYW5MaXRlcmFsKQorCQkgKiAgICAtICJmYWxzZSIg KEJvb2xlYW5MaXRlcmFsKQorCQkgKiAgICAtIGFueXRoaW5nIGVsc2UgPT4gaWRlbnRpZmllcgor CQkgKgorCQkgKiAgVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIEU1IHByb2R1Y3Rpb25zIGNsZWFu bHksIGJ1dCBpcworCQkgKiAgdXNlZnVsIGFuZCBjb21wYWN0LgorCQkgKgorCQkgKiAgTm90ZSB0 aGF0IGlkZW50aWZpZXJzIG1heSBjb250YWluIFVuaWNvZGUgZXNjYXBlcywKKwkJICogIHNlZSBF NSBTZWN0aW9ucyA2IGFuZCA3LjYuICBUaGV5IG11c3QgYmUgZGVjb2RlZCBmaXJzdCwKKwkJICog IGFuZCB0aGUgcmVzdWx0IGNoZWNrZWQgYWdhaW5zdCBhbGxvd2VkIGNoYXJhY3RlcnMuCisJCSAq ICBUaGUgYWJvdmUgaWYtY2xhdXNlIGFjY2VwdHMgYW4gaWRlbnRpZmllciBzdGFydCBhbmQgYW4K KwkJICogICdcJyBjaGFyYWN0ZXIgLS0gbm8gb3RoZXIgdG9rZW4gY2FuIGJlZ2luIHdpdGggYSAn XCcuCisJCSAqCisJCSAqICBOb3RlIHRoYXQgImdldCIgYW5kICJzZXQiIGFyZSBub3QgcmVzZXJ2 ZWQgd29yZHMgaW4gRTUKKwkJICogIHNwZWNpZmljYXRpb24gc28gdGhleSBhcmUgcmVjb2duaXpl ZCBhcyBwbGFpbiBpZGVudGlmaWVycworCQkgKiAgKHRoZSB0b2tlbnMgRFVLX1RPS19HRVQgYW5k IERVS19UT0tfU0VUIGFyZSBhY3R1YWxseSBub3QKKwkJICogIHVzZWQgbm93KS4gIFRoZSBjb21w aWxlciBuZWVkcyB0byB3b3JrIGFyb3VuZCB0aGlzLgorCQkgKgorCQkgKiAgU3RyaWN0bHkgc3Bl YWtpbmcsIGZvbGxvd2luZyBFQ01BU2NyaXB0IGxvbmdlc3QgbWF0Y2gKKwkJICogIHNwZWNpZmlj YXRpb24sIGFuIGludmFsaWQgZXNjYXBlIGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyCisJCSAqICBz aG91bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICBIb3dldmVyLCBhbiBpbnZhbGlkIGVzY2FwZQor CQkgKiAgZm9yIElkZW50aWZpZXJQYXJ0cyBzaG91bGQganVzdCB0ZXJtaW5hdGUgdGhlIGlkZW50 aWZpZXIKKwkJICogIGVhcmx5IChsb25nZXN0IG1hdGNoKSwgYW5kIGxldCB0aGUgbmV4dCB0b2tl bml6YXRpb24KKwkJICogIGZhaWwuICBGb3IgaW5zdGFuY2UgUmhpbm8gY3JvYWtzIHdpdGggJ2Zv b1x6JyB3aGVuCisJCSAqICBwYXJzaW5nIHRoZSBpZGVudGlmaWVyLiAgVGhpcyBoYXMgbGl0dGxl IHByYWN0aWNhbCBpbXBhY3QuCisJCSAqLworCisJCWR1a19zbWFsbF91aW50X3QgaSwgaV9lbmQ7 CisJCWR1a19ib29sX3QgZmlyc3QgPSAxOworCQlkdWtfaHN0cmluZyAqc3RyOworCisJCURVS19f SU5JVEJVRkZFUihsZXhfY3R4KTsKKwkJZm9yICg7OykgeworCQkJLyogcmUtbG9va3VwIGZpcnN0 IGNoYXIgb24gZmlyc3QgbG9vcCAqLworCQkJaWYgKERVS19fTDAoKSA9PSBEVUtfQVNDX0JBQ0tT TEFTSCkgeworCQkJCWR1a19jb2RlcG9pbnRfdCBlc2NfY3A7CisJCQkJaWYgKERVS19fTDEoKSAh PSBEVUtfQVNDX0xDX1UpIHsKKwkJCQkJZ290byBmYWlsX2VzY2FwZTsKKwkJCQl9CisJCQkJZXNj X2NwID0gZHVrX19sZXhlcl9wYXJzZV9lc2NhcGUobGV4X2N0eCwgMSAvKmFsbG93X2VzNiovKTsK KwkJCQlEVUtfX0FQUEVOREJVRkZFUihsZXhfY3R4LCBlc2NfY3ApOworCisJCQkJLyogSWRlbnRp ZmllclN0YXJ0IGlzIHN0cmljdGVyIHRoYW4gSWRlbnRpZmllclBhcnQsIHNvIGlmIHRoZSBmaXJz dAorCQkJCSAqIGNoYXJhY3RlciBpcyBlc2NhcGVkLCBtdXN0IGhhdmUgYSBzdHJpY3RlciBjaGVj ayBoZXJlLgorCQkJCSAqLworCQkJCWlmICghKGZpcnN0ID8gZHVrX3VuaWNvZGVfaXNfaWRlbnRp Zmllcl9zdGFydChlc2NfY3ApIDogZHVrX3VuaWNvZGVfaXNfaWRlbnRpZmllcl9wYXJ0KGVzY19j cCkpKSB7CisJCQkJCWdvdG8gZmFpbF9lc2NhcGU7CisJCQkJfQorCisJCQkJLyogVHJhY2sgbnVt YmVyIG9mIGVzY2FwZXM6IG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGtleXdvcmQKKwkJCQkgKiBkZXRl Y3Rpb24uCisJCQkJICovCisJCQkJb3V0X3Rva2VuLT5udW1fZXNjYXBlcysrOworCQkJfSBlbHNl IHsKKwkJCQkvKiBOb3RlOiBmaXJzdCBjaGFyYWN0ZXIgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoaXMu ICBCdXQgYmVjYXVzZQorCQkJCSAqIElkZW50aWZpZXJQYXJ0IGluY2x1ZGVzIGFsbCBJZGVudGlm aWVyU3RhcnQgY2hhcmFjdGVycywgYW5kCisJCQkJICogdGhlIGZpcnN0IGNoYXJhY3RlciAoaWYg dW5lc2NhcGVkKSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQKKwkJCQkgKiBpbiB0aGUgaWYgY29u ZGl0aW9uLCB0aGlzIGlzIE9LLgorCQkJCSAqLworCQkJCWlmICghZHVrX3VuaWNvZGVfaXNfaWRl bnRpZmllcl9wYXJ0KERVS19fTDAoKSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCURVS19f QVBQRU5EQlVGRkVSKGxleF9jdHgsIERVS19fTDAoKSk7CisJCQkJRFVLX19BRFZBTkNFQ0hBUlMo bGV4X2N0eCwgMSk7CisJCQl9CisJCQlmaXJzdCA9IDA7CisJCX0KKworCQlvdXRfdG9rZW4tPnN0 cjEgPSBkdWtfX2ludGVybmJ1ZmZlcihsZXhfY3R4LCBsZXhfY3R4LT5zbG90MV9pZHgpOworCQlz dHIgPSBvdXRfdG9rZW4tPnN0cjE7CisJCW91dF90b2tlbi0+dF9ub3JlcyA9IERVS19UT0tfSURF TlRJRklFUjsKKworCQlEVUtfX0lOSVRCVUZGRVIobGV4X2N0eCk7ICAvKiBmcmVlIHNvbWUgbWVt b3J5ICovCisKKwkJLyoKKwkJICogIEludGVybmVkIGlkZW50aWZpZXIgaXMgY29tcGFyZWQgYWdh aW5zdCByZXNlcnZlZCB3b3Jkcywgd2hpY2ggYXJlCisJCSAqICBjdXJyZW50bHkgaW50ZXJuZWQg aW50byB0aGUgaGVhcCBjb250ZXh0LiAgU2VlIGdlbmJ1aWx0aW5zLnB5LgorCQkgKgorCQkgKiAg Tm90ZSB0aGF0IGFuIGVzY2FwZSBpbiB0aGUgaWRlbnRpZmllciBkaXNhYmxlcyByZWNvZ25pdGlv biBvZgorCQkgKiAga2V5d29yZHM7IGUuZy4gIlx1MDA2OWYgPSAxOyIgaXMgYSB2YWxpZCBzdGF0 ZW1lbnQgKGFzc2lnbnMgdG8KKwkJICogIGlkZW50aWZpZXIgbmFtZWQgImlmIikuICBUaGlzIGlz IG5vdCBuZWNlc3NhcmlseSBjb21wbGlhbnQsCisJCSAqICBzZWUgdGVzdC1kZWMtZXNjYXBlZC1j aGFyLWluLWtleXdvcmQuanMuCisJCSAqCisJCSAqICBOb3RlOiAiZ2V0IiBhbmQgInNldCIgYXJl IGF3a3dhcmQuICBUaGV5IGFyZSBub3Qgb2ZmaWNpYWxseQorCQkgKiAgUmVzZXJ2ZWRXb3JkcyAo YW5kIGluZGVlZCBlLmcuICJ2YXIgc2V0ID0gMTsiIGlzIHZhbGlkKSwgYW5kCisJCSAqICBtdXN0 IGNvbWUgb3V0IGFzIERVS19UT0tfSURFTlRJRklFUi4gIFRoZSBjb21waWxlciBuZWVkcyB0bwor CQkgKiAgd29yayBhcm91bmQgdGhpcyBhIGJpdC4KKwkJICovCisKKwkJLyogWFhYOiBvcHRpbWl6 ZSBieSBhZGRpbmcgdGhlIHRva2VuIG51bWJlcnMgZGlyZWN0bHkgaW50byB0aGUKKwkJICogYWx3 YXlzIGludGVybmVkIGR1a19oc3RyaW5nIG9iamVjdHMgKHRoZXJlIHNob3VsZCBiZSBlbm91Z2gK KwkJICogZmxhZyBiaXRzIGZyZWUgZm9yIHRoYXQpPworCQkgKi8KKworCQlpX2VuZCA9IChzdHJp Y3RfbW9kZSA/IERVS19TVFJJRFhfRU5EX1JFU0VSVkVEIDogRFVLX1NUUklEWF9TVEFSVF9TVFJJ Q1RfUkVTRVJWRUQpOworCisJCWFkdnRvayA9IERVS19fQURWVE9LKDAsIERVS19UT0tfSURFTlRJ RklFUik7CisJCWlmIChvdXRfdG9rZW4tPm51bV9lc2NhcGVzID09IDApIHsKKwkJCWZvciAoaSA9 IERVS19TVFJJRFhfU1RBUlRfUkVTRVJWRUQ7IGkgPCBpX2VuZDsgaSsrKSB7CisJCQkJRFVLX0FT U0VSVF9ESVNBQkxFKGkgPj0gMCk7ICAvKiB1bnNpZ25lZCAqLworCQkJCURVS19BU1NFUlQoaSA8 IERVS19IRUFQX05VTV9TVFJJTkdTKTsKKwkJCQlpZiAoRFVLX0hUSFJFQURfR0VUX1NUUklORyhs ZXhfY3R4LT50aHIsIGkpID09IHN0cikgeworCQkJCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygwLCBE VUtfU1RSSURYX1RPX1RPSyhpKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0g ZWxzZSBpZiAoRFVLX19JU0RJR0lUKHgpIHx8ICh4ID09IERVS19BU0NfUEVSSU9EKSkgeworCQkv KiBOb3RlOiBkZWNpbWFsIG51bWJlciBtYXkgc3RhcnQgd2l0aCBhIHBlcmlvZCwgYnV0IG11c3Qg YmUgZm9sbG93ZWQgYnkgYSBkaWdpdCAqLworCisJCS8qCisJCSAqICBQcmUtcGFyc2luZyBmb3Ig ZGVjaW1hbCwgaGV4LCBvY3RhbCAoYm90aCBsZWdhY3kgYW5kIEVTMjAxNSksCisJCSAqICBhbmQg YmluYXJ5IGxpdGVyYWxzLCBmb2xsb3dlZCBieSBhbiBhY3R1YWwgcGFyc2VyIHN0ZXAKKwkJICog IHByb3ZpZGVkIGJ5IG51bWNvbnYuCisJCSAqCisJCSAqICBOb3RlOiB0aGUgbGVhZGluZyBzaWdu IGNoYXJhY3RlciAoJysnIG9yICctJykgaXMgLW5vdC0gcGFydCBvZgorCQkgKiAgdGhlIHByb2R1 Y3Rpb24gaW4gRTUgZ3JhbW1hciwgYW5kIHRoYXQgdGhlIGEgRGVjaW1hbExpdGVyYWwKKwkJICog IHN0YXJ0aW5nIHdpdGggYSAnMCcgbXVzdCBiZSBmb2xsb3dlZCBieSBhIG5vbi1kaWdpdC4KKwkJ ICoKKwkJICogIFhYWDogdGhlIHR3byBzdGVwIHBhcnNpbmcgcHJvY2VzcyBpcyBxdWl0ZSBhd2t3 YXJkLCBpdCB3b3VsZAorCQkgKiAgYmUgbW9yZSBzdHJhaWdodGZvcndhcmQgdG8gYWxsb3cgbnVt Y29udiB0byBwYXJzZSB0aGUgbG9uZ2VzdAorCQkgKiAgdmFsaWQgcHJlZml4IChpdCBhbHJlYWR5 IGRvZXMgdGhhdCwgaXQgb25seSBuZWVkcyB0byBpbmRpY2F0ZQorCQkgKiAgd2hlcmUgdGhlIGlu cHV0IGVuZGVkKS4gIEhvd2V2ZXIsIHRoZSBsZXhlciBkZWNvZGVzIGNoYXJhY3RlcnMKKwkJICog IHVzaW5nIGEgbGltaXRlZCBsb29rdXAgd2luZG93LCBzbyB0aGlzIGlzIG5vdCBhIHRyaXZpYWwg Y2hhbmdlLgorCQkgKi8KKworCQkvKiBYWFg6IGJlY2F1c2Ugb2YgdGhlIGZpbmFsIGNoZWNrIGJl bG93ICh0aGF0IHRoZSBsaXRlcmFsIGlzIG5vdAorCQkgKiBmb2xsb3dlZCBieSBhIGRpZ2l0KSwg dGhpcyBjb3VsZCBtYXliZSBiZSBzaW1wbGlmaWVkLCBpZiB3ZSBiYWlsCisJCSAqIG91dCBlYXJs eSBmcm9tIGEgbGVhZGluZyB6ZXJvIChhbmQgaWYgdGhlcmUgYXJlIG5vIHBlcmlvZHMgZXRjKS4K KwkJICogTWF5YmUgdG9vIGNvbXBsZXguCisJCSAqLworCisJCWR1a19kb3VibGVfdCB2YWw7CisJ CWR1a19ib29sX3QgbGVnYWN5X29jdCA9IDA7CisJCWR1a19zbWFsbF9pbnRfdCBzdGF0ZTsgIC8q IDA9YmVmb3JlIHBlcmlvZC9leHAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAqIDE9YWZ0 ZXIgcGVyaW9kLCBiZWZvcmUgZXhwCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAqIDI9YWZ0 ZXIgZXhwLCBhbGxvdyAnKycgb3IgJy0nCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAqIDM9 YWZ0ZXIgZXhwIGFuZCBleHAgc2lnbgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJ ZHVrX3NtYWxsX3VpbnRfdCBzMm5fZmxhZ3M7CisJCWR1a19jb2RlcG9pbnRfdCB5LCB6OworCQlk dWtfc21hbGxfaW50X3QgczJuX3JhZGl4ID0gMTA7CisJCWR1a19zbWFsbF91aW50X3QgcHJlX2Fk diA9IDA7CisKKwkJRFVLX19JTklUQlVGRkVSKGxleF9jdHgpOworCQl5ID0gRFVLX19MMSgpOwor CisJCWlmICh4ID09IERVS19BU0NfMCkgeworCQkJeiA9IERVS19MT1dFUkNBU0VfQ0hBUl9BU0NJ SSh5KTsKKworCQkJcHJlX2FkdiA9IDI7ICAvKiBkZWZhdWx0IGZvciAweE5OTiwgMG9OTk4sIDBi Tk5OLiAqLworCQkJaWYgKHogPT0gRFVLX0FTQ19MQ19YKSB7CisJCQkJczJuX3JhZGl4ID0gMTY7 CisJCQl9IGVsc2UgaWYgKHogPT0gRFVLX0FTQ19MQ19PKSB7CisJCQkJczJuX3JhZGl4ID0gODsK KwkJCX0gZWxzZSBpZiAoeiA9PSBEVUtfQVNDX0xDX0IpIHsKKwkJCQlzMm5fcmFkaXggPSAyOwor CQkJfSBlbHNlIHsKKwkJCQlwcmVfYWR2ID0gMDsKKwkJCQlpZiAoRFVLX19JU0RJR0lUKHkpKSB7 CisJCQkJCWlmIChzdHJpY3RfbW9kZSkgeworCQkJCQkJLyogUmVqZWN0IG9jdGFsIGxpa2UgXDA3 IGJ1dCBhbHNvIG9jdGFsLWxvb2thbGlrZQorCQkJCQkJICogZGVjaW1hbCBsaWtlIFwwOCBpbiBz dHJpY3QgbW9kZS4KKwkJCQkJCSAqLworCQkJCQkJZ290byBmYWlsX251bWJlcl9saXRlcmFsOwor CQkJCQl9IGVsc2UgeworCQkJCQkJLyogTGVnYWN5IE9jdGFsSW50ZWdlckxpdGVyYWwgb3Igb2N0 YWwtbG9va2FsaWNlCisJCQkJCQkgKiBkZWNpbWFsLiAgRGVjaWRpbmcgYmV0d2VlbiB0aGUgdHdv IGhhcHBlbnMgYmVsb3cKKwkJCQkJCSAqIGluIGRpZ2l0IHNjYW5uaW5nLgorCQkJCQkJICovCisJ CQkJCQlEVUtfX0FQUEVOREJVRkZFUihsZXhfY3R4LCB4KTsKKwkJCQkJCXByZV9hZHYgPSAxOwor CQkJCQkJbGVnYWN5X29jdCA9IDE7CisJCQkJCQlzMm5fcmFkaXggPSA4OyAgLyogdGVudGF0aXZl IHVubGVzcyBjb25mbGljdGluZyBkaWdpdHMgZm91bmQgKi8KKwkJCQkJfQorCQkJCX0KKwkJCX0K KwkJfQorCisJCURVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIHByZV9hZHYpOworCisJCS8qIFhY WDogd2UgY291bGQgcGFyc2UgaW50ZWdlcnMgaGVyZSBkaXJlY3RseSwgYW5kIGZhbGwgYmFjawor CQkgKiB0byBudW1jb252IG9ubHkgd2hlbiBlbmNvdW50ZXJpbmcgYSBmcmFjdGlvbmFsIGV4cHJl c3Npb24KKwkJICogb3Igd2hlbiBhbiBvY3RhbCBsaXRlcmFsIHR1cm5lZCBvdXQgdG8gYmUgZGVj aW1hbCAoMDc3OCBldGMpLgorCQkgKi8KKwkJc3RhdGUgPSAwOworCQlmb3IgKDs7KSB7CisJCQl4 ID0gRFVLX19MMCgpOyAgLyogcmUtbG9va3VwIGN1cnIgY2hhciBvbiBmaXJzdCByb3VuZCAqLwor CQkJaWYgKERVS19fSVNESUdJVCh4KSkgeworCQkJCS8qIE5vdGU6IGludGVudGlvbmFsbHkgYWxs b3cgbGVhZGluZyB6ZXJvZXMgaGVyZSwgYXMgdGhlCisJCQkJICogYWN0dWFsIHBhcnNlciB3aWxs IGNoZWNrIGZvciB0aGVtLgorCQkJCSAqLworCQkJCWlmIChzdGF0ZSA9PSAwICYmIGxlZ2FjeV9v Y3QgJiYgKHggPT0gRFVLX0FTQ184IHx8IHggPT0gRFVLX0FTQ185KSkgeworCQkJCQkvKiBTdGFy dGVkIG91dCBhcyBhbiBvY3RhbC1sb29rYWxpa2UKKwkJCQkJICogYnV0IGludGVycHJldGVkIGFz IGRlY2ltYWwsIGUuZy4KKwkJCQkJICogJzA3NzknIC0+IDc3OS4gIFRoaXMgYWxzbyBtZWFucwor CQkJCQkgKiB0aGF0IGZyYWN0aW9ucyBhcmUgYWxsb3dlZCwgZS5nLgorCQkJCQkgKiAnMDc3OS4x MjMnIGlzIGFsbG93ZWQgYnV0ICcwNzc3LjEyMycKKwkJCQkJICogaXMgbm90IQorCQkJCQkgKi8K KwkJCQkJczJuX3JhZGl4ID0gMTA7CisJCQkJfQorCQkJCWlmIChzdGF0ZSA9PSAyKSB7CisJCQkJ CXN0YXRlID0gMzsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHMybl9yYWRpeCA9PSAxNiAmJiBEVUtf X0lTSEVYRElHSVQoeCkpIHsKKwkJCQkvKiBOb3RlOiAnZScgYW5kICdFJyBhcmUgYWxzbyBhY2Nl cHRlZCBoZXJlLiAqLworCQkJCTsKKwkJCX0gZWxzZSBpZiAoeCA9PSBEVUtfQVNDX1BFUklPRCkg eworCQkJCWlmIChzdGF0ZSA+PSAxIHx8IHMybl9yYWRpeCAhPSAxMCkgeworCQkJCQlicmVhazsK KwkJCQl9IGVsc2UgeworCQkJCQlzdGF0ZSA9IDE7CisJCQkJfQorCQkJfSBlbHNlIGlmICh4ID09 IERVS19BU0NfTENfRSB8fCB4ID09IERVS19BU0NfVUNfRSkgeworCQkJCWlmIChzdGF0ZSA+PSAy IHx8IHMybl9yYWRpeCAhPSAxMCkgeworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlz dGF0ZSA9IDI7CisJCQkJfQorCQkJfSBlbHNlIGlmICh4ID09IERVS19BU0NfTUlOVVMgfHwgeCA9 PSBEVUtfQVNDX1BMVVMpIHsKKwkJCQlpZiAoc3RhdGUgIT0gMikgeworCQkJCQlicmVhazsKKwkJ CQl9IGVsc2UgeworCQkJCQlzdGF0ZSA9IDM7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlicmVh azsKKwkJCX0KKwkJCURVS19fQVBQRU5EQlVGRkVSKGxleF9jdHgsIHgpOworCQkJRFVLX19BRFZB TkNFQ0hBUlMobGV4X2N0eCwgMSk7CisJCX0KKworCQkvKiBYWFg6IGJldHRlciBjb2VyY2lvbiAq LworCQkodm9pZCkgZHVrX19pbnRlcm5idWZmZXIobGV4X2N0eCwgbGV4X2N0eC0+c2xvdDFfaWR4 KTsKKworCQlpZiAoczJuX3JhZGl4ICE9IDEwKSB7CisJCQkvKiBGb3IgYmFzZXMgb3RoZXIgdGhh biAxMCwgaW50ZWdlciBvbmx5LiAqLworCQkJczJuX2ZsYWdzID0gRFVLX1MyTl9GTEFHX0FMTE9X X0xFQURJTkdfWkVSTzsKKwkJfSBlbHNlIHsKKwkJCXMybl9mbGFncyA9IERVS19TMk5fRkxBR19B TExPV19FWFAgfAorCQkJICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX0ZSQUMgfAorCQkJ ICAgICAgICAgICAgRFVLX1MyTl9GTEFHX0FMTE9XX05BS0VEX0ZSQUMgfAorCQkJICAgICAgICAg ICAgRFVLX1MyTl9GTEFHX0FMTE9XX0VNUFRZX0ZSQUMgfAorCQkJICAgICAgICAgICAgRFVLX1My Tl9GTEFHX0FMTE9XX0xFQURJTkdfWkVSTzsKKwkJfQorCisJCWR1a19kdXAobGV4X2N0eC0+dGhy LCBsZXhfY3R4LT5zbG90MV9pZHgpOworCQlkdWtfbnVtY29udl9wYXJzZShsZXhfY3R4LT50aHIs IHMybl9yYWRpeCwgczJuX2ZsYWdzKTsKKwkJdmFsID0gZHVrX3RvX251bWJlcl9tMShsZXhfY3R4 LT50aHIpOworCQlpZiAoRFVLX0lTTkFOKHZhbCkpIHsKKwkJCWdvdG8gZmFpbF9udW1iZXJfbGl0 ZXJhbDsKKwkJfQorCQlkdWtfcmVwbGFjZShsZXhfY3R4LT50aHIsIGxleF9jdHgtPnNsb3QxX2lk eCk7ICAvKiBjb3VsZCBhbHNvIGp1c3QgcG9wPyAqLworCisJCURVS19fSU5JVEJVRkZFUihsZXhf Y3R4KTsgIC8qIGZyZWUgc29tZSBtZW1vcnkgKi8KKworCQkvKiBTZWN0aW9uIDcuOC4zIChub3Rl KTogTnVtZXJpY0xpdGVyYWwgbXVzdCBiZSBmb2xsb3dlZCBieSBzb21ldGhpbmcgb3RoZXIgdGhh bgorCQkgKiBJZGVudGlmaWVyU3RhcnQgb3IgRGVjaW1hbERpZ2l0LgorCQkgKi8KKworCQlpZiAo RFVLX19JU0RJR0lUKERVS19fTDAoKSkgfHwgZHVrX3VuaWNvZGVfaXNfaWRlbnRpZmllcl9zdGFy dChEVUtfX0wwKCkpKSB7CisJCQlnb3RvIGZhaWxfbnVtYmVyX2xpdGVyYWw7CisJCX0KKworCQlv dXRfdG9rZW4tPm51bSA9IHZhbDsKKwkJYWR2dG9rID0gRFVLX19BRFZUT0soMCwgRFVLX1RPS19O VU1CRVIpOworCX0gZWxzZSBpZiAoZHVrX3VuaWNvZGVfaXNfd2hpdGVzcGFjZShEVUtfX0xPT0tV UChsZXhfY3R4LCAwKSkpIHsKKwkJRFVLX19BRFZBTkNFQ0hBUlMobGV4X2N0eCwgMSk7CisJCWdv dG8gcmVzdGFydDsKKwl9IGVsc2UgaWYgKHggPCAwKSB7CisJCWFkdnRvayA9IERVS19fQURWVE9L KDAsIERVS19UT0tfRU9GKTsKKwl9IGVsc2UgeworCQlnb3RvIGZhaWxfdG9rZW47CisJfQorIHNr aXBfc2xvd19wYXRoOgorCisJLyoKKwkgKiAgU2hhcmVkIGV4aXQgcGF0aAorCSAqLworCisJRFVL X19BRFZBTkNFQllURVMobGV4X2N0eCwgYWR2dG9rID4+IDgpOworCW91dF90b2tlbi0+dCA9IGFk dnRvayAmIDB4ZmY7CisJaWYgKG91dF90b2tlbi0+dF9ub3JlcyA9PSBEVUtfVE9LX0lOVkFMSUQp IHsKKwkJb3V0X3Rva2VuLT50X25vcmVzID0gb3V0X3Rva2VuLT50OworCX0KKwlvdXRfdG9rZW4t PmxpbmV0ZXJtID0gZ290X2xpbmV0ZXJtOworCisJLyogQXV0b21hdGljIHNlbWljb2xvbiBpbnNl cnRpb24gaXMgYWxsb3dlZCBpZiBhIHRva2VuIGlzIHByZWNlZGVkCisJICogYnkgbGluZSB0ZXJt aW5hdG9yKHMpLCBvciB0ZXJtaW5hdGVzIGEgc3RhdGVtZW50IGxpc3QgKHJpZ2h0IGN1cmx5CisJ ICogb3IgRU9GKS4KKwkgKi8KKwlpZiAoZ290X2xpbmV0ZXJtIHx8IG91dF90b2tlbi0+dCA9PSBE VUtfVE9LX1JDVVJMWSB8fCBvdXRfdG9rZW4tPnQgPT0gRFVLX1RPS19FT0YpIHsKKwkJb3V0X3Rv a2VuLT5hbGxvd19hdXRvX3NlbWkgPSAxOworCX0gZWxzZSB7CisJCW91dF90b2tlbi0+YWxsb3df YXV0b19zZW1pID0gMDsKKwl9CisKKwlyZXR1cm47CisKKyBmYWlsX3Rva2VuX2xpbWl0OgorCURV S19FUlJPUl9SQU5HRShsZXhfY3R4LT50aHIsIERVS19TVFJfVE9LRU5fTElNSVQpOworCURVS19X T19OT1JFVFVSTihyZXR1cm47KTsKKworIGZhaWxfdG9rZW46CisJRFVLX0VSUk9SX1NZTlRBWChs ZXhfY3R4LT50aHIsIERVS19TVFJfSU5WQUxJRF9UT0tFTik7CisJRFVLX1dPX05PUkVUVVJOKHJl dHVybjspOworCisgZmFpbF9udW1iZXJfbGl0ZXJhbDoKKwlEVUtfRVJST1JfU1lOVEFYKGxleF9j dHgtPnRociwgRFVLX1NUUl9JTlZBTElEX05VTUJFUl9MSVRFUkFMKTsKKwlEVUtfV09fTk9SRVRV Uk4ocmV0dXJuOyk7CisKKyBmYWlsX2VzY2FwZToKKwlEVUtfRVJST1JfU1lOVEFYKGxleF9jdHgt PnRociwgRFVLX1NUUl9JTlZBTElEX0VTQ0FQRSk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjsp OworCisgZmFpbF91bnRlcm1fcmVnZXhwOgorCURVS19FUlJPUl9TWU5UQVgobGV4X2N0eC0+dGhy LCBEVUtfU1RSX1VOVEVSTUlOQVRFRF9SRUdFWFApOworCURVS19XT19OT1JFVFVSTihyZXR1cm47 KTsKKworIGZhaWxfdW50ZXJtX2NvbW1lbnQ6CisJRFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50 aHIsIERVS19TVFJfVU5URVJNSU5BVEVEX0NPTU1FTlQpOworCURVS19XT19OT1JFVFVSTihyZXR1 cm47KTsKKworI2lmICFkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisgZmFpbF9yZWdl eHBfc3VwcG9ydDoKKwlEVUtfRVJST1JfU1lOVEFYKGxleF9jdHgtPnRociwgRFVLX1NUUl9SRUdF WFBfU1VQUE9SVF9ESVNBQkxFRCk7CisJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworI2VuZGlm Cit9CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisKKy8qCisgKiAgUGFy c2UgYSBSZWdFeHAgdG9rZW4uICBUaGUgZ3JhbW1hciBpcyBkZXNjcmliZWQgaW4gRTUgU2VjdGlv biAxNS4xMC4KKyAqICBUZXJtaW5hbCBjb25zdHJ1Y3Rpb25zIChzdWNoIGFzIHF1YW50aWZpZXJz KSBhcmUgcGFyc2VkIGRpcmVjdGx5IGhlcmUuCisgKgorICogIDB4ZmZmZmZmZmZVIGlzIHVzZWQg YXMgYSBtYXJrZXIgZm9yICJpbmZpbml0eSIgaW4gcXVhbnRpZmllcnMuICBGdXJ0aGVyLAorICog IERVS19fTUFYX1JFX1FVQU5UX0RJR0lUUyBsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRp Z2l0cyB0aGF0CisgKiAgd2lsbCBiZSBhY2NlcHRlZCBmb3IgYSBxdWFudGlmaWVyLgorICovCisK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19sZXhlcl9wYXJzZV9yZV90b2tlbihkdWtfbGV4ZXJfY3R4 ICpsZXhfY3R4LCBkdWtfcmVfdG9rZW4gKm91dF90b2tlbikgeworCWR1a19zbWFsbF91aW50X3Qg YWR2dG9rID0gMDsgIC8qIGluaXQgaXMgdW5uZWNlc3NhcnkgYnV0IHN1cHByZXNzZXMgIm1heSBi ZSB1c2VkIHVuaW5pdGlhbGl6ZWQiIHdhcm5pbmdzICovCisJZHVrX2NvZGVwb2ludF90IHgsIHk7 CisKKwlpZiAoKytsZXhfY3R4LT50b2tlbl9jb3VudCA+PSBsZXhfY3R4LT50b2tlbl9saW1pdCkg eworCQlnb3RvIGZhaWxfdG9rZW5fbGltaXQ7CisJfQorCisJZHVrX21lbXplcm8ob3V0X3Rva2Vu LCBzaXplb2YoKm91dF90b2tlbikpOworCisJeCA9IERVS19fTDAoKTsKKwl5ID0gRFVLX19MMSgp OworCisJRFVLX0RERChEVUtfREREUFJJTlQoInBhcnNpbmcgcmVnZXhwIHRva2VuLCBMMD0lbGQs IEwxPSVsZCIsIChsb25nKSB4LCAobG9uZykgeSkpOworCisJc3dpdGNoICh4KSB7CisJY2FzZSBE VUtfQVNDX1BJUEU6IHsKKwkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1JFVE9LX0RJU0pV TkNUSU9OKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0FTQ19DQVJFVDogeworCQlhZHZ0b2sg PSBEVUtfX0FEVlRPSygxLCBEVUtfUkVUT0tfQVNTRVJUX1NUQVJUKTsKKwkJYnJlYWs7CisJfQor CWNhc2UgRFVLX0FTQ19ET0xMQVI6IHsKKwkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1JF VE9LX0FTU0VSVF9FTkQpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfQVNDX1FVRVNUSU9OOiB7 CisJCW91dF90b2tlbi0+cW1pbiA9IDA7CisJCW91dF90b2tlbi0+cW1heCA9IDE7CisJCWlmICh5 ID09IERVS19BU0NfUVVFU1RJT04pIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19S RVRPS19RVUFOVElGSUVSKTsKKwkJCW91dF90b2tlbi0+Z3JlZWR5ID0gMDsKKwkJfSBlbHNlIHsK KwkJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19SRVRPS19RVUFOVElGSUVSKTsKKwkJCW91 dF90b2tlbi0+Z3JlZWR5ID0gMTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBEVUtfQVNDX1NU QVI6IHsKKwkJb3V0X3Rva2VuLT5xbWluID0gMDsKKwkJb3V0X3Rva2VuLT5xbWF4ID0gRFVLX1JF X1FVQU5USUZJRVJfSU5GSU5JVEU7CisJCWlmICh5ID09IERVS19BU0NfUVVFU1RJT04pIHsKKwkJ CWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19SRVRPS19RVUFOVElGSUVSKTsKKwkJCW91dF90 b2tlbi0+Z3JlZWR5ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDEs IERVS19SRVRPS19RVUFOVElGSUVSKTsKKwkJCW91dF90b2tlbi0+Z3JlZWR5ID0gMTsKKwkJfQor CQlicmVhazsKKwl9CisJY2FzZSBEVUtfQVNDX1BMVVM6IHsKKwkJb3V0X3Rva2VuLT5xbWluID0g MTsKKwkJb3V0X3Rva2VuLT5xbWF4ID0gRFVLX1JFX1FVQU5USUZJRVJfSU5GSU5JVEU7CisJCWlm ICh5ID09IERVS19BU0NfUVVFU1RJT04pIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERV S19SRVRPS19RVUFOVElGSUVSKTsKKwkJCW91dF90b2tlbi0+Z3JlZWR5ID0gMDsKKwkJfSBlbHNl IHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDEsIERVS19SRVRPS19RVUFOVElGSUVSKTsKKwkJ CW91dF90b2tlbi0+Z3JlZWR5ID0gMTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBEVUtfQVND X0xDVVJMWTogeworCQkvKiBQcm9kdWN0aW9uIGFsbG93cyAnRGVjaW1hbERpZ2l0cycsIGluY2x1 ZGluZyBsZWFkaW5nIHplcm9lcyAqLworCQlkdWtfdWludDMyX3QgdmFsMSA9IDA7CisJCWR1a191 aW50MzJfdCB2YWwyID0gRFVLX1JFX1FVQU5USUZJRVJfSU5GSU5JVEU7CisJCWR1a19zbWFsbF9p bnRfdCBkaWdpdHMgPSAwOworI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUkVHRVhQX1NZTlRBWCkK KwkJZHVrX2xleGVyX3BvaW50IGxleF9wdDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfVVNF X0VTNl9SRUdFWFBfU1lOVEFYKQorCQkvKiBTdG9yZSBsZXhlciBwb3NpdGlvbiwgcmVzdG9yaW5n IGlmIHF1YW50aWZpZXIgaXMgaW52YWxpZC4gKi8KKwkJRFVLX0xFWEVSX0dFVFBPSU5UKGxleF9j dHgsICZsZXhfcHQpOworI2VuZGlmCisKKwkJZm9yICg7OykgeworCQkJRFVLX19BRFZBTkNFQ0hB UlMobGV4X2N0eCwgMSk7ICAvKiBlYXQgJ3snIG9uIGVudHJ5ICovCisJCQl4ID0gRFVLX19MMCgp OworCQkJaWYgKERVS19fSVNESUdJVCh4KSkgeworCQkJCWRpZ2l0cysrOworCQkJCXZhbDEgPSB2 YWwxICogMTAgKyAoZHVrX3VpbnQzMl90KSBkdWtfX2hleHZhbCh4KTsKKwkJCX0gZWxzZSBpZiAo eCA9PSBEVUtfQVNDX0NPTU1BKSB7CisJCQkJaWYgKGRpZ2l0cyA+IERVS19fTUFYX1JFX1FVQU5U X0RJR0lUUykgeworCQkJCQlnb3RvIGludmFsaWRfcXVhbnRpZmllcjsKKwkJCQl9CisJCQkJaWYg KHZhbDIgIT0gRFVLX1JFX1FVQU5USUZJRVJfSU5GSU5JVEUpIHsKKwkJCQkJZ290byBpbnZhbGlk X3F1YW50aWZpZXI7CisJCQkJfQorCQkJCWlmIChEVUtfX0wxKCkgPT0gRFVLX0FTQ19SQ1VSTFkp IHsKKwkJCQkJLyogZm9ybTogeyBEZWNpbWFsRGlnaXRzICwgfSwgdmFsMSA9IG1pbiBjb3VudCAq LworCQkJCQlpZiAoZGlnaXRzID09IDApIHsKKwkJCQkJCWdvdG8gaW52YWxpZF9xdWFudGlmaWVy OworCQkJCQl9CisJCQkJCW91dF90b2tlbi0+cW1pbiA9IHZhbDE7CisJCQkJCW91dF90b2tlbi0+ cW1heCA9IERVS19SRV9RVUFOVElGSUVSX0lORklOSVRFOworCQkJCQlEVUtfX0FEVkFOQ0VDSEFS UyhsZXhfY3R4LCAyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXZhbDIgPSB2YWwxOworCQkJ CXZhbDEgPSAwOworCQkJCWRpZ2l0cyA9IDA7ICAvKiBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJl Y2F1c2Ugb2YgbG9va2FoZWFkICd9JyBhYm92ZSAqLworCQkJfSBlbHNlIGlmICh4ID09IERVS19B U0NfUkNVUkxZKSB7CisJCQkJaWYgKGRpZ2l0cyA+IERVS19fTUFYX1JFX1FVQU5UX0RJR0lUUykg eworCQkJCQlnb3RvIGludmFsaWRfcXVhbnRpZmllcjsKKwkJCQl9CisJCQkJaWYgKGRpZ2l0cyA9 PSAwKSB7CisJCQkJCWdvdG8gaW52YWxpZF9xdWFudGlmaWVyOworCQkJCX0KKwkJCQlpZiAodmFs MiAhPSBEVUtfUkVfUVVBTlRJRklFUl9JTkZJTklURSkgeworCQkJCQkvKiB2YWwyID0gbWluIGNv dW50LCB2YWwxID0gbWF4IGNvdW50ICovCisJCQkJCW91dF90b2tlbi0+cW1pbiA9IHZhbDI7CisJ CQkJCW91dF90b2tlbi0+cW1heCA9IHZhbDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogdmFsMSA9 IGNvdW50ICovCisJCQkJCW91dF90b2tlbi0+cW1pbiA9IHZhbDE7CisJCQkJCW91dF90b2tlbi0+ cW1heCA9IHZhbDE7CisJCQkJfQorCQkJCURVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIDEpOwor CQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlnb3RvIGludmFsaWRfcXVhbnRpZmllcjsKKwkJ CX0KKwkJfQorCQlpZiAoRFVLX19MMCgpID09IERVS19BU0NfUVVFU1RJT04pIHsKKwkJCW91dF90 b2tlbi0+Z3JlZWR5ID0gMDsKKwkJCURVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIDEpOworCQl9 IGVsc2UgeworCQkJb3V0X3Rva2VuLT5ncmVlZHkgPSAxOworCQl9CisJCWFkdnRvayA9IERVS19f QURWVE9LKDAsIERVS19SRVRPS19RVUFOVElGSUVSKTsKKwkJYnJlYWs7CisgaW52YWxpZF9xdWFu dGlmaWVyOgorI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZfUkVHRVhQX1NZTlRBWCkKKwkJLyogRmFp bGVkIHRvIG1hdGNoIHRoZSBxdWFudGlmaWVyLCByZXN0b3JlIGxleGVyIGFuZCBwYXJzZQorCQkg KiBvcGVuaW5nIGJyYWNlIGFzIGEgbGl0ZXJhbC4KKwkJICovCisJCURVS19MRVhFUl9TRVRQT0lO VChsZXhfY3R4LCAmbGV4X3B0KTsKKwkJYWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1JFVE9L X0FUT01fQ0hBUik7CisJCW91dF90b2tlbi0+bnVtID0gRFVLX0FTQ19MQ1VSTFk7CisjZWxzZQor CQlnb3RvIGZhaWxfcXVhbnRpZmllcjsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBEVUtf QVNDX1BFUklPRDogeworCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygxLCBEVUtfUkVUT0tfQVRPTV9Q RVJJT0QpOworCQlicmVhazsKKwl9CisJY2FzZSBEVUtfQVNDX0JBQ0tTTEFTSDogeworCQkvKiBU aGUgRTUuMSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHNlZW0gdG8gYWxsb3cgSWRlbnRpZmllclBh cnQgY2hhcmFjdGVycworCQkgKiB0byBiZSB1c2VkIGFzIGlkZW50aXR5IGVzY2FwZXMuICBVbmZv cnR1bmF0ZWx5IHRoaXMgaW5jbHVkZXMgJyQnLCB3aGljaAorCQkgKiBjYW5ub3QgYmUgZXNjYXBl ZCBhcyAnXCQnOyBpdCBuZWVkcyB0byBiZSBlc2NhcGVkIGUuZy4gYXMgJ1x1MDAyNCcuCisJCSAq IE1hbnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIChpbmNsdWRpbmcgVjggYW5kIFJoaW5vLCBmb3Ig aW5zdGFuY2UpIGRvCisJCSAqIGFjY2VwdCAnXCQnIGFzIGEgdmFsaWQgaWRlbnRpdHkgZXNjYXBl LCB3aGljaCBpcyBxdWl0ZSBwcmFnbWF0aWMsIGFuZAorCQkgKiBFUzIwMTUgQW5uZXggQiByZWxh eGVzIHRoZSBydWxlcyB0byBhbGxvdyB0aGVzZSAoYW5kIG90aGVyKSByZWFsIHdvcmxkIGZvcm1z LgorCQkgKi8KKworCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygyLCBEVUtfUkVUT0tfQVRPTV9DSEFS KTsgIC8qIGRlZmF1bHQ6IGNoYXIgZXNjYXBlICh0d28gY2hhcnMpICovCisJCWlmICh5ID09IERV S19BU0NfTENfQikgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1JFVE9LX0FTU0VS VF9XT1JEX0JPVU5EQVJZKTsKKwkJfSBlbHNlIGlmICh5ID09IERVS19BU0NfVUNfQikgeworCQkJ YWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1JFVE9LX0FTU0VSVF9OT1RfV09SRF9CT1VOREFS WSk7CisJCX0gZWxzZSBpZiAoeSA9PSBEVUtfQVNDX0xDX0YpIHsKKwkJCW91dF90b2tlbi0+bnVt ID0gMHgwMDBjOworCQl9IGVsc2UgaWYgKHkgPT0gRFVLX0FTQ19MQ19OKSB7CisJCQlvdXRfdG9r ZW4tPm51bSA9IDB4MDAwYTsKKwkJfSBlbHNlIGlmICh5ID09IERVS19BU0NfTENfVCkgeworCQkJ b3V0X3Rva2VuLT5udW0gPSAweDAwMDk7CisJCX0gZWxzZSBpZiAoeSA9PSBEVUtfQVNDX0xDX1Ip IHsKKwkJCW91dF90b2tlbi0+bnVtID0gMHgwMDBkOworCQl9IGVsc2UgaWYgKHkgPT0gRFVLX0FT Q19MQ19WKSB7CisJCQlvdXRfdG9rZW4tPm51bSA9IDB4MDAwYjsKKwkJfSBlbHNlIGlmICh5ID09 IERVS19BU0NfTENfQykgeworCQkJeCA9IERVS19fTDIoKTsKKwkJCWlmICgoeCA+PSBEVUtfQVND X0xDX0EgJiYgeCA8PSBEVUtfQVNDX0xDX1opIHx8CisJCQkgICAgKHggPj0gRFVLX0FTQ19VQ19B ICYmIHggPD0gRFVLX0FTQ19VQ19aKSkgeworCQkJCW91dF90b2tlbi0+bnVtID0gKGR1a191aW50 MzJfdCkgKHggJSAzMik7CisJCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMywgRFVLX1JFVE9LX0FU T01fQ0hBUik7CisJCQl9IGVsc2UgeworCQkJCWdvdG8gZmFpbF9lc2NhcGU7CisJCQl9CisJCX0g ZWxzZSBpZiAoeSA9PSBEVUtfQVNDX0xDX1ggfHwgeSA9PSBEVUtfQVNDX0xDX1UpIHsKKwkJCS8q IFRoZSB0b2tlbiB2YWx1ZSBpcyB0aGUgVW5pY29kZSBjb2RlcG9pbnQgd2l0aG91dAorCQkJICog aXQgYmVpbmcgZGVjb2RlIGludG8gc3Vycm9nYXRlIHBhaXIgY2hhcmFjdGVycworCQkJICogaGVy ZS4gIFRoZSBcdXtIK30gaXMgb25seSBhbGxvd2VkIGluIFVuaWNvZGUgbW9kZQorCQkJICogd2hp Y2ggd2UgZG9uJ3Qgc3VwcG9ydCB5ZXQuCisJCQkgKi8KKwkJCW91dF90b2tlbi0+bnVtID0gKGR1 a191aW50MzJfdCkgZHVrX19sZXhlcl9wYXJzZV9lc2NhcGUobGV4X2N0eCwgMCAvKmFsbG93X2Vz NiovKTsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDAsIERVS19SRVRPS19BVE9NX0NIQVIpOwor CQl9IGVsc2UgaWYgKHkgPT0gRFVLX0FTQ19MQ19EKSB7CisJCQlhZHZ0b2sgPSBEVUtfX0FEVlRP SygyLCBEVUtfUkVUT0tfQVRPTV9ESUdJVCk7CisJCX0gZWxzZSBpZiAoeSA9PSBEVUtfQVNDX1VD X0QpIHsKKwkJCWFkdnRvayA9IERVS19fQURWVE9LKDIsIERVS19SRVRPS19BVE9NX05PVF9ESUdJ VCk7CisJCX0gZWxzZSBpZiAoeSA9PSBEVUtfQVNDX0xDX1MpIHsKKwkJCWFkdnRvayA9IERVS19f QURWVE9LKDIsIERVS19SRVRPS19BVE9NX1dISVRFKTsKKwkJfSBlbHNlIGlmICh5ID09IERVS19B U0NfVUNfUykgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1JFVE9LX0FUT01fTk9U X1dISVRFKTsKKwkJfSBlbHNlIGlmICh5ID09IERVS19BU0NfTENfVykgeworCQkJYWR2dG9rID0g RFVLX19BRFZUT0soMiwgRFVLX1JFVE9LX0FUT01fV09SRF9DSEFSKTsKKwkJfSBlbHNlIGlmICh5 ID09IERVS19BU0NfVUNfVykgeworCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMiwgRFVLX1JFVE9L X0FUT01fTk9UX1dPUkRfQ0hBUik7CisJCX0gZWxzZSBpZiAoRFVLX19JU0RJR0lUKHkpKSB7CisJ CQkvKiBFNSBTZWN0aW9uIDE1LjEwLjIuMTEgKi8KKwkJCWlmICh5ID09IERVS19BU0NfMCkgewor CQkJCWlmIChEVUtfX0lTRElHSVQoRFVLX19MMigpKSkgeworCQkJCQlnb3RvIGZhaWxfZXNjYXBl OworCQkJCX0KKwkJCQlvdXRfdG9rZW4tPm51bSA9IDB4MDAwMDsKKwkJCQlhZHZ0b2sgPSBEVUtf X0FEVlRPSygyLCBEVUtfUkVUT0tfQVRPTV9DSEFSKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogWFhY OiBzaGFyZWQgcGFyc2luZz8gKi8KKwkJCQlkdWtfdWludDMyX3QgdmFsID0gMDsKKwkJCQlkdWtf c21hbGxfaW50X3QgaTsKKwkJCQlmb3IgKGkgPSAwOyA7IGkrKykgeworCQkJCQlpZiAoaSA+PSBE VUtfX01BWF9SRV9ERUNFU0NfRElHSVRTKSB7CisJCQkJCQlnb3RvIGZhaWxfZXNjYXBlOworCQkJ CQl9CisJCQkJCURVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIDEpOyAgLyogZWF0IGJhY2tzbGFz aCBvbiBlbnRyeSAqLworCQkJCQl4ID0gRFVLX19MMCgpOworCQkJCQlpZiAoIURVS19fSVNESUdJ VCh4KSkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJdmFsID0gdmFsICogMTAgKyAoZHVr X3VpbnQzMl90KSBkdWtfX2hleHZhbCh4KTsKKwkJCQl9CisJCQkJLyogRFVLX19MMCgpIGNhbm5v dCBiZSBhIGRpZ2l0LCBiZWNhdXNlIHRoZSBsb29wIGRvZXNuJ3QgdGVybWluYXRlIGlmIGl0IGlz ICovCisJCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMCwgRFVLX1JFVE9LX0FUT01fQkFDS1JFRkVS RU5DRSk7CisJCQkJb3V0X3Rva2VuLT5udW0gPSB2YWw7CisJCQl9CisjaWYgZGVmaW5lZChEVUtf VVNFX0VTNl9SRUdFWFBfU1lOVEFYKQorCQl9IGVsc2UgaWYgKHkgPj0gMCkgeworCQkJLyogRm9y IEVTMjAxNSBBbm5leCBCLCBhY2NlcHQgYW55IHNvdXJjZSBjaGFyYWN0ZXIgYXMgaWRlbnRpdHkK KwkJCSAqIGVzY2FwZSBleGNlcHQgJ2MnIHdoaWNoIGlzIHVzZWQgZm9yIGNvbnRyb2wgY2hhcmFj dGVycy4KKwkJCSAqIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82 LjAvI3NlYy1yZWd1bGFyLWV4cHJlc3Npb25zLXBhdHRlcm5zCisJCQkgKiBDYXJlZnVsIG5vdCB0 byBtYXRjaCBlbmQtb2YtYnVmZmVyICg8MCkgaGVyZS4KKwkJCSAqIFRoaXMgaXMgbm90IHlldCBm dWxsIEVTMjAxNSBBbm5leCBCIGJlY2F1c2UgY2FzZXMgYWJvdmUKKwkJCSAqIChsaWtlIGhleCBl c2NhcGUpIHdvbid0IGJhY2t0cmFjay4KKwkJCSAqLworCQkJRFVLX0FTU0VSVCh5ICE9IERVS19B U0NfTENfQyk7ICAvKiBjb3ZlcmVkIGFib3ZlICovCisjZWxzZSAgLyogRFVLX1VTRV9FUzZfUkVH RVhQX1NZTlRBWCAqLworCQl9IGVsc2UgaWYgKCh5ID49IDAgJiYgIWR1a191bmljb2RlX2lzX2lk ZW50aWZpZXJfcGFydCh5KSkgfHwKKwkJICAgICAgICAgICB5ID09IERVS19VTklDT0RFX0NQX1pX TkogfHwKKwkJICAgICAgICAgICB5ID09IERVS19VTklDT0RFX0NQX1pXSikgeworCQkJLyogRm9y IEVTNS4xIGlkZW50aXR5IGVzY2FwZXMgYXJlIG5vdCBhbGxvd2VkIGZvciBpZGVudGlmaWVyCisJ CQkgKiBwYXJ0cy4gIFRoaXMgY29uZmxpY3RzIHdpdGggYSBsb3Qgb2YgcmVhbCB3b3JsZCBjb2Rl IGFzIHRoaXMKKwkJCSAqIGRvZXNuJ3QgZS5nLiBhbGxvdyBlc2NhcGluZyBhIGRvbGxhciBzaWdu IGFzIC9cJC8sIHNlZQorCQkJICogdGVzdC1yZWdleHAtaWRlbnRpdHktZXNjYXBlLWRvbGxhci5q cy4KKwkJCSAqLworI2VuZGlmICAvKiBEVUtfVVNFX0VTNl9SRUdFWFBfU1lOVEFYICovCisJCQlv dXRfdG9rZW4tPm51bSA9IChkdWtfdWludDMyX3QpIHk7CisJCX0gZWxzZSB7CisJCQlnb3RvIGZh aWxfZXNjYXBlOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERVS19BU0NfTFBBUkVOOiB7CisJ CS8qIFhYWDogbmFtaW5nIGlzIGluY29uc2lzdGVudDogQVRPTV9FTkRfR1JPVVAgZW5kcyBhbiBB U1NFUlRfU1RBUlRfTE9PS0FIRUFEICovCisKKwkJaWYgKHkgPT0gRFVLX0FTQ19RVUVTVElPTikg eworCQkJaWYgKERVS19fTDIoKSA9PSBEVUtfQVNDX0VRVUFMUykgeworCQkJCS8qICg/PSAqLwor CQkJCWFkdnRvayA9IERVS19fQURWVE9LKDMsIERVS19SRVRPS19BU1NFUlRfU1RBUlRfUE9TX0xP T0tBSEVBRCk7CisJCQl9IGVsc2UgaWYgKERVS19fTDIoKSA9PSBEVUtfQVNDX0VYQ0xBTUFUSU9O KSB7CisJCQkJLyogKD8hICovCisJCQkJYWR2dG9rID0gRFVLX19BRFZUT0soMywgRFVLX1JFVE9L X0FTU0VSVF9TVEFSVF9ORUdfTE9PS0FIRUFEKTsKKwkJCX0gZWxzZSBpZiAoRFVLX19MMigpID09 IERVS19BU0NfQ09MT04pIHsKKwkJCQkvKiAoPzogKi8KKwkJCQlhZHZ0b2sgPSBEVUtfX0FEVlRP SygzLCBEVUtfUkVUT0tfQVRPTV9TVEFSVF9OT05DQVBUVVJFX0dST1VQKTsKKwkJCX0gZWxzZSB7 CisJCQkJZ290byBmYWlsX2dyb3VwOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogKCAqLworCQkJ YWR2dG9rID0gRFVLX19BRFZUT0soMSwgRFVLX1JFVE9LX0FUT01fU1RBUlRfQ0FQVFVSRV9HUk9V UCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgRFVLX0FTQ19SUEFSRU46IHsKKwkJYWR2dG9r ID0gRFVLX19BRFZUT0soMSwgRFVLX1JFVE9LX0FUT01fRU5EX0dST1VQKTsKKwkJYnJlYWs7CisJ fQorCWNhc2UgRFVLX0FTQ19MQlJBQ0tFVDogeworCQkvKgorCQkgKiAgVG8gYXZvaWQgY3JlYXRp bmcgYSBoZWF2eSBpbnRlcm1lZGlhdGUgdmFsdWUgZm9yIHRoZSBsaXN0IG9mIHJhbmdlcywKKwkJ ICogIG9ubHkgdGhlIHN0YXJ0IHRva2VuICgnWycgb3IgJ1teJykgaXMgcGFyc2VkIGhlcmUuICBU aGUgcmVnZXhwCisJCSAqICBjb21waWxlciBwYXJzZXMgdGhlIHJhbmdlcyBpdHNlbGYuCisJCSAq LworCisJCS8qIFhYWDogd2l0aCBEVUtfVVNFX0VTNl9SRUdFWFBfU1lOVEFYIHdlIHNob3VsZCBh bGxvdyBsZWZ0IGJyYWNrZXQKKwkJICogbGl0ZXJhbCB0b28sIGJ1dCBpdCdzIG5vdCBlYXN5IHRv IHBhcnNlIHdpdGhvdXQgYmFja3RyYWNraW5nLgorCQkgKi8KKworCQlhZHZ0b2sgPSBEVUtfX0FE VlRPSygxLCBEVUtfUkVUT0tfQVRPTV9TVEFSVF9DSEFSQ0xBU1MpOworCQlpZiAoeSA9PSBEVUtf QVNDX0NBUkVUKSB7CisJCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygyLCBEVUtfUkVUT0tfQVRPTV9T VEFSVF9DSEFSQ0xBU1NfSU5WRVJURUQpOworCQl9CisJCWJyZWFrOworCX0KKyNpZiAhZGVmaW5l ZChEVUtfVVNFX0VTNl9SRUdFWFBfU1lOVEFYKQorCWNhc2UgRFVLX0FTQ19SQ1VSTFk6CisJY2Fz ZSBEVUtfQVNDX1JCUkFDS0VUOiB7CisJCS8qIEFsdGhvdWdoIHRoZXNlIGNvdWxkIGJlIHBhcnNl ZCBhcyBQYXR0ZXJuQ2hhcmFjdGVycyB1bmFtYmlndW91c2x5IChoZXJlKSwKKwkJICogRTUgU2Vj dGlvbiAxNS4xMC4xIGdyYW1tYXIgZXhwbGljaXRseSBmb3JiaWRzIHRoZXNlIGFzIFBhdHRlcm5D aGFyYWN0ZXJzLgorCQkgKi8KKwkJZ290byBmYWlsX2ludmFsaWRfY2hhcjsKKwkJYnJlYWs7CisJ fQorI2VuZGlmCisJY2FzZSAtMTogeworCQkvKiBFT0YgKi8KKwkJYWR2dG9rID0gRFVLX19BRFZU T0soMCwgRFVLX1RPS19FT0YpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDogeworCQkvKiBQYXR0 ZXJuQ2hhcmFjdGVyLCBhbGwgZXhjbHVkZWQgY2hhcmFjdGVycyBhcmUgbWF0Y2hlZCBieSBjYXNl cyBhYm92ZSAqLworCQlhZHZ0b2sgPSBEVUtfX0FEVlRPSygxLCBEVUtfUkVUT0tfQVRPTV9DSEFS KTsKKwkJb3V0X3Rva2VuLT5udW0gPSAoZHVrX3VpbnQzMl90KSB4OworCQlicmVhazsKKwl9CisJ fQorCisJLyoKKwkgKiAgU2hhcmVkIGV4aXQgcGF0aAorCSAqLworCisJRFVLX19BRFZBTkNFQllU RVMobGV4X2N0eCwgYWR2dG9rID4+IDgpOworCW91dF90b2tlbi0+dCA9IGFkdnRvayAmIDB4ZmY7 CisJcmV0dXJuOworCisgZmFpbF90b2tlbl9saW1pdDoKKwlEVUtfRVJST1JfUkFOR0UobGV4X2N0 eC0+dGhyLCBEVUtfU1RSX1RPS0VOX0xJTUlUKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7 CisKKyBmYWlsX2VzY2FwZToKKwlEVUtfRVJST1JfU1lOVEFYKGxleF9jdHgtPnRociwgRFVLX1NU Ul9JTlZBTElEX1JFR0VYUF9FU0NBUEUpOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwor IGZhaWxfZ3JvdXA6CisJRFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50aHIsIERVS19TVFJfSU5W QUxJRF9SRUdFWFBfR1JPVVApOworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKworI2lmICFk ZWZpbmVkKERVS19VU0VfRVM2X1JFR0VYUF9TWU5UQVgpCisgZmFpbF9pbnZhbGlkX2NoYXI6CisJ RFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50aHIsIERVS19TVFJfSU5WQUxJRF9SRUdFWFBfQ0hB UkFDVEVSKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisKKyBmYWlsX3F1YW50aWZpZXI6 CisJRFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50aHIsIERVS19TVFJfSU5WQUxJRF9RVUFOVElG SUVSKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisjZW5kaWYKK30KKworLyoKKyAqICBT cGVjaWFsIHBhcnNlciBmb3IgY2hhcmFjdGVyIGNsYXNzZXM7IGNhbGxzIGNhbGxiYWNrIGZvciBl dmVyeQorICogIHJhbmdlIHBhcnNlZCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJhbmdlcyBw cmVzZW50LgorICovCisKKy8qIFhYWDogdGhpcyBkdXBsaWNhdGVzIGZ1bmN0aW9uYWxpdHkgaW4g ZHVrX3JlZ2V4cC5jIHdoZXJlIGEgc2ltaWxhciBsb29wIGlzCisgKiByZXF1aXJlZCBhbnl3YXku ICBXZSBjb3VsZCB1c2UgdGhhdCBCVVQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHJlZ2V4cCBjb21w aWxlcgorICogJ25yYW5nZXMnIHRvby4gIFdvcmsgdGhpcyBvdXQgYSBiaXQgbW9yZSBjbGVhbmx5 IHRvIHNhdmUgc3BhY2UuCisgKi8KKworLyogWFhYOiB0aGUgaGFuZGxpbmcgb2YgY2hhcmFjdGVy IHJhbmdlIGRldGVjdGlvbiBpcyBhIGJpdCBjb252b2x1dGVkLgorICogVHJ5IHRvIHNpbXBsaWZ5 IGFuZCBtYWtlIHNtYWxsZXIuCisgKi8KKworLyogWFhYOiBsb2dpYyBmb3IgaGFuZGxpbmcgY2hh cmFjdGVyIHJhbmdlcyBpcyBub3cgaW5jb3JyZWN0LCBpdCB3aWxsIGFjY2VwdAorICogZS5nLiBb XGQtel0gd2hlcmVhcyBpdCBzaG91bGQgY3JvYWsgZnJvbSBpdD8gIFNNSlMgYWNjZXB0cyB0aGlz IHRvbywgdGhvdWdoLgorICoKKyAqIE5lZWRzIGEgcmVhZCB0aHJvdWdoIGFuZCBhIGxvdCBvZiBh ZGRpdGlvbmFsIHRlc3RzLgorICovCisKK0RVS19MT0NBTAordm9pZCBkdWtfX2VtaXRfdTE2X2Rp cmVjdF9yYW5nZXMoZHVrX2xleGVyX2N0eCAqbGV4X2N0eCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGR1a19yZV9yYW5nZV9jYWxsYmFjayBnZW5fcmFuZ2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyZGF0YSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGR1a191aW50MTZfdCAqcmFuZ2VzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHVrX3NtYWxsX2ludF90IG51bSkgeworCWNvbnN0IGR1a191 aW50MTZfdCAqcmFuZ2VzX2VuZDsKKworCURVS19VTlJFRihsZXhfY3R4KTsKKworCXJhbmdlc19l bmQgPSByYW5nZXMgKyBudW07CisJd2hpbGUgKHJhbmdlcyA8IHJhbmdlc19lbmQpIHsKKwkJLyog bWFyayByYW5nZSAnZGlyZWN0JywgYnlwYXNzIGNhbm9uaWNhbGl6YXRpb24gKHNlZSBXaWtpKSAq LworCQlnZW5fcmFuZ2UodXNlcmRhdGEsIChkdWtfY29kZXBvaW50X3QpIHJhbmdlc1swXSwgKGR1 a19jb2RlcG9pbnRfdCkgcmFuZ2VzWzFdLCAxKTsKKwkJcmFuZ2VzICs9IDI7CisJfQorfQorCitE VUtfSU5URVJOQUwgdm9pZCBkdWtfbGV4ZXJfcGFyc2VfcmVfcmFuZ2VzKGR1a19sZXhlcl9jdHgg KmxleF9jdHgsIGR1a19yZV9yYW5nZV9jYWxsYmFjayBnZW5fcmFuZ2UsIHZvaWQgKnVzZXJkYXRh KSB7CisJZHVrX2NvZGVwb2ludF90IHN0YXJ0ID0gLTE7CisJZHVrX2NvZGVwb2ludF90IGNoOwor CWR1a19jb2RlcG9pbnRfdCB4OworCWR1a19ib29sX3QgZGFzaCA9IDA7CisJZHVrX3NtYWxsX3Vp bnRfdCBhZHYgPSAwOworCisJRFVLX0REKERVS19ERFBSSU5UKCJwYXJzaW5nIHJlZ2V4cCByYW5n ZXMiKSk7CisKKwlmb3IgKDs7KSB7CisJCURVS19fQURWQU5DRUNIQVJTKGxleF9jdHgsIGFkdik7 CisJCWFkdiA9IDE7CisKKwkJeCA9IERVS19fTDAoKTsKKworCQljaCA9IC0xOyAgLyogbm90IHN0 cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGF2b2lkcyAidW5pbml0aWFsaXplZCB2YXJpYWJsZSIgd2Fy bmluZ3MgKi8KKwkJRFVLX1VOUkVGKGNoKTsKKworCQlpZiAoeCA8IDApIHsKKwkJCWdvdG8gZmFp bF91bnRlcm1fY2hhcmNsYXNzOworCQl9IGVsc2UgaWYgKHggPT0gRFVLX0FTQ19SQlJBQ0tFVCkg eworCQkJaWYgKHN0YXJ0ID49IDApIHsKKwkJCQlnZW5fcmFuZ2UodXNlcmRhdGEsIHN0YXJ0LCBz dGFydCwgMCk7CisJCQl9CisJCQlEVUtfX0FEVkFOQ0VDSEFSUyhsZXhfY3R4LCAxKTsgIC8qIGVh dCAnXScgYmVmb3JlIGZpbmlzaGluZyAqLworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoeCA9PSBE VUtfQVNDX01JTlVTKSB7CisJCQlpZiAoc3RhcnQgPj0gMCAmJiAhZGFzaCAmJiBEVUtfX0wxKCkg IT0gRFVLX0FTQ19SQlJBQ0tFVCkgeworCQkJCS8qICctJyBhcyBhIHJhbmdlIGluZGljYXRvciAq LworCQkJCWRhc2ggPSAxOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQkvKiAnLScg dmVyYmF0aW0gKi8KKwkJCQljaCA9IHg7CisJCQl9CisJCX0gZWxzZSBpZiAoeCA9PSBEVUtfQVND X0JBQ0tTTEFTSCkgeworCQkJLyoKKwkJCSAqICBUaGUgZXNjYXBlcyBhcmUgc2FtZSBhcyBvdXRz aWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBleGNlcHQgdGhhdCBcYiBoYXMgYQorCQkJICogIGRpZmZl cmVudCBtZWFuaW5nLCBhbmQgXEIgYW5kIGJhY2tyZWZlcmVuY2VzIGFyZSBwcm9oaWJpdGVkIChz ZWUgRTUKKwkJCSAqICBTZWN0aW9uIDE1LjEwLjIuMTkpLiAgSG93ZXZlciwgaXQncyBkaWZmaWN1 bHQgdG8gc2hhcmUgY29kZSBiZWNhdXNlIHdlCisJCQkgKiAgaGFuZGxlIGUuZy4gIlxuIiB2ZXJ5 IGRpZmZlcmVudGx5OiBoZXJlIHdlIGdlbmVyYXRlIGEgc2luZ2xlIGNoYXJhY3RlcgorCQkJICog IHJhbmdlIGZvciBpdC4KKwkJCSAqLworCisJCQkvKiBYWFg6IEVTMjAxNSBzdXJyb2dhdGUgcGFp ciBoYW5kbGluZy4gKi8KKworCQkJeCA9IERVS19fTDEoKTsKKworCQkJYWR2ID0gMjsKKworCQkJ aWYgKHggPT0gRFVLX0FTQ19MQ19CKSB7CisJCQkJLyogTm90ZTogJ1xiJyBpbiBjaGFyIGNsYXNz IGlzIGRpZmZlcmVudCB0aGFuIG91dHNpZGUgKGFzc2VydGlvbiksCisJCQkJICogJ1xCJyBpcyBu b3QgYWxsb3dlZCBhbmQgaXMgY2F1Z2h0IGJ5IHRoZSBkdWtfdW5pY29kZV9pc19pZGVudGlmaWVy X3BhcnQoKQorCQkJCSAqIGNoZWNrIGJlbG93LgorCQkJCSAqLworCQkJCWNoID0gMHgwMDA4Owor CQkJfSBlbHNlIGlmICh4ID09IERVS19BU0NfTENfRikgeworCQkJCWNoID0gMHgwMDBjOworCQkJ fSBlbHNlIGlmICh4ID09IERVS19BU0NfTENfTikgeworCQkJCWNoID0gMHgwMDBhOworCQkJfSBl bHNlIGlmICh4ID09IERVS19BU0NfTENfVCkgeworCQkJCWNoID0gMHgwMDA5OworCQkJfSBlbHNl IGlmICh4ID09IERVS19BU0NfTENfUikgeworCQkJCWNoID0gMHgwMDBkOworCQkJfSBlbHNlIGlm ICh4ID09IERVS19BU0NfTENfVikgeworCQkJCWNoID0gMHgwMDBiOworCQkJfSBlbHNlIGlmICh4 ID09IERVS19BU0NfTENfQykgeworCQkJCXggPSBEVUtfX0wyKCk7CisJCQkJYWR2ID0gMzsKKwkJ CQlpZiAoKHggPj0gRFVLX0FTQ19MQ19BICYmIHggPD0gRFVLX0FTQ19MQ19aKSB8fAorCQkJCSAg ICAoeCA+PSBEVUtfQVNDX1VDX0EgJiYgeCA8PSBEVUtfQVNDX1VDX1opKSB7CisJCQkJCWNoID0g KHggJSAzMik7CisJCQkJfSBlbHNlIHsKKwkJCQkJZ290byBmYWlsX2VzY2FwZTsKKwkJCQl9CisJ CQl9IGVsc2UgaWYgKHggPT0gRFVLX0FTQ19MQ19YIHx8IHggPT0gRFVLX0FTQ19MQ19VKSB7CisJ CQkJLyogVGhlIFx1e0grfSBmb3JtIGlzIG9ubHkgYWxsb3dlZCBpbiBVbmljb2RlIG1vZGUgd2hp Y2gKKwkJCQkgKiB3ZSBkb24ndCBzdXBwb3J0IHlldC4KKwkJCQkgKi8KKwkJCQljaCA9IGR1a19f bGV4ZXJfcGFyc2VfZXNjYXBlKGxleF9jdHgsIDAgLyphbGxvd19lczYqLyk7CisJCQkJYWR2ID0g MDsKKwkJCX0gZWxzZSBpZiAoeCA9PSBEVUtfQVNDX0xDX0QpIHsKKwkJCQlkdWtfX2VtaXRfdTE2 X2RpcmVjdF9yYW5nZXMobGV4X2N0eCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2VuX3JhbmdlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyZGF0YSwKKwkJ CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX2RpZ2l0 LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfcmVf cmFuZ2VzX2RpZ2l0KSAvIHNpemVvZihkdWtfdWludDE2X3QpKTsKKwkJCQljaCA9IC0xOworCQkJ fSBlbHNlIGlmICh4ID09IERVS19BU0NfVUNfRCkgeworCQkJCWR1a19fZW1pdF91MTZfZGlyZWN0 X3JhbmdlcyhsZXhfY3R4LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fcmFu Z2UsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJkYXRhLAorCQkJCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkdWtfdW5pY29kZV9yZV9yYW5nZXNfbm90X2RpZ2l0LAor CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfcmVfcmFu Z2VzX25vdF9kaWdpdCkgLyBzaXplb2YoZHVrX3VpbnQxNl90KSk7CisJCQkJY2ggPSAtMTsKKwkJ CX0gZWxzZSBpZiAoeCA9PSBEVUtfQVNDX0xDX1MpIHsKKwkJCQlkdWtfX2VtaXRfdTE2X2RpcmVj dF9yYW5nZXMobGV4X2N0eCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX3Jh bmdlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyZGF0YSwKKwkJCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX3doaXRlLAorCQkJ CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfcmVfcmFuZ2Vz X3doaXRlKSAvIHNpemVvZihkdWtfdWludDE2X3QpKTsKKwkJCQljaCA9IC0xOworCQkJfSBlbHNl IGlmICh4ID09IERVS19BU0NfVUNfUykgeworCQkJCWR1a19fZW1pdF91MTZfZGlyZWN0X3Jhbmdl cyhsZXhfY3R4LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fcmFuZ2UsCisJ CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJkYXRhLAorCQkJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfdW5pY29kZV9yZV9yYW5nZXNfbm90X3doaXRlLAorCQkJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX25v dF93aGl0ZSkgLyBzaXplb2YoZHVrX3VpbnQxNl90KSk7CisJCQkJY2ggPSAtMTsKKwkJCX0gZWxz ZSBpZiAoeCA9PSBEVUtfQVNDX0xDX1cpIHsKKwkJCQlkdWtfX2VtaXRfdTE2X2RpcmVjdF9yYW5n ZXMobGV4X2N0eCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX3JhbmdlLAor CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyZGF0YSwKKwkJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX3dvcmRjaGFyLAorCQkJCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX3dv cmRjaGFyKSAvIHNpemVvZihkdWtfdWludDE2X3QpKTsKKwkJCQljaCA9IC0xOworCQkJfSBlbHNl IGlmICh4ID09IERVS19BU0NfVUNfVykgeworCQkJCWR1a19fZW1pdF91MTZfZGlyZWN0X3Jhbmdl cyhsZXhfY3R4LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fcmFuZ2UsCisJ CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJkYXRhLAorCQkJCSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfdW5pY29kZV9yZV9yYW5nZXNfbm90X3dvcmRjaGFyLAorCQkJ CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHVrX3VuaWNvZGVfcmVfcmFuZ2Vz X25vdF93b3JkY2hhcikgLyBzaXplb2YoZHVrX3VpbnQxNl90KSk7CisJCQkJY2ggPSAtMTsKKwkJ CX0gZWxzZSBpZiAoRFVLX19JU0RJR0lUKHgpKSB7CisJCQkJLyogRGVjaW1hbEVzY2FwZSwgb25s eSBcMCBpcyBhbGxvd2VkLCBubyBsZWFkaW5nCisJCQkJICogemVyb2VzIGFyZSBhbGxvd2VkLgor CQkJCSAqCisJCQkJICogRVMyMDE1IEFubmV4IEIgYWxzbyBhbGxvd3MgKG1heGltYWwgbWF0Y2gp IGxlZ2FjeQorCQkJCSAqIG9jdGFsIGVzY2FwZXMgdXAgdG8gXDM3NyBhbmQgXDggYW5kIFw5IGFy ZQorCQkJCSAqIGFjY2VwdGVkIGFzIGxpdGVyYWwgJzgnIGFuZCAnOScsIGFsc28gaW4gc3RyaWN0 IG1vZGUuCisJCQkJICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfRVM2X1JFR0VYUF9TWU5UQVgp CisJCQkJY2ggPSBkdWtfX2xleGVyX3BhcnNlX2xlZ2FjeV9vY3RhbChsZXhfY3R4LCAmYWR2LCAw IC8qcmVqZWN0X2FubmV4X2IqLyk7CisJCQkJRFVLX0FTU0VSVChjaCA+PSAwKTsgIC8qIG5vIHJl amVjdGlvbnMgKi8KKyNlbHNlCisJCQkJaWYgKHggPT0gRFVLX0FTQ18wICYmICFEVUtfX0lTRElH SVQoRFVLX19MMigpKSkgeworCQkJCQljaCA9IDB4MDAwMDsKKwkJCQl9IGVsc2UgeworCQkJCQln b3RvIGZhaWxfZXNjYXBlOworCQkJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1VTRV9FUzZf UkVHRVhQX1NZTlRBWCkKKwkJCX0gZWxzZSBpZiAoeCA+PSAwKSB7CisJCQkJLyogSWRlbnRpdHlF c2NhcGU6IEVTMjAxNSBBbm5leCBCIGFsbG93cyBhbG1vc3QgYWxsCisJCQkJICogc291cmNlIGNo YXJhY3RlcnMgaGVyZS4gIE1hdGNoIGFueXRoaW5nIGV4Y2VwdAorCQkJCSAqIEVPRiBoZXJlLgor CQkJCSAqLworCQkJCWNoID0geDsKKyNlbHNlICAvKiBEVUtfVVNFX0VTNl9SRUdFWFBfU1lOVEFY ICovCisJCQl9IGVsc2UgaWYgKCFkdWtfdW5pY29kZV9pc19pZGVudGlmaWVyX3BhcnQoeCkpIHsK KwkJCQkvKiBJZGVudGl0eUVzY2FwZTogRVM1LjEgZG9lc24ndCBhbGxvdyBpZGVudGl0eSBlc2Nh cGUKKwkJCQkgKiBmb3IgaWRlbnRpZmllciBwYXJ0IGNoYXJhY3RlcnMsIHdoaWNoIGNvbmZsaWN0 cyB3aXRoCisJCQkJICogc29tZSByZWFsIHdvcmxkIGNvZGUuICBGb3IgZXhhbXBsZSwgaXQgZG9l c24ndCBhbGxvdworCQkJCSAqIC9bXCRdLyB3aGljaCBpcyBhd2t3YXJkLgorCQkJCSAqLworCQkJ CWNoID0geDsKKyNlbmRpZiAgLyogRFVLX1VTRV9FUzZfUkVHRVhQX1NZTlRBWCAqLworCQkJfSBl bHNlIHsKKwkJCQlnb3RvIGZhaWxfZXNjYXBlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogY2hh cmFjdGVyIHJlcHJlc2VudHMgaXRzZWxmICovCisJCQljaCA9IHg7CisJCX0KKworCQkvKiBjaCBp cyBhIGxpdGVyYWwgY2hhcmFjdGVyIGhlcmUgb3IgLTEgaWYgcGFyc2VkIGVudGl0eSB3YXMKKwkJ ICogYW4gZXNjYXBlIHN1Y2ggYXMgIlxzIi4KKwkJICovCisKKwkJaWYgKGNoIDwgMCkgeworCQkJ LyogbXVsdGktY2hhcmFjdGVyIHNldHMgbm90IGFsbG93ZWQgYXMgcGFydCBvZiByYW5nZXMsIHNl ZQorCQkJICogRTUgU2VjdGlvbiAxNS4xMC4yLjE1LCBhYnN0cmFjdCBvcGVyYXRpb24gQ2hhcmFj dGVyUmFuZ2UuCisJCQkgKi8KKwkJCWlmIChzdGFydCA+PSAwKSB7CisJCQkJaWYgKGRhc2gpIHsK KwkJCQkJZ290byBmYWlsX3JhbmdlOworCQkJCX0gZWxzZSB7CisJCQkJCWdlbl9yYW5nZSh1c2Vy ZGF0YSwgc3RhcnQsIHN0YXJ0LCAwKTsKKwkJCQkJc3RhcnQgPSAtMTsKKwkJCQkJLyogZGFzaCBp cyBhbHJlYWR5IDAgKi8KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhcnQgPj0g MCkgeworCQkJCWlmIChkYXNoKSB7CisJCQkJCWlmIChzdGFydCA+IGNoKSB7CisJCQkJCQlnb3Rv IGZhaWxfcmFuZ2U7CisJCQkJCX0KKwkJCQkJZ2VuX3JhbmdlKHVzZXJkYXRhLCBzdGFydCwgY2gs IDApOworCQkJCQlzdGFydCA9IC0xOworCQkJCQlkYXNoID0gMDsKKwkJCQl9IGVsc2UgeworCQkJ CQlnZW5fcmFuZ2UodXNlcmRhdGEsIHN0YXJ0LCBzdGFydCwgMCk7CisJCQkJCXN0YXJ0ID0gY2g7 CisJCQkJCS8qIGRhc2ggaXMgYWxyZWFkeSAwICovCisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlz dGFydCA9IGNoOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuOworCisgZmFpbF9lc2NhcGU6CisJ RFVLX0VSUk9SX1NZTlRBWChsZXhfY3R4LT50aHIsIERVS19TVFJfSU5WQUxJRF9SRUdFWFBfRVND QVBFKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisKKyBmYWlsX3JhbmdlOgorCURVS19F UlJPUl9TWU5UQVgobGV4X2N0eC0+dGhyLCBEVUtfU1RSX0lOVkFMSURfUkFOR0UpOworCURVS19X T19OT1JFVFVSTihyZXR1cm47KTsKKworIGZhaWxfdW50ZXJtX2NoYXJjbGFzczoKKwlEVUtfRVJS T1JfU1lOVEFYKGxleF9jdHgtPnRociwgRFVLX1NUUl9VTlRFUk1JTkFURURfQ0hBUkNMQVNTKTsK KwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7Cit9CisKKyNlbmRpZiAgLyogRFVLX1VTRV9SRUdF WFBfU1VQUE9SVCAqLworCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5kZWYgRFVLX19BRFZB TkNFQllURVMKKyN1bmRlZiBEVUtfX0FEVkFOQ0VDSEFSUworI3VuZGVmIERVS19fQURWVE9LCisj dW5kZWYgRFVLX19BUFBFTkRCVUZGRVIKKyN1bmRlZiBEVUtfX0FQUEVOREJVRkZFUl9BU0NJSQor I3VuZGVmIERVS19fSU5JVEJVRkZFUgorI3VuZGVmIERVS19fSVNESUdJVAorI3VuZGVmIERVS19f SVNESUdJVDAzCisjdW5kZWYgRFVLX19JU0RJR0lUNDcKKyN1bmRlZiBEVUtfX0lTSEVYRElHSVQK KyN1bmRlZiBEVUtfX0lTT0NURElHSVQKKyN1bmRlZiBEVUtfX0wwCisjdW5kZWYgRFVLX19MMQor I3VuZGVmIERVS19fTDIKKyN1bmRlZiBEVUtfX0wzCisjdW5kZWYgRFVLX19MNAorI3VuZGVmIERV S19fTDUKKyN1bmRlZiBEVUtfX0xPT0tVUAorI3VuZGVmIERVS19fTUFYX1JFX0RFQ0VTQ19ESUdJ VFMKKyN1bmRlZiBEVUtfX01BWF9SRV9RVUFOVF9ESUdJVFMKKy8qCisgKiAgTnVtYmVyLXRvLXN0 cmluZyBhbmQgc3RyaW5nLXRvLW51bWJlciBjb252ZXJzaW9ucy4KKyAqCisgKiAgU2xvdyBwYXRo IG51bWJlci10by1zdHJpbmcgYW5kIHN0cmluZy10by1udW1iZXIgY29udmVyc2lvbiBpcyBiYXNl ZCBvbgorICogIGEgRHJhZ29uNCB2YXJpYW50LCB3aXRoIGZhc3QgcGF0aHMgZm9yIHNtYWxsIGlu dGVnZXJzLiAgQmlnIGludGVnZXIKKyAqICBhcml0aG1ldGljIGlzIG5lZWRlZCBmb3IgZ3VhcmFu dGVlaW5nIHRoYXQgdGhlIGNvbnZlcnNpb24gaXMgY29ycmVjdAorICogIGFuZCB1c2VzIGEgbWlu aW11bSBudW1iZXIgb2YgZGlnaXRzLiAgVGhlIGJpZyBudW1iZXIgYXJpdGhtZXRpYyBoYXMgYQor ICogIGZpeGVkIG1heGltdW0gc2l6ZSBhbmQgZG9lcyBub3QgcmVxdWlyZSBkeW5hbWljIGFsbG9j YXRpb25zLgorICoKKyAqICBTZWU6IGRvYy9udW1iZXItY29udmVyc2lvbi5yc3QuCisgKi8KKwor LyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLworCisjZGVm aW5lIERVS19fSUVFRV9ET1VCTEVfRVhQX0JJQVMgIDEwMjMKKyNkZWZpbmUgRFVLX19JRUVFX0RP VUJMRV9FWFBfTUlOICAgKC0xMDIyKSAgIC8qIGJpYXNlZCBleHAgPT0gMCAtPiBkZW5vcm1hbCwg ZXhwIC0xMDIyICovCisKKyNkZWZpbmUgRFVLX19ESUdJVENIQVIoeCkgIGR1a19sY19kaWdpdHNb KHgpXQorCisvKgorICogIFRhYmxlcyBnZW5lcmF0ZWQgd2l0aCB1dGlsL2dlbm51bWRpZ2l0cy5w eS4KKyAqCisgKiAgZHVrX19zdHIybnVtX2RpZ2l0c19mb3JfcmFkaXggaW5kaWNhdGVzLCBmb3Ig ZWFjaCByYWRpeCwgaG93IG1hbnkgaW5wdXQKKyAqICBkaWdpdHMgc2hvdWxkIGJlIGNvbnNpZGVy ZWQgc2lnbmlmaWNhbnQgZm9yIHN0cmluZy10by1udW1iZXIgY29udmVyc2lvbi4KKyAqICBUaGUg aW5wdXQgaXMgYWxzbyBwYWRkZWQgdG8gdGhpcyBtYW55IGRpZ2l0cyB0byBnaXZlIHRoZSBEcmFn b240CisgKiAgY29udmVyc2lvbiBlbm91Z2ggKGFwcGFyZW50KSBwcmVjaXNpb24gdG8gd29yayB3 aXRoLgorICoKKyAqICBkdWtfX3N0cjJudW1fZXhwX2xpbWl0cyBpbmRpY2F0ZXMsIGZvciBlYWNo IHJhZGl4LCB0aGUgcmFkaXgtc3BlY2lmaWMKKyAqICBtaW5pbXVtL21heGltdW0gZXhwb25lbnQg dmFsdWVzIChmb3IgYSBEcmFnb240IGludGVnZXIgbWFudGlzc2EpCisgKiAgYmVsb3cgYW5kIGFi b3ZlIHdoaWNoIHRoZSBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byB1bmRlcmZsb3cgdG8gemVybwor ICogIG9yIG92ZXJmbG93IHRvIEluZmluaXR5LiAgVGhpcyBhbGxvd3MgcGFyc2luZyB0byBrZWVw IGJpZ2ludCB2YWx1ZXMKKyAqICBib3VuZGVkLgorICovCisKK0RVS19MT0NBTCBjb25zdCBkdWtf dWludDhfdCBkdWtfX3N0cjJudW1fZGlnaXRzX2Zvcl9yYWRpeFtdID0geworCTY5LCA0NCwgMzUs IDMwLCAyNywgMjUsIDIzLCAyMiwgMjAsIDIwLCAgICAvKiAyIHRvIDExICovCisJMjAsIDE5LCAx OSwgMTgsIDE4LCAxNywgMTcsIDE3LCAxNiwgMTYsICAgIC8qIDEyIHRvIDIxICovCisJMTYsIDE2 LCAxNiwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTQsICAgIC8qIDIyIHRvIDMxICovCisJMTQs IDE0LCAxNCwgMTQsIDE0ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMxIHRvIDM2ICovCit9 OworCit0eXBlZGVmIHN0cnVjdCB7CisJZHVrX2ludDE2X3QgdXBwZXI7CisJZHVrX2ludDE2X3Qg bG93ZXI7Cit9IGR1a19fZXhwX2xpbWl0czsKKworRFVLX0xPQ0FMIGNvbnN0IGR1a19fZXhwX2xp bWl0cyBkdWtfX3N0cjJudW1fZXhwX2xpbWl0c1tdID0geworCXsgOTU3LCAtMTE0NyB9LCB7IDYw NSwgLTcyNSB9LCAgeyA0NzksIC01NzUgfSwgIHsgNDE0LCAtNDk2IH0sCisJeyAzNzIsIC00NDYg fSwgIHsgMzQyLCAtNDExIH0sICB7IDMyMSwgLTM4NCB9LCAgeyAzMDQsIC0zNjQgfSwKKwl7IDI5 MSwgLTM0NiB9LCAgeyAyNzksIC0zMzQgfSwgIHsgMjY4LCAtMzIzIH0sICB7IDI2MCwgLTMxMiB9 LAorCXsgMjUyLCAtMzA0IH0sICB7IDI0NywgLTI5NiB9LCAgeyAyNDAsIC0yODkgfSwgIHsgMjM2 LCAtMjgzIH0sCisJeyAyMzEsIC0yNzggfSwgIHsgMjI3LCAtMjczIH0sICB7IDIyMywgLTI2NyB9 LCAgeyAyMjAsIC0yNjMgfSwKKwl7IDIxNiwgLTI2MCB9LCAgeyAyMTMsIC0yNTYgfSwgIHsgMjEw LCAtMjUzIH0sICB7IDIwOCwgLTI0OSB9LAorCXsgMjA1LCAtMjQ2IH0sICB7IDIwMywgLTI0NCB9 LCAgeyAyMDEsIC0yNDEgfSwgIHsgMTk4LCAtMjM5IH0sCisJeyAxOTYsIC0yMzcgfSwgIHsgMTk1 LCAtMjM0IH0sICB7IDE5MywgLTIzMiB9LCAgeyAxOTEsIC0yMzAgfSwKKwl7IDE5MCwgLTIyOCB9 LCAgeyAxODgsIC0yMjYgfSwgIHsgMTg3LCAtMjI1IH0sCit9OworCisvKgorICogIExpbWl0ZWQg ZnVuY3Rpb25hbGl0eSBiaWdpbnQgaW1wbGVtZW50YXRpb24uCisgKgorICogIFJlc3RyaWN0ZWQg dG8gbm9uLW5lZ2F0aXZlIG51bWJlcnMgd2l0aCBsZXNzIHRoYW4gMzIgKiBEVUtfX0JJX01BWF9Q QVJUUyBiaXRzLAorICogIHdpdGggdGhlIGNhbGxlciByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcg dGhpcyBpcyBuZXZlciBleGNlZWRlZC4gIE5vIG1lbW9yeQorICogIGFsbG9jYXRpb24gKGV4Y2Vw dCBzdGFjaykgaXMgbmVlZGVkIGZvciBiaWdpbnQgY29tcHV0YXRpb24uICBPcGVyYXRpb25zCisg KiAgaGF2ZSBiZWVuIHRhaWxvcmVkIGZvciBudW1iZXIgY29udmVyc2lvbiBuZWVkcy4KKyAqCisg KiAgQXJndW1lbnQgb3JkZXIgaXMgImFzc2lnbm1lbnQgb3JkZXIiLCBpLmUuIHRhcmdldCBmaXJz dCwgdGhlbiBhcmd1bWVudHM6CisgKiAgeCA8LSB5ICogeiAgLS0+ICBkdWtfX2JpX211bCh4LCB5 LCB6KTsKKyAqLworCisvKiBUaGlzIHVwcGVyIHZhbHVlIGhhcyBiZWVuIGV4cGVyaW1lbnRhbGx5 IGRldGVybWluZWQ7IGRlYnVnIGJ1aWxkIHdpbGwgY2hlY2sKKyAqIGJpZ2ludCBzaXplIHdpdGgg YXNzZXJ0aW9ucy4KKyAqLworI2RlZmluZSBEVUtfX0JJX01BWF9QQVJUUyAgMzcgIC8qIDM3eDMy ID0gMTE4NCBiaXRzICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfREVCVUdfTEVWRUwpICYmIChE VUtfVVNFX0RFQlVHX0xFVkVMID49IDIpCisjZGVmaW5lIERVS19fQklfUFJJTlQobmFtZSx4KSAg ZHVrX19iaV9wcmludCgobmFtZSksKHgpKQorI2Vsc2UKKyNkZWZpbmUgRFVLX19CSV9QUklOVChu YW1lLHgpCisjZW5kaWYKKworLyogQ3VycmVudCBzaXplIGlzIGFib3V0IDE1MiBieXRlcy4gKi8K K3R5cGVkZWYgc3RydWN0IHsKKwlkdWtfc21hbGxfaW50X3QgbjsKKwlkdWtfdWludDMyX3QgdltE VUtfX0JJX01BWF9QQVJUU107ICAvKiBsb3cgdG8gaGlnaCAqLworfSBkdWtfX2JpZ2ludDsKKwor I2lmIGRlZmluZWQoRFVLX1VTRV9ERUJVR19MRVZFTCkgJiYgKERVS19VU0VfREVCVUdfTEVWRUwg Pj0gMikKK0RVS19MT0NBTCB2b2lkIGR1a19fYmlfcHJpbnQoY29uc3QgY2hhciAqbmFtZSwgZHVr X19iaWdpbnQgKngpIHsKKwkvKiBPdmVyZXN0aW1hdGUgcmVxdWlyZWQgc2l6ZTsgZGVidWcgY29k ZSBzbyBub3QgY3JpdGljYWwgdG8gYmUgdGlnaHQuICovCisJY2hhciBidWZbRFVLX19CSV9NQVhf UEFSVFMgKiA5ICsgNjRdOworCWNoYXIgKnAgPSBidWY7CisJZHVrX3NtYWxsX2ludF90IGk7CisK KwkvKiBObyBOVUwgdGVybSBjaGVja3MgaW4gdGhpcyBkZWJ1ZyBjb2RlLiAqLworCXAgKz0gRFVL X1NQUklOVEYocCwgIiVwIG49JWxkIiwgKHZvaWQgKikgeCwgKGxvbmcpIHgtPm4pOworCWlmICh4 LT5uID09IDApIHsKKwkJcCArPSBEVUtfU1BSSU5URihwLCAiIDAiKTsKKwl9CisJZm9yIChpID0g eC0+biAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXAgKz0gRFVLX1NQUklOVEYocCwgIiAlMDhseCIs ICh1bnNpZ25lZCBsb25nKSB4LT52W2ldKTsKKwl9CisKKwlEVUtfREREKERVS19ERERQUklOVCgi JXM6ICVzIiwgKGNvbnN0IGNoYXIgKikgbmFtZSwgKGNvbnN0IGNoYXIgKikgYnVmKSk7Cit9Cisj ZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorRFVLX0xPQ0FMIGR1a19z bWFsbF9pbnRfdCBkdWtfX2JpX2lzX3ZhbGlkKGR1a19fYmlnaW50ICp4KSB7CisJcmV0dXJuIChk dWtfc21hbGxfaW50X3QpCisJICAgICAgICggKCh4LT5uID49IDApICYmICh4LT5uIDw9IERVS19f QklfTUFYX1BBUlRTKSkgLyogaXMgdmFsaWQgc2l6ZSAqLyAmJgorCSAgICAgICAgICgoeC0+biA9 PSAwKSB8fCAoeC0+dlt4LT5uIC0gMV0gIT0gMCkpIC8qIGlzIG5vcm1hbGl6ZWQgKi8gKTsKK30K KyNlbmRpZgorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2JpX25vcm1hbGl6ZShkdWtfX2JpZ2ludCAq eCkgeworCWR1a19zbWFsbF9pbnRfdCBpOworCisJZm9yIChpID0geC0+biAtIDE7IGkgPj0gMDsg aS0tKSB7CisJCWlmICh4LT52W2ldICE9IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyog Tm90ZTogaWYgJ3gnIGlzIHplcm8sIHgtPm4gYmVjb21lcyAwIGhlcmUgKi8KKwl4LT5uID0gaSAr IDE7CisJRFVLX0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHgpKTsKK30KKworLyogeCA8LSB5ICov CitEVUtfTE9DQUwgdm9pZCBkdWtfX2JpX2NvcHkoZHVrX19iaWdpbnQgKngsIGR1a19fYmlnaW50 ICp5KSB7CisJZHVrX3NtYWxsX2ludF90IG47CisKKwluID0geS0+bjsKKwl4LT5uID0gbjsKKwkv KiBObyBuZWVkIHRvIHNwZWNpYWwgY2FzZSBuID09IDAuICovCisJZHVrX21lbWNweSgodm9pZCAq KSB4LT52LCAoY29uc3Qgdm9pZCAqKSB5LT52LCAoc2l6ZV90KSAoc2l6ZW9mKGR1a191aW50MzJf dCkgKiAoc2l6ZV90KSBuKSk7Cit9CisKK0RVS19MT0NBTCB2b2lkIGR1a19fYmlfc2V0X3NtYWxs KGR1a19fYmlnaW50ICp4LCBkdWtfdWludDMyX3QgdikgeworCWlmICh2ID09IDBVKSB7CisJCXgt Pm4gPSAwOworCX0gZWxzZSB7CisJCXgtPm4gPSAxOworCQl4LT52WzBdID0gdjsKKwl9CisJRFVL X0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHgpKTsKK30KKworLyogUmV0dXJuIHZhbHVlOiA8MCAg PD0+ICB4IDwgeQorICogICAgICAgICAgICAgICAgMCAgPD0+ICB4ID09IHkKKyAqICAgICAgICAg ICAgICAgPjAgIDw9PiAgeCA+IHkKKyAqLworRFVLX0xPQ0FMIGludCBkdWtfX2JpX2NvbXBhcmUo ZHVrX19iaWdpbnQgKngsIGR1a19fYmlnaW50ICp5KSB7CisJZHVrX3NtYWxsX2ludF90IGksIG54 LCBueTsKKwlkdWtfdWludDMyX3QgdHgsIHR5OworCisJRFVLX0FTU0VSVChkdWtfX2JpX2lzX3Zh bGlkKHgpKTsKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeSkpOworCisJbnggPSB4LT5u OworCW55ID0geS0+bjsKKwlpZiAobnggPiBueSkgeworCQlnb3RvIHJldF9ndDsKKwl9CisJaWYg KG54IDwgbnkpIHsKKwkJZ290byByZXRfbHQ7CisJfQorCWZvciAoaSA9IG54IC0gMTsgaSA+PSAw OyBpLS0pIHsKKwkJdHggPSB4LT52W2ldOworCQl0eSA9IHktPnZbaV07CisKKwkJaWYgKHR4ID4g dHkpIHsKKwkJCWdvdG8gcmV0X2d0OworCQl9CisJCWlmICh0eCA8IHR5KSB7CisJCQlnb3RvIHJl dF9sdDsKKwkJfQorCX0KKworCXJldHVybiAwOworCisgcmV0X2d0OgorCXJldHVybiAxOworCisg cmV0X2x0OgorCXJldHVybiAtMTsKK30KKworLyogeCA8LSB5ICsgeiAqLworI2lmIGRlZmluZWQo RFVLX1VTRV82NEJJVF9PUFMpCitEVUtfTE9DQUwgdm9pZCBkdWtfX2JpX2FkZChkdWtfX2JpZ2lu dCAqeCwgZHVrX19iaWdpbnQgKnksIGR1a19fYmlnaW50ICp6KSB7CisJZHVrX3VpbnQ2NF90IHRt cDsKKwlkdWtfc21hbGxfaW50X3QgaSwgbnksIG56OworCisJRFVLX0FTU0VSVChkdWtfX2JpX2lz X3ZhbGlkKHkpKTsKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeikpOworCisJaWYgKHot Pm4gPiB5LT5uKSB7CisJCWR1a19fYmlnaW50ICp0OworCQl0ID0geTsgeSA9IHo7IHogPSB0Owor CX0KKwlEVUtfQVNTRVJUKHktPm4gPj0gei0+bik7CisKKwlueSA9IHktPm47IG56ID0gei0+bjsK Kwl0bXAgPSAwVTsKKwlmb3IgKGkgPSAwOyBpIDwgbnk7IGkrKykgeworCQlEVUtfQVNTRVJUKGkg PCBEVUtfX0JJX01BWF9QQVJUUyk7CisJCXRtcCArPSB5LT52W2ldOworCQlpZiAoaSA8IG56KSB7 CisJCQl0bXAgKz0gei0+dltpXTsKKwkJfQorCQl4LT52W2ldID0gKGR1a191aW50MzJfdCkgKHRt cCAmIDB4ZmZmZmZmZmZVTCk7CisJCXRtcCA9IHRtcCA+PiAzMjsKKwl9CisJaWYgKHRtcCAhPSAw VSkgeworCQlEVUtfQVNTRVJUKGkgPCBEVUtfX0JJX01BWF9QQVJUUyk7CisJCXgtPnZbaSsrXSA9 IChkdWtfdWludDMyX3QpIHRtcDsKKwl9CisJeC0+biA9IGk7CisJRFVLX0FTU0VSVCh4LT5uIDw9 IERVS19fQklfTUFYX1BBUlRTKTsKKworCS8qIG5vIG5lZWQgdG8gbm9ybWFsaXplICovCisJRFVL X0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHgpKTsKK30KKyNlbHNlICAvKiBEVUtfVVNFXzY0QklU X09QUyAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19iaV9hZGQoZHVrX19iaWdpbnQgKngsIGR1a19f YmlnaW50ICp5LCBkdWtfX2JpZ2ludCAqeikgeworCWR1a191aW50MzJfdCBjYXJyeSwgdG1wMSwg dG1wMjsKKwlkdWtfc21hbGxfaW50X3QgaSwgbnksIG56OworCisJRFVLX0FTU0VSVChkdWtfX2Jp X2lzX3ZhbGlkKHkpKTsKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeikpOworCisJaWYg KHotPm4gPiB5LT5uKSB7CisJCWR1a19fYmlnaW50ICp0OworCQl0ID0geTsgeSA9IHo7IHogPSB0 OworCX0KKwlEVUtfQVNTRVJUKHktPm4gPj0gei0+bik7CisKKwlueSA9IHktPm47IG56ID0gei0+ bjsKKwljYXJyeSA9IDBVOworCWZvciAoaSA9IDA7IGkgPCBueTsgaSsrKSB7CisJCS8qIENhcnJ5 IGlzIGRldGVjdGVkIGJhc2VkIG9uIHdyYXBwaW5nIHdoaWNoIHJlbGllcyBvbiBleGFjdCAzMi1i aXQKKwkJICogdHlwZXMuCisJCSAqLworCQlEVUtfQVNTRVJUKGkgPCBEVUtfX0JJX01BWF9QQVJU Uyk7CisJCXRtcDEgPSB5LT52W2ldOworCQl0bXAyID0gdG1wMTsKKwkJaWYgKGkgPCBueikgewor CQkJdG1wMiArPSB6LT52W2ldOworCQl9CisKKwkJLyogQ2FyZWZ1bCB3aXRoIGNhcnJ5IGNvbmRp dGlvbjoKKwkJICogIC0gSWYgY2Fycnkgbm90IGFkZGVkOiAweDEyMzQ1Njc4ICsgMCArIDB4ZmZm ZmZmZmYgPSAweDEyMzQ1Njc3ICg8IDB4MTIzNDU2NzgpCisJCSAqICAtIElmIGNhcnJ5IGFkZGVk OiAgICAgMHgxMjM0NTY3OCArIDEgKyAweGZmZmZmZmZmID0gMHgxMjM0NTY3OCAoPT0gMHgxMjM0 NTY3OCkKKwkJICovCisJCWlmIChjYXJyeSkgeworCQkJdG1wMisrOworCQkJY2FycnkgPSAodG1w MiA8PSB0bXAxID8gMVUgOiAwVSk7CisJCX0gZWxzZSB7CisJCQljYXJyeSA9ICh0bXAyIDwgdG1w MSA/IDFVIDogMFUpOworCQl9CisKKwkJeC0+dltpXSA9IHRtcDI7CisJfQorCWlmIChjYXJyeSkg eworCQlEVUtfQVNTRVJUKGkgPCBEVUtfX0JJX01BWF9QQVJUUyk7CisJCURVS19BU1NFUlQoY2Fy cnkgPT0gMVUpOworCQl4LT52W2krK10gPSBjYXJyeTsKKwl9CisJeC0+biA9IGk7CisJRFVLX0FT U0VSVCh4LT5uIDw9IERVS19fQklfTUFYX1BBUlRTKTsKKworCS8qIG5vIG5lZWQgdG8gbm9ybWFs aXplICovCisJRFVLX0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHgpKTsKK30KKyNlbmRpZiAgLyog RFVLX1VTRV82NEJJVF9PUFMgKi8KKworLyogeCA8LSB5ICsgeiAqLworRFVLX0xPQ0FMIHZvaWQg ZHVrX19iaV9hZGRfc21hbGwoZHVrX19iaWdpbnQgKngsIGR1a19fYmlnaW50ICp5LCBkdWtfdWlu dDMyX3QgeikgeworCWR1a19fYmlnaW50IHRtcDsKKworCURVS19BU1NFUlQoZHVrX19iaV9pc192 YWxpZCh5KSk7CisKKwkvKiBYWFg6IHRoaXMgY291bGQgYmUgb3B0aW1pemVkOyB0aGVyZSBpcyBv bmx5IG9uZSBjYWxsIHNpdGUgbm93IHRob3VnaCAqLworCWR1a19fYmlfc2V0X3NtYWxsKCZ0bXAs IHopOworCWR1a19fYmlfYWRkKHgsIHksICZ0bXApOworCisJRFVLX0FTU0VSVChkdWtfX2JpX2lz X3ZhbGlkKHgpKTsKK30KKworI2lmIDAgIC8qIHVudXNlZCAqLworLyogeCA8LSB4ICsgeSwgdXNl IHQgYXMgdGVtcCAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19iaV9hZGRfY29weShkdWtfX2JpZ2lu dCAqeCwgZHVrX19iaWdpbnQgKnksIGR1a19fYmlnaW50ICp0KSB7CisJZHVrX19iaV9hZGQodCwg eCwgeSk7CisJZHVrX19iaV9jb3B5KHgsIHQpOworfQorI2VuZGlmCisKKy8qIHggPC0geSAtIHos IHJlcXVpcmUgeCA+PSB5ID0+IHogPj0gMCwgaS5lLiB5ID49IHogKi8KKyNpZiBkZWZpbmVkKERV S19VU0VfNjRCSVRfT1BTKQorRFVLX0xPQ0FMIHZvaWQgZHVrX19iaV9zdWIoZHVrX19iaWdpbnQg KngsIGR1a19fYmlnaW50ICp5LCBkdWtfX2JpZ2ludCAqeikgeworCWR1a19zbWFsbF9pbnRfdCBp LCBueSwgbno7CisJZHVrX3VpbnQzMl90IHR5LCB0ejsKKwlkdWtfaW50NjRfdCB0bXA7CisKKwlE VUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeSkpOworCURVS19BU1NFUlQoZHVrX19iaV9pc192 YWxpZCh6KSk7CisJRFVLX0FTU0VSVChkdWtfX2JpX2NvbXBhcmUoeSwgeikgPj0gMCk7CisJRFVL X0FTU0VSVCh5LT5uID49IHotPm4pOworCisJbnkgPSB5LT5uOyBueiA9IHotPm47CisJdG1wID0g MDsKKwlmb3IgKGkgPSAwOyBpIDwgbnk7IGkrKykgeworCQl0eSA9IHktPnZbaV07CisJCWlmIChp IDwgbnopIHsKKwkJCXR6ID0gei0+dltpXTsKKwkJfSBlbHNlIHsKKwkJCXR6ID0gMDsKKwkJfQor CQl0bXAgPSAoZHVrX2ludDY0X3QpIHR5IC0gKGR1a19pbnQ2NF90KSB0eiArIHRtcDsKKwkJeC0+ dltpXSA9IChkdWtfdWludDMyX3QpICgoZHVrX3VpbnQ2NF90KSB0bXAgJiAweGZmZmZmZmZmVUwp OworCQl0bXAgPSB0bXAgPj4gMzI7ICAvKiAwIG9yIC0xICovCisJfQorCURVS19BU1NFUlQodG1w ID09IDApOworCisJeC0+biA9IGk7CisJZHVrX19iaV9ub3JtYWxpemUoeCk7ICAvKiBuZWVkIHRv IG5vcm1hbGl6ZSwgbWF5IGV2ZW4gY2FuY2VsIHRvIDAgKi8KKwlEVUtfQVNTRVJUKGR1a19fYmlf aXNfdmFsaWQoeCkpOworfQorI2Vsc2UKK0RVS19MT0NBTCB2b2lkIGR1a19fYmlfc3ViKGR1a19f YmlnaW50ICp4LCBkdWtfX2JpZ2ludCAqeSwgZHVrX19iaWdpbnQgKnopIHsKKwlkdWtfc21hbGxf aW50X3QgaSwgbnksIG56OworCWR1a191aW50MzJfdCB0bXAxLCB0bXAyLCBib3Jyb3c7CisKKwlE VUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeSkpOworCURVS19BU1NFUlQoZHVrX19iaV9pc192 YWxpZCh6KSk7CisJRFVLX0FTU0VSVChkdWtfX2JpX2NvbXBhcmUoeSwgeikgPj0gMCk7CisJRFVL X0FTU0VSVCh5LT5uID49IHotPm4pOworCisJbnkgPSB5LT5uOyBueiA9IHotPm47CisJYm9ycm93 ID0gMFU7CisJZm9yIChpID0gMDsgaSA8IG55OyBpKyspIHsKKwkJLyogQm9ycm93IGlzIGRldGVj dGVkIGJhc2VkIG9uIHdyYXBwaW5nIHdoaWNoIHJlbGllcyBvbiBleGFjdCAzMi1iaXQKKwkJICog dHlwZXMuCisJCSAqLworCQl0bXAxID0geS0+dltpXTsKKwkJdG1wMiA9IHRtcDE7CisJCWlmIChp IDwgbnopIHsKKwkJCXRtcDIgLT0gei0+dltpXTsKKwkJfQorCisJCS8qIENhcmVmdWwgd2l0aCBi b3Jyb3cgY29uZGl0aW9uOgorCQkgKiAgLSBJZiBib3Jyb3cgbm90IHN1YnRyYWN0ZWQ6IDB4MTIz NDU2NzggLSAwIC0gMHhmZmZmZmZmZiA9IDB4MTIzNDU2NzkgKD4gMHgxMjM0NTY3OCkKKwkJICog IC0gSWYgYm9ycm93IHN1YnRyYWN0ZWQ6ICAgICAweDEyMzQ1Njc4IC0gMSAtIDB4ZmZmZmZmZmYg PSAweDEyMzQ1Njc4ICg9PSAweDEyMzQ1Njc4KQorCQkgKi8KKwkJaWYgKGJvcnJvdykgeworCQkJ dG1wMi0tOworCQkJYm9ycm93ID0gKHRtcDIgPj0gdG1wMSA/IDFVIDogMFUpOworCQl9IGVsc2Ug eworCQkJYm9ycm93ID0gKHRtcDIgPiB0bXAxID8gMVUgOiAwVSk7CisJCX0KKworCQl4LT52W2ld ID0gdG1wMjsKKwl9CisJRFVLX0FTU0VSVChib3Jyb3cgPT0gMFUpOworCisJeC0+biA9IGk7CisJ ZHVrX19iaV9ub3JtYWxpemUoeCk7ICAvKiBuZWVkIHRvIG5vcm1hbGl6ZSwgbWF5IGV2ZW4gY2Fu Y2VsIHRvIDAgKi8KKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeCkpOworfQorI2VuZGlm CisKKyNpZiAwICAvKiB1bnVzZWQgKi8KKy8qIHggPC0geSAtIHogKi8KK0RVS19MT0NBTCB2b2lk IGR1a19fYmlfc3ViX3NtYWxsKGR1a19fYmlnaW50ICp4LCBkdWtfX2JpZ2ludCAqeSwgZHVrX3Vp bnQzMl90IHopIHsKKwlkdWtfX2JpZ2ludCB0bXA7CisKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNf dmFsaWQoeSkpOworCisJLyogWFhYOiB0aGlzIGNvdWxkIGJlIG9wdGltaXplZCAqLworCWR1a19f Ymlfc2V0X3NtYWxsKCZ0bXAsIHopOworCWR1a19fYmlfc3ViKHgsIHksICZ0bXApOworCisJRFVL X0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHgpKTsKK30KKyNlbmRpZgorCisvKiB4IDwtIHggLSB5 LCB1c2UgdCBhcyB0ZW1wICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2JpX3N1Yl9jb3B5KGR1a19f YmlnaW50ICp4LCBkdWtfX2JpZ2ludCAqeSwgZHVrX19iaWdpbnQgKnQpIHsKKwlkdWtfX2JpX3N1 Yih0LCB4LCB5KTsKKwlkdWtfX2JpX2NvcHkoeCwgdCk7Cit9CisKKy8qIHggPC0geSAqIHogKi8K K0RVS19MT0NBTCB2b2lkIGR1a19fYmlfbXVsKGR1a19fYmlnaW50ICp4LCBkdWtfX2JpZ2ludCAq eSwgZHVrX19iaWdpbnQgKnopIHsKKwlkdWtfc21hbGxfaW50X3QgaSwgaiwgbngsIG56OworCisJ RFVLX0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHkpKTsKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNf dmFsaWQoeikpOworCisJbnggPSB5LT5uICsgei0+bjsgIC8qIG1heCBwb3NzaWJsZSAqLworCURV S19BU1NFUlQobnggPD0gRFVLX19CSV9NQVhfUEFSVFMpOworCisJaWYgKG54ID09IDApIHsKKwkJ LyogQm90aCBpbnB1dHMgYXJlIHplcm87IGNhc2VzIHdoZXJlIG9ubHkgb25lIGlzIHplcm8gY2Fu IGdvCisJCSAqIHRocm91Z2ggbWFpbiBhbGdvcml0aG0uCisJCSAqLworCQl4LT5uID0gMDsKKwkJ cmV0dXJuOworCX0KKworCWR1a19tZW16ZXJvKCh2b2lkICopIHgtPnYsIChzaXplX3QpIChzaXpl b2YoZHVrX3VpbnQzMl90KSAqIChzaXplX3QpIG54KSk7CisJeC0+biA9IG54OworCisJbnogPSB6 LT5uOworCWZvciAoaSA9IDA7IGkgPCB5LT5uOyBpKyspIHsKKyNpZiBkZWZpbmVkKERVS19VU0Vf NjRCSVRfT1BTKQorCQlkdWtfdWludDY0X3QgdG1wID0gMFU7CisJCWZvciAoaiA9IDA7IGogPCBu ejsgaisrKSB7CisJCQl0bXAgKz0gKGR1a191aW50NjRfdCkgeS0+dltpXSAqIChkdWtfdWludDY0 X3QpIHotPnZbal0gKyB4LT52W2kral07CisJCQl4LT52W2kral0gPSAoZHVrX3VpbnQzMl90KSAo dG1wICYgMHhmZmZmZmZmZlVMKTsKKwkJCXRtcCA9IHRtcCA+PiAzMjsKKwkJfQorCQlpZiAodG1w ID4gMCkgeworCQkJRFVLX0FTU0VSVChpICsgaiA8IG54KTsKKwkJCURVS19BU1NFUlQoaSArIGog PCBEVUtfX0JJX01BWF9QQVJUUyk7CisJCQlEVUtfQVNTRVJUKHgtPnZbaStqXSA9PSAwVSk7CisJ CQl4LT52W2kral0gPSAoZHVrX3VpbnQzMl90KSB0bXA7CisJCX0KKyNlbHNlCisJCS8qCisJCSAq ICBNdWx0aXBseSArIGFkZCArIGNhcnJ5IGZvciAzMi1iaXQgY29tcG9uZW50cyB1c2luZyBvbmx5 IDE2eDE2LT4zMgorCQkgKiAgbXVsdGlwbGllcyBhbmQgY2FycnkgZGV0ZWN0aW9uIGJhc2VkIG9u IHVuc2lnbmVkIG92ZXJmbG93LgorCQkgKgorCQkgKiAgICAxc3QgbXVsdCwgMzItYml0OiAoQSoy XjE2ICsgQikKKwkJICogICAgMm5kIG11bHQsIDMyLWJpdDogKEMqMl4xNiArIEQpCisJCSAqICAg IDNyZCBhZGQsIDMyLWJpdDogRQorCQkgKiAgICA0dGggYWRkLCAzMi1iaXQ6IEYKKwkJICoKKwkJ ICogICAgICAoQUMqMl4xNiArIEIpICogKEMqMl4xNiArIEQpICsgRSArIEYKKwkJICogICAgPSBB QyoyXjMyICsgQUQqMl4xNiArIEJDKjJeMTYgKyBCRCArIEUgKyBGCisJCSAqICAgID0gQUMqMl4z MiArIChBRCArIEJDKSoyXjE2ICsgKEJEICsgRSArIEYpCisJCSAqICAgID0gQUMqMl4zMiArIEFE KjJeMTYgKyBCQyoyXjE2ICsgKEJEICsgRSArIEYpCisJCSAqLworCQlkdWtfdWludDMyX3QgYSwg YiwgYywgZCwgZSwgZjsKKwkJZHVrX3VpbnQzMl90IHIsIHMsIHQ7CisKKwkJYSA9IHktPnZbaV07 IGIgPSBhICYgMHhmZmZmVUw7IGEgPSBhID4+IDE2OworCisJCWYgPSAwOworCQlmb3IgKGogPSAw OyBqIDwgbno7IGorKykgeworCQkJYyA9IHotPnZbal07IGQgPSBjICYgMHhmZmZmVUw7IGMgPSBj ID4+IDE2OworCQkJZSA9IHgtPnZbaStqXTsKKworCQkJLyogYnVpbGQgcmVzdWx0IGFzOiAociA8 PCAzMikgKyBzOiBzdGFydCB3aXRoIChCRCArIEUgKyBGKSAqLworCQkJciA9IDA7CisJCQlzID0g YiAqIGQ7CisKKwkJCS8qIGFkZCBFICovCisJCQl0ID0gcyArIGU7CisJCQlpZiAodCA8IHMpIHsg cisrOyB9ICAvKiBjYXJyeSAqLworCQkJcyA9IHQ7CisKKwkJCS8qIGFkZCBGICovCisJCQl0ID0g cyArIGY7CisJCQlpZiAodCA8IHMpIHsgcisrOyB9ICAvKiBjYXJyeSAqLworCQkJcyA9IHQ7CisK KwkJCS8qIGFkZCBCQyoyXjE2ICovCisJCQl0ID0gYiAqIGM7CisJCQlyICs9ICh0ID4+IDE2KTsK KwkJCXQgPSBzICsgKCh0ICYgMHhmZmZmVUwpIDw8IDE2KTsKKwkJCWlmICh0IDwgcykgeyByKys7 IH0gIC8qIGNhcnJ5ICovCisJCQlzID0gdDsKKworCQkJLyogYWRkIEFEKjJeMTYgKi8KKwkJCXQg PSBhICogZDsKKwkJCXIgKz0gKHQgPj4gMTYpOworCQkJdCA9IHMgKyAoKHQgJiAweGZmZmZVTCkg PDwgMTYpOworCQkJaWYgKHQgPCBzKSB7IHIrKzsgfSAgLyogY2FycnkgKi8KKwkJCXMgPSB0Owor CisJCQkvKiBhZGQgQUMqMl4zMiAqLworCQkJdCA9IGEgKiBjOworCQkJciArPSB0OworCisJCQlE VUtfREREKERVS19ERERQUklOVCgiYWI9JTA4bHggY2Q9JTA4bHggZWY9JTA4bHggLT4gcnM9JTA4 bHggJTA4bHgiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHktPnZb aV0sICh1bnNpZ25lZCBsb25nKSB6LT52W2pdLAorCQkJICAgICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpIHgtPnZbaStqXSwgKHVuc2lnbmVkIGxvbmcpIHIsCisJCQkgICAgICAgICAg ICAgICAgICAgICAodW5zaWduZWQgbG9uZykgcykpOworCisJCQl4LT52W2kral0gPSBzOworCQkJ ZiA9IHI7CisJCX0KKwkJaWYgKGYgPiAwVSkgeworCQkJRFVLX0FTU0VSVChpICsgaiA8IG54KTsK KwkJCURVS19BU1NFUlQoaSArIGogPCBEVUtfX0JJX01BWF9QQVJUUyk7CisJCQlEVUtfQVNTRVJU KHgtPnZbaStqXSA9PSAwVSk7CisJCQl4LT52W2kral0gPSAoZHVrX3VpbnQzMl90KSBmOworCQl9 CisjZW5kaWYgIC8qIERVS19VU0VfNjRCSVRfT1BTICovCisJfQorCisJZHVrX19iaV9ub3JtYWxp emUoeCk7CisJRFVLX0FTU0VSVChkdWtfX2JpX2lzX3ZhbGlkKHgpKTsKK30KKworLyogeCA8LSB5 ICogeiAqLworRFVLX0xPQ0FMIHZvaWQgZHVrX19iaV9tdWxfc21hbGwoZHVrX19iaWdpbnQgKngs IGR1a19fYmlnaW50ICp5LCBkdWtfdWludDMyX3QgeikgeworCWR1a19fYmlnaW50IHRtcDsKKwor CURVS19BU1NFUlQoZHVrX19iaV9pc192YWxpZCh5KSk7CisKKwkvKiBYWFg6IHRoaXMgY291bGQg YmUgb3B0aW1pemVkICovCisJZHVrX19iaV9zZXRfc21hbGwoJnRtcCwgeik7CisJZHVrX19iaV9t dWwoeCwgeSwgJnRtcCk7CisKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeCkpOworfQor CisvKiB4IDwtIHggKiB5LCB1c2UgdCBhcyB0ZW1wICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2Jp X211bF9jb3B5KGR1a19fYmlnaW50ICp4LCBkdWtfX2JpZ2ludCAqeSwgZHVrX19iaWdpbnQgKnQp IHsKKwlkdWtfX2JpX211bCh0LCB4LCB5KTsKKwlkdWtfX2JpX2NvcHkoeCwgdCk7Cit9CisKKy8q IHggPC0geCAqIHksIHVzZSB0IGFzIHRlbXAgKi8KK0RVS19MT0NBTCB2b2lkIGR1a19fYmlfbXVs X3NtYWxsX2NvcHkoZHVrX19iaWdpbnQgKngsIGR1a191aW50MzJfdCB5LCBkdWtfX2JpZ2ludCAq dCkgeworCWR1a19fYmlfbXVsX3NtYWxsKHQsIHgsIHkpOworCWR1a19fYmlfY29weSh4LCB0KTsK K30KKworRFVLX0xPQ0FMIGludCBkdWtfX2JpX2lzX2V2ZW4oZHVrX19iaWdpbnQgKngpIHsKKwlE VUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeCkpOworCXJldHVybiAoeC0+biA9PSAwKSB8fCAo KHgtPnZbMF0gJiAweDAxKSA9PSAwKTsKK30KKworRFVLX0xPQ0FMIGludCBkdWtfX2JpX2lzX3pl cm8oZHVrX19iaWdpbnQgKngpIHsKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeCkpOwor CXJldHVybiAoeC0+biA9PSAwKTsgIC8qIHRoaXMgaXMgdGhlIGNhc2UgZm9yIG5vcm1hbGl6ZWQg bnVtYmVycyAqLworfQorCisvKiBCaWdpbnQgaXMgMl41Mi4gIFVzZWQgdG8gZGV0ZWN0IG5vcm1h bGl6ZWQgSUVFRSBkb3VibGUgbWFudGlzc2EgdmFsdWVzCisgKiB3aGljaCBhcmUgYXQgdGhlIGxv d2VzdCBlZGdlIChuZXh0IGZsb2F0aW5nIHBvaW50IHZhbHVlIGRvd253YXJkcyBoYXMKKyAqIGEg ZGlmZmVyZW50IGV4cG9uZW50KS4gIFRoZSBsb3dlc3QgbWFudGlzc2EgaGFzIHRoZSBmb3JtOgor ICoKKyAqICAgICAxMDAwLi4uLi4uLi4wMDAgICAgKDUyIHplcm9lczsgb25seSAiaGlkZGVuIGJp dCIgaXMgc2V0KQorICovCitEVUtfTE9DQUwgZHVrX3NtYWxsX2ludF90IGR1a19fYmlfaXNfMnRv NTIoZHVrX19iaWdpbnQgKngpIHsKKwlEVUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoeCkpOwor CXJldHVybiAoZHVrX3NtYWxsX2ludF90KQorCSAgICAgICAgKHgtPm4gPT0gMikgJiYgKHgtPnZb MF0gPT0gMFUpICYmICh4LT52WzFdID09ICgxVSA8PCAoNTItMzIpKSk7Cit9CisKKy8qIHggPC0g KDE8PHkpICovCitEVUtfTE9DQUwgdm9pZCBkdWtfX2JpX3R3b2V4cChkdWtfX2JpZ2ludCAqeCwg ZHVrX3NtYWxsX2ludF90IHkpIHsKKwlkdWtfc21hbGxfaW50X3QgbiwgcjsKKworCW4gPSAoeSAv IDMyKSArIDE7CisJRFVLX0FTU0VSVChuID4gMCk7CisJciA9IHkgJSAzMjsKKwlkdWtfbWVtemVy bygodm9pZCAqKSB4LT52LCBzaXplb2YoZHVrX3VpbnQzMl90KSAqIChzaXplX3QpIG4pOworCXgt Pm4gPSBuOworCXgtPnZbbiAtIDFdID0gKCgoZHVrX3VpbnQzMl90KSAxKSA8PCByKTsKK30KKwor LyogeCA8LSBiXnk7IHVzZSB0MSBhbmQgdDIgYXMgdGVtcHMgKi8KK0RVS19MT0NBTCB2b2lkIGR1 a19fYmlfZXhwX3NtYWxsKGR1a19fYmlnaW50ICp4LCBkdWtfc21hbGxfaW50X3QgYiwgZHVrX3Nt YWxsX2ludF90IHksIGR1a19fYmlnaW50ICp0MSwgZHVrX19iaWdpbnQgKnQyKSB7CisJLyogRmFz dCBwYXRoIHRoZSBiaW5hcnkgY2FzZSAqLworCisJRFVLX0FTU0VSVCh4ICE9IHQxICYmIHggIT0g dDIgJiYgdDEgIT0gdDIpOyAgLyogZGlzdGluY3QgYmlnbnVtcywgZWFzeSBtaXN0YWtlIHRvIG1h a2UgKi8KKwlEVUtfQVNTRVJUKGIgPj0gMCk7CisJRFVLX0FTU0VSVCh5ID49IDApOworCisJaWYg KGIgPT0gMikgeworCQlkdWtfX2JpX3R3b2V4cCh4LCB5KTsKKwkJcmV0dXJuOworCX0KKworCS8q IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXhwb25lbnRpYXRpb25fYnlfc3F1YXJpbmcg Ki8KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJleHBfc21hbGw6IGI9JWxkLCB5PSVsZCIsIChs b25nKSBiLCAobG9uZykgeSkpOworCisJZHVrX19iaV9zZXRfc21hbGwoeCwgMSk7CisJZHVrX19i aV9zZXRfc21hbGwodDEsIChkdWtfdWludDMyX3QpIGIpOworCWZvciAoOzspIHsKKwkJLyogTG9v cCBzdHJ1Y3R1cmUgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGNvbXB1dGUgdDFeMiB1bm5lY2Vzc2Fy aWx5CisJCSAqIG9uIHRoZSBmaW5hbCByb3VuZCwgYXMgdGhhdCBtaWdodCBjcmVhdGUgYSBiaWdu dW0gZXhjZWVkaW5nIHRoZQorCQkgKiBjdXJyZW50IERVS19fQklfTUFYX1BBUlRTIGxpbWl0Lgor CQkgKi8KKwkJaWYgKHkgJiAweDAxKSB7CisJCQlkdWtfX2JpX211bF9jb3B5KHgsIHQxLCB0Mik7 CisJCX0KKwkJeSA9IHkgPj4gMTsKKwkJaWYgKHkgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwkJ ZHVrX19iaV9tdWxfY29weSh0MSwgdDEsIHQyKTsKKwl9CisKKwlEVUtfX0JJX1BSSU5UKCJleHBf c21hbGwgcmVzdWx0IiwgeCk7Cit9CisKKy8qCisgKiAgQSBEcmFnb240IG51bWJlci10by1zdHJp bmcgdmFyaWFudCwgYmFzZWQgb246CisgKgorICogICAgR3V5IEwuIFN0ZWVsZSBKci4sIEpvbiBM LiBXaGl0ZTogIkhvdyB0byBQcmludCBGbG9hdGluZy1Qb2ludCBOdW1iZXJzCisgKiAgICBBY2N1 cmF0ZWx5IgorICoKKyAqICAgIFJvYmVydCBHLiBCdXJnZXIsIFIuIEtlbnQgRHlidmlnOiAiUHJp bnRpbmcgRmxvYXRpbmctUG9pbnQgTnVtYmVycworICogICAgUXVpY2tseSBhbmQgQWNjdXJhdGVs eSIKKyAqCisgKiAgVGhlIGN1cnJlbnQgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIEZpZ3VyZSAxIG9m IHRoZSBCdXJnZXItRHlidmlnIHBhcGVyLAorICogIGkuZS4gdGhlIGJhc2UgaW1wbGVtZW50YXRp b24gd2l0aG91dCBsb2dhcml0aG0gZXN0aW1hdGlvbiBzcGVlZHVwcworICogICh0aGVzZSB3b3Vs ZCBpbmNyZWFzZSBjb2RlIGZvb3RwcmludCBjb25zaWRlcmFibHkpLiAgRml4ZWQtZm9ybWF0IG91 dHB1dAorICogIGRvZXMgbm90IGZvbGxvdyB0aGUgc3VnZ2VzdGlvbnMgaW4gdGhlIHBhcGVyOyBp bnN0ZWFkLCB3ZSBnZW5lcmF0ZSBhbgorICogIGV4dHJhIGRpZ2l0IGFuZCByb3VuZC13aXRoLWNh cnJ5LgorICoKKyAqICBUaGUgc2FtZSBhbGdvcml0aG0gaXMgdXNlZCBmb3IgbnVtYmVyIHBhcnNp bmcgKHdpdGggYj0xMCBhbmQgQj0yKQorICogIGJ5IGdlbmVyYXRpbmcgb25lIGV4dHJhIGRpZ2l0 IGFuZCBkb2luZyByb3VuZGluZyBtYW51YWxseS4KKyAqCisgKiAgU2VlIGRvYy9udW1iZXItY29u dmVyc2lvbi5yc3QgZm9yIGxpbWl0YXRpb25zLgorICovCisKKy8qIE1heGltdW0gbnVtYmVyIG9m IGRpZ2l0cyBnZW5lcmF0ZWQuICovCisjZGVmaW5lIERVS19fTUFYX09VVFBVVF9ESUdJVFMgICAg ICAgICAgMTA0MCAgLyogKE51bWJlci5NQVhfVkFMVUUpLnRvU3RyaW5nKDIpLmxlbmd0aCA9PSAx MDI0LCArIHNsYWNrICovCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZm9y bWF0dGVkIHZhbHVlLiAqLworI2RlZmluZSBEVUtfX01BWF9GT1JNQVRURURfTEVOR1RIICAgICAg IDEwNDAgIC8qICgtTnVtYmVyLk1BWF9WQUxVRSkudG9TdHJpbmcoMikubGVuZ3RoID09IDEwMjUs ICsgc2xhY2sgKi8KKworLyogTnVtYmVyIGFuZCAobWluaW11bSkgc2l6ZSBvZiBiaWdpbnRzIGlu IHRoZSBuY19jdHggc3RydWN0dXJlLiAqLworI2RlZmluZSBEVUtfX05VTUNPTlZfQ1RYX05VTV9C SUdJTlRTICAgIDcKKyNkZWZpbmUgRFVLX19OVU1DT05WX0NUWF9CSUdJTlRTX1NJWkUgICAoc2l6 ZW9mKGR1a19fYmlnaW50KSAqIERVS19fTlVNQ09OVl9DVFhfTlVNX0JJR0lOVFMpCisKK3R5cGVk ZWYgc3RydWN0IHsKKwkvKiBDdXJyZW50bHkgYWJvdXQgNyoxNTIgPSAxMDY0IGJ5dGVzLiAgVGhl IHNwYWNlIGZvciB0aGVzZQorCSAqIGR1a19fYmlnaW50cyBpcyB1c2VkIGFsc28gYXMgYSB0ZW1w b3JhcnkgYnVmZmVyIGZvciBnZW5lcmF0aW5nCisJICogdGhlIGZpbmFsIHN0cmluZy4gIFRoaXMg aXMgYSBiaXQgYXdrYXJkOyBhIHVuaW9uIHdvdWxkIGJlCisJICogbW9yZSBjb3JyZWN0LgorCSAq LworCWR1a19fYmlnaW50IGYsIHIsIHMsIG1wLCBtbSwgdDEsIHQyOworCisJZHVrX3NtYWxsX2lu dF90IGlzX3MybjsgICAgICAgIC8qIGlmIDEsIGRvaW5nIGEgc3RyaW5nLXRvLW51bWJlcjsgZWxz ZSBkb2luZyBhIG51bWJlci10by1zdHJpbmcgKi8KKwlkdWtfc21hbGxfaW50X3QgaXNfZml4ZWQ7 ICAgICAgLyogaWYgMSwgZG9pbmcgYSBmaXhlZCBmb3JtYXQgb3V0cHV0IChub3QgZnJlZSBmb3Jt YXQpICovCisJZHVrX3NtYWxsX2ludF90IHJlcV9kaWdpdHM7ICAgIC8qIHJlcXVlc3RlZCBudW1i ZXIgb2Ygb3V0cHV0IGRpZ2l0czsgMCA9IGZyZWUtZm9ybWF0ICovCisJZHVrX3NtYWxsX2ludF90 IGFic19wb3M7ICAgICAgIC8qIGRpZ2l0IHBvc2l0aW9uIGlzIGFic29sdXRlLCBub3QgcmVsYXRp dmUgKi8KKwlkdWtfc21hbGxfaW50X3QgZTsgICAgICAgICAgICAgLyogZXhwb25lbnQgZm9yICdm JyAqLworCWR1a19zbWFsbF9pbnRfdCBiOyAgICAgICAgICAgICAvKiBpbnB1dCByYWRpeCAqLwor CWR1a19zbWFsbF9pbnRfdCBCOyAgICAgICAgICAgICAvKiBvdXRwdXQgcmFkaXggKi8KKwlkdWtf c21hbGxfaW50X3QgazsgICAgICAgICAgICAgLyogc2VlIGFsZ29yaXRobSAqLworCWR1a19zbWFs bF9pbnRfdCBsb3dfb2s7ICAgICAgICAvKiBzZWUgYWxnb3JpdGhtICovCisJZHVrX3NtYWxsX2lu dF90IGhpZ2hfb2s7ICAgICAgIC8qIHNlZSBhbGdvcml0aG0gKi8KKwlkdWtfc21hbGxfaW50X3Qg dW5lcXVhbF9nYXBzOyAgLyogbSsgIT0gbS0gKHZlcnkgcmFyZWx5KSAqLworCisJLyogQnVmZmVy IHVzZWQgZm9yIGdlbmVyYXRlZCBkaWdpdHMsIHZhbHVlcyBhcmUgaW4gdGhlIHJhbmdlIFswLEIt MV0uICovCisJZHVrX3VpbnQ4X3QgZGlnaXRzW0RVS19fTUFYX09VVFBVVF9ESUdJVFNdOworCWR1 a19zbWFsbF9pbnRfdCBjb3VudDsgIC8qIGRpZ2l0IGNvdW50ICovCit9IGR1a19fbnVtY29udl9z dHJpbmdpZnlfY3R4OworCisvKiBOb3RlOiBjb21wdXRlcyB3aXRoICdpZHgnIGluIGFzc2VydGlv bnMsIHNvIGNhbGxlciBiZXdhcmUuCisgKiAnaWR4JyBpcyBwcmVpbmNyZW1lbnRlZCwgaS5lLiAn MScgb24gZmlyc3QgY2FsbCwgYmVjYXVzZSBpdAorICogaXMgbW9yZSBjb252ZW5pZW50IGZvciB0 aGUgY2FsbGVyLgorICovCisjZGVmaW5lIERVS19fRFJBR09ONF9PVVRQVVRfUFJFSU5DKG5jX2N0 eCxwcmVpbmNfaWR4LHgpICBkbyB7IFwKKwkJRFVLX0FTU0VSVCgocHJlaW5jX2lkeCkgLSAxID49 IDApOyBcCisJCURVS19BU1NFUlQoKHByZWluY19pZHgpIC0gMSA8IERVS19fTUFYX09VVFBVVF9E SUdJVFMpOyBcCisJCSgobmNfY3R4KS0+ZGlnaXRzWyhwcmVpbmNfaWR4KSAtIDFdKSA9IChkdWtf dWludDhfdCkgKHgpOyBcCisJfSB3aGlsZSAoMCkKKworRFVLX0xPQ0FMIGR1a19zaXplX3QgZHVr X19kcmFnb240X2Zvcm1hdF91aW50MzIoZHVrX3VpbnQ4X3QgKmJ1ZiwgZHVrX3VpbnQzMl90IHgs IGR1a19zbWFsbF9pbnRfdCByYWRpeCkgeworCWR1a191aW50OF90ICpwOworCWR1a19zaXplX3Qg bGVuOworCWR1a19zbWFsbF9pbnRfdCBkaWc7CisJZHVrX3VpbnQzMl90IHQ7CisKKwlEVUtfQVNT RVJUKGJ1ZiAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHJhZGl4ID49IDIgJiYgcmFkaXggPD0gMzYp OworCisJLyogQSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXRzIHRvIGF0IG1vc3QgMzIg ZGlnaXRzICh0aGUKKwkgKiB3b3JzdCBjYXNlIGhhcHBlbnMgd2l0aCByYWRpeCA9PSAyKS4gIE91 dHB1dCB0aGUgZGlnaXRzIGJhY2t3YXJkcywKKwkgKiBhbmQgdXNlIGEgbWVtbW92ZSgpIHRvIGdl dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZS4KKwkgKi8KKworCXAgPSBidWYgKyAzMjsKKwlmb3Ig KDs7KSB7CisJCXQgPSB4IC8gKGR1a191aW50MzJfdCkgcmFkaXg7CisJCWRpZyA9IChkdWtfc21h bGxfaW50X3QpICh4IC0gdCAqIChkdWtfdWludDMyX3QpIHJhZGl4KTsKKwkJeCA9IHQ7CisKKwkJ RFVLX0FTU0VSVChkaWcgPj0gMCAmJiBkaWcgPCAzNik7CisJCSooLS1wKSA9IERVS19fRElHSVRD SEFSKGRpZyk7CisKKwkJaWYgKHggPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJbGVuID0g KGR1a19zaXplX3QpICgoYnVmICsgMzIpIC0gcCk7CisKKwlkdWtfbWVtbW92ZSgodm9pZCAqKSBi dWYsIChjb25zdCB2b2lkICopIHAsIChzaXplX3QpIGxlbik7CisKKwlyZXR1cm4gbGVuOworfQor CitEVUtfTE9DQUwgdm9pZCBkdWtfX2RyYWdvbjRfcHJlcGFyZShkdWtfX251bWNvbnZfc3RyaW5n aWZ5X2N0eCAqbmNfY3R4KSB7CisJZHVrX3NtYWxsX2ludF90IGxvd2VzdF9tYW50aXNzYTsKKwor I2lmIDEKKwkvKiBBc3N1bWUgSUVFRSByb3VuZC10by1ldmVuLCBzbyB0aGF0IHNob3J0ZXIgZW5j b2RpbmcgY2FuIGJlIHVzZWQKKwkgKiB3aGVuIHJvdW5kLXRvLWV2ZW4gd291bGQgcHJvZHVjZSBj b3JyZWN0IHJlc3VsdC4gIEJ5IHJlbW92aW5nCisJICogdGhpcyBjaGVjayAoYW5kIGhhdmluZyBs b3dfb2sgPT0gaGlnaF9vayA9PSAwKSB0aGUgcmVzdWx0cyB3b3VsZAorCSAqIHN0aWxsIGJlIGFj Y3VyYXRlIGJ1dCBpbiBzb21lIGNhc2VzIGxvbmdlciB0aGFuIG5lY2Vzc2FyeS4KKwkgKi8KKwlp ZiAoZHVrX19iaV9pc19ldmVuKCZuY19jdHgtPmYpKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5U KCJmIGlzIGV2ZW4iKSk7CisJCW5jX2N0eC0+bG93X29rID0gMTsKKwkJbmNfY3R4LT5oaWdoX29r ID0gMTsKKwl9IGVsc2UgeworCQlEVUtfREREKERVS19ERERQUklOVCgiZiBpcyBvZGQiKSk7CisJ CW5jX2N0eC0+bG93X29rID0gMDsKKwkJbmNfY3R4LT5oaWdoX29rID0gMDsKKwl9CisjZWxzZQor CS8qIE5vdGU6IG5vdCBob25vcmluZyByb3VuZC10by1ldmVuIHNob3VsZCB3b3JrIGJ1dCBub3cg Z2VuZXJhdGVzIGluY29ycmVjdAorCSAqIHJlc3VsdHMuICBGb3IgaW5zdGFuY2UsIDFlMjMgc2Vy aWFsaXplcyB0byAiYTAwMC4uLiIsIGkuZS4gdGhlIGZpcnN0IGRpZ2l0CisJICogZXF1YWxzIHRo ZSByYWRpeCAoMTApLiAgU2NhbGluZyBzdG9wcyBvbmUgc3RlcCB0b28gZWFybHkgaW4gdGhpcyBj YXNlLgorCSAqIERvbid0IGtub3cgd2h5IHRoaXMgaXMgdGhlIGNhc2UsIGJ1dCBzaW5jZSB0aGlz IGNvZGUgcGF0aCBpcyB1bnVzZWQsIGl0CisJICogZG9lc24ndCBtYXR0ZXIuCisJICovCisJbmNf Y3R4LT5sb3dfb2sgPSAwOworCW5jX2N0eC0+aGlnaF9vayA9IDA7CisjZW5kaWYKKworCS8qIEZv ciBzdHJpbmctdG8tbnVtYmVyLCBwcmV0ZW5kIHdlIG5ldmVyIGhhdmUgdGhlIGxvd2VzdCBtYW50 aXNzYSBhcyB0aGVyZQorCSAqIGlzIG5vIG5hdHVyYWwgInByZWNpc2lvbiIgZm9yIGlucHV0cy4g IEhhdmluZyBsb3dlc3RfbWFudGlzc2EgPT0gMCwgd2UnbGwKKwkgKiBmYWxsIGludG8gdGhlIGJh c2UgY2FzZXMgZm9yIGJvdGggZSA+PSAwIGFuZCBlIDwgMC4KKwkgKi8KKwlpZiAobmNfY3R4LT5p c19zMm4pIHsKKwkJbG93ZXN0X21hbnRpc3NhID0gMDsKKwl9IGVsc2UgeworCQlsb3dlc3RfbWFu dGlzc2EgPSBkdWtfX2JpX2lzXzJ0bzUyKCZuY19jdHgtPmYpOworCX0KKworCW5jX2N0eC0+dW5l cXVhbF9nYXBzID0gMDsKKwlpZiAobmNfY3R4LT5lID49IDApIHsKKwkJLyogZXhwb25lbnQgbm9u LW5lZ2F0aXZlIChhbmQgdGh1cyBub3QgbWluaW11bSBleHBvbmVudCkgKi8KKworCQlpZiAobG93 ZXN0X21hbnRpc3NhKSB7CisJCQkvKiAoPj0gZSAwKSBBTkQgKD0gZiAoZXhwdCBiICgtIHAgMSkp KQorCQkJICoKKwkJCSAqIGJlIDwtIChleHB0IGIgZSkgPT0gYl5lCisJCQkgKiBiZTEgPC0gKCog YmUgYikgPT0gKGV4cHQgYiAoKyBlIDEpKSA9PSBiXihlKzEpCisJCQkgKiByIDwtICgqIGYgYmUx IDIpID09IDIgKiBmICogYl4oZSsxKSAgICBbaWYgYj09MiAtPiBmICogYl4oZSsyKV0KKwkJCSAq IHMgPC0gKCogYiAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZiBiPT0yIC0+IDRdCisJ CQkgKiBtKyA8LSBiZTEgPT0gYl4oZSsxKQorCQkJICogbS0gPC0gYmUgPT0gYl5lCisJCQkgKiBr IDwtIDAKKwkJCSAqIEIgPC0gQgorCQkJICogbG93X29rIDwtIHJvdW5kCisJCQkgKiBoaWdoX29r IDwtIHJvdW5kCisJCQkgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm5vbi1uZWdhdGl2 ZSBleHBvbmVudCAobm90IHNtYWxsZXN0IGV4cG9uZW50KTsgIgorCQkJICAgICAgICAgICAgICAg ICAgICAgImxvd2VzdCBtYW50aXNzYSB2YWx1ZSBmb3IgdGhpcyBleHBvbmVudCAtPiAiCisJCQkg ICAgICAgICAgICAgICAgICAgICAidW5lcXVhbCBnYXBzIikpOworCisJCQlkdWtfX2JpX2V4cF9z bWFsbCgmbmNfY3R4LT5tbSwgbmNfY3R4LT5iLCBuY19jdHgtPmUsICZuY19jdHgtPnQxLCAmbmNf Y3R4LT50Mik7ICAvKiBtbSA8LSBiXmUgKi8KKwkJCWR1a19fYmlfbXVsX3NtYWxsKCZuY19jdHgt Pm1wLCAmbmNfY3R4LT5tbSwgKGR1a191aW50MzJfdCkgbmNfY3R4LT5iKTsgICAgICAgICAgIC8q IG1wIDwtIGJeKGUrMSkgKi8KKwkJCWR1a19fYmlfbXVsX3NtYWxsKCZuY19jdHgtPnQxLCAmbmNf Y3R4LT5mLCAyKTsKKwkJCWR1a19fYmlfbXVsKCZuY19jdHgtPnIsICZuY19jdHgtPnQxLCAmbmNf Y3R4LT5tcCk7ICAgICAgICAgICAgICAvKiByIDwtICgyICogZikgKiBiXihlKzEpICovCisJCQlk dWtfX2JpX3NldF9zbWFsbCgmbmNfY3R4LT5zLCAoZHVrX3VpbnQzMl90KSAobmNfY3R4LT5iICog MikpOyAgLyogcyA8LSAyICogYiAqLworCQkJbmNfY3R4LT51bmVxdWFsX2dhcHMgPSAxOworCQl9 IGVsc2UgeworCQkJLyogKD49IGUgMCkgQU5EIChub3QgKD0gZiAoZXhwdCBiICgtIHAgMSkpKSkK KwkJCSAqCisJCQkgKiBiZSA8LSAoZXhwdCBiIGUpID09IGJeZQorCQkJICogciA8LSAoKiBmIGJl IDIpID09IDIgKiBmICogYl5lICAgIFtpZiBiPT0yIC0+IGYgKiBiXihlKzEpXQorCQkJICogcyA8 LSAyCisJCQkgKiBtKyA8LSBiZSA9PSBiXmUKKwkJCSAqIG0tIDwtIGJlID09IGJeZQorCQkJICog ayA8LSAwCisJCQkgKiBCIDwtIEIKKwkJCSAqIGxvd19vayA8LSByb3VuZAorCQkJICogaGlnaF9v ayA8LSByb3VuZAorCQkJICovCisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJub24tbmVnYXRp dmUgZXhwb25lbnQgKG5vdCBzbWFsbGVzdCBleHBvbmVudCk7ICIKKwkJCSAgICAgICAgICAgICAg ICAgICAgICJub3QgbG93ZXN0IG1hbnRpc3NhIGZvciB0aGlzIGV4cG9uZW50IC0+ICIKKwkJCSAg ICAgICAgICAgICAgICAgICAgICJlcXVhbCBnYXBzIikpOworCisJCQlkdWtfX2JpX2V4cF9zbWFs bCgmbmNfY3R4LT5tbSwgbmNfY3R4LT5iLCBuY19jdHgtPmUsICZuY19jdHgtPnQxLCAmbmNfY3R4 LT50Mik7ICAvKiBtbSA8LSBiXmUgKi8KKwkJCWR1a19fYmlfY29weSgmbmNfY3R4LT5tcCwgJm5j X2N0eC0+bW0pOyAgICAgICAgICAgICAgICAvKiBtcCA8LSBiXmUgKi8KKwkJCWR1a19fYmlfbXVs X3NtYWxsKCZuY19jdHgtPnQxLCAmbmNfY3R4LT5mLCAyKTsKKwkJCWR1a19fYmlfbXVsKCZuY19j dHgtPnIsICZuY19jdHgtPnQxLCAmbmNfY3R4LT5tcCk7ICAgICAvKiByIDwtICgyICogZikgKiBi XmUgKi8KKwkJCWR1a19fYmlfc2V0X3NtYWxsKCZuY19jdHgtPnMsIDIpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBzIDwtIDIgKi8KKwkJfQorCX0gZWxzZSB7CisJCS8qIFdoZW4gZG9pbmcgc3Ry aW5nLXRvLW51bWJlciwgbG93ZXN0X21hbnRpc3NhIGlzIGFsd2F5cyAwIHNvCisJCSAqIHRoZSBl eHBvbmVudCBjaGVjaywgd2hpbGUgaW5jb3JyZWN0LCB3b24ndCBtYXR0ZXIuCisJCSAqLworCQlp ZiAobmNfY3R4LT5lID4gRFVLX19JRUVFX0RPVUJMRV9FWFBfTUlOIC8qbm90IG1pbmltdW0gZXhw b25lbnQqLyAmJgorCQkgICAgbG93ZXN0X21hbnRpc3NhIC8qIGxvd2VzdCBtYW50aXNzYSBmb3Ig dGhpcyBleHBvbmVudCovKSB7CisJCQkvKiByIDwtICgqIGYgYiAyKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgW2lmIGI9PTIgLT4gKCogZiA0KV0KKwkJCSAqIHMgPC0gKCogKGV4cHQg YiAoLSAxIGUpKSAyKSA9PSBiXigxLWUpICogMiAgICBbaWYgYj09MiAtPiBiXigyLWUpXQorCQkJ ICogbSsgPC0gYiA9PSAyCisJCQkgKiBtLSA8LSAxCisJCQkgKiBrIDwtIDAKKwkJCSAqIEIgPC0g QgorCQkJICogbG93X29rIDwtIHJvdW5kCisJCQkgKiBoaWdoX29rIDwtIHJvdW5kCisJCQkgKi8K KworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm5lZ2F0aXZlIGV4cG9uZW50OyBub3QgbWluaW11 bSBleHBvbmVudCBhbmQgIgorCQkJICAgICAgICAgICAgICAgICAgICAgImxvd2VzdCBtYW50aXNz YSBmb3IgdGhpcyBleHBvbmVudCAtPiAiCisJCQkgICAgICAgICAgICAgICAgICAgICAidW5lcXVh bCBnYXBzIikpOworCisJCQlkdWtfX2JpX211bF9zbWFsbCgmbmNfY3R4LT5yLCAmbmNfY3R4LT5m LCAoZHVrX3VpbnQzMl90KSAobmNfY3R4LT5iICogMikpOyAgLyogciA8LSAoMiAqIGIpICogZiAq LworCQkJZHVrX19iaV9leHBfc21hbGwoJm5jX2N0eC0+dDEsIG5jX2N0eC0+YiwgMSAtIG5jX2N0 eC0+ZSwgJm5jX2N0eC0+cywgJm5jX2N0eC0+dDIpOyAgLyogTkI6IHVzZSAncycgYXMgdGVtcCBv biBwdXJwb3NlICovCisJCQlkdWtfX2JpX211bF9zbWFsbCgmbmNfY3R4LT5zLCAmbmNfY3R4LT50 MSwgMik7ICAgICAgICAgICAgIC8qIHMgPC0gYl4oMS1lKSAqIDIgKi8KKwkJCWR1a19fYmlfc2V0 X3NtYWxsKCZuY19jdHgtPm1wLCAyKTsKKwkJCWR1a19fYmlfc2V0X3NtYWxsKCZuY19jdHgtPm1t LCAxKTsKKwkJCW5jX2N0eC0+dW5lcXVhbF9nYXBzID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qIHIg PC0gKCogZiAyKQorCQkJICogcyA8LSAoKiAoZXhwdCBiICgtIGUpKSAyKSA9PSBiXigtZSkgKiAy ICAgIFtpZiBiPT0yIC0+IGJeKDEtZSldCisJCQkgKiBtKyA8LSAxCisJCQkgKiBtLSA8LSAxCisJ CQkgKiBrIDwtIDAKKwkJCSAqIEIgPC0gQgorCQkJICogbG93X29rIDwtIHJvdW5kCisJCQkgKiBo aWdoX29rIDwtIHJvdW5kCisJCQkgKi8KKworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIm5lZ2F0 aXZlIGV4cG9uZW50OyBtaW5pbXVtIGV4cG9uZW50IG9yIG5vdCAiCisJCQkgICAgICAgICAgICAg ICAgICAgICAibG93ZXN0IG1hbnRpc3NhIGZvciB0aGlzIGV4cG9uZW50IC0+ICIKKwkJCSAgICAg ICAgICAgICAgICAgICAgICJlcXVhbCBnYXBzIikpOworCisJCQlkdWtfX2JpX211bF9zbWFsbCgm bmNfY3R4LT5yLCAmbmNfY3R4LT5mLCAyKTsgICAgICAgICAgICAvKiByIDwtIDIgKiBmICovCisJ CQlkdWtfX2JpX2V4cF9zbWFsbCgmbmNfY3R4LT50MSwgbmNfY3R4LT5iLCAtbmNfY3R4LT5lLCAm bmNfY3R4LT5zLCAmbmNfY3R4LT50Mik7ICAvKiBOQjogdXNlICdzJyBhcyB0ZW1wIG9uIHB1cnBv c2UgKi8KKwkJCWR1a19fYmlfbXVsX3NtYWxsKCZuY19jdHgtPnMsICZuY19jdHgtPnQxLCAyKTsg ICAgICAgICAgIC8qIHMgPC0gYl4oLWUpICogMiAqLworCQkJZHVrX19iaV9zZXRfc21hbGwoJm5j X2N0eC0+bXAsIDEpOworCQkJZHVrX19iaV9zZXRfc21hbGwoJm5jX2N0eC0+bW0sIDEpOworCQl9 CisJfQorfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RyYWdvbjRfc2NhbGUoZHVrX19udW1jb252 X3N0cmluZ2lmeV9jdHggKm5jX2N0eCkgeworCWR1a19zbWFsbF9pbnRfdCBrID0gMDsKKworCS8q IFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlICdzY2FsZScgYWxnb3JpdGhtLCB3aXRoIHJlY3Vyc2lv biByZW1vdmVkLgorCSAqIE5vdGUgdGhhdCAnaycgaXMgZWl0aGVyIGNvcnJlY3QgaW1tZWRpYXRl bHksIG9yIHdpbGwgbW92ZSBpbiBvbmUKKwkgKiBkaXJlY3Rpb24gaW4gdGhlIGxvb3AuICBUaGVy ZSdzIG5vIG5lZWQgdG8gZG8gdGhlIGxvdy9oaWdoIGNoZWNrcworCSAqIG9uIGV2ZXJ5IHJvdW5k IChsaWtlIHRoZSBTY2hlbWUgYWxnb3JpdGhtIGRvZXMpLgorCSAqCisJICogVGhlIHNjaGVtZSBh bGdvcml0aG0gZmluZHMgJ2snIGFuZCB1cGRhdGVzICdzJyBzaW11bHRhbmVvdXNseSwKKwkgKiB3 aGlsZSB0aGUgbG9naWNhbCBhbGdvcml0aG0gZmluZHMgJ2snIHdpdGggJ3MnIGhhdmluZyBpdHMg aW5pdGlhbAorCSAqIHZhbHVlLCBhZnRlciB3aGljaCAncycgaXMgdXBkYXRlZCBzZXBhcmF0ZWx5 IChzZWUgdGhlIEJ1cmdlci1EeWJ2aWcKKwkgKiBwYXBlciwgU2VjdGlvbiAzLjEsIHN0ZXBzIDIg YW5kIDMpLgorCSAqCisJICogVGhlIGNhc2Ugd2hlcmUgbSsgPT0gbS0gKGFsbW9zdCBhbHdheXMp IGlzIG9wdGltaXplZCBmb3IsIGJlY2F1c2UKKwkgKiBpdCByZWR1Y2VzIHRoZSBiaWdpbnQgb3Bl cmF0aW9ucyBjb25zaWRlcmFibHkgYW5kIGFsbW9zdCBhbHdheXMKKwkgKiBhcHBsaWVzLiAgVGhl IHNjYWxlIGxvb3Agb25seSBuZWVkcyB0byB3b3JrIHdpdGggbSssIHNvIHRoaXMgd29ya3MuCisJ ICovCisKKwkvKiBYWFg6IHRoaXMgYWxnb3JpdGhtIGNvdWxkIGJlIG9wdGltaXplZCBxdWl0ZSBh IGxvdCBieSB1c2luZyBlLmcuCisJICogYSBsb2dhcml0aG0gYmFzZWQgZXN0aW1hdG9yIGZvciAn aycgYW5kIHBlcmZvcm1pbmcgQl5uIG11bHRpcGxpY2F0aW9uCisJICogdXNpbmcgYSBsb29rdXAg dGFibGUgb3IgdXNpbmcgc29tZSBiaXQtcmVwcmVzZW50YXRpb24gYmFzZWQgZXhwCisJICogYWxn b3JpdGhtLiAgQ3VycmVudGx5IHdlIGp1c3QgbG9vcCwgd2l0aCBzaWduaWZpY2FudCBwZXJmb3Jt YW5jZQorCSAqIGltcGFjdCBmb3IgdmVyeSBsYXJnZSBhbmQgdmVyeSBzbWFsbCBudW1iZXJzLgor CSAqLworCisJRFVLX0RERChEVUtfREREUFJJTlQoInNjYWxlOiBCPSVsZCwgbG93X29rPSVsZCwg aGlnaF9vaz0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBuY19jdHgtPkIsIChs b25nKSBuY19jdHgtPmxvd19vaywgKGxvbmcpIG5jX2N0eC0+aGlnaF9vaykpOworCURVS19fQklf UFJJTlQoInIoaW5pdCkiLCAmbmNfY3R4LT5yKTsKKwlEVUtfX0JJX1BSSU5UKCJzKGluaXQpIiwg Jm5jX2N0eC0+cyk7CisJRFVLX19CSV9QUklOVCgibXAoaW5pdCkiLCAmbmNfY3R4LT5tcCk7CisJ RFVLX19CSV9QUklOVCgibW0oaW5pdCkiLCAmbmNfY3R4LT5tbSk7CisKKwlmb3IgKDs7KSB7CisJ CURVS19EREQoRFVLX0RERFBSSU5UKCJzY2FsZSBsb29wIChpbmMgayksIGs9JWxkIiwgKGxvbmcp IGspKTsKKwkJRFVLX19CSV9QUklOVCgiciIsICZuY19jdHgtPnIpOworCQlEVUtfX0JJX1BSSU5U KCJzIiwgJm5jX2N0eC0+cyk7CisJCURVS19fQklfUFJJTlQoIm0rIiwgJm5jX2N0eC0+bXApOwor CQlEVUtfX0JJX1BSSU5UKCJtLSIsICZuY19jdHgtPm1tKTsKKworCQlkdWtfX2JpX2FkZCgmbmNf Y3R4LT50MSwgJm5jX2N0eC0+ciwgJm5jX2N0eC0+bXApOyAgLyogdDEgPSAoKyByIG0rKSAqLwor CQlpZiAoZHVrX19iaV9jb21wYXJlKCZuY19jdHgtPnQxLCAmbmNfY3R4LT5zKSA+PSAobmNfY3R4 LT5oaWdoX29rID8gMCA6IDEpKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgiayBpcyB0b28g bG93IikpOworCQkJLyogciA8LSByCisJCQkgKiBzIDwtICgqIHMgQikKKwkJCSAqIG0rIDwtIG0r CisJCQkgKiBtLSA8LSBtLQorCQkJICogayA8LSAoKyBrIDEpCisJCQkgKi8KKworCQkJZHVrX19i aV9tdWxfc21hbGxfY29weSgmbmNfY3R4LT5zLCAoZHVrX3VpbnQzMl90KSBuY19jdHgtPkIsICZu Y19jdHgtPnQxKTsKKwkJCWsrKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ LyogayA+IDAgLT4gayB3YXMgdG9vIGxvdywgYW5kIGNhbm5vdCBiZSB0b28gaGlnaCAqLworCWlm IChrID4gMCkgeworCQlnb3RvIHNraXBfZGVjX2s7CisJfQorCisJZm9yICg7OykgeworCQlEVUtf REREKERVS19ERERQUklOVCgic2NhbGUgbG9vcCAoZGVjIGspLCBrPSVsZCIsIChsb25nKSBrKSk7 CisJCURVS19fQklfUFJJTlQoInIiLCAmbmNfY3R4LT5yKTsKKwkJRFVLX19CSV9QUklOVCgicyIs ICZuY19jdHgtPnMpOworCQlEVUtfX0JJX1BSSU5UKCJtKyIsICZuY19jdHgtPm1wKTsKKwkJRFVL X19CSV9QUklOVCgibS0iLCAmbmNfY3R4LT5tbSk7CisKKwkJZHVrX19iaV9hZGQoJm5jX2N0eC0+ dDEsICZuY19jdHgtPnIsICZuY19jdHgtPm1wKTsgIC8qIHQxID0gKCsgciBtKykgKi8KKwkJZHVr X19iaV9tdWxfc21hbGwoJm5jX2N0eC0+dDIsICZuY19jdHgtPnQxLCAoZHVrX3VpbnQzMl90KSBu Y19jdHgtPkIpOyAgIC8qIHQyID0gKCogKCsgciBtKykgQikgKi8KKwkJaWYgKGR1a19fYmlfY29t cGFyZSgmbmNfY3R4LT50MiwgJm5jX2N0eC0+cykgPD0gKG5jX2N0eC0+aGlnaF9vayA/IC0xIDog MCkpIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJrIGlzIHRvbyBoaWdoIikpOworCQkJLyog ciA8LSAoKiByIEIpCisJCQkgKiBzIDwtIHMKKwkJCSAqIG0rIDwtICgqIG0rIEIpCisJCQkgKiBt LSA8LSAoKiBtLSBCKQorCQkJICogayA8LSAoLSBrIDEpCisJCQkgKi8KKwkJCWR1a19fYmlfbXVs X3NtYWxsX2NvcHkoJm5jX2N0eC0+ciwgKGR1a191aW50MzJfdCkgbmNfY3R4LT5CLCAmbmNfY3R4 LT50MSk7CisJCQlkdWtfX2JpX211bF9zbWFsbF9jb3B5KCZuY19jdHgtPm1wLCAoZHVrX3VpbnQz Ml90KSBuY19jdHgtPkIsICZuY19jdHgtPnQxKTsKKwkJCWlmIChuY19jdHgtPnVuZXF1YWxfZ2Fw cykgeworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJtKyAhPSBtLSAtPiBuZWVkIHRvIHVwZGF0 ZSBtLSB0b28iKSk7CisJCQkJZHVrX19iaV9tdWxfc21hbGxfY29weSgmbmNfY3R4LT5tbSwgKGR1 a191aW50MzJfdCkgbmNfY3R4LT5CLCAmbmNfY3R4LT50MSk7CisJCQl9CisJCQlrLS07CisJCX0g ZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworIHNraXBfZGVjX2s6CisKKwlpZiAoIW5jX2N0 eC0+dW5lcXVhbF9nYXBzKSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJlcXVhbCBnYXBzLCBj b3B5IG0tIGZyb20gbSsiKSk7CisJCWR1a19fYmlfY29weSgmbmNfY3R4LT5tbSwgJm5jX2N0eC0+ bXApOyAgLyogbW0gPC0gbXAgKi8KKwl9CisJbmNfY3R4LT5rID0gazsKKworCURVS19EREQoRFVL X0RERFBSSU5UKCJmaW5hbCBrOiAlbGQiLCAobG9uZykgaykpOworCURVS19fQklfUFJJTlQoInIo ZmluYWwpIiwgJm5jX2N0eC0+cik7CisJRFVLX19CSV9QUklOVCgicyhmaW5hbCkiLCAmbmNfY3R4 LT5zKTsKKwlEVUtfX0JJX1BSSU5UKCJtcChmaW5hbCkiLCAmbmNfY3R4LT5tcCk7CisJRFVLX19C SV9QUklOVCgibW0oZmluYWwpIiwgJm5jX2N0eC0+bW0pOworfQorCitEVUtfTE9DQUwgdm9pZCBk dWtfX2RyYWdvbjRfZ2VuZXJhdGUoZHVrX19udW1jb252X3N0cmluZ2lmeV9jdHggKm5jX2N0eCkg eworCWR1a19zbWFsbF9pbnRfdCB0YzEsIHRjMjsgICAgLyogdGVybWluYXRpbmcgY29uZGl0aW9u cyAqLworCWR1a19zbWFsbF9pbnRfdCBkOyAgICAgICAgICAgLyogY3VycmVudCBkaWdpdCAqLwor CWR1a19zbWFsbF9pbnRfdCBjb3VudCA9IDA7ICAgLyogZGlnaXQgY291bnQgKi8KKworCS8qCisJ ICogIERpZ2l0IGdlbmVyYXRpb24gbG9vcC4KKwkgKgorCSAqICBEaWZmZXJlbnQgdGVybWluYXRp b24gY29uZGl0aW9uczoKKwkgKgorCSAqICAgIDEuIEZyZWUgZm9ybWF0IG91dHB1dC4gIFRlcm1p bmF0ZSB3aGVuIHNob3J0ZXN0IGFjY3VyYXRlCisJICogICAgICAgcmVwcmVzZW50YXRpb24gZm91 bmQuCisJICoKKwkgKiAgICAyLiBGaXhlZCBmb3JtYXQgb3V0cHV0LCB3aXRoIHNwZWNpZmljIG51 bWJlciBvZiBkaWdpdHMuCisJICogICAgICAgSWdub3JlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMs IHRlcm1pbmF0ZSB3aGVuIGRpZ2l0cworCSAqICAgICAgIGdlbmVyYXRlZC4gIENhbGxlciByZXF1 ZXN0cyBhbiBleHRyYSBkaWdpdCBhbmQgcm91bmRzLgorCSAqCisJICogICAgMy4gRml4ZWQgZm9y bWF0IG91dHB1dCwgd2l0aCBhIHNwZWNpZmljIGFic29sdXRlIGN1dC1vZmYKKwkgKiAgICAgICBw b3NpdGlvbiAoZS5nLiAxMCBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCkuICBOb3RlCisJICog ICAgICAgdGhhdCB3ZSBhbHdheXMgZ2VuZXJhdGUgYXQgbGVhc3Qgb25lIGRpZ2l0LCBldmVuIGlm CisJICogICAgICAgdGhlIGRpZ2l0IGlzIGJlbG93IHRoZSBjdXQtb2ZmIHBvaW50IGFscmVhZHku CisJICovCisKKwlmb3IgKDs7KSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJnZW5lcmF0ZSBs b29wLCBjb3VudD0lbGQsIGs9JWxkLCBCPSVsZCwgbG93X29rPSVsZCwgaGlnaF9vaz0lbGQiLAor CQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgY291bnQsIChsb25nKSBuY19jdHgtPmssIChs b25nKSBuY19jdHgtPkIsCisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBuY19jdHgtPmxv d19vaywgKGxvbmcpIG5jX2N0eC0+aGlnaF9vaykpOworCQlEVUtfX0JJX1BSSU5UKCJyIiwgJm5j X2N0eC0+cik7CisJCURVS19fQklfUFJJTlQoInMiLCAmbmNfY3R4LT5zKTsKKwkJRFVLX19CSV9Q UklOVCgibSsiLCAmbmNfY3R4LT5tcCk7CisJCURVS19fQklfUFJJTlQoIm0tIiwgJm5jX2N0eC0+ bW0pOworCisJCS8qIChxdW90aWVudC1yZW1haW5kZXIgKCogciBCKSBzKSB1c2luZyBhIGR1bW15 IHN1YnRyYWN0aW9uIGxvb3AgKi8KKwkJZHVrX19iaV9tdWxfc21hbGwoJm5jX2N0eC0+dDEsICZu Y19jdHgtPnIsIChkdWtfdWludDMyX3QpIG5jX2N0eC0+Qik7ICAgICAgIC8qIHQxIDwtICgqIHIg QikgKi8KKwkJZCA9IDA7CisJCWZvciAoOzspIHsKKwkJCWlmIChkdWtfX2JpX2NvbXBhcmUoJm5j X2N0eC0+dDEsICZuY19jdHgtPnMpIDwgMCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJZHVrX19i aV9zdWJfY29weSgmbmNfY3R4LT50MSwgJm5jX2N0eC0+cywgJm5jX2N0eC0+dDIpOyAgLyogdDEg PC0gdDEgLSBzICovCisJCQlkKys7CisJCX0KKwkJZHVrX19iaV9jb3B5KCZuY19jdHgtPnIsICZu Y19jdHgtPnQxKTsgIC8qIHIgPC0gKHJlbWFpbmRlciAoKiByIEIpIHMpICovCisJCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkIDwtIChxdW90aWVudCAoKiByIEIp IHMpICAgKGluIHJhbmdlIDAuLi5CLTEpICovCisJCURVS19EREQoRFVLX0RERFBSSU5UKCItPiBk KHF1b3QpPSVsZCIsIChsb25nKSBkKSk7CisJCURVS19fQklfUFJJTlQoInIocmVtKSIsICZuY19j dHgtPnIpOworCisJCWR1a19fYmlfbXVsX3NtYWxsX2NvcHkoJm5jX2N0eC0+bXAsIChkdWtfdWlu dDMyX3QpIG5jX2N0eC0+QiwgJm5jX2N0eC0+dDIpOyAvKiBtKyA8LSAoKiBtKyBCKSAqLworCQlk dWtfX2JpX211bF9zbWFsbF9jb3B5KCZuY19jdHgtPm1tLCAoZHVrX3VpbnQzMl90KSBuY19jdHgt PkIsICZuY19jdHgtPnQyKTsgLyogbS0gPC0gKCogbS0gQikgKi8KKwkJRFVLX19CSV9QUklOVCgi bXAodXBkKSIsICZuY19jdHgtPm1wKTsKKwkJRFVLX19CSV9QUklOVCgibW0odXBkKSIsICZuY19j dHgtPm1tKTsKKworCQkvKiBUZXJtaW5hdGluZyBjb25kaXRpb25zLiAgRm9yIGZpeGVkIHdpZHRo IG91dHB1dCwgd2UganVzdCBpZ25vcmUgdGhlCisJCSAqIHRlcm1pbmF0aW5nIGNvbmRpdGlvbnMg KGFuZCBwcmV0ZW5kIHRoYXQgdGMxID09IHRjMiA9PSBmYWxzZSkuICBUaGUKKwkJICogdGhlIGN1 cnJlbnQgc2hvcnRjdXQgZm9yIGZpeGVkLWZvcm1hdCBvdXRwdXQgaXMgdG8gZ2VuZXJhdGUgYSBm ZXcKKwkJICogZXh0cmEgZGlnaXRzIGFuZCB1c2Ugcm91bmRpbmcgKHdpdGggY2FycnkpIHRvIGZp bmlzaCB0aGUgb3V0cHV0LgorCQkgKi8KKworCQlpZiAobmNfY3R4LT5pc19maXhlZCA9PSAwKSB7 CisJCQkvKiBmcmVlLWZvcm0gKi8KKwkJCXRjMSA9IChkdWtfX2JpX2NvbXBhcmUoJm5jX2N0eC0+ ciwgJm5jX2N0eC0+bW0pIDw9IChuY19jdHgtPmxvd19vayA/IDAgOiAtMSkpOworCisJCQlkdWtf X2JpX2FkZCgmbmNfY3R4LT50MSwgJm5jX2N0eC0+ciwgJm5jX2N0eC0+bXApOyAgLyogdDEgPC0g KCsgciBtKykgKi8KKwkJCXRjMiA9IChkdWtfX2JpX2NvbXBhcmUoJm5jX2N0eC0+dDEsICZuY19j dHgtPnMpID49IChuY19jdHgtPmhpZ2hfb2sgPyAwIDogMSkpOworCisJCQlEVUtfREREKERVS19E RERQUklOVCgidGMxPSVsZCwgdGMyPSVsZCIsIChsb25nKSB0YzEsIChsb25nKSB0YzIpKTsKKwkJ fSBlbHNlIHsKKwkJCS8qIGZpeGVkLWZvcm1hdCAqLworCQkJdGMxID0gMDsKKwkJCXRjMiA9IDA7 CisJCX0KKworCQkvKiBDb3VudCBpcyBpbmNyZW1lbnRlZCBiZWZvcmUgRFVLX19EUkFHT040X09V VFBVVF9QUkVJTkMoKSBjYWxsCisJCSAqIG9uIHB1cnBvc2UsIHdoaWNoIGlzIHRha2VuIGludG8g YWNjb3VudCBieSB0aGUgbWFjcm8uCisJCSAqLworCQljb3VudCsrOworCisJCWlmICh0YzEpIHsK KwkJCWlmICh0YzIpIHsKKwkJCQkvKiB0YzEgPSB0cnVlLCB0YzIgPSB0cnVlICovCisJCQkJZHVr X19iaV9tdWxfc21hbGwoJm5jX2N0eC0+dDEsICZuY19jdHgtPnIsIDIpOworCQkJCWlmIChkdWtf X2JpX2NvbXBhcmUoJm5jX2N0eC0+dDEsICZuY19jdHgtPnMpIDwgMCkgeyAgLyogKDwgKCogciAy KSBzKSAqLworCQkJCQlEVUtfREREKERVS19ERERQUklOVCgidGMxPXRydWUsIHRjMj10cnVlLCAy ciA+IHM6IG91dHB1dCBkIC0tPiAlbGQgKGs9JWxkKSIsCisJCQkJCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBkLCAobG9uZykgbmNfY3R4LT5rKSk7CisJCQkJCURVS19fRFJBR09ONF9PVVRQ VVRfUFJFSU5DKG5jX2N0eCwgY291bnQsIGQpOworCQkJCX0gZWxzZSB7CisJCQkJCURVS19EREQo RFVLX0RERFBSSU5UKCJ0YzE9dHJ1ZSwgdGMyPXRydWUsIDJyIDw9IHM6IG91dHB1dCBkKzEgLS0+ ICVsZCAoaz0lbGQpIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIChkICsgMSks IChsb25nKSBuY19jdHgtPmspKTsKKwkJCQkJRFVLX19EUkFHT040X09VVFBVVF9QUkVJTkMobmNf Y3R4LCBjb3VudCwgZCArIDEpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJ LyogdGMxID0gdHJ1ZSwgdGMyID0gZmFsc2UgKi8KKwkJCQlEVUtfREREKERVS19ERERQUklOVCgi dGMxPXRydWUsIHRjMj1mYWxzZTogb3V0cHV0IGQgLS0+ICVsZCAoaz0lbGQpIiwKKwkJCQkgICAg ICAgICAgICAgICAgICAgICAobG9uZykgZCwgKGxvbmcpIG5jX2N0eC0+aykpOworCQkJCURVS19f RFJBR09ONF9PVVRQVVRfUFJFSU5DKG5jX2N0eCwgY291bnQsIGQpOworCQkJCWJyZWFrOworCQkJ fQorCQl9IGVsc2UgeworCQkJaWYgKHRjMikgeworCQkJCS8qIHRjMSA9IGZhbHNlLCB0YzIgPSB0 cnVlICovCisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoInRjMT1mYWxzZSwgdGMyPXRydWU6IG91 dHB1dCBkKzEgLS0+ICVsZCAoaz0lbGQpIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAobG9u ZykgKGQgKyAxKSwgKGxvbmcpIG5jX2N0eC0+aykpOworCQkJCURVS19fRFJBR09ONF9PVVRQVVRf UFJFSU5DKG5jX2N0eCwgY291bnQsIGQgKyAxKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJ CQkJLyogdGMxID0gZmFsc2UsIHRjMiA9IGZhbHNlICovCisJCQkJRFVLX0RERChEVUtfREREUFJJ TlQoInRjMT1mYWxzZSwgdGMyPWZhbHNlOiBvdXRwdXQgZCAtLT4gJWxkIChrPSVsZCkiLAorCQkJ CSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBkLCAobG9uZykgbmNfY3R4LT5rKSk7CisJCQkJ RFVLX19EUkFHT040X09VVFBVVF9QUkVJTkMobmNfY3R4LCBjb3VudCwgZCk7CisKKwkJCQkvKiBy IDwtIHIgICAgKHVwZGF0ZWQgYWJvdmU6IHIgPC0gKHJlbWFpbmRlciAoKiByIEIpIHMpCisJCQkJ ICogcyA8LSBzCisJCQkJICogbSsgPC0gbSsgICh1cGRhdGVkIGFib3ZlOiBtKyA8LSAoKiBtKyBC KQorCQkJCSAqIG0tIDwtIG0tICAodXBkYXRlZCBhYm92ZTogbS0gPC0gKCogbS0gQikKKwkJCQkg KiBCLCBsb3dfb2ssIGhpZ2hfb2sgYXJlIGZpeGVkCisJCQkJICovCisKKwkJCQkvKiBmYWxsIHRo cm91Z2ggYW5kIGNvbnRpbnVlIGZvci1sb29wICovCisJCQl9CisJCX0KKworCQkvKiBmaXhlZC1m b3JtYXQgdGVybWluYXRpb24gY29uZGl0aW9ucyAqLworCQlpZiAobmNfY3R4LT5pc19maXhlZCkg eworCQkJaWYgKG5jX2N0eC0+YWJzX3BvcykgeworCQkJCWludCBwb3MgPSBuY19jdHgtPmsgLSBj b3VudCArIDE7ICAvKiBjb3VudCBpcyBhbHJlYWR5IGluY3JlbWVudGVkLCB0YWtlIGludG8gYWNj b3VudCAqLworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJmaXhlZCBmb3JtYXQsIGFic29sdXRl OiBhYnMgcG9zPSVsZCwgaz0lbGQsIGNvdW50PSVsZCwgcmVxPSVsZCIsCisJCQkJICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIHBvcywgKGxvbmcpIG5jX2N0eC0+aywgKGxvbmcpIGNvdW50LCAo bG9uZykgbmNfY3R4LT5yZXFfZGlnaXRzKSk7CisJCQkJaWYgKHBvcyA8PSBuY19jdHgtPnJlcV9k aWdpdHMpIHsKKwkJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImRpZ2l0IHBvc2l0aW9uIHJlYWNo ZWQgcmVxX2RpZ2l0cywgZW5kIGdlbmVyYXRlIGxvb3AiKSk7CisJCQkJCWJyZWFrOworCQkJCX0K KwkJCX0gZWxzZSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImZpeGVkIGZvcm1hdCwgcmVs YXRpdmU6IGs9JWxkLCBjb3VudD0lbGQsIHJlcT0lbGQiLAorCQkJCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBuY19jdHgtPmssIChsb25nKSBjb3VudCwgKGxvbmcpIG5jX2N0eC0+cmVxX2Rp Z2l0cykpOworCQkJCWlmIChjb3VudCA+PSBuY19jdHgtPnJlcV9kaWdpdHMpIHsKKwkJCQkJRFVL X0RERChEVUtfREREUFJJTlQoImRpZ2l0IGNvdW50IHJlYWNoZWQgcmVxX2RpZ2l0cywgZW5kIGdl bmVyYXRlIGxvb3AiKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0gIC8qIGZv ciAqLworCisJbmNfY3R4LT5jb3VudCA9IGNvdW50OworCisJRFVLX0RERChEVUtfREREUFJJTlQo ImdlbmVyYXRlIGZpbmlzaGVkIikpOworCisjaWYgZGVmaW5lZChEVUtfVVNFX0RFQlVHX0xFVkVM KSAmJiAoRFVLX1VTRV9ERUJVR19MRVZFTCA+PSAyKQorCXsKKwkJZHVrX3VpbnQ4X3QgYnVmWzIw NDhdOworCQlkdWtfc21hbGxfaW50X3QgaSwgdDsKKwkJZHVrX21lbXplcm8oYnVmLCBzaXplb2Yo YnVmKSk7CisJCWZvciAoaSA9IDA7IGkgPCBuY19jdHgtPmNvdW50OyBpKyspIHsKKwkJCXQgPSBu Y19jdHgtPmRpZ2l0c1tpXTsKKwkJCWlmICh0IDwgMCB8fCB0ID4gMzYpIHsKKwkJCQlidWZbaV0g PSAoZHVrX3VpbnQ4X3QpICc/JzsKKwkJCX0gZWxzZSB7CisJCQkJYnVmW2ldID0gKGR1a191aW50 OF90KSBEVUtfX0RJR0lUQ0hBUih0KTsKKwkJCX0KKwkJfQorCQlEVUtfREREKERVS19ERERQUklO VCgiLT4gZ2VuZXJhdGVkIGRpZ2l0czsgaz0lbGQsIGRpZ2l0cz0nJXMnIiwKKwkJICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIG5jX2N0eC0+aywgKGNvbnN0IGNoYXIgKikgYnVmKSk7CisJfQor I2VuZGlmCit9CisKKy8qIFJvdW5kIHVwIGRpZ2l0cyB0byBhIGdpdmVuIHBvc2l0aW9uLiAgSWYg cG9zaXRpb24gaXMgb3V0LW9mLWJvdW5kcywKKyAqIGRvZXMgbm90aGluZy4gIElmIGNhcnJ5IHBy b3BhZ2F0ZXMgb3ZlciB0aGUgZmlyc3QgZGlnaXQsIGEgJzEnIGlzCisgKiBwcmVwZW5kZWQgdG8g ZGlnaXRzIGFuZCAnaycgd2lsbCBiZSB1cGRhdGVkLiAgUmV0dXJuIHZhbHVlIGluZGljYXRlcwor ICogd2hldGhlciBjYXJyeSBwcm9wYWdhdGVkIG92ZXIgdGhlIGZpcnN0IGRpZ2l0LgorICoKKyAq IE5vdGUgdGhhdCBuY19jdHgtPmNvdW50IGlzIE5PVCB1cGRhdGVkIGJhc2VkIG9uIHRoZSByb3Vu ZGluZyBwb3NpdGlvbgorICogKGl0IGlzIHVwZGF0ZWQgb25seSBpZiBjYXJyeSBvdmVyZmxvd3Mg b3ZlciB0aGUgZmlyc3QgZGlnaXQgYW5kIGFuCisgKiBleHRyYSBkaWdpdCBpcyBwcmVwZW5kZWQp LgorICovCitEVUtfTE9DQUwgZHVrX3NtYWxsX2ludF90IGR1a19fZHJhZ29uNF9maXhlZF9mb3Jt YXRfcm91bmQoZHVrX19udW1jb252X3N0cmluZ2lmeV9jdHggKm5jX2N0eCwgZHVrX3NtYWxsX2lu dF90IHJvdW5kX2lkeCkgeworCWR1a19zbWFsbF9pbnRfdCB0OworCWR1a191aW50OF90ICpwOwor CWR1a191aW50OF90IHJvdW5kdXBfbGltaXQ7CisJZHVrX3NtYWxsX2ludF90IHJldCA9IDA7CisK KwkvKgorCSAqICByb3VuZF9pZHggcG9pbnRzIHRvIHRoZSBkaWdpdCB3aGljaCBpcyBjb25zaWRl cmVkIGZvciByb3VuZGluZzsgdGhlCisJICogIGRpZ2l0IHRvIGl0cyBsZWZ0IGlzIHRoZSBmaW5h bCBkaWdpdCBvZiB0aGUgcm91bmRlZCB2YWx1ZS4gIElmIHJvdW5kX2lkeAorCSAqICBpcyB6ZXJv LCByb3VuZGluZyB3aWxsIGJlIHBlcmZvcm1lZDsgdGhlIHJlc3VsdCB3aWxsIGVpdGhlciBiZSBh biBlbXB0eQorCSAqICByb3VuZGVkIHZhbHVlIG9yIGlmIGNhcnJ5IGhhcHBlbnMgYSAnMScgZGln aXQgaXMgZ2VuZXJhdGVkLgorCSAqLworCisJaWYgKHJvdW5kX2lkeCA+PSBuY19jdHgtPmNvdW50 KSB7CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJyb3VuZF9pZHggb3V0IG9mIGJvdW5kcyAoJWxk ID49ICVsZCAoY291bnQpKSAtPiBubyByb3VuZGluZyIsCisJCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSByb3VuZF9pZHgsIChsb25nKSBuY19jdHgtPmNvdW50KSk7CisJCXJldHVybiAwOwor CX0gZWxzZSBpZiAocm91bmRfaWR4IDwgMCkgeworCQlEVUtfREREKERVS19ERERQUklOVCgicm91 bmRfaWR4IG91dCBvZiBib3VuZHMgKCVsZCA8IDApIC0+IG5vIHJvdW5kaW5nIiwKKwkJICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIHJvdW5kX2lkeCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkv KgorCSAqICBSb3VuZC11cCBsaW1pdC4KKwkgKgorCSAqICBGb3IgZXZlbiB2YWx1ZXMsIGRpdmlk ZXMgZXZlbmx5LCBlLmcuIDEwIC0+IHJvdW5kdXBfbGltaXQ9NS4KKwkgKgorCSAqICBGb3Igb2Rk IHZhbHVlcywgcm91bmRzIHVwLCBlLmcuIDMgLT4gcm91bmR1cF9saW1pdD0yLgorCSAqICBJZiBy YWRpeCBpcyAzLCAwLzMgLT4gZG93biwgMS8zIC0+IGRvd24sIDIvMyAtPiB1cC4KKwkgKi8KKwly b3VuZHVwX2xpbWl0ID0gKGR1a191aW50OF90KSAoKG5jX2N0eC0+QiArIDEpIC8gMik7CisKKwlw ID0gJm5jX2N0eC0+ZGlnaXRzW3JvdW5kX2lkeF07CisJaWYgKCpwID49IHJvdW5kdXBfbGltaXQp IHsKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImZpeGVkLWZvcm1hdCByb3VuZGluZyBjYXJyeSBy ZXF1aXJlZCIpKTsKKwkJLyogY2FycnkgKi8KKwkJZm9yICg7OykgeworCQkJKnAgPSAwOworCQkJ aWYgKHAgPT0gJm5jX2N0eC0+ZGlnaXRzWzBdKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQo ImNhcnJ5IHByb3BhZ2F0ZWQgdG8gZmlyc3QgZGlnaXQgLT4gc3BlY2lhbCBjYXNlIGhhbmRsaW5n IikpOworCQkJCWR1a19tZW1tb3ZlKCh2b2lkICopICgmbmNfY3R4LT5kaWdpdHNbMV0pLAorCQkJ CSAgICAgICAgICAgIChjb25zdCB2b2lkICopICgmbmNfY3R4LT5kaWdpdHNbMF0pLAorCQkJCSAg ICAgICAgICAgIChzaXplX3QpIChzaXplb2YoY2hhcikgKiAoc2l6ZV90KSBuY19jdHgtPmNvdW50 KSk7CisJCQkJbmNfY3R4LT5kaWdpdHNbMF0gPSAxOyAgLyogZG9uJ3QgaW5jcmVhc2UgJ2NvdW50 JyAqLworCQkJCW5jX2N0eC0+aysrOyAgLyogcG9zaXRpb24gb2YgaGlnaGVzdCBkaWdpdCBjaGFu Z2VkICovCisJCQkJbmNfY3R4LT5jb3VudCsrOyAgLyogbnVtYmVyIG9mIGRpZ2l0cyBjaGFuZ2Vk ICovCisJCQkJcmV0ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJRFVLX0RERChEVUtfRERE UFJJTlQoImZpeGVkLWZvcm1hdCByb3VuZGluZyBjYXJyeTogQj0lbGQsIHJvdW5kdXBfbGltaXQ9 JWxkLCBwPSVwLCBkaWdpdHM9JXAiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG5j X2N0eC0+QiwgKGxvbmcpIHJvdW5kdXBfbGltaXQsICh2b2lkICopIHAsICh2b2lkICopIG5jX2N0 eC0+ZGlnaXRzKSk7CisJCQlwLS07CisJCQl0ID0gKnA7CisJCQlEVUtfREREKERVS19ERERQUklO VCgiZGlnaXQgYmVmb3JlIGNhcnJ5OiAlbGQiLCAobG9uZykgdCkpOworCQkJaWYgKCsrdCA8IG5j X2N0eC0+QikgeworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJyb3VuZGluZyBjYXJyeSB0ZXJt aW5hdGVkIikpOworCQkJCSpwID0gKGR1a191aW50OF90KSB0OworCQkJCWJyZWFrOworCQkJfQor CisJCQlEVUtfREREKERVS19ERERQUklOVCgid3JhcHMsIGNhcnJ5IHRvIG5leHQgZGlnaXQiKSk7 CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIERVS19fTk9fRVhQICAoNjU1 MzYpICAvKiBhcmJpdHJhcnkgbWFya2VyLCBvdXRzaWRlIHZhbGlkIGV4cCByYW5nZSAqLworCitE VUtfTE9DQUwgdm9pZCBkdWtfX2RyYWdvbjRfY29udmVydF9hbmRfcHVzaChkdWtfX251bWNvbnZf c3RyaW5naWZ5X2N0eCAqbmNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHVrX2h0aHJlYWQgKnRociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1a19zbWFsbF9pbnRfdCByYWRpeCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19zbWFsbF9pbnRfdCBkaWdpdHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfc21hbGxfdWlu dF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHVrX3NtYWxsX2ludF90IG5lZykgeworCWR1a19zbWFsbF9pbnRfdCBrOworCWR1a19zbWFsbF9p bnRfdCBwb3MsIHBvc19lbmQ7CisJZHVrX3NtYWxsX2ludF90IGV4cHQ7CisJZHVrX3NtYWxsX2lu dF90IGRpZzsKKwlkdWtfdWludDhfdCAqcTsKKwlkdWtfdWludDhfdCAqYnVmOworCisJLyoKKwkg KiAgVGhlIHN0cmluZyBjb252ZXJzaW9uIGhlcmUgaW5jb3Jwb3JhdGVzIGFsbCB0aGUgbmVjZXNz YXJ5IEVDTUFTY3JpcHQKKwkgKiAgc2VtYW50aWNzIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBiZSBn ZW5lcmljLiAgbmNfY3R4LT5kaWdpdHMgY29udGFpbnMKKwkgKiAgbmNfY3R4LT5jb3VudCBkaWdp dHMgKD49IDEpLCB3aXRoIHRoZSB0b3Btb3N0IGRpZ2l0J3MgJ3Bvc2l0aW9uJworCSAqICBpbmRp Y2F0ZWQgYnkgbmNfY3R4LT5rIGFzIGZvbGxvd3M6CisJICoKKwkgKiAgICBkaWdpdHM9IjEyMyIg Y291bnQ9MyBrPTAgICAtLT4gICAwLjEyMworCSAqICAgIGRpZ2l0cz0iMTIzIiBjb3VudD0zIGs9 MSAgIC0tPiAgIDEuMjMKKwkgKiAgICBkaWdpdHM9IjEyMyIgY291bnQ9MyBrPTUgICAtLT4gICAx MjMwMAorCSAqICAgIGRpZ2l0cz0iMTIzIiBjb3VudD0zIGs9LTEgIC0tPiAgIDAuMDEyMworCSAq CisJICogIE5vdGUgdGhhdCB0aGUgaWRlbnRpZmllciBuYW1lcyB1c2VkIGZvciBmb3JtYXQgc2Vs ZWN0aW9uIGFyZSBkaWZmZXJlbnQKKwkgKiAgaW4gQnVyZ2VyLUR5YnZpZyBwYXBlciBhbmQgRUNN QVNjcmlwdCBzcGVjaWZpY2F0aW9uIChxdWl0ZSBjb25mdXNpbmdseQorCSAqICBzbywgYmVjYXVz ZSBlLmcuICdrJyBoYXMgYSB0b3RhbGx5IGRpZmZlcmVudCBtZWFuaW5nIGluIGVhY2gpLiAgU2Vl CisJICogIGRvY3VtZW50YXRpb24gZm9yIGRpc2N1c3Npb24uCisJICoKKwkgKiAgRUNNQVNjcmlw dCBkb2Vzbid0IHNwZWNpZnkgYW55IHNwZWNpZmljIGJlaGF2aW9yIGZvciBmb3JtYXQgc2VsZWN0 aW9uCisJICogIChlLmcuIHdoZW4gdG8gdXNlIGV4cG9uZW50IG5vdGF0aW9uKSBmb3Igbm9uLWJh c2UtMTAgbnVtYmVycy4KKwkgKgorCSAqICBUaGUgYmlnaW50IHNwYWNlIGluIHRoZSBjb250ZXh0 IGlzIHJldXNlZCBmb3Igc3RyaW5nIG91dHB1dCwgYXMgdGhlcmUKKwkgKiAgaXMgbW9yZSB0aGFu IGVub3VnaCBzcGFjZSBmb3IgdGhhdCAoPjFrQiBhdCB0aGUgbW9tZW50KSwgYW5kIHdlIGF2b2lk CisJICogIGFsbG9jYXRpbmcgZXZlbiBtb3JlIHN0YWNrLgorCSAqLworCisJRFVLX0FTU0VSVChE VUtfX05VTUNPTlZfQ1RYX0JJR0lOVFNfU0laRSA+PSBEVUtfX01BWF9GT1JNQVRURURfTEVOR1RI KTsKKwlEVUtfQVNTRVJUKG5jX2N0eC0+Y291bnQgPj0gMSk7CisKKwlrID0gbmNfY3R4LT5rOwor CWJ1ZiA9IChkdWtfdWludDhfdCAqKSAmbmNfY3R4LT5mOyAgLyogWFhYOiB1bmlvbiB3b3VsZCBi ZSBtb3JlIGNvcnJlY3QgKi8KKwlxID0gYnVmOworCisJLyogRXhwb25lbnQgaGFuZGxpbmc6IGlm IGV4cG9uZW50IGZvcm1hdCBpcyB1c2VkLCByZWNvcmQgZXhwb25lbnQgdmFsdWUgYW5kCisJICog ZmFrZSBrIHN1Y2ggdGhhdCBvbmUgbGVhZGluZyBkaWdpdCBpcyBnZW5lcmF0ZWQgKGUuZy4gZGln aXRzPTEyMyAtPiAiMS4yMyIpLgorCSAqCisJICogdG9GaXhlZCgpIHByZXZlbnRzIGV4cG9uZW50 IHVzZTsgb3RoZXJ3aXNlIGFwcGx5IGEgc2V0IG9mIGNyaXRlcmlhIHRvCisJICogbWF0Y2ggdGhl IG90aGVyIEFQSSBjYWxscyAodG9TdHJpbmcoKSwgdG9QcmVjaXNpb24sIGV0YykuCisJICovCisK KwlleHB0ID0gRFVLX19OT19FWFA7CisJaWYgKCFuY19jdHgtPmFic19wb3MgLyogdG9GaXhlZCgp ICovKSB7CisJCWlmICgoZmxhZ3MgJiBEVUtfTjJTX0ZMQUdfRk9SQ0VfRVhQKSB8fCAgICAgICAg ICAgICAvKiBleHBvbmVudGlhbCBub3RhdGlvbiBmb3JjZWQgKi8KKwkJICAgICgoZmxhZ3MgJiBE VUtfTjJTX0ZMQUdfTk9fWkVST19QQUQpICYmICAgICAgICAgIC8qIGZpeGVkIHByZWNpc2lvbiBh bmQgemVybyBwYWRkaW5nIHdvdWxkIGJlIHJlcXVpcmVkICovCisJICAgICAgICAgICAgIChrIC0g ZGlnaXRzID49IDEpKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGUuZy4gaz0zLCBk aWdpdHM9MiAtPiAiMTJYIikgKi8KKwkJICAgICgoayA+IDIxIHx8IGsgPD0gLTYpICYmIChyYWRp eCA9PSAxMCkpKSB7ICAgICAgIC8qIHRvU3RyaW5nKCkgY29uZGl0aW9ucyAqLworCQkJRFVLX0RE RChEVUtfREREUFJJTlQoInVzZSBleHBvbmVudGlhbCBub3RhdGlvbjogaz0lbGQgLT4gZXhwdD0l bGQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGssIChsb25nKSAoayAtIDEpKSk7 CisJCQlleHB0ID0gayAtIDE7ICAvKiBlLmcuIDEyLjMgLT4gZGlnaXRzPSIxMjMiIGs9MiAtPiAx LjIzZTEgKi8KKwkJCWsgPSAxOyAgLyogZ2VuZXJhdGUgbWFudGlzc2Egd2l0aCBhIHNpbmdsZSBs ZWFkaW5nIHdob2xlIG51bWJlciBkaWdpdCAqLworCQl9CisJfQorCisJaWYgKG5lZykgeworCQkq cSsrID0gJy0nOworCX0KKworCS8qIFN0YXJ0IHBvc2l0aW9uIChpbmNsdXNpdmUpIGFuZCBlbmQg cG9zaXRpb24gKGV4Y2x1c2l2ZSkgKi8KKwlwb3MgPSAoayA+PSAxID8gayA6IDEpOworCWlmIChu Y19jdHgtPmlzX2ZpeGVkKSB7CisJCWlmIChuY19jdHgtPmFic19wb3MpIHsKKwkJCS8qIHRvRml4 ZWQoKSAqLworCQkJcG9zX2VuZCA9IC1kaWdpdHM7CisJCX0gZWxzZSB7CisJCQlwb3NfZW5kID0g ayAtIGRpZ2l0czsKKwkJfQorCX0gZWxzZSB7CisJCXBvc19lbmQgPSBrIC0gbmNfY3R4LT5jb3Vu dDsKKwl9CisJaWYgKHBvc19lbmQgPiAwKSB7CisJCXBvc19lbmQgPSAwOworCX0KKworCURVS19E REQoRFVLX0RERFBSSU5UKCJleHB0PSVsZCwgaz0lbGQsIGNvdW50PSVsZCwgcG9zPSVsZCwgcG9z X2VuZD0lbGQsIGlzX2ZpeGVkPSVsZCwgIgorCSAgICAgICAgICAgICAgICAgICAgICJkaWdpdHM9 JWxkLCBhYnNfcG9zPSVsZCIsCisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGV4cHQsIChs b25nKSBrLCAobG9uZykgbmNfY3R4LT5jb3VudCwgKGxvbmcpIHBvcywgKGxvbmcpIHBvc19lbmQs CisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG5jX2N0eC0+aXNfZml4ZWQsIChsb25nKSBk aWdpdHMsIChsb25nKSBuY19jdHgtPmFic19wb3MpKTsKKworCS8qIERpZ2l0IGdlbmVyYXRpb24g Ki8KKwl3aGlsZSAocG9zID4gcG9zX2VuZCkgeworCQlEVUtfREREKERVS19ERERQUklOVCgiZGln aXQgZ2VuZXJhdGlvbjogcG9zPSVsZCwgcG9zX2VuZD0lbGQiLAorCQkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgcG9zLCAobG9uZykgcG9zX2VuZCkpOworCQlpZiAocG9zID09IDApIHsKKwkJ CSpxKysgPSAoZHVrX3VpbnQ4X3QpICcuJzsKKwkJfQorCQlpZiAocG9zID4gaykgeworCQkJKnEr KyA9IChkdWtfdWludDhfdCkgJzAnOworCQl9IGVsc2UgaWYgKHBvcyA8PSBrIC0gbmNfY3R4LT5j b3VudCkgeworCQkJKnErKyA9IChkdWtfdWludDhfdCkgJzAnOworCQl9IGVsc2UgeworCQkJZGln ID0gbmNfY3R4LT5kaWdpdHNbayAtIHBvc107CisJCQlEVUtfQVNTRVJUKGRpZyA+PSAwICYmIGRp ZyA8IG5jX2N0eC0+Qik7CisJCQkqcSsrID0gKGR1a191aW50OF90KSBEVUtfX0RJR0lUQ0hBUihk aWcpOworCQl9CisKKwkJcG9zLS07CisJfQorCURVS19BU1NFUlQocG9zIDw9IDEpOworCisJLyog RXhwb25lbnQgKi8KKwlpZiAoZXhwdCAhPSBEVUtfX05PX0VYUCkgeworCQkvKgorCQkgKiAgRXhw b25lbnQgbm90YXRpb24gZm9yIG5vbi1iYXNlLTEwIG51bWJlcnMgaXNuJ3Qgc3BlY2lmaWVkIGlu IEVDTUFTY3JpcHQKKwkJICogIHNwZWNpZmljYXRpb24sIGFzIGl0IG5ldmVyIGV4cGxpY2l0bHkg dHVybnMgdXA6IG5vbi1kZWNpbWFsIG51bWJlcnMgY2FuCisJCSAqICBvbmx5IGJlIGZvcm1hdHRl ZCB3aXRoIE51bWJlci5wcm90b3R5cGUudG9TdHJpbmcoW3JhZGl4XSkgYW5kIGZvciB0aGF0LAor CQkgKiAgYmVoYXZpb3IgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorCQkgKgorCQkgKiAg TG9naWNhbCBjaG9pY2VzIGluY2x1ZGUgZm9ybWF0dGluZyB0aGUgZXhwb25lbnQgYXMgZGVjaW1h bCAoZS5nLiBiaW5hcnkKKwkJICogIDEwMDAwMCBhcyAxZSs1KSBvciBpbiBjdXJyZW50IHJhZGl4 IChlLmcuIGJpbmFyeSAxMDAwMDAgYXMgMWUrMTAxKS4KKwkJICogIFRoZSBEcmFnb240IGFsZ29y aXRobSAoaW4gdGhlIG9yaWdpbmFsIHBhcGVyKSBwcmludHMgdGhlIGV4cG9uZW50IHZhbHVlCisJ CSAqICBpbiB0aGUgdGFyZ2V0IHJhZGl4IEIuICBIb3dldmVyLCBmb3IgcmFkaXggdmFsdWVzIDE1 IGFuZCBhYm92ZSwgdGhlCisJCSAqICBleHBvbmVudCBzZXBhcmF0b3IgJ2UnIGlzIG5vIGxvbmdl ciBlYXNpbHkgcGFyc2VhYmxlLiAgQ29uc2lkZXIsIGZvcgorCQkgKiAgaW5zdGFuY2UsIHRoZSBu dW1iZXIgIjEuZmFlY2VlKzFjIi4KKwkJICovCisKKwkJZHVrX3NpemVfdCBsZW47CisJCWNoYXIg ZXhwdF9zaWduOworCisJCSpxKysgPSAnZSc7CisJCWlmIChleHB0ID49IDApIHsKKwkJCWV4cHRf c2lnbiA9ICcrJzsKKwkJfSBlbHNlIHsKKwkJCWV4cHRfc2lnbiA9ICctJzsKKwkJCWV4cHQgPSAt ZXhwdDsKKwkJfQorCQkqcSsrID0gKGR1a191aW50OF90KSBleHB0X3NpZ247CisJCWxlbiA9IGR1 a19fZHJhZ29uNF9mb3JtYXRfdWludDMyKHEsIChkdWtfdWludDMyX3QpIGV4cHQsIHJhZGl4KTsK KwkJcSArPSBsZW47CisJfQorCisJZHVrX3B1c2hfbHN0cmluZyh0aHIsIChjb25zdCBjaGFyICop IGJ1ZiwgKHNpemVfdCkgKHEgLSBidWYpKTsKK30KKworLyoKKyAqICBDb252ZXJzaW9uIGhlbHBl cnMKKyAqLworCitEVUtfTE9DQUwgdm9pZCBkdWtfX2RyYWdvbjRfZG91YmxlX3RvX2N0eChkdWtf X251bWNvbnZfc3RyaW5naWZ5X2N0eCAqbmNfY3R4LCBkdWtfZG91YmxlX3QgeCkgeworCWR1a19k b3VibGVfdW5pb24gdTsKKwlkdWtfdWludDMyX3QgdG1wOworCWR1a19zbWFsbF9pbnRfdCBleHB0 OworCisJLyoKKwkgKiAgICBzZWVlZWVlZSBlZWVlZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZgorCSAqICAgICAgIEEgICAgICAgIEIgICAg ICAgIEMgICAgICAgIEQgICAgICAgIEUgICAgICAgIEYgICAgICAgIEcgICAgICAgIEgKKwkgKgor CSAqICAgIHMgICAgICAgc2lnbiBiaXQKKwkgKiAgICBlZWUuLi4gIGV4cG9uZW50IGZpZWxkCisJ ICogICAgZmZmLi4uICBmcmFjdGlvbgorCSAqCisJICogICAgaWVlZSB2YWx1ZSA9IDEuZmZmZi4u LiAqIDJeKGUgLSAxMDIzKSAgKG5vcm1hbCkKKwkgKiAgICAgICAgICAgICAgID0gMC5mZmZmLi4u ICogMl4oLTEwMjIpICAgICAoZGVub3JtYWwpCisJICoKKwkgKiAgICBhbGdvcml0aG0gdiA9IGYg KiBiXmUKKwkgKi8KKworCURVS19EQkxVTklPTl9TRVRfRE9VQkxFKCZ1LCB4KTsKKworCW5jX2N0 eC0+Zi5uID0gMjsKKworCXRtcCA9IERVS19EQkxVTklPTl9HRVRfTE9XMzIoJnUpOworCW5jX2N0 eC0+Zi52WzBdID0gdG1wOworCXRtcCA9IERVS19EQkxVTklPTl9HRVRfSElHSDMyKCZ1KTsKKwlu Y19jdHgtPmYudlsxXSA9IHRtcCAmIDB4MDAwZmZmZmZVTDsKKwlleHB0ID0gKGR1a19zbWFsbF9p bnRfdCkgKCh0bXAgPj4gMjApICYgMHgwN2ZmVUwpOworCisJaWYgKGV4cHQgPT0gMCkgeworCQkv KiBkZW5vcm1hbCAqLworCQlleHB0ID0gRFVLX19JRUVFX0RPVUJMRV9FWFBfTUlOIC0gNTI7CisJ CWR1a19fYmlfbm9ybWFsaXplKCZuY19jdHgtPmYpOworCX0gZWxzZSB7CisJCS8qIG5vcm1hbDog aW1wbGljaXQgbGVhZGluZyAxLWJpdCAqLworCQluY19jdHgtPmYudlsxXSB8PSAweDAwMTAwMDAw VUw7CisJCWV4cHQgPSBleHB0IC0gRFVLX19JRUVFX0RPVUJMRV9FWFBfQklBUyAtIDUyOworCQlE VUtfQVNTRVJUKGR1a19fYmlfaXNfdmFsaWQoJm5jX2N0eC0+ZikpOyAgLyogdHJ1ZSwgYmVjYXVz ZSB2WzFdIGhhcyBhdCBsZWFzdCBvbmUgYml0IHNldCAqLworCX0KKworCURVS19BU1NFUlQoZHVr X19iaV9pc192YWxpZCgmbmNfY3R4LT5mKSk7CisKKwluY19jdHgtPmUgPSBleHB0OworfQorCitE VUtfTE9DQUwgdm9pZCBkdWtfX2RyYWdvbjRfY3R4X3RvX2RvdWJsZShkdWtfX251bWNvbnZfc3Ry aW5naWZ5X2N0eCAqbmNfY3R4LCBkdWtfZG91YmxlX3QgKngpIHsKKwlkdWtfZG91YmxlX3VuaW9u IHU7CisJZHVrX3NtYWxsX2ludF90IGV4cHQ7CisJZHVrX3NtYWxsX2ludF90IGk7CisJZHVrX3Nt YWxsX2ludF90IGJpdHN0YXJ0OworCWR1a19zbWFsbF9pbnRfdCBiaXRyb3VuZDsKKwlkdWtfc21h bGxfaW50X3QgYml0aWR4OworCWR1a19zbWFsbF9pbnRfdCBza2lwX3JvdW5kOworCWR1a191aW50 MzJfdCB0LCB2OworCisJRFVLX0FTU0VSVChuY19jdHgtPmNvdW50ID09IDUzICsgMSk7CisKKwkv KiBTb21ldGltZXMgdGhpcyBhc3NlcnQgaXMgbm90IHRydWUgcmlnaHQgbm93OyBpdCB3aWxsIGJl IHRydWUgYWZ0ZXIKKwkgKiByb3VuZGluZy4gIFNlZTogdGVzdC1idWctbnVtY29udi1tYW50aXNz YS1hc3NlcnQuanMuCisJICovCisJRFVLX0FTU0VSVF9ESVNBQkxFKG5jX2N0eC0+ZGlnaXRzWzBd ID09IDEpOyAgLyogemVybyBoYW5kbGVkIGJ5IGNhbGxlciAqLworCisJLyogU2hvdWxkIG5vdCBi ZSByZXF1aXJlZCBiZWNhdXNlIHRoZSBjb2RlIGJlbG93IGFsd2F5cyBzZXRzIGJvdGggaGlnaAor CSAqIGFuZCBsb3cgcGFydHMsIGJ1dCBhdCBsZWFzdCBnY2MtNC40LjUgZmFpbHMgdG8gZGVkdWNl IHRoaXMgY29ycmVjdGx5CisJICogKHBlcmhhcHMgYmVjYXVzZSB0aGUgbG93IHBhcnQgaXMgc2V0 IChzZWVtaW5nbHkpIGNvbmRpdGlvbmFsbHkgaW4gYQorCSAqIGxvb3ApLCBzbyB0aGlzIGlzIGhl cmUgdG8gYXZvaWQgdGhlIGJvZ3VzIHdhcm5pbmcuCisJICovCisJZHVrX21lbXplcm8oKHZvaWQg KikgJnUsIHNpemVvZih1KSk7CisKKwkvKgorCSAqICBGaWd1cmUgb3V0IGhvdyBnZW5lcmF0ZWQg ZGlnaXRzIG1hdGNoIHVwIHdpdGggdGhlIG1hbnRpc3NhLAorCSAqICBhbmQgdGhlbiBwZXJmb3Jt IHJvdW5kaW5nLiAgSWYgbWFudGlzc2Egb3ZlcmZsb3dzLCBuZWVkIHRvCisJICogIHJlY29tcHV0 ZSB0aGUgZXhwb25lbnQgKGl0IGlzIGJ1bXBlZCBhbmQgbWF5IG92ZXJmbG93IHRvCisJICogIGlu ZmluaXR5KS4KKwkgKgorCSAqICBGb3Igbm9ybWFsIG51bWJlcnMgdGhlIGxlYWRpbmcgJzEnIGlz IGhpZGRlbiBhbmQgaWdub3JlZCwKKwkgKiAgYW5kIHRoZSBsYXN0IGJpdCBpcyB1c2VkIGZvciBy b3VuZGluZzoKKwkgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZyBwdAor CSAqICAgICAgIDwtLS0tLS0tLTUyLS0tLS0tLT58CisJICogICAgIDEgeCB4IHggeCAuLi4geCB4 IHggeHx5ICA9PT4gIHggeCB4IHggLi4uIHggeCB4IHgKKwkgKgorCSAqICBGb3IgZGVub3JtYWxz LCB0aGUgbGVhZGluZyAnMScgaXMgaW5jbHVkZWQgaW4gdGhlIG51bWJlciwKKwkgKiAgYW5kIHRo ZSByb3VuZGluZyBwb2ludCBpcyBkaWZmZXJlbnQ6CisJICoKKwkgKiAgICAgICAgICAgICAgICAg ICAgICByb3VuZGluZyBwdAorCSAqICAgICA8LS01MiBvciBsZXNzLS0tPnwKKwkgKiAgICAgMSB4 IHggeCB4IC4uLiB4IHh8eCB4IHkgID09PiAgMCAwIC4uLiAxIHggeCAuLi4geCB4CisJICoKKwkg KiAgVGhlIGxhcmdlc3QgZGVub3JtYWxzIHdpbGwgaGF2ZSBhIG1hbnRpc3NhIGJlZ2lubmluZyB3 aXRoCisJICogIGEgJzEnICh0aGUgZXhwbGljaXQgbGVhZGluZyBiaXQpOyBzbWFsbGVyIGRlbm9y bWFscyB3aWxsCisJICogIGhhdmUgbGVhZGluZyB6ZXJvIGJpdHMuCisJICoKKwkgKiAgSWYgdGhl IGV4cG9uZW50IHdvdWxkIGJlY29tZSB0b28gaGlnaCwgdGhlIHJlc3VsdCBiZWNvbWVzCisJICog IEluZmluaXR5LiAgSWYgdGhlIGV4cG9uZW50IGlzIHNvIHNtYWxsIHRoYXQgdGhlIGVudGlyZQor CSAqICBtYW50aXNzYSBiZWNvbWVzIHplcm8sIHRoZSByZXN1bHQgYmVjb21lcyB6ZXJvLgorCSAq CisJICogIE5vdGU6IHRoZSBEcmFnb240ICdrJyBpcyBvZmYtYnktb25lIHdpdGggcmVzcGVjdCB0 byB0aGUgSUVFRQorCSAqICBleHBvbmVudC4gIEZvciBpbnN0YW5jZSwgaz09MCBpbmRpY2F0ZXMg dGhhdCB0aGUgbGVhZGluZyAnMScKKwkgKiAgZGlnaXQgaXMgYXQgdGhlIGZpcnN0IGJpbmFyeSBm cmFjdGlvbiBwb3NpdGlvbiAoMC4xeHh4Li4uKTsKKwkgKiAgdGhlIGNvcnJlc3BvbmRpbmcgSUVF RSBleHBvbmVudCB3b3VsZCBiZSAtMS4KKwkgKi8KKworCXNraXBfcm91bmQgPSAwOworCisgcmVj aGVja19leHA6CisKKwlleHB0ID0gbmNfY3R4LT5rIC0gMTsgICAvKiBJRUVFIGV4cCB3aXRob3V0 IGJpYXMgKi8KKwlpZiAoZXhwdCA+IDEwMjMpIHsKKwkJLyogSW5maW5pdHkgKi8KKwkJYml0c3Rh cnQgPSAtMjU1OyAgLyogbmVlZGVkIGZvciBpbmY6IGNhdXNlcyBtYW50aXNzYSB0byBiZWNvbWUg emVybywKKwkJICAgICAgICAgICAgICAgICAgICogYW5kIHJvdW5kaW5nIHRvIGJlIHNraXBwZWQu CisJCSAgICAgICAgICAgICAgICAgICAqLworCQlleHB0ID0gMjA0NzsKKwl9IGVsc2UgaWYgKGV4 cHQgPj0gLTEwMjIpIHsKKwkJLyogbm9ybWFsICovCisJCWJpdHN0YXJ0ID0gMTsgIC8qIHNraXAg bGVhZGluZyBkaWdpdCAqLworCQlleHB0ICs9IERVS19fSUVFRV9ET1VCTEVfRVhQX0JJQVM7CisJ CURVS19BU1NFUlQoZXhwdCA+PSAxICYmIGV4cHQgPD0gMjA0Nik7CisJfSBlbHNlIHsKKwkJLyog ZGVub3JtYWwgb3IgemVybyAqLworCQliaXRzdGFydCA9IDEwMjMgKyBleHB0OyAgLyogZXhwdD09 LTEwMjMgLT4gYml0c3RhcnQ9MCAobGVhZGluZyAxKTsKKwkJICAgICAgICAgICAgICAgICAgICAg ICAgICAqIGV4cHQ9PS0xMDI0IC0+IGJpdHN0YXJ0PS0xIChvbmUgbGVmdCBvZiBsZWFkaW5nIDEp LCBldGMKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQlleHB0ID0gMDsKKwl9CisJ Yml0cm91bmQgPSBiaXRzdGFydCArIDUyOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImllZWUg ZXhwdD0lbGQsIGJpdHN0YXJ0PSVsZCwgYml0cm91bmQ9JWxkIiwKKwkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgZXhwdCwgKGxvbmcpIGJpdHN0YXJ0LCAobG9uZykgYml0cm91bmQpKTsKKwor CWlmICghc2tpcF9yb3VuZCkgeworCQlpZiAoZHVrX19kcmFnb240X2ZpeGVkX2Zvcm1hdF9yb3Vu ZChuY19jdHgsIGJpdHJvdW5kKSkgeworCQkJLyogQ29ybmVyIGNhc2U6IHNlZSB0ZXN0LW51bWNv bnYtcGFyc2UtbWFudC1jYXJyeS5qcy4gIFdlIGNvdWxkCisJCQkgKiBqdXN0IGJ1bXAgdGhlIGV4 cG9uZW50IGFuZCB1cGRhdGUgYml0c3RhcnQsIGJ1dCBpdCdzIG1vcmUgcm9idXN0CisJCQkgKiB0 byByZWNvbXB1dGUgKGJ1dCBhdm9pZCByb3VuZGluZyB0d2ljZSkuCisJCQkgKi8KKwkJCURVS19E REQoRFVLX0RERFBSSU5UKCJyb3VuZGluZyBjYXVzZWQgZXhwb25lbnQgdG8gYmUgYnVtcGVkLCBy ZWNoZWNrIGV4cG9uZW50IikpOworCQkJc2tpcF9yb3VuZCA9IDE7CisJCQlnb3RvIHJlY2hlY2tf ZXhwOworCQl9CisJfQorCisJLyoKKwkgKiAgQ3JlYXRlIG1hbnRpc3NhCisJICovCisKKwl0ID0g MDsKKwlmb3IgKGkgPSAwOyBpIDwgNTI7IGkrKykgeworCQliaXRpZHggPSBiaXRzdGFydCArIDUy IC0gMSAtIGk7CisJCWlmIChiaXRpZHggPj0gbmNfY3R4LT5jb3VudCkgeworCQkJdiA9IDA7CisJ CX0gZWxzZSBpZiAoYml0aWR4IDwgMCkgeworCQkJdiA9IDA7CisJCX0gZWxzZSB7CisJCQl2ID0g bmNfY3R4LT5kaWdpdHNbYml0aWR4XTsKKwkJfQorCQlEVUtfQVNTRVJUKHYgPT0gMCB8fCB2ID09 IDEpOworCQl0ICs9IHYgPDwgKGkgJSAzMik7CisJCWlmIChpID09IDMxKSB7CisJCQkvKiBsb3cg MzIgYml0cyBpcyBjb21wbGV0ZSAqLworCQkJRFVLX0RCTFVOSU9OX1NFVF9MT1czMigmdSwgdCk7 CisJCQl0ID0gMDsKKwkJfQorCX0KKwkvKiB0IGhhcyBoaWdoIG1hbnRpc3NhICovCisKKwlEVUtf REREKERVS19ERERQUklOVCgibWFudGlzc2EgaXMgY29tcGxldGU6ICUwOGx4ICUwOGx4IiwKKwkg ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgdCwKKwkgICAgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZykgRFVLX0RCTFVOSU9OX0dFVF9MT1czMigmdSkpKTsKKworCURV S19BU1NFUlQoZXhwdCA+PSAwICYmIGV4cHQgPD0gMHg3ZmZMKTsKKwl0ICs9ICgoZHVrX3VpbnQz Ml90KSBleHB0KSA8PCAyMDsKKyNpZiAwICAvKiBjYWxsZXIgaGFuZGxlcyBzaWduIGNoYW5nZSAq LworCWlmIChuZWdhdGl2ZSkgeworCQl0IHw9IDB4ODAwMDAwMDBVOworCX0KKyNlbmRpZgorCURV S19EQkxVTklPTl9TRVRfSElHSDMyKCZ1LCB0KTsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJu dW1iZXIgaXMgY29tcGxldGU6ICUwOGx4ICUwOGx4IiwKKwkgICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgRFVLX0RCTFVOSU9OX0dFVF9ISUdIMzIoJnUpLAorCSAgICAgICAgICAg ICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBEVUtfREJMVU5JT05fR0VUX0xPVzMyKCZ1KSkpOwor CisJKnggPSBEVUtfREJMVU5JT05fR0VUX0RPVUJMRSgmdSk7Cit9CisKKy8qCisgKiAgRXhwb3Nl ZCBudW1iZXItdG8tc3RyaW5nIEFQSQorICoKKyAqICBJbnB1dDogWyBudW1iZXIgXQorICogIE91 dHB1dDogWyBzdHJpbmcgXQorICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19udW1jb252X3N0 cmluZ2lmeShkdWtfaHRocmVhZCAqdGhyLCBkdWtfc21hbGxfaW50X3QgcmFkaXgsIGR1a19zbWFs bF9pbnRfdCBkaWdpdHMsIGR1a19zbWFsbF91aW50X3QgZmxhZ3MpIHsKKwlkdWtfZG91YmxlX3Qg eDsKKwlkdWtfc21hbGxfaW50X3QgYzsKKwlkdWtfc21hbGxfaW50X3QgbmVnOworCWR1a191aW50 MzJfdCB1dmFsOworCWR1a19fbnVtY29udl9zdHJpbmdpZnlfY3R4IG5jX2N0eF9hbGxvYzsgIC8q IGxhcmdlIGNvbnRleHQ7IGFyb3VuZCAya0Igbm93ICovCisJZHVrX19udW1jb252X3N0cmluZ2lm eV9jdHggKm5jX2N0eCA9ICZuY19jdHhfYWxsb2M7CisKKwl4ID0gKGR1a19kb3VibGVfdCkgZHVr X3JlcXVpcmVfbnVtYmVyKHRociwgLTEpOworCWR1a19wb3AodGhyKTsKKworCS8qCisJICogIEhh bmRsZSBzcGVjaWFsIGNhc2VzIChOYU4sIGluZmluaXR5LCB6ZXJvKS4KKwkgKi8KKworCWMgPSAo ZHVrX3NtYWxsX2ludF90KSBEVUtfRlBDTEFTU0lGWSh4KTsKKwlpZiAoRFVLX1NJR05CSVQoKGRv dWJsZSkgeCkpIHsKKwkJeCA9IC14OworCQluZWcgPSAxOworCX0gZWxzZSB7CisJCW5lZyA9IDA7 CisJfQorCisJLyogTmFOIHNpZ24gYml0IGlzIHBsYXRmb3JtIHNwZWNpZmljIHdpdGggdW5wYWNr ZWQsIHVuLW5vcm1hbGl6ZWQgTmFOcyAqLworCURVS19BU1NFUlQoYyA9PSBEVUtfRlBfTkFOIHx8 IERVS19TSUdOQklUKChkb3VibGUpIHgpID09IDApOworCisJaWYgKGMgPT0gRFVLX0ZQX05BTikg eworCQlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIERVS19TVFJJRFhfTkFOKTsKKwkJcmV0 dXJuOworCX0gZWxzZSBpZiAoYyA9PSBEVUtfRlBfSU5GSU5JVEUpIHsKKwkJaWYgKG5lZykgewor CQkJLyogLUluZmluaXR5ICovCisJCQlkdWtfcHVzaF9oc3RyaW5nX3N0cmlkeCh0aHIsIERVS19T VFJJRFhfTUlOVVNfSU5GSU5JVFkpOworCQl9IGVsc2UgeworCQkJLyogSW5maW5pdHkgKi8KKwkJ CWR1a19wdXNoX2hzdHJpbmdfc3RyaWR4KHRociwgRFVLX1NUUklEWF9JTkZJTklUWSk7CisJCX0K KwkJcmV0dXJuOworCX0gZWxzZSBpZiAoYyA9PSBEVUtfRlBfWkVSTykgeworCQkvKiBXZSBjYW4n dCBzaG9ydGN1dCB6ZXJvIGhlcmUgaWYgaXQgZ29lcyB0aHJvdWdoIHNwZWNpYWwgZm9ybWF0dGlu ZworCQkgKiAoc3VjaCBhcyBmb3JjZWQgZXhwb25lbnRpYWwgbm90YXRpb24pLgorCQkgKi8KKwkJ OworCX0KKworCS8qCisJICogIEhhbmRsZSBpbnRlZ2VycyBpbiAzMi1iaXQgcmFuZ2UgKHRoYXQg aXMsIFstKDIqKjMyLTEpLDIqKjMyLTFdKQorCSAqICBzcGVjaWFsbHksIGFzIHRoZXkncmUgdmVy eSBsaWtlbHkgZm9yIGVtYmVkZGVkIHByb2dyYW1zLiAgVGhpcworCSAqICBpcyBub3cgZG9uZSBm b3IgYWxsIHJhZGl4IHZhbHVlcy4gIFdlIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gdXNlCisJICog IHRoZSBmYXN0IHBhdGggd2hlbiBzcGVjaWFsIGZvcm1hdHRpbmcgKGUuZy4gZm9yY2VkIGV4cG9u ZW50aWFsKQorCSAqICBpcyBpbiBmb3JjZS4KKwkgKgorCSAqICBYWFg6IGNvdWxkIHNhdmUgc3Bh Y2UgYnkgc3VwcG9ydGluZyByYWRpeCAxMCBvbmx5IGFuZCB1c2luZworCSAqICBzcHJpbnRmICIl bHUiIGZvciB0aGUgZmFzdCBwYXRoIGFuZCBmb3IgZXhwb25lbnQgZm9ybWF0dGluZy4KKwkgKi8K KworCXV2YWwgPSBkdWtfZG91YmxlX3RvX3VpbnQzMl90KHgpOworCWlmICgoKGRvdWJsZSkgdXZh bCkgPT0geCAmJiAgLyogaW50ZWdlciBudW1iZXIgaW4gcmFuZ2UgKi8KKwkgICAgZmxhZ3MgPT0g MCkgeyAgICAgICAgICAgIC8qIG5vIHNwZWNpYWwgZm9ybWF0dGluZyAqLworCQkvKiB1c2UgYmln aW50IGFyZWEgYXMgYSB0ZW1wICovCisJCWR1a191aW50OF90ICpidWYgPSAoZHVrX3VpbnQ4X3Qg KikgKCZuY19jdHgtPmYpOworCQlkdWtfdWludDhfdCAqcCA9IGJ1ZjsKKworCQlEVUtfQVNTRVJU KERVS19fTlVNQ09OVl9DVFhfQklHSU5UU19TSVpFID49IDMyICsgMSk7ICAvKiBtYXggc2l6ZTog cmFkaXg9MiArIHNpZ24gKi8KKwkJaWYgKG5lZyAmJiB1dmFsICE9IDApIHsKKwkJCS8qIG5vIG5l Z2F0aXZlIHNpZ24gZm9yIHplcm8gKi8KKwkJCSpwKysgPSAoZHVrX3VpbnQ4X3QpICctJzsKKwkJ fQorCQlwICs9IGR1a19fZHJhZ29uNF9mb3JtYXRfdWludDMyKHAsIHV2YWwsIHJhZGl4KTsKKwkJ ZHVrX3B1c2hfbHN0cmluZyh0aHIsIChjb25zdCBjaGFyICopIGJ1ZiwgKGR1a19zaXplX3QpIChw IC0gYnVmKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqICBEcmFnb240IHNldHVwLgorCSAq CisJICogIENvbnZlcnQgZG91YmxlIGZyb20gSUVFRSByZXByZXNlbnRhdGlvbiBmb3IgY29udmVy c2lvbjsKKwkgKiAgbm9ybWFsIGZpbml0ZSB2YWx1ZXMgaGF2ZSBhbiBpbXBsaWNpdCBsZWFkaW5n IDEtYml0LiAgVGhlCisJICogIHNsb3cgcGF0aCBhbGdvcml0aG0gZG9lc24ndCBoYW5kbGUgemVy bywgc28gemVybyBpcyBzcGVjaWFsCisJICogIGNhc2VkIGhlcmUgYnV0IHN0aWxsIGNyZWF0ZXMg YSB2YWxpZCBuY19jdHgsIGFuZCBnb2VzCisJICogIHRocm91Z2ggbm9ybWFsIGZvcm1hdHRpbmcg aW4gY2FzZSBzcGVjaWFsIGZvcm1hdHRpbmcgaGFzCisJICogIGJlZW4gcmVxdWVzdGVkIChlLmcu IGZvcmNlZCBleHBvbmVudGlhbCBmb3JtYXQ6IDAgLT4gIjBlKzAiKS4KKwkgKi8KKworCS8qIFdv dWxkIGJlIG5pY2UgdG8gYnVsayBjbGVhciB0aGUgYWxsb2NhdGlvbiwgYnV0IHRoZSBjb250ZXh0 CisJICogaXMgMS0yIGtpbG9ieXRlcyBhbmQgbm90aGluZyBzaG91bGQgcmVseSBvbiBpdCBiZWlu ZyB6ZXJvZWQuCisJICovCisjaWYgMAorCWR1a19tZW16ZXJvKCh2b2lkICopIG5jX2N0eCwgc2l6 ZW9mKCpuY19jdHgpKTsgIC8qIHNsb3cgaW5pdCwgZG8gb25seSBmb3Igc2xvdyBwYXRoIGNhc2Vz ICovCisjZW5kaWYKKworCW5jX2N0eC0+aXNfczJuID0gMDsKKwluY19jdHgtPmIgPSAyOworCW5j X2N0eC0+QiA9IHJhZGl4OworCW5jX2N0eC0+YWJzX3BvcyA9IDA7CisJaWYgKGZsYWdzICYgRFVL X04yU19GTEFHX0ZJWEVEX0ZPUk1BVCkgeworCQluY19jdHgtPmlzX2ZpeGVkID0gMTsKKwkJaWYg KGZsYWdzICYgRFVLX04yU19GTEFHX0ZSQUNUSU9OX0RJR0lUUykgeworCQkJLyogYWJzb2x1dGUg cmVxX2RpZ2l0czsgZS5nLiBkaWdpdHMgPSAxIC0+IGxhc3QgZGlnaXQgaXMgMCwKKwkJCSAqIGJ1 dCBhZGQgYW4gZXh0cmEgZGlnaXQgZm9yIHJvdW5kaW5nLgorCQkJICovCisJCQluY19jdHgtPmFi c19wb3MgPSAxOworCQkJbmNfY3R4LT5yZXFfZGlnaXRzID0gKC1kaWdpdHMgKyAxKSAtIDE7CisJ CX0gZWxzZSB7CisJCQluY19jdHgtPnJlcV9kaWdpdHMgPSBkaWdpdHMgKyAxOworCQl9CisJfSBl bHNlIHsKKwkJbmNfY3R4LT5pc19maXhlZCA9IDA7CisJCW5jX2N0eC0+cmVxX2RpZ2l0cyA9IDA7 CisJfQorCisJaWYgKGMgPT0gRFVLX0ZQX1pFUk8pIHsKKwkJLyogWmVybyBzcGVjaWFsIGNhc2U6 IGZha2UgcmVxdWVzdGVkIG51bWJlciBvZiB6ZXJvIGRpZ2l0czsgZW5zdXJlCisJCSAqIG5vIHNp Z24gYml0IGlzIHByaW50ZWQuICBSZWxhdGl2ZSBhbmQgYWJzb2x1dGUgZml4ZWQgZm9ybWF0CisJ CSAqIHJlcXVpcmUgc2VwYXJhdGUgaGFuZGxpbmcuCisJCSAqLworCQlkdWtfc21hbGxfaW50X3Qg Y291bnQ7CisJCWlmIChuY19jdHgtPmlzX2ZpeGVkKSB7CisJCQlpZiAobmNfY3R4LT5hYnNfcG9z KSB7CisJCQkJY291bnQgPSBkaWdpdHMgKyAyOyAgLyogbGVhZCB6ZXJvICsgJ2RpZ2l0cycgZnJh Y3Rpb25zICsgMSBmb3Igcm91bmRpbmcgKi8KKwkJCX0gZWxzZSB7CisJCQkJY291bnQgPSBkaWdp dHMgKyAxOyAgLyogKyAxIGZvciByb3VuZGluZyAqLworCQkJfQorCQl9IGVsc2UgeworCQkJY291 bnQgPSAxOworCQl9CisJCURVS19EREQoRFVLX0RERFBSSU5UKCJjb3VudD0lbGQiLCAobG9uZykg Y291bnQpKTsKKwkJRFVLX0FTU0VSVChjb3VudCA+PSAxKTsKKwkJZHVrX21lbXplcm8oKHZvaWQg KikgbmNfY3R4LT5kaWdpdHMsIChzaXplX3QpIGNvdW50KTsKKwkJbmNfY3R4LT5jb3VudCA9IGNv dW50OworCQluY19jdHgtPmsgPSAxOyAgLyogMC4wMDAuLi4gKi8KKwkJbmVnID0gMDsKKwkJZ290 byB6ZXJvX3NraXA7CisJfQorCisJZHVrX19kcmFnb240X2RvdWJsZV90b19jdHgobmNfY3R4LCB4 KTsgICAvKiAtPiBzZXRzICdmJyBhbmQgJ2UnICovCisJRFVLX19CSV9QUklOVCgiZiIsICZuY19j dHgtPmYpOworCURVS19EREQoRFVLX0RERFBSSU5UKCJlPSVsZCIsIChsb25nKSBuY19jdHgtPmUp KTsKKworCS8qCisJICogIERyYWdvbjQgc2xvdyBwYXRoIGRpZ2l0IGdlbmVyYXRpb24uCisJICov CisKKwlkdWtfX2RyYWdvbjRfcHJlcGFyZShuY19jdHgpOyAgLyogc2V0dXAgbWFueSB2YXJpYWJs ZXMgaW4gbmNfY3R4ICovCisKKwlEVUtfREREKERVS19ERERQUklOVCgiYWZ0ZXIgcHJlcGFyZToi KSk7CisJRFVLX19CSV9QUklOVCgiciIsICZuY19jdHgtPnIpOworCURVS19fQklfUFJJTlQoInMi LCAmbmNfY3R4LT5zKTsKKwlEVUtfX0JJX1BSSU5UKCJtcCIsICZuY19jdHgtPm1wKTsKKwlEVUtf X0JJX1BSSU5UKCJtbSIsICZuY19jdHgtPm1tKTsKKworCWR1a19fZHJhZ29uNF9zY2FsZShuY19j dHgpOworCisJRFVLX0RERChEVUtfREREUFJJTlQoImFmdGVyIHNjYWxlOyBrPSVsZCIsIChsb25n KSBuY19jdHgtPmspKTsKKwlEVUtfX0JJX1BSSU5UKCJyIiwgJm5jX2N0eC0+cik7CisJRFVLX19C SV9QUklOVCgicyIsICZuY19jdHgtPnMpOworCURVS19fQklfUFJJTlQoIm1wIiwgJm5jX2N0eC0+ bXApOworCURVS19fQklfUFJJTlQoIm1tIiwgJm5jX2N0eC0+bW0pOworCisJZHVrX19kcmFnb240 X2dlbmVyYXRlKG5jX2N0eCk7CisKKwkvKgorCSAqICBDb252ZXJ0IGFuZCBwdXNoIGZpbmFsIHN0 cmluZy4KKwkgKi8KKworIHplcm9fc2tpcDoKKworCWlmIChmbGFncyAmIERVS19OMlNfRkxBR19G SVhFRF9GT1JNQVQpIHsKKwkJLyogUGVyZm9ybSBmaXhlZC1mb3JtYXQgcm91bmRpbmcuICovCisJ CWR1a19zbWFsbF9pbnRfdCByb3VuZHBvczsKKwkJaWYgKGZsYWdzICYgRFVLX04yU19GTEFHX0ZS QUNUSU9OX0RJR0lUUykgeworCQkJLyogJ3JvdW5kcG9zJyBpcyByZWxhdGl2ZSB0byBuY19jdHgt PmsgYW5kIGluY3JlYXNlcyB0byB0aGUgcmlnaHQKKwkJCSAqIChvcHBvc2l0ZSBvZiBob3cgJ2sn IGNoYW5nZXMpLgorCQkJICovCisJCQlyb3VuZHBvcyA9IC1kaWdpdHM7ICAvKiBhYnNvbHV0ZSBw b3NpdGlvbiBmb3IgZGlnaXQgY29uc2lkZXJlZCBmb3Igcm91bmRpbmcgKi8KKwkJCXJvdW5kcG9z ID0gbmNfY3R4LT5rIC0gcm91bmRwb3M7CisJCX0gZWxzZSB7CisJCQlyb3VuZHBvcyA9IGRpZ2l0 czsKKwkJfQorCQlEVUtfREREKERVS19ERERQUklOVCgicm91bmRpbmc6IGs9JWxkLCBjb3VudD0l bGQsIGRpZ2l0cz0lbGQsIHJvdW5kcG9zPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChs b25nKSBuY19jdHgtPmssIChsb25nKSBuY19jdHgtPmNvdW50LCAobG9uZykgZGlnaXRzLCAobG9u Zykgcm91bmRwb3MpKTsKKwkJKHZvaWQpIGR1a19fZHJhZ29uNF9maXhlZF9mb3JtYXRfcm91bmQo bmNfY3R4LCByb3VuZHBvcyk7CisKKwkJLyogTm90ZTogJ2NvdW50JyBpcyBjdXJyZW50bHkgbm90 IGFkanVzdGVkIGJ5IHJvdW5kaW5nIChpLmUuIHRoZQorCQkgKiBkaWdpdHMgYXJlIG5vdCAiY2hv cHBlZCBvZmYiLiAgVGhhdCBzaG91bGRuJ3QgbWF0dGVyIGJlY2F1c2UKKwkJICogdGhlIGRpZ2l0 IHBvc2l0aW9uIChhYnNvbHV0ZSBvciByZWxhdGl2ZSkgaXMgcGFzc2VkIG9uIHRvIHRoZQorCQkg KiBjb252ZXJ0LWFuZC1wdXNoIGZ1bmN0aW9uLgorCQkgKi8KKwl9CisKKwlkdWtfX2RyYWdvbjRf Y29udmVydF9hbmRfcHVzaChuY19jdHgsIHRociwgcmFkaXgsIGRpZ2l0cywgZmxhZ3MsIG5lZyk7 Cit9CisKKy8qCisgKiAgRXhwb3NlZCBzdHJpbmctdG8tbnVtYmVyIEFQSQorICoKKyAqICBJbnB1 dDogWyBzdHJpbmcgXQorICogIE91dHB1dDogWyBudW1iZXIgXQorICoKKyAqICBJZiBudW1iZXIg cGFyc2luZyBmYWlscywgYSBOYU4gaXMgcHVzaGVkIGFzIHRoZSByZXN1bHQuICBJZiBudW1iZXIg cGFyc2luZworICogIGZhaWxzIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvciwgYW4gSW50ZXJuYWxF cnJvciBpcyB0aHJvd24uCisgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX251bWNvbnZfcGFy c2UoZHVrX2h0aHJlYWQgKnRociwgZHVrX3NtYWxsX2ludF90IHJhZGl4LCBkdWtfc21hbGxfdWlu dF90IGZsYWdzKSB7CisJZHVrX19udW1jb252X3N0cmluZ2lmeV9jdHggbmNfY3R4X2FsbG9jOyAg LyogbGFyZ2UgY29udGV4dDsgYXJvdW5kIDJrQiBub3cgKi8KKwlkdWtfX251bWNvbnZfc3RyaW5n aWZ5X2N0eCAqbmNfY3R4ID0gJm5jX2N0eF9hbGxvYzsKKwlkdWtfZG91YmxlX3QgcmVzOworCWR1 a19oc3RyaW5nICpoX3N0cjsKKwlkdWtfaW50X3QgZXhwdDsKKwlkdWtfYm9vbF90IGV4cHRfbmVn OworCWR1a19zbWFsbF9pbnRfdCBleHB0X2FkajsKKwlkdWtfc21hbGxfaW50X3QgbmVnOworCWR1 a19zbWFsbF9pbnRfdCBkaWc7CisJZHVrX3NtYWxsX2ludF90IGRpZ193aG9sZTsKKwlkdWtfc21h bGxfaW50X3QgZGlnX2x6ZXJvOworCWR1a19zbWFsbF9pbnRfdCBkaWdfZnJhYzsKKwlkdWtfc21h bGxfaW50X3QgZGlnX2V4cHQ7CisJZHVrX3NtYWxsX2ludF90IGRpZ19wcmVjOworCWNvbnN0IGR1 a19fZXhwX2xpbWl0cyAqZXhwbGltOworCWNvbnN0IGR1a191aW50OF90ICpwOworCWR1a19zbWFs bF9pbnRfdCBjaDsKKworCURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZSBudW1iZXI6ICUhVCwg cmFkaXg9JWxkLCBmbGFncz0weCUwOGx4IiwKKwkgICAgICAgICAgICAgICAgICAgICAoZHVrX3R2 YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25n KSByYWRpeCwgKHVuc2lnbmVkIGxvbmcpIGZsYWdzKSk7CisKKwlEVUtfQVNTRVJUKHJhZGl4ID49 IDIgJiYgcmFkaXggPD0gMzYpOworCURVS19BU1NFUlQocmFkaXggLSAyIDwgKGR1a19zbWFsbF9p bnRfdCkgc2l6ZW9mKGR1a19fc3RyMm51bV9kaWdpdHNfZm9yX3JhZGl4KSk7CisKKwkvKgorCSAq ICBQcmVsaW1pbmFyaWVzOiB0cmltLCBzaWduLCBJbmZpbml0eSBjaGVjaworCSAqCisJICogIFdl IHJlbHkgb24gdGhlIGludGVybmVkIHN0cmluZyBoYXZpbmcgYSBOVUwgdGVybWluYXRvciwgd2hp Y2ggd2lsbAorCSAqICBjYXVzZSBhIHBhcnNlIGZhaWx1cmUgd2hlcmV2ZXIgaXQgaXMgZW5jb3Vu dGVyZWQuICBBcyBhIHJlc3VsdCwgd2UKKwkgKiAgZG9uJ3QgbmVlZCBzZXBhcmF0ZSBwb2ludGVy IGNoZWNrcy4KKwkgKgorCSAqICBUaGVyZSBpcyBubyBzcGVjaWFsIHBhcnNpbmcgZm9yICdOYU4n IGluIHRoZSBzcGVjaWZpY2F0aW9uIGFsdGhvdWdoCisJICogICdJbmZpbml0eScgKHdpdGggYW4g b3B0aW9uYWwgc2lnbikgaXMgYWxsb3dlZCBpbiBzb21lIGNvbnRleHRzLgorCSAqICBTb21lIGNv bnRleHRzIGFsbG93IHBsdXMvbWludXMgc2lnbiwgd2hpbGUgb3RoZXJzIG9ubHkgYWxsb3cgdGhl CisJICogIG1pbnVzIHNpZ24gKGxpa2UgSlNPTi5wYXJzZSgpKS4KKwkgKgorCSAqICBBdXRvbWF0 aWMgaGV4IG51bWJlciBkZXRlY3Rpb24gKGxlYWRpbmcgJzB4JyBvciAnMFgnKSBhbmQgb2N0YWwK KwkgKiAgbnVtYmVyIGRldGVjdGlvbiAobGVhZGluZyAnMCcgZm9sbG93ZWQgYnkgYXQgbGVhc3Qg b25lIG9jdGFsIGRpZ2l0KQorCSAqICBpcyBkb25lIGhlcmUgdG9vLgorCSAqCisJICogIFN5bWJv bHMgYXJlIG5vdCBleHBsaWNpdGx5IHJlamVjdGVkIGhlcmUgKHRoYXQncyB1cCB0byB0aGUgY2Fs bGVyKS4KKwkgKiAgSWYgYSBzeW1ib2wgd2VyZSBwYXNzZWQgaGVyZSwgaXQgc2hvdWxkIHVsdGlt YXRlbHkgc2FmZWx5IGZhaWwKKwkgKiAgcGFyc2luZyBkdWUgdG8gYSBzeW50YXggZXJyb3IuCisJ ICovCisKKwlpZiAoZmxhZ3MgJiBEVUtfUzJOX0ZMQUdfVFJJTV9XSElURSkgeworCQkvKiBMZWFk aW5nIC8gdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBzb21ldGltZXMgYWNjZXB0ZWQgYW5kCisJCSAq IHNvbWV0aW1lcyBub3QuICBBZnRlciB3aGl0ZSBzcGFjZSB0cmltbWluZywgYWxsIHZhbGlkIGlu cHV0CisJCSAqIGNoYXJhY3RlcnMgYXJlIHB1cmUgQVNDSUkuCisJCSAqLworCQlkdWtfdHJpbSh0 aHIsIC0xKTsKKwl9CisJaF9zdHIgPSBkdWtfcmVxdWlyZV9oc3RyaW5nKHRociwgLTEpOworCURV S19BU1NFUlQoaF9zdHIgIT0gTlVMTCk7CisJcCA9IChjb25zdCBkdWtfdWludDhfdCAqKSBEVUtf SFNUUklOR19HRVRfREFUQShoX3N0cik7CisKKwluZWcgPSAwOworCWNoID0gKnA7CisJaWYgKGNo ID09IChkdWtfc21hbGxfaW50X3QpICcrJykgeworCQlpZiAoKGZsYWdzICYgRFVLX1MyTl9GTEFH X0FMTE9XX1BMVVMpID09IDApIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZSBmYWls ZWQ6IGxlYWRpbmcgcGx1cyBzaWduIG5vdCBhbGxvd2VkIikpOworCQkJZ290byBwYXJzZV9mYWls OworCQl9CisJCXArKzsKKwl9IGVsc2UgaWYgKGNoID09IChkdWtfc21hbGxfaW50X3QpICctJykg eworCQlpZiAoKGZsYWdzICYgRFVLX1MyTl9GTEFHX0FMTE9XX01JTlVTKSA9PSAwKSB7CisJCQlE VUtfREREKERVS19ERERQUklOVCgicGFyc2UgZmFpbGVkOiBsZWFkaW5nIG1pbnVzIHNpZ24gbm90 IGFsbG93ZWQiKSk7CisJCQlnb3RvIHBhcnNlX2ZhaWw7CisJCX0KKwkJcCsrOworCQluZWcgPSAx OworCX0KKworCWlmICgoZmxhZ3MgJiBEVUtfUzJOX0ZMQUdfQUxMT1dfSU5GKSAmJiBEVUtfU1RS TkNNUCgoY29uc3QgY2hhciAqKSBwLCAiSW5maW5pdHkiLCA4KSA9PSAwKSB7CisJCS8qIERvbid0 IGNoZWNrIGZvciBJbmZpbml0eSB1bmxlc3MgdGhlIGNvbnRleHQgYWxsb3dzIGl0LgorCQkgKiAn SW5maW5pdHknIGlzIGEgdmFsaWQgaW50ZWdlciBsaXRlcmFsIGluIGUuZy4gYmFzZS0zNjoKKwkJ ICoKKwkJICogICBwYXJzZUludCgnSW5maW5pdHknLCAzNikKKwkJICogICAxNDYxNTU5MjcwNjc4 CisJCSAqLworCisJCWlmICgoZmxhZ3MgJiBEVUtfUzJOX0ZMQUdfQUxMT1dfR0FSQkFHRSkgPT0g MCAmJiBwWzhdICE9IERVS19BU0NfTlVMKSB7CisJCQlEVUtfREREKERVS19ERERQUklOVCgicGFy c2UgZmFpbGVkOiB0cmFpbGluZyBnYXJiYWdlIGFmdGVyIG1hdGNoaW5nICdJbmZpbml0eScgbm90 IGFsbG93ZWQiKSk7CisJCQlnb3RvIHBhcnNlX2ZhaWw7CisJCX0gZWxzZSB7CisJCQlyZXMgPSBE VUtfRE9VQkxFX0lORklOSVRZOworCQkJZ290byBuZWdjaGVja19hbmRfcmV0OworCQl9CisJfQor CWNoID0gKnA7CisJaWYgKGNoID09IChkdWtfc21hbGxfaW50X3QpICcwJykgeworCQlkdWtfc21h bGxfaW50X3QgZGV0ZWN0X3JhZGl4ID0gMDsKKwkJY2ggPSBEVUtfTE9XRVJDQVNFX0NIQVJfQVND SUkocFsxXSk7ICAvKiAneCcgb3IgJ1gnIC0+ICd4JyAqLworCQlpZiAoKGZsYWdzICYgRFVLX1My Tl9GTEFHX0FMTE9XX0FVVE9fSEVYX0lOVCkgJiYgY2ggPT0gRFVLX0FTQ19MQ19YKSB7CisJCQlE VUtfREREKERVS19ERERQUklOVCgiZGV0ZWN0ZWQgMHgvMFggaGV4IHByZWZpeCwgY2hhbmdpbmcg cmFkaXggYW5kIHByZXZlbnRpbmcgZnJhY3Rpb25zIGFuZCBleHBvbmVudCIpKTsKKwkJCWRldGVj dF9yYWRpeCA9IDE2OworI2lmIDAKKwkJfSBlbHNlIGlmICgoZmxhZ3MgJiBEVUtfUzJOX0ZMQUdf QUxMT1dfQVVUT19MRUdBQ1lfT0NUX0lOVCkgJiYKKwkJICAgICAgICAgICAoY2ggPj0gKGR1a19z bWFsbF9pbnRfdCkgJzAnICYmIGNoIDw9IChkdWtfc21hbGxfaW50X3QpICc5JykpIHsKKwkJCURV S19EREQoRFVLX0RERFBSSU5UKCJkZXRlY3RlZCAwbiBvY3QgcHJlZml4LCBjaGFuZ2luZyByYWRp eCBhbmQgcHJldmVudGluZyBmcmFjdGlvbnMgYW5kIGV4cG9uZW50IikpOworCQkJZGV0ZWN0X3Jh ZGl4ID0gODsKKworCQkJLyogTk9URTogaWYgdGhpcyBsZWdhY3kgb2N0YWwgY2FzZSBpcyBhZGRl ZCBiYWNrLCBpdCBoYXMKKwkJCSAqIGRpZmZlcmVudCBmbGFncyBhbmQgJ3AnIGFkdmFuY2Ugc28g dGhpcyBuZWVkcyB0byBiZQorCQkJICogcmV3b3JrZWQuCisJCQkgKi8KKwkJCWZsYWdzIHw9IERV S19TMk5fRkxBR19BTExPV19FTVBUWV9BU19aRVJPOyAgLyogaW50ZXJwcmV0IGUuZy4gJzA5JyBh cyAnMCcsIG5vdCBOYU4gKi8KKwkJCXAgKz0gMTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKChmbGFn cyAmIERVS19TMk5fRkxBR19BTExPV19BVVRPX09DVF9JTlQpICYmIGNoID09IERVS19BU0NfTENf TykgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImRldGVjdGVkIDBvIG9jdCBwcmVmaXgsIGNo YW5naW5nIHJhZGl4IGFuZCBwcmV2ZW50aW5nIGZyYWN0aW9ucyBhbmQgZXhwb25lbnQiKSk7CisJ CQlkZXRlY3RfcmFkaXggPSA4OworCQl9IGVsc2UgaWYgKChmbGFncyAmIERVS19TMk5fRkxBR19B TExPV19BVVRPX0JJTl9JTlQpICYmIGNoID09IERVS19BU0NfTENfQikgeworCQkJRFVLX0RERChE VUtfREREUFJJTlQoImRldGVjdGVkIDBiIGJpbiBwcmVmaXgsIGNoYW5naW5nIHJhZGl4IGFuZCBw cmV2ZW50aW5nIGZyYWN0aW9ucyBhbmQgZXhwb25lbnQiKSk7CisJCQlkZXRlY3RfcmFkaXggPSAy OworCQl9CisJCWlmIChkZXRlY3RfcmFkaXggPiAwKSB7CisJCQlyYWRpeCA9IGRldGVjdF9yYWRp eDsKKwkJCS8qIENsZWFyIGVtcHR5IGFzIHplcm8gZmxhZzogaW50ZXJwcmV0IGUuZy4gJzB4JyBh bmQgJzB4ZycgYXMgYSBOYU4gKD0gcGFyc2UgZXJyb3IpICovCisJCQlmbGFncyAmPSB+KERVS19T Mk5fRkxBR19BTExPV19FWFAgfCBEVUtfUzJOX0ZMQUdfQUxMT1dfRU1QVFlfRlJBQyB8CisJCQkg ICAgICAgICAgIERVS19TMk5fRkxBR19BTExPV19GUkFDIHwgRFVLX1MyTl9GTEFHX0FMTE9XX05B S0VEX0ZSQUMgfAorCQkJICAgICAgICAgICBEVUtfUzJOX0ZMQUdfQUxMT1dfRU1QVFlfQVNfWkVS Tyk7CisJCQlmbGFncyB8PSBEVUtfUzJOX0ZMQUdfQUxMT1dfTEVBRElOR19aRVJPOyAgLyogYWxs b3cgZS5nLiAnMHgwMDA5JyBhbmQgJzBiMDAwMTAwMDEnICovCisJCQlwICs9IDI7CisJCX0KKwl9 CisKKwkvKgorCSAqICBTY2FuIG51bWJlciBhbmQgc2V0dXAgZm9yIERyYWdvbjQuCisJICoKKwkg KiAgVGhlIGZhc3QgcGF0aCBjYXNlIGlzIGRldGVjdGVkIGR1cmluZyBzZXR1cDogYW4gaW50ZWdl ciB3aGljaAorCSAqICBjYW4gYmUgY29udmVydGVkIHdpdGhvdXQgcm91bmRpbmcsIG5vIG5ldCBl eHBvbmVudC4gIFRoZSBmYXN0CisJICogIHBhdGggY291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSBz ZXBhcmF0ZSBzY2FuLCBidXQgbWF5IG5vdCByZWFsbHkKKwkgKiAgYmUgd29ydGggaXQ6IHRoZSBt dWx0aXBsaWNhdGlvbnMgZm9yIGJ1aWxkaW5nICdmJyBhcmUgbm90CisJICogIGV4cGVuc2l2ZSB3 aGVuICdmJyBpcyBzbWFsbC4KKwkgKgorCSAqICBUaGUgc2lnbmlmaWNhbmQgKCdmJykgbXVzdCBj b250YWluIGVub3VnaCBiaXRzIG9mIChhcHBhcmVudCkKKwkgKiAgYWNjdXJhY3ksIHNvIHRoYXQg RHJhZ29uNCB3aWxsIGdlbmVyYXRlIGVub3VnaCBiaW5hcnkgb3V0cHV0IGRpZ2l0cy4KKwkgKiAg Rm9yIGRlY2ltYWwgbnVtYmVycywgdGhpcyBtZWFucyBnZW5lcmF0aW5nIGEgMjAtZGlnaXQgc2ln bmlmaWNhbmQsCisJICogIHdoaWNoIHNob3VsZCB5aWVsZCBlbm91Z2ggcHJhY3RpY2FsIGFjY3Vy YWN5IHRvIHBhcnNlIElFRUUgZG91Ymxlcy4KKwkgKiAgSW4gZmFjdCwgdGhlIEVDTUFTY3JpcHQg c3BlY2lmaWNhdGlvbiBleHBsaWNpdGx5IGFsbG93cyBhbgorCSAqICBpbXBsZW1lbnRhdGlvbiB0 byB0cmVhdCBkaWdpdHMgYmV5b25kIDIwIGFzIHplcm9lcyAoYW5kIGV2ZW4KKwkgKiAgdG8gcm91 bmQgdGhlIDIwdGggZGlnaXQgdXB3YXJkcykuICBGb3Igbm9uLWRlY2ltYWwgbnVtYmVycywgdGhl CisJICogIGFwcHJvcHJpYXRlIG51bWJlciBvZiBkaWdpdHMgaGFzIGJlZW4gcHJlY29tcHV0ZWQg Zm9yIGNvbXBhcmFibGUKKwkgKiAgYWNjdXJhY3kuCisJICoKKwkgKiAgRGlnaXQgY291bnRzOgor CSAqCisJICogICAgWyBkaWdfbHplcm8gXQorCSAqICAgICAgfAorCSAqICAgICAuKy0uLi0tLVsg ZGlnX3ByZWMgXS0tLS0uCisJICogICAgIHwgIHx8ICAgICAgICAgICAgICAgICAgIHwKKwkgKiAg ICAgMDAwMDEyMy40NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBlKzEyMzQ1NgorCSAqICAgICB8 ICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICB8CisJICogICAgIGAtLSst LScgYC0tLS0tLVsgZGlnX2ZyYWMgXS0tLS0tLS0nICBgLSstLScKKwkgKiAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqICAgIFsgZGlnX3dob2xlIF0gICAg ICAgICAgICAgICAgICAgICAgIFsgZGlnX2V4cHQgXQorCSAqCisJICogICAgZGlnX2ZyYWMgYW5k IGRpZ19leHB0IGFyZSAtMSBpZiBub3QgcHJlc2VudAorCSAqICAgIGRpZ19semVybyBpcyBvbmx5 IGNvbXB1dGVkIGZvciB3aG9sZSBudW1iZXIgcGFydAorCSAqCisJICogIFBhcnNpbmcgc3RhdGUK KwkgKgorCSAqICAgICBQYXJzaW5nIHdob2xlIHBhcnQgICAgICBkaWdfZnJhYyA8IDAgQU5EIGRp Z19leHB0IDwgMAorCSAqICAgICBQYXJzaW5nIGZyYWN0aW9uIHBhcnQgICBkaWdfZnJhYyA+PSAw IEFORCBkaWdfZXhwdCA8IDAKKwkgKiAgICAgUGFyc2luZyBleHBvbmVudCBwYXJ0ICAgZGlnX2V4 cHQgPj0gMCAgIChkaWdfZnJhYyBtYXkgYmUgPCAwIG9yID49IDApCisJICoKKwkgKiAgTm90ZTog aW4gY2FzZSB3ZSBoaXQgYW4gaW1wbGVtZW50YXRpb24gbGltaXQgKGxpa2UgZXhwb25lbnQgcmFu Z2UpLAorCSAqICB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3IsIE5PVCByZXR1cm4gTmFOIG9yIElu ZmluaXR5LiAgRXZlbiB3aXRoCisJICogIHZlcnkgbGFyZ2UgZXhwb25lbnQgKG9yIHNpZ25pZmlj YW5kKSB2YWx1ZXMgdGhlIGZpbmFsIHJlc3VsdCBtYXkgYmUKKwkgKiAgZmluaXRlLCBzbyBOYU4v SW5maW5pdHkgd291bGQgYmUgaW5jb3JyZWN0LgorCSAqLworCisJZHVrX19iaV9zZXRfc21hbGwo Jm5jX2N0eC0+ZiwgMCk7CisJZGlnX3ByZWMgPSAwOworCWRpZ19semVybyA9IDA7CisJZGlnX3do b2xlID0gMDsKKwlkaWdfZnJhYyA9IC0xOworCWRpZ19leHB0ID0gLTE7CisJZXhwdCA9IDA7CisJ ZXhwdF9hZGogPSAwOyAgLyogZXNzZW50aWFsbHkgdHJhY2tzIGRpZ2l0IHBvc2l0aW9uIG9mIGxv d2VzdCAnZicgZGlnaXQgKi8KKwlleHB0X25lZyA9IDA7CisJZm9yICg7OykgeworCQljaCA9ICpw Kys7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInBhcnNlIGRpZ2l0czogcD0lcCwgY2g9JyVj JyAoJWxkKSwgZXhwdD0lbGQsIGV4cHRfYWRqPSVsZCwgIgorCQkgICAgICAgICAgICAgICAgICAg ICAiZGlnX3dob2xlPSVsZCwgZGlnX2ZyYWM9JWxkLCBkaWdfZXhwdD0lbGQsIGRpZ19semVybz0l bGQsIGRpZ19wcmVjPSVsZCIsCisJCSAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICop IHAsIChpbnQpICgoY2ggPj0gMHgyMCAmJiBjaCA8PSAweDdlKSA/IGNoIDogJz8nKSwgKGxvbmcp IGNoLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgZXhwdCwgKGxvbmcpIGV4cHRfYWRq LCAobG9uZykgZGlnX3dob2xlLCAobG9uZykgZGlnX2ZyYWMsCisJCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBkaWdfZXhwdCwgKGxvbmcpIGRpZ19semVybywgKGxvbmcpIGRpZ19wcmVjKSk7 CisJCURVS19fQklfUFJJTlQoImYiLCAmbmNfY3R4LT5mKTsKKworCQkvKiBNb3N0IGNvbW1vbiBj YXNlcyBmaXJzdC4gKi8KKwkJaWYgKGNoID49IChkdWtfc21hbGxfaW50X3QpICcwJyAmJiBjaCA8 PSAoZHVrX3NtYWxsX2ludF90KSAnOScpIHsKKwkJCWRpZyA9IChkdWtfc21hbGxfaW50X3QpIGNo IC0gJzAnICsgMDsKKwkJfSBlbHNlIGlmIChjaCA9PSAoZHVrX3NtYWxsX2ludF90KSAnLicpIHsK KwkJCS8qIEEgbGVhZGluZyBkaWdpdCBpcyBub3QgcmVxdWlyZWQgaW4gc29tZSBjYXNlcywgZS5n LiBhY2NlcHQgIi4xMjMiLgorCQkJICogSW4gb3RoZXIgY2FzZXMgKEpTT04ucGFyc2UoKSkgYSBs ZWFkaW5nIGRpZ2l0IGlzIHJlcXVpcmVkLiAgVGhpcworCQkJICogaXMgY2hlY2tlZCBmb3IgYWZ0 ZXIgdGhlIGxvb3AuCisJCQkgKi8KKwkJCWlmIChkaWdfZnJhYyA+PSAwIHx8IGRpZ19leHB0ID49 IDApIHsKKwkJCQlpZiAoZmxhZ3MgJiBEVUtfUzJOX0ZMQUdfQUxMT1dfR0FSQkFHRSkgeworCQkJ CQlEVUtfREREKERVS19ERERQUklOVCgiZ2FyYmFnZSB0ZXJtaW5hdGlvbiAoaW52YWxpZCBwZXJp b2QpIikpOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlEVUtfREREKERVS19ERERQ UklOVCgicGFyc2UgZmFpbGVkOiBwZXJpb2Qgbm90IGFsbG93ZWQiKSk7CisJCQkJCWdvdG8gcGFy c2VfZmFpbDsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgoZmxhZ3MgJiBEVUtfUzJOX0ZMQUdfQUxM T1dfRlJBQykgPT0gMCkgeworCQkJCS8qIFNvbWUgY29udGV4dHMgZG9uJ3QgYWxsb3cgZnJhY3Rp b25zIGF0IGFsbDsgdGhpcyBjYW4ndCBiZSBhCisJCQkJICogcG9zdC1jaGVjayBiZWNhdXNlIHRo ZSBzdGF0ZSAoJ2YnIGFuZCBleHB0KSB3b3VsZCBiZSBpbmNvcnJlY3QuCisJCQkJICovCisJCQkJ aWYgKGZsYWdzICYgRFVLX1MyTl9GTEFHX0FMTE9XX0dBUkJBR0UpIHsKKwkJCQkJRFVLX0RERChE VUtfREREUFJJTlQoImdhcmJhZ2UgdGVybWluYXRpb24gKGludmFsaWQgZmlyc3QgcGVyaW9kKSIp KTsKKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJRFVLX0RERChEVUtfREREUFJJTlQo InBhcnNlIGZhaWxlZDogZnJhY3Rpb24gcGFydCBub3QgYWxsb3dlZCIpKTsKKwkJCQl9CisJCQl9 CisKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJzdGFydCBmcmFjdGlvbiBwYXJ0IikpOworCQkJ ZGlnX2ZyYWMgPSAwOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoY2ggPT0gKGR1a19zbWFs bF9pbnRfdCkgMCkgeworCQkJRFVLX0RERChEVUtfREREUFJJTlQoIk5VTCB0ZXJtaW5hdGlvbiIp KTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChmbGFncyAmIERVS19TMk5fRkxBR19BTExPV19F WFApICYmCisJCSAgICAgICAgICAgZGlnX2V4cHQgPCAwICYmIChjaCA9PSAoZHVrX3NtYWxsX2lu dF90KSAnZScgfHwgY2ggPT0gKGR1a19zbWFsbF9pbnRfdCkgJ0UnKSkgeworCQkJLyogTm90ZTog d2UgZG9uJ3QgcGFyc2UgYmFjayBleHBvbmVudCBub3RhdGlvbiBmb3IgYW55dGhpbmcgZWxzZQor CQkJICogdGhhbiByYWRpeCAxMCwgc28gdGhpcyBpcyBub3QgYW4gYW1iaWd1b3VzIGNoZWNrIChl LmcuIGhleAorCQkJICogZXhwb25lbnQgdmFsdWVzIG1heSBoYXZlICdlJyBlaXRoZXIgYXMgYSBz aWduaWZpY2FuZCBkaWdpdAorCQkJICogb3IgYXMgYW4gZXhwb25lbnQgc2VwYXJhdG9yKS4KKwkJ CSAqCisJCQkgKiBJZiB0aGUgZXhwb25lbnQgc2VwYXJhdG9yIG9jY3VycyB0d2ljZSwgJ2UnIHdp bGwgYmUgaW50ZXJwcmV0ZWQKKwkJCSAqIGFzIGEgZGlnaXQgKD0gMTQpIGFuZCB3aWxsIGJlIHJl amVjdGVkIGFzIGFuIGludmFsaWQgZGVjaW1hbAorCQkJICogZGlnaXQuCisJCQkgKi8KKworCQkJ RFVLX0RERChEVUtfREREUFJJTlQoInN0YXJ0IGV4cG9uZW50IHBhcnQiKSk7CisKKwkJCS8qIEV4 cG9uZW50IHdpdGhvdXQgYSBzaWduIG9yIHdpdGggYSArLy0gc2lnbiBpcyBhY2NlcHRlZAorCQkJ ICogYnkgYWxsIGNhbGwgc2l0ZXMgKGV2ZW4gSlNPTi5wYXJzZSgpKS4KKwkJCSAqLworCQkJY2gg PSAqcDsKKwkJCWlmIChjaCA9PSAoZHVrX3NtYWxsX2ludF90KSAnLScpIHsKKwkJCQlleHB0X25l ZyA9IDE7CisJCQkJcCsrOworCQkJfSBlbHNlIGlmIChjaCA9PSAoZHVrX3NtYWxsX2ludF90KSAn KycpIHsKKwkJCQlwKys7CisJCQl9CisJCQlkaWdfZXhwdCA9IDA7CisJCQljb250aW51ZTsKKwkJ fSBlbHNlIGlmIChjaCA+PSAoZHVrX3NtYWxsX2ludF90KSAnYScgJiYgY2ggPD0gKGR1a19zbWFs bF9pbnRfdCkgJ3onKSB7CisJCQlkaWcgPSAoZHVrX3NtYWxsX2ludF90KSAoY2ggLSAoZHVrX3Nt YWxsX2ludF90KSAnYScgKyAweDBhKTsKKwkJfSBlbHNlIGlmIChjaCA+PSAoZHVrX3NtYWxsX2lu dF90KSAnQScgJiYgY2ggPD0gKGR1a19zbWFsbF9pbnRfdCkgJ1onKSB7CisJCQlkaWcgPSAoZHVr X3NtYWxsX2ludF90KSAoY2ggLSAoZHVrX3NtYWxsX2ludF90KSAnQScgKyAweDBhKTsKKwkJfSBl bHNlIHsKKwkJCWRpZyA9IDI1NTsgIC8qIHRyaWdnZXJzIGdhcmJhZ2UgZGlnaXQgY2hlY2sgYmVs b3cgKi8KKwkJfQorCQlEVUtfQVNTRVJUKChkaWcgPj0gMCAmJiBkaWcgPD0gMzUpIHx8IGRpZyA9 PSAyNTUpOworCisJCWlmIChkaWcgPj0gcmFkaXgpIHsKKwkJCWlmIChmbGFncyAmIERVS19TMk5f RkxBR19BTExPV19HQVJCQUdFKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQoImdhcmJhZ2Ug dGVybWluYXRpb24iKSk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCURVS19EREQoRFVL X0RERFBSSU5UKCJwYXJzZSBmYWlsZWQ6IHRyYWlsaW5nIGdhcmJhZ2Ugb3IgaW52YWxpZCBkaWdp dCIpKTsKKwkJCQlnb3RvIHBhcnNlX2ZhaWw7CisJCQl9CisJCX0KKworCQlpZiAoZGlnX2V4cHQg PCAwKSB7CisJCQkvKiB3aG9sZSBvciBmcmFjdGlvbiBkaWdpdCAqLworCisJCQlpZiAoZGlnX3By ZWMgPCBkdWtfX3N0cjJudW1fZGlnaXRzX2Zvcl9yYWRpeFtyYWRpeCAtIDJdKSB7CisJCQkJLyog c2lnbmlmaWNhbnQgZnJvbSBwcmVjaXNpb24gcGVyc3BlY3RpdmUgKi8KKworCQkJCWR1a19zbWFs bF9pbnRfdCBmX3plcm8gPSBkdWtfX2JpX2lzX3plcm8oJm5jX2N0eC0+Zik7CisJCQkJaWYgKGZf emVybyAmJiBkaWcgPT0gMCkgeworCQkJCQkvKiBMZWFkaW5nIHplcm8gaXMgbm90IGNvdW50ZWQg dG93YXJkcyBwcmVjaXNpb24gZGlnaXRzOyBub3QKKwkJCQkJICogaW4gdGhlIGludGVnZXIgcGFy dCwgbm9yIGluIHRoZSBmcmFjdGlvbiBwYXJ0LgorCQkJCQkgKi8KKwkJCQkJaWYgKGRpZ19mcmFj IDwgMCkgeworCQkJCQkJZGlnX2x6ZXJvKys7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkv KiBYWFg6IGpvaW4gdGhlc2Ugb3BzIChtdWx0aXBseS1hY2N1bXVsYXRlKSwgYnV0IG9ubHkgaWYK KwkJCQkJICogY29kZSBmb290cHJpbnQgZGVjcmVhc2VzLgorCQkJCQkgKi8KKwkJCQkJZHVrX19i aV9tdWxfc21hbGwoJm5jX2N0eC0+dDEsICZuY19jdHgtPmYsIChkdWtfdWludDMyX3QpIHJhZGl4 KTsKKwkJCQkJZHVrX19iaV9hZGRfc21hbGwoJm5jX2N0eC0+ZiwgJm5jX2N0eC0+dDEsIChkdWtf dWludDMyX3QpIGRpZyk7CisJCQkJCWRpZ19wcmVjKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ CQkvKiBJZ25vcmUgZGlnaXRzIGJleW9uZCBhIHJhZGl4LXNwZWNpZmljIGxpbWl0LCBidXQgbm90 ZSB0aGVtCisJCQkJICogaW4gZXhwdF9hZGouCisJCQkJICovCisJCQkJZXhwdF9hZGorKzsKKwkJ CX0KKworCQkJaWYgKGRpZ19mcmFjID49IDApIHsKKwkJCQlkaWdfZnJhYysrOworCQkJCWV4cHRf YWRqLS07CisJCQl9IGVsc2UgeworCQkJCWRpZ193aG9sZSsrOworCQkJfQorCQl9IGVsc2Ugewor CQkJLyogZXhwb25lbnQgZGlnaXQgKi8KKworCQkJRFVLX0FTU0VSVChyYWRpeCA9PSAxMCk7CisJ CQlleHB0ID0gZXhwdCAqIHJhZGl4ICsgZGlnOworCQkJaWYgKGV4cHQgPiBEVUtfUzJOX01BWF9F WFBPTkVOVCkgeworCQkJCS8qIEltcG9zZSBhIHJlYXNvbmFibGUgZXhwb25lbnQgbGltaXQsIHNv IHRoYXQgZXhwCisJCQkJICogZG9lc24ndCBuZWVkIHRvIGdldCB0cmFja2VkIHVzaW5nIGEgYmln aW50LgorCQkJCSAqLworCQkJCURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZSBmYWlsZWQ6IGV4 cG9uZW50IHRvbyBsYXJnZSIpKTsKKwkJCQlnb3RvIHBhcnNlX2V4cGxpbWl0X2Vycm9yOworCQkJ fQorCQkJZGlnX2V4cHQrKzsKKwkJfQorCX0KKworCS8qIExlYWRpbmcgemVyby4gKi8KKworCWlm IChkaWdfbHplcm8gPiAwICYmIGRpZ193aG9sZSA+IDEpIHsKKwkJaWYgKChmbGFncyAmIERVS19T Mk5fRkxBR19BTExPV19MRUFESU5HX1pFUk8pID09IDApIHsKKwkJCURVS19EREQoRFVLX0RERFBS SU5UKCJwYXJzZSBmYWlsZWQ6IGxlYWRpbmcgemVyb2VzIG5vdCBhbGxvd2VkIGluIGludGVnZXIg cGFydCIpKTsKKwkJCWdvdG8gcGFyc2VfZmFpbDsKKwkJfQorCX0KKworCS8qIFZhbGlkaXR5IGNo ZWNrcyBmb3IgdmFyaW91cyBmcmFjdGlvbiBmb3JtYXRzICgiMC4xIiwgIi4xIiwgIjEuIiwgIi4i KS4gKi8KKworCWlmIChkaWdfd2hvbGUgPT0gMCkgeworCQlpZiAoZGlnX2ZyYWMgPT0gMCkgewor CQkJLyogIi4iIGlzIG5vdCBhY2NlcHRlZCBpbiBhbnkgZm9ybWF0ICovCisJCQlEVUtfREREKERV S19ERERQUklOVCgicGFyc2UgZmFpbGVkOiBwbGFpbiBwZXJpb2Qgd2l0aG91dCBsZWFkaW5nIG9y IHRyYWlsaW5nIGRpZ2l0cyIpKTsKKwkJCWdvdG8gcGFyc2VfZmFpbDsKKwkJfSBlbHNlIGlmIChk aWdfZnJhYyA+IDApIHsKKwkJCS8qICIuMTIzIiAqLworCQkJaWYgKChmbGFncyAmIERVS19TMk5f RkxBR19BTExPV19OQUtFRF9GUkFDKSA9PSAwKSB7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQo InBhcnNlIGZhaWxlZDogZnJhY3Rpb24gcGFydCBub3QgYWxsb3dlZCB3aXRob3V0ICIKKwkJCQkg ICAgICAgICAgICAgICAgICAgICAibGVhZGluZyBpbnRlZ2VyIGRpZ2l0KHMpIikpOworCQkJCWdv dG8gcGFyc2VfZmFpbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIGVtcHR5ICgiIikgaXMgYWxs b3dlZCBpbiBzb21lIGZvcm1hdHMgKGUuZy4gTnVtYmVyKCcnKSwgYXMgemVybyAqLworCQkJaWYg KChmbGFncyAmIERVS19TMk5fRkxBR19BTExPV19FTVBUWV9BU19aRVJPKSA9PSAwKSB7CisJCQkJ RFVLX0RERChEVUtfREREUFJJTlQoInBhcnNlIGZhaWxlZDogZW1wdHkgc3RyaW5nIG5vdCBhbGxv d2VkIChhcyB6ZXJvKSIpKTsKKwkJCQlnb3RvIHBhcnNlX2ZhaWw7CisJCQl9CisJCX0KKwl9IGVs c2UgeworCQlpZiAoZGlnX2ZyYWMgPT0gMCkgeworCQkJLyogIjEyMy4iIGlzIGFsbG93ZWQgaW4g c29tZSBmb3JtYXRzICovCisJCQlpZiAoKGZsYWdzICYgRFVLX1MyTl9GTEFHX0FMTE9XX0VNUFRZ X0ZSQUMpID09IDApIHsKKwkJCQlEVUtfREREKERVS19ERERQUklOVCgicGFyc2UgZmFpbGVkOiBl bXB0eSBmcmFjdGlvbnMiKSk7CisJCQkJZ290byBwYXJzZV9mYWlsOworCQkJfQorCQl9IGVsc2Ug aWYgKGRpZ19mcmFjID4gMCkgeworCQkJLyogIjEyMy40NTYiICovCisJCQk7CisJCX0gZWxzZSB7 CisJCQkvKiAiMTIzIiAqLworCQkJOworCQl9CisJfQorCisJLyogRXhwb25lbnQgd2l0aG91dCBk aWdpdHMgKGUuZy4gIjFlIiBvciAiMWUrIikuICBJZiB0cmFpbGluZyBnYXJiYWdlIGlzCisJICog YWxsb3dlZCwgaWdub3JlIGV4cG9uZW50IHBhcnQgYXMgZ2FyYmFnZSAoPSBwYXJzZSBhcyAiMSIs IGkuZS4gZXhwIDApLgorCSAqLworCisJaWYgKGRpZ19leHB0ID09IDApIHsKKwkJaWYgKChmbGFn cyAmIERVS19TMk5fRkxBR19BTExPV19HQVJCQUdFKSA9PSAwKSB7CisJCQlEVUtfREREKERVS19E RERQUklOVCgicGFyc2UgZmFpbGVkOiBlbXB0eSBleHBvbmVudCIpKTsKKwkJCWdvdG8gcGFyc2Vf ZmFpbDsKKwkJfQorCQlEVUtfQVNTRVJUKGV4cHQgPT0gMCk7CisJfQorCisJaWYgKGV4cHRfbmVn KSB7CisJCWV4cHQgPSAtZXhwdDsKKwl9CisJRFVLX0RERChEVUtfREREUFJJTlQoImV4cHQ9JWxk LCBleHB0X2Fkaj0lbGQsIG5ldCBleHBvbmVudCAtPiAlbGQiLAorCSAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBleHB0LCAobG9uZykgZXhwdF9hZGosIChsb25nKSAoZXhwdCArIGV4cHRfYWRq KSkpOworCWV4cHQgKz0gZXhwdF9hZGo7CisKKwkvKiBGYXN0IHBhdGggY2hlY2suICovCisKKwlp ZiAobmNfY3R4LT5mLm4gPD0gMSAmJiAgIC8qIDMyLWJpdCB2YWx1ZSAqLworCSAgICBleHB0ID09 IDAgICAgLyogbm8gbmV0IGV4cG9uZW50ICovKSB7CisJCS8qIEZhc3QgcGF0aCBpcyB0cmlnZ2Vy ZWQgZm9yIG5vIGV4cG9uZW50IGFuZCBhbHNvIGZvciBiYWxhbmNlZCBleHBvbmVudAorCQkgKiBh bmQgZnJhY3Rpb24gcGFydHMsIGUuZy4gZm9yICIxLjIzZTIiID09ICIxMjMiLiAgUmVtZW1iZXIg dG8gcmVzcGVjdAorCQkgKiB6ZXJvIHNpZ24uCisJCSAqLworCisJCS8qIFhYWDogY291bGQgYWNj ZXB0IG51bWJlcnMgbGFyZ2VyIHRoYW4gMzIgYml0cywgZS5nLiB1cCB0byA1MyBiaXRzPyAqLwor CQlEVUtfREREKERVS19ERERQUklOVCgiZmFzdCBwYXRoIG51bWJlciBwYXJzZSIpKTsKKwkJaWYg KG5jX2N0eC0+Zi5uID09IDEpIHsKKwkJCXJlcyA9IChkb3VibGUpIG5jX2N0eC0+Zi52WzBdOwor CQl9IGVsc2UgeworCQkJcmVzID0gMC4wOworCQl9CisJCWdvdG8gbmVnY2hlY2tfYW5kX3JldDsK Kwl9CisKKwkvKiBTaWduaWZpY2FuZCAoJ2YnKSBwYWRkaW5nLiAqLworCisJd2hpbGUgKGRpZ19w cmVjIDwgZHVrX19zdHIybnVtX2RpZ2l0c19mb3JfcmFkaXhbcmFkaXggLSAyXSkgeworCQkvKiBQ YWQgc2lnbmlmaWNhbmQgd2l0aCAidmlydHVhbCIgemVybyBkaWdpdHMgc28gdGhhdCBEcmFnb240 IHdpbGwKKwkJICogaGF2ZSBlbm91Z2ggKGFwcGFyZW50KSBwcmVjaXNpb24gdG8gd29yayB3aXRo LgorCQkgKi8KKwkJRFVLX0RERChEVUtfREREUFJJTlQoImRpZ19wcmVjPSVsZCwgcGFkIHNpZ25p ZmljYW5kIHdpdGggemVybyIsIChsb25nKSBkaWdfcHJlYykpOworCQlkdWtfX2JpX211bF9zbWFs bF9jb3B5KCZuY19jdHgtPmYsIChkdWtfdWludDMyX3QpIHJhZGl4LCAmbmNfY3R4LT50MSk7CisJ CURVS19fQklfUFJJTlQoImYiLCAmbmNfY3R4LT5mKTsKKwkJZXhwdC0tOworCQlkaWdfcHJlYysr OworCX0KKworCURVS19EREQoRFVLX0RERFBSSU5UKCJmaW5hbCBleHBvbmVudDogJWxkIiwgKGxv bmcpIGV4cHQpKTsKKworCS8qIERldGVjdCB6ZXJvIHNwZWNpYWwgY2FzZS4gKi8KKworCWlmIChu Y19jdHgtPmYubiA9PSAwKSB7CisJCS8qIFRoaXMgbWF5IGhhcHBlbiBldmVuIGFmdGVyIHRoZSBm YXN0IHBhdGggY2hlY2ssIGlmIGV4cG9uZW50IGlzCisJCSAqIG5vdCBiYWxhbmNlZCAoZS5nLiAi MGUxIikuICBSZW1lbWJlciB0byByZXNwZWN0IHplcm8gc2lnbi4KKwkJICovCisJCURVS19EREQo RFVLX0RERFBSSU5UKCJzaWduaWZpY2FuZCBpcyB6ZXJvIikpOworCQlyZXMgPSAwLjA7CisJCWdv dG8gbmVnY2hlY2tfYW5kX3JldDsKKwl9CisKKworCS8qIFF1aWNrIHJlamVjdCBvZiB0b28gbGFy Z2Ugb3IgdG9vIHNtYWxsIGV4cG9uZW50cy4gIFRoaXMgY2hlY2sKKwkgKiB3b3VsZCBiZSBpbmNv cnJlY3QgZm9yIHplcm8gKGUuZy4gIjBlMTAwMCIgaXMgemVybywgbm90IEluZmluaXR5KQorCSAq IHNvIHplcm8gY2hlY2sgbXVzdCBiZSBhYm92ZS4KKwkgKi8KKworCWV4cGxpbSA9ICZkdWtfX3N0 cjJudW1fZXhwX2xpbWl0c1tyYWRpeCAtIDJdOworCWlmIChleHB0ID4gZXhwbGltLT51cHBlcikg eworCQlEVUtfREREKERVS19ERERQUklOVCgiZXhwb25lbnQgdG9vIGxhcmdlIC0+IGluZmluaXRl IikpOworCQlyZXMgPSAoZHVrX2RvdWJsZV90KSBEVUtfRE9VQkxFX0lORklOSVRZOworCQlnb3Rv IG5lZ2NoZWNrX2FuZF9yZXQ7CisJfSBlbHNlIGlmIChleHB0IDwgZXhwbGltLT5sb3dlcikgewor CQlEVUtfREREKERVS19ERERQUklOVCgiZXhwb25lbnQgdG9vIHNtYWxsIC0+IHplcm8iKSk7CisJ CXJlcyA9IChkdWtfZG91YmxlX3QpIDAuMDsKKwkJZ290byBuZWdjaGVja19hbmRfcmV0OworCX0K KworCW5jX2N0eC0+aXNfczJuID0gMTsKKwluY19jdHgtPmUgPSBleHB0OworCW5jX2N0eC0+YiA9 IHJhZGl4OworCW5jX2N0eC0+QiA9IDI7CisJbmNfY3R4LT5pc19maXhlZCA9IDE7CisJbmNfY3R4 LT5hYnNfcG9zID0gMDsKKwluY19jdHgtPnJlcV9kaWdpdHMgPSA1MyArIDE7CisKKwlEVUtfX0JJ X1BSSU5UKCJmIiwgJm5jX2N0eC0+Zik7CisJRFVLX0RERChEVUtfREREUFJJTlQoImU9JWxkIiwg KGxvbmcpIG5jX2N0eC0+ZSkpOworCisJLyoKKwkgKiAgRHJhZ29uNCBzbG93IHBhdGggKGJpbmFy eSkgZGlnaXQgZ2VuZXJhdGlvbi4KKwkgKiAgQW4gZXh0cmEgZGlnaXQgaXMgZ2VuZXJhdGVkIGZv ciByb3VuZGluZy4KKwkgKi8KKworCWR1a19fZHJhZ29uNF9wcmVwYXJlKG5jX2N0eCk7ICAvKiBz ZXR1cCBtYW55IHZhcmlhYmxlcyBpbiBuY19jdHggKi8KKworCURVS19EREQoRFVLX0RERFBSSU5U KCJhZnRlciBwcmVwYXJlOiIpKTsKKwlEVUtfX0JJX1BSSU5UKCJyIiwgJm5jX2N0eC0+cik7CisJ RFVLX19CSV9QUklOVCgicyIsICZuY19jdHgtPnMpOworCURVS19fQklfUFJJTlQoIm1wIiwgJm5j X2N0eC0+bXApOworCURVS19fQklfUFJJTlQoIm1tIiwgJm5jX2N0eC0+bW0pOworCisJZHVrX19k cmFnb240X3NjYWxlKG5jX2N0eCk7CisKKwlEVUtfREREKERVS19ERERQUklOVCgiYWZ0ZXIgc2Nh bGU7IGs9JWxkIiwgKGxvbmcpIG5jX2N0eC0+aykpOworCURVS19fQklfUFJJTlQoInIiLCAmbmNf Y3R4LT5yKTsKKwlEVUtfX0JJX1BSSU5UKCJzIiwgJm5jX2N0eC0+cyk7CisJRFVLX19CSV9QUklO VCgibXAiLCAmbmNfY3R4LT5tcCk7CisJRFVLX19CSV9QUklOVCgibW0iLCAmbmNfY3R4LT5tbSk7 CisKKwlkdWtfX2RyYWdvbjRfZ2VuZXJhdGUobmNfY3R4KTsKKworCURVS19BU1NFUlQobmNfY3R4 LT5jb3VudCA9PSA1MyArIDEpOworCisJLyoKKwkgKiAgQ29udmVydCBiaW5hcnkgZGlnaXRzIGlu dG8gYW4gSUVFRSBkb3VibGUuICBOZWVkIHRvIGhhbmRsZQorCSAqICBkZW5vcm1hbHMgYW5kIHJv dW5kaW5nIGNvcnJlY3RseS4KKwkgKgorCSAqICBTb21lIGNhbGwgc2l0ZXMgY3VycmVudGx5IGFz c3VtZSB0aGUgcmVzdWx0IGlzIGFsd2F5cyBhCisJICogIG5vbi1mYXN0aW50IGRvdWJsZS4gIElm IHRoaXMgaXMgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGwKKwkgKiAgc2l0ZXMuCisJICovCisKKwlk dWtfX2RyYWdvbjRfY3R4X3RvX2RvdWJsZShuY19jdHgsICZyZXMpOworCWdvdG8gbmVnY2hlY2tf YW5kX3JldDsKKworIG5lZ2NoZWNrX2FuZF9yZXQ6CisJaWYgKG5lZykgeworCQlyZXMgPSAtcmVz OworCX0KKwlkdWtfcG9wKHRocik7CisJZHVrX3B1c2hfbnVtYmVyKHRociwgKGRvdWJsZSkgcmVz KTsKKwlEVUtfREREKERVS19ERERQUklOVCgicmVzdWx0OiAlIVQiLCAoZHVrX3R2YWwgKikgZHVr X2dldF90dmFsKHRociwgLTEpKSk7CisJcmV0dXJuOworCisgcGFyc2VfZmFpbDoKKwlEVUtfRERE KERVS19ERERQUklOVCgicGFyc2UgZmFpbGVkIikpOworCWR1a19wb3AodGhyKTsKKwlkdWtfcHVz aF9uYW4odGhyKTsKKwlyZXR1cm47CisKKyBwYXJzZV9leHBsaW1pdF9lcnJvcjoKKwlEVUtfRERE KERVS19ERERQUklOVCgicGFyc2UgZmFpbGVkLCBpbnRlcm5hbCBlcnJvciwgY2FuJ3QgcmV0dXJu IGEgdmFsdWUiKSk7CisJRFVLX0VSUk9SX1JBTkdFKHRociwgImV4cG9uZW50IHRvbyBsYXJnZSIp OworCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKK30KKworLyogYXV0b21hdGljIHVuZGVmcyAq LworI3VuZGVmIERVS19fQklfTUFYX1BBUlRTCisjdW5kZWYgRFVLX19CSV9QUklOVAorI3VuZGVm IERVS19fRElHSVRDSEFSCisjdW5kZWYgRFVLX19EUkFHT040X09VVFBVVF9QUkVJTkMKKyN1bmRl ZiBEVUtfX0lFRUVfRE9VQkxFX0VYUF9CSUFTCisjdW5kZWYgRFVLX19JRUVFX0RPVUJMRV9FWFBf TUlOCisjdW5kZWYgRFVLX19NQVhfRk9STUFUVEVEX0xFTkdUSAorI3VuZGVmIERVS19fTUFYX09V VFBVVF9ESUdJVFMKKyN1bmRlZiBEVUtfX05PX0VYUAorI3VuZGVmIERVS19fTlVNQ09OVl9DVFhf QklHSU5UU19TSVpFCisjdW5kZWYgRFVLX19OVU1DT05WX0NUWF9OVU1fQklHSU5UUworLyoKKyAq ICBSZWdleHAgY29tcGlsYXRpb24uCisgKgorICogIFNlZSBkb2MvcmVnZXhwLnJzdCBmb3IgYSBk aXNjdXNzaW9uIG9mIHRoZSBjb21waWxhdGlvbiBhcHByb2FjaCBhbmQKKyAqICBjdXJyZW50IGxp bWl0YXRpb25zLgorICoKKyAqICBSZWdleHAgYnl0ZWNvZGUgYXNzdW1lcyBqdW1wcyBjYW4gYmUg ZXhwcmVzc2VkIHdpdGggc2lnbmVkIDMyLWJpdAorICogIGludGVnZXJzLiAgQ29uc2VxdWVudGx5 IHRoZSBieXRlY29kZSBzaXplIG11c3Qgbm90IGV4Y2VlZCAweDdmZmZmZmZmTC4KKyAqICBUaGUg aW1wbGVtZW50YXRpb24gY2FzdHMgZHVrX3NpemVfdCAoYnVmZmVyIHNpemUpIHRvIGR1a18odSlp bnQzMl90CisgKiAgaW4gbWFueSBwbGFjZXMuICBBbHRob3VnaCB0aGlzIGNvdWxkIGJlIGNoYW5n ZWQsIHRoZSBieXRlY29kZSBmb3JtYXQKKyAqICBsaW1pdCB3b3VsZCBzdGlsbCBwcmV2ZW50IHJl Z2V4cHMgZXhjZWVkaW5nIHRoZSBzaWduZWQgMzItYml0IGxpbWl0CisgKiAgZnJvbSB3b3JraW5n LgorICoKKyAqICBYWFg6IFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcmV2ZW50IGJ5dGVj b2RlIGZyb20gZXhjZWVkaW5nIHRoZQorICogIG1heGltdW0gc3VwcG9ydGVkIHNpemUuICBUaGlz IGNvdWxkIGJlIGRvbmUgYnkgbGltaXRpbmcgdGhlIG1heGltdW0KKyAqICBpbnB1dCBzdHJpbmcg c2l6ZSAoYXNzdW1pbmcgYW4gdXBwZXIgYm91bmQgY2FuIGJlIGNvbXB1dGVkIGZvciBudW1iZXIK KyAqICBvZiBieXRlY29kZSBieXRlcyBlbWl0dGVkIHBlciBpbnB1dCBieXRlKSBvciBjaGVja2lu ZyBidWZmZXIgbWF4aW11bQorICogIHNpemUgd2hlbiBlbWl0dGluZyBieXRlY29kZSAoc2xvd2Vy KS4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVk ICovCisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX1NVUFBPUlQpCisKKy8qCisgKiAgSGVs cGVyIG1hY3JvcworICovCisKKyNkZWZpbmUgRFVLX19SRV9JTklUSUFMX0JVRlNJWkUgNjQKKwor I2RlZmluZSBEVUtfX1JFX0JVRkxFTihyZV9jdHgpIFwKKwlEVUtfQldfR0VUX1NJWkUocmVfY3R4 LT50aHIsICZyZV9jdHgtPmJ3KQorCisvKgorICogIERpc2p1bmN0aW9uIHN0cnVjdDogcmVzdWx0 IG9mIHBhcnNpbmcgYSBkaXNqdW5jdGlvbgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBO dW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHRoZSBhdG9tIG1hdGNoZXMgKGUuZy4gMyBmb3IgJ2Fi YycpLAorCSAqIC0xIGlmIGF0b20gaXMgY29tcGxleCBhbmQgbnVtYmVyIG9mIG1hdGNoZWQgY2hh cmFjdGVycyBlaXRoZXIKKwkgKiB2YXJpZXMgb3IgaXMgbm90IGtub3duLgorCSAqLworCWR1a19p bnQzMl90IGNoYXJsZW47CisKKyNpZiAwCisJLyogVGhlc2UgYXJlIG5vdCBuZWVkZWQgdG8gaW1w bGVtZW50IHF1YW50aWZpZXIgY2FwdHVyZSBoYW5kbGluZywKKwkgKiBidXQgbWlnaHQgYmUgbmVl ZGVkIGF0IHNvbWUgcG9pbnQuCisJICovCisKKwkvKiByZV9jdHgtPmNhcHR1cmVzIGF0IHN0YXJ0 IGFuZCBlbmQgb2YgYXRvbSBwYXJzaW5nLgorCSAqIFNpbmNlICdjYXB0dXJlcycgaW5kaWNhdGVz IGhpZ2hlc3QgY2FwdHVyZSBudW1iZXIgZW1pdHRlZAorCSAqIHNvIGZhciBpbiBhIERVS19SRU9Q X1NBVkUsIHRoZSBjYXB0dXJlcyBudW1iZXJzIHNhdmVkIGJ5CisJICogdGhlIGF0b20gYXJlOiBd c3RhcnRfY2FwdHVyZXMsZW5kX2NhcHR1cmVzXS4KKwkgKi8KKwlkdWtfdWludDMyX3Qgc3RhcnRf Y2FwdHVyZXM7CisJZHVrX3VpbnQzMl90IGVuZF9jYXB0dXJlczsKKyNlbmRpZgorfSBkdWtfX3Jl X2Rpc2p1bmN0aW9uX2luZm87CisKKy8qCisgKiAgRW5jb2RpbmcgaGVscGVycworICoKKyAqICBT b21lIG9mIHRoZSB0eXBpbmcgaXMgYnl0ZWNvZGUgYmFzZWQsIGUuZy4gc2xpY2Ugc2l6ZXMgYXJl IHVuc2lnbmVkIDMyLWJpdAorICogIGV2ZW4gdGhvdWdoIHRoZSBidWZmZXIgb3BlcmF0aW9ucyB3 aWxsIHVzZSBkdWtfc2l6ZV90LgorICovCisKKy8qIFhYWDogdGhlIGluc2VydCBoZWxwZXJzIHNo b3VsZCBlbnN1cmUgdGhhdCB0aGUgYnl0ZWNvZGUgcmVzdWx0IGlzIG5vdAorICogbGFyZ2VyIHRo YW4gZXhwZWN0ZWQgKG9yIGF0IGxlYXN0IGFzc2VydCBmb3IgaXQpLiAgTWFueSB0aGluZ3MgaW4g dGhlCisgKiBieXRlY29kZSwgbGlrZSBza2lwIG9mZnNldHMsIHdvbid0IHdvcmsgY29ycmVjdGx5 IGlmIHRoZSBieXRlY29kZSBpcworICogbGFyZ2VyIHRoYW4gc2F5IDJHLgorICovCisKK0RVS19M T0NBTCBkdWtfdWludDMyX3QgZHVrX19lbmNvZGVfaTMyKGR1a19pbnQzMl90IHgpIHsKKwlpZiAo eCA8IDApIHsKKwkJcmV0dXJuICgoZHVrX3VpbnQzMl90KSAoLXgpKSAqIDIgKyAxOworCX0gZWxz ZSB7CisJCXJldHVybiAoKGR1a191aW50MzJfdCkgeCkgKiAyOworCX0KK30KKworLyogWFhYOiBy ZXR1cm4gdHlwZSBzaG91bGQgcHJvYmFibHkgYmUgZHVrX3NpemVfdCwgb3IgZXhwbGljaXQgY2hl Y2tzIGFyZSBuZWVkZWQgZm9yCisgKiBtYXhpbXVtIHNpemUuCisgKi8KK0RVS19MT0NBTCBkdWtf dWludDMyX3QgZHVrX19pbnNlcnRfdTMyKGR1a19yZV9jb21waWxlcl9jdHggKnJlX2N0eCwgZHVr X3VpbnQzMl90IG9mZnNldCwgZHVrX3VpbnQzMl90IHgpIHsKKwlkdWtfdWludDhfdCBidWZbRFVL X1VOSUNPREVfTUFYX1hVVEY4X0xFTkdUSF07CisJZHVrX3NtYWxsX2ludF90IGxlbjsKKworCWxl biA9IGR1a191bmljb2RlX2VuY29kZV94dXRmOCgoZHVrX3Vjb2RlcG9pbnRfdCkgeCwgYnVmKTsK KwlEVUtfQVNTRVJUKGxlbiA+PSAwKTsKKwlEVUtfQldfSU5TRVJUX0VOU1VSRV9CWVRFUyhyZV9j dHgtPnRociwgJnJlX2N0eC0+YncsIG9mZnNldCwgYnVmLCAoZHVrX3NpemVfdCkgbGVuKTsKKwly ZXR1cm4gKGR1a191aW50MzJfdCkgbGVuOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX2FwcGVu ZF91MzIoZHVrX3JlX2NvbXBpbGVyX2N0eCAqcmVfY3R4LCBkdWtfdWludDMyX3QgeCkgeworCURV S19CV19XUklURV9FTlNVUkVfWFVURjgocmVfY3R4LT50aHIsICZyZV9jdHgtPmJ3LCB4KTsKK30K KworRFVLX0xPQ0FMIHZvaWQgZHVrX19hcHBlbmRfN2JpdChkdWtfcmVfY29tcGlsZXJfY3R4ICpy ZV9jdHgsIGR1a191aW50MzJfdCB4KSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpF KQorCWR1a19fYXBwZW5kX3UzMihyZV9jdHgsIHgpOworI2Vsc2UKKwlEVUtfQVNTRVJUKHggPD0g MHg3ZlUpOworCURVS19CV19XUklURV9FTlNVUkVfVTgocmVfY3R4LT50aHIsICZyZV9jdHgtPmJ3 LCAoZHVrX3VpbnQ4X3QpIHgpOworI2VuZGlmCit9CisKKyNpZiAwCitEVUtfTE9DQUwgdm9pZCBk dWtfX2FwcGVuZF8yYnl0ZXMoZHVrX3JlX2NvbXBpbGVyX2N0eCAqcmVfY3R4LCBkdWtfdWludDhf dCB4LCBkdWtfdWludDhfdCB5KSB7CisJRFVLX0JXX1dSSVRFX0VOU1VSRV9VOF8yKHJlX2N0eC0+ dGhyLCAmcmVfY3R4LT5idywgeCwgeSk7Cit9CisjZW5kaWYKKworRFVLX0xPQ0FMIGR1a191aW50 MzJfdCBkdWtfX2luc2VydF9pMzIoZHVrX3JlX2NvbXBpbGVyX2N0eCAqcmVfY3R4LCBkdWtfdWlu dDMyX3Qgb2Zmc2V0LCBkdWtfaW50MzJfdCB4KSB7CisJcmV0dXJuIGR1a19faW5zZXJ0X3UzMihy ZV9jdHgsIG9mZnNldCwgZHVrX19lbmNvZGVfaTMyKHgpKTsKK30KKworRFVLX0xPQ0FMIHZvaWQg ZHVrX19hcHBlbmRfcmVvcChkdWtfcmVfY29tcGlsZXJfY3R4ICpyZV9jdHgsIGR1a191aW50MzJf dCByZW9wKSB7CisJRFVLX0FTU0VSVChyZW9wIDw9IDB4N2ZVKTsKKwkodm9pZCkgZHVrX19hcHBl bmRfN2JpdChyZV9jdHgsIHJlb3ApOworfQorCisjaWYgMCAgLyogdW51c2VkICovCitEVUtfTE9D QUwgdm9pZCBkdWtfX2FwcGVuZF9pMzIoZHVrX3JlX2NvbXBpbGVyX2N0eCAqcmVfY3R4LCBkdWtf aW50MzJfdCB4KSB7CisJZHVrX19hcHBlbmRfdTMyKHJlX2N0eCwgZHVrX19lbmNvZGVfaTMyKHgp KTsKK30KKyNlbmRpZgorCisvKiBzcGVjaWFsIGhlbHBlciBmb3IgZW1pdHRpbmcgdTE2IGxpc3Rz ICh1c2VkIGZvciBjaGFyYWN0ZXIgcmFuZ2VzIGZvciBidWlsdC1pbiBjaGFyIGNsYXNzZXMpICov CitEVUtfTE9DQUwgdm9pZCBkdWtfX2FwcGVuZF91MTZfbGlzdChkdWtfcmVfY29tcGlsZXJfY3R4 ICpyZV9jdHgsIGNvbnN0IGR1a191aW50MTZfdCAqdmFsdWVzLCBkdWtfdWludDMyX3QgY291bnQp IHsKKwkvKiBDYWxsIHNpdGVzIGRvbid0IG5lZWQgdGhlIHJlc3VsdCBsZW5ndGggc28gaXQncyBu b3QgYWNjdW11bGF0ZWQuICovCisJd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJCWR1a19fYXBwZW5k X3UzMihyZV9jdHgsIChkdWtfdWludDMyX3QpICgqdmFsdWVzKyspKTsKKwl9Cit9CisKK0RVS19M T0NBTCB2b2lkIGR1a19faW5zZXJ0X3NsaWNlKGR1a19yZV9jb21waWxlcl9jdHggKnJlX2N0eCwg ZHVrX3VpbnQzMl90IG9mZnNldCwgZHVrX3VpbnQzMl90IGRhdGFfb2Zmc2V0LCBkdWtfdWludDMy X3QgZGF0YV9sZW5ndGgpIHsKKwlEVUtfQldfSU5TRVJUX0VOU1VSRV9TTElDRShyZV9jdHgtPnRo ciwgJnJlX2N0eC0+YncsIG9mZnNldCwgZGF0YV9vZmZzZXQsIGRhdGFfbGVuZ3RoKTsKK30KKwor RFVLX0xPQ0FMIHZvaWQgZHVrX19hcHBlbmRfc2xpY2UoZHVrX3JlX2NvbXBpbGVyX2N0eCAqcmVf Y3R4LCBkdWtfdWludDMyX3QgZGF0YV9vZmZzZXQsIGR1a191aW50MzJfdCBkYXRhX2xlbmd0aCkg eworCURVS19CV19XUklURV9FTlNVUkVfU0xJQ0UocmVfY3R4LT50aHIsICZyZV9jdHgtPmJ3LCBk YXRhX29mZnNldCwgZGF0YV9sZW5ndGgpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3JlbW92 ZV9zbGljZShkdWtfcmVfY29tcGlsZXJfY3R4ICpyZV9jdHgsIGR1a191aW50MzJfdCBkYXRhX29m ZnNldCwgZHVrX3VpbnQzMl90IGRhdGFfbGVuZ3RoKSB7CisJRFVLX0JXX1JFTU9WRV9FTlNVUkVf U0xJQ0UocmVfY3R4LT50aHIsICZyZV9jdHgtPmJ3LCBkYXRhX29mZnNldCwgZGF0YV9sZW5ndGgp OworfQorCisvKgorICogIEluc2VydCBhIGp1bXAgb2Zmc2V0IGF0ICdvZmZzZXQnIHRvIGNvbXBs ZXRlIGFuIGluc3RydWN0aW9uCisgKiAgKHRoZSBqdW1wIG9mZnNldCBpcyBhbHdheXMgdGhlIGxh c3QgY29tcG9uZW50IG9mIGFuIGluc3RydWN0aW9uKS4KKyAqICBUaGUgJ3NraXAnIGFyZ3VtZW50 IG11c3QgYmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8gJ29mZnNldCcsCisgKiAgLXdpdGhvdXQtIHRh a2luZyBpbnRvIGFjY291bnQgdGhlIHNraXAgZmllbGQgYmVpbmcgaW5zZXJ0ZWQuCisgKgorICog ICAgICAgLi4uIEEgQiBDIGlucyBYIFkgWiAuLi4gICAoaW5zIG1heSBiZSBhIEpVTVAsIFNQTElU MS9TUExJVDIsIGV0YykKKyAqICAgPT4gIC4uLiBBIEIgQyBpbnMgU0tJUCBYIFkgWgorICoKKyAq ICBDb21wdXRpbmcgdGhlIGZpbmFsIChhZGp1c3RlZCkgc2tpcCB2YWx1ZSwgd2hpY2ggaXMgcmVs YXRpdmUgdG8gdGhlCisgKiAgZmlyc3QgYnl0ZSBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiwgaXMg YSBiaXQgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlCisgKiAgdmFyaWFibGUgbGVuZ3RoIFVURi04IGVu Y29kaW5nLiAgU2VlIGRvYy9yZWdleHAucnN0IGZvciBkaXNjdXNzaW9uLgorICovCitEVUtfTE9D QUwgZHVrX3VpbnQzMl90IGR1a19faW5zZXJ0X2p1bXBfb2Zmc2V0KGR1a19yZV9jb21waWxlcl9j dHggKnJlX2N0eCwgZHVrX3VpbnQzMl90IG9mZnNldCwgZHVrX2ludDMyX3Qgc2tpcCkgeworI2lm IDAKKwkvKiBJdGVyYXRpdmUgc29sdXRpb24uICovCisJaWYgKHNraXAgPCAwKSB7CisJCWR1a19z bWFsbF9pbnRfdCBsZW47CisJCS8qIHR3byBlbmNvZGluZyBhdHRlbXB0cyBzdWZmaWNlcyAqLwor CQlsZW4gPSBkdWtfdW5pY29kZV9nZXRfeHV0ZjhfbGVuZ3RoKChkdWtfY29kZXBvaW50X3QpIGR1 a19fZW5jb2RlX2kzMihza2lwKSk7CisJCWxlbiA9IGR1a191bmljb2RlX2dldF94dXRmOF9sZW5n dGgoKGR1a19jb2RlcG9pbnRfdCkgZHVrX19lbmNvZGVfaTMyKHNraXAgLSAoZHVrX2ludDMyX3Qp IGxlbikpOworCQlEVUtfQVNTRVJUKGR1a191bmljb2RlX2dldF94dXRmOF9sZW5ndGgoZHVrX19l bmNvZGVfaTMyKHNraXAgLSAoZHVrX2ludDMyX3QpIGxlbikpID09IGxlbik7ICAvKiBubyBjaGFu Z2UgKi8KKwkJc2tpcCAtPSAoZHVrX2ludDMyX3QpIGxlbjsKKwl9CisjZW5kaWYKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9QUkVGRVJfU0laRSkKKwkvKiBDbG9zZWQgZm9ybSBzb2x1dGlvbiwgdGhp cyBwcm9kdWNlcyBzbWFsbGVzdCBjb2RlLgorCSAqIFNlZSByZV9uZWdfanVtcF9vZmZzZXQgKGNs b3NlZDIpLgorCSAqLworCWlmIChza2lwIDwgMCkgeworCQlza2lwLS07CisJCWlmIChza2lwIDwg LTB4M2ZMKSB7CisJCQlza2lwLS07CisJCX0KKwkJaWYgKHNraXAgPCAtMHgzZmZMKSB7CisJCQlz a2lwLS07CisJCX0KKwkJaWYgKHNraXAgPCAtMHg3ZmZmTCkgeworCQkJc2tpcC0tOworCQl9CisJ CWlmIChza2lwIDwgLTB4ZmZmZmZMKSB7CisJCQlza2lwLS07CisJCX0KKwkJaWYgKHNraXAgPCAt MHgxZmZmZmZmTCkgeworCQkJc2tpcC0tOworCQl9CisJCWlmIChza2lwIDwgLTB4M2ZmZmZmZmZM KSB7CisJCQlza2lwLS07CisJCX0KKwl9CisjZWxzZSAgLyogRFVLX1VTRV9QUkVGRVJfU0laRSAq LworCS8qIENsb3NlZCBmb3JtIHNvbHV0aW9uLCB0aGlzIHByb2R1Y2VzIGZhc3Rlc3QgY29kZS4K KwkgKiBTZWUgcmVfbmVnX2p1bXBfb2Zmc2V0IChjbG9zZWQxKS4KKwkgKi8KKwlpZiAoc2tpcCA8 IDApIHsKKwkJaWYgKHNraXAgPj0gLTB4M2VMKSB7CisJCQlza2lwIC09IDE7CisJCX0gZWxzZSBp ZiAoc2tpcCA+PSAtMHgzZmRMKSB7CisJCQlza2lwIC09IDI7CisJCX0gZWxzZSBpZiAoc2tpcCA+ PSAtMHg3ZmZjTCkgeworCQkJc2tpcCAtPSAzOworCQl9IGVsc2UgaWYgKHNraXAgPj0gLTB4ZmZm ZmJMKSB7CisJCQlza2lwIC09IDQ7CisJCX0gZWxzZSBpZiAoc2tpcCA+PSAtMHgxZmZmZmZhTCkg eworCQkJc2tpcCAtPSA1OworCQl9IGVsc2UgaWYgKHNraXAgPj0gLTB4M2ZmZmZmZjlMKSB7CisJ CQlza2lwIC09IDY7CisJCX0gZWxzZSB7CisJCQlza2lwIC09IDc7CisJCX0KKwl9CisjZW5kaWYg IC8qIERVS19VU0VfUFJFRkVSX1NJWkUgKi8KKworCXJldHVybiBkdWtfX2luc2VydF9pMzIocmVf Y3R4LCBvZmZzZXQsIHNraXApOworfQorCitEVUtfTE9DQUwgZHVrX3VpbnQzMl90IGR1a19fYXBw ZW5kX2p1bXBfb2Zmc2V0KGR1a19yZV9jb21waWxlcl9jdHggKnJlX2N0eCwgZHVrX2ludDMyX3Qg c2tpcCkgeworCXJldHVybiAoZHVrX3VpbnQzMl90KSBkdWtfX2luc2VydF9qdW1wX29mZnNldChy ZV9jdHgsIChkdWtfdWludDMyX3QpIERVS19fUkVfQlVGTEVOKHJlX2N0eCksIHNraXApOworfQor CisvKgorICogIGR1a19yZV9yYW5nZV9jYWxsYmFjayBmb3IgZ2VuZXJhdGluZyBjaGFyYWN0ZXIg Y2xhc3MgcmFuZ2VzLgorICoKKyAqICBXaGVuIGlnbm9yZUNhc2UgaXMgZmFsc2UsIHRoZSByYW5n ZSBpcyBzaW1wbHkgZW1pdHRlZCBhcyBpcy4gIFdlIGRvbid0LAorICogIGZvciBpbnN0YW5jZSwg ZWxpbWluYXRlIGR1cGxpY2F0ZXMgb3Igb3ZlcmxhcHBpbmcgcmFuZ2VzIGluIGEgY2hhcmFjdGVy CisgKiAgY2xhc3MuCisgKgorICogIFdoZW4gaWdub3JlQ2FzZSBpcyB0cnVlIGJ1dCB0aGUgJ2Rp cmVjdCcgZmxhZyBpcyBzZXQsIHRoZSBjYWxsZXIga25vd3MKKyAqICB0aGF0IHRoZSByYW5nZSBj YW5vbmljYWxpemVzIHRvIGl0c2VsZiBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZywKKyAq ICBzbyB0aGUgcmFuZ2UgaXMgZW1pdHRlZCBhcyBpcy4gIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCBm b3IgYnVpbHQtaW4gcmFuZ2VzCisgKiAgbGlrZSBcVy4KKyAqCisgKiAgT3RoZXJ3aXNlLCB3aGVu IGlnbm9yZUNhc2UgaXMgdHJ1ZSwgdGhlIHJhbmdlIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWQKKyAq ICB0aHJvdWdoIGNhbm9uaWNhbGl6YXRpb24uICBVbmZvcnR1bmF0ZWx5IGEgY2Fub25pY2FsaXpl ZCB2ZXJzaW9uIG9mIGEKKyAqICBjb250aW51b3VzIHJhbmdlIGlzIG5vdCBuZWNlc3NhcmlseSBj b250aW51b3VzIChlLmcuIFt4LXtdIGlzIGNvbnRpbnVvdXMKKyAqICBidXQgW1gte10gaXMgbm90 KS4gIEFzIGEgcmVzdWx0LCBhIHNpbmdsZSBpbnB1dCByYW5nZSBtYXkgZXhwYW5kIHRvIGEgbG90 CisgKiAgb2Ygb3V0cHV0IHJhbmdlcy4gIFRoZSBjdXJyZW50IGFsZ29yaXRobSBjcmVhdGVzIHRo ZSBjYW5vbmljYWxpemVkIHJhbmdlcworICogIGZvb3RwcmludCBlZmZpY2llbnRseSBhdCB0aGUg Y29zdCBvZiBjb21waWxlIHRpbWUgZXhlY3V0aW9uIHRpbWU7IHNlZQorICogIGRvYy9yZWdleHAu cnN0IGZvciBkaXNjdXNzaW9uLCBhbmQgc29tZSBtb3JlIGRldGFpbHMgYmVsb3cuCisgKgorICog IE5vdGUgdGhhdCB0aGUgY3R4LT5ucmFuZ2VzIGlzIGEgY29udGV4dC13aWRlIHRlbXBvcmFyeSB2 YWx1ZS4gIFRoaXMgaXMgT0sKKyAqICBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBtdWx0aXBsZSBj aGFyYWN0ZXIgY2xhc3NlcyBiZWluZyBwYXJzZWQKKyAqICBzaW11bHRhbmVvdXNseS4KKyAqCisg KiAgTW9yZSBkZXRhaWwgb24gY2Fub25pY2FsaXphdGlvbjoKKyAqCisgKiAgQ29uY2VwdHVhbGx5 LCBhIHJhbmdlIGlzIGNhbm9uaWNhbGl6ZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSByYW5nZSwK KyAqICBub3JtYWxpemluZyBlYWNoIGNvZGVwb2ludCBieSBjb252ZXJ0aW5nIGl0IHRvIHVwcGVy Y2FzZSwgYW5kIGdlbmVyYXRpbmcKKyAqICBhIHNldCBvZiByZXN1bHQgcmFuZ2VzLgorICoKKyAq ICBJZGVhbGx5IGEgbWluaW1hbCBzZXQgb2Ygb3V0cHV0IHJhbmdlcyB3b3VsZCBiZSBlbWl0dGVk IGJ5IG1lcmdpbmcgYWxsCisgKiAgcG9zc2libGUgcmFuZ2VzIGV2ZW4gaWYgdGhleSdyZSBlbWl0 dGVkIG91dCBvZiBzZXF1ZW5jZS4gIEJlY2F1c2UgdGhlCisgKiAgaW5wdXQgc3RyaW5nIGlzIGFs c28gY2FzZSBub3JtYWxpemVkIGR1cmluZyBtYXRjaGluZywgc29tZSBjb2RlcG9pbnRzCisgKiAg bmV2ZXIgb2NjdXIgYXQgcnVudGltZTsgdGhlc2UgImRvbid0IGNhcmUiIGNvZGVwb2ludHMgY2Fu IGJlIGluY2x1ZGVkIG9yCisgKiAgZXhjbHVkZWQgZnJvbSByYW5nZXMgd2hlbiBtZXJnaW5nL29w dGltaXppbmcgcmFuZ2VzLgorICoKKyAqICBUaGUgY3VycmVudCBhbGdvcml0aG0gZG9lcyBub3Qg ZG8gb3B0aW1hbCByYW5nZSBtZXJnaW5nLiAgUmF0aGVyLCBvdXRwdXQKKyAqICBjb2RlcG9pbnRz IGFyZSBnZW5lcmF0ZWQgaW4gc2VxdWVuY2UsIGFuZCB3aGVuIHRoZSBvdXRwdXQgY29kZXBvaW50 cyBhcmUKKyAqICBjb250aW51b3VzIChDUCwgQ1ArMSwgQ1ArMiwgLi4uKSwgdGhleSBhcmUgbWVy Z2VkIGxvY2FsbHkgaW50byBhcyBsYXJnZSBhCisgKiAgcmFuZ2UgYXMgcG9zc2libGUuICBBIHNt YWxsIGNhbm9uaWNhbGl6YXRpb24gYml0bWFwIGlzIHVzZWQgdG8gcmVkdWNlCisgKiAgYWN0dWFs IGNvZGVwb2ludCBjYW5vbmljYWxpemF0aW9ucyB3aGljaCBhcmUgcXVpdGUgc2xvdyBhdCBwcmVz ZW50LiAgVGhlCisgKiAgYml0bWFwIHByb3ZpZGVzIGEgImNvZGVwb2ludCBibG9jayBpcyBjb250 aW51b3VzIHdpdGggcmVzcGVjdCB0bworICogIGNhbm9uaWNhbGl6YXRpb24iIGZvciBOLWNvZGVw b2ludCBibG9ja3MuICBUaGlzIGFsbG93cyBibG9ja3MgdG8gYmUKKyAqICBza2lwcGVkIHF1aWNr bHkuCisgKgorICogIFRoZXJlIGFyZSBhIG51bWJlciBvZiBzaG9ydGNvbWluZ3MgYW5kIGZ1dHVy ZSB3b3JrIGhlcmU6CisgKgorICogICAgLSBJbmRpdmlkdWFsIGNvZGVwb2ludCBub3JtYWxpemF0 aW9ucyBhcmUgc2xvdyBiZWNhdXNlIHRoZXkgaW52b2x2ZQorICogICAgICB3YWxraW5nIGJpdC1w YWNrZWQgcnVsZXMgd2l0aG91dCBhIGxvb2t1cCBpbmRleC4KKyAqCisgKiAgICAtIFRoZSBjb25j ZXB0dWFsIGFsZ29yaXRobSBuZWVkcyB0byBjYW5vbmljYWxpemUgZXZlcnkgY29kZXBvaW50IGlu IHRoZQorICogICAgICBpbnB1dCByYW5nZSB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXQgcmFuZ2Uo cykuICBFdmVuIHdpdGggdGhlIHNtYWxsCisgKiAgICAgIGNhbm9uaWNhbGl6YXRpb24gYml0bWFw IHRoZSBhbGdvcml0aG0gcnVucyBxdWl0ZSBzbG93bHkgZm9yIHdvcnN0IGNhc2UKKyAqICAgICAg aW5wdXRzLiAgVGhlcmUgYXJlIG1hbnkgZGF0YSBzdHJ1Y3R1cmUgYWx0ZXJuYXRpdmVzIHRvIGlt cHJvdmUgdGhpcy4KKyAqCisgKiAgICAtIFdoaWxlIHRoZSBjdXJyZW50IGFsZ29yaXRobSBnZW5l cmF0ZXMgbWF4aW1hbCBvdXRwdXQgcmFuZ2VzIHdoZW4gdGhlCisgKiAgICAgIG91dHB1dCBjb2Rl cG9pbnRzIGFyZSBlbWl0dGVkIGxpbmVhcmx5LCBvdXRwdXQgcmFuZ2VzIGFyZSBub3Qgc29ydGVk IG9yCisgKiAgICAgIG1lcmdlZCBvdGhlcndpc2UuICBJbiB0aGUgd29yc3QgY2FzZSBhIGxvdCBv ZiByYW5nZXMgYXJlIGVtaXR0ZWQgd2hlbgorICogICAgICBtb3N0IG9mIHRoZSByYW5nZXMgY291 bGQgYmUgbWVyZ2VkLiAgSW4gdGhpcyBwcm9jZXNzIG9uZSBjb3VsZCB0YWtlCisgKiAgICAgIGFk dmFudGFnZSBvZiAiZG9uJ3QgY2FyZSIgY29kZXBvaW50cywgd2hpY2ggYXJlIG5ldmVyIG1hdGNo ZWQgYWdhaW5zdCBhdAorICogICAgICBydW50aW1lIGR1ZSB0byBjYW5vbmljYWxpemF0aW9uIG9m IGlucHV0IGNvZGVwb2ludHMgYmVmb3JlIGNvbXBhcmlzb24sCisgKiAgICAgIHRvIG1lcmdlIG90 aGVyd2lzZSBkaXNjb250aW51b3VzIG91dHB1dCByYW5nZXMuCisgKgorICogICAgLSBUaGUgcnVu dGltZSBkYXRhIHN0cnVjdHVyZSBpcyBqdXN0IGEgbGluZWFyIGxpc3Qgb2YgcmFuZ2VzIHRvIG1h dGNoCisgKiAgICAgIGFnYWluc3QuICBUaGlzIGNhbiBiZSBxdWl0ZSBzbG93IGlmIHRoZXJlIGFy ZSBhIGxvdCBvZiBvdXRwdXQgcmFuZ2VzLgorICogICAgICBUaGVyZSBhcmUgdmFyaW91cyB3YXlz IHRvIG1ha2UgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgcmFuZ2VzIGZhc3RlciwKKyAqICAgICAgZS5n LiBzb3J0aW5nIHRoZSByYW5nZXMgYW5kIHVzaW5nIGEgYmluYXJ5IHNlYXJjaDsgc2tpcCBsaXN0 czsgdHJlZQorICogICAgICBiYXNlZCByZXByZXNlbnRhdGlvbnM7IGZ1bGwgb3IgYXBwcm94aW1h dGUgY29kZXBvaW50IGJpdG1hcHMsIGV0Yy4KKyAqCisgKiAgICAtIE9ubHkgQk1QIGlzIHN1cHBv cnRlZCwgY29kZXBvaW50cyBhYm92ZSBCTVAgYXJlIGFzc3VtZWQgdG8gY2Fub25pY2FsaXplCisg KiAgICAgIHRvIHRoZW1zZWx2ZXMuICBGb3Igbm93IHRoaXMgaXMgb25lIHBsYWNlIHdoZXJlIHdl IGRvbid0IHdhbnQgdG8KKyAqICAgICAgc3VwcG9ydCBjaGFycyBvdXRzaWRlIHRoZSBCTVAsIGJl Y2F1c2UgdGhlIGV4aGF1c3RpdmUgc2VhcmNoIHdvdWxkIGJlCisgKiAgICAgIG1hc3NpdmVseSBs YXJnZXIuICBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBzdXBwb3J0IG5vbi1CTVAgd2l0aCBhCisg KiAgICAgIGRpZmZlcmVudCBhbGdvcml0aG0sIG9yIHBlcmhhcHMgZG9pbmcgY2FzZSBub3JtYWxp emF0aW9uIG9ubHkgYXQgbWF0Y2gKKyAqICAgICAgdGltZS4KKyAqLworCitEVUtfTE9DQUwgdm9p ZCBkdWtfX3JlZ2V4cF9lbWl0X3JhbmdlKGR1a19yZV9jb21waWxlcl9jdHggKnJlX2N0eCwgZHVr X2NvZGVwb2ludF90IHIxLCBkdWtfY29kZXBvaW50X3QgcjIpIHsKKwlEVUtfQVNTRVJUKHIyID49 IHIxKTsKKwlkdWtfX2FwcGVuZF91MzIocmVfY3R4LCAoZHVrX3VpbnQzMl90KSByMSk7CisJZHVr X19hcHBlbmRfdTMyKHJlX2N0eCwgKGR1a191aW50MzJfdCkgcjIpOworCXJlX2N0eC0+bnJhbmdl cysrOworfQorCisjaWYgZGVmaW5lZChEVUtfVVNFX1JFR0VYUF9DQU5PTl9CSVRNQVApCisvKiBG aW5kIG5leHQgY2Fub25pY2FsaXphdGlvbiBkaXNjb250aW51aXR5IChjb25zZXJ2YXRpdmUgZXN0 aW1hdGUpIHN0YXJ0aW5nCisgKiBmcm9tICdzdGFydCcsIG5vdCBleGNlZWRpbmcgJ2VuZCcuICBJ ZiBjb250aW51aXR5IGlzIGZpbmUgdXAgdG8gJ2VuZCcKKyAqIGluY2x1c2l2ZSwgcmV0dXJucyBl bmQuICBNaW5pbXVtIHBvc3NpYmxlIHJldHVybiB2YWx1ZSBpcyBzdGFydC4KKyAqLworRFVLX0xP Q0FMIGR1a19jb2RlcG9pbnRfdCBkdWtfX3JlX2Nhbm9uX25leHRfZGlzY29udGludWl0eShkdWtf Y29kZXBvaW50X3Qgc3RhcnQsIGR1a19jb2RlcG9pbnRfdCBlbmQpIHsKKwlkdWtfdWludF90IHN0 YXJ0X2JsazsKKwlkdWtfdWludF90IGVuZF9ibGs7CisJZHVrX3VpbnRfdCBibGs7CisJZHVrX3Vp bnRfdCBvZmZzZXQ7CisJZHVrX3VpbnQ4X3QgbWFzazsKKworCS8qIEluY2x1c2l2ZSBibG9jayBy YW5nZS4gKi8KKwlEVUtfQVNTRVJUKHN0YXJ0ID49IDApOworCURVS19BU1NFUlQoZW5kID49IDAp OworCURVS19BU1NFUlQoZW5kID49IHN0YXJ0KTsKKwlzdGFydF9ibGsgPSAoZHVrX3VpbnRfdCkg KHN0YXJ0ID4+IERVS19DQU5PTl9CSVRNQVBfQkxLU0hJRlQpOworCWVuZF9ibGsgPSAoZHVrX3Vp bnRfdCkgKGVuZCA+PiBEVUtfQ0FOT05fQklUTUFQX0JMS1NISUZUKTsKKworCWZvciAoYmxrID0g c3RhcnRfYmxrOyBibGsgPD0gZW5kX2JsazsgYmxrKyspIHsKKwkJb2Zmc2V0ID0gYmxrID4+IDM7 CisJCW1hc2sgPSAxVSA8PCAoYmxrICYgMHgwNyk7CisJCWlmIChvZmZzZXQgPj0gc2l6ZW9mKGR1 a191bmljb2RlX3JlX2Nhbm9uX2JpdG1hcCkpIHsKKwkJCS8qIFJlYWNoZWQgbm9uLUJNUCByYW5n ZSB3aGljaCBpcyBhc3N1bWVkIGNvbnRpbnVvdXMuICovCisJCQlyZXR1cm4gZW5kOworCQl9CisJ CURVS19BU1NFUlQob2Zmc2V0IDwgc2l6ZW9mKGR1a191bmljb2RlX3JlX2Nhbm9uX2JpdG1hcCkp OworCQlpZiAoKGR1a191bmljb2RlX3JlX2Nhbm9uX2JpdG1hcFtvZmZzZXRdICYgbWFzaykgPT0g MCkgeworCQkJLyogQmxvY2sgaXMgZGlzY29udGludW91cywgY29udGludWl0eSBpcyBndWFyYW50 ZWVkCisJCQkgKiBvbmx5IHVwIHRvIGVuZCBvZiBwcmV2aW91cyBibG9jayAoKzEgZm9yIGV4Y2x1 c2l2ZQorCQkJICogcmV0dXJuIHZhbHVlID0+IHN0YXJ0IG9mIGN1cnJlbnQgYmxvY2spLiAgU3Rh cnQKKwkJCSAqIGJsb2NrIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcuCisJCQkgKi8KKwkJCWlm IChibGsgPiBzdGFydF9ibGspIHsKKwkJCQlyZXR1cm4gKGR1a19jb2RlcG9pbnRfdCkgKGJsayA8 PCBEVUtfQ0FOT05fQklUTUFQX0JMS1NISUZUKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIHN0 YXJ0OworCQkJfQorCQl9CisJfQorCURVS19BU1NFUlQoYmxrID09IGVuZF9ibGsgKyAxKTsgIC8q IFJlYWNoZWQgZW5kIGJsb2NrIHdoaWNoIGlzIGNvbnRpbnVvdXMuICovCisJcmV0dXJuIGVuZDsK K30KKyNlbHNlICAvKiBEVUtfVVNFX1JFR0VYUF9DQU5PTl9CSVRNQVAgKi8KK0RVS19MT0NBTCBk dWtfY29kZXBvaW50X3QgZHVrX19yZV9jYW5vbl9uZXh0X2Rpc2NvbnRpbnVpdHkoZHVrX2NvZGVw b2ludF90IHN0YXJ0LCBkdWtfY29kZXBvaW50X3QgZW5kKSB7CisJRFVLX0FTU0VSVChzdGFydCA+ PSAwKTsKKwlEVUtfQVNTRVJUKGVuZCA+PSAwKTsKKwlEVUtfQVNTRVJUKGVuZCA+PSBzdGFydCk7 CisJaWYgKHN0YXJ0ID49IDB4MTAwMDApIHsKKwkJLyogRXZlbiB3aXRob3V0IHRoZSBiaXRtYXAs IHRyZWF0IG5vbi1CTVAgYXMgY29udGludW91cy4gKi8KKwkJcmV0dXJuIGVuZDsKKwl9CisJcmV0 dXJuIHN0YXJ0OworfQorI2VuZGlmICAvKiBEVUtfVVNFX1JFR0VYUF9DQU5PTl9CSVRNQVAgKi8K KworRFVLX0xPQ0FMIHZvaWQgZHVrX19yZWdleHBfZ2VuZXJhdGVfcmFuZ2VzKHZvaWQgKnVzZXJk YXRhLCBkdWtfY29kZXBvaW50X3QgcjEsIGR1a19jb2RlcG9pbnRfdCByMiwgZHVrX2Jvb2xfdCBk aXJlY3QpIHsKKwlkdWtfcmVfY29tcGlsZXJfY3R4ICpyZV9jdHggPSAoZHVrX3JlX2NvbXBpbGVy X2N0eCAqKSB1c2VyZGF0YTsKKwlkdWtfY29kZXBvaW50X3Qgcl9zdGFydDsKKwlkdWtfY29kZXBv aW50X3Qgcl9lbmQ7CisJZHVrX2NvZGVwb2ludF90IGk7CisJZHVrX2NvZGVwb2ludF90IHQ7CisJ ZHVrX2NvZGVwb2ludF90IHJfZGlzYzsKKworCURVS19ERChEVUtfRERQUklOVCgiZHVrX19yZWdl eHBfZ2VuZXJhdGVfcmFuZ2VzKCk6IHJlX2N0eD0lcCwgcmFuZ2U9WyVsZCwlbGRdIGRpcmVjdD0l bGQiLAorCSAgICAgICAgICAgICAgICAgICAodm9pZCAqKSByZV9jdHgsIChsb25nKSByMSwgKGxv bmcpIHIyLCAobG9uZykgZGlyZWN0KSk7CisKKwlEVUtfQVNTRVJUKHIyID49IHIxKTsgIC8qIFN5 bnRheEVycm9yIGZvciBvdXQgb2Ygb3JkZXIgcmFuZ2UuICovCisKKwlpZiAoZGlyZWN0IHx8IChy ZV9jdHgtPnJlX2ZsYWdzICYgRFVLX1JFX0ZMQUdfSUdOT1JFX0NBU0UpID09IDApIHsKKwkJRFVL X0REKERVS19ERFBSSU5UKCJkaXJlY3Qgb3Igbm90IGNhc2Ugc2Vuc2l0aXZlLCBlbWl0IHJhbmdl OiBbJWxkLCVsZF0iLCAobG9uZykgcjEsIChsb25nKSByMikpOworCQlkdWtfX3JlZ2V4cF9lbWl0 X3JhbmdlKHJlX2N0eCwgcjEsIHIyKTsKKwkJcmV0dXJuOworCX0KKworCURVS19ERChEVUtfRERQ UklOVCgiY2FzZSBzZW5zaXRpdmUsIHByb2Nlc3MgcmFuZ2U6IFslbGQsJWxkXSIsIChsb25nKSBy MSwgKGxvbmcpIHIyKSk7CisKKwlyX3N0YXJ0ID0gZHVrX3VuaWNvZGVfcmVfY2Fub25pY2FsaXpl X2NoYXIocmVfY3R4LT50aHIsIHIxKTsKKwlyX2VuZCA9IHJfc3RhcnQ7CisKKwlmb3IgKGkgPSBy MSArIDE7IGkgPD0gcjI7KSB7CisJCS8qIElucHV0IGNvZGVwb2ludCBzcGFjZSBwcm9jZXNzZWQg dXAgdG8gaS0xLCBhbmQKKwkJICogY3VycmVudCByYW5nZSBpbiByX3tzdGFydCxlbmR9IGlzIHVw LXRvLWRhdGUKKwkJICogKGluY2x1c2l2ZSkgYW5kIG1heSBlaXRoZXIgYnJlYWsgb3IgY29udGlu dWUuCisJCSAqLworCQlyX2Rpc2MgPSBkdWtfX3JlX2Nhbm9uX25leHRfZGlzY29udGludWl0eShp LCByMik7CisJCURVS19BU1NFUlQocl9kaXNjID49IGkpOworCQlEVUtfQVNTRVJUKHJfZGlzYyA8 PSByMik7CisKKwkJcl9lbmQgKz0gcl9kaXNjIC0gaTsgIC8qIE1heSBiZSB6ZXJvLiAqLworCQl0 ID0gZHVrX3VuaWNvZGVfcmVfY2Fub25pY2FsaXplX2NoYXIocmVfY3R4LT50aHIsIHJfZGlzYyk7 CisJCWlmICh0ID09IHJfZW5kICsgMSkgeworCQkJLyogTm90IGFjdHVhbGx5IGEgZGlzY29udGlu dWl0eSwgY29udGludWUgcmFuZ2UKKwkJCSAqIHRvIHJfZGlzYyBhbmQgcmVjaGVjay4KKwkJCSAq LworCQkJcl9lbmQgPSB0OworCQl9IGVsc2UgeworCQkJZHVrX19yZWdleHBfZW1pdF9yYW5nZShy ZV9jdHgsIHJfc3RhcnQsIHJfZW5kKTsKKwkJCXJfc3RhcnQgPSB0OworCQkJcl9lbmQgPSB0Owor CQl9CisJCWkgPSByX2Rpc2MgKyAxOyAgLyogR3VhcmFudGVlcyBwcm9ncmVzcy4gKi8KKwl9CisJ ZHVrX19yZWdleHBfZW1pdF9yYW5nZShyZV9jdHgsIHJfc3RhcnQsIHJfZW5kKTsKKworI2lmIDAg IC8qIEV4aGF1c3RpdmUgc2VhcmNoLCB2ZXJ5IHNsb3cuICovCisJcl9zdGFydCA9IGR1a191bmlj b2RlX3JlX2Nhbm9uaWNhbGl6ZV9jaGFyKHJlX2N0eC0+dGhyLCByMSk7CisJcl9lbmQgPSByX3N0 YXJ0OworCWZvciAoaSA9IHIxICsgMTsgaSA8PSByMjsgaSsrKSB7CisJCXQgPSBkdWtfdW5pY29k ZV9yZV9jYW5vbmljYWxpemVfY2hhcihyZV9jdHgtPnRociwgaSk7CisJCWlmICh0ID09IHJfZW5k ICsgMSkgeworCQkJcl9lbmQgPSB0OworCQl9IGVsc2UgeworCQkJRFVLX0REKERVS19ERFBSSU5U KCJjYW5vbmljYWxpemVkLCBlbWl0IHJhbmdlOiBbJWxkLCVsZF0iLCAobG9uZykgcl9zdGFydCwg KGxvbmcpIHJfZW5kKSk7CisJCQlkdWtfX2FwcGVuZF91MzIocmVfY3R4LCAoZHVrX3VpbnQzMl90 KSByX3N0YXJ0KTsKKwkJCWR1a19fYXBwZW5kX3UzMihyZV9jdHgsIChkdWtfdWludDMyX3QpIHJf ZW5kKTsKKwkJCXJlX2N0eC0+bnJhbmdlcysrOworCQkJcl9zdGFydCA9IHQ7CisJCQlyX2VuZCA9 IHQ7CisJCX0KKwl9CisJRFVLX0REKERVS19ERFBSSU5UKCJjYW5vbmljYWxpemVkLCBlbWl0IHJh bmdlOiBbJWxkLCVsZF0iLCAobG9uZykgcl9zdGFydCwgKGxvbmcpIHJfZW5kKSk7CisJZHVrX19h cHBlbmRfdTMyKHJlX2N0eCwgKGR1a191aW50MzJfdCkgcl9zdGFydCk7CisJZHVrX19hcHBlbmRf dTMyKHJlX2N0eCwgKGR1a191aW50MzJfdCkgcl9lbmQpOworCXJlX2N0eC0+bnJhbmdlcysrOwor I2VuZGlmCit9CisKKy8qCisgKiAgUGFyc2UgcmVnZXhwIERpc2p1bmN0aW9uLiAgTW9zdCBvZiBy ZWdleHAgY29tcGlsYXRpb24gaGFwcGVucyBoZXJlLgorICoKKyAqICBIYW5kbGVzIERpc2p1bmN0 aW9uLCBBbHRlcm5hdGl2ZSwgYW5kIFRlcm0gcHJvZHVjdGlvbnMgZGlyZWN0bHkgd2l0aG91dAor ICogIHJlY3Vyc2lvbi4gIFRoZSBvbmx5IGNvbnN0cnVjdHMgcmVxdWlyaW5nIHJlY3Vyc2lvbiBh cmUgcG9zaXRpdmUvbmVnYXRpdmUKKyAqICBsb29rYWhlYWRzLCBjYXB0dXJpbmcgcGFyZW50aGVz ZXMsIGFuZCBub24tY2FwdHVyaW5nIHBhcmVudGhlc2VzLgorICoKKyAqICBUaGUgZnVuY3Rpb24g ZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlbnRpcmUgZGlzanVuY3Rpb24gaXMgYSAnc2ltcGxlIGF0 b20nCisgKiAgKHNlZSBkb2MvcmVnZXhwLnJzdCBkaXNjdXNzaW9uIG9uICdzaW1wbGUgcXVhbnRp ZmllcnMnKSBhbmQgaWYgc28sCisgKiAgcmV0dXJucyB0aGUgYXRvbSBjaGFyYWN0ZXIgbGVuZ3Ro IHdoaWNoIGlzIG5lZWRlZCBieSB0aGUgY2FsbGVyIHRvIGtlZXAKKyAqICB0cmFjayBvZiBpdHMg b3duIGF0b20gY2hhcmFjdGVyIGxlbmd0aC4gIEEgZGlzanVuY3Rpb24gd2l0aCBtb3JlIHRoYW4g b25lCisgKiAgYWx0ZXJuYXRpdmUgaXMgbmV2ZXIgY29uc2lkZXJlZCBhIHNpbXBsZSBhdG9tIChh bHRob3VnaCBpbiBzb21lIGNhc2VzCisgKiAgdGhhdCBtaWdodCBiZSB0aGUgY2FzZSkuCisgKgor ICogIFJldHVybiB2YWx1ZTogc2ltcGxlIGF0b20gY2hhcmFjdGVyIGxlbmd0aCBvciA8IDAgaWYg bm90IGEgc2ltcGxlIGF0b20uCisgKiAgQXBwZW5kcyB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBkaXNq dW5jdGlvbiBtYXRjaGVyIHRvIHRoZSBlbmQgb2YgdGhlIHRlbXAKKyAqICBidWZmZXIuCisgKgor ICogIFJlZ2V4cCB0b3AgbGV2ZWwgc3RydWN0dXJlIGlzOgorICoKKyAqICAgIERpc2p1bmN0aW9u ID0gVGVybSoKKyAqICAgICAgICAgICAgICAgIHwgVGVybSogfCBEaXNqdW5jdGlvbgorICoKKyAq ICAgIFRlcm0gPSBBc3NlcnRpb24KKyAqICAgICAgICAgfCBBdG9tCisgKiAgICAgICAgIHwgQXRv bSBRdWFudGlmaWVyCisgKgorICogIEFuIGVtcHR5IFRlcm0gc2VxdWVuY2UgaXMgYSB2YWxpZCBk aXNqdW5jdGlvbiBhbHRlcm5hdGl2ZSAoZS5nLiAvfHx8Y3x8LykuCisgKgorICogIE5vdGVzOgor ICoKKyAqICAgICogVHJhY2tpbmcgb2YgdGhlICdzaW1wbGUtbmVzcycgb2YgdGhlIGN1cnJlbnQg YXRvbSB2cy4gdGhlIGVudGlyZQorICogICAgICBkaXNqdW5jdGlvbiBhcmUgc2VwYXJhdGUgbWF0 dGVycy4gIEZvciBpbnN0YW5jZSwgdGhlIGRpc2p1bmN0aW9uCisgKiAgICAgIG1heSBiZSBjb21w bGV4LCBidXQgaW5kaXZpZHVhbCBhdG9tcyBtYXkgYmUgc2ltcGxlLiAgRnVydGhlcm1vcmUsCisg KiAgICAgIHNpbXBsZSBxdWFudGlmaWVycyBhcmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZSwgZXZl biBpZiB0aGUKKyAqICAgICAgZGlzanVuY3Rpb24gYXMgYSB3aG9sZSBpcyBjb21wbGV4LgorICoK KyAqICAgICogVGhlIGVzdGltYXRlIG9mIHdoZXRoZXIgYW4gYXRvbSBpcyBzaW1wbGUgaXMgY29u c2VydmF0aXZlIG5vdywKKyAqICAgICAgYW5kIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGV4cGFu ZCBpdC4gIEZvciBpbnN0YW5jZSwgY2FwdHVyZXMKKyAqICAgICAgY2F1c2UgdGhlIGRpc2p1bmN0 aW9uIHRvIGJlIG1hcmtlZCBjb21wbGV4LCBldmVuIHRob3VnaCBjYXB0dXJlcworICogICAgICAt Y2FuLSBiZSBoYW5kbGVkIGJ5IHNpbXBsZSBxdWFudGlmaWVycyB3aXRoIHNvbWUgbWlub3IgbW9k aWZpY2F0aW9ucy4KKyAqCisgKiAgICAqIERpc2p1bmN0aW9uICd0YWludGluZycgYXMgJ2NvbXBs ZXgnIGlzIGhhbmRsZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAqICAgICAgbWFpbiBmb3IgbG9vcCBj b2xsZWN0aXZlbHkgZm9yIGF0b21zLiAgQXNzZXJ0aW9ucywgcXVhbnRpZmllcnMsCisgKiAgICAg IGFuZCAnfCcgdG9rZW5zIG5lZWQgdG8gdGFpbnQgdGhlIHJlc3VsdCBtYW51YWxseSBpZiBuZWNl c3NhcnkuCisgKiAgICAgIEFzc2VydGlvbnMgY2Fubm90IGFkZCB0byByZXN1bHQgY2hhciBsZW5n dGgsIG9ubHkgYXRvbXMgKGFuZAorICogICAgICBxdWFudGlmaWVycykgY2FuOyBjdXJyZW50bHkg cXVhbnRpZmllcnMgd2lsbCB0YWludCB0aGUgcmVzdWx0CisgKiAgICAgIGFzIGNvbXBsZXggdGhv dWdoLgorICovCisKK0RVS19MT0NBTCBjb25zdCBkdWtfdWludDE2X3QgKiBjb25zdCBkdWtfX3Jl X3JhbmdlX2xvb2t1cDFbM10gPSB7CisJZHVrX3VuaWNvZGVfcmVfcmFuZ2VzX2RpZ2l0LAorCWR1 a191bmljb2RlX3JlX3Jhbmdlc193aGl0ZSwKKwlkdWtfdW5pY29kZV9yZV9yYW5nZXNfd29yZGNo YXIKK307CitEVUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgZHVrX19yZV9yYW5nZV9sb29rdXAy WzNdID0geworCXNpemVvZihkdWtfdW5pY29kZV9yZV9yYW5nZXNfZGlnaXQpIC8gKDIgKiBzaXpl b2YoZHVrX3VpbnQxNl90KSksCisJc2l6ZW9mKGR1a191bmljb2RlX3JlX3Jhbmdlc193aGl0ZSkg LyAoMiAqIHNpemVvZihkdWtfdWludDE2X3QpKSwKKwlzaXplb2YoZHVrX3VuaWNvZGVfcmVfcmFu Z2VzX3dvcmRjaGFyKSAvICgyICogc2l6ZW9mKGR1a191aW50MTZfdCkpCit9OworCitEVUtfTE9D QUwgdm9pZCBkdWtfX2FwcGVuZF9yYW5nZV9hdG9tX21hdGNoZXIoZHVrX3JlX2NvbXBpbGVyX2N0 eCAqcmVfY3R4LCBkdWtfc21hbGxfdWludF90IHJlX29wLCBjb25zdCBkdWtfdWludDE2X3QgKnJh bmdlcywgZHVrX3NtYWxsX3VpbnRfdCBjb3VudCkgeworI2lmIDAKKwlEVUtfQVNTRVJUKHJlX29w IDw9IDB4N2ZVTCk7CisJRFVLX0FTU0VSVChjb3VudCA8PSAweDdmVUwpOworCWR1a19fYXBwZW5k XzJieXRlcyhyZV9jdHgsIChkdWtfdWludDhfdCkgcmVfb3AsIChkdWtfdWludDhfdCkgY291bnQp OworI2VuZGlmCisJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIHJlX29wKTsKKwlkdWtfX2FwcGVu ZF83Yml0KHJlX2N0eCwgY291bnQpOworCWR1a19fYXBwZW5kX3UxNl9saXN0KHJlX2N0eCwgcmFu Z2VzLCBjb3VudCAqIDIpOworfQorCitEVUtfTE9DQUwgdm9pZCBkdWtfX3BhcnNlX2Rpc2p1bmN0 aW9uKGR1a19yZV9jb21waWxlcl9jdHggKnJlX2N0eCwgZHVrX2Jvb2xfdCBleHBlY3RfZW9mLCBk dWtfX3JlX2Rpc2p1bmN0aW9uX2luZm8gKm91dF9hdG9tX2luZm8pIHsKKwlkdWtfaW50MzJfdCBh dG9tX3N0YXJ0X29mZnNldCA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiBuZWdhdGl2ZSAtPiBu byBhdG9tIG1hdGNoZWQgb24gcHJldmlvdXMgcm91bmQgKi8KKwlkdWtfaW50MzJfdCBhdG9tX2No YXJfbGVuZ3RoID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBuZWdhdGl2ZSAtPiBjb21wbGV4 IGF0b20gKi8KKwlkdWtfdWludDMyX3QgYXRvbV9zdGFydF9jYXB0dXJlcyA9IHJlX2N0eC0+Y2Fw dHVyZXM7ICAvKiB2YWx1ZSBvZiByZV9jdHgtPmNhcHR1cmVzIGF0IHN0YXJ0IG9mIGF0b20gKi8K KwlkdWtfaW50MzJfdCB1bnBhdGNoZWRfZGlzanVuY3Rpb25fc3BsaXQgPSAtMTsKKwlkdWtfaW50 MzJfdCB1bnBhdGNoZWRfZGlzanVuY3Rpb25fanVtcCA9IC0xOworCWR1a191aW50MzJfdCBlbnRy eV9vZmZzZXQgPSAoZHVrX3VpbnQzMl90KSBEVUtfX1JFX0JVRkxFTihyZV9jdHgpOworCWR1a19p bnQzMl90IHJlc19jaGFybGVuID0gMDsgIC8qIC0xIGlmIGRpc2p1bmN0aW9uIGlzIGNvbXBsZXgs IGNoYXIgbGVuZ3RoIGlmIHNpbXBsZSAqLworCWR1a19fcmVfZGlzanVuY3Rpb25faW5mbyB0bXBf ZGlzajsKKworCURVS19BU1NFUlQob3V0X2F0b21faW5mbyAhPSBOVUxMKTsKKworCWlmIChyZV9j dHgtPnJlY3Vyc2lvbl9kZXB0aCA+PSByZV9jdHgtPnJlY3Vyc2lvbl9saW1pdCkgeworCQlEVUtf RVJST1JfUkFOR0UocmVfY3R4LT50aHIsIERVS19TVFJfUkVHRVhQX0NPTVBJTEVSX1JFQ1VSU0lP Tl9MSU1JVCk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwl9CisJcmVfY3R4LT5yZWN1 cnNpb25fZGVwdGgrKzsKKworI2lmIDAKKwlvdXRfYXRvbV9pbmZvLT5zdGFydF9jYXB0dXJlcyA9 IHJlX2N0eC0+Y2FwdHVyZXM7CisjZW5kaWYKKworCWZvciAoOzspIHsKKwkJLyogYXRvbV9jaGFy X2xlbmd0aCwgYXRvbV9zdGFydF9vZmZzZXQsIGF0b21fc3RhcnRfb2Zmc2V0IHJlZmxlY3QgdGhl CisJCSAqIGF0b20gbWF0Y2hlZCBvbiB0aGUgcHJldmlvdXMgbG9vcC4gIElmIGEgcXVhbnRpZmll ciBpcyBlbmNvdW50ZXJlZAorCQkgKiBvbiB0aGlzIGxvb3AsIHRoZXNlIGFyZSBuZWVkZWQgdG8g aGFuZGxlIHRoZSBxdWFudGlmaWVyIGNvcnJlY3RseS4KKwkJICogbmV3X2F0b21fY2hhcl9sZW5n dGggZXRjIGFyZSBmb3IgdGhlIGF0b20gcGFyc2VkIG9uIHRoaXMgcm91bmQ7CisJCSAqIHRoZXkn cmUgd3JpdHRlbiB0byBhdG9tX2NoYXJfbGVuZ3RoIGV0YyBhdCB0aGUgZW5kIG9mIHRoZSByb3Vu ZC4KKwkJICovCisJCWR1a19pbnQzMl90IG5ld19hdG9tX2NoYXJfbGVuZ3RoOyAgIC8qIGNoYXIg bGVuZ3RoIG9mIHRoZSBhdG9tIHBhcnNlZCBpbiB0aGlzIGxvb3AgKi8KKwkJZHVrX2ludDMyX3Qg bmV3X2F0b21fc3RhcnRfb2Zmc2V0OyAgLyogYnl0ZWNvZGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBh dG9tIHBhcnNlZCBpbiB0aGlzIGxvb3AKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogKGFsbG93cyBxdWFudGlmaWVycyB0byBjb3B5IHRoZSBhdG9tIGJ5dGVjb2RlKQor CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJZHVrX3VpbnQzMl90 IG5ld19hdG9tX3N0YXJ0X2NhcHR1cmVzOyAgLyogcmVfY3R4LT5jYXB0dXJlcyBhdCB0aGUgc3Rh cnQgb2YgdGhlIGF0b20gcGFyc2VkIGluIHRoaXMgbG9vcCAqLworCisJCWR1a19sZXhlcl9wYXJz ZV9yZV90b2tlbigmcmVfY3R4LT5sZXgsICZyZV9jdHgtPmN1cnJfdG9rZW4pOworCisJCURVS19E RChEVUtfRERQUklOVCgicmUgdG9rZW46ICVsZCAobnVtPSVsZCwgY2hhcj0lYykiLAorCQkgICAg ICAgICAgICAgICAgICAgKGxvbmcpIHJlX2N0eC0+Y3Vycl90b2tlbi50LAorCQkgICAgICAgICAg ICAgICAgICAgKGxvbmcpIHJlX2N0eC0+Y3Vycl90b2tlbi5udW0sCisJCSAgICAgICAgICAgICAg ICAgICAocmVfY3R4LT5jdXJyX3Rva2VuLm51bSA+PSAweDIwICYmIHJlX2N0eC0+Y3Vycl90b2tl bi5udW0gPD0gMHg3ZSkgPworCQkgICAgICAgICAgICAgICAgICAgKGludCkgcmVfY3R4LT5jdXJy X3Rva2VuLm51bSA6IChpbnQpICc/JykpOworCisJCS8qIHNldCBieSBhdG9tIGNhc2UgY2xhdXNl cyAqLworCQluZXdfYXRvbV9zdGFydF9vZmZzZXQgPSAtMTsKKwkJbmV3X2F0b21fY2hhcl9sZW5n dGggPSAtMTsKKwkJbmV3X2F0b21fc3RhcnRfY2FwdHVyZXMgPSByZV9jdHgtPmNhcHR1cmVzOwor CisJCXN3aXRjaCAocmVfY3R4LT5jdXJyX3Rva2VuLnQpIHsKKwkJY2FzZSBEVUtfUkVUT0tfRElT SlVOQ1RJT046IHsKKwkJCS8qCisJCQkgKiAgVGhlIGhhbmRsaW5nIGhlcmUgaXMgYSBiaXQgdHJp Y2t5LiAgSWYgYSBwcmV2aW91cyAnfCcgaGFzIGJlZW4gcHJvY2Vzc2VkLAorCQkJICogIHdlIGhh dmUgYSBwZW5kaW5nIHNwbGl0MSBhbmQgYSBwZW5kaW5nIGp1bXAgKGZvciBhIHByZXZpb3VzIG1h dGNoKS4gIFRoZXNlCisJCQkgKiAgbmVlZCB0byBiZSBiYWNrLXBhdGNoZWQgY2FyZWZ1bGx5LiAg U2VlIGRvY3MgZm9yIGEgZGV0YWlsZWQgZXhhbXBsZS4KKwkJCSAqLworCisJCQkvKiBwYXRjaCBw ZW5kaW5nIGp1bXAgYW5kIHNwbGl0ICovCisJCQlpZiAodW5wYXRjaGVkX2Rpc2p1bmN0aW9uX2p1 bXAgPj0gMCkgeworCQkJCWR1a191aW50MzJfdCBvZmZzZXQ7CisKKwkJCQlEVUtfQVNTRVJUKHVu cGF0Y2hlZF9kaXNqdW5jdGlvbl9zcGxpdCA+PSAwKTsKKwkJCQlvZmZzZXQgPSAoZHVrX3VpbnQz Ml90KSB1bnBhdGNoZWRfZGlzanVuY3Rpb25fanVtcDsKKwkJCQlvZmZzZXQgKz0gZHVrX19pbnNl cnRfanVtcF9vZmZzZXQocmVfY3R4LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvZmZzZXQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdWtf aW50MzJfdCkgKERVS19fUkVfQlVGTEVOKHJlX2N0eCkgLSBvZmZzZXQpKTsKKwkJCQkvKiBvZmZz ZXQgaXMgbm93IHRhcmdldCBvZiB0aGUgcGVuZGluZyBzcGxpdCAocmlnaHQgYWZ0ZXIganVtcCkg Ki8KKwkJCQlkdWtfX2luc2VydF9qdW1wX29mZnNldChyZV9jdHgsCisJCQkJICAgICAgICAgICAg ICAgICAgICAgICAgKGR1a191aW50MzJfdCkgdW5wYXRjaGVkX2Rpc2p1bmN0aW9uX3NwbGl0LAor CQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfaW50MzJfdCkgb2Zmc2V0IC0gdW5wYXRj aGVkX2Rpc2p1bmN0aW9uX3NwbGl0KTsKKwkJCX0KKworCQkJLyogYWRkIGEgbmV3IHBlbmRpbmcg c3BsaXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZW50aXJlIGRpc2p1bmN0aW9uICovCisJCQko dm9pZCkgZHVrX19pbnNlcnRfdTMyKHJlX2N0eCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg ZW50cnlfb2Zmc2V0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBEVUtfUkVPUF9TUExJVDEp OyAgIC8qIHByZWZlciBkaXJlY3QgZXhlY3V0aW9uICovCisJCQl1bnBhdGNoZWRfZGlzanVuY3Rp b25fc3BsaXQgPSAoZHVrX2ludDMyX3QpIChlbnRyeV9vZmZzZXQgKyAxKTsgICAvKiArMSBmb3Ig b3Bjb2RlICovCisKKwkJCS8qIGFkZCBhIG5ldyBwZW5kaW5nIG1hdGNoIGp1bXAgZm9yIGxhdGVz dCBmaW5pc2hlZCBhbHRlcm5hdGl2ZSAqLworCQkJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIERV S19SRU9QX0pVTVApOworCQkJdW5wYXRjaGVkX2Rpc2p1bmN0aW9uX2p1bXAgPSAoZHVrX2ludDMy X3QpIERVS19fUkVfQlVGTEVOKHJlX2N0eCk7CisKKwkJCS8qICd0YWludCcgcmVzdWx0IGFzIGNv bXBsZXggKi8KKwkJCXJlc19jaGFybGVuID0gLTE7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERV S19SRVRPS19RVUFOVElGSUVSOiB7CisJCQlpZiAoYXRvbV9zdGFydF9vZmZzZXQgPCAwKSB7CisJ CQkJRFVLX0VSUk9SX1NZTlRBWChyZV9jdHgtPnRociwgRFVLX1NUUl9JTlZBTElEX1FVQU5USUZJ RVJfTk9fQVRPTSk7CisJCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQkJfQorCQkJaWYg KHJlX2N0eC0+Y3Vycl90b2tlbi5xbWluID4gcmVfY3R4LT5jdXJyX3Rva2VuLnFtYXgpIHsKKwkJ CQlEVUtfRVJST1JfU1lOVEFYKHJlX2N0eC0+dGhyLCBEVUtfU1RSX0lOVkFMSURfUVVBTlRJRklF Ul9WQUxVRVMpOworCQkJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwkJCX0KKwkJCWlmIChh dG9tX2NoYXJfbGVuZ3RoID49IDApIHsKKwkJCQkvKgorCQkJCSAqICBTaW1wbGUgYXRvbQorCQkJ CSAqCisJCQkJICogIElmIGF0b21fY2hhcl9sZW5ndGggaXMgemVybywgd2UnbGwgaGF2ZSB1bmJv dW5kZWQgZXhlY3V0aW9uIHRpbWUgZm9yIGUuZy4KKwkJCQkgKiAgLygpKngvLmV4ZWMoJ3gnKS4g IFdlIGNhbid0IGp1c3Qgc2tpcCB0aGUgbWF0Y2ggYmVjYXVzZSBpdCBtaWdodCBoYXZlIHNvbWUK KwkJCQkgKiAgc2lkZSBlZmZlY3RzIChmb3IgaW5zdGFuY2UsIGlmIHdlIGFsbG93ZWQgY2FwdHVy ZXMgaW4gc2ltcGxlIGF0b21zLCB0aGUKKwkJCQkgKiAgY2FwdHVyZSBuZWVkcyB0byBoYXBwZW4p LiAgVGhlIHNpbXBsZSBzb2x1dGlvbiBiZWxvdyBpcyB0byBmb3JjZSB0aGUKKwkJCQkgKiAgcXVh bnRpZmllciB0byBtYXRjaCBhdCBtb3N0IG9uY2UsIHNpbmNlIHRoZSBhZGRpdGlvbmFsIG1hdGNo ZXMgaGF2ZSBubyBlZmZlY3QuCisJCQkJICoKKwkJCQkgKiAgV2l0aCBhIHNpbXBsZSBhdG9tIHRo ZXJlIGNhbiBiZSBubyBjYXB0dXJlIGdyb3Vwcywgc28gbm8gY2FwdHVyZXMgbmVlZAorCQkJCSAq ICB0byBiZSByZXNldC4KKwkJCQkgKi8KKwkJCQlkdWtfaW50MzJfdCBhdG9tX2NvZGVfbGVuZ3Ro OworCQkJCWR1a191aW50MzJfdCBvZmZzZXQ7CisJCQkJZHVrX3VpbnQzMl90IHFtaW4sIHFtYXg7 CisKKwkJCQlxbWluID0gcmVfY3R4LT5jdXJyX3Rva2VuLnFtaW47CisJCQkJcW1heCA9IHJlX2N0 eC0+Y3Vycl90b2tlbi5xbWF4OworCQkJCWlmIChhdG9tX2NoYXJfbGVuZ3RoID09IDApIHsKKwkJ CQkJLyogcW1pbiBhbmQgcW1heCB3aWxsIGJlIDAgb3IgMSAqLworCQkJCQlpZiAocW1pbiA+IDEp IHsKKwkJCQkJCXFtaW4gPSAxOworCQkJCQl9CisJCQkJCWlmIChxbWF4ID4gMSkgeworCQkJCQkJ cW1heCA9IDE7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlkdWtfX2FwcGVuZF9yZW9wKHJlX2N0eCwg RFVLX1JFT1BfTUFUQ0gpOyAgIC8qIGNvbXBsZXRlICdzdWIgYXRvbScgKi8KKwkJCQlhdG9tX2Nv ZGVfbGVuZ3RoID0gKGR1a19pbnQzMl90KSAoRFVLX19SRV9CVUZMRU4ocmVfY3R4KSAtIChkdWtf c2l6ZV90KSBhdG9tX3N0YXJ0X29mZnNldCk7CisKKwkJCQlvZmZzZXQgPSAoZHVrX3VpbnQzMl90 KSBhdG9tX3N0YXJ0X29mZnNldDsKKwkJCQlpZiAocmVfY3R4LT5jdXJyX3Rva2VuLmdyZWVkeSkg eworCQkJCQlvZmZzZXQgKz0gZHVrX19pbnNlcnRfdTMyKHJlX2N0eCwgb2Zmc2V0LCBEVUtfUkVP UF9TUUdSRUVEWSk7CisJCQkJCW9mZnNldCArPSBkdWtfX2luc2VydF91MzIocmVfY3R4LCBvZmZz ZXQsIHFtaW4pOworCQkJCQlvZmZzZXQgKz0gZHVrX19pbnNlcnRfdTMyKHJlX2N0eCwgb2Zmc2V0 LCBxbWF4KTsKKwkJCQkJb2Zmc2V0ICs9IGR1a19faW5zZXJ0X3UzMihyZV9jdHgsIG9mZnNldCwg KGR1a191aW50MzJfdCkgYXRvbV9jaGFyX2xlbmd0aCk7CisJCQkJCW9mZnNldCArPSBkdWtfX2lu c2VydF9qdW1wX29mZnNldChyZV9jdHgsIG9mZnNldCwgYXRvbV9jb2RlX2xlbmd0aCk7CisJCQkJ fSBlbHNlIHsKKwkJCQkJb2Zmc2V0ICs9IGR1a19faW5zZXJ0X3UzMihyZV9jdHgsIG9mZnNldCwg RFVLX1JFT1BfU1FNSU5JTUFMKTsKKwkJCQkJb2Zmc2V0ICs9IGR1a19faW5zZXJ0X3UzMihyZV9j dHgsIG9mZnNldCwgcW1pbik7CisJCQkJCW9mZnNldCArPSBkdWtfX2luc2VydF91MzIocmVfY3R4 LCBvZmZzZXQsIHFtYXgpOworCQkJCQlvZmZzZXQgKz0gZHVrX19pbnNlcnRfanVtcF9vZmZzZXQo cmVfY3R4LCBvZmZzZXQsIGF0b21fY29kZV9sZW5ndGgpOworCQkJCX0KKwkJCQlEVUtfVU5SRUYo b2Zmc2V0KTsgIC8qIHNpbGVuY2Ugc2Nhbi1idWlsZCB3YXJuaW5nICovCisJCQl9IGVsc2Ugewor CQkJCS8qCisJCQkJICogIENvbXBsZXggYXRvbQorCQkJCSAqCisJCQkJICogIFRoZSBvcmlnaW5h bCBjb2RlIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSwgYW5kIHJlbW92ZWQgYXQgdGhlIGVuZAorCQkJ CSAqICAodGhpcyBkaWZmZXJzIGZyb20gdGhlIGhhbmRsaW5nIG9mIHNpbXBsZSBxdWFudGlmaWVy cykuCisJCQkJICoKKwkJCQkgKiAgTk9URTogdGhlcmUgaXMgbm8gY3VycmVudCBzb2x1dGlvbiBm b3IgZW1wdHkgYXRvbXMgaW4gY29tcGxleAorCQkJCSAqICBxdWFudGlmaWVycy4gIFRoaXMgd291 bGQgbmVlZCBzb21lIHNvcnQgb2YgYSAncHJvZ3Jlc3MnIGluc3RydWN0aW9uLgorCQkJCSAqCisJ CQkJICogIFhYWDogaW1wb3NlIGxpbWl0IG9uIG1heGltdW0gcmVzdWx0IHNpemUsIGkuZS4gYXRv bV9jb2RlX2xlbiAqIGF0b21fY29waWVzPworCQkJCSAqLworCQkJCWR1a19pbnQzMl90IGF0b21f Y29kZV9sZW5ndGg7CisJCQkJZHVrX3VpbnQzMl90IGF0b21fY29waWVzOworCQkJCWR1a191aW50 MzJfdCB0bXBfcW1pbiwgdG1wX3FtYXg7CisKKwkJCQkvKiBwcmUtY2hlY2sgaG93IG1hbnkgYXRv bSBjb3BpZXMgd2UncmUgd2lsbGluZyB0byBtYWtlIChhdG9tX2NvcGllcyBub3QgbmVlZGVkIGJl bG93KSAqLworCQkJCWF0b21fY29waWVzID0gKHJlX2N0eC0+Y3Vycl90b2tlbi5xbWF4ID09IERV S19SRV9RVUFOVElGSUVSX0lORklOSVRFKSA/CisJCQkJICAgICAgICAgICAgICByZV9jdHgtPmN1 cnJfdG9rZW4ucW1pbiA6IHJlX2N0eC0+Y3Vycl90b2tlbi5xbWF4OworCQkJCWlmIChhdG9tX2Nv cGllcyA+IERVS19SRV9NQVhfQVRPTV9DT1BJRVMpIHsKKwkJCQkJRFVLX0VSUk9SX1JBTkdFKHJl X2N0eC0+dGhyLCBEVUtfU1RSX1FVQU5USUZJRVJfVE9PX01BTllfQ09QSUVTKTsKKwkJCQkJRFVL X1dPX05PUkVUVVJOKHJldHVybjspOworCQkJCX0KKworCQkJCS8qIHdpcGUgdGhlIGNhcHR1cmUg cmFuZ2UgbWFkZSBieSB0aGUgYXRvbSAoaWYgYW55KSAqLworCQkJCURVS19BU1NFUlQoYXRvbV9z dGFydF9jYXB0dXJlcyA8PSByZV9jdHgtPmNhcHR1cmVzKTsKKwkJCQlpZiAoYXRvbV9zdGFydF9j YXB0dXJlcyAhPSByZV9jdHgtPmNhcHR1cmVzKSB7CisJCQkJCURVS19BU1NFUlQoYXRvbV9zdGFy dF9jYXB0dXJlcyA8IHJlX2N0eC0+Y2FwdHVyZXMpOworCQkJCQlEVUtfREREKERVS19ERERQUklO VCgibXVzdCB3aXBlIF1hdG9tX3N0YXJ0X2NhcHR1cmVzLHJlX2N0eC0+Y2FwdHVyZXNdOiBdJWxk LCVsZF0iLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgYXRvbV9zdGFydF9jYXB0 dXJlcywgKGxvbmcpIHJlX2N0eC0+Y2FwdHVyZXMpKTsKKworCQkJCQkvKiBpbnNlcnQgKERVS19S RU9QX1dJUEVSQU5HRSwgc3RhcnQsIGNvdW50KSBpbiByZXZlcnNlIG9yZGVyIHNvIHRoZSBvcmRl ciBlbmRzIHVwIHJpZ2h0ICovCisJCQkJCWR1a19faW5zZXJ0X3UzMihyZV9jdHgsIChkdWtfdWlu dDMyX3QpIGF0b21fc3RhcnRfb2Zmc2V0LCAocmVfY3R4LT5jYXB0dXJlcyAtIGF0b21fc3RhcnRf Y2FwdHVyZXMpICogMlUpOworCQkJCQlkdWtfX2luc2VydF91MzIocmVfY3R4LCAoZHVrX3VpbnQz Ml90KSBhdG9tX3N0YXJ0X29mZnNldCwgKGF0b21fc3RhcnRfY2FwdHVyZXMgKyAxKSAqIDIpOwor CQkJCQlkdWtfX2luc2VydF91MzIocmVfY3R4LCAoZHVrX3VpbnQzMl90KSBhdG9tX3N0YXJ0X29m ZnNldCwgRFVLX1JFT1BfV0lQRVJBTkdFKTsKKwkJCQl9IGVsc2UgeworCQkJCQlEVUtfREREKERV S19ERERQUklOVCgibm8gbmVlZCB0byB3aXBlIGNhcHR1cmVzOiBhdG9tX3N0YXJ0X2NhcHR1cmVz ID09IHJlX2N0eC0+Y2FwdHVyZXMgPT0gJWxkIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIGF0b21fc3RhcnRfY2FwdHVyZXMpKTsKKwkJCQl9CisKKwkJCQlhdG9tX2NvZGVfbGVu Z3RoID0gKGR1a19pbnQzMl90KSBEVUtfX1JFX0JVRkxFTihyZV9jdHgpIC0gYXRvbV9zdGFydF9v ZmZzZXQ7CisKKwkJCQkvKiBpbnNlcnQgdGhlIHJlcXVpcmVkIG1hdGNoZXMgKHFtaW4pIGJ5IGNv cHlpbmcgdGhlIGF0b20gKi8KKwkJCQl0bXBfcW1pbiA9IHJlX2N0eC0+Y3Vycl90b2tlbi5xbWlu OworCQkJCXRtcF9xbWF4ID0gcmVfY3R4LT5jdXJyX3Rva2VuLnFtYXg7CisJCQkJd2hpbGUgKHRt cF9xbWluID4gMCkgeworCQkJCQlkdWtfX2FwcGVuZF9zbGljZShyZV9jdHgsIChkdWtfdWludDMy X3QpIGF0b21fc3RhcnRfb2Zmc2V0LCAoZHVrX3VpbnQzMl90KSBhdG9tX2NvZGVfbGVuZ3RoKTsK KwkJCQkJdG1wX3FtaW4tLTsKKwkJCQkJaWYgKHRtcF9xbWF4ICE9IERVS19SRV9RVUFOVElGSUVS X0lORklOSVRFKSB7CisJCQkJCQl0bXBfcW1heC0tOworCQkJCQl9CisJCQkJfQorCQkJCURVS19B U1NFUlQodG1wX3FtaW4gPT0gMCk7CisKKwkJCQkvKiBpbnNlcnQgY29kZSBmb3IgbWF0Y2hpbmcg dGhlIHJlbWFpbmRlciAtIGluZmluaXRlIG9yIGZpbml0ZSAqLworCQkJCWlmICh0bXBfcW1heCA9 PSBEVUtfUkVfUVVBTlRJRklFUl9JTkZJTklURSkgeworCQkJCQkvKiByZXVzZSBsYXN0IGVtaXR0 ZWQgYXRvbSBmb3IgcmVtYWluaW5nICdpbmZpbml0ZScgcXVhbnRpZmllciAqLworCisJCQkJCWlm IChyZV9jdHgtPmN1cnJfdG9rZW4ucW1pbiA9PSAwKSB7CisJCQkJCQkvKiBTcGVjaWFsIGNhc2U6 IG9yaWdpbmFsIHFtaW4gd2FzIHplcm8gc28gdGhlcmUgaXMgbm90aGluZworCQkJCQkJICogdG8g cmVwZWF0LiAgRW1pdCBhbiBhdG9tIGNvcHkgYnV0IGp1bXAgb3ZlciBpdCBoZXJlLgorCQkJCQkJ ICovCisJCQkJCQlkdWtfX2FwcGVuZF9yZW9wKHJlX2N0eCwgRFVLX1JFT1BfSlVNUCk7CisJCQkJ CQlkdWtfX2FwcGVuZF9qdW1wX29mZnNldChyZV9jdHgsIGF0b21fY29kZV9sZW5ndGgpOworCQkJ CQkJZHVrX19hcHBlbmRfc2xpY2UocmVfY3R4LCAoZHVrX3VpbnQzMl90KSBhdG9tX3N0YXJ0X29m ZnNldCwgKGR1a191aW50MzJfdCkgYXRvbV9jb2RlX2xlbmd0aCk7CisJCQkJCX0KKwkJCQkJaWYg KHJlX2N0eC0+Y3Vycl90b2tlbi5ncmVlZHkpIHsKKwkJCQkJCWR1a19fYXBwZW5kX3Jlb3AocmVf Y3R4LCBEVUtfUkVPUF9TUExJVDIpOyAgIC8qIHByZWZlciBqdW1wICovCisJCQkJCX0gZWxzZSB7 CisJCQkJCQlkdWtfX2FwcGVuZF9yZW9wKHJlX2N0eCwgRFVLX1JFT1BfU1BMSVQxKTsgICAvKiBw cmVmZXIgZGlyZWN0ICovCisJCQkJCX0KKwkJCQkJZHVrX19hcHBlbmRfanVtcF9vZmZzZXQocmVf Y3R4LCAtYXRvbV9jb2RlX2xlbmd0aCAtIDEpOyAgLyogLTEgZm9yIG9wY29kZSAqLworCQkJCX0g ZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqICBUaGUgcmVtYWluaW5nIG1hdGNoZXMgYXJlIGVtaXR0 ZWQgYXMgc2VxdWVuY2Ugb2YgU1BMSVRzIGFuZCBhdG9tCisJCQkJCSAqICBjb3BpZXM7IHRoZSBT UExJVHMgc2tpcCB0aGUgcmVtYWluaW5nIGNvcGllcyBhbmQgbWF0Y2ggdGhlIHNlcXVlbC4KKwkJ CQkJICogIFRoaXMgc2VxdWVuY2UgbmVlZHMgdG8gYmUgZW1pdHRlZCBzdGFydGluZyBmcm9tIHRo ZSBsYXN0IGNvcHkKKwkJCQkJICogIGJlY2F1c2UgdGhlIFNQTElUcyBhcmUgdmFyaWFibGUgbGVu Z3RoIGR1ZSB0byB0aGUgdmFyaWFibGUgbGVuZ3RoCisJCQkJCSAqICBza2lwIG9mZnNldC4gIFRo aXMgY2F1c2VzIGEgbG90IG9mIG1lbW9yeSBjb3B5aW5nIG5vdy4KKwkJCQkJICoKKwkJCQkJICog IEV4YW1wbGUgc3RydWN0dXJlIChncmVlZHksIG1hdGNoIG1heGltdW0gIyBhdG9tcyk6CisJCQkJ CSAqCisJCQkJCSAqICAgICAgU1BMSVQxIExTRVEKKwkJCQkJICogICAgICAoYXRvbSkKKwkJCQkJ ICogICAgICBTUExJVDEgTFNFUSAgICA7IDwtIHRoZSBieXRlIGxlbmd0aCBvZiB0aGlzIGluc3Ry dWN0aW9uIGlzIG5lZWRlZAorCQkJCQkgKiAgICAgIChhdG9tKSAgICAgICAgIDsgdG8gZW5jb2Rl IHRoZSBhYm92ZSBTUExJVDEgY29ycmVjdGx5CisJCQkJCSAqICAgICAgLi4uCisJCQkJCSAqICAg TFNFUToKKwkJCQkJICovCisJCQkJCWR1a191aW50MzJfdCBvZmZzZXQgPSAoZHVrX3VpbnQzMl90 KSBEVUtfX1JFX0JVRkxFTihyZV9jdHgpOworCQkJCQl3aGlsZSAodG1wX3FtYXggPiAwKSB7CisJ CQkJCQlkdWtfX2luc2VydF9zbGljZShyZV9jdHgsIG9mZnNldCwgKGR1a191aW50MzJfdCkgYXRv bV9zdGFydF9vZmZzZXQsIChkdWtfdWludDMyX3QpIGF0b21fY29kZV9sZW5ndGgpOworCQkJCQkJ aWYgKHJlX2N0eC0+Y3Vycl90b2tlbi5ncmVlZHkpIHsKKwkJCQkJCQlkdWtfX2luc2VydF91MzIo cmVfY3R4LCBvZmZzZXQsIERVS19SRU9QX1NQTElUMSk7ICAgLyogcHJlZmVyIGRpcmVjdCAqLwor CQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlkdWtfX2luc2VydF91MzIocmVfY3R4LCBvZmZzZXQsIERV S19SRU9QX1NQTElUMik7ICAgLyogcHJlZmVyIGp1bXAgKi8KKwkJCQkJCX0KKwkJCQkJCWR1a19f aW5zZXJ0X2p1bXBfb2Zmc2V0KHJlX2N0eCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg IG9mZnNldCArIDEsICAgLyogKzEgZm9yIG9wY29kZSAqLworCQkJCQkJICAgICAgICAgICAgICAg ICAgICAgICAgKGR1a19pbnQzMl90KSAoRFVLX19SRV9CVUZMRU4ocmVfY3R4KSAtIChvZmZzZXQg KyAxKSkpOworCQkJCQkJdG1wX3FtYXgtLTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8qIHJlbW92 ZSB0aGUgb3JpZ2luYWwgJ3RlbXBsYXRlJyBhdG9tICovCisJCQkJZHVrX19yZW1vdmVfc2xpY2Uo cmVfY3R4LCAoZHVrX3VpbnQzMl90KSBhdG9tX3N0YXJ0X29mZnNldCwgKGR1a191aW50MzJfdCkg YXRvbV9jb2RlX2xlbmd0aCk7CisJCQl9CisKKwkJCS8qICd0YWludCcgcmVzdWx0IGFzIGNvbXBs ZXggKi8KKwkJCXJlc19jaGFybGVuID0gLTE7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19S RVRPS19BU1NFUlRfU1RBUlQ6IHsKKwkJCWR1a19fYXBwZW5kX3Jlb3AocmVfY3R4LCBEVUtfUkVP UF9BU1NFUlRfU1RBUlQpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVUT0tfQVNTRVJU X0VORDogeworCQkJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIERVS19SRU9QX0FTU0VSVF9FTkQp OworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVUT0tfQVNTRVJUX1dPUkRfQk9VTkRBUlk6 IHsKKwkJCWR1a19fYXBwZW5kX3Jlb3AocmVfY3R4LCBEVUtfUkVPUF9BU1NFUlRfV09SRF9CT1VO REFSWSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19SRVRPS19BU1NFUlRfTk9UX1dPUkRf Qk9VTkRBUlk6IHsKKwkJCWR1a19fYXBwZW5kX3Jlb3AocmVfY3R4LCBEVUtfUkVPUF9BU1NFUlRf Tk9UX1dPUkRfQk9VTkRBUlkpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVUT0tfQVNT RVJUX1NUQVJUX1BPU19MT09LQUhFQUQ6CisJCWNhc2UgRFVLX1JFVE9LX0FTU0VSVF9TVEFSVF9O RUdfTE9PS0FIRUFEOiB7CisJCQlkdWtfdWludDMyX3Qgb2Zmc2V0OworCQkJZHVrX3VpbnQzMl90 IG9wY29kZSA9IChyZV9jdHgtPmN1cnJfdG9rZW4udCA9PSBEVUtfUkVUT0tfQVNTRVJUX1NUQVJU X1BPU19MT09LQUhFQUQpID8KKwkJCSAgICAgICAgICAgICAgICAgICAgICBEVUtfUkVPUF9MT09L UE9TIDogRFVLX1JFT1BfTE9PS05FRzsKKworCQkJb2Zmc2V0ID0gKGR1a191aW50MzJfdCkgRFVL X19SRV9CVUZMRU4ocmVfY3R4KTsKKwkJCWR1a19fcGFyc2VfZGlzanVuY3Rpb24ocmVfY3R4LCAw LCAmdG1wX2Rpc2opOworCQkJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIERVS19SRU9QX01BVENI KTsKKworCQkJKHZvaWQpIGR1a19faW5zZXJ0X3UzMihyZV9jdHgsIG9mZnNldCwgb3Bjb2RlKTsK KwkJCSh2b2lkKSBkdWtfX2luc2VydF9qdW1wX29mZnNldChyZV9jdHgsCisJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgMSwgICAvKiArMSBmb3Igb3Bjb2RlICovCisJ CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1a19pbnQzMl90KSAoRFVLX19SRV9C VUZMRU4ocmVfY3R4KSAtIChvZmZzZXQgKyAxKSkpOworCisJCQkvKiAndGFpbnQnIHJlc3VsdCBh cyBjb21wbGV4IC0tIHRoaXMgaXMgY29uc2VydmF0aXZlLAorCQkJICogYXMgbG9va2FoZWFkcyBk byBub3QgYmFja3RyYWNrLgorCQkJICovCisJCQlyZXNfY2hhcmxlbiA9IC0xOworCQkJYnJlYWs7 CisJCX0KKwkJY2FzZSBEVUtfUkVUT0tfQVRPTV9QRVJJT0Q6IHsKKwkJCW5ld19hdG9tX2NoYXJf bGVuZ3RoID0gMTsKKwkJCW5ld19hdG9tX3N0YXJ0X29mZnNldCA9IChkdWtfaW50MzJfdCkgRFVL X19SRV9CVUZMRU4ocmVfY3R4KTsKKwkJCWR1a19fYXBwZW5kX3Jlb3AocmVfY3R4LCBEVUtfUkVP UF9QRVJJT0QpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVUT0tfQVRPTV9DSEFSOiB7 CisJCQkvKiBOb3RlOiBzdWNjZXNzaXZlIGNoYXJhY3RlcnMgY291bGQgYmUgam9pbmVkIGludG8g c3RyaW5nIG1hdGNoZXMKKwkJCSAqIGJ1dCB0aGlzIGlzIG5vdCB0cml2aWFsIChjb25zaWRlciBl LmcuICcveHl6Ky8pOyBzZWUgZG9jcyBmb3IKKwkJCSAqIG1vcmUgZGlzY3Vzc2lvbi4KKwkJCSAq CisJCQkgKiBObyBzdXBwb3J0IGZvciBcdXtIK30geWV0LiAgV2hpbGUgb25seSBCTVAgVW5pY29k ZSBlc2NhcGVzIGFyZQorCQkJICogc3VwcG9ydGVkIGZvciBSZWdFeHBzIGF0IHByZXNlbnQsICdj aCcgbWF5IHN0aWxsIGJlIGEgbm9uLUJNUAorCQkJICogY29kZXBvaW50IGlmIGl0IGlzIGRlY29k ZWQgc3RyYWlnaHQgZnJvbSBzb3VyY2UgdGV4dCBVVEYtOC4KKwkJCSAqIFRoZXJlJ3Mgbm8gbm9u LUJNUCBzdXBwb3J0IHlldCBzbyB0aGlzIGlzIGhhbmRsZWQgc2ltcGx5IGJ5CisJCQkgKiBtYXRj aGluZyB0aGUgbm9uLUJNUCBjaGFyYWN0ZXIgKHdoaWNoIGlzIGN1c3RvbSBiZWhhdmlvcikuCisJ CQkgKi8KKwkJCWR1a191aW50MzJfdCBjaDsKKworCQkJbmV3X2F0b21fY2hhcl9sZW5ndGggPSAx OworCQkJbmV3X2F0b21fc3RhcnRfb2Zmc2V0ID0gKGR1a19pbnQzMl90KSBEVUtfX1JFX0JVRkxF TihyZV9jdHgpOworCQkJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIERVS19SRU9QX0NIQVIpOwor CQkJY2ggPSByZV9jdHgtPmN1cnJfdG9rZW4ubnVtOworCQkJaWYgKHJlX2N0eC0+cmVfZmxhZ3Mg JiBEVUtfUkVfRkxBR19JR05PUkVfQ0FTRSkgeworCQkJCWNoID0gKGR1a191aW50MzJfdCkgZHVr X3VuaWNvZGVfcmVfY2Fub25pY2FsaXplX2NoYXIocmVfY3R4LT50aHIsIChkdWtfY29kZXBvaW50 X3QpIGNoKTsKKwkJCX0KKwkJCWR1a19fYXBwZW5kX3UzMihyZV9jdHgsIGNoKTsKKwkJCWJyZWFr OworCQl9CisJCWNhc2UgRFVLX1JFVE9LX0FUT01fRElHSVQ6CisJCWNhc2UgRFVLX1JFVE9LX0FU T01fTk9UX0RJR0lUOgorCQljYXNlIERVS19SRVRPS19BVE9NX1dISVRFOgorCQljYXNlIERVS19S RVRPS19BVE9NX05PVF9XSElURToKKwkJY2FzZSBEVUtfUkVUT0tfQVRPTV9XT1JEX0NIQVI6CisJ CWNhc2UgRFVLX1JFVE9LX0FUT01fTk9UX1dPUkRfQ0hBUjogeworCQkJZHVrX3NtYWxsX3VpbnRf dCByZV9vcDsKKwkJCWR1a19zbWFsbF91aW50X3QgaWR4OworCisJCQluZXdfYXRvbV9jaGFyX2xl bmd0aCA9IDE7CisJCQluZXdfYXRvbV9zdGFydF9vZmZzZXQgPSAoZHVrX2ludDMyX3QpIERVS19f UkVfQlVGTEVOKHJlX2N0eCk7CisKKwkJCURVS19BU1NFUlQoKERVS19SRVRPS19BVE9NX0RJR0lU ICYgMHgwMSkgIT0gMCk7CisJCQlEVUtfQVNTRVJUKChEVUtfUkVUT0tfQVRPTV9XSElURSAmIDB4 MDEpICE9IDApOworCQkJRFVLX0FTU0VSVCgoRFVLX1JFVE9LX0FUT01fV09SRF9DSEFSICYgMHgw MSkgIT0gMCk7CisJCQlEVUtfQVNTRVJUKChEVUtfUkVUT0tfQVRPTV9OT1RfRElHSVQgJiAweDAx KSA9PSAwKTsKKwkJCURVS19BU1NFUlQoKERVS19SRVRPS19BVE9NX05PVF9XSElURSAmIDB4MDEp ID09IDApOworCQkJRFVLX0FTU0VSVCgoRFVLX1JFVE9LX0FUT01fTk9UX1dPUkRfQ0hBUiAmIDB4 MDEpID09IDApOworCQkJcmVfb3AgPSAocmVfY3R4LT5jdXJyX3Rva2VuLnQgJiAweDAxKSA/IERV S19SRU9QX1JBTkdFUyA6IERVS19SRU9QX0lOVlJBTkdFUzsKKworCQkJRFVLX0FTU0VSVChEVUtf UkVUT0tfQVRPTV9XSElURSA9PSBEVUtfUkVUT0tfQVRPTV9ESUdJVCArIDIpOworCQkJRFVLX0FT U0VSVChEVUtfUkVUT0tfQVRPTV9XT1JEX0NIQVIgPT0gRFVLX1JFVE9LX0FUT01fRElHSVQgKyA0 KTsKKwkJCWlkeCA9IChkdWtfc21hbGxfdWludF90KSAoKHJlX2N0eC0+Y3Vycl90b2tlbi50IC0g RFVLX1JFVE9LX0FUT01fRElHSVQpID4+IDFVKTsKKwkJCURVS19BU1NFUlQoaWR4IDw9IDJVKTsg IC8qIEFzc3VtZSBjb250aW51b3VzIHRva2VuIG51bWJlcnM7IGFsc28gY2hlY2tzIG5lZ2F0aXZl IHVuZGVyZmxvdy4gKi8KKworCQkJZHVrX19hcHBlbmRfcmFuZ2VfYXRvbV9tYXRjaGVyKHJlX2N0 eCwgcmVfb3AsIGR1a19fcmVfcmFuZ2VfbG9va3VwMVtpZHhdLCBkdWtfX3JlX3JhbmdlX2xvb2t1 cDJbaWR4XSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19SRVRPS19BVE9NX0JBQ0tSRUZF UkVOQ0U6IHsKKwkJCWR1a191aW50MzJfdCBiYWNrcmVmID0gKGR1a191aW50MzJfdCkgcmVfY3R4 LT5jdXJyX3Rva2VuLm51bTsKKwkJCWlmIChiYWNrcmVmID4gcmVfY3R4LT5oaWdoZXN0X2JhY2ty ZWYpIHsKKwkJCQlyZV9jdHgtPmhpZ2hlc3RfYmFja3JlZiA9IGJhY2tyZWY7CisJCQl9CisJCQlu ZXdfYXRvbV9jaGFyX2xlbmd0aCA9IC0xOyAgIC8qIG1hcmsgYXMgY29tcGxleCAqLworCQkJbmV3 X2F0b21fc3RhcnRfb2Zmc2V0ID0gKGR1a19pbnQzMl90KSBEVUtfX1JFX0JVRkxFTihyZV9jdHgp OworCQkJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIERVS19SRU9QX0JBQ0tSRUZFUkVOQ0UpOwor CQkJZHVrX19hcHBlbmRfdTMyKHJlX2N0eCwgYmFja3JlZik7CisJCQlicmVhazsKKwkJfQorCQlj YXNlIERVS19SRVRPS19BVE9NX1NUQVJUX0NBUFRVUkVfR1JPVVA6IHsKKwkJCWR1a191aW50MzJf dCBjYXA7CisKKwkJCW5ld19hdG9tX2NoYXJfbGVuZ3RoID0gLTE7ICAgLyogbWFyayBhcyBjb21w bGV4IChjYXB0dXJlIGhhbmRsaW5nKSAqLworCQkJbmV3X2F0b21fc3RhcnRfb2Zmc2V0ID0gKGR1 a19pbnQzMl90KSBEVUtfX1JFX0JVRkxFTihyZV9jdHgpOworCQkJY2FwID0gKytyZV9jdHgtPmNh cHR1cmVzOworCQkJZHVrX19hcHBlbmRfcmVvcChyZV9jdHgsIERVS19SRU9QX1NBVkUpOworCQkJ ZHVrX19hcHBlbmRfdTMyKHJlX2N0eCwgY2FwICogMik7CisJCQlkdWtfX3BhcnNlX2Rpc2p1bmN0 aW9uKHJlX2N0eCwgMCwgJnRtcF9kaXNqKTsgIC8qIHJldHZhbCAoc3ViLWF0b20gY2hhciBsZW5n dGgpIHVudXNlZCwgdGFpbnRlZCBhcyBjb21wbGV4IGFib3ZlICovCisJCQlkdWtfX2FwcGVuZF9y ZW9wKHJlX2N0eCwgRFVLX1JFT1BfU0FWRSk7CisJCQlkdWtfX2FwcGVuZF91MzIocmVfY3R4LCBj YXAgKiAyICsgMSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19SRVRPS19BVE9NX1NUQVJU X05PTkNBUFRVUkVfR1JPVVA6IHsKKwkJCW5ld19hdG9tX3N0YXJ0X29mZnNldCA9IChkdWtfaW50 MzJfdCkgRFVLX19SRV9CVUZMRU4ocmVfY3R4KTsKKwkJCWR1a19fcGFyc2VfZGlzanVuY3Rpb24o cmVfY3R4LCAwLCAmdG1wX2Rpc2opOworCQkJbmV3X2F0b21fY2hhcl9sZW5ndGggPSB0bXBfZGlz ai5jaGFybGVuOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVUT0tfQVRPTV9TVEFSVF9D SEFSQ0xBU1M6CisJCWNhc2UgRFVLX1JFVE9LX0FUT01fU1RBUlRfQ0hBUkNMQVNTX0lOVkVSVEVE OiB7CisJCQkvKgorCQkJICogIFJhbmdlIHBhcnNpbmcgaXMgZG9uZSB3aXRoIGEgc3BlY2lhbCBs ZXhlciBmdW5jdGlvbiB3aGljaCBjYWxscworCQkJICogIHVzIGZvciBldmVyeSByYW5nZSBwYXJz ZWQuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGhvdyByZXN0IG9mCisJCQkgKiAgdGhlIHBhcnNp bmcgd29ya3MsIGJ1dCBhdm9pZHMgYSBoZWF2eSwgYXJiaXRyYXJ5IHNpemUgaW50ZXJtZWRpYXRl CisJCQkgKiAgdmFsdWUgdHlwZSB0byBob2xkIHRoZSByYW5nZXMuCisJCQkgKgorCQkJICogIEFu b3RoZXIgY29tcGxpY2F0aW9uIGlzIHRoZSBoYW5kbGluZyBvZiBjaGFyYWN0ZXIgcmFuZ2VzIHdo ZW4KKwkJCSAqICBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIGlzIHVzZWQgKHNlZSBkb2NzIGZv ciBkaXNjdXNzaW9uKS4KKwkJCSAqICBUaGUgcmFuZ2UgaGFuZGxlciBjYWxsYmFjayBnaXZlbiB0 byB0aGUgbGV4ZXIgdGFrZXMgY2FyZSBvZiB0aGlzCisJCQkgKiAgYXMgd2VsbC4KKwkJCSAqCisJ CQkgKiAgTm90ZSB0aGF0IGR1cGxpY2F0ZSByYW5nZXMgYXJlIG5vdCBlbGltaW5hdGVkIHdoZW4g cGFyc2luZyBjaGFyYWN0ZXIKKwkJCSAqICBjbGFzc2VzLCBzbyB0aGF0IGNhbm9uaWNhbGl6YXRp b24gb2YKKwkJCSAqCisJCQkgKiAgICBbMC05YS1mQS1GeC17XQorCQkJICoKKwkJCSAqICBjcmVh dGVzIHRoZSByZXN1bHQgKG5vdGUgdGhlIGR1cGxpY2F0ZSByYW5nZXMpOgorCQkJICoKKwkJCSAq ICAgIFswLTlBLUZBLUZYLVp7LXtdCisJCQkgKgorCQkJICogIHdoZXJlIFt4LXtdIGlzIHNwbGl0 IGFzIGEgcmVzdWx0IG9mIGNhbm9uaWNhbGl6YXRpb24uICBUaGUgZHVwbGljYXRlCisJCQkgKiAg cmFuZ2VzIGFyZSBub3QgYSBzZW1hbnRpY3MgaXNzdWU6IHRoZXkgd29yayBjb3JyZWN0bHkuCisJ CQkgKi8KKworCQkJZHVrX3VpbnQzMl90IG9mZnNldDsKKworCQkJRFVLX0REKERVS19ERFBSSU5U KCJjaGFyYWN0ZXIgY2xhc3MiKSk7CisKKwkJCS8qIGluc2VydCByYW5nZXMgaW5zdHJ1Y3Rpb24s IHJhbmdlIGNvdW50IHBhdGNoZWQgaW4gbGF0ZXIgKi8KKwkJCW5ld19hdG9tX2NoYXJfbGVuZ3Ro ID0gMTsKKwkJCW5ld19hdG9tX3N0YXJ0X29mZnNldCA9IChkdWtfaW50MzJfdCkgRFVLX19SRV9C VUZMRU4ocmVfY3R4KTsKKwkJCWR1a19fYXBwZW5kX3Jlb3AocmVfY3R4LAorCQkJICAgICAgICAg ICAgICAgICAocmVfY3R4LT5jdXJyX3Rva2VuLnQgPT0gRFVLX1JFVE9LX0FUT01fU1RBUlRfQ0hB UkNMQVNTKSA/CisJCQkgICAgICAgICAgICAgICAgIERVS19SRU9QX1JBTkdFUyA6IERVS19SRU9Q X0lOVlJBTkdFUyk7CisJCQlvZmZzZXQgPSAoZHVrX3VpbnQzMl90KSBEVUtfX1JFX0JVRkxFTihy ZV9jdHgpOyAgICAvKiBwYXRjaCBpbiByYW5nZSBjb3VudCBsYXRlciAqLworCisJCQkvKiBwYXJz ZSByYW5nZXMgdW50aWwgY2hhcmFjdGVyIGNsYXNzIGVuZHMgKi8KKwkJCXJlX2N0eC0+bnJhbmdl cyA9IDA7ICAgIC8qIG5vdGU6IGN0eC13aWRlIHRlbXBvcmFyeSAqLworCQkJZHVrX2xleGVyX3Bh cnNlX3JlX3JhbmdlcygmcmVfY3R4LT5sZXgsIGR1a19fcmVnZXhwX2dlbmVyYXRlX3Jhbmdlcywg KHZvaWQgKikgcmVfY3R4KTsKKworCQkJLyogaW5zZXJ0IHJhbmdlIGNvdW50ICovCisJCQlkdWtf X2luc2VydF91MzIocmVfY3R4LCBvZmZzZXQsIHJlX2N0eC0+bnJhbmdlcyk7CisJCQlicmVhazsK KwkJfQorCQljYXNlIERVS19SRVRPS19BVE9NX0VORF9HUk9VUDogeworCQkJaWYgKGV4cGVjdF9l b2YpIHsKKwkJCQlEVUtfRVJST1JfU1lOVEFYKHJlX2N0eC0+dGhyLCBEVUtfU1RSX1VORVhQRUNU RURfQ0xPU0lOR19QQVJFTik7CisJCQkJRFVLX1dPX05PUkVUVVJOKHJldHVybjspOworCQkJfQor CQkJZ290byBkb25lOworCQl9CisJCWNhc2UgRFVLX1JFVE9LX0VPRjogeworCQkJaWYgKCFleHBl Y3RfZW9mKSB7CisJCQkJRFVLX0VSUk9SX1NZTlRBWChyZV9jdHgtPnRociwgRFVLX1NUUl9VTkVY UEVDVEVEX0VORF9PRl9QQVRURVJOKTsKKwkJCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuOyk7CisJ CQl9CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZGVmYXVsdDogeworCQkJRFVLX0VSUk9SX1NZTlRB WChyZV9jdHgtPnRociwgRFVLX1NUUl9VTkVYUEVDVEVEX1JFR0VYUF9UT0tFTik7CisJCQlEVUtf V09fTk9SRVRVUk4ocmV0dXJuOyk7CisJCX0KKwkJfQorCisJCS8qIGEgY29tcGxleCAobmV3KSBh dG9tIHRhaW50cyB0aGUgcmVzdWx0ICovCisJCWlmIChuZXdfYXRvbV9zdGFydF9vZmZzZXQgPj0g MCkgeworCQkJaWYgKG5ld19hdG9tX2NoYXJfbGVuZ3RoIDwgMCkgeworCQkJCXJlc19jaGFybGVu ID0gLTE7CisJCQl9IGVsc2UgaWYgKHJlc19jaGFybGVuID49IDApIHsKKwkJCQkvKiBvbmx5IGFk dmFuY2UgaWYgbm90IHRhaW50ZWQgKi8KKwkJCQlyZXNfY2hhcmxlbiArPSBuZXdfYXRvbV9jaGFy X2xlbmd0aDsKKwkJCX0KKwkJfQorCisJCS8qIHJlY29yZCBwcmV2aW91cyBhdG9tIGluZm8gaW4g Y2FzZSBuZXh0IHRva2VuIGlzIGEgcXVhbnRpZmllciAqLworCQlhdG9tX3N0YXJ0X29mZnNldCA9 IG5ld19hdG9tX3N0YXJ0X29mZnNldDsKKwkJYXRvbV9jaGFyX2xlbmd0aCA9IG5ld19hdG9tX2No YXJfbGVuZ3RoOworCQlhdG9tX3N0YXJ0X2NhcHR1cmVzID0gbmV3X2F0b21fc3RhcnRfY2FwdHVy ZXM7CisJfQorCisgZG9uZToKKworCS8qIGZpbmlzaCB1cCBwZW5kaW5nIGp1bXAgYW5kIHNwbGl0 IGZvciBsYXN0IGFsdGVybmF0aXZlICovCisJaWYgKHVucGF0Y2hlZF9kaXNqdW5jdGlvbl9qdW1w ID49IDApIHsKKwkJZHVrX3VpbnQzMl90IG9mZnNldDsKKworCQlEVUtfQVNTRVJUKHVucGF0Y2hl ZF9kaXNqdW5jdGlvbl9zcGxpdCA+PSAwKTsKKwkJb2Zmc2V0ID0gKGR1a191aW50MzJfdCkgdW5w YXRjaGVkX2Rpc2p1bmN0aW9uX2p1bXA7CisJCW9mZnNldCArPSBkdWtfX2luc2VydF9qdW1wX29m ZnNldChyZV9jdHgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQs CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHVrX2ludDMyX3QpIChEVUtf X1JFX0JVRkxFTihyZV9jdHgpIC0gb2Zmc2V0KSk7CisJCS8qIG9mZnNldCBpcyBub3cgdGFyZ2V0 IG9mIHRoZSBwZW5kaW5nIHNwbGl0IChyaWdodCBhZnRlciBqdW1wKSAqLworCQlkdWtfX2luc2Vy dF9qdW1wX29mZnNldChyZV9jdHgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgIChkdWtfdWlu dDMyX3QpIHVucGF0Y2hlZF9kaXNqdW5jdGlvbl9zcGxpdCwKKwkJICAgICAgICAgICAgICAgICAg ICAgICAgKGR1a19pbnQzMl90KSBvZmZzZXQgLSB1bnBhdGNoZWRfZGlzanVuY3Rpb25fc3BsaXQp OworCX0KKworI2lmIDAKKwlvdXRfYXRvbV9pbmZvLT5lbmRfY2FwdHVyZXMgPSByZV9jdHgtPmNh cHR1cmVzOworI2VuZGlmCisJb3V0X2F0b21faW5mby0+Y2hhcmxlbiA9IHJlc19jaGFybGVuOwor CURVS19EREQoRFVLX0RERFBSSU5UKCJwYXJzZSBkaXNqdW5jdGlvbiBmaW5pc2hlZDogY2hhcmxl bj0lbGQiLAorCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBvdXRfYXRvbV9pbmZvLT5jaGFy bGVuKSk7CisKKwlyZV9jdHgtPnJlY3Vyc2lvbl9kZXB0aC0tOworfQorCisvKgorICogIEZsYWdz IHBhcnNpbmcgKHNlZSBFNSBTZWN0aW9uIDE1LjEwLjQuMSkuCisgKi8KKworRFVLX0xPQ0FMIGR1 a191aW50MzJfdCBkdWtfX3BhcnNlX3JlZ2V4cF9mbGFncyhkdWtfaHRocmVhZCAqdGhyLCBkdWtf aHN0cmluZyAqaCkgeworCWNvbnN0IGR1a191aW50OF90ICpwOworCWNvbnN0IGR1a191aW50OF90 ICpwX2VuZDsKKwlkdWtfdWludDMyX3QgZmxhZ3MgPSAwOworCisJcCA9IERVS19IU1RSSU5HX0dF VF9EQVRBKGgpOworCXBfZW5kID0gcCArIERVS19IU1RSSU5HX0dFVF9CWVRFTEVOKGgpOworCisJ LyogTm90ZTogY2FuIGJlIHNhZmVseSBzY2FubmVkIGFzIGJ5dGVzICh1bmRlY29kZWQpICovCisK Kwl3aGlsZSAocCA8IHBfZW5kKSB7CisJCWR1a191aW50OF90IGMgPSAqcCsrOworCQlzd2l0Y2gg KGMpIHsKKwkJY2FzZSAoZHVrX3VpbnQ4X3QpICdnJzogeworCQkJaWYgKGZsYWdzICYgRFVLX1JF X0ZMQUdfR0xPQkFMKSB7CisJCQkJZ290byBmbGFnc19lcnJvcjsKKwkJCX0KKwkJCWZsYWdzIHw9 IERVS19SRV9GTEFHX0dMT0JBTDsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgKGR1a191aW50OF90 KSAnaSc6IHsKKwkJCWlmIChmbGFncyAmIERVS19SRV9GTEFHX0lHTk9SRV9DQVNFKSB7CisJCQkJ Z290byBmbGFnc19lcnJvcjsKKwkJCX0KKwkJCWZsYWdzIHw9IERVS19SRV9GTEFHX0lHTk9SRV9D QVNFOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAoZHVrX3VpbnQ4X3QpICdtJzogeworCQkJaWYg KGZsYWdzICYgRFVLX1JFX0ZMQUdfTVVMVElMSU5FKSB7CisJCQkJZ290byBmbGFnc19lcnJvcjsK KwkJCX0KKwkJCWZsYWdzIHw9IERVS19SRV9GTEFHX01VTFRJTElORTsKKwkJCWJyZWFrOworCQl9 CisJCWRlZmF1bHQ6IHsKKwkJCWdvdG8gZmxhZ3NfZXJyb3I7CisJCX0KKwkJfQorCX0KKworCXJl dHVybiBmbGFnczsKKworIGZsYWdzX2Vycm9yOgorCURVS19FUlJPUl9TWU5UQVgodGhyLCBEVUtf U1RSX0lOVkFMSURfUkVHRVhQX0ZMQUdTKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIDBVOyk7 Cit9CisKKy8qCisgKiAgQ3JlYXRlIGVzY2FwZWQgUmVnRXhwIHNvdXJjZSAoRTUgU2VjdGlvbiAx NS4xMC4zKS4KKyAqCisgKiAgVGhlIGN1cnJlbnQgYXBwcm9hY2ggaXMgdG8gc3BlY2lhbCBjYXNl IHRoZSBlbXB0eSBSZWdFeHAKKyAqICAoJycgLT4gJyg/OiknKSBhbmQgb3RoZXJ3aXNlIHJlcGxh Y2UgdW5lc2NhcGVkICcvJyBjaGFyYWN0ZXJzCisgKiAgd2l0aCAnXC8nIHJlZ2FyZGxlc3Mgb2Yg d2hlcmUgdGhleSBvY2N1ciBpbiB0aGUgcmVnZXhwLgorICoKKyAqICBOb3RlIHRoYXQgbm9ybWFs aXphdGlvbiBkb2VzIG5vdCBzZWVtIHRvIGJlIG5lY2Vzc2FyeSBmb3IKKyAqICBSZWdFeHAgbGl0 ZXJhbHMgKGUuZy4gJy9mb28vJykgYmVjYXVzZSB0byBiZSBhY2NlcHRhYmxlIGFzCisgKiAgYSBS ZWdFeHAgbGl0ZXJhbCwgdGhlIHRleHQgYmV0d2VlbiBmb3J3YXJkIHNsYXNoZXMgbXVzdAorICog IGFscmVhZHkgbWF0Y2ggdGhlIGVzY2FwaW5nIHJlcXVpcmVtZW50cyAoZS5nLiBtdXN0IG5vdCBj b250YWluCisgKiAgdW5lc2NhcGVkIGZvcndhcmQgc2xhc2hlcyBvciBiZSBlbXB0eSkuICBFc2Nh cGluZyBJUyBuZWVkZWQKKyAqICBmb3IgZXhwcmVzc2lvbnMgbGlrZSAnbmV3IFJlZ2V4cCgiLi4u IiwgIiIpJyBob3dldmVyLgorICogIEN1cnJlbnRseSwgd2UgcmUtZXNjYXBlIGluIGVpdGhlciBj YXNlLgorICoKKyAqICBBbHNvIG5vdGUgdGhhdCB3ZSBwcm9jZXNzIHRoZSBzb3VyY2UgaGVyZSBp biBVVEYtOCBlbmNvZGVkCisgKiAgZm9ybS4gIFRoaXMgaXMgY29ycmVjdCwgYmVjYXVzZSBhbnkg bm9uLUFTQ0lJIGNoYXJhY3RlcnMgYXJlCisgKiAgcGFzc2VkIHRocm91Z2ggd2l0aG91dCBjaGFu Z2UuCisgKi8KKworRFVLX0xPQ0FMIHZvaWQgZHVrX19jcmVhdGVfZXNjYXBlZF9zb3VyY2UoZHVr X2h0aHJlYWQgKnRociwgaW50IGlkeF9wYXR0ZXJuKSB7CisJZHVrX2hzdHJpbmcgKmg7CisJY29u c3QgZHVrX3VpbnQ4X3QgKnA7CisJZHVrX2J1ZndyaXRlcl9jdHggYndfYWxsb2M7CisJZHVrX2J1 ZndyaXRlcl9jdHggKmJ3OworCWR1a191aW50OF90ICpxOworCWR1a19zaXplX3QgaSwgbjsKKwlk dWtfdWludF9mYXN0OF90IGNfcHJldiwgYzsKKworCWggPSBkdWtfa25vd25faHN0cmluZyh0aHIs IGlkeF9wYXR0ZXJuKTsKKwlwID0gKGNvbnN0IGR1a191aW50OF90ICopIERVS19IU1RSSU5HX0dF VF9EQVRBKGgpOworCW4gPSAoZHVrX3NpemVfdCkgRFVLX0hTVFJJTkdfR0VUX0JZVEVMRU4oaCk7 CisKKwlpZiAobiA9PSAwKSB7CisJCWR1a19wdXNoX2xpdGVyYWwodGhyLCAiKD86KSIpOworCQly ZXR1cm47CisJfQorCisJYncgPSAmYndfYWxsb2M7CisJRFVLX0JXX0lOSVRfUFVTSEJVRih0aHIs IGJ3LCBuKTsKKwlxID0gRFVLX0JXX0dFVF9QVFIodGhyLCBidyk7CisKKwljX3ByZXYgPSAoZHVr X3VpbnRfZmFzdDhfdCkgMDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJYyA9IHBb aV07CisKKwkJcSA9IERVS19CV19FTlNVUkVfUkFXKHRociwgYncsIDIsIHEpOworCisJCWlmIChj ID09IChkdWtfdWludF9mYXN0OF90KSAnLycgJiYgY19wcmV2ICE9IChkdWtfdWludF9mYXN0OF90 KSAnXFwnKSB7CisJCQkvKiBVbmVzY2FwZWQgJy8nIEFOWVdIRVJFIGluIHRoZSByZWdleHAgKGlu IGRpc2p1bmN0aW9uLAorCQkJICogaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCAuLi4pID0+IHNh bWUgZXNjYXBlIHdvcmtzLgorCQkJICovCisJCQkqcSsrID0gRFVLX0FTQ19CQUNLU0xBU0g7CisJ CX0KKwkJKnErKyA9IChkdWtfdWludDhfdCkgYzsKKworCQljX3ByZXYgPSBjOworCX0KKworCURV S19CV19TRVRQVFJfQU5EX0NPTVBBQ1QodGhyLCBidywgcSk7CisJKHZvaWQpIGR1a19idWZmZXJf dG9fc3RyaW5nKHRociwgLTEpOyAgLyogU2FmZSBpZiBpbnB1dCBpcyBzYWZlLiAqLworCisJLyog WyAuLi4gZXNjYXBlZF9zb3VyY2UgXSAqLworfQorCisvKgorICogIEV4cG9zZWQgcmVnZXhwIGNv bXBpbGF0aW9uIHByaW1pdGl2ZS4KKyAqCisgKiAgU2V0cyB1cCBhIHJlZ2V4cCBjb21waWxhdGlv biBjb250ZXh0LCBhbmQgY2FsbHMgZHVrX19wYXJzZV9kaXNqdW5jdGlvbigpIHRvIGRvIHRoZQor ICogIGFjdHVhbCBwYXJzaW5nLiAgSGFuZGxlcyBnZW5lcmF0aW9uIG9mIHRoZSBjb21waWxlZCBy ZWdleHAgaGVhZGVyIGFuZCB0aGUKKyAqICAiYm9pbGVycGxhdGUiIGNhcHR1cmUgb2YgdGhlIG1h dGNoaW5nIHN1YnN0cmluZyAoc2F2ZSAwIGFuZCAxKS4gIEFsc28gZG9lcyBzb21lCisgKiAgZ2xv YmFsIGxldmVsIHJlZ2V4cCBjaGVja3MgYWZ0ZXIgcmVjdXJzaXZlIGNvbXBpbGF0aW9uIGhhcyBm aW5pc2hlZC4KKyAqCisgKiAgQW4gZXNjYXBlZCB2ZXJzaW9uIG9mIHRoZSByZWdleHAgc291cmNl LCBzdWl0YWJsZSBmb3IgdXNlIGFzIGEgUmVnRXhwIGluc3RhbmNlCisgKiAgJ3NvdXJjZScgcHJv cGVydHkgKHNlZSBFNSBTZWN0aW9uIDE1LjEwLjMpLCBpcyBhbHNvIGxlZnQgb24gdGhlIHN0YWNr LgorICoKKyAqICBJbnB1dCBzdGFjazogIFsgcGF0dGVybiBmbGFncyBdCisgKiAgT3V0cHV0IHN0 YWNrOiBbIGJ5dGVjb2RlIGVzY2FwZWRfc291cmNlIF0gIChib3RoIGFzIHN0cmluZ3MpCisgKi8K KworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX3JlZ2V4cF9jb21waWxlKGR1a19odGhyZWFkICp0aHIp IHsKKwlkdWtfcmVfY29tcGlsZXJfY3R4IHJlX2N0eDsKKwlkdWtfbGV4ZXJfcG9pbnQgbGV4X3Bv aW50OworCWR1a19oc3RyaW5nICpoX3BhdHRlcm47CisJZHVrX2hzdHJpbmcgKmhfZmxhZ3M7CisJ ZHVrX19yZV9kaXNqdW5jdGlvbl9pbmZvIGlnbl9kaXNqOworCisJRFVLX0FTU0VSVCh0aHIgIT0g TlVMTCk7CisKKwkvKgorCSAqICBBcmdzIHZhbGlkYXRpb24KKwkgKi8KKworCS8qIFR5cGVFcnJv ciBpZiBmYWlscyAqLworCWhfcGF0dGVybiA9IGR1a19yZXF1aXJlX2hzdHJpbmdfbm90c3ltYm9s KHRociwgLTIpOworCWhfZmxhZ3MgPSBkdWtfcmVxdWlyZV9oc3RyaW5nX25vdHN5bWJvbCh0aHIs IC0xKTsKKworCS8qCisJICogIENyZWF0ZSBub3JtYWxpemVkICdzb3VyY2UnIHByb3BlcnR5IChF NSBTZWN0aW9uIDE1LjEwLjMpLgorCSAqLworCisJLyogWyAuLi4gcGF0dGVybiBmbGFncyBdICov CisKKwlkdWtfX2NyZWF0ZV9lc2NhcGVkX3NvdXJjZSh0aHIsIC0yKTsKKworCS8qIFsgLi4uIHBh dHRlcm4gZmxhZ3MgZXNjYXBlZF9zb3VyY2UgXSAqLworCisJLyoKKwkgKiAgSW5pdCBjb21waWxh dGlvbiBjb250ZXh0CisJICovCisKKwkvKiBbIC4uLiBwYXR0ZXJuIGZsYWdzIGVzY2FwZWRfc291 cmNlIGJ1ZmZlciBdICovCisKKwlkdWtfbWVtemVybygmcmVfY3R4LCBzaXplb2YocmVfY3R4KSk7 CisJRFVLX0xFWEVSX0lOSVRDVFgoJnJlX2N0eC5sZXgpOyAgLyogZHVwbGljYXRlIHplcm9pbmcs IGV4cGVjdCBmb3IgKHBvc3NpYmxlKSBOVUxMIGluaXRzICovCisJcmVfY3R4LnRociA9IHRocjsK KwlyZV9jdHgubGV4LnRociA9IHRocjsKKwlyZV9jdHgubGV4LmlucHV0ID0gRFVLX0hTVFJJTkdf R0VUX0RBVEEoaF9wYXR0ZXJuKTsKKwlyZV9jdHgubGV4LmlucHV0X2xlbmd0aCA9IERVS19IU1RS SU5HX0dFVF9CWVRFTEVOKGhfcGF0dGVybik7CisJcmVfY3R4LmxleC50b2tlbl9saW1pdCA9IERV S19SRV9DT01QSUxFX1RPS0VOX0xJTUlUOworCXJlX2N0eC5yZWN1cnNpb25fbGltaXQgPSBEVUtf VVNFX1JFR0VYUF9DT01QSUxFUl9SRUNMSU1JVDsKKwlyZV9jdHgucmVfZmxhZ3MgPSBkdWtfX3Bh cnNlX3JlZ2V4cF9mbGFncyh0aHIsIGhfZmxhZ3MpOworCisJRFVLX0JXX0lOSVRfUFVTSEJVRih0 aHIsICZyZV9jdHguYncsIERVS19fUkVfSU5JVElBTF9CVUZTSVpFKTsKKworCURVS19ERChEVUtf RERQUklOVCgicmVnZXhwIGNvbXBpbGVyIGN0eCBpbml0aWFsaXplZCwgZmxhZ3M9MHglMDhseCwg cmVjdXJzaW9uX2xpbWl0PSVsZCIsCisJICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25n KSByZV9jdHgucmVfZmxhZ3MsIChsb25nKSByZV9jdHgucmVjdXJzaW9uX2xpbWl0KSk7CisKKwkv KgorCSAqICBJbml0IGxleGVyCisJICovCisKKwlsZXhfcG9pbnQub2Zmc2V0ID0gMDsgIC8qIGV4 cGVuc2l2ZSBpbml0LCBqdXN0IHdhbnQgdG8gZmlsbCB3aW5kb3cgKi8KKwlsZXhfcG9pbnQubGlu ZSA9IDE7CisJRFVLX0xFWEVSX1NFVFBPSU5UKCZyZV9jdHgubGV4LCAmbGV4X3BvaW50KTsKKwor CS8qCisJICogIENvbXBpbGF0aW9uCisJICovCisKKwlEVUtfREQoRFVLX0REUFJJTlQoInN0YXJ0 aW5nIHJlZ2V4cCBjb21waWxhdGlvbiIpKTsKKworCWR1a19fYXBwZW5kX3Jlb3AoJnJlX2N0eCwg RFVLX1JFT1BfU0FWRSk7CisJZHVrX19hcHBlbmRfN2JpdCgmcmVfY3R4LCAwKTsKKwlkdWtfX3Bh cnNlX2Rpc2p1bmN0aW9uKCZyZV9jdHgsIDEgLypleHBlY3RfZW9mKi8sICZpZ25fZGlzaik7CisJ ZHVrX19hcHBlbmRfcmVvcCgmcmVfY3R4LCBEVUtfUkVPUF9TQVZFKTsKKwlkdWtfX2FwcGVuZF83 Yml0KCZyZV9jdHgsIDEpOworCWR1a19fYXBwZW5kX3Jlb3AoJnJlX2N0eCwgRFVLX1JFT1BfTUFU Q0gpOworCisJLyoKKwkgKiAgQ2hlY2sgZm9yIGludmFsaWQgYmFja3JlZmVyZW5jZXM7IG5vdGUg dGhhdCBpdCBpcyBOT1QgYW4gZXJyb3IKKwkgKiAgdG8gYmFjay1yZWZlcmVuY2UgYSBjYXB0dXJl IGdyb3VwIHdoaWNoIGhhcyBub3QgeWV0IGJlZW4gaW50cm9kdWNlZAorCSAqICBpbiB0aGUgcGF0 dGVybiAoYXMgaW4gL1wxKGZvbykvKTsgaW4gZmFjdCwgdGhlIGJhY2tyZWZlcmVuY2Ugd2lsbAor CSAqICBhbHdheXMgbWF0Y2ghICBJdCBJUyBhbiBlcnJvciB0byBiYWNrLXJlZmVyZW5jZSBhIGNh cHR1cmUgZ3JvdXAKKwkgKiAgd2hpY2ggd2lsbCBuZXZlciBiZSBpbnRyb2R1Y2VkIGluIHRoZSBw YXR0ZXJuLiAgVGh1cywgd2UgY2FuIGNoZWNrCisJICogIGZvciBzdWNoIHJlZmVyZW5jZXMgb25s eSBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlLgorCSAqLworCisJaWYgKHJlX2N0eC5oaWdoZXN0 X2JhY2tyZWYgPiByZV9jdHguY2FwdHVyZXMpIHsKKwkJRFVLX0VSUk9SX1NZTlRBWCh0aHIsIERV S19TVFJfSU5WQUxJRF9CQUNLUkVGUyk7CisJCURVS19XT19OT1JFVFVSTihyZXR1cm47KTsKKwl9 CisKKwkvKgorCSAqICBFbWl0IGNvbXBpbGVkIHJlZ2V4cCBoZWFkZXI6IGZsYWdzLCBuY2FwdHVy ZXMKKwkgKiAgKGluc2VydGlvbiBvcmRlciBpbnZlcnRlZCBvbiBwdXJwb3NlKQorCSAqLworCisJ ZHVrX19pbnNlcnRfdTMyKCZyZV9jdHgsIDAsIChyZV9jdHguY2FwdHVyZXMgKyAxKSAqIDIpOwor CWR1a19faW5zZXJ0X3UzMigmcmVfY3R4LCAwLCByZV9jdHgucmVfZmxhZ3MpOworCisJLyogWyAu Li4gcGF0dGVybiBmbGFncyBlc2NhcGVkX3NvdXJjZSBidWZmZXIgXSAqLworCisJRFVLX0JXX0NP TVBBQ1QodGhyLCAmcmVfY3R4LmJ3KTsKKwkodm9pZCkgZHVrX2J1ZmZlcl90b19zdHJpbmcodGhy LCAtMSk7ICAvKiBTYWZlIGJlY2F1c2UgZmxhZ3MgaXMgYXQgbW9zdCA3IGJpdC4gKi8KKworCS8q IFsgLi4uIHBhdHRlcm4gZmxhZ3MgZXNjYXBlZF9zb3VyY2UgYnl0ZWNvZGUgXSAqLworCisJLyoK KwkgKiAgRmluYWxpemUgc3RhY2sKKwkgKi8KKworCWR1a19yZW1vdmUodGhyLCAtNCk7ICAgICAv KiAtPiBbIC4uLiBmbGFncyBlc2NhcGVkX3NvdXJjZSBieXRlY29kZSBdICovCisJZHVrX3JlbW92 ZSh0aHIsIC0zKTsgICAgIC8qIC0+IFsgLi4uIGVzY2FwZWRfc291cmNlIGJ5dGVjb2RlIF0gKi8K KworCURVS19ERChEVUtfRERQUklOVCgicmVnZXhwIGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwsIGJ5 dGVjb2RlOiAlIVQsIGVzY2FwZWQgc291cmNlOiAlIVQiLAorCSAgICAgICAgICAgICAgICAgICAo ZHVrX3R2YWwgKikgZHVrX2dldF90dmFsKHRociwgLTEpLCAoZHVrX3R2YWwgKikgZHVrX2dldF90 dmFsKHRociwgLTIpKSk7Cit9CisKKy8qCisgKiAgQ3JlYXRlIGEgUmVnRXhwIGluc3RhbmNlIChF NSBTZWN0aW9uIDE1LjEwLjcpLgorICoKKyAqICBOb3RlOiB0aGUgb3V0cHV0IHN0YWNrIGxlZnQg YnkgZHVrX3JlZ2V4cF9jb21waWxlKCkgaXMgZGlyZWN0bHkgY29tcGF0aWJsZQorICogIHdpdGgg dGhlIGlucHV0IGhlcmUuCisgKgorICogIElucHV0IHN0YWNrOiAgWyBlc2NhcGVkX3NvdXJjZSBi eXRlY29kZSBdICAoYm90aCBhcyBzdHJpbmdzKQorICogIE91dHB1dCBzdGFjazogWyBSZWdFeHAg XQorICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19yZWdleHBfY3JlYXRlX2luc3RhbmNlKGR1 a19odGhyZWFkICp0aHIpIHsKKwlkdWtfaG9iamVjdCAqaDsKKworCS8qIFsgLi4uIGVzY2FwZWRf c291cmNlIGJ5dGVjb2RlIF0gKi8KKworCWR1a19wdXNoX29iamVjdCh0aHIpOworCWggPSBkdWtf a25vd25faG9iamVjdCh0aHIsIC0xKTsKKwlkdWtfaW5zZXJ0KHRociwgLTMpOworCisJLyogWyAu Li4gcmVnZXhwX29iamVjdCBlc2NhcGVkX3NvdXJjZSBieXRlY29kZSBdICovCisKKwlEVUtfSE9C SkVDVF9TRVRfQ0xBU1NfTlVNQkVSKGgsIERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCk7CisJRFVL X0hPQkpFQ1RfU0VUX1BST1RPVFlQRV9VUERSRUYodGhyLCBoLCB0aHItPmJ1aWx0aW5zW0RVS19C SURYX1JFR0VYUF9QUk9UT1RZUEVdKTsKKworCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRo ciwgLTMsIERVS19TVFJJRFhfSU5UX0JZVEVDT0RFLCBEVUtfUFJPUERFU0NfRkxBR1NfTk9ORSk7 CisKKwkvKiBbIC4uLiByZWdleHBfb2JqZWN0IGVzY2FwZWRfc291cmNlIF0gKi8KKworCS8qIElu IEVTMjAxNSAuc291cmNlLCBhbmQgdGhlIC5nbG9iYWwsIC5tdWx0aWxpbmUsIGV0YyBmbGFncyBh cmUKKwkgKiBpbmhlcml0ZWQgZ2V0dGVycy4gIFN0b3JlIHRoZSBlc2NhcGVkIHNvdXJjZSBhcyBh biBpbnRlcm5hbAorCSAqIHByb3BlcnR5IGZvciB0aGUgZ2V0dGVyLgorCSAqLworCisJZHVrX3hk ZWZfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAtMiwgRFVLX1NUUklEWF9JTlRfU09VUkNFLCBEVUtf UFJPUERFU0NfRkxBR1NfTk9ORSk7CisKKwkvKiBbIC4uLiByZWdleHBfb2JqZWN0IF0gKi8KKwor CWR1a19wdXNoX2ludCh0aHIsIDApOworCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg LTIsIERVS19TVFJJRFhfTEFTVF9JTkRFWCwgRFVLX1BST1BERVNDX0ZMQUdTX1cpOworCisJLyog WyAuLi4gcmVnZXhwX29iamVjdCBdICovCit9CisKKyNlbHNlICAvKiBEVUtfVVNFX1JFR0VYUF9T VVBQT1JUICovCisKKy8qIHJlZ2V4cCBzdXBwb3J0IGRpc2FibGVkICovCisKKyNlbmRpZiAgLyog RFVLX1VTRV9SRUdFWFBfU1VQUE9SVCAqLworCisvKiBhdXRvbWF0aWMgdW5kZWZzICovCisjdW5k ZWYgRFVLX19SRV9CVUZMRU4KKyN1bmRlZiBEVUtfX1JFX0lOSVRJQUxfQlVGU0laRQorLyoKKyAq ICBSZWdleHAgZXhlY3V0b3IuCisgKgorICogIFNhZmV0eTogdGhlIEVDTUFTY3JpcHQgZXhlY3V0 b3Igc2hvdWxkIHByZXZlbnQgdXNlciBmcm9tIHJlYWRpbmcgYW5kCisgKiAgcmVwbGFjaW5nIHJl Z2V4cCBieXRlY29kZS4gIEV2ZW4gc28sIHRoZSBleGVjdXRvciBtdXN0IHZhbGlkYXRlIGFsbAor ICogIG1lbW9yeSBhY2Nlc3NlcyBldGMuICBXaGVuIGFuIGludmFsaWQgYWNjZXNzIGlzIGRldGVj dGVkIChlLmcuIGEgJ3NhdmUnCisgKiAgb3Bjb2RlIHRvIGludmFsaWQsIHVuYWxsb2NhdGVkIGlu ZGV4KSBpdCBzaG91bGQgZmFpbCB3aXRoIGFuIGludGVybmFsCisgKiAgZXJyb3IgYnV0IG5vdCBj YXVzZSBhIHNlZ21lbnRhdGlvbiBmYXVsdC4KKyAqCisgKiAgTm90ZXM6CisgKgorICogICAgLSBC YWNrdHJhY2sgY291bnRzIGFyZSBsaW1pdGVkIHRvIHVuc2lnbmVkIDMyIGJpdHMgYnV0IHNob3Vs ZAorICogICAgICB0ZWNobmljYWxseSBiZSBkdWtfc2l6ZV90IGZvciBzdHJpbmdzIGxvbmdlciB0 aGFuIDRHIGNoYXJzLgorICogICAgICBUaGlzIGFsc28gcmVxdWlyZXMgYSByZWdleHAgYnl0ZWNv ZGUgY2hhbmdlLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkg aW5jbHVkZWQgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfU1VQUE9SVCkKKworLyoK KyAqICBIZWxwZXJzIGZvciBVVEYtOCBoYW5kbGluZworICoKKyAqICBGb3IgYnl0ZWNvZGUgcmVh ZGVycyB0aGUgZHVrX3VpbnQzMl90IGFuZCBkdWtfaW50MzJfdCB0eXBlcyBhcmUgY29ycmVjdAor ICogIGJlY2F1c2UgdGhleSdyZSB1c2VkIGZvciBtb3JlIHRoYW4ganVzdCBjb2RlcG9pbnRzLgor ICovCisKK0RVS19MT0NBTCBkdWtfdWludDMyX3QgZHVrX19iY19nZXRfdTMyKGR1a19yZV9tYXRj aGVyX2N0eCAqcmVfY3R4LCBjb25zdCBkdWtfdWludDhfdCAqKnBjKSB7CisJcmV0dXJuIChkdWtf dWludDMyX3QpIGR1a191bmljb2RlX2RlY29kZV94dXRmOF9jaGVja2VkKHJlX2N0eC0+dGhyLCBw YywgcmVfY3R4LT5ieXRlY29kZSwgcmVfY3R4LT5ieXRlY29kZV9lbmQpOworfQorCitEVUtfTE9D QUwgZHVrX2ludDMyX3QgZHVrX19iY19nZXRfaTMyKGR1a19yZV9tYXRjaGVyX2N0eCAqcmVfY3R4 LCBjb25zdCBkdWtfdWludDhfdCAqKnBjKSB7CisJZHVrX3VpbnQzMl90IHQ7CisKKwkvKiBzaWdu ZWQgaW50ZWdlciBlbmNvZGluZyBuZWVkZWQgdG8gd29yayB3aXRoIFVURi04ICovCisJdCA9IChk dWtfdWludDMyX3QpIGR1a191bmljb2RlX2RlY29kZV94dXRmOF9jaGVja2VkKHJlX2N0eC0+dGhy LCBwYywgcmVfY3R4LT5ieXRlY29kZSwgcmVfY3R4LT5ieXRlY29kZV9lbmQpOworCWlmICh0ICYg MSkgeworCQlyZXR1cm4gLSgoZHVrX2ludDMyX3QpICh0ID4+IDEpKTsKKwl9IGVsc2UgeworCQly ZXR1cm4gKGR1a19pbnQzMl90KSAodCA+PiAxKTsKKwl9Cit9CisKK0RVS19MT0NBTCBjb25zdCBk dWtfdWludDhfdCAqZHVrX191dGY4X2JhY2t0cmFjayhkdWtfaHRocmVhZCAqdGhyLCBjb25zdCBk dWtfdWludDhfdCAqKnB0ciwgY29uc3QgZHVrX3VpbnQ4X3QgKnB0cl9zdGFydCwgY29uc3QgZHVr X3VpbnQ4X3QgKnB0cl9lbmQsIGR1a191aW50X2Zhc3QzMl90IGNvdW50KSB7CisJY29uc3QgZHVr X3VpbnQ4X3QgKnA7CisKKwkvKiBOb3RlOiBhbGxvdyBiYWNrdHJhY2tpbmcgZnJvbSBwID09IHB0 cl9lbmQgKi8KKwlwID0gKnB0cjsKKwlpZiAocCA8IHB0cl9zdGFydCB8fCBwID4gcHRyX2VuZCkg eworCQlnb3RvIGZhaWw7CisJfQorCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlmb3IgKDs7KSB7 CisJCQlwLS07CisJCQlpZiAocCA8IHB0cl9zdGFydCkgeworCQkJCWdvdG8gZmFpbDsKKwkJCX0K KwkJCWlmICgoKnAgJiAweGMwKSAhPSAweDgwKSB7CisJCQkJLyogdXRmLTggY29udGludWF0aW9u IGJ5dGVzIGhhdmUgdGhlIGZvcm0gMTB4eCB4eHh4ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0K KwkJY291bnQtLTsKKwl9CisJKnB0ciA9IHA7CisJcmV0dXJuIHA7CisKKyBmYWlsOgorCURVS19F UlJPUl9JTlRFUk5BTCh0aHIpOworCURVS19XT19OT1JFVFVSTihyZXR1cm4gTlVMTDspOworfQor CitEVUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgKmR1a19fdXRmOF9hZHZhbmNlKGR1a19odGhy ZWFkICp0aHIsIGNvbnN0IGR1a191aW50OF90ICoqcHRyLCBjb25zdCBkdWtfdWludDhfdCAqcHRy X3N0YXJ0LCBjb25zdCBkdWtfdWludDhfdCAqcHRyX2VuZCwgZHVrX3VpbnRfZmFzdDMyX3QgY291 bnQpIHsKKwljb25zdCBkdWtfdWludDhfdCAqcDsKKworCXAgPSAqcHRyOworCWlmIChwIDwgcHRy X3N0YXJ0IHx8IHAgPj0gcHRyX2VuZCkgeworCQlnb3RvIGZhaWw7CisJfQorCisJd2hpbGUgKGNv dW50ID4gMCkgeworCQlmb3IgKDs7KSB7CisJCQlwKys7CisKKwkJCS8qIE5vdGU6IGlmIGVuY29k aW5nIGVuZHMgYnkgaGl0dGluZyBlbmQgb2YgaW5wdXQsIHdlIGRvbid0IGNoZWNrIHRoYXQKKwkJ CSAqIHRoZSBlbmNvZGluZyBpcyB2YWxpZCwgd2UganVzdCBhc3N1bWUgaXQgaXMuCisJCQkgKi8K KwkJCWlmIChwID49IHB0cl9lbmQgfHwgKCgqcCAmIDB4YzApICE9IDB4ODApKSB7CisJCQkJLyog dXRmLTggY29udGludWF0aW9uIGJ5dGVzIGhhdmUgdGhlIGZvcm0gMTB4eCB4eHh4ICovCisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKwkJY291bnQtLTsKKwl9CisKKwkqcHRyID0gcDsKKwlyZXR1cm4g cDsKKworIGZhaWw6CisJRFVLX0VSUk9SX0lOVEVSTkFMKHRocik7CisJRFVLX1dPX05PUkVUVVJO KHJldHVybiBOVUxMOyk7Cit9CisKKy8qCisgKiAgSGVscGVycyBmb3IgZGVhbGluZyB3aXRoIHRo ZSBpbnB1dCBzdHJpbmcKKyAqLworCisvKiBHZXQgYSAocG9zc2libHkgY2Fub25pY2FsaXplZCkg aW5wdXQgY2hhcmFjdGVyIGZyb20gY3VycmVudCBzcC4gIFRoZSBpbnB1dAorICogaXRzZWxmIGlz IG5ldmVyIG1vZGlmaWVkLCBhbmQgY2FwdHVyZXMgYWx3YXlzIHJlY29yZCBub24tY2Fub25pY2Fs aXplZAorICogY2hhcmFjdGVycyBldmVuIGluIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcuICBS ZXR1cm4gPDAgaWYgb3V0IG9mIGlucHV0LgorICovCitEVUtfTE9DQUwgZHVrX2NvZGVwb2ludF90 IGR1a19faW5wX2dldF9jcChkdWtfcmVfbWF0Y2hlcl9jdHggKnJlX2N0eCwgY29uc3QgZHVrX3Vp bnQ4X3QgKipzcCkgeworCWR1a19jb2RlcG9pbnRfdCByZXM7CisKKwlpZiAoKnNwID49IHJlX2N0 eC0+aW5wdXRfZW5kKSB7CisJCXJldHVybiAtMTsKKwl9CisJcmVzID0gKGR1a19jb2RlcG9pbnRf dCkgZHVrX3VuaWNvZGVfZGVjb2RlX3h1dGY4X2NoZWNrZWQocmVfY3R4LT50aHIsIHNwLCByZV9j dHgtPmlucHV0LCByZV9jdHgtPmlucHV0X2VuZCk7CisJaWYgKHJlX2N0eC0+cmVfZmxhZ3MgJiBE VUtfUkVfRkxBR19JR05PUkVfQ0FTRSkgeworCQlyZXMgPSBkdWtfdW5pY29kZV9yZV9jYW5vbmlj YWxpemVfY2hhcihyZV9jdHgtPnRociwgcmVzKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworRFVL X0xPQ0FMIGNvbnN0IGR1a191aW50OF90ICpkdWtfX2lucF9iYWNrdHJhY2soZHVrX3JlX21hdGNo ZXJfY3R4ICpyZV9jdHgsIGNvbnN0IGR1a191aW50OF90ICoqc3AsIGR1a191aW50X2Zhc3QzMl90 IGNvdW50KSB7CisJcmV0dXJuIGR1a19fdXRmOF9iYWNrdHJhY2socmVfY3R4LT50aHIsIHNwLCBy ZV9jdHgtPmlucHV0LCByZV9jdHgtPmlucHV0X2VuZCwgY291bnQpOworfQorCisvKiBCYWNrdHJh Y2sgdXRmLTggaW5wdXQgYW5kIHJldHVybiBhIChwb3NzaWJseSBjYW5vbmljYWxpemVkKSBpbnB1 dCBjaGFyYWN0ZXIuICovCitEVUtfTE9DQUwgZHVrX2NvZGVwb2ludF90IGR1a19faW5wX2dldF9w cmV2X2NwKGR1a19yZV9tYXRjaGVyX2N0eCAqcmVfY3R4LCBjb25zdCBkdWtfdWludDhfdCAqc3Ap IHsKKwkvKiBub3RlOiBjYWxsZXIgJ3NwJyBpcyBpbnRlbnRpb25hbGx5IG5vdCB1cGRhdGVkIGhl cmUgKi8KKwkodm9pZCkgZHVrX19pbnBfYmFja3RyYWNrKHJlX2N0eCwgJnNwLCAoZHVrX3VpbnRf ZmFzdDMyX3QpIDEpOworCXJldHVybiBkdWtfX2lucF9nZXRfY3AocmVfY3R4LCAmc3ApOworfQor CisvKgorICogIFJlZ2V4cCByZWN1cnNpdmUgbWF0Y2hpbmcgZnVuY3Rpb24uCisgKgorICogIFJl dHVybnMgJ3NwJyBvbiBzdWNjZXNzZnVsIG1hdGNoIChwb2ludHMgdG8gY2hhcmFjdGVyIGFmdGVy IGxhc3QgbWF0Y2hlZCBvbmUpLAorICogIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqICBUaGUgQyBy ZWN1cnNpb24gZGVwdGggbGltaXQgY2hlY2sgaXMgb25seSBwZXJmb3JtZWQgaW4gdGhpcyBmdW5j dGlvbiwgdGhpcworICogIHN1ZmZpY2VzIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIHByZXNlbnQg aW4gYWxsIHRydWUgcmVjdXJzaW9uIHJlcXVpcmVkIGJ5CisgKiAgcmVnZXhwIGV4ZWN1dGlvbi4K KyAqLworCitEVUtfTE9DQUwgY29uc3QgZHVrX3VpbnQ4X3QgKmR1a19fbWF0Y2hfcmVnZXhwKGR1 a19yZV9tYXRjaGVyX2N0eCAqcmVfY3R4LCBjb25zdCBkdWtfdWludDhfdCAqcGMsIGNvbnN0IGR1 a191aW50OF90ICpzcCkgeworCWlmIChyZV9jdHgtPnJlY3Vyc2lvbl9kZXB0aCA+PSByZV9jdHgt PnJlY3Vyc2lvbl9saW1pdCkgeworCQlEVUtfRVJST1JfUkFOR0UocmVfY3R4LT50aHIsIERVS19T VFJfUkVHRVhQX0VYRUNVVE9SX1JFQ1VSU0lPTl9MSU1JVCk7CisJCURVS19XT19OT1JFVFVSTihy ZXR1cm4gTlVMTDspOworCX0KKwlyZV9jdHgtPnJlY3Vyc2lvbl9kZXB0aCsrOworCisJZm9yICg7 OykgeworCQlkdWtfc21hbGxfaW50X3Qgb3A7CisKKwkJaWYgKHJlX2N0eC0+c3RlcHNfY291bnQg Pj0gcmVfY3R4LT5zdGVwc19saW1pdCkgeworCQkJRFVLX0VSUk9SX1JBTkdFKHJlX2N0eC0+dGhy LCBEVUtfU1RSX1JFR0VYUF9FWEVDVVRPUl9TVEVQX0xJTUlUKTsKKwkJCURVS19XT19OT1JFVFVS TihyZXR1cm4gTlVMTDspOworCQl9CisJCXJlX2N0eC0+c3RlcHNfY291bnQrKzsKKworCQkvKiBP cGNvZGVzIGFyZSBhdCBtb3N0IDcgYml0cyBub3cgc28gdGhleSBlbmNvZGUgdG8gb25lIGJ5dGUu ICBJZiB0aGlzCisJCSAqIHdlcmUgbm90IHRoZSBjYXNlIG9yICdwYycgaXMgaW52YWxpZCBoZXJl IChkdWUgdG8gYSBidWcgZXRjKSB3ZSdsbAorCQkgKiBzdGlsbCBmYWlsIHNhZmVseSB0aHJvdWdo IHRoZSBzd2l0Y2ggZGVmYXVsdCBjYXNlLgorCQkgKi8KKwkJRFVLX0FTU0VSVChwY1swXSA8PSAw eDdmVSk7CisjaWYgMAorCQlvcCA9IChkdWtfc21hbGxfaW50X3QpIGR1a19fYmNfZ2V0X3UzMihy ZV9jdHgsICZwYyk7CisjZW5kaWYKKwkJb3AgPSAqcGMrKzsKKworCQlEVUtfREREKERVS19ERERQ UklOVCgibWF0Y2g6IHJlYz0lbGQsIHN0ZXBzPSVsZCwgcGMgKGFmdGVyIG9wKT0lbGQsIHNwPSVs ZCwgb3A9JWxkIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHJlX2N0eC0+cmVjdXJz aW9uX2RlcHRoLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgcmVfY3R4LT5zdGVwc19j b3VudCwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIChwYyAtIHJlX2N0eC0+Ynl0ZWNv ZGUpLAorCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgKHNwIC0gcmVfY3R4LT5pbnB1dCks CisJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBvcCkpOworCisJCXN3aXRjaCAob3ApIHsK KwkJY2FzZSBEVUtfUkVPUF9NQVRDSDogeworCQkJZ290byBtYXRjaDsKKwkJfQorCQljYXNlIERV S19SRU9QX0NIQVI6IHsKKwkJCS8qCisJCQkgKiAgQnl0ZS1iYXNlZCBtYXRjaGluZyB3b3VsZCBi ZSBwb3NzaWJsZSBmb3IgY2FzZS1zZW5zaXRpdmUKKwkJCSAqICBtYXRjaGluZyBidXQgbm90IGZv ciBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLiAgU28sIHdlCisJCQkgKiAgbWF0Y2ggYnkgZGVj b2RpbmcgdGhlIGlucHV0IGFuZCBieXRlY29kZSBjaGFyYWN0ZXIgbm9ybWFsbHkuCisJCQkgKgor CQkJICogIEJ5dGVjb2RlIGNoYXJhY3RlcnMgYXJlIGFzc3VtZWQgdG8gYmUgYWxyZWFkeSBjYW5v bmljYWxpemVkLgorCQkJICogIElucHV0IGNoYXJhY3RlcnMgYXJlIGNhbm9uaWNhbGl6ZWQgYXV0 b21hdGljYWxseSBieQorCQkJICogIGR1a19faW5wX2dldF9jcCgpIGlmIG5lY2Vzc2FyeS4KKwkJ CSAqCisJCQkgKiAgVGhlcmUgaXMgbm8gb3Bjb2RlIGZvciBtYXRjaGluZyBtdWx0aXBsZSBjaGFy YWN0ZXJzLiAgVGhlCisJCQkgKiAgcmVnZXhwIGNvbXBpbGVyIGhhcyB0cm91YmxlIGpvaW5pbmcg c3RyaW5ncyBlZmZpY2llbnRseQorCQkJICogIGR1cmluZyBjb21waWxhdGlvbi4gIFNlZSBkb2Mv cmVnZXhwLnJzdCBmb3IgbW9yZSBkaXNjdXNzaW9uLgorCQkJICovCisJCQlkdWtfY29kZXBvaW50 X3QgYzEsIGMyOworCisJCQljMSA9IChkdWtfY29kZXBvaW50X3QpIGR1a19fYmNfZ2V0X3UzMihy ZV9jdHgsICZwYyk7CisJCQlEVUtfQVNTRVJUKCEocmVfY3R4LT5yZV9mbGFncyAmIERVS19SRV9G TEFHX0lHTk9SRV9DQVNFKSB8fAorCQkJICAgICAgICAgICBjMSA9PSBkdWtfdW5pY29kZV9yZV9j YW5vbmljYWxpemVfY2hhcihyZV9jdHgtPnRociwgYzEpKTsgIC8qIGNhbm9uaWNhbGl6ZWQgYnkg Y29tcGlsZXIgKi8KKwkJCWMyID0gZHVrX19pbnBfZ2V0X2NwKHJlX2N0eCwgJnNwKTsKKwkJCS8q IE5vIG5lZWQgdG8gY2hlY2sgZm9yIGMyIDwgMCAoZW5kIG9mIGlucHV0KTogYmVjYXVzZSBjMSA+ PSAwLCBpdAorCQkJICogd2lsbCBmYWlsIHRoZSBtYXRjaCBiZWxvdyBhdXRvbWF0aWNhbGx5IGFu ZCBjYXVzZSBnb3RvIGZhaWwuCisJCQkgKi8KKyNpZiAwCisJCQlpZiAoYzIgPCAwKSB7CisJCQkJ Z290byBmYWlsOworCQkJfQorI2VuZGlmCisJCQlEVUtfQVNTRVJUKGMxID49IDApOworCisJCQlE VUtfREREKERVS19ERERQUklOVCgiY2hhciBtYXRjaCwgYzE9JWxkLCBjMj0lbGQiLCAobG9uZykg YzEsIChsb25nKSBjMikpOworCQkJaWYgKGMxICE9IGMyKSB7CisJCQkJZ290byBmYWlsOworCQkJ fQorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVPUF9QRVJJT0Q6IHsKKwkJCWR1a19jb2Rl cG9pbnRfdCBjOworCisJCQljID0gZHVrX19pbnBfZ2V0X2NwKHJlX2N0eCwgJnNwKTsKKwkJCWlm IChjIDwgMCB8fCBkdWtfdW5pY29kZV9pc19saW5lX3Rlcm1pbmF0b3IoYykpIHsKKwkJCQkvKiBF NSBTZWN0aW9ucyAxNS4xMC4yLjgsIDcuMyAqLworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCWJy ZWFrOworCQl9CisJCWNhc2UgRFVLX1JFT1BfUkFOR0VTOgorCQljYXNlIERVS19SRU9QX0lOVlJB TkdFUzogeworCQkJZHVrX3VpbnQzMl90IG47CisJCQlkdWtfY29kZXBvaW50X3QgYzsKKwkJCWR1 a19zbWFsbF9pbnRfdCBtYXRjaDsKKworCQkJbiA9IGR1a19fYmNfZ2V0X3UzMihyZV9jdHgsICZw Yyk7CisJCQljID0gZHVrX19pbnBfZ2V0X2NwKHJlX2N0eCwgJnNwKTsKKwkJCWlmIChjIDwgMCkg eworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKworCQkJbWF0Y2ggPSAwOworCQkJd2hpbGUgKG4pIHsK KwkJCQlkdWtfY29kZXBvaW50X3QgcjEsIHIyOworCQkJCXIxID0gKGR1a19jb2RlcG9pbnRfdCkg ZHVrX19iY19nZXRfdTMyKHJlX2N0eCwgJnBjKTsKKwkJCQlyMiA9IChkdWtfY29kZXBvaW50X3Qp IGR1a19fYmNfZ2V0X3UzMihyZV9jdHgsICZwYyk7CisJCQkJRFVLX0RERChEVUtfREREUFJJTlQo Im1hdGNoaW5nIHJhbmdlcy9pbnZyYW5nZXMsIG49JWxkLCByMT0lbGQsIHIyPSVsZCwgYz0lbGQi LAorCQkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBuLCAobG9uZykgcjEsIChsb25nKSBy MiwgKGxvbmcpIGMpKTsKKwkJCQlpZiAoYyA+PSByMSAmJiBjIDw9IHIyKSB7CisJCQkJCS8qIE5v dGU6IGRvbid0IGJhaWwgb3V0IGVhcmx5LCB3ZSBtdXN0IHJlYWQgYWxsIHRoZSByYW5nZXMgZnJv bQorCQkJCQkgKiBieXRlY29kZS4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIHNraXAgdGhlbSBlZmZp Y2llbnRseSBhZnRlcgorCQkJCQkgKiBicmVha2luZyBvdXQgb2YgaGVyZS4gIFByZWZlciBzbWFs bGVzdCBjb2RlLgorCQkJCQkgKi8KKwkJCQkJbWF0Y2ggPSAxOworCQkJCX0KKwkJCQluLS07CisJ CQl9CisKKwkJCWlmIChvcCA9PSBEVUtfUkVPUF9SQU5HRVMpIHsKKwkJCQlpZiAoIW1hdGNoKSB7 CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCURVS19BU1NFUlQob3Ag PT0gRFVLX1JFT1BfSU5WUkFOR0VTKTsKKwkJCQlpZiAobWF0Y2gpIHsKKwkJCQkJZ290byBmYWls OworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX1JFT1BfQVNTRVJUX1NU QVJUOiB7CisJCQlkdWtfY29kZXBvaW50X3QgYzsKKworCQkJaWYgKHNwIDw9IHJlX2N0eC0+aW5w dXQpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghKHJlX2N0eC0+cmVfZmxhZ3MgJiBEVUtf UkVfRkxBR19NVUxUSUxJTkUpKSB7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJYyA9IGR1a19f aW5wX2dldF9wcmV2X2NwKHJlX2N0eCwgc3ApOworCQkJaWYgKGR1a191bmljb2RlX2lzX2xpbmVf dGVybWluYXRvcihjKSkgeworCQkJCS8qIEU1IFNlY3Rpb25zIDE1LjEwLjIuOCwgNy4zICovCisJ CQkJYnJlYWs7CisJCQl9CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJY2FzZSBEVUtfUkVPUF9BU1NF UlRfRU5EOiB7CisJCQlkdWtfY29kZXBvaW50X3QgYzsKKwkJCWNvbnN0IGR1a191aW50OF90ICp0 bXBfc3A7CisKKwkJCXRtcF9zcCA9IHNwOworCQkJYyA9IGR1a19faW5wX2dldF9jcChyZV9jdHgs ICZ0bXBfc3ApOworCQkJaWYgKGMgPCAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIShy ZV9jdHgtPnJlX2ZsYWdzICYgRFVLX1JFX0ZMQUdfTVVMVElMSU5FKSkgeworCQkJCWdvdG8gZmFp bDsKKwkJCX0KKwkJCWlmIChkdWtfdW5pY29kZV9pc19saW5lX3Rlcm1pbmF0b3IoYykpIHsKKwkJ CQkvKiBFNSBTZWN0aW9ucyAxNS4xMC4yLjgsIDcuMyAqLworCQkJCWJyZWFrOworCQkJfQorCQkJ Z290byBmYWlsOworCQl9CisJCWNhc2UgRFVLX1JFT1BfQVNTRVJUX1dPUkRfQk9VTkRBUlk6CisJ CWNhc2UgRFVLX1JFT1BfQVNTRVJUX05PVF9XT1JEX0JPVU5EQVJZOiB7CisJCQkvKgorCQkJICog IEU1IFNlY3Rpb24gMTUuMTAuMi42LiAgVGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IGNoYXJhY3Rl cgorCQkJICogIHNob3VsZCAtbm90LSBiZSBjYW5vbmljYWxpemVkIGFzIHRoZXkgYXJlIG5vdy4g IEhvd2V2ZXIsCisJCQkgKiAgY2Fub25pY2FsaXphdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHJl c3VsdCBvZiBJc1dvcmRDaGFyKCkKKwkJCSAqICAod2hpY2ggZGVwZW5kcyBvbiBVbmljb2RlIGNo YXJhY3RlcnMgbmV2ZXIgY2Fub25pY2FsaXppbmcKKwkJCSAqICBpbnRvIEFTQ0lJIGNoYXJhY3Rl cnMpIHNvIHRoaXMgZG9lcyBub3QgbWF0dGVyLgorCQkJICovCisJCQlkdWtfc21hbGxfaW50X3Qg dzEsIHcyOworCisJCQlpZiAoc3AgPD0gcmVfY3R4LT5pbnB1dCkgeworCQkJCXcxID0gMDsgIC8q IG5vdCBhIHdvcmRjaGFyICovCisJCQl9IGVsc2UgeworCQkJCWR1a19jb2RlcG9pbnRfdCBjOwor CQkJCWMgPSBkdWtfX2lucF9nZXRfcHJldl9jcChyZV9jdHgsIHNwKTsKKwkJCQl3MSA9IGR1a191 bmljb2RlX3JlX2lzX3dvcmRjaGFyKGMpOworCQkJfQorCQkJaWYgKHNwID49IHJlX2N0eC0+aW5w dXRfZW5kKSB7CisJCQkJdzIgPSAwOyAgLyogbm90IGEgd29yZGNoYXIgKi8KKwkJCX0gZWxzZSB7 CisJCQkJY29uc3QgZHVrX3VpbnQ4X3QgKnRtcF9zcCA9IHNwOyAgLyogZHVtbXkgc28gc3Agd29u J3QgZ2V0IHVwZGF0ZWQgKi8KKwkJCQlkdWtfY29kZXBvaW50X3QgYzsKKwkJCQljID0gZHVrX19p bnBfZ2V0X2NwKHJlX2N0eCwgJnRtcF9zcCk7CisJCQkJdzIgPSBkdWtfdW5pY29kZV9yZV9pc193 b3JkY2hhcihjKTsKKwkJCX0KKworCQkJaWYgKG9wID09IERVS19SRU9QX0FTU0VSVF9XT1JEX0JP VU5EQVJZKSB7CisJCQkJaWYgKHcxID09IHcyKSB7CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJ CQl9IGVsc2UgeworCQkJCURVS19BU1NFUlQob3AgPT0gRFVLX1JFT1BfQVNTRVJUX05PVF9XT1JE X0JPVU5EQVJZKTsKKwkJCQlpZiAodzEgIT0gdzIpIHsKKwkJCQkJZ290byBmYWlsOworCQkJCX0K KwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRFVLX1JFT1BfSlVNUDogeworCQkJZHVrX2lu dDMyX3Qgc2tpcDsKKworCQkJc2tpcCA9IGR1a19fYmNfZ2V0X2kzMihyZV9jdHgsICZwYyk7CisJ CQlwYyArPSBza2lwOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBEVUtfUkVPUF9TUExJVDE6IHsK KwkJCS8qIHNwbGl0MTogcHJlZmVyIGRpcmVjdCBleGVjdXRpb24gKG5vIGp1bXApICovCisJCQlj b25zdCBkdWtfdWludDhfdCAqc3ViX3NwOworCQkJZHVrX2ludDMyX3Qgc2tpcDsKKworCQkJc2tp cCA9IGR1a19fYmNfZ2V0X2kzMihyZV9jdHgsICZwYyk7CisJCQlzdWJfc3AgPSBkdWtfX21hdGNo X3JlZ2V4cChyZV9jdHgsIHBjLCBzcCk7CisJCQlpZiAoc3ViX3NwKSB7CisJCQkJc3AgPSBzdWJf c3A7CisJCQkJZ290byBtYXRjaDsKKwkJCX0KKwkJCXBjICs9IHNraXA7CisJCQlicmVhazsKKwkJ fQorCQljYXNlIERVS19SRU9QX1NQTElUMjogeworCQkJLyogc3BsaXQyOiBwcmVmZXIganVtcCBl eGVjdXRpb24gKG5vdCBkaXJlY3QpICovCisJCQljb25zdCBkdWtfdWludDhfdCAqc3ViX3NwOwor CQkJZHVrX2ludDMyX3Qgc2tpcDsKKworCQkJc2tpcCA9IGR1a19fYmNfZ2V0X2kzMihyZV9jdHgs ICZwYyk7CisJCQlzdWJfc3AgPSBkdWtfX21hdGNoX3JlZ2V4cChyZV9jdHgsIHBjICsgc2tpcCwg c3ApOworCQkJaWYgKHN1Yl9zcCkgeworCQkJCXNwID0gc3ViX3NwOworCQkJCWdvdG8gbWF0Y2g7 CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlIERVS19SRU9QX1NRTUlOSU1BTDogeworCQkJ ZHVrX3VpbnQzMl90IHEsIHFtaW4sIHFtYXg7CisJCQlkdWtfaW50MzJfdCBza2lwOworCQkJY29u c3QgZHVrX3VpbnQ4X3QgKnN1Yl9zcDsKKworCQkJcW1pbiA9IGR1a19fYmNfZ2V0X3UzMihyZV9j dHgsICZwYyk7CisJCQlxbWF4ID0gZHVrX19iY19nZXRfdTMyKHJlX2N0eCwgJnBjKTsKKwkJCXNr aXAgPSBkdWtfX2JjX2dldF9pMzIocmVfY3R4LCAmcGMpOworCQkJRFVLX0RERChEVUtfREREUFJJ TlQoIm1pbmltYWwgcXVhbnRpZmllciwgcW1pbj0lbHUsIHFtYXg9JWx1LCBza2lwPSVsZCIsCisJ CQkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgcW1pbiwgKHVuc2lnbmVkIGxv bmcpIHFtYXgsIChsb25nKSBza2lwKSk7CisKKwkJCXEgPSAwOworCQkJd2hpbGUgKHEgPD0gcW1h eCkgeworCQkJCWlmIChxID49IHFtaW4pIHsKKwkJCQkJc3ViX3NwID0gZHVrX19tYXRjaF9yZWdl eHAocmVfY3R4LCBwYyArIHNraXAsIHNwKTsKKwkJCQkJaWYgKHN1Yl9zcCkgeworCQkJCQkJc3Ag PSBzdWJfc3A7CisJCQkJCQlnb3RvIG1hdGNoOworCQkJCQl9CisJCQkJfQorCQkJCXN1Yl9zcCA9 IGR1a19fbWF0Y2hfcmVnZXhwKHJlX2N0eCwgcGMsIHNwKTsKKwkJCQlpZiAoIXN1Yl9zcCkgewor CQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3AgPSBzdWJfc3A7CisJCQkJcSsrOworCQkJfQorCQkJ Z290byBmYWlsOworCQl9CisJCWNhc2UgRFVLX1JFT1BfU1FHUkVFRFk6IHsKKwkJCWR1a191aW50 MzJfdCBxLCBxbWluLCBxbWF4LCBhdG9tbGVuOworCQkJZHVrX2ludDMyX3Qgc2tpcDsKKwkJCWNv bnN0IGR1a191aW50OF90ICpzdWJfc3A7CisKKwkJCXFtaW4gPSBkdWtfX2JjX2dldF91MzIocmVf Y3R4LCAmcGMpOworCQkJcW1heCA9IGR1a19fYmNfZ2V0X3UzMihyZV9jdHgsICZwYyk7CisJCQlh dG9tbGVuID0gZHVrX19iY19nZXRfdTMyKHJlX2N0eCwgJnBjKTsKKwkJCXNraXAgPSBkdWtfX2Jj X2dldF9pMzIocmVfY3R4LCAmcGMpOworCQkJRFVLX0RERChEVUtfREREUFJJTlQoImdyZWVkeSBx dWFudGlmaWVyLCBxbWluPSVsdSwgcW1heD0lbHUsIGF0b21sZW49JWx1LCBza2lwPSVsZCIsCisJ CQkgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgcW1pbiwgKHVuc2lnbmVkIGxv bmcpIHFtYXgsICh1bnNpZ25lZCBsb25nKSBhdG9tbGVuLCAobG9uZykgc2tpcCkpOworCisJCQlx ID0gMDsKKwkJCXdoaWxlIChxIDwgcW1heCkgeworCQkJCXN1Yl9zcCA9IGR1a19fbWF0Y2hfcmVn ZXhwKHJlX2N0eCwgcGMsIHNwKTsKKwkJCQlpZiAoIXN1Yl9zcCkgeworCQkJCQlicmVhazsKKwkJ CQl9CisJCQkJc3AgPSBzdWJfc3A7CisJCQkJcSsrOworCQkJfQorCQkJd2hpbGUgKHEgPj0gcW1p bikgeworCQkJCXN1Yl9zcCA9IGR1a19fbWF0Y2hfcmVnZXhwKHJlX2N0eCwgcGMgKyBza2lwLCBz cCk7CisJCQkJaWYgKHN1Yl9zcCkgeworCQkJCQlzcCA9IHN1Yl9zcDsKKwkJCQkJZ290byBtYXRj aDsKKwkJCQl9CisJCQkJaWYgKHEgPT0gcW1pbikgeworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJ CQkvKiBOb3RlOiBpZiBhdG9tIHdlcmUgdG8gY29udGFpbiBlLmcuIGNhcHR1cmVzLCB3ZSB3b3Vs ZCBuZWVkIHRvCisJCQkJICogcmUtbWF0Y2ggdGhlIGF0b20gdG8gZ2V0IGNvcnJlY3QgY2FwdHVy ZXMuICBTaW1wbHkgcXVhbnRpZmllcnMKKwkJCQkgKiBkbyBub3QgYWxsb3cgY2FwdHVyZXMgaW4g dGhlaXIgYXRvbSBub3csIHNvIHRoaXMgaXMgbm90IGFuIGlzc3VlLgorCQkJCSAqLworCisJCQkJ RFVLX0RERChEVUtfREREUFJJTlQoImdyZWVkeSBxdWFudGlmaWVyLCBiYWNrdHJhY2sgJWxkIGNo YXJhY3RlcnMgKGF0b21sZW4pIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAobG9uZykgYXRv bWxlbikpOworCQkJCXNwID0gZHVrX19pbnBfYmFja3RyYWNrKHJlX2N0eCwgJnNwLCAoZHVrX3Vp bnRfZmFzdDMyX3QpIGF0b21sZW4pOworCQkJCXEtLTsKKwkJCX0KKwkJCWdvdG8gZmFpbDsKKwkJ fQorCQljYXNlIERVS19SRU9QX1NBVkU6IHsKKwkJCWR1a191aW50MzJfdCBpZHg7CisJCQljb25z dCBkdWtfdWludDhfdCAqb2xkOworCQkJY29uc3QgZHVrX3VpbnQ4X3QgKnN1Yl9zcDsKKworCQkJ aWR4ID0gZHVrX19iY19nZXRfdTMyKHJlX2N0eCwgJnBjKTsKKwkJCWlmIChpZHggPj0gcmVfY3R4 LT5uc2F2ZWQpIHsKKwkJCQkvKiBpZHggaXMgdW5zaWduZWQsIDwgMCBjaGVjayBpcyBub3QgbmVj ZXNzYXJ5ICovCisJCQkJRFVLX0QoRFVLX0RQUklOVCgiaW50ZXJuYWwgZXJyb3IsIHJlZ2V4cCBz YXZlIGluZGV4IGluc2FuZTogaWR4PSVsZCIsIChsb25nKSBpZHgpKTsKKwkJCQlnb3RvIGludGVy bmFsX2Vycm9yOworCQkJfQorCQkJb2xkID0gcmVfY3R4LT5zYXZlZFtpZHhdOworCQkJcmVfY3R4 LT5zYXZlZFtpZHhdID0gc3A7CisJCQlzdWJfc3AgPSBkdWtfX21hdGNoX3JlZ2V4cChyZV9jdHgs IHBjLCBzcCk7CisJCQlpZiAoc3ViX3NwKSB7CisJCQkJc3AgPSBzdWJfc3A7CisJCQkJZ290byBt YXRjaDsKKwkJCX0KKwkJCXJlX2N0eC0+c2F2ZWRbaWR4XSA9IG9sZDsKKwkJCWdvdG8gZmFpbDsK KwkJfQorCQljYXNlIERVS19SRU9QX1dJUEVSQU5HRTogeworCQkJLyogV2lwZSBjYXB0dXJlIHJh bmdlIGFuZCBzYXZlIG9sZCB2YWx1ZXMgZm9yIGJhY2t0cmFja2luZy4KKwkJCSAqCisJCQkgKiBY WFg6IHRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2l0aCBhIHJlbGF0aXZlbHkgc21hbGwgaWR4X2Nv dW50LgorCQkJICogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUg Y291bnQgaXMgc21hbGwKKwkJCSAqIChzYXkgPD0gOCkgYnkgc2F2aW5nIHRoZSB2YWx1ZXMgaW4g c3RhY2sgaW5zdGVhZC4gIFRoaXMgd291bGQKKwkJCSAqIHJlZHVjZSBtZW1vcnkgY2h1cm4gYW5k IGltcHJvdmUgcGVyZm9ybWFuY2UsIGF0IHRoZSBjb3N0IG9mIGEKKwkJCSAqIHNsaWdodGx5IGhp Z2hlciBjb2RlIGZvb3RwcmludC4KKwkJCSAqLworCQkJZHVrX3VpbnQzMl90IGlkeF9zdGFydCwg aWR4X2NvdW50OworI2lmIGRlZmluZWQoRFVLX1VTRV9FWFBMSUNJVF9OVUxMX0lOSVQpCisJCQlk dWtfdWludDMyX3QgaWR4X2VuZCwgaWR4OworI2VuZGlmCisJCQlkdWtfdWludDhfdCAqKnJhbmdl X3NhdmU7CisJCQljb25zdCBkdWtfdWludDhfdCAqc3ViX3NwOworCisJCQlpZHhfc3RhcnQgPSBk dWtfX2JjX2dldF91MzIocmVfY3R4LCAmcGMpOworCQkJaWR4X2NvdW50ID0gZHVrX19iY19nZXRf dTMyKHJlX2N0eCwgJnBjKTsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJ3aXBlIHNhdmVkIHJh bmdlOiBzdGFydD0lbGQsIGNvdW50PSVsZCAtPiBbJWxkLCVsZF0gKGNhcHR1cmVzIFslbGQsJWxk XSkiLAorCQkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGlkeF9zdGFydCwgKGxvbmcpIGlk eF9jb3VudCwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpZHhfc3RhcnQsIChsb25n KSAoaWR4X3N0YXJ0ICsgaWR4X2NvdW50IC0gMSksCisJCQkgICAgICAgICAgICAgICAgICAgICAo bG9uZykgKGlkeF9zdGFydCAvIDIpLCAobG9uZykgKChpZHhfc3RhcnQgKyBpZHhfY291bnQgLSAx KSAvIDIpKSk7CisJCQlpZiAoaWR4X3N0YXJ0ICsgaWR4X2NvdW50ID4gcmVfY3R4LT5uc2F2ZWQg fHwgaWR4X2NvdW50ID09IDApIHsKKwkJCQkvKiBpZHggaXMgdW5zaWduZWQsIDwgMCBjaGVjayBp cyBub3QgbmVjZXNzYXJ5ICovCisJCQkJRFVLX0QoRFVLX0RQUklOVCgiaW50ZXJuYWwgZXJyb3Is IHJlZ2V4cCB3aXBlIGluZGljZXMgaW5zYW5lOiBpZHhfc3RhcnQ9JWxkLCBpZHhfY291bnQ9JWxk IiwKKwkJCQkgICAgICAgICAgICAgICAgIChsb25nKSBpZHhfc3RhcnQsIChsb25nKSBpZHhfY291 bnQpKTsKKwkJCQlnb3RvIGludGVybmFsX2Vycm9yOworCQkJfQorCQkJRFVLX0FTU0VSVChpZHhf Y291bnQgPiAwKTsKKworCQkJZHVrX3JlcXVpcmVfc3RhY2socmVfY3R4LT50aHIsIDEpOworCQkJ cmFuZ2Vfc2F2ZSA9IChkdWtfdWludDhfdCAqKikgZHVrX3B1c2hfZml4ZWRfYnVmZmVyX25vemVy byhyZV9jdHgtPnRociwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGR1a191aW50OF90ICopICogaWR4X2NvdW50KTsK KwkJCURVS19BU1NFUlQocmFuZ2Vfc2F2ZSAhPSBOVUxMKTsKKwkJCWR1a19tZW1jcHkocmFuZ2Vf c2F2ZSwgcmVfY3R4LT5zYXZlZCArIGlkeF9zdGFydCwgc2l6ZW9mKGR1a191aW50OF90ICopICog aWR4X2NvdW50KTsKKyNpZiBkZWZpbmVkKERVS19VU0VfRVhQTElDSVRfTlVMTF9JTklUKQorCQkJ aWR4X2VuZCA9IGlkeF9zdGFydCArIGlkeF9jb3VudDsKKwkJCWZvciAoaWR4ID0gaWR4X3N0YXJ0 OyBpZHggPCBpZHhfZW5kOyBpZHgrKykgeworCQkJCXJlX2N0eC0+c2F2ZWRbaWR4XSA9IE5VTEw7 CisJCQl9CisjZWxzZQorCQkJZHVrX21lbXplcm8oKHZvaWQgKikgKHJlX2N0eC0+c2F2ZWQgKyBp ZHhfc3RhcnQpLCBzaXplb2YoZHVrX3VpbnQ4X3QgKikgKiBpZHhfY291bnQpOworI2VuZGlmCisK KwkJCXN1Yl9zcCA9IGR1a19fbWF0Y2hfcmVnZXhwKHJlX2N0eCwgcGMsIHNwKTsKKwkJCWlmIChz dWJfc3ApIHsKKwkJCQkvKiBtYXRjaDoga2VlcCB3aXBlZC9yZXNhdmVkIHZhbHVlcyAqLworCQkJ CURVS19EREQoRFVLX0RERFBSSU5UKCJtYXRjaDoga2VlcCB3aXBlZC9yZXNhdmVkIHZhbHVlcyBb JWxkLCVsZF0gKGNhcHR1cmVzIFslbGQsJWxkXSkiLAorCQkJCSAgICAgICAgICAgICAgICAgICAg IChsb25nKSBpZHhfc3RhcnQsIChsb25nKSAoaWR4X3N0YXJ0ICsgaWR4X2NvdW50IC0gMSksCisJ CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAoaWR4X3N0YXJ0IC8gMiksIChs b25nKSAoKGlkeF9zdGFydCArIGlkeF9jb3VudCAtIDEpIC8gMikpKTsKKwkJCQlkdWtfcG9wX3Vu c2FmZShyZV9jdHgtPnRocik7CisJCQkJc3AgPSBzdWJfc3A7CisJCQkJZ290byBtYXRjaDsKKwkJ CX0KKworCQkJLyogZmFpbDogcmVzdG9yZSBzYXZlcyAqLworCQkJRFVLX0RERChEVUtfREREUFJJ TlQoImZhaWw6IHJlc3RvcmUgd2lwZWQvcmVzYXZlZCB2YWx1ZXMgWyVsZCwlbGRdIChjYXB0dXJl cyBbJWxkLCVsZF0pIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgIChsb25nKSBpZHhfc3RhcnQs IChsb25nKSAoaWR4X3N0YXJ0ICsgaWR4X2NvdW50IC0gMSksCisJCQkgICAgICAgICAgICAgICAg ICAgICAobG9uZykgKGlkeF9zdGFydCAvIDIpLCAobG9uZykgKChpZHhfc3RhcnQgKyBpZHhfY291 bnQgLSAxKSAvIDIpKSk7CisJCQlkdWtfbWVtY3B5KCh2b2lkICopIChyZV9jdHgtPnNhdmVkICsg aWR4X3N0YXJ0KSwKKwkJCSAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgcmFuZ2Vfc2F2ZSwKKwkJ CSAgICAgICAgICAgc2l6ZW9mKGR1a191aW50OF90ICopICogaWR4X2NvdW50KTsKKwkJCWR1a19w b3BfdW5zYWZlKHJlX2N0eC0+dGhyKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQljYXNlIERVS19S RU9QX0xPT0tQT1M6CisJCWNhc2UgRFVLX1JFT1BfTE9PS05FRzogeworCQkJLyoKKwkJCSAqICBO ZWVkcyBhIHNhdmUgb2YgbXVsdGlwbGUgc2F2ZWRbXSBlbnRyaWVzIGRlcGVuZGluZyBvbiB3aGF0 IHJhbmdlCisJCQkgKiAgbWF5IGJlIG92ZXJ3cml0dGVuLiAgQmVjYXVzZSB0aGUgcmVnZXhwIHBh cnNlciBkb2VzIG5vIHN1Y2ggYW5hbHlzaXMsCisJCQkgKiAgd2UgY3VycmVudGx5IHNhdmUgdGhl IGVudGlyZSBzYXZlZCBhcnJheSBoZXJlLiAgTG9va2FoZWFkcyBhcmUgdGh1cworCQkJICogIGEg Yml0IGV4cGVuc2l2ZS4gIE5vdGUgdGhhdCB0aGUgc2F2ZWQgYXJyYXkgaXMgbm90IG5lZWRlZCBm b3IganVzdAorCQkJICogIHRoZSBsb29rYWhlYWQgc3ViLW1hdGNoLCBidXQgZm9yIHRoZSBtYXRj aGluZyBvZiB0aGUgZW50aXJlIHNlcXVlbC4KKwkJCSAqCisJCQkgKiAgVGhlIHRlbXBvcmFyeSBz YXZlIGJ1ZmZlciBpcyBwdXNoZWQgb24gdG8gdGhlIHZhbHN0YWNrIHRvIGhhbmRsZQorCQkJICog IGVycm9ycyBjb3JyZWN0bHkuICBFYWNoIGxvb2thaGVhZCBjYXVzZXMgYSBDIHJlY3Vyc2lvbiBh bmQgcHVzaGVzCisJCQkgKiAgbW9yZSBzdHVmZiBvbiB0aGUgdmFsdWUgc3RhY2suICBJZiB0aGUg QyByZWN1cnNpb24gbGltaXQgaXMgbGVzcworCQkJICogIHRoYW4gdGhlIHZhbHVlIHN0YWNrIHNs YWNrLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHRoZSBzdGFjay4KKwkJCSAqICBXZSBkbyBz byByZWdhcmRsZXNzLCBqdXN0IGluIGNhc2UuCisJCQkgKi8KKworCQkJZHVrX2ludDMyX3Qgc2tp cDsKKwkJCWR1a191aW50OF90ICoqZnVsbF9zYXZlOworCQkJY29uc3QgZHVrX3VpbnQ4X3QgKnN1 Yl9zcDsKKworCQkJRFVLX0FTU0VSVChyZV9jdHgtPm5zYXZlZCA+IDApOworCisJCQlkdWtfcmVx dWlyZV9zdGFjayhyZV9jdHgtPnRociwgMSk7CisJCQlmdWxsX3NhdmUgPSAoZHVrX3VpbnQ4X3Qg KiopIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcl9ub3plcm8ocmVfY3R4LT50aHIsCisJCQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KGR1a191aW50OF90ICopICogcmVfY3R4LT5uc2F2ZWQpOworCQkJRFVLX0FTU0VSVChmdWxsX3Nh dmUgIT0gTlVMTCk7CisJCQlkdWtfbWVtY3B5KGZ1bGxfc2F2ZSwgcmVfY3R4LT5zYXZlZCwgc2l6 ZW9mKGR1a191aW50OF90ICopICogcmVfY3R4LT5uc2F2ZWQpOworCisJCQlza2lwID0gZHVrX19i Y19nZXRfaTMyKHJlX2N0eCwgJnBjKTsKKwkJCXN1Yl9zcCA9IGR1a19fbWF0Y2hfcmVnZXhwKHJl X2N0eCwgcGMsIHNwKTsKKwkJCWlmIChvcCA9PSBEVUtfUkVPUF9MT09LUE9TKSB7CisJCQkJaWYg KCFzdWJfc3ApIHsKKwkJCQkJZ290byBsb29rYWhlYWRfZmFpbDsKKwkJCQl9CisJCQl9IGVsc2Ug eworCQkJCWlmIChzdWJfc3ApIHsKKwkJCQkJZ290byBsb29rYWhlYWRfZmFpbDsKKwkJCQl9CisJ CQl9CisJCQlzdWJfc3AgPSBkdWtfX21hdGNoX3JlZ2V4cChyZV9jdHgsIHBjICsgc2tpcCwgc3Ap OworCQkJaWYgKHN1Yl9zcCkgeworCQkJCS8qIG1hdGNoOiBrZWVwIHNhdmVzICovCisJCQkJZHVr X3BvcF91bnNhZmUocmVfY3R4LT50aHIpOworCQkJCXNwID0gc3ViX3NwOworCQkJCWdvdG8gbWF0 Y2g7CisJCQl9CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCSBsb29rYWhlYWRfZmFpbDoK KwkJCS8qIGZhaWw6IHJlc3RvcmUgc2F2ZXMgKi8KKwkJCWR1a19tZW1jcHkoKHZvaWQgKikgcmVf Y3R4LT5zYXZlZCwKKwkJCSAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgZnVsbF9zYXZlLAorCQkJ ICAgICAgICAgICBzaXplb2YoZHVrX3VpbnQ4X3QgKikgKiByZV9jdHgtPm5zYXZlZCk7CisJCQlk dWtfcG9wX3Vuc2FmZShyZV9jdHgtPnRocik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJY2FzZSBE VUtfUkVPUF9CQUNLUkVGRVJFTkNFOiB7CisJCQkvKgorCQkJICogIEJ5dGUgbWF0Y2hpbmcgZm9y IGJhY2stcmVmZXJlbmNlcyB3b3VsZCBiZSBPSyBpbiBjYXNlLQorCQkJICogIHNlbnNpdGl2ZSBt YXRjaGluZy4gIEluIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcgd2UgbmVlZAorCQkJICogIHRv IGNhbm9uaWNhbGl6ZSBjaGFyYWN0ZXJzLCBzbyBiYWNrLXJlZmVyZW5jZSBtYXRjaGluZyBuZWVk cworCQkJICogIHRvIGJlIGRvbmUgd2l0aCBjb2RlcG9pbnRzIGluc3RlYWQuICBTbywgd2UganVz dCBkZWNvZGUKKwkJCSAqICBldmVyeXRoaW5nIG5vcm1hbGx5IGhlcmUsIHRvby4KKwkJCSAqCisJ CQkgKiAgTm90ZTogYmFjay1yZWZlcmVuY2UgaW5kZXggd2hpY2ggaXMgMCBvciBoaWdoZXIgdGhh bgorCQkJICogIE5DYXB0dXJpbmdQYXJlbnMgKD0gbnVtYmVyIG9mIGNhcHR1cmluZyBwYXJlbnMg aW4gdGhlCisJCQkgKiAgLWVudGlyZS0gcmVnZXhwKSBpcyBhIGNvbXBpbGUgdGltZSBlcnJvci4g IEhvd2V2ZXIsIGEKKwkJCSAqICBiYWNrcmVmZXJlbmNlIHJlZmVycmluZyB0byBhIHZhbGlkIGNh cHR1cmUgd2hpY2ggaGFzCisJCQkgKiAgbm90IG1hdGNoZWQgYW55dGhpbmcgYWx3YXlzIHN1Y2Nl ZWRzISAgU2VlIEU1IFNlY3Rpb24KKwkJCSAqICAxNS4xMC4yLjksIHN0ZXAgNSwgc3ViLXN0ZXAg My4KKwkJCSAqLworCQkJZHVrX3VpbnQzMl90IGlkeDsKKwkJCWNvbnN0IGR1a191aW50OF90ICpw OworCisJCQlpZHggPSBkdWtfX2JjX2dldF91MzIocmVfY3R4LCAmcGMpOworCQkJaWR4ID0gaWR4 IDw8IDE7ICAvKiBiYWNrcmVmIG4gLT4gc2F2ZWQgaW5kaWNlcyBbbioyLCBuKjIrMV0gKi8KKwkJ CWlmIChpZHggPCAyIHx8IGlkeCArIDEgPj0gcmVfY3R4LT5uc2F2ZWQpIHsKKwkJCQkvKiByZWdl eHAgY29tcGlsZXIgc2hvdWxkIGNhdGNoIHRoZXNlICovCisJCQkJRFVLX0QoRFVLX0RQUklOVCgi aW50ZXJuYWwgZXJyb3IsIGJhY2tyZWZlcmVuY2UgaW5kZXggaW5zYW5lIikpOworCQkJCWdvdG8g aW50ZXJuYWxfZXJyb3I7CisJCQl9CisJCQlpZiAoIXJlX2N0eC0+c2F2ZWRbaWR4XSB8fCAhcmVf Y3R4LT5zYXZlZFtpZHgrMV0pIHsKKwkJCQkvKiBjYXB0dXJlIGlzICd1bmRlZmluZWQnLCBhbHdh eXMgbWF0Y2hlcyEgKi8KKwkJCQlEVUtfREREKERVS19ERERQUklOVCgiYmFja3JlZmVyZW5jZTog c2F2ZWRbJWxkLCVsZF0gbm90IGNvbXBsZXRlLCBhbHdheXMgbWF0Y2giLAorCQkJCSAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBpZHgsIChsb25nKSAoaWR4ICsgMSkpKTsKKwkJCQlicmVhazsK KwkJCX0KKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJiYWNrcmVmZXJlbmNlOiBtYXRjaCBzYXZl ZFslbGQsJWxkXSIsIChsb25nKSBpZHgsIChsb25nKSAoaWR4ICsgMSkpKTsKKworCQkJcCA9IHJl X2N0eC0+c2F2ZWRbaWR4XTsKKwkJCXdoaWxlIChwIDwgcmVfY3R4LT5zYXZlZFtpZHgrMV0pIHsK KwkJCQlkdWtfY29kZXBvaW50X3QgYzEsIGMyOworCisJCQkJLyogTm90ZTogbm90IG5lY2Vzc2Fy eSB0byBjaGVjayBwIGFnYWluc3QgcmVfY3R4LT5pbnB1dF9lbmQ6CisJCQkJICogdGhlIG1lbW9y eSBhY2Nlc3MgaXMgY2hlY2tlZCBieSBkdWtfX2lucF9nZXRfY3AoKSwgd2hpbGUKKwkJCQkgKiB2 YWxpZCBjb21waWxlZCByZWdleHBzIGNhbm5vdCB3cml0ZSBhIHNhdmVkW10gZW50cnkKKwkJCQkg KiB3aGljaCBwb2ludHMgdG8gb3V0c2lkZSB0aGUgc3RyaW5nLgorCQkJCSAqLworCQkJCWMxID0g ZHVrX19pbnBfZ2V0X2NwKHJlX2N0eCwgJnApOworCQkJCURVS19BU1NFUlQoYzEgPj0gMCk7CisJ CQkJYzIgPSBkdWtfX2lucF9nZXRfY3AocmVfY3R4LCAmc3ApOworCQkJCS8qIE5vIG5lZWQgZm9y IGFuIGV4cGxpY2l0IGMyIDwgMCBjaGVjazogYmVjYXVzZSBjMSA+PSAwLAorCQkJCSAqIHRoZSBj b21wYXJpc29uIHdpbGwgYWx3YXlzIGZhaWwgaWYgYzIgPCAwLgorCQkJCSAqLworI2lmIDAKKwkJ CQlpZiAoYzIgPCAwKSB7CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisjZW5kaWYKKwkJCQlpZiAo YzEgIT0gYzIpIHsKKwkJCQkJZ290byBmYWlsOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9 CisJCWRlZmF1bHQ6IHsKKwkJCURVS19EKERVS19EUFJJTlQoImludGVybmFsIGVycm9yLCByZWdl eHAgb3Bjb2RlIGVycm9yOiAlbGQiLCAobG9uZykgb3ApKTsKKwkJCWdvdG8gaW50ZXJuYWxfZXJy b3I7CisJCX0KKwkJfQorCX0KKworIG1hdGNoOgorCXJlX2N0eC0+cmVjdXJzaW9uX2RlcHRoLS07 CisJcmV0dXJuIHNwOworCisgZmFpbDoKKwlyZV9jdHgtPnJlY3Vyc2lvbl9kZXB0aC0tOworCXJl dHVybiBOVUxMOworCisgaW50ZXJuYWxfZXJyb3I6CisJRFVLX0VSUk9SX0lOVEVSTkFMKHJlX2N0 eC0+dGhyKTsKKwlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKK30KKworLyoKKyAqICBF eHBvc2VkIG1hdGNoZXIgZnVuY3Rpb24gd2hpY2ggcHJvdmlkZXMgdGhlIHNlbWFudGljcyBvZiBS ZWdFeHAucHJvdG90eXBlLmV4ZWMoKS4KKyAqCisgKiAgUmVnRXhwLnByb3RvdHlwZS50ZXN0KCkg aGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyBleGVjKCkgYnV0IGRvZXMgbm90IHJldHVybiB0aGUK KyAqICByZXN1bHQgb2JqZWN0ICh3aGljaCBjb250YWlucyB0aGUgbWF0Y2hpbmcgc3RyaW5nIGFu ZCBjYXB0dXJlIGdyb3VwcykuICBDdXJyZW50bHkKKyAqICB0aGVyZSBpcyBubyBzZXBhcmF0ZSB0 ZXN0KCkgaGVscGVyLCBzbyBhIHRlbXBvcmFyeSByZXN1bHQgb2JqZWN0IGlzIGNyZWF0ZWQgYW5k CisgKiAgZGlzY2FyZGVkIGlmIHRlc3QoKSBpcyBuZWVkZWQuICBUaGlzIGlzIGludGVudGlvbmFs LCB0byBzYXZlIGNvZGUgc3BhY2UuCisgKgorICogIElucHV0IHN0YWNrOiAgWyAuLi4gcmVfb2Jq IGlucHV0IF0KKyAqICBPdXRwdXQgc3RhY2s6IFsgLi4uIHJlc3VsdCBdCisgKi8KKworRFVLX0xP Q0FMIHZvaWQgZHVrX19yZWdleHBfbWF0Y2hfaGVscGVyKGR1a19odGhyZWFkICp0aHIsIGR1a19z bWFsbF9pbnRfdCBmb3JjZV9nbG9iYWwpIHsKKwlkdWtfcmVfbWF0Y2hlcl9jdHggcmVfY3R4Owor CWR1a19ob2JqZWN0ICpoX3JlZ2V4cDsKKwlkdWtfaHN0cmluZyAqaF9ieXRlY29kZTsKKwlkdWtf aHN0cmluZyAqaF9pbnB1dDsKKwlkdWtfdWludDhfdCAqcF9idWY7CisJY29uc3QgZHVrX3VpbnQ4 X3QgKnBjOworCWNvbnN0IGR1a191aW50OF90ICpzcDsKKwlkdWtfc21hbGxfaW50X3QgbWF0Y2gg PSAwOworCWR1a19zbWFsbF9pbnRfdCBnbG9iYWw7CisJZHVrX3VpbnRfZmFzdDMyX3QgaTsKKwlk b3VibGUgZDsKKwlkdWtfdWludDMyX3QgY2hhcl9vZmZzZXQ7CisKKwlEVUtfQVNTRVJUKHRociAh PSBOVUxMKTsKKworCURVS19ERChEVUtfRERQUklOVCgicmVnZXhwIG1hdGNoOiByZWdleHA9JSFU LCBpbnB1dD0lIVQiLAorCSAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90 dmFsKHRociwgLTIpLAorCSAgICAgICAgICAgICAgICAgICAoZHVrX3R2YWwgKikgZHVrX2dldF90 dmFsKHRociwgLTEpKSk7CisKKwkvKgorCSAqICBSZWdleHAgaW5zdGFuY2UgY2hlY2ssIGJ5dGVj b2RlIGNoZWNrLCBpbnB1dCBjb2VyY2lvbi4KKwkgKgorCSAqICBTZWUgRTUgU2VjdGlvbiAxNS4x MC42LgorCSAqLworCisJLyogVHlwZUVycm9yIGlmIHdyb25nOyBjbGFzcyBjaGVjaywgc2VlIEU1 IFNlY3Rpb24gMTUuMTAuNiAqLworCWhfcmVnZXhwID0gZHVrX3JlcXVpcmVfaG9iamVjdF93aXRo X2NsYXNzKHRociwgLTIsIERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCk7CisJRFVLX0FTU0VSVCho X3JlZ2V4cCAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKERVS19IT0JKRUNUX0dFVF9DTEFTU19OVU1C RVIoaF9yZWdleHApID09IERVS19IT0JKRUNUX0NMQVNTX1JFR0VYUCk7CisJRFVLX1VOUkVGKGhf cmVnZXhwKTsKKworCWhfaW5wdXQgPSBkdWtfdG9faHN0cmluZyh0aHIsIC0xKTsKKwlEVUtfQVNT RVJUKGhfaW5wdXQgIT0gTlVMTCk7CisKKwlkdWtfZ2V0X3Byb3Bfc3RyaWR4X3Nob3J0KHRociwg LTIsIERVS19TVFJJRFhfSU5UX0JZVEVDT0RFKTsgIC8qIFsgLi4uIHJlX29iaiBpbnB1dCBdIC0+ IFsgLi4uIHJlX29iaiBpbnB1dCBiYyBdICovCisJaF9ieXRlY29kZSA9IGR1a19yZXF1aXJlX2hz dHJpbmcodGhyLCAtMSk7ICAvKiBubyByZWdleHAgaW5zdGFuY2Ugc2hvdWxkIGV4aXN0IHdpdGhv dXQgYSBub24tY29uZmlndXJhYmxlIGJ5dGVjb2RlIHByb3BlcnR5ICovCisJRFVLX0FTU0VSVCho X2J5dGVjb2RlICE9IE5VTEwpOworCisJLyoKKwkgKiAgQmFzaWMgY29udGV4dCBpbml0aWFsaXph dGlvbi4KKwkgKgorCSAqICBTb21lIGluaXQgdmFsdWVzIGFyZSByZWFkIGZyb20gdGhlIGJ5dGVj b2RlIGhlYWRlcgorCSAqICB3aG9zZSBmb3JtYXQgaXMgKFVURi04IGNvZGVwb2ludHMpOgorCSAq CisJICogICAgdWludCAgIGZsYWdzCisJICogICAgdWludCAgIG5zYXZlZCAoZXZlbiwgMm4rMiB3 aGVyZSBuID0gbnVtIGNhcHR1cmVzKQorCSAqLworCisJLyogWyAuLi4gcmVfb2JqIGlucHV0IGJj IF0gKi8KKworCWR1a19tZW16ZXJvKCZyZV9jdHgsIHNpemVvZihyZV9jdHgpKTsKKworCXJlX2N0 eC50aHIgPSB0aHI7CisJcmVfY3R4LmlucHV0ID0gKGNvbnN0IGR1a191aW50OF90ICopIERVS19I U1RSSU5HX0dFVF9EQVRBKGhfaW5wdXQpOworCXJlX2N0eC5pbnB1dF9lbmQgPSByZV9jdHguaW5w dXQgKyBEVUtfSFNUUklOR19HRVRfQllURUxFTihoX2lucHV0KTsKKwlyZV9jdHguYnl0ZWNvZGUg PSAoY29uc3QgZHVrX3VpbnQ4X3QgKikgRFVLX0hTVFJJTkdfR0VUX0RBVEEoaF9ieXRlY29kZSk7 CisJcmVfY3R4LmJ5dGVjb2RlX2VuZCA9IHJlX2N0eC5ieXRlY29kZSArIERVS19IU1RSSU5HX0dF VF9CWVRFTEVOKGhfYnl0ZWNvZGUpOworCXJlX2N0eC5zYXZlZCA9IE5VTEw7CisJcmVfY3R4LnJl Y3Vyc2lvbl9saW1pdCA9IERVS19VU0VfUkVHRVhQX0VYRUNVVE9SX1JFQ0xJTUlUOworCXJlX2N0 eC5zdGVwc19saW1pdCA9IERVS19SRV9FWEVDVVRFX1NURVBTX0xJTUlUOworCisJLyogcmVhZCBo ZWFkZXIgKi8KKwlwYyA9IHJlX2N0eC5ieXRlY29kZTsKKwlyZV9jdHgucmVfZmxhZ3MgPSBkdWtf X2JjX2dldF91MzIoJnJlX2N0eCwgJnBjKTsKKwlyZV9jdHgubnNhdmVkID0gZHVrX19iY19nZXRf dTMyKCZyZV9jdHgsICZwYyk7CisJcmVfY3R4LmJ5dGVjb2RlID0gcGM7CisKKwlEVUtfQVNTRVJU KERVS19SRV9GTEFHX0dMT0JBTCA8IDB4MTAwMDBVTCk7ICAvKiBtdXN0IGZpdCBpbnRvIGR1a19z bWFsbF9pbnRfdCAqLworCWdsb2JhbCA9IChkdWtfc21hbGxfaW50X3QpIChmb3JjZV9nbG9iYWwg fCAoZHVrX3NtYWxsX2ludF90KSAocmVfY3R4LnJlX2ZsYWdzICYgRFVLX1JFX0ZMQUdfR0xPQkFM KSk7CisKKwlEVUtfQVNTRVJUKHJlX2N0eC5uc2F2ZWQgPj0gMik7CisJRFVLX0FTU0VSVCgocmVf Y3R4Lm5zYXZlZCAlIDIpID09IDApOworCisJcF9idWYgPSAoZHVrX3VpbnQ4X3QgKikgZHVrX3B1 c2hfZml4ZWRfYnVmZmVyKHRociwgc2l6ZW9mKGR1a191aW50OF90ICopICogcmVfY3R4Lm5zYXZl ZCk7ICAvKiByZWx5IG9uIHplcm9pbmcgKi8KKwlEVUtfVU5SRUYocF9idWYpOworCXJlX2N0eC5z YXZlZCA9IChjb25zdCBkdWtfdWludDhfdCAqKikgZHVrX2dldF9idWZmZXIodGhyLCAtMSwgTlVM TCk7CisJRFVLX0FTU0VSVChyZV9jdHguc2F2ZWQgIT0gTlVMTCk7CisKKwkvKiBbIC4uLiByZV9v YmogaW5wdXQgYmMgc2F2ZWRfYnVmIF0gKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9FWFBMSUNJ VF9OVUxMX0lOSVQpCisJZm9yIChpID0gMDsgaSA8IHJlX2N0eC5uc2F2ZWQ7IGkrKykgeworCQly ZV9jdHguc2F2ZWRbaV0gPSAoZHVrX3VpbnQ4X3QgKikgTlVMTDsKKwl9CisjZWxpZiBkZWZpbmVk KERVS19VU0VfWkVST19CVUZGRVJfREFUQSkKKwkvKiBidWZmZXIgaXMgYXV0b21hdGljYWxseSB6 ZXJvZWQgKi8KKyNlbHNlCisJZHVrX21lbXplcm8oKHZvaWQgKikgcF9idWYsIHNpemVvZihkdWtf dWludDhfdCAqKSAqIHJlX2N0eC5uc2F2ZWQpOworI2VuZGlmCisKKwlEVUtfREREKERVS19ERERQ UklOVCgicmVnZXhwIGN0eCBpbml0aWFsaXplZCwgZmxhZ3M9MHglMDhseCwgbnNhdmVkPSVsZCwg cmVjdXJzaW9uX2xpbWl0PSVsZCwgc3RlcHNfbGltaXQ9JWxkIiwKKwkgICAgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZykgcmVfY3R4LnJlX2ZsYWdzLCAobG9uZykgcmVfY3R4Lm5zYXZl ZCwgKGxvbmcpIHJlX2N0eC5yZWN1cnNpb25fbGltaXQsCisJICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIHJlX2N0eC5zdGVwc19saW1pdCkpOworCisJLyoKKwkgKiAgR2V0IHN0YXJ0aW5nIGNo YXJhY3RlciBvZmZzZXQgZm9yIG1hdGNoLCBhbmQgaW5pdGlhbGl6ZSAnc3AnIGJhc2VkIG9uIGl0 LgorCSAqCisJICogIE5vdGU6IGxhc3RJbmRleCBpcyBub24tY29uZmlndXJhYmxlIHNvIGl0IG11 c3QgYmUgcHJlc2VudCAod2UgY2hlY2sgdGhlCisJICogIGludGVybmFsIGNsYXNzIG9mIHRoZSBv YmplY3QgYWJvdmUsIHNvIHdlIGtub3cgaXQgaXMpLiAgVXNlciBjb2RlIGNhbiBzZXQKKwkgKiAg aXRzIHZhbHVlIHRvIGFuIGFyYml0cmFyeSAoZ2FyYmFnZSkgdmFsdWUgdGhvdWdoOyBFNSByZXF1 aXJlcyB0aGF0IGxhc3RJbmRleAorCSAqICBiZSBjb2VyY2VkIHRvIGEgbnVtYmVyIGJlZm9yZSB1 c2luZy4gIFRoZSBjb2RlIGJlbG93IHdvcmtzIGV2ZW4gaWYgdGhlCisJICogIHByb3BlcnR5IGlz IG1pc3Npbmc6IHRoZSB2YWx1ZSB3aWxsIHRoZW4gYmUgY29lcmNlZCB0byB6ZXJvLgorCSAqCisJ ICogIE5vdGU6IGxhc3RJbmRleCBtYXkgYmUgb3V0c2lkZSBVaW50MzIgcmFuZ2UgZXZlbiBhZnRl ciBUb0ludGVnZXIoKSBjb2VyY2lvbi4KKwkgKiAgRm9yIGluc3RhbmNlLCBUb0ludGVnZXIoK0lu ZmluaXR5KSA9ICtJbmZpbml0eS4gIFdlIHRyYWNrIHRoZSBtYXRjaCBvZmZzZXQKKwkgKiAgYXMg YW4gaW50ZWdlciwgYnV0IHByZS1jaGVjayBpdCB0byBiZSBpbnNpZGUgdGhlIDMyLWJpdCByYW5n ZSBiZWZvcmUgdGhlIGxvb3AuCisJICogIElmIG5vdCwgdGhlIGNoZWNrIGluIEU1IFNlY3Rpb24g MTUuMTAuNi4yLCBzdGVwIDkuYSBhcHBsaWVzLgorCSAqLworCisJLyogWFhYOiBsYXN0SW5kZXgg aGFuZGxpbmcgcHJvZHVjZXMgYSBsb3Qgb2YgYXNtICovCisKKwkvKiBbIC4uLiByZV9vYmogaW5w dXQgYmMgc2F2ZWRfYnVmIF0gKi8KKworCWR1a19nZXRfcHJvcF9zdHJpZHhfc2hvcnQodGhyLCAt NCwgRFVLX1NUUklEWF9MQVNUX0lOREVYKTsgIC8qIC0+IFsgLi4uIHJlX29iaiBpbnB1dCBiYyBz YXZlZF9idWYgbGFzdEluZGV4IF0gKi8KKwkodm9pZCkgZHVrX3RvX2ludCh0aHIsIC0xKTsgIC8q IFRvSW50ZWdlcihsYXN0SW5kZXgpICovCisJZCA9IGR1a19nZXRfbnVtYmVyKHRociwgLTEpOyAg LyogaW50ZWdlciwgYnV0IG1heSBiZSArLy0gSW5maW5pdGUsICsvLSB6ZXJvIChub3QgTmFOLCB0 aG91Z2gpICovCisJZHVrX3BvcF9ub2RlY3JlZl91bnNhZmUodGhyKTsKKworCWlmIChnbG9iYWwp IHsKKwkJaWYgKGQgPCAwLjAgfHwgZCA+IChkb3VibGUpIERVS19IU1RSSU5HX0dFVF9DSEFSTEVO KGhfaW5wdXQpKSB7CisJCQkvKiBtYXRjaCBmYWlsICovCisJCQljaGFyX29mZnNldCA9IDA7ICAg Lyogbm90IHJlYWxseSBuZWNlc3NhcnkgKi8KKwkJCURVS19BU1NFUlQobWF0Y2ggPT0gMCk7CisJ CQlnb3RvIG1hdGNoX292ZXI7CisJCX0KKwkJY2hhcl9vZmZzZXQgPSAoZHVrX3VpbnQzMl90KSBk OworCX0gZWxzZSB7CisJCS8qIGxhc3RJbmRleCBtdXN0IGJlIGlnbm9yZWQgZm9yIG5vbi1nbG9i YWwgcmVnZXhwcywgYnV0IGdldCB0aGUKKwkJICogdmFsdWUgZm9yICh0aGVvcmV0aWNhbCkgc2lk ZSBlZmZlY3RzLiAgTm8gc2lkZSBlZmZlY3RzIGNhbgorCQkgKiByZWFsbHkgb2NjdXIsIGJlY2F1 c2UgbGFzdEluZGV4IGlzIGEgbm9ybWFsIHByb3BlcnR5IGFuZCBpcworCQkgKiBhbHdheXMgbm9u LWNvbmZpZ3VyYWJsZSBmb3IgUmVnRXhwIGluc3RhbmNlcy4KKwkJICovCisJCWNoYXJfb2Zmc2V0 ID0gKGR1a191aW50MzJfdCkgMDsKKwl9CisKKwlEVUtfQVNTRVJUKGNoYXJfb2Zmc2V0IDw9IERV S19IU1RSSU5HX0dFVF9DSEFSTEVOKGhfaW5wdXQpKTsKKwlzcCA9IHJlX2N0eC5pbnB1dCArIGR1 a19oZWFwX3N0cmNhY2hlX29mZnNldF9jaGFyMmJ5dGUodGhyLCBoX2lucHV0LCBjaGFyX29mZnNl dCk7CisKKwkvKgorCSAqICBNYXRjaCBsb29wLgorCSAqCisJICogIFRyeSBtYXRjaGluZyBhdCBk aWZmZXJlbnQgb2Zmc2V0cyB1bnRpbCBtYXRjaCBmb3VuZCBvciBpbnB1dCBleGhhdXN0ZWQuCisJ ICovCisKKwkvKiBbIC4uLiByZV9vYmogaW5wdXQgYmMgc2F2ZWRfYnVmIF0gKi8KKworCURVS19B U1NFUlQobWF0Y2ggPT0gMCk7CisKKwlmb3IgKDs7KSB7CisJCS8qIGNoYXIgb2Zmc2V0IGluIFsw LCBoX2lucHV0LT5jbGVuXSAoYm90aCBlbmRzIGluY2x1c2l2ZSksIGNoZWNrZWQgYmVmb3JlIGVu dHJ5ICovCisJCURVS19BU1NFUlRfRElTQUJMRShjaGFyX29mZnNldCA+PSAwKTsKKwkJRFVLX0FT U0VSVChjaGFyX29mZnNldCA8PSBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoX2lucHV0KSk7CisK KwkJLyogTm90ZTogcmVfY3R4LnN0ZXBzIGlzIGludGVudGlvbmFsbHkgbm90IHJlc2V0LCBpdCBh cHBsaWVzIHRvIHRoZSBlbnRpcmUgdW5hbmNob3JlZCBtYXRjaCAqLworCQlEVUtfQVNTRVJUKHJl X2N0eC5yZWN1cnNpb25fZGVwdGggPT0gMCk7CisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoImF0 dGVtcHQgbWF0Y2ggYXQgY2hhciBvZmZzZXQgJWxkOyAlcCBbJXAsJXBdIiwKKwkJICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGNoYXJfb2Zmc2V0LCAoY29uc3Qgdm9pZCAqKSBzcCwKKwkJICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgcmVfY3R4LmlucHV0LCAoY29uc3Qgdm9p ZCAqKSByZV9jdHguaW5wdXRfZW5kKSk7CisKKwkJLyoKKwkJICogIE5vdGU6CisJCSAqCisJCSAq ICAgIC0gZHVrX19tYXRjaF9yZWdleHAoKSBpcyByZXF1aXJlZCBub3QgdG8gbG9uZ2ptcCgpIGlu IG9yZGluYXJ5ICJub24tbWF0Y2giCisJCSAqICAgICAgY29uZGl0aW9uczsgYSBsb25nam1wKCkg d2lsbCB0ZXJtaW5hdGUgdGhlIGVudGlyZSBtYXRjaGluZyBwcm9jZXNzLgorCQkgKgorCQkgKiAg ICAtIENsZWFyaW5nIHNhdmVkW10gaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIGJhY2t0cmFja2lu ZyBkb2VzIGl0CisJCSAqCisJCSAqICAgIC0gQmFja3RyYWNraW5nIGFsc28gcmV3aW5kcyByZV9j dHgucmVjdXJzaW9uIGJhY2sgdG8gemVybywgdW5sZXNzIGFuCisJCSAqICAgICAgaW50ZXJuYWwv bGltaXQgZXJyb3Igb2NjdXJzICh3aGljaCBjYXVzZXMgYSBsb25nam1wKCkpCisJCSAqCisJCSAq ICAgIC0gSWYgd2Ugc3VwcG9ydGVkIGFuY2hvcmVkIG1hdGNoZXMsIHdlIHdvdWxkIGJyZWFrIG91 dCBoZXJlCisJCSAqICAgICAgdW5jb25kaXRpb25hbGx5OyBob3dldmVyLCBFQ01BU2NyaXB0IHJl Z2V4cHMgZG9uJ3QgaGF2ZSBhbmNob3JlZAorCQkgKiAgICAgIG1hdGNoZXMuICBJdCBtaWdodCBt YWtlIHNlbnNlIHRvIGltcGxlbWVudCBhIGZhc3QgYmFpbC1vdXQgaWYKKwkJICogICAgICB0aGUg cmVnZXhwIGJlZ2lucyB3aXRoICdeJyBhbmQgc3AgaXMgbm90IDA6IGN1cnJlbnRseSB3ZSdsbCBq dXN0CisJCSAqICAgICAgcnVuIHRocm91Z2ggdGhlIGVudGlyZSBpbnB1dCBzdHJpbmcsIHRyaXZp YWxseSBmYWlsaW5nIHRoZSBtYXRjaAorCQkgKiAgICAgIGF0IGV2ZXJ5IG5vbi16ZXJvIG9mZnNl dC4KKwkJICovCisKKwkJaWYgKGR1a19fbWF0Y2hfcmVnZXhwKCZyZV9jdHgsIHJlX2N0eC5ieXRl Y29kZSwgc3ApICE9IE5VTEwpIHsKKwkJCURVS19EREQoRFVLX0RERFBSSU5UKCJtYXRjaCBhdCBv ZmZzZXQgJWxkIiwgKGxvbmcpIGNoYXJfb2Zmc2V0KSk7CisJCQltYXRjaCA9IDE7CisJCQlicmVh azsKKwkJfQorCisJCS8qIGFkdmFuY2UgYnkgb25lIGNoYXJhY3RlciAoY29kZSBwb2ludCkgYW5k IG9uZSBjaGFyX29mZnNldCAqLworCQljaGFyX29mZnNldCsrOworCQlpZiAoY2hhcl9vZmZzZXQg PiBEVUtfSFNUUklOR19HRVRfQ0hBUkxFTihoX2lucHV0KSkgeworCQkJLyoKKwkJCSAqICBOb3Rl OgorCQkJICoKKwkJCSAqICAgIC0gSW50ZW50aW9uYWxseSBhdHRlbXB0IChlbXB0eSkgbWF0Y2gg YXQgY2hhcl9vZmZzZXQgPT0ga19pbnB1dC0+Y2xlbgorCQkJICoKKwkJCSAqICAgIC0gTmVnYXRp dmUgY2hhcl9vZmZzZXRzIGhhdmUgYmVlbiBlbGltaW5hdGVkIGFuZCBjaGFyX29mZnNldCBpcyBk dWtfdWludDMyX3QKKwkJCSAqICAgICAgLT4gbm8gbmVlZCBvciB1c2UgZm9yIGEgbmVnYXRpdmUg Y2hlY2sKKwkJCSAqLworCisJCQlEVUtfREREKERVS19ERERQUklOVCgibm8gbWF0Y2ggYWZ0ZXIg dHJ5aW5nIGFsbCBzcCBvZmZzZXRzIikpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhdm9pZCBj YWxsaW5nIGF0IGVuZCBvZiBpbnB1dCwgd2lsbCBEVUtfRVJST1IgKGFib3ZlIGNoZWNrIHN1ZmZp Y2VzIHRvIGF2b2lkIHRoaXMpICovCisJCSh2b2lkKSBkdWtfX3V0ZjhfYWR2YW5jZSh0aHIsICZz cCwgcmVfY3R4LmlucHV0LCByZV9jdHguaW5wdXRfZW5kLCAoZHVrX3VpbnRfZmFzdDMyX3QpIDEp OworCX0KKworIG1hdGNoX292ZXI6CisKKwkvKgorCSAqICBNYXRjaGluZyBjb21wbGV0ZSwgY3Jl YXRlIHJlc3VsdCBhcnJheSBvciByZXR1cm4gYSAnbnVsbCcuICBVcGRhdGUgbGFzdEluZGV4CisJ ICogIGlmIG5lY2Vzc2FyeS4gIFNlZSBFNSBTZWN0aW9uIDE1LjEwLjYuMi4KKwkgKgorCSAqICBC ZWNhdXNlIGxhc3RJbmRleCBpcyBhIGNoYXJhY3RlciAobm90IGJ5dGUpIG9mZnNldCwgd2UgbmVl ZCB0aGUgY2hhcmFjdGVyCisJICogIGxlbmd0aCBvZiB0aGUgbWF0Y2ggd2hpY2ggd2UgY29udmVu aWVudGx5IGdldCBhcyBhIHNpZGUgZWZmZWN0IG9mIGludGVybmluZworCSAqICB0aGUgbWF0Y2hp bmcgc3Vic3RyaW5nICgwdGggaW5kZXggb2YgcmVzdWx0IGFycmF5KS4KKwkgKgorCSAqICBzYXZl ZFswXSAgICAgICAgIHN0YXJ0IHBvaW50ZXIgKH4gYnl0ZSBvZmZzZXQpIG9mIGN1cnJlbnQgbWF0 Y2gKKwkgKiAgc2F2ZWRbMV0gICAgICAgICBlbmQgcG9pbnRlciAofiBieXRlIG9mZnNldCkgb2Yg Y3VycmVudCBtYXRjaCAoZXhjbHVzaXZlKQorCSAqICBjaGFyX29mZnNldCAgICAgIHN0YXJ0IGNo YXJhY3RlciBvZmZzZXQgb2YgY3VycmVudCBtYXRjaCAoLT4gLmluZGV4IG9mIHJlc3VsdCkKKwkg KiAgY2hhcl9lbmRfb2Zmc2V0ICBlbmQgY2hhcmFjdGVyIG9mZnNldCAoY29tcHV0ZWQgYmVsb3cp CisJICovCisKKwkvKiBbIC4uLiByZV9vYmogaW5wdXQgYmMgc2F2ZWRfYnVmIF0gKi8KKworCWlm IChtYXRjaCkgeworI2lmIGRlZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCQlkdWtfaG9iamVj dCAqaF9yZXM7CisjZW5kaWYKKwkJZHVrX3VpbnQzMl90IGNoYXJfZW5kX29mZnNldCA9IDA7CisK KwkJRFVLX0RERChEVUtfREREUFJJTlQoInJlZ2V4cCBtYXRjaGVzIGF0IGNoYXJfb2Zmc2V0ICVs ZCIsIChsb25nKSBjaGFyX29mZnNldCkpOworCisJCURVS19BU1NFUlQocmVfY3R4Lm5zYXZlZCA+ PSAyKTsgICAgICAgIC8qIG11c3QgaGF2ZSBzdGFydCBhbmQgZW5kICovCisJCURVS19BU1NFUlQo KHJlX2N0eC5uc2F2ZWQgJSAyKSA9PSAwKTsgIC8qIGFuZCBldmVuIG51bWJlciAqLworCisJCS8q IFhYWDogQXJyYXkgc2l6ZSBpcyBrbm93biBiZWZvcmUgYW5kICgyICogcmVfY3R4Lm5zYXZlZCkg YnV0IG5vdCB0YWtlbgorCQkgKiBhZHZhbnRhZ2Ugb2Ygbm93LiAgVGhlIGFycmF5IGlzIG5vdCBj b21wYWN0ZWQgZWl0aGVyLCBhcyByZWdleHAgbWF0Y2gKKwkJICogb2JqZWN0cyBhcmUgdXN1YWxs eSBzaG9ydCBsaXZlZC4KKwkJICovCisKKwkJZHVrX3B1c2hfYXJyYXkodGhyKTsKKworI2lmIGRl ZmluZWQoRFVLX1VTRV9BU1NFUlRJT05TKQorCQloX3JlcyA9IGR1a19yZXF1aXJlX2hvYmplY3Qo dGhyLCAtMSk7CisJCURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfSEFTX0VYVEVOU0lCTEUoaF9yZXMp KTsKKwkJRFVLX0FTU0VSVChEVUtfSE9CSkVDVF9IQVNfRVhPVElDX0FSUkFZKGhfcmVzKSk7CisJ CURVS19BU1NFUlQoRFVLX0hPQkpFQ1RfR0VUX0NMQVNTX05VTUJFUihoX3JlcykgPT0gRFVLX0hP QkpFQ1RfQ0xBU1NfQVJSQVkpOworI2VuZGlmCisKKwkJLyogWyAuLi4gcmVfb2JqIGlucHV0IGJj IHNhdmVkX2J1ZiByZXNfb2JqIF0gKi8KKworCQlkdWtfcHVzaF91MzIodGhyLCBjaGFyX29mZnNl dCk7CisJCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3Nob3J0X3dlYyh0aHIsIC0yLCBEVUtfU1RSSURY X0lOREVYKTsKKworCQlkdWtfZHVwX200KHRocik7CisJCWR1a194ZGVmX3Byb3Bfc3RyaWR4X3No b3J0X3dlYyh0aHIsIC0yLCBEVUtfU1RSSURYX0lOUFVUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwg cmVfY3R4Lm5zYXZlZDsgaSArPSAyKSB7CisJCQkvKiBDYXB0dXJlcyB3aGljaCBhcmUgdW5kZWZp bmVkIGhhdmUgTlVMTCBwb2ludGVycyBhbmQgYXJlIHJldHVybmVkCisJCQkgKiBhcyAndW5kZWZp bmVkJy4gIFRoZSBzYW1lIGlzIGRvbmUgd2hlbiBzYXZlZFtdIHBvaW50ZXJzIGFyZSBpbnNhbmUK KwkJCSAqICh0aGlzIHNob3VsZCwgb2YgY291cnNlLCBuZXZlciBoYXBwZW4gaW4gcHJhY3RpY2Up LgorCQkJICovCisJCQlpZiAocmVfY3R4LnNhdmVkW2ldICYmIHJlX2N0eC5zYXZlZFtpICsgMV0g JiYgcmVfY3R4LnNhdmVkW2kgKyAxXSA+PSByZV9jdHguc2F2ZWRbaV0pIHsKKwkJCQlkdWtfcHVz aF9sc3RyaW5nKHRociwKKwkJCQkgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIHJlX2N0 eC5zYXZlZFtpXSwKKwkJCQkgICAgICAgICAgICAgICAgIChkdWtfc2l6ZV90KSAocmVfY3R4LnNh dmVkW2krMV0gLSByZV9jdHguc2F2ZWRbaV0pKTsKKwkJCQlpZiAoaSA9PSAwKSB7CisJCQkJCS8q IEFzc3VtZXMgdGhhdCBzYXZlZFswXSBhbmQgc2F2ZWRbMV0gYXJlIGFsd2F5cworCQkJCQkgKiBz ZXQgYnkgcmVnZXhwIGJ5dGVjb2RlIChpZiBub3QsIGNoYXJfZW5kX29mZnNldAorCQkJCQkgKiB3 aWxsIGJlIHplcm8pLiAgQWxzbyBhc3N1bWVzIGNsZW4gcmVmbGVjdHMgdGhlCisJCQkJCSAqIGNv cnJlY3QgY2hhciBsZW5ndGguCisJCQkJCSAqLworCQkJCQljaGFyX2VuZF9vZmZzZXQgPSBjaGFy X29mZnNldCArIChkdWtfdWludDMyX3QpIGR1a19nZXRfbGVuZ3RoKHRociwgLTEpOyAgLyogYWRk IGNoYXJsZW4gKi8KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWR1a19wdXNoX3VuZGVmaW5lZCh0 aHIpOworCQkJfQorCisJCQkvKiBbIC4uLiByZV9vYmogaW5wdXQgYmMgc2F2ZWRfYnVmIHJlc19v YmogdmFsIF0gKi8KKwkJCWR1a19wdXRfcHJvcF9pbmRleCh0aHIsIC0yLCAoZHVrX3VhcnJpZHhf dCkgKGkgLyAyKSk7CisJCX0KKworCQkvKiBbIC4uLiByZV9vYmogaW5wdXQgYmMgc2F2ZWRfYnVm IHJlc19vYmogXSAqLworCisJCS8qIE5COiAnbGVuZ3RoJyBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNh bGx5IHVwZGF0ZWQgYnkgdGhlIGFycmF5IHNldHVwIGxvb3AgKi8KKworCQlpZiAoZ2xvYmFsKSB7 CisJCQkvKiBnbG9iYWwgcmVnZXhwOiBsYXN0SW5kZXggdXBkYXRlZCBvbiBtYXRjaCAqLworCQkJ ZHVrX3B1c2hfdTMyKHRociwgY2hhcl9lbmRfb2Zmc2V0KTsKKwkJCWR1a19wdXRfcHJvcF9zdHJp ZHhfc2hvcnQodGhyLCAtNiwgRFVLX1NUUklEWF9MQVNUX0lOREVYKTsKKwkJfSBlbHNlIHsKKwkJ CS8qIG5vbi1nbG9iYWwgcmVnZXhwOiBsYXN0SW5kZXggbmV2ZXIgdXBkYXRlZCBvbiBtYXRjaCAq LworCQkJOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogIE5vIG1hdGNoLCBFNSBTZWN0aW9u IDE1LjEwLjYuMiwgc3RlcCA5LmEuaSAtIDkuYS5paSBhcHBseSwgcmVnYXJkbGVzcworCQkgKiAg b2YgJ2dsb2JhbCcgZmxhZyBvZiB0aGUgUmVnRXhwLiAgSW4gcGFydGljdWxhciwgaWYgbGFzdElu ZGV4IGlzIGludmFsaWQKKwkJICogIGluaXRpYWxseSwgaXQgaXMgcmVzZXQgdG8gemVyby4KKwkJ ICovCisKKwkJRFVLX0RERChEVUtfREREUFJJTlQoInJlZ2V4cCBkb2VzIG5vdCBtYXRjaCIpKTsK KworCQlkdWtfcHVzaF9udWxsKHRocik7CisKKwkJLyogWyAuLi4gcmVfb2JqIGlucHV0IGJjIHNh dmVkX2J1ZiByZXNfb2JqIF0gKi8KKworCQlkdWtfcHVzaF9pbnQodGhyLCAwKTsKKwkJZHVrX3B1 dF9wcm9wX3N0cmlkeF9zaG9ydCh0aHIsIC02LCBEVUtfU1RSSURYX0xBU1RfSU5ERVgpOworCX0K KworCS8qIFsgLi4uIHJlX29iaiBpbnB1dCBiYyBzYXZlZF9idWYgcmVzX29iaiBdICovCisKKwlk dWtfaW5zZXJ0KHRociwgLTUpOworCisJLyogWyAuLi4gcmVzX29iaiByZV9vYmogaW5wdXQgYmMg c2F2ZWRfYnVmIF0gKi8KKworCWR1a19wb3Bfbl91bnNhZmUodGhyLCA0KTsKKworCS8qIFsgLi4u IHJlc19vYmogXSAqLworCisJLyogWFhYOiB0aGVzZSBsYXN0IHRyaWNrcyBhcmUgdW5uZWNlc3Nh cnkgaWYgdGhlIGZ1bmN0aW9uIGlzIG1hZGUKKwkgKiBhIGdlbnVpbmUgbmF0aXZlIGZ1bmN0aW9u LgorCSAqLworfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcmVnZXhwX21hdGNoKGR1a19odGhy ZWFkICp0aHIpIHsKKwlkdWtfX3JlZ2V4cF9tYXRjaF9oZWxwZXIodGhyLCAwIC8qZm9yY2VfZ2xv YmFsKi8pOworfQorCisvKiBUaGlzIHZhcmlhbnQgaXMgbmVlZGVkIGJ5IFN0cmluZy5wcm90b3R5 cGUuc3BsaXQoKTsgaXQgbmVlZHMgdG8gcGVyZm9ybQorICogZ2xvYmFsLXN0eWxlIG1hdGNoaW5n IG9uIGEgY2xvbmVkIFJlZ0V4cCB3aGljaCBpcyBwb3RlbnRpYWxseSBub24tZ2xvYmFsLgorICov CitEVUtfSU5URVJOQUwgdm9pZCBkdWtfcmVnZXhwX21hdGNoX2ZvcmNlX2dsb2JhbChkdWtfaHRo cmVhZCAqdGhyKSB7CisJZHVrX19yZWdleHBfbWF0Y2hfaGVscGVyKHRociwgMSAvKmZvcmNlX2ds b2JhbCovKTsKK30KKworI2Vsc2UgIC8qIERVS19VU0VfUkVHRVhQX1NVUFBPUlQgKi8KKworLyog cmVnZXhwIHN1cHBvcnQgZGlzYWJsZWQgKi8KKworI2VuZGlmICAvKiBEVUtfVVNFX1JFR0VYUF9T VVBQT1JUICovCisvKgorICogIFNlbGYgdGVzdHMgdG8gZW5zdXJlIGV4ZWN1dGlvbiBlbnZpcm9u bWVudCBpcyBzYW5lLiAgSW50ZW5kZWQgdG8gY2F0Y2gKKyAqICBjb21waWxlci9wbGF0Zm9ybSBw cm9ibGVtcyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQgYXQgY29tcGlsZSB0aW1lLgorICovCisK Ky8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9TRUxGX1RFU1RTKQorCisvKgorICogIFVuaW9ucyBhbmQgc3RydWN0 cyBmb3Igc2VsZiB0ZXN0cworICovCisKK3R5cGVkZWYgdW5pb24geworCWRvdWJsZSBkOworCWR1 a191aW50OF90IHhbOF07Cit9IGR1a19fdGVzdF9kb3VibGVfdW5pb247CisKKy8qIFNlbGYgdGVz dCBmYWlsZWQuICBFeHBlY3RzIGEgbG9jYWwgdmFyaWFibGUgJ2Vycm9yX2NvdW50JyB0byBleGlz dC4gKi8KKyNkZWZpbmUgRFVLX19GQUlMRUQobXNnKSAgZG8geyBcCisJCURVS19EKERVS19EUFJJ TlQoInNlbGYgdGVzdCBmYWlsZWQ6ICIgI21zZyAiIGF0ICIgRFVLX0ZJTEVfTUFDUk8gIjoiIERV S19NQUNST19TVFJJTkdJRlkoRFVLX0xJTkVfTUFDUk8pKSk7IFwKKwkJZXJyb3JfY291bnQrKzsg XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9DTVBfVFJVRShhLGIpICBk byB7IFwKKwkJaWYgKGR1a19tZW1jbXAoKGNvbnN0IHZvaWQgKikgKGEpLCAoY29uc3Qgdm9pZCAq KSAoYiksIHNpemVvZihkdWtfX3Rlc3RfZG91YmxlX3VuaW9uKSkgIT0gMCkgeyBcCisJCQlEVUtf X0ZBSUxFRCgiZG91YmxlIHVuaW9uIGNvbXBhcmVzIGZhbHNlIChleHBlY3RlZCB0cnVlKSIpOyBc CisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFVLX19EQkxVTklPTl9DTVBfRkFMU0Uo YSxiKSAgZG8geyBcCisJCWlmIChkdWtfbWVtY21wKChjb25zdCB2b2lkICopIChhKSwgKGNvbnN0 IHZvaWQgKikgKGIpLCBzaXplb2YoZHVrX190ZXN0X2RvdWJsZV91bmlvbikpID09IDApIHsgXAor CQkJRFVLX19GQUlMRUQoImRvdWJsZSB1bmlvbiBjb21wYXJlcyB0cnVlIChleHBlY3RlZCBmYWxz ZSkiKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCit0eXBlZGVmIHVuaW9uIHsKKwlkdWtfdWlu dDMyX3QgaTsKKwlkdWtfdWludDhfdCB4WzhdOworfSBkdWtfX3Rlc3RfdTMyX3VuaW9uOworCisj aWYgZGVmaW5lZChEVUtfVVNFX0lOVEVHRVJfTEUpCisjZGVmaW5lIERVS19fVTMyX0lOSVQodSwg YSwgYiwgYywgZCkgZG8geyBcCisJCSh1KS0+eFswXSA9IChkKTsgKHUpLT54WzFdID0gKGMpOyAo dSktPnhbMl0gPSAoYik7ICh1KS0+eFszXSA9IChhKTsgXAorCX0gd2hpbGUgKDApCisjZWxpZiBk ZWZpbmVkKERVS19VU0VfSU5URUdFUl9NRSkKKyNlcnJvciBpbnRlZ2VyIG1peGVkIGVuZGlhbiBu b3Qgc3VwcG9ydGVkIG5vdworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0lOVEVHRVJfQkUpCisjZGVm aW5lIERVS19fVTMyX0lOSVQodSwgYSwgYiwgYywgZCkgZG8geyBcCisJCSh1KS0+eFswXSA9IChh KTsgKHUpLT54WzFdID0gKGIpOyAodSktPnhbMl0gPSAoYyk7ICh1KS0+eFszXSA9IChkKTsgXAor CX0gd2hpbGUgKDApCisjZWxzZQorI2Vycm9yIHVua25vd24gaW50ZWdlciBlbmRpYW5uZXNzCisj ZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9ET1VCTEVfTEUpCisjZGVmaW5lIERVS19fRE9V QkxFX0lOSVQodSwgYSwgYiwgYywgZCwgZSwgZiwgZywgaCkgZG8geyBcCisJCSh1KS0+eFswXSA9 IChoKTsgKHUpLT54WzFdID0gKGcpOyAodSktPnhbMl0gPSAoZik7ICh1KS0+eFszXSA9IChlKTsg XAorCQkodSktPnhbNF0gPSAoZCk7ICh1KS0+eFs1XSA9IChjKTsgKHUpLT54WzZdID0gKGIpOyAo dSktPnhbN10gPSAoYSk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBEVUtfX0RPVUJMRV9DT01Q QVJFKHUsIGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpIFwKKwkoKHUpLT54WzBdID09IChoKSAmJiAo dSktPnhbMV0gPT0gKGcpICYmICh1KS0+eFsyXSA9PSAoZikgJiYgKHUpLT54WzNdID09IChlKSAm JiBcCisJICh1KS0+eFs0XSA9PSAoZCkgJiYgKHUpLT54WzVdID09IChjKSAmJiAodSktPnhbNl0g PT0gKGIpICYmICh1KS0+eFs3XSA9PSAoYSkpCisjZWxpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxF X01FKQorI2RlZmluZSBEVUtfX0RPVUJMRV9JTklUKHUsIGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgp IGRvIHsgXAorCQkodSktPnhbMF0gPSAoZCk7ICh1KS0+eFsxXSA9IChjKTsgKHUpLT54WzJdID0g KGIpOyAodSktPnhbM10gPSAoYSk7IFwKKwkJKHUpLT54WzRdID0gKGgpOyAodSktPnhbNV0gPSAo Zyk7ICh1KS0+eFs2XSA9IChmKTsgKHUpLT54WzddID0gKGUpOyBcCisJfSB3aGlsZSAoMCkKKyNk ZWZpbmUgRFVLX19ET1VCTEVfQ09NUEFSRSh1LCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSBcCisJ KCh1KS0+eFswXSA9PSAoZCkgJiYgKHUpLT54WzFdID09IChjKSAmJiAodSktPnhbMl0gPT0gKGIp ICYmICh1KS0+eFszXSA9PSAoYSkgJiYgXAorCSAodSktPnhbNF0gPT0gKGgpICYmICh1KS0+eFs1 XSA9PSAoZykgJiYgKHUpLT54WzZdID09IChmKSAmJiAodSktPnhbN10gPT0gKGUpKQorI2VsaWYg ZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9CRSkKKyNkZWZpbmUgRFVLX19ET1VCTEVfSU5JVCh1LCBh LCBiLCBjLCBkLCBlLCBmLCBnLCBoKSBkbyB7IFwKKwkJKHUpLT54WzBdID0gKGEpOyAodSktPnhb MV0gPSAoYik7ICh1KS0+eFsyXSA9IChjKTsgKHUpLT54WzNdID0gKGQpOyBcCisJCSh1KS0+eFs0 XSA9IChlKTsgKHUpLT54WzVdID0gKGYpOyAodSktPnhbNl0gPSAoZyk7ICh1KS0+eFs3XSA9ICho KTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIERVS19fRE9VQkxFX0NPTVBBUkUodSwgYSwgYiwg YywgZCwgZSwgZiwgZywgaCkgXAorCSgodSktPnhbMF0gPT0gKGEpICYmICh1KS0+eFsxXSA9PSAo YikgJiYgKHUpLT54WzJdID09IChjKSAmJiAodSktPnhbM10gPT0gKGQpICYmIFwKKwkgKHUpLT54 WzRdID09IChlKSAmJiAodSktPnhbNV0gPT0gKGYpICYmICh1KS0+eFs2XSA9PSAoZykgJiYgKHUp LT54WzddID09IChoKSkKKyNlbHNlCisjZXJyb3IgdW5rbm93biBkb3VibGUgZW5kaWFubmVzcwor I2VuZGlmCisKKy8qCisgKiAgVmFyaW91cyBzYW5pdHkgY2hlY2tzIGZvciB0eXBpbmcKKyAqLwor CitEVUtfTE9DQUwgZHVrX3VpbnRfdCBkdWtfX3NlbGZ0ZXN0X3R5cGVzKHZvaWQpIHsKKwlkdWtf dWludF90IGVycm9yX2NvdW50ID0gMDsKKworCWlmICghKHNpemVvZihkdWtfaW50OF90KSA9PSAx ICYmCisJICAgICAgc2l6ZW9mKGR1a191aW50OF90KSA9PSAxICYmCisJICAgICAgc2l6ZW9mKGR1 a19pbnQxNl90KSA9PSAyICYmCisJICAgICAgc2l6ZW9mKGR1a191aW50MTZfdCkgPT0gMiAmJgor CSAgICAgIHNpemVvZihkdWtfaW50MzJfdCkgPT0gNCAmJgorCSAgICAgIHNpemVvZihkdWtfdWlu dDMyX3QpID09IDQpKSB7CisJCURVS19fRkFJTEVEKCJkdWtfKHUpaW50ezgsMTYsMzJ9X3Qgc2l6 ZSIpOworCX0KKyNpZiBkZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorCWlmICghKHNpemVvZihk dWtfaW50NjRfdCkgPT0gOCAmJgorCSAgICAgIHNpemVvZihkdWtfdWludDY0X3QpID09IDgpKSB7 CisJCURVS19fRkFJTEVEKCJkdWtfKHUpaW50NjRfdCBzaXplIik7CisJfQorI2VuZGlmCisKKwlp ZiAoIShzaXplb2YoZHVrX3NpemVfdCkgPj0gc2l6ZW9mKGR1a191aW50X3QpKSkgeworCQkvKiBT b21lIGludGVybmFsIGNvZGUgbm93IGFzc3VtZXMgdGhhdCBhbGwgZHVrX3VpbnRfdCB2YWx1ZXMK KwkJICogY2FuIGJlIGV4cHJlc3NlZCB3aXRoIGEgZHVrX3NpemVfdC4KKwkJICovCisJCURVS19f RkFJTEVEKCJkdWtfc2l6ZV90IGlzIHNtYWxsZXIgdGhhbiBkdWtfdWludF90Iik7CisJfQorCWlm ICghKHNpemVvZihkdWtfaW50X3QpID49IDQpKSB7CisJCURVS19fRkFJTEVEKCJkdWtfaW50X3Qg aXMgbm90IDMyIGJpdHMiKTsKKwl9CisKKwlyZXR1cm4gZXJyb3JfY291bnQ7Cit9CisKKy8qCisg KiAgUGFja2VkIHR2YWwgc2FuaXR5CisgKi8KKworRFVLX0xPQ0FMIGR1a191aW50X3QgZHVrX19z ZWxmdGVzdF9wYWNrZWRfdHZhbCh2b2lkKSB7CisJZHVrX3VpbnRfdCBlcnJvcl9jb3VudCA9IDA7 CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUEFDS0VEX1RWQUwpCisJaWYgKHNpemVvZih2b2lkICop ID4gNCkgeworCQlEVUtfX0ZBSUxFRCgicGFja2VkIGR1a190dmFsIGluIHVzZSBidXQgc2l6ZW9m KHZvaWQgKikgPiA0Iik7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gZXJyb3JfY291bnQ7Cit9CisK Ky8qCisgKiAgVHdvJ3MgY29tcGxlbWVudCBhcml0aG1ldGljLgorICovCisKK0RVS19MT0NBTCBk dWtfdWludF90IGR1a19fc2VsZnRlc3RfdHdvc19jb21wbGVtZW50KHZvaWQpIHsKKwlkdWtfdWlu dF90IGVycm9yX2NvdW50ID0gMDsKKwl2b2xhdGlsZSBpbnQgdGVzdDsKKwl0ZXN0ID0gLTE7CisK KwkvKiBOb3RlIHRoYXQgYnl0ZSBvcmRlciBkb2Vzbid0IGFmZmVjdCB0aGlzIHRlc3Q6IGFsbCBi eXRlcyBpbgorCSAqICd0ZXN0JyB3aWxsIGJlIDB4RkYgZm9yIHR3bydzIGNvbXBsZW1lbnQuCisJ ICovCisJaWYgKCgodm9sYXRpbGUgZHVrX3VpbnQ4X3QgKikgJnRlc3QpWzBdICE9IChkdWtfdWlu dDhfdCkgMHhmZikgeworCQlEVUtfX0ZBSUxFRCgidHdvJ3MgY29tcGxlbWVudCBhcml0aG1ldGlj Iik7CisJfQorCisJcmV0dXJuIGVycm9yX2NvdW50OworfQorCisvKgorICogIEJ5dGUgb3JkZXIu ICBJbXBvcnRhbnQgdG8gc2VsZiBjaGVjaywgYmVjYXVzZSBvbiBzb21lIGV4b3RpYyBwbGF0Zm9y bXMKKyAqICB0aGVyZSBpcyBubyBhY3R1YWwgZGV0ZWN0aW9uIGJ1dCByYXRoZXIgYXNzdW1wdGlv biBiYXNlZCBvbiBwbGF0Zm9ybQorICogIGRlZmluZXMuCisgKi8KKworRFVLX0xPQ0FMIGR1a191 aW50X3QgZHVrX19zZWxmdGVzdF9ieXRlX29yZGVyKHZvaWQpIHsKKwlkdWtfdWludF90IGVycm9y X2NvdW50ID0gMDsKKwlkdWtfX3Rlc3RfdTMyX3VuaW9uIHUxOworCWR1a19fdGVzdF9kb3VibGVf dW5pb24gdTI7CisKKwkvKgorCSAqICA+Pj4gc3RydWN0LnBhY2soJz5kJywgMTAyMDMwNDA1MDYw KS5lbmNvZGUoJ2hleCcpCisJICogICc0MjM3YzE3YzZkYzQwMDAwJworCSAqLworCisJRFVLX19V MzJfSU5JVCgmdTEsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYpOworCURVS19fRE9VQkxFX0lOSVQo JnUyLCAweDQyLCAweDM3LCAweGMxLCAweDdjLCAweDZkLCAweGM0LCAweDAwLCAweDAwKTsKKwor CWlmICh1MS5pICE9IChkdWtfdWludDMyX3QpIDB4ZGVhZGJlZWZVTCkgeworCQlEVUtfX0ZBSUxF RCgiZHVrX3VpbnQzMl90IGJ5dGUgb3JkZXIiKTsKKwl9CisKKwlpZiAodTIuZCAhPSAoZG91Ymxl KSAxMDIwMzA0MDUwNjAuMCkgeworCQlEVUtfX0ZBSUxFRCgiZG91YmxlIGJ5dGUgb3JkZXIiKTsK Kwl9CisKKwlyZXR1cm4gZXJyb3JfY291bnQ7Cit9CisKKy8qCisgKiAgRFVLX0JTV0FQIG1hY3Jv cworICovCisKK0RVS19MT0NBTCBkdWtfdWludF90IGR1a19fc2VsZnRlc3RfYnN3YXBfbWFjcm9z KHZvaWQpIHsKKwlkdWtfdWludF90IGVycm9yX2NvdW50ID0gMDsKKwlkdWtfdWludDMyX3QgeDMy OworCWR1a191aW50MTZfdCB4MTY7CisJZHVrX2RvdWJsZV91bmlvbiBkdTsKKwlkdWtfZG91Ymxl X3QgZHVfZGlmZjsKKworCXgxNiA9IDB4YmVlZlVMOworCXgxNiA9IERVS19CU1dBUDE2KHgxNik7 CisJaWYgKHgxNiAhPSAoZHVrX3VpbnQxNl90KSAweGVmYmVVTCkgeworCQlEVUtfX0ZBSUxFRCgi RFVLX0JTV0FQMTYiKTsKKwl9CisKKwl4MzIgPSAweGRlYWRiZWVmVUw7CisJeDMyID0gRFVLX0JT V0FQMzIoeDMyKTsKKwlpZiAoeDMyICE9IChkdWtfdWludDMyX3QpIDB4ZWZiZWFkZGVVTCkgewor CQlEVUtfX0ZBSUxFRCgiRFVLX0JTV0FQMzIiKTsKKwl9CisKKwkvKiA+Pj4gc3RydWN0LnVucGFj aygnPmQnLCAnNDAwMDExMjIzMzQ0NTU2NicuZGVjb2RlKCdoZXgnKSkKKwkgKiAoMi4wMDgzNjYw MTMwNzE4OTUsKQorCSAqLworCisJZHUudWNbMF0gPSAweDQwOyBkdS51Y1sxXSA9IDB4MDA7IGR1 LnVjWzJdID0gMHgxMTsgZHUudWNbM10gPSAweDIyOworCWR1LnVjWzRdID0gMHgzMzsgZHUudWNb NV0gPSAweDQ0OyBkdS51Y1s2XSA9IDB4NTU7IGR1LnVjWzddID0gMHg2NjsKKwlEVUtfREJMVU5J T05fRE9VQkxFX05UT0goJmR1KTsKKwlkdV9kaWZmID0gZHUuZCAtIDIuMDA4MzY2MDEzMDcxODk1 OworI2lmIDAKKwlEVUtfRChEVUtfRFBSSU5UKCJkdV9kaWZmOiAlbGdcbiIsIChkb3VibGUpIGR1 X2RpZmYpKTsKKyNlbmRpZgorCWlmIChkdV9kaWZmID4gMWUtMTUpIHsKKwkJLyogQWxsb3cgdmVy eSBzbWFsbCBsZW5pZW5jZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHdvbid0IHBhcnNlCisJCSAq IGV4YWN0IElFRUUgZG91YmxlIGNvbnN0YW50cyAoaGFwcGVuZWQgaW4gbWF0cml4IHRlc3Rpbmcg d2l0aAorCQkgKiBMaW51eCBnY2MtNC44IC1tMzIgYXQgbGVhc3QpLgorCQkgKi8KKyNpZiAwCisJ CURVS19EKERVS19EUFJJTlQoIlJlc3VsdCBvZiBEVUtfREJMVU5JT05fRE9VQkxFX05UT0g6ICUw MnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJICAgICAgICAgICAg KHVuc2lnbmVkIGludCkgZHUudWNbMF0sICh1bnNpZ25lZCBpbnQpIGR1LnVjWzFdLAorCQkgICAg ICAgICAgICAodW5zaWduZWQgaW50KSBkdS51Y1syXSwgKHVuc2lnbmVkIGludCkgZHUudWNbM10s CisJCSAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGR1LnVjWzRdLCAodW5zaWduZWQgaW50KSBk dS51Y1s1XSwKKwkJICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgZHUudWNbNl0sICh1bnNpZ25l ZCBpbnQpIGR1LnVjWzddKSk7CisjZW5kaWYKKwkJRFVLX19GQUlMRUQoIkRVS19EQkxVTklPTl9E T1VCTEVfTlRPSCIpOworCX0KKworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKworLyoKKyAqICBC YXNpYyBkb3VibGUgLyBieXRlIHVuaW9uIG1lbW9yeSBsYXlvdXQuCisgKi8KKworRFVLX0xPQ0FM IGR1a191aW50X3QgZHVrX19zZWxmdGVzdF9kb3VibGVfdW5pb25fc2l6ZSh2b2lkKSB7CisJZHVr X3VpbnRfdCBlcnJvcl9jb3VudCA9IDA7CisKKwlpZiAoc2l6ZW9mKGR1a19fdGVzdF9kb3VibGVf dW5pb24pICE9IDgpIHsKKwkJRFVLX19GQUlMRUQoImludmFsaWQgdW5pb24gc2l6ZSIpOworCX0K KworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKworLyoKKyAqICBVbmlvbiBhbGlhc2luZywgc2Vl IG1pc2MvY2xhbmdfYWxpYXNpbmcuYy4KKyAqLworCitEVUtfTE9DQUwgZHVrX3VpbnRfdCBkdWtf X3NlbGZ0ZXN0X2RvdWJsZV9hbGlhc2luZyh2b2lkKSB7CisJLyogVGhpcyB0ZXN0Y2FzZSBmYWls cyB3aGVuIEVtc2NyaXB0ZW4tZ2VuZXJhdGVkIGNvZGUgcnVucyBvbiBGaXJlZm94LgorCSAqIEl0 J3Mgbm90IGFuIGlzc3VlIGJlY2F1c2UgdGhlIGZhaWx1cmUgc2hvdWxkIG9ubHkgYWZmZWN0IHBh Y2tlZAorCSAqIGR1a190dmFsIHJlcHJlc2VudGF0aW9uLCB3aGljaCBpcyBub3QgdXNlZCB3aXRo IEVtc2NyaXB0ZW4uCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX1BBQ0tFRF9UVkFMKQorCWR1 a191aW50X3QgZXJyb3JfY291bnQgPSAwOworCWR1a19fdGVzdF9kb3VibGVfdW5pb24gYSwgYjsK KworCS8qIFRlc3Qgc2lnbmFsaW5nIE5hTiBhbmQgYWxpYXMgYXNzaWdubWVudCBpbiBhbGwgZW5k aWFubmVzcyBjb21iaW5hdGlvbnMuCisJICovCisKKwkvKiBsaXR0bGUgZW5kaWFuICovCisJYS54 WzBdID0gMHgxMTsgYS54WzFdID0gMHgyMjsgYS54WzJdID0gMHgzMzsgYS54WzNdID0gMHg0NDsK KwlhLnhbNF0gPSAweDAwOyBhLnhbNV0gPSAweDAwOyBhLnhbNl0gPSAweGYxOyBhLnhbN10gPSAw eGZmOworCWIgPSBhOworCURVS19fREJMVU5JT05fQ01QX1RSVUUoJmEsICZiKTsKKworCS8qIGJp ZyBlbmRpYW4gKi8KKwlhLnhbMF0gPSAweGZmOyBhLnhbMV0gPSAweGYxOyBhLnhbMl0gPSAweDAw OyBhLnhbM10gPSAweDAwOworCWEueFs0XSA9IDB4NDQ7IGEueFs1XSA9IDB4MzM7IGEueFs2XSA9 IDB4MjI7IGEueFs3XSA9IDB4MTE7CisJYiA9IGE7CisJRFVLX19EQkxVTklPTl9DTVBfVFJVRSgm YSwgJmIpOworCisJLyogbWl4ZWQgZW5kaWFuICovCisJYS54WzBdID0gMHgwMDsgYS54WzFdID0g MHgwMDsgYS54WzJdID0gMHhmMTsgYS54WzNdID0gMHhmZjsKKwlhLnhbNF0gPSAweDExOyBhLnhb NV0gPSAweDIyOyBhLnhbNl0gPSAweDMzOyBhLnhbN10gPSAweDQ0OworCWIgPSBhOworCURVS19f REJMVU5JT05fQ01QX1RSVUUoJmEsICZiKTsKKworCXJldHVybiBlcnJvcl9jb3VudDsKKyNlbHNl CisJRFVLX0QoRFVLX0RQUklOVCgic2tpcCBkb3VibGUgYWxpYXNpbmcgc2VsZiB0ZXN0IHdoZW4g ZHVrX3R2YWwgaXMgbm90IHBhY2tlZCIpKTsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKgor ICogIFplcm8gc2lnbiwgc2VlIG1pc2MvdGNjX3plcm9zaWduMi5jLgorICovCisKK0RVS19MT0NB TCBkdWtfdWludF90IGR1a19fc2VsZnRlc3RfZG91YmxlX3plcm9fc2lnbih2b2lkKSB7CisJZHVr X3VpbnRfdCBlcnJvcl9jb3VudCA9IDA7CisJZHVrX190ZXN0X2RvdWJsZV91bmlvbiBhLCBiOwor CisJYS5kID0gMC4wOworCWIuZCA9IC1hLmQ7CisJRFVLX19EQkxVTklPTl9DTVBfRkFMU0UoJmEs ICZiKTsKKworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKworLyoKKyAqICBSb3VuZGluZyBtb2Rl OiBEdWt0YXBlIGFzc3VtZXMgcm91bmQtdG8tbmVhcmVzdCwgY2hlY2sgdGhhdCB0aGlzIGlzIHRy dWUuCisgKiAgSWYgd2UgaGFkIEM5OSBmZW52Lmggd2UgY291bGQgY2hlY2sgdGhhdCBmZWdldHJv dW5kKCkgPT0gRkVfVE9ORUFSRVNULAorICogIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHJlbHkgb24g dGhhdCBoZWFkZXI7IGFuZCBldmVuIGlmIHdlIGRpZCwgaXQncyBnb29kCisgKiAgdG8gZW5zdXJl IHRoZSByb3VuZGluZyBhY3R1YWxseSB3b3Jrcy4KKyAqLworCitEVUtfTE9DQUwgZHVrX3VpbnRf dCBkdWtfX3NlbGZ0ZXN0X2RvdWJsZV9yb3VuZGluZyh2b2lkKSB7CisJZHVrX3VpbnRfdCBlcnJv cl9jb3VudCA9IDA7CisJZHVrX190ZXN0X2RvdWJsZV91bmlvbiBhLCBiLCBjOworCisjaWYgMAor CS8qIEluY2x1ZGUgPGZlbnYuaD4gYW5kIHRlc3QgbWFudWFsbHk7IHRoZXNlIHRyaWdnZXIgZmFp bHVyZXM6ICovCisJZmVzZXRyb3VuZChGRV9VUFdBUkQpOworCWZlc2V0cm91bmQoRkVfRE9XTldB UkQpOworCWZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7CisKKwkvKiBUaGlzIGlzIHRoZSBkZWZh dWx0IGFuZCBwYXNzZXMuICovCisJZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworI2VuZGlmCisK KwkvKiBSb3VuZGluZyB0ZXN0cyBjaGVjayB0aGF0IG5vbmUgb2YgdGhlIG90aGVyIG1vZGVzIChy b3VuZCB0bworCSAqICtJbmYsIHJvdW5kIHRvIC1JbmYsIHJvdW5kIHRvIHplcm8pIGNhbiBiZSBh Y3RpdmU6CisJICogaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbWFudWFsL2h0bWxf bm9kZS9Sb3VuZGluZy5odG1sCisJICovCisKKwkvKiAxLjAgKyAyXigtNTMpOiByZXN1bHQgaXMg bWlkd2F5IGJldHdlZW4gMS4wIGFuZCAxLjAgKyB1bHAuCisJICogUm91bmQgdG8gbmVhcmVzdDog MS4wCisJICogUm91bmQgdG8gK0luZjogICAgMS4wICsgdWxwCisJICogUm91bmQgdG8gLUluZjog ICAgMS4wCisJICogUm91bmQgdG8gemVybzogICAgMS4wCisJICogPT4gQ29ycmVjdCByZXN1bHQg ZWxpbWluYXRlcyByb3VuZCB0byArSW5mLgorCSAqLworCURVS19fRE9VQkxFX0lOSVQoJmEsIDB4 ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOworCURVS19fRE9V QkxFX0lOSVQoJmIsIDB4M2MsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDApOworCWR1a19tZW1zZXQoKHZvaWQgKikgJmMsIDAsIHNpemVvZihjKSk7CisJYy5kID0gYS5k ICsgYi5kOworCWlmICghRFVLX19ET1VCTEVfQ09NUEFSRSgmYywgMHhmMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCkpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiYnJv a2VuIHJlc3VsdCAobmF0aXZlIGVuZGlhbm5lc3NzKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4 ICUwMnggJTAyeCAlMDJ4IiwKKwkJICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBjLnhb MF0sICh1bnNpZ25lZCBpbnQpIGMueFsxXSwKKwkJICAgICAgICAgICAgICAgICAodW5zaWduZWQg aW50KSBjLnhbMl0sICh1bnNpZ25lZCBpbnQpIGMueFszXSwKKwkJICAgICAgICAgICAgICAgICAo dW5zaWduZWQgaW50KSBjLnhbNF0sICh1bnNpZ25lZCBpbnQpIGMueFs1XSwKKwkJICAgICAgICAg ICAgICAgICAodW5zaWduZWQgaW50KSBjLnhbNl0sICh1bnNpZ25lZCBpbnQpIGMueFs3XSkpOwor CQlEVUtfX0ZBSUxFRCgiaW52YWxpZCByZXN1bHQgZnJvbSAxLjAgKyAwLjV1bHAiKTsKKwl9CisK KwkvKiAoMS4wICsgdWxwKSArIDJeKC01Myk6IHJlc3VsdCBpcyBtaWR3YXkgYmV0d2VlbiAxLjAg KyB1bHAgYW5kIDEuMCArIDIqdWxwLgorCSAqIFJvdW5kIHRvIG5lYXJlc3Q6IDEuMCArIDIqdWxw IChyb3VuZCB0byBldmVuIG1hbnRpc3NhKQorCSAqIFJvdW5kIHRvICtJbmY6ICAgIDEuMCArIDIq dWxwCisJICogUm91bmQgdG8gLUluZjogICAgMS4wICsgdWxwCisJICogUm91bmQgdG8gemVybzog ICAgMS4wICsgdWxwCisJICogPT4gQ29ycmVjdCByZXN1bHQgZWxpbWluYXRlcyByb3VuZCB0byAt SW5mIGFuZCByb3VuZCB0byB6ZXJvLgorCSAqLworCURVS19fRE9VQkxFX0lOSVQoJmEsIDB4M2Ys IDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEpOworCURVS19fRE9VQkxF X0lOSVQoJmIsIDB4M2MsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAp OworCWR1a19tZW1zZXQoKHZvaWQgKikgJmMsIDAsIHNpemVvZihjKSk7CisJYy5kID0gYS5kICsg Yi5kOworCWlmICghRFVLX19ET1VCTEVfQ09NUEFSRSgmYywgMHgzZiwgMHhmMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMikpIHsKKwkJRFVLX0QoRFVLX0RQUklOVCgiYnJva2Vu IHJlc3VsdCAobmF0aXZlIGVuZGlhbm5lc3NzKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUw MnggJTAyeCAlMDJ4IiwKKwkJICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBjLnhbMF0s ICh1bnNpZ25lZCBpbnQpIGMueFsxXSwKKwkJICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50 KSBjLnhbMl0sICh1bnNpZ25lZCBpbnQpIGMueFszXSwKKwkJICAgICAgICAgICAgICAgICAodW5z aWduZWQgaW50KSBjLnhbNF0sICh1bnNpZ25lZCBpbnQpIGMueFs1XSwKKwkJICAgICAgICAgICAg ICAgICAodW5zaWduZWQgaW50KSBjLnhbNl0sICh1bnNpZ25lZCBpbnQpIGMueFs3XSkpOworCQlE VUtfX0ZBSUxFRCgiaW52YWxpZCByZXN1bHQgZnJvbSAoMS4wICsgdWxwKSArIDAuNXVscCIpOwor CX0KKworCS8qIENvdWxkIGRvIG5lZ2F0aXZlIG51bWJlciB0ZXN0aW5nIHRvbywgYnV0IHRoZSB0 ZXN0cyBhYm92ZSBzaG91bGQKKwkgKiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSUVFRSA3NTQgcm91 bmRpbmcgbW9kZXMuCisJICovCisJcmV0dXJuIGVycm9yX2NvdW50OworfQorCisvKgorICogIGZt b2QoKTogb2Z0ZW4gYSBwb3J0YWJpbGl0eSBpc3N1ZSBpbiBlbWJlZGRlZCBvciBiYXJlIHBsYXRm b3JtIHRhcmdldHMuCisgKiAgQ2hlY2sgZm9yIGF0IGxlYXN0IG1pbmltYWxseSBjb3JyZWN0IGJl aGF2aW9yLiAgVW5saWtlIHNvbWUgb3RoZXIgbWF0aAorICogIGZ1bmN0aW9ucyAobGlrZSBjb3Mo KSkgRHVrdGFwZSByZWxpZXMgb24gZm1vZCgpIGludGVybmFsbHkgdG9vLgorICovCisKK0RVS19M T0NBTCBkdWtfdWludF90IGR1a19fc2VsZnRlc3RfZm1vZCh2b2lkKSB7CisJZHVrX3VpbnRfdCBl cnJvcl9jb3VudCA9IDA7CisJZHVrX190ZXN0X2RvdWJsZV91bmlvbiB1MSwgdTI7CisJdm9sYXRp bGUgZHVrX2RvdWJsZV90IHQxLCB0MiwgdDM7CisKKwkvKiBmbW9kKCkgd2l0aCBpbnRlZ2VyIGFy Z3VtZW50IGFuZCBleHBvbmVudCAyXjMyIGlzIHVzZWQgYnkgZS5nLgorCSAqIFRvVWludDMyKCkg YW5kIHNvbWUgRHVrdGFwZSBpbnRlcm5hbHMuCisJICovCisJdTEuZCA9IERVS19GTU9EKDEwLjAs IDQyOTQ5NjcyOTYuMCk7CisJdTIuZCA9IDEwLjA7CisJRFVLX19EQkxVTklPTl9DTVBfVFJVRSgm dTEsICZ1Mik7CisKKwl1MS5kID0gRFVLX0ZNT0QoNDI5NDk2NzMwNi4wLCA0Mjk0OTY3Mjk2LjAp OworCXUyLmQgPSAxMC4wOworCURVS19fREJMVU5JT05fQ01QX1RSVUUoJnUxLCAmdTIpOworCisJ dTEuZCA9IERVS19GTU9EKDczMDE0NDQ0MDQyLjAsIDQyOTQ5NjcyOTYuMCk7CisJdTIuZCA9IDEw LjA7CisJRFVLX19EQkxVTklPTl9DTVBfVFJVRSgmdTEsICZ1Mik7CisKKwkvKiA1Mi1iaXQgaW50 ZWdlciBzcGxpdCBpbnRvIHR3byBwYXJ0czoKKwkgKiA+Pj4gMHgxZmVkY2JhOTg3NjU0MworCSAq IDg5ODcxODMyNTYzOTcxMjMKKwkgKiA+Pj4gZmxvYXQoMHgxZmVkY2JhOTg3NjU0MykgLyBmbG9h dCgyKio1MykKKwkgKiAwLjk5Nzc3Nzc3Nzc3Nzc3NzgKKwkgKi8KKwl1MS5kID0gRFVLX0ZNT0Qo ODk4NzE4MzI1NjM5NzEyMy4wLCA0Mjk0OTY3Mjk2LjApOworCXUyLmQgPSAoZHVrX2RvdWJsZV90 KSAweGE5ODc2NTQzVUw7CisJRFVLX19EQkxVTklPTl9DTVBfVFJVRSgmdTEsICZ1Mik7CisJdDEg PSA4OTg3MTgzMjU2Mzk3MTIzLjA7CisJdDIgPSA0Mjk0OTY3Mjk2LjA7CisJdDMgPSB0MSAvIHQy OworCXUxLmQgPSBEVUtfRkxPT1IodDMpOworCXUyLmQgPSAoZHVrX2RvdWJsZV90KSAweDFmZWRj YlVMOworCURVS19fREJMVU5JT05fQ01QX1RSVUUoJnUxLCAmdTIpOworCisJLyogQzk5IGJlaGF2 aW9yIGlzIGZvciBmbW9kKCkgcmVzdWx0IHNpZ24gdG8gbWF0aGMgYXJndW1lbnQgc2lnbi4gKi8K Kwl1MS5kID0gRFVLX0ZNT0QoLTEwLjAsIDQyOTQ5NjcyOTYuMCk7CisJdTIuZCA9IC0xMC4wOwor CURVS19fREJMVU5JT05fQ01QX1RSVUUoJnUxLCAmdTIpOworCisJdTEuZCA9IERVS19GTU9EKC00 Mjk0OTY3MzA2LjAsIDQyOTQ5NjcyOTYuMCk7CisJdTIuZCA9IC0xMC4wOworCURVS19fREJMVU5J T05fQ01QX1RSVUUoJnUxLCAmdTIpOworCisJdTEuZCA9IERVS19GTU9EKC03MzAxNDQ0NDA0Mi4w LCA0Mjk0OTY3Mjk2LjApOworCXUyLmQgPSAtMTAuMDsKKwlEVUtfX0RCTFVOSU9OX0NNUF9UUlVF KCZ1MSwgJnUyKTsKKworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKworLyoKKyAqICBTdHJ1Y3Qg c2l6ZS9hbGlnbm1lbnQgaWYgcGxhdGZvcm0gcmVxdWlyZXMgaXQKKyAqCisgKiAgVGhlcmUgYXJl IHNvbWUgY29tcGlsZXIgc3BlY2lmaWMgc3RydWN0IHBhZGRpbmcgcHJhZ21hcyBldGMgaW4gdXNl LCB0aGlzCisgKiAgc2VsZnRlc3QgZW5zdXJlcyB0aGV5J3JlIGNvcnJlY3RseSBkZXRlY3RlZCBh bmQgdXNlZC4KKyAqLworCitEVUtfTE9DQUwgZHVrX3VpbnRfdCBkdWtfX3NlbGZ0ZXN0X3N0cnVj dF9hbGlnbih2b2lkKSB7CisJZHVrX3VpbnRfdCBlcnJvcl9jb3VudCA9IDA7CisKKyNpZiAoRFVL X1VTRV9BTElHTl9CWSA9PSA0KQorCWlmICgoc2l6ZW9mKGR1a19oYnVmZmVyX2ZpeGVkKSAlIDQp ICE9IDApIHsKKwkJRFVLX19GQUlMRUQoInNpemVvZihkdWtfaGJ1ZmZlcl9maXhlZCkgbm90IGFs aWduZWQgdG8gNCIpOworCX0KKyNlbGlmIChEVUtfVVNFX0FMSUdOX0JZID09IDgpCisJaWYgKChz aXplb2YoZHVrX2hidWZmZXJfZml4ZWQpICUgOCkgIT0gMCkgeworCQlEVUtfX0ZBSUxFRCgic2l6 ZW9mKGR1a19oYnVmZmVyX2ZpeGVkKSBub3QgYWxpZ25lZCB0byA4Iik7CisJfQorI2VsaWYgKERV S19VU0VfQUxJR05fQlkgPT0gMSkKKwkvKiBubyBjaGVjayAqLworI2Vsc2UKKyNlcnJvciBpbnZh bGlkIERVS19VU0VfQUxJR05fQlkKKyNlbmRpZgorCXJldHVybiBlcnJvcl9jb3VudDsKK30KKwor LyoKKyAqICA2NC1iaXQgYXJpdGhtZXRpYworICoKKyAqICBUaGVyZSBhcmUgc29tZSBwbGF0Zm9y bXMvY29tcGlsZXJzIHdoZXJlIDY0LWJpdCB0eXBlcyBhcmUgYXZhaWxhYmxlCisgKiAgYnV0IGRv bid0IHdvcmsgY29ycmVjdGx5LiAgVGVzdCBmb3Iga25vd24gY2FzZXMuCisgKi8KKworRFVLX0xP Q0FMIGR1a191aW50X3QgZHVrX19zZWxmdGVzdF82NGJpdF9hcml0aG1ldGljKHZvaWQpIHsKKwlk dWtfdWludF90IGVycm9yX2NvdW50ID0gMDsKKyNpZiBkZWZpbmVkKERVS19VU0VfNjRCSVRfT1BT KQorCXZvbGF0aWxlIGR1a19pbnQ2NF90IGk7CisJdm9sYXRpbGUgZHVrX2RvdWJsZV90IGQ7CisK KwkvKiBDYXRjaCBhIGRvdWJsZS10by1pbnQ2NCBjYXN0IGlzc3VlIGVuY291bnRlcmVkIGluIHBy YWN0aWNlLiAqLworCWQgPSAyMTQ3NDgzNjQ4LjA7CisJaSA9IChkdWtfaW50NjRfdCkgZDsKKwlp ZiAoaSAhPSBEVUtfSTY0X0NPTlNUQU5UKDB4ODAwMDAwMDApKSB7CisJCURVS19fRkFJTEVEKCJj YXN0aW5nIDIxNDc0ODM2NDguMCB0byBkdWtfaW50NjRfdCBmYWlsZWQiKTsKKwl9CisjZWxzZQor CS8qIG5vcCAqLworI2VuZGlmCisJcmV0dXJuIGVycm9yX2NvdW50OworfQorCisvKgorICogIENh c3RpbmcKKyAqLworCitEVUtfTE9DQUwgZHVrX3VpbnRfdCBkdWtfX3NlbGZ0ZXN0X2Nhc3RfZG91 YmxlX3RvX3NtYWxsX3VpbnQodm9pZCkgeworCS8qCisJICogIGh0dHBzOi8vZ2l0aHViLmNvbS9z dmFhcmFsYS9kdWt0YXBlL2lzc3Vlcy8xMjcjaXNzdWVjb21tZW50LTc3ODYzNDczCisJICovCisK KwlkdWtfdWludF90IGVycm9yX2NvdW50ID0gMDsKKworCWR1a19kb3VibGVfdCBkMSwgZDI7CisJ ZHVrX3NtYWxsX3VpbnRfdCB1OworCisJZHVrX2RvdWJsZV90IGQxdiwgZDJ2OworCWR1a19zbWFs bF91aW50X3QgdXY7CisKKwkvKiBUZXN0IHdpdGhvdXQgdm9sYXRpbGVzICovCisKKwlkMSA9IDEu MDsKKwl1ID0gKGR1a19zbWFsbF91aW50X3QpIGQxOworCWQyID0gKGR1a19kb3VibGVfdCkgdTsK KworCWlmICghKGQxID09IDEuMCAmJiB1ID09IDEgJiYgZDIgPT0gMS4wICYmIGQxID09IGQyKSkg eworCQlEVUtfX0ZBSUxFRCgiZG91YmxlIHRvIGR1a19zbWFsbF91aW50X3QgY2FzdCBmYWlsZWQi KTsKKwl9CisKKwkvKiBTYW1lIHRlc3Qgd2l0aCB2b2xhdGlsZXMgKi8KKworCWQxdiA9IDEuMDsK Kwl1diA9IChkdWtfc21hbGxfdWludF90KSBkMXY7CisJZDJ2ID0gKGR1a19kb3VibGVfdCkgdXY7 CisKKwlpZiAoIShkMXYgPT0gMS4wICYmIHV2ID09IDEgJiYgZDJ2ID09IDEuMCAmJiBkMXYgPT0g ZDJ2KSkgeworCQlEVUtfX0ZBSUxFRCgiZG91YmxlIHRvIGR1a19zbWFsbF91aW50X3QgY2FzdCBm YWlsZWQiKTsKKwl9CisKKwlyZXR1cm4gZXJyb3JfY291bnQ7Cit9CisKK0RVS19MT0NBTCBkdWtf dWludF90IGR1a19fc2VsZnRlc3RfY2FzdF9kb3VibGVfdG9fdWludDMyKHZvaWQpIHsKKwkvKgor CSAqICBUaGlzIHRlc3QgZmFpbHMgb24gYW4gZXhvdGljIEFSTSB0YXJnZXQ7IGRvdWJsZS10by11 aW50CisJICogIGNhc3QgaXMgaW5jb3JyZWN0bHkgY2xhbXBlZCB0byAtc2lnbmVkLSBpbnQgaGln aGVzdCB2YWx1ZS4KKwkgKgorCSAqICBodHRwczovL2dpdGh1Yi5jb20vc3ZhYXJhbGEvZHVrdGFw ZS9pc3N1ZXMvMzM2CisJICovCisKKwlkdWtfdWludF90IGVycm9yX2NvdW50ID0gMDsKKwlkdWtf ZG91YmxlX3QgZHY7CisJZHVrX3VpbnQzMl90IHV2OworCisJZHYgPSAzNzM1OTI4NTU5LjA7ICAv KiAweGRlYWRiZWVmIGluIGRlY2ltYWwgKi8KKwl1diA9IChkdWtfdWludDMyX3QpIGR2OworCisJ aWYgKHV2ICE9IDB4ZGVhZGJlZWZVTCkgeworCQlEVUtfX0ZBSUxFRCgiZG91YmxlIHRvIGR1a191 aW50MzJfdCBjYXN0IGZhaWxlZCIpOworCX0KKworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKwor LyoKKyAqICBNaW5pbWFsIHRlc3Qgb2YgdXNlciBzdXBwbGllZCBhbGxvY2F0aW9uIGZ1bmN0aW9u cworICoKKyAqICAgIC0gQmFzaWMgYWxsb2MgKyByZWFsbG9jICsgZnJlZSBjeWNsZQorICoKKyAq ICAgIC0gUmVhbGxvYyB0byBzaWduaWZpY2FudGx5IGxhcmdlciBzaXplIHRvIChob3BlZnVsbHkp IHRyaWdnZXIgYQorICogICAgICByZWxvY2F0aW9uIGFuZCBjaGVjayB0aGF0IHJlbG9jYXRpb24g Y29weWluZyB3b3JrcworICovCisKK0RVS19MT0NBTCBkdWtfdWludF90IGR1a19fc2VsZnRlc3Rf YWxsb2NfZnVuY3MoZHVrX2FsbG9jX2Z1bmN0aW9uIGFsbG9jX2Z1bmMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19yZWFsbG9jX2Z1bmN0aW9uIHJl YWxsb2NfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHVrX2ZyZWVfZnVuY3Rpb24gZnJlZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1ZGF0YSkgeworCWR1a191aW50X3QgZXJyb3Jf Y291bnQgPSAwOworCXZvaWQgKnB0cjsKKwl2b2lkICpuZXdfcHRyOworCWR1a19zbWFsbF9pbnRf dCBpLCBqOworCXVuc2lnbmVkIGNoYXIgeDsKKworCWlmIChhbGxvY19mdW5jID09IE5VTEwgfHwg cmVhbGxvY19mdW5jID09IE5VTEwgfHwgZnJlZV9mdW5jID09IE5VTEwpIHsKKwkJcmV0dXJuIDA7 CisJfQorCisJZm9yIChpID0gMTsgaSA8PSAyNTY7IGkrKykgeworCQlwdHIgPSBhbGxvY19mdW5j KHVkYXRhLCAoZHVrX3NpemVfdCkgaSk7CisJCWlmIChwdHIgPT0gTlVMTCkgeworCQkJRFVLX0Qo RFVLX0RQUklOVCgiYWxsb2MgZmFpbGVkLCBpZ25vcmUiKSk7CisJCQljb250aW51ZTsgIC8qIGFs bG9jIGZhaWxlZCwgaWdub3JlICovCisJCX0KKwkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewor CQkJKCh1bnNpZ25lZCBjaGFyICopIHB0cilbal0gPSAodW5zaWduZWQgY2hhcikgKDB4ODAgKyBq KTsKKwkJfQorCQluZXdfcHRyID0gcmVhbGxvY19mdW5jKHVkYXRhLCBwdHIsIDEwMjQpOworCQlp ZiAobmV3X3B0ciA9PSBOVUxMKSB7CisJCQlEVUtfRChEVUtfRFBSSU5UKCJyZWFsbG9jIGZhaWxl ZCwgaWdub3JlIikpOworCQkJZnJlZV9mdW5jKHVkYXRhLCBwdHIpOworCQkJY29udGludWU7ICAv KiByZWFsbG9jIGZhaWxlZCwgaWdub3JlICovCisJCX0KKwkJcHRyID0gbmV3X3B0cjsKKwkJZm9y IChqID0gMDsgaiA8IGk7IGorKykgeworCQkJeCA9ICgodW5zaWduZWQgY2hhciAqKSBwdHIpW2pd OworCQkJaWYgKHggIT0gKHVuc2lnbmVkIGNoYXIpICgweDgwICsgaikpIHsKKwkJCQlEVUtfRChE VUtfRFBSSU5UKCJieXRlIGF0IGluZGV4ICVsZCBkb2Vzbid0IG1hdGNoIGFmdGVyIHJlYWxsb2M6 ICUwMmx4IiwKKwkJCQkgICAgICAgICAgICAgICAgIChsb25nKSBqLCAodW5zaWduZWQgbG9uZykg eCkpOworCQkJCURVS19fRkFJTEVEKCJieXRlIGNvbXBhcmUgYWZ0ZXIgcmVhbGxvYyIpOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisJCWZyZWVfZnVuYyh1ZGF0YSwgcHRyKTsKKwl9CisKKwlyZXR1 cm4gZXJyb3JfY291bnQ7Cit9CisKKy8qCisgKiAgU2VsZiB0ZXN0IG1haW4KKyAqLworCitEVUtf SU5URVJOQUwgZHVrX3VpbnRfdCBkdWtfc2VsZnRlc3RfcnVuX3Rlc3RzKGR1a19hbGxvY19mdW5j dGlvbiBhbGxvY19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkdWtfcmVhbGxvY19mdW5jdGlvbiByZWFsbG9jX2Z1bmMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19mcmVlX2Z1bmN0aW9uIGZyZWVf ZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqdWRhdGEpIHsKKwlkdWtfdWludF90IGVycm9yX2NvdW50ID0gMDsKKworCURVS19EKERVS19E UFJJTlQoInNlbGYgdGVzdCBzdGFydGluZyIpKTsKKworCWVycm9yX2NvdW50ICs9IGR1a19fc2Vs ZnRlc3RfdHlwZXMoKTsKKwllcnJvcl9jb3VudCArPSBkdWtfX3NlbGZ0ZXN0X3BhY2tlZF90dmFs KCk7CisJZXJyb3JfY291bnQgKz0gZHVrX19zZWxmdGVzdF90d29zX2NvbXBsZW1lbnQoKTsKKwll cnJvcl9jb3VudCArPSBkdWtfX3NlbGZ0ZXN0X2J5dGVfb3JkZXIoKTsKKwllcnJvcl9jb3VudCAr PSBkdWtfX3NlbGZ0ZXN0X2Jzd2FwX21hY3JvcygpOworCWVycm9yX2NvdW50ICs9IGR1a19fc2Vs ZnRlc3RfZG91YmxlX3VuaW9uX3NpemUoKTsKKwllcnJvcl9jb3VudCArPSBkdWtfX3NlbGZ0ZXN0 X2RvdWJsZV9hbGlhc2luZygpOworCWVycm9yX2NvdW50ICs9IGR1a19fc2VsZnRlc3RfZG91Ymxl X3plcm9fc2lnbigpOworCWVycm9yX2NvdW50ICs9IGR1a19fc2VsZnRlc3RfZG91YmxlX3JvdW5k aW5nKCk7CisJZXJyb3JfY291bnQgKz0gZHVrX19zZWxmdGVzdF9mbW9kKCk7CisJZXJyb3JfY291 bnQgKz0gZHVrX19zZWxmdGVzdF9zdHJ1Y3RfYWxpZ24oKTsKKwllcnJvcl9jb3VudCArPSBkdWtf X3NlbGZ0ZXN0XzY0Yml0X2FyaXRobWV0aWMoKTsKKwllcnJvcl9jb3VudCArPSBkdWtfX3NlbGZ0 ZXN0X2Nhc3RfZG91YmxlX3RvX3NtYWxsX3VpbnQoKTsKKwllcnJvcl9jb3VudCArPSBkdWtfX3Nl bGZ0ZXN0X2Nhc3RfZG91YmxlX3RvX3VpbnQzMigpOworCWVycm9yX2NvdW50ICs9IGR1a19fc2Vs ZnRlc3RfYWxsb2NfZnVuY3MoYWxsb2NfZnVuYywgcmVhbGxvY19mdW5jLCBmcmVlX2Z1bmMsIHVk YXRhKTsKKworCURVS19EKERVS19EUFJJTlQoInNlbGYgdGVzdCBjb21wbGV0ZSwgdG90YWwgZXJy b3IgY291bnQ6ICVsZCIsIChsb25nKSBlcnJvcl9jb3VudCkpOworCisJcmV0dXJuIGVycm9yX2Nv dW50OworfQorCisjZW5kaWYgIC8qIERVS19VU0VfU0VMRl9URVNUUyAqLworCisvKiBhdXRvbWF0 aWMgdW5kZWZzICovCisjdW5kZWYgRFVLX19EQkxVTklPTl9DTVBfRkFMU0UKKyN1bmRlZiBEVUtf X0RCTFVOSU9OX0NNUF9UUlVFCisjdW5kZWYgRFVLX19ET1VCTEVfQ09NUEFSRQorI3VuZGVmIERV S19fRE9VQkxFX0lOSVQKKyN1bmRlZiBEVUtfX0ZBSUxFRAorI3VuZGVmIERVS19fVTMyX0lOSVQK Ky8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lm IGRlZmluZWQoRFVLX1VTRV9GQVNUSU5UKQorCisvKgorICogIE1hbnVhbGx5IG9wdGltaXplZCBk b3VibGUtdG8tZmFzdGludCBkb3duZ3JhZGUgY2hlY2suCisgKgorICogIFRoaXMgY2hlY2sgaGFz IGEgbGFyZ2UgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGZvciBmYXN0aW50Cisg KiAgc2xvdyBwYXRocywgc28gbXVzdCBiZSBjaGFuZ2VkIGNhcmVmdWxseS4gIFRoZSBjb2RlIHNo b3VsZCBwcm9iYWJseSBiZQorICogIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHJl c3VsdCBkb2VzIG5vdCBmaXQgaW50byBhIGZhc3RpbnQsCisgKiAgdG8gbWluaW1pemUgdGhlIHBl bmFsdHkgZm9yICJzbG93IHBhdGggY29kZSIgZGVhbGluZyB3aXRoIGZyYWN0aW9ucyBldGMuCisg KgorICogIEF0IGxlYXN0IG9uIG9uZSB0ZXN0ZWQgc29mdCBmbG9hdCBBUk0gcGxhdGZvcm0gZG91 YmxlLXRvLWludDY0IGNvZXJjaW9uCisgKiAgaXMgdmVyeSBzbG93IChhbmQgc29tZXRpbWVzIHBy b2R1Y2VzIGluY29ycmVjdCByZXN1bHRzLCBzZWUgc2VsZiB0ZXN0cykuCisgKiAgVGhpcyBhbGdv cml0aG0gY29tYmluZXMgYSBmYXN0aW50IGNvbXBhdGliaWxpdHkgY2hlY2sgYW5kIGV4dHJhY3Rp bmcgdGhlCisgKiAgaW50ZWdlciB2YWx1ZSBmcm9tIGFuIElFRUUgZG91YmxlIGZvciBzZXR0aW5n IHRoZSB0YWdnZWQgZmFzdGludC4gIEZvcgorICogIG90aGVyIHBsYXRmb3JtcyBhIG1vcmUgbmFp dmUgYXBwcm9hY2ggbWlnaHQgYmUgYmV0dGVyLgorICoKKyAqICBTZWUgZG9jL2Zhc3RpbnQucnN0 IGZvciBkZXRhaWxzLgorICovCisKK0RVS19JTlRFUk5BTCBEVUtfQUxXQVlTX0lOTElORSB2b2lk IGR1a190dmFsX3NldF9udW1iZXJfY2hrZmFzdF9mYXN0KGR1a190dmFsICp0diwgZHVrX2RvdWJs ZV90IHgpIHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCWR1a19pbnQ2NF90IGk7CisJZHVrX3Nt YWxsX2ludF90IGV4cHQ7CisJZHVrX3NtYWxsX2ludF90IHNoaWZ0OworCisJLyogWFhYOiBvcHRp bWl6ZSBmb3IgcGFja2VkIGR1a190dmFsIGRpcmVjdGx5PyAqLworCisJZHUuZCA9IHg7CisJaSA9 IChkdWtfaW50NjRfdCkgRFVLX0RCTFVOSU9OX0dFVF9JTlQ2NCgmZHUpOworCWV4cHQgPSAoZHVr X3NtYWxsX2ludF90KSAoKGkgPj4gNTIpICYgMHgwN2ZmKTsKKwlzaGlmdCA9IGV4cHQgLSAxMDIz OworCisJaWYgKHNoaWZ0ID49IDAgJiYgc2hpZnQgPD0gNDYpIHsgIC8qIGV4cG9uZW50cyAxMDIz IHRvIDEwNjkgKi8KKwkJZHVrX2ludDY0X3QgdDsKKworCQlpZiAoKChEVUtfSTY0X0NPTlNUQU5U KDB4MDAwZmZmZmZmZmZmZmZmZikgPj4gc2hpZnQpICYgaSkgPT0gMCkgeworCQkJdCA9IGkgfCBE VUtfSTY0X0NPTlNUQU5UKDB4MDAxMDAwMDAwMDAwMDAwMCk7ICAvKiBpbXBsaWNpdCBsZWFkaW5n IG9uZSAqLworCQkJdCA9IHQgJiBEVUtfSTY0X0NPTlNUQU5UKDB4MDAxZmZmZmZmZmZmZmZmZik7 CisJCQl0ID0gdCA+PiAoNTIgLSBzaGlmdCk7CisJCQlpZiAoaSA8IDApIHsKKwkJCQl0ID0gLXQ7 CisJCQl9CisJCQlEVUtfVFZBTF9TRVRfRkFTVElOVCh0diwgdCk7CisJCQlyZXR1cm47CisJCX0K Kwl9IGVsc2UgaWYgKHNoaWZ0ID09IC0xMDIzKSB7ICAvKiBleHBvbmVudCAwICovCisJCWlmIChp ID49IDAgJiYgKGkgJiBEVUtfSTY0X0NPTlNUQU5UKDB4MDAwZmZmZmZmZmZmZmZmZikpID09IDAp IHsKKwkJCS8qIE5vdGU6IHJlamVjdCBuZWdhdGl2ZSB6ZXJvLiAqLworCQkJRFVLX1RWQUxfU0VU X0ZBU1RJTlQodHYsIChkdWtfaW50NjRfdCkgMCk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2Ug aWYgKHNoaWZ0ID09IDQ3KSB7ICAvKiBleHBvbmVudCAxMDcwICovCisJCWlmIChpIDwgMCAmJiAo aSAmIERVS19JNjRfQ09OU1RBTlQoMHgwMDBmZmZmZmZmZmZmZmZmKSkgPT0gMCkgeworCQkJRFVL X1RWQUxfU0VUX0ZBU1RJTlQodHYsIChkdWtfaW50NjRfdCkgRFVLX0ZBU1RJTlRfTUlOKTsKKwkJ CXJldHVybjsKKwkJfQorCX0KKworCURVS19UVkFMX1NFVF9ET1VCTEUodHYsIHgpOworCXJldHVy bjsKK30KKworRFVLX0lOVEVSTkFMIERVS19OT0lOTElORSB2b2lkIGR1a190dmFsX3NldF9udW1i ZXJfY2hrZmFzdF9zbG93KGR1a190dmFsICp0diwgZHVrX2RvdWJsZV90IHgpIHsKKwlkdWtfdHZh bF9zZXRfbnVtYmVyX2Noa2Zhc3RfZmFzdCh0diwgeCk7Cit9CisKKy8qCisgKiAgTWFudWFsbHkg b3B0aW1pemVkIG51bWJlci10by1kb3VibGUgY29udmVyc2lvbgorICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfRkFTVElOVCkgJiYgZGVmaW5lZChEVUtfVVNFX1BBQ0tFRF9UVkFMKQorRFVLX0lO VEVSTkFMIERVS19BTFdBWVNfSU5MSU5FIGR1a19kb3VibGVfdCBkdWtfdHZhbF9nZXRfbnVtYmVy X3BhY2tlZChkdWtfdHZhbCAqdHYpIHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCWR1a191aW50 NjRfdCB0OworCisJdCA9IChkdWtfdWludDY0X3QpIERVS19EQkxVTklPTl9HRVRfVUlOVDY0KHR2 KTsKKwlpZiAoKHQgPj4gNDgpICE9IERVS19UQUdfRkFTVElOVCkgeworCQlyZXR1cm4gdHYtPmQ7 CisJfSBlbHNlIGlmICh0ICYgRFVLX1U2NF9DT05TVEFOVCgweDAwMDA4MDAwMDAwMDAwMDApKSB7 CisJCXQgPSAoZHVrX3VpbnQ2NF90KSAoLSgoZHVrX2ludDY0X3QpIHQpKTsgIC8qIGF2b2lkIHVu YXJ5IG1pbnVzIG9uIHVuc2lnbmVkICovCisJCXQgPSB0ICYgRFVLX1U2NF9DT05TVEFOVCgweDAw MDBmZmZmZmZmZmZmZmYpOyAgLyogbmVnYXRpdmUgKi8KKwkJdCB8PSBEVUtfVTY0X0NPTlNUQU5U KDB4YzMzMDAwMDAwMDAwMDAwMCk7CisJCURVS19EQkxVTklPTl9TRVRfVUlOVDY0KCZkdSwgdCk7 CisJCXJldHVybiBkdS5kICsgNDUwMzU5OTYyNzM3MDQ5Ni4wOyAgLyogMSA8PCA1MiAqLworCX0g ZWxzZSBpZiAodCAhPSAwKSB7CisJCXQgJj0gRFVLX1U2NF9DT05TVEFOVCgweDAwMDBmZmZmZmZm ZmZmZmYpOyAgLyogcG9zaXRpdmUgKi8KKwkJdCB8PSBEVUtfVTY0X0NPTlNUQU5UKDB4NDMzMDAw MDAwMDAwMDAwMCk7CisJCURVS19EQkxVTklPTl9TRVRfVUlOVDY0KCZkdSwgdCk7CisJCXJldHVy biBkdS5kIC0gNDUwMzU5OTYyNzM3MDQ5Ni4wOyAgLyogMSA8PCA1MiAqLworCX0gZWxzZSB7CisJ CXJldHVybiAwLjA7ICAvKiB6ZXJvICovCisJfQorfQorI2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJ TlQgJiYgRFVLX1VTRV9QQUNLRURfVFZBTCAqLworCisjaWYgMCAgLyogdW51c2VkICovCisjaWYg ZGVmaW5lZChEVUtfVVNFX0ZBU1RJTlQpICYmICFkZWZpbmVkKERVS19VU0VfUEFDS0VEX1RWQUwp CitEVUtfSU5URVJOQUwgRFVLX0FMV0FZU19JTkxJTkUgZHVrX2RvdWJsZV90IGR1a190dmFsX2dl dF9udW1iZXJfdW5wYWNrZWQoZHVrX3R2YWwgKnR2KSB7CisJZHVrX2RvdWJsZV91bmlvbiBkdTsK KwlkdWtfdWludDY0X3QgdDsKKworCURVS19BU1NFUlQodHYtPnQgPT0gRFVLX1RBR19OVU1CRVIg fHwgdHYtPnQgPT0gRFVLX1RBR19GQVNUSU5UKTsKKworCWlmICh0di0+dCA9PSBEVUtfVEFHX0ZB U1RJTlQpIHsKKwkJaWYgKHR2LT52LmZpID49IDApIHsKKwkJCXQgPSBEVUtfVTY0X0NPTlNUQU5U KDB4NDMzMDAwMDAwMDAwMDAwMCkgfCAoZHVrX3VpbnQ2NF90KSB0di0+di5maTsKKwkJCURVS19E QkxVTklPTl9TRVRfVUlOVDY0KCZkdSwgdCk7CisJCQlyZXR1cm4gZHUuZCAtIDQ1MDM1OTk2Mjcz NzA0OTYuMDsgIC8qIDEgPDwgNTIgKi8KKwkJfSBlbHNlIHsKKwkJCXQgPSBEVUtfVTY0X0NPTlNU QU5UKDB4YzMzMDAwMDAwMDAwMDAwMCkgfCAoZHVrX3VpbnQ2NF90KSAoLXR2LT52LmZpKTsKKwkJ CURVS19EQkxVTklPTl9TRVRfVUlOVDY0KCZkdSwgdCk7CisJCQlyZXR1cm4gZHUuZCArIDQ1MDM1 OTk2MjczNzA0OTYuMDsgIC8qIDEgPDwgNTIgKi8KKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiB0 di0+di5kOworCX0KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9GQVNUSU5UICYmIERVS19VU0VfUEFD S0VEX1RWQUwgKi8KKyNlbmRpZiAgLyogMCAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX0ZBU1RJ TlQpICYmICFkZWZpbmVkKERVS19VU0VfUEFDS0VEX1RWQUwpCitEVUtfSU5URVJOQUwgRFVLX0FM V0FZU19JTkxJTkUgZHVrX2RvdWJsZV90IGR1a190dmFsX2dldF9udW1iZXJfdW5wYWNrZWRfZmFz dGludChkdWtfdHZhbCAqdHYpIHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCWR1a191aW50NjRf dCB0OworCisJRFVLX0FTU0VSVCh0di0+dCA9PSBEVUtfVEFHX0ZBU1RJTlQpOworCisJaWYgKHR2 LT52LmZpID49IDApIHsKKwkJdCA9IERVS19VNjRfQ09OU1RBTlQoMHg0MzMwMDAwMDAwMDAwMDAw KSB8IChkdWtfdWludDY0X3QpIHR2LT52LmZpOworCQlEVUtfREJMVU5JT05fU0VUX1VJTlQ2NCgm ZHUsIHQpOworCQlyZXR1cm4gZHUuZCAtIDQ1MDM1OTk2MjczNzA0OTYuMDsgIC8qIDEgPDwgNTIg Ki8KKwl9IGVsc2UgeworCQl0ID0gRFVLX1U2NF9DT05TVEFOVCgweGMzMzAwMDAwMDAwMDAwMDAp IHwgKGR1a191aW50NjRfdCkgKC10di0+di5maSk7CisJCURVS19EQkxVTklPTl9TRVRfVUlOVDY0 KCZkdSwgdCk7CisJCXJldHVybiBkdS5kICsgNDUwMzU5OTYyNzM3MDQ5Ni4wOyAgLyogMSA8PCA1 MiAqLworCX0KK30KKyNlbmRpZiAgLyogRFVLX1VTRV9GQVNUSU5UICYmIERVS19VU0VfUEFDS0VE X1RWQUwgKi8KKworI2VuZGlmICAvKiBEVUtfVVNFX0ZBU1RJTlQgKi8KKy8qCisgKiAgVW5pY29k ZSBzdXBwb3J0IHRhYmxlcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgYnVpbGQuCisg Ki8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFkeSBpbmNsdWRlZCAqLwor CisvKgorICogIFVuaWNvZGUgdGFibGVzIGNvbnRhaW5pbmcgcmFuZ2VzIG9mIFVuaWNvZGUgY2hh cmFjdGVycyBpbiBhCisgKiAgcGFja2VkIGZvcm1hdC4gIFRoZXNlIHRhYmxlcyBhcmUgdXNlZCB0 byBtYXRjaCBub24tQVNDSUkKKyAqICBjaGFyYWN0ZXJzIG9mIGNvbXBsZXggcHJvZHVjdGlvbnMg YnkgcmVzb3J0aW5nIHRvIGEgbGluZWFyCisgKiAgcmFuZ2UtYnktcmFuZ2UgY29tcGFyaXNvbi4g IFRoaXMgaXMgdmVyeSBzbG93LCBidXQgaXMgZXhwZWN0ZWQKKyAqICB0byBiZSB2ZXJ5IHJhcmUg aW4gcHJhY3RpY2FsIEVDTUFTY3JpcHQgc291cmNlIGNvZGUsIGFuZCB0aHVzCisgKiAgY29tcGFj dG5lc3MgaXMgbW9zdCBpbXBvcnRhbnQuCisgKgorICogIFRoZSB0YWJsZXMgYXJlIG1hdGNoZWQg dXNpbmcgdW5pX3JhbmdlX21hdGNoKCkgYW5kIHRoZSBmb3JtYXQKKyAqICBpcyBkZXNjcmliZWQg aW4gdG9vbHMvZXh0cmFjdF9jaGFycy5weS4KKyAqLworCisjaWYgZGVmaW5lZChEVUtfVVNFX1NP VVJDRV9OT05CTVApCisvKiBJZGVudGlmaWVyU3RhcnQgcHJvZHVjdGlvbiB3aXRoIEFTQ0lJIGV4 Y2x1ZGVkICovCisvKiBkdWtfdW5pY29kZV9pZHNfbm9hW10gKi8KKy8qCisgKiAgQXV0b21hdGlj YWxseSBnZW5lcmF0ZWQgYnkgZXh0cmFjdF9jaGFycy5weSwgZG8gbm90IGVkaXQhCisgKi8KKwor Y29uc3QgZHVrX3VpbnQ4X3QgZHVrX3VuaWNvZGVfaWRzX25vYVsxMDYzXSA9IHsKKzI0OSwxNzYs MTc2LDgwLDExMSw3LDQ3LDE1LDQ3LDI1NCwxMSwxOTcsMTkxLDAsNzIsMiwxNSwxMTUsNjYsMTks NTAsNywyLDM0LAorMiwyNDAsNjYsMjQ0LDUwLDI0NywxODUsMjQ5LDk4LDI0MSw5OSw4LDI0MSwx MjcsNTgsMjQwLDE4Miw0NywzMSwyNDEsMTkxLAorMjEsMTgsMjQ1LDUwLDE1LDEsMjQsMjcsMzUs MTUsMiwyLDI0MCwyMzksMTUsMjQ0LDE1NiwxNSwxMCwyNDEsMjYsMjEsNiwyNDAsCisxMDEsMTAs NCwxNSw5LDI0MCwxNTIsMTc1LDM5LDI0MCw4MiwxMjcsNTYsMjQyLDEwMCwxNSw0LDgsMTU5LDEs MjQwLDUsMTE1LAorMTksMjQwLDk4LDk4LDQsNTIsMTUsMiwxNCwxOCw0NywwLDI3LDksODUsMTks MjQwLDk4LDk4LDE4LDE4LDMxLDE3LDUwLDE1LDUsCis0NywyLDEzMCwzNCwyNDAsOTgsOTgsMTgs NjgsMTUsNCwxNSwxLDMxLDksMTIsMTE1LDE5LDI0MCw5OCw5OCwxOCw2OCwxNSwxNiwKKzE4LDQ3 LDEsMTUsMywyLDg0LDM0LDUyLDE4LDIsMjAsMjAsMzYsMTkxLDgsMTUsMzgsMTE0LDM0LDI0MCwx MTQsMjQwLDQsMTUsCisxMiwzOCwzMSwxNiw1LDExNCwzNCwyNDAsMTE0LDE0Niw2OCwxNSwxOCwy LDMxLDEsMzEsNCwxMTQsMzQsMjQxLDE0NywxNSwyLAorNiw0MSw0NywxMCw4NiwyNDAsMzYsMjQw LDEzMCwxMzAsMywxMTEsNDQsMjQyLDIsMjksMTExLDQ0LDE4LDMsMTgsMyw3LDUwLAorOTgsMzQs MiwzLDE4LDUwLDI2LDMsNjYsMTUsNyw2MywxOCwxNSw0OSwxMTQsMjQxLDc5LDEzLDc5LDEwMSwy NDEsMTkxLDYsMTUsCisyLDg1LDUyLDQsMjQsMzcsMjA1LDE1LDMsMjQxLDk4LDYsMywyNDEsMTc4 LDI1NSwyMjQsNjMsMzUsNTQsMzIsMzUsNjMsMjUsCiszNSw2MywxNywzNSw1NCwzMiwzNSw2Miw0 Nyw0MSwzNSw2Myw1MSwyNDEsMTI3LDAsMjQwLDQ3LDcwLDUzLDc5LDI1NCwyMSwKKzIyNywyNDAs MTgsMjQwLDE2NiwyNDMsMTgwLDE2OCwxOTQsNjMsMCwyNDAsNDcsMCwyNDAsNDcsMCwxOTQsNDcs MSwyNDIsNzksCisyMSw1LDE1LDUzLDI0NCwxMzcsNjcsMjQxLDM0LDYsMjQzLDEwNywyNDAsMjU1 LDM1LDI0MCwyMjcsNzYsMjQxLDE5NywyNDAsCisxNzUsNDAsMjQwLDEyMiwyNDIsOTUsNjgsMTUs NzksMjQxLDI1NSwzLDExMSw0MSwyNDAsMjM4LDI3LDI0MSwyMDcsMTIsMjQxLAorNzksMjcsNDMs MjQxLDY3LDE0Myw4Miw1MCw1MiwyNiwyNTEsMTUsNTAsMjU1LDIyNCw4LDUzLDYzLDIyLDUzLDU1 LDMyLDMyLAorMzIsNDcsMTUsNjMsMzcsMzgsMzIsNjYsMzgsNjcsNTMsOTIsOTgsMzgsMjQ2LDk2 LDIyNCwyNDAsNDQsMjQ1LDExMiw4MCw1NywKKzMyLDY4LDExMiwzMiwzMiwzNSw0Miw1MSwxMDAs ODAsMjQwLDYzLDI1LDI1NSwyMzMsMTA3LDI0MSwyNDIsMjQxLDI0MiwyNDcsCis4Nyw1MiwyOSwy NDEsOTgsNiwzLDI0MiwxMzYsMTUsMiwyNDAsMTIyLDk4LDk4LDk4LDk4LDk4LDk4LDk4LDExMSw2 NiwxNSwKKzI1NCwxMiwxNDYsMjQwLDE4NCwxMzIsNTIsOTUsNzAsMTE0LDQ3LDc0LDM1LDExMSwy Niw2Myw3OCwyNDAsNjMsMTEsMjQyLAorMTI3LDAsMjU1LDIyNCwyNDQsMjU1LDI0MCwwLDEzOCwx NDMsNjAsMjU1LDI0MCw0LDEzLDIyMyw3LDI1NSwyMjcsMTI3LDI0MywKKzk1LDMwLDYzLDI1Myw3 OSwwLDE3NywyNDAsMTExLDMxLDI0MCw0NywxNSw2Myw2NCwyNDEsMTUyLDYzLDg3LDYzLDIwLDM5 LAorMjQzLDI2LDM0LDM1LDQ3LDcsMjQwLDI1NSwzNiwyNDAsMTUsMzQsMjQzLDUsNjQsMzIsMjIz LDEyLDE5MSw3LDI0MCwxOTEsMTMsCisxNDMsMzEsMjQwLDIyNCwyNDAsMzYsNDEsMTgwLDQ3LDI1 LDI0MCwxNDYsMzksMjQwLDExMSw3LDY0LDc5LDM0LDMyLDY1LDUyLAorNDgsMzIsMjQwLDE2Miw1 OCwxMzAsMjEzLDUzLDUzLDE2NiwzOCw0NywyNyw0MSwxOTEsOTksMjQwLDI1NSwyNTUsMCwyNiwx NTAsCisyMjMsNyw5NSwzMywyNTUsMjQwLDAsMjU1LDE0MywyNTQsNiwzLDI0NSwxNzUsMjQsMTA5 LDcwLDIsMTQ2LDE5NCw2NiwyLDE4LAorMTgsMjQ1LDIwNywxOSwyNTUsMjI0LDkzLDI0MCw3OSw0 OCw2MywzOCwyNDEsMTcxLDI0NiwxMDAsNDcsMTE5LDI0MSwxMTEsMTAsCisxMjcsMTAsMjA3LDcz LDY5LDUzLDUzLDUwLDI0MSw5MSw0NywxMCw0NywzLDMzLDQ2LDYxLDI0MSw3OSwxMDcsMjQzLDEy NywzNywKKzI1NSwyMjMsMTMsNzksMzMsMjQyLDMxLDE2LDIzOSwxNCwxMTEsMjIsMTkxLDE0LDYz LDIwLDg3LDM2LDI0MSwyMDcsMTQyLAorMjQwLDc5LDIwLDk1LDIwLDk1LDI0LDE1OSwzNiwyNDgs MjM5LDI1NCwyLDE1NCwyNDAsMTA3LDEyNywxMzgsODMsMiwyNDEsCisxOTQsMjAsMywyNDAsMTIz LDI0MCwxMjIsMjQwLDI1NSw1MSwyNDAsNTAsMjcsMjQwLDEwNywyNDAsMTc1LDU2LDI0MiwxMzUs CiszMSw1MCwxNSwxLDUwLDM0LDI0MCwxOTEsMzAsMjQwLDIxMiwyNDAsMjIzLDIxLDExNCwyNDAs MjA3LDEzLDI0MiwxMDcsMjQwLAorMTA3LDI0MCw2MiwyNDAsNDcsOTYsMjQzLDE1OSw0MSwyNDIs NjIsMjQyLDYzLDI1NCwzMiw3OSwzNywyNDMsMjIzLDI5LDI0MSwKKzQ3LDksMjQwLDIwNywyMCwy NDEsMTkxLDE5LDY0LDIyMywzMiwyNDAsMywyNDAsMTEyLDMyLDI0MSw5NSwyLDQ3LDksMjQ0LAor MTAyLDMyLDM1LDQ2LDQxLDE0MywzMSwyNDEsMTM1LDQ5LDYzLDYsMzgsMzMsMzYsNjQsMjQwLDY0 LDIxMiwyNDksMTUsMzcsCisyNDAsNjcsMjQyLDEyNywzMiwyNDAsOTcsMzIsMjUwLDE3NSwzMSwy NDEsMTc5LDI0MSwxMTEsMzIsMjQwLDk2LDI0MiwyMjMsCisyNywyNDQsMTI3LDEwLDI1NSwyMjQs MTIyLDI0MywxNSwxNywxNSwyNDIsMTEsMjQxLDEzNiwxNSw3LDEyLDI0MSwxMzEsNjMsCis0MCwy NDIsMTU5LDI0OSwxMzAsMjQxLDk1LDMsMTUsMzUsMjQwLDIzOSw5OCw5OCwxOCwyNDEsMTExLDcs MTUsMjU0LDI2LDIyMywKKzI1NCw0MCwyMDcsODgsMjQ1LDI1NSwzLDI1MSw3OSwyNTQsMTU1LDE1 LDI1NCw1MCwzMSwyNTQsMjM2LDk1LDI1NCwxOSwxNTksCisyNTUsMCwxNiwxNzMsMjU1LDIyNSw0 MywxNDMsMTUsMjQ2LDYzLDE0LDI0MCw3OSwzMiwyNDAsMzUsMjQxLDMxLDUsMTExLDMsCisyNTUs MjI2LDEwMCwyNDMsOTIsMTUsNTIsMjA3LDUwLDMxLDE2LDI1NSwyNDAsMCwxMDksMjU1LDUsMjU1 LDIyNSwyMjksMjU1LAorMjQwLDEsNjQsMzEsMjU0LDEsMzEsNjcsMjU1LDIyNCwxMjYsMjU1LDIz MSwyNDgsMjQ1LDE4MiwxOTYsMTM2LDE1OSwyNTUsMCwKKzYsOTAsMjQ0LDgyLDI0MywxMTQsMTks MywxOSw1MCwxNzgsMiw5OCwyNDMsMTgsNTEsMTE0LDk4LDI0MCwxOTQsNTAsNjYsNCwKKzk4LDI1 NSwyMjQsNzAsNjMsOSw0Nyw5LDQ3LDE1LDQ3LDksNDcsMTUsNDcsOSw0NywxNSw0Nyw5LDQ3LDE1 LDQ3LDksMzksMjU1LAorMjM5LDQwLDI1MSw5NSw0NSwyNDMsNzksMjU0LDU5LDMsNDcsMTEsMzMs MzIsNDgsNDEsMzUsMzIsMzIsMTEyLDgwLDMyLDMyLAorMzQsMzMsMzIsNDgsMzIsMzIsMzIsMzIs MzMsMzIsNTEsMzgsMzUsMzUsMzIsNDEsNDcsMSw5OCwzNiw0NywxLDI1NSwyNDAsMCwKKzMsMTQz LDI1NSwwLDE0OSwyMDEsMjQxLDE5MSwyNTQsMjQyLDEyNCwyNTIsMjI3LDI1NSwyNDAsMCw4Nyw3 OSwwLDI1NSwyNDAsCiswLDE5NCw2MywyNTQsMTc3LDYzLDI1NCwxNywwLAorfTsKKyNlbHNlCisv KiBJZGVudGlmaWVyU3RhcnQgcHJvZHVjdGlvbiB3aXRoIEFTQ0lJIGFuZCBub24tQk1QIGV4Y2x1 ZGVkICovCisvKiBkdWtfdW5pY29kZV9pZHNfbm9hYm1wW10gKi8KKy8qCisgKiAgQXV0b21hdGlj YWxseSBnZW5lcmF0ZWQgYnkgZXh0cmFjdF9jaGFycy5weSwgZG8gbm90IGVkaXQhCisgKi8KKwor Y29uc3QgZHVrX3VpbnQ4X3QgZHVrX3VuaWNvZGVfaWRzX25vYWJtcFs2MjZdID0geworMjQ5LDE3 NiwxNzYsODAsMTExLDcsNDcsMTUsNDcsMjU0LDExLDE5NywxOTEsMCw3MiwyLDE1LDExNSw2Niwx OSw1MCw3LDIsMzQsCisyLDI0MCw2NiwyNDQsNTAsMjQ3LDE4NSwyNDksOTgsMjQxLDk5LDgsMjQx LDEyNyw1OCwyNDAsMTgyLDQ3LDMxLDI0MSwxOTEsCisyMSwxOCwyNDUsNTAsMTUsMSwyNCwyNywz NSwxNSwyLDIsMjQwLDIzOSwxNSwyNDQsMTU2LDE1LDEwLDI0MSwyNiwyMSw2LDI0MCwKKzEwMSwx MCw0LDE1LDksMjQwLDE1MiwxNzUsMzksMjQwLDgyLDEyNyw1NiwyNDIsMTAwLDE1LDQsOCwxNTks MSwyNDAsNSwxMTUsCisxOSwyNDAsOTgsOTgsNCw1MiwxNSwyLDE0LDE4LDQ3LDAsMjcsOSw4NSwx OSwyNDAsOTgsOTgsMTgsMTgsMzEsMTcsNTAsMTUsNSwKKzQ3LDIsMTMwLDM0LDI0MCw5OCw5OCwx OCw2OCwxNSw0LDE1LDEsMzEsOSwxMiwxMTUsMTksMjQwLDk4LDk4LDE4LDY4LDE1LDE2LAorMTgs NDcsMSwxNSwzLDIsODQsMzQsNTIsMTgsMiwyMCwyMCwzNiwxOTEsOCwxNSwzOCwxMTQsMzQsMjQw LDExNCwyNDAsNCwxNSwKKzEyLDM4LDMxLDE2LDUsMTE0LDM0LDI0MCwxMTQsMTQ2LDY4LDE1LDE4 LDIsMzEsMSwzMSw0LDExNCwzNCwyNDEsMTQ3LDE1LDIsCis2LDQxLDQ3LDEwLDg2LDI0MCwzNiwy NDAsMTMwLDEzMCwzLDExMSw0NCwyNDIsMiwyOSwxMTEsNDQsMTgsMywxOCwzLDcsNTAsCis5OCwz NCwyLDMsMTgsNTAsMjYsMyw2NiwxNSw3LDYzLDE4LDE1LDQ5LDExNCwyNDEsNzksMTMsNzksMTAx LDI0MSwxOTEsNiwxNSwKKzIsODUsNTIsNCwyNCwzNywyMDUsMTUsMywyNDEsOTgsNiwzLDI0MSwx NzgsMjU1LDIyNCw2MywzNSw1NCwzMiwzNSw2MywyNSwKKzM1LDYzLDE3LDM1LDU0LDMyLDM1LDYy LDQ3LDQxLDM1LDYzLDUxLDI0MSwxMjcsMCwyNDAsNDcsNzAsNTMsNzksMjU0LDIxLAorMjI3LDI0 MCwxOCwyNDAsMTY2LDI0MywxODAsMTY4LDE5NCw2MywwLDI0MCw0NywwLDI0MCw0NywwLDE5NCw0 NywxLDI0Miw3OSwKKzIxLDUsMTUsNTMsMjQ0LDEzNyw2NywyNDEsMzQsNiwyNDMsMTA3LDI0MCwy NTUsMzUsMjQwLDIyNyw3NiwyNDEsMTk3LDI0MCwKKzE3NSw0MCwyNDAsMTIyLDI0Miw5NSw2OCwx NSw3OSwyNDEsMjU1LDMsMTExLDQxLDI0MCwyMzgsMjcsMjQxLDIwNywxMiwyNDEsCis3OSwyNyw0 MywyNDEsNjcsMTQzLDgyLDUwLDUyLDI2LDI1MSwxNSw1MCwyNTUsMjI0LDgsNTMsNjMsMjIsNTMs NTUsMzIsMzIsCiszMiw0NywxNSw2MywzNywzOCwzMiw2NiwzOCw2Nyw1Myw5Miw5OCwzOCwyNDYs OTYsMjI0LDI0MCw0NCwyNDUsMTEyLDgwLDU3LAorMzIsNjgsMTEyLDMyLDMyLDM1LDQyLDUxLDEw MCw4MCwyNDAsNjMsMjUsMjU1LDIzMywxMDcsMjQxLDI0MiwyNDEsMjQyLDI0NywKKzg3LDUyLDI5 LDI0MSw5OCw2LDMsMjQyLDEzNiwxNSwyLDI0MCwxMjIsOTgsOTgsOTgsOTgsOTgsOTgsOTgsMTEx LDY2LDE1LAorMjU0LDEyLDE0NiwyNDAsMTg0LDEzMiw1Miw5NSw3MCwxMTQsNDcsNzQsMzUsMTEx LDI2LDYzLDc4LDI0MCw2MywxMSwyNDIsCisxMjcsMCwyNTUsMjI0LDI0NCwyNTUsMjQwLDAsMTM4 LDE0Myw2MCwyNTUsMjQwLDQsMTMsMjIzLDcsMjU1LDIyNywxMjcsMjQzLAorOTUsMzAsNjMsMjUz LDc5LDAsMTc3LDI0MCwxMTEsMzEsMjQwLDQ3LDE1LDYzLDY0LDI0MSwxNTIsNjMsODcsNjMsMjAs MzksCisyNDMsMjYsMzQsMzUsNDcsNywyNDAsMjU1LDM2LDI0MCwxNSwzNCwyNDMsNSw2NCwzMiwy MjMsMTIsMTkxLDcsMjQwLDE5MSwxMywKKzE0MywzMSwyNDAsMjI0LDI0MCwzNiw0MSwxODAsNDcs MjUsMjQwLDE0NiwzOSwyNDAsMTExLDcsNjQsNzksMzQsMzIsNjUsNTIsCis0OCwzMiwyNDAsMTYy LDU4LDEzMCwyMTMsNTMsNTMsMTY2LDM4LDQ3LDI3LDQxLDE5MSw5OSwyNDAsMjU1LDI1NSwwLDI2 LDE1MCwKKzIyMyw3LDk1LDMzLDI1NSwyNDAsMCwyNTUsMTQzLDI1NCw2LDMsMjQ1LDE3NSwyNCwx MDksNzAsMiwxNDYsMTk0LDY2LDIsMTgsCisxOCwyNDUsMjA3LDE5LDI1NSwyMjQsOTMsMjQwLDc5 LDQ4LDYzLDM4LDI0MSwxNzEsMjQ2LDEwMCw0NywxMTksMjQxLDExMSwxMCwKKzEyNywxMCwyMDcs NzMsNjksNTMsNTMsNTAsMCwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9TT1VS Q0VfTk9OQk1QKQorLyogSWRlbnRpZmllclN0YXJ0IHByb2R1Y3Rpb24gd2l0aCBMZXR0ZXIgYW5k IEFTQ0lJIGV4Y2x1ZGVkICovCisvKiBkdWtfdW5pY29kZV9pZHNfbV9sZXRfbm9hW10gKi8KKy8q CisgKiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgZXh0cmFjdF9jaGFycy5weSwgZG8gbm90 IGVkaXQhCisgKi8KKworY29uc3QgZHVrX3VpbnQ4X3QgZHVrX3VuaWNvZGVfaWRzX21fbGV0X25v YVs0Ml0gPSB7CisyNTUsMjQwLDAsOTQsMTgsMjU1LDIzMyw5OSwyNDEsNTEsNjMsMjU0LDIxNSwz MiwyNDAsMTg0LDI0MCwyLDI1NSwyNDAsNiw4OSwKKzI0OSwyNTUsMjQwLDQsMTQ4LDc5LDM3LDI1 NSwyMjQsMTkyLDksMTUsMTIwLDc5LDI1NSwwLDE1LDMwLDI0NSwyNDAsCit9OworI2Vsc2UKKy8q IElkZW50aWZpZXJTdGFydCBwcm9kdWN0aW9uIHdpdGggTGV0dGVyLCBBU0NJSSwgYW5kIG5vbi1C TVAgZXhjbHVkZWQgKi8KKy8qIGR1a191bmljb2RlX2lkc19tX2xldF9ub2FibXBbXSAqLworLyoK KyAqICBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBleHRyYWN0X2NoYXJzLnB5LCBkbyBub3Qg ZWRpdCEKKyAqLworCitjb25zdCBkdWtfdWludDhfdCBkdWtfdW5pY29kZV9pZHNfbV9sZXRfbm9h Ym1wWzI0XSA9IHsKKzI1NSwyNDAsMCw5NCwxOCwyNTUsMjMzLDk5LDI0MSw1MSw2MywyNTQsMjE1 LDMyLDI0MCwxODQsMjQwLDIsMjU1LDI0MCw2LDg5LAorMjQ5LDAsCit9OworI2VuZGlmCisKKyNp ZiBkZWZpbmVkKERVS19VU0VfU09VUkNFX05PTkJNUCkKKy8qIElkZW50aWZpZXJQYXJ0IHByb2R1 Y3Rpb24gd2l0aCBJZGVudGlmaWVyU3RhcnQgYW5kIEFTQ0lJIGV4Y2x1ZGVkICovCisvKiBkdWtf dW5pY29kZV9pZHBfbV9pZHNfbm9hW10gKi8KKy8qCisgKiAgQXV0b21hdGljYWxseSBnZW5lcmF0 ZWQgYnkgZXh0cmFjdF9jaGFycy5weSwgZG8gbm90IGVkaXQhCisgKi8KKworY29uc3QgZHVrX3Vp bnQ4X3QgZHVrX3VuaWNvZGVfaWRwX21faWRzX25vYVs1NDldID0geworMjU1LDIyNSwyNDMsMjQ2 LDE1LDI1NCwwLDExNiwyNTUsMTkxLDI5LDMyLDMzLDMzLDMyLDI0MywxNzAsMjQyLDQ3LDE1LDEx MiwKKzI0NSwxMTgsNTMsNDksMzUsNTcsMjQwLDE0NCwyNDEsMTUsMTEsMjQ0LDIxOCwyNDAsMjUs MjQxLDU2LDI0MSw2Nyw0MCwzNCwKKzM2LDI0MSwyMTAsMjQ2LDE3Myw0NywxNywyNDIsMTMwLDQ3 LDIsMzgsMTc3LDU3LDI0MCw1MCwyNDIsMTYwLDM4LDQ5LDUwLAorMTYwLDE3Nyw1NywyNDAsNTAs MjQyLDE2MCwzNiw4MSw1MCw2NCwyNDAsMTA3LDY0LDE5NCwyNDIsMTYwLDM5LDM0LDM0LDI0MCwK Kzk3LDU3LDE4MSwzNCwyNDIsMTYwLDM4LDQ5LDUwLDE0NSwxNzcsNTcsMjQwLDY0LDI0MiwyMTIs NjYsMzUsMTYwLDI0MCw5LAorMjQwLDM1LDI0MiwxOTgsMzQsMzUsMTI5LDE5Myw1NywyNDAsNTAs MjQyLDE2MCwzOCwzNCwzNSwxMjksMTkzLDU3LDI0MCwzNSwKKzI0MiwxNDUsMzgsMzQsMzUsMTYw LDE3Nyw1NywyNDAsNjUsMjQzLDEyOCw4NSwzMiwzOSwxMjEsNDksMjQyLDI0MCw1NCwyMTUsCis0 MSwyNDQsMTQ0LDUzLDMzLDE5Nyw1NywyNDMsMSwxMjEsMTkyLDMyLDMyLDgxLDI0Miw2Myw0LDMz LDEwNiw0NywyMCwxNjAsCisyNDUsMTExLDQsNDEsMjExLDgyLDM0LDU0LDY3LDIzNSw0NiwyNTUs MjI1LDE3OSw0NywyNTQsNDIsOTgsMjQwLDI0MiwyNDAsCisyNDEsMjQxLDEsMjQzLDQ3LDE2LDE2 MCw1NywyNDEsNTAsNTcsMjQ1LDIwOSwyNDEsNjQsMjQ2LDEzOSw5MSwxODUsMjQ3LDQxLAorMjQy LDI0NCwyNDIsMTg1LDQ3LDEzLDU4LDEyMSwyNDAsMTQxLDI0Myw2OCwyNDIsMzEsMSwyMDEsMjQw LDU2LDIxMCwyNDEsMTIsCis1NywyNDEsMjM3LDI0Miw0Nyw0LDE1MywxMjEsMjQ2LDEzMCw0Nyw1 LDgwLDgyLDUwLDI1MSwxNDMsNDIsMzYsMjU1LDIyNSwwLAorMzEsMzUsMzEsNSwxNSwxMDksMTk3 LDQsMTkxLDI1NCwxNzUsMzQsMjQ3LDI0MCwyNDUsNDcsMTYsMjU1LDIyNSwzMCw5NSw5MSwKKzMx LDI1NSwwLDEwMCwxMjEsMTU5LDU1LDUsMTU5LDE4LDMxLDY2LDMxLDI1NCwwLDY0LDY0LDgwLDI0 MCwxNDgsMjQ0LDE2MSwKKzI0Miw3OSwyLDE4NSwxMjcsMiwyNDAsOSwyNDAsMjMxLDI0MCwxODgs MjQxLDIyNywyNDIsMjksMjQwLDI1LDE5MiwxODUsMjQyLAorMjksMjA4LDE0NSw1NywyNDEsNTAs MjQyLDY0LDM0LDQ5LDk3LDMyLDI0MSwxODAsOTcsMjUzLDIzMSwzMyw1NywyNTUsMjQwLDMsCisy MjUsMTI4LDI1NSwyMjUsMjEzLDI0MCwxNSwyLDI0MCw0LDMxLDEwLDQ3LDE3OCwxNTksMjMsMTUs MjU0LDI3LDE2LDI1Myw2NCwKKzI0OCwxMTYsMjU1LDIyNCwyNSwxNTksMjU0LDY4LDE3OCwzMyw5 OSwyNDEsMTYyLDgwLDI0OSwxMTMsMjU1LDIyOCwxMyw0NywKKzM5LDIzOSwxNywxNTksMSw2Mywz MSwxNzUsMzksMTUxLDQ3LDIyLDIxMCwxNTksMzcsMTMsNDcsMzQsMjE4LDM2LDE1OSw2OCwKKzE4 MywxNSwxNDYsMTgyLDE1MSw2Myw0MiwyLDk5LDE5LDQyLDExLDE5LDEwMCw3OSwxNzgsMjQwLDQy LDE1OSw3MiwyNDAsNzcsCisxNTksMTk5LDk5LDE0MywxMywzMSw2OCwyNDAsMzEsMSwxNTksNjcs MjAxLDE1OSw2OSwyMjksMTU5LDI1NCw5LDE2OSwyNTUsCisyMjQsMTEsMTU5LDI2LDk4LDU3LDEw LDE3NSwzMiwyNDAsMTUsMjU0LDgsMTUxLDM5LDI0MCw0MSwyNDIsMTc1LDYsNDUsMjQ2LAorMTk3 LDY0LDMzLDM4LDMyLDE1MywyNTUsMjQwLDMsMTkxLDE2OSwyNDcsMTMyLDI0MiwyMTQsMjQwLDE4 NSwyNTUsMjI2LDIzNSwKKzI0MSwyMzksMiw2MywyNTUsMCw1OSwyNTQsMzEsMjU1LDAsMywxODYs NjgsODksMTE1LDExMSwxNiw2MywxMzQsNDcsMjU0LDcxLAorMjIzLDM0LDI1NSwyMjQsMjQ0LDI0 MiwxMTcsMjQyLDQxLDE1LDAsMTUsOCw2NiwyMzksMjU0LDY4LDcwLDQ3LDEsNTQsMzMsMzYsCisy NTUsMjMxLDE1MywxMTEsOTUsMTAyLDE1OSwyNTUsMTIsNiwxNTQsMjU0LDAsCit9OworI2Vsc2UK Ky8qIElkZW50aWZpZXJQYXJ0IHByb2R1Y3Rpb24gd2l0aCBJZGVudGlmaWVyU3RhcnQsIEFTQ0lJ LCBhbmQgbm9uLUJNUCBleGNsdWRlZCAqLworLyogZHVrX3VuaWNvZGVfaWRwX21faWRzX25vYWJt cFtdICovCisvKgorICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGV4dHJhY3RfY2hhcnMu cHksIGRvIG5vdCBlZGl0IQorICovCisKK2NvbnN0IGR1a191aW50OF90IGR1a191bmljb2RlX2lk cF9tX2lkc19ub2FibXBbMzU4XSA9IHsKKzI1NSwyMjUsMjQzLDI0NiwxNSwyNTQsMCwxMTYsMjU1 LDE5MSwyOSwzMiwzMywzMywzMiwyNDMsMTcwLDI0Miw0NywxNSwxMTIsCisyNDUsMTE4LDUzLDQ5 LDM1LDU3LDI0MCwxNDQsMjQxLDE1LDExLDI0NCwyMTgsMjQwLDI1LDI0MSw1NiwyNDEsNjcsNDAs MzQsCiszNiwyNDEsMjEwLDI0NiwxNzMsNDcsMTcsMjQyLDEzMCw0NywyLDM4LDE3Nyw1NywyNDAs NTAsMjQyLDE2MCwzOCw0OSw1MCwKKzE2MCwxNzcsNTcsMjQwLDUwLDI0MiwxNjAsMzYsODEsNTAs NjQsMjQwLDEwNyw2NCwxOTQsMjQyLDE2MCwzOSwzNCwzNCwyNDAsCis5Nyw1NywxODEsMzQsMjQy LDE2MCwzOCw0OSw1MCwxNDUsMTc3LDU3LDI0MCw2NCwyNDIsMjEyLDY2LDM1LDE2MCwyNDAsOSwK KzI0MCwzNSwyNDIsMTk4LDM0LDM1LDEyOSwxOTMsNTcsMjQwLDUwLDI0MiwxNjAsMzgsMzQsMzUs MTI5LDE5Myw1NywyNDAsMzUsCisyNDIsMTQ1LDM4LDM0LDM1LDE2MCwxNzcsNTcsMjQwLDY1LDI0 MywxMjgsODUsMzIsMzksMTIxLDQ5LDI0MiwyNDAsNTQsMjE1LAorNDEsMjQ0LDE0NCw1MywzMywx OTcsNTcsMjQzLDEsMTIxLDE5MiwzMiwzMiw4MSwyNDIsNjMsNCwzMywxMDYsNDcsMjAsMTYwLAor MjQ1LDExMSw0LDQxLDIxMSw4MiwzNCw1NCw2NywyMzUsNDYsMjU1LDIyNSwxNzksNDcsMjU0LDQy LDk4LDI0MCwyNDIsMjQwLAorMjQxLDI0MSwxLDI0Myw0NywxNiwxNjAsNTcsMjQxLDUwLDU3LDI0 NSwyMDksMjQxLDY0LDI0NiwxMzksOTEsMTg1LDI0Nyw0MSwKKzI0MiwyNDQsMjQyLDE4NSw0Nywx Myw1OCwxMjEsMjQwLDE0MSwyNDMsNjgsMjQyLDMxLDEsMjAxLDI0MCw1NiwyMTAsMjQxLDEyLAor NTcsMjQxLDIzNywyNDIsNDcsNCwxNTMsMTIxLDI0NiwxMzAsNDcsNSw4MCw4Miw1MCwyNTEsMTQz LDQyLDM2LDI1NSwyMjUsMCwKKzMxLDM1LDMxLDUsMTUsMTA5LDE5Nyw0LDE5MSwyNTQsMTc1LDM0 LDI0NywyNDAsMjQ1LDQ3LDE2LDI1NSwyMjUsMzAsOTUsOTEsCiszMSwyNTUsMCwxMDAsMTIxLDE1 OSw1NSw1LDE1OSwxOCwzMSw2NiwzMSwyNTQsMCw2NCw2NCw4MCwyNDAsMTQ4LDI0NCwxNjEsCisy NDIsNzksMiwxODUsMTI3LDIsMjQwLDksMjQwLDIzMSwyNDAsMTg4LDI0MSwyMjcsMjQyLDI5LDI0 MCwyNSwxOTIsMTg1LDI0MiwKKzI5LDIwOCwxNDUsNTcsMjQxLDUwLDI0Miw2NCwzNCw0OSw5Nywz MiwyNDEsMTgwLDk3LDI1MywyMzEsMzMsNTcsMjU1LDI0MCwzLAorMjI1LDEyOCwyNTUsMjI1LDIx MywyNDAsMTUsMiwyNDAsNCwzMSwxMCw0NywxNzgsMTU5LDIzLDAsCit9OworI2VuZGlmCisKKy8q CisgKiAgQ2FzZSBjb252ZXJzaW9uIHRhYmxlcyBnZW5lcmF0ZWQgdXNpbmcgdG9vbHMvZXh0cmFj dF9jYXNlY29udi5weS4KKyAqLworCisvKiBkdWtfdW5pY29kZV9jYXNlY29udl91Y1tdICovCisv KiBkdWtfdW5pY29kZV9jYXNlY29udl9sY1tdICovCisKKy8qCisgKiAgQXV0b21hdGljYWxseSBn ZW5lcmF0ZWQgYnkgZXh0cmFjdF9jYXNlY29udi5weSwgZG8gbm90IGVkaXQhCisgKi8KKworY29u c3QgZHVrX3VpbnQ4X3QgZHVrX3VuaWNvZGVfY2FzZWNvbnZfdWNbMTM4Nl0gPSB7CisxNDQsMywx MjgsMywwLDE4NCw3LDE5Miw2LDE5MiwxMTIsMzUsMjQyLDE5OSwyMjQsNjQsNzQsMTkyLDQ5LDMy LDEyOCwxNjIsCisxMjgsMTA4LDY1LDEsMTg5LDEyOSwyNTQsMTMxLDMsMTczLDMsMTM2LDYsNyw5 OCw3LDM0LDY4LDE1LDEyLDE0LDE0MCw3MiwzMCwKKzEwNCwyOCwxMTIsMzIsNjcsMCw2NSw0LDAs MTM4LDAsMTI4LDQsMSw4OCw2NSw3Niw4Myw5LDI1Miw5LDI0OCw2LDI4LDEzMSw0LAorMzMsNCw2 MiwwLDYyLDE2LDMyLDEyNCw2NCwxMjQsOTYsNDgsMjQ5LDAsMjQ5LDY0LDEyOSwyNDMsMSwyNDMs MTI5LDMsMjMyLDMsCisyMzMsMSwxMzUsMjE2LDcsMjE4LDQsMTUsMTg0LDE1LDIyMSwyLDMxLDEx NCwzMSwyMDAsOCw2MiwyMzYsNjMsMTgwLDgsMTI1LAorMjI0LDEyNywyMjQsMTYsMjUxLDIwOCwy NTUsODAsMzMsMjQ3LDE5MywyNTUsMTYwLDY3LDI0NiwzLDI0NywwLDEzNSwyNDQsNywKKzI0Niwx LDE1LDI0MCwxNSwyNDQsMiwzMywxMTIsMzMsOTYsMzIsNzMsMTYwLDczLDEwOCwxMDQsMTc2LDE5 MiwxNzYsMSwxMjEsCisxMDQsMCwxMzMsMiwxMDYsMTgzLDEsNTgsMTAsMzEsMjMyLDYzLDIyOCwz OCwxNjIsMSwxLDEsMCw0OCwyLDEwMiwyLDEwMCwxMiwKKzQsMjMyLDQsMjI4LDY0LDEwLDg4LDEw LDgxLDExMiwyMywxNjAsMjMsMTQ0LDk2LDQ4LDk2LDQ4LDY0LDEyOCwxMDQsNjQsMTA0LAorMSwx MjgsMjE4LDAsMjE3LDEzMCwxLDIwNiwxLDIwNSwxNiwzLDE5MCwzLDE4OCwzNiw3LDIyOCw3LDIy NCwxNjAsMTcsMjQsMTcsCisxNiwxNDQsMzYsMTEyLDM2LDk2LDE2MCwxMTAsMzIsMTEwLDAsMTI4 LDI0Niw2NCwyNDYsNiwyLDQ4LDEzMCw0OCwxNyw0LDEzOSwKKzQsMTM4LDU0LDksMTMyLDksMTMw LDI4LDE5LDY4LDE5LDY1LDEyOCwyNDAsOCwyNDAsNCwxNzcsMjM0LDE3LDIzNCw2LDMsMjM0LAor MzUsMjM1LDMzLDExLDI2LDExLDI1LDE5MywxNTAsNjQsMTUwLDY0LDUwLDQ0LDIzNiw0NCwyMzUs NSw3NiwxMzEsNzYsMTI4LAorOTQsMTU0LDYsMTU0LDAsMTE3LDU3LDI5LDU3LDE2LDEyMiwxMTUs NTgsMTE1LDM1LDI0NCwyMzksODQsMjM5LDMyLDE2OSwyMjMsCisyMzMsMjIzLDEzMCwyMTEsMjAw LDIxMSwyMDAsMiwxNjcsMTUxLDE2NywxNTAsMjEsNzksMTA3LDc5LDEwNCw4LDExMiwyNiwKKzIw OCwyNiwxOTIsNjQsNTYsMTYwLDU2LDEyOCwxOTIsMTEzLDEyOCwxMTMsMSwxMjgsMjQ5LDAsMjQ4 LDEzMCwyLDEyOCwxLAorMTY2LDQsNywyNDAsNywyMzgsOCwxNzcsMjA0LDE3NywyMDAsMTYsOTYs NDksMCw0OCwyMjQsMTI4LDExMCw2NCwxMTAsMSwxLAorNTEsODMsMjEzLDIsMCw0OCwzNSwxOTIs MzUsMTc2LDY0LDc3LDMyLDUwLDE5MiwxMzksNzMsMTk2LDQ5LDE5MywxMjcsNDgsMiwKKzIxMiwx NCwxMTIsMywyNTIsNSwyMjQsNCwxOTYsMSwzNiw1LDI1MiwxLDc2LDYsMCw5LDEyLDYsNzIsNiw2 OCw2LDg0LDcsMjE2LAorNiwxMDAsNiw5Niw2LDEwNCw4LDI0NCw2LDEyMCw4LDEyOCw2LDE2MCw2 LDE1Niw2LDI1Miw3LDIyMCw3LDExNiw2LDU2LDcsCisyMDQsNywxOTYsOSw2NCwxNzcsMTg4LDks NjgsMTc3LDE4MCw5LDcyLDE3NywxOTIsOSw3Niw2LDQsOSw4MCw2LDI0LDksMTAwLAorNiw2MCw5 LDEwOCw2LDY0LDksMTE0LDE1OCwxNzIsOSwxMjgsNiw3Niw5LDEzNCwxNTgsMTc2LDksMTQwLDYs ODAsOSwxNTAsCisxNTgsNTIsOSwxNjAsNiw5Miw5LDE3MiwxNzcsMTM2LDksMTc4LDE1OCwxODAs OSwxOTYsMTc3LDE4NCw5LDIwMCw2LDExNiw5LAorMjEyLDYsMTI0LDksMjQ0LDE3NywxNDQsMTAs MzAsMTU4LDE5NiwxMCwzMiw2LDE4NCwxMCwzNiw5LDE2LDEwLDQ4LDksMjAsMTAsCis3Miw2LDIy MCwxMCwxMTgsMTU4LDIwMCwxMCwxMjIsMTU4LDE5MiwxMywyMCwxNCwxMDAsMTMsMjIwLDEzLDIx NiwxNCwxNzYsCisxNCwyNCwxNSw4LDE0LDE0MCwxNSw0OCwxNCw0OCwxNSw2NCwxNCw3MiwxNSw2 OCwxNCw5NiwxNSw4NCwxNCwxNTIsMTUsODgsCisxNCwxMjgsMTUsOTIsMTUsNjAsMTUsMTkyLDE0 LDEwNCwxNSwxOTYsMTQsMTMyLDE1LDIwMCwxNSwyMjgsMTUsMjA0LDEzLDI1MiwKKzE1LDIxMiwx NCw4NCwxOSw2MCwxOSwwLDExNCwwLDE2LDcyLDExNCw0LDE2LDgwLDExNCw4LDE2LDEyMCwxMTQs MjAsMTYsMTM2LAorMTE0LDI0LDE2LDE2OCwxMTQsMjgsMTcsMTM2LDExNCwzNCwxNTMsNDAsMTE3 LDIzMCwxNTcsMjQ0LDExNywyNDQsMTc3LDE0MCwKKzEyMiwxMDgsMTIxLDEyOCwxMjYsMjQ4LDE0 LDEwMCwxMjcsMTQ4LDEyNywxNzYsMTMzLDU2LDEzMiwyMDAsMTM0LDE2LDEzNCwKKzEyLDE3Nywx MzIsMTc3LDEyOCwxNzcsMTQ4LDgsMjMyLDE3NywxNTIsOCwyNDgsMTc5LDIwNCwxNzksMjAyLDE1 OCw1MCwxNTgsCis0NiwxNzMsNzgsMTU4LDIwNyw0OCw2LDI1MiwwLDE2NiwwLDE2NiwyLDE0Nywx LDk0LDAsMzksMCwyNDgsNjQsOSw2NCw5NywKKzEyOCwxMTQsMjQsMjgsMjAwLDI0LDY0LDI0LDgs MjksMTM0LDcsNzQsNiwxNiw2LDIsMTEsMTUsMiwxNTQsMTMwLDE2OSwxNSwKKzc1LDY0LDksMCwx MDIsMzUsMjEwLDI0MCwyLDE2MCwyNCw2NCwyNDQsMTk2LDAsMTc0LDYsMjAsNjEsNTEsMCw0NCwx MjksMTMzLAorMTUsNzcsNjQsOCwzMiw4NywxOTUsMjM0LDE2LDI5LDQwLDI0LDE1MiwyNTAsMTUw LDcsNzQsNiwzOCw2LDAsNjIsMTY5LDEyOSwKKzIxMCwxMjksMTM3LDEyOSwxMjgsMTQzLDE3MSw5 NiwxMTYsMTYwLDk4LDk2LDEwNCw2NywyNDAsMTYsMjQ4LDY0LDI4LDIwMCwKKzI1MiwxMiw2Miwx OCw3LDUwLDYzLDUsMTUsMTMzLDEsMjA0LDE0MywxOTMsMTk1LDIyNSw5NiwxMTUsMzUsMjQwLDE0 NCwyNDgsCis5NiwyOCwyMDAsMjUyLDQ0LDYyLDI2LDcsNTAsNjMsMTMsMTUsMTM1LDEsMjA0LDE0 MywxOTUsMTk1LDIyNSwyMjQsMTE1LDM1LAorMjQxLDE2LDI0OCw2NCwyOCwyMDAsMjUyLDc2LDYy LDE4LDcsNTAsNjMsMjEsMTUsMTMzLDEsMjA0LDE0MywxOTcsMTk1LDIyNSwKKzk2LDExNSwzNSwy NDEsMTQ0LDI0OCw5NiwyOCwyMDAsMjUyLDEwOCw2MiwyNiw3LDUwLDYzLDI5LDE1LDEzNSwxLDIw NCwxNDMsCisxOTksMTk1LDIyNSwyMjQsMTE1LDM1LDI0MiwxNiwyNDksNjQsMjgsMjAwLDI1Miwx NDAsNjIsODIsNyw1MCw2MywzNywxNSwKKzE0OSwxLDIwNCwxNDMsMjAxLDE5NSwyMjksOTYsMTE1 LDM1LDI0MiwxNDQsMjQ5LDk2LDI4LDIwMCwyNTIsMTcyLDYyLDkwLDcsCis1MCw2Myw0NSwxNSwx NTEsMSwyMDQsMTQzLDIwMywxOTUsMjI5LDIyNCwxMTUsMzUsMjQzLDE2LDI0OSw2NCwyOCwyMDAs MjUyLAorMjA0LDYyLDgyLDcsNTAsNjMsNTMsMTUsMTQ5LDEsMjA0LDE0MywyMDUsMTk1LDIyOSw5 NiwxMTUsMzUsMjQzLDE0NCwyNDksOTYsCisyOCwyMDAsMjUyLDIzNiw2Miw5MCw3LDUwLDYzLDYx LDE1LDE1MSwxLDIwNCwxNDMsMjA3LDE5NSwyMjksMjI0LDExNSwzNSwKKzI0NCwxNiwyNTEsNjQs MjgsMjAwLDI1MywxMiw2MiwyMTAsNyw1MCw2Myw2OSwxNSwxODEsMSwyMDQsMTQzLDIwOSwxOTUs MjM3LAorOTYsMTE1LDM1LDI0NCwxNDQsMjUxLDk2LDI4LDIwMCwyNTMsNDQsNjIsMjE4LDcsNTAs NjMsNzcsMTUsMTgzLDEsMjA0LDE0MywKKzIxMSwxOTUsMjM3LDIyNCwxMTUsMzUsMjQ1LDE2LDI1 MSw2NCwyOCwyMDAsMjUzLDc2LDYyLDIxMCw3LDUwLDYzLDg1LDE1LAorMTgxLDEsMjA0LDE0Mywy MTMsMTk1LDIzNyw5NiwxMTUsMzUsMjQ1LDE0NCwyNTEsOTYsMjgsMjAwLDI1MywxMDgsNjIsMjE4 LDcsCis1MCw2Myw5MywxNSwxODMsMSwyMDQsMTQzLDIxNSwxOTUsMjM3LDIyNCwxMTUsMzUsMjQ2 LDgwLDI1MywyMDgsMjgsMjAwLDI1MywKKzE1Niw3LDM0LDcsNTAsNjMsMTA1LDEsMTk1LDEsMjA0 LDE0MywyMTksNjQsMTE0LDMyLDEwNCw2NywyNDYsMjQ4LDI4LDEzNiwKKzI2LDE2LDI4LDIwMCwy NTMsMjI4LDcsMzQsNyw1MCw2MywxMzMsMTUsMjI5LDEsMjA0LDE0MywyMjUsMTkyLDExNCwyMjQs MTE1LAorMzUsMjQ4LDE0NCwyOCw3MiwyOCwyMDAsMjU0LDUyLDcsNDYsNiwxMzIsNjMsMTQzLDEy OSwyMDMsMTI5LDE2MSwxLDIwNCwxNDMsCisyMzAsNjQsMTE0LDIyNCwxMTUsMzUsMjUwLDg4LDI4 LDIwMCwyNCw2NCwyNCwwLDI1NCwxNTgsNyw1MCw2LDE2LDYsMiw2MywKKzE3MywxLDIwNCwxMjks MTYxLDE1LDIzNSwyMjQsMTE1LDMyLDk3LDAsMTA0LDY3LDI1Miw4OCwyOSw0MCwyNCw2NCwyNCww LAorMjU1LDMwLDcsNzQsNiwxNiw2LDIsNjMsMjAxLDEsMjA4LDEyOSwxMzcsMTQzLDI0Myw2NCwx MTYsMTYwLDEwNCw2NywyNTIsCisyNDgsMjksNDAsMjQsNjQsMjYsMTYsMjU1LDE0OCw2MywyNDQs Nyw1MCw2MywyMzEsMSwyMTIsMTI5LDIwNCwxNDMsMjUwLDY0LAorMTEzLDIyNCwxMTUsMzUsMjU0 LDIwOCwyOSw3MiwyNiwxNiwyNTUsMTkwLDcsODIsNiwxMzIsNyw1MCw2MywyNDksMSwyMTIsCisx MjksMjA0LDI1MywxMjgsNjQsOCwxOTIsOCwyMjMsOTYsNDgsMiw0OCwyLDc5LDIxNiwyMCwwLDE0 MCwwLDE1MywyNDYsNywKKzEyOCwzNSwwLDM1LDAsMzYsMjUzLDEzMCw5Niw4LDE5Miw4LDE5Miw5 LDE1OSw5NiwxNzYsMiwxNTIsMiwxNjcsMjE2LDUyLDAsCisxNjYsMCwxNjksMjQ2LDM5LDIsMTYy LDIsMTYzLDEyNSwxMzgsNjQsMTY4LDEyOCwxNjYsMTkxLDk4LDE3Niw0MiwzMiw0MSwKKzIyMywy MTYsMTgwLDEwLDE1NiwxMCwxNDEsMjQ2LDQ3LDIsMTYyLDIsMTU4LDEyOCwKK307Citjb25zdCBk dWtfdWludDhfdCBkdWtfdW5pY29kZV9jYXNlY29udl9sY1s2ODBdID0geworMTUyLDMsMCwzLDEy OCwxODQsNiwxOTIsNywxOTIsMTEyLDI0LDE0NCwzNyw5Niw2NCw1NCwzMiw4MSw2NCwxMjgsMjI2 LDAsCisyMzUsNjUsMTI5LDE5OSwxLDIzMCwxMzAsMywxNDUsMywxNzcsMzQsNyw3MCw3LDEzNCwz NiwxNSwyNDQsMTMsMjM2LDI0LDMyLAorMCwzNCwxMjksMCw2NSwwLDY3LDQsMCwxNjYsMzIsMTcy LDQxLDEzMiw0MCwxMSw2NCwxOSw5LDIwOCw4NSwxODQsODAsMTksCisyNDAsMTksMjQ4LDEyLDYy LDE2LDYyLDAsMzIsMTI0LDk2LDEyNCw2NCw0OCwyNDksNjQsMjQ5LDAsMTI5LDI0MywxMjksMjQz LAorMSwzLDIzMywzLDIzMiwxLDEzNSwyMTgsNywyMTYsNCwxNSwxOTYsMTUsMTkyLDgsMzEsMTUy LDMxLDE0NCwxNiw2Myw4MCw2MywKKzY0LDMyLDEyNiwyMjQsMTI2LDE5MiwxNiwyNTMsMjA4LDI1 MSwxMjgsMzMsMjUyLDEyOSwyNDcsMzIsMTMxLDI1MSwzLDI1MCwwLAorMTM1LDI0NiwxMzUsMjIx LDEyOSwxNSwyNDQsMTUsMjQwLDIsMzEsMjM0LDMxLDEyMiw0LDYzLDI0MCw2MiwyNDAsOCwxMjcs CisyMzIsMTI1LDI0MCwxNywxMSwxLDExLDEyOSwyLDc1LDk4LDc3LDMsNjksMTI4LDUsMTM0LDEx LDIwMywzMSwxMjgsMTQzLDE5MywKKzEyNywxNDQsMjU1LDE2MCwxNTQsMTQwLDQsMCw0LDQsMTky LDksMTQ0LDksMTUyLDQ4LDE5LDE0NCwxOSwxNjEsMCw0MSw2NCwKKzQxLDEwMSwxOTIsOTQsNjQs OTQsMTI5LDEyOCwxOTMsMCwxOTMsMTMwLDEsMTYwLDEsMTYxLDYsMywxMDIsMywxMDQsOCw3LDQ0 LAorNyw0OCw3MiwxNCwyNDAsMTQsMjQ4LDE0NCwzMSwzMiwzMSw0OCw2NCw2MywwLDYzLDM3LDAs MTM2LDEyOCwxMzYsMTk2LDEyOSwKKzM1LDEsMzUsMTMzLDMsMTEyLDMsMTEzLDQsNywxNzYsNywx NzgsNDgsMTcsMTI4LDE3LDEzMiwxMzYsMzYsODAsMzYsODksMTc2LAorNzYsMTYsNzYsMzIsMjI0 LDE1NCwwLDE1NCw0NCw3LDEyOCw3LDEyOCwxMDEsMTQzLDgwLDE1LDgwLDE3NiwzMSw4OSwzMSw4 MSwKKzgsODgsMjA2LDg4LDIwOCwxMiwxNzgsMCwxNzgsNSwxNDUsMTAzLDg5LDEwMyw5Niw0Miwx MDAsMTAsMTAwLDE4LDI0NCwyMDgsCisyMCwyMDgsMzUsMTY5LDIwMCwxNjksMjAwLDE5NSwyMTEs MTUzLDgzLDE1MywxNTksMTY3LDEyMSwxNjcsMTIyLDUsNzgsMjUzLAorNzgsMjU0LDIyLDE1OCw2 NiwxNTgsNjgsMjEsNjAsMTgxLDYwLDE4NCwxNzAsMTIzLDc0LDEyMyw4MCw2NywwLDIxMSwxLDY0 LDIsCisxLDE3MiwxLDE3Myw0LDMsMTM2LDMsMTQwLDEyLDcsMjAsNywyNCwxNiwzMSwxODQsMzEs MTkyLDM0LDE5OSwzNCwxOTksNDgsCis2NSwxMjgsMTk1LDEyOCwxOTYsMiwxLDE4NCwxLDE4NSw1 LDc5LDg0LDQsMjA0LDgsMCwxOTIsMTAxLDEyOCwxNTQsNjUsMSwyOSwKKzEyOSwzMCwyLDE2LDE5 OSw0NSwzOSw1LDI1MSwyNDAsMjMsMTI4LDE1LDI0MCwyNCwxNiwzNyw0OCwyNCw5NiwzNyw2NCwy NCwKKzIyNCwyOSwyMDgsMjQsMjQwLDM3LDE0NCwyNSwwLDM3LDE3NiwyNSwxNiwyNSwzMiwyNSw0 OCwzOCwwLDI1LDY0LDM4LDQ4LDI1LAorMTEyLDM4LDEyOCwyNSwxMjgsMjUsMTQ0LDI1LDIwOCwz OSwzMiwyNSwyNDAsMzksODAsMjYsMTEyLDI2LDEyOCwyNiwyMjQsNDAsCisxMjgsMjcsMTEyLDQx LDMyLDMxLDE2LDMxLDQ4LDMxLDk2LDI1LDgwLDMxLDExMiwyNywyNDAsMzQsMCwyNSwyMjQsMzUs MTYyLAorMTk4LDgwLDM1LDIwOCwyNSwxNjAsMzUsMjI2LDE5OCw5NiwzNiw0OCwyNCwwLDM2LDY0 LDQwLDE0NCwzNiw4MCw0MCwxOTIsNTUsCis5Niw1NSwxMTIsNTUsMjQwLDYzLDQ4LDU2LDk2LDU4 LDE5Miw1NiwxOTIsNjAsMTkyLDYwLDI0MCw2MSwxMTIsNjMsNjQsNTksCisxMjgsNjMsMTQ0LDYz LDMyLDc2LDAsNzYsMjQxLDIzMywyMjQsMTMsMjQxLDI1MSwxOTMsMjUxLDQ5LDI1MiwxOTMsMjUy LDQ5LAorMjU0LDE5MywyNTQsODEsMjU1LDE5MywyNTUsNTAsMTgsOTYsNjAsMTQ2LDE4LDE2MCw2 LDE3OCwxOCwxNzYsMTQsODIsMTksMzQsCisyMCwyMjYsMjQsNTAsMjQsNjYsMTk4LDIsMTk4LDE4 LDE5OCwzMiwzOCwxNzgsMTk4LDQ5LDIxNSwyMTAsMTk4LDY0LDM5LDIxMCwKKzE5OCwyMDgsMzcs MTgsMTk4LDIyNCwzOSwxOCwxOTgsMjQwLDM3LDIsMTk5LDAsMzcsMzQsMjA3LDM0LDIwNyw1OCwx MTksMjA5LAorMjE1LDE1NCwxMjAsMTg2LDEyMCwyMDIsMTIwLDIwOCwzOCw5MCwxMjIsMTc2LDM3 LDIwMiwxMjIsMTkyLDM4LDI2LDEyMiwyMDgsCiszOCwyMDIsMTIzLDAsNDEsMjM0LDEyMywxNiw0 MCwxMjIsMTIzLDMyLDQxLDIxOCwxMjMsNTgsMTgxLDQ4LDMyLDM4LDE2LDMsCis3MiwyNCw1NiwK K307CisKKyNpZiBkZWZpbmVkKERVS19VU0VfUkVHRVhQX0NBTk9OX1dPUktBUk9VTkQpCisvKgor ICogIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGV4dHJhY3RfY2FzZWNvbnYucHksIGRvIG5v dCBlZGl0IQorICovCisKK2NvbnN0IGR1a191aW50MTZfdCBkdWtfdW5pY29kZV9yZV9jYW5vbl9s b29rdXBbNjU1MzZdID0geworMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwx NiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywKKzI4LDI5LDMwLDMxLDMyLDMzLDM0 LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLAor NTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEs NzIsNzMsNzQsNzUsNzYsNzcsCis3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5 MCw5MSw5Miw5Myw5NCw5NSw5Niw2NSw2Niw2Nyw2OCw2OSw3MCwKKzcxLDcyLDczLDc0LDc1LDc2 LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDEyMywxMjQsMTI1LAor MTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwx NDAsMTQxLDE0MiwxNDMsCisxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMs MTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwKKzE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3 LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LAorMTgwLDky NCwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1 LDE5NiwxOTcsCisxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIw OSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwKKzIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwy MjMsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLAorMjAyLDIwMywyMDQs MjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDI0NywyMTYsMjE3LDIxOCwy MTksCisyMjAsMjIxLDIyMiwzNzYsMjU2LDI1NiwyNTgsMjU4LDI2MCwyNjAsMjYyLDI2MiwyNjQs MjY0LDI2NiwyNjYsMjY4LDI2OCwKKzI3MCwyNzAsMjcyLDI3MiwyNzQsMjc0LDI3NiwyNzYsMjc4 LDI3OCwyODAsMjgwLDI4MiwyODIsMjg0LDI4NCwyODYsMjg2LAorMjg4LDI4OCwyOTAsMjkwLDI5 MiwyOTIsMjk0LDI5NCwyOTYsMjk2LDI5OCwyOTgsMzAwLDMwMCwzMDIsMzAyLDMwNCwzMDUsCisz MDYsMzA2LDMwOCwzMDgsMzEwLDMxMCwzMTIsMzEzLDMxMywzMTUsMzE1LDMxNywzMTcsMzE5LDMx OSwzMjEsMzIxLDMyMywKKzMyMywzMjUsMzI1LDMyNywzMjcsMzI5LDMzMCwzMzAsMzMyLDMzMiwz MzQsMzM0LDMzNiwzMzYsMzM4LDMzOCwzNDAsMzQwLAorMzQyLDM0MiwzNDQsMzQ0LDM0NiwzNDYs MzQ4LDM0OCwzNTAsMzUwLDM1MiwzNTIsMzU0LDM1NCwzNTYsMzU2LDM1OCwzNTgsCiszNjAsMzYw LDM2MiwzNjIsMzY0LDM2NCwzNjYsMzY2LDM2OCwzNjgsMzcwLDM3MCwzNzIsMzcyLDM3NCwzNzQs Mzc2LDM3NywKKzM3NywzNzksMzc5LDM4MSwzODEsMzgzLDU3OSwzODUsMzg2LDM4NiwzODgsMzg4 LDM5MCwzOTEsMzkxLDM5MywzOTQsMzk1LAorMzk1LDM5NywzOTgsMzk5LDQwMCw0MDEsNDAxLDQw Myw0MDQsNTAyLDQwNiw0MDcsNDA4LDQwOCw1NzMsNDExLDQxMiw0MTMsCis1NDQsNDE1LDQxNiw0 MTYsNDE4LDQxOCw0MjAsNDIwLDQyMiw0MjMsNDIzLDQyNSw0MjYsNDI3LDQyOCw0MjgsNDMwLDQz MSwKKzQzMSw0MzMsNDM0LDQzNSw0MzUsNDM3LDQzNyw0MzksNDQwLDQ0MCw0NDIsNDQzLDQ0NCw0 NDQsNDQ2LDUwMyw0NDgsNDQ5LAorNDUwLDQ1MSw0NTIsNDUyLDQ1Miw0NTUsNDU1LDQ1NSw0NTgs NDU4LDQ1OCw0NjEsNDYxLDQ2Myw0NjMsNDY1LDQ2NSw0NjcsCis0NjcsNDY5LDQ2OSw0NzEsNDcx LDQ3Myw0NzMsNDc1LDQ3NSwzOTgsNDc4LDQ3OCw0ODAsNDgwLDQ4Miw0ODIsNDg0LDQ4NCwKKzQ4 Niw0ODYsNDg4LDQ4OCw0OTAsNDkwLDQ5Miw0OTIsNDk0LDQ5NCw0OTYsNDk3LDQ5Nyw0OTcsNTAw LDUwMCw1MDIsNTAzLAorNTA0LDUwNCw1MDYsNTA2LDUwOCw1MDgsNTEwLDUxMCw1MTIsNTEyLDUx NCw1MTQsNTE2LDUxNiw1MTgsNTE4LDUyMCw1MjAsCis1MjIsNTIyLDUyNCw1MjQsNTI2LDUyNiw1 MjgsNTI4LDUzMCw1MzAsNTMyLDUzMiw1MzQsNTM0LDUzNiw1MzYsNTM4LDUzOCwKKzU0MCw1NDAs NTQyLDU0Miw1NDQsNTQ1LDU0Niw1NDYsNTQ4LDU0OCw1NTAsNTUwLDU1Miw1NTIsNTU0LDU1NCw1 NTYsNTU2LAorNTU4LDU1OCw1NjAsNTYwLDU2Miw1NjIsNTY0LDU2NSw1NjYsNTY3LDU2OCw1Njks NTcwLDU3MSw1NzEsNTczLDU3NCwxMTM5MCwKKzExMzkxLDU3Nyw1NzcsNTc5LDU4MCw1ODEsNTgy LDU4Miw1ODQsNTg0LDU4Niw1ODYsNTg4LDU4OCw1OTAsNTkwLDExMzc1LAorMTEzNzMsMTEzNzYs Mzg1LDM5MCw1OTcsMzkzLDM5NCw2MDAsMzk5LDYwMiw0MDAsNDI5MjNMLDYwNSw2MDYsNjA3LDQw MywKKzQyOTI0TCw2MTAsNDA0LDYxMiw0Mjg5M0wsNDI5MjJMLDYxNSw0MDcsNDA2LDQyOTI2TCwx MTM2Miw0MjkyNUwsNjIxLDYyMiwKKzQxMiw2MjQsMTEzNzQsNDEzLDYyNyw2MjgsNDE1LDYzMCw2 MzEsNjMyLDYzMyw2MzQsNjM1LDYzNiwxMTM2NCw2MzgsNjM5LAorNDIyLDY0MSw2NDIsNDI1LDY0 NCw2NDUsNjQ2LDQyOTI5TCw0MzAsNTgwLDQzMyw0MzQsNTgxLDY1Myw2NTQsNjU1LDY1Niw2NTcs Cis0MzksNjU5LDY2MCw2NjEsNjYyLDY2Myw2NjQsNjY1LDY2Niw2NjcsNjY4LDQyOTMwTCw0Mjky OEwsNjcxLDY3Miw2NzMsNjc0LAorNjc1LDY3Niw2NzcsNjc4LDY3OSw2ODAsNjgxLDY4Miw2ODMs Njg0LDY4NSw2ODYsNjg3LDY4OCw2ODksNjkwLDY5MSw2OTIsCis2OTMsNjk0LDY5NSw2OTYsNjk3 LDY5OCw2OTksNzAwLDcwMSw3MDIsNzAzLDcwNCw3MDUsNzA2LDcwNyw3MDgsNzA5LDcxMCwKKzcx MSw3MTIsNzEzLDcxNCw3MTUsNzE2LDcxNyw3MTgsNzE5LDcyMCw3MjEsNzIyLDcyMyw3MjQsNzI1 LDcyNiw3MjcsNzI4LAorNzI5LDczMCw3MzEsNzMyLDczMyw3MzQsNzM1LDczNiw3MzcsNzM4LDcz OSw3NDAsNzQxLDc0Miw3NDMsNzQ0LDc0NSw3NDYsCis3NDcsNzQ4LDc0OSw3NTAsNzUxLDc1Miw3 NTMsNzU0LDc1NSw3NTYsNzU3LDc1OCw3NTksNzYwLDc2MSw3NjIsNzYzLDc2NCwKKzc2NSw3NjYs NzY3LDc2OCw3NjksNzcwLDc3MSw3NzIsNzczLDc3NCw3NzUsNzc2LDc3Nyw3NzgsNzc5LDc4MCw3 ODEsNzgyLAorNzgzLDc4NCw3ODUsNzg2LDc4Nyw3ODgsNzg5LDc5MCw3OTEsNzkyLDc5Myw3OTQs Nzk1LDc5Niw3OTcsNzk4LDc5OSw4MDAsCis4MDEsODAyLDgwMyw4MDQsODA1LDgwNiw4MDcsODA4 LDgwOSw4MTAsODExLDgxMiw4MTMsODE0LDgxNSw4MTYsODE3LDgxOCwKKzgxOSw4MjAsODIxLDgy Miw4MjMsODI0LDgyNSw4MjYsODI3LDgyOCw4MjksODMwLDgzMSw4MzIsODMzLDgzNCw4MzUsODM2 LAorOTIxLDgzOCw4MzksODQwLDg0MSw4NDIsODQzLDg0NCw4NDUsODQ2LDg0Nyw4NDgsODQ5LDg1 MCw4NTEsODUyLDg1Myw4NTQsCis4NTUsODU2LDg1Nyw4NTgsODU5LDg2MCw4NjEsODYyLDg2Myw4 NjQsODY1LDg2Niw4NjcsODY4LDg2OSw4NzAsODcxLDg3MiwKKzg3Myw4NzQsODc1LDg3Niw4Nzcs ODc4LDg3OSw4ODAsODgwLDg4Miw4ODIsODg0LDg4NSw4ODYsODg2LDg4OCw4ODksODkwLAorMTAy MSwxMDIyLDEwMjMsODk0LDg5NSw4OTYsODk3LDg5OCw4OTksOTAwLDkwMSw5MDIsOTAzLDkwNCw5 MDUsOTA2LDkwNyw5MDgsCis5MDksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgs OTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiwKKzkyNyw5MjgsOTI5LDkzMCw5MzEsOTMy LDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5MDIsOTA0LDkwNSw5MDYsOTQ0LAorOTEzLDkx NCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4 LDkyOSw5MzEsCis5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5MDgsOTEwLDkx MSw5NzUsOTE0LDkyMCw5NzgsOTc5LDk4MCwKKzkzNCw5MjgsOTc1LDk4NCw5ODQsOTg2LDk4Niw5 ODgsOTg4LDk5MCw5OTAsOTkyLDk5Miw5OTQsOTk0LDk5Niw5OTYsOTk4LAorOTk4LDEwMDAsMTAw MCwxMDAyLDEwMDIsMTAwNCwxMDA0LDEwMDYsMTAwNiw5MjIsOTI5LDEwMTcsODk1LDEwMTIsOTE3 LDEwMTQsCisxMDE1LDEwMTUsMTAxNywxMDE4LDEwMTgsMTAyMCwxMDIxLDEwMjIsMTAyMywxMDI0 LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwKKzEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1 LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LAorMTA0NSwxMDQ2 LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1Nywx MDU4LDEwNTksCisxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwx MDY5LDEwNzAsMTA3MSwxMDQwLDEwNDEsMTA0MiwKKzEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0Nywx MDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LAorMTA1OCwx MDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3 MCwxMDcxLDEwMjQsCisxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAz MywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwKKzExMjAsMTEyMCwxMTIyLDExMjIsMTEy NCwxMTI0LDExMjYsMTEyNiwxMTI4LDExMjgsMTEzMCwxMTMwLDExMzIsMTEzMiwxMTM0LAorMTEz NCwxMTM2LDExMzYsMTEzOCwxMTM4LDExNDAsMTE0MCwxMTQyLDExNDIsMTE0NCwxMTQ0LDExNDYs MTE0NiwxMTQ4LDExNDgsCisxMTUwLDExNTAsMTE1MiwxMTUyLDExNTQsMTE1NSwxMTU2LDExNTcs MTE1OCwxMTU5LDExNjAsMTE2MSwxMTYyLDExNjIsMTE2NCwKKzExNjQsMTE2NiwxMTY2LDExNjgs MTE2OCwxMTcwLDExNzAsMTE3MiwxMTcyLDExNzQsMTE3NCwxMTc2LDExNzYsMTE3OCwxMTc4LAor MTE4MCwxMTgwLDExODIsMTE4MiwxMTg0LDExODQsMTE4NiwxMTg2LDExODgsMTE4OCwxMTkwLDEx OTAsMTE5MiwxMTkyLDExOTQsCisxMTk0LDExOTYsMTE5NiwxMTk4LDExOTgsMTIwMCwxMjAwLDEy MDIsMTIwMiwxMjA0LDEyMDQsMTIwNiwxMjA2LDEyMDgsMTIwOCwKKzEyMTAsMTIxMCwxMjEyLDEy MTIsMTIxNCwxMjE0LDEyMTYsMTIxNywxMjE3LDEyMTksMTIxOSwxMjIxLDEyMjEsMTIyMywxMjIz LAorMTIyNSwxMjI1LDEyMjcsMTIyNywxMjI5LDEyMjksMTIxNiwxMjMyLDEyMzIsMTIzNCwxMjM0 LDEyMzYsMTIzNiwxMjM4LDEyMzgsCisxMjQwLDEyNDAsMTI0MiwxMjQyLDEyNDQsMTI0NCwxMjQ2 LDEyNDYsMTI0OCwxMjQ4LDEyNTAsMTI1MCwxMjUyLDEyNTIsMTI1NCwKKzEyNTQsMTI1NiwxMjU2 LDEyNTgsMTI1OCwxMjYwLDEyNjAsMTI2MiwxMjYyLDEyNjQsMTI2NCwxMjY2LDEyNjYsMTI2OCwx MjY4LAorMTI3MCwxMjcwLDEyNzIsMTI3MiwxMjc0LDEyNzQsMTI3NiwxMjc2LDEyNzgsMTI3OCwx MjgwLDEyODAsMTI4MiwxMjgyLDEyODQsCisxMjg0LDEyODYsMTI4NiwxMjg4LDEyODgsMTI5MCwx MjkwLDEyOTIsMTI5MiwxMjk0LDEyOTQsMTI5NiwxMjk2LDEyOTgsMTI5OCwKKzEzMDAsMTMwMCwx MzAyLDEzMDIsMTMwNCwxMzA0LDEzMDYsMTMwNiwxMzA4LDEzMDgsMTMxMCwxMzEwLDEzMTIsMTMx MiwxMzE0LAorMTMxNCwxMzE2LDEzMTYsMTMxOCwxMzE4LDEzMjAsMTMyMCwxMzIyLDEzMjIsMTMy NCwxMzI0LDEzMjYsMTMyNiwxMzI4LDEzMjksCisxMzMwLDEzMzEsMTMzMiwxMzMzLDEzMzQsMTMz NSwxMzM2LDEzMzcsMTMzOCwxMzM5LDEzNDAsMTM0MSwxMzQyLDEzNDMsMTM0NCwKKzEzNDUsMTM0 NiwxMzQ3LDEzNDgsMTM0OSwxMzUwLDEzNTEsMTM1MiwxMzUzLDEzNTQsMTM1NSwxMzU2LDEzNTcs MTM1OCwxMzU5LAorMTM2MCwxMzYxLDEzNjIsMTM2MywxMzY0LDEzNjUsMTM2NiwxMzY3LDEzNjgs MTM2OSwxMzcwLDEzNzEsMTM3MiwxMzczLDEzNzQsCisxMzc1LDEzNzYsMTMyOSwxMzMwLDEzMzEs MTMzMiwxMzMzLDEzMzQsMTMzNSwxMzM2LDEzMzcsMTMzOCwxMzM5LDEzNDAsMTM0MSwKKzEzNDIs MTM0MywxMzQ0LDEzNDUsMTM0NiwxMzQ3LDEzNDgsMTM0OSwxMzUwLDEzNTEsMTM1MiwxMzUzLDEz NTQsMTM1NSwxMzU2LAorMTM1NywxMzU4LDEzNTksMTM2MCwxMzYxLDEzNjIsMTM2MywxMzY0LDEz NjUsMTM2NiwxNDE1LDE0MTYsMTQxNywxNDE4LDE0MTksCisxNDIwLDE0MjEsMTQyMiwxNDIzLDE0 MjQsMTQyNSwxNDI2LDE0MjcsMTQyOCwxNDI5LDE0MzAsMTQzMSwxNDMyLDE0MzMsMTQzNCwKKzE0 MzUsMTQzNiwxNDM3LDE0MzgsMTQzOSwxNDQwLDE0NDEsMTQ0MiwxNDQzLDE0NDQsMTQ0NSwxNDQ2 LDE0NDcsMTQ0OCwxNDQ5LAorMTQ1MCwxNDUxLDE0NTIsMTQ1MywxNDU0LDE0NTUsMTQ1NiwxNDU3 LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2MiwxNDYzLDE0NjQsCisxNDY1LDE0NjYsMTQ2NywxNDY4 LDE0NjksMTQ3MCwxNDcxLDE0NzIsMTQ3MywxNDc0LDE0NzUsMTQ3NiwxNDc3LDE0NzgsMTQ3OSwK KzE0ODAsMTQ4MSwxNDgyLDE0ODMsMTQ4NCwxNDg1LDE0ODYsMTQ4NywxNDg4LDE0ODksMTQ5MCwx NDkxLDE0OTIsMTQ5MywxNDk0LAorMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwx NTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksCisxNTEwLDE1MTEsMTUxMiwx NTEzLDE1MTQsMTUxNSwxNTE2LDE1MTcsMTUxOCwxNTE5LDE1MjAsMTUyMSwxNTIyLDE1MjMsMTUy NCwKKzE1MjUsMTUyNiwxNTI3LDE1MjgsMTUyOSwxNTMwLDE1MzEsMTUzMiwxNTMzLDE1MzQsMTUz NSwxNTM2LDE1MzcsMTUzOCwxNTM5LAorMTU0MCwxNTQxLDE1NDIsMTU0MywxNTQ0LDE1NDUsMTU0 NiwxNTQ3LDE1NDgsMTU0OSwxNTUwLDE1NTEsMTU1MiwxNTUzLDE1NTQsCisxNTU1LDE1NTYsMTU1 NywxNTU4LDE1NTksMTU2MCwxNTYxLDE1NjIsMTU2MywxNTY0LDE1NjUsMTU2NiwxNTY3LDE1Njgs MTU2OSwKKzE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1Nzks MTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LAorMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAs MTU5MSwxNTkyLDE1OTMsMTU5NCwxNTk1LDE1OTYsMTU5NywxNTk4LDE1OTksCisxNjAwLDE2MDEs MTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2 MTMsMTYxNCwKKzE2MTUsMTYxNiwxNjE3LDE2MTgsMTYxOSwxNjIwLDE2MjEsMTYyMiwxNjIzLDE2 MjQsMTYyNSwxNjI2LDE2MjcsMTYyOCwxNjI5LAorMTYzMCwxNjMxLDE2MzIsMTYzMywxNjM0LDE2 MzUsMTYzNiwxNjM3LDE2MzgsMTYzOSwxNjQwLDE2NDEsMTY0MiwxNjQzLDE2NDQsCisxNjQ1LDE2 NDYsMTY0NywxNjQ4LDE2NDksMTY1MCwxNjUxLDE2NTIsMTY1MywxNjU0LDE2NTUsMTY1NiwxNjU3 LDE2NTgsMTY1OSwKKzE2NjAsMTY2MSwxNjYyLDE2NjMsMTY2NCwxNjY1LDE2NjYsMTY2NywxNjY4 LDE2NjksMTY3MCwxNjcxLDE2NzIsMTY3MywxNjc0LAorMTY3NSwxNjc2LDE2NzcsMTY3OCwxNjc5 LDE2ODAsMTY4MSwxNjgyLDE2ODMsMTY4NCwxNjg1LDE2ODYsMTY4NywxNjg4LDE2ODksCisxNjkw LDE2OTEsMTY5MiwxNjkzLDE2OTQsMTY5NSwxNjk2LDE2OTcsMTY5OCwxNjk5LDE3MDAsMTcwMSwx NzAyLDE3MDMsMTcwNCwKKzE3MDUsMTcwNiwxNzA3LDE3MDgsMTcwOSwxNzEwLDE3MTEsMTcxMiwx NzEzLDE3MTQsMTcxNSwxNzE2LDE3MTcsMTcxOCwxNzE5LAorMTcyMCwxNzIxLDE3MjIsMTcyMywx NzI0LDE3MjUsMTcyNiwxNzI3LDE3MjgsMTcyOSwxNzMwLDE3MzEsMTczMiwxNzMzLDE3MzQsCisx NzM1LDE3MzYsMTczNywxNzM4LDE3MzksMTc0MCwxNzQxLDE3NDIsMTc0MywxNzQ0LDE3NDUsMTc0 NiwxNzQ3LDE3NDgsMTc0OSwKKzE3NTAsMTc1MSwxNzUyLDE3NTMsMTc1NCwxNzU1LDE3NTYsMTc1 NywxNzU4LDE3NTksMTc2MCwxNzYxLDE3NjIsMTc2MywxNzY0LAorMTc2NSwxNzY2LDE3NjcsMTc2 OCwxNzY5LDE3NzAsMTc3MSwxNzcyLDE3NzMsMTc3NCwxNzc1LDE3NzYsMTc3NywxNzc4LDE3Nzks CisxNzgwLDE3ODEsMTc4MiwxNzgzLDE3ODQsMTc4NSwxNzg2LDE3ODcsMTc4OCwxNzg5LDE3OTAs MTc5MSwxNzkyLDE3OTMsMTc5NCwKKzE3OTUsMTc5NiwxNzk3LDE3OTgsMTc5OSwxODAwLDE4MDEs MTgwMiwxODAzLDE4MDQsMTgwNSwxODA2LDE4MDcsMTgwOCwxODA5LAorMTgxMCwxODExLDE4MTIs MTgxMywxODE0LDE4MTUsMTgxNiwxODE3LDE4MTgsMTgxOSwxODIwLDE4MjEsMTgyMiwxODIzLDE4 MjQsCisxODI1LDE4MjYsMTgyNywxODI4LDE4MjksMTgzMCwxODMxLDE4MzIsMTgzMywxODM0LDE4 MzUsMTgzNiwxODM3LDE4MzgsMTgzOSwKKzE4NDAsMTg0MSwxODQyLDE4NDMsMTg0NCwxODQ1LDE4 NDYsMTg0NywxODQ4LDE4NDksMTg1MCwxODUxLDE4NTIsMTg1MywxODU0LAorMTg1NSwxODU2LDE4 NTcsMTg1OCwxODU5LDE4NjAsMTg2MSwxODYyLDE4NjMsMTg2NCwxODY1LDE4NjYsMTg2NywxODY4 LDE4NjksCisxODcwLDE4NzEsMTg3MiwxODczLDE4NzQsMTg3NSwxODc2LDE4NzcsMTg3OCwxODc5 LDE4ODAsMTg4MSwxODgyLDE4ODMsMTg4NCwKKzE4ODUsMTg4NiwxODg3LDE4ODgsMTg4OSwxODkw LDE4OTEsMTg5MiwxODkzLDE4OTQsMTg5NSwxODk2LDE4OTcsMTg5OCwxODk5LAorMTkwMCwxOTAx LDE5MDIsMTkwMywxOTA0LDE5MDUsMTkwNiwxOTA3LDE5MDgsMTkwOSwxOTEwLDE5MTEsMTkxMiwx OTEzLDE5MTQsCisxOTE1LDE5MTYsMTkxNywxOTE4LDE5MTksMTkyMCwxOTIxLDE5MjIsMTkyMywx OTI0LDE5MjUsMTkyNiwxOTI3LDE5MjgsMTkyOSwKKzE5MzAsMTkzMSwxOTMyLDE5MzMsMTkzNCwx OTM1LDE5MzYsMTkzNywxOTM4LDE5MzksMTk0MCwxOTQxLDE5NDIsMTk0MywxOTQ0LAorMTk0NSwx OTQ2LDE5NDcsMTk0OCwxOTQ5LDE5NTAsMTk1MSwxOTUyLDE5NTMsMTk1NCwxOTU1LDE5NTYsMTk1 NywxOTU4LDE5NTksCisxOTYwLDE5NjEsMTk2MiwxOTYzLDE5NjQsMTk2NSwxOTY2LDE5NjcsMTk2 OCwxOTY5LDE5NzAsMTk3MSwxOTcyLDE5NzMsMTk3NCwKKzE5NzUsMTk3NiwxOTc3LDE5NzgsMTk3 OSwxOTgwLDE5ODEsMTk4MiwxOTgzLDE5ODQsMTk4NSwxOTg2LDE5ODcsMTk4OCwxOTg5LAorMTk5 MCwxOTkxLDE5OTIsMTk5MywxOTk0LDE5OTUsMTk5NiwxOTk3LDE5OTgsMTk5OSwyMDAwLDIwMDEs MjAwMiwyMDAzLDIwMDQsCisyMDA1LDIwMDYsMjAwNywyMDA4LDIwMDksMjAxMCwyMDExLDIwMTIs MjAxMywyMDE0LDIwMTUsMjAxNiwyMDE3LDIwMTgsMjAxOSwKKzIwMjAsMjAyMSwyMDIyLDIwMjMs MjAyNCwyMDI1LDIwMjYsMjAyNywyMDI4LDIwMjksMjAzMCwyMDMxLDIwMzIsMjAzMywyMDM0LAor MjAzNSwyMDM2LDIwMzcsMjAzOCwyMDM5LDIwNDAsMjA0MSwyMDQyLDIwNDMsMjA0NCwyMDQ1LDIw NDYsMjA0NywyMDQ4LDIwNDksCisyMDUwLDIwNTEsMjA1MiwyMDUzLDIwNTQsMjA1NSwyMDU2LDIw NTcsMjA1OCwyMDU5LDIwNjAsMjA2MSwyMDYyLDIwNjMsMjA2NCwKKzIwNjUsMjA2NiwyMDY3LDIw NjgsMjA2OSwyMDcwLDIwNzEsMjA3MiwyMDczLDIwNzQsMjA3NSwyMDc2LDIwNzcsMjA3OCwyMDc5 LAorMjA4MCwyMDgxLDIwODIsMjA4MywyMDg0LDIwODUsMjA4NiwyMDg3LDIwODgsMjA4OSwyMDkw LDIwOTEsMjA5MiwyMDkzLDIwOTQsCisyMDk1LDIwOTYsMjA5NywyMDk4LDIwOTksMjEwMCwyMTAx LDIxMDIsMjEwMywyMTA0LDIxMDUsMjEwNiwyMTA3LDIxMDgsMjEwOSwKKzIxMTAsMjExMSwyMTEy LDIxMTMsMjExNCwyMTE1LDIxMTYsMjExNywyMTE4LDIxMTksMjEyMCwyMTIxLDIxMjIsMjEyMywy MTI0LAorMjEyNSwyMTI2LDIxMjcsMjEyOCwyMTI5LDIxMzAsMjEzMSwyMTMyLDIxMzMsMjEzNCwy MTM1LDIxMzYsMjEzNywyMTM4LDIxMzksCisyMTQwLDIxNDEsMjE0MiwyMTQzLDIxNDQsMjE0NSwy MTQ2LDIxNDcsMjE0OCwyMTQ5LDIxNTAsMjE1MSwyMTUyLDIxNTMsMjE1NCwKKzIxNTUsMjE1Niwy MTU3LDIxNTgsMjE1OSwyMTYwLDIxNjEsMjE2MiwyMTYzLDIxNjQsMjE2NSwyMTY2LDIxNjcsMjE2 OCwyMTY5LAorMjE3MCwyMTcxLDIxNzIsMjE3MywyMTc0LDIxNzUsMjE3NiwyMTc3LDIxNzgsMjE3 OSwyMTgwLDIxODEsMjE4MiwyMTgzLDIxODQsCisyMTg1LDIxODYsMjE4NywyMTg4LDIxODksMjE5 MCwyMTkxLDIxOTIsMjE5MywyMTk0LDIxOTUsMjE5NiwyMTk3LDIxOTgsMjE5OSwKKzIyMDAsMjIw MSwyMjAyLDIyMDMsMjIwNCwyMjA1LDIyMDYsMjIwNywyMjA4LDIyMDksMjIxMCwyMjExLDIyMTIs MjIxMywyMjE0LAorMjIxNSwyMjE2LDIyMTcsMjIxOCwyMjE5LDIyMjAsMjIyMSwyMjIyLDIyMjMs MjIyNCwyMjI1LDIyMjYsMjIyNywyMjI4LDIyMjksCisyMjMwLDIyMzEsMjIzMiwyMjMzLDIyMzQs MjIzNSwyMjM2LDIyMzcsMjIzOCwyMjM5LDIyNDAsMjI0MSwyMjQyLDIyNDMsMjI0NCwKKzIyNDUs MjI0NiwyMjQ3LDIyNDgsMjI0OSwyMjUwLDIyNTEsMjI1MiwyMjUzLDIyNTQsMjI1NSwyMjU2LDIy NTcsMjI1OCwyMjU5LAorMjI2MCwyMjYxLDIyNjIsMjI2MywyMjY0LDIyNjUsMjI2NiwyMjY3LDIy NjgsMjI2OSwyMjcwLDIyNzEsMjI3MiwyMjczLDIyNzQsCisyMjc1LDIyNzYsMjI3NywyMjc4LDIy NzksMjI4MCwyMjgxLDIyODIsMjI4MywyMjg0LDIyODUsMjI4NiwyMjg3LDIyODgsMjI4OSwKKzIy OTAsMjI5MSwyMjkyLDIyOTMsMjI5NCwyMjk1LDIyOTYsMjI5NywyMjk4LDIyOTksMjMwMCwyMzAx LDIzMDIsMjMwMywyMzA0LAorMjMwNSwyMzA2LDIzMDcsMjMwOCwyMzA5LDIzMTAsMjMxMSwyMzEy LDIzMTMsMjMxNCwyMzE1LDIzMTYsMjMxNywyMzE4LDIzMTksCisyMzIwLDIzMjEsMjMyMiwyMzIz LDIzMjQsMjMyNSwyMzI2LDIzMjcsMjMyOCwyMzI5LDIzMzAsMjMzMSwyMzMyLDIzMzMsMjMzNCwK KzIzMzUsMjMzNiwyMzM3LDIzMzgsMjMzOSwyMzQwLDIzNDEsMjM0MiwyMzQzLDIzNDQsMjM0NSwy MzQ2LDIzNDcsMjM0OCwyMzQ5LAorMjM1MCwyMzUxLDIzNTIsMjM1MywyMzU0LDIzNTUsMjM1Niwy MzU3LDIzNTgsMjM1OSwyMzYwLDIzNjEsMjM2MiwyMzYzLDIzNjQsCisyMzY1LDIzNjYsMjM2Nywy MzY4LDIzNjksMjM3MCwyMzcxLDIzNzIsMjM3MywyMzc0LDIzNzUsMjM3NiwyMzc3LDIzNzgsMjM3 OSwKKzIzODAsMjM4MSwyMzgyLDIzODMsMjM4NCwyMzg1LDIzODYsMjM4NywyMzg4LDIzODksMjM5 MCwyMzkxLDIzOTIsMjM5MywyMzk0LAorMjM5NSwyMzk2LDIzOTcsMjM5OCwyMzk5LDI0MDAsMjQw MSwyNDAyLDI0MDMsMjQwNCwyNDA1LDI0MDYsMjQwNywyNDA4LDI0MDksCisyNDEwLDI0MTEsMjQx MiwyNDEzLDI0MTQsMjQxNSwyNDE2LDI0MTcsMjQxOCwyNDE5LDI0MjAsMjQyMSwyNDIyLDI0MjMs MjQyNCwKKzI0MjUsMjQyNiwyNDI3LDI0MjgsMjQyOSwyNDMwLDI0MzEsMjQzMiwyNDMzLDI0MzQs MjQzNSwyNDM2LDI0MzcsMjQzOCwyNDM5LAorMjQ0MCwyNDQxLDI0NDIsMjQ0MywyNDQ0LDI0NDUs MjQ0NiwyNDQ3LDI0NDgsMjQ0OSwyNDUwLDI0NTEsMjQ1MiwyNDUzLDI0NTQsCisyNDU1LDI0NTYs MjQ1NywyNDU4LDI0NTksMjQ2MCwyNDYxLDI0NjIsMjQ2MywyNDY0LDI0NjUsMjQ2NiwyNDY3LDI0 NjgsMjQ2OSwKKzI0NzAsMjQ3MSwyNDcyLDI0NzMsMjQ3NCwyNDc1LDI0NzYsMjQ3NywyNDc4LDI0 NzksMjQ4MCwyNDgxLDI0ODIsMjQ4MywyNDg0LAorMjQ4NSwyNDg2LDI0ODcsMjQ4OCwyNDg5LDI0 OTAsMjQ5MSwyNDkyLDI0OTMsMjQ5NCwyNDk1LDI0OTYsMjQ5NywyNDk4LDI0OTksCisyNTAwLDI1 MDEsMjUwMiwyNTAzLDI1MDQsMjUwNSwyNTA2LDI1MDcsMjUwOCwyNTA5LDI1MTAsMjUxMSwyNTEy LDI1MTMsMjUxNCwKKzI1MTUsMjUxNiwyNTE3LDI1MTgsMjUxOSwyNTIwLDI1MjEsMjUyMiwyNTIz LDI1MjQsMjUyNSwyNTI2LDI1MjcsMjUyOCwyNTI5LAorMjUzMCwyNTMxLDI1MzIsMjUzMywyNTM0 LDI1MzUsMjUzNiwyNTM3LDI1MzgsMjUzOSwyNTQwLDI1NDEsMjU0MiwyNTQzLDI1NDQsCisyNTQ1 LDI1NDYsMjU0NywyNTQ4LDI1NDksMjU1MCwyNTUxLDI1NTIsMjU1MywyNTU0LDI1NTUsMjU1Niwy NTU3LDI1NTgsMjU1OSwKKzI1NjAsMjU2MSwyNTYyLDI1NjMsMjU2NCwyNTY1LDI1NjYsMjU2Nywy NTY4LDI1NjksMjU3MCwyNTcxLDI1NzIsMjU3MywyNTc0LAorMjU3NSwyNTc2LDI1NzcsMjU3OCwy NTc5LDI1ODAsMjU4MSwyNTgyLDI1ODMsMjU4NCwyNTg1LDI1ODYsMjU4NywyNTg4LDI1ODksCisy NTkwLDI1OTEsMjU5MiwyNTkzLDI1OTQsMjU5NSwyNTk2LDI1OTcsMjU5OCwyNTk5LDI2MDAsMjYw MSwyNjAyLDI2MDMsMjYwNCwKKzI2MDUsMjYwNiwyNjA3LDI2MDgsMjYwOSwyNjEwLDI2MTEsMjYx MiwyNjEzLDI2MTQsMjYxNSwyNjE2LDI2MTcsMjYxOCwyNjE5LAorMjYyMCwyNjIxLDI2MjIsMjYy MywyNjI0LDI2MjUsMjYyNiwyNjI3LDI2MjgsMjYyOSwyNjMwLDI2MzEsMjYzMiwyNjMzLDI2MzQs CisyNjM1LDI2MzYsMjYzNywyNjM4LDI2MzksMjY0MCwyNjQxLDI2NDIsMjY0MywyNjQ0LDI2NDUs MjY0NiwyNjQ3LDI2NDgsMjY0OSwKKzI2NTAsMjY1MSwyNjUyLDI2NTMsMjY1NCwyNjU1LDI2NTYs MjY1NywyNjU4LDI2NTksMjY2MCwyNjYxLDI2NjIsMjY2MywyNjY0LAorMjY2NSwyNjY2LDI2Njcs MjY2OCwyNjY5LDI2NzAsMjY3MSwyNjcyLDI2NzMsMjY3NCwyNjc1LDI2NzYsMjY3NywyNjc4LDI2 NzksCisyNjgwLDI2ODEsMjY4MiwyNjgzLDI2ODQsMjY4NSwyNjg2LDI2ODcsMjY4OCwyNjg5LDI2 OTAsMjY5MSwyNjkyLDI2OTMsMjY5NCwKKzI2OTUsMjY5NiwyNjk3LDI2OTgsMjY5OSwyNzAwLDI3 MDEsMjcwMiwyNzAzLDI3MDQsMjcwNSwyNzA2LDI3MDcsMjcwOCwyNzA5LAorMjcxMCwyNzExLDI3 MTIsMjcxMywyNzE0LDI3MTUsMjcxNiwyNzE3LDI3MTgsMjcxOSwyNzIwLDI3MjEsMjcyMiwyNzIz LDI3MjQsCisyNzI1LDI3MjYsMjcyNywyNzI4LDI3MjksMjczMCwyNzMxLDI3MzIsMjczMywyNzM0 LDI3MzUsMjczNiwyNzM3LDI3MzgsMjczOSwKKzI3NDAsMjc0MSwyNzQyLDI3NDMsMjc0NCwyNzQ1 LDI3NDYsMjc0NywyNzQ4LDI3NDksMjc1MCwyNzUxLDI3NTIsMjc1MywyNzU0LAorMjc1NSwyNzU2 LDI3NTcsMjc1OCwyNzU5LDI3NjAsMjc2MSwyNzYyLDI3NjMsMjc2NCwyNzY1LDI3NjYsMjc2Nywy NzY4LDI3NjksCisyNzcwLDI3NzEsMjc3MiwyNzczLDI3NzQsMjc3NSwyNzc2LDI3NzcsMjc3OCwy Nzc5LDI3ODAsMjc4MSwyNzgyLDI3ODMsMjc4NCwKKzI3ODUsMjc4NiwyNzg3LDI3ODgsMjc4OSwy NzkwLDI3OTEsMjc5MiwyNzkzLDI3OTQsMjc5NSwyNzk2LDI3OTcsMjc5OCwyNzk5LAorMjgwMCwy ODAxLDI4MDIsMjgwMywyODA0LDI4MDUsMjgwNiwyODA3LDI4MDgsMjgwOSwyODEwLDI4MTEsMjgx MiwyODEzLDI4MTQsCisyODE1LDI4MTYsMjgxNywyODE4LDI4MTksMjgyMCwyODIxLDI4MjIsMjgy MywyODI0LDI4MjUsMjgyNiwyODI3LDI4MjgsMjgyOSwKKzI4MzAsMjgzMSwyODMyLDI4MzMsMjgz NCwyODM1LDI4MzYsMjgzNywyODM4LDI4MzksMjg0MCwyODQxLDI4NDIsMjg0MywyODQ0LAorMjg0 NSwyODQ2LDI4NDcsMjg0OCwyODQ5LDI4NTAsMjg1MSwyODUyLDI4NTMsMjg1NCwyODU1LDI4NTYs Mjg1NywyODU4LDI4NTksCisyODYwLDI4NjEsMjg2MiwyODYzLDI4NjQsMjg2NSwyODY2LDI4Njcs Mjg2OCwyODY5LDI4NzAsMjg3MSwyODcyLDI4NzMsMjg3NCwKKzI4NzUsMjg3NiwyODc3LDI4Nzgs Mjg3OSwyODgwLDI4ODEsMjg4MiwyODgzLDI4ODQsMjg4NSwyODg2LDI4ODcsMjg4OCwyODg5LAor Mjg5MCwyODkxLDI4OTIsMjg5MywyODk0LDI4OTUsMjg5NiwyODk3LDI4OTgsMjg5OSwyOTAwLDI5 MDEsMjkwMiwyOTAzLDI5MDQsCisyOTA1LDI5MDYsMjkwNywyOTA4LDI5MDksMjkxMCwyOTExLDI5 MTIsMjkxMywyOTE0LDI5MTUsMjkxNiwyOTE3LDI5MTgsMjkxOSwKKzI5MjAsMjkyMSwyOTIyLDI5 MjMsMjkyNCwyOTI1LDI5MjYsMjkyNywyOTI4LDI5MjksMjkzMCwyOTMxLDI5MzIsMjkzMywyOTM0 LAorMjkzNSwyOTM2LDI5MzcsMjkzOCwyOTM5LDI5NDAsMjk0MSwyOTQyLDI5NDMsMjk0NCwyOTQ1 LDI5NDYsMjk0NywyOTQ4LDI5NDksCisyOTUwLDI5NTEsMjk1MiwyOTUzLDI5NTQsMjk1NSwyOTU2 LDI5NTcsMjk1OCwyOTU5LDI5NjAsMjk2MSwyOTYyLDI5NjMsMjk2NCwKKzI5NjUsMjk2NiwyOTY3 LDI5NjgsMjk2OSwyOTcwLDI5NzEsMjk3MiwyOTczLDI5NzQsMjk3NSwyOTc2LDI5NzcsMjk3OCwy OTc5LAorMjk4MCwyOTgxLDI5ODIsMjk4MywyOTg0LDI5ODUsMjk4NiwyOTg3LDI5ODgsMjk4OSwy OTkwLDI5OTEsMjk5MiwyOTkzLDI5OTQsCisyOTk1LDI5OTYsMjk5NywyOTk4LDI5OTksMzAwMCwz MDAxLDMwMDIsMzAwMywzMDA0LDMwMDUsMzAwNiwzMDA3LDMwMDgsMzAwOSwKKzMwMTAsMzAxMSwz MDEyLDMwMTMsMzAxNCwzMDE1LDMwMTYsMzAxNywzMDE4LDMwMTksMzAyMCwzMDIxLDMwMjIsMzAy MywzMDI0LAorMzAyNSwzMDI2LDMwMjcsMzAyOCwzMDI5LDMwMzAsMzAzMSwzMDMyLDMwMzMsMzAz NCwzMDM1LDMwMzYsMzAzNywzMDM4LDMwMzksCiszMDQwLDMwNDEsMzA0MiwzMDQzLDMwNDQsMzA0 NSwzMDQ2LDMwNDcsMzA0OCwzMDQ5LDMwNTAsMzA1MSwzMDUyLDMwNTMsMzA1NCwKKzMwNTUsMzA1 NiwzMDU3LDMwNTgsMzA1OSwzMDYwLDMwNjEsMzA2MiwzMDYzLDMwNjQsMzA2NSwzMDY2LDMwNjcs MzA2OCwzMDY5LAorMzA3MCwzMDcxLDMwNzIsMzA3MywzMDc0LDMwNzUsMzA3NiwzMDc3LDMwNzgs MzA3OSwzMDgwLDMwODEsMzA4MiwzMDgzLDMwODQsCiszMDg1LDMwODYsMzA4NywzMDg4LDMwODks MzA5MCwzMDkxLDMwOTIsMzA5MywzMDk0LDMwOTUsMzA5NiwzMDk3LDMwOTgsMzA5OSwKKzMxMDAs MzEwMSwzMTAyLDMxMDMsMzEwNCwzMTA1LDMxMDYsMzEwNywzMTA4LDMxMDksMzExMCwzMTExLDMx MTIsMzExMywzMTE0LAorMzExNSwzMTE2LDMxMTcsMzExOCwzMTE5LDMxMjAsMzEyMSwzMTIyLDMx MjMsMzEyNCwzMTI1LDMxMjYsMzEyNywzMTI4LDMxMjksCiszMTMwLDMxMzEsMzEzMiwzMTMzLDMx MzQsMzEzNSwzMTM2LDMxMzcsMzEzOCwzMTM5LDMxNDAsMzE0MSwzMTQyLDMxNDMsMzE0NCwKKzMx NDUsMzE0NiwzMTQ3LDMxNDgsMzE0OSwzMTUwLDMxNTEsMzE1MiwzMTUzLDMxNTQsMzE1NSwzMTU2 LDMxNTcsMzE1OCwzMTU5LAorMzE2MCwzMTYxLDMxNjIsMzE2MywzMTY0LDMxNjUsMzE2NiwzMTY3 LDMxNjgsMzE2OSwzMTcwLDMxNzEsMzE3MiwzMTczLDMxNzQsCiszMTc1LDMxNzYsMzE3NywzMTc4 LDMxNzksMzE4MCwzMTgxLDMxODIsMzE4MywzMTg0LDMxODUsMzE4NiwzMTg3LDMxODgsMzE4OSwK KzMxOTAsMzE5MSwzMTkyLDMxOTMsMzE5NCwzMTk1LDMxOTYsMzE5NywzMTk4LDMxOTksMzIwMCwz MjAxLDMyMDIsMzIwMywzMjA0LAorMzIwNSwzMjA2LDMyMDcsMzIwOCwzMjA5LDMyMTAsMzIxMSwz MjEyLDMyMTMsMzIxNCwzMjE1LDMyMTYsMzIxNywzMjE4LDMyMTksCiszMjIwLDMyMjEsMzIyMiwz MjIzLDMyMjQsMzIyNSwzMjI2LDMyMjcsMzIyOCwzMjI5LDMyMzAsMzIzMSwzMjMyLDMyMzMsMzIz NCwKKzMyMzUsMzIzNiwzMjM3LDMyMzgsMzIzOSwzMjQwLDMyNDEsMzI0MiwzMjQzLDMyNDQsMzI0 NSwzMjQ2LDMyNDcsMzI0OCwzMjQ5LAorMzI1MCwzMjUxLDMyNTIsMzI1MywzMjU0LDMyNTUsMzI1 NiwzMjU3LDMyNTgsMzI1OSwzMjYwLDMyNjEsMzI2MiwzMjYzLDMyNjQsCiszMjY1LDMyNjYsMzI2 NywzMjY4LDMyNjksMzI3MCwzMjcxLDMyNzIsMzI3MywzMjc0LDMyNzUsMzI3NiwzMjc3LDMyNzgs MzI3OSwKKzMyODAsMzI4MSwzMjgyLDMyODMsMzI4NCwzMjg1LDMyODYsMzI4NywzMjg4LDMyODks MzI5MCwzMjkxLDMyOTIsMzI5MywzMjk0LAorMzI5NSwzMjk2LDMyOTcsMzI5OCwzMjk5LDMzMDAs MzMwMSwzMzAyLDMzMDMsMzMwNCwzMzA1LDMzMDYsMzMwNywzMzA4LDMzMDksCiszMzEwLDMzMTEs MzMxMiwzMzEzLDMzMTQsMzMxNSwzMzE2LDMzMTcsMzMxOCwzMzE5LDMzMjAsMzMyMSwzMzIyLDMz MjMsMzMyNCwKKzMzMjUsMzMyNiwzMzI3LDMzMjgsMzMyOSwzMzMwLDMzMzEsMzMzMiwzMzMzLDMz MzQsMzMzNSwzMzM2LDMzMzcsMzMzOCwzMzM5LAorMzM0MCwzMzQxLDMzNDIsMzM0MywzMzQ0LDMz NDUsMzM0NiwzMzQ3LDMzNDgsMzM0OSwzMzUwLDMzNTEsMzM1MiwzMzUzLDMzNTQsCiszMzU1LDMz NTYsMzM1NywzMzU4LDMzNTksMzM2MCwzMzYxLDMzNjIsMzM2MywzMzY0LDMzNjUsMzM2NiwzMzY3 LDMzNjgsMzM2OSwKKzMzNzAsMzM3MSwzMzcyLDMzNzMsMzM3NCwzMzc1LDMzNzYsMzM3NywzMzc4 LDMzNzksMzM4MCwzMzgxLDMzODIsMzM4MywzMzg0LAorMzM4NSwzMzg2LDMzODcsMzM4OCwzMzg5 LDMzOTAsMzM5MSwzMzkyLDMzOTMsMzM5NCwzMzk1LDMzOTYsMzM5NywzMzk4LDMzOTksCiszNDAw LDM0MDEsMzQwMiwzNDAzLDM0MDQsMzQwNSwzNDA2LDM0MDcsMzQwOCwzNDA5LDM0MTAsMzQxMSwz NDEyLDM0MTMsMzQxNCwKKzM0MTUsMzQxNiwzNDE3LDM0MTgsMzQxOSwzNDIwLDM0MjEsMzQyMiwz NDIzLDM0MjQsMzQyNSwzNDI2LDM0MjcsMzQyOCwzNDI5LAorMzQzMCwzNDMxLDM0MzIsMzQzMywz NDM0LDM0MzUsMzQzNiwzNDM3LDM0MzgsMzQzOSwzNDQwLDM0NDEsMzQ0MiwzNDQzLDM0NDQsCisz NDQ1LDM0NDYsMzQ0NywzNDQ4LDM0NDksMzQ1MCwzNDUxLDM0NTIsMzQ1MywzNDU0LDM0NTUsMzQ1 NiwzNDU3LDM0NTgsMzQ1OSwKKzM0NjAsMzQ2MSwzNDYyLDM0NjMsMzQ2NCwzNDY1LDM0NjYsMzQ2 NywzNDY4LDM0NjksMzQ3MCwzNDcxLDM0NzIsMzQ3MywzNDc0LAorMzQ3NSwzNDc2LDM0NzcsMzQ3 OCwzNDc5LDM0ODAsMzQ4MSwzNDgyLDM0ODMsMzQ4NCwzNDg1LDM0ODYsMzQ4NywzNDg4LDM0ODks CiszNDkwLDM0OTEsMzQ5MiwzNDkzLDM0OTQsMzQ5NSwzNDk2LDM0OTcsMzQ5OCwzNDk5LDM1MDAs MzUwMSwzNTAyLDM1MDMsMzUwNCwKKzM1MDUsMzUwNiwzNTA3LDM1MDgsMzUwOSwzNTEwLDM1MTEs MzUxMiwzNTEzLDM1MTQsMzUxNSwzNTE2LDM1MTcsMzUxOCwzNTE5LAorMzUyMCwzNTIxLDM1MjIs MzUyMywzNTI0LDM1MjUsMzUyNiwzNTI3LDM1MjgsMzUyOSwzNTMwLDM1MzEsMzUzMiwzNTMzLDM1 MzQsCiszNTM1LDM1MzYsMzUzNywzNTM4LDM1MzksMzU0MCwzNTQxLDM1NDIsMzU0MywzNTQ0LDM1 NDUsMzU0NiwzNTQ3LDM1NDgsMzU0OSwKKzM1NTAsMzU1MSwzNTUyLDM1NTMsMzU1NCwzNTU1LDM1 NTYsMzU1NywzNTU4LDM1NTksMzU2MCwzNTYxLDM1NjIsMzU2MywzNTY0LAorMzU2NSwzNTY2LDM1 NjcsMzU2OCwzNTY5LDM1NzAsMzU3MSwzNTcyLDM1NzMsMzU3NCwzNTc1LDM1NzYsMzU3NywzNTc4 LDM1NzksCiszNTgwLDM1ODEsMzU4MiwzNTgzLDM1ODQsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5 LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwKKzM1OTUsMzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAw LDM2MDEsMzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LAorMzYxMCwzNjEx LDM2MTIsMzYxMywzNjE0LDM2MTUsMzYxNiwzNjE3LDM2MTgsMzYxOSwzNjIwLDM2MjEsMzYyMiwz NjIzLDM2MjQsCiszNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywz NjM0LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwKKzM2NDAsMzY0MSwzNjQyLDM2NDMsMzY0NCwz NjQ1LDM2NDYsMzY0NywzNjQ4LDM2NDksMzY1MCwzNjUxLDM2NTIsMzY1MywzNjU0LAorMzY1NSwz NjU2LDM2NTcsMzY1OCwzNjU5LDM2NjAsMzY2MSwzNjYyLDM2NjMsMzY2NCwzNjY1LDM2NjYsMzY2 NywzNjY4LDM2NjksCiszNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQsMzY3NSwzNjc2LDM2NzcsMzY3 OCwzNjc5LDM2ODAsMzY4MSwzNjgyLDM2ODMsMzY4NCwKKzM2ODUsMzY4NiwzNjg3LDM2ODgsMzY4 OSwzNjkwLDM2OTEsMzY5MiwzNjkzLDM2OTQsMzY5NSwzNjk2LDM2OTcsMzY5OCwzNjk5LAorMzcw MCwzNzAxLDM3MDIsMzcwMywzNzA0LDM3MDUsMzcwNiwzNzA3LDM3MDgsMzcwOSwzNzEwLDM3MTEs MzcxMiwzNzEzLDM3MTQsCiszNzE1LDM3MTYsMzcxNywzNzE4LDM3MTksMzcyMCwzNzIxLDM3MjIs MzcyMywzNzI0LDM3MjUsMzcyNiwzNzI3LDM3MjgsMzcyOSwKKzM3MzAsMzczMSwzNzMyLDM3MzMs MzczNCwzNzM1LDM3MzYsMzczNywzNzM4LDM3MzksMzc0MCwzNzQxLDM3NDIsMzc0MywzNzQ0LAor Mzc0NSwzNzQ2LDM3NDcsMzc0OCwzNzQ5LDM3NTAsMzc1MSwzNzUyLDM3NTMsMzc1NCwzNzU1LDM3 NTYsMzc1NywzNzU4LDM3NTksCiszNzYwLDM3NjEsMzc2MiwzNzYzLDM3NjQsMzc2NSwzNzY2LDM3 NjcsMzc2OCwzNzY5LDM3NzAsMzc3MSwzNzcyLDM3NzMsMzc3NCwKKzM3NzUsMzc3NiwzNzc3LDM3 NzgsMzc3OSwzNzgwLDM3ODEsMzc4MiwzNzgzLDM3ODQsMzc4NSwzNzg2LDM3ODcsMzc4OCwzNzg5 LAorMzc5MCwzNzkxLDM3OTIsMzc5MywzNzk0LDM3OTUsMzc5NiwzNzk3LDM3OTgsMzc5OSwzODAw LDM4MDEsMzgwMiwzODAzLDM4MDQsCiszODA1LDM4MDYsMzgwNywzODA4LDM4MDksMzgxMCwzODEx LDM4MTIsMzgxMywzODE0LDM4MTUsMzgxNiwzODE3LDM4MTgsMzgxOSwKKzM4MjAsMzgyMSwzODIy LDM4MjMsMzgyNCwzODI1LDM4MjYsMzgyNywzODI4LDM4MjksMzgzMCwzODMxLDM4MzIsMzgzMywz ODM0LAorMzgzNSwzODM2LDM4MzcsMzgzOCwzODM5LDM4NDAsMzg0MSwzODQyLDM4NDMsMzg0NCwz ODQ1LDM4NDYsMzg0NywzODQ4LDM4NDksCiszODUwLDM4NTEsMzg1MiwzODUzLDM4NTQsMzg1NSwz ODU2LDM4NTcsMzg1OCwzODU5LDM4NjAsMzg2MSwzODYyLDM4NjMsMzg2NCwKKzM4NjUsMzg2Niwz ODY3LDM4NjgsMzg2OSwzODcwLDM4NzEsMzg3MiwzODczLDM4NzQsMzg3NSwzODc2LDM4NzcsMzg3 OCwzODc5LAorMzg4MCwzODgxLDM4ODIsMzg4MywzODg0LDM4ODUsMzg4NiwzODg3LDM4ODgsMzg4 OSwzODkwLDM4OTEsMzg5MiwzODkzLDM4OTQsCiszODk1LDM4OTYsMzg5NywzODk4LDM4OTksMzkw MCwzOTAxLDM5MDIsMzkwMywzOTA0LDM5MDUsMzkwNiwzOTA3LDM5MDgsMzkwOSwKKzM5MTAsMzkx MSwzOTEyLDM5MTMsMzkxNCwzOTE1LDM5MTYsMzkxNywzOTE4LDM5MTksMzkyMCwzOTIxLDM5MjIs MzkyMywzOTI0LAorMzkyNSwzOTI2LDM5MjcsMzkyOCwzOTI5LDM5MzAsMzkzMSwzOTMyLDM5MzMs MzkzNCwzOTM1LDM5MzYsMzkzNywzOTM4LDM5MzksCiszOTQwLDM5NDEsMzk0MiwzOTQzLDM5NDQs Mzk0NSwzOTQ2LDM5NDcsMzk0OCwzOTQ5LDM5NTAsMzk1MSwzOTUyLDM5NTMsMzk1NCwKKzM5NTUs Mzk1NiwzOTU3LDM5NTgsMzk1OSwzOTYwLDM5NjEsMzk2MiwzOTYzLDM5NjQsMzk2NSwzOTY2LDM5 NjcsMzk2OCwzOTY5LAorMzk3MCwzOTcxLDM5NzIsMzk3MywzOTc0LDM5NzUsMzk3NiwzOTc3LDM5 NzgsMzk3OSwzOTgwLDM5ODEsMzk4MiwzOTgzLDM5ODQsCiszOTg1LDM5ODYsMzk4NywzOTg4LDM5 ODksMzk5MCwzOTkxLDM5OTIsMzk5MywzOTk0LDM5OTUsMzk5NiwzOTk3LDM5OTgsMzk5OSwKKzQw MDAsNDAwMSw0MDAyLDQwMDMsNDAwNCw0MDA1LDQwMDYsNDAwNyw0MDA4LDQwMDksNDAxMCw0MDEx LDQwMTIsNDAxMyw0MDE0LAorNDAxNSw0MDE2LDQwMTcsNDAxOCw0MDE5LDQwMjAsNDAyMSw0MDIy LDQwMjMsNDAyNCw0MDI1LDQwMjYsNDAyNyw0MDI4LDQwMjksCis0MDMwLDQwMzEsNDAzMiw0MDMz LDQwMzQsNDAzNSw0MDM2LDQwMzcsNDAzOCw0MDM5LDQwNDAsNDA0MSw0MDQyLDQwNDMsNDA0NCwK KzQwNDUsNDA0Niw0MDQ3LDQwNDgsNDA0OSw0MDUwLDQwNTEsNDA1Miw0MDUzLDQwNTQsNDA1NSw0 MDU2LDQwNTcsNDA1OCw0MDU5LAorNDA2MCw0MDYxLDQwNjIsNDA2Myw0MDY0LDQwNjUsNDA2Niw0 MDY3LDQwNjgsNDA2OSw0MDcwLDQwNzEsNDA3Miw0MDczLDQwNzQsCis0MDc1LDQwNzYsNDA3Nyw0 MDc4LDQwNzksNDA4MCw0MDgxLDQwODIsNDA4Myw0MDg0LDQwODUsNDA4Niw0MDg3LDQwODgsNDA4 OSwKKzQwOTAsNDA5MSw0MDkyLDQwOTMsNDA5NCw0MDk1LDQwOTYsNDA5Nyw0MDk4LDQwOTksNDEw MCw0MTAxLDQxMDIsNDEwMyw0MTA0LAorNDEwNSw0MTA2LDQxMDcsNDEwOCw0MTA5LDQxMTAsNDEx MSw0MTEyLDQxMTMsNDExNCw0MTE1LDQxMTYsNDExNyw0MTE4LDQxMTksCis0MTIwLDQxMjEsNDEy Miw0MTIzLDQxMjQsNDEyNSw0MTI2LDQxMjcsNDEyOCw0MTI5LDQxMzAsNDEzMSw0MTMyLDQxMzMs NDEzNCwKKzQxMzUsNDEzNiw0MTM3LDQxMzgsNDEzOSw0MTQwLDQxNDEsNDE0Miw0MTQzLDQxNDQs NDE0NSw0MTQ2LDQxNDcsNDE0OCw0MTQ5LAorNDE1MCw0MTUxLDQxNTIsNDE1Myw0MTU0LDQxNTUs NDE1Niw0MTU3LDQxNTgsNDE1OSw0MTYwLDQxNjEsNDE2Miw0MTYzLDQxNjQsCis0MTY1LDQxNjYs NDE2Nyw0MTY4LDQxNjksNDE3MCw0MTcxLDQxNzIsNDE3Myw0MTc0LDQxNzUsNDE3Niw0MTc3LDQx NzgsNDE3OSwKKzQxODAsNDE4MSw0MTgyLDQxODMsNDE4NCw0MTg1LDQxODYsNDE4Nyw0MTg4LDQx ODksNDE5MCw0MTkxLDQxOTIsNDE5Myw0MTk0LAorNDE5NSw0MTk2LDQxOTcsNDE5OCw0MTk5LDQy MDAsNDIwMSw0MjAyLDQyMDMsNDIwNCw0MjA1LDQyMDYsNDIwNyw0MjA4LDQyMDksCis0MjEwLDQy MTEsNDIxMiw0MjEzLDQyMTQsNDIxNSw0MjE2LDQyMTcsNDIxOCw0MjE5LDQyMjAsNDIyMSw0MjIy LDQyMjMsNDIyNCwKKzQyMjUsNDIyNiw0MjI3LDQyMjgsNDIyOSw0MjMwLDQyMzEsNDIzMiw0MjMz LDQyMzQsNDIzNSw0MjM2LDQyMzcsNDIzOCw0MjM5LAorNDI0MCw0MjQxLDQyNDIsNDI0Myw0MjQ0 LDQyNDUsNDI0Niw0MjQ3LDQyNDgsNDI0OSw0MjUwLDQyNTEsNDI1Miw0MjUzLDQyNTQsCis0MjU1 LDQyNTYsNDI1Nyw0MjU4LDQyNTksNDI2MCw0MjYxLDQyNjIsNDI2Myw0MjY0LDQyNjUsNDI2Niw0 MjY3LDQyNjgsNDI2OSwKKzQyNzAsNDI3MSw0MjcyLDQyNzMsNDI3NCw0Mjc1LDQyNzYsNDI3Nyw0 Mjc4LDQyNzksNDI4MCw0MjgxLDQyODIsNDI4Myw0Mjg0LAorNDI4NSw0Mjg2LDQyODcsNDI4OCw0 Mjg5LDQyOTAsNDI5MSw0MjkyLDQyOTMsNDI5NCw0Mjk1LDQyOTYsNDI5Nyw0Mjk4LDQyOTksCis0 MzAwLDQzMDEsNDMwMiw0MzAzLDQzMDQsNDMwNSw0MzA2LDQzMDcsNDMwOCw0MzA5LDQzMTAsNDMx MSw0MzEyLDQzMTMsNDMxNCwKKzQzMTUsNDMxNiw0MzE3LDQzMTgsNDMxOSw0MzIwLDQzMjEsNDMy Miw0MzIzLDQzMjQsNDMyNSw0MzI2LDQzMjcsNDMyOCw0MzI5LAorNDMzMCw0MzMxLDQzMzIsNDMz Myw0MzM0LDQzMzUsNDMzNiw0MzM3LDQzMzgsNDMzOSw0MzQwLDQzNDEsNDM0Miw0MzQzLDQzNDQs Cis0MzQ1LDQzNDYsNDM0Nyw0MzQ4LDQzNDksNDM1MCw0MzUxLDQzNTIsNDM1Myw0MzU0LDQzNTUs NDM1Niw0MzU3LDQzNTgsNDM1OSwKKzQzNjAsNDM2MSw0MzYyLDQzNjMsNDM2NCw0MzY1LDQzNjYs NDM2Nyw0MzY4LDQzNjksNDM3MCw0MzcxLDQzNzIsNDM3Myw0Mzc0LAorNDM3NSw0Mzc2LDQzNzcs NDM3OCw0Mzc5LDQzODAsNDM4MSw0MzgyLDQzODMsNDM4NCw0Mzg1LDQzODYsNDM4Nyw0Mzg4LDQz ODksCis0MzkwLDQzOTEsNDM5Miw0MzkzLDQzOTQsNDM5NSw0Mzk2LDQzOTcsNDM5OCw0Mzk5LDQ0 MDAsNDQwMSw0NDAyLDQ0MDMsNDQwNCwKKzQ0MDUsNDQwNiw0NDA3LDQ0MDgsNDQwOSw0NDEwLDQ0 MTEsNDQxMiw0NDEzLDQ0MTQsNDQxNSw0NDE2LDQ0MTcsNDQxOCw0NDE5LAorNDQyMCw0NDIxLDQ0 MjIsNDQyMyw0NDI0LDQ0MjUsNDQyNiw0NDI3LDQ0MjgsNDQyOSw0NDMwLDQ0MzEsNDQzMiw0NDMz LDQ0MzQsCis0NDM1LDQ0MzYsNDQzNyw0NDM4LDQ0MzksNDQ0MCw0NDQxLDQ0NDIsNDQ0Myw0NDQ0 LDQ0NDUsNDQ0Niw0NDQ3LDQ0NDgsNDQ0OSwKKzQ0NTAsNDQ1MSw0NDUyLDQ0NTMsNDQ1NCw0NDU1 LDQ0NTYsNDQ1Nyw0NDU4LDQ0NTksNDQ2MCw0NDYxLDQ0NjIsNDQ2Myw0NDY0LAorNDQ2NSw0NDY2 LDQ0NjcsNDQ2OCw0NDY5LDQ0NzAsNDQ3MSw0NDcyLDQ0NzMsNDQ3NCw0NDc1LDQ0NzYsNDQ3Nyw0 NDc4LDQ0NzksCis0NDgwLDQ0ODEsNDQ4Miw0NDgzLDQ0ODQsNDQ4NSw0NDg2LDQ0ODcsNDQ4OCw0 NDg5LDQ0OTAsNDQ5MSw0NDkyLDQ0OTMsNDQ5NCwKKzQ0OTUsNDQ5Niw0NDk3LDQ0OTgsNDQ5OSw0 NTAwLDQ1MDEsNDUwMiw0NTAzLDQ1MDQsNDUwNSw0NTA2LDQ1MDcsNDUwOCw0NTA5LAorNDUxMCw0 NTExLDQ1MTIsNDUxMyw0NTE0LDQ1MTUsNDUxNiw0NTE3LDQ1MTgsNDUxOSw0NTIwLDQ1MjEsNDUy Miw0NTIzLDQ1MjQsCis0NTI1LDQ1MjYsNDUyNyw0NTI4LDQ1MjksNDUzMCw0NTMxLDQ1MzIsNDUz Myw0NTM0LDQ1MzUsNDUzNiw0NTM3LDQ1MzgsNDUzOSwKKzQ1NDAsNDU0MSw0NTQyLDQ1NDMsNDU0 NCw0NTQ1LDQ1NDYsNDU0Nyw0NTQ4LDQ1NDksNDU1MCw0NTUxLDQ1NTIsNDU1Myw0NTU0LAorNDU1 NSw0NTU2LDQ1NTcsNDU1OCw0NTU5LDQ1NjAsNDU2MSw0NTYyLDQ1NjMsNDU2NCw0NTY1LDQ1NjYs NDU2Nyw0NTY4LDQ1NjksCis0NTcwLDQ1NzEsNDU3Miw0NTczLDQ1NzQsNDU3NSw0NTc2LDQ1Nzcs NDU3OCw0NTc5LDQ1ODAsNDU4MSw0NTgyLDQ1ODMsNDU4NCwKKzQ1ODUsNDU4Niw0NTg3LDQ1ODgs NDU4OSw0NTkwLDQ1OTEsNDU5Miw0NTkzLDQ1OTQsNDU5NSw0NTk2LDQ1OTcsNDU5OCw0NTk5LAor NDYwMCw0NjAxLDQ2MDIsNDYwMyw0NjA0LDQ2MDUsNDYwNiw0NjA3LDQ2MDgsNDYwOSw0NjEwLDQ2 MTEsNDYxMiw0NjEzLDQ2MTQsCis0NjE1LDQ2MTYsNDYxNyw0NjE4LDQ2MTksNDYyMCw0NjIxLDQ2 MjIsNDYyMyw0NjI0LDQ2MjUsNDYyNiw0NjI3LDQ2MjgsNDYyOSwKKzQ2MzAsNDYzMSw0NjMyLDQ2 MzMsNDYzNCw0NjM1LDQ2MzYsNDYzNyw0NjM4LDQ2MzksNDY0MCw0NjQxLDQ2NDIsNDY0Myw0NjQ0 LAorNDY0NSw0NjQ2LDQ2NDcsNDY0OCw0NjQ5LDQ2NTAsNDY1MSw0NjUyLDQ2NTMsNDY1NCw0NjU1 LDQ2NTYsNDY1Nyw0NjU4LDQ2NTksCis0NjYwLDQ2NjEsNDY2Miw0NjYzLDQ2NjQsNDY2NSw0NjY2 LDQ2NjcsNDY2OCw0NjY5LDQ2NzAsNDY3MSw0NjcyLDQ2NzMsNDY3NCwKKzQ2NzUsNDY3Niw0Njc3 LDQ2NzgsNDY3OSw0NjgwLDQ2ODEsNDY4Miw0NjgzLDQ2ODQsNDY4NSw0Njg2LDQ2ODcsNDY4OCw0 Njg5LAorNDY5MCw0NjkxLDQ2OTIsNDY5Myw0Njk0LDQ2OTUsNDY5Niw0Njk3LDQ2OTgsNDY5OSw0 NzAwLDQ3MDEsNDcwMiw0NzAzLDQ3MDQsCis0NzA1LDQ3MDYsNDcwNyw0NzA4LDQ3MDksNDcxMCw0 NzExLDQ3MTIsNDcxMyw0NzE0LDQ3MTUsNDcxNiw0NzE3LDQ3MTgsNDcxOSwKKzQ3MjAsNDcyMSw0 NzIyLDQ3MjMsNDcyNCw0NzI1LDQ3MjYsNDcyNyw0NzI4LDQ3MjksNDczMCw0NzMxLDQ3MzIsNDcz Myw0NzM0LAorNDczNSw0NzM2LDQ3MzcsNDczOCw0NzM5LDQ3NDAsNDc0MSw0NzQyLDQ3NDMsNDc0 NCw0NzQ1LDQ3NDYsNDc0Nyw0NzQ4LDQ3NDksCis0NzUwLDQ3NTEsNDc1Miw0NzUzLDQ3NTQsNDc1 NSw0NzU2LDQ3NTcsNDc1OCw0NzU5LDQ3NjAsNDc2MSw0NzYyLDQ3NjMsNDc2NCwKKzQ3NjUsNDc2 Niw0NzY3LDQ3NjgsNDc2OSw0NzcwLDQ3NzEsNDc3Miw0NzczLDQ3NzQsNDc3NSw0Nzc2LDQ3Nzcs NDc3OCw0Nzc5LAorNDc4MCw0NzgxLDQ3ODIsNDc4Myw0Nzg0LDQ3ODUsNDc4Niw0Nzg3LDQ3ODgs NDc4OSw0NzkwLDQ3OTEsNDc5Miw0NzkzLDQ3OTQsCis0Nzk1LDQ3OTYsNDc5Nyw0Nzk4LDQ3OTks NDgwMCw0ODAxLDQ4MDIsNDgwMyw0ODA0LDQ4MDUsNDgwNiw0ODA3LDQ4MDgsNDgwOSwKKzQ4MTAs NDgxMSw0ODEyLDQ4MTMsNDgxNCw0ODE1LDQ4MTYsNDgxNyw0ODE4LDQ4MTksNDgyMCw0ODIxLDQ4 MjIsNDgyMyw0ODI0LAorNDgyNSw0ODI2LDQ4MjcsNDgyOCw0ODI5LDQ4MzAsNDgzMSw0ODMyLDQ4 MzMsNDgzNCw0ODM1LDQ4MzYsNDgzNyw0ODM4LDQ4MzksCis0ODQwLDQ4NDEsNDg0Miw0ODQzLDQ4 NDQsNDg0NSw0ODQ2LDQ4NDcsNDg0OCw0ODQ5LDQ4NTAsNDg1MSw0ODUyLDQ4NTMsNDg1NCwKKzQ4 NTUsNDg1Niw0ODU3LDQ4NTgsNDg1OSw0ODYwLDQ4NjEsNDg2Miw0ODYzLDQ4NjQsNDg2NSw0ODY2 LDQ4NjcsNDg2OCw0ODY5LAorNDg3MCw0ODcxLDQ4NzIsNDg3Myw0ODc0LDQ4NzUsNDg3Niw0ODc3 LDQ4NzgsNDg3OSw0ODgwLDQ4ODEsNDg4Miw0ODgzLDQ4ODQsCis0ODg1LDQ4ODYsNDg4Nyw0ODg4 LDQ4ODksNDg5MCw0ODkxLDQ4OTIsNDg5Myw0ODk0LDQ4OTUsNDg5Niw0ODk3LDQ4OTgsNDg5OSwK KzQ5MDAsNDkwMSw0OTAyLDQ5MDMsNDkwNCw0OTA1LDQ5MDYsNDkwNyw0OTA4LDQ5MDksNDkxMCw0 OTExLDQ5MTIsNDkxMyw0OTE0LAorNDkxNSw0OTE2LDQ5MTcsNDkxOCw0OTE5LDQ5MjAsNDkyMSw0 OTIyLDQ5MjMsNDkyNCw0OTI1LDQ5MjYsNDkyNyw0OTI4LDQ5MjksCis0OTMwLDQ5MzEsNDkzMiw0 OTMzLDQ5MzQsNDkzNSw0OTM2LDQ5MzcsNDkzOCw0OTM5LDQ5NDAsNDk0MSw0OTQyLDQ5NDMsNDk0 NCwKKzQ5NDUsNDk0Niw0OTQ3LDQ5NDgsNDk0OSw0OTUwLDQ5NTEsNDk1Miw0OTUzLDQ5NTQsNDk1 NSw0OTU2LDQ5NTcsNDk1OCw0OTU5LAorNDk2MCw0OTYxLDQ5NjIsNDk2Myw0OTY0LDQ5NjUsNDk2 Niw0OTY3LDQ5NjgsNDk2OSw0OTcwLDQ5NzEsNDk3Miw0OTczLDQ5NzQsCis0OTc1LDQ5NzYsNDk3 Nyw0OTc4LDQ5NzksNDk4MCw0OTgxLDQ5ODIsNDk4Myw0OTg0LDQ5ODUsNDk4Niw0OTg3LDQ5ODgs NDk4OSwKKzQ5OTAsNDk5MSw0OTkyLDQ5OTMsNDk5NCw0OTk1LDQ5OTYsNDk5Nyw0OTk4LDQ5OTks NTAwMCw1MDAxLDUwMDIsNTAwMyw1MDA0LAorNTAwNSw1MDA2LDUwMDcsNTAwOCw1MDA5LDUwMTAs NTAxMSw1MDEyLDUwMTMsNTAxNCw1MDE1LDUwMTYsNTAxNyw1MDE4LDUwMTksCis1MDIwLDUwMjEs NTAyMiw1MDIzLDUwMjQsNTAyNSw1MDI2LDUwMjcsNTAyOCw1MDI5LDUwMzAsNTAzMSw1MDMyLDUw MzMsNTAzNCwKKzUwMzUsNTAzNiw1MDM3LDUwMzgsNTAzOSw1MDQwLDUwNDEsNTA0Miw1MDQzLDUw NDQsNTA0NSw1MDQ2LDUwNDcsNTA0OCw1MDQ5LAorNTA1MCw1MDUxLDUwNTIsNTA1Myw1MDU0LDUw NTUsNTA1Niw1MDU3LDUwNTgsNTA1OSw1MDYwLDUwNjEsNTA2Miw1MDYzLDUwNjQsCis1MDY1LDUw NjYsNTA2Nyw1MDY4LDUwNjksNTA3MCw1MDcxLDUwNzIsNTA3Myw1MDc0LDUwNzUsNTA3Niw1MDc3 LDUwNzgsNTA3OSwKKzUwODAsNTA4MSw1MDgyLDUwODMsNTA4NCw1MDg1LDUwODYsNTA4Nyw1MDg4 LDUwODksNTA5MCw1MDkxLDUwOTIsNTA5Myw1MDk0LAorNTA5NSw1MDk2LDUwOTcsNTA5OCw1MDk5 LDUxMDAsNTEwMSw1MTAyLDUxMDMsNTEwNCw1MTA1LDUxMDYsNTEwNyw1MTA4LDUxMDksCis1MTEw LDUxMTEsNTEwNCw1MTA1LDUxMDYsNTEwNyw1MTA4LDUxMDksNTExOCw1MTE5LDUxMjAsNTEyMSw1 MTIyLDUxMjMsNTEyNCwKKzUxMjUsNTEyNiw1MTI3LDUxMjgsNTEyOSw1MTMwLDUxMzEsNTEzMiw1 MTMzLDUxMzQsNTEzNSw1MTM2LDUxMzcsNTEzOCw1MTM5LAorNTE0MCw1MTQxLDUxNDIsNTE0Myw1 MTQ0LDUxNDUsNTE0Niw1MTQ3LDUxNDgsNTE0OSw1MTUwLDUxNTEsNTE1Miw1MTUzLDUxNTQsCis1 MTU1LDUxNTYsNTE1Nyw1MTU4LDUxNTksNTE2MCw1MTYxLDUxNjIsNTE2Myw1MTY0LDUxNjUsNTE2 Niw1MTY3LDUxNjgsNTE2OSwKKzUxNzAsNTE3MSw1MTcyLDUxNzMsNTE3NCw1MTc1LDUxNzYsNTE3 Nyw1MTc4LDUxNzksNTE4MCw1MTgxLDUxODIsNTE4Myw1MTg0LAorNTE4NSw1MTg2LDUxODcsNTE4 OCw1MTg5LDUxOTAsNTE5MSw1MTkyLDUxOTMsNTE5NCw1MTk1LDUxOTYsNTE5Nyw1MTk4LDUxOTks Cis1MjAwLDUyMDEsNTIwMiw1MjAzLDUyMDQsNTIwNSw1MjA2LDUyMDcsNTIwOCw1MjA5LDUyMTAs NTIxMSw1MjEyLDUyMTMsNTIxNCwKKzUyMTUsNTIxNiw1MjE3LDUyMTgsNTIxOSw1MjIwLDUyMjEs NTIyMiw1MjIzLDUyMjQsNTIyNSw1MjI2LDUyMjcsNTIyOCw1MjI5LAorNTIzMCw1MjMxLDUyMzIs NTIzMyw1MjM0LDUyMzUsNTIzNiw1MjM3LDUyMzgsNTIzOSw1MjQwLDUyNDEsNTI0Miw1MjQzLDUy NDQsCis1MjQ1LDUyNDYsNTI0Nyw1MjQ4LDUyNDksNTI1MCw1MjUxLDUyNTIsNTI1Myw1MjU0LDUy NTUsNTI1Niw1MjU3LDUyNTgsNTI1OSwKKzUyNjAsNTI2MSw1MjYyLDUyNjMsNTI2NCw1MjY1LDUy NjYsNTI2Nyw1MjY4LDUyNjksNTI3MCw1MjcxLDUyNzIsNTI3Myw1Mjc0LAorNTI3NSw1Mjc2LDUy NzcsNTI3OCw1Mjc5LDUyODAsNTI4MSw1MjgyLDUyODMsNTI4NCw1Mjg1LDUyODYsNTI4Nyw1Mjg4 LDUyODksCis1MjkwLDUyOTEsNTI5Miw1MjkzLDUyOTQsNTI5NSw1Mjk2LDUyOTcsNTI5OCw1Mjk5 LDUzMDAsNTMwMSw1MzAyLDUzMDMsNTMwNCwKKzUzMDUsNTMwNiw1MzA3LDUzMDgsNTMwOSw1MzEw LDUzMTEsNTMxMiw1MzEzLDUzMTQsNTMxNSw1MzE2LDUzMTcsNTMxOCw1MzE5LAorNTMyMCw1MzIx LDUzMjIsNTMyMyw1MzI0LDUzMjUsNTMyNiw1MzI3LDUzMjgsNTMyOSw1MzMwLDUzMzEsNTMzMiw1 MzMzLDUzMzQsCis1MzM1LDUzMzYsNTMzNyw1MzM4LDUzMzksNTM0MCw1MzQxLDUzNDIsNTM0Myw1 MzQ0LDUzNDUsNTM0Niw1MzQ3LDUzNDgsNTM0OSwKKzUzNTAsNTM1MSw1MzUyLDUzNTMsNTM1NCw1 MzU1LDUzNTYsNTM1Nyw1MzU4LDUzNTksNTM2MCw1MzYxLDUzNjIsNTM2Myw1MzY0LAorNTM2NSw1 MzY2LDUzNjcsNTM2OCw1MzY5LDUzNzAsNTM3MSw1MzcyLDUzNzMsNTM3NCw1Mzc1LDUzNzYsNTM3 Nyw1Mzc4LDUzNzksCis1MzgwLDUzODEsNTM4Miw1MzgzLDUzODQsNTM4NSw1Mzg2LDUzODcsNTM4 OCw1Mzg5LDUzOTAsNTM5MSw1MzkyLDUzOTMsNTM5NCwKKzUzOTUsNTM5Niw1Mzk3LDUzOTgsNTM5 OSw1NDAwLDU0MDEsNTQwMiw1NDAzLDU0MDQsNTQwNSw1NDA2LDU0MDcsNTQwOCw1NDA5LAorNTQx MCw1NDExLDU0MTIsNTQxMyw1NDE0LDU0MTUsNTQxNiw1NDE3LDU0MTgsNTQxOSw1NDIwLDU0MjEs NTQyMiw1NDIzLDU0MjQsCis1NDI1LDU0MjYsNTQyNyw1NDI4LDU0MjksNTQzMCw1NDMxLDU0MzIs NTQzMyw1NDM0LDU0MzUsNTQzNiw1NDM3LDU0MzgsNTQzOSwKKzU0NDAsNTQ0MSw1NDQyLDU0NDMs NTQ0NCw1NDQ1LDU0NDYsNTQ0Nyw1NDQ4LDU0NDksNTQ1MCw1NDUxLDU0NTIsNTQ1Myw1NDU0LAor NTQ1NSw1NDU2LDU0NTcsNTQ1OCw1NDU5LDU0NjAsNTQ2MSw1NDYyLDU0NjMsNTQ2NCw1NDY1LDU0 NjYsNTQ2Nyw1NDY4LDU0NjksCis1NDcwLDU0NzEsNTQ3Miw1NDczLDU0NzQsNTQ3NSw1NDc2LDU0 NzcsNTQ3OCw1NDc5LDU0ODAsNTQ4MSw1NDgyLDU0ODMsNTQ4NCwKKzU0ODUsNTQ4Niw1NDg3LDU0 ODgsNTQ4OSw1NDkwLDU0OTEsNTQ5Miw1NDkzLDU0OTQsNTQ5NSw1NDk2LDU0OTcsNTQ5OCw1NDk5 LAorNTUwMCw1NTAxLDU1MDIsNTUwMyw1NTA0LDU1MDUsNTUwNiw1NTA3LDU1MDgsNTUwOSw1NTEw LDU1MTEsNTUxMiw1NTEzLDU1MTQsCis1NTE1LDU1MTYsNTUxNyw1NTE4LDU1MTksNTUyMCw1NTIx LDU1MjIsNTUyMyw1NTI0LDU1MjUsNTUyNiw1NTI3LDU1MjgsNTUyOSwKKzU1MzAsNTUzMSw1NTMy LDU1MzMsNTUzNCw1NTM1LDU1MzYsNTUzNyw1NTM4LDU1MzksNTU0MCw1NTQxLDU1NDIsNTU0Myw1 NTQ0LAorNTU0NSw1NTQ2LDU1NDcsNTU0OCw1NTQ5LDU1NTAsNTU1MSw1NTUyLDU1NTMsNTU1NCw1 NTU1LDU1NTYsNTU1Nyw1NTU4LDU1NTksCis1NTYwLDU1NjEsNTU2Miw1NTYzLDU1NjQsNTU2NSw1 NTY2LDU1NjcsNTU2OCw1NTY5LDU1NzAsNTU3MSw1NTcyLDU1NzMsNTU3NCwKKzU1NzUsNTU3Niw1 NTc3LDU1NzgsNTU3OSw1NTgwLDU1ODEsNTU4Miw1NTgzLDU1ODQsNTU4NSw1NTg2LDU1ODcsNTU4 OCw1NTg5LAorNTU5MCw1NTkxLDU1OTIsNTU5Myw1NTk0LDU1OTUsNTU5Niw1NTk3LDU1OTgsNTU5 OSw1NjAwLDU2MDEsNTYwMiw1NjAzLDU2MDQsCis1NjA1LDU2MDYsNTYwNyw1NjA4LDU2MDksNTYx MCw1NjExLDU2MTIsNTYxMyw1NjE0LDU2MTUsNTYxNiw1NjE3LDU2MTgsNTYxOSwKKzU2MjAsNTYy MSw1NjIyLDU2MjMsNTYyNCw1NjI1LDU2MjYsNTYyNyw1NjI4LDU2MjksNTYzMCw1NjMxLDU2MzIs NTYzMyw1NjM0LAorNTYzNSw1NjM2LDU2MzcsNTYzOCw1NjM5LDU2NDAsNTY0MSw1NjQyLDU2NDMs NTY0NCw1NjQ1LDU2NDYsNTY0Nyw1NjQ4LDU2NDksCis1NjUwLDU2NTEsNTY1Miw1NjUzLDU2NTQs NTY1NSw1NjU2LDU2NTcsNTY1OCw1NjU5LDU2NjAsNTY2MSw1NjYyLDU2NjMsNTY2NCwKKzU2NjUs NTY2Niw1NjY3LDU2NjgsNTY2OSw1NjcwLDU2NzEsNTY3Miw1NjczLDU2NzQsNTY3NSw1Njc2LDU2 NzcsNTY3OCw1Njc5LAorNTY4MCw1NjgxLDU2ODIsNTY4Myw1Njg0LDU2ODUsNTY4Niw1Njg3LDU2 ODgsNTY4OSw1NjkwLDU2OTEsNTY5Miw1NjkzLDU2OTQsCis1Njk1LDU2OTYsNTY5Nyw1Njk4LDU2 OTksNTcwMCw1NzAxLDU3MDIsNTcwMyw1NzA0LDU3MDUsNTcwNiw1NzA3LDU3MDgsNTcwOSwKKzU3 MTAsNTcxMSw1NzEyLDU3MTMsNTcxNCw1NzE1LDU3MTYsNTcxNyw1NzE4LDU3MTksNTcyMCw1NzIx LDU3MjIsNTcyMyw1NzI0LAorNTcyNSw1NzI2LDU3MjcsNTcyOCw1NzI5LDU3MzAsNTczMSw1NzMy LDU3MzMsNTczNCw1NzM1LDU3MzYsNTczNyw1NzM4LDU3MzksCis1NzQwLDU3NDEsNTc0Miw1NzQz LDU3NDQsNTc0NSw1NzQ2LDU3NDcsNTc0OCw1NzQ5LDU3NTAsNTc1MSw1NzUyLDU3NTMsNTc1NCwK KzU3NTUsNTc1Niw1NzU3LDU3NTgsNTc1OSw1NzYwLDU3NjEsNTc2Miw1NzYzLDU3NjQsNTc2NSw1 NzY2LDU3NjcsNTc2OCw1NzY5LAorNTc3MCw1NzcxLDU3NzIsNTc3Myw1Nzc0LDU3NzUsNTc3Niw1 Nzc3LDU3NzgsNTc3OSw1NzgwLDU3ODEsNTc4Miw1NzgzLDU3ODQsCis1Nzg1LDU3ODYsNTc4Nyw1 Nzg4LDU3ODksNTc5MCw1NzkxLDU3OTIsNTc5Myw1Nzk0LDU3OTUsNTc5Niw1Nzk3LDU3OTgsNTc5 OSwKKzU4MDAsNTgwMSw1ODAyLDU4MDMsNTgwNCw1ODA1LDU4MDYsNTgwNyw1ODA4LDU4MDksNTgx MCw1ODExLDU4MTIsNTgxMyw1ODE0LAorNTgxNSw1ODE2LDU4MTcsNTgxOCw1ODE5LDU4MjAsNTgy MSw1ODIyLDU4MjMsNTgyNCw1ODI1LDU4MjYsNTgyNyw1ODI4LDU4MjksCis1ODMwLDU4MzEsNTgz Miw1ODMzLDU4MzQsNTgzNSw1ODM2LDU4MzcsNTgzOCw1ODM5LDU4NDAsNTg0MSw1ODQyLDU4NDMs NTg0NCwKKzU4NDUsNTg0Niw1ODQ3LDU4NDgsNTg0OSw1ODUwLDU4NTEsNTg1Miw1ODUzLDU4NTQs NTg1NSw1ODU2LDU4NTcsNTg1OCw1ODU5LAorNTg2MCw1ODYxLDU4NjIsNTg2Myw1ODY0LDU4NjUs NTg2Niw1ODY3LDU4NjgsNTg2OSw1ODcwLDU4NzEsNTg3Miw1ODczLDU4NzQsCis1ODc1LDU4NzYs NTg3Nyw1ODc4LDU4NzksNTg4MCw1ODgxLDU4ODIsNTg4Myw1ODg0LDU4ODUsNTg4Niw1ODg3LDU4 ODgsNTg4OSwKKzU4OTAsNTg5MSw1ODkyLDU4OTMsNTg5NCw1ODk1LDU4OTYsNTg5Nyw1ODk4LDU4 OTksNTkwMCw1OTAxLDU5MDIsNTkwMyw1OTA0LAorNTkwNSw1OTA2LDU5MDcsNTkwOCw1OTA5LDU5 MTAsNTkxMSw1OTEyLDU5MTMsNTkxNCw1OTE1LDU5MTYsNTkxNyw1OTE4LDU5MTksCis1OTIwLDU5 MjEsNTkyMiw1OTIzLDU5MjQsNTkyNSw1OTI2LDU5MjcsNTkyOCw1OTI5LDU5MzAsNTkzMSw1OTMy LDU5MzMsNTkzNCwKKzU5MzUsNTkzNiw1OTM3LDU5MzgsNTkzOSw1OTQwLDU5NDEsNTk0Miw1OTQz LDU5NDQsNTk0NSw1OTQ2LDU5NDcsNTk0OCw1OTQ5LAorNTk1MCw1OTUxLDU5NTIsNTk1Myw1OTU0 LDU5NTUsNTk1Niw1OTU3LDU5NTgsNTk1OSw1OTYwLDU5NjEsNTk2Miw1OTYzLDU5NjQsCis1OTY1 LDU5NjYsNTk2Nyw1OTY4LDU5NjksNTk3MCw1OTcxLDU5NzIsNTk3Myw1OTc0LDU5NzUsNTk3Niw1 OTc3LDU5NzgsNTk3OSwKKzU5ODAsNTk4MSw1OTgyLDU5ODMsNTk4NCw1OTg1LDU5ODYsNTk4Nyw1 OTg4LDU5ODksNTk5MCw1OTkxLDU5OTIsNTk5Myw1OTk0LAorNTk5NSw1OTk2LDU5OTcsNTk5OCw1 OTk5LDYwMDAsNjAwMSw2MDAyLDYwMDMsNjAwNCw2MDA1LDYwMDYsNjAwNyw2MDA4LDYwMDksCis2 MDEwLDYwMTEsNjAxMiw2MDEzLDYwMTQsNjAxNSw2MDE2LDYwMTcsNjAxOCw2MDE5LDYwMjAsNjAy MSw2MDIyLDYwMjMsNjAyNCwKKzYwMjUsNjAyNiw2MDI3LDYwMjgsNjAyOSw2MDMwLDYwMzEsNjAz Miw2MDMzLDYwMzQsNjAzNSw2MDM2LDYwMzcsNjAzOCw2MDM5LAorNjA0MCw2MDQxLDYwNDIsNjA0 Myw2MDQ0LDYwNDUsNjA0Niw2MDQ3LDYwNDgsNjA0OSw2MDUwLDYwNTEsNjA1Miw2MDUzLDYwNTQs Cis2MDU1LDYwNTYsNjA1Nyw2MDU4LDYwNTksNjA2MCw2MDYxLDYwNjIsNjA2Myw2MDY0LDYwNjUs NjA2Niw2MDY3LDYwNjgsNjA2OSwKKzYwNzAsNjA3MSw2MDcyLDYwNzMsNjA3NCw2MDc1LDYwNzYs NjA3Nyw2MDc4LDYwNzksNjA4MCw2MDgxLDYwODIsNjA4Myw2MDg0LAorNjA4NSw2MDg2LDYwODcs NjA4OCw2MDg5LDYwOTAsNjA5MSw2MDkyLDYwOTMsNjA5NCw2MDk1LDYwOTYsNjA5Nyw2MDk4LDYw OTksCis2MTAwLDYxMDEsNjEwMiw2MTAzLDYxMDQsNjEwNSw2MTA2LDYxMDcsNjEwOCw2MTA5LDYx MTAsNjExMSw2MTEyLDYxMTMsNjExNCwKKzYxMTUsNjExNiw2MTE3LDYxMTgsNjExOSw2MTIwLDYx MjEsNjEyMiw2MTIzLDYxMjQsNjEyNSw2MTI2LDYxMjcsNjEyOCw2MTI5LAorNjEzMCw2MTMxLDYx MzIsNjEzMyw2MTM0LDYxMzUsNjEzNiw2MTM3LDYxMzgsNjEzOSw2MTQwLDYxNDEsNjE0Miw2MTQz LDYxNDQsCis2MTQ1LDYxNDYsNjE0Nyw2MTQ4LDYxNDksNjE1MCw2MTUxLDYxNTIsNjE1Myw2MTU0 LDYxNTUsNjE1Niw2MTU3LDYxNTgsNjE1OSwKKzYxNjAsNjE2MSw2MTYyLDYxNjMsNjE2NCw2MTY1 LDYxNjYsNjE2Nyw2MTY4LDYxNjksNjE3MCw2MTcxLDYxNzIsNjE3Myw2MTc0LAorNjE3NSw2MTc2 LDYxNzcsNjE3OCw2MTc5LDYxODAsNjE4MSw2MTgyLDYxODMsNjE4NCw2MTg1LDYxODYsNjE4Nyw2 MTg4LDYxODksCis2MTkwLDYxOTEsNjE5Miw2MTkzLDYxOTQsNjE5NSw2MTk2LDYxOTcsNjE5OCw2 MTk5LDYyMDAsNjIwMSw2MjAyLDYyMDMsNjIwNCwKKzYyMDUsNjIwNiw2MjA3LDYyMDgsNjIwOSw2 MjEwLDYyMTEsNjIxMiw2MjEzLDYyMTQsNjIxNSw2MjE2LDYyMTcsNjIxOCw2MjE5LAorNjIyMCw2 MjIxLDYyMjIsNjIyMyw2MjI0LDYyMjUsNjIyNiw2MjI3LDYyMjgsNjIyOSw2MjMwLDYyMzEsNjIz Miw2MjMzLDYyMzQsCis2MjM1LDYyMzYsNjIzNyw2MjM4LDYyMzksNjI0MCw2MjQxLDYyNDIsNjI0 Myw2MjQ0LDYyNDUsNjI0Niw2MjQ3LDYyNDgsNjI0OSwKKzYyNTAsNjI1MSw2MjUyLDYyNTMsNjI1 NCw2MjU1LDYyNTYsNjI1Nyw2MjU4LDYyNTksNjI2MCw2MjYxLDYyNjIsNjI2Myw2MjY0LAorNjI2 NSw2MjY2LDYyNjcsNjI2OCw2MjY5LDYyNzAsNjI3MSw2MjcyLDYyNzMsNjI3NCw2Mjc1LDYyNzYs NjI3Nyw2Mjc4LDYyNzksCis2MjgwLDYyODEsNjI4Miw2MjgzLDYyODQsNjI4NSw2Mjg2LDYyODcs NjI4OCw2Mjg5LDYyOTAsNjI5MSw2MjkyLDYyOTMsNjI5NCwKKzYyOTUsNjI5Niw2Mjk3LDYyOTgs NjI5OSw2MzAwLDYzMDEsNjMwMiw2MzAzLDYzMDQsNjMwNSw2MzA2LDYzMDcsNjMwOCw2MzA5LAor NjMxMCw2MzExLDYzMTIsNjMxMyw2MzE0LDYzMTUsNjMxNiw2MzE3LDYzMTgsNjMxOSw2MzIwLDYz MjEsNjMyMiw2MzIzLDYzMjQsCis2MzI1LDYzMjYsNjMyNyw2MzI4LDYzMjksNjMzMCw2MzMxLDYz MzIsNjMzMyw2MzM0LDYzMzUsNjMzNiw2MzM3LDYzMzgsNjMzOSwKKzYzNDAsNjM0MSw2MzQyLDYz NDMsNjM0NCw2MzQ1LDYzNDYsNjM0Nyw2MzQ4LDYzNDksNjM1MCw2MzUxLDYzNTIsNjM1Myw2MzU0 LAorNjM1NSw2MzU2LDYzNTcsNjM1OCw2MzU5LDYzNjAsNjM2MSw2MzYyLDYzNjMsNjM2NCw2MzY1 LDYzNjYsNjM2Nyw2MzY4LDYzNjksCis2MzcwLDYzNzEsNjM3Miw2MzczLDYzNzQsNjM3NSw2Mzc2 LDYzNzcsNjM3OCw2Mzc5LDYzODAsNjM4MSw2MzgyLDYzODMsNjM4NCwKKzYzODUsNjM4Niw2Mzg3 LDYzODgsNjM4OSw2MzkwLDYzOTEsNjM5Miw2MzkzLDYzOTQsNjM5NSw2Mzk2LDYzOTcsNjM5OCw2 Mzk5LAorNjQwMCw2NDAxLDY0MDIsNjQwMyw2NDA0LDY0MDUsNjQwNiw2NDA3LDY0MDgsNjQwOSw2 NDEwLDY0MTEsNjQxMiw2NDEzLDY0MTQsCis2NDE1LDY0MTYsNjQxNyw2NDE4LDY0MTksNjQyMCw2 NDIxLDY0MjIsNjQyMyw2NDI0LDY0MjUsNjQyNiw2NDI3LDY0MjgsNjQyOSwKKzY0MzAsNjQzMSw2 NDMyLDY0MzMsNjQzNCw2NDM1LDY0MzYsNjQzNyw2NDM4LDY0MzksNjQ0MCw2NDQxLDY0NDIsNjQ0 Myw2NDQ0LAorNjQ0NSw2NDQ2LDY0NDcsNjQ0OCw2NDQ5LDY0NTAsNjQ1MSw2NDUyLDY0NTMsNjQ1 NCw2NDU1LDY0NTYsNjQ1Nyw2NDU4LDY0NTksCis2NDYwLDY0NjEsNjQ2Miw2NDYzLDY0NjQsNjQ2 NSw2NDY2LDY0NjcsNjQ2OCw2NDY5LDY0NzAsNjQ3MSw2NDcyLDY0NzMsNjQ3NCwKKzY0NzUsNjQ3 Niw2NDc3LDY0NzgsNjQ3OSw2NDgwLDY0ODEsNjQ4Miw2NDgzLDY0ODQsNjQ4NSw2NDg2LDY0ODcs NjQ4OCw2NDg5LAorNjQ5MCw2NDkxLDY0OTIsNjQ5Myw2NDk0LDY0OTUsNjQ5Niw2NDk3LDY0OTgs NjQ5OSw2NTAwLDY1MDEsNjUwMiw2NTAzLDY1MDQsCis2NTA1LDY1MDYsNjUwNyw2NTA4LDY1MDks NjUxMCw2NTExLDY1MTIsNjUxMyw2NTE0LDY1MTUsNjUxNiw2NTE3LDY1MTgsNjUxOSwKKzY1MjAs NjUyMSw2NTIyLDY1MjMsNjUyNCw2NTI1LDY1MjYsNjUyNyw2NTI4LDY1MjksNjUzMCw2NTMxLDY1 MzIsNjUzMyw2NTM0LAorNjUzNSw2NTM2LDY1MzcsNjUzOCw2NTM5LDY1NDAsNjU0MSw2NTQyLDY1 NDMsNjU0NCw2NTQ1LDY1NDYsNjU0Nyw2NTQ4LDY1NDksCis2NTUwLDY1NTEsNjU1Miw2NTUzLDY1 NTQsNjU1NSw2NTU2LDY1NTcsNjU1OCw2NTU5LDY1NjAsNjU2MSw2NTYyLDY1NjMsNjU2NCwKKzY1 NjUsNjU2Niw2NTY3LDY1NjgsNjU2OSw2NTcwLDY1NzEsNjU3Miw2NTczLDY1NzQsNjU3NSw2NTc2 LDY1NzcsNjU3OCw2NTc5LAorNjU4MCw2NTgxLDY1ODIsNjU4Myw2NTg0LDY1ODUsNjU4Niw2NTg3 LDY1ODgsNjU4OSw2NTkwLDY1OTEsNjU5Miw2NTkzLDY1OTQsCis2NTk1LDY1OTYsNjU5Nyw2NTk4 LDY1OTksNjYwMCw2NjAxLDY2MDIsNjYwMyw2NjA0LDY2MDUsNjYwNiw2NjA3LDY2MDgsNjYwOSwK KzY2MTAsNjYxMSw2NjEyLDY2MTMsNjYxNCw2NjE1LDY2MTYsNjYxNyw2NjE4LDY2MTksNjYyMCw2 NjIxLDY2MjIsNjYyMyw2NjI0LAorNjYyNSw2NjI2LDY2MjcsNjYyOCw2NjI5LDY2MzAsNjYzMSw2 NjMyLDY2MzMsNjYzNCw2NjM1LDY2MzYsNjYzNyw2NjM4LDY2MzksCis2NjQwLDY2NDEsNjY0Miw2 NjQzLDY2NDQsNjY0NSw2NjQ2LDY2NDcsNjY0OCw2NjQ5LDY2NTAsNjY1MSw2NjUyLDY2NTMsNjY1 NCwKKzY2NTUsNjY1Niw2NjU3LDY2NTgsNjY1OSw2NjYwLDY2NjEsNjY2Miw2NjYzLDY2NjQsNjY2 NSw2NjY2LDY2NjcsNjY2OCw2NjY5LAorNjY3MCw2NjcxLDY2NzIsNjY3Myw2Njc0LDY2NzUsNjY3 Niw2Njc3LDY2NzgsNjY3OSw2NjgwLDY2ODEsNjY4Miw2NjgzLDY2ODQsCis2Njg1LDY2ODYsNjY4 Nyw2Njg4LDY2ODksNjY5MCw2NjkxLDY2OTIsNjY5Myw2Njk0LDY2OTUsNjY5Niw2Njk3LDY2OTgs NjY5OSwKKzY3MDAsNjcwMSw2NzAyLDY3MDMsNjcwNCw2NzA1LDY3MDYsNjcwNyw2NzA4LDY3MDks NjcxMCw2NzExLDY3MTIsNjcxMyw2NzE0LAorNjcxNSw2NzE2LDY3MTcsNjcxOCw2NzE5LDY3MjAs NjcyMSw2NzIyLDY3MjMsNjcyNCw2NzI1LDY3MjYsNjcyNyw2NzI4LDY3MjksCis2NzMwLDY3MzEs NjczMiw2NzMzLDY3MzQsNjczNSw2NzM2LDY3MzcsNjczOCw2NzM5LDY3NDAsNjc0MSw2NzQyLDY3 NDMsNjc0NCwKKzY3NDUsNjc0Niw2NzQ3LDY3NDgsNjc0OSw2NzUwLDY3NTEsNjc1Miw2NzUzLDY3 NTQsNjc1NSw2NzU2LDY3NTcsNjc1OCw2NzU5LAorNjc2MCw2NzYxLDY3NjIsNjc2Myw2NzY0LDY3 NjUsNjc2Niw2NzY3LDY3NjgsNjc2OSw2NzcwLDY3NzEsNjc3Miw2NzczLDY3NzQsCis2Nzc1LDY3 NzYsNjc3Nyw2Nzc4LDY3NzksNjc4MCw2NzgxLDY3ODIsNjc4Myw2Nzg0LDY3ODUsNjc4Niw2Nzg3 LDY3ODgsNjc4OSwKKzY3OTAsNjc5MSw2NzkyLDY3OTMsNjc5NCw2Nzk1LDY3OTYsNjc5Nyw2Nzk4 LDY3OTksNjgwMCw2ODAxLDY4MDIsNjgwMyw2ODA0LAorNjgwNSw2ODA2LDY4MDcsNjgwOCw2ODA5 LDY4MTAsNjgxMSw2ODEyLDY4MTMsNjgxNCw2ODE1LDY4MTYsNjgxNyw2ODE4LDY4MTksCis2ODIw LDY4MjEsNjgyMiw2ODIzLDY4MjQsNjgyNSw2ODI2LDY4MjcsNjgyOCw2ODI5LDY4MzAsNjgzMSw2 ODMyLDY4MzMsNjgzNCwKKzY4MzUsNjgzNiw2ODM3LDY4MzgsNjgzOSw2ODQwLDY4NDEsNjg0Miw2 ODQzLDY4NDQsNjg0NSw2ODQ2LDY4NDcsNjg0OCw2ODQ5LAorNjg1MCw2ODUxLDY4NTIsNjg1Myw2 ODU0LDY4NTUsNjg1Niw2ODU3LDY4NTgsNjg1OSw2ODYwLDY4NjEsNjg2Miw2ODYzLDY4NjQsCis2 ODY1LDY4NjYsNjg2Nyw2ODY4LDY4NjksNjg3MCw2ODcxLDY4NzIsNjg3Myw2ODc0LDY4NzUsNjg3 Niw2ODc3LDY4NzgsNjg3OSwKKzY4ODAsNjg4MSw2ODgyLDY4ODMsNjg4NCw2ODg1LDY4ODYsNjg4 Nyw2ODg4LDY4ODksNjg5MCw2ODkxLDY4OTIsNjg5Myw2ODk0LAorNjg5NSw2ODk2LDY4OTcsNjg5 OCw2ODk5LDY5MDAsNjkwMSw2OTAyLDY5MDMsNjkwNCw2OTA1LDY5MDYsNjkwNyw2OTA4LDY5MDks Cis2OTEwLDY5MTEsNjkxMiw2OTEzLDY5MTQsNjkxNSw2OTE2LDY5MTcsNjkxOCw2OTE5LDY5MjAs NjkyMSw2OTIyLDY5MjMsNjkyNCwKKzY5MjUsNjkyNiw2OTI3LDY5MjgsNjkyOSw2OTMwLDY5MzEs NjkzMiw2OTMzLDY5MzQsNjkzNSw2OTM2LDY5MzcsNjkzOCw2OTM5LAorNjk0MCw2OTQxLDY5NDIs Njk0Myw2OTQ0LDY5NDUsNjk0Niw2OTQ3LDY5NDgsNjk0OSw2OTUwLDY5NTEsNjk1Miw2OTUzLDY5 NTQsCis2OTU1LDY5NTYsNjk1Nyw2OTU4LDY5NTksNjk2MCw2OTYxLDY5NjIsNjk2Myw2OTY0LDY5 NjUsNjk2Niw2OTY3LDY5NjgsNjk2OSwKKzY5NzAsNjk3MSw2OTcyLDY5NzMsNjk3NCw2OTc1LDY5 NzYsNjk3Nyw2OTc4LDY5NzksNjk4MCw2OTgxLDY5ODIsNjk4Myw2OTg0LAorNjk4NSw2OTg2LDY5 ODcsNjk4OCw2OTg5LDY5OTAsNjk5MSw2OTkyLDY5OTMsNjk5NCw2OTk1LDY5OTYsNjk5Nyw2OTk4 LDY5OTksCis3MDAwLDcwMDEsNzAwMiw3MDAzLDcwMDQsNzAwNSw3MDA2LDcwMDcsNzAwOCw3MDA5 LDcwMTAsNzAxMSw3MDEyLDcwMTMsNzAxNCwKKzcwMTUsNzAxNiw3MDE3LDcwMTgsNzAxOSw3MDIw LDcwMjEsNzAyMiw3MDIzLDcwMjQsNzAyNSw3MDI2LDcwMjcsNzAyOCw3MDI5LAorNzAzMCw3MDMx LDcwMzIsNzAzMyw3MDM0LDcwMzUsNzAzNiw3MDM3LDcwMzgsNzAzOSw3MDQwLDcwNDEsNzA0Miw3 MDQzLDcwNDQsCis3MDQ1LDcwNDYsNzA0Nyw3MDQ4LDcwNDksNzA1MCw3MDUxLDcwNTIsNzA1Myw3 MDU0LDcwNTUsNzA1Niw3MDU3LDcwNTgsNzA1OSwKKzcwNjAsNzA2MSw3MDYyLDcwNjMsNzA2NCw3 MDY1LDcwNjYsNzA2Nyw3MDY4LDcwNjksNzA3MCw3MDcxLDcwNzIsNzA3Myw3MDc0LAorNzA3NSw3 MDc2LDcwNzcsNzA3OCw3MDc5LDcwODAsNzA4MSw3MDgyLDcwODMsNzA4NCw3MDg1LDcwODYsNzA4 Nyw3MDg4LDcwODksCis3MDkwLDcwOTEsNzA5Miw3MDkzLDcwOTQsNzA5NSw3MDk2LDcwOTcsNzA5 OCw3MDk5LDcxMDAsNzEwMSw3MTAyLDcxMDMsNzEwNCwKKzcxMDUsNzEwNiw3MTA3LDcxMDgsNzEw OSw3MTEwLDcxMTEsNzExMiw3MTEzLDcxMTQsNzExNSw3MTE2LDcxMTcsNzExOCw3MTE5LAorNzEy MCw3MTIxLDcxMjIsNzEyMyw3MTI0LDcxMjUsNzEyNiw3MTI3LDcxMjgsNzEyOSw3MTMwLDcxMzEs NzEzMiw3MTMzLDcxMzQsCis3MTM1LDcxMzYsNzEzNyw3MTM4LDcxMzksNzE0MCw3MTQxLDcxNDIs NzE0Myw3MTQ0LDcxNDUsNzE0Niw3MTQ3LDcxNDgsNzE0OSwKKzcxNTAsNzE1MSw3MTUyLDcxNTMs NzE1NCw3MTU1LDcxNTYsNzE1Nyw3MTU4LDcxNTksNzE2MCw3MTYxLDcxNjIsNzE2Myw3MTY0LAor NzE2NSw3MTY2LDcxNjcsNzE2OCw3MTY5LDcxNzAsNzE3MSw3MTcyLDcxNzMsNzE3NCw3MTc1LDcx NzYsNzE3Nyw3MTc4LDcxNzksCis3MTgwLDcxODEsNzE4Miw3MTgzLDcxODQsNzE4NSw3MTg2LDcx ODcsNzE4OCw3MTg5LDcxOTAsNzE5MSw3MTkyLDcxOTMsNzE5NCwKKzcxOTUsNzE5Niw3MTk3LDcx OTgsNzE5OSw3MjAwLDcyMDEsNzIwMiw3MjAzLDcyMDQsNzIwNSw3MjA2LDcyMDcsNzIwOCw3MjA5 LAorNzIxMCw3MjExLDcyMTIsNzIxMyw3MjE0LDcyMTUsNzIxNiw3MjE3LDcyMTgsNzIxOSw3MjIw LDcyMjEsNzIyMiw3MjIzLDcyMjQsCis3MjI1LDcyMjYsNzIyNyw3MjI4LDcyMjksNzIzMCw3MjMx LDcyMzIsNzIzMyw3MjM0LDcyMzUsNzIzNiw3MjM3LDcyMzgsNzIzOSwKKzcyNDAsNzI0MSw3MjQy LDcyNDMsNzI0NCw3MjQ1LDcyNDYsNzI0Nyw3MjQ4LDcyNDksNzI1MCw3MjUxLDcyNTIsNzI1Myw3 MjU0LAorNzI1NSw3MjU2LDcyNTcsNzI1OCw3MjU5LDcyNjAsNzI2MSw3MjYyLDcyNjMsNzI2NCw3 MjY1LDcyNjYsNzI2Nyw3MjY4LDcyNjksCis3MjcwLDcyNzEsNzI3Miw3MjczLDcyNzQsNzI3NSw3 Mjc2LDcyNzcsNzI3OCw3Mjc5LDcyODAsNzI4MSw3MjgyLDcyODMsNzI4NCwKKzcyODUsNzI4Niw3 Mjg3LDcyODgsNzI4OSw3MjkwLDcyOTEsNzI5Miw3MjkzLDcyOTQsNzI5NSwxMDQyLDEwNDQsMTA1 NCwxMDU3LAorMTA1OCwxMDU4LDEwNjYsMTEyMiw0MjU3MEwsNzMwNSw3MzA2LDczMDcsNzMwOCw3 MzA5LDczMTAsNzMxMSw3MzEyLDczMTMsCis3MzE0LDczMTUsNzMxNiw3MzE3LDczMTgsNzMxOSw3 MzIwLDczMjEsNzMyMiw3MzIzLDczMjQsNzMyNSw3MzI2LDczMjcsNzMyOCwKKzczMjksNzMzMCw3 MzMxLDczMzIsNzMzMyw3MzM0LDczMzUsNzMzNiw3MzM3LDczMzgsNzMzOSw3MzQwLDczNDEsNzM0 Miw3MzQzLAorNzM0NCw3MzQ1LDczNDYsNzM0Nyw3MzQ4LDczNDksNzM1MCw3MzUxLDczNTIsNzM1 Myw3MzU0LDczNTUsNzM1Niw3MzU3LDczNTgsCis3MzU5LDczNjAsNzM2MSw3MzYyLDczNjMsNzM2 NCw3MzY1LDczNjYsNzM2Nyw3MzY4LDczNjksNzM3MCw3MzcxLDczNzIsNzM3MywKKzczNzQsNzM3 NSw3Mzc2LDczNzcsNzM3OCw3Mzc5LDczODAsNzM4MSw3MzgyLDczODMsNzM4NCw3Mzg1LDczODYs NzM4Nyw3Mzg4LAorNzM4OSw3MzkwLDczOTEsNzM5Miw3MzkzLDczOTQsNzM5NSw3Mzk2LDczOTcs NzM5OCw3Mzk5LDc0MDAsNzQwMSw3NDAyLDc0MDMsCis3NDA0LDc0MDUsNzQwNiw3NDA3LDc0MDgs NzQwOSw3NDEwLDc0MTEsNzQxMiw3NDEzLDc0MTQsNzQxNSw3NDE2LDc0MTcsNzQxOCwKKzc0MTks NzQyMCw3NDIxLDc0MjIsNzQyMyw3NDI0LDc0MjUsNzQyNiw3NDI3LDc0MjgsNzQyOSw3NDMwLDc0 MzEsNzQzMiw3NDMzLAorNzQzNCw3NDM1LDc0MzYsNzQzNyw3NDM4LDc0MzksNzQ0MCw3NDQxLDc0 NDIsNzQ0Myw3NDQ0LDc0NDUsNzQ0Niw3NDQ3LDc0NDgsCis3NDQ5LDc0NTAsNzQ1MSw3NDUyLDc0 NTMsNzQ1NCw3NDU1LDc0NTYsNzQ1Nyw3NDU4LDc0NTksNzQ2MCw3NDYxLDc0NjIsNzQ2MywKKzc0 NjQsNzQ2NSw3NDY2LDc0NjcsNzQ2OCw3NDY5LDc0NzAsNzQ3MSw3NDcyLDc0NzMsNzQ3NCw3NDc1 LDc0NzYsNzQ3Nyw3NDc4LAorNzQ3OSw3NDgwLDc0ODEsNzQ4Miw3NDgzLDc0ODQsNzQ4NSw3NDg2 LDc0ODcsNzQ4OCw3NDg5LDc0OTAsNzQ5MSw3NDkyLDc0OTMsCis3NDk0LDc0OTUsNzQ5Niw3NDk3 LDc0OTgsNzQ5OSw3NTAwLDc1MDEsNzUwMiw3NTAzLDc1MDQsNzUwNSw3NTA2LDc1MDcsNzUwOCwK Kzc1MDksNzUxMCw3NTExLDc1MTIsNzUxMyw3NTE0LDc1MTUsNzUxNiw3NTE3LDc1MTgsNzUxOSw3 NTIwLDc1MjEsNzUyMiw3NTIzLAorNzUyNCw3NTI1LDc1MjYsNzUyNyw3NTI4LDc1MjksNzUzMCw3 NTMxLDc1MzIsNzUzMyw3NTM0LDc1MzUsNzUzNiw3NTM3LDc1MzgsCis3NTM5LDc1NDAsNzU0MSw3 NTQyLDc1NDMsNzU0NCw0Mjg3N0wsNzU0Niw3NTQ3LDc1NDgsMTEzNjMsNzU1MCw3NTUxLDc1NTIs Cis3NTUzLDc1NTQsNzU1NSw3NTU2LDc1NTcsNzU1OCw3NTU5LDc1NjAsNzU2MSw3NTYyLDc1NjMs NzU2NCw3NTY1LDc1NjYsNzU2NywKKzc1NjgsNzU2OSw3NTcwLDc1NzEsNzU3Miw3NTczLDc1NzQs NzU3NSw3NTc2LDc1NzcsNzU3OCw3NTc5LDc1ODAsNzU4MSw3NTgyLAorNzU4Myw3NTg0LDc1ODUs NzU4Niw3NTg3LDc1ODgsNzU4OSw3NTkwLDc1OTEsNzU5Miw3NTkzLDc1OTQsNzU5NSw3NTk2LDc1 OTcsCis3NTk4LDc1OTksNzYwMCw3NjAxLDc2MDIsNzYwMyw3NjA0LDc2MDUsNzYwNiw3NjA3LDc2 MDgsNzYwOSw3NjEwLDc2MTEsNzYxMiwKKzc2MTMsNzYxNCw3NjE1LDc2MTYsNzYxNyw3NjE4LDc2 MTksNzYyMCw3NjIxLDc2MjIsNzYyMyw3NjI0LDc2MjUsNzYyNiw3NjI3LAorNzYyOCw3NjI5LDc2 MzAsNzYzMSw3NjMyLDc2MzMsNzYzNCw3NjM1LDc2MzYsNzYzNyw3NjM4LDc2MzksNzY0MCw3NjQx LDc2NDIsCis3NjQzLDc2NDQsNzY0NSw3NjQ2LDc2NDcsNzY0OCw3NjQ5LDc2NTAsNzY1MSw3NjUy LDc2NTMsNzY1NCw3NjU1LDc2NTYsNzY1NywKKzc2NTgsNzY1OSw3NjYwLDc2NjEsNzY2Miw3NjYz LDc2NjQsNzY2NSw3NjY2LDc2NjcsNzY2OCw3NjY5LDc2NzAsNzY3MSw3NjcyLAorNzY3Myw3Njc0 LDc2NzUsNzY3Niw3Njc3LDc2NzgsNzY3OSw3NjgwLDc2ODAsNzY4Miw3NjgyLDc2ODQsNzY4NCw3 Njg2LDc2ODYsCis3Njg4LDc2ODgsNzY5MCw3NjkwLDc2OTIsNzY5Miw3Njk0LDc2OTQsNzY5Niw3 Njk2LDc2OTgsNzY5OCw3NzAwLDc3MDAsNzcwMiwKKzc3MDIsNzcwNCw3NzA0LDc3MDYsNzcwNiw3 NzA4LDc3MDgsNzcxMCw3NzEwLDc3MTIsNzcxMiw3NzE0LDc3MTQsNzcxNiw3NzE2LAorNzcxOCw3 NzE4LDc3MjAsNzcyMCw3NzIyLDc3MjIsNzcyNCw3NzI0LDc3MjYsNzcyNiw3NzI4LDc3MjgsNzcz MCw3NzMwLDc3MzIsCis3NzMyLDc3MzQsNzczNCw3NzM2LDc3MzYsNzczOCw3NzM4LDc3NDAsNzc0 MCw3NzQyLDc3NDIsNzc0NCw3NzQ0LDc3NDYsNzc0NiwKKzc3NDgsNzc0OCw3NzUwLDc3NTAsNzc1 Miw3NzUyLDc3NTQsNzc1NCw3NzU2LDc3NTYsNzc1OCw3NzU4LDc3NjAsNzc2MCw3NzYyLAorNzc2 Miw3NzY0LDc3NjQsNzc2Niw3NzY2LDc3NjgsNzc2OCw3NzcwLDc3NzAsNzc3Miw3NzcyLDc3NzQs Nzc3NCw3Nzc2LDc3NzYsCis3Nzc4LDc3NzgsNzc4MCw3NzgwLDc3ODIsNzc4Miw3Nzg0LDc3ODQs Nzc4Niw3Nzg2LDc3ODgsNzc4OCw3NzkwLDc3OTAsNzc5MiwKKzc3OTIsNzc5NCw3Nzk0LDc3OTYs Nzc5Niw3Nzk4LDc3OTgsNzgwMCw3ODAwLDc4MDIsNzgwMiw3ODA0LDc4MDQsNzgwNiw3ODA2LAor NzgwOCw3ODA4LDc4MTAsNzgxMCw3ODEyLDc4MTIsNzgxNCw3ODE0LDc4MTYsNzgxNiw3ODE4LDc4 MTgsNzgyMCw3ODIwLDc4MjIsCis3ODIyLDc4MjQsNzgyNCw3ODI2LDc4MjYsNzgyOCw3ODI4LDc4 MzAsNzgzMSw3ODMyLDc4MzMsNzgzNCw3Nzc2LDc4MzYsNzgzNywKKzc4MzgsNzgzOSw3ODQwLDc4 NDAsNzg0Miw3ODQyLDc4NDQsNzg0NCw3ODQ2LDc4NDYsNzg0OCw3ODQ4LDc4NTAsNzg1MCw3ODUy LAorNzg1Miw3ODU0LDc4NTQsNzg1Niw3ODU2LDc4NTgsNzg1OCw3ODYwLDc4NjAsNzg2Miw3ODYy LDc4NjQsNzg2NCw3ODY2LDc4NjYsCis3ODY4LDc4NjgsNzg3MCw3ODcwLDc4NzIsNzg3Miw3ODc0 LDc4NzQsNzg3Niw3ODc2LDc4NzgsNzg3OCw3ODgwLDc4ODAsNzg4MiwKKzc4ODIsNzg4NCw3ODg0 LDc4ODYsNzg4Niw3ODg4LDc4ODgsNzg5MCw3ODkwLDc4OTIsNzg5Miw3ODk0LDc4OTQsNzg5Niw3 ODk2LAorNzg5OCw3ODk4LDc5MDAsNzkwMCw3OTAyLDc5MDIsNzkwNCw3OTA0LDc5MDYsNzkwNiw3 OTA4LDc5MDgsNzkxMCw3OTEwLDc5MTIsCis3OTEyLDc5MTQsNzkxNCw3OTE2LDc5MTYsNzkxOCw3 OTE4LDc5MjAsNzkyMCw3OTIyLDc5MjIsNzkyNCw3OTI0LDc5MjYsNzkyNiwKKzc5MjgsNzkyOCw3 OTMwLDc5MzAsNzkzMiw3OTMyLDc5MzQsNzkzNCw3OTQ0LDc5NDUsNzk0Niw3OTQ3LDc5NDgsNzk0 OSw3OTUwLAorNzk1MSw3OTQ0LDc5NDUsNzk0Niw3OTQ3LDc5NDgsNzk0OSw3OTUwLDc5NTEsNzk2 MCw3OTYxLDc5NjIsNzk2Myw3OTY0LDc5NjUsCis3OTU4LDc5NTksNzk2MCw3OTYxLDc5NjIsNzk2 Myw3OTY0LDc5NjUsNzk2Niw3OTY3LDc5NzYsNzk3Nyw3OTc4LDc5NzksNzk4MCwKKzc5ODEsNzk4 Miw3OTgzLDc5NzYsNzk3Nyw3OTc4LDc5NzksNzk4MCw3OTgxLDc5ODIsNzk4Myw3OTkyLDc5OTMs Nzk5NCw3OTk1LAorNzk5Niw3OTk3LDc5OTgsNzk5OSw3OTkyLDc5OTMsNzk5NCw3OTk1LDc5OTYs Nzk5Nyw3OTk4LDc5OTksODAwOCw4MDA5LDgwMTAsCis4MDExLDgwMTIsODAxMyw4MDA2LDgwMDcs ODAwOCw4MDA5LDgwMTAsODAxMSw4MDEyLDgwMTMsODAxNCw4MDE1LDgwMTYsODAyNSwKKzgwMTgs ODAyNyw4MDIwLDgwMjksODAyMiw4MDMxLDgwMjQsODAyNSw4MDI2LDgwMjcsODAyOCw4MDI5LDgw MzAsODAzMSw4MDQwLAorODA0MSw4MDQyLDgwNDMsODA0NCw4MDQ1LDgwNDYsODA0Nyw4MDQwLDgw NDEsODA0Miw4MDQzLDgwNDQsODA0NSw4MDQ2LDgwNDcsCis4MTIyLDgxMjMsODEzNiw4MTM3LDgx MzgsODEzOSw4MTU0LDgxNTUsODE4NCw4MTg1LDgxNzAsODE3MSw4MTg2LDgxODcsODA2MiwKKzgw NjMsODA2NCw4MDY1LDgwNjYsODA2Nyw4MDY4LDgwNjksODA3MCw4MDcxLDgwNzIsODA3Myw4MDc0 LDgwNzUsODA3Niw4MDc3LAorODA3OCw4MDc5LDgwODAsODA4MSw4MDgyLDgwODMsODA4NCw4MDg1 LDgwODYsODA4Nyw4MDg4LDgwODksODA5MCw4MDkxLDgwOTIsCis4MDkzLDgwOTQsODA5NSw4MDk2 LDgwOTcsODA5OCw4MDk5LDgxMDAsODEwMSw4MTAyLDgxMDMsODEwNCw4MTA1LDgxMDYsODEwNywK KzgxMDgsODEwOSw4MTEwLDgxMTEsODEyMCw4MTIxLDgxMTQsODExNSw4MTE2LDgxMTcsODExOCw4 MTE5LDgxMjAsODEyMSw4MTIyLAorODEyMyw4MTI0LDgxMjUsOTIxLDgxMjcsODEyOCw4MTI5LDgx MzAsODEzMSw4MTMyLDgxMzMsODEzNCw4MTM1LDgxMzYsODEzNywKKzgxMzgsODEzOSw4MTQwLDgx NDEsODE0Miw4MTQzLDgxNTIsODE1Myw4MTQ2LDgxNDcsODE0OCw4MTQ5LDgxNTAsODE1MSw4MTUy LAorODE1Myw4MTU0LDgxNTUsODE1Niw4MTU3LDgxNTgsODE1OSw4MTY4LDgxNjksODE2Miw4MTYz LDgxNjQsODE3Miw4MTY2LDgxNjcsCis4MTY4LDgxNjksODE3MCw4MTcxLDgxNzIsODE3Myw4MTc0 LDgxNzUsODE3Niw4MTc3LDgxNzgsODE3OSw4MTgwLDgxODEsODE4MiwKKzgxODMsODE4NCw4MTg1 LDgxODYsODE4Nyw4MTg4LDgxODksODE5MCw4MTkxLDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4 MTk3LAorODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4 MjA4LDgyMDksODIxMCw4MjExLDgyMTIsCis4MjEzLDgyMTQsODIxNSw4MjE2LDgyMTcsODIxOCw4 MjE5LDgyMjAsODIyMSw4MjIyLDgyMjMsODIyNCw4MjI1LDgyMjYsODIyNywKKzgyMjgsODIyOSw4 MjMwLDgyMzEsODIzMiw4MjMzLDgyMzQsODIzNSw4MjM2LDgyMzcsODIzOCw4MjM5LDgyNDAsODI0 MSw4MjQyLAorODI0Myw4MjQ0LDgyNDUsODI0Niw4MjQ3LDgyNDgsODI0OSw4MjUwLDgyNTEsODI1 Miw4MjUzLDgyNTQsODI1NSw4MjU2LDgyNTcsCis4MjU4LDgyNTksODI2MCw4MjYxLDgyNjIsODI2 Myw4MjY0LDgyNjUsODI2Niw4MjY3LDgyNjgsODI2OSw4MjcwLDgyNzEsODI3MiwKKzgyNzMsODI3 NCw4Mjc1LDgyNzYsODI3Nyw4Mjc4LDgyNzksODI4MCw4MjgxLDgyODIsODI4Myw4Mjg0LDgyODUs ODI4Niw4Mjg3LAorODI4OCw4Mjg5LDgyOTAsODI5MSw4MjkyLDgyOTMsODI5NCw4Mjk1LDgyOTYs ODI5Nyw4Mjk4LDgyOTksODMwMCw4MzAxLDgzMDIsCis4MzAzLDgzMDQsODMwNSw4MzA2LDgzMDcs ODMwOCw4MzA5LDgzMTAsODMxMSw4MzEyLDgzMTMsODMxNCw4MzE1LDgzMTYsODMxNywKKzgzMTgs ODMxOSw4MzIwLDgzMjEsODMyMiw4MzIzLDgzMjQsODMyNSw4MzI2LDgzMjcsODMyOCw4MzI5LDgz MzAsODMzMSw4MzMyLAorODMzMyw4MzM0LDgzMzUsODMzNiw4MzM3LDgzMzgsODMzOSw4MzQwLDgz NDEsODM0Miw4MzQzLDgzNDQsODM0NSw4MzQ2LDgzNDcsCis4MzQ4LDgzNDksODM1MCw4MzUxLDgz NTIsODM1Myw4MzU0LDgzNTUsODM1Niw4MzU3LDgzNTgsODM1OSw4MzYwLDgzNjEsODM2MiwKKzgz NjMsODM2NCw4MzY1LDgzNjYsODM2Nyw4MzY4LDgzNjksODM3MCw4MzcxLDgzNzIsODM3Myw4Mzc0 LDgzNzUsODM3Niw4Mzc3LAorODM3OCw4Mzc5LDgzODAsODM4MSw4MzgyLDgzODMsODM4NCw4Mzg1 LDgzODYsODM4Nyw4Mzg4LDgzODksODM5MCw4MzkxLDgzOTIsCis4MzkzLDgzOTQsODM5NSw4Mzk2 LDgzOTcsODM5OCw4Mzk5LDg0MDAsODQwMSw4NDAyLDg0MDMsODQwNCw4NDA1LDg0MDYsODQwNywK Kzg0MDgsODQwOSw4NDEwLDg0MTEsODQxMiw4NDEzLDg0MTQsODQxNSw4NDE2LDg0MTcsODQxOCw4 NDE5LDg0MjAsODQyMSw4NDIyLAorODQyMyw4NDI0LDg0MjUsODQyNiw4NDI3LDg0MjgsODQyOSw4 NDMwLDg0MzEsODQzMiw4NDMzLDg0MzQsODQzNSw4NDM2LDg0MzcsCis4NDM4LDg0MzksODQ0MCw4 NDQxLDg0NDIsODQ0Myw4NDQ0LDg0NDUsODQ0Niw4NDQ3LDg0NDgsODQ0OSw4NDUwLDg0NTEsODQ1 MiwKKzg0NTMsODQ1NCw4NDU1LDg0NTYsODQ1Nyw4NDU4LDg0NTksODQ2MCw4NDYxLDg0NjIsODQ2 Myw4NDY0LDg0NjUsODQ2Niw4NDY3LAorODQ2OCw4NDY5LDg0NzAsODQ3MSw4NDcyLDg0NzMsODQ3 NCw4NDc1LDg0NzYsODQ3Nyw4NDc4LDg0NzksODQ4MCw4NDgxLDg0ODIsCis4NDgzLDg0ODQsODQ4 NSw4NDg2LDg0ODcsODQ4OCw4NDg5LDg0OTAsODQ5MSw4NDkyLDg0OTMsODQ5NCw4NDk1LDg0OTYs ODQ5NywKKzg0OTgsODQ5OSw4NTAwLDg1MDEsODUwMiw4NTAzLDg1MDQsODUwNSw4NTA2LDg1MDcs ODUwOCw4NTA5LDg1MTAsODUxMSw4NTEyLAorODUxMyw4NTE0LDg1MTUsODUxNiw4NTE3LDg1MTgs ODUxOSw4NTIwLDg1MjEsODUyMiw4NTIzLDg1MjQsODUyNSw4NDk4LDg1MjcsCis4NTI4LDg1Mjks ODUzMCw4NTMxLDg1MzIsODUzMyw4NTM0LDg1MzUsODUzNiw4NTM3LDg1MzgsODUzOSw4NTQwLDg1 NDEsODU0MiwKKzg1NDMsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1 NTIsODU1Myw4NTU0LDg1NTUsODU1Niw4NTU3LAorODU1OCw4NTU5LDg1NDQsODU0NSw4NTQ2LDg1 NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDg1NTYsCis4NTU3LDg1 NTgsODU1OSw4NTc2LDg1NzcsODU3OCw4NTc5LDg1NzksODU4MSw4NTgyLDg1ODMsODU4NCw4NTg1 LDg1ODYsODU4NywKKzg1ODgsODU4OSw4NTkwLDg1OTEsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2 LDg1OTcsODU5OCw4NTk5LDg2MDAsODYwMSw4NjAyLAorODYwMyw4NjA0LDg2MDUsODYwNiw4NjA3 LDg2MDgsODYwOSw4NjEwLDg2MTEsODYxMiw4NjEzLDg2MTQsODYxNSw4NjE2LDg2MTcsCis4NjE4 LDg2MTksODYyMCw4NjIxLDg2MjIsODYyMyw4NjI0LDg2MjUsODYyNiw4NjI3LDg2MjgsODYyOSw4 NjMwLDg2MzEsODYzMiwKKzg2MzMsODYzNCw4NjM1LDg2MzYsODYzNyw4NjM4LDg2MzksODY0MCw4 NjQxLDg2NDIsODY0Myw4NjQ0LDg2NDUsODY0Niw4NjQ3LAorODY0OCw4NjQ5LDg2NTAsODY1MSw4 NjUyLDg2NTMsODY1NCw4NjU1LDg2NTYsODY1Nyw4NjU4LDg2NTksODY2MCw4NjYxLDg2NjIsCis4 NjYzLDg2NjQsODY2NSw4NjY2LDg2NjcsODY2OCw4NjY5LDg2NzAsODY3MSw4NjcyLDg2NzMsODY3 NCw4Njc1LDg2NzYsODY3NywKKzg2NzgsODY3OSw4NjgwLDg2ODEsODY4Miw4NjgzLDg2ODQsODY4 NSw4Njg2LDg2ODcsODY4OCw4Njg5LDg2OTAsODY5MSw4NjkyLAorODY5Myw4Njk0LDg2OTUsODY5 Niw4Njk3LDg2OTgsODY5OSw4NzAwLDg3MDEsODcwMiw4NzAzLDg3MDQsODcwNSw4NzA2LDg3MDcs Cis4NzA4LDg3MDksODcxMCw4NzExLDg3MTIsODcxMyw4NzE0LDg3MTUsODcxNiw4NzE3LDg3MTgs ODcxOSw4NzIwLDg3MjEsODcyMiwKKzg3MjMsODcyNCw4NzI1LDg3MjYsODcyNyw4NzI4LDg3Mjks ODczMCw4NzMxLDg3MzIsODczMyw4NzM0LDg3MzUsODczNiw4NzM3LAorODczOCw4NzM5LDg3NDAs ODc0MSw4NzQyLDg3NDMsODc0NCw4NzQ1LDg3NDYsODc0Nyw4NzQ4LDg3NDksODc1MCw4NzUxLDg3 NTIsCis4NzUzLDg3NTQsODc1NSw4NzU2LDg3NTcsODc1OCw4NzU5LDg3NjAsODc2MSw4NzYyLDg3 NjMsODc2NCw4NzY1LDg3NjYsODc2NywKKzg3NjgsODc2OSw4NzcwLDg3NzEsODc3Miw4NzczLDg3 NzQsODc3NSw4Nzc2LDg3NzcsODc3OCw4Nzc5LDg3ODAsODc4MSw4NzgyLAorODc4Myw4Nzg0LDg3 ODUsODc4Niw4Nzg3LDg3ODgsODc4OSw4NzkwLDg3OTEsODc5Miw4NzkzLDg3OTQsODc5NSw4Nzk2 LDg3OTcsCis4Nzk4LDg3OTksODgwMCw4ODAxLDg4MDIsODgwMyw4ODA0LDg4MDUsODgwNiw4ODA3 LDg4MDgsODgwOSw4ODEwLDg4MTEsODgxMiwKKzg4MTMsODgxNCw4ODE1LDg4MTYsODgxNyw4ODE4 LDg4MTksODgyMCw4ODIxLDg4MjIsODgyMyw4ODI0LDg4MjUsODgyNiw4ODI3LAorODgyOCw4ODI5 LDg4MzAsODgzMSw4ODMyLDg4MzMsODgzNCw4ODM1LDg4MzYsODgzNyw4ODM4LDg4MzksODg0MCw4 ODQxLDg4NDIsCis4ODQzLDg4NDQsODg0NSw4ODQ2LDg4NDcsODg0OCw4ODQ5LDg4NTAsODg1MSw4 ODUyLDg4NTMsODg1NCw4ODU1LDg4NTYsODg1NywKKzg4NTgsODg1OSw4ODYwLDg4NjEsODg2Miw4 ODYzLDg4NjQsODg2NSw4ODY2LDg4NjcsODg2OCw4ODY5LDg4NzAsODg3MSw4ODcyLAorODg3Myw4 ODc0LDg4NzUsODg3Niw4ODc3LDg4NzgsODg3OSw4ODgwLDg4ODEsODg4Miw4ODgzLDg4ODQsODg4 NSw4ODg2LDg4ODcsCis4ODg4LDg4ODksODg5MCw4ODkxLDg4OTIsODg5Myw4ODk0LDg4OTUsODg5 Niw4ODk3LDg4OTgsODg5OSw4OTAwLDg5MDEsODkwMiwKKzg5MDMsODkwNCw4OTA1LDg5MDYsODkw Nyw4OTA4LDg5MDksODkxMCw4OTExLDg5MTIsODkxMyw4OTE0LDg5MTUsODkxNiw4OTE3LAorODkx OCw4OTE5LDg5MjAsODkyMSw4OTIyLDg5MjMsODkyNCw4OTI1LDg5MjYsODkyNyw4OTI4LDg5Mjks ODkzMCw4OTMxLDg5MzIsCis4OTMzLDg5MzQsODkzNSw4OTM2LDg5MzcsODkzOCw4OTM5LDg5NDAs ODk0MSw4OTQyLDg5NDMsODk0NCw4OTQ1LDg5NDYsODk0NywKKzg5NDgsODk0OSw4OTUwLDg5NTEs ODk1Miw4OTUzLDg5NTQsODk1NSw4OTU2LDg5NTcsODk1OCw4OTU5LDg5NjAsODk2MSw4OTYyLAor ODk2Myw4OTY0LDg5NjUsODk2Niw4OTY3LDg5NjgsODk2OSw4OTcwLDg5NzEsODk3Miw4OTczLDg5 NzQsODk3NSw4OTc2LDg5NzcsCis4OTc4LDg5NzksODk4MCw4OTgxLDg5ODIsODk4Myw4OTg0LDg5 ODUsODk4Niw4OTg3LDg5ODgsODk4OSw4OTkwLDg5OTEsODk5MiwKKzg5OTMsODk5NCw4OTk1LDg5 OTYsODk5Nyw4OTk4LDg5OTksOTAwMCw5MDAxLDkwMDIsOTAwMyw5MDA0LDkwMDUsOTAwNiw5MDA3 LAorOTAwOCw5MDA5LDkwMTAsOTAxMSw5MDEyLDkwMTMsOTAxNCw5MDE1LDkwMTYsOTAxNyw5MDE4 LDkwMTksOTAyMCw5MDIxLDkwMjIsCis5MDIzLDkwMjQsOTAyNSw5MDI2LDkwMjcsOTAyOCw5MDI5 LDkwMzAsOTAzMSw5MDMyLDkwMzMsOTAzNCw5MDM1LDkwMzYsOTAzNywKKzkwMzgsOTAzOSw5MDQw LDkwNDEsOTA0Miw5MDQzLDkwNDQsOTA0NSw5MDQ2LDkwNDcsOTA0OCw5MDQ5LDkwNTAsOTA1MSw5 MDUyLAorOTA1Myw5MDU0LDkwNTUsOTA1Niw5MDU3LDkwNTgsOTA1OSw5MDYwLDkwNjEsOTA2Miw5 MDYzLDkwNjQsOTA2NSw5MDY2LDkwNjcsCis5MDY4LDkwNjksOTA3MCw5MDcxLDkwNzIsOTA3Myw5 MDc0LDkwNzUsOTA3Niw5MDc3LDkwNzgsOTA3OSw5MDgwLDkwODEsOTA4MiwKKzkwODMsOTA4NCw5 MDg1LDkwODYsOTA4Nyw5MDg4LDkwODksOTA5MCw5MDkxLDkwOTIsOTA5Myw5MDk0LDkwOTUsOTA5 Niw5MDk3LAorOTA5OCw5MDk5LDkxMDAsOTEwMSw5MTAyLDkxMDMsOTEwNCw5MTA1LDkxMDYsOTEw Nyw5MTA4LDkxMDksOTExMCw5MTExLDkxMTIsCis5MTEzLDkxMTQsOTExNSw5MTE2LDkxMTcsOTEx OCw5MTE5LDkxMjAsOTEyMSw5MTIyLDkxMjMsOTEyNCw5MTI1LDkxMjYsOTEyNywKKzkxMjgsOTEy OSw5MTMwLDkxMzEsOTEzMiw5MTMzLDkxMzQsOTEzNSw5MTM2LDkxMzcsOTEzOCw5MTM5LDkxNDAs OTE0MSw5MTQyLAorOTE0Myw5MTQ0LDkxNDUsOTE0Niw5MTQ3LDkxNDgsOTE0OSw5MTUwLDkxNTEs OTE1Miw5MTUzLDkxNTQsOTE1NSw5MTU2LDkxNTcsCis5MTU4LDkxNTksOTE2MCw5MTYxLDkxNjIs OTE2Myw5MTY0LDkxNjUsOTE2Niw5MTY3LDkxNjgsOTE2OSw5MTcwLDkxNzEsOTE3MiwKKzkxNzMs OTE3NCw5MTc1LDkxNzYsOTE3Nyw5MTc4LDkxNzksOTE4MCw5MTgxLDkxODIsOTE4Myw5MTg0LDkx ODUsOTE4Niw5MTg3LAorOTE4OCw5MTg5LDkxOTAsOTE5MSw5MTkyLDkxOTMsOTE5NCw5MTk1LDkx OTYsOTE5Nyw5MTk4LDkxOTksOTIwMCw5MjAxLDkyMDIsCis5MjAzLDkyMDQsOTIwNSw5MjA2LDky MDcsOTIwOCw5MjA5LDkyMTAsOTIxMSw5MjEyLDkyMTMsOTIxNCw5MjE1LDkyMTYsOTIxNywKKzky MTgsOTIxOSw5MjIwLDkyMjEsOTIyMiw5MjIzLDkyMjQsOTIyNSw5MjI2LDkyMjcsOTIyOCw5MjI5 LDkyMzAsOTIzMSw5MjMyLAorOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQw LDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsCis5MjQ4LDkyNDksOTI1MCw5MjUx LDkyNTIsOTI1Myw5MjU0LDkyNTUsOTI1Niw5MjU3LDkyNTgsOTI1OSw5MjYwLDkyNjEsOTI2MiwK KzkyNjMsOTI2NCw5MjY1LDkyNjYsOTI2Nyw5MjY4LDkyNjksOTI3MCw5MjcxLDkyNzIsOTI3Myw5 Mjc0LDkyNzUsOTI3Niw5Mjc3LAorOTI3OCw5Mjc5LDkyODAsOTI4MSw5MjgyLDkyODMsOTI4NCw5 Mjg1LDkyODYsOTI4Nyw5Mjg4LDkyODksOTI5MCw5MjkxLDkyOTIsCis5MjkzLDkyOTQsOTI5NSw5 Mjk2LDkyOTcsOTI5OCw5Mjk5LDkzMDAsOTMwMSw5MzAyLDkzMDMsOTMwNCw5MzA1LDkzMDYsOTMw NywKKzkzMDgsOTMwOSw5MzEwLDkzMTEsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMx OCw5MzE5LDkzMjAsOTMyMSw5MzIyLAorOTMyMyw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgsOTMy OSw5MzMwLDkzMzEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsCis5MzM4LDkzMzksOTM0 MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEs OTM1MiwKKzkzNTMsOTM1NCw5MzU1LDkzNTYsOTM1Nyw5MzU4LDkzNTksOTM2MCw5MzYxLDkzNjIs OTM2Myw5MzY0LDkzNjUsOTM2Niw5MzY3LAorOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzcyLDkzNzMs OTM3NCw5Mzc1LDkzNzYsOTM3Nyw5Mzc4LDkzNzksOTM4MCw5MzgxLDkzODIsCis5MzgzLDkzODQs OTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkz OTYsOTM5NywKKzkzOTgsOTM5OSw5NDAwLDk0MDEsOTQwMiw5NDAzLDk0MDQsOTQwNSw5NDA2LDk0 MDcsOTQwOCw5NDA5LDk0MTAsOTQxMSw5NDEyLAorOTQxMyw5NDE0LDk0MTUsOTQxNiw5NDE3LDk0 MTgsOTQxOSw5NDIwLDk0MjEsOTQyMiw5NDIzLDkzOTgsOTM5OSw5NDAwLDk0MDEsCis5NDAyLDk0 MDMsOTQwNCw5NDA1LDk0MDYsOTQwNyw5NDA4LDk0MDksOTQxMCw5NDExLDk0MTIsOTQxMyw5NDE0 LDk0MTUsOTQxNiwKKzk0MTcsOTQxOCw5NDE5LDk0MjAsOTQyMSw5NDIyLDk0MjMsOTQ1MCw5NDUx LDk0NTIsOTQ1Myw5NDU0LDk0NTUsOTQ1Niw5NDU3LAorOTQ1OCw5NDU5LDk0NjAsOTQ2MSw5NDYy LDk0NjMsOTQ2NCw5NDY1LDk0NjYsOTQ2Nyw5NDY4LDk0NjksOTQ3MCw5NDcxLDk0NzIsCis5NDcz LDk0NzQsOTQ3NSw5NDc2LDk0NzcsOTQ3OCw5NDc5LDk0ODAsOTQ4MSw5NDgyLDk0ODMsOTQ4NCw5 NDg1LDk0ODYsOTQ4NywKKzk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5Miw5NDkzLDk0OTQsOTQ5NSw5 NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLAorOTUwMyw5NTA0LDk1MDUsOTUwNiw5 NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsCis5 NTE4LDk1MTksOTUyMCw5NTIxLDk1MjIsOTUyMyw5NTI0LDk1MjUsOTUyNiw5NTI3LDk1MjgsOTUy OSw5NTMwLDk1MzEsOTUzMiwKKzk1MzMsOTUzNCw5NTM1LDk1MzYsOTUzNyw5NTM4LDk1MzksOTU0 MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LAorOTU0OCw5NTQ5LDk1NTAsOTU1 MSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIs Cis5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMs OTU3NCw5NTc1LDk1NzYsOTU3NywKKzk1NzgsOTU3OSw5NTgwLDk1ODEsOTU4Miw5NTgzLDk1ODQs OTU4NSw5NTg2LDk1ODcsOTU4OCw5NTg5LDk1OTAsOTU5MSw5NTkyLAorOTU5Myw5NTk0LDk1OTUs OTU5Niw5NTk3LDk1OTgsOTU5OSw5NjAwLDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2 MDcsCis5NjA4LDk2MDksOTYxMCw5NjExLDk2MTIsOTYxMyw5NjE0LDk2MTUsOTYxNiw5NjE3LDk2 MTgsOTYxOSw5NjIwLDk2MjEsOTYyMiwKKzk2MjMsOTYyNCw5NjI1LDk2MjYsOTYyNyw5NjI4LDk2 MjksOTYzMCw5NjMxLDk2MzIsOTYzMyw5NjM0LDk2MzUsOTYzNiw5NjM3LAorOTYzOCw5NjM5LDk2 NDAsOTY0MSw5NjQyLDk2NDMsOTY0NCw5NjQ1LDk2NDYsOTY0Nyw5NjQ4LDk2NDksOTY1MCw5NjUx LDk2NTIsCis5NjUzLDk2NTQsOTY1NSw5NjU2LDk2NTcsOTY1OCw5NjU5LDk2NjAsOTY2MSw5NjYy LDk2NjMsOTY2NCw5NjY1LDk2NjYsOTY2NywKKzk2NjgsOTY2OSw5NjcwLDk2NzEsOTY3Miw5Njcz LDk2NzQsOTY3NSw5Njc2LDk2NzcsOTY3OCw5Njc5LDk2ODAsOTY4MSw5NjgyLAorOTY4Myw5Njg0 LDk2ODUsOTY4Niw5Njg3LDk2ODgsOTY4OSw5NjkwLDk2OTEsOTY5Miw5NjkzLDk2OTQsOTY5NSw5 Njk2LDk2OTcsCis5Njk4LDk2OTksOTcwMCw5NzAxLDk3MDIsOTcwMyw5NzA0LDk3MDUsOTcwNiw5 NzA3LDk3MDgsOTcwOSw5NzEwLDk3MTEsOTcxMiwKKzk3MTMsOTcxNCw5NzE1LDk3MTYsOTcxNyw5 NzE4LDk3MTksOTcyMCw5NzIxLDk3MjIsOTcyMyw5NzI0LDk3MjUsOTcyNiw5NzI3LAorOTcyOCw5 NzI5LDk3MzAsOTczMSw5NzMyLDk3MzMsOTczNCw5NzM1LDk3MzYsOTczNyw5NzM4LDk3MzksOTc0 MCw5NzQxLDk3NDIsCis5NzQzLDk3NDQsOTc0NSw5NzQ2LDk3NDcsOTc0OCw5NzQ5LDk3NTAsOTc1 MSw5NzUyLDk3NTMsOTc1NCw5NzU1LDk3NTYsOTc1NywKKzk3NTgsOTc1OSw5NzYwLDk3NjEsOTc2 Miw5NzYzLDk3NjQsOTc2NSw5NzY2LDk3NjcsOTc2OCw5NzY5LDk3NzAsOTc3MSw5NzcyLAorOTc3 Myw5Nzc0LDk3NzUsOTc3Niw5Nzc3LDk3NzgsOTc3OSw5NzgwLDk3ODEsOTc4Miw5NzgzLDk3ODQs OTc4NSw5Nzg2LDk3ODcsCis5Nzg4LDk3ODksOTc5MCw5NzkxLDk3OTIsOTc5Myw5Nzk0LDk3OTUs OTc5Niw5Nzk3LDk3OTgsOTc5OSw5ODAwLDk4MDEsOTgwMiwKKzk4MDMsOTgwNCw5ODA1LDk4MDYs OTgwNyw5ODA4LDk4MDksOTgxMCw5ODExLDk4MTIsOTgxMyw5ODE0LDk4MTUsOTgxNiw5ODE3LAor OTgxOCw5ODE5LDk4MjAsOTgyMSw5ODIyLDk4MjMsOTgyNCw5ODI1LDk4MjYsOTgyNyw5ODI4LDk4 MjksOTgzMCw5ODMxLDk4MzIsCis5ODMzLDk4MzQsOTgzNSw5ODM2LDk4MzcsOTgzOCw5ODM5LDk4 NDAsOTg0MSw5ODQyLDk4NDMsOTg0NCw5ODQ1LDk4NDYsOTg0NywKKzk4NDgsOTg0OSw5ODUwLDk4 NTEsOTg1Miw5ODUzLDk4NTQsOTg1NSw5ODU2LDk4NTcsOTg1OCw5ODU5LDk4NjAsOTg2MSw5ODYy LAorOTg2Myw5ODY0LDk4NjUsOTg2Niw5ODY3LDk4NjgsOTg2OSw5ODcwLDk4NzEsOTg3Miw5ODcz LDk4NzQsOTg3NSw5ODc2LDk4NzcsCis5ODc4LDk4NzksOTg4MCw5ODgxLDk4ODIsOTg4Myw5ODg0 LDk4ODUsOTg4Niw5ODg3LDk4ODgsOTg4OSw5ODkwLDk4OTEsOTg5MiwKKzk4OTMsOTg5NCw5ODk1 LDk4OTYsOTg5Nyw5ODk4LDk4OTksOTkwMCw5OTAxLDk5MDIsOTkwMyw5OTA0LDk5MDUsOTkwNiw5 OTA3LAorOTkwOCw5OTA5LDk5MTAsOTkxMSw5OTEyLDk5MTMsOTkxNCw5OTE1LDk5MTYsOTkxNyw5 OTE4LDk5MTksOTkyMCw5OTIxLDk5MjIsCis5OTIzLDk5MjQsOTkyNSw5OTI2LDk5MjcsOTkyOCw5 OTI5LDk5MzAsOTkzMSw5OTMyLDk5MzMsOTkzNCw5OTM1LDk5MzYsOTkzNywKKzk5MzgsOTkzOSw5 OTQwLDk5NDEsOTk0Miw5OTQzLDk5NDQsOTk0NSw5OTQ2LDk5NDcsOTk0OCw5OTQ5LDk5NTAsOTk1 MSw5OTUyLAorOTk1Myw5OTU0LDk5NTUsOTk1Niw5OTU3LDk5NTgsOTk1OSw5OTYwLDk5NjEsOTk2 Miw5OTYzLDk5NjQsOTk2NSw5OTY2LDk5NjcsCis5OTY4LDk5NjksOTk3MCw5OTcxLDk5NzIsOTk3 Myw5OTc0LDk5NzUsOTk3Niw5OTc3LDk5NzgsOTk3OSw5OTgwLDk5ODEsOTk4MiwKKzk5ODMsOTk4 NCw5OTg1LDk5ODYsOTk4Nyw5OTg4LDk5ODksOTk5MCw5OTkxLDk5OTIsOTk5Myw5OTk0LDk5OTUs OTk5Niw5OTk3LAorOTk5OCw5OTk5LDEwMDAwLDEwMDAxLDEwMDAyLDEwMDAzLDEwMDA0LDEwMDA1 LDEwMDA2LDEwMDA3LDEwMDA4LDEwMDA5LAorMTAwMTAsMTAwMTEsMTAwMTIsMTAwMTMsMTAwMTQs MTAwMTUsMTAwMTYsMTAwMTcsMTAwMTgsMTAwMTksMTAwMjAsMTAwMjEsCisxMDAyMiwxMDAyMywx MDAyNCwxMDAyNSwxMDAyNiwxMDAyNywxMDAyOCwxMDAyOSwxMDAzMCwxMDAzMSwxMDAzMiwxMDAz MywKKzEwMDM0LDEwMDM1LDEwMDM2LDEwMDM3LDEwMDM4LDEwMDM5LDEwMDQwLDEwMDQxLDEwMDQy LDEwMDQzLDEwMDQ0LDEwMDQ1LAorMTAwNDYsMTAwNDcsMTAwNDgsMTAwNDksMTAwNTAsMTAwNTEs MTAwNTIsMTAwNTMsMTAwNTQsMTAwNTUsMTAwNTYsMTAwNTcsCisxMDA1OCwxMDA1OSwxMDA2MCwx MDA2MSwxMDA2MiwxMDA2MywxMDA2NCwxMDA2NSwxMDA2NiwxMDA2NywxMDA2OCwxMDA2OSwKKzEw MDcwLDEwMDcxLDEwMDcyLDEwMDczLDEwMDc0LDEwMDc1LDEwMDc2LDEwMDc3LDEwMDc4LDEwMDc5 LDEwMDgwLDEwMDgxLAorMTAwODIsMTAwODMsMTAwODQsMTAwODUsMTAwODYsMTAwODcsMTAwODgs MTAwODksMTAwOTAsMTAwOTEsMTAwOTIsMTAwOTMsCisxMDA5NCwxMDA5NSwxMDA5NiwxMDA5Nywx MDA5OCwxMDA5OSwxMDEwMCwxMDEwMSwxMDEwMiwxMDEwMywxMDEwNCwxMDEwNSwKKzEwMTA2LDEw MTA3LDEwMTA4LDEwMTA5LDEwMTEwLDEwMTExLDEwMTEyLDEwMTEzLDEwMTE0LDEwMTE1LDEwMTE2 LDEwMTE3LAorMTAxMTgsMTAxMTksMTAxMjAsMTAxMjEsMTAxMjIsMTAxMjMsMTAxMjQsMTAxMjUs MTAxMjYsMTAxMjcsMTAxMjgsMTAxMjksCisxMDEzMCwxMDEzMSwxMDEzMiwxMDEzMywxMDEzNCwx MDEzNSwxMDEzNiwxMDEzNywxMDEzOCwxMDEzOSwxMDE0MCwxMDE0MSwKKzEwMTQyLDEwMTQzLDEw MTQ0LDEwMTQ1LDEwMTQ2LDEwMTQ3LDEwMTQ4LDEwMTQ5LDEwMTUwLDEwMTUxLDEwMTUyLDEwMTUz LAorMTAxNTQsMTAxNTUsMTAxNTYsMTAxNTcsMTAxNTgsMTAxNTksMTAxNjAsMTAxNjEsMTAxNjIs MTAxNjMsMTAxNjQsMTAxNjUsCisxMDE2NiwxMDE2NywxMDE2OCwxMDE2OSwxMDE3MCwxMDE3MSwx MDE3MiwxMDE3MywxMDE3NCwxMDE3NSwxMDE3NiwxMDE3NywKKzEwMTc4LDEwMTc5LDEwMTgwLDEw MTgxLDEwMTgyLDEwMTgzLDEwMTg0LDEwMTg1LDEwMTg2LDEwMTg3LDEwMTg4LDEwMTg5LAorMTAx OTAsMTAxOTEsMTAxOTIsMTAxOTMsMTAxOTQsMTAxOTUsMTAxOTYsMTAxOTcsMTAxOTgsMTAxOTks MTAyMDAsMTAyMDEsCisxMDIwMiwxMDIwMywxMDIwNCwxMDIwNSwxMDIwNiwxMDIwNywxMDIwOCwx MDIwOSwxMDIxMCwxMDIxMSwxMDIxMiwxMDIxMywKKzEwMjE0LDEwMjE1LDEwMjE2LDEwMjE3LDEw MjE4LDEwMjE5LDEwMjIwLDEwMjIxLDEwMjIyLDEwMjIzLDEwMjI0LDEwMjI1LAorMTAyMjYsMTAy MjcsMTAyMjgsMTAyMjksMTAyMzAsMTAyMzEsMTAyMzIsMTAyMzMsMTAyMzQsMTAyMzUsMTAyMzYs MTAyMzcsCisxMDIzOCwxMDIzOSwxMDI0MCwxMDI0MSwxMDI0MiwxMDI0MywxMDI0NCwxMDI0NSwx MDI0NiwxMDI0NywxMDI0OCwxMDI0OSwKKzEwMjUwLDEwMjUxLDEwMjUyLDEwMjUzLDEwMjU0LDEw MjU1LDEwMjU2LDEwMjU3LDEwMjU4LDEwMjU5LDEwMjYwLDEwMjYxLAorMTAyNjIsMTAyNjMsMTAy NjQsMTAyNjUsMTAyNjYsMTAyNjcsMTAyNjgsMTAyNjksMTAyNzAsMTAyNzEsMTAyNzIsMTAyNzMs CisxMDI3NCwxMDI3NSwxMDI3NiwxMDI3NywxMDI3OCwxMDI3OSwxMDI4MCwxMDI4MSwxMDI4Miwx MDI4MywxMDI4NCwxMDI4NSwKKzEwMjg2LDEwMjg3LDEwMjg4LDEwMjg5LDEwMjkwLDEwMjkxLDEw MjkyLDEwMjkzLDEwMjk0LDEwMjk1LDEwMjk2LDEwMjk3LAorMTAyOTgsMTAyOTksMTAzMDAsMTAz MDEsMTAzMDIsMTAzMDMsMTAzMDQsMTAzMDUsMTAzMDYsMTAzMDcsMTAzMDgsMTAzMDksCisxMDMx MCwxMDMxMSwxMDMxMiwxMDMxMywxMDMxNCwxMDMxNSwxMDMxNiwxMDMxNywxMDMxOCwxMDMxOSwx MDMyMCwxMDMyMSwKKzEwMzIyLDEwMzIzLDEwMzI0LDEwMzI1LDEwMzI2LDEwMzI3LDEwMzI4LDEw MzI5LDEwMzMwLDEwMzMxLDEwMzMyLDEwMzMzLAorMTAzMzQsMTAzMzUsMTAzMzYsMTAzMzcsMTAz MzgsMTAzMzksMTAzNDAsMTAzNDEsMTAzNDIsMTAzNDMsMTAzNDQsMTAzNDUsCisxMDM0NiwxMDM0 NywxMDM0OCwxMDM0OSwxMDM1MCwxMDM1MSwxMDM1MiwxMDM1MywxMDM1NCwxMDM1NSwxMDM1Niwx MDM1NywKKzEwMzU4LDEwMzU5LDEwMzYwLDEwMzYxLDEwMzYyLDEwMzYzLDEwMzY0LDEwMzY1LDEw MzY2LDEwMzY3LDEwMzY4LDEwMzY5LAorMTAzNzAsMTAzNzEsMTAzNzIsMTAzNzMsMTAzNzQsMTAz NzUsMTAzNzYsMTAzNzcsMTAzNzgsMTAzNzksMTAzODAsMTAzODEsCisxMDM4MiwxMDM4MywxMDM4 NCwxMDM4NSwxMDM4NiwxMDM4NywxMDM4OCwxMDM4OSwxMDM5MCwxMDM5MSwxMDM5MiwxMDM5MywK KzEwMzk0LDEwMzk1LDEwMzk2LDEwMzk3LDEwMzk4LDEwMzk5LDEwNDAwLDEwNDAxLDEwNDAyLDEw NDAzLDEwNDA0LDEwNDA1LAorMTA0MDYsMTA0MDcsMTA0MDgsMTA0MDksMTA0MTAsMTA0MTEsMTA0 MTIsMTA0MTMsMTA0MTQsMTA0MTUsMTA0MTYsMTA0MTcsCisxMDQxOCwxMDQxOSwxMDQyMCwxMDQy MSwxMDQyMiwxMDQyMywxMDQyNCwxMDQyNSwxMDQyNiwxMDQyNywxMDQyOCwxMDQyOSwKKzEwNDMw LDEwNDMxLDEwNDMyLDEwNDMzLDEwNDM0LDEwNDM1LDEwNDM2LDEwNDM3LDEwNDM4LDEwNDM5LDEw NDQwLDEwNDQxLAorMTA0NDIsMTA0NDMsMTA0NDQsMTA0NDUsMTA0NDYsMTA0NDcsMTA0NDgsMTA0 NDksMTA0NTAsMTA0NTEsMTA0NTIsMTA0NTMsCisxMDQ1NCwxMDQ1NSwxMDQ1NiwxMDQ1NywxMDQ1 OCwxMDQ1OSwxMDQ2MCwxMDQ2MSwxMDQ2MiwxMDQ2MywxMDQ2NCwxMDQ2NSwKKzEwNDY2LDEwNDY3 LDEwNDY4LDEwNDY5LDEwNDcwLDEwNDcxLDEwNDcyLDEwNDczLDEwNDc0LDEwNDc1LDEwNDc2LDEw NDc3LAorMTA0NzgsMTA0NzksMTA0ODAsMTA0ODEsMTA0ODIsMTA0ODMsMTA0ODQsMTA0ODUsMTA0 ODYsMTA0ODcsMTA0ODgsMTA0ODksCisxMDQ5MCwxMDQ5MSwxMDQ5MiwxMDQ5MywxMDQ5NCwxMDQ5 NSwxMDQ5NiwxMDQ5NywxMDQ5OCwxMDQ5OSwxMDUwMCwxMDUwMSwKKzEwNTAyLDEwNTAzLDEwNTA0 LDEwNTA1LDEwNTA2LDEwNTA3LDEwNTA4LDEwNTA5LDEwNTEwLDEwNTExLDEwNTEyLDEwNTEzLAor MTA1MTQsMTA1MTUsMTA1MTYsMTA1MTcsMTA1MTgsMTA1MTksMTA1MjAsMTA1MjEsMTA1MjIsMTA1 MjMsMTA1MjQsMTA1MjUsCisxMDUyNiwxMDUyNywxMDUyOCwxMDUyOSwxMDUzMCwxMDUzMSwxMDUz MiwxMDUzMywxMDUzNCwxMDUzNSwxMDUzNiwxMDUzNywKKzEwNTM4LDEwNTM5LDEwNTQwLDEwNTQx LDEwNTQyLDEwNTQzLDEwNTQ0LDEwNTQ1LDEwNTQ2LDEwNTQ3LDEwNTQ4LDEwNTQ5LAorMTA1NTAs MTA1NTEsMTA1NTIsMTA1NTMsMTA1NTQsMTA1NTUsMTA1NTYsMTA1NTcsMTA1NTgsMTA1NTksMTA1 NjAsMTA1NjEsCisxMDU2MiwxMDU2MywxMDU2NCwxMDU2NSwxMDU2NiwxMDU2NywxMDU2OCwxMDU2 OSwxMDU3MCwxMDU3MSwxMDU3MiwxMDU3MywKKzEwNTc0LDEwNTc1LDEwNTc2LDEwNTc3LDEwNTc4 LDEwNTc5LDEwNTgwLDEwNTgxLDEwNTgyLDEwNTgzLDEwNTg0LDEwNTg1LAorMTA1ODYsMTA1ODcs MTA1ODgsMTA1ODksMTA1OTAsMTA1OTEsMTA1OTIsMTA1OTMsMTA1OTQsMTA1OTUsMTA1OTYsMTA1 OTcsCisxMDU5OCwxMDU5OSwxMDYwMCwxMDYwMSwxMDYwMiwxMDYwMywxMDYwNCwxMDYwNSwxMDYw NiwxMDYwNywxMDYwOCwxMDYwOSwKKzEwNjEwLDEwNjExLDEwNjEyLDEwNjEzLDEwNjE0LDEwNjE1 LDEwNjE2LDEwNjE3LDEwNjE4LDEwNjE5LDEwNjIwLDEwNjIxLAorMTA2MjIsMTA2MjMsMTA2MjQs MTA2MjUsMTA2MjYsMTA2MjcsMTA2MjgsMTA2MjksMTA2MzAsMTA2MzEsMTA2MzIsMTA2MzMsCisx MDYzNCwxMDYzNSwxMDYzNiwxMDYzNywxMDYzOCwxMDYzOSwxMDY0MCwxMDY0MSwxMDY0MiwxMDY0 MywxMDY0NCwxMDY0NSwKKzEwNjQ2LDEwNjQ3LDEwNjQ4LDEwNjQ5LDEwNjUwLDEwNjUxLDEwNjUy LDEwNjUzLDEwNjU0LDEwNjU1LDEwNjU2LDEwNjU3LAorMTA2NTgsMTA2NTksMTA2NjAsMTA2NjEs MTA2NjIsMTA2NjMsMTA2NjQsMTA2NjUsMTA2NjYsMTA2NjcsMTA2NjgsMTA2NjksCisxMDY3MCwx MDY3MSwxMDY3MiwxMDY3MywxMDY3NCwxMDY3NSwxMDY3NiwxMDY3NywxMDY3OCwxMDY3OSwxMDY4 MCwxMDY4MSwKKzEwNjgyLDEwNjgzLDEwNjg0LDEwNjg1LDEwNjg2LDEwNjg3LDEwNjg4LDEwNjg5 LDEwNjkwLDEwNjkxLDEwNjkyLDEwNjkzLAorMTA2OTQsMTA2OTUsMTA2OTYsMTA2OTcsMTA2OTgs MTA2OTksMTA3MDAsMTA3MDEsMTA3MDIsMTA3MDMsMTA3MDQsMTA3MDUsCisxMDcwNiwxMDcwNywx MDcwOCwxMDcwOSwxMDcxMCwxMDcxMSwxMDcxMiwxMDcxMywxMDcxNCwxMDcxNSwxMDcxNiwxMDcx NywKKzEwNzE4LDEwNzE5LDEwNzIwLDEwNzIxLDEwNzIyLDEwNzIzLDEwNzI0LDEwNzI1LDEwNzI2 LDEwNzI3LDEwNzI4LDEwNzI5LAorMTA3MzAsMTA3MzEsMTA3MzIsMTA3MzMsMTA3MzQsMTA3MzUs MTA3MzYsMTA3MzcsMTA3MzgsMTA3MzksMTA3NDAsMTA3NDEsCisxMDc0MiwxMDc0MywxMDc0NCwx MDc0NSwxMDc0NiwxMDc0NywxMDc0OCwxMDc0OSwxMDc1MCwxMDc1MSwxMDc1MiwxMDc1MywKKzEw NzU0LDEwNzU1LDEwNzU2LDEwNzU3LDEwNzU4LDEwNzU5LDEwNzYwLDEwNzYxLDEwNzYyLDEwNzYz LDEwNzY0LDEwNzY1LAorMTA3NjYsMTA3NjcsMTA3NjgsMTA3NjksMTA3NzAsMTA3NzEsMTA3NzIs MTA3NzMsMTA3NzQsMTA3NzUsMTA3NzYsMTA3NzcsCisxMDc3OCwxMDc3OSwxMDc4MCwxMDc4MSwx MDc4MiwxMDc4MywxMDc4NCwxMDc4NSwxMDc4NiwxMDc4NywxMDc4OCwxMDc4OSwKKzEwNzkwLDEw NzkxLDEwNzkyLDEwNzkzLDEwNzk0LDEwNzk1LDEwNzk2LDEwNzk3LDEwNzk4LDEwNzk5LDEwODAw LDEwODAxLAorMTA4MDIsMTA4MDMsMTA4MDQsMTA4MDUsMTA4MDYsMTA4MDcsMTA4MDgsMTA4MDks MTA4MTAsMTA4MTEsMTA4MTIsMTA4MTMsCisxMDgxNCwxMDgxNSwxMDgxNiwxMDgxNywxMDgxOCwx MDgxOSwxMDgyMCwxMDgyMSwxMDgyMiwxMDgyMywxMDgyNCwxMDgyNSwKKzEwODI2LDEwODI3LDEw ODI4LDEwODI5LDEwODMwLDEwODMxLDEwODMyLDEwODMzLDEwODM0LDEwODM1LDEwODM2LDEwODM3 LAorMTA4MzgsMTA4MzksMTA4NDAsMTA4NDEsMTA4NDIsMTA4NDMsMTA4NDQsMTA4NDUsMTA4NDYs MTA4NDcsMTA4NDgsMTA4NDksCisxMDg1MCwxMDg1MSwxMDg1MiwxMDg1MywxMDg1NCwxMDg1NSwx MDg1NiwxMDg1NywxMDg1OCwxMDg1OSwxMDg2MCwxMDg2MSwKKzEwODYyLDEwODYzLDEwODY0LDEw ODY1LDEwODY2LDEwODY3LDEwODY4LDEwODY5LDEwODcwLDEwODcxLDEwODcyLDEwODczLAorMTA4 NzQsMTA4NzUsMTA4NzYsMTA4NzcsMTA4NzgsMTA4NzksMTA4ODAsMTA4ODEsMTA4ODIsMTA4ODMs MTA4ODQsMTA4ODUsCisxMDg4NiwxMDg4NywxMDg4OCwxMDg4OSwxMDg5MCwxMDg5MSwxMDg5Miwx MDg5MywxMDg5NCwxMDg5NSwxMDg5NiwxMDg5NywKKzEwODk4LDEwODk5LDEwOTAwLDEwOTAxLDEw OTAyLDEwOTAzLDEwOTA0LDEwOTA1LDEwOTA2LDEwOTA3LDEwOTA4LDEwOTA5LAorMTA5MTAsMTA5 MTEsMTA5MTIsMTA5MTMsMTA5MTQsMTA5MTUsMTA5MTYsMTA5MTcsMTA5MTgsMTA5MTksMTA5MjAs MTA5MjEsCisxMDkyMiwxMDkyMywxMDkyNCwxMDkyNSwxMDkyNiwxMDkyNywxMDkyOCwxMDkyOSwx MDkzMCwxMDkzMSwxMDkzMiwxMDkzMywKKzEwOTM0LDEwOTM1LDEwOTM2LDEwOTM3LDEwOTM4LDEw OTM5LDEwOTQwLDEwOTQxLDEwOTQyLDEwOTQzLDEwOTQ0LDEwOTQ1LAorMTA5NDYsMTA5NDcsMTA5 NDgsMTA5NDksMTA5NTAsMTA5NTEsMTA5NTIsMTA5NTMsMTA5NTQsMTA5NTUsMTA5NTYsMTA5NTcs CisxMDk1OCwxMDk1OSwxMDk2MCwxMDk2MSwxMDk2MiwxMDk2MywxMDk2NCwxMDk2NSwxMDk2Niwx MDk2NywxMDk2OCwxMDk2OSwKKzEwOTcwLDEwOTcxLDEwOTcyLDEwOTczLDEwOTc0LDEwOTc1LDEw OTc2LDEwOTc3LDEwOTc4LDEwOTc5LDEwOTgwLDEwOTgxLAorMTA5ODIsMTA5ODMsMTA5ODQsMTA5 ODUsMTA5ODYsMTA5ODcsMTA5ODgsMTA5ODksMTA5OTAsMTA5OTEsMTA5OTIsMTA5OTMsCisxMDk5 NCwxMDk5NSwxMDk5NiwxMDk5NywxMDk5OCwxMDk5OSwxMTAwMCwxMTAwMSwxMTAwMiwxMTAwMywx MTAwNCwxMTAwNSwKKzExMDA2LDExMDA3LDExMDA4LDExMDA5LDExMDEwLDExMDExLDExMDEyLDEx MDEzLDExMDE0LDExMDE1LDExMDE2LDExMDE3LAorMTEwMTgsMTEwMTksMTEwMjAsMTEwMjEsMTEw MjIsMTEwMjMsMTEwMjQsMTEwMjUsMTEwMjYsMTEwMjcsMTEwMjgsMTEwMjksCisxMTAzMCwxMTAz MSwxMTAzMiwxMTAzMywxMTAzNCwxMTAzNSwxMTAzNiwxMTAzNywxMTAzOCwxMTAzOSwxMTA0MCwx MTA0MSwKKzExMDQyLDExMDQzLDExMDQ0LDExMDQ1LDExMDQ2LDExMDQ3LDExMDQ4LDExMDQ5LDEx MDUwLDExMDUxLDExMDUyLDExMDUzLAorMTEwNTQsMTEwNTUsMTEwNTYsMTEwNTcsMTEwNTgsMTEw NTksMTEwNjAsMTEwNjEsMTEwNjIsMTEwNjMsMTEwNjQsMTEwNjUsCisxMTA2NiwxMTA2NywxMTA2 OCwxMTA2OSwxMTA3MCwxMTA3MSwxMTA3MiwxMTA3MywxMTA3NCwxMTA3NSwxMTA3NiwxMTA3NywK KzExMDc4LDExMDc5LDExMDgwLDExMDgxLDExMDgyLDExMDgzLDExMDg0LDExMDg1LDExMDg2LDEx MDg3LDExMDg4LDExMDg5LAorMTEwOTAsMTEwOTEsMTEwOTIsMTEwOTMsMTEwOTQsMTEwOTUsMTEw OTYsMTEwOTcsMTEwOTgsMTEwOTksMTExMDAsMTExMDEsCisxMTEwMiwxMTEwMywxMTEwNCwxMTEw NSwxMTEwNiwxMTEwNywxMTEwOCwxMTEwOSwxMTExMCwxMTExMSwxMTExMiwxMTExMywKKzExMTE0 LDExMTE1LDExMTE2LDExMTE3LDExMTE4LDExMTE5LDExMTIwLDExMTIxLDExMTIyLDExMTIzLDEx MTI0LDExMTI1LAorMTExMjYsMTExMjcsMTExMjgsMTExMjksMTExMzAsMTExMzEsMTExMzIsMTEx MzMsMTExMzQsMTExMzUsMTExMzYsMTExMzcsCisxMTEzOCwxMTEzOSwxMTE0MCwxMTE0MSwxMTE0 MiwxMTE0MywxMTE0NCwxMTE0NSwxMTE0NiwxMTE0NywxMTE0OCwxMTE0OSwKKzExMTUwLDExMTUx LDExMTUyLDExMTUzLDExMTU0LDExMTU1LDExMTU2LDExMTU3LDExMTU4LDExMTU5LDExMTYwLDEx MTYxLAorMTExNjIsMTExNjMsMTExNjQsMTExNjUsMTExNjYsMTExNjcsMTExNjgsMTExNjksMTEx NzAsMTExNzEsMTExNzIsMTExNzMsCisxMTE3NCwxMTE3NSwxMTE3NiwxMTE3NywxMTE3OCwxMTE3 OSwxMTE4MCwxMTE4MSwxMTE4MiwxMTE4MywxMTE4NCwxMTE4NSwKKzExMTg2LDExMTg3LDExMTg4 LDExMTg5LDExMTkwLDExMTkxLDExMTkyLDExMTkzLDExMTk0LDExMTk1LDExMTk2LDExMTk3LAor MTExOTgsMTExOTksMTEyMDAsMTEyMDEsMTEyMDIsMTEyMDMsMTEyMDQsMTEyMDUsMTEyMDYsMTEy MDcsMTEyMDgsMTEyMDksCisxMTIxMCwxMTIxMSwxMTIxMiwxMTIxMywxMTIxNCwxMTIxNSwxMTIx NiwxMTIxNywxMTIxOCwxMTIxOSwxMTIyMCwxMTIyMSwKKzExMjIyLDExMjIzLDExMjI0LDExMjI1 LDExMjI2LDExMjI3LDExMjI4LDExMjI5LDExMjMwLDExMjMxLDExMjMyLDExMjMzLAorMTEyMzQs MTEyMzUsMTEyMzYsMTEyMzcsMTEyMzgsMTEyMzksMTEyNDAsMTEyNDEsMTEyNDIsMTEyNDMsMTEy NDQsMTEyNDUsCisxMTI0NiwxMTI0NywxMTI0OCwxMTI0OSwxMTI1MCwxMTI1MSwxMTI1MiwxMTI1 MywxMTI1NCwxMTI1NSwxMTI1NiwxMTI1NywKKzExMjU4LDExMjU5LDExMjYwLDExMjYxLDExMjYy LDExMjYzLDExMjY0LDExMjY1LDExMjY2LDExMjY3LDExMjY4LDExMjY5LAorMTEyNzAsMTEyNzEs MTEyNzIsMTEyNzMsMTEyNzQsMTEyNzUsMTEyNzYsMTEyNzcsMTEyNzgsMTEyNzksMTEyODAsMTEy ODEsCisxMTI4MiwxMTI4MywxMTI4NCwxMTI4NSwxMTI4NiwxMTI4NywxMTI4OCwxMTI4OSwxMTI5 MCwxMTI5MSwxMTI5MiwxMTI5MywKKzExMjk0LDExMjk1LDExMjk2LDExMjk3LDExMjk4LDExMjk5 LDExMzAwLDExMzAxLDExMzAyLDExMzAzLDExMzA0LDExMzA1LAorMTEzMDYsMTEzMDcsMTEzMDgs MTEzMDksMTEzMTAsMTEzMTEsMTEyNjQsMTEyNjUsMTEyNjYsMTEyNjcsMTEyNjgsMTEyNjksCisx MTI3MCwxMTI3MSwxMTI3MiwxMTI3MywxMTI3NCwxMTI3NSwxMTI3NiwxMTI3NywxMTI3OCwxMTI3 OSwxMTI4MCwxMTI4MSwKKzExMjgyLDExMjgzLDExMjg0LDExMjg1LDExMjg2LDExMjg3LDExMjg4 LDExMjg5LDExMjkwLDExMjkxLDExMjkyLDExMjkzLAorMTEyOTQsMTEyOTUsMTEyOTYsMTEyOTcs MTEyOTgsMTEyOTksMTEzMDAsMTEzMDEsMTEzMDIsMTEzMDMsMTEzMDQsMTEzMDUsCisxMTMwNiwx MTMwNywxMTMwOCwxMTMwOSwxMTMxMCwxMTM1OSwxMTM2MCwxMTM2MCwxMTM2MiwxMTM2MywxMTM2 NCw1NzAsNTc0LAorMTEzNjcsMTEzNjcsMTEzNjksMTEzNjksMTEzNzEsMTEzNzEsMTEzNzMsMTEz NzQsMTEzNzUsMTEzNzYsMTEzNzcsMTEzNzgsCisxMTM3OCwxMTM4MCwxMTM4MSwxMTM4MSwxMTM4 MywxMTM4NCwxMTM4NSwxMTM4NiwxMTM4NywxMTM4OCwxMTM4OSwxMTM5MCwKKzExMzkxLDExMzky LDExMzkyLDExMzk0LDExMzk0LDExMzk2LDExMzk2LDExMzk4LDExMzk4LDExNDAwLDExNDAwLDEx NDAyLAorMTE0MDIsMTE0MDQsMTE0MDQsMTE0MDYsMTE0MDYsMTE0MDgsMTE0MDgsMTE0MTAsMTE0 MTAsMTE0MTIsMTE0MTIsMTE0MTQsCisxMTQxNCwxMTQxNiwxMTQxNiwxMTQxOCwxMTQxOCwxMTQy MCwxMTQyMCwxMTQyMiwxMTQyMiwxMTQyNCwxMTQyNCwxMTQyNiwKKzExNDI2LDExNDI4LDExNDI4 LDExNDMwLDExNDMwLDExNDMyLDExNDMyLDExNDM0LDExNDM0LDExNDM2LDExNDM2LDExNDM4LAor MTE0MzgsMTE0NDAsMTE0NDAsMTE0NDIsMTE0NDIsMTE0NDQsMTE0NDQsMTE0NDYsMTE0NDYsMTE0 NDgsMTE0NDgsMTE0NTAsCisxMTQ1MCwxMTQ1MiwxMTQ1MiwxMTQ1NCwxMTQ1NCwxMTQ1NiwxMTQ1 NiwxMTQ1OCwxMTQ1OCwxMTQ2MCwxMTQ2MCwxMTQ2MiwKKzExNDYyLDExNDY0LDExNDY0LDExNDY2 LDExNDY2LDExNDY4LDExNDY4LDExNDcwLDExNDcwLDExNDcyLDExNDcyLDExNDc0LAorMTE0NzQs MTE0NzYsMTE0NzYsMTE0NzgsMTE0NzgsMTE0ODAsMTE0ODAsMTE0ODIsMTE0ODIsMTE0ODQsMTE0 ODQsMTE0ODYsCisxMTQ4NiwxMTQ4OCwxMTQ4OCwxMTQ5MCwxMTQ5MCwxMTQ5MiwxMTQ5MywxMTQ5 NCwxMTQ5NSwxMTQ5NiwxMTQ5NywxMTQ5OCwKKzExNDk5LDExNDk5LDExNTAxLDExNTAxLDExNTAz LDExNTA0LDExNTA1LDExNTA2LDExNTA2LDExNTA4LDExNTA5LDExNTEwLAorMTE1MTEsMTE1MTIs MTE1MTMsMTE1MTQsMTE1MTUsMTE1MTYsMTE1MTcsMTE1MTgsMTE1MTksNDI1Niw0MjU3LDQyNTgs NDI1OSwKKzQyNjAsNDI2MSw0MjYyLDQyNjMsNDI2NCw0MjY1LDQyNjYsNDI2Nyw0MjY4LDQyNjks NDI3MCw0MjcxLDQyNzIsNDI3Myw0Mjc0LAorNDI3NSw0Mjc2LDQyNzcsNDI3OCw0Mjc5LDQyODAs NDI4MSw0MjgyLDQyODMsNDI4NCw0Mjg1LDQyODYsNDI4Nyw0Mjg4LDQyODksCis0MjkwLDQyOTEs NDI5Miw0MjkzLDExNTU4LDQyOTUsMTE1NjAsMTE1NjEsMTE1NjIsMTE1NjMsMTE1NjQsNDMwMSwx MTU2NiwKKzExNTY3LDExNTY4LDExNTY5LDExNTcwLDExNTcxLDExNTcyLDExNTczLDExNTc0LDEx NTc1LDExNTc2LDExNTc3LDExNTc4LAorMTE1NzksMTE1ODAsMTE1ODEsMTE1ODIsMTE1ODMsMTE1 ODQsMTE1ODUsMTE1ODYsMTE1ODcsMTE1ODgsMTE1ODksMTE1OTAsCisxMTU5MSwxMTU5MiwxMTU5 MywxMTU5NCwxMTU5NSwxMTU5NiwxMTU5NywxMTU5OCwxMTU5OSwxMTYwMCwxMTYwMSwxMTYwMiwK KzExNjAzLDExNjA0LDExNjA1LDExNjA2LDExNjA3LDExNjA4LDExNjA5LDExNjEwLDExNjExLDEx NjEyLDExNjEzLDExNjE0LAorMTE2MTUsMTE2MTYsMTE2MTcsMTE2MTgsMTE2MTksMTE2MjAsMTE2 MjEsMTE2MjIsMTE2MjMsMTE2MjQsMTE2MjUsMTE2MjYsCisxMTYyNywxMTYyOCwxMTYyOSwxMTYz MCwxMTYzMSwxMTYzMiwxMTYzMywxMTYzNCwxMTYzNSwxMTYzNiwxMTYzNywxMTYzOCwKKzExNjM5 LDExNjQwLDExNjQxLDExNjQyLDExNjQzLDExNjQ0LDExNjQ1LDExNjQ2LDExNjQ3LDExNjQ4LDEx NjQ5LDExNjUwLAorMTE2NTEsMTE2NTIsMTE2NTMsMTE2NTQsMTE2NTUsMTE2NTYsMTE2NTcsMTE2 NTgsMTE2NTksMTE2NjAsMTE2NjEsMTE2NjIsCisxMTY2MywxMTY2NCwxMTY2NSwxMTY2NiwxMTY2 NywxMTY2OCwxMTY2OSwxMTY3MCwxMTY3MSwxMTY3MiwxMTY3MywxMTY3NCwKKzExNjc1LDExNjc2 LDExNjc3LDExNjc4LDExNjc5LDExNjgwLDExNjgxLDExNjgyLDExNjgzLDExNjg0LDExNjg1LDEx Njg2LAorMTE2ODcsMTE2ODgsMTE2ODksMTE2OTAsMTE2OTEsMTE2OTIsMTE2OTMsMTE2OTQsMTE2 OTUsMTE2OTYsMTE2OTcsMTE2OTgsCisxMTY5OSwxMTcwMCwxMTcwMSwxMTcwMiwxMTcwMywxMTcw NCwxMTcwNSwxMTcwNiwxMTcwNywxMTcwOCwxMTcwOSwxMTcxMCwKKzExNzExLDExNzEyLDExNzEz LDExNzE0LDExNzE1LDExNzE2LDExNzE3LDExNzE4LDExNzE5LDExNzIwLDExNzIxLDExNzIyLAor MTE3MjMsMTE3MjQsMTE3MjUsMTE3MjYsMTE3MjcsMTE3MjgsMTE3MjksMTE3MzAsMTE3MzEsMTE3 MzIsMTE3MzMsMTE3MzQsCisxMTczNSwxMTczNiwxMTczNywxMTczOCwxMTczOSwxMTc0MCwxMTc0 MSwxMTc0MiwxMTc0MywxMTc0NCwxMTc0NSwxMTc0NiwKKzExNzQ3LDExNzQ4LDExNzQ5LDExNzUw LDExNzUxLDExNzUyLDExNzUzLDExNzU0LDExNzU1LDExNzU2LDExNzU3LDExNzU4LAorMTE3NTks MTE3NjAsMTE3NjEsMTE3NjIsMTE3NjMsMTE3NjQsMTE3NjUsMTE3NjYsMTE3NjcsMTE3NjgsMTE3 NjksMTE3NzAsCisxMTc3MSwxMTc3MiwxMTc3MywxMTc3NCwxMTc3NSwxMTc3NiwxMTc3NywxMTc3 OCwxMTc3OSwxMTc4MCwxMTc4MSwxMTc4MiwKKzExNzgzLDExNzg0LDExNzg1LDExNzg2LDExNzg3 LDExNzg4LDExNzg5LDExNzkwLDExNzkxLDExNzkyLDExNzkzLDExNzk0LAorMTE3OTUsMTE3OTYs MTE3OTcsMTE3OTgsMTE3OTksMTE4MDAsMTE4MDEsMTE4MDIsMTE4MDMsMTE4MDQsMTE4MDUsMTE4 MDYsCisxMTgwNywxMTgwOCwxMTgwOSwxMTgxMCwxMTgxMSwxMTgxMiwxMTgxMywxMTgxNCwxMTgx NSwxMTgxNiwxMTgxNywxMTgxOCwKKzExODE5LDExODIwLDExODIxLDExODIyLDExODIzLDExODI0 LDExODI1LDExODI2LDExODI3LDExODI4LDExODI5LDExODMwLAorMTE4MzEsMTE4MzIsMTE4MzMs MTE4MzQsMTE4MzUsMTE4MzYsMTE4MzcsMTE4MzgsMTE4MzksMTE4NDAsMTE4NDEsMTE4NDIsCisx MTg0MywxMTg0NCwxMTg0NSwxMTg0NiwxMTg0NywxMTg0OCwxMTg0OSwxMTg1MCwxMTg1MSwxMTg1 MiwxMTg1MywxMTg1NCwKKzExODU1LDExODU2LDExODU3LDExODU4LDExODU5LDExODYwLDExODYx LDExODYyLDExODYzLDExODY0LDExODY1LDExODY2LAorMTE4NjcsMTE4NjgsMTE4NjksMTE4NzAs MTE4NzEsMTE4NzIsMTE4NzMsMTE4NzQsMTE4NzUsMTE4NzYsMTE4NzcsMTE4NzgsCisxMTg3OSwx MTg4MCwxMTg4MSwxMTg4MiwxMTg4MywxMTg4NCwxMTg4NSwxMTg4NiwxMTg4NywxMTg4OCwxMTg4 OSwxMTg5MCwKKzExODkxLDExODkyLDExODkzLDExODk0LDExODk1LDExODk2LDExODk3LDExODk4 LDExODk5LDExOTAwLDExOTAxLDExOTAyLAorMTE5MDMsMTE5MDQsMTE5MDUsMTE5MDYsMTE5MDcs MTE5MDgsMTE5MDksMTE5MTAsMTE5MTEsMTE5MTIsMTE5MTMsMTE5MTQsCisxMTkxNSwxMTkxNiwx MTkxNywxMTkxOCwxMTkxOSwxMTkyMCwxMTkyMSwxMTkyMiwxMTkyMywxMTkyNCwxMTkyNSwxMTky NiwKKzExOTI3LDExOTI4LDExOTI5LDExOTMwLDExOTMxLDExOTMyLDExOTMzLDExOTM0LDExOTM1 LDExOTM2LDExOTM3LDExOTM4LAorMTE5MzksMTE5NDAsMTE5NDEsMTE5NDIsMTE5NDMsMTE5NDQs MTE5NDUsMTE5NDYsMTE5NDcsMTE5NDgsMTE5NDksMTE5NTAsCisxMTk1MSwxMTk1MiwxMTk1Mywx MTk1NCwxMTk1NSwxMTk1NiwxMTk1NywxMTk1OCwxMTk1OSwxMTk2MCwxMTk2MSwxMTk2MiwKKzEx OTYzLDExOTY0LDExOTY1LDExOTY2LDExOTY3LDExOTY4LDExOTY5LDExOTcwLDExOTcxLDExOTcy LDExOTczLDExOTc0LAorMTE5NzUsMTE5NzYsMTE5NzcsMTE5NzgsMTE5NzksMTE5ODAsMTE5ODEs MTE5ODIsMTE5ODMsMTE5ODQsMTE5ODUsMTE5ODYsCisxMTk4NywxMTk4OCwxMTk4OSwxMTk5MCwx MTk5MSwxMTk5MiwxMTk5MywxMTk5NCwxMTk5NSwxMTk5NiwxMTk5NywxMTk5OCwKKzExOTk5LDEy MDAwLDEyMDAxLDEyMDAyLDEyMDAzLDEyMDA0LDEyMDA1LDEyMDA2LDEyMDA3LDEyMDA4LDEyMDA5 LDEyMDEwLAorMTIwMTEsMTIwMTIsMTIwMTMsMTIwMTQsMTIwMTUsMTIwMTYsMTIwMTcsMTIwMTgs MTIwMTksMTIwMjAsMTIwMjEsMTIwMjIsCisxMjAyMywxMjAyNCwxMjAyNSwxMjAyNiwxMjAyNywx MjAyOCwxMjAyOSwxMjAzMCwxMjAzMSwxMjAzMiwxMjAzMywxMjAzNCwKKzEyMDM1LDEyMDM2LDEy MDM3LDEyMDM4LDEyMDM5LDEyMDQwLDEyMDQxLDEyMDQyLDEyMDQzLDEyMDQ0LDEyMDQ1LDEyMDQ2 LAorMTIwNDcsMTIwNDgsMTIwNDksMTIwNTAsMTIwNTEsMTIwNTIsMTIwNTMsMTIwNTQsMTIwNTUs MTIwNTYsMTIwNTcsMTIwNTgsCisxMjA1OSwxMjA2MCwxMjA2MSwxMjA2MiwxMjA2MywxMjA2NCwx MjA2NSwxMjA2NiwxMjA2NywxMjA2OCwxMjA2OSwxMjA3MCwKKzEyMDcxLDEyMDcyLDEyMDczLDEy MDc0LDEyMDc1LDEyMDc2LDEyMDc3LDEyMDc4LDEyMDc5LDEyMDgwLDEyMDgxLDEyMDgyLAorMTIw ODMsMTIwODQsMTIwODUsMTIwODYsMTIwODcsMTIwODgsMTIwODksMTIwOTAsMTIwOTEsMTIwOTIs MTIwOTMsMTIwOTQsCisxMjA5NSwxMjA5NiwxMjA5NywxMjA5OCwxMjA5OSwxMjEwMCwxMjEwMSwx MjEwMiwxMjEwMywxMjEwNCwxMjEwNSwxMjEwNiwKKzEyMTA3LDEyMTA4LDEyMTA5LDEyMTEwLDEy MTExLDEyMTEyLDEyMTEzLDEyMTE0LDEyMTE1LDEyMTE2LDEyMTE3LDEyMTE4LAorMTIxMTksMTIx MjAsMTIxMjEsMTIxMjIsMTIxMjMsMTIxMjQsMTIxMjUsMTIxMjYsMTIxMjcsMTIxMjgsMTIxMjks MTIxMzAsCisxMjEzMSwxMjEzMiwxMjEzMywxMjEzNCwxMjEzNSwxMjEzNiwxMjEzNywxMjEzOCwx MjEzOSwxMjE0MCwxMjE0MSwxMjE0MiwKKzEyMTQzLDEyMTQ0LDEyMTQ1LDEyMTQ2LDEyMTQ3LDEy MTQ4LDEyMTQ5LDEyMTUwLDEyMTUxLDEyMTUyLDEyMTUzLDEyMTU0LAorMTIxNTUsMTIxNTYsMTIx NTcsMTIxNTgsMTIxNTksMTIxNjAsMTIxNjEsMTIxNjIsMTIxNjMsMTIxNjQsMTIxNjUsMTIxNjYs CisxMjE2NywxMjE2OCwxMjE2OSwxMjE3MCwxMjE3MSwxMjE3MiwxMjE3MywxMjE3NCwxMjE3NSwx MjE3NiwxMjE3NywxMjE3OCwKKzEyMTc5LDEyMTgwLDEyMTgxLDEyMTgyLDEyMTgzLDEyMTg0LDEy MTg1LDEyMTg2LDEyMTg3LDEyMTg4LDEyMTg5LDEyMTkwLAorMTIxOTEsMTIxOTIsMTIxOTMsMTIx OTQsMTIxOTUsMTIxOTYsMTIxOTcsMTIxOTgsMTIxOTksMTIyMDAsMTIyMDEsMTIyMDIsCisxMjIw MywxMjIwNCwxMjIwNSwxMjIwNiwxMjIwNywxMjIwOCwxMjIwOSwxMjIxMCwxMjIxMSwxMjIxMiwx MjIxMywxMjIxNCwKKzEyMjE1LDEyMjE2LDEyMjE3LDEyMjE4LDEyMjE5LDEyMjIwLDEyMjIxLDEy MjIyLDEyMjIzLDEyMjI0LDEyMjI1LDEyMjI2LAorMTIyMjcsMTIyMjgsMTIyMjksMTIyMzAsMTIy MzEsMTIyMzIsMTIyMzMsMTIyMzQsMTIyMzUsMTIyMzYsMTIyMzcsMTIyMzgsCisxMjIzOSwxMjI0 MCwxMjI0MSwxMjI0MiwxMjI0MywxMjI0NCwxMjI0NSwxMjI0NiwxMjI0NywxMjI0OCwxMjI0OSwx MjI1MCwKKzEyMjUxLDEyMjUyLDEyMjUzLDEyMjU0LDEyMjU1LDEyMjU2LDEyMjU3LDEyMjU4LDEy MjU5LDEyMjYwLDEyMjYxLDEyMjYyLAorMTIyNjMsMTIyNjQsMTIyNjUsMTIyNjYsMTIyNjcsMTIy NjgsMTIyNjksMTIyNzAsMTIyNzEsMTIyNzIsMTIyNzMsMTIyNzQsCisxMjI3NSwxMjI3NiwxMjI3 NywxMjI3OCwxMjI3OSwxMjI4MCwxMjI4MSwxMjI4MiwxMjI4MywxMjI4NCwxMjI4NSwxMjI4NiwK KzEyMjg3LDEyMjg4LDEyMjg5LDEyMjkwLDEyMjkxLDEyMjkyLDEyMjkzLDEyMjk0LDEyMjk1LDEy Mjk2LDEyMjk3LDEyMjk4LAorMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIz MDUsMTIzMDYsMTIzMDcsMTIzMDgsMTIzMDksMTIzMTAsCisxMjMxMSwxMjMxMiwxMjMxMywxMjMx NCwxMjMxNSwxMjMxNiwxMjMxNywxMjMxOCwxMjMxOSwxMjMyMCwxMjMyMSwxMjMyMiwKKzEyMzIz LDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDEyMzMwLDEyMzMxLDEyMzMyLDEy MzMzLDEyMzM0LAorMTIzMzUsMTIzMzYsMTIzMzcsMTIzMzgsMTIzMzksMTIzNDAsMTIzNDEsMTIz NDIsMTIzNDMsMTIzNDQsMTIzNDUsMTIzNDYsCisxMjM0NywxMjM0OCwxMjM0OSwxMjM1MCwxMjM1 MSwxMjM1MiwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwKKzEyMzU5LDEyMzYw LDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEy MzcwLAorMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIz NzksMTIzODAsMTIzODEsMTIzODIsCisxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4 OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwKKzEyMzk1LDEyMzk2LDEyMzk3 LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LAor MTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0 MTYsMTI0MTcsMTI0MTgsCisxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQy NSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwKKzEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0 LDEyNDM1LDEyNDM2LDEyNDM3LDEyNDM4LDEyNDM5LDEyNDQwLDEyNDQxLDEyNDQyLAorMTI0NDMs MTI0NDQsMTI0NDUsMTI0NDYsMTI0NDcsMTI0NDgsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0 NTMsMTI0NTQsCisxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2 MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwKKzEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcx LDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LAorMTI0NzksMTI0ODAs MTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0 OTAsCisxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5 OSwxMjUwMCwxMjUwMSwxMjUwMiwKKzEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4 LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LAorMTI1MTUsMTI1MTYsMTI1MTcs MTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsCisx MjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCwxMjUzNSwxMjUz NiwxMjUzNywxMjUzOCwKKzEyNTM5LDEyNTQwLDEyNTQxLDEyNTQyLDEyNTQzLDEyNTQ0LDEyNTQ1 LDEyNTQ2LDEyNTQ3LDEyNTQ4LDEyNTQ5LDEyNTUwLAorMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQs MTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsCisxMjU2Mywx MjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3 MywxMjU3NCwKKzEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgy LDEyNTgzLDEyNTg0LDEyNTg1LDEyNTg2LAorMTI1ODcsMTI1ODgsMTI1ODksMTI1OTAsMTI1OTEs MTI1OTIsMTI1OTMsMTI1OTQsMTI1OTUsMTI1OTYsMTI1OTcsMTI1OTgsCisxMjU5OSwxMjYwMCwx MjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYx MCwKKzEyNjExLDEyNjEyLDEyNjEzLDEyNjE0LDEyNjE1LDEyNjE2LDEyNjE3LDEyNjE4LDEyNjE5 LDEyNjIwLDEyNjIxLDEyNjIyLAorMTI2MjMsMTI2MjQsMTI2MjUsMTI2MjYsMTI2MjcsMTI2Mjgs MTI2MjksMTI2MzAsMTI2MzEsMTI2MzIsMTI2MzMsMTI2MzQsCisxMjYzNSwxMjYzNiwxMjYzNywx MjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwKKzEy NjQ3LDEyNjQ4LDEyNjQ5LDEyNjUwLDEyNjUxLDEyNjUyLDEyNjUzLDEyNjU0LDEyNjU1LDEyNjU2 LDEyNjU3LDEyNjU4LAorMTI2NTksMTI2NjAsMTI2NjEsMTI2NjIsMTI2NjMsMTI2NjQsMTI2NjUs MTI2NjYsMTI2NjcsMTI2NjgsMTI2NjksMTI2NzAsCisxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwx MjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwKKzEyNjgzLDEy Njg0LDEyNjg1LDEyNjg2LDEyNjg3LDEyNjg4LDEyNjg5LDEyNjkwLDEyNjkxLDEyNjkyLDEyNjkz LDEyNjk0LAorMTI2OTUsMTI2OTYsMTI2OTcsMTI2OTgsMTI2OTksMTI3MDAsMTI3MDEsMTI3MDIs MTI3MDMsMTI3MDQsMTI3MDUsMTI3MDYsCisxMjcwNywxMjcwOCwxMjcwOSwxMjcxMCwxMjcxMSwx MjcxMiwxMjcxMywxMjcxNCwxMjcxNSwxMjcxNiwxMjcxNywxMjcxOCwKKzEyNzE5LDEyNzIwLDEy NzIxLDEyNzIyLDEyNzIzLDEyNzI0LDEyNzI1LDEyNzI2LDEyNzI3LDEyNzI4LDEyNzI5LDEyNzMw LAorMTI3MzEsMTI3MzIsMTI3MzMsMTI3MzQsMTI3MzUsMTI3MzYsMTI3MzcsMTI3MzgsMTI3Mzks MTI3NDAsMTI3NDEsMTI3NDIsCisxMjc0MywxMjc0NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwx Mjc0OSwxMjc1MCwxMjc1MSwxMjc1MiwxMjc1MywxMjc1NCwKKzEyNzU1LDEyNzU2LDEyNzU3LDEy NzU4LDEyNzU5LDEyNzYwLDEyNzYxLDEyNzYyLDEyNzYzLDEyNzY0LDEyNzY1LDEyNzY2LAorMTI3 NjcsMTI3NjgsMTI3NjksMTI3NzAsMTI3NzEsMTI3NzIsMTI3NzMsMTI3NzQsMTI3NzUsMTI3NzYs MTI3NzcsMTI3NzgsCisxMjc3OSwxMjc4MCwxMjc4MSwxMjc4MiwxMjc4MywxMjc4NCwxMjc4NSwx Mjc4NiwxMjc4NywxMjc4OCwxMjc4OSwxMjc5MCwKKzEyNzkxLDEyNzkyLDEyNzkzLDEyNzk0LDEy Nzk1LDEyNzk2LDEyNzk3LDEyNzk4LDEyNzk5LDEyODAwLDEyODAxLDEyODAyLAorMTI4MDMsMTI4 MDQsMTI4MDUsMTI4MDYsMTI4MDcsMTI4MDgsMTI4MDksMTI4MTAsMTI4MTEsMTI4MTIsMTI4MTMs MTI4MTQsCisxMjgxNSwxMjgxNiwxMjgxNywxMjgxOCwxMjgxOSwxMjgyMCwxMjgyMSwxMjgyMiwx MjgyMywxMjgyNCwxMjgyNSwxMjgyNiwKKzEyODI3LDEyODI4LDEyODI5LDEyODMwLDEyODMxLDEy ODMyLDEyODMzLDEyODM0LDEyODM1LDEyODM2LDEyODM3LDEyODM4LAorMTI4MzksMTI4NDAsMTI4 NDEsMTI4NDIsMTI4NDMsMTI4NDQsMTI4NDUsMTI4NDYsMTI4NDcsMTI4NDgsMTI4NDksMTI4NTAs CisxMjg1MSwxMjg1MiwxMjg1MywxMjg1NCwxMjg1NSwxMjg1NiwxMjg1NywxMjg1OCwxMjg1OSwx Mjg2MCwxMjg2MSwxMjg2MiwKKzEyODYzLDEyODY0LDEyODY1LDEyODY2LDEyODY3LDEyODY4LDEy ODY5LDEyODcwLDEyODcxLDEyODcyLDEyODczLDEyODc0LAorMTI4NzUsMTI4NzYsMTI4NzcsMTI4 NzgsMTI4NzksMTI4ODAsMTI4ODEsMTI4ODIsMTI4ODMsMTI4ODQsMTI4ODUsMTI4ODYsCisxMjg4 NywxMjg4OCwxMjg4OSwxMjg5MCwxMjg5MSwxMjg5MiwxMjg5MywxMjg5NCwxMjg5NSwxMjg5Niwx Mjg5NywxMjg5OCwKKzEyODk5LDEyOTAwLDEyOTAxLDEyOTAyLDEyOTAzLDEyOTA0LDEyOTA1LDEy OTA2LDEyOTA3LDEyOTA4LDEyOTA5LDEyOTEwLAorMTI5MTEsMTI5MTIsMTI5MTMsMTI5MTQsMTI5 MTUsMTI5MTYsMTI5MTcsMTI5MTgsMTI5MTksMTI5MjAsMTI5MjEsMTI5MjIsCisxMjkyMywxMjky NCwxMjkyNSwxMjkyNiwxMjkyNywxMjkyOCwxMjkyOSwxMjkzMCwxMjkzMSwxMjkzMiwxMjkzMywx MjkzNCwKKzEyOTM1LDEyOTM2LDEyOTM3LDEyOTM4LDEyOTM5LDEyOTQwLDEyOTQxLDEyOTQyLDEy OTQzLDEyOTQ0LDEyOTQ1LDEyOTQ2LAorMTI5NDcsMTI5NDgsMTI5NDksMTI5NTAsMTI5NTEsMTI5 NTIsMTI5NTMsMTI5NTQsMTI5NTUsMTI5NTYsMTI5NTcsMTI5NTgsCisxMjk1OSwxMjk2MCwxMjk2 MSwxMjk2MiwxMjk2MywxMjk2NCwxMjk2NSwxMjk2NiwxMjk2NywxMjk2OCwxMjk2OSwxMjk3MCwK KzEyOTcxLDEyOTcyLDEyOTczLDEyOTc0LDEyOTc1LDEyOTc2LDEyOTc3LDEyOTc4LDEyOTc5LDEy OTgwLDEyOTgxLDEyOTgyLAorMTI5ODMsMTI5ODQsMTI5ODUsMTI5ODYsMTI5ODcsMTI5ODgsMTI5 ODksMTI5OTAsMTI5OTEsMTI5OTIsMTI5OTMsMTI5OTQsCisxMjk5NSwxMjk5NiwxMjk5NywxMjk5 OCwxMjk5OSwxMzAwMCwxMzAwMSwxMzAwMiwxMzAwMywxMzAwNCwxMzAwNSwxMzAwNiwKKzEzMDA3 LDEzMDA4LDEzMDA5LDEzMDEwLDEzMDExLDEzMDEyLDEzMDEzLDEzMDE0LDEzMDE1LDEzMDE2LDEz MDE3LDEzMDE4LAorMTMwMTksMTMwMjAsMTMwMjEsMTMwMjIsMTMwMjMsMTMwMjQsMTMwMjUsMTMw MjYsMTMwMjcsMTMwMjgsMTMwMjksMTMwMzAsCisxMzAzMSwxMzAzMiwxMzAzMywxMzAzNCwxMzAz NSwxMzAzNiwxMzAzNywxMzAzOCwxMzAzOSwxMzA0MCwxMzA0MSwxMzA0MiwKKzEzMDQzLDEzMDQ0 LDEzMDQ1LDEzMDQ2LDEzMDQ3LDEzMDQ4LDEzMDQ5LDEzMDUwLDEzMDUxLDEzMDUyLDEzMDUzLDEz MDU0LAorMTMwNTUsMTMwNTYsMTMwNTcsMTMwNTgsMTMwNTksMTMwNjAsMTMwNjEsMTMwNjIsMTMw NjMsMTMwNjQsMTMwNjUsMTMwNjYsCisxMzA2NywxMzA2OCwxMzA2OSwxMzA3MCwxMzA3MSwxMzA3 MiwxMzA3MywxMzA3NCwxMzA3NSwxMzA3NiwxMzA3NywxMzA3OCwKKzEzMDc5LDEzMDgwLDEzMDgx LDEzMDgyLDEzMDgzLDEzMDg0LDEzMDg1LDEzMDg2LDEzMDg3LDEzMDg4LDEzMDg5LDEzMDkwLAor MTMwOTEsMTMwOTIsMTMwOTMsMTMwOTQsMTMwOTUsMTMwOTYsMTMwOTcsMTMwOTgsMTMwOTksMTMx MDAsMTMxMDEsMTMxMDIsCisxMzEwMywxMzEwNCwxMzEwNSwxMzEwNiwxMzEwNywxMzEwOCwxMzEw OSwxMzExMCwxMzExMSwxMzExMiwxMzExMywxMzExNCwKKzEzMTE1LDEzMTE2LDEzMTE3LDEzMTE4 LDEzMTE5LDEzMTIwLDEzMTIxLDEzMTIyLDEzMTIzLDEzMTI0LDEzMTI1LDEzMTI2LAorMTMxMjcs MTMxMjgsMTMxMjksMTMxMzAsMTMxMzEsMTMxMzIsMTMxMzMsMTMxMzQsMTMxMzUsMTMxMzYsMTMx MzcsMTMxMzgsCisxMzEzOSwxMzE0MCwxMzE0MSwxMzE0MiwxMzE0MywxMzE0NCwxMzE0NSwxMzE0 NiwxMzE0NywxMzE0OCwxMzE0OSwxMzE1MCwKKzEzMTUxLDEzMTUyLDEzMTUzLDEzMTU0LDEzMTU1 LDEzMTU2LDEzMTU3LDEzMTU4LDEzMTU5LDEzMTYwLDEzMTYxLDEzMTYyLAorMTMxNjMsMTMxNjQs MTMxNjUsMTMxNjYsMTMxNjcsMTMxNjgsMTMxNjksMTMxNzAsMTMxNzEsMTMxNzIsMTMxNzMsMTMx NzQsCisxMzE3NSwxMzE3NiwxMzE3NywxMzE3OCwxMzE3OSwxMzE4MCwxMzE4MSwxMzE4MiwxMzE4 MywxMzE4NCwxMzE4NSwxMzE4NiwKKzEzMTg3LDEzMTg4LDEzMTg5LDEzMTkwLDEzMTkxLDEzMTky LDEzMTkzLDEzMTk0LDEzMTk1LDEzMTk2LDEzMTk3LDEzMTk4LAorMTMxOTksMTMyMDAsMTMyMDEs MTMyMDIsMTMyMDMsMTMyMDQsMTMyMDUsMTMyMDYsMTMyMDcsMTMyMDgsMTMyMDksMTMyMTAsCisx MzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzIxOSwxMzIy MCwxMzIyMSwxMzIyMiwKKzEzMjIzLDEzMjI0LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjI5 LDEzMjMwLDEzMjMxLDEzMjMyLDEzMjMzLDEzMjM0LAorMTMyMzUsMTMyMzYsMTMyMzcsMTMyMzgs MTMyMzksMTMyNDAsMTMyNDEsMTMyNDIsMTMyNDMsMTMyNDQsMTMyNDUsMTMyNDYsCisxMzI0Nywx MzI0OCwxMzI0OSwxMzI1MCwxMzI1MSwxMzI1MiwxMzI1MywxMzI1NCwxMzI1NSwxMzI1NiwxMzI1 NywxMzI1OCwKKzEzMjU5LDEzMjYwLDEzMjYxLDEzMjYyLDEzMjYzLDEzMjY0LDEzMjY1LDEzMjY2 LDEzMjY3LDEzMjY4LDEzMjY5LDEzMjcwLAorMTMyNzEsMTMyNzIsMTMyNzMsMTMyNzQsMTMyNzUs MTMyNzYsMTMyNzcsMTMyNzgsMTMyNzksMTMyODAsMTMyODEsMTMyODIsCisxMzI4MywxMzI4NCwx MzI4NSwxMzI4NiwxMzI4NywxMzI4OCwxMzI4OSwxMzI5MCwxMzI5MSwxMzI5MiwxMzI5MywxMzI5 NCwKKzEzMjk1LDEzMjk2LDEzMjk3LDEzMjk4LDEzMjk5LDEzMzAwLDEzMzAxLDEzMzAyLDEzMzAz LDEzMzA0LDEzMzA1LDEzMzA2LAorMTMzMDcsMTMzMDgsMTMzMDksMTMzMTAsMTMzMTEsMTMzMTIs MTMzMTMsMTMzMTQsMTMzMTUsMTMzMTYsMTMzMTcsMTMzMTgsCisxMzMxOSwxMzMyMCwxMzMyMSwx MzMyMiwxMzMyMywxMzMyNCwxMzMyNSwxMzMyNiwxMzMyNywxMzMyOCwxMzMyOSwxMzMzMCwKKzEz MzMxLDEzMzMyLDEzMzMzLDEzMzM0LDEzMzM1LDEzMzM2LDEzMzM3LDEzMzM4LDEzMzM5LDEzMzQw LDEzMzQxLDEzMzQyLAorMTMzNDMsMTMzNDQsMTMzNDUsMTMzNDYsMTMzNDcsMTMzNDgsMTMzNDks MTMzNTAsMTMzNTEsMTMzNTIsMTMzNTMsMTMzNTQsCisxMzM1NSwxMzM1NiwxMzM1NywxMzM1OCwx MzM1OSwxMzM2MCwxMzM2MSwxMzM2MiwxMzM2MywxMzM2NCwxMzM2NSwxMzM2NiwKKzEzMzY3LDEz MzY4LDEzMzY5LDEzMzcwLDEzMzcxLDEzMzcyLDEzMzczLDEzMzc0LDEzMzc1LDEzMzc2LDEzMzc3 LDEzMzc4LAorMTMzNzksMTMzODAsMTMzODEsMTMzODIsMTMzODMsMTMzODQsMTMzODUsMTMzODYs MTMzODcsMTMzODgsMTMzODksMTMzOTAsCisxMzM5MSwxMzM5MiwxMzM5MywxMzM5NCwxMzM5NSwx MzM5NiwxMzM5NywxMzM5OCwxMzM5OSwxMzQwMCwxMzQwMSwxMzQwMiwKKzEzNDAzLDEzNDA0LDEz NDA1LDEzNDA2LDEzNDA3LDEzNDA4LDEzNDA5LDEzNDEwLDEzNDExLDEzNDEyLDEzNDEzLDEzNDE0 LAorMTM0MTUsMTM0MTYsMTM0MTcsMTM0MTgsMTM0MTksMTM0MjAsMTM0MjEsMTM0MjIsMTM0MjMs MTM0MjQsMTM0MjUsMTM0MjYsCisxMzQyNywxMzQyOCwxMzQyOSwxMzQzMCwxMzQzMSwxMzQzMiwx MzQzMywxMzQzNCwxMzQzNSwxMzQzNiwxMzQzNywxMzQzOCwKKzEzNDM5LDEzNDQwLDEzNDQxLDEz NDQyLDEzNDQzLDEzNDQ0LDEzNDQ1LDEzNDQ2LDEzNDQ3LDEzNDQ4LDEzNDQ5LDEzNDUwLAorMTM0 NTEsMTM0NTIsMTM0NTMsMTM0NTQsMTM0NTUsMTM0NTYsMTM0NTcsMTM0NTgsMTM0NTksMTM0NjAs MTM0NjEsMTM0NjIsCisxMzQ2MywxMzQ2NCwxMzQ2NSwxMzQ2NiwxMzQ2NywxMzQ2OCwxMzQ2OSwx MzQ3MCwxMzQ3MSwxMzQ3MiwxMzQ3MywxMzQ3NCwKKzEzNDc1LDEzNDc2LDEzNDc3LDEzNDc4LDEz NDc5LDEzNDgwLDEzNDgxLDEzNDgyLDEzNDgzLDEzNDg0LDEzNDg1LDEzNDg2LAorMTM0ODcsMTM0 ODgsMTM0ODksMTM0OTAsMTM0OTEsMTM0OTIsMTM0OTMsMTM0OTQsMTM0OTUsMTM0OTYsMTM0OTcs MTM0OTgsCisxMzQ5OSwxMzUwMCwxMzUwMSwxMzUwMiwxMzUwMywxMzUwNCwxMzUwNSwxMzUwNiwx MzUwNywxMzUwOCwxMzUwOSwxMzUxMCwKKzEzNTExLDEzNTEyLDEzNTEzLDEzNTE0LDEzNTE1LDEz NTE2LDEzNTE3LDEzNTE4LDEzNTE5LDEzNTIwLDEzNTIxLDEzNTIyLAorMTM1MjMsMTM1MjQsMTM1 MjUsMTM1MjYsMTM1MjcsMTM1MjgsMTM1MjksMTM1MzAsMTM1MzEsMTM1MzIsMTM1MzMsMTM1MzQs CisxMzUzNSwxMzUzNiwxMzUzNywxMzUzOCwxMzUzOSwxMzU0MCwxMzU0MSwxMzU0MiwxMzU0Mywx MzU0NCwxMzU0NSwxMzU0NiwKKzEzNTQ3LDEzNTQ4LDEzNTQ5LDEzNTUwLDEzNTUxLDEzNTUyLDEz NTUzLDEzNTU0LDEzNTU1LDEzNTU2LDEzNTU3LDEzNTU4LAorMTM1NTksMTM1NjAsMTM1NjEsMTM1 NjIsMTM1NjMsMTM1NjQsMTM1NjUsMTM1NjYsMTM1NjcsMTM1NjgsMTM1NjksMTM1NzAsCisxMzU3 MSwxMzU3MiwxMzU3MywxMzU3NCwxMzU3NSwxMzU3NiwxMzU3NywxMzU3OCwxMzU3OSwxMzU4MCwx MzU4MSwxMzU4MiwKKzEzNTgzLDEzNTg0LDEzNTg1LDEzNTg2LDEzNTg3LDEzNTg4LDEzNTg5LDEz NTkwLDEzNTkxLDEzNTkyLDEzNTkzLDEzNTk0LAorMTM1OTUsMTM1OTYsMTM1OTcsMTM1OTgsMTM1 OTksMTM2MDAsMTM2MDEsMTM2MDIsMTM2MDMsMTM2MDQsMTM2MDUsMTM2MDYsCisxMzYwNywxMzYw OCwxMzYwOSwxMzYxMCwxMzYxMSwxMzYxMiwxMzYxMywxMzYxNCwxMzYxNSwxMzYxNiwxMzYxNywx MzYxOCwKKzEzNjE5LDEzNjIwLDEzNjIxLDEzNjIyLDEzNjIzLDEzNjI0LDEzNjI1LDEzNjI2LDEz NjI3LDEzNjI4LDEzNjI5LDEzNjMwLAorMTM2MzEsMTM2MzIsMTM2MzMsMTM2MzQsMTM2MzUsMTM2 MzYsMTM2MzcsMTM2MzgsMTM2MzksMTM2NDAsMTM2NDEsMTM2NDIsCisxMzY0MywxMzY0NCwxMzY0 NSwxMzY0NiwxMzY0NywxMzY0OCwxMzY0OSwxMzY1MCwxMzY1MSwxMzY1MiwxMzY1MywxMzY1NCwK KzEzNjU1LDEzNjU2LDEzNjU3LDEzNjU4LDEzNjU5LDEzNjYwLDEzNjYxLDEzNjYyLDEzNjYzLDEz NjY0LDEzNjY1LDEzNjY2LAorMTM2NjcsMTM2NjgsMTM2NjksMTM2NzAsMTM2NzEsMTM2NzIsMTM2 NzMsMTM2NzQsMTM2NzUsMTM2NzYsMTM2NzcsMTM2NzgsCisxMzY3OSwxMzY4MCwxMzY4MSwxMzY4 MiwxMzY4MywxMzY4NCwxMzY4NSwxMzY4NiwxMzY4NywxMzY4OCwxMzY4OSwxMzY5MCwKKzEzNjkx LDEzNjkyLDEzNjkzLDEzNjk0LDEzNjk1LDEzNjk2LDEzNjk3LDEzNjk4LDEzNjk5LDEzNzAwLDEz NzAxLDEzNzAyLAorMTM3MDMsMTM3MDQsMTM3MDUsMTM3MDYsMTM3MDcsMTM3MDgsMTM3MDksMTM3 MTAsMTM3MTEsMTM3MTIsMTM3MTMsMTM3MTQsCisxMzcxNSwxMzcxNiwxMzcxNywxMzcxOCwxMzcx OSwxMzcyMCwxMzcyMSwxMzcyMiwxMzcyMywxMzcyNCwxMzcyNSwxMzcyNiwKKzEzNzI3LDEzNzI4 LDEzNzI5LDEzNzMwLDEzNzMxLDEzNzMyLDEzNzMzLDEzNzM0LDEzNzM1LDEzNzM2LDEzNzM3LDEz NzM4LAorMTM3MzksMTM3NDAsMTM3NDEsMTM3NDIsMTM3NDMsMTM3NDQsMTM3NDUsMTM3NDYsMTM3 NDcsMTM3NDgsMTM3NDksMTM3NTAsCisxMzc1MSwxMzc1MiwxMzc1MywxMzc1NCwxMzc1NSwxMzc1 NiwxMzc1NywxMzc1OCwxMzc1OSwxMzc2MCwxMzc2MSwxMzc2MiwKKzEzNzYzLDEzNzY0LDEzNzY1 LDEzNzY2LDEzNzY3LDEzNzY4LDEzNzY5LDEzNzcwLDEzNzcxLDEzNzcyLDEzNzczLDEzNzc0LAor MTM3NzUsMTM3NzYsMTM3NzcsMTM3NzgsMTM3NzksMTM3ODAsMTM3ODEsMTM3ODIsMTM3ODMsMTM3 ODQsMTM3ODUsMTM3ODYsCisxMzc4NywxMzc4OCwxMzc4OSwxMzc5MCwxMzc5MSwxMzc5MiwxMzc5 MywxMzc5NCwxMzc5NSwxMzc5NiwxMzc5NywxMzc5OCwKKzEzNzk5LDEzODAwLDEzODAxLDEzODAy LDEzODAzLDEzODA0LDEzODA1LDEzODA2LDEzODA3LDEzODA4LDEzODA5LDEzODEwLAorMTM4MTEs MTM4MTIsMTM4MTMsMTM4MTQsMTM4MTUsMTM4MTYsMTM4MTcsMTM4MTgsMTM4MTksMTM4MjAsMTM4 MjEsMTM4MjIsCisxMzgyMywxMzgyNCwxMzgyNSwxMzgyNiwxMzgyNywxMzgyOCwxMzgyOSwxMzgz MCwxMzgzMSwxMzgzMiwxMzgzMywxMzgzNCwKKzEzODM1LDEzODM2LDEzODM3LDEzODM4LDEzODM5 LDEzODQwLDEzODQxLDEzODQyLDEzODQzLDEzODQ0LDEzODQ1LDEzODQ2LAorMTM4NDcsMTM4NDgs MTM4NDksMTM4NTAsMTM4NTEsMTM4NTIsMTM4NTMsMTM4NTQsMTM4NTUsMTM4NTYsMTM4NTcsMTM4 NTgsCisxMzg1OSwxMzg2MCwxMzg2MSwxMzg2MiwxMzg2MywxMzg2NCwxMzg2NSwxMzg2NiwxMzg2 NywxMzg2OCwxMzg2OSwxMzg3MCwKKzEzODcxLDEzODcyLDEzODczLDEzODc0LDEzODc1LDEzODc2 LDEzODc3LDEzODc4LDEzODc5LDEzODgwLDEzODgxLDEzODgyLAorMTM4ODMsMTM4ODQsMTM4ODUs MTM4ODYsMTM4ODcsMTM4ODgsMTM4ODksMTM4OTAsMTM4OTEsMTM4OTIsMTM4OTMsMTM4OTQsCisx Mzg5NSwxMzg5NiwxMzg5NywxMzg5OCwxMzg5OSwxMzkwMCwxMzkwMSwxMzkwMiwxMzkwMywxMzkw NCwxMzkwNSwxMzkwNiwKKzEzOTA3LDEzOTA4LDEzOTA5LDEzOTEwLDEzOTExLDEzOTEyLDEzOTEz LDEzOTE0LDEzOTE1LDEzOTE2LDEzOTE3LDEzOTE4LAorMTM5MTksMTM5MjAsMTM5MjEsMTM5MjIs MTM5MjMsMTM5MjQsMTM5MjUsMTM5MjYsMTM5MjcsMTM5MjgsMTM5MjksMTM5MzAsCisxMzkzMSwx MzkzMiwxMzkzMywxMzkzNCwxMzkzNSwxMzkzNiwxMzkzNywxMzkzOCwxMzkzOSwxMzk0MCwxMzk0 MSwxMzk0MiwKKzEzOTQzLDEzOTQ0LDEzOTQ1LDEzOTQ2LDEzOTQ3LDEzOTQ4LDEzOTQ5LDEzOTUw LDEzOTUxLDEzOTUyLDEzOTUzLDEzOTU0LAorMTM5NTUsMTM5NTYsMTM5NTcsMTM5NTgsMTM5NTks MTM5NjAsMTM5NjEsMTM5NjIsMTM5NjMsMTM5NjQsMTM5NjUsMTM5NjYsCisxMzk2NywxMzk2OCwx Mzk2OSwxMzk3MCwxMzk3MSwxMzk3MiwxMzk3MywxMzk3NCwxMzk3NSwxMzk3NiwxMzk3NywxMzk3 OCwKKzEzOTc5LDEzOTgwLDEzOTgxLDEzOTgyLDEzOTgzLDEzOTg0LDEzOTg1LDEzOTg2LDEzOTg3 LDEzOTg4LDEzOTg5LDEzOTkwLAorMTM5OTEsMTM5OTIsMTM5OTMsMTM5OTQsMTM5OTUsMTM5OTYs MTM5OTcsMTM5OTgsMTM5OTksMTQwMDAsMTQwMDEsMTQwMDIsCisxNDAwMywxNDAwNCwxNDAwNSwx NDAwNiwxNDAwNywxNDAwOCwxNDAwOSwxNDAxMCwxNDAxMSwxNDAxMiwxNDAxMywxNDAxNCwKKzE0 MDE1LDE0MDE2LDE0MDE3LDE0MDE4LDE0MDE5LDE0MDIwLDE0MDIxLDE0MDIyLDE0MDIzLDE0MDI0 LDE0MDI1LDE0MDI2LAorMTQwMjcsMTQwMjgsMTQwMjksMTQwMzAsMTQwMzEsMTQwMzIsMTQwMzMs MTQwMzQsMTQwMzUsMTQwMzYsMTQwMzcsMTQwMzgsCisxNDAzOSwxNDA0MCwxNDA0MSwxNDA0Miwx NDA0MywxNDA0NCwxNDA0NSwxNDA0NiwxNDA0NywxNDA0OCwxNDA0OSwxNDA1MCwKKzE0MDUxLDE0 MDUyLDE0MDUzLDE0MDU0LDE0MDU1LDE0MDU2LDE0MDU3LDE0MDU4LDE0MDU5LDE0MDYwLDE0MDYx LDE0MDYyLAorMTQwNjMsMTQwNjQsMTQwNjUsMTQwNjYsMTQwNjcsMTQwNjgsMTQwNjksMTQwNzAs MTQwNzEsMTQwNzIsMTQwNzMsMTQwNzQsCisxNDA3NSwxNDA3NiwxNDA3NywxNDA3OCwxNDA3OSwx NDA4MCwxNDA4MSwxNDA4MiwxNDA4MywxNDA4NCwxNDA4NSwxNDA4NiwKKzE0MDg3LDE0MDg4LDE0 MDg5LDE0MDkwLDE0MDkxLDE0MDkyLDE0MDkzLDE0MDk0LDE0MDk1LDE0MDk2LDE0MDk3LDE0MDk4 LAorMTQwOTksMTQxMDAsMTQxMDEsMTQxMDIsMTQxMDMsMTQxMDQsMTQxMDUsMTQxMDYsMTQxMDcs MTQxMDgsMTQxMDksMTQxMTAsCisxNDExMSwxNDExMiwxNDExMywxNDExNCwxNDExNSwxNDExNiwx NDExNywxNDExOCwxNDExOSwxNDEyMCwxNDEyMSwxNDEyMiwKKzE0MTIzLDE0MTI0LDE0MTI1LDE0 MTI2LDE0MTI3LDE0MTI4LDE0MTI5LDE0MTMwLDE0MTMxLDE0MTMyLDE0MTMzLDE0MTM0LAorMTQx MzUsMTQxMzYsMTQxMzcsMTQxMzgsMTQxMzksMTQxNDAsMTQxNDEsMTQxNDIsMTQxNDMsMTQxNDQs MTQxNDUsMTQxNDYsCisxNDE0NywxNDE0OCwxNDE0OSwxNDE1MCwxNDE1MSwxNDE1MiwxNDE1Mywx NDE1NCwxNDE1NSwxNDE1NiwxNDE1NywxNDE1OCwKKzE0MTU5LDE0MTYwLDE0MTYxLDE0MTYyLDE0 MTYzLDE0MTY0LDE0MTY1LDE0MTY2LDE0MTY3LDE0MTY4LDE0MTY5LDE0MTcwLAorMTQxNzEsMTQx NzIsMTQxNzMsMTQxNzQsMTQxNzUsMTQxNzYsMTQxNzcsMTQxNzgsMTQxNzksMTQxODAsMTQxODEs MTQxODIsCisxNDE4MywxNDE4NCwxNDE4NSwxNDE4NiwxNDE4NywxNDE4OCwxNDE4OSwxNDE5MCwx NDE5MSwxNDE5MiwxNDE5MywxNDE5NCwKKzE0MTk1LDE0MTk2LDE0MTk3LDE0MTk4LDE0MTk5LDE0 MjAwLDE0MjAxLDE0MjAyLDE0MjAzLDE0MjA0LDE0MjA1LDE0MjA2LAorMTQyMDcsMTQyMDgsMTQy MDksMTQyMTAsMTQyMTEsMTQyMTIsMTQyMTMsMTQyMTQsMTQyMTUsMTQyMTYsMTQyMTcsMTQyMTgs CisxNDIxOSwxNDIyMCwxNDIyMSwxNDIyMiwxNDIyMywxNDIyNCwxNDIyNSwxNDIyNiwxNDIyNywx NDIyOCwxNDIyOSwxNDIzMCwKKzE0MjMxLDE0MjMyLDE0MjMzLDE0MjM0LDE0MjM1LDE0MjM2LDE0 MjM3LDE0MjM4LDE0MjM5LDE0MjQwLDE0MjQxLDE0MjQyLAorMTQyNDMsMTQyNDQsMTQyNDUsMTQy NDYsMTQyNDcsMTQyNDgsMTQyNDksMTQyNTAsMTQyNTEsMTQyNTIsMTQyNTMsMTQyNTQsCisxNDI1 NSwxNDI1NiwxNDI1NywxNDI1OCwxNDI1OSwxNDI2MCwxNDI2MSwxNDI2MiwxNDI2MywxNDI2NCwx NDI2NSwxNDI2NiwKKzE0MjY3LDE0MjY4LDE0MjY5LDE0MjcwLDE0MjcxLDE0MjcyLDE0MjczLDE0 Mjc0LDE0Mjc1LDE0Mjc2LDE0Mjc3LDE0Mjc4LAorMTQyNzksMTQyODAsMTQyODEsMTQyODIsMTQy ODMsMTQyODQsMTQyODUsMTQyODYsMTQyODcsMTQyODgsMTQyODksMTQyOTAsCisxNDI5MSwxNDI5 MiwxNDI5MywxNDI5NCwxNDI5NSwxNDI5NiwxNDI5NywxNDI5OCwxNDI5OSwxNDMwMCwxNDMwMSwx NDMwMiwKKzE0MzAzLDE0MzA0LDE0MzA1LDE0MzA2LDE0MzA3LDE0MzA4LDE0MzA5LDE0MzEwLDE0 MzExLDE0MzEyLDE0MzEzLDE0MzE0LAorMTQzMTUsMTQzMTYsMTQzMTcsMTQzMTgsMTQzMTksMTQz MjAsMTQzMjEsMTQzMjIsMTQzMjMsMTQzMjQsMTQzMjUsMTQzMjYsCisxNDMyNywxNDMyOCwxNDMy OSwxNDMzMCwxNDMzMSwxNDMzMiwxNDMzMywxNDMzNCwxNDMzNSwxNDMzNiwxNDMzNywxNDMzOCwK KzE0MzM5LDE0MzQwLDE0MzQxLDE0MzQyLDE0MzQzLDE0MzQ0LDE0MzQ1LDE0MzQ2LDE0MzQ3LDE0 MzQ4LDE0MzQ5LDE0MzUwLAorMTQzNTEsMTQzNTIsMTQzNTMsMTQzNTQsMTQzNTUsMTQzNTYsMTQz NTcsMTQzNTgsMTQzNTksMTQzNjAsMTQzNjEsMTQzNjIsCisxNDM2MywxNDM2NCwxNDM2NSwxNDM2 NiwxNDM2NywxNDM2OCwxNDM2OSwxNDM3MCwxNDM3MSwxNDM3MiwxNDM3MywxNDM3NCwKKzE0Mzc1 LDE0Mzc2LDE0Mzc3LDE0Mzc4LDE0Mzc5LDE0MzgwLDE0MzgxLDE0MzgyLDE0MzgzLDE0Mzg0LDE0 Mzg1LDE0Mzg2LAorMTQzODcsMTQzODgsMTQzODksMTQzOTAsMTQzOTEsMTQzOTIsMTQzOTMsMTQz OTQsMTQzOTUsMTQzOTYsMTQzOTcsMTQzOTgsCisxNDM5OSwxNDQwMCwxNDQwMSwxNDQwMiwxNDQw MywxNDQwNCwxNDQwNSwxNDQwNiwxNDQwNywxNDQwOCwxNDQwOSwxNDQxMCwKKzE0NDExLDE0NDEy LDE0NDEzLDE0NDE0LDE0NDE1LDE0NDE2LDE0NDE3LDE0NDE4LDE0NDE5LDE0NDIwLDE0NDIxLDE0 NDIyLAorMTQ0MjMsMTQ0MjQsMTQ0MjUsMTQ0MjYsMTQ0MjcsMTQ0MjgsMTQ0MjksMTQ0MzAsMTQ0 MzEsMTQ0MzIsMTQ0MzMsMTQ0MzQsCisxNDQzNSwxNDQzNiwxNDQzNywxNDQzOCwxNDQzOSwxNDQ0 MCwxNDQ0MSwxNDQ0MiwxNDQ0MywxNDQ0NCwxNDQ0NSwxNDQ0NiwKKzE0NDQ3LDE0NDQ4LDE0NDQ5 LDE0NDUwLDE0NDUxLDE0NDUyLDE0NDUzLDE0NDU0LDE0NDU1LDE0NDU2LDE0NDU3LDE0NDU4LAor MTQ0NTksMTQ0NjAsMTQ0NjEsMTQ0NjIsMTQ0NjMsMTQ0NjQsMTQ0NjUsMTQ0NjYsMTQ0NjcsMTQ0 NjgsMTQ0NjksMTQ0NzAsCisxNDQ3MSwxNDQ3MiwxNDQ3MywxNDQ3NCwxNDQ3NSwxNDQ3NiwxNDQ3 NywxNDQ3OCwxNDQ3OSwxNDQ4MCwxNDQ4MSwxNDQ4MiwKKzE0NDgzLDE0NDg0LDE0NDg1LDE0NDg2 LDE0NDg3LDE0NDg4LDE0NDg5LDE0NDkwLDE0NDkxLDE0NDkyLDE0NDkzLDE0NDk0LAorMTQ0OTUs MTQ0OTYsMTQ0OTcsMTQ0OTgsMTQ0OTksMTQ1MDAsMTQ1MDEsMTQ1MDIsMTQ1MDMsMTQ1MDQsMTQ1 MDUsMTQ1MDYsCisxNDUwNywxNDUwOCwxNDUwOSwxNDUxMCwxNDUxMSwxNDUxMiwxNDUxMywxNDUx NCwxNDUxNSwxNDUxNiwxNDUxNywxNDUxOCwKKzE0NTE5LDE0NTIwLDE0NTIxLDE0NTIyLDE0NTIz LDE0NTI0LDE0NTI1LDE0NTI2LDE0NTI3LDE0NTI4LDE0NTI5LDE0NTMwLAorMTQ1MzEsMTQ1MzIs MTQ1MzMsMTQ1MzQsMTQ1MzUsMTQ1MzYsMTQ1MzcsMTQ1MzgsMTQ1MzksMTQ1NDAsMTQ1NDEsMTQ1 NDIsCisxNDU0MywxNDU0NCwxNDU0NSwxNDU0NiwxNDU0NywxNDU0OCwxNDU0OSwxNDU1MCwxNDU1 MSwxNDU1MiwxNDU1MywxNDU1NCwKKzE0NTU1LDE0NTU2LDE0NTU3LDE0NTU4LDE0NTU5LDE0NTYw LDE0NTYxLDE0NTYyLDE0NTYzLDE0NTY0LDE0NTY1LDE0NTY2LAorMTQ1NjcsMTQ1NjgsMTQ1Njks MTQ1NzAsMTQ1NzEsMTQ1NzIsMTQ1NzMsMTQ1NzQsMTQ1NzUsMTQ1NzYsMTQ1NzcsMTQ1NzgsCisx NDU3OSwxNDU4MCwxNDU4MSwxNDU4MiwxNDU4MywxNDU4NCwxNDU4NSwxNDU4NiwxNDU4NywxNDU4 OCwxNDU4OSwxNDU5MCwKKzE0NTkxLDE0NTkyLDE0NTkzLDE0NTk0LDE0NTk1LDE0NTk2LDE0NTk3 LDE0NTk4LDE0NTk5LDE0NjAwLDE0NjAxLDE0NjAyLAorMTQ2MDMsMTQ2MDQsMTQ2MDUsMTQ2MDYs MTQ2MDcsMTQ2MDgsMTQ2MDksMTQ2MTAsMTQ2MTEsMTQ2MTIsMTQ2MTMsMTQ2MTQsCisxNDYxNSwx NDYxNiwxNDYxNywxNDYxOCwxNDYxOSwxNDYyMCwxNDYyMSwxNDYyMiwxNDYyMywxNDYyNCwxNDYy NSwxNDYyNiwKKzE0NjI3LDE0NjI4LDE0NjI5LDE0NjMwLDE0NjMxLDE0NjMyLDE0NjMzLDE0NjM0 LDE0NjM1LDE0NjM2LDE0NjM3LDE0NjM4LAorMTQ2MzksMTQ2NDAsMTQ2NDEsMTQ2NDIsMTQ2NDMs MTQ2NDQsMTQ2NDUsMTQ2NDYsMTQ2NDcsMTQ2NDgsMTQ2NDksMTQ2NTAsCisxNDY1MSwxNDY1Miwx NDY1MywxNDY1NCwxNDY1NSwxNDY1NiwxNDY1NywxNDY1OCwxNDY1OSwxNDY2MCwxNDY2MSwxNDY2 MiwKKzE0NjYzLDE0NjY0LDE0NjY1LDE0NjY2LDE0NjY3LDE0NjY4LDE0NjY5LDE0NjcwLDE0Njcx LDE0NjcyLDE0NjczLDE0Njc0LAorMTQ2NzUsMTQ2NzYsMTQ2NzcsMTQ2NzgsMTQ2NzksMTQ2ODAs MTQ2ODEsMTQ2ODIsMTQ2ODMsMTQ2ODQsMTQ2ODUsMTQ2ODYsCisxNDY4NywxNDY4OCwxNDY4OSwx NDY5MCwxNDY5MSwxNDY5MiwxNDY5MywxNDY5NCwxNDY5NSwxNDY5NiwxNDY5NywxNDY5OCwKKzE0 Njk5LDE0NzAwLDE0NzAxLDE0NzAyLDE0NzAzLDE0NzA0LDE0NzA1LDE0NzA2LDE0NzA3LDE0NzA4 LDE0NzA5LDE0NzEwLAorMTQ3MTEsMTQ3MTIsMTQ3MTMsMTQ3MTQsMTQ3MTUsMTQ3MTYsMTQ3MTcs MTQ3MTgsMTQ3MTksMTQ3MjAsMTQ3MjEsMTQ3MjIsCisxNDcyMywxNDcyNCwxNDcyNSwxNDcyNiwx NDcyNywxNDcyOCwxNDcyOSwxNDczMCwxNDczMSwxNDczMiwxNDczMywxNDczNCwKKzE0NzM1LDE0 NzM2LDE0NzM3LDE0NzM4LDE0NzM5LDE0NzQwLDE0NzQxLDE0NzQyLDE0NzQzLDE0NzQ0LDE0NzQ1 LDE0NzQ2LAorMTQ3NDcsMTQ3NDgsMTQ3NDksMTQ3NTAsMTQ3NTEsMTQ3NTIsMTQ3NTMsMTQ3NTQs MTQ3NTUsMTQ3NTYsMTQ3NTcsMTQ3NTgsCisxNDc1OSwxNDc2MCwxNDc2MSwxNDc2MiwxNDc2Mywx NDc2NCwxNDc2NSwxNDc2NiwxNDc2NywxNDc2OCwxNDc2OSwxNDc3MCwKKzE0NzcxLDE0NzcyLDE0 NzczLDE0Nzc0LDE0Nzc1LDE0Nzc2LDE0Nzc3LDE0Nzc4LDE0Nzc5LDE0NzgwLDE0NzgxLDE0Nzgy LAorMTQ3ODMsMTQ3ODQsMTQ3ODUsMTQ3ODYsMTQ3ODcsMTQ3ODgsMTQ3ODksMTQ3OTAsMTQ3OTEs MTQ3OTIsMTQ3OTMsMTQ3OTQsCisxNDc5NSwxNDc5NiwxNDc5NywxNDc5OCwxNDc5OSwxNDgwMCwx NDgwMSwxNDgwMiwxNDgwMywxNDgwNCwxNDgwNSwxNDgwNiwKKzE0ODA3LDE0ODA4LDE0ODA5LDE0 ODEwLDE0ODExLDE0ODEyLDE0ODEzLDE0ODE0LDE0ODE1LDE0ODE2LDE0ODE3LDE0ODE4LAorMTQ4 MTksMTQ4MjAsMTQ4MjEsMTQ4MjIsMTQ4MjMsMTQ4MjQsMTQ4MjUsMTQ4MjYsMTQ4MjcsMTQ4Mjgs MTQ4MjksMTQ4MzAsCisxNDgzMSwxNDgzMiwxNDgzMywxNDgzNCwxNDgzNSwxNDgzNiwxNDgzNywx NDgzOCwxNDgzOSwxNDg0MCwxNDg0MSwxNDg0MiwKKzE0ODQzLDE0ODQ0LDE0ODQ1LDE0ODQ2LDE0 ODQ3LDE0ODQ4LDE0ODQ5LDE0ODUwLDE0ODUxLDE0ODUyLDE0ODUzLDE0ODU0LAorMTQ4NTUsMTQ4 NTYsMTQ4NTcsMTQ4NTgsMTQ4NTksMTQ4NjAsMTQ4NjEsMTQ4NjIsMTQ4NjMsMTQ4NjQsMTQ4NjUs MTQ4NjYsCisxNDg2NywxNDg2OCwxNDg2OSwxNDg3MCwxNDg3MSwxNDg3MiwxNDg3MywxNDg3NCwx NDg3NSwxNDg3NiwxNDg3NywxNDg3OCwKKzE0ODc5LDE0ODgwLDE0ODgxLDE0ODgyLDE0ODgzLDE0 ODg0LDE0ODg1LDE0ODg2LDE0ODg3LDE0ODg4LDE0ODg5LDE0ODkwLAorMTQ4OTEsMTQ4OTIsMTQ4 OTMsMTQ4OTQsMTQ4OTUsMTQ4OTYsMTQ4OTcsMTQ4OTgsMTQ4OTksMTQ5MDAsMTQ5MDEsMTQ5MDIs CisxNDkwMywxNDkwNCwxNDkwNSwxNDkwNiwxNDkwNywxNDkwOCwxNDkwOSwxNDkxMCwxNDkxMSwx NDkxMiwxNDkxMywxNDkxNCwKKzE0OTE1LDE0OTE2LDE0OTE3LDE0OTE4LDE0OTE5LDE0OTIwLDE0 OTIxLDE0OTIyLDE0OTIzLDE0OTI0LDE0OTI1LDE0OTI2LAorMTQ5MjcsMTQ5MjgsMTQ5MjksMTQ5 MzAsMTQ5MzEsMTQ5MzIsMTQ5MzMsMTQ5MzQsMTQ5MzUsMTQ5MzYsMTQ5MzcsMTQ5MzgsCisxNDkz OSwxNDk0MCwxNDk0MSwxNDk0MiwxNDk0MywxNDk0NCwxNDk0NSwxNDk0NiwxNDk0NywxNDk0OCwx NDk0OSwxNDk1MCwKKzE0OTUxLDE0OTUyLDE0OTUzLDE0OTU0LDE0OTU1LDE0OTU2LDE0OTU3LDE0 OTU4LDE0OTU5LDE0OTYwLDE0OTYxLDE0OTYyLAorMTQ5NjMsMTQ5NjQsMTQ5NjUsMTQ5NjYsMTQ5 NjcsMTQ5NjgsMTQ5NjksMTQ5NzAsMTQ5NzEsMTQ5NzIsMTQ5NzMsMTQ5NzQsCisxNDk3NSwxNDk3 NiwxNDk3NywxNDk3OCwxNDk3OSwxNDk4MCwxNDk4MSwxNDk4MiwxNDk4MywxNDk4NCwxNDk4NSwx NDk4NiwKKzE0OTg3LDE0OTg4LDE0OTg5LDE0OTkwLDE0OTkxLDE0OTkyLDE0OTkzLDE0OTk0LDE0 OTk1LDE0OTk2LDE0OTk3LDE0OTk4LAorMTQ5OTksMTUwMDAsMTUwMDEsMTUwMDIsMTUwMDMsMTUw MDQsMTUwMDUsMTUwMDYsMTUwMDcsMTUwMDgsMTUwMDksMTUwMTAsCisxNTAxMSwxNTAxMiwxNTAx MywxNTAxNCwxNTAxNSwxNTAxNiwxNTAxNywxNTAxOCwxNTAxOSwxNTAyMCwxNTAyMSwxNTAyMiwK KzE1MDIzLDE1MDI0LDE1MDI1LDE1MDI2LDE1MDI3LDE1MDI4LDE1MDI5LDE1MDMwLDE1MDMxLDE1 MDMyLDE1MDMzLDE1MDM0LAorMTUwMzUsMTUwMzYsMTUwMzcsMTUwMzgsMTUwMzksMTUwNDAsMTUw NDEsMTUwNDIsMTUwNDMsMTUwNDQsMTUwNDUsMTUwNDYsCisxNTA0NywxNTA0OCwxNTA0OSwxNTA1 MCwxNTA1MSwxNTA1MiwxNTA1MywxNTA1NCwxNTA1NSwxNTA1NiwxNTA1NywxNTA1OCwKKzE1MDU5 LDE1MDYwLDE1MDYxLDE1MDYyLDE1MDYzLDE1MDY0LDE1MDY1LDE1MDY2LDE1MDY3LDE1MDY4LDE1 MDY5LDE1MDcwLAorMTUwNzEsMTUwNzIsMTUwNzMsMTUwNzQsMTUwNzUsMTUwNzYsMTUwNzcsMTUw NzgsMTUwNzksMTUwODAsMTUwODEsMTUwODIsCisxNTA4MywxNTA4NCwxNTA4NSwxNTA4NiwxNTA4 NywxNTA4OCwxNTA4OSwxNTA5MCwxNTA5MSwxNTA5MiwxNTA5MywxNTA5NCwKKzE1MDk1LDE1MDk2 LDE1MDk3LDE1MDk4LDE1MDk5LDE1MTAwLDE1MTAxLDE1MTAyLDE1MTAzLDE1MTA0LDE1MTA1LDE1 MTA2LAorMTUxMDcsMTUxMDgsMTUxMDksMTUxMTAsMTUxMTEsMTUxMTIsMTUxMTMsMTUxMTQsMTUx MTUsMTUxMTYsMTUxMTcsMTUxMTgsCisxNTExOSwxNTEyMCwxNTEyMSwxNTEyMiwxNTEyMywxNTEy NCwxNTEyNSwxNTEyNiwxNTEyNywxNTEyOCwxNTEyOSwxNTEzMCwKKzE1MTMxLDE1MTMyLDE1MTMz LDE1MTM0LDE1MTM1LDE1MTM2LDE1MTM3LDE1MTM4LDE1MTM5LDE1MTQwLDE1MTQxLDE1MTQyLAor MTUxNDMsMTUxNDQsMTUxNDUsMTUxNDYsMTUxNDcsMTUxNDgsMTUxNDksMTUxNTAsMTUxNTEsMTUx NTIsMTUxNTMsMTUxNTQsCisxNTE1NSwxNTE1NiwxNTE1NywxNTE1OCwxNTE1OSwxNTE2MCwxNTE2 MSwxNTE2MiwxNTE2MywxNTE2NCwxNTE2NSwxNTE2NiwKKzE1MTY3LDE1MTY4LDE1MTY5LDE1MTcw LDE1MTcxLDE1MTcyLDE1MTczLDE1MTc0LDE1MTc1LDE1MTc2LDE1MTc3LDE1MTc4LAorMTUxNzks MTUxODAsMTUxODEsMTUxODIsMTUxODMsMTUxODQsMTUxODUsMTUxODYsMTUxODcsMTUxODgsMTUx ODksMTUxOTAsCisxNTE5MSwxNTE5MiwxNTE5MywxNTE5NCwxNTE5NSwxNTE5NiwxNTE5NywxNTE5 OCwxNTE5OSwxNTIwMCwxNTIwMSwxNTIwMiwKKzE1MjAzLDE1MjA0LDE1MjA1LDE1MjA2LDE1MjA3 LDE1MjA4LDE1MjA5LDE1MjEwLDE1MjExLDE1MjEyLDE1MjEzLDE1MjE0LAorMTUyMTUsMTUyMTYs MTUyMTcsMTUyMTgsMTUyMTksMTUyMjAsMTUyMjEsMTUyMjIsMTUyMjMsMTUyMjQsMTUyMjUsMTUy MjYsCisxNTIyNywxNTIyOCwxNTIyOSwxNTIzMCwxNTIzMSwxNTIzMiwxNTIzMywxNTIzNCwxNTIz NSwxNTIzNiwxNTIzNywxNTIzOCwKKzE1MjM5LDE1MjQwLDE1MjQxLDE1MjQyLDE1MjQzLDE1MjQ0 LDE1MjQ1LDE1MjQ2LDE1MjQ3LDE1MjQ4LDE1MjQ5LDE1MjUwLAorMTUyNTEsMTUyNTIsMTUyNTMs MTUyNTQsMTUyNTUsMTUyNTYsMTUyNTcsMTUyNTgsMTUyNTksMTUyNjAsMTUyNjEsMTUyNjIsCisx NTI2MywxNTI2NCwxNTI2NSwxNTI2NiwxNTI2NywxNTI2OCwxNTI2OSwxNTI3MCwxNTI3MSwxNTI3 MiwxNTI3MywxNTI3NCwKKzE1Mjc1LDE1Mjc2LDE1Mjc3LDE1Mjc4LDE1Mjc5LDE1MjgwLDE1Mjgx LDE1MjgyLDE1MjgzLDE1Mjg0LDE1Mjg1LDE1Mjg2LAorMTUyODcsMTUyODgsMTUyODksMTUyOTAs MTUyOTEsMTUyOTIsMTUyOTMsMTUyOTQsMTUyOTUsMTUyOTYsMTUyOTcsMTUyOTgsCisxNTI5OSwx NTMwMCwxNTMwMSwxNTMwMiwxNTMwMywxNTMwNCwxNTMwNSwxNTMwNiwxNTMwNywxNTMwOCwxNTMw OSwxNTMxMCwKKzE1MzExLDE1MzEyLDE1MzEzLDE1MzE0LDE1MzE1LDE1MzE2LDE1MzE3LDE1MzE4 LDE1MzE5LDE1MzIwLDE1MzIxLDE1MzIyLAorMTUzMjMsMTUzMjQsMTUzMjUsMTUzMjYsMTUzMjcs MTUzMjgsMTUzMjksMTUzMzAsMTUzMzEsMTUzMzIsMTUzMzMsMTUzMzQsCisxNTMzNSwxNTMzNiwx NTMzNywxNTMzOCwxNTMzOSwxNTM0MCwxNTM0MSwxNTM0MiwxNTM0MywxNTM0NCwxNTM0NSwxNTM0 NiwKKzE1MzQ3LDE1MzQ4LDE1MzQ5LDE1MzUwLDE1MzUxLDE1MzUyLDE1MzUzLDE1MzU0LDE1MzU1 LDE1MzU2LDE1MzU3LDE1MzU4LAorMTUzNTksMTUzNjAsMTUzNjEsMTUzNjIsMTUzNjMsMTUzNjQs MTUzNjUsMTUzNjYsMTUzNjcsMTUzNjgsMTUzNjksMTUzNzAsCisxNTM3MSwxNTM3MiwxNTM3Mywx NTM3NCwxNTM3NSwxNTM3NiwxNTM3NywxNTM3OCwxNTM3OSwxNTM4MCwxNTM4MSwxNTM4MiwKKzE1 MzgzLDE1Mzg0LDE1Mzg1LDE1Mzg2LDE1Mzg3LDE1Mzg4LDE1Mzg5LDE1MzkwLDE1MzkxLDE1Mzky LDE1MzkzLDE1Mzk0LAorMTUzOTUsMTUzOTYsMTUzOTcsMTUzOTgsMTUzOTksMTU0MDAsMTU0MDEs MTU0MDIsMTU0MDMsMTU0MDQsMTU0MDUsMTU0MDYsCisxNTQwNywxNTQwOCwxNTQwOSwxNTQxMCwx NTQxMSwxNTQxMiwxNTQxMywxNTQxNCwxNTQxNSwxNTQxNiwxNTQxNywxNTQxOCwKKzE1NDE5LDE1 NDIwLDE1NDIxLDE1NDIyLDE1NDIzLDE1NDI0LDE1NDI1LDE1NDI2LDE1NDI3LDE1NDI4LDE1NDI5 LDE1NDMwLAorMTU0MzEsMTU0MzIsMTU0MzMsMTU0MzQsMTU0MzUsMTU0MzYsMTU0MzcsMTU0Mzgs MTU0MzksMTU0NDAsMTU0NDEsMTU0NDIsCisxNTQ0MywxNTQ0NCwxNTQ0NSwxNTQ0NiwxNTQ0Nywx NTQ0OCwxNTQ0OSwxNTQ1MCwxNTQ1MSwxNTQ1MiwxNTQ1MywxNTQ1NCwKKzE1NDU1LDE1NDU2LDE1 NDU3LDE1NDU4LDE1NDU5LDE1NDYwLDE1NDYxLDE1NDYyLDE1NDYzLDE1NDY0LDE1NDY1LDE1NDY2 LAorMTU0NjcsMTU0NjgsMTU0NjksMTU0NzAsMTU0NzEsMTU0NzIsMTU0NzMsMTU0NzQsMTU0NzUs MTU0NzYsMTU0NzcsMTU0NzgsCisxNTQ3OSwxNTQ4MCwxNTQ4MSwxNTQ4MiwxNTQ4MywxNTQ4NCwx NTQ4NSwxNTQ4NiwxNTQ4NywxNTQ4OCwxNTQ4OSwxNTQ5MCwKKzE1NDkxLDE1NDkyLDE1NDkzLDE1 NDk0LDE1NDk1LDE1NDk2LDE1NDk3LDE1NDk4LDE1NDk5LDE1NTAwLDE1NTAxLDE1NTAyLAorMTU1 MDMsMTU1MDQsMTU1MDUsMTU1MDYsMTU1MDcsMTU1MDgsMTU1MDksMTU1MTAsMTU1MTEsMTU1MTIs MTU1MTMsMTU1MTQsCisxNTUxNSwxNTUxNiwxNTUxNywxNTUxOCwxNTUxOSwxNTUyMCwxNTUyMSwx NTUyMiwxNTUyMywxNTUyNCwxNTUyNSwxNTUyNiwKKzE1NTI3LDE1NTI4LDE1NTI5LDE1NTMwLDE1 NTMxLDE1NTMyLDE1NTMzLDE1NTM0LDE1NTM1LDE1NTM2LDE1NTM3LDE1NTM4LAorMTU1MzksMTU1 NDAsMTU1NDEsMTU1NDIsMTU1NDMsMTU1NDQsMTU1NDUsMTU1NDYsMTU1NDcsMTU1NDgsMTU1NDks MTU1NTAsCisxNTU1MSwxNTU1MiwxNTU1MywxNTU1NCwxNTU1NSwxNTU1NiwxNTU1NywxNTU1OCwx NTU1OSwxNTU2MCwxNTU2MSwxNTU2MiwKKzE1NTYzLDE1NTY0LDE1NTY1LDE1NTY2LDE1NTY3LDE1 NTY4LDE1NTY5LDE1NTcwLDE1NTcxLDE1NTcyLDE1NTczLDE1NTc0LAorMTU1NzUsMTU1NzYsMTU1 NzcsMTU1NzgsMTU1NzksMTU1ODAsMTU1ODEsMTU1ODIsMTU1ODMsMTU1ODQsMTU1ODUsMTU1ODYs CisxNTU4NywxNTU4OCwxNTU4OSwxNTU5MCwxNTU5MSwxNTU5MiwxNTU5MywxNTU5NCwxNTU5NSwx NTU5NiwxNTU5NywxNTU5OCwKKzE1NTk5LDE1NjAwLDE1NjAxLDE1NjAyLDE1NjAzLDE1NjA0LDE1 NjA1LDE1NjA2LDE1NjA3LDE1NjA4LDE1NjA5LDE1NjEwLAorMTU2MTEsMTU2MTIsMTU2MTMsMTU2 MTQsMTU2MTUsMTU2MTYsMTU2MTcsMTU2MTgsMTU2MTksMTU2MjAsMTU2MjEsMTU2MjIsCisxNTYy MywxNTYyNCwxNTYyNSwxNTYyNiwxNTYyNywxNTYyOCwxNTYyOSwxNTYzMCwxNTYzMSwxNTYzMiwx NTYzMywxNTYzNCwKKzE1NjM1LDE1NjM2LDE1NjM3LDE1NjM4LDE1NjM5LDE1NjQwLDE1NjQxLDE1 NjQyLDE1NjQzLDE1NjQ0LDE1NjQ1LDE1NjQ2LAorMTU2NDcsMTU2NDgsMTU2NDksMTU2NTAsMTU2 NTEsMTU2NTIsMTU2NTMsMTU2NTQsMTU2NTUsMTU2NTYsMTU2NTcsMTU2NTgsCisxNTY1OSwxNTY2 MCwxNTY2MSwxNTY2MiwxNTY2MywxNTY2NCwxNTY2NSwxNTY2NiwxNTY2NywxNTY2OCwxNTY2OSwx NTY3MCwKKzE1NjcxLDE1NjcyLDE1NjczLDE1Njc0LDE1Njc1LDE1Njc2LDE1Njc3LDE1Njc4LDE1 Njc5LDE1NjgwLDE1NjgxLDE1NjgyLAorMTU2ODMsMTU2ODQsMTU2ODUsMTU2ODYsMTU2ODcsMTU2 ODgsMTU2ODksMTU2OTAsMTU2OTEsMTU2OTIsMTU2OTMsMTU2OTQsCisxNTY5NSwxNTY5NiwxNTY5 NywxNTY5OCwxNTY5OSwxNTcwMCwxNTcwMSwxNTcwMiwxNTcwMywxNTcwNCwxNTcwNSwxNTcwNiwK KzE1NzA3LDE1NzA4LDE1NzA5LDE1NzEwLDE1NzExLDE1NzEyLDE1NzEzLDE1NzE0LDE1NzE1LDE1 NzE2LDE1NzE3LDE1NzE4LAorMTU3MTksMTU3MjAsMTU3MjEsMTU3MjIsMTU3MjMsMTU3MjQsMTU3 MjUsMTU3MjYsMTU3MjcsMTU3MjgsMTU3MjksMTU3MzAsCisxNTczMSwxNTczMiwxNTczMywxNTcz NCwxNTczNSwxNTczNiwxNTczNywxNTczOCwxNTczOSwxNTc0MCwxNTc0MSwxNTc0MiwKKzE1NzQz LDE1NzQ0LDE1NzQ1LDE1NzQ2LDE1NzQ3LDE1NzQ4LDE1NzQ5LDE1NzUwLDE1NzUxLDE1NzUyLDE1 NzUzLDE1NzU0LAorMTU3NTUsMTU3NTYsMTU3NTcsMTU3NTgsMTU3NTksMTU3NjAsMTU3NjEsMTU3 NjIsMTU3NjMsMTU3NjQsMTU3NjUsMTU3NjYsCisxNTc2NywxNTc2OCwxNTc2OSwxNTc3MCwxNTc3 MSwxNTc3MiwxNTc3MywxNTc3NCwxNTc3NSwxNTc3NiwxNTc3NywxNTc3OCwKKzE1Nzc5LDE1Nzgw LDE1NzgxLDE1NzgyLDE1NzgzLDE1Nzg0LDE1Nzg1LDE1Nzg2LDE1Nzg3LDE1Nzg4LDE1Nzg5LDE1 NzkwLAorMTU3OTEsMTU3OTIsMTU3OTMsMTU3OTQsMTU3OTUsMTU3OTYsMTU3OTcsMTU3OTgsMTU3 OTksMTU4MDAsMTU4MDEsMTU4MDIsCisxNTgwMywxNTgwNCwxNTgwNSwxNTgwNiwxNTgwNywxNTgw OCwxNTgwOSwxNTgxMCwxNTgxMSwxNTgxMiwxNTgxMywxNTgxNCwKKzE1ODE1LDE1ODE2LDE1ODE3 LDE1ODE4LDE1ODE5LDE1ODIwLDE1ODIxLDE1ODIyLDE1ODIzLDE1ODI0LDE1ODI1LDE1ODI2LAor MTU4MjcsMTU4MjgsMTU4MjksMTU4MzAsMTU4MzEsMTU4MzIsMTU4MzMsMTU4MzQsMTU4MzUsMTU4 MzYsMTU4MzcsMTU4MzgsCisxNTgzOSwxNTg0MCwxNTg0MSwxNTg0MiwxNTg0MywxNTg0NCwxNTg0 NSwxNTg0NiwxNTg0NywxNTg0OCwxNTg0OSwxNTg1MCwKKzE1ODUxLDE1ODUyLDE1ODUzLDE1ODU0 LDE1ODU1LDE1ODU2LDE1ODU3LDE1ODU4LDE1ODU5LDE1ODYwLDE1ODYxLDE1ODYyLAorMTU4NjMs MTU4NjQsMTU4NjUsMTU4NjYsMTU4NjcsMTU4NjgsMTU4NjksMTU4NzAsMTU4NzEsMTU4NzIsMTU4 NzMsMTU4NzQsCisxNTg3NSwxNTg3NiwxNTg3NywxNTg3OCwxNTg3OSwxNTg4MCwxNTg4MSwxNTg4 MiwxNTg4MywxNTg4NCwxNTg4NSwxNTg4NiwKKzE1ODg3LDE1ODg4LDE1ODg5LDE1ODkwLDE1ODkx LDE1ODkyLDE1ODkzLDE1ODk0LDE1ODk1LDE1ODk2LDE1ODk3LDE1ODk4LAorMTU4OTksMTU5MDAs MTU5MDEsMTU5MDIsMTU5MDMsMTU5MDQsMTU5MDUsMTU5MDYsMTU5MDcsMTU5MDgsMTU5MDksMTU5 MTAsCisxNTkxMSwxNTkxMiwxNTkxMywxNTkxNCwxNTkxNSwxNTkxNiwxNTkxNywxNTkxOCwxNTkx OSwxNTkyMCwxNTkyMSwxNTkyMiwKKzE1OTIzLDE1OTI0LDE1OTI1LDE1OTI2LDE1OTI3LDE1OTI4 LDE1OTI5LDE1OTMwLDE1OTMxLDE1OTMyLDE1OTMzLDE1OTM0LAorMTU5MzUsMTU5MzYsMTU5Mzcs MTU5MzgsMTU5MzksMTU5NDAsMTU5NDEsMTU5NDIsMTU5NDMsMTU5NDQsMTU5NDUsMTU5NDYsCisx NTk0NywxNTk0OCwxNTk0OSwxNTk1MCwxNTk1MSwxNTk1MiwxNTk1MywxNTk1NCwxNTk1NSwxNTk1 NiwxNTk1NywxNTk1OCwKKzE1OTU5LDE1OTYwLDE1OTYxLDE1OTYyLDE1OTYzLDE1OTY0LDE1OTY1 LDE1OTY2LDE1OTY3LDE1OTY4LDE1OTY5LDE1OTcwLAorMTU5NzEsMTU5NzIsMTU5NzMsMTU5NzQs MTU5NzUsMTU5NzYsMTU5NzcsMTU5NzgsMTU5NzksMTU5ODAsMTU5ODEsMTU5ODIsCisxNTk4Mywx NTk4NCwxNTk4NSwxNTk4NiwxNTk4NywxNTk4OCwxNTk4OSwxNTk5MCwxNTk5MSwxNTk5MiwxNTk5 MywxNTk5NCwKKzE1OTk1LDE1OTk2LDE1OTk3LDE1OTk4LDE1OTk5LDE2MDAwLDE2MDAxLDE2MDAy LDE2MDAzLDE2MDA0LDE2MDA1LDE2MDA2LAorMTYwMDcsMTYwMDgsMTYwMDksMTYwMTAsMTYwMTEs MTYwMTIsMTYwMTMsMTYwMTQsMTYwMTUsMTYwMTYsMTYwMTcsMTYwMTgsCisxNjAxOSwxNjAyMCwx NjAyMSwxNjAyMiwxNjAyMywxNjAyNCwxNjAyNSwxNjAyNiwxNjAyNywxNjAyOCwxNjAyOSwxNjAz MCwKKzE2MDMxLDE2MDMyLDE2MDMzLDE2MDM0LDE2MDM1LDE2MDM2LDE2MDM3LDE2MDM4LDE2MDM5 LDE2MDQwLDE2MDQxLDE2MDQyLAorMTYwNDMsMTYwNDQsMTYwNDUsMTYwNDYsMTYwNDcsMTYwNDgs MTYwNDksMTYwNTAsMTYwNTEsMTYwNTIsMTYwNTMsMTYwNTQsCisxNjA1NSwxNjA1NiwxNjA1Nywx NjA1OCwxNjA1OSwxNjA2MCwxNjA2MSwxNjA2MiwxNjA2MywxNjA2NCwxNjA2NSwxNjA2NiwKKzE2 MDY3LDE2MDY4LDE2MDY5LDE2MDcwLDE2MDcxLDE2MDcyLDE2MDczLDE2MDc0LDE2MDc1LDE2MDc2 LDE2MDc3LDE2MDc4LAorMTYwNzksMTYwODAsMTYwODEsMTYwODIsMTYwODMsMTYwODQsMTYwODUs MTYwODYsMTYwODcsMTYwODgsMTYwODksMTYwOTAsCisxNjA5MSwxNjA5MiwxNjA5MywxNjA5NCwx NjA5NSwxNjA5NiwxNjA5NywxNjA5OCwxNjA5OSwxNjEwMCwxNjEwMSwxNjEwMiwKKzE2MTAzLDE2 MTA0LDE2MTA1LDE2MTA2LDE2MTA3LDE2MTA4LDE2MTA5LDE2MTEwLDE2MTExLDE2MTEyLDE2MTEz LDE2MTE0LAorMTYxMTUsMTYxMTYsMTYxMTcsMTYxMTgsMTYxMTksMTYxMjAsMTYxMjEsMTYxMjIs MTYxMjMsMTYxMjQsMTYxMjUsMTYxMjYsCisxNjEyNywxNjEyOCwxNjEyOSwxNjEzMCwxNjEzMSwx NjEzMiwxNjEzMywxNjEzNCwxNjEzNSwxNjEzNiwxNjEzNywxNjEzOCwKKzE2MTM5LDE2MTQwLDE2 MTQxLDE2MTQyLDE2MTQzLDE2MTQ0LDE2MTQ1LDE2MTQ2LDE2MTQ3LDE2MTQ4LDE2MTQ5LDE2MTUw LAorMTYxNTEsMTYxNTIsMTYxNTMsMTYxNTQsMTYxNTUsMTYxNTYsMTYxNTcsMTYxNTgsMTYxNTks MTYxNjAsMTYxNjEsMTYxNjIsCisxNjE2MywxNjE2NCwxNjE2NSwxNjE2NiwxNjE2NywxNjE2OCwx NjE2OSwxNjE3MCwxNjE3MSwxNjE3MiwxNjE3MywxNjE3NCwKKzE2MTc1LDE2MTc2LDE2MTc3LDE2 MTc4LDE2MTc5LDE2MTgwLDE2MTgxLDE2MTgyLDE2MTgzLDE2MTg0LDE2MTg1LDE2MTg2LAorMTYx ODcsMTYxODgsMTYxODksMTYxOTAsMTYxOTEsMTYxOTIsMTYxOTMsMTYxOTQsMTYxOTUsMTYxOTYs MTYxOTcsMTYxOTgsCisxNjE5OSwxNjIwMCwxNjIwMSwxNjIwMiwxNjIwMywxNjIwNCwxNjIwNSwx NjIwNiwxNjIwNywxNjIwOCwxNjIwOSwxNjIxMCwKKzE2MjExLDE2MjEyLDE2MjEzLDE2MjE0LDE2 MjE1LDE2MjE2LDE2MjE3LDE2MjE4LDE2MjE5LDE2MjIwLDE2MjIxLDE2MjIyLAorMTYyMjMsMTYy MjQsMTYyMjUsMTYyMjYsMTYyMjcsMTYyMjgsMTYyMjksMTYyMzAsMTYyMzEsMTYyMzIsMTYyMzMs MTYyMzQsCisxNjIzNSwxNjIzNiwxNjIzNywxNjIzOCwxNjIzOSwxNjI0MCwxNjI0MSwxNjI0Miwx NjI0MywxNjI0NCwxNjI0NSwxNjI0NiwKKzE2MjQ3LDE2MjQ4LDE2MjQ5LDE2MjUwLDE2MjUxLDE2 MjUyLDE2MjUzLDE2MjU0LDE2MjU1LDE2MjU2LDE2MjU3LDE2MjU4LAorMTYyNTksMTYyNjAsMTYy NjEsMTYyNjIsMTYyNjMsMTYyNjQsMTYyNjUsMTYyNjYsMTYyNjcsMTYyNjgsMTYyNjksMTYyNzAs CisxNjI3MSwxNjI3MiwxNjI3MywxNjI3NCwxNjI3NSwxNjI3NiwxNjI3NywxNjI3OCwxNjI3OSwx NjI4MCwxNjI4MSwxNjI4MiwKKzE2MjgzLDE2Mjg0LDE2Mjg1LDE2Mjg2LDE2Mjg3LDE2Mjg4LDE2 Mjg5LDE2MjkwLDE2MjkxLDE2MjkyLDE2MjkzLDE2Mjk0LAorMTYyOTUsMTYyOTYsMTYyOTcsMTYy OTgsMTYyOTksMTYzMDAsMTYzMDEsMTYzMDIsMTYzMDMsMTYzMDQsMTYzMDUsMTYzMDYsCisxNjMw NywxNjMwOCwxNjMwOSwxNjMxMCwxNjMxMSwxNjMxMiwxNjMxMywxNjMxNCwxNjMxNSwxNjMxNiwx NjMxNywxNjMxOCwKKzE2MzE5LDE2MzIwLDE2MzIxLDE2MzIyLDE2MzIzLDE2MzI0LDE2MzI1LDE2 MzI2LDE2MzI3LDE2MzI4LDE2MzI5LDE2MzMwLAorMTYzMzEsMTYzMzIsMTYzMzMsMTYzMzQsMTYz MzUsMTYzMzYsMTYzMzcsMTYzMzgsMTYzMzksMTYzNDAsMTYzNDEsMTYzNDIsCisxNjM0MywxNjM0 NCwxNjM0NSwxNjM0NiwxNjM0NywxNjM0OCwxNjM0OSwxNjM1MCwxNjM1MSwxNjM1MiwxNjM1Mywx NjM1NCwKKzE2MzU1LDE2MzU2LDE2MzU3LDE2MzU4LDE2MzU5LDE2MzYwLDE2MzYxLDE2MzYyLDE2 MzYzLDE2MzY0LDE2MzY1LDE2MzY2LAorMTYzNjcsMTYzNjgsMTYzNjksMTYzNzAsMTYzNzEsMTYz NzIsMTYzNzMsMTYzNzQsMTYzNzUsMTYzNzYsMTYzNzcsMTYzNzgsCisxNjM3OSwxNjM4MCwxNjM4 MSwxNjM4MiwxNjM4MywxNjM4NCwxNjM4NSwxNjM4NiwxNjM4NywxNjM4OCwxNjM4OSwxNjM5MCwK KzE2MzkxLDE2MzkyLDE2MzkzLDE2Mzk0LDE2Mzk1LDE2Mzk2LDE2Mzk3LDE2Mzk4LDE2Mzk5LDE2 NDAwLDE2NDAxLDE2NDAyLAorMTY0MDMsMTY0MDQsMTY0MDUsMTY0MDYsMTY0MDcsMTY0MDgsMTY0 MDksMTY0MTAsMTY0MTEsMTY0MTIsMTY0MTMsMTY0MTQsCisxNjQxNSwxNjQxNiwxNjQxNywxNjQx OCwxNjQxOSwxNjQyMCwxNjQyMSwxNjQyMiwxNjQyMywxNjQyNCwxNjQyNSwxNjQyNiwKKzE2NDI3 LDE2NDI4LDE2NDI5LDE2NDMwLDE2NDMxLDE2NDMyLDE2NDMzLDE2NDM0LDE2NDM1LDE2NDM2LDE2 NDM3LDE2NDM4LAorMTY0MzksMTY0NDAsMTY0NDEsMTY0NDIsMTY0NDMsMTY0NDQsMTY0NDUsMTY0 NDYsMTY0NDcsMTY0NDgsMTY0NDksMTY0NTAsCisxNjQ1MSwxNjQ1MiwxNjQ1MywxNjQ1NCwxNjQ1 NSwxNjQ1NiwxNjQ1NywxNjQ1OCwxNjQ1OSwxNjQ2MCwxNjQ2MSwxNjQ2MiwKKzE2NDYzLDE2NDY0 LDE2NDY1LDE2NDY2LDE2NDY3LDE2NDY4LDE2NDY5LDE2NDcwLDE2NDcxLDE2NDcyLDE2NDczLDE2 NDc0LAorMTY0NzUsMTY0NzYsMTY0NzcsMTY0NzgsMTY0NzksMTY0ODAsMTY0ODEsMTY0ODIsMTY0 ODMsMTY0ODQsMTY0ODUsMTY0ODYsCisxNjQ4NywxNjQ4OCwxNjQ4OSwxNjQ5MCwxNjQ5MSwxNjQ5 MiwxNjQ5MywxNjQ5NCwxNjQ5NSwxNjQ5NiwxNjQ5NywxNjQ5OCwKKzE2NDk5LDE2NTAwLDE2NTAx LDE2NTAyLDE2NTAzLDE2NTA0LDE2NTA1LDE2NTA2LDE2NTA3LDE2NTA4LDE2NTA5LDE2NTEwLAor MTY1MTEsMTY1MTIsMTY1MTMsMTY1MTQsMTY1MTUsMTY1MTYsMTY1MTcsMTY1MTgsMTY1MTksMTY1 MjAsMTY1MjEsMTY1MjIsCisxNjUyMywxNjUyNCwxNjUyNSwxNjUyNiwxNjUyNywxNjUyOCwxNjUy OSwxNjUzMCwxNjUzMSwxNjUzMiwxNjUzMywxNjUzNCwKKzE2NTM1LDE2NTM2LDE2NTM3LDE2NTM4 LDE2NTM5LDE2NTQwLDE2NTQxLDE2NTQyLDE2NTQzLDE2NTQ0LDE2NTQ1LDE2NTQ2LAorMTY1NDcs MTY1NDgsMTY1NDksMTY1NTAsMTY1NTEsMTY1NTIsMTY1NTMsMTY1NTQsMTY1NTUsMTY1NTYsMTY1 NTcsMTY1NTgsCisxNjU1OSwxNjU2MCwxNjU2MSwxNjU2MiwxNjU2MywxNjU2NCwxNjU2NSwxNjU2 NiwxNjU2NywxNjU2OCwxNjU2OSwxNjU3MCwKKzE2NTcxLDE2NTcyLDE2NTczLDE2NTc0LDE2NTc1 LDE2NTc2LDE2NTc3LDE2NTc4LDE2NTc5LDE2NTgwLDE2NTgxLDE2NTgyLAorMTY1ODMsMTY1ODQs MTY1ODUsMTY1ODYsMTY1ODcsMTY1ODgsMTY1ODksMTY1OTAsMTY1OTEsMTY1OTIsMTY1OTMsMTY1 OTQsCisxNjU5NSwxNjU5NiwxNjU5NywxNjU5OCwxNjU5OSwxNjYwMCwxNjYwMSwxNjYwMiwxNjYw MywxNjYwNCwxNjYwNSwxNjYwNiwKKzE2NjA3LDE2NjA4LDE2NjA5LDE2NjEwLDE2NjExLDE2NjEy LDE2NjEzLDE2NjE0LDE2NjE1LDE2NjE2LDE2NjE3LDE2NjE4LAorMTY2MTksMTY2MjAsMTY2MjEs MTY2MjIsMTY2MjMsMTY2MjQsMTY2MjUsMTY2MjYsMTY2MjcsMTY2MjgsMTY2MjksMTY2MzAsCisx NjYzMSwxNjYzMiwxNjYzMywxNjYzNCwxNjYzNSwxNjYzNiwxNjYzNywxNjYzOCwxNjYzOSwxNjY0 MCwxNjY0MSwxNjY0MiwKKzE2NjQzLDE2NjQ0LDE2NjQ1LDE2NjQ2LDE2NjQ3LDE2NjQ4LDE2NjQ5 LDE2NjUwLDE2NjUxLDE2NjUyLDE2NjUzLDE2NjU0LAorMTY2NTUsMTY2NTYsMTY2NTcsMTY2NTgs MTY2NTksMTY2NjAsMTY2NjEsMTY2NjIsMTY2NjMsMTY2NjQsMTY2NjUsMTY2NjYsCisxNjY2Nywx NjY2OCwxNjY2OSwxNjY3MCwxNjY3MSwxNjY3MiwxNjY3MywxNjY3NCwxNjY3NSwxNjY3NiwxNjY3 NywxNjY3OCwKKzE2Njc5LDE2NjgwLDE2NjgxLDE2NjgyLDE2NjgzLDE2Njg0LDE2Njg1LDE2Njg2 LDE2Njg3LDE2Njg4LDE2Njg5LDE2NjkwLAorMTY2OTEsMTY2OTIsMTY2OTMsMTY2OTQsMTY2OTUs MTY2OTYsMTY2OTcsMTY2OTgsMTY2OTksMTY3MDAsMTY3MDEsMTY3MDIsCisxNjcwMywxNjcwNCwx NjcwNSwxNjcwNiwxNjcwNywxNjcwOCwxNjcwOSwxNjcxMCwxNjcxMSwxNjcxMiwxNjcxMywxNjcx NCwKKzE2NzE1LDE2NzE2LDE2NzE3LDE2NzE4LDE2NzE5LDE2NzIwLDE2NzIxLDE2NzIyLDE2NzIz LDE2NzI0LDE2NzI1LDE2NzI2LAorMTY3MjcsMTY3MjgsMTY3MjksMTY3MzAsMTY3MzEsMTY3MzIs MTY3MzMsMTY3MzQsMTY3MzUsMTY3MzYsMTY3MzcsMTY3MzgsCisxNjczOSwxNjc0MCwxNjc0MSwx Njc0MiwxNjc0MywxNjc0NCwxNjc0NSwxNjc0NiwxNjc0NywxNjc0OCwxNjc0OSwxNjc1MCwKKzE2 NzUxLDE2NzUyLDE2NzUzLDE2NzU0LDE2NzU1LDE2NzU2LDE2NzU3LDE2NzU4LDE2NzU5LDE2NzYw LDE2NzYxLDE2NzYyLAorMTY3NjMsMTY3NjQsMTY3NjUsMTY3NjYsMTY3NjcsMTY3NjgsMTY3Njks MTY3NzAsMTY3NzEsMTY3NzIsMTY3NzMsMTY3NzQsCisxNjc3NSwxNjc3NiwxNjc3NywxNjc3OCwx Njc3OSwxNjc4MCwxNjc4MSwxNjc4MiwxNjc4MywxNjc4NCwxNjc4NSwxNjc4NiwKKzE2Nzg3LDE2 Nzg4LDE2Nzg5LDE2NzkwLDE2NzkxLDE2NzkyLDE2NzkzLDE2Nzk0LDE2Nzk1LDE2Nzk2LDE2Nzk3 LDE2Nzk4LAorMTY3OTksMTY4MDAsMTY4MDEsMTY4MDIsMTY4MDMsMTY4MDQsMTY4MDUsMTY4MDYs MTY4MDcsMTY4MDgsMTY4MDksMTY4MTAsCisxNjgxMSwxNjgxMiwxNjgxMywxNjgxNCwxNjgxNSwx NjgxNiwxNjgxNywxNjgxOCwxNjgxOSwxNjgyMCwxNjgyMSwxNjgyMiwKKzE2ODIzLDE2ODI0LDE2 ODI1LDE2ODI2LDE2ODI3LDE2ODI4LDE2ODI5LDE2ODMwLDE2ODMxLDE2ODMyLDE2ODMzLDE2ODM0 LAorMTY4MzUsMTY4MzYsMTY4MzcsMTY4MzgsMTY4MzksMTY4NDAsMTY4NDEsMTY4NDIsMTY4NDMs MTY4NDQsMTY4NDUsMTY4NDYsCisxNjg0NywxNjg0OCwxNjg0OSwxNjg1MCwxNjg1MSwxNjg1Miwx Njg1MywxNjg1NCwxNjg1NSwxNjg1NiwxNjg1NywxNjg1OCwKKzE2ODU5LDE2ODYwLDE2ODYxLDE2 ODYyLDE2ODYzLDE2ODY0LDE2ODY1LDE2ODY2LDE2ODY3LDE2ODY4LDE2ODY5LDE2ODcwLAorMTY4 NzEsMTY4NzIsMTY4NzMsMTY4NzQsMTY4NzUsMTY4NzYsMTY4NzcsMTY4NzgsMTY4NzksMTY4ODAs MTY4ODEsMTY4ODIsCisxNjg4MywxNjg4NCwxNjg4NSwxNjg4NiwxNjg4NywxNjg4OCwxNjg4OSwx Njg5MCwxNjg5MSwxNjg5MiwxNjg5MywxNjg5NCwKKzE2ODk1LDE2ODk2LDE2ODk3LDE2ODk4LDE2 ODk5LDE2OTAwLDE2OTAxLDE2OTAyLDE2OTAzLDE2OTA0LDE2OTA1LDE2OTA2LAorMTY5MDcsMTY5 MDgsMTY5MDksMTY5MTAsMTY5MTEsMTY5MTIsMTY5MTMsMTY5MTQsMTY5MTUsMTY5MTYsMTY5MTcs MTY5MTgsCisxNjkxOSwxNjkyMCwxNjkyMSwxNjkyMiwxNjkyMywxNjkyNCwxNjkyNSwxNjkyNiwx NjkyNywxNjkyOCwxNjkyOSwxNjkzMCwKKzE2OTMxLDE2OTMyLDE2OTMzLDE2OTM0LDE2OTM1LDE2 OTM2LDE2OTM3LDE2OTM4LDE2OTM5LDE2OTQwLDE2OTQxLDE2OTQyLAorMTY5NDMsMTY5NDQsMTY5 NDUsMTY5NDYsMTY5NDcsMTY5NDgsMTY5NDksMTY5NTAsMTY5NTEsMTY5NTIsMTY5NTMsMTY5NTQs CisxNjk1NSwxNjk1NiwxNjk1NywxNjk1OCwxNjk1OSwxNjk2MCwxNjk2MSwxNjk2MiwxNjk2Mywx Njk2NCwxNjk2NSwxNjk2NiwKKzE2OTY3LDE2OTY4LDE2OTY5LDE2OTcwLDE2OTcxLDE2OTcyLDE2 OTczLDE2OTc0LDE2OTc1LDE2OTc2LDE2OTc3LDE2OTc4LAorMTY5NzksMTY5ODAsMTY5ODEsMTY5 ODIsMTY5ODMsMTY5ODQsMTY5ODUsMTY5ODYsMTY5ODcsMTY5ODgsMTY5ODksMTY5OTAsCisxNjk5 MSwxNjk5MiwxNjk5MywxNjk5NCwxNjk5NSwxNjk5NiwxNjk5NywxNjk5OCwxNjk5OSwxNzAwMCwx NzAwMSwxNzAwMiwKKzE3MDAzLDE3MDA0LDE3MDA1LDE3MDA2LDE3MDA3LDE3MDA4LDE3MDA5LDE3 MDEwLDE3MDExLDE3MDEyLDE3MDEzLDE3MDE0LAorMTcwMTUsMTcwMTYsMTcwMTcsMTcwMTgsMTcw MTksMTcwMjAsMTcwMjEsMTcwMjIsMTcwMjMsMTcwMjQsMTcwMjUsMTcwMjYsCisxNzAyNywxNzAy OCwxNzAyOSwxNzAzMCwxNzAzMSwxNzAzMiwxNzAzMywxNzAzNCwxNzAzNSwxNzAzNiwxNzAzNywx NzAzOCwKKzE3MDM5LDE3MDQwLDE3MDQxLDE3MDQyLDE3MDQzLDE3MDQ0LDE3MDQ1LDE3MDQ2LDE3 MDQ3LDE3MDQ4LDE3MDQ5LDE3MDUwLAorMTcwNTEsMTcwNTIsMTcwNTMsMTcwNTQsMTcwNTUsMTcw NTYsMTcwNTcsMTcwNTgsMTcwNTksMTcwNjAsMTcwNjEsMTcwNjIsCisxNzA2MywxNzA2NCwxNzA2 NSwxNzA2NiwxNzA2NywxNzA2OCwxNzA2OSwxNzA3MCwxNzA3MSwxNzA3MiwxNzA3MywxNzA3NCwK KzE3MDc1LDE3MDc2LDE3MDc3LDE3MDc4LDE3MDc5LDE3MDgwLDE3MDgxLDE3MDgyLDE3MDgzLDE3 MDg0LDE3MDg1LDE3MDg2LAorMTcwODcsMTcwODgsMTcwODksMTcwOTAsMTcwOTEsMTcwOTIsMTcw OTMsMTcwOTQsMTcwOTUsMTcwOTYsMTcwOTcsMTcwOTgsCisxNzA5OSwxNzEwMCwxNzEwMSwxNzEw MiwxNzEwMywxNzEwNCwxNzEwNSwxNzEwNiwxNzEwNywxNzEwOCwxNzEwOSwxNzExMCwKKzE3MTEx LDE3MTEyLDE3MTEzLDE3MTE0LDE3MTE1LDE3MTE2LDE3MTE3LDE3MTE4LDE3MTE5LDE3MTIwLDE3 MTIxLDE3MTIyLAorMTcxMjMsMTcxMjQsMTcxMjUsMTcxMjYsMTcxMjcsMTcxMjgsMTcxMjksMTcx MzAsMTcxMzEsMTcxMzIsMTcxMzMsMTcxMzQsCisxNzEzNSwxNzEzNiwxNzEzNywxNzEzOCwxNzEz OSwxNzE0MCwxNzE0MSwxNzE0MiwxNzE0MywxNzE0NCwxNzE0NSwxNzE0NiwKKzE3MTQ3LDE3MTQ4 LDE3MTQ5LDE3MTUwLDE3MTUxLDE3MTUyLDE3MTUzLDE3MTU0LDE3MTU1LDE3MTU2LDE3MTU3LDE3 MTU4LAorMTcxNTksMTcxNjAsMTcxNjEsMTcxNjIsMTcxNjMsMTcxNjQsMTcxNjUsMTcxNjYsMTcx NjcsMTcxNjgsMTcxNjksMTcxNzAsCisxNzE3MSwxNzE3MiwxNzE3MywxNzE3NCwxNzE3NSwxNzE3 NiwxNzE3NywxNzE3OCwxNzE3OSwxNzE4MCwxNzE4MSwxNzE4MiwKKzE3MTgzLDE3MTg0LDE3MTg1 LDE3MTg2LDE3MTg3LDE3MTg4LDE3MTg5LDE3MTkwLDE3MTkxLDE3MTkyLDE3MTkzLDE3MTk0LAor MTcxOTUsMTcxOTYsMTcxOTcsMTcxOTgsMTcxOTksMTcyMDAsMTcyMDEsMTcyMDIsMTcyMDMsMTcy MDQsMTcyMDUsMTcyMDYsCisxNzIwNywxNzIwOCwxNzIwOSwxNzIxMCwxNzIxMSwxNzIxMiwxNzIx MywxNzIxNCwxNzIxNSwxNzIxNiwxNzIxNywxNzIxOCwKKzE3MjE5LDE3MjIwLDE3MjIxLDE3MjIy LDE3MjIzLDE3MjI0LDE3MjI1LDE3MjI2LDE3MjI3LDE3MjI4LDE3MjI5LDE3MjMwLAorMTcyMzEs MTcyMzIsMTcyMzMsMTcyMzQsMTcyMzUsMTcyMzYsMTcyMzcsMTcyMzgsMTcyMzksMTcyNDAsMTcy NDEsMTcyNDIsCisxNzI0MywxNzI0NCwxNzI0NSwxNzI0NiwxNzI0NywxNzI0OCwxNzI0OSwxNzI1 MCwxNzI1MSwxNzI1MiwxNzI1MywxNzI1NCwKKzE3MjU1LDE3MjU2LDE3MjU3LDE3MjU4LDE3MjU5 LDE3MjYwLDE3MjYxLDE3MjYyLDE3MjYzLDE3MjY0LDE3MjY1LDE3MjY2LAorMTcyNjcsMTcyNjgs MTcyNjksMTcyNzAsMTcyNzEsMTcyNzIsMTcyNzMsMTcyNzQsMTcyNzUsMTcyNzYsMTcyNzcsMTcy NzgsCisxNzI3OSwxNzI4MCwxNzI4MSwxNzI4MiwxNzI4MywxNzI4NCwxNzI4NSwxNzI4NiwxNzI4 NywxNzI4OCwxNzI4OSwxNzI5MCwKKzE3MjkxLDE3MjkyLDE3MjkzLDE3Mjk0LDE3Mjk1LDE3Mjk2 LDE3Mjk3LDE3Mjk4LDE3Mjk5LDE3MzAwLDE3MzAxLDE3MzAyLAorMTczMDMsMTczMDQsMTczMDUs MTczMDYsMTczMDcsMTczMDgsMTczMDksMTczMTAsMTczMTEsMTczMTIsMTczMTMsMTczMTQsCisx NzMxNSwxNzMxNiwxNzMxNywxNzMxOCwxNzMxOSwxNzMyMCwxNzMyMSwxNzMyMiwxNzMyMywxNzMy NCwxNzMyNSwxNzMyNiwKKzE3MzI3LDE3MzI4LDE3MzI5LDE3MzMwLDE3MzMxLDE3MzMyLDE3MzMz LDE3MzM0LDE3MzM1LDE3MzM2LDE3MzM3LDE3MzM4LAorMTczMzksMTczNDAsMTczNDEsMTczNDIs MTczNDMsMTczNDQsMTczNDUsMTczNDYsMTczNDcsMTczNDgsMTczNDksMTczNTAsCisxNzM1MSwx NzM1MiwxNzM1MywxNzM1NCwxNzM1NSwxNzM1NiwxNzM1NywxNzM1OCwxNzM1OSwxNzM2MCwxNzM2 MSwxNzM2MiwKKzE3MzYzLDE3MzY0LDE3MzY1LDE3MzY2LDE3MzY3LDE3MzY4LDE3MzY5LDE3Mzcw LDE3MzcxLDE3MzcyLDE3MzczLDE3Mzc0LAorMTczNzUsMTczNzYsMTczNzcsMTczNzgsMTczNzks MTczODAsMTczODEsMTczODIsMTczODMsMTczODQsMTczODUsMTczODYsCisxNzM4NywxNzM4OCwx NzM4OSwxNzM5MCwxNzM5MSwxNzM5MiwxNzM5MywxNzM5NCwxNzM5NSwxNzM5NiwxNzM5NywxNzM5 OCwKKzE3Mzk5LDE3NDAwLDE3NDAxLDE3NDAyLDE3NDAzLDE3NDA0LDE3NDA1LDE3NDA2LDE3NDA3 LDE3NDA4LDE3NDA5LDE3NDEwLAorMTc0MTEsMTc0MTIsMTc0MTMsMTc0MTQsMTc0MTUsMTc0MTYs MTc0MTcsMTc0MTgsMTc0MTksMTc0MjAsMTc0MjEsMTc0MjIsCisxNzQyMywxNzQyNCwxNzQyNSwx NzQyNiwxNzQyNywxNzQyOCwxNzQyOSwxNzQzMCwxNzQzMSwxNzQzMiwxNzQzMywxNzQzNCwKKzE3 NDM1LDE3NDM2LDE3NDM3LDE3NDM4LDE3NDM5LDE3NDQwLDE3NDQxLDE3NDQyLDE3NDQzLDE3NDQ0 LDE3NDQ1LDE3NDQ2LAorMTc0NDcsMTc0NDgsMTc0NDksMTc0NTAsMTc0NTEsMTc0NTIsMTc0NTMs MTc0NTQsMTc0NTUsMTc0NTYsMTc0NTcsMTc0NTgsCisxNzQ1OSwxNzQ2MCwxNzQ2MSwxNzQ2Miwx NzQ2MywxNzQ2NCwxNzQ2NSwxNzQ2NiwxNzQ2NywxNzQ2OCwxNzQ2OSwxNzQ3MCwKKzE3NDcxLDE3 NDcyLDE3NDczLDE3NDc0LDE3NDc1LDE3NDc2LDE3NDc3LDE3NDc4LDE3NDc5LDE3NDgwLDE3NDgx LDE3NDgyLAorMTc0ODMsMTc0ODQsMTc0ODUsMTc0ODYsMTc0ODcsMTc0ODgsMTc0ODksMTc0OTAs MTc0OTEsMTc0OTIsMTc0OTMsMTc0OTQsCisxNzQ5NSwxNzQ5NiwxNzQ5NywxNzQ5OCwxNzQ5OSwx NzUwMCwxNzUwMSwxNzUwMiwxNzUwMywxNzUwNCwxNzUwNSwxNzUwNiwKKzE3NTA3LDE3NTA4LDE3 NTA5LDE3NTEwLDE3NTExLDE3NTEyLDE3NTEzLDE3NTE0LDE3NTE1LDE3NTE2LDE3NTE3LDE3NTE4 LAorMTc1MTksMTc1MjAsMTc1MjEsMTc1MjIsMTc1MjMsMTc1MjQsMTc1MjUsMTc1MjYsMTc1Mjcs MTc1MjgsMTc1MjksMTc1MzAsCisxNzUzMSwxNzUzMiwxNzUzMywxNzUzNCwxNzUzNSwxNzUzNiwx NzUzNywxNzUzOCwxNzUzOSwxNzU0MCwxNzU0MSwxNzU0MiwKKzE3NTQzLDE3NTQ0LDE3NTQ1LDE3 NTQ2LDE3NTQ3LDE3NTQ4LDE3NTQ5LDE3NTUwLDE3NTUxLDE3NTUyLDE3NTUzLDE3NTU0LAorMTc1 NTUsMTc1NTYsMTc1NTcsMTc1NTgsMTc1NTksMTc1NjAsMTc1NjEsMTc1NjIsMTc1NjMsMTc1NjQs MTc1NjUsMTc1NjYsCisxNzU2NywxNzU2OCwxNzU2OSwxNzU3MCwxNzU3MSwxNzU3MiwxNzU3Mywx NzU3NCwxNzU3NSwxNzU3NiwxNzU3NywxNzU3OCwKKzE3NTc5LDE3NTgwLDE3NTgxLDE3NTgyLDE3 NTgzLDE3NTg0LDE3NTg1LDE3NTg2LDE3NTg3LDE3NTg4LDE3NTg5LDE3NTkwLAorMTc1OTEsMTc1 OTIsMTc1OTMsMTc1OTQsMTc1OTUsMTc1OTYsMTc1OTcsMTc1OTgsMTc1OTksMTc2MDAsMTc2MDEs MTc2MDIsCisxNzYwMywxNzYwNCwxNzYwNSwxNzYwNiwxNzYwNywxNzYwOCwxNzYwOSwxNzYxMCwx NzYxMSwxNzYxMiwxNzYxMywxNzYxNCwKKzE3NjE1LDE3NjE2LDE3NjE3LDE3NjE4LDE3NjE5LDE3 NjIwLDE3NjIxLDE3NjIyLDE3NjIzLDE3NjI0LDE3NjI1LDE3NjI2LAorMTc2MjcsMTc2MjgsMTc2 MjksMTc2MzAsMTc2MzEsMTc2MzIsMTc2MzMsMTc2MzQsMTc2MzUsMTc2MzYsMTc2MzcsMTc2Mzgs CisxNzYzOSwxNzY0MCwxNzY0MSwxNzY0MiwxNzY0MywxNzY0NCwxNzY0NSwxNzY0NiwxNzY0Nywx NzY0OCwxNzY0OSwxNzY1MCwKKzE3NjUxLDE3NjUyLDE3NjUzLDE3NjU0LDE3NjU1LDE3NjU2LDE3 NjU3LDE3NjU4LDE3NjU5LDE3NjYwLDE3NjYxLDE3NjYyLAorMTc2NjMsMTc2NjQsMTc2NjUsMTc2 NjYsMTc2NjcsMTc2NjgsMTc2NjksMTc2NzAsMTc2NzEsMTc2NzIsMTc2NzMsMTc2NzQsCisxNzY3 NSwxNzY3NiwxNzY3NywxNzY3OCwxNzY3OSwxNzY4MCwxNzY4MSwxNzY4MiwxNzY4MywxNzY4NCwx NzY4NSwxNzY4NiwKKzE3Njg3LDE3Njg4LDE3Njg5LDE3NjkwLDE3NjkxLDE3NjkyLDE3NjkzLDE3 Njk0LDE3Njk1LDE3Njk2LDE3Njk3LDE3Njk4LAorMTc2OTksMTc3MDAsMTc3MDEsMTc3MDIsMTc3 MDMsMTc3MDQsMTc3MDUsMTc3MDYsMTc3MDcsMTc3MDgsMTc3MDksMTc3MTAsCisxNzcxMSwxNzcx MiwxNzcxMywxNzcxNCwxNzcxNSwxNzcxNiwxNzcxNywxNzcxOCwxNzcxOSwxNzcyMCwxNzcyMSwx NzcyMiwKKzE3NzIzLDE3NzI0LDE3NzI1LDE3NzI2LDE3NzI3LDE3NzI4LDE3NzI5LDE3NzMwLDE3 NzMxLDE3NzMyLDE3NzMzLDE3NzM0LAorMTc3MzUsMTc3MzYsMTc3MzcsMTc3MzgsMTc3MzksMTc3 NDAsMTc3NDEsMTc3NDIsMTc3NDMsMTc3NDQsMTc3NDUsMTc3NDYsCisxNzc0NywxNzc0OCwxNzc0 OSwxNzc1MCwxNzc1MSwxNzc1MiwxNzc1MywxNzc1NCwxNzc1NSwxNzc1NiwxNzc1NywxNzc1OCwK KzE3NzU5LDE3NzYwLDE3NzYxLDE3NzYyLDE3NzYzLDE3NzY0LDE3NzY1LDE3NzY2LDE3NzY3LDE3 NzY4LDE3NzY5LDE3NzcwLAorMTc3NzEsMTc3NzIsMTc3NzMsMTc3NzQsMTc3NzUsMTc3NzYsMTc3 NzcsMTc3NzgsMTc3NzksMTc3ODAsMTc3ODEsMTc3ODIsCisxNzc4MywxNzc4NCwxNzc4NSwxNzc4 NiwxNzc4NywxNzc4OCwxNzc4OSwxNzc5MCwxNzc5MSwxNzc5MiwxNzc5MywxNzc5NCwKKzE3Nzk1 LDE3Nzk2LDE3Nzk3LDE3Nzk4LDE3Nzk5LDE3ODAwLDE3ODAxLDE3ODAyLDE3ODAzLDE3ODA0LDE3 ODA1LDE3ODA2LAorMTc4MDcsMTc4MDgsMTc4MDksMTc4MTAsMTc4MTEsMTc4MTIsMTc4MTMsMTc4 MTQsMTc4MTUsMTc4MTYsMTc4MTcsMTc4MTgsCisxNzgxOSwxNzgyMCwxNzgyMSwxNzgyMiwxNzgy MywxNzgyNCwxNzgyNSwxNzgyNiwxNzgyNywxNzgyOCwxNzgyOSwxNzgzMCwKKzE3ODMxLDE3ODMy LDE3ODMzLDE3ODM0LDE3ODM1LDE3ODM2LDE3ODM3LDE3ODM4LDE3ODM5LDE3ODQwLDE3ODQxLDE3 ODQyLAorMTc4NDMsMTc4NDQsMTc4NDUsMTc4NDYsMTc4NDcsMTc4NDgsMTc4NDksMTc4NTAsMTc4 NTEsMTc4NTIsMTc4NTMsMTc4NTQsCisxNzg1NSwxNzg1NiwxNzg1NywxNzg1OCwxNzg1OSwxNzg2 MCwxNzg2MSwxNzg2MiwxNzg2MywxNzg2NCwxNzg2NSwxNzg2NiwKKzE3ODY3LDE3ODY4LDE3ODY5 LDE3ODcwLDE3ODcxLDE3ODcyLDE3ODczLDE3ODc0LDE3ODc1LDE3ODc2LDE3ODc3LDE3ODc4LAor MTc4NzksMTc4ODAsMTc4ODEsMTc4ODIsMTc4ODMsMTc4ODQsMTc4ODUsMTc4ODYsMTc4ODcsMTc4 ODgsMTc4ODksMTc4OTAsCisxNzg5MSwxNzg5MiwxNzg5MywxNzg5NCwxNzg5NSwxNzg5NiwxNzg5 NywxNzg5OCwxNzg5OSwxNzkwMCwxNzkwMSwxNzkwMiwKKzE3OTAzLDE3OTA0LDE3OTA1LDE3OTA2 LDE3OTA3LDE3OTA4LDE3OTA5LDE3OTEwLDE3OTExLDE3OTEyLDE3OTEzLDE3OTE0LAorMTc5MTUs MTc5MTYsMTc5MTcsMTc5MTgsMTc5MTksMTc5MjAsMTc5MjEsMTc5MjIsMTc5MjMsMTc5MjQsMTc5 MjUsMTc5MjYsCisxNzkyNywxNzkyOCwxNzkyOSwxNzkzMCwxNzkzMSwxNzkzMiwxNzkzMywxNzkz NCwxNzkzNSwxNzkzNiwxNzkzNywxNzkzOCwKKzE3OTM5LDE3OTQwLDE3OTQxLDE3OTQyLDE3OTQz LDE3OTQ0LDE3OTQ1LDE3OTQ2LDE3OTQ3LDE3OTQ4LDE3OTQ5LDE3OTUwLAorMTc5NTEsMTc5NTIs MTc5NTMsMTc5NTQsMTc5NTUsMTc5NTYsMTc5NTcsMTc5NTgsMTc5NTksMTc5NjAsMTc5NjEsMTc5 NjIsCisxNzk2MywxNzk2NCwxNzk2NSwxNzk2NiwxNzk2NywxNzk2OCwxNzk2OSwxNzk3MCwxNzk3 MSwxNzk3MiwxNzk3MywxNzk3NCwKKzE3OTc1LDE3OTc2LDE3OTc3LDE3OTc4LDE3OTc5LDE3OTgw LDE3OTgxLDE3OTgyLDE3OTgzLDE3OTg0LDE3OTg1LDE3OTg2LAorMTc5ODcsMTc5ODgsMTc5ODks MTc5OTAsMTc5OTEsMTc5OTIsMTc5OTMsMTc5OTQsMTc5OTUsMTc5OTYsMTc5OTcsMTc5OTgsCisx Nzk5OSwxODAwMCwxODAwMSwxODAwMiwxODAwMywxODAwNCwxODAwNSwxODAwNiwxODAwNywxODAw OCwxODAwOSwxODAxMCwKKzE4MDExLDE4MDEyLDE4MDEzLDE4MDE0LDE4MDE1LDE4MDE2LDE4MDE3 LDE4MDE4LDE4MDE5LDE4MDIwLDE4MDIxLDE4MDIyLAorMTgwMjMsMTgwMjQsMTgwMjUsMTgwMjYs MTgwMjcsMTgwMjgsMTgwMjksMTgwMzAsMTgwMzEsMTgwMzIsMTgwMzMsMTgwMzQsCisxODAzNSwx ODAzNiwxODAzNywxODAzOCwxODAzOSwxODA0MCwxODA0MSwxODA0MiwxODA0MywxODA0NCwxODA0 NSwxODA0NiwKKzE4MDQ3LDE4MDQ4LDE4MDQ5LDE4MDUwLDE4MDUxLDE4MDUyLDE4MDUzLDE4MDU0 LDE4MDU1LDE4MDU2LDE4MDU3LDE4MDU4LAorMTgwNTksMTgwNjAsMTgwNjEsMTgwNjIsMTgwNjMs MTgwNjQsMTgwNjUsMTgwNjYsMTgwNjcsMTgwNjgsMTgwNjksMTgwNzAsCisxODA3MSwxODA3Miwx ODA3MywxODA3NCwxODA3NSwxODA3NiwxODA3NywxODA3OCwxODA3OSwxODA4MCwxODA4MSwxODA4 MiwKKzE4MDgzLDE4MDg0LDE4MDg1LDE4MDg2LDE4MDg3LDE4MDg4LDE4MDg5LDE4MDkwLDE4MDkx LDE4MDkyLDE4MDkzLDE4MDk0LAorMTgwOTUsMTgwOTYsMTgwOTcsMTgwOTgsMTgwOTksMTgxMDAs MTgxMDEsMTgxMDIsMTgxMDMsMTgxMDQsMTgxMDUsMTgxMDYsCisxODEwNywxODEwOCwxODEwOSwx ODExMCwxODExMSwxODExMiwxODExMywxODExNCwxODExNSwxODExNiwxODExNywxODExOCwKKzE4 MTE5LDE4MTIwLDE4MTIxLDE4MTIyLDE4MTIzLDE4MTI0LDE4MTI1LDE4MTI2LDE4MTI3LDE4MTI4 LDE4MTI5LDE4MTMwLAorMTgxMzEsMTgxMzIsMTgxMzMsMTgxMzQsMTgxMzUsMTgxMzYsMTgxMzcs MTgxMzgsMTgxMzksMTgxNDAsMTgxNDEsMTgxNDIsCisxODE0MywxODE0NCwxODE0NSwxODE0Niwx ODE0NywxODE0OCwxODE0OSwxODE1MCwxODE1MSwxODE1MiwxODE1MywxODE1NCwKKzE4MTU1LDE4 MTU2LDE4MTU3LDE4MTU4LDE4MTU5LDE4MTYwLDE4MTYxLDE4MTYyLDE4MTYzLDE4MTY0LDE4MTY1 LDE4MTY2LAorMTgxNjcsMTgxNjgsMTgxNjksMTgxNzAsMTgxNzEsMTgxNzIsMTgxNzMsMTgxNzQs MTgxNzUsMTgxNzYsMTgxNzcsMTgxNzgsCisxODE3OSwxODE4MCwxODE4MSwxODE4MiwxODE4Mywx ODE4NCwxODE4NSwxODE4NiwxODE4NywxODE4OCwxODE4OSwxODE5MCwKKzE4MTkxLDE4MTkyLDE4 MTkzLDE4MTk0LDE4MTk1LDE4MTk2LDE4MTk3LDE4MTk4LDE4MTk5LDE4MjAwLDE4MjAxLDE4MjAy LAorMTgyMDMsMTgyMDQsMTgyMDUsMTgyMDYsMTgyMDcsMTgyMDgsMTgyMDksMTgyMTAsMTgyMTEs MTgyMTIsMTgyMTMsMTgyMTQsCisxODIxNSwxODIxNiwxODIxNywxODIxOCwxODIxOSwxODIyMCwx ODIyMSwxODIyMiwxODIyMywxODIyNCwxODIyNSwxODIyNiwKKzE4MjI3LDE4MjI4LDE4MjI5LDE4 MjMwLDE4MjMxLDE4MjMyLDE4MjMzLDE4MjM0LDE4MjM1LDE4MjM2LDE4MjM3LDE4MjM4LAorMTgy MzksMTgyNDAsMTgyNDEsMTgyNDIsMTgyNDMsMTgyNDQsMTgyNDUsMTgyNDYsMTgyNDcsMTgyNDgs MTgyNDksMTgyNTAsCisxODI1MSwxODI1MiwxODI1MywxODI1NCwxODI1NSwxODI1NiwxODI1Nywx ODI1OCwxODI1OSwxODI2MCwxODI2MSwxODI2MiwKKzE4MjYzLDE4MjY0LDE4MjY1LDE4MjY2LDE4 MjY3LDE4MjY4LDE4MjY5LDE4MjcwLDE4MjcxLDE4MjcyLDE4MjczLDE4Mjc0LAorMTgyNzUsMTgy NzYsMTgyNzcsMTgyNzgsMTgyNzksMTgyODAsMTgyODEsMTgyODIsMTgyODMsMTgyODQsMTgyODUs MTgyODYsCisxODI4NywxODI4OCwxODI4OSwxODI5MCwxODI5MSwxODI5MiwxODI5MywxODI5NCwx ODI5NSwxODI5NiwxODI5NywxODI5OCwKKzE4Mjk5LDE4MzAwLDE4MzAxLDE4MzAyLDE4MzAzLDE4 MzA0LDE4MzA1LDE4MzA2LDE4MzA3LDE4MzA4LDE4MzA5LDE4MzEwLAorMTgzMTEsMTgzMTIsMTgz MTMsMTgzMTQsMTgzMTUsMTgzMTYsMTgzMTcsMTgzMTgsMTgzMTksMTgzMjAsMTgzMjEsMTgzMjIs CisxODMyMywxODMyNCwxODMyNSwxODMyNiwxODMyNywxODMyOCwxODMyOSwxODMzMCwxODMzMSwx ODMzMiwxODMzMywxODMzNCwKKzE4MzM1LDE4MzM2LDE4MzM3LDE4MzM4LDE4MzM5LDE4MzQwLDE4 MzQxLDE4MzQyLDE4MzQzLDE4MzQ0LDE4MzQ1LDE4MzQ2LAorMTgzNDcsMTgzNDgsMTgzNDksMTgz NTAsMTgzNTEsMTgzNTIsMTgzNTMsMTgzNTQsMTgzNTUsMTgzNTYsMTgzNTcsMTgzNTgsCisxODM1 OSwxODM2MCwxODM2MSwxODM2MiwxODM2MywxODM2NCwxODM2NSwxODM2NiwxODM2NywxODM2OCwx ODM2OSwxODM3MCwKKzE4MzcxLDE4MzcyLDE4MzczLDE4Mzc0LDE4Mzc1LDE4Mzc2LDE4Mzc3LDE4 Mzc4LDE4Mzc5LDE4MzgwLDE4MzgxLDE4MzgyLAorMTgzODMsMTgzODQsMTgzODUsMTgzODYsMTgz ODcsMTgzODgsMTgzODksMTgzOTAsMTgzOTEsMTgzOTIsMTgzOTMsMTgzOTQsCisxODM5NSwxODM5 NiwxODM5NywxODM5OCwxODM5OSwxODQwMCwxODQwMSwxODQwMiwxODQwMywxODQwNCwxODQwNSwx ODQwNiwKKzE4NDA3LDE4NDA4LDE4NDA5LDE4NDEwLDE4NDExLDE4NDEyLDE4NDEzLDE4NDE0LDE4 NDE1LDE4NDE2LDE4NDE3LDE4NDE4LAorMTg0MTksMTg0MjAsMTg0MjEsMTg0MjIsMTg0MjMsMTg0 MjQsMTg0MjUsMTg0MjYsMTg0MjcsMTg0MjgsMTg0MjksMTg0MzAsCisxODQzMSwxODQzMiwxODQz MywxODQzNCwxODQzNSwxODQzNiwxODQzNywxODQzOCwxODQzOSwxODQ0MCwxODQ0MSwxODQ0MiwK KzE4NDQzLDE4NDQ0LDE4NDQ1LDE4NDQ2LDE4NDQ3LDE4NDQ4LDE4NDQ5LDE4NDUwLDE4NDUxLDE4 NDUyLDE4NDUzLDE4NDU0LAorMTg0NTUsMTg0NTYsMTg0NTcsMTg0NTgsMTg0NTksMTg0NjAsMTg0 NjEsMTg0NjIsMTg0NjMsMTg0NjQsMTg0NjUsMTg0NjYsCisxODQ2NywxODQ2OCwxODQ2OSwxODQ3 MCwxODQ3MSwxODQ3MiwxODQ3MywxODQ3NCwxODQ3NSwxODQ3NiwxODQ3NywxODQ3OCwKKzE4NDc5 LDE4NDgwLDE4NDgxLDE4NDgyLDE4NDgzLDE4NDg0LDE4NDg1LDE4NDg2LDE4NDg3LDE4NDg4LDE4 NDg5LDE4NDkwLAorMTg0OTEsMTg0OTIsMTg0OTMsMTg0OTQsMTg0OTUsMTg0OTYsMTg0OTcsMTg0 OTgsMTg0OTksMTg1MDAsMTg1MDEsMTg1MDIsCisxODUwMywxODUwNCwxODUwNSwxODUwNiwxODUw NywxODUwOCwxODUwOSwxODUxMCwxODUxMSwxODUxMiwxODUxMywxODUxNCwKKzE4NTE1LDE4NTE2 LDE4NTE3LDE4NTE4LDE4NTE5LDE4NTIwLDE4NTIxLDE4NTIyLDE4NTIzLDE4NTI0LDE4NTI1LDE4 NTI2LAorMTg1MjcsMTg1MjgsMTg1MjksMTg1MzAsMTg1MzEsMTg1MzIsMTg1MzMsMTg1MzQsMTg1 MzUsMTg1MzYsMTg1MzcsMTg1MzgsCisxODUzOSwxODU0MCwxODU0MSwxODU0MiwxODU0MywxODU0 NCwxODU0NSwxODU0NiwxODU0NywxODU0OCwxODU0OSwxODU1MCwKKzE4NTUxLDE4NTUyLDE4NTUz LDE4NTU0LDE4NTU1LDE4NTU2LDE4NTU3LDE4NTU4LDE4NTU5LDE4NTYwLDE4NTYxLDE4NTYyLAor MTg1NjMsMTg1NjQsMTg1NjUsMTg1NjYsMTg1NjcsMTg1NjgsMTg1NjksMTg1NzAsMTg1NzEsMTg1 NzIsMTg1NzMsMTg1NzQsCisxODU3NSwxODU3NiwxODU3NywxODU3OCwxODU3OSwxODU4MCwxODU4 MSwxODU4MiwxODU4MywxODU4NCwxODU4NSwxODU4NiwKKzE4NTg3LDE4NTg4LDE4NTg5LDE4NTkw LDE4NTkxLDE4NTkyLDE4NTkzLDE4NTk0LDE4NTk1LDE4NTk2LDE4NTk3LDE4NTk4LAorMTg1OTks MTg2MDAsMTg2MDEsMTg2MDIsMTg2MDMsMTg2MDQsMTg2MDUsMTg2MDYsMTg2MDcsMTg2MDgsMTg2 MDksMTg2MTAsCisxODYxMSwxODYxMiwxODYxMywxODYxNCwxODYxNSwxODYxNiwxODYxNywxODYx OCwxODYxOSwxODYyMCwxODYyMSwxODYyMiwKKzE4NjIzLDE4NjI0LDE4NjI1LDE4NjI2LDE4NjI3 LDE4NjI4LDE4NjI5LDE4NjMwLDE4NjMxLDE4NjMyLDE4NjMzLDE4NjM0LAorMTg2MzUsMTg2MzYs MTg2MzcsMTg2MzgsMTg2MzksMTg2NDAsMTg2NDEsMTg2NDIsMTg2NDMsMTg2NDQsMTg2NDUsMTg2 NDYsCisxODY0NywxODY0OCwxODY0OSwxODY1MCwxODY1MSwxODY1MiwxODY1MywxODY1NCwxODY1 NSwxODY1NiwxODY1NywxODY1OCwKKzE4NjU5LDE4NjYwLDE4NjYxLDE4NjYyLDE4NjYzLDE4NjY0 LDE4NjY1LDE4NjY2LDE4NjY3LDE4NjY4LDE4NjY5LDE4NjcwLAorMTg2NzEsMTg2NzIsMTg2NzMs MTg2NzQsMTg2NzUsMTg2NzYsMTg2NzcsMTg2NzgsMTg2NzksMTg2ODAsMTg2ODEsMTg2ODIsCisx ODY4MywxODY4NCwxODY4NSwxODY4NiwxODY4NywxODY4OCwxODY4OSwxODY5MCwxODY5MSwxODY5 MiwxODY5MywxODY5NCwKKzE4Njk1LDE4Njk2LDE4Njk3LDE4Njk4LDE4Njk5LDE4NzAwLDE4NzAx LDE4NzAyLDE4NzAzLDE4NzA0LDE4NzA1LDE4NzA2LAorMTg3MDcsMTg3MDgsMTg3MDksMTg3MTAs MTg3MTEsMTg3MTIsMTg3MTMsMTg3MTQsMTg3MTUsMTg3MTYsMTg3MTcsMTg3MTgsCisxODcxOSwx ODcyMCwxODcyMSwxODcyMiwxODcyMywxODcyNCwxODcyNSwxODcyNiwxODcyNywxODcyOCwxODcy OSwxODczMCwKKzE4NzMxLDE4NzMyLDE4NzMzLDE4NzM0LDE4NzM1LDE4NzM2LDE4NzM3LDE4NzM4 LDE4NzM5LDE4NzQwLDE4NzQxLDE4NzQyLAorMTg3NDMsMTg3NDQsMTg3NDUsMTg3NDYsMTg3NDcs MTg3NDgsMTg3NDksMTg3NTAsMTg3NTEsMTg3NTIsMTg3NTMsMTg3NTQsCisxODc1NSwxODc1Niwx ODc1NywxODc1OCwxODc1OSwxODc2MCwxODc2MSwxODc2MiwxODc2MywxODc2NCwxODc2NSwxODc2 NiwKKzE4NzY3LDE4NzY4LDE4NzY5LDE4NzcwLDE4NzcxLDE4NzcyLDE4NzczLDE4Nzc0LDE4Nzc1 LDE4Nzc2LDE4Nzc3LDE4Nzc4LAorMTg3NzksMTg3ODAsMTg3ODEsMTg3ODIsMTg3ODMsMTg3ODQs MTg3ODUsMTg3ODYsMTg3ODcsMTg3ODgsMTg3ODksMTg3OTAsCisxODc5MSwxODc5MiwxODc5Mywx ODc5NCwxODc5NSwxODc5NiwxODc5NywxODc5OCwxODc5OSwxODgwMCwxODgwMSwxODgwMiwKKzE4 ODAzLDE4ODA0LDE4ODA1LDE4ODA2LDE4ODA3LDE4ODA4LDE4ODA5LDE4ODEwLDE4ODExLDE4ODEy LDE4ODEzLDE4ODE0LAorMTg4MTUsMTg4MTYsMTg4MTcsMTg4MTgsMTg4MTksMTg4MjAsMTg4MjEs MTg4MjIsMTg4MjMsMTg4MjQsMTg4MjUsMTg4MjYsCisxODgyNywxODgyOCwxODgyOSwxODgzMCwx ODgzMSwxODgzMiwxODgzMywxODgzNCwxODgzNSwxODgzNiwxODgzNywxODgzOCwKKzE4ODM5LDE4 ODQwLDE4ODQxLDE4ODQyLDE4ODQzLDE4ODQ0LDE4ODQ1LDE4ODQ2LDE4ODQ3LDE4ODQ4LDE4ODQ5 LDE4ODUwLAorMTg4NTEsMTg4NTIsMTg4NTMsMTg4NTQsMTg4NTUsMTg4NTYsMTg4NTcsMTg4NTgs MTg4NTksMTg4NjAsMTg4NjEsMTg4NjIsCisxODg2MywxODg2NCwxODg2NSwxODg2NiwxODg2Nywx ODg2OCwxODg2OSwxODg3MCwxODg3MSwxODg3MiwxODg3MywxODg3NCwKKzE4ODc1LDE4ODc2LDE4 ODc3LDE4ODc4LDE4ODc5LDE4ODgwLDE4ODgxLDE4ODgyLDE4ODgzLDE4ODg0LDE4ODg1LDE4ODg2 LAorMTg4ODcsMTg4ODgsMTg4ODksMTg4OTAsMTg4OTEsMTg4OTIsMTg4OTMsMTg4OTQsMTg4OTUs MTg4OTYsMTg4OTcsMTg4OTgsCisxODg5OSwxODkwMCwxODkwMSwxODkwMiwxODkwMywxODkwNCwx ODkwNSwxODkwNiwxODkwNywxODkwOCwxODkwOSwxODkxMCwKKzE4OTExLDE4OTEyLDE4OTEzLDE4 OTE0LDE4OTE1LDE4OTE2LDE4OTE3LDE4OTE4LDE4OTE5LDE4OTIwLDE4OTIxLDE4OTIyLAorMTg5 MjMsMTg5MjQsMTg5MjUsMTg5MjYsMTg5MjcsMTg5MjgsMTg5MjksMTg5MzAsMTg5MzEsMTg5MzIs MTg5MzMsMTg5MzQsCisxODkzNSwxODkzNiwxODkzNywxODkzOCwxODkzOSwxODk0MCwxODk0MSwx ODk0MiwxODk0MywxODk0NCwxODk0NSwxODk0NiwKKzE4OTQ3LDE4OTQ4LDE4OTQ5LDE4OTUwLDE4 OTUxLDE4OTUyLDE4OTUzLDE4OTU0LDE4OTU1LDE4OTU2LDE4OTU3LDE4OTU4LAorMTg5NTksMTg5 NjAsMTg5NjEsMTg5NjIsMTg5NjMsMTg5NjQsMTg5NjUsMTg5NjYsMTg5NjcsMTg5NjgsMTg5Njks MTg5NzAsCisxODk3MSwxODk3MiwxODk3MywxODk3NCwxODk3NSwxODk3NiwxODk3NywxODk3OCwx ODk3OSwxODk4MCwxODk4MSwxODk4MiwKKzE4OTgzLDE4OTg0LDE4OTg1LDE4OTg2LDE4OTg3LDE4 OTg4LDE4OTg5LDE4OTkwLDE4OTkxLDE4OTkyLDE4OTkzLDE4OTk0LAorMTg5OTUsMTg5OTYsMTg5 OTcsMTg5OTgsMTg5OTksMTkwMDAsMTkwMDEsMTkwMDIsMTkwMDMsMTkwMDQsMTkwMDUsMTkwMDYs CisxOTAwNywxOTAwOCwxOTAwOSwxOTAxMCwxOTAxMSwxOTAxMiwxOTAxMywxOTAxNCwxOTAxNSwx OTAxNiwxOTAxNywxOTAxOCwKKzE5MDE5LDE5MDIwLDE5MDIxLDE5MDIyLDE5MDIzLDE5MDI0LDE5 MDI1LDE5MDI2LDE5MDI3LDE5MDI4LDE5MDI5LDE5MDMwLAorMTkwMzEsMTkwMzIsMTkwMzMsMTkw MzQsMTkwMzUsMTkwMzYsMTkwMzcsMTkwMzgsMTkwMzksMTkwNDAsMTkwNDEsMTkwNDIsCisxOTA0 MywxOTA0NCwxOTA0NSwxOTA0NiwxOTA0NywxOTA0OCwxOTA0OSwxOTA1MCwxOTA1MSwxOTA1Miwx OTA1MywxOTA1NCwKKzE5MDU1LDE5MDU2LDE5MDU3LDE5MDU4LDE5MDU5LDE5MDYwLDE5MDYxLDE5 MDYyLDE5MDYzLDE5MDY0LDE5MDY1LDE5MDY2LAorMTkwNjcsMTkwNjgsMTkwNjksMTkwNzAsMTkw NzEsMTkwNzIsMTkwNzMsMTkwNzQsMTkwNzUsMTkwNzYsMTkwNzcsMTkwNzgsCisxOTA3OSwxOTA4 MCwxOTA4MSwxOTA4MiwxOTA4MywxOTA4NCwxOTA4NSwxOTA4NiwxOTA4NywxOTA4OCwxOTA4OSwx OTA5MCwKKzE5MDkxLDE5MDkyLDE5MDkzLDE5MDk0LDE5MDk1LDE5MDk2LDE5MDk3LDE5MDk4LDE5 MDk5LDE5MTAwLDE5MTAxLDE5MTAyLAorMTkxMDMsMTkxMDQsMTkxMDUsMTkxMDYsMTkxMDcsMTkx MDgsMTkxMDksMTkxMTAsMTkxMTEsMTkxMTIsMTkxMTMsMTkxMTQsCisxOTExNSwxOTExNiwxOTEx NywxOTExOCwxOTExOSwxOTEyMCwxOTEyMSwxOTEyMiwxOTEyMywxOTEyNCwxOTEyNSwxOTEyNiwK KzE5MTI3LDE5MTI4LDE5MTI5LDE5MTMwLDE5MTMxLDE5MTMyLDE5MTMzLDE5MTM0LDE5MTM1LDE5 MTM2LDE5MTM3LDE5MTM4LAorMTkxMzksMTkxNDAsMTkxNDEsMTkxNDIsMTkxNDMsMTkxNDQsMTkx NDUsMTkxNDYsMTkxNDcsMTkxNDgsMTkxNDksMTkxNTAsCisxOTE1MSwxOTE1MiwxOTE1MywxOTE1 NCwxOTE1NSwxOTE1NiwxOTE1NywxOTE1OCwxOTE1OSwxOTE2MCwxOTE2MSwxOTE2MiwKKzE5MTYz LDE5MTY0LDE5MTY1LDE5MTY2LDE5MTY3LDE5MTY4LDE5MTY5LDE5MTcwLDE5MTcxLDE5MTcyLDE5 MTczLDE5MTc0LAorMTkxNzUsMTkxNzYsMTkxNzcsMTkxNzgsMTkxNzksMTkxODAsMTkxODEsMTkx ODIsMTkxODMsMTkxODQsMTkxODUsMTkxODYsCisxOTE4NywxOTE4OCwxOTE4OSwxOTE5MCwxOTE5 MSwxOTE5MiwxOTE5MywxOTE5NCwxOTE5NSwxOTE5NiwxOTE5NywxOTE5OCwKKzE5MTk5LDE5MjAw LDE5MjAxLDE5MjAyLDE5MjAzLDE5MjA0LDE5MjA1LDE5MjA2LDE5MjA3LDE5MjA4LDE5MjA5LDE5 MjEwLAorMTkyMTEsMTkyMTIsMTkyMTMsMTkyMTQsMTkyMTUsMTkyMTYsMTkyMTcsMTkyMTgsMTky MTksMTkyMjAsMTkyMjEsMTkyMjIsCisxOTIyMywxOTIyNCwxOTIyNSwxOTIyNiwxOTIyNywxOTIy OCwxOTIyOSwxOTIzMCwxOTIzMSwxOTIzMiwxOTIzMywxOTIzNCwKKzE5MjM1LDE5MjM2LDE5MjM3 LDE5MjM4LDE5MjM5LDE5MjQwLDE5MjQxLDE5MjQyLDE5MjQzLDE5MjQ0LDE5MjQ1LDE5MjQ2LAor MTkyNDcsMTkyNDgsMTkyNDksMTkyNTAsMTkyNTEsMTkyNTIsMTkyNTMsMTkyNTQsMTkyNTUsMTky NTYsMTkyNTcsMTkyNTgsCisxOTI1OSwxOTI2MCwxOTI2MSwxOTI2MiwxOTI2MywxOTI2NCwxOTI2 NSwxOTI2NiwxOTI2NywxOTI2OCwxOTI2OSwxOTI3MCwKKzE5MjcxLDE5MjcyLDE5MjczLDE5Mjc0 LDE5Mjc1LDE5Mjc2LDE5Mjc3LDE5Mjc4LDE5Mjc5LDE5MjgwLDE5MjgxLDE5MjgyLAorMTkyODMs MTkyODQsMTkyODUsMTkyODYsMTkyODcsMTkyODgsMTkyODksMTkyOTAsMTkyOTEsMTkyOTIsMTky OTMsMTkyOTQsCisxOTI5NSwxOTI5NiwxOTI5NywxOTI5OCwxOTI5OSwxOTMwMCwxOTMwMSwxOTMw MiwxOTMwMywxOTMwNCwxOTMwNSwxOTMwNiwKKzE5MzA3LDE5MzA4LDE5MzA5LDE5MzEwLDE5MzEx LDE5MzEyLDE5MzEzLDE5MzE0LDE5MzE1LDE5MzE2LDE5MzE3LDE5MzE4LAorMTkzMTksMTkzMjAs MTkzMjEsMTkzMjIsMTkzMjMsMTkzMjQsMTkzMjUsMTkzMjYsMTkzMjcsMTkzMjgsMTkzMjksMTkz MzAsCisxOTMzMSwxOTMzMiwxOTMzMywxOTMzNCwxOTMzNSwxOTMzNiwxOTMzNywxOTMzOCwxOTMz OSwxOTM0MCwxOTM0MSwxOTM0MiwKKzE5MzQzLDE5MzQ0LDE5MzQ1LDE5MzQ2LDE5MzQ3LDE5MzQ4 LDE5MzQ5LDE5MzUwLDE5MzUxLDE5MzUyLDE5MzUzLDE5MzU0LAorMTkzNTUsMTkzNTYsMTkzNTcs MTkzNTgsMTkzNTksMTkzNjAsMTkzNjEsMTkzNjIsMTkzNjMsMTkzNjQsMTkzNjUsMTkzNjYsCisx OTM2NywxOTM2OCwxOTM2OSwxOTM3MCwxOTM3MSwxOTM3MiwxOTM3MywxOTM3NCwxOTM3NSwxOTM3 NiwxOTM3NywxOTM3OCwKKzE5Mzc5LDE5MzgwLDE5MzgxLDE5MzgyLDE5MzgzLDE5Mzg0LDE5Mzg1 LDE5Mzg2LDE5Mzg3LDE5Mzg4LDE5Mzg5LDE5MzkwLAorMTkzOTEsMTkzOTIsMTkzOTMsMTkzOTQs MTkzOTUsMTkzOTYsMTkzOTcsMTkzOTgsMTkzOTksMTk0MDAsMTk0MDEsMTk0MDIsCisxOTQwMywx OTQwNCwxOTQwNSwxOTQwNiwxOTQwNywxOTQwOCwxOTQwOSwxOTQxMCwxOTQxMSwxOTQxMiwxOTQx MywxOTQxNCwKKzE5NDE1LDE5NDE2LDE5NDE3LDE5NDE4LDE5NDE5LDE5NDIwLDE5NDIxLDE5NDIy LDE5NDIzLDE5NDI0LDE5NDI1LDE5NDI2LAorMTk0MjcsMTk0MjgsMTk0MjksMTk0MzAsMTk0MzEs MTk0MzIsMTk0MzMsMTk0MzQsMTk0MzUsMTk0MzYsMTk0MzcsMTk0MzgsCisxOTQzOSwxOTQ0MCwx OTQ0MSwxOTQ0MiwxOTQ0MywxOTQ0NCwxOTQ0NSwxOTQ0NiwxOTQ0NywxOTQ0OCwxOTQ0OSwxOTQ1 MCwKKzE5NDUxLDE5NDUyLDE5NDUzLDE5NDU0LDE5NDU1LDE5NDU2LDE5NDU3LDE5NDU4LDE5NDU5 LDE5NDYwLDE5NDYxLDE5NDYyLAorMTk0NjMsMTk0NjQsMTk0NjUsMTk0NjYsMTk0NjcsMTk0Njgs MTk0NjksMTk0NzAsMTk0NzEsMTk0NzIsMTk0NzMsMTk0NzQsCisxOTQ3NSwxOTQ3NiwxOTQ3Nywx OTQ3OCwxOTQ3OSwxOTQ4MCwxOTQ4MSwxOTQ4MiwxOTQ4MywxOTQ4NCwxOTQ4NSwxOTQ4NiwKKzE5 NDg3LDE5NDg4LDE5NDg5LDE5NDkwLDE5NDkxLDE5NDkyLDE5NDkzLDE5NDk0LDE5NDk1LDE5NDk2 LDE5NDk3LDE5NDk4LAorMTk0OTksMTk1MDAsMTk1MDEsMTk1MDIsMTk1MDMsMTk1MDQsMTk1MDUs MTk1MDYsMTk1MDcsMTk1MDgsMTk1MDksMTk1MTAsCisxOTUxMSwxOTUxMiwxOTUxMywxOTUxNCwx OTUxNSwxOTUxNiwxOTUxNywxOTUxOCwxOTUxOSwxOTUyMCwxOTUyMSwxOTUyMiwKKzE5NTIzLDE5 NTI0LDE5NTI1LDE5NTI2LDE5NTI3LDE5NTI4LDE5NTI5LDE5NTMwLDE5NTMxLDE5NTMyLDE5NTMz LDE5NTM0LAorMTk1MzUsMTk1MzYsMTk1MzcsMTk1MzgsMTk1MzksMTk1NDAsMTk1NDEsMTk1NDIs MTk1NDMsMTk1NDQsMTk1NDUsMTk1NDYsCisxOTU0NywxOTU0OCwxOTU0OSwxOTU1MCwxOTU1MSwx OTU1MiwxOTU1MywxOTU1NCwxOTU1NSwxOTU1NiwxOTU1NywxOTU1OCwKKzE5NTU5LDE5NTYwLDE5 NTYxLDE5NTYyLDE5NTYzLDE5NTY0LDE5NTY1LDE5NTY2LDE5NTY3LDE5NTY4LDE5NTY5LDE5NTcw LAorMTk1NzEsMTk1NzIsMTk1NzMsMTk1NzQsMTk1NzUsMTk1NzYsMTk1NzcsMTk1NzgsMTk1Nzks MTk1ODAsMTk1ODEsMTk1ODIsCisxOTU4MywxOTU4NCwxOTU4NSwxOTU4NiwxOTU4NywxOTU4OCwx OTU4OSwxOTU5MCwxOTU5MSwxOTU5MiwxOTU5MywxOTU5NCwKKzE5NTk1LDE5NTk2LDE5NTk3LDE5 NTk4LDE5NTk5LDE5NjAwLDE5NjAxLDE5NjAyLDE5NjAzLDE5NjA0LDE5NjA1LDE5NjA2LAorMTk2 MDcsMTk2MDgsMTk2MDksMTk2MTAsMTk2MTEsMTk2MTIsMTk2MTMsMTk2MTQsMTk2MTUsMTk2MTYs MTk2MTcsMTk2MTgsCisxOTYxOSwxOTYyMCwxOTYyMSwxOTYyMiwxOTYyMywxOTYyNCwxOTYyNSwx OTYyNiwxOTYyNywxOTYyOCwxOTYyOSwxOTYzMCwKKzE5NjMxLDE5NjMyLDE5NjMzLDE5NjM0LDE5 NjM1LDE5NjM2LDE5NjM3LDE5NjM4LDE5NjM5LDE5NjQwLDE5NjQxLDE5NjQyLAorMTk2NDMsMTk2 NDQsMTk2NDUsMTk2NDYsMTk2NDcsMTk2NDgsMTk2NDksMTk2NTAsMTk2NTEsMTk2NTIsMTk2NTMs MTk2NTQsCisxOTY1NSwxOTY1NiwxOTY1NywxOTY1OCwxOTY1OSwxOTY2MCwxOTY2MSwxOTY2Miwx OTY2MywxOTY2NCwxOTY2NSwxOTY2NiwKKzE5NjY3LDE5NjY4LDE5NjY5LDE5NjcwLDE5NjcxLDE5 NjcyLDE5NjczLDE5Njc0LDE5Njc1LDE5Njc2LDE5Njc3LDE5Njc4LAorMTk2NzksMTk2ODAsMTk2 ODEsMTk2ODIsMTk2ODMsMTk2ODQsMTk2ODUsMTk2ODYsMTk2ODcsMTk2ODgsMTk2ODksMTk2OTAs CisxOTY5MSwxOTY5MiwxOTY5MywxOTY5NCwxOTY5NSwxOTY5NiwxOTY5NywxOTY5OCwxOTY5OSwx OTcwMCwxOTcwMSwxOTcwMiwKKzE5NzAzLDE5NzA0LDE5NzA1LDE5NzA2LDE5NzA3LDE5NzA4LDE5 NzA5LDE5NzEwLDE5NzExLDE5NzEyLDE5NzEzLDE5NzE0LAorMTk3MTUsMTk3MTYsMTk3MTcsMTk3 MTgsMTk3MTksMTk3MjAsMTk3MjEsMTk3MjIsMTk3MjMsMTk3MjQsMTk3MjUsMTk3MjYsCisxOTcy NywxOTcyOCwxOTcyOSwxOTczMCwxOTczMSwxOTczMiwxOTczMywxOTczNCwxOTczNSwxOTczNiwx OTczNywxOTczOCwKKzE5NzM5LDE5NzQwLDE5NzQxLDE5NzQyLDE5NzQzLDE5NzQ0LDE5NzQ1LDE5 NzQ2LDE5NzQ3LDE5NzQ4LDE5NzQ5LDE5NzUwLAorMTk3NTEsMTk3NTIsMTk3NTMsMTk3NTQsMTk3 NTUsMTk3NTYsMTk3NTcsMTk3NTgsMTk3NTksMTk3NjAsMTk3NjEsMTk3NjIsCisxOTc2MywxOTc2 NCwxOTc2NSwxOTc2NiwxOTc2NywxOTc2OCwxOTc2OSwxOTc3MCwxOTc3MSwxOTc3MiwxOTc3Mywx OTc3NCwKKzE5Nzc1LDE5Nzc2LDE5Nzc3LDE5Nzc4LDE5Nzc5LDE5NzgwLDE5NzgxLDE5NzgyLDE5 NzgzLDE5Nzg0LDE5Nzg1LDE5Nzg2LAorMTk3ODcsMTk3ODgsMTk3ODksMTk3OTAsMTk3OTEsMTk3 OTIsMTk3OTMsMTk3OTQsMTk3OTUsMTk3OTYsMTk3OTcsMTk3OTgsCisxOTc5OSwxOTgwMCwxOTgw MSwxOTgwMiwxOTgwMywxOTgwNCwxOTgwNSwxOTgwNiwxOTgwNywxOTgwOCwxOTgwOSwxOTgxMCwK KzE5ODExLDE5ODEyLDE5ODEzLDE5ODE0LDE5ODE1LDE5ODE2LDE5ODE3LDE5ODE4LDE5ODE5LDE5 ODIwLDE5ODIxLDE5ODIyLAorMTk4MjMsMTk4MjQsMTk4MjUsMTk4MjYsMTk4MjcsMTk4MjgsMTk4 MjksMTk4MzAsMTk4MzEsMTk4MzIsMTk4MzMsMTk4MzQsCisxOTgzNSwxOTgzNiwxOTgzNywxOTgz OCwxOTgzOSwxOTg0MCwxOTg0MSwxOTg0MiwxOTg0MywxOTg0NCwxOTg0NSwxOTg0NiwKKzE5ODQ3 LDE5ODQ4LDE5ODQ5LDE5ODUwLDE5ODUxLDE5ODUyLDE5ODUzLDE5ODU0LDE5ODU1LDE5ODU2LDE5 ODU3LDE5ODU4LAorMTk4NTksMTk4NjAsMTk4NjEsMTk4NjIsMTk4NjMsMTk4NjQsMTk4NjUsMTk4 NjYsMTk4NjcsMTk4NjgsMTk4NjksMTk4NzAsCisxOTg3MSwxOTg3MiwxOTg3MywxOTg3NCwxOTg3 NSwxOTg3NiwxOTg3NywxOTg3OCwxOTg3OSwxOTg4MCwxOTg4MSwxOTg4MiwKKzE5ODgzLDE5ODg0 LDE5ODg1LDE5ODg2LDE5ODg3LDE5ODg4LDE5ODg5LDE5ODkwLDE5ODkxLDE5ODkyLDE5ODkzLDE5 ODk0LAorMTk4OTUsMTk4OTYsMTk4OTcsMTk4OTgsMTk4OTksMTk5MDAsMTk5MDEsMTk5MDIsMTk5 MDMsMTk5MDQsMTk5MDUsMTk5MDYsCisxOTkwNywxOTkwOCwxOTkwOSwxOTkxMCwxOTkxMSwxOTkx MiwxOTkxMywxOTkxNCwxOTkxNSwxOTkxNiwxOTkxNywxOTkxOCwKKzE5OTE5LDE5OTIwLDE5OTIx LDE5OTIyLDE5OTIzLDE5OTI0LDE5OTI1LDE5OTI2LDE5OTI3LDE5OTI4LDE5OTI5LDE5OTMwLAor MTk5MzEsMTk5MzIsMTk5MzMsMTk5MzQsMTk5MzUsMTk5MzYsMTk5MzcsMTk5MzgsMTk5MzksMTk5 NDAsMTk5NDEsMTk5NDIsCisxOTk0MywxOTk0NCwxOTk0NSwxOTk0NiwxOTk0NywxOTk0OCwxOTk0 OSwxOTk1MCwxOTk1MSwxOTk1MiwxOTk1MywxOTk1NCwKKzE5OTU1LDE5OTU2LDE5OTU3LDE5OTU4 LDE5OTU5LDE5OTYwLDE5OTYxLDE5OTYyLDE5OTYzLDE5OTY0LDE5OTY1LDE5OTY2LAorMTk5Njcs MTk5NjgsMTk5NjksMTk5NzAsMTk5NzEsMTk5NzIsMTk5NzMsMTk5NzQsMTk5NzUsMTk5NzYsMTk5 NzcsMTk5NzgsCisxOTk3OSwxOTk4MCwxOTk4MSwxOTk4MiwxOTk4MywxOTk4NCwxOTk4NSwxOTk4 NiwxOTk4NywxOTk4OCwxOTk4OSwxOTk5MCwKKzE5OTkxLDE5OTkyLDE5OTkzLDE5OTk0LDE5OTk1 LDE5OTk2LDE5OTk3LDE5OTk4LDE5OTk5LDIwMDAwLDIwMDAxLDIwMDAyLAorMjAwMDMsMjAwMDQs MjAwMDUsMjAwMDYsMjAwMDcsMjAwMDgsMjAwMDksMjAwMTAsMjAwMTEsMjAwMTIsMjAwMTMsMjAw MTQsCisyMDAxNSwyMDAxNiwyMDAxNywyMDAxOCwyMDAxOSwyMDAyMCwyMDAyMSwyMDAyMiwyMDAy MywyMDAyNCwyMDAyNSwyMDAyNiwKKzIwMDI3LDIwMDI4LDIwMDI5LDIwMDMwLDIwMDMxLDIwMDMy LDIwMDMzLDIwMDM0LDIwMDM1LDIwMDM2LDIwMDM3LDIwMDM4LAorMjAwMzksMjAwNDAsMjAwNDEs MjAwNDIsMjAwNDMsMjAwNDQsMjAwNDUsMjAwNDYsMjAwNDcsMjAwNDgsMjAwNDksMjAwNTAsCisy MDA1MSwyMDA1MiwyMDA1MywyMDA1NCwyMDA1NSwyMDA1NiwyMDA1NywyMDA1OCwyMDA1OSwyMDA2 MCwyMDA2MSwyMDA2MiwKKzIwMDYzLDIwMDY0LDIwMDY1LDIwMDY2LDIwMDY3LDIwMDY4LDIwMDY5 LDIwMDcwLDIwMDcxLDIwMDcyLDIwMDczLDIwMDc0LAorMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgs MjAwNzksMjAwODAsMjAwODEsMjAwODIsMjAwODMsMjAwODQsMjAwODUsMjAwODYsCisyMDA4Nywy MDA4OCwyMDA4OSwyMDA5MCwyMDA5MSwyMDA5MiwyMDA5MywyMDA5NCwyMDA5NSwyMDA5NiwyMDA5 NywyMDA5OCwKKzIwMDk5LDIwMTAwLDIwMTAxLDIwMTAyLDIwMTAzLDIwMTA0LDIwMTA1LDIwMTA2 LDIwMTA3LDIwMTA4LDIwMTA5LDIwMTEwLAorMjAxMTEsMjAxMTIsMjAxMTMsMjAxMTQsMjAxMTUs MjAxMTYsMjAxMTcsMjAxMTgsMjAxMTksMjAxMjAsMjAxMjEsMjAxMjIsCisyMDEyMywyMDEyNCwy MDEyNSwyMDEyNiwyMDEyNywyMDEyOCwyMDEyOSwyMDEzMCwyMDEzMSwyMDEzMiwyMDEzMywyMDEz NCwKKzIwMTM1LDIwMTM2LDIwMTM3LDIwMTM4LDIwMTM5LDIwMTQwLDIwMTQxLDIwMTQyLDIwMTQz LDIwMTQ0LDIwMTQ1LDIwMTQ2LAorMjAxNDcsMjAxNDgsMjAxNDksMjAxNTAsMjAxNTEsMjAxNTIs MjAxNTMsMjAxNTQsMjAxNTUsMjAxNTYsMjAxNTcsMjAxNTgsCisyMDE1OSwyMDE2MCwyMDE2MSwy MDE2MiwyMDE2MywyMDE2NCwyMDE2NSwyMDE2NiwyMDE2NywyMDE2OCwyMDE2OSwyMDE3MCwKKzIw MTcxLDIwMTcyLDIwMTczLDIwMTc0LDIwMTc1LDIwMTc2LDIwMTc3LDIwMTc4LDIwMTc5LDIwMTgw LDIwMTgxLDIwMTgyLAorMjAxODMsMjAxODQsMjAxODUsMjAxODYsMjAxODcsMjAxODgsMjAxODks MjAxOTAsMjAxOTEsMjAxOTIsMjAxOTMsMjAxOTQsCisyMDE5NSwyMDE5NiwyMDE5NywyMDE5OCwy MDE5OSwyMDIwMCwyMDIwMSwyMDIwMiwyMDIwMywyMDIwNCwyMDIwNSwyMDIwNiwKKzIwMjA3LDIw MjA4LDIwMjA5LDIwMjEwLDIwMjExLDIwMjEyLDIwMjEzLDIwMjE0LDIwMjE1LDIwMjE2LDIwMjE3 LDIwMjE4LAorMjAyMTksMjAyMjAsMjAyMjEsMjAyMjIsMjAyMjMsMjAyMjQsMjAyMjUsMjAyMjYs MjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsCisyMDIzMSwyMDIzMiwyMDIzMywyMDIzNCwyMDIzNSwy MDIzNiwyMDIzNywyMDIzOCwyMDIzOSwyMDI0MCwyMDI0MSwyMDI0MiwKKzIwMjQzLDIwMjQ0LDIw MjQ1LDIwMjQ2LDIwMjQ3LDIwMjQ4LDIwMjQ5LDIwMjUwLDIwMjUxLDIwMjUyLDIwMjUzLDIwMjU0 LAorMjAyNTUsMjAyNTYsMjAyNTcsMjAyNTgsMjAyNTksMjAyNjAsMjAyNjEsMjAyNjIsMjAyNjMs MjAyNjQsMjAyNjUsMjAyNjYsCisyMDI2NywyMDI2OCwyMDI2OSwyMDI3MCwyMDI3MSwyMDI3Miwy MDI3MywyMDI3NCwyMDI3NSwyMDI3NiwyMDI3NywyMDI3OCwKKzIwMjc5LDIwMjgwLDIwMjgxLDIw MjgyLDIwMjgzLDIwMjg0LDIwMjg1LDIwMjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLAorMjAy OTEsMjAyOTIsMjAyOTMsMjAyOTQsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAs MjAzMDEsMjAzMDIsCisyMDMwMywyMDMwNCwyMDMwNSwyMDMwNiwyMDMwNywyMDMwOCwyMDMwOSwy MDMxMCwyMDMxMSwyMDMxMiwyMDMxMywyMDMxNCwKKzIwMzE1LDIwMzE2LDIwMzE3LDIwMzE4LDIw MzE5LDIwMzIwLDIwMzIxLDIwMzIyLDIwMzIzLDIwMzI0LDIwMzI1LDIwMzI2LAorMjAzMjcsMjAz MjgsMjAzMjksMjAzMzAsMjAzMzEsMjAzMzIsMjAzMzMsMjAzMzQsMjAzMzUsMjAzMzYsMjAzMzcs MjAzMzgsCisyMDMzOSwyMDM0MCwyMDM0MSwyMDM0MiwyMDM0MywyMDM0NCwyMDM0NSwyMDM0Niwy MDM0NywyMDM0OCwyMDM0OSwyMDM1MCwKKzIwMzUxLDIwMzUyLDIwMzUzLDIwMzU0LDIwMzU1LDIw MzU2LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYwLDIwMzYxLDIwMzYyLAorMjAzNjMsMjAzNjQsMjAz NjUsMjAzNjYsMjAzNjcsMjAzNjgsMjAzNjksMjAzNzAsMjAzNzEsMjAzNzIsMjAzNzMsMjAzNzQs CisyMDM3NSwyMDM3NiwyMDM3NywyMDM3OCwyMDM3OSwyMDM4MCwyMDM4MSwyMDM4MiwyMDM4Mywy MDM4NCwyMDM4NSwyMDM4NiwKKzIwMzg3LDIwMzg4LDIwMzg5LDIwMzkwLDIwMzkxLDIwMzkyLDIw MzkzLDIwMzk0LDIwMzk1LDIwMzk2LDIwMzk3LDIwMzk4LAorMjAzOTksMjA0MDAsMjA0MDEsMjA0 MDIsMjA0MDMsMjA0MDQsMjA0MDUsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsCisyMDQx MSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNSwyMDQxNiwyMDQxNywyMDQxOCwyMDQxOSwyMDQyMCwy MDQyMSwyMDQyMiwKKzIwNDIzLDIwNDI0LDIwNDI1LDIwNDI2LDIwNDI3LDIwNDI4LDIwNDI5LDIw NDMwLDIwNDMxLDIwNDMyLDIwNDMzLDIwNDM0LAorMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0 MzksMjA0NDAsMjA0NDEsMjA0NDIsMjA0NDMsMjA0NDQsMjA0NDUsMjA0NDYsCisyMDQ0NywyMDQ0 OCwyMDQ0OSwyMDQ1MCwyMDQ1MSwyMDQ1MiwyMDQ1MywyMDQ1NCwyMDQ1NSwyMDQ1NiwyMDQ1Nywy MDQ1OCwKKzIwNDU5LDIwNDYwLDIwNDYxLDIwNDYyLDIwNDYzLDIwNDY0LDIwNDY1LDIwNDY2LDIw NDY3LDIwNDY4LDIwNDY5LDIwNDcwLAorMjA0NzEsMjA0NzIsMjA0NzMsMjA0NzQsMjA0NzUsMjA0 NzYsMjA0NzcsMjA0NzgsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsCisyMDQ4MywyMDQ4NCwyMDQ4 NSwyMDQ4NiwyMDQ4NywyMDQ4OCwyMDQ4OSwyMDQ5MCwyMDQ5MSwyMDQ5MiwyMDQ5MywyMDQ5NCwK KzIwNDk1LDIwNDk2LDIwNDk3LDIwNDk4LDIwNDk5LDIwNTAwLDIwNTAxLDIwNTAyLDIwNTAzLDIw NTA0LDIwNTA1LDIwNTA2LAorMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAsMjA1MTEsMjA1MTIsMjA1 MTMsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTcsMjA1MTgsCisyMDUxOSwyMDUyMCwyMDUyMSwyMDUy MiwyMDUyMywyMDUyNCwyMDUyNSwyMDUyNiwyMDUyNywyMDUyOCwyMDUyOSwyMDUzMCwKKzIwNTMx LDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3LDIwNTM4LDIwNTM5LDIwNTQwLDIw NTQxLDIwNTQyLAorMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDcsMjA1NDgsMjA1NDksMjA1 NTAsMjA1NTEsMjA1NTIsMjA1NTMsMjA1NTQsCisyMDU1NSwyMDU1NiwyMDU1NywyMDU1OCwyMDU1 OSwyMDU2MCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NCwyMDU2NSwyMDU2NiwKKzIwNTY3LDIwNTY4 LDIwNTY5LDIwNTcwLDIwNTcxLDIwNTcyLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIwNTc3LDIw NTc4LAorMjA1NzksMjA1ODAsMjA1ODEsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1 ODcsMjA1ODgsMjA1ODksMjA1OTAsCisyMDU5MSwyMDU5MiwyMDU5MywyMDU5NCwyMDU5NSwyMDU5 NiwyMDU5NywyMDU5OCwyMDU5OSwyMDYwMCwyMDYwMSwyMDYwMiwKKzIwNjAzLDIwNjA0LDIwNjA1 LDIwNjA2LDIwNjA3LDIwNjA4LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEyLDIwNjEzLDIwNjE0LAor MjA2MTUsMjA2MTYsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjEsMjA2MjIsMjA2MjMsMjA2 MjQsMjA2MjUsMjA2MjYsCisyMDYyNywyMDYyOCwyMDYyOSwyMDYzMCwyMDYzMSwyMDYzMiwyMDYz MywyMDYzNCwyMDYzNSwyMDYzNiwyMDYzNywyMDYzOCwKKzIwNjM5LDIwNjQwLDIwNjQxLDIwNjQy LDIwNjQzLDIwNjQ0LDIwNjQ1LDIwNjQ2LDIwNjQ3LDIwNjQ4LDIwNjQ5LDIwNjUwLAorMjA2NTEs MjA2NTIsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTgsMjA2NTksMjA2NjAsMjA2 NjEsMjA2NjIsCisyMDY2MywyMDY2NCwyMDY2NSwyMDY2NiwyMDY2NywyMDY2OCwyMDY2OSwyMDY3 MCwyMDY3MSwyMDY3MiwyMDY3MywyMDY3NCwKKzIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5 LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LAorMjA2ODcsMjA2ODgs MjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTQsMjA2OTUsMjA2OTYsMjA2OTcsMjA2 OTgsCisyMDY5OSwyMDcwMCwyMDcwMSwyMDcwMiwyMDcwMywyMDcwNCwyMDcwNSwyMDcwNiwyMDcw NywyMDcwOCwyMDcwOSwyMDcxMCwKKzIwNzExLDIwNzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE2 LDIwNzE3LDIwNzE4LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLAorMjA3MjMsMjA3MjQsMjA3MjUs MjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzEsMjA3MzIsMjA3MzMsMjA3MzQsCisy MDczNSwyMDczNiwyMDczNywyMDczOCwyMDczOSwyMDc0MCwyMDc0MSwyMDc0MiwyMDc0MywyMDc0 NCwyMDc0NSwyMDc0NiwKKzIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUz LDIwNzU0LDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LAorMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIs MjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NjksMjA3NzAsCisyMDc3MSwy MDc3MiwyMDc3MywyMDc3NCwyMDc3NSwyMDc3NiwyMDc3NywyMDc3OCwyMDc3OSwyMDc4MCwyMDc4 MSwyMDc4MiwKKzIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkw LDIwNzkxLDIwNzkyLDIwNzkzLDIwNzk0LAorMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA3OTks MjA4MDAsMjA4MDEsMjA4MDIsMjA4MDMsMjA4MDQsMjA4MDUsMjA4MDYsCisyMDgwNywyMDgwOCwy MDgwOSwyMDgxMCwyMDgxMSwyMDgxMiwyMDgxMywyMDgxNCwyMDgxNSwyMDgxNiwyMDgxNywyMDgx OCwKKzIwODE5LDIwODIwLDIwODIxLDIwODIyLDIwODIzLDIwODI0LDIwODI1LDIwODI2LDIwODI3 LDIwODI4LDIwODI5LDIwODMwLAorMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzQsMjA4MzUsMjA4MzYs MjA4MzcsMjA4MzgsMjA4MzksMjA4NDAsMjA4NDEsMjA4NDIsCisyMDg0MywyMDg0NCwyMDg0NSwy MDg0NiwyMDg0NywyMDg0OCwyMDg0OSwyMDg1MCwyMDg1MSwyMDg1MiwyMDg1MywyMDg1NCwKKzIw ODU1LDIwODU2LDIwODU3LDIwODU4LDIwODU5LDIwODYwLDIwODYxLDIwODYyLDIwODYzLDIwODY0 LDIwODY1LDIwODY2LAorMjA4NjcsMjA4NjgsMjA4NjksMjA4NzAsMjA4NzEsMjA4NzIsMjA4NzMs MjA4NzQsMjA4NzUsMjA4NzYsMjA4NzcsMjA4NzgsCisyMDg3OSwyMDg4MCwyMDg4MSwyMDg4Miwy MDg4MywyMDg4NCwyMDg4NSwyMDg4NiwyMDg4NywyMDg4OCwyMDg4OSwyMDg5MCwKKzIwODkxLDIw ODkyLDIwODkzLDIwODk0LDIwODk1LDIwODk2LDIwODk3LDIwODk4LDIwODk5LDIwOTAwLDIwOTAx LDIwOTAyLAorMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDcsMjA5MDgsMjA5MDksMjA5MTAs MjA5MTEsMjA5MTIsMjA5MTMsMjA5MTQsCisyMDkxNSwyMDkxNiwyMDkxNywyMDkxOCwyMDkxOSwy MDkyMCwyMDkyMSwyMDkyMiwyMDkyMywyMDkyNCwyMDkyNSwyMDkyNiwKKzIwOTI3LDIwOTI4LDIw OTI5LDIwOTMwLDIwOTMxLDIwOTMyLDIwOTMzLDIwOTM0LDIwOTM1LDIwOTM2LDIwOTM3LDIwOTM4 LAorMjA5MzksMjA5NDAsMjA5NDEsMjA5NDIsMjA5NDMsMjA5NDQsMjA5NDUsMjA5NDYsMjA5NDcs MjA5NDgsMjA5NDksMjA5NTAsCisyMDk1MSwyMDk1MiwyMDk1MywyMDk1NCwyMDk1NSwyMDk1Niwy MDk1NywyMDk1OCwyMDk1OSwyMDk2MCwyMDk2MSwyMDk2MiwKKzIwOTYzLDIwOTY0LDIwOTY1LDIw OTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIwOTcwLDIwOTcxLDIwOTcyLDIwOTczLDIwOTc0LAorMjA5 NzUsMjA5NzYsMjA5NzcsMjA5NzgsMjA5NzksMjA5ODAsMjA5ODEsMjA5ODIsMjA5ODMsMjA5ODQs MjA5ODUsMjA5ODYsCisyMDk4NywyMDk4OCwyMDk4OSwyMDk5MCwyMDk5MSwyMDk5MiwyMDk5Mywy MDk5NCwyMDk5NSwyMDk5NiwyMDk5NywyMDk5OCwKKzIwOTk5LDIxMDAwLDIxMDAxLDIxMDAyLDIx MDAzLDIxMDA0LDIxMDA1LDIxMDA2LDIxMDA3LDIxMDA4LDIxMDA5LDIxMDEwLAorMjEwMTEsMjEw MTIsMjEwMTMsMjEwMTQsMjEwMTUsMjEwMTYsMjEwMTcsMjEwMTgsMjEwMTksMjEwMjAsMjEwMjEs MjEwMjIsCisyMTAyMywyMTAyNCwyMTAyNSwyMTAyNiwyMTAyNywyMTAyOCwyMTAyOSwyMTAzMCwy MTAzMSwyMTAzMiwyMTAzMywyMTAzNCwKKzIxMDM1LDIxMDM2LDIxMDM3LDIxMDM4LDIxMDM5LDIx MDQwLDIxMDQxLDIxMDQyLDIxMDQzLDIxMDQ0LDIxMDQ1LDIxMDQ2LAorMjEwNDcsMjEwNDgsMjEw NDksMjEwNTAsMjEwNTEsMjEwNTIsMjEwNTMsMjEwNTQsMjEwNTUsMjEwNTYsMjEwNTcsMjEwNTgs CisyMTA1OSwyMTA2MCwyMTA2MSwyMTA2MiwyMTA2MywyMTA2NCwyMTA2NSwyMTA2NiwyMTA2Nywy MTA2OCwyMTA2OSwyMTA3MCwKKzIxMDcxLDIxMDcyLDIxMDczLDIxMDc0LDIxMDc1LDIxMDc2LDIx MDc3LDIxMDc4LDIxMDc5LDIxMDgwLDIxMDgxLDIxMDgyLAorMjEwODMsMjEwODQsMjEwODUsMjEw ODYsMjEwODcsMjEwODgsMjEwODksMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTMsMjEwOTQsCisyMTA5 NSwyMTA5NiwyMTA5NywyMTA5OCwyMTA5OSwyMTEwMCwyMTEwMSwyMTEwMiwyMTEwMywyMTEwNCwy MTEwNSwyMTEwNiwKKzIxMTA3LDIxMTA4LDIxMTA5LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIx MTE0LDIxMTE1LDIxMTE2LDIxMTE3LDIxMTE4LAorMjExMTksMjExMjAsMjExMjEsMjExMjIsMjEx MjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjgsMjExMjksMjExMzAsCisyMTEzMSwyMTEz MiwyMTEzMywyMTEzNCwyMTEzNSwyMTEzNiwyMTEzNywyMTEzOCwyMTEzOSwyMTE0MCwyMTE0MSwy MTE0MiwKKzIxMTQzLDIxMTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ3LDIxMTQ4LDIxMTQ5LDIxMTUwLDIx MTUxLDIxMTUyLDIxMTUzLDIxMTU0LAorMjExNTUsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjEx NjAsMjExNjEsMjExNjIsMjExNjMsMjExNjQsMjExNjUsMjExNjYsCisyMTE2NywyMTE2OCwyMTE2 OSwyMTE3MCwyMTE3MSwyMTE3MiwyMTE3MywyMTE3NCwyMTE3NSwyMTE3NiwyMTE3NywyMTE3OCwK KzIxMTc5LDIxMTgwLDIxMTgxLDIxMTgyLDIxMTgzLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg3LDIx MTg4LDIxMTg5LDIxMTkwLAorMjExOTEsMjExOTIsMjExOTMsMjExOTQsMjExOTUsMjExOTYsMjEx OTcsMjExOTgsMjExOTksMjEyMDAsMjEyMDEsMjEyMDIsCisyMTIwMywyMTIwNCwyMTIwNSwyMTIw NiwyMTIwNywyMTIwOCwyMTIwOSwyMTIxMCwyMTIxMSwyMTIxMiwyMTIxMywyMTIxNCwKKzIxMjE1 LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIwLDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIx MjI1LDIxMjI2LAorMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzIsMjEyMzMsMjEy MzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsCisyMTIzOSwyMTI0MCwyMTI0MSwyMTI0MiwyMTI0 MywyMTI0NCwyMTI0NSwyMTI0NiwyMTI0NywyMTI0OCwyMTI0OSwyMTI1MCwKKzIxMjUxLDIxMjUy LDIxMjUzLDIxMjU0LDIxMjU1LDIxMjU2LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYxLDIx MjYyLAorMjEyNjMsMjEyNjQsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNjksMjEyNzAsMjEy NzEsMjEyNzIsMjEyNzMsMjEyNzQsCisyMTI3NSwyMTI3NiwyMTI3NywyMTI3OCwyMTI3OSwyMTI4 MCwyMTI4MSwyMTI4MiwyMTI4MywyMTI4NCwyMTI4NSwyMTI4NiwKKzIxMjg3LDIxMjg4LDIxMjg5 LDIxMjkwLDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk0LDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LAor MjEyOTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDUsMjEzMDYsMjEzMDcsMjEz MDgsMjEzMDksMjEzMTAsCisyMTMxMSwyMTMxMiwyMTMxMywyMTMxNCwyMTMxNSwyMTMxNiwyMTMx NywyMTMxOCwyMTMxOSwyMTMyMCwyMTMyMSwyMTMyMiwKKzIxMzIzLDIxMzI0LDIxMzI1LDIxMzI2 LDIxMzI3LDIxMzI4LDIxMzI5LDIxMzMwLDIxMzMxLDIxMzMyLDIxMzMzLDIxMzM0LAorMjEzMzUs MjEzMzYsMjEzMzcsMjEzMzgsMjEzMzksMjEzNDAsMjEzNDEsMjEzNDIsMjEzNDMsMjEzNDQsMjEz NDUsMjEzNDYsCisyMTM0NywyMTM0OCwyMTM0OSwyMTM1MCwyMTM1MSwyMTM1MiwyMTM1MywyMTM1 NCwyMTM1NSwyMTM1NiwyMTM1NywyMTM1OCwKKzIxMzU5LDIxMzYwLDIxMzYxLDIxMzYyLDIxMzYz LDIxMzY0LDIxMzY1LDIxMzY2LDIxMzY3LDIxMzY4LDIxMzY5LDIxMzcwLAorMjEzNzEsMjEzNzIs MjEzNzMsMjEzNzQsMjEzNzUsMjEzNzYsMjEzNzcsMjEzNzgsMjEzNzksMjEzODAsMjEzODEsMjEz ODIsCisyMTM4MywyMTM4NCwyMTM4NSwyMTM4NiwyMTM4NywyMTM4OCwyMTM4OSwyMTM5MCwyMTM5 MSwyMTM5MiwyMTM5MywyMTM5NCwKKzIxMzk1LDIxMzk2LDIxMzk3LDIxMzk4LDIxMzk5LDIxNDAw LDIxNDAxLDIxNDAyLDIxNDAzLDIxNDA0LDIxNDA1LDIxNDA2LAorMjE0MDcsMjE0MDgsMjE0MDks MjE0MTAsMjE0MTEsMjE0MTIsMjE0MTMsMjE0MTQsMjE0MTUsMjE0MTYsMjE0MTcsMjE0MTgsCisy MTQxOSwyMTQyMCwyMTQyMSwyMTQyMiwyMTQyMywyMTQyNCwyMTQyNSwyMTQyNiwyMTQyNywyMTQy OCwyMTQyOSwyMTQzMCwKKzIxNDMxLDIxNDMyLDIxNDMzLDIxNDM0LDIxNDM1LDIxNDM2LDIxNDM3 LDIxNDM4LDIxNDM5LDIxNDQwLDIxNDQxLDIxNDQyLAorMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYs MjE0NDcsMjE0NDgsMjE0NDksMjE0NTAsMjE0NTEsMjE0NTIsMjE0NTMsMjE0NTQsCisyMTQ1NSwy MTQ1NiwyMTQ1NywyMTQ1OCwyMTQ1OSwyMTQ2MCwyMTQ2MSwyMTQ2MiwyMTQ2MywyMTQ2NCwyMTQ2 NSwyMTQ2NiwKKzIxNDY3LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDcxLDIxNDcyLDIxNDczLDIxNDc0 LDIxNDc1LDIxNDc2LDIxNDc3LDIxNDc4LAorMjE0NzksMjE0ODAsMjE0ODEsMjE0ODIsMjE0ODMs MjE0ODQsMjE0ODUsMjE0ODYsMjE0ODcsMjE0ODgsMjE0ODksMjE0OTAsCisyMTQ5MSwyMTQ5Miwy MTQ5MywyMTQ5NCwyMTQ5NSwyMTQ5NiwyMTQ5NywyMTQ5OCwyMTQ5OSwyMTUwMCwyMTUwMSwyMTUw MiwKKzIxNTAzLDIxNTA0LDIxNTA1LDIxNTA2LDIxNTA3LDIxNTA4LDIxNTA5LDIxNTEwLDIxNTEx LDIxNTEyLDIxNTEzLDIxNTE0LAorMjE1MTUsMjE1MTYsMjE1MTcsMjE1MTgsMjE1MTksMjE1MjAs MjE1MjEsMjE1MjIsMjE1MjMsMjE1MjQsMjE1MjUsMjE1MjYsCisyMTUyNywyMTUyOCwyMTUyOSwy MTUzMCwyMTUzMSwyMTUzMiwyMTUzMywyMTUzNCwyMTUzNSwyMTUzNiwyMTUzNywyMTUzOCwKKzIx NTM5LDIxNTQwLDIxNTQxLDIxNTQyLDIxNTQzLDIxNTQ0LDIxNTQ1LDIxNTQ2LDIxNTQ3LDIxNTQ4 LDIxNTQ5LDIxNTUwLAorMjE1NTEsMjE1NTIsMjE1NTMsMjE1NTQsMjE1NTUsMjE1NTYsMjE1NTcs MjE1NTgsMjE1NTksMjE1NjAsMjE1NjEsMjE1NjIsCisyMTU2MywyMTU2NCwyMTU2NSwyMTU2Niwy MTU2NywyMTU2OCwyMTU2OSwyMTU3MCwyMTU3MSwyMTU3MiwyMTU3MywyMTU3NCwKKzIxNTc1LDIx NTc2LDIxNTc3LDIxNTc4LDIxNTc5LDIxNTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg0LDIxNTg1 LDIxNTg2LAorMjE1ODcsMjE1ODgsMjE1ODksMjE1OTAsMjE1OTEsMjE1OTIsMjE1OTMsMjE1OTQs MjE1OTUsMjE1OTYsMjE1OTcsMjE1OTgsCisyMTU5OSwyMTYwMCwyMTYwMSwyMTYwMiwyMTYwMywy MTYwNCwyMTYwNSwyMTYwNiwyMTYwNywyMTYwOCwyMTYwOSwyMTYxMCwKKzIxNjExLDIxNjEyLDIx NjEzLDIxNjE0LDIxNjE1LDIxNjE2LDIxNjE3LDIxNjE4LDIxNjE5LDIxNjIwLDIxNjIxLDIxNjIy LAorMjE2MjMsMjE2MjQsMjE2MjUsMjE2MjYsMjE2MjcsMjE2MjgsMjE2MjksMjE2MzAsMjE2MzEs MjE2MzIsMjE2MzMsMjE2MzQsCisyMTYzNSwyMTYzNiwyMTYzNywyMTYzOCwyMTYzOSwyMTY0MCwy MTY0MSwyMTY0MiwyMTY0MywyMTY0NCwyMTY0NSwyMTY0NiwKKzIxNjQ3LDIxNjQ4LDIxNjQ5LDIx NjUwLDIxNjUxLDIxNjUyLDIxNjUzLDIxNjU0LDIxNjU1LDIxNjU2LDIxNjU3LDIxNjU4LAorMjE2 NTksMjE2NjAsMjE2NjEsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjcsMjE2Njgs MjE2NjksMjE2NzAsCisyMTY3MSwyMTY3MiwyMTY3MywyMTY3NCwyMTY3NSwyMTY3NiwyMTY3Nywy MTY3OCwyMTY3OSwyMTY4MCwyMTY4MSwyMTY4MiwKKzIxNjgzLDIxNjg0LDIxNjg1LDIxNjg2LDIx Njg3LDIxNjg4LDIxNjg5LDIxNjkwLDIxNjkxLDIxNjkyLDIxNjkzLDIxNjk0LAorMjE2OTUsMjE2 OTYsMjE2OTcsMjE2OTgsMjE2OTksMjE3MDAsMjE3MDEsMjE3MDIsMjE3MDMsMjE3MDQsMjE3MDUs MjE3MDYsCisyMTcwNywyMTcwOCwyMTcwOSwyMTcxMCwyMTcxMSwyMTcxMiwyMTcxMywyMTcxNCwy MTcxNSwyMTcxNiwyMTcxNywyMTcxOCwKKzIxNzE5LDIxNzIwLDIxNzIxLDIxNzIyLDIxNzIzLDIx NzI0LDIxNzI1LDIxNzI2LDIxNzI3LDIxNzI4LDIxNzI5LDIxNzMwLAorMjE3MzEsMjE3MzIsMjE3 MzMsMjE3MzQsMjE3MzUsMjE3MzYsMjE3MzcsMjE3MzgsMjE3MzksMjE3NDAsMjE3NDEsMjE3NDIs CisyMTc0MywyMTc0NCwyMTc0NSwyMTc0NiwyMTc0NywyMTc0OCwyMTc0OSwyMTc1MCwyMTc1MSwy MTc1MiwyMTc1MywyMTc1NCwKKzIxNzU1LDIxNzU2LDIxNzU3LDIxNzU4LDIxNzU5LDIxNzYwLDIx NzYxLDIxNzYyLDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY2LAorMjE3NjcsMjE3NjgsMjE3NjksMjE3 NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzUsMjE3NzYsMjE3NzcsMjE3NzgsCisyMTc3 OSwyMTc4MCwyMTc4MSwyMTc4MiwyMTc4MywyMTc4NCwyMTc4NSwyMTc4NiwyMTc4NywyMTc4OCwy MTc4OSwyMTc5MCwKKzIxNzkxLDIxNzkyLDIxNzkzLDIxNzk0LDIxNzk1LDIxNzk2LDIxNzk3LDIx Nzk4LDIxNzk5LDIxODAwLDIxODAxLDIxODAyLAorMjE4MDMsMjE4MDQsMjE4MDUsMjE4MDYsMjE4 MDcsMjE4MDgsMjE4MDksMjE4MTAsMjE4MTEsMjE4MTIsMjE4MTMsMjE4MTQsCisyMTgxNSwyMTgx NiwyMTgxNywyMTgxOCwyMTgxOSwyMTgyMCwyMTgyMSwyMTgyMiwyMTgyMywyMTgyNCwyMTgyNSwy MTgyNiwKKzIxODI3LDIxODI4LDIxODI5LDIxODMwLDIxODMxLDIxODMyLDIxODMzLDIxODM0LDIx ODM1LDIxODM2LDIxODM3LDIxODM4LAorMjE4MzksMjE4NDAsMjE4NDEsMjE4NDIsMjE4NDMsMjE4 NDQsMjE4NDUsMjE4NDYsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsCisyMTg1MSwyMTg1MiwyMTg1 MywyMTg1NCwyMTg1NSwyMTg1NiwyMTg1NywyMTg1OCwyMTg1OSwyMTg2MCwyMTg2MSwyMTg2MiwK KzIxODYzLDIxODY0LDIxODY1LDIxODY2LDIxODY3LDIxODY4LDIxODY5LDIxODcwLDIxODcxLDIx ODcyLDIxODczLDIxODc0LAorMjE4NzUsMjE4NzYsMjE4NzcsMjE4NzgsMjE4NzksMjE4ODAsMjE4 ODEsMjE4ODIsMjE4ODMsMjE4ODQsMjE4ODUsMjE4ODYsCisyMTg4NywyMTg4OCwyMTg4OSwyMTg5 MCwyMTg5MSwyMTg5MiwyMTg5MywyMTg5NCwyMTg5NSwyMTg5NiwyMTg5NywyMTg5OCwKKzIxODk5 LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTAzLDIxOTA0LDIxOTA1LDIxOTA2LDIxOTA3LDIxOTA4LDIx OTA5LDIxOTEwLAorMjE5MTEsMjE5MTIsMjE5MTMsMjE5MTQsMjE5MTUsMjE5MTYsMjE5MTcsMjE5 MTgsMjE5MTksMjE5MjAsMjE5MjEsMjE5MjIsCisyMTkyMywyMTkyNCwyMTkyNSwyMTkyNiwyMTky NywyMTkyOCwyMTkyOSwyMTkzMCwyMTkzMSwyMTkzMiwyMTkzMywyMTkzNCwKKzIxOTM1LDIxOTM2 LDIxOTM3LDIxOTM4LDIxOTM5LDIxOTQwLDIxOTQxLDIxOTQyLDIxOTQzLDIxOTQ0LDIxOTQ1LDIx OTQ2LAorMjE5NDcsMjE5NDgsMjE5NDksMjE5NTAsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5 NTUsMjE5NTYsMjE5NTcsMjE5NTgsCisyMTk1OSwyMTk2MCwyMTk2MSwyMTk2MiwyMTk2MywyMTk2 NCwyMTk2NSwyMTk2NiwyMTk2NywyMTk2OCwyMTk2OSwyMTk3MCwKKzIxOTcxLDIxOTcyLDIxOTcz LDIxOTc0LDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgwLDIxOTgxLDIxOTgyLAor MjE5ODMsMjE5ODQsMjE5ODUsMjE5ODYsMjE5ODcsMjE5ODgsMjE5ODksMjE5OTAsMjE5OTEsMjE5 OTIsMjE5OTMsMjE5OTQsCisyMTk5NSwyMTk5NiwyMTk5NywyMTk5OCwyMTk5OSwyMjAwMCwyMjAw MSwyMjAwMiwyMjAwMywyMjAwNCwyMjAwNSwyMjAwNiwKKzIyMDA3LDIyMDA4LDIyMDA5LDIyMDEw LDIyMDExLDIyMDEyLDIyMDEzLDIyMDE0LDIyMDE1LDIyMDE2LDIyMDE3LDIyMDE4LAorMjIwMTks MjIwMjAsMjIwMjEsMjIwMjIsMjIwMjMsMjIwMjQsMjIwMjUsMjIwMjYsMjIwMjcsMjIwMjgsMjIw MjksMjIwMzAsCisyMjAzMSwyMjAzMiwyMjAzMywyMjAzNCwyMjAzNSwyMjAzNiwyMjAzNywyMjAz OCwyMjAzOSwyMjA0MCwyMjA0MSwyMjA0MiwKKzIyMDQzLDIyMDQ0LDIyMDQ1LDIyMDQ2LDIyMDQ3 LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUxLDIyMDUyLDIyMDUzLDIyMDU0LAorMjIwNTUsMjIwNTYs MjIwNTcsMjIwNTgsMjIwNTksMjIwNjAsMjIwNjEsMjIwNjIsMjIwNjMsMjIwNjQsMjIwNjUsMjIw NjYsCisyMjA2NywyMjA2OCwyMjA2OSwyMjA3MCwyMjA3MSwyMjA3MiwyMjA3MywyMjA3NCwyMjA3 NSwyMjA3NiwyMjA3NywyMjA3OCwKKzIyMDc5LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0 LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLAorMjIwOTEsMjIwOTIsMjIwOTMs MjIwOTQsMjIwOTUsMjIwOTYsMjIwOTcsMjIwOTgsMjIwOTksMjIxMDAsMjIxMDEsMjIxMDIsCisy MjEwMywyMjEwNCwyMjEwNSwyMjEwNiwyMjEwNywyMjEwOCwyMjEwOSwyMjExMCwyMjExMSwyMjEx MiwyMjExMywyMjExNCwKKzIyMTE1LDIyMTE2LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTIwLDIyMTIx LDIyMTIyLDIyMTIzLDIyMTI0LDIyMTI1LDIyMTI2LAorMjIxMjcsMjIxMjgsMjIxMjksMjIxMzAs MjIxMzEsMjIxMzIsMjIxMzMsMjIxMzQsMjIxMzUsMjIxMzYsMjIxMzcsMjIxMzgsCisyMjEzOSwy MjE0MCwyMjE0MSwyMjE0MiwyMjE0MywyMjE0NCwyMjE0NSwyMjE0NiwyMjE0NywyMjE0OCwyMjE0 OSwyMjE1MCwKKzIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTU4 LDIyMTU5LDIyMTYwLDIyMTYxLDIyMTYyLAorMjIxNjMsMjIxNjQsMjIxNjUsMjIxNjYsMjIxNjcs MjIxNjgsMjIxNjksMjIxNzAsMjIxNzEsMjIxNzIsMjIxNzMsMjIxNzQsCisyMjE3NSwyMjE3Niwy MjE3NywyMjE3OCwyMjE3OSwyMjE4MCwyMjE4MSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4 NiwKKzIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkxLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1 LDIyMTk2LDIyMTk3LDIyMTk4LAorMjIxOTksMjIyMDAsMjIyMDEsMjIyMDIsMjIyMDMsMjIyMDQs MjIyMDUsMjIyMDYsMjIyMDcsMjIyMDgsMjIyMDksMjIyMTAsCisyMjIxMSwyMjIxMiwyMjIxMywy MjIxNCwyMjIxNSwyMjIxNiwyMjIxNywyMjIxOCwyMjIxOSwyMjIyMCwyMjIyMSwyMjIyMiwKKzIy MjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI4LDIyMjI5LDIyMjMwLDIyMjMxLDIyMjMy LDIyMjMzLDIyMjM0LAorMjIyMzUsMjIyMzYsMjIyMzcsMjIyMzgsMjIyMzksMjIyNDAsMjIyNDEs MjIyNDIsMjIyNDMsMjIyNDQsMjIyNDUsMjIyNDYsCisyMjI0NywyMjI0OCwyMjI0OSwyMjI1MCwy MjI1MSwyMjI1MiwyMjI1MywyMjI1NCwyMjI1NSwyMjI1NiwyMjI1NywyMjI1OCwKKzIyMjU5LDIy MjYwLDIyMjYxLDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY1LDIyMjY2LDIyMjY3LDIyMjY4LDIyMjY5 LDIyMjcwLAorMjIyNzEsMjIyNzIsMjIyNzMsMjIyNzQsMjIyNzUsMjIyNzYsMjIyNzcsMjIyNzgs MjIyNzksMjIyODAsMjIyODEsMjIyODIsCisyMjI4MywyMjI4NCwyMjI4NSwyMjI4NiwyMjI4Nywy MjI4OCwyMjI4OSwyMjI5MCwyMjI5MSwyMjI5MiwyMjI5MywyMjI5NCwKKzIyMjk1LDIyMjk2LDIy Mjk3LDIyMjk4LDIyMjk5LDIyMzAwLDIyMzAxLDIyMzAyLDIyMzAzLDIyMzA0LDIyMzA1LDIyMzA2 LAorMjIzMDcsMjIzMDgsMjIzMDksMjIzMTAsMjIzMTEsMjIzMTIsMjIzMTMsMjIzMTQsMjIzMTUs MjIzMTYsMjIzMTcsMjIzMTgsCisyMjMxOSwyMjMyMCwyMjMyMSwyMjMyMiwyMjMyMywyMjMyNCwy MjMyNSwyMjMyNiwyMjMyNywyMjMyOCwyMjMyOSwyMjMzMCwKKzIyMzMxLDIyMzMyLDIyMzMzLDIy MzM0LDIyMzM1LDIyMzM2LDIyMzM3LDIyMzM4LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLAorMjIz NDMsMjIzNDQsMjIzNDUsMjIzNDYsMjIzNDcsMjIzNDgsMjIzNDksMjIzNTAsMjIzNTEsMjIzNTIs MjIzNTMsMjIzNTQsCisyMjM1NSwyMjM1NiwyMjM1NywyMjM1OCwyMjM1OSwyMjM2MCwyMjM2MSwy MjM2MiwyMjM2MywyMjM2NCwyMjM2NSwyMjM2NiwKKzIyMzY3LDIyMzY4LDIyMzY5LDIyMzcwLDIy MzcxLDIyMzcyLDIyMzczLDIyMzc0LDIyMzc1LDIyMzc2LDIyMzc3LDIyMzc4LAorMjIzNzksMjIz ODAsMjIzODEsMjIzODIsMjIzODMsMjIzODQsMjIzODUsMjIzODYsMjIzODcsMjIzODgsMjIzODks MjIzOTAsCisyMjM5MSwyMjM5MiwyMjM5MywyMjM5NCwyMjM5NSwyMjM5NiwyMjM5NywyMjM5OCwy MjM5OSwyMjQwMCwyMjQwMSwyMjQwMiwKKzIyNDAzLDIyNDA0LDIyNDA1LDIyNDA2LDIyNDA3LDIy NDA4LDIyNDA5LDIyNDEwLDIyNDExLDIyNDEyLDIyNDEzLDIyNDE0LAorMjI0MTUsMjI0MTYsMjI0 MTcsMjI0MTgsMjI0MTksMjI0MjAsMjI0MjEsMjI0MjIsMjI0MjMsMjI0MjQsMjI0MjUsMjI0MjYs CisyMjQyNywyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzMiwyMjQzMywyMjQzNCwyMjQzNSwy MjQzNiwyMjQzNywyMjQzOCwKKzIyNDM5LDIyNDQwLDIyNDQxLDIyNDQyLDIyNDQzLDIyNDQ0LDIy NDQ1LDIyNDQ2LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUwLAorMjI0NTEsMjI0NTIsMjI0NTMsMjI0 NTQsMjI0NTUsMjI0NTYsMjI0NTcsMjI0NTgsMjI0NTksMjI0NjAsMjI0NjEsMjI0NjIsCisyMjQ2 MywyMjQ2NCwyMjQ2NSwyMjQ2NiwyMjQ2NywyMjQ2OCwyMjQ2OSwyMjQ3MCwyMjQ3MSwyMjQ3Miwy MjQ3MywyMjQ3NCwKKzIyNDc1LDIyNDc2LDIyNDc3LDIyNDc4LDIyNDc5LDIyNDgwLDIyNDgxLDIy NDgyLDIyNDgzLDIyNDg0LDIyNDg1LDIyNDg2LAorMjI0ODcsMjI0ODgsMjI0ODksMjI0OTAsMjI0 OTEsMjI0OTIsMjI0OTMsMjI0OTQsMjI0OTUsMjI0OTYsMjI0OTcsMjI0OTgsCisyMjQ5OSwyMjUw MCwyMjUwMSwyMjUwMiwyMjUwMywyMjUwNCwyMjUwNSwyMjUwNiwyMjUwNywyMjUwOCwyMjUwOSwy MjUxMCwKKzIyNTExLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE2LDIyNTE3LDIyNTE4LDIy NTE5LDIyNTIwLDIyNTIxLDIyNTIyLAorMjI1MjMsMjI1MjQsMjI1MjUsMjI1MjYsMjI1MjcsMjI1 MjgsMjI1MjksMjI1MzAsMjI1MzEsMjI1MzIsMjI1MzMsMjI1MzQsCisyMjUzNSwyMjUzNiwyMjUz NywyMjUzOCwyMjUzOSwyMjU0MCwyMjU0MSwyMjU0MiwyMjU0MywyMjU0NCwyMjU0NSwyMjU0NiwK KzIyNTQ3LDIyNTQ4LDIyNTQ5LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTUzLDIyNTU0LDIyNTU1LDIy NTU2LDIyNTU3LDIyNTU4LAorMjI1NTksMjI1NjAsMjI1NjEsMjI1NjIsMjI1NjMsMjI1NjQsMjI1 NjUsMjI1NjYsMjI1NjcsMjI1NjgsMjI1NjksMjI1NzAsCisyMjU3MSwyMjU3MiwyMjU3MywyMjU3 NCwyMjU3NSwyMjU3NiwyMjU3NywyMjU3OCwyMjU3OSwyMjU4MCwyMjU4MSwyMjU4MiwKKzIyNTgz LDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIy NTkzLDIyNTk0LAorMjI1OTUsMjI1OTYsMjI1OTcsMjI1OTgsMjI1OTksMjI2MDAsMjI2MDEsMjI2 MDIsMjI2MDMsMjI2MDQsMjI2MDUsMjI2MDYsCisyMjYwNywyMjYwOCwyMjYwOSwyMjYxMCwyMjYx MSwyMjYxMiwyMjYxMywyMjYxNCwyMjYxNSwyMjYxNiwyMjYxNywyMjYxOCwKKzIyNjE5LDIyNjIw LDIyNjIxLDIyNjIyLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjI5LDIy NjMwLAorMjI2MzEsMjI2MzIsMjI2MzMsMjI2MzQsMjI2MzUsMjI2MzYsMjI2MzcsMjI2MzgsMjI2 MzksMjI2NDAsMjI2NDEsMjI2NDIsCisyMjY0MywyMjY0NCwyMjY0NSwyMjY0NiwyMjY0NywyMjY0 OCwyMjY0OSwyMjY1MCwyMjY1MSwyMjY1MiwyMjY1MywyMjY1NCwKKzIyNjU1LDIyNjU2LDIyNjU3 LDIyNjU4LDIyNjU5LDIyNjYwLDIyNjYxLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY1LDIyNjY2LAor MjI2NjcsMjI2NjgsMjI2NjksMjI2NzAsMjI2NzEsMjI2NzIsMjI2NzMsMjI2NzQsMjI2NzUsMjI2 NzYsMjI2NzcsMjI2NzgsCisyMjY3OSwyMjY4MCwyMjY4MSwyMjY4MiwyMjY4MywyMjY4NCwyMjY4 NSwyMjY4NiwyMjY4NywyMjY4OCwyMjY4OSwyMjY5MCwKKzIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0 LDIyNjk1LDIyNjk2LDIyNjk3LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLAorMjI3MDMs MjI3MDQsMjI3MDUsMjI3MDYsMjI3MDcsMjI3MDgsMjI3MDksMjI3MTAsMjI3MTEsMjI3MTIsMjI3 MTMsMjI3MTQsCisyMjcxNSwyMjcxNiwyMjcxNywyMjcxOCwyMjcxOSwyMjcyMCwyMjcyMSwyMjcy MiwyMjcyMywyMjcyNCwyMjcyNSwyMjcyNiwKKzIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMx LDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM3LDIyNzM4LAorMjI3MzksMjI3NDAs MjI3NDEsMjI3NDIsMjI3NDMsMjI3NDQsMjI3NDUsMjI3NDYsMjI3NDcsMjI3NDgsMjI3NDksMjI3 NTAsCisyMjc1MSwyMjc1MiwyMjc1MywyMjc1NCwyMjc1NSwyMjc1NiwyMjc1NywyMjc1OCwyMjc1 OSwyMjc2MCwyMjc2MSwyMjc2MiwKKzIyNzYzLDIyNzY0LDIyNzY1LDIyNzY2LDIyNzY3LDIyNzY4 LDIyNzY5LDIyNzcwLDIyNzcxLDIyNzcyLDIyNzczLDIyNzc0LAorMjI3NzUsMjI3NzYsMjI3Nzcs MjI3NzgsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODIsMjI3ODMsMjI3ODQsMjI3ODUsMjI3ODYsCisy Mjc4NywyMjc4OCwyMjc4OSwyMjc5MCwyMjc5MSwyMjc5MiwyMjc5MywyMjc5NCwyMjc5NSwyMjc5 NiwyMjc5NywyMjc5OCwKKzIyNzk5LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA0LDIyODA1 LDIyODA2LDIyODA3LDIyODA4LDIyODA5LDIyODEwLAorMjI4MTEsMjI4MTIsMjI4MTMsMjI4MTQs MjI4MTUsMjI4MTYsMjI4MTcsMjI4MTgsMjI4MTksMjI4MjAsMjI4MjEsMjI4MjIsCisyMjgyMywy MjgyNCwyMjgyNSwyMjgyNiwyMjgyNywyMjgyOCwyMjgyOSwyMjgzMCwyMjgzMSwyMjgzMiwyMjgz MywyMjgzNCwKKzIyODM1LDIyODM2LDIyODM3LDIyODM4LDIyODM5LDIyODQwLDIyODQxLDIyODQy LDIyODQzLDIyODQ0LDIyODQ1LDIyODQ2LAorMjI4NDcsMjI4NDgsMjI4NDksMjI4NTAsMjI4NTEs MjI4NTIsMjI4NTMsMjI4NTQsMjI4NTUsMjI4NTYsMjI4NTcsMjI4NTgsCisyMjg1OSwyMjg2MCwy Mjg2MSwyMjg2MiwyMjg2MywyMjg2NCwyMjg2NSwyMjg2NiwyMjg2NywyMjg2OCwyMjg2OSwyMjg3 MCwKKzIyODcxLDIyODcyLDIyODczLDIyODc0LDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5 LDIyODgwLDIyODgxLDIyODgyLAorMjI4ODMsMjI4ODQsMjI4ODUsMjI4ODYsMjI4ODcsMjI4ODgs MjI4ODksMjI4OTAsMjI4OTEsMjI4OTIsMjI4OTMsMjI4OTQsCisyMjg5NSwyMjg5NiwyMjg5Nywy Mjg5OCwyMjg5OSwyMjkwMCwyMjkwMSwyMjkwMiwyMjkwMywyMjkwNCwyMjkwNSwyMjkwNiwKKzIy OTA3LDIyOTA4LDIyOTA5LDIyOTEwLDIyOTExLDIyOTEyLDIyOTEzLDIyOTE0LDIyOTE1LDIyOTE2 LDIyOTE3LDIyOTE4LAorMjI5MTksMjI5MjAsMjI5MjEsMjI5MjIsMjI5MjMsMjI5MjQsMjI5MjUs MjI5MjYsMjI5MjcsMjI5MjgsMjI5MjksMjI5MzAsCisyMjkzMSwyMjkzMiwyMjkzMywyMjkzNCwy MjkzNSwyMjkzNiwyMjkzNywyMjkzOCwyMjkzOSwyMjk0MCwyMjk0MSwyMjk0MiwKKzIyOTQzLDIy OTQ0LDIyOTQ1LDIyOTQ2LDIyOTQ3LDIyOTQ4LDIyOTQ5LDIyOTUwLDIyOTUxLDIyOTUyLDIyOTUz LDIyOTU0LAorMjI5NTUsMjI5NTYsMjI5NTcsMjI5NTgsMjI5NTksMjI5NjAsMjI5NjEsMjI5NjIs MjI5NjMsMjI5NjQsMjI5NjUsMjI5NjYsCisyMjk2NywyMjk2OCwyMjk2OSwyMjk3MCwyMjk3MSwy Mjk3MiwyMjk3MywyMjk3NCwyMjk3NSwyMjk3NiwyMjk3NywyMjk3OCwKKzIyOTc5LDIyOTgwLDIy OTgxLDIyOTgyLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg2LDIyOTg3LDIyOTg4LDIyOTg5LDIyOTkw LAorMjI5OTEsMjI5OTIsMjI5OTMsMjI5OTQsMjI5OTUsMjI5OTYsMjI5OTcsMjI5OTgsMjI5OTks MjMwMDAsMjMwMDEsMjMwMDIsCisyMzAwMywyMzAwNCwyMzAwNSwyMzAwNiwyMzAwNywyMzAwOCwy MzAwOSwyMzAxMCwyMzAxMSwyMzAxMiwyMzAxMywyMzAxNCwKKzIzMDE1LDIzMDE2LDIzMDE3LDIz MDE4LDIzMDE5LDIzMDIwLDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LAorMjMw MjcsMjMwMjgsMjMwMjksMjMwMzAsMjMwMzEsMjMwMzIsMjMwMzMsMjMwMzQsMjMwMzUsMjMwMzYs MjMwMzcsMjMwMzgsCisyMzAzOSwyMzA0MCwyMzA0MSwyMzA0MiwyMzA0MywyMzA0NCwyMzA0NSwy MzA0NiwyMzA0NywyMzA0OCwyMzA0OSwyMzA1MCwKKzIzMDUxLDIzMDUyLDIzMDUzLDIzMDU0LDIz MDU1LDIzMDU2LDIzMDU3LDIzMDU4LDIzMDU5LDIzMDYwLDIzMDYxLDIzMDYyLAorMjMwNjMsMjMw NjQsMjMwNjUsMjMwNjYsMjMwNjcsMjMwNjgsMjMwNjksMjMwNzAsMjMwNzEsMjMwNzIsMjMwNzMs MjMwNzQsCisyMzA3NSwyMzA3NiwyMzA3NywyMzA3OCwyMzA3OSwyMzA4MCwyMzA4MSwyMzA4Miwy MzA4MywyMzA4NCwyMzA4NSwyMzA4NiwKKzIzMDg3LDIzMDg4LDIzMDg5LDIzMDkwLDIzMDkxLDIz MDkyLDIzMDkzLDIzMDk0LDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LAorMjMwOTksMjMxMDAsMjMx MDEsMjMxMDIsMjMxMDMsMjMxMDQsMjMxMDUsMjMxMDYsMjMxMDcsMjMxMDgsMjMxMDksMjMxMTAs CisyMzExMSwyMzExMiwyMzExMywyMzExNCwyMzExNSwyMzExNiwyMzExNywyMzExOCwyMzExOSwy MzEyMCwyMzEyMSwyMzEyMiwKKzIzMTIzLDIzMTI0LDIzMTI1LDIzMTI2LDIzMTI3LDIzMTI4LDIz MTI5LDIzMTMwLDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LAorMjMxMzUsMjMxMzYsMjMxMzcsMjMx MzgsMjMxMzksMjMxNDAsMjMxNDEsMjMxNDIsMjMxNDMsMjMxNDQsMjMxNDUsMjMxNDYsCisyMzE0 NywyMzE0OCwyMzE0OSwyMzE1MCwyMzE1MSwyMzE1MiwyMzE1MywyMzE1NCwyMzE1NSwyMzE1Niwy MzE1NywyMzE1OCwKKzIzMTU5LDIzMTYwLDIzMTYxLDIzMTYyLDIzMTYzLDIzMTY0LDIzMTY1LDIz MTY2LDIzMTY3LDIzMTY4LDIzMTY5LDIzMTcwLAorMjMxNzEsMjMxNzIsMjMxNzMsMjMxNzQsMjMx NzUsMjMxNzYsMjMxNzcsMjMxNzgsMjMxNzksMjMxODAsMjMxODEsMjMxODIsCisyMzE4MywyMzE4 NCwyMzE4NSwyMzE4NiwyMzE4NywyMzE4OCwyMzE4OSwyMzE5MCwyMzE5MSwyMzE5MiwyMzE5Mywy MzE5NCwKKzIzMTk1LDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIz MjAzLDIzMjA0LDIzMjA1LDIzMjA2LAorMjMyMDcsMjMyMDgsMjMyMDksMjMyMTAsMjMyMTEsMjMy MTIsMjMyMTMsMjMyMTQsMjMyMTUsMjMyMTYsMjMyMTcsMjMyMTgsCisyMzIxOSwyMzIyMCwyMzIy MSwyMzIyMiwyMzIyMywyMzIyNCwyMzIyNSwyMzIyNiwyMzIyNywyMzIyOCwyMzIyOSwyMzIzMCwK KzIzMjMxLDIzMjMyLDIzMjMzLDIzMjM0LDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIz MjQwLDIzMjQxLDIzMjQyLAorMjMyNDMsMjMyNDQsMjMyNDUsMjMyNDYsMjMyNDcsMjMyNDgsMjMy NDksMjMyNTAsMjMyNTEsMjMyNTIsMjMyNTMsMjMyNTQsCisyMzI1NSwyMzI1NiwyMzI1NywyMzI1 OCwyMzI1OSwyMzI2MCwyMzI2MSwyMzI2MiwyMzI2MywyMzI2NCwyMzI2NSwyMzI2NiwKKzIzMjY3 LDIzMjY4LDIzMjY5LDIzMjcwLDIzMjcxLDIzMjcyLDIzMjczLDIzMjc0LDIzMjc1LDIzMjc2LDIz Mjc3LDIzMjc4LAorMjMyNzksMjMyODAsMjMyODEsMjMyODIsMjMyODMsMjMyODQsMjMyODUsMjMy ODYsMjMyODcsMjMyODgsMjMyODksMjMyOTAsCisyMzI5MSwyMzI5MiwyMzI5MywyMzI5NCwyMzI5 NSwyMzI5NiwyMzI5NywyMzI5OCwyMzI5OSwyMzMwMCwyMzMwMSwyMzMwMiwKKzIzMzAzLDIzMzA0 LDIzMzA1LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIz MzE0LAorMjMzMTUsMjMzMTYsMjMzMTcsMjMzMTgsMjMzMTksMjMzMjAsMjMzMjEsMjMzMjIsMjMz MjMsMjMzMjQsMjMzMjUsMjMzMjYsCisyMzMyNywyMzMyOCwyMzMyOSwyMzMzMCwyMzMzMSwyMzMz MiwyMzMzMywyMzMzNCwyMzMzNSwyMzMzNiwyMzMzNywyMzMzOCwKKzIzMzM5LDIzMzQwLDIzMzQx LDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ2LDIzMzQ3LDIzMzQ4LDIzMzQ5LDIzMzUwLAor MjMzNTEsMjMzNTIsMjMzNTMsMjMzNTQsMjMzNTUsMjMzNTYsMjMzNTcsMjMzNTgsMjMzNTksMjMz NjAsMjMzNjEsMjMzNjIsCisyMzM2MywyMzM2NCwyMzM2NSwyMzM2NiwyMzM2NywyMzM2OCwyMzM2 OSwyMzM3MCwyMzM3MSwyMzM3MiwyMzM3MywyMzM3NCwKKzIzMzc1LDIzMzc2LDIzMzc3LDIzMzc4 LDIzMzc5LDIzMzgwLDIzMzgxLDIzMzgyLDIzMzgzLDIzMzg0LDIzMzg1LDIzMzg2LAorMjMzODcs MjMzODgsMjMzODksMjMzOTAsMjMzOTEsMjMzOTIsMjMzOTMsMjMzOTQsMjMzOTUsMjMzOTYsMjMz OTcsMjMzOTgsCisyMzM5OSwyMzQwMCwyMzQwMSwyMzQwMiwyMzQwMywyMzQwNCwyMzQwNSwyMzQw NiwyMzQwNywyMzQwOCwyMzQwOSwyMzQxMCwKKzIzNDExLDIzNDEyLDIzNDEzLDIzNDE0LDIzNDE1 LDIzNDE2LDIzNDE3LDIzNDE4LDIzNDE5LDIzNDIwLDIzNDIxLDIzNDIyLAorMjM0MjMsMjM0MjQs MjM0MjUsMjM0MjYsMjM0MjcsMjM0MjgsMjM0MjksMjM0MzAsMjM0MzEsMjM0MzIsMjM0MzMsMjM0 MzQsCisyMzQzNSwyMzQzNiwyMzQzNywyMzQzOCwyMzQzOSwyMzQ0MCwyMzQ0MSwyMzQ0MiwyMzQ0 MywyMzQ0NCwyMzQ0NSwyMzQ0NiwKKzIzNDQ3LDIzNDQ4LDIzNDQ5LDIzNDUwLDIzNDUxLDIzNDUy LDIzNDUzLDIzNDU0LDIzNDU1LDIzNDU2LDIzNDU3LDIzNDU4LAorMjM0NTksMjM0NjAsMjM0NjEs MjM0NjIsMjM0NjMsMjM0NjQsMjM0NjUsMjM0NjYsMjM0NjcsMjM0NjgsMjM0NjksMjM0NzAsCisy MzQ3MSwyMzQ3MiwyMzQ3MywyMzQ3NCwyMzQ3NSwyMzQ3NiwyMzQ3NywyMzQ3OCwyMzQ3OSwyMzQ4 MCwyMzQ4MSwyMzQ4MiwKKzIzNDgzLDIzNDg0LDIzNDg1LDIzNDg2LDIzNDg3LDIzNDg4LDIzNDg5 LDIzNDkwLDIzNDkxLDIzNDkyLDIzNDkzLDIzNDk0LAorMjM0OTUsMjM0OTYsMjM0OTcsMjM0OTgs MjM0OTksMjM1MDAsMjM1MDEsMjM1MDIsMjM1MDMsMjM1MDQsMjM1MDUsMjM1MDYsCisyMzUwNywy MzUwOCwyMzUwOSwyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUxNSwyMzUxNiwyMzUx NywyMzUxOCwKKzIzNTE5LDIzNTIwLDIzNTIxLDIzNTIyLDIzNTIzLDIzNTI0LDIzNTI1LDIzNTI2 LDIzNTI3LDIzNTI4LDIzNTI5LDIzNTMwLAorMjM1MzEsMjM1MzIsMjM1MzMsMjM1MzQsMjM1MzUs MjM1MzYsMjM1MzcsMjM1MzgsMjM1MzksMjM1NDAsMjM1NDEsMjM1NDIsCisyMzU0MywyMzU0NCwy MzU0NSwyMzU0NiwyMzU0NywyMzU0OCwyMzU0OSwyMzU1MCwyMzU1MSwyMzU1MiwyMzU1MywyMzU1 NCwKKzIzNTU1LDIzNTU2LDIzNTU3LDIzNTU4LDIzNTU5LDIzNTYwLDIzNTYxLDIzNTYyLDIzNTYz LDIzNTY0LDIzNTY1LDIzNTY2LAorMjM1NjcsMjM1NjgsMjM1NjksMjM1NzAsMjM1NzEsMjM1NzIs MjM1NzMsMjM1NzQsMjM1NzUsMjM1NzYsMjM1NzcsMjM1NzgsCisyMzU3OSwyMzU4MCwyMzU4MSwy MzU4MiwyMzU4MywyMzU4NCwyMzU4NSwyMzU4NiwyMzU4NywyMzU4OCwyMzU4OSwyMzU5MCwKKzIz NTkxLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk2LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAw LDIzNjAxLDIzNjAyLAorMjM2MDMsMjM2MDQsMjM2MDUsMjM2MDYsMjM2MDcsMjM2MDgsMjM2MDks MjM2MTAsMjM2MTEsMjM2MTIsMjM2MTMsMjM2MTQsCisyMzYxNSwyMzYxNiwyMzYxNywyMzYxOCwy MzYxOSwyMzYyMCwyMzYyMSwyMzYyMiwyMzYyMywyMzYyNCwyMzYyNSwyMzYyNiwKKzIzNjI3LDIz NjI4LDIzNjI5LDIzNjMwLDIzNjMxLDIzNjMyLDIzNjMzLDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM3 LDIzNjM4LAorMjM2MzksMjM2NDAsMjM2NDEsMjM2NDIsMjM2NDMsMjM2NDQsMjM2NDUsMjM2NDYs MjM2NDcsMjM2NDgsMjM2NDksMjM2NTAsCisyMzY1MSwyMzY1MiwyMzY1MywyMzY1NCwyMzY1NSwy MzY1NiwyMzY1NywyMzY1OCwyMzY1OSwyMzY2MCwyMzY2MSwyMzY2MiwKKzIzNjYzLDIzNjY0LDIz NjY1LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjczLDIzNjc0 LAorMjM2NzUsMjM2NzYsMjM2NzcsMjM2NzgsMjM2NzksMjM2ODAsMjM2ODEsMjM2ODIsMjM2ODMs MjM2ODQsMjM2ODUsMjM2ODYsCisyMzY4NywyMzY4OCwyMzY4OSwyMzY5MCwyMzY5MSwyMzY5Miwy MzY5MywyMzY5NCwyMzY5NSwyMzY5NiwyMzY5NywyMzY5OCwKKzIzNjk5LDIzNzAwLDIzNzAxLDIz NzAyLDIzNzAzLDIzNzA0LDIzNzA1LDIzNzA2LDIzNzA3LDIzNzA4LDIzNzA5LDIzNzEwLAorMjM3 MTEsMjM3MTIsMjM3MTMsMjM3MTQsMjM3MTUsMjM3MTYsMjM3MTcsMjM3MTgsMjM3MTksMjM3MjAs MjM3MjEsMjM3MjIsCisyMzcyMywyMzcyNCwyMzcyNSwyMzcyNiwyMzcyNywyMzcyOCwyMzcyOSwy MzczMCwyMzczMSwyMzczMiwyMzczMywyMzczNCwKKzIzNzM1LDIzNzM2LDIzNzM3LDIzNzM4LDIz NzM5LDIzNzQwLDIzNzQxLDIzNzQyLDIzNzQzLDIzNzQ0LDIzNzQ1LDIzNzQ2LAorMjM3NDcsMjM3 NDgsMjM3NDksMjM3NTAsMjM3NTEsMjM3NTIsMjM3NTMsMjM3NTQsMjM3NTUsMjM3NTYsMjM3NTcs MjM3NTgsCisyMzc1OSwyMzc2MCwyMzc2MSwyMzc2MiwyMzc2MywyMzc2NCwyMzc2NSwyMzc2Niwy Mzc2NywyMzc2OCwyMzc2OSwyMzc3MCwKKzIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIz Nzc2LDIzNzc3LDIzNzc4LDIzNzc5LDIzNzgwLDIzNzgxLDIzNzgyLAorMjM3ODMsMjM3ODQsMjM3 ODUsMjM3ODYsMjM3ODcsMjM3ODgsMjM3ODksMjM3OTAsMjM3OTEsMjM3OTIsMjM3OTMsMjM3OTQs CisyMzc5NSwyMzc5NiwyMzc5NywyMzc5OCwyMzc5OSwyMzgwMCwyMzgwMSwyMzgwMiwyMzgwMywy MzgwNCwyMzgwNSwyMzgwNiwKKzIzODA3LDIzODA4LDIzODA5LDIzODEwLDIzODExLDIzODEyLDIz ODEzLDIzODE0LDIzODE1LDIzODE2LDIzODE3LDIzODE4LAorMjM4MTksMjM4MjAsMjM4MjEsMjM4 MjIsMjM4MjMsMjM4MjQsMjM4MjUsMjM4MjYsMjM4MjcsMjM4MjgsMjM4MjksMjM4MzAsCisyMzgz MSwyMzgzMiwyMzgzMywyMzgzNCwyMzgzNSwyMzgzNiwyMzgzNywyMzgzOCwyMzgzOSwyMzg0MCwy Mzg0MSwyMzg0MiwKKzIzODQzLDIzODQ0LDIzODQ1LDIzODQ2LDIzODQ3LDIzODQ4LDIzODQ5LDIz ODUwLDIzODUxLDIzODUyLDIzODUzLDIzODU0LAorMjM4NTUsMjM4NTYsMjM4NTcsMjM4NTgsMjM4 NTksMjM4NjAsMjM4NjEsMjM4NjIsMjM4NjMsMjM4NjQsMjM4NjUsMjM4NjYsCisyMzg2NywyMzg2 OCwyMzg2OSwyMzg3MCwyMzg3MSwyMzg3MiwyMzg3MywyMzg3NCwyMzg3NSwyMzg3NiwyMzg3Nywy Mzg3OCwKKzIzODc5LDIzODgwLDIzODgxLDIzODgyLDIzODgzLDIzODg0LDIzODg1LDIzODg2LDIz ODg3LDIzODg4LDIzODg5LDIzODkwLAorMjM4OTEsMjM4OTIsMjM4OTMsMjM4OTQsMjM4OTUsMjM4 OTYsMjM4OTcsMjM4OTgsMjM4OTksMjM5MDAsMjM5MDEsMjM5MDIsCisyMzkwMywyMzkwNCwyMzkw NSwyMzkwNiwyMzkwNywyMzkwOCwyMzkwOSwyMzkxMCwyMzkxMSwyMzkxMiwyMzkxMywyMzkxNCwK KzIzOTE1LDIzOTE2LDIzOTE3LDIzOTE4LDIzOTE5LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIz OTI0LDIzOTI1LDIzOTI2LAorMjM5MjcsMjM5MjgsMjM5MjksMjM5MzAsMjM5MzEsMjM5MzIsMjM5 MzMsMjM5MzQsMjM5MzUsMjM5MzYsMjM5MzcsMjM5MzgsCisyMzkzOSwyMzk0MCwyMzk0MSwyMzk0 MiwyMzk0MywyMzk0NCwyMzk0NSwyMzk0NiwyMzk0NywyMzk0OCwyMzk0OSwyMzk1MCwKKzIzOTUx LDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIz OTYxLDIzOTYyLAorMjM5NjMsMjM5NjQsMjM5NjUsMjM5NjYsMjM5NjcsMjM5NjgsMjM5NjksMjM5 NzAsMjM5NzEsMjM5NzIsMjM5NzMsMjM5NzQsCisyMzk3NSwyMzk3NiwyMzk3NywyMzk3OCwyMzk3 OSwyMzk4MCwyMzk4MSwyMzk4MiwyMzk4MywyMzk4NCwyMzk4NSwyMzk4NiwKKzIzOTg3LDIzOTg4 LDIzOTg5LDIzOTkwLDIzOTkxLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIz OTk4LAorMjM5OTksMjQwMDAsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDUsMjQwMDYsMjQw MDcsMjQwMDgsMjQwMDksMjQwMTAsCisyNDAxMSwyNDAxMiwyNDAxMywyNDAxNCwyNDAxNSwyNDAx NiwyNDAxNywyNDAxOCwyNDAxOSwyNDAyMCwyNDAyMSwyNDAyMiwKKzI0MDIzLDI0MDI0LDI0MDI1 LDI0MDI2LDI0MDI3LDI0MDI4LDI0MDI5LDI0MDMwLDI0MDMxLDI0MDMyLDI0MDMzLDI0MDM0LAor MjQwMzUsMjQwMzYsMjQwMzcsMjQwMzgsMjQwMzksMjQwNDAsMjQwNDEsMjQwNDIsMjQwNDMsMjQw NDQsMjQwNDUsMjQwNDYsCisyNDA0NywyNDA0OCwyNDA0OSwyNDA1MCwyNDA1MSwyNDA1MiwyNDA1 MywyNDA1NCwyNDA1NSwyNDA1NiwyNDA1NywyNDA1OCwKKzI0MDU5LDI0MDYwLDI0MDYxLDI0MDYy LDI0MDYzLDI0MDY0LDI0MDY1LDI0MDY2LDI0MDY3LDI0MDY4LDI0MDY5LDI0MDcwLAorMjQwNzEs MjQwNzIsMjQwNzMsMjQwNzQsMjQwNzUsMjQwNzYsMjQwNzcsMjQwNzgsMjQwNzksMjQwODAsMjQw ODEsMjQwODIsCisyNDA4MywyNDA4NCwyNDA4NSwyNDA4NiwyNDA4NywyNDA4OCwyNDA4OSwyNDA5 MCwyNDA5MSwyNDA5MiwyNDA5MywyNDA5NCwKKzI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5 LDI0MTAwLDI0MTAxLDI0MTAyLDI0MTAzLDI0MTA0LDI0MTA1LDI0MTA2LAorMjQxMDcsMjQxMDgs MjQxMDksMjQxMTAsMjQxMTEsMjQxMTIsMjQxMTMsMjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQx MTgsCisyNDExOSwyNDEyMCwyNDEyMSwyNDEyMiwyNDEyMywyNDEyNCwyNDEyNSwyNDEyNiwyNDEy NywyNDEyOCwyNDEyOSwyNDEzMCwKKzI0MTMxLDI0MTMyLDI0MTMzLDI0MTM0LDI0MTM1LDI0MTM2 LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQwLDI0MTQxLDI0MTQyLAorMjQxNDMsMjQxNDQsMjQxNDUs MjQxNDYsMjQxNDcsMjQxNDgsMjQxNDksMjQxNTAsMjQxNTEsMjQxNTIsMjQxNTMsMjQxNTQsCisy NDE1NSwyNDE1NiwyNDE1NywyNDE1OCwyNDE1OSwyNDE2MCwyNDE2MSwyNDE2MiwyNDE2MywyNDE2 NCwyNDE2NSwyNDE2NiwKKzI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTcz LDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTc4LAorMjQxNzksMjQxODAsMjQxODEsMjQxODIs MjQxODMsMjQxODQsMjQxODUsMjQxODYsMjQxODcsMjQxODgsMjQxODksMjQxOTAsCisyNDE5MSwy NDE5MiwyNDE5MywyNDE5NCwyNDE5NSwyNDE5NiwyNDE5NywyNDE5OCwyNDE5OSwyNDIwMCwyNDIw MSwyNDIwMiwKKzI0MjAzLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjA3LDI0MjA4LDI0MjA5LDI0MjEw LDI0MjExLDI0MjEyLDI0MjEzLDI0MjE0LAorMjQyMTUsMjQyMTYsMjQyMTcsMjQyMTgsMjQyMTks MjQyMjAsMjQyMjEsMjQyMjIsMjQyMjMsMjQyMjQsMjQyMjUsMjQyMjYsCisyNDIyNywyNDIyOCwy NDIyOSwyNDIzMCwyNDIzMSwyNDIzMiwyNDIzMywyNDIzNCwyNDIzNSwyNDIzNiwyNDIzNywyNDIz OCwKKzI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQzLDI0MjQ0LDI0MjQ1LDI0MjQ2LDI0MjQ3 LDI0MjQ4LDI0MjQ5LDI0MjUwLAorMjQyNTEsMjQyNTIsMjQyNTMsMjQyNTQsMjQyNTUsMjQyNTYs MjQyNTcsMjQyNTgsMjQyNTksMjQyNjAsMjQyNjEsMjQyNjIsCisyNDI2MywyNDI2NCwyNDI2NSwy NDI2NiwyNDI2NywyNDI2OCwyNDI2OSwyNDI3MCwyNDI3MSwyNDI3MiwyNDI3MywyNDI3NCwKKzI0 Mjc1LDI0Mjc2LDI0Mjc3LDI0Mjc4LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0MjgzLDI0Mjg0 LDI0Mjg1LDI0Mjg2LAorMjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMs MjQyOTQsMjQyOTUsMjQyOTYsMjQyOTcsMjQyOTgsCisyNDI5OSwyNDMwMCwyNDMwMSwyNDMwMiwy NDMwMywyNDMwNCwyNDMwNSwyNDMwNiwyNDMwNywyNDMwOCwyNDMwOSwyNDMxMCwKKzI0MzExLDI0 MzEyLDI0MzEzLDI0MzE0LDI0MzE1LDI0MzE2LDI0MzE3LDI0MzE4LDI0MzE5LDI0MzIwLDI0MzIx LDI0MzIyLAorMjQzMjMsMjQzMjQsMjQzMjUsMjQzMjYsMjQzMjcsMjQzMjgsMjQzMjksMjQzMzAs MjQzMzEsMjQzMzIsMjQzMzMsMjQzMzQsCisyNDMzNSwyNDMzNiwyNDMzNywyNDMzOCwyNDMzOSwy NDM0MCwyNDM0MSwyNDM0MiwyNDM0MywyNDM0NCwyNDM0NSwyNDM0NiwKKzI0MzQ3LDI0MzQ4LDI0 MzQ5LDI0MzUwLDI0MzUxLDI0MzUyLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzU3LDI0MzU4 LAorMjQzNTksMjQzNjAsMjQzNjEsMjQzNjIsMjQzNjMsMjQzNjQsMjQzNjUsMjQzNjYsMjQzNjcs MjQzNjgsMjQzNjksMjQzNzAsCisyNDM3MSwyNDM3MiwyNDM3MywyNDM3NCwyNDM3NSwyNDM3Niwy NDM3NywyNDM3OCwyNDM3OSwyNDM4MCwyNDM4MSwyNDM4MiwKKzI0MzgzLDI0Mzg0LDI0Mzg1LDI0 Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LAorMjQz OTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDAsMjQ0MDEsMjQ0MDIsMjQ0MDMsMjQ0MDQs MjQ0MDUsMjQ0MDYsCisyNDQwNywyNDQwOCwyNDQwOSwyNDQxMCwyNDQxMSwyNDQxMiwyNDQxMywy NDQxNCwyNDQxNSwyNDQxNiwyNDQxNywyNDQxOCwKKzI0NDE5LDI0NDIwLDI0NDIxLDI0NDIyLDI0 NDIzLDI0NDI0LDI0NDI1LDI0NDI2LDI0NDI3LDI0NDI4LDI0NDI5LDI0NDMwLAorMjQ0MzEsMjQ0 MzIsMjQ0MzMsMjQ0MzQsMjQ0MzUsMjQ0MzYsMjQ0MzcsMjQ0MzgsMjQ0MzksMjQ0NDAsMjQ0NDEs MjQ0NDIsCisyNDQ0MywyNDQ0NCwyNDQ0NSwyNDQ0NiwyNDQ0NywyNDQ0OCwyNDQ0OSwyNDQ1MCwy NDQ1MSwyNDQ1MiwyNDQ1MywyNDQ1NCwKKzI0NDU1LDI0NDU2LDI0NDU3LDI0NDU4LDI0NDU5LDI0 NDYwLDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY0LDI0NDY1LDI0NDY2LAorMjQ0NjcsMjQ0NjgsMjQ0 NjksMjQ0NzAsMjQ0NzEsMjQ0NzIsMjQ0NzMsMjQ0NzQsMjQ0NzUsMjQ0NzYsMjQ0NzcsMjQ0Nzgs CisyNDQ3OSwyNDQ4MCwyNDQ4MSwyNDQ4MiwyNDQ4MywyNDQ4NCwyNDQ4NSwyNDQ4NiwyNDQ4Nywy NDQ4OCwyNDQ4OSwyNDQ5MCwKKzI0NDkxLDI0NDkyLDI0NDkzLDI0NDk0LDI0NDk1LDI0NDk2LDI0 NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAxLDI0NTAyLAorMjQ1MDMsMjQ1MDQsMjQ1MDUsMjQ1 MDYsMjQ1MDcsMjQ1MDgsMjQ1MDksMjQ1MTAsMjQ1MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsCisyNDUx NSwyNDUxNiwyNDUxNywyNDUxOCwyNDUxOSwyNDUyMCwyNDUyMSwyNDUyMiwyNDUyMywyNDUyNCwy NDUyNSwyNDUyNiwKKzI0NTI3LDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTMzLDI0 NTM0LDI0NTM1LDI0NTM2LDI0NTM3LDI0NTM4LAorMjQ1MzksMjQ1NDAsMjQ1NDEsMjQ1NDIsMjQ1 NDMsMjQ1NDQsMjQ1NDUsMjQ1NDYsMjQ1NDcsMjQ1NDgsMjQ1NDksMjQ1NTAsCisyNDU1MSwyNDU1 MiwyNDU1MywyNDU1NCwyNDU1NSwyNDU1NiwyNDU1NywyNDU1OCwyNDU1OSwyNDU2MCwyNDU2MSwy NDU2MiwKKzI0NTYzLDI0NTY0LDI0NTY1LDI0NTY2LDI0NTY3LDI0NTY4LDI0NTY5LDI0NTcwLDI0 NTcxLDI0NTcyLDI0NTczLDI0NTc0LAorMjQ1NzUsMjQ1NzYsMjQ1NzcsMjQ1NzgsMjQ1NzksMjQ1 ODAsMjQ1ODEsMjQ1ODIsMjQ1ODMsMjQ1ODQsMjQ1ODUsMjQ1ODYsCisyNDU4NywyNDU4OCwyNDU4 OSwyNDU5MCwyNDU5MSwyNDU5MiwyNDU5MywyNDU5NCwyNDU5NSwyNDU5NiwyNDU5NywyNDU5OCwK KzI0NTk5LDI0NjAwLDI0NjAxLDI0NjAyLDI0NjAzLDI0NjA0LDI0NjA1LDI0NjA2LDI0NjA3LDI0 NjA4LDI0NjA5LDI0NjEwLAorMjQ2MTEsMjQ2MTIsMjQ2MTMsMjQ2MTQsMjQ2MTUsMjQ2MTYsMjQ2 MTcsMjQ2MTgsMjQ2MTksMjQ2MjAsMjQ2MjEsMjQ2MjIsCisyNDYyMywyNDYyNCwyNDYyNSwyNDYy NiwyNDYyNywyNDYyOCwyNDYyOSwyNDYzMCwyNDYzMSwyNDYzMiwyNDYzMywyNDYzNCwKKzI0NjM1 LDI0NjM2LDI0NjM3LDI0NjM4LDI0NjM5LDI0NjQwLDI0NjQxLDI0NjQyLDI0NjQzLDI0NjQ0LDI0 NjQ1LDI0NjQ2LAorMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTEsMjQ2NTIsMjQ2NTMsMjQ2 NTQsMjQ2NTUsMjQ2NTYsMjQ2NTcsMjQ2NTgsCisyNDY1OSwyNDY2MCwyNDY2MSwyNDY2MiwyNDY2 MywyNDY2NCwyNDY2NSwyNDY2NiwyNDY2NywyNDY2OCwyNDY2OSwyNDY3MCwKKzI0NjcxLDI0Njcy LDI0NjczLDI0Njc0LDI0Njc1LDI0Njc2LDI0Njc3LDI0Njc4LDI0Njc5LDI0NjgwLDI0NjgxLDI0 NjgyLAorMjQ2ODMsMjQ2ODQsMjQ2ODUsMjQ2ODYsMjQ2ODcsMjQ2ODgsMjQ2ODksMjQ2OTAsMjQ2 OTEsMjQ2OTIsMjQ2OTMsMjQ2OTQsCisyNDY5NSwyNDY5NiwyNDY5NywyNDY5OCwyNDY5OSwyNDcw MCwyNDcwMSwyNDcwMiwyNDcwMywyNDcwNCwyNDcwNSwyNDcwNiwKKzI0NzA3LDI0NzA4LDI0NzA5 LDI0NzEwLDI0NzExLDI0NzEyLDI0NzEzLDI0NzE0LDI0NzE1LDI0NzE2LDI0NzE3LDI0NzE4LAor MjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3MjIsMjQ3MjMsMjQ3MjQsMjQ3MjUsMjQ3MjYsMjQ3MjcsMjQ3 MjgsMjQ3MjksMjQ3MzAsCisyNDczMSwyNDczMiwyNDczMywyNDczNCwyNDczNSwyNDczNiwyNDcz NywyNDczOCwyNDczOSwyNDc0MCwyNDc0MSwyNDc0MiwKKzI0NzQzLDI0NzQ0LDI0NzQ1LDI0NzQ2 LDI0NzQ3LDI0NzQ4LDI0NzQ5LDI0NzUwLDI0NzUxLDI0NzUyLDI0NzUzLDI0NzU0LAorMjQ3NTUs MjQ3NTYsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjAsMjQ3NjEsMjQ3NjIsMjQ3NjMsMjQ3NjQsMjQ3 NjUsMjQ3NjYsCisyNDc2NywyNDc2OCwyNDc2OSwyNDc3MCwyNDc3MSwyNDc3MiwyNDc3MywyNDc3 NCwyNDc3NSwyNDc3NiwyNDc3NywyNDc3OCwKKzI0Nzc5LDI0NzgwLDI0NzgxLDI0NzgyLDI0Nzgz LDI0Nzg0LDI0Nzg1LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0Nzg5LDI0NzkwLAorMjQ3OTEsMjQ3OTIs MjQ3OTMsMjQ3OTQsMjQ3OTUsMjQ3OTYsMjQ3OTcsMjQ3OTgsMjQ3OTksMjQ4MDAsMjQ4MDEsMjQ4 MDIsCisyNDgwMywyNDgwNCwyNDgwNSwyNDgwNiwyNDgwNywyNDgwOCwyNDgwOSwyNDgxMCwyNDgx MSwyNDgxMiwyNDgxMywyNDgxNCwKKzI0ODE1LDI0ODE2LDI0ODE3LDI0ODE4LDI0ODE5LDI0ODIw LDI0ODIxLDI0ODIyLDI0ODIzLDI0ODI0LDI0ODI1LDI0ODI2LAorMjQ4MjcsMjQ4MjgsMjQ4Mjks MjQ4MzAsMjQ4MzEsMjQ4MzIsMjQ4MzMsMjQ4MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4MzgsCisy NDgzOSwyNDg0MCwyNDg0MSwyNDg0MiwyNDg0MywyNDg0NCwyNDg0NSwyNDg0NiwyNDg0NywyNDg0 OCwyNDg0OSwyNDg1MCwKKzI0ODUxLDI0ODUyLDI0ODUzLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3 LDI0ODU4LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLAorMjQ4NjMsMjQ4NjQsMjQ4NjUsMjQ4NjYs MjQ4NjcsMjQ4NjgsMjQ4NjksMjQ4NzAsMjQ4NzEsMjQ4NzIsMjQ4NzMsMjQ4NzQsCisyNDg3NSwy NDg3NiwyNDg3NywyNDg3OCwyNDg3OSwyNDg4MCwyNDg4MSwyNDg4MiwyNDg4MywyNDg4NCwyNDg4 NSwyNDg4NiwKKzI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0 LDI0ODk1LDI0ODk2LDI0ODk3LDI0ODk4LAorMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMs MjQ5MDQsMjQ5MDUsMjQ5MDYsMjQ5MDcsMjQ5MDgsMjQ5MDksMjQ5MTAsCisyNDkxMSwyNDkxMiwy NDkxMywyNDkxNCwyNDkxNSwyNDkxNiwyNDkxNywyNDkxOCwyNDkxOSwyNDkyMCwyNDkyMSwyNDky MiwKKzI0OTIzLDI0OTI0LDI0OTI1LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMwLDI0OTMx LDI0OTMyLDI0OTMzLDI0OTM0LAorMjQ5MzUsMjQ5MzYsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAs MjQ5NDEsMjQ5NDIsMjQ5NDMsMjQ5NDQsMjQ5NDUsMjQ5NDYsCisyNDk0NywyNDk0OCwyNDk0OSwy NDk1MCwyNDk1MSwyNDk1MiwyNDk1MywyNDk1NCwyNDk1NSwyNDk1NiwyNDk1NywyNDk1OCwKKzI0 OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4 LDI0OTY5LDI0OTcwLAorMjQ5NzEsMjQ5NzIsMjQ5NzMsMjQ5NzQsMjQ5NzUsMjQ5NzYsMjQ5Nzcs MjQ5NzgsMjQ5NzksMjQ5ODAsMjQ5ODEsMjQ5ODIsCisyNDk4MywyNDk4NCwyNDk4NSwyNDk4Niwy NDk4NywyNDk4OCwyNDk4OSwyNDk5MCwyNDk5MSwyNDk5MiwyNDk5MywyNDk5NCwKKzI0OTk1LDI0 OTk2LDI0OTk3LDI0OTk4LDI0OTk5LDI1MDAwLDI1MDAxLDI1MDAyLDI1MDAzLDI1MDA0LDI1MDA1 LDI1MDA2LAorMjUwMDcsMjUwMDgsMjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUwMTMsMjUwMTQs MjUwMTUsMjUwMTYsMjUwMTcsMjUwMTgsCisyNTAxOSwyNTAyMCwyNTAyMSwyNTAyMiwyNTAyMywy NTAyNCwyNTAyNSwyNTAyNiwyNTAyNywyNTAyOCwyNTAyOSwyNTAzMCwKKzI1MDMxLDI1MDMyLDI1 MDMzLDI1MDM0LDI1MDM1LDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQxLDI1MDQy LAorMjUwNDMsMjUwNDQsMjUwNDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDksMjUwNTAsMjUwNTEs MjUwNTIsMjUwNTMsMjUwNTQsCisyNTA1NSwyNTA1NiwyNTA1NywyNTA1OCwyNTA1OSwyNTA2MCwy NTA2MSwyNTA2MiwyNTA2MywyNTA2NCwyNTA2NSwyNTA2NiwKKzI1MDY3LDI1MDY4LDI1MDY5LDI1 MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc3LDI1MDc4LAorMjUw NzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODcsMjUwODgs MjUwODksMjUwOTAsCisyNTA5MSwyNTA5MiwyNTA5MywyNTA5NCwyNTA5NSwyNTA5NiwyNTA5Nywy NTA5OCwyNTA5OSwyNTEwMCwyNTEwMSwyNTEwMiwKKzI1MTAzLDI1MTA0LDI1MTA1LDI1MTA2LDI1 MTA3LDI1MTA4LDI1MTA5LDI1MTEwLDI1MTExLDI1MTEyLDI1MTEzLDI1MTE0LAorMjUxMTUsMjUx MTYsMjUxMTcsMjUxMTgsMjUxMTksMjUxMjAsMjUxMjEsMjUxMjIsMjUxMjMsMjUxMjQsMjUxMjUs MjUxMjYsCisyNTEyNywyNTEyOCwyNTEyOSwyNTEzMCwyNTEzMSwyNTEzMiwyNTEzMywyNTEzNCwy NTEzNSwyNTEzNiwyNTEzNywyNTEzOCwKKzI1MTM5LDI1MTQwLDI1MTQxLDI1MTQyLDI1MTQzLDI1 MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTQ5LDI1MTUwLAorMjUxNTEsMjUxNTIsMjUx NTMsMjUxNTQsMjUxNTUsMjUxNTYsMjUxNTcsMjUxNTgsMjUxNTksMjUxNjAsMjUxNjEsMjUxNjIs CisyNTE2MywyNTE2NCwyNTE2NSwyNTE2NiwyNTE2NywyNTE2OCwyNTE2OSwyNTE3MCwyNTE3MSwy NTE3MiwyNTE3MywyNTE3NCwKKzI1MTc1LDI1MTc2LDI1MTc3LDI1MTc4LDI1MTc5LDI1MTgwLDI1 MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LAorMjUxODcsMjUxODgsMjUxODksMjUx OTAsMjUxOTEsMjUxOTIsMjUxOTMsMjUxOTQsMjUxOTUsMjUxOTYsMjUxOTcsMjUxOTgsCisyNTE5 OSwyNTIwMCwyNTIwMSwyNTIwMiwyNTIwMywyNTIwNCwyNTIwNSwyNTIwNiwyNTIwNywyNTIwOCwy NTIwOSwyNTIxMCwKKzI1MjExLDI1MjEyLDI1MjEzLDI1MjE0LDI1MjE1LDI1MjE2LDI1MjE3LDI1 MjE4LDI1MjE5LDI1MjIwLDI1MjIxLDI1MjIyLAorMjUyMjMsMjUyMjQsMjUyMjUsMjUyMjYsMjUy MjcsMjUyMjgsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyMzMsMjUyMzQsCisyNTIzNSwyNTIz NiwyNTIzNywyNTIzOCwyNTIzOSwyNTI0MCwyNTI0MSwyNTI0MiwyNTI0MywyNTI0NCwyNTI0NSwy NTI0NiwKKzI1MjQ3LDI1MjQ4LDI1MjQ5LDI1MjUwLDI1MjUxLDI1MjUyLDI1MjUzLDI1MjU0LDI1 MjU1LDI1MjU2LDI1MjU3LDI1MjU4LAorMjUyNTksMjUyNjAsMjUyNjEsMjUyNjIsMjUyNjMsMjUy NjQsMjUyNjUsMjUyNjYsMjUyNjcsMjUyNjgsMjUyNjksMjUyNzAsCisyNTI3MSwyNTI3MiwyNTI3 MywyNTI3NCwyNTI3NSwyNTI3NiwyNTI3NywyNTI3OCwyNTI3OSwyNTI4MCwyNTI4MSwyNTI4MiwK KzI1MjgzLDI1Mjg0LDI1Mjg1LDI1Mjg2LDI1Mjg3LDI1Mjg4LDI1Mjg5LDI1MjkwLDI1MjkxLDI1 MjkyLDI1MjkzLDI1Mjk0LAorMjUyOTUsMjUyOTYsMjUyOTcsMjUyOTgsMjUyOTksMjUzMDAsMjUz MDEsMjUzMDIsMjUzMDMsMjUzMDQsMjUzMDUsMjUzMDYsCisyNTMwNywyNTMwOCwyNTMwOSwyNTMx MCwyNTMxMSwyNTMxMiwyNTMxMywyNTMxNCwyNTMxNSwyNTMxNiwyNTMxNywyNTMxOCwKKzI1MzE5 LDI1MzIwLDI1MzIxLDI1MzIyLDI1MzIzLDI1MzI0LDI1MzI1LDI1MzI2LDI1MzI3LDI1MzI4LDI1 MzI5LDI1MzMwLAorMjUzMzEsMjUzMzIsMjUzMzMsMjUzMzQsMjUzMzUsMjUzMzYsMjUzMzcsMjUz MzgsMjUzMzksMjUzNDAsMjUzNDEsMjUzNDIsCisyNTM0MywyNTM0NCwyNTM0NSwyNTM0NiwyNTM0 NywyNTM0OCwyNTM0OSwyNTM1MCwyNTM1MSwyNTM1MiwyNTM1MywyNTM1NCwKKzI1MzU1LDI1MzU2 LDI1MzU3LDI1MzU4LDI1MzU5LDI1MzYwLDI1MzYxLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1 MzY2LAorMjUzNjcsMjUzNjgsMjUzNjksMjUzNzAsMjUzNzEsMjUzNzIsMjUzNzMsMjUzNzQsMjUz NzUsMjUzNzYsMjUzNzcsMjUzNzgsCisyNTM3OSwyNTM4MCwyNTM4MSwyNTM4MiwyNTM4MywyNTM4 NCwyNTM4NSwyNTM4NiwyNTM4NywyNTM4OCwyNTM4OSwyNTM5MCwKKzI1MzkxLDI1MzkyLDI1Mzkz LDI1Mzk0LDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAxLDI1NDAyLAor MjU0MDMsMjU0MDQsMjU0MDUsMjU0MDYsMjU0MDcsMjU0MDgsMjU0MDksMjU0MTAsMjU0MTEsMjU0 MTIsMjU0MTMsMjU0MTQsCisyNTQxNSwyNTQxNiwyNTQxNywyNTQxOCwyNTQxOSwyNTQyMCwyNTQy MSwyNTQyMiwyNTQyMywyNTQyNCwyNTQyNSwyNTQyNiwKKzI1NDI3LDI1NDI4LDI1NDI5LDI1NDMw LDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDM4LAorMjU0Mzks MjU0NDAsMjU0NDEsMjU0NDIsMjU0NDMsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDcsMjU0NDgsMjU0 NDksMjU0NTAsCisyNTQ1MSwyNTQ1MiwyNTQ1MywyNTQ1NCwyNTQ1NSwyNTQ1NiwyNTQ1NywyNTQ1 OCwyNTQ1OSwyNTQ2MCwyNTQ2MSwyNTQ2MiwKKzI1NDYzLDI1NDY0LDI1NDY1LDI1NDY2LDI1NDY3 LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDcyLDI1NDczLDI1NDc0LAorMjU0NzUsMjU0NzYs MjU0NzcsMjU0NzgsMjU0NzksMjU0ODAsMjU0ODEsMjU0ODIsMjU0ODMsMjU0ODQsMjU0ODUsMjU0 ODYsCisyNTQ4NywyNTQ4OCwyNTQ4OSwyNTQ5MCwyNTQ5MSwyNTQ5MiwyNTQ5MywyNTQ5NCwyNTQ5 NSwyNTQ5NiwyNTQ5NywyNTQ5OCwKKzI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA0 LDI1NTA1LDI1NTA2LDI1NTA3LDI1NTA4LDI1NTA5LDI1NTEwLAorMjU1MTEsMjU1MTIsMjU1MTMs MjU1MTQsMjU1MTUsMjU1MTYsMjU1MTcsMjU1MTgsMjU1MTksMjU1MjAsMjU1MjEsMjU1MjIsCisy NTUyMywyNTUyNCwyNTUyNSwyNTUyNiwyNTUyNywyNTUyOCwyNTUyOSwyNTUzMCwyNTUzMSwyNTUz MiwyNTUzMywyNTUzNCwKKzI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQwLDI1NTQx LDI1NTQyLDI1NTQzLDI1NTQ0LDI1NTQ1LDI1NTQ2LAorMjU1NDcsMjU1NDgsMjU1NDksMjU1NTAs MjU1NTEsMjU1NTIsMjU1NTMsMjU1NTQsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NTgsCisyNTU1OSwy NTU2MCwyNTU2MSwyNTU2MiwyNTU2MywyNTU2NCwyNTU2NSwyNTU2NiwyNTU2NywyNTU2OCwyNTU2 OSwyNTU3MCwKKzI1NTcxLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc3LDI1NTc4 LDI1NTc5LDI1NTgwLDI1NTgxLDI1NTgyLAorMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODYsMjU1ODcs MjU1ODgsMjU1ODksMjU1OTAsMjU1OTEsMjU1OTIsMjU1OTMsMjU1OTQsCisyNTU5NSwyNTU5Niwy NTU5NywyNTU5OCwyNTU5OSwyNTYwMCwyNTYwMSwyNTYwMiwyNTYwMywyNTYwNCwyNTYwNSwyNTYw NiwKKzI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjExLDI1NjEyLDI1NjEzLDI1NjE0LDI1NjE1 LDI1NjE2LDI1NjE3LDI1NjE4LAorMjU2MTksMjU2MjAsMjU2MjEsMjU2MjIsMjU2MjMsMjU2MjQs MjU2MjUsMjU2MjYsMjU2MjcsMjU2MjgsMjU2MjksMjU2MzAsCisyNTYzMSwyNTYzMiwyNTYzMywy NTYzNCwyNTYzNSwyNTYzNiwyNTYzNywyNTYzOCwyNTYzOSwyNTY0MCwyNTY0MSwyNTY0MiwKKzI1 NjQzLDI1NjQ0LDI1NjQ1LDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUy LDI1NjUzLDI1NjU0LAorMjU2NTUsMjU2NTYsMjU2NTcsMjU2NTgsMjU2NTksMjU2NjAsMjU2NjEs MjU2NjIsMjU2NjMsMjU2NjQsMjU2NjUsMjU2NjYsCisyNTY2NywyNTY2OCwyNTY2OSwyNTY3MCwy NTY3MSwyNTY3MiwyNTY3MywyNTY3NCwyNTY3NSwyNTY3NiwyNTY3NywyNTY3OCwKKzI1Njc5LDI1 NjgwLDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg4LDI1Njg5 LDI1NjkwLAorMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTQsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTgs MjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsCisyNTcwMywyNTcwNCwyNTcwNSwyNTcwNiwyNTcwNywy NTcwOCwyNTcwOSwyNTcxMCwyNTcxMSwyNTcxMiwyNTcxMywyNTcxNCwKKzI1NzE1LDI1NzE2LDI1 NzE3LDI1NzE4LDI1NzE5LDI1NzIwLDI1NzIxLDI1NzIyLDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2 LAorMjU3MjcsMjU3MjgsMjU3MjksMjU3MzAsMjU3MzEsMjU3MzIsMjU3MzMsMjU3MzQsMjU3MzUs MjU3MzYsMjU3MzcsMjU3MzgsCisyNTczOSwyNTc0MCwyNTc0MSwyNTc0MiwyNTc0MywyNTc0NCwy NTc0NSwyNTc0NiwyNTc0NywyNTc0OCwyNTc0OSwyNTc1MCwKKzI1NzUxLDI1NzUyLDI1NzUzLDI1 NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU4LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLAorMjU3 NjMsMjU3NjQsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NjksMjU3NzAsMjU3NzEsMjU3NzIs MjU3NzMsMjU3NzQsCisyNTc3NSwyNTc3NiwyNTc3NywyNTc3OCwyNTc3OSwyNTc4MCwyNTc4MSwy NTc4MiwyNTc4MywyNTc4NCwyNTc4NSwyNTc4NiwKKzI1Nzg3LDI1Nzg4LDI1Nzg5LDI1NzkwLDI1 NzkxLDI1NzkyLDI1NzkzLDI1Nzk0LDI1Nzk1LDI1Nzk2LDI1Nzk3LDI1Nzk4LAorMjU3OTksMjU4 MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDUsMjU4MDYsMjU4MDcsMjU4MDgsMjU4MDks MjU4MTAsCisyNTgxMSwyNTgxMiwyNTgxMywyNTgxNCwyNTgxNSwyNTgxNiwyNTgxNywyNTgxOCwy NTgxOSwyNTgyMCwyNTgyMSwyNTgyMiwKKzI1ODIzLDI1ODI0LDI1ODI1LDI1ODI2LDI1ODI3LDI1 ODI4LDI1ODI5LDI1ODMwLDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LAorMjU4MzUsMjU4MzYsMjU4 MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYs CisyNTg0NywyNTg0OCwyNTg0OSwyNTg1MCwyNTg1MSwyNTg1MiwyNTg1MywyNTg1NCwyNTg1NSwy NTg1NiwyNTg1NywyNTg1OCwKKzI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1 ODY1LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLAorMjU4NzEsMjU4NzIsMjU4NzMsMjU4 NzQsMjU4NzUsMjU4NzYsMjU4NzcsMjU4NzgsMjU4NzksMjU4ODAsMjU4ODEsMjU4ODIsCisyNTg4 MywyNTg4NCwyNTg4NSwyNTg4NiwyNTg4NywyNTg4OCwyNTg4OSwyNTg5MCwyNTg5MSwyNTg5Miwy NTg5MywyNTg5NCwKKzI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1ODk5LDI1OTAwLDI1OTAxLDI1 OTAyLDI1OTAzLDI1OTA0LDI1OTA1LDI1OTA2LAorMjU5MDcsMjU5MDgsMjU5MDksMjU5MTAsMjU5 MTEsMjU5MTIsMjU5MTMsMjU5MTQsMjU5MTUsMjU5MTYsMjU5MTcsMjU5MTgsCisyNTkxOSwyNTky MCwyNTkyMSwyNTkyMiwyNTkyMywyNTkyNCwyNTkyNSwyNTkyNiwyNTkyNywyNTkyOCwyNTkyOSwy NTkzMCwKKzI1OTMxLDI1OTMyLDI1OTMzLDI1OTM0LDI1OTM1LDI1OTM2LDI1OTM3LDI1OTM4LDI1 OTM5LDI1OTQwLDI1OTQxLDI1OTQyLAorMjU5NDMsMjU5NDQsMjU5NDUsMjU5NDYsMjU5NDcsMjU5 NDgsMjU5NDksMjU5NTAsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTQsCisyNTk1NSwyNTk1NiwyNTk1 NywyNTk1OCwyNTk1OSwyNTk2MCwyNTk2MSwyNTk2MiwyNTk2MywyNTk2NCwyNTk2NSwyNTk2NiwK KzI1OTY3LDI1OTY4LDI1OTY5LDI1OTcwLDI1OTcxLDI1OTcyLDI1OTczLDI1OTc0LDI1OTc1LDI1 OTc2LDI1OTc3LDI1OTc4LAorMjU5NzksMjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5ODQsMjU5 ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsCisyNTk5MSwyNTk5MiwyNTk5MywyNTk5 NCwyNTk5NSwyNTk5NiwyNTk5NywyNTk5OCwyNTk5OSwyNjAwMCwyNjAwMSwyNjAwMiwKKzI2MDAz LDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA3LDI2MDA4LDI2MDA5LDI2MDEwLDI2MDExLDI2MDEyLDI2 MDEzLDI2MDE0LAorMjYwMTUsMjYwMTYsMjYwMTcsMjYwMTgsMjYwMTksMjYwMjAsMjYwMjEsMjYw MjIsMjYwMjMsMjYwMjQsMjYwMjUsMjYwMjYsCisyNjAyNywyNjAyOCwyNjAyOSwyNjAzMCwyNjAz MSwyNjAzMiwyNjAzMywyNjAzNCwyNjAzNSwyNjAzNiwyNjAzNywyNjAzOCwKKzI2MDM5LDI2MDQw LDI2MDQxLDI2MDQyLDI2MDQzLDI2MDQ0LDI2MDQ1LDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDQ5LDI2 MDUwLAorMjYwNTEsMjYwNTIsMjYwNTMsMjYwNTQsMjYwNTUsMjYwNTYsMjYwNTcsMjYwNTgsMjYw NTksMjYwNjAsMjYwNjEsMjYwNjIsCisyNjA2MywyNjA2NCwyNjA2NSwyNjA2NiwyNjA2NywyNjA2 OCwyNjA2OSwyNjA3MCwyNjA3MSwyNjA3MiwyNjA3MywyNjA3NCwKKzI2MDc1LDI2MDc2LDI2MDc3 LDI2MDc4LDI2MDc5LDI2MDgwLDI2MDgxLDI2MDgyLDI2MDgzLDI2MDg0LDI2MDg1LDI2MDg2LAor MjYwODcsMjYwODgsMjYwODksMjYwOTAsMjYwOTEsMjYwOTIsMjYwOTMsMjYwOTQsMjYwOTUsMjYw OTYsMjYwOTcsMjYwOTgsCisyNjA5OSwyNjEwMCwyNjEwMSwyNjEwMiwyNjEwMywyNjEwNCwyNjEw NSwyNjEwNiwyNjEwNywyNjEwOCwyNjEwOSwyNjExMCwKKzI2MTExLDI2MTEyLDI2MTEzLDI2MTE0 LDI2MTE1LDI2MTE2LDI2MTE3LDI2MTE4LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIyLAorMjYxMjMs MjYxMjQsMjYxMjUsMjYxMjYsMjYxMjcsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzEsMjYxMzIsMjYx MzMsMjYxMzQsCisyNjEzNSwyNjEzNiwyNjEzNywyNjEzOCwyNjEzOSwyNjE0MCwyNjE0MSwyNjE0 MiwyNjE0MywyNjE0NCwyNjE0NSwyNjE0NiwKKzI2MTQ3LDI2MTQ4LDI2MTQ5LDI2MTUwLDI2MTUx LDI2MTUyLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU3LDI2MTU4LAorMjYxNTksMjYxNjAs MjYxNjEsMjYxNjIsMjYxNjMsMjYxNjQsMjYxNjUsMjYxNjYsMjYxNjcsMjYxNjgsMjYxNjksMjYx NzAsCisyNjE3MSwyNjE3MiwyNjE3MywyNjE3NCwyNjE3NSwyNjE3NiwyNjE3NywyNjE3OCwyNjE3 OSwyNjE4MCwyNjE4MSwyNjE4MiwKKzI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg3LDI2MTg4 LDI2MTg5LDI2MTkwLDI2MTkxLDI2MTkyLDI2MTkzLDI2MTk0LAorMjYxOTUsMjYxOTYsMjYxOTcs MjYxOTgsMjYxOTksMjYyMDAsMjYyMDEsMjYyMDIsMjYyMDMsMjYyMDQsMjYyMDUsMjYyMDYsCisy NjIwNywyNjIwOCwyNjIwOSwyNjIxMCwyNjIxMSwyNjIxMiwyNjIxMywyNjIxNCwyNjIxNSwyNjIx NiwyNjIxNywyNjIxOCwKKzI2MjE5LDI2MjIwLDI2MjIxLDI2MjIyLDI2MjIzLDI2MjI0LDI2MjI1 LDI2MjI2LDI2MjI3LDI2MjI4LDI2MjI5LDI2MjMwLAorMjYyMzEsMjYyMzIsMjYyMzMsMjYyMzQs MjYyMzUsMjYyMzYsMjYyMzcsMjYyMzgsMjYyMzksMjYyNDAsMjYyNDEsMjYyNDIsCisyNjI0Mywy NjI0NCwyNjI0NSwyNjI0NiwyNjI0NywyNjI0OCwyNjI0OSwyNjI1MCwyNjI1MSwyNjI1MiwyNjI1 MywyNjI1NCwKKzI2MjU1LDI2MjU2LDI2MjU3LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjYy LDI2MjYzLDI2MjY0LDI2MjY1LDI2MjY2LAorMjYyNjcsMjYyNjgsMjYyNjksMjYyNzAsMjYyNzEs MjYyNzIsMjYyNzMsMjYyNzQsMjYyNzUsMjYyNzYsMjYyNzcsMjYyNzgsCisyNjI3OSwyNjI4MCwy NjI4MSwyNjI4MiwyNjI4MywyNjI4NCwyNjI4NSwyNjI4NiwyNjI4NywyNjI4OCwyNjI4OSwyNjI5 MCwKKzI2MjkxLDI2MjkyLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk3LDI2Mjk4LDI2Mjk5 LDI2MzAwLDI2MzAxLDI2MzAyLAorMjYzMDMsMjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgs MjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsCisyNjMxNSwyNjMxNiwyNjMxNywy NjMxOCwyNjMxOSwyNjMyMCwyNjMyMSwyNjMyMiwyNjMyMywyNjMyNCwyNjMyNSwyNjMyNiwKKzI2 MzI3LDI2MzI4LDI2MzI5LDI2MzMwLDI2MzMxLDI2MzMyLDI2MzMzLDI2MzM0LDI2MzM1LDI2MzM2 LDI2MzM3LDI2MzM4LAorMjYzMzksMjYzNDAsMjYzNDEsMjYzNDIsMjYzNDMsMjYzNDQsMjYzNDUs MjYzNDYsMjYzNDcsMjYzNDgsMjYzNDksMjYzNTAsCisyNjM1MSwyNjM1MiwyNjM1MywyNjM1NCwy NjM1NSwyNjM1NiwyNjM1NywyNjM1OCwyNjM1OSwyNjM2MCwyNjM2MSwyNjM2MiwKKzI2MzYzLDI2 MzY0LDI2MzY1LDI2MzY2LDI2MzY3LDI2MzY4LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2Mzcz LDI2Mzc0LAorMjYzNzUsMjYzNzYsMjYzNzcsMjYzNzgsMjYzNzksMjYzODAsMjYzODEsMjYzODIs MjYzODMsMjYzODQsMjYzODUsMjYzODYsCisyNjM4NywyNjM4OCwyNjM4OSwyNjM5MCwyNjM5MSwy NjM5MiwyNjM5MywyNjM5NCwyNjM5NSwyNjM5NiwyNjM5NywyNjM5OCwKKzI2Mzk5LDI2NDAwLDI2 NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA2LDI2NDA3LDI2NDA4LDI2NDA5LDI2NDEw LAorMjY0MTEsMjY0MTIsMjY0MTMsMjY0MTQsMjY0MTUsMjY0MTYsMjY0MTcsMjY0MTgsMjY0MTks MjY0MjAsMjY0MjEsMjY0MjIsCisyNjQyMywyNjQyNCwyNjQyNSwyNjQyNiwyNjQyNywyNjQyOCwy NjQyOSwyNjQzMCwyNjQzMSwyNjQzMiwyNjQzMywyNjQzNCwKKzI2NDM1LDI2NDM2LDI2NDM3LDI2 NDM4LDI2NDM5LDI2NDQwLDI2NDQxLDI2NDQyLDI2NDQzLDI2NDQ0LDI2NDQ1LDI2NDQ2LAorMjY0 NDcsMjY0NDgsMjY0NDksMjY0NTAsMjY0NTEsMjY0NTIsMjY0NTMsMjY0NTQsMjY0NTUsMjY0NTYs MjY0NTcsMjY0NTgsCisyNjQ1OSwyNjQ2MCwyNjQ2MSwyNjQ2MiwyNjQ2MywyNjQ2NCwyNjQ2NSwy NjQ2NiwyNjQ2NywyNjQ2OCwyNjQ2OSwyNjQ3MCwKKzI2NDcxLDI2NDcyLDI2NDczLDI2NDc0LDI2 NDc1LDI2NDc2LDI2NDc3LDI2NDc4LDI2NDc5LDI2NDgwLDI2NDgxLDI2NDgyLAorMjY0ODMsMjY0 ODQsMjY0ODUsMjY0ODYsMjY0ODcsMjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTIsMjY0OTMs MjY0OTQsCisyNjQ5NSwyNjQ5NiwyNjQ5NywyNjQ5OCwyNjQ5OSwyNjUwMCwyNjUwMSwyNjUwMiwy NjUwMywyNjUwNCwyNjUwNSwyNjUwNiwKKzI2NTA3LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2 NTEyLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE3LDI2NTE4LAorMjY1MTksMjY1MjAsMjY1 MjEsMjY1MjIsMjY1MjMsMjY1MjQsMjY1MjUsMjY1MjYsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzAs CisyNjUzMSwyNjUzMiwyNjUzMywyNjUzNCwyNjUzNSwyNjUzNiwyNjUzNywyNjUzOCwyNjUzOSwy NjU0MCwyNjU0MSwyNjU0MiwKKzI2NTQzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ3LDI2NTQ4LDI2 NTQ5LDI2NTUwLDI2NTUxLDI2NTUyLDI2NTUzLDI2NTU0LAorMjY1NTUsMjY1NTYsMjY1NTcsMjY1 NTgsMjY1NTksMjY1NjAsMjY1NjEsMjY1NjIsMjY1NjMsMjY1NjQsMjY1NjUsMjY1NjYsCisyNjU2 NywyNjU2OCwyNjU2OSwyNjU3MCwyNjU3MSwyNjU3MiwyNjU3MywyNjU3NCwyNjU3NSwyNjU3Niwy NjU3NywyNjU3OCwKKzI2NTc5LDI2NTgwLDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg0LDI2NTg1LDI2 NTg2LDI2NTg3LDI2NTg4LDI2NTg5LDI2NTkwLAorMjY1OTEsMjY1OTIsMjY1OTMsMjY1OTQsMjY1 OTUsMjY1OTYsMjY1OTcsMjY1OTgsMjY1OTksMjY2MDAsMjY2MDEsMjY2MDIsCisyNjYwMywyNjYw NCwyNjYwNSwyNjYwNiwyNjYwNywyNjYwOCwyNjYwOSwyNjYxMCwyNjYxMSwyNjYxMiwyNjYxMywy NjYxNCwKKzI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIxLDI2NjIyLDI2 NjIzLDI2NjI0LDI2NjI1LDI2NjI2LAorMjY2MjcsMjY2MjgsMjY2MjksMjY2MzAsMjY2MzEsMjY2 MzIsMjY2MzMsMjY2MzQsMjY2MzUsMjY2MzYsMjY2MzcsMjY2MzgsCisyNjYzOSwyNjY0MCwyNjY0 MSwyNjY0MiwyNjY0MywyNjY0NCwyNjY0NSwyNjY0NiwyNjY0NywyNjY0OCwyNjY0OSwyNjY1MCwK KzI2NjUxLDI2NjUyLDI2NjUzLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU3LDI2NjU4LDI2NjU5LDI2 NjYwLDI2NjYxLDI2NjYyLAorMjY2NjMsMjY2NjQsMjY2NjUsMjY2NjYsMjY2NjcsMjY2NjgsMjY2 NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzQsCisyNjY3NSwyNjY3NiwyNjY3NywyNjY3 OCwyNjY3OSwyNjY4MCwyNjY4MSwyNjY4MiwyNjY4MywyNjY4NCwyNjY4NSwyNjY4NiwKKzI2Njg3 LDI2Njg4LDI2Njg5LDI2NjkwLDI2NjkxLDI2NjkyLDI2NjkzLDI2Njk0LDI2Njk1LDI2Njk2LDI2 Njk3LDI2Njk4LAorMjY2OTksMjY3MDAsMjY3MDEsMjY3MDIsMjY3MDMsMjY3MDQsMjY3MDUsMjY3 MDYsMjY3MDcsMjY3MDgsMjY3MDksMjY3MTAsCisyNjcxMSwyNjcxMiwyNjcxMywyNjcxNCwyNjcx NSwyNjcxNiwyNjcxNywyNjcxOCwyNjcxOSwyNjcyMCwyNjcyMSwyNjcyMiwKKzI2NzIzLDI2NzI0 LDI2NzI1LDI2NzI2LDI2NzI3LDI2NzI4LDI2NzI5LDI2NzMwLDI2NzMxLDI2NzMyLDI2NzMzLDI2 NzM0LAorMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3MzksMjY3NDAsMjY3NDEsMjY3NDIsMjY3 NDMsMjY3NDQsMjY3NDUsMjY3NDYsCisyNjc0NywyNjc0OCwyNjc0OSwyNjc1MCwyNjc1MSwyNjc1 MiwyNjc1MywyNjc1NCwyNjc1NSwyNjc1NiwyNjc1NywyNjc1OCwKKzI2NzU5LDI2NzYwLDI2NzYx LDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY3LDI2NzY4LDI2NzY5LDI2NzcwLAor MjY3NzEsMjY3NzIsMjY3NzMsMjY3NzQsMjY3NzUsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3 ODAsMjY3ODEsMjY3ODIsCisyNjc4MywyNjc4NCwyNjc4NSwyNjc4NiwyNjc4NywyNjc4OCwyNjc4 OSwyNjc5MCwyNjc5MSwyNjc5MiwyNjc5MywyNjc5NCwKKzI2Nzk1LDI2Nzk2LDI2Nzk3LDI2Nzk4 LDI2Nzk5LDI2ODAwLDI2ODAxLDI2ODAyLDI2ODAzLDI2ODA0LDI2ODA1LDI2ODA2LAorMjY4MDcs MjY4MDgsMjY4MDksMjY4MTAsMjY4MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTYsMjY4 MTcsMjY4MTgsCisyNjgxOSwyNjgyMCwyNjgyMSwyNjgyMiwyNjgyMywyNjgyNCwyNjgyNSwyNjgy NiwyNjgyNywyNjgyOCwyNjgyOSwyNjgzMCwKKzI2ODMxLDI2ODMyLDI2ODMzLDI2ODM0LDI2ODM1 LDI2ODM2LDI2ODM3LDI2ODM4LDI2ODM5LDI2ODQwLDI2ODQxLDI2ODQyLAorMjY4NDMsMjY4NDQs MjY4NDUsMjY4NDYsMjY4NDcsMjY4NDgsMjY4NDksMjY4NTAsMjY4NTEsMjY4NTIsMjY4NTMsMjY4 NTQsCisyNjg1NSwyNjg1NiwyNjg1NywyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2MiwyNjg2 MywyNjg2NCwyNjg2NSwyNjg2NiwKKzI2ODY3LDI2ODY4LDI2ODY5LDI2ODcwLDI2ODcxLDI2ODcy LDI2ODczLDI2ODc0LDI2ODc1LDI2ODc2LDI2ODc3LDI2ODc4LAorMjY4NzksMjY4ODAsMjY4ODEs MjY4ODIsMjY4ODMsMjY4ODQsMjY4ODUsMjY4ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsCisy Njg5MSwyNjg5MiwyNjg5MywyNjg5NCwyNjg5NSwyNjg5NiwyNjg5NywyNjg5OCwyNjg5OSwyNjkw MCwyNjkwMSwyNjkwMiwKKzI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5 LDI2OTEwLDI2OTExLDI2OTEyLDI2OTEzLDI2OTE0LAorMjY5MTUsMjY5MTYsMjY5MTcsMjY5MTgs MjY5MTksMjY5MjAsMjY5MjEsMjY5MjIsMjY5MjMsMjY5MjQsMjY5MjUsMjY5MjYsCisyNjkyNywy NjkyOCwyNjkyOSwyNjkzMCwyNjkzMSwyNjkzMiwyNjkzMywyNjkzNCwyNjkzNSwyNjkzNiwyNjkz NywyNjkzOCwKKzI2OTM5LDI2OTQwLDI2OTQxLDI2OTQyLDI2OTQzLDI2OTQ0LDI2OTQ1LDI2OTQ2 LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLAorMjY5NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUs MjY5NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsCisyNjk2MywyNjk2NCwy Njk2NSwyNjk2NiwyNjk2NywyNjk2OCwyNjk2OSwyNjk3MCwyNjk3MSwyNjk3MiwyNjk3MywyNjk3 NCwKKzI2OTc1LDI2OTc2LDI2OTc3LDI2OTc4LDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTgz LDI2OTg0LDI2OTg1LDI2OTg2LAorMjY5ODcsMjY5ODgsMjY5ODksMjY5OTAsMjY5OTEsMjY5OTIs MjY5OTMsMjY5OTQsMjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsCisyNjk5OSwyNzAwMCwyNzAwMSwy NzAwMiwyNzAwMywyNzAwNCwyNzAwNSwyNzAwNiwyNzAwNywyNzAwOCwyNzAwOSwyNzAxMCwKKzI3 MDExLDI3MDEyLDI3MDEzLDI3MDE0LDI3MDE1LDI3MDE2LDI3MDE3LDI3MDE4LDI3MDE5LDI3MDIw LDI3MDIxLDI3MDIyLAorMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMjgsMjcwMjks MjcwMzAsMjcwMzEsMjcwMzIsMjcwMzMsMjcwMzQsCisyNzAzNSwyNzAzNiwyNzAzNywyNzAzOCwy NzAzOSwyNzA0MCwyNzA0MSwyNzA0MiwyNzA0MywyNzA0NCwyNzA0NSwyNzA0NiwKKzI3MDQ3LDI3 MDQ4LDI3MDQ5LDI3MDUwLDI3MDUxLDI3MDUyLDI3MDUzLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU3 LDI3MDU4LAorMjcwNTksMjcwNjAsMjcwNjEsMjcwNjIsMjcwNjMsMjcwNjQsMjcwNjUsMjcwNjYs MjcwNjcsMjcwNjgsMjcwNjksMjcwNzAsCisyNzA3MSwyNzA3MiwyNzA3MywyNzA3NCwyNzA3NSwy NzA3NiwyNzA3NywyNzA3OCwyNzA3OSwyNzA4MCwyNzA4MSwyNzA4MiwKKzI3MDgzLDI3MDg0LDI3 MDg1LDI3MDg2LDI3MDg3LDI3MDg4LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkyLDI3MDkzLDI3MDk0 LAorMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcwOTksMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDMs MjcxMDQsMjcxMDUsMjcxMDYsCisyNzEwNywyNzEwOCwyNzEwOSwyNzExMCwyNzExMSwyNzExMiwy NzExMywyNzExNCwyNzExNSwyNzExNiwyNzExNywyNzExOCwKKzI3MTE5LDI3MTIwLDI3MTIxLDI3 MTIyLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLAorMjcx MzEsMjcxMzIsMjcxMzMsMjcxMzQsMjcxMzUsMjcxMzYsMjcxMzcsMjcxMzgsMjcxMzksMjcxNDAs MjcxNDEsMjcxNDIsCisyNzE0MywyNzE0NCwyNzE0NSwyNzE0NiwyNzE0NywyNzE0OCwyNzE0OSwy NzE1MCwyNzE1MSwyNzE1MiwyNzE1MywyNzE1NCwKKzI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3 MTU5LDI3MTYwLDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LAorMjcxNjcsMjcx NjgsMjcxNjksMjcxNzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcxNzUsMjcxNzYsMjcxNzcs MjcxNzgsCisyNzE3OSwyNzE4MCwyNzE4MSwyNzE4MiwyNzE4MywyNzE4NCwyNzE4NSwyNzE4Niwy NzE4NywyNzE4OCwyNzE4OSwyNzE5MCwKKzI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3 MTk2LDI3MTk3LDI3MTk4LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLAorMjcyMDMsMjcyMDQsMjcy MDUsMjcyMDYsMjcyMDcsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEsMjcyMTIsMjcyMTMsMjcyMTQs CisyNzIxNSwyNzIxNiwyNzIxNywyNzIxOCwyNzIxOSwyNzIyMCwyNzIyMSwyNzIyMiwyNzIyMywy NzIyNCwyNzIyNSwyNzIyNiwKKzI3MjI3LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3 MjMzLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM3LDI3MjM4LAorMjcyMzksMjcyNDAsMjcyNDEsMjcy NDIsMjcyNDMsMjcyNDQsMjcyNDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNDksMjcyNTAsCisyNzI1 MSwyNzI1MiwyNzI1MywyNzI1NCwyNzI1NSwyNzI1NiwyNzI1NywyNzI1OCwyNzI1OSwyNzI2MCwy NzI2MSwyNzI2MiwKKzI3MjYzLDI3MjY0LDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY4LDI3MjY5LDI3 MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LAorMjcyNzUsMjcyNzYsMjcyNzcsMjcyNzgsMjcy NzksMjcyODAsMjcyODEsMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsCisyNzI4NywyNzI4 OCwyNzI4OSwyNzI5MCwyNzI5MSwyNzI5MiwyNzI5MywyNzI5NCwyNzI5NSwyNzI5NiwyNzI5Nywy NzI5OCwKKzI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA1LDI3MzA2LDI3 MzA3LDI3MzA4LDI3MzA5LDI3MzEwLAorMjczMTEsMjczMTIsMjczMTMsMjczMTQsMjczMTUsMjcz MTYsMjczMTcsMjczMTgsMjczMTksMjczMjAsMjczMjEsMjczMjIsCisyNzMyMywyNzMyNCwyNzMy NSwyNzMyNiwyNzMyNywyNzMyOCwyNzMyOSwyNzMzMCwyNzMzMSwyNzMzMiwyNzMzMywyNzMzNCwK KzI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3 MzQ0LDI3MzQ1LDI3MzQ2LAorMjczNDcsMjczNDgsMjczNDksMjczNTAsMjczNTEsMjczNTIsMjcz NTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsCisyNzM1OSwyNzM2MCwyNzM2MSwyNzM2 MiwyNzM2MywyNzM2NCwyNzM2NSwyNzM2NiwyNzM2NywyNzM2OCwyNzM2OSwyNzM3MCwKKzI3Mzcx LDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3 MzgxLDI3MzgyLAorMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjcz OTAsMjczOTEsMjczOTIsMjczOTMsMjczOTQsCisyNzM5NSwyNzM5NiwyNzM5NywyNzM5OCwyNzM5 OSwyNzQwMCwyNzQwMSwyNzQwMiwyNzQwMywyNzQwNCwyNzQwNSwyNzQwNiwKKzI3NDA3LDI3NDA4 LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3 NDE4LAorMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0MjMsMjc0MjQsMjc0MjUsMjc0MjYsMjc0 MjcsMjc0MjgsMjc0MjksMjc0MzAsCisyNzQzMSwyNzQzMiwyNzQzMywyNzQzNCwyNzQzNSwyNzQz NiwyNzQzNywyNzQzOCwyNzQzOSwyNzQ0MCwyNzQ0MSwyNzQ0MiwKKzI3NDQzLDI3NDQ0LDI3NDQ1 LDI3NDQ2LDI3NDQ3LDI3NDQ4LDI3NDQ5LDI3NDUwLDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU0LAor Mjc0NTUsMjc0NTYsMjc0NTcsMjc0NTgsMjc0NTksMjc0NjAsMjc0NjEsMjc0NjIsMjc0NjMsMjc0 NjQsMjc0NjUsMjc0NjYsCisyNzQ2NywyNzQ2OCwyNzQ2OSwyNzQ3MCwyNzQ3MSwyNzQ3MiwyNzQ3 MywyNzQ3NCwyNzQ3NSwyNzQ3NiwyNzQ3NywyNzQ3OCwKKzI3NDc5LDI3NDgwLDI3NDgxLDI3NDgy LDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDkwLAorMjc0OTEs Mjc0OTIsMjc0OTMsMjc0OTQsMjc0OTUsMjc0OTYsMjc0OTcsMjc0OTgsMjc0OTksMjc1MDAsMjc1 MDEsMjc1MDIsCisyNzUwMywyNzUwNCwyNzUwNSwyNzUwNiwyNzUwNywyNzUwOCwyNzUwOSwyNzUx MCwyNzUxMSwyNzUxMiwyNzUxMywyNzUxNCwKKzI3NTE1LDI3NTE2LDI3NTE3LDI3NTE4LDI3NTE5 LDI3NTIwLDI3NTIxLDI3NTIyLDI3NTIzLDI3NTI0LDI3NTI1LDI3NTI2LAorMjc1MjcsMjc1Mjgs Mjc1MjksMjc1MzAsMjc1MzEsMjc1MzIsMjc1MzMsMjc1MzQsMjc1MzUsMjc1MzYsMjc1MzcsMjc1 MzgsCisyNzUzOSwyNzU0MCwyNzU0MSwyNzU0MiwyNzU0MywyNzU0NCwyNzU0NSwyNzU0NiwyNzU0 NywyNzU0OCwyNzU0OSwyNzU1MCwKKzI3NTUxLDI3NTUyLDI3NTUzLDI3NTU0LDI3NTU1LDI3NTU2 LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYyLAorMjc1NjMsMjc1NjQsMjc1NjUs Mjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzEsMjc1NzIsMjc1NzMsMjc1NzQsCisy NzU3NSwyNzU3NiwyNzU3NywyNzU3OCwyNzU3OSwyNzU4MCwyNzU4MSwyNzU4MiwyNzU4MywyNzU4 NCwyNzU4NSwyNzU4NiwKKzI3NTg3LDI3NTg4LDI3NTg5LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkz LDI3NTk0LDI3NTk1LDI3NTk2LDI3NTk3LDI3NTk4LAorMjc1OTksMjc2MDAsMjc2MDEsMjc2MDIs Mjc2MDMsMjc2MDQsMjc2MDUsMjc2MDYsMjc2MDcsMjc2MDgsMjc2MDksMjc2MTAsCisyNzYxMSwy NzYxMiwyNzYxMywyNzYxNCwyNzYxNSwyNzYxNiwyNzYxNywyNzYxOCwyNzYxOSwyNzYyMCwyNzYy MSwyNzYyMiwKKzI3NjIzLDI3NjI0LDI3NjI1LDI3NjI2LDI3NjI3LDI3NjI4LDI3NjI5LDI3NjMw LDI3NjMxLDI3NjMyLDI3NjMzLDI3NjM0LAorMjc2MzUsMjc2MzYsMjc2MzcsMjc2MzgsMjc2Mzks Mjc2NDAsMjc2NDEsMjc2NDIsMjc2NDMsMjc2NDQsMjc2NDUsMjc2NDYsCisyNzY0NywyNzY0OCwy NzY0OSwyNzY1MCwyNzY1MSwyNzY1MiwyNzY1MywyNzY1NCwyNzY1NSwyNzY1NiwyNzY1NywyNzY1 OCwKKzI3NjU5LDI3NjYwLDI3NjYxLDI3NjYyLDI3NjYzLDI3NjY0LDI3NjY1LDI3NjY2LDI3NjY3 LDI3NjY4LDI3NjY5LDI3NjcwLAorMjc2NzEsMjc2NzIsMjc2NzMsMjc2NzQsMjc2NzUsMjc2NzYs Mjc2NzcsMjc2NzgsMjc2NzksMjc2ODAsMjc2ODEsMjc2ODIsCisyNzY4MywyNzY4NCwyNzY4NSwy NzY4NiwyNzY4NywyNzY4OCwyNzY4OSwyNzY5MCwyNzY5MSwyNzY5MiwyNzY5MywyNzY5NCwKKzI3 Njk1LDI3Njk2LDI3Njk3LDI3Njk4LDI3Njk5LDI3NzAwLDI3NzAxLDI3NzAyLDI3NzAzLDI3NzA0 LDI3NzA1LDI3NzA2LAorMjc3MDcsMjc3MDgsMjc3MDksMjc3MTAsMjc3MTEsMjc3MTIsMjc3MTMs Mjc3MTQsMjc3MTUsMjc3MTYsMjc3MTcsMjc3MTgsCisyNzcxOSwyNzcyMCwyNzcyMSwyNzcyMiwy NzcyMywyNzcyNCwyNzcyNSwyNzcyNiwyNzcyNywyNzcyOCwyNzcyOSwyNzczMCwKKzI3NzMxLDI3 NzMyLDI3NzMzLDI3NzM0LDI3NzM1LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzM5LDI3NzQwLDI3NzQx LDI3NzQyLAorMjc3NDMsMjc3NDQsMjc3NDUsMjc3NDYsMjc3NDcsMjc3NDgsMjc3NDksMjc3NTAs Mjc3NTEsMjc3NTIsMjc3NTMsMjc3NTQsCisyNzc1NSwyNzc1NiwyNzc1NywyNzc1OCwyNzc1OSwy Nzc2MCwyNzc2MSwyNzc2MiwyNzc2MywyNzc2NCwyNzc2NSwyNzc2NiwKKzI3NzY3LDI3NzY4LDI3 NzY5LDI3NzcwLDI3NzcxLDI3NzcyLDI3NzczLDI3Nzc0LDI3Nzc1LDI3Nzc2LDI3Nzc3LDI3Nzc4 LAorMjc3NzksMjc3ODAsMjc3ODEsMjc3ODIsMjc3ODMsMjc3ODQsMjc3ODUsMjc3ODYsMjc3ODcs Mjc3ODgsMjc3ODksMjc3OTAsCisyNzc5MSwyNzc5MiwyNzc5MywyNzc5NCwyNzc5NSwyNzc5Niwy Nzc5NywyNzc5OCwyNzc5OSwyNzgwMCwyNzgwMSwyNzgwMiwKKzI3ODAzLDI3ODA0LDI3ODA1LDI3 ODA2LDI3ODA3LDI3ODA4LDI3ODA5LDI3ODEwLDI3ODExLDI3ODEyLDI3ODEzLDI3ODE0LAorMjc4 MTUsMjc4MTYsMjc4MTcsMjc4MTgsMjc4MTksMjc4MjAsMjc4MjEsMjc4MjIsMjc4MjMsMjc4MjQs Mjc4MjUsMjc4MjYsCisyNzgyNywyNzgyOCwyNzgyOSwyNzgzMCwyNzgzMSwyNzgzMiwyNzgzMywy NzgzNCwyNzgzNSwyNzgzNiwyNzgzNywyNzgzOCwKKzI3ODM5LDI3ODQwLDI3ODQxLDI3ODQyLDI3 ODQzLDI3ODQ0LDI3ODQ1LDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODQ5LDI3ODUwLAorMjc4NTEsMjc4 NTIsMjc4NTMsMjc4NTQsMjc4NTUsMjc4NTYsMjc4NTcsMjc4NTgsMjc4NTksMjc4NjAsMjc4NjEs Mjc4NjIsCisyNzg2MywyNzg2NCwyNzg2NSwyNzg2NiwyNzg2NywyNzg2OCwyNzg2OSwyNzg3MCwy Nzg3MSwyNzg3MiwyNzg3MywyNzg3NCwKKzI3ODc1LDI3ODc2LDI3ODc3LDI3ODc4LDI3ODc5LDI3 ODgwLDI3ODgxLDI3ODgyLDI3ODgzLDI3ODg0LDI3ODg1LDI3ODg2LAorMjc4ODcsMjc4ODgsMjc4 ODksMjc4OTAsMjc4OTEsMjc4OTIsMjc4OTMsMjc4OTQsMjc4OTUsMjc4OTYsMjc4OTcsMjc4OTgs CisyNzg5OSwyNzkwMCwyNzkwMSwyNzkwMiwyNzkwMywyNzkwNCwyNzkwNSwyNzkwNiwyNzkwNywy NzkwOCwyNzkwOSwyNzkxMCwKKzI3OTExLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE1LDI3OTE2LDI3 OTE3LDI3OTE4LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIyLAorMjc5MjMsMjc5MjQsMjc5MjUsMjc5 MjYsMjc5MjcsMjc5MjgsMjc5MjksMjc5MzAsMjc5MzEsMjc5MzIsMjc5MzMsMjc5MzQsCisyNzkz NSwyNzkzNiwyNzkzNywyNzkzOCwyNzkzOSwyNzk0MCwyNzk0MSwyNzk0MiwyNzk0MywyNzk0NCwy Nzk0NSwyNzk0NiwKKzI3OTQ3LDI3OTQ4LDI3OTQ5LDI3OTUwLDI3OTUxLDI3OTUyLDI3OTUzLDI3 OTU0LDI3OTU1LDI3OTU2LDI3OTU3LDI3OTU4LAorMjc5NTksMjc5NjAsMjc5NjEsMjc5NjIsMjc5 NjMsMjc5NjQsMjc5NjUsMjc5NjYsMjc5NjcsMjc5NjgsMjc5NjksMjc5NzAsCisyNzk3MSwyNzk3 MiwyNzk3MywyNzk3NCwyNzk3NSwyNzk3NiwyNzk3NywyNzk3OCwyNzk3OSwyNzk4MCwyNzk4MSwy Nzk4MiwKKzI3OTgzLDI3OTg0LDI3OTg1LDI3OTg2LDI3OTg3LDI3OTg4LDI3OTg5LDI3OTkwLDI3 OTkxLDI3OTkyLDI3OTkzLDI3OTk0LAorMjc5OTUsMjc5OTYsMjc5OTcsMjc5OTgsMjc5OTksMjgw MDAsMjgwMDEsMjgwMDIsMjgwMDMsMjgwMDQsMjgwMDUsMjgwMDYsCisyODAwNywyODAwOCwyODAw OSwyODAxMCwyODAxMSwyODAxMiwyODAxMywyODAxNCwyODAxNSwyODAxNiwyODAxNywyODAxOCwK KzI4MDE5LDI4MDIwLDI4MDIxLDI4MDIyLDI4MDIzLDI4MDI0LDI4MDI1LDI4MDI2LDI4MDI3LDI4 MDI4LDI4MDI5LDI4MDMwLAorMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzQsMjgwMzUsMjgwMzYsMjgw MzcsMjgwMzgsMjgwMzksMjgwNDAsMjgwNDEsMjgwNDIsCisyODA0MywyODA0NCwyODA0NSwyODA0 NiwyODA0NywyODA0OCwyODA0OSwyODA1MCwyODA1MSwyODA1MiwyODA1MywyODA1NCwKKzI4MDU1 LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDU5LDI4MDYwLDI4MDYxLDI4MDYyLDI4MDYzLDI4MDY0LDI4 MDY1LDI4MDY2LAorMjgwNjcsMjgwNjgsMjgwNjksMjgwNzAsMjgwNzEsMjgwNzIsMjgwNzMsMjgw NzQsMjgwNzUsMjgwNzYsMjgwNzcsMjgwNzgsCisyODA3OSwyODA4MCwyODA4MSwyODA4MiwyODA4 MywyODA4NCwyODA4NSwyODA4NiwyODA4NywyODA4OCwyODA4OSwyODA5MCwKKzI4MDkxLDI4MDky LDI4MDkzLDI4MDk0LDI4MDk1LDI4MDk2LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTAwLDI4MTAxLDI4 MTAyLAorMjgxMDMsMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDcsMjgxMDgsMjgxMDksMjgxMTAsMjgx MTEsMjgxMTIsMjgxMTMsMjgxMTQsCisyODExNSwyODExNiwyODExNywyODExOCwyODExOSwyODEy MCwyODEyMSwyODEyMiwyODEyMywyODEyNCwyODEyNSwyODEyNiwKKzI4MTI3LDI4MTI4LDI4MTI5 LDI4MTMwLDI4MTMxLDI4MTMyLDI4MTMzLDI4MTM0LDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LAor MjgxMzksMjgxNDAsMjgxNDEsMjgxNDIsMjgxNDMsMjgxNDQsMjgxNDUsMjgxNDYsMjgxNDcsMjgx NDgsMjgxNDksMjgxNTAsCisyODE1MSwyODE1MiwyODE1MywyODE1NCwyODE1NSwyODE1NiwyODE1 NywyODE1OCwyODE1OSwyODE2MCwyODE2MSwyODE2MiwKKzI4MTYzLDI4MTY0LDI4MTY1LDI4MTY2 LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcwLDI4MTcxLDI4MTcyLDI4MTczLDI4MTc0LAorMjgxNzUs MjgxNzYsMjgxNzcsMjgxNzgsMjgxNzksMjgxODAsMjgxODEsMjgxODIsMjgxODMsMjgxODQsMjgx ODUsMjgxODYsCisyODE4NywyODE4OCwyODE4OSwyODE5MCwyODE5MSwyODE5MiwyODE5MywyODE5 NCwyODE5NSwyODE5NiwyODE5NywyODE5OCwKKzI4MTk5LDI4MjAwLDI4MjAxLDI4MjAyLDI4MjAz LDI4MjA0LDI4MjA1LDI4MjA2LDI4MjA3LDI4MjA4LDI4MjA5LDI4MjEwLAorMjgyMTEsMjgyMTIs MjgyMTMsMjgyMTQsMjgyMTUsMjgyMTYsMjgyMTcsMjgyMTgsMjgyMTksMjgyMjAsMjgyMjEsMjgy MjIsCisyODIyMywyODIyNCwyODIyNSwyODIyNiwyODIyNywyODIyOCwyODIyOSwyODIzMCwyODIz MSwyODIzMiwyODIzMywyODIzNCwKKzI4MjM1LDI4MjM2LDI4MjM3LDI4MjM4LDI4MjM5LDI4MjQw LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ1LDI4MjQ2LAorMjgyNDcsMjgyNDgsMjgyNDks MjgyNTAsMjgyNTEsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTUsMjgyNTYsMjgyNTcsMjgyNTgsCisy ODI1OSwyODI2MCwyODI2MSwyODI2MiwyODI2MywyODI2NCwyODI2NSwyODI2NiwyODI2NywyODI2 OCwyODI2OSwyODI3MCwKKzI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3 LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLAorMjgyODMsMjgyODQsMjgyODUsMjgyODYs MjgyODcsMjgyODgsMjgyODksMjgyOTAsMjgyOTEsMjgyOTIsMjgyOTMsMjgyOTQsCisyODI5NSwy ODI5NiwyODI5NywyODI5OCwyODI5OSwyODMwMCwyODMwMSwyODMwMiwyODMwMywyODMwNCwyODMw NSwyODMwNiwKKzI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEyLDI4MzEzLDI4MzE0 LDI4MzE1LDI4MzE2LDI4MzE3LDI4MzE4LAorMjgzMTksMjgzMjAsMjgzMjEsMjgzMjIsMjgzMjMs MjgzMjQsMjgzMjUsMjgzMjYsMjgzMjcsMjgzMjgsMjgzMjksMjgzMzAsCisyODMzMSwyODMzMiwy ODMzMywyODMzNCwyODMzNSwyODMzNiwyODMzNywyODMzOCwyODMzOSwyODM0MCwyODM0MSwyODM0 MiwKKzI4MzQzLDI4MzQ0LDI4MzQ1LDI4MzQ2LDI4MzQ3LDI4MzQ4LDI4MzQ5LDI4MzUwLDI4MzUx LDI4MzUyLDI4MzUzLDI4MzU0LAorMjgzNTUsMjgzNTYsMjgzNTcsMjgzNTgsMjgzNTksMjgzNjAs MjgzNjEsMjgzNjIsMjgzNjMsMjgzNjQsMjgzNjUsMjgzNjYsCisyODM2NywyODM2OCwyODM2OSwy ODM3MCwyODM3MSwyODM3MiwyODM3MywyODM3NCwyODM3NSwyODM3NiwyODM3NywyODM3OCwKKzI4 Mzc5LDI4MzgwLDI4MzgxLDI4MzgyLDI4MzgzLDI4Mzg0LDI4Mzg1LDI4Mzg2LDI4Mzg3LDI4Mzg4 LDI4Mzg5LDI4MzkwLAorMjgzOTEsMjgzOTIsMjgzOTMsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcs MjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsCisyODQwMywyODQwNCwyODQwNSwyODQwNiwy ODQwNywyODQwOCwyODQwOSwyODQxMCwyODQxMSwyODQxMiwyODQxMywyODQxNCwKKzI4NDE1LDI4 NDE2LDI4NDE3LDI4NDE4LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIyLDI4NDIzLDI4NDI0LDI4NDI1 LDI4NDI2LAorMjg0MjcsMjg0MjgsMjg0MjksMjg0MzAsMjg0MzEsMjg0MzIsMjg0MzMsMjg0MzQs Mjg0MzUsMjg0MzYsMjg0MzcsMjg0MzgsCisyODQzOSwyODQ0MCwyODQ0MSwyODQ0MiwyODQ0Mywy ODQ0NCwyODQ0NSwyODQ0NiwyODQ0NywyODQ0OCwyODQ0OSwyODQ1MCwKKzI4NDUxLDI4NDUyLDI4 NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDU3LDI4NDU4LDI4NDU5LDI4NDYwLDI4NDYxLDI4NDYy LAorMjg0NjMsMjg0NjQsMjg0NjUsMjg0NjYsMjg0NjcsMjg0NjgsMjg0NjksMjg0NzAsMjg0NzEs Mjg0NzIsMjg0NzMsMjg0NzQsCisyODQ3NSwyODQ3NiwyODQ3NywyODQ3OCwyODQ3OSwyODQ4MCwy ODQ4MSwyODQ4MiwyODQ4MywyODQ4NCwyODQ4NSwyODQ4NiwKKzI4NDg3LDI4NDg4LDI4NDg5LDI4 NDkwLDI4NDkxLDI4NDkyLDI4NDkzLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LAorMjg0 OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1MDQsMjg1MDUsMjg1MDYsMjg1MDcsMjg1MDgs Mjg1MDksMjg1MTAsCisyODUxMSwyODUxMiwyODUxMywyODUxNCwyODUxNSwyODUxNiwyODUxNywy ODUxOCwyODUxOSwyODUyMCwyODUyMSwyODUyMiwKKzI4NTIzLDI4NTI0LDI4NTI1LDI4NTI2LDI4 NTI3LDI4NTI4LDI4NTI5LDI4NTMwLDI4NTMxLDI4NTMyLDI4NTMzLDI4NTM0LAorMjg1MzUsMjg1 MzYsMjg1MzcsMjg1MzgsMjg1MzksMjg1NDAsMjg1NDEsMjg1NDIsMjg1NDMsMjg1NDQsMjg1NDUs Mjg1NDYsCisyODU0NywyODU0OCwyODU0OSwyODU1MCwyODU1MSwyODU1MiwyODU1MywyODU1NCwy ODU1NSwyODU1NiwyODU1NywyODU1OCwKKzI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4 NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLAorMjg1NzEsMjg1NzIsMjg1 NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzcsMjg1NzgsMjg1NzksMjg1ODAsMjg1ODEsMjg1ODIs CisyODU4MywyODU4NCwyODU4NSwyODU4NiwyODU4NywyODU4OCwyODU4OSwyODU5MCwyODU5MSwy ODU5MiwyODU5MywyODU5NCwKKzI4NTk1LDI4NTk2LDI4NTk3LDI4NTk4LDI4NTk5LDI4NjAwLDI4 NjAxLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LAorMjg2MDcsMjg2MDgsMjg2MDksMjg2 MTAsMjg2MTEsMjg2MTIsMjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTcsMjg2MTgsCisyODYx OSwyODYyMCwyODYyMSwyODYyMiwyODYyMywyODYyNCwyODYyNSwyODYyNiwyODYyNywyODYyOCwy ODYyOSwyODYzMCwKKzI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4 NjM4LDI4NjM5LDI4NjQwLDI4NjQxLDI4NjQyLAorMjg2NDMsMjg2NDQsMjg2NDUsMjg2NDYsMjg2 NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2NTMsMjg2NTQsCisyODY1NSwyODY1 NiwyODY1NywyODY1OCwyODY1OSwyODY2MCwyODY2MSwyODY2MiwyODY2MywyODY2NCwyODY2NSwy ODY2NiwKKzI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4 Njc1LDI4Njc2LDI4Njc3LDI4Njc4LAorMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIsMjg2ODMsMjg2 ODQsMjg2ODUsMjg2ODYsMjg2ODcsMjg2ODgsMjg2ODksMjg2OTAsCisyODY5MSwyODY5MiwyODY5 MywyODY5NCwyODY5NSwyODY5NiwyODY5NywyODY5OCwyODY5OSwyODcwMCwyODcwMSwyODcwMiwK KzI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA3LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4 NzEyLDI4NzEzLDI4NzE0LAorMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgsMjg3MTksMjg3MjAsMjg3 MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjUsMjg3MjYsCisyODcyNywyODcyOCwyODcyOSwyODcz MCwyODczMSwyODczMiwyODczMywyODczNCwyODczNSwyODczNiwyODczNywyODczOCwKKzI4NzM5 LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ4LDI4 NzQ5LDI4NzUwLAorMjg3NTEsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3 NTgsMjg3NTksMjg3NjAsMjg3NjEsMjg3NjIsCisyODc2MywyODc2NCwyODc2NSwyODc2NiwyODc2 NywyODc2OCwyODc2OSwyODc3MCwyODc3MSwyODc3MiwyODc3MywyODc3NCwKKzI4Nzc1LDI4Nzc2 LDI4Nzc3LDI4Nzc4LDI4Nzc5LDI4NzgwLDI4NzgxLDI4NzgyLDI4NzgzLDI4Nzg0LDI4Nzg1LDI4 Nzg2LAorMjg3ODcsMjg3ODgsMjg3ODksMjg3OTAsMjg3OTEsMjg3OTIsMjg3OTMsMjg3OTQsMjg3 OTUsMjg3OTYsMjg3OTcsMjg3OTgsCisyODc5OSwyODgwMCwyODgwMSwyODgwMiwyODgwMywyODgw NCwyODgwNSwyODgwNiwyODgwNywyODgwOCwyODgwOSwyODgxMCwKKzI4ODExLDI4ODEyLDI4ODEz LDI4ODE0LDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE4LDI4ODE5LDI4ODIwLDI4ODIxLDI4ODIyLAor Mjg4MjMsMjg4MjQsMjg4MjUsMjg4MjYsMjg4MjcsMjg4MjgsMjg4MjksMjg4MzAsMjg4MzEsMjg4 MzIsMjg4MzMsMjg4MzQsCisyODgzNSwyODgzNiwyODgzNywyODgzOCwyODgzOSwyODg0MCwyODg0 MSwyODg0MiwyODg0MywyODg0NCwyODg0NSwyODg0NiwKKzI4ODQ3LDI4ODQ4LDI4ODQ5LDI4ODUw LDI4ODUxLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU1LDI4ODU2LDI4ODU3LDI4ODU4LAorMjg4NTks Mjg4NjAsMjg4NjEsMjg4NjIsMjg4NjMsMjg4NjQsMjg4NjUsMjg4NjYsMjg4NjcsMjg4NjgsMjg4 NjksMjg4NzAsCisyODg3MSwyODg3MiwyODg3MywyODg3NCwyODg3NSwyODg3NiwyODg3NywyODg3 OCwyODg3OSwyODg4MCwyODg4MSwyODg4MiwKKzI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3 LDI4ODg4LDI4ODg5LDI4ODkwLDI4ODkxLDI4ODkyLDI4ODkzLDI4ODk0LAorMjg4OTUsMjg4OTYs Mjg4OTcsMjg4OTgsMjg4OTksMjg5MDAsMjg5MDEsMjg5MDIsMjg5MDMsMjg5MDQsMjg5MDUsMjg5 MDYsCisyODkwNywyODkwOCwyODkwOSwyODkxMCwyODkxMSwyODkxMiwyODkxMywyODkxNCwyODkx NSwyODkxNiwyODkxNywyODkxOCwKKzI4OTE5LDI4OTIwLDI4OTIxLDI4OTIyLDI4OTIzLDI4OTI0 LDI4OTI1LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLAorMjg5MzEsMjg5MzIsMjg5MzMs Mjg5MzQsMjg5MzUsMjg5MzYsMjg5MzcsMjg5MzgsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsCisy ODk0MywyODk0NCwyODk0NSwyODk0NiwyODk0NywyODk0OCwyODk0OSwyODk1MCwyODk1MSwyODk1 MiwyODk1MywyODk1NCwKKzI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYx LDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY2LAorMjg5NjcsMjg5NjgsMjg5NjksMjg5NzAs Mjg5NzEsMjg5NzIsMjg5NzMsMjg5NzQsMjg5NzUsMjg5NzYsMjg5NzcsMjg5NzgsCisyODk3OSwy ODk4MCwyODk4MSwyODk4MiwyODk4MywyODk4NCwyODk4NSwyODk4NiwyODk4NywyODk4OCwyODk4 OSwyODk5MCwKKzI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk3LDI4OTk4 LDI4OTk5LDI5MDAwLDI5MDAxLDI5MDAyLAorMjkwMDMsMjkwMDQsMjkwMDUsMjkwMDYsMjkwMDcs MjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsCisyOTAxNSwyOTAxNiwy OTAxNywyOTAxOCwyOTAxOSwyOTAyMCwyOTAyMSwyOTAyMiwyOTAyMywyOTAyNCwyOTAyNSwyOTAy NiwKKzI5MDI3LDI5MDI4LDI5MDI5LDI5MDMwLDI5MDMxLDI5MDMyLDI5MDMzLDI5MDM0LDI5MDM1 LDI5MDM2LDI5MDM3LDI5MDM4LAorMjkwMzksMjkwNDAsMjkwNDEsMjkwNDIsMjkwNDMsMjkwNDQs MjkwNDUsMjkwNDYsMjkwNDcsMjkwNDgsMjkwNDksMjkwNTAsCisyOTA1MSwyOTA1MiwyOTA1Mywy OTA1NCwyOTA1NSwyOTA1NiwyOTA1NywyOTA1OCwyOTA1OSwyOTA2MCwyOTA2MSwyOTA2MiwKKzI5 MDYzLDI5MDY0LDI5MDY1LDI5MDY2LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcxLDI5MDcy LDI5MDczLDI5MDc0LAorMjkwNzUsMjkwNzYsMjkwNzcsMjkwNzgsMjkwNzksMjkwODAsMjkwODEs MjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYsCisyOTA4NywyOTA4OCwyOTA4OSwyOTA5MCwy OTA5MSwyOTA5MiwyOTA5MywyOTA5NCwyOTA5NSwyOTA5NiwyOTA5NywyOTA5OCwKKzI5MDk5LDI5 MTAwLDI5MTAxLDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA3LDI5MTA4LDI5MTA5 LDI5MTEwLAorMjkxMTEsMjkxMTIsMjkxMTMsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgs MjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsCisyOTEyMywyOTEyNCwyOTEyNSwyOTEyNiwyOTEyNywy OTEyOCwyOTEyOSwyOTEzMCwyOTEzMSwyOTEzMiwyOTEzMywyOTEzNCwKKzI5MTM1LDI5MTM2LDI5 MTM3LDI5MTM4LDI5MTM5LDI5MTQwLDI5MTQxLDI5MTQyLDI5MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2 LAorMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTIsMjkxNTMsMjkxNTQsMjkxNTUs MjkxNTYsMjkxNTcsMjkxNTgsCisyOTE1OSwyOTE2MCwyOTE2MSwyOTE2MiwyOTE2MywyOTE2NCwy OTE2NSwyOTE2NiwyOTE2NywyOTE2OCwyOTE2OSwyOTE3MCwKKzI5MTcxLDI5MTcyLDI5MTczLDI5 MTc0LDI5MTc1LDI5MTc2LDI5MTc3LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLAorMjkx ODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTAsMjkxOTEsMjkxOTIs MjkxOTMsMjkxOTQsCisyOTE5NSwyOTE5NiwyOTE5NywyOTE5OCwyOTE5OSwyOTIwMCwyOTIwMSwy OTIwMiwyOTIwMywyOTIwNCwyOTIwNSwyOTIwNiwKKzI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5 MjExLDI5MjEyLDI5MjEzLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LAorMjkyMTksMjky MjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjQsMjkyMjUsMjkyMjYsMjkyMjcsMjkyMjgsMjkyMjks MjkyMzAsCisyOTIzMSwyOTIzMiwyOTIzMywyOTIzNCwyOTIzNSwyOTIzNiwyOTIzNywyOTIzOCwy OTIzOSwyOTI0MCwyOTI0MSwyOTI0MiwKKzI5MjQzLDI5MjQ0LDI5MjQ1LDI5MjQ2LDI5MjQ3LDI5 MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LAorMjkyNTUsMjkyNTYsMjky NTcsMjkyNTgsMjkyNTksMjkyNjAsMjkyNjEsMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjYs CisyOTI2NywyOTI2OCwyOTI2OSwyOTI3MCwyOTI3MSwyOTI3MiwyOTI3MywyOTI3NCwyOTI3NSwy OTI3NiwyOTI3NywyOTI3OCwKKzI5Mjc5LDI5MjgwLDI5MjgxLDI5MjgyLDI5MjgzLDI5Mjg0LDI5 Mjg1LDI5Mjg2LDI5Mjg3LDI5Mjg4LDI5Mjg5LDI5MjkwLAorMjkyOTEsMjkyOTIsMjkyOTMsMjky OTQsMjkyOTUsMjkyOTYsMjkyOTcsMjkyOTgsMjkyOTksMjkzMDAsMjkzMDEsMjkzMDIsCisyOTMw MywyOTMwNCwyOTMwNSwyOTMwNiwyOTMwNywyOTMwOCwyOTMwOSwyOTMxMCwyOTMxMSwyOTMxMiwy OTMxMywyOTMxNCwKKzI5MzE1LDI5MzE2LDI5MzE3LDI5MzE4LDI5MzE5LDI5MzIwLDI5MzIxLDI5 MzIyLDI5MzIzLDI5MzI0LDI5MzI1LDI5MzI2LAorMjkzMjcsMjkzMjgsMjkzMjksMjkzMzAsMjkz MzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsCisyOTMzOSwyOTM0 MCwyOTM0MSwyOTM0MiwyOTM0MywyOTM0NCwyOTM0NSwyOTM0NiwyOTM0NywyOTM0OCwyOTM0OSwy OTM1MCwKKzI5MzUxLDI5MzUyLDI5MzUzLDI5MzU0LDI5MzU1LDI5MzU2LDI5MzU3LDI5MzU4LDI5 MzU5LDI5MzYwLDI5MzYxLDI5MzYyLAorMjkzNjMsMjkzNjQsMjkzNjUsMjkzNjYsMjkzNjcsMjkz NjgsMjkzNjksMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsCisyOTM3NSwyOTM3NiwyOTM3 NywyOTM3OCwyOTM3OSwyOTM4MCwyOTM4MSwyOTM4MiwyOTM4MywyOTM4NCwyOTM4NSwyOTM4NiwK KzI5Mzg3LDI5Mzg4LDI5Mzg5LDI5MzkwLDI5MzkxLDI5MzkyLDI5MzkzLDI5Mzk0LDI5Mzk1LDI5 Mzk2LDI5Mzk3LDI5Mzk4LAorMjkzOTksMjk0MDAsMjk0MDEsMjk0MDIsMjk0MDMsMjk0MDQsMjk0 MDUsMjk0MDYsMjk0MDcsMjk0MDgsMjk0MDksMjk0MTAsCisyOTQxMSwyOTQxMiwyOTQxMywyOTQx NCwyOTQxNSwyOTQxNiwyOTQxNywyOTQxOCwyOTQxOSwyOTQyMCwyOTQyMSwyOTQyMiwKKzI5NDIz LDI5NDI0LDI5NDI1LDI5NDI2LDI5NDI3LDI5NDI4LDI5NDI5LDI5NDMwLDI5NDMxLDI5NDMyLDI5 NDMzLDI5NDM0LAorMjk0MzUsMjk0MzYsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDEsMjk0 NDIsMjk0NDMsMjk0NDQsMjk0NDUsMjk0NDYsCisyOTQ0NywyOTQ0OCwyOTQ0OSwyOTQ1MCwyOTQ1 MSwyOTQ1MiwyOTQ1MywyOTQ1NCwyOTQ1NSwyOTQ1NiwyOTQ1NywyOTQ1OCwKKzI5NDU5LDI5NDYw LDI5NDYxLDI5NDYyLDI5NDYzLDI5NDY0LDI5NDY1LDI5NDY2LDI5NDY3LDI5NDY4LDI5NDY5LDI5 NDcwLAorMjk0NzEsMjk0NzIsMjk0NzMsMjk0NzQsMjk0NzUsMjk0NzYsMjk0NzcsMjk0NzgsMjk0 NzksMjk0ODAsMjk0ODEsMjk0ODIsCisyOTQ4MywyOTQ4NCwyOTQ4NSwyOTQ4NiwyOTQ4NywyOTQ4 OCwyOTQ4OSwyOTQ5MCwyOTQ5MSwyOTQ5MiwyOTQ5MywyOTQ5NCwKKzI5NDk1LDI5NDk2LDI5NDk3 LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTAyLDI5NTAzLDI5NTA0LDI5NTA1LDI5NTA2LAor Mjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1 MTYsMjk1MTcsMjk1MTgsCisyOTUxOSwyOTUyMCwyOTUyMSwyOTUyMiwyOTUyMywyOTUyNCwyOTUy NSwyOTUyNiwyOTUyNywyOTUyOCwyOTUyOSwyOTUzMCwKKzI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0 LDI5NTM1LDI5NTM2LDI5NTM3LDI5NTM4LDI5NTM5LDI5NTQwLDI5NTQxLDI5NTQyLAorMjk1NDMs Mjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NDgsMjk1NDksMjk1NTAsMjk1NTEsMjk1NTIsMjk1 NTMsMjk1NTQsCisyOTU1NSwyOTU1NiwyOTU1NywyOTU1OCwyOTU1OSwyOTU2MCwyOTU2MSwyOTU2 MiwyOTU2MywyOTU2NCwyOTU2NSwyOTU2NiwKKzI5NTY3LDI5NTY4LDI5NTY5LDI5NTcwLDI5NTcx LDI5NTcyLDI5NTczLDI5NTc0LDI5NTc1LDI5NTc2LDI5NTc3LDI5NTc4LAorMjk1NzksMjk1ODAs Mjk1ODEsMjk1ODIsMjk1ODMsMjk1ODQsMjk1ODUsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1 OTAsCisyOTU5MSwyOTU5MiwyOTU5MywyOTU5NCwyOTU5NSwyOTU5NiwyOTU5NywyOTU5OCwyOTU5 OSwyOTYwMCwyOTYwMSwyOTYwMiwKKzI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5NjA4 LDI5NjA5LDI5NjEwLDI5NjExLDI5NjEyLDI5NjEzLDI5NjE0LAorMjk2MTUsMjk2MTYsMjk2MTcs Mjk2MTgsMjk2MTksMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjMsMjk2MjQsMjk2MjUsMjk2MjYsCisy OTYyNywyOTYyOCwyOTYyOSwyOTYzMCwyOTYzMSwyOTYzMiwyOTYzMywyOTYzNCwyOTYzNSwyOTYz NiwyOTYzNywyOTYzOCwKKzI5NjM5LDI5NjQwLDI5NjQxLDI5NjQyLDI5NjQzLDI5NjQ0LDI5NjQ1 LDI5NjQ2LDI5NjQ3LDI5NjQ4LDI5NjQ5LDI5NjUwLAorMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQs Mjk2NTUsMjk2NTYsMjk2NTcsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjIsCisyOTY2Mywy OTY2NCwyOTY2NSwyOTY2NiwyOTY2NywyOTY2OCwyOTY2OSwyOTY3MCwyOTY3MSwyOTY3MiwyOTY3 MywyOTY3NCwKKzI5Njc1LDI5Njc2LDI5Njc3LDI5Njc4LDI5Njc5LDI5NjgwLDI5NjgxLDI5Njgy LDI5NjgzLDI5Njg0LDI5Njg1LDI5Njg2LAorMjk2ODcsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEs Mjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsCisyOTY5OSwyOTcwMCwy OTcwMSwyOTcwMiwyOTcwMywyOTcwNCwyOTcwNSwyOTcwNiwyOTcwNywyOTcwOCwyOTcwOSwyOTcx MCwKKzI5NzExLDI5NzEyLDI5NzEzLDI5NzE0LDI5NzE1LDI5NzE2LDI5NzE3LDI5NzE4LDI5NzE5 LDI5NzIwLDI5NzIxLDI5NzIyLAorMjk3MjMsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3Mjgs Mjk3MjksMjk3MzAsMjk3MzEsMjk3MzIsMjk3MzMsMjk3MzQsCisyOTczNSwyOTczNiwyOTczNywy OTczOCwyOTczOSwyOTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0NCwyOTc0NSwyOTc0NiwKKzI5 NzQ3LDI5NzQ4LDI5NzQ5LDI5NzUwLDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0LDI5NzU1LDI5NzU2 LDI5NzU3LDI5NzU4LAorMjk3NTksMjk3NjAsMjk3NjEsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUs Mjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsCisyOTc3MSwyOTc3MiwyOTc3MywyOTc3NCwy OTc3NSwyOTc3NiwyOTc3NywyOTc3OCwyOTc3OSwyOTc4MCwyOTc4MSwyOTc4MiwKKzI5NzgzLDI5 Nzg0LDI5Nzg1LDI5Nzg2LDI5Nzg3LDI5Nzg4LDI5Nzg5LDI5NzkwLDI5NzkxLDI5NzkyLDI5Nzkz LDI5Nzk0LAorMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIs Mjk4MDMsMjk4MDQsMjk4MDUsMjk4MDYsCisyOTgwNywyOTgwOCwyOTgwOSwyOTgxMCwyOTgxMSwy OTgxMiwyOTgxMywyOTgxNCwyOTgxNSwyOTgxNiwyOTgxNywyOTgxOCwKKzI5ODE5LDI5ODIwLDI5 ODIxLDI5ODIyLDI5ODIzLDI5ODI0LDI5ODI1LDI5ODI2LDI5ODI3LDI5ODI4LDI5ODI5LDI5ODMw LAorMjk4MzEsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzUsMjk4MzYsMjk4MzcsMjk4MzgsMjk4Mzks Mjk4NDAsMjk4NDEsMjk4NDIsCisyOTg0MywyOTg0NCwyOTg0NSwyOTg0NiwyOTg0NywyOTg0OCwy OTg0OSwyOTg1MCwyOTg1MSwyOTg1MiwyOTg1MywyOTg1NCwKKzI5ODU1LDI5ODU2LDI5ODU3LDI5 ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODYzLDI5ODY0LDI5ODY1LDI5ODY2LAorMjk4 NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYs Mjk4NzcsMjk4NzgsCisyOTg3OSwyOTg4MCwyOTg4MSwyOTg4MiwyOTg4MywyOTg4NCwyOTg4NSwy OTg4NiwyOTg4NywyOTg4OCwyOTg4OSwyOTg5MCwKKzI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5 ODk1LDI5ODk2LDI5ODk3LDI5ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAyLAorMjk5MDMsMjk5 MDQsMjk5MDUsMjk5MDYsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMs Mjk5MTQsCisyOTkxNSwyOTkxNiwyOTkxNywyOTkxOCwyOTkxOSwyOTkyMCwyOTkyMSwyOTkyMiwy OTkyMywyOTkyNCwyOTkyNSwyOTkyNiwKKzI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5 OTMyLDI5OTMzLDI5OTM0LDI5OTM1LDI5OTM2LDI5OTM3LDI5OTM4LAorMjk5MzksMjk5NDAsMjk5 NDEsMjk5NDIsMjk5NDMsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAs CisyOTk1MSwyOTk1MiwyOTk1MywyOTk1NCwyOTk1NSwyOTk1NiwyOTk1NywyOTk1OCwyOTk1OSwy OTk2MCwyOTk2MSwyOTk2MiwKKzI5OTYzLDI5OTY0LDI5OTY1LDI5OTY2LDI5OTY3LDI5OTY4LDI5 OTY5LDI5OTcwLDI5OTcxLDI5OTcyLDI5OTczLDI5OTc0LAorMjk5NzUsMjk5NzYsMjk5NzcsMjk5 NzgsMjk5NzksMjk5ODAsMjk5ODEsMjk5ODIsMjk5ODMsMjk5ODQsMjk5ODUsMjk5ODYsCisyOTk4 NywyOTk4OCwyOTk4OSwyOTk5MCwyOTk5MSwyOTk5MiwyOTk5MywyOTk5NCwyOTk5NSwyOTk5Niwy OTk5NywyOTk5OCwKKzI5OTk5LDMwMDAwLDMwMDAxLDMwMDAyLDMwMDAzLDMwMDA0LDMwMDA1LDMw MDA2LDMwMDA3LDMwMDA4LDMwMDA5LDMwMDEwLAorMzAwMTEsMzAwMTIsMzAwMTMsMzAwMTQsMzAw MTUsMzAwMTYsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjEsMzAwMjIsCiszMDAyMywzMDAy NCwzMDAyNSwzMDAyNiwzMDAyNywzMDAyOCwzMDAyOSwzMDAzMCwzMDAzMSwzMDAzMiwzMDAzMywz MDAzNCwKKzMwMDM1LDMwMDM2LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQxLDMwMDQyLDMw MDQzLDMwMDQ0LDMwMDQ1LDMwMDQ2LAorMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAw NTIsMzAwNTMsMzAwNTQsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTgsCiszMDA1OSwzMDA2MCwzMDA2 MSwzMDA2MiwzMDA2MywzMDA2NCwzMDA2NSwzMDA2NiwzMDA2NywzMDA2OCwzMDA2OSwzMDA3MCwK KzMwMDcxLDMwMDcyLDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDc5LDMw MDgwLDMwMDgxLDMwMDgyLAorMzAwODMsMzAwODQsMzAwODUsMzAwODYsMzAwODcsMzAwODgsMzAw ODksMzAwOTAsMzAwOTEsMzAwOTIsMzAwOTMsMzAwOTQsCiszMDA5NSwzMDA5NiwzMDA5NywzMDA5 OCwzMDA5OSwzMDEwMCwzMDEwMSwzMDEwMiwzMDEwMywzMDEwNCwzMDEwNSwzMDEwNiwKKzMwMTA3 LDMwMTA4LDMwMTA5LDMwMTEwLDMwMTExLDMwMTEyLDMwMTEzLDMwMTE0LDMwMTE1LDMwMTE2LDMw MTE3LDMwMTE4LAorMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjMsMzAxMjQsMzAxMjUsMzAx MjYsMzAxMjcsMzAxMjgsMzAxMjksMzAxMzAsCiszMDEzMSwzMDEzMiwzMDEzMywzMDEzNCwzMDEz NSwzMDEzNiwzMDEzNywzMDEzOCwzMDEzOSwzMDE0MCwzMDE0MSwzMDE0MiwKKzMwMTQzLDMwMTQ0 LDMwMTQ1LDMwMTQ2LDMwMTQ3LDMwMTQ4LDMwMTQ5LDMwMTUwLDMwMTUxLDMwMTUyLDMwMTUzLDMw MTU0LAorMzAxNTUsMzAxNTYsMzAxNTcsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjIsMzAx NjMsMzAxNjQsMzAxNjUsMzAxNjYsCiszMDE2NywzMDE2OCwzMDE2OSwzMDE3MCwzMDE3MSwzMDE3 MiwzMDE3MywzMDE3NCwzMDE3NSwzMDE3NiwzMDE3NywzMDE3OCwKKzMwMTc5LDMwMTgwLDMwMTgx LDMwMTgyLDMwMTgzLDMwMTg0LDMwMTg1LDMwMTg2LDMwMTg3LDMwMTg4LDMwMTg5LDMwMTkwLAor MzAxOTEsMzAxOTIsMzAxOTMsMzAxOTQsMzAxOTUsMzAxOTYsMzAxOTcsMzAxOTgsMzAxOTksMzAy MDAsMzAyMDEsMzAyMDIsCiszMDIwMywzMDIwNCwzMDIwNSwzMDIwNiwzMDIwNywzMDIwOCwzMDIw OSwzMDIxMCwzMDIxMSwzMDIxMiwzMDIxMywzMDIxNCwKKzMwMjE1LDMwMjE2LDMwMjE3LDMwMjE4 LDMwMjE5LDMwMjIwLDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI0LDMwMjI1LDMwMjI2LAorMzAyMjcs MzAyMjgsMzAyMjksMzAyMzAsMzAyMzEsMzAyMzIsMzAyMzMsMzAyMzQsMzAyMzUsMzAyMzYsMzAy MzcsMzAyMzgsCiszMDIzOSwzMDI0MCwzMDI0MSwzMDI0MiwzMDI0MywzMDI0NCwzMDI0NSwzMDI0 NiwzMDI0NywzMDI0OCwzMDI0OSwzMDI1MCwKKzMwMjUxLDMwMjUyLDMwMjUzLDMwMjU0LDMwMjU1 LDMwMjU2LDMwMjU3LDMwMjU4LDMwMjU5LDMwMjYwLDMwMjYxLDMwMjYyLAorMzAyNjMsMzAyNjQs MzAyNjUsMzAyNjYsMzAyNjcsMzAyNjgsMzAyNjksMzAyNzAsMzAyNzEsMzAyNzIsMzAyNzMsMzAy NzQsCiszMDI3NSwzMDI3NiwzMDI3NywzMDI3OCwzMDI3OSwzMDI4MCwzMDI4MSwzMDI4MiwzMDI4 MywzMDI4NCwzMDI4NSwzMDI4NiwKKzMwMjg3LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjky LDMwMjkzLDMwMjk0LDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4LAorMzAyOTksMzAzMDAsMzAzMDEs MzAzMDIsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDcsMzAzMDgsMzAzMDksMzAzMTAsCisz MDMxMSwzMDMxMiwzMDMxMywzMDMxNCwzMDMxNSwzMDMxNiwzMDMxNywzMDMxOCwzMDMxOSwzMDMy MCwzMDMyMSwzMDMyMiwKKzMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI4LDMwMzI5 LDMwMzMwLDMwMzMxLDMwMzMyLDMwMzMzLDMwMzM0LAorMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzgs MzAzMzksMzAzNDAsMzAzNDEsMzAzNDIsMzAzNDMsMzAzNDQsMzAzNDUsMzAzNDYsCiszMDM0Nywz MDM0OCwzMDM0OSwzMDM1MCwzMDM1MSwzMDM1MiwzMDM1MywzMDM1NCwzMDM1NSwzMDM1NiwzMDM1 NywzMDM1OCwKKzMwMzU5LDMwMzYwLDMwMzYxLDMwMzYyLDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY2 LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLAorMzAzNzEsMzAzNzIsMzAzNzMsMzAzNzQsMzAzNzUs MzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODIsCiszMDM4MywzMDM4NCwz MDM4NSwzMDM4NiwzMDM4NywzMDM4OCwzMDM4OSwzMDM5MCwzMDM5MSwzMDM5MiwzMDM5MywzMDM5 NCwKKzMwMzk1LDMwMzk2LDMwMzk3LDMwMzk4LDMwMzk5LDMwNDAwLDMwNDAxLDMwNDAyLDMwNDAz LDMwNDA0LDMwNDA1LDMwNDA2LAorMzA0MDcsMzA0MDgsMzA0MDksMzA0MTAsMzA0MTEsMzA0MTIs MzA0MTMsMzA0MTQsMzA0MTUsMzA0MTYsMzA0MTcsMzA0MTgsCiszMDQxOSwzMDQyMCwzMDQyMSwz MDQyMiwzMDQyMywzMDQyNCwzMDQyNSwzMDQyNiwzMDQyNywzMDQyOCwzMDQyOSwzMDQzMCwKKzMw NDMxLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM3LDMwNDM4LDMwNDM5LDMwNDQw LDMwNDQxLDMwNDQyLAorMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDYsMzA0NDcsMzA0NDgsMzA0NDks MzA0NTAsMzA0NTEsMzA0NTIsMzA0NTMsMzA0NTQsCiszMDQ1NSwzMDQ1NiwzMDQ1NywzMDQ1OCwz MDQ1OSwzMDQ2MCwzMDQ2MSwzMDQ2MiwzMDQ2MywzMDQ2NCwzMDQ2NSwzMDQ2NiwKKzMwNDY3LDMw NDY4LDMwNDY5LDMwNDcwLDMwNDcxLDMwNDcyLDMwNDczLDMwNDc0LDMwNDc1LDMwNDc2LDMwNDc3 LDMwNDc4LAorMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYs MzA0ODcsMzA0ODgsMzA0ODksMzA0OTAsCiszMDQ5MSwzMDQ5MiwzMDQ5MywzMDQ5NCwzMDQ5NSwz MDQ5NiwzMDQ5NywzMDQ5OCwzMDQ5OSwzMDUwMCwzMDUwMSwzMDUwMiwKKzMwNTAzLDMwNTA0LDMw NTA1LDMwNTA2LDMwNTA3LDMwNTA4LDMwNTA5LDMwNTEwLDMwNTExLDMwNTEyLDMwNTEzLDMwNTE0 LAorMzA1MTUsMzA1MTYsMzA1MTcsMzA1MTgsMzA1MTksMzA1MjAsMzA1MjEsMzA1MjIsMzA1MjMs MzA1MjQsMzA1MjUsMzA1MjYsCiszMDUyNywzMDUyOCwzMDUyOSwzMDUzMCwzMDUzMSwzMDUzMiwz MDUzMywzMDUzNCwzMDUzNSwzMDUzNiwzMDUzNywzMDUzOCwKKzMwNTM5LDMwNTQwLDMwNTQxLDMw NTQyLDMwNTQzLDMwNTQ0LDMwNTQ1LDMwNTQ2LDMwNTQ3LDMwNTQ4LDMwNTQ5LDMwNTUwLAorMzA1 NTEsMzA1NTIsMzA1NTMsMzA1NTQsMzA1NTUsMzA1NTYsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAs MzA1NjEsMzA1NjIsCiszMDU2MywzMDU2NCwzMDU2NSwzMDU2NiwzMDU2NywzMDU2OCwzMDU2OSwz MDU3MCwzMDU3MSwzMDU3MiwzMDU3MywzMDU3NCwKKzMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4LDMw NTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg1LDMwNTg2LAorMzA1ODcsMzA1 ODgsMzA1ODksMzA1OTAsMzA1OTEsMzA1OTIsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTYsMzA1OTcs MzA1OTgsCiszMDU5OSwzMDYwMCwzMDYwMSwzMDYwMiwzMDYwMywzMDYwNCwzMDYwNSwzMDYwNiwz MDYwNywzMDYwOCwzMDYwOSwzMDYxMCwKKzMwNjExLDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE1LDMw NjE2LDMwNjE3LDMwNjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLAorMzA2MjMsMzA2MjQsMzA2 MjUsMzA2MjYsMzA2MjcsMzA2MjgsMzA2MjksMzA2MzAsMzA2MzEsMzA2MzIsMzA2MzMsMzA2MzQs CiszMDYzNSwzMDYzNiwzMDYzNywzMDYzOCwzMDYzOSwzMDY0MCwzMDY0MSwzMDY0MiwzMDY0Mywz MDY0NCwzMDY0NSwzMDY0NiwKKzMwNjQ3LDMwNjQ4LDMwNjQ5LDMwNjUwLDMwNjUxLDMwNjUyLDMw NjUzLDMwNjU0LDMwNjU1LDMwNjU2LDMwNjU3LDMwNjU4LAorMzA2NTksMzA2NjAsMzA2NjEsMzA2 NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NjksMzA2NzAsCiszMDY3 MSwzMDY3MiwzMDY3MywzMDY3NCwzMDY3NSwzMDY3NiwzMDY3NywzMDY3OCwzMDY3OSwzMDY4MCwz MDY4MSwzMDY4MiwKKzMwNjgzLDMwNjg0LDMwNjg1LDMwNjg2LDMwNjg3LDMwNjg4LDMwNjg5LDMw NjkwLDMwNjkxLDMwNjkyLDMwNjkzLDMwNjk0LAorMzA2OTUsMzA2OTYsMzA2OTcsMzA2OTgsMzA2 OTksMzA3MDAsMzA3MDEsMzA3MDIsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsCiszMDcwNywzMDcw OCwzMDcwOSwzMDcxMCwzMDcxMSwzMDcxMiwzMDcxMywzMDcxNCwzMDcxNSwzMDcxNiwzMDcxNywz MDcxOCwKKzMwNzE5LDMwNzIwLDMwNzIxLDMwNzIyLDMwNzIzLDMwNzI0LDMwNzI1LDMwNzI2LDMw NzI3LDMwNzI4LDMwNzI5LDMwNzMwLAorMzA3MzEsMzA3MzIsMzA3MzMsMzA3MzQsMzA3MzUsMzA3 MzYsMzA3MzcsMzA3MzgsMzA3MzksMzA3NDAsMzA3NDEsMzA3NDIsCiszMDc0MywzMDc0NCwzMDc0 NSwzMDc0NiwzMDc0NywzMDc0OCwzMDc0OSwzMDc1MCwzMDc1MSwzMDc1MiwzMDc1MywzMDc1NCwK KzMwNzU1LDMwNzU2LDMwNzU3LDMwNzU4LDMwNzU5LDMwNzYwLDMwNzYxLDMwNzYyLDMwNzYzLDMw NzY0LDMwNzY1LDMwNzY2LAorMzA3NjcsMzA3NjgsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzIsMzA3 NzMsMzA3NzQsMzA3NzUsMzA3NzYsMzA3NzcsMzA3NzgsCiszMDc3OSwzMDc4MCwzMDc4MSwzMDc4 MiwzMDc4MywzMDc4NCwzMDc4NSwzMDc4NiwzMDc4NywzMDc4OCwzMDc4OSwzMDc5MCwKKzMwNzkx LDMwNzkyLDMwNzkzLDMwNzk0LDMwNzk1LDMwNzk2LDMwNzk3LDMwNzk4LDMwNzk5LDMwODAwLDMw ODAxLDMwODAyLAorMzA4MDMsMzA4MDQsMzA4MDUsMzA4MDYsMzA4MDcsMzA4MDgsMzA4MDksMzA4 MTAsMzA4MTEsMzA4MTIsMzA4MTMsMzA4MTQsCiszMDgxNSwzMDgxNiwzMDgxNywzMDgxOCwzMDgx OSwzMDgyMCwzMDgyMSwzMDgyMiwzMDgyMywzMDgyNCwzMDgyNSwzMDgyNiwKKzMwODI3LDMwODI4 LDMwODI5LDMwODMwLDMwODMxLDMwODMyLDMwODMzLDMwODM0LDMwODM1LDMwODM2LDMwODM3LDMw ODM4LAorMzA4MzksMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDQsMzA4NDUsMzA4NDYsMzA4 NDcsMzA4NDgsMzA4NDksMzA4NTAsCiszMDg1MSwzMDg1MiwzMDg1MywzMDg1NCwzMDg1NSwzMDg1 NiwzMDg1NywzMDg1OCwzMDg1OSwzMDg2MCwzMDg2MSwzMDg2MiwKKzMwODYzLDMwODY0LDMwODY1 LDMwODY2LDMwODY3LDMwODY4LDMwODY5LDMwODcwLDMwODcxLDMwODcyLDMwODczLDMwODc0LAor MzA4NzUsMzA4NzYsMzA4NzcsMzA4NzgsMzA4NzksMzA4ODAsMzA4ODEsMzA4ODIsMzA4ODMsMzA4 ODQsMzA4ODUsMzA4ODYsCiszMDg4NywzMDg4OCwzMDg4OSwzMDg5MCwzMDg5MSwzMDg5MiwzMDg5 MywzMDg5NCwzMDg5NSwzMDg5NiwzMDg5NywzMDg5OCwKKzMwODk5LDMwOTAwLDMwOTAxLDMwOTAy LDMwOTAzLDMwOTA0LDMwOTA1LDMwOTA2LDMwOTA3LDMwOTA4LDMwOTA5LDMwOTEwLAorMzA5MTEs MzA5MTIsMzA5MTMsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTcsMzA5MTgsMzA5MTksMzA5MjAsMzA5 MjEsMzA5MjIsCiszMDkyMywzMDkyNCwzMDkyNSwzMDkyNiwzMDkyNywzMDkyOCwzMDkyOSwzMDkz MCwzMDkzMSwzMDkzMiwzMDkzMywzMDkzNCwKKzMwOTM1LDMwOTM2LDMwOTM3LDMwOTM4LDMwOTM5 LDMwOTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTQ2LAorMzA5NDcsMzA5NDgs MzA5NDksMzA5NTAsMzA5NTEsMzA5NTIsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTYsMzA5NTcsMzA5 NTgsCiszMDk1OSwzMDk2MCwzMDk2MSwzMDk2MiwzMDk2MywzMDk2NCwzMDk2NSwzMDk2NiwzMDk2 NywzMDk2OCwzMDk2OSwzMDk3MCwKKzMwOTcxLDMwOTcyLDMwOTczLDMwOTc0LDMwOTc1LDMwOTc2 LDMwOTc3LDMwOTc4LDMwOTc5LDMwOTgwLDMwOTgxLDMwOTgyLAorMzA5ODMsMzA5ODQsMzA5ODUs MzA5ODYsMzA5ODcsMzA5ODgsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsCisz MDk5NSwzMDk5NiwzMDk5NywzMDk5OCwzMDk5OSwzMTAwMCwzMTAwMSwzMTAwMiwzMTAwMywzMTAw NCwzMTAwNSwzMTAwNiwKKzMxMDA3LDMxMDA4LDMxMDA5LDMxMDEwLDMxMDExLDMxMDEyLDMxMDEz LDMxMDE0LDMxMDE1LDMxMDE2LDMxMDE3LDMxMDE4LAorMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIs MzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjgsMzEwMjksMzEwMzAsCiszMTAzMSwz MTAzMiwzMTAzMywzMTAzNCwzMTAzNSwzMTAzNiwzMTAzNywzMTAzOCwzMTAzOSwzMTA0MCwzMTA0 MSwzMTA0MiwKKzMxMDQzLDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDQ3LDMxMDQ4LDMxMDQ5LDMxMDUw LDMxMDUxLDMxMDUyLDMxMDUzLDMxMDU0LAorMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNTks MzEwNjAsMzEwNjEsMzEwNjIsMzEwNjMsMzEwNjQsMzEwNjUsMzEwNjYsCiszMTA2NywzMTA2OCwz MTA2OSwzMTA3MCwzMTA3MSwzMTA3MiwzMTA3MywzMTA3NCwzMTA3NSwzMTA3NiwzMTA3NywzMTA3 OCwKKzMxMDc5LDMxMDgwLDMxMDgxLDMxMDgyLDMxMDgzLDMxMDg0LDMxMDg1LDMxMDg2LDMxMDg3 LDMxMDg4LDMxMDg5LDMxMDkwLAorMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTUsMzEwOTYs MzEwOTcsMzEwOTgsMzEwOTksMzExMDAsMzExMDEsMzExMDIsCiszMTEwMywzMTEwNCwzMTEwNSwz MTEwNiwzMTEwNywzMTEwOCwzMTEwOSwzMTExMCwzMTExMSwzMTExMiwzMTExMywzMTExNCwKKzMx MTE1LDMxMTE2LDMxMTE3LDMxMTE4LDMxMTE5LDMxMTIwLDMxMTIxLDMxMTIyLDMxMTIzLDMxMTI0 LDMxMTI1LDMxMTI2LAorMzExMjcsMzExMjgsMzExMjksMzExMzAsMzExMzEsMzExMzIsMzExMzMs MzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsCiszMTEzOSwzMTE0MCwzMTE0MSwzMTE0Miwz MTE0MywzMTE0NCwzMTE0NSwzMTE0NiwzMTE0NywzMTE0OCwzMTE0OSwzMTE1MCwKKzMxMTUxLDMx MTUyLDMxMTUzLDMxMTU0LDMxMTU1LDMxMTU2LDMxMTU3LDMxMTU4LDMxMTU5LDMxMTYwLDMxMTYx LDMxMTYyLAorMzExNjMsMzExNjQsMzExNjUsMzExNjYsMzExNjcsMzExNjgsMzExNjksMzExNzAs MzExNzEsMzExNzIsMzExNzMsMzExNzQsCiszMTE3NSwzMTE3NiwzMTE3NywzMTE3OCwzMTE3OSwz MTE4MCwzMTE4MSwzMTE4MiwzMTE4MywzMTE4NCwzMTE4NSwzMTE4NiwKKzMxMTg3LDMxMTg4LDMx MTg5LDMxMTkwLDMxMTkxLDMxMTkyLDMxMTkzLDMxMTk0LDMxMTk1LDMxMTk2LDMxMTk3LDMxMTk4 LAorMzExOTksMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDMsMzEyMDQsMzEyMDUsMzEyMDYsMzEyMDcs MzEyMDgsMzEyMDksMzEyMTAsCiszMTIxMSwzMTIxMiwzMTIxMywzMTIxNCwzMTIxNSwzMTIxNiwz MTIxNywzMTIxOCwzMTIxOSwzMTIyMCwzMTIyMSwzMTIyMiwKKzMxMjIzLDMxMjI0LDMxMjI1LDMx MjI2LDMxMjI3LDMxMjI4LDMxMjI5LDMxMjMwLDMxMjMxLDMxMjMyLDMxMjMzLDMxMjM0LAorMzEy MzUsMzEyMzYsMzEyMzcsMzEyMzgsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDMsMzEyNDQs MzEyNDUsMzEyNDYsCiszMTI0NywzMTI0OCwzMTI0OSwzMTI1MCwzMTI1MSwzMTI1MiwzMTI1Mywz MTI1NCwzMTI1NSwzMTI1NiwzMTI1NywzMTI1OCwKKzMxMjU5LDMxMjYwLDMxMjYxLDMxMjYyLDMx MjYzLDMxMjY0LDMxMjY1LDMxMjY2LDMxMjY3LDMxMjY4LDMxMjY5LDMxMjcwLAorMzEyNzEsMzEy NzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEs MzEyODIsCiszMTI4MywzMTI4NCwzMTI4NSwzMTI4NiwzMTI4NywzMTI4OCwzMTI4OSwzMTI5MCwz MTI5MSwzMTI5MiwzMTI5MywzMTI5NCwKKzMxMjk1LDMxMjk2LDMxMjk3LDMxMjk4LDMxMjk5LDMx MzAwLDMxMzAxLDMxMzAyLDMxMzAzLDMxMzA0LDMxMzA1LDMxMzA2LAorMzEzMDcsMzEzMDgsMzEz MDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTMsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgs CiszMTMxOSwzMTMyMCwzMTMyMSwzMTMyMiwzMTMyMywzMTMyNCwzMTMyNSwzMTMyNiwzMTMyNywz MTMyOCwzMTMyOSwzMTMzMCwKKzMxMzMxLDMxMzMyLDMxMzMzLDMxMzM0LDMxMzM1LDMxMzM2LDMx MzM3LDMxMzM4LDMxMzM5LDMxMzQwLDMxMzQxLDMxMzQyLAorMzEzNDMsMzEzNDQsMzEzNDUsMzEz NDYsMzEzNDcsMzEzNDgsMzEzNDksMzEzNTAsMzEzNTEsMzEzNTIsMzEzNTMsMzEzNTQsCiszMTM1 NSwzMTM1NiwzMTM1NywzMTM1OCwzMTM1OSwzMTM2MCwzMTM2MSwzMTM2MiwzMTM2MywzMTM2NCwz MTM2NSwzMTM2NiwKKzMxMzY3LDMxMzY4LDMxMzY5LDMxMzcwLDMxMzcxLDMxMzcyLDMxMzczLDMx Mzc0LDMxMzc1LDMxMzc2LDMxMzc3LDMxMzc4LAorMzEzNzksMzEzODAsMzEzODEsMzEzODIsMzEz ODMsMzEzODQsMzEzODUsMzEzODYsMzEzODcsMzEzODgsMzEzODksMzEzOTAsCiszMTM5MSwzMTM5 MiwzMTM5MywzMTM5NCwzMTM5NSwzMTM5NiwzMTM5NywzMTM5OCwzMTM5OSwzMTQwMCwzMTQwMSwz MTQwMiwKKzMxNDAzLDMxNDA0LDMxNDA1LDMxNDA2LDMxNDA3LDMxNDA4LDMxNDA5LDMxNDEwLDMx NDExLDMxNDEyLDMxNDEzLDMxNDE0LAorMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0 MjAsMzE0MjEsMzE0MjIsMzE0MjMsMzE0MjQsMzE0MjUsMzE0MjYsCiszMTQyNywzMTQyOCwzMTQy OSwzMTQzMCwzMTQzMSwzMTQzMiwzMTQzMywzMTQzNCwzMTQzNSwzMTQzNiwzMTQzNywzMTQzOCwK KzMxNDM5LDMxNDQwLDMxNDQxLDMxNDQyLDMxNDQzLDMxNDQ0LDMxNDQ1LDMxNDQ2LDMxNDQ3LDMx NDQ4LDMxNDQ5LDMxNDUwLAorMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTQsMzE0NTUsMzE0NTYsMzE0 NTcsMzE0NTgsMzE0NTksMzE0NjAsMzE0NjEsMzE0NjIsCiszMTQ2MywzMTQ2NCwzMTQ2NSwzMTQ2 NiwzMTQ2NywzMTQ2OCwzMTQ2OSwzMTQ3MCwzMTQ3MSwzMTQ3MiwzMTQ3MywzMTQ3NCwKKzMxNDc1 LDMxNDc2LDMxNDc3LDMxNDc4LDMxNDc5LDMxNDgwLDMxNDgxLDMxNDgyLDMxNDgzLDMxNDg0LDMx NDg1LDMxNDg2LAorMzE0ODcsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTEsMzE0OTIsMzE0OTMsMzE0 OTQsMzE0OTUsMzE0OTYsMzE0OTcsMzE0OTgsCiszMTQ5OSwzMTUwMCwzMTUwMSwzMTUwMiwzMTUw MywzMTUwNCwzMTUwNSwzMTUwNiwzMTUwNywzMTUwOCwzMTUwOSwzMTUxMCwKKzMxNTExLDMxNTEy LDMxNTEzLDMxNTE0LDMxNTE1LDMxNTE2LDMxNTE3LDMxNTE4LDMxNTE5LDMxNTIwLDMxNTIxLDMx NTIyLAorMzE1MjMsMzE1MjQsMzE1MjUsMzE1MjYsMzE1MjcsMzE1MjgsMzE1MjksMzE1MzAsMzE1 MzEsMzE1MzIsMzE1MzMsMzE1MzQsCiszMTUzNSwzMTUzNiwzMTUzNywzMTUzOCwzMTUzOSwzMTU0 MCwzMTU0MSwzMTU0MiwzMTU0MywzMTU0NCwzMTU0NSwzMTU0NiwKKzMxNTQ3LDMxNTQ4LDMxNTQ5 LDMxNTUwLDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU0LDMxNTU1LDMxNTU2LDMxNTU3LDMxNTU4LAor MzE1NTksMzE1NjAsMzE1NjEsMzE1NjIsMzE1NjMsMzE1NjQsMzE1NjUsMzE1NjYsMzE1NjcsMzE1 NjgsMzE1NjksMzE1NzAsCiszMTU3MSwzMTU3MiwzMTU3MywzMTU3NCwzMTU3NSwzMTU3NiwzMTU3 NywzMTU3OCwzMTU3OSwzMTU4MCwzMTU4MSwzMTU4MiwKKzMxNTgzLDMxNTg0LDMxNTg1LDMxNTg2 LDMxNTg3LDMxNTg4LDMxNTg5LDMxNTkwLDMxNTkxLDMxNTkyLDMxNTkzLDMxNTk0LAorMzE1OTUs MzE1OTYsMzE1OTcsMzE1OTgsMzE1OTksMzE2MDAsMzE2MDEsMzE2MDIsMzE2MDMsMzE2MDQsMzE2 MDUsMzE2MDYsCiszMTYwNywzMTYwOCwzMTYwOSwzMTYxMCwzMTYxMSwzMTYxMiwzMTYxMywzMTYx NCwzMTYxNSwzMTYxNiwzMTYxNywzMTYxOCwKKzMxNjE5LDMxNjIwLDMxNjIxLDMxNjIyLDMxNjIz LDMxNjI0LDMxNjI1LDMxNjI2LDMxNjI3LDMxNjI4LDMxNjI5LDMxNjMwLAorMzE2MzEsMzE2MzIs MzE2MzMsMzE2MzQsMzE2MzUsMzE2MzYsMzE2MzcsMzE2MzgsMzE2MzksMzE2NDAsMzE2NDEsMzE2 NDIsCiszMTY0MywzMTY0NCwzMTY0NSwzMTY0NiwzMTY0NywzMTY0OCwzMTY0OSwzMTY1MCwzMTY1 MSwzMTY1MiwzMTY1MywzMTY1NCwKKzMxNjU1LDMxNjU2LDMxNjU3LDMxNjU4LDMxNjU5LDMxNjYw LDMxNjYxLDMxNjYyLDMxNjYzLDMxNjY0LDMxNjY1LDMxNjY2LAorMzE2NjcsMzE2NjgsMzE2Njks MzE2NzAsMzE2NzEsMzE2NzIsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsCisz MTY3OSwzMTY4MCwzMTY4MSwzMTY4MiwzMTY4MywzMTY4NCwzMTY4NSwzMTY4NiwzMTY4NywzMTY4 OCwzMTY4OSwzMTY5MCwKKzMxNjkxLDMxNjkyLDMxNjkzLDMxNjk0LDMxNjk1LDMxNjk2LDMxNjk3 LDMxNjk4LDMxNjk5LDMxNzAwLDMxNzAxLDMxNzAyLAorMzE3MDMsMzE3MDQsMzE3MDUsMzE3MDYs MzE3MDcsMzE3MDgsMzE3MDksMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTMsMzE3MTQsCiszMTcxNSwz MTcxNiwzMTcxNywzMTcxOCwzMTcxOSwzMTcyMCwzMTcyMSwzMTcyMiwzMTcyMywzMTcyNCwzMTcy NSwzMTcyNiwKKzMxNzI3LDMxNzI4LDMxNzI5LDMxNzMwLDMxNzMxLDMxNzMyLDMxNzMzLDMxNzM0 LDMxNzM1LDMxNzM2LDMxNzM3LDMxNzM4LAorMzE3MzksMzE3NDAsMzE3NDEsMzE3NDIsMzE3NDMs MzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsCiszMTc1MSwzMTc1Miwz MTc1MywzMTc1NCwzMTc1NSwzMTc1NiwzMTc1NywzMTc1OCwzMTc1OSwzMTc2MCwzMTc2MSwzMTc2 MiwKKzMxNzYzLDMxNzY0LDMxNzY1LDMxNzY2LDMxNzY3LDMxNzY4LDMxNzY5LDMxNzcwLDMxNzcx LDMxNzcyLDMxNzczLDMxNzc0LAorMzE3NzUsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAs MzE3ODEsMzE3ODIsMzE3ODMsMzE3ODQsMzE3ODUsMzE3ODYsCiszMTc4NywzMTc4OCwzMTc4OSwz MTc5MCwzMTc5MSwzMTc5MiwzMTc5MywzMTc5NCwzMTc5NSwzMTc5NiwzMTc5NywzMTc5OCwKKzMx Nzk5LDMxODAwLDMxODAxLDMxODAyLDMxODAzLDMxODA0LDMxODA1LDMxODA2LDMxODA3LDMxODA4 LDMxODA5LDMxODEwLAorMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcs MzE4MTgsMzE4MTksMzE4MjAsMzE4MjEsMzE4MjIsCiszMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwz MTgyNywzMTgyOCwzMTgyOSwzMTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgzNCwKKzMxODM1LDMx ODM2LDMxODM3LDMxODM4LDMxODM5LDMxODQwLDMxODQxLDMxODQyLDMxODQzLDMxODQ0LDMxODQ1 LDMxODQ2LAorMzE4NDcsMzE4NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4NTQs MzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsCiszMTg1OSwzMTg2MCwzMTg2MSwzMTg2MiwzMTg2Mywz MTg2NCwzMTg2NSwzMTg2NiwzMTg2NywzMTg2OCwzMTg2OSwzMTg3MCwKKzMxODcxLDMxODcyLDMx ODczLDMxODc0LDMxODc1LDMxODc2LDMxODc3LDMxODc4LDMxODc5LDMxODgwLDMxODgxLDMxODgy LAorMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcsMzE4ODgsMzE4ODksMzE4OTAsMzE4OTEs MzE4OTIsMzE4OTMsMzE4OTQsCiszMTg5NSwzMTg5NiwzMTg5NywzMTg5OCwzMTg5OSwzMTkwMCwz MTkwMSwzMTkwMiwzMTkwMywzMTkwNCwzMTkwNSwzMTkwNiwKKzMxOTA3LDMxOTA4LDMxOTA5LDMx OTEwLDMxOTExLDMxOTEyLDMxOTEzLDMxOTE0LDMxOTE1LDMxOTE2LDMxOTE3LDMxOTE4LAorMzE5 MTksMzE5MjAsMzE5MjEsMzE5MjIsMzE5MjMsMzE5MjQsMzE5MjUsMzE5MjYsMzE5MjcsMzE5Mjgs MzE5MjksMzE5MzAsCiszMTkzMSwzMTkzMiwzMTkzMywzMTkzNCwzMTkzNSwzMTkzNiwzMTkzNywz MTkzOCwzMTkzOSwzMTk0MCwzMTk0MSwzMTk0MiwKKzMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ2LDMx OTQ3LDMxOTQ4LDMxOTQ5LDMxOTUwLDMxOTUxLDMxOTUyLDMxOTUzLDMxOTU0LAorMzE5NTUsMzE5 NTYsMzE5NTcsMzE5NTgsMzE5NTksMzE5NjAsMzE5NjEsMzE5NjIsMzE5NjMsMzE5NjQsMzE5NjUs MzE5NjYsCiszMTk2NywzMTk2OCwzMTk2OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3MywzMTk3NCwz MTk3NSwzMTk3NiwzMTk3NywzMTk3OCwKKzMxOTc5LDMxOTgwLDMxOTgxLDMxOTgyLDMxOTgzLDMx OTg0LDMxOTg1LDMxOTg2LDMxOTg3LDMxOTg4LDMxOTg5LDMxOTkwLAorMzE5OTEsMzE5OTIsMzE5 OTMsMzE5OTQsMzE5OTUsMzE5OTYsMzE5OTcsMzE5OTgsMzE5OTksMzIwMDAsMzIwMDEsMzIwMDIs CiszMjAwMywzMjAwNCwzMjAwNSwzMjAwNiwzMjAwNywzMjAwOCwzMjAwOSwzMjAxMCwzMjAxMSwz MjAxMiwzMjAxMywzMjAxNCwKKzMyMDE1LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIwLDMy MDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LAorMzIwMjcsMzIwMjgsMzIwMjksMzIw MzAsMzIwMzEsMzIwMzIsMzIwMzMsMzIwMzQsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsCiszMjAz OSwzMjA0MCwzMjA0MSwzMjA0MiwzMjA0MywzMjA0NCwzMjA0NSwzMjA0NiwzMjA0NywzMjA0OCwz MjA0OSwzMjA1MCwKKzMyMDUxLDMyMDUyLDMyMDUzLDMyMDU0LDMyMDU1LDMyMDU2LDMyMDU3LDMy MDU4LDMyMDU5LDMyMDYwLDMyMDYxLDMyMDYyLAorMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIw NjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsCiszMjA3NSwzMjA3 NiwzMjA3NywzMjA3OCwzMjA3OSwzMjA4MCwzMjA4MSwzMjA4MiwzMjA4MywzMjA4NCwzMjA4NSwz MjA4NiwKKzMyMDg3LDMyMDg4LDMyMDg5LDMyMDkwLDMyMDkxLDMyMDkyLDMyMDkzLDMyMDk0LDMy MDk1LDMyMDk2LDMyMDk3LDMyMDk4LAorMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIx MDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTAsCiszMjExMSwzMjExMiwzMjEx MywzMjExNCwzMjExNSwzMjExNiwzMjExNywzMjExOCwzMjExOSwzMjEyMCwzMjEyMSwzMjEyMiwK KzMyMTIzLDMyMTI0LDMyMTI1LDMyMTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMy MTMyLDMyMTMzLDMyMTM0LAorMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIx NDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsCiszMjE0NywzMjE0OCwzMjE0OSwzMjE1 MCwzMjE1MSwzMjE1MiwzMjE1MywzMjE1NCwzMjE1NSwzMjE1NiwzMjE1NywzMjE1OCwKKzMyMTU5 LDMyMTYwLDMyMTYxLDMyMTYyLDMyMTYzLDMyMTY0LDMyMTY1LDMyMTY2LDMyMTY3LDMyMTY4LDMy MTY5LDMyMTcwLAorMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzQsMzIxNzUsMzIxNzYsMzIxNzcsMzIx NzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsCiszMjE4MywzMjE4NCwzMjE4NSwzMjE4NiwzMjE4 NywzMjE4OCwzMjE4OSwzMjE5MCwzMjE5MSwzMjE5MiwzMjE5MywzMjE5NCwKKzMyMTk1LDMyMTk2 LDMyMTk3LDMyMTk4LDMyMTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMy MjA2LAorMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIy MTUsMzIyMTYsMzIyMTcsMzIyMTgsCiszMjIxOSwzMjIyMCwzMjIyMSwzMjIyMiwzMjIyMywzMjIy NCwzMjIyNSwzMjIyNiwzMjIyNywzMjIyOCwzMjIyOSwzMjIzMCwKKzMyMjMxLDMyMjMyLDMyMjMz LDMyMjM0LDMyMjM1LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMyMjQwLDMyMjQxLDMyMjQyLAor MzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMzIyNTEsMzIy NTIsMzIyNTMsMzIyNTQsCiszMjI1NSwzMjI1NiwzMjI1NywzMjI1OCwzMjI1OSwzMjI2MCwzMjI2 MSwzMjI2MiwzMjI2MywzMjI2NCwzMjI2NSwzMjI2NiwKKzMyMjY3LDMyMjY4LDMyMjY5LDMyMjcw LDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LAorMzIyNzks MzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIy ODksMzIyOTAsCiszMjI5MSwzMjI5MiwzMjI5MywzMjI5NCwzMjI5NSwzMjI5NiwzMjI5NywzMjI5 OCwzMjI5OSwzMjMwMCwzMjMwMSwzMjMwMiwKKzMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2LDMyMzA3 LDMyMzA4LDMyMzA5LDMyMzEwLDMyMzExLDMyMzEyLDMyMzEzLDMyMzE0LAorMzIzMTUsMzIzMTYs MzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjEsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIz MjYsCiszMjMyNywzMjMyOCwzMjMyOSwzMjMzMCwzMjMzMSwzMjMzMiwzMjMzMywzMjMzNCwzMjMz NSwzMjMzNiwzMjMzNywzMjMzOCwKKzMyMzM5LDMyMzQwLDMyMzQxLDMyMzQyLDMyMzQzLDMyMzQ0 LDMyMzQ1LDMyMzQ2LDMyMzQ3LDMyMzQ4LDMyMzQ5LDMyMzUwLAorMzIzNTEsMzIzNTIsMzIzNTMs MzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsCisz MjM2MywzMjM2NCwzMjM2NSwzMjM2NiwzMjM2NywzMjM2OCwzMjM2OSwzMjM3MCwzMjM3MSwzMjM3 MiwzMjM3MywzMjM3NCwKKzMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgwLDMyMzgx LDMyMzgyLDMyMzgzLDMyMzg0LDMyMzg1LDMyMzg2LAorMzIzODcsMzIzODgsMzIzODksMzIzOTAs MzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsCiszMjM5OSwz MjQwMCwzMjQwMSwzMjQwMiwzMjQwMywzMjQwNCwzMjQwNSwzMjQwNiwzMjQwNywzMjQwOCwzMjQw OSwzMjQxMCwKKzMyNDExLDMyNDEyLDMyNDEzLDMyNDE0LDMyNDE1LDMyNDE2LDMyNDE3LDMyNDE4 LDMyNDE5LDMyNDIwLDMyNDIxLDMyNDIyLAorMzI0MjMsMzI0MjQsMzI0MjUsMzI0MjYsMzI0Mjcs MzI0MjgsMzI0MjksMzI0MzAsMzI0MzEsMzI0MzIsMzI0MzMsMzI0MzQsCiszMjQzNSwzMjQzNiwz MjQzNywzMjQzOCwzMjQzOSwzMjQ0MCwzMjQ0MSwzMjQ0MiwzMjQ0MywzMjQ0NCwzMjQ0NSwzMjQ0 NiwKKzMyNDQ3LDMyNDQ4LDMyNDQ5LDMyNDUwLDMyNDUxLDMyNDUyLDMyNDUzLDMyNDU0LDMyNDU1 LDMyNDU2LDMyNDU3LDMyNDU4LAorMzI0NTksMzI0NjAsMzI0NjEsMzI0NjIsMzI0NjMsMzI0NjQs MzI0NjUsMzI0NjYsMzI0NjcsMzI0NjgsMzI0NjksMzI0NzAsCiszMjQ3MSwzMjQ3MiwzMjQ3Mywz MjQ3NCwzMjQ3NSwzMjQ3NiwzMjQ3NywzMjQ3OCwzMjQ3OSwzMjQ4MCwzMjQ4MSwzMjQ4MiwKKzMy NDgzLDMyNDg0LDMyNDg1LDMyNDg2LDMyNDg3LDMyNDg4LDMyNDg5LDMyNDkwLDMyNDkxLDMyNDky LDMyNDkzLDMyNDk0LAorMzI0OTUsMzI0OTYsMzI0OTcsMzI0OTgsMzI0OTksMzI1MDAsMzI1MDEs MzI1MDIsMzI1MDMsMzI1MDQsMzI1MDUsMzI1MDYsCiszMjUwNywzMjUwOCwzMjUwOSwzMjUxMCwz MjUxMSwzMjUxMiwzMjUxMywzMjUxNCwzMjUxNSwzMjUxNiwzMjUxNywzMjUxOCwKKzMyNTE5LDMy NTIwLDMyNTIxLDMyNTIyLDMyNTIzLDMyNTI0LDMyNTI1LDMyNTI2LDMyNTI3LDMyNTI4LDMyNTI5 LDMyNTMwLAorMzI1MzEsMzI1MzIsMzI1MzMsMzI1MzQsMzI1MzUsMzI1MzYsMzI1MzcsMzI1Mzgs MzI1MzksMzI1NDAsMzI1NDEsMzI1NDIsCiszMjU0MywzMjU0NCwzMjU0NSwzMjU0NiwzMjU0Nywz MjU0OCwzMjU0OSwzMjU1MCwzMjU1MSwzMjU1MiwzMjU1MywzMjU1NCwKKzMyNTU1LDMyNTU2LDMy NTU3LDMyNTU4LDMyNTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY0LDMyNTY1LDMyNTY2 LAorMzI1NjcsMzI1NjgsMzI1NjksMzI1NzAsMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUs MzI1NzYsMzI1NzcsMzI1NzgsCiszMjU3OSwzMjU4MCwzMjU4MSwzMjU4MiwzMjU4MywzMjU4NCwz MjU4NSwzMjU4NiwzMjU4NywzMjU4OCwzMjU4OSwzMjU5MCwKKzMyNTkxLDMyNTkyLDMyNTkzLDMy NTk0LDMyNTk1LDMyNTk2LDMyNTk3LDMyNTk4LDMyNTk5LDMyNjAwLDMyNjAxLDMyNjAyLAorMzI2 MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDcsMzI2MDgsMzI2MDksMzI2MTAsMzI2MTEsMzI2MTIs MzI2MTMsMzI2MTQsCiszMjYxNSwzMjYxNiwzMjYxNywzMjYxOCwzMjYxOSwzMjYyMCwzMjYyMSwz MjYyMiwzMjYyMywzMjYyNCwzMjYyNSwzMjYyNiwKKzMyNjI3LDMyNjI4LDMyNjI5LDMyNjMwLDMy NjMxLDMyNjMyLDMyNjMzLDMyNjM0LDMyNjM1LDMyNjM2LDMyNjM3LDMyNjM4LAorMzI2MzksMzI2 NDAsMzI2NDEsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDks MzI2NTAsCiszMjY1MSwzMjY1MiwzMjY1MywzMjY1NCwzMjY1NSwzMjY1NiwzMjY1NywzMjY1OCwz MjY1OSwzMjY2MCwzMjY2MSwzMjY2MiwKKzMyNjYzLDMyNjY0LDMyNjY1LDMyNjY2LDMyNjY3LDMy NjY4LDMyNjY5LDMyNjcwLDMyNjcxLDMyNjcyLDMyNjczLDMyNjc0LAorMzI2NzUsMzI2NzYsMzI2 NzcsMzI2NzgsMzI2NzksMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYs CiszMjY4NywzMjY4OCwzMjY4OSwzMjY5MCwzMjY5MSwzMjY5MiwzMjY5MywzMjY5NCwzMjY5NSwz MjY5NiwzMjY5NywzMjY5OCwKKzMyNjk5LDMyNzAwLDMyNzAxLDMyNzAyLDMyNzAzLDMyNzA0LDMy NzA1LDMyNzA2LDMyNzA3LDMyNzA4LDMyNzA5LDMyNzEwLAorMzI3MTEsMzI3MTIsMzI3MTMsMzI3 MTQsMzI3MTUsMzI3MTYsMzI3MTcsMzI3MTgsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsCiszMjcy MywzMjcyNCwzMjcyNSwzMjcyNiwzMjcyNywzMjcyOCwzMjcyOSwzMjczMCwzMjczMSwzMjczMiwz MjczMywzMjczNCwKKzMyNzM1LDMyNzM2LDMyNzM3LDMyNzM4LDMyNzM5LDMyNzQwLDMyNzQxLDMy NzQyLDMyNzQzLDMyNzQ0LDMyNzQ1LDMyNzQ2LAorMzI3NDcsMzI3NDgsMzI3NDksMzI3NTAsMzI3 NTEsMzI3NTIsMzI3NTMsMzI3NTQsMzI3NTUsMzI3NTYsMzI3NTcsMzI3NTgsCiszMjc1OSwzMjc2 MCwzMjc2MSwzMjc2MiwzMjc2MywzMjc2NCwzMjc2NSwzMjc2NiwzMjc2NywzMjc2OEwsMzI3NjlM LDMyNzcwTCwKKzMyNzcxTCwzMjc3MkwsMzI3NzNMLDMyNzc0TCwzMjc3NUwsMzI3NzZMLDMyNzc3 TCwzMjc3OEwsMzI3NzlMLDMyNzgwTCwKKzMyNzgxTCwzMjc4MkwsMzI3ODNMLDMyNzg0TCwzMjc4 NUwsMzI3ODZMLDMyNzg3TCwzMjc4OEwsMzI3ODlMLDMyNzkwTCwKKzMyNzkxTCwzMjc5MkwsMzI3 OTNMLDMyNzk0TCwzMjc5NUwsMzI3OTZMLDMyNzk3TCwzMjc5OEwsMzI3OTlMLDMyODAwTCwKKzMy ODAxTCwzMjgwMkwsMzI4MDNMLDMyODA0TCwzMjgwNUwsMzI4MDZMLDMyODA3TCwzMjgwOEwsMzI4 MDlMLDMyODEwTCwKKzMyODExTCwzMjgxMkwsMzI4MTNMLDMyODE0TCwzMjgxNUwsMzI4MTZMLDMy ODE3TCwzMjgxOEwsMzI4MTlMLDMyODIwTCwKKzMyODIxTCwzMjgyMkwsMzI4MjNMLDMyODI0TCwz MjgyNUwsMzI4MjZMLDMyODI3TCwzMjgyOEwsMzI4MjlMLDMyODMwTCwKKzMyODMxTCwzMjgzMkws MzI4MzNMLDMyODM0TCwzMjgzNUwsMzI4MzZMLDMyODM3TCwzMjgzOEwsMzI4MzlMLDMyODQwTCwK KzMyODQxTCwzMjg0MkwsMzI4NDNMLDMyODQ0TCwzMjg0NUwsMzI4NDZMLDMyODQ3TCwzMjg0OEws MzI4NDlMLDMyODUwTCwKKzMyODUxTCwzMjg1MkwsMzI4NTNMLDMyODU0TCwzMjg1NUwsMzI4NTZM LDMyODU3TCwzMjg1OEwsMzI4NTlMLDMyODYwTCwKKzMyODYxTCwzMjg2MkwsMzI4NjNMLDMyODY0 TCwzMjg2NUwsMzI4NjZMLDMyODY3TCwzMjg2OEwsMzI4NjlMLDMyODcwTCwKKzMyODcxTCwzMjg3 MkwsMzI4NzNMLDMyODc0TCwzMjg3NUwsMzI4NzZMLDMyODc3TCwzMjg3OEwsMzI4NzlMLDMyODgw TCwKKzMyODgxTCwzMjg4MkwsMzI4ODNMLDMyODg0TCwzMjg4NUwsMzI4ODZMLDMyODg3TCwzMjg4 OEwsMzI4ODlMLDMyODkwTCwKKzMyODkxTCwzMjg5MkwsMzI4OTNMLDMyODk0TCwzMjg5NUwsMzI4 OTZMLDMyODk3TCwzMjg5OEwsMzI4OTlMLDMyOTAwTCwKKzMyOTAxTCwzMjkwMkwsMzI5MDNMLDMy OTA0TCwzMjkwNUwsMzI5MDZMLDMyOTA3TCwzMjkwOEwsMzI5MDlMLDMyOTEwTCwKKzMyOTExTCwz MjkxMkwsMzI5MTNMLDMyOTE0TCwzMjkxNUwsMzI5MTZMLDMyOTE3TCwzMjkxOEwsMzI5MTlMLDMy OTIwTCwKKzMyOTIxTCwzMjkyMkwsMzI5MjNMLDMyOTI0TCwzMjkyNUwsMzI5MjZMLDMyOTI3TCwz MjkyOEwsMzI5MjlMLDMyOTMwTCwKKzMyOTMxTCwzMjkzMkwsMzI5MzNMLDMyOTM0TCwzMjkzNUws MzI5MzZMLDMyOTM3TCwzMjkzOEwsMzI5MzlMLDMyOTQwTCwKKzMyOTQxTCwzMjk0MkwsMzI5NDNM LDMyOTQ0TCwzMjk0NUwsMzI5NDZMLDMyOTQ3TCwzMjk0OEwsMzI5NDlMLDMyOTUwTCwKKzMyOTUx TCwzMjk1MkwsMzI5NTNMLDMyOTU0TCwzMjk1NUwsMzI5NTZMLDMyOTU3TCwzMjk1OEwsMzI5NTlM LDMyOTYwTCwKKzMyOTYxTCwzMjk2MkwsMzI5NjNMLDMyOTY0TCwzMjk2NUwsMzI5NjZMLDMyOTY3 TCwzMjk2OEwsMzI5NjlMLDMyOTcwTCwKKzMyOTcxTCwzMjk3MkwsMzI5NzNMLDMyOTc0TCwzMjk3 NUwsMzI5NzZMLDMyOTc3TCwzMjk3OEwsMzI5NzlMLDMyOTgwTCwKKzMyOTgxTCwzMjk4MkwsMzI5 ODNMLDMyOTg0TCwzMjk4NUwsMzI5ODZMLDMyOTg3TCwzMjk4OEwsMzI5ODlMLDMyOTkwTCwKKzMy OTkxTCwzMjk5MkwsMzI5OTNMLDMyOTk0TCwzMjk5NUwsMzI5OTZMLDMyOTk3TCwzMjk5OEwsMzI5 OTlMLDMzMDAwTCwKKzMzMDAxTCwzMzAwMkwsMzMwMDNMLDMzMDA0TCwzMzAwNUwsMzMwMDZMLDMz MDA3TCwzMzAwOEwsMzMwMDlMLDMzMDEwTCwKKzMzMDExTCwzMzAxMkwsMzMwMTNMLDMzMDE0TCwz MzAxNUwsMzMwMTZMLDMzMDE3TCwzMzAxOEwsMzMwMTlMLDMzMDIwTCwKKzMzMDIxTCwzMzAyMkws MzMwMjNMLDMzMDI0TCwzMzAyNUwsMzMwMjZMLDMzMDI3TCwzMzAyOEwsMzMwMjlMLDMzMDMwTCwK KzMzMDMxTCwzMzAzMkwsMzMwMzNMLDMzMDM0TCwzMzAzNUwsMzMwMzZMLDMzMDM3TCwzMzAzOEws MzMwMzlMLDMzMDQwTCwKKzMzMDQxTCwzMzA0MkwsMzMwNDNMLDMzMDQ0TCwzMzA0NUwsMzMwNDZM LDMzMDQ3TCwzMzA0OEwsMzMwNDlMLDMzMDUwTCwKKzMzMDUxTCwzMzA1MkwsMzMwNTNMLDMzMDU0 TCwzMzA1NUwsMzMwNTZMLDMzMDU3TCwzMzA1OEwsMzMwNTlMLDMzMDYwTCwKKzMzMDYxTCwzMzA2 MkwsMzMwNjNMLDMzMDY0TCwzMzA2NUwsMzMwNjZMLDMzMDY3TCwzMzA2OEwsMzMwNjlMLDMzMDcw TCwKKzMzMDcxTCwzMzA3MkwsMzMwNzNMLDMzMDc0TCwzMzA3NUwsMzMwNzZMLDMzMDc3TCwzMzA3 OEwsMzMwNzlMLDMzMDgwTCwKKzMzMDgxTCwzMzA4MkwsMzMwODNMLDMzMDg0TCwzMzA4NUwsMzMw ODZMLDMzMDg3TCwzMzA4OEwsMzMwODlMLDMzMDkwTCwKKzMzMDkxTCwzMzA5MkwsMzMwOTNMLDMz MDk0TCwzMzA5NUwsMzMwOTZMLDMzMDk3TCwzMzA5OEwsMzMwOTlMLDMzMTAwTCwKKzMzMTAxTCwz MzEwMkwsMzMxMDNMLDMzMTA0TCwzMzEwNUwsMzMxMDZMLDMzMTA3TCwzMzEwOEwsMzMxMDlMLDMz MTEwTCwKKzMzMTExTCwzMzExMkwsMzMxMTNMLDMzMTE0TCwzMzExNUwsMzMxMTZMLDMzMTE3TCwz MzExOEwsMzMxMTlMLDMzMTIwTCwKKzMzMTIxTCwzMzEyMkwsMzMxMjNMLDMzMTI0TCwzMzEyNUws MzMxMjZMLDMzMTI3TCwzMzEyOEwsMzMxMjlMLDMzMTMwTCwKKzMzMTMxTCwzMzEzMkwsMzMxMzNM LDMzMTM0TCwzMzEzNUwsMzMxMzZMLDMzMTM3TCwzMzEzOEwsMzMxMzlMLDMzMTQwTCwKKzMzMTQx TCwzMzE0MkwsMzMxNDNMLDMzMTQ0TCwzMzE0NUwsMzMxNDZMLDMzMTQ3TCwzMzE0OEwsMzMxNDlM LDMzMTUwTCwKKzMzMTUxTCwzMzE1MkwsMzMxNTNMLDMzMTU0TCwzMzE1NUwsMzMxNTZMLDMzMTU3 TCwzMzE1OEwsMzMxNTlMLDMzMTYwTCwKKzMzMTYxTCwzMzE2MkwsMzMxNjNMLDMzMTY0TCwzMzE2 NUwsMzMxNjZMLDMzMTY3TCwzMzE2OEwsMzMxNjlMLDMzMTcwTCwKKzMzMTcxTCwzMzE3MkwsMzMx NzNMLDMzMTc0TCwzMzE3NUwsMzMxNzZMLDMzMTc3TCwzMzE3OEwsMzMxNzlMLDMzMTgwTCwKKzMz MTgxTCwzMzE4MkwsMzMxODNMLDMzMTg0TCwzMzE4NUwsMzMxODZMLDMzMTg3TCwzMzE4OEwsMzMx ODlMLDMzMTkwTCwKKzMzMTkxTCwzMzE5MkwsMzMxOTNMLDMzMTk0TCwzMzE5NUwsMzMxOTZMLDMz MTk3TCwzMzE5OEwsMzMxOTlMLDMzMjAwTCwKKzMzMjAxTCwzMzIwMkwsMzMyMDNMLDMzMjA0TCwz MzIwNUwsMzMyMDZMLDMzMjA3TCwzMzIwOEwsMzMyMDlMLDMzMjEwTCwKKzMzMjExTCwzMzIxMkws MzMyMTNMLDMzMjE0TCwzMzIxNUwsMzMyMTZMLDMzMjE3TCwzMzIxOEwsMzMyMTlMLDMzMjIwTCwK KzMzMjIxTCwzMzIyMkwsMzMyMjNMLDMzMjI0TCwzMzIyNUwsMzMyMjZMLDMzMjI3TCwzMzIyOEws MzMyMjlMLDMzMjMwTCwKKzMzMjMxTCwzMzIzMkwsMzMyMzNMLDMzMjM0TCwzMzIzNUwsMzMyMzZM LDMzMjM3TCwzMzIzOEwsMzMyMzlMLDMzMjQwTCwKKzMzMjQxTCwzMzI0MkwsMzMyNDNMLDMzMjQ0 TCwzMzI0NUwsMzMyNDZMLDMzMjQ3TCwzMzI0OEwsMzMyNDlMLDMzMjUwTCwKKzMzMjUxTCwzMzI1 MkwsMzMyNTNMLDMzMjU0TCwzMzI1NUwsMzMyNTZMLDMzMjU3TCwzMzI1OEwsMzMyNTlMLDMzMjYw TCwKKzMzMjYxTCwzMzI2MkwsMzMyNjNMLDMzMjY0TCwzMzI2NUwsMzMyNjZMLDMzMjY3TCwzMzI2 OEwsMzMyNjlMLDMzMjcwTCwKKzMzMjcxTCwzMzI3MkwsMzMyNzNMLDMzMjc0TCwzMzI3NUwsMzMy NzZMLDMzMjc3TCwzMzI3OEwsMzMyNzlMLDMzMjgwTCwKKzMzMjgxTCwzMzI4MkwsMzMyODNMLDMz Mjg0TCwzMzI4NUwsMzMyODZMLDMzMjg3TCwzMzI4OEwsMzMyODlMLDMzMjkwTCwKKzMzMjkxTCwz MzI5MkwsMzMyOTNMLDMzMjk0TCwzMzI5NUwsMzMyOTZMLDMzMjk3TCwzMzI5OEwsMzMyOTlMLDMz MzAwTCwKKzMzMzAxTCwzMzMwMkwsMzMzMDNMLDMzMzA0TCwzMzMwNUwsMzMzMDZMLDMzMzA3TCwz MzMwOEwsMzMzMDlMLDMzMzEwTCwKKzMzMzExTCwzMzMxMkwsMzMzMTNMLDMzMzE0TCwzMzMxNUws MzMzMTZMLDMzMzE3TCwzMzMxOEwsMzMzMTlMLDMzMzIwTCwKKzMzMzIxTCwzMzMyMkwsMzMzMjNM LDMzMzI0TCwzMzMyNUwsMzMzMjZMLDMzMzI3TCwzMzMyOEwsMzMzMjlMLDMzMzMwTCwKKzMzMzMx TCwzMzMzMkwsMzMzMzNMLDMzMzM0TCwzMzMzNUwsMzMzMzZMLDMzMzM3TCwzMzMzOEwsMzMzMzlM LDMzMzQwTCwKKzMzMzQxTCwzMzM0MkwsMzMzNDNMLDMzMzQ0TCwzMzM0NUwsMzMzNDZMLDMzMzQ3 TCwzMzM0OEwsMzMzNDlMLDMzMzUwTCwKKzMzMzUxTCwzMzM1MkwsMzMzNTNMLDMzMzU0TCwzMzM1 NUwsMzMzNTZMLDMzMzU3TCwzMzM1OEwsMzMzNTlMLDMzMzYwTCwKKzMzMzYxTCwzMzM2MkwsMzMz NjNMLDMzMzY0TCwzMzM2NUwsMzMzNjZMLDMzMzY3TCwzMzM2OEwsMzMzNjlMLDMzMzcwTCwKKzMz MzcxTCwzMzM3MkwsMzMzNzNMLDMzMzc0TCwzMzM3NUwsMzMzNzZMLDMzMzc3TCwzMzM3OEwsMzMz NzlMLDMzMzgwTCwKKzMzMzgxTCwzMzM4MkwsMzMzODNMLDMzMzg0TCwzMzM4NUwsMzMzODZMLDMz Mzg3TCwzMzM4OEwsMzMzODlMLDMzMzkwTCwKKzMzMzkxTCwzMzM5MkwsMzMzOTNMLDMzMzk0TCwz MzM5NUwsMzMzOTZMLDMzMzk3TCwzMzM5OEwsMzMzOTlMLDMzNDAwTCwKKzMzNDAxTCwzMzQwMkws MzM0MDNMLDMzNDA0TCwzMzQwNUwsMzM0MDZMLDMzNDA3TCwzMzQwOEwsMzM0MDlMLDMzNDEwTCwK KzMzNDExTCwzMzQxMkwsMzM0MTNMLDMzNDE0TCwzMzQxNUwsMzM0MTZMLDMzNDE3TCwzMzQxOEws MzM0MTlMLDMzNDIwTCwKKzMzNDIxTCwzMzQyMkwsMzM0MjNMLDMzNDI0TCwzMzQyNUwsMzM0MjZM LDMzNDI3TCwzMzQyOEwsMzM0MjlMLDMzNDMwTCwKKzMzNDMxTCwzMzQzMkwsMzM0MzNMLDMzNDM0 TCwzMzQzNUwsMzM0MzZMLDMzNDM3TCwzMzQzOEwsMzM0MzlMLDMzNDQwTCwKKzMzNDQxTCwzMzQ0 MkwsMzM0NDNMLDMzNDQ0TCwzMzQ0NUwsMzM0NDZMLDMzNDQ3TCwzMzQ0OEwsMzM0NDlMLDMzNDUw TCwKKzMzNDUxTCwzMzQ1MkwsMzM0NTNMLDMzNDU0TCwzMzQ1NUwsMzM0NTZMLDMzNDU3TCwzMzQ1 OEwsMzM0NTlMLDMzNDYwTCwKKzMzNDYxTCwzMzQ2MkwsMzM0NjNMLDMzNDY0TCwzMzQ2NUwsMzM0 NjZMLDMzNDY3TCwzMzQ2OEwsMzM0NjlMLDMzNDcwTCwKKzMzNDcxTCwzMzQ3MkwsMzM0NzNMLDMz NDc0TCwzMzQ3NUwsMzM0NzZMLDMzNDc3TCwzMzQ3OEwsMzM0NzlMLDMzNDgwTCwKKzMzNDgxTCwz MzQ4MkwsMzM0ODNMLDMzNDg0TCwzMzQ4NUwsMzM0ODZMLDMzNDg3TCwzMzQ4OEwsMzM0ODlMLDMz NDkwTCwKKzMzNDkxTCwzMzQ5MkwsMzM0OTNMLDMzNDk0TCwzMzQ5NUwsMzM0OTZMLDMzNDk3TCwz MzQ5OEwsMzM0OTlMLDMzNTAwTCwKKzMzNTAxTCwzMzUwMkwsMzM1MDNMLDMzNTA0TCwzMzUwNUws MzM1MDZMLDMzNTA3TCwzMzUwOEwsMzM1MDlMLDMzNTEwTCwKKzMzNTExTCwzMzUxMkwsMzM1MTNM LDMzNTE0TCwzMzUxNUwsMzM1MTZMLDMzNTE3TCwzMzUxOEwsMzM1MTlMLDMzNTIwTCwKKzMzNTIx TCwzMzUyMkwsMzM1MjNMLDMzNTI0TCwzMzUyNUwsMzM1MjZMLDMzNTI3TCwzMzUyOEwsMzM1MjlM LDMzNTMwTCwKKzMzNTMxTCwzMzUzMkwsMzM1MzNMLDMzNTM0TCwzMzUzNUwsMzM1MzZMLDMzNTM3 TCwzMzUzOEwsMzM1MzlMLDMzNTQwTCwKKzMzNTQxTCwzMzU0MkwsMzM1NDNMLDMzNTQ0TCwzMzU0 NUwsMzM1NDZMLDMzNTQ3TCwzMzU0OEwsMzM1NDlMLDMzNTUwTCwKKzMzNTUxTCwzMzU1MkwsMzM1 NTNMLDMzNTU0TCwzMzU1NUwsMzM1NTZMLDMzNTU3TCwzMzU1OEwsMzM1NTlMLDMzNTYwTCwKKzMz NTYxTCwzMzU2MkwsMzM1NjNMLDMzNTY0TCwzMzU2NUwsMzM1NjZMLDMzNTY3TCwzMzU2OEwsMzM1 NjlMLDMzNTcwTCwKKzMzNTcxTCwzMzU3MkwsMzM1NzNMLDMzNTc0TCwzMzU3NUwsMzM1NzZMLDMz NTc3TCwzMzU3OEwsMzM1NzlMLDMzNTgwTCwKKzMzNTgxTCwzMzU4MkwsMzM1ODNMLDMzNTg0TCwz MzU4NUwsMzM1ODZMLDMzNTg3TCwzMzU4OEwsMzM1ODlMLDMzNTkwTCwKKzMzNTkxTCwzMzU5Mkws MzM1OTNMLDMzNTk0TCwzMzU5NUwsMzM1OTZMLDMzNTk3TCwzMzU5OEwsMzM1OTlMLDMzNjAwTCwK KzMzNjAxTCwzMzYwMkwsMzM2MDNMLDMzNjA0TCwzMzYwNUwsMzM2MDZMLDMzNjA3TCwzMzYwOEws MzM2MDlMLDMzNjEwTCwKKzMzNjExTCwzMzYxMkwsMzM2MTNMLDMzNjE0TCwzMzYxNUwsMzM2MTZM LDMzNjE3TCwzMzYxOEwsMzM2MTlMLDMzNjIwTCwKKzMzNjIxTCwzMzYyMkwsMzM2MjNMLDMzNjI0 TCwzMzYyNUwsMzM2MjZMLDMzNjI3TCwzMzYyOEwsMzM2MjlMLDMzNjMwTCwKKzMzNjMxTCwzMzYz MkwsMzM2MzNMLDMzNjM0TCwzMzYzNUwsMzM2MzZMLDMzNjM3TCwzMzYzOEwsMzM2MzlMLDMzNjQw TCwKKzMzNjQxTCwzMzY0MkwsMzM2NDNMLDMzNjQ0TCwzMzY0NUwsMzM2NDZMLDMzNjQ3TCwzMzY0 OEwsMzM2NDlMLDMzNjUwTCwKKzMzNjUxTCwzMzY1MkwsMzM2NTNMLDMzNjU0TCwzMzY1NUwsMzM2 NTZMLDMzNjU3TCwzMzY1OEwsMzM2NTlMLDMzNjYwTCwKKzMzNjYxTCwzMzY2MkwsMzM2NjNMLDMz NjY0TCwzMzY2NUwsMzM2NjZMLDMzNjY3TCwzMzY2OEwsMzM2NjlMLDMzNjcwTCwKKzMzNjcxTCwz MzY3MkwsMzM2NzNMLDMzNjc0TCwzMzY3NUwsMzM2NzZMLDMzNjc3TCwzMzY3OEwsMzM2NzlMLDMz NjgwTCwKKzMzNjgxTCwzMzY4MkwsMzM2ODNMLDMzNjg0TCwzMzY4NUwsMzM2ODZMLDMzNjg3TCwz MzY4OEwsMzM2ODlMLDMzNjkwTCwKKzMzNjkxTCwzMzY5MkwsMzM2OTNMLDMzNjk0TCwzMzY5NUws MzM2OTZMLDMzNjk3TCwzMzY5OEwsMzM2OTlMLDMzNzAwTCwKKzMzNzAxTCwzMzcwMkwsMzM3MDNM LDMzNzA0TCwzMzcwNUwsMzM3MDZMLDMzNzA3TCwzMzcwOEwsMzM3MDlMLDMzNzEwTCwKKzMzNzEx TCwzMzcxMkwsMzM3MTNMLDMzNzE0TCwzMzcxNUwsMzM3MTZMLDMzNzE3TCwzMzcxOEwsMzM3MTlM LDMzNzIwTCwKKzMzNzIxTCwzMzcyMkwsMzM3MjNMLDMzNzI0TCwzMzcyNUwsMzM3MjZMLDMzNzI3 TCwzMzcyOEwsMzM3MjlMLDMzNzMwTCwKKzMzNzMxTCwzMzczMkwsMzM3MzNMLDMzNzM0TCwzMzcz NUwsMzM3MzZMLDMzNzM3TCwzMzczOEwsMzM3MzlMLDMzNzQwTCwKKzMzNzQxTCwzMzc0MkwsMzM3 NDNMLDMzNzQ0TCwzMzc0NUwsMzM3NDZMLDMzNzQ3TCwzMzc0OEwsMzM3NDlMLDMzNzUwTCwKKzMz NzUxTCwzMzc1MkwsMzM3NTNMLDMzNzU0TCwzMzc1NUwsMzM3NTZMLDMzNzU3TCwzMzc1OEwsMzM3 NTlMLDMzNzYwTCwKKzMzNzYxTCwzMzc2MkwsMzM3NjNMLDMzNzY0TCwzMzc2NUwsMzM3NjZMLDMz NzY3TCwzMzc2OEwsMzM3NjlMLDMzNzcwTCwKKzMzNzcxTCwzMzc3MkwsMzM3NzNMLDMzNzc0TCwz Mzc3NUwsMzM3NzZMLDMzNzc3TCwzMzc3OEwsMzM3NzlMLDMzNzgwTCwKKzMzNzgxTCwzMzc4Mkws MzM3ODNMLDMzNzg0TCwzMzc4NUwsMzM3ODZMLDMzNzg3TCwzMzc4OEwsMzM3ODlMLDMzNzkwTCwK KzMzNzkxTCwzMzc5MkwsMzM3OTNMLDMzNzk0TCwzMzc5NUwsMzM3OTZMLDMzNzk3TCwzMzc5OEws MzM3OTlMLDMzODAwTCwKKzMzODAxTCwzMzgwMkwsMzM4MDNMLDMzODA0TCwzMzgwNUwsMzM4MDZM LDMzODA3TCwzMzgwOEwsMzM4MDlMLDMzODEwTCwKKzMzODExTCwzMzgxMkwsMzM4MTNMLDMzODE0 TCwzMzgxNUwsMzM4MTZMLDMzODE3TCwzMzgxOEwsMzM4MTlMLDMzODIwTCwKKzMzODIxTCwzMzgy MkwsMzM4MjNMLDMzODI0TCwzMzgyNUwsMzM4MjZMLDMzODI3TCwzMzgyOEwsMzM4MjlMLDMzODMw TCwKKzMzODMxTCwzMzgzMkwsMzM4MzNMLDMzODM0TCwzMzgzNUwsMzM4MzZMLDMzODM3TCwzMzgz OEwsMzM4MzlMLDMzODQwTCwKKzMzODQxTCwzMzg0MkwsMzM4NDNMLDMzODQ0TCwzMzg0NUwsMzM4 NDZMLDMzODQ3TCwzMzg0OEwsMzM4NDlMLDMzODUwTCwKKzMzODUxTCwzMzg1MkwsMzM4NTNMLDMz ODU0TCwzMzg1NUwsMzM4NTZMLDMzODU3TCwzMzg1OEwsMzM4NTlMLDMzODYwTCwKKzMzODYxTCwz Mzg2MkwsMzM4NjNMLDMzODY0TCwzMzg2NUwsMzM4NjZMLDMzODY3TCwzMzg2OEwsMzM4NjlMLDMz ODcwTCwKKzMzODcxTCwzMzg3MkwsMzM4NzNMLDMzODc0TCwzMzg3NUwsMzM4NzZMLDMzODc3TCwz Mzg3OEwsMzM4NzlMLDMzODgwTCwKKzMzODgxTCwzMzg4MkwsMzM4ODNMLDMzODg0TCwzMzg4NUws MzM4ODZMLDMzODg3TCwzMzg4OEwsMzM4ODlMLDMzODkwTCwKKzMzODkxTCwzMzg5MkwsMzM4OTNM LDMzODk0TCwzMzg5NUwsMzM4OTZMLDMzODk3TCwzMzg5OEwsMzM4OTlMLDMzOTAwTCwKKzMzOTAx TCwzMzkwMkwsMzM5MDNMLDMzOTA0TCwzMzkwNUwsMzM5MDZMLDMzOTA3TCwzMzkwOEwsMzM5MDlM LDMzOTEwTCwKKzMzOTExTCwzMzkxMkwsMzM5MTNMLDMzOTE0TCwzMzkxNUwsMzM5MTZMLDMzOTE3 TCwzMzkxOEwsMzM5MTlMLDMzOTIwTCwKKzMzOTIxTCwzMzkyMkwsMzM5MjNMLDMzOTI0TCwzMzky NUwsMzM5MjZMLDMzOTI3TCwzMzkyOEwsMzM5MjlMLDMzOTMwTCwKKzMzOTMxTCwzMzkzMkwsMzM5 MzNMLDMzOTM0TCwzMzkzNUwsMzM5MzZMLDMzOTM3TCwzMzkzOEwsMzM5MzlMLDMzOTQwTCwKKzMz OTQxTCwzMzk0MkwsMzM5NDNMLDMzOTQ0TCwzMzk0NUwsMzM5NDZMLDMzOTQ3TCwzMzk0OEwsMzM5 NDlMLDMzOTUwTCwKKzMzOTUxTCwzMzk1MkwsMzM5NTNMLDMzOTU0TCwzMzk1NUwsMzM5NTZMLDMz OTU3TCwzMzk1OEwsMzM5NTlMLDMzOTYwTCwKKzMzOTYxTCwzMzk2MkwsMzM5NjNMLDMzOTY0TCwz Mzk2NUwsMzM5NjZMLDMzOTY3TCwzMzk2OEwsMzM5NjlMLDMzOTcwTCwKKzMzOTcxTCwzMzk3Mkws MzM5NzNMLDMzOTc0TCwzMzk3NUwsMzM5NzZMLDMzOTc3TCwzMzk3OEwsMzM5NzlMLDMzOTgwTCwK KzMzOTgxTCwzMzk4MkwsMzM5ODNMLDMzOTg0TCwzMzk4NUwsMzM5ODZMLDMzOTg3TCwzMzk4OEws MzM5ODlMLDMzOTkwTCwKKzMzOTkxTCwzMzk5MkwsMzM5OTNMLDMzOTk0TCwzMzk5NUwsMzM5OTZM LDMzOTk3TCwzMzk5OEwsMzM5OTlMLDM0MDAwTCwKKzM0MDAxTCwzNDAwMkwsMzQwMDNMLDM0MDA0 TCwzNDAwNUwsMzQwMDZMLDM0MDA3TCwzNDAwOEwsMzQwMDlMLDM0MDEwTCwKKzM0MDExTCwzNDAx MkwsMzQwMTNMLDM0MDE0TCwzNDAxNUwsMzQwMTZMLDM0MDE3TCwzNDAxOEwsMzQwMTlMLDM0MDIw TCwKKzM0MDIxTCwzNDAyMkwsMzQwMjNMLDM0MDI0TCwzNDAyNUwsMzQwMjZMLDM0MDI3TCwzNDAy OEwsMzQwMjlMLDM0MDMwTCwKKzM0MDMxTCwzNDAzMkwsMzQwMzNMLDM0MDM0TCwzNDAzNUwsMzQw MzZMLDM0MDM3TCwzNDAzOEwsMzQwMzlMLDM0MDQwTCwKKzM0MDQxTCwzNDA0MkwsMzQwNDNMLDM0 MDQ0TCwzNDA0NUwsMzQwNDZMLDM0MDQ3TCwzNDA0OEwsMzQwNDlMLDM0MDUwTCwKKzM0MDUxTCwz NDA1MkwsMzQwNTNMLDM0MDU0TCwzNDA1NUwsMzQwNTZMLDM0MDU3TCwzNDA1OEwsMzQwNTlMLDM0 MDYwTCwKKzM0MDYxTCwzNDA2MkwsMzQwNjNMLDM0MDY0TCwzNDA2NUwsMzQwNjZMLDM0MDY3TCwz NDA2OEwsMzQwNjlMLDM0MDcwTCwKKzM0MDcxTCwzNDA3MkwsMzQwNzNMLDM0MDc0TCwzNDA3NUws MzQwNzZMLDM0MDc3TCwzNDA3OEwsMzQwNzlMLDM0MDgwTCwKKzM0MDgxTCwzNDA4MkwsMzQwODNM LDM0MDg0TCwzNDA4NUwsMzQwODZMLDM0MDg3TCwzNDA4OEwsMzQwODlMLDM0MDkwTCwKKzM0MDkx TCwzNDA5MkwsMzQwOTNMLDM0MDk0TCwzNDA5NUwsMzQwOTZMLDM0MDk3TCwzNDA5OEwsMzQwOTlM LDM0MTAwTCwKKzM0MTAxTCwzNDEwMkwsMzQxMDNMLDM0MTA0TCwzNDEwNUwsMzQxMDZMLDM0MTA3 TCwzNDEwOEwsMzQxMDlMLDM0MTEwTCwKKzM0MTExTCwzNDExMkwsMzQxMTNMLDM0MTE0TCwzNDEx NUwsMzQxMTZMLDM0MTE3TCwzNDExOEwsMzQxMTlMLDM0MTIwTCwKKzM0MTIxTCwzNDEyMkwsMzQx MjNMLDM0MTI0TCwzNDEyNUwsMzQxMjZMLDM0MTI3TCwzNDEyOEwsMzQxMjlMLDM0MTMwTCwKKzM0 MTMxTCwzNDEzMkwsMzQxMzNMLDM0MTM0TCwzNDEzNUwsMzQxMzZMLDM0MTM3TCwzNDEzOEwsMzQx MzlMLDM0MTQwTCwKKzM0MTQxTCwzNDE0MkwsMzQxNDNMLDM0MTQ0TCwzNDE0NUwsMzQxNDZMLDM0 MTQ3TCwzNDE0OEwsMzQxNDlMLDM0MTUwTCwKKzM0MTUxTCwzNDE1MkwsMzQxNTNMLDM0MTU0TCwz NDE1NUwsMzQxNTZMLDM0MTU3TCwzNDE1OEwsMzQxNTlMLDM0MTYwTCwKKzM0MTYxTCwzNDE2Mkws MzQxNjNMLDM0MTY0TCwzNDE2NUwsMzQxNjZMLDM0MTY3TCwzNDE2OEwsMzQxNjlMLDM0MTcwTCwK KzM0MTcxTCwzNDE3MkwsMzQxNzNMLDM0MTc0TCwzNDE3NUwsMzQxNzZMLDM0MTc3TCwzNDE3OEws MzQxNzlMLDM0MTgwTCwKKzM0MTgxTCwzNDE4MkwsMzQxODNMLDM0MTg0TCwzNDE4NUwsMzQxODZM LDM0MTg3TCwzNDE4OEwsMzQxODlMLDM0MTkwTCwKKzM0MTkxTCwzNDE5MkwsMzQxOTNMLDM0MTk0 TCwzNDE5NUwsMzQxOTZMLDM0MTk3TCwzNDE5OEwsMzQxOTlMLDM0MjAwTCwKKzM0MjAxTCwzNDIw MkwsMzQyMDNMLDM0MjA0TCwzNDIwNUwsMzQyMDZMLDM0MjA3TCwzNDIwOEwsMzQyMDlMLDM0MjEw TCwKKzM0MjExTCwzNDIxMkwsMzQyMTNMLDM0MjE0TCwzNDIxNUwsMzQyMTZMLDM0MjE3TCwzNDIx OEwsMzQyMTlMLDM0MjIwTCwKKzM0MjIxTCwzNDIyMkwsMzQyMjNMLDM0MjI0TCwzNDIyNUwsMzQy MjZMLDM0MjI3TCwzNDIyOEwsMzQyMjlMLDM0MjMwTCwKKzM0MjMxTCwzNDIzMkwsMzQyMzNMLDM0 MjM0TCwzNDIzNUwsMzQyMzZMLDM0MjM3TCwzNDIzOEwsMzQyMzlMLDM0MjQwTCwKKzM0MjQxTCwz NDI0MkwsMzQyNDNMLDM0MjQ0TCwzNDI0NUwsMzQyNDZMLDM0MjQ3TCwzNDI0OEwsMzQyNDlMLDM0 MjUwTCwKKzM0MjUxTCwzNDI1MkwsMzQyNTNMLDM0MjU0TCwzNDI1NUwsMzQyNTZMLDM0MjU3TCwz NDI1OEwsMzQyNTlMLDM0MjYwTCwKKzM0MjYxTCwzNDI2MkwsMzQyNjNMLDM0MjY0TCwzNDI2NUws MzQyNjZMLDM0MjY3TCwzNDI2OEwsMzQyNjlMLDM0MjcwTCwKKzM0MjcxTCwzNDI3MkwsMzQyNzNM LDM0Mjc0TCwzNDI3NUwsMzQyNzZMLDM0Mjc3TCwzNDI3OEwsMzQyNzlMLDM0MjgwTCwKKzM0Mjgx TCwzNDI4MkwsMzQyODNMLDM0Mjg0TCwzNDI4NUwsMzQyODZMLDM0Mjg3TCwzNDI4OEwsMzQyODlM LDM0MjkwTCwKKzM0MjkxTCwzNDI5MkwsMzQyOTNMLDM0Mjk0TCwzNDI5NUwsMzQyOTZMLDM0Mjk3 TCwzNDI5OEwsMzQyOTlMLDM0MzAwTCwKKzM0MzAxTCwzNDMwMkwsMzQzMDNMLDM0MzA0TCwzNDMw NUwsMzQzMDZMLDM0MzA3TCwzNDMwOEwsMzQzMDlMLDM0MzEwTCwKKzM0MzExTCwzNDMxMkwsMzQz MTNMLDM0MzE0TCwzNDMxNUwsMzQzMTZMLDM0MzE3TCwzNDMxOEwsMzQzMTlMLDM0MzIwTCwKKzM0 MzIxTCwzNDMyMkwsMzQzMjNMLDM0MzI0TCwzNDMyNUwsMzQzMjZMLDM0MzI3TCwzNDMyOEwsMzQz MjlMLDM0MzMwTCwKKzM0MzMxTCwzNDMzMkwsMzQzMzNMLDM0MzM0TCwzNDMzNUwsMzQzMzZMLDM0 MzM3TCwzNDMzOEwsMzQzMzlMLDM0MzQwTCwKKzM0MzQxTCwzNDM0MkwsMzQzNDNMLDM0MzQ0TCwz NDM0NUwsMzQzNDZMLDM0MzQ3TCwzNDM0OEwsMzQzNDlMLDM0MzUwTCwKKzM0MzUxTCwzNDM1Mkws MzQzNTNMLDM0MzU0TCwzNDM1NUwsMzQzNTZMLDM0MzU3TCwzNDM1OEwsMzQzNTlMLDM0MzYwTCwK KzM0MzYxTCwzNDM2MkwsMzQzNjNMLDM0MzY0TCwzNDM2NUwsMzQzNjZMLDM0MzY3TCwzNDM2OEws MzQzNjlMLDM0MzcwTCwKKzM0MzcxTCwzNDM3MkwsMzQzNzNMLDM0Mzc0TCwzNDM3NUwsMzQzNzZM LDM0Mzc3TCwzNDM3OEwsMzQzNzlMLDM0MzgwTCwKKzM0MzgxTCwzNDM4MkwsMzQzODNMLDM0Mzg0 TCwzNDM4NUwsMzQzODZMLDM0Mzg3TCwzNDM4OEwsMzQzODlMLDM0MzkwTCwKKzM0MzkxTCwzNDM5 MkwsMzQzOTNMLDM0Mzk0TCwzNDM5NUwsMzQzOTZMLDM0Mzk3TCwzNDM5OEwsMzQzOTlMLDM0NDAw TCwKKzM0NDAxTCwzNDQwMkwsMzQ0MDNMLDM0NDA0TCwzNDQwNUwsMzQ0MDZMLDM0NDA3TCwzNDQw OEwsMzQ0MDlMLDM0NDEwTCwKKzM0NDExTCwzNDQxMkwsMzQ0MTNMLDM0NDE0TCwzNDQxNUwsMzQ0 MTZMLDM0NDE3TCwzNDQxOEwsMzQ0MTlMLDM0NDIwTCwKKzM0NDIxTCwzNDQyMkwsMzQ0MjNMLDM0 NDI0TCwzNDQyNUwsMzQ0MjZMLDM0NDI3TCwzNDQyOEwsMzQ0MjlMLDM0NDMwTCwKKzM0NDMxTCwz NDQzMkwsMzQ0MzNMLDM0NDM0TCwzNDQzNUwsMzQ0MzZMLDM0NDM3TCwzNDQzOEwsMzQ0MzlMLDM0 NDQwTCwKKzM0NDQxTCwzNDQ0MkwsMzQ0NDNMLDM0NDQ0TCwzNDQ0NUwsMzQ0NDZMLDM0NDQ3TCwz NDQ0OEwsMzQ0NDlMLDM0NDUwTCwKKzM0NDUxTCwzNDQ1MkwsMzQ0NTNMLDM0NDU0TCwzNDQ1NUws MzQ0NTZMLDM0NDU3TCwzNDQ1OEwsMzQ0NTlMLDM0NDYwTCwKKzM0NDYxTCwzNDQ2MkwsMzQ0NjNM LDM0NDY0TCwzNDQ2NUwsMzQ0NjZMLDM0NDY3TCwzNDQ2OEwsMzQ0NjlMLDM0NDcwTCwKKzM0NDcx TCwzNDQ3MkwsMzQ0NzNMLDM0NDc0TCwzNDQ3NUwsMzQ0NzZMLDM0NDc3TCwzNDQ3OEwsMzQ0NzlM LDM0NDgwTCwKKzM0NDgxTCwzNDQ4MkwsMzQ0ODNMLDM0NDg0TCwzNDQ4NUwsMzQ0ODZMLDM0NDg3 TCwzNDQ4OEwsMzQ0ODlMLDM0NDkwTCwKKzM0NDkxTCwzNDQ5MkwsMzQ0OTNMLDM0NDk0TCwzNDQ5 NUwsMzQ0OTZMLDM0NDk3TCwzNDQ5OEwsMzQ0OTlMLDM0NTAwTCwKKzM0NTAxTCwzNDUwMkwsMzQ1 MDNMLDM0NTA0TCwzNDUwNUwsMzQ1MDZMLDM0NTA3TCwzNDUwOEwsMzQ1MDlMLDM0NTEwTCwKKzM0 NTExTCwzNDUxMkwsMzQ1MTNMLDM0NTE0TCwzNDUxNUwsMzQ1MTZMLDM0NTE3TCwzNDUxOEwsMzQ1 MTlMLDM0NTIwTCwKKzM0NTIxTCwzNDUyMkwsMzQ1MjNMLDM0NTI0TCwzNDUyNUwsMzQ1MjZMLDM0 NTI3TCwzNDUyOEwsMzQ1MjlMLDM0NTMwTCwKKzM0NTMxTCwzNDUzMkwsMzQ1MzNMLDM0NTM0TCwz NDUzNUwsMzQ1MzZMLDM0NTM3TCwzNDUzOEwsMzQ1MzlMLDM0NTQwTCwKKzM0NTQxTCwzNDU0Mkws MzQ1NDNMLDM0NTQ0TCwzNDU0NUwsMzQ1NDZMLDM0NTQ3TCwzNDU0OEwsMzQ1NDlMLDM0NTUwTCwK KzM0NTUxTCwzNDU1MkwsMzQ1NTNMLDM0NTU0TCwzNDU1NUwsMzQ1NTZMLDM0NTU3TCwzNDU1OEws MzQ1NTlMLDM0NTYwTCwKKzM0NTYxTCwzNDU2MkwsMzQ1NjNMLDM0NTY0TCwzNDU2NUwsMzQ1NjZM LDM0NTY3TCwzNDU2OEwsMzQ1NjlMLDM0NTcwTCwKKzM0NTcxTCwzNDU3MkwsMzQ1NzNMLDM0NTc0 TCwzNDU3NUwsMzQ1NzZMLDM0NTc3TCwzNDU3OEwsMzQ1NzlMLDM0NTgwTCwKKzM0NTgxTCwzNDU4 MkwsMzQ1ODNMLDM0NTg0TCwzNDU4NUwsMzQ1ODZMLDM0NTg3TCwzNDU4OEwsMzQ1ODlMLDM0NTkw TCwKKzM0NTkxTCwzNDU5MkwsMzQ1OTNMLDM0NTk0TCwzNDU5NUwsMzQ1OTZMLDM0NTk3TCwzNDU5 OEwsMzQ1OTlMLDM0NjAwTCwKKzM0NjAxTCwzNDYwMkwsMzQ2MDNMLDM0NjA0TCwzNDYwNUwsMzQ2 MDZMLDM0NjA3TCwzNDYwOEwsMzQ2MDlMLDM0NjEwTCwKKzM0NjExTCwzNDYxMkwsMzQ2MTNMLDM0 NjE0TCwzNDYxNUwsMzQ2MTZMLDM0NjE3TCwzNDYxOEwsMzQ2MTlMLDM0NjIwTCwKKzM0NjIxTCwz NDYyMkwsMzQ2MjNMLDM0NjI0TCwzNDYyNUwsMzQ2MjZMLDM0NjI3TCwzNDYyOEwsMzQ2MjlMLDM0 NjMwTCwKKzM0NjMxTCwzNDYzMkwsMzQ2MzNMLDM0NjM0TCwzNDYzNUwsMzQ2MzZMLDM0NjM3TCwz NDYzOEwsMzQ2MzlMLDM0NjQwTCwKKzM0NjQxTCwzNDY0MkwsMzQ2NDNMLDM0NjQ0TCwzNDY0NUws MzQ2NDZMLDM0NjQ3TCwzNDY0OEwsMzQ2NDlMLDM0NjUwTCwKKzM0NjUxTCwzNDY1MkwsMzQ2NTNM LDM0NjU0TCwzNDY1NUwsMzQ2NTZMLDM0NjU3TCwzNDY1OEwsMzQ2NTlMLDM0NjYwTCwKKzM0NjYx TCwzNDY2MkwsMzQ2NjNMLDM0NjY0TCwzNDY2NUwsMzQ2NjZMLDM0NjY3TCwzNDY2OEwsMzQ2NjlM LDM0NjcwTCwKKzM0NjcxTCwzNDY3MkwsMzQ2NzNMLDM0Njc0TCwzNDY3NUwsMzQ2NzZMLDM0Njc3 TCwzNDY3OEwsMzQ2NzlMLDM0NjgwTCwKKzM0NjgxTCwzNDY4MkwsMzQ2ODNMLDM0Njg0TCwzNDY4 NUwsMzQ2ODZMLDM0Njg3TCwzNDY4OEwsMzQ2ODlMLDM0NjkwTCwKKzM0NjkxTCwzNDY5MkwsMzQ2 OTNMLDM0Njk0TCwzNDY5NUwsMzQ2OTZMLDM0Njk3TCwzNDY5OEwsMzQ2OTlMLDM0NzAwTCwKKzM0 NzAxTCwzNDcwMkwsMzQ3MDNMLDM0NzA0TCwzNDcwNUwsMzQ3MDZMLDM0NzA3TCwzNDcwOEwsMzQ3 MDlMLDM0NzEwTCwKKzM0NzExTCwzNDcxMkwsMzQ3MTNMLDM0NzE0TCwzNDcxNUwsMzQ3MTZMLDM0 NzE3TCwzNDcxOEwsMzQ3MTlMLDM0NzIwTCwKKzM0NzIxTCwzNDcyMkwsMzQ3MjNMLDM0NzI0TCwz NDcyNUwsMzQ3MjZMLDM0NzI3TCwzNDcyOEwsMzQ3MjlMLDM0NzMwTCwKKzM0NzMxTCwzNDczMkws MzQ3MzNMLDM0NzM0TCwzNDczNUwsMzQ3MzZMLDM0NzM3TCwzNDczOEwsMzQ3MzlMLDM0NzQwTCwK KzM0NzQxTCwzNDc0MkwsMzQ3NDNMLDM0NzQ0TCwzNDc0NUwsMzQ3NDZMLDM0NzQ3TCwzNDc0OEws MzQ3NDlMLDM0NzUwTCwKKzM0NzUxTCwzNDc1MkwsMzQ3NTNMLDM0NzU0TCwzNDc1NUwsMzQ3NTZM LDM0NzU3TCwzNDc1OEwsMzQ3NTlMLDM0NzYwTCwKKzM0NzYxTCwzNDc2MkwsMzQ3NjNMLDM0NzY0 TCwzNDc2NUwsMzQ3NjZMLDM0NzY3TCwzNDc2OEwsMzQ3NjlMLDM0NzcwTCwKKzM0NzcxTCwzNDc3 MkwsMzQ3NzNMLDM0Nzc0TCwzNDc3NUwsMzQ3NzZMLDM0Nzc3TCwzNDc3OEwsMzQ3NzlMLDM0Nzgw TCwKKzM0NzgxTCwzNDc4MkwsMzQ3ODNMLDM0Nzg0TCwzNDc4NUwsMzQ3ODZMLDM0Nzg3TCwzNDc4 OEwsMzQ3ODlMLDM0NzkwTCwKKzM0NzkxTCwzNDc5MkwsMzQ3OTNMLDM0Nzk0TCwzNDc5NUwsMzQ3 OTZMLDM0Nzk3TCwzNDc5OEwsMzQ3OTlMLDM0ODAwTCwKKzM0ODAxTCwzNDgwMkwsMzQ4MDNMLDM0 ODA0TCwzNDgwNUwsMzQ4MDZMLDM0ODA3TCwzNDgwOEwsMzQ4MDlMLDM0ODEwTCwKKzM0ODExTCwz NDgxMkwsMzQ4MTNMLDM0ODE0TCwzNDgxNUwsMzQ4MTZMLDM0ODE3TCwzNDgxOEwsMzQ4MTlMLDM0 ODIwTCwKKzM0ODIxTCwzNDgyMkwsMzQ4MjNMLDM0ODI0TCwzNDgyNUwsMzQ4MjZMLDM0ODI3TCwz NDgyOEwsMzQ4MjlMLDM0ODMwTCwKKzM0ODMxTCwzNDgzMkwsMzQ4MzNMLDM0ODM0TCwzNDgzNUws MzQ4MzZMLDM0ODM3TCwzNDgzOEwsMzQ4MzlMLDM0ODQwTCwKKzM0ODQxTCwzNDg0MkwsMzQ4NDNM LDM0ODQ0TCwzNDg0NUwsMzQ4NDZMLDM0ODQ3TCwzNDg0OEwsMzQ4NDlMLDM0ODUwTCwKKzM0ODUx TCwzNDg1MkwsMzQ4NTNMLDM0ODU0TCwzNDg1NUwsMzQ4NTZMLDM0ODU3TCwzNDg1OEwsMzQ4NTlM LDM0ODYwTCwKKzM0ODYxTCwzNDg2MkwsMzQ4NjNMLDM0ODY0TCwzNDg2NUwsMzQ4NjZMLDM0ODY3 TCwzNDg2OEwsMzQ4NjlMLDM0ODcwTCwKKzM0ODcxTCwzNDg3MkwsMzQ4NzNMLDM0ODc0TCwzNDg3 NUwsMzQ4NzZMLDM0ODc3TCwzNDg3OEwsMzQ4NzlMLDM0ODgwTCwKKzM0ODgxTCwzNDg4MkwsMzQ4 ODNMLDM0ODg0TCwzNDg4NUwsMzQ4ODZMLDM0ODg3TCwzNDg4OEwsMzQ4ODlMLDM0ODkwTCwKKzM0 ODkxTCwzNDg5MkwsMzQ4OTNMLDM0ODk0TCwzNDg5NUwsMzQ4OTZMLDM0ODk3TCwzNDg5OEwsMzQ4 OTlMLDM0OTAwTCwKKzM0OTAxTCwzNDkwMkwsMzQ5MDNMLDM0OTA0TCwzNDkwNUwsMzQ5MDZMLDM0 OTA3TCwzNDkwOEwsMzQ5MDlMLDM0OTEwTCwKKzM0OTExTCwzNDkxMkwsMzQ5MTNMLDM0OTE0TCwz NDkxNUwsMzQ5MTZMLDM0OTE3TCwzNDkxOEwsMzQ5MTlMLDM0OTIwTCwKKzM0OTIxTCwzNDkyMkws MzQ5MjNMLDM0OTI0TCwzNDkyNUwsMzQ5MjZMLDM0OTI3TCwzNDkyOEwsMzQ5MjlMLDM0OTMwTCwK KzM0OTMxTCwzNDkzMkwsMzQ5MzNMLDM0OTM0TCwzNDkzNUwsMzQ5MzZMLDM0OTM3TCwzNDkzOEws MzQ5MzlMLDM0OTQwTCwKKzM0OTQxTCwzNDk0MkwsMzQ5NDNMLDM0OTQ0TCwzNDk0NUwsMzQ5NDZM LDM0OTQ3TCwzNDk0OEwsMzQ5NDlMLDM0OTUwTCwKKzM0OTUxTCwzNDk1MkwsMzQ5NTNMLDM0OTU0 TCwzNDk1NUwsMzQ5NTZMLDM0OTU3TCwzNDk1OEwsMzQ5NTlMLDM0OTYwTCwKKzM0OTYxTCwzNDk2 MkwsMzQ5NjNMLDM0OTY0TCwzNDk2NUwsMzQ5NjZMLDM0OTY3TCwzNDk2OEwsMzQ5NjlMLDM0OTcw TCwKKzM0OTcxTCwzNDk3MkwsMzQ5NzNMLDM0OTc0TCwzNDk3NUwsMzQ5NzZMLDM0OTc3TCwzNDk3 OEwsMzQ5NzlMLDM0OTgwTCwKKzM0OTgxTCwzNDk4MkwsMzQ5ODNMLDM0OTg0TCwzNDk4NUwsMzQ5 ODZMLDM0OTg3TCwzNDk4OEwsMzQ5ODlMLDM0OTkwTCwKKzM0OTkxTCwzNDk5MkwsMzQ5OTNMLDM0 OTk0TCwzNDk5NUwsMzQ5OTZMLDM0OTk3TCwzNDk5OEwsMzQ5OTlMLDM1MDAwTCwKKzM1MDAxTCwz NTAwMkwsMzUwMDNMLDM1MDA0TCwzNTAwNUwsMzUwMDZMLDM1MDA3TCwzNTAwOEwsMzUwMDlMLDM1 MDEwTCwKKzM1MDExTCwzNTAxMkwsMzUwMTNMLDM1MDE0TCwzNTAxNUwsMzUwMTZMLDM1MDE3TCwz NTAxOEwsMzUwMTlMLDM1MDIwTCwKKzM1MDIxTCwzNTAyMkwsMzUwMjNMLDM1MDI0TCwzNTAyNUws MzUwMjZMLDM1MDI3TCwzNTAyOEwsMzUwMjlMLDM1MDMwTCwKKzM1MDMxTCwzNTAzMkwsMzUwMzNM LDM1MDM0TCwzNTAzNUwsMzUwMzZMLDM1MDM3TCwzNTAzOEwsMzUwMzlMLDM1MDQwTCwKKzM1MDQx TCwzNTA0MkwsMzUwNDNMLDM1MDQ0TCwzNTA0NUwsMzUwNDZMLDM1MDQ3TCwzNTA0OEwsMzUwNDlM LDM1MDUwTCwKKzM1MDUxTCwzNTA1MkwsMzUwNTNMLDM1MDU0TCwzNTA1NUwsMzUwNTZMLDM1MDU3 TCwzNTA1OEwsMzUwNTlMLDM1MDYwTCwKKzM1MDYxTCwzNTA2MkwsMzUwNjNMLDM1MDY0TCwzNTA2 NUwsMzUwNjZMLDM1MDY3TCwzNTA2OEwsMzUwNjlMLDM1MDcwTCwKKzM1MDcxTCwzNTA3MkwsMzUw NzNMLDM1MDc0TCwzNTA3NUwsMzUwNzZMLDM1MDc3TCwzNTA3OEwsMzUwNzlMLDM1MDgwTCwKKzM1 MDgxTCwzNTA4MkwsMzUwODNMLDM1MDg0TCwzNTA4NUwsMzUwODZMLDM1MDg3TCwzNTA4OEwsMzUw ODlMLDM1MDkwTCwKKzM1MDkxTCwzNTA5MkwsMzUwOTNMLDM1MDk0TCwzNTA5NUwsMzUwOTZMLDM1 MDk3TCwzNTA5OEwsMzUwOTlMLDM1MTAwTCwKKzM1MTAxTCwzNTEwMkwsMzUxMDNMLDM1MTA0TCwz NTEwNUwsMzUxMDZMLDM1MTA3TCwzNTEwOEwsMzUxMDlMLDM1MTEwTCwKKzM1MTExTCwzNTExMkws MzUxMTNMLDM1MTE0TCwzNTExNUwsMzUxMTZMLDM1MTE3TCwzNTExOEwsMzUxMTlMLDM1MTIwTCwK KzM1MTIxTCwzNTEyMkwsMzUxMjNMLDM1MTI0TCwzNTEyNUwsMzUxMjZMLDM1MTI3TCwzNTEyOEws MzUxMjlMLDM1MTMwTCwKKzM1MTMxTCwzNTEzMkwsMzUxMzNMLDM1MTM0TCwzNTEzNUwsMzUxMzZM LDM1MTM3TCwzNTEzOEwsMzUxMzlMLDM1MTQwTCwKKzM1MTQxTCwzNTE0MkwsMzUxNDNMLDM1MTQ0 TCwzNTE0NUwsMzUxNDZMLDM1MTQ3TCwzNTE0OEwsMzUxNDlMLDM1MTUwTCwKKzM1MTUxTCwzNTE1 MkwsMzUxNTNMLDM1MTU0TCwzNTE1NUwsMzUxNTZMLDM1MTU3TCwzNTE1OEwsMzUxNTlMLDM1MTYw TCwKKzM1MTYxTCwzNTE2MkwsMzUxNjNMLDM1MTY0TCwzNTE2NUwsMzUxNjZMLDM1MTY3TCwzNTE2 OEwsMzUxNjlMLDM1MTcwTCwKKzM1MTcxTCwzNTE3MkwsMzUxNzNMLDM1MTc0TCwzNTE3NUwsMzUx NzZMLDM1MTc3TCwzNTE3OEwsMzUxNzlMLDM1MTgwTCwKKzM1MTgxTCwzNTE4MkwsMzUxODNMLDM1 MTg0TCwzNTE4NUwsMzUxODZMLDM1MTg3TCwzNTE4OEwsMzUxODlMLDM1MTkwTCwKKzM1MTkxTCwz NTE5MkwsMzUxOTNMLDM1MTk0TCwzNTE5NUwsMzUxOTZMLDM1MTk3TCwzNTE5OEwsMzUxOTlMLDM1 MjAwTCwKKzM1MjAxTCwzNTIwMkwsMzUyMDNMLDM1MjA0TCwzNTIwNUwsMzUyMDZMLDM1MjA3TCwz NTIwOEwsMzUyMDlMLDM1MjEwTCwKKzM1MjExTCwzNTIxMkwsMzUyMTNMLDM1MjE0TCwzNTIxNUws MzUyMTZMLDM1MjE3TCwzNTIxOEwsMzUyMTlMLDM1MjIwTCwKKzM1MjIxTCwzNTIyMkwsMzUyMjNM LDM1MjI0TCwzNTIyNUwsMzUyMjZMLDM1MjI3TCwzNTIyOEwsMzUyMjlMLDM1MjMwTCwKKzM1MjMx TCwzNTIzMkwsMzUyMzNMLDM1MjM0TCwzNTIzNUwsMzUyMzZMLDM1MjM3TCwzNTIzOEwsMzUyMzlM LDM1MjQwTCwKKzM1MjQxTCwzNTI0MkwsMzUyNDNMLDM1MjQ0TCwzNTI0NUwsMzUyNDZMLDM1MjQ3 TCwzNTI0OEwsMzUyNDlMLDM1MjUwTCwKKzM1MjUxTCwzNTI1MkwsMzUyNTNMLDM1MjU0TCwzNTI1 NUwsMzUyNTZMLDM1MjU3TCwzNTI1OEwsMzUyNTlMLDM1MjYwTCwKKzM1MjYxTCwzNTI2MkwsMzUy NjNMLDM1MjY0TCwzNTI2NUwsMzUyNjZMLDM1MjY3TCwzNTI2OEwsMzUyNjlMLDM1MjcwTCwKKzM1 MjcxTCwzNTI3MkwsMzUyNzNMLDM1Mjc0TCwzNTI3NUwsMzUyNzZMLDM1Mjc3TCwzNTI3OEwsMzUy NzlMLDM1MjgwTCwKKzM1MjgxTCwzNTI4MkwsMzUyODNMLDM1Mjg0TCwzNTI4NUwsMzUyODZMLDM1 Mjg3TCwzNTI4OEwsMzUyODlMLDM1MjkwTCwKKzM1MjkxTCwzNTI5MkwsMzUyOTNMLDM1Mjk0TCwz NTI5NUwsMzUyOTZMLDM1Mjk3TCwzNTI5OEwsMzUyOTlMLDM1MzAwTCwKKzM1MzAxTCwzNTMwMkws MzUzMDNMLDM1MzA0TCwzNTMwNUwsMzUzMDZMLDM1MzA3TCwzNTMwOEwsMzUzMDlMLDM1MzEwTCwK KzM1MzExTCwzNTMxMkwsMzUzMTNMLDM1MzE0TCwzNTMxNUwsMzUzMTZMLDM1MzE3TCwzNTMxOEws MzUzMTlMLDM1MzIwTCwKKzM1MzIxTCwzNTMyMkwsMzUzMjNMLDM1MzI0TCwzNTMyNUwsMzUzMjZM LDM1MzI3TCwzNTMyOEwsMzUzMjlMLDM1MzMwTCwKKzM1MzMxTCwzNTMzMkwsMzUzMzNMLDM1MzM0 TCwzNTMzNUwsMzUzMzZMLDM1MzM3TCwzNTMzOEwsMzUzMzlMLDM1MzQwTCwKKzM1MzQxTCwzNTM0 MkwsMzUzNDNMLDM1MzQ0TCwzNTM0NUwsMzUzNDZMLDM1MzQ3TCwzNTM0OEwsMzUzNDlMLDM1MzUw TCwKKzM1MzUxTCwzNTM1MkwsMzUzNTNMLDM1MzU0TCwzNTM1NUwsMzUzNTZMLDM1MzU3TCwzNTM1 OEwsMzUzNTlMLDM1MzYwTCwKKzM1MzYxTCwzNTM2MkwsMzUzNjNMLDM1MzY0TCwzNTM2NUwsMzUz NjZMLDM1MzY3TCwzNTM2OEwsMzUzNjlMLDM1MzcwTCwKKzM1MzcxTCwzNTM3MkwsMzUzNzNMLDM1 Mzc0TCwzNTM3NUwsMzUzNzZMLDM1Mzc3TCwzNTM3OEwsMzUzNzlMLDM1MzgwTCwKKzM1MzgxTCwz NTM4MkwsMzUzODNMLDM1Mzg0TCwzNTM4NUwsMzUzODZMLDM1Mzg3TCwzNTM4OEwsMzUzODlMLDM1 MzkwTCwKKzM1MzkxTCwzNTM5MkwsMzUzOTNMLDM1Mzk0TCwzNTM5NUwsMzUzOTZMLDM1Mzk3TCwz NTM5OEwsMzUzOTlMLDM1NDAwTCwKKzM1NDAxTCwzNTQwMkwsMzU0MDNMLDM1NDA0TCwzNTQwNUws MzU0MDZMLDM1NDA3TCwzNTQwOEwsMzU0MDlMLDM1NDEwTCwKKzM1NDExTCwzNTQxMkwsMzU0MTNM LDM1NDE0TCwzNTQxNUwsMzU0MTZMLDM1NDE3TCwzNTQxOEwsMzU0MTlMLDM1NDIwTCwKKzM1NDIx TCwzNTQyMkwsMzU0MjNMLDM1NDI0TCwzNTQyNUwsMzU0MjZMLDM1NDI3TCwzNTQyOEwsMzU0MjlM LDM1NDMwTCwKKzM1NDMxTCwzNTQzMkwsMzU0MzNMLDM1NDM0TCwzNTQzNUwsMzU0MzZMLDM1NDM3 TCwzNTQzOEwsMzU0MzlMLDM1NDQwTCwKKzM1NDQxTCwzNTQ0MkwsMzU0NDNMLDM1NDQ0TCwzNTQ0 NUwsMzU0NDZMLDM1NDQ3TCwzNTQ0OEwsMzU0NDlMLDM1NDUwTCwKKzM1NDUxTCwzNTQ1MkwsMzU0 NTNMLDM1NDU0TCwzNTQ1NUwsMzU0NTZMLDM1NDU3TCwzNTQ1OEwsMzU0NTlMLDM1NDYwTCwKKzM1 NDYxTCwzNTQ2MkwsMzU0NjNMLDM1NDY0TCwzNTQ2NUwsMzU0NjZMLDM1NDY3TCwzNTQ2OEwsMzU0 NjlMLDM1NDcwTCwKKzM1NDcxTCwzNTQ3MkwsMzU0NzNMLDM1NDc0TCwzNTQ3NUwsMzU0NzZMLDM1 NDc3TCwzNTQ3OEwsMzU0NzlMLDM1NDgwTCwKKzM1NDgxTCwzNTQ4MkwsMzU0ODNMLDM1NDg0TCwz NTQ4NUwsMzU0ODZMLDM1NDg3TCwzNTQ4OEwsMzU0ODlMLDM1NDkwTCwKKzM1NDkxTCwzNTQ5Mkws MzU0OTNMLDM1NDk0TCwzNTQ5NUwsMzU0OTZMLDM1NDk3TCwzNTQ5OEwsMzU0OTlMLDM1NTAwTCwK KzM1NTAxTCwzNTUwMkwsMzU1MDNMLDM1NTA0TCwzNTUwNUwsMzU1MDZMLDM1NTA3TCwzNTUwOEws MzU1MDlMLDM1NTEwTCwKKzM1NTExTCwzNTUxMkwsMzU1MTNMLDM1NTE0TCwzNTUxNUwsMzU1MTZM LDM1NTE3TCwzNTUxOEwsMzU1MTlMLDM1NTIwTCwKKzM1NTIxTCwzNTUyMkwsMzU1MjNMLDM1NTI0 TCwzNTUyNUwsMzU1MjZMLDM1NTI3TCwzNTUyOEwsMzU1MjlMLDM1NTMwTCwKKzM1NTMxTCwzNTUz MkwsMzU1MzNMLDM1NTM0TCwzNTUzNUwsMzU1MzZMLDM1NTM3TCwzNTUzOEwsMzU1MzlMLDM1NTQw TCwKKzM1NTQxTCwzNTU0MkwsMzU1NDNMLDM1NTQ0TCwzNTU0NUwsMzU1NDZMLDM1NTQ3TCwzNTU0 OEwsMzU1NDlMLDM1NTUwTCwKKzM1NTUxTCwzNTU1MkwsMzU1NTNMLDM1NTU0TCwzNTU1NUwsMzU1 NTZMLDM1NTU3TCwzNTU1OEwsMzU1NTlMLDM1NTYwTCwKKzM1NTYxTCwzNTU2MkwsMzU1NjNMLDM1 NTY0TCwzNTU2NUwsMzU1NjZMLDM1NTY3TCwzNTU2OEwsMzU1NjlMLDM1NTcwTCwKKzM1NTcxTCwz NTU3MkwsMzU1NzNMLDM1NTc0TCwzNTU3NUwsMzU1NzZMLDM1NTc3TCwzNTU3OEwsMzU1NzlMLDM1 NTgwTCwKKzM1NTgxTCwzNTU4MkwsMzU1ODNMLDM1NTg0TCwzNTU4NUwsMzU1ODZMLDM1NTg3TCwz NTU4OEwsMzU1ODlMLDM1NTkwTCwKKzM1NTkxTCwzNTU5MkwsMzU1OTNMLDM1NTk0TCwzNTU5NUws MzU1OTZMLDM1NTk3TCwzNTU5OEwsMzU1OTlMLDM1NjAwTCwKKzM1NjAxTCwzNTYwMkwsMzU2MDNM LDM1NjA0TCwzNTYwNUwsMzU2MDZMLDM1NjA3TCwzNTYwOEwsMzU2MDlMLDM1NjEwTCwKKzM1NjEx TCwzNTYxMkwsMzU2MTNMLDM1NjE0TCwzNTYxNUwsMzU2MTZMLDM1NjE3TCwzNTYxOEwsMzU2MTlM LDM1NjIwTCwKKzM1NjIxTCwzNTYyMkwsMzU2MjNMLDM1NjI0TCwzNTYyNUwsMzU2MjZMLDM1NjI3 TCwzNTYyOEwsMzU2MjlMLDM1NjMwTCwKKzM1NjMxTCwzNTYzMkwsMzU2MzNMLDM1NjM0TCwzNTYz NUwsMzU2MzZMLDM1NjM3TCwzNTYzOEwsMzU2MzlMLDM1NjQwTCwKKzM1NjQxTCwzNTY0MkwsMzU2 NDNMLDM1NjQ0TCwzNTY0NUwsMzU2NDZMLDM1NjQ3TCwzNTY0OEwsMzU2NDlMLDM1NjUwTCwKKzM1 NjUxTCwzNTY1MkwsMzU2NTNMLDM1NjU0TCwzNTY1NUwsMzU2NTZMLDM1NjU3TCwzNTY1OEwsMzU2 NTlMLDM1NjYwTCwKKzM1NjYxTCwzNTY2MkwsMzU2NjNMLDM1NjY0TCwzNTY2NUwsMzU2NjZMLDM1 NjY3TCwzNTY2OEwsMzU2NjlMLDM1NjcwTCwKKzM1NjcxTCwzNTY3MkwsMzU2NzNMLDM1Njc0TCwz NTY3NUwsMzU2NzZMLDM1Njc3TCwzNTY3OEwsMzU2NzlMLDM1NjgwTCwKKzM1NjgxTCwzNTY4Mkws MzU2ODNMLDM1Njg0TCwzNTY4NUwsMzU2ODZMLDM1Njg3TCwzNTY4OEwsMzU2ODlMLDM1NjkwTCwK KzM1NjkxTCwzNTY5MkwsMzU2OTNMLDM1Njk0TCwzNTY5NUwsMzU2OTZMLDM1Njk3TCwzNTY5OEws MzU2OTlMLDM1NzAwTCwKKzM1NzAxTCwzNTcwMkwsMzU3MDNMLDM1NzA0TCwzNTcwNUwsMzU3MDZM LDM1NzA3TCwzNTcwOEwsMzU3MDlMLDM1NzEwTCwKKzM1NzExTCwzNTcxMkwsMzU3MTNMLDM1NzE0 TCwzNTcxNUwsMzU3MTZMLDM1NzE3TCwzNTcxOEwsMzU3MTlMLDM1NzIwTCwKKzM1NzIxTCwzNTcy MkwsMzU3MjNMLDM1NzI0TCwzNTcyNUwsMzU3MjZMLDM1NzI3TCwzNTcyOEwsMzU3MjlMLDM1NzMw TCwKKzM1NzMxTCwzNTczMkwsMzU3MzNMLDM1NzM0TCwzNTczNUwsMzU3MzZMLDM1NzM3TCwzNTcz OEwsMzU3MzlMLDM1NzQwTCwKKzM1NzQxTCwzNTc0MkwsMzU3NDNMLDM1NzQ0TCwzNTc0NUwsMzU3 NDZMLDM1NzQ3TCwzNTc0OEwsMzU3NDlMLDM1NzUwTCwKKzM1NzUxTCwzNTc1MkwsMzU3NTNMLDM1 NzU0TCwzNTc1NUwsMzU3NTZMLDM1NzU3TCwzNTc1OEwsMzU3NTlMLDM1NzYwTCwKKzM1NzYxTCwz NTc2MkwsMzU3NjNMLDM1NzY0TCwzNTc2NUwsMzU3NjZMLDM1NzY3TCwzNTc2OEwsMzU3NjlMLDM1 NzcwTCwKKzM1NzcxTCwzNTc3MkwsMzU3NzNMLDM1Nzc0TCwzNTc3NUwsMzU3NzZMLDM1Nzc3TCwz NTc3OEwsMzU3NzlMLDM1NzgwTCwKKzM1NzgxTCwzNTc4MkwsMzU3ODNMLDM1Nzg0TCwzNTc4NUws MzU3ODZMLDM1Nzg3TCwzNTc4OEwsMzU3ODlMLDM1NzkwTCwKKzM1NzkxTCwzNTc5MkwsMzU3OTNM LDM1Nzk0TCwzNTc5NUwsMzU3OTZMLDM1Nzk3TCwzNTc5OEwsMzU3OTlMLDM1ODAwTCwKKzM1ODAx TCwzNTgwMkwsMzU4MDNMLDM1ODA0TCwzNTgwNUwsMzU4MDZMLDM1ODA3TCwzNTgwOEwsMzU4MDlM LDM1ODEwTCwKKzM1ODExTCwzNTgxMkwsMzU4MTNMLDM1ODE0TCwzNTgxNUwsMzU4MTZMLDM1ODE3 TCwzNTgxOEwsMzU4MTlMLDM1ODIwTCwKKzM1ODIxTCwzNTgyMkwsMzU4MjNMLDM1ODI0TCwzNTgy NUwsMzU4MjZMLDM1ODI3TCwzNTgyOEwsMzU4MjlMLDM1ODMwTCwKKzM1ODMxTCwzNTgzMkwsMzU4 MzNMLDM1ODM0TCwzNTgzNUwsMzU4MzZMLDM1ODM3TCwzNTgzOEwsMzU4MzlMLDM1ODQwTCwKKzM1 ODQxTCwzNTg0MkwsMzU4NDNMLDM1ODQ0TCwzNTg0NUwsMzU4NDZMLDM1ODQ3TCwzNTg0OEwsMzU4 NDlMLDM1ODUwTCwKKzM1ODUxTCwzNTg1MkwsMzU4NTNMLDM1ODU0TCwzNTg1NUwsMzU4NTZMLDM1 ODU3TCwzNTg1OEwsMzU4NTlMLDM1ODYwTCwKKzM1ODYxTCwzNTg2MkwsMzU4NjNMLDM1ODY0TCwz NTg2NUwsMzU4NjZMLDM1ODY3TCwzNTg2OEwsMzU4NjlMLDM1ODcwTCwKKzM1ODcxTCwzNTg3Mkws MzU4NzNMLDM1ODc0TCwzNTg3NUwsMzU4NzZMLDM1ODc3TCwzNTg3OEwsMzU4NzlMLDM1ODgwTCwK KzM1ODgxTCwzNTg4MkwsMzU4ODNMLDM1ODg0TCwzNTg4NUwsMzU4ODZMLDM1ODg3TCwzNTg4OEws MzU4ODlMLDM1ODkwTCwKKzM1ODkxTCwzNTg5MkwsMzU4OTNMLDM1ODk0TCwzNTg5NUwsMzU4OTZM LDM1ODk3TCwzNTg5OEwsMzU4OTlMLDM1OTAwTCwKKzM1OTAxTCwzNTkwMkwsMzU5MDNMLDM1OTA0 TCwzNTkwNUwsMzU5MDZMLDM1OTA3TCwzNTkwOEwsMzU5MDlMLDM1OTEwTCwKKzM1OTExTCwzNTkx MkwsMzU5MTNMLDM1OTE0TCwzNTkxNUwsMzU5MTZMLDM1OTE3TCwzNTkxOEwsMzU5MTlMLDM1OTIw TCwKKzM1OTIxTCwzNTkyMkwsMzU5MjNMLDM1OTI0TCwzNTkyNUwsMzU5MjZMLDM1OTI3TCwzNTky OEwsMzU5MjlMLDM1OTMwTCwKKzM1OTMxTCwzNTkzMkwsMzU5MzNMLDM1OTM0TCwzNTkzNUwsMzU5 MzZMLDM1OTM3TCwzNTkzOEwsMzU5MzlMLDM1OTQwTCwKKzM1OTQxTCwzNTk0MkwsMzU5NDNMLDM1 OTQ0TCwzNTk0NUwsMzU5NDZMLDM1OTQ3TCwzNTk0OEwsMzU5NDlMLDM1OTUwTCwKKzM1OTUxTCwz NTk1MkwsMzU5NTNMLDM1OTU0TCwzNTk1NUwsMzU5NTZMLDM1OTU3TCwzNTk1OEwsMzU5NTlMLDM1 OTYwTCwKKzM1OTYxTCwzNTk2MkwsMzU5NjNMLDM1OTY0TCwzNTk2NUwsMzU5NjZMLDM1OTY3TCwz NTk2OEwsMzU5NjlMLDM1OTcwTCwKKzM1OTcxTCwzNTk3MkwsMzU5NzNMLDM1OTc0TCwzNTk3NUws MzU5NzZMLDM1OTc3TCwzNTk3OEwsMzU5NzlMLDM1OTgwTCwKKzM1OTgxTCwzNTk4MkwsMzU5ODNM LDM1OTg0TCwzNTk4NUwsMzU5ODZMLDM1OTg3TCwzNTk4OEwsMzU5ODlMLDM1OTkwTCwKKzM1OTkx TCwzNTk5MkwsMzU5OTNMLDM1OTk0TCwzNTk5NUwsMzU5OTZMLDM1OTk3TCwzNTk5OEwsMzU5OTlM LDM2MDAwTCwKKzM2MDAxTCwzNjAwMkwsMzYwMDNMLDM2MDA0TCwzNjAwNUwsMzYwMDZMLDM2MDA3 TCwzNjAwOEwsMzYwMDlMLDM2MDEwTCwKKzM2MDExTCwzNjAxMkwsMzYwMTNMLDM2MDE0TCwzNjAx NUwsMzYwMTZMLDM2MDE3TCwzNjAxOEwsMzYwMTlMLDM2MDIwTCwKKzM2MDIxTCwzNjAyMkwsMzYw MjNMLDM2MDI0TCwzNjAyNUwsMzYwMjZMLDM2MDI3TCwzNjAyOEwsMzYwMjlMLDM2MDMwTCwKKzM2 MDMxTCwzNjAzMkwsMzYwMzNMLDM2MDM0TCwzNjAzNUwsMzYwMzZMLDM2MDM3TCwzNjAzOEwsMzYw MzlMLDM2MDQwTCwKKzM2MDQxTCwzNjA0MkwsMzYwNDNMLDM2MDQ0TCwzNjA0NUwsMzYwNDZMLDM2 MDQ3TCwzNjA0OEwsMzYwNDlMLDM2MDUwTCwKKzM2MDUxTCwzNjA1MkwsMzYwNTNMLDM2MDU0TCwz NjA1NUwsMzYwNTZMLDM2MDU3TCwzNjA1OEwsMzYwNTlMLDM2MDYwTCwKKzM2MDYxTCwzNjA2Mkws MzYwNjNMLDM2MDY0TCwzNjA2NUwsMzYwNjZMLDM2MDY3TCwzNjA2OEwsMzYwNjlMLDM2MDcwTCwK KzM2MDcxTCwzNjA3MkwsMzYwNzNMLDM2MDc0TCwzNjA3NUwsMzYwNzZMLDM2MDc3TCwzNjA3OEws MzYwNzlMLDM2MDgwTCwKKzM2MDgxTCwzNjA4MkwsMzYwODNMLDM2MDg0TCwzNjA4NUwsMzYwODZM LDM2MDg3TCwzNjA4OEwsMzYwODlMLDM2MDkwTCwKKzM2MDkxTCwzNjA5MkwsMzYwOTNMLDM2MDk0 TCwzNjA5NUwsMzYwOTZMLDM2MDk3TCwzNjA5OEwsMzYwOTlMLDM2MTAwTCwKKzM2MTAxTCwzNjEw MkwsMzYxMDNMLDM2MTA0TCwzNjEwNUwsMzYxMDZMLDM2MTA3TCwzNjEwOEwsMzYxMDlMLDM2MTEw TCwKKzM2MTExTCwzNjExMkwsMzYxMTNMLDM2MTE0TCwzNjExNUwsMzYxMTZMLDM2MTE3TCwzNjEx OEwsMzYxMTlMLDM2MTIwTCwKKzM2MTIxTCwzNjEyMkwsMzYxMjNMLDM2MTI0TCwzNjEyNUwsMzYx MjZMLDM2MTI3TCwzNjEyOEwsMzYxMjlMLDM2MTMwTCwKKzM2MTMxTCwzNjEzMkwsMzYxMzNMLDM2 MTM0TCwzNjEzNUwsMzYxMzZMLDM2MTM3TCwzNjEzOEwsMzYxMzlMLDM2MTQwTCwKKzM2MTQxTCwz NjE0MkwsMzYxNDNMLDM2MTQ0TCwzNjE0NUwsMzYxNDZMLDM2MTQ3TCwzNjE0OEwsMzYxNDlMLDM2 MTUwTCwKKzM2MTUxTCwzNjE1MkwsMzYxNTNMLDM2MTU0TCwzNjE1NUwsMzYxNTZMLDM2MTU3TCwz NjE1OEwsMzYxNTlMLDM2MTYwTCwKKzM2MTYxTCwzNjE2MkwsMzYxNjNMLDM2MTY0TCwzNjE2NUws MzYxNjZMLDM2MTY3TCwzNjE2OEwsMzYxNjlMLDM2MTcwTCwKKzM2MTcxTCwzNjE3MkwsMzYxNzNM LDM2MTc0TCwzNjE3NUwsMzYxNzZMLDM2MTc3TCwzNjE3OEwsMzYxNzlMLDM2MTgwTCwKKzM2MTgx TCwzNjE4MkwsMzYxODNMLDM2MTg0TCwzNjE4NUwsMzYxODZMLDM2MTg3TCwzNjE4OEwsMzYxODlM LDM2MTkwTCwKKzM2MTkxTCwzNjE5MkwsMzYxOTNMLDM2MTk0TCwzNjE5NUwsMzYxOTZMLDM2MTk3 TCwzNjE5OEwsMzYxOTlMLDM2MjAwTCwKKzM2MjAxTCwzNjIwMkwsMzYyMDNMLDM2MjA0TCwzNjIw NUwsMzYyMDZMLDM2MjA3TCwzNjIwOEwsMzYyMDlMLDM2MjEwTCwKKzM2MjExTCwzNjIxMkwsMzYy MTNMLDM2MjE0TCwzNjIxNUwsMzYyMTZMLDM2MjE3TCwzNjIxOEwsMzYyMTlMLDM2MjIwTCwKKzM2 MjIxTCwzNjIyMkwsMzYyMjNMLDM2MjI0TCwzNjIyNUwsMzYyMjZMLDM2MjI3TCwzNjIyOEwsMzYy MjlMLDM2MjMwTCwKKzM2MjMxTCwzNjIzMkwsMzYyMzNMLDM2MjM0TCwzNjIzNUwsMzYyMzZMLDM2 MjM3TCwzNjIzOEwsMzYyMzlMLDM2MjQwTCwKKzM2MjQxTCwzNjI0MkwsMzYyNDNMLDM2MjQ0TCwz NjI0NUwsMzYyNDZMLDM2MjQ3TCwzNjI0OEwsMzYyNDlMLDM2MjUwTCwKKzM2MjUxTCwzNjI1Mkws MzYyNTNMLDM2MjU0TCwzNjI1NUwsMzYyNTZMLDM2MjU3TCwzNjI1OEwsMzYyNTlMLDM2MjYwTCwK KzM2MjYxTCwzNjI2MkwsMzYyNjNMLDM2MjY0TCwzNjI2NUwsMzYyNjZMLDM2MjY3TCwzNjI2OEws MzYyNjlMLDM2MjcwTCwKKzM2MjcxTCwzNjI3MkwsMzYyNzNMLDM2Mjc0TCwzNjI3NUwsMzYyNzZM LDM2Mjc3TCwzNjI3OEwsMzYyNzlMLDM2MjgwTCwKKzM2MjgxTCwzNjI4MkwsMzYyODNMLDM2Mjg0 TCwzNjI4NUwsMzYyODZMLDM2Mjg3TCwzNjI4OEwsMzYyODlMLDM2MjkwTCwKKzM2MjkxTCwzNjI5 MkwsMzYyOTNMLDM2Mjk0TCwzNjI5NUwsMzYyOTZMLDM2Mjk3TCwzNjI5OEwsMzYyOTlMLDM2MzAw TCwKKzM2MzAxTCwzNjMwMkwsMzYzMDNMLDM2MzA0TCwzNjMwNUwsMzYzMDZMLDM2MzA3TCwzNjMw OEwsMzYzMDlMLDM2MzEwTCwKKzM2MzExTCwzNjMxMkwsMzYzMTNMLDM2MzE0TCwzNjMxNUwsMzYz MTZMLDM2MzE3TCwzNjMxOEwsMzYzMTlMLDM2MzIwTCwKKzM2MzIxTCwzNjMyMkwsMzYzMjNMLDM2 MzI0TCwzNjMyNUwsMzYzMjZMLDM2MzI3TCwzNjMyOEwsMzYzMjlMLDM2MzMwTCwKKzM2MzMxTCwz NjMzMkwsMzYzMzNMLDM2MzM0TCwzNjMzNUwsMzYzMzZMLDM2MzM3TCwzNjMzOEwsMzYzMzlMLDM2 MzQwTCwKKzM2MzQxTCwzNjM0MkwsMzYzNDNMLDM2MzQ0TCwzNjM0NUwsMzYzNDZMLDM2MzQ3TCwz NjM0OEwsMzYzNDlMLDM2MzUwTCwKKzM2MzUxTCwzNjM1MkwsMzYzNTNMLDM2MzU0TCwzNjM1NUws MzYzNTZMLDM2MzU3TCwzNjM1OEwsMzYzNTlMLDM2MzYwTCwKKzM2MzYxTCwzNjM2MkwsMzYzNjNM LDM2MzY0TCwzNjM2NUwsMzYzNjZMLDM2MzY3TCwzNjM2OEwsMzYzNjlMLDM2MzcwTCwKKzM2Mzcx TCwzNjM3MkwsMzYzNzNMLDM2Mzc0TCwzNjM3NUwsMzYzNzZMLDM2Mzc3TCwzNjM3OEwsMzYzNzlM LDM2MzgwTCwKKzM2MzgxTCwzNjM4MkwsMzYzODNMLDM2Mzg0TCwzNjM4NUwsMzYzODZMLDM2Mzg3 TCwzNjM4OEwsMzYzODlMLDM2MzkwTCwKKzM2MzkxTCwzNjM5MkwsMzYzOTNMLDM2Mzk0TCwzNjM5 NUwsMzYzOTZMLDM2Mzk3TCwzNjM5OEwsMzYzOTlMLDM2NDAwTCwKKzM2NDAxTCwzNjQwMkwsMzY0 MDNMLDM2NDA0TCwzNjQwNUwsMzY0MDZMLDM2NDA3TCwzNjQwOEwsMzY0MDlMLDM2NDEwTCwKKzM2 NDExTCwzNjQxMkwsMzY0MTNMLDM2NDE0TCwzNjQxNUwsMzY0MTZMLDM2NDE3TCwzNjQxOEwsMzY0 MTlMLDM2NDIwTCwKKzM2NDIxTCwzNjQyMkwsMzY0MjNMLDM2NDI0TCwzNjQyNUwsMzY0MjZMLDM2 NDI3TCwzNjQyOEwsMzY0MjlMLDM2NDMwTCwKKzM2NDMxTCwzNjQzMkwsMzY0MzNMLDM2NDM0TCwz NjQzNUwsMzY0MzZMLDM2NDM3TCwzNjQzOEwsMzY0MzlMLDM2NDQwTCwKKzM2NDQxTCwzNjQ0Mkws MzY0NDNMLDM2NDQ0TCwzNjQ0NUwsMzY0NDZMLDM2NDQ3TCwzNjQ0OEwsMzY0NDlMLDM2NDUwTCwK KzM2NDUxTCwzNjQ1MkwsMzY0NTNMLDM2NDU0TCwzNjQ1NUwsMzY0NTZMLDM2NDU3TCwzNjQ1OEws MzY0NTlMLDM2NDYwTCwKKzM2NDYxTCwzNjQ2MkwsMzY0NjNMLDM2NDY0TCwzNjQ2NUwsMzY0NjZM LDM2NDY3TCwzNjQ2OEwsMzY0NjlMLDM2NDcwTCwKKzM2NDcxTCwzNjQ3MkwsMzY0NzNMLDM2NDc0 TCwzNjQ3NUwsMzY0NzZMLDM2NDc3TCwzNjQ3OEwsMzY0NzlMLDM2NDgwTCwKKzM2NDgxTCwzNjQ4 MkwsMzY0ODNMLDM2NDg0TCwzNjQ4NUwsMzY0ODZMLDM2NDg3TCwzNjQ4OEwsMzY0ODlMLDM2NDkw TCwKKzM2NDkxTCwzNjQ5MkwsMzY0OTNMLDM2NDk0TCwzNjQ5NUwsMzY0OTZMLDM2NDk3TCwzNjQ5 OEwsMzY0OTlMLDM2NTAwTCwKKzM2NTAxTCwzNjUwMkwsMzY1MDNMLDM2NTA0TCwzNjUwNUwsMzY1 MDZMLDM2NTA3TCwzNjUwOEwsMzY1MDlMLDM2NTEwTCwKKzM2NTExTCwzNjUxMkwsMzY1MTNMLDM2 NTE0TCwzNjUxNUwsMzY1MTZMLDM2NTE3TCwzNjUxOEwsMzY1MTlMLDM2NTIwTCwKKzM2NTIxTCwz NjUyMkwsMzY1MjNMLDM2NTI0TCwzNjUyNUwsMzY1MjZMLDM2NTI3TCwzNjUyOEwsMzY1MjlMLDM2 NTMwTCwKKzM2NTMxTCwzNjUzMkwsMzY1MzNMLDM2NTM0TCwzNjUzNUwsMzY1MzZMLDM2NTM3TCwz NjUzOEwsMzY1MzlMLDM2NTQwTCwKKzM2NTQxTCwzNjU0MkwsMzY1NDNMLDM2NTQ0TCwzNjU0NUws MzY1NDZMLDM2NTQ3TCwzNjU0OEwsMzY1NDlMLDM2NTUwTCwKKzM2NTUxTCwzNjU1MkwsMzY1NTNM LDM2NTU0TCwzNjU1NUwsMzY1NTZMLDM2NTU3TCwzNjU1OEwsMzY1NTlMLDM2NTYwTCwKKzM2NTYx TCwzNjU2MkwsMzY1NjNMLDM2NTY0TCwzNjU2NUwsMzY1NjZMLDM2NTY3TCwzNjU2OEwsMzY1NjlM LDM2NTcwTCwKKzM2NTcxTCwzNjU3MkwsMzY1NzNMLDM2NTc0TCwzNjU3NUwsMzY1NzZMLDM2NTc3 TCwzNjU3OEwsMzY1NzlMLDM2NTgwTCwKKzM2NTgxTCwzNjU4MkwsMzY1ODNMLDM2NTg0TCwzNjU4 NUwsMzY1ODZMLDM2NTg3TCwzNjU4OEwsMzY1ODlMLDM2NTkwTCwKKzM2NTkxTCwzNjU5MkwsMzY1 OTNMLDM2NTk0TCwzNjU5NUwsMzY1OTZMLDM2NTk3TCwzNjU5OEwsMzY1OTlMLDM2NjAwTCwKKzM2 NjAxTCwzNjYwMkwsMzY2MDNMLDM2NjA0TCwzNjYwNUwsMzY2MDZMLDM2NjA3TCwzNjYwOEwsMzY2 MDlMLDM2NjEwTCwKKzM2NjExTCwzNjYxMkwsMzY2MTNMLDM2NjE0TCwzNjYxNUwsMzY2MTZMLDM2 NjE3TCwzNjYxOEwsMzY2MTlMLDM2NjIwTCwKKzM2NjIxTCwzNjYyMkwsMzY2MjNMLDM2NjI0TCwz NjYyNUwsMzY2MjZMLDM2NjI3TCwzNjYyOEwsMzY2MjlMLDM2NjMwTCwKKzM2NjMxTCwzNjYzMkws MzY2MzNMLDM2NjM0TCwzNjYzNUwsMzY2MzZMLDM2NjM3TCwzNjYzOEwsMzY2MzlMLDM2NjQwTCwK KzM2NjQxTCwzNjY0MkwsMzY2NDNMLDM2NjQ0TCwzNjY0NUwsMzY2NDZMLDM2NjQ3TCwzNjY0OEws MzY2NDlMLDM2NjUwTCwKKzM2NjUxTCwzNjY1MkwsMzY2NTNMLDM2NjU0TCwzNjY1NUwsMzY2NTZM LDM2NjU3TCwzNjY1OEwsMzY2NTlMLDM2NjYwTCwKKzM2NjYxTCwzNjY2MkwsMzY2NjNMLDM2NjY0 TCwzNjY2NUwsMzY2NjZMLDM2NjY3TCwzNjY2OEwsMzY2NjlMLDM2NjcwTCwKKzM2NjcxTCwzNjY3 MkwsMzY2NzNMLDM2Njc0TCwzNjY3NUwsMzY2NzZMLDM2Njc3TCwzNjY3OEwsMzY2NzlMLDM2Njgw TCwKKzM2NjgxTCwzNjY4MkwsMzY2ODNMLDM2Njg0TCwzNjY4NUwsMzY2ODZMLDM2Njg3TCwzNjY4 OEwsMzY2ODlMLDM2NjkwTCwKKzM2NjkxTCwzNjY5MkwsMzY2OTNMLDM2Njk0TCwzNjY5NUwsMzY2 OTZMLDM2Njk3TCwzNjY5OEwsMzY2OTlMLDM2NzAwTCwKKzM2NzAxTCwzNjcwMkwsMzY3MDNMLDM2 NzA0TCwzNjcwNUwsMzY3MDZMLDM2NzA3TCwzNjcwOEwsMzY3MDlMLDM2NzEwTCwKKzM2NzExTCwz NjcxMkwsMzY3MTNMLDM2NzE0TCwzNjcxNUwsMzY3MTZMLDM2NzE3TCwzNjcxOEwsMzY3MTlMLDM2 NzIwTCwKKzM2NzIxTCwzNjcyMkwsMzY3MjNMLDM2NzI0TCwzNjcyNUwsMzY3MjZMLDM2NzI3TCwz NjcyOEwsMzY3MjlMLDM2NzMwTCwKKzM2NzMxTCwzNjczMkwsMzY3MzNMLDM2NzM0TCwzNjczNUws MzY3MzZMLDM2NzM3TCwzNjczOEwsMzY3MzlMLDM2NzQwTCwKKzM2NzQxTCwzNjc0MkwsMzY3NDNM LDM2NzQ0TCwzNjc0NUwsMzY3NDZMLDM2NzQ3TCwzNjc0OEwsMzY3NDlMLDM2NzUwTCwKKzM2NzUx TCwzNjc1MkwsMzY3NTNMLDM2NzU0TCwzNjc1NUwsMzY3NTZMLDM2NzU3TCwzNjc1OEwsMzY3NTlM LDM2NzYwTCwKKzM2NzYxTCwzNjc2MkwsMzY3NjNMLDM2NzY0TCwzNjc2NUwsMzY3NjZMLDM2NzY3 TCwzNjc2OEwsMzY3NjlMLDM2NzcwTCwKKzM2NzcxTCwzNjc3MkwsMzY3NzNMLDM2Nzc0TCwzNjc3 NUwsMzY3NzZMLDM2Nzc3TCwzNjc3OEwsMzY3NzlMLDM2NzgwTCwKKzM2NzgxTCwzNjc4MkwsMzY3 ODNMLDM2Nzg0TCwzNjc4NUwsMzY3ODZMLDM2Nzg3TCwzNjc4OEwsMzY3ODlMLDM2NzkwTCwKKzM2 NzkxTCwzNjc5MkwsMzY3OTNMLDM2Nzk0TCwzNjc5NUwsMzY3OTZMLDM2Nzk3TCwzNjc5OEwsMzY3 OTlMLDM2ODAwTCwKKzM2ODAxTCwzNjgwMkwsMzY4MDNMLDM2ODA0TCwzNjgwNUwsMzY4MDZMLDM2 ODA3TCwzNjgwOEwsMzY4MDlMLDM2ODEwTCwKKzM2ODExTCwzNjgxMkwsMzY4MTNMLDM2ODE0TCwz NjgxNUwsMzY4MTZMLDM2ODE3TCwzNjgxOEwsMzY4MTlMLDM2ODIwTCwKKzM2ODIxTCwzNjgyMkws MzY4MjNMLDM2ODI0TCwzNjgyNUwsMzY4MjZMLDM2ODI3TCwzNjgyOEwsMzY4MjlMLDM2ODMwTCwK KzM2ODMxTCwzNjgzMkwsMzY4MzNMLDM2ODM0TCwzNjgzNUwsMzY4MzZMLDM2ODM3TCwzNjgzOEws MzY4MzlMLDM2ODQwTCwKKzM2ODQxTCwzNjg0MkwsMzY4NDNMLDM2ODQ0TCwzNjg0NUwsMzY4NDZM LDM2ODQ3TCwzNjg0OEwsMzY4NDlMLDM2ODUwTCwKKzM2ODUxTCwzNjg1MkwsMzY4NTNMLDM2ODU0 TCwzNjg1NUwsMzY4NTZMLDM2ODU3TCwzNjg1OEwsMzY4NTlMLDM2ODYwTCwKKzM2ODYxTCwzNjg2 MkwsMzY4NjNMLDM2ODY0TCwzNjg2NUwsMzY4NjZMLDM2ODY3TCwzNjg2OEwsMzY4NjlMLDM2ODcw TCwKKzM2ODcxTCwzNjg3MkwsMzY4NzNMLDM2ODc0TCwzNjg3NUwsMzY4NzZMLDM2ODc3TCwzNjg3 OEwsMzY4NzlMLDM2ODgwTCwKKzM2ODgxTCwzNjg4MkwsMzY4ODNMLDM2ODg0TCwzNjg4NUwsMzY4 ODZMLDM2ODg3TCwzNjg4OEwsMzY4ODlMLDM2ODkwTCwKKzM2ODkxTCwzNjg5MkwsMzY4OTNMLDM2 ODk0TCwzNjg5NUwsMzY4OTZMLDM2ODk3TCwzNjg5OEwsMzY4OTlMLDM2OTAwTCwKKzM2OTAxTCwz NjkwMkwsMzY5MDNMLDM2OTA0TCwzNjkwNUwsMzY5MDZMLDM2OTA3TCwzNjkwOEwsMzY5MDlMLDM2 OTEwTCwKKzM2OTExTCwzNjkxMkwsMzY5MTNMLDM2OTE0TCwzNjkxNUwsMzY5MTZMLDM2OTE3TCwz NjkxOEwsMzY5MTlMLDM2OTIwTCwKKzM2OTIxTCwzNjkyMkwsMzY5MjNMLDM2OTI0TCwzNjkyNUws MzY5MjZMLDM2OTI3TCwzNjkyOEwsMzY5MjlMLDM2OTMwTCwKKzM2OTMxTCwzNjkzMkwsMzY5MzNM LDM2OTM0TCwzNjkzNUwsMzY5MzZMLDM2OTM3TCwzNjkzOEwsMzY5MzlMLDM2OTQwTCwKKzM2OTQx TCwzNjk0MkwsMzY5NDNMLDM2OTQ0TCwzNjk0NUwsMzY5NDZMLDM2OTQ3TCwzNjk0OEwsMzY5NDlM LDM2OTUwTCwKKzM2OTUxTCwzNjk1MkwsMzY5NTNMLDM2OTU0TCwzNjk1NUwsMzY5NTZMLDM2OTU3 TCwzNjk1OEwsMzY5NTlMLDM2OTYwTCwKKzM2OTYxTCwzNjk2MkwsMzY5NjNMLDM2OTY0TCwzNjk2 NUwsMzY5NjZMLDM2OTY3TCwzNjk2OEwsMzY5NjlMLDM2OTcwTCwKKzM2OTcxTCwzNjk3MkwsMzY5 NzNMLDM2OTc0TCwzNjk3NUwsMzY5NzZMLDM2OTc3TCwzNjk3OEwsMzY5NzlMLDM2OTgwTCwKKzM2 OTgxTCwzNjk4MkwsMzY5ODNMLDM2OTg0TCwzNjk4NUwsMzY5ODZMLDM2OTg3TCwzNjk4OEwsMzY5 ODlMLDM2OTkwTCwKKzM2OTkxTCwzNjk5MkwsMzY5OTNMLDM2OTk0TCwzNjk5NUwsMzY5OTZMLDM2 OTk3TCwzNjk5OEwsMzY5OTlMLDM3MDAwTCwKKzM3MDAxTCwzNzAwMkwsMzcwMDNMLDM3MDA0TCwz NzAwNUwsMzcwMDZMLDM3MDA3TCwzNzAwOEwsMzcwMDlMLDM3MDEwTCwKKzM3MDExTCwzNzAxMkws MzcwMTNMLDM3MDE0TCwzNzAxNUwsMzcwMTZMLDM3MDE3TCwzNzAxOEwsMzcwMTlMLDM3MDIwTCwK KzM3MDIxTCwzNzAyMkwsMzcwMjNMLDM3MDI0TCwzNzAyNUwsMzcwMjZMLDM3MDI3TCwzNzAyOEws MzcwMjlMLDM3MDMwTCwKKzM3MDMxTCwzNzAzMkwsMzcwMzNMLDM3MDM0TCwzNzAzNUwsMzcwMzZM LDM3MDM3TCwzNzAzOEwsMzcwMzlMLDM3MDQwTCwKKzM3MDQxTCwzNzA0MkwsMzcwNDNMLDM3MDQ0 TCwzNzA0NUwsMzcwNDZMLDM3MDQ3TCwzNzA0OEwsMzcwNDlMLDM3MDUwTCwKKzM3MDUxTCwzNzA1 MkwsMzcwNTNMLDM3MDU0TCwzNzA1NUwsMzcwNTZMLDM3MDU3TCwzNzA1OEwsMzcwNTlMLDM3MDYw TCwKKzM3MDYxTCwzNzA2MkwsMzcwNjNMLDM3MDY0TCwzNzA2NUwsMzcwNjZMLDM3MDY3TCwzNzA2 OEwsMzcwNjlMLDM3MDcwTCwKKzM3MDcxTCwzNzA3MkwsMzcwNzNMLDM3MDc0TCwzNzA3NUwsMzcw NzZMLDM3MDc3TCwzNzA3OEwsMzcwNzlMLDM3MDgwTCwKKzM3MDgxTCwzNzA4MkwsMzcwODNMLDM3 MDg0TCwzNzA4NUwsMzcwODZMLDM3MDg3TCwzNzA4OEwsMzcwODlMLDM3MDkwTCwKKzM3MDkxTCwz NzA5MkwsMzcwOTNMLDM3MDk0TCwzNzA5NUwsMzcwOTZMLDM3MDk3TCwzNzA5OEwsMzcwOTlMLDM3 MTAwTCwKKzM3MTAxTCwzNzEwMkwsMzcxMDNMLDM3MTA0TCwzNzEwNUwsMzcxMDZMLDM3MTA3TCwz NzEwOEwsMzcxMDlMLDM3MTEwTCwKKzM3MTExTCwzNzExMkwsMzcxMTNMLDM3MTE0TCwzNzExNUws MzcxMTZMLDM3MTE3TCwzNzExOEwsMzcxMTlMLDM3MTIwTCwKKzM3MTIxTCwzNzEyMkwsMzcxMjNM LDM3MTI0TCwzNzEyNUwsMzcxMjZMLDM3MTI3TCwzNzEyOEwsMzcxMjlMLDM3MTMwTCwKKzM3MTMx TCwzNzEzMkwsMzcxMzNMLDM3MTM0TCwzNzEzNUwsMzcxMzZMLDM3MTM3TCwzNzEzOEwsMzcxMzlM LDM3MTQwTCwKKzM3MTQxTCwzNzE0MkwsMzcxNDNMLDM3MTQ0TCwzNzE0NUwsMzcxNDZMLDM3MTQ3 TCwzNzE0OEwsMzcxNDlMLDM3MTUwTCwKKzM3MTUxTCwzNzE1MkwsMzcxNTNMLDM3MTU0TCwzNzE1 NUwsMzcxNTZMLDM3MTU3TCwzNzE1OEwsMzcxNTlMLDM3MTYwTCwKKzM3MTYxTCwzNzE2MkwsMzcx NjNMLDM3MTY0TCwzNzE2NUwsMzcxNjZMLDM3MTY3TCwzNzE2OEwsMzcxNjlMLDM3MTcwTCwKKzM3 MTcxTCwzNzE3MkwsMzcxNzNMLDM3MTc0TCwzNzE3NUwsMzcxNzZMLDM3MTc3TCwzNzE3OEwsMzcx NzlMLDM3MTgwTCwKKzM3MTgxTCwzNzE4MkwsMzcxODNMLDM3MTg0TCwzNzE4NUwsMzcxODZMLDM3 MTg3TCwzNzE4OEwsMzcxODlMLDM3MTkwTCwKKzM3MTkxTCwzNzE5MkwsMzcxOTNMLDM3MTk0TCwz NzE5NUwsMzcxOTZMLDM3MTk3TCwzNzE5OEwsMzcxOTlMLDM3MjAwTCwKKzM3MjAxTCwzNzIwMkws MzcyMDNMLDM3MjA0TCwzNzIwNUwsMzcyMDZMLDM3MjA3TCwzNzIwOEwsMzcyMDlMLDM3MjEwTCwK KzM3MjExTCwzNzIxMkwsMzcyMTNMLDM3MjE0TCwzNzIxNUwsMzcyMTZMLDM3MjE3TCwzNzIxOEws MzcyMTlMLDM3MjIwTCwKKzM3MjIxTCwzNzIyMkwsMzcyMjNMLDM3MjI0TCwzNzIyNUwsMzcyMjZM LDM3MjI3TCwzNzIyOEwsMzcyMjlMLDM3MjMwTCwKKzM3MjMxTCwzNzIzMkwsMzcyMzNMLDM3MjM0 TCwzNzIzNUwsMzcyMzZMLDM3MjM3TCwzNzIzOEwsMzcyMzlMLDM3MjQwTCwKKzM3MjQxTCwzNzI0 MkwsMzcyNDNMLDM3MjQ0TCwzNzI0NUwsMzcyNDZMLDM3MjQ3TCwzNzI0OEwsMzcyNDlMLDM3MjUw TCwKKzM3MjUxTCwzNzI1MkwsMzcyNTNMLDM3MjU0TCwzNzI1NUwsMzcyNTZMLDM3MjU3TCwzNzI1 OEwsMzcyNTlMLDM3MjYwTCwKKzM3MjYxTCwzNzI2MkwsMzcyNjNMLDM3MjY0TCwzNzI2NUwsMzcy NjZMLDM3MjY3TCwzNzI2OEwsMzcyNjlMLDM3MjcwTCwKKzM3MjcxTCwzNzI3MkwsMzcyNzNMLDM3 Mjc0TCwzNzI3NUwsMzcyNzZMLDM3Mjc3TCwzNzI3OEwsMzcyNzlMLDM3MjgwTCwKKzM3MjgxTCwz NzI4MkwsMzcyODNMLDM3Mjg0TCwzNzI4NUwsMzcyODZMLDM3Mjg3TCwzNzI4OEwsMzcyODlMLDM3 MjkwTCwKKzM3MjkxTCwzNzI5MkwsMzcyOTNMLDM3Mjk0TCwzNzI5NUwsMzcyOTZMLDM3Mjk3TCwz NzI5OEwsMzcyOTlMLDM3MzAwTCwKKzM3MzAxTCwzNzMwMkwsMzczMDNMLDM3MzA0TCwzNzMwNUws MzczMDZMLDM3MzA3TCwzNzMwOEwsMzczMDlMLDM3MzEwTCwKKzM3MzExTCwzNzMxMkwsMzczMTNM LDM3MzE0TCwzNzMxNUwsMzczMTZMLDM3MzE3TCwzNzMxOEwsMzczMTlMLDM3MzIwTCwKKzM3MzIx TCwzNzMyMkwsMzczMjNMLDM3MzI0TCwzNzMyNUwsMzczMjZMLDM3MzI3TCwzNzMyOEwsMzczMjlM LDM3MzMwTCwKKzM3MzMxTCwzNzMzMkwsMzczMzNMLDM3MzM0TCwzNzMzNUwsMzczMzZMLDM3MzM3 TCwzNzMzOEwsMzczMzlMLDM3MzQwTCwKKzM3MzQxTCwzNzM0MkwsMzczNDNMLDM3MzQ0TCwzNzM0 NUwsMzczNDZMLDM3MzQ3TCwzNzM0OEwsMzczNDlMLDM3MzUwTCwKKzM3MzUxTCwzNzM1MkwsMzcz NTNMLDM3MzU0TCwzNzM1NUwsMzczNTZMLDM3MzU3TCwzNzM1OEwsMzczNTlMLDM3MzYwTCwKKzM3 MzYxTCwzNzM2MkwsMzczNjNMLDM3MzY0TCwzNzM2NUwsMzczNjZMLDM3MzY3TCwzNzM2OEwsMzcz NjlMLDM3MzcwTCwKKzM3MzcxTCwzNzM3MkwsMzczNzNMLDM3Mzc0TCwzNzM3NUwsMzczNzZMLDM3 Mzc3TCwzNzM3OEwsMzczNzlMLDM3MzgwTCwKKzM3MzgxTCwzNzM4MkwsMzczODNMLDM3Mzg0TCwz NzM4NUwsMzczODZMLDM3Mzg3TCwzNzM4OEwsMzczODlMLDM3MzkwTCwKKzM3MzkxTCwzNzM5Mkws MzczOTNMLDM3Mzk0TCwzNzM5NUwsMzczOTZMLDM3Mzk3TCwzNzM5OEwsMzczOTlMLDM3NDAwTCwK KzM3NDAxTCwzNzQwMkwsMzc0MDNMLDM3NDA0TCwzNzQwNUwsMzc0MDZMLDM3NDA3TCwzNzQwOEws Mzc0MDlMLDM3NDEwTCwKKzM3NDExTCwzNzQxMkwsMzc0MTNMLDM3NDE0TCwzNzQxNUwsMzc0MTZM LDM3NDE3TCwzNzQxOEwsMzc0MTlMLDM3NDIwTCwKKzM3NDIxTCwzNzQyMkwsMzc0MjNMLDM3NDI0 TCwzNzQyNUwsMzc0MjZMLDM3NDI3TCwzNzQyOEwsMzc0MjlMLDM3NDMwTCwKKzM3NDMxTCwzNzQz MkwsMzc0MzNMLDM3NDM0TCwzNzQzNUwsMzc0MzZMLDM3NDM3TCwzNzQzOEwsMzc0MzlMLDM3NDQw TCwKKzM3NDQxTCwzNzQ0MkwsMzc0NDNMLDM3NDQ0TCwzNzQ0NUwsMzc0NDZMLDM3NDQ3TCwzNzQ0 OEwsMzc0NDlMLDM3NDUwTCwKKzM3NDUxTCwzNzQ1MkwsMzc0NTNMLDM3NDU0TCwzNzQ1NUwsMzc0 NTZMLDM3NDU3TCwzNzQ1OEwsMzc0NTlMLDM3NDYwTCwKKzM3NDYxTCwzNzQ2MkwsMzc0NjNMLDM3 NDY0TCwzNzQ2NUwsMzc0NjZMLDM3NDY3TCwzNzQ2OEwsMzc0NjlMLDM3NDcwTCwKKzM3NDcxTCwz NzQ3MkwsMzc0NzNMLDM3NDc0TCwzNzQ3NUwsMzc0NzZMLDM3NDc3TCwzNzQ3OEwsMzc0NzlMLDM3 NDgwTCwKKzM3NDgxTCwzNzQ4MkwsMzc0ODNMLDM3NDg0TCwzNzQ4NUwsMzc0ODZMLDM3NDg3TCwz NzQ4OEwsMzc0ODlMLDM3NDkwTCwKKzM3NDkxTCwzNzQ5MkwsMzc0OTNMLDM3NDk0TCwzNzQ5NUws Mzc0OTZMLDM3NDk3TCwzNzQ5OEwsMzc0OTlMLDM3NTAwTCwKKzM3NTAxTCwzNzUwMkwsMzc1MDNM LDM3NTA0TCwzNzUwNUwsMzc1MDZMLDM3NTA3TCwzNzUwOEwsMzc1MDlMLDM3NTEwTCwKKzM3NTEx TCwzNzUxMkwsMzc1MTNMLDM3NTE0TCwzNzUxNUwsMzc1MTZMLDM3NTE3TCwzNzUxOEwsMzc1MTlM LDM3NTIwTCwKKzM3NTIxTCwzNzUyMkwsMzc1MjNMLDM3NTI0TCwzNzUyNUwsMzc1MjZMLDM3NTI3 TCwzNzUyOEwsMzc1MjlMLDM3NTMwTCwKKzM3NTMxTCwzNzUzMkwsMzc1MzNMLDM3NTM0TCwzNzUz NUwsMzc1MzZMLDM3NTM3TCwzNzUzOEwsMzc1MzlMLDM3NTQwTCwKKzM3NTQxTCwzNzU0MkwsMzc1 NDNMLDM3NTQ0TCwzNzU0NUwsMzc1NDZMLDM3NTQ3TCwzNzU0OEwsMzc1NDlMLDM3NTUwTCwKKzM3 NTUxTCwzNzU1MkwsMzc1NTNMLDM3NTU0TCwzNzU1NUwsMzc1NTZMLDM3NTU3TCwzNzU1OEwsMzc1 NTlMLDM3NTYwTCwKKzM3NTYxTCwzNzU2MkwsMzc1NjNMLDM3NTY0TCwzNzU2NUwsMzc1NjZMLDM3 NTY3TCwzNzU2OEwsMzc1NjlMLDM3NTcwTCwKKzM3NTcxTCwzNzU3MkwsMzc1NzNMLDM3NTc0TCwz NzU3NUwsMzc1NzZMLDM3NTc3TCwzNzU3OEwsMzc1NzlMLDM3NTgwTCwKKzM3NTgxTCwzNzU4Mkws Mzc1ODNMLDM3NTg0TCwzNzU4NUwsMzc1ODZMLDM3NTg3TCwzNzU4OEwsMzc1ODlMLDM3NTkwTCwK KzM3NTkxTCwzNzU5MkwsMzc1OTNMLDM3NTk0TCwzNzU5NUwsMzc1OTZMLDM3NTk3TCwzNzU5OEws Mzc1OTlMLDM3NjAwTCwKKzM3NjAxTCwzNzYwMkwsMzc2MDNMLDM3NjA0TCwzNzYwNUwsMzc2MDZM LDM3NjA3TCwzNzYwOEwsMzc2MDlMLDM3NjEwTCwKKzM3NjExTCwzNzYxMkwsMzc2MTNMLDM3NjE0 TCwzNzYxNUwsMzc2MTZMLDM3NjE3TCwzNzYxOEwsMzc2MTlMLDM3NjIwTCwKKzM3NjIxTCwzNzYy MkwsMzc2MjNMLDM3NjI0TCwzNzYyNUwsMzc2MjZMLDM3NjI3TCwzNzYyOEwsMzc2MjlMLDM3NjMw TCwKKzM3NjMxTCwzNzYzMkwsMzc2MzNMLDM3NjM0TCwzNzYzNUwsMzc2MzZMLDM3NjM3TCwzNzYz OEwsMzc2MzlMLDM3NjQwTCwKKzM3NjQxTCwzNzY0MkwsMzc2NDNMLDM3NjQ0TCwzNzY0NUwsMzc2 NDZMLDM3NjQ3TCwzNzY0OEwsMzc2NDlMLDM3NjUwTCwKKzM3NjUxTCwzNzY1MkwsMzc2NTNMLDM3 NjU0TCwzNzY1NUwsMzc2NTZMLDM3NjU3TCwzNzY1OEwsMzc2NTlMLDM3NjYwTCwKKzM3NjYxTCwz NzY2MkwsMzc2NjNMLDM3NjY0TCwzNzY2NUwsMzc2NjZMLDM3NjY3TCwzNzY2OEwsMzc2NjlMLDM3 NjcwTCwKKzM3NjcxTCwzNzY3MkwsMzc2NzNMLDM3Njc0TCwzNzY3NUwsMzc2NzZMLDM3Njc3TCwz NzY3OEwsMzc2NzlMLDM3NjgwTCwKKzM3NjgxTCwzNzY4MkwsMzc2ODNMLDM3Njg0TCwzNzY4NUws Mzc2ODZMLDM3Njg3TCwzNzY4OEwsMzc2ODlMLDM3NjkwTCwKKzM3NjkxTCwzNzY5MkwsMzc2OTNM LDM3Njk0TCwzNzY5NUwsMzc2OTZMLDM3Njk3TCwzNzY5OEwsMzc2OTlMLDM3NzAwTCwKKzM3NzAx TCwzNzcwMkwsMzc3MDNMLDM3NzA0TCwzNzcwNUwsMzc3MDZMLDM3NzA3TCwzNzcwOEwsMzc3MDlM LDM3NzEwTCwKKzM3NzExTCwzNzcxMkwsMzc3MTNMLDM3NzE0TCwzNzcxNUwsMzc3MTZMLDM3NzE3 TCwzNzcxOEwsMzc3MTlMLDM3NzIwTCwKKzM3NzIxTCwzNzcyMkwsMzc3MjNMLDM3NzI0TCwzNzcy NUwsMzc3MjZMLDM3NzI3TCwzNzcyOEwsMzc3MjlMLDM3NzMwTCwKKzM3NzMxTCwzNzczMkwsMzc3 MzNMLDM3NzM0TCwzNzczNUwsMzc3MzZMLDM3NzM3TCwzNzczOEwsMzc3MzlMLDM3NzQwTCwKKzM3 NzQxTCwzNzc0MkwsMzc3NDNMLDM3NzQ0TCwzNzc0NUwsMzc3NDZMLDM3NzQ3TCwzNzc0OEwsMzc3 NDlMLDM3NzUwTCwKKzM3NzUxTCwzNzc1MkwsMzc3NTNMLDM3NzU0TCwzNzc1NUwsMzc3NTZMLDM3 NzU3TCwzNzc1OEwsMzc3NTlMLDM3NzYwTCwKKzM3NzYxTCwzNzc2MkwsMzc3NjNMLDM3NzY0TCwz Nzc2NUwsMzc3NjZMLDM3NzY3TCwzNzc2OEwsMzc3NjlMLDM3NzcwTCwKKzM3NzcxTCwzNzc3Mkws Mzc3NzNMLDM3Nzc0TCwzNzc3NUwsMzc3NzZMLDM3Nzc3TCwzNzc3OEwsMzc3NzlMLDM3NzgwTCwK KzM3NzgxTCwzNzc4MkwsMzc3ODNMLDM3Nzg0TCwzNzc4NUwsMzc3ODZMLDM3Nzg3TCwzNzc4OEws Mzc3ODlMLDM3NzkwTCwKKzM3NzkxTCwzNzc5MkwsMzc3OTNMLDM3Nzk0TCwzNzc5NUwsMzc3OTZM LDM3Nzk3TCwzNzc5OEwsMzc3OTlMLDM3ODAwTCwKKzM3ODAxTCwzNzgwMkwsMzc4MDNMLDM3ODA0 TCwzNzgwNUwsMzc4MDZMLDM3ODA3TCwzNzgwOEwsMzc4MDlMLDM3ODEwTCwKKzM3ODExTCwzNzgx MkwsMzc4MTNMLDM3ODE0TCwzNzgxNUwsMzc4MTZMLDM3ODE3TCwzNzgxOEwsMzc4MTlMLDM3ODIw TCwKKzM3ODIxTCwzNzgyMkwsMzc4MjNMLDM3ODI0TCwzNzgyNUwsMzc4MjZMLDM3ODI3TCwzNzgy OEwsMzc4MjlMLDM3ODMwTCwKKzM3ODMxTCwzNzgzMkwsMzc4MzNMLDM3ODM0TCwzNzgzNUwsMzc4 MzZMLDM3ODM3TCwzNzgzOEwsMzc4MzlMLDM3ODQwTCwKKzM3ODQxTCwzNzg0MkwsMzc4NDNMLDM3 ODQ0TCwzNzg0NUwsMzc4NDZMLDM3ODQ3TCwzNzg0OEwsMzc4NDlMLDM3ODUwTCwKKzM3ODUxTCwz Nzg1MkwsMzc4NTNMLDM3ODU0TCwzNzg1NUwsMzc4NTZMLDM3ODU3TCwzNzg1OEwsMzc4NTlMLDM3 ODYwTCwKKzM3ODYxTCwzNzg2MkwsMzc4NjNMLDM3ODY0TCwzNzg2NUwsMzc4NjZMLDM3ODY3TCwz Nzg2OEwsMzc4NjlMLDM3ODcwTCwKKzM3ODcxTCwzNzg3MkwsMzc4NzNMLDM3ODc0TCwzNzg3NUws Mzc4NzZMLDM3ODc3TCwzNzg3OEwsMzc4NzlMLDM3ODgwTCwKKzM3ODgxTCwzNzg4MkwsMzc4ODNM LDM3ODg0TCwzNzg4NUwsMzc4ODZMLDM3ODg3TCwzNzg4OEwsMzc4ODlMLDM3ODkwTCwKKzM3ODkx TCwzNzg5MkwsMzc4OTNMLDM3ODk0TCwzNzg5NUwsMzc4OTZMLDM3ODk3TCwzNzg5OEwsMzc4OTlM LDM3OTAwTCwKKzM3OTAxTCwzNzkwMkwsMzc5MDNMLDM3OTA0TCwzNzkwNUwsMzc5MDZMLDM3OTA3 TCwzNzkwOEwsMzc5MDlMLDM3OTEwTCwKKzM3OTExTCwzNzkxMkwsMzc5MTNMLDM3OTE0TCwzNzkx NUwsMzc5MTZMLDM3OTE3TCwzNzkxOEwsMzc5MTlMLDM3OTIwTCwKKzM3OTIxTCwzNzkyMkwsMzc5 MjNMLDM3OTI0TCwzNzkyNUwsMzc5MjZMLDM3OTI3TCwzNzkyOEwsMzc5MjlMLDM3OTMwTCwKKzM3 OTMxTCwzNzkzMkwsMzc5MzNMLDM3OTM0TCwzNzkzNUwsMzc5MzZMLDM3OTM3TCwzNzkzOEwsMzc5 MzlMLDM3OTQwTCwKKzM3OTQxTCwzNzk0MkwsMzc5NDNMLDM3OTQ0TCwzNzk0NUwsMzc5NDZMLDM3 OTQ3TCwzNzk0OEwsMzc5NDlMLDM3OTUwTCwKKzM3OTUxTCwzNzk1MkwsMzc5NTNMLDM3OTU0TCwz Nzk1NUwsMzc5NTZMLDM3OTU3TCwzNzk1OEwsMzc5NTlMLDM3OTYwTCwKKzM3OTYxTCwzNzk2Mkws Mzc5NjNMLDM3OTY0TCwzNzk2NUwsMzc5NjZMLDM3OTY3TCwzNzk2OEwsMzc5NjlMLDM3OTcwTCwK KzM3OTcxTCwzNzk3MkwsMzc5NzNMLDM3OTc0TCwzNzk3NUwsMzc5NzZMLDM3OTc3TCwzNzk3OEws Mzc5NzlMLDM3OTgwTCwKKzM3OTgxTCwzNzk4MkwsMzc5ODNMLDM3OTg0TCwzNzk4NUwsMzc5ODZM LDM3OTg3TCwzNzk4OEwsMzc5ODlMLDM3OTkwTCwKKzM3OTkxTCwzNzk5MkwsMzc5OTNMLDM3OTk0 TCwzNzk5NUwsMzc5OTZMLDM3OTk3TCwzNzk5OEwsMzc5OTlMLDM4MDAwTCwKKzM4MDAxTCwzODAw MkwsMzgwMDNMLDM4MDA0TCwzODAwNUwsMzgwMDZMLDM4MDA3TCwzODAwOEwsMzgwMDlMLDM4MDEw TCwKKzM4MDExTCwzODAxMkwsMzgwMTNMLDM4MDE0TCwzODAxNUwsMzgwMTZMLDM4MDE3TCwzODAx OEwsMzgwMTlMLDM4MDIwTCwKKzM4MDIxTCwzODAyMkwsMzgwMjNMLDM4MDI0TCwzODAyNUwsMzgw MjZMLDM4MDI3TCwzODAyOEwsMzgwMjlMLDM4MDMwTCwKKzM4MDMxTCwzODAzMkwsMzgwMzNMLDM4 MDM0TCwzODAzNUwsMzgwMzZMLDM4MDM3TCwzODAzOEwsMzgwMzlMLDM4MDQwTCwKKzM4MDQxTCwz ODA0MkwsMzgwNDNMLDM4MDQ0TCwzODA0NUwsMzgwNDZMLDM4MDQ3TCwzODA0OEwsMzgwNDlMLDM4 MDUwTCwKKzM4MDUxTCwzODA1MkwsMzgwNTNMLDM4MDU0TCwzODA1NUwsMzgwNTZMLDM4MDU3TCwz ODA1OEwsMzgwNTlMLDM4MDYwTCwKKzM4MDYxTCwzODA2MkwsMzgwNjNMLDM4MDY0TCwzODA2NUws MzgwNjZMLDM4MDY3TCwzODA2OEwsMzgwNjlMLDM4MDcwTCwKKzM4MDcxTCwzODA3MkwsMzgwNzNM LDM4MDc0TCwzODA3NUwsMzgwNzZMLDM4MDc3TCwzODA3OEwsMzgwNzlMLDM4MDgwTCwKKzM4MDgx TCwzODA4MkwsMzgwODNMLDM4MDg0TCwzODA4NUwsMzgwODZMLDM4MDg3TCwzODA4OEwsMzgwODlM LDM4MDkwTCwKKzM4MDkxTCwzODA5MkwsMzgwOTNMLDM4MDk0TCwzODA5NUwsMzgwOTZMLDM4MDk3 TCwzODA5OEwsMzgwOTlMLDM4MTAwTCwKKzM4MTAxTCwzODEwMkwsMzgxMDNMLDM4MTA0TCwzODEw NUwsMzgxMDZMLDM4MTA3TCwzODEwOEwsMzgxMDlMLDM4MTEwTCwKKzM4MTExTCwzODExMkwsMzgx MTNMLDM4MTE0TCwzODExNUwsMzgxMTZMLDM4MTE3TCwzODExOEwsMzgxMTlMLDM4MTIwTCwKKzM4 MTIxTCwzODEyMkwsMzgxMjNMLDM4MTI0TCwzODEyNUwsMzgxMjZMLDM4MTI3TCwzODEyOEwsMzgx MjlMLDM4MTMwTCwKKzM4MTMxTCwzODEzMkwsMzgxMzNMLDM4MTM0TCwzODEzNUwsMzgxMzZMLDM4 MTM3TCwzODEzOEwsMzgxMzlMLDM4MTQwTCwKKzM4MTQxTCwzODE0MkwsMzgxNDNMLDM4MTQ0TCwz ODE0NUwsMzgxNDZMLDM4MTQ3TCwzODE0OEwsMzgxNDlMLDM4MTUwTCwKKzM4MTUxTCwzODE1Mkws MzgxNTNMLDM4MTU0TCwzODE1NUwsMzgxNTZMLDM4MTU3TCwzODE1OEwsMzgxNTlMLDM4MTYwTCwK KzM4MTYxTCwzODE2MkwsMzgxNjNMLDM4MTY0TCwzODE2NUwsMzgxNjZMLDM4MTY3TCwzODE2OEws MzgxNjlMLDM4MTcwTCwKKzM4MTcxTCwzODE3MkwsMzgxNzNMLDM4MTc0TCwzODE3NUwsMzgxNzZM LDM4MTc3TCwzODE3OEwsMzgxNzlMLDM4MTgwTCwKKzM4MTgxTCwzODE4MkwsMzgxODNMLDM4MTg0 TCwzODE4NUwsMzgxODZMLDM4MTg3TCwzODE4OEwsMzgxODlMLDM4MTkwTCwKKzM4MTkxTCwzODE5 MkwsMzgxOTNMLDM4MTk0TCwzODE5NUwsMzgxOTZMLDM4MTk3TCwzODE5OEwsMzgxOTlMLDM4MjAw TCwKKzM4MjAxTCwzODIwMkwsMzgyMDNMLDM4MjA0TCwzODIwNUwsMzgyMDZMLDM4MjA3TCwzODIw OEwsMzgyMDlMLDM4MjEwTCwKKzM4MjExTCwzODIxMkwsMzgyMTNMLDM4MjE0TCwzODIxNUwsMzgy MTZMLDM4MjE3TCwzODIxOEwsMzgyMTlMLDM4MjIwTCwKKzM4MjIxTCwzODIyMkwsMzgyMjNMLDM4 MjI0TCwzODIyNUwsMzgyMjZMLDM4MjI3TCwzODIyOEwsMzgyMjlMLDM4MjMwTCwKKzM4MjMxTCwz ODIzMkwsMzgyMzNMLDM4MjM0TCwzODIzNUwsMzgyMzZMLDM4MjM3TCwzODIzOEwsMzgyMzlMLDM4 MjQwTCwKKzM4MjQxTCwzODI0MkwsMzgyNDNMLDM4MjQ0TCwzODI0NUwsMzgyNDZMLDM4MjQ3TCwz ODI0OEwsMzgyNDlMLDM4MjUwTCwKKzM4MjUxTCwzODI1MkwsMzgyNTNMLDM4MjU0TCwzODI1NUws MzgyNTZMLDM4MjU3TCwzODI1OEwsMzgyNTlMLDM4MjYwTCwKKzM4MjYxTCwzODI2MkwsMzgyNjNM LDM4MjY0TCwzODI2NUwsMzgyNjZMLDM4MjY3TCwzODI2OEwsMzgyNjlMLDM4MjcwTCwKKzM4Mjcx TCwzODI3MkwsMzgyNzNMLDM4Mjc0TCwzODI3NUwsMzgyNzZMLDM4Mjc3TCwzODI3OEwsMzgyNzlM LDM4MjgwTCwKKzM4MjgxTCwzODI4MkwsMzgyODNMLDM4Mjg0TCwzODI4NUwsMzgyODZMLDM4Mjg3 TCwzODI4OEwsMzgyODlMLDM4MjkwTCwKKzM4MjkxTCwzODI5MkwsMzgyOTNMLDM4Mjk0TCwzODI5 NUwsMzgyOTZMLDM4Mjk3TCwzODI5OEwsMzgyOTlMLDM4MzAwTCwKKzM4MzAxTCwzODMwMkwsMzgz MDNMLDM4MzA0TCwzODMwNUwsMzgzMDZMLDM4MzA3TCwzODMwOEwsMzgzMDlMLDM4MzEwTCwKKzM4 MzExTCwzODMxMkwsMzgzMTNMLDM4MzE0TCwzODMxNUwsMzgzMTZMLDM4MzE3TCwzODMxOEwsMzgz MTlMLDM4MzIwTCwKKzM4MzIxTCwzODMyMkwsMzgzMjNMLDM4MzI0TCwzODMyNUwsMzgzMjZMLDM4 MzI3TCwzODMyOEwsMzgzMjlMLDM4MzMwTCwKKzM4MzMxTCwzODMzMkwsMzgzMzNMLDM4MzM0TCwz ODMzNUwsMzgzMzZMLDM4MzM3TCwzODMzOEwsMzgzMzlMLDM4MzQwTCwKKzM4MzQxTCwzODM0Mkws MzgzNDNMLDM4MzQ0TCwzODM0NUwsMzgzNDZMLDM4MzQ3TCwzODM0OEwsMzgzNDlMLDM4MzUwTCwK KzM4MzUxTCwzODM1MkwsMzgzNTNMLDM4MzU0TCwzODM1NUwsMzgzNTZMLDM4MzU3TCwzODM1OEws MzgzNTlMLDM4MzYwTCwKKzM4MzYxTCwzODM2MkwsMzgzNjNMLDM4MzY0TCwzODM2NUwsMzgzNjZM LDM4MzY3TCwzODM2OEwsMzgzNjlMLDM4MzcwTCwKKzM4MzcxTCwzODM3MkwsMzgzNzNMLDM4Mzc0 TCwzODM3NUwsMzgzNzZMLDM4Mzc3TCwzODM3OEwsMzgzNzlMLDM4MzgwTCwKKzM4MzgxTCwzODM4 MkwsMzgzODNMLDM4Mzg0TCwzODM4NUwsMzgzODZMLDM4Mzg3TCwzODM4OEwsMzgzODlMLDM4Mzkw TCwKKzM4MzkxTCwzODM5MkwsMzgzOTNMLDM4Mzk0TCwzODM5NUwsMzgzOTZMLDM4Mzk3TCwzODM5 OEwsMzgzOTlMLDM4NDAwTCwKKzM4NDAxTCwzODQwMkwsMzg0MDNMLDM4NDA0TCwzODQwNUwsMzg0 MDZMLDM4NDA3TCwzODQwOEwsMzg0MDlMLDM4NDEwTCwKKzM4NDExTCwzODQxMkwsMzg0MTNMLDM4 NDE0TCwzODQxNUwsMzg0MTZMLDM4NDE3TCwzODQxOEwsMzg0MTlMLDM4NDIwTCwKKzM4NDIxTCwz ODQyMkwsMzg0MjNMLDM4NDI0TCwzODQyNUwsMzg0MjZMLDM4NDI3TCwzODQyOEwsMzg0MjlMLDM4 NDMwTCwKKzM4NDMxTCwzODQzMkwsMzg0MzNMLDM4NDM0TCwzODQzNUwsMzg0MzZMLDM4NDM3TCwz ODQzOEwsMzg0MzlMLDM4NDQwTCwKKzM4NDQxTCwzODQ0MkwsMzg0NDNMLDM4NDQ0TCwzODQ0NUws Mzg0NDZMLDM4NDQ3TCwzODQ0OEwsMzg0NDlMLDM4NDUwTCwKKzM4NDUxTCwzODQ1MkwsMzg0NTNM LDM4NDU0TCwzODQ1NUwsMzg0NTZMLDM4NDU3TCwzODQ1OEwsMzg0NTlMLDM4NDYwTCwKKzM4NDYx TCwzODQ2MkwsMzg0NjNMLDM4NDY0TCwzODQ2NUwsMzg0NjZMLDM4NDY3TCwzODQ2OEwsMzg0NjlM LDM4NDcwTCwKKzM4NDcxTCwzODQ3MkwsMzg0NzNMLDM4NDc0TCwzODQ3NUwsMzg0NzZMLDM4NDc3 TCwzODQ3OEwsMzg0NzlMLDM4NDgwTCwKKzM4NDgxTCwzODQ4MkwsMzg0ODNMLDM4NDg0TCwzODQ4 NUwsMzg0ODZMLDM4NDg3TCwzODQ4OEwsMzg0ODlMLDM4NDkwTCwKKzM4NDkxTCwzODQ5MkwsMzg0 OTNMLDM4NDk0TCwzODQ5NUwsMzg0OTZMLDM4NDk3TCwzODQ5OEwsMzg0OTlMLDM4NTAwTCwKKzM4 NTAxTCwzODUwMkwsMzg1MDNMLDM4NTA0TCwzODUwNUwsMzg1MDZMLDM4NTA3TCwzODUwOEwsMzg1 MDlMLDM4NTEwTCwKKzM4NTExTCwzODUxMkwsMzg1MTNMLDM4NTE0TCwzODUxNUwsMzg1MTZMLDM4 NTE3TCwzODUxOEwsMzg1MTlMLDM4NTIwTCwKKzM4NTIxTCwzODUyMkwsMzg1MjNMLDM4NTI0TCwz ODUyNUwsMzg1MjZMLDM4NTI3TCwzODUyOEwsMzg1MjlMLDM4NTMwTCwKKzM4NTMxTCwzODUzMkws Mzg1MzNMLDM4NTM0TCwzODUzNUwsMzg1MzZMLDM4NTM3TCwzODUzOEwsMzg1MzlMLDM4NTQwTCwK KzM4NTQxTCwzODU0MkwsMzg1NDNMLDM4NTQ0TCwzODU0NUwsMzg1NDZMLDM4NTQ3TCwzODU0OEws Mzg1NDlMLDM4NTUwTCwKKzM4NTUxTCwzODU1MkwsMzg1NTNMLDM4NTU0TCwzODU1NUwsMzg1NTZM LDM4NTU3TCwzODU1OEwsMzg1NTlMLDM4NTYwTCwKKzM4NTYxTCwzODU2MkwsMzg1NjNMLDM4NTY0 TCwzODU2NUwsMzg1NjZMLDM4NTY3TCwzODU2OEwsMzg1NjlMLDM4NTcwTCwKKzM4NTcxTCwzODU3 MkwsMzg1NzNMLDM4NTc0TCwzODU3NUwsMzg1NzZMLDM4NTc3TCwzODU3OEwsMzg1NzlMLDM4NTgw TCwKKzM4NTgxTCwzODU4MkwsMzg1ODNMLDM4NTg0TCwzODU4NUwsMzg1ODZMLDM4NTg3TCwzODU4 OEwsMzg1ODlMLDM4NTkwTCwKKzM4NTkxTCwzODU5MkwsMzg1OTNMLDM4NTk0TCwzODU5NUwsMzg1 OTZMLDM4NTk3TCwzODU5OEwsMzg1OTlMLDM4NjAwTCwKKzM4NjAxTCwzODYwMkwsMzg2MDNMLDM4 NjA0TCwzODYwNUwsMzg2MDZMLDM4NjA3TCwzODYwOEwsMzg2MDlMLDM4NjEwTCwKKzM4NjExTCwz ODYxMkwsMzg2MTNMLDM4NjE0TCwzODYxNUwsMzg2MTZMLDM4NjE3TCwzODYxOEwsMzg2MTlMLDM4 NjIwTCwKKzM4NjIxTCwzODYyMkwsMzg2MjNMLDM4NjI0TCwzODYyNUwsMzg2MjZMLDM4NjI3TCwz ODYyOEwsMzg2MjlMLDM4NjMwTCwKKzM4NjMxTCwzODYzMkwsMzg2MzNMLDM4NjM0TCwzODYzNUws Mzg2MzZMLDM4NjM3TCwzODYzOEwsMzg2MzlMLDM4NjQwTCwKKzM4NjQxTCwzODY0MkwsMzg2NDNM LDM4NjQ0TCwzODY0NUwsMzg2NDZMLDM4NjQ3TCwzODY0OEwsMzg2NDlMLDM4NjUwTCwKKzM4NjUx TCwzODY1MkwsMzg2NTNMLDM4NjU0TCwzODY1NUwsMzg2NTZMLDM4NjU3TCwzODY1OEwsMzg2NTlM LDM4NjYwTCwKKzM4NjYxTCwzODY2MkwsMzg2NjNMLDM4NjY0TCwzODY2NUwsMzg2NjZMLDM4NjY3 TCwzODY2OEwsMzg2NjlMLDM4NjcwTCwKKzM4NjcxTCwzODY3MkwsMzg2NzNMLDM4Njc0TCwzODY3 NUwsMzg2NzZMLDM4Njc3TCwzODY3OEwsMzg2NzlMLDM4NjgwTCwKKzM4NjgxTCwzODY4MkwsMzg2 ODNMLDM4Njg0TCwzODY4NUwsMzg2ODZMLDM4Njg3TCwzODY4OEwsMzg2ODlMLDM4NjkwTCwKKzM4 NjkxTCwzODY5MkwsMzg2OTNMLDM4Njk0TCwzODY5NUwsMzg2OTZMLDM4Njk3TCwzODY5OEwsMzg2 OTlMLDM4NzAwTCwKKzM4NzAxTCwzODcwMkwsMzg3MDNMLDM4NzA0TCwzODcwNUwsMzg3MDZMLDM4 NzA3TCwzODcwOEwsMzg3MDlMLDM4NzEwTCwKKzM4NzExTCwzODcxMkwsMzg3MTNMLDM4NzE0TCwz ODcxNUwsMzg3MTZMLDM4NzE3TCwzODcxOEwsMzg3MTlMLDM4NzIwTCwKKzM4NzIxTCwzODcyMkws Mzg3MjNMLDM4NzI0TCwzODcyNUwsMzg3MjZMLDM4NzI3TCwzODcyOEwsMzg3MjlMLDM4NzMwTCwK KzM4NzMxTCwzODczMkwsMzg3MzNMLDM4NzM0TCwzODczNUwsMzg3MzZMLDM4NzM3TCwzODczOEws Mzg3MzlMLDM4NzQwTCwKKzM4NzQxTCwzODc0MkwsMzg3NDNMLDM4NzQ0TCwzODc0NUwsMzg3NDZM LDM4NzQ3TCwzODc0OEwsMzg3NDlMLDM4NzUwTCwKKzM4NzUxTCwzODc1MkwsMzg3NTNMLDM4NzU0 TCwzODc1NUwsMzg3NTZMLDM4NzU3TCwzODc1OEwsMzg3NTlMLDM4NzYwTCwKKzM4NzYxTCwzODc2 MkwsMzg3NjNMLDM4NzY0TCwzODc2NUwsMzg3NjZMLDM4NzY3TCwzODc2OEwsMzg3NjlMLDM4Nzcw TCwKKzM4NzcxTCwzODc3MkwsMzg3NzNMLDM4Nzc0TCwzODc3NUwsMzg3NzZMLDM4Nzc3TCwzODc3 OEwsMzg3NzlMLDM4NzgwTCwKKzM4NzgxTCwzODc4MkwsMzg3ODNMLDM4Nzg0TCwzODc4NUwsMzg3 ODZMLDM4Nzg3TCwzODc4OEwsMzg3ODlMLDM4NzkwTCwKKzM4NzkxTCwzODc5MkwsMzg3OTNMLDM4 Nzk0TCwzODc5NUwsMzg3OTZMLDM4Nzk3TCwzODc5OEwsMzg3OTlMLDM4ODAwTCwKKzM4ODAxTCwz ODgwMkwsMzg4MDNMLDM4ODA0TCwzODgwNUwsMzg4MDZMLDM4ODA3TCwzODgwOEwsMzg4MDlMLDM4 ODEwTCwKKzM4ODExTCwzODgxMkwsMzg4MTNMLDM4ODE0TCwzODgxNUwsMzg4MTZMLDM4ODE3TCwz ODgxOEwsMzg4MTlMLDM4ODIwTCwKKzM4ODIxTCwzODgyMkwsMzg4MjNMLDM4ODI0TCwzODgyNUws Mzg4MjZMLDM4ODI3TCwzODgyOEwsMzg4MjlMLDM4ODMwTCwKKzM4ODMxTCwzODgzMkwsMzg4MzNM LDM4ODM0TCwzODgzNUwsMzg4MzZMLDM4ODM3TCwzODgzOEwsMzg4MzlMLDM4ODQwTCwKKzM4ODQx TCwzODg0MkwsMzg4NDNMLDM4ODQ0TCwzODg0NUwsMzg4NDZMLDM4ODQ3TCwzODg0OEwsMzg4NDlM LDM4ODUwTCwKKzM4ODUxTCwzODg1MkwsMzg4NTNMLDM4ODU0TCwzODg1NUwsMzg4NTZMLDM4ODU3 TCwzODg1OEwsMzg4NTlMLDM4ODYwTCwKKzM4ODYxTCwzODg2MkwsMzg4NjNMLDM4ODY0TCwzODg2 NUwsMzg4NjZMLDM4ODY3TCwzODg2OEwsMzg4NjlMLDM4ODcwTCwKKzM4ODcxTCwzODg3MkwsMzg4 NzNMLDM4ODc0TCwzODg3NUwsMzg4NzZMLDM4ODc3TCwzODg3OEwsMzg4NzlMLDM4ODgwTCwKKzM4 ODgxTCwzODg4MkwsMzg4ODNMLDM4ODg0TCwzODg4NUwsMzg4ODZMLDM4ODg3TCwzODg4OEwsMzg4 ODlMLDM4ODkwTCwKKzM4ODkxTCwzODg5MkwsMzg4OTNMLDM4ODk0TCwzODg5NUwsMzg4OTZMLDM4 ODk3TCwzODg5OEwsMzg4OTlMLDM4OTAwTCwKKzM4OTAxTCwzODkwMkwsMzg5MDNMLDM4OTA0TCwz ODkwNUwsMzg5MDZMLDM4OTA3TCwzODkwOEwsMzg5MDlMLDM4OTEwTCwKKzM4OTExTCwzODkxMkws Mzg5MTNMLDM4OTE0TCwzODkxNUwsMzg5MTZMLDM4OTE3TCwzODkxOEwsMzg5MTlMLDM4OTIwTCwK KzM4OTIxTCwzODkyMkwsMzg5MjNMLDM4OTI0TCwzODkyNUwsMzg5MjZMLDM4OTI3TCwzODkyOEws Mzg5MjlMLDM4OTMwTCwKKzM4OTMxTCwzODkzMkwsMzg5MzNMLDM4OTM0TCwzODkzNUwsMzg5MzZM LDM4OTM3TCwzODkzOEwsMzg5MzlMLDM4OTQwTCwKKzM4OTQxTCwzODk0MkwsMzg5NDNMLDM4OTQ0 TCwzODk0NUwsMzg5NDZMLDM4OTQ3TCwzODk0OEwsMzg5NDlMLDM4OTUwTCwKKzM4OTUxTCwzODk1 MkwsMzg5NTNMLDM4OTU0TCwzODk1NUwsMzg5NTZMLDM4OTU3TCwzODk1OEwsMzg5NTlMLDM4OTYw TCwKKzM4OTYxTCwzODk2MkwsMzg5NjNMLDM4OTY0TCwzODk2NUwsMzg5NjZMLDM4OTY3TCwzODk2 OEwsMzg5NjlMLDM4OTcwTCwKKzM4OTcxTCwzODk3MkwsMzg5NzNMLDM4OTc0TCwzODk3NUwsMzg5 NzZMLDM4OTc3TCwzODk3OEwsMzg5NzlMLDM4OTgwTCwKKzM4OTgxTCwzODk4MkwsMzg5ODNMLDM4 OTg0TCwzODk4NUwsMzg5ODZMLDM4OTg3TCwzODk4OEwsMzg5ODlMLDM4OTkwTCwKKzM4OTkxTCwz ODk5MkwsMzg5OTNMLDM4OTk0TCwzODk5NUwsMzg5OTZMLDM4OTk3TCwzODk5OEwsMzg5OTlMLDM5 MDAwTCwKKzM5MDAxTCwzOTAwMkwsMzkwMDNMLDM5MDA0TCwzOTAwNUwsMzkwMDZMLDM5MDA3TCwz OTAwOEwsMzkwMDlMLDM5MDEwTCwKKzM5MDExTCwzOTAxMkwsMzkwMTNMLDM5MDE0TCwzOTAxNUws MzkwMTZMLDM5MDE3TCwzOTAxOEwsMzkwMTlMLDM5MDIwTCwKKzM5MDIxTCwzOTAyMkwsMzkwMjNM LDM5MDI0TCwzOTAyNUwsMzkwMjZMLDM5MDI3TCwzOTAyOEwsMzkwMjlMLDM5MDMwTCwKKzM5MDMx TCwzOTAzMkwsMzkwMzNMLDM5MDM0TCwzOTAzNUwsMzkwMzZMLDM5MDM3TCwzOTAzOEwsMzkwMzlM LDM5MDQwTCwKKzM5MDQxTCwzOTA0MkwsMzkwNDNMLDM5MDQ0TCwzOTA0NUwsMzkwNDZMLDM5MDQ3 TCwzOTA0OEwsMzkwNDlMLDM5MDUwTCwKKzM5MDUxTCwzOTA1MkwsMzkwNTNMLDM5MDU0TCwzOTA1 NUwsMzkwNTZMLDM5MDU3TCwzOTA1OEwsMzkwNTlMLDM5MDYwTCwKKzM5MDYxTCwzOTA2MkwsMzkw NjNMLDM5MDY0TCwzOTA2NUwsMzkwNjZMLDM5MDY3TCwzOTA2OEwsMzkwNjlMLDM5MDcwTCwKKzM5 MDcxTCwzOTA3MkwsMzkwNzNMLDM5MDc0TCwzOTA3NUwsMzkwNzZMLDM5MDc3TCwzOTA3OEwsMzkw NzlMLDM5MDgwTCwKKzM5MDgxTCwzOTA4MkwsMzkwODNMLDM5MDg0TCwzOTA4NUwsMzkwODZMLDM5 MDg3TCwzOTA4OEwsMzkwODlMLDM5MDkwTCwKKzM5MDkxTCwzOTA5MkwsMzkwOTNMLDM5MDk0TCwz OTA5NUwsMzkwOTZMLDM5MDk3TCwzOTA5OEwsMzkwOTlMLDM5MTAwTCwKKzM5MTAxTCwzOTEwMkws MzkxMDNMLDM5MTA0TCwzOTEwNUwsMzkxMDZMLDM5MTA3TCwzOTEwOEwsMzkxMDlMLDM5MTEwTCwK KzM5MTExTCwzOTExMkwsMzkxMTNMLDM5MTE0TCwzOTExNUwsMzkxMTZMLDM5MTE3TCwzOTExOEws MzkxMTlMLDM5MTIwTCwKKzM5MTIxTCwzOTEyMkwsMzkxMjNMLDM5MTI0TCwzOTEyNUwsMzkxMjZM LDM5MTI3TCwzOTEyOEwsMzkxMjlMLDM5MTMwTCwKKzM5MTMxTCwzOTEzMkwsMzkxMzNMLDM5MTM0 TCwzOTEzNUwsMzkxMzZMLDM5MTM3TCwzOTEzOEwsMzkxMzlMLDM5MTQwTCwKKzM5MTQxTCwzOTE0 MkwsMzkxNDNMLDM5MTQ0TCwzOTE0NUwsMzkxNDZMLDM5MTQ3TCwzOTE0OEwsMzkxNDlMLDM5MTUw TCwKKzM5MTUxTCwzOTE1MkwsMzkxNTNMLDM5MTU0TCwzOTE1NUwsMzkxNTZMLDM5MTU3TCwzOTE1 OEwsMzkxNTlMLDM5MTYwTCwKKzM5MTYxTCwzOTE2MkwsMzkxNjNMLDM5MTY0TCwzOTE2NUwsMzkx NjZMLDM5MTY3TCwzOTE2OEwsMzkxNjlMLDM5MTcwTCwKKzM5MTcxTCwzOTE3MkwsMzkxNzNMLDM5 MTc0TCwzOTE3NUwsMzkxNzZMLDM5MTc3TCwzOTE3OEwsMzkxNzlMLDM5MTgwTCwKKzM5MTgxTCwz OTE4MkwsMzkxODNMLDM5MTg0TCwzOTE4NUwsMzkxODZMLDM5MTg3TCwzOTE4OEwsMzkxODlMLDM5 MTkwTCwKKzM5MTkxTCwzOTE5MkwsMzkxOTNMLDM5MTk0TCwzOTE5NUwsMzkxOTZMLDM5MTk3TCwz OTE5OEwsMzkxOTlMLDM5MjAwTCwKKzM5MjAxTCwzOTIwMkwsMzkyMDNMLDM5MjA0TCwzOTIwNUws MzkyMDZMLDM5MjA3TCwzOTIwOEwsMzkyMDlMLDM5MjEwTCwKKzM5MjExTCwzOTIxMkwsMzkyMTNM LDM5MjE0TCwzOTIxNUwsMzkyMTZMLDM5MjE3TCwzOTIxOEwsMzkyMTlMLDM5MjIwTCwKKzM5MjIx TCwzOTIyMkwsMzkyMjNMLDM5MjI0TCwzOTIyNUwsMzkyMjZMLDM5MjI3TCwzOTIyOEwsMzkyMjlM LDM5MjMwTCwKKzM5MjMxTCwzOTIzMkwsMzkyMzNMLDM5MjM0TCwzOTIzNUwsMzkyMzZMLDM5MjM3 TCwzOTIzOEwsMzkyMzlMLDM5MjQwTCwKKzM5MjQxTCwzOTI0MkwsMzkyNDNMLDM5MjQ0TCwzOTI0 NUwsMzkyNDZMLDM5MjQ3TCwzOTI0OEwsMzkyNDlMLDM5MjUwTCwKKzM5MjUxTCwzOTI1MkwsMzky NTNMLDM5MjU0TCwzOTI1NUwsMzkyNTZMLDM5MjU3TCwzOTI1OEwsMzkyNTlMLDM5MjYwTCwKKzM5 MjYxTCwzOTI2MkwsMzkyNjNMLDM5MjY0TCwzOTI2NUwsMzkyNjZMLDM5MjY3TCwzOTI2OEwsMzky NjlMLDM5MjcwTCwKKzM5MjcxTCwzOTI3MkwsMzkyNzNMLDM5Mjc0TCwzOTI3NUwsMzkyNzZMLDM5 Mjc3TCwzOTI3OEwsMzkyNzlMLDM5MjgwTCwKKzM5MjgxTCwzOTI4MkwsMzkyODNMLDM5Mjg0TCwz OTI4NUwsMzkyODZMLDM5Mjg3TCwzOTI4OEwsMzkyODlMLDM5MjkwTCwKKzM5MjkxTCwzOTI5Mkws MzkyOTNMLDM5Mjk0TCwzOTI5NUwsMzkyOTZMLDM5Mjk3TCwzOTI5OEwsMzkyOTlMLDM5MzAwTCwK KzM5MzAxTCwzOTMwMkwsMzkzMDNMLDM5MzA0TCwzOTMwNUwsMzkzMDZMLDM5MzA3TCwzOTMwOEws MzkzMDlMLDM5MzEwTCwKKzM5MzExTCwzOTMxMkwsMzkzMTNMLDM5MzE0TCwzOTMxNUwsMzkzMTZM LDM5MzE3TCwzOTMxOEwsMzkzMTlMLDM5MzIwTCwKKzM5MzIxTCwzOTMyMkwsMzkzMjNMLDM5MzI0 TCwzOTMyNUwsMzkzMjZMLDM5MzI3TCwzOTMyOEwsMzkzMjlMLDM5MzMwTCwKKzM5MzMxTCwzOTMz MkwsMzkzMzNMLDM5MzM0TCwzOTMzNUwsMzkzMzZMLDM5MzM3TCwzOTMzOEwsMzkzMzlMLDM5MzQw TCwKKzM5MzQxTCwzOTM0MkwsMzkzNDNMLDM5MzQ0TCwzOTM0NUwsMzkzNDZMLDM5MzQ3TCwzOTM0 OEwsMzkzNDlMLDM5MzUwTCwKKzM5MzUxTCwzOTM1MkwsMzkzNTNMLDM5MzU0TCwzOTM1NUwsMzkz NTZMLDM5MzU3TCwzOTM1OEwsMzkzNTlMLDM5MzYwTCwKKzM5MzYxTCwzOTM2MkwsMzkzNjNMLDM5 MzY0TCwzOTM2NUwsMzkzNjZMLDM5MzY3TCwzOTM2OEwsMzkzNjlMLDM5MzcwTCwKKzM5MzcxTCwz OTM3MkwsMzkzNzNMLDM5Mzc0TCwzOTM3NUwsMzkzNzZMLDM5Mzc3TCwzOTM3OEwsMzkzNzlMLDM5 MzgwTCwKKzM5MzgxTCwzOTM4MkwsMzkzODNMLDM5Mzg0TCwzOTM4NUwsMzkzODZMLDM5Mzg3TCwz OTM4OEwsMzkzODlMLDM5MzkwTCwKKzM5MzkxTCwzOTM5MkwsMzkzOTNMLDM5Mzk0TCwzOTM5NUws MzkzOTZMLDM5Mzk3TCwzOTM5OEwsMzkzOTlMLDM5NDAwTCwKKzM5NDAxTCwzOTQwMkwsMzk0MDNM LDM5NDA0TCwzOTQwNUwsMzk0MDZMLDM5NDA3TCwzOTQwOEwsMzk0MDlMLDM5NDEwTCwKKzM5NDEx TCwzOTQxMkwsMzk0MTNMLDM5NDE0TCwzOTQxNUwsMzk0MTZMLDM5NDE3TCwzOTQxOEwsMzk0MTlM LDM5NDIwTCwKKzM5NDIxTCwzOTQyMkwsMzk0MjNMLDM5NDI0TCwzOTQyNUwsMzk0MjZMLDM5NDI3 TCwzOTQyOEwsMzk0MjlMLDM5NDMwTCwKKzM5NDMxTCwzOTQzMkwsMzk0MzNMLDM5NDM0TCwzOTQz NUwsMzk0MzZMLDM5NDM3TCwzOTQzOEwsMzk0MzlMLDM5NDQwTCwKKzM5NDQxTCwzOTQ0MkwsMzk0 NDNMLDM5NDQ0TCwzOTQ0NUwsMzk0NDZMLDM5NDQ3TCwzOTQ0OEwsMzk0NDlMLDM5NDUwTCwKKzM5 NDUxTCwzOTQ1MkwsMzk0NTNMLDM5NDU0TCwzOTQ1NUwsMzk0NTZMLDM5NDU3TCwzOTQ1OEwsMzk0 NTlMLDM5NDYwTCwKKzM5NDYxTCwzOTQ2MkwsMzk0NjNMLDM5NDY0TCwzOTQ2NUwsMzk0NjZMLDM5 NDY3TCwzOTQ2OEwsMzk0NjlMLDM5NDcwTCwKKzM5NDcxTCwzOTQ3MkwsMzk0NzNMLDM5NDc0TCwz OTQ3NUwsMzk0NzZMLDM5NDc3TCwzOTQ3OEwsMzk0NzlMLDM5NDgwTCwKKzM5NDgxTCwzOTQ4Mkws Mzk0ODNMLDM5NDg0TCwzOTQ4NUwsMzk0ODZMLDM5NDg3TCwzOTQ4OEwsMzk0ODlMLDM5NDkwTCwK KzM5NDkxTCwzOTQ5MkwsMzk0OTNMLDM5NDk0TCwzOTQ5NUwsMzk0OTZMLDM5NDk3TCwzOTQ5OEws Mzk0OTlMLDM5NTAwTCwKKzM5NTAxTCwzOTUwMkwsMzk1MDNMLDM5NTA0TCwzOTUwNUwsMzk1MDZM LDM5NTA3TCwzOTUwOEwsMzk1MDlMLDM5NTEwTCwKKzM5NTExTCwzOTUxMkwsMzk1MTNMLDM5NTE0 TCwzOTUxNUwsMzk1MTZMLDM5NTE3TCwzOTUxOEwsMzk1MTlMLDM5NTIwTCwKKzM5NTIxTCwzOTUy MkwsMzk1MjNMLDM5NTI0TCwzOTUyNUwsMzk1MjZMLDM5NTI3TCwzOTUyOEwsMzk1MjlMLDM5NTMw TCwKKzM5NTMxTCwzOTUzMkwsMzk1MzNMLDM5NTM0TCwzOTUzNUwsMzk1MzZMLDM5NTM3TCwzOTUz OEwsMzk1MzlMLDM5NTQwTCwKKzM5NTQxTCwzOTU0MkwsMzk1NDNMLDM5NTQ0TCwzOTU0NUwsMzk1 NDZMLDM5NTQ3TCwzOTU0OEwsMzk1NDlMLDM5NTUwTCwKKzM5NTUxTCwzOTU1MkwsMzk1NTNMLDM5 NTU0TCwzOTU1NUwsMzk1NTZMLDM5NTU3TCwzOTU1OEwsMzk1NTlMLDM5NTYwTCwKKzM5NTYxTCwz OTU2MkwsMzk1NjNMLDM5NTY0TCwzOTU2NUwsMzk1NjZMLDM5NTY3TCwzOTU2OEwsMzk1NjlMLDM5 NTcwTCwKKzM5NTcxTCwzOTU3MkwsMzk1NzNMLDM5NTc0TCwzOTU3NUwsMzk1NzZMLDM5NTc3TCwz OTU3OEwsMzk1NzlMLDM5NTgwTCwKKzM5NTgxTCwzOTU4MkwsMzk1ODNMLDM5NTg0TCwzOTU4NUws Mzk1ODZMLDM5NTg3TCwzOTU4OEwsMzk1ODlMLDM5NTkwTCwKKzM5NTkxTCwzOTU5MkwsMzk1OTNM LDM5NTk0TCwzOTU5NUwsMzk1OTZMLDM5NTk3TCwzOTU5OEwsMzk1OTlMLDM5NjAwTCwKKzM5NjAx TCwzOTYwMkwsMzk2MDNMLDM5NjA0TCwzOTYwNUwsMzk2MDZMLDM5NjA3TCwzOTYwOEwsMzk2MDlM LDM5NjEwTCwKKzM5NjExTCwzOTYxMkwsMzk2MTNMLDM5NjE0TCwzOTYxNUwsMzk2MTZMLDM5NjE3 TCwzOTYxOEwsMzk2MTlMLDM5NjIwTCwKKzM5NjIxTCwzOTYyMkwsMzk2MjNMLDM5NjI0TCwzOTYy NUwsMzk2MjZMLDM5NjI3TCwzOTYyOEwsMzk2MjlMLDM5NjMwTCwKKzM5NjMxTCwzOTYzMkwsMzk2 MzNMLDM5NjM0TCwzOTYzNUwsMzk2MzZMLDM5NjM3TCwzOTYzOEwsMzk2MzlMLDM5NjQwTCwKKzM5 NjQxTCwzOTY0MkwsMzk2NDNMLDM5NjQ0TCwzOTY0NUwsMzk2NDZMLDM5NjQ3TCwzOTY0OEwsMzk2 NDlMLDM5NjUwTCwKKzM5NjUxTCwzOTY1MkwsMzk2NTNMLDM5NjU0TCwzOTY1NUwsMzk2NTZMLDM5 NjU3TCwzOTY1OEwsMzk2NTlMLDM5NjYwTCwKKzM5NjYxTCwzOTY2MkwsMzk2NjNMLDM5NjY0TCwz OTY2NUwsMzk2NjZMLDM5NjY3TCwzOTY2OEwsMzk2NjlMLDM5NjcwTCwKKzM5NjcxTCwzOTY3Mkws Mzk2NzNMLDM5Njc0TCwzOTY3NUwsMzk2NzZMLDM5Njc3TCwzOTY3OEwsMzk2NzlMLDM5NjgwTCwK KzM5NjgxTCwzOTY4MkwsMzk2ODNMLDM5Njg0TCwzOTY4NUwsMzk2ODZMLDM5Njg3TCwzOTY4OEws Mzk2ODlMLDM5NjkwTCwKKzM5NjkxTCwzOTY5MkwsMzk2OTNMLDM5Njk0TCwzOTY5NUwsMzk2OTZM LDM5Njk3TCwzOTY5OEwsMzk2OTlMLDM5NzAwTCwKKzM5NzAxTCwzOTcwMkwsMzk3MDNMLDM5NzA0 TCwzOTcwNUwsMzk3MDZMLDM5NzA3TCwzOTcwOEwsMzk3MDlMLDM5NzEwTCwKKzM5NzExTCwzOTcx MkwsMzk3MTNMLDM5NzE0TCwzOTcxNUwsMzk3MTZMLDM5NzE3TCwzOTcxOEwsMzk3MTlMLDM5NzIw TCwKKzM5NzIxTCwzOTcyMkwsMzk3MjNMLDM5NzI0TCwzOTcyNUwsMzk3MjZMLDM5NzI3TCwzOTcy OEwsMzk3MjlMLDM5NzMwTCwKKzM5NzMxTCwzOTczMkwsMzk3MzNMLDM5NzM0TCwzOTczNUwsMzk3 MzZMLDM5NzM3TCwzOTczOEwsMzk3MzlMLDM5NzQwTCwKKzM5NzQxTCwzOTc0MkwsMzk3NDNMLDM5 NzQ0TCwzOTc0NUwsMzk3NDZMLDM5NzQ3TCwzOTc0OEwsMzk3NDlMLDM5NzUwTCwKKzM5NzUxTCwz OTc1MkwsMzk3NTNMLDM5NzU0TCwzOTc1NUwsMzk3NTZMLDM5NzU3TCwzOTc1OEwsMzk3NTlMLDM5 NzYwTCwKKzM5NzYxTCwzOTc2MkwsMzk3NjNMLDM5NzY0TCwzOTc2NUwsMzk3NjZMLDM5NzY3TCwz OTc2OEwsMzk3NjlMLDM5NzcwTCwKKzM5NzcxTCwzOTc3MkwsMzk3NzNMLDM5Nzc0TCwzOTc3NUws Mzk3NzZMLDM5Nzc3TCwzOTc3OEwsMzk3NzlMLDM5NzgwTCwKKzM5NzgxTCwzOTc4MkwsMzk3ODNM LDM5Nzg0TCwzOTc4NUwsMzk3ODZMLDM5Nzg3TCwzOTc4OEwsMzk3ODlMLDM5NzkwTCwKKzM5Nzkx TCwzOTc5MkwsMzk3OTNMLDM5Nzk0TCwzOTc5NUwsMzk3OTZMLDM5Nzk3TCwzOTc5OEwsMzk3OTlM LDM5ODAwTCwKKzM5ODAxTCwzOTgwMkwsMzk4MDNMLDM5ODA0TCwzOTgwNUwsMzk4MDZMLDM5ODA3 TCwzOTgwOEwsMzk4MDlMLDM5ODEwTCwKKzM5ODExTCwzOTgxMkwsMzk4MTNMLDM5ODE0TCwzOTgx NUwsMzk4MTZMLDM5ODE3TCwzOTgxOEwsMzk4MTlMLDM5ODIwTCwKKzM5ODIxTCwzOTgyMkwsMzk4 MjNMLDM5ODI0TCwzOTgyNUwsMzk4MjZMLDM5ODI3TCwzOTgyOEwsMzk4MjlMLDM5ODMwTCwKKzM5 ODMxTCwzOTgzMkwsMzk4MzNMLDM5ODM0TCwzOTgzNUwsMzk4MzZMLDM5ODM3TCwzOTgzOEwsMzk4 MzlMLDM5ODQwTCwKKzM5ODQxTCwzOTg0MkwsMzk4NDNMLDM5ODQ0TCwzOTg0NUwsMzk4NDZMLDM5 ODQ3TCwzOTg0OEwsMzk4NDlMLDM5ODUwTCwKKzM5ODUxTCwzOTg1MkwsMzk4NTNMLDM5ODU0TCwz OTg1NUwsMzk4NTZMLDM5ODU3TCwzOTg1OEwsMzk4NTlMLDM5ODYwTCwKKzM5ODYxTCwzOTg2Mkws Mzk4NjNMLDM5ODY0TCwzOTg2NUwsMzk4NjZMLDM5ODY3TCwzOTg2OEwsMzk4NjlMLDM5ODcwTCwK KzM5ODcxTCwzOTg3MkwsMzk4NzNMLDM5ODc0TCwzOTg3NUwsMzk4NzZMLDM5ODc3TCwzOTg3OEws Mzk4NzlMLDM5ODgwTCwKKzM5ODgxTCwzOTg4MkwsMzk4ODNMLDM5ODg0TCwzOTg4NUwsMzk4ODZM LDM5ODg3TCwzOTg4OEwsMzk4ODlMLDM5ODkwTCwKKzM5ODkxTCwzOTg5MkwsMzk4OTNMLDM5ODk0 TCwzOTg5NUwsMzk4OTZMLDM5ODk3TCwzOTg5OEwsMzk4OTlMLDM5OTAwTCwKKzM5OTAxTCwzOTkw MkwsMzk5MDNMLDM5OTA0TCwzOTkwNUwsMzk5MDZMLDM5OTA3TCwzOTkwOEwsMzk5MDlMLDM5OTEw TCwKKzM5OTExTCwzOTkxMkwsMzk5MTNMLDM5OTE0TCwzOTkxNUwsMzk5MTZMLDM5OTE3TCwzOTkx OEwsMzk5MTlMLDM5OTIwTCwKKzM5OTIxTCwzOTkyMkwsMzk5MjNMLDM5OTI0TCwzOTkyNUwsMzk5 MjZMLDM5OTI3TCwzOTkyOEwsMzk5MjlMLDM5OTMwTCwKKzM5OTMxTCwzOTkzMkwsMzk5MzNMLDM5 OTM0TCwzOTkzNUwsMzk5MzZMLDM5OTM3TCwzOTkzOEwsMzk5MzlMLDM5OTQwTCwKKzM5OTQxTCwz OTk0MkwsMzk5NDNMLDM5OTQ0TCwzOTk0NUwsMzk5NDZMLDM5OTQ3TCwzOTk0OEwsMzk5NDlMLDM5 OTUwTCwKKzM5OTUxTCwzOTk1MkwsMzk5NTNMLDM5OTU0TCwzOTk1NUwsMzk5NTZMLDM5OTU3TCwz OTk1OEwsMzk5NTlMLDM5OTYwTCwKKzM5OTYxTCwzOTk2MkwsMzk5NjNMLDM5OTY0TCwzOTk2NUws Mzk5NjZMLDM5OTY3TCwzOTk2OEwsMzk5NjlMLDM5OTcwTCwKKzM5OTcxTCwzOTk3MkwsMzk5NzNM LDM5OTc0TCwzOTk3NUwsMzk5NzZMLDM5OTc3TCwzOTk3OEwsMzk5NzlMLDM5OTgwTCwKKzM5OTgx TCwzOTk4MkwsMzk5ODNMLDM5OTg0TCwzOTk4NUwsMzk5ODZMLDM5OTg3TCwzOTk4OEwsMzk5ODlM LDM5OTkwTCwKKzM5OTkxTCwzOTk5MkwsMzk5OTNMLDM5OTk0TCwzOTk5NUwsMzk5OTZMLDM5OTk3 TCwzOTk5OEwsMzk5OTlMLDQwMDAwTCwKKzQwMDAxTCw0MDAwMkwsNDAwMDNMLDQwMDA0TCw0MDAw NUwsNDAwMDZMLDQwMDA3TCw0MDAwOEwsNDAwMDlMLDQwMDEwTCwKKzQwMDExTCw0MDAxMkwsNDAw MTNMLDQwMDE0TCw0MDAxNUwsNDAwMTZMLDQwMDE3TCw0MDAxOEwsNDAwMTlMLDQwMDIwTCwKKzQw MDIxTCw0MDAyMkwsNDAwMjNMLDQwMDI0TCw0MDAyNUwsNDAwMjZMLDQwMDI3TCw0MDAyOEwsNDAw MjlMLDQwMDMwTCwKKzQwMDMxTCw0MDAzMkwsNDAwMzNMLDQwMDM0TCw0MDAzNUwsNDAwMzZMLDQw MDM3TCw0MDAzOEwsNDAwMzlMLDQwMDQwTCwKKzQwMDQxTCw0MDA0MkwsNDAwNDNMLDQwMDQ0TCw0 MDA0NUwsNDAwNDZMLDQwMDQ3TCw0MDA0OEwsNDAwNDlMLDQwMDUwTCwKKzQwMDUxTCw0MDA1Mkws NDAwNTNMLDQwMDU0TCw0MDA1NUwsNDAwNTZMLDQwMDU3TCw0MDA1OEwsNDAwNTlMLDQwMDYwTCwK KzQwMDYxTCw0MDA2MkwsNDAwNjNMLDQwMDY0TCw0MDA2NUwsNDAwNjZMLDQwMDY3TCw0MDA2OEws NDAwNjlMLDQwMDcwTCwKKzQwMDcxTCw0MDA3MkwsNDAwNzNMLDQwMDc0TCw0MDA3NUwsNDAwNzZM LDQwMDc3TCw0MDA3OEwsNDAwNzlMLDQwMDgwTCwKKzQwMDgxTCw0MDA4MkwsNDAwODNMLDQwMDg0 TCw0MDA4NUwsNDAwODZMLDQwMDg3TCw0MDA4OEwsNDAwODlMLDQwMDkwTCwKKzQwMDkxTCw0MDA5 MkwsNDAwOTNMLDQwMDk0TCw0MDA5NUwsNDAwOTZMLDQwMDk3TCw0MDA5OEwsNDAwOTlMLDQwMTAw TCwKKzQwMTAxTCw0MDEwMkwsNDAxMDNMLDQwMTA0TCw0MDEwNUwsNDAxMDZMLDQwMTA3TCw0MDEw OEwsNDAxMDlMLDQwMTEwTCwKKzQwMTExTCw0MDExMkwsNDAxMTNMLDQwMTE0TCw0MDExNUwsNDAx MTZMLDQwMTE3TCw0MDExOEwsNDAxMTlMLDQwMTIwTCwKKzQwMTIxTCw0MDEyMkwsNDAxMjNMLDQw MTI0TCw0MDEyNUwsNDAxMjZMLDQwMTI3TCw0MDEyOEwsNDAxMjlMLDQwMTMwTCwKKzQwMTMxTCw0 MDEzMkwsNDAxMzNMLDQwMTM0TCw0MDEzNUwsNDAxMzZMLDQwMTM3TCw0MDEzOEwsNDAxMzlMLDQw MTQwTCwKKzQwMTQxTCw0MDE0MkwsNDAxNDNMLDQwMTQ0TCw0MDE0NUwsNDAxNDZMLDQwMTQ3TCw0 MDE0OEwsNDAxNDlMLDQwMTUwTCwKKzQwMTUxTCw0MDE1MkwsNDAxNTNMLDQwMTU0TCw0MDE1NUws NDAxNTZMLDQwMTU3TCw0MDE1OEwsNDAxNTlMLDQwMTYwTCwKKzQwMTYxTCw0MDE2MkwsNDAxNjNM LDQwMTY0TCw0MDE2NUwsNDAxNjZMLDQwMTY3TCw0MDE2OEwsNDAxNjlMLDQwMTcwTCwKKzQwMTcx TCw0MDE3MkwsNDAxNzNMLDQwMTc0TCw0MDE3NUwsNDAxNzZMLDQwMTc3TCw0MDE3OEwsNDAxNzlM LDQwMTgwTCwKKzQwMTgxTCw0MDE4MkwsNDAxODNMLDQwMTg0TCw0MDE4NUwsNDAxODZMLDQwMTg3 TCw0MDE4OEwsNDAxODlMLDQwMTkwTCwKKzQwMTkxTCw0MDE5MkwsNDAxOTNMLDQwMTk0TCw0MDE5 NUwsNDAxOTZMLDQwMTk3TCw0MDE5OEwsNDAxOTlMLDQwMjAwTCwKKzQwMjAxTCw0MDIwMkwsNDAy MDNMLDQwMjA0TCw0MDIwNUwsNDAyMDZMLDQwMjA3TCw0MDIwOEwsNDAyMDlMLDQwMjEwTCwKKzQw MjExTCw0MDIxMkwsNDAyMTNMLDQwMjE0TCw0MDIxNUwsNDAyMTZMLDQwMjE3TCw0MDIxOEwsNDAy MTlMLDQwMjIwTCwKKzQwMjIxTCw0MDIyMkwsNDAyMjNMLDQwMjI0TCw0MDIyNUwsNDAyMjZMLDQw MjI3TCw0MDIyOEwsNDAyMjlMLDQwMjMwTCwKKzQwMjMxTCw0MDIzMkwsNDAyMzNMLDQwMjM0TCw0 MDIzNUwsNDAyMzZMLDQwMjM3TCw0MDIzOEwsNDAyMzlMLDQwMjQwTCwKKzQwMjQxTCw0MDI0Mkws NDAyNDNMLDQwMjQ0TCw0MDI0NUwsNDAyNDZMLDQwMjQ3TCw0MDI0OEwsNDAyNDlMLDQwMjUwTCwK KzQwMjUxTCw0MDI1MkwsNDAyNTNMLDQwMjU0TCw0MDI1NUwsNDAyNTZMLDQwMjU3TCw0MDI1OEws NDAyNTlMLDQwMjYwTCwKKzQwMjYxTCw0MDI2MkwsNDAyNjNMLDQwMjY0TCw0MDI2NUwsNDAyNjZM LDQwMjY3TCw0MDI2OEwsNDAyNjlMLDQwMjcwTCwKKzQwMjcxTCw0MDI3MkwsNDAyNzNMLDQwMjc0 TCw0MDI3NUwsNDAyNzZMLDQwMjc3TCw0MDI3OEwsNDAyNzlMLDQwMjgwTCwKKzQwMjgxTCw0MDI4 MkwsNDAyODNMLDQwMjg0TCw0MDI4NUwsNDAyODZMLDQwMjg3TCw0MDI4OEwsNDAyODlMLDQwMjkw TCwKKzQwMjkxTCw0MDI5MkwsNDAyOTNMLDQwMjk0TCw0MDI5NUwsNDAyOTZMLDQwMjk3TCw0MDI5 OEwsNDAyOTlMLDQwMzAwTCwKKzQwMzAxTCw0MDMwMkwsNDAzMDNMLDQwMzA0TCw0MDMwNUwsNDAz MDZMLDQwMzA3TCw0MDMwOEwsNDAzMDlMLDQwMzEwTCwKKzQwMzExTCw0MDMxMkwsNDAzMTNMLDQw MzE0TCw0MDMxNUwsNDAzMTZMLDQwMzE3TCw0MDMxOEwsNDAzMTlMLDQwMzIwTCwKKzQwMzIxTCw0 MDMyMkwsNDAzMjNMLDQwMzI0TCw0MDMyNUwsNDAzMjZMLDQwMzI3TCw0MDMyOEwsNDAzMjlMLDQw MzMwTCwKKzQwMzMxTCw0MDMzMkwsNDAzMzNMLDQwMzM0TCw0MDMzNUwsNDAzMzZMLDQwMzM3TCw0 MDMzOEwsNDAzMzlMLDQwMzQwTCwKKzQwMzQxTCw0MDM0MkwsNDAzNDNMLDQwMzQ0TCw0MDM0NUws NDAzNDZMLDQwMzQ3TCw0MDM0OEwsNDAzNDlMLDQwMzUwTCwKKzQwMzUxTCw0MDM1MkwsNDAzNTNM LDQwMzU0TCw0MDM1NUwsNDAzNTZMLDQwMzU3TCw0MDM1OEwsNDAzNTlMLDQwMzYwTCwKKzQwMzYx TCw0MDM2MkwsNDAzNjNMLDQwMzY0TCw0MDM2NUwsNDAzNjZMLDQwMzY3TCw0MDM2OEwsNDAzNjlM LDQwMzcwTCwKKzQwMzcxTCw0MDM3MkwsNDAzNzNMLDQwMzc0TCw0MDM3NUwsNDAzNzZMLDQwMzc3 TCw0MDM3OEwsNDAzNzlMLDQwMzgwTCwKKzQwMzgxTCw0MDM4MkwsNDAzODNMLDQwMzg0TCw0MDM4 NUwsNDAzODZMLDQwMzg3TCw0MDM4OEwsNDAzODlMLDQwMzkwTCwKKzQwMzkxTCw0MDM5MkwsNDAz OTNMLDQwMzk0TCw0MDM5NUwsNDAzOTZMLDQwMzk3TCw0MDM5OEwsNDAzOTlMLDQwNDAwTCwKKzQw NDAxTCw0MDQwMkwsNDA0MDNMLDQwNDA0TCw0MDQwNUwsNDA0MDZMLDQwNDA3TCw0MDQwOEwsNDA0 MDlMLDQwNDEwTCwKKzQwNDExTCw0MDQxMkwsNDA0MTNMLDQwNDE0TCw0MDQxNUwsNDA0MTZMLDQw NDE3TCw0MDQxOEwsNDA0MTlMLDQwNDIwTCwKKzQwNDIxTCw0MDQyMkwsNDA0MjNMLDQwNDI0TCw0 MDQyNUwsNDA0MjZMLDQwNDI3TCw0MDQyOEwsNDA0MjlMLDQwNDMwTCwKKzQwNDMxTCw0MDQzMkws NDA0MzNMLDQwNDM0TCw0MDQzNUwsNDA0MzZMLDQwNDM3TCw0MDQzOEwsNDA0MzlMLDQwNDQwTCwK KzQwNDQxTCw0MDQ0MkwsNDA0NDNMLDQwNDQ0TCw0MDQ0NUwsNDA0NDZMLDQwNDQ3TCw0MDQ0OEws NDA0NDlMLDQwNDUwTCwKKzQwNDUxTCw0MDQ1MkwsNDA0NTNMLDQwNDU0TCw0MDQ1NUwsNDA0NTZM LDQwNDU3TCw0MDQ1OEwsNDA0NTlMLDQwNDYwTCwKKzQwNDYxTCw0MDQ2MkwsNDA0NjNMLDQwNDY0 TCw0MDQ2NUwsNDA0NjZMLDQwNDY3TCw0MDQ2OEwsNDA0NjlMLDQwNDcwTCwKKzQwNDcxTCw0MDQ3 MkwsNDA0NzNMLDQwNDc0TCw0MDQ3NUwsNDA0NzZMLDQwNDc3TCw0MDQ3OEwsNDA0NzlMLDQwNDgw TCwKKzQwNDgxTCw0MDQ4MkwsNDA0ODNMLDQwNDg0TCw0MDQ4NUwsNDA0ODZMLDQwNDg3TCw0MDQ4 OEwsNDA0ODlMLDQwNDkwTCwKKzQwNDkxTCw0MDQ5MkwsNDA0OTNMLDQwNDk0TCw0MDQ5NUwsNDA0 OTZMLDQwNDk3TCw0MDQ5OEwsNDA0OTlMLDQwNTAwTCwKKzQwNTAxTCw0MDUwMkwsNDA1MDNMLDQw NTA0TCw0MDUwNUwsNDA1MDZMLDQwNTA3TCw0MDUwOEwsNDA1MDlMLDQwNTEwTCwKKzQwNTExTCw0 MDUxMkwsNDA1MTNMLDQwNTE0TCw0MDUxNUwsNDA1MTZMLDQwNTE3TCw0MDUxOEwsNDA1MTlMLDQw NTIwTCwKKzQwNTIxTCw0MDUyMkwsNDA1MjNMLDQwNTI0TCw0MDUyNUwsNDA1MjZMLDQwNTI3TCw0 MDUyOEwsNDA1MjlMLDQwNTMwTCwKKzQwNTMxTCw0MDUzMkwsNDA1MzNMLDQwNTM0TCw0MDUzNUws NDA1MzZMLDQwNTM3TCw0MDUzOEwsNDA1MzlMLDQwNTQwTCwKKzQwNTQxTCw0MDU0MkwsNDA1NDNM LDQwNTQ0TCw0MDU0NUwsNDA1NDZMLDQwNTQ3TCw0MDU0OEwsNDA1NDlMLDQwNTUwTCwKKzQwNTUx TCw0MDU1MkwsNDA1NTNMLDQwNTU0TCw0MDU1NUwsNDA1NTZMLDQwNTU3TCw0MDU1OEwsNDA1NTlM LDQwNTYwTCwKKzQwNTYxTCw0MDU2MkwsNDA1NjNMLDQwNTY0TCw0MDU2NUwsNDA1NjZMLDQwNTY3 TCw0MDU2OEwsNDA1NjlMLDQwNTcwTCwKKzQwNTcxTCw0MDU3MkwsNDA1NzNMLDQwNTc0TCw0MDU3 NUwsNDA1NzZMLDQwNTc3TCw0MDU3OEwsNDA1NzlMLDQwNTgwTCwKKzQwNTgxTCw0MDU4MkwsNDA1 ODNMLDQwNTg0TCw0MDU4NUwsNDA1ODZMLDQwNTg3TCw0MDU4OEwsNDA1ODlMLDQwNTkwTCwKKzQw NTkxTCw0MDU5MkwsNDA1OTNMLDQwNTk0TCw0MDU5NUwsNDA1OTZMLDQwNTk3TCw0MDU5OEwsNDA1 OTlMLDQwNjAwTCwKKzQwNjAxTCw0MDYwMkwsNDA2MDNMLDQwNjA0TCw0MDYwNUwsNDA2MDZMLDQw NjA3TCw0MDYwOEwsNDA2MDlMLDQwNjEwTCwKKzQwNjExTCw0MDYxMkwsNDA2MTNMLDQwNjE0TCw0 MDYxNUwsNDA2MTZMLDQwNjE3TCw0MDYxOEwsNDA2MTlMLDQwNjIwTCwKKzQwNjIxTCw0MDYyMkws NDA2MjNMLDQwNjI0TCw0MDYyNUwsNDA2MjZMLDQwNjI3TCw0MDYyOEwsNDA2MjlMLDQwNjMwTCwK KzQwNjMxTCw0MDYzMkwsNDA2MzNMLDQwNjM0TCw0MDYzNUwsNDA2MzZMLDQwNjM3TCw0MDYzOEws NDA2MzlMLDQwNjQwTCwKKzQwNjQxTCw0MDY0MkwsNDA2NDNMLDQwNjQ0TCw0MDY0NUwsNDA2NDZM LDQwNjQ3TCw0MDY0OEwsNDA2NDlMLDQwNjUwTCwKKzQwNjUxTCw0MDY1MkwsNDA2NTNMLDQwNjU0 TCw0MDY1NUwsNDA2NTZMLDQwNjU3TCw0MDY1OEwsNDA2NTlMLDQwNjYwTCwKKzQwNjYxTCw0MDY2 MkwsNDA2NjNMLDQwNjY0TCw0MDY2NUwsNDA2NjZMLDQwNjY3TCw0MDY2OEwsNDA2NjlMLDQwNjcw TCwKKzQwNjcxTCw0MDY3MkwsNDA2NzNMLDQwNjc0TCw0MDY3NUwsNDA2NzZMLDQwNjc3TCw0MDY3 OEwsNDA2NzlMLDQwNjgwTCwKKzQwNjgxTCw0MDY4MkwsNDA2ODNMLDQwNjg0TCw0MDY4NUwsNDA2 ODZMLDQwNjg3TCw0MDY4OEwsNDA2ODlMLDQwNjkwTCwKKzQwNjkxTCw0MDY5MkwsNDA2OTNMLDQw Njk0TCw0MDY5NUwsNDA2OTZMLDQwNjk3TCw0MDY5OEwsNDA2OTlMLDQwNzAwTCwKKzQwNzAxTCw0 MDcwMkwsNDA3MDNMLDQwNzA0TCw0MDcwNUwsNDA3MDZMLDQwNzA3TCw0MDcwOEwsNDA3MDlMLDQw NzEwTCwKKzQwNzExTCw0MDcxMkwsNDA3MTNMLDQwNzE0TCw0MDcxNUwsNDA3MTZMLDQwNzE3TCw0 MDcxOEwsNDA3MTlMLDQwNzIwTCwKKzQwNzIxTCw0MDcyMkwsNDA3MjNMLDQwNzI0TCw0MDcyNUws NDA3MjZMLDQwNzI3TCw0MDcyOEwsNDA3MjlMLDQwNzMwTCwKKzQwNzMxTCw0MDczMkwsNDA3MzNM LDQwNzM0TCw0MDczNUwsNDA3MzZMLDQwNzM3TCw0MDczOEwsNDA3MzlMLDQwNzQwTCwKKzQwNzQx TCw0MDc0MkwsNDA3NDNMLDQwNzQ0TCw0MDc0NUwsNDA3NDZMLDQwNzQ3TCw0MDc0OEwsNDA3NDlM LDQwNzUwTCwKKzQwNzUxTCw0MDc1MkwsNDA3NTNMLDQwNzU0TCw0MDc1NUwsNDA3NTZMLDQwNzU3 TCw0MDc1OEwsNDA3NTlMLDQwNzYwTCwKKzQwNzYxTCw0MDc2MkwsNDA3NjNMLDQwNzY0TCw0MDc2 NUwsNDA3NjZMLDQwNzY3TCw0MDc2OEwsNDA3NjlMLDQwNzcwTCwKKzQwNzcxTCw0MDc3MkwsNDA3 NzNMLDQwNzc0TCw0MDc3NUwsNDA3NzZMLDQwNzc3TCw0MDc3OEwsNDA3NzlMLDQwNzgwTCwKKzQw NzgxTCw0MDc4MkwsNDA3ODNMLDQwNzg0TCw0MDc4NUwsNDA3ODZMLDQwNzg3TCw0MDc4OEwsNDA3 ODlMLDQwNzkwTCwKKzQwNzkxTCw0MDc5MkwsNDA3OTNMLDQwNzk0TCw0MDc5NUwsNDA3OTZMLDQw Nzk3TCw0MDc5OEwsNDA3OTlMLDQwODAwTCwKKzQwODAxTCw0MDgwMkwsNDA4MDNMLDQwODA0TCw0 MDgwNUwsNDA4MDZMLDQwODA3TCw0MDgwOEwsNDA4MDlMLDQwODEwTCwKKzQwODExTCw0MDgxMkws NDA4MTNMLDQwODE0TCw0MDgxNUwsNDA4MTZMLDQwODE3TCw0MDgxOEwsNDA4MTlMLDQwODIwTCwK KzQwODIxTCw0MDgyMkwsNDA4MjNMLDQwODI0TCw0MDgyNUwsNDA4MjZMLDQwODI3TCw0MDgyOEws NDA4MjlMLDQwODMwTCwKKzQwODMxTCw0MDgzMkwsNDA4MzNMLDQwODM0TCw0MDgzNUwsNDA4MzZM LDQwODM3TCw0MDgzOEwsNDA4MzlMLDQwODQwTCwKKzQwODQxTCw0MDg0MkwsNDA4NDNMLDQwODQ0 TCw0MDg0NUwsNDA4NDZMLDQwODQ3TCw0MDg0OEwsNDA4NDlMLDQwODUwTCwKKzQwODUxTCw0MDg1 MkwsNDA4NTNMLDQwODU0TCw0MDg1NUwsNDA4NTZMLDQwODU3TCw0MDg1OEwsNDA4NTlMLDQwODYw TCwKKzQwODYxTCw0MDg2MkwsNDA4NjNMLDQwODY0TCw0MDg2NUwsNDA4NjZMLDQwODY3TCw0MDg2 OEwsNDA4NjlMLDQwODcwTCwKKzQwODcxTCw0MDg3MkwsNDA4NzNMLDQwODc0TCw0MDg3NUwsNDA4 NzZMLDQwODc3TCw0MDg3OEwsNDA4NzlMLDQwODgwTCwKKzQwODgxTCw0MDg4MkwsNDA4ODNMLDQw ODg0TCw0MDg4NUwsNDA4ODZMLDQwODg3TCw0MDg4OEwsNDA4ODlMLDQwODkwTCwKKzQwODkxTCw0 MDg5MkwsNDA4OTNMLDQwODk0TCw0MDg5NUwsNDA4OTZMLDQwODk3TCw0MDg5OEwsNDA4OTlMLDQw OTAwTCwKKzQwOTAxTCw0MDkwMkwsNDA5MDNMLDQwOTA0TCw0MDkwNUwsNDA5MDZMLDQwOTA3TCw0 MDkwOEwsNDA5MDlMLDQwOTEwTCwKKzQwOTExTCw0MDkxMkwsNDA5MTNMLDQwOTE0TCw0MDkxNUws NDA5MTZMLDQwOTE3TCw0MDkxOEwsNDA5MTlMLDQwOTIwTCwKKzQwOTIxTCw0MDkyMkwsNDA5MjNM LDQwOTI0TCw0MDkyNUwsNDA5MjZMLDQwOTI3TCw0MDkyOEwsNDA5MjlMLDQwOTMwTCwKKzQwOTMx TCw0MDkzMkwsNDA5MzNMLDQwOTM0TCw0MDkzNUwsNDA5MzZMLDQwOTM3TCw0MDkzOEwsNDA5MzlM LDQwOTQwTCwKKzQwOTQxTCw0MDk0MkwsNDA5NDNMLDQwOTQ0TCw0MDk0NUwsNDA5NDZMLDQwOTQ3 TCw0MDk0OEwsNDA5NDlMLDQwOTUwTCwKKzQwOTUxTCw0MDk1MkwsNDA5NTNMLDQwOTU0TCw0MDk1 NUwsNDA5NTZMLDQwOTU3TCw0MDk1OEwsNDA5NTlMLDQwOTYwTCwKKzQwOTYxTCw0MDk2MkwsNDA5 NjNMLDQwOTY0TCw0MDk2NUwsNDA5NjZMLDQwOTY3TCw0MDk2OEwsNDA5NjlMLDQwOTcwTCwKKzQw OTcxTCw0MDk3MkwsNDA5NzNMLDQwOTc0TCw0MDk3NUwsNDA5NzZMLDQwOTc3TCw0MDk3OEwsNDA5 NzlMLDQwOTgwTCwKKzQwOTgxTCw0MDk4MkwsNDA5ODNMLDQwOTg0TCw0MDk4NUwsNDA5ODZMLDQw OTg3TCw0MDk4OEwsNDA5ODlMLDQwOTkwTCwKKzQwOTkxTCw0MDk5MkwsNDA5OTNMLDQwOTk0TCw0 MDk5NUwsNDA5OTZMLDQwOTk3TCw0MDk5OEwsNDA5OTlMLDQxMDAwTCwKKzQxMDAxTCw0MTAwMkws NDEwMDNMLDQxMDA0TCw0MTAwNUwsNDEwMDZMLDQxMDA3TCw0MTAwOEwsNDEwMDlMLDQxMDEwTCwK KzQxMDExTCw0MTAxMkwsNDEwMTNMLDQxMDE0TCw0MTAxNUwsNDEwMTZMLDQxMDE3TCw0MTAxOEws NDEwMTlMLDQxMDIwTCwKKzQxMDIxTCw0MTAyMkwsNDEwMjNMLDQxMDI0TCw0MTAyNUwsNDEwMjZM LDQxMDI3TCw0MTAyOEwsNDEwMjlMLDQxMDMwTCwKKzQxMDMxTCw0MTAzMkwsNDEwMzNMLDQxMDM0 TCw0MTAzNUwsNDEwMzZMLDQxMDM3TCw0MTAzOEwsNDEwMzlMLDQxMDQwTCwKKzQxMDQxTCw0MTA0 MkwsNDEwNDNMLDQxMDQ0TCw0MTA0NUwsNDEwNDZMLDQxMDQ3TCw0MTA0OEwsNDEwNDlMLDQxMDUw TCwKKzQxMDUxTCw0MTA1MkwsNDEwNTNMLDQxMDU0TCw0MTA1NUwsNDEwNTZMLDQxMDU3TCw0MTA1 OEwsNDEwNTlMLDQxMDYwTCwKKzQxMDYxTCw0MTA2MkwsNDEwNjNMLDQxMDY0TCw0MTA2NUwsNDEw NjZMLDQxMDY3TCw0MTA2OEwsNDEwNjlMLDQxMDcwTCwKKzQxMDcxTCw0MTA3MkwsNDEwNzNMLDQx MDc0TCw0MTA3NUwsNDEwNzZMLDQxMDc3TCw0MTA3OEwsNDEwNzlMLDQxMDgwTCwKKzQxMDgxTCw0 MTA4MkwsNDEwODNMLDQxMDg0TCw0MTA4NUwsNDEwODZMLDQxMDg3TCw0MTA4OEwsNDEwODlMLDQx MDkwTCwKKzQxMDkxTCw0MTA5MkwsNDEwOTNMLDQxMDk0TCw0MTA5NUwsNDEwOTZMLDQxMDk3TCw0 MTA5OEwsNDEwOTlMLDQxMTAwTCwKKzQxMTAxTCw0MTEwMkwsNDExMDNMLDQxMTA0TCw0MTEwNUws NDExMDZMLDQxMTA3TCw0MTEwOEwsNDExMDlMLDQxMTEwTCwKKzQxMTExTCw0MTExMkwsNDExMTNM LDQxMTE0TCw0MTExNUwsNDExMTZMLDQxMTE3TCw0MTExOEwsNDExMTlMLDQxMTIwTCwKKzQxMTIx TCw0MTEyMkwsNDExMjNMLDQxMTI0TCw0MTEyNUwsNDExMjZMLDQxMTI3TCw0MTEyOEwsNDExMjlM LDQxMTMwTCwKKzQxMTMxTCw0MTEzMkwsNDExMzNMLDQxMTM0TCw0MTEzNUwsNDExMzZMLDQxMTM3 TCw0MTEzOEwsNDExMzlMLDQxMTQwTCwKKzQxMTQxTCw0MTE0MkwsNDExNDNMLDQxMTQ0TCw0MTE0 NUwsNDExNDZMLDQxMTQ3TCw0MTE0OEwsNDExNDlMLDQxMTUwTCwKKzQxMTUxTCw0MTE1MkwsNDEx NTNMLDQxMTU0TCw0MTE1NUwsNDExNTZMLDQxMTU3TCw0MTE1OEwsNDExNTlMLDQxMTYwTCwKKzQx MTYxTCw0MTE2MkwsNDExNjNMLDQxMTY0TCw0MTE2NUwsNDExNjZMLDQxMTY3TCw0MTE2OEwsNDEx NjlMLDQxMTcwTCwKKzQxMTcxTCw0MTE3MkwsNDExNzNMLDQxMTc0TCw0MTE3NUwsNDExNzZMLDQx MTc3TCw0MTE3OEwsNDExNzlMLDQxMTgwTCwKKzQxMTgxTCw0MTE4MkwsNDExODNMLDQxMTg0TCw0 MTE4NUwsNDExODZMLDQxMTg3TCw0MTE4OEwsNDExODlMLDQxMTkwTCwKKzQxMTkxTCw0MTE5Mkws NDExOTNMLDQxMTk0TCw0MTE5NUwsNDExOTZMLDQxMTk3TCw0MTE5OEwsNDExOTlMLDQxMjAwTCwK KzQxMjAxTCw0MTIwMkwsNDEyMDNMLDQxMjA0TCw0MTIwNUwsNDEyMDZMLDQxMjA3TCw0MTIwOEws NDEyMDlMLDQxMjEwTCwKKzQxMjExTCw0MTIxMkwsNDEyMTNMLDQxMjE0TCw0MTIxNUwsNDEyMTZM LDQxMjE3TCw0MTIxOEwsNDEyMTlMLDQxMjIwTCwKKzQxMjIxTCw0MTIyMkwsNDEyMjNMLDQxMjI0 TCw0MTIyNUwsNDEyMjZMLDQxMjI3TCw0MTIyOEwsNDEyMjlMLDQxMjMwTCwKKzQxMjMxTCw0MTIz MkwsNDEyMzNMLDQxMjM0TCw0MTIzNUwsNDEyMzZMLDQxMjM3TCw0MTIzOEwsNDEyMzlMLDQxMjQw TCwKKzQxMjQxTCw0MTI0MkwsNDEyNDNMLDQxMjQ0TCw0MTI0NUwsNDEyNDZMLDQxMjQ3TCw0MTI0 OEwsNDEyNDlMLDQxMjUwTCwKKzQxMjUxTCw0MTI1MkwsNDEyNTNMLDQxMjU0TCw0MTI1NUwsNDEy NTZMLDQxMjU3TCw0MTI1OEwsNDEyNTlMLDQxMjYwTCwKKzQxMjYxTCw0MTI2MkwsNDEyNjNMLDQx MjY0TCw0MTI2NUwsNDEyNjZMLDQxMjY3TCw0MTI2OEwsNDEyNjlMLDQxMjcwTCwKKzQxMjcxTCw0 MTI3MkwsNDEyNzNMLDQxMjc0TCw0MTI3NUwsNDEyNzZMLDQxMjc3TCw0MTI3OEwsNDEyNzlMLDQx MjgwTCwKKzQxMjgxTCw0MTI4MkwsNDEyODNMLDQxMjg0TCw0MTI4NUwsNDEyODZMLDQxMjg3TCw0 MTI4OEwsNDEyODlMLDQxMjkwTCwKKzQxMjkxTCw0MTI5MkwsNDEyOTNMLDQxMjk0TCw0MTI5NUws NDEyOTZMLDQxMjk3TCw0MTI5OEwsNDEyOTlMLDQxMzAwTCwKKzQxMzAxTCw0MTMwMkwsNDEzMDNM LDQxMzA0TCw0MTMwNUwsNDEzMDZMLDQxMzA3TCw0MTMwOEwsNDEzMDlMLDQxMzEwTCwKKzQxMzEx TCw0MTMxMkwsNDEzMTNMLDQxMzE0TCw0MTMxNUwsNDEzMTZMLDQxMzE3TCw0MTMxOEwsNDEzMTlM LDQxMzIwTCwKKzQxMzIxTCw0MTMyMkwsNDEzMjNMLDQxMzI0TCw0MTMyNUwsNDEzMjZMLDQxMzI3 TCw0MTMyOEwsNDEzMjlMLDQxMzMwTCwKKzQxMzMxTCw0MTMzMkwsNDEzMzNMLDQxMzM0TCw0MTMz NUwsNDEzMzZMLDQxMzM3TCw0MTMzOEwsNDEzMzlMLDQxMzQwTCwKKzQxMzQxTCw0MTM0MkwsNDEz NDNMLDQxMzQ0TCw0MTM0NUwsNDEzNDZMLDQxMzQ3TCw0MTM0OEwsNDEzNDlMLDQxMzUwTCwKKzQx MzUxTCw0MTM1MkwsNDEzNTNMLDQxMzU0TCw0MTM1NUwsNDEzNTZMLDQxMzU3TCw0MTM1OEwsNDEz NTlMLDQxMzYwTCwKKzQxMzYxTCw0MTM2MkwsNDEzNjNMLDQxMzY0TCw0MTM2NUwsNDEzNjZMLDQx MzY3TCw0MTM2OEwsNDEzNjlMLDQxMzcwTCwKKzQxMzcxTCw0MTM3MkwsNDEzNzNMLDQxMzc0TCw0 MTM3NUwsNDEzNzZMLDQxMzc3TCw0MTM3OEwsNDEzNzlMLDQxMzgwTCwKKzQxMzgxTCw0MTM4Mkws NDEzODNMLDQxMzg0TCw0MTM4NUwsNDEzODZMLDQxMzg3TCw0MTM4OEwsNDEzODlMLDQxMzkwTCwK KzQxMzkxTCw0MTM5MkwsNDEzOTNMLDQxMzk0TCw0MTM5NUwsNDEzOTZMLDQxMzk3TCw0MTM5OEws NDEzOTlMLDQxNDAwTCwKKzQxNDAxTCw0MTQwMkwsNDE0MDNMLDQxNDA0TCw0MTQwNUwsNDE0MDZM LDQxNDA3TCw0MTQwOEwsNDE0MDlMLDQxNDEwTCwKKzQxNDExTCw0MTQxMkwsNDE0MTNMLDQxNDE0 TCw0MTQxNUwsNDE0MTZMLDQxNDE3TCw0MTQxOEwsNDE0MTlMLDQxNDIwTCwKKzQxNDIxTCw0MTQy MkwsNDE0MjNMLDQxNDI0TCw0MTQyNUwsNDE0MjZMLDQxNDI3TCw0MTQyOEwsNDE0MjlMLDQxNDMw TCwKKzQxNDMxTCw0MTQzMkwsNDE0MzNMLDQxNDM0TCw0MTQzNUwsNDE0MzZMLDQxNDM3TCw0MTQz OEwsNDE0MzlMLDQxNDQwTCwKKzQxNDQxTCw0MTQ0MkwsNDE0NDNMLDQxNDQ0TCw0MTQ0NUwsNDE0 NDZMLDQxNDQ3TCw0MTQ0OEwsNDE0NDlMLDQxNDUwTCwKKzQxNDUxTCw0MTQ1MkwsNDE0NTNMLDQx NDU0TCw0MTQ1NUwsNDE0NTZMLDQxNDU3TCw0MTQ1OEwsNDE0NTlMLDQxNDYwTCwKKzQxNDYxTCw0 MTQ2MkwsNDE0NjNMLDQxNDY0TCw0MTQ2NUwsNDE0NjZMLDQxNDY3TCw0MTQ2OEwsNDE0NjlMLDQx NDcwTCwKKzQxNDcxTCw0MTQ3MkwsNDE0NzNMLDQxNDc0TCw0MTQ3NUwsNDE0NzZMLDQxNDc3TCw0 MTQ3OEwsNDE0NzlMLDQxNDgwTCwKKzQxNDgxTCw0MTQ4MkwsNDE0ODNMLDQxNDg0TCw0MTQ4NUws NDE0ODZMLDQxNDg3TCw0MTQ4OEwsNDE0ODlMLDQxNDkwTCwKKzQxNDkxTCw0MTQ5MkwsNDE0OTNM LDQxNDk0TCw0MTQ5NUwsNDE0OTZMLDQxNDk3TCw0MTQ5OEwsNDE0OTlMLDQxNTAwTCwKKzQxNTAx TCw0MTUwMkwsNDE1MDNMLDQxNTA0TCw0MTUwNUwsNDE1MDZMLDQxNTA3TCw0MTUwOEwsNDE1MDlM LDQxNTEwTCwKKzQxNTExTCw0MTUxMkwsNDE1MTNMLDQxNTE0TCw0MTUxNUwsNDE1MTZMLDQxNTE3 TCw0MTUxOEwsNDE1MTlMLDQxNTIwTCwKKzQxNTIxTCw0MTUyMkwsNDE1MjNMLDQxNTI0TCw0MTUy NUwsNDE1MjZMLDQxNTI3TCw0MTUyOEwsNDE1MjlMLDQxNTMwTCwKKzQxNTMxTCw0MTUzMkwsNDE1 MzNMLDQxNTM0TCw0MTUzNUwsNDE1MzZMLDQxNTM3TCw0MTUzOEwsNDE1MzlMLDQxNTQwTCwKKzQx NTQxTCw0MTU0MkwsNDE1NDNMLDQxNTQ0TCw0MTU0NUwsNDE1NDZMLDQxNTQ3TCw0MTU0OEwsNDE1 NDlMLDQxNTUwTCwKKzQxNTUxTCw0MTU1MkwsNDE1NTNMLDQxNTU0TCw0MTU1NUwsNDE1NTZMLDQx NTU3TCw0MTU1OEwsNDE1NTlMLDQxNTYwTCwKKzQxNTYxTCw0MTU2MkwsNDE1NjNMLDQxNTY0TCw0 MTU2NUwsNDE1NjZMLDQxNTY3TCw0MTU2OEwsNDE1NjlMLDQxNTcwTCwKKzQxNTcxTCw0MTU3Mkws NDE1NzNMLDQxNTc0TCw0MTU3NUwsNDE1NzZMLDQxNTc3TCw0MTU3OEwsNDE1NzlMLDQxNTgwTCwK KzQxNTgxTCw0MTU4MkwsNDE1ODNMLDQxNTg0TCw0MTU4NUwsNDE1ODZMLDQxNTg3TCw0MTU4OEws NDE1ODlMLDQxNTkwTCwKKzQxNTkxTCw0MTU5MkwsNDE1OTNMLDQxNTk0TCw0MTU5NUwsNDE1OTZM LDQxNTk3TCw0MTU5OEwsNDE1OTlMLDQxNjAwTCwKKzQxNjAxTCw0MTYwMkwsNDE2MDNMLDQxNjA0 TCw0MTYwNUwsNDE2MDZMLDQxNjA3TCw0MTYwOEwsNDE2MDlMLDQxNjEwTCwKKzQxNjExTCw0MTYx MkwsNDE2MTNMLDQxNjE0TCw0MTYxNUwsNDE2MTZMLDQxNjE3TCw0MTYxOEwsNDE2MTlMLDQxNjIw TCwKKzQxNjIxTCw0MTYyMkwsNDE2MjNMLDQxNjI0TCw0MTYyNUwsNDE2MjZMLDQxNjI3TCw0MTYy OEwsNDE2MjlMLDQxNjMwTCwKKzQxNjMxTCw0MTYzMkwsNDE2MzNMLDQxNjM0TCw0MTYzNUwsNDE2 MzZMLDQxNjM3TCw0MTYzOEwsNDE2MzlMLDQxNjQwTCwKKzQxNjQxTCw0MTY0MkwsNDE2NDNMLDQx NjQ0TCw0MTY0NUwsNDE2NDZMLDQxNjQ3TCw0MTY0OEwsNDE2NDlMLDQxNjUwTCwKKzQxNjUxTCw0 MTY1MkwsNDE2NTNMLDQxNjU0TCw0MTY1NUwsNDE2NTZMLDQxNjU3TCw0MTY1OEwsNDE2NTlMLDQx NjYwTCwKKzQxNjYxTCw0MTY2MkwsNDE2NjNMLDQxNjY0TCw0MTY2NUwsNDE2NjZMLDQxNjY3TCw0 MTY2OEwsNDE2NjlMLDQxNjcwTCwKKzQxNjcxTCw0MTY3MkwsNDE2NzNMLDQxNjc0TCw0MTY3NUws NDE2NzZMLDQxNjc3TCw0MTY3OEwsNDE2NzlMLDQxNjgwTCwKKzQxNjgxTCw0MTY4MkwsNDE2ODNM LDQxNjg0TCw0MTY4NUwsNDE2ODZMLDQxNjg3TCw0MTY4OEwsNDE2ODlMLDQxNjkwTCwKKzQxNjkx TCw0MTY5MkwsNDE2OTNMLDQxNjk0TCw0MTY5NUwsNDE2OTZMLDQxNjk3TCw0MTY5OEwsNDE2OTlM LDQxNzAwTCwKKzQxNzAxTCw0MTcwMkwsNDE3MDNMLDQxNzA0TCw0MTcwNUwsNDE3MDZMLDQxNzA3 TCw0MTcwOEwsNDE3MDlMLDQxNzEwTCwKKzQxNzExTCw0MTcxMkwsNDE3MTNMLDQxNzE0TCw0MTcx NUwsNDE3MTZMLDQxNzE3TCw0MTcxOEwsNDE3MTlMLDQxNzIwTCwKKzQxNzIxTCw0MTcyMkwsNDE3 MjNMLDQxNzI0TCw0MTcyNUwsNDE3MjZMLDQxNzI3TCw0MTcyOEwsNDE3MjlMLDQxNzMwTCwKKzQx NzMxTCw0MTczMkwsNDE3MzNMLDQxNzM0TCw0MTczNUwsNDE3MzZMLDQxNzM3TCw0MTczOEwsNDE3 MzlMLDQxNzQwTCwKKzQxNzQxTCw0MTc0MkwsNDE3NDNMLDQxNzQ0TCw0MTc0NUwsNDE3NDZMLDQx NzQ3TCw0MTc0OEwsNDE3NDlMLDQxNzUwTCwKKzQxNzUxTCw0MTc1MkwsNDE3NTNMLDQxNzU0TCw0 MTc1NUwsNDE3NTZMLDQxNzU3TCw0MTc1OEwsNDE3NTlMLDQxNzYwTCwKKzQxNzYxTCw0MTc2Mkws NDE3NjNMLDQxNzY0TCw0MTc2NUwsNDE3NjZMLDQxNzY3TCw0MTc2OEwsNDE3NjlMLDQxNzcwTCwK KzQxNzcxTCw0MTc3MkwsNDE3NzNMLDQxNzc0TCw0MTc3NUwsNDE3NzZMLDQxNzc3TCw0MTc3OEws NDE3NzlMLDQxNzgwTCwKKzQxNzgxTCw0MTc4MkwsNDE3ODNMLDQxNzg0TCw0MTc4NUwsNDE3ODZM LDQxNzg3TCw0MTc4OEwsNDE3ODlMLDQxNzkwTCwKKzQxNzkxTCw0MTc5MkwsNDE3OTNMLDQxNzk0 TCw0MTc5NUwsNDE3OTZMLDQxNzk3TCw0MTc5OEwsNDE3OTlMLDQxODAwTCwKKzQxODAxTCw0MTgw MkwsNDE4MDNMLDQxODA0TCw0MTgwNUwsNDE4MDZMLDQxODA3TCw0MTgwOEwsNDE4MDlMLDQxODEw TCwKKzQxODExTCw0MTgxMkwsNDE4MTNMLDQxODE0TCw0MTgxNUwsNDE4MTZMLDQxODE3TCw0MTgx OEwsNDE4MTlMLDQxODIwTCwKKzQxODIxTCw0MTgyMkwsNDE4MjNMLDQxODI0TCw0MTgyNUwsNDE4 MjZMLDQxODI3TCw0MTgyOEwsNDE4MjlMLDQxODMwTCwKKzQxODMxTCw0MTgzMkwsNDE4MzNMLDQx ODM0TCw0MTgzNUwsNDE4MzZMLDQxODM3TCw0MTgzOEwsNDE4MzlMLDQxODQwTCwKKzQxODQxTCw0 MTg0MkwsNDE4NDNMLDQxODQ0TCw0MTg0NUwsNDE4NDZMLDQxODQ3TCw0MTg0OEwsNDE4NDlMLDQx ODUwTCwKKzQxODUxTCw0MTg1MkwsNDE4NTNMLDQxODU0TCw0MTg1NUwsNDE4NTZMLDQxODU3TCw0 MTg1OEwsNDE4NTlMLDQxODYwTCwKKzQxODYxTCw0MTg2MkwsNDE4NjNMLDQxODY0TCw0MTg2NUws NDE4NjZMLDQxODY3TCw0MTg2OEwsNDE4NjlMLDQxODcwTCwKKzQxODcxTCw0MTg3MkwsNDE4NzNM LDQxODc0TCw0MTg3NUwsNDE4NzZMLDQxODc3TCw0MTg3OEwsNDE4NzlMLDQxODgwTCwKKzQxODgx TCw0MTg4MkwsNDE4ODNMLDQxODg0TCw0MTg4NUwsNDE4ODZMLDQxODg3TCw0MTg4OEwsNDE4ODlM LDQxODkwTCwKKzQxODkxTCw0MTg5MkwsNDE4OTNMLDQxODk0TCw0MTg5NUwsNDE4OTZMLDQxODk3 TCw0MTg5OEwsNDE4OTlMLDQxOTAwTCwKKzQxOTAxTCw0MTkwMkwsNDE5MDNMLDQxOTA0TCw0MTkw NUwsNDE5MDZMLDQxOTA3TCw0MTkwOEwsNDE5MDlMLDQxOTEwTCwKKzQxOTExTCw0MTkxMkwsNDE5 MTNMLDQxOTE0TCw0MTkxNUwsNDE5MTZMLDQxOTE3TCw0MTkxOEwsNDE5MTlMLDQxOTIwTCwKKzQx OTIxTCw0MTkyMkwsNDE5MjNMLDQxOTI0TCw0MTkyNUwsNDE5MjZMLDQxOTI3TCw0MTkyOEwsNDE5 MjlMLDQxOTMwTCwKKzQxOTMxTCw0MTkzMkwsNDE5MzNMLDQxOTM0TCw0MTkzNUwsNDE5MzZMLDQx OTM3TCw0MTkzOEwsNDE5MzlMLDQxOTQwTCwKKzQxOTQxTCw0MTk0MkwsNDE5NDNMLDQxOTQ0TCw0 MTk0NUwsNDE5NDZMLDQxOTQ3TCw0MTk0OEwsNDE5NDlMLDQxOTUwTCwKKzQxOTUxTCw0MTk1Mkws NDE5NTNMLDQxOTU0TCw0MTk1NUwsNDE5NTZMLDQxOTU3TCw0MTk1OEwsNDE5NTlMLDQxOTYwTCwK KzQxOTYxTCw0MTk2MkwsNDE5NjNMLDQxOTY0TCw0MTk2NUwsNDE5NjZMLDQxOTY3TCw0MTk2OEws NDE5NjlMLDQxOTcwTCwKKzQxOTcxTCw0MTk3MkwsNDE5NzNMLDQxOTc0TCw0MTk3NUwsNDE5NzZM LDQxOTc3TCw0MTk3OEwsNDE5NzlMLDQxOTgwTCwKKzQxOTgxTCw0MTk4MkwsNDE5ODNMLDQxOTg0 TCw0MTk4NUwsNDE5ODZMLDQxOTg3TCw0MTk4OEwsNDE5ODlMLDQxOTkwTCwKKzQxOTkxTCw0MTk5 MkwsNDE5OTNMLDQxOTk0TCw0MTk5NUwsNDE5OTZMLDQxOTk3TCw0MTk5OEwsNDE5OTlMLDQyMDAw TCwKKzQyMDAxTCw0MjAwMkwsNDIwMDNMLDQyMDA0TCw0MjAwNUwsNDIwMDZMLDQyMDA3TCw0MjAw OEwsNDIwMDlMLDQyMDEwTCwKKzQyMDExTCw0MjAxMkwsNDIwMTNMLDQyMDE0TCw0MjAxNUwsNDIw MTZMLDQyMDE3TCw0MjAxOEwsNDIwMTlMLDQyMDIwTCwKKzQyMDIxTCw0MjAyMkwsNDIwMjNMLDQy MDI0TCw0MjAyNUwsNDIwMjZMLDQyMDI3TCw0MjAyOEwsNDIwMjlMLDQyMDMwTCwKKzQyMDMxTCw0 MjAzMkwsNDIwMzNMLDQyMDM0TCw0MjAzNUwsNDIwMzZMLDQyMDM3TCw0MjAzOEwsNDIwMzlMLDQy MDQwTCwKKzQyMDQxTCw0MjA0MkwsNDIwNDNMLDQyMDQ0TCw0MjA0NUwsNDIwNDZMLDQyMDQ3TCw0 MjA0OEwsNDIwNDlMLDQyMDUwTCwKKzQyMDUxTCw0MjA1MkwsNDIwNTNMLDQyMDU0TCw0MjA1NUws NDIwNTZMLDQyMDU3TCw0MjA1OEwsNDIwNTlMLDQyMDYwTCwKKzQyMDYxTCw0MjA2MkwsNDIwNjNM LDQyMDY0TCw0MjA2NUwsNDIwNjZMLDQyMDY3TCw0MjA2OEwsNDIwNjlMLDQyMDcwTCwKKzQyMDcx TCw0MjA3MkwsNDIwNzNMLDQyMDc0TCw0MjA3NUwsNDIwNzZMLDQyMDc3TCw0MjA3OEwsNDIwNzlM LDQyMDgwTCwKKzQyMDgxTCw0MjA4MkwsNDIwODNMLDQyMDg0TCw0MjA4NUwsNDIwODZMLDQyMDg3 TCw0MjA4OEwsNDIwODlMLDQyMDkwTCwKKzQyMDkxTCw0MjA5MkwsNDIwOTNMLDQyMDk0TCw0MjA5 NUwsNDIwOTZMLDQyMDk3TCw0MjA5OEwsNDIwOTlMLDQyMTAwTCwKKzQyMTAxTCw0MjEwMkwsNDIx MDNMLDQyMTA0TCw0MjEwNUwsNDIxMDZMLDQyMTA3TCw0MjEwOEwsNDIxMDlMLDQyMTEwTCwKKzQy MTExTCw0MjExMkwsNDIxMTNMLDQyMTE0TCw0MjExNUwsNDIxMTZMLDQyMTE3TCw0MjExOEwsNDIx MTlMLDQyMTIwTCwKKzQyMTIxTCw0MjEyMkwsNDIxMjNMLDQyMTI0TCw0MjEyNUwsNDIxMjZMLDQy MTI3TCw0MjEyOEwsNDIxMjlMLDQyMTMwTCwKKzQyMTMxTCw0MjEzMkwsNDIxMzNMLDQyMTM0TCw0 MjEzNUwsNDIxMzZMLDQyMTM3TCw0MjEzOEwsNDIxMzlMLDQyMTQwTCwKKzQyMTQxTCw0MjE0Mkws NDIxNDNMLDQyMTQ0TCw0MjE0NUwsNDIxNDZMLDQyMTQ3TCw0MjE0OEwsNDIxNDlMLDQyMTUwTCwK KzQyMTUxTCw0MjE1MkwsNDIxNTNMLDQyMTU0TCw0MjE1NUwsNDIxNTZMLDQyMTU3TCw0MjE1OEws NDIxNTlMLDQyMTYwTCwKKzQyMTYxTCw0MjE2MkwsNDIxNjNMLDQyMTY0TCw0MjE2NUwsNDIxNjZM LDQyMTY3TCw0MjE2OEwsNDIxNjlMLDQyMTcwTCwKKzQyMTcxTCw0MjE3MkwsNDIxNzNMLDQyMTc0 TCw0MjE3NUwsNDIxNzZMLDQyMTc3TCw0MjE3OEwsNDIxNzlMLDQyMTgwTCwKKzQyMTgxTCw0MjE4 MkwsNDIxODNMLDQyMTg0TCw0MjE4NUwsNDIxODZMLDQyMTg3TCw0MjE4OEwsNDIxODlMLDQyMTkw TCwKKzQyMTkxTCw0MjE5MkwsNDIxOTNMLDQyMTk0TCw0MjE5NUwsNDIxOTZMLDQyMTk3TCw0MjE5 OEwsNDIxOTlMLDQyMjAwTCwKKzQyMjAxTCw0MjIwMkwsNDIyMDNMLDQyMjA0TCw0MjIwNUwsNDIy MDZMLDQyMjA3TCw0MjIwOEwsNDIyMDlMLDQyMjEwTCwKKzQyMjExTCw0MjIxMkwsNDIyMTNMLDQy MjE0TCw0MjIxNUwsNDIyMTZMLDQyMjE3TCw0MjIxOEwsNDIyMTlMLDQyMjIwTCwKKzQyMjIxTCw0 MjIyMkwsNDIyMjNMLDQyMjI0TCw0MjIyNUwsNDIyMjZMLDQyMjI3TCw0MjIyOEwsNDIyMjlMLDQy MjMwTCwKKzQyMjMxTCw0MjIzMkwsNDIyMzNMLDQyMjM0TCw0MjIzNUwsNDIyMzZMLDQyMjM3TCw0 MjIzOEwsNDIyMzlMLDQyMjQwTCwKKzQyMjQxTCw0MjI0MkwsNDIyNDNMLDQyMjQ0TCw0MjI0NUws NDIyNDZMLDQyMjQ3TCw0MjI0OEwsNDIyNDlMLDQyMjUwTCwKKzQyMjUxTCw0MjI1MkwsNDIyNTNM LDQyMjU0TCw0MjI1NUwsNDIyNTZMLDQyMjU3TCw0MjI1OEwsNDIyNTlMLDQyMjYwTCwKKzQyMjYx TCw0MjI2MkwsNDIyNjNMLDQyMjY0TCw0MjI2NUwsNDIyNjZMLDQyMjY3TCw0MjI2OEwsNDIyNjlM LDQyMjcwTCwKKzQyMjcxTCw0MjI3MkwsNDIyNzNMLDQyMjc0TCw0MjI3NUwsNDIyNzZMLDQyMjc3 TCw0MjI3OEwsNDIyNzlMLDQyMjgwTCwKKzQyMjgxTCw0MjI4MkwsNDIyODNMLDQyMjg0TCw0MjI4 NUwsNDIyODZMLDQyMjg3TCw0MjI4OEwsNDIyODlMLDQyMjkwTCwKKzQyMjkxTCw0MjI5MkwsNDIy OTNMLDQyMjk0TCw0MjI5NUwsNDIyOTZMLDQyMjk3TCw0MjI5OEwsNDIyOTlMLDQyMzAwTCwKKzQy MzAxTCw0MjMwMkwsNDIzMDNMLDQyMzA0TCw0MjMwNUwsNDIzMDZMLDQyMzA3TCw0MjMwOEwsNDIz MDlMLDQyMzEwTCwKKzQyMzExTCw0MjMxMkwsNDIzMTNMLDQyMzE0TCw0MjMxNUwsNDIzMTZMLDQy MzE3TCw0MjMxOEwsNDIzMTlMLDQyMzIwTCwKKzQyMzIxTCw0MjMyMkwsNDIzMjNMLDQyMzI0TCw0 MjMyNUwsNDIzMjZMLDQyMzI3TCw0MjMyOEwsNDIzMjlMLDQyMzMwTCwKKzQyMzMxTCw0MjMzMkws NDIzMzNMLDQyMzM0TCw0MjMzNUwsNDIzMzZMLDQyMzM3TCw0MjMzOEwsNDIzMzlMLDQyMzQwTCwK KzQyMzQxTCw0MjM0MkwsNDIzNDNMLDQyMzQ0TCw0MjM0NUwsNDIzNDZMLDQyMzQ3TCw0MjM0OEws NDIzNDlMLDQyMzUwTCwKKzQyMzUxTCw0MjM1MkwsNDIzNTNMLDQyMzU0TCw0MjM1NUwsNDIzNTZM LDQyMzU3TCw0MjM1OEwsNDIzNTlMLDQyMzYwTCwKKzQyMzYxTCw0MjM2MkwsNDIzNjNMLDQyMzY0 TCw0MjM2NUwsNDIzNjZMLDQyMzY3TCw0MjM2OEwsNDIzNjlMLDQyMzcwTCwKKzQyMzcxTCw0MjM3 MkwsNDIzNzNMLDQyMzc0TCw0MjM3NUwsNDIzNzZMLDQyMzc3TCw0MjM3OEwsNDIzNzlMLDQyMzgw TCwKKzQyMzgxTCw0MjM4MkwsNDIzODNMLDQyMzg0TCw0MjM4NUwsNDIzODZMLDQyMzg3TCw0MjM4 OEwsNDIzODlMLDQyMzkwTCwKKzQyMzkxTCw0MjM5MkwsNDIzOTNMLDQyMzk0TCw0MjM5NUwsNDIz OTZMLDQyMzk3TCw0MjM5OEwsNDIzOTlMLDQyNDAwTCwKKzQyNDAxTCw0MjQwMkwsNDI0MDNMLDQy NDA0TCw0MjQwNUwsNDI0MDZMLDQyNDA3TCw0MjQwOEwsNDI0MDlMLDQyNDEwTCwKKzQyNDExTCw0 MjQxMkwsNDI0MTNMLDQyNDE0TCw0MjQxNUwsNDI0MTZMLDQyNDE3TCw0MjQxOEwsNDI0MTlMLDQy NDIwTCwKKzQyNDIxTCw0MjQyMkwsNDI0MjNMLDQyNDI0TCw0MjQyNUwsNDI0MjZMLDQyNDI3TCw0 MjQyOEwsNDI0MjlMLDQyNDMwTCwKKzQyNDMxTCw0MjQzMkwsNDI0MzNMLDQyNDM0TCw0MjQzNUws NDI0MzZMLDQyNDM3TCw0MjQzOEwsNDI0MzlMLDQyNDQwTCwKKzQyNDQxTCw0MjQ0MkwsNDI0NDNM LDQyNDQ0TCw0MjQ0NUwsNDI0NDZMLDQyNDQ3TCw0MjQ0OEwsNDI0NDlMLDQyNDUwTCwKKzQyNDUx TCw0MjQ1MkwsNDI0NTNMLDQyNDU0TCw0MjQ1NUwsNDI0NTZMLDQyNDU3TCw0MjQ1OEwsNDI0NTlM LDQyNDYwTCwKKzQyNDYxTCw0MjQ2MkwsNDI0NjNMLDQyNDY0TCw0MjQ2NUwsNDI0NjZMLDQyNDY3 TCw0MjQ2OEwsNDI0NjlMLDQyNDcwTCwKKzQyNDcxTCw0MjQ3MkwsNDI0NzNMLDQyNDc0TCw0MjQ3 NUwsNDI0NzZMLDQyNDc3TCw0MjQ3OEwsNDI0NzlMLDQyNDgwTCwKKzQyNDgxTCw0MjQ4MkwsNDI0 ODNMLDQyNDg0TCw0MjQ4NUwsNDI0ODZMLDQyNDg3TCw0MjQ4OEwsNDI0ODlMLDQyNDkwTCwKKzQy NDkxTCw0MjQ5MkwsNDI0OTNMLDQyNDk0TCw0MjQ5NUwsNDI0OTZMLDQyNDk3TCw0MjQ5OEwsNDI0 OTlMLDQyNTAwTCwKKzQyNTAxTCw0MjUwMkwsNDI1MDNMLDQyNTA0TCw0MjUwNUwsNDI1MDZMLDQy NTA3TCw0MjUwOEwsNDI1MDlMLDQyNTEwTCwKKzQyNTExTCw0MjUxMkwsNDI1MTNMLDQyNTE0TCw0 MjUxNUwsNDI1MTZMLDQyNTE3TCw0MjUxOEwsNDI1MTlMLDQyNTIwTCwKKzQyNTIxTCw0MjUyMkws NDI1MjNMLDQyNTI0TCw0MjUyNUwsNDI1MjZMLDQyNTI3TCw0MjUyOEwsNDI1MjlMLDQyNTMwTCwK KzQyNTMxTCw0MjUzMkwsNDI1MzNMLDQyNTM0TCw0MjUzNUwsNDI1MzZMLDQyNTM3TCw0MjUzOEws NDI1MzlMLDQyNTQwTCwKKzQyNTQxTCw0MjU0MkwsNDI1NDNMLDQyNTQ0TCw0MjU0NUwsNDI1NDZM LDQyNTQ3TCw0MjU0OEwsNDI1NDlMLDQyNTUwTCwKKzQyNTUxTCw0MjU1MkwsNDI1NTNMLDQyNTU0 TCw0MjU1NUwsNDI1NTZMLDQyNTU3TCw0MjU1OEwsNDI1NTlMLDQyNTYwTCwKKzQyNTYwTCw0MjU2 MkwsNDI1NjJMLDQyNTY0TCw0MjU2NEwsNDI1NjZMLDQyNTY2TCw0MjU2OEwsNDI1NjhMLDQyNTcw TCwKKzQyNTcwTCw0MjU3MkwsNDI1NzJMLDQyNTc0TCw0MjU3NEwsNDI1NzZMLDQyNTc2TCw0MjU3 OEwsNDI1NzhMLDQyNTgwTCwKKzQyNTgwTCw0MjU4MkwsNDI1ODJMLDQyNTg0TCw0MjU4NEwsNDI1 ODZMLDQyNTg2TCw0MjU4OEwsNDI1ODhMLDQyNTkwTCwKKzQyNTkwTCw0MjU5MkwsNDI1OTJMLDQy NTk0TCw0MjU5NEwsNDI1OTZMLDQyNTk2TCw0MjU5OEwsNDI1OThMLDQyNjAwTCwKKzQyNjAwTCw0 MjYwMkwsNDI2MDJMLDQyNjA0TCw0MjYwNEwsNDI2MDZMLDQyNjA3TCw0MjYwOEwsNDI2MDlMLDQy NjEwTCwKKzQyNjExTCw0MjYxMkwsNDI2MTNMLDQyNjE0TCw0MjYxNUwsNDI2MTZMLDQyNjE3TCw0 MjYxOEwsNDI2MTlMLDQyNjIwTCwKKzQyNjIxTCw0MjYyMkwsNDI2MjNMLDQyNjI0TCw0MjYyNEws NDI2MjZMLDQyNjI2TCw0MjYyOEwsNDI2MjhMLDQyNjMwTCwKKzQyNjMwTCw0MjYzMkwsNDI2MzJM LDQyNjM0TCw0MjYzNEwsNDI2MzZMLDQyNjM2TCw0MjYzOEwsNDI2MzhMLDQyNjQwTCwKKzQyNjQw TCw0MjY0MkwsNDI2NDJMLDQyNjQ0TCw0MjY0NEwsNDI2NDZMLDQyNjQ2TCw0MjY0OEwsNDI2NDhM LDQyNjUwTCwKKzQyNjUwTCw0MjY1MkwsNDI2NTNMLDQyNjU0TCw0MjY1NUwsNDI2NTZMLDQyNjU3 TCw0MjY1OEwsNDI2NTlMLDQyNjYwTCwKKzQyNjYxTCw0MjY2MkwsNDI2NjNMLDQyNjY0TCw0MjY2 NUwsNDI2NjZMLDQyNjY3TCw0MjY2OEwsNDI2NjlMLDQyNjcwTCwKKzQyNjcxTCw0MjY3MkwsNDI2 NzNMLDQyNjc0TCw0MjY3NUwsNDI2NzZMLDQyNjc3TCw0MjY3OEwsNDI2NzlMLDQyNjgwTCwKKzQy NjgxTCw0MjY4MkwsNDI2ODNMLDQyNjg0TCw0MjY4NUwsNDI2ODZMLDQyNjg3TCw0MjY4OEwsNDI2 ODlMLDQyNjkwTCwKKzQyNjkxTCw0MjY5MkwsNDI2OTNMLDQyNjk0TCw0MjY5NUwsNDI2OTZMLDQy Njk3TCw0MjY5OEwsNDI2OTlMLDQyNzAwTCwKKzQyNzAxTCw0MjcwMkwsNDI3MDNMLDQyNzA0TCw0 MjcwNUwsNDI3MDZMLDQyNzA3TCw0MjcwOEwsNDI3MDlMLDQyNzEwTCwKKzQyNzExTCw0MjcxMkws NDI3MTNMLDQyNzE0TCw0MjcxNUwsNDI3MTZMLDQyNzE3TCw0MjcxOEwsNDI3MTlMLDQyNzIwTCwK KzQyNzIxTCw0MjcyMkwsNDI3MjNMLDQyNzI0TCw0MjcyNUwsNDI3MjZMLDQyNzI3TCw0MjcyOEws NDI3MjlMLDQyNzMwTCwKKzQyNzMxTCw0MjczMkwsNDI3MzNMLDQyNzM0TCw0MjczNUwsNDI3MzZM LDQyNzM3TCw0MjczOEwsNDI3MzlMLDQyNzQwTCwKKzQyNzQxTCw0Mjc0MkwsNDI3NDNMLDQyNzQ0 TCw0Mjc0NUwsNDI3NDZMLDQyNzQ3TCw0Mjc0OEwsNDI3NDlMLDQyNzUwTCwKKzQyNzUxTCw0Mjc1 MkwsNDI3NTNMLDQyNzU0TCw0Mjc1NUwsNDI3NTZMLDQyNzU3TCw0Mjc1OEwsNDI3NTlMLDQyNzYw TCwKKzQyNzYxTCw0Mjc2MkwsNDI3NjNMLDQyNzY0TCw0Mjc2NUwsNDI3NjZMLDQyNzY3TCw0Mjc2 OEwsNDI3NjlMLDQyNzcwTCwKKzQyNzcxTCw0Mjc3MkwsNDI3NzNMLDQyNzc0TCw0Mjc3NUwsNDI3 NzZMLDQyNzc3TCw0Mjc3OEwsNDI3NzlMLDQyNzgwTCwKKzQyNzgxTCw0Mjc4MkwsNDI3ODNMLDQy Nzg0TCw0Mjc4NUwsNDI3ODZMLDQyNzg2TCw0Mjc4OEwsNDI3ODhMLDQyNzkwTCwKKzQyNzkwTCw0 Mjc5MkwsNDI3OTJMLDQyNzk0TCw0Mjc5NEwsNDI3OTZMLDQyNzk2TCw0Mjc5OEwsNDI3OThMLDQy ODAwTCwKKzQyODAxTCw0MjgwMkwsNDI4MDJMLDQyODA0TCw0MjgwNEwsNDI4MDZMLDQyODA2TCw0 MjgwOEwsNDI4MDhMLDQyODEwTCwKKzQyODEwTCw0MjgxMkwsNDI4MTJMLDQyODE0TCw0MjgxNEws NDI4MTZMLDQyODE2TCw0MjgxOEwsNDI4MThMLDQyODIwTCwKKzQyODIwTCw0MjgyMkwsNDI4MjJM LDQyODI0TCw0MjgyNEwsNDI4MjZMLDQyODI2TCw0MjgyOEwsNDI4MjhMLDQyODMwTCwKKzQyODMw TCw0MjgzMkwsNDI4MzJMLDQyODM0TCw0MjgzNEwsNDI4MzZMLDQyODM2TCw0MjgzOEwsNDI4MzhM LDQyODQwTCwKKzQyODQwTCw0Mjg0MkwsNDI4NDJMLDQyODQ0TCw0Mjg0NEwsNDI4NDZMLDQyODQ2 TCw0Mjg0OEwsNDI4NDhMLDQyODUwTCwKKzQyODUwTCw0Mjg1MkwsNDI4NTJMLDQyODU0TCw0Mjg1 NEwsNDI4NTZMLDQyODU2TCw0Mjg1OEwsNDI4NThMLDQyODYwTCwKKzQyODYwTCw0Mjg2MkwsNDI4 NjJMLDQyODY0TCw0Mjg2NUwsNDI4NjZMLDQyODY3TCw0Mjg2OEwsNDI4NjlMLDQyODcwTCwKKzQy ODcxTCw0Mjg3MkwsNDI4NzNMLDQyODczTCw0Mjg3NUwsNDI4NzVMLDQyODc3TCw0Mjg3OEwsNDI4 NzhMLDQyODgwTCwKKzQyODgwTCw0Mjg4MkwsNDI4ODJMLDQyODg0TCw0Mjg4NEwsNDI4ODZMLDQy ODg2TCw0Mjg4OEwsNDI4ODlMLDQyODkwTCwKKzQyODkxTCw0Mjg5MUwsNDI4OTNMLDQyODk0TCw0 Mjg5NUwsNDI4OTZMLDQyODk2TCw0Mjg5OEwsNDI4OThMLDQyOTAwTCwKKzQyOTAxTCw0MjkwMkws NDI5MDJMLDQyOTA0TCw0MjkwNEwsNDI5MDZMLDQyOTA2TCw0MjkwOEwsNDI5MDhMLDQyOTEwTCwK KzQyOTEwTCw0MjkxMkwsNDI5MTJMLDQyOTE0TCw0MjkxNEwsNDI5MTZMLDQyOTE2TCw0MjkxOEws NDI5MThMLDQyOTIwTCwKKzQyOTIwTCw0MjkyMkwsNDI5MjNMLDQyOTI0TCw0MjkyNUwsNDI5MjZM LDQyOTI3TCw0MjkyOEwsNDI5MjlMLDQyOTMwTCwKKzQyOTMxTCw0MjkzMkwsNDI5MzJMLDQyOTM0 TCw0MjkzNEwsNDI5MzZMLDQyOTM3TCw0MjkzOEwsNDI5MzlMLDQyOTQwTCwKKzQyOTQxTCw0Mjk0 MkwsNDI5NDNMLDQyOTQ0TCw0Mjk0NUwsNDI5NDZMLDQyOTQ3TCw0Mjk0OEwsNDI5NDlMLDQyOTUw TCwKKzQyOTUxTCw0Mjk1MkwsNDI5NTNMLDQyOTU0TCw0Mjk1NUwsNDI5NTZMLDQyOTU3TCw0Mjk1 OEwsNDI5NTlMLDQyOTYwTCwKKzQyOTYxTCw0Mjk2MkwsNDI5NjNMLDQyOTY0TCw0Mjk2NUwsNDI5 NjZMLDQyOTY3TCw0Mjk2OEwsNDI5NjlMLDQyOTcwTCwKKzQyOTcxTCw0Mjk3MkwsNDI5NzNMLDQy OTc0TCw0Mjk3NUwsNDI5NzZMLDQyOTc3TCw0Mjk3OEwsNDI5NzlMLDQyOTgwTCwKKzQyOTgxTCw0 Mjk4MkwsNDI5ODNMLDQyOTg0TCw0Mjk4NUwsNDI5ODZMLDQyOTg3TCw0Mjk4OEwsNDI5ODlMLDQy OTkwTCwKKzQyOTkxTCw0Mjk5MkwsNDI5OTNMLDQyOTk0TCw0Mjk5NUwsNDI5OTZMLDQyOTk3TCw0 Mjk5OEwsNDI5OTlMLDQzMDAwTCwKKzQzMDAxTCw0MzAwMkwsNDMwMDNMLDQzMDA0TCw0MzAwNUws NDMwMDZMLDQzMDA3TCw0MzAwOEwsNDMwMDlMLDQzMDEwTCwKKzQzMDExTCw0MzAxMkwsNDMwMTNM LDQzMDE0TCw0MzAxNUwsNDMwMTZMLDQzMDE3TCw0MzAxOEwsNDMwMTlMLDQzMDIwTCwKKzQzMDIx TCw0MzAyMkwsNDMwMjNMLDQzMDI0TCw0MzAyNUwsNDMwMjZMLDQzMDI3TCw0MzAyOEwsNDMwMjlM LDQzMDMwTCwKKzQzMDMxTCw0MzAzMkwsNDMwMzNMLDQzMDM0TCw0MzAzNUwsNDMwMzZMLDQzMDM3 TCw0MzAzOEwsNDMwMzlMLDQzMDQwTCwKKzQzMDQxTCw0MzA0MkwsNDMwNDNMLDQzMDQ0TCw0MzA0 NUwsNDMwNDZMLDQzMDQ3TCw0MzA0OEwsNDMwNDlMLDQzMDUwTCwKKzQzMDUxTCw0MzA1MkwsNDMw NTNMLDQzMDU0TCw0MzA1NUwsNDMwNTZMLDQzMDU3TCw0MzA1OEwsNDMwNTlMLDQzMDYwTCwKKzQz MDYxTCw0MzA2MkwsNDMwNjNMLDQzMDY0TCw0MzA2NUwsNDMwNjZMLDQzMDY3TCw0MzA2OEwsNDMw NjlMLDQzMDcwTCwKKzQzMDcxTCw0MzA3MkwsNDMwNzNMLDQzMDc0TCw0MzA3NUwsNDMwNzZMLDQz MDc3TCw0MzA3OEwsNDMwNzlMLDQzMDgwTCwKKzQzMDgxTCw0MzA4MkwsNDMwODNMLDQzMDg0TCw0 MzA4NUwsNDMwODZMLDQzMDg3TCw0MzA4OEwsNDMwODlMLDQzMDkwTCwKKzQzMDkxTCw0MzA5Mkws NDMwOTNMLDQzMDk0TCw0MzA5NUwsNDMwOTZMLDQzMDk3TCw0MzA5OEwsNDMwOTlMLDQzMTAwTCwK KzQzMTAxTCw0MzEwMkwsNDMxMDNMLDQzMTA0TCw0MzEwNUwsNDMxMDZMLDQzMTA3TCw0MzEwOEws NDMxMDlMLDQzMTEwTCwKKzQzMTExTCw0MzExMkwsNDMxMTNMLDQzMTE0TCw0MzExNUwsNDMxMTZM LDQzMTE3TCw0MzExOEwsNDMxMTlMLDQzMTIwTCwKKzQzMTIxTCw0MzEyMkwsNDMxMjNMLDQzMTI0 TCw0MzEyNUwsNDMxMjZMLDQzMTI3TCw0MzEyOEwsNDMxMjlMLDQzMTMwTCwKKzQzMTMxTCw0MzEz MkwsNDMxMzNMLDQzMTM0TCw0MzEzNUwsNDMxMzZMLDQzMTM3TCw0MzEzOEwsNDMxMzlMLDQzMTQw TCwKKzQzMTQxTCw0MzE0MkwsNDMxNDNMLDQzMTQ0TCw0MzE0NUwsNDMxNDZMLDQzMTQ3TCw0MzE0 OEwsNDMxNDlMLDQzMTUwTCwKKzQzMTUxTCw0MzE1MkwsNDMxNTNMLDQzMTU0TCw0MzE1NUwsNDMx NTZMLDQzMTU3TCw0MzE1OEwsNDMxNTlMLDQzMTYwTCwKKzQzMTYxTCw0MzE2MkwsNDMxNjNMLDQz MTY0TCw0MzE2NUwsNDMxNjZMLDQzMTY3TCw0MzE2OEwsNDMxNjlMLDQzMTcwTCwKKzQzMTcxTCw0 MzE3MkwsNDMxNzNMLDQzMTc0TCw0MzE3NUwsNDMxNzZMLDQzMTc3TCw0MzE3OEwsNDMxNzlMLDQz MTgwTCwKKzQzMTgxTCw0MzE4MkwsNDMxODNMLDQzMTg0TCw0MzE4NUwsNDMxODZMLDQzMTg3TCw0 MzE4OEwsNDMxODlMLDQzMTkwTCwKKzQzMTkxTCw0MzE5MkwsNDMxOTNMLDQzMTk0TCw0MzE5NUws NDMxOTZMLDQzMTk3TCw0MzE5OEwsNDMxOTlMLDQzMjAwTCwKKzQzMjAxTCw0MzIwMkwsNDMyMDNM LDQzMjA0TCw0MzIwNUwsNDMyMDZMLDQzMjA3TCw0MzIwOEwsNDMyMDlMLDQzMjEwTCwKKzQzMjEx TCw0MzIxMkwsNDMyMTNMLDQzMjE0TCw0MzIxNUwsNDMyMTZMLDQzMjE3TCw0MzIxOEwsNDMyMTlM LDQzMjIwTCwKKzQzMjIxTCw0MzIyMkwsNDMyMjNMLDQzMjI0TCw0MzIyNUwsNDMyMjZMLDQzMjI3 TCw0MzIyOEwsNDMyMjlMLDQzMjMwTCwKKzQzMjMxTCw0MzIzMkwsNDMyMzNMLDQzMjM0TCw0MzIz NUwsNDMyMzZMLDQzMjM3TCw0MzIzOEwsNDMyMzlMLDQzMjQwTCwKKzQzMjQxTCw0MzI0MkwsNDMy NDNMLDQzMjQ0TCw0MzI0NUwsNDMyNDZMLDQzMjQ3TCw0MzI0OEwsNDMyNDlMLDQzMjUwTCwKKzQz MjUxTCw0MzI1MkwsNDMyNTNMLDQzMjU0TCw0MzI1NUwsNDMyNTZMLDQzMjU3TCw0MzI1OEwsNDMy NTlMLDQzMjYwTCwKKzQzMjYxTCw0MzI2MkwsNDMyNjNMLDQzMjY0TCw0MzI2NUwsNDMyNjZMLDQz MjY3TCw0MzI2OEwsNDMyNjlMLDQzMjcwTCwKKzQzMjcxTCw0MzI3MkwsNDMyNzNMLDQzMjc0TCw0 MzI3NUwsNDMyNzZMLDQzMjc3TCw0MzI3OEwsNDMyNzlMLDQzMjgwTCwKKzQzMjgxTCw0MzI4Mkws NDMyODNMLDQzMjg0TCw0MzI4NUwsNDMyODZMLDQzMjg3TCw0MzI4OEwsNDMyODlMLDQzMjkwTCwK KzQzMjkxTCw0MzI5MkwsNDMyOTNMLDQzMjk0TCw0MzI5NUwsNDMyOTZMLDQzMjk3TCw0MzI5OEws NDMyOTlMLDQzMzAwTCwKKzQzMzAxTCw0MzMwMkwsNDMzMDNMLDQzMzA0TCw0MzMwNUwsNDMzMDZM LDQzMzA3TCw0MzMwOEwsNDMzMDlMLDQzMzEwTCwKKzQzMzExTCw0MzMxMkwsNDMzMTNMLDQzMzE0 TCw0MzMxNUwsNDMzMTZMLDQzMzE3TCw0MzMxOEwsNDMzMTlMLDQzMzIwTCwKKzQzMzIxTCw0MzMy MkwsNDMzMjNMLDQzMzI0TCw0MzMyNUwsNDMzMjZMLDQzMzI3TCw0MzMyOEwsNDMzMjlMLDQzMzMw TCwKKzQzMzMxTCw0MzMzMkwsNDMzMzNMLDQzMzM0TCw0MzMzNUwsNDMzMzZMLDQzMzM3TCw0MzMz OEwsNDMzMzlMLDQzMzQwTCwKKzQzMzQxTCw0MzM0MkwsNDMzNDNMLDQzMzQ0TCw0MzM0NUwsNDMz NDZMLDQzMzQ3TCw0MzM0OEwsNDMzNDlMLDQzMzUwTCwKKzQzMzUxTCw0MzM1MkwsNDMzNTNMLDQz MzU0TCw0MzM1NUwsNDMzNTZMLDQzMzU3TCw0MzM1OEwsNDMzNTlMLDQzMzYwTCwKKzQzMzYxTCw0 MzM2MkwsNDMzNjNMLDQzMzY0TCw0MzM2NUwsNDMzNjZMLDQzMzY3TCw0MzM2OEwsNDMzNjlMLDQz MzcwTCwKKzQzMzcxTCw0MzM3MkwsNDMzNzNMLDQzMzc0TCw0MzM3NUwsNDMzNzZMLDQzMzc3TCw0 MzM3OEwsNDMzNzlMLDQzMzgwTCwKKzQzMzgxTCw0MzM4MkwsNDMzODNMLDQzMzg0TCw0MzM4NUws NDMzODZMLDQzMzg3TCw0MzM4OEwsNDMzODlMLDQzMzkwTCwKKzQzMzkxTCw0MzM5MkwsNDMzOTNM LDQzMzk0TCw0MzM5NUwsNDMzOTZMLDQzMzk3TCw0MzM5OEwsNDMzOTlMLDQzNDAwTCwKKzQzNDAx TCw0MzQwMkwsNDM0MDNMLDQzNDA0TCw0MzQwNUwsNDM0MDZMLDQzNDA3TCw0MzQwOEwsNDM0MDlM LDQzNDEwTCwKKzQzNDExTCw0MzQxMkwsNDM0MTNMLDQzNDE0TCw0MzQxNUwsNDM0MTZMLDQzNDE3 TCw0MzQxOEwsNDM0MTlMLDQzNDIwTCwKKzQzNDIxTCw0MzQyMkwsNDM0MjNMLDQzNDI0TCw0MzQy NUwsNDM0MjZMLDQzNDI3TCw0MzQyOEwsNDM0MjlMLDQzNDMwTCwKKzQzNDMxTCw0MzQzMkwsNDM0 MzNMLDQzNDM0TCw0MzQzNUwsNDM0MzZMLDQzNDM3TCw0MzQzOEwsNDM0MzlMLDQzNDQwTCwKKzQz NDQxTCw0MzQ0MkwsNDM0NDNMLDQzNDQ0TCw0MzQ0NUwsNDM0NDZMLDQzNDQ3TCw0MzQ0OEwsNDM0 NDlMLDQzNDUwTCwKKzQzNDUxTCw0MzQ1MkwsNDM0NTNMLDQzNDU0TCw0MzQ1NUwsNDM0NTZMLDQz NDU3TCw0MzQ1OEwsNDM0NTlMLDQzNDYwTCwKKzQzNDYxTCw0MzQ2MkwsNDM0NjNMLDQzNDY0TCw0 MzQ2NUwsNDM0NjZMLDQzNDY3TCw0MzQ2OEwsNDM0NjlMLDQzNDcwTCwKKzQzNDcxTCw0MzQ3Mkws NDM0NzNMLDQzNDc0TCw0MzQ3NUwsNDM0NzZMLDQzNDc3TCw0MzQ3OEwsNDM0NzlMLDQzNDgwTCwK KzQzNDgxTCw0MzQ4MkwsNDM0ODNMLDQzNDg0TCw0MzQ4NUwsNDM0ODZMLDQzNDg3TCw0MzQ4OEws NDM0ODlMLDQzNDkwTCwKKzQzNDkxTCw0MzQ5MkwsNDM0OTNMLDQzNDk0TCw0MzQ5NUwsNDM0OTZM LDQzNDk3TCw0MzQ5OEwsNDM0OTlMLDQzNTAwTCwKKzQzNTAxTCw0MzUwMkwsNDM1MDNMLDQzNTA0 TCw0MzUwNUwsNDM1MDZMLDQzNTA3TCw0MzUwOEwsNDM1MDlMLDQzNTEwTCwKKzQzNTExTCw0MzUx MkwsNDM1MTNMLDQzNTE0TCw0MzUxNUwsNDM1MTZMLDQzNTE3TCw0MzUxOEwsNDM1MTlMLDQzNTIw TCwKKzQzNTIxTCw0MzUyMkwsNDM1MjNMLDQzNTI0TCw0MzUyNUwsNDM1MjZMLDQzNTI3TCw0MzUy OEwsNDM1MjlMLDQzNTMwTCwKKzQzNTMxTCw0MzUzMkwsNDM1MzNMLDQzNTM0TCw0MzUzNUwsNDM1 MzZMLDQzNTM3TCw0MzUzOEwsNDM1MzlMLDQzNTQwTCwKKzQzNTQxTCw0MzU0MkwsNDM1NDNMLDQz NTQ0TCw0MzU0NUwsNDM1NDZMLDQzNTQ3TCw0MzU0OEwsNDM1NDlMLDQzNTUwTCwKKzQzNTUxTCw0 MzU1MkwsNDM1NTNMLDQzNTU0TCw0MzU1NUwsNDM1NTZMLDQzNTU3TCw0MzU1OEwsNDM1NTlMLDQz NTYwTCwKKzQzNTYxTCw0MzU2MkwsNDM1NjNMLDQzNTY0TCw0MzU2NUwsNDM1NjZMLDQzNTY3TCw0 MzU2OEwsNDM1NjlMLDQzNTcwTCwKKzQzNTcxTCw0MzU3MkwsNDM1NzNMLDQzNTc0TCw0MzU3NUws NDM1NzZMLDQzNTc3TCw0MzU3OEwsNDM1NzlMLDQzNTgwTCwKKzQzNTgxTCw0MzU4MkwsNDM1ODNM LDQzNTg0TCw0MzU4NUwsNDM1ODZMLDQzNTg3TCw0MzU4OEwsNDM1ODlMLDQzNTkwTCwKKzQzNTkx TCw0MzU5MkwsNDM1OTNMLDQzNTk0TCw0MzU5NUwsNDM1OTZMLDQzNTk3TCw0MzU5OEwsNDM1OTlM LDQzNjAwTCwKKzQzNjAxTCw0MzYwMkwsNDM2MDNMLDQzNjA0TCw0MzYwNUwsNDM2MDZMLDQzNjA3 TCw0MzYwOEwsNDM2MDlMLDQzNjEwTCwKKzQzNjExTCw0MzYxMkwsNDM2MTNMLDQzNjE0TCw0MzYx NUwsNDM2MTZMLDQzNjE3TCw0MzYxOEwsNDM2MTlMLDQzNjIwTCwKKzQzNjIxTCw0MzYyMkwsNDM2 MjNMLDQzNjI0TCw0MzYyNUwsNDM2MjZMLDQzNjI3TCw0MzYyOEwsNDM2MjlMLDQzNjMwTCwKKzQz NjMxTCw0MzYzMkwsNDM2MzNMLDQzNjM0TCw0MzYzNUwsNDM2MzZMLDQzNjM3TCw0MzYzOEwsNDM2 MzlMLDQzNjQwTCwKKzQzNjQxTCw0MzY0MkwsNDM2NDNMLDQzNjQ0TCw0MzY0NUwsNDM2NDZMLDQz NjQ3TCw0MzY0OEwsNDM2NDlMLDQzNjUwTCwKKzQzNjUxTCw0MzY1MkwsNDM2NTNMLDQzNjU0TCw0 MzY1NUwsNDM2NTZMLDQzNjU3TCw0MzY1OEwsNDM2NTlMLDQzNjYwTCwKKzQzNjYxTCw0MzY2Mkws NDM2NjNMLDQzNjY0TCw0MzY2NUwsNDM2NjZMLDQzNjY3TCw0MzY2OEwsNDM2NjlMLDQzNjcwTCwK KzQzNjcxTCw0MzY3MkwsNDM2NzNMLDQzNjc0TCw0MzY3NUwsNDM2NzZMLDQzNjc3TCw0MzY3OEws NDM2NzlMLDQzNjgwTCwKKzQzNjgxTCw0MzY4MkwsNDM2ODNMLDQzNjg0TCw0MzY4NUwsNDM2ODZM LDQzNjg3TCw0MzY4OEwsNDM2ODlMLDQzNjkwTCwKKzQzNjkxTCw0MzY5MkwsNDM2OTNMLDQzNjk0 TCw0MzY5NUwsNDM2OTZMLDQzNjk3TCw0MzY5OEwsNDM2OTlMLDQzNzAwTCwKKzQzNzAxTCw0Mzcw MkwsNDM3MDNMLDQzNzA0TCw0MzcwNUwsNDM3MDZMLDQzNzA3TCw0MzcwOEwsNDM3MDlMLDQzNzEw TCwKKzQzNzExTCw0MzcxMkwsNDM3MTNMLDQzNzE0TCw0MzcxNUwsNDM3MTZMLDQzNzE3TCw0Mzcx OEwsNDM3MTlMLDQzNzIwTCwKKzQzNzIxTCw0MzcyMkwsNDM3MjNMLDQzNzI0TCw0MzcyNUwsNDM3 MjZMLDQzNzI3TCw0MzcyOEwsNDM3MjlMLDQzNzMwTCwKKzQzNzMxTCw0MzczMkwsNDM3MzNMLDQz NzM0TCw0MzczNUwsNDM3MzZMLDQzNzM3TCw0MzczOEwsNDM3MzlMLDQzNzQwTCwKKzQzNzQxTCw0 Mzc0MkwsNDM3NDNMLDQzNzQ0TCw0Mzc0NUwsNDM3NDZMLDQzNzQ3TCw0Mzc0OEwsNDM3NDlMLDQz NzUwTCwKKzQzNzUxTCw0Mzc1MkwsNDM3NTNMLDQzNzU0TCw0Mzc1NUwsNDM3NTZMLDQzNzU3TCw0 Mzc1OEwsNDM3NTlMLDQzNzYwTCwKKzQzNzYxTCw0Mzc2MkwsNDM3NjNMLDQzNzY0TCw0Mzc2NUws NDM3NjZMLDQzNzY3TCw0Mzc2OEwsNDM3NjlMLDQzNzcwTCwKKzQzNzcxTCw0Mzc3MkwsNDM3NzNM LDQzNzc0TCw0Mzc3NUwsNDM3NzZMLDQzNzc3TCw0Mzc3OEwsNDM3NzlMLDQzNzgwTCwKKzQzNzgx TCw0Mzc4MkwsNDM3ODNMLDQzNzg0TCw0Mzc4NUwsNDM3ODZMLDQzNzg3TCw0Mzc4OEwsNDM3ODlM LDQzNzkwTCwKKzQzNzkxTCw0Mzc5MkwsNDM3OTNMLDQzNzk0TCw0Mzc5NUwsNDM3OTZMLDQzNzk3 TCw0Mzc5OEwsNDM3OTlMLDQzODAwTCwKKzQzODAxTCw0MzgwMkwsNDM4MDNMLDQzODA0TCw0Mzgw NUwsNDM4MDZMLDQzODA3TCw0MzgwOEwsNDM4MDlMLDQzODEwTCwKKzQzODExTCw0MzgxMkwsNDM4 MTNMLDQzODE0TCw0MzgxNUwsNDM4MTZMLDQzODE3TCw0MzgxOEwsNDM4MTlMLDQzODIwTCwKKzQz ODIxTCw0MzgyMkwsNDM4MjNMLDQzODI0TCw0MzgyNUwsNDM4MjZMLDQzODI3TCw0MzgyOEwsNDM4 MjlMLDQzODMwTCwKKzQzODMxTCw0MzgzMkwsNDM4MzNMLDQzODM0TCw0MzgzNUwsNDM4MzZMLDQz ODM3TCw0MzgzOEwsNDM4MzlMLDQzODQwTCwKKzQzODQxTCw0Mzg0MkwsNDM4NDNMLDQzODQ0TCw0 Mzg0NUwsNDM4NDZMLDQzODQ3TCw0Mzg0OEwsNDM4NDlMLDQzODUwTCwKKzQzODUxTCw0Mzg1Mkws NDM4NTNMLDQzODU0TCw0Mzg1NUwsNDM4NTZMLDQzODU3TCw0Mzg1OEwsNDI5MzFMLDQzODYwTCwK KzQzODYxTCw0Mzg2MkwsNDM4NjNMLDQzODY0TCw0Mzg2NUwsNDM4NjZMLDQzODY3TCw0Mzg2OEws NDM4NjlMLDQzODcwTCwKKzQzODcxTCw0Mzg3MkwsNDM4NzNMLDQzODc0TCw0Mzg3NUwsNDM4NzZM LDQzODc3TCw0Mzg3OEwsNDM4NzlMLDQzODgwTCwKKzQzODgxTCw0Mzg4MkwsNDM4ODNMLDQzODg0 TCw0Mzg4NUwsNDM4ODZMLDQzODg3TCw1MDI0LDUwMjUsNTAyNiw1MDI3LDUwMjgsCis1MDI5LDUw MzAsNTAzMSw1MDMyLDUwMzMsNTAzNCw1MDM1LDUwMzYsNTAzNyw1MDM4LDUwMzksNTA0MCw1MDQx LDUwNDIsNTA0MywKKzUwNDQsNTA0NSw1MDQ2LDUwNDcsNTA0OCw1MDQ5LDUwNTAsNTA1MSw1MDUy LDUwNTMsNTA1NCw1MDU1LDUwNTYsNTA1Nyw1MDU4LAorNTA1OSw1MDYwLDUwNjEsNTA2Miw1MDYz LDUwNjQsNTA2NSw1MDY2LDUwNjcsNTA2OCw1MDY5LDUwNzAsNTA3MSw1MDcyLDUwNzMsCis1MDc0 LDUwNzUsNTA3Niw1MDc3LDUwNzgsNTA3OSw1MDgwLDUwODEsNTA4Miw1MDgzLDUwODQsNTA4NSw1 MDg2LDUwODcsNTA4OCwKKzUwODksNTA5MCw1MDkxLDUwOTIsNTA5Myw1MDk0LDUwOTUsNTA5Niw1 MDk3LDUwOTgsNTA5OSw1MTAwLDUxMDEsNTEwMiw1MTAzLAorNDM5NjhMLDQzOTY5TCw0Mzk3MEws NDM5NzFMLDQzOTcyTCw0Mzk3M0wsNDM5NzRMLDQzOTc1TCw0Mzk3NkwsNDM5NzdMLAorNDM5NzhM LDQzOTc5TCw0Mzk4MEwsNDM5ODFMLDQzOTgyTCw0Mzk4M0wsNDM5ODRMLDQzOTg1TCw0Mzk4Nkws NDM5ODdMLAorNDM5ODhMLDQzOTg5TCw0Mzk5MEwsNDM5OTFMLDQzOTkyTCw0Mzk5M0wsNDM5OTRM LDQzOTk1TCw0Mzk5NkwsNDM5OTdMLAorNDM5OThMLDQzOTk5TCw0NDAwMEwsNDQwMDFMLDQ0MDAy TCw0NDAwM0wsNDQwMDRMLDQ0MDA1TCw0NDAwNkwsNDQwMDdMLAorNDQwMDhMLDQ0MDA5TCw0NDAx MEwsNDQwMTFMLDQ0MDEyTCw0NDAxM0wsNDQwMTRMLDQ0MDE1TCw0NDAxNkwsNDQwMTdMLAorNDQw MThMLDQ0MDE5TCw0NDAyMEwsNDQwMjFMLDQ0MDIyTCw0NDAyM0wsNDQwMjRMLDQ0MDI1TCw0NDAy NkwsNDQwMjdMLAorNDQwMjhMLDQ0MDI5TCw0NDAzMEwsNDQwMzFMLDQ0MDMyTCw0NDAzM0wsNDQw MzRMLDQ0MDM1TCw0NDAzNkwsNDQwMzdMLAorNDQwMzhMLDQ0MDM5TCw0NDA0MEwsNDQwNDFMLDQ0 MDQyTCw0NDA0M0wsNDQwNDRMLDQ0MDQ1TCw0NDA0NkwsNDQwNDdMLAorNDQwNDhMLDQ0MDQ5TCw0 NDA1MEwsNDQwNTFMLDQ0MDUyTCw0NDA1M0wsNDQwNTRMLDQ0MDU1TCw0NDA1NkwsNDQwNTdMLAor NDQwNThMLDQ0MDU5TCw0NDA2MEwsNDQwNjFMLDQ0MDYyTCw0NDA2M0wsNDQwNjRMLDQ0MDY1TCw0 NDA2NkwsNDQwNjdMLAorNDQwNjhMLDQ0MDY5TCw0NDA3MEwsNDQwNzFMLDQ0MDcyTCw0NDA3M0ws NDQwNzRMLDQ0MDc1TCw0NDA3NkwsNDQwNzdMLAorNDQwNzhMLDQ0MDc5TCw0NDA4MEwsNDQwODFM LDQ0MDgyTCw0NDA4M0wsNDQwODRMLDQ0MDg1TCw0NDA4NkwsNDQwODdMLAorNDQwODhMLDQ0MDg5 TCw0NDA5MEwsNDQwOTFMLDQ0MDkyTCw0NDA5M0wsNDQwOTRMLDQ0MDk1TCw0NDA5NkwsNDQwOTdM LAorNDQwOThMLDQ0MDk5TCw0NDEwMEwsNDQxMDFMLDQ0MTAyTCw0NDEwM0wsNDQxMDRMLDQ0MTA1 TCw0NDEwNkwsNDQxMDdMLAorNDQxMDhMLDQ0MTA5TCw0NDExMEwsNDQxMTFMLDQ0MTEyTCw0NDEx M0wsNDQxMTRMLDQ0MTE1TCw0NDExNkwsNDQxMTdMLAorNDQxMThMLDQ0MTE5TCw0NDEyMEwsNDQx MjFMLDQ0MTIyTCw0NDEyM0wsNDQxMjRMLDQ0MTI1TCw0NDEyNkwsNDQxMjdMLAorNDQxMjhMLDQ0 MTI5TCw0NDEzMEwsNDQxMzFMLDQ0MTMyTCw0NDEzM0wsNDQxMzRMLDQ0MTM1TCw0NDEzNkwsNDQx MzdMLAorNDQxMzhMLDQ0MTM5TCw0NDE0MEwsNDQxNDFMLDQ0MTQyTCw0NDE0M0wsNDQxNDRMLDQ0 MTQ1TCw0NDE0NkwsNDQxNDdMLAorNDQxNDhMLDQ0MTQ5TCw0NDE1MEwsNDQxNTFMLDQ0MTUyTCw0 NDE1M0wsNDQxNTRMLDQ0MTU1TCw0NDE1NkwsNDQxNTdMLAorNDQxNThMLDQ0MTU5TCw0NDE2MEws NDQxNjFMLDQ0MTYyTCw0NDE2M0wsNDQxNjRMLDQ0MTY1TCw0NDE2NkwsNDQxNjdMLAorNDQxNjhM LDQ0MTY5TCw0NDE3MEwsNDQxNzFMLDQ0MTcyTCw0NDE3M0wsNDQxNzRMLDQ0MTc1TCw0NDE3Nkws NDQxNzdMLAorNDQxNzhMLDQ0MTc5TCw0NDE4MEwsNDQxODFMLDQ0MTgyTCw0NDE4M0wsNDQxODRM LDQ0MTg1TCw0NDE4NkwsNDQxODdMLAorNDQxODhMLDQ0MTg5TCw0NDE5MEwsNDQxOTFMLDQ0MTky TCw0NDE5M0wsNDQxOTRMLDQ0MTk1TCw0NDE5NkwsNDQxOTdMLAorNDQxOThMLDQ0MTk5TCw0NDIw MEwsNDQyMDFMLDQ0MjAyTCw0NDIwM0wsNDQyMDRMLDQ0MjA1TCw0NDIwNkwsNDQyMDdMLAorNDQy MDhMLDQ0MjA5TCw0NDIxMEwsNDQyMTFMLDQ0MjEyTCw0NDIxM0wsNDQyMTRMLDQ0MjE1TCw0NDIx NkwsNDQyMTdMLAorNDQyMThMLDQ0MjE5TCw0NDIyMEwsNDQyMjFMLDQ0MjIyTCw0NDIyM0wsNDQy MjRMLDQ0MjI1TCw0NDIyNkwsNDQyMjdMLAorNDQyMjhMLDQ0MjI5TCw0NDIzMEwsNDQyMzFMLDQ0 MjMyTCw0NDIzM0wsNDQyMzRMLDQ0MjM1TCw0NDIzNkwsNDQyMzdMLAorNDQyMzhMLDQ0MjM5TCw0 NDI0MEwsNDQyNDFMLDQ0MjQyTCw0NDI0M0wsNDQyNDRMLDQ0MjQ1TCw0NDI0NkwsNDQyNDdMLAor NDQyNDhMLDQ0MjQ5TCw0NDI1MEwsNDQyNTFMLDQ0MjUyTCw0NDI1M0wsNDQyNTRMLDQ0MjU1TCw0 NDI1NkwsNDQyNTdMLAorNDQyNThMLDQ0MjU5TCw0NDI2MEwsNDQyNjFMLDQ0MjYyTCw0NDI2M0ws NDQyNjRMLDQ0MjY1TCw0NDI2NkwsNDQyNjdMLAorNDQyNjhMLDQ0MjY5TCw0NDI3MEwsNDQyNzFM LDQ0MjcyTCw0NDI3M0wsNDQyNzRMLDQ0Mjc1TCw0NDI3NkwsNDQyNzdMLAorNDQyNzhMLDQ0Mjc5 TCw0NDI4MEwsNDQyODFMLDQ0MjgyTCw0NDI4M0wsNDQyODRMLDQ0Mjg1TCw0NDI4NkwsNDQyODdM LAorNDQyODhMLDQ0Mjg5TCw0NDI5MEwsNDQyOTFMLDQ0MjkyTCw0NDI5M0wsNDQyOTRMLDQ0Mjk1 TCw0NDI5NkwsNDQyOTdMLAorNDQyOThMLDQ0Mjk5TCw0NDMwMEwsNDQzMDFMLDQ0MzAyTCw0NDMw M0wsNDQzMDRMLDQ0MzA1TCw0NDMwNkwsNDQzMDdMLAorNDQzMDhMLDQ0MzA5TCw0NDMxMEwsNDQz MTFMLDQ0MzEyTCw0NDMxM0wsNDQzMTRMLDQ0MzE1TCw0NDMxNkwsNDQzMTdMLAorNDQzMThMLDQ0 MzE5TCw0NDMyMEwsNDQzMjFMLDQ0MzIyTCw0NDMyM0wsNDQzMjRMLDQ0MzI1TCw0NDMyNkwsNDQz MjdMLAorNDQzMjhMLDQ0MzI5TCw0NDMzMEwsNDQzMzFMLDQ0MzMyTCw0NDMzM0wsNDQzMzRMLDQ0 MzM1TCw0NDMzNkwsNDQzMzdMLAorNDQzMzhMLDQ0MzM5TCw0NDM0MEwsNDQzNDFMLDQ0MzQyTCw0 NDM0M0wsNDQzNDRMLDQ0MzQ1TCw0NDM0NkwsNDQzNDdMLAorNDQzNDhMLDQ0MzQ5TCw0NDM1MEws NDQzNTFMLDQ0MzUyTCw0NDM1M0wsNDQzNTRMLDQ0MzU1TCw0NDM1NkwsNDQzNTdMLAorNDQzNThM LDQ0MzU5TCw0NDM2MEwsNDQzNjFMLDQ0MzYyTCw0NDM2M0wsNDQzNjRMLDQ0MzY1TCw0NDM2Nkws NDQzNjdMLAorNDQzNjhMLDQ0MzY5TCw0NDM3MEwsNDQzNzFMLDQ0MzcyTCw0NDM3M0wsNDQzNzRM LDQ0Mzc1TCw0NDM3NkwsNDQzNzdMLAorNDQzNzhMLDQ0Mzc5TCw0NDM4MEwsNDQzODFMLDQ0Mzgy TCw0NDM4M0wsNDQzODRMLDQ0Mzg1TCw0NDM4NkwsNDQzODdMLAorNDQzODhMLDQ0Mzg5TCw0NDM5 MEwsNDQzOTFMLDQ0MzkyTCw0NDM5M0wsNDQzOTRMLDQ0Mzk1TCw0NDM5NkwsNDQzOTdMLAorNDQz OThMLDQ0Mzk5TCw0NDQwMEwsNDQ0MDFMLDQ0NDAyTCw0NDQwM0wsNDQ0MDRMLDQ0NDA1TCw0NDQw NkwsNDQ0MDdMLAorNDQ0MDhMLDQ0NDA5TCw0NDQxMEwsNDQ0MTFMLDQ0NDEyTCw0NDQxM0wsNDQ0 MTRMLDQ0NDE1TCw0NDQxNkwsNDQ0MTdMLAorNDQ0MThMLDQ0NDE5TCw0NDQyMEwsNDQ0MjFMLDQ0 NDIyTCw0NDQyM0wsNDQ0MjRMLDQ0NDI1TCw0NDQyNkwsNDQ0MjdMLAorNDQ0MjhMLDQ0NDI5TCw0 NDQzMEwsNDQ0MzFMLDQ0NDMyTCw0NDQzM0wsNDQ0MzRMLDQ0NDM1TCw0NDQzNkwsNDQ0MzdMLAor NDQ0MzhMLDQ0NDM5TCw0NDQ0MEwsNDQ0NDFMLDQ0NDQyTCw0NDQ0M0wsNDQ0NDRMLDQ0NDQ1TCw0 NDQ0NkwsNDQ0NDdMLAorNDQ0NDhMLDQ0NDQ5TCw0NDQ1MEwsNDQ0NTFMLDQ0NDUyTCw0NDQ1M0ws NDQ0NTRMLDQ0NDU1TCw0NDQ1NkwsNDQ0NTdMLAorNDQ0NThMLDQ0NDU5TCw0NDQ2MEwsNDQ0NjFM LDQ0NDYyTCw0NDQ2M0wsNDQ0NjRMLDQ0NDY1TCw0NDQ2NkwsNDQ0NjdMLAorNDQ0NjhMLDQ0NDY5 TCw0NDQ3MEwsNDQ0NzFMLDQ0NDcyTCw0NDQ3M0wsNDQ0NzRMLDQ0NDc1TCw0NDQ3NkwsNDQ0NzdM LAorNDQ0NzhMLDQ0NDc5TCw0NDQ4MEwsNDQ0ODFMLDQ0NDgyTCw0NDQ4M0wsNDQ0ODRMLDQ0NDg1 TCw0NDQ4NkwsNDQ0ODdMLAorNDQ0ODhMLDQ0NDg5TCw0NDQ5MEwsNDQ0OTFMLDQ0NDkyTCw0NDQ5 M0wsNDQ0OTRMLDQ0NDk1TCw0NDQ5NkwsNDQ0OTdMLAorNDQ0OThMLDQ0NDk5TCw0NDUwMEwsNDQ1 MDFMLDQ0NTAyTCw0NDUwM0wsNDQ1MDRMLDQ0NTA1TCw0NDUwNkwsNDQ1MDdMLAorNDQ1MDhMLDQ0 NTA5TCw0NDUxMEwsNDQ1MTFMLDQ0NTEyTCw0NDUxM0wsNDQ1MTRMLDQ0NTE1TCw0NDUxNkwsNDQ1 MTdMLAorNDQ1MThMLDQ0NTE5TCw0NDUyMEwsNDQ1MjFMLDQ0NTIyTCw0NDUyM0wsNDQ1MjRMLDQ0 NTI1TCw0NDUyNkwsNDQ1MjdMLAorNDQ1MjhMLDQ0NTI5TCw0NDUzMEwsNDQ1MzFMLDQ0NTMyTCw0 NDUzM0wsNDQ1MzRMLDQ0NTM1TCw0NDUzNkwsNDQ1MzdMLAorNDQ1MzhMLDQ0NTM5TCw0NDU0MEws NDQ1NDFMLDQ0NTQyTCw0NDU0M0wsNDQ1NDRMLDQ0NTQ1TCw0NDU0NkwsNDQ1NDdMLAorNDQ1NDhM LDQ0NTQ5TCw0NDU1MEwsNDQ1NTFMLDQ0NTUyTCw0NDU1M0wsNDQ1NTRMLDQ0NTU1TCw0NDU1Nkws NDQ1NTdMLAorNDQ1NThMLDQ0NTU5TCw0NDU2MEwsNDQ1NjFMLDQ0NTYyTCw0NDU2M0wsNDQ1NjRM LDQ0NTY1TCw0NDU2NkwsNDQ1NjdMLAorNDQ1NjhMLDQ0NTY5TCw0NDU3MEwsNDQ1NzFMLDQ0NTcy TCw0NDU3M0wsNDQ1NzRMLDQ0NTc1TCw0NDU3NkwsNDQ1NzdMLAorNDQ1NzhMLDQ0NTc5TCw0NDU4 MEwsNDQ1ODFMLDQ0NTgyTCw0NDU4M0wsNDQ1ODRMLDQ0NTg1TCw0NDU4NkwsNDQ1ODdMLAorNDQ1 ODhMLDQ0NTg5TCw0NDU5MEwsNDQ1OTFMLDQ0NTkyTCw0NDU5M0wsNDQ1OTRMLDQ0NTk1TCw0NDU5 NkwsNDQ1OTdMLAorNDQ1OThMLDQ0NTk5TCw0NDYwMEwsNDQ2MDFMLDQ0NjAyTCw0NDYwM0wsNDQ2 MDRMLDQ0NjA1TCw0NDYwNkwsNDQ2MDdMLAorNDQ2MDhMLDQ0NjA5TCw0NDYxMEwsNDQ2MTFMLDQ0 NjEyTCw0NDYxM0wsNDQ2MTRMLDQ0NjE1TCw0NDYxNkwsNDQ2MTdMLAorNDQ2MThMLDQ0NjE5TCw0 NDYyMEwsNDQ2MjFMLDQ0NjIyTCw0NDYyM0wsNDQ2MjRMLDQ0NjI1TCw0NDYyNkwsNDQ2MjdMLAor NDQ2MjhMLDQ0NjI5TCw0NDYzMEwsNDQ2MzFMLDQ0NjMyTCw0NDYzM0wsNDQ2MzRMLDQ0NjM1TCw0 NDYzNkwsNDQ2MzdMLAorNDQ2MzhMLDQ0NjM5TCw0NDY0MEwsNDQ2NDFMLDQ0NjQyTCw0NDY0M0ws NDQ2NDRMLDQ0NjQ1TCw0NDY0NkwsNDQ2NDdMLAorNDQ2NDhMLDQ0NjQ5TCw0NDY1MEwsNDQ2NTFM LDQ0NjUyTCw0NDY1M0wsNDQ2NTRMLDQ0NjU1TCw0NDY1NkwsNDQ2NTdMLAorNDQ2NThMLDQ0NjU5 TCw0NDY2MEwsNDQ2NjFMLDQ0NjYyTCw0NDY2M0wsNDQ2NjRMLDQ0NjY1TCw0NDY2NkwsNDQ2NjdM LAorNDQ2NjhMLDQ0NjY5TCw0NDY3MEwsNDQ2NzFMLDQ0NjcyTCw0NDY3M0wsNDQ2NzRMLDQ0Njc1 TCw0NDY3NkwsNDQ2NzdMLAorNDQ2NzhMLDQ0Njc5TCw0NDY4MEwsNDQ2ODFMLDQ0NjgyTCw0NDY4 M0wsNDQ2ODRMLDQ0Njg1TCw0NDY4NkwsNDQ2ODdMLAorNDQ2ODhMLDQ0Njg5TCw0NDY5MEwsNDQ2 OTFMLDQ0NjkyTCw0NDY5M0wsNDQ2OTRMLDQ0Njk1TCw0NDY5NkwsNDQ2OTdMLAorNDQ2OThMLDQ0 Njk5TCw0NDcwMEwsNDQ3MDFMLDQ0NzAyTCw0NDcwM0wsNDQ3MDRMLDQ0NzA1TCw0NDcwNkwsNDQ3 MDdMLAorNDQ3MDhMLDQ0NzA5TCw0NDcxMEwsNDQ3MTFMLDQ0NzEyTCw0NDcxM0wsNDQ3MTRMLDQ0 NzE1TCw0NDcxNkwsNDQ3MTdMLAorNDQ3MThMLDQ0NzE5TCw0NDcyMEwsNDQ3MjFMLDQ0NzIyTCw0 NDcyM0wsNDQ3MjRMLDQ0NzI1TCw0NDcyNkwsNDQ3MjdMLAorNDQ3MjhMLDQ0NzI5TCw0NDczMEws NDQ3MzFMLDQ0NzMyTCw0NDczM0wsNDQ3MzRMLDQ0NzM1TCw0NDczNkwsNDQ3MzdMLAorNDQ3MzhM LDQ0NzM5TCw0NDc0MEwsNDQ3NDFMLDQ0NzQyTCw0NDc0M0wsNDQ3NDRMLDQ0NzQ1TCw0NDc0Nkws NDQ3NDdMLAorNDQ3NDhMLDQ0NzQ5TCw0NDc1MEwsNDQ3NTFMLDQ0NzUyTCw0NDc1M0wsNDQ3NTRM LDQ0NzU1TCw0NDc1NkwsNDQ3NTdMLAorNDQ3NThMLDQ0NzU5TCw0NDc2MEwsNDQ3NjFMLDQ0NzYy TCw0NDc2M0wsNDQ3NjRMLDQ0NzY1TCw0NDc2NkwsNDQ3NjdMLAorNDQ3NjhMLDQ0NzY5TCw0NDc3 MEwsNDQ3NzFMLDQ0NzcyTCw0NDc3M0wsNDQ3NzRMLDQ0Nzc1TCw0NDc3NkwsNDQ3NzdMLAorNDQ3 NzhMLDQ0Nzc5TCw0NDc4MEwsNDQ3ODFMLDQ0NzgyTCw0NDc4M0wsNDQ3ODRMLDQ0Nzg1TCw0NDc4 NkwsNDQ3ODdMLAorNDQ3ODhMLDQ0Nzg5TCw0NDc5MEwsNDQ3OTFMLDQ0NzkyTCw0NDc5M0wsNDQ3 OTRMLDQ0Nzk1TCw0NDc5NkwsNDQ3OTdMLAorNDQ3OThMLDQ0Nzk5TCw0NDgwMEwsNDQ4MDFMLDQ0 ODAyTCw0NDgwM0wsNDQ4MDRMLDQ0ODA1TCw0NDgwNkwsNDQ4MDdMLAorNDQ4MDhMLDQ0ODA5TCw0 NDgxMEwsNDQ4MTFMLDQ0ODEyTCw0NDgxM0wsNDQ4MTRMLDQ0ODE1TCw0NDgxNkwsNDQ4MTdMLAor NDQ4MThMLDQ0ODE5TCw0NDgyMEwsNDQ4MjFMLDQ0ODIyTCw0NDgyM0wsNDQ4MjRMLDQ0ODI1TCw0 NDgyNkwsNDQ4MjdMLAorNDQ4MjhMLDQ0ODI5TCw0NDgzMEwsNDQ4MzFMLDQ0ODMyTCw0NDgzM0ws NDQ4MzRMLDQ0ODM1TCw0NDgzNkwsNDQ4MzdMLAorNDQ4MzhMLDQ0ODM5TCw0NDg0MEwsNDQ4NDFM LDQ0ODQyTCw0NDg0M0wsNDQ4NDRMLDQ0ODQ1TCw0NDg0NkwsNDQ4NDdMLAorNDQ4NDhMLDQ0ODQ5 TCw0NDg1MEwsNDQ4NTFMLDQ0ODUyTCw0NDg1M0wsNDQ4NTRMLDQ0ODU1TCw0NDg1NkwsNDQ4NTdM LAorNDQ4NThMLDQ0ODU5TCw0NDg2MEwsNDQ4NjFMLDQ0ODYyTCw0NDg2M0wsNDQ4NjRMLDQ0ODY1 TCw0NDg2NkwsNDQ4NjdMLAorNDQ4NjhMLDQ0ODY5TCw0NDg3MEwsNDQ4NzFMLDQ0ODcyTCw0NDg3 M0wsNDQ4NzRMLDQ0ODc1TCw0NDg3NkwsNDQ4NzdMLAorNDQ4NzhMLDQ0ODc5TCw0NDg4MEwsNDQ4 ODFMLDQ0ODgyTCw0NDg4M0wsNDQ4ODRMLDQ0ODg1TCw0NDg4NkwsNDQ4ODdMLAorNDQ4ODhMLDQ0 ODg5TCw0NDg5MEwsNDQ4OTFMLDQ0ODkyTCw0NDg5M0wsNDQ4OTRMLDQ0ODk1TCw0NDg5NkwsNDQ4 OTdMLAorNDQ4OThMLDQ0ODk5TCw0NDkwMEwsNDQ5MDFMLDQ0OTAyTCw0NDkwM0wsNDQ5MDRMLDQ0 OTA1TCw0NDkwNkwsNDQ5MDdMLAorNDQ5MDhMLDQ0OTA5TCw0NDkxMEwsNDQ5MTFMLDQ0OTEyTCw0 NDkxM0wsNDQ5MTRMLDQ0OTE1TCw0NDkxNkwsNDQ5MTdMLAorNDQ5MThMLDQ0OTE5TCw0NDkyMEws NDQ5MjFMLDQ0OTIyTCw0NDkyM0wsNDQ5MjRMLDQ0OTI1TCw0NDkyNkwsNDQ5MjdMLAorNDQ5MjhM LDQ0OTI5TCw0NDkzMEwsNDQ5MzFMLDQ0OTMyTCw0NDkzM0wsNDQ5MzRMLDQ0OTM1TCw0NDkzNkws NDQ5MzdMLAorNDQ5MzhMLDQ0OTM5TCw0NDk0MEwsNDQ5NDFMLDQ0OTQyTCw0NDk0M0wsNDQ5NDRM LDQ0OTQ1TCw0NDk0NkwsNDQ5NDdMLAorNDQ5NDhMLDQ0OTQ5TCw0NDk1MEwsNDQ5NTFMLDQ0OTUy TCw0NDk1M0wsNDQ5NTRMLDQ0OTU1TCw0NDk1NkwsNDQ5NTdMLAorNDQ5NThMLDQ0OTU5TCw0NDk2 MEwsNDQ5NjFMLDQ0OTYyTCw0NDk2M0wsNDQ5NjRMLDQ0OTY1TCw0NDk2NkwsNDQ5NjdMLAorNDQ5 NjhMLDQ0OTY5TCw0NDk3MEwsNDQ5NzFMLDQ0OTcyTCw0NDk3M0wsNDQ5NzRMLDQ0OTc1TCw0NDk3 NkwsNDQ5NzdMLAorNDQ5NzhMLDQ0OTc5TCw0NDk4MEwsNDQ5ODFMLDQ0OTgyTCw0NDk4M0wsNDQ5 ODRMLDQ0OTg1TCw0NDk4NkwsNDQ5ODdMLAorNDQ5ODhMLDQ0OTg5TCw0NDk5MEwsNDQ5OTFMLDQ0 OTkyTCw0NDk5M0wsNDQ5OTRMLDQ0OTk1TCw0NDk5NkwsNDQ5OTdMLAorNDQ5OThMLDQ0OTk5TCw0 NTAwMEwsNDUwMDFMLDQ1MDAyTCw0NTAwM0wsNDUwMDRMLDQ1MDA1TCw0NTAwNkwsNDUwMDdMLAor NDUwMDhMLDQ1MDA5TCw0NTAxMEwsNDUwMTFMLDQ1MDEyTCw0NTAxM0wsNDUwMTRMLDQ1MDE1TCw0 NTAxNkwsNDUwMTdMLAorNDUwMThMLDQ1MDE5TCw0NTAyMEwsNDUwMjFMLDQ1MDIyTCw0NTAyM0ws NDUwMjRMLDQ1MDI1TCw0NTAyNkwsNDUwMjdMLAorNDUwMjhMLDQ1MDI5TCw0NTAzMEwsNDUwMzFM LDQ1MDMyTCw0NTAzM0wsNDUwMzRMLDQ1MDM1TCw0NTAzNkwsNDUwMzdMLAorNDUwMzhMLDQ1MDM5 TCw0NTA0MEwsNDUwNDFMLDQ1MDQyTCw0NTA0M0wsNDUwNDRMLDQ1MDQ1TCw0NTA0NkwsNDUwNDdM LAorNDUwNDhMLDQ1MDQ5TCw0NTA1MEwsNDUwNTFMLDQ1MDUyTCw0NTA1M0wsNDUwNTRMLDQ1MDU1 TCw0NTA1NkwsNDUwNTdMLAorNDUwNThMLDQ1MDU5TCw0NTA2MEwsNDUwNjFMLDQ1MDYyTCw0NTA2 M0wsNDUwNjRMLDQ1MDY1TCw0NTA2NkwsNDUwNjdMLAorNDUwNjhMLDQ1MDY5TCw0NTA3MEwsNDUw NzFMLDQ1MDcyTCw0NTA3M0wsNDUwNzRMLDQ1MDc1TCw0NTA3NkwsNDUwNzdMLAorNDUwNzhMLDQ1 MDc5TCw0NTA4MEwsNDUwODFMLDQ1MDgyTCw0NTA4M0wsNDUwODRMLDQ1MDg1TCw0NTA4NkwsNDUw ODdMLAorNDUwODhMLDQ1MDg5TCw0NTA5MEwsNDUwOTFMLDQ1MDkyTCw0NTA5M0wsNDUwOTRMLDQ1 MDk1TCw0NTA5NkwsNDUwOTdMLAorNDUwOThMLDQ1MDk5TCw0NTEwMEwsNDUxMDFMLDQ1MTAyTCw0 NTEwM0wsNDUxMDRMLDQ1MTA1TCw0NTEwNkwsNDUxMDdMLAorNDUxMDhMLDQ1MTA5TCw0NTExMEws NDUxMTFMLDQ1MTEyTCw0NTExM0wsNDUxMTRMLDQ1MTE1TCw0NTExNkwsNDUxMTdMLAorNDUxMThM LDQ1MTE5TCw0NTEyMEwsNDUxMjFMLDQ1MTIyTCw0NTEyM0wsNDUxMjRMLDQ1MTI1TCw0NTEyNkws NDUxMjdMLAorNDUxMjhMLDQ1MTI5TCw0NTEzMEwsNDUxMzFMLDQ1MTMyTCw0NTEzM0wsNDUxMzRM LDQ1MTM1TCw0NTEzNkwsNDUxMzdMLAorNDUxMzhMLDQ1MTM5TCw0NTE0MEwsNDUxNDFMLDQ1MTQy TCw0NTE0M0wsNDUxNDRMLDQ1MTQ1TCw0NTE0NkwsNDUxNDdMLAorNDUxNDhMLDQ1MTQ5TCw0NTE1 MEwsNDUxNTFMLDQ1MTUyTCw0NTE1M0wsNDUxNTRMLDQ1MTU1TCw0NTE1NkwsNDUxNTdMLAorNDUx NThMLDQ1MTU5TCw0NTE2MEwsNDUxNjFMLDQ1MTYyTCw0NTE2M0wsNDUxNjRMLDQ1MTY1TCw0NTE2 NkwsNDUxNjdMLAorNDUxNjhMLDQ1MTY5TCw0NTE3MEwsNDUxNzFMLDQ1MTcyTCw0NTE3M0wsNDUx NzRMLDQ1MTc1TCw0NTE3NkwsNDUxNzdMLAorNDUxNzhMLDQ1MTc5TCw0NTE4MEwsNDUxODFMLDQ1 MTgyTCw0NTE4M0wsNDUxODRMLDQ1MTg1TCw0NTE4NkwsNDUxODdMLAorNDUxODhMLDQ1MTg5TCw0 NTE5MEwsNDUxOTFMLDQ1MTkyTCw0NTE5M0wsNDUxOTRMLDQ1MTk1TCw0NTE5NkwsNDUxOTdMLAor NDUxOThMLDQ1MTk5TCw0NTIwMEwsNDUyMDFMLDQ1MjAyTCw0NTIwM0wsNDUyMDRMLDQ1MjA1TCw0 NTIwNkwsNDUyMDdMLAorNDUyMDhMLDQ1MjA5TCw0NTIxMEwsNDUyMTFMLDQ1MjEyTCw0NTIxM0ws NDUyMTRMLDQ1MjE1TCw0NTIxNkwsNDUyMTdMLAorNDUyMThMLDQ1MjE5TCw0NTIyMEwsNDUyMjFM LDQ1MjIyTCw0NTIyM0wsNDUyMjRMLDQ1MjI1TCw0NTIyNkwsNDUyMjdMLAorNDUyMjhMLDQ1MjI5 TCw0NTIzMEwsNDUyMzFMLDQ1MjMyTCw0NTIzM0wsNDUyMzRMLDQ1MjM1TCw0NTIzNkwsNDUyMzdM LAorNDUyMzhMLDQ1MjM5TCw0NTI0MEwsNDUyNDFMLDQ1MjQyTCw0NTI0M0wsNDUyNDRMLDQ1MjQ1 TCw0NTI0NkwsNDUyNDdMLAorNDUyNDhMLDQ1MjQ5TCw0NTI1MEwsNDUyNTFMLDQ1MjUyTCw0NTI1 M0wsNDUyNTRMLDQ1MjU1TCw0NTI1NkwsNDUyNTdMLAorNDUyNThMLDQ1MjU5TCw0NTI2MEwsNDUy NjFMLDQ1MjYyTCw0NTI2M0wsNDUyNjRMLDQ1MjY1TCw0NTI2NkwsNDUyNjdMLAorNDUyNjhMLDQ1 MjY5TCw0NTI3MEwsNDUyNzFMLDQ1MjcyTCw0NTI3M0wsNDUyNzRMLDQ1Mjc1TCw0NTI3NkwsNDUy NzdMLAorNDUyNzhMLDQ1Mjc5TCw0NTI4MEwsNDUyODFMLDQ1MjgyTCw0NTI4M0wsNDUyODRMLDQ1 Mjg1TCw0NTI4NkwsNDUyODdMLAorNDUyODhMLDQ1Mjg5TCw0NTI5MEwsNDUyOTFMLDQ1MjkyTCw0 NTI5M0wsNDUyOTRMLDQ1Mjk1TCw0NTI5NkwsNDUyOTdMLAorNDUyOThMLDQ1Mjk5TCw0NTMwMEws NDUzMDFMLDQ1MzAyTCw0NTMwM0wsNDUzMDRMLDQ1MzA1TCw0NTMwNkwsNDUzMDdMLAorNDUzMDhM LDQ1MzA5TCw0NTMxMEwsNDUzMTFMLDQ1MzEyTCw0NTMxM0wsNDUzMTRMLDQ1MzE1TCw0NTMxNkws NDUzMTdMLAorNDUzMThMLDQ1MzE5TCw0NTMyMEwsNDUzMjFMLDQ1MzIyTCw0NTMyM0wsNDUzMjRM LDQ1MzI1TCw0NTMyNkwsNDUzMjdMLAorNDUzMjhMLDQ1MzI5TCw0NTMzMEwsNDUzMzFMLDQ1MzMy TCw0NTMzM0wsNDUzMzRMLDQ1MzM1TCw0NTMzNkwsNDUzMzdMLAorNDUzMzhMLDQ1MzM5TCw0NTM0 MEwsNDUzNDFMLDQ1MzQyTCw0NTM0M0wsNDUzNDRMLDQ1MzQ1TCw0NTM0NkwsNDUzNDdMLAorNDUz NDhMLDQ1MzQ5TCw0NTM1MEwsNDUzNTFMLDQ1MzUyTCw0NTM1M0wsNDUzNTRMLDQ1MzU1TCw0NTM1 NkwsNDUzNTdMLAorNDUzNThMLDQ1MzU5TCw0NTM2MEwsNDUzNjFMLDQ1MzYyTCw0NTM2M0wsNDUz NjRMLDQ1MzY1TCw0NTM2NkwsNDUzNjdMLAorNDUzNjhMLDQ1MzY5TCw0NTM3MEwsNDUzNzFMLDQ1 MzcyTCw0NTM3M0wsNDUzNzRMLDQ1Mzc1TCw0NTM3NkwsNDUzNzdMLAorNDUzNzhMLDQ1Mzc5TCw0 NTM4MEwsNDUzODFMLDQ1MzgyTCw0NTM4M0wsNDUzODRMLDQ1Mzg1TCw0NTM4NkwsNDUzODdMLAor NDUzODhMLDQ1Mzg5TCw0NTM5MEwsNDUzOTFMLDQ1MzkyTCw0NTM5M0wsNDUzOTRMLDQ1Mzk1TCw0 NTM5NkwsNDUzOTdMLAorNDUzOThMLDQ1Mzk5TCw0NTQwMEwsNDU0MDFMLDQ1NDAyTCw0NTQwM0ws NDU0MDRMLDQ1NDA1TCw0NTQwNkwsNDU0MDdMLAorNDU0MDhMLDQ1NDA5TCw0NTQxMEwsNDU0MTFM LDQ1NDEyTCw0NTQxM0wsNDU0MTRMLDQ1NDE1TCw0NTQxNkwsNDU0MTdMLAorNDU0MThMLDQ1NDE5 TCw0NTQyMEwsNDU0MjFMLDQ1NDIyTCw0NTQyM0wsNDU0MjRMLDQ1NDI1TCw0NTQyNkwsNDU0MjdM LAorNDU0MjhMLDQ1NDI5TCw0NTQzMEwsNDU0MzFMLDQ1NDMyTCw0NTQzM0wsNDU0MzRMLDQ1NDM1 TCw0NTQzNkwsNDU0MzdMLAorNDU0MzhMLDQ1NDM5TCw0NTQ0MEwsNDU0NDFMLDQ1NDQyTCw0NTQ0 M0wsNDU0NDRMLDQ1NDQ1TCw0NTQ0NkwsNDU0NDdMLAorNDU0NDhMLDQ1NDQ5TCw0NTQ1MEwsNDU0 NTFMLDQ1NDUyTCw0NTQ1M0wsNDU0NTRMLDQ1NDU1TCw0NTQ1NkwsNDU0NTdMLAorNDU0NThMLDQ1 NDU5TCw0NTQ2MEwsNDU0NjFMLDQ1NDYyTCw0NTQ2M0wsNDU0NjRMLDQ1NDY1TCw0NTQ2NkwsNDU0 NjdMLAorNDU0NjhMLDQ1NDY5TCw0NTQ3MEwsNDU0NzFMLDQ1NDcyTCw0NTQ3M0wsNDU0NzRMLDQ1 NDc1TCw0NTQ3NkwsNDU0NzdMLAorNDU0NzhMLDQ1NDc5TCw0NTQ4MEwsNDU0ODFMLDQ1NDgyTCw0 NTQ4M0wsNDU0ODRMLDQ1NDg1TCw0NTQ4NkwsNDU0ODdMLAorNDU0ODhMLDQ1NDg5TCw0NTQ5MEws NDU0OTFMLDQ1NDkyTCw0NTQ5M0wsNDU0OTRMLDQ1NDk1TCw0NTQ5NkwsNDU0OTdMLAorNDU0OThM LDQ1NDk5TCw0NTUwMEwsNDU1MDFMLDQ1NTAyTCw0NTUwM0wsNDU1MDRMLDQ1NTA1TCw0NTUwNkws NDU1MDdMLAorNDU1MDhMLDQ1NTA5TCw0NTUxMEwsNDU1MTFMLDQ1NTEyTCw0NTUxM0wsNDU1MTRM LDQ1NTE1TCw0NTUxNkwsNDU1MTdMLAorNDU1MThMLDQ1NTE5TCw0NTUyMEwsNDU1MjFMLDQ1NTIy TCw0NTUyM0wsNDU1MjRMLDQ1NTI1TCw0NTUyNkwsNDU1MjdMLAorNDU1MjhMLDQ1NTI5TCw0NTUz MEwsNDU1MzFMLDQ1NTMyTCw0NTUzM0wsNDU1MzRMLDQ1NTM1TCw0NTUzNkwsNDU1MzdMLAorNDU1 MzhMLDQ1NTM5TCw0NTU0MEwsNDU1NDFMLDQ1NTQyTCw0NTU0M0wsNDU1NDRMLDQ1NTQ1TCw0NTU0 NkwsNDU1NDdMLAorNDU1NDhMLDQ1NTQ5TCw0NTU1MEwsNDU1NTFMLDQ1NTUyTCw0NTU1M0wsNDU1 NTRMLDQ1NTU1TCw0NTU1NkwsNDU1NTdMLAorNDU1NThMLDQ1NTU5TCw0NTU2MEwsNDU1NjFMLDQ1 NTYyTCw0NTU2M0wsNDU1NjRMLDQ1NTY1TCw0NTU2NkwsNDU1NjdMLAorNDU1NjhMLDQ1NTY5TCw0 NTU3MEwsNDU1NzFMLDQ1NTcyTCw0NTU3M0wsNDU1NzRMLDQ1NTc1TCw0NTU3NkwsNDU1NzdMLAor NDU1NzhMLDQ1NTc5TCw0NTU4MEwsNDU1ODFMLDQ1NTgyTCw0NTU4M0wsNDU1ODRMLDQ1NTg1TCw0 NTU4NkwsNDU1ODdMLAorNDU1ODhMLDQ1NTg5TCw0NTU5MEwsNDU1OTFMLDQ1NTkyTCw0NTU5M0ws NDU1OTRMLDQ1NTk1TCw0NTU5NkwsNDU1OTdMLAorNDU1OThMLDQ1NTk5TCw0NTYwMEwsNDU2MDFM LDQ1NjAyTCw0NTYwM0wsNDU2MDRMLDQ1NjA1TCw0NTYwNkwsNDU2MDdMLAorNDU2MDhMLDQ1NjA5 TCw0NTYxMEwsNDU2MTFMLDQ1NjEyTCw0NTYxM0wsNDU2MTRMLDQ1NjE1TCw0NTYxNkwsNDU2MTdM LAorNDU2MThMLDQ1NjE5TCw0NTYyMEwsNDU2MjFMLDQ1NjIyTCw0NTYyM0wsNDU2MjRMLDQ1NjI1 TCw0NTYyNkwsNDU2MjdMLAorNDU2MjhMLDQ1NjI5TCw0NTYzMEwsNDU2MzFMLDQ1NjMyTCw0NTYz M0wsNDU2MzRMLDQ1NjM1TCw0NTYzNkwsNDU2MzdMLAorNDU2MzhMLDQ1NjM5TCw0NTY0MEwsNDU2 NDFMLDQ1NjQyTCw0NTY0M0wsNDU2NDRMLDQ1NjQ1TCw0NTY0NkwsNDU2NDdMLAorNDU2NDhMLDQ1 NjQ5TCw0NTY1MEwsNDU2NTFMLDQ1NjUyTCw0NTY1M0wsNDU2NTRMLDQ1NjU1TCw0NTY1NkwsNDU2 NTdMLAorNDU2NThMLDQ1NjU5TCw0NTY2MEwsNDU2NjFMLDQ1NjYyTCw0NTY2M0wsNDU2NjRMLDQ1 NjY1TCw0NTY2NkwsNDU2NjdMLAorNDU2NjhMLDQ1NjY5TCw0NTY3MEwsNDU2NzFMLDQ1NjcyTCw0 NTY3M0wsNDU2NzRMLDQ1Njc1TCw0NTY3NkwsNDU2NzdMLAorNDU2NzhMLDQ1Njc5TCw0NTY4MEws NDU2ODFMLDQ1NjgyTCw0NTY4M0wsNDU2ODRMLDQ1Njg1TCw0NTY4NkwsNDU2ODdMLAorNDU2ODhM LDQ1Njg5TCw0NTY5MEwsNDU2OTFMLDQ1NjkyTCw0NTY5M0wsNDU2OTRMLDQ1Njk1TCw0NTY5Nkws NDU2OTdMLAorNDU2OThMLDQ1Njk5TCw0NTcwMEwsNDU3MDFMLDQ1NzAyTCw0NTcwM0wsNDU3MDRM LDQ1NzA1TCw0NTcwNkwsNDU3MDdMLAorNDU3MDhMLDQ1NzA5TCw0NTcxMEwsNDU3MTFMLDQ1NzEy TCw0NTcxM0wsNDU3MTRMLDQ1NzE1TCw0NTcxNkwsNDU3MTdMLAorNDU3MThMLDQ1NzE5TCw0NTcy MEwsNDU3MjFMLDQ1NzIyTCw0NTcyM0wsNDU3MjRMLDQ1NzI1TCw0NTcyNkwsNDU3MjdMLAorNDU3 MjhMLDQ1NzI5TCw0NTczMEwsNDU3MzFMLDQ1NzMyTCw0NTczM0wsNDU3MzRMLDQ1NzM1TCw0NTcz NkwsNDU3MzdMLAorNDU3MzhMLDQ1NzM5TCw0NTc0MEwsNDU3NDFMLDQ1NzQyTCw0NTc0M0wsNDU3 NDRMLDQ1NzQ1TCw0NTc0NkwsNDU3NDdMLAorNDU3NDhMLDQ1NzQ5TCw0NTc1MEwsNDU3NTFMLDQ1 NzUyTCw0NTc1M0wsNDU3NTRMLDQ1NzU1TCw0NTc1NkwsNDU3NTdMLAorNDU3NThMLDQ1NzU5TCw0 NTc2MEwsNDU3NjFMLDQ1NzYyTCw0NTc2M0wsNDU3NjRMLDQ1NzY1TCw0NTc2NkwsNDU3NjdMLAor NDU3NjhMLDQ1NzY5TCw0NTc3MEwsNDU3NzFMLDQ1NzcyTCw0NTc3M0wsNDU3NzRMLDQ1Nzc1TCw0 NTc3NkwsNDU3NzdMLAorNDU3NzhMLDQ1Nzc5TCw0NTc4MEwsNDU3ODFMLDQ1NzgyTCw0NTc4M0ws NDU3ODRMLDQ1Nzg1TCw0NTc4NkwsNDU3ODdMLAorNDU3ODhMLDQ1Nzg5TCw0NTc5MEwsNDU3OTFM LDQ1NzkyTCw0NTc5M0wsNDU3OTRMLDQ1Nzk1TCw0NTc5NkwsNDU3OTdMLAorNDU3OThMLDQ1Nzk5 TCw0NTgwMEwsNDU4MDFMLDQ1ODAyTCw0NTgwM0wsNDU4MDRMLDQ1ODA1TCw0NTgwNkwsNDU4MDdM LAorNDU4MDhMLDQ1ODA5TCw0NTgxMEwsNDU4MTFMLDQ1ODEyTCw0NTgxM0wsNDU4MTRMLDQ1ODE1 TCw0NTgxNkwsNDU4MTdMLAorNDU4MThMLDQ1ODE5TCw0NTgyMEwsNDU4MjFMLDQ1ODIyTCw0NTgy M0wsNDU4MjRMLDQ1ODI1TCw0NTgyNkwsNDU4MjdMLAorNDU4MjhMLDQ1ODI5TCw0NTgzMEwsNDU4 MzFMLDQ1ODMyTCw0NTgzM0wsNDU4MzRMLDQ1ODM1TCw0NTgzNkwsNDU4MzdMLAorNDU4MzhMLDQ1 ODM5TCw0NTg0MEwsNDU4NDFMLDQ1ODQyTCw0NTg0M0wsNDU4NDRMLDQ1ODQ1TCw0NTg0NkwsNDU4 NDdMLAorNDU4NDhMLDQ1ODQ5TCw0NTg1MEwsNDU4NTFMLDQ1ODUyTCw0NTg1M0wsNDU4NTRMLDQ1 ODU1TCw0NTg1NkwsNDU4NTdMLAorNDU4NThMLDQ1ODU5TCw0NTg2MEwsNDU4NjFMLDQ1ODYyTCw0 NTg2M0wsNDU4NjRMLDQ1ODY1TCw0NTg2NkwsNDU4NjdMLAorNDU4NjhMLDQ1ODY5TCw0NTg3MEws NDU4NzFMLDQ1ODcyTCw0NTg3M0wsNDU4NzRMLDQ1ODc1TCw0NTg3NkwsNDU4NzdMLAorNDU4NzhM LDQ1ODc5TCw0NTg4MEwsNDU4ODFMLDQ1ODgyTCw0NTg4M0wsNDU4ODRMLDQ1ODg1TCw0NTg4Nkws NDU4ODdMLAorNDU4ODhMLDQ1ODg5TCw0NTg5MEwsNDU4OTFMLDQ1ODkyTCw0NTg5M0wsNDU4OTRM LDQ1ODk1TCw0NTg5NkwsNDU4OTdMLAorNDU4OThMLDQ1ODk5TCw0NTkwMEwsNDU5MDFMLDQ1OTAy TCw0NTkwM0wsNDU5MDRMLDQ1OTA1TCw0NTkwNkwsNDU5MDdMLAorNDU5MDhMLDQ1OTA5TCw0NTkx MEwsNDU5MTFMLDQ1OTEyTCw0NTkxM0wsNDU5MTRMLDQ1OTE1TCw0NTkxNkwsNDU5MTdMLAorNDU5 MThMLDQ1OTE5TCw0NTkyMEwsNDU5MjFMLDQ1OTIyTCw0NTkyM0wsNDU5MjRMLDQ1OTI1TCw0NTky NkwsNDU5MjdMLAorNDU5MjhMLDQ1OTI5TCw0NTkzMEwsNDU5MzFMLDQ1OTMyTCw0NTkzM0wsNDU5 MzRMLDQ1OTM1TCw0NTkzNkwsNDU5MzdMLAorNDU5MzhMLDQ1OTM5TCw0NTk0MEwsNDU5NDFMLDQ1 OTQyTCw0NTk0M0wsNDU5NDRMLDQ1OTQ1TCw0NTk0NkwsNDU5NDdMLAorNDU5NDhMLDQ1OTQ5TCw0 NTk1MEwsNDU5NTFMLDQ1OTUyTCw0NTk1M0wsNDU5NTRMLDQ1OTU1TCw0NTk1NkwsNDU5NTdMLAor NDU5NThMLDQ1OTU5TCw0NTk2MEwsNDU5NjFMLDQ1OTYyTCw0NTk2M0wsNDU5NjRMLDQ1OTY1TCw0 NTk2NkwsNDU5NjdMLAorNDU5NjhMLDQ1OTY5TCw0NTk3MEwsNDU5NzFMLDQ1OTcyTCw0NTk3M0ws NDU5NzRMLDQ1OTc1TCw0NTk3NkwsNDU5NzdMLAorNDU5NzhMLDQ1OTc5TCw0NTk4MEwsNDU5ODFM LDQ1OTgyTCw0NTk4M0wsNDU5ODRMLDQ1OTg1TCw0NTk4NkwsNDU5ODdMLAorNDU5ODhMLDQ1OTg5 TCw0NTk5MEwsNDU5OTFMLDQ1OTkyTCw0NTk5M0wsNDU5OTRMLDQ1OTk1TCw0NTk5NkwsNDU5OTdM LAorNDU5OThMLDQ1OTk5TCw0NjAwMEwsNDYwMDFMLDQ2MDAyTCw0NjAwM0wsNDYwMDRMLDQ2MDA1 TCw0NjAwNkwsNDYwMDdMLAorNDYwMDhMLDQ2MDA5TCw0NjAxMEwsNDYwMTFMLDQ2MDEyTCw0NjAx M0wsNDYwMTRMLDQ2MDE1TCw0NjAxNkwsNDYwMTdMLAorNDYwMThMLDQ2MDE5TCw0NjAyMEwsNDYw MjFMLDQ2MDIyTCw0NjAyM0wsNDYwMjRMLDQ2MDI1TCw0NjAyNkwsNDYwMjdMLAorNDYwMjhMLDQ2 MDI5TCw0NjAzMEwsNDYwMzFMLDQ2MDMyTCw0NjAzM0wsNDYwMzRMLDQ2MDM1TCw0NjAzNkwsNDYw MzdMLAorNDYwMzhMLDQ2MDM5TCw0NjA0MEwsNDYwNDFMLDQ2MDQyTCw0NjA0M0wsNDYwNDRMLDQ2 MDQ1TCw0NjA0NkwsNDYwNDdMLAorNDYwNDhMLDQ2MDQ5TCw0NjA1MEwsNDYwNTFMLDQ2MDUyTCw0 NjA1M0wsNDYwNTRMLDQ2MDU1TCw0NjA1NkwsNDYwNTdMLAorNDYwNThMLDQ2MDU5TCw0NjA2MEws NDYwNjFMLDQ2MDYyTCw0NjA2M0wsNDYwNjRMLDQ2MDY1TCw0NjA2NkwsNDYwNjdMLAorNDYwNjhM LDQ2MDY5TCw0NjA3MEwsNDYwNzFMLDQ2MDcyTCw0NjA3M0wsNDYwNzRMLDQ2MDc1TCw0NjA3Nkws NDYwNzdMLAorNDYwNzhMLDQ2MDc5TCw0NjA4MEwsNDYwODFMLDQ2MDgyTCw0NjA4M0wsNDYwODRM LDQ2MDg1TCw0NjA4NkwsNDYwODdMLAorNDYwODhMLDQ2MDg5TCw0NjA5MEwsNDYwOTFMLDQ2MDky TCw0NjA5M0wsNDYwOTRMLDQ2MDk1TCw0NjA5NkwsNDYwOTdMLAorNDYwOThMLDQ2MDk5TCw0NjEw MEwsNDYxMDFMLDQ2MTAyTCw0NjEwM0wsNDYxMDRMLDQ2MTA1TCw0NjEwNkwsNDYxMDdMLAorNDYx MDhMLDQ2MTA5TCw0NjExMEwsNDYxMTFMLDQ2MTEyTCw0NjExM0wsNDYxMTRMLDQ2MTE1TCw0NjEx NkwsNDYxMTdMLAorNDYxMThMLDQ2MTE5TCw0NjEyMEwsNDYxMjFMLDQ2MTIyTCw0NjEyM0wsNDYx MjRMLDQ2MTI1TCw0NjEyNkwsNDYxMjdMLAorNDYxMjhMLDQ2MTI5TCw0NjEzMEwsNDYxMzFMLDQ2 MTMyTCw0NjEzM0wsNDYxMzRMLDQ2MTM1TCw0NjEzNkwsNDYxMzdMLAorNDYxMzhMLDQ2MTM5TCw0 NjE0MEwsNDYxNDFMLDQ2MTQyTCw0NjE0M0wsNDYxNDRMLDQ2MTQ1TCw0NjE0NkwsNDYxNDdMLAor NDYxNDhMLDQ2MTQ5TCw0NjE1MEwsNDYxNTFMLDQ2MTUyTCw0NjE1M0wsNDYxNTRMLDQ2MTU1TCw0 NjE1NkwsNDYxNTdMLAorNDYxNThMLDQ2MTU5TCw0NjE2MEwsNDYxNjFMLDQ2MTYyTCw0NjE2M0ws NDYxNjRMLDQ2MTY1TCw0NjE2NkwsNDYxNjdMLAorNDYxNjhMLDQ2MTY5TCw0NjE3MEwsNDYxNzFM LDQ2MTcyTCw0NjE3M0wsNDYxNzRMLDQ2MTc1TCw0NjE3NkwsNDYxNzdMLAorNDYxNzhMLDQ2MTc5 TCw0NjE4MEwsNDYxODFMLDQ2MTgyTCw0NjE4M0wsNDYxODRMLDQ2MTg1TCw0NjE4NkwsNDYxODdM LAorNDYxODhMLDQ2MTg5TCw0NjE5MEwsNDYxOTFMLDQ2MTkyTCw0NjE5M0wsNDYxOTRMLDQ2MTk1 TCw0NjE5NkwsNDYxOTdMLAorNDYxOThMLDQ2MTk5TCw0NjIwMEwsNDYyMDFMLDQ2MjAyTCw0NjIw M0wsNDYyMDRMLDQ2MjA1TCw0NjIwNkwsNDYyMDdMLAorNDYyMDhMLDQ2MjA5TCw0NjIxMEwsNDYy MTFMLDQ2MjEyTCw0NjIxM0wsNDYyMTRMLDQ2MjE1TCw0NjIxNkwsNDYyMTdMLAorNDYyMThMLDQ2 MjE5TCw0NjIyMEwsNDYyMjFMLDQ2MjIyTCw0NjIyM0wsNDYyMjRMLDQ2MjI1TCw0NjIyNkwsNDYy MjdMLAorNDYyMjhMLDQ2MjI5TCw0NjIzMEwsNDYyMzFMLDQ2MjMyTCw0NjIzM0wsNDYyMzRMLDQ2 MjM1TCw0NjIzNkwsNDYyMzdMLAorNDYyMzhMLDQ2MjM5TCw0NjI0MEwsNDYyNDFMLDQ2MjQyTCw0 NjI0M0wsNDYyNDRMLDQ2MjQ1TCw0NjI0NkwsNDYyNDdMLAorNDYyNDhMLDQ2MjQ5TCw0NjI1MEws NDYyNTFMLDQ2MjUyTCw0NjI1M0wsNDYyNTRMLDQ2MjU1TCw0NjI1NkwsNDYyNTdMLAorNDYyNThM LDQ2MjU5TCw0NjI2MEwsNDYyNjFMLDQ2MjYyTCw0NjI2M0wsNDYyNjRMLDQ2MjY1TCw0NjI2Nkws NDYyNjdMLAorNDYyNjhMLDQ2MjY5TCw0NjI3MEwsNDYyNzFMLDQ2MjcyTCw0NjI3M0wsNDYyNzRM LDQ2Mjc1TCw0NjI3NkwsNDYyNzdMLAorNDYyNzhMLDQ2Mjc5TCw0NjI4MEwsNDYyODFMLDQ2Mjgy TCw0NjI4M0wsNDYyODRMLDQ2Mjg1TCw0NjI4NkwsNDYyODdMLAorNDYyODhMLDQ2Mjg5TCw0NjI5 MEwsNDYyOTFMLDQ2MjkyTCw0NjI5M0wsNDYyOTRMLDQ2Mjk1TCw0NjI5NkwsNDYyOTdMLAorNDYy OThMLDQ2Mjk5TCw0NjMwMEwsNDYzMDFMLDQ2MzAyTCw0NjMwM0wsNDYzMDRMLDQ2MzA1TCw0NjMw NkwsNDYzMDdMLAorNDYzMDhMLDQ2MzA5TCw0NjMxMEwsNDYzMTFMLDQ2MzEyTCw0NjMxM0wsNDYz MTRMLDQ2MzE1TCw0NjMxNkwsNDYzMTdMLAorNDYzMThMLDQ2MzE5TCw0NjMyMEwsNDYzMjFMLDQ2 MzIyTCw0NjMyM0wsNDYzMjRMLDQ2MzI1TCw0NjMyNkwsNDYzMjdMLAorNDYzMjhMLDQ2MzI5TCw0 NjMzMEwsNDYzMzFMLDQ2MzMyTCw0NjMzM0wsNDYzMzRMLDQ2MzM1TCw0NjMzNkwsNDYzMzdMLAor NDYzMzhMLDQ2MzM5TCw0NjM0MEwsNDYzNDFMLDQ2MzQyTCw0NjM0M0wsNDYzNDRMLDQ2MzQ1TCw0 NjM0NkwsNDYzNDdMLAorNDYzNDhMLDQ2MzQ5TCw0NjM1MEwsNDYzNTFMLDQ2MzUyTCw0NjM1M0ws NDYzNTRMLDQ2MzU1TCw0NjM1NkwsNDYzNTdMLAorNDYzNThMLDQ2MzU5TCw0NjM2MEwsNDYzNjFM LDQ2MzYyTCw0NjM2M0wsNDYzNjRMLDQ2MzY1TCw0NjM2NkwsNDYzNjdMLAorNDYzNjhMLDQ2MzY5 TCw0NjM3MEwsNDYzNzFMLDQ2MzcyTCw0NjM3M0wsNDYzNzRMLDQ2Mzc1TCw0NjM3NkwsNDYzNzdM LAorNDYzNzhMLDQ2Mzc5TCw0NjM4MEwsNDYzODFMLDQ2MzgyTCw0NjM4M0wsNDYzODRMLDQ2Mzg1 TCw0NjM4NkwsNDYzODdMLAorNDYzODhMLDQ2Mzg5TCw0NjM5MEwsNDYzOTFMLDQ2MzkyTCw0NjM5 M0wsNDYzOTRMLDQ2Mzk1TCw0NjM5NkwsNDYzOTdMLAorNDYzOThMLDQ2Mzk5TCw0NjQwMEwsNDY0 MDFMLDQ2NDAyTCw0NjQwM0wsNDY0MDRMLDQ2NDA1TCw0NjQwNkwsNDY0MDdMLAorNDY0MDhMLDQ2 NDA5TCw0NjQxMEwsNDY0MTFMLDQ2NDEyTCw0NjQxM0wsNDY0MTRMLDQ2NDE1TCw0NjQxNkwsNDY0 MTdMLAorNDY0MThMLDQ2NDE5TCw0NjQyMEwsNDY0MjFMLDQ2NDIyTCw0NjQyM0wsNDY0MjRMLDQ2 NDI1TCw0NjQyNkwsNDY0MjdMLAorNDY0MjhMLDQ2NDI5TCw0NjQzMEwsNDY0MzFMLDQ2NDMyTCw0 NjQzM0wsNDY0MzRMLDQ2NDM1TCw0NjQzNkwsNDY0MzdMLAorNDY0MzhMLDQ2NDM5TCw0NjQ0MEws NDY0NDFMLDQ2NDQyTCw0NjQ0M0wsNDY0NDRMLDQ2NDQ1TCw0NjQ0NkwsNDY0NDdMLAorNDY0NDhM LDQ2NDQ5TCw0NjQ1MEwsNDY0NTFMLDQ2NDUyTCw0NjQ1M0wsNDY0NTRMLDQ2NDU1TCw0NjQ1Nkws NDY0NTdMLAorNDY0NThMLDQ2NDU5TCw0NjQ2MEwsNDY0NjFMLDQ2NDYyTCw0NjQ2M0wsNDY0NjRM LDQ2NDY1TCw0NjQ2NkwsNDY0NjdMLAorNDY0NjhMLDQ2NDY5TCw0NjQ3MEwsNDY0NzFMLDQ2NDcy TCw0NjQ3M0wsNDY0NzRMLDQ2NDc1TCw0NjQ3NkwsNDY0NzdMLAorNDY0NzhMLDQ2NDc5TCw0NjQ4 MEwsNDY0ODFMLDQ2NDgyTCw0NjQ4M0wsNDY0ODRMLDQ2NDg1TCw0NjQ4NkwsNDY0ODdMLAorNDY0 ODhMLDQ2NDg5TCw0NjQ5MEwsNDY0OTFMLDQ2NDkyTCw0NjQ5M0wsNDY0OTRMLDQ2NDk1TCw0NjQ5 NkwsNDY0OTdMLAorNDY0OThMLDQ2NDk5TCw0NjUwMEwsNDY1MDFMLDQ2NTAyTCw0NjUwM0wsNDY1 MDRMLDQ2NTA1TCw0NjUwNkwsNDY1MDdMLAorNDY1MDhMLDQ2NTA5TCw0NjUxMEwsNDY1MTFMLDQ2 NTEyTCw0NjUxM0wsNDY1MTRMLDQ2NTE1TCw0NjUxNkwsNDY1MTdMLAorNDY1MThMLDQ2NTE5TCw0 NjUyMEwsNDY1MjFMLDQ2NTIyTCw0NjUyM0wsNDY1MjRMLDQ2NTI1TCw0NjUyNkwsNDY1MjdMLAor NDY1MjhMLDQ2NTI5TCw0NjUzMEwsNDY1MzFMLDQ2NTMyTCw0NjUzM0wsNDY1MzRMLDQ2NTM1TCw0 NjUzNkwsNDY1MzdMLAorNDY1MzhMLDQ2NTM5TCw0NjU0MEwsNDY1NDFMLDQ2NTQyTCw0NjU0M0ws NDY1NDRMLDQ2NTQ1TCw0NjU0NkwsNDY1NDdMLAorNDY1NDhMLDQ2NTQ5TCw0NjU1MEwsNDY1NTFM LDQ2NTUyTCw0NjU1M0wsNDY1NTRMLDQ2NTU1TCw0NjU1NkwsNDY1NTdMLAorNDY1NThMLDQ2NTU5 TCw0NjU2MEwsNDY1NjFMLDQ2NTYyTCw0NjU2M0wsNDY1NjRMLDQ2NTY1TCw0NjU2NkwsNDY1NjdM LAorNDY1NjhMLDQ2NTY5TCw0NjU3MEwsNDY1NzFMLDQ2NTcyTCw0NjU3M0wsNDY1NzRMLDQ2NTc1 TCw0NjU3NkwsNDY1NzdMLAorNDY1NzhMLDQ2NTc5TCw0NjU4MEwsNDY1ODFMLDQ2NTgyTCw0NjU4 M0wsNDY1ODRMLDQ2NTg1TCw0NjU4NkwsNDY1ODdMLAorNDY1ODhMLDQ2NTg5TCw0NjU5MEwsNDY1 OTFMLDQ2NTkyTCw0NjU5M0wsNDY1OTRMLDQ2NTk1TCw0NjU5NkwsNDY1OTdMLAorNDY1OThMLDQ2 NTk5TCw0NjYwMEwsNDY2MDFMLDQ2NjAyTCw0NjYwM0wsNDY2MDRMLDQ2NjA1TCw0NjYwNkwsNDY2 MDdMLAorNDY2MDhMLDQ2NjA5TCw0NjYxMEwsNDY2MTFMLDQ2NjEyTCw0NjYxM0wsNDY2MTRMLDQ2 NjE1TCw0NjYxNkwsNDY2MTdMLAorNDY2MThMLDQ2NjE5TCw0NjYyMEwsNDY2MjFMLDQ2NjIyTCw0 NjYyM0wsNDY2MjRMLDQ2NjI1TCw0NjYyNkwsNDY2MjdMLAorNDY2MjhMLDQ2NjI5TCw0NjYzMEws NDY2MzFMLDQ2NjMyTCw0NjYzM0wsNDY2MzRMLDQ2NjM1TCw0NjYzNkwsNDY2MzdMLAorNDY2MzhM LDQ2NjM5TCw0NjY0MEwsNDY2NDFMLDQ2NjQyTCw0NjY0M0wsNDY2NDRMLDQ2NjQ1TCw0NjY0Nkws NDY2NDdMLAorNDY2NDhMLDQ2NjQ5TCw0NjY1MEwsNDY2NTFMLDQ2NjUyTCw0NjY1M0wsNDY2NTRM LDQ2NjU1TCw0NjY1NkwsNDY2NTdMLAorNDY2NThMLDQ2NjU5TCw0NjY2MEwsNDY2NjFMLDQ2NjYy TCw0NjY2M0wsNDY2NjRMLDQ2NjY1TCw0NjY2NkwsNDY2NjdMLAorNDY2NjhMLDQ2NjY5TCw0NjY3 MEwsNDY2NzFMLDQ2NjcyTCw0NjY3M0wsNDY2NzRMLDQ2Njc1TCw0NjY3NkwsNDY2NzdMLAorNDY2 NzhMLDQ2Njc5TCw0NjY4MEwsNDY2ODFMLDQ2NjgyTCw0NjY4M0wsNDY2ODRMLDQ2Njg1TCw0NjY4 NkwsNDY2ODdMLAorNDY2ODhMLDQ2Njg5TCw0NjY5MEwsNDY2OTFMLDQ2NjkyTCw0NjY5M0wsNDY2 OTRMLDQ2Njk1TCw0NjY5NkwsNDY2OTdMLAorNDY2OThMLDQ2Njk5TCw0NjcwMEwsNDY3MDFMLDQ2 NzAyTCw0NjcwM0wsNDY3MDRMLDQ2NzA1TCw0NjcwNkwsNDY3MDdMLAorNDY3MDhMLDQ2NzA5TCw0 NjcxMEwsNDY3MTFMLDQ2NzEyTCw0NjcxM0wsNDY3MTRMLDQ2NzE1TCw0NjcxNkwsNDY3MTdMLAor NDY3MThMLDQ2NzE5TCw0NjcyMEwsNDY3MjFMLDQ2NzIyTCw0NjcyM0wsNDY3MjRMLDQ2NzI1TCw0 NjcyNkwsNDY3MjdMLAorNDY3MjhMLDQ2NzI5TCw0NjczMEwsNDY3MzFMLDQ2NzMyTCw0NjczM0ws NDY3MzRMLDQ2NzM1TCw0NjczNkwsNDY3MzdMLAorNDY3MzhMLDQ2NzM5TCw0Njc0MEwsNDY3NDFM LDQ2NzQyTCw0Njc0M0wsNDY3NDRMLDQ2NzQ1TCw0Njc0NkwsNDY3NDdMLAorNDY3NDhMLDQ2NzQ5 TCw0Njc1MEwsNDY3NTFMLDQ2NzUyTCw0Njc1M0wsNDY3NTRMLDQ2NzU1TCw0Njc1NkwsNDY3NTdM LAorNDY3NThMLDQ2NzU5TCw0Njc2MEwsNDY3NjFMLDQ2NzYyTCw0Njc2M0wsNDY3NjRMLDQ2NzY1 TCw0Njc2NkwsNDY3NjdMLAorNDY3NjhMLDQ2NzY5TCw0Njc3MEwsNDY3NzFMLDQ2NzcyTCw0Njc3 M0wsNDY3NzRMLDQ2Nzc1TCw0Njc3NkwsNDY3NzdMLAorNDY3NzhMLDQ2Nzc5TCw0Njc4MEwsNDY3 ODFMLDQ2NzgyTCw0Njc4M0wsNDY3ODRMLDQ2Nzg1TCw0Njc4NkwsNDY3ODdMLAorNDY3ODhMLDQ2 Nzg5TCw0Njc5MEwsNDY3OTFMLDQ2NzkyTCw0Njc5M0wsNDY3OTRMLDQ2Nzk1TCw0Njc5NkwsNDY3 OTdMLAorNDY3OThMLDQ2Nzk5TCw0NjgwMEwsNDY4MDFMLDQ2ODAyTCw0NjgwM0wsNDY4MDRMLDQ2 ODA1TCw0NjgwNkwsNDY4MDdMLAorNDY4MDhMLDQ2ODA5TCw0NjgxMEwsNDY4MTFMLDQ2ODEyTCw0 NjgxM0wsNDY4MTRMLDQ2ODE1TCw0NjgxNkwsNDY4MTdMLAorNDY4MThMLDQ2ODE5TCw0NjgyMEws NDY4MjFMLDQ2ODIyTCw0NjgyM0wsNDY4MjRMLDQ2ODI1TCw0NjgyNkwsNDY4MjdMLAorNDY4MjhM LDQ2ODI5TCw0NjgzMEwsNDY4MzFMLDQ2ODMyTCw0NjgzM0wsNDY4MzRMLDQ2ODM1TCw0NjgzNkws NDY4MzdMLAorNDY4MzhMLDQ2ODM5TCw0Njg0MEwsNDY4NDFMLDQ2ODQyTCw0Njg0M0wsNDY4NDRM LDQ2ODQ1TCw0Njg0NkwsNDY4NDdMLAorNDY4NDhMLDQ2ODQ5TCw0Njg1MEwsNDY4NTFMLDQ2ODUy TCw0Njg1M0wsNDY4NTRMLDQ2ODU1TCw0Njg1NkwsNDY4NTdMLAorNDY4NThMLDQ2ODU5TCw0Njg2 MEwsNDY4NjFMLDQ2ODYyTCw0Njg2M0wsNDY4NjRMLDQ2ODY1TCw0Njg2NkwsNDY4NjdMLAorNDY4 NjhMLDQ2ODY5TCw0Njg3MEwsNDY4NzFMLDQ2ODcyTCw0Njg3M0wsNDY4NzRMLDQ2ODc1TCw0Njg3 NkwsNDY4NzdMLAorNDY4NzhMLDQ2ODc5TCw0Njg4MEwsNDY4ODFMLDQ2ODgyTCw0Njg4M0wsNDY4 ODRMLDQ2ODg1TCw0Njg4NkwsNDY4ODdMLAorNDY4ODhMLDQ2ODg5TCw0Njg5MEwsNDY4OTFMLDQ2 ODkyTCw0Njg5M0wsNDY4OTRMLDQ2ODk1TCw0Njg5NkwsNDY4OTdMLAorNDY4OThMLDQ2ODk5TCw0 NjkwMEwsNDY5MDFMLDQ2OTAyTCw0NjkwM0wsNDY5MDRMLDQ2OTA1TCw0NjkwNkwsNDY5MDdMLAor NDY5MDhMLDQ2OTA5TCw0NjkxMEwsNDY5MTFMLDQ2OTEyTCw0NjkxM0wsNDY5MTRMLDQ2OTE1TCw0 NjkxNkwsNDY5MTdMLAorNDY5MThMLDQ2OTE5TCw0NjkyMEwsNDY5MjFMLDQ2OTIyTCw0NjkyM0ws NDY5MjRMLDQ2OTI1TCw0NjkyNkwsNDY5MjdMLAorNDY5MjhMLDQ2OTI5TCw0NjkzMEwsNDY5MzFM LDQ2OTMyTCw0NjkzM0wsNDY5MzRMLDQ2OTM1TCw0NjkzNkwsNDY5MzdMLAorNDY5MzhMLDQ2OTM5 TCw0Njk0MEwsNDY5NDFMLDQ2OTQyTCw0Njk0M0wsNDY5NDRMLDQ2OTQ1TCw0Njk0NkwsNDY5NDdM LAorNDY5NDhMLDQ2OTQ5TCw0Njk1MEwsNDY5NTFMLDQ2OTUyTCw0Njk1M0wsNDY5NTRMLDQ2OTU1 TCw0Njk1NkwsNDY5NTdMLAorNDY5NThMLDQ2OTU5TCw0Njk2MEwsNDY5NjFMLDQ2OTYyTCw0Njk2 M0wsNDY5NjRMLDQ2OTY1TCw0Njk2NkwsNDY5NjdMLAorNDY5NjhMLDQ2OTY5TCw0Njk3MEwsNDY5 NzFMLDQ2OTcyTCw0Njk3M0wsNDY5NzRMLDQ2OTc1TCw0Njk3NkwsNDY5NzdMLAorNDY5NzhMLDQ2 OTc5TCw0Njk4MEwsNDY5ODFMLDQ2OTgyTCw0Njk4M0wsNDY5ODRMLDQ2OTg1TCw0Njk4NkwsNDY5 ODdMLAorNDY5ODhMLDQ2OTg5TCw0Njk5MEwsNDY5OTFMLDQ2OTkyTCw0Njk5M0wsNDY5OTRMLDQ2 OTk1TCw0Njk5NkwsNDY5OTdMLAorNDY5OThMLDQ2OTk5TCw0NzAwMEwsNDcwMDFMLDQ3MDAyTCw0 NzAwM0wsNDcwMDRMLDQ3MDA1TCw0NzAwNkwsNDcwMDdMLAorNDcwMDhMLDQ3MDA5TCw0NzAxMEws NDcwMTFMLDQ3MDEyTCw0NzAxM0wsNDcwMTRMLDQ3MDE1TCw0NzAxNkwsNDcwMTdMLAorNDcwMThM LDQ3MDE5TCw0NzAyMEwsNDcwMjFMLDQ3MDIyTCw0NzAyM0wsNDcwMjRMLDQ3MDI1TCw0NzAyNkws NDcwMjdMLAorNDcwMjhMLDQ3MDI5TCw0NzAzMEwsNDcwMzFMLDQ3MDMyTCw0NzAzM0wsNDcwMzRM LDQ3MDM1TCw0NzAzNkwsNDcwMzdMLAorNDcwMzhMLDQ3MDM5TCw0NzA0MEwsNDcwNDFMLDQ3MDQy TCw0NzA0M0wsNDcwNDRMLDQ3MDQ1TCw0NzA0NkwsNDcwNDdMLAorNDcwNDhMLDQ3MDQ5TCw0NzA1 MEwsNDcwNTFMLDQ3MDUyTCw0NzA1M0wsNDcwNTRMLDQ3MDU1TCw0NzA1NkwsNDcwNTdMLAorNDcw NThMLDQ3MDU5TCw0NzA2MEwsNDcwNjFMLDQ3MDYyTCw0NzA2M0wsNDcwNjRMLDQ3MDY1TCw0NzA2 NkwsNDcwNjdMLAorNDcwNjhMLDQ3MDY5TCw0NzA3MEwsNDcwNzFMLDQ3MDcyTCw0NzA3M0wsNDcw NzRMLDQ3MDc1TCw0NzA3NkwsNDcwNzdMLAorNDcwNzhMLDQ3MDc5TCw0NzA4MEwsNDcwODFMLDQ3 MDgyTCw0NzA4M0wsNDcwODRMLDQ3MDg1TCw0NzA4NkwsNDcwODdMLAorNDcwODhMLDQ3MDg5TCw0 NzA5MEwsNDcwOTFMLDQ3MDkyTCw0NzA5M0wsNDcwOTRMLDQ3MDk1TCw0NzA5NkwsNDcwOTdMLAor NDcwOThMLDQ3MDk5TCw0NzEwMEwsNDcxMDFMLDQ3MTAyTCw0NzEwM0wsNDcxMDRMLDQ3MTA1TCw0 NzEwNkwsNDcxMDdMLAorNDcxMDhMLDQ3MTA5TCw0NzExMEwsNDcxMTFMLDQ3MTEyTCw0NzExM0ws NDcxMTRMLDQ3MTE1TCw0NzExNkwsNDcxMTdMLAorNDcxMThMLDQ3MTE5TCw0NzEyMEwsNDcxMjFM LDQ3MTIyTCw0NzEyM0wsNDcxMjRMLDQ3MTI1TCw0NzEyNkwsNDcxMjdMLAorNDcxMjhMLDQ3MTI5 TCw0NzEzMEwsNDcxMzFMLDQ3MTMyTCw0NzEzM0wsNDcxMzRMLDQ3MTM1TCw0NzEzNkwsNDcxMzdM LAorNDcxMzhMLDQ3MTM5TCw0NzE0MEwsNDcxNDFMLDQ3MTQyTCw0NzE0M0wsNDcxNDRMLDQ3MTQ1 TCw0NzE0NkwsNDcxNDdMLAorNDcxNDhMLDQ3MTQ5TCw0NzE1MEwsNDcxNTFMLDQ3MTUyTCw0NzE1 M0wsNDcxNTRMLDQ3MTU1TCw0NzE1NkwsNDcxNTdMLAorNDcxNThMLDQ3MTU5TCw0NzE2MEwsNDcx NjFMLDQ3MTYyTCw0NzE2M0wsNDcxNjRMLDQ3MTY1TCw0NzE2NkwsNDcxNjdMLAorNDcxNjhMLDQ3 MTY5TCw0NzE3MEwsNDcxNzFMLDQ3MTcyTCw0NzE3M0wsNDcxNzRMLDQ3MTc1TCw0NzE3NkwsNDcx NzdMLAorNDcxNzhMLDQ3MTc5TCw0NzE4MEwsNDcxODFMLDQ3MTgyTCw0NzE4M0wsNDcxODRMLDQ3 MTg1TCw0NzE4NkwsNDcxODdMLAorNDcxODhMLDQ3MTg5TCw0NzE5MEwsNDcxOTFMLDQ3MTkyTCw0 NzE5M0wsNDcxOTRMLDQ3MTk1TCw0NzE5NkwsNDcxOTdMLAorNDcxOThMLDQ3MTk5TCw0NzIwMEws NDcyMDFMLDQ3MjAyTCw0NzIwM0wsNDcyMDRMLDQ3MjA1TCw0NzIwNkwsNDcyMDdMLAorNDcyMDhM LDQ3MjA5TCw0NzIxMEwsNDcyMTFMLDQ3MjEyTCw0NzIxM0wsNDcyMTRMLDQ3MjE1TCw0NzIxNkws NDcyMTdMLAorNDcyMThMLDQ3MjE5TCw0NzIyMEwsNDcyMjFMLDQ3MjIyTCw0NzIyM0wsNDcyMjRM LDQ3MjI1TCw0NzIyNkwsNDcyMjdMLAorNDcyMjhMLDQ3MjI5TCw0NzIzMEwsNDcyMzFMLDQ3MjMy TCw0NzIzM0wsNDcyMzRMLDQ3MjM1TCw0NzIzNkwsNDcyMzdMLAorNDcyMzhMLDQ3MjM5TCw0NzI0 MEwsNDcyNDFMLDQ3MjQyTCw0NzI0M0wsNDcyNDRMLDQ3MjQ1TCw0NzI0NkwsNDcyNDdMLAorNDcy NDhMLDQ3MjQ5TCw0NzI1MEwsNDcyNTFMLDQ3MjUyTCw0NzI1M0wsNDcyNTRMLDQ3MjU1TCw0NzI1 NkwsNDcyNTdMLAorNDcyNThMLDQ3MjU5TCw0NzI2MEwsNDcyNjFMLDQ3MjYyTCw0NzI2M0wsNDcy NjRMLDQ3MjY1TCw0NzI2NkwsNDcyNjdMLAorNDcyNjhMLDQ3MjY5TCw0NzI3MEwsNDcyNzFMLDQ3 MjcyTCw0NzI3M0wsNDcyNzRMLDQ3Mjc1TCw0NzI3NkwsNDcyNzdMLAorNDcyNzhMLDQ3Mjc5TCw0 NzI4MEwsNDcyODFMLDQ3MjgyTCw0NzI4M0wsNDcyODRMLDQ3Mjg1TCw0NzI4NkwsNDcyODdMLAor NDcyODhMLDQ3Mjg5TCw0NzI5MEwsNDcyOTFMLDQ3MjkyTCw0NzI5M0wsNDcyOTRMLDQ3Mjk1TCw0 NzI5NkwsNDcyOTdMLAorNDcyOThMLDQ3Mjk5TCw0NzMwMEwsNDczMDFMLDQ3MzAyTCw0NzMwM0ws NDczMDRMLDQ3MzA1TCw0NzMwNkwsNDczMDdMLAorNDczMDhMLDQ3MzA5TCw0NzMxMEwsNDczMTFM LDQ3MzEyTCw0NzMxM0wsNDczMTRMLDQ3MzE1TCw0NzMxNkwsNDczMTdMLAorNDczMThMLDQ3MzE5 TCw0NzMyMEwsNDczMjFMLDQ3MzIyTCw0NzMyM0wsNDczMjRMLDQ3MzI1TCw0NzMyNkwsNDczMjdM LAorNDczMjhMLDQ3MzI5TCw0NzMzMEwsNDczMzFMLDQ3MzMyTCw0NzMzM0wsNDczMzRMLDQ3MzM1 TCw0NzMzNkwsNDczMzdMLAorNDczMzhMLDQ3MzM5TCw0NzM0MEwsNDczNDFMLDQ3MzQyTCw0NzM0 M0wsNDczNDRMLDQ3MzQ1TCw0NzM0NkwsNDczNDdMLAorNDczNDhMLDQ3MzQ5TCw0NzM1MEwsNDcz NTFMLDQ3MzUyTCw0NzM1M0wsNDczNTRMLDQ3MzU1TCw0NzM1NkwsNDczNTdMLAorNDczNThMLDQ3 MzU5TCw0NzM2MEwsNDczNjFMLDQ3MzYyTCw0NzM2M0wsNDczNjRMLDQ3MzY1TCw0NzM2NkwsNDcz NjdMLAorNDczNjhMLDQ3MzY5TCw0NzM3MEwsNDczNzFMLDQ3MzcyTCw0NzM3M0wsNDczNzRMLDQ3 Mzc1TCw0NzM3NkwsNDczNzdMLAorNDczNzhMLDQ3Mzc5TCw0NzM4MEwsNDczODFMLDQ3MzgyTCw0 NzM4M0wsNDczODRMLDQ3Mzg1TCw0NzM4NkwsNDczODdMLAorNDczODhMLDQ3Mzg5TCw0NzM5MEws NDczOTFMLDQ3MzkyTCw0NzM5M0wsNDczOTRMLDQ3Mzk1TCw0NzM5NkwsNDczOTdMLAorNDczOThM LDQ3Mzk5TCw0NzQwMEwsNDc0MDFMLDQ3NDAyTCw0NzQwM0wsNDc0MDRMLDQ3NDA1TCw0NzQwNkws NDc0MDdMLAorNDc0MDhMLDQ3NDA5TCw0NzQxMEwsNDc0MTFMLDQ3NDEyTCw0NzQxM0wsNDc0MTRM LDQ3NDE1TCw0NzQxNkwsNDc0MTdMLAorNDc0MThMLDQ3NDE5TCw0NzQyMEwsNDc0MjFMLDQ3NDIy TCw0NzQyM0wsNDc0MjRMLDQ3NDI1TCw0NzQyNkwsNDc0MjdMLAorNDc0MjhMLDQ3NDI5TCw0NzQz MEwsNDc0MzFMLDQ3NDMyTCw0NzQzM0wsNDc0MzRMLDQ3NDM1TCw0NzQzNkwsNDc0MzdMLAorNDc0 MzhMLDQ3NDM5TCw0NzQ0MEwsNDc0NDFMLDQ3NDQyTCw0NzQ0M0wsNDc0NDRMLDQ3NDQ1TCw0NzQ0 NkwsNDc0NDdMLAorNDc0NDhMLDQ3NDQ5TCw0NzQ1MEwsNDc0NTFMLDQ3NDUyTCw0NzQ1M0wsNDc0 NTRMLDQ3NDU1TCw0NzQ1NkwsNDc0NTdMLAorNDc0NThMLDQ3NDU5TCw0NzQ2MEwsNDc0NjFMLDQ3 NDYyTCw0NzQ2M0wsNDc0NjRMLDQ3NDY1TCw0NzQ2NkwsNDc0NjdMLAorNDc0NjhMLDQ3NDY5TCw0 NzQ3MEwsNDc0NzFMLDQ3NDcyTCw0NzQ3M0wsNDc0NzRMLDQ3NDc1TCw0NzQ3NkwsNDc0NzdMLAor NDc0NzhMLDQ3NDc5TCw0NzQ4MEwsNDc0ODFMLDQ3NDgyTCw0NzQ4M0wsNDc0ODRMLDQ3NDg1TCw0 NzQ4NkwsNDc0ODdMLAorNDc0ODhMLDQ3NDg5TCw0NzQ5MEwsNDc0OTFMLDQ3NDkyTCw0NzQ5M0ws NDc0OTRMLDQ3NDk1TCw0NzQ5NkwsNDc0OTdMLAorNDc0OThMLDQ3NDk5TCw0NzUwMEwsNDc1MDFM LDQ3NTAyTCw0NzUwM0wsNDc1MDRMLDQ3NTA1TCw0NzUwNkwsNDc1MDdMLAorNDc1MDhMLDQ3NTA5 TCw0NzUxMEwsNDc1MTFMLDQ3NTEyTCw0NzUxM0wsNDc1MTRMLDQ3NTE1TCw0NzUxNkwsNDc1MTdM LAorNDc1MThMLDQ3NTE5TCw0NzUyMEwsNDc1MjFMLDQ3NTIyTCw0NzUyM0wsNDc1MjRMLDQ3NTI1 TCw0NzUyNkwsNDc1MjdMLAorNDc1MjhMLDQ3NTI5TCw0NzUzMEwsNDc1MzFMLDQ3NTMyTCw0NzUz M0wsNDc1MzRMLDQ3NTM1TCw0NzUzNkwsNDc1MzdMLAorNDc1MzhMLDQ3NTM5TCw0NzU0MEwsNDc1 NDFMLDQ3NTQyTCw0NzU0M0wsNDc1NDRMLDQ3NTQ1TCw0NzU0NkwsNDc1NDdMLAorNDc1NDhMLDQ3 NTQ5TCw0NzU1MEwsNDc1NTFMLDQ3NTUyTCw0NzU1M0wsNDc1NTRMLDQ3NTU1TCw0NzU1NkwsNDc1 NTdMLAorNDc1NThMLDQ3NTU5TCw0NzU2MEwsNDc1NjFMLDQ3NTYyTCw0NzU2M0wsNDc1NjRMLDQ3 NTY1TCw0NzU2NkwsNDc1NjdMLAorNDc1NjhMLDQ3NTY5TCw0NzU3MEwsNDc1NzFMLDQ3NTcyTCw0 NzU3M0wsNDc1NzRMLDQ3NTc1TCw0NzU3NkwsNDc1NzdMLAorNDc1NzhMLDQ3NTc5TCw0NzU4MEws NDc1ODFMLDQ3NTgyTCw0NzU4M0wsNDc1ODRMLDQ3NTg1TCw0NzU4NkwsNDc1ODdMLAorNDc1ODhM LDQ3NTg5TCw0NzU5MEwsNDc1OTFMLDQ3NTkyTCw0NzU5M0wsNDc1OTRMLDQ3NTk1TCw0NzU5Nkws NDc1OTdMLAorNDc1OThMLDQ3NTk5TCw0NzYwMEwsNDc2MDFMLDQ3NjAyTCw0NzYwM0wsNDc2MDRM LDQ3NjA1TCw0NzYwNkwsNDc2MDdMLAorNDc2MDhMLDQ3NjA5TCw0NzYxMEwsNDc2MTFMLDQ3NjEy TCw0NzYxM0wsNDc2MTRMLDQ3NjE1TCw0NzYxNkwsNDc2MTdMLAorNDc2MThMLDQ3NjE5TCw0NzYy MEwsNDc2MjFMLDQ3NjIyTCw0NzYyM0wsNDc2MjRMLDQ3NjI1TCw0NzYyNkwsNDc2MjdMLAorNDc2 MjhMLDQ3NjI5TCw0NzYzMEwsNDc2MzFMLDQ3NjMyTCw0NzYzM0wsNDc2MzRMLDQ3NjM1TCw0NzYz NkwsNDc2MzdMLAorNDc2MzhMLDQ3NjM5TCw0NzY0MEwsNDc2NDFMLDQ3NjQyTCw0NzY0M0wsNDc2 NDRMLDQ3NjQ1TCw0NzY0NkwsNDc2NDdMLAorNDc2NDhMLDQ3NjQ5TCw0NzY1MEwsNDc2NTFMLDQ3 NjUyTCw0NzY1M0wsNDc2NTRMLDQ3NjU1TCw0NzY1NkwsNDc2NTdMLAorNDc2NThMLDQ3NjU5TCw0 NzY2MEwsNDc2NjFMLDQ3NjYyTCw0NzY2M0wsNDc2NjRMLDQ3NjY1TCw0NzY2NkwsNDc2NjdMLAor NDc2NjhMLDQ3NjY5TCw0NzY3MEwsNDc2NzFMLDQ3NjcyTCw0NzY3M0wsNDc2NzRMLDQ3Njc1TCw0 NzY3NkwsNDc2NzdMLAorNDc2NzhMLDQ3Njc5TCw0NzY4MEwsNDc2ODFMLDQ3NjgyTCw0NzY4M0ws NDc2ODRMLDQ3Njg1TCw0NzY4NkwsNDc2ODdMLAorNDc2ODhMLDQ3Njg5TCw0NzY5MEwsNDc2OTFM LDQ3NjkyTCw0NzY5M0wsNDc2OTRMLDQ3Njk1TCw0NzY5NkwsNDc2OTdMLAorNDc2OThMLDQ3Njk5 TCw0NzcwMEwsNDc3MDFMLDQ3NzAyTCw0NzcwM0wsNDc3MDRMLDQ3NzA1TCw0NzcwNkwsNDc3MDdM LAorNDc3MDhMLDQ3NzA5TCw0NzcxMEwsNDc3MTFMLDQ3NzEyTCw0NzcxM0wsNDc3MTRMLDQ3NzE1 TCw0NzcxNkwsNDc3MTdMLAorNDc3MThMLDQ3NzE5TCw0NzcyMEwsNDc3MjFMLDQ3NzIyTCw0Nzcy M0wsNDc3MjRMLDQ3NzI1TCw0NzcyNkwsNDc3MjdMLAorNDc3MjhMLDQ3NzI5TCw0NzczMEwsNDc3 MzFMLDQ3NzMyTCw0NzczM0wsNDc3MzRMLDQ3NzM1TCw0NzczNkwsNDc3MzdMLAorNDc3MzhMLDQ3 NzM5TCw0Nzc0MEwsNDc3NDFMLDQ3NzQyTCw0Nzc0M0wsNDc3NDRMLDQ3NzQ1TCw0Nzc0NkwsNDc3 NDdMLAorNDc3NDhMLDQ3NzQ5TCw0Nzc1MEwsNDc3NTFMLDQ3NzUyTCw0Nzc1M0wsNDc3NTRMLDQ3 NzU1TCw0Nzc1NkwsNDc3NTdMLAorNDc3NThMLDQ3NzU5TCw0Nzc2MEwsNDc3NjFMLDQ3NzYyTCw0 Nzc2M0wsNDc3NjRMLDQ3NzY1TCw0Nzc2NkwsNDc3NjdMLAorNDc3NjhMLDQ3NzY5TCw0Nzc3MEws NDc3NzFMLDQ3NzcyTCw0Nzc3M0wsNDc3NzRMLDQ3Nzc1TCw0Nzc3NkwsNDc3NzdMLAorNDc3NzhM LDQ3Nzc5TCw0Nzc4MEwsNDc3ODFMLDQ3NzgyTCw0Nzc4M0wsNDc3ODRMLDQ3Nzg1TCw0Nzc4Nkws NDc3ODdMLAorNDc3ODhMLDQ3Nzg5TCw0Nzc5MEwsNDc3OTFMLDQ3NzkyTCw0Nzc5M0wsNDc3OTRM LDQ3Nzk1TCw0Nzc5NkwsNDc3OTdMLAorNDc3OThMLDQ3Nzk5TCw0NzgwMEwsNDc4MDFMLDQ3ODAy TCw0NzgwM0wsNDc4MDRMLDQ3ODA1TCw0NzgwNkwsNDc4MDdMLAorNDc4MDhMLDQ3ODA5TCw0Nzgx MEwsNDc4MTFMLDQ3ODEyTCw0NzgxM0wsNDc4MTRMLDQ3ODE1TCw0NzgxNkwsNDc4MTdMLAorNDc4 MThMLDQ3ODE5TCw0NzgyMEwsNDc4MjFMLDQ3ODIyTCw0NzgyM0wsNDc4MjRMLDQ3ODI1TCw0Nzgy NkwsNDc4MjdMLAorNDc4MjhMLDQ3ODI5TCw0NzgzMEwsNDc4MzFMLDQ3ODMyTCw0NzgzM0wsNDc4 MzRMLDQ3ODM1TCw0NzgzNkwsNDc4MzdMLAorNDc4MzhMLDQ3ODM5TCw0Nzg0MEwsNDc4NDFMLDQ3 ODQyTCw0Nzg0M0wsNDc4NDRMLDQ3ODQ1TCw0Nzg0NkwsNDc4NDdMLAorNDc4NDhMLDQ3ODQ5TCw0 Nzg1MEwsNDc4NTFMLDQ3ODUyTCw0Nzg1M0wsNDc4NTRMLDQ3ODU1TCw0Nzg1NkwsNDc4NTdMLAor NDc4NThMLDQ3ODU5TCw0Nzg2MEwsNDc4NjFMLDQ3ODYyTCw0Nzg2M0wsNDc4NjRMLDQ3ODY1TCw0 Nzg2NkwsNDc4NjdMLAorNDc4NjhMLDQ3ODY5TCw0Nzg3MEwsNDc4NzFMLDQ3ODcyTCw0Nzg3M0ws NDc4NzRMLDQ3ODc1TCw0Nzg3NkwsNDc4NzdMLAorNDc4NzhMLDQ3ODc5TCw0Nzg4MEwsNDc4ODFM LDQ3ODgyTCw0Nzg4M0wsNDc4ODRMLDQ3ODg1TCw0Nzg4NkwsNDc4ODdMLAorNDc4ODhMLDQ3ODg5 TCw0Nzg5MEwsNDc4OTFMLDQ3ODkyTCw0Nzg5M0wsNDc4OTRMLDQ3ODk1TCw0Nzg5NkwsNDc4OTdM LAorNDc4OThMLDQ3ODk5TCw0NzkwMEwsNDc5MDFMLDQ3OTAyTCw0NzkwM0wsNDc5MDRMLDQ3OTA1 TCw0NzkwNkwsNDc5MDdMLAorNDc5MDhMLDQ3OTA5TCw0NzkxMEwsNDc5MTFMLDQ3OTEyTCw0Nzkx M0wsNDc5MTRMLDQ3OTE1TCw0NzkxNkwsNDc5MTdMLAorNDc5MThMLDQ3OTE5TCw0NzkyMEwsNDc5 MjFMLDQ3OTIyTCw0NzkyM0wsNDc5MjRMLDQ3OTI1TCw0NzkyNkwsNDc5MjdMLAorNDc5MjhMLDQ3 OTI5TCw0NzkzMEwsNDc5MzFMLDQ3OTMyTCw0NzkzM0wsNDc5MzRMLDQ3OTM1TCw0NzkzNkwsNDc5 MzdMLAorNDc5MzhMLDQ3OTM5TCw0Nzk0MEwsNDc5NDFMLDQ3OTQyTCw0Nzk0M0wsNDc5NDRMLDQ3 OTQ1TCw0Nzk0NkwsNDc5NDdMLAorNDc5NDhMLDQ3OTQ5TCw0Nzk1MEwsNDc5NTFMLDQ3OTUyTCw0 Nzk1M0wsNDc5NTRMLDQ3OTU1TCw0Nzk1NkwsNDc5NTdMLAorNDc5NThMLDQ3OTU5TCw0Nzk2MEws NDc5NjFMLDQ3OTYyTCw0Nzk2M0wsNDc5NjRMLDQ3OTY1TCw0Nzk2NkwsNDc5NjdMLAorNDc5NjhM LDQ3OTY5TCw0Nzk3MEwsNDc5NzFMLDQ3OTcyTCw0Nzk3M0wsNDc5NzRMLDQ3OTc1TCw0Nzk3Nkws NDc5NzdMLAorNDc5NzhMLDQ3OTc5TCw0Nzk4MEwsNDc5ODFMLDQ3OTgyTCw0Nzk4M0wsNDc5ODRM LDQ3OTg1TCw0Nzk4NkwsNDc5ODdMLAorNDc5ODhMLDQ3OTg5TCw0Nzk5MEwsNDc5OTFMLDQ3OTky TCw0Nzk5M0wsNDc5OTRMLDQ3OTk1TCw0Nzk5NkwsNDc5OTdMLAorNDc5OThMLDQ3OTk5TCw0ODAw MEwsNDgwMDFMLDQ4MDAyTCw0ODAwM0wsNDgwMDRMLDQ4MDA1TCw0ODAwNkwsNDgwMDdMLAorNDgw MDhMLDQ4MDA5TCw0ODAxMEwsNDgwMTFMLDQ4MDEyTCw0ODAxM0wsNDgwMTRMLDQ4MDE1TCw0ODAx NkwsNDgwMTdMLAorNDgwMThMLDQ4MDE5TCw0ODAyMEwsNDgwMjFMLDQ4MDIyTCw0ODAyM0wsNDgw MjRMLDQ4MDI1TCw0ODAyNkwsNDgwMjdMLAorNDgwMjhMLDQ4MDI5TCw0ODAzMEwsNDgwMzFMLDQ4 MDMyTCw0ODAzM0wsNDgwMzRMLDQ4MDM1TCw0ODAzNkwsNDgwMzdMLAorNDgwMzhMLDQ4MDM5TCw0 ODA0MEwsNDgwNDFMLDQ4MDQyTCw0ODA0M0wsNDgwNDRMLDQ4MDQ1TCw0ODA0NkwsNDgwNDdMLAor NDgwNDhMLDQ4MDQ5TCw0ODA1MEwsNDgwNTFMLDQ4MDUyTCw0ODA1M0wsNDgwNTRMLDQ4MDU1TCw0 ODA1NkwsNDgwNTdMLAorNDgwNThMLDQ4MDU5TCw0ODA2MEwsNDgwNjFMLDQ4MDYyTCw0ODA2M0ws NDgwNjRMLDQ4MDY1TCw0ODA2NkwsNDgwNjdMLAorNDgwNjhMLDQ4MDY5TCw0ODA3MEwsNDgwNzFM LDQ4MDcyTCw0ODA3M0wsNDgwNzRMLDQ4MDc1TCw0ODA3NkwsNDgwNzdMLAorNDgwNzhMLDQ4MDc5 TCw0ODA4MEwsNDgwODFMLDQ4MDgyTCw0ODA4M0wsNDgwODRMLDQ4MDg1TCw0ODA4NkwsNDgwODdM LAorNDgwODhMLDQ4MDg5TCw0ODA5MEwsNDgwOTFMLDQ4MDkyTCw0ODA5M0wsNDgwOTRMLDQ4MDk1 TCw0ODA5NkwsNDgwOTdMLAorNDgwOThMLDQ4MDk5TCw0ODEwMEwsNDgxMDFMLDQ4MTAyTCw0ODEw M0wsNDgxMDRMLDQ4MTA1TCw0ODEwNkwsNDgxMDdMLAorNDgxMDhMLDQ4MTA5TCw0ODExMEwsNDgx MTFMLDQ4MTEyTCw0ODExM0wsNDgxMTRMLDQ4MTE1TCw0ODExNkwsNDgxMTdMLAorNDgxMThMLDQ4 MTE5TCw0ODEyMEwsNDgxMjFMLDQ4MTIyTCw0ODEyM0wsNDgxMjRMLDQ4MTI1TCw0ODEyNkwsNDgx MjdMLAorNDgxMjhMLDQ4MTI5TCw0ODEzMEwsNDgxMzFMLDQ4MTMyTCw0ODEzM0wsNDgxMzRMLDQ4 MTM1TCw0ODEzNkwsNDgxMzdMLAorNDgxMzhMLDQ4MTM5TCw0ODE0MEwsNDgxNDFMLDQ4MTQyTCw0 ODE0M0wsNDgxNDRMLDQ4MTQ1TCw0ODE0NkwsNDgxNDdMLAorNDgxNDhMLDQ4MTQ5TCw0ODE1MEws NDgxNTFMLDQ4MTUyTCw0ODE1M0wsNDgxNTRMLDQ4MTU1TCw0ODE1NkwsNDgxNTdMLAorNDgxNThM LDQ4MTU5TCw0ODE2MEwsNDgxNjFMLDQ4MTYyTCw0ODE2M0wsNDgxNjRMLDQ4MTY1TCw0ODE2Nkws NDgxNjdMLAorNDgxNjhMLDQ4MTY5TCw0ODE3MEwsNDgxNzFMLDQ4MTcyTCw0ODE3M0wsNDgxNzRM LDQ4MTc1TCw0ODE3NkwsNDgxNzdMLAorNDgxNzhMLDQ4MTc5TCw0ODE4MEwsNDgxODFMLDQ4MTgy TCw0ODE4M0wsNDgxODRMLDQ4MTg1TCw0ODE4NkwsNDgxODdMLAorNDgxODhMLDQ4MTg5TCw0ODE5 MEwsNDgxOTFMLDQ4MTkyTCw0ODE5M0wsNDgxOTRMLDQ4MTk1TCw0ODE5NkwsNDgxOTdMLAorNDgx OThMLDQ4MTk5TCw0ODIwMEwsNDgyMDFMLDQ4MjAyTCw0ODIwM0wsNDgyMDRMLDQ4MjA1TCw0ODIw NkwsNDgyMDdMLAorNDgyMDhMLDQ4MjA5TCw0ODIxMEwsNDgyMTFMLDQ4MjEyTCw0ODIxM0wsNDgy MTRMLDQ4MjE1TCw0ODIxNkwsNDgyMTdMLAorNDgyMThMLDQ4MjE5TCw0ODIyMEwsNDgyMjFMLDQ4 MjIyTCw0ODIyM0wsNDgyMjRMLDQ4MjI1TCw0ODIyNkwsNDgyMjdMLAorNDgyMjhMLDQ4MjI5TCw0 ODIzMEwsNDgyMzFMLDQ4MjMyTCw0ODIzM0wsNDgyMzRMLDQ4MjM1TCw0ODIzNkwsNDgyMzdMLAor NDgyMzhMLDQ4MjM5TCw0ODI0MEwsNDgyNDFMLDQ4MjQyTCw0ODI0M0wsNDgyNDRMLDQ4MjQ1TCw0 ODI0NkwsNDgyNDdMLAorNDgyNDhMLDQ4MjQ5TCw0ODI1MEwsNDgyNTFMLDQ4MjUyTCw0ODI1M0ws NDgyNTRMLDQ4MjU1TCw0ODI1NkwsNDgyNTdMLAorNDgyNThMLDQ4MjU5TCw0ODI2MEwsNDgyNjFM LDQ4MjYyTCw0ODI2M0wsNDgyNjRMLDQ4MjY1TCw0ODI2NkwsNDgyNjdMLAorNDgyNjhMLDQ4MjY5 TCw0ODI3MEwsNDgyNzFMLDQ4MjcyTCw0ODI3M0wsNDgyNzRMLDQ4Mjc1TCw0ODI3NkwsNDgyNzdM LAorNDgyNzhMLDQ4Mjc5TCw0ODI4MEwsNDgyODFMLDQ4MjgyTCw0ODI4M0wsNDgyODRMLDQ4Mjg1 TCw0ODI4NkwsNDgyODdMLAorNDgyODhMLDQ4Mjg5TCw0ODI5MEwsNDgyOTFMLDQ4MjkyTCw0ODI5 M0wsNDgyOTRMLDQ4Mjk1TCw0ODI5NkwsNDgyOTdMLAorNDgyOThMLDQ4Mjk5TCw0ODMwMEwsNDgz MDFMLDQ4MzAyTCw0ODMwM0wsNDgzMDRMLDQ4MzA1TCw0ODMwNkwsNDgzMDdMLAorNDgzMDhMLDQ4 MzA5TCw0ODMxMEwsNDgzMTFMLDQ4MzEyTCw0ODMxM0wsNDgzMTRMLDQ4MzE1TCw0ODMxNkwsNDgz MTdMLAorNDgzMThMLDQ4MzE5TCw0ODMyMEwsNDgzMjFMLDQ4MzIyTCw0ODMyM0wsNDgzMjRMLDQ4 MzI1TCw0ODMyNkwsNDgzMjdMLAorNDgzMjhMLDQ4MzI5TCw0ODMzMEwsNDgzMzFMLDQ4MzMyTCw0 ODMzM0wsNDgzMzRMLDQ4MzM1TCw0ODMzNkwsNDgzMzdMLAorNDgzMzhMLDQ4MzM5TCw0ODM0MEws NDgzNDFMLDQ4MzQyTCw0ODM0M0wsNDgzNDRMLDQ4MzQ1TCw0ODM0NkwsNDgzNDdMLAorNDgzNDhM LDQ4MzQ5TCw0ODM1MEwsNDgzNTFMLDQ4MzUyTCw0ODM1M0wsNDgzNTRMLDQ4MzU1TCw0ODM1Nkws NDgzNTdMLAorNDgzNThMLDQ4MzU5TCw0ODM2MEwsNDgzNjFMLDQ4MzYyTCw0ODM2M0wsNDgzNjRM LDQ4MzY1TCw0ODM2NkwsNDgzNjdMLAorNDgzNjhMLDQ4MzY5TCw0ODM3MEwsNDgzNzFMLDQ4Mzcy TCw0ODM3M0wsNDgzNzRMLDQ4Mzc1TCw0ODM3NkwsNDgzNzdMLAorNDgzNzhMLDQ4Mzc5TCw0ODM4 MEwsNDgzODFMLDQ4MzgyTCw0ODM4M0wsNDgzODRMLDQ4Mzg1TCw0ODM4NkwsNDgzODdMLAorNDgz ODhMLDQ4Mzg5TCw0ODM5MEwsNDgzOTFMLDQ4MzkyTCw0ODM5M0wsNDgzOTRMLDQ4Mzk1TCw0ODM5 NkwsNDgzOTdMLAorNDgzOThMLDQ4Mzk5TCw0ODQwMEwsNDg0MDFMLDQ4NDAyTCw0ODQwM0wsNDg0 MDRMLDQ4NDA1TCw0ODQwNkwsNDg0MDdMLAorNDg0MDhMLDQ4NDA5TCw0ODQxMEwsNDg0MTFMLDQ4 NDEyTCw0ODQxM0wsNDg0MTRMLDQ4NDE1TCw0ODQxNkwsNDg0MTdMLAorNDg0MThMLDQ4NDE5TCw0 ODQyMEwsNDg0MjFMLDQ4NDIyTCw0ODQyM0wsNDg0MjRMLDQ4NDI1TCw0ODQyNkwsNDg0MjdMLAor NDg0MjhMLDQ4NDI5TCw0ODQzMEwsNDg0MzFMLDQ4NDMyTCw0ODQzM0wsNDg0MzRMLDQ4NDM1TCw0 ODQzNkwsNDg0MzdMLAorNDg0MzhMLDQ4NDM5TCw0ODQ0MEwsNDg0NDFMLDQ4NDQyTCw0ODQ0M0ws NDg0NDRMLDQ4NDQ1TCw0ODQ0NkwsNDg0NDdMLAorNDg0NDhMLDQ4NDQ5TCw0ODQ1MEwsNDg0NTFM LDQ4NDUyTCw0ODQ1M0wsNDg0NTRMLDQ4NDU1TCw0ODQ1NkwsNDg0NTdMLAorNDg0NThMLDQ4NDU5 TCw0ODQ2MEwsNDg0NjFMLDQ4NDYyTCw0ODQ2M0wsNDg0NjRMLDQ4NDY1TCw0ODQ2NkwsNDg0NjdM LAorNDg0NjhMLDQ4NDY5TCw0ODQ3MEwsNDg0NzFMLDQ4NDcyTCw0ODQ3M0wsNDg0NzRMLDQ4NDc1 TCw0ODQ3NkwsNDg0NzdMLAorNDg0NzhMLDQ4NDc5TCw0ODQ4MEwsNDg0ODFMLDQ4NDgyTCw0ODQ4 M0wsNDg0ODRMLDQ4NDg1TCw0ODQ4NkwsNDg0ODdMLAorNDg0ODhMLDQ4NDg5TCw0ODQ5MEwsNDg0 OTFMLDQ4NDkyTCw0ODQ5M0wsNDg0OTRMLDQ4NDk1TCw0ODQ5NkwsNDg0OTdMLAorNDg0OThMLDQ4 NDk5TCw0ODUwMEwsNDg1MDFMLDQ4NTAyTCw0ODUwM0wsNDg1MDRMLDQ4NTA1TCw0ODUwNkwsNDg1 MDdMLAorNDg1MDhMLDQ4NTA5TCw0ODUxMEwsNDg1MTFMLDQ4NTEyTCw0ODUxM0wsNDg1MTRMLDQ4 NTE1TCw0ODUxNkwsNDg1MTdMLAorNDg1MThMLDQ4NTE5TCw0ODUyMEwsNDg1MjFMLDQ4NTIyTCw0 ODUyM0wsNDg1MjRMLDQ4NTI1TCw0ODUyNkwsNDg1MjdMLAorNDg1MjhMLDQ4NTI5TCw0ODUzMEws NDg1MzFMLDQ4NTMyTCw0ODUzM0wsNDg1MzRMLDQ4NTM1TCw0ODUzNkwsNDg1MzdMLAorNDg1MzhM LDQ4NTM5TCw0ODU0MEwsNDg1NDFMLDQ4NTQyTCw0ODU0M0wsNDg1NDRMLDQ4NTQ1TCw0ODU0Nkws NDg1NDdMLAorNDg1NDhMLDQ4NTQ5TCw0ODU1MEwsNDg1NTFMLDQ4NTUyTCw0ODU1M0wsNDg1NTRM LDQ4NTU1TCw0ODU1NkwsNDg1NTdMLAorNDg1NThMLDQ4NTU5TCw0ODU2MEwsNDg1NjFMLDQ4NTYy TCw0ODU2M0wsNDg1NjRMLDQ4NTY1TCw0ODU2NkwsNDg1NjdMLAorNDg1NjhMLDQ4NTY5TCw0ODU3 MEwsNDg1NzFMLDQ4NTcyTCw0ODU3M0wsNDg1NzRMLDQ4NTc1TCw0ODU3NkwsNDg1NzdMLAorNDg1 NzhMLDQ4NTc5TCw0ODU4MEwsNDg1ODFMLDQ4NTgyTCw0ODU4M0wsNDg1ODRMLDQ4NTg1TCw0ODU4 NkwsNDg1ODdMLAorNDg1ODhMLDQ4NTg5TCw0ODU5MEwsNDg1OTFMLDQ4NTkyTCw0ODU5M0wsNDg1 OTRMLDQ4NTk1TCw0ODU5NkwsNDg1OTdMLAorNDg1OThMLDQ4NTk5TCw0ODYwMEwsNDg2MDFMLDQ4 NjAyTCw0ODYwM0wsNDg2MDRMLDQ4NjA1TCw0ODYwNkwsNDg2MDdMLAorNDg2MDhMLDQ4NjA5TCw0 ODYxMEwsNDg2MTFMLDQ4NjEyTCw0ODYxM0wsNDg2MTRMLDQ4NjE1TCw0ODYxNkwsNDg2MTdMLAor NDg2MThMLDQ4NjE5TCw0ODYyMEwsNDg2MjFMLDQ4NjIyTCw0ODYyM0wsNDg2MjRMLDQ4NjI1TCw0 ODYyNkwsNDg2MjdMLAorNDg2MjhMLDQ4NjI5TCw0ODYzMEwsNDg2MzFMLDQ4NjMyTCw0ODYzM0ws NDg2MzRMLDQ4NjM1TCw0ODYzNkwsNDg2MzdMLAorNDg2MzhMLDQ4NjM5TCw0ODY0MEwsNDg2NDFM LDQ4NjQyTCw0ODY0M0wsNDg2NDRMLDQ4NjQ1TCw0ODY0NkwsNDg2NDdMLAorNDg2NDhMLDQ4NjQ5 TCw0ODY1MEwsNDg2NTFMLDQ4NjUyTCw0ODY1M0wsNDg2NTRMLDQ4NjU1TCw0ODY1NkwsNDg2NTdM LAorNDg2NThMLDQ4NjU5TCw0ODY2MEwsNDg2NjFMLDQ4NjYyTCw0ODY2M0wsNDg2NjRMLDQ4NjY1 TCw0ODY2NkwsNDg2NjdMLAorNDg2NjhMLDQ4NjY5TCw0ODY3MEwsNDg2NzFMLDQ4NjcyTCw0ODY3 M0wsNDg2NzRMLDQ4Njc1TCw0ODY3NkwsNDg2NzdMLAorNDg2NzhMLDQ4Njc5TCw0ODY4MEwsNDg2 ODFMLDQ4NjgyTCw0ODY4M0wsNDg2ODRMLDQ4Njg1TCw0ODY4NkwsNDg2ODdMLAorNDg2ODhMLDQ4 Njg5TCw0ODY5MEwsNDg2OTFMLDQ4NjkyTCw0ODY5M0wsNDg2OTRMLDQ4Njk1TCw0ODY5NkwsNDg2 OTdMLAorNDg2OThMLDQ4Njk5TCw0ODcwMEwsNDg3MDFMLDQ4NzAyTCw0ODcwM0wsNDg3MDRMLDQ4 NzA1TCw0ODcwNkwsNDg3MDdMLAorNDg3MDhMLDQ4NzA5TCw0ODcxMEwsNDg3MTFMLDQ4NzEyTCw0 ODcxM0wsNDg3MTRMLDQ4NzE1TCw0ODcxNkwsNDg3MTdMLAorNDg3MThMLDQ4NzE5TCw0ODcyMEws NDg3MjFMLDQ4NzIyTCw0ODcyM0wsNDg3MjRMLDQ4NzI1TCw0ODcyNkwsNDg3MjdMLAorNDg3MjhM LDQ4NzI5TCw0ODczMEwsNDg3MzFMLDQ4NzMyTCw0ODczM0wsNDg3MzRMLDQ4NzM1TCw0ODczNkws NDg3MzdMLAorNDg3MzhMLDQ4NzM5TCw0ODc0MEwsNDg3NDFMLDQ4NzQyTCw0ODc0M0wsNDg3NDRM LDQ4NzQ1TCw0ODc0NkwsNDg3NDdMLAorNDg3NDhMLDQ4NzQ5TCw0ODc1MEwsNDg3NTFMLDQ4NzUy TCw0ODc1M0wsNDg3NTRMLDQ4NzU1TCw0ODc1NkwsNDg3NTdMLAorNDg3NThMLDQ4NzU5TCw0ODc2 MEwsNDg3NjFMLDQ4NzYyTCw0ODc2M0wsNDg3NjRMLDQ4NzY1TCw0ODc2NkwsNDg3NjdMLAorNDg3 NjhMLDQ4NzY5TCw0ODc3MEwsNDg3NzFMLDQ4NzcyTCw0ODc3M0wsNDg3NzRMLDQ4Nzc1TCw0ODc3 NkwsNDg3NzdMLAorNDg3NzhMLDQ4Nzc5TCw0ODc4MEwsNDg3ODFMLDQ4NzgyTCw0ODc4M0wsNDg3 ODRMLDQ4Nzg1TCw0ODc4NkwsNDg3ODdMLAorNDg3ODhMLDQ4Nzg5TCw0ODc5MEwsNDg3OTFMLDQ4 NzkyTCw0ODc5M0wsNDg3OTRMLDQ4Nzk1TCw0ODc5NkwsNDg3OTdMLAorNDg3OThMLDQ4Nzk5TCw0 ODgwMEwsNDg4MDFMLDQ4ODAyTCw0ODgwM0wsNDg4MDRMLDQ4ODA1TCw0ODgwNkwsNDg4MDdMLAor NDg4MDhMLDQ4ODA5TCw0ODgxMEwsNDg4MTFMLDQ4ODEyTCw0ODgxM0wsNDg4MTRMLDQ4ODE1TCw0 ODgxNkwsNDg4MTdMLAorNDg4MThMLDQ4ODE5TCw0ODgyMEwsNDg4MjFMLDQ4ODIyTCw0ODgyM0ws NDg4MjRMLDQ4ODI1TCw0ODgyNkwsNDg4MjdMLAorNDg4MjhMLDQ4ODI5TCw0ODgzMEwsNDg4MzFM LDQ4ODMyTCw0ODgzM0wsNDg4MzRMLDQ4ODM1TCw0ODgzNkwsNDg4MzdMLAorNDg4MzhMLDQ4ODM5 TCw0ODg0MEwsNDg4NDFMLDQ4ODQyTCw0ODg0M0wsNDg4NDRMLDQ4ODQ1TCw0ODg0NkwsNDg4NDdM LAorNDg4NDhMLDQ4ODQ5TCw0ODg1MEwsNDg4NTFMLDQ4ODUyTCw0ODg1M0wsNDg4NTRMLDQ4ODU1 TCw0ODg1NkwsNDg4NTdMLAorNDg4NThMLDQ4ODU5TCw0ODg2MEwsNDg4NjFMLDQ4ODYyTCw0ODg2 M0wsNDg4NjRMLDQ4ODY1TCw0ODg2NkwsNDg4NjdMLAorNDg4NjhMLDQ4ODY5TCw0ODg3MEwsNDg4 NzFMLDQ4ODcyTCw0ODg3M0wsNDg4NzRMLDQ4ODc1TCw0ODg3NkwsNDg4NzdMLAorNDg4NzhMLDQ4 ODc5TCw0ODg4MEwsNDg4ODFMLDQ4ODgyTCw0ODg4M0wsNDg4ODRMLDQ4ODg1TCw0ODg4NkwsNDg4 ODdMLAorNDg4ODhMLDQ4ODg5TCw0ODg5MEwsNDg4OTFMLDQ4ODkyTCw0ODg5M0wsNDg4OTRMLDQ4 ODk1TCw0ODg5NkwsNDg4OTdMLAorNDg4OThMLDQ4ODk5TCw0ODkwMEwsNDg5MDFMLDQ4OTAyTCw0 ODkwM0wsNDg5MDRMLDQ4OTA1TCw0ODkwNkwsNDg5MDdMLAorNDg5MDhMLDQ4OTA5TCw0ODkxMEws NDg5MTFMLDQ4OTEyTCw0ODkxM0wsNDg5MTRMLDQ4OTE1TCw0ODkxNkwsNDg5MTdMLAorNDg5MThM LDQ4OTE5TCw0ODkyMEwsNDg5MjFMLDQ4OTIyTCw0ODkyM0wsNDg5MjRMLDQ4OTI1TCw0ODkyNkws NDg5MjdMLAorNDg5MjhMLDQ4OTI5TCw0ODkzMEwsNDg5MzFMLDQ4OTMyTCw0ODkzM0wsNDg5MzRM LDQ4OTM1TCw0ODkzNkwsNDg5MzdMLAorNDg5MzhMLDQ4OTM5TCw0ODk0MEwsNDg5NDFMLDQ4OTQy TCw0ODk0M0wsNDg5NDRMLDQ4OTQ1TCw0ODk0NkwsNDg5NDdMLAorNDg5NDhMLDQ4OTQ5TCw0ODk1 MEwsNDg5NTFMLDQ4OTUyTCw0ODk1M0wsNDg5NTRMLDQ4OTU1TCw0ODk1NkwsNDg5NTdMLAorNDg5 NThMLDQ4OTU5TCw0ODk2MEwsNDg5NjFMLDQ4OTYyTCw0ODk2M0wsNDg5NjRMLDQ4OTY1TCw0ODk2 NkwsNDg5NjdMLAorNDg5NjhMLDQ4OTY5TCw0ODk3MEwsNDg5NzFMLDQ4OTcyTCw0ODk3M0wsNDg5 NzRMLDQ4OTc1TCw0ODk3NkwsNDg5NzdMLAorNDg5NzhMLDQ4OTc5TCw0ODk4MEwsNDg5ODFMLDQ4 OTgyTCw0ODk4M0wsNDg5ODRMLDQ4OTg1TCw0ODk4NkwsNDg5ODdMLAorNDg5ODhMLDQ4OTg5TCw0 ODk5MEwsNDg5OTFMLDQ4OTkyTCw0ODk5M0wsNDg5OTRMLDQ4OTk1TCw0ODk5NkwsNDg5OTdMLAor NDg5OThMLDQ4OTk5TCw0OTAwMEwsNDkwMDFMLDQ5MDAyTCw0OTAwM0wsNDkwMDRMLDQ5MDA1TCw0 OTAwNkwsNDkwMDdMLAorNDkwMDhMLDQ5MDA5TCw0OTAxMEwsNDkwMTFMLDQ5MDEyTCw0OTAxM0ws NDkwMTRMLDQ5MDE1TCw0OTAxNkwsNDkwMTdMLAorNDkwMThMLDQ5MDE5TCw0OTAyMEwsNDkwMjFM LDQ5MDIyTCw0OTAyM0wsNDkwMjRMLDQ5MDI1TCw0OTAyNkwsNDkwMjdMLAorNDkwMjhMLDQ5MDI5 TCw0OTAzMEwsNDkwMzFMLDQ5MDMyTCw0OTAzM0wsNDkwMzRMLDQ5MDM1TCw0OTAzNkwsNDkwMzdM LAorNDkwMzhMLDQ5MDM5TCw0OTA0MEwsNDkwNDFMLDQ5MDQyTCw0OTA0M0wsNDkwNDRMLDQ5MDQ1 TCw0OTA0NkwsNDkwNDdMLAorNDkwNDhMLDQ5MDQ5TCw0OTA1MEwsNDkwNTFMLDQ5MDUyTCw0OTA1 M0wsNDkwNTRMLDQ5MDU1TCw0OTA1NkwsNDkwNTdMLAorNDkwNThMLDQ5MDU5TCw0OTA2MEwsNDkw NjFMLDQ5MDYyTCw0OTA2M0wsNDkwNjRMLDQ5MDY1TCw0OTA2NkwsNDkwNjdMLAorNDkwNjhMLDQ5 MDY5TCw0OTA3MEwsNDkwNzFMLDQ5MDcyTCw0OTA3M0wsNDkwNzRMLDQ5MDc1TCw0OTA3NkwsNDkw NzdMLAorNDkwNzhMLDQ5MDc5TCw0OTA4MEwsNDkwODFMLDQ5MDgyTCw0OTA4M0wsNDkwODRMLDQ5 MDg1TCw0OTA4NkwsNDkwODdMLAorNDkwODhMLDQ5MDg5TCw0OTA5MEwsNDkwOTFMLDQ5MDkyTCw0 OTA5M0wsNDkwOTRMLDQ5MDk1TCw0OTA5NkwsNDkwOTdMLAorNDkwOThMLDQ5MDk5TCw0OTEwMEws NDkxMDFMLDQ5MTAyTCw0OTEwM0wsNDkxMDRMLDQ5MTA1TCw0OTEwNkwsNDkxMDdMLAorNDkxMDhM LDQ5MTA5TCw0OTExMEwsNDkxMTFMLDQ5MTEyTCw0OTExM0wsNDkxMTRMLDQ5MTE1TCw0OTExNkws NDkxMTdMLAorNDkxMThMLDQ5MTE5TCw0OTEyMEwsNDkxMjFMLDQ5MTIyTCw0OTEyM0wsNDkxMjRM LDQ5MTI1TCw0OTEyNkwsNDkxMjdMLAorNDkxMjhMLDQ5MTI5TCw0OTEzMEwsNDkxMzFMLDQ5MTMy TCw0OTEzM0wsNDkxMzRMLDQ5MTM1TCw0OTEzNkwsNDkxMzdMLAorNDkxMzhMLDQ5MTM5TCw0OTE0 MEwsNDkxNDFMLDQ5MTQyTCw0OTE0M0wsNDkxNDRMLDQ5MTQ1TCw0OTE0NkwsNDkxNDdMLAorNDkx NDhMLDQ5MTQ5TCw0OTE1MEwsNDkxNTFMLDQ5MTUyTCw0OTE1M0wsNDkxNTRMLDQ5MTU1TCw0OTE1 NkwsNDkxNTdMLAorNDkxNThMLDQ5MTU5TCw0OTE2MEwsNDkxNjFMLDQ5MTYyTCw0OTE2M0wsNDkx NjRMLDQ5MTY1TCw0OTE2NkwsNDkxNjdMLAorNDkxNjhMLDQ5MTY5TCw0OTE3MEwsNDkxNzFMLDQ5 MTcyTCw0OTE3M0wsNDkxNzRMLDQ5MTc1TCw0OTE3NkwsNDkxNzdMLAorNDkxNzhMLDQ5MTc5TCw0 OTE4MEwsNDkxODFMLDQ5MTgyTCw0OTE4M0wsNDkxODRMLDQ5MTg1TCw0OTE4NkwsNDkxODdMLAor NDkxODhMLDQ5MTg5TCw0OTE5MEwsNDkxOTFMLDQ5MTkyTCw0OTE5M0wsNDkxOTRMLDQ5MTk1TCw0 OTE5NkwsNDkxOTdMLAorNDkxOThMLDQ5MTk5TCw0OTIwMEwsNDkyMDFMLDQ5MjAyTCw0OTIwM0ws NDkyMDRMLDQ5MjA1TCw0OTIwNkwsNDkyMDdMLAorNDkyMDhMLDQ5MjA5TCw0OTIxMEwsNDkyMTFM LDQ5MjEyTCw0OTIxM0wsNDkyMTRMLDQ5MjE1TCw0OTIxNkwsNDkyMTdMLAorNDkyMThMLDQ5MjE5 TCw0OTIyMEwsNDkyMjFMLDQ5MjIyTCw0OTIyM0wsNDkyMjRMLDQ5MjI1TCw0OTIyNkwsNDkyMjdM LAorNDkyMjhMLDQ5MjI5TCw0OTIzMEwsNDkyMzFMLDQ5MjMyTCw0OTIzM0wsNDkyMzRMLDQ5MjM1 TCw0OTIzNkwsNDkyMzdMLAorNDkyMzhMLDQ5MjM5TCw0OTI0MEwsNDkyNDFMLDQ5MjQyTCw0OTI0 M0wsNDkyNDRMLDQ5MjQ1TCw0OTI0NkwsNDkyNDdMLAorNDkyNDhMLDQ5MjQ5TCw0OTI1MEwsNDky NTFMLDQ5MjUyTCw0OTI1M0wsNDkyNTRMLDQ5MjU1TCw0OTI1NkwsNDkyNTdMLAorNDkyNThMLDQ5 MjU5TCw0OTI2MEwsNDkyNjFMLDQ5MjYyTCw0OTI2M0wsNDkyNjRMLDQ5MjY1TCw0OTI2NkwsNDky NjdMLAorNDkyNjhMLDQ5MjY5TCw0OTI3MEwsNDkyNzFMLDQ5MjcyTCw0OTI3M0wsNDkyNzRMLDQ5 Mjc1TCw0OTI3NkwsNDkyNzdMLAorNDkyNzhMLDQ5Mjc5TCw0OTI4MEwsNDkyODFMLDQ5MjgyTCw0 OTI4M0wsNDkyODRMLDQ5Mjg1TCw0OTI4NkwsNDkyODdMLAorNDkyODhMLDQ5Mjg5TCw0OTI5MEws NDkyOTFMLDQ5MjkyTCw0OTI5M0wsNDkyOTRMLDQ5Mjk1TCw0OTI5NkwsNDkyOTdMLAorNDkyOThM LDQ5Mjk5TCw0OTMwMEwsNDkzMDFMLDQ5MzAyTCw0OTMwM0wsNDkzMDRMLDQ5MzA1TCw0OTMwNkws NDkzMDdMLAorNDkzMDhMLDQ5MzA5TCw0OTMxMEwsNDkzMTFMLDQ5MzEyTCw0OTMxM0wsNDkzMTRM LDQ5MzE1TCw0OTMxNkwsNDkzMTdMLAorNDkzMThMLDQ5MzE5TCw0OTMyMEwsNDkzMjFMLDQ5MzIy TCw0OTMyM0wsNDkzMjRMLDQ5MzI1TCw0OTMyNkwsNDkzMjdMLAorNDkzMjhMLDQ5MzI5TCw0OTMz MEwsNDkzMzFMLDQ5MzMyTCw0OTMzM0wsNDkzMzRMLDQ5MzM1TCw0OTMzNkwsNDkzMzdMLAorNDkz MzhMLDQ5MzM5TCw0OTM0MEwsNDkzNDFMLDQ5MzQyTCw0OTM0M0wsNDkzNDRMLDQ5MzQ1TCw0OTM0 NkwsNDkzNDdMLAorNDkzNDhMLDQ5MzQ5TCw0OTM1MEwsNDkzNTFMLDQ5MzUyTCw0OTM1M0wsNDkz NTRMLDQ5MzU1TCw0OTM1NkwsNDkzNTdMLAorNDkzNThMLDQ5MzU5TCw0OTM2MEwsNDkzNjFMLDQ5 MzYyTCw0OTM2M0wsNDkzNjRMLDQ5MzY1TCw0OTM2NkwsNDkzNjdMLAorNDkzNjhMLDQ5MzY5TCw0 OTM3MEwsNDkzNzFMLDQ5MzcyTCw0OTM3M0wsNDkzNzRMLDQ5Mzc1TCw0OTM3NkwsNDkzNzdMLAor NDkzNzhMLDQ5Mzc5TCw0OTM4MEwsNDkzODFMLDQ5MzgyTCw0OTM4M0wsNDkzODRMLDQ5Mzg1TCw0 OTM4NkwsNDkzODdMLAorNDkzODhMLDQ5Mzg5TCw0OTM5MEwsNDkzOTFMLDQ5MzkyTCw0OTM5M0ws NDkzOTRMLDQ5Mzk1TCw0OTM5NkwsNDkzOTdMLAorNDkzOThMLDQ5Mzk5TCw0OTQwMEwsNDk0MDFM LDQ5NDAyTCw0OTQwM0wsNDk0MDRMLDQ5NDA1TCw0OTQwNkwsNDk0MDdMLAorNDk0MDhMLDQ5NDA5 TCw0OTQxMEwsNDk0MTFMLDQ5NDEyTCw0OTQxM0wsNDk0MTRMLDQ5NDE1TCw0OTQxNkwsNDk0MTdM LAorNDk0MThMLDQ5NDE5TCw0OTQyMEwsNDk0MjFMLDQ5NDIyTCw0OTQyM0wsNDk0MjRMLDQ5NDI1 TCw0OTQyNkwsNDk0MjdMLAorNDk0MjhMLDQ5NDI5TCw0OTQzMEwsNDk0MzFMLDQ5NDMyTCw0OTQz M0wsNDk0MzRMLDQ5NDM1TCw0OTQzNkwsNDk0MzdMLAorNDk0MzhMLDQ5NDM5TCw0OTQ0MEwsNDk0 NDFMLDQ5NDQyTCw0OTQ0M0wsNDk0NDRMLDQ5NDQ1TCw0OTQ0NkwsNDk0NDdMLAorNDk0NDhMLDQ5 NDQ5TCw0OTQ1MEwsNDk0NTFMLDQ5NDUyTCw0OTQ1M0wsNDk0NTRMLDQ5NDU1TCw0OTQ1NkwsNDk0 NTdMLAorNDk0NThMLDQ5NDU5TCw0OTQ2MEwsNDk0NjFMLDQ5NDYyTCw0OTQ2M0wsNDk0NjRMLDQ5 NDY1TCw0OTQ2NkwsNDk0NjdMLAorNDk0NjhMLDQ5NDY5TCw0OTQ3MEwsNDk0NzFMLDQ5NDcyTCw0 OTQ3M0wsNDk0NzRMLDQ5NDc1TCw0OTQ3NkwsNDk0NzdMLAorNDk0NzhMLDQ5NDc5TCw0OTQ4MEws NDk0ODFMLDQ5NDgyTCw0OTQ4M0wsNDk0ODRMLDQ5NDg1TCw0OTQ4NkwsNDk0ODdMLAorNDk0ODhM LDQ5NDg5TCw0OTQ5MEwsNDk0OTFMLDQ5NDkyTCw0OTQ5M0wsNDk0OTRMLDQ5NDk1TCw0OTQ5Nkws NDk0OTdMLAorNDk0OThMLDQ5NDk5TCw0OTUwMEwsNDk1MDFMLDQ5NTAyTCw0OTUwM0wsNDk1MDRM LDQ5NTA1TCw0OTUwNkwsNDk1MDdMLAorNDk1MDhMLDQ5NTA5TCw0OTUxMEwsNDk1MTFMLDQ5NTEy TCw0OTUxM0wsNDk1MTRMLDQ5NTE1TCw0OTUxNkwsNDk1MTdMLAorNDk1MThMLDQ5NTE5TCw0OTUy MEwsNDk1MjFMLDQ5NTIyTCw0OTUyM0wsNDk1MjRMLDQ5NTI1TCw0OTUyNkwsNDk1MjdMLAorNDk1 MjhMLDQ5NTI5TCw0OTUzMEwsNDk1MzFMLDQ5NTMyTCw0OTUzM0wsNDk1MzRMLDQ5NTM1TCw0OTUz NkwsNDk1MzdMLAorNDk1MzhMLDQ5NTM5TCw0OTU0MEwsNDk1NDFMLDQ5NTQyTCw0OTU0M0wsNDk1 NDRMLDQ5NTQ1TCw0OTU0NkwsNDk1NDdMLAorNDk1NDhMLDQ5NTQ5TCw0OTU1MEwsNDk1NTFMLDQ5 NTUyTCw0OTU1M0wsNDk1NTRMLDQ5NTU1TCw0OTU1NkwsNDk1NTdMLAorNDk1NThMLDQ5NTU5TCw0 OTU2MEwsNDk1NjFMLDQ5NTYyTCw0OTU2M0wsNDk1NjRMLDQ5NTY1TCw0OTU2NkwsNDk1NjdMLAor NDk1NjhMLDQ5NTY5TCw0OTU3MEwsNDk1NzFMLDQ5NTcyTCw0OTU3M0wsNDk1NzRMLDQ5NTc1TCw0 OTU3NkwsNDk1NzdMLAorNDk1NzhMLDQ5NTc5TCw0OTU4MEwsNDk1ODFMLDQ5NTgyTCw0OTU4M0ws NDk1ODRMLDQ5NTg1TCw0OTU4NkwsNDk1ODdMLAorNDk1ODhMLDQ5NTg5TCw0OTU5MEwsNDk1OTFM LDQ5NTkyTCw0OTU5M0wsNDk1OTRMLDQ5NTk1TCw0OTU5NkwsNDk1OTdMLAorNDk1OThMLDQ5NTk5 TCw0OTYwMEwsNDk2MDFMLDQ5NjAyTCw0OTYwM0wsNDk2MDRMLDQ5NjA1TCw0OTYwNkwsNDk2MDdM LAorNDk2MDhMLDQ5NjA5TCw0OTYxMEwsNDk2MTFMLDQ5NjEyTCw0OTYxM0wsNDk2MTRMLDQ5NjE1 TCw0OTYxNkwsNDk2MTdMLAorNDk2MThMLDQ5NjE5TCw0OTYyMEwsNDk2MjFMLDQ5NjIyTCw0OTYy M0wsNDk2MjRMLDQ5NjI1TCw0OTYyNkwsNDk2MjdMLAorNDk2MjhMLDQ5NjI5TCw0OTYzMEwsNDk2 MzFMLDQ5NjMyTCw0OTYzM0wsNDk2MzRMLDQ5NjM1TCw0OTYzNkwsNDk2MzdMLAorNDk2MzhMLDQ5 NjM5TCw0OTY0MEwsNDk2NDFMLDQ5NjQyTCw0OTY0M0wsNDk2NDRMLDQ5NjQ1TCw0OTY0NkwsNDk2 NDdMLAorNDk2NDhMLDQ5NjQ5TCw0OTY1MEwsNDk2NTFMLDQ5NjUyTCw0OTY1M0wsNDk2NTRMLDQ5 NjU1TCw0OTY1NkwsNDk2NTdMLAorNDk2NThMLDQ5NjU5TCw0OTY2MEwsNDk2NjFMLDQ5NjYyTCw0 OTY2M0wsNDk2NjRMLDQ5NjY1TCw0OTY2NkwsNDk2NjdMLAorNDk2NjhMLDQ5NjY5TCw0OTY3MEws NDk2NzFMLDQ5NjcyTCw0OTY3M0wsNDk2NzRMLDQ5Njc1TCw0OTY3NkwsNDk2NzdMLAorNDk2NzhM LDQ5Njc5TCw0OTY4MEwsNDk2ODFMLDQ5NjgyTCw0OTY4M0wsNDk2ODRMLDQ5Njg1TCw0OTY4Nkws NDk2ODdMLAorNDk2ODhMLDQ5Njg5TCw0OTY5MEwsNDk2OTFMLDQ5NjkyTCw0OTY5M0wsNDk2OTRM LDQ5Njk1TCw0OTY5NkwsNDk2OTdMLAorNDk2OThMLDQ5Njk5TCw0OTcwMEwsNDk3MDFMLDQ5NzAy TCw0OTcwM0wsNDk3MDRMLDQ5NzA1TCw0OTcwNkwsNDk3MDdMLAorNDk3MDhMLDQ5NzA5TCw0OTcx MEwsNDk3MTFMLDQ5NzEyTCw0OTcxM0wsNDk3MTRMLDQ5NzE1TCw0OTcxNkwsNDk3MTdMLAorNDk3 MThMLDQ5NzE5TCw0OTcyMEwsNDk3MjFMLDQ5NzIyTCw0OTcyM0wsNDk3MjRMLDQ5NzI1TCw0OTcy NkwsNDk3MjdMLAorNDk3MjhMLDQ5NzI5TCw0OTczMEwsNDk3MzFMLDQ5NzMyTCw0OTczM0wsNDk3 MzRMLDQ5NzM1TCw0OTczNkwsNDk3MzdMLAorNDk3MzhMLDQ5NzM5TCw0OTc0MEwsNDk3NDFMLDQ5 NzQyTCw0OTc0M0wsNDk3NDRMLDQ5NzQ1TCw0OTc0NkwsNDk3NDdMLAorNDk3NDhMLDQ5NzQ5TCw0 OTc1MEwsNDk3NTFMLDQ5NzUyTCw0OTc1M0wsNDk3NTRMLDQ5NzU1TCw0OTc1NkwsNDk3NTdMLAor NDk3NThMLDQ5NzU5TCw0OTc2MEwsNDk3NjFMLDQ5NzYyTCw0OTc2M0wsNDk3NjRMLDQ5NzY1TCw0 OTc2NkwsNDk3NjdMLAorNDk3NjhMLDQ5NzY5TCw0OTc3MEwsNDk3NzFMLDQ5NzcyTCw0OTc3M0ws NDk3NzRMLDQ5Nzc1TCw0OTc3NkwsNDk3NzdMLAorNDk3NzhMLDQ5Nzc5TCw0OTc4MEwsNDk3ODFM LDQ5NzgyTCw0OTc4M0wsNDk3ODRMLDQ5Nzg1TCw0OTc4NkwsNDk3ODdMLAorNDk3ODhMLDQ5Nzg5 TCw0OTc5MEwsNDk3OTFMLDQ5NzkyTCw0OTc5M0wsNDk3OTRMLDQ5Nzk1TCw0OTc5NkwsNDk3OTdM LAorNDk3OThMLDQ5Nzk5TCw0OTgwMEwsNDk4MDFMLDQ5ODAyTCw0OTgwM0wsNDk4MDRMLDQ5ODA1 TCw0OTgwNkwsNDk4MDdMLAorNDk4MDhMLDQ5ODA5TCw0OTgxMEwsNDk4MTFMLDQ5ODEyTCw0OTgx M0wsNDk4MTRMLDQ5ODE1TCw0OTgxNkwsNDk4MTdMLAorNDk4MThMLDQ5ODE5TCw0OTgyMEwsNDk4 MjFMLDQ5ODIyTCw0OTgyM0wsNDk4MjRMLDQ5ODI1TCw0OTgyNkwsNDk4MjdMLAorNDk4MjhMLDQ5 ODI5TCw0OTgzMEwsNDk4MzFMLDQ5ODMyTCw0OTgzM0wsNDk4MzRMLDQ5ODM1TCw0OTgzNkwsNDk4 MzdMLAorNDk4MzhMLDQ5ODM5TCw0OTg0MEwsNDk4NDFMLDQ5ODQyTCw0OTg0M0wsNDk4NDRMLDQ5 ODQ1TCw0OTg0NkwsNDk4NDdMLAorNDk4NDhMLDQ5ODQ5TCw0OTg1MEwsNDk4NTFMLDQ5ODUyTCw0 OTg1M0wsNDk4NTRMLDQ5ODU1TCw0OTg1NkwsNDk4NTdMLAorNDk4NThMLDQ5ODU5TCw0OTg2MEws NDk4NjFMLDQ5ODYyTCw0OTg2M0wsNDk4NjRMLDQ5ODY1TCw0OTg2NkwsNDk4NjdMLAorNDk4NjhM LDQ5ODY5TCw0OTg3MEwsNDk4NzFMLDQ5ODcyTCw0OTg3M0wsNDk4NzRMLDQ5ODc1TCw0OTg3Nkws NDk4NzdMLAorNDk4NzhMLDQ5ODc5TCw0OTg4MEwsNDk4ODFMLDQ5ODgyTCw0OTg4M0wsNDk4ODRM LDQ5ODg1TCw0OTg4NkwsNDk4ODdMLAorNDk4ODhMLDQ5ODg5TCw0OTg5MEwsNDk4OTFMLDQ5ODky TCw0OTg5M0wsNDk4OTRMLDQ5ODk1TCw0OTg5NkwsNDk4OTdMLAorNDk4OThMLDQ5ODk5TCw0OTkw MEwsNDk5MDFMLDQ5OTAyTCw0OTkwM0wsNDk5MDRMLDQ5OTA1TCw0OTkwNkwsNDk5MDdMLAorNDk5 MDhMLDQ5OTA5TCw0OTkxMEwsNDk5MTFMLDQ5OTEyTCw0OTkxM0wsNDk5MTRMLDQ5OTE1TCw0OTkx NkwsNDk5MTdMLAorNDk5MThMLDQ5OTE5TCw0OTkyMEwsNDk5MjFMLDQ5OTIyTCw0OTkyM0wsNDk5 MjRMLDQ5OTI1TCw0OTkyNkwsNDk5MjdMLAorNDk5MjhMLDQ5OTI5TCw0OTkzMEwsNDk5MzFMLDQ5 OTMyTCw0OTkzM0wsNDk5MzRMLDQ5OTM1TCw0OTkzNkwsNDk5MzdMLAorNDk5MzhMLDQ5OTM5TCw0 OTk0MEwsNDk5NDFMLDQ5OTQyTCw0OTk0M0wsNDk5NDRMLDQ5OTQ1TCw0OTk0NkwsNDk5NDdMLAor NDk5NDhMLDQ5OTQ5TCw0OTk1MEwsNDk5NTFMLDQ5OTUyTCw0OTk1M0wsNDk5NTRMLDQ5OTU1TCw0 OTk1NkwsNDk5NTdMLAorNDk5NThMLDQ5OTU5TCw0OTk2MEwsNDk5NjFMLDQ5OTYyTCw0OTk2M0ws NDk5NjRMLDQ5OTY1TCw0OTk2NkwsNDk5NjdMLAorNDk5NjhMLDQ5OTY5TCw0OTk3MEwsNDk5NzFM LDQ5OTcyTCw0OTk3M0wsNDk5NzRMLDQ5OTc1TCw0OTk3NkwsNDk5NzdMLAorNDk5NzhMLDQ5OTc5 TCw0OTk4MEwsNDk5ODFMLDQ5OTgyTCw0OTk4M0wsNDk5ODRMLDQ5OTg1TCw0OTk4NkwsNDk5ODdM LAorNDk5ODhMLDQ5OTg5TCw0OTk5MEwsNDk5OTFMLDQ5OTkyTCw0OTk5M0wsNDk5OTRMLDQ5OTk1 TCw0OTk5NkwsNDk5OTdMLAorNDk5OThMLDQ5OTk5TCw1MDAwMEwsNTAwMDFMLDUwMDAyTCw1MDAw M0wsNTAwMDRMLDUwMDA1TCw1MDAwNkwsNTAwMDdMLAorNTAwMDhMLDUwMDA5TCw1MDAxMEwsNTAw MTFMLDUwMDEyTCw1MDAxM0wsNTAwMTRMLDUwMDE1TCw1MDAxNkwsNTAwMTdMLAorNTAwMThMLDUw MDE5TCw1MDAyMEwsNTAwMjFMLDUwMDIyTCw1MDAyM0wsNTAwMjRMLDUwMDI1TCw1MDAyNkwsNTAw MjdMLAorNTAwMjhMLDUwMDI5TCw1MDAzMEwsNTAwMzFMLDUwMDMyTCw1MDAzM0wsNTAwMzRMLDUw MDM1TCw1MDAzNkwsNTAwMzdMLAorNTAwMzhMLDUwMDM5TCw1MDA0MEwsNTAwNDFMLDUwMDQyTCw1 MDA0M0wsNTAwNDRMLDUwMDQ1TCw1MDA0NkwsNTAwNDdMLAorNTAwNDhMLDUwMDQ5TCw1MDA1MEws NTAwNTFMLDUwMDUyTCw1MDA1M0wsNTAwNTRMLDUwMDU1TCw1MDA1NkwsNTAwNTdMLAorNTAwNThM LDUwMDU5TCw1MDA2MEwsNTAwNjFMLDUwMDYyTCw1MDA2M0wsNTAwNjRMLDUwMDY1TCw1MDA2Nkws NTAwNjdMLAorNTAwNjhMLDUwMDY5TCw1MDA3MEwsNTAwNzFMLDUwMDcyTCw1MDA3M0wsNTAwNzRM LDUwMDc1TCw1MDA3NkwsNTAwNzdMLAorNTAwNzhMLDUwMDc5TCw1MDA4MEwsNTAwODFMLDUwMDgy TCw1MDA4M0wsNTAwODRMLDUwMDg1TCw1MDA4NkwsNTAwODdMLAorNTAwODhMLDUwMDg5TCw1MDA5 MEwsNTAwOTFMLDUwMDkyTCw1MDA5M0wsNTAwOTRMLDUwMDk1TCw1MDA5NkwsNTAwOTdMLAorNTAw OThMLDUwMDk5TCw1MDEwMEwsNTAxMDFMLDUwMTAyTCw1MDEwM0wsNTAxMDRMLDUwMTA1TCw1MDEw NkwsNTAxMDdMLAorNTAxMDhMLDUwMTA5TCw1MDExMEwsNTAxMTFMLDUwMTEyTCw1MDExM0wsNTAx MTRMLDUwMTE1TCw1MDExNkwsNTAxMTdMLAorNTAxMThMLDUwMTE5TCw1MDEyMEwsNTAxMjFMLDUw MTIyTCw1MDEyM0wsNTAxMjRMLDUwMTI1TCw1MDEyNkwsNTAxMjdMLAorNTAxMjhMLDUwMTI5TCw1 MDEzMEwsNTAxMzFMLDUwMTMyTCw1MDEzM0wsNTAxMzRMLDUwMTM1TCw1MDEzNkwsNTAxMzdMLAor NTAxMzhMLDUwMTM5TCw1MDE0MEwsNTAxNDFMLDUwMTQyTCw1MDE0M0wsNTAxNDRMLDUwMTQ1TCw1 MDE0NkwsNTAxNDdMLAorNTAxNDhMLDUwMTQ5TCw1MDE1MEwsNTAxNTFMLDUwMTUyTCw1MDE1M0ws NTAxNTRMLDUwMTU1TCw1MDE1NkwsNTAxNTdMLAorNTAxNThMLDUwMTU5TCw1MDE2MEwsNTAxNjFM LDUwMTYyTCw1MDE2M0wsNTAxNjRMLDUwMTY1TCw1MDE2NkwsNTAxNjdMLAorNTAxNjhMLDUwMTY5 TCw1MDE3MEwsNTAxNzFMLDUwMTcyTCw1MDE3M0wsNTAxNzRMLDUwMTc1TCw1MDE3NkwsNTAxNzdM LAorNTAxNzhMLDUwMTc5TCw1MDE4MEwsNTAxODFMLDUwMTgyTCw1MDE4M0wsNTAxODRMLDUwMTg1 TCw1MDE4NkwsNTAxODdMLAorNTAxODhMLDUwMTg5TCw1MDE5MEwsNTAxOTFMLDUwMTkyTCw1MDE5 M0wsNTAxOTRMLDUwMTk1TCw1MDE5NkwsNTAxOTdMLAorNTAxOThMLDUwMTk5TCw1MDIwMEwsNTAy MDFMLDUwMjAyTCw1MDIwM0wsNTAyMDRMLDUwMjA1TCw1MDIwNkwsNTAyMDdMLAorNTAyMDhMLDUw MjA5TCw1MDIxMEwsNTAyMTFMLDUwMjEyTCw1MDIxM0wsNTAyMTRMLDUwMjE1TCw1MDIxNkwsNTAy MTdMLAorNTAyMThMLDUwMjE5TCw1MDIyMEwsNTAyMjFMLDUwMjIyTCw1MDIyM0wsNTAyMjRMLDUw MjI1TCw1MDIyNkwsNTAyMjdMLAorNTAyMjhMLDUwMjI5TCw1MDIzMEwsNTAyMzFMLDUwMjMyTCw1 MDIzM0wsNTAyMzRMLDUwMjM1TCw1MDIzNkwsNTAyMzdMLAorNTAyMzhMLDUwMjM5TCw1MDI0MEws NTAyNDFMLDUwMjQyTCw1MDI0M0wsNTAyNDRMLDUwMjQ1TCw1MDI0NkwsNTAyNDdMLAorNTAyNDhM LDUwMjQ5TCw1MDI1MEwsNTAyNTFMLDUwMjUyTCw1MDI1M0wsNTAyNTRMLDUwMjU1TCw1MDI1Nkws NTAyNTdMLAorNTAyNThMLDUwMjU5TCw1MDI2MEwsNTAyNjFMLDUwMjYyTCw1MDI2M0wsNTAyNjRM LDUwMjY1TCw1MDI2NkwsNTAyNjdMLAorNTAyNjhMLDUwMjY5TCw1MDI3MEwsNTAyNzFMLDUwMjcy TCw1MDI3M0wsNTAyNzRMLDUwMjc1TCw1MDI3NkwsNTAyNzdMLAorNTAyNzhMLDUwMjc5TCw1MDI4 MEwsNTAyODFMLDUwMjgyTCw1MDI4M0wsNTAyODRMLDUwMjg1TCw1MDI4NkwsNTAyODdMLAorNTAy ODhMLDUwMjg5TCw1MDI5MEwsNTAyOTFMLDUwMjkyTCw1MDI5M0wsNTAyOTRMLDUwMjk1TCw1MDI5 NkwsNTAyOTdMLAorNTAyOThMLDUwMjk5TCw1MDMwMEwsNTAzMDFMLDUwMzAyTCw1MDMwM0wsNTAz MDRMLDUwMzA1TCw1MDMwNkwsNTAzMDdMLAorNTAzMDhMLDUwMzA5TCw1MDMxMEwsNTAzMTFMLDUw MzEyTCw1MDMxM0wsNTAzMTRMLDUwMzE1TCw1MDMxNkwsNTAzMTdMLAorNTAzMThMLDUwMzE5TCw1 MDMyMEwsNTAzMjFMLDUwMzIyTCw1MDMyM0wsNTAzMjRMLDUwMzI1TCw1MDMyNkwsNTAzMjdMLAor NTAzMjhMLDUwMzI5TCw1MDMzMEwsNTAzMzFMLDUwMzMyTCw1MDMzM0wsNTAzMzRMLDUwMzM1TCw1 MDMzNkwsNTAzMzdMLAorNTAzMzhMLDUwMzM5TCw1MDM0MEwsNTAzNDFMLDUwMzQyTCw1MDM0M0ws NTAzNDRMLDUwMzQ1TCw1MDM0NkwsNTAzNDdMLAorNTAzNDhMLDUwMzQ5TCw1MDM1MEwsNTAzNTFM LDUwMzUyTCw1MDM1M0wsNTAzNTRMLDUwMzU1TCw1MDM1NkwsNTAzNTdMLAorNTAzNThMLDUwMzU5 TCw1MDM2MEwsNTAzNjFMLDUwMzYyTCw1MDM2M0wsNTAzNjRMLDUwMzY1TCw1MDM2NkwsNTAzNjdM LAorNTAzNjhMLDUwMzY5TCw1MDM3MEwsNTAzNzFMLDUwMzcyTCw1MDM3M0wsNTAzNzRMLDUwMzc1 TCw1MDM3NkwsNTAzNzdMLAorNTAzNzhMLDUwMzc5TCw1MDM4MEwsNTAzODFMLDUwMzgyTCw1MDM4 M0wsNTAzODRMLDUwMzg1TCw1MDM4NkwsNTAzODdMLAorNTAzODhMLDUwMzg5TCw1MDM5MEwsNTAz OTFMLDUwMzkyTCw1MDM5M0wsNTAzOTRMLDUwMzk1TCw1MDM5NkwsNTAzOTdMLAorNTAzOThMLDUw Mzk5TCw1MDQwMEwsNTA0MDFMLDUwNDAyTCw1MDQwM0wsNTA0MDRMLDUwNDA1TCw1MDQwNkwsNTA0 MDdMLAorNTA0MDhMLDUwNDA5TCw1MDQxMEwsNTA0MTFMLDUwNDEyTCw1MDQxM0wsNTA0MTRMLDUw NDE1TCw1MDQxNkwsNTA0MTdMLAorNTA0MThMLDUwNDE5TCw1MDQyMEwsNTA0MjFMLDUwNDIyTCw1 MDQyM0wsNTA0MjRMLDUwNDI1TCw1MDQyNkwsNTA0MjdMLAorNTA0MjhMLDUwNDI5TCw1MDQzMEws NTA0MzFMLDUwNDMyTCw1MDQzM0wsNTA0MzRMLDUwNDM1TCw1MDQzNkwsNTA0MzdMLAorNTA0MzhM LDUwNDM5TCw1MDQ0MEwsNTA0NDFMLDUwNDQyTCw1MDQ0M0wsNTA0NDRMLDUwNDQ1TCw1MDQ0Nkws NTA0NDdMLAorNTA0NDhMLDUwNDQ5TCw1MDQ1MEwsNTA0NTFMLDUwNDUyTCw1MDQ1M0wsNTA0NTRM LDUwNDU1TCw1MDQ1NkwsNTA0NTdMLAorNTA0NThMLDUwNDU5TCw1MDQ2MEwsNTA0NjFMLDUwNDYy TCw1MDQ2M0wsNTA0NjRMLDUwNDY1TCw1MDQ2NkwsNTA0NjdMLAorNTA0NjhMLDUwNDY5TCw1MDQ3 MEwsNTA0NzFMLDUwNDcyTCw1MDQ3M0wsNTA0NzRMLDUwNDc1TCw1MDQ3NkwsNTA0NzdMLAorNTA0 NzhMLDUwNDc5TCw1MDQ4MEwsNTA0ODFMLDUwNDgyTCw1MDQ4M0wsNTA0ODRMLDUwNDg1TCw1MDQ4 NkwsNTA0ODdMLAorNTA0ODhMLDUwNDg5TCw1MDQ5MEwsNTA0OTFMLDUwNDkyTCw1MDQ5M0wsNTA0 OTRMLDUwNDk1TCw1MDQ5NkwsNTA0OTdMLAorNTA0OThMLDUwNDk5TCw1MDUwMEwsNTA1MDFMLDUw NTAyTCw1MDUwM0wsNTA1MDRMLDUwNTA1TCw1MDUwNkwsNTA1MDdMLAorNTA1MDhMLDUwNTA5TCw1 MDUxMEwsNTA1MTFMLDUwNTEyTCw1MDUxM0wsNTA1MTRMLDUwNTE1TCw1MDUxNkwsNTA1MTdMLAor NTA1MThMLDUwNTE5TCw1MDUyMEwsNTA1MjFMLDUwNTIyTCw1MDUyM0wsNTA1MjRMLDUwNTI1TCw1 MDUyNkwsNTA1MjdMLAorNTA1MjhMLDUwNTI5TCw1MDUzMEwsNTA1MzFMLDUwNTMyTCw1MDUzM0ws NTA1MzRMLDUwNTM1TCw1MDUzNkwsNTA1MzdMLAorNTA1MzhMLDUwNTM5TCw1MDU0MEwsNTA1NDFM LDUwNTQyTCw1MDU0M0wsNTA1NDRMLDUwNTQ1TCw1MDU0NkwsNTA1NDdMLAorNTA1NDhMLDUwNTQ5 TCw1MDU1MEwsNTA1NTFMLDUwNTUyTCw1MDU1M0wsNTA1NTRMLDUwNTU1TCw1MDU1NkwsNTA1NTdM LAorNTA1NThMLDUwNTU5TCw1MDU2MEwsNTA1NjFMLDUwNTYyTCw1MDU2M0wsNTA1NjRMLDUwNTY1 TCw1MDU2NkwsNTA1NjdMLAorNTA1NjhMLDUwNTY5TCw1MDU3MEwsNTA1NzFMLDUwNTcyTCw1MDU3 M0wsNTA1NzRMLDUwNTc1TCw1MDU3NkwsNTA1NzdMLAorNTA1NzhMLDUwNTc5TCw1MDU4MEwsNTA1 ODFMLDUwNTgyTCw1MDU4M0wsNTA1ODRMLDUwNTg1TCw1MDU4NkwsNTA1ODdMLAorNTA1ODhMLDUw NTg5TCw1MDU5MEwsNTA1OTFMLDUwNTkyTCw1MDU5M0wsNTA1OTRMLDUwNTk1TCw1MDU5NkwsNTA1 OTdMLAorNTA1OThMLDUwNTk5TCw1MDYwMEwsNTA2MDFMLDUwNjAyTCw1MDYwM0wsNTA2MDRMLDUw NjA1TCw1MDYwNkwsNTA2MDdMLAorNTA2MDhMLDUwNjA5TCw1MDYxMEwsNTA2MTFMLDUwNjEyTCw1 MDYxM0wsNTA2MTRMLDUwNjE1TCw1MDYxNkwsNTA2MTdMLAorNTA2MThMLDUwNjE5TCw1MDYyMEws NTA2MjFMLDUwNjIyTCw1MDYyM0wsNTA2MjRMLDUwNjI1TCw1MDYyNkwsNTA2MjdMLAorNTA2MjhM LDUwNjI5TCw1MDYzMEwsNTA2MzFMLDUwNjMyTCw1MDYzM0wsNTA2MzRMLDUwNjM1TCw1MDYzNkws NTA2MzdMLAorNTA2MzhMLDUwNjM5TCw1MDY0MEwsNTA2NDFMLDUwNjQyTCw1MDY0M0wsNTA2NDRM LDUwNjQ1TCw1MDY0NkwsNTA2NDdMLAorNTA2NDhMLDUwNjQ5TCw1MDY1MEwsNTA2NTFMLDUwNjUy TCw1MDY1M0wsNTA2NTRMLDUwNjU1TCw1MDY1NkwsNTA2NTdMLAorNTA2NThMLDUwNjU5TCw1MDY2 MEwsNTA2NjFMLDUwNjYyTCw1MDY2M0wsNTA2NjRMLDUwNjY1TCw1MDY2NkwsNTA2NjdMLAorNTA2 NjhMLDUwNjY5TCw1MDY3MEwsNTA2NzFMLDUwNjcyTCw1MDY3M0wsNTA2NzRMLDUwNjc1TCw1MDY3 NkwsNTA2NzdMLAorNTA2NzhMLDUwNjc5TCw1MDY4MEwsNTA2ODFMLDUwNjgyTCw1MDY4M0wsNTA2 ODRMLDUwNjg1TCw1MDY4NkwsNTA2ODdMLAorNTA2ODhMLDUwNjg5TCw1MDY5MEwsNTA2OTFMLDUw NjkyTCw1MDY5M0wsNTA2OTRMLDUwNjk1TCw1MDY5NkwsNTA2OTdMLAorNTA2OThMLDUwNjk5TCw1 MDcwMEwsNTA3MDFMLDUwNzAyTCw1MDcwM0wsNTA3MDRMLDUwNzA1TCw1MDcwNkwsNTA3MDdMLAor NTA3MDhMLDUwNzA5TCw1MDcxMEwsNTA3MTFMLDUwNzEyTCw1MDcxM0wsNTA3MTRMLDUwNzE1TCw1 MDcxNkwsNTA3MTdMLAorNTA3MThMLDUwNzE5TCw1MDcyMEwsNTA3MjFMLDUwNzIyTCw1MDcyM0ws NTA3MjRMLDUwNzI1TCw1MDcyNkwsNTA3MjdMLAorNTA3MjhMLDUwNzI5TCw1MDczMEwsNTA3MzFM LDUwNzMyTCw1MDczM0wsNTA3MzRMLDUwNzM1TCw1MDczNkwsNTA3MzdMLAorNTA3MzhMLDUwNzM5 TCw1MDc0MEwsNTA3NDFMLDUwNzQyTCw1MDc0M0wsNTA3NDRMLDUwNzQ1TCw1MDc0NkwsNTA3NDdM LAorNTA3NDhMLDUwNzQ5TCw1MDc1MEwsNTA3NTFMLDUwNzUyTCw1MDc1M0wsNTA3NTRMLDUwNzU1 TCw1MDc1NkwsNTA3NTdMLAorNTA3NThMLDUwNzU5TCw1MDc2MEwsNTA3NjFMLDUwNzYyTCw1MDc2 M0wsNTA3NjRMLDUwNzY1TCw1MDc2NkwsNTA3NjdMLAorNTA3NjhMLDUwNzY5TCw1MDc3MEwsNTA3 NzFMLDUwNzcyTCw1MDc3M0wsNTA3NzRMLDUwNzc1TCw1MDc3NkwsNTA3NzdMLAorNTA3NzhMLDUw Nzc5TCw1MDc4MEwsNTA3ODFMLDUwNzgyTCw1MDc4M0wsNTA3ODRMLDUwNzg1TCw1MDc4NkwsNTA3 ODdMLAorNTA3ODhMLDUwNzg5TCw1MDc5MEwsNTA3OTFMLDUwNzkyTCw1MDc5M0wsNTA3OTRMLDUw Nzk1TCw1MDc5NkwsNTA3OTdMLAorNTA3OThMLDUwNzk5TCw1MDgwMEwsNTA4MDFMLDUwODAyTCw1 MDgwM0wsNTA4MDRMLDUwODA1TCw1MDgwNkwsNTA4MDdMLAorNTA4MDhMLDUwODA5TCw1MDgxMEws NTA4MTFMLDUwODEyTCw1MDgxM0wsNTA4MTRMLDUwODE1TCw1MDgxNkwsNTA4MTdMLAorNTA4MThM LDUwODE5TCw1MDgyMEwsNTA4MjFMLDUwODIyTCw1MDgyM0wsNTA4MjRMLDUwODI1TCw1MDgyNkws NTA4MjdMLAorNTA4MjhMLDUwODI5TCw1MDgzMEwsNTA4MzFMLDUwODMyTCw1MDgzM0wsNTA4MzRM LDUwODM1TCw1MDgzNkwsNTA4MzdMLAorNTA4MzhMLDUwODM5TCw1MDg0MEwsNTA4NDFMLDUwODQy TCw1MDg0M0wsNTA4NDRMLDUwODQ1TCw1MDg0NkwsNTA4NDdMLAorNTA4NDhMLDUwODQ5TCw1MDg1 MEwsNTA4NTFMLDUwODUyTCw1MDg1M0wsNTA4NTRMLDUwODU1TCw1MDg1NkwsNTA4NTdMLAorNTA4 NThMLDUwODU5TCw1MDg2MEwsNTA4NjFMLDUwODYyTCw1MDg2M0wsNTA4NjRMLDUwODY1TCw1MDg2 NkwsNTA4NjdMLAorNTA4NjhMLDUwODY5TCw1MDg3MEwsNTA4NzFMLDUwODcyTCw1MDg3M0wsNTA4 NzRMLDUwODc1TCw1MDg3NkwsNTA4NzdMLAorNTA4NzhMLDUwODc5TCw1MDg4MEwsNTA4ODFMLDUw ODgyTCw1MDg4M0wsNTA4ODRMLDUwODg1TCw1MDg4NkwsNTA4ODdMLAorNTA4ODhMLDUwODg5TCw1 MDg5MEwsNTA4OTFMLDUwODkyTCw1MDg5M0wsNTA4OTRMLDUwODk1TCw1MDg5NkwsNTA4OTdMLAor NTA4OThMLDUwODk5TCw1MDkwMEwsNTA5MDFMLDUwOTAyTCw1MDkwM0wsNTA5MDRMLDUwOTA1TCw1 MDkwNkwsNTA5MDdMLAorNTA5MDhMLDUwOTA5TCw1MDkxMEwsNTA5MTFMLDUwOTEyTCw1MDkxM0ws NTA5MTRMLDUwOTE1TCw1MDkxNkwsNTA5MTdMLAorNTA5MThMLDUwOTE5TCw1MDkyMEwsNTA5MjFM LDUwOTIyTCw1MDkyM0wsNTA5MjRMLDUwOTI1TCw1MDkyNkwsNTA5MjdMLAorNTA5MjhMLDUwOTI5 TCw1MDkzMEwsNTA5MzFMLDUwOTMyTCw1MDkzM0wsNTA5MzRMLDUwOTM1TCw1MDkzNkwsNTA5MzdM LAorNTA5MzhMLDUwOTM5TCw1MDk0MEwsNTA5NDFMLDUwOTQyTCw1MDk0M0wsNTA5NDRMLDUwOTQ1 TCw1MDk0NkwsNTA5NDdMLAorNTA5NDhMLDUwOTQ5TCw1MDk1MEwsNTA5NTFMLDUwOTUyTCw1MDk1 M0wsNTA5NTRMLDUwOTU1TCw1MDk1NkwsNTA5NTdMLAorNTA5NThMLDUwOTU5TCw1MDk2MEwsNTA5 NjFMLDUwOTYyTCw1MDk2M0wsNTA5NjRMLDUwOTY1TCw1MDk2NkwsNTA5NjdMLAorNTA5NjhMLDUw OTY5TCw1MDk3MEwsNTA5NzFMLDUwOTcyTCw1MDk3M0wsNTA5NzRMLDUwOTc1TCw1MDk3NkwsNTA5 NzdMLAorNTA5NzhMLDUwOTc5TCw1MDk4MEwsNTA5ODFMLDUwOTgyTCw1MDk4M0wsNTA5ODRMLDUw OTg1TCw1MDk4NkwsNTA5ODdMLAorNTA5ODhMLDUwOTg5TCw1MDk5MEwsNTA5OTFMLDUwOTkyTCw1 MDk5M0wsNTA5OTRMLDUwOTk1TCw1MDk5NkwsNTA5OTdMLAorNTA5OThMLDUwOTk5TCw1MTAwMEws NTEwMDFMLDUxMDAyTCw1MTAwM0wsNTEwMDRMLDUxMDA1TCw1MTAwNkwsNTEwMDdMLAorNTEwMDhM LDUxMDA5TCw1MTAxMEwsNTEwMTFMLDUxMDEyTCw1MTAxM0wsNTEwMTRMLDUxMDE1TCw1MTAxNkws NTEwMTdMLAorNTEwMThMLDUxMDE5TCw1MTAyMEwsNTEwMjFMLDUxMDIyTCw1MTAyM0wsNTEwMjRM LDUxMDI1TCw1MTAyNkwsNTEwMjdMLAorNTEwMjhMLDUxMDI5TCw1MTAzMEwsNTEwMzFMLDUxMDMy TCw1MTAzM0wsNTEwMzRMLDUxMDM1TCw1MTAzNkwsNTEwMzdMLAorNTEwMzhMLDUxMDM5TCw1MTA0 MEwsNTEwNDFMLDUxMDQyTCw1MTA0M0wsNTEwNDRMLDUxMDQ1TCw1MTA0NkwsNTEwNDdMLAorNTEw NDhMLDUxMDQ5TCw1MTA1MEwsNTEwNTFMLDUxMDUyTCw1MTA1M0wsNTEwNTRMLDUxMDU1TCw1MTA1 NkwsNTEwNTdMLAorNTEwNThMLDUxMDU5TCw1MTA2MEwsNTEwNjFMLDUxMDYyTCw1MTA2M0wsNTEw NjRMLDUxMDY1TCw1MTA2NkwsNTEwNjdMLAorNTEwNjhMLDUxMDY5TCw1MTA3MEwsNTEwNzFMLDUx MDcyTCw1MTA3M0wsNTEwNzRMLDUxMDc1TCw1MTA3NkwsNTEwNzdMLAorNTEwNzhMLDUxMDc5TCw1 MTA4MEwsNTEwODFMLDUxMDgyTCw1MTA4M0wsNTEwODRMLDUxMDg1TCw1MTA4NkwsNTEwODdMLAor NTEwODhMLDUxMDg5TCw1MTA5MEwsNTEwOTFMLDUxMDkyTCw1MTA5M0wsNTEwOTRMLDUxMDk1TCw1 MTA5NkwsNTEwOTdMLAorNTEwOThMLDUxMDk5TCw1MTEwMEwsNTExMDFMLDUxMTAyTCw1MTEwM0ws NTExMDRMLDUxMTA1TCw1MTEwNkwsNTExMDdMLAorNTExMDhMLDUxMTA5TCw1MTExMEwsNTExMTFM LDUxMTEyTCw1MTExM0wsNTExMTRMLDUxMTE1TCw1MTExNkwsNTExMTdMLAorNTExMThMLDUxMTE5 TCw1MTEyMEwsNTExMjFMLDUxMTIyTCw1MTEyM0wsNTExMjRMLDUxMTI1TCw1MTEyNkwsNTExMjdM LAorNTExMjhMLDUxMTI5TCw1MTEzMEwsNTExMzFMLDUxMTMyTCw1MTEzM0wsNTExMzRMLDUxMTM1 TCw1MTEzNkwsNTExMzdMLAorNTExMzhMLDUxMTM5TCw1MTE0MEwsNTExNDFMLDUxMTQyTCw1MTE0 M0wsNTExNDRMLDUxMTQ1TCw1MTE0NkwsNTExNDdMLAorNTExNDhMLDUxMTQ5TCw1MTE1MEwsNTEx NTFMLDUxMTUyTCw1MTE1M0wsNTExNTRMLDUxMTU1TCw1MTE1NkwsNTExNTdMLAorNTExNThMLDUx MTU5TCw1MTE2MEwsNTExNjFMLDUxMTYyTCw1MTE2M0wsNTExNjRMLDUxMTY1TCw1MTE2NkwsNTEx NjdMLAorNTExNjhMLDUxMTY5TCw1MTE3MEwsNTExNzFMLDUxMTcyTCw1MTE3M0wsNTExNzRMLDUx MTc1TCw1MTE3NkwsNTExNzdMLAorNTExNzhMLDUxMTc5TCw1MTE4MEwsNTExODFMLDUxMTgyTCw1 MTE4M0wsNTExODRMLDUxMTg1TCw1MTE4NkwsNTExODdMLAorNTExODhMLDUxMTg5TCw1MTE5MEws NTExOTFMLDUxMTkyTCw1MTE5M0wsNTExOTRMLDUxMTk1TCw1MTE5NkwsNTExOTdMLAorNTExOThM LDUxMTk5TCw1MTIwMEwsNTEyMDFMLDUxMjAyTCw1MTIwM0wsNTEyMDRMLDUxMjA1TCw1MTIwNkws NTEyMDdMLAorNTEyMDhMLDUxMjA5TCw1MTIxMEwsNTEyMTFMLDUxMjEyTCw1MTIxM0wsNTEyMTRM LDUxMjE1TCw1MTIxNkwsNTEyMTdMLAorNTEyMThMLDUxMjE5TCw1MTIyMEwsNTEyMjFMLDUxMjIy TCw1MTIyM0wsNTEyMjRMLDUxMjI1TCw1MTIyNkwsNTEyMjdMLAorNTEyMjhMLDUxMjI5TCw1MTIz MEwsNTEyMzFMLDUxMjMyTCw1MTIzM0wsNTEyMzRMLDUxMjM1TCw1MTIzNkwsNTEyMzdMLAorNTEy MzhMLDUxMjM5TCw1MTI0MEwsNTEyNDFMLDUxMjQyTCw1MTI0M0wsNTEyNDRMLDUxMjQ1TCw1MTI0 NkwsNTEyNDdMLAorNTEyNDhMLDUxMjQ5TCw1MTI1MEwsNTEyNTFMLDUxMjUyTCw1MTI1M0wsNTEy NTRMLDUxMjU1TCw1MTI1NkwsNTEyNTdMLAorNTEyNThMLDUxMjU5TCw1MTI2MEwsNTEyNjFMLDUx MjYyTCw1MTI2M0wsNTEyNjRMLDUxMjY1TCw1MTI2NkwsNTEyNjdMLAorNTEyNjhMLDUxMjY5TCw1 MTI3MEwsNTEyNzFMLDUxMjcyTCw1MTI3M0wsNTEyNzRMLDUxMjc1TCw1MTI3NkwsNTEyNzdMLAor NTEyNzhMLDUxMjc5TCw1MTI4MEwsNTEyODFMLDUxMjgyTCw1MTI4M0wsNTEyODRMLDUxMjg1TCw1 MTI4NkwsNTEyODdMLAorNTEyODhMLDUxMjg5TCw1MTI5MEwsNTEyOTFMLDUxMjkyTCw1MTI5M0ws NTEyOTRMLDUxMjk1TCw1MTI5NkwsNTEyOTdMLAorNTEyOThMLDUxMjk5TCw1MTMwMEwsNTEzMDFM LDUxMzAyTCw1MTMwM0wsNTEzMDRMLDUxMzA1TCw1MTMwNkwsNTEzMDdMLAorNTEzMDhMLDUxMzA5 TCw1MTMxMEwsNTEzMTFMLDUxMzEyTCw1MTMxM0wsNTEzMTRMLDUxMzE1TCw1MTMxNkwsNTEzMTdM LAorNTEzMThMLDUxMzE5TCw1MTMyMEwsNTEzMjFMLDUxMzIyTCw1MTMyM0wsNTEzMjRMLDUxMzI1 TCw1MTMyNkwsNTEzMjdMLAorNTEzMjhMLDUxMzI5TCw1MTMzMEwsNTEzMzFMLDUxMzMyTCw1MTMz M0wsNTEzMzRMLDUxMzM1TCw1MTMzNkwsNTEzMzdMLAorNTEzMzhMLDUxMzM5TCw1MTM0MEwsNTEz NDFMLDUxMzQyTCw1MTM0M0wsNTEzNDRMLDUxMzQ1TCw1MTM0NkwsNTEzNDdMLAorNTEzNDhMLDUx MzQ5TCw1MTM1MEwsNTEzNTFMLDUxMzUyTCw1MTM1M0wsNTEzNTRMLDUxMzU1TCw1MTM1NkwsNTEz NTdMLAorNTEzNThMLDUxMzU5TCw1MTM2MEwsNTEzNjFMLDUxMzYyTCw1MTM2M0wsNTEzNjRMLDUx MzY1TCw1MTM2NkwsNTEzNjdMLAorNTEzNjhMLDUxMzY5TCw1MTM3MEwsNTEzNzFMLDUxMzcyTCw1 MTM3M0wsNTEzNzRMLDUxMzc1TCw1MTM3NkwsNTEzNzdMLAorNTEzNzhMLDUxMzc5TCw1MTM4MEws NTEzODFMLDUxMzgyTCw1MTM4M0wsNTEzODRMLDUxMzg1TCw1MTM4NkwsNTEzODdMLAorNTEzODhM LDUxMzg5TCw1MTM5MEwsNTEzOTFMLDUxMzkyTCw1MTM5M0wsNTEzOTRMLDUxMzk1TCw1MTM5Nkws NTEzOTdMLAorNTEzOThMLDUxMzk5TCw1MTQwMEwsNTE0MDFMLDUxNDAyTCw1MTQwM0wsNTE0MDRM LDUxNDA1TCw1MTQwNkwsNTE0MDdMLAorNTE0MDhMLDUxNDA5TCw1MTQxMEwsNTE0MTFMLDUxNDEy TCw1MTQxM0wsNTE0MTRMLDUxNDE1TCw1MTQxNkwsNTE0MTdMLAorNTE0MThMLDUxNDE5TCw1MTQy MEwsNTE0MjFMLDUxNDIyTCw1MTQyM0wsNTE0MjRMLDUxNDI1TCw1MTQyNkwsNTE0MjdMLAorNTE0 MjhMLDUxNDI5TCw1MTQzMEwsNTE0MzFMLDUxNDMyTCw1MTQzM0wsNTE0MzRMLDUxNDM1TCw1MTQz NkwsNTE0MzdMLAorNTE0MzhMLDUxNDM5TCw1MTQ0MEwsNTE0NDFMLDUxNDQyTCw1MTQ0M0wsNTE0 NDRMLDUxNDQ1TCw1MTQ0NkwsNTE0NDdMLAorNTE0NDhMLDUxNDQ5TCw1MTQ1MEwsNTE0NTFMLDUx NDUyTCw1MTQ1M0wsNTE0NTRMLDUxNDU1TCw1MTQ1NkwsNTE0NTdMLAorNTE0NThMLDUxNDU5TCw1 MTQ2MEwsNTE0NjFMLDUxNDYyTCw1MTQ2M0wsNTE0NjRMLDUxNDY1TCw1MTQ2NkwsNTE0NjdMLAor NTE0NjhMLDUxNDY5TCw1MTQ3MEwsNTE0NzFMLDUxNDcyTCw1MTQ3M0wsNTE0NzRMLDUxNDc1TCw1 MTQ3NkwsNTE0NzdMLAorNTE0NzhMLDUxNDc5TCw1MTQ4MEwsNTE0ODFMLDUxNDgyTCw1MTQ4M0ws NTE0ODRMLDUxNDg1TCw1MTQ4NkwsNTE0ODdMLAorNTE0ODhMLDUxNDg5TCw1MTQ5MEwsNTE0OTFM LDUxNDkyTCw1MTQ5M0wsNTE0OTRMLDUxNDk1TCw1MTQ5NkwsNTE0OTdMLAorNTE0OThMLDUxNDk5 TCw1MTUwMEwsNTE1MDFMLDUxNTAyTCw1MTUwM0wsNTE1MDRMLDUxNTA1TCw1MTUwNkwsNTE1MDdM LAorNTE1MDhMLDUxNTA5TCw1MTUxMEwsNTE1MTFMLDUxNTEyTCw1MTUxM0wsNTE1MTRMLDUxNTE1 TCw1MTUxNkwsNTE1MTdMLAorNTE1MThMLDUxNTE5TCw1MTUyMEwsNTE1MjFMLDUxNTIyTCw1MTUy M0wsNTE1MjRMLDUxNTI1TCw1MTUyNkwsNTE1MjdMLAorNTE1MjhMLDUxNTI5TCw1MTUzMEwsNTE1 MzFMLDUxNTMyTCw1MTUzM0wsNTE1MzRMLDUxNTM1TCw1MTUzNkwsNTE1MzdMLAorNTE1MzhMLDUx NTM5TCw1MTU0MEwsNTE1NDFMLDUxNTQyTCw1MTU0M0wsNTE1NDRMLDUxNTQ1TCw1MTU0NkwsNTE1 NDdMLAorNTE1NDhMLDUxNTQ5TCw1MTU1MEwsNTE1NTFMLDUxNTUyTCw1MTU1M0wsNTE1NTRMLDUx NTU1TCw1MTU1NkwsNTE1NTdMLAorNTE1NThMLDUxNTU5TCw1MTU2MEwsNTE1NjFMLDUxNTYyTCw1 MTU2M0wsNTE1NjRMLDUxNTY1TCw1MTU2NkwsNTE1NjdMLAorNTE1NjhMLDUxNTY5TCw1MTU3MEws NTE1NzFMLDUxNTcyTCw1MTU3M0wsNTE1NzRMLDUxNTc1TCw1MTU3NkwsNTE1NzdMLAorNTE1NzhM LDUxNTc5TCw1MTU4MEwsNTE1ODFMLDUxNTgyTCw1MTU4M0wsNTE1ODRMLDUxNTg1TCw1MTU4Nkws NTE1ODdMLAorNTE1ODhMLDUxNTg5TCw1MTU5MEwsNTE1OTFMLDUxNTkyTCw1MTU5M0wsNTE1OTRM LDUxNTk1TCw1MTU5NkwsNTE1OTdMLAorNTE1OThMLDUxNTk5TCw1MTYwMEwsNTE2MDFMLDUxNjAy TCw1MTYwM0wsNTE2MDRMLDUxNjA1TCw1MTYwNkwsNTE2MDdMLAorNTE2MDhMLDUxNjA5TCw1MTYx MEwsNTE2MTFMLDUxNjEyTCw1MTYxM0wsNTE2MTRMLDUxNjE1TCw1MTYxNkwsNTE2MTdMLAorNTE2 MThMLDUxNjE5TCw1MTYyMEwsNTE2MjFMLDUxNjIyTCw1MTYyM0wsNTE2MjRMLDUxNjI1TCw1MTYy NkwsNTE2MjdMLAorNTE2MjhMLDUxNjI5TCw1MTYzMEwsNTE2MzFMLDUxNjMyTCw1MTYzM0wsNTE2 MzRMLDUxNjM1TCw1MTYzNkwsNTE2MzdMLAorNTE2MzhMLDUxNjM5TCw1MTY0MEwsNTE2NDFMLDUx NjQyTCw1MTY0M0wsNTE2NDRMLDUxNjQ1TCw1MTY0NkwsNTE2NDdMLAorNTE2NDhMLDUxNjQ5TCw1 MTY1MEwsNTE2NTFMLDUxNjUyTCw1MTY1M0wsNTE2NTRMLDUxNjU1TCw1MTY1NkwsNTE2NTdMLAor NTE2NThMLDUxNjU5TCw1MTY2MEwsNTE2NjFMLDUxNjYyTCw1MTY2M0wsNTE2NjRMLDUxNjY1TCw1 MTY2NkwsNTE2NjdMLAorNTE2NjhMLDUxNjY5TCw1MTY3MEwsNTE2NzFMLDUxNjcyTCw1MTY3M0ws NTE2NzRMLDUxNjc1TCw1MTY3NkwsNTE2NzdMLAorNTE2NzhMLDUxNjc5TCw1MTY4MEwsNTE2ODFM LDUxNjgyTCw1MTY4M0wsNTE2ODRMLDUxNjg1TCw1MTY4NkwsNTE2ODdMLAorNTE2ODhMLDUxNjg5 TCw1MTY5MEwsNTE2OTFMLDUxNjkyTCw1MTY5M0wsNTE2OTRMLDUxNjk1TCw1MTY5NkwsNTE2OTdM LAorNTE2OThMLDUxNjk5TCw1MTcwMEwsNTE3MDFMLDUxNzAyTCw1MTcwM0wsNTE3MDRMLDUxNzA1 TCw1MTcwNkwsNTE3MDdMLAorNTE3MDhMLDUxNzA5TCw1MTcxMEwsNTE3MTFMLDUxNzEyTCw1MTcx M0wsNTE3MTRMLDUxNzE1TCw1MTcxNkwsNTE3MTdMLAorNTE3MThMLDUxNzE5TCw1MTcyMEwsNTE3 MjFMLDUxNzIyTCw1MTcyM0wsNTE3MjRMLDUxNzI1TCw1MTcyNkwsNTE3MjdMLAorNTE3MjhMLDUx NzI5TCw1MTczMEwsNTE3MzFMLDUxNzMyTCw1MTczM0wsNTE3MzRMLDUxNzM1TCw1MTczNkwsNTE3 MzdMLAorNTE3MzhMLDUxNzM5TCw1MTc0MEwsNTE3NDFMLDUxNzQyTCw1MTc0M0wsNTE3NDRMLDUx NzQ1TCw1MTc0NkwsNTE3NDdMLAorNTE3NDhMLDUxNzQ5TCw1MTc1MEwsNTE3NTFMLDUxNzUyTCw1 MTc1M0wsNTE3NTRMLDUxNzU1TCw1MTc1NkwsNTE3NTdMLAorNTE3NThMLDUxNzU5TCw1MTc2MEws NTE3NjFMLDUxNzYyTCw1MTc2M0wsNTE3NjRMLDUxNzY1TCw1MTc2NkwsNTE3NjdMLAorNTE3NjhM LDUxNzY5TCw1MTc3MEwsNTE3NzFMLDUxNzcyTCw1MTc3M0wsNTE3NzRMLDUxNzc1TCw1MTc3Nkws NTE3NzdMLAorNTE3NzhMLDUxNzc5TCw1MTc4MEwsNTE3ODFMLDUxNzgyTCw1MTc4M0wsNTE3ODRM LDUxNzg1TCw1MTc4NkwsNTE3ODdMLAorNTE3ODhMLDUxNzg5TCw1MTc5MEwsNTE3OTFMLDUxNzky TCw1MTc5M0wsNTE3OTRMLDUxNzk1TCw1MTc5NkwsNTE3OTdMLAorNTE3OThMLDUxNzk5TCw1MTgw MEwsNTE4MDFMLDUxODAyTCw1MTgwM0wsNTE4MDRMLDUxODA1TCw1MTgwNkwsNTE4MDdMLAorNTE4 MDhMLDUxODA5TCw1MTgxMEwsNTE4MTFMLDUxODEyTCw1MTgxM0wsNTE4MTRMLDUxODE1TCw1MTgx NkwsNTE4MTdMLAorNTE4MThMLDUxODE5TCw1MTgyMEwsNTE4MjFMLDUxODIyTCw1MTgyM0wsNTE4 MjRMLDUxODI1TCw1MTgyNkwsNTE4MjdMLAorNTE4MjhMLDUxODI5TCw1MTgzMEwsNTE4MzFMLDUx ODMyTCw1MTgzM0wsNTE4MzRMLDUxODM1TCw1MTgzNkwsNTE4MzdMLAorNTE4MzhMLDUxODM5TCw1 MTg0MEwsNTE4NDFMLDUxODQyTCw1MTg0M0wsNTE4NDRMLDUxODQ1TCw1MTg0NkwsNTE4NDdMLAor NTE4NDhMLDUxODQ5TCw1MTg1MEwsNTE4NTFMLDUxODUyTCw1MTg1M0wsNTE4NTRMLDUxODU1TCw1 MTg1NkwsNTE4NTdMLAorNTE4NThMLDUxODU5TCw1MTg2MEwsNTE4NjFMLDUxODYyTCw1MTg2M0ws NTE4NjRMLDUxODY1TCw1MTg2NkwsNTE4NjdMLAorNTE4NjhMLDUxODY5TCw1MTg3MEwsNTE4NzFM LDUxODcyTCw1MTg3M0wsNTE4NzRMLDUxODc1TCw1MTg3NkwsNTE4NzdMLAorNTE4NzhMLDUxODc5 TCw1MTg4MEwsNTE4ODFMLDUxODgyTCw1MTg4M0wsNTE4ODRMLDUxODg1TCw1MTg4NkwsNTE4ODdM LAorNTE4ODhMLDUxODg5TCw1MTg5MEwsNTE4OTFMLDUxODkyTCw1MTg5M0wsNTE4OTRMLDUxODk1 TCw1MTg5NkwsNTE4OTdMLAorNTE4OThMLDUxODk5TCw1MTkwMEwsNTE5MDFMLDUxOTAyTCw1MTkw M0wsNTE5MDRMLDUxOTA1TCw1MTkwNkwsNTE5MDdMLAorNTE5MDhMLDUxOTA5TCw1MTkxMEwsNTE5 MTFMLDUxOTEyTCw1MTkxM0wsNTE5MTRMLDUxOTE1TCw1MTkxNkwsNTE5MTdMLAorNTE5MThMLDUx OTE5TCw1MTkyMEwsNTE5MjFMLDUxOTIyTCw1MTkyM0wsNTE5MjRMLDUxOTI1TCw1MTkyNkwsNTE5 MjdMLAorNTE5MjhMLDUxOTI5TCw1MTkzMEwsNTE5MzFMLDUxOTMyTCw1MTkzM0wsNTE5MzRMLDUx OTM1TCw1MTkzNkwsNTE5MzdMLAorNTE5MzhMLDUxOTM5TCw1MTk0MEwsNTE5NDFMLDUxOTQyTCw1 MTk0M0wsNTE5NDRMLDUxOTQ1TCw1MTk0NkwsNTE5NDdMLAorNTE5NDhMLDUxOTQ5TCw1MTk1MEws NTE5NTFMLDUxOTUyTCw1MTk1M0wsNTE5NTRMLDUxOTU1TCw1MTk1NkwsNTE5NTdMLAorNTE5NThM LDUxOTU5TCw1MTk2MEwsNTE5NjFMLDUxOTYyTCw1MTk2M0wsNTE5NjRMLDUxOTY1TCw1MTk2Nkws NTE5NjdMLAorNTE5NjhMLDUxOTY5TCw1MTk3MEwsNTE5NzFMLDUxOTcyTCw1MTk3M0wsNTE5NzRM LDUxOTc1TCw1MTk3NkwsNTE5NzdMLAorNTE5NzhMLDUxOTc5TCw1MTk4MEwsNTE5ODFMLDUxOTgy TCw1MTk4M0wsNTE5ODRMLDUxOTg1TCw1MTk4NkwsNTE5ODdMLAorNTE5ODhMLDUxOTg5TCw1MTk5 MEwsNTE5OTFMLDUxOTkyTCw1MTk5M0wsNTE5OTRMLDUxOTk1TCw1MTk5NkwsNTE5OTdMLAorNTE5 OThMLDUxOTk5TCw1MjAwMEwsNTIwMDFMLDUyMDAyTCw1MjAwM0wsNTIwMDRMLDUyMDA1TCw1MjAw NkwsNTIwMDdMLAorNTIwMDhMLDUyMDA5TCw1MjAxMEwsNTIwMTFMLDUyMDEyTCw1MjAxM0wsNTIw MTRMLDUyMDE1TCw1MjAxNkwsNTIwMTdMLAorNTIwMThMLDUyMDE5TCw1MjAyMEwsNTIwMjFMLDUy MDIyTCw1MjAyM0wsNTIwMjRMLDUyMDI1TCw1MjAyNkwsNTIwMjdMLAorNTIwMjhMLDUyMDI5TCw1 MjAzMEwsNTIwMzFMLDUyMDMyTCw1MjAzM0wsNTIwMzRMLDUyMDM1TCw1MjAzNkwsNTIwMzdMLAor NTIwMzhMLDUyMDM5TCw1MjA0MEwsNTIwNDFMLDUyMDQyTCw1MjA0M0wsNTIwNDRMLDUyMDQ1TCw1 MjA0NkwsNTIwNDdMLAorNTIwNDhMLDUyMDQ5TCw1MjA1MEwsNTIwNTFMLDUyMDUyTCw1MjA1M0ws NTIwNTRMLDUyMDU1TCw1MjA1NkwsNTIwNTdMLAorNTIwNThMLDUyMDU5TCw1MjA2MEwsNTIwNjFM LDUyMDYyTCw1MjA2M0wsNTIwNjRMLDUyMDY1TCw1MjA2NkwsNTIwNjdMLAorNTIwNjhMLDUyMDY5 TCw1MjA3MEwsNTIwNzFMLDUyMDcyTCw1MjA3M0wsNTIwNzRMLDUyMDc1TCw1MjA3NkwsNTIwNzdM LAorNTIwNzhMLDUyMDc5TCw1MjA4MEwsNTIwODFMLDUyMDgyTCw1MjA4M0wsNTIwODRMLDUyMDg1 TCw1MjA4NkwsNTIwODdMLAorNTIwODhMLDUyMDg5TCw1MjA5MEwsNTIwOTFMLDUyMDkyTCw1MjA5 M0wsNTIwOTRMLDUyMDk1TCw1MjA5NkwsNTIwOTdMLAorNTIwOThMLDUyMDk5TCw1MjEwMEwsNTIx MDFMLDUyMTAyTCw1MjEwM0wsNTIxMDRMLDUyMTA1TCw1MjEwNkwsNTIxMDdMLAorNTIxMDhMLDUy MTA5TCw1MjExMEwsNTIxMTFMLDUyMTEyTCw1MjExM0wsNTIxMTRMLDUyMTE1TCw1MjExNkwsNTIx MTdMLAorNTIxMThMLDUyMTE5TCw1MjEyMEwsNTIxMjFMLDUyMTIyTCw1MjEyM0wsNTIxMjRMLDUy MTI1TCw1MjEyNkwsNTIxMjdMLAorNTIxMjhMLDUyMTI5TCw1MjEzMEwsNTIxMzFMLDUyMTMyTCw1 MjEzM0wsNTIxMzRMLDUyMTM1TCw1MjEzNkwsNTIxMzdMLAorNTIxMzhMLDUyMTM5TCw1MjE0MEws NTIxNDFMLDUyMTQyTCw1MjE0M0wsNTIxNDRMLDUyMTQ1TCw1MjE0NkwsNTIxNDdMLAorNTIxNDhM LDUyMTQ5TCw1MjE1MEwsNTIxNTFMLDUyMTUyTCw1MjE1M0wsNTIxNTRMLDUyMTU1TCw1MjE1Nkws NTIxNTdMLAorNTIxNThMLDUyMTU5TCw1MjE2MEwsNTIxNjFMLDUyMTYyTCw1MjE2M0wsNTIxNjRM LDUyMTY1TCw1MjE2NkwsNTIxNjdMLAorNTIxNjhMLDUyMTY5TCw1MjE3MEwsNTIxNzFMLDUyMTcy TCw1MjE3M0wsNTIxNzRMLDUyMTc1TCw1MjE3NkwsNTIxNzdMLAorNTIxNzhMLDUyMTc5TCw1MjE4 MEwsNTIxODFMLDUyMTgyTCw1MjE4M0wsNTIxODRMLDUyMTg1TCw1MjE4NkwsNTIxODdMLAorNTIx ODhMLDUyMTg5TCw1MjE5MEwsNTIxOTFMLDUyMTkyTCw1MjE5M0wsNTIxOTRMLDUyMTk1TCw1MjE5 NkwsNTIxOTdMLAorNTIxOThMLDUyMTk5TCw1MjIwMEwsNTIyMDFMLDUyMjAyTCw1MjIwM0wsNTIy MDRMLDUyMjA1TCw1MjIwNkwsNTIyMDdMLAorNTIyMDhMLDUyMjA5TCw1MjIxMEwsNTIyMTFMLDUy MjEyTCw1MjIxM0wsNTIyMTRMLDUyMjE1TCw1MjIxNkwsNTIyMTdMLAorNTIyMThMLDUyMjE5TCw1 MjIyMEwsNTIyMjFMLDUyMjIyTCw1MjIyM0wsNTIyMjRMLDUyMjI1TCw1MjIyNkwsNTIyMjdMLAor NTIyMjhMLDUyMjI5TCw1MjIzMEwsNTIyMzFMLDUyMjMyTCw1MjIzM0wsNTIyMzRMLDUyMjM1TCw1 MjIzNkwsNTIyMzdMLAorNTIyMzhMLDUyMjM5TCw1MjI0MEwsNTIyNDFMLDUyMjQyTCw1MjI0M0ws NTIyNDRMLDUyMjQ1TCw1MjI0NkwsNTIyNDdMLAorNTIyNDhMLDUyMjQ5TCw1MjI1MEwsNTIyNTFM LDUyMjUyTCw1MjI1M0wsNTIyNTRMLDUyMjU1TCw1MjI1NkwsNTIyNTdMLAorNTIyNThMLDUyMjU5 TCw1MjI2MEwsNTIyNjFMLDUyMjYyTCw1MjI2M0wsNTIyNjRMLDUyMjY1TCw1MjI2NkwsNTIyNjdM LAorNTIyNjhMLDUyMjY5TCw1MjI3MEwsNTIyNzFMLDUyMjcyTCw1MjI3M0wsNTIyNzRMLDUyMjc1 TCw1MjI3NkwsNTIyNzdMLAorNTIyNzhMLDUyMjc5TCw1MjI4MEwsNTIyODFMLDUyMjgyTCw1MjI4 M0wsNTIyODRMLDUyMjg1TCw1MjI4NkwsNTIyODdMLAorNTIyODhMLDUyMjg5TCw1MjI5MEwsNTIy OTFMLDUyMjkyTCw1MjI5M0wsNTIyOTRMLDUyMjk1TCw1MjI5NkwsNTIyOTdMLAorNTIyOThMLDUy Mjk5TCw1MjMwMEwsNTIzMDFMLDUyMzAyTCw1MjMwM0wsNTIzMDRMLDUyMzA1TCw1MjMwNkwsNTIz MDdMLAorNTIzMDhMLDUyMzA5TCw1MjMxMEwsNTIzMTFMLDUyMzEyTCw1MjMxM0wsNTIzMTRMLDUy MzE1TCw1MjMxNkwsNTIzMTdMLAorNTIzMThMLDUyMzE5TCw1MjMyMEwsNTIzMjFMLDUyMzIyTCw1 MjMyM0wsNTIzMjRMLDUyMzI1TCw1MjMyNkwsNTIzMjdMLAorNTIzMjhMLDUyMzI5TCw1MjMzMEws NTIzMzFMLDUyMzMyTCw1MjMzM0wsNTIzMzRMLDUyMzM1TCw1MjMzNkwsNTIzMzdMLAorNTIzMzhM LDUyMzM5TCw1MjM0MEwsNTIzNDFMLDUyMzQyTCw1MjM0M0wsNTIzNDRMLDUyMzQ1TCw1MjM0Nkws NTIzNDdMLAorNTIzNDhMLDUyMzQ5TCw1MjM1MEwsNTIzNTFMLDUyMzUyTCw1MjM1M0wsNTIzNTRM LDUyMzU1TCw1MjM1NkwsNTIzNTdMLAorNTIzNThMLDUyMzU5TCw1MjM2MEwsNTIzNjFMLDUyMzYy TCw1MjM2M0wsNTIzNjRMLDUyMzY1TCw1MjM2NkwsNTIzNjdMLAorNTIzNjhMLDUyMzY5TCw1MjM3 MEwsNTIzNzFMLDUyMzcyTCw1MjM3M0wsNTIzNzRMLDUyMzc1TCw1MjM3NkwsNTIzNzdMLAorNTIz NzhMLDUyMzc5TCw1MjM4MEwsNTIzODFMLDUyMzgyTCw1MjM4M0wsNTIzODRMLDUyMzg1TCw1MjM4 NkwsNTIzODdMLAorNTIzODhMLDUyMzg5TCw1MjM5MEwsNTIzOTFMLDUyMzkyTCw1MjM5M0wsNTIz OTRMLDUyMzk1TCw1MjM5NkwsNTIzOTdMLAorNTIzOThMLDUyMzk5TCw1MjQwMEwsNTI0MDFMLDUy NDAyTCw1MjQwM0wsNTI0MDRMLDUyNDA1TCw1MjQwNkwsNTI0MDdMLAorNTI0MDhMLDUyNDA5TCw1 MjQxMEwsNTI0MTFMLDUyNDEyTCw1MjQxM0wsNTI0MTRMLDUyNDE1TCw1MjQxNkwsNTI0MTdMLAor NTI0MThMLDUyNDE5TCw1MjQyMEwsNTI0MjFMLDUyNDIyTCw1MjQyM0wsNTI0MjRMLDUyNDI1TCw1 MjQyNkwsNTI0MjdMLAorNTI0MjhMLDUyNDI5TCw1MjQzMEwsNTI0MzFMLDUyNDMyTCw1MjQzM0ws NTI0MzRMLDUyNDM1TCw1MjQzNkwsNTI0MzdMLAorNTI0MzhMLDUyNDM5TCw1MjQ0MEwsNTI0NDFM LDUyNDQyTCw1MjQ0M0wsNTI0NDRMLDUyNDQ1TCw1MjQ0NkwsNTI0NDdMLAorNTI0NDhMLDUyNDQ5 TCw1MjQ1MEwsNTI0NTFMLDUyNDUyTCw1MjQ1M0wsNTI0NTRMLDUyNDU1TCw1MjQ1NkwsNTI0NTdM LAorNTI0NThMLDUyNDU5TCw1MjQ2MEwsNTI0NjFMLDUyNDYyTCw1MjQ2M0wsNTI0NjRMLDUyNDY1 TCw1MjQ2NkwsNTI0NjdMLAorNTI0NjhMLDUyNDY5TCw1MjQ3MEwsNTI0NzFMLDUyNDcyTCw1MjQ3 M0wsNTI0NzRMLDUyNDc1TCw1MjQ3NkwsNTI0NzdMLAorNTI0NzhMLDUyNDc5TCw1MjQ4MEwsNTI0 ODFMLDUyNDgyTCw1MjQ4M0wsNTI0ODRMLDUyNDg1TCw1MjQ4NkwsNTI0ODdMLAorNTI0ODhMLDUy NDg5TCw1MjQ5MEwsNTI0OTFMLDUyNDkyTCw1MjQ5M0wsNTI0OTRMLDUyNDk1TCw1MjQ5NkwsNTI0 OTdMLAorNTI0OThMLDUyNDk5TCw1MjUwMEwsNTI1MDFMLDUyNTAyTCw1MjUwM0wsNTI1MDRMLDUy NTA1TCw1MjUwNkwsNTI1MDdMLAorNTI1MDhMLDUyNTA5TCw1MjUxMEwsNTI1MTFMLDUyNTEyTCw1 MjUxM0wsNTI1MTRMLDUyNTE1TCw1MjUxNkwsNTI1MTdMLAorNTI1MThMLDUyNTE5TCw1MjUyMEws NTI1MjFMLDUyNTIyTCw1MjUyM0wsNTI1MjRMLDUyNTI1TCw1MjUyNkwsNTI1MjdMLAorNTI1MjhM LDUyNTI5TCw1MjUzMEwsNTI1MzFMLDUyNTMyTCw1MjUzM0wsNTI1MzRMLDUyNTM1TCw1MjUzNkws NTI1MzdMLAorNTI1MzhMLDUyNTM5TCw1MjU0MEwsNTI1NDFMLDUyNTQyTCw1MjU0M0wsNTI1NDRM LDUyNTQ1TCw1MjU0NkwsNTI1NDdMLAorNTI1NDhMLDUyNTQ5TCw1MjU1MEwsNTI1NTFMLDUyNTUy TCw1MjU1M0wsNTI1NTRMLDUyNTU1TCw1MjU1NkwsNTI1NTdMLAorNTI1NThMLDUyNTU5TCw1MjU2 MEwsNTI1NjFMLDUyNTYyTCw1MjU2M0wsNTI1NjRMLDUyNTY1TCw1MjU2NkwsNTI1NjdMLAorNTI1 NjhMLDUyNTY5TCw1MjU3MEwsNTI1NzFMLDUyNTcyTCw1MjU3M0wsNTI1NzRMLDUyNTc1TCw1MjU3 NkwsNTI1NzdMLAorNTI1NzhMLDUyNTc5TCw1MjU4MEwsNTI1ODFMLDUyNTgyTCw1MjU4M0wsNTI1 ODRMLDUyNTg1TCw1MjU4NkwsNTI1ODdMLAorNTI1ODhMLDUyNTg5TCw1MjU5MEwsNTI1OTFMLDUy NTkyTCw1MjU5M0wsNTI1OTRMLDUyNTk1TCw1MjU5NkwsNTI1OTdMLAorNTI1OThMLDUyNTk5TCw1 MjYwMEwsNTI2MDFMLDUyNjAyTCw1MjYwM0wsNTI2MDRMLDUyNjA1TCw1MjYwNkwsNTI2MDdMLAor NTI2MDhMLDUyNjA5TCw1MjYxMEwsNTI2MTFMLDUyNjEyTCw1MjYxM0wsNTI2MTRMLDUyNjE1TCw1 MjYxNkwsNTI2MTdMLAorNTI2MThMLDUyNjE5TCw1MjYyMEwsNTI2MjFMLDUyNjIyTCw1MjYyM0ws NTI2MjRMLDUyNjI1TCw1MjYyNkwsNTI2MjdMLAorNTI2MjhMLDUyNjI5TCw1MjYzMEwsNTI2MzFM LDUyNjMyTCw1MjYzM0wsNTI2MzRMLDUyNjM1TCw1MjYzNkwsNTI2MzdMLAorNTI2MzhMLDUyNjM5 TCw1MjY0MEwsNTI2NDFMLDUyNjQyTCw1MjY0M0wsNTI2NDRMLDUyNjQ1TCw1MjY0NkwsNTI2NDdM LAorNTI2NDhMLDUyNjQ5TCw1MjY1MEwsNTI2NTFMLDUyNjUyTCw1MjY1M0wsNTI2NTRMLDUyNjU1 TCw1MjY1NkwsNTI2NTdMLAorNTI2NThMLDUyNjU5TCw1MjY2MEwsNTI2NjFMLDUyNjYyTCw1MjY2 M0wsNTI2NjRMLDUyNjY1TCw1MjY2NkwsNTI2NjdMLAorNTI2NjhMLDUyNjY5TCw1MjY3MEwsNTI2 NzFMLDUyNjcyTCw1MjY3M0wsNTI2NzRMLDUyNjc1TCw1MjY3NkwsNTI2NzdMLAorNTI2NzhMLDUy Njc5TCw1MjY4MEwsNTI2ODFMLDUyNjgyTCw1MjY4M0wsNTI2ODRMLDUyNjg1TCw1MjY4NkwsNTI2 ODdMLAorNTI2ODhMLDUyNjg5TCw1MjY5MEwsNTI2OTFMLDUyNjkyTCw1MjY5M0wsNTI2OTRMLDUy Njk1TCw1MjY5NkwsNTI2OTdMLAorNTI2OThMLDUyNjk5TCw1MjcwMEwsNTI3MDFMLDUyNzAyTCw1 MjcwM0wsNTI3MDRMLDUyNzA1TCw1MjcwNkwsNTI3MDdMLAorNTI3MDhMLDUyNzA5TCw1MjcxMEws NTI3MTFMLDUyNzEyTCw1MjcxM0wsNTI3MTRMLDUyNzE1TCw1MjcxNkwsNTI3MTdMLAorNTI3MThM LDUyNzE5TCw1MjcyMEwsNTI3MjFMLDUyNzIyTCw1MjcyM0wsNTI3MjRMLDUyNzI1TCw1MjcyNkws NTI3MjdMLAorNTI3MjhMLDUyNzI5TCw1MjczMEwsNTI3MzFMLDUyNzMyTCw1MjczM0wsNTI3MzRM LDUyNzM1TCw1MjczNkwsNTI3MzdMLAorNTI3MzhMLDUyNzM5TCw1Mjc0MEwsNTI3NDFMLDUyNzQy TCw1Mjc0M0wsNTI3NDRMLDUyNzQ1TCw1Mjc0NkwsNTI3NDdMLAorNTI3NDhMLDUyNzQ5TCw1Mjc1 MEwsNTI3NTFMLDUyNzUyTCw1Mjc1M0wsNTI3NTRMLDUyNzU1TCw1Mjc1NkwsNTI3NTdMLAorNTI3 NThMLDUyNzU5TCw1Mjc2MEwsNTI3NjFMLDUyNzYyTCw1Mjc2M0wsNTI3NjRMLDUyNzY1TCw1Mjc2 NkwsNTI3NjdMLAorNTI3NjhMLDUyNzY5TCw1Mjc3MEwsNTI3NzFMLDUyNzcyTCw1Mjc3M0wsNTI3 NzRMLDUyNzc1TCw1Mjc3NkwsNTI3NzdMLAorNTI3NzhMLDUyNzc5TCw1Mjc4MEwsNTI3ODFMLDUy NzgyTCw1Mjc4M0wsNTI3ODRMLDUyNzg1TCw1Mjc4NkwsNTI3ODdMLAorNTI3ODhMLDUyNzg5TCw1 Mjc5MEwsNTI3OTFMLDUyNzkyTCw1Mjc5M0wsNTI3OTRMLDUyNzk1TCw1Mjc5NkwsNTI3OTdMLAor NTI3OThMLDUyNzk5TCw1MjgwMEwsNTI4MDFMLDUyODAyTCw1MjgwM0wsNTI4MDRMLDUyODA1TCw1 MjgwNkwsNTI4MDdMLAorNTI4MDhMLDUyODA5TCw1MjgxMEwsNTI4MTFMLDUyODEyTCw1MjgxM0ws NTI4MTRMLDUyODE1TCw1MjgxNkwsNTI4MTdMLAorNTI4MThMLDUyODE5TCw1MjgyMEwsNTI4MjFM LDUyODIyTCw1MjgyM0wsNTI4MjRMLDUyODI1TCw1MjgyNkwsNTI4MjdMLAorNTI4MjhMLDUyODI5 TCw1MjgzMEwsNTI4MzFMLDUyODMyTCw1MjgzM0wsNTI4MzRMLDUyODM1TCw1MjgzNkwsNTI4MzdM LAorNTI4MzhMLDUyODM5TCw1Mjg0MEwsNTI4NDFMLDUyODQyTCw1Mjg0M0wsNTI4NDRMLDUyODQ1 TCw1Mjg0NkwsNTI4NDdMLAorNTI4NDhMLDUyODQ5TCw1Mjg1MEwsNTI4NTFMLDUyODUyTCw1Mjg1 M0wsNTI4NTRMLDUyODU1TCw1Mjg1NkwsNTI4NTdMLAorNTI4NThMLDUyODU5TCw1Mjg2MEwsNTI4 NjFMLDUyODYyTCw1Mjg2M0wsNTI4NjRMLDUyODY1TCw1Mjg2NkwsNTI4NjdMLAorNTI4NjhMLDUy ODY5TCw1Mjg3MEwsNTI4NzFMLDUyODcyTCw1Mjg3M0wsNTI4NzRMLDUyODc1TCw1Mjg3NkwsNTI4 NzdMLAorNTI4NzhMLDUyODc5TCw1Mjg4MEwsNTI4ODFMLDUyODgyTCw1Mjg4M0wsNTI4ODRMLDUy ODg1TCw1Mjg4NkwsNTI4ODdMLAorNTI4ODhMLDUyODg5TCw1Mjg5MEwsNTI4OTFMLDUyODkyTCw1 Mjg5M0wsNTI4OTRMLDUyODk1TCw1Mjg5NkwsNTI4OTdMLAorNTI4OThMLDUyODk5TCw1MjkwMEws NTI5MDFMLDUyOTAyTCw1MjkwM0wsNTI5MDRMLDUyOTA1TCw1MjkwNkwsNTI5MDdMLAorNTI5MDhM LDUyOTA5TCw1MjkxMEwsNTI5MTFMLDUyOTEyTCw1MjkxM0wsNTI5MTRMLDUyOTE1TCw1MjkxNkws NTI5MTdMLAorNTI5MThMLDUyOTE5TCw1MjkyMEwsNTI5MjFMLDUyOTIyTCw1MjkyM0wsNTI5MjRM LDUyOTI1TCw1MjkyNkwsNTI5MjdMLAorNTI5MjhMLDUyOTI5TCw1MjkzMEwsNTI5MzFMLDUyOTMy TCw1MjkzM0wsNTI5MzRMLDUyOTM1TCw1MjkzNkwsNTI5MzdMLAorNTI5MzhMLDUyOTM5TCw1Mjk0 MEwsNTI5NDFMLDUyOTQyTCw1Mjk0M0wsNTI5NDRMLDUyOTQ1TCw1Mjk0NkwsNTI5NDdMLAorNTI5 NDhMLDUyOTQ5TCw1Mjk1MEwsNTI5NTFMLDUyOTUyTCw1Mjk1M0wsNTI5NTRMLDUyOTU1TCw1Mjk1 NkwsNTI5NTdMLAorNTI5NThMLDUyOTU5TCw1Mjk2MEwsNTI5NjFMLDUyOTYyTCw1Mjk2M0wsNTI5 NjRMLDUyOTY1TCw1Mjk2NkwsNTI5NjdMLAorNTI5NjhMLDUyOTY5TCw1Mjk3MEwsNTI5NzFMLDUy OTcyTCw1Mjk3M0wsNTI5NzRMLDUyOTc1TCw1Mjk3NkwsNTI5NzdMLAorNTI5NzhMLDUyOTc5TCw1 Mjk4MEwsNTI5ODFMLDUyOTgyTCw1Mjk4M0wsNTI5ODRMLDUyOTg1TCw1Mjk4NkwsNTI5ODdMLAor NTI5ODhMLDUyOTg5TCw1Mjk5MEwsNTI5OTFMLDUyOTkyTCw1Mjk5M0wsNTI5OTRMLDUyOTk1TCw1 Mjk5NkwsNTI5OTdMLAorNTI5OThMLDUyOTk5TCw1MzAwMEwsNTMwMDFMLDUzMDAyTCw1MzAwM0ws NTMwMDRMLDUzMDA1TCw1MzAwNkwsNTMwMDdMLAorNTMwMDhMLDUzMDA5TCw1MzAxMEwsNTMwMTFM LDUzMDEyTCw1MzAxM0wsNTMwMTRMLDUzMDE1TCw1MzAxNkwsNTMwMTdMLAorNTMwMThMLDUzMDE5 TCw1MzAyMEwsNTMwMjFMLDUzMDIyTCw1MzAyM0wsNTMwMjRMLDUzMDI1TCw1MzAyNkwsNTMwMjdM LAorNTMwMjhMLDUzMDI5TCw1MzAzMEwsNTMwMzFMLDUzMDMyTCw1MzAzM0wsNTMwMzRMLDUzMDM1 TCw1MzAzNkwsNTMwMzdMLAorNTMwMzhMLDUzMDM5TCw1MzA0MEwsNTMwNDFMLDUzMDQyTCw1MzA0 M0wsNTMwNDRMLDUzMDQ1TCw1MzA0NkwsNTMwNDdMLAorNTMwNDhMLDUzMDQ5TCw1MzA1MEwsNTMw NTFMLDUzMDUyTCw1MzA1M0wsNTMwNTRMLDUzMDU1TCw1MzA1NkwsNTMwNTdMLAorNTMwNThMLDUz MDU5TCw1MzA2MEwsNTMwNjFMLDUzMDYyTCw1MzA2M0wsNTMwNjRMLDUzMDY1TCw1MzA2NkwsNTMw NjdMLAorNTMwNjhMLDUzMDY5TCw1MzA3MEwsNTMwNzFMLDUzMDcyTCw1MzA3M0wsNTMwNzRMLDUz MDc1TCw1MzA3NkwsNTMwNzdMLAorNTMwNzhMLDUzMDc5TCw1MzA4MEwsNTMwODFMLDUzMDgyTCw1 MzA4M0wsNTMwODRMLDUzMDg1TCw1MzA4NkwsNTMwODdMLAorNTMwODhMLDUzMDg5TCw1MzA5MEws NTMwOTFMLDUzMDkyTCw1MzA5M0wsNTMwOTRMLDUzMDk1TCw1MzA5NkwsNTMwOTdMLAorNTMwOThM LDUzMDk5TCw1MzEwMEwsNTMxMDFMLDUzMTAyTCw1MzEwM0wsNTMxMDRMLDUzMTA1TCw1MzEwNkws NTMxMDdMLAorNTMxMDhMLDUzMTA5TCw1MzExMEwsNTMxMTFMLDUzMTEyTCw1MzExM0wsNTMxMTRM LDUzMTE1TCw1MzExNkwsNTMxMTdMLAorNTMxMThMLDUzMTE5TCw1MzEyMEwsNTMxMjFMLDUzMTIy TCw1MzEyM0wsNTMxMjRMLDUzMTI1TCw1MzEyNkwsNTMxMjdMLAorNTMxMjhMLDUzMTI5TCw1MzEz MEwsNTMxMzFMLDUzMTMyTCw1MzEzM0wsNTMxMzRMLDUzMTM1TCw1MzEzNkwsNTMxMzdMLAorNTMx MzhMLDUzMTM5TCw1MzE0MEwsNTMxNDFMLDUzMTQyTCw1MzE0M0wsNTMxNDRMLDUzMTQ1TCw1MzE0 NkwsNTMxNDdMLAorNTMxNDhMLDUzMTQ5TCw1MzE1MEwsNTMxNTFMLDUzMTUyTCw1MzE1M0wsNTMx NTRMLDUzMTU1TCw1MzE1NkwsNTMxNTdMLAorNTMxNThMLDUzMTU5TCw1MzE2MEwsNTMxNjFMLDUz MTYyTCw1MzE2M0wsNTMxNjRMLDUzMTY1TCw1MzE2NkwsNTMxNjdMLAorNTMxNjhMLDUzMTY5TCw1 MzE3MEwsNTMxNzFMLDUzMTcyTCw1MzE3M0wsNTMxNzRMLDUzMTc1TCw1MzE3NkwsNTMxNzdMLAor NTMxNzhMLDUzMTc5TCw1MzE4MEwsNTMxODFMLDUzMTgyTCw1MzE4M0wsNTMxODRMLDUzMTg1TCw1 MzE4NkwsNTMxODdMLAorNTMxODhMLDUzMTg5TCw1MzE5MEwsNTMxOTFMLDUzMTkyTCw1MzE5M0ws NTMxOTRMLDUzMTk1TCw1MzE5NkwsNTMxOTdMLAorNTMxOThMLDUzMTk5TCw1MzIwMEwsNTMyMDFM LDUzMjAyTCw1MzIwM0wsNTMyMDRMLDUzMjA1TCw1MzIwNkwsNTMyMDdMLAorNTMyMDhMLDUzMjA5 TCw1MzIxMEwsNTMyMTFMLDUzMjEyTCw1MzIxM0wsNTMyMTRMLDUzMjE1TCw1MzIxNkwsNTMyMTdM LAorNTMyMThMLDUzMjE5TCw1MzIyMEwsNTMyMjFMLDUzMjIyTCw1MzIyM0wsNTMyMjRMLDUzMjI1 TCw1MzIyNkwsNTMyMjdMLAorNTMyMjhMLDUzMjI5TCw1MzIzMEwsNTMyMzFMLDUzMjMyTCw1MzIz M0wsNTMyMzRMLDUzMjM1TCw1MzIzNkwsNTMyMzdMLAorNTMyMzhMLDUzMjM5TCw1MzI0MEwsNTMy NDFMLDUzMjQyTCw1MzI0M0wsNTMyNDRMLDUzMjQ1TCw1MzI0NkwsNTMyNDdMLAorNTMyNDhMLDUz MjQ5TCw1MzI1MEwsNTMyNTFMLDUzMjUyTCw1MzI1M0wsNTMyNTRMLDUzMjU1TCw1MzI1NkwsNTMy NTdMLAorNTMyNThMLDUzMjU5TCw1MzI2MEwsNTMyNjFMLDUzMjYyTCw1MzI2M0wsNTMyNjRMLDUz MjY1TCw1MzI2NkwsNTMyNjdMLAorNTMyNjhMLDUzMjY5TCw1MzI3MEwsNTMyNzFMLDUzMjcyTCw1 MzI3M0wsNTMyNzRMLDUzMjc1TCw1MzI3NkwsNTMyNzdMLAorNTMyNzhMLDUzMjc5TCw1MzI4MEws NTMyODFMLDUzMjgyTCw1MzI4M0wsNTMyODRMLDUzMjg1TCw1MzI4NkwsNTMyODdMLAorNTMyODhM LDUzMjg5TCw1MzI5MEwsNTMyOTFMLDUzMjkyTCw1MzI5M0wsNTMyOTRMLDUzMjk1TCw1MzI5Nkws NTMyOTdMLAorNTMyOThMLDUzMjk5TCw1MzMwMEwsNTMzMDFMLDUzMzAyTCw1MzMwM0wsNTMzMDRM LDUzMzA1TCw1MzMwNkwsNTMzMDdMLAorNTMzMDhMLDUzMzA5TCw1MzMxMEwsNTMzMTFMLDUzMzEy TCw1MzMxM0wsNTMzMTRMLDUzMzE1TCw1MzMxNkwsNTMzMTdMLAorNTMzMThMLDUzMzE5TCw1MzMy MEwsNTMzMjFMLDUzMzIyTCw1MzMyM0wsNTMzMjRMLDUzMzI1TCw1MzMyNkwsNTMzMjdMLAorNTMz MjhMLDUzMzI5TCw1MzMzMEwsNTMzMzFMLDUzMzMyTCw1MzMzM0wsNTMzMzRMLDUzMzM1TCw1MzMz NkwsNTMzMzdMLAorNTMzMzhMLDUzMzM5TCw1MzM0MEwsNTMzNDFMLDUzMzQyTCw1MzM0M0wsNTMz NDRMLDUzMzQ1TCw1MzM0NkwsNTMzNDdMLAorNTMzNDhMLDUzMzQ5TCw1MzM1MEwsNTMzNTFMLDUz MzUyTCw1MzM1M0wsNTMzNTRMLDUzMzU1TCw1MzM1NkwsNTMzNTdMLAorNTMzNThMLDUzMzU5TCw1 MzM2MEwsNTMzNjFMLDUzMzYyTCw1MzM2M0wsNTMzNjRMLDUzMzY1TCw1MzM2NkwsNTMzNjdMLAor NTMzNjhMLDUzMzY5TCw1MzM3MEwsNTMzNzFMLDUzMzcyTCw1MzM3M0wsNTMzNzRMLDUzMzc1TCw1 MzM3NkwsNTMzNzdMLAorNTMzNzhMLDUzMzc5TCw1MzM4MEwsNTMzODFMLDUzMzgyTCw1MzM4M0ws NTMzODRMLDUzMzg1TCw1MzM4NkwsNTMzODdMLAorNTMzODhMLDUzMzg5TCw1MzM5MEwsNTMzOTFM LDUzMzkyTCw1MzM5M0wsNTMzOTRMLDUzMzk1TCw1MzM5NkwsNTMzOTdMLAorNTMzOThMLDUzMzk5 TCw1MzQwMEwsNTM0MDFMLDUzNDAyTCw1MzQwM0wsNTM0MDRMLDUzNDA1TCw1MzQwNkwsNTM0MDdM LAorNTM0MDhMLDUzNDA5TCw1MzQxMEwsNTM0MTFMLDUzNDEyTCw1MzQxM0wsNTM0MTRMLDUzNDE1 TCw1MzQxNkwsNTM0MTdMLAorNTM0MThMLDUzNDE5TCw1MzQyMEwsNTM0MjFMLDUzNDIyTCw1MzQy M0wsNTM0MjRMLDUzNDI1TCw1MzQyNkwsNTM0MjdMLAorNTM0MjhMLDUzNDI5TCw1MzQzMEwsNTM0 MzFMLDUzNDMyTCw1MzQzM0wsNTM0MzRMLDUzNDM1TCw1MzQzNkwsNTM0MzdMLAorNTM0MzhMLDUz NDM5TCw1MzQ0MEwsNTM0NDFMLDUzNDQyTCw1MzQ0M0wsNTM0NDRMLDUzNDQ1TCw1MzQ0NkwsNTM0 NDdMLAorNTM0NDhMLDUzNDQ5TCw1MzQ1MEwsNTM0NTFMLDUzNDUyTCw1MzQ1M0wsNTM0NTRMLDUz NDU1TCw1MzQ1NkwsNTM0NTdMLAorNTM0NThMLDUzNDU5TCw1MzQ2MEwsNTM0NjFMLDUzNDYyTCw1 MzQ2M0wsNTM0NjRMLDUzNDY1TCw1MzQ2NkwsNTM0NjdMLAorNTM0NjhMLDUzNDY5TCw1MzQ3MEws NTM0NzFMLDUzNDcyTCw1MzQ3M0wsNTM0NzRMLDUzNDc1TCw1MzQ3NkwsNTM0NzdMLAorNTM0NzhM LDUzNDc5TCw1MzQ4MEwsNTM0ODFMLDUzNDgyTCw1MzQ4M0wsNTM0ODRMLDUzNDg1TCw1MzQ4Nkws NTM0ODdMLAorNTM0ODhMLDUzNDg5TCw1MzQ5MEwsNTM0OTFMLDUzNDkyTCw1MzQ5M0wsNTM0OTRM LDUzNDk1TCw1MzQ5NkwsNTM0OTdMLAorNTM0OThMLDUzNDk5TCw1MzUwMEwsNTM1MDFMLDUzNTAy TCw1MzUwM0wsNTM1MDRMLDUzNTA1TCw1MzUwNkwsNTM1MDdMLAorNTM1MDhMLDUzNTA5TCw1MzUx MEwsNTM1MTFMLDUzNTEyTCw1MzUxM0wsNTM1MTRMLDUzNTE1TCw1MzUxNkwsNTM1MTdMLAorNTM1 MThMLDUzNTE5TCw1MzUyMEwsNTM1MjFMLDUzNTIyTCw1MzUyM0wsNTM1MjRMLDUzNTI1TCw1MzUy NkwsNTM1MjdMLAorNTM1MjhMLDUzNTI5TCw1MzUzMEwsNTM1MzFMLDUzNTMyTCw1MzUzM0wsNTM1 MzRMLDUzNTM1TCw1MzUzNkwsNTM1MzdMLAorNTM1MzhMLDUzNTM5TCw1MzU0MEwsNTM1NDFMLDUz NTQyTCw1MzU0M0wsNTM1NDRMLDUzNTQ1TCw1MzU0NkwsNTM1NDdMLAorNTM1NDhMLDUzNTQ5TCw1 MzU1MEwsNTM1NTFMLDUzNTUyTCw1MzU1M0wsNTM1NTRMLDUzNTU1TCw1MzU1NkwsNTM1NTdMLAor NTM1NThMLDUzNTU5TCw1MzU2MEwsNTM1NjFMLDUzNTYyTCw1MzU2M0wsNTM1NjRMLDUzNTY1TCw1 MzU2NkwsNTM1NjdMLAorNTM1NjhMLDUzNTY5TCw1MzU3MEwsNTM1NzFMLDUzNTcyTCw1MzU3M0ws NTM1NzRMLDUzNTc1TCw1MzU3NkwsNTM1NzdMLAorNTM1NzhMLDUzNTc5TCw1MzU4MEwsNTM1ODFM LDUzNTgyTCw1MzU4M0wsNTM1ODRMLDUzNTg1TCw1MzU4NkwsNTM1ODdMLAorNTM1ODhMLDUzNTg5 TCw1MzU5MEwsNTM1OTFMLDUzNTkyTCw1MzU5M0wsNTM1OTRMLDUzNTk1TCw1MzU5NkwsNTM1OTdM LAorNTM1OThMLDUzNTk5TCw1MzYwMEwsNTM2MDFMLDUzNjAyTCw1MzYwM0wsNTM2MDRMLDUzNjA1 TCw1MzYwNkwsNTM2MDdMLAorNTM2MDhMLDUzNjA5TCw1MzYxMEwsNTM2MTFMLDUzNjEyTCw1MzYx M0wsNTM2MTRMLDUzNjE1TCw1MzYxNkwsNTM2MTdMLAorNTM2MThMLDUzNjE5TCw1MzYyMEwsNTM2 MjFMLDUzNjIyTCw1MzYyM0wsNTM2MjRMLDUzNjI1TCw1MzYyNkwsNTM2MjdMLAorNTM2MjhMLDUz NjI5TCw1MzYzMEwsNTM2MzFMLDUzNjMyTCw1MzYzM0wsNTM2MzRMLDUzNjM1TCw1MzYzNkwsNTM2 MzdMLAorNTM2MzhMLDUzNjM5TCw1MzY0MEwsNTM2NDFMLDUzNjQyTCw1MzY0M0wsNTM2NDRMLDUz NjQ1TCw1MzY0NkwsNTM2NDdMLAorNTM2NDhMLDUzNjQ5TCw1MzY1MEwsNTM2NTFMLDUzNjUyTCw1 MzY1M0wsNTM2NTRMLDUzNjU1TCw1MzY1NkwsNTM2NTdMLAorNTM2NThMLDUzNjU5TCw1MzY2MEws NTM2NjFMLDUzNjYyTCw1MzY2M0wsNTM2NjRMLDUzNjY1TCw1MzY2NkwsNTM2NjdMLAorNTM2NjhM LDUzNjY5TCw1MzY3MEwsNTM2NzFMLDUzNjcyTCw1MzY3M0wsNTM2NzRMLDUzNjc1TCw1MzY3Nkws NTM2NzdMLAorNTM2NzhMLDUzNjc5TCw1MzY4MEwsNTM2ODFMLDUzNjgyTCw1MzY4M0wsNTM2ODRM LDUzNjg1TCw1MzY4NkwsNTM2ODdMLAorNTM2ODhMLDUzNjg5TCw1MzY5MEwsNTM2OTFMLDUzNjky TCw1MzY5M0wsNTM2OTRMLDUzNjk1TCw1MzY5NkwsNTM2OTdMLAorNTM2OThMLDUzNjk5TCw1Mzcw MEwsNTM3MDFMLDUzNzAyTCw1MzcwM0wsNTM3MDRMLDUzNzA1TCw1MzcwNkwsNTM3MDdMLAorNTM3 MDhMLDUzNzA5TCw1MzcxMEwsNTM3MTFMLDUzNzEyTCw1MzcxM0wsNTM3MTRMLDUzNzE1TCw1Mzcx NkwsNTM3MTdMLAorNTM3MThMLDUzNzE5TCw1MzcyMEwsNTM3MjFMLDUzNzIyTCw1MzcyM0wsNTM3 MjRMLDUzNzI1TCw1MzcyNkwsNTM3MjdMLAorNTM3MjhMLDUzNzI5TCw1MzczMEwsNTM3MzFMLDUz NzMyTCw1MzczM0wsNTM3MzRMLDUzNzM1TCw1MzczNkwsNTM3MzdMLAorNTM3MzhMLDUzNzM5TCw1 Mzc0MEwsNTM3NDFMLDUzNzQyTCw1Mzc0M0wsNTM3NDRMLDUzNzQ1TCw1Mzc0NkwsNTM3NDdMLAor NTM3NDhMLDUzNzQ5TCw1Mzc1MEwsNTM3NTFMLDUzNzUyTCw1Mzc1M0wsNTM3NTRMLDUzNzU1TCw1 Mzc1NkwsNTM3NTdMLAorNTM3NThMLDUzNzU5TCw1Mzc2MEwsNTM3NjFMLDUzNzYyTCw1Mzc2M0ws NTM3NjRMLDUzNzY1TCw1Mzc2NkwsNTM3NjdMLAorNTM3NjhMLDUzNzY5TCw1Mzc3MEwsNTM3NzFM LDUzNzcyTCw1Mzc3M0wsNTM3NzRMLDUzNzc1TCw1Mzc3NkwsNTM3NzdMLAorNTM3NzhMLDUzNzc5 TCw1Mzc4MEwsNTM3ODFMLDUzNzgyTCw1Mzc4M0wsNTM3ODRMLDUzNzg1TCw1Mzc4NkwsNTM3ODdM LAorNTM3ODhMLDUzNzg5TCw1Mzc5MEwsNTM3OTFMLDUzNzkyTCw1Mzc5M0wsNTM3OTRMLDUzNzk1 TCw1Mzc5NkwsNTM3OTdMLAorNTM3OThMLDUzNzk5TCw1MzgwMEwsNTM4MDFMLDUzODAyTCw1Mzgw M0wsNTM4MDRMLDUzODA1TCw1MzgwNkwsNTM4MDdMLAorNTM4MDhMLDUzODA5TCw1MzgxMEwsNTM4 MTFMLDUzODEyTCw1MzgxM0wsNTM4MTRMLDUzODE1TCw1MzgxNkwsNTM4MTdMLAorNTM4MThMLDUz ODE5TCw1MzgyMEwsNTM4MjFMLDUzODIyTCw1MzgyM0wsNTM4MjRMLDUzODI1TCw1MzgyNkwsNTM4 MjdMLAorNTM4MjhMLDUzODI5TCw1MzgzMEwsNTM4MzFMLDUzODMyTCw1MzgzM0wsNTM4MzRMLDUz ODM1TCw1MzgzNkwsNTM4MzdMLAorNTM4MzhMLDUzODM5TCw1Mzg0MEwsNTM4NDFMLDUzODQyTCw1 Mzg0M0wsNTM4NDRMLDUzODQ1TCw1Mzg0NkwsNTM4NDdMLAorNTM4NDhMLDUzODQ5TCw1Mzg1MEws NTM4NTFMLDUzODUyTCw1Mzg1M0wsNTM4NTRMLDUzODU1TCw1Mzg1NkwsNTM4NTdMLAorNTM4NThM LDUzODU5TCw1Mzg2MEwsNTM4NjFMLDUzODYyTCw1Mzg2M0wsNTM4NjRMLDUzODY1TCw1Mzg2Nkws NTM4NjdMLAorNTM4NjhMLDUzODY5TCw1Mzg3MEwsNTM4NzFMLDUzODcyTCw1Mzg3M0wsNTM4NzRM LDUzODc1TCw1Mzg3NkwsNTM4NzdMLAorNTM4NzhMLDUzODc5TCw1Mzg4MEwsNTM4ODFMLDUzODgy TCw1Mzg4M0wsNTM4ODRMLDUzODg1TCw1Mzg4NkwsNTM4ODdMLAorNTM4ODhMLDUzODg5TCw1Mzg5 MEwsNTM4OTFMLDUzODkyTCw1Mzg5M0wsNTM4OTRMLDUzODk1TCw1Mzg5NkwsNTM4OTdMLAorNTM4 OThMLDUzODk5TCw1MzkwMEwsNTM5MDFMLDUzOTAyTCw1MzkwM0wsNTM5MDRMLDUzOTA1TCw1Mzkw NkwsNTM5MDdMLAorNTM5MDhMLDUzOTA5TCw1MzkxMEwsNTM5MTFMLDUzOTEyTCw1MzkxM0wsNTM5 MTRMLDUzOTE1TCw1MzkxNkwsNTM5MTdMLAorNTM5MThMLDUzOTE5TCw1MzkyMEwsNTM5MjFMLDUz OTIyTCw1MzkyM0wsNTM5MjRMLDUzOTI1TCw1MzkyNkwsNTM5MjdMLAorNTM5MjhMLDUzOTI5TCw1 MzkzMEwsNTM5MzFMLDUzOTMyTCw1MzkzM0wsNTM5MzRMLDUzOTM1TCw1MzkzNkwsNTM5MzdMLAor NTM5MzhMLDUzOTM5TCw1Mzk0MEwsNTM5NDFMLDUzOTQyTCw1Mzk0M0wsNTM5NDRMLDUzOTQ1TCw1 Mzk0NkwsNTM5NDdMLAorNTM5NDhMLDUzOTQ5TCw1Mzk1MEwsNTM5NTFMLDUzOTUyTCw1Mzk1M0ws NTM5NTRMLDUzOTU1TCw1Mzk1NkwsNTM5NTdMLAorNTM5NThMLDUzOTU5TCw1Mzk2MEwsNTM5NjFM LDUzOTYyTCw1Mzk2M0wsNTM5NjRMLDUzOTY1TCw1Mzk2NkwsNTM5NjdMLAorNTM5NjhMLDUzOTY5 TCw1Mzk3MEwsNTM5NzFMLDUzOTcyTCw1Mzk3M0wsNTM5NzRMLDUzOTc1TCw1Mzk3NkwsNTM5NzdM LAorNTM5NzhMLDUzOTc5TCw1Mzk4MEwsNTM5ODFMLDUzOTgyTCw1Mzk4M0wsNTM5ODRMLDUzOTg1 TCw1Mzk4NkwsNTM5ODdMLAorNTM5ODhMLDUzOTg5TCw1Mzk5MEwsNTM5OTFMLDUzOTkyTCw1Mzk5 M0wsNTM5OTRMLDUzOTk1TCw1Mzk5NkwsNTM5OTdMLAorNTM5OThMLDUzOTk5TCw1NDAwMEwsNTQw MDFMLDU0MDAyTCw1NDAwM0wsNTQwMDRMLDU0MDA1TCw1NDAwNkwsNTQwMDdMLAorNTQwMDhMLDU0 MDA5TCw1NDAxMEwsNTQwMTFMLDU0MDEyTCw1NDAxM0wsNTQwMTRMLDU0MDE1TCw1NDAxNkwsNTQw MTdMLAorNTQwMThMLDU0MDE5TCw1NDAyMEwsNTQwMjFMLDU0MDIyTCw1NDAyM0wsNTQwMjRMLDU0 MDI1TCw1NDAyNkwsNTQwMjdMLAorNTQwMjhMLDU0MDI5TCw1NDAzMEwsNTQwMzFMLDU0MDMyTCw1 NDAzM0wsNTQwMzRMLDU0MDM1TCw1NDAzNkwsNTQwMzdMLAorNTQwMzhMLDU0MDM5TCw1NDA0MEws NTQwNDFMLDU0MDQyTCw1NDA0M0wsNTQwNDRMLDU0MDQ1TCw1NDA0NkwsNTQwNDdMLAorNTQwNDhM LDU0MDQ5TCw1NDA1MEwsNTQwNTFMLDU0MDUyTCw1NDA1M0wsNTQwNTRMLDU0MDU1TCw1NDA1Nkws NTQwNTdMLAorNTQwNThMLDU0MDU5TCw1NDA2MEwsNTQwNjFMLDU0MDYyTCw1NDA2M0wsNTQwNjRM LDU0MDY1TCw1NDA2NkwsNTQwNjdMLAorNTQwNjhMLDU0MDY5TCw1NDA3MEwsNTQwNzFMLDU0MDcy TCw1NDA3M0wsNTQwNzRMLDU0MDc1TCw1NDA3NkwsNTQwNzdMLAorNTQwNzhMLDU0MDc5TCw1NDA4 MEwsNTQwODFMLDU0MDgyTCw1NDA4M0wsNTQwODRMLDU0MDg1TCw1NDA4NkwsNTQwODdMLAorNTQw ODhMLDU0MDg5TCw1NDA5MEwsNTQwOTFMLDU0MDkyTCw1NDA5M0wsNTQwOTRMLDU0MDk1TCw1NDA5 NkwsNTQwOTdMLAorNTQwOThMLDU0MDk5TCw1NDEwMEwsNTQxMDFMLDU0MTAyTCw1NDEwM0wsNTQx MDRMLDU0MTA1TCw1NDEwNkwsNTQxMDdMLAorNTQxMDhMLDU0MTA5TCw1NDExMEwsNTQxMTFMLDU0 MTEyTCw1NDExM0wsNTQxMTRMLDU0MTE1TCw1NDExNkwsNTQxMTdMLAorNTQxMThMLDU0MTE5TCw1 NDEyMEwsNTQxMjFMLDU0MTIyTCw1NDEyM0wsNTQxMjRMLDU0MTI1TCw1NDEyNkwsNTQxMjdMLAor NTQxMjhMLDU0MTI5TCw1NDEzMEwsNTQxMzFMLDU0MTMyTCw1NDEzM0wsNTQxMzRMLDU0MTM1TCw1 NDEzNkwsNTQxMzdMLAorNTQxMzhMLDU0MTM5TCw1NDE0MEwsNTQxNDFMLDU0MTQyTCw1NDE0M0ws NTQxNDRMLDU0MTQ1TCw1NDE0NkwsNTQxNDdMLAorNTQxNDhMLDU0MTQ5TCw1NDE1MEwsNTQxNTFM LDU0MTUyTCw1NDE1M0wsNTQxNTRMLDU0MTU1TCw1NDE1NkwsNTQxNTdMLAorNTQxNThMLDU0MTU5 TCw1NDE2MEwsNTQxNjFMLDU0MTYyTCw1NDE2M0wsNTQxNjRMLDU0MTY1TCw1NDE2NkwsNTQxNjdM LAorNTQxNjhMLDU0MTY5TCw1NDE3MEwsNTQxNzFMLDU0MTcyTCw1NDE3M0wsNTQxNzRMLDU0MTc1 TCw1NDE3NkwsNTQxNzdMLAorNTQxNzhMLDU0MTc5TCw1NDE4MEwsNTQxODFMLDU0MTgyTCw1NDE4 M0wsNTQxODRMLDU0MTg1TCw1NDE4NkwsNTQxODdMLAorNTQxODhMLDU0MTg5TCw1NDE5MEwsNTQx OTFMLDU0MTkyTCw1NDE5M0wsNTQxOTRMLDU0MTk1TCw1NDE5NkwsNTQxOTdMLAorNTQxOThMLDU0 MTk5TCw1NDIwMEwsNTQyMDFMLDU0MjAyTCw1NDIwM0wsNTQyMDRMLDU0MjA1TCw1NDIwNkwsNTQy MDdMLAorNTQyMDhMLDU0MjA5TCw1NDIxMEwsNTQyMTFMLDU0MjEyTCw1NDIxM0wsNTQyMTRMLDU0 MjE1TCw1NDIxNkwsNTQyMTdMLAorNTQyMThMLDU0MjE5TCw1NDIyMEwsNTQyMjFMLDU0MjIyTCw1 NDIyM0wsNTQyMjRMLDU0MjI1TCw1NDIyNkwsNTQyMjdMLAorNTQyMjhMLDU0MjI5TCw1NDIzMEws NTQyMzFMLDU0MjMyTCw1NDIzM0wsNTQyMzRMLDU0MjM1TCw1NDIzNkwsNTQyMzdMLAorNTQyMzhM LDU0MjM5TCw1NDI0MEwsNTQyNDFMLDU0MjQyTCw1NDI0M0wsNTQyNDRMLDU0MjQ1TCw1NDI0Nkws NTQyNDdMLAorNTQyNDhMLDU0MjQ5TCw1NDI1MEwsNTQyNTFMLDU0MjUyTCw1NDI1M0wsNTQyNTRM LDU0MjU1TCw1NDI1NkwsNTQyNTdMLAorNTQyNThMLDU0MjU5TCw1NDI2MEwsNTQyNjFMLDU0MjYy TCw1NDI2M0wsNTQyNjRMLDU0MjY1TCw1NDI2NkwsNTQyNjdMLAorNTQyNjhMLDU0MjY5TCw1NDI3 MEwsNTQyNzFMLDU0MjcyTCw1NDI3M0wsNTQyNzRMLDU0Mjc1TCw1NDI3NkwsNTQyNzdMLAorNTQy NzhMLDU0Mjc5TCw1NDI4MEwsNTQyODFMLDU0MjgyTCw1NDI4M0wsNTQyODRMLDU0Mjg1TCw1NDI4 NkwsNTQyODdMLAorNTQyODhMLDU0Mjg5TCw1NDI5MEwsNTQyOTFMLDU0MjkyTCw1NDI5M0wsNTQy OTRMLDU0Mjk1TCw1NDI5NkwsNTQyOTdMLAorNTQyOThMLDU0Mjk5TCw1NDMwMEwsNTQzMDFMLDU0 MzAyTCw1NDMwM0wsNTQzMDRMLDU0MzA1TCw1NDMwNkwsNTQzMDdMLAorNTQzMDhMLDU0MzA5TCw1 NDMxMEwsNTQzMTFMLDU0MzEyTCw1NDMxM0wsNTQzMTRMLDU0MzE1TCw1NDMxNkwsNTQzMTdMLAor NTQzMThMLDU0MzE5TCw1NDMyMEwsNTQzMjFMLDU0MzIyTCw1NDMyM0wsNTQzMjRMLDU0MzI1TCw1 NDMyNkwsNTQzMjdMLAorNTQzMjhMLDU0MzI5TCw1NDMzMEwsNTQzMzFMLDU0MzMyTCw1NDMzM0ws NTQzMzRMLDU0MzM1TCw1NDMzNkwsNTQzMzdMLAorNTQzMzhMLDU0MzM5TCw1NDM0MEwsNTQzNDFM LDU0MzQyTCw1NDM0M0wsNTQzNDRMLDU0MzQ1TCw1NDM0NkwsNTQzNDdMLAorNTQzNDhMLDU0MzQ5 TCw1NDM1MEwsNTQzNTFMLDU0MzUyTCw1NDM1M0wsNTQzNTRMLDU0MzU1TCw1NDM1NkwsNTQzNTdM LAorNTQzNThMLDU0MzU5TCw1NDM2MEwsNTQzNjFMLDU0MzYyTCw1NDM2M0wsNTQzNjRMLDU0MzY1 TCw1NDM2NkwsNTQzNjdMLAorNTQzNjhMLDU0MzY5TCw1NDM3MEwsNTQzNzFMLDU0MzcyTCw1NDM3 M0wsNTQzNzRMLDU0Mzc1TCw1NDM3NkwsNTQzNzdMLAorNTQzNzhMLDU0Mzc5TCw1NDM4MEwsNTQz ODFMLDU0MzgyTCw1NDM4M0wsNTQzODRMLDU0Mzg1TCw1NDM4NkwsNTQzODdMLAorNTQzODhMLDU0 Mzg5TCw1NDM5MEwsNTQzOTFMLDU0MzkyTCw1NDM5M0wsNTQzOTRMLDU0Mzk1TCw1NDM5NkwsNTQz OTdMLAorNTQzOThMLDU0Mzk5TCw1NDQwMEwsNTQ0MDFMLDU0NDAyTCw1NDQwM0wsNTQ0MDRMLDU0 NDA1TCw1NDQwNkwsNTQ0MDdMLAorNTQ0MDhMLDU0NDA5TCw1NDQxMEwsNTQ0MTFMLDU0NDEyTCw1 NDQxM0wsNTQ0MTRMLDU0NDE1TCw1NDQxNkwsNTQ0MTdMLAorNTQ0MThMLDU0NDE5TCw1NDQyMEws NTQ0MjFMLDU0NDIyTCw1NDQyM0wsNTQ0MjRMLDU0NDI1TCw1NDQyNkwsNTQ0MjdMLAorNTQ0MjhM LDU0NDI5TCw1NDQzMEwsNTQ0MzFMLDU0NDMyTCw1NDQzM0wsNTQ0MzRMLDU0NDM1TCw1NDQzNkws NTQ0MzdMLAorNTQ0MzhMLDU0NDM5TCw1NDQ0MEwsNTQ0NDFMLDU0NDQyTCw1NDQ0M0wsNTQ0NDRM LDU0NDQ1TCw1NDQ0NkwsNTQ0NDdMLAorNTQ0NDhMLDU0NDQ5TCw1NDQ1MEwsNTQ0NTFMLDU0NDUy TCw1NDQ1M0wsNTQ0NTRMLDU0NDU1TCw1NDQ1NkwsNTQ0NTdMLAorNTQ0NThMLDU0NDU5TCw1NDQ2 MEwsNTQ0NjFMLDU0NDYyTCw1NDQ2M0wsNTQ0NjRMLDU0NDY1TCw1NDQ2NkwsNTQ0NjdMLAorNTQ0 NjhMLDU0NDY5TCw1NDQ3MEwsNTQ0NzFMLDU0NDcyTCw1NDQ3M0wsNTQ0NzRMLDU0NDc1TCw1NDQ3 NkwsNTQ0NzdMLAorNTQ0NzhMLDU0NDc5TCw1NDQ4MEwsNTQ0ODFMLDU0NDgyTCw1NDQ4M0wsNTQ0 ODRMLDU0NDg1TCw1NDQ4NkwsNTQ0ODdMLAorNTQ0ODhMLDU0NDg5TCw1NDQ5MEwsNTQ0OTFMLDU0 NDkyTCw1NDQ5M0wsNTQ0OTRMLDU0NDk1TCw1NDQ5NkwsNTQ0OTdMLAorNTQ0OThMLDU0NDk5TCw1 NDUwMEwsNTQ1MDFMLDU0NTAyTCw1NDUwM0wsNTQ1MDRMLDU0NTA1TCw1NDUwNkwsNTQ1MDdMLAor NTQ1MDhMLDU0NTA5TCw1NDUxMEwsNTQ1MTFMLDU0NTEyTCw1NDUxM0wsNTQ1MTRMLDU0NTE1TCw1 NDUxNkwsNTQ1MTdMLAorNTQ1MThMLDU0NTE5TCw1NDUyMEwsNTQ1MjFMLDU0NTIyTCw1NDUyM0ws NTQ1MjRMLDU0NTI1TCw1NDUyNkwsNTQ1MjdMLAorNTQ1MjhMLDU0NTI5TCw1NDUzMEwsNTQ1MzFM LDU0NTMyTCw1NDUzM0wsNTQ1MzRMLDU0NTM1TCw1NDUzNkwsNTQ1MzdMLAorNTQ1MzhMLDU0NTM5 TCw1NDU0MEwsNTQ1NDFMLDU0NTQyTCw1NDU0M0wsNTQ1NDRMLDU0NTQ1TCw1NDU0NkwsNTQ1NDdM LAorNTQ1NDhMLDU0NTQ5TCw1NDU1MEwsNTQ1NTFMLDU0NTUyTCw1NDU1M0wsNTQ1NTRMLDU0NTU1 TCw1NDU1NkwsNTQ1NTdMLAorNTQ1NThMLDU0NTU5TCw1NDU2MEwsNTQ1NjFMLDU0NTYyTCw1NDU2 M0wsNTQ1NjRMLDU0NTY1TCw1NDU2NkwsNTQ1NjdMLAorNTQ1NjhMLDU0NTY5TCw1NDU3MEwsNTQ1 NzFMLDU0NTcyTCw1NDU3M0wsNTQ1NzRMLDU0NTc1TCw1NDU3NkwsNTQ1NzdMLAorNTQ1NzhMLDU0 NTc5TCw1NDU4MEwsNTQ1ODFMLDU0NTgyTCw1NDU4M0wsNTQ1ODRMLDU0NTg1TCw1NDU4NkwsNTQ1 ODdMLAorNTQ1ODhMLDU0NTg5TCw1NDU5MEwsNTQ1OTFMLDU0NTkyTCw1NDU5M0wsNTQ1OTRMLDU0 NTk1TCw1NDU5NkwsNTQ1OTdMLAorNTQ1OThMLDU0NTk5TCw1NDYwMEwsNTQ2MDFMLDU0NjAyTCw1 NDYwM0wsNTQ2MDRMLDU0NjA1TCw1NDYwNkwsNTQ2MDdMLAorNTQ2MDhMLDU0NjA5TCw1NDYxMEws NTQ2MTFMLDU0NjEyTCw1NDYxM0wsNTQ2MTRMLDU0NjE1TCw1NDYxNkwsNTQ2MTdMLAorNTQ2MThM LDU0NjE5TCw1NDYyMEwsNTQ2MjFMLDU0NjIyTCw1NDYyM0wsNTQ2MjRMLDU0NjI1TCw1NDYyNkws NTQ2MjdMLAorNTQ2MjhMLDU0NjI5TCw1NDYzMEwsNTQ2MzFMLDU0NjMyTCw1NDYzM0wsNTQ2MzRM LDU0NjM1TCw1NDYzNkwsNTQ2MzdMLAorNTQ2MzhMLDU0NjM5TCw1NDY0MEwsNTQ2NDFMLDU0NjQy TCw1NDY0M0wsNTQ2NDRMLDU0NjQ1TCw1NDY0NkwsNTQ2NDdMLAorNTQ2NDhMLDU0NjQ5TCw1NDY1 MEwsNTQ2NTFMLDU0NjUyTCw1NDY1M0wsNTQ2NTRMLDU0NjU1TCw1NDY1NkwsNTQ2NTdMLAorNTQ2 NThMLDU0NjU5TCw1NDY2MEwsNTQ2NjFMLDU0NjYyTCw1NDY2M0wsNTQ2NjRMLDU0NjY1TCw1NDY2 NkwsNTQ2NjdMLAorNTQ2NjhMLDU0NjY5TCw1NDY3MEwsNTQ2NzFMLDU0NjcyTCw1NDY3M0wsNTQ2 NzRMLDU0Njc1TCw1NDY3NkwsNTQ2NzdMLAorNTQ2NzhMLDU0Njc5TCw1NDY4MEwsNTQ2ODFMLDU0 NjgyTCw1NDY4M0wsNTQ2ODRMLDU0Njg1TCw1NDY4NkwsNTQ2ODdMLAorNTQ2ODhMLDU0Njg5TCw1 NDY5MEwsNTQ2OTFMLDU0NjkyTCw1NDY5M0wsNTQ2OTRMLDU0Njk1TCw1NDY5NkwsNTQ2OTdMLAor NTQ2OThMLDU0Njk5TCw1NDcwMEwsNTQ3MDFMLDU0NzAyTCw1NDcwM0wsNTQ3MDRMLDU0NzA1TCw1 NDcwNkwsNTQ3MDdMLAorNTQ3MDhMLDU0NzA5TCw1NDcxMEwsNTQ3MTFMLDU0NzEyTCw1NDcxM0ws NTQ3MTRMLDU0NzE1TCw1NDcxNkwsNTQ3MTdMLAorNTQ3MThMLDU0NzE5TCw1NDcyMEwsNTQ3MjFM LDU0NzIyTCw1NDcyM0wsNTQ3MjRMLDU0NzI1TCw1NDcyNkwsNTQ3MjdMLAorNTQ3MjhMLDU0NzI5 TCw1NDczMEwsNTQ3MzFMLDU0NzMyTCw1NDczM0wsNTQ3MzRMLDU0NzM1TCw1NDczNkwsNTQ3MzdM LAorNTQ3MzhMLDU0NzM5TCw1NDc0MEwsNTQ3NDFMLDU0NzQyTCw1NDc0M0wsNTQ3NDRMLDU0NzQ1 TCw1NDc0NkwsNTQ3NDdMLAorNTQ3NDhMLDU0NzQ5TCw1NDc1MEwsNTQ3NTFMLDU0NzUyTCw1NDc1 M0wsNTQ3NTRMLDU0NzU1TCw1NDc1NkwsNTQ3NTdMLAorNTQ3NThMLDU0NzU5TCw1NDc2MEwsNTQ3 NjFMLDU0NzYyTCw1NDc2M0wsNTQ3NjRMLDU0NzY1TCw1NDc2NkwsNTQ3NjdMLAorNTQ3NjhMLDU0 NzY5TCw1NDc3MEwsNTQ3NzFMLDU0NzcyTCw1NDc3M0wsNTQ3NzRMLDU0Nzc1TCw1NDc3NkwsNTQ3 NzdMLAorNTQ3NzhMLDU0Nzc5TCw1NDc4MEwsNTQ3ODFMLDU0NzgyTCw1NDc4M0wsNTQ3ODRMLDU0 Nzg1TCw1NDc4NkwsNTQ3ODdMLAorNTQ3ODhMLDU0Nzg5TCw1NDc5MEwsNTQ3OTFMLDU0NzkyTCw1 NDc5M0wsNTQ3OTRMLDU0Nzk1TCw1NDc5NkwsNTQ3OTdMLAorNTQ3OThMLDU0Nzk5TCw1NDgwMEws NTQ4MDFMLDU0ODAyTCw1NDgwM0wsNTQ4MDRMLDU0ODA1TCw1NDgwNkwsNTQ4MDdMLAorNTQ4MDhM LDU0ODA5TCw1NDgxMEwsNTQ4MTFMLDU0ODEyTCw1NDgxM0wsNTQ4MTRMLDU0ODE1TCw1NDgxNkws NTQ4MTdMLAorNTQ4MThMLDU0ODE5TCw1NDgyMEwsNTQ4MjFMLDU0ODIyTCw1NDgyM0wsNTQ4MjRM LDU0ODI1TCw1NDgyNkwsNTQ4MjdMLAorNTQ4MjhMLDU0ODI5TCw1NDgzMEwsNTQ4MzFMLDU0ODMy TCw1NDgzM0wsNTQ4MzRMLDU0ODM1TCw1NDgzNkwsNTQ4MzdMLAorNTQ4MzhMLDU0ODM5TCw1NDg0 MEwsNTQ4NDFMLDU0ODQyTCw1NDg0M0wsNTQ4NDRMLDU0ODQ1TCw1NDg0NkwsNTQ4NDdMLAorNTQ4 NDhMLDU0ODQ5TCw1NDg1MEwsNTQ4NTFMLDU0ODUyTCw1NDg1M0wsNTQ4NTRMLDU0ODU1TCw1NDg1 NkwsNTQ4NTdMLAorNTQ4NThMLDU0ODU5TCw1NDg2MEwsNTQ4NjFMLDU0ODYyTCw1NDg2M0wsNTQ4 NjRMLDU0ODY1TCw1NDg2NkwsNTQ4NjdMLAorNTQ4NjhMLDU0ODY5TCw1NDg3MEwsNTQ4NzFMLDU0 ODcyTCw1NDg3M0wsNTQ4NzRMLDU0ODc1TCw1NDg3NkwsNTQ4NzdMLAorNTQ4NzhMLDU0ODc5TCw1 NDg4MEwsNTQ4ODFMLDU0ODgyTCw1NDg4M0wsNTQ4ODRMLDU0ODg1TCw1NDg4NkwsNTQ4ODdMLAor NTQ4ODhMLDU0ODg5TCw1NDg5MEwsNTQ4OTFMLDU0ODkyTCw1NDg5M0wsNTQ4OTRMLDU0ODk1TCw1 NDg5NkwsNTQ4OTdMLAorNTQ4OThMLDU0ODk5TCw1NDkwMEwsNTQ5MDFMLDU0OTAyTCw1NDkwM0ws NTQ5MDRMLDU0OTA1TCw1NDkwNkwsNTQ5MDdMLAorNTQ5MDhMLDU0OTA5TCw1NDkxMEwsNTQ5MTFM LDU0OTEyTCw1NDkxM0wsNTQ5MTRMLDU0OTE1TCw1NDkxNkwsNTQ5MTdMLAorNTQ5MThMLDU0OTE5 TCw1NDkyMEwsNTQ5MjFMLDU0OTIyTCw1NDkyM0wsNTQ5MjRMLDU0OTI1TCw1NDkyNkwsNTQ5MjdM LAorNTQ5MjhMLDU0OTI5TCw1NDkzMEwsNTQ5MzFMLDU0OTMyTCw1NDkzM0wsNTQ5MzRMLDU0OTM1 TCw1NDkzNkwsNTQ5MzdMLAorNTQ5MzhMLDU0OTM5TCw1NDk0MEwsNTQ5NDFMLDU0OTQyTCw1NDk0 M0wsNTQ5NDRMLDU0OTQ1TCw1NDk0NkwsNTQ5NDdMLAorNTQ5NDhMLDU0OTQ5TCw1NDk1MEwsNTQ5 NTFMLDU0OTUyTCw1NDk1M0wsNTQ5NTRMLDU0OTU1TCw1NDk1NkwsNTQ5NTdMLAorNTQ5NThMLDU0 OTU5TCw1NDk2MEwsNTQ5NjFMLDU0OTYyTCw1NDk2M0wsNTQ5NjRMLDU0OTY1TCw1NDk2NkwsNTQ5 NjdMLAorNTQ5NjhMLDU0OTY5TCw1NDk3MEwsNTQ5NzFMLDU0OTcyTCw1NDk3M0wsNTQ5NzRMLDU0 OTc1TCw1NDk3NkwsNTQ5NzdMLAorNTQ5NzhMLDU0OTc5TCw1NDk4MEwsNTQ5ODFMLDU0OTgyTCw1 NDk4M0wsNTQ5ODRMLDU0OTg1TCw1NDk4NkwsNTQ5ODdMLAorNTQ5ODhMLDU0OTg5TCw1NDk5MEws NTQ5OTFMLDU0OTkyTCw1NDk5M0wsNTQ5OTRMLDU0OTk1TCw1NDk5NkwsNTQ5OTdMLAorNTQ5OThM LDU0OTk5TCw1NTAwMEwsNTUwMDFMLDU1MDAyTCw1NTAwM0wsNTUwMDRMLDU1MDA1TCw1NTAwNkws NTUwMDdMLAorNTUwMDhMLDU1MDA5TCw1NTAxMEwsNTUwMTFMLDU1MDEyTCw1NTAxM0wsNTUwMTRM LDU1MDE1TCw1NTAxNkwsNTUwMTdMLAorNTUwMThMLDU1MDE5TCw1NTAyMEwsNTUwMjFMLDU1MDIy TCw1NTAyM0wsNTUwMjRMLDU1MDI1TCw1NTAyNkwsNTUwMjdMLAorNTUwMjhMLDU1MDI5TCw1NTAz MEwsNTUwMzFMLDU1MDMyTCw1NTAzM0wsNTUwMzRMLDU1MDM1TCw1NTAzNkwsNTUwMzdMLAorNTUw MzhMLDU1MDM5TCw1NTA0MEwsNTUwNDFMLDU1MDQyTCw1NTA0M0wsNTUwNDRMLDU1MDQ1TCw1NTA0 NkwsNTUwNDdMLAorNTUwNDhMLDU1MDQ5TCw1NTA1MEwsNTUwNTFMLDU1MDUyTCw1NTA1M0wsNTUw NTRMLDU1MDU1TCw1NTA1NkwsNTUwNTdMLAorNTUwNThMLDU1MDU5TCw1NTA2MEwsNTUwNjFMLDU1 MDYyTCw1NTA2M0wsNTUwNjRMLDU1MDY1TCw1NTA2NkwsNTUwNjdMLAorNTUwNjhMLDU1MDY5TCw1 NTA3MEwsNTUwNzFMLDU1MDcyTCw1NTA3M0wsNTUwNzRMLDU1MDc1TCw1NTA3NkwsNTUwNzdMLAor NTUwNzhMLDU1MDc5TCw1NTA4MEwsNTUwODFMLDU1MDgyTCw1NTA4M0wsNTUwODRMLDU1MDg1TCw1 NTA4NkwsNTUwODdMLAorNTUwODhMLDU1MDg5TCw1NTA5MEwsNTUwOTFMLDU1MDkyTCw1NTA5M0ws NTUwOTRMLDU1MDk1TCw1NTA5NkwsNTUwOTdMLAorNTUwOThMLDU1MDk5TCw1NTEwMEwsNTUxMDFM LDU1MTAyTCw1NTEwM0wsNTUxMDRMLDU1MTA1TCw1NTEwNkwsNTUxMDdMLAorNTUxMDhMLDU1MTA5 TCw1NTExMEwsNTUxMTFMLDU1MTEyTCw1NTExM0wsNTUxMTRMLDU1MTE1TCw1NTExNkwsNTUxMTdM LAorNTUxMThMLDU1MTE5TCw1NTEyMEwsNTUxMjFMLDU1MTIyTCw1NTEyM0wsNTUxMjRMLDU1MTI1 TCw1NTEyNkwsNTUxMjdMLAorNTUxMjhMLDU1MTI5TCw1NTEzMEwsNTUxMzFMLDU1MTMyTCw1NTEz M0wsNTUxMzRMLDU1MTM1TCw1NTEzNkwsNTUxMzdMLAorNTUxMzhMLDU1MTM5TCw1NTE0MEwsNTUx NDFMLDU1MTQyTCw1NTE0M0wsNTUxNDRMLDU1MTQ1TCw1NTE0NkwsNTUxNDdMLAorNTUxNDhMLDU1 MTQ5TCw1NTE1MEwsNTUxNTFMLDU1MTUyTCw1NTE1M0wsNTUxNTRMLDU1MTU1TCw1NTE1NkwsNTUx NTdMLAorNTUxNThMLDU1MTU5TCw1NTE2MEwsNTUxNjFMLDU1MTYyTCw1NTE2M0wsNTUxNjRMLDU1 MTY1TCw1NTE2NkwsNTUxNjdMLAorNTUxNjhMLDU1MTY5TCw1NTE3MEwsNTUxNzFMLDU1MTcyTCw1 NTE3M0wsNTUxNzRMLDU1MTc1TCw1NTE3NkwsNTUxNzdMLAorNTUxNzhMLDU1MTc5TCw1NTE4MEws NTUxODFMLDU1MTgyTCw1NTE4M0wsNTUxODRMLDU1MTg1TCw1NTE4NkwsNTUxODdMLAorNTUxODhM LDU1MTg5TCw1NTE5MEwsNTUxOTFMLDU1MTkyTCw1NTE5M0wsNTUxOTRMLDU1MTk1TCw1NTE5Nkws NTUxOTdMLAorNTUxOThMLDU1MTk5TCw1NTIwMEwsNTUyMDFMLDU1MjAyTCw1NTIwM0wsNTUyMDRM LDU1MjA1TCw1NTIwNkwsNTUyMDdMLAorNTUyMDhMLDU1MjA5TCw1NTIxMEwsNTUyMTFMLDU1MjEy TCw1NTIxM0wsNTUyMTRMLDU1MjE1TCw1NTIxNkwsNTUyMTdMLAorNTUyMThMLDU1MjE5TCw1NTIy MEwsNTUyMjFMLDU1MjIyTCw1NTIyM0wsNTUyMjRMLDU1MjI1TCw1NTIyNkwsNTUyMjdMLAorNTUy MjhMLDU1MjI5TCw1NTIzMEwsNTUyMzFMLDU1MjMyTCw1NTIzM0wsNTUyMzRMLDU1MjM1TCw1NTIz NkwsNTUyMzdMLAorNTUyMzhMLDU1MjM5TCw1NTI0MEwsNTUyNDFMLDU1MjQyTCw1NTI0M0wsNTUy NDRMLDU1MjQ1TCw1NTI0NkwsNTUyNDdMLAorNTUyNDhMLDU1MjQ5TCw1NTI1MEwsNTUyNTFMLDU1 MjUyTCw1NTI1M0wsNTUyNTRMLDU1MjU1TCw1NTI1NkwsNTUyNTdMLAorNTUyNThMLDU1MjU5TCw1 NTI2MEwsNTUyNjFMLDU1MjYyTCw1NTI2M0wsNTUyNjRMLDU1MjY1TCw1NTI2NkwsNTUyNjdMLAor NTUyNjhMLDU1MjY5TCw1NTI3MEwsNTUyNzFMLDU1MjcyTCw1NTI3M0wsNTUyNzRMLDU1Mjc1TCw1 NTI3NkwsNTUyNzdMLAorNTUyNzhMLDU1Mjc5TCw1NTI4MEwsNTUyODFMLDU1MjgyTCw1NTI4M0ws NTUyODRMLDU1Mjg1TCw1NTI4NkwsNTUyODdMLAorNTUyODhMLDU1Mjg5TCw1NTI5MEwsNTUyOTFM LDU1MjkyTCw1NTI5M0wsNTUyOTRMLDU1Mjk1TCw1NTI5NkwsNTUyOTdMLAorNTUyOThMLDU1Mjk5 TCw1NTMwMEwsNTUzMDFMLDU1MzAyTCw1NTMwM0wsNTUzMDRMLDU1MzA1TCw1NTMwNkwsNTUzMDdM LAorNTUzMDhMLDU1MzA5TCw1NTMxMEwsNTUzMTFMLDU1MzEyTCw1NTMxM0wsNTUzMTRMLDU1MzE1 TCw1NTMxNkwsNTUzMTdMLAorNTUzMThMLDU1MzE5TCw1NTMyMEwsNTUzMjFMLDU1MzIyTCw1NTMy M0wsNTUzMjRMLDU1MzI1TCw1NTMyNkwsNTUzMjdMLAorNTUzMjhMLDU1MzI5TCw1NTMzMEwsNTUz MzFMLDU1MzMyTCw1NTMzM0wsNTUzMzRMLDU1MzM1TCw1NTMzNkwsNTUzMzdMLAorNTUzMzhMLDU1 MzM5TCw1NTM0MEwsNTUzNDFMLDU1MzQyTCw1NTM0M0wsNTUzNDRMLDU1MzQ1TCw1NTM0NkwsNTUz NDdMLAorNTUzNDhMLDU1MzQ5TCw1NTM1MEwsNTUzNTFMLDU1MzUyTCw1NTM1M0wsNTUzNTRMLDU1 MzU1TCw1NTM1NkwsNTUzNTdMLAorNTUzNThMLDU1MzU5TCw1NTM2MEwsNTUzNjFMLDU1MzYyTCw1 NTM2M0wsNTUzNjRMLDU1MzY1TCw1NTM2NkwsNTUzNjdMLAorNTUzNjhMLDU1MzY5TCw1NTM3MEws NTUzNzFMLDU1MzcyTCw1NTM3M0wsNTUzNzRMLDU1Mzc1TCw1NTM3NkwsNTUzNzdMLAorNTUzNzhM LDU1Mzc5TCw1NTM4MEwsNTUzODFMLDU1MzgyTCw1NTM4M0wsNTUzODRMLDU1Mzg1TCw1NTM4Nkws NTUzODdMLAorNTUzODhMLDU1Mzg5TCw1NTM5MEwsNTUzOTFMLDU1MzkyTCw1NTM5M0wsNTUzOTRM LDU1Mzk1TCw1NTM5NkwsNTUzOTdMLAorNTUzOThMLDU1Mzk5TCw1NTQwMEwsNTU0MDFMLDU1NDAy TCw1NTQwM0wsNTU0MDRMLDU1NDA1TCw1NTQwNkwsNTU0MDdMLAorNTU0MDhMLDU1NDA5TCw1NTQx MEwsNTU0MTFMLDU1NDEyTCw1NTQxM0wsNTU0MTRMLDU1NDE1TCw1NTQxNkwsNTU0MTdMLAorNTU0 MThMLDU1NDE5TCw1NTQyMEwsNTU0MjFMLDU1NDIyTCw1NTQyM0wsNTU0MjRMLDU1NDI1TCw1NTQy NkwsNTU0MjdMLAorNTU0MjhMLDU1NDI5TCw1NTQzMEwsNTU0MzFMLDU1NDMyTCw1NTQzM0wsNTU0 MzRMLDU1NDM1TCw1NTQzNkwsNTU0MzdMLAorNTU0MzhMLDU1NDM5TCw1NTQ0MEwsNTU0NDFMLDU1 NDQyTCw1NTQ0M0wsNTU0NDRMLDU1NDQ1TCw1NTQ0NkwsNTU0NDdMLAorNTU0NDhMLDU1NDQ5TCw1 NTQ1MEwsNTU0NTFMLDU1NDUyTCw1NTQ1M0wsNTU0NTRMLDU1NDU1TCw1NTQ1NkwsNTU0NTdMLAor NTU0NThMLDU1NDU5TCw1NTQ2MEwsNTU0NjFMLDU1NDYyTCw1NTQ2M0wsNTU0NjRMLDU1NDY1TCw1 NTQ2NkwsNTU0NjdMLAorNTU0NjhMLDU1NDY5TCw1NTQ3MEwsNTU0NzFMLDU1NDcyTCw1NTQ3M0ws NTU0NzRMLDU1NDc1TCw1NTQ3NkwsNTU0NzdMLAorNTU0NzhMLDU1NDc5TCw1NTQ4MEwsNTU0ODFM LDU1NDgyTCw1NTQ4M0wsNTU0ODRMLDU1NDg1TCw1NTQ4NkwsNTU0ODdMLAorNTU0ODhMLDU1NDg5 TCw1NTQ5MEwsNTU0OTFMLDU1NDkyTCw1NTQ5M0wsNTU0OTRMLDU1NDk1TCw1NTQ5NkwsNTU0OTdM LAorNTU0OThMLDU1NDk5TCw1NTUwMEwsNTU1MDFMLDU1NTAyTCw1NTUwM0wsNTU1MDRMLDU1NTA1 TCw1NTUwNkwsNTU1MDdMLAorNTU1MDhMLDU1NTA5TCw1NTUxMEwsNTU1MTFMLDU1NTEyTCw1NTUx M0wsNTU1MTRMLDU1NTE1TCw1NTUxNkwsNTU1MTdMLAorNTU1MThMLDU1NTE5TCw1NTUyMEwsNTU1 MjFMLDU1NTIyTCw1NTUyM0wsNTU1MjRMLDU1NTI1TCw1NTUyNkwsNTU1MjdMLAorNTU1MjhMLDU1 NTI5TCw1NTUzMEwsNTU1MzFMLDU1NTMyTCw1NTUzM0wsNTU1MzRMLDU1NTM1TCw1NTUzNkwsNTU1 MzdMLAorNTU1MzhMLDU1NTM5TCw1NTU0MEwsNTU1NDFMLDU1NTQyTCw1NTU0M0wsNTU1NDRMLDU1 NTQ1TCw1NTU0NkwsNTU1NDdMLAorNTU1NDhMLDU1NTQ5TCw1NTU1MEwsNTU1NTFMLDU1NTUyTCw1 NTU1M0wsNTU1NTRMLDU1NTU1TCw1NTU1NkwsNTU1NTdMLAorNTU1NThMLDU1NTU5TCw1NTU2MEws NTU1NjFMLDU1NTYyTCw1NTU2M0wsNTU1NjRMLDU1NTY1TCw1NTU2NkwsNTU1NjdMLAorNTU1NjhM LDU1NTY5TCw1NTU3MEwsNTU1NzFMLDU1NTcyTCw1NTU3M0wsNTU1NzRMLDU1NTc1TCw1NTU3Nkws NTU1NzdMLAorNTU1NzhMLDU1NTc5TCw1NTU4MEwsNTU1ODFMLDU1NTgyTCw1NTU4M0wsNTU1ODRM LDU1NTg1TCw1NTU4NkwsNTU1ODdMLAorNTU1ODhMLDU1NTg5TCw1NTU5MEwsNTU1OTFMLDU1NTky TCw1NTU5M0wsNTU1OTRMLDU1NTk1TCw1NTU5NkwsNTU1OTdMLAorNTU1OThMLDU1NTk5TCw1NTYw MEwsNTU2MDFMLDU1NjAyTCw1NTYwM0wsNTU2MDRMLDU1NjA1TCw1NTYwNkwsNTU2MDdMLAorNTU2 MDhMLDU1NjA5TCw1NTYxMEwsNTU2MTFMLDU1NjEyTCw1NTYxM0wsNTU2MTRMLDU1NjE1TCw1NTYx NkwsNTU2MTdMLAorNTU2MThMLDU1NjE5TCw1NTYyMEwsNTU2MjFMLDU1NjIyTCw1NTYyM0wsNTU2 MjRMLDU1NjI1TCw1NTYyNkwsNTU2MjdMLAorNTU2MjhMLDU1NjI5TCw1NTYzMEwsNTU2MzFMLDU1 NjMyTCw1NTYzM0wsNTU2MzRMLDU1NjM1TCw1NTYzNkwsNTU2MzdMLAorNTU2MzhMLDU1NjM5TCw1 NTY0MEwsNTU2NDFMLDU1NjQyTCw1NTY0M0wsNTU2NDRMLDU1NjQ1TCw1NTY0NkwsNTU2NDdMLAor NTU2NDhMLDU1NjQ5TCw1NTY1MEwsNTU2NTFMLDU1NjUyTCw1NTY1M0wsNTU2NTRMLDU1NjU1TCw1 NTY1NkwsNTU2NTdMLAorNTU2NThMLDU1NjU5TCw1NTY2MEwsNTU2NjFMLDU1NjYyTCw1NTY2M0ws NTU2NjRMLDU1NjY1TCw1NTY2NkwsNTU2NjdMLAorNTU2NjhMLDU1NjY5TCw1NTY3MEwsNTU2NzFM LDU1NjcyTCw1NTY3M0wsNTU2NzRMLDU1Njc1TCw1NTY3NkwsNTU2NzdMLAorNTU2NzhMLDU1Njc5 TCw1NTY4MEwsNTU2ODFMLDU1NjgyTCw1NTY4M0wsNTU2ODRMLDU1Njg1TCw1NTY4NkwsNTU2ODdM LAorNTU2ODhMLDU1Njg5TCw1NTY5MEwsNTU2OTFMLDU1NjkyTCw1NTY5M0wsNTU2OTRMLDU1Njk1 TCw1NTY5NkwsNTU2OTdMLAorNTU2OThMLDU1Njk5TCw1NTcwMEwsNTU3MDFMLDU1NzAyTCw1NTcw M0wsNTU3MDRMLDU1NzA1TCw1NTcwNkwsNTU3MDdMLAorNTU3MDhMLDU1NzA5TCw1NTcxMEwsNTU3 MTFMLDU1NzEyTCw1NTcxM0wsNTU3MTRMLDU1NzE1TCw1NTcxNkwsNTU3MTdMLAorNTU3MThMLDU1 NzE5TCw1NTcyMEwsNTU3MjFMLDU1NzIyTCw1NTcyM0wsNTU3MjRMLDU1NzI1TCw1NTcyNkwsNTU3 MjdMLAorNTU3MjhMLDU1NzI5TCw1NTczMEwsNTU3MzFMLDU1NzMyTCw1NTczM0wsNTU3MzRMLDU1 NzM1TCw1NTczNkwsNTU3MzdMLAorNTU3MzhMLDU1NzM5TCw1NTc0MEwsNTU3NDFMLDU1NzQyTCw1 NTc0M0wsNTU3NDRMLDU1NzQ1TCw1NTc0NkwsNTU3NDdMLAorNTU3NDhMLDU1NzQ5TCw1NTc1MEws NTU3NTFMLDU1NzUyTCw1NTc1M0wsNTU3NTRMLDU1NzU1TCw1NTc1NkwsNTU3NTdMLAorNTU3NThM LDU1NzU5TCw1NTc2MEwsNTU3NjFMLDU1NzYyTCw1NTc2M0wsNTU3NjRMLDU1NzY1TCw1NTc2Nkws NTU3NjdMLAorNTU3NjhMLDU1NzY5TCw1NTc3MEwsNTU3NzFMLDU1NzcyTCw1NTc3M0wsNTU3NzRM LDU1Nzc1TCw1NTc3NkwsNTU3NzdMLAorNTU3NzhMLDU1Nzc5TCw1NTc4MEwsNTU3ODFMLDU1Nzgy TCw1NTc4M0wsNTU3ODRMLDU1Nzg1TCw1NTc4NkwsNTU3ODdMLAorNTU3ODhMLDU1Nzg5TCw1NTc5 MEwsNTU3OTFMLDU1NzkyTCw1NTc5M0wsNTU3OTRMLDU1Nzk1TCw1NTc5NkwsNTU3OTdMLAorNTU3 OThMLDU1Nzk5TCw1NTgwMEwsNTU4MDFMLDU1ODAyTCw1NTgwM0wsNTU4MDRMLDU1ODA1TCw1NTgw NkwsNTU4MDdMLAorNTU4MDhMLDU1ODA5TCw1NTgxMEwsNTU4MTFMLDU1ODEyTCw1NTgxM0wsNTU4 MTRMLDU1ODE1TCw1NTgxNkwsNTU4MTdMLAorNTU4MThMLDU1ODE5TCw1NTgyMEwsNTU4MjFMLDU1 ODIyTCw1NTgyM0wsNTU4MjRMLDU1ODI1TCw1NTgyNkwsNTU4MjdMLAorNTU4MjhMLDU1ODI5TCw1 NTgzMEwsNTU4MzFMLDU1ODMyTCw1NTgzM0wsNTU4MzRMLDU1ODM1TCw1NTgzNkwsNTU4MzdMLAor NTU4MzhMLDU1ODM5TCw1NTg0MEwsNTU4NDFMLDU1ODQyTCw1NTg0M0wsNTU4NDRMLDU1ODQ1TCw1 NTg0NkwsNTU4NDdMLAorNTU4NDhMLDU1ODQ5TCw1NTg1MEwsNTU4NTFMLDU1ODUyTCw1NTg1M0ws NTU4NTRMLDU1ODU1TCw1NTg1NkwsNTU4NTdMLAorNTU4NThMLDU1ODU5TCw1NTg2MEwsNTU4NjFM LDU1ODYyTCw1NTg2M0wsNTU4NjRMLDU1ODY1TCw1NTg2NkwsNTU4NjdMLAorNTU4NjhMLDU1ODY5 TCw1NTg3MEwsNTU4NzFMLDU1ODcyTCw1NTg3M0wsNTU4NzRMLDU1ODc1TCw1NTg3NkwsNTU4NzdM LAorNTU4NzhMLDU1ODc5TCw1NTg4MEwsNTU4ODFMLDU1ODgyTCw1NTg4M0wsNTU4ODRMLDU1ODg1 TCw1NTg4NkwsNTU4ODdMLAorNTU4ODhMLDU1ODg5TCw1NTg5MEwsNTU4OTFMLDU1ODkyTCw1NTg5 M0wsNTU4OTRMLDU1ODk1TCw1NTg5NkwsNTU4OTdMLAorNTU4OThMLDU1ODk5TCw1NTkwMEwsNTU5 MDFMLDU1OTAyTCw1NTkwM0wsNTU5MDRMLDU1OTA1TCw1NTkwNkwsNTU5MDdMLAorNTU5MDhMLDU1 OTA5TCw1NTkxMEwsNTU5MTFMLDU1OTEyTCw1NTkxM0wsNTU5MTRMLDU1OTE1TCw1NTkxNkwsNTU5 MTdMLAorNTU5MThMLDU1OTE5TCw1NTkyMEwsNTU5MjFMLDU1OTIyTCw1NTkyM0wsNTU5MjRMLDU1 OTI1TCw1NTkyNkwsNTU5MjdMLAorNTU5MjhMLDU1OTI5TCw1NTkzMEwsNTU5MzFMLDU1OTMyTCw1 NTkzM0wsNTU5MzRMLDU1OTM1TCw1NTkzNkwsNTU5MzdMLAorNTU5MzhMLDU1OTM5TCw1NTk0MEws NTU5NDFMLDU1OTQyTCw1NTk0M0wsNTU5NDRMLDU1OTQ1TCw1NTk0NkwsNTU5NDdMLAorNTU5NDhM LDU1OTQ5TCw1NTk1MEwsNTU5NTFMLDU1OTUyTCw1NTk1M0wsNTU5NTRMLDU1OTU1TCw1NTk1Nkws NTU5NTdMLAorNTU5NThMLDU1OTU5TCw1NTk2MEwsNTU5NjFMLDU1OTYyTCw1NTk2M0wsNTU5NjRM LDU1OTY1TCw1NTk2NkwsNTU5NjdMLAorNTU5NjhMLDU1OTY5TCw1NTk3MEwsNTU5NzFMLDU1OTcy TCw1NTk3M0wsNTU5NzRMLDU1OTc1TCw1NTk3NkwsNTU5NzdMLAorNTU5NzhMLDU1OTc5TCw1NTk4 MEwsNTU5ODFMLDU1OTgyTCw1NTk4M0wsNTU5ODRMLDU1OTg1TCw1NTk4NkwsNTU5ODdMLAorNTU5 ODhMLDU1OTg5TCw1NTk5MEwsNTU5OTFMLDU1OTkyTCw1NTk5M0wsNTU5OTRMLDU1OTk1TCw1NTk5 NkwsNTU5OTdMLAorNTU5OThMLDU1OTk5TCw1NjAwMEwsNTYwMDFMLDU2MDAyTCw1NjAwM0wsNTYw MDRMLDU2MDA1TCw1NjAwNkwsNTYwMDdMLAorNTYwMDhMLDU2MDA5TCw1NjAxMEwsNTYwMTFMLDU2 MDEyTCw1NjAxM0wsNTYwMTRMLDU2MDE1TCw1NjAxNkwsNTYwMTdMLAorNTYwMThMLDU2MDE5TCw1 NjAyMEwsNTYwMjFMLDU2MDIyTCw1NjAyM0wsNTYwMjRMLDU2MDI1TCw1NjAyNkwsNTYwMjdMLAor NTYwMjhMLDU2MDI5TCw1NjAzMEwsNTYwMzFMLDU2MDMyTCw1NjAzM0wsNTYwMzRMLDU2MDM1TCw1 NjAzNkwsNTYwMzdMLAorNTYwMzhMLDU2MDM5TCw1NjA0MEwsNTYwNDFMLDU2MDQyTCw1NjA0M0ws NTYwNDRMLDU2MDQ1TCw1NjA0NkwsNTYwNDdMLAorNTYwNDhMLDU2MDQ5TCw1NjA1MEwsNTYwNTFM LDU2MDUyTCw1NjA1M0wsNTYwNTRMLDU2MDU1TCw1NjA1NkwsNTYwNTdMLAorNTYwNThMLDU2MDU5 TCw1NjA2MEwsNTYwNjFMLDU2MDYyTCw1NjA2M0wsNTYwNjRMLDU2MDY1TCw1NjA2NkwsNTYwNjdM LAorNTYwNjhMLDU2MDY5TCw1NjA3MEwsNTYwNzFMLDU2MDcyTCw1NjA3M0wsNTYwNzRMLDU2MDc1 TCw1NjA3NkwsNTYwNzdMLAorNTYwNzhMLDU2MDc5TCw1NjA4MEwsNTYwODFMLDU2MDgyTCw1NjA4 M0wsNTYwODRMLDU2MDg1TCw1NjA4NkwsNTYwODdMLAorNTYwODhMLDU2MDg5TCw1NjA5MEwsNTYw OTFMLDU2MDkyTCw1NjA5M0wsNTYwOTRMLDU2MDk1TCw1NjA5NkwsNTYwOTdMLAorNTYwOThMLDU2 MDk5TCw1NjEwMEwsNTYxMDFMLDU2MTAyTCw1NjEwM0wsNTYxMDRMLDU2MTA1TCw1NjEwNkwsNTYx MDdMLAorNTYxMDhMLDU2MTA5TCw1NjExMEwsNTYxMTFMLDU2MTEyTCw1NjExM0wsNTYxMTRMLDU2 MTE1TCw1NjExNkwsNTYxMTdMLAorNTYxMThMLDU2MTE5TCw1NjEyMEwsNTYxMjFMLDU2MTIyTCw1 NjEyM0wsNTYxMjRMLDU2MTI1TCw1NjEyNkwsNTYxMjdMLAorNTYxMjhMLDU2MTI5TCw1NjEzMEws NTYxMzFMLDU2MTMyTCw1NjEzM0wsNTYxMzRMLDU2MTM1TCw1NjEzNkwsNTYxMzdMLAorNTYxMzhM LDU2MTM5TCw1NjE0MEwsNTYxNDFMLDU2MTQyTCw1NjE0M0wsNTYxNDRMLDU2MTQ1TCw1NjE0Nkws NTYxNDdMLAorNTYxNDhMLDU2MTQ5TCw1NjE1MEwsNTYxNTFMLDU2MTUyTCw1NjE1M0wsNTYxNTRM LDU2MTU1TCw1NjE1NkwsNTYxNTdMLAorNTYxNThMLDU2MTU5TCw1NjE2MEwsNTYxNjFMLDU2MTYy TCw1NjE2M0wsNTYxNjRMLDU2MTY1TCw1NjE2NkwsNTYxNjdMLAorNTYxNjhMLDU2MTY5TCw1NjE3 MEwsNTYxNzFMLDU2MTcyTCw1NjE3M0wsNTYxNzRMLDU2MTc1TCw1NjE3NkwsNTYxNzdMLAorNTYx NzhMLDU2MTc5TCw1NjE4MEwsNTYxODFMLDU2MTgyTCw1NjE4M0wsNTYxODRMLDU2MTg1TCw1NjE4 NkwsNTYxODdMLAorNTYxODhMLDU2MTg5TCw1NjE5MEwsNTYxOTFMLDU2MTkyTCw1NjE5M0wsNTYx OTRMLDU2MTk1TCw1NjE5NkwsNTYxOTdMLAorNTYxOThMLDU2MTk5TCw1NjIwMEwsNTYyMDFMLDU2 MjAyTCw1NjIwM0wsNTYyMDRMLDU2MjA1TCw1NjIwNkwsNTYyMDdMLAorNTYyMDhMLDU2MjA5TCw1 NjIxMEwsNTYyMTFMLDU2MjEyTCw1NjIxM0wsNTYyMTRMLDU2MjE1TCw1NjIxNkwsNTYyMTdMLAor NTYyMThMLDU2MjE5TCw1NjIyMEwsNTYyMjFMLDU2MjIyTCw1NjIyM0wsNTYyMjRMLDU2MjI1TCw1 NjIyNkwsNTYyMjdMLAorNTYyMjhMLDU2MjI5TCw1NjIzMEwsNTYyMzFMLDU2MjMyTCw1NjIzM0ws NTYyMzRMLDU2MjM1TCw1NjIzNkwsNTYyMzdMLAorNTYyMzhMLDU2MjM5TCw1NjI0MEwsNTYyNDFM LDU2MjQyTCw1NjI0M0wsNTYyNDRMLDU2MjQ1TCw1NjI0NkwsNTYyNDdMLAorNTYyNDhMLDU2MjQ5 TCw1NjI1MEwsNTYyNTFMLDU2MjUyTCw1NjI1M0wsNTYyNTRMLDU2MjU1TCw1NjI1NkwsNTYyNTdM LAorNTYyNThMLDU2MjU5TCw1NjI2MEwsNTYyNjFMLDU2MjYyTCw1NjI2M0wsNTYyNjRMLDU2MjY1 TCw1NjI2NkwsNTYyNjdMLAorNTYyNjhMLDU2MjY5TCw1NjI3MEwsNTYyNzFMLDU2MjcyTCw1NjI3 M0wsNTYyNzRMLDU2Mjc1TCw1NjI3NkwsNTYyNzdMLAorNTYyNzhMLDU2Mjc5TCw1NjI4MEwsNTYy ODFMLDU2MjgyTCw1NjI4M0wsNTYyODRMLDU2Mjg1TCw1NjI4NkwsNTYyODdMLAorNTYyODhMLDU2 Mjg5TCw1NjI5MEwsNTYyOTFMLDU2MjkyTCw1NjI5M0wsNTYyOTRMLDU2Mjk1TCw1NjI5NkwsNTYy OTdMLAorNTYyOThMLDU2Mjk5TCw1NjMwMEwsNTYzMDFMLDU2MzAyTCw1NjMwM0wsNTYzMDRMLDU2 MzA1TCw1NjMwNkwsNTYzMDdMLAorNTYzMDhMLDU2MzA5TCw1NjMxMEwsNTYzMTFMLDU2MzEyTCw1 NjMxM0wsNTYzMTRMLDU2MzE1TCw1NjMxNkwsNTYzMTdMLAorNTYzMThMLDU2MzE5TCw1NjMyMEws NTYzMjFMLDU2MzIyTCw1NjMyM0wsNTYzMjRMLDU2MzI1TCw1NjMyNkwsNTYzMjdMLAorNTYzMjhM LDU2MzI5TCw1NjMzMEwsNTYzMzFMLDU2MzMyTCw1NjMzM0wsNTYzMzRMLDU2MzM1TCw1NjMzNkws NTYzMzdMLAorNTYzMzhMLDU2MzM5TCw1NjM0MEwsNTYzNDFMLDU2MzQyTCw1NjM0M0wsNTYzNDRM LDU2MzQ1TCw1NjM0NkwsNTYzNDdMLAorNTYzNDhMLDU2MzQ5TCw1NjM1MEwsNTYzNTFMLDU2MzUy TCw1NjM1M0wsNTYzNTRMLDU2MzU1TCw1NjM1NkwsNTYzNTdMLAorNTYzNThMLDU2MzU5TCw1NjM2 MEwsNTYzNjFMLDU2MzYyTCw1NjM2M0wsNTYzNjRMLDU2MzY1TCw1NjM2NkwsNTYzNjdMLAorNTYz NjhMLDU2MzY5TCw1NjM3MEwsNTYzNzFMLDU2MzcyTCw1NjM3M0wsNTYzNzRMLDU2Mzc1TCw1NjM3 NkwsNTYzNzdMLAorNTYzNzhMLDU2Mzc5TCw1NjM4MEwsNTYzODFMLDU2MzgyTCw1NjM4M0wsNTYz ODRMLDU2Mzg1TCw1NjM4NkwsNTYzODdMLAorNTYzODhMLDU2Mzg5TCw1NjM5MEwsNTYzOTFMLDU2 MzkyTCw1NjM5M0wsNTYzOTRMLDU2Mzk1TCw1NjM5NkwsNTYzOTdMLAorNTYzOThMLDU2Mzk5TCw1 NjQwMEwsNTY0MDFMLDU2NDAyTCw1NjQwM0wsNTY0MDRMLDU2NDA1TCw1NjQwNkwsNTY0MDdMLAor NTY0MDhMLDU2NDA5TCw1NjQxMEwsNTY0MTFMLDU2NDEyTCw1NjQxM0wsNTY0MTRMLDU2NDE1TCw1 NjQxNkwsNTY0MTdMLAorNTY0MThMLDU2NDE5TCw1NjQyMEwsNTY0MjFMLDU2NDIyTCw1NjQyM0ws NTY0MjRMLDU2NDI1TCw1NjQyNkwsNTY0MjdMLAorNTY0MjhMLDU2NDI5TCw1NjQzMEwsNTY0MzFM LDU2NDMyTCw1NjQzM0wsNTY0MzRMLDU2NDM1TCw1NjQzNkwsNTY0MzdMLAorNTY0MzhMLDU2NDM5 TCw1NjQ0MEwsNTY0NDFMLDU2NDQyTCw1NjQ0M0wsNTY0NDRMLDU2NDQ1TCw1NjQ0NkwsNTY0NDdM LAorNTY0NDhMLDU2NDQ5TCw1NjQ1MEwsNTY0NTFMLDU2NDUyTCw1NjQ1M0wsNTY0NTRMLDU2NDU1 TCw1NjQ1NkwsNTY0NTdMLAorNTY0NThMLDU2NDU5TCw1NjQ2MEwsNTY0NjFMLDU2NDYyTCw1NjQ2 M0wsNTY0NjRMLDU2NDY1TCw1NjQ2NkwsNTY0NjdMLAorNTY0NjhMLDU2NDY5TCw1NjQ3MEwsNTY0 NzFMLDU2NDcyTCw1NjQ3M0wsNTY0NzRMLDU2NDc1TCw1NjQ3NkwsNTY0NzdMLAorNTY0NzhMLDU2 NDc5TCw1NjQ4MEwsNTY0ODFMLDU2NDgyTCw1NjQ4M0wsNTY0ODRMLDU2NDg1TCw1NjQ4NkwsNTY0 ODdMLAorNTY0ODhMLDU2NDg5TCw1NjQ5MEwsNTY0OTFMLDU2NDkyTCw1NjQ5M0wsNTY0OTRMLDU2 NDk1TCw1NjQ5NkwsNTY0OTdMLAorNTY0OThMLDU2NDk5TCw1NjUwMEwsNTY1MDFMLDU2NTAyTCw1 NjUwM0wsNTY1MDRMLDU2NTA1TCw1NjUwNkwsNTY1MDdMLAorNTY1MDhMLDU2NTA5TCw1NjUxMEws NTY1MTFMLDU2NTEyTCw1NjUxM0wsNTY1MTRMLDU2NTE1TCw1NjUxNkwsNTY1MTdMLAorNTY1MThM LDU2NTE5TCw1NjUyMEwsNTY1MjFMLDU2NTIyTCw1NjUyM0wsNTY1MjRMLDU2NTI1TCw1NjUyNkws NTY1MjdMLAorNTY1MjhMLDU2NTI5TCw1NjUzMEwsNTY1MzFMLDU2NTMyTCw1NjUzM0wsNTY1MzRM LDU2NTM1TCw1NjUzNkwsNTY1MzdMLAorNTY1MzhMLDU2NTM5TCw1NjU0MEwsNTY1NDFMLDU2NTQy TCw1NjU0M0wsNTY1NDRMLDU2NTQ1TCw1NjU0NkwsNTY1NDdMLAorNTY1NDhMLDU2NTQ5TCw1NjU1 MEwsNTY1NTFMLDU2NTUyTCw1NjU1M0wsNTY1NTRMLDU2NTU1TCw1NjU1NkwsNTY1NTdMLAorNTY1 NThMLDU2NTU5TCw1NjU2MEwsNTY1NjFMLDU2NTYyTCw1NjU2M0wsNTY1NjRMLDU2NTY1TCw1NjU2 NkwsNTY1NjdMLAorNTY1NjhMLDU2NTY5TCw1NjU3MEwsNTY1NzFMLDU2NTcyTCw1NjU3M0wsNTY1 NzRMLDU2NTc1TCw1NjU3NkwsNTY1NzdMLAorNTY1NzhMLDU2NTc5TCw1NjU4MEwsNTY1ODFMLDU2 NTgyTCw1NjU4M0wsNTY1ODRMLDU2NTg1TCw1NjU4NkwsNTY1ODdMLAorNTY1ODhMLDU2NTg5TCw1 NjU5MEwsNTY1OTFMLDU2NTkyTCw1NjU5M0wsNTY1OTRMLDU2NTk1TCw1NjU5NkwsNTY1OTdMLAor NTY1OThMLDU2NTk5TCw1NjYwMEwsNTY2MDFMLDU2NjAyTCw1NjYwM0wsNTY2MDRMLDU2NjA1TCw1 NjYwNkwsNTY2MDdMLAorNTY2MDhMLDU2NjA5TCw1NjYxMEwsNTY2MTFMLDU2NjEyTCw1NjYxM0ws NTY2MTRMLDU2NjE1TCw1NjYxNkwsNTY2MTdMLAorNTY2MThMLDU2NjE5TCw1NjYyMEwsNTY2MjFM LDU2NjIyTCw1NjYyM0wsNTY2MjRMLDU2NjI1TCw1NjYyNkwsNTY2MjdMLAorNTY2MjhMLDU2NjI5 TCw1NjYzMEwsNTY2MzFMLDU2NjMyTCw1NjYzM0wsNTY2MzRMLDU2NjM1TCw1NjYzNkwsNTY2MzdM LAorNTY2MzhMLDU2NjM5TCw1NjY0MEwsNTY2NDFMLDU2NjQyTCw1NjY0M0wsNTY2NDRMLDU2NjQ1 TCw1NjY0NkwsNTY2NDdMLAorNTY2NDhMLDU2NjQ5TCw1NjY1MEwsNTY2NTFMLDU2NjUyTCw1NjY1 M0wsNTY2NTRMLDU2NjU1TCw1NjY1NkwsNTY2NTdMLAorNTY2NThMLDU2NjU5TCw1NjY2MEwsNTY2 NjFMLDU2NjYyTCw1NjY2M0wsNTY2NjRMLDU2NjY1TCw1NjY2NkwsNTY2NjdMLAorNTY2NjhMLDU2 NjY5TCw1NjY3MEwsNTY2NzFMLDU2NjcyTCw1NjY3M0wsNTY2NzRMLDU2Njc1TCw1NjY3NkwsNTY2 NzdMLAorNTY2NzhMLDU2Njc5TCw1NjY4MEwsNTY2ODFMLDU2NjgyTCw1NjY4M0wsNTY2ODRMLDU2 Njg1TCw1NjY4NkwsNTY2ODdMLAorNTY2ODhMLDU2Njg5TCw1NjY5MEwsNTY2OTFMLDU2NjkyTCw1 NjY5M0wsNTY2OTRMLDU2Njk1TCw1NjY5NkwsNTY2OTdMLAorNTY2OThMLDU2Njk5TCw1NjcwMEws NTY3MDFMLDU2NzAyTCw1NjcwM0wsNTY3MDRMLDU2NzA1TCw1NjcwNkwsNTY3MDdMLAorNTY3MDhM LDU2NzA5TCw1NjcxMEwsNTY3MTFMLDU2NzEyTCw1NjcxM0wsNTY3MTRMLDU2NzE1TCw1NjcxNkws NTY3MTdMLAorNTY3MThMLDU2NzE5TCw1NjcyMEwsNTY3MjFMLDU2NzIyTCw1NjcyM0wsNTY3MjRM LDU2NzI1TCw1NjcyNkwsNTY3MjdMLAorNTY3MjhMLDU2NzI5TCw1NjczMEwsNTY3MzFMLDU2NzMy TCw1NjczM0wsNTY3MzRMLDU2NzM1TCw1NjczNkwsNTY3MzdMLAorNTY3MzhMLDU2NzM5TCw1Njc0 MEwsNTY3NDFMLDU2NzQyTCw1Njc0M0wsNTY3NDRMLDU2NzQ1TCw1Njc0NkwsNTY3NDdMLAorNTY3 NDhMLDU2NzQ5TCw1Njc1MEwsNTY3NTFMLDU2NzUyTCw1Njc1M0wsNTY3NTRMLDU2NzU1TCw1Njc1 NkwsNTY3NTdMLAorNTY3NThMLDU2NzU5TCw1Njc2MEwsNTY3NjFMLDU2NzYyTCw1Njc2M0wsNTY3 NjRMLDU2NzY1TCw1Njc2NkwsNTY3NjdMLAorNTY3NjhMLDU2NzY5TCw1Njc3MEwsNTY3NzFMLDU2 NzcyTCw1Njc3M0wsNTY3NzRMLDU2Nzc1TCw1Njc3NkwsNTY3NzdMLAorNTY3NzhMLDU2Nzc5TCw1 Njc4MEwsNTY3ODFMLDU2NzgyTCw1Njc4M0wsNTY3ODRMLDU2Nzg1TCw1Njc4NkwsNTY3ODdMLAor NTY3ODhMLDU2Nzg5TCw1Njc5MEwsNTY3OTFMLDU2NzkyTCw1Njc5M0wsNTY3OTRMLDU2Nzk1TCw1 Njc5NkwsNTY3OTdMLAorNTY3OThMLDU2Nzk5TCw1NjgwMEwsNTY4MDFMLDU2ODAyTCw1NjgwM0ws NTY4MDRMLDU2ODA1TCw1NjgwNkwsNTY4MDdMLAorNTY4MDhMLDU2ODA5TCw1NjgxMEwsNTY4MTFM LDU2ODEyTCw1NjgxM0wsNTY4MTRMLDU2ODE1TCw1NjgxNkwsNTY4MTdMLAorNTY4MThMLDU2ODE5 TCw1NjgyMEwsNTY4MjFMLDU2ODIyTCw1NjgyM0wsNTY4MjRMLDU2ODI1TCw1NjgyNkwsNTY4MjdM LAorNTY4MjhMLDU2ODI5TCw1NjgzMEwsNTY4MzFMLDU2ODMyTCw1NjgzM0wsNTY4MzRMLDU2ODM1 TCw1NjgzNkwsNTY4MzdMLAorNTY4MzhMLDU2ODM5TCw1Njg0MEwsNTY4NDFMLDU2ODQyTCw1Njg0 M0wsNTY4NDRMLDU2ODQ1TCw1Njg0NkwsNTY4NDdMLAorNTY4NDhMLDU2ODQ5TCw1Njg1MEwsNTY4 NTFMLDU2ODUyTCw1Njg1M0wsNTY4NTRMLDU2ODU1TCw1Njg1NkwsNTY4NTdMLAorNTY4NThMLDU2 ODU5TCw1Njg2MEwsNTY4NjFMLDU2ODYyTCw1Njg2M0wsNTY4NjRMLDU2ODY1TCw1Njg2NkwsNTY4 NjdMLAorNTY4NjhMLDU2ODY5TCw1Njg3MEwsNTY4NzFMLDU2ODcyTCw1Njg3M0wsNTY4NzRMLDU2 ODc1TCw1Njg3NkwsNTY4NzdMLAorNTY4NzhMLDU2ODc5TCw1Njg4MEwsNTY4ODFMLDU2ODgyTCw1 Njg4M0wsNTY4ODRMLDU2ODg1TCw1Njg4NkwsNTY4ODdMLAorNTY4ODhMLDU2ODg5TCw1Njg5MEws NTY4OTFMLDU2ODkyTCw1Njg5M0wsNTY4OTRMLDU2ODk1TCw1Njg5NkwsNTY4OTdMLAorNTY4OThM LDU2ODk5TCw1NjkwMEwsNTY5MDFMLDU2OTAyTCw1NjkwM0wsNTY5MDRMLDU2OTA1TCw1NjkwNkws NTY5MDdMLAorNTY5MDhMLDU2OTA5TCw1NjkxMEwsNTY5MTFMLDU2OTEyTCw1NjkxM0wsNTY5MTRM LDU2OTE1TCw1NjkxNkwsNTY5MTdMLAorNTY5MThMLDU2OTE5TCw1NjkyMEwsNTY5MjFMLDU2OTIy TCw1NjkyM0wsNTY5MjRMLDU2OTI1TCw1NjkyNkwsNTY5MjdMLAorNTY5MjhMLDU2OTI5TCw1Njkz MEwsNTY5MzFMLDU2OTMyTCw1NjkzM0wsNTY5MzRMLDU2OTM1TCw1NjkzNkwsNTY5MzdMLAorNTY5 MzhMLDU2OTM5TCw1Njk0MEwsNTY5NDFMLDU2OTQyTCw1Njk0M0wsNTY5NDRMLDU2OTQ1TCw1Njk0 NkwsNTY5NDdMLAorNTY5NDhMLDU2OTQ5TCw1Njk1MEwsNTY5NTFMLDU2OTUyTCw1Njk1M0wsNTY5 NTRMLDU2OTU1TCw1Njk1NkwsNTY5NTdMLAorNTY5NThMLDU2OTU5TCw1Njk2MEwsNTY5NjFMLDU2 OTYyTCw1Njk2M0wsNTY5NjRMLDU2OTY1TCw1Njk2NkwsNTY5NjdMLAorNTY5NjhMLDU2OTY5TCw1 Njk3MEwsNTY5NzFMLDU2OTcyTCw1Njk3M0wsNTY5NzRMLDU2OTc1TCw1Njk3NkwsNTY5NzdMLAor NTY5NzhMLDU2OTc5TCw1Njk4MEwsNTY5ODFMLDU2OTgyTCw1Njk4M0wsNTY5ODRMLDU2OTg1TCw1 Njk4NkwsNTY5ODdMLAorNTY5ODhMLDU2OTg5TCw1Njk5MEwsNTY5OTFMLDU2OTkyTCw1Njk5M0ws NTY5OTRMLDU2OTk1TCw1Njk5NkwsNTY5OTdMLAorNTY5OThMLDU2OTk5TCw1NzAwMEwsNTcwMDFM LDU3MDAyTCw1NzAwM0wsNTcwMDRMLDU3MDA1TCw1NzAwNkwsNTcwMDdMLAorNTcwMDhMLDU3MDA5 TCw1NzAxMEwsNTcwMTFMLDU3MDEyTCw1NzAxM0wsNTcwMTRMLDU3MDE1TCw1NzAxNkwsNTcwMTdM LAorNTcwMThMLDU3MDE5TCw1NzAyMEwsNTcwMjFMLDU3MDIyTCw1NzAyM0wsNTcwMjRMLDU3MDI1 TCw1NzAyNkwsNTcwMjdMLAorNTcwMjhMLDU3MDI5TCw1NzAzMEwsNTcwMzFMLDU3MDMyTCw1NzAz M0wsNTcwMzRMLDU3MDM1TCw1NzAzNkwsNTcwMzdMLAorNTcwMzhMLDU3MDM5TCw1NzA0MEwsNTcw NDFMLDU3MDQyTCw1NzA0M0wsNTcwNDRMLDU3MDQ1TCw1NzA0NkwsNTcwNDdMLAorNTcwNDhMLDU3 MDQ5TCw1NzA1MEwsNTcwNTFMLDU3MDUyTCw1NzA1M0wsNTcwNTRMLDU3MDU1TCw1NzA1NkwsNTcw NTdMLAorNTcwNThMLDU3MDU5TCw1NzA2MEwsNTcwNjFMLDU3MDYyTCw1NzA2M0wsNTcwNjRMLDU3 MDY1TCw1NzA2NkwsNTcwNjdMLAorNTcwNjhMLDU3MDY5TCw1NzA3MEwsNTcwNzFMLDU3MDcyTCw1 NzA3M0wsNTcwNzRMLDU3MDc1TCw1NzA3NkwsNTcwNzdMLAorNTcwNzhMLDU3MDc5TCw1NzA4MEws NTcwODFMLDU3MDgyTCw1NzA4M0wsNTcwODRMLDU3MDg1TCw1NzA4NkwsNTcwODdMLAorNTcwODhM LDU3MDg5TCw1NzA5MEwsNTcwOTFMLDU3MDkyTCw1NzA5M0wsNTcwOTRMLDU3MDk1TCw1NzA5Nkws NTcwOTdMLAorNTcwOThMLDU3MDk5TCw1NzEwMEwsNTcxMDFMLDU3MTAyTCw1NzEwM0wsNTcxMDRM LDU3MTA1TCw1NzEwNkwsNTcxMDdMLAorNTcxMDhMLDU3MTA5TCw1NzExMEwsNTcxMTFMLDU3MTEy TCw1NzExM0wsNTcxMTRMLDU3MTE1TCw1NzExNkwsNTcxMTdMLAorNTcxMThMLDU3MTE5TCw1NzEy MEwsNTcxMjFMLDU3MTIyTCw1NzEyM0wsNTcxMjRMLDU3MTI1TCw1NzEyNkwsNTcxMjdMLAorNTcx MjhMLDU3MTI5TCw1NzEzMEwsNTcxMzFMLDU3MTMyTCw1NzEzM0wsNTcxMzRMLDU3MTM1TCw1NzEz NkwsNTcxMzdMLAorNTcxMzhMLDU3MTM5TCw1NzE0MEwsNTcxNDFMLDU3MTQyTCw1NzE0M0wsNTcx NDRMLDU3MTQ1TCw1NzE0NkwsNTcxNDdMLAorNTcxNDhMLDU3MTQ5TCw1NzE1MEwsNTcxNTFMLDU3 MTUyTCw1NzE1M0wsNTcxNTRMLDU3MTU1TCw1NzE1NkwsNTcxNTdMLAorNTcxNThMLDU3MTU5TCw1 NzE2MEwsNTcxNjFMLDU3MTYyTCw1NzE2M0wsNTcxNjRMLDU3MTY1TCw1NzE2NkwsNTcxNjdMLAor NTcxNjhMLDU3MTY5TCw1NzE3MEwsNTcxNzFMLDU3MTcyTCw1NzE3M0wsNTcxNzRMLDU3MTc1TCw1 NzE3NkwsNTcxNzdMLAorNTcxNzhMLDU3MTc5TCw1NzE4MEwsNTcxODFMLDU3MTgyTCw1NzE4M0ws NTcxODRMLDU3MTg1TCw1NzE4NkwsNTcxODdMLAorNTcxODhMLDU3MTg5TCw1NzE5MEwsNTcxOTFM LDU3MTkyTCw1NzE5M0wsNTcxOTRMLDU3MTk1TCw1NzE5NkwsNTcxOTdMLAorNTcxOThMLDU3MTk5 TCw1NzIwMEwsNTcyMDFMLDU3MjAyTCw1NzIwM0wsNTcyMDRMLDU3MjA1TCw1NzIwNkwsNTcyMDdM LAorNTcyMDhMLDU3MjA5TCw1NzIxMEwsNTcyMTFMLDU3MjEyTCw1NzIxM0wsNTcyMTRMLDU3MjE1 TCw1NzIxNkwsNTcyMTdMLAorNTcyMThMLDU3MjE5TCw1NzIyMEwsNTcyMjFMLDU3MjIyTCw1NzIy M0wsNTcyMjRMLDU3MjI1TCw1NzIyNkwsNTcyMjdMLAorNTcyMjhMLDU3MjI5TCw1NzIzMEwsNTcy MzFMLDU3MjMyTCw1NzIzM0wsNTcyMzRMLDU3MjM1TCw1NzIzNkwsNTcyMzdMLAorNTcyMzhMLDU3 MjM5TCw1NzI0MEwsNTcyNDFMLDU3MjQyTCw1NzI0M0wsNTcyNDRMLDU3MjQ1TCw1NzI0NkwsNTcy NDdMLAorNTcyNDhMLDU3MjQ5TCw1NzI1MEwsNTcyNTFMLDU3MjUyTCw1NzI1M0wsNTcyNTRMLDU3 MjU1TCw1NzI1NkwsNTcyNTdMLAorNTcyNThMLDU3MjU5TCw1NzI2MEwsNTcyNjFMLDU3MjYyTCw1 NzI2M0wsNTcyNjRMLDU3MjY1TCw1NzI2NkwsNTcyNjdMLAorNTcyNjhMLDU3MjY5TCw1NzI3MEws NTcyNzFMLDU3MjcyTCw1NzI3M0wsNTcyNzRMLDU3Mjc1TCw1NzI3NkwsNTcyNzdMLAorNTcyNzhM LDU3Mjc5TCw1NzI4MEwsNTcyODFMLDU3MjgyTCw1NzI4M0wsNTcyODRMLDU3Mjg1TCw1NzI4Nkws NTcyODdMLAorNTcyODhMLDU3Mjg5TCw1NzI5MEwsNTcyOTFMLDU3MjkyTCw1NzI5M0wsNTcyOTRM LDU3Mjk1TCw1NzI5NkwsNTcyOTdMLAorNTcyOThMLDU3Mjk5TCw1NzMwMEwsNTczMDFMLDU3MzAy TCw1NzMwM0wsNTczMDRMLDU3MzA1TCw1NzMwNkwsNTczMDdMLAorNTczMDhMLDU3MzA5TCw1NzMx MEwsNTczMTFMLDU3MzEyTCw1NzMxM0wsNTczMTRMLDU3MzE1TCw1NzMxNkwsNTczMTdMLAorNTcz MThMLDU3MzE5TCw1NzMyMEwsNTczMjFMLDU3MzIyTCw1NzMyM0wsNTczMjRMLDU3MzI1TCw1NzMy NkwsNTczMjdMLAorNTczMjhMLDU3MzI5TCw1NzMzMEwsNTczMzFMLDU3MzMyTCw1NzMzM0wsNTcz MzRMLDU3MzM1TCw1NzMzNkwsNTczMzdMLAorNTczMzhMLDU3MzM5TCw1NzM0MEwsNTczNDFMLDU3 MzQyTCw1NzM0M0wsNTczNDRMLDU3MzQ1TCw1NzM0NkwsNTczNDdMLAorNTczNDhMLDU3MzQ5TCw1 NzM1MEwsNTczNTFMLDU3MzUyTCw1NzM1M0wsNTczNTRMLDU3MzU1TCw1NzM1NkwsNTczNTdMLAor NTczNThMLDU3MzU5TCw1NzM2MEwsNTczNjFMLDU3MzYyTCw1NzM2M0wsNTczNjRMLDU3MzY1TCw1 NzM2NkwsNTczNjdMLAorNTczNjhMLDU3MzY5TCw1NzM3MEwsNTczNzFMLDU3MzcyTCw1NzM3M0ws NTczNzRMLDU3Mzc1TCw1NzM3NkwsNTczNzdMLAorNTczNzhMLDU3Mzc5TCw1NzM4MEwsNTczODFM LDU3MzgyTCw1NzM4M0wsNTczODRMLDU3Mzg1TCw1NzM4NkwsNTczODdMLAorNTczODhMLDU3Mzg5 TCw1NzM5MEwsNTczOTFMLDU3MzkyTCw1NzM5M0wsNTczOTRMLDU3Mzk1TCw1NzM5NkwsNTczOTdM LAorNTczOThMLDU3Mzk5TCw1NzQwMEwsNTc0MDFMLDU3NDAyTCw1NzQwM0wsNTc0MDRMLDU3NDA1 TCw1NzQwNkwsNTc0MDdMLAorNTc0MDhMLDU3NDA5TCw1NzQxMEwsNTc0MTFMLDU3NDEyTCw1NzQx M0wsNTc0MTRMLDU3NDE1TCw1NzQxNkwsNTc0MTdMLAorNTc0MThMLDU3NDE5TCw1NzQyMEwsNTc0 MjFMLDU3NDIyTCw1NzQyM0wsNTc0MjRMLDU3NDI1TCw1NzQyNkwsNTc0MjdMLAorNTc0MjhMLDU3 NDI5TCw1NzQzMEwsNTc0MzFMLDU3NDMyTCw1NzQzM0wsNTc0MzRMLDU3NDM1TCw1NzQzNkwsNTc0 MzdMLAorNTc0MzhMLDU3NDM5TCw1NzQ0MEwsNTc0NDFMLDU3NDQyTCw1NzQ0M0wsNTc0NDRMLDU3 NDQ1TCw1NzQ0NkwsNTc0NDdMLAorNTc0NDhMLDU3NDQ5TCw1NzQ1MEwsNTc0NTFMLDU3NDUyTCw1 NzQ1M0wsNTc0NTRMLDU3NDU1TCw1NzQ1NkwsNTc0NTdMLAorNTc0NThMLDU3NDU5TCw1NzQ2MEws NTc0NjFMLDU3NDYyTCw1NzQ2M0wsNTc0NjRMLDU3NDY1TCw1NzQ2NkwsNTc0NjdMLAorNTc0NjhM LDU3NDY5TCw1NzQ3MEwsNTc0NzFMLDU3NDcyTCw1NzQ3M0wsNTc0NzRMLDU3NDc1TCw1NzQ3Nkws NTc0NzdMLAorNTc0NzhMLDU3NDc5TCw1NzQ4MEwsNTc0ODFMLDU3NDgyTCw1NzQ4M0wsNTc0ODRM LDU3NDg1TCw1NzQ4NkwsNTc0ODdMLAorNTc0ODhMLDU3NDg5TCw1NzQ5MEwsNTc0OTFMLDU3NDky TCw1NzQ5M0wsNTc0OTRMLDU3NDk1TCw1NzQ5NkwsNTc0OTdMLAorNTc0OThMLDU3NDk5TCw1NzUw MEwsNTc1MDFMLDU3NTAyTCw1NzUwM0wsNTc1MDRMLDU3NTA1TCw1NzUwNkwsNTc1MDdMLAorNTc1 MDhMLDU3NTA5TCw1NzUxMEwsNTc1MTFMLDU3NTEyTCw1NzUxM0wsNTc1MTRMLDU3NTE1TCw1NzUx NkwsNTc1MTdMLAorNTc1MThMLDU3NTE5TCw1NzUyMEwsNTc1MjFMLDU3NTIyTCw1NzUyM0wsNTc1 MjRMLDU3NTI1TCw1NzUyNkwsNTc1MjdMLAorNTc1MjhMLDU3NTI5TCw1NzUzMEwsNTc1MzFMLDU3 NTMyTCw1NzUzM0wsNTc1MzRMLDU3NTM1TCw1NzUzNkwsNTc1MzdMLAorNTc1MzhMLDU3NTM5TCw1 NzU0MEwsNTc1NDFMLDU3NTQyTCw1NzU0M0wsNTc1NDRMLDU3NTQ1TCw1NzU0NkwsNTc1NDdMLAor NTc1NDhMLDU3NTQ5TCw1NzU1MEwsNTc1NTFMLDU3NTUyTCw1NzU1M0wsNTc1NTRMLDU3NTU1TCw1 NzU1NkwsNTc1NTdMLAorNTc1NThMLDU3NTU5TCw1NzU2MEwsNTc1NjFMLDU3NTYyTCw1NzU2M0ws NTc1NjRMLDU3NTY1TCw1NzU2NkwsNTc1NjdMLAorNTc1NjhMLDU3NTY5TCw1NzU3MEwsNTc1NzFM LDU3NTcyTCw1NzU3M0wsNTc1NzRMLDU3NTc1TCw1NzU3NkwsNTc1NzdMLAorNTc1NzhMLDU3NTc5 TCw1NzU4MEwsNTc1ODFMLDU3NTgyTCw1NzU4M0wsNTc1ODRMLDU3NTg1TCw1NzU4NkwsNTc1ODdM LAorNTc1ODhMLDU3NTg5TCw1NzU5MEwsNTc1OTFMLDU3NTkyTCw1NzU5M0wsNTc1OTRMLDU3NTk1 TCw1NzU5NkwsNTc1OTdMLAorNTc1OThMLDU3NTk5TCw1NzYwMEwsNTc2MDFMLDU3NjAyTCw1NzYw M0wsNTc2MDRMLDU3NjA1TCw1NzYwNkwsNTc2MDdMLAorNTc2MDhMLDU3NjA5TCw1NzYxMEwsNTc2 MTFMLDU3NjEyTCw1NzYxM0wsNTc2MTRMLDU3NjE1TCw1NzYxNkwsNTc2MTdMLAorNTc2MThMLDU3 NjE5TCw1NzYyMEwsNTc2MjFMLDU3NjIyTCw1NzYyM0wsNTc2MjRMLDU3NjI1TCw1NzYyNkwsNTc2 MjdMLAorNTc2MjhMLDU3NjI5TCw1NzYzMEwsNTc2MzFMLDU3NjMyTCw1NzYzM0wsNTc2MzRMLDU3 NjM1TCw1NzYzNkwsNTc2MzdMLAorNTc2MzhMLDU3NjM5TCw1NzY0MEwsNTc2NDFMLDU3NjQyTCw1 NzY0M0wsNTc2NDRMLDU3NjQ1TCw1NzY0NkwsNTc2NDdMLAorNTc2NDhMLDU3NjQ5TCw1NzY1MEws NTc2NTFMLDU3NjUyTCw1NzY1M0wsNTc2NTRMLDU3NjU1TCw1NzY1NkwsNTc2NTdMLAorNTc2NThM LDU3NjU5TCw1NzY2MEwsNTc2NjFMLDU3NjYyTCw1NzY2M0wsNTc2NjRMLDU3NjY1TCw1NzY2Nkws NTc2NjdMLAorNTc2NjhMLDU3NjY5TCw1NzY3MEwsNTc2NzFMLDU3NjcyTCw1NzY3M0wsNTc2NzRM LDU3Njc1TCw1NzY3NkwsNTc2NzdMLAorNTc2NzhMLDU3Njc5TCw1NzY4MEwsNTc2ODFMLDU3Njgy TCw1NzY4M0wsNTc2ODRMLDU3Njg1TCw1NzY4NkwsNTc2ODdMLAorNTc2ODhMLDU3Njg5TCw1NzY5 MEwsNTc2OTFMLDU3NjkyTCw1NzY5M0wsNTc2OTRMLDU3Njk1TCw1NzY5NkwsNTc2OTdMLAorNTc2 OThMLDU3Njk5TCw1NzcwMEwsNTc3MDFMLDU3NzAyTCw1NzcwM0wsNTc3MDRMLDU3NzA1TCw1Nzcw NkwsNTc3MDdMLAorNTc3MDhMLDU3NzA5TCw1NzcxMEwsNTc3MTFMLDU3NzEyTCw1NzcxM0wsNTc3 MTRMLDU3NzE1TCw1NzcxNkwsNTc3MTdMLAorNTc3MThMLDU3NzE5TCw1NzcyMEwsNTc3MjFMLDU3 NzIyTCw1NzcyM0wsNTc3MjRMLDU3NzI1TCw1NzcyNkwsNTc3MjdMLAorNTc3MjhMLDU3NzI5TCw1 NzczMEwsNTc3MzFMLDU3NzMyTCw1NzczM0wsNTc3MzRMLDU3NzM1TCw1NzczNkwsNTc3MzdMLAor NTc3MzhMLDU3NzM5TCw1Nzc0MEwsNTc3NDFMLDU3NzQyTCw1Nzc0M0wsNTc3NDRMLDU3NzQ1TCw1 Nzc0NkwsNTc3NDdMLAorNTc3NDhMLDU3NzQ5TCw1Nzc1MEwsNTc3NTFMLDU3NzUyTCw1Nzc1M0ws NTc3NTRMLDU3NzU1TCw1Nzc1NkwsNTc3NTdMLAorNTc3NThMLDU3NzU5TCw1Nzc2MEwsNTc3NjFM LDU3NzYyTCw1Nzc2M0wsNTc3NjRMLDU3NzY1TCw1Nzc2NkwsNTc3NjdMLAorNTc3NjhMLDU3NzY5 TCw1Nzc3MEwsNTc3NzFMLDU3NzcyTCw1Nzc3M0wsNTc3NzRMLDU3Nzc1TCw1Nzc3NkwsNTc3NzdM LAorNTc3NzhMLDU3Nzc5TCw1Nzc4MEwsNTc3ODFMLDU3NzgyTCw1Nzc4M0wsNTc3ODRMLDU3Nzg1 TCw1Nzc4NkwsNTc3ODdMLAorNTc3ODhMLDU3Nzg5TCw1Nzc5MEwsNTc3OTFMLDU3NzkyTCw1Nzc5 M0wsNTc3OTRMLDU3Nzk1TCw1Nzc5NkwsNTc3OTdMLAorNTc3OThMLDU3Nzk5TCw1NzgwMEwsNTc4 MDFMLDU3ODAyTCw1NzgwM0wsNTc4MDRMLDU3ODA1TCw1NzgwNkwsNTc4MDdMLAorNTc4MDhMLDU3 ODA5TCw1NzgxMEwsNTc4MTFMLDU3ODEyTCw1NzgxM0wsNTc4MTRMLDU3ODE1TCw1NzgxNkwsNTc4 MTdMLAorNTc4MThMLDU3ODE5TCw1NzgyMEwsNTc4MjFMLDU3ODIyTCw1NzgyM0wsNTc4MjRMLDU3 ODI1TCw1NzgyNkwsNTc4MjdMLAorNTc4MjhMLDU3ODI5TCw1NzgzMEwsNTc4MzFMLDU3ODMyTCw1 NzgzM0wsNTc4MzRMLDU3ODM1TCw1NzgzNkwsNTc4MzdMLAorNTc4MzhMLDU3ODM5TCw1Nzg0MEws NTc4NDFMLDU3ODQyTCw1Nzg0M0wsNTc4NDRMLDU3ODQ1TCw1Nzg0NkwsNTc4NDdMLAorNTc4NDhM LDU3ODQ5TCw1Nzg1MEwsNTc4NTFMLDU3ODUyTCw1Nzg1M0wsNTc4NTRMLDU3ODU1TCw1Nzg1Nkws NTc4NTdMLAorNTc4NThMLDU3ODU5TCw1Nzg2MEwsNTc4NjFMLDU3ODYyTCw1Nzg2M0wsNTc4NjRM LDU3ODY1TCw1Nzg2NkwsNTc4NjdMLAorNTc4NjhMLDU3ODY5TCw1Nzg3MEwsNTc4NzFMLDU3ODcy TCw1Nzg3M0wsNTc4NzRMLDU3ODc1TCw1Nzg3NkwsNTc4NzdMLAorNTc4NzhMLDU3ODc5TCw1Nzg4 MEwsNTc4ODFMLDU3ODgyTCw1Nzg4M0wsNTc4ODRMLDU3ODg1TCw1Nzg4NkwsNTc4ODdMLAorNTc4 ODhMLDU3ODg5TCw1Nzg5MEwsNTc4OTFMLDU3ODkyTCw1Nzg5M0wsNTc4OTRMLDU3ODk1TCw1Nzg5 NkwsNTc4OTdMLAorNTc4OThMLDU3ODk5TCw1NzkwMEwsNTc5MDFMLDU3OTAyTCw1NzkwM0wsNTc5 MDRMLDU3OTA1TCw1NzkwNkwsNTc5MDdMLAorNTc5MDhMLDU3OTA5TCw1NzkxMEwsNTc5MTFMLDU3 OTEyTCw1NzkxM0wsNTc5MTRMLDU3OTE1TCw1NzkxNkwsNTc5MTdMLAorNTc5MThMLDU3OTE5TCw1 NzkyMEwsNTc5MjFMLDU3OTIyTCw1NzkyM0wsNTc5MjRMLDU3OTI1TCw1NzkyNkwsNTc5MjdMLAor NTc5MjhMLDU3OTI5TCw1NzkzMEwsNTc5MzFMLDU3OTMyTCw1NzkzM0wsNTc5MzRMLDU3OTM1TCw1 NzkzNkwsNTc5MzdMLAorNTc5MzhMLDU3OTM5TCw1Nzk0MEwsNTc5NDFMLDU3OTQyTCw1Nzk0M0ws NTc5NDRMLDU3OTQ1TCw1Nzk0NkwsNTc5NDdMLAorNTc5NDhMLDU3OTQ5TCw1Nzk1MEwsNTc5NTFM LDU3OTUyTCw1Nzk1M0wsNTc5NTRMLDU3OTU1TCw1Nzk1NkwsNTc5NTdMLAorNTc5NThMLDU3OTU5 TCw1Nzk2MEwsNTc5NjFMLDU3OTYyTCw1Nzk2M0wsNTc5NjRMLDU3OTY1TCw1Nzk2NkwsNTc5NjdM LAorNTc5NjhMLDU3OTY5TCw1Nzk3MEwsNTc5NzFMLDU3OTcyTCw1Nzk3M0wsNTc5NzRMLDU3OTc1 TCw1Nzk3NkwsNTc5NzdMLAorNTc5NzhMLDU3OTc5TCw1Nzk4MEwsNTc5ODFMLDU3OTgyTCw1Nzk4 M0wsNTc5ODRMLDU3OTg1TCw1Nzk4NkwsNTc5ODdMLAorNTc5ODhMLDU3OTg5TCw1Nzk5MEwsNTc5 OTFMLDU3OTkyTCw1Nzk5M0wsNTc5OTRMLDU3OTk1TCw1Nzk5NkwsNTc5OTdMLAorNTc5OThMLDU3 OTk5TCw1ODAwMEwsNTgwMDFMLDU4MDAyTCw1ODAwM0wsNTgwMDRMLDU4MDA1TCw1ODAwNkwsNTgw MDdMLAorNTgwMDhMLDU4MDA5TCw1ODAxMEwsNTgwMTFMLDU4MDEyTCw1ODAxM0wsNTgwMTRMLDU4 MDE1TCw1ODAxNkwsNTgwMTdMLAorNTgwMThMLDU4MDE5TCw1ODAyMEwsNTgwMjFMLDU4MDIyTCw1 ODAyM0wsNTgwMjRMLDU4MDI1TCw1ODAyNkwsNTgwMjdMLAorNTgwMjhMLDU4MDI5TCw1ODAzMEws NTgwMzFMLDU4MDMyTCw1ODAzM0wsNTgwMzRMLDU4MDM1TCw1ODAzNkwsNTgwMzdMLAorNTgwMzhM LDU4MDM5TCw1ODA0MEwsNTgwNDFMLDU4MDQyTCw1ODA0M0wsNTgwNDRMLDU4MDQ1TCw1ODA0Nkws NTgwNDdMLAorNTgwNDhMLDU4MDQ5TCw1ODA1MEwsNTgwNTFMLDU4MDUyTCw1ODA1M0wsNTgwNTRM LDU4MDU1TCw1ODA1NkwsNTgwNTdMLAorNTgwNThMLDU4MDU5TCw1ODA2MEwsNTgwNjFMLDU4MDYy TCw1ODA2M0wsNTgwNjRMLDU4MDY1TCw1ODA2NkwsNTgwNjdMLAorNTgwNjhMLDU4MDY5TCw1ODA3 MEwsNTgwNzFMLDU4MDcyTCw1ODA3M0wsNTgwNzRMLDU4MDc1TCw1ODA3NkwsNTgwNzdMLAorNTgw NzhMLDU4MDc5TCw1ODA4MEwsNTgwODFMLDU4MDgyTCw1ODA4M0wsNTgwODRMLDU4MDg1TCw1ODA4 NkwsNTgwODdMLAorNTgwODhMLDU4MDg5TCw1ODA5MEwsNTgwOTFMLDU4MDkyTCw1ODA5M0wsNTgw OTRMLDU4MDk1TCw1ODA5NkwsNTgwOTdMLAorNTgwOThMLDU4MDk5TCw1ODEwMEwsNTgxMDFMLDU4 MTAyTCw1ODEwM0wsNTgxMDRMLDU4MTA1TCw1ODEwNkwsNTgxMDdMLAorNTgxMDhMLDU4MTA5TCw1 ODExMEwsNTgxMTFMLDU4MTEyTCw1ODExM0wsNTgxMTRMLDU4MTE1TCw1ODExNkwsNTgxMTdMLAor NTgxMThMLDU4MTE5TCw1ODEyMEwsNTgxMjFMLDU4MTIyTCw1ODEyM0wsNTgxMjRMLDU4MTI1TCw1 ODEyNkwsNTgxMjdMLAorNTgxMjhMLDU4MTI5TCw1ODEzMEwsNTgxMzFMLDU4MTMyTCw1ODEzM0ws NTgxMzRMLDU4MTM1TCw1ODEzNkwsNTgxMzdMLAorNTgxMzhMLDU4MTM5TCw1ODE0MEwsNTgxNDFM LDU4MTQyTCw1ODE0M0wsNTgxNDRMLDU4MTQ1TCw1ODE0NkwsNTgxNDdMLAorNTgxNDhMLDU4MTQ5 TCw1ODE1MEwsNTgxNTFMLDU4MTUyTCw1ODE1M0wsNTgxNTRMLDU4MTU1TCw1ODE1NkwsNTgxNTdM LAorNTgxNThMLDU4MTU5TCw1ODE2MEwsNTgxNjFMLDU4MTYyTCw1ODE2M0wsNTgxNjRMLDU4MTY1 TCw1ODE2NkwsNTgxNjdMLAorNTgxNjhMLDU4MTY5TCw1ODE3MEwsNTgxNzFMLDU4MTcyTCw1ODE3 M0wsNTgxNzRMLDU4MTc1TCw1ODE3NkwsNTgxNzdMLAorNTgxNzhMLDU4MTc5TCw1ODE4MEwsNTgx ODFMLDU4MTgyTCw1ODE4M0wsNTgxODRMLDU4MTg1TCw1ODE4NkwsNTgxODdMLAorNTgxODhMLDU4 MTg5TCw1ODE5MEwsNTgxOTFMLDU4MTkyTCw1ODE5M0wsNTgxOTRMLDU4MTk1TCw1ODE5NkwsNTgx OTdMLAorNTgxOThMLDU4MTk5TCw1ODIwMEwsNTgyMDFMLDU4MjAyTCw1ODIwM0wsNTgyMDRMLDU4 MjA1TCw1ODIwNkwsNTgyMDdMLAorNTgyMDhMLDU4MjA5TCw1ODIxMEwsNTgyMTFMLDU4MjEyTCw1 ODIxM0wsNTgyMTRMLDU4MjE1TCw1ODIxNkwsNTgyMTdMLAorNTgyMThMLDU4MjE5TCw1ODIyMEws NTgyMjFMLDU4MjIyTCw1ODIyM0wsNTgyMjRMLDU4MjI1TCw1ODIyNkwsNTgyMjdMLAorNTgyMjhM LDU4MjI5TCw1ODIzMEwsNTgyMzFMLDU4MjMyTCw1ODIzM0wsNTgyMzRMLDU4MjM1TCw1ODIzNkws NTgyMzdMLAorNTgyMzhMLDU4MjM5TCw1ODI0MEwsNTgyNDFMLDU4MjQyTCw1ODI0M0wsNTgyNDRM LDU4MjQ1TCw1ODI0NkwsNTgyNDdMLAorNTgyNDhMLDU4MjQ5TCw1ODI1MEwsNTgyNTFMLDU4MjUy TCw1ODI1M0wsNTgyNTRMLDU4MjU1TCw1ODI1NkwsNTgyNTdMLAorNTgyNThMLDU4MjU5TCw1ODI2 MEwsNTgyNjFMLDU4MjYyTCw1ODI2M0wsNTgyNjRMLDU4MjY1TCw1ODI2NkwsNTgyNjdMLAorNTgy NjhMLDU4MjY5TCw1ODI3MEwsNTgyNzFMLDU4MjcyTCw1ODI3M0wsNTgyNzRMLDU4Mjc1TCw1ODI3 NkwsNTgyNzdMLAorNTgyNzhMLDU4Mjc5TCw1ODI4MEwsNTgyODFMLDU4MjgyTCw1ODI4M0wsNTgy ODRMLDU4Mjg1TCw1ODI4NkwsNTgyODdMLAorNTgyODhMLDU4Mjg5TCw1ODI5MEwsNTgyOTFMLDU4 MjkyTCw1ODI5M0wsNTgyOTRMLDU4Mjk1TCw1ODI5NkwsNTgyOTdMLAorNTgyOThMLDU4Mjk5TCw1 ODMwMEwsNTgzMDFMLDU4MzAyTCw1ODMwM0wsNTgzMDRMLDU4MzA1TCw1ODMwNkwsNTgzMDdMLAor NTgzMDhMLDU4MzA5TCw1ODMxMEwsNTgzMTFMLDU4MzEyTCw1ODMxM0wsNTgzMTRMLDU4MzE1TCw1 ODMxNkwsNTgzMTdMLAorNTgzMThMLDU4MzE5TCw1ODMyMEwsNTgzMjFMLDU4MzIyTCw1ODMyM0ws NTgzMjRMLDU4MzI1TCw1ODMyNkwsNTgzMjdMLAorNTgzMjhMLDU4MzI5TCw1ODMzMEwsNTgzMzFM LDU4MzMyTCw1ODMzM0wsNTgzMzRMLDU4MzM1TCw1ODMzNkwsNTgzMzdMLAorNTgzMzhMLDU4MzM5 TCw1ODM0MEwsNTgzNDFMLDU4MzQyTCw1ODM0M0wsNTgzNDRMLDU4MzQ1TCw1ODM0NkwsNTgzNDdM LAorNTgzNDhMLDU4MzQ5TCw1ODM1MEwsNTgzNTFMLDU4MzUyTCw1ODM1M0wsNTgzNTRMLDU4MzU1 TCw1ODM1NkwsNTgzNTdMLAorNTgzNThMLDU4MzU5TCw1ODM2MEwsNTgzNjFMLDU4MzYyTCw1ODM2 M0wsNTgzNjRMLDU4MzY1TCw1ODM2NkwsNTgzNjdMLAorNTgzNjhMLDU4MzY5TCw1ODM3MEwsNTgz NzFMLDU4MzcyTCw1ODM3M0wsNTgzNzRMLDU4Mzc1TCw1ODM3NkwsNTgzNzdMLAorNTgzNzhMLDU4 Mzc5TCw1ODM4MEwsNTgzODFMLDU4MzgyTCw1ODM4M0wsNTgzODRMLDU4Mzg1TCw1ODM4NkwsNTgz ODdMLAorNTgzODhMLDU4Mzg5TCw1ODM5MEwsNTgzOTFMLDU4MzkyTCw1ODM5M0wsNTgzOTRMLDU4 Mzk1TCw1ODM5NkwsNTgzOTdMLAorNTgzOThMLDU4Mzk5TCw1ODQwMEwsNTg0MDFMLDU4NDAyTCw1 ODQwM0wsNTg0MDRMLDU4NDA1TCw1ODQwNkwsNTg0MDdMLAorNTg0MDhMLDU4NDA5TCw1ODQxMEws NTg0MTFMLDU4NDEyTCw1ODQxM0wsNTg0MTRMLDU4NDE1TCw1ODQxNkwsNTg0MTdMLAorNTg0MThM LDU4NDE5TCw1ODQyMEwsNTg0MjFMLDU4NDIyTCw1ODQyM0wsNTg0MjRMLDU4NDI1TCw1ODQyNkws NTg0MjdMLAorNTg0MjhMLDU4NDI5TCw1ODQzMEwsNTg0MzFMLDU4NDMyTCw1ODQzM0wsNTg0MzRM LDU4NDM1TCw1ODQzNkwsNTg0MzdMLAorNTg0MzhMLDU4NDM5TCw1ODQ0MEwsNTg0NDFMLDU4NDQy TCw1ODQ0M0wsNTg0NDRMLDU4NDQ1TCw1ODQ0NkwsNTg0NDdMLAorNTg0NDhMLDU4NDQ5TCw1ODQ1 MEwsNTg0NTFMLDU4NDUyTCw1ODQ1M0wsNTg0NTRMLDU4NDU1TCw1ODQ1NkwsNTg0NTdMLAorNTg0 NThMLDU4NDU5TCw1ODQ2MEwsNTg0NjFMLDU4NDYyTCw1ODQ2M0wsNTg0NjRMLDU4NDY1TCw1ODQ2 NkwsNTg0NjdMLAorNTg0NjhMLDU4NDY5TCw1ODQ3MEwsNTg0NzFMLDU4NDcyTCw1ODQ3M0wsNTg0 NzRMLDU4NDc1TCw1ODQ3NkwsNTg0NzdMLAorNTg0NzhMLDU4NDc5TCw1ODQ4MEwsNTg0ODFMLDU4 NDgyTCw1ODQ4M0wsNTg0ODRMLDU4NDg1TCw1ODQ4NkwsNTg0ODdMLAorNTg0ODhMLDU4NDg5TCw1 ODQ5MEwsNTg0OTFMLDU4NDkyTCw1ODQ5M0wsNTg0OTRMLDU4NDk1TCw1ODQ5NkwsNTg0OTdMLAor NTg0OThMLDU4NDk5TCw1ODUwMEwsNTg1MDFMLDU4NTAyTCw1ODUwM0wsNTg1MDRMLDU4NTA1TCw1 ODUwNkwsNTg1MDdMLAorNTg1MDhMLDU4NTA5TCw1ODUxMEwsNTg1MTFMLDU4NTEyTCw1ODUxM0ws NTg1MTRMLDU4NTE1TCw1ODUxNkwsNTg1MTdMLAorNTg1MThMLDU4NTE5TCw1ODUyMEwsNTg1MjFM LDU4NTIyTCw1ODUyM0wsNTg1MjRMLDU4NTI1TCw1ODUyNkwsNTg1MjdMLAorNTg1MjhMLDU4NTI5 TCw1ODUzMEwsNTg1MzFMLDU4NTMyTCw1ODUzM0wsNTg1MzRMLDU4NTM1TCw1ODUzNkwsNTg1MzdM LAorNTg1MzhMLDU4NTM5TCw1ODU0MEwsNTg1NDFMLDU4NTQyTCw1ODU0M0wsNTg1NDRMLDU4NTQ1 TCw1ODU0NkwsNTg1NDdMLAorNTg1NDhMLDU4NTQ5TCw1ODU1MEwsNTg1NTFMLDU4NTUyTCw1ODU1 M0wsNTg1NTRMLDU4NTU1TCw1ODU1NkwsNTg1NTdMLAorNTg1NThMLDU4NTU5TCw1ODU2MEwsNTg1 NjFMLDU4NTYyTCw1ODU2M0wsNTg1NjRMLDU4NTY1TCw1ODU2NkwsNTg1NjdMLAorNTg1NjhMLDU4 NTY5TCw1ODU3MEwsNTg1NzFMLDU4NTcyTCw1ODU3M0wsNTg1NzRMLDU4NTc1TCw1ODU3NkwsNTg1 NzdMLAorNTg1NzhMLDU4NTc5TCw1ODU4MEwsNTg1ODFMLDU4NTgyTCw1ODU4M0wsNTg1ODRMLDU4 NTg1TCw1ODU4NkwsNTg1ODdMLAorNTg1ODhMLDU4NTg5TCw1ODU5MEwsNTg1OTFMLDU4NTkyTCw1 ODU5M0wsNTg1OTRMLDU4NTk1TCw1ODU5NkwsNTg1OTdMLAorNTg1OThMLDU4NTk5TCw1ODYwMEws NTg2MDFMLDU4NjAyTCw1ODYwM0wsNTg2MDRMLDU4NjA1TCw1ODYwNkwsNTg2MDdMLAorNTg2MDhM LDU4NjA5TCw1ODYxMEwsNTg2MTFMLDU4NjEyTCw1ODYxM0wsNTg2MTRMLDU4NjE1TCw1ODYxNkws NTg2MTdMLAorNTg2MThMLDU4NjE5TCw1ODYyMEwsNTg2MjFMLDU4NjIyTCw1ODYyM0wsNTg2MjRM LDU4NjI1TCw1ODYyNkwsNTg2MjdMLAorNTg2MjhMLDU4NjI5TCw1ODYzMEwsNTg2MzFMLDU4NjMy TCw1ODYzM0wsNTg2MzRMLDU4NjM1TCw1ODYzNkwsNTg2MzdMLAorNTg2MzhMLDU4NjM5TCw1ODY0 MEwsNTg2NDFMLDU4NjQyTCw1ODY0M0wsNTg2NDRMLDU4NjQ1TCw1ODY0NkwsNTg2NDdMLAorNTg2 NDhMLDU4NjQ5TCw1ODY1MEwsNTg2NTFMLDU4NjUyTCw1ODY1M0wsNTg2NTRMLDU4NjU1TCw1ODY1 NkwsNTg2NTdMLAorNTg2NThMLDU4NjU5TCw1ODY2MEwsNTg2NjFMLDU4NjYyTCw1ODY2M0wsNTg2 NjRMLDU4NjY1TCw1ODY2NkwsNTg2NjdMLAorNTg2NjhMLDU4NjY5TCw1ODY3MEwsNTg2NzFMLDU4 NjcyTCw1ODY3M0wsNTg2NzRMLDU4Njc1TCw1ODY3NkwsNTg2NzdMLAorNTg2NzhMLDU4Njc5TCw1 ODY4MEwsNTg2ODFMLDU4NjgyTCw1ODY4M0wsNTg2ODRMLDU4Njg1TCw1ODY4NkwsNTg2ODdMLAor NTg2ODhMLDU4Njg5TCw1ODY5MEwsNTg2OTFMLDU4NjkyTCw1ODY5M0wsNTg2OTRMLDU4Njk1TCw1 ODY5NkwsNTg2OTdMLAorNTg2OThMLDU4Njk5TCw1ODcwMEwsNTg3MDFMLDU4NzAyTCw1ODcwM0ws NTg3MDRMLDU4NzA1TCw1ODcwNkwsNTg3MDdMLAorNTg3MDhMLDU4NzA5TCw1ODcxMEwsNTg3MTFM LDU4NzEyTCw1ODcxM0wsNTg3MTRMLDU4NzE1TCw1ODcxNkwsNTg3MTdMLAorNTg3MThMLDU4NzE5 TCw1ODcyMEwsNTg3MjFMLDU4NzIyTCw1ODcyM0wsNTg3MjRMLDU4NzI1TCw1ODcyNkwsNTg3MjdM LAorNTg3MjhMLDU4NzI5TCw1ODczMEwsNTg3MzFMLDU4NzMyTCw1ODczM0wsNTg3MzRMLDU4NzM1 TCw1ODczNkwsNTg3MzdMLAorNTg3MzhMLDU4NzM5TCw1ODc0MEwsNTg3NDFMLDU4NzQyTCw1ODc0 M0wsNTg3NDRMLDU4NzQ1TCw1ODc0NkwsNTg3NDdMLAorNTg3NDhMLDU4NzQ5TCw1ODc1MEwsNTg3 NTFMLDU4NzUyTCw1ODc1M0wsNTg3NTRMLDU4NzU1TCw1ODc1NkwsNTg3NTdMLAorNTg3NThMLDU4 NzU5TCw1ODc2MEwsNTg3NjFMLDU4NzYyTCw1ODc2M0wsNTg3NjRMLDU4NzY1TCw1ODc2NkwsNTg3 NjdMLAorNTg3NjhMLDU4NzY5TCw1ODc3MEwsNTg3NzFMLDU4NzcyTCw1ODc3M0wsNTg3NzRMLDU4 Nzc1TCw1ODc3NkwsNTg3NzdMLAorNTg3NzhMLDU4Nzc5TCw1ODc4MEwsNTg3ODFMLDU4NzgyTCw1 ODc4M0wsNTg3ODRMLDU4Nzg1TCw1ODc4NkwsNTg3ODdMLAorNTg3ODhMLDU4Nzg5TCw1ODc5MEws NTg3OTFMLDU4NzkyTCw1ODc5M0wsNTg3OTRMLDU4Nzk1TCw1ODc5NkwsNTg3OTdMLAorNTg3OThM LDU4Nzk5TCw1ODgwMEwsNTg4MDFMLDU4ODAyTCw1ODgwM0wsNTg4MDRMLDU4ODA1TCw1ODgwNkws NTg4MDdMLAorNTg4MDhMLDU4ODA5TCw1ODgxMEwsNTg4MTFMLDU4ODEyTCw1ODgxM0wsNTg4MTRM LDU4ODE1TCw1ODgxNkwsNTg4MTdMLAorNTg4MThMLDU4ODE5TCw1ODgyMEwsNTg4MjFMLDU4ODIy TCw1ODgyM0wsNTg4MjRMLDU4ODI1TCw1ODgyNkwsNTg4MjdMLAorNTg4MjhMLDU4ODI5TCw1ODgz MEwsNTg4MzFMLDU4ODMyTCw1ODgzM0wsNTg4MzRMLDU4ODM1TCw1ODgzNkwsNTg4MzdMLAorNTg4 MzhMLDU4ODM5TCw1ODg0MEwsNTg4NDFMLDU4ODQyTCw1ODg0M0wsNTg4NDRMLDU4ODQ1TCw1ODg0 NkwsNTg4NDdMLAorNTg4NDhMLDU4ODQ5TCw1ODg1MEwsNTg4NTFMLDU4ODUyTCw1ODg1M0wsNTg4 NTRMLDU4ODU1TCw1ODg1NkwsNTg4NTdMLAorNTg4NThMLDU4ODU5TCw1ODg2MEwsNTg4NjFMLDU4 ODYyTCw1ODg2M0wsNTg4NjRMLDU4ODY1TCw1ODg2NkwsNTg4NjdMLAorNTg4NjhMLDU4ODY5TCw1 ODg3MEwsNTg4NzFMLDU4ODcyTCw1ODg3M0wsNTg4NzRMLDU4ODc1TCw1ODg3NkwsNTg4NzdMLAor NTg4NzhMLDU4ODc5TCw1ODg4MEwsNTg4ODFMLDU4ODgyTCw1ODg4M0wsNTg4ODRMLDU4ODg1TCw1 ODg4NkwsNTg4ODdMLAorNTg4ODhMLDU4ODg5TCw1ODg5MEwsNTg4OTFMLDU4ODkyTCw1ODg5M0ws NTg4OTRMLDU4ODk1TCw1ODg5NkwsNTg4OTdMLAorNTg4OThMLDU4ODk5TCw1ODkwMEwsNTg5MDFM LDU4OTAyTCw1ODkwM0wsNTg5MDRMLDU4OTA1TCw1ODkwNkwsNTg5MDdMLAorNTg5MDhMLDU4OTA5 TCw1ODkxMEwsNTg5MTFMLDU4OTEyTCw1ODkxM0wsNTg5MTRMLDU4OTE1TCw1ODkxNkwsNTg5MTdM LAorNTg5MThMLDU4OTE5TCw1ODkyMEwsNTg5MjFMLDU4OTIyTCw1ODkyM0wsNTg5MjRMLDU4OTI1 TCw1ODkyNkwsNTg5MjdMLAorNTg5MjhMLDU4OTI5TCw1ODkzMEwsNTg5MzFMLDU4OTMyTCw1ODkz M0wsNTg5MzRMLDU4OTM1TCw1ODkzNkwsNTg5MzdMLAorNTg5MzhMLDU4OTM5TCw1ODk0MEwsNTg5 NDFMLDU4OTQyTCw1ODk0M0wsNTg5NDRMLDU4OTQ1TCw1ODk0NkwsNTg5NDdMLAorNTg5NDhMLDU4 OTQ5TCw1ODk1MEwsNTg5NTFMLDU4OTUyTCw1ODk1M0wsNTg5NTRMLDU4OTU1TCw1ODk1NkwsNTg5 NTdMLAorNTg5NThMLDU4OTU5TCw1ODk2MEwsNTg5NjFMLDU4OTYyTCw1ODk2M0wsNTg5NjRMLDU4 OTY1TCw1ODk2NkwsNTg5NjdMLAorNTg5NjhMLDU4OTY5TCw1ODk3MEwsNTg5NzFMLDU4OTcyTCw1 ODk3M0wsNTg5NzRMLDU4OTc1TCw1ODk3NkwsNTg5NzdMLAorNTg5NzhMLDU4OTc5TCw1ODk4MEws NTg5ODFMLDU4OTgyTCw1ODk4M0wsNTg5ODRMLDU4OTg1TCw1ODk4NkwsNTg5ODdMLAorNTg5ODhM LDU4OTg5TCw1ODk5MEwsNTg5OTFMLDU4OTkyTCw1ODk5M0wsNTg5OTRMLDU4OTk1TCw1ODk5Nkws NTg5OTdMLAorNTg5OThMLDU4OTk5TCw1OTAwMEwsNTkwMDFMLDU5MDAyTCw1OTAwM0wsNTkwMDRM LDU5MDA1TCw1OTAwNkwsNTkwMDdMLAorNTkwMDhMLDU5MDA5TCw1OTAxMEwsNTkwMTFMLDU5MDEy TCw1OTAxM0wsNTkwMTRMLDU5MDE1TCw1OTAxNkwsNTkwMTdMLAorNTkwMThMLDU5MDE5TCw1OTAy MEwsNTkwMjFMLDU5MDIyTCw1OTAyM0wsNTkwMjRMLDU5MDI1TCw1OTAyNkwsNTkwMjdMLAorNTkw MjhMLDU5MDI5TCw1OTAzMEwsNTkwMzFMLDU5MDMyTCw1OTAzM0wsNTkwMzRMLDU5MDM1TCw1OTAz NkwsNTkwMzdMLAorNTkwMzhMLDU5MDM5TCw1OTA0MEwsNTkwNDFMLDU5MDQyTCw1OTA0M0wsNTkw NDRMLDU5MDQ1TCw1OTA0NkwsNTkwNDdMLAorNTkwNDhMLDU5MDQ5TCw1OTA1MEwsNTkwNTFMLDU5 MDUyTCw1OTA1M0wsNTkwNTRMLDU5MDU1TCw1OTA1NkwsNTkwNTdMLAorNTkwNThMLDU5MDU5TCw1 OTA2MEwsNTkwNjFMLDU5MDYyTCw1OTA2M0wsNTkwNjRMLDU5MDY1TCw1OTA2NkwsNTkwNjdMLAor NTkwNjhMLDU5MDY5TCw1OTA3MEwsNTkwNzFMLDU5MDcyTCw1OTA3M0wsNTkwNzRMLDU5MDc1TCw1 OTA3NkwsNTkwNzdMLAorNTkwNzhMLDU5MDc5TCw1OTA4MEwsNTkwODFMLDU5MDgyTCw1OTA4M0ws NTkwODRMLDU5MDg1TCw1OTA4NkwsNTkwODdMLAorNTkwODhMLDU5MDg5TCw1OTA5MEwsNTkwOTFM LDU5MDkyTCw1OTA5M0wsNTkwOTRMLDU5MDk1TCw1OTA5NkwsNTkwOTdMLAorNTkwOThMLDU5MDk5 TCw1OTEwMEwsNTkxMDFMLDU5MTAyTCw1OTEwM0wsNTkxMDRMLDU5MTA1TCw1OTEwNkwsNTkxMDdM LAorNTkxMDhMLDU5MTA5TCw1OTExMEwsNTkxMTFMLDU5MTEyTCw1OTExM0wsNTkxMTRMLDU5MTE1 TCw1OTExNkwsNTkxMTdMLAorNTkxMThMLDU5MTE5TCw1OTEyMEwsNTkxMjFMLDU5MTIyTCw1OTEy M0wsNTkxMjRMLDU5MTI1TCw1OTEyNkwsNTkxMjdMLAorNTkxMjhMLDU5MTI5TCw1OTEzMEwsNTkx MzFMLDU5MTMyTCw1OTEzM0wsNTkxMzRMLDU5MTM1TCw1OTEzNkwsNTkxMzdMLAorNTkxMzhMLDU5 MTM5TCw1OTE0MEwsNTkxNDFMLDU5MTQyTCw1OTE0M0wsNTkxNDRMLDU5MTQ1TCw1OTE0NkwsNTkx NDdMLAorNTkxNDhMLDU5MTQ5TCw1OTE1MEwsNTkxNTFMLDU5MTUyTCw1OTE1M0wsNTkxNTRMLDU5 MTU1TCw1OTE1NkwsNTkxNTdMLAorNTkxNThMLDU5MTU5TCw1OTE2MEwsNTkxNjFMLDU5MTYyTCw1 OTE2M0wsNTkxNjRMLDU5MTY1TCw1OTE2NkwsNTkxNjdMLAorNTkxNjhMLDU5MTY5TCw1OTE3MEws NTkxNzFMLDU5MTcyTCw1OTE3M0wsNTkxNzRMLDU5MTc1TCw1OTE3NkwsNTkxNzdMLAorNTkxNzhM LDU5MTc5TCw1OTE4MEwsNTkxODFMLDU5MTgyTCw1OTE4M0wsNTkxODRMLDU5MTg1TCw1OTE4Nkws NTkxODdMLAorNTkxODhMLDU5MTg5TCw1OTE5MEwsNTkxOTFMLDU5MTkyTCw1OTE5M0wsNTkxOTRM LDU5MTk1TCw1OTE5NkwsNTkxOTdMLAorNTkxOThMLDU5MTk5TCw1OTIwMEwsNTkyMDFMLDU5MjAy TCw1OTIwM0wsNTkyMDRMLDU5MjA1TCw1OTIwNkwsNTkyMDdMLAorNTkyMDhMLDU5MjA5TCw1OTIx MEwsNTkyMTFMLDU5MjEyTCw1OTIxM0wsNTkyMTRMLDU5MjE1TCw1OTIxNkwsNTkyMTdMLAorNTky MThMLDU5MjE5TCw1OTIyMEwsNTkyMjFMLDU5MjIyTCw1OTIyM0wsNTkyMjRMLDU5MjI1TCw1OTIy NkwsNTkyMjdMLAorNTkyMjhMLDU5MjI5TCw1OTIzMEwsNTkyMzFMLDU5MjMyTCw1OTIzM0wsNTky MzRMLDU5MjM1TCw1OTIzNkwsNTkyMzdMLAorNTkyMzhMLDU5MjM5TCw1OTI0MEwsNTkyNDFMLDU5 MjQyTCw1OTI0M0wsNTkyNDRMLDU5MjQ1TCw1OTI0NkwsNTkyNDdMLAorNTkyNDhMLDU5MjQ5TCw1 OTI1MEwsNTkyNTFMLDU5MjUyTCw1OTI1M0wsNTkyNTRMLDU5MjU1TCw1OTI1NkwsNTkyNTdMLAor NTkyNThMLDU5MjU5TCw1OTI2MEwsNTkyNjFMLDU5MjYyTCw1OTI2M0wsNTkyNjRMLDU5MjY1TCw1 OTI2NkwsNTkyNjdMLAorNTkyNjhMLDU5MjY5TCw1OTI3MEwsNTkyNzFMLDU5MjcyTCw1OTI3M0ws NTkyNzRMLDU5Mjc1TCw1OTI3NkwsNTkyNzdMLAorNTkyNzhMLDU5Mjc5TCw1OTI4MEwsNTkyODFM LDU5MjgyTCw1OTI4M0wsNTkyODRMLDU5Mjg1TCw1OTI4NkwsNTkyODdMLAorNTkyODhMLDU5Mjg5 TCw1OTI5MEwsNTkyOTFMLDU5MjkyTCw1OTI5M0wsNTkyOTRMLDU5Mjk1TCw1OTI5NkwsNTkyOTdM LAorNTkyOThMLDU5Mjk5TCw1OTMwMEwsNTkzMDFMLDU5MzAyTCw1OTMwM0wsNTkzMDRMLDU5MzA1 TCw1OTMwNkwsNTkzMDdMLAorNTkzMDhMLDU5MzA5TCw1OTMxMEwsNTkzMTFMLDU5MzEyTCw1OTMx M0wsNTkzMTRMLDU5MzE1TCw1OTMxNkwsNTkzMTdMLAorNTkzMThMLDU5MzE5TCw1OTMyMEwsNTkz MjFMLDU5MzIyTCw1OTMyM0wsNTkzMjRMLDU5MzI1TCw1OTMyNkwsNTkzMjdMLAorNTkzMjhMLDU5 MzI5TCw1OTMzMEwsNTkzMzFMLDU5MzMyTCw1OTMzM0wsNTkzMzRMLDU5MzM1TCw1OTMzNkwsNTkz MzdMLAorNTkzMzhMLDU5MzM5TCw1OTM0MEwsNTkzNDFMLDU5MzQyTCw1OTM0M0wsNTkzNDRMLDU5 MzQ1TCw1OTM0NkwsNTkzNDdMLAorNTkzNDhMLDU5MzQ5TCw1OTM1MEwsNTkzNTFMLDU5MzUyTCw1 OTM1M0wsNTkzNTRMLDU5MzU1TCw1OTM1NkwsNTkzNTdMLAorNTkzNThMLDU5MzU5TCw1OTM2MEws NTkzNjFMLDU5MzYyTCw1OTM2M0wsNTkzNjRMLDU5MzY1TCw1OTM2NkwsNTkzNjdMLAorNTkzNjhM LDU5MzY5TCw1OTM3MEwsNTkzNzFMLDU5MzcyTCw1OTM3M0wsNTkzNzRMLDU5Mzc1TCw1OTM3Nkws NTkzNzdMLAorNTkzNzhMLDU5Mzc5TCw1OTM4MEwsNTkzODFMLDU5MzgyTCw1OTM4M0wsNTkzODRM LDU5Mzg1TCw1OTM4NkwsNTkzODdMLAorNTkzODhMLDU5Mzg5TCw1OTM5MEwsNTkzOTFMLDU5Mzky TCw1OTM5M0wsNTkzOTRMLDU5Mzk1TCw1OTM5NkwsNTkzOTdMLAorNTkzOThMLDU5Mzk5TCw1OTQw MEwsNTk0MDFMLDU5NDAyTCw1OTQwM0wsNTk0MDRMLDU5NDA1TCw1OTQwNkwsNTk0MDdMLAorNTk0 MDhMLDU5NDA5TCw1OTQxMEwsNTk0MTFMLDU5NDEyTCw1OTQxM0wsNTk0MTRMLDU5NDE1TCw1OTQx NkwsNTk0MTdMLAorNTk0MThMLDU5NDE5TCw1OTQyMEwsNTk0MjFMLDU5NDIyTCw1OTQyM0wsNTk0 MjRMLDU5NDI1TCw1OTQyNkwsNTk0MjdMLAorNTk0MjhMLDU5NDI5TCw1OTQzMEwsNTk0MzFMLDU5 NDMyTCw1OTQzM0wsNTk0MzRMLDU5NDM1TCw1OTQzNkwsNTk0MzdMLAorNTk0MzhMLDU5NDM5TCw1 OTQ0MEwsNTk0NDFMLDU5NDQyTCw1OTQ0M0wsNTk0NDRMLDU5NDQ1TCw1OTQ0NkwsNTk0NDdMLAor NTk0NDhMLDU5NDQ5TCw1OTQ1MEwsNTk0NTFMLDU5NDUyTCw1OTQ1M0wsNTk0NTRMLDU5NDU1TCw1 OTQ1NkwsNTk0NTdMLAorNTk0NThMLDU5NDU5TCw1OTQ2MEwsNTk0NjFMLDU5NDYyTCw1OTQ2M0ws NTk0NjRMLDU5NDY1TCw1OTQ2NkwsNTk0NjdMLAorNTk0NjhMLDU5NDY5TCw1OTQ3MEwsNTk0NzFM LDU5NDcyTCw1OTQ3M0wsNTk0NzRMLDU5NDc1TCw1OTQ3NkwsNTk0NzdMLAorNTk0NzhMLDU5NDc5 TCw1OTQ4MEwsNTk0ODFMLDU5NDgyTCw1OTQ4M0wsNTk0ODRMLDU5NDg1TCw1OTQ4NkwsNTk0ODdM LAorNTk0ODhMLDU5NDg5TCw1OTQ5MEwsNTk0OTFMLDU5NDkyTCw1OTQ5M0wsNTk0OTRMLDU5NDk1 TCw1OTQ5NkwsNTk0OTdMLAorNTk0OThMLDU5NDk5TCw1OTUwMEwsNTk1MDFMLDU5NTAyTCw1OTUw M0wsNTk1MDRMLDU5NTA1TCw1OTUwNkwsNTk1MDdMLAorNTk1MDhMLDU5NTA5TCw1OTUxMEwsNTk1 MTFMLDU5NTEyTCw1OTUxM0wsNTk1MTRMLDU5NTE1TCw1OTUxNkwsNTk1MTdMLAorNTk1MThMLDU5 NTE5TCw1OTUyMEwsNTk1MjFMLDU5NTIyTCw1OTUyM0wsNTk1MjRMLDU5NTI1TCw1OTUyNkwsNTk1 MjdMLAorNTk1MjhMLDU5NTI5TCw1OTUzMEwsNTk1MzFMLDU5NTMyTCw1OTUzM0wsNTk1MzRMLDU5 NTM1TCw1OTUzNkwsNTk1MzdMLAorNTk1MzhMLDU5NTM5TCw1OTU0MEwsNTk1NDFMLDU5NTQyTCw1 OTU0M0wsNTk1NDRMLDU5NTQ1TCw1OTU0NkwsNTk1NDdMLAorNTk1NDhMLDU5NTQ5TCw1OTU1MEws NTk1NTFMLDU5NTUyTCw1OTU1M0wsNTk1NTRMLDU5NTU1TCw1OTU1NkwsNTk1NTdMLAorNTk1NThM LDU5NTU5TCw1OTU2MEwsNTk1NjFMLDU5NTYyTCw1OTU2M0wsNTk1NjRMLDU5NTY1TCw1OTU2Nkws NTk1NjdMLAorNTk1NjhMLDU5NTY5TCw1OTU3MEwsNTk1NzFMLDU5NTcyTCw1OTU3M0wsNTk1NzRM LDU5NTc1TCw1OTU3NkwsNTk1NzdMLAorNTk1NzhMLDU5NTc5TCw1OTU4MEwsNTk1ODFMLDU5NTgy TCw1OTU4M0wsNTk1ODRMLDU5NTg1TCw1OTU4NkwsNTk1ODdMLAorNTk1ODhMLDU5NTg5TCw1OTU5 MEwsNTk1OTFMLDU5NTkyTCw1OTU5M0wsNTk1OTRMLDU5NTk1TCw1OTU5NkwsNTk1OTdMLAorNTk1 OThMLDU5NTk5TCw1OTYwMEwsNTk2MDFMLDU5NjAyTCw1OTYwM0wsNTk2MDRMLDU5NjA1TCw1OTYw NkwsNTk2MDdMLAorNTk2MDhMLDU5NjA5TCw1OTYxMEwsNTk2MTFMLDU5NjEyTCw1OTYxM0wsNTk2 MTRMLDU5NjE1TCw1OTYxNkwsNTk2MTdMLAorNTk2MThMLDU5NjE5TCw1OTYyMEwsNTk2MjFMLDU5 NjIyTCw1OTYyM0wsNTk2MjRMLDU5NjI1TCw1OTYyNkwsNTk2MjdMLAorNTk2MjhMLDU5NjI5TCw1 OTYzMEwsNTk2MzFMLDU5NjMyTCw1OTYzM0wsNTk2MzRMLDU5NjM1TCw1OTYzNkwsNTk2MzdMLAor NTk2MzhMLDU5NjM5TCw1OTY0MEwsNTk2NDFMLDU5NjQyTCw1OTY0M0wsNTk2NDRMLDU5NjQ1TCw1 OTY0NkwsNTk2NDdMLAorNTk2NDhMLDU5NjQ5TCw1OTY1MEwsNTk2NTFMLDU5NjUyTCw1OTY1M0ws NTk2NTRMLDU5NjU1TCw1OTY1NkwsNTk2NTdMLAorNTk2NThMLDU5NjU5TCw1OTY2MEwsNTk2NjFM LDU5NjYyTCw1OTY2M0wsNTk2NjRMLDU5NjY1TCw1OTY2NkwsNTk2NjdMLAorNTk2NjhMLDU5NjY5 TCw1OTY3MEwsNTk2NzFMLDU5NjcyTCw1OTY3M0wsNTk2NzRMLDU5Njc1TCw1OTY3NkwsNTk2NzdM LAorNTk2NzhMLDU5Njc5TCw1OTY4MEwsNTk2ODFMLDU5NjgyTCw1OTY4M0wsNTk2ODRMLDU5Njg1 TCw1OTY4NkwsNTk2ODdMLAorNTk2ODhMLDU5Njg5TCw1OTY5MEwsNTk2OTFMLDU5NjkyTCw1OTY5 M0wsNTk2OTRMLDU5Njk1TCw1OTY5NkwsNTk2OTdMLAorNTk2OThMLDU5Njk5TCw1OTcwMEwsNTk3 MDFMLDU5NzAyTCw1OTcwM0wsNTk3MDRMLDU5NzA1TCw1OTcwNkwsNTk3MDdMLAorNTk3MDhMLDU5 NzA5TCw1OTcxMEwsNTk3MTFMLDU5NzEyTCw1OTcxM0wsNTk3MTRMLDU5NzE1TCw1OTcxNkwsNTk3 MTdMLAorNTk3MThMLDU5NzE5TCw1OTcyMEwsNTk3MjFMLDU5NzIyTCw1OTcyM0wsNTk3MjRMLDU5 NzI1TCw1OTcyNkwsNTk3MjdMLAorNTk3MjhMLDU5NzI5TCw1OTczMEwsNTk3MzFMLDU5NzMyTCw1 OTczM0wsNTk3MzRMLDU5NzM1TCw1OTczNkwsNTk3MzdMLAorNTk3MzhMLDU5NzM5TCw1OTc0MEws NTk3NDFMLDU5NzQyTCw1OTc0M0wsNTk3NDRMLDU5NzQ1TCw1OTc0NkwsNTk3NDdMLAorNTk3NDhM LDU5NzQ5TCw1OTc1MEwsNTk3NTFMLDU5NzUyTCw1OTc1M0wsNTk3NTRMLDU5NzU1TCw1OTc1Nkws NTk3NTdMLAorNTk3NThMLDU5NzU5TCw1OTc2MEwsNTk3NjFMLDU5NzYyTCw1OTc2M0wsNTk3NjRM LDU5NzY1TCw1OTc2NkwsNTk3NjdMLAorNTk3NjhMLDU5NzY5TCw1OTc3MEwsNTk3NzFMLDU5Nzcy TCw1OTc3M0wsNTk3NzRMLDU5Nzc1TCw1OTc3NkwsNTk3NzdMLAorNTk3NzhMLDU5Nzc5TCw1OTc4 MEwsNTk3ODFMLDU5NzgyTCw1OTc4M0wsNTk3ODRMLDU5Nzg1TCw1OTc4NkwsNTk3ODdMLAorNTk3 ODhMLDU5Nzg5TCw1OTc5MEwsNTk3OTFMLDU5NzkyTCw1OTc5M0wsNTk3OTRMLDU5Nzk1TCw1OTc5 NkwsNTk3OTdMLAorNTk3OThMLDU5Nzk5TCw1OTgwMEwsNTk4MDFMLDU5ODAyTCw1OTgwM0wsNTk4 MDRMLDU5ODA1TCw1OTgwNkwsNTk4MDdMLAorNTk4MDhMLDU5ODA5TCw1OTgxMEwsNTk4MTFMLDU5 ODEyTCw1OTgxM0wsNTk4MTRMLDU5ODE1TCw1OTgxNkwsNTk4MTdMLAorNTk4MThMLDU5ODE5TCw1 OTgyMEwsNTk4MjFMLDU5ODIyTCw1OTgyM0wsNTk4MjRMLDU5ODI1TCw1OTgyNkwsNTk4MjdMLAor NTk4MjhMLDU5ODI5TCw1OTgzMEwsNTk4MzFMLDU5ODMyTCw1OTgzM0wsNTk4MzRMLDU5ODM1TCw1 OTgzNkwsNTk4MzdMLAorNTk4MzhMLDU5ODM5TCw1OTg0MEwsNTk4NDFMLDU5ODQyTCw1OTg0M0ws NTk4NDRMLDU5ODQ1TCw1OTg0NkwsNTk4NDdMLAorNTk4NDhMLDU5ODQ5TCw1OTg1MEwsNTk4NTFM LDU5ODUyTCw1OTg1M0wsNTk4NTRMLDU5ODU1TCw1OTg1NkwsNTk4NTdMLAorNTk4NThMLDU5ODU5 TCw1OTg2MEwsNTk4NjFMLDU5ODYyTCw1OTg2M0wsNTk4NjRMLDU5ODY1TCw1OTg2NkwsNTk4NjdM LAorNTk4NjhMLDU5ODY5TCw1OTg3MEwsNTk4NzFMLDU5ODcyTCw1OTg3M0wsNTk4NzRMLDU5ODc1 TCw1OTg3NkwsNTk4NzdMLAorNTk4NzhMLDU5ODc5TCw1OTg4MEwsNTk4ODFMLDU5ODgyTCw1OTg4 M0wsNTk4ODRMLDU5ODg1TCw1OTg4NkwsNTk4ODdMLAorNTk4ODhMLDU5ODg5TCw1OTg5MEwsNTk4 OTFMLDU5ODkyTCw1OTg5M0wsNTk4OTRMLDU5ODk1TCw1OTg5NkwsNTk4OTdMLAorNTk4OThMLDU5 ODk5TCw1OTkwMEwsNTk5MDFMLDU5OTAyTCw1OTkwM0wsNTk5MDRMLDU5OTA1TCw1OTkwNkwsNTk5 MDdMLAorNTk5MDhMLDU5OTA5TCw1OTkxMEwsNTk5MTFMLDU5OTEyTCw1OTkxM0wsNTk5MTRMLDU5 OTE1TCw1OTkxNkwsNTk5MTdMLAorNTk5MThMLDU5OTE5TCw1OTkyMEwsNTk5MjFMLDU5OTIyTCw1 OTkyM0wsNTk5MjRMLDU5OTI1TCw1OTkyNkwsNTk5MjdMLAorNTk5MjhMLDU5OTI5TCw1OTkzMEws NTk5MzFMLDU5OTMyTCw1OTkzM0wsNTk5MzRMLDU5OTM1TCw1OTkzNkwsNTk5MzdMLAorNTk5MzhM LDU5OTM5TCw1OTk0MEwsNTk5NDFMLDU5OTQyTCw1OTk0M0wsNTk5NDRMLDU5OTQ1TCw1OTk0Nkws NTk5NDdMLAorNTk5NDhMLDU5OTQ5TCw1OTk1MEwsNTk5NTFMLDU5OTUyTCw1OTk1M0wsNTk5NTRM LDU5OTU1TCw1OTk1NkwsNTk5NTdMLAorNTk5NThMLDU5OTU5TCw1OTk2MEwsNTk5NjFMLDU5OTYy TCw1OTk2M0wsNTk5NjRMLDU5OTY1TCw1OTk2NkwsNTk5NjdMLAorNTk5NjhMLDU5OTY5TCw1OTk3 MEwsNTk5NzFMLDU5OTcyTCw1OTk3M0wsNTk5NzRMLDU5OTc1TCw1OTk3NkwsNTk5NzdMLAorNTk5 NzhMLDU5OTc5TCw1OTk4MEwsNTk5ODFMLDU5OTgyTCw1OTk4M0wsNTk5ODRMLDU5OTg1TCw1OTk4 NkwsNTk5ODdMLAorNTk5ODhMLDU5OTg5TCw1OTk5MEwsNTk5OTFMLDU5OTkyTCw1OTk5M0wsNTk5 OTRMLDU5OTk1TCw1OTk5NkwsNTk5OTdMLAorNTk5OThMLDU5OTk5TCw2MDAwMEwsNjAwMDFMLDYw MDAyTCw2MDAwM0wsNjAwMDRMLDYwMDA1TCw2MDAwNkwsNjAwMDdMLAorNjAwMDhMLDYwMDA5TCw2 MDAxMEwsNjAwMTFMLDYwMDEyTCw2MDAxM0wsNjAwMTRMLDYwMDE1TCw2MDAxNkwsNjAwMTdMLAor NjAwMThMLDYwMDE5TCw2MDAyMEwsNjAwMjFMLDYwMDIyTCw2MDAyM0wsNjAwMjRMLDYwMDI1TCw2 MDAyNkwsNjAwMjdMLAorNjAwMjhMLDYwMDI5TCw2MDAzMEwsNjAwMzFMLDYwMDMyTCw2MDAzM0ws NjAwMzRMLDYwMDM1TCw2MDAzNkwsNjAwMzdMLAorNjAwMzhMLDYwMDM5TCw2MDA0MEwsNjAwNDFM LDYwMDQyTCw2MDA0M0wsNjAwNDRMLDYwMDQ1TCw2MDA0NkwsNjAwNDdMLAorNjAwNDhMLDYwMDQ5 TCw2MDA1MEwsNjAwNTFMLDYwMDUyTCw2MDA1M0wsNjAwNTRMLDYwMDU1TCw2MDA1NkwsNjAwNTdM LAorNjAwNThMLDYwMDU5TCw2MDA2MEwsNjAwNjFMLDYwMDYyTCw2MDA2M0wsNjAwNjRMLDYwMDY1 TCw2MDA2NkwsNjAwNjdMLAorNjAwNjhMLDYwMDY5TCw2MDA3MEwsNjAwNzFMLDYwMDcyTCw2MDA3 M0wsNjAwNzRMLDYwMDc1TCw2MDA3NkwsNjAwNzdMLAorNjAwNzhMLDYwMDc5TCw2MDA4MEwsNjAw ODFMLDYwMDgyTCw2MDA4M0wsNjAwODRMLDYwMDg1TCw2MDA4NkwsNjAwODdMLAorNjAwODhMLDYw MDg5TCw2MDA5MEwsNjAwOTFMLDYwMDkyTCw2MDA5M0wsNjAwOTRMLDYwMDk1TCw2MDA5NkwsNjAw OTdMLAorNjAwOThMLDYwMDk5TCw2MDEwMEwsNjAxMDFMLDYwMTAyTCw2MDEwM0wsNjAxMDRMLDYw MTA1TCw2MDEwNkwsNjAxMDdMLAorNjAxMDhMLDYwMTA5TCw2MDExMEwsNjAxMTFMLDYwMTEyTCw2 MDExM0wsNjAxMTRMLDYwMTE1TCw2MDExNkwsNjAxMTdMLAorNjAxMThMLDYwMTE5TCw2MDEyMEws NjAxMjFMLDYwMTIyTCw2MDEyM0wsNjAxMjRMLDYwMTI1TCw2MDEyNkwsNjAxMjdMLAorNjAxMjhM LDYwMTI5TCw2MDEzMEwsNjAxMzFMLDYwMTMyTCw2MDEzM0wsNjAxMzRMLDYwMTM1TCw2MDEzNkws NjAxMzdMLAorNjAxMzhMLDYwMTM5TCw2MDE0MEwsNjAxNDFMLDYwMTQyTCw2MDE0M0wsNjAxNDRM LDYwMTQ1TCw2MDE0NkwsNjAxNDdMLAorNjAxNDhMLDYwMTQ5TCw2MDE1MEwsNjAxNTFMLDYwMTUy TCw2MDE1M0wsNjAxNTRMLDYwMTU1TCw2MDE1NkwsNjAxNTdMLAorNjAxNThMLDYwMTU5TCw2MDE2 MEwsNjAxNjFMLDYwMTYyTCw2MDE2M0wsNjAxNjRMLDYwMTY1TCw2MDE2NkwsNjAxNjdMLAorNjAx NjhMLDYwMTY5TCw2MDE3MEwsNjAxNzFMLDYwMTcyTCw2MDE3M0wsNjAxNzRMLDYwMTc1TCw2MDE3 NkwsNjAxNzdMLAorNjAxNzhMLDYwMTc5TCw2MDE4MEwsNjAxODFMLDYwMTgyTCw2MDE4M0wsNjAx ODRMLDYwMTg1TCw2MDE4NkwsNjAxODdMLAorNjAxODhMLDYwMTg5TCw2MDE5MEwsNjAxOTFMLDYw MTkyTCw2MDE5M0wsNjAxOTRMLDYwMTk1TCw2MDE5NkwsNjAxOTdMLAorNjAxOThMLDYwMTk5TCw2 MDIwMEwsNjAyMDFMLDYwMjAyTCw2MDIwM0wsNjAyMDRMLDYwMjA1TCw2MDIwNkwsNjAyMDdMLAor NjAyMDhMLDYwMjA5TCw2MDIxMEwsNjAyMTFMLDYwMjEyTCw2MDIxM0wsNjAyMTRMLDYwMjE1TCw2 MDIxNkwsNjAyMTdMLAorNjAyMThMLDYwMjE5TCw2MDIyMEwsNjAyMjFMLDYwMjIyTCw2MDIyM0ws NjAyMjRMLDYwMjI1TCw2MDIyNkwsNjAyMjdMLAorNjAyMjhMLDYwMjI5TCw2MDIzMEwsNjAyMzFM LDYwMjMyTCw2MDIzM0wsNjAyMzRMLDYwMjM1TCw2MDIzNkwsNjAyMzdMLAorNjAyMzhMLDYwMjM5 TCw2MDI0MEwsNjAyNDFMLDYwMjQyTCw2MDI0M0wsNjAyNDRMLDYwMjQ1TCw2MDI0NkwsNjAyNDdM LAorNjAyNDhMLDYwMjQ5TCw2MDI1MEwsNjAyNTFMLDYwMjUyTCw2MDI1M0wsNjAyNTRMLDYwMjU1 TCw2MDI1NkwsNjAyNTdMLAorNjAyNThMLDYwMjU5TCw2MDI2MEwsNjAyNjFMLDYwMjYyTCw2MDI2 M0wsNjAyNjRMLDYwMjY1TCw2MDI2NkwsNjAyNjdMLAorNjAyNjhMLDYwMjY5TCw2MDI3MEwsNjAy NzFMLDYwMjcyTCw2MDI3M0wsNjAyNzRMLDYwMjc1TCw2MDI3NkwsNjAyNzdMLAorNjAyNzhMLDYw Mjc5TCw2MDI4MEwsNjAyODFMLDYwMjgyTCw2MDI4M0wsNjAyODRMLDYwMjg1TCw2MDI4NkwsNjAy ODdMLAorNjAyODhMLDYwMjg5TCw2MDI5MEwsNjAyOTFMLDYwMjkyTCw2MDI5M0wsNjAyOTRMLDYw Mjk1TCw2MDI5NkwsNjAyOTdMLAorNjAyOThMLDYwMjk5TCw2MDMwMEwsNjAzMDFMLDYwMzAyTCw2 MDMwM0wsNjAzMDRMLDYwMzA1TCw2MDMwNkwsNjAzMDdMLAorNjAzMDhMLDYwMzA5TCw2MDMxMEws NjAzMTFMLDYwMzEyTCw2MDMxM0wsNjAzMTRMLDYwMzE1TCw2MDMxNkwsNjAzMTdMLAorNjAzMThM LDYwMzE5TCw2MDMyMEwsNjAzMjFMLDYwMzIyTCw2MDMyM0wsNjAzMjRMLDYwMzI1TCw2MDMyNkws NjAzMjdMLAorNjAzMjhMLDYwMzI5TCw2MDMzMEwsNjAzMzFMLDYwMzMyTCw2MDMzM0wsNjAzMzRM LDYwMzM1TCw2MDMzNkwsNjAzMzdMLAorNjAzMzhMLDYwMzM5TCw2MDM0MEwsNjAzNDFMLDYwMzQy TCw2MDM0M0wsNjAzNDRMLDYwMzQ1TCw2MDM0NkwsNjAzNDdMLAorNjAzNDhMLDYwMzQ5TCw2MDM1 MEwsNjAzNTFMLDYwMzUyTCw2MDM1M0wsNjAzNTRMLDYwMzU1TCw2MDM1NkwsNjAzNTdMLAorNjAz NThMLDYwMzU5TCw2MDM2MEwsNjAzNjFMLDYwMzYyTCw2MDM2M0wsNjAzNjRMLDYwMzY1TCw2MDM2 NkwsNjAzNjdMLAorNjAzNjhMLDYwMzY5TCw2MDM3MEwsNjAzNzFMLDYwMzcyTCw2MDM3M0wsNjAz NzRMLDYwMzc1TCw2MDM3NkwsNjAzNzdMLAorNjAzNzhMLDYwMzc5TCw2MDM4MEwsNjAzODFMLDYw MzgyTCw2MDM4M0wsNjAzODRMLDYwMzg1TCw2MDM4NkwsNjAzODdMLAorNjAzODhMLDYwMzg5TCw2 MDM5MEwsNjAzOTFMLDYwMzkyTCw2MDM5M0wsNjAzOTRMLDYwMzk1TCw2MDM5NkwsNjAzOTdMLAor NjAzOThMLDYwMzk5TCw2MDQwMEwsNjA0MDFMLDYwNDAyTCw2MDQwM0wsNjA0MDRMLDYwNDA1TCw2 MDQwNkwsNjA0MDdMLAorNjA0MDhMLDYwNDA5TCw2MDQxMEwsNjA0MTFMLDYwNDEyTCw2MDQxM0ws NjA0MTRMLDYwNDE1TCw2MDQxNkwsNjA0MTdMLAorNjA0MThMLDYwNDE5TCw2MDQyMEwsNjA0MjFM LDYwNDIyTCw2MDQyM0wsNjA0MjRMLDYwNDI1TCw2MDQyNkwsNjA0MjdMLAorNjA0MjhMLDYwNDI5 TCw2MDQzMEwsNjA0MzFMLDYwNDMyTCw2MDQzM0wsNjA0MzRMLDYwNDM1TCw2MDQzNkwsNjA0MzdM LAorNjA0MzhMLDYwNDM5TCw2MDQ0MEwsNjA0NDFMLDYwNDQyTCw2MDQ0M0wsNjA0NDRMLDYwNDQ1 TCw2MDQ0NkwsNjA0NDdMLAorNjA0NDhMLDYwNDQ5TCw2MDQ1MEwsNjA0NTFMLDYwNDUyTCw2MDQ1 M0wsNjA0NTRMLDYwNDU1TCw2MDQ1NkwsNjA0NTdMLAorNjA0NThMLDYwNDU5TCw2MDQ2MEwsNjA0 NjFMLDYwNDYyTCw2MDQ2M0wsNjA0NjRMLDYwNDY1TCw2MDQ2NkwsNjA0NjdMLAorNjA0NjhMLDYw NDY5TCw2MDQ3MEwsNjA0NzFMLDYwNDcyTCw2MDQ3M0wsNjA0NzRMLDYwNDc1TCw2MDQ3NkwsNjA0 NzdMLAorNjA0NzhMLDYwNDc5TCw2MDQ4MEwsNjA0ODFMLDYwNDgyTCw2MDQ4M0wsNjA0ODRMLDYw NDg1TCw2MDQ4NkwsNjA0ODdMLAorNjA0ODhMLDYwNDg5TCw2MDQ5MEwsNjA0OTFMLDYwNDkyTCw2 MDQ5M0wsNjA0OTRMLDYwNDk1TCw2MDQ5NkwsNjA0OTdMLAorNjA0OThMLDYwNDk5TCw2MDUwMEws NjA1MDFMLDYwNTAyTCw2MDUwM0wsNjA1MDRMLDYwNTA1TCw2MDUwNkwsNjA1MDdMLAorNjA1MDhM LDYwNTA5TCw2MDUxMEwsNjA1MTFMLDYwNTEyTCw2MDUxM0wsNjA1MTRMLDYwNTE1TCw2MDUxNkws NjA1MTdMLAorNjA1MThMLDYwNTE5TCw2MDUyMEwsNjA1MjFMLDYwNTIyTCw2MDUyM0wsNjA1MjRM LDYwNTI1TCw2MDUyNkwsNjA1MjdMLAorNjA1MjhMLDYwNTI5TCw2MDUzMEwsNjA1MzFMLDYwNTMy TCw2MDUzM0wsNjA1MzRMLDYwNTM1TCw2MDUzNkwsNjA1MzdMLAorNjA1MzhMLDYwNTM5TCw2MDU0 MEwsNjA1NDFMLDYwNTQyTCw2MDU0M0wsNjA1NDRMLDYwNTQ1TCw2MDU0NkwsNjA1NDdMLAorNjA1 NDhMLDYwNTQ5TCw2MDU1MEwsNjA1NTFMLDYwNTUyTCw2MDU1M0wsNjA1NTRMLDYwNTU1TCw2MDU1 NkwsNjA1NTdMLAorNjA1NThMLDYwNTU5TCw2MDU2MEwsNjA1NjFMLDYwNTYyTCw2MDU2M0wsNjA1 NjRMLDYwNTY1TCw2MDU2NkwsNjA1NjdMLAorNjA1NjhMLDYwNTY5TCw2MDU3MEwsNjA1NzFMLDYw NTcyTCw2MDU3M0wsNjA1NzRMLDYwNTc1TCw2MDU3NkwsNjA1NzdMLAorNjA1NzhMLDYwNTc5TCw2 MDU4MEwsNjA1ODFMLDYwNTgyTCw2MDU4M0wsNjA1ODRMLDYwNTg1TCw2MDU4NkwsNjA1ODdMLAor NjA1ODhMLDYwNTg5TCw2MDU5MEwsNjA1OTFMLDYwNTkyTCw2MDU5M0wsNjA1OTRMLDYwNTk1TCw2 MDU5NkwsNjA1OTdMLAorNjA1OThMLDYwNTk5TCw2MDYwMEwsNjA2MDFMLDYwNjAyTCw2MDYwM0ws NjA2MDRMLDYwNjA1TCw2MDYwNkwsNjA2MDdMLAorNjA2MDhMLDYwNjA5TCw2MDYxMEwsNjA2MTFM LDYwNjEyTCw2MDYxM0wsNjA2MTRMLDYwNjE1TCw2MDYxNkwsNjA2MTdMLAorNjA2MThMLDYwNjE5 TCw2MDYyMEwsNjA2MjFMLDYwNjIyTCw2MDYyM0wsNjA2MjRMLDYwNjI1TCw2MDYyNkwsNjA2MjdM LAorNjA2MjhMLDYwNjI5TCw2MDYzMEwsNjA2MzFMLDYwNjMyTCw2MDYzM0wsNjA2MzRMLDYwNjM1 TCw2MDYzNkwsNjA2MzdMLAorNjA2MzhMLDYwNjM5TCw2MDY0MEwsNjA2NDFMLDYwNjQyTCw2MDY0 M0wsNjA2NDRMLDYwNjQ1TCw2MDY0NkwsNjA2NDdMLAorNjA2NDhMLDYwNjQ5TCw2MDY1MEwsNjA2 NTFMLDYwNjUyTCw2MDY1M0wsNjA2NTRMLDYwNjU1TCw2MDY1NkwsNjA2NTdMLAorNjA2NThMLDYw NjU5TCw2MDY2MEwsNjA2NjFMLDYwNjYyTCw2MDY2M0wsNjA2NjRMLDYwNjY1TCw2MDY2NkwsNjA2 NjdMLAorNjA2NjhMLDYwNjY5TCw2MDY3MEwsNjA2NzFMLDYwNjcyTCw2MDY3M0wsNjA2NzRMLDYw Njc1TCw2MDY3NkwsNjA2NzdMLAorNjA2NzhMLDYwNjc5TCw2MDY4MEwsNjA2ODFMLDYwNjgyTCw2 MDY4M0wsNjA2ODRMLDYwNjg1TCw2MDY4NkwsNjA2ODdMLAorNjA2ODhMLDYwNjg5TCw2MDY5MEws NjA2OTFMLDYwNjkyTCw2MDY5M0wsNjA2OTRMLDYwNjk1TCw2MDY5NkwsNjA2OTdMLAorNjA2OThM LDYwNjk5TCw2MDcwMEwsNjA3MDFMLDYwNzAyTCw2MDcwM0wsNjA3MDRMLDYwNzA1TCw2MDcwNkws NjA3MDdMLAorNjA3MDhMLDYwNzA5TCw2MDcxMEwsNjA3MTFMLDYwNzEyTCw2MDcxM0wsNjA3MTRM LDYwNzE1TCw2MDcxNkwsNjA3MTdMLAorNjA3MThMLDYwNzE5TCw2MDcyMEwsNjA3MjFMLDYwNzIy TCw2MDcyM0wsNjA3MjRMLDYwNzI1TCw2MDcyNkwsNjA3MjdMLAorNjA3MjhMLDYwNzI5TCw2MDcz MEwsNjA3MzFMLDYwNzMyTCw2MDczM0wsNjA3MzRMLDYwNzM1TCw2MDczNkwsNjA3MzdMLAorNjA3 MzhMLDYwNzM5TCw2MDc0MEwsNjA3NDFMLDYwNzQyTCw2MDc0M0wsNjA3NDRMLDYwNzQ1TCw2MDc0 NkwsNjA3NDdMLAorNjA3NDhMLDYwNzQ5TCw2MDc1MEwsNjA3NTFMLDYwNzUyTCw2MDc1M0wsNjA3 NTRMLDYwNzU1TCw2MDc1NkwsNjA3NTdMLAorNjA3NThMLDYwNzU5TCw2MDc2MEwsNjA3NjFMLDYw NzYyTCw2MDc2M0wsNjA3NjRMLDYwNzY1TCw2MDc2NkwsNjA3NjdMLAorNjA3NjhMLDYwNzY5TCw2 MDc3MEwsNjA3NzFMLDYwNzcyTCw2MDc3M0wsNjA3NzRMLDYwNzc1TCw2MDc3NkwsNjA3NzdMLAor NjA3NzhMLDYwNzc5TCw2MDc4MEwsNjA3ODFMLDYwNzgyTCw2MDc4M0wsNjA3ODRMLDYwNzg1TCw2 MDc4NkwsNjA3ODdMLAorNjA3ODhMLDYwNzg5TCw2MDc5MEwsNjA3OTFMLDYwNzkyTCw2MDc5M0ws NjA3OTRMLDYwNzk1TCw2MDc5NkwsNjA3OTdMLAorNjA3OThMLDYwNzk5TCw2MDgwMEwsNjA4MDFM LDYwODAyTCw2MDgwM0wsNjA4MDRMLDYwODA1TCw2MDgwNkwsNjA4MDdMLAorNjA4MDhMLDYwODA5 TCw2MDgxMEwsNjA4MTFMLDYwODEyTCw2MDgxM0wsNjA4MTRMLDYwODE1TCw2MDgxNkwsNjA4MTdM LAorNjA4MThMLDYwODE5TCw2MDgyMEwsNjA4MjFMLDYwODIyTCw2MDgyM0wsNjA4MjRMLDYwODI1 TCw2MDgyNkwsNjA4MjdMLAorNjA4MjhMLDYwODI5TCw2MDgzMEwsNjA4MzFMLDYwODMyTCw2MDgz M0wsNjA4MzRMLDYwODM1TCw2MDgzNkwsNjA4MzdMLAorNjA4MzhMLDYwODM5TCw2MDg0MEwsNjA4 NDFMLDYwODQyTCw2MDg0M0wsNjA4NDRMLDYwODQ1TCw2MDg0NkwsNjA4NDdMLAorNjA4NDhMLDYw ODQ5TCw2MDg1MEwsNjA4NTFMLDYwODUyTCw2MDg1M0wsNjA4NTRMLDYwODU1TCw2MDg1NkwsNjA4 NTdMLAorNjA4NThMLDYwODU5TCw2MDg2MEwsNjA4NjFMLDYwODYyTCw2MDg2M0wsNjA4NjRMLDYw ODY1TCw2MDg2NkwsNjA4NjdMLAorNjA4NjhMLDYwODY5TCw2MDg3MEwsNjA4NzFMLDYwODcyTCw2 MDg3M0wsNjA4NzRMLDYwODc1TCw2MDg3NkwsNjA4NzdMLAorNjA4NzhMLDYwODc5TCw2MDg4MEws NjA4ODFMLDYwODgyTCw2MDg4M0wsNjA4ODRMLDYwODg1TCw2MDg4NkwsNjA4ODdMLAorNjA4ODhM LDYwODg5TCw2MDg5MEwsNjA4OTFMLDYwODkyTCw2MDg5M0wsNjA4OTRMLDYwODk1TCw2MDg5Nkws NjA4OTdMLAorNjA4OThMLDYwODk5TCw2MDkwMEwsNjA5MDFMLDYwOTAyTCw2MDkwM0wsNjA5MDRM LDYwOTA1TCw2MDkwNkwsNjA5MDdMLAorNjA5MDhMLDYwOTA5TCw2MDkxMEwsNjA5MTFMLDYwOTEy TCw2MDkxM0wsNjA5MTRMLDYwOTE1TCw2MDkxNkwsNjA5MTdMLAorNjA5MThMLDYwOTE5TCw2MDky MEwsNjA5MjFMLDYwOTIyTCw2MDkyM0wsNjA5MjRMLDYwOTI1TCw2MDkyNkwsNjA5MjdMLAorNjA5 MjhMLDYwOTI5TCw2MDkzMEwsNjA5MzFMLDYwOTMyTCw2MDkzM0wsNjA5MzRMLDYwOTM1TCw2MDkz NkwsNjA5MzdMLAorNjA5MzhMLDYwOTM5TCw2MDk0MEwsNjA5NDFMLDYwOTQyTCw2MDk0M0wsNjA5 NDRMLDYwOTQ1TCw2MDk0NkwsNjA5NDdMLAorNjA5NDhMLDYwOTQ5TCw2MDk1MEwsNjA5NTFMLDYw OTUyTCw2MDk1M0wsNjA5NTRMLDYwOTU1TCw2MDk1NkwsNjA5NTdMLAorNjA5NThMLDYwOTU5TCw2 MDk2MEwsNjA5NjFMLDYwOTYyTCw2MDk2M0wsNjA5NjRMLDYwOTY1TCw2MDk2NkwsNjA5NjdMLAor NjA5NjhMLDYwOTY5TCw2MDk3MEwsNjA5NzFMLDYwOTcyTCw2MDk3M0wsNjA5NzRMLDYwOTc1TCw2 MDk3NkwsNjA5NzdMLAorNjA5NzhMLDYwOTc5TCw2MDk4MEwsNjA5ODFMLDYwOTgyTCw2MDk4M0ws NjA5ODRMLDYwOTg1TCw2MDk4NkwsNjA5ODdMLAorNjA5ODhMLDYwOTg5TCw2MDk5MEwsNjA5OTFM LDYwOTkyTCw2MDk5M0wsNjA5OTRMLDYwOTk1TCw2MDk5NkwsNjA5OTdMLAorNjA5OThMLDYwOTk5 TCw2MTAwMEwsNjEwMDFMLDYxMDAyTCw2MTAwM0wsNjEwMDRMLDYxMDA1TCw2MTAwNkwsNjEwMDdM LAorNjEwMDhMLDYxMDA5TCw2MTAxMEwsNjEwMTFMLDYxMDEyTCw2MTAxM0wsNjEwMTRMLDYxMDE1 TCw2MTAxNkwsNjEwMTdMLAorNjEwMThMLDYxMDE5TCw2MTAyMEwsNjEwMjFMLDYxMDIyTCw2MTAy M0wsNjEwMjRMLDYxMDI1TCw2MTAyNkwsNjEwMjdMLAorNjEwMjhMLDYxMDI5TCw2MTAzMEwsNjEw MzFMLDYxMDMyTCw2MTAzM0wsNjEwMzRMLDYxMDM1TCw2MTAzNkwsNjEwMzdMLAorNjEwMzhMLDYx MDM5TCw2MTA0MEwsNjEwNDFMLDYxMDQyTCw2MTA0M0wsNjEwNDRMLDYxMDQ1TCw2MTA0NkwsNjEw NDdMLAorNjEwNDhMLDYxMDQ5TCw2MTA1MEwsNjEwNTFMLDYxMDUyTCw2MTA1M0wsNjEwNTRMLDYx MDU1TCw2MTA1NkwsNjEwNTdMLAorNjEwNThMLDYxMDU5TCw2MTA2MEwsNjEwNjFMLDYxMDYyTCw2 MTA2M0wsNjEwNjRMLDYxMDY1TCw2MTA2NkwsNjEwNjdMLAorNjEwNjhMLDYxMDY5TCw2MTA3MEws NjEwNzFMLDYxMDcyTCw2MTA3M0wsNjEwNzRMLDYxMDc1TCw2MTA3NkwsNjEwNzdMLAorNjEwNzhM LDYxMDc5TCw2MTA4MEwsNjEwODFMLDYxMDgyTCw2MTA4M0wsNjEwODRMLDYxMDg1TCw2MTA4Nkws NjEwODdMLAorNjEwODhMLDYxMDg5TCw2MTA5MEwsNjEwOTFMLDYxMDkyTCw2MTA5M0wsNjEwOTRM LDYxMDk1TCw2MTA5NkwsNjEwOTdMLAorNjEwOThMLDYxMDk5TCw2MTEwMEwsNjExMDFMLDYxMTAy TCw2MTEwM0wsNjExMDRMLDYxMTA1TCw2MTEwNkwsNjExMDdMLAorNjExMDhMLDYxMTA5TCw2MTEx MEwsNjExMTFMLDYxMTEyTCw2MTExM0wsNjExMTRMLDYxMTE1TCw2MTExNkwsNjExMTdMLAorNjEx MThMLDYxMTE5TCw2MTEyMEwsNjExMjFMLDYxMTIyTCw2MTEyM0wsNjExMjRMLDYxMTI1TCw2MTEy NkwsNjExMjdMLAorNjExMjhMLDYxMTI5TCw2MTEzMEwsNjExMzFMLDYxMTMyTCw2MTEzM0wsNjEx MzRMLDYxMTM1TCw2MTEzNkwsNjExMzdMLAorNjExMzhMLDYxMTM5TCw2MTE0MEwsNjExNDFMLDYx MTQyTCw2MTE0M0wsNjExNDRMLDYxMTQ1TCw2MTE0NkwsNjExNDdMLAorNjExNDhMLDYxMTQ5TCw2 MTE1MEwsNjExNTFMLDYxMTUyTCw2MTE1M0wsNjExNTRMLDYxMTU1TCw2MTE1NkwsNjExNTdMLAor NjExNThMLDYxMTU5TCw2MTE2MEwsNjExNjFMLDYxMTYyTCw2MTE2M0wsNjExNjRMLDYxMTY1TCw2 MTE2NkwsNjExNjdMLAorNjExNjhMLDYxMTY5TCw2MTE3MEwsNjExNzFMLDYxMTcyTCw2MTE3M0ws NjExNzRMLDYxMTc1TCw2MTE3NkwsNjExNzdMLAorNjExNzhMLDYxMTc5TCw2MTE4MEwsNjExODFM LDYxMTgyTCw2MTE4M0wsNjExODRMLDYxMTg1TCw2MTE4NkwsNjExODdMLAorNjExODhMLDYxMTg5 TCw2MTE5MEwsNjExOTFMLDYxMTkyTCw2MTE5M0wsNjExOTRMLDYxMTk1TCw2MTE5NkwsNjExOTdM LAorNjExOThMLDYxMTk5TCw2MTIwMEwsNjEyMDFMLDYxMjAyTCw2MTIwM0wsNjEyMDRMLDYxMjA1 TCw2MTIwNkwsNjEyMDdMLAorNjEyMDhMLDYxMjA5TCw2MTIxMEwsNjEyMTFMLDYxMjEyTCw2MTIx M0wsNjEyMTRMLDYxMjE1TCw2MTIxNkwsNjEyMTdMLAorNjEyMThMLDYxMjE5TCw2MTIyMEwsNjEy MjFMLDYxMjIyTCw2MTIyM0wsNjEyMjRMLDYxMjI1TCw2MTIyNkwsNjEyMjdMLAorNjEyMjhMLDYx MjI5TCw2MTIzMEwsNjEyMzFMLDYxMjMyTCw2MTIzM0wsNjEyMzRMLDYxMjM1TCw2MTIzNkwsNjEy MzdMLAorNjEyMzhMLDYxMjM5TCw2MTI0MEwsNjEyNDFMLDYxMjQyTCw2MTI0M0wsNjEyNDRMLDYx MjQ1TCw2MTI0NkwsNjEyNDdMLAorNjEyNDhMLDYxMjQ5TCw2MTI1MEwsNjEyNTFMLDYxMjUyTCw2 MTI1M0wsNjEyNTRMLDYxMjU1TCw2MTI1NkwsNjEyNTdMLAorNjEyNThMLDYxMjU5TCw2MTI2MEws NjEyNjFMLDYxMjYyTCw2MTI2M0wsNjEyNjRMLDYxMjY1TCw2MTI2NkwsNjEyNjdMLAorNjEyNjhM LDYxMjY5TCw2MTI3MEwsNjEyNzFMLDYxMjcyTCw2MTI3M0wsNjEyNzRMLDYxMjc1TCw2MTI3Nkws NjEyNzdMLAorNjEyNzhMLDYxMjc5TCw2MTI4MEwsNjEyODFMLDYxMjgyTCw2MTI4M0wsNjEyODRM LDYxMjg1TCw2MTI4NkwsNjEyODdMLAorNjEyODhMLDYxMjg5TCw2MTI5MEwsNjEyOTFMLDYxMjky TCw2MTI5M0wsNjEyOTRMLDYxMjk1TCw2MTI5NkwsNjEyOTdMLAorNjEyOThMLDYxMjk5TCw2MTMw MEwsNjEzMDFMLDYxMzAyTCw2MTMwM0wsNjEzMDRMLDYxMzA1TCw2MTMwNkwsNjEzMDdMLAorNjEz MDhMLDYxMzA5TCw2MTMxMEwsNjEzMTFMLDYxMzEyTCw2MTMxM0wsNjEzMTRMLDYxMzE1TCw2MTMx NkwsNjEzMTdMLAorNjEzMThMLDYxMzE5TCw2MTMyMEwsNjEzMjFMLDYxMzIyTCw2MTMyM0wsNjEz MjRMLDYxMzI1TCw2MTMyNkwsNjEzMjdMLAorNjEzMjhMLDYxMzI5TCw2MTMzMEwsNjEzMzFMLDYx MzMyTCw2MTMzM0wsNjEzMzRMLDYxMzM1TCw2MTMzNkwsNjEzMzdMLAorNjEzMzhMLDYxMzM5TCw2 MTM0MEwsNjEzNDFMLDYxMzQyTCw2MTM0M0wsNjEzNDRMLDYxMzQ1TCw2MTM0NkwsNjEzNDdMLAor NjEzNDhMLDYxMzQ5TCw2MTM1MEwsNjEzNTFMLDYxMzUyTCw2MTM1M0wsNjEzNTRMLDYxMzU1TCw2 MTM1NkwsNjEzNTdMLAorNjEzNThMLDYxMzU5TCw2MTM2MEwsNjEzNjFMLDYxMzYyTCw2MTM2M0ws NjEzNjRMLDYxMzY1TCw2MTM2NkwsNjEzNjdMLAorNjEzNjhMLDYxMzY5TCw2MTM3MEwsNjEzNzFM LDYxMzcyTCw2MTM3M0wsNjEzNzRMLDYxMzc1TCw2MTM3NkwsNjEzNzdMLAorNjEzNzhMLDYxMzc5 TCw2MTM4MEwsNjEzODFMLDYxMzgyTCw2MTM4M0wsNjEzODRMLDYxMzg1TCw2MTM4NkwsNjEzODdM LAorNjEzODhMLDYxMzg5TCw2MTM5MEwsNjEzOTFMLDYxMzkyTCw2MTM5M0wsNjEzOTRMLDYxMzk1 TCw2MTM5NkwsNjEzOTdMLAorNjEzOThMLDYxMzk5TCw2MTQwMEwsNjE0MDFMLDYxNDAyTCw2MTQw M0wsNjE0MDRMLDYxNDA1TCw2MTQwNkwsNjE0MDdMLAorNjE0MDhMLDYxNDA5TCw2MTQxMEwsNjE0 MTFMLDYxNDEyTCw2MTQxM0wsNjE0MTRMLDYxNDE1TCw2MTQxNkwsNjE0MTdMLAorNjE0MThMLDYx NDE5TCw2MTQyMEwsNjE0MjFMLDYxNDIyTCw2MTQyM0wsNjE0MjRMLDYxNDI1TCw2MTQyNkwsNjE0 MjdMLAorNjE0MjhMLDYxNDI5TCw2MTQzMEwsNjE0MzFMLDYxNDMyTCw2MTQzM0wsNjE0MzRMLDYx NDM1TCw2MTQzNkwsNjE0MzdMLAorNjE0MzhMLDYxNDM5TCw2MTQ0MEwsNjE0NDFMLDYxNDQyTCw2 MTQ0M0wsNjE0NDRMLDYxNDQ1TCw2MTQ0NkwsNjE0NDdMLAorNjE0NDhMLDYxNDQ5TCw2MTQ1MEws NjE0NTFMLDYxNDUyTCw2MTQ1M0wsNjE0NTRMLDYxNDU1TCw2MTQ1NkwsNjE0NTdMLAorNjE0NThM LDYxNDU5TCw2MTQ2MEwsNjE0NjFMLDYxNDYyTCw2MTQ2M0wsNjE0NjRMLDYxNDY1TCw2MTQ2Nkws NjE0NjdMLAorNjE0NjhMLDYxNDY5TCw2MTQ3MEwsNjE0NzFMLDYxNDcyTCw2MTQ3M0wsNjE0NzRM LDYxNDc1TCw2MTQ3NkwsNjE0NzdMLAorNjE0NzhMLDYxNDc5TCw2MTQ4MEwsNjE0ODFMLDYxNDgy TCw2MTQ4M0wsNjE0ODRMLDYxNDg1TCw2MTQ4NkwsNjE0ODdMLAorNjE0ODhMLDYxNDg5TCw2MTQ5 MEwsNjE0OTFMLDYxNDkyTCw2MTQ5M0wsNjE0OTRMLDYxNDk1TCw2MTQ5NkwsNjE0OTdMLAorNjE0 OThMLDYxNDk5TCw2MTUwMEwsNjE1MDFMLDYxNTAyTCw2MTUwM0wsNjE1MDRMLDYxNTA1TCw2MTUw NkwsNjE1MDdMLAorNjE1MDhMLDYxNTA5TCw2MTUxMEwsNjE1MTFMLDYxNTEyTCw2MTUxM0wsNjE1 MTRMLDYxNTE1TCw2MTUxNkwsNjE1MTdMLAorNjE1MThMLDYxNTE5TCw2MTUyMEwsNjE1MjFMLDYx NTIyTCw2MTUyM0wsNjE1MjRMLDYxNTI1TCw2MTUyNkwsNjE1MjdMLAorNjE1MjhMLDYxNTI5TCw2 MTUzMEwsNjE1MzFMLDYxNTMyTCw2MTUzM0wsNjE1MzRMLDYxNTM1TCw2MTUzNkwsNjE1MzdMLAor NjE1MzhMLDYxNTM5TCw2MTU0MEwsNjE1NDFMLDYxNTQyTCw2MTU0M0wsNjE1NDRMLDYxNTQ1TCw2 MTU0NkwsNjE1NDdMLAorNjE1NDhMLDYxNTQ5TCw2MTU1MEwsNjE1NTFMLDYxNTUyTCw2MTU1M0ws NjE1NTRMLDYxNTU1TCw2MTU1NkwsNjE1NTdMLAorNjE1NThMLDYxNTU5TCw2MTU2MEwsNjE1NjFM LDYxNTYyTCw2MTU2M0wsNjE1NjRMLDYxNTY1TCw2MTU2NkwsNjE1NjdMLAorNjE1NjhMLDYxNTY5 TCw2MTU3MEwsNjE1NzFMLDYxNTcyTCw2MTU3M0wsNjE1NzRMLDYxNTc1TCw2MTU3NkwsNjE1NzdM LAorNjE1NzhMLDYxNTc5TCw2MTU4MEwsNjE1ODFMLDYxNTgyTCw2MTU4M0wsNjE1ODRMLDYxNTg1 TCw2MTU4NkwsNjE1ODdMLAorNjE1ODhMLDYxNTg5TCw2MTU5MEwsNjE1OTFMLDYxNTkyTCw2MTU5 M0wsNjE1OTRMLDYxNTk1TCw2MTU5NkwsNjE1OTdMLAorNjE1OThMLDYxNTk5TCw2MTYwMEwsNjE2 MDFMLDYxNjAyTCw2MTYwM0wsNjE2MDRMLDYxNjA1TCw2MTYwNkwsNjE2MDdMLAorNjE2MDhMLDYx NjA5TCw2MTYxMEwsNjE2MTFMLDYxNjEyTCw2MTYxM0wsNjE2MTRMLDYxNjE1TCw2MTYxNkwsNjE2 MTdMLAorNjE2MThMLDYxNjE5TCw2MTYyMEwsNjE2MjFMLDYxNjIyTCw2MTYyM0wsNjE2MjRMLDYx NjI1TCw2MTYyNkwsNjE2MjdMLAorNjE2MjhMLDYxNjI5TCw2MTYzMEwsNjE2MzFMLDYxNjMyTCw2 MTYzM0wsNjE2MzRMLDYxNjM1TCw2MTYzNkwsNjE2MzdMLAorNjE2MzhMLDYxNjM5TCw2MTY0MEws NjE2NDFMLDYxNjQyTCw2MTY0M0wsNjE2NDRMLDYxNjQ1TCw2MTY0NkwsNjE2NDdMLAorNjE2NDhM LDYxNjQ5TCw2MTY1MEwsNjE2NTFMLDYxNjUyTCw2MTY1M0wsNjE2NTRMLDYxNjU1TCw2MTY1Nkws NjE2NTdMLAorNjE2NThMLDYxNjU5TCw2MTY2MEwsNjE2NjFMLDYxNjYyTCw2MTY2M0wsNjE2NjRM LDYxNjY1TCw2MTY2NkwsNjE2NjdMLAorNjE2NjhMLDYxNjY5TCw2MTY3MEwsNjE2NzFMLDYxNjcy TCw2MTY3M0wsNjE2NzRMLDYxNjc1TCw2MTY3NkwsNjE2NzdMLAorNjE2NzhMLDYxNjc5TCw2MTY4 MEwsNjE2ODFMLDYxNjgyTCw2MTY4M0wsNjE2ODRMLDYxNjg1TCw2MTY4NkwsNjE2ODdMLAorNjE2 ODhMLDYxNjg5TCw2MTY5MEwsNjE2OTFMLDYxNjkyTCw2MTY5M0wsNjE2OTRMLDYxNjk1TCw2MTY5 NkwsNjE2OTdMLAorNjE2OThMLDYxNjk5TCw2MTcwMEwsNjE3MDFMLDYxNzAyTCw2MTcwM0wsNjE3 MDRMLDYxNzA1TCw2MTcwNkwsNjE3MDdMLAorNjE3MDhMLDYxNzA5TCw2MTcxMEwsNjE3MTFMLDYx NzEyTCw2MTcxM0wsNjE3MTRMLDYxNzE1TCw2MTcxNkwsNjE3MTdMLAorNjE3MThMLDYxNzE5TCw2 MTcyMEwsNjE3MjFMLDYxNzIyTCw2MTcyM0wsNjE3MjRMLDYxNzI1TCw2MTcyNkwsNjE3MjdMLAor NjE3MjhMLDYxNzI5TCw2MTczMEwsNjE3MzFMLDYxNzMyTCw2MTczM0wsNjE3MzRMLDYxNzM1TCw2 MTczNkwsNjE3MzdMLAorNjE3MzhMLDYxNzM5TCw2MTc0MEwsNjE3NDFMLDYxNzQyTCw2MTc0M0ws NjE3NDRMLDYxNzQ1TCw2MTc0NkwsNjE3NDdMLAorNjE3NDhMLDYxNzQ5TCw2MTc1MEwsNjE3NTFM LDYxNzUyTCw2MTc1M0wsNjE3NTRMLDYxNzU1TCw2MTc1NkwsNjE3NTdMLAorNjE3NThMLDYxNzU5 TCw2MTc2MEwsNjE3NjFMLDYxNzYyTCw2MTc2M0wsNjE3NjRMLDYxNzY1TCw2MTc2NkwsNjE3NjdM LAorNjE3NjhMLDYxNzY5TCw2MTc3MEwsNjE3NzFMLDYxNzcyTCw2MTc3M0wsNjE3NzRMLDYxNzc1 TCw2MTc3NkwsNjE3NzdMLAorNjE3NzhMLDYxNzc5TCw2MTc4MEwsNjE3ODFMLDYxNzgyTCw2MTc4 M0wsNjE3ODRMLDYxNzg1TCw2MTc4NkwsNjE3ODdMLAorNjE3ODhMLDYxNzg5TCw2MTc5MEwsNjE3 OTFMLDYxNzkyTCw2MTc5M0wsNjE3OTRMLDYxNzk1TCw2MTc5NkwsNjE3OTdMLAorNjE3OThMLDYx Nzk5TCw2MTgwMEwsNjE4MDFMLDYxODAyTCw2MTgwM0wsNjE4MDRMLDYxODA1TCw2MTgwNkwsNjE4 MDdMLAorNjE4MDhMLDYxODA5TCw2MTgxMEwsNjE4MTFMLDYxODEyTCw2MTgxM0wsNjE4MTRMLDYx ODE1TCw2MTgxNkwsNjE4MTdMLAorNjE4MThMLDYxODE5TCw2MTgyMEwsNjE4MjFMLDYxODIyTCw2 MTgyM0wsNjE4MjRMLDYxODI1TCw2MTgyNkwsNjE4MjdMLAorNjE4MjhMLDYxODI5TCw2MTgzMEws NjE4MzFMLDYxODMyTCw2MTgzM0wsNjE4MzRMLDYxODM1TCw2MTgzNkwsNjE4MzdMLAorNjE4MzhM LDYxODM5TCw2MTg0MEwsNjE4NDFMLDYxODQyTCw2MTg0M0wsNjE4NDRMLDYxODQ1TCw2MTg0Nkws NjE4NDdMLAorNjE4NDhMLDYxODQ5TCw2MTg1MEwsNjE4NTFMLDYxODUyTCw2MTg1M0wsNjE4NTRM LDYxODU1TCw2MTg1NkwsNjE4NTdMLAorNjE4NThMLDYxODU5TCw2MTg2MEwsNjE4NjFMLDYxODYy TCw2MTg2M0wsNjE4NjRMLDYxODY1TCw2MTg2NkwsNjE4NjdMLAorNjE4NjhMLDYxODY5TCw2MTg3 MEwsNjE4NzFMLDYxODcyTCw2MTg3M0wsNjE4NzRMLDYxODc1TCw2MTg3NkwsNjE4NzdMLAorNjE4 NzhMLDYxODc5TCw2MTg4MEwsNjE4ODFMLDYxODgyTCw2MTg4M0wsNjE4ODRMLDYxODg1TCw2MTg4 NkwsNjE4ODdMLAorNjE4ODhMLDYxODg5TCw2MTg5MEwsNjE4OTFMLDYxODkyTCw2MTg5M0wsNjE4 OTRMLDYxODk1TCw2MTg5NkwsNjE4OTdMLAorNjE4OThMLDYxODk5TCw2MTkwMEwsNjE5MDFMLDYx OTAyTCw2MTkwM0wsNjE5MDRMLDYxOTA1TCw2MTkwNkwsNjE5MDdMLAorNjE5MDhMLDYxOTA5TCw2 MTkxMEwsNjE5MTFMLDYxOTEyTCw2MTkxM0wsNjE5MTRMLDYxOTE1TCw2MTkxNkwsNjE5MTdMLAor NjE5MThMLDYxOTE5TCw2MTkyMEwsNjE5MjFMLDYxOTIyTCw2MTkyM0wsNjE5MjRMLDYxOTI1TCw2 MTkyNkwsNjE5MjdMLAorNjE5MjhMLDYxOTI5TCw2MTkzMEwsNjE5MzFMLDYxOTMyTCw2MTkzM0ws NjE5MzRMLDYxOTM1TCw2MTkzNkwsNjE5MzdMLAorNjE5MzhMLDYxOTM5TCw2MTk0MEwsNjE5NDFM LDYxOTQyTCw2MTk0M0wsNjE5NDRMLDYxOTQ1TCw2MTk0NkwsNjE5NDdMLAorNjE5NDhMLDYxOTQ5 TCw2MTk1MEwsNjE5NTFMLDYxOTUyTCw2MTk1M0wsNjE5NTRMLDYxOTU1TCw2MTk1NkwsNjE5NTdM LAorNjE5NThMLDYxOTU5TCw2MTk2MEwsNjE5NjFMLDYxOTYyTCw2MTk2M0wsNjE5NjRMLDYxOTY1 TCw2MTk2NkwsNjE5NjdMLAorNjE5NjhMLDYxOTY5TCw2MTk3MEwsNjE5NzFMLDYxOTcyTCw2MTk3 M0wsNjE5NzRMLDYxOTc1TCw2MTk3NkwsNjE5NzdMLAorNjE5NzhMLDYxOTc5TCw2MTk4MEwsNjE5 ODFMLDYxOTgyTCw2MTk4M0wsNjE5ODRMLDYxOTg1TCw2MTk4NkwsNjE5ODdMLAorNjE5ODhMLDYx OTg5TCw2MTk5MEwsNjE5OTFMLDYxOTkyTCw2MTk5M0wsNjE5OTRMLDYxOTk1TCw2MTk5NkwsNjE5 OTdMLAorNjE5OThMLDYxOTk5TCw2MjAwMEwsNjIwMDFMLDYyMDAyTCw2MjAwM0wsNjIwMDRMLDYy MDA1TCw2MjAwNkwsNjIwMDdMLAorNjIwMDhMLDYyMDA5TCw2MjAxMEwsNjIwMTFMLDYyMDEyTCw2 MjAxM0wsNjIwMTRMLDYyMDE1TCw2MjAxNkwsNjIwMTdMLAorNjIwMThMLDYyMDE5TCw2MjAyMEws NjIwMjFMLDYyMDIyTCw2MjAyM0wsNjIwMjRMLDYyMDI1TCw2MjAyNkwsNjIwMjdMLAorNjIwMjhM LDYyMDI5TCw2MjAzMEwsNjIwMzFMLDYyMDMyTCw2MjAzM0wsNjIwMzRMLDYyMDM1TCw2MjAzNkws NjIwMzdMLAorNjIwMzhMLDYyMDM5TCw2MjA0MEwsNjIwNDFMLDYyMDQyTCw2MjA0M0wsNjIwNDRM LDYyMDQ1TCw2MjA0NkwsNjIwNDdMLAorNjIwNDhMLDYyMDQ5TCw2MjA1MEwsNjIwNTFMLDYyMDUy TCw2MjA1M0wsNjIwNTRMLDYyMDU1TCw2MjA1NkwsNjIwNTdMLAorNjIwNThMLDYyMDU5TCw2MjA2 MEwsNjIwNjFMLDYyMDYyTCw2MjA2M0wsNjIwNjRMLDYyMDY1TCw2MjA2NkwsNjIwNjdMLAorNjIw NjhMLDYyMDY5TCw2MjA3MEwsNjIwNzFMLDYyMDcyTCw2MjA3M0wsNjIwNzRMLDYyMDc1TCw2MjA3 NkwsNjIwNzdMLAorNjIwNzhMLDYyMDc5TCw2MjA4MEwsNjIwODFMLDYyMDgyTCw2MjA4M0wsNjIw ODRMLDYyMDg1TCw2MjA4NkwsNjIwODdMLAorNjIwODhMLDYyMDg5TCw2MjA5MEwsNjIwOTFMLDYy MDkyTCw2MjA5M0wsNjIwOTRMLDYyMDk1TCw2MjA5NkwsNjIwOTdMLAorNjIwOThMLDYyMDk5TCw2 MjEwMEwsNjIxMDFMLDYyMTAyTCw2MjEwM0wsNjIxMDRMLDYyMTA1TCw2MjEwNkwsNjIxMDdMLAor NjIxMDhMLDYyMTA5TCw2MjExMEwsNjIxMTFMLDYyMTEyTCw2MjExM0wsNjIxMTRMLDYyMTE1TCw2 MjExNkwsNjIxMTdMLAorNjIxMThMLDYyMTE5TCw2MjEyMEwsNjIxMjFMLDYyMTIyTCw2MjEyM0ws NjIxMjRMLDYyMTI1TCw2MjEyNkwsNjIxMjdMLAorNjIxMjhMLDYyMTI5TCw2MjEzMEwsNjIxMzFM LDYyMTMyTCw2MjEzM0wsNjIxMzRMLDYyMTM1TCw2MjEzNkwsNjIxMzdMLAorNjIxMzhMLDYyMTM5 TCw2MjE0MEwsNjIxNDFMLDYyMTQyTCw2MjE0M0wsNjIxNDRMLDYyMTQ1TCw2MjE0NkwsNjIxNDdM LAorNjIxNDhMLDYyMTQ5TCw2MjE1MEwsNjIxNTFMLDYyMTUyTCw2MjE1M0wsNjIxNTRMLDYyMTU1 TCw2MjE1NkwsNjIxNTdMLAorNjIxNThMLDYyMTU5TCw2MjE2MEwsNjIxNjFMLDYyMTYyTCw2MjE2 M0wsNjIxNjRMLDYyMTY1TCw2MjE2NkwsNjIxNjdMLAorNjIxNjhMLDYyMTY5TCw2MjE3MEwsNjIx NzFMLDYyMTcyTCw2MjE3M0wsNjIxNzRMLDYyMTc1TCw2MjE3NkwsNjIxNzdMLAorNjIxNzhMLDYy MTc5TCw2MjE4MEwsNjIxODFMLDYyMTgyTCw2MjE4M0wsNjIxODRMLDYyMTg1TCw2MjE4NkwsNjIx ODdMLAorNjIxODhMLDYyMTg5TCw2MjE5MEwsNjIxOTFMLDYyMTkyTCw2MjE5M0wsNjIxOTRMLDYy MTk1TCw2MjE5NkwsNjIxOTdMLAorNjIxOThMLDYyMTk5TCw2MjIwMEwsNjIyMDFMLDYyMjAyTCw2 MjIwM0wsNjIyMDRMLDYyMjA1TCw2MjIwNkwsNjIyMDdMLAorNjIyMDhMLDYyMjA5TCw2MjIxMEws NjIyMTFMLDYyMjEyTCw2MjIxM0wsNjIyMTRMLDYyMjE1TCw2MjIxNkwsNjIyMTdMLAorNjIyMThM LDYyMjE5TCw2MjIyMEwsNjIyMjFMLDYyMjIyTCw2MjIyM0wsNjIyMjRMLDYyMjI1TCw2MjIyNkws NjIyMjdMLAorNjIyMjhMLDYyMjI5TCw2MjIzMEwsNjIyMzFMLDYyMjMyTCw2MjIzM0wsNjIyMzRM LDYyMjM1TCw2MjIzNkwsNjIyMzdMLAorNjIyMzhMLDYyMjM5TCw2MjI0MEwsNjIyNDFMLDYyMjQy TCw2MjI0M0wsNjIyNDRMLDYyMjQ1TCw2MjI0NkwsNjIyNDdMLAorNjIyNDhMLDYyMjQ5TCw2MjI1 MEwsNjIyNTFMLDYyMjUyTCw2MjI1M0wsNjIyNTRMLDYyMjU1TCw2MjI1NkwsNjIyNTdMLAorNjIy NThMLDYyMjU5TCw2MjI2MEwsNjIyNjFMLDYyMjYyTCw2MjI2M0wsNjIyNjRMLDYyMjY1TCw2MjI2 NkwsNjIyNjdMLAorNjIyNjhMLDYyMjY5TCw2MjI3MEwsNjIyNzFMLDYyMjcyTCw2MjI3M0wsNjIy NzRMLDYyMjc1TCw2MjI3NkwsNjIyNzdMLAorNjIyNzhMLDYyMjc5TCw2MjI4MEwsNjIyODFMLDYy MjgyTCw2MjI4M0wsNjIyODRMLDYyMjg1TCw2MjI4NkwsNjIyODdMLAorNjIyODhMLDYyMjg5TCw2 MjI5MEwsNjIyOTFMLDYyMjkyTCw2MjI5M0wsNjIyOTRMLDYyMjk1TCw2MjI5NkwsNjIyOTdMLAor NjIyOThMLDYyMjk5TCw2MjMwMEwsNjIzMDFMLDYyMzAyTCw2MjMwM0wsNjIzMDRMLDYyMzA1TCw2 MjMwNkwsNjIzMDdMLAorNjIzMDhMLDYyMzA5TCw2MjMxMEwsNjIzMTFMLDYyMzEyTCw2MjMxM0ws NjIzMTRMLDYyMzE1TCw2MjMxNkwsNjIzMTdMLAorNjIzMThMLDYyMzE5TCw2MjMyMEwsNjIzMjFM LDYyMzIyTCw2MjMyM0wsNjIzMjRMLDYyMzI1TCw2MjMyNkwsNjIzMjdMLAorNjIzMjhMLDYyMzI5 TCw2MjMzMEwsNjIzMzFMLDYyMzMyTCw2MjMzM0wsNjIzMzRMLDYyMzM1TCw2MjMzNkwsNjIzMzdM LAorNjIzMzhMLDYyMzM5TCw2MjM0MEwsNjIzNDFMLDYyMzQyTCw2MjM0M0wsNjIzNDRMLDYyMzQ1 TCw2MjM0NkwsNjIzNDdMLAorNjIzNDhMLDYyMzQ5TCw2MjM1MEwsNjIzNTFMLDYyMzUyTCw2MjM1 M0wsNjIzNTRMLDYyMzU1TCw2MjM1NkwsNjIzNTdMLAorNjIzNThMLDYyMzU5TCw2MjM2MEwsNjIz NjFMLDYyMzYyTCw2MjM2M0wsNjIzNjRMLDYyMzY1TCw2MjM2NkwsNjIzNjdMLAorNjIzNjhMLDYy MzY5TCw2MjM3MEwsNjIzNzFMLDYyMzcyTCw2MjM3M0wsNjIzNzRMLDYyMzc1TCw2MjM3NkwsNjIz NzdMLAorNjIzNzhMLDYyMzc5TCw2MjM4MEwsNjIzODFMLDYyMzgyTCw2MjM4M0wsNjIzODRMLDYy Mzg1TCw2MjM4NkwsNjIzODdMLAorNjIzODhMLDYyMzg5TCw2MjM5MEwsNjIzOTFMLDYyMzkyTCw2 MjM5M0wsNjIzOTRMLDYyMzk1TCw2MjM5NkwsNjIzOTdMLAorNjIzOThMLDYyMzk5TCw2MjQwMEws NjI0MDFMLDYyNDAyTCw2MjQwM0wsNjI0MDRMLDYyNDA1TCw2MjQwNkwsNjI0MDdMLAorNjI0MDhM LDYyNDA5TCw2MjQxMEwsNjI0MTFMLDYyNDEyTCw2MjQxM0wsNjI0MTRMLDYyNDE1TCw2MjQxNkws NjI0MTdMLAorNjI0MThMLDYyNDE5TCw2MjQyMEwsNjI0MjFMLDYyNDIyTCw2MjQyM0wsNjI0MjRM LDYyNDI1TCw2MjQyNkwsNjI0MjdMLAorNjI0MjhMLDYyNDI5TCw2MjQzMEwsNjI0MzFMLDYyNDMy TCw2MjQzM0wsNjI0MzRMLDYyNDM1TCw2MjQzNkwsNjI0MzdMLAorNjI0MzhMLDYyNDM5TCw2MjQ0 MEwsNjI0NDFMLDYyNDQyTCw2MjQ0M0wsNjI0NDRMLDYyNDQ1TCw2MjQ0NkwsNjI0NDdMLAorNjI0 NDhMLDYyNDQ5TCw2MjQ1MEwsNjI0NTFMLDYyNDUyTCw2MjQ1M0wsNjI0NTRMLDYyNDU1TCw2MjQ1 NkwsNjI0NTdMLAorNjI0NThMLDYyNDU5TCw2MjQ2MEwsNjI0NjFMLDYyNDYyTCw2MjQ2M0wsNjI0 NjRMLDYyNDY1TCw2MjQ2NkwsNjI0NjdMLAorNjI0NjhMLDYyNDY5TCw2MjQ3MEwsNjI0NzFMLDYy NDcyTCw2MjQ3M0wsNjI0NzRMLDYyNDc1TCw2MjQ3NkwsNjI0NzdMLAorNjI0NzhMLDYyNDc5TCw2 MjQ4MEwsNjI0ODFMLDYyNDgyTCw2MjQ4M0wsNjI0ODRMLDYyNDg1TCw2MjQ4NkwsNjI0ODdMLAor NjI0ODhMLDYyNDg5TCw2MjQ5MEwsNjI0OTFMLDYyNDkyTCw2MjQ5M0wsNjI0OTRMLDYyNDk1TCw2 MjQ5NkwsNjI0OTdMLAorNjI0OThMLDYyNDk5TCw2MjUwMEwsNjI1MDFMLDYyNTAyTCw2MjUwM0ws NjI1MDRMLDYyNTA1TCw2MjUwNkwsNjI1MDdMLAorNjI1MDhMLDYyNTA5TCw2MjUxMEwsNjI1MTFM LDYyNTEyTCw2MjUxM0wsNjI1MTRMLDYyNTE1TCw2MjUxNkwsNjI1MTdMLAorNjI1MThMLDYyNTE5 TCw2MjUyMEwsNjI1MjFMLDYyNTIyTCw2MjUyM0wsNjI1MjRMLDYyNTI1TCw2MjUyNkwsNjI1MjdM LAorNjI1MjhMLDYyNTI5TCw2MjUzMEwsNjI1MzFMLDYyNTMyTCw2MjUzM0wsNjI1MzRMLDYyNTM1 TCw2MjUzNkwsNjI1MzdMLAorNjI1MzhMLDYyNTM5TCw2MjU0MEwsNjI1NDFMLDYyNTQyTCw2MjU0 M0wsNjI1NDRMLDYyNTQ1TCw2MjU0NkwsNjI1NDdMLAorNjI1NDhMLDYyNTQ5TCw2MjU1MEwsNjI1 NTFMLDYyNTUyTCw2MjU1M0wsNjI1NTRMLDYyNTU1TCw2MjU1NkwsNjI1NTdMLAorNjI1NThMLDYy NTU5TCw2MjU2MEwsNjI1NjFMLDYyNTYyTCw2MjU2M0wsNjI1NjRMLDYyNTY1TCw2MjU2NkwsNjI1 NjdMLAorNjI1NjhMLDYyNTY5TCw2MjU3MEwsNjI1NzFMLDYyNTcyTCw2MjU3M0wsNjI1NzRMLDYy NTc1TCw2MjU3NkwsNjI1NzdMLAorNjI1NzhMLDYyNTc5TCw2MjU4MEwsNjI1ODFMLDYyNTgyTCw2 MjU4M0wsNjI1ODRMLDYyNTg1TCw2MjU4NkwsNjI1ODdMLAorNjI1ODhMLDYyNTg5TCw2MjU5MEws NjI1OTFMLDYyNTkyTCw2MjU5M0wsNjI1OTRMLDYyNTk1TCw2MjU5NkwsNjI1OTdMLAorNjI1OThM LDYyNTk5TCw2MjYwMEwsNjI2MDFMLDYyNjAyTCw2MjYwM0wsNjI2MDRMLDYyNjA1TCw2MjYwNkws NjI2MDdMLAorNjI2MDhMLDYyNjA5TCw2MjYxMEwsNjI2MTFMLDYyNjEyTCw2MjYxM0wsNjI2MTRM LDYyNjE1TCw2MjYxNkwsNjI2MTdMLAorNjI2MThMLDYyNjE5TCw2MjYyMEwsNjI2MjFMLDYyNjIy TCw2MjYyM0wsNjI2MjRMLDYyNjI1TCw2MjYyNkwsNjI2MjdMLAorNjI2MjhMLDYyNjI5TCw2MjYz MEwsNjI2MzFMLDYyNjMyTCw2MjYzM0wsNjI2MzRMLDYyNjM1TCw2MjYzNkwsNjI2MzdMLAorNjI2 MzhMLDYyNjM5TCw2MjY0MEwsNjI2NDFMLDYyNjQyTCw2MjY0M0wsNjI2NDRMLDYyNjQ1TCw2MjY0 NkwsNjI2NDdMLAorNjI2NDhMLDYyNjQ5TCw2MjY1MEwsNjI2NTFMLDYyNjUyTCw2MjY1M0wsNjI2 NTRMLDYyNjU1TCw2MjY1NkwsNjI2NTdMLAorNjI2NThMLDYyNjU5TCw2MjY2MEwsNjI2NjFMLDYy NjYyTCw2MjY2M0wsNjI2NjRMLDYyNjY1TCw2MjY2NkwsNjI2NjdMLAorNjI2NjhMLDYyNjY5TCw2 MjY3MEwsNjI2NzFMLDYyNjcyTCw2MjY3M0wsNjI2NzRMLDYyNjc1TCw2MjY3NkwsNjI2NzdMLAor NjI2NzhMLDYyNjc5TCw2MjY4MEwsNjI2ODFMLDYyNjgyTCw2MjY4M0wsNjI2ODRMLDYyNjg1TCw2 MjY4NkwsNjI2ODdMLAorNjI2ODhMLDYyNjg5TCw2MjY5MEwsNjI2OTFMLDYyNjkyTCw2MjY5M0ws NjI2OTRMLDYyNjk1TCw2MjY5NkwsNjI2OTdMLAorNjI2OThMLDYyNjk5TCw2MjcwMEwsNjI3MDFM LDYyNzAyTCw2MjcwM0wsNjI3MDRMLDYyNzA1TCw2MjcwNkwsNjI3MDdMLAorNjI3MDhMLDYyNzA5 TCw2MjcxMEwsNjI3MTFMLDYyNzEyTCw2MjcxM0wsNjI3MTRMLDYyNzE1TCw2MjcxNkwsNjI3MTdM LAorNjI3MThMLDYyNzE5TCw2MjcyMEwsNjI3MjFMLDYyNzIyTCw2MjcyM0wsNjI3MjRMLDYyNzI1 TCw2MjcyNkwsNjI3MjdMLAorNjI3MjhMLDYyNzI5TCw2MjczMEwsNjI3MzFMLDYyNzMyTCw2Mjcz M0wsNjI3MzRMLDYyNzM1TCw2MjczNkwsNjI3MzdMLAorNjI3MzhMLDYyNzM5TCw2Mjc0MEwsNjI3 NDFMLDYyNzQyTCw2Mjc0M0wsNjI3NDRMLDYyNzQ1TCw2Mjc0NkwsNjI3NDdMLAorNjI3NDhMLDYy NzQ5TCw2Mjc1MEwsNjI3NTFMLDYyNzUyTCw2Mjc1M0wsNjI3NTRMLDYyNzU1TCw2Mjc1NkwsNjI3 NTdMLAorNjI3NThMLDYyNzU5TCw2Mjc2MEwsNjI3NjFMLDYyNzYyTCw2Mjc2M0wsNjI3NjRMLDYy NzY1TCw2Mjc2NkwsNjI3NjdMLAorNjI3NjhMLDYyNzY5TCw2Mjc3MEwsNjI3NzFMLDYyNzcyTCw2 Mjc3M0wsNjI3NzRMLDYyNzc1TCw2Mjc3NkwsNjI3NzdMLAorNjI3NzhMLDYyNzc5TCw2Mjc4MEws NjI3ODFMLDYyNzgyTCw2Mjc4M0wsNjI3ODRMLDYyNzg1TCw2Mjc4NkwsNjI3ODdMLAorNjI3ODhM LDYyNzg5TCw2Mjc5MEwsNjI3OTFMLDYyNzkyTCw2Mjc5M0wsNjI3OTRMLDYyNzk1TCw2Mjc5Nkws NjI3OTdMLAorNjI3OThMLDYyNzk5TCw2MjgwMEwsNjI4MDFMLDYyODAyTCw2MjgwM0wsNjI4MDRM LDYyODA1TCw2MjgwNkwsNjI4MDdMLAorNjI4MDhMLDYyODA5TCw2MjgxMEwsNjI4MTFMLDYyODEy TCw2MjgxM0wsNjI4MTRMLDYyODE1TCw2MjgxNkwsNjI4MTdMLAorNjI4MThMLDYyODE5TCw2Mjgy MEwsNjI4MjFMLDYyODIyTCw2MjgyM0wsNjI4MjRMLDYyODI1TCw2MjgyNkwsNjI4MjdMLAorNjI4 MjhMLDYyODI5TCw2MjgzMEwsNjI4MzFMLDYyODMyTCw2MjgzM0wsNjI4MzRMLDYyODM1TCw2Mjgz NkwsNjI4MzdMLAorNjI4MzhMLDYyODM5TCw2Mjg0MEwsNjI4NDFMLDYyODQyTCw2Mjg0M0wsNjI4 NDRMLDYyODQ1TCw2Mjg0NkwsNjI4NDdMLAorNjI4NDhMLDYyODQ5TCw2Mjg1MEwsNjI4NTFMLDYy ODUyTCw2Mjg1M0wsNjI4NTRMLDYyODU1TCw2Mjg1NkwsNjI4NTdMLAorNjI4NThMLDYyODU5TCw2 Mjg2MEwsNjI4NjFMLDYyODYyTCw2Mjg2M0wsNjI4NjRMLDYyODY1TCw2Mjg2NkwsNjI4NjdMLAor NjI4NjhMLDYyODY5TCw2Mjg3MEwsNjI4NzFMLDYyODcyTCw2Mjg3M0wsNjI4NzRMLDYyODc1TCw2 Mjg3NkwsNjI4NzdMLAorNjI4NzhMLDYyODc5TCw2Mjg4MEwsNjI4ODFMLDYyODgyTCw2Mjg4M0ws NjI4ODRMLDYyODg1TCw2Mjg4NkwsNjI4ODdMLAorNjI4ODhMLDYyODg5TCw2Mjg5MEwsNjI4OTFM LDYyODkyTCw2Mjg5M0wsNjI4OTRMLDYyODk1TCw2Mjg5NkwsNjI4OTdMLAorNjI4OThMLDYyODk5 TCw2MjkwMEwsNjI5MDFMLDYyOTAyTCw2MjkwM0wsNjI5MDRMLDYyOTA1TCw2MjkwNkwsNjI5MDdM LAorNjI5MDhMLDYyOTA5TCw2MjkxMEwsNjI5MTFMLDYyOTEyTCw2MjkxM0wsNjI5MTRMLDYyOTE1 TCw2MjkxNkwsNjI5MTdMLAorNjI5MThMLDYyOTE5TCw2MjkyMEwsNjI5MjFMLDYyOTIyTCw2Mjky M0wsNjI5MjRMLDYyOTI1TCw2MjkyNkwsNjI5MjdMLAorNjI5MjhMLDYyOTI5TCw2MjkzMEwsNjI5 MzFMLDYyOTMyTCw2MjkzM0wsNjI5MzRMLDYyOTM1TCw2MjkzNkwsNjI5MzdMLAorNjI5MzhMLDYy OTM5TCw2Mjk0MEwsNjI5NDFMLDYyOTQyTCw2Mjk0M0wsNjI5NDRMLDYyOTQ1TCw2Mjk0NkwsNjI5 NDdMLAorNjI5NDhMLDYyOTQ5TCw2Mjk1MEwsNjI5NTFMLDYyOTUyTCw2Mjk1M0wsNjI5NTRMLDYy OTU1TCw2Mjk1NkwsNjI5NTdMLAorNjI5NThMLDYyOTU5TCw2Mjk2MEwsNjI5NjFMLDYyOTYyTCw2 Mjk2M0wsNjI5NjRMLDYyOTY1TCw2Mjk2NkwsNjI5NjdMLAorNjI5NjhMLDYyOTY5TCw2Mjk3MEws NjI5NzFMLDYyOTcyTCw2Mjk3M0wsNjI5NzRMLDYyOTc1TCw2Mjk3NkwsNjI5NzdMLAorNjI5NzhM LDYyOTc5TCw2Mjk4MEwsNjI5ODFMLDYyOTgyTCw2Mjk4M0wsNjI5ODRMLDYyOTg1TCw2Mjk4Nkws NjI5ODdMLAorNjI5ODhMLDYyOTg5TCw2Mjk5MEwsNjI5OTFMLDYyOTkyTCw2Mjk5M0wsNjI5OTRM LDYyOTk1TCw2Mjk5NkwsNjI5OTdMLAorNjI5OThMLDYyOTk5TCw2MzAwMEwsNjMwMDFMLDYzMDAy TCw2MzAwM0wsNjMwMDRMLDYzMDA1TCw2MzAwNkwsNjMwMDdMLAorNjMwMDhMLDYzMDA5TCw2MzAx MEwsNjMwMTFMLDYzMDEyTCw2MzAxM0wsNjMwMTRMLDYzMDE1TCw2MzAxNkwsNjMwMTdMLAorNjMw MThMLDYzMDE5TCw2MzAyMEwsNjMwMjFMLDYzMDIyTCw2MzAyM0wsNjMwMjRMLDYzMDI1TCw2MzAy NkwsNjMwMjdMLAorNjMwMjhMLDYzMDI5TCw2MzAzMEwsNjMwMzFMLDYzMDMyTCw2MzAzM0wsNjMw MzRMLDYzMDM1TCw2MzAzNkwsNjMwMzdMLAorNjMwMzhMLDYzMDM5TCw2MzA0MEwsNjMwNDFMLDYz MDQyTCw2MzA0M0wsNjMwNDRMLDYzMDQ1TCw2MzA0NkwsNjMwNDdMLAorNjMwNDhMLDYzMDQ5TCw2 MzA1MEwsNjMwNTFMLDYzMDUyTCw2MzA1M0wsNjMwNTRMLDYzMDU1TCw2MzA1NkwsNjMwNTdMLAor NjMwNThMLDYzMDU5TCw2MzA2MEwsNjMwNjFMLDYzMDYyTCw2MzA2M0wsNjMwNjRMLDYzMDY1TCw2 MzA2NkwsNjMwNjdMLAorNjMwNjhMLDYzMDY5TCw2MzA3MEwsNjMwNzFMLDYzMDcyTCw2MzA3M0ws NjMwNzRMLDYzMDc1TCw2MzA3NkwsNjMwNzdMLAorNjMwNzhMLDYzMDc5TCw2MzA4MEwsNjMwODFM LDYzMDgyTCw2MzA4M0wsNjMwODRMLDYzMDg1TCw2MzA4NkwsNjMwODdMLAorNjMwODhMLDYzMDg5 TCw2MzA5MEwsNjMwOTFMLDYzMDkyTCw2MzA5M0wsNjMwOTRMLDYzMDk1TCw2MzA5NkwsNjMwOTdM LAorNjMwOThMLDYzMDk5TCw2MzEwMEwsNjMxMDFMLDYzMTAyTCw2MzEwM0wsNjMxMDRMLDYzMTA1 TCw2MzEwNkwsNjMxMDdMLAorNjMxMDhMLDYzMTA5TCw2MzExMEwsNjMxMTFMLDYzMTEyTCw2MzEx M0wsNjMxMTRMLDYzMTE1TCw2MzExNkwsNjMxMTdMLAorNjMxMThMLDYzMTE5TCw2MzEyMEwsNjMx MjFMLDYzMTIyTCw2MzEyM0wsNjMxMjRMLDYzMTI1TCw2MzEyNkwsNjMxMjdMLAorNjMxMjhMLDYz MTI5TCw2MzEzMEwsNjMxMzFMLDYzMTMyTCw2MzEzM0wsNjMxMzRMLDYzMTM1TCw2MzEzNkwsNjMx MzdMLAorNjMxMzhMLDYzMTM5TCw2MzE0MEwsNjMxNDFMLDYzMTQyTCw2MzE0M0wsNjMxNDRMLDYz MTQ1TCw2MzE0NkwsNjMxNDdMLAorNjMxNDhMLDYzMTQ5TCw2MzE1MEwsNjMxNTFMLDYzMTUyTCw2 MzE1M0wsNjMxNTRMLDYzMTU1TCw2MzE1NkwsNjMxNTdMLAorNjMxNThMLDYzMTU5TCw2MzE2MEws NjMxNjFMLDYzMTYyTCw2MzE2M0wsNjMxNjRMLDYzMTY1TCw2MzE2NkwsNjMxNjdMLAorNjMxNjhM LDYzMTY5TCw2MzE3MEwsNjMxNzFMLDYzMTcyTCw2MzE3M0wsNjMxNzRMLDYzMTc1TCw2MzE3Nkws NjMxNzdMLAorNjMxNzhMLDYzMTc5TCw2MzE4MEwsNjMxODFMLDYzMTgyTCw2MzE4M0wsNjMxODRM LDYzMTg1TCw2MzE4NkwsNjMxODdMLAorNjMxODhMLDYzMTg5TCw2MzE5MEwsNjMxOTFMLDYzMTky TCw2MzE5M0wsNjMxOTRMLDYzMTk1TCw2MzE5NkwsNjMxOTdMLAorNjMxOThMLDYzMTk5TCw2MzIw MEwsNjMyMDFMLDYzMjAyTCw2MzIwM0wsNjMyMDRMLDYzMjA1TCw2MzIwNkwsNjMyMDdMLAorNjMy MDhMLDYzMjA5TCw2MzIxMEwsNjMyMTFMLDYzMjEyTCw2MzIxM0wsNjMyMTRMLDYzMjE1TCw2MzIx NkwsNjMyMTdMLAorNjMyMThMLDYzMjE5TCw2MzIyMEwsNjMyMjFMLDYzMjIyTCw2MzIyM0wsNjMy MjRMLDYzMjI1TCw2MzIyNkwsNjMyMjdMLAorNjMyMjhMLDYzMjI5TCw2MzIzMEwsNjMyMzFMLDYz MjMyTCw2MzIzM0wsNjMyMzRMLDYzMjM1TCw2MzIzNkwsNjMyMzdMLAorNjMyMzhMLDYzMjM5TCw2 MzI0MEwsNjMyNDFMLDYzMjQyTCw2MzI0M0wsNjMyNDRMLDYzMjQ1TCw2MzI0NkwsNjMyNDdMLAor NjMyNDhMLDYzMjQ5TCw2MzI1MEwsNjMyNTFMLDYzMjUyTCw2MzI1M0wsNjMyNTRMLDYzMjU1TCw2 MzI1NkwsNjMyNTdMLAorNjMyNThMLDYzMjU5TCw2MzI2MEwsNjMyNjFMLDYzMjYyTCw2MzI2M0ws NjMyNjRMLDYzMjY1TCw2MzI2NkwsNjMyNjdMLAorNjMyNjhMLDYzMjY5TCw2MzI3MEwsNjMyNzFM LDYzMjcyTCw2MzI3M0wsNjMyNzRMLDYzMjc1TCw2MzI3NkwsNjMyNzdMLAorNjMyNzhMLDYzMjc5 TCw2MzI4MEwsNjMyODFMLDYzMjgyTCw2MzI4M0wsNjMyODRMLDYzMjg1TCw2MzI4NkwsNjMyODdM LAorNjMyODhMLDYzMjg5TCw2MzI5MEwsNjMyOTFMLDYzMjkyTCw2MzI5M0wsNjMyOTRMLDYzMjk1 TCw2MzI5NkwsNjMyOTdMLAorNjMyOThMLDYzMjk5TCw2MzMwMEwsNjMzMDFMLDYzMzAyTCw2MzMw M0wsNjMzMDRMLDYzMzA1TCw2MzMwNkwsNjMzMDdMLAorNjMzMDhMLDYzMzA5TCw2MzMxMEwsNjMz MTFMLDYzMzEyTCw2MzMxM0wsNjMzMTRMLDYzMzE1TCw2MzMxNkwsNjMzMTdMLAorNjMzMThMLDYz MzE5TCw2MzMyMEwsNjMzMjFMLDYzMzIyTCw2MzMyM0wsNjMzMjRMLDYzMzI1TCw2MzMyNkwsNjMz MjdMLAorNjMzMjhMLDYzMzI5TCw2MzMzMEwsNjMzMzFMLDYzMzMyTCw2MzMzM0wsNjMzMzRMLDYz MzM1TCw2MzMzNkwsNjMzMzdMLAorNjMzMzhMLDYzMzM5TCw2MzM0MEwsNjMzNDFMLDYzMzQyTCw2 MzM0M0wsNjMzNDRMLDYzMzQ1TCw2MzM0NkwsNjMzNDdMLAorNjMzNDhMLDYzMzQ5TCw2MzM1MEws NjMzNTFMLDYzMzUyTCw2MzM1M0wsNjMzNTRMLDYzMzU1TCw2MzM1NkwsNjMzNTdMLAorNjMzNThM LDYzMzU5TCw2MzM2MEwsNjMzNjFMLDYzMzYyTCw2MzM2M0wsNjMzNjRMLDYzMzY1TCw2MzM2Nkws NjMzNjdMLAorNjMzNjhMLDYzMzY5TCw2MzM3MEwsNjMzNzFMLDYzMzcyTCw2MzM3M0wsNjMzNzRM LDYzMzc1TCw2MzM3NkwsNjMzNzdMLAorNjMzNzhMLDYzMzc5TCw2MzM4MEwsNjMzODFMLDYzMzgy TCw2MzM4M0wsNjMzODRMLDYzMzg1TCw2MzM4NkwsNjMzODdMLAorNjMzODhMLDYzMzg5TCw2MzM5 MEwsNjMzOTFMLDYzMzkyTCw2MzM5M0wsNjMzOTRMLDYzMzk1TCw2MzM5NkwsNjMzOTdMLAorNjMz OThMLDYzMzk5TCw2MzQwMEwsNjM0MDFMLDYzNDAyTCw2MzQwM0wsNjM0MDRMLDYzNDA1TCw2MzQw NkwsNjM0MDdMLAorNjM0MDhMLDYzNDA5TCw2MzQxMEwsNjM0MTFMLDYzNDEyTCw2MzQxM0wsNjM0 MTRMLDYzNDE1TCw2MzQxNkwsNjM0MTdMLAorNjM0MThMLDYzNDE5TCw2MzQyMEwsNjM0MjFMLDYz NDIyTCw2MzQyM0wsNjM0MjRMLDYzNDI1TCw2MzQyNkwsNjM0MjdMLAorNjM0MjhMLDYzNDI5TCw2 MzQzMEwsNjM0MzFMLDYzNDMyTCw2MzQzM0wsNjM0MzRMLDYzNDM1TCw2MzQzNkwsNjM0MzdMLAor NjM0MzhMLDYzNDM5TCw2MzQ0MEwsNjM0NDFMLDYzNDQyTCw2MzQ0M0wsNjM0NDRMLDYzNDQ1TCw2 MzQ0NkwsNjM0NDdMLAorNjM0NDhMLDYzNDQ5TCw2MzQ1MEwsNjM0NTFMLDYzNDUyTCw2MzQ1M0ws NjM0NTRMLDYzNDU1TCw2MzQ1NkwsNjM0NTdMLAorNjM0NThMLDYzNDU5TCw2MzQ2MEwsNjM0NjFM LDYzNDYyTCw2MzQ2M0wsNjM0NjRMLDYzNDY1TCw2MzQ2NkwsNjM0NjdMLAorNjM0NjhMLDYzNDY5 TCw2MzQ3MEwsNjM0NzFMLDYzNDcyTCw2MzQ3M0wsNjM0NzRMLDYzNDc1TCw2MzQ3NkwsNjM0NzdM LAorNjM0NzhMLDYzNDc5TCw2MzQ4MEwsNjM0ODFMLDYzNDgyTCw2MzQ4M0wsNjM0ODRMLDYzNDg1 TCw2MzQ4NkwsNjM0ODdMLAorNjM0ODhMLDYzNDg5TCw2MzQ5MEwsNjM0OTFMLDYzNDkyTCw2MzQ5 M0wsNjM0OTRMLDYzNDk1TCw2MzQ5NkwsNjM0OTdMLAorNjM0OThMLDYzNDk5TCw2MzUwMEwsNjM1 MDFMLDYzNTAyTCw2MzUwM0wsNjM1MDRMLDYzNTA1TCw2MzUwNkwsNjM1MDdMLAorNjM1MDhMLDYz NTA5TCw2MzUxMEwsNjM1MTFMLDYzNTEyTCw2MzUxM0wsNjM1MTRMLDYzNTE1TCw2MzUxNkwsNjM1 MTdMLAorNjM1MThMLDYzNTE5TCw2MzUyMEwsNjM1MjFMLDYzNTIyTCw2MzUyM0wsNjM1MjRMLDYz NTI1TCw2MzUyNkwsNjM1MjdMLAorNjM1MjhMLDYzNTI5TCw2MzUzMEwsNjM1MzFMLDYzNTMyTCw2 MzUzM0wsNjM1MzRMLDYzNTM1TCw2MzUzNkwsNjM1MzdMLAorNjM1MzhMLDYzNTM5TCw2MzU0MEws NjM1NDFMLDYzNTQyTCw2MzU0M0wsNjM1NDRMLDYzNTQ1TCw2MzU0NkwsNjM1NDdMLAorNjM1NDhM LDYzNTQ5TCw2MzU1MEwsNjM1NTFMLDYzNTUyTCw2MzU1M0wsNjM1NTRMLDYzNTU1TCw2MzU1Nkws NjM1NTdMLAorNjM1NThMLDYzNTU5TCw2MzU2MEwsNjM1NjFMLDYzNTYyTCw2MzU2M0wsNjM1NjRM LDYzNTY1TCw2MzU2NkwsNjM1NjdMLAorNjM1NjhMLDYzNTY5TCw2MzU3MEwsNjM1NzFMLDYzNTcy TCw2MzU3M0wsNjM1NzRMLDYzNTc1TCw2MzU3NkwsNjM1NzdMLAorNjM1NzhMLDYzNTc5TCw2MzU4 MEwsNjM1ODFMLDYzNTgyTCw2MzU4M0wsNjM1ODRMLDYzNTg1TCw2MzU4NkwsNjM1ODdMLAorNjM1 ODhMLDYzNTg5TCw2MzU5MEwsNjM1OTFMLDYzNTkyTCw2MzU5M0wsNjM1OTRMLDYzNTk1TCw2MzU5 NkwsNjM1OTdMLAorNjM1OThMLDYzNTk5TCw2MzYwMEwsNjM2MDFMLDYzNjAyTCw2MzYwM0wsNjM2 MDRMLDYzNjA1TCw2MzYwNkwsNjM2MDdMLAorNjM2MDhMLDYzNjA5TCw2MzYxMEwsNjM2MTFMLDYz NjEyTCw2MzYxM0wsNjM2MTRMLDYzNjE1TCw2MzYxNkwsNjM2MTdMLAorNjM2MThMLDYzNjE5TCw2 MzYyMEwsNjM2MjFMLDYzNjIyTCw2MzYyM0wsNjM2MjRMLDYzNjI1TCw2MzYyNkwsNjM2MjdMLAor NjM2MjhMLDYzNjI5TCw2MzYzMEwsNjM2MzFMLDYzNjMyTCw2MzYzM0wsNjM2MzRMLDYzNjM1TCw2 MzYzNkwsNjM2MzdMLAorNjM2MzhMLDYzNjM5TCw2MzY0MEwsNjM2NDFMLDYzNjQyTCw2MzY0M0ws NjM2NDRMLDYzNjQ1TCw2MzY0NkwsNjM2NDdMLAorNjM2NDhMLDYzNjQ5TCw2MzY1MEwsNjM2NTFM LDYzNjUyTCw2MzY1M0wsNjM2NTRMLDYzNjU1TCw2MzY1NkwsNjM2NTdMLAorNjM2NThMLDYzNjU5 TCw2MzY2MEwsNjM2NjFMLDYzNjYyTCw2MzY2M0wsNjM2NjRMLDYzNjY1TCw2MzY2NkwsNjM2NjdM LAorNjM2NjhMLDYzNjY5TCw2MzY3MEwsNjM2NzFMLDYzNjcyTCw2MzY3M0wsNjM2NzRMLDYzNjc1 TCw2MzY3NkwsNjM2NzdMLAorNjM2NzhMLDYzNjc5TCw2MzY4MEwsNjM2ODFMLDYzNjgyTCw2MzY4 M0wsNjM2ODRMLDYzNjg1TCw2MzY4NkwsNjM2ODdMLAorNjM2ODhMLDYzNjg5TCw2MzY5MEwsNjM2 OTFMLDYzNjkyTCw2MzY5M0wsNjM2OTRMLDYzNjk1TCw2MzY5NkwsNjM2OTdMLAorNjM2OThMLDYz Njk5TCw2MzcwMEwsNjM3MDFMLDYzNzAyTCw2MzcwM0wsNjM3MDRMLDYzNzA1TCw2MzcwNkwsNjM3 MDdMLAorNjM3MDhMLDYzNzA5TCw2MzcxMEwsNjM3MTFMLDYzNzEyTCw2MzcxM0wsNjM3MTRMLDYz NzE1TCw2MzcxNkwsNjM3MTdMLAorNjM3MThMLDYzNzE5TCw2MzcyMEwsNjM3MjFMLDYzNzIyTCw2 MzcyM0wsNjM3MjRMLDYzNzI1TCw2MzcyNkwsNjM3MjdMLAorNjM3MjhMLDYzNzI5TCw2MzczMEws NjM3MzFMLDYzNzMyTCw2MzczM0wsNjM3MzRMLDYzNzM1TCw2MzczNkwsNjM3MzdMLAorNjM3MzhM LDYzNzM5TCw2Mzc0MEwsNjM3NDFMLDYzNzQyTCw2Mzc0M0wsNjM3NDRMLDYzNzQ1TCw2Mzc0Nkws NjM3NDdMLAorNjM3NDhMLDYzNzQ5TCw2Mzc1MEwsNjM3NTFMLDYzNzUyTCw2Mzc1M0wsNjM3NTRM LDYzNzU1TCw2Mzc1NkwsNjM3NTdMLAorNjM3NThMLDYzNzU5TCw2Mzc2MEwsNjM3NjFMLDYzNzYy TCw2Mzc2M0wsNjM3NjRMLDYzNzY1TCw2Mzc2NkwsNjM3NjdMLAorNjM3NjhMLDYzNzY5TCw2Mzc3 MEwsNjM3NzFMLDYzNzcyTCw2Mzc3M0wsNjM3NzRMLDYzNzc1TCw2Mzc3NkwsNjM3NzdMLAorNjM3 NzhMLDYzNzc5TCw2Mzc4MEwsNjM3ODFMLDYzNzgyTCw2Mzc4M0wsNjM3ODRMLDYzNzg1TCw2Mzc4 NkwsNjM3ODdMLAorNjM3ODhMLDYzNzg5TCw2Mzc5MEwsNjM3OTFMLDYzNzkyTCw2Mzc5M0wsNjM3 OTRMLDYzNzk1TCw2Mzc5NkwsNjM3OTdMLAorNjM3OThMLDYzNzk5TCw2MzgwMEwsNjM4MDFMLDYz ODAyTCw2MzgwM0wsNjM4MDRMLDYzODA1TCw2MzgwNkwsNjM4MDdMLAorNjM4MDhMLDYzODA5TCw2 MzgxMEwsNjM4MTFMLDYzODEyTCw2MzgxM0wsNjM4MTRMLDYzODE1TCw2MzgxNkwsNjM4MTdMLAor NjM4MThMLDYzODE5TCw2MzgyMEwsNjM4MjFMLDYzODIyTCw2MzgyM0wsNjM4MjRMLDYzODI1TCw2 MzgyNkwsNjM4MjdMLAorNjM4MjhMLDYzODI5TCw2MzgzMEwsNjM4MzFMLDYzODMyTCw2MzgzM0ws NjM4MzRMLDYzODM1TCw2MzgzNkwsNjM4MzdMLAorNjM4MzhMLDYzODM5TCw2Mzg0MEwsNjM4NDFM LDYzODQyTCw2Mzg0M0wsNjM4NDRMLDYzODQ1TCw2Mzg0NkwsNjM4NDdMLAorNjM4NDhMLDYzODQ5 TCw2Mzg1MEwsNjM4NTFMLDYzODUyTCw2Mzg1M0wsNjM4NTRMLDYzODU1TCw2Mzg1NkwsNjM4NTdM LAorNjM4NThMLDYzODU5TCw2Mzg2MEwsNjM4NjFMLDYzODYyTCw2Mzg2M0wsNjM4NjRMLDYzODY1 TCw2Mzg2NkwsNjM4NjdMLAorNjM4NjhMLDYzODY5TCw2Mzg3MEwsNjM4NzFMLDYzODcyTCw2Mzg3 M0wsNjM4NzRMLDYzODc1TCw2Mzg3NkwsNjM4NzdMLAorNjM4NzhMLDYzODc5TCw2Mzg4MEwsNjM4 ODFMLDYzODgyTCw2Mzg4M0wsNjM4ODRMLDYzODg1TCw2Mzg4NkwsNjM4ODdMLAorNjM4ODhMLDYz ODg5TCw2Mzg5MEwsNjM4OTFMLDYzODkyTCw2Mzg5M0wsNjM4OTRMLDYzODk1TCw2Mzg5NkwsNjM4 OTdMLAorNjM4OThMLDYzODk5TCw2MzkwMEwsNjM5MDFMLDYzOTAyTCw2MzkwM0wsNjM5MDRMLDYz OTA1TCw2MzkwNkwsNjM5MDdMLAorNjM5MDhMLDYzOTA5TCw2MzkxMEwsNjM5MTFMLDYzOTEyTCw2 MzkxM0wsNjM5MTRMLDYzOTE1TCw2MzkxNkwsNjM5MTdMLAorNjM5MThMLDYzOTE5TCw2MzkyMEws NjM5MjFMLDYzOTIyTCw2MzkyM0wsNjM5MjRMLDYzOTI1TCw2MzkyNkwsNjM5MjdMLAorNjM5MjhM LDYzOTI5TCw2MzkzMEwsNjM5MzFMLDYzOTMyTCw2MzkzM0wsNjM5MzRMLDYzOTM1TCw2MzkzNkws NjM5MzdMLAorNjM5MzhMLDYzOTM5TCw2Mzk0MEwsNjM5NDFMLDYzOTQyTCw2Mzk0M0wsNjM5NDRM LDYzOTQ1TCw2Mzk0NkwsNjM5NDdMLAorNjM5NDhMLDYzOTQ5TCw2Mzk1MEwsNjM5NTFMLDYzOTUy TCw2Mzk1M0wsNjM5NTRMLDYzOTU1TCw2Mzk1NkwsNjM5NTdMLAorNjM5NThMLDYzOTU5TCw2Mzk2 MEwsNjM5NjFMLDYzOTYyTCw2Mzk2M0wsNjM5NjRMLDYzOTY1TCw2Mzk2NkwsNjM5NjdMLAorNjM5 NjhMLDYzOTY5TCw2Mzk3MEwsNjM5NzFMLDYzOTcyTCw2Mzk3M0wsNjM5NzRMLDYzOTc1TCw2Mzk3 NkwsNjM5NzdMLAorNjM5NzhMLDYzOTc5TCw2Mzk4MEwsNjM5ODFMLDYzOTgyTCw2Mzk4M0wsNjM5 ODRMLDYzOTg1TCw2Mzk4NkwsNjM5ODdMLAorNjM5ODhMLDYzOTg5TCw2Mzk5MEwsNjM5OTFMLDYz OTkyTCw2Mzk5M0wsNjM5OTRMLDYzOTk1TCw2Mzk5NkwsNjM5OTdMLAorNjM5OThMLDYzOTk5TCw2 NDAwMEwsNjQwMDFMLDY0MDAyTCw2NDAwM0wsNjQwMDRMLDY0MDA1TCw2NDAwNkwsNjQwMDdMLAor NjQwMDhMLDY0MDA5TCw2NDAxMEwsNjQwMTFMLDY0MDEyTCw2NDAxM0wsNjQwMTRMLDY0MDE1TCw2 NDAxNkwsNjQwMTdMLAorNjQwMThMLDY0MDE5TCw2NDAyMEwsNjQwMjFMLDY0MDIyTCw2NDAyM0ws NjQwMjRMLDY0MDI1TCw2NDAyNkwsNjQwMjdMLAorNjQwMjhMLDY0MDI5TCw2NDAzMEwsNjQwMzFM LDY0MDMyTCw2NDAzM0wsNjQwMzRMLDY0MDM1TCw2NDAzNkwsNjQwMzdMLAorNjQwMzhMLDY0MDM5 TCw2NDA0MEwsNjQwNDFMLDY0MDQyTCw2NDA0M0wsNjQwNDRMLDY0MDQ1TCw2NDA0NkwsNjQwNDdM LAorNjQwNDhMLDY0MDQ5TCw2NDA1MEwsNjQwNTFMLDY0MDUyTCw2NDA1M0wsNjQwNTRMLDY0MDU1 TCw2NDA1NkwsNjQwNTdMLAorNjQwNThMLDY0MDU5TCw2NDA2MEwsNjQwNjFMLDY0MDYyTCw2NDA2 M0wsNjQwNjRMLDY0MDY1TCw2NDA2NkwsNjQwNjdMLAorNjQwNjhMLDY0MDY5TCw2NDA3MEwsNjQw NzFMLDY0MDcyTCw2NDA3M0wsNjQwNzRMLDY0MDc1TCw2NDA3NkwsNjQwNzdMLAorNjQwNzhMLDY0 MDc5TCw2NDA4MEwsNjQwODFMLDY0MDgyTCw2NDA4M0wsNjQwODRMLDY0MDg1TCw2NDA4NkwsNjQw ODdMLAorNjQwODhMLDY0MDg5TCw2NDA5MEwsNjQwOTFMLDY0MDkyTCw2NDA5M0wsNjQwOTRMLDY0 MDk1TCw2NDA5NkwsNjQwOTdMLAorNjQwOThMLDY0MDk5TCw2NDEwMEwsNjQxMDFMLDY0MTAyTCw2 NDEwM0wsNjQxMDRMLDY0MTA1TCw2NDEwNkwsNjQxMDdMLAorNjQxMDhMLDY0MTA5TCw2NDExMEws NjQxMTFMLDY0MTEyTCw2NDExM0wsNjQxMTRMLDY0MTE1TCw2NDExNkwsNjQxMTdMLAorNjQxMThM LDY0MTE5TCw2NDEyMEwsNjQxMjFMLDY0MTIyTCw2NDEyM0wsNjQxMjRMLDY0MTI1TCw2NDEyNkws NjQxMjdMLAorNjQxMjhMLDY0MTI5TCw2NDEzMEwsNjQxMzFMLDY0MTMyTCw2NDEzM0wsNjQxMzRM LDY0MTM1TCw2NDEzNkwsNjQxMzdMLAorNjQxMzhMLDY0MTM5TCw2NDE0MEwsNjQxNDFMLDY0MTQy TCw2NDE0M0wsNjQxNDRMLDY0MTQ1TCw2NDE0NkwsNjQxNDdMLAorNjQxNDhMLDY0MTQ5TCw2NDE1 MEwsNjQxNTFMLDY0MTUyTCw2NDE1M0wsNjQxNTRMLDY0MTU1TCw2NDE1NkwsNjQxNTdMLAorNjQx NThMLDY0MTU5TCw2NDE2MEwsNjQxNjFMLDY0MTYyTCw2NDE2M0wsNjQxNjRMLDY0MTY1TCw2NDE2 NkwsNjQxNjdMLAorNjQxNjhMLDY0MTY5TCw2NDE3MEwsNjQxNzFMLDY0MTcyTCw2NDE3M0wsNjQx NzRMLDY0MTc1TCw2NDE3NkwsNjQxNzdMLAorNjQxNzhMLDY0MTc5TCw2NDE4MEwsNjQxODFMLDY0 MTgyTCw2NDE4M0wsNjQxODRMLDY0MTg1TCw2NDE4NkwsNjQxODdMLAorNjQxODhMLDY0MTg5TCw2 NDE5MEwsNjQxOTFMLDY0MTkyTCw2NDE5M0wsNjQxOTRMLDY0MTk1TCw2NDE5NkwsNjQxOTdMLAor NjQxOThMLDY0MTk5TCw2NDIwMEwsNjQyMDFMLDY0MjAyTCw2NDIwM0wsNjQyMDRMLDY0MjA1TCw2 NDIwNkwsNjQyMDdMLAorNjQyMDhMLDY0MjA5TCw2NDIxMEwsNjQyMTFMLDY0MjEyTCw2NDIxM0ws NjQyMTRMLDY0MjE1TCw2NDIxNkwsNjQyMTdMLAorNjQyMThMLDY0MjE5TCw2NDIyMEwsNjQyMjFM LDY0MjIyTCw2NDIyM0wsNjQyMjRMLDY0MjI1TCw2NDIyNkwsNjQyMjdMLAorNjQyMjhMLDY0MjI5 TCw2NDIzMEwsNjQyMzFMLDY0MjMyTCw2NDIzM0wsNjQyMzRMLDY0MjM1TCw2NDIzNkwsNjQyMzdM LAorNjQyMzhMLDY0MjM5TCw2NDI0MEwsNjQyNDFMLDY0MjQyTCw2NDI0M0wsNjQyNDRMLDY0MjQ1 TCw2NDI0NkwsNjQyNDdMLAorNjQyNDhMLDY0MjQ5TCw2NDI1MEwsNjQyNTFMLDY0MjUyTCw2NDI1 M0wsNjQyNTRMLDY0MjU1TCw2NDI1NkwsNjQyNTdMLAorNjQyNThMLDY0MjU5TCw2NDI2MEwsNjQy NjFMLDY0MjYyTCw2NDI2M0wsNjQyNjRMLDY0MjY1TCw2NDI2NkwsNjQyNjdMLAorNjQyNjhMLDY0 MjY5TCw2NDI3MEwsNjQyNzFMLDY0MjcyTCw2NDI3M0wsNjQyNzRMLDY0Mjc1TCw2NDI3NkwsNjQy NzdMLAorNjQyNzhMLDY0Mjc5TCw2NDI4MEwsNjQyODFMLDY0MjgyTCw2NDI4M0wsNjQyODRMLDY0 Mjg1TCw2NDI4NkwsNjQyODdMLAorNjQyODhMLDY0Mjg5TCw2NDI5MEwsNjQyOTFMLDY0MjkyTCw2 NDI5M0wsNjQyOTRMLDY0Mjk1TCw2NDI5NkwsNjQyOTdMLAorNjQyOThMLDY0Mjk5TCw2NDMwMEws NjQzMDFMLDY0MzAyTCw2NDMwM0wsNjQzMDRMLDY0MzA1TCw2NDMwNkwsNjQzMDdMLAorNjQzMDhM LDY0MzA5TCw2NDMxMEwsNjQzMTFMLDY0MzEyTCw2NDMxM0wsNjQzMTRMLDY0MzE1TCw2NDMxNkws NjQzMTdMLAorNjQzMThMLDY0MzE5TCw2NDMyMEwsNjQzMjFMLDY0MzIyTCw2NDMyM0wsNjQzMjRM LDY0MzI1TCw2NDMyNkwsNjQzMjdMLAorNjQzMjhMLDY0MzI5TCw2NDMzMEwsNjQzMzFMLDY0MzMy TCw2NDMzM0wsNjQzMzRMLDY0MzM1TCw2NDMzNkwsNjQzMzdMLAorNjQzMzhMLDY0MzM5TCw2NDM0 MEwsNjQzNDFMLDY0MzQyTCw2NDM0M0wsNjQzNDRMLDY0MzQ1TCw2NDM0NkwsNjQzNDdMLAorNjQz NDhMLDY0MzQ5TCw2NDM1MEwsNjQzNTFMLDY0MzUyTCw2NDM1M0wsNjQzNTRMLDY0MzU1TCw2NDM1 NkwsNjQzNTdMLAorNjQzNThMLDY0MzU5TCw2NDM2MEwsNjQzNjFMLDY0MzYyTCw2NDM2M0wsNjQz NjRMLDY0MzY1TCw2NDM2NkwsNjQzNjdMLAorNjQzNjhMLDY0MzY5TCw2NDM3MEwsNjQzNzFMLDY0 MzcyTCw2NDM3M0wsNjQzNzRMLDY0Mzc1TCw2NDM3NkwsNjQzNzdMLAorNjQzNzhMLDY0Mzc5TCw2 NDM4MEwsNjQzODFMLDY0MzgyTCw2NDM4M0wsNjQzODRMLDY0Mzg1TCw2NDM4NkwsNjQzODdMLAor NjQzODhMLDY0Mzg5TCw2NDM5MEwsNjQzOTFMLDY0MzkyTCw2NDM5M0wsNjQzOTRMLDY0Mzk1TCw2 NDM5NkwsNjQzOTdMLAorNjQzOThMLDY0Mzk5TCw2NDQwMEwsNjQ0MDFMLDY0NDAyTCw2NDQwM0ws NjQ0MDRMLDY0NDA1TCw2NDQwNkwsNjQ0MDdMLAorNjQ0MDhMLDY0NDA5TCw2NDQxMEwsNjQ0MTFM LDY0NDEyTCw2NDQxM0wsNjQ0MTRMLDY0NDE1TCw2NDQxNkwsNjQ0MTdMLAorNjQ0MThMLDY0NDE5 TCw2NDQyMEwsNjQ0MjFMLDY0NDIyTCw2NDQyM0wsNjQ0MjRMLDY0NDI1TCw2NDQyNkwsNjQ0MjdM LAorNjQ0MjhMLDY0NDI5TCw2NDQzMEwsNjQ0MzFMLDY0NDMyTCw2NDQzM0wsNjQ0MzRMLDY0NDM1 TCw2NDQzNkwsNjQ0MzdMLAorNjQ0MzhMLDY0NDM5TCw2NDQ0MEwsNjQ0NDFMLDY0NDQyTCw2NDQ0 M0wsNjQ0NDRMLDY0NDQ1TCw2NDQ0NkwsNjQ0NDdMLAorNjQ0NDhMLDY0NDQ5TCw2NDQ1MEwsNjQ0 NTFMLDY0NDUyTCw2NDQ1M0wsNjQ0NTRMLDY0NDU1TCw2NDQ1NkwsNjQ0NTdMLAorNjQ0NThMLDY0 NDU5TCw2NDQ2MEwsNjQ0NjFMLDY0NDYyTCw2NDQ2M0wsNjQ0NjRMLDY0NDY1TCw2NDQ2NkwsNjQ0 NjdMLAorNjQ0NjhMLDY0NDY5TCw2NDQ3MEwsNjQ0NzFMLDY0NDcyTCw2NDQ3M0wsNjQ0NzRMLDY0 NDc1TCw2NDQ3NkwsNjQ0NzdMLAorNjQ0NzhMLDY0NDc5TCw2NDQ4MEwsNjQ0ODFMLDY0NDgyTCw2 NDQ4M0wsNjQ0ODRMLDY0NDg1TCw2NDQ4NkwsNjQ0ODdMLAorNjQ0ODhMLDY0NDg5TCw2NDQ5MEws NjQ0OTFMLDY0NDkyTCw2NDQ5M0wsNjQ0OTRMLDY0NDk1TCw2NDQ5NkwsNjQ0OTdMLAorNjQ0OThM LDY0NDk5TCw2NDUwMEwsNjQ1MDFMLDY0NTAyTCw2NDUwM0wsNjQ1MDRMLDY0NTA1TCw2NDUwNkws NjQ1MDdMLAorNjQ1MDhMLDY0NTA5TCw2NDUxMEwsNjQ1MTFMLDY0NTEyTCw2NDUxM0wsNjQ1MTRM LDY0NTE1TCw2NDUxNkwsNjQ1MTdMLAorNjQ1MThMLDY0NTE5TCw2NDUyMEwsNjQ1MjFMLDY0NTIy TCw2NDUyM0wsNjQ1MjRMLDY0NTI1TCw2NDUyNkwsNjQ1MjdMLAorNjQ1MjhMLDY0NTI5TCw2NDUz MEwsNjQ1MzFMLDY0NTMyTCw2NDUzM0wsNjQ1MzRMLDY0NTM1TCw2NDUzNkwsNjQ1MzdMLAorNjQ1 MzhMLDY0NTM5TCw2NDU0MEwsNjQ1NDFMLDY0NTQyTCw2NDU0M0wsNjQ1NDRMLDY0NTQ1TCw2NDU0 NkwsNjQ1NDdMLAorNjQ1NDhMLDY0NTQ5TCw2NDU1MEwsNjQ1NTFMLDY0NTUyTCw2NDU1M0wsNjQ1 NTRMLDY0NTU1TCw2NDU1NkwsNjQ1NTdMLAorNjQ1NThMLDY0NTU5TCw2NDU2MEwsNjQ1NjFMLDY0 NTYyTCw2NDU2M0wsNjQ1NjRMLDY0NTY1TCw2NDU2NkwsNjQ1NjdMLAorNjQ1NjhMLDY0NTY5TCw2 NDU3MEwsNjQ1NzFMLDY0NTcyTCw2NDU3M0wsNjQ1NzRMLDY0NTc1TCw2NDU3NkwsNjQ1NzdMLAor NjQ1NzhMLDY0NTc5TCw2NDU4MEwsNjQ1ODFMLDY0NTgyTCw2NDU4M0wsNjQ1ODRMLDY0NTg1TCw2 NDU4NkwsNjQ1ODdMLAorNjQ1ODhMLDY0NTg5TCw2NDU5MEwsNjQ1OTFMLDY0NTkyTCw2NDU5M0ws NjQ1OTRMLDY0NTk1TCw2NDU5NkwsNjQ1OTdMLAorNjQ1OThMLDY0NTk5TCw2NDYwMEwsNjQ2MDFM LDY0NjAyTCw2NDYwM0wsNjQ2MDRMLDY0NjA1TCw2NDYwNkwsNjQ2MDdMLAorNjQ2MDhMLDY0NjA5 TCw2NDYxMEwsNjQ2MTFMLDY0NjEyTCw2NDYxM0wsNjQ2MTRMLDY0NjE1TCw2NDYxNkwsNjQ2MTdM LAorNjQ2MThMLDY0NjE5TCw2NDYyMEwsNjQ2MjFMLDY0NjIyTCw2NDYyM0wsNjQ2MjRMLDY0NjI1 TCw2NDYyNkwsNjQ2MjdMLAorNjQ2MjhMLDY0NjI5TCw2NDYzMEwsNjQ2MzFMLDY0NjMyTCw2NDYz M0wsNjQ2MzRMLDY0NjM1TCw2NDYzNkwsNjQ2MzdMLAorNjQ2MzhMLDY0NjM5TCw2NDY0MEwsNjQ2 NDFMLDY0NjQyTCw2NDY0M0wsNjQ2NDRMLDY0NjQ1TCw2NDY0NkwsNjQ2NDdMLAorNjQ2NDhMLDY0 NjQ5TCw2NDY1MEwsNjQ2NTFMLDY0NjUyTCw2NDY1M0wsNjQ2NTRMLDY0NjU1TCw2NDY1NkwsNjQ2 NTdMLAorNjQ2NThMLDY0NjU5TCw2NDY2MEwsNjQ2NjFMLDY0NjYyTCw2NDY2M0wsNjQ2NjRMLDY0 NjY1TCw2NDY2NkwsNjQ2NjdMLAorNjQ2NjhMLDY0NjY5TCw2NDY3MEwsNjQ2NzFMLDY0NjcyTCw2 NDY3M0wsNjQ2NzRMLDY0Njc1TCw2NDY3NkwsNjQ2NzdMLAorNjQ2NzhMLDY0Njc5TCw2NDY4MEws NjQ2ODFMLDY0NjgyTCw2NDY4M0wsNjQ2ODRMLDY0Njg1TCw2NDY4NkwsNjQ2ODdMLAorNjQ2ODhM LDY0Njg5TCw2NDY5MEwsNjQ2OTFMLDY0NjkyTCw2NDY5M0wsNjQ2OTRMLDY0Njk1TCw2NDY5Nkws NjQ2OTdMLAorNjQ2OThMLDY0Njk5TCw2NDcwMEwsNjQ3MDFMLDY0NzAyTCw2NDcwM0wsNjQ3MDRM LDY0NzA1TCw2NDcwNkwsNjQ3MDdMLAorNjQ3MDhMLDY0NzA5TCw2NDcxMEwsNjQ3MTFMLDY0NzEy TCw2NDcxM0wsNjQ3MTRMLDY0NzE1TCw2NDcxNkwsNjQ3MTdMLAorNjQ3MThMLDY0NzE5TCw2NDcy MEwsNjQ3MjFMLDY0NzIyTCw2NDcyM0wsNjQ3MjRMLDY0NzI1TCw2NDcyNkwsNjQ3MjdMLAorNjQ3 MjhMLDY0NzI5TCw2NDczMEwsNjQ3MzFMLDY0NzMyTCw2NDczM0wsNjQ3MzRMLDY0NzM1TCw2NDcz NkwsNjQ3MzdMLAorNjQ3MzhMLDY0NzM5TCw2NDc0MEwsNjQ3NDFMLDY0NzQyTCw2NDc0M0wsNjQ3 NDRMLDY0NzQ1TCw2NDc0NkwsNjQ3NDdMLAorNjQ3NDhMLDY0NzQ5TCw2NDc1MEwsNjQ3NTFMLDY0 NzUyTCw2NDc1M0wsNjQ3NTRMLDY0NzU1TCw2NDc1NkwsNjQ3NTdMLAorNjQ3NThMLDY0NzU5TCw2 NDc2MEwsNjQ3NjFMLDY0NzYyTCw2NDc2M0wsNjQ3NjRMLDY0NzY1TCw2NDc2NkwsNjQ3NjdMLAor NjQ3NjhMLDY0NzY5TCw2NDc3MEwsNjQ3NzFMLDY0NzcyTCw2NDc3M0wsNjQ3NzRMLDY0Nzc1TCw2 NDc3NkwsNjQ3NzdMLAorNjQ3NzhMLDY0Nzc5TCw2NDc4MEwsNjQ3ODFMLDY0NzgyTCw2NDc4M0ws NjQ3ODRMLDY0Nzg1TCw2NDc4NkwsNjQ3ODdMLAorNjQ3ODhMLDY0Nzg5TCw2NDc5MEwsNjQ3OTFM LDY0NzkyTCw2NDc5M0wsNjQ3OTRMLDY0Nzk1TCw2NDc5NkwsNjQ3OTdMLAorNjQ3OThMLDY0Nzk5 TCw2NDgwMEwsNjQ4MDFMLDY0ODAyTCw2NDgwM0wsNjQ4MDRMLDY0ODA1TCw2NDgwNkwsNjQ4MDdM LAorNjQ4MDhMLDY0ODA5TCw2NDgxMEwsNjQ4MTFMLDY0ODEyTCw2NDgxM0wsNjQ4MTRMLDY0ODE1 TCw2NDgxNkwsNjQ4MTdMLAorNjQ4MThMLDY0ODE5TCw2NDgyMEwsNjQ4MjFMLDY0ODIyTCw2NDgy M0wsNjQ4MjRMLDY0ODI1TCw2NDgyNkwsNjQ4MjdMLAorNjQ4MjhMLDY0ODI5TCw2NDgzMEwsNjQ4 MzFMLDY0ODMyTCw2NDgzM0wsNjQ4MzRMLDY0ODM1TCw2NDgzNkwsNjQ4MzdMLAorNjQ4MzhMLDY0 ODM5TCw2NDg0MEwsNjQ4NDFMLDY0ODQyTCw2NDg0M0wsNjQ4NDRMLDY0ODQ1TCw2NDg0NkwsNjQ4 NDdMLAorNjQ4NDhMLDY0ODQ5TCw2NDg1MEwsNjQ4NTFMLDY0ODUyTCw2NDg1M0wsNjQ4NTRMLDY0 ODU1TCw2NDg1NkwsNjQ4NTdMLAorNjQ4NThMLDY0ODU5TCw2NDg2MEwsNjQ4NjFMLDY0ODYyTCw2 NDg2M0wsNjQ4NjRMLDY0ODY1TCw2NDg2NkwsNjQ4NjdMLAorNjQ4NjhMLDY0ODY5TCw2NDg3MEws NjQ4NzFMLDY0ODcyTCw2NDg3M0wsNjQ4NzRMLDY0ODc1TCw2NDg3NkwsNjQ4NzdMLAorNjQ4NzhM LDY0ODc5TCw2NDg4MEwsNjQ4ODFMLDY0ODgyTCw2NDg4M0wsNjQ4ODRMLDY0ODg1TCw2NDg4Nkws NjQ4ODdMLAorNjQ4ODhMLDY0ODg5TCw2NDg5MEwsNjQ4OTFMLDY0ODkyTCw2NDg5M0wsNjQ4OTRM LDY0ODk1TCw2NDg5NkwsNjQ4OTdMLAorNjQ4OThMLDY0ODk5TCw2NDkwMEwsNjQ5MDFMLDY0OTAy TCw2NDkwM0wsNjQ5MDRMLDY0OTA1TCw2NDkwNkwsNjQ5MDdMLAorNjQ5MDhMLDY0OTA5TCw2NDkx MEwsNjQ5MTFMLDY0OTEyTCw2NDkxM0wsNjQ5MTRMLDY0OTE1TCw2NDkxNkwsNjQ5MTdMLAorNjQ5 MThMLDY0OTE5TCw2NDkyMEwsNjQ5MjFMLDY0OTIyTCw2NDkyM0wsNjQ5MjRMLDY0OTI1TCw2NDky NkwsNjQ5MjdMLAorNjQ5MjhMLDY0OTI5TCw2NDkzMEwsNjQ5MzFMLDY0OTMyTCw2NDkzM0wsNjQ5 MzRMLDY0OTM1TCw2NDkzNkwsNjQ5MzdMLAorNjQ5MzhMLDY0OTM5TCw2NDk0MEwsNjQ5NDFMLDY0 OTQyTCw2NDk0M0wsNjQ5NDRMLDY0OTQ1TCw2NDk0NkwsNjQ5NDdMLAorNjQ5NDhMLDY0OTQ5TCw2 NDk1MEwsNjQ5NTFMLDY0OTUyTCw2NDk1M0wsNjQ5NTRMLDY0OTU1TCw2NDk1NkwsNjQ5NTdMLAor NjQ5NThMLDY0OTU5TCw2NDk2MEwsNjQ5NjFMLDY0OTYyTCw2NDk2M0wsNjQ5NjRMLDY0OTY1TCw2 NDk2NkwsNjQ5NjdMLAorNjQ5NjhMLDY0OTY5TCw2NDk3MEwsNjQ5NzFMLDY0OTcyTCw2NDk3M0ws NjQ5NzRMLDY0OTc1TCw2NDk3NkwsNjQ5NzdMLAorNjQ5NzhMLDY0OTc5TCw2NDk4MEwsNjQ5ODFM LDY0OTgyTCw2NDk4M0wsNjQ5ODRMLDY0OTg1TCw2NDk4NkwsNjQ5ODdMLAorNjQ5ODhMLDY0OTg5 TCw2NDk5MEwsNjQ5OTFMLDY0OTkyTCw2NDk5M0wsNjQ5OTRMLDY0OTk1TCw2NDk5NkwsNjQ5OTdM LAorNjQ5OThMLDY0OTk5TCw2NTAwMEwsNjUwMDFMLDY1MDAyTCw2NTAwM0wsNjUwMDRMLDY1MDA1 TCw2NTAwNkwsNjUwMDdMLAorNjUwMDhMLDY1MDA5TCw2NTAxMEwsNjUwMTFMLDY1MDEyTCw2NTAx M0wsNjUwMTRMLDY1MDE1TCw2NTAxNkwsNjUwMTdMLAorNjUwMThMLDY1MDE5TCw2NTAyMEwsNjUw MjFMLDY1MDIyTCw2NTAyM0wsNjUwMjRMLDY1MDI1TCw2NTAyNkwsNjUwMjdMLAorNjUwMjhMLDY1 MDI5TCw2NTAzMEwsNjUwMzFMLDY1MDMyTCw2NTAzM0wsNjUwMzRMLDY1MDM1TCw2NTAzNkwsNjUw MzdMLAorNjUwMzhMLDY1MDM5TCw2NTA0MEwsNjUwNDFMLDY1MDQyTCw2NTA0M0wsNjUwNDRMLDY1 MDQ1TCw2NTA0NkwsNjUwNDdMLAorNjUwNDhMLDY1MDQ5TCw2NTA1MEwsNjUwNTFMLDY1MDUyTCw2 NTA1M0wsNjUwNTRMLDY1MDU1TCw2NTA1NkwsNjUwNTdMLAorNjUwNThMLDY1MDU5TCw2NTA2MEws NjUwNjFMLDY1MDYyTCw2NTA2M0wsNjUwNjRMLDY1MDY1TCw2NTA2NkwsNjUwNjdMLAorNjUwNjhM LDY1MDY5TCw2NTA3MEwsNjUwNzFMLDY1MDcyTCw2NTA3M0wsNjUwNzRMLDY1MDc1TCw2NTA3Nkws NjUwNzdMLAorNjUwNzhMLDY1MDc5TCw2NTA4MEwsNjUwODFMLDY1MDgyTCw2NTA4M0wsNjUwODRM LDY1MDg1TCw2NTA4NkwsNjUwODdMLAorNjUwODhMLDY1MDg5TCw2NTA5MEwsNjUwOTFMLDY1MDky TCw2NTA5M0wsNjUwOTRMLDY1MDk1TCw2NTA5NkwsNjUwOTdMLAorNjUwOThMLDY1MDk5TCw2NTEw MEwsNjUxMDFMLDY1MTAyTCw2NTEwM0wsNjUxMDRMLDY1MTA1TCw2NTEwNkwsNjUxMDdMLAorNjUx MDhMLDY1MTA5TCw2NTExMEwsNjUxMTFMLDY1MTEyTCw2NTExM0wsNjUxMTRMLDY1MTE1TCw2NTEx NkwsNjUxMTdMLAorNjUxMThMLDY1MTE5TCw2NTEyMEwsNjUxMjFMLDY1MTIyTCw2NTEyM0wsNjUx MjRMLDY1MTI1TCw2NTEyNkwsNjUxMjdMLAorNjUxMjhMLDY1MTI5TCw2NTEzMEwsNjUxMzFMLDY1 MTMyTCw2NTEzM0wsNjUxMzRMLDY1MTM1TCw2NTEzNkwsNjUxMzdMLAorNjUxMzhMLDY1MTM5TCw2 NTE0MEwsNjUxNDFMLDY1MTQyTCw2NTE0M0wsNjUxNDRMLDY1MTQ1TCw2NTE0NkwsNjUxNDdMLAor NjUxNDhMLDY1MTQ5TCw2NTE1MEwsNjUxNTFMLDY1MTUyTCw2NTE1M0wsNjUxNTRMLDY1MTU1TCw2 NTE1NkwsNjUxNTdMLAorNjUxNThMLDY1MTU5TCw2NTE2MEwsNjUxNjFMLDY1MTYyTCw2NTE2M0ws NjUxNjRMLDY1MTY1TCw2NTE2NkwsNjUxNjdMLAorNjUxNjhMLDY1MTY5TCw2NTE3MEwsNjUxNzFM LDY1MTcyTCw2NTE3M0wsNjUxNzRMLDY1MTc1TCw2NTE3NkwsNjUxNzdMLAorNjUxNzhMLDY1MTc5 TCw2NTE4MEwsNjUxODFMLDY1MTgyTCw2NTE4M0wsNjUxODRMLDY1MTg1TCw2NTE4NkwsNjUxODdM LAorNjUxODhMLDY1MTg5TCw2NTE5MEwsNjUxOTFMLDY1MTkyTCw2NTE5M0wsNjUxOTRMLDY1MTk1 TCw2NTE5NkwsNjUxOTdMLAorNjUxOThMLDY1MTk5TCw2NTIwMEwsNjUyMDFMLDY1MjAyTCw2NTIw M0wsNjUyMDRMLDY1MjA1TCw2NTIwNkwsNjUyMDdMLAorNjUyMDhMLDY1MjA5TCw2NTIxMEwsNjUy MTFMLDY1MjEyTCw2NTIxM0wsNjUyMTRMLDY1MjE1TCw2NTIxNkwsNjUyMTdMLAorNjUyMThMLDY1 MjE5TCw2NTIyMEwsNjUyMjFMLDY1MjIyTCw2NTIyM0wsNjUyMjRMLDY1MjI1TCw2NTIyNkwsNjUy MjdMLAorNjUyMjhMLDY1MjI5TCw2NTIzMEwsNjUyMzFMLDY1MjMyTCw2NTIzM0wsNjUyMzRMLDY1 MjM1TCw2NTIzNkwsNjUyMzdMLAorNjUyMzhMLDY1MjM5TCw2NTI0MEwsNjUyNDFMLDY1MjQyTCw2 NTI0M0wsNjUyNDRMLDY1MjQ1TCw2NTI0NkwsNjUyNDdMLAorNjUyNDhMLDY1MjQ5TCw2NTI1MEws NjUyNTFMLDY1MjUyTCw2NTI1M0wsNjUyNTRMLDY1MjU1TCw2NTI1NkwsNjUyNTdMLAorNjUyNThM LDY1MjU5TCw2NTI2MEwsNjUyNjFMLDY1MjYyTCw2NTI2M0wsNjUyNjRMLDY1MjY1TCw2NTI2Nkws NjUyNjdMLAorNjUyNjhMLDY1MjY5TCw2NTI3MEwsNjUyNzFMLDY1MjcyTCw2NTI3M0wsNjUyNzRM LDY1Mjc1TCw2NTI3NkwsNjUyNzdMLAorNjUyNzhMLDY1Mjc5TCw2NTI4MEwsNjUyODFMLDY1Mjgy TCw2NTI4M0wsNjUyODRMLDY1Mjg1TCw2NTI4NkwsNjUyODdMLAorNjUyODhMLDY1Mjg5TCw2NTI5 MEwsNjUyOTFMLDY1MjkyTCw2NTI5M0wsNjUyOTRMLDY1Mjk1TCw2NTI5NkwsNjUyOTdMLAorNjUy OThMLDY1Mjk5TCw2NTMwMEwsNjUzMDFMLDY1MzAyTCw2NTMwM0wsNjUzMDRMLDY1MzA1TCw2NTMw NkwsNjUzMDdMLAorNjUzMDhMLDY1MzA5TCw2NTMxMEwsNjUzMTFMLDY1MzEyTCw2NTMxM0wsNjUz MTRMLDY1MzE1TCw2NTMxNkwsNjUzMTdMLAorNjUzMThMLDY1MzE5TCw2NTMyMEwsNjUzMjFMLDY1 MzIyTCw2NTMyM0wsNjUzMjRMLDY1MzI1TCw2NTMyNkwsNjUzMjdMLAorNjUzMjhMLDY1MzI5TCw2 NTMzMEwsNjUzMzFMLDY1MzMyTCw2NTMzM0wsNjUzMzRMLDY1MzM1TCw2NTMzNkwsNjUzMzdMLAor NjUzMzhMLDY1MzM5TCw2NTM0MEwsNjUzNDFMLDY1MzQyTCw2NTM0M0wsNjUzNDRMLDY1MzEzTCw2 NTMxNEwsNjUzMTVMLAorNjUzMTZMLDY1MzE3TCw2NTMxOEwsNjUzMTlMLDY1MzIwTCw2NTMyMUws NjUzMjJMLDY1MzIzTCw2NTMyNEwsNjUzMjVMLAorNjUzMjZMLDY1MzI3TCw2NTMyOEwsNjUzMjlM LDY1MzMwTCw2NTMzMUwsNjUzMzJMLDY1MzMzTCw2NTMzNEwsNjUzMzVMLAorNjUzMzZMLDY1MzM3 TCw2NTMzOEwsNjUzNzFMLDY1MzcyTCw2NTM3M0wsNjUzNzRMLDY1Mzc1TCw2NTM3NkwsNjUzNzdM LAorNjUzNzhMLDY1Mzc5TCw2NTM4MEwsNjUzODFMLDY1MzgyTCw2NTM4M0wsNjUzODRMLDY1Mzg1 TCw2NTM4NkwsNjUzODdMLAorNjUzODhMLDY1Mzg5TCw2NTM5MEwsNjUzOTFMLDY1MzkyTCw2NTM5 M0wsNjUzOTRMLDY1Mzk1TCw2NTM5NkwsNjUzOTdMLAorNjUzOThMLDY1Mzk5TCw2NTQwMEwsNjU0 MDFMLDY1NDAyTCw2NTQwM0wsNjU0MDRMLDY1NDA1TCw2NTQwNkwsNjU0MDdMLAorNjU0MDhMLDY1 NDA5TCw2NTQxMEwsNjU0MTFMLDY1NDEyTCw2NTQxM0wsNjU0MTRMLDY1NDE1TCw2NTQxNkwsNjU0 MTdMLAorNjU0MThMLDY1NDE5TCw2NTQyMEwsNjU0MjFMLDY1NDIyTCw2NTQyM0wsNjU0MjRMLDY1 NDI1TCw2NTQyNkwsNjU0MjdMLAorNjU0MjhMLDY1NDI5TCw2NTQzMEwsNjU0MzFMLDY1NDMyTCw2 NTQzM0wsNjU0MzRMLDY1NDM1TCw2NTQzNkwsNjU0MzdMLAorNjU0MzhMLDY1NDM5TCw2NTQ0MEws NjU0NDFMLDY1NDQyTCw2NTQ0M0wsNjU0NDRMLDY1NDQ1TCw2NTQ0NkwsNjU0NDdMLAorNjU0NDhM LDY1NDQ5TCw2NTQ1MEwsNjU0NTFMLDY1NDUyTCw2NTQ1M0wsNjU0NTRMLDY1NDU1TCw2NTQ1Nkws NjU0NTdMLAorNjU0NThMLDY1NDU5TCw2NTQ2MEwsNjU0NjFMLDY1NDYyTCw2NTQ2M0wsNjU0NjRM LDY1NDY1TCw2NTQ2NkwsNjU0NjdMLAorNjU0NjhMLDY1NDY5TCw2NTQ3MEwsNjU0NzFMLDY1NDcy TCw2NTQ3M0wsNjU0NzRMLDY1NDc1TCw2NTQ3NkwsNjU0NzdMLAorNjU0NzhMLDY1NDc5TCw2NTQ4 MEwsNjU0ODFMLDY1NDgyTCw2NTQ4M0wsNjU0ODRMLDY1NDg1TCw2NTQ4NkwsNjU0ODdMLAorNjU0 ODhMLDY1NDg5TCw2NTQ5MEwsNjU0OTFMLDY1NDkyTCw2NTQ5M0wsNjU0OTRMLDY1NDk1TCw2NTQ5 NkwsNjU0OTdMLAorNjU0OThMLDY1NDk5TCw2NTUwMEwsNjU1MDFMLDY1NTAyTCw2NTUwM0wsNjU1 MDRMLDY1NTA1TCw2NTUwNkwsNjU1MDdMLAorNjU1MDhMLDY1NTA5TCw2NTUxMEwsNjU1MTFMLDY1 NTEyTCw2NTUxM0wsNjU1MTRMLDY1NTE1TCw2NTUxNkwsNjU1MTdMLAorNjU1MThMLDY1NTE5TCw2 NTUyMEwsNjU1MjFMLDY1NTIyTCw2NTUyM0wsNjU1MjRMLDY1NTI1TCw2NTUyNkwsNjU1MjdMLAor NjU1MjhMLDY1NTI5TCw2NTUzMEwsNjU1MzFMLDY1NTMyTCw2NTUzM0wsNjU1MzRMLDY1NTM1TCwK K307CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9SRUdFWFBfQ0FOT05fQklUTUFQKQor LyoKKyAqICBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBleHRyYWN0X2Nhc2Vjb252LnB5LCBk byBub3QgZWRpdCEKKyAqLworCitjb25zdCBkdWtfdWludDhfdCBkdWtfdW5pY29kZV9yZV9jYW5v bl9iaXRtYXBbMjU2XSA9IHsKKzIzLDAsMjI0LDE5LDEsMjI4LDI1NSwyNTUsMjU1LDI1NSwyNTUs MjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwxMjcsCisyNTUsMjU1LDI1NSwyNTUsMjU1 LDI1NSwyNTUsMjU1LDIzMSwyNDcsMCwxNiwyNTUsMjI3LDI1NSwyNTUsNjMsMjU1LDI1NSwKKzI1 NSwyNTUsMjU1LDI1NSwyNTUsMSwyNTIsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwy NTUsMjU1LDI1NSwyNTUsCisyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUs MjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwKKzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1 LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LAorMjU1LDI1 NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1 LDI1NSwyNTUsCisyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1 NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwKKzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwy NTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LAorMjU1LDI1NSwyNTUs MjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwy NTUsCisyMjcsMTkzLDI1NSwyNTUsMjU1LDE0NywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUs MjU1LDI1NSwyNTUsMjU1LDI1NSwKKzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1 LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LAorMjU1LDI1NSwyNTUsMjU1LDI1 NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsCisy NTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1 NSwyNTUsMjU1LDI1NSwKKzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwy NTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjUxLAorfTsKKyNlbmRpZgorLyoKKyAqICBCaXRz dHJlYW0gZGVjb2Rlci4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJl YWR5IGluY2x1ZGVkICovCisKKy8qIERlY29kZSAnYml0cycgYml0cyBmcm9tIHRoZSBpbnB1dCBz dHJlYW0gKGJpdHMgbXVzdCBiZSAxLi4uMjQpLgorICogV2hlbiByZWFkaW5nIHBhc3QgYml0c3Ry ZWFtIGVuZCwgemVyb2VzIGFyZSBzaGlmdGVkIGluLiAgVGhlIHJlc3VsdAorICogaXMgc2lnbmVk IHRvIG1hdGNoIGR1a19iZF9kZWNvZGVfZmxhZ2dlZC4KKyAqLworRFVLX0lOVEVSTkFMIGR1a191 aW50MzJfdCBkdWtfYmRfZGVjb2RlKGR1a19iaXRkZWNvZGVyX2N0eCAqY3R4LCBkdWtfc21hbGxf aW50X3QgYml0cykgeworCWR1a19zbWFsbF9pbnRfdCBzaGlmdDsKKwlkdWtfdWludDMyX3QgbWFz azsKKwlkdWtfdWludDMyX3QgdG1wOworCisJLyogTm90ZTogY2Fubm90IHJlYWQgbW9yZSB0aGFu IDI0IGJpdHMgd2l0aG91dCBwb3NzaWJseSBzaGlmdGluZyB0b3AgYml0cyBvdXQuCisJICogRml4 YWJsZSwgYnV0IGFkZHMgY29tcGxleGl0eS4KKwkgKi8KKwlEVUtfQVNTRVJUKGJpdHMgPj0gMSAm JiBiaXRzIDw9IDI0KTsKKworCXdoaWxlIChjdHgtPmN1cnJiaXRzIDwgYml0cykgeworI2lmIDAK KwkJRFVLX0RERChEVUtfREREUFJJTlQoImRlY29kZV9iaXRzOiBzaGlmdCBtb3JlIGRhdGEgKGJp dHM9JWxkLCBjdXJyYml0cz0lbGQpIiwKKwkJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGJp dHMsIChsb25nKSBjdHgtPmN1cnJiaXRzKSk7CisjZW5kaWYKKwkJY3R4LT5jdXJydmFsIDw8PSA4 OworCQlpZiAoY3R4LT5vZmZzZXQgPCBjdHgtPmxlbmd0aCkgeworCQkJLyogSWYgY3R4LT5vZmZz ZXQgPj0gY3R4LT5sZW5ndGgsIHdlICJzaGlmdCB6ZXJvZXMgaW4iCisJCQkgKiBpbnN0ZWFkIG9m IGNyb2FraW5nLgorCQkJICovCisJCQljdHgtPmN1cnJ2YWwgfD0gY3R4LT5kYXRhW2N0eC0+b2Zm c2V0KytdOworCQl9CisJCWN0eC0+Y3VycmJpdHMgKz0gODsKKwl9CisjaWYgMAorCURVS19EREQo RFVLX0RERFBSSU5UKCJkZWNvZGVfYml0czogYml0cz0lbGQsIGN1cnJiaXRzPSVsZCwgY3VycnZh bD0weCUwOGx4IiwKKwkgICAgICAgICAgICAgICAgICAgICAobG9uZykgYml0cywgKGxvbmcpIGN0 eC0+Y3VycmJpdHMsICh1bnNpZ25lZCBsb25nKSBjdHgtPmN1cnJ2YWwpKTsKKyNlbmRpZgorCisJ LyogRXh0cmFjdCAndG9wJyBiaXRzIG9mIGN1cnJ2YWw7IG5vdGUgdGhhdCB0aGUgZXh0cmFjdGVk IGJpdHMgZG8gbm90IG5lZWQKKwkgKiB0byBiZSBjbGVhcmVkLCB3ZSBqdXN0IGlnbm9yZSB0aGVt IG9uIG5leHQgcm91bmQuCisJICovCisJc2hpZnQgPSBjdHgtPmN1cnJiaXRzIC0gYml0czsKKwlt YXNrID0gKCgoZHVrX3VpbnQzMl90KSAxVSkgPDwgYml0cykgLSAxVTsKKwl0bXAgPSAoY3R4LT5j dXJydmFsID4+IHNoaWZ0KSAmIG1hc2s7CisJY3R4LT5jdXJyYml0cyA9IHNoaWZ0OyAgLyogcmVt YWluaW5nICovCisKKyNpZiAwCisJRFVLX0RERChEVUtfREREUFJJTlQoImRlY29kZV9iaXRzOiAl bGQgYml0cyAtPiAweCUwOGx4ICglbGQpLCBjdXJyYml0cz0lbGQsIGN1cnJ2YWw9MHglMDhseCIs CisJICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGJpdHMsICh1bnNpZ25lZCBsb25nKSB0bXAs IChsb25nKSB0bXAsIChsb25nKSBjdHgtPmN1cnJiaXRzLCAodW5zaWduZWQgbG9uZykgY3R4LT5j dXJydmFsKSk7CisjZW5kaWYKKworCXJldHVybiB0bXA7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtf c21hbGxfdWludF90IGR1a19iZF9kZWNvZGVfZmxhZyhkdWtfYml0ZGVjb2Rlcl9jdHggKmN0eCkg eworCXJldHVybiAoZHVrX3NtYWxsX3VpbnRfdCkgZHVrX2JkX2RlY29kZShjdHgsIDEpOworfQor CisvKiBEZWNvZGUgYSBvbmUtYml0IGZsYWcsIGFuZCBpZiBzZXQsIGRlY29kZSBhIHZhbHVlIG9m ICdiaXRzJywgb3RoZXJ3aXNlIHJldHVybgorICogZGVmYXVsdCB2YWx1ZS4KKyAqLworRFVLX0lO VEVSTkFMIGR1a191aW50MzJfdCBkdWtfYmRfZGVjb2RlX2ZsYWdnZWQoZHVrX2JpdGRlY29kZXJf Y3R4ICpjdHgsIGR1a19zbWFsbF9pbnRfdCBiaXRzLCBkdWtfdWludDMyX3QgZGVmX3ZhbHVlKSB7 CisJaWYgKGR1a19iZF9kZWNvZGVfZmxhZyhjdHgpKSB7CisJCXJldHVybiBkdWtfYmRfZGVjb2Rl KGN0eCwgYml0cyk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGRlZl92YWx1ZTsKKwl9Cit9CisKKy8q IFNpZ25lZCB2YXJpYW50LCBhbGxvd3MgbmVnYXRpdmUgbWFya2VyIHZhbHVlLiAqLworRFVLX0lO VEVSTkFMIGR1a19pbnQzMl90IGR1a19iZF9kZWNvZGVfZmxhZ2dlZF9zaWduZWQoZHVrX2JpdGRl Y29kZXJfY3R4ICpjdHgsIGR1a19zbWFsbF9pbnRfdCBiaXRzLCBkdWtfaW50MzJfdCBkZWZfdmFs dWUpIHsKKwlyZXR1cm4gKGR1a19pbnQzMl90KSBkdWtfYmRfZGVjb2RlX2ZsYWdnZWQoY3R4LCBi aXRzLCAoZHVrX3VpbnQzMl90KSBkZWZfdmFsdWUpOworfQorCisvKiBTaGFyZWQgdmFyaW50IGVu Y29kaW5nLiAgTWF0Y2ggZHVrdXRpbC5weSBCaXRFbmNvZGUudmFydWludCgpLiAqLworRFVLX0lO VEVSTkFMIGR1a191aW50MzJfdCBkdWtfYmRfZGVjb2RlX3ZhcnVpbnQoZHVrX2JpdGRlY29kZXJf Y3R4ICpjdHgpIHsKKwlkdWtfc21hbGxfdWludF90IHQ7CisKKwkvKiBUaGUgYml0IGVuY29kaW5n IGNob2ljZXMgaGVyZSBhcmUgYmFzZWQgb24gbWFudWFsIHRlc3RpbmcgYWdhaW5zdAorCSAqIHRo ZSBhY3R1YWwgdmFydWludHMgZ2VuZXJhdGVkIGJ5IGdlbmJ1aWx0aW5zLnB5LgorCSAqLworCXN3 aXRjaCAoZHVrX2JkX2RlY29kZShjdHgsIDIpKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gMDsgIC8q IFswLDBdICovCisJY2FzZSAxOgorCQlyZXR1cm4gZHVrX2JkX2RlY29kZShjdHgsIDIpICsgMTsg IC8qIFsxLDRdICovCisJY2FzZSAyOgorCQlyZXR1cm4gZHVrX2JkX2RlY29kZShjdHgsIDUpICsg NTsgIC8qIFs1LDM2XSAqLworCWRlZmF1bHQ6CisJCXQgPSBkdWtfYmRfZGVjb2RlKGN0eCwgNyk7 CisJCWlmICh0ID09IDApIHsKKwkJCXJldHVybiBkdWtfYmRfZGVjb2RlKGN0eCwgMjApOworCQl9 CisJCXJldHVybiAodCAtIDEpICsgMzc7ICAvKiBbMzcsMTYzXSAqLworCX0KK30KKworLyogRGVj b2RlIGEgYml0IHBhY2tlZCBzdHJpbmcgZnJvbSBhIGN1c3RvbSBmb3JtYXQgdXNlZCBieSBnZW5i dWlsdGlucy5weS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSBiZWNhdXNlIGl0J3MgdXNlZCBm b3IgYm90aCBoZWFwIGFuZCB0aHJlYWQgaW5pdHMuCisgKiBDYWxsZXIgbXVzdCBzdXBwbHkgdGhl IG91dHB1dCBidWZmZXIgd2hvc2Ugc2l6ZSBpcyBOT1QgY2hlY2tlZCEKKyAqLworCisjZGVmaW5l IERVS19fQklUUEFDS19MRVRURVJfTElNSVQgIDI2CisjZGVmaW5lIERVS19fQklUUEFDS19MT09L VVAxICAgICAgIDI2CisjZGVmaW5lIERVS19fQklUUEFDS19MT09LVVAyICAgICAgIDI3CisjZGVm aW5lIERVS19fQklUUEFDS19TV0lUQ0gxICAgICAgIDI4CisjZGVmaW5lIERVS19fQklUUEFDS19T V0lUQ0ggICAgICAgIDI5CisjZGVmaW5lIERVS19fQklUUEFDS19VTlVTRUQxICAgICAgIDMwCisj ZGVmaW5lIERVS19fQklUUEFDS19FSUdIVEJJVCAgICAgIDMxCisKK0RVS19MT0NBTCBjb25zdCBk dWtfdWludDhfdCBkdWtfX2JpdHBhY2tlZF9sb29rdXBbMTZdID0geworCURVS19BU0NfMCwgRFVL X0FTQ18xLCBEVUtfQVNDXzIsIERVS19BU0NfMywKKwlEVUtfQVNDXzQsIERVS19BU0NfNSwgRFVL X0FTQ182LCBEVUtfQVNDXzcsCisJRFVLX0FTQ184LCBEVUtfQVNDXzksIERVS19BU0NfVU5ERVJT Q09SRSwgRFVLX0FTQ19TUEFDRSwKKwkweDgyLCAweDgwLCBEVUtfQVNDX0RPVUJMRVFVT1RFLCBE VUtfQVNDX0xDVVJMWQorfTsKKworRFVLX0lOVEVSTkFMIGR1a19zbWFsbF91aW50X3QgZHVrX2Jk X2RlY29kZV9iaXRwYWNrZWRfc3RyaW5nKGR1a19iaXRkZWNvZGVyX2N0eCAqYmQsIGR1a191aW50 OF90ICpvdXQpIHsKKwlkdWtfc21hbGxfdWludF90IGxlbjsKKwlkdWtfc21hbGxfdWludF90IG1v ZGU7CisJZHVrX3NtYWxsX3VpbnRfdCB0OworCWR1a19zbWFsbF91aW50X3QgaTsKKworCWxlbiA9 IGR1a19iZF9kZWNvZGUoYmQsIDUpOworCWlmIChsZW4gPT0gMzEpIHsKKwkJbGVuID0gZHVrX2Jk X2RlY29kZShiZCwgOCk7ICAvKiBTdXBwb3J0IHVwIHRvIDI1NiBieXRlczsgcmFyZS4gKi8KKwl9 CisKKwltb2RlID0gMzI7ICAvKiAwID0gdXBwZXJjYXNlLCAzMiA9IGxvd2VyY2FzZSAoPSAnYScg LSAnQScpICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXQgPSBkdWtfYmRfZGVj b2RlKGJkLCA1KTsKKwkJaWYgKHQgPCBEVUtfX0JJVFBBQ0tfTEVUVEVSX0xJTUlUKSB7CisJCQl0 ID0gdCArIERVS19BU0NfVUNfQSArIG1vZGU7CisJCX0gZWxzZSBpZiAodCA9PSBEVUtfX0JJVFBB Q0tfTE9PS1VQMSkgeworCQkJdCA9IGR1a19fYml0cGFja2VkX2xvb2t1cFtkdWtfYmRfZGVjb2Rl KGJkLCAzKV07CisJCX0gZWxzZSBpZiAodCA9PSBEVUtfX0JJVFBBQ0tfTE9PS1VQMikgeworCQkJ dCA9IGR1a19fYml0cGFja2VkX2xvb2t1cFs4ICsgZHVrX2JkX2RlY29kZShiZCwgMyldOworCQl9 IGVsc2UgaWYgKHQgPT0gRFVLX19CSVRQQUNLX1NXSVRDSDEpIHsKKwkJCXQgPSBkdWtfYmRfZGVj b2RlKGJkLCA1KTsKKwkJCURVS19BU1NFUlRfRElTQUJMRSh0ID49IDApOyAgLyogdW5zaWduZWQg Ki8KKwkJCURVS19BU1NFUlQodCA8PSAyNSk7CisJCQl0ID0gdCArIERVS19BU0NfVUNfQSArICht b2RlIF4gMzIpOworCQl9IGVsc2UgaWYgKHQgPT0gRFVLX19CSVRQQUNLX1NXSVRDSCkgeworCQkJ bW9kZSA9IG1vZGUgXiAzMjsKKwkJCXQgPSBkdWtfYmRfZGVjb2RlKGJkLCA1KTsKKwkJCURVS19B U1NFUlRfRElTQUJMRSh0ID49IDApOworCQkJRFVLX0FTU0VSVCh0IDw9IDI1KTsKKwkJCXQgPSB0 ICsgRFVLX0FTQ19VQ19BICsgbW9kZTsKKwkJfSBlbHNlIGlmICh0ID09IERVS19fQklUUEFDS19F SUdIVEJJVCkgeworCQkJdCA9IGR1a19iZF9kZWNvZGUoYmQsIDgpOworCQl9CisJCW91dFtpXSA9 IChkdWtfdWludDhfdCkgdDsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKiBhdXRvbWF0aWMg dW5kZWZzICovCisjdW5kZWYgRFVLX19CSVRQQUNLX0VJR0hUQklUCisjdW5kZWYgRFVLX19CSVRQ QUNLX0xFVFRFUl9MSU1JVAorI3VuZGVmIERVS19fQklUUEFDS19MT09LVVAxCisjdW5kZWYgRFVL X19CSVRQQUNLX0xPT0tVUDIKKyN1bmRlZiBEVUtfX0JJVFBBQ0tfU1dJVENICisjdW5kZWYgRFVL X19CSVRQQUNLX1NXSVRDSDEKKyN1bmRlZiBEVUtfX0JJVFBBQ0tfVU5VU0VEMQorLyoKKyAqICBC aXRzdHJlYW0gZW5jb2Rlci4KKyAqLworCisvKiAjaW5jbHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBh bHJlYWR5IGluY2x1ZGVkICovCisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19iZV9lbmNvZGUoZHVr X2JpdGVuY29kZXJfY3R4ICpjdHgsIGR1a191aW50MzJfdCBkYXRhLCBkdWtfc21hbGxfaW50X3Qg Yml0cykgeworCWR1a191aW50OF90IHRtcDsKKworCURVS19BU1NFUlQoY3R4ICE9IE5VTEwpOwor CURVS19BU1NFUlQoY3R4LT5jdXJyYml0cyA8IDgpOworCisJLyogVGhpcyBsaW1pdGF0aW9uIHdv dWxkIGJlIGZpeGFibGUgYnV0IGFkZHMgdW5uZWNlc3NhcnkgY29tcGxleGl0eS4gKi8KKwlEVUtf QVNTRVJUKGJpdHMgPj0gMSAmJiBiaXRzIDw9IDI0KTsKKworCWN0eC0+Y3VycnZhbCA9IChjdHgt PmN1cnJ2YWwgPDwgYml0cykgfCBkYXRhOworCWN0eC0+Y3VycmJpdHMgKz0gYml0czsKKworCXdo aWxlIChjdHgtPmN1cnJiaXRzID49IDgpIHsKKwkJaWYgKGN0eC0+b2Zmc2V0IDwgY3R4LT5sZW5n dGgpIHsKKwkJCXRtcCA9IChkdWtfdWludDhfdCkgKChjdHgtPmN1cnJ2YWwgPj4gKGN0eC0+Y3Vy cmJpdHMgLSA4KSkgJiAweGZmKTsKKwkJCWN0eC0+ZGF0YVtjdHgtPm9mZnNldCsrXSA9IHRtcDsK KwkJfSBlbHNlIHsKKwkJCS8qIElmIGJ1ZmZlciBoYXMgYmVlbiBleGhhdXN0ZWQsIHRydW5jYXRl IGJpdHN0cmVhbSAqLworCQkJY3R4LT50cnVuY2F0ZWQgPSAxOworCQl9CisKKwkJY3R4LT5jdXJy Yml0cyAtPSA4OworCX0KK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2JlX2ZpbmlzaChkdWtf Yml0ZW5jb2Rlcl9jdHggKmN0eCkgeworCWR1a19zbWFsbF9pbnRfdCBucGFkOworCisJRFVLX0FT U0VSVChjdHggIT0gTlVMTCk7CisJRFVLX0FTU0VSVChjdHgtPmN1cnJiaXRzIDwgOCk7CisKKwlu cGFkID0gKGR1a19zbWFsbF9pbnRfdCkgKDggLSBjdHgtPmN1cnJiaXRzKTsKKwlpZiAobnBhZCA+ IDApIHsKKwkJZHVrX2JlX2VuY29kZShjdHgsIDAsIG5wYWQpOworCX0KKwlEVUtfQVNTRVJUKGN0 eC0+Y3VycmJpdHMgPT0gMCk7Cit9CisvKgorICogIEZhc3QgYnVmZmVyIHdyaXRlciB3aXRoIHNs YWNrIG1hbmFnZW1lbnQuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxy ZWFkeSBpbmNsdWRlZCAqLworCisvKiBYWFg6IEF2b2lkIGR1a197bWVtY21wLG1lbW1vdmV9X3Vu c2FmZSgpIGJ5IGltcG9zaW5nIGEgbWluaW11bSBsZW5ndGggb2YKKyAqID4wIGZvciB0aGUgdW5k ZXJseWluZyBkeW5hbWljIGJ1ZmZlci4KKyAqLworCisvKgorICogIE1hY3JvIHN1cHBvcnQgZnVu Y3Rpb25zICh1c2Ugb25seSBtYWNyb3MgaW4gY2FsbGluZyBjb2RlKQorICovCisKK0RVS19MT0NB TCB2b2lkIGR1a19fYndfdXBkYXRlX3B0cnMoZHVrX2h0aHJlYWQgKnRociwgZHVrX2J1ZndyaXRl cl9jdHggKmJ3X2N0eCwgZHVrX3NpemVfdCBjdXJyX29mZnNldCwgZHVrX3NpemVfdCBuZXdfbGVu Z3RoKSB7CisJZHVrX3VpbnQ4X3QgKnA7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlE VUtfQVNTRVJUKGJ3X2N0eCAhPSBOVUxMKTsKKwlEVUtfVU5SRUYodGhyKTsKKworCS8qICdwJyBt aWdodCBiZSBOVUxMIHdoZW4gdGhlIHVuZGVybHlpbmcgYnVmZmVyIGlzIHplcm8gc2l6ZS4gIElm IHNvLAorCSAqIHRoZSByZXN1bHRpbmcgcG9pbnRlcnMgYXJlIG5vdCB1c2VkIHVuc2FmZWx5Lgor CSAqLworCXAgPSAoZHVrX3VpbnQ4X3QgKikgRFVLX0hCVUZGRVJfRFlOQU1JQ19HRVRfREFUQV9Q VFIodGhyLT5oZWFwLCBid19jdHgtPmJ1Zik7CisJRFVLX0FTU0VSVChwICE9IE5VTEwgfHwgKERV S19IQlVGRkVSX0RZTkFNSUNfR0VUX1NJWkUoYndfY3R4LT5idWYpID09IDAgJiYgY3Vycl9vZmZz ZXQgPT0gMCAmJiBuZXdfbGVuZ3RoID09IDApKTsKKwlid19jdHgtPnAgPSBwICsgY3Vycl9vZmZz ZXQ7CisJYndfY3R4LT5wX2Jhc2UgPSBwOworCWJ3X2N0eC0+cF9saW1pdCA9IHAgKyBuZXdfbGVu Z3RoOworfQorCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfYndfaW5pdChkdWtfaHRocmVhZCAqdGhy LCBkdWtfYnVmd3JpdGVyX2N0eCAqYndfY3R4LCBkdWtfaGJ1ZmZlcl9keW5hbWljICpoX2J1Zikg eworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoYndfY3R4ICE9IE5VTEwp OworCURVS19BU1NFUlQoaF9idWYgIT0gTlVMTCk7CisKKwlid19jdHgtPmJ1ZiA9IGhfYnVmOwor CWR1a19fYndfdXBkYXRlX3B0cnModGhyLCBid19jdHgsIDAsIERVS19IQlVGRkVSX0RZTkFNSUNf R0VUX1NJWkUoaF9idWYpKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2J3X2luaXRfcHVz aGJ1ZihkdWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYndfY3R4LCBkdWtfc2l6 ZV90IGJ1Zl9zaXplKSB7CisJRFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChi d19jdHggIT0gTlVMTCk7CisKKwkodm9pZCkgZHVrX3B1c2hfZHluYW1pY19idWZmZXIodGhyLCBi dWZfc2l6ZSk7CisJYndfY3R4LT5idWYgPSAoZHVrX2hidWZmZXJfZHluYW1pYyAqKSBkdWtfa25v d25faGJ1ZmZlcih0aHIsIC0xKTsKKwlEVUtfQVNTRVJUKGJ3X2N0eC0+YnVmICE9IE5VTEwpOwor CWR1a19fYndfdXBkYXRlX3B0cnModGhyLCBid19jdHgsIDAsIGJ1Zl9zaXplKTsKK30KKworLyog UmVzaXplIHRhcmdldCBidWZmZXIgZm9yIHJlcXVlc3RlZCBzaXplLiAgQ2FsbGVkIGJ5IHRoZSBt YWNybyBvbmx5IHdoZW4gdGhlCisgKiBmYXN0IHBhdGggdGVzdCAoPSB0aGVyZSBpcyBzcGFjZSkg ZmFpbHMuCisgKi8KK0RVS19JTlRFUk5BTCBkdWtfdWludDhfdCAqZHVrX2J3X3Jlc2l6ZShkdWtf aHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYndfY3R4LCBkdWtfc2l6ZV90IHN6KSB7 CisJZHVrX3NpemVfdCBjdXJyX29mZjsKKwlkdWtfc2l6ZV90IGFkZF9zejsKKwlkdWtfc2l6ZV90 IG5ld19zejsKKworCURVS19BU1NFUlQodGhyICE9IE5VTEwpOworCURVS19BU1NFUlQoYndfY3R4 ICE9IE5VTEwpOworCisJLyogV2UgY291bGQgZG8gdGhpcyBvcGVyYXRpb24gd2l0aG91dCBjYWxs ZXIgdXBkYXRpbmcgYndfY3R4LT5wdHIsCisJICogYnV0IGJ5IHdyaXRpbmcgaXQgYmFjayBoZXJl IHdlIGNhbiBzaGFyZSBjb2RlIGJldHRlci4KKwkgKi8KKworCWN1cnJfb2ZmID0gKGR1a19zaXpl X3QpIChid19jdHgtPnAgLSBid19jdHgtPnBfYmFzZSk7CisJYWRkX3N6ID0gKGN1cnJfb2ZmID4+ IERVS19CV19TTEFDS19TSElGVCkgKyBEVUtfQldfU0xBQ0tfQUREOworCW5ld19zeiA9IGN1cnJf b2ZmICsgc3ogKyBhZGRfc3o7CisJaWYgKERVS19VTkxJS0VMWShuZXdfc3ogPCBjdXJyX29mZikp IHsKKwkJLyogb3ZlcmZsb3cgKi8KKwkJRFVLX0VSUk9SX1JBTkdFKHRociwgRFVLX1NUUl9CVUZG RVJfVE9PX0xPTkcpOworCQlEVUtfV09fTk9SRVRVUk4ocmV0dXJuIE5VTEw7KTsKKwl9CisjaWYg MCAgLyogZm9yIG1hbnVhbCB0b3J0dXJlIHRlc3Rpbmc6IHRpZ2h0IGFsbG9jYXRpb24sIHVzZWZ1 bCB3aXRoIHZhbGdyaW5kICovCisJbmV3X3N6ID0gY3Vycl9vZmYgKyBzejsKKyNlbmRpZgorCisJ LyogVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIGR5bmFtaWMgYnVmZmVyIGRhdGEgcG9pbnRl ciBpcyBub3QKKwkgKiBOVUxMICh3aGljaCBpcyBwb3NzaWJsZSBpZiBidWZmZXIgc2l6ZSBpcyB6 ZXJvKSwgd2hpY2ggaW4gdHVybgorCSAqIGNhdXNlcyBwb3J0YWJpbGl0eSBpc3N1ZXMgd2l0aCBl LmcuIG1lbW1vdmUoKSBhbmQgbWVtY3B5KCkuCisJICovCisJRFVLX0FTU0VSVChuZXdfc3ogPj0g MSk7CisKKwlEVUtfREQoRFVLX0REUFJJTlQoInJlc2l6ZSBidWZmZXJ3cml0ZXIgZnJvbSAlbGQg dG8gJWxkIChhZGRfc3o9JWxkKSIsIChsb25nKSBjdXJyX29mZiwgKGxvbmcpIG5ld19zeiwgKGxv bmcpIGFkZF9zeikpOworCisJZHVrX2hidWZmZXJfcmVzaXplKHRociwgYndfY3R4LT5idWYsIG5l d19zeik7CisJZHVrX19id191cGRhdGVfcHRycyh0aHIsIGJ3X2N0eCwgY3Vycl9vZmYsIG5ld19z eik7CisJcmV0dXJuIGJ3X2N0eC0+cDsKK30KKworLyogTWFrZSBidWZmZXIgY29tcGFjdCwgbWF0 Y2hpbmcgY3VycmVudCB3cml0dGVuIHNpemUuICovCitEVUtfSU5URVJOQUwgdm9pZCBkdWtfYndf Y29tcGFjdChkdWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYndfY3R4KSB7CisJ ZHVrX3NpemVfdCBsZW47CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJU KGJ3X2N0eCAhPSBOVUxMKTsKKwlEVUtfVU5SRUYodGhyKTsKKworCWxlbiA9IChkdWtfc2l6ZV90 KSAoYndfY3R4LT5wIC0gYndfY3R4LT5wX2Jhc2UpOworCWR1a19oYnVmZmVyX3Jlc2l6ZSh0aHIs IGJ3X2N0eC0+YnVmLCBsZW4pOworCWR1a19fYndfdXBkYXRlX3B0cnModGhyLCBid19jdHgsIGxl biwgbGVuKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2J3X3dyaXRlX3Jhd19zbGljZShk dWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYncsIGR1a19zaXplX3Qgc3JjX29m ZiwgZHVrX3NpemVfdCBsZW4pIHsKKwlkdWtfdWludDhfdCAqcF9iYXNlOworCisJRFVLX0FTU0VS VCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChidyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKHNy Y19vZmYgPD0gRFVLX0JXX0dFVF9TSVpFKHRociwgYncpKTsKKwlEVUtfQVNTRVJUKGxlbiA8PSBE VUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19BU1NFUlQoc3JjX29mZiArIGxlbiA8PSBE VUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19VTlJFRih0aHIpOworCisJcF9iYXNlID0g YnctPnBfYmFzZTsKKwlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSBidy0+cCwKKwkgICAgICAg ICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAocF9iYXNlICsgc3JjX29mZiksCisJICAgICAgICAg ICAgICAgICAgKHNpemVfdCkgbGVuKTsKKwlidy0+cCArPSBsZW47Cit9CisKK0RVS19JTlRFUk5B TCB2b2lkIGR1a19id193cml0ZV9lbnN1cmVfc2xpY2UoZHVrX2h0aHJlYWQgKnRociwgZHVrX2J1 ZndyaXRlcl9jdHggKmJ3LCBkdWtfc2l6ZV90IHNyY19vZmYsIGR1a19zaXplX3QgbGVuKSB7CisJ RFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChidyAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKHNyY19vZmYgPD0gRFVLX0JXX0dFVF9TSVpFKHRociwgYncpKTsKKwlEVUtfQVNTRVJU KGxlbiA8PSBEVUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19BU1NFUlQoc3JjX29mZiAr IGxlbiA8PSBEVUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCisJRFVLX0JXX0VOU1VSRSh0aHIs IGJ3LCBsZW4pOworCWR1a19id193cml0ZV9yYXdfc2xpY2UodGhyLCBidywgc3JjX29mZiwgbGVu KTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2J3X2luc2VydF9yYXdfYnl0ZXMoZHVrX2h0 aHJlYWQgKnRociwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3LCBkdWtfc2l6ZV90IGRzdF9vZmYsIGNv bnN0IGR1a191aW50OF90ICpidWYsIGR1a19zaXplX3QgbGVuKSB7CisJZHVrX3VpbnQ4X3QgKnBf YmFzZTsKKwlkdWtfc2l6ZV90IGJ1Zl9zeiwgbW92ZV9zejsKKworCURVS19BU1NFUlQodGhyICE9 IE5VTEwpOworCURVS19BU1NFUlQoYncgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChkc3Rfb2ZmIDw9 IERVS19CV19HRVRfU0laRSh0aHIsIGJ3KSk7CisJRFVLX0FTU0VSVChidWYgIT0gTlVMTCk7CisJ RFVLX1VOUkVGKHRocik7CisKKwlwX2Jhc2UgPSBidy0+cF9iYXNlOworCWJ1Zl9zeiA9IChkdWtf c2l6ZV90KSAoYnctPnAgLSBwX2Jhc2UpOyAgLyogY29uc3RyYWluZWQgYnkgbWF4aW11bSBidWZm ZXIgc2l6ZSAqLworCW1vdmVfc3ogPSBidWZfc3ogLSBkc3Rfb2ZmOworCisJRFVLX0FTU0VSVChw X2Jhc2UgIT0gTlVMTCk7ICAvKiBidWZmZXIgc2l6ZSBpcyA+PSAxICovCisJZHVrX21lbW1vdmVf dW5zYWZlKCh2b2lkICopIChwX2Jhc2UgKyBkc3Rfb2ZmICsgbGVuKSwKKwkgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHZvaWQgKikgKHBfYmFzZSArIGRzdF9vZmYpLAorCSAgICAgICAgICAgICAg ICAgICAoc2l6ZV90KSBtb3ZlX3N6KTsKKwlkdWtfbWVtY3B5X3Vuc2FmZSgodm9pZCAqKSAocF9i YXNlICsgZHN0X29mZiksCisJICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgYnVmLAor CSAgICAgICAgICAgICAgICAgIChzaXplX3QpIGxlbik7CisJYnctPnAgKz0gbGVuOworfQorCitE VUtfSU5URVJOQUwgdm9pZCBkdWtfYndfaW5zZXJ0X2Vuc3VyZV9ieXRlcyhkdWtfaHRocmVhZCAq dGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAqYncsIGR1a19zaXplX3QgZHN0X29mZiwgY29uc3QgZHVr X3VpbnQ4X3QgKmJ1ZiwgZHVrX3NpemVfdCBsZW4pIHsKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxM KTsKKwlEVUtfQVNTRVJUKGJ3ICE9IE5VTEwpOworCURVS19BU1NFUlQoZHN0X29mZiA8PSBEVUtf QldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19BU1NFUlQoYnVmICE9IE5VTEwpOworCisJRFVL X0JXX0VOU1VSRSh0aHIsIGJ3LCBsZW4pOworCWR1a19id19pbnNlcnRfcmF3X2J5dGVzKHRociwg YncsIGRzdF9vZmYsIGJ1ZiwgbGVuKTsKK30KKworRFVLX0lOVEVSTkFMIHZvaWQgZHVrX2J3X2lu c2VydF9yYXdfc2xpY2UoZHVrX2h0aHJlYWQgKnRociwgZHVrX2J1ZndyaXRlcl9jdHggKmJ3LCBk dWtfc2l6ZV90IGRzdF9vZmYsIGR1a19zaXplX3Qgc3JjX29mZiwgZHVrX3NpemVfdCBsZW4pIHsK KwlkdWtfdWludDhfdCAqcF9iYXNlOworCWR1a19zaXplX3QgYnVmX3N6LCBtb3ZlX3N6OworCisJ RFVLX0FTU0VSVCh0aHIgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChidyAhPSBOVUxMKTsKKwlEVUtf QVNTRVJUKGRzdF9vZmYgPD0gRFVLX0JXX0dFVF9TSVpFKHRociwgYncpKTsKKwlEVUtfQVNTRVJU KHNyY19vZmYgPD0gRFVLX0JXX0dFVF9TSVpFKHRociwgYncpKTsKKwlEVUtfQVNTRVJUKGxlbiA8 PSBEVUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19BU1NFUlQoc3JjX29mZiArIGxlbiA8 PSBEVUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19VTlJFRih0aHIpOworCisJcF9iYXNl ID0gYnctPnBfYmFzZTsKKworCS8qIERvbid0IHN1cHBvcnQgInN0cmFkZGxlZCIgc291cmNlIG5v dy4gKi8KKwlEVUtfQVNTRVJUKGRzdF9vZmYgPD0gc3JjX29mZiB8fCBkc3Rfb2ZmID49IHNyY19v ZmYgKyBsZW4pOworCisJaWYgKGRzdF9vZmYgPD0gc3JjX29mZikgeworCQkvKiBUYXJnZXQgaXMg YmVmb3JlIHNvdXJjZS4gIFNvdXJjZSBvZmZzZXQgaXMgZXhwcmVzc2VkIGFzCisJCSAqIGEgImJl Zm9yZSBjaGFuZ2UiIG9mZnNldC4gIEFjY291bnQgZm9yIHRoZSBtZW1tb3ZlLgorCQkgKi8KKwkJ c3JjX29mZiArPSBsZW47CisJfQorCisJYnVmX3N6ID0gKGR1a19zaXplX3QpIChidy0+cCAtIHBf YmFzZSk7CisJbW92ZV9zeiA9IGJ1Zl9zeiAtIGRzdF9vZmY7CisKKwlEVUtfQVNTRVJUKHBfYmFz ZSAhPSBOVUxMKTsgIC8qIGJ1ZmZlciBzaXplIGlzID49IDEgKi8KKwlkdWtfbWVtbW92ZV91bnNh ZmUoKHZvaWQgKikgKHBfYmFzZSArIGRzdF9vZmYgKyBsZW4pLAorCSAgICAgICAgICAgICAgICAg ICAoY29uc3Qgdm9pZCAqKSAocF9iYXNlICsgZHN0X29mZiksCisJICAgICAgICAgICAgICAgICAg IChzaXplX3QpIG1vdmVfc3opOworCWR1a19tZW1jcHlfdW5zYWZlKCh2b2lkICopIChwX2Jhc2Ug KyBkc3Rfb2ZmKSwKKwkgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAocF9iYXNlICsg c3JjX29mZiksCisJICAgICAgICAgICAgICAgICAgKHNpemVfdCkgbGVuKTsKKwlidy0+cCArPSBs ZW47Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a19id19pbnNlcnRfZW5zdXJlX3NsaWNlKGR1 a19odGhyZWFkICp0aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpidywgZHVrX3NpemVfdCBkc3Rfb2Zm LCBkdWtfc2l6ZV90IHNyY19vZmYsIGR1a19zaXplX3QgbGVuKSB7CisJRFVLX0FTU0VSVCh0aHIg IT0gTlVMTCk7CisJRFVLX0FTU0VSVChidyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKGRzdF9vZmYg PD0gRFVLX0JXX0dFVF9TSVpFKHRociwgYncpKTsKKwlEVUtfQVNTRVJUKHNyY19vZmYgPD0gRFVL X0JXX0dFVF9TSVpFKHRociwgYncpKTsKKwlEVUtfQVNTRVJUKGxlbiA8PSBEVUtfQldfR0VUX1NJ WkUodGhyLCBidykpOworCURVS19BU1NFUlQoc3JjX29mZiArIGxlbiA8PSBEVUtfQldfR0VUX1NJ WkUodGhyLCBidykpOworCisJLyogRG9uJ3Qgc3VwcG9ydCAic3RyYWRkbGVkIiBzb3VyY2Ugbm93 LiAqLworCURVS19BU1NFUlQoZHN0X29mZiA8PSBzcmNfb2ZmIHx8IGRzdF9vZmYgPj0gc3JjX29m ZiArIGxlbik7CisKKwlEVUtfQldfRU5TVVJFKHRociwgYncsIGxlbik7CisJZHVrX2J3X2luc2Vy dF9yYXdfc2xpY2UodGhyLCBidywgZHN0X29mZiwgc3JjX29mZiwgbGVuKTsKK30KKworRFVLX0lO VEVSTkFMIGR1a191aW50OF90ICpkdWtfYndfaW5zZXJ0X3Jhd19hcmVhKGR1a19odGhyZWFkICp0 aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpidywgZHVrX3NpemVfdCBvZmYsIGR1a19zaXplX3QgbGVu KSB7CisJZHVrX3VpbnQ4X3QgKnBfYmFzZSwgKnBfZHN0LCAqcF9zcmM7CisJZHVrX3NpemVfdCBi dWZfc3osIG1vdmVfc3o7CisKKwlEVUtfQVNTRVJUKHRociAhPSBOVUxMKTsKKwlEVUtfQVNTRVJU KGJ3ICE9IE5VTEwpOworCURVS19BU1NFUlQob2ZmIDw9IERVS19CV19HRVRfU0laRSh0aHIsIGJ3 KSk7CisJRFVLX1VOUkVGKHRocik7CisKKwlwX2Jhc2UgPSBidy0+cF9iYXNlOworCWJ1Zl9zeiA9 IChkdWtfc2l6ZV90KSAoYnctPnAgLSBwX2Jhc2UpOworCW1vdmVfc3ogPSBidWZfc3ogLSBvZmY7 CisJcF9kc3QgPSBwX2Jhc2UgKyBvZmYgKyBsZW47CisJcF9zcmMgPSBwX2Jhc2UgKyBvZmY7CisJ ZHVrX21lbW1vdmVfdW5zYWZlKCh2b2lkICopIHBfZHN0LCAoY29uc3Qgdm9pZCAqKSBwX3NyYywg KHNpemVfdCkgbW92ZV9zeik7CisJcmV0dXJuIHBfc3JjOyAgLyogcG9pbnQgdG8gc3RhcnQgb2Yg J3Jlc2VydmVkIGFyZWEnICovCit9CisKK0RVS19JTlRFUk5BTCBkdWtfdWludDhfdCAqZHVrX2J3 X2luc2VydF9lbnN1cmVfYXJlYShkdWtfaHRocmVhZCAqdGhyLCBkdWtfYnVmd3JpdGVyX2N0eCAq YncsIGR1a19zaXplX3Qgb2ZmLCBkdWtfc2l6ZV90IGxlbikgeworCURVS19BU1NFUlQodGhyICE9 IE5VTEwpOworCURVS19BU1NFUlQoYncgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChvZmYgPD0gRFVL X0JXX0dFVF9TSVpFKHRociwgYncpKTsKKworCURVS19CV19FTlNVUkUodGhyLCBidywgbGVuKTsK KwlyZXR1cm4gZHVrX2J3X2luc2VydF9yYXdfYXJlYSh0aHIsIGJ3LCBvZmYsIGxlbik7Cit9CisK K0RVS19JTlRFUk5BTCB2b2lkIGR1a19id19yZW1vdmVfcmF3X3NsaWNlKGR1a19odGhyZWFkICp0 aHIsIGR1a19idWZ3cml0ZXJfY3R4ICpidywgZHVrX3NpemVfdCBvZmYsIGR1a19zaXplX3QgbGVu KSB7CisJZHVrX3NpemVfdCBtb3ZlX3N6OworCisJZHVrX3VpbnQ4X3QgKnBfYmFzZTsKKwlkdWtf dWludDhfdCAqcF9zcmM7CisJZHVrX3VpbnQ4X3QgKnBfZHN0OworCisJRFVLX0FTU0VSVCh0aHIg IT0gTlVMTCk7CisJRFVLX0FTU0VSVChidyAhPSBOVUxMKTsKKwlEVUtfQVNTRVJUKG9mZiA8PSBE VUtfQldfR0VUX1NJWkUodGhyLCBidykpOworCURVS19BU1NFUlQobGVuIDw9IERVS19CV19HRVRf U0laRSh0aHIsIGJ3KSk7CisJRFVLX0FTU0VSVChvZmYgKyBsZW4gPD0gRFVLX0JXX0dFVF9TSVpF KHRociwgYncpKTsKKwlEVUtfVU5SRUYodGhyKTsKKworCXBfYmFzZSA9IGJ3LT5wX2Jhc2U7CisJ cF9kc3QgPSBwX2Jhc2UgKyBvZmY7CisJcF9zcmMgPSBwX2RzdCArIGxlbjsKKwltb3ZlX3N6ID0g KGR1a19zaXplX3QpIChidy0+cCAtIHBfc3JjKTsKKwlkdWtfbWVtbW92ZV91bnNhZmUoKHZvaWQg KikgcF9kc3QsCisJICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHBfc3JjLAorCSAg ICAgICAgICAgICAgICAgICAoc2l6ZV90KSBtb3ZlX3N6KTsKKwlidy0+cCAtPSBsZW47Cit9CisK Ky8qCisgKiAgTWFjcm8gc3VwcG9ydCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcvd3JpdGluZyByYXcg ZGF0YS4KKyAqCisgKiAgVGhlc2UgYXJlIGRvbmUgdXNpbmcgbWVtcGN5IHRvIGVuc3VyZSB0aGV5 J3JlIHZhbGlkIGV2ZW4gZm9yIHVuYWxpZ25lZAorICogIHJlYWRzL3dyaXRlcyBvbiBwbGF0Zm9y bXMgd2hlcmUgYWxpZ25tZW50IGNvdW50cy4gIE9uIHg4NiBhdCBsZWFzdCBnY2MKKyAqICBpcyBh YmxlIHRvIGNvbXBpbGUgdGhlc2UgaW50byBhIGJzd2FwK21vdi4gICJBbHdheXMgaW5saW5lIiBp cyB1c2VkIHRvCisgKiAgZW5zdXJlIHRoZXNlIG1hY3JvcyBjb21waWxlIHRvIG1pbmltYWwgY29k ZS4KKyAqCisgKiAgTm90IHJlYWxseSBidWZ3cml0ZXIgcmVsYXRlZCwgYnV0IGN1cnJlbnRseSB1 c2VkIHRvZ2V0aGVyLgorICovCisKK0RVS19JTlRFUk5BTCBEVUtfQUxXQVlTX0lOTElORSBkdWtf dWludDE2X3QgZHVrX3Jhd19yZWFkX3UxNl9iZShkdWtfdWludDhfdCAqKnApIHsKKwl1bmlvbiB7 CisJCWR1a191aW50OF90IGJbMl07CisJCWR1a191aW50MTZfdCB4OworCX0gdTsKKworCWR1a19t ZW1jcHkoKHZvaWQgKikgdS5iLCAoY29uc3Qgdm9pZCAqKSAoKnApLCAoc2l6ZV90KSAyKTsKKwl1 LnggPSBEVUtfTlRPSDE2KHUueCk7CisJKnAgKz0gMjsKKwlyZXR1cm4gdS54OworfQorCitEVUtf SU5URVJOQUwgRFVLX0FMV0FZU19JTkxJTkUgZHVrX3VpbnQzMl90IGR1a19yYXdfcmVhZF91MzJf YmUoZHVrX3VpbnQ4X3QgKipwKSB7CisJdW5pb24geworCQlkdWtfdWludDhfdCBiWzRdOworCQlk dWtfdWludDMyX3QgeDsKKwl9IHU7CisKKwlkdWtfbWVtY3B5KCh2b2lkICopIHUuYiwgKGNvbnN0 IHZvaWQgKikgKCpwKSwgKHNpemVfdCkgNCk7CisJdS54ID0gRFVLX05UT0gzMih1LngpOworCSpw ICs9IDQ7CisJcmV0dXJuIHUueDsKK30KKworRFVLX0lOVEVSTkFMIERVS19BTFdBWVNfSU5MSU5F IGR1a19kb3VibGVfdCBkdWtfcmF3X3JlYWRfZG91YmxlX2JlKGR1a191aW50OF90ICoqcCkgewor CWR1a19kb3VibGVfdW5pb24gZHU7CisJdW5pb24geworCQlkdWtfdWludDhfdCBiWzRdOworCQlk dWtfdWludDMyX3QgeDsKKwl9IHU7CisKKwlkdWtfbWVtY3B5KCh2b2lkICopIHUuYiwgKGNvbnN0 IHZvaWQgKikgKCpwKSwgKHNpemVfdCkgNCk7CisJdS54ID0gRFVLX05UT0gzMih1LngpOworCWR1 LnVpW0RVS19EQkxfSURYX1VJMF0gPSB1Lng7CisJZHVrX21lbWNweSgodm9pZCAqKSB1LmIsIChj b25zdCB2b2lkICopICgqcCArIDQpLCAoc2l6ZV90KSA0KTsKKwl1LnggPSBEVUtfTlRPSDMyKHUu eCk7CisJZHUudWlbRFVLX0RCTF9JRFhfVUkxXSA9IHUueDsKKwkqcCArPSA4OworCisJcmV0dXJu IGR1LmQ7Cit9CisKK0RVS19JTlRFUk5BTCBEVUtfQUxXQVlTX0lOTElORSB2b2lkIGR1a19yYXdf d3JpdGVfdTE2X2JlKGR1a191aW50OF90ICoqcCwgZHVrX3VpbnQxNl90IHZhbCkgeworCXVuaW9u IHsKKwkJZHVrX3VpbnQ4X3QgYlsyXTsKKwkJZHVrX3VpbnQxNl90IHg7CisJfSB1OworCisJdS54 ID0gRFVLX0hUT04xNih2YWwpOworCWR1a19tZW1jcHkoKHZvaWQgKikgKCpwKSwgKGNvbnN0IHZv aWQgKikgdS5iLCAoc2l6ZV90KSAyKTsKKwkqcCArPSAyOworfQorCitEVUtfSU5URVJOQUwgRFVL X0FMV0FZU19JTkxJTkUgdm9pZCBkdWtfcmF3X3dyaXRlX3UzMl9iZShkdWtfdWludDhfdCAqKnAs IGR1a191aW50MzJfdCB2YWwpIHsKKwl1bmlvbiB7CisJCWR1a191aW50OF90IGJbNF07CisJCWR1 a191aW50MzJfdCB4OworCX0gdTsKKworCXUueCA9IERVS19IVE9OMzIodmFsKTsKKwlkdWtfbWVt Y3B5KCh2b2lkICopICgqcCksIChjb25zdCB2b2lkICopIHUuYiwgKHNpemVfdCkgNCk7CisJKnAg Kz0gNDsKK30KKworRFVLX0lOVEVSTkFMIERVS19BTFdBWVNfSU5MSU5FIHZvaWQgZHVrX3Jhd193 cml0ZV9kb3VibGVfYmUoZHVrX3VpbnQ4X3QgKipwLCBkdWtfZG91YmxlX3QgdmFsKSB7CisJZHVr X2RvdWJsZV91bmlvbiBkdTsKKwl1bmlvbiB7CisJCWR1a191aW50OF90IGJbNF07CisJCWR1a191 aW50MzJfdCB4OworCX0gdTsKKworCWR1LmQgPSB2YWw7CisJdS54ID0gZHUudWlbRFVLX0RCTF9J RFhfVUkwXTsKKwl1LnggPSBEVUtfSFRPTjMyKHUueCk7CisJZHVrX21lbWNweSgodm9pZCAqKSAo KnApLCAoY29uc3Qgdm9pZCAqKSB1LmIsIChzaXplX3QpIDQpOworCXUueCA9IGR1LnVpW0RVS19E QkxfSURYX1VJMV07CisJdS54ID0gRFVLX0hUT04zMih1LngpOworCWR1a19tZW1jcHkoKHZvaWQg KikgKCpwICsgNCksIChjb25zdCB2b2lkICopIHUuYiwgKHNpemVfdCkgNCk7CisJKnAgKz0gODsK K30KKy8qCisgKiAgQ2FzdCBoZWxwZXJzLgorICoKKyAqICBDOTkrIGNvZXJjaW9uIGlzIGNoYWxs ZW5naW5nIHBvcnRhYmlsaXR5LXdpc2UgYmVjYXVzZSBvdXQtb2YtcmFuZ2UgY2FzdHMKKyAqICBt YXkgaW52b2tlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgb3IgZXZlbiB1bmRlZmluZWQgYmVoYXZp b3IuICBTZWUgZS5nLgorICogIGh0dHA6Ly9ibG9nLmZyYW1hLWMuY29tL2luZGV4LnBocD9wb3N0 LzIwMTMvMTAvMDkvT3ZlcmZsb3ctZmxvYXQtaW50ZWdlci4KKyAqCisgKiAgUHJvdmlkZSBleHBs aWNpdCBjYXN0IGhlbHBlcnMgd2hpY2ggdHJ5IHRvIGF2b2lkIGltcGxlbWVudGF0aW9uIGRlZmlu ZWQKKyAqICBvciB1bmRlZmluZWQgYmVoYXZpb3IuICBUaGVzZSBoZWxwZXJzIGNhbiB0aGVuIGJl IHNpbXBsaWZpZWQgaW4gdGhlIHZhc3QKKyAqICBtYWpvcml0eSBvZiBjYXNlcyB3aGVyZSB0aGUg aW1wbGVtZW50YXRpb24gZGVmaW5lZCBvciB1bmRlZmluZWQgYmVoYXZpb3IKKyAqICBpcyBub3Qg cHJvYmxlbWF0aWMuCisgKi8KKworLyogI2luY2x1ZGUgZHVrX2ludGVybmFsLmggLT4gYWxyZWFk eSBpbmNsdWRlZCAqLworCisvKiBQb3J0YWJsZSBkb3VibGUtdG8taW50ZWdlciBjYXN0IHdoaWNo IGF2b2lkcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIGF2b2lkcworICogcmVseWluZyBvbiBmbWlu KCksIGZtYXgoKSwgb3Igb3RoZXIgaW50cmluc2ljcy4gIE91dC1vZi1yYW5nZSByZXN1bHRzIGFy ZQorICogbm90IGFzc3VtZWQgYnkgY2FsbGVyLCBidXQgaGVyZSB2YWx1ZSBpcyBjbGFtcGVkLCBO YU4gY29udmVydHMgdG8gbWludmFsLgorICovCisjZGVmaW5lIERVS19fRE9VQkxFX0lOVF9DQVNU MSh0bmFtZSxtaW52YWwsbWF4dmFsKSAgZG8geyBcCisJCWlmIChEVUtfTElLRUxZKHggPj0gKGR1 a19kb3VibGVfdCkgKG1pbnZhbCkpKSB7IFwKKwkJCURVS19BU1NFUlQoIURVS19JU05BTih4KSk7 IFwKKwkJCWlmIChEVUtfTElLRUxZKHggPD0gKGR1a19kb3VibGVfdCkgKG1heHZhbCkpKSB7IFwK KwkJCQlyZXR1cm4gKHRuYW1lKSB4OyBcCisJCQl9IGVsc2UgeyBcCisJCQkJcmV0dXJuICh0bmFt ZSkgKG1heHZhbCk7IFwKKwkJCX0gXAorCQl9IGVsc2UgeyBcCisJCQkvKiBOYU4gb3IgYmVsb3cg bWludmFsLiAgU2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVzdWx0IFwKKwkJCSAqIGZv ciBvdXQtb2YtcmFuZ2UgdmFsdWVzLCBqdXN0IHJldHVybiB0aGUgbWluaW11bSB2YWx1ZSBmb3Ig XAorCQkJICogYm90aC4gXAorCQkJICovIFwKKwkJCXJldHVybiAodG5hbWUpIChtaW52YWwpOyBc CisJCX0gXAorCX0gd2hpbGUgKDApCisKKy8qIFJlbHkgb24gc3BlY2lmaWMgTmFOIGJlaGF2aW9y IGZvciBkdWtfZG91YmxlX3tmbWluLGZtYXh9KCk6IGlmIGVpdGhlcgorICogYXJndW1lbnQgaXMg YSBOYU4sIHJldHVybiB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgVGhpcyBhdm9pZHMgYQorICogTmFO LXRvLWludGVnZXIgY2FzdCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuCisgKi8KKyNkZWZp bmUgRFVLX19ET1VCTEVfSU5UX0NBU1QyKHRuYW1lLG1pbnZhbCxtYXh2YWwpICBkbyB7IFwKKwkJ cmV0dXJuICh0bmFtZSkgZHVrX2RvdWJsZV9mbWluKGR1a19kb3VibGVfZm1heCh4LCAoZHVrX2Rv dWJsZV90KSAobWludmFsKSksIChkdWtfZG91YmxlX3QpIChtYXh2YWwpKTsgXAorCX0gd2hpbGUg KDApCisKKy8qIEFub3RoZXIgc29sdXRpb24gd2hpY2ggZG9lc24ndCBuZWVkIEM5OSsgYmVoYXZp b3IgZm9yIGZtaW4oKSBhbmQgZm1heCgpLiAqLworI2RlZmluZSBEVUtfX0RPVUJMRV9JTlRfQ0FT VDModG5hbWUsbWludmFsLG1heHZhbCkgIGRvIHsgXAorCQlpZiAoRFVLX0lTTkFOKHgpKSB7IFwK KwkJCS8qIDAgb3IgYW55IG90aGVyIHZhbHVlIGlzIGZpbmUuICovIFwKKwkJCXJldHVybiAodG5h bWUpIDA7IFwKKwkJfSBlbHNlIFwKKwkJCXJldHVybiAodG5hbWUpIERVS19GTUlOKERVS19GTUFY KHgsIChkdWtfZG91YmxlX3QpIChtaW52YWwpKSwgKGR1a19kb3VibGVfdCkgKG1heHZhbCkpOyBc CisJCX0gXAorCX0gd2hpbGUgKDApCisKKy8qIEM5OSsgc29sdXRpb246IHJlbGllcyBvbiBzcGVj aWZpYyBmbWluKCkgYW5kIGZtYXgoKSBiZWhhdmlvciBpbiBDOTk6IGlmCisgKiBvbmUgYXJndW1l bnQgaXMgTmFOIGJ1dCB0aGUgb3RoZXIgaXNuJ3QsIHRoZSBub24tTmFOIGFyZ3VtZW50IGlzIHJl dHVybmVkLgorICogQmVjYXVzZSB0aGUgbGltaXRzIGFyZSBub24tTmFOIHZhbHVlcywgZXhwbGlj aXQgTmFOIGNoZWNrIGlzIG5vdCBuZWVkZWQuCisgKiBUaGlzIG1heSBub3Qgd29yayBvbiBhbGwg bGVnYWN5IHBsYXRmb3JtcywgYW5kIGFsc28gZG9lc24ndCBzZWVtIHRvIGlubGluZQorICogdGhl IGZtaW4oKSBhbmQgZm1heCgpIGNhbGxzICh1bmxlc3Mgb25lIHVzZXMgLWZmYXN0LW1hdGggd2hp Y2ggd2UgZG9uJ3QKKyAqIHN1cHBvcnQpLgorICovCisjZGVmaW5lIERVS19fRE9VQkxFX0lOVF9D QVNUNCh0bmFtZSxtaW52YWwsbWF4dmFsKSAgZG8geyBcCisJCXJldHVybiAodG5hbWUpIERVS19G TUlOKERVS19GTUFYKHgsIChkdWtfZG91YmxlX3QpIChtaW52YWwpKSwgKGR1a19kb3VibGVfdCkg KG1heHZhbCkpOyBcCisJfSB3aGlsZSAoMCkKKworRFVLX0lOVEVSTkFMIGR1a19pbnRfdCBkdWtf ZG91YmxlX3RvX2ludF90KGR1a19kb3VibGVfdCB4KSB7CisjaWYgZGVmaW5lZChEVUtfVVNFX0FM TE9XX1VOREVGSU5FRF9CRUhBVklPUikKKwkvKiBSZWFsIHdvcmxkIHNvbHV0aW9uOiBhbG1vc3Qg YW55IHByYWN0aWNhbCBwbGF0Zm9ybSB3aWxsIHByb3ZpZGUKKwkgKiBhbiBpbnRlZ2VyIHZhbHVl IHdpdGhvdXQgYW55IGd1YXJhbnRlZXMgd2hhdCBpdCBpcyAod2hpY2ggaXMgZmluZSkuCisJICov CisJcmV0dXJuIChkdWtfaW50X3QpIHg7CisjZWxzZQorCURVS19fRE9VQkxFX0lOVF9DQVNUMShk dWtfaW50X3QsIERVS19JTlRfTUlOLCBEVUtfSU5UX01BWCk7CisjZW5kaWYKK30KKworRFVLX0lO VEVSTkFMIGR1a191aW50X3QgZHVrX2RvdWJsZV90b191aW50X3QoZHVrX2RvdWJsZV90IHgpIHsK KyNpZiBkZWZpbmVkKERVS19VU0VfQUxMT1dfVU5ERUZJTkVEX0JFSEFWSU9SKQorCXJldHVybiAo ZHVrX3VpbnRfdCkgeDsKKyNlbHNlCisJRFVLX19ET1VCTEVfSU5UX0NBU1QxKGR1a191aW50X3Qs IERVS19VSU5UX01JTiwgRFVLX1VJTlRfTUFYKTsKKyNlbmRpZgorfQorCitEVUtfSU5URVJOQUwg ZHVrX2ludDMyX3QgZHVrX2RvdWJsZV90b19pbnQzMl90KGR1a19kb3VibGVfdCB4KSB7CisjaWYg ZGVmaW5lZChEVUtfVVNFX0FMTE9XX1VOREVGSU5FRF9CRUhBVklPUikKKwlyZXR1cm4gKGR1a19p bnQzMl90KSB4OworI2Vsc2UKKwlEVUtfX0RPVUJMRV9JTlRfQ0FTVDEoZHVrX2ludDMyX3QsIERV S19JTlQzMl9NSU4sIERVS19JTlQzMl9NQVgpOworI2VuZGlmCit9CisKK0RVS19JTlRFUk5BTCBk dWtfdWludDMyX3QgZHVrX2RvdWJsZV90b191aW50MzJfdChkdWtfZG91YmxlX3QgeCkgeworI2lm IGRlZmluZWQoRFVLX1VTRV9BTExPV19VTkRFRklORURfQkVIQVZJT1IpCisJcmV0dXJuIChkdWtf dWludDMyX3QpIHg7CisjZWxzZQorCURVS19fRE9VQkxFX0lOVF9DQVNUMShkdWtfdWludDMyX3Qs IERVS19VSU5UMzJfTUlOLCBEVUtfVUlOVDMyX01BWCk7CisjZW5kaWYKK30KKworLyogTGFyZ2Vz dCBJRUVFIGRvdWJsZSB0aGF0IGRvZXNuJ3Qgcm91bmQgdG8gaW5maW5pdHkgaW4gdGhlIGRlZmF1 bHQgcm91bmRpbmcKKyAqIG1vZGUuICBUaGUgZXhhY3QgbWlkcG9pbnQgYmV0d2VlbiAoMSAtIDJe KC0yNCkpICogMl4xMjggYW5kIDJeMTI4IHJvdW5kcyB0bworICogaW5maW5pdHksIGF0IGxlYXN0 IG9uIHg2NC4gIFRoaXMgbnVtYmVyIGlzIG9uZSBkb3VibGUgdW5pdCBiZWxvdyB0aGF0CisgKiBt aWRwb2ludC4gIFNlZSBtaXNjL2Zsb2F0X2Nhc3QuYy4KKyAqLworI2RlZmluZSBEVUtfX0ZMT0FU X1JPVU5EX0xJTUlUICAgICAgMzQwMjgyMzU2Nzc5NzMzNjIzODU4NjA3NTMyNTAwOTgwODU4ODgw LjAKKworLyogTWF4aW11bSBJRUVFIGZsb2F0LiAgRG91YmxlLXRvLWZsb2F0IGNvbnZlcnNpb24g YWJvdmUgdGhpcyB3b3VsZCBiZSBvdXQgb2YKKyAqIHJhbmdlIGFuZCB0aHVzIHRlY2huaWNhbGx5 IHVuZGVmaW5lZCBiZWhhdmlvci4KKyAqLworI2RlZmluZSBEVUtfX0ZMT0FUX01BWCAgICAgICAg ICAgICAgMzQwMjgyMzQ2NjM4NTI4ODU5ODExNzA0MTgzNDg0NTE2OTI1NDQwLjAKKworRFVLX0lO VEVSTkFMIGR1a19mbG9hdF90IGR1a19kb3VibGVfdG9fZmxvYXRfdChkdWtfZG91YmxlX3QgeCkg eworCS8qIEV2ZW4gYSBkb3VibGUtdG8tZmxvYXQgY2FzdCBpcyB0ZWNobmljYWxseSB1bmRlZmlu ZWQgYmVoYXZpb3IgaWYKKwkgKiB0aGUgZG91YmxlIGlzIG91dC1vZi1yYW5nZS4gIEM5OSBTZWN0 aW9uIDYuMy4xLjU6CisJICoKKwkgKiAgIElmIHRoZSB2YWx1ZSBiZWluZyBjb252ZXJ0ZWQgaXMg aW4gdGhlIHJhbmdlIG9mIHZhbHVlcyB0aGF0IGNhbgorCSAqICAgYmUgcmVwcmVzZW50ZWQgYnV0 IGNhbm5vdCBiZSByZXByZXNlbnRlZCBleGFjdGx5LCB0aGUgcmVzdWx0IGlzCisJICogICBlaXRo ZXIgdGhlIG5lYXJlc3QgaGlnaGVyIG9yIG5lYXJlc3QgbG93ZXIgcmVwcmVzZW50YWJsZSB2YWx1 ZSwKKwkgKiAgIGNob3NlbiBpbiBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG1hbm5lci4gIElm IHRoZSB2YWx1ZSBiZWluZworCSAqICAgY29udmVydGVkIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9m IHZhbHVlcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCwKKwkgKiAgIHRoZSBiZWhhdmlvciBpcyB1 bmRlZmluZWQuCisJICovCisjaWYgZGVmaW5lZChEVUtfVVNFX0FMTE9XX1VOREVGSU5FRF9CRUhB VklPUikKKwlyZXR1cm4gKGR1a19mbG9hdF90KSB4OworI2Vsc2UKKwlkdWtfZG91YmxlX3QgdDsK KworCXQgPSBEVUtfRkFCUyh4KTsKKwlEVUtfQVNTRVJUKChEVUtfSVNOQU4oeCkgJiYgRFVLX0lT TkFOKHQpKSB8fAorCSAgICAgICAgICAgKCFEVUtfSVNOQU4oeCkgJiYgIURVS19JU05BTih0KSkp OworCisJaWYgKERVS19MSUtFTFkodCA8PSBEVUtfX0ZMT0FUX01BWCkpIHsKKwkJLyogU3RhbmRh cmQgaW4tcmFuZ2UgY2FzZSwgdHJ5IHRvIGdldCBoZXJlIHdpdGggYSBtaW5pbXVtCisJCSAqIG51 bWJlciBvZiBjaGVja3MgYW5kIGJyYW5jaGVzLgorCQkgKi8KKwkJRFVLX0FTU0VSVCghRFVLX0lT TkFOKHgpKTsKKwkJcmV0dXJuIChkdWtfZmxvYXRfdCkgeDsKKwl9IGVsc2UgaWYgKHQgPD0gRFVL X19GTE9BVF9ST1VORF9MSU1JVCkgeworCQkvKiBPdXQtb2YtcmFuZ2UsIGJ1dCByb3VuZHMgdG8g bWluL21heCBmbG9hdC4gKi8KKwkJRFVLX0FTU0VSVCghRFVLX0lTTkFOKHgpKTsKKwkJaWYgKHgg PCAwLjApIHsKKwkJCXJldHVybiAoZHVrX2Zsb2F0X3QpIC1EVUtfX0ZMT0FUX01BWDsKKwkJfSBl bHNlIHsKKwkJCXJldHVybiAoZHVrX2Zsb2F0X3QpIERVS19fRkxPQVRfTUFYOworCQl9CisJfSBl bHNlIGlmIChEVUtfSVNOQU4oeCkpIHsKKwkJLyogQXNzdW1lcyBkb3VibGUgTmFOIC0+IGZsb2F0 IE5hTiBjb25zaWRlcmVkICJpbiByYW5nZSIuICovCisJCURVS19BU1NFUlQoRFVLX0lTTkFOKHgp KTsKKwkJcmV0dXJuIChkdWtfZmxvYXRfdCkgeDsKKwl9IGVsc2UgeworCQkvKiBPdXQtb2YtcmFu Z2UsIHJvdW5kcyB0byArLy0gSW5maW5pdHkuICovCisJCWlmICh4IDwgMC4wKSB7CisJCQlyZXR1 cm4gKGR1a19mbG9hdF90KSAtRFVLX0RPVUJMRV9JTkZJTklUWTsKKwkJfSBlbHNlIHsKKwkJCXJl dHVybiAoZHVrX2Zsb2F0X3QpIERVS19ET1VCTEVfSU5GSU5JVFk7CisJCX0KKwl9CisjZW5kaWYK K30KKworLyogYXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fRE9VQkxFX0lOVF9DQVNU MQorI3VuZGVmIERVS19fRE9VQkxFX0lOVF9DQVNUMgorI3VuZGVmIERVS19fRE9VQkxFX0lOVF9D QVNUMworI3VuZGVmIERVS19fRE9VQkxFX0lOVF9DQVNUNAorI3VuZGVmIERVS19fRkxPQVRfTUFY CisjdW5kZWYgRFVLX19GTE9BVF9ST1VORF9MSU1JVAorLyoKKyAqICBJRUVFIGRvdWJsZSBoZWxw ZXJzLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVk ZWQgKi8KKworRFVLX0lOVEVSTkFMIGR1a19ib29sX3QgZHVrX2RvdWJsZV9pc19hbnlpbmYoZHVr X2RvdWJsZV90IHgpIHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCWR1LmQgPSB4OworCXJldHVy biBEVUtfREJMVU5JT05fSVNfQU5ZSU5GKCZkdSk7Cit9CisKK0RVS19JTlRFUk5BTCBkdWtfYm9v bF90IGR1a19kb3VibGVfaXNfcG9zaW5mKGR1a19kb3VibGVfdCB4KSB7CisJZHVrX2RvdWJsZV91 bmlvbiBkdTsKKwlkdS5kID0geDsKKwlyZXR1cm4gRFVLX0RCTFVOSU9OX0lTX1BPU0lORigmZHUp OworfQorCitEVUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfZG91YmxlX2lzX25lZ2luZihkdWtf ZG91YmxlX3QgeCkgeworCWR1a19kb3VibGVfdW5pb24gZHU7CisJZHUuZCA9IHg7CisJcmV0dXJu IERVS19EQkxVTklPTl9JU19ORUdJTkYoJmR1KTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19ib29s X3QgZHVrX2RvdWJsZV9pc19uYW4oZHVrX2RvdWJsZV90IHgpIHsKKwlkdWtfZG91YmxlX3VuaW9u IGR1OworCWR1LmQgPSB4OworCS8qIEFzc3VtZXMgd2UncmUgZGVhbGluZyB3aXRoIGEgRHVrdGFw ZSBpbnRlcm5hbCBOYU4gd2hpY2ggaXMKKwkgKiBOYU4gbm9ybWFsaXplZCBpZiBkdWtfdHZhbCBy ZXF1aXJlcyBpdC4KKwkgKi8KKwlEVUtfQVNTRVJUKERVS19EQkxVTklPTl9JU19OT1JNQUxJWkVE KCZkdSkpOworCXJldHVybiBEVUtfREJMVU5JT05fSVNfTkFOKCZkdSk7Cit9CisKK0RVS19JTlRF Uk5BTCBkdWtfYm9vbF90IGR1a19kb3VibGVfaXNfbmFuX29yX3plcm8oZHVrX2RvdWJsZV90IHgp IHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCWR1LmQgPSB4OworCS8qIEFzc3VtZXMgd2UncmUg ZGVhbGluZyB3aXRoIGEgRHVrdGFwZSBpbnRlcm5hbCBOYU4gd2hpY2ggaXMKKwkgKiBOYU4gbm9y bWFsaXplZCBpZiBkdWtfdHZhbCByZXF1aXJlcyBpdC4KKwkgKi8KKwlEVUtfQVNTRVJUKERVS19E QkxVTklPTl9JU19OT1JNQUxJWkVEKCZkdSkpOworCXJldHVybiBEVUtfREJMVU5JT05fSVNfTkFO KCZkdSkgfHwgRFVLX0RCTFVOSU9OX0lTX0FOWVpFUk8oJmR1KTsKK30KKworRFVLX0lOVEVSTkFM IGR1a19ib29sX3QgZHVrX2RvdWJsZV9pc19uYW5fb3JfaW5mKGR1a19kb3VibGVfdCB4KSB7CisJ ZHVrX2RvdWJsZV91bmlvbiBkdTsKKwlkdS5kID0geDsKKwkvKiBJZiBleHBvbmVudCBpcyAweDdG RiB0aGUgYXJndW1lbnQgaXMgZWl0aGVyIGEgTmFOIG9yIGFuCisJICogaW5maW5pdHkuICBXZSBk b24ndCBuZWVkIHRvIGNoZWNrIGFueSBvdGhlciBmaWVsZHMuCisJICovCisjaWYgZGVmaW5lZChE VUtfVVNFXzY0QklUX09QUykKKyNpZiBkZWZpbmVkKERVS19VU0VfRE9VQkxFX01FKQorCXJldHVy biAoZHUudWxsW0RVS19EQkxfSURYX1VMTDBdICYgRFVLX1U2NF9DT05TVEFOVCgweDAwMDAwMDAw N2ZmMDAwMDApKSA9PSBEVUtfVTY0X0NPTlNUQU5UKDB4MDAwMDAwMDA3ZmYwMDAwMCk7CisjZWxz ZQorCXJldHVybiAoZHUudWxsW0RVS19EQkxfSURYX1VMTDBdICYgRFVLX1U2NF9DT05TVEFOVCgw eDdmZjAwMDAwMDAwMDAwMDApKSA9PSBEVUtfVTY0X0NPTlNUQU5UKDB4N2ZmMDAwMDAwMDAwMDAw MCk7CisjZW5kaWYKKyNlbHNlCisJcmV0dXJuIChkdS51aVtEVUtfREJMX0lEWF9VSTBdICYgMHg3 ZmYwMDAwMFVMKSA9PSAweDdmZjAwMDAwVUw7CisjZW5kaWYKK30KKworRFVLX0lOVEVSTkFMIGR1 a19ib29sX3QgZHVrX2RvdWJsZV9pc19uYW5femVyb19pbmYoZHVrX2RvdWJsZV90IHgpIHsKKwlk dWtfZG91YmxlX3VuaW9uIGR1OworI2lmIGRlZmluZWQoRFVLX1VTRV82NEJJVF9PUFMpCisJZHVr X3VpbnQ2NF90IHQ7CisjZWxzZQorCWR1a191aW50MzJfdCB0OworI2VuZGlmCisJZHUuZCA9IHg7 CisjaWYgZGVmaW5lZChEVUtfVVNFXzY0QklUX09QUykKKyNpZiBkZWZpbmVkKERVS19VU0VfRE9V QkxFX01FKQorCXQgPSBkdS51bGxbRFVLX0RCTF9JRFhfVUxMMF0gJiBEVUtfVTY0X0NPTlNUQU5U KDB4MDAwMDAwMDA3ZmYwMDAwMCk7CisJaWYgKHQgPT0gRFVLX1U2NF9DT05TVEFOVCgweDAwMDAw MDAwMDAwMDAwMDApKSB7CisJCXQgPSBkdS51bGxbRFVLX0RCTF9JRFhfVUxMMF0gJiBEVUtfVTY0 X0NPTlNUQU5UKDB4MDAwMDAwMDA4MDAwMDAwMCk7CisJCXJldHVybiB0ID09IDA7CisJfQorCWlm ICh0ID09IERVS19VNjRfQ09OU1RBTlQoMHgwMDAwMDAwMDdmZjAwMDAwKSkgeworCQlyZXR1cm4g MTsKKwl9CisjZWxzZQorCXQgPSBkdS51bGxbRFVLX0RCTF9JRFhfVUxMMF0gJiBEVUtfVTY0X0NP TlNUQU5UKDB4N2ZmMDAwMDAwMDAwMDAwMCk7CisJaWYgKHQgPT0gRFVLX1U2NF9DT05TVEFOVCgw eDAwMDAwMDAwMDAwMDAwMDApKSB7CisJCXQgPSBkdS51bGxbRFVLX0RCTF9JRFhfVUxMMF0gJiBE VUtfVTY0X0NPTlNUQU5UKDB4ODAwMDAwMDAwMDAwMDAwMCk7CisJCXJldHVybiB0ID09IDA7CisJ fQorCWlmICh0ID09IERVS19VNjRfQ09OU1RBTlQoMHg3ZmYwMDAwMDAwMDAwMDAwKSkgeworCQly ZXR1cm4gMTsKKwl9CisjZW5kaWYKKyNlbHNlCisJdCA9IGR1LnVpW0RVS19EQkxfSURYX1VJMF0g JiAweDdmZjAwMDAwVUw7CisJaWYgKHQgPT0gMHgwMDAwMDAwMFVMKSB7CisJCXJldHVybiBEVUtf REJMVU5JT05fSVNfQU5ZWkVSTygmZHUpOworCX0KKwlpZiAodCA9PSAweDdmZjAwMDAwVUwpIHsK KwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfc21hbGxfdWludF90IGR1a19kb3VibGVfc2lnbmJpdChkdWtfZG91YmxlX3QgeCkgeworCWR1 a19kb3VibGVfdW5pb24gZHU7CisJZHUuZCA9IHg7CisJcmV0dXJuIChkdWtfc21hbGxfdWludF90 KSBEVUtfREJMVU5JT05fR0VUX1NJR05CSVQoJmR1KTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19k b3VibGVfdCBkdWtfZG91YmxlX3RydW5jX3Rvd2FyZHNfemVybyhkdWtfZG91YmxlX3QgeCkgewor CS8qIFhYWDogb3B0aW1pemUgKi8KKwlkdWtfc21hbGxfdWludF90IHMgPSBkdWtfZG91YmxlX3Np Z25iaXQoeCk7CisJeCA9IERVS19GTE9PUihEVUtfRkFCUyh4KSk7ICAvKiB0cnVuY2F0ZSB0b3dh cmRzIHplcm8gKi8KKwlpZiAocykgeworCQl4ID0gLXg7CisJfQorCXJldHVybiB4OworfQorCitE VUtfSU5URVJOQUwgZHVrX2Jvb2xfdCBkdWtfZG91YmxlX3NhbWVfc2lnbihkdWtfZG91YmxlX3Qg eCwgZHVrX2RvdWJsZV90IHkpIHsKKwlkdWtfZG91YmxlX3VuaW9uIGR1MTsKKwlkdWtfZG91Ymxl X3VuaW9uIGR1MjsKKwlkdTEuZCA9IHg7CisJZHUyLmQgPSB5OworCisJcmV0dXJuICgoKGR1MS51 aVtEVUtfREJMX0lEWF9VSTBdIF4gZHUyLnVpW0RVS19EQkxfSURYX1VJMF0pICYgMHg4MDAwMDAw MFVMKSA9PSAwKTsKK30KKworRFVLX0lOVEVSTkFMIGR1a19kb3VibGVfdCBkdWtfZG91YmxlX2Zt aW4oZHVrX2RvdWJsZV90IHgsIGR1a19kb3VibGVfdCB5KSB7CisJLyogRG9lc24ndCByZXBsaWNh dGUgZm1pbigpIGJlaGF2aW9yIGV4YWN0bHk6IGZvciBmbWluKCkgaWYgb25lCisJICogYXJndW1l bnQgaXMgYSBOYU4sIHRoZSBvdGhlciBhcmd1bWVudCBzaG91bGQgYmUgcmV0dXJuZWQuCisJICog RHVrdGFwZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBiZWhhdmlvciBzbyB0aGUgcmVwbGFjZW1lbnQg Y2FuCisJICogYmUgc2ltcGxpZmllZC4KKwkgKi8KKwlyZXR1cm4gKHggPCB5ID8geCA6IHkpOwor fQorCitEVUtfSU5URVJOQUwgZHVrX2RvdWJsZV90IGR1a19kb3VibGVfZm1heChkdWtfZG91Ymxl X3QgeCwgZHVrX2RvdWJsZV90IHkpIHsKKwkvKiBEb2Vzbid0IHJlcGxpY2F0ZSBmbWF4KCkgYmVo YXZpb3IgZXhhY3RseTogZm9yIGZtYXgoKSBpZiBvbmUKKwkgKiBhcmd1bWVudCBpcyBhIE5hTiwg dGhlIG90aGVyIGFyZ3VtZW50IHNob3VsZCBiZSByZXR1cm5lZC4KKwkgKiBEdWt0YXBlIGRvZXNu J3QgcmVseSBvbiB0aGlzIGJlaGF2aW9yIHNvIHRoZSByZXBsYWNlbWVudCBjYW4KKwkgKiBiZSBz aW1wbGlmaWVkLgorCSAqLworCXJldHVybiAoeCA+IHkgPyB4IDogeSk7Cit9CisKK0RVS19JTlRF Uk5BTCBkdWtfYm9vbF90IGR1a19kb3VibGVfaXNfZmluaXRlKGR1a19kb3VibGVfdCB4KSB7CisJ cmV0dXJuICFkdWtfZG91YmxlX2lzX25hbl9vcl9pbmYoeCk7Cit9CisKK0RVS19JTlRFUk5BTCBk dWtfYm9vbF90IGR1a19kb3VibGVfaXNfaW50ZWdlcihkdWtfZG91YmxlX3QgeCkgeworCWlmIChk dWtfZG91YmxlX2lzX25hbl9vcl9pbmYoeCkpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJ cmV0dXJuIGR1a19qc190b2ludGVnZXJfbnVtYmVyKHgpID09IHg7CisJfQorfQorCitEVUtfSU5U RVJOQUwgZHVrX2Jvb2xfdCBkdWtfZG91YmxlX2lzX3NhZmVfaW50ZWdlcihkdWtfZG91YmxlX3Qg eCkgeworCS8qID4+PiAyKio1My0xCisJICogOTAwNzE5OTI1NDc0MDk5MQorCSAqLworCXJldHVy biBkdWtfZG91YmxlX2lzX2ludGVnZXIoeCkgJiYgRFVLX0ZBQlMoeCkgPD0gOTAwNzE5OTI1NDc0 MDk5MS4wOworfQorCisvKiBDaGVjayB3aGV0aGVyIGEgZHVrX2RvdWJsZV90IGlzIGEgd2hvbGUg bnVtYmVyIGluIHRoZSAzMi1iaXQgcmFuZ2UgKHJlamVjdAorICogbmVnYXRpdmUgemVybyksIGFu ZCBpZiBzbywgcmV0dXJuIGEgZHVrX2ludDMyX3QuCisgKiBGb3IgY29tcGlsZXIgdXNlOiBkb24n dCBhbGxvdyBuZWdhdGl2ZSB6ZXJvIGFzIGl0IHdpbGwgY2F1c2UgdHJvdWJsZSB3aXRoCisgKiBM RElOVCtMRElOVFgsIHBvc2l0aXZlIHplcm8gaXMgT0suCisgKi8KK0RVS19JTlRFUk5BTCBkdWtf Ym9vbF90IGR1a19pc193aG9sZV9nZXRfaW50MzJfbm9uZWd6ZXJvKGR1a19kb3VibGVfdCB4LCBk dWtfaW50MzJfdCAqaXZhbCkgeworCWR1a19pbnQzMl90IHQ7CisKKwl0ID0gZHVrX2RvdWJsZV90 b19pbnQzMl90KHgpOworCWlmICghKChkdWtfZG91YmxlX3QpIHQgPT0geCkpIHsKKwkJcmV0dXJu IDA7CisJfQorCWlmICh0ID09IDApIHsKKwkJZHVrX2RvdWJsZV91bmlvbiBkdTsKKwkJZHUuZCA9 IHg7CisJCWlmIChEVUtfREJMVU5JT05fSEFTX1NJR05CSVQoJmR1KSkgeworCQkJcmV0dXJuIDA7 CisJCX0KKwl9CisJKml2YWwgPSB0OworCXJldHVybiAxOworfQorCisvKiBDaGVjayB3aGV0aGVy IGEgZHVrX2RvdWJsZV90IGlzIGEgd2hvbGUgbnVtYmVyIGluIHRoZSAzMi1iaXQgcmFuZ2UsIGFu ZCBpZgorICogc28sIHJldHVybiBhIGR1a19pbnQzMl90LgorICovCitEVUtfSU5URVJOQUwgZHVr X2Jvb2xfdCBkdWtfaXNfd2hvbGVfZ2V0X2ludDMyKGR1a19kb3VibGVfdCB4LCBkdWtfaW50MzJf dCAqaXZhbCkgeworCWR1a19pbnQzMl90IHQ7CisKKwl0ID0gZHVrX2RvdWJsZV90b19pbnQzMl90 KHgpOworCWlmICghKChkdWtfZG91YmxlX3QpIHQgPT0geCkpIHsKKwkJcmV0dXJuIDA7CisJfQor CSppdmFsID0gdDsKKwlyZXR1cm4gMTsKK30KKworLyogRGl2aXNpb246IGRpdmlzaW9uIGJ5IHpl cm8gaXMgdW5kZWZpbmVkIGJlaGF2aW9yIChhbmQgbWF5IGluIGZhY3QgdHJhcCkKKyAqIHNvIGl0 IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBvcnRhYmlsaXR5LgorICovCisKK0RVS19JTlRF Uk5BTCBEVUtfSU5MSU5FIGR1a19kb3VibGVfdCBkdWtfZG91YmxlX2RpdihkdWtfZG91YmxlX3Qg eCwgZHVrX2RvdWJsZV90IHkpIHsKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0FMTE9XX1VOREVGSU5F RF9CRUhBVklPUikKKwlpZiAoRFVLX1VOTElLRUxZKHkgPT0gMC4wKSkgeworCQkvKiBJbiBDOTkr IGRpdmlzaW9uIGJ5IHplcm8gaXMgdW5kZWZpbmVkIGJlaGF2aW9yIHNvCisJCSAqIGF2b2lkIGl0 IGVudGlyZWx5LiAgSG9wZWZ1bGx5IHRoZSBjb21waWxlciBpcworCQkgKiBzbWFydCBlbm91Z2gg dG8gYXZvaWQgZW1pdHRpbmcgYW55IGFjdHVhbCBjb2RlCisJCSAqIGJlY2F1c2UgYWxtb3N0IGFs bCBwcmFjdGljYWwgcGxhdGZvcm1zIGJlaGF2ZSBhcworCQkgKiBleHBlY3RlZC4KKwkJICovCisJ CWlmICh4ID4gMC4wKSB7CisJCQlpZiAoRFVLX1NJR05CSVQoeSkpIHsKKwkJCQlyZXR1cm4gLURV S19ET1VCTEVfSU5GSU5JVFk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBEVUtfRE9VQkxFX0lO RklOSVRZOworCQkJfQorCQl9IGVsc2UgaWYgKHggPCAwLjApIHsKKwkJCWlmIChEVUtfU0lHTkJJ VCh5KSkgeworCQkJCXJldHVybiBEVUtfRE9VQkxFX0lORklOSVRZOworCQkJfSBlbHNlIHsKKwkJ CQlyZXR1cm4gLURVS19ET1VCTEVfSU5GSU5JVFk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiAr Ly0gMCwgTmFOICovCisJCQlyZXR1cm4gRFVLX0RPVUJMRV9OQU47CisJCX0KKwl9CisjZW5kaWYK KworCXJldHVybiB4IC8geTsKK30KKy8qCisgKiAgSGFzaCBmdW5jdGlvbiBkdWtfdXRpbF9oYXNo Ynl0ZXMoKS4KKyAqCisgKiAgQ3VycmVudGx5LCAzMi1iaXQgTXVybXVySGFzaDIuCisgKgorICog IERvbid0IHJlbHkgb24gc3BlY2lmaWMgaGFzaCB2YWx1ZXM7IGhhc2ggZnVuY3Rpb24gbWF5IGJl IGVuZGlhbm5lc3MKKyAqICBkZXBlbmRlbnQsIGZvciBpbnN0YW5jZS4KKyAqLworCisvKiAjaW5j bHVkZSBkdWtfaW50ZXJuYWwuaCAtPiBhbHJlYWR5IGluY2x1ZGVkICovCisKKyNpZiBkZWZpbmVk KERVS19VU0VfU1RSSEFTSF9ERU5TRSkKKy8qICdtYWdpYycgY29uc3RhbnRzIGZvciBNdXJtdXJo YXNoMiAqLworI2RlZmluZSBEVUtfX01BR0lDX00gICgoZHVrX3VpbnQzMl90KSAweDViZDFlOTk1 VUwpCisjZGVmaW5lIERVS19fTUFHSUNfUiAgMjQKKworRFVLX0lOVEVSTkFMIGR1a191aW50MzJf dCBkdWtfdXRpbF9oYXNoYnl0ZXMoY29uc3QgZHVrX3VpbnQ4X3QgKmRhdGEsIGR1a19zaXplX3Qg bGVuLCBkdWtfdWludDMyX3Qgc2VlZCkgeworCWR1a191aW50MzJfdCBoID0gc2VlZCBeICgoZHVr X3VpbnQzMl90KSBsZW4pOworCisJd2hpbGUgKGxlbiA+PSA0KSB7CisJCS8qIFBvcnRhYmlsaXR5 IHdvcmthcm91bmQgaXMgcmVxdWlyZWQgZm9yIHBsYXRmb3JtcyB3aXRob3V0CisJCSAqIHVuYWxp Z25lZCBhY2Nlc3MuICBUaGUgcmVwbGFjZW1lbnQgY29kZSBlbXVsYXRlcyBsaXR0bGUKKwkJICog ZW5kaWFuIGFjY2VzcyBldmVuIG9uIGJpZyBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgd2hpY2ggaXMK KwkJICogT0sgYXMgbG9uZyBhcyBpdCBpcyBjb25zaXN0ZW50IGZvciBhIGJ1aWxkLgorCQkgKi8K KyNpZiBkZWZpbmVkKERVS19VU0VfSEFTSEJZVEVTX1VOQUxJR05FRF9VMzJfQUNDRVNTKQorCQlk dWtfdWludDMyX3QgayA9ICooKGNvbnN0IGR1a191aW50MzJfdCAqKSAoY29uc3Qgdm9pZCAqKSBk YXRhKTsKKyNlbHNlCisJCWR1a191aW50MzJfdCBrID0gKChkdWtfdWludDMyX3QpIGRhdGFbMF0p IHwKKwkJICAgICAgICAgICAgICAgICAoKChkdWtfdWludDMyX3QpIGRhdGFbMV0pIDw8IDgpIHwK KwkJICAgICAgICAgICAgICAgICAoKChkdWtfdWludDMyX3QpIGRhdGFbMl0pIDw8IDE2KSB8CisJ CSAgICAgICAgICAgICAgICAgKCgoZHVrX3VpbnQzMl90KSBkYXRhWzNdKSA8PCAyNCk7CisjZW5k aWYKKworCQlrICo9IERVS19fTUFHSUNfTTsKKwkJayBePSBrID4+IERVS19fTUFHSUNfUjsKKwkJ ayAqPSBEVUtfX01BR0lDX007CisJCWggKj0gRFVLX19NQUdJQ19NOworCQloIF49IGs7CisJCWRh dGEgKz0gNDsKKwkJbGVuIC09IDQ7CisJfQorCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDM6IGgg Xj0gZGF0YVsyXSA8PCAxNjsKKwljYXNlIDI6IGggXj0gZGF0YVsxXSA8PCA4OworCWNhc2UgMTog aCBePSBkYXRhWzBdOworCSAgICAgICAgaCAqPSBEVUtfX01BR0lDX007CisgICAgICAgIH0KKwor CWggXj0gaCA+PiAxMzsKKwloICo9IERVS19fTUFHSUNfTTsKKwloIF49IGggPj4gMTU7CisKKwly ZXR1cm4gaDsKK30KKyNlbmRpZiAgLyogRFVLX1VTRV9TVFJIQVNIX0RFTlNFICovCisKKy8qIGF1 dG9tYXRpYyB1bmRlZnMgKi8KKyN1bmRlZiBEVUtfX01BR0lDX00KKyN1bmRlZiBEVUtfX01BR0lD X1IKKy8qCisgKiAgTWVtb3J5IHV0aWxzLgorICovCisKKy8qICNpbmNsdWRlIGR1a19pbnRlcm5h bC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9BTExPV19V TkRFRklORURfQkVIQVZJT1IpCitEVUtfSU5URVJOQUwgRFVLX0lOTElORSBkdWtfc21hbGxfaW50 X3QgZHVrX21lbWNtcF91bnNhZmUoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBkdWtf c2l6ZV90IGxlbikgeworCURVS19BU1NFUlQoczEgIT0gTlVMTCB8fCBsZW4gPT0gMFUpOworCURV S19BU1NFUlQoczIgIT0gTlVMTCB8fCBsZW4gPT0gMFUpOworCXJldHVybiBEVUtfTUVNQ01QKHMx LCBzMiwgKHNpemVfdCkgbGVuKTsKK30KKworRFVLX0lOVEVSTkFMIERVS19JTkxJTkUgZHVrX3Nt YWxsX2ludF90IGR1a19tZW1jbXAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBkdWtf c2l6ZV90IGxlbikgeworCURVS19BU1NFUlQoczEgIT0gTlVMTCk7CisJRFVLX0FTU0VSVChzMiAh PSBOVUxMKTsKKwlyZXR1cm4gRFVLX01FTUNNUChzMSwgczIsIChzaXplX3QpIGxlbik7Cit9Cisj ZWxzZSAgLyogRFVLX1VTRV9BTExPV19VTkRFRklORURfQkVIQVZJT1IgKi8KK0RVS19JTlRFUk5B TCBEVUtfSU5MSU5FIGR1a19zbWFsbF9pbnRfdCBkdWtfbWVtY21wX3Vuc2FmZShjb25zdCB2b2lk ICpzMSwgY29uc3Qgdm9pZCAqczIsIGR1a19zaXplX3QgbGVuKSB7CisJRFVLX0FTU0VSVChzMSAh PSBOVUxMIHx8IGxlbiA9PSAwVSk7CisJRFVLX0FTU0VSVChzMiAhPSBOVUxMIHx8IGxlbiA9PSAw VSk7CisJaWYgKERVS19VTkxJS0VMWShsZW4gPT0gMFUpKSB7CisJCXJldHVybiAwOworCX0KKwlE VUtfQVNTRVJUKHMxICE9IE5VTEwpOworCURVS19BU1NFUlQoczIgIT0gTlVMTCk7CisJcmV0dXJu IGR1a19tZW1jbXAoczEsIHMyLCBsZW4pOworfQorCitEVUtfSU5URVJOQUwgRFVLX0lOTElORSBk dWtfc21hbGxfaW50X3QgZHVrX21lbWNtcChjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIs IGR1a19zaXplX3QgbGVuKSB7CisJRFVLX0FTU0VSVChzMSAhPSBOVUxMKTsKKwlEVUtfQVNTRVJU KHMyICE9IE5VTEwpOworCXJldHVybiBEVUtfTUVNQ01QKHMxLCBzMiwgKHNpemVfdCkgbGVuKTsK K30KKyNlbmRpZiAgLyogRFVLX1VTRV9BTExPV19VTkRFRklORURfQkVIQVZJT1IgKi8KKy8qCisg KiAgQSB0aW55IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHVzZWQgZm9yIE1hdGgucmFuZG9tKCkg YW5kIG90aGVyIGludGVybmFscy4KKyAqCisgKiAgRGVmYXVsdCBhbGdvcml0aG0gaXMgeG9yb3No aXJvMTI4KzogaHR0cDovL3hvcm9zaGlyby5kaS51bmltaS5pdC94b3Jvc2hpcm8xMjhwbHVzLmMK KyAqICB3aXRoIFNwbGl0TWl4NjQgc2VlZCBwcmVwYXJhdGlvbjogaHR0cDovL3hvcnNoaWZ0LmRp LnVuaW1pLml0L3NwbGl0bWl4NjQuYy4KKyAqCisgKiAgTG93IG1lbW9yeSB0YXJnZXRzIGFuZCB0 YXJnZXRzIHdpdGhvdXQgNjQtYml0IHR5cGVzIHVzZSBhIHNsaWdodGx5IHNtYWxsZXIKKyAqICAo YnV0IHNsb3dlcikgYWxnb3JpdGhtIGJ5IEFkaSBTaGFtaXI6CisgKiAgaHR0cDovL3d3dy53b29k bWFubi5jb20vZm9ydW0vYXJjaGl2ZS9pbmRleC5waHAvdC0zMTAwLmh0bWwuCisgKgorICovCisK Ky8qICNpbmNsdWRlIGR1a19pbnRlcm5hbC5oIC0+IGFscmVhZHkgaW5jbHVkZWQgKi8KKworI2lm ICFkZWZpbmVkKERVS19VU0VfR0VUX1JBTkRPTV9ET1VCTEUpCisKKyNpZiBkZWZpbmVkKERVS19V U0VfUFJFRkVSX1NJWkUpIHx8ICFkZWZpbmVkKERVS19VU0VfNjRCSVRfT1BTKQorI2RlZmluZSBE VUtfX1JBTkRPTV9TSEFNSVIzT1AKKyNlbHNlCisjZGVmaW5lIERVS19fUkFORE9NX1hPUk9TSElS TzEyOFBMVVMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfX1JBTkRPTV9TSEFNSVIzT1ApCisj ZGVmaW5lIERVS19fVVBEQVRFX1JORChybmQpIGRvIHsgXAorCQkocm5kKSArPSAoKHJuZCkgKiAo cm5kKSkgfCAweDA1VUw7IFwKKwkJKHJuZCkgPSAoKHJuZCkgJiAweGZmZmZmZmZmVUwpOyAgICAg ICAvKiBpZiBkdWtfdWludDMyX3QgaXMgZXhhY3RseSAzMiBiaXRzLCB0aGlzIGlzIGEgTk9QICov IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERVS19fUk5EX0JJVChybmQpICAoKHJuZCkgPj4g MzEpICAvKiBvbmx5IHVzZSB0aGUgaGlnaGVzdCBiaXQgKi8KKworRFVLX0lOVEVSTkFMIHZvaWQg ZHVrX3V0aWxfdGlueXJhbmRvbV9wcmVwYXJlX3NlZWQoZHVrX2h0aHJlYWQgKnRocikgeworCURV S19VTlJFRih0aHIpOyAgLyogTm90aGluZyBub3cuICovCit9CisKK0RVS19JTlRFUk5BTCBkdWtf ZG91YmxlX3QgZHVrX3V0aWxfdGlueXJhbmRvbV9nZXRfZG91YmxlKGR1a19odGhyZWFkICp0aHIp IHsKKwlkdWtfZG91YmxlX3QgdDsKKwlkdWtfc21hbGxfaW50X3QgbjsKKwlkdWtfdWludDMyX3Qg cm5kOworCisJcm5kID0gdGhyLT5oZWFwLT5ybmRfc3RhdGU7CisKKwluID0gNTM7ICAvKiBlbm91 Z2ggdG8gY292ZXIgdGhlIHdob2xlIG1hbnRpc3NhICovCisJdCA9IDAuMDsKKworCWRvIHsKKwkJ RFVLX19VUERBVEVfUk5EKHJuZCk7CisJCXQgKz0gRFVLX19STkRfQklUKHJuZCk7CisJCXQgLz0g Mi4wOworCX0gd2hpbGUgKC0tbik7CisKKwl0aHItPmhlYXAtPnJuZF9zdGF0ZSA9IHJuZDsKKwor CURVS19BU1NFUlQodCA+PSAoZHVrX2RvdWJsZV90KSAwLjApOworCURVS19BU1NFUlQodCA8IChk dWtfZG91YmxlX3QpIDEuMCk7CisKKwlyZXR1cm4gdDsKK30KKyNlbmRpZiAgLyogRFVLX19SQU5E T01fU0hBTUlSM09QICovCisKKyNpZiBkZWZpbmVkKERVS19fUkFORE9NX1hPUk9TSElSTzEyOFBM VVMpCitEVUtfTE9DQUwgRFVLX0FMV0FZU19JTkxJTkUgZHVrX3VpbnQ2NF90IGR1a19fcm5kX3Nw bGl0bWl4NjQoZHVrX3VpbnQ2NF90ICp4KSB7CisJZHVrX3VpbnQ2NF90IHo7CisJeiA9ICgqeCAr PSBEVUtfVTY0X0NPTlNUQU5UKDB4OUUzNzc5Qjk3RjRBN0MxNSkpOworCXogPSAoeiBeICh6ID4+ IDMwVSkpICogRFVLX1U2NF9DT05TVEFOVCgweEJGNTg0NzZEMUNFNEU1QjkpOworCXogPSAoeiBe ICh6ID4+IDI3VSkpICogRFVLX1U2NF9DT05TVEFOVCgweDk0RDA0OUJCMTMzMTExRUIpOworCXJl dHVybiB6IF4gKHogPj4gMzFVKTsKK30KKworRFVLX0xPQ0FMIERVS19BTFdBWVNfSU5MSU5FIGR1 a191aW50NjRfdCBkdWtfX3JuZF9yb3RsKGNvbnN0IGR1a191aW50NjRfdCB4LCBkdWtfc21hbGxf dWludF90IGspIHsKKwlyZXR1cm4gKHggPDwgaykgfCAoeCA+PiAoNjRVIC0gaykpOworfQorCitE VUtfTE9DQUwgRFVLX0FMV0FZU19JTkxJTkUgZHVrX3VpbnQ2NF90IGR1a19feG9yb3NoaXJvMTI4 cGx1cyhkdWtfdWludDY0X3QgKnMpIHsKKwlkdWtfdWludDY0X3QgczA7CisJZHVrX3VpbnQ2NF90 IHMxOworCWR1a191aW50NjRfdCByZXM7CisKKwlzMCA9IHNbMF07CisJczEgPSBzWzFdOworCXJl cyA9IHMwICsgczE7CisJczEgXj0gczA7CisJc1swXSA9IGR1a19fcm5kX3JvdGwoczAsIDU1KSBe IHMxIF4gKHMxIDw8IDE0VSk7CisJc1sxXSA9IGR1a19fcm5kX3JvdGwoczEsIDM2KTsKKworCXJl dHVybiByZXM7Cit9CisKK0RVS19JTlRFUk5BTCB2b2lkIGR1a191dGlsX3RpbnlyYW5kb21fcHJl cGFyZV9zZWVkKGR1a19odGhyZWFkICp0aHIpIHsKKwlkdWtfc21hbGxfdWludF90IGk7CisJZHVr X3VpbnQ2NF90IHg7CisKKwkvKiBNaXggYm90aCBoYWx2ZXMgb2YgdGhlIGluaXRpYWwgc2VlZCB3 aXRoIFNwbGl0TWl4NjQuICBUaGUgaW50ZW50CisJICogaXMgdG8gZW5zdXJlIHRoYXQgdmVyeSBz aW1pbGFyIHJhdyBzZWVkcyAod2hpY2ggaXMgdXN1YWxseSB0aGUgY2FzZQorCSAqIGJlY2F1c2Ug Y3VycmVudCBzZWVkIGlzIERhdGUubm93KCkpIHJlc3VsdCBpbiBkaWZmZXJlbnQgeG9yb3NoaXJv MTI4KworCSAqIHNlZWRzLgorCSAqLworCXggPSB0aHItPmhlYXAtPnJuZF9zdGF0ZVswXTsgIC8q IE9ubHkgWzBdIGlzIHVzZWQgYXMgaW5wdXQgaGVyZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjQ7 IGkrKykgeworCQl0aHItPmhlYXAtPnJuZF9zdGF0ZVtpICYgMHgwMV0gPSBkdWtfX3JuZF9zcGxp dG1peDY0KCZ4KTsgIC8qIEtlZXAgbGFzdCAyIHZhbHVlcy4gKi8KKwl9Cit9CisKK0RVS19JTlRF Uk5BTCBkdWtfZG91YmxlX3QgZHVrX3V0aWxfdGlueXJhbmRvbV9nZXRfZG91YmxlKGR1a19odGhy ZWFkICp0aHIpIHsKKwlkdWtfdWludDY0X3QgdjsKKwlkdWtfZG91YmxlX3VuaW9uIGR1OworCisJ LyogRm9yIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiB0aGUgaW50ZWdlciBhbmQgSUVFRSBkb3VibGUg Ynl0ZSBvcmRlcgorCSAqIGlzIHRoZSBzYW1lIHNvIGEgZGlyZWN0IGFzc2lnbm1lbnQgd29ya3Mu ICBGb3IgbWl4ZWQgZW5kaWFuIHRoZQorCSAqIDMyLWJpdCBwYXJ0cyBtdXN0IGJlIHN3YXBwZWQu CisJICovCisJdiA9IChEVUtfVTY0X0NPTlNUQU5UKDB4M2ZmKSA8PCA1MlUpIHwgKGR1a19feG9y b3NoaXJvMTI4cGx1cygoZHVrX3VpbnQ2NF90ICopIHRoci0+aGVhcC0+cm5kX3N0YXRlKSA+PiAx MlUpOworCWR1LnVsbFswXSA9IHY7CisjaWYgZGVmaW5lZChEVUtfVVNFX0RPVUJMRV9NRSkKKwlk byB7CisJCWR1a191aW50MzJfdCB0bXA7CisJCXRtcCA9IGR1LnVpWzBdOworCQlkdS51aVswXSA9 IGR1LnVpWzFdOworCQlkdS51aVsxXSA9IHRtcDsKKwl9IHdoaWxlICgwKTsKKyNlbmRpZgorCXJl dHVybiBkdS5kIC0gMS4wOworfQorI2VuZGlmICAvKiBEVUtfX1JBTkRPTV9YT1JPU0hJUk8xMjhQ TFVTICovCisKKyNlbmRpZiAgLyogIURVS19VU0VfR0VUX1JBTkRPTV9ET1VCTEUgKi8KKworLyog YXV0b21hdGljIHVuZGVmcyAqLworI3VuZGVmIERVS19fUkFORE9NX1NIQU1JUjNPUAorI3VuZGVm IERVS19fUkFORE9NX1hPUk9TSElSTzEyOFBMVVMKKyN1bmRlZiBEVUtfX1JORF9CSVQKKyN1bmRl ZiBEVUtfX1VQREFURV9STkQKZGlmZiAtLWdpdCBhL3NoZWxsL2lndC1idWlsdGlucy5jIGIvc2hl bGwvaWd0LWJ1aWx0aW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi41 ZmFlMmZjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGVsbC9pZ3QtYnVpbHRpbnMuYwpAQCAtMCww ICsxLDIyOSBAQAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisK KyNpbmNsdWRlICJkdWt0YXBlLmgiCisKKyNpbmNsdWRlICJpZ3QtYnVpbHRpbnMuaCIKKworc3Rh dGljIGR1a19yZXRfdCBpZ3RfbG9nKGR1a19jb250ZXh0ICpjdHgpCit7CisJcHJpbnRmKCIlc1xu IiwgZHVrX3NhZmVfdG9fc3RyaW5nKGN0eCwgMCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IF9faWd0X2pvYl93YWl0KGR1a19jb250ZXh0ICpjdHgsIGR1a19pbnRfdCBpZHgpCit7CisJ cGlkX3QgKnBpZHM7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGNvdW50OworCisJZHVrX2dldF9w cm9wX3N0cmluZyhjdHgsIGlkeCwgImNvdW50Iik7CisJY291bnQgPSBkdWtfZ2V0X2ludChjdHgs IC0xKTsKKwlkdWtfcG9wKGN0eCk7CisKKwlkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgaWR4LCAi cGlkcyIpOworCXBpZHMgPSBkdWtfZ2V0X3BvaW50ZXIoY3R4LCAtMSk7CisJZHVrX3BvcChjdHgp OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludCBzdGF0dXM7CisK KwkJaWYgKHdhaXRwaWQocGlkc1tpXSwgJnN0YXR1cywgMCkgPCAwKQorCQkJcmV0dXJuIC0xOwor CisJCWlmICghcmVzdWx0ICYmIHN0YXR1cykKKwkJCXJlc3VsdCA9IHN0YXR1czsKKwl9CisKKwly ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZHVrX3JldF90IGlndF9qb2JfZHRvcihkdWtfY29u dGV4dCAqY3R4KQoreworCV9faWd0X2pvYl93YWl0KGN0eCwgMCk7CisKKwlkdWtfZ2V0X3Byb3Bf c3RyaW5nKGN0eCwgMCwgInBpZHMiKTsKKwlmcmVlKGR1a19nZXRfcG9pbnRlcihjdHgsIC0xKSk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGR1a19yZXRfdCBpZ3Rfam9iX3dhaXQoZHVrX2Nv bnRleHQgKmN0eCkKK3sKKwlpbnQgcmVzdWx0OworCisJZHVrX3B1c2hfdGhpcyhjdHgpOworCXJl c3VsdCA9IF9faWd0X2pvYl93YWl0KGN0eCwgLTEpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1 cm4gLTE7CisKKwlkdWtfcHVzaF9pbnQoY3R4LCByZXN1bHQpOworCXJldHVybiAxOworfQorCitz dGF0aWMgZHVrX3JldF90IGlndF9qb2JfbmV3KGR1a19jb250ZXh0ICpjdHgsIGludCBjb3VudCwg cGlkX3QgKnBpZHMpCit7CisJZHVrX3B1c2hfb2JqZWN0KGN0eCk7CisKKwlkdWtfcHVzaF9pbnQo Y3R4LCBjb3VudCk7CisJZHVrX3B1dF9wcm9wX3N0cmluZyhjdHgsIC0yLCAiY291bnQiKTsKKwor CWR1a19wdXNoX3BvaW50ZXIoY3R4LCBwaWRzKTsKKwlkdWtfcHV0X3Byb3Bfc3RyaW5nKGN0eCwg LTIsICJwaWRzIik7CisKKwlkdWtfcHVzaF9jX2Z1bmN0aW9uKGN0eCwgaWd0X2pvYl93YWl0LCAw KTsKKwlkdWtfcHV0X3Byb3Bfc3RyaW5nKGN0eCwgLTIsICJ3YWl0Iik7CisKKwlkdWtfcHVzaF9j X2Z1bmN0aW9uKGN0eCwgaWd0X2pvYl9kdG9yLCAxKTsKKwlkdWtfc2V0X2ZpbmFsaXplcihjdHgs IC0yKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgZHVrX3JldF90IGlndF9mb3JrKGR1a19j b250ZXh0ICpjdHgpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gZHVrX2dldF91aW50X2RlZmF1 bHQoY3R4LCAtMSwgMCk7CisJcGlkX3QgKnBpZHM7CisJaW50IGNvdW50OworCisJZHVrX3BvcChj dHgpOworCWlmICghZHVrX2lzX2Z1bmN0aW9uKGN0eCwgLTEpKQorCQlyZXR1cm4gRFVLX1JFVF9U WVBFX0VSUk9SOworCisJZHVrX3N3YXBfdG9wKGN0eCwgLTIpOworCWlmICgoIWR1a19pc19hcnJh eShjdHgsIC0xKSB8fCAhZHVrX2dldF9sZW5ndGgoY3R4LCAtMSkpICYmICFmbGFncykgeworCQlk dWtfY2FsbChjdHgsIDEpOworCQlyZXR1cm4gaWd0X2pvYl9uZXcoY3R4LCAwLCBOVUxMKTsKKwl9 CisKKwljb3VudCA9IGR1a19nZXRfbGVuZ3RoKGN0eCwgLTEpOworCXBpZHMgPSBtYWxsb2MoY291 bnQgKiBzaXplb2YoKnBpZHMpKTsKKwlpZiAoIXBpZHMpCisJCXJldHVybiBEVUtfUkVUX0VSUk9S OworCisJZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrKSB7CisJCXBpZF90IHBp ZCA9IGZvcmsoKTsKKworCQlzd2l0Y2ggKHBpZCkgeworCQljYXNlIC0xOgorCQkJcmV0dXJuIERV S19SRVRfRVJST1I7CisJCWNhc2UgMDogLyogY2hpbGQgKi8KKwkJCWR1a19kdXAoY3R4LCAtMik7 CisJCQlkdWtfZ2V0X3Byb3BfaW5kZXgoY3R4LCAtMiwgaWR4KTsKKwkJCWV4aXQoZHVrX3BjYWxs KGN0eCwgMSkpOworCQlkZWZhdWx0OgorCQkJcGlkc1tpZHhdID0gcGlkOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlyZXR1cm4gaWd0X2pvYl9uZXcoY3R4LCBjb3VudCwgcGlkcyk7Cit9CisKK3N0 YXRpYyBkdWtfcmV0X3QgaWd0X2V4cGVjdChkdWtfY29udGV4dCAqY3R4KQoreworCWR1a19pbnRf dCBleHBlY3Q7CisKKwkvKgorCSAqIGNvbnN0IGV4cGVjdCA9IGZ1bmN0aW9uKGZuLCBlcnJubykg eworCSAqIHRyeSB7CisJICogCWZuKCk7CisJICogCWlndC51bnJlYWNoYWJsZSgpOworCSAqIH0g Y2F0Y2goZSkgeworCSAqIAlpZ3QuYXNzZXJ0KGUuZXJybm8gPT0gZXJybm8pOworCSAqIH19CisJ ICovCisKKwlkdWtfcmVxdWlyZV9jYWxsYWJsZShjdHgsIC0yKTsKKwlleHBlY3QgPSBkdWtfcmVx dWlyZV9pbnQoY3R4LCAtMSk7CisJZHVrX3BvcChjdHgpOworCisJaWYgKGR1a19wY2FsbChjdHgs IDApID09IERVS19FWEVDX1NVQ0NFU1MpIHsKKwkJaWYgKCFleHBlY3QpCisJCQlyZXR1cm4gMDsK KworCQlmcHJpbnRmKHN0ZGVyciwgInVuZXhwZWN0ZWQgc3VjY2Vzc1xuIik7CisJCXJldHVybiAt MTsKKwl9CisKKwlpZiAoIWR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgImVycm5vIikpIHsK KwkJZnByaW50ZihzdGRlcnIsICJub3QgYW4gZXJybm9cbiIpOworCQlyZXR1cm4gLTE7CisJfQor CisJaWYgKGR1a19yZXF1aXJlX2ludChjdHgsIC0xKSAhPSBleHBlY3QpIHsKKwkJZnByaW50Zihz dGRlcnIsICJleHBlY3RlZCBlcnJubz0lZCwgZ290ICVkXG4iLAorCQkJZXhwZWN0LCBkdWtfZ2V0 X2ludChjdHgsIC0xKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGR1a19yZXRfdCBpZ3RfcmVxdWlyZShkdWtfY29udGV4dCAqY3R4KQoreworCWR1a19kdXBf dG9wKGN0eCk7CisJaWYgKCFkdWtfdG9fYm9vbGVhbihjdHgsIC0xKSkgeworCQlmcHJpbnRmKHN0 ZGVyciwgInJlcXVpcmUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlkdWtfcG9wKGN0 eCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGR1a19yZXRfdCBpZ3RfYXNzZXJ0KGR1a19j b250ZXh0ICpjdHgpCit7CisJaWYgKGR1a190b19ib29sZWFuKGN0eCwgLTEpKQorCQlyZXR1cm4g MDsKKworCWZwcmludGYoc3RkZXJyLCAiYXNzZXJ0IGZhaWxlZFxuIik7CisJcmV0dXJuIC0xOwor fQorCitzdGF0aWMgZHVrX3JldF90IGlndF91bnJlYWNoYWJsZShkdWtfY29udGV4dCAqY3R4KQor eworCWZwcmludGYoc3RkZXJyLCAidW5yZWFjaGFibGUhXG4iKTsKKwlyZXR1cm4gLTE7Cit9CisK K3N0YXRpYyBjb25zdCBkdWtfZnVuY3Rpb25fbGlzdF9lbnRyeSBmdW5jc1tdID0geworCXsgImV4 cGVjdCIsIGlndF9leHBlY3QsIDIgfSwKKwl7ICJyZXF1aXJlIiwgaWd0X3JlcXVpcmUsIDEgfSwK Kwl7ICJhc3NlcnQiLCBpZ3RfYXNzZXJ0LCAxIH0sCisJeyAidW5yZWFjaGFibGUiLCBpZ3RfdW5y ZWFjaGFibGUsIDAgfSwKKworCXsgImxvZyIsIGlndF9sb2csIDEgfSwKKworCXsgImZvcmsiLCBp Z3RfZm9yaywgMyB9LAorCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWd0X2J1aWx0aW4gKmJ1 aWx0aW5zLCAqZ2xvYmFsczsKKwordm9pZCBpZ3RfcmVnaXN0ZXJfYnVpbHRpbihzdHJ1Y3QgaWd0 X2J1aWx0aW4gKmIpCit7CisJYi0+bmV4dCA9IGJ1aWx0aW5zOworCWJ1aWx0aW5zID0gYjsKK30K Kwordm9pZCBpZ3RfcmVnaXN0ZXJfZ2xvYmFsKHN0cnVjdCBpZ3RfYnVpbHRpbiAqYikKK3sKKwli LT5uZXh0ID0gZ2xvYmFsczsKKwlnbG9iYWxzID0gYjsKK30KKworaW50IGlndF9idWlsdGluc19z ZXR1cChkdWtfY29udGV4dCAqY3R4KQoreworCWR1a19wdXNoX2dsb2JhbF9vYmplY3QoY3R4KTsK KwlkdWtfcHVzaF9vYmplY3QoY3R4KTsKKwlkdWtfcHV0X2Z1bmN0aW9uX2xpc3QoY3R4LCAtMSwg ZnVuY3MpOworCWR1a19wdXRfcHJvcF9zdHJpbmcoY3R4LCAtMiwgImlndCIpOworCWR1a19wb3Ao Y3R4KTsKKworCWZvciAoc3RydWN0IGlndF9idWlsdGluICpiID0gZ2xvYmFsczsgYjsgYiA9IGIt Pm5leHQpCisJCWItPmN0b3IoY3R4KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2hl bGwvaWd0LXNoZWxsLmMgYi9zaGVsbC9pZ3Qtc2hlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjkzMTE4MzM0YQotLS0gL2Rldi9udWxsCisrKyBiL3NoZWxsL2lndC1z aGVsbC5jCkBAIC0wLDAgKzEsMjkxIEBACisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8 c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5j bHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJkdWt0YXBlLmgiCisjaW5j bHVkZSAiaWd0LWJ1aWx0aW5zLmgiCisKKyNpbmNsdWRlICIuLi9saWIvdmVyc2lvbi5oIgorCitz dGF0aWMgdm9pZCBzaGVsbF9zaWdoYW5kbGVyKGludCBzaWcpCit7CisJZnByaW50ZihzdGRlcnIs ICJHb3Qgc2lnbmFsICVkXG4iLCBzaWcpOworCWZmbHVzaChzdGRlcnIpOworCisJc2lnbmFsKHNp ZywgU0lHX0RGTCk7CisJcmFpc2Uoc2lnKTsKK30KKworc3RhdGljIHZvaWQgc2hlbGxfc2V0dXBf c2lnaGFuZGxlcih2b2lkKQoreworCXNpZ25hbChTSUdJTlQsIHNoZWxsX3NpZ2hhbmRsZXIpOwor CXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKK30KKworc3RhdGljIGR1a19yZXRfdCBnZXRfc3Rh Y2tfcmF3KGR1a19jb250ZXh0ICpjdHgsIHZvaWQgKnVkYXRhKQoreworCWlmICghZHVrX2lzX29i amVjdChjdHgsIC0xKSB8fCAgIWR1a19pc19lcnJvcihjdHgsIC0xKSkKKwkJcmV0dXJuIC0xOwor CisJaWYgKCFkdWtfaGFzX3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJzdGFjayIpKQorCQlyZXR1cm4g MTsKKworCWR1a19nZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgInN0YWNrIik7CisJZHVrX3JlbW92 ZShjdHgsIC0yKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGR1a19yZXRfdCB3cmFwcGVkX2V2 YWwoZHVrX2NvbnRleHQgKmN0eCwgdm9pZCAqdWRhdGEpCit7CisJZHVrX2NvbXBpbGVfbHN0cmlu Z19maWxlbmFtZShjdHgsIDAsCisJCQkJICAgICBkdWtfcmVxdWlyZV9wb2ludGVyKGN0eCwgLTMp LAorCQkJCSAgICAgZHVrX3JlcXVpcmVfdWludChjdHgsIC0yKSk7CisKKwlkdWtfcHVzaF9nbG9i YWxfb2JqZWN0KGN0eCk7ICAvKiAndGhpcycgYmluZGluZyAqLworCWR1a19jYWxsX21ldGhvZChj dHgsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fZXZhbChkdWtfY29udGV4 dCAqY3R4LCBjb25zdCBjaGFyICpldmFsKQoreworCWludCBlcnIgPSAwOworCisJZHVrX3B1c2hf cG9pbnRlcihjdHgsICh2b2lkICopZXZhbCk7CisJZHVrX3B1c2hfdWludChjdHgsIHN0cmxlbihl dmFsKSk7CisJZHVrX3B1c2hfc3RyaW5nKGN0eCwgImV2YWwiKTsKKworCWlmIChkdWtfc2FmZV9j YWxsKGN0eCwgd3JhcHBlZF9ldmFsLCBOVUxMLCAzLCAxKSAhPSBEVUtfRVhFQ19TVUNDRVNTKSB7 CisJCWR1a19zYWZlX2NhbGwoY3R4LCBnZXRfc3RhY2tfcmF3LCBOVUxMLCAxLCAxKTsKKwkJZnBy aW50ZihzdGRlcnIsICIlc1xuIiwgZHVrX3NhZmVfdG9fc3RyaW5nKGN0eCwgLTEpKTsKKwkJZXJy ID0gLTE7CisJfQorCisJZHVrX3BvcChjdHgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2 b2lkIHByaW50X3dlbGNvbWUodm9pZCkKK3sKKwlzdHJ1Y3QgdXRzbmFtZSB1dHM7CisKKwl1bmFt ZSgmdXRzKTsKKwlwcmludGYoIklHVCBWZXJzaW9uOiAlcy0lcyAoJXMpICglczogJXMgJXMpXG4i LAorCSAgICAgICBQQUNLQUdFX1ZFUlNJT04sIElHVF9HSVRfU0hBMSwgVEFSR0VUX0NQVV9QTEFU Rk9STSwKKwkgICAgICAgdXRzLnN5c25hbWUsIHV0cy5yZWxlYXNlLCB1dHMubWFjaGluZSk7CisJ cHJpbnRmKCJVc2luZyBEdWt0YXBlICVkLiVkLiVkXG4iLAorCSAgICAgICAoaW50KShEVUtfVkVS U0lPTiAvIDEwMDAwKSwKKwkgICAgICAgKGludCkoRFVLX1ZFUlNJT04gLyAxMDAgJSAxMDApLAor CSAgICAgICAoaW50KShEVUtfVkVSU0lPTiAlIDEwMCkpOworfQorCitzdGF0aWMgZHVrX3JldF90 IHdyYXBwZWRfdHR5KGR1a19jb250ZXh0ICpjdHgsIHZvaWQgKnVkYXRhKQoreworCWR1a19jb21w aWxlX2xzdHJpbmdfZmlsZW5hbWUoY3R4LCAwLAorCQkJCSAgICAgZHVrX3JlcXVpcmVfcG9pbnRl cihjdHgsIC0zKSwKKwkJCQkgICAgIGR1a19yZXF1aXJlX3VpbnQoY3R4LCAtMikpOworCisJZHVr X3B1c2hfZ2xvYmFsX29iamVjdChjdHgpOyAgLyogJ3RoaXMnIGJpbmRpbmcgKi8KKwlkdWtfY2Fs bF9tZXRob2QoY3R4LCAwKTsKKworCWR1a19wdXNoX2dsb2JhbF9zdGFzaChjdHgpOworCWR1a19n ZXRfcHJvcF9zdHJpbmcoY3R4LCAtMSwgImV2YWxGb3JtYXQiKTsKKwlkdWtfZHVwKGN0eCwgLTMp OworCWR1a19jYWxsKGN0eCwgMSk7CisKKwlmcHJpbnRmKHN0ZG91dCwgIiAgID0gJXNcbiIsIGR1 a190b19zdHJpbmcoY3R4LCAtMSkpOworCWZmbHVzaChzdGRvdXQpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgZG9fdHR5KGR1a19jb250ZXh0ICpjdHgpCit7CisJYm9vbCBoYXNfZW9m ID0gZmFsc2U7CisJaW50IGVyciA9IDA7CisJY2hhciAqYnVmOworCisJZHVrX3B1c2hfZ2xvYmFs X3N0YXNoKGN0eCk7CisJZHVrX2V2YWxfc3RyaW5nKGN0eCwKKwkJCSIoZnVuY3Rpb24gKEUpIHsi CisJCQkJInJldHVybiBmdW5jdGlvbiBmb3JtYXQodikgeyIKKwkJCSJ0cnkgeyIKKwkJCQkicmV0 dXJuIEUoJ2p4Jyx2KTsiCisJCQkifSBjYXRjaChlKSB7IgorCQkJCSJyZXR1cm4gJycrdjsiCisJ CQkifX07fSkoRHVrdGFwZS5lbmMpIik7CisJZHVrX3B1dF9wcm9wX3N0cmluZyhjdHgsIC0yLCAi ZXZhbEZvcm1hdCIpOworCWR1a19wb3AoY3R4KTsKKworCWJ1ZiA9IG1hbGxvYyg0MDk2KTsKKwlp ZiAoIWJ1ZikKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKCFoYXNfZW9mKSB7CisJCWNvbnN0IGNo YXIgKnByb21wdCA9ICJpZ3Q+ICI7CisJCXNpemVfdCBpZHggPSAwOworCisJCWZ3cml0ZShwcm9t cHQsIDEsIHN0cmxlbihwcm9tcHQpLCBzdGRvdXQpOworCQlmZmx1c2goc3Rkb3V0KTsKKworCQlm b3IgKDs7KSB7CisJCQlpbnQgYzsKKworCQkJYyA9IGZnZXRjKHN0ZGluKTsKKwkJCWlmIChjID09 IEVPRikgeworCQkJCWhhc19lb2YgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAo YyA9PSAnXG4nKQorCQkJCWJyZWFrOworCisJCQlpZiAoaWR4ID49IDQwOTYpIHsKKwkJCQllcnIg PSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWJ1ZltpZHgrK10gPSBjOworCQl9CisJ CWlmICghaWR4KQorCQkJY29udGludWU7CisKKwkJZHVrX3B1c2hfcG9pbnRlcihjdHgsIGJ1Zik7 CisJCWR1a19wdXNoX3VpbnQoY3R4LCBpZHgpOworCQlkdWtfcHVzaF9zdHJpbmcoY3R4LCAiaW5w dXQiKTsKKworCQlpZiAoZHVrX3NhZmVfY2FsbChjdHgsIHdyYXBwZWRfdHR5LCBOVUxMLCAzLCAx KSAhPSBEVUtfRVhFQ19TVUNDRVNTKSB7CisJCQlkdWtfc2FmZV9jYWxsKGN0eCwgZ2V0X3N0YWNr X3JhdywgTlVMTCwgMSwgMSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBkdWtfc2FmZV90 b19zdHJpbmcoY3R4LCAtMSkpOworCQkJZXJyID0gLTE7CisJCX0KKwkJZHVrX3BvcChjdHgpOwor CX0KKwlwcmludGYoIlxuIik7CisKK2RvbmU6CisJZnJlZShidWYpOworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbnQgZG9fZmlsZShkdWtfY29udGV4dCAqY3R4LCBGSUxFICpmaWxlLCBjb25z dCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzaXplX3Qgc3ogPSA2NCA8PCAxMDsKKwlpbnQgZXJyID0g MDsKKwljaGFyICpidWY7CisKKwlidWYgPSBtYWxsb2Moc3opOworCWlmICghYnVmKQorCQlyZXR1 cm4gLTE7CisKKwlzeiA9IGZyZWFkKGJ1ZiwgMSwgc3osIGZpbGUpOworCisJZHVrX3B1c2hfcG9p bnRlcihjdHgsIGJ1Zik7CisJZHVrX3B1c2hfdWludChjdHgsIHN6KTsKKwlkdWtfcHVzaF9zdHJp bmcoY3R4LCBmaWxlbmFtZSk7CisKKwlpZiAoZHVrX3NhZmVfY2FsbChjdHgsIHdyYXBwZWRfZXZh bCwgTlVMTCwgMywgMSkgIT0gRFVLX0VYRUNfU1VDQ0VTUykgeworCQlkdWtfc2FmZV9jYWxsKGN0 eCwgZ2V0X3N0YWNrX3JhdywgTlVMTCwgMSwgMSk7CisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIs IGR1a19zYWZlX3RvX3N0cmluZyhjdHgsIC0xKSk7CisJCWVyciA9IC0xOworCX0KKwlkdWtfcG9w KGN0eCk7CisKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzaGVs bChkdWtfY29udGV4dCAqY3R4LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGVycjsK KworCWlmIChpc2F0dHkoMCkpIHsKKwkJcHJpbnRfd2VsY29tZSgpOworCQllcnIgPSBkb190dHko Y3R4KTsKKwl9IGVsc2UgeworCQllcnIgPSBkb19maWxlKGN0eCwgc3RkaW4sICJzdGRpbiIpOwor CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX3J1bihkdWtfY29udGV4dCAq Y3R4LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlGSUxFICpmaWxlOworCisJZmlsZSA9IGZv cGVuKGZpbGVuYW1lLCAiciIpOworCWlmICghZmlsZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZG9f ZmlsZShjdHgsIGZpbGUsIGZpbGVuYW1lKSkKKwkJcmV0dXJuIDE7CisKKwlmY2xvc2UoZmlsZSk7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuKGR1a19jb250ZXh0ICpjdHgsIGludCBh cmdjLCBjaGFyICoqYXJndikKK3sKKwl3aGlsZSAoKytvcHRpbmQgPCBhcmdjKSB7CisJCWlmIChf X3J1bihjdHgsIGFyZ3Zbb3B0aW5kXSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWR1a19jb250ZXh0ICpj dHg7CisJaW50IGVyciA9IDE7CisJaW50IG9wdDsKKworCXNoZWxsX3NldHVwX3NpZ2hhbmRsZXIo KTsKKworCWN0eCA9IGR1a19jcmVhdGVfaGVhcF9kZWZhdWx0KCk7CisJaWYgKCFjdHgpIHsKKwkJ ZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIG91ciBEdWt0YXBlLlxuIik7CisJCXJl dHVybiAxOworCX0KKworCWlndF9idWlsdGluc19zZXR1cChjdHgpOworCisJd2hpbGUgKChvcHQg PSBnZXRvcHQoYXJnYywgYXJndiwgImU6IikpICE9IC0xKSB7CisJCXN3aXRjaCAob3B0KSB7CisJ CWNhc2UgJ2UnOgorCQkJaWYgKGRvX2V2YWwoY3R4LCBvcHRhcmcpKQorCQkJCWdvdG8gZXJyOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAob3B0aW5kIDwgYXJnYykgeworCQlzdGF0aWMgY29u c3Qgc3RydWN0IHRhcmdldCB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJaW50ICgqZnVuYyko ZHVrX2NvbnRleHQgKiwgaW50LCBjaGFyICoqKTsKKwkJfSB0YXJnZXRzW10gPSB7CisJCQl7ICJz aGVsbCIsIHNoZWxsIH0sCisJCQl7ICJydW4iLCBydW4gfSwKKwkJCXsgfQorCQl9OworCQlmb3Ig KHR5cGVvZigqdGFyZ2V0cykgKnQgPSB0YXJnZXRzOyB0LT5uYW1lOyB0KyspIHsKKwkJCWlmICgh c3RyY21wKGFyZ3Zbb3B0aW5kXSwgdC0+bmFtZSkpIHsKKwkJCQllcnIgPSB0LT5mdW5jKGN0eCwg YXJnYywgYXJndik7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKwkJZnByaW50ZihzdGRlcnIs ICJVbnJlY29nbmlzZWQgY29tbWFuZCAnJXMnXG4iLCBhcmd2W29wdGluZF0pOworCX0gZWxzZSB7 CisJCWVyciA9IHNoZWxsKGN0eCwgMCwgTlVMTCk7CisJfQorCitlcnI6CisJZHVrX2Rlc3Ryb3lf aGVhcChjdHgpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zaGVsbC9pbmNsdWRlL2R1 a19jb25maWcuaCBiL3NoZWxsL2luY2x1ZGUvZHVrX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uNzNlNzAxZWZhCi0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwv aW5jbHVkZS9kdWtfY29uZmlnLmgKQEAgLTAsMCArMSwzMDg3IEBACisvKgorICogIGR1a19jb25m aWcuaCBjb25maWd1cmF0aW9uIGhlYWRlciBnZW5lcmF0ZWQgYnkgZ2VuY29uZmlnLnB5LgorICoK KyAqICBHaXQgY29tbWl0OiBkMDQ0NTAwODNmNzk1YmNjNTgwMDhmOThiMTliYjJiNTcyN2YyNzEx CisgKiAgR2l0IGRlc2NyaWJlOiB2Mi4zLjAtNy1nZDA0NDUwMDgKKyAqICBHaXQgYnJhbmNoOiBt YXN0ZXIKKyAqCisgKiAgU3VwcG9ydGVkIHBsYXRmb3JtczoKKyAqICAgICAgLSBNYWMgT1NYLCBp UGhvbmUsIERhcndpbgorICogICAgICAtIE9yYmlzCisgKiAgICAgIC0gT3BlbkJTRAorICogICAg ICAtIEdlbmVyaWMgQlNECisgKiAgICAgIC0gQXRhcmkgU1QgVE9TCisgKiAgICAgIC0gQW1pZ2FP UworICogICAgICAtIER1cmFuZ28gKFhib3hPbmUpCisgKiAgICAgIC0gV2luZG93cworICogICAg ICAtIEZsYXNocGxheWVyIChDcm9zc2JyaWRnZSkKKyAqICAgICAgLSBRTlgKKyAqICAgICAgLSBU SS1Oc3BpcmUKKyAqICAgICAgLSBFbXNjcmlwdGVuCisgKiAgICAgIC0gTGludXgKKyAqICAgICAg LSBTb2xhcmlzCisgKiAgICAgIC0gQUlYCisgKiAgICAgIC0gSFBVWAorICogICAgICAtIEdlbmVy aWMgUE9TSVgKKyAqICAgICAgLSBDeWd3aW4KKyAqICAgICAgLSBHZW5lcmljIFVOSVgKKyAqICAg ICAgLSBHZW5lcmljIGZhbGxiYWNrCisgKgorICogIFN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzOgor ICogICAgICAtIHg4NgorICogICAgICAtIHg2NAorICogICAgICAtIHgzMgorICogICAgICAtIEFS TSAzMi1iaXQKKyAqICAgICAgLSBBUk0gNjQtYml0CisgKiAgICAgIC0gTUlQUyAzMi1iaXQKKyAq ICAgICAgLSBNSVBTIDY0LWJpdAorICogICAgICAtIFBvd2VyUEMgMzItYml0CisgKiAgICAgIC0g UG93ZXJQQyA2NC1iaXQKKyAqICAgICAgLSBTUEFSQyAzMi1iaXQKKyAqICAgICAgLSBTUEFSQyA2 NC1iaXQKKyAqICAgICAgLSBTdXBlckgKKyAqICAgICAgLSBNb3Rvcm9sYSA2OGsKKyAqICAgICAg LSBFbXNjcmlwdGVuCisgKiAgICAgIC0gR2VuZXJpYworICoKKyAqICBTdXBwb3J0ZWQgY29tcGls ZXJzOgorICogICAgICAtIENsYW5nCisgKiAgICAgIC0gR0NDCisgKiAgICAgIC0gTVNWQworICog ICAgICAtIEVtc2NyaXB0ZW4KKyAqICAgICAgLSBUaW55QworICogICAgICAtIFZCQ0MKKyAqICAg ICAgLSBCcnVjZSdzIEMgY29tcGlsZXIKKyAqICAgICAgLSBHZW5lcmljCisgKgorICovCisKKyNp ZiAhZGVmaW5lZChEVUtfQ09ORklHX0hfSU5DTFVERUQpCisjZGVmaW5lIERVS19DT05GSUdfSF9J TkNMVURFRAorCisvKgorICogIEludGVybWVkaWF0ZSBoZWxwZXIgZGVmaW5lcworICovCisKKy8q IERMTCBidWlsZCBkZXRlY3Rpb24gKi8KKy8qIG5vdCBjb25maWd1cmVkIGZvciBETEwgYnVpbGQg Ki8KKyN1bmRlZiBEVUtfRl9ETExfQlVJTEQKKworLyogQXBwbGUgT1NYLCBpT1MgKi8KKyNpZiBk ZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgRFVLX0ZfQVBQTEUKKyNlbmRpZgorCisvKiBGcmVl QlNEICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0QpCisj ZGVmaW5lIERVS19GX0ZSRUVCU0QKKyNlbmRpZgorCisvKiBPcmJpcyAoUFM0KSB2YXJpYW50ICov CisjaWYgZGVmaW5lZChEVUtfRl9GUkVFQlNEKSAmJiBkZWZpbmVkKF9fT1JCSVNfXykKKyNkZWZp bmUgRFVLX0ZfT1JCSVMKKyNlbmRpZgorCisvKiBPcGVuQlNEICovCisjaWYgZGVmaW5lZChfX09w ZW5CU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0QpCisjZGVmaW5lIERVS19GX09QRU5CU0QKKyNl bmRpZgorCisvKiBOZXRCU0QgKi8KKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQo X19OZXRCU0QpCisjZGVmaW5lIERVS19GX05FVEJTRAorI2VuZGlmCisKKy8qIEJTRCB2YXJpYW50 ICovCisjaWYgZGVmaW5lZChEVUtfRl9GUkVFQlNEKSB8fCBkZWZpbmVkKERVS19GX05FVEJTRCkg fHwgZGVmaW5lZChEVUtfRl9PUEVOQlNEKSB8fCBcCisgICAgZGVmaW5lZChfX2JzZGlfXykgfHwg ZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBEVUtfRl9CU0QKKyNlbmRpZgorCisvKiBB dGFyaSBTVCBUT1MuICBfX1RPU19fIGRlZmluZWQgYnkgUHVyZUMuICBObyBwbGF0Zm9ybSBkZWZp bmUgaW4gVkJDQworICogYXBwYXJlbnRseSwgc28gdG8gdXNlIHdpdGggVkJDQyB1c2VyIG11c3Qg ZGVmaW5lIF9fVE9TX18gbWFudWFsbHkuCisgICovCisjaWYgZGVmaW5lZChfX1RPU19fKQorI2Rl ZmluZSBEVUtfRl9UT1MKKyNlbmRpZgorCisvKiBNb3Rvcm9sYSA2OEsuICBOb3QgZGVmaW5lZCBi eSBWQkNDLCBzbyB1c2VyIG11c3QgZGVmaW5lIG9uZSBvZiB0aGVzZQorICogbWFudWFsbHkgd2hl biB1c2luZyBWQkNDLgorICovCisjaWYgZGVmaW5lZChfX202OGtfXykgfHwgZGVmaW5lZChNNjgw MDApIHx8IGRlZmluZWQoX19NQzY4S19fKQorI2RlZmluZSBEVUtfRl9NNjhLCisjZW5kaWYKKwor LyogQW1pZ2FPUy4gIE5laXRoZXIgQU1JR0Egbm9yIF9fYW1pZ2Fvc19fIGlzIGRlZmluZWQgb24g VkJDQywgc28gdXNlciBtdXN0CisgKiBkZWZpbmUgJ0FNSUdBJyBtYW51YWxseSB3aGVuIHVzaW5n IFZCQ0MuCisgKi8KKyNpZiBkZWZpbmVkKEFNSUdBKSB8fCBkZWZpbmVkKF9fYW1pZ2Fvc19fKQor I2RlZmluZSBEVUtfRl9BTUlHQU9TCisjZW5kaWYKKworLyogUG93ZXJQQyAqLworI2lmIGRlZmlu ZWQoX19wb3dlcnBjKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fUFBDX18p CisjZGVmaW5lIERVS19GX1BQQworI2lmIGRlZmluZWQoX19QUEM2NF9fKSB8fCBkZWZpbmVkKF9f TFA2NF9fKSB8fCBkZWZpbmVkKF9MUDY0KQorI2RlZmluZSBEVUtfRl9QUEM2NAorI2Vsc2UKKyNk ZWZpbmUgRFVLX0ZfUFBDMzIKKyNlbmRpZgorI2VuZGlmCisKKy8qIER1cmFuZ28gKFhib3ggT25l KSAqLworI2lmIGRlZmluZWQoX0RVUkFOR08pIHx8IGRlZmluZWQoX1hCT1hfT05FKQorI2RlZmlu ZSBEVUtfRl9EVVJBTkdPCisjZW5kaWYKKworLyogV2luZG93cywgYm90aCAzMi1iaXQgYW5kIDY0 LWJpdCAqLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVk KF9XSU42NCkgfHwgZGVmaW5lZChXSU42NCkgfHwgXAorICAgIGRlZmluZWQoX19XSU4zMl9fKSB8 fCBkZWZpbmVkKF9fVE9TX1dJTl9fKSB8fCBkZWZpbmVkKF9fV0lORE9XU19fKQorI2RlZmluZSBE VUtfRl9XSU5ET1dTCisjaWYgZGVmaW5lZChfV0lONjQpIHx8IGRlZmluZWQoV0lONjQpCisjZGVm aW5lIERVS19GX1dJTjY0CisjZWxzZQorI2RlZmluZSBEVUtfRl9XSU4zMgorI2VuZGlmCisjZW5k aWYKKworLyogRmxhc2ggcGxheWVyIChlLmcuIENyb3NzYnJpZGdlKSAqLworI2lmIGRlZmluZWQo X19GTEFTSFBMQVlFUl9fKQorI2RlZmluZSBEVUtfRl9GTEFTSFBMQVlFUgorI2VuZGlmCisKKy8q IFFOWCAqLworI2lmIGRlZmluZWQoX19RTlhfXykKKyNkZWZpbmUgRFVLX0ZfUU5YCisjZW5kaWYK KworLyogVEktTnNwaXJlICh1c2luZyBOZGxlc3MpICovCisjaWYgZGVmaW5lZChfVElOU1BJUkUp CisjZGVmaW5lIERVS19GX1RJTlNQSVJFCisjZW5kaWYKKworLyogRW1zY3JpcHRlbiAocHJvdmlk ZWQgZXhwbGljaXRseSBieSB1c2VyKSwgaW1wcm92ZSBpZiBwb3NzaWJsZSAqLworI2lmIGRlZmlu ZWQoRU1TQ1JJUFRFTikKKyNkZWZpbmUgRFVLX0ZfRU1TQ1JJUFRFTgorI2VuZGlmCisKKy8qIEJD QyAoQnJ1Y2UncyBDIGNvbXBpbGVyKTogdGhpcyBpcyBhICJ0b3J0dXJlIHRhcmdldCIgZm9yIGNv bXBpbGF0aW9uICovCisjaWYgZGVmaW5lZChfX0JDQ19fKSB8fCBkZWZpbmVkKF9fQkNDX1ZFUlNJ T05fXykKKyNkZWZpbmUgRFVLX0ZfQkNDCisjZW5kaWYKKworLyogTGludXggKi8KKyNpZiBkZWZp bmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKGxpbnV4KQorI2Rl ZmluZSBEVUtfRl9MSU5VWAorI2VuZGlmCisKKy8qIGlsbHVtb3MgLyBTb2xhcmlzICovCisjaWYg ZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX1NWUjQpCisjZGVmaW5lIERVS19GX1NVTgorI2lm IGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPCAweDU1MCkKKyNkZWZpbmUgRFVL X0ZfT0xEX1NPTEFSSVMKKy8qIERlZmluZXMgX0lMUDMyIC8gX0xQNjQgcmVxdWlyZWQgYnkgRFVL X0ZfWDg2L0RVS19GX1g2NC4gIFBsYXRmb3JtcworICogYXJlIHByb2Nlc3NlZCBiZWZvcmUgYXJj aGl0ZWN0dXJlcywgc28gdGhpcyBoYXBwZW5zIGJlZm9yZSB0aGUKKyAqIERVS19GX1g4Ni9EVUtf Rl9YNjQgZGV0ZWN0aW9uIGlzIGVtaXR0ZWQuCisgKi8KKyNpbmNsdWRlIDxzeXMvaXNhX2RlZnMu aD4KKyNlbmRpZgorI2VuZGlmCisKKy8qIEFJWCAqLworI2lmIGRlZmluZWQoX0FJWCkKKy8qIGRl ZmluZWQoX194bGNfXykgfHwgZGVmaW5lZChfX0lCTUNfXyk6IHdvcmtzIGJ1dCB0b28gd2lkZSAq LworI2RlZmluZSBEVUtfRl9BSVgKKyNlbmRpZgorCisvKiBIUFVYICovCisjaWYgZGVmaW5lZChf X2hwdXgpCisjZGVmaW5lIERVS19GX0hQVVgKKyNpZiBkZWZpbmVkKF9faWE2NCkKKyNkZWZpbmUg RFVLX0ZfSFBVWF9JVEFOSVVNCisjZW5kaWYKKyNlbmRpZgorCisvKiBQT1NJWCAqLworI2lmIGRl ZmluZWQoX19wb3NpeCkKKyNkZWZpbmUgRFVLX0ZfUE9TSVgKKyNlbmRpZgorCisvKiBDeWd3aW4g Ki8KKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjZGVmaW5lIERVS19GX0NZR1dJTgorI2VuZGlm CisKKy8qIEdlbmVyaWMgVW5peCAoaW5jbHVkZXMgQ3lnd2luKSAqLworI2lmIGRlZmluZWQoX191 bml4KSB8fCBkZWZpbmVkKF9fdW5peF9fKSB8fCBkZWZpbmVkKHVuaXgpIHx8IFwKKyAgICBkZWZp bmVkKERVS19GX0xJTlVYKSB8fCBkZWZpbmVkKERVS19GX0JTRCkKKyNkZWZpbmUgRFVLX0ZfVU5J WAorI2VuZGlmCisKKy8qIEludGVsIHg4NiAoMzItYml0KSwgeDY0ICg2NC1iaXQpIG9yIHgzMiAo NjQtYml0IGJ1dCAzMi1iaXQgcG9pbnRlcnMpLAorICogZGVmaW5lIG9ubHkgb25lIG9mIERVS19G X1g4NiwgRFVLX0ZfWDY0LCBEVUtfRl9YMzIuCisgKiBodHRwczovL3NpdGVzLmdvb2dsZS5jb20v c2l0ZS94MzJhYmkvCisgKgorICogV2l0aCBEVUtfRl9PTERfU09MQVJJUyB0aGUgPHN5cy9pc2Ff ZGVmcy5oPiBoZWFkZXIgbXVzdCBiZSBpbmNsdWRlZAorICogYmVmb3JlIHRoaXMuCisgKi8KKyNp ZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2FtZDY0KSB8fCBcCisgICAgZGVmaW5l ZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KSB8fCBcCisgICAgZGVmaW5lZChfTV9Y NjQpIHx8IGRlZmluZWQoX01fQU1ENjQpCisjaWYgZGVmaW5lZChfX0lMUDMyX18pIHx8IGRlZmlu ZWQoX0lMUDMyKQorI2RlZmluZSBEVUtfRl9YMzIKKyNlbHNlCisjZGVmaW5lIERVS19GX1g2NAor I2VuZGlmCisjZWxpZiBkZWZpbmVkKGkzODYpIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVk KF9faTM4Nl9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9faTQ4Nl9fKSB8fCBkZWZpbmVkKF9faTU4 Nl9fKSB8fCBkZWZpbmVkKF9faTY4Nl9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fSUEzMl9fKSB8 fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX19YODZfXykgfHwgXAorICAgICAgZGVmaW5l ZChfWDg2XykgfHwgZGVmaW5lZChfX1RIV19JTlRFTF9fKSB8fCBkZWZpbmVkKF9fSTg2X18pCisj aWYgZGVmaW5lZChfX0xQNjRfXykgfHwgZGVmaW5lZChfTFA2NCkKKy8qIFRoaXMgc2hvdWxkIG5v dCByZWFsbHkgaGFwcGVuLCBidXQgd291bGQgaW5kaWNhdGUgeDY0LiAqLworI2RlZmluZSBEVUtf Rl9YNjQKKyNlbHNlCisjZGVmaW5lIERVS19GX1g4NgorI2VuZGlmCisjZW5kaWYKKworLyogQVJN ICovCisjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5l ZChfQVJNKSB8fCBkZWZpbmVkKF9NX0FSTSkgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNkZWZp bmUgRFVLX0ZfQVJNCisjaWYgZGVmaW5lZChfX0xQNjRfXykgfHwgZGVmaW5lZChfTFA2NCkgfHwg ZGVmaW5lZChfX2FybTY0KSB8fCBkZWZpbmVkKF9fYXJtNjRfXykgfHwgZGVmaW5lZChfX2FhcmNo NjRfXykKKyNkZWZpbmUgRFVLX0ZfQVJNNjQKKyNlbHNlCisjZGVmaW5lIERVS19GX0FSTTMyCisj ZW5kaWYKKyNlbmRpZgorCisvKiBNSVBTLiAgUmVsYXRlZCBkZWZpbmVzOiBfX01JUFNFQl9fLCBf X01JUFNFTF9fLCBfX21pcHNfaXNhX3JldiwgX19MUDY0X18gKi8KKyNpZiBkZWZpbmVkKF9fbWlw c19fKSB8fCBkZWZpbmVkKG1pcHMpIHx8IGRlZmluZWQoX01JUFNfSVNBKSB8fCBcCisgICAgZGVm aW5lZChfUjMwMDApIHx8IGRlZmluZWQoX1I0MDAwKSB8fCBkZWZpbmVkKF9SNTkwMCkgfHwgXAor ICAgIGRlZmluZWQoX01JUFNfSVNBX01JUFMxKSB8fCBkZWZpbmVkKF9NSVBTX0lTQV9NSVBTMikg fHwgXAorICAgIGRlZmluZWQoX01JUFNfSVNBX01JUFMzKSB8fCBkZWZpbmVkKF9NSVBTX0lTQV9N SVBTNCkgfHwgXAorICAgIGRlZmluZWQoX19taXBzKSB8fCBkZWZpbmVkKF9fTUlQU19fKQorI2Rl ZmluZSBEVUtfRl9NSVBTCisjaWYgZGVmaW5lZChfX0xQNjRfXykgfHwgZGVmaW5lZChfTFA2NCkg fHwgZGVmaW5lZChfX21pcHM2NCkgfHwgXAorICAgIGRlZmluZWQoX19taXBzNjRfXykgfHwgZGVm aW5lZChfX21pcHNfbjY0KQorI2RlZmluZSBEVUtfRl9NSVBTNjQKKyNlbHNlCisjZGVmaW5lIERV S19GX01JUFMzMgorI2VuZGlmCisjZW5kaWYKKworLyogU1BBUkMgKi8KKyNpZiBkZWZpbmVkKHNw YXJjKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8IGRlZmluZWQoX19zcGFyY19fKQorI2RlZmluZSBE VUtfRl9TUEFSQworI2lmIGRlZmluZWQoX19MUDY0X18pIHx8IGRlZmluZWQoX0xQNjQpCisjZGVm aW5lIERVS19GX1NQQVJDNjQKKyNlbHNlCisjZGVmaW5lIERVS19GX1NQQVJDMzIKKyNlbmRpZgor I2VuZGlmCisKKy8qIFN1cGVySCAqLworI2lmIGRlZmluZWQoX19zaF9fKSB8fCBcCisgICAgZGVm aW5lZChfX3NoMV9fKSB8fCBkZWZpbmVkKF9fU0gxX18pIHx8IFwKKyAgICBkZWZpbmVkKF9fc2gy X18pIHx8IGRlZmluZWQoX19TSDJfXykgfHwgXAorICAgIGRlZmluZWQoX19zaDNfXykgfHwgZGVm aW5lZChfX1NIM19fKSB8fCBcCisgICAgZGVmaW5lZChfX3NoNF9fKSB8fCBkZWZpbmVkKF9fU0g0 X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fc2g1X18pIHx8IGRlZmluZWQoX19TSDVfXykKKyNkZWZp bmUgRFVLX0ZfU1VQRVJICisjZW5kaWYKKworLyogQ2xhbmcgKi8KKyNpZiBkZWZpbmVkKF9fY2xh bmdfXykKKyNkZWZpbmUgRFVLX0ZfQ0xBTkcKKyNlbmRpZgorCisvKiBDKysgKi8KKyN1bmRlZiBE VUtfRl9DUFAKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBEVUtfRl9DUFAKKyNl bmRpZgorCisvKiBDOTkgb3IgYWJvdmUgKi8KKyN1bmRlZiBEVUtfRl9DOTkKKyNpZiBkZWZpbmVk KF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjZGVm aW5lIERVS19GX0M5OQorI2VuZGlmCisKKy8qIEMrKzExIG9yIGFib3ZlICovCisjdW5kZWYgRFVL X0ZfQ1BQMTEKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAoX19jcGx1c3BsdXMgPj0gMjAx MTAzTCkKKyNkZWZpbmUgRFVLX0ZfQ1BQMTEKKyNlbmRpZgorCisvKiBHQ0MuICBDbGFuZyBhbHNv IGRlZmluZXMgX19HTlVDX18gc28gZG9uJ3QgZGV0ZWN0IEdDQyBpZiB1c2luZyBDbGFuZy4gKi8K KyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVk KERVS19GX0NMQU5HKQorI2RlZmluZSBEVUtfRl9HQ0MKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAm JiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKSAmJiBkZWZpbmVkKF9fR05VQ19QQVRDSExFVkVMX18p CisvKiBDb252ZW5pZW5jZSwgZS5nLiBnY2MgNC41LjEgPT0gNDA1MDE7IGh0dHA6Ly9zdGFja292 ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAzMTgxOS9lbXVsYXRpbmctZ2Njcy1idWlsdGluLXVucmVh Y2hhYmxlICovCisjZGVmaW5lIERVS19GX0dDQ19WRVJTSU9OICAoX19HTlVDX18gKiAxMDAwMEwg KyBfX0dOVUNfTUlOT1JfXyAqIDEwMEwgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorI2Vsc2UKKyNl cnJvciBjYW5ub3QgZmlndXJlIG91dCBnY2MgdmVyc2lvbgorI2VuZGlmCisjZW5kaWYKKworLyog TWluR1cuICBBbHNvIEdDQyBmbGFncyAoRFVLX0ZfR0NDKSBhcmUgZW5hYmxlZCBub3cuICovCisj aWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX01JTkdXNjRfXykKKyNkZWZpbmUg RFVLX0ZfTUlOR1cKKyNlbmRpZgorCisvKiBNU1ZDICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikK Ky8qIE1TVkMgcHJlcHJvY2Vzc29yIGRlZmluZXM6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v ZW4tdXMvbGlicmFyeS9iMDA4NGtheS5hc3B4CisgKiBfTVNDX0ZVTExfVkVSIGluY2x1ZGVzIHRo ZSBidWlsZCBudW1iZXIsIGJ1dCBpdCBoYXMgYXQgbGVhc3QgdHdvIGZvcm1hdHMsIHNlZSBlLmcu CisgKiBCT09TVF9NU1ZDX0ZVTExfVkVSIGluIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJz LzFfNTJfMC9ib29zdC9jb25maWcvY29tcGlsZXIvdmlzdWFsYy5ocHAKKyAqLworI2RlZmluZSBE VUtfRl9NU1ZDCisjaWYgZGVmaW5lZChfTVNDX0ZVTExfVkVSKQorI2lmIChfTVNDX0ZVTExfVkVS ID4gMTAwMDAwMDAwKQorI2RlZmluZSBEVUtfRl9NU1ZDX0ZVTExfVkVSIF9NU0NfRlVMTF9WRVIK KyNlbHNlCisjZGVmaW5lIERVS19GX01TQ1ZfRlVMTF9WRVIgKF9NU0NfRlVMTF9WRVIgKiAxMCkK KyNlbmRpZgorI2VuZGlmCisjZW5kaWYgIC8qIF9NU0NfVkVSICovCisKKy8qIFRpbnlDICovCisj aWYgZGVmaW5lZChfX1RJTllDX18pCisvKiBodHRwOi8vYmVsbGFyZC5vcmcvdGNjL3RjYy1kb2Mu aHRtbCNTRUM5ICovCisjZGVmaW5lIERVS19GX1RJTllDCisjZW5kaWYKKworLyogVkJDQyAqLwor I2lmIGRlZmluZWQoX19WQkNDX18pCisjZGVmaW5lIERVS19GX1ZCQ0MKKyNlbmRpZgorCisjaWYg ZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKQorI2RlZmluZSBEVUtfRl9B TkRST0lECisjZW5kaWYKKworLyogQXRhcmkgTWludCAqLworI2lmIGRlZmluZWQoX19NSU5UX18p CisjZGVmaW5lIERVS19GX01JTlQKKyNlbmRpZgorCisvKgorICogIFBsYXRmb3JtIGF1dG9kZXRl Y3Rpb24KKyAqLworCisvKiBXb3JrYXJvdW5kIGZvciBvbGRlciBDKysgY29tcGlsZXJzIGJlZm9y ZSBpbmNsdWRpbmcgPGludHR5cGVzLmg+LAorICogc2VlIGUuZy46IGh0dHBzOi8vc291cmNld2Fy ZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE1MzY2CisgKi8KKyNpZiBkZWZpbmVkKF9f Y3BsdXNwbHVzKSAmJiAhZGVmaW5lZChfX1NURENfTElNSVRfTUFDUk9TKQorI2RlZmluZSBfX1NU RENfTElNSVRfTUFDUk9TCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAhZGVm aW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorI2RlZmluZSBfX1NURENfQ09OU1RBTlRfTUFD Uk9TCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX0ZfQVBQTEUpCisvKiAtLS0gTWFjIE9TWCwg aVBob25lLCBEYXJ3aW4gLS0tICovCisjZGVmaW5lIERVS19VU0VfREFURV9OT1dfR0VUVElNRU9G REFZCisjZGVmaW5lIERVS19VU0VfREFURV9UWk9fR01USU1FX1IKKyNkZWZpbmUgRFVLX1VTRV9E QVRFX1BSU19TVFJQVElNRQorI2RlZmluZSBEVUtfVVNFX0RBVEVfRk1UX1NUUkZUSU1FCisjaW5j bHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisjaW5jbHVkZSA8YXJjaGl0ZWN0dXJlL2J5dGVf b3JkZXIuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgor I2luY2x1ZGUgPHRpbWUuaD4KKworLyogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9u cy81OTE5OTk2L2hvdy10by1kZXRlY3QtcmVsaWFibHktbWFjLW9zLXgtaW9zLWxpbnV4LXdpbmRv d3MtaW4tYy1wcmVwcm9jZXNzb3IgKi8KKyNpZiBUQVJHRVRfSVBIT05FX1NJTVVMQVRPUgorI2Rl ZmluZSBEVUtfVVNFX09TX1NUUklORyAiaXBob25lLXNpbSIKKyNlbGlmIFRBUkdFVF9PU19JUEhP TkUKKyNkZWZpbmUgRFVLX1VTRV9PU19TVFJJTkcgImlwaG9uZSIKKyNlbGlmIFRBUkdFVF9PU19N QUMKKyNkZWZpbmUgRFVLX1VTRV9PU19TVFJJTkcgIm9zeCIKKyNlbHNlCisjZGVmaW5lIERVS19V U0VfT1NfU1RSSU5HICJvc3gtdW5rbm93biIKKyNlbmRpZgorCisvKiBVc2UgX3NldGptcCgpIG9u IEFwcGxlIGJ5IGRlZmF1bHQsIHNlZSBHSC01NS4gKi8KKyNkZWZpbmUgRFVLX0pNUEJVRl9UWVBF ICAgICAgIGptcF9idWYKKyNkZWZpbmUgRFVLX1NFVEpNUChqYikgICAgICAgIF9zZXRqbXAoKGpi KSkKKyNkZWZpbmUgRFVLX0xPTkdKTVAoamIpICAgICAgIF9sb25nam1wKChqYiksIDEpCisjZWxp ZiBkZWZpbmVkKERVS19GX09SQklTKQorLyogLS0tIE9yYmlzIC0tLSAqLworLyogT3JiaXMgPSBQ UzQgKi8KKyNkZWZpbmUgRFVLX1VTRV9EQVRFX05PV19HRVRUSU1FT0ZEQVkKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX1RaT19HTVRJTUVfUworLyogbm8gcGFyc2luZyAobm90IGFuIGVycm9yKSAqLwor I2RlZmluZSBEVUtfVVNFX0RBVEVfRk1UX1NUUkZUSU1FCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ CisjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNp bmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2RlZmluZSBEVUtfVVNF X09TX1NUUklORyAgIm9yYmlzIgorI2VsaWYgZGVmaW5lZChEVUtfRl9PUEVOQlNEKQorLyogLS0t IE9wZW5CU0QgLS0tICovCisvKiBodHRwOi8vd3d3Lm1vbmtleS5vcmcvb3BlbmJzZC9hcmNoaXZl L3BvcnRzLzA0MDEvbXNnMDAwODkuaHRtbCAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX0dF VFRJTUVPRkRBWQorI2RlZmluZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SCisjZGVmaW5lIERV S19VU0VfREFURV9QUlNfU1RSUFRJTUUKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElN RQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNpbmNs dWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUu aD4KKworI2RlZmluZSBEVUtfVVNFX09TX1NUUklORyAgIm9wZW5ic2QiCisjZWxpZiBkZWZpbmVk KERVS19GX0JTRCkKKy8qIC0tLSBHZW5lcmljIEJTRCAtLS0gKi8KKyNkZWZpbmUgRFVLX1VTRV9E QVRFX05PV19HRVRUSU1FT0ZEQVkKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX1RaT19HTVRJTUVfUgor I2RlZmluZSBEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FCisjZGVmaW5lIERVS19VU0VfREFURV9G TVRfU1RSRlRJTUUKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFu Lmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNs dWRlIDx0aW1lLmg+CisKKyNkZWZpbmUgRFVLX1VTRV9PU19TVFJJTkcgICJic2QiCisjZWxpZiBk ZWZpbmVkKERVS19GX1RPUykKKy8qIC0tLSBBdGFyaSBTVCBUT1MgLS0tICovCisjZGVmaW5lIERV S19VU0VfREFURV9OT1dfVElNRQorI2RlZmluZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRQorLyog bm8gcGFyc2luZyAobm90IGFuIGVycm9yKSAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVfRk1UX1NU UkZUSU1FCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIERVS19VU0VfT1NfU1RSSU5HICAi dG9zIgorCisvKiBUT1Mgb24gTTY4SyBpcyBhbHdheXMgYmlnIGVuZGlhbi4gKi8KKyNpZiAhZGVm aW5lZChEVUtfVVNFX0JZVEVPUkRFUikgJiYgZGVmaW5lZChEVUtfRl9NNjhLKQorI2RlZmluZSBE VUtfVVNFX0JZVEVPUkRFUiAzCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoRFVLX0ZfQU1JR0FPUykK Ky8qIC0tLSBBbWlnYU9TIC0tLSAqLworI2lmIGRlZmluZWQoRFVLX0ZfTTY4SykKKy8qIEFtaWdh T1Mgb24gTTY4ayAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX1RJTUUKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX1RaT19HTVRJTUUKKy8qIG5vIHBhcnNpbmcgKG5vdCBhbiBlcnJvcikgKi8KKyNk ZWZpbmUgRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElNRQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbGlm IGRlZmluZWQoRFVLX0ZfUFBDKQorI2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX0dFVFRJTUVPRkRB WQorI2RlZmluZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SCisjZGVmaW5lIERVS19VU0VfREFU RV9QUlNfU1RSUFRJTUUKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElNRQorI2luY2x1 ZGUgPHRpbWUuaD4KKyNpZiAhZGVmaW5lZChVSU5UUFRSX01BWCkKKyNkZWZpbmUgVUlOVFBUUl9N QVggVUlOVF9NQVgKKyNlbmRpZgorI2Vsc2UKKyNlcnJvciBBbWlnYU9TIGJ1dCBub3QgTTY4Sy9Q UEMsIG5vdCBzdXBwb3J0ZWQgbm93CisjZW5kaWYKKworI2RlZmluZSBEVUtfVVNFX09TX1NUUklO RyAiYW1pZ2FvcyIKKworLyogQW1pZ2FPUyBvbiBNNjhLIG9yIFBQQyBpcyBhbHdheXMgYmlnIGVu ZGlhbi4gKi8KKyNpZiAhZGVmaW5lZChEVUtfVVNFX0JZVEVPUkRFUikgJiYgKGRlZmluZWQoRFVL X0ZfTTY4SykgfHwgZGVmaW5lZChEVUtfRl9QUEMpKQorI2RlZmluZSBEVUtfVVNFX0JZVEVPUkRF UiAzCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoRFVLX0ZfRFVSQU5HTykKKy8qIC0tLSBEdXJhbmdv IChYYm94T25lKSAtLS0gKi8KKy8qIER1cmFuZ28gPSBYYm94T25lCisgKiBDb25maWd1cmF0aW9u IGlzIG5lYXJseSBpZGVudGljYWwgdG8gV2luZG93cywgZXhjZXB0IGZvcgorICogRFVLX1VTRV9E QVRFX1RaT19XSU5ET1dTLgorICovCisKKy8qIEluaXRpYWwgZml4OiBkaXNhYmxlIHNlY3VyZSBD UlQgcmVsYXRlZCB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyBEdWt0YXBlCisgKiBpdHNlbGYgKG11 c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIFdpbmRvd3MgaGVhZGVycykuICBEb24ndCBk ZWZpbmUKKyAqIGZvciB1c2VyIGNvZGUgaW5jbHVkaW5nIGR1a3RhcGUuaC4KKyAqLworI2lmIGRl ZmluZWQoRFVLX0NPTVBJTElOR19EVUtUQVBFKSAmJiAhZGVmaW5lZChfQ1JUX1NFQ1VSRV9OT19X QVJOSU5HUykKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorCisvKiBN U1ZDIGRvZXMgbm90IGhhdmUgc3lzL3BhcmFtLmggKi8KKyNkZWZpbmUgRFVLX1VTRV9EQVRFX05P V19XSU5ET1dTCisjZGVmaW5lIERVS19VU0VfREFURV9UWk9fV0lORE9XU19OT19EU1QKKy8qIE5v dGU6IFBSUyBhbmQgRk1UIGFyZSBpbnRlbnRpb25hbGx5IGxlZnQgdW5kZWZpbmVkIGZvciBub3cu ICBUaGlzIG1lYW5zCisgKiB0aGVyZSBpcyBubyBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRlIHBhcnNp bmcvZm9ybWF0dGluZyBidXQgdGhlcmUgaXMgc3RpbGwKKyAqIHRoZSBJU08gODYwMSBzdGFuZGFy ZCBmb3JtYXQuCisgKi8KKyNpZiBkZWZpbmVkKERVS19DT01QSUxJTkdfRFVLVEFQRSkKKy8qIE9u bHkgaW5jbHVkZSB3aGVuIGNvbXBpbGluZyBEdWt0YXBlIHRvIGF2b2lkIHBvbGx1dGluZyBhcHBs aWNhdGlvbiBidWlsZAorICogd2l0aCBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBkZWZpbmVzLgorICov CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNkZWZpbmUgRFVLX1VTRV9PU19TVFJJ TkcgImR1cmFuZ28iCisKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0JZVEVPUkRFUikKKyNkZWZpbmUg RFVLX1VTRV9CWVRFT1JERVIgMQorI2VuZGlmCisjZWxpZiBkZWZpbmVkKERVS19GX1dJTkRPV1Mp CisvKiAtLS0gV2luZG93cyAtLS0gKi8KKy8qIFdpbmRvd3MgdmVyc2lvbiBjYW4ndCBvYnZpb3Vz bHkgYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUsCisgKiBidXQgX1dJTjMyX1dJTk5UIGlu ZGljYXRlcyB0aGUgbWluaW11bSB2ZXJzaW9uIHRhcmdldGVkOgorICogLSBodHRwczovL21zZG4u bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzZzZWh0Y3RmLmFzcHgKKyAqLworCisvKiBJbml0 aWFsIGZpeDogZGlzYWJsZSBzZWN1cmUgQ1JUIHJlbGF0ZWQgd2FybmluZ3Mgd2hlbiBjb21waWxp bmcgRHVrdGFwZQorICogaXRzZWxmIChtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBX aW5kb3dzIGhlYWRlcnMpLiAgRG9uJ3QgZGVmaW5lCisgKiBmb3IgdXNlciBjb2RlIGluY2x1ZGlu ZyBkdWt0YXBlLmguCisgKi8KKyNpZiBkZWZpbmVkKERVS19DT01QSUxJTkdfRFVLVEFQRSkgJiYg IWRlZmluZWQoX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MpCisjZGVmaW5lIF9DUlRfU0VDVVJFX05P X1dBUk5JTkdTCisjZW5kaWYKKworLyogV2luZG93cyAzMi1iaXQgYW5kIDY0LWJpdCBhcmUgY3Vy cmVudGx5IHRoZSBzYW1lLiAqLworLyogTVNWQyBkb2VzIG5vdCBoYXZlIHN5cy9wYXJhbS5oICov CisKKyNpZiBkZWZpbmVkKERVS19DT01QSUxJTkdfRFVLVEFQRSkKKy8qIE9ubHkgaW5jbHVkZSB3 aGVuIGNvbXBpbGluZyBEdWt0YXBlIHRvIGF2b2lkIHBvbGx1dGluZyBhcHBsaWNhdGlvbiBidWls ZAorICogd2l0aCBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBkZWZpbmVzLgorICovCisjaW5jbHVkZSA8 d2luZG93cy5oPgorI2VuZGlmCisKKy8qIEdldFN5c3RlbVRpbWVQcmVjaXNlQXNGaWxlVGltZSgp IGF2YWlsYWJsZSBmcm9tIFdpbmRvd3MgODoKKyAqIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29t L2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2hoNzA2ODk1KHY9dnMuODUpLmFzcHgKKyAq LworI2lmIGRlZmluZWQoRFVLX1VTRV9EQVRFX05PV19XSU5ET1dTX1NVQk1TKSB8fCBkZWZpbmVk KERVS19VU0VfREFURV9OT1dfV0lORE9XUykKKy8qIFVzZXIgZm9yY2VkIHByb3ZpZGVyLiAqLwor I2Vsc2UKKyNpZiBkZWZpbmVkKF9XSU4zMl9XSU5OVCkgJiYgKF9XSU4zMl9XSU5OVCA+PSAweDA2 MDIpCisjZGVmaW5lIERVS19VU0VfREFURV9OT1dfV0lORE9XU19TVUJNUworI2Vsc2UKKyNkZWZp bmUgRFVLX1VTRV9EQVRFX05PV19XSU5ET1dTCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIERV S19VU0VfREFURV9UWk9fV0lORE9XUworCisvKiBOb3RlOiBQUlMgYW5kIEZNVCBhcmUgaW50ZW50 aW9uYWxseSBsZWZ0IHVuZGVmaW5lZCBmb3Igbm93LiAgVGhpcyBtZWFucworICogdGhlcmUgaXMg bm8gcGxhdGZvcm0gc3BlY2lmaWMgZGF0ZSBwYXJzaW5nL2Zvcm1hdHRpbmcgYnV0IHRoZXJlIGlz IHN0aWxsCisgKiB0aGUgSVNPIDg2MDEgc3RhbmRhcmQgZm9ybWF0LgorICovCisKKy8qIFF1ZXJ5 UGVyZm9ybWFuY2VDb3VudGVyKCkgbWF5IGdvIGJhY2t3YXJkcyBpbiBXaW5kb3dzIFhQLCBzbyBl bmFibGUgZm9yCisgKiBWaXN0YSBhbmQgbGF0ZXI6IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29t L2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2RuNTUzNDA4KHY9dnMuODUpLmFzcHgjcXBj X3N1cHBvcnRfaW5fd2luZG93c192ZXJzaW9ucworICovCisjaWYgIWRlZmluZWQoRFVLX1VTRV9H RVRfTU9OT1RPTklDX1RJTUVfV0lORE9XU19RUEMpICYmIFwKKyAgICBkZWZpbmVkKF9XSU4zMl9X SU5OVCkgJiYgKF9XSU4zMl9XSU5OVCA+PSAweDA2MDApCisjZGVmaW5lIERVS19VU0VfR0VUX01P Tk9UT05JQ19USU1FX1dJTkRPV1NfUVBDCisjZW5kaWYKKworI2RlZmluZSBEVUtfVVNFX09TX1NU UklORyAid2luZG93cyIKKworLyogT24gV2luZG93cywgYXNzdW1lIHdlJ3JlIGxpdHRsZSBlbmRp YW4uICBFdmVuIEl0YW5pdW0gd2hpY2ggaGFzIGEKKyAqIGNvbmZpZ3VyYWJsZSBlbmRpYW5uZXNz IHJ1bnMgbGl0dGxlIGVuZGlhbiBpbiBXaW5kb3dzLgorICovCisjaWYgIWRlZmluZWQoRFVLX1VT RV9CWVRFT1JERVIpCisjZGVmaW5lIERVS19VU0VfQllURU9SREVSIDEKKyNlbmRpZgorI2VsaWYg ZGVmaW5lZChEVUtfRl9GTEFTSFBMQVlFUikKKy8qIC0tLSBGbGFzaHBsYXllciAoQ3Jvc3Nicmlk Z2UpIC0tLSAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX0dFVFRJTUVPRkRBWQorI2RlZmlu ZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SCisjZGVmaW5lIERVS19VU0VfREFURV9QUlNfU1RS UFRJTUUKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElNRQorI2luY2x1ZGUgPGVuZGlh bi5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5j bHVkZSA8dGltZS5oPgorCisjZGVmaW5lIERVS19VU0VfT1NfU1RSSU5HICJmbGFzaHBsYXllciIK KworI2lmICFkZWZpbmVkKERVS19VU0VfQllURU9SREVSKSAmJiBkZWZpbmVkKERVS19GX0ZMQVNI UExBWUVSKQorI2RlZmluZSBEVUtfVVNFX0JZVEVPUkRFUiAxCisjZW5kaWYKKyNlbGlmIGRlZmlu ZWQoRFVLX0ZfUU5YKQorLyogLS0tIFFOWCAtLS0gKi8KKyNpZiBkZWZpbmVkKERVS19GX1FOWCkg JiYgZGVmaW5lZChEVUtfQ09NUElMSU5HX0RVS1RBUEUpCisvKiBTZWU6IC9vcHQvcW54NjUwL3Rh cmdldC9xbng2L3Vzci9pbmNsdWRlL3N5cy9wbGF0Zm9ybS5oICovCisjZGVmaW5lIF9YT1BFTl9T T1VSQ0UgICAgNjAwCisjZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAgMjAwMTEyTAorI2VuZGlmCisK KyNkZWZpbmUgRFVLX1VTRV9EQVRFX05PV19HRVRUSU1FT0ZEQVkKKyNkZWZpbmUgRFVLX1VTRV9E QVRFX1RaT19HTVRJTUVfUgorI2RlZmluZSBEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FCisjZGVm aW5lIERVS19VU0VfREFURV9GTVRfU1RSRlRJTUUKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp bmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRp bWUuaD4KKworI2RlZmluZSBEVUtfVVNFX09TX1NUUklORyAicW54IgorI2VsaWYgZGVmaW5lZChE VUtfRl9USU5TUElSRSkKKy8qIC0tLSBUSS1Oc3BpcmUgLS0tICovCisjaWYgZGVmaW5lZChEVUtf Q09NUElMSU5HX0RVS1RBUEUpICYmICFkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpCisjZGVmaW5lIF9Y T1BFTl9TT1VSQ0UgICAgLyogZS5nLiBzdHJwdGltZSAqLworI2VuZGlmCisKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX05PV19HRVRUSU1FT0ZEQVkKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX1RaT19HTVRJ TUVfUgorI2RlZmluZSBEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FCisjZGVmaW5lIERVS19VU0Vf REFURV9GTVRfU1RSRlRJTUUKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv cGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2Rl ZmluZSBEVUtfVVNFX09TX1NUUklORyAidGluc3BpcmUiCisjZWxpZiBkZWZpbmVkKERVS19GX0VN U0NSSVBURU4pCisvKiAtLS0gRW1zY3JpcHRlbiAtLS0gKi8KKyNpZiBkZWZpbmVkKERVS19DT01Q SUxJTkdfRFVLVEFQRSkKKyNpZiAhZGVmaW5lZChfUE9TSVhfQ19TT1VSQ0UpCisjZGVmaW5lIF9Q T1NJWF9DX1NPVVJDRSAgMjAwODA5TAorI2VuZGlmCisjaWYgIWRlZmluZWQoX0dOVV9TT1VSQ0Up CisjZGVmaW5lIF9HTlVfU09VUkNFICAgICAgLyogZS5nLiBnZXRkYXRlX3IgKi8KKyNlbmRpZgor I2lmICFkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgICAgLyog ZS5nLiBzdHJwdGltZSAqLworI2VuZGlmCisjZW5kaWYgIC8qIERVS19DT01QSUxJTkdfRFVLVEFQ RSAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgZGVmaW5lZChEVUtfRl9CQ0MpCisv KiBubyBlbmRpYW4uaCAqLworI2Vsc2UKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbmRpZiAgLyog RFVLX0ZfQkNDICovCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUu aD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX05PV19HRVRUSU1FT0ZEQVkKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX1RaT19HTVRJ TUVfUgorI2RlZmluZSBEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FCisjZGVmaW5lIERVS19VU0Vf REFURV9GTVRfU1RSRlRJTUUKKworI2RlZmluZSBEVUtfVVNFX09TX1NUUklORyAiZW1zY3JpcHRl biIKKyNlbGlmIGRlZmluZWQoRFVLX0ZfTElOVVgpCisvKiAtLS0gTGludXggLS0tICovCisjaWYg ZGVmaW5lZChEVUtfQ09NUElMSU5HX0RVS1RBUEUpCisjaWYgIWRlZmluZWQoX1BPU0lYX0NfU09V UkNFKQorI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgIDIwMDgwOUwKKyNlbmRpZgorI2lmICFkZWZp bmVkKF9HTlVfU09VUkNFKQorI2RlZmluZSBfR05VX1NPVVJDRSAgICAgIC8qIGUuZy4gZ2V0ZGF0 ZV9yICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfWE9QRU5fU09VUkNFKQorI2RlZmluZSBfWE9Q RU5fU09VUkNFICAgIC8qIGUuZy4gc3RycHRpbWUgKi8KKyNlbmRpZgorI2VuZGlmICAvKiBEVUtf Q09NUElMSU5HX0RVS1RBUEUgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIGRlZmlu ZWQoRFVLX0ZfQkNDKQorLyogbm8gZW5kaWFuLmggb3Igc3RkaW50LmggKi8KKyNlbHNlCisjaW5j bHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYgIC8qIERVS19GX0JD QyAqLworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5j bHVkZSA8dGltZS5oPgorCisjZGVmaW5lIERVS19VU0VfREFURV9OT1dfR0VUVElNRU9GREFZCisj ZGVmaW5lIERVS19VU0VfREFURV9UWk9fR01USU1FX1IKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX1BS U19TVFJQVElNRQorI2RlZmluZSBEVUtfVVNFX0RBVEVfRk1UX1NUUkZUSU1FCisKKyNpZiAwICAv KiBYWFg6IHNhZmUgY29uZGl0aW9uPyAqLworI2RlZmluZSBEVUtfVVNFX0dFVF9NT05PVE9OSUNf VElNRV9DTE9DS19HRVRUSU1FCisjZW5kaWYKKworI2RlZmluZSBEVUtfVVNFX09TX1NUUklORyAi bGludXgiCisjZWxpZiBkZWZpbmVkKERVS19GX1NVTikKKy8qIC0tLSBTb2xhcmlzIC0tLSAqLwor I2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX0dFVFRJTUVPRkRBWQorI2RlZmluZSBEVUtfVVNFX0RB VEVfVFpPX0dNVElNRV9SCisjZGVmaW5lIERVS19VU0VfREFURV9QUlNfU1RSUFRJTUUKKyNkZWZp bmUgRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElNRQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj aWYgZGVmaW5lZChEVUtfRl9PTERfU09MQVJJUykKKy8qIE9sZCBTb2xhcmlzIHdpdGggbm8gZW5k aWFuLmgsIHN0ZGludC5oICovCisjZGVmaW5lIERVS19GX05PX1NURElOVF9ICisjaWYgIWRlZmlu ZWQoRFVLX1VTRV9CWVRFT1JERVIpCisjZGVmaW5lIERVS19VU0VfQllURU9SREVSIDMKKyNlbmRp ZgorI2Vsc2UgIC8qIERVS19GX09MRF9TT0xBUklTICovCisjaW5jbHVkZSA8YXN0L2VuZGlhbi5o PgorI2VuZGlmICAvKiBEVUtfRl9PTERfU09MQVJJUyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFt Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNkZWZpbmUg RFVLX1VTRV9PU19TVFJJTkcgInNvbGFyaXMiCisjZWxpZiBkZWZpbmVkKERVS19GX0FJWCkKKy8q IC0tLSBBSVggLS0tICovCisjaWYgIWRlZmluZWQoRFVLX1VTRV9CWVRFT1JERVIpCisjZGVmaW5l IERVS19VU0VfQllURU9SREVSIDMKKyNlbmRpZgorI2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX0dF VFRJTUVPRkRBWQorI2RlZmluZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SCisjZGVmaW5lIERV S19VU0VfREFURV9QUlNfU1RSUFRJTUUKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX0ZNVF9TVFJGVElN RQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVk ZSA8dGltZS5oPgorCisjZGVmaW5lIERVS19VU0VfT1NfU1RSSU5HICJhaXgiCisjZWxpZiBkZWZp bmVkKERVS19GX0hQVVgpCisvKiAtLS0gSFBVWCAtLS0gKi8KKyNkZWZpbmUgRFVLX0ZfTk9fU1RE SU5UX0gKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0JZVEVPUkRFUikKKyNkZWZpbmUgRFVLX1VTRV9C WVRFT1JERVIgMworI2VuZGlmCisjZGVmaW5lIERVS19VU0VfREFURV9OT1dfR0VUVElNRU9GREFZ CisjZGVmaW5lIERVS19VU0VfREFURV9UWk9fR01USU1FX1IKKyNkZWZpbmUgRFVLX1VTRV9EQVRF X1BSU19TVFJQVElNRQorI2RlZmluZSBEVUtfVVNFX0RBVEVfRk1UX1NUUkZUSU1FCisjaW5jbHVk ZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+ CisKKyNkZWZpbmUgRFVLX1VTRV9PU19TVFJJTkcgImhwdXgiCisjZWxpZiBkZWZpbmVkKERVS19G X1BPU0lYKQorLyogLS0tIEdlbmVyaWMgUE9TSVggLS0tICovCisjZGVmaW5lIERVS19VU0VfREFU RV9OT1dfR0VUVElNRU9GREFZCisjZGVmaW5lIERVS19VU0VfREFURV9UWk9fR01USU1FX1IKKyNk ZWZpbmUgRFVLX1VTRV9EQVRFX1BSU19TVFJQVElNRQorI2RlZmluZSBEVUtfVVNFX0RBVEVfRk1U X1NUUkZUSU1FCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+Cisj aW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0 aW1lLmg+CisKKyNkZWZpbmUgRFVLX1VTRV9PU19TVFJJTkcgInBvc2l4IgorI2VsaWYgZGVmaW5l ZChEVUtfRl9DWUdXSU4pCisvKiAtLS0gQ3lnd2luIC0tLSAqLworLyogZG9uJ3QgdXNlIHN0cnB0 aW1lKCkgZm9yIG5vdyAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVfTk9XX0dFVFRJTUVPRkRBWQor I2RlZmluZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRV9SCisjZGVmaW5lIERVS19VU0VfREFURV9G TVRfU1RSRlRJTUUKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlbmRpYW4uaD4K KyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg PHRpbWUuaD4KKworI2RlZmluZSBEVUtfSk1QQlVGX1RZUEUgICAgICAgam1wX2J1ZgorI2RlZmlu ZSBEVUtfU0VUSk1QKGpiKSAgICAgICAgX3NldGptcCgoamIpKQorI2RlZmluZSBEVUtfTE9OR0pN UChqYikgICAgICAgX2xvbmdqbXAoKGpiKSwgMSkKKworI2RlZmluZSBEVUtfVVNFX09TX1NUUklO RyAid2luZG93cyIKKyNlbGlmIGRlZmluZWQoRFVLX0ZfVU5JWCkKKy8qIC0tLSBHZW5lcmljIFVO SVggLS0tICovCisjZGVmaW5lIERVS19VU0VfREFURV9OT1dfR0VUVElNRU9GREFZCisjZGVmaW5l IERVS19VU0VfREFURV9UWk9fR01USU1FX1IKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX1BSU19TVFJQ VElNRQorI2RlZmluZSBEVUtfVVNFX0RBVEVfRk1UX1NUUkZUSU1FCisjaW5jbHVkZSA8dGltZS5o PgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZGVmaW5lIERVS19VU0VfT1NfU1RSSU5HICJ1bmtu b3duIgorI2Vsc2UKKy8qIC0tLSBHZW5lcmljIGZhbGxiYWNrIC0tLSAqLworLyogVGhlIG1vc3Qg cG9ydGFibGUgY3VycmVudCB0aW1lIHByb3ZpZGVyIGlzIHRpbWUoKSwgYnV0IGl0IG9ubHkgaGFz IGEKKyAqIG9uZSBzZWNvbmQgcmVzb2x1dGlvbi4KKyAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVf Tk9XX1RJTUUKKworLyogVGhlIG1vc3QgcG9ydGFibGUgd2F5IHRvIGZpZ3VyZSBvdXQgbG9jYWwg dGltZSBvZmZzZXQgaXMgZ210aW1lKCksCisgKiBidXQgaXQncyBub3QgdGhyZWFkIHNhZmUgc28g dXNlIHdpdGggY2F1dGlvbi4KKyAqLworI2RlZmluZSBEVUtfVVNFX0RBVEVfVFpPX0dNVElNRQor CisvKiBBdm9pZCBjdXN0b20gZGF0ZSBwYXJzaW5nIGFuZCBmb3JtYXR0aW5nIGZvciBwb3J0YWJp bGl0eS4gKi8KKyN1bmRlZiBEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FCisjdW5kZWYgRFVLX1VT RV9EQVRFX0ZNVF9TVFJGVElNRQorCisvKiBSZWx5IG9uIEM4OSBoZWFkZXJzIG9ubHk7IHRpbWUu aCBtdXN0IGJlIGhlcmUuICovCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIERVS19VU0Vf T1NfU1RSSU5HICJ1bmtub3duIgorI2VuZGlmICAvKiBhdXRvZGV0ZWN0IHBsYXRmb3JtICovCisK Ky8qIFNoYXJlZCBpbmNsdWRlczogQzg5ICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4gIC8q IHZhcmFyZ3MgKi8KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4gIC8q IGUuZy4gcHRyZGlmZl90ICovCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGxpbWl0cy5o PgorCisvKiBkYXRlLmggaXMgb21pdHRlZCwgYW5kIGluY2x1ZGVkIHBlciBwbGF0Zm9ybSAqLwor CisvKiBTaGFyZWQgaW5jbHVkZXM6IHN0ZGludC5oIGlzIEM5OSAqLworI2lmIGRlZmluZWQoRFVL X0ZfTk9fU1RESU5UX0gpCisvKiBzdGRpbnQuaCBub3QgYXZhaWxhYmxlICovCisjZWxzZQorLyog VGVjaG5pY2FsbHkgQzk5IChDKysxMSkgYnV0IGZvdW5kIGluIG1hbnkgc3lzdGVtcy4gIE9uIHNv bWUgc3lzdGVtcworICogX19TVERDX0xJTUlUX01BQ1JPUyBhbmQgX19TVERDX0NPTlNUQU5UX01B Q1JPUyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlCisgKiBpbmNsdWRpbmcgc3RkaW50LmggKHNlZSBh Ym92ZSkuCisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisvKiA8ZXhjZXB0aW9u PiBpcyBvbmx5IGluY2x1ZGVkIGlmIG5lZWRlZCwgYmFzZWQgb24gRFVLX1VTRV94eHggZmxhZ3Mu ICovCisKKy8qCisgKiAgQXJjaGl0ZWN0dXJlIGF1dG9kZXRlY3Rpb24KKyAqLworCisjaWYgZGVm aW5lZChEVUtfRl9YODYpCisvKiAtLS0geDg2IC0tLSAqLworI2RlZmluZSBEVUtfVVNFX0FSQ0hf U1RSSU5HICJ4ODYiCisjaWYgIWRlZmluZWQoRFVLX1VTRV9CWVRFT1JERVIpCisjZGVmaW5lIERV S19VU0VfQllURU9SREVSIDEKKyNlbmRpZgorCisjZGVmaW5lIERVS19VU0VfUEFDS0VEX1RWQUwK KworLyogRnJlZUJTRCwgLW0zMiwgYW5kIGNsYW5nIHByaW9yIHRvIDUuMCBoYXMgdW5pb24gYWxp YXNpbmcgaXNzdWVzIHdoaWNoCisgKiBicmVhayBkdWtfdHZhbCBjb3B5aW5nLiAgRGlzYWJsZSBw YWNrZWQgZHVrX3R2YWwgYXV0b21hdGljYWxseS4KKyAqLworI2lmIGRlZmluZWQoRFVLX0ZfRlJF RUJTRCkgJiYgZGVmaW5lZChEVUtfRl9YODYpICYmIFwKKyAgICBkZWZpbmVkKF9fY2xhbmdfXykg JiYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pICYmIChfX2NsYW5nX21ham9yX18gPCA1KQorI3Vu ZGVmIERVS19VU0VfUEFDS0VEX1RWQUwKKyNlbmRpZgorI2RlZmluZSBEVUtfRl9QQUNLRURfVFZB TF9QUk9WSURFRAorI2VsaWYgZGVmaW5lZChEVUtfRl9YNjQpCisvKiAtLS0geDY0IC0tLSAqLwor I2RlZmluZSBEVUtfVVNFX0FSQ0hfU1RSSU5HICJ4NjQiCisjaWYgIWRlZmluZWQoRFVLX1VTRV9C WVRFT1JERVIpCisjZGVmaW5lIERVS19VU0VfQllURU9SREVSIDEKKyNlbmRpZgorI3VuZGVmIERV S19VU0VfUEFDS0VEX1RWQUwKKyNkZWZpbmUgRFVLX0ZfUEFDS0VEX1RWQUxfUFJPVklERUQKKyNl bGlmIGRlZmluZWQoRFVLX0ZfWDMyKQorLyogLS0tIHgzMiAtLS0gKi8KKyNkZWZpbmUgRFVLX1VT RV9BUkNIX1NUUklORyAieDMyIgorI2lmICFkZWZpbmVkKERVS19VU0VfQllURU9SREVSKQorI2Rl ZmluZSBEVUtfVVNFX0JZVEVPUkRFUiAxCisjZW5kaWYKKyNkZWZpbmUgRFVLX1VTRV9QQUNLRURf VFZBTAorI2RlZmluZSBEVUtfRl9QQUNLRURfVFZBTF9QUk9WSURFRAorI2VsaWYgZGVmaW5lZChE VUtfRl9BUk0zMikKKy8qIC0tLSBBUk0gMzItYml0IC0tLSAqLworI2RlZmluZSBEVUtfVVNFX0FS Q0hfU1RSSU5HICJhcm0zMiIKKy8qIEJ5dGUgb3JkZXIgdmFyaWVzLCBzbyByZWx5IG9uIGF1dG9k ZXRlY3QuICovCisjZGVmaW5lIERVS19VU0VfUEFDS0VEX1RWQUwKKyNkZWZpbmUgRFVLX0ZfUEFD S0VEX1RWQUxfUFJPVklERUQKKyNlbGlmIGRlZmluZWQoRFVLX0ZfQVJNNjQpCisvKiAtLS0gQVJN IDY0LWJpdCAtLS0gKi8KKyNkZWZpbmUgRFVLX1VTRV9BUkNIX1NUUklORyAiYXJtNjQiCisvKiBC eXRlIG9yZGVyIHZhcmllcywgc28gcmVseSBvbiBhdXRvZGV0ZWN0LiAqLworI3VuZGVmIERVS19V U0VfUEFDS0VEX1RWQUwKKyNkZWZpbmUgRFVLX0ZfUEFDS0VEX1RWQUxfUFJPVklERUQKKyNlbGlm IGRlZmluZWQoRFVLX0ZfTUlQUzMyKQorLyogLS0tIE1JUFMgMzItYml0IC0tLSAqLworI2RlZmlu ZSBEVUtfVVNFX0FSQ0hfU1RSSU5HICJtaXBzMzIiCisvKiBNSVBTIGJ5dGUgb3JkZXIgdmFyaWVz IHNvIHJlbHkgb24gYXV0b2RldGVjdGlvbi4gKi8KKyNkZWZpbmUgRFVLX1VTRV9QQUNLRURfVFZB TAorI2RlZmluZSBEVUtfRl9QQUNLRURfVFZBTF9QUk9WSURFRAorI2VsaWYgZGVmaW5lZChEVUtf Rl9NSVBTNjQpCisvKiAtLS0gTUlQUyA2NC1iaXQgLS0tICovCisjZGVmaW5lIERVS19VU0VfQVJD SF9TVFJJTkcgIm1pcHM2NCIKKy8qIE1JUFMgYnl0ZSBvcmRlciB2YXJpZXMgc28gcmVseSBvbiBh dXRvZGV0ZWN0aW9uLiAqLworI3VuZGVmIERVS19VU0VfUEFDS0VEX1RWQUwKKyNkZWZpbmUgRFVL X0ZfUEFDS0VEX1RWQUxfUFJPVklERUQKKyNlbGlmIGRlZmluZWQoRFVLX0ZfUFBDMzIpCisvKiAt LS0gUG93ZXJQQyAzMi1iaXQgLS0tICovCisjZGVmaW5lIERVS19VU0VfQVJDSF9TVFJJTkcgInBw YzMyIgorI2lmICFkZWZpbmVkKERVS19VU0VfQllURU9SREVSKQorI2RlZmluZSBEVUtfVVNFX0JZ VEVPUkRFUiAzCisjZW5kaWYKKyNkZWZpbmUgRFVLX1VTRV9QQUNLRURfVFZBTAorI2RlZmluZSBE VUtfRl9QQUNLRURfVFZBTF9QUk9WSURFRAorI2VsaWYgZGVmaW5lZChEVUtfRl9QUEM2NCkKKy8q IC0tLSBQb3dlclBDIDY0LWJpdCAtLS0gKi8KKyNkZWZpbmUgRFVLX1VTRV9BUkNIX1NUUklORyAi cHBjNjQiCisjaWYgIWRlZmluZWQoRFVLX1VTRV9CWVRFT1JERVIpCisjZGVmaW5lIERVS19VU0Vf QllURU9SREVSIDMKKyNlbmRpZgorI3VuZGVmIERVS19VU0VfUEFDS0VEX1RWQUwKKyNkZWZpbmUg RFVLX0ZfUEFDS0VEX1RWQUxfUFJPVklERUQKKyNlbGlmIGRlZmluZWQoRFVLX0ZfU1BBUkMzMikK Ky8qIC0tLSBTUEFSQyAzMi1iaXQgLS0tICovCisjZGVmaW5lIERVS19VU0VfQVJDSF9TVFJJTkcg InNwYXJjMzIiCisvKiBTUEFSQyBieXRlIG9yZGVyIHZhcmllcyBzbyByZWx5IG9uIGF1dG9kZXRl Y3Rpb24uICovCisjZGVmaW5lIERVS19VU0VfUEFDS0VEX1RWQUwKKyNkZWZpbmUgRFVLX0ZfUEFD S0VEX1RWQUxfUFJPVklERUQKKyNlbGlmIGRlZmluZWQoRFVLX0ZfU1BBUkM2NCkKKy8qIC0tLSBT UEFSQyA2NC1iaXQgLS0tICovCisjZGVmaW5lIERVS19VU0VfQVJDSF9TVFJJTkcgInNwYXJjNjQi CisvKiBTUEFSQyBieXRlIG9yZGVyIHZhcmllcyBzbyByZWx5IG9uIGF1dG9kZXRlY3Rpb24uICov CisjdW5kZWYgRFVLX1VTRV9QQUNLRURfVFZBTAorI2RlZmluZSBEVUtfRl9QQUNLRURfVFZBTF9Q Uk9WSURFRAorI2VsaWYgZGVmaW5lZChEVUtfRl9TVVBFUkgpCisvKiAtLS0gU3VwZXJIIC0tLSAq LworI2RlZmluZSBEVUtfVVNFX0FSQ0hfU1RSSU5HICJzaCIKKy8qIEJ5dGUgb3JkZXIgdmFyaWVz LCByZWx5IG9uIGF1dG9kZXRlY3Rpb24uICovCisjZGVmaW5lIERVS19VU0VfUEFDS0VEX1RWQUwK KyNkZWZpbmUgRFVLX0ZfUEFDS0VEX1RWQUxfUFJPVklERUQKKyNlbGlmIGRlZmluZWQoRFVLX0Zf TTY4SykKKy8qIC0tLSBNb3Rvcm9sYSA2OGsgLS0tICovCisjZGVmaW5lIERVS19VU0VfQVJDSF9T VFJJTkcgIm02OGsiCisjaWYgIWRlZmluZWQoRFVLX1VTRV9CWVRFT1JERVIpCisjZGVmaW5lIERV S19VU0VfQllURU9SREVSIDMKKyNlbmRpZgorI2RlZmluZSBEVUtfVVNFX1BBQ0tFRF9UVkFMCisj ZGVmaW5lIERVS19GX1BBQ0tFRF9UVkFMX1BST1ZJREVECisjZWxpZiBkZWZpbmVkKERVS19GX0VN U0NSSVBURU4pCisvKiAtLS0gRW1zY3JpcHRlbiAtLS0gKi8KKyNkZWZpbmUgRFVLX1VTRV9BUkNI X1NUUklORyAiZW1zY3JpcHRlbiIKKyNpZiAhZGVmaW5lZChEVUtfVVNFX0JZVEVPUkRFUikKKyNk ZWZpbmUgRFVLX1VTRV9CWVRFT1JERVIgMQorI2VuZGlmCisjdW5kZWYgRFVLX1VTRV9QQUNLRURf VFZBTAorI2RlZmluZSBEVUtfRl9QQUNLRURfVFZBTF9QUk9WSURFRAorI2Vsc2UKKy8qIC0tLSBH ZW5lcmljIC0tLSAqLworLyogVGhlc2UgYXJlIG5lY2Vzc2FyeSB3aWxkIGd1ZXNzZXMuICovCisj ZGVmaW5lIERVS19VU0VfQVJDSF9TVFJJTkcgImdlbmVyaWMiCisvKiBSZWx5IG9uIGF1dG9kZXRl Y3Rpb24gZm9yIGJ5dGUgb3JkZXIsIGFsaWdubWVudCwgYW5kIHBhY2tlZCB0dmFsLiAqLworI2Vu ZGlmICAvKiBhdXRvZGV0ZWN0IGFyY2hpdGVjdHVyZSAqLworCisvKgorICogIENvbXBpbGVyIGF1 dG9kZXRlY3Rpb24KKyAqLworCisjaWYgZGVmaW5lZChEVUtfRl9DTEFORykKKy8qIC0tLSBDbGFu ZyAtLS0gKi8KKyNpZiBkZWZpbmVkKERVS19GX0M5OSkgfHwgZGVmaW5lZChEVUtfRl9DUFAxMSkK Ky8qIEM5OSAvIEMrKzExIGFuZCBhYm92ZTogcmVseSBvbiB2YV9jb3B5KCkgd2hpY2ggaXMgcmVx dWlyZWQuICovCisjZGVmaW5lIERVS19WQV9DT1BZKGRlc3Qsc3JjKSB2YV9jb3B5KGRlc3Qsc3Jj KQorI2Vsc2UKKy8qIENsYW5nOiBhc3N1bWUgd2UgaGF2ZSBfX3ZhX2NvcHkoKSBpbiBub24tQzk5 IG1vZGUuICovCisjZGVmaW5lIERVS19WQV9DT1BZKGRlc3Qsc3JjKSBfX3ZhX2NvcHkoZGVzdCxz cmMpCisjZW5kaWYKKworI2RlZmluZSBEVUtfTk9SRVRVUk4oZGVjbCkgIGRlY2wgX19hdHRyaWJ1 dGVfXygobm9yZXR1cm4pKQorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19o YXNfYnVpbHRpbikKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl91bnJlYWNoYWJsZSkKKyNk ZWZpbmUgRFVLX1VOUkVBQ0hBQkxFKCkgIGRvIHsgX19idWlsdGluX3VucmVhY2hhYmxlKCk7IH0g d2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIERVS19VU0VfQlJBTkNIX0hJTlRT CisjZGVmaW5lIERVS19MSUtFTFkoeCkgICAgX19idWlsdGluX2V4cGVjdCgoeCksIDEpCisjZGVm aW5lIERVS19VTkxJS0VMWSh4KSAgX19idWlsdGluX2V4cGVjdCgoeCksIDApCisjaWYgZGVmaW5l ZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19oYXNfYnVpbHRpbikKKyNpZiBfX2hhc19idWlsdGlu KF9fYnVpbHRpbl91bnByZWRpY3RhYmxlKQorI2RlZmluZSBEVUtfVU5QUkVESUNUQUJMRSh4KSAg X19idWlsdGluX3VucHJlZGljdGFibGUoKHgpKQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmlu ZWQoRFVLX0ZfQzk5KSB8fCBkZWZpbmVkKERVS19GX0NQUDExKQorI2RlZmluZSBEVUtfTk9JTkxJ TkUgICAgICAgIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNkZWZpbmUgRFVLX0lOTElORSAg ICAgICAgICBpbmxpbmUKKyNkZWZpbmUgRFVLX0FMV0FZU19JTkxJTkUgICBpbmxpbmUgX19hdHRy aWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZW5kaWYKKworLyogRFVLX0hPVCAqLworLyogRFVL X0NPTEQgKi8KKworI2lmIGRlZmluZWQoRFVLX0ZfRExMX0JVSUxEKSAmJiBkZWZpbmVkKERVS19G X1dJTkRPV1MpCisvKiBNU1ZDIGRsbGV4cG9ydC9kbGxpbXBvcnQ6IGFwcHJvcHJpYXRlIF9fZGVj bHNwZWMgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlCisgKiBjb21waWxpbmcgRHVrdGFwZSBvciB0 aGUgYXBwbGljYXRpb24uCisgKi8KKyNpZiBkZWZpbmVkKERVS19DT01QSUxJTkdfRFVLVEFQRSkK KyNkZWZpbmUgRFVLX0VYVEVSTkFMX0RFQ0wgIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkK KyNkZWZpbmUgRFVLX0VYVEVSTkFMICAgICAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UK KyNkZWZpbmUgRFVLX0VYVEVSTkFMX0RFQ0wgIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkK KyNkZWZpbmUgRFVLX0VYVEVSTkFMICAgICAgIHNob3VsZF9ub3RfaGFwcGVuCisjZW5kaWYKKyNp ZiBkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKKyNkZWZpbmUgRFVLX0lOVEVSTkFMX0RFQ0wgIHN0 YXRpYworI2RlZmluZSBEVUtfSU5URVJOQUwgICAgICAgc3RhdGljCisjZWxzZQorI2RlZmluZSBE VUtfSU5URVJOQUxfREVDTCAgZXh0ZXJuCisjZGVmaW5lIERVS19JTlRFUk5BTCAgICAgICAvKmVt cHR5Ki8KKyNlbmRpZgorI2RlZmluZSBEVUtfTE9DQUxfREVDTCAgICAgc3RhdGljCisjZGVmaW5l IERVS19MT0NBTCAgICAgICAgICBzdGF0aWMKKyNlbHNlCisjZGVmaW5lIERVS19FWFRFUk5BTF9E RUNMICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgZXh0ZXJuCisjZGVm aW5lIERVS19FWFRFUk5BTCAgICAgICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVs dCIpKSkKKyNpZiBkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKKyNpZiAoZGVmaW5lZChEVUtfRl9H Q0NfVkVSU0lPTikgJiYgRFVLX0ZfR0NDX1ZFUlNJT04gPj0gMzAxMDEpIHx8IGRlZmluZWQoRFVL X0ZfQ0xBTkcpCisvKiBNaW5pbWl6ZSB3YXJuaW5ncyBmb3IgdW51c2VkIGludGVybmFsIGZ1bmN0 aW9ucyB3aXRoIEdDQyA+PSAzLjEuMSBhbmQKKyAqIENsYW5nLiAgQmFzZWQgb24gZG9jdW1lbnRh dGlvbiBpdCBzaG91bGQgc3VmZmljZSB0byBoYXZlIHRoZSBhdHRyaWJ1dGUKKyAqIGluIHRoZSBk ZWNsYXJhdGlvbiBvbmx5LCBidXQgaW4gcHJhY3RpY2Ugc29tZSB3YXJuaW5ncyBhcmUgZ2VuZXJh dGVkIHVubGVzcworICogdGhlIGF0dHJpYnV0ZSBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIGRlZmlu aXRpb24uCisgKi8KKyNkZWZpbmUgRFVLX0lOVEVSTkFMX0RFQ0wgIHN0YXRpYyBfX2F0dHJpYnV0 ZV9fICgodW51c2VkKSkKKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIHN0YXRpYyBfX2F0dHJp YnV0ZV9fICgodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIERVS19JTlRFUk5BTF9ERUNMICBzdGF0 aWMKKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIHN0YXRpYworI2VuZGlmCisjZWxzZQorI2lm IChkZWZpbmVkKERVS19GX0dDQ19WRVJTSU9OKSAmJiBEVUtfRl9HQ0NfVkVSU0lPTiA+PSAzMDEw MSkgfHwgZGVmaW5lZChEVUtfRl9DTEFORykKKyNkZWZpbmUgRFVLX0lOVEVSTkFMX0RFQ0wgIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpIF9fYXR0cmlidXRlX18gKCh1bnVz ZWQpKSBleHRlcm4KKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIF9fYXR0cmlidXRlX18gKCh2 aXNpYmlsaXR5KCJoaWRkZW4iKSkpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorI2Vsc2UKKyNk ZWZpbmUgRFVLX0lOVEVSTkFMX0RFQ0wgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJoaWRk ZW4iKSkpIGV4dGVybgorI2RlZmluZSBEVUtfSU5URVJOQUwgICAgICAgX19hdHRyaWJ1dGVfXyAo KHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIERVS19MT0NB TF9ERUNMICAgICBzdGF0aWMKKyNkZWZpbmUgRFVLX0xPQ0FMICAgICAgICAgIHN0YXRpYworI2Vu ZGlmCisKKyNpZiBkZWZpbmVkKERVS19GX0NQUCkKKyNkZWZpbmUgRFVLX1VTRV9DT01QSUxFUl9T VFJJTkcgImNsYW5nIgorI2Vsc2UKKyNkZWZpbmUgRFVLX1VTRV9DT01QSUxFUl9TVFJJTkcgImNs YW5nIgorI2VuZGlmCisKKyN1bmRlZiBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUworI2lmIGRlZmlu ZWQoRFVLX0ZfQzk5KSB8fCBkZWZpbmVkKERVS19GX0NQUDExKQorI2RlZmluZSBEVUtfVVNFX1ZB UklBRElDX01BQ1JPUworI2VuZGlmCisKKyNkZWZpbmUgRFVLX1VTRV9VTklPTl9JTklUSUFMSVpF UlMKKworI3VuZGVmIERVS19VU0VfRkxFWF9DOTkKKyN1bmRlZiBEVUtfVVNFX0ZMRVhfWkVST1NJ WkUKKyN1bmRlZiBEVUtfVVNFX0ZMRVhfT05FU0laRQorI2lmIGRlZmluZWQoRFVLX0ZfQzk5KQor I2RlZmluZSBEVUtfVVNFX0ZMRVhfQzk5CisjZWxzZQorI2RlZmluZSBEVUtfVVNFX0ZMRVhfWkVS T1NJWkUKKyNlbmRpZgorCisjdW5kZWYgRFVLX1VTRV9HQ0NfUFJBR01BUworI2RlZmluZSBEVUtf VVNFX1BBQ0tfQ0xBTkdfQVRUUgorI2VsaWYgZGVmaW5lZChEVUtfRl9HQ0MpCisvKiAtLS0gR0ND IC0tLSAqLworI2lmIGRlZmluZWQoRFVLX0ZfQzk5KSB8fCBkZWZpbmVkKERVS19GX0NQUDExKQor LyogQzk5IC8gQysrMTEgYW5kIGFib3ZlOiByZWx5IG9uIHZhX2NvcHkoKSB3aGljaCBpcyByZXF1 aXJlZC4gKi8KKyNkZWZpbmUgRFVLX1ZBX0NPUFkoZGVzdCxzcmMpIHZhX2NvcHkoZGVzdCxzcmMp CisjZWxzZQorLyogR0NDOiBhc3N1bWUgd2UgaGF2ZSBfX3ZhX2NvcHkoKSBpbiBub24tQzk5IG1v ZGUuICovCisjZGVmaW5lIERVS19WQV9DT1BZKGRlc3Qsc3JjKSBfX3ZhX2NvcHkoZGVzdCxzcmMp CisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX0ZfR0NDX1ZFUlNJT04pICYmIChEVUtfRl9HQ0Nf VkVSU0lPTiA+PSAyMDUwMEwpCisvKiBzaW5jZSBnY2MtMi41ICovCisjZGVmaW5lIERVS19OT1JF VFVSTihkZWNsKSAgZGVjbCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisjZW5kaWYKKworI2lm IGRlZmluZWQoRFVLX0ZfR0NDX1ZFUlNJT04pICYmIChEVUtfRl9HQ0NfVkVSU0lPTiA+PSA0MDUw MEwpCisvKiBzaW5jZSBnY2MtNC41ICovCisjZGVmaW5lIERVS19VTlJFQUNIQUJMRSgpICBkbyB7 IF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUg RFVLX1VTRV9CUkFOQ0hfSElOVFMKKyNpZiBkZWZpbmVkKERVS19GX0dDQ19WRVJTSU9OKSAmJiAo RFVLX0ZfR0NDX1ZFUlNJT04gPj0gNDA1MDBMKQorLyogR0NDOiB0ZXN0IG5vdCB2ZXJ5IGFjY3Vy YXRlOyBlbmFibGUgb25seSBpbiByZWxhdGl2ZWx5IHJlY2VudCBidWlsZHMKKyAqIGJlY2F1c2Ug b2YgYnVncyBpbiBnY2MtNC40IChodHRwOi8vbGlzdHMuZGViaWFuLm9yZy9kZWJpYW4tZ2NjLzIw MTAvMDQvbXNnMDAwMDAuaHRtbCkKKyAqLworI2RlZmluZSBEVUtfTElLRUxZKHgpICAgIF9fYnVp bHRpbl9leHBlY3QoKHgpLCAxKQorI2RlZmluZSBEVUtfVU5MSUtFTFkoeCkgIF9fYnVpbHRpbl9l eHBlY3QoKHgpLCAwKQorI2VuZGlmCisvKiBYWFg6IGVxdWl2YWxlbnQgb2YgY2xhbmcgX19idWls dGluX3VucHJlZGljdGFibGU/ICovCisKKyNpZiAoZGVmaW5lZChEVUtfRl9DOTkpIHx8IGRlZmlu ZWQoRFVLX0ZfQ1BQMTEpKSAmJiBcCisgICAgZGVmaW5lZChEVUtfRl9HQ0NfVkVSU0lPTikgJiYg KERVS19GX0dDQ19WRVJTSU9OID49IDMwMTAxKQorI2RlZmluZSBEVUtfTk9JTkxJTkUgICAgICAg IF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNkZWZpbmUgRFVLX0lOTElORSAgICAgICAgICBp bmxpbmUKKyNkZWZpbmUgRFVLX0FMV0FZU19JTkxJTkUgICBpbmxpbmUgX19hdHRyaWJ1dGVfXygo YWx3YXlzX2lubGluZSkpCisjZW5kaWYKKworI2lmIChkZWZpbmVkKERVS19GX0M5OSkgfHwgZGVm aW5lZChEVUtfRl9DUFAxMSkpICYmIFwKKyAgICBkZWZpbmVkKERVS19GX0dDQ19WRVJTSU9OKSAm JiAoRFVLX0ZfR0NDX1ZFUlNJT04gPj0gNDAzMDApCisjZGVmaW5lIERVS19IT1QgICAgICAgICAg ICAgX19hdHRyaWJ1dGVfXygoaG90KSkKKyNkZWZpbmUgRFVLX0NPTEQgICAgICAgICAgICBfX2F0 dHJpYnV0ZV9fKChjb2xkKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfRl9ETExfQlVJTEQp ICYmIGRlZmluZWQoRFVLX0ZfV0lORE9XUykKKy8qIE1TVkMgZGxsZXhwb3J0L2RsbGltcG9ydDog YXBwcm9wcmlhdGUgX19kZWNsc3BlYyBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUKKyAqIGNvbXBp bGluZyBEdWt0YXBlIG9yIHRoZSBhcHBsaWNhdGlvbi4KKyAqLworI2lmIGRlZmluZWQoRFVLX0NP TVBJTElOR19EVUtUQVBFKQorI2RlZmluZSBEVUtfRVhURVJOQUxfREVDTCAgZXh0ZXJuIF9fZGVj bHNwZWMoZGxsZXhwb3J0KQorI2RlZmluZSBEVUtfRVhURVJOQUwgICAgICAgX19kZWNsc3BlYyhk bGxleHBvcnQpCisjZWxzZQorI2RlZmluZSBEVUtfRVhURVJOQUxfREVDTCAgZXh0ZXJuIF9fZGVj bHNwZWMoZGxsaW1wb3J0KQorI2RlZmluZSBEVUtfRVhURVJOQUwgICAgICAgc2hvdWxkX25vdF9o YXBwZW4KKyNlbmRpZgorI2lmIGRlZmluZWQoRFVLX1NJTkdMRV9GSUxFKQorI2RlZmluZSBEVUtf SU5URVJOQUxfREVDTCAgc3RhdGljCisjZGVmaW5lIERVS19JTlRFUk5BTCAgICAgICBzdGF0aWMK KyNlbHNlCisjZGVmaW5lIERVS19JTlRFUk5BTF9ERUNMICBleHRlcm4KKyNkZWZpbmUgRFVLX0lO VEVSTkFMICAgICAgIC8qZW1wdHkqLworI2VuZGlmCisjZGVmaW5lIERVS19MT0NBTF9ERUNMICAg ICBzdGF0aWMKKyNkZWZpbmUgRFVLX0xPQ0FMICAgICAgICAgIHN0YXRpYworI2VsaWYgZGVmaW5l ZChEVUtfRl9HQ0NfVkVSU0lPTikgJiYgKERVS19GX0dDQ19WRVJTSU9OID49IDQwMDAwKQorI2Rl ZmluZSBEVUtfRVhURVJOQUxfREVDTCAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1 bHQiKSkpIGV4dGVybgorI2RlZmluZSBEVUtfRVhURVJOQUwgICAgICAgX19hdHRyaWJ1dGVfXyAo KHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisjaWYgZGVmaW5lZChEVUtfU0lOR0xFX0ZJTEUpCisj aWYgKGRlZmluZWQoRFVLX0ZfR0NDX1ZFUlNJT04pICYmIERVS19GX0dDQ19WRVJTSU9OID49IDMw MTAxKSB8fCBkZWZpbmVkKERVS19GX0NMQU5HKQorLyogTWluaW1pemUgd2FybmluZ3MgZm9yIHVu dXNlZCBpbnRlcm5hbCBmdW5jdGlvbnMgd2l0aCBHQ0MgPj0gMy4xLjEgYW5kCisgKiBDbGFuZy4g IEJhc2VkIG9uIGRvY3VtZW50YXRpb24gaXQgc2hvdWxkIHN1ZmZpY2UgdG8gaGF2ZSB0aGUgYXR0 cmlidXRlCisgKiBpbiB0aGUgZGVjbGFyYXRpb24gb25seSwgYnV0IGluIHByYWN0aWNlIHNvbWUg d2FybmluZ3MgYXJlIGdlbmVyYXRlZCB1bmxlc3MKKyAqIHRoZSBhdHRyaWJ1dGUgaXMgYWxzbyBh cHBsaWVkIHRvIHRoZSBkZWZpbml0aW9uLgorICovCisjZGVmaW5lIERVS19JTlRFUk5BTF9ERUNM ICBzdGF0aWMgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisjZGVmaW5lIERVS19JTlRFUk5BTCAg ICAgICBzdGF0aWMgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisjZWxzZQorI2RlZmluZSBEVUtf SU5URVJOQUxfREVDTCAgc3RhdGljCisjZGVmaW5lIERVS19JTlRFUk5BTCAgICAgICBzdGF0aWMK KyNlbmRpZgorI2Vsc2UKKyNpZiAoZGVmaW5lZChEVUtfRl9HQ0NfVkVSU0lPTikgJiYgRFVLX0Zf R0NDX1ZFUlNJT04gPj0gMzAxMDEpIHx8IGRlZmluZWQoRFVLX0ZfQ0xBTkcpCisjZGVmaW5lIERV S19JTlRFUk5BTF9ERUNMICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiaGlkZGVuIikpKSBf X2F0dHJpYnV0ZV9fICgodW51c2VkKSkgZXh0ZXJuCisjZGVmaW5lIERVS19JTlRFUk5BTCAgICAg ICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiaGlkZGVuIikpKSBfX2F0dHJpYnV0ZV9fICgo dW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIERVS19JTlRFUk5BTF9ERUNMICBfX2F0dHJpYnV0ZV9f ICgodmlzaWJpbGl0eSgiaGlkZGVuIikpKSBleHRlcm4KKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAg ICAgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZW5kaWYKKyNlbmRp ZgorI2RlZmluZSBEVUtfTE9DQUxfREVDTCAgICAgc3RhdGljCisjZGVmaW5lIERVS19MT0NBTCAg ICAgICAgICBzdGF0aWMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfRl9NSU5HVykKKyNpZiBk ZWZpbmVkKERVS19GX0NQUCkKKyNkZWZpbmUgRFVLX1VTRV9DT01QSUxFUl9TVFJJTkcgIm1pbmd3 KysiCisjZWxzZQorI2RlZmluZSBEVUtfVVNFX0NPTVBJTEVSX1NUUklORyAibWluZ3ciCisjZW5k aWYKKyNlbHNlCisjaWYgZGVmaW5lZChEVUtfRl9DUFApCisjZGVmaW5lIERVS19VU0VfQ09NUElM RVJfU1RSSU5HICJnKysiCisjZWxzZQorI2RlZmluZSBEVUtfVVNFX0NPTVBJTEVSX1NUUklORyAi Z2NjIgorI2VuZGlmCisjZW5kaWYKKworI3VuZGVmIERVS19VU0VfVkFSSUFESUNfTUFDUk9TCisj aWYgZGVmaW5lZChEVUtfRl9DOTkpIHx8IChkZWZpbmVkKERVS19GX0NQUDExKSAmJiBkZWZpbmVk KF9fR05VQ19fKSkKKyNkZWZpbmUgRFVLX1VTRV9WQVJJQURJQ19NQUNST1MKKyNlbmRpZgorCisj ZGVmaW5lIERVS19VU0VfVU5JT05fSU5JVElBTElaRVJTCisKKyN1bmRlZiBEVUtfVVNFX0ZMRVhf Qzk5CisjdW5kZWYgRFVLX1VTRV9GTEVYX1pFUk9TSVpFCisjdW5kZWYgRFVLX1VTRV9GTEVYX09O RVNJWkUKKyNpZiBkZWZpbmVkKERVS19GX0M5OSkKKyNkZWZpbmUgRFVLX1VTRV9GTEVYX0M5OQor I2Vsc2UKKyNkZWZpbmUgRFVLX1VTRV9GTEVYX1pFUk9TSVpFCisjZW5kaWYKKworI2lmIGRlZmlu ZWQoRFVLX0ZfR0NDX1ZFUlNJT04pICYmIChEVUtfRl9HQ0NfVkVSU0lPTiA+PSA0MDYwMCkKKyNk ZWZpbmUgRFVLX1VTRV9HQ0NfUFJBR01BUworI2Vsc2UKKyN1bmRlZiBEVUtfVVNFX0dDQ19QUkFH TUFTCisjZW5kaWYKKworI2RlZmluZSBEVUtfVVNFX1BBQ0tfR0NDX0FUVFIKKyNlbGlmIGRlZmlu ZWQoRFVLX0ZfTVNWQykKKy8qIC0tLSBNU1ZDIC0tLSAqLworLyogaHR0cDovL21zZG4ubWljcm9z b2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMjM1MzYyKFZTLjYwKS5hc3B4ICovCisjZGVmaW5lIERV S19OT1JFVFVSTihkZWNsKSAgX19kZWNsc3BlYyhub3JldHVybikgZGVjbAorCisvKiBYWFg6IERV S19VTlJFQUNIQUJMRSBmb3IgbXN2Yz8gKi8KKworI3VuZGVmIERVS19VU0VfQlJBTkNIX0hJTlRT CisKKy8qIFhYWDogRFVLX0xJS0VMWSwgRFVLX1VOTElLRUxZIGZvciBtc3ZjPyAqLworLyogWFhY OiBEVUtfTk9JTkxJTkUsIERVS19JTkxJTkUsIERVS19BTFdBWVNfSU5MSU5FIGZvciBtc3ZjPyAq LworCisjaWYgZGVmaW5lZChEVUtfRl9ETExfQlVJTEQpICYmIGRlZmluZWQoRFVLX0ZfV0lORE9X UykKKy8qIE1TVkMgZGxsZXhwb3J0L2RsbGltcG9ydDogYXBwcm9wcmlhdGUgX19kZWNsc3BlYyBk ZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUKKyAqIGNvbXBpbGluZyBEdWt0YXBlIG9yIHRoZSBhcHBs aWNhdGlvbi4KKyAqLworI2lmIGRlZmluZWQoRFVLX0NPTVBJTElOR19EVUtUQVBFKQorI2RlZmlu ZSBEVUtfRVhURVJOQUxfREVDTCAgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2RlZmlu ZSBEVUtfRVhURVJOQUwgICAgICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorI2RlZmlu ZSBEVUtfRVhURVJOQUxfREVDTCAgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2RlZmlu ZSBEVUtfRVhURVJOQUwgICAgICAgc2hvdWxkX25vdF9oYXBwZW4KKyNlbmRpZgorI2lmIGRlZmlu ZWQoRFVLX1NJTkdMRV9GSUxFKQorI2RlZmluZSBEVUtfSU5URVJOQUxfREVDTCAgc3RhdGljCisj ZGVmaW5lIERVS19JTlRFUk5BTCAgICAgICBzdGF0aWMKKyNlbHNlCisjZGVmaW5lIERVS19JTlRF Uk5BTF9ERUNMICBleHRlcm4KKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIC8qZW1wdHkqLwor I2VuZGlmCisjZGVmaW5lIERVS19MT0NBTF9ERUNMICAgICBzdGF0aWMKKyNkZWZpbmUgRFVLX0xP Q0FMICAgICAgICAgIHN0YXRpYworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19GX0NQUCkKKyNk ZWZpbmUgRFVLX1VTRV9DT01QSUxFUl9TVFJJTkcgIm1zdmMrKyIKKyNlbHNlCisjZGVmaW5lIERV S19VU0VfQ09NUElMRVJfU1RSSU5HICJtc3ZjIgorI2VuZGlmCisKKyN1bmRlZiBEVUtfVVNFX1ZB UklBRElDX01BQ1JPUworI2lmIGRlZmluZWQoRFVLX0ZfQzk5KQorI2RlZmluZSBEVUtfVVNFX1ZB UklBRElDX01BQ1JPUworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0 MDApCisvKiBWUzIwMDUrIHNob3VsZCBoYXZlIHZhcmlhZGljIG1hY3JvcyBldmVuIHdoZW4gdGhl eSdyZSBub3QgQzk5LiAqLworI2RlZmluZSBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUworI2VuZGlm CisKKyN1bmRlZiBEVUtfVVNFX1VOSU9OX0lOSVRJQUxJWkVSUworI2lmIGRlZmluZWQoX01TQ19W RVIpICYmIChfTVNDX1ZFUiA+PSAxODAwKQorLyogVlMyMDEzKyBzdXBwb3J0cyB1bmlvbiBpbml0 aWFsaXplcnMgYnV0IHRoZXJlJ3MgYSBidWcgaW52b2x2aW5nIHVuaW9uLWluc2lkZS1zdHJ1Y3Q6 CisgKiBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9WaXN1YWxTdHVkaW8vZmVlZGJhY2sv ZGV0YWlscy84MDU5ODEKKyAqIFRoZSBidWcgd2FzIGZpeGVkIChhdCBsZWFzdCkgaW4gVlMyMDE1 IHNvIGNoZWNrIGZvciBWUzIwMTUgZm9yIG5vdzoKKyAqIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNy b3NvZnQuY29tL3ZjYmxvZy8yMDE1LzA3LzAxL2MtY29tcGlsZXItZnJvbnQtZW5kLWZpeGVzLWlu LXZzMjAxNS8KKyAqIE1hbnVhbGx5IHRlc3RlZCB1c2luZyBWUzIwMTMsIENMIHJlcG9ydHMgMTgu MDAuMzExMDEsIHNvIGVuYWJsZSBmb3IgVlMyMDEzIHRvby4KKyAqLworI2RlZmluZSBEVUtfVVNF X1VOSU9OX0lOSVRJQUxJWkVSUworI2VuZGlmCisKKyN1bmRlZiBEVUtfVVNFX0ZMRVhfQzk5Cisj dW5kZWYgRFVLX1VTRV9GTEVYX1pFUk9TSVpFCisjdW5kZWYgRFVLX1VTRV9GTEVYX09ORVNJWkUK KyNpZiBkZWZpbmVkKERVS19GX0M5OSkKKyNkZWZpbmUgRFVLX1VTRV9GTEVYX0M5OQorI2Vsc2UK KyNkZWZpbmUgRFVLX1VTRV9GTEVYX1pFUk9TSVpFCisjZW5kaWYKKworI3VuZGVmIERVS19VU0Vf R0NDX1BSQUdNQVMKKworI2RlZmluZSBEVUtfVVNFX1BBQ0tfTVNWQ19QUkFHTUEKKworLyogVGhl c2UgaGF2ZSBiZWVuIHRlc3RlZCBmcm9tIFZTMjAwOCBvbndhcmRzOyBtYXkgd29yayBpbiBvbGRl ciBWUyB2ZXJzaW9ucworICogdG9vIGJ1dCBub3QgZW5hYmxlZCBieSBkZWZhdWx0LgorICovCisj aWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE1MDApCisjZGVmaW5lIERVS19O T0lOTElORSAgICAgICAgX19kZWNsc3BlYyhub2lubGluZSkKKyNkZWZpbmUgRFVLX0lOTElORSAg ICAgICAgICBfX2lubGluZQorI2RlZmluZSBEVUtfQUxXQVlTX0lOTElORSAgIF9fZm9yY2Vpbmxp bmUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE5MDAp CisjZGVmaW5lIERVS19TTlBSSU5URiAgICAgc25wcmludGYKKyNkZWZpbmUgRFVLX1ZTTlBSSU5U RiAgICB2c25wcmludGYKKyNlbHNlCisvKiAodilzbnByaW50ZigpIGlzIG1pc3NpbmcgYmVmb3Jl IE1TVkMgMjAxNS4gIE5vdGUgdGhhdCBfKHYpc25wcmludGYoKSBkb2VzCisgKiBOT1QgTlVMIHRl cm1pbmF0ZSBvbiB0cnVuY2F0aW9uLCBidXQgRHVrdGFwZSBjb2RlIG5ldmVyIGFzc3VtZXMgdGhh dC4KKyAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjkxNTY3Mi9zbnByaW50 Zi1hbmQtdmlzdWFsLXN0dWRpby0yMDEwCisgKi8KKyNkZWZpbmUgRFVLX1NOUFJJTlRGICAgICBf c25wcmludGYKKyNkZWZpbmUgRFVLX1ZTTlBSSU5URiAgICBfdnNucHJpbnRmCisjZW5kaWYKKwor LyogQXZvaWQgd2FybmluZyB3aGVuIGRvaW5nIERVS19VTlJFRihzb21lX2Z1bmN0aW9uKS4gKi8K KyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPCAxNTAwKQorI3ByYWdtYSB3YXJu aW5nKGRpc2FibGU6IDQxMDAgNDEwMSA0NTUwIDQ1NTEpCisjZGVmaW5lIERVS19VTlJFRih4KQor I2Vsc2UKKyNkZWZpbmUgRFVLX1VOUkVGKHgpICBkbyB7IF9fcHJhZ21hKHdhcm5pbmcoc3VwcHJl c3M6NDEwMCA0MTAxIDQ1NTAgNDU1MSkpICh4KTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBP bGRlciB2ZXJzaW9ucyBvZiBNU1ZDIGRvbid0IHN1cHBvcnQgdGhlIExML1VMTCBzdWZmaXguICov CisjZGVmaW5lIERVS19VNjRfQ09OU1RBTlQoeCkgeCMjdWk2NAorI2RlZmluZSBEVUtfSTY0X0NP TlNUQU5UKHgpIHgjI2k2NAorI2VsaWYgZGVmaW5lZChEVUtfRl9FTVNDUklQVEVOKQorLyogLS0t IEVtc2NyaXB0ZW4gLS0tICovCisjZGVmaW5lIERVS19OT1JFVFVSTihkZWNsKSAgZGVjbCBfX2F0 dHJpYnV0ZV9fKChub3JldHVybikpCisKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5l ZChfX2hhc19idWlsdGluKQorI2lmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX3VucmVhY2hhYmxl KQorI2RlZmluZSBEVUtfVU5SRUFDSEFCTEUoKSAgZG8geyBfX2J1aWx0aW5fdW5yZWFjaGFibGUo KTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgRFVLX1VTRV9CUkFOQ0hf SElOVFMKKyNkZWZpbmUgRFVLX0xJS0VMWSh4KSAgICBfX2J1aWx0aW5fZXhwZWN0KCh4KSwgMSkK KyNkZWZpbmUgRFVLX1VOTElLRUxZKHgpICBfX2J1aWx0aW5fZXhwZWN0KCh4KSwgMCkKKyNpZiBk ZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2hhc19idWlsdGluKQorI2lmIF9faGFzX2J1 aWx0aW4oX19idWlsdGluX3VucHJlZGljdGFibGUpCisjZGVmaW5lIERVS19VTlBSRURJQ1RBQkxF KHgpICBfX2J1aWx0aW5fdW5wcmVkaWN0YWJsZSgoeCkpCisjZW5kaWYKKyNlbmRpZgorCisjaWYg ZGVmaW5lZChEVUtfRl9DOTkpIHx8IGRlZmluZWQoRFVLX0ZfQ1BQMTEpCisjZGVmaW5lIERVS19O T0lOTElORSAgICAgICAgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2RlZmluZSBEVUtfSU5M SU5FICAgICAgICAgIGlubGluZQorI2RlZmluZSBEVUtfQUxXQVlTX0lOTElORSAgIGlubGluZSBf X2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNlbmRpZgorCisjZGVmaW5lIERVS19FWFRF Uk5BTF9ERUNMICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgZXh0ZXJu CisjZGVmaW5lIERVS19FWFRFUk5BTCAgICAgICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgi ZGVmYXVsdCIpKSkKKyNpZiBkZWZpbmVkKERVS19TSU5HTEVfRklMRSkKKyNpZiAoZGVmaW5lZChE VUtfRl9HQ0NfVkVSU0lPTikgJiYgRFVLX0ZfR0NDX1ZFUlNJT04gPj0gMzAxMDEpIHx8IGRlZmlu ZWQoRFVLX0ZfQ0xBTkcpCisvKiBNaW5pbWl6ZSB3YXJuaW5ncyBmb3IgdW51c2VkIGludGVybmFs IGZ1bmN0aW9ucyB3aXRoIEdDQyA+PSAzLjEuMSBhbmQKKyAqIENsYW5nLiAgQmFzZWQgb24gZG9j dW1lbnRhdGlvbiBpdCBzaG91bGQgc3VmZmljZSB0byBoYXZlIHRoZSBhdHRyaWJ1dGUKKyAqIGlu IHRoZSBkZWNsYXJhdGlvbiBvbmx5LCBidXQgaW4gcHJhY3RpY2Ugc29tZSB3YXJuaW5ncyBhcmUg Z2VuZXJhdGVkIHVubGVzcworICogdGhlIGF0dHJpYnV0ZSBpcyBhbHNvIGFwcGxpZWQgdG8gdGhl IGRlZmluaXRpb24uCisgKi8KKyNkZWZpbmUgRFVLX0lOVEVSTkFMX0RFQ0wgIHN0YXRpYyBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSkKKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIHN0YXRpYyBf X2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIERVS19JTlRFUk5BTF9ERUNM ICBzdGF0aWMKKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIHN0YXRpYworI2VuZGlmCisjZWxz ZQorI2lmIChkZWZpbmVkKERVS19GX0dDQ19WRVJTSU9OKSAmJiBEVUtfRl9HQ0NfVkVSU0lPTiA+ PSAzMDEwMSkgfHwgZGVmaW5lZChEVUtfRl9DTEFORykKKyNkZWZpbmUgRFVLX0lOVEVSTkFMX0RF Q0wgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpIF9fYXR0cmlidXRlX18g KCh1bnVzZWQpKSBleHRlcm4KKyNkZWZpbmUgRFVLX0lOVEVSTkFMICAgICAgIF9fYXR0cmlidXRl X18gKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorI2Vs c2UKKyNkZWZpbmUgRFVLX0lOVEVSTkFMX0RFQ0wgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5 KCJoaWRkZW4iKSkpIGV4dGVybgorI2RlZmluZSBEVUtfSU5URVJOQUwgICAgICAgX19hdHRyaWJ1 dGVfXyAoKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIERV S19MT0NBTF9ERUNMICAgICBzdGF0aWMKKyNkZWZpbmUgRFVLX0xPQ0FMICAgICAgICAgIHN0YXRp YworCisjZGVmaW5lIERVS19VU0VfQ09NUElMRVJfU1RSSU5HICJlbXNjcmlwdGVuIgorCisjdW5k ZWYgRFVLX1VTRV9WQVJJQURJQ19NQUNST1MKKyNpZiBkZWZpbmVkKERVS19GX0M5OSkgfHwgZGVm aW5lZChEVUtfRl9DUFAxMSkKKyNkZWZpbmUgRFVLX1VTRV9WQVJJQURJQ19NQUNST1MKKyNlbmRp ZgorCisjZGVmaW5lIERVS19VU0VfVU5JT05fSU5JVElBTElaRVJTCisKKyN1bmRlZiBEVUtfVVNF X0ZMRVhfQzk5CisjdW5kZWYgRFVLX1VTRV9GTEVYX1pFUk9TSVpFCisjdW5kZWYgRFVLX1VTRV9G TEVYX09ORVNJWkUKKyNpZiBkZWZpbmVkKERVS19GX0M5OSkKKyNkZWZpbmUgRFVLX1VTRV9GTEVY X0M5OQorI2Vsc2UKKyNkZWZpbmUgRFVLX1VTRV9GTEVYX1pFUk9TSVpFCisjZW5kaWYKKworI3Vu ZGVmIERVS19VU0VfR0NDX1BSQUdNQVMKKyNkZWZpbmUgRFVLX1VTRV9QQUNLX0NMQU5HX0FUVFIK KyNlbGlmIGRlZmluZWQoRFVLX0ZfVElOWUMpCisvKiAtLS0gVGlueUMgLS0tICovCisjdW5kZWYg RFVLX1VTRV9CUkFOQ0hfSElOVFMKKworI2lmIGRlZmluZWQoRFVLX0ZfQ1BQKQorI2RlZmluZSBE VUtfVVNFX0NPTVBJTEVSX1NUUklORyAidGlueWMrKyIKKyNlbHNlCisjZGVmaW5lIERVS19VU0Vf Q09NUElMRVJfU1RSSU5HICJ0aW55YyIKKyNlbmRpZgorCisvKiBodHRwOi8vYmVsbGFyZC5vcmcv dGNjL3RjYy1kb2MuaHRtbCNTRUM3ICovCisjZGVmaW5lIERVS19VU0VfVkFSSUFESUNfTUFDUk9T CisKKyNkZWZpbmUgRFVLX1VTRV9VTklPTl9JTklUSUFMSVpFUlMKKworLyogTW9zdCBwb3J0YWJs ZSwgd2FzdGVzIHNwYWNlICovCisjZGVmaW5lIERVS19VU0VfRkxFWF9PTkVTSVpFCisKKy8qIE1v c3QgcG9ydGFibGUsIHBvdGVudGlhbGx5IHdhc3RlcyBzcGFjZSAqLworI2RlZmluZSBEVUtfVVNF X1BBQ0tfRFVNTVlfTUVNQkVSCisjZWxpZiBkZWZpbmVkKERVS19GX1ZCQ0MpCisvKiAtLS0gVkJD QyAtLS0gKi8KKyN1bmRlZiBEVUtfVVNFX0JSQU5DSF9ISU5UUworCisjaWYgZGVmaW5lZChEVUtf Rl9DUFApCisjZGVmaW5lIERVS19VU0VfQ09NUElMRVJfU1RSSU5HICJ2YmNjLWMrKyIKKyNlbHNl CisjZGVmaW5lIERVS19VU0VfQ09NUElMRVJfU1RSSU5HICJ2YmNjIgorI2VuZGlmCisKKyN1bmRl ZiBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUworI2lmIGRlZmluZWQoRFVLX0ZfQzk5KSB8fCBkZWZp bmVkKERVS19GX0NQUDExKQorI2RlZmluZSBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUworI2VuZGlm CisKKy8qIFZCQ0Mgc3VwcG9ydHMgQzk5IHNvIGNoZWNrIG9ubHkgZm9yIEM5OSBmb3IgdW5pb24g aW5pdGlhbGl6ZXIgc3VwcG9ydC4KKyAqIERlc2lnbmF0ZWQgdW5pb24gaW5pdGlhbGl6ZXJzIHdv dWxkIHBvc3NpYmx5IHdvcmsgZXZlbiB3aXRob3V0IGEgQzk5IGNoZWNrLgorICovCisjdW5kZWYg RFVLX1VTRV9VTklPTl9JTklUSUFMSVpFUlMKKyNpZiBkZWZpbmVkKERVS19GX0M5OSkKKyNkZWZp bmUgRFVLX1VTRV9VTklPTl9JTklUSUFMSVpFUlMKKyNlbmRpZgorCisjZGVmaW5lIERVS19VU0Vf RkxFWF9aRVJPU0laRQorI2RlZmluZSBEVUtfVVNFX1BBQ0tfRFVNTVlfTUVNQkVSCisjZWxpZiBk ZWZpbmVkKERVS19GX0JDQykKKy8qIC0tLSBCcnVjZSdzIEMgY29tcGlsZXIgLS0tICovCisjdW5k ZWYgRFVLX1VTRV9CUkFOQ0hfSElOVFMKKworI2lmIGRlZmluZWQoRFVLX0ZfQ1BQKQorI2RlZmlu ZSBEVUtfVVNFX0NPTVBJTEVSX1NUUklORyAiYmNjKysiCisjZWxzZQorI2RlZmluZSBEVUtfVVNF X0NPTVBJTEVSX1NUUklORyAiYmNjIgorI2VuZGlmCisKKy8qIE1vc3QgcG9ydGFibGUgKi8KKyN1 bmRlZiBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUworCisvKiBNb3N0IHBvcnRhYmxlLCB3YXN0ZXMg c3BhY2UgKi8KKyN1bmRlZiBEVUtfVVNFX1VOSU9OX0lOSVRJQUxJWkVSUworCisvKiBNb3N0IHBv cnRhYmxlLCB3YXN0ZXMgc3BhY2UgKi8KKyNkZWZpbmUgRFVLX1VTRV9GTEVYX09ORVNJWkUKKwor LyogTW9zdCBwb3J0YWJsZSwgcG90ZW50aWFsbHkgd2FzdGVzIHNwYWNlICovCisjZGVmaW5lIERV S19VU0VfUEFDS19EVU1NWV9NRU1CRVIKKworLyogQkNDLCBhc3N1bWUgd2UncmUgb24geDg2LiAq LworI2lmICFkZWZpbmVkKERVS19VU0VfQllURU9SREVSKQorI2RlZmluZSBEVUtfVVNFX0JZVEVP UkRFUiAxCisjZW5kaWYKKyNlbHNlCisvKiAtLS0gR2VuZXJpYyAtLS0gKi8KKyN1bmRlZiBEVUtf VVNFX0JSQU5DSF9ISU5UUworCisjaWYgZGVmaW5lZChEVUtfRl9DUFApCisjZGVmaW5lIERVS19V U0VfQ09NUElMRVJfU1RSSU5HICJnZW5lcmljLWMrKyIKKyNlbHNlCisjZGVmaW5lIERVS19VU0Vf Q09NUElMRVJfU1RSSU5HICJnZW5lcmljIgorI2VuZGlmCisKKyN1bmRlZiBEVUtfVVNFX1ZBUklB RElDX01BQ1JPUworI2lmIGRlZmluZWQoRFVLX0ZfQzk5KSB8fCBkZWZpbmVkKERVS19GX0NQUDEx KQorI2RlZmluZSBEVUtfVVNFX1ZBUklBRElDX01BQ1JPUworI2VuZGlmCisKKy8qIEMrKyBkb2Vz bid0IGhhdmUgc3RhbmRhcmQgZGVzaWduYXRlZCB1bmlvbiBpbml0aWFsaXplcnMgKHsgLmZvbyA9 IDEgfSkuICovCisjdW5kZWYgRFVLX1VTRV9VTklPTl9JTklUSUFMSVpFUlMKKyNpZiBkZWZpbmVk KERVS19GX0M5OSkKKyNkZWZpbmUgRFVLX1VTRV9VTklPTl9JTklUSUFMSVpFUlMKKyNlbmRpZgor CisvKiBNb3N0IHBvcnRhYmxlLCB3YXN0ZXMgc3BhY2UgKi8KKyNkZWZpbmUgRFVLX1VTRV9GTEVY X09ORVNJWkUKKworLyogTW9zdCBwb3J0YWJsZSwgcG90ZW50aWFsbHkgd2FzdGVzIHNwYWNlICov CisjZGVmaW5lIERVS19VU0VfUEFDS19EVU1NWV9NRU1CRVIKKyNlbmRpZiAgLyogYXV0b2RldGVj dCBjb21waWxlciAqLworCisvKiB1Y2xpYmMgKi8KKyNpZiBkZWZpbmVkKF9fVUNMSUJDX18pCisj ZGVmaW5lIERVS19GX1VDTElCQworI2VuZGlmCisKKy8qCisgKiAgV3JhcHBlciB0eXBlZGVmcyBh bmQgY29uc3RhbnRzIGZvciBpbnRlZ2VyIHR5cGVzLCBhbHNvIHNhbml0eSBjaGVjayB0eXBlcy4K KyAqCisgKiAgQzk5IHR5cGVkZWZzIGFyZSBxdWl0ZSBnb29kIGJ1dCBub3QgYWx3YXlzIGF2YWls YWJsZSwgYW5kIHdlIHdhbnQgdG8gYXZvaWQKKyAqICBmb3JjaWJseSByZWRlZmluaW5nIHRoZSBD OTkgdHlwZWRlZnMuICBTbywgdGhlcmUgYXJlIER1a3RhcGUgd3JhcHBlcnMgZm9yCisgKiAgYWxs IEM5OSB0eXBlZGVmcyBhbmQgRHVrdGFwZSBjb2RlIHNob3VsZCBvbmx5IHVzZSB0aGVzZSB0eXBl ZGVmcy4gIFR5cGUKKyAqICBkZXRlY3Rpb24gd2hlbiBDOTkgaXMgbm90IHN1cHBvcnRlZCBpcyBi ZXN0IGVmZm9ydCBhbmQgbWF5IGVuZCB1cCBkZXRlY3RpbmcKKyAqICBzb21lIHR5cGVzIGluY29y cmVjdGx5LgorICoKKyAqICBQb2ludGVyIHNpemVzIGFyZSBhIHBvcnRhYmlsaXR5IHByb2JsZW06 IHBvaW50ZXJzIHRvIGRpZmZlcmVudCB0eXBlcyBtYXkKKyAqICBoYXZlIGEgZGlmZmVyZW50IHNp emUgYW5kIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSB2ZXJ5IGRpZmZpY3VsdCB0byBtYW5hZ2UKKyAq ICBwb3J0YWJseS4KKyAqCisgKiAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DX2RhdGFf dHlwZXMjRml4ZWQtd2lkdGhfaW50ZWdlcl90eXBlcworICoKKyAqICBOb3RlOiB0aGVyZSdzIGFu IGludGVyZXN0aW5nIGNvcm5lciBjYXNlIHdoZW4gdHJ5aW5nIHRvIGRlZmluZSBtaW5pbXVtCisg KiAgc2lnbmVkIGludGVnZXIgdmFsdWUgY29uc3RhbnRzIHdoaWNoIGxlYWRzIHRvIHRoZSBjdXJy ZW50IHdvcmthcm91bmQgb2YKKyAqICBkZWZpbmluZyBlLmcuIC0weDgwMDAwMDAwIGFzICgtMHg3 ZmZmZmZmZkwgLSAxTCkuICBTZWUgZG9jL2NvZGUtaXNzdWVzLnR4dAorICogIGZvciBhIGxvbmdl ciBkaXNjdXNzaW9uLgorICoKKyAqICBOb3RlOiBhdm9pZCB0eXBlY2FzdHMgYW5kIGNvbXB1dGF0 aW9ucyBpbiBtYWNybyBpbnRlZ2VyIGNvbnN0YW50cyBhcyB0aGV5CisgKiAgY2FuIHRoZW4gbm8g bG9uZ2VyIGJlIHVzZWQgaW4gbWFjcm8gcmVsYXRpb25hbCBleHByZXNzaW9ucyAoc3VjaCBhcwor ICogICNpZiBEVUtfU0laRV9NQVggPCAweGZmZmZmZmZmVUwpLiAgVGhlcmUgaXMgaW50ZXJuYWwg Y29kZSB3aGljaCByZWxpZXMgb24KKyAqICBiZWluZyBhYmxlIHRvIGNvbXBhcmUgRFVLX1NJWkVf TUFYIGFnYWluc3QgYSBsaW1pdC4KKyAqLworCisvKiBYWFg6IGFkZCBmZWF0dXJlIG9wdGlvbnMg dG8gZm9yY2UgYmFzaWMgdHlwZXMgZnJvbSBvdXRzaWRlPyAqLworCisjaWYgIWRlZmluZWQoSU5U X01BWCkKKyNlcnJvciBJTlRfTUFYIG5vdCBkZWZpbmVkCisjZW5kaWYKKworLyogQ2hlY2sgdGhh dCBhcmNoaXRlY3R1cmUgaXMgdHdvJ3MgY29tcGxlbWVudCwgc3RhbmRhcmQgQyBhbGxvd3MgZS5n LgorICogSU5UX01JTiB0byBiZSAtMioqMzErMSAoaW5zdGVhZCBvZiAtMioqMzEpLgorICovCisj aWYgZGVmaW5lZChJTlRfTUFYKSAmJiBkZWZpbmVkKElOVF9NSU4pCisjaWYgSU5UX01BWCAhPSAt KElOVF9NSU4gKyAxKQorI2Vycm9yIHBsYXRmb3JtIGRvZXMgbm90IHNlZW0gY29tcGxlbWVudCBv ZiB0d28KKyNlbmRpZgorI2Vsc2UKKyNlcnJvciBjYW5ub3QgY2hlY2sgY29tcGxlbWVudCBvZiB0 d28KKyNlbmRpZgorCisvKiBQb2ludGVyIHNpemUgZGV0ZXJtaW5hdGlvbiBiYXNlZCBvbiBfX1dP UkRTSVpFIG9yIGFyY2hpdGVjdHVyZSB3aGVuCisgKiB0aGF0J3Mgbm90IGF2YWlsYWJsZS4KKyAq LworI2lmIGRlZmluZWQoRFVLX0ZfWDg2KSB8fCBkZWZpbmVkKERVS19GX1gzMikgfHwgXAorICAg IGRlZmluZWQoRFVLX0ZfTTY4SykgfHwgZGVmaW5lZChEVUtfRl9QUEMzMikgfHwgXAorICAgIGRl ZmluZWQoRFVLX0ZfQkNDKSB8fCBcCisgICAgKGRlZmluZWQoX19XT1JEU0laRSkgJiYgKF9fV09S RFNJWkUgPT0gMzIpKSB8fCBcCisgICAgKChkZWZpbmVkKERVS19GX09MRF9TT0xBUklTKSB8fCBk ZWZpbmVkKERVS19GX0FJWCkgfHwgXAorICAgICAgZGVmaW5lZChEVUtfRl9IUFVYKSkgJiYgZGVm aW5lZChfSUxQMzIpKSB8fCBcCisgICAgZGVmaW5lZChEVUtfRl9BUk0zMikKKyNkZWZpbmUgRFVL X0ZfMzJCSVRfUFRSUworI2VsaWYgZGVmaW5lZChEVUtfRl9YNjQpIHx8IFwKKyAgICAgIChkZWZp bmVkKF9fV09SRFNJWkUpICYmIChfX1dPUkRTSVpFID09IDY0KSkgfHwgXAorICAgKChkZWZpbmVk KERVS19GX09MRF9TT0xBUklTKSB8fCBkZWZpbmVkKERVS19GX0FJWCkgfHwgXAorICAgICBkZWZp bmVkKERVS19GX0hQVVgpKSAmJiBkZWZpbmVkKF9MUDY0KSkgfHwgXAorICAgIGRlZmluZWQoRFVL X0ZfQVJNNjQpCisjZGVmaW5lIERVS19GXzY0QklUX1BUUlMKKyNlbHNlCisvKiBub3Qgc3VyZSwg bm90IG5lZWRlZCB3aXRoIEM5OSBhbnl3YXkgKi8KKyNlbmRpZgorCisvKiBJbnRlcm1lZGlhdGUg ZGVmaW5lIGZvciAnaGF2ZSBpbnR0eXBlcy5oJyAqLworI3VuZGVmIERVS19GX0hBVkVfSU5UVFlQ RVMKKyNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49 IDE5OTkwMUwpICYmIFwKKyAgICAhKGRlZmluZWQoRFVLX0ZfQU1JR0FPUykgJiYgZGVmaW5lZChE VUtfRl9WQkNDKSkKKy8qIHZiY2MgKyBBbWlnYU9TIGhhcyBDOTkgYnV0IG5vIGludHR5cGVzLmgg Ki8KKyNkZWZpbmUgRFVLX0ZfSEFWRV9JTlRUWVBFUworI2VsaWYgZGVmaW5lZChfX2NwbHVzcGx1 cykgJiYgKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpCisvKiBDKysxMSBhcHBhcmVudGx5IHJhdGlm aWVkIHN0ZGludC5oICovCisjZGVmaW5lIERVS19GX0hBVkVfSU5UVFlQRVMKKyNlbmRpZgorCisv KiBCYXNpYyBpbnRlZ2VyIHR5cGVkZWZzIGFuZCBsaW1pdHMsIHByZWZlcmFibHkgZnJvbSBpbnR0 eXBlcy5oLCBvdGhlcndpc2UKKyAqIHRocm91Z2ggYXV0b21hdGljIGRldGVjdGlvbi4KKyAqLwor I2lmIGRlZmluZWQoRFVLX0ZfSEFWRV9JTlRUWVBFUykKKy8qIEM5OSBvciBjb21wYXRpYmxlICov CisKKyNkZWZpbmUgRFVLX0ZfSEFWRV82NEJJVAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKK3R5 cGVkZWYgdWludDhfdCBkdWtfdWludDhfdDsKK3R5cGVkZWYgaW50OF90IGR1a19pbnQ4X3Q7Cit0 eXBlZGVmIHVpbnQxNl90IGR1a191aW50MTZfdDsKK3R5cGVkZWYgaW50MTZfdCBkdWtfaW50MTZf dDsKK3R5cGVkZWYgdWludDMyX3QgZHVrX3VpbnQzMl90OwordHlwZWRlZiBpbnQzMl90IGR1a19p bnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBkdWtfdWludDY0X3Q7Cit0eXBlZGVmIGludDY0X3Qg ZHVrX2ludDY0X3Q7Cit0eXBlZGVmIHVpbnRfbGVhc3Q4X3QgZHVrX3VpbnRfbGVhc3Q4X3Q7Cit0 eXBlZGVmIGludF9sZWFzdDhfdCBkdWtfaW50X2xlYXN0OF90OwordHlwZWRlZiB1aW50X2xlYXN0 MTZfdCBkdWtfdWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIGludF9sZWFzdDE2X3QgZHVrX2ludF9s ZWFzdDE2X3Q7Cit0eXBlZGVmIHVpbnRfbGVhc3QzMl90IGR1a191aW50X2xlYXN0MzJfdDsKK3R5 cGVkZWYgaW50X2xlYXN0MzJfdCBkdWtfaW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgdWludF9sZWFz dDY0X3QgZHVrX3VpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBpbnRfbGVhc3Q2NF90IGR1a19pbnRf bGVhc3Q2NF90OwordHlwZWRlZiB1aW50X2Zhc3Q4X3QgZHVrX3VpbnRfZmFzdDhfdDsKK3R5cGVk ZWYgaW50X2Zhc3Q4X3QgZHVrX2ludF9mYXN0OF90OwordHlwZWRlZiB1aW50X2Zhc3QxNl90IGR1 a191aW50X2Zhc3QxNl90OwordHlwZWRlZiBpbnRfZmFzdDE2X3QgZHVrX2ludF9mYXN0MTZfdDsK K3R5cGVkZWYgdWludF9mYXN0MzJfdCBkdWtfdWludF9mYXN0MzJfdDsKK3R5cGVkZWYgaW50X2Zh c3QzMl90IGR1a19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIHVpbnRfZmFzdDY0X3QgZHVrX3VpbnRf ZmFzdDY0X3Q7Cit0eXBlZGVmIGludF9mYXN0NjRfdCBkdWtfaW50X2Zhc3Q2NF90OwordHlwZWRl ZiB1aW50cHRyX3QgZHVrX3VpbnRwdHJfdDsKK3R5cGVkZWYgaW50cHRyX3QgZHVrX2ludHB0cl90 OwordHlwZWRlZiB1aW50bWF4X3QgZHVrX3VpbnRtYXhfdDsKK3R5cGVkZWYgaW50bWF4X3QgZHVr X2ludG1heF90OworCisjZGVmaW5lIERVS19VSU5UOF9NSU4gICAgICAgICAwCisjZGVmaW5lIERV S19VSU5UOF9NQVggICAgICAgICBVSU5UOF9NQVgKKyNkZWZpbmUgRFVLX0lOVDhfTUlOICAgICAg ICAgIElOVDhfTUlOCisjZGVmaW5lIERVS19JTlQ4X01BWCAgICAgICAgICBJTlQ4X01BWAorI2Rl ZmluZSBEVUtfVUlOVF9MRUFTVDhfTUlOICAgMAorI2RlZmluZSBEVUtfVUlOVF9MRUFTVDhfTUFY ICAgVUlOVF9MRUFTVDhfTUFYCisjZGVmaW5lIERVS19JTlRfTEVBU1Q4X01JTiAgICBJTlRfTEVB U1Q4X01JTgorI2RlZmluZSBEVUtfSU5UX0xFQVNUOF9NQVggICAgSU5UX0xFQVNUOF9NQVgKKyNk ZWZpbmUgRFVLX1VJTlRfRkFTVDhfTUlOICAgIDAKKyNkZWZpbmUgRFVLX1VJTlRfRkFTVDhfTUFY ICAgIFVJTlRfRkFTVDhfTUFYCisjZGVmaW5lIERVS19JTlRfRkFTVDhfTUlOICAgICBJTlRfRkFT VDhfTUlOCisjZGVmaW5lIERVS19JTlRfRkFTVDhfTUFYICAgICBJTlRfRkFTVDhfTUFYCisjZGVm aW5lIERVS19VSU5UMTZfTUlOICAgICAgICAwCisjZGVmaW5lIERVS19VSU5UMTZfTUFYICAgICAg ICBVSU5UMTZfTUFYCisjZGVmaW5lIERVS19JTlQxNl9NSU4gICAgICAgICBJTlQxNl9NSU4KKyNk ZWZpbmUgRFVLX0lOVDE2X01BWCAgICAgICAgIElOVDE2X01BWAorI2RlZmluZSBEVUtfVUlOVF9M RUFTVDE2X01JTiAgMAorI2RlZmluZSBEVUtfVUlOVF9MRUFTVDE2X01BWCAgVUlOVF9MRUFTVDE2 X01BWAorI2RlZmluZSBEVUtfSU5UX0xFQVNUMTZfTUlOICAgSU5UX0xFQVNUMTZfTUlOCisjZGVm aW5lIERVS19JTlRfTEVBU1QxNl9NQVggICBJTlRfTEVBU1QxNl9NQVgKKyNkZWZpbmUgRFVLX1VJ TlRfRkFTVDE2X01JTiAgIDAKKyNkZWZpbmUgRFVLX1VJTlRfRkFTVDE2X01BWCAgIFVJTlRfRkFT VDE2X01BWAorI2RlZmluZSBEVUtfSU5UX0ZBU1QxNl9NSU4gICAgSU5UX0ZBU1QxNl9NSU4KKyNk ZWZpbmUgRFVLX0lOVF9GQVNUMTZfTUFYICAgIElOVF9GQVNUMTZfTUFYCisjZGVmaW5lIERVS19V SU5UMzJfTUlOICAgICAgICAwCisjZGVmaW5lIERVS19VSU5UMzJfTUFYICAgICAgICBVSU5UMzJf TUFYCisjZGVmaW5lIERVS19JTlQzMl9NSU4gICAgICAgICBJTlQzMl9NSU4KKyNkZWZpbmUgRFVL X0lOVDMyX01BWCAgICAgICAgIElOVDMyX01BWAorI2RlZmluZSBEVUtfVUlOVF9MRUFTVDMyX01J TiAgMAorI2RlZmluZSBEVUtfVUlOVF9MRUFTVDMyX01BWCAgVUlOVF9MRUFTVDMyX01BWAorI2Rl ZmluZSBEVUtfSU5UX0xFQVNUMzJfTUlOICAgSU5UX0xFQVNUMzJfTUlOCisjZGVmaW5lIERVS19J TlRfTEVBU1QzMl9NQVggICBJTlRfTEVBU1QzMl9NQVgKKyNkZWZpbmUgRFVLX1VJTlRfRkFTVDMy X01JTiAgIDAKKyNkZWZpbmUgRFVLX1VJTlRfRkFTVDMyX01BWCAgIFVJTlRfRkFTVDMyX01BWAor I2RlZmluZSBEVUtfSU5UX0ZBU1QzMl9NSU4gICAgSU5UX0ZBU1QzMl9NSU4KKyNkZWZpbmUgRFVL X0lOVF9GQVNUMzJfTUFYICAgIElOVF9GQVNUMzJfTUFYCisjZGVmaW5lIERVS19VSU5UNjRfTUlO ICAgICAgICAwCisjZGVmaW5lIERVS19VSU5UNjRfTUFYICAgICAgICBVSU5UNjRfTUFYCisjZGVm aW5lIERVS19JTlQ2NF9NSU4gICAgICAgICBJTlQ2NF9NSU4KKyNkZWZpbmUgRFVLX0lOVDY0X01B WCAgICAgICAgIElOVDY0X01BWAorI2RlZmluZSBEVUtfVUlOVF9MRUFTVDY0X01JTiAgMAorI2Rl ZmluZSBEVUtfVUlOVF9MRUFTVDY0X01BWCAgVUlOVF9MRUFTVDY0X01BWAorI2RlZmluZSBEVUtf SU5UX0xFQVNUNjRfTUlOICAgSU5UX0xFQVNUNjRfTUlOCisjZGVmaW5lIERVS19JTlRfTEVBU1Q2 NF9NQVggICBJTlRfTEVBU1Q2NF9NQVgKKyNkZWZpbmUgRFVLX1VJTlRfRkFTVDY0X01JTiAgIDAK KyNkZWZpbmUgRFVLX1VJTlRfRkFTVDY0X01BWCAgIFVJTlRfRkFTVDY0X01BWAorI2RlZmluZSBE VUtfSU5UX0ZBU1Q2NF9NSU4gICAgSU5UX0ZBU1Q2NF9NSU4KKyNkZWZpbmUgRFVLX0lOVF9GQVNU NjRfTUFYICAgIElOVF9GQVNUNjRfTUFYCisKKyNkZWZpbmUgRFVLX1VJTlRQVFJfTUlOICAgICAg IDAKKyNkZWZpbmUgRFVLX1VJTlRQVFJfTUFYICAgICAgIFVJTlRQVFJfTUFYCisjZGVmaW5lIERV S19JTlRQVFJfTUlOICAgICAgICBJTlRQVFJfTUlOCisjZGVmaW5lIERVS19JTlRQVFJfTUFYICAg ICAgICBJTlRQVFJfTUFYCisKKyNkZWZpbmUgRFVLX1VJTlRNQVhfTUlOICAgICAgIDAKKyNkZWZp bmUgRFVLX1VJTlRNQVhfTUFYICAgICAgIFVJTlRNQVhfTUFYCisjZGVmaW5lIERVS19JTlRNQVhf TUlOICAgICAgICBJTlRNQVhfTUlOCisjZGVmaW5lIERVS19JTlRNQVhfTUFYICAgICAgICBJTlRN QVhfTUFYCisKKyNkZWZpbmUgRFVLX1NJWkVfTUlOICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX1NJ WkVfTUFYICAgICAgICAgIFNJWkVfTUFYCisjdW5kZWYgRFVLX1NJWkVfTUFYX0NPTVBVVEVECisK KyNlbHNlICAvKiBDOTkgdHlwZXMgKi8KKworLyogV2hlbiBDOTkgdHlwZXMgYXJlIG5vdCBhdmFp bGFibGUsIHdlIHVzZSBoZXVyaXN0aWMgZGV0ZWN0aW9uIHRvIGdldAorICogdGhlIGJhc2ljIDgs IDE2LCAzMiwgYW5kIChwb3NzaWJseSkgNjQgYml0IHR5cGVzLiAgVGhlIGZhc3QvbGVhc3QKKyAq IHR5cGVzIGFyZSB0aGVuIGFzc3VtZWQgdG8gYmUgZXhhY3RseSB0aGUgc2FtZSBmb3Igbm93OiB0 aGVzZSBjb3VsZAorICogYmUgaW1wcm92ZWQgcGVyIHBsYXRmb3JtIGJ1dCBDOTkgdHlwZXMgYXJl IHZlcnkgb2Z0ZW4gbm93IGF2YWlsYWJsZS4KKyAqIDY0LWJpdCB0eXBlcyBhcmUgbm90IGF2YWls YWJsZSBvbiBhbGwgcGxhdGZvcm1zOyB0aGlzIGlzIE9LIGF0IGxlYXN0CisgKiBvbiAzMi1iaXQg cGxhdGZvcm1zLgorICoKKyAqIFRoaXMgZGV0ZWN0aW9uIGNvZGUgaXMgbmVjZXNzYXJpbHkgYSBi aXQgaGFja3kgYW5kIGNhbiBwcm92aWRlIHR5cGVkZWZzCisgKiBhbmQgZGVmaW5lcyB0aGF0IHdv bid0IHdvcmsgY29ycmVjdGx5IG9uIHNvbWUgZXhvdGljIHBsYXRmb3JtLgorICovCisKKyNpZiAo ZGVmaW5lZChDSEFSX0JJVCkgJiYgKENIQVJfQklUID09IDgpKSB8fCBcCisgICAgKGRlZmluZWQo VUNIQVJfTUFYKSAmJiAoVUNIQVJfTUFYID09IDI1NSkpCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIg ZHVrX3VpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGR1a19pbnQ4X3Q7CisjZWxzZQorI2Vy cm9yIGNhbm5vdCBkZXRlY3QgOC1iaXQgdHlwZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTSFJU X01BWCkgJiYgKFVTSFJUX01BWCA9PSA2NTUzNVVMKQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBk dWtfdWludDE2X3Q7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCBkdWtfaW50MTZfdDsKKyNlbGlmIGRl ZmluZWQoVUlOVF9NQVgpICYmIChVSU5UX01BWCA9PSA2NTUzNVVMKQorLyogT24gc29tZSBwbGF0 Zm9ybXMgaW50IGlzIDE2LWJpdCBidXQgbG9uZyBpcyAzMi1iaXQgKGUuZy4gUHVyZUMpICovCit0 eXBlZGVmIHVuc2lnbmVkIGludCBkdWtfdWludDE2X3Q7Cit0eXBlZGVmIHNpZ25lZCBpbnQgZHVr X2ludDE2X3Q7CisjZWxzZQorI2Vycm9yIGNhbm5vdCBkZXRlY3QgMTYtYml0IHR5cGUKKyNlbmRp ZgorCisjaWYgZGVmaW5lZChVSU5UX01BWCkgJiYgKFVJTlRfTUFYID09IDQyOTQ5NjcyOTVVTCkK K3R5cGVkZWYgdW5zaWduZWQgaW50IGR1a191aW50MzJfdDsKK3R5cGVkZWYgc2lnbmVkIGludCBk dWtfaW50MzJfdDsKKyNlbGlmIGRlZmluZWQoVUxPTkdfTUFYKSAmJiAoVUxPTkdfTUFYID09IDQy OTQ5NjcyOTVVTCkKKy8qIE9uIHNvbWUgcGxhdGZvcm1zIGludCBpcyAxNi1iaXQgYnV0IGxvbmcg aXMgMzItYml0IChlLmcuIFB1cmVDKSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGR1a191aW50 MzJfdDsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgZHVrX2ludDMyX3Q7CisjZWxzZQorI2Vycm9yIGNh bm5vdCBkZXRlY3QgMzItYml0IHR5cGUKKyNlbmRpZgorCisvKiA2NC1iaXQgdHlwZSBkZXRlY3Rp b24gaXMgYSBiaXQgdHJpY2t5LgorICoKKyAqIFVMTE9OR19NQVggaXMgYSBzdGFuZGFyZCBkZWZp bmUuICBfX0xPTkdfTE9OR19NQVhfXyBhbmQgX19VTE9OR19MT05HX01BWF9fCisgKiBhcmUgdXNl ZCBieSBhdCBsZWFzdCBHQ0MgKGV2ZW4gaWYgc3lzdGVtIGhlYWRlcnMgZG9uJ3QgcHJvdmlkZSBV TExPTkdfTUFYKS4KKyAqIFNvbWUgR0NDIHZhcmlhbnRzIG1heSBwcm92aWRlIF9fTE9OR19MT05H X01BWF9fIGJ1dCBub3QgX19VTE9OR19MT05HX01BWF9fLgorICoKKyAqIFVMTCAvIExMIGNvbnN0 YW50cyBhcmUgcmVqZWN0ZWQgLyB3YXJuZWQgYWJvdXQgYnkgc29tZSBjb21waWxlcnMsIGV2ZW4g aWYKKyAqIHRoZSBjb21waWxlciBoYXMgYSA2NC1iaXQgdHlwZSBhbmQgdGhlIGNvbXBpbGVyL3N5 c3RlbSBoZWFkZXJzIHByb3ZpZGUgYW4KKyAqIHVuc3VwcG9ydGVkIGNvbnN0YW50IChVTEwvTEwp ISAgVHJ5IHRvIGF2b2lkIHVzaW5nIFVMTCAvIExMIGNvbnN0YW50cy4KKyAqIEFzIGEgc2lkZSBl ZmZlY3Qgd2UgY2FuIG9ubHkgY2hlY2sgdGhhdCBlLmcuIFVMT05HX01BWCBpcyBsYXJnZXIgdGhh biAzMgorICogYml0cyBidXQgY2FuJ3QgYmUgc3VyZSBpdCBpcyBleGFjdGx5IDY0IGJpdHMuICBT ZWxmIHRlc3RzIHdpbGwgY2F0Y2ggc3VjaAorICogY2FzZXMuCisgKi8KKyN1bmRlZiBEVUtfRl9I QVZFXzY0QklUCisjaWYgIWRlZmluZWQoRFVLX0ZfSEFWRV82NEJJVCkgJiYgZGVmaW5lZChVTE9O R19NQVgpCisjaWYgKFVMT05HX01BWCA+IDQyOTQ5NjcyOTVVTCkKKyNkZWZpbmUgRFVLX0ZfSEFW RV82NEJJVAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGR1a191aW50NjRfdDsKK3R5cGVkZWYgc2ln bmVkIGxvbmcgZHVrX2ludDY0X3Q7CisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19G X0hBVkVfNjRCSVQpICYmIGRlZmluZWQoVUxMT05HX01BWCkKKyNpZiAoVUxMT05HX01BWCA+IDQy OTQ5NjcyOTVVTCkKKyNkZWZpbmUgRFVLX0ZfSEFWRV82NEJJVAordHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgZHVrX3VpbnQ2NF90OwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGR1a19pbnQ2 NF90OworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfRl9IQVZFXzY0QklUKSAmJiBk ZWZpbmVkKF9fVUxPTkdfTE9OR19NQVhfXykKKyNpZiAoX19VTE9OR19MT05HX01BWF9fID4gNDI5 NDk2NzI5NVVMKQorI2RlZmluZSBEVUtfRl9IQVZFXzY0QklUCit0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyBkdWtfdWludDY0X3Q7Cit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgZHVrX2ludDY0 X3Q7CisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19GX0hBVkVfNjRCSVQpICYmIGRl ZmluZWQoX19MT05HX0xPTkdfTUFYX18pCisjaWYgKF9fTE9OR19MT05HX01BWF9fID4gMjE0NzQ4 MzY0N0wpCisjZGVmaW5lIERVS19GX0hBVkVfNjRCSVQKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIGR1a191aW50NjRfdDsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBkdWtfaW50NjRfdDsK KyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0ZfSEFWRV82NEJJVCkgJiYgZGVmaW5l ZChEVUtfRl9NSU5HVykKKyNkZWZpbmUgRFVLX0ZfSEFWRV82NEJJVAordHlwZWRlZiB1bnNpZ25l ZCBsb25nIGR1a191aW50NjRfdDsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgZHVrX2ludDY0X3Q7Cisj ZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfRl9IQVZFXzY0QklUKSAmJiBkZWZpbmVkKERVS19GX01T VkMpCisjZGVmaW5lIERVS19GX0hBVkVfNjRCSVQKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBk dWtfdWludDY0X3Q7Cit0eXBlZGVmIHNpZ25lZCBfX2ludDY0IGR1a19pbnQ2NF90OworI2VuZGlm CisjaWYgIWRlZmluZWQoRFVLX0ZfSEFWRV82NEJJVCkKKy8qIGNhbm5vdCBkZXRlY3QgNjQtYml0 IHR5cGUsIG5vdCBhbHdheXMgbmVlZGVkIHNvIGRvbid0IGVycm9yICovCisjZW5kaWYKKwordHlw ZWRlZiBkdWtfdWludDhfdCBkdWtfdWludF9sZWFzdDhfdDsKK3R5cGVkZWYgZHVrX2ludDhfdCBk dWtfaW50X2xlYXN0OF90OwordHlwZWRlZiBkdWtfdWludDE2X3QgZHVrX3VpbnRfbGVhc3QxNl90 OwordHlwZWRlZiBkdWtfaW50MTZfdCBkdWtfaW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgZHVrX3Vp bnQzMl90IGR1a191aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgZHVrX2ludDMyX3QgZHVrX2ludF9s ZWFzdDMyX3Q7Cit0eXBlZGVmIGR1a191aW50OF90IGR1a191aW50X2Zhc3Q4X3Q7Cit0eXBlZGVm IGR1a19pbnQ4X3QgZHVrX2ludF9mYXN0OF90OwordHlwZWRlZiBkdWtfdWludDE2X3QgZHVrX3Vp bnRfZmFzdDE2X3Q7Cit0eXBlZGVmIGR1a19pbnQxNl90IGR1a19pbnRfZmFzdDE2X3Q7Cit0eXBl ZGVmIGR1a191aW50MzJfdCBkdWtfdWludF9mYXN0MzJfdDsKK3R5cGVkZWYgZHVrX2ludDMyX3Qg ZHVrX2ludF9mYXN0MzJfdDsKKyNpZiBkZWZpbmVkKERVS19GX0hBVkVfNjRCSVQpCit0eXBlZGVm IGR1a191aW50NjRfdCBkdWtfdWludF9sZWFzdDY0X3Q7Cit0eXBlZGVmIGR1a19pbnQ2NF90IGR1 a19pbnRfbGVhc3Q2NF90OwordHlwZWRlZiBkdWtfdWludDY0X3QgZHVrX3VpbnRfZmFzdDY0X3Q7 Cit0eXBlZGVmIGR1a19pbnQ2NF90IGR1a19pbnRfZmFzdDY0X3Q7CisjZW5kaWYKKyNpZiBkZWZp bmVkKERVS19GX0hBVkVfNjRCSVQpCit0eXBlZGVmIGR1a191aW50NjRfdCBkdWtfdWludG1heF90 OwordHlwZWRlZiBkdWtfaW50NjRfdCBkdWtfaW50bWF4X3Q7CisjZWxzZQordHlwZWRlZiBkdWtf dWludDMyX3QgZHVrX3VpbnRtYXhfdDsKK3R5cGVkZWYgZHVrX2ludDMyX3QgZHVrX2ludG1heF90 OworI2VuZGlmCisKKy8qIE5vdGU6IHRoZSBmdW5ueSBsb29raW5nIGNvbXB1dGF0aW9ucyBmb3Ig c2lnbmVkIG1pbmltdW0gMTYtYml0LCAzMi1iaXQsIGFuZAorICogNjQtYml0IHZhbHVlcyBhcmUg aW50ZW50aW9uYWwgYXMgdGhlIG9idmlvdXMgZm9ybXMgKGUuZy4gLTB4ODAwMDAwMDBMKSBhcmUK KyAqIC1ub3QtIHBvcnRhYmxlLiAgU2VlIGNvZGUtaXNzdWVzLnR4dCBmb3IgYSBkZXRhaWxlZCBk aXNjdXNzaW9uLgorICovCisjZGVmaW5lIERVS19VSU5UOF9NSU4gICAgICAgICAwVUwKKyNkZWZp bmUgRFVLX1VJTlQ4X01BWCAgICAgICAgIDB4ZmZVTAorI2RlZmluZSBEVUtfSU5UOF9NSU4gICAg ICAgICAgKC0weDgwTCkKKyNkZWZpbmUgRFVLX0lOVDhfTUFYICAgICAgICAgIDB4N2ZMCisjZGVm aW5lIERVS19VSU5UX0xFQVNUOF9NSU4gICAwVUwKKyNkZWZpbmUgRFVLX1VJTlRfTEVBU1Q4X01B WCAgIDB4ZmZVTAorI2RlZmluZSBEVUtfSU5UX0xFQVNUOF9NSU4gICAgKC0weDgwTCkKKyNkZWZp bmUgRFVLX0lOVF9MRUFTVDhfTUFYICAgIDB4N2ZMCisjZGVmaW5lIERVS19VSU5UX0ZBU1Q4X01J TiAgICAwVUwKKyNkZWZpbmUgRFVLX1VJTlRfRkFTVDhfTUFYICAgIDB4ZmZVTAorI2RlZmluZSBE VUtfSU5UX0ZBU1Q4X01JTiAgICAgKC0weDgwTCkKKyNkZWZpbmUgRFVLX0lOVF9GQVNUOF9NQVgg ICAgIDB4N2ZMCisjZGVmaW5lIERVS19VSU5UMTZfTUlOICAgICAgICAwVUwKKyNkZWZpbmUgRFVL X1VJTlQxNl9NQVggICAgICAgIDB4ZmZmZlVMCisjZGVmaW5lIERVS19JTlQxNl9NSU4gICAgICAg ICAoLTB4N2ZmZkwgLSAxTCkKKyNkZWZpbmUgRFVLX0lOVDE2X01BWCAgICAgICAgIDB4N2ZmZkwK KyNkZWZpbmUgRFVLX1VJTlRfTEVBU1QxNl9NSU4gIDBVTAorI2RlZmluZSBEVUtfVUlOVF9MRUFT VDE2X01BWCAgMHhmZmZmVUwKKyNkZWZpbmUgRFVLX0lOVF9MRUFTVDE2X01JTiAgICgtMHg3ZmZm TCAtIDFMKQorI2RlZmluZSBEVUtfSU5UX0xFQVNUMTZfTUFYICAgMHg3ZmZmTAorI2RlZmluZSBE VUtfVUlOVF9GQVNUMTZfTUlOICAgMFVMCisjZGVmaW5lIERVS19VSU5UX0ZBU1QxNl9NQVggICAw eGZmZmZVTAorI2RlZmluZSBEVUtfSU5UX0ZBU1QxNl9NSU4gICAgKC0weDdmZmZMIC0gMUwpCisj ZGVmaW5lIERVS19JTlRfRkFTVDE2X01BWCAgICAweDdmZmZMCisjZGVmaW5lIERVS19VSU5UMzJf TUlOICAgICAgICAwVUwKKyNkZWZpbmUgRFVLX1VJTlQzMl9NQVggICAgICAgIDB4ZmZmZmZmZmZV TAorI2RlZmluZSBEVUtfSU5UMzJfTUlOICAgICAgICAgKC0weDdmZmZmZmZmTCAtIDFMKQorI2Rl ZmluZSBEVUtfSU5UMzJfTUFYICAgICAgICAgMHg3ZmZmZmZmZkwKKyNkZWZpbmUgRFVLX1VJTlRf TEVBU1QzMl9NSU4gIDBVTAorI2RlZmluZSBEVUtfVUlOVF9MRUFTVDMyX01BWCAgMHhmZmZmZmZm ZlVMCisjZGVmaW5lIERVS19JTlRfTEVBU1QzMl9NSU4gICAoLTB4N2ZmZmZmZmZMIC0gMUwpCisj ZGVmaW5lIERVS19JTlRfTEVBU1QzMl9NQVggICAweDdmZmZmZmZmTAorI2RlZmluZSBEVUtfVUlO VF9GQVNUMzJfTUlOICAgMFVMCisjZGVmaW5lIERVS19VSU5UX0ZBU1QzMl9NQVggICAweGZmZmZm ZmZmVUwKKyNkZWZpbmUgRFVLX0lOVF9GQVNUMzJfTUlOICAgICgtMHg3ZmZmZmZmZkwgLSAxTCkK KyNkZWZpbmUgRFVLX0lOVF9GQVNUMzJfTUFYICAgIDB4N2ZmZmZmZmZMCisKKy8qIDY0LWJpdCBj b25zdGFudHMuICBTaW5jZSBMTCAvIFVMTCBjb25zdGFudHMgYXJlIG5vdCBhbHdheXMgYXZhaWxh YmxlLAorICogdXNlIGNvbXB1dGVkIHZhbHVlcy4gIFRoZXNlIHZhbHVlcyBjYW4ndCBiZSB1c2Vk IGluIHByZXByb2Nlc3NvcgorICogY29tcGFyaXNvbnM7IGZsYWcgdGhlbSBhcyBzdWNoLgorICov CisjaWYgZGVmaW5lZChEVUtfRl9IQVZFXzY0QklUKQorI2RlZmluZSBEVUtfVUlOVDY0X01JTiAg ICAgICAgKChkdWtfdWludDY0X3QpIDApCisjZGVmaW5lIERVS19VSU5UNjRfTUFYICAgICAgICAo KGR1a191aW50NjRfdCkgLTEpCisjZGVmaW5lIERVS19JTlQ2NF9NSU4gICAgICAgICAoKGR1a19p bnQ2NF90KSAofihEVUtfVUlOVDY0X01BWCA+PiAxKSkpCisjZGVmaW5lIERVS19JTlQ2NF9NQVgg ICAgICAgICAoKGR1a19pbnQ2NF90KSAoRFVLX1VJTlQ2NF9NQVggPj4gMSkpCisjZGVmaW5lIERV S19VSU5UX0xFQVNUNjRfTUlOICBEVUtfVUlOVDY0X01JTgorI2RlZmluZSBEVUtfVUlOVF9MRUFT VDY0X01BWCAgRFVLX1VJTlQ2NF9NQVgKKyNkZWZpbmUgRFVLX0lOVF9MRUFTVDY0X01JTiAgIERV S19JTlQ2NF9NSU4KKyNkZWZpbmUgRFVLX0lOVF9MRUFTVDY0X01BWCAgIERVS19JTlQ2NF9NQVgK KyNkZWZpbmUgRFVLX1VJTlRfRkFTVDY0X01JTiAgIERVS19VSU5UNjRfTUlOCisjZGVmaW5lIERV S19VSU5UX0ZBU1Q2NF9NQVggICBEVUtfVUlOVDY0X01BWAorI2RlZmluZSBEVUtfSU5UX0ZBU1Q2 NF9NSU4gICAgRFVLX0lOVDY0X01JTgorI2RlZmluZSBEVUtfSU5UX0ZBU1Q2NF9NQVggICAgRFVL X0lOVDY0X01BWAorI2RlZmluZSBEVUtfVUlOVDY0X01JTl9DT01QVVRFRAorI2RlZmluZSBEVUtf VUlOVDY0X01BWF9DT01QVVRFRAorI2RlZmluZSBEVUtfSU5UNjRfTUlOX0NPTVBVVEVECisjZGVm aW5lIERVS19JTlQ2NF9NQVhfQ09NUFVURUQKKyNkZWZpbmUgRFVLX1VJTlRfTEVBU1Q2NF9NSU5f Q09NUFVURUQKKyNkZWZpbmUgRFVLX1VJTlRfTEVBU1Q2NF9NQVhfQ09NUFVURUQKKyNkZWZpbmUg RFVLX0lOVF9MRUFTVDY0X01JTl9DT01QVVRFRAorI2RlZmluZSBEVUtfSU5UX0xFQVNUNjRfTUFY X0NPTVBVVEVECisjZGVmaW5lIERVS19VSU5UX0ZBU1Q2NF9NSU5fQ09NUFVURUQKKyNkZWZpbmUg RFVLX1VJTlRfRkFTVDY0X01BWF9DT01QVVRFRAorI2RlZmluZSBEVUtfSU5UX0ZBU1Q2NF9NSU5f Q09NUFVURUQKKyNkZWZpbmUgRFVLX0lOVF9GQVNUNjRfTUFYX0NPTVBVVEVECisjZW5kaWYKKwor I2lmIGRlZmluZWQoRFVLX0ZfSEFWRV82NEJJVCkKKyNkZWZpbmUgRFVLX1VJTlRNQVhfTUlOICAg ICAgIERVS19VSU5UNjRfTUlOCisjZGVmaW5lIERVS19VSU5UTUFYX01BWCAgICAgICBEVUtfVUlO VDY0X01BWAorI2RlZmluZSBEVUtfSU5UTUFYX01JTiAgICAgICAgRFVLX0lOVDY0X01JTgorI2Rl ZmluZSBEVUtfSU5UTUFYX01BWCAgICAgICAgRFVLX0lOVDY0X01BWAorI2RlZmluZSBEVUtfVUlO VE1BWF9NSU5fQ09NUFVURUQKKyNkZWZpbmUgRFVLX1VJTlRNQVhfTUFYX0NPTVBVVEVECisjZGVm aW5lIERVS19JTlRNQVhfTUlOX0NPTVBVVEVECisjZGVmaW5lIERVS19JTlRNQVhfTUFYX0NPTVBV VEVECisjZWxzZQorI2RlZmluZSBEVUtfVUlOVE1BWF9NSU4gICAgICAgMFVMCisjZGVmaW5lIERV S19VSU5UTUFYX01BWCAgICAgICAweGZmZmZmZmZmVUwKKyNkZWZpbmUgRFVLX0lOVE1BWF9NSU4g ICAgICAgICgtMHg3ZmZmZmZmZkwgLSAxTCkKKyNkZWZpbmUgRFVLX0lOVE1BWF9NQVggICAgICAg IDB4N2ZmZmZmZmZMCisjZW5kaWYKKworLyogVGhpcyBkZXRlY3Rpb24gaXMgbm90IHZlcnkgcmVs aWFibGUuICovCisjaWYgZGVmaW5lZChEVUtfRl8zMkJJVF9QVFJTKQordHlwZWRlZiBkdWtfaW50 MzJfdCBkdWtfaW50cHRyX3Q7Cit0eXBlZGVmIGR1a191aW50MzJfdCBkdWtfdWludHB0cl90Owor I2RlZmluZSBEVUtfVUlOVFBUUl9NSU4gICAgICAgRFVLX1VJTlQzMl9NSU4KKyNkZWZpbmUgRFVL X1VJTlRQVFJfTUFYICAgICAgIERVS19VSU5UMzJfTUFYCisjZGVmaW5lIERVS19JTlRQVFJfTUlO ICAgICAgICBEVUtfSU5UMzJfTUlOCisjZGVmaW5lIERVS19JTlRQVFJfTUFYICAgICAgICBEVUtf SU5UMzJfTUFYCisjZWxpZiBkZWZpbmVkKERVS19GXzY0QklUX1BUUlMpICYmIGRlZmluZWQoRFVL X0ZfSEFWRV82NEJJVCkKK3R5cGVkZWYgZHVrX2ludDY0X3QgZHVrX2ludHB0cl90OwordHlwZWRl ZiBkdWtfdWludDY0X3QgZHVrX3VpbnRwdHJfdDsKKyNkZWZpbmUgRFVLX1VJTlRQVFJfTUlOICAg ICAgIERVS19VSU5UNjRfTUlOCisjZGVmaW5lIERVS19VSU5UUFRSX01BWCAgICAgICBEVUtfVUlO VDY0X01BWAorI2RlZmluZSBEVUtfSU5UUFRSX01JTiAgICAgICAgRFVLX0lOVDY0X01JTgorI2Rl ZmluZSBEVUtfSU5UUFRSX01BWCAgICAgICAgRFVLX0lOVDY0X01BWAorI2RlZmluZSBEVUtfVUlO VFBUUl9NSU5fQ09NUFVURUQKKyNkZWZpbmUgRFVLX1VJTlRQVFJfTUFYX0NPTVBVVEVECisjZGVm aW5lIERVS19JTlRQVFJfTUlOX0NPTVBVVEVECisjZGVmaW5lIERVS19JTlRQVFJfTUFYX0NPTVBV VEVECisjZWxzZQorI2Vycm9yIGNhbm5vdCBkZXRlcm1pbmUgaW50cHRyIHR5cGUKKyNlbmRpZgor CisvKiBTSVpFX01BWCBtYXkgYmUgbWlzc2luZyBzbyB1c2UgYW4gYXBwcm94aW1hdGUgdmFsdWUg Zm9yIGl0LiAqLworI3VuZGVmIERVS19TSVpFX01BWF9DT01QVVRFRAorI2lmICFkZWZpbmVkKFNJ WkVfTUFYKQorI2RlZmluZSBEVUtfU0laRV9NQVhfQ09NUFVURUQKKyNkZWZpbmUgU0laRV9NQVgg ICAgICAgICAgICAgICgoc2l6ZV90KSAoLTEpKQorI2VuZGlmCisjZGVmaW5lIERVS19TSVpFX01J TiAgICAgICAgICAwCisjZGVmaW5lIERVS19TSVpFX01BWCAgICAgICAgICBTSVpFX01BWAorCisj ZW5kaWYgIC8qIEM5OSB0eXBlcyAqLworCisvKiBBIGZldyB0eXBlcyBhcmUgYXNzdW1lZCB0byBh bHdheXMgZXhpc3QuICovCit0eXBlZGVmIHNpemVfdCBkdWtfc2l6ZV90OwordHlwZWRlZiBwdHJk aWZmX3QgZHVrX3B0cmRpZmZfdDsKKworLyogVGhlIGJlc3QgdHlwZSBmb3IgYW4gImFsbCBhcm91 bmQgaW50IiBpbiBEdWt0YXBlIGludGVybmFscyBpcyAiYXQgbGVhc3QKKyAqIDMyIGJpdCBzaWdu ZWQgaW50ZWdlciIgd2hpY2ggaXMgbW9zdCBjb252ZW5pZW50LiAgU2FtZSBmb3IgdW5zaWduZWQg dHlwZS4KKyAqIFByZWZlciAnaW50JyB3aGVuIGxhcmdlIGVub3VnaCwgYXMgaXQgaXMgYWxtb3N0 IGFsd2F5cyBhIGNvbnZlbmllbnQgdHlwZS4KKyAqLworI2lmIGRlZmluZWQoVUlOVF9NQVgpICYm IChVSU5UX01BWCA+PSAweGZmZmZmZmZmVUwpCit0eXBlZGVmIGludCBkdWtfaW50X3Q7Cit0eXBl ZGVmIHVuc2lnbmVkIGludCBkdWtfdWludF90OworI2RlZmluZSBEVUtfSU5UX01JTiAgICAgICAg ICAgSU5UX01JTgorI2RlZmluZSBEVUtfSU5UX01BWCAgICAgICAgICAgSU5UX01BWAorI2RlZmlu ZSBEVUtfVUlOVF9NSU4gICAgICAgICAgMAorI2RlZmluZSBEVUtfVUlOVF9NQVggICAgICAgICAg VUlOVF9NQVgKKyNlbHNlCit0eXBlZGVmIGR1a19pbnRfZmFzdDMyX3QgZHVrX2ludF90OwordHlw ZWRlZiBkdWtfdWludF9mYXN0MzJfdCBkdWtfdWludF90OworI2RlZmluZSBEVUtfSU5UX01JTiAg ICAgICAgICAgRFVLX0lOVF9GQVNUMzJfTUlOCisjZGVmaW5lIERVS19JTlRfTUFYICAgICAgICAg ICBEVUtfSU5UX0ZBU1QzMl9NQVgKKyNkZWZpbmUgRFVLX1VJTlRfTUlOICAgICAgICAgIERVS19V SU5UX0ZBU1QzMl9NSU4KKyNkZWZpbmUgRFVLX1VJTlRfTUFYICAgICAgICAgIERVS19VSU5UX0ZB U1QzMl9NQVgKKyNlbmRpZgorCisvKiBTYW1lIGFzICdkdWtfaW50X3QnIGJ1dCBndWFyYW50ZWVk IHRvIGJlIGEgJ2Zhc3QnIHZhcmlhbnQgaWYgdGhpcworICogZGlzdGluY3Rpb24gbWF0dGVycyBm b3IgdGhlIENQVS4gIFRoZXNlIHR5cGVzIGFyZSB1c2VkIG1haW5seSBpbiB0aGUKKyAqIGV4ZWN1 dG9yIHdoZXJlIGl0IG1pZ2h0IHJlYWxseSBtYXR0ZXIuCisgKi8KK3R5cGVkZWYgZHVrX2ludF9m YXN0MzJfdCBkdWtfaW50X2Zhc3RfdDsKK3R5cGVkZWYgZHVrX3VpbnRfZmFzdDMyX3QgZHVrX3Vp bnRfZmFzdF90OworI2RlZmluZSBEVUtfSU5UX0ZBU1RfTUlOICAgICAgRFVLX0lOVF9GQVNUMzJf TUlOCisjZGVmaW5lIERVS19JTlRfRkFTVF9NQVggICAgICBEVUtfSU5UX0ZBU1QzMl9NQVgKKyNk ZWZpbmUgRFVLX1VJTlRfRkFTVF9NSU4gICAgIERVS19VSU5UX0ZBU1QzMl9NSU4KKyNkZWZpbmUg RFVLX1VJTlRfRkFTVF9NQVggICAgIERVS19VSU5UX0ZBU1QzMl9NQVgKKworLyogU21hbGwgaW50 ZWdlcnMgKDE2IGJpdHMgb3IgbW9yZSkgY2FuIGZhbGwgYmFjayB0byB0aGUgJ2ludCcgdHlwZSwg YnV0CisgKiBoYXZlIGEgdHlwZWRlZiBzbyB0aGV5IGFyZSBtYXJrZWQgInNtYWxsIiBleHBsaWNp dGx5LgorICovCit0eXBlZGVmIGludCBkdWtfc21hbGxfaW50X3Q7Cit0eXBlZGVmIHVuc2lnbmVk IGludCBkdWtfc21hbGxfdWludF90OworI2RlZmluZSBEVUtfU01BTExfSU5UX01JTiAgICAgSU5U X01JTgorI2RlZmluZSBEVUtfU01BTExfSU5UX01BWCAgICAgSU5UX01BWAorI2RlZmluZSBEVUtf U01BTExfVUlOVF9NSU4gICAgMAorI2RlZmluZSBEVUtfU01BTExfVUlOVF9NQVggICAgVUlOVF9N QVgKKworLyogRmFzdCB2YXJpYW50cyBvZiBzbWFsbCBpbnRlZ2VycywgYWdhaW4gZm9yIHJlYWxs eSBmYXN0IHBhdGhzIGxpa2UgdGhlCisgKiBleGVjdXRvci4KKyAqLwordHlwZWRlZiBkdWtfaW50 X2Zhc3QxNl90IGR1a19zbWFsbF9pbnRfZmFzdF90OwordHlwZWRlZiBkdWtfdWludF9mYXN0MTZf dCBkdWtfc21hbGxfdWludF9mYXN0X3Q7CisjZGVmaW5lIERVS19TTUFMTF9JTlRfRkFTVF9NSU4g ICAgRFVLX0lOVF9GQVNUMTZfTUlOCisjZGVmaW5lIERVS19TTUFMTF9JTlRfRkFTVF9NQVggICAg RFVLX0lOVF9GQVNUMTZfTUFYCisjZGVmaW5lIERVS19TTUFMTF9VSU5UX0ZBU1RfTUlOICAgRFVL X1VJTlRfRkFTVDE2X01JTgorI2RlZmluZSBEVUtfU01BTExfVUlOVF9GQVNUX01BWCAgIERVS19V SU5UX0ZBU1QxNl9NQVgKKworLyogQm9vbGVhbiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIHdpdGgg dGhlIHBsYXRmb3JtICd1bnNpZ25lZCBpbnQnLiAqLwordHlwZWRlZiBkdWtfc21hbGxfdWludF90 IGR1a19ib29sX3Q7CisjZGVmaW5lIERVS19CT09MX01JTiAgICAgICAgICAgICAgRFVLX1NNQUxM X1VJTlRfTUlOCisjZGVmaW5lIERVS19CT09MX01BWCAgICAgICAgICAgICAgRFVLX1NNQUxMX1VJ TlRfTUFYCisKKy8qIEluZGV4IHZhbHVlcyBtdXN0IGhhdmUgYXQgbGVhc3QgMzItYml0IHNpZ25l ZCByYW5nZS4gKi8KK3R5cGVkZWYgZHVrX2ludF90IGR1a19pZHhfdDsKKyNkZWZpbmUgRFVLX0lE WF9NSU4gICAgICAgICAgICAgICBEVUtfSU5UX01JTgorI2RlZmluZSBEVUtfSURYX01BWCAgICAg ICAgICAgICAgIERVS19JTlRfTUFYCisKKy8qIFVuc2lnbmVkIGluZGV4IHZhcmlhbnQuICovCit0 eXBlZGVmIGR1a191aW50X3QgZHVrX3VpZHhfdDsKKyNkZWZpbmUgRFVLX1VJRFhfTUlOICAgICAg ICAgICAgICBEVUtfVUlOVF9NSU4KKyNkZWZpbmUgRFVLX1VJRFhfTUFYICAgICAgICAgICAgICBE VUtfVUlOVF9NQVgKKworLyogQXJyYXkgaW5kZXggdmFsdWVzLCBjb3VsZCBiZSBleGFjdCAzMiBi aXRzLgorICogQ3VycmVudGx5IG5vIG5lZWQgZm9yIHNpZ25lZCBkdWtfYXJyaWR4X3QuCisgKi8K K3R5cGVkZWYgZHVrX3VpbnRfdCBkdWtfdWFycmlkeF90OworI2RlZmluZSBEVUtfVUFSUklEWF9N SU4gICAgICAgICAgIERVS19VSU5UX01JTgorI2RlZmluZSBEVUtfVUFSUklEWF9NQVggICAgICAg ICAgIERVS19VSU5UX01BWAorCisvKiBEdWt0YXBlL0MgZnVuY3Rpb24gcmV0dXJuIHZhbHVlLCBw bGF0Zm9ybSBpbnQgaXMgZW5vdWdoIGZvciBub3cgdG8KKyAqIHJlcHJlc2VudCAwLCAxLCBvciBu ZWdhdGl2ZSBlcnJvciBjb2RlLiAgTXVzdCBiZSBjb21wYXRpYmxlIHdpdGgKKyAqIGFzc2lnbmlu ZyB0cnV0aCB2YWx1ZXMgKGUuZy4gZHVrX3JldF90IHJjID0gKGZvbyA9PSBiYXIpOykuCisgKi8K K3R5cGVkZWYgZHVrX3NtYWxsX2ludF90IGR1a19yZXRfdDsKKyNkZWZpbmUgRFVLX1JFVF9NSU4g ICAgICAgICAgICAgICBEVUtfU01BTExfSU5UX01JTgorI2RlZmluZSBEVUtfUkVUX01BWCAgICAg ICAgICAgICAgIERVS19TTUFMTF9JTlRfTUFYCisKKy8qIEVycm9yIGNvZGVzIGFyZSByZXByZXNl bnRlZCB3aXRoIHBsYXRmb3JtIGludC4gIEhpZ2ggYml0cyBhcmUgdXNlZAorICogZm9yIGZsYWdz IGFuZCBzdWNoLCBzbyAzMiBiaXRzIGFyZSBuZWVkZWQuCisgKi8KK3R5cGVkZWYgZHVrX2ludF90 IGR1a19lcnJjb2RlX3Q7CisjZGVmaW5lIERVS19FUlJDT0RFX01JTiAgICAgICAgICAgRFVLX0lO VF9NSU4KKyNkZWZpbmUgRFVLX0VSUkNPREVfTUFYICAgICAgICAgICBEVUtfSU5UX01BWAorCisv KiBDb2RlcG9pbnQgdHlwZS4gIE11c3QgYmUgMzIgYml0cyBvciBtb3JlIGJlY2F1c2UgaXQgaXMg dXNlZCBhbHNvIGZvcgorICogaW50ZXJuYWwgY29kZXBvaW50cy4gIFRoZSB0eXBlIGlzIHNpZ25l ZCBiZWNhdXNlIG5lZ2F0aXZlIGNvZGVwb2ludHMKKyAqIGFyZSB1c2VkIGFzIGludGVybmFsIG1h cmtlcnMgKGUuZy4gdG8gbWFyayBFT0Ygb3IgbWlzc2luZyBhcmd1bWVudCkuCisgKiAoWClVVEYt OC9DRVNVLTggZW5jb2RlL2RlY29kZSB0YWtlIGFuZCByZXR1cm4gYW4gdW5zaWduZWQgdmFyaWFu dCB0bworICogZW5zdXJlIGR1a191aW50MzJfdCBjYXN0cyBiYWNrIGFuZCBmb3J0aCBuaWNlbHku ICBBbG1vc3QgZXZlcnl0aGluZworICogZWxzZSB1c2VzIHRoZSBzaWduZWQgb25lLgorICovCit0 eXBlZGVmIGR1a19pbnRfdCBkdWtfY29kZXBvaW50X3Q7Cit0eXBlZGVmIGR1a191aW50X3QgZHVr X3Vjb2RlcG9pbnRfdDsKKyNkZWZpbmUgRFVLX0NPREVQT0lOVF9NSU4gICAgICAgICBEVUtfSU5U X01JTgorI2RlZmluZSBEVUtfQ09ERVBPSU5UX01BWCAgICAgICAgIERVS19JTlRfTUFYCisjZGVm aW5lIERVS19VQ09ERVBPSU5UX01JTiAgICAgICAgRFVLX1VJTlRfTUlOCisjZGVmaW5lIERVS19V Q09ERVBPSU5UX01BWCAgICAgICAgRFVLX1VJTlRfTUFYCisKKy8qIElFRUUgZmxvYXQvZG91Ymxl IHR5cGVkZWYuICovCit0eXBlZGVmIGZsb2F0IGR1a19mbG9hdF90OwordHlwZWRlZiBkb3VibGUg ZHVrX2RvdWJsZV90OworCisvKiBXZSdyZSBnZW5lcmFsbHkgYXNzdW1pbmcgdGhhdCB3ZSdyZSB3 b3JraW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhIDMyLWJpdAorICogYWRkcmVzcyBzcGFjZS4gIElm IERVS19TSVpFX01BWCBpcyBhIHR5cGVjYXN0IHZhbHVlICh3aGljaCBpcyBuZWNlc3NhcnkKKyAq IGlmIFNJWkVfTUFYIGlzIG1pc3NpbmcpLCB0aGUgY2hlY2sgbXVzdCBiZSBhdm9pZGVkIGJlY2F1 c2UgdGhlCisgKiBwcmVwcm9jZXNzb3IgY2FuJ3QgZG8gYSBjb21wYXJpc29uLgorICovCisjaWYg IWRlZmluZWQoRFVLX1NJWkVfTUFYKQorI2Vycm9yIERVS19TSVpFX01BWCBpcyB1bmRlZmluZWQs IHByb2JhYmx5IG1pc3NpbmcgU0laRV9NQVgKKyNlbGlmICFkZWZpbmVkKERVS19TSVpFX01BWF9D T01QVVRFRCkKKyNpZiBEVUtfU0laRV9NQVggPCAweGZmZmZmZmZmVUwKKy8qIE9uIHNvbWUgc3lz dGVtcyBTSVpFX01BWCBjYW4gYmUgc21hbGxlciB0aGFuIG1heCB1bnNpZ25lZCAzMi1iaXQgdmFs dWUKKyAqIHdoaWNoIHNlZW1zIGluY29ycmVjdCBpZiBzaXplX3QgaXMgKGF0IGxlYXN0KSBhbiB1 bnNpZ25lZCAzMi1iaXQgdHlwZS4KKyAqIEhvd2V2ZXIsIGl0IGRvZXNuJ3Qgc2VlbSB1c2VmdWwg dG8gZXJyb3Igb3V0IGNvbXBpbGF0aW9uIGlmIHRoaXMgaXMgdGhlCisgKiBjYXNlLgorICovCisj ZW5kaWYKKyNlbmRpZgorCisvKiBUeXBlIHVzZWQgaW4gcHVibGljIEFQSSBkZWNsYXJhdGlvbnMg YW5kIHVzZXIgY29kZS4gIFR5cGVkZWYgbWFwcyB0bworICogJ3N0cnVjdCBkdWtfaHRocmVhZCcg bGlrZSB0aGUgJ2R1a19odGhyZWFkJyB0eXBlZGVmIHdoaWNoIGlzIHVzZWQKKyAqIGV4Y2x1c2l2 ZWx5IGluIGludGVybmFscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZHVrX2h0aHJlYWQgZHVrX2Nv bnRleHQ7CisKKy8qIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZSA2NC1iaXQgaW50ZWdlcnMg b3Igbm90LgorICoKKyAqIFF1aXRlIGluY29tcGxldGUgbm93LiAgVXNlIDY0LWJpdCB0eXBlcyBp ZiBkZXRlY3RlZCAoQzk5IG9yIG90aGVyIGRldGVjdGlvbikKKyAqIHVubGVzcyB0aGV5IGFyZSBr bm93biB0byBiZSB1bnJlbGlhYmxlLiAgRm9yIGluc3RhbmNlLCA2NC1iaXQgdHlwZXMgYXJlCisg KiBhdmFpbGFibGUgb24gVkJDQyBidXQgc2VlbSB0byBtaXNiZWhhdmUuCisgKi8KKyNpZiBkZWZp bmVkKERVS19GX0hBVkVfNjRCSVQpICYmICFkZWZpbmVkKERVS19GX1ZCQ0MpCisjZGVmaW5lIERV S19VU0VfNjRCSVRfT1BTCisjZWxzZQorI3VuZGVmIERVS19VU0VfNjRCSVRfT1BTCisjZW5kaWYK KworLyoKKyAqICBGaWxsLWlucyBmb3IgcGxhdGZvcm0sIGFyY2hpdGVjdHVyZSwgYW5kIGNvbXBp bGVyCisgKi8KKworLyogQW4gYWJvcnQoKS1saWtlIHByaW1pdGl2ZSBpcyBuZWVkZWQgYnkgdGhl IGRlZmF1bHQgZmF0YWwgZXJyb3IgaGFuZGxlci4gKi8KKyNpZiAhZGVmaW5lZChEVUtfQUJPUlQp CisjZGVmaW5lIERVS19BQk9SVCAgICAgICAgICAgICBhYm9ydAorI2VuZGlmCisKKyNpZiAhZGVm aW5lZChEVUtfU0VUSk1QKQorI2RlZmluZSBEVUtfSk1QQlVGX1RZUEUgICAgICAgam1wX2J1Zgor I2RlZmluZSBEVUtfU0VUSk1QKGpiKSAgICAgICAgc2V0am1wKChqYikpCisjZGVmaW5lIERVS19M T05HSk1QKGpiKSAgICAgICBsb25nam1wKChqYiksIDEpCisjZW5kaWYKKworI2lmIDAKKy8qIHNp Z3NldGptcCgpIGFsdGVybmF0aXZlICovCisjZGVmaW5lIERVS19KTVBCVUZfVFlQRSAgICAgICBz aWdqbXBfYnVmCisjZGVmaW5lIERVS19TRVRKTVAoamIpICAgICAgICBzaWdzZXRqbXAoKGpiKSkK KyNkZWZpbmUgRFVLX0xPTkdKTVAoamIpICAgICAgIHNpZ2xvbmdqbXAoKGpiKSwgMSkKKyNlbmRp ZgorCisvKiBTcGVjaWFsIG5hbWluZyB0byBhdm9pZCBjb25mbGljdCB3aXRoIGUuZy4gRFVLX0ZS RUUoKSBpbiBkdWtfaGVhcC5oCisgKiAod2hpY2ggaXMgdW5mb3J0dW5hdGVseSBuYW1lZCkuICBN YXkgc29tZXRpbWVzIG5lZWQgcmVwbGFjZW1lbnQsIGUuZy4KKyAqIHNvbWUgY29tcGlsZXJzIGRv bid0IGhhbmRsZSB6ZXJvIGxlbmd0aCBvciBOVUxMIGNvcnJlY3RseSBpbiByZWFsbG9jKCkuCisg Ki8KKyNpZiAhZGVmaW5lZChEVUtfQU5TSV9NQUxMT0MpCisjZGVmaW5lIERVS19BTlNJX01BTExP QyAgICAgIG1hbGxvYworI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0FOU0lfUkVBTExPQykKKyNk ZWZpbmUgRFVLX0FOU0lfUkVBTExPQyAgICAgcmVhbGxvYworI2VuZGlmCisjaWYgIWRlZmluZWQo RFVLX0FOU0lfQ0FMTE9DKQorI2RlZmluZSBEVUtfQU5TSV9DQUxMT0MgICAgICBjYWxsb2MKKyNl bmRpZgorI2lmICFkZWZpbmVkKERVS19BTlNJX0ZSRUUpCisjZGVmaW5lIERVS19BTlNJX0ZSRUUg ICAgICAgIGZyZWUKKyNlbmRpZgorCisvKiBBTlNJIEMgKHZhcmlvdXMgdmVyc2lvbnMpIGFuZCBz b21lIGltcGxlbWVudGF0aW9ucyByZXF1aXJlIHRoYXQgdGhlCisgKiBwb2ludGVyIGFyZ3VtZW50 cyB0byBtZW1zZXQoKSwgbWVtY3B5KCksIGFuZCBtZW1tb3ZlKCkgYmUgdmFsaWQgdmFsdWVzCisg KiBldmVuIHdoZW4gYnl0ZSBzaXplIGlzIDAgKGV2ZW4gYSBOVUxMIHBvaW50ZXIgaXMgY29uc2lk ZXJlZCBpbnZhbGlkIGluCisgKiB0aGlzIGNvbnRleHQpLiAgWmVyby1zaXplIG9wZXJhdGlvbnMg YXMgc3VjaCBhcmUgYWxsb3dlZCwgYXMgbG9uZyBhcyB0aGVpcgorICogcG9pbnRlciBhcmd1bWVu dHMgcG9pbnQgdG8gYSB2YWxpZCBtZW1vcnkgYXJlYS4gIFRoZSBEVUtfTUVNU0VUKCksCisgKiBE VUtfTUVNQ1BZKCksIGFuZCBEVUtfTUVNTU9WRSgpIG1hY3JvcyByZXF1aXJlIHRoaXMgc2FtZSBi ZWhhdmlvciwgaS5lLjoKKyAqICgxKSBwb2ludGVycyBtdXN0IGJlIHZhbGlkIGFuZCBub24tTlVM TCwgKDIpIHplcm8gc2l6ZSBtdXN0IG90aGVyd2lzZSBiZQorICogYWxsb3dlZC4gIElmIHRoZXNl IGFyZSBub3QgZnVsZmlsbGVkLCBhIG1hY3JvIHdyYXBwZXIgaXMgbmVlZGVkLgorICoKKyAqICAg aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MjQzMDEyL2lzLWl0LWd1YXJhbnRl ZWQtdG8tYmUtc2FmZS10by1wZXJmb3JtLW1lbWNweTAtMC0wCisgKiAgIGh0dHA6Ly9saXN0cy5j cy51aXVjLmVkdS9waXBlcm1haWwvbGx2bWRldi8yMDA3LU9jdG9iZXIvMDExMDY1Lmh0bWwKKyAq CisgKiBOb3Qgc3VyZSB3aGF0J3MgdGhlIHJlcXVpcmVkIGJlaGF2aW9yIHdoZW4gYSBwb2ludGVy IHBvaW50cyBqdXN0IHBhc3QgdGhlCisgKiBlbmQgb2YgYSBidWZmZXIsIHdoaWNoIG9mdGVuIGhh cHBlbnMgaW4gcHJhY3RpY2UgKGUuZy4gemVybyBzaXplIG1lbW1vdmVzKS4KKyAqIEZvciBleGFt cGxlLCBpZiBhbGxvY2F0aW9uIHNpemUgaXMgMywgdGhlIGZvbGxvd2luZyBwb2ludGVyIHdvdWxk IG5vdAorICogdGVjaG5pY2FsbHkgcG9pbnQgdG8gYSB2YWxpZCBtZW1vcnkgYnl0ZToKKyAqCisg KiAgIDwtLSBhbGxvYyAtLT4KKyAqICAgfCAwIHwgMSB8IDIgfCAuLi4uLgorICogICAgICAgICAg ICAgICAgIF4tLSBwPTMsIHBvaW50cyBhZnRlciBsYXN0IHZhbGlkIGJ5dGUgKDIpCisgKi8KKyNp ZiAhZGVmaW5lZChEVUtfTUVNQ1BZKQorI2lmIGRlZmluZWQoRFVLX0ZfVUNMSUJDKQorLyogT2xk IHVjbGliY3MgaGF2ZSBhIGJyb2tlbiBtZW1jcHkgc28gdXNlIG1lbW1vdmUgaW5zdGVhZCAodGhp cyBpcyBvdmVybHkgd2lkZQorICogbm93IG9uIHB1cnBvc2UpOiBodHRwOi8vbGlzdHMudWNsaWJj Lm9yZy9waXBlcm1haWwvdWNsaWJjLWN2cy8yMDA4LU9jdG9iZXIvMDI1NTExLmh0bWwKKyAqLwor I2RlZmluZSBEVUtfTUVNQ1BZICAgICAgIG1lbW1vdmUKKyNlbHNlCisjZGVmaW5lIERVS19NRU1D UFkgICAgICAgbWVtY3B5CisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19NRU1NT1ZF KQorI2RlZmluZSBEVUtfTUVNTU9WRSAgICAgIG1lbW1vdmUKKyNlbmRpZgorI2lmICFkZWZpbmVk KERVS19NRU1DTVApCisjZGVmaW5lIERVS19NRU1DTVAgICAgICAgbWVtY21wCisjZW5kaWYKKyNp ZiAhZGVmaW5lZChEVUtfTUVNU0VUKQorI2RlZmluZSBEVUtfTUVNU0VUICAgICAgIG1lbXNldAor I2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX1NUUkxFTikKKyNkZWZpbmUgRFVLX1NUUkxFTiAgICAg ICBzdHJsZW4KKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19TVFJDTVApCisjZGVmaW5lIERVS19T VFJDTVAgICAgICAgc3RyY21wCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfU1RSTkNNUCkKKyNk ZWZpbmUgRFVLX1NUUk5DTVAgICAgICBzdHJuY21wCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtf U1BSSU5URikKKyNkZWZpbmUgRFVLX1NQUklOVEYgICAgICBzcHJpbnRmCisjZW5kaWYKKyNpZiAh ZGVmaW5lZChEVUtfU05QUklOVEYpCisvKiBzbnByaW50ZigpIGlzIHRlY2huaWNhbGx5IG5vdCBw YXJ0IG9mIEM4OSBidXQgdXN1YWxseSBhdmFpbGFibGUuICovCisjZGVmaW5lIERVS19TTlBSSU5U RiAgICAgc25wcmludGYKKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19WU1BSSU5URikKKyNkZWZp bmUgRFVLX1ZTUFJJTlRGICAgICB2c3ByaW50ZgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX1ZT TlBSSU5URikKKy8qIHZzbnByaW50ZigpIGlzIHRlY2huaWNhbGx5IG5vdCBwYXJ0IG9mIEM4OSBi dXQgdXN1YWxseSBhdmFpbGFibGUuICovCisjZGVmaW5lIERVS19WU05QUklOVEYgICAgdnNucHJp bnRmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfU1NDQU5GKQorI2RlZmluZSBEVUtfU1NDQU5G ICAgICAgIHNzY2FuZgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX1ZTU0NBTkYpCisjZGVmaW5l IERVS19WU1NDQU5GICAgICAgdnNzY2FuZgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX01FTVpF Uk8pCisjZGVmaW5lIERVS19NRU1aRVJPKHAsbikgRFVLX01FTVNFVCgocCksIDAsIChuKSkKKyNl bmRpZgorCisjaWYgIWRlZmluZWQoRFVLX0RPVUJMRV9JTkZJTklUWSkKKyN1bmRlZiBEVUtfVVNF X0NPTVBVVEVEX0lORklOSVRZCisjaWYgZGVmaW5lZChEVUtfRl9HQ0NfVkVSU0lPTikgJiYgKERV S19GX0dDQ19WRVJTSU9OIDwgNDA2MDApCisvKiBHQ0Mgb2xkZXIgdGhhbiA0LjY6IGF2b2lkIG92 ZXJmbG93IHdhcm5pbmdzIHJlbGF0ZWQgdG8gdXNpbmcgSU5GSU5JVFkgKi8KKyNkZWZpbmUgRFVL X0RPVUJMRV9JTkZJTklUWSAgKF9fYnVpbHRpbl9pbmYoKSkKKyNlbGlmIGRlZmluZWQoSU5GSU5J VFkpCisjZGVmaW5lIERVS19ET1VCTEVfSU5GSU5JVFkgICgoZG91YmxlKSBJTkZJTklUWSkKKyNl bGlmICFkZWZpbmVkKERVS19GX1ZCQ0MpICYmICFkZWZpbmVkKERVS19GX01TVkMpICYmICFkZWZp bmVkKERVS19GX0JDQykgJiYgXAorICAgICAgIWRlZmluZWQoRFVLX0ZfT0xEX1NPTEFSSVMpICYm ICFkZWZpbmVkKERVS19GX0FJWCkKKyNkZWZpbmUgRFVLX0RPVUJMRV9JTkZJTklUWSAgKDEuMCAv IDAuMCkKKyNlbHNlCisvKiBJbiBWQkNDICgxLjAgLyAwLjApIHJlc3VsdHMgaW4gYSB3YXJuaW5n IGFuZCAwLjAgaW5zdGVhZCBvZiBpbmZpbml0eS4KKyAqIFVzZSBhIGNvbXB1dGVkIGluZmluaXR5 IChpbml0aWFsaXplZCB3aGVuIGEgaGVhcCBpcyBjcmVhdGVkIGF0IHRoZQorICogbGF0ZXN0KS4K KyAqLworI2RlZmluZSBEVUtfVVNFX0NPTVBVVEVEX0lORklOSVRZCisjZGVmaW5lIERVS19ET1VC TEVfSU5GSU5JVFkgIGR1a19jb21wdXRlZF9pbmZpbml0eQorI2VuZGlmCisjZW5kaWYKKworI2lm ICFkZWZpbmVkKERVS19ET1VCTEVfTkFOKQorI3VuZGVmIERVS19VU0VfQ09NUFVURURfTkFOCisj aWYgZGVmaW5lZChOQU4pCisjZGVmaW5lIERVS19ET1VCTEVfTkFOICAgICAgIE5BTgorI2VsaWYg IWRlZmluZWQoRFVLX0ZfVkJDQykgJiYgIWRlZmluZWQoRFVLX0ZfTVNWQykgJiYgIWRlZmluZWQo RFVLX0ZfQkNDKSAmJiBcCisgICAgICAhZGVmaW5lZChEVUtfRl9PTERfU09MQVJJUykgJiYgIWRl ZmluZWQoRFVLX0ZfQUlYKQorI2RlZmluZSBEVUtfRE9VQkxFX05BTiAgICAgICAoMC4wIC8gMC4w KQorI2Vsc2UKKy8qIEluIFZCQ0MgKDAuMCAvIDAuMCkgcmVzdWx0cyBpbiBhIHdhcm5pbmcgYW5k IDAuMCBpbnN0ZWFkIG9mIE5hTi4KKyAqIEluIE1TVkMgKFZTMjAxMCBFeHByZXNzKSAoMC4wIC8g MC4wKSByZXN1bHRzIGluIGEgY29tcGlsZSBlcnJvci4KKyAqIFVzZSBhIGNvbXB1dGVkIE5hTiAo aW5pdGlhbGl6ZWQgd2hlbiBhIGhlYXAgaXMgY3JlYXRlZCBhdCB0aGUKKyAqIGxhdGVzdCkuCisg Ki8KKyNkZWZpbmUgRFVLX1VTRV9DT01QVVRFRF9OQU4KKyNkZWZpbmUgRFVLX0RPVUJMRV9OQU4g ICAgICAgZHVrX2NvbXB1dGVkX25hbgorI2VuZGlmCisjZW5kaWYKKworLyogTWFueSBwbGF0Zm9y bXMgYXJlIG1pc3NpbmcgZnBjbGFzc2lmeSgpIGFuZCBmcmllbmRzLCBzbyB1c2UgcmVwbGFjZW1l bnRzCisgKiBpZiBuZWNlc3NhcnkuICBUaGUgcmVwbGFjZW1lbnQgY29uc3RhbnRzIChGUF9OQU4g ZXRjKSBjYW4gYmUgYW55dGhpbmcgYnV0CisgKiBtYXRjaCBMaW51eCBjb25zdGFudHMgbm93Lgor ICovCisjdW5kZWYgRFVLX1VTRV9SRVBMX0ZQQ0xBU1NJRlkKKyN1bmRlZiBEVUtfVVNFX1JFUExf U0lHTkJJVAorI3VuZGVmIERVS19VU0VfUkVQTF9JU0ZJTklURQorI3VuZGVmIERVS19VU0VfUkVQ TF9JU05BTgorI3VuZGVmIERVS19VU0VfUkVQTF9JU0lORgorCisvKiBDb21wbGV4IGNvbmRpdGlv biBicm9rZW4gaW50byBzZXBhcmF0ZSBwYXJ0cy4gKi8KKyN1bmRlZiBEVUtfRl9VU0VfUkVQTF9B TEwKKyNpZiAhKGRlZmluZWQoRlBfTkFOKSAmJiBkZWZpbmVkKEZQX0lORklOSVRFKSAmJiBkZWZp bmVkKEZQX1pFUk8pICYmIFwKKyAgICAgIGRlZmluZWQoRlBfU1VCTk9STUFMKSAmJiBkZWZpbmVk KEZQX05PUk1BTCkpCisvKiBNaXNzaW5nIHNvbWUgb2J2aW91cyBjb25zdGFudHMuICovCisjZGVm aW5lIERVS19GX1VTRV9SRVBMX0FMTAorI2VsaWYgZGVmaW5lZChEVUtfRl9BTUlHQU9TKSAmJiBk ZWZpbmVkKERVS19GX1ZCQ0MpCisvKiBWQkNDIGlzIG1pc3NpbmcgdGhlIGJ1aWx0LWlucyBldmVu IGluIEM5OSBtb2RlIChwZXJoYXBzIGEgaGVhZGVyIGlzc3VlKS4gKi8KKyNkZWZpbmUgRFVLX0Zf VVNFX1JFUExfQUxMCisjZWxpZiBkZWZpbmVkKERVS19GX0FNSUdBT1MpICYmIGRlZmluZWQoRFVL X0ZfTTY4SykKKy8qIEFtaWdhT1MgKyBNNjhLIHNlZW1zIHRvIGhhdmUgbWF0aCBpc3N1ZXMgZXZl biB3aGVuIHVzaW5nIEdDQyBjcm9zcworICogY29tcGlsYXRpb24uICBVc2UgcmVwbGFjZW1lbnRz IGZvciBhbGwgQW1pZ2FPUyB2ZXJzaW9ucyBvbiBNNjhLCisgKiByZWdhcmRsZXNzIG9mIGNvbXBp bGVyLgorICovCisjZGVmaW5lIERVS19GX1VTRV9SRVBMX0FMTAorI2VsaWYgZGVmaW5lZChEVUtf Rl9GUkVFQlNEKSAmJiBkZWZpbmVkKERVS19GX0NMQU5HKQorLyogUGxhY2Vob2xkZXIgZml4IGZv ciAoZGV0ZWN0aW9uIGlzIHdpZGVyIHRoYW4gbmVjZXNzYXJ5KToKKyAqIGh0dHA6Ly9sbHZtLm9y Zy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNzc4OAorICovCisjZGVmaW5lIERVS19GX1VTRV9SRVBM X0FMTAorI2VsaWYgZGVmaW5lZChEVUtfRl9VQ0xJQkMpCisvKiBBdCBsZWFzdCBzb21lIHVjbGli YyB2ZXJzaW9ucyBoYXZlIGJyb2tlbiBmbG9hdGluZyBwb2ludCBtYXRoLiAgRm9yCisgKiBleGFt cGxlLCBmcGNsYXNzaWZ5KCkgY2FuIGluY29ycmVjdGx5IGNsYXNzaWZ5IGNlcnRhaW4gTmFOIGZv cm1hdHMuCisgKiBUbyBiZSBzYWZlLCB1c2UgcmVwbGFjZW1lbnRzLgorICovCisjZGVmaW5lIERV S19GX1VTRV9SRVBMX0FMTAorI2VsaWYgZGVmaW5lZChEVUtfRl9BSVgpCisvKiBPbGRlciB2ZXJz aW9ucyBtYXkgYmUgbWlzc2luZyBpc25hbigpLCBldGMuICovCisjZGVmaW5lIERVS19GX1VTRV9S RVBMX0FMTAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19GX1VTRV9SRVBMX0FMTCkKKyNkZWZp bmUgRFVLX1VTRV9SRVBMX0ZQQ0xBU1NJRlkKKyNkZWZpbmUgRFVLX1VTRV9SRVBMX1NJR05CSVQK KyNkZWZpbmUgRFVLX1VTRV9SRVBMX0lTRklOSVRFCisjZGVmaW5lIERVS19VU0VfUkVQTF9JU05B TgorI2RlZmluZSBEVUtfVVNFX1JFUExfSVNJTkYKKyNkZWZpbmUgRFVLX0ZQQ0xBU1NJRlkgICAg ICAgZHVrX3JlcGxfZnBjbGFzc2lmeQorI2RlZmluZSBEVUtfU0lHTkJJVCAgICAgICAgICBkdWtf cmVwbF9zaWduYml0CisjZGVmaW5lIERVS19JU0ZJTklURSAgICAgICAgIGR1a19yZXBsX2lzZmlu aXRlCisjZGVmaW5lIERVS19JU05BTiAgICAgICAgICAgIGR1a19yZXBsX2lzbmFuCisjZGVmaW5l IERVS19JU0lORiAgICAgICAgICAgIGR1a19yZXBsX2lzaW5mCisjZGVmaW5lIERVS19GUF9OQU4g ICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX0ZQX0lORklOSVRFICAgICAgMQorI2RlZmluZSBEVUtf RlBfWkVSTyAgICAgICAgICAyCisjZGVmaW5lIERVS19GUF9TVUJOT1JNQUwgICAgIDMKKyNkZWZp bmUgRFVLX0ZQX05PUk1BTCAgICAgICAgNAorI2Vsc2UKKyNkZWZpbmUgRFVLX0ZQQ0xBU1NJRlkg ICAgICAgZnBjbGFzc2lmeQorI2RlZmluZSBEVUtfU0lHTkJJVCAgICAgICAgICBzaWduYml0Cisj ZGVmaW5lIERVS19JU0ZJTklURSAgICAgICAgIGlzZmluaXRlCisjZGVmaW5lIERVS19JU05BTiAg ICAgICAgICAgIGlzbmFuCisjZGVmaW5lIERVS19JU0lORiAgICAgICAgICAgIGlzaW5mCisjZGVm aW5lIERVS19GUF9OQU4gICAgICAgICAgIEZQX05BTgorI2RlZmluZSBEVUtfRlBfSU5GSU5JVEUg ICAgICBGUF9JTkZJTklURQorI2RlZmluZSBEVUtfRlBfWkVSTyAgICAgICAgICBGUF9aRVJPCisj ZGVmaW5lIERVS19GUF9TVUJOT1JNQUwgICAgIEZQX1NVQk5PUk1BTAorI2RlZmluZSBEVUtfRlBf Tk9STUFMICAgICAgICBGUF9OT1JNQUwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChEVUtfRl9VU0Vf UkVQTF9BTEwpCisjdW5kZWYgRFVLX0ZfVVNFX1JFUExfQUxMCisjZW5kaWYKKworLyogVGhlc2Ug ZnVuY3Rpb25zIGRvbid0IGN1cnJlbnRseSBuZWVkIHJlcGxhY2VtZW50IGJ1dCBhcmUgd3JhcHBl ZCBmb3IKKyAqIGNvbXBsZXRlbmVzcy4gIEJlY2F1c2UgdGhlc2UgYXJlIHVzZWQgYXMgZnVuY3Rp b24gcG9pbnRlcnMsIHRoZXkgbmVlZAorICogdG8gYmUgZGVmaW5lZCBhcyBjb25jcmV0ZSBDIGZ1 bmN0aW9ucyAobm90IG1hY3JvcykuCisgKi8KKyNpZiAhZGVmaW5lZChEVUtfRkFCUykKKyNkZWZp bmUgRFVLX0ZBQlMgICAgICAgICAgICAgZmFicworI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0ZM T09SKQorI2RlZmluZSBEVUtfRkxPT1IgICAgICAgICAgICBmbG9vcgorI2VuZGlmCisjaWYgIWRl ZmluZWQoRFVLX0NFSUwpCisjZGVmaW5lIERVS19DRUlMICAgICAgICAgICAgIGNlaWwKKyNlbmRp ZgorI2lmICFkZWZpbmVkKERVS19GTU9EKQorI2RlZmluZSBEVUtfRk1PRCAgICAgICAgICAgICBm bW9kCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfUE9XKQorI2RlZmluZSBEVUtfUE9XICAgICAg ICAgICAgICBwb3cKKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19BQ09TKQorI2RlZmluZSBEVUtf QUNPUyAgICAgICAgICAgICBhY29zCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfQVNJTikKKyNk ZWZpbmUgRFVLX0FTSU4gICAgICAgICAgICAgYXNpbgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVL X0FUQU4pCisjZGVmaW5lIERVS19BVEFOICAgICAgICAgICAgIGF0YW4KKyNlbmRpZgorI2lmICFk ZWZpbmVkKERVS19BVEFOMikKKyNkZWZpbmUgRFVLX0FUQU4yICAgICAgICAgICAgYXRhbjIKKyNl bmRpZgorI2lmICFkZWZpbmVkKERVS19TSU4pCisjZGVmaW5lIERVS19TSU4gICAgICAgICAgICAg IHNpbgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0NPUykKKyNkZWZpbmUgRFVLX0NPUyAgICAg ICAgICAgICAgY29zCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfVEFOKQorI2RlZmluZSBEVUtf VEFOICAgICAgICAgICAgICB0YW4KKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19FWFApCisjZGVm aW5lIERVS19FWFAgICAgICAgICAgICAgIGV4cAorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0xP RykKKyNkZWZpbmUgRFVLX0xPRyAgICAgICAgICAgICAgbG9nCisjZW5kaWYKKyNpZiAhZGVmaW5l ZChEVUtfU1FSVCkKKyNkZWZpbmUgRFVLX1NRUlQgICAgICAgICAgICAgc3FydAorI2VuZGlmCisK Ky8qIFRoZSBmdW5jdGlvbnMgYmVsb3cgZXhpc3Qgb25seSBpbiBDOTkvQysrMTEgb3IgbGF0ZXIg YW5kIG5lZWQgYSB3b3JrYXJvdW5kCisgKiBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaW5jbHVk ZSB0aGVtLiAgTVNWQyBpc24ndCBkZXRlY3RlZCBhcyBDOTksIGJ1dAorICogdGhlc2UgZnVuY3Rp b25zIGFsc28gZXhpc3QgaW4gTVNWQyAyMDEzIGFuZCBsYXRlciBzbyBpbmNsdWRlIGEgY2xhdXNl IGZvcgorICogdGhhdCB0b28uICBBbmRyb2lkIGRvZXNuJ3QgaGF2ZSBsb2cyOyBkaXNhYmxlIGFs bCBvZiB0aGVzZSBmb3IgQW5kcm9pZC4KKyAqLworI2lmIChkZWZpbmVkKERVS19GX0M5OSkgfHwg ZGVmaW5lZChEVUtfRl9DUFAxMSkgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+ PSAxODAwKSkpICYmIFwKKyAgICAhZGVmaW5lZChEVUtfRl9BTkRST0lEKSAmJiAhZGVmaW5lZChE VUtfRl9NSU5UKQorI2lmICFkZWZpbmVkKERVS19DQlJUKQorI2RlZmluZSBEVUtfQ0JSVCAgICAg ICAgICAgICBjYnJ0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfTE9HMikKKyNkZWZpbmUgRFVL X0xPRzIgICAgICAgICAgICAgbG9nMgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0xPRzEwKQor I2RlZmluZSBEVUtfTE9HMTAgICAgICAgICAgICBsb2cxMAorI2VuZGlmCisjaWYgIWRlZmluZWQo RFVLX1RSVU5DKQorI2RlZmluZSBEVUtfVFJVTkMgICAgICAgICAgICB0cnVuYworI2VuZGlmCisj ZW5kaWYgIC8qIERVS19GX0M5OSBldGMgKi8KKworLyogTmV0QlNEIDYuMCB4ODYgKGF0IGxlYXN0 KSBoYXMgYSBmZXcgcHJvYmxlbXMgd2l0aCBwb3coKSBzZW1hbnRpY3MsCisgKiBzZWUgdGVzdC1i dWctbmV0YnNkLW1hdGgtcG93LmpzLiAgTWluR1cgaGFzIHNpbWlsYXIgKGJ1dCBkaWZmZXJlbnQp CisgKiBpc3N1ZXMsIHNlZSB0ZXN0LWJ1Zy1taW5ndy1tYXRoLWlzc3Vlcy5qcy4gIEVuYWJsZSBw b3coKSB3b3JrYXJvdW5kcworICogZm9yIHRoZXNlIHRhcmdldHMuCisgKi8KKyN1bmRlZiBEVUtf VVNFX1BPV19XT1JLQVJPVU5EUworI2lmIGRlZmluZWQoRFVLX0ZfTkVUQlNEKSB8fCBkZWZpbmVk KERVS19GX01JTkdXKQorI2RlZmluZSBEVUtfVVNFX1BPV19XT1JLQVJPVU5EUworI2VuZGlmCisK Ky8qIFNpbWlsYXIgd29ya2Fyb3VuZHMgZm9yIGF0YW4yKCkgc2VtYW50aWNzIGlzc3Vlcy4gIE1p bkdXIGlzc3VlcyBhcmUKKyAqIGRvY3VtZW50ZWQgaW4gdGVzdC1idWctbWluZ3ctbWF0aC1pc3N1 ZXMuanMuCisgKi8KKyN1bmRlZiBEVUtfVVNFX0FUQU4yX1dPUktBUk9VTkRTCisjaWYgZGVmaW5l ZChEVUtfRl9NSU5HVykKKyNkZWZpbmUgRFVLX1VTRV9BVEFOMl9XT1JLQVJPVU5EUworI2VuZGlm CisKKy8qIFJlbHkgYXMgbGl0dGxlIGFzIHBvc3NpYmxlIG9uIGNvbXBpbGVyIGJlaGF2aW9yIGZv ciBOYU4gY29tcGFyaXNvbiwKKyAqIHNpZ25lZCB6ZXJvIGhhbmRsaW5nLCBldGMuICBDdXJyZW50 bHkgbmV2ZXIgYWN0aXZhdGVkIGJ1dCBtYXkgYmUgbmVlZGVkCisgKiBmb3IgYnJva2VuIGNvbXBp bGVycy4KKyAqLworI3VuZGVmIERVS19VU0VfUEFSQU5PSURfTUFUSAorCisvKiBUaGVyZSB3YXMg YSBjdXJpb3VzIGJ1ZyB3aGVyZSB0ZXN0LWJpLWRhdGUtY2FuY2VsaW5nLmpzIHdvdWxkIGZhaWwg ZS5nLgorICogb24gNjQtYml0IFVidW50dSwgZ2NjLTQuOC4xLCAtbTMyLCBhbmQgbm8gLXN0ZD1j OTkuICBTb21lIGRhdGUgY29tcHV0YXRpb25zCisgKiB1c2luZyBkb3VibGVzIHdvdWxkIGJlIG9w dGltaXplZCB3aGljaCB0aGVuIGJyb2tlIHNvbWUgY29ybmVyIGNhc2UgdGVzdHMuCisgKiBUaGUg cHJvYmxlbSBnb2VzIGF3YXkgYnkgYWRkaW5nICd2b2xhdGlsZScgdG8gdGhlIGRhdGV0aW1lIGNv bXB1dGF0aW9ucy4KKyAqIE5vdCBzdXJlIHdoYXQgdGhlIGFjdHVhbCB0cmlnZ2VyaW5nIGNvbmRp dGlvbnMgYXJlLCBidXQgdXNpbmcgdGhpcyBvbgorICogbm9uLUM5OSBzeXN0ZW1zIHNvbHZlcyB0 aGUga25vd24gaXNzdWVzIGFuZCBoYXMgcmVsYXRpdmVseSBsaXR0bGUgY29zdAorICogb24gb3Ro ZXIgcGxhdGZvcm1zLgorICovCisjdW5kZWYgRFVLX1VTRV9QQVJBTk9JRF9EQVRFX0NPTVBVVEFU SU9OCisjaWYgIWRlZmluZWQoRFVLX0ZfQzk5KQorI2RlZmluZSBEVUtfVVNFX1BBUkFOT0lEX0RB VEVfQ09NUFVUQVRJT04KKyNlbmRpZgorCisvKgorICogIEJ5dGUgb3JkZXIgYW5kIGRvdWJsZSBt ZW1vcnkgbGF5b3V0IGRldGVjdGlvbgorICoKKyAqICBFbmRpYW5uZXNzIGRldGVjdGlvbiBpcyBh IG1ham9yIHBvcnRhYmlsaXR5IGhhc3NsZSBiZWNhdXNlIHRoZSBtYWNyb3MKKyAqICBhbmQgaGVh ZGVycyBhcmUgbm90IHN0YW5kYXJkaXplZC4gIFRoZXJlJ3MgZXZlbiB2YXJpYW5jZSBhY3Jvc3Mg VU5JWAorICogIHBsYXRmb3Jtcy4gIEV2ZW4gd2l0aCAic3RhbmRhcmQiIGhlYWRlcnMsIGRldGFp bHMgbGlrZSB1bmRlcnNjb3JlIGNvdW50CisgKiAgdmFyaWVzIGJldHdlZW4gcGxhdGZvcm1zLCBl LmcuIGJvdGggX19CWVRFX09SREVSIGFuZCBfQllURV9PUkRFUiBhcmUgdXNlZAorICogIChDcm9z c2JyaWRnZSBoYXMgYSBzaW5nbGUgdW5kZXJzY29yZSwgZm9yIGluc3RhbmNlKS4KKyAqCisgKiAg VGhlIGNoZWNrcyBiZWxvdyBhcmUgc3RydWN0dXJlZCB3aXRoIHRoaXMgaW4gbWluZDogc2V2ZXJh bCBhcHByb2FjaGVzIGFyZQorICogIHVzZWQsIGFuZCBhdCB0aGUgZW5kIHdlIGNoZWNrIGlmIGFu eSBvZiB0aGVtIHdvcmtlZC4gIFRoaXMgYWxsb3dzIGdlbmVyaWMKKyAqICBhcHByb2FjaGVzIHRv IGJlIHRyaWVkIGZpcnN0LCBhbmQgcGxhdGZvcm0vY29tcGlsZXIgc3BlY2lmaWMgaGFja3MgdHJp ZWQKKyAqICBsYXN0LiAgQXMgYSBsYXN0IHJlc29ydCwgdGhlIHVzZXIgY2FuIGZvcmNlIGEgc3Bl Y2lmaWMgZW5kaWFubmVzcywgYXMgaXQncworICogIG5vdCBsaWtlbHkgdGhhdCBhdXRvbWF0aWMg ZGV0ZWN0aW9uIHdpbGwgd29yayBvbiB0aGUgbW9zdCBleG90aWMgcGxhdGZvcm1zLgorICoKKyAq ICBEdWt0YXBlIHN1cHBvcnRzIGxpdHRsZSBhbmQgYmlnIGVuZGlhbiBtYWNoaW5lcy4gIFRoZXJl J3MgYWxzbyBzdXBwb3J0CisgKiAgZm9yIGEgaHlicmlkIHVzZWQgYnkgc29tZSBBUk0gbWFjaGlu ZXMgd2hlcmUgaW50ZWdlcnMgYXJlIGxpdHRsZSBlbmRpYW4KKyAqICBidXQgSUVFRSBkb3VibGUg dmFsdWVzIHVzZSBhIG1peGVkIG9yZGVyICgxMjM0NTY3OCAtPiA0MzIxODc2NSkuICBUaGlzCisg KiAgYnl0ZSBvcmRlciBmb3IgZG91YmxlcyBpcyByZWZlcnJlZCB0byBhcyAibWl4ZWQgZW5kaWFu Ii4KKyAqLworCisvKiBHQ0MgYW5kIENsYW5nIHByb3ZpZGUgZW5kaWFubmVzcyBkZWZpbmVzIGFz IGJ1aWx0LWluIHByZWRlZmluZXMsIHdpdGgKKyAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGRvdWJs ZSB1bmRlcnNjb3JlcyAoZS5nLiBfX0JZVEVfT1JERVJfXykuICBTZWUKKyAqIG91dHB1dCBvZiAi bWFrZSBnY2NwcmVkZWZzIiBhbmQgIm1ha2UgY2xhbmdwcmVkZWZzIi4gIENsYW5nIGRvZXNuJ3QK KyAqIHNlZW0gdG8gcHJvdmlkZSBfX0ZMT0FUX1dPUkRfT1JERVJfXzsgYXNzdW1lIG5vdCBtaXhl ZCBlbmRpYW4gZm9yIGNsYW5nLgorICogaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvY3Bw L0NvbW1vbi1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sCisgKi8KKyNpZiAhZGVmaW5lZChEVUtfVVNF X0JZVEVPUkRFUikgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykKKyNpZiBkZWZpbmVkKF9fT1JE RVJfTElUVExFX0VORElBTl9fKSAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVf RU5ESUFOX18pCisjaWYgZGVmaW5lZChfX0ZMT0FUX1dPUkRfT1JERVJfXykgJiYgZGVmaW5lZChf X09SREVSX0xJVFRMRV9FTkRJQU5fXykgJiYgKF9fRkxPQVRfV09SRF9PUkRFUl9fID09IF9fT1JE RVJfTElUVExFX0VORElBTl9fKQorI2RlZmluZSBEVUtfVVNFX0JZVEVPUkRFUiAxCisjZWxpZiBk ZWZpbmVkKF9fRkxPQVRfV09SRF9PUkRFUl9fKSAmJiBkZWZpbmVkKF9fT1JERVJfQklHX0VORElB Tl9fKSAmJiAoX19GTE9BVF9XT1JEX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18pCisj ZGVmaW5lIERVS19VU0VfQllURU9SREVSIDIKKyNlbGlmICFkZWZpbmVkKF9fRkxPQVRfV09SRF9P UkRFUl9fKQorLyogRmxvYXQgd29yZCBvcmRlciBub3Qga25vd24sIGFzc3VtZSBub3QgYSBoeWJy aWQuICovCisjZGVmaW5lIERVS19VU0VfQllURU9SREVSIDEKKyNlbHNlCisvKiBCeXRlIG9yZGVy IGlzIGxpdHRsZSBlbmRpYW4gYnV0IGNhbm5vdCBkZXRlcm1pbmUgSUVFRSBkb3VibGUgd29yZCBv cmRlci4gKi8KKyNlbmRpZiAgLyogZmxvYXQgd29yZCBvcmRlciAqLworI2VsaWYgZGVmaW5lZChf X09SREVSX0JJR19FTkRJQU5fXykgJiYgKF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfQklHX0VO RElBTl9fKQorI2lmIGRlZmluZWQoX19GTE9BVF9XT1JEX09SREVSX18pICYmIGRlZmluZWQoX19P UkRFUl9CSUdfRU5ESUFOX18pICYmIChfX0ZMT0FUX1dPUkRfT1JERVJfXyA9PSBfX09SREVSX0JJ R19FTkRJQU5fXykKKyNkZWZpbmUgRFVLX1VTRV9CWVRFT1JERVIgMworI2VsaWYgIWRlZmluZWQo X19GTE9BVF9XT1JEX09SREVSX18pCisvKiBGbG9hdCB3b3JkIG9yZGVyIG5vdCBrbm93biwgYXNz dW1lIG5vdCBhIGh5YnJpZC4gKi8KKyNkZWZpbmUgRFVLX1VTRV9CWVRFT1JERVIgMworI2Vsc2UK Ky8qIEJ5dGUgb3JkZXIgaXMgYmlnIGVuZGlhbiBidXQgY2Fubm90IGRldGVybWluZSBJRUVFIGRv dWJsZSB3b3JkIG9yZGVyLiAqLworI2VuZGlmICAvKiBmbG9hdCB3b3JkIG9yZGVyICovCisjZWxz ZQorLyogQ2Fubm90IGRldGVybWluZSBieXRlIG9yZGVyOyBfX09SREVSX1BEUF9FTkRJQU5fXyBp cyByZWxhdGVkIHRvIDMyLWJpdAorICogaW50ZWdlciBvcmRlcmluZyBhbmQgaXMgbm90IHJlbGV2 YW50LgorICovCisjZW5kaWYgIC8qIGludGVnZXIgYnl0ZSBvcmRlciAqLworI2VuZGlmICAvKiAh ZGVmaW5lZChEVUtfVVNFX0JZVEVPUkRFUikgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgKi8K KworLyogTW9yZSBvciBsZXNzIHN0YW5kYXJkIGVuZGlhbm5lc3MgcHJlZGVmaW5lcyBwcm92aWRl ZCBieSBoZWFkZXIgZmlsZXMuCisgKiBUaGUgQVJNIGh5YnJpZCBjYXNlIGlzIGRldGVjdGVkIGJ5 IGFzc3VtaW5nIHRoYXQgX19GTE9BVF9XT1JEX09SREVSCisgKiB3aWxsIGJlIGJpZyBlbmRpYW4s IHNlZTogaHR0cDovL2xpc3RzLm15c3FsLmNvbS9pbnRlcm5hbHMvNDQzLgorICogT24gc29tZSBw bGF0Zm9ybXMgc29tZSBkZWZpbmVzIG1heSBiZSBwcmVzZW50IHdpdGggYW4gZW1wdHkgdmFsdWUg d2hpY2gKKyAqIGNhdXNlcyBjb21wYXJpc29ucyB0byBmYWlsOiBodHRwczovL2dpdGh1Yi5jb20v c3ZhYXJhbGEvZHVrdGFwZS9pc3N1ZXMvNDUzLgorICovCisjaWYgIWRlZmluZWQoRFVLX1VTRV9C WVRFT1JERVIpCisjaWYgZGVmaW5lZChfX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX19MSVRUTEVf RU5ESUFOKSAmJiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikgfHwgXAorICAgIGRl ZmluZWQoX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pICYmIChfQllURV9P UkRFUiA9PSBfTElUVExFX0VORElBTikgfHwgXAorICAgIGRlZmluZWQoX19MSVRUTEVfRU5ESUFO X18pCisjaWYgZGVmaW5lZChfX0ZMT0FUX1dPUkRfT1JERVIpICYmIGRlZmluZWQoX19MSVRUTEVf RU5ESUFOKSAmJiAoX19GTE9BVF9XT1JEX09SREVSID09IF9fTElUVExFX0VORElBTikgfHwgXAor ICAgIGRlZmluZWQoX0ZMT0FUX1dPUkRfT1JERVIpICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4p ICYmIChfRkxPQVRfV09SRF9PUkRFUiA9PSBfTElUVExFX0VORElBTikKKyNkZWZpbmUgRFVLX1VT RV9CWVRFT1JERVIgMQorI2VsaWYgZGVmaW5lZChfX0ZMT0FUX1dPUkRfT1JERVIpICYmIGRlZmlu ZWQoX19CSUdfRU5ESUFOKSAmJiAoX19GTE9BVF9XT1JEX09SREVSID09IF9fQklHX0VORElBTikg fHwgXAorICAgICAgZGVmaW5lZChfRkxPQVRfV09SRF9PUkRFUikgJiYgZGVmaW5lZChfQklHX0VO RElBTikgJiYgKF9GTE9BVF9XT1JEX09SREVSID09IF9CSUdfRU5ESUFOKQorI2RlZmluZSBEVUtf VVNFX0JZVEVPUkRFUiAyCisjZWxpZiAhZGVmaW5lZChfX0ZMT0FUX1dPUkRfT1JERVIpICYmICFk ZWZpbmVkKF9GTE9BVF9XT1JEX09SREVSKQorLyogRmxvYXQgd29yZCBvcmRlciBub3Qga25vd24s IGFzc3VtZSBub3QgYSBoeWJyaWQuICovCisjZGVmaW5lIERVS19VU0VfQllURU9SREVSIDEKKyNl bHNlCisvKiBCeXRlIG9yZGVyIGlzIGxpdHRsZSBlbmRpYW4gYnV0IGNhbm5vdCBkZXRlcm1pbmUg SUVFRSBkb3VibGUgd29yZCBvcmRlci4gKi8KKyNlbmRpZiAgLyogZmxvYXQgd29yZCBvcmRlciAq LworI2VsaWYgZGVmaW5lZChfX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX19CSUdfRU5ESUFOKSAm JiAoX19CWVRFX09SREVSID09IF9fQklHX0VORElBTikgfHwgXAorICAgICAgZGVmaW5lZChfQllU RV9PUkRFUikgJiYgZGVmaW5lZChfQklHX0VORElBTikgJiYgKF9CWVRFX09SREVSID09IF9CSUdf RU5ESUFOKSB8fCBcCisgICAgICBkZWZpbmVkKF9fQklHX0VORElBTl9fKQorI2lmIGRlZmluZWQo X19GTE9BVF9XT1JEX09SREVSKSAmJiBkZWZpbmVkKF9fQklHX0VORElBTikgJiYgKF9fRkxPQVRf V09SRF9PUkRFUiA9PSBfX0JJR19FTkRJQU4pIHx8IFwKKyAgICBkZWZpbmVkKF9GTE9BVF9XT1JE X09SREVSKSAmJiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiAoX0ZMT0FUX1dPUkRfT1JERVIgPT0g X0JJR19FTkRJQU4pCisjZGVmaW5lIERVS19VU0VfQllURU9SREVSIDMKKyNlbGlmICFkZWZpbmVk KF9fRkxPQVRfV09SRF9PUkRFUikgJiYgIWRlZmluZWQoX0ZMT0FUX1dPUkRfT1JERVIpCisvKiBG bG9hdCB3b3JkIG9yZGVyIG5vdCBrbm93biwgYXNzdW1lIG5vdCBhIGh5YnJpZC4gKi8KKyNkZWZp bmUgRFVLX1VTRV9CWVRFT1JERVIgMworI2Vsc2UKKy8qIEJ5dGUgb3JkZXIgaXMgYmlnIGVuZGlh biBidXQgY2Fubm90IGRldGVybWluZSBJRUVFIGRvdWJsZSB3b3JkIG9yZGVyLiAqLworI2VuZGlm ICAvKiBmbG9hdCB3b3JkIG9yZGVyICovCisjZWxzZQorLyogQ2Fubm90IGRldGVybWluZSBieXRl IG9yZGVyLiAqLworI2VuZGlmICAvKiBpbnRlZ2VyIGJ5dGUgb3JkZXIgKi8KKyNlbmRpZiAgLyog IWRlZmluZWQoRFVLX1VTRV9CWVRFT1JERVIpICovCisKKy8qIFFOWCBnY2MgY3Jvc3MgY29tcGls ZXIgc2VlbXMgdG8gZGVmaW5lIGUuZy4gX19MSVRUTEVFTkRJQU5fXyBvciBfX0JJR0VORElBTl9f OgorICogICQgL29wdC9xbng2NTAvaG9zdC9saW51eC94ODYvdXNyL2Jpbi9pNDg2LXBjLW50by1x bng2LjUuMC1nY2MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgLW5pIGVuZGlhbgorICogIDY3 OiNkZWZpbmUgX19MSVRUTEVFTkRJQU5fXyAxCisgKiAgJCAvb3B0L3FueDY1MC9ob3N0L2xpbnV4 L3g4Ni91c3IvYmluL21pcHMtdW5rbm93bi1udG8tcW54Ni41LjAtZ2NjIC1kTSAtRSAtIDwvZGV2 L251bGwgfCBncmVwIC1uaSBlbmRpYW4KKyAqICA4MTojZGVmaW5lIF9fQklHRU5ESUFOX18gMQor ICogICQgL29wdC9xbng2NTAvaG9zdC9saW51eC94ODYvdXNyL2Jpbi9hcm0tdW5rbm93bi1udG8t cW54Ni41LjAtZ2NjIC1kTSAtRSAtIDwvZGV2L251bGwgfCBncmVwIC1uaSBlbmRpYW4KKyAqICA3 MDojZGVmaW5lIF9fTElUVExFRU5ESUFOX18gMQorICovCisjaWYgIWRlZmluZWQoRFVLX1VTRV9C WVRFT1JERVIpCisjaWYgZGVmaW5lZChfX0xJVFRMRUVORElBTl9fKQorI2RlZmluZSBEVUtfVVNF X0JZVEVPUkRFUiAxCisjZWxpZiBkZWZpbmVkKF9fQklHRU5ESUFOX18pCisjZGVmaW5lIERVS19V U0VfQllURU9SREVSIDMKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiAgQWxpZ25tZW50IHJlcXVp cmVtZW50IGFuZCBzdXBwb3J0IGZvciB1bmFsaWduZWQgYWNjZXNzZXMKKyAqCisgKiAgQXNzdW1l IHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmUgbm90IHN1cHBvcnRlZCB1bmxlc3Mgc3BlY2lmaWNhbGx5 IGFsbG93ZWQKKyAqICBpbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiAgU29tZSBwbGF0Zm9ybXMgbWF5 IHN1cHBvcnQgdW5hbGlnbmVkIGFjY2Vzc2VzCisgKiAgYnV0IGFsaWdubWVudCB0byA0IG9yIDgg bWF5IHN0aWxsIGJlIGRlc2lyYWJsZS4gIE5vdGUgdGhhdCB1bmFsaWduZWQKKyAqICBhY2Nlc3Nl cyAoYW5kIGV2ZW4gcG9pbnRlcnMpIHJlbGF0aXZlIHRvIG5hdHVyYWwgYWxpZ25tZW50IChyZWdh cmRsZXNzCisgKiAgb2YgdGFyZ2V0IGFsaWdubWVudCkgYXJlIHRlY2huaWNhbGx5IHVuZGVmaW5l ZCBiZWhhdmlvciBhbmQgdGh1cworICogIGNvbXBpbGVyL2FyY2hpdGVjdHVyZSBzcGVjaWZpYy4K KyAqLworCisvKiBJZiBub3QgZm9yY2VkLCB1c2Ugc2FmZSBkZWZhdWx0IGZvciBhbGlnbm1lbnQu ICovCisjaWYgIWRlZmluZWQoRFVLX1VTRV9BTElHTl9CWSkKKyNkZWZpbmUgRFVLX1VTRV9BTElH Tl9CWSA4CisjZW5kaWYKKworLyogQ29tcGlsZXIgc3BlY2lmaWMgaGFja2VyeSBuZWVkZWQgdG8g Zm9yY2Ugc3RydWN0IHNpemUgdG8gbWF0Y2ggYWxpZ21lbnQsCisgKiBzZWUgZS5nLiBkdWtfaGJ1 ZmZlci5oLgorICoKKyAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTExMzAx MDkvYy1zdHJ1Y3Qtc2l6ZS1hbGlnbm1lbnQKKyAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9x dWVzdGlvbnMvMTA5NTEwMzkvc3BlY2lmeWluZy02NC1iaXQtYWxpZ25tZW50CisgKi8KKyNpZiAh KGRlZmluZWQoRFVLX1VTRV9QQUNLX01TVkNfUFJBR01BKSB8fCBkZWZpbmVkKERVS19VU0VfUEFD S19HQ0NfQVRUUikgfHwgXAorICAgICAgZGVmaW5lZChEVUtfVVNFX1BBQ0tfQ0xBTkdfQVRUUikg fHwgZGVmaW5lZChEVUtfVVNFX1BBQ0tfRFVNTVlfTUVNQkVSKSkKKyNkZWZpbmUgRFVLX1VTRV9Q QUNLX0RVTU1ZX01FTUJFUgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChEVUtfVkFfQ09QWSkKKy8q IFdlIG5lZWQgdmFfY29weSgpIHdoaWNoIGlzIGRlZmluZWQgaW4gQzk5IC8gQysrMTEsIHNvIGFu IGF3a3dhcmQKKyAqIHJlcGxhY2VtZW50IGlzIG5lZWRlZCBmb3IgcHJlLUM5OSAvIHByZS1DKysx MSBlbnZpcm9ubWVudHMuICBUaGlzCisgKiB3aWxsIHF1aXRlIGxpa2VseSBuZWVkIHBvcnRhYmls aXR5IGhhY2tzIGZvciBzb21lIG5vbi1DOTkKKyAqIGVudmlyb25tZW50cy4KKyAqLworI2lmIGRl ZmluZWQoRFVLX0ZfQzk5KSB8fCBkZWZpbmVkKERVS19GX0NQUDExKQorLyogQzk5IC8gQysrMTEg YW5kIGFib3ZlOiByZWx5IG9uIHZhX2NvcHkoKSB3aGljaCBpcyByZXF1aXJlZC4KKyAqIE9taXQg cGFyZW50aGVzaXMgb24gbWFjcm8gcmlnaHQgc2lkZSBvbiBwdXJwb3NlIHRvIG1pbmltaXplIGRp ZmZlcmVuY2VzCisgKiB0byBkaXJlY3QgdXNlLgorICovCisjZGVmaW5lIERVS19WQV9DT1BZKGRl c3Qsc3JjKSB2YV9jb3B5KGRlc3Qsc3JjKQorI2Vsc2UKKy8qIFByZS1DOTk6IHZhX2xpc3QgdHlw ZSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBUaGlzIHJlcGxhY2VtZW50CisgKiBhc3N1 bWVzIGl0IGlzIGEgcGxhaW4gdmFsdWUgc28gdGhhdCBhIHNpbXBsZSBhc3NpZ25tZW50IHdpbGwg d29yay4KKyAqIFRoaXMgaXMgbm90IHRoZSBjYXNlIG9uIGFsbCBwbGF0Zm9ybXMgKGl0IG1heSBi ZSBhIHNpbmdsZS1hcnJheSBlbGVtZW50LAorICogZm9yIGluc3RhbmNlKS4KKyAqLworI2RlZmlu ZSBEVUtfVkFfQ09QWShkZXN0LHNyYykgZG8geyAoZGVzdCkgPSAoc3JjKTsgfSB3aGlsZSAoMCkK KyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChEVUtfTUFDUk9fU1RSSU5HSUZZKQorLyog TWFjcm8gaGFja2VyeSB0byBjb252ZXJ0IGUuZy4gX19MSU5FX18gdG8gYSBzdHJpbmcgd2l0aG91 dCBmb3JtYXR0aW5nLAorICogc2VlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25z LzI0MDM1My9jb252ZXJ0LWEtcHJlcHJvY2Vzc29yLXRva2VuLXRvLWEtc3RyaW5nCisgKi8KKyNk ZWZpbmUgRFVLX01BQ1JPX1NUUklOR0lGWV9IRUxQRVIoeCkgICN4CisjZGVmaW5lIERVS19NQUNS T19TVFJJTkdJRlkoeCkgIERVS19NQUNST19TVFJJTkdJRllfSEVMUEVSKHgpCisjZW5kaWYKKwor I2lmICFkZWZpbmVkKERVS19DQVVTRV9TRUdGQVVMVCkKKy8qIFRoaXMgY2FuIGJlIHVzZWQgZm9y IHRlc3Rpbmc7IHZhbGdyaW5kIHdpbGwgdGhlbiBpbmRpY2F0ZSB0aGUgQyBjYWxsIHN0YWNrCisg KiBsZWFkaW5nIHRvIHRoZSBjYWxsIHNpdGUuCisgKi8KKyNkZWZpbmUgRFVLX0NBVVNFX1NFR0ZB VUxUKCkgIGRvIHsgKigodm9sYXRpbGUgZHVrX3VpbnQzMl90ICopIE5VTEwpID0gKGR1a191aW50 MzJfdCkgMHhkZWFkYmVlZlVMOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChE VUtfVU5SRUYpCisvKiBNYWNybyBmb3Igc3VwcHJlc3Npbmcgd2FybmluZ3MgZm9yIHBvdGVudGlh bGx5IHVucmVmZXJlbmNlZCB2YXJpYWJsZXMuCisgKiBUaGUgdmFyaWFibGVzIGNhbiBiZSBhY3R1 YWxseSB1bnJlZmVyZW5jZWQgb3IgdW5yZWZlcmVuY2VkIGluIHNvbWUKKyAqIHNwZWNpZmljIGNh c2VzIG9ubHk7IGZvciBpbnN0YW5jZSwgaWYgYSB2YXJpYWJsZSBpcyBvbmx5IGRlYnVnIHByaW50 ZWQsCisgKiBpdCBpcyB1bnJlZmVyZW5jZWQgd2hlbiBkZWJ1ZyBwcmludGluZyBpcyBkaXNhYmxl ZC4gIE1heSBjYXVzZSB3YXJuaW5ncworICogZm9yIHZvbGF0aWxlIGFyZ3VtZW50cy4KKyAqLwor I2RlZmluZSBEVUtfVU5SRUYoeCkgIGRvIHsgKHZvaWQpICh4KTsgfSB3aGlsZSAoMCkKKyNlbmRp ZgorCisvKiBGaWxsaW4gZm9yIERVS19OT1JFVFVSTjsgRFVLX1dPX05PUkVUVVJOKCkgaXMgdXNl ZCB0byBpbnNlcnQgZHVtbXkKKyAqIGR1bW15IHN0YXRlbWVudHMgYWZ0ZXIgbm9yZXR1cm4gY2Fs bHMgdG8gc2lsZW5jZSBoYXJtbGVzcyBjb21waWxlcgorICogd2FybmluZ3MsIGUuZy46CisgKgor ICogICBEVUtfRVJST1JfVFlQRSh0aHIsICJhaWVlIik7CisgKiAgIERVS19XT19OT1JFVFVSTihy ZXR1cm4gMDspOworICoKKyAqIFN0YXRlbWVudHMgaW5zaWRlIERVS19XT19OT1JFVFVSTigpIG11 c3QgTkVWRVIgYmUgYWN0dWFsbHkgcmVhY2hhYmxlLAorICogYW5kIHRoZXkncmUgb25seSBpbmNs dWRlZCB0byBzYXRpc2Z5IHRoZSBjb21waWxlci4KKyAqLworI2lmIGRlZmluZWQoRFVLX05PUkVU VVJOKQorI2RlZmluZSBEVUtfV09fTk9SRVRVUk4oc3RtdCkgZG8geyB9IHdoaWxlICgwKQorI2Vs c2UKKyNkZWZpbmUgRFVLX05PUkVUVVJOKGRlY2wpICBkZWNsCisjZGVmaW5lIERVS19XT19OT1JF VFVSTihzdG10KSBkbyB7IHN0bXQgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo RFVLX1VOUkVBQ0hBQkxFKQorLyogRG9uJ3Qga25vdyBob3cgdG8gZGVjbGFyZSB1bnJlYWNoYWJs ZSBwb2ludCwgc28gZG9uJ3QgZG8gaXQ7IHRoaXMKKyAqIG1heSBjYXVzZSBzb21lIHNwdXJpb3Vz IGNvbXBpbGF0aW9uIHdhcm5pbmdzIChlLmcuICJ2YXJpYWJsZSB1c2VkCisgKiB1bmluaXRpYWxp emVkIikuCisgKi8KKyNkZWZpbmUgRFVLX1VOUkVBQ0hBQkxFKCkgIGRvIHsgfSB3aGlsZSAoMCkK KyNlbmRpZgorCisjaWYgIWRlZmluZWQoRFVLX0xPU0VfQ09OU1QpCisvKiBDb252ZXJ0IGFueSBp bnB1dCBwb2ludGVyIGludG8gYSAidm9pZCAqIiwgbG9zaW5nIGEgY29uc3QgcXVhbGlmaWVyLgor ICogVGhpcyBpcyBub3QgZnVsbHkgcG9ydGFibGUgYmVjYXVzZSBjYXN0aW5nIHRocm91Z2ggZHVr X3VpbnRwdHJfdCBtYXkKKyAqIG5vdCB3b3JrIG9uIGFsbCBhcmNoaXRlY3R1cmVzIChlLmcuIHRo b3NlIHdpdGggbG9uZywgc2VnbWVudGVkIHBvaW50ZXJzKS4KKyAqLworI2RlZmluZSBEVUtfTE9T RV9DT05TVChzcmMpICgodm9pZCAqKSAoZHVrX3VpbnRwdHJfdCkgKHNyYykpCisjZW5kaWYKKwor I2lmICFkZWZpbmVkKERVS19MSUtFTFkpCisjZGVmaW5lIERVS19MSUtFTFkoeCkgICAgKHgpCisj ZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfVU5MSUtFTFkpCisjZGVmaW5lIERVS19VTkxJS0VMWSh4 KSAgKHgpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfVU5QUkVESUNUQUJMRSkKKyNkZWZpbmUg RFVLX1VOUFJFRElDVEFCTEUoeCkgICh4KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChEVUtfTk9J TkxJTkUpCisjZGVmaW5lIERVS19OT0lOTElORSAgICAgICAvKm5vcCovCisjZW5kaWYKKyNpZiAh ZGVmaW5lZChEVUtfSU5MSU5FKQorI2RlZmluZSBEVUtfSU5MSU5FICAgICAgICAgLypub3AqLwor I2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0FMV0FZU19JTkxJTkUpCisjZGVmaW5lIERVS19BTFdB WVNfSU5MSU5FICAvKm5vcCovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKERVS19IT1QpCisjZGVm aW5lIERVS19IT1QgICAgICAgICAgICAvKm5vcCovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtf Q09MRCkKKyNkZWZpbmUgRFVLX0NPTEQgICAgICAgICAgIC8qbm9wKi8KKyNlbmRpZgorCisjaWYg IWRlZmluZWQoRFVLX0VYVEVSTkFMX0RFQ0wpCisjZGVmaW5lIERVS19FWFRFUk5BTF9ERUNMICBl eHRlcm4KKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19FWFRFUk5BTCkKKyNkZWZpbmUgRFVLX0VY VEVSTkFMICAgICAgIC8qZW1wdHkqLworI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0lOVEVSTkFM X0RFQ0wpCisjaWYgZGVmaW5lZChEVUtfU0lOR0xFX0ZJTEUpCisjZGVmaW5lIERVS19JTlRFUk5B TF9ERUNMICBzdGF0aWMKKyNlbHNlCisjZGVmaW5lIERVS19JTlRFUk5BTF9ERUNMICBleHRlcm4K KyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoRFVLX0lOVEVSTkFMKQorI2lmIGRlZmluZWQo RFVLX1NJTkdMRV9GSUxFKQorI2RlZmluZSBEVUtfSU5URVJOQUwgICAgICAgc3RhdGljCisjZWxz ZQorI2RlZmluZSBEVUtfSU5URVJOQUwgICAgICAgLyplbXB0eSovCisjZW5kaWYKKyNlbmRpZgor I2lmICFkZWZpbmVkKERVS19MT0NBTF9ERUNMKQorI2RlZmluZSBEVUtfTE9DQUxfREVDTCAgICAg c3RhdGljCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfTE9DQUwpCisjZGVmaW5lIERVS19MT0NB TCAgICAgICAgICBzdGF0aWMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRFVLX0ZJTEVfTUFDUk8p CisjZGVmaW5lIERVS19GSUxFX01BQ1JPICBfX0ZJTEVfXworI2VuZGlmCisjaWYgIWRlZmluZWQo RFVLX0xJTkVfTUFDUk8pCisjZGVmaW5lIERVS19MSU5FX01BQ1JPICBfX0xJTkVfXworI2VuZGlm CisjaWYgIWRlZmluZWQoRFVLX0ZVTkNfTUFDUk8pCisjaWYgZGVmaW5lZChEVUtfRl9DOTkpIHx8 IGRlZmluZWQoRFVLX0ZfQ1BQMTEpCisjZGVmaW5lIERVS19GVU5DX01BQ1JPICBfX2Z1bmNfXwor I2VsaWYgZGVmaW5lZChfX0ZVTkNUSU9OX18pCisjZGVmaW5lIERVS19GVU5DX01BQ1JPICBfX0ZV TkNUSU9OX18KKyNlbHNlCisjZGVmaW5lIERVS19GVU5DX01BQ1JPICAidW5rbm93biIKKyNlbmRp ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChEVUtfQlNXQVAzMikKKyNkZWZpbmUgRFVLX0JTV0FQ MzIoeCkgXAorCSgoKChkdWtfdWludDMyX3QpICh4KSkgPj4gMjQpIHwgXAorCSAoKCgoZHVrX3Vp bnQzMl90KSAoeCkpID4+IDgpICYgMHhmZjAwVUwpIHwgXAorCSAoKCgoZHVrX3VpbnQzMl90KSAo eCkpIDw8IDgpICYgMHhmZjAwMDBVTCkgfCBcCisJICgoKGR1a191aW50MzJfdCkgKHgpKSA8PCAy NCkpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChEVUtfQlNXQVAxNikKKyNkZWZpbmUgRFVLX0JTV0FQ MTYoeCkgXAorCSgoZHVrX3VpbnQxNl90KSAoeCkgPj4gOCkgfCBcCisJKChkdWtfdWludDE2X3Qp ICh4KSA8PCA4KQorI2VuZGlmCisKKy8qIERVS19VU0VfVkFSSUFESUNfTUFDUk9TOiByZXF1aXJl ZCBmcm9tIGNvbXBpbGVycywgc28gbm8gZmlsbC1pbi4gKi8KKy8qIERVS19VU0VfVU5JT05fSU5J VElBTElaRVJTOiByZXF1aXJlZCBmcm9tIGNvbXBpbGVycywgc28gbm8gZmlsbC1pbi4gKi8KKwor I2lmICEoZGVmaW5lZChEVUtfVVNFX0ZMRVhfQzk5KSB8fCBkZWZpbmVkKERVS19VU0VfRkxFWF9a RVJPU0laRSkgfHwgZGVmaW5lZChEVUtfVVNFX0ZMRVhfT05FU0laRSkpCisjaWYgZGVmaW5lZChE VUtfRl9DOTkpCisjZGVmaW5lIERVS19VU0VfRkxFWF9DOTkKKyNlbHNlCisjZGVmaW5lIERVS19V U0VfRkxFWF9aRVJPU0laRSAgLyogTm90IHN0YW5kYXJkIGJ1dCBjb21tb24gZW5vdWdoICovCisj ZW5kaWYKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKERVS19VU0VfUEFDS19HQ0NfQVRUUikgfHwg ZGVmaW5lZChEVUtfVVNFX1BBQ0tfQ0xBTkdfQVRUUikgfHwgXAorICAgICAgZGVmaW5lZChEVUtf VVNFX1BBQ0tfTVNWQ19QUkFHTUEpIHx8IGRlZmluZWQoRFVLX1VTRV9QQUNLX0RVTU1ZX01FTUJF UikpCisjZGVmaW5lIERVS19VU0VfUEFDS19EVU1NWV9NRU1CRVIKKyNlbmRpZgorCisjaWYgMCAg Lyogbm90IGRlZmluZWQgYnkgZGVmYXVsdCAqLworI3VuZGVmIERVS19VU0VfR0NDX1BSQUdNQVMK KyNlbmRpZgorCisjaWYgIWRlZmluZWQoRFVLX1U2NF9DT05TVEFOVCkKKyNkZWZpbmUgRFVLX1U2 NF9DT05TVEFOVCh4KSB4IyNVTEwKKyNlbmRpZgorI2lmICFkZWZpbmVkKERVS19JNjRfQ09OU1RB TlQpCisjZGVmaW5lIERVS19JNjRfQ09OU1RBTlQoeCkgeCMjTEwKKyNlbmRpZgorCisvKiBXb3Jr YXJvdW5kIGZvciBHSC0zMjM6IGF2b2lkIGlubGluaW5nIGNvbnRyb2wgd2hlbiBjb21waWxpbmcg ZnJvbQorICogbXVsdGlwbGUgc291cmNlcywgYXMgaXQgY2F1c2VzIGNvbXBpbGVyIHBvcnRhYmls aXR5IHRyb3VibGUuCisgKi8KKyNpZiAhZGVmaW5lZChEVUtfU0lOR0xFX0ZJTEUpCisjdW5kZWYg RFVLX05PSU5MSU5FCisjdW5kZWYgRFVLX0lOTElORQorI3VuZGVmIERVS19BTFdBWVNfSU5MSU5F CisjZGVmaW5lIERVS19OT0lOTElORSAgICAgICAvKm5vcCovCisjZGVmaW5lIERVS19JTkxJTkUg ICAgICAgICAvKm5vcCovCisjZGVmaW5lIERVS19BTFdBWVNfSU5MSU5FICAvKm5vcCovCisjZW5k aWYKKworLyoKKyAqICBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIHBhY2tlZCBkdWtfdHZhbCByZXBy ZXNlbnRhdGlvbiBpcyBwb3NzaWJsZS4KKyAqICBXaGF0J3MgYmFzaWNhbGx5IHJlcXVpcmVkIGlz IHRoYXQgcG9pbnRlcnMgYXJlIDMyLWJpdCB2YWx1ZXMKKyAqICAoc2l6ZW9mKHZvaWQgKikgPT0g NCkuICBCZXN0IGVmZm9ydCBjaGVjaywgbm90IGFsd2F5cyBhY2N1cmF0ZS4KKyAqICBJZiBndWVz cyBnb2VzIHdyb25nLCBjcmFzaGVzIG1heSByZXN1bHQ7IHNlbGYgdGVzdHMgYWxzbyB2ZXJpZnkK KyAqICB0aGUgZ3Vlc3MuCisgKi8KKworLyogRXhwbGljaXQgbWFya2VyIG5lZWRlZDsgbWF5IGJl ICdkZWZpbmVkJywgJ3VuZGVmaW5lZCwgJ29yICdub3QgcHJvdmlkZWQnLiAqLworI2lmICFkZWZp bmVkKERVS19GX1BBQ0tFRF9UVkFMX1BST1ZJREVEKQorI3VuZGVmIERVS19GX1BBQ0tFRF9UVkFM X1BPU1NJQkxFCisKKy8qIFN0cmljdCBDOTkgY2FzZTogRFVLX1VJTlRQVFJfTUFYICg9IFVJTlRQ VFJfTUFYKSBzaG91bGQgYmUgdmVyeSByZWxpYWJsZSAqLworI2lmICFkZWZpbmVkKERVS19GX1BB Q0tFRF9UVkFMX1BPU1NJQkxFKSAmJiBkZWZpbmVkKERVS19VSU5UUFRSX01BWCkKKyNpZiAoRFVL X1VJTlRQVFJfTUFYIDw9IDB4ZmZmZmZmZmZVTCkKKyNkZWZpbmUgRFVLX0ZfUEFDS0VEX1RWQUxf UE9TU0lCTEUKKyNlbmRpZgorI2VuZGlmCisKKy8qIE5vbi1DOTkgY2FzZSwgc3RpbGwgcmVseWlu ZyBvbiBEVUtfVUlOVFBUUl9NQVgsIGFzIGxvbmcgYXMgaXQgaXMgbm90IGEgY29tcHV0ZWQgdmFs dWUgKi8KKyNpZiAhZGVmaW5lZChEVUtfRl9QQUNLRURfVFZBTF9QT1NTSUJMRSkgJiYgZGVmaW5l ZChEVUtfVUlOVFBUUl9NQVgpICYmICFkZWZpbmVkKERVS19VSU5UUFRSX01BWF9DT01QVVRFRCkK KyNpZiAoRFVLX1VJTlRQVFJfTUFYIDw9IDB4ZmZmZmZmZmZVTCkKKyNkZWZpbmUgRFVLX0ZfUEFD S0VEX1RWQUxfUE9TU0lCTEUKKyNlbmRpZgorI2VuZGlmCisKKy8qIERVS19TSVpFX01BWCAoPSBT SVpFX01BWCkgaXMgb2Z0ZW4gcmVsaWFibGUgKi8KKyNpZiAhZGVmaW5lZChEVUtfRl9QQUNLRURf VFZBTF9QT1NTSUJMRSkgJiYgZGVmaW5lZChEVUtfU0laRV9NQVgpICYmICFkZWZpbmVkKERVS19T SVpFX01BWF9DT01QVVRFRCkKKyNpZiAoRFVLX1NJWkVfTUFYIDw9IDB4ZmZmZmZmZmZVTCkKKyNk ZWZpbmUgRFVLX0ZfUEFDS0VEX1RWQUxfUE9TU0lCTEUKKyNlbmRpZgorI2VuZGlmCisKKyN1bmRl ZiBEVUtfVVNFX1BBQ0tFRF9UVkFMCisjaWYgZGVmaW5lZChEVUtfRl9QQUNLRURfVFZBTF9QT1NT SUJMRSkKKyNkZWZpbmUgRFVLX1VTRV9QQUNLRURfVFZBTAorI2VuZGlmCisjdW5kZWYgRFVLX0Zf UEFDS0VEX1RWQUxfUE9TU0lCTEUKKworI2VuZGlmICAvKiBEVUtfRl9QQUNLRURfVFZBTF9QUk9W SURFRCAqLworLyogT2JqZWN0IHByb3BlcnR5IGFsbG9jYXRpb24gbGF5b3V0IGhhcyBpbXBsaWNh dGlvbnMgZm9yIG1lbW9yeSBhbmQgY29kZQorICogZm9vdHByaW50IGFuZCBnZW5lcmF0ZWQgY29k ZSBzaXplL3NwZWVkLiAgVGhlIGJlc3QgbGF5b3V0IGFsc28gZGVwZW5kcworICogb24gd2hldGhl ciB0aGUgcGxhdGZvcm0gaGFzIGFsaWdubWVudCByZXF1aXJlbWVudHMgb3IgYmVuZWZpdHMgZnJv bQorICogaGF2aW5nIG1vc3RseSBhbGlnbmVkIGFjY2Vzc2VzLgorICovCisjdW5kZWYgRFVLX1VT RV9IT0JKRUNUX0xBWU9VVF8xCisjdW5kZWYgRFVLX1VTRV9IT0JKRUNUX0xBWU9VVF8yCisjdW5k ZWYgRFVLX1VTRV9IT0JKRUNUX0xBWU9VVF8zCisjaWYgKERVS19VU0VfQUxJR05fQlkgPT0gMSkK Ky8qIE9uIHBsYXRmb3JtcyB3aXRob3V0IGFueSBhbGlnbm1lbnQgaXNzdWVzLCBsYXlvdXQgMSBp cyBwcmVmZXJhYmxlCisgKiBiZWNhdXNlIGl0IGNvbXBpbGVzIHRvIHNsaWdodGx5IGxlc3MgY29k ZSBhbmQgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcworICogdG8gcHJvcGVydHkga2V5cy4KKyAqLwor I2RlZmluZSBEVUtfVVNFX0hPQkpFQ1RfTEFZT1VUXzEKKyNlbHNlCisvKiBPbiBvdGhlciBwbGF0 Zm9ybXMgdXNlIGxheW91dCAyLCB3aGljaCByZXF1aXJlcyBzb21lIHBhZGRpbmcgYnV0CisgKiBp cyBhIGJpdCBtb3JlIG5hdHVyYWwgdGhhbiBsYXlvdXQgMyBpbiBvcmRlcmluZyB0aGUgZW50cmll cy4gIExheW91dAorICogMyBpcyBjdXJyZW50bHkgbm90IHVzZWQuCisgKi8KKyNkZWZpbmUgRFVL X1VTRV9IT0JKRUNUX0xBWU9VVF8yCisjZW5kaWYKKworLyogR0NDL2NsYW5nIGluYWNjdXJhdGUg bWF0aCB3b3VsZCBicmVhayBjb21wbGlhbmNlIGFuZCBwcm9iYWJseSBkdWtfdHZhbCwKKyAqIHNv IHJlZnVzZSB0byBjb21waWxlLiAgUmVsYXggdGhpcyBpZiAtZmZhc3QtbWF0aCBpcyB0ZXN0ZWQg dG8gd29yay4KKyAqLworI2lmIGRlZmluZWQoX19GQVNUX01BVEhfXykKKyNlcnJvciBfX0ZBU1Rf TUFUSF9fIGRlZmluZWQsIHJlZnVzaW5nIHRvIGNvbXBpbGUKKyNlbmRpZgorCisvKgorICogIEF1 dG9nZW5lcmF0ZWQgZGVmYXVsdHMKKyAqLworCisjdW5kZWYgRFVLX1VTRV9BTExPV19VTkRFRklO RURfQkVIQVZJT1IKKyNkZWZpbmUgRFVLX1VTRV9BUlJBWV9CVUlMVElOCisjZGVmaW5lIERVS19V U0VfQVJSQVlfRkFTVFBBVEgKKyNkZWZpbmUgRFVLX1VTRV9BUlJBWV9QUk9QX0ZBU1RQQVRICisj dW5kZWYgRFVLX1VTRV9BU1NFUlRJT05TCisjZGVmaW5lIERVS19VU0VfQVVHTUVOVF9FUlJPUl9D UkVBVEUKKyNkZWZpbmUgRFVLX1VTRV9BVUdNRU5UX0VSUk9SX1RIUk9XCisjZGVmaW5lIERVS19V U0VfQVZPSURfUExBVEZPUk1fRlVOQ1BUUlMKKyNkZWZpbmUgRFVLX1VTRV9CQVNFNjRfRkFTVFBB VEgKKyNkZWZpbmUgRFVLX1VTRV9CQVNFNjRfU1VQUE9SVAorI2RlZmluZSBEVUtfVVNFX0JPT0xF QU5fQlVJTFRJTgorI2RlZmluZSBEVUtfVVNFX0JVRkZFUk9CSkVDVF9TVVBQT1JUCisjdW5kZWYg RFVLX1VTRV9CVUZMRU4xNgorI2RlZmluZSBEVUtfVVNFX0JZVEVDT0RFX0RVTVBfU1VQUE9SVAor I2RlZmluZSBEVUtfVVNFX0NBQ0hFX0FDVElWQVRJT04KKyNkZWZpbmUgRFVLX1VTRV9DQUNIRV9D QVRDSEVSCisjZGVmaW5lIERVS19VU0VfQ0FMTFNUQUNLX0xJTUlUIDEwMDAwCisjZGVmaW5lIERV S19VU0VfQ09NTU9OSlNfTU9EVUxFUworI2RlZmluZSBEVUtfVVNFX0NPTVBJTEVSX1JFQ0xJTUlU IDI1MDAKKyNkZWZpbmUgRFVLX1VTRV9DT1JPVVRJTkVfU1VQUE9SVAorI3VuZGVmIERVS19VU0Vf Q1BQX0VYQ0VQVElPTlMKKyN1bmRlZiBEVUtfVVNFX0RBVEFQVFIxNgorI3VuZGVmIERVS19VU0Vf REFUQVBUUl9ERUMxNgorI3VuZGVmIERVS19VU0VfREFUQVBUUl9FTkMxNgorI2RlZmluZSBEVUtf VVNFX0RBVEVfQlVJTFRJTgorI3VuZGVmIERVS19VU0VfREFURV9GT1JNQVRfU1RSSU5HCisjdW5k ZWYgRFVLX1VTRV9EQVRFX0dFVF9MT0NBTF9UWk9GRlNFVAorI3VuZGVmIERVS19VU0VfREFURV9H RVRfTk9XCisjdW5kZWYgRFVLX1VTRV9EQVRFX1BBUlNFX1NUUklORworI3VuZGVmIERVS19VU0Vf REFURV9QUlNfR0VUREFURQorI3VuZGVmIERVS19VU0VfREVCVUcKKyN1bmRlZiBEVUtfVVNFX0RF QlVHR0VSX0RVTVBIRUFQCisjdW5kZWYgRFVLX1VTRV9ERUJVR0dFUl9JTlNQRUNUCisjdW5kZWYg RFVLX1VTRV9ERUJVR0dFUl9QQVVTRV9VTkNBVUdIVAorI3VuZGVmIERVS19VU0VfREVCVUdHRVJf U1VQUE9SVAorI2RlZmluZSBEVUtfVVNFX0RFQlVHR0VSX1RIUk9XX05PVElGWQorI3VuZGVmIERV S19VU0VfREVCVUdHRVJfVFJBTlNQT1JUX1RPUlRVUkUKKyNkZWZpbmUgRFVLX1VTRV9ERUJVR19C VUZTSVpFIDY1NTM2TAorI2RlZmluZSBEVUtfVVNFX0RFQlVHX0xFVkVMIDAKKyN1bmRlZiBEVUtf VVNFX0RFQlVHX1dSSVRFCisjZGVmaW5lIERVS19VU0VfRE9VQkxFX0xJTktFRF9IRUFQCisjZGVm aW5lIERVS19VU0VfRFVLVEFQRV9CVUlMVElOCisjZGVmaW5lIERVS19VU0VfRU5DT0RJTkdfQlVJ TFRJTlMKKyNkZWZpbmUgRFVLX1VTRV9FUlJDUkVBVEUKKyNkZWZpbmUgRFVLX1VTRV9FUlJUSFJP VworI2RlZmluZSBEVUtfVVNFX0VTNgorI2RlZmluZSBEVUtfVVNFX0VTNl9PQkpFQ1RfUFJPVE9f UFJPUEVSVFkKKyNkZWZpbmUgRFVLX1VTRV9FUzZfT0JKRUNUX1NFVFBST1RPVFlQRU9GCisjZGVm aW5lIERVS19VU0VfRVM2X1BST1hZCisjZGVmaW5lIERVS19VU0VfRVM2X1JFR0VYUF9TWU5UQVgK KyNkZWZpbmUgRFVLX1VTRV9FUzZfVU5JQ09ERV9FU0NBUEUKKyNkZWZpbmUgRFVLX1VTRV9FUzcK KyNkZWZpbmUgRFVLX1VTRV9FUzdfRVhQX09QRVJBVE9SCisjZGVmaW5lIERVS19VU0VfRVM4Cisj ZGVmaW5lIERVS19VU0VfRVM5CisjZGVmaW5lIERVS19VU0VfRVNCQ19MSU1JVFMKKyNkZWZpbmUg RFVLX1VTRV9FU0JDX01BWF9CWVRFUyAyMTQ3NDE4MTEyTAorI2RlZmluZSBEVUtfVVNFX0VTQkNf TUFYX0xJTkVOVU1CRVIgMjE0NzQxODExMkwKKyN1bmRlZiBEVUtfVVNFX0VYRUNfRlVOX0xPQ0FM CisjdW5kZWYgRFVLX1VTRV9FWEVDX0lORElSRUNUX0JPVU5EX0NIRUNLCisjdW5kZWYgRFVLX1VT RV9FWEVDX1BSRUZFUl9TSVpFCisjZGVmaW5lIERVS19VU0VfRVhFQ19SRUdDT05TVF9PUFRJTUla RQorI3VuZGVmIERVS19VU0VfRVhFQ19USU1FT1VUX0NIRUNLCisjdW5kZWYgRFVLX1VTRV9FWFBM SUNJVF9OVUxMX0lOSVQKKyN1bmRlZiBEVUtfVVNFX0VYVFNUUl9GUkVFCisjdW5kZWYgRFVLX1VT RV9FWFRTVFJfSU5URVJOX0NIRUNLCisjdW5kZWYgRFVLX1VTRV9GQVNUSU5UCisjZGVmaW5lIERV S19VU0VfRkFTVF9SRUZDT1VOVF9ERUZBVUxUCisjdW5kZWYgRFVLX1VTRV9GQVRBTF9IQU5ETEVS CisjZGVmaW5lIERVS19VU0VfRkFUQUxfTUFYTEVOIDEyOAorI2RlZmluZSBEVUtfVVNFX0ZJTkFM SVpFUl9TVVBQT1JUCisjdW5kZWYgRFVLX1VTRV9GSU5BTElaRVJfVE9SVFVSRQorI3VuZGVmIERV S19VU0VfRlVOQ1BUUjE2CisjdW5kZWYgRFVLX1VTRV9GVU5DUFRSX0RFQzE2CisjdW5kZWYgRFVL X1VTRV9GVU5DUFRSX0VOQzE2CisjZGVmaW5lIERVS19VU0VfRlVOQ1RJT05fQlVJTFRJTgorI2Rl ZmluZSBEVUtfVVNFX0ZVTkNfRklMRU5BTUVfUFJPUEVSVFkKKyNkZWZpbmUgRFVLX1VTRV9GVU5D X05BTUVfUFJPUEVSVFkKKyN1bmRlZiBEVUtfVVNFX0dDX1RPUlRVUkUKKyN1bmRlZiBEVUtfVVNF X0dFVF9NT05PVE9OSUNfVElNRQorI3VuZGVmIERVS19VU0VfR0VUX1JBTkRPTV9ET1VCTEUKKyN1 bmRlZiBEVUtfVVNFX0dMT0JBTF9CSU5ESU5HCisjZGVmaW5lIERVS19VU0VfR0xPQkFMX0JVSUxU SU4KKyN1bmRlZiBEVUtfVVNFX0hFQVBQVFIxNgorI3VuZGVmIERVS19VU0VfSEVBUFBUUl9ERUMx NgorI3VuZGVmIERVS19VU0VfSEVBUFBUUl9FTkMxNgorI2RlZmluZSBEVUtfVVNFX0hFWF9GQVNU UEFUSAorI2RlZmluZSBEVUtfVVNFX0hFWF9TVVBQT1JUCisjZGVmaW5lIERVS19VU0VfSE9CSkVD VF9BUlJBWV9BQkFORE9OX0xJTUlUIDIKKyNkZWZpbmUgRFVLX1VTRV9IT0JKRUNUX0FSUkFZX0ZB U1RfUkVTSVpFX0xJTUlUIDkKKyNkZWZpbmUgRFVLX1VTRV9IT0JKRUNUX0FSUkFZX01JTkdST1df QUREIDE2CisjZGVmaW5lIERVS19VU0VfSE9CSkVDVF9BUlJBWV9NSU5HUk9XX0RJVklTT1IgOAor I2RlZmluZSBEVUtfVVNFX0hPQkpFQ1RfRU5UUllfTUlOR1JPV19BREQgMTYKKyNkZWZpbmUgRFVL X1VTRV9IT0JKRUNUX0VOVFJZX01JTkdST1dfRElWSVNPUiA4CisjZGVmaW5lIERVS19VU0VfSE9C SkVDVF9IQVNIX1BBUlQKKyNkZWZpbmUgRFVLX1VTRV9IT0JKRUNUX0hBU0hfUFJPUF9MSU1JVCA4 CisjZGVmaW5lIERVS19VU0VfSFNUUklOR19BUlJJRFgKKyNkZWZpbmUgRFVLX1VTRV9IU1RSSU5H X0NMRU4KKyN1bmRlZiBEVUtfVVNFX0hTVFJJTkdfRVhUREFUQQorI2RlZmluZSBEVUtfVVNFX0hT VFJJTkdfTEFaWV9DTEVOCisjZGVmaW5lIERVS19VU0VfSFRNTF9DT01NRU5UUworI2RlZmluZSBE VUtfVVNFX0lEQ0hBUl9GQVNUUEFUSAorI3VuZGVmIERVS19VU0VfSU5KRUNUX0hFQVBfQUxMT0Nf RVJST1IKKyN1bmRlZiBEVUtfVVNFX0lOVEVSUlVQVF9DT1VOVEVSCisjdW5kZWYgRFVLX1VTRV9J TlRFUlJVUFRfREVCVUdfRklYVVAKKyNkZWZpbmUgRFVLX1VTRV9KQworI2RlZmluZSBEVUtfVVNF X0pTT05fQlVJTFRJTgorI2RlZmluZSBEVUtfVVNFX0pTT05fREVDTlVNQkVSX0ZBU1RQQVRICisj ZGVmaW5lIERVS19VU0VfSlNPTl9ERUNTVFJJTkdfRkFTVFBBVEgKKyNkZWZpbmUgRFVLX1VTRV9K U09OX0RFQ19SRUNMSU1JVCAxMDAwCisjZGVmaW5lIERVS19VU0VfSlNPTl9FQVRXSElURV9GQVNU UEFUSAorI2RlZmluZSBEVUtfVVNFX0pTT05fRU5DX1JFQ0xJTUlUIDEwMDAKKyNkZWZpbmUgRFVL X1VTRV9KU09OX1FVT1RFU1RSSU5HX0ZBU1RQQVRICisjdW5kZWYgRFVLX1VTRV9KU09OX1NUUklO R0lGWV9GQVNUUEFUSAorI2RlZmluZSBEVUtfVVNFX0pTT05fU1VQUE9SVAorI2RlZmluZSBEVUtf VVNFX0pYCisjZGVmaW5lIERVS19VU0VfTEVYRVJfU0xJRElOR19XSU5ET1cKKyN1bmRlZiBEVUtf VVNFX0xJR0hURlVOQ19CVUlMVElOUworI2RlZmluZSBEVUtfVVNFX0xJVENBQ0hFX1NJWkUgMjU2 CisjZGVmaW5lIERVS19VU0VfTUFSS19BTkRfU1dFRVBfUkVDTElNSVQgMjU2CisjZGVmaW5lIERV S19VU0VfTUFUSF9CVUlMVElOCisjZGVmaW5lIERVS19VU0VfTkFUSVZFX0NBTExfUkVDTElNSVQg MTAwMAorI2RlZmluZSBEVUtfVVNFX05PTlNURF9BUlJBWV9TUExJQ0VfREVMQ09VTlQKKyN1bmRl ZiBEVUtfVVNFX05PTlNURF9GVU5DX0NBTExFUl9QUk9QRVJUWQorI3VuZGVmIERVS19VU0VfTk9O U1REX0ZVTkNfU09VUkNFX1BST1BFUlRZCisjZGVmaW5lIERVS19VU0VfTk9OU1REX0ZVTkNfU1RN VAorI2RlZmluZSBEVUtfVVNFX05PTlNURF9HRVRURVJfS0VZX0FSR1VNRU5UCisjZGVmaW5lIERV S19VU0VfTk9OU1REX0pTT05fRVNDX1UyMDI4X1UyMDI5CisjZGVmaW5lIERVS19VU0VfTk9OU1RE X1NFVFRFUl9LRVlfQVJHVU1FTlQKKyNkZWZpbmUgRFVLX1VTRV9OT05TVERfU1RSSU5HX0ZST01D SEFSQ09ERV8zMkJJVAorI2RlZmluZSBEVUtfVVNFX05VTUJFUl9CVUlMVElOCisjZGVmaW5lIERV S19VU0VfT0JKRUNUX0JVSUxUSU4KKyN1bmRlZiBEVUtfVVNFX09CSlNJWkVTMTYKKyN1bmRlZiBE VUtfVVNFX1BBUkFOT0lEX0VSUk9SUworI2RlZmluZSBEVUtfVVNFX1BDMkxJTkUKKyNkZWZpbmUg RFVLX1VTRV9QRVJGT1JNQU5DRV9CVUlMVElOCisjdW5kZWYgRFVLX1VTRV9QUkVGRVJfU0laRQor I3VuZGVmIERVS19VU0VfUFJPTUlTRV9CVUlMVElOCisjZGVmaW5lIERVS19VU0VfUFJPVklERV9E RUZBVUxUX0FMTE9DX0ZVTkNUSU9OUworI3VuZGVmIERVS19VU0VfUkVGQ09VTlQxNgorI2RlZmlu ZSBEVUtfVVNFX1JFRkNPVU5UMzIKKyNkZWZpbmUgRFVLX1VTRV9SRUZFUkVOQ0VfQ09VTlRJTkcK KyNkZWZpbmUgRFVLX1VTRV9SRUZMRUNUX0JVSUxUSU4KKyNkZWZpbmUgRFVLX1VTRV9SRUdFWFBf Q0FOT05fQklUTUFQCisjdW5kZWYgRFVLX1VTRV9SRUdFWFBfQ0FOT05fV09SS0FST1VORAorI2Rl ZmluZSBEVUtfVVNFX1JFR0VYUF9DT01QSUxFUl9SRUNMSU1JVCAxMDAwMAorI2RlZmluZSBEVUtf VVNFX1JFR0VYUF9FWEVDVVRPUl9SRUNMSU1JVCAxMDAwMAorI2RlZmluZSBEVUtfVVNFX1JFR0VY UF9TVVBQT1JUCisjdW5kZWYgRFVLX1VTRV9ST01fR0xPQkFMX0NMT05FCisjdW5kZWYgRFVLX1VT RV9ST01fR0xPQkFMX0lOSEVSSVQKKyN1bmRlZiBEVUtfVVNFX1JPTV9PQkpFQ1RTCisjZGVmaW5l IERVS19VU0VfUk9NX1BUUkNPTVBfRklSU1QgNjM0ODhMCisjdW5kZWYgRFVLX1VTRV9ST01fU1RS SU5HUworI2RlZmluZSBEVUtfVVNFX1NFQ1RJT05fQgorI3VuZGVmIERVS19VU0VfU0VMRl9URVNU UworI2RlZmluZSBEVUtfVVNFX1NIRUJBTkdfQ09NTUVOVFMKKyN1bmRlZiBEVUtfVVNFX1NIVUZG TEVfVE9SVFVSRQorI2RlZmluZSBEVUtfVVNFX1NPVVJDRV9OT05CTVAKKyN1bmRlZiBEVUtfVVNF X1NUUkhBU0gxNgorI3VuZGVmIERVS19VU0VfU1RSSEFTSF9ERU5TRQorI2RlZmluZSBEVUtfVVNF X1NUUkhBU0hfU0tJUF9TSElGVCA1CisjZGVmaW5lIERVS19VU0VfU1RSSUNUX0RFQ0wKKyN1bmRl ZiBEVUtfVVNFX1NUUklDVF9VVEY4X1NPVVJDRQorI2RlZmluZSBEVUtfVVNFX1NUUklOR19CVUlM VElOCisjdW5kZWYgRFVLX1VTRV9TVFJMRU4xNgorI2RlZmluZSBEVUtfVVNFX1NUUlRBQl9HUk9X X0xJTUlUIDE3CisjZGVmaW5lIERVS19VU0VfU1RSVEFCX01BWFNJWkUgMjY4NDM1NDU2TAorI2Rl ZmluZSBEVUtfVVNFX1NUUlRBQl9NSU5TSVpFIDEwMjQKKyN1bmRlZiBEVUtfVVNFX1NUUlRBQl9Q VFJDT01QCisjZGVmaW5lIERVS19VU0VfU1RSVEFCX1JFU0laRV9DSEVDS19NQVNLIDI1NQorI2Rl ZmluZSBEVUtfVVNFX1NUUlRBQl9TSFJJTktfTElNSVQgNgorI3VuZGVmIERVS19VU0VfU1RSVEFC X1RPUlRVUkUKKyN1bmRlZiBEVUtfVVNFX1NZTUJPTF9CVUlMVElOCisjZGVmaW5lIERVS19VU0Vf VEFJTENBTEwKKyNkZWZpbmUgRFVLX1VTRV9UQVJHRVRfSU5GTyAidW5rbm93biIKKyNkZWZpbmUg RFVLX1VTRV9UUkFDRUJBQ0tTCisjZGVmaW5lIERVS19VU0VfVFJBQ0VCQUNLX0RFUFRIIDEwCisj ZGVmaW5lIERVS19VU0VfVVNFUl9ERUNMQVJFKCkgLyogbm8gdXNlciBkZWNsYXJhdGlvbnMgKi8K KyNkZWZpbmUgRFVLX1VTRV9WQUxTVEFDS19HUk9XX1NISUZUIDIKKyNkZWZpbmUgRFVLX1VTRV9W QUxTVEFDS19MSU1JVCAxMDAwMDAwTAorI2RlZmluZSBEVUtfVVNFX1ZBTFNUQUNLX1NIUklOS19D SEVDS19TSElGVCAyCisjZGVmaW5lIERVS19VU0VfVkFMU1RBQ0tfU0hSSU5LX1NMQUNLX1NISUZU IDQKKyN1bmRlZiBEVUtfVVNFX1ZBTFNUQUNLX1VOU0FGRQorI2RlZmluZSBEVUtfVVNFX1ZFUkJP U0VfRVJST1JTCisjZGVmaW5lIERVS19VU0VfVkVSQk9TRV9FWEVDVVRPUl9FUlJPUlMKKyNkZWZp bmUgRFVLX1VTRV9WT0xVTlRBUllfR0MKKyNkZWZpbmUgRFVLX1VTRV9aRVJPX0JVRkZFUl9EQVRB CisKKy8qCisgKiAgWW91IG1heSBhZGQgb3ZlcnJpZGluZyAjZGVmaW5lLyN1bmRlZiBkaXJlY3Rp dmVzIGJlbG93IGZvcgorICogIGN1c3RvbWl6YXRpb24uICBZb3Ugb2YgY291cnNlIGNhbm5vdCB1 bi0jaW5jbHVkZSBvciB1bi10eXBlZGVmCisgKiAgYW55dGhpbmc7IHRoZXNlIHJlcXVpcmUgZGly ZWN0IGNoYW5nZXMgYWJvdmUuCisgKi8KKworLyogX19PVkVSUklERV9ERUZJTkVTX18gKi8KKwor LyoKKyAqICBDb25kaXRpb25hbCBpbmNsdWRlcworICovCisKKyNpZiBkZWZpbmVkKERVS19GX0NQ UCkgJiYgZGVmaW5lZChEVUtfVVNFX0NQUF9FWENFUFRJT05TKQorI2luY2x1ZGUgPGV4Y2VwdGlv bj4gIC8qIHN0ZDo6ZXhjZXB0aW9uICovCisjaW5jbHVkZSA8c3RkZXhjZXB0PiAgLyogc3RkOjpy dW50aW1lX2Vycm9yICovCisjZW5kaWYKKworLyoKKyAqICBEYXRlIHByb3ZpZGVyIHNlbGVjdGlv bgorICoKKyAqICBVc2VyIG1heSBkZWZpbmUgRFVLX1VTRV9EQVRFX0dFVF9OT1coKSBldGMgZGly ZWN0bHksIGluIHdoaWNoIGNhc2Ugd2UnbGwKKyAqICByZWx5IG9uIGFuIGV4dGVybmFsIHByb3Zp ZGVyLiAgSWYgdGhpcyBpcyBub3QgZG9uZSwgcmV2ZXJ0IHRvIHByZXZpb3VzCisgKiAgYmVoYXZp b3IgYW5kIHVzZSBVbml4L1dpbmRvd3MgYnVpbHQtaW4gcHJvdmlkZXIuCisgKi8KKworI2lmIGRl ZmluZWQoRFVLX0NPTVBJTElOR19EVUtUQVBFKQorCisjaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVf R0VUX05PVykKKy8qIEV4dGVybmFsIHByb3ZpZGVyIGFscmVhZHkgZGVmaW5lZC4gKi8KKyNlbGlm IGRlZmluZWQoRFVLX1VTRV9EQVRFX05PV19HRVRUSU1FT0ZEQVkpCisjZGVmaW5lIERVS19VU0Vf REFURV9HRVRfTk9XKGN0eCkgICAgICAgICAgICBkdWtfYmlfZGF0ZV9nZXRfbm93X2dldHRpbWVv ZmRheSgpCisjZWxpZiBkZWZpbmVkKERVS19VU0VfREFURV9OT1dfVElNRSkKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX0dFVF9OT1coY3R4KSAgICAgICAgICAgIGR1a19iaV9kYXRlX2dldF9ub3dfdGlt ZSgpCisjZWxpZiBkZWZpbmVkKERVS19VU0VfREFURV9OT1dfV0lORE9XUykKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX0dFVF9OT1coY3R4KSAgICAgICAgICAgIGR1a19iaV9kYXRlX2dldF9ub3dfd2lu ZG93cygpCisjZWxpZiBkZWZpbmVkKERVS19VU0VfREFURV9OT1dfV0lORE9XU19TVUJNUykKKyNk ZWZpbmUgRFVLX1VTRV9EQVRFX0dFVF9OT1coY3R4KSAgICAgICAgICAgIGR1a19iaV9kYXRlX2dl dF9ub3dfd2luZG93c19zdWJtcygpCisjZWxzZQorI2Vycm9yIG5vIHByb3ZpZGVyIGZvciBEVUtf VVNFX0RBVEVfR0VUX05PVygpCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFVLX1VTRV9EQVRFX0dF VF9MT0NBTF9UWk9GRlNFVCkKKy8qIEV4dGVybmFsIHByb3ZpZGVyIGFscmVhZHkgZGVmaW5lZC4g Ki8KKyNlbGlmIGRlZmluZWQoRFVLX1VTRV9EQVRFX1RaT19HTVRJTUVfUikgfHwgZGVmaW5lZChE VUtfVVNFX0RBVEVfVFpPX0dNVElNRV9TKSB8fCBkZWZpbmVkKERVS19VU0VfREFURV9UWk9fR01U SU1FKQorI2RlZmluZSBEVUtfVVNFX0RBVEVfR0VUX0xPQ0FMX1RaT0ZGU0VUKGQpICAgZHVrX2Jp X2RhdGVfZ2V0X2xvY2FsX3R6b2Zmc2V0X2dtdGltZSgoZCkpCisjZWxpZiBkZWZpbmVkKERVS19V U0VfREFURV9UWk9fV0lORE9XUykKKyNkZWZpbmUgRFVLX1VTRV9EQVRFX0dFVF9MT0NBTF9UWk9G RlNFVChkKSAgIGR1a19iaV9kYXRlX2dldF9sb2NhbF90em9mZnNldF93aW5kb3dzKChkKSkKKyNl bGlmIGRlZmluZWQoRFVLX1VTRV9EQVRFX1RaT19XSU5ET1dTX05PX0RTVCkKKyNkZWZpbmUgRFVL X1VTRV9EQVRFX0dFVF9MT0NBTF9UWk9GRlNFVChkKSAgIGR1a19iaV9kYXRlX2dldF9sb2NhbF90 em9mZnNldF93aW5kb3dzX25vX2RzdCgoZCkpCisjZWxzZQorI2Vycm9yIG5vIHByb3ZpZGVyIGZv ciBEVUtfVVNFX0RBVEVfR0VUX0xPQ0FMX1RaT0ZGU0VUKCkKKyNlbmRpZgorCisjaWYgZGVmaW5l ZChEVUtfVVNFX0RBVEVfUEFSU0VfU1RSSU5HKQorLyogRXh0ZXJuYWwgcHJvdmlkZXIgYWxyZWFk eSBkZWZpbmVkLiAqLworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfUFJTX1NUUlBUSU1FKQor I2RlZmluZSBEVUtfVVNFX0RBVEVfUEFSU0VfU1RSSU5HKGN0eCxzdHIpICAgZHVrX2JpX2RhdGVf cGFyc2Vfc3RyaW5nX3N0cnB0aW1lKChjdHgpLCAoc3RyKSkKKyNlbGlmIGRlZmluZWQoRFVLX1VT RV9EQVRFX1BSU19HRVREQVRFKQorI2RlZmluZSBEVUtfVVNFX0RBVEVfUEFSU0VfU1RSSU5HKGN0 eCxzdHIpICAgZHVrX2JpX2RhdGVfcGFyc2Vfc3RyaW5nX2dldGRhdGUoKGN0eCksIChzdHIpKQor I2Vsc2UKKy8qIE5vIHByb3ZpZGVyIGZvciBEVUtfVVNFX0RBVEVfUEFSU0VfU1RSSU5HKCksIGZh bGwgYmFjayB0byBJU08gODYwMSBvbmx5LiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERVS19V U0VfREFURV9GT1JNQVRfU1RSSU5HKQorLyogRXh0ZXJuYWwgcHJvdmlkZXIgYWxyZWFkeSBkZWZp bmVkLiAqLworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0RBVEVfRk1UX1NUUkZUSU1FKQorI2RlZmlu ZSBEVUtfVVNFX0RBVEVfRk9STUFUX1NUUklORyhjdHgscGFydHMsdHpvZmZzZXQsZmxhZ3MpIFwK KwlkdWtfYmlfZGF0ZV9mb3JtYXRfcGFydHNfc3RyZnRpbWUoKGN0eCksIChwYXJ0cyksICh0em9m ZnNldCksIChmbGFncykpCisjZWxzZQorLyogTm8gcHJvdmlkZXIgZm9yIERVS19VU0VfREFURV9G T1JNQVRfU1RSSU5HKCksIGZhbGwgYmFjayB0byBJU08gODYwMSBvbmx5LiAqLworI2VuZGlmCisK KyNpZiBkZWZpbmVkKERVS19VU0VfR0VUX01PTk9UT05JQ19USU1FKQorLyogRXh0ZXJuYWwgcHJv dmlkZXIgYWxyZWFkeSBkZWZpbmVkLiAqLworI2VsaWYgZGVmaW5lZChEVUtfVVNFX0dFVF9NT05P VE9OSUNfVElNRV9DTE9DS19HRVRUSU1FKQorI2RlZmluZSBEVUtfVVNFX0dFVF9NT05PVE9OSUNf VElNRShjdHgpICBkdWtfYmlfZGF0ZV9nZXRfbW9ub3RvbmljX3RpbWVfY2xvY2tfZ2V0dGltZSgp CisjZWxpZiBkZWZpbmVkKERVS19VU0VfR0VUX01PTk9UT05JQ19USU1FX1dJTkRPV1NfUVBDKQor I2RlZmluZSBEVUtfVVNFX0dFVF9NT05PVE9OSUNfVElNRShjdHgpICBkdWtfYmlfZGF0ZV9nZXRf bW9ub3RvbmljX3RpbWVfd2luZG93c19xcGMoKQorI2Vsc2UKKy8qIE5vIHByb3ZpZGVyIGZvciBE VUtfVVNFX0dFVF9NT05PVE9OSUNfVElNRSgpLCBmYWxsIGJhY2sgdG8gRFVLX1VTRV9EQVRFX0dF VF9OT1coKS4gKi8KKyNlbmRpZgorCisjZW5kaWYgIC8qIERVS19DT01QSUxJTkdfRFVLVEFQRSAq LworCisvKgorICogIENvbnZlcnQgRFVLX1VTRV9CWVRFT1JERVIsIGZyb20gd2hhdGV2ZXIgc291 cmNlLCBpbnRvIGN1cnJlbnRseSB1c2VkCisgKiAgaW50ZXJuYWwgZGVmaW5lcy4gIElmIGRldGVj dGlvbiBmYWlsZWQsICNlcnJvciBvdXQuCisgKi8KKworI2lmIGRlZmluZWQoRFVLX1VTRV9CWVRF T1JERVIpCisjaWYgKERVS19VU0VfQllURU9SREVSID09IDEpCisjZGVmaW5lIERVS19VU0VfSU5U RUdFUl9MRQorI2RlZmluZSBEVUtfVVNFX0RPVUJMRV9MRQorI2VsaWYgKERVS19VU0VfQllURU9S REVSID09IDIpCisjZGVmaW5lIERVS19VU0VfSU5URUdFUl9MRSAgLyogaW50ZWdlciBlbmRpYW5u ZXNzIGlzIGxpdHRsZSBvbiBwdXJwb3NlICovCisjZGVmaW5lIERVS19VU0VfRE9VQkxFX01FCisj ZWxpZiAoRFVLX1VTRV9CWVRFT1JERVIgPT0gMykKKyNkZWZpbmUgRFVLX1VTRV9JTlRFR0VSX0JF CisjZGVmaW5lIERVS19VU0VfRE9VQkxFX0JFCisjZWxzZQorI2Vycm9yIHVuc3VwcG9ydGVkOiBi eXRlIG9yZGVyIGludmFsaWQKKyNlbmRpZiAgLyogYnl0ZSBvcmRlciAqLworI2Vsc2UKKyNlcnJv ciB1bnN1cHBvcnRlZDogYnl0ZSBvcmRlciBkZXRlY3Rpb24gZmFpbGVkCisjZW5kaWYgIC8qIGRl ZmluZWQoRFVLX1VTRV9CWVRFT1JERVIpICovCisKKyNlbmRpZiAgLyogRFVLX0NPTkZJR19IX0lO Q0xVREVEICovCmRpZmYgLS1naXQgYS9zaGVsbC9pbmNsdWRlL2R1a3RhcGUuaCBiL3NoZWxsL2lu Y2x1ZGUvZHVrdGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNGRh MDQyY2QxCi0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwvaW5jbHVkZS9kdWt0YXBlLmgKQEAgLTAs MCArMSwxNDE5IEBACisvKgorICogIER1a3RhcGUgcHVibGljIEFQSSBmb3IgRHVrdGFwZSAyLjMu OTkuCisgKgorICogIFNlZSB0aGUgQVBJIHJlZmVyZW5jZSBmb3IgZG9jdW1lbnRhdGlvbiBvbiBj YWxsIHNlbWFudGljcy4gIFRoZSBleHBvc2VkLAorICogIHN1cHBvcnRlZCBBUEkgaXMgYmV0d2Vl biB0aGUgIkJFR0lOIFBVQkxJQyBBUEkiIGFuZCAiRU5EIFBVQkxJQyBBUEkiCisgKiAgY29tbWVu dHMuICBPdGhlciBwYXJ0cyBvZiB0aGUgaGVhZGVyIGFyZSBEdWt0YXBlIGludGVybmFsIGFuZCBy ZWxhdGVkIHRvCisgKiAgZS5nLiBwbGF0Zm9ybS9jb21waWxlci9mZWF0dXJlIGRldGVjdGlvbi4K KyAqCisgKiAgR2l0IGNvbW1pdCBkMDQ0NTAwODNmNzk1YmNjNTgwMDhmOThiMTliYjJiNTcyN2Yy NzExICh2Mi4zLjAtNy1nZDA0NDUwMDgpLgorICogIEdpdCBicmFuY2ggbWFzdGVyLgorICoKKyAq ICBTZWUgRHVrdGFwZSBBVVRIT1JTLnJzdCBhbmQgTElDRU5TRS50eHQgZm9yIGNvcHlyaWdodCBh bmQKKyAqICBsaWNlbnNpbmcgaW5mb3JtYXRpb24uCisgKi8KKworLyogTElDRU5TRS50eHQgKi8K Ky8qCisgKiAgPT09PT09PT09PT09PT09CisgKiAgRHVrdGFwZSBsaWNlbnNlCisgKiAgPT09PT09 PT09PT09PT09CisgKiAgCisgKiAgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQp CisgKiAgCisgKiAgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTggYnkgRHVrdGFwZSBhdXRob3JzIChz ZWUgQVVUSE9SUy5yc3QpCisgKiAgCisgKiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogIG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLCB0byBkZWFsCisgKiAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwKKyAqICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogIAorICogIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKiAgCisgKiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqICBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqICBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBO TyBFVkVOVCBTSEFMTCBUSEUKKyAqICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiAgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcg RlJPTSwKKyAqICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiAgVEhFIFNPRlRXQVJFLgorICovCisKKy8q IEFVVEhPUlMucnN0ICovCisvKgorICogID09PT09PT09PT09PT09PQorICogIER1a3RhcGUgYXV0 aG9ycworICogID09PT09PT09PT09PT09PQorICogIAorICogIENvcHlyaWdodAorICogID09PT09 PT09PQorICogIAorICogIER1a3RhcGUgY29weXJpZ2h0cyBhcmUgaGVsZCBieSBpdHMgYXV0aG9y cy4gIEVhY2ggYXV0aG9yIGhhcyBhIGNvcHlyaWdodAorICogIHRvIHRoZWlyIGNvbnRyaWJ1dGlv biwgYW5kIGFncmVlcyB0byBpcnJldm9jYWJseSBsaWNlbnNlIHRoZSBjb250cmlidXRpb24KKyAq ICB1bmRlciB0aGUgRHVrdGFwZSBgYExJQ0VOU0UudHh0YGAuCisgKiAgCisgKiAgQXV0aG9ycwor ICogID09PT09PT0KKyAqICAKKyAqICBQbGVhc2UgaW5jbHVkZSBhbiBlLW1haWwgYWRkcmVzcywg YSBsaW5rIHRvIHlvdXIgR2l0SHViIHByb2ZpbGUsIG9yIHNvbWV0aGluZworICogIHNpbWlsYXIg dG8gYWxsb3cgeW91ciBjb250cmlidXRpb24gdG8gYmUgaWRlbnRpZmllZCBhY2N1cmF0ZWx5Lgor ICogIAorICogIFRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgY29kZSwgd2Vi c2l0ZSBjb250ZW50cywgb3IgV2lraSBjb250ZW50cywKKyAqICBhbmQgYWdyZWVkIHRvIGlycmV2 b2NhYmx5IGxpY2Vuc2UgdGhlaXIgY29udHJpYnV0aW9ucyB1bmRlciB0aGUgRHVrdGFwZQorICog IGBgTElDRU5TRS50eHRgYCAoaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSk6CisgKiAgCisgKiAgKiBT YW1pIFZhYXJhbGEgPHNhbWkudmFhcmFsYUBpa2kuZmk+CisgKiAgKiBOaWtpIERvYnJldgorICog ICogQW5kcmVhcyBcdTAwZDZtYW4gPGFuZHJlYXNAbG9uZWx5Y29kZXIuY29tPgorICogICogTFx1 MDBlMXN6bFx1MDBmMyBMYW5nXHUwMGYzIDxsbGFuZ28udS1zemVnZWRAcGFydG5lci5zYW1zdW5n LmNvbT4KKyAqICAqIExlZ2ltZXQgPGxlZ2ltZXQuY2FsY0BnbWFpbC5jb20+CisgKiAgKiBLYXJs IFNrb21za2kgPGthcmxAc2tvbXNraS5jb20+CisgKiAgKiBCcnVjZSBQYXNjb2UgPGZhdGNlcmJl cnVzMUBnbWFpbC5jb20+CisgKiAgKiBSZW5cdTAwZTkgSG9sbGFuZGVyIDxyZW5lQHJlbmU4ODg4 LmF0PgorICogICogSnVsaWVuIEhhbWFpZGUgKGh0dHBzOi8vZ2l0aHViLmNvbS9jcmF6eWp1bCkK KyAqICAqIFNlYmFzdGlhbiBHXHUwMGY2dHRlIChodHRwczovL2dpdGh1Yi5jb20vamFzZWcpCisg KiAgKiBUb21hc3ogTWFndWxza2kgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYWd1bCkKKyAqICAqIFxE LiBCb2hkYW4gKGh0dHBzOi8vZ2l0aHViLmNvbS9kYm9oZGFuKQorICogICogT25kXHUwMTU5ZWog SmlybWFuIChodHRwczovL2dpdGh1Yi5jb20vbWVnb3VzKQorICogICogU2FcdTAwZmFsIEliYXJy YSBDb3JyZXRnXHUwMGU5IDxzYWdodWxAZ21haWwuY29tPgorICogICogSmVyZW15IEhVIDxodXhp bmd5aUBtc24uY29tPgorICogICogT2xlIEFuZHJcdTAwZTkgVmFkbGEgUmF2blx1MDBlNXMgKGh0 dHBzOi8vZ2l0aHViLmNvbS9vbGVhdnIpCisgKiAgKiBIYXJvbGQgQnJlbmVzIChodHRwczovL2dp dGh1Yi5jb20vaGFyb2xkLWIpCisgKiAgKiBPbGl2ZXIgQ3JvdyAoaHR0cHM6Ly9naXRodWIuY29t L29jcm93KQorICogICogSmFrdWIgQ2hcdTAxNDJhcGlcdTAxNDRza2kgKGh0dHBzOi8vZ2l0aHVi LmNvbS9qY2hsYXBpbnNraSkKKyAqICAqIEJyZXR0IFZpY2tlcnMgKGh0dHBzOi8vZ2l0aHViLmNv bS9iZWV2aWspCisgKiAgKiBEb21pbmlrIE9rd2lla2EgKGh0dHBzOi8vZ2l0aHViLmNvbS9va2l0 ZWMpCisgKiAgKiBSZW1rbyBUcm9uXHUwMGU3b24gKGh0dHBzOi8vZWwtdHJhbW8uYmUpCisgKiAg KiBSb21lcm8gTWFsYXF1aWFzIChyYnNtQGljLnVmYWwuYnIpCisgKiAgKiBNaWNoYWVsIERyYWtl IDxtaWNoYWVsLmRyYWtlQGNvZGV0aGluay5jby51az4KKyAqICAqIFN0ZXZlbiBEb24gKGh0dHBz Oi8vZ2l0aHViLmNvbS9zaGRvbikKKyAqICAqIFNpbW9uIFN0b25lIChodHRwczovL2dpdGh1Yi5j b20vc3N0b25lMSkKKyAqICAqIFxKLiBNY0MuIChodHRwczovL2dpdGh1Yi5jb20vam1obWNjcikK KyAqICAqIEpha3ViIE5vd2Frb3dza2kgKGh0dHBzOi8vZ2l0aHViLmNvbS9qaW12b25tb29uKQor ICogICogVG9tbXkgTmd1eWVuIChodHRwczovL2dpdGh1Yi5jb20vdG4wNTAyKQorICogICogRmFi cmljZSBGb250YWluZSAoaHR0cHM6Ly9naXRodWIuY29tL2Zmb250YWluZSkKKyAqICAqIENocmlz dG9waGVyIEhpbGxlciAoaHR0cHM6Ly9naXRodWIuY29tL2JvbmVza3VsbCkKKyAqICAqIEdvbnph bG8gRGlldGhlbG0gKGh0dHBzOi8vZ2l0aHViLmNvbS9nb256dXMpCisgKiAgKiBNaWNoYWwgS2Fz cGVyZWsgKGh0dHBzOi8vZ2l0aHViLmNvbS9taWNoYWxrYXMpCisgKiAgKiBBbmRyZXcgSmFua2Ug KGh0dHBzOi8vZ2l0aHViLmNvbS9hcGphbmtlKQorICogICogU3RldmUgRmFuIChodHRwczovL2dp dGh1Yi5jb20vc3RldmVmYW4xOTk5KQorICogIAorICogIE90aGVyIGNvbnRyaWJ1dGlvbnMKKyAq ICA9PT09PT09PT09PT09PT09PT09CisgKiAgCisgKiAgVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2 ZSBjb250cmlidXRlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBjb2RlIChlLmcuIHJlcG9ydGVkCisg KiAgYnVncywgcHJvdmlkZWQgaWRlYXMsIGV0Yzsgcm91Z2hseSBpbiBvcmRlciBvZiBhcHBlYXJh bmNlKToKKyAqICAKKyAqICAqIEdyZWcgQnVybnMKKyAqICAqIEFudGhvbnkgUmFiaW5lCisgKiAg KiBDYXJsb3MgQ29zdGEKKyAqICAqIEF1clx1MDBlOWxpZW4gQm91aWxsYW5kCisgKiAgKiBQcmVl dCBEZXNhaSAoUHJpcyBNYXRpYykKKyAqICAqIGp1ZG9meXIgKGh0dHA6Ly93d3cucmVkZGl0LmNv bS91c2VyL2p1ZG9meXIpCisgKiAgKiBKYXNvbiBXb29mZW5kZW4KKyAqICAqIE1pY2hhXHUwMTQy IFByenlieVx1MDE1YgorICogICogQW50aG9ueSBIb3dlCisgKiAgKiBDb25yYWQgUGFua29mZgor ICogICogSmltIFNjaGltcGYKKyAqICAqIFJhamFyYW4gR2F1bmtlciAoaHR0cHM6Ly9naXRodWIu Y29tL3ppbWJhYmFvKQorICogICogQW5kcmVhcyBcdTAwZDZtYW4KKyAqICAqIERvdWcgU2FuZGVu CisgKiAgKiBKb3NoIEVuZ2VicmV0c29uIChodHRwczovL2dpdGh1Yi5jb20vSm9zaEVuZ2VicmV0 c29uKQorICogICogUmVtbyBFaWNoZW5iZXJnZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1vZSkK KyAqICAqIE1hbW9kIE1laHlhciAoaHR0cHM6Ly9naXRodWIuY29tL21hbW9kKQorICogICogRGF2 aWQgRGVtZWxpZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrYW5kKQorICogICogVGltIENhc3dl bGwgKGh0dHBzOi8vZ2l0aHViLmNvbS9jcmVhdGlvbml4KQorICogICogTWl0Y2hlbGwgQmxhbmsg SnIgKGh0dHBzOi8vZ2l0aHViLmNvbS9taXRjaGJsYW5rKQorICogICogaHR0cHM6Ly9naXRodWIu Y29tL3l1c2hsaQorICogICogU2VvIFNhbmdoeWVvbiAoaHR0cHM6Ly9naXRodWIuY29tL3Nhbnhp eW4pCisgKiAgKiBIYW4gQ2hvb25nV29vIChodHRwczovL2dpdGh1Yi5jb20vdHVueikKKyAqICAq IEpvc2h1YSBQZWVrIChodHRwczovL2dpdGh1Yi5jb20vam9zaCkKKyAqICAqIEJydWNlIEUuIFBh c2NvZSAoaHR0cHM6Ly9naXRodWIuY29tL2ZhdGNlcmJlcnVzKQorICogICogaHR0cHM6Ly9naXRo dWIuY29tL0tlbGxlZGluCisgKiAgKiBodHRwczovL2dpdGh1Yi5jb20vc3N0cnVjaHRydXAKKyAq ICAqIE1pY2hhZWwgRHJha2UgKGh0dHBzOi8vZ2l0aHViLmNvbS90bHNhKQorICogICogaHR0cHM6 Ly9naXRodWIuY29tL2NocmlzLXkKKyAqICAqIExhdXJlbnQgWnViaWF1ciAoaHR0cHM6Ly9naXRo dWIuY29tL2x6dWJpYXVyKQorICogICogTmVpbCBLb2xiYW4gKGh0dHBzOi8vZ2l0aHViLmNvbS9u a29sYmFuKQorICogICogV2lsaGVsbSBXYW5lY2VrIChodHRwczovL2dpdGh1Yi5jb20vd2FuZWNl aykKKyAqICAqIEFuZHJldyBKYW5rZSAoaHR0cHM6Ly9naXRodWIuY29tL2FwamFua2UpCisgKiAg CisgKiAgSWYgeW91IGFyZSBhY2NpZGVudGFsbHkgbWlzc2luZyBmcm9tIHRoaXMgbGlzdCwgc2Vu ZCBtZSBhbiBlLW1haWwKKyAqICAoYGBzYW1pLnZhYXJhbGFAaWtpLmZpYGApIGFuZCBJJ2xsIGZp eCB0aGUgb21pc3Npb24uCisgKi8KKworI2lmICFkZWZpbmVkKERVS1RBUEVfSF9JTkNMVURFRCkK KyNkZWZpbmUgRFVLVEFQRV9IX0lOQ0xVREVECisKKyNkZWZpbmUgRFVLX1NJTkdMRV9GSUxFCisK Ky8qCisgKiAgQkVHSU4gUFVCTElDIEFQSQorICovCisKKy8qCisgKiAgVmVyc2lvbiBhbmQgR2l0 IGNvbW1pdCBpZGVudGlmaWNhdGlvbgorICovCisKKy8qIER1a3RhcGUgdmVyc2lvbiwgKG1ham9y ICogMTAwMDApICsgKG1pbm9yICogMTAwKSArIHBhdGNoLiAgQWxsb3dzIEMgY29kZQorICogdG8g I2lmIChEVUtfVkVSU0lPTiA+PSBOTk4pIGFnYWluc3QgRHVrdGFwZSBBUEkgdmVyc2lvbi4gIFRo ZSBzYW1lIHZhbHVlCisgKiBpcyBhbHNvIGF2YWlsYWJsZSB0byBFQ01BU2NyaXB0IGNvZGUgaW4g RHVrdGFwZS52ZXJzaW9uLiAgVW5vZmZpY2lhbAorICogZGV2ZWxvcG1lbnQgc25hcHNob3RzIGhh dmUgOTkgZm9yIHBhdGNoIGxldmVsIChlLmcuIDAuMTAuOTkgd291bGQgYmUgYQorICogZGV2ZWxv cG1lbnQgdmVyc2lvbiBhZnRlciAwLjEwLjAgYnV0IGJlZm9yZSB0aGUgbmV4dCBvZmZpY2lhbCBy ZWxlYXNlKS4KKyAqLworI2RlZmluZSBEVUtfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAg MjAzOTlMCisKKy8qIEdpdCBjb21taXQsIGRlc2NyaWJlLCBhbmQgYnJhbmNoIGZvciBEdWt0YXBl IGJ1aWxkLiAgVXNlZnVsIGZvcgorICogbm9uLW9mZmljaWFsIHNuYXBzaG90IGJ1aWxkcyBzbyB0 aGF0IGFwcGxpY2F0aW9uIGNvZGUgY2FuIGVhc2lseSBsb2cKKyAqIHdoaWNoIER1a3RhcGUgc25h cHNob3Qgd2FzIHVzZWQuICBOb3QgYXZhaWxhYmxlIGluIHRoZSBFQ01BU2NyaXB0CisgKiBlbnZp cm9ubWVudC4KKyAqLworI2RlZmluZSBEVUtfR0lUX0NPTU1JVCAgICAgICAgICAgICAgICAgICAg ImQwNDQ1MDA4M2Y3OTViY2M1ODAwOGY5OGIxOWJiMmI1NzI3ZjI3MTEiCisjZGVmaW5lIERVS19H SVRfREVTQ1JJQkUgICAgICAgICAgICAgICAgICAidjIuMy4wLTctZ2QwNDQ1MDA4IgorI2RlZmlu ZSBEVUtfR0lUX0JSQU5DSCAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIKKworLyogRXh0ZXJu YWwgZHVrX2NvbmZpZy5oIHByb3ZpZGVzIHBsYXRmb3JtL2NvbXBpbGVyL09TIGRlcGVuZGVudAor ICogdHlwZWRlZnMgYW5kIG1hY3JvcywgYW5kIERVS19VU0VfeHh4IGNvbmZpZyBvcHRpb25zIHNv IHRoYXQKKyAqIHRoZSByZXN0IG9mIER1a3RhcGUgZG9lc24ndCBuZWVkIHRvIGRvIGFueSBmZWF0 dXJlIGRldGVjdGlvbi4KKyAqIERVS19WRVJTSU9OIGlzIGRlZmluZWQgYmVmb3JlIGluY2x1ZGlu ZyBzbyB0aGF0IGNvbmZpZ3VyYXRpb24KKyAqIHNuaXBwZXRzIGNhbiByZWFjdCB0byBpdC4KKyAq LworI2luY2x1ZGUgImR1a19jb25maWcuaCIKKworLyoKKyAqICBBdm9pZCBDKysgbmFtZSBtYW5n bGluZworICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5k aWYKKworLyoKKyAqICBTb21lIGRlZmluZXMgZm9yd2FyZGVkIGZyb20gZmVhdHVyZSBkZXRlY3Rp b24KKyAqLworCisjdW5kZWYgRFVLX0FQSV9WQVJJQURJQ19NQUNST1MKKyNpZiBkZWZpbmVkKERV S19VU0VfVkFSSUFESUNfTUFDUk9TKQorI2RlZmluZSBEVUtfQVBJX1ZBUklBRElDX01BQ1JPUwor I2VuZGlmCisKKyNkZWZpbmUgRFVLX0FQSV9OT1JFVFVSTihkZWNsKSBEVUtfTk9SRVRVUk4oZGVj bCkKKworLyoKKyAqICBQdWJsaWMgQVBJIHNwZWNpZmljIHR5cGVkZWZzCisgKgorICogIE1hbnkg dHlwZXMgYXJlIHdyYXBwZWQgYnkgRHVrdGFwZSBmb3IgcG9ydGFiaWxpdHkgdG8gcmFyZSBwbGF0 Zm9ybXMKKyAqICB3aGVyZSBlLmcuICdpbnQnIGlzIGEgMTYtYml0IHR5cGUuICBTZWUgcHJhY3Rp Y2FsIHR5cGluZyBkaXNjdXNzaW9uCisgKiAgaW4gRHVrdGFwZSB3ZWIgZG9jdW1lbnRhdGlvbi4K KyAqLworCitzdHJ1Y3QgZHVrX3RocmVhZF9zdGF0ZTsKK3N0cnVjdCBkdWtfbWVtb3J5X2Z1bmN0 aW9uczsKK3N0cnVjdCBkdWtfZnVuY3Rpb25fbGlzdF9lbnRyeTsKK3N0cnVjdCBkdWtfbnVtYmVy X2xpc3RfZW50cnk7CitzdHJ1Y3QgZHVrX3RpbWVfY29tcG9uZW50czsKKworLyogZHVrX2NvbnRl eHQgaXMgbm93IGRlZmluZWQgaW4gZHVrX2NvbmZpZy5oIGJlY2F1c2UgaXQgbWF5IGFsc28gYmUK KyAqIHJlZmVyZW5jZWQgdGhlcmUgYnkgcHJvdG90eXBlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg ZHVrX3RocmVhZF9zdGF0ZSBkdWtfdGhyZWFkX3N0YXRlOwordHlwZWRlZiBzdHJ1Y3QgZHVrX21l bW9yeV9mdW5jdGlvbnMgZHVrX21lbW9yeV9mdW5jdGlvbnM7Cit0eXBlZGVmIHN0cnVjdCBkdWtf ZnVuY3Rpb25fbGlzdF9lbnRyeSBkdWtfZnVuY3Rpb25fbGlzdF9lbnRyeTsKK3R5cGVkZWYgc3Ry dWN0IGR1a19udW1iZXJfbGlzdF9lbnRyeSBkdWtfbnVtYmVyX2xpc3RfZW50cnk7Cit0eXBlZGVm IHN0cnVjdCBkdWtfdGltZV9jb21wb25lbnRzIGR1a190aW1lX2NvbXBvbmVudHM7CisKK3R5cGVk ZWYgZHVrX3JldF90ICgqZHVrX2NfZnVuY3Rpb24pKGR1a19jb250ZXh0ICpjdHgpOwordHlwZWRl ZiB2b2lkICooKmR1a19hbGxvY19mdW5jdGlvbikgKHZvaWQgKnVkYXRhLCBkdWtfc2l6ZV90IHNp emUpOwordHlwZWRlZiB2b2lkICooKmR1a19yZWFsbG9jX2Z1bmN0aW9uKSAodm9pZCAqdWRhdGEs IHZvaWQgKnB0ciwgZHVrX3NpemVfdCBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKmR1a19mcmVlX2Z1 bmN0aW9uKSAodm9pZCAqdWRhdGEsIHZvaWQgKnB0cik7Cit0eXBlZGVmIHZvaWQgKCpkdWtfZmF0 YWxfZnVuY3Rpb24pICh2b2lkICp1ZGF0YSwgY29uc3QgY2hhciAqbXNnKTsKK3R5cGVkZWYgdm9p ZCAoKmR1a19kZWNvZGVfY2hhcl9mdW5jdGlvbikgKHZvaWQgKnVkYXRhLCBkdWtfY29kZXBvaW50 X3QgY29kZXBvaW50KTsKK3R5cGVkZWYgZHVrX2NvZGVwb2ludF90ICgqZHVrX21hcF9jaGFyX2Z1 bmN0aW9uKSAodm9pZCAqdWRhdGEsIGR1a19jb2RlcG9pbnRfdCBjb2RlcG9pbnQpOwordHlwZWRl ZiBkdWtfcmV0X3QgKCpkdWtfc2FmZV9jYWxsX2Z1bmN0aW9uKSAoZHVrX2NvbnRleHQgKmN0eCwg dm9pZCAqdWRhdGEpOwordHlwZWRlZiBkdWtfc2l6ZV90ICgqZHVrX2RlYnVnX3JlYWRfZnVuY3Rp b24pICh2b2lkICp1ZGF0YSwgY2hhciAqYnVmZmVyLCBkdWtfc2l6ZV90IGxlbmd0aCk7Cit0eXBl ZGVmIGR1a19zaXplX3QgKCpkdWtfZGVidWdfd3JpdGVfZnVuY3Rpb24pICh2b2lkICp1ZGF0YSwg Y29uc3QgY2hhciAqYnVmZmVyLCBkdWtfc2l6ZV90IGxlbmd0aCk7Cit0eXBlZGVmIGR1a19zaXpl X3QgKCpkdWtfZGVidWdfcGVla19mdW5jdGlvbikgKHZvaWQgKnVkYXRhKTsKK3R5cGVkZWYgdm9p ZCAoKmR1a19kZWJ1Z19yZWFkX2ZsdXNoX2Z1bmN0aW9uKSAodm9pZCAqdWRhdGEpOwordHlwZWRl ZiB2b2lkICgqZHVrX2RlYnVnX3dyaXRlX2ZsdXNoX2Z1bmN0aW9uKSAodm9pZCAqdWRhdGEpOwor dHlwZWRlZiBkdWtfaWR4X3QgKCpkdWtfZGVidWdfcmVxdWVzdF9mdW5jdGlvbikgKGR1a19jb250 ZXh0ICpjdHgsIHZvaWQgKnVkYXRhLCBkdWtfaWR4X3QgbnZhbHVlcyk7Cit0eXBlZGVmIHZvaWQg KCpkdWtfZGVidWdfZGV0YWNoZWRfZnVuY3Rpb24pIChkdWtfY29udGV4dCAqY3R4LCB2b2lkICp1 ZGF0YSk7CisKK3N0cnVjdCBkdWtfdGhyZWFkX3N0YXRlIHsKKwkvKiBYWFg6IEVub3VnaCBzcGFj ZSB0byBob2xkIGludGVybmFsIHN1c3BlbmQvcmVzdW1lIHN0cnVjdHVyZS4KKwkgKiBUaGlzIGlz IHJhdGhlciBhd2t3YXJkIGFuZCB0byBiZSBmaXhlZCB3aGVuIHRoZSBpbnRlcm5hbAorCSAqIHN0 cnVjdHVyZSBpcyB2aXNpYmxlIGZvciB0aGUgcHVibGljIEFQSSBoZWFkZXIuCisJICovCisJY2hh ciBkYXRhWzEyOF07Cit9OworCitzdHJ1Y3QgZHVrX21lbW9yeV9mdW5jdGlvbnMgeworCWR1a19h bGxvY19mdW5jdGlvbiBhbGxvY19mdW5jOworCWR1a19yZWFsbG9jX2Z1bmN0aW9uIHJlYWxsb2Nf ZnVuYzsKKwlkdWtfZnJlZV9mdW5jdGlvbiBmcmVlX2Z1bmM7CisJdm9pZCAqdWRhdGE7Cit9Owor CitzdHJ1Y3QgZHVrX2Z1bmN0aW9uX2xpc3RfZW50cnkgeworCWNvbnN0IGNoYXIgKmtleTsKKwlk dWtfY19mdW5jdGlvbiB2YWx1ZTsKKwlkdWtfaWR4X3QgbmFyZ3M7Cit9OworCitzdHJ1Y3QgZHVr X251bWJlcl9saXN0X2VudHJ5IHsKKwljb25zdCBjaGFyICprZXk7CisJZHVrX2RvdWJsZV90IHZh bHVlOworfTsKKworc3RydWN0IGR1a190aW1lX2NvbXBvbmVudHMgeworCWR1a19kb3VibGVfdCB5 ZWFyOyAgICAgICAgICAvKiB5ZWFyLCBlLmcuIDIwMTYsIEVDTUFTY3JpcHQgeWVhciByYW5nZSAq LworCWR1a19kb3VibGVfdCBtb250aDsgICAgICAgICAvKiBtb250aDogMS0xMiAqLworCWR1a19k b3VibGVfdCBkYXk7ICAgICAgICAgICAvKiBkYXk6IDEtMzEgKi8KKwlkdWtfZG91YmxlX3QgaG91 cnM7ICAgICAgICAgLyogaG91cjogMC01OSAqLworCWR1a19kb3VibGVfdCBtaW51dGVzOyAgICAg ICAvKiBtaW51dGU6IDAtNTkgKi8KKwlkdWtfZG91YmxlX3Qgc2Vjb25kczsgICAgICAgLyogc2Vj b25kOiAwLTU5IChpbiBQT1NJWCB0aW1lIG5vIGxlYXAgc2Vjb25kKSAqLworCWR1a19kb3VibGVf dCBtaWxsaXNlY29uZHM7ICAvKiBtYXkgY29udGFpbiBzdWItbWlsbGlzZWNvbmQgZnJhY3Rpb25z ICovCisJZHVrX2RvdWJsZV90IHdlZWtkYXk7ICAgICAgIC8qIHdlZWtkYXk6IDAtNiwgMD1TdW5k YXksIDE9TW9uZGF5LCAuLi4sIDY9U2F0dXJkYXkgKi8KK307CisKKy8qCisgKiAgQ29uc3RhbnRz CisgKi8KKworLyogRHVrdGFwZSBkZWJ1ZyBwcm90b2NvbCB2ZXJzaW9uIHVzZWQgYnkgdGhpcyBi dWlsZC4gKi8KKyNkZWZpbmUgRFVLX0RFQlVHX1BST1RPQ09MX1ZFUlNJT04gICAgICAgIDIKKwor LyogVXNlZCB0byByZXByZXNlbnQgaW52YWxpZCBpbmRleDsgaWYgY2FsbGVyIHVzZXMgdGhpcyB3 aXRob3V0IGNoZWNraW5nLAorICogdGhpcyBpbmRleCB3aWxsIG1hcCB0byBhIG5vbi1leGlzdGVu dCBzdGFjayBlbnRyeS4gIEFsc28gdXNlZCBpbiBzb21lCisgKiBBUEkgY2FsbHMgYXMgYSBtYXJr ZXIgdG8gZGVub3RlICJubyB2YWx1ZSIuCisgKi8KKyNkZWZpbmUgRFVLX0lOVkFMSURfSU5ERVgg ICAgICAgICAgICAgICAgIERVS19JRFhfTUlOCisKKy8qIEluZGljYXRlcyB0aGF0IGEgbmF0aXZl IGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgYXJncywKKyAqIGFuZCB0 aGUgYXJndW1lbnQgc3RhY2sgc2hvdWxkIG5vdCBiZSBjYXBwZWQvZXh0ZW5kZWQgYXQgYWxsLgor ICovCisjZGVmaW5lIERVS19WQVJBUkdTICAgICAgICAgICAgICAgICAgICAgICAoKGR1a19pbnRf dCkgKC0xKSkKKworLyogTnVtYmVyIG9mIHZhbHVlIHN0YWNrIGVudHJpZXMgKGluIGFkZGl0aW9u IHRvIGFjdHVhbCBjYWxsIGFyZ3VtZW50cykKKyAqIGd1YXJhbnRlZWQgdG8gYmUgYWxsb2NhdGVk IG9uIGVudHJ5IHRvIGEgRHVrdGFwZS9DIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIERVS19BUElf RU5UUllfU1RBQ0sgICAgICAgICAgICAgICA2NFUKKworLyogVmFsdWUgdHlwZXMsIHVzZWQgYnkg ZS5nLiBkdWtfZ2V0X3R5cGUoKSAqLworI2RlZmluZSBEVUtfVFlQRV9NSU4gICAgICAgICAgICAg ICAgICAgICAgMFUKKyNkZWZpbmUgRFVLX1RZUEVfTk9ORSAgICAgICAgICAgICAgICAgICAgIDBV ICAgIC8qIG5vIHZhbHVlLCBlLmcuIGludmFsaWQgaW5kZXggKi8KKyNkZWZpbmUgRFVLX1RZUEVf VU5ERUZJTkVEICAgICAgICAgICAgICAgIDFVICAgIC8qIEVDTUFTY3JpcHQgdW5kZWZpbmVkICov CisjZGVmaW5lIERVS19UWVBFX05VTEwgICAgICAgICAgICAgICAgICAgICAyVSAgICAvKiBFQ01B U2NyaXB0IG51bGwgKi8KKyNkZWZpbmUgRFVLX1RZUEVfQk9PTEVBTiAgICAgICAgICAgICAgICAg IDNVICAgIC8qIEVDTUFTY3JpcHQgYm9vbGVhbjogMCBvciAxICovCisjZGVmaW5lIERVS19UWVBF X05VTUJFUiAgICAgICAgICAgICAgICAgICA0VSAgICAvKiBFQ01BU2NyaXB0IG51bWJlcjogZG91 YmxlICovCisjZGVmaW5lIERVS19UWVBFX1NUUklORyAgICAgICAgICAgICAgICAgICA1VSAgICAv KiBFQ01BU2NyaXB0IHN0cmluZzogQ0VTVS04IC8gZXh0ZW5kZWQgVVRGLTggZW5jb2RlZCAqLwor I2RlZmluZSBEVUtfVFlQRV9PQkpFQ1QgICAgICAgICAgICAgICAgICAgNlUgICAgLyogRUNNQVNj cmlwdCBvYmplY3Q6IGluY2x1ZGVzIG9iamVjdHMsIGFycmF5cywgZnVuY3Rpb25zLCB0aHJlYWRz ICovCisjZGVmaW5lIERVS19UWVBFX0JVRkZFUiAgICAgICAgICAgICAgICAgICA3VSAgICAvKiBm aXhlZCBvciBkeW5hbWljLCBnYXJiYWdlIGNvbGxlY3RlZCBieXRlIGJ1ZmZlciAqLworI2RlZmlu ZSBEVUtfVFlQRV9QT0lOVEVSICAgICAgICAgICAgICAgICAgOFUgICAgLyogcmF3IHZvaWQgcG9p bnRlciAqLworI2RlZmluZSBEVUtfVFlQRV9MSUdIVEZVTkMgICAgICAgICAgICAgICAgOVUgICAg LyogbGlnaHR3ZWlnaHQgZnVuY3Rpb24gcG9pbnRlciAqLworI2RlZmluZSBEVUtfVFlQRV9NQVgg ICAgICAgICAgICAgICAgICAgICAgOVUKKworLyogVmFsdWUgbWFzayB0eXBlcywgdXNlZCBieSBl LmcuIGR1a19nZXRfdHlwZV9tYXNrKCkgKi8KKyNkZWZpbmUgRFVLX1RZUEVfTUFTS19OT05FICAg ICAgICAgICAgICAgICgxVSA8PCBEVUtfVFlQRV9OT05FKQorI2RlZmluZSBEVUtfVFlQRV9NQVNL X1VOREVGSU5FRCAgICAgICAgICAgKDFVIDw8IERVS19UWVBFX1VOREVGSU5FRCkKKyNkZWZpbmUg RFVLX1RZUEVfTUFTS19OVUxMICAgICAgICAgICAgICAgICgxVSA8PCBEVUtfVFlQRV9OVUxMKQor I2RlZmluZSBEVUtfVFlQRV9NQVNLX0JPT0xFQU4gICAgICAgICAgICAgKDFVIDw8IERVS19UWVBF X0JPT0xFQU4pCisjZGVmaW5lIERVS19UWVBFX01BU0tfTlVNQkVSICAgICAgICAgICAgICAoMVUg PDwgRFVLX1RZUEVfTlVNQkVSKQorI2RlZmluZSBEVUtfVFlQRV9NQVNLX1NUUklORyAgICAgICAg ICAgICAgKDFVIDw8IERVS19UWVBFX1NUUklORykKKyNkZWZpbmUgRFVLX1RZUEVfTUFTS19PQkpF Q1QgICAgICAgICAgICAgICgxVSA8PCBEVUtfVFlQRV9PQkpFQ1QpCisjZGVmaW5lIERVS19UWVBF X01BU0tfQlVGRkVSICAgICAgICAgICAgICAoMVUgPDwgRFVLX1RZUEVfQlVGRkVSKQorI2RlZmlu ZSBEVUtfVFlQRV9NQVNLX1BPSU5URVIgICAgICAgICAgICAgKDFVIDw8IERVS19UWVBFX1BPSU5U RVIpCisjZGVmaW5lIERVS19UWVBFX01BU0tfTElHSFRGVU5DICAgICAgICAgICAoMVUgPDwgRFVL X1RZUEVfTElHSFRGVU5DKQorI2RlZmluZSBEVUtfVFlQRV9NQVNLX1RIUk9XICAgICAgICAgICAg ICAgKDFVIDw8IDEwKSAgLyogaW50ZXJuYWwgZmxhZyB2YWx1ZTogdGhyb3cgaWYgbWFzayBkb2Vz bid0IG1hdGNoICovCisjZGVmaW5lIERVS19UWVBFX01BU0tfUFJPTU9URSAgICAgICAgICAgICAo MVUgPDwgMTEpICAvKiBpbnRlcm5hbCBmbGFnIHZhbHVlOiBwcm9tb3RlIHRvIG9iamVjdCBpZiBt YXNrIG1hdGNoZXMgKi8KKworLyogQ29lcmNpb24gaGludHMgKi8KKyNkZWZpbmUgRFVLX0hJTlRf Tk9ORSAgICAgICAgICAgICAgICAgICAgIDAgICAgLyogcHJlZmVyIG51bWJlciwgdW5sZXNzIGlu cHV0IGlzIGEgRGF0ZSwgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogY2FzZSBwcmVmZXIgc3RyaW5nIChFNSBTZWN0aW9uIDguMTIuOCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVm aW5lIERVS19ISU5UX1NUUklORyAgICAgICAgICAgICAgICAgICAxICAgIC8qIHByZWZlciBzdHJp bmcgKi8KKyNkZWZpbmUgRFVLX0hJTlRfTlVNQkVSICAgICAgICAgICAgICAgICAgIDIgICAgLyog cHJlZmVyIG51bWJlciAqLworCisvKiBFbnVtZXJhdGlvbiBmbGFncyBmb3IgZHVrX2VudW0oKSAq LworI2RlZmluZSBEVUtfRU5VTV9JTkNMVURFX05PTkVOVU1FUkFCTEUgICAgKDFVIDw8IDApICAg IC8qIGVudW1lcmF0ZSBub24tbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4gYWRkaXRpb24gdG8gZW51 bWVyYWJsZSAqLworI2RlZmluZSBEVUtfRU5VTV9JTkNMVURFX0hJRERFTiAgICAgICAgICAgKDFV IDw8IDEpICAgIC8qIGVudW1lcmF0ZSBoaWRkZW4gc3ltYm9scyB0b28gKGluIER1a3RhcGUgMS54 IGNhbGxlZCBpbnRlcm5hbCBwcm9wZXJ0aWVzKSAqLworI2RlZmluZSBEVUtfRU5VTV9JTkNMVURF X1NZTUJPTFMgICAgICAgICAgKDFVIDw8IDIpICAgIC8qIGVudW1lcmF0ZSBzeW1ib2xzICovCisj ZGVmaW5lIERVS19FTlVNX0VYQ0xVREVfU1RSSU5HUyAgICAgICAgICAoMVUgPDwgMykgICAgLyog ZXhjbHVkZSBzdHJpbmdzICovCisjZGVmaW5lIERVS19FTlVNX09XTl9QUk9QRVJUSUVTX09OTFkg ICAgICAoMVUgPDwgNCkgICAgLyogZG9uJ3Qgd2FsayBwcm90b3R5cGUgY2hhaW4sIG9ubHkgY2hl Y2sgb3duIHByb3BlcnRpZXMgKi8KKyNkZWZpbmUgRFVLX0VOVU1fQVJSQVlfSU5ESUNFU19PTkxZ ICAgICAgICgxVSA8PCA1KSAgICAvKiBvbmx5IGVudW1lcmF0ZSBhcnJheSBpbmRpY2VzICovCisv KiBYWFg6IG1pc2xlYWRpbmcgbmFtZSAqLworI2RlZmluZSBEVUtfRU5VTV9TT1JUX0FSUkFZX0lO RElDRVMgICAgICAgKDFVIDw8IDYpICAgIC8qIHNvcnQgYXJyYXkgaW5kaWNlcyAoYXBwbGllZCB0 byBmdWxsIGVudW1lcmF0aW9uIHJlc3VsdCwgaW5jbHVkaW5nIGluaGVyaXRlZCBhcnJheSBpbmRp Y2VzKTsgWFhYOiBtaXNsZWFkaW5nIG5hbWUgKi8KKyNkZWZpbmUgRFVLX0VOVU1fTk9fUFJPWFlf QkVIQVZJT1IgICAgICAgICgxVSA8PCA3KSAgICAvKiBlbnVtZXJhdGUgYSBwcm94eSBvYmplY3Qg aXRzZWxmIHdpdGhvdXQgaW52b2tpbmcgcHJveHkgYmVoYXZpb3IgKi8KKworLyogQ29tcGlsYXRp b24gZmxhZ3MgZm9yIGR1a19jb21waWxlKCkgYW5kIGR1a19ldmFsKCkgKi8KKy8qIERVS19DT01Q SUxFX3h4eCBiaXRzIDAtMiBhcmUgcmVzZXJ2ZWQgZm9yIGFuIGludGVybmFsICduYXJncycgYXJn dW1lbnQuCisgKi8KKyNkZWZpbmUgRFVLX0NPTVBJTEVfRVZBTCAgICAgICAgICAgICAgICAgICgx VSA8PCAzKSAgICAvKiBjb21waWxlIGV2YWwgY29kZSAoaW5zdGVhZCBvZiBnbG9iYWwgY29kZSkg Ki8KKyNkZWZpbmUgRFVLX0NPTVBJTEVfRlVOQ1RJT04gICAgICAgICAgICAgICgxVSA8PCA0KSAg ICAvKiBjb21waWxlIGZ1bmN0aW9uIGNvZGUgKGluc3RlYWQgb2YgZ2xvYmFsIGNvZGUpICovCisj ZGVmaW5lIERVS19DT01QSUxFX1NUUklDVCAgICAgICAgICAgICAgICAoMVUgPDwgNSkgICAgLyog dXNlIHN0cmljdCAob3V0ZXIpIGNvbnRleHQgZm9yIGdsb2JhbCwgZXZhbCwgb3IgZnVuY3Rpb24g Y29kZSAqLworI2RlZmluZSBEVUtfQ09NUElMRV9TSEVCQU5HICAgICAgICAgICAgICAgKDFVIDw8 IDYpICAgIC8qIGFsbG93IHNoZWJhbmcgKCcjISAuLi4nKSBjb21tZW50IG9uIGZpcnN0IGxpbmUg b2Ygc291cmNlICovCisjZGVmaW5lIERVS19DT01QSUxFX1NBRkUgICAgICAgICAgICAgICAgICAo MVUgPDwgNykgICAgLyogKGludGVybmFsKSBjYXRjaCBjb21waWxhdGlvbiBlcnJvcnMgKi8KKyNk ZWZpbmUgRFVLX0NPTVBJTEVfTk9SRVNVTFQgICAgICAgICAgICAgICgxVSA8PCA4KSAgICAvKiAo aW50ZXJuYWwpIG9taXQgZXZhbCByZXN1bHQgKi8KKyNkZWZpbmUgRFVLX0NPTVBJTEVfTk9TT1VS Q0UgICAgICAgICAgICAgICgxVSA8PCA5KSAgICAvKiAoaW50ZXJuYWwpIG5vIHNvdXJjZSBzdHJp bmcgb24gc3RhY2sgKi8KKyNkZWZpbmUgRFVLX0NPTVBJTEVfU1RSTEVOICAgICAgICAgICAgICAg ICgxVSA8PCAxMCkgICAvKiAoaW50ZXJuYWwpIHRha2Ugc3RybGVuKCkgb2Ygc3JjX2J1ZmZlciAo YXZvaWRzIGRvdWJsZSBldmFsdWF0aW9uIGluIG1hY3JvKSAqLworI2RlZmluZSBEVUtfQ09NUElM RV9OT0ZJTEVOQU1FICAgICAgICAgICAgKDFVIDw8IDExKSAgIC8qIChpbnRlcm5hbCkgbm8gZmls ZW5hbWUgb24gc3RhY2sgKi8KKyNkZWZpbmUgRFVLX0NPTVBJTEVfRlVOQ0VYUFIgICAgICAgICAg ICAgICgxVSA8PCAxMikgICAvKiAoaW50ZXJuYWwpIHNvdXJjZSBpcyBhIGZ1bmN0aW9uIGV4cHJl c3Npb24gKHVzZWQgZm9yIEZ1bmN0aW9uIGNvbnN0cnVjdG9yKSAqLworCisvKiBGbGFncyBmb3Ig ZHVrX2RlZl9wcm9wKCkgYW5kIGl0cyB2YXJpYW50czsgYmFzZSBmbGFncyArIGEgbG90IG9mIGNv bnZlbmllbmNlIHNob3J0aGFuZHMgKi8KKyNkZWZpbmUgRFVLX0RFRlBST1BfV1JJVEFCTEUgICAg ICAgICAgICAgICgxVSA8PCAwKSAgICAvKiBzZXQgd3JpdGFibGUgKGVmZmVjdGl2ZSBpZiBEVUtf REVGUFJPUF9IQVZFX1dSSVRBQkxFIHNldCkgKi8KKyNkZWZpbmUgRFVLX0RFRlBST1BfRU5VTUVS QUJMRSAgICAgICAgICAgICgxVSA8PCAxKSAgICAvKiBzZXQgZW51bWVyYWJsZSAoZWZmZWN0aXZl IGlmIERVS19ERUZQUk9QX0hBVkVfRU5VTUVSQUJMRSBzZXQpICovCisjZGVmaW5lIERVS19ERUZQ Uk9QX0NPTkZJR1VSQUJMRSAgICAgICAgICAoMVUgPDwgMikgICAgLyogc2V0IGNvbmZpZ3VyYWJs ZSAoZWZmZWN0aXZlIGlmIERVS19ERUZQUk9QX0hBVkVfQ09ORklHVVJBQkxFIHNldCkgKi8KKyNk ZWZpbmUgRFVLX0RFRlBST1BfSEFWRV9XUklUQUJMRSAgICAgICAgICgxVSA8PCAzKSAgICAvKiBz ZXQvY2xlYXIgd3JpdGFibGUgKi8KKyNkZWZpbmUgRFVLX0RFRlBST1BfSEFWRV9FTlVNRVJBQkxF ICAgICAgICgxVSA8PCA0KSAgICAvKiBzZXQvY2xlYXIgZW51bWVyYWJsZSAqLworI2RlZmluZSBE VUtfREVGUFJPUF9IQVZFX0NPTkZJR1VSQUJMRSAgICAgKDFVIDw8IDUpICAgIC8qIHNldC9jbGVh ciBjb25maWd1cmFibGUgKi8KKyNkZWZpbmUgRFVLX0RFRlBST1BfSEFWRV9WQUxVRSAgICAgICAg ICAgICgxVSA8PCA2KSAgICAvKiBzZXQgdmFsdWUgKGdpdmVuIG9uIHZhbHVlIHN0YWNrKSAqLwor I2RlZmluZSBEVUtfREVGUFJPUF9IQVZFX0dFVFRFUiAgICAgICAgICAgKDFVIDw8IDcpICAgIC8q IHNldCBnZXR0ZXIgKGdpdmVuIG9uIHZhbHVlIHN0YWNrKSAqLworI2RlZmluZSBEVUtfREVGUFJP UF9IQVZFX1NFVFRFUiAgICAgICAgICAgKDFVIDw8IDgpICAgIC8qIHNldCBzZXR0ZXIgKGdpdmVu IG9uIHZhbHVlIHN0YWNrKSAqLworI2RlZmluZSBEVUtfREVGUFJPUF9GT1JDRSAgICAgICAgICAg ICAgICAgKDFVIDw8IDkpICAgIC8qIGZvcmNlIGNoYW5nZSBpZiBwb3NzaWJsZSwgbWF5IHN0aWxs IGZhaWwgZm9yIGUuZy4gdmlydHVhbCBwcm9wZXJ0aWVzICovCisjZGVmaW5lIERVS19ERUZQUk9Q X1NFVF9XUklUQUJMRSAgICAgICAgICAoRFVLX0RFRlBST1BfSEFWRV9XUklUQUJMRSB8IERVS19E RUZQUk9QX1dSSVRBQkxFKQorI2RlZmluZSBEVUtfREVGUFJPUF9DTEVBUl9XUklUQUJMRSAgICAg ICAgRFVLX0RFRlBST1BfSEFWRV9XUklUQUJMRQorI2RlZmluZSBEVUtfREVGUFJPUF9TRVRfRU5V TUVSQUJMRSAgICAgICAgKERVS19ERUZQUk9QX0hBVkVfRU5VTUVSQUJMRSB8IERVS19ERUZQUk9Q X0VOVU1FUkFCTEUpCisjZGVmaW5lIERVS19ERUZQUk9QX0NMRUFSX0VOVU1FUkFCTEUgICAgICBE VUtfREVGUFJPUF9IQVZFX0VOVU1FUkFCTEUKKyNkZWZpbmUgRFVLX0RFRlBST1BfU0VUX0NPTkZJ R1VSQUJMRSAgICAgIChEVUtfREVGUFJPUF9IQVZFX0NPTkZJR1VSQUJMRSB8IERVS19ERUZQUk9Q X0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX0RFRlBST1BfQ0xFQVJfQ09ORklHVVJBQkxFICAg IERVS19ERUZQUk9QX0hBVkVfQ09ORklHVVJBQkxFCisjZGVmaW5lIERVS19ERUZQUk9QX1cgICAg ICAgICAgICAgICAgICAgICBEVUtfREVGUFJPUF9XUklUQUJMRQorI2RlZmluZSBEVUtfREVGUFJP UF9FICAgICAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfRU5VTUVSQUJMRQorI2RlZmluZSBE VUtfREVGUFJPUF9DICAgICAgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfQ09ORklHVVJBQkxF CisjZGVmaW5lIERVS19ERUZQUk9QX1dFICAgICAgICAgICAgICAgICAgICAoRFVLX0RFRlBST1Bf V1JJVEFCTEUgfCBEVUtfREVGUFJPUF9FTlVNRVJBQkxFKQorI2RlZmluZSBEVUtfREVGUFJPUF9X QyAgICAgICAgICAgICAgICAgICAgKERVS19ERUZQUk9QX1dSSVRBQkxFIHwgRFVLX0RFRlBST1Bf Q09ORklHVVJBQkxFKQorI2RlZmluZSBEVUtfREVGUFJPUF9XRUMgICAgICAgICAgICAgICAgICAg KERVS19ERUZQUk9QX1dSSVRBQkxFIHwgRFVLX0RFRlBST1BfRU5VTUVSQUJMRSB8IERVS19ERUZQ Uk9QX0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX0RFRlBST1BfSEFWRV9XICAgICAgICAgICAg ICAgIERVS19ERUZQUk9QX0hBVkVfV1JJVEFCTEUKKyNkZWZpbmUgRFVLX0RFRlBST1BfSEFWRV9F ICAgICAgICAgICAgICAgIERVS19ERUZQUk9QX0hBVkVfRU5VTUVSQUJMRQorI2RlZmluZSBEVUtf REVGUFJPUF9IQVZFX0MgICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfSEFWRV9DT05GSUdVUkFC TEUKKyNkZWZpbmUgRFVLX0RFRlBST1BfSEFWRV9XRSAgICAgICAgICAgICAgIChEVUtfREVGUFJP UF9IQVZFX1dSSVRBQkxFIHwgRFVLX0RFRlBST1BfSEFWRV9FTlVNRVJBQkxFKQorI2RlZmluZSBE VUtfREVGUFJPUF9IQVZFX1dDICAgICAgICAgICAgICAgKERVS19ERUZQUk9QX0hBVkVfV1JJVEFC TEUgfCBEVUtfREVGUFJPUF9IQVZFX0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX0RFRlBST1Bf SEFWRV9XRUMgICAgICAgICAgICAgIChEVUtfREVGUFJPUF9IQVZFX1dSSVRBQkxFIHwgRFVLX0RF RlBST1BfSEFWRV9FTlVNRVJBQkxFIHwgRFVLX0RFRlBST1BfSEFWRV9DT05GSUdVUkFCTEUpCisj ZGVmaW5lIERVS19ERUZQUk9QX1NFVF9XICAgICAgICAgICAgICAgICBEVUtfREVGUFJPUF9TRVRf V1JJVEFCTEUKKyNkZWZpbmUgRFVLX0RFRlBST1BfU0VUX0UgICAgICAgICAgICAgICAgIERVS19E RUZQUk9QX1NFVF9FTlVNRVJBQkxFCisjZGVmaW5lIERVS19ERUZQUk9QX1NFVF9DICAgICAgICAg ICAgICAgICBEVUtfREVGUFJPUF9TRVRfQ09ORklHVVJBQkxFCisjZGVmaW5lIERVS19ERUZQUk9Q X1NFVF9XRSAgICAgICAgICAgICAgICAoRFVLX0RFRlBST1BfU0VUX1dSSVRBQkxFIHwgRFVLX0RF RlBST1BfU0VUX0VOVU1FUkFCTEUpCisjZGVmaW5lIERVS19ERUZQUk9QX1NFVF9XQyAgICAgICAg ICAgICAgICAoRFVLX0RFRlBST1BfU0VUX1dSSVRBQkxFIHwgRFVLX0RFRlBST1BfU0VUX0NPTkZJ R1VSQUJMRSkKKyNkZWZpbmUgRFVLX0RFRlBST1BfU0VUX1dFQyAgICAgICAgICAgICAgIChEVUtf REVGUFJPUF9TRVRfV1JJVEFCTEUgfCBEVUtfREVGUFJPUF9TRVRfRU5VTUVSQUJMRSB8IERVS19E RUZQUk9QX1NFVF9DT05GSUdVUkFCTEUpCisjZGVmaW5lIERVS19ERUZQUk9QX0NMRUFSX1cgICAg ICAgICAgICAgICBEVUtfREVGUFJPUF9DTEVBUl9XUklUQUJMRQorI2RlZmluZSBEVUtfREVGUFJP UF9DTEVBUl9FICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfQ0xFQVJfRU5VTUVSQUJMRQorI2Rl ZmluZSBEVUtfREVGUFJPUF9DTEVBUl9DICAgICAgICAgICAgICAgRFVLX0RFRlBST1BfQ0xFQVJf Q09ORklHVVJBQkxFCisjZGVmaW5lIERVS19ERUZQUk9QX0NMRUFSX1dFICAgICAgICAgICAgICAo RFVLX0RFRlBST1BfQ0xFQVJfV1JJVEFCTEUgfCBEVUtfREVGUFJPUF9DTEVBUl9FTlVNRVJBQkxF KQorI2RlZmluZSBEVUtfREVGUFJPUF9DTEVBUl9XQyAgICAgICAgICAgICAgKERVS19ERUZQUk9Q X0NMRUFSX1dSSVRBQkxFIHwgRFVLX0RFRlBST1BfQ0xFQVJfQ09ORklHVVJBQkxFKQorI2RlZmlu ZSBEVUtfREVGUFJPUF9DTEVBUl9XRUMgICAgICAgICAgICAgKERVS19ERUZQUk9QX0NMRUFSX1dS SVRBQkxFIHwgRFVLX0RFRlBST1BfQ0xFQVJfRU5VTUVSQUJMRSB8IERVS19ERUZQUk9QX0NMRUFS X0NPTkZJR1VSQUJMRSkKKyNkZWZpbmUgRFVLX0RFRlBST1BfQVRUUl9XICAgICAgICAgICAgICAg IChEVUtfREVGUFJPUF9IQVZFX1dFQyB8IERVS19ERUZQUk9QX1cpCisjZGVmaW5lIERVS19ERUZQ Uk9QX0FUVFJfRSAgICAgICAgICAgICAgICAoRFVLX0RFRlBST1BfSEFWRV9XRUMgfCBEVUtfREVG UFJPUF9FKQorI2RlZmluZSBEVUtfREVGUFJPUF9BVFRSX0MgICAgICAgICAgICAgICAgKERVS19E RUZQUk9QX0hBVkVfV0VDIHwgRFVLX0RFRlBST1BfQykKKyNkZWZpbmUgRFVLX0RFRlBST1BfQVRU Ul9XRSAgICAgICAgICAgICAgIChEVUtfREVGUFJPUF9IQVZFX1dFQyB8IERVS19ERUZQUk9QX1dF KQorI2RlZmluZSBEVUtfREVGUFJPUF9BVFRSX1dDICAgICAgICAgICAgICAgKERVS19ERUZQUk9Q X0hBVkVfV0VDIHwgRFVLX0RFRlBST1BfV0MpCisjZGVmaW5lIERVS19ERUZQUk9QX0FUVFJfV0VD ICAgICAgICAgICAgICAoRFVLX0RFRlBST1BfSEFWRV9XRUMgfCBEVUtfREVGUFJPUF9XRUMpCisK Ky8qIEZsYWdzIGZvciBkdWtfcHVzaF90aHJlYWRfcmF3KCkgKi8KKyNkZWZpbmUgRFVLX1RIUkVB RF9ORVdfR0xPQkFMX0VOViAgICAgICAgICgxVSA8PCAwKSAgICAvKiBjcmVhdGUgYSBuZXcgZ2xv YmFsIGVudmlyb25tZW50ICovCisKKy8qIEZsYWdzIGZvciBkdWtfZ2MoKSAqLworI2RlZmluZSBE VUtfR0NfQ09NUEFDVCAgICAgICAgICAgICAgICAgICAgKDFVIDw8IDApICAgIC8qIGNvbXBhY3Qg aGVhcCBvYmplY3RzICovCisKKy8qIEVycm9yIGNvZGVzIChtdXN0IGJlIDggYml0cyBhdCBtb3N0 LCBzZWUgZHVrX2Vycm9yLmgpICovCisjZGVmaW5lIERVS19FUlJfTk9ORSAgICAgICAgICAgICAg ICAgICAgICAwICAgIC8qIG5vIGVycm9yIChlLmcuIGZyb20gZHVrX2dldF9lcnJvcl9jb2RlKCkp ICovCisjZGVmaW5lIERVS19FUlJfRVJST1IgICAgICAgICAgICAgICAgICAgICAxICAgIC8qIEVy cm9yICovCisjZGVmaW5lIERVS19FUlJfRVZBTF9FUlJPUiAgICAgICAgICAgICAgICAyICAgIC8q IEV2YWxFcnJvciAqLworI2RlZmluZSBEVUtfRVJSX1JBTkdFX0VSUk9SICAgICAgICAgICAgICAg MyAgICAvKiBSYW5nZUVycm9yICovCisjZGVmaW5lIERVS19FUlJfUkVGRVJFTkNFX0VSUk9SICAg ICAgICAgICA0ICAgIC8qIFJlZmVyZW5jZUVycm9yICovCisjZGVmaW5lIERVS19FUlJfU1lOVEFY X0VSUk9SICAgICAgICAgICAgICA1ICAgIC8qIFN5bnRheEVycm9yICovCisjZGVmaW5lIERVS19F UlJfVFlQRV9FUlJPUiAgICAgICAgICAgICAgICA2ICAgIC8qIFR5cGVFcnJvciAqLworI2RlZmlu ZSBEVUtfRVJSX1VSSV9FUlJPUiAgICAgICAgICAgICAgICAgNyAgICAvKiBVUklFcnJvciAqLwor CisvKiBSZXR1cm4gY29kZXMgZm9yIEMgZnVuY3Rpb25zIChzaG9ydGN1dCBmb3IgdGhyb3dpbmcg YW4gZXJyb3IpICovCisjZGVmaW5lIERVS19SRVRfRVJST1IgICAgICAgICAgICAgICAgICAgICAo LURVS19FUlJfRVJST1IpCisjZGVmaW5lIERVS19SRVRfRVZBTF9FUlJPUiAgICAgICAgICAgICAg ICAoLURVS19FUlJfRVZBTF9FUlJPUikKKyNkZWZpbmUgRFVLX1JFVF9SQU5HRV9FUlJPUiAgICAg ICAgICAgICAgICgtRFVLX0VSUl9SQU5HRV9FUlJPUikKKyNkZWZpbmUgRFVLX1JFVF9SRUZFUkVO Q0VfRVJST1IgICAgICAgICAgICgtRFVLX0VSUl9SRUZFUkVOQ0VfRVJST1IpCisjZGVmaW5lIERV S19SRVRfU1lOVEFYX0VSUk9SICAgICAgICAgICAgICAoLURVS19FUlJfU1lOVEFYX0VSUk9SKQor I2RlZmluZSBEVUtfUkVUX1RZUEVfRVJST1IgICAgICAgICAgICAgICAgKC1EVUtfRVJSX1RZUEVf RVJST1IpCisjZGVmaW5lIERVS19SRVRfVVJJX0VSUk9SICAgICAgICAgICAgICAgICAoLURVS19F UlJfVVJJX0VSUk9SKQorCisvKiBSZXR1cm4gY29kZXMgZm9yIHByb3RlY3RlZCBjYWxscyAoZHVr X3NhZmVfY2FsbCgpLCBkdWtfcGNhbGwoKSkgKi8KKyNkZWZpbmUgRFVLX0VYRUNfU1VDQ0VTUyAg ICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVLX0VYRUNfRVJST1IgICAgICAgICAgICAgICAg ICAgIDEKKworLyogRGVidWcgbGV2ZWxzIGZvciBEVUtfVVNFX0RFQlVHX1dSSVRFKCkuICovCisj ZGVmaW5lIERVS19MRVZFTF9ERUJVRyAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERVS19M RVZFTF9EREVCVUcgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIERVS19MRVZFTF9ERERFQlVH ICAgICAgICAgICAgICAgICAyCisKKy8qCisgKiAgTWFjcm9zIHRvIGNyZWF0ZSBTeW1ib2xzIGFz IEMgc3RhdGljYWxseSBjb25zdHJ1Y3RlZCBzdHJpbmdzLgorICoKKyAqICBDYWxsIGUuZy4gYXMg RFVLX0hJRERFTl9TWU1CT0woIm15UHJvcGVydHkiKSA8PT4gKCJceEZGIiAibXlQcm9wZXJ0eSIp LgorICogIExvY2FsIHN5bWJvbHMgaGF2ZSBhIHVuaXF1ZSBzdWZmaXgsIGNhbGxlciBzaG91bGQg dGFrZSBjYXJlIHRvIGF2b2lkCisgKiAgY29uZmxpY3Rpbmcgd2l0aCB0aGUgRHVrdGFwZSBpbnRl cm5hbCByZXByZXNlbnRhdGlvbiBieSBlLmcuIHByZXBlbmRpbmcKKyAqICBhICchJyBjaGFyYWN0 ZXI6IERVS19MT0NBTF9TWU1CT0woIm15TG9jYWwiLCAiITEyMyIpLgorICoKKyAqICBOb3RlIHRo YXQgdGhlc2UgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc3RyaW5nIGNvbnN0YW50cywgbm90IGR5bmFt aWNhbGx5CisgKiAgY3JlYXRlZCBzdHJpbmdzLgorICovCisKKyNkZWZpbmUgRFVLX0hJRERFTl9T WU1CT0woeCkgICAgICgiXHhGRiIgeCkKKyNkZWZpbmUgRFVLX0dMT0JBTF9TWU1CT0woeCkgICAg ICgiXHg4MCIgeCkKKyNkZWZpbmUgRFVLX0xPQ0FMX1NZTUJPTCh4LHVuaXEpICgiXHg4MSIgeCAi XHhmZiIgdW5pcSkKKyNkZWZpbmUgRFVLX1dFTExLTk9XTl9TWU1CT0woeCkgICgiXHg4MSIgeCAi XHhmZiIpCisKKy8qCisgKiAgSWYgbm8gdmFyaWFkaWMgbWFjcm9zLCBfX0ZJTEVfXyBhbmQgX19M SU5FX18gYXJlIHBhc3NlZCB0aHJvdWdoIGdsb2JhbHMKKyAqICB3aGljaCBpcyB1Z2x5IGFuZCBu b3QgdGhyZWFkIHNhZmUuCisgKi8KKworI2lmICFkZWZpbmVkKERVS19BUElfVkFSSUFESUNfTUFD Uk9TKQorRFVLX0VYVEVSTkFMX0RFQ0wgY29uc3QgY2hhciAqZHVrX2FwaV9nbG9iYWxfZmlsZW5h bWU7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX2FwaV9nbG9iYWxfbGluZTsKKyNl bmRpZgorCisvKgorICogIENvbnRleHQgbWFuYWdlbWVudAorICovCisKK0RVS19FWFRFUk5BTF9E RUNMCitkdWtfY29udGV4dCAqZHVrX2NyZWF0ZV9oZWFwKGR1a19hbGxvY19mdW5jdGlvbiBhbGxv Y19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWtfcmVhbGxvY19mdW5jdGlv biByZWFsbG9jX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19mcmVlX2Z1 bmN0aW9uIGZyZWVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGVh cF91ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2ZhdGFsX2Z1bmN0aW9u IGZhdGFsX2hhbmRsZXIpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVzdHJveV9oZWFw KGR1a19jb250ZXh0ICpjdHgpOworCitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19zdXNwZW5k KGR1a19jb250ZXh0ICpjdHgsIGR1a190aHJlYWRfc3RhdGUgKnN0YXRlKTsKK0RVS19FWFRFUk5B TF9ERUNMIHZvaWQgZHVrX3Jlc3VtZShkdWtfY29udGV4dCAqY3R4LCBjb25zdCBkdWtfdGhyZWFk X3N0YXRlICpzdGF0ZSk7CisKKyNkZWZpbmUgZHVrX2NyZWF0ZV9oZWFwX2RlZmF1bHQoKSBcCisJ ZHVrX2NyZWF0ZV9oZWFwKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisKKy8qCisgKiAg TWVtb3J5IG1hbmFnZW1lbnQKKyAqCisgKiAgUmF3IGZ1bmN0aW9ucyBoYXZlIG5vIHNpZGUgZWZm ZWN0cyAoY2Fubm90IHRyaWdnZXIgR0MpLgorICovCisKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQg KmR1a19hbGxvY19yYXcoZHVrX2NvbnRleHQgKmN0eCwgZHVrX3NpemVfdCBzaXplKTsKK0RVS19F WFRFUk5BTF9ERUNMIHZvaWQgZHVrX2ZyZWVfcmF3KGR1a19jb250ZXh0ICpjdHgsIHZvaWQgKnB0 cik7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfcmVhbGxvY19yYXcoZHVrX2NvbnRleHQg KmN0eCwgdm9pZCAqcHRyLCBkdWtfc2l6ZV90IHNpemUpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9p ZCAqZHVrX2FsbG9jKGR1a19jb250ZXh0ICpjdHgsIGR1a19zaXplX3Qgc2l6ZSk7CitEVUtfRVhU RVJOQUxfREVDTCB2b2lkIGR1a19mcmVlKGR1a19jb250ZXh0ICpjdHgsIHZvaWQgKnB0cik7CitE VUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfcmVhbGxvYyhkdWtfY29udGV4dCAqY3R4LCB2b2lk ICpwdHIsIGR1a19zaXplX3Qgc2l6ZSk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19nZXRf bWVtb3J5X2Z1bmN0aW9ucyhkdWtfY29udGV4dCAqY3R4LCBkdWtfbWVtb3J5X2Z1bmN0aW9ucyAq b3V0X2Z1bmNzKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2djKGR1a19jb250ZXh0ICpj dHgsIGR1a191aW50X3QgZmxhZ3MpOworCisvKgorICogIEVycm9yIGhhbmRsaW5nCisgKi8KKwor RFVLX0FQSV9OT1JFVFVSTihEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a190aHJvd19yYXcoZHVr X2NvbnRleHQgKmN0eCkpOworI2RlZmluZSBkdWtfdGhyb3coY3R4KSBcCisJKGR1a190aHJvd19y YXcoKGN0eCkpLCAoZHVrX3JldF90KSAwKQorRFVLX0FQSV9OT1JFVFVSTihEVUtfRVhURVJOQUxf REVDTCB2b2lkIGR1a19mYXRhbF9yYXcoZHVrX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqZXJy X21zZykpOworI2RlZmluZSBkdWtfZmF0YWwoY3R4LGVycl9tc2cpIFwKKwkoZHVrX2ZhdGFsX3Jh dygoY3R4KSwgKGVycl9tc2cpKSwgKGR1a19yZXRfdCkgMCkKK0RVS19BUElfTk9SRVRVUk4oRFVL X0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyb3JfcmF3KGR1a19jb250ZXh0ICpjdHgsIGR1a19l cnJjb2RlX3QgZXJyX2NvZGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGluZSwg Y29uc3QgY2hhciAqZm10LCAuLi4pKTsKKworI2lmIGRlZmluZWQoRFVLX0FQSV9WQVJJQURJQ19N QUNST1MpCisjZGVmaW5lIGR1a19lcnJvcihjdHgsZXJyX2NvZGUsLi4uKSAgXAorCShkdWtfZXJy b3JfcmF3KChjdHgpLCAoZHVrX2VycmNvZGVfdCkgKGVycl9jb2RlKSwgKGNvbnN0IGNoYXIgKikg KERVS19GSUxFX01BQ1JPKSwgKGR1a19pbnRfdCkgKERVS19MSU5FX01BQ1JPKSwgX19WQV9BUkdT X18pLCAoZHVrX3JldF90KSAwKQorI2RlZmluZSBkdWtfZ2VuZXJpY19lcnJvcihjdHgsLi4uKSAg XAorCShkdWtfZXJyb3JfcmF3KChjdHgpLCAoZHVrX2VycmNvZGVfdCkgRFVLX0VSUl9FUlJPUiwg KGNvbnN0IGNoYXIgKikgKERVS19GSUxFX01BQ1JPKSwgKGR1a19pbnRfdCkgKERVS19MSU5FX01B Q1JPKSwgX19WQV9BUkdTX18pLCAoZHVrX3JldF90KSAwKQorI2RlZmluZSBkdWtfZXZhbF9lcnJv cihjdHgsLi4uKSAgXAorCShkdWtfZXJyb3JfcmF3KChjdHgpLCAoZHVrX2VycmNvZGVfdCkgRFVL X0VSUl9FVkFMX0VSUk9SLCAoY29uc3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCAoZHVrX2lu dF90KSAoRFVLX0xJTkVfTUFDUk8pLCBfX1ZBX0FSR1NfXyksIChkdWtfcmV0X3QpIDApCisjZGVm aW5lIGR1a19yYW5nZV9lcnJvcihjdHgsLi4uKSAgXAorCShkdWtfZXJyb3JfcmF3KChjdHgpLCAo ZHVrX2VycmNvZGVfdCkgRFVLX0VSUl9SQU5HRV9FUlJPUiwgKGNvbnN0IGNoYXIgKikgKERVS19G SUxFX01BQ1JPKSwgKGR1a19pbnRfdCkgKERVS19MSU5FX01BQ1JPKSwgX19WQV9BUkdTX18pLCAo ZHVrX3JldF90KSAwKQorI2RlZmluZSBkdWtfcmVmZXJlbmNlX2Vycm9yKGN0eCwuLi4pICBcCisJ KGR1a19lcnJvcl9yYXcoKGN0eCksIChkdWtfZXJyY29kZV90KSBEVUtfRVJSX1JFRkVSRU5DRV9F UlJPUiwgKGNvbnN0IGNoYXIgKikgKERVS19GSUxFX01BQ1JPKSwgKGR1a19pbnRfdCkgKERVS19M SU5FX01BQ1JPKSwgX19WQV9BUkdTX18pLCAoZHVrX3JldF90KSAwKQorI2RlZmluZSBkdWtfc3lu dGF4X2Vycm9yKGN0eCwuLi4pICBcCisJKGR1a19lcnJvcl9yYXcoKGN0eCksIChkdWtfZXJyY29k ZV90KSBEVUtfRVJSX1NZTlRBWF9FUlJPUiwgKGNvbnN0IGNoYXIgKikgKERVS19GSUxFX01BQ1JP KSwgKGR1a19pbnRfdCkgKERVS19MSU5FX01BQ1JPKSwgX19WQV9BUkdTX18pLCAoZHVrX3JldF90 KSAwKQorI2RlZmluZSBkdWtfdHlwZV9lcnJvcihjdHgsLi4uKSAgXAorCShkdWtfZXJyb3JfcmF3 KChjdHgpLCAoZHVrX2VycmNvZGVfdCkgRFVLX0VSUl9UWVBFX0VSUk9SLCAoY29uc3QgY2hhciAq KSAoRFVLX0ZJTEVfTUFDUk8pLCAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCBfX1ZBX0FS R1NfXyksIChkdWtfcmV0X3QpIDApCisjZGVmaW5lIGR1a191cmlfZXJyb3IoY3R4LC4uLikgIFwK KwkoZHVrX2Vycm9yX3JhdygoY3R4KSwgKGR1a19lcnJjb2RlX3QpIERVS19FUlJfVVJJX0VSUk9S LCAoY29uc3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCAoZHVrX2ludF90KSAoRFVLX0xJTkVf TUFDUk8pLCBfX1ZBX0FSR1NfXyksIChkdWtfcmV0X3QpIDApCisjZWxzZSAgLyogRFVLX0FQSV9W QVJJQURJQ19NQUNST1MgKi8KKy8qIEZvciBsZWdhY3kgY29tcGlsZXJzIHdpdGhvdXQgdmFyaWFk aWMgbWFjcm9zIGEgbWFjcm8gaGFjayBpcyB1c2VkIHRvIGFsbG93CisgKiB2YXJpYWJsZSBhcmd1 bWVudHMuICBXaGlsZSB0aGUgbWFjcm8gYWxsb3dzICJyZXR1cm4gZHVrX2Vycm9yKC4uLikiLCBp dAorICogd2lsbCBmYWlsIHdpdGggZS5nLiAiKHZvaWQpIGR1a19lcnJvciguLi4pIi4gIFRoZSBj YWxscyBhcmUgbm9yZXR1cm4gYnV0CisgKiB3aXRoIGEgcmV0dXJuIHZhbHVlIHRvIGFsbG93IHRo ZSAicmV0dXJuIGR1a19lcnJvciguLi4pIiBpZGlvbS4gIFRoaXMgbWF5CisgKiBjYXVzZSBzb21l IGNvbXBpbGVyIHdhcm5pbmdzLCBidXQgd2l0aG91dCBub3JldHVybiB0aGUgZ2VuZXJhdGVkIGNv ZGUgaXMKKyAqIG9mdGVuIHdvcnNlLiAgVGhlIHNhbWUgYXBwcm9hY2ggYXMgd2l0aCB2YXJpYWRp YyBtYWNyb3MgKHVzaW5nCisgKiAiKGR1a19lcnJvciguLi4pLCAwKSIpIHdvbid0IHdvcmsgZHVl IHRvIHRoZSBtYWNybyBoYWNrIHN0cnVjdHVyZS4KKyAqLworRFVLX0FQSV9OT1JFVFVSTihEVUtf RVhURVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2Vycm9yX3N0YXNoKGR1a19jb250ZXh0ICpjdHgs IGR1a19lcnJjb2RlX3QgZXJyX2NvZGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSk7CitEVUtfQVBJ X05PUkVUVVJOKERVS19FWFRFUk5BTF9ERUNMIGR1a19yZXRfdCBkdWtfZ2VuZXJpY19lcnJvcl9z dGFzaChkdWtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIC4uLikpOworRFVLX0FQSV9O T1JFVFVSTihEVUtfRVhURVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX2V2YWxfZXJyb3Jfc3Rhc2go ZHVrX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqZm10LCAuLi4pKTsKK0RVS19BUElfTk9SRVRV Uk4oRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX3JldF90IGR1a19yYW5nZV9lcnJvcl9zdGFzaChkdWtf Y29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIC4uLikpOworRFVLX0FQSV9OT1JFVFVSTihE VUtfRVhURVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX3JlZmVyZW5jZV9lcnJvcl9zdGFzaChkdWtf Y29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIC4uLikpOworRFVLX0FQSV9OT1JFVFVSTihE VUtfRVhURVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX3N5bnRheF9lcnJvcl9zdGFzaChkdWtfY29u dGV4dCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIC4uLikpOworRFVLX0FQSV9OT1JFVFVSTihEVUtf RVhURVJOQUxfREVDTCBkdWtfcmV0X3QgZHVrX3R5cGVfZXJyb3Jfc3Rhc2goZHVrX2NvbnRleHQg KmN0eCwgY29uc3QgY2hhciAqZm10LCAuLi4pKTsKK0RVS19BUElfTk9SRVRVUk4oRFVLX0VYVEVS TkFMX0RFQ0wgZHVrX3JldF90IGR1a191cmlfZXJyb3Jfc3Rhc2goZHVrX2NvbnRleHQgKmN0eCwg Y29uc3QgY2hhciAqZm10LCAuLi4pKTsKKyNkZWZpbmUgZHVrX2Vycm9yICBcCisJKGR1a19hcGlf Z2xvYmFsX2ZpbGVuYW1lID0gKGNvbnN0IGNoYXIgKikgKERVS19GSUxFX01BQ1JPKSwgXAorCSBk dWtfYXBpX2dsb2JhbF9saW5lID0gKGR1a19pbnRfdCkgKERVS19MSU5FX01BQ1JPKSwgXAorCSBk dWtfZXJyb3Jfc3Rhc2gpICAvKiBsYXN0IHZhbHVlIGlzIGZ1bmMgcG9pbnRlciwgYXJndW1lbnRz IGZvbGxvdyBpbiBwYXJlbnMgKi8KKyNkZWZpbmUgZHVrX2dlbmVyaWNfZXJyb3IgIFwKKwkoZHVr X2FwaV9nbG9iYWxfZmlsZW5hbWUgPSAoY29uc3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCBc CisJIGR1a19hcGlfZ2xvYmFsX2xpbmUgPSAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCBc CisJIGR1a19nZW5lcmljX2Vycm9yX3N0YXNoKQorI2RlZmluZSBkdWtfZXZhbF9lcnJvciAgXAor CShkdWtfYXBpX2dsb2JhbF9maWxlbmFtZSA9IChjb25zdCBjaGFyICopIChEVUtfRklMRV9NQUNS TyksIFwKKwkgZHVrX2FwaV9nbG9iYWxfbGluZSA9IChkdWtfaW50X3QpIChEVUtfTElORV9NQUNS TyksIFwKKwkgZHVrX2V2YWxfZXJyb3Jfc3Rhc2gpCisjZGVmaW5lIGR1a19yYW5nZV9lcnJvciAg XAorCShkdWtfYXBpX2dsb2JhbF9maWxlbmFtZSA9IChjb25zdCBjaGFyICopIChEVUtfRklMRV9N QUNSTyksIFwKKwkgZHVrX2FwaV9nbG9iYWxfbGluZSA9IChkdWtfaW50X3QpIChEVUtfTElORV9N QUNSTyksIFwKKwkgZHVrX3JhbmdlX2Vycm9yX3N0YXNoKQorI2RlZmluZSBkdWtfcmVmZXJlbmNl X2Vycm9yICBcCisJKGR1a19hcGlfZ2xvYmFsX2ZpbGVuYW1lID0gKGNvbnN0IGNoYXIgKikgKERV S19GSUxFX01BQ1JPKSwgXAorCSBkdWtfYXBpX2dsb2JhbF9saW5lID0gKGR1a19pbnRfdCkgKERV S19MSU5FX01BQ1JPKSwgXAorCSBkdWtfcmVmZXJlbmNlX2Vycm9yX3N0YXNoKQorI2RlZmluZSBk dWtfc3ludGF4X2Vycm9yICBcCisJKGR1a19hcGlfZ2xvYmFsX2ZpbGVuYW1lID0gKGNvbnN0IGNo YXIgKikgKERVS19GSUxFX01BQ1JPKSwgXAorCSBkdWtfYXBpX2dsb2JhbF9saW5lID0gKGR1a19p bnRfdCkgKERVS19MSU5FX01BQ1JPKSwgXAorCSBkdWtfc3ludGF4X2Vycm9yX3N0YXNoKQorI2Rl ZmluZSBkdWtfdHlwZV9lcnJvciAgXAorCShkdWtfYXBpX2dsb2JhbF9maWxlbmFtZSA9IChjb25z dCBjaGFyICopIChEVUtfRklMRV9NQUNSTyksIFwKKwkgZHVrX2FwaV9nbG9iYWxfbGluZSA9IChk dWtfaW50X3QpIChEVUtfTElORV9NQUNSTyksIFwKKwkgZHVrX3R5cGVfZXJyb3Jfc3Rhc2gpCisj ZGVmaW5lIGR1a191cmlfZXJyb3IgIFwKKwkoZHVrX2FwaV9nbG9iYWxfZmlsZW5hbWUgPSAoY29u c3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCBcCisJIGR1a19hcGlfZ2xvYmFsX2xpbmUgPSAo ZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCBcCisJIGR1a191cmlfZXJyb3Jfc3Rhc2gpCisj ZW5kaWYgIC8qIERVS19BUElfVkFSSUFESUNfTUFDUk9TICovCisKK0RVS19BUElfTk9SRVRVUk4o RFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZXJyb3JfdmFfcmF3KGR1a19jb250ZXh0ICpjdHgs IGR1a19lcnJjb2RlX3QgZXJyX2NvZGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3Qg bGluZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKSk7CisKKyNkZWZpbmUgZHVrX2Vycm9y X3ZhKGN0eCxlcnJfY29kZSxmbXQsYXApICBcCisJKGR1a19lcnJvcl92YV9yYXcoKGN0eCksIChk dWtfZXJyY29kZV90KSAoZXJyX2NvZGUpLCAoY29uc3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8p LCAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCAoZm10KSwgKGFwKSksIChkdWtfcmV0X3Qp IDApCisjZGVmaW5lIGR1a19nZW5lcmljX2Vycm9yX3ZhKGN0eCxmbXQsYXApICBcCisJKGR1a19l cnJvcl92YV9yYXcoKGN0eCksIChkdWtfZXJyY29kZV90KSBEVUtfRVJSX0VSUk9SLCAoY29uc3Qg Y2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCAo Zm10KSwgKGFwKSksIChkdWtfcmV0X3QpIDApCisjZGVmaW5lIGR1a19ldmFsX2Vycm9yX3ZhKGN0 eCxmbXQsYXApICBcCisJKGR1a19lcnJvcl92YV9yYXcoKGN0eCksIChkdWtfZXJyY29kZV90KSBE VUtfRVJSX0VWQUxfRVJST1IsIChjb25zdCBjaGFyICopIChEVUtfRklMRV9NQUNSTyksIChkdWtf aW50X3QpIChEVUtfTElORV9NQUNSTyksIChmbXQpLCAoYXApKSwgKGR1a19yZXRfdCkgMCkKKyNk ZWZpbmUgZHVrX3JhbmdlX2Vycm9yX3ZhKGN0eCxmbXQsYXApICBcCisJKGR1a19lcnJvcl92YV9y YXcoKGN0eCksIChkdWtfZXJyY29kZV90KSBEVUtfRVJSX1JBTkdFX0VSUk9SLCAoY29uc3QgY2hh ciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCAoZm10 KSwgKGFwKSksIChkdWtfcmV0X3QpIDApCisjZGVmaW5lIGR1a19yZWZlcmVuY2VfZXJyb3JfdmEo Y3R4LGZtdCxhcCkgIFwKKwkoZHVrX2Vycm9yX3ZhX3JhdygoY3R4KSwgKGR1a19lcnJjb2RlX3Qp IERVS19FUlJfUkVGRVJFTkNFX0VSUk9SLCAoY29uc3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8p LCAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFDUk8pLCAoZm10KSwgKGFwKSksIChkdWtfcmV0X3Qp IDApCisjZGVmaW5lIGR1a19zeW50YXhfZXJyb3JfdmEoY3R4LGZtdCxhcCkgIFwKKwkoZHVrX2Vy cm9yX3ZhX3JhdygoY3R4KSwgKGR1a19lcnJjb2RlX3QpIERVS19FUlJfU1lOVEFYX0VSUk9SLCAo Y29uc3QgY2hhciAqKSAoRFVLX0ZJTEVfTUFDUk8pLCAoZHVrX2ludF90KSAoRFVLX0xJTkVfTUFD Uk8pLCAoZm10KSwgKGFwKSksIChkdWtfcmV0X3QpIDApCisjZGVmaW5lIGR1a190eXBlX2Vycm9y X3ZhKGN0eCxmbXQsYXApICBcCisJKGR1a19lcnJvcl92YV9yYXcoKGN0eCksIChkdWtfZXJyY29k ZV90KSBEVUtfRVJSX1RZUEVfRVJST1IsIChjb25zdCBjaGFyICopIChEVUtfRklMRV9NQUNSTyks IChkdWtfaW50X3QpIChEVUtfTElORV9NQUNSTyksIChmbXQpLCAoYXApKSwgKGR1a19yZXRfdCkg MCkKKyNkZWZpbmUgZHVrX3VyaV9lcnJvcl92YShjdHgsZm10LGFwKSAgXAorCShkdWtfZXJyb3Jf dmFfcmF3KChjdHgpLCAoZHVrX2VycmNvZGVfdCkgRFVLX0VSUl9VUklfRVJST1IsIChjb25zdCBj aGFyICopIChEVUtfRklMRV9NQUNSTyksIChkdWtfaW50X3QpIChEVUtfTElORV9NQUNSTyksIChm bXQpLCAoYXApKSwgKGR1a19yZXRfdCkgMCkKKworLyoKKyAqICBPdGhlciBzdGF0ZSByZWxhdGVk IGZ1bmN0aW9ucworICovCisKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2lzX3N0 cmljdF9jYWxsKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfaXNfY29uc3RydWN0b3JfY2FsbChkdWtfY29udGV4dCAqY3R4KTsKKworLyoKKyAqICBT dGFjayBtYW5hZ2VtZW50CisgKi8KKworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2lkeF90IGR1a19u b3JtYWxpemVfaW5kZXgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhU RVJOQUxfREVDTCBkdWtfaWR4X3QgZHVrX3JlcXVpcmVfbm9ybWFsaXplX2luZGV4KGR1a19jb250 ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBk dWtfaXNfdmFsaWRfaW5kZXgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtf RVhURVJOQUxfREVDTCB2b2lkIGR1a19yZXF1aXJlX3ZhbGlkX2luZGV4KGR1a19jb250ZXh0ICpj dHgsIGR1a19pZHhfdCBpZHgpOworCitEVUtfRVhURVJOQUxfREVDTCBkdWtfaWR4X3QgZHVrX2dl dF90b3AoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19zZXRf dG9wKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wg ZHVrX2lkeF90IGR1a19nZXRfdG9wX2luZGV4KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVS TkFMX0RFQ0wgZHVrX2lkeF90IGR1a19yZXF1aXJlX3RvcF9pbmRleChkdWtfY29udGV4dCAqY3R4 KTsKKworLyogQWx0aG91Z2ggZXh0cmEvdG9wIGNvdWxkIGJlIGFuIHVuc2lnbmVkIHR5cGUgaGVy ZSwgdXNpbmcgYSBzaWduZWQgdHlwZQorICogbWFrZXMgdGhlIEFQSSBtb3JlIHJvYnVzdCB0byBj YWxsaW5nIGNvZGUgY2FsY3VsYXRpb24gZXJyb3JzIG9yIGNvcm5lcgorICogY2FzZXMgKHdoZXJl IGNhbGxlciBtaWdodCBvY2Nhc2lvbmFsbHkgY29tZSB1cCB3aXRoIG5lZ2F0aXZlIHZhbHVlcyku CisgKiBOZWdhdGl2ZSB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgemVybywgd2hpY2ggaXMgYmV0dGVy IHRoYW4gY2FzdGluZyB0aGVtCisgKiB0byBhIGxhcmdlIHVuc2lnbmVkIG51bWJlci4gIChUaGlz IHByaW5jaXBsZSBpcyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUKKyAqIEFQSSB0b28uKQorICovCitE VUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19jaGVja19zdGFjayhkdWtfY29udGV4dCAq Y3R4LCBkdWtfaWR4X3QgZXh0cmEpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVxdWly ZV9zdGFjayhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgZXh0cmEpOworRFVLX0VYVEVSTkFM X0RFQ0wgZHVrX2Jvb2xfdCBkdWtfY2hlY2tfc3RhY2tfdG9wKGR1a19jb250ZXh0ICpjdHgsIGR1 a19pZHhfdCB0b3ApOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVxdWlyZV9zdGFja190 b3AoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IHRvcCk7CisKKy8qCisgKiAgU3RhY2sgbWFu aXB1bGF0aW9uIChvdGhlciB0aGFuIHB1c2gvcG9wKQorICovCisKK0RVS19FWFRFUk5BTF9ERUNM IHZvaWQgZHVrX3N3YXAoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeDEsIGR1a19pZHhf dCBpZHgyKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3N3YXBfdG9wKGR1a19jb250ZXh0 ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZHVwKGR1 a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBmcm9tX2lkeCk7CitEVUtfRVhURVJOQUxfREVDTCB2 b2lkIGR1a19kdXBfdG9wKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9p ZCBkdWtfaW5zZXJ0KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCB0b19pZHgpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVwbGFjZShkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qg dG9faWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2NvcHkoZHVrX2NvbnRleHQgKmN0 eCwgZHVrX2lkeF90IGZyb21faWR4LCBkdWtfaWR4X3QgdG9faWR4KTsKK0RVS19FWFRFUk5BTF9E RUNMIHZvaWQgZHVrX3JlbW92ZShkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RV S19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3hjb3B5bW92ZV9yYXcoZHVrX2NvbnRleHQgKnRvX2N0 eCwgZHVrX2NvbnRleHQgKmZyb21fY3R4LCBkdWtfaWR4X3QgY291bnQsIGR1a19ib29sX3QgaXNf Y29weSk7CisKKyNkZWZpbmUgZHVrX3htb3ZlX3RvcCh0b19jdHgsZnJvbV9jdHgsY291bnQpIFwK KwlkdWtfeGNvcHltb3ZlX3JhdygodG9fY3R4KSwgKGZyb21fY3R4KSwgKGNvdW50KSwgMCAvKmlz X2NvcHkqLykKKyNkZWZpbmUgZHVrX3hjb3B5X3RvcCh0b19jdHgsZnJvbV9jdHgsY291bnQpIFwK KwlkdWtfeGNvcHltb3ZlX3JhdygodG9fY3R4KSwgKGZyb21fY3R4KSwgKGNvdW50KSwgMSAvKmlz X2NvcHkqLykKKworLyoKKyAqICBQdXNoIG9wZXJhdGlvbnMKKyAqCisgKiAgUHVzaCBmdW5jdGlv bnMgcmV0dXJuIHRoZSBhYnNvbHV0ZSAocmVsYXRpdmUgdG8gYm90dG9tIG9mIGZyYW1lKQorICog IHBvc2l0aW9uIG9mIHRoZSBwdXNoZWQgdmFsdWUgZm9yIGNvbnZlbmllbmNlLgorICoKKyAqICBO b3RlOiBkdWtfZHVwKCkgaXMgdGVjaG5pY2FsbHkgYSBwdXNoLgorICovCisKK0RVS19FWFRFUk5B TF9ERUNMIHZvaWQgZHVrX3B1c2hfdW5kZWZpbmVkKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9udWxsKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9ib29sZWFuKGR1a19jb250ZXh0ICpjdHgsIGR1a19i b29sX3QgdmFsKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3B1c2hfdHJ1ZShkdWtfY29u dGV4dCAqY3R4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3B1c2hfZmFsc2UoZHVrX2Nv bnRleHQgKmN0eCk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19wdXNoX251bWJlcihkdWtf Y29udGV4dCAqY3R4LCBkdWtfZG91YmxlX3QgdmFsKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQg ZHVrX3B1c2hfbmFuKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBk dWtfcHVzaF9pbnQoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2ludF90IHZhbCk7CitEVUtfRVhURVJO QUxfREVDTCB2b2lkIGR1a19wdXNoX3VpbnQoZHVrX2NvbnRleHQgKmN0eCwgZHVrX3VpbnRfdCB2 YWwpOworRFVLX0VYVEVSTkFMX0RFQ0wgY29uc3QgY2hhciAqZHVrX3B1c2hfc3RyaW5nKGR1a19j b250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnN0cik7CitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBj aGFyICpkdWtfcHVzaF9sc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnN0ciwg ZHVrX3NpemVfdCBsZW4pOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9wb2ludGVy KGR1a19jb250ZXh0ICpjdHgsIHZvaWQgKnApOworRFVLX0VYVEVSTkFMX0RFQ0wgY29uc3QgY2hh ciAqZHVrX3B1c2hfc3ByaW50ZihkdWtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIC4u Lik7CitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfcHVzaF92c3ByaW50ZihkdWtf Y29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworCisvKiBkdWtfcHVz aF9saXRlcmFsKCkgbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudCAoYSBDIHN0cmluZyBsaXRlcmFs KSBtb3JlIHRoYW4KKyAqIG9uY2Ugb24gcHVycG9zZS4gIFdoZW4gc3BlZWQgaXMgcHJlZmVycmVk LCBzaXplb2YoKSBhdm9pZHMgYW4gdW5uZWNlc3NhcnkKKyAqIHN0cmxlbigpIGF0IHJ1bnRpbWUu ICBTaXplb2YoImZvbyIpID09IDQsIHNvIHN1YnRyYWN0IDEuICBUaGUgYXJndW1lbnQKKyAqIG11 c3QgYmUgbm9uLU5VTEwgYW5kIHNob3VsZCBub3QgY29udGFpbiBpbnRlcm5hbCBOVUwgY2hhcmFj dGVycyBhcyB0aGUKKyAqIGJlaGF2aW9yIHdpbGwgdGhlbiBkZXBlbmQgb24gY29uZmlnIG9wdGlv bnMuCisgKi8KKyNpZiBkZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisjZGVmaW5lIGR1a19w dXNoX2xpdGVyYWwoY3R4LGNzdHJpbmcpICBkdWtfcHVzaF9zdHJpbmcoKGN0eCksIChjc3RyaW5n KSkKKyNlbHNlCitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfcHVzaF9saXRlcmFs X3JhdyhkdWtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpzdHIsIGR1a19zaXplX3QgbGVuKTsK KyNkZWZpbmUgZHVrX3B1c2hfbGl0ZXJhbChjdHgsY3N0cmluZykgIGR1a19wdXNoX2xpdGVyYWxf cmF3KChjdHgpLCAoY3N0cmluZyksIHNpemVvZigoY3N0cmluZykpIC0gMVUpCisjZW5kaWYKKwor RFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF90aGlzKGR1a19jb250ZXh0ICpjdHgpOwor RFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9uZXdfdGFyZ2V0KGR1a19jb250ZXh0ICpj dHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9jdXJyZW50X2Z1bmN0aW9uKGR1 a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9jdXJyZW50 X3RocmVhZChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3B1 c2hfZ2xvYmFsX29iamVjdChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZv aWQgZHVrX3B1c2hfaGVhcF9zdGFzaChkdWtfY29udGV4dCAqY3R4KTsKK0RVS19FWFRFUk5BTF9E RUNMIHZvaWQgZHVrX3B1c2hfZ2xvYmFsX3N0YXNoKGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF90aHJlYWRfc3Rhc2goZHVrX2NvbnRleHQgKmN0eCwg ZHVrX2NvbnRleHQgKnRhcmdldF9jdHgpOworCitEVUtfRVhURVJOQUxfREVDTCBkdWtfaWR4X3Qg ZHVrX3B1c2hfb2JqZWN0KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVr X2lkeF90IGR1a19wdXNoX2JhcmVfb2JqZWN0KGR1a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVS TkFMX0RFQ0wgZHVrX2lkeF90IGR1a19wdXNoX2FycmF5KGR1a19jb250ZXh0ICpjdHgpOworRFVL X0VYVEVSTkFMX0RFQ0wgZHVrX2lkeF90IGR1a19wdXNoX2NfZnVuY3Rpb24oZHVrX2NvbnRleHQg KmN0eCwgZHVrX2NfZnVuY3Rpb24gZnVuYywgZHVrX2lkeF90IG5hcmdzKTsKK0RVS19FWFRFUk5B TF9ERUNMIGR1a19pZHhfdCBkdWtfcHVzaF9jX2xpZ2h0ZnVuYyhkdWtfY29udGV4dCAqY3R4LCBk dWtfY19mdW5jdGlvbiBmdW5jLCBkdWtfaWR4X3QgbmFyZ3MsIGR1a19pZHhfdCBsZW5ndGgsIGR1 a19pbnRfdCBtYWdpYyk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfaWR4X3QgZHVrX3B1c2hfdGhy ZWFkX3JhdyhkdWtfY29udGV4dCAqY3R4LCBkdWtfdWludF90IGZsYWdzKTsKK0RVS19FWFRFUk5B TF9ERUNMIGR1a19pZHhfdCBkdWtfcHVzaF9wcm94eShkdWtfY29udGV4dCAqY3R4LCBkdWtfdWlu dF90IHByb3h5X2ZsYWdzKTsKKworI2RlZmluZSBkdWtfcHVzaF90aHJlYWQoY3R4KSBcCisJZHVr X3B1c2hfdGhyZWFkX3JhdygoY3R4KSwgMCAvKmZsYWdzKi8pCisKKyNkZWZpbmUgZHVrX3B1c2hf dGhyZWFkX25ld19nbG9iYWxlbnYoY3R4KSBcCisJZHVrX3B1c2hfdGhyZWFkX3JhdygoY3R4KSwg RFVLX1RIUkVBRF9ORVdfR0xPQkFMX0VOViAvKmZsYWdzKi8pCisKK0RVS19FWFRFUk5BTF9ERUNM IGR1a19pZHhfdCBkdWtfcHVzaF9lcnJvcl9vYmplY3RfcmF3KGR1a19jb250ZXh0ICpjdHgsIGR1 a19lcnJjb2RlX3QgZXJyX2NvZGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBkdWtfaW50X3QgbGlu ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjaWYgZGVmaW5lZChEVUtfQVBJX1ZBUklBRElD X01BQ1JPUykKKyNkZWZpbmUgZHVrX3B1c2hfZXJyb3Jfb2JqZWN0KGN0eCxlcnJfY29kZSwuLi4p ICBcCisJZHVrX3B1c2hfZXJyb3Jfb2JqZWN0X3JhdygoY3R4KSwgKGVycl9jb2RlKSwgKGNvbnN0 IGNoYXIgKikgKERVS19GSUxFX01BQ1JPKSwgKGR1a19pbnRfdCkgKERVS19MSU5FX01BQ1JPKSwg X19WQV9BUkdTX18pCisjZWxzZQorRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2lkeF90IGR1a19wdXNo X2Vycm9yX29iamVjdF9zdGFzaChkdWtfY29udGV4dCAqY3R4LCBkdWtfZXJyY29kZV90IGVycl9j b2RlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisvKiBOb3RlOiBwYXJlbnRoZXNlcyBhcmUgcmVx dWlyZWQgc28gdGhhdCB0aGUgY29tbWEgZXhwcmVzc2lvbiB3b3JrcyBpbiBhc3NpZ25tZW50cy4g Ki8KKyNkZWZpbmUgZHVrX3B1c2hfZXJyb3Jfb2JqZWN0ICBcCisJKGR1a19hcGlfZ2xvYmFsX2Zp bGVuYW1lID0gKGNvbnN0IGNoYXIgKikgKERVS19GSUxFX01BQ1JPKSwgXAorCSBkdWtfYXBpX2ds b2JhbF9saW5lID0gKGR1a19pbnRfdCkgKERVS19MSU5FX01BQ1JPKSwgXAorCSBkdWtfcHVzaF9l cnJvcl9vYmplY3Rfc3Rhc2gpICAvKiBsYXN0IHZhbHVlIGlzIGZ1bmMgcG9pbnRlciwgYXJndW1l bnRzIGZvbGxvdyBpbiBwYXJlbnMgKi8KKyNlbmRpZgorCitEVUtfRVhURVJOQUxfREVDTCBkdWtf aWR4X3QgZHVrX3B1c2hfZXJyb3Jfb2JqZWN0X3ZhX3JhdyhkdWtfY29udGV4dCAqY3R4LCBkdWtf ZXJyY29kZV90IGVycl9jb2RlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgZHVrX2ludF90IGxpbmUs IGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisjZGVmaW5lIGR1a19wdXNoX2Vycm9yX29i amVjdF92YShjdHgsZXJyX2NvZGUsZm10LGFwKSAgXAorCWR1a19wdXNoX2Vycm9yX29iamVjdF92 YV9yYXcoKGN0eCksIChlcnJfY29kZSksIChjb25zdCBjaGFyICopIChEVUtfRklMRV9NQUNSTyks IChkdWtfaW50X3QpIChEVUtfTElORV9NQUNSTyksIChmbXQpLCAoYXApKQorCisjZGVmaW5lIERV S19CVUZfRkxBR19EWU5BTUlDICAgKDEgPDwgMCkgICAgLyogaW50ZXJuYWwgZmxhZzogZHluYW1p YyBidWZmZXIgKi8KKyNkZWZpbmUgRFVLX0JVRl9GTEFHX0VYVEVSTkFMICAoMSA8PCAxKSAgICAv KiBpbnRlcm5hbCBmbGFnOiBleHRlcm5hbCBidWZmZXIgKi8KKyNkZWZpbmUgRFVLX0JVRl9GTEFH X05PWkVSTyAgICAoMSA8PCAyKSAgICAvKiBpbnRlcm5hbCBmbGFnOiBkb24ndCB6ZXJvIGFsbG9j YXRlZCBidWZmZXIgKi8KKworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX3B1c2hfYnVmZmVy X3JhdyhkdWtfY29udGV4dCAqY3R4LCBkdWtfc2l6ZV90IHNpemUsIGR1a19zbWFsbF91aW50X3Qg ZmxhZ3MpOworCisjZGVmaW5lIGR1a19wdXNoX2J1ZmZlcihjdHgsc2l6ZSxkeW5hbWljKSBcCisJ ZHVrX3B1c2hfYnVmZmVyX3JhdygoY3R4KSwgKHNpemUpLCAoZHluYW1pYykgPyBEVUtfQlVGX0ZM QUdfRFlOQU1JQyA6IDApCisjZGVmaW5lIGR1a19wdXNoX2ZpeGVkX2J1ZmZlcihjdHgsc2l6ZSkg XAorCWR1a19wdXNoX2J1ZmZlcl9yYXcoKGN0eCksIChzaXplKSwgMCAvKmZsYWdzKi8pCisjZGVm aW5lIGR1a19wdXNoX2R5bmFtaWNfYnVmZmVyKGN0eCxzaXplKSBcCisJZHVrX3B1c2hfYnVmZmVy X3JhdygoY3R4KSwgKHNpemUpLCBEVUtfQlVGX0ZMQUdfRFlOQU1JQyAvKmZsYWdzKi8pCisjZGVm aW5lIGR1a19wdXNoX2V4dGVybmFsX2J1ZmZlcihjdHgpIFwKKwkoKHZvaWQpIGR1a19wdXNoX2J1 ZmZlcl9yYXcoKGN0eCksIDAsIERVS19CVUZfRkxBR19EWU5BTUlDIHwgRFVLX0JVRl9GTEFHX0VY VEVSTkFMKSkKKworI2RlZmluZSBEVUtfQlVGT0JKX0FSUkFZQlVGRkVSICAgICAgICAgMAorI2Rl ZmluZSBEVUtfQlVGT0JKX05PREVKU19CVUZGRVIgICAgICAgMQorI2RlZmluZSBEVUtfQlVGT0JK X0RBVEFWSUVXICAgICAgICAgICAgMgorI2RlZmluZSBEVUtfQlVGT0JKX0lOVDhBUlJBWSAgICAg ICAgICAgMworI2RlZmluZSBEVUtfQlVGT0JKX1VJTlQ4QVJSQVkgICAgICAgICAgNAorI2RlZmlu ZSBEVUtfQlVGT0JKX1VJTlQ4Q0xBTVBFREFSUkFZICAgNQorI2RlZmluZSBEVUtfQlVGT0JKX0lO VDE2QVJSQVkgICAgICAgICAgNgorI2RlZmluZSBEVUtfQlVGT0JKX1VJTlQxNkFSUkFZICAgICAg ICAgNworI2RlZmluZSBEVUtfQlVGT0JKX0lOVDMyQVJSQVkgICAgICAgICAgOAorI2RlZmluZSBE VUtfQlVGT0JKX1VJTlQzMkFSUkFZICAgICAgICAgOQorI2RlZmluZSBEVUtfQlVGT0JKX0ZMT0FU MzJBUlJBWSAgICAgICAgMTAKKyNkZWZpbmUgRFVLX0JVRk9CSl9GTE9BVDY0QVJSQVkgICAgICAg IDExCisKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3B1c2hfYnVmZmVyX29iamVjdChkdWtf Y29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4X2J1ZmZlciwgZHVrX3NpemVfdCBieXRlX29mZnNl dCwgZHVrX3NpemVfdCBieXRlX2xlbmd0aCwgZHVrX3VpbnRfdCBmbGFncyk7CisKK0RVS19FWFRF Uk5BTF9ERUNMIGR1a19pZHhfdCBkdWtfcHVzaF9oZWFwcHRyKGR1a19jb250ZXh0ICpjdHgsIHZv aWQgKnB0cik7CisKKy8qCisgKiAgUG9wIG9wZXJhdGlvbnMKKyAqLworCitEVUtfRVhURVJOQUxf REVDTCB2b2lkIGR1a19wb3AoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfRVhURVJOQUxfREVDTCB2 b2lkIGR1a19wb3BfbihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgY291bnQpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfcG9wXzIoZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfRVhURVJO QUxfREVDTCB2b2lkIGR1a19wb3BfMyhkdWtfY29udGV4dCAqY3R4KTsKKworLyoKKyAqICBUeXBl IGNoZWNrcworICoKKyAqICBkdWtfaXNfbm9uZSgpLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSB3aGV0 aGVyIGluZGV4IGl0IG91dHNpZGUgb2Ygc3RhY2ssCisgKiAgaXMgbm90IG5lZWRlZDsgZHVrX2lz X3ZhbGlkX2luZGV4KCkgZ2l2ZXMgdGhlIHNhbWUgaW5mb3JtYXRpb24uCisgKi8KKworRFVLX0VY VEVSTkFMX0RFQ0wgZHVrX2ludF90IGR1a19nZXRfdHlwZShkdWtfY29udGV4dCAqY3R4LCBkdWtf aWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2NoZWNrX3R5cGUo ZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVrX2ludF90IHR5cGUpOworRFVLX0VY VEVSTkFMX0RFQ0wgZHVrX3VpbnRfdCBkdWtfZ2V0X3R5cGVfbWFzayhkdWtfY29udGV4dCAqY3R4 LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2NoZWNr X3R5cGVfbWFzayhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfdWludF90IG1h c2spOworCitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pc191bmRlZmluZWQoZHVr X2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9v bF90IGR1a19pc19udWxsKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworI2RlZmlu ZSBkdWtfaXNfbnVsbF9vcl91bmRlZmluZWQoY3R4LCBpZHgpIFwKKwkoKGR1a19nZXRfdHlwZV9t YXNrKChjdHgpLCAoaWR4KSkgJiAoRFVLX1RZUEVfTUFTS19OVUxMIHwgRFVLX1RZUEVfTUFTS19V TkRFRklORUQpKSA/IDEgOiAwKQorCitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19p c19ib29sZWFuKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFM X0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfbnVtYmVyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhf dCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfbmFuKGR1a19jb250 ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBk dWtfaXNfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVS TkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfb2JqZWN0KGR1a19jb250ZXh0ICpjdHgsIGR1a19p ZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfYnVmZmVyKGR1 a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jv b2xfdCBkdWtfaXNfYnVmZmVyX2RhdGEoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7 CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pc19wb2ludGVyKGR1a19jb250ZXh0 ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf aXNfbGlnaHRmdW5jKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworCitEVUtfRVhU RVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pc19zeW1ib2woZHVrX2NvbnRleHQgKmN0eCwgZHVr X2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pc19hcnJheShk dWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19i b29sX3QgZHVrX2lzX2Z1bmN0aW9uKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOwor RFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaXNfY19mdW5jdGlvbihkdWtfY29udGV4 dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVr X2lzX2VjbWFzY3JpcHRfZnVuY3Rpb24oZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7 CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pc19ib3VuZF9mdW5jdGlvbihkdWtf Y29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29s X3QgZHVrX2lzX3RocmVhZChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKKworI2Rl ZmluZSBkdWtfaXNfY2FsbGFibGUoY3R4LGlkeCkgXAorCWR1a19pc19mdW5jdGlvbigoY3R4KSwg KGlkeCkpCitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pc19jb25zdHJ1Y3RhYmxl KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworCitEVUtfRVhURVJOQUxfREVDTCBk dWtfYm9vbF90IGR1a19pc19keW5hbWljX2J1ZmZlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4 X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2lzX2ZpeGVkX2J1ZmZl cihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1 a19ib29sX3QgZHVrX2lzX2V4dGVybmFsX2J1ZmZlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4 X3QgaWR4KTsKKworLyogQnVmZmVycyBhbmQgbGlnaHRmdW5jcyBhcmUgbm90IGNvbnNpZGVyZWQg cHJpbWl0aXZlIGJlY2F1c2UgdGhleSBtaW1pYworICogb2JqZWN0cyBhbmQgZS5nLiBkdWtfdG9f cHJpbWl0aXZlKCkgd2lsbCBjb2VyY2UgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZworICogdGhl bSBhcyBpcy4gIFN5bWJvbHMgYXJlIHJlcHJlc2VudGVkIGFzIHN0cmluZ3MgaW50ZXJuYWxseS4K KyAqLworI2RlZmluZSBkdWtfaXNfcHJpbWl0aXZlKGN0eCxpZHgpIFwKKwlkdWtfY2hlY2tfdHlw ZV9tYXNrKChjdHgpLCAoaWR4KSwgRFVLX1RZUEVfTUFTS19VTkRFRklORUQgfCBcCisJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfTlVMTCB8IFwKKwkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19CT09MRUFOIHwgXAor CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX05VTUJFUiB8 IFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19TVFJJ TkcgfCBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tf UE9JTlRFUikKKworLyogU3ltYm9scyBhcmUgb2JqZWN0IGNvZXJjaWJsZSwgY292ZXJlZCBieSBE VUtfVFlQRV9NQVNLX1NUUklORy4gKi8KKyNkZWZpbmUgZHVrX2lzX29iamVjdF9jb2VyY2libGUo Y3R4LGlkeCkgXAorCWR1a19jaGVja190eXBlX21hc2soKGN0eCksIChpZHgpLCBEVUtfVFlQRV9N QVNLX0JPT0xFQU4gfCBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19U WVBFX01BU0tfTlVNQkVSIHwgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE VUtfVFlQRV9NQVNLX1NUUklORyB8IFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFVLX1RZUEVfTUFTS19PQkpFQ1QgfCBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERVS19UWVBFX01BU0tfQlVGRkVSIHwgXAorCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEVUtfVFlQRV9NQVNLX1BPSU5URVIgfCBcCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfTElHSFRGVU5DKQorCitEVUtfRVhURVJOQUxf REVDTCBkdWtfZXJyY29kZV90IGR1a19nZXRfZXJyb3JfY29kZShkdWtfY29udGV4dCAqY3R4LCBk dWtfaWR4X3QgaWR4KTsKKyNkZWZpbmUgZHVrX2lzX2Vycm9yKGN0eCxpZHgpIFwKKwkoZHVrX2dl dF9lcnJvcl9jb2RlKChjdHgpLCAoaWR4KSkgIT0gMCkKKyNkZWZpbmUgZHVrX2lzX2V2YWxfZXJy b3IoY3R4LGlkeCkgXAorCShkdWtfZ2V0X2Vycm9yX2NvZGUoKGN0eCksIChpZHgpKSA9PSBEVUtf RVJSX0VWQUxfRVJST1IpCisjZGVmaW5lIGR1a19pc19yYW5nZV9lcnJvcihjdHgsaWR4KSBcCisJ KGR1a19nZXRfZXJyb3JfY29kZSgoY3R4KSwgKGlkeCkpID09IERVS19FUlJfUkFOR0VfRVJST1Ip CisjZGVmaW5lIGR1a19pc19yZWZlcmVuY2VfZXJyb3IoY3R4LGlkeCkgXAorCShkdWtfZ2V0X2Vy cm9yX2NvZGUoKGN0eCksIChpZHgpKSA9PSBEVUtfRVJSX1JFRkVSRU5DRV9FUlJPUikKKyNkZWZp bmUgZHVrX2lzX3N5bnRheF9lcnJvcihjdHgsaWR4KSBcCisJKGR1a19nZXRfZXJyb3JfY29kZSgo Y3R4KSwgKGlkeCkpID09IERVS19FUlJfU1lOVEFYX0VSUk9SKQorI2RlZmluZSBkdWtfaXNfdHlw ZV9lcnJvcihjdHgsaWR4KSBcCisJKGR1a19nZXRfZXJyb3JfY29kZSgoY3R4KSwgKGlkeCkpID09 IERVS19FUlJfVFlQRV9FUlJPUikKKyNkZWZpbmUgZHVrX2lzX3VyaV9lcnJvcihjdHgsaWR4KSBc CisJKGR1a19nZXRfZXJyb3JfY29kZSgoY3R4KSwgKGlkeCkpID09IERVS19FUlJfVVJJX0VSUk9S KQorCisvKgorICogIEdldCBvcGVyYXRpb25zOiBubyBjb2VyY2lvbiwgcmV0dXJucyBkZWZhdWx0 IHZhbHVlIGZvciBpbnZhbGlkCisgKiAgaW5kaWNlcyBhbmQgaW52YWxpZCB2YWx1ZSB0eXBlcy4K KyAqCisgKiAgZHVrX2dldF91bmRlZmluZWQoKSBhbmQgZHVrX2dldF9udWxsKCkgd291bGQgYmUg cG9pbnRsZXNzIGFuZAorICogIGFyZSBub3QgaW5jbHVkZWQuCisgKi8KKworRFVLX0VYVEVSTkFM X0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZ2V0X2Jvb2xlYW4oZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lk eF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfZG91YmxlX3QgZHVrX2dldF9udW1iZXIo ZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtf aW50X3QgZHVrX2dldF9pbnQoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtf RVhURVJOQUxfREVDTCBkdWtfdWludF90IGR1a19nZXRfdWludChkdWtfY29udGV4dCAqY3R4LCBk dWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGNvbnN0IGNoYXIgKmR1a19nZXRfc3Ry aW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wg Y29uc3QgY2hhciAqZHVrX2dldF9sc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBp ZHgsIGR1a19zaXplX3QgKm91dF9sZW4pOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX2dl dF9idWZmZXIoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0 X3NpemUpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX2dldF9idWZmZXJfZGF0YShkdWtf Y29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfc2l6ZSk7CitEVUtf RVhURVJOQUxfREVDTCB2b2lkICpkdWtfZ2V0X3BvaW50ZXIoZHVrX2NvbnRleHQgKmN0eCwgZHVr X2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfY19mdW5jdGlvbiBkdWtfZ2V0X2Nf ZnVuY3Rpb24oZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxf REVDTCBkdWtfY29udGV4dCAqZHVrX2dldF9jb250ZXh0KGR1a19jb250ZXh0ICpjdHgsIGR1a19p ZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX2dldF9oZWFwcHRyKGR1a19j b250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworCisvKgorICogIEdldC13aXRoLWV4cGxpY2l0 IGRlZmF1bHQgb3BlcmF0aW9uczogbGlrZSBnZXQgb3BlcmF0aW9ucyBidXQgd2l0aCBhbgorICog IGV4cGxpY2l0IGRlZmF1bHQgdmFsdWUuCisgKi8KKworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jv b2xfdCBkdWtfZ2V0X2Jvb2xlYW5fZGVmYXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qg aWR4LCBkdWtfYm9vbF90IGRlZl92YWx1ZSk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfZG91Ymxl X3QgZHVrX2dldF9udW1iZXJfZGVmYXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4 LCBkdWtfZG91YmxlX3QgZGVmX3ZhbHVlKTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19pbnRfdCBk dWtfZ2V0X2ludF9kZWZhdWx0KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1a19p bnRfdCBkZWZfdmFsdWUpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX3VpbnRfdCBkdWtfZ2V0X3Vp bnRfZGVmYXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfdWludF90IGRl Zl92YWx1ZSk7CitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfZ2V0X3N0cmluZ19k ZWZhdWx0KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGNvbnN0IGNoYXIgKmRlZl92 YWx1ZSk7CitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfZ2V0X2xzdHJpbmdfZGVm YXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfbGVu LCBjb25zdCBjaGFyICpkZWZfcHRyLCBkdWtfc2l6ZV90IGRlZl9sZW4pOworRFVLX0VYVEVSTkFM X0RFQ0wgdm9pZCAqZHVrX2dldF9idWZmZXJfZGVmYXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtf aWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfc2l6ZSwgdm9pZCAqZGVmX3B0ciwgZHVrX3NpemVf dCBkZWZfbGVuKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgKmR1a19nZXRfYnVmZmVyX2RhdGFf ZGVmYXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRf c2l6ZSwgdm9pZCAqZGVmX3B0ciwgZHVrX3NpemVfdCBkZWZfbGVuKTsKK0RVS19FWFRFUk5BTF9E RUNMIHZvaWQgKmR1a19nZXRfcG9pbnRlcl9kZWZhdWx0KGR1a19jb250ZXh0ICpjdHgsIGR1a19p ZHhfdCBpZHgsIHZvaWQgKmRlZl92YWx1ZSk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfY19mdW5j dGlvbiBkdWtfZ2V0X2NfZnVuY3Rpb25fZGVmYXVsdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4 X3QgaWR4LCBkdWtfY19mdW5jdGlvbiBkZWZfdmFsdWUpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVr X2NvbnRleHQgKmR1a19nZXRfY29udGV4dF9kZWZhdWx0KGR1a19jb250ZXh0ICpjdHgsIGR1a19p ZHhfdCBpZHgsIGR1a19jb250ZXh0ICpkZWZfdmFsdWUpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9p ZCAqZHVrX2dldF9oZWFwcHRyX2RlZmF1bHQoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlk eCwgdm9pZCAqZGVmX3ZhbHVlKTsKKworLyoKKyAqICBPcHQgb3BlcmF0aW9uczogbGlrZSByZXF1 aXJlIG9wZXJhdGlvbnMgYnV0IHdpdGggYW4gZXhwbGljaXQgZGVmYXVsdCB2YWx1ZQorICogIHdo ZW4gdmFsdWUgaXMgdW5kZWZpbmVkIG9yIGluZGV4IGlzIGludmFsaWQsIG51bGwgYW5kIG5vbi1t YXRjaGluZyB0eXBlcworICogIGNhdXNlIGEgVHlwZUVycm9yLgorICovCisKK0RVS19FWFRFUk5B TF9ERUNMIGR1a19ib29sX3QgZHVrX29wdF9ib29sZWFuKGR1a19jb250ZXh0ICpjdHgsIGR1a19p ZHhfdCBpZHgsIGR1a19ib29sX3QgZGVmX3ZhbHVlKTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19k b3VibGVfdCBkdWtfb3B0X251bWJlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBk dWtfZG91YmxlX3QgZGVmX3ZhbHVlKTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19pbnRfdCBkdWtf b3B0X2ludChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfaW50X3QgZGVmX3Zh bHVlKTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a191aW50X3QgZHVrX29wdF91aW50KGR1a19jb250 ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1a191aW50X3QgZGVmX3ZhbHVlKTsKK0RVS19FWFRF Uk5BTF9ERUNMIGNvbnN0IGNoYXIgKmR1a19vcHRfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1 a19pZHhfdCBpZHgsIGNvbnN0IGNoYXIgKmRlZl9wdHIpOworRFVLX0VYVEVSTkFMX0RFQ0wgY29u c3QgY2hhciAqZHVrX29wdF9sc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgs IGR1a19zaXplX3QgKm91dF9sZW4sIGNvbnN0IGNoYXIgKmRlZl9wdHIsIGR1a19zaXplX3QgZGVm X2xlbik7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfb3B0X2J1ZmZlcihkdWtfY29udGV4 dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfc2l6ZSwgdm9pZCAqZGVmX3B0 ciwgZHVrX3NpemVfdCBkZWZfc2l6ZSk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfb3B0 X2J1ZmZlcl9kYXRhKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3Qg Km91dF9zaXplLCB2b2lkICpkZWZfcHRyLCBkdWtfc2l6ZV90IGRlZl9zaXplKTsKK0RVS19FWFRF Uk5BTF9ERUNMIHZvaWQgKmR1a19vcHRfcG9pbnRlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4 X3QgaWR4LCB2b2lkICpkZWZfdmFsdWUpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2NfZnVuY3Rp b24gZHVrX29wdF9jX2Z1bmN0aW9uKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1 a19jX2Z1bmN0aW9uIGRlZl92YWx1ZSk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfY29udGV4dCAq ZHVrX29wdF9jb250ZXh0KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1a19jb250 ZXh0ICpkZWZfdmFsdWUpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX29wdF9oZWFwcHRy KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIHZvaWQgKmRlZl92YWx1ZSk7CisKKy8q CisgKiAgUmVxdWlyZSBvcGVyYXRpb25zOiBubyBjb2VyY2lvbiwgdGhyb3cgZXJyb3IgaWYgaW5k ZXggb3IgdHlwZQorICogIGlzIGluY29ycmVjdC4gIE5vIGRlZmF1bHRpbmcuCisgKi8KKworI2Rl ZmluZSBkdWtfcmVxdWlyZV90eXBlX21hc2soY3R4LGlkeCxtYXNrKSBcCisJKCh2b2lkKSBkdWtf Y2hlY2tfdHlwZV9tYXNrKChjdHgpLCAoaWR4KSwgKG1hc2spIHwgRFVLX1RZUEVfTUFTS19USFJP VykpCisKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3JlcXVpcmVfdW5kZWZpbmVkKGR1a19j b250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtf cmVxdWlyZV9udWxsKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVS TkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfcmVxdWlyZV9ib29sZWFuKGR1a19jb250ZXh0ICpjdHgs IGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2RvdWJsZV90IGR1a19yZXF1 aXJlX251bWJlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5B TF9ERUNMIGR1a19pbnRfdCBkdWtfcmVxdWlyZV9pbnQoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lk eF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfdWludF90IGR1a19yZXF1aXJlX3VpbnQo ZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBjb25z dCBjaGFyICpkdWtfcmVxdWlyZV9zdHJpbmcoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlk eCk7CitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfcmVxdWlyZV9sc3RyaW5nKGR1 a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9sZW4pOworRFVL X0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcmVxdWlyZV9vYmplY3QoZHVrX2NvbnRleHQgKmN0eCwg ZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfcmVxdWlyZV9idWZm ZXIoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUp OworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCAqZHVrX3JlcXVpcmVfYnVmZmVyX2RhdGEoZHVrX2Nv bnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCAqZHVrX3JlcXVpcmVfcG9pbnRlcihkdWtfY29udGV4dCAqY3R4LCBk dWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19jX2Z1bmN0aW9uIGR1a19yZXF1 aXJlX2NfZnVuY3Rpb24oZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhU RVJOQUxfREVDTCBkdWtfY29udGV4dCAqZHVrX3JlcXVpcmVfY29udGV4dChkdWtfY29udGV4dCAq Y3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3JlcXVpcmVf ZnVuY3Rpb24oZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CisjZGVmaW5lIGR1a19y ZXF1aXJlX2NhbGxhYmxlKGN0eCxpZHgpIFwKKwlkdWtfcmVxdWlyZV9mdW5jdGlvbigoY3R4KSwg KGlkeCkpCitEVUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfcmVxdWlyZV9oZWFwcHRyKGR1a19j b250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworCisvKiBTeW1ib2xzIGFyZSBvYmplY3QgY29l cmNpYmxlIGFuZCBjb3ZlcmVkIGJ5IERVS19UWVBFX01BU0tfU1RSSU5HLiAqLworI2RlZmluZSBk dWtfcmVxdWlyZV9vYmplY3RfY29lcmNpYmxlKGN0eCxpZHgpIFwKKwkoKHZvaWQpIGR1a19jaGVj a190eXBlX21hc2soKGN0eCksIChpZHgpLCBEVUtfVFlQRV9NQVNLX0JPT0xFQU4gfCBcCisJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX05V TUJFUiB8IFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19UWVBFX01BU0tfU1RSSU5HIHwgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19PQkpFQ1QgfCBcCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEVUtfVFlQRV9NQVNLX0JVRkZFUiB8IFwKKwkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERVS19UWVBFX01BU0tfUE9J TlRFUiB8IFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERV S19UWVBFX01BU0tfTElHSFRGVU5DIHwgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFVLX1RZUEVfTUFTS19USFJPVykpCisKKy8qCisgKiAgQ29lcmNpb24g b3BlcmF0aW9uczogaW4tcGxhY2UgY29lcmNpb24sIHJldHVybiBjb2VyY2VkIHZhbHVlIHdoZXJl CisgKiAgYXBwbGljYWJsZS4gIElmIGluZGV4IGlzIGludmFsaWQsIHRocm93IGVycm9yLiAgU29t ZSBjb2VyY2lvbnMgbWF5CisgKiAgdGhyb3cgYW4gZXhwZWN0ZWQgZXJyb3IgKGUuZy4gZnJvbSBh IHRvU3RyaW5nKCkgb3IgdmFsdWVPZigpIGNhbGwpCisgKiAgb3IgYW4gaW50ZXJuYWwgZXJyb3Ig KGUuZy4gZnJvbSBvdXQgb2YgbWVtb3J5KS4KKyAqLworCitEVUtfRVhURVJOQUxfREVDTCB2b2lk IGR1a190b191bmRlZmluZWQoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtf RVhURVJOQUxfREVDTCB2b2lkIGR1a190b19udWxsKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhf dCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfdG9fYm9vbGVhbihkdWtf Y29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19kb3Vi bGVfdCBkdWtfdG9fbnVtYmVyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVL X0VYVEVSTkFMX0RFQ0wgZHVrX2ludF90IGR1a190b19pbnQoZHVrX2NvbnRleHQgKmN0eCwgZHVr X2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfdWludF90IGR1a190b191aW50KGR1 a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2lu dDMyX3QgZHVrX3RvX2ludDMyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVL X0VYVEVSTkFMX0RFQ0wgZHVrX3VpbnQzMl90IGR1a190b191aW50MzIoZHVrX2NvbnRleHQgKmN0 eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfdWludDE2X3QgZHVrX3Rv X3VpbnQxNihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9E RUNMIGNvbnN0IGNoYXIgKmR1a190b19zdHJpbmcoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90 IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpkdWtfdG9fbHN0cmluZyhkdWtf Y29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90ICpvdXRfbGVuKTsKK0RVS19F WFRFUk5BTF9ERUNMIHZvaWQgKmR1a190b19idWZmZXJfcmF3KGR1a19jb250ZXh0ICpjdHgsIGR1 a19pZHhfdCBpZHgsIGR1a19zaXplX3QgKm91dF9zaXplLCBkdWtfdWludF90IGZsYWdzKTsKK0RV S19FWFRFUk5BTF9ERUNMIHZvaWQgKmR1a190b19wb2ludGVyKGR1a19jb250ZXh0ICpjdHgsIGR1 a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfdG9fb2JqZWN0KGR1a19j b250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtf dG9fcHJpbWl0aXZlKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgsIGR1a19pbnRfdCBo aW50KTsKKworI2RlZmluZSBEVUtfQlVGX01PREVfRklYRUQgICAgICAwICAgLyogaW50ZXJuYWw6 IHJlcXVlc3QgZml4ZWQgYnVmZmVyIHJlc3VsdCAqLworI2RlZmluZSBEVUtfQlVGX01PREVfRFlO QU1JQyAgICAxICAgLyogaW50ZXJuYWw6IHJlcXVlc3QgZHluYW1pYyBidWZmZXIgcmVzdWx0ICov CisjZGVmaW5lIERVS19CVUZfTU9ERV9ET05UQ0FSRSAgIDIgICAvKiBpbnRlcm5hbDogZG9uJ3Qg Y2FyZSBhYm91dCBmaXhlZC9keW5hbWljIG5hdHVyZSAqLworCisjZGVmaW5lIGR1a190b19idWZm ZXIoY3R4LGlkeCxvdXRfc2l6ZSkgXAorCWR1a190b19idWZmZXJfcmF3KChjdHgpLCAoaWR4KSwg KG91dF9zaXplKSwgRFVLX0JVRl9NT0RFX0RPTlRDQVJFKQorI2RlZmluZSBkdWtfdG9fZml4ZWRf YnVmZmVyKGN0eCxpZHgsb3V0X3NpemUpIFwKKwlkdWtfdG9fYnVmZmVyX3JhdygoY3R4KSwgKGlk eCksIChvdXRfc2l6ZSksIERVS19CVUZfTU9ERV9GSVhFRCkKKyNkZWZpbmUgZHVrX3RvX2R5bmFt aWNfYnVmZmVyKGN0eCxpZHgsb3V0X3NpemUpIFwKKwlkdWtfdG9fYnVmZmVyX3JhdygoY3R4KSwg KGlkeCksIChvdXRfc2l6ZSksIERVS19CVUZfTU9ERV9EWU5BTUlDKQorCisvKiBzYWZlIHZhcmlh bnRzIG9mIGEgZmV3IGNvZXJjaW9uIG9wZXJhdGlvbnMgKi8KK0RVS19FWFRFUk5BTF9ERUNMIGNv bnN0IGNoYXIgKmR1a19zYWZlX3RvX2xzdHJpbmcoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90 IGlkeCwgZHVrX3NpemVfdCAqb3V0X2xlbik7CisjZGVmaW5lIGR1a19zYWZlX3RvX3N0cmluZyhj dHgsaWR4KSBcCisJZHVrX3NhZmVfdG9fbHN0cmluZygoY3R4KSwgKGlkeCksIE5VTEwpCisKKy8q CisgKiAgVmFsdWUgbGVuZ3RoCisgKi8KKworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX3NpemVfdCBk dWtfZ2V0X2xlbmd0aChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRF Uk5BTF9ERUNMIHZvaWQgZHVrX3NldF9sZW5ndGgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90 IGlkeCwgZHVrX3NpemVfdCBsZW4pOworI2lmIDAKKy8qIGR1a19yZXF1aXJlX2xlbmd0aCgpPyAq LworLyogZHVrX29wdF9sZW5ndGgoKT8gKi8KKyNlbmRpZgorCisvKgorICogIE1pc2MgY29udmVy c2lvbgorICovCisKK0RVS19FWFRFUk5BTF9ERUNMIGNvbnN0IGNoYXIgKmR1a19iYXNlNjRfZW5j b2RlKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wg dm9pZCBkdWtfYmFzZTY0X2RlY29kZShkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsK K0RVS19FWFRFUk5BTF9ERUNMIGNvbnN0IGNoYXIgKmR1a19oZXhfZW5jb2RlKGR1a19jb250ZXh0 ICpjdHgsIGR1a19pZHhfdCBpZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfaGV4X2Rl Y29kZShkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNM IGNvbnN0IGNoYXIgKmR1a19qc29uX2VuY29kZShkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qg aWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2pzb25fZGVjb2RlKGR1a19jb250ZXh0 ICpjdHgsIGR1a19pZHhfdCBpZHgpOworCitEVUtfRVhURVJOQUxfREVDTCBjb25zdCBjaGFyICpk dWtfYnVmZmVyX3RvX3N0cmluZyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4KTsKKwor LyoKKyAqICBCdWZmZXIKKyAqLworCitEVUtfRVhURVJOQUxfREVDTCB2b2lkICpkdWtfcmVzaXpl X2J1ZmZlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90IG5ld19z aXplKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgKmR1a19zdGVhbF9idWZmZXIoZHVrX2NvbnRl eHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVrX3NpemVfdCAqb3V0X3NpemUpOworRFVLX0VYVEVS TkFMX0RFQ0wgdm9pZCBkdWtfY29uZmlnX2J1ZmZlcihkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4 X3QgaWR4LCB2b2lkICpwdHIsIGR1a19zaXplX3QgbGVuKTsKKworLyoKKyAqICBQcm9wZXJ0eSBh Y2Nlc3MKKyAqCisgKiAgVGhlIGJhc2ljIGZ1bmN0aW9uIGFzc3VtZXMga2V5IGlzIG9uIHN0YWNr LiAgVGhlIF8obClzdHJpbmcgdmFyaWFudCB0YWtlcworICogIGEgQyBzdHJpbmcgYXMgYSBwcm9w ZXJ0eSBuYW1lOyB0aGUgX2xpdGVyYWwgdmFyaWFudCB0YWtlcyBhIEMgbGl0ZXJhbC4KKyAqICBU aGUgX2luZGV4IHZhcmlhbnQgdGFrZXMgYW4gYXJyYXkgaW5kZXggYXMgYSBwcm9wZXJ0eSBuYW1l IChlLmcuIDEyMyBpcworICogIGVxdWl2YWxlbnQgdG8gdGhlIGtleSAiMTIzIikuICBUaGUgX2hl YXBwdHIgdmFyaWFudCB0YWtlcyBhIHJhdywgYm9ycm93ZWQKKyAqICBoZWFwIHBvaW50ZXIuCisg Ki8KKworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZ2V0X3Byb3AoZHVrX2NvbnRl eHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfZ2V0X3Byb3Bfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4 LCBjb25zdCBjaGFyICprZXkpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZ2V0 X3Byb3BfbHN0cmluZyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3Qg Y2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pOworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVG RVJfU0laRSkKKyNkZWZpbmUgZHVrX2dldF9wcm9wX2xpdGVyYWwoY3R4LG9ial9pZHgsa2V5KSAg ZHVrX2dldF9wcm9wX3N0cmluZygoY3R4KSwgKG9ial9pZHgpLCAoa2V5KSkKKyNlbHNlCitEVUtf RVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19nZXRfcHJvcF9saXRlcmFsX3JhdyhkdWtfY29u dGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90 IGtleV9sZW4pOworI2RlZmluZSBkdWtfZ2V0X3Byb3BfbGl0ZXJhbChjdHgsb2JqX2lkeCxrZXkp ICBkdWtfZ2V0X3Byb3BfbGl0ZXJhbF9yYXcoKGN0eCksIChvYmpfaWR4KSwgKGtleSksIHNpemVv Zigoa2V5KSkgLSAxVSkKKyNlbmRpZgorRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf Z2V0X3Byb3BfaW5kZXgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191 YXJyaWR4X3QgYXJyX2lkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19nZXRf cHJvcF9oZWFwcHRyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lkICpw dHIpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfcHV0X3Byb3AoZHVrX2NvbnRl eHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfcHV0X3Byb3Bfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4 LCBjb25zdCBjaGFyICprZXkpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfcHV0 X3Byb3BfbHN0cmluZyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3Qg Y2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pOworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVG RVJfU0laRSkKKyNkZWZpbmUgZHVrX3B1dF9wcm9wX2xpdGVyYWwoY3R4LG9ial9pZHgsa2V5KSAg ZHVrX3B1dF9wcm9wX3N0cmluZygoY3R4KSwgKG9ial9pZHgpLCAoa2V5KSkKKyNlbHNlCitEVUtf RVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19wdXRfcHJvcF9saXRlcmFsX3JhdyhkdWtfY29u dGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90 IGtleV9sZW4pOworI2RlZmluZSBkdWtfcHV0X3Byb3BfbGl0ZXJhbChjdHgsb2JqX2lkeCxrZXkp ICBkdWtfcHV0X3Byb3BfbGl0ZXJhbF9yYXcoKGN0eCksIChvYmpfaWR4KSwgKGtleSksIHNpemVv Zigoa2V5KSkgLSAxVSkKKyNlbmRpZgorRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf cHV0X3Byb3BfaW5kZXgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191 YXJyaWR4X3QgYXJyX2lkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19wdXRf cHJvcF9oZWFwcHRyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lkICpw dHIpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZGVsX3Byb3AoZHVrX2NvbnRl eHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfZGVsX3Byb3Bfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4 LCBjb25zdCBjaGFyICprZXkpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZGVs X3Byb3BfbHN0cmluZyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3Qg Y2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pOworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVG RVJfU0laRSkKKyNkZWZpbmUgZHVrX2RlbF9wcm9wX2xpdGVyYWwoY3R4LG9ial9pZHgsa2V5KSAg ZHVrX2RlbF9wcm9wX3N0cmluZygoY3R4KSwgKG9ial9pZHgpLCAoa2V5KSkKKyNlbHNlCitEVUtf RVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kZWxfcHJvcF9saXRlcmFsX3JhdyhkdWtfY29u dGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90 IGtleV9sZW4pOworI2RlZmluZSBkdWtfZGVsX3Byb3BfbGl0ZXJhbChjdHgsb2JqX2lkeCxrZXkp ICBkdWtfZGVsX3Byb3BfbGl0ZXJhbF9yYXcoKGN0eCksIChvYmpfaWR4KSwgKGtleSksIHNpemVv Zigoa2V5KSkgLSAxVSkKKyNlbmRpZgorRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf ZGVsX3Byb3BfaW5kZXgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191 YXJyaWR4X3QgYXJyX2lkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19kZWxf cHJvcF9oZWFwcHRyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lkICpw dHIpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaGFzX3Byb3AoZHVrX2NvbnRl eHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfaGFzX3Byb3Bfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4 LCBjb25zdCBjaGFyICprZXkpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfaGFz X3Byb3BfbHN0cmluZyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3Qg Y2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4pOworI2lmIGRlZmluZWQoRFVLX1VTRV9QUkVG RVJfU0laRSkKKyNkZWZpbmUgZHVrX2hhc19wcm9wX2xpdGVyYWwoY3R4LG9ial9pZHgsa2V5KSAg ZHVrX2hhc19wcm9wX3N0cmluZygoY3R4KSwgKG9ial9pZHgpLCAoa2V5KSkKKyNlbHNlCitEVUtf RVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19oYXNfcHJvcF9saXRlcmFsX3JhdyhkdWtfY29u dGV4dCAqY3R4LCBkdWtfaWR4X3Qgb2JqX2lkeCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90 IGtleV9sZW4pOworI2RlZmluZSBkdWtfaGFzX3Byb3BfbGl0ZXJhbChjdHgsb2JqX2lkeCxrZXkp ICBkdWtfaGFzX3Byb3BfbGl0ZXJhbF9yYXcoKGN0eCksIChvYmpfaWR4KSwgKGtleSksIHNpemVv Zigoa2V5KSkgLSAxVSkKKyNlbmRpZgorRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtf aGFzX3Byb3BfaW5kZXgoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191 YXJyaWR4X3QgYXJyX2lkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19oYXNf cHJvcF9oZWFwcHRyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4LCB2b2lkICpw dHIpOworCitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19nZXRfcHJvcF9kZXNjKGR1a19jb250 ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfdWludF90IGZsYWdzKTsKK0RVS19FWFRF Uk5BTF9ERUNMIHZvaWQgZHVrX2RlZl9wcm9wKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBv YmpfaWR4LCBkdWtfdWludF90IGZsYWdzKTsKKworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xf dCBkdWtfZ2V0X2dsb2JhbF9zdHJpbmcoZHVrX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqa2V5 KTsKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2dldF9nbG9iYWxfbHN0cmluZyhk dWtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICprZXksIGR1a19zaXplX3Qga2V5X2xlbik7Cisj aWYgZGVmaW5lZChEVUtfVVNFX1BSRUZFUl9TSVpFKQorI2RlZmluZSBkdWtfZ2V0X2dsb2JhbF9s aXRlcmFsKGN0eCxrZXkpICBkdWtfZ2V0X2dsb2JhbF9zdHJpbmcoKGN0eCksIChrZXkpKQorI2Vs c2UKK0RVS19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2dldF9nbG9iYWxfbGl0ZXJhbF9y YXcoZHVrX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqa2V5LCBkdWtfc2l6ZV90IGtleV9sZW4p OworI2RlZmluZSBkdWtfZ2V0X2dsb2JhbF9saXRlcmFsKGN0eCxrZXkpICBkdWtfZ2V0X2dsb2Jh bF9saXRlcmFsX3JhdygoY3R4KSwgKGtleSksIHNpemVvZigoa2V5KSkgLSAxVSkKKyNlbmRpZgor RFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZ2V0X2dsb2JhbF9oZWFwcHRyKGR1a19j b250ZXh0ICpjdHgsIHZvaWQgKnB0cik7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1 a19wdXRfZ2xvYmFsX3N0cmluZyhkdWtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICprZXkpOwor RFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfcHV0X2dsb2JhbF9sc3RyaW5nKGR1a19j b250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmtleSwgZHVrX3NpemVfdCBrZXlfbGVuKTsKKyNpZiBk ZWZpbmVkKERVS19VU0VfUFJFRkVSX1NJWkUpCisjZGVmaW5lIGR1a19wdXRfZ2xvYmFsX2xpdGVy YWwoY3R4LGtleSkgIGR1a19wdXRfZ2xvYmFsX3N0cmluZygoY3R4KSwgKGtleSkpCisjZWxzZQor RFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfcHV0X2dsb2JhbF9saXRlcmFsX3Jhdyhk dWtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICprZXksIGR1a19zaXplX3Qga2V5X2xlbik7Cisj ZGVmaW5lIGR1a19wdXRfZ2xvYmFsX2xpdGVyYWwoY3R4LGtleSkgIGR1a19wdXRfZ2xvYmFsX2xp dGVyYWxfcmF3KChjdHgpLCAoa2V5KSwgc2l6ZW9mKChrZXkpKSAtIDFVKQorI2VuZGlmCitEVUtf RVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19wdXRfZ2xvYmFsX2hlYXBwdHIoZHVrX2NvbnRl eHQgKmN0eCwgdm9pZCAqcHRyKTsKKworLyoKKyAqICBJbnNwZWN0aW9uCisgKi8KKworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfaW5zcGVjdF92YWx1ZShkdWtfY29udGV4dCAqY3R4LCBkdWtf aWR4X3QgaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2luc3BlY3RfY2FsbHN0YWNr X2VudHJ5KGR1a19jb250ZXh0ICpjdHgsIGR1a19pbnRfdCBsZXZlbCk7CisKKy8qCisgKiAgT2Jq ZWN0IHByb3RvdHlwZQorICovCisKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2dldF9wcm90 b3R5cGUoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVD TCB2b2lkIGR1a19zZXRfcHJvdG90eXBlKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgp OworCisvKgorICogIE9iamVjdCBmaW5hbGl6ZXIKKyAqLworCitEVUtfRVhURVJOQUxfREVDTCB2 b2lkIGR1a19nZXRfZmluYWxpemVyKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgpOwor RFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfc2V0X2ZpbmFsaXplcihkdWtfY29udGV4dCAqY3R4 LCBkdWtfaWR4X3QgaWR4KTsKKworLyoKKyAqICBHbG9iYWwgb2JqZWN0CisgKi8KKworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfc2V0X2dsb2JhbF9vYmplY3QoZHVrX2NvbnRleHQgKmN0eCk7 CisKKy8qCisgKiAgRHVrdGFwZS9DIGZ1bmN0aW9uIG1hZ2ljIHZhbHVlCisgKi8KKworRFVLX0VY VEVSTkFMX0RFQ0wgZHVrX2ludF90IGR1a19nZXRfbWFnaWMoZHVrX2NvbnRleHQgKmN0eCwgZHVr X2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19zZXRfbWFnaWMoZHVrX2Nv bnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVrX2ludF90IG1hZ2ljKTsKK0RVS19FWFRFUk5B TF9ERUNMIGR1a19pbnRfdCBkdWtfZ2V0X2N1cnJlbnRfbWFnaWMoZHVrX2NvbnRleHQgKmN0eCk7 CisKKy8qCisgKiAgTW9kdWxlIGhlbHBlcnM6IHB1dCBtdWx0aXBsZSBmdW5jdGlvbiBvciBjb25z dGFudCBwcm9wZXJ0aWVzCisgKi8KKworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfcHV0X2Z1 bmN0aW9uX2xpc3QoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGNvbnN0IGR1 a19mdW5jdGlvbl9saXN0X2VudHJ5ICpmdW5jcyk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1 a19wdXRfbnVtYmVyX2xpc3QoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGNv bnN0IGR1a19udW1iZXJfbGlzdF9lbnRyeSAqbnVtYmVycyk7CisKKy8qCisgKiAgT2JqZWN0IG9w ZXJhdGlvbnMKKyAqLworCitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19jb21wYWN0KGR1a19j b250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQg ZHVrX2VudW0oZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgsIGR1a191aW50X3Qg ZW51bV9mbGFncyk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19uZXh0KGR1a19j b250ZXh0ICpjdHgsIGR1a19pZHhfdCBlbnVtX2lkeCwgZHVrX2Jvb2xfdCBnZXRfdmFsdWUpOwor RFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfc2VhbChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4 X3Qgb2JqX2lkeCk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19mcmVlemUoZHVrX2NvbnRl eHQgKmN0eCwgZHVrX2lkeF90IG9ial9pZHgpOworCisvKgorICogIFN0cmluZyBtYW5pcHVsYXRp b24KKyAqLworCitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19jb25jYXQoZHVrX2NvbnRleHQg KmN0eCwgZHVrX2lkeF90IGNvdW50KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2pvaW4o ZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGNvdW50KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZv aWQgZHVrX2RlY29kZV9zdHJpbmcoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IGlkeCwgZHVr X2RlY29kZV9jaGFyX2Z1bmN0aW9uIGNhbGxiYWNrLCB2b2lkICp1ZGF0YSk7CitEVUtfRVhURVJO QUxfREVDTCB2b2lkIGR1a19tYXBfc3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBp ZHgsIGR1a19tYXBfY2hhcl9mdW5jdGlvbiBjYWxsYmFjaywgdm9pZCAqdWRhdGEpOworRFVLX0VY VEVSTkFMX0RFQ0wgdm9pZCBkdWtfc3Vic3RyaW5nKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhf dCBpZHgsIGR1a19zaXplX3Qgc3RhcnRfY2hhcl9vZmZzZXQsIGR1a19zaXplX3QgZW5kX2NoYXJf b2Zmc2V0KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX3RyaW0oZHVrX2NvbnRleHQgKmN0 eCwgZHVrX2lkeF90IGlkeCk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfY29kZXBvaW50X3QgZHVr X2NoYXJfY29kZV9hdChkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4LCBkdWtfc2l6ZV90 IGNoYXJfb2Zmc2V0KTsKKworLyoKKyAqICBFQ01BU2NyaXB0IG9wZXJhdG9ycworICovCisKK0RV S19FWFRFUk5BTF9ERUNMIGR1a19ib29sX3QgZHVrX2VxdWFscyhkdWtfY29udGV4dCAqY3R4LCBk dWtfaWR4X3QgaWR4MSwgZHVrX2lkeF90IGlkeDIpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jv b2xfdCBkdWtfc3RyaWN0X2VxdWFscyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgaWR4MSwg ZHVrX2lkeF90IGlkeDIpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfc2FtZXZh bHVlKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBpZHgxLCBkdWtfaWR4X3QgaWR4Mik7CitE VUtfRVhURVJOQUxfREVDTCBkdWtfYm9vbF90IGR1a19pbnN0YW5jZW9mKGR1a19jb250ZXh0ICpj dHgsIGR1a19pZHhfdCBpZHgxLCBkdWtfaWR4X3QgaWR4Mik7CisKKy8qCisgKiAgUmFuZG9tCisg Ki8KKworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2RvdWJsZV90IGR1a19yYW5kb20oZHVrX2NvbnRl eHQgKmN0eCk7CisKKy8qCisgKiAgRnVuY3Rpb24gKG1ldGhvZCkgY2FsbHMKKyAqLworCitEVUtf RVhURVJOQUxfREVDTCB2b2lkIGR1a19jYWxsKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBu YXJncyk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lkIGR1a19jYWxsX21ldGhvZChkdWtfY29udGV4 dCAqY3R4LCBkdWtfaWR4X3QgbmFyZ3MpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfY2Fs bF9wcm9wKGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBvYmpfaWR4LCBkdWtfaWR4X3QgbmFy Z3MpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2ludF90IGR1a19wY2FsbChkdWtfY29udGV4dCAq Y3R4LCBkdWtfaWR4X3QgbmFyZ3MpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2ludF90IGR1a19w Y2FsbF9tZXRob2QoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2lkeF90IG5hcmdzKTsKK0RVS19FWFRF Uk5BTF9ERUNMIGR1a19pbnRfdCBkdWtfcGNhbGxfcHJvcChkdWtfY29udGV4dCAqY3R4LCBkdWtf aWR4X3Qgb2JqX2lkeCwgZHVrX2lkeF90IG5hcmdzKTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQg ZHVrX25ldyhkdWtfY29udGV4dCAqY3R4LCBkdWtfaWR4X3QgbmFyZ3MpOworRFVLX0VYVEVSTkFM X0RFQ0wgZHVrX2ludF90IGR1a19wbmV3KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBuYXJn cyk7CitEVUtfRVhURVJOQUxfREVDTCBkdWtfaW50X3QgZHVrX3NhZmVfY2FsbChkdWtfY29udGV4 dCAqY3R4LCBkdWtfc2FmZV9jYWxsX2Z1bmN0aW9uIGZ1bmMsIHZvaWQgKnVkYXRhLCBkdWtfaWR4 X3QgbmFyZ3MsIGR1a19pZHhfdCBucmV0cyk7CisKKy8qCisgKiAgVGhyZWFkIG1hbmFnZW1lbnQK KyAqLworCisvKiBUaGVyZSBhcmUgY3VycmVudGx5IG5vIG5hdGl2ZSBmdW5jdGlvbnMgdG8geWll bGQvcmVzdW1lLCBkdWUgdG8gdGhlIGludGVybmFsCisgKiBsaW1pdGF0aW9ucyBvbiBjb3JvdXRp bmUgaGFuZGxpbmcuICBUaGVzZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICovCisKKy8qCisgKiAg Q29tcGlsYXRpb24gYW5kIGV2YWx1YXRpb24KKyAqLworCitEVUtfRVhURVJOQUxfREVDTCBkdWtf aW50X3QgZHVrX2V2YWxfcmF3KGR1a19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnNyY19idWZm ZXIsIGR1a19zaXplX3Qgc3JjX2xlbmd0aCwgZHVrX3VpbnRfdCBmbGFncyk7CitEVUtfRVhURVJO QUxfREVDTCBkdWtfaW50X3QgZHVrX2NvbXBpbGVfcmF3KGR1a19jb250ZXh0ICpjdHgsIGNvbnN0 IGNoYXIgKnNyY19idWZmZXIsIGR1a19zaXplX3Qgc3JjX2xlbmd0aCwgZHVrX3VpbnRfdCBmbGFn cyk7CisKKy8qIHBsYWluICovCisjZGVmaW5lIGR1a19ldmFsKGN0eCkgIFwKKwkoKHZvaWQpIGR1 a19ldmFsX3JhdygoY3R4KSwgTlVMTCwgMCwgMSAvKmFyZ3MqLyB8IERVS19DT01QSUxFX0VWQUwg fCBEVUtfQ09NUElMRV9OT0ZJTEVOQU1FKSkKKworI2RlZmluZSBkdWtfZXZhbF9ub3Jlc3VsdChj dHgpICBcCisJKCh2b2lkKSBkdWtfZXZhbF9yYXcoKGN0eCksIE5VTEwsIDAsIDEgLyphcmdzKi8g fCBEVUtfQ09NUElMRV9FVkFMIHwgRFVLX0NPTVBJTEVfTk9SRVNVTFQgfCBEVUtfQ09NUElMRV9O T0ZJTEVOQU1FKSkKKworI2RlZmluZSBkdWtfcGV2YWwoY3R4KSAgXAorCShkdWtfZXZhbF9yYXco KGN0eCksIE5VTEwsIDAsIDEgLyphcmdzKi8gfCBEVUtfQ09NUElMRV9FVkFMIHwgRFVLX0NPTVBJ TEVfU0FGRSB8IERVS19DT01QSUxFX05PRklMRU5BTUUpKQorCisjZGVmaW5lIGR1a19wZXZhbF9u b3Jlc3VsdChjdHgpICBcCisJKGR1a19ldmFsX3JhdygoY3R4KSwgTlVMTCwgMCwgMSAvKmFyZ3Mq LyB8IERVS19DT01QSUxFX0VWQUwgfCBEVUtfQ09NUElMRV9TQUZFIHwgRFVLX0NPTVBJTEVfTk9S RVNVTFQgfCBEVUtfQ09NUElMRV9OT0ZJTEVOQU1FKSkKKworI2RlZmluZSBkdWtfY29tcGlsZShj dHgsZmxhZ3MpICBcCisJKCh2b2lkKSBkdWtfY29tcGlsZV9yYXcoKGN0eCksIE5VTEwsIDAsIDIg LyphcmdzKi8gfCAoZmxhZ3MpKSkKKworI2RlZmluZSBkdWtfcGNvbXBpbGUoY3R4LGZsYWdzKSAg XAorCShkdWtfY29tcGlsZV9yYXcoKGN0eCksIE5VTEwsIDAsIDIgLyphcmdzKi8gfCAoZmxhZ3Mp IHwgRFVLX0NPTVBJTEVfU0FGRSkpCisKKy8qIHN0cmluZyAqLworI2RlZmluZSBkdWtfZXZhbF9z dHJpbmcoY3R4LHNyYykgIFwKKwkoKHZvaWQpIGR1a19ldmFsX3JhdygoY3R4KSwgKHNyYyksIDAs IDAgLyphcmdzKi8gfCBEVUtfQ09NUElMRV9FVkFMIHwgRFVLX0NPTVBJTEVfTk9TT1VSQ0UgfCBE VUtfQ09NUElMRV9TVFJMRU4gfCBEVUtfQ09NUElMRV9OT0ZJTEVOQU1FKSkKKworI2RlZmluZSBk dWtfZXZhbF9zdHJpbmdfbm9yZXN1bHQoY3R4LHNyYykgIFwKKwkoKHZvaWQpIGR1a19ldmFsX3Jh dygoY3R4KSwgKHNyYyksIDAsIDAgLyphcmdzKi8gfCBEVUtfQ09NUElMRV9FVkFMIHwgRFVLX0NP TVBJTEVfTk9TT1VSQ0UgfCBEVUtfQ09NUElMRV9TVFJMRU4gfCBEVUtfQ09NUElMRV9OT1JFU1VM VCB8IERVS19DT01QSUxFX05PRklMRU5BTUUpKQorCisjZGVmaW5lIGR1a19wZXZhbF9zdHJpbmco Y3R4LHNyYykgIFwKKwkoZHVrX2V2YWxfcmF3KChjdHgpLCAoc3JjKSwgMCwgMCAvKmFyZ3MqLyB8 IERVS19DT01QSUxFX0VWQUwgfCBEVUtfQ09NUElMRV9TQUZFIHwgRFVLX0NPTVBJTEVfTk9TT1VS Q0UgfCBEVUtfQ09NUElMRV9TVFJMRU4gfCBEVUtfQ09NUElMRV9OT0ZJTEVOQU1FKSkKKworI2Rl ZmluZSBkdWtfcGV2YWxfc3RyaW5nX25vcmVzdWx0KGN0eCxzcmMpICBcCisJKGR1a19ldmFsX3Jh dygoY3R4KSwgKHNyYyksIDAsIDAgLyphcmdzKi8gfCBEVUtfQ09NUElMRV9FVkFMIHwgRFVLX0NP TVBJTEVfU0FGRSB8IERVS19DT01QSUxFX05PU09VUkNFIHwgRFVLX0NPTVBJTEVfU1RSTEVOIHwg RFVLX0NPTVBJTEVfTk9SRVNVTFQgfCBEVUtfQ09NUElMRV9OT0ZJTEVOQU1FKSkKKworI2RlZmlu ZSBkdWtfY29tcGlsZV9zdHJpbmcoY3R4LGZsYWdzLHNyYykgIFwKKwkoKHZvaWQpIGR1a19jb21w aWxlX3JhdygoY3R4KSwgKHNyYyksIDAsIDAgLyphcmdzKi8gfCAoZmxhZ3MpIHwgRFVLX0NPTVBJ TEVfTk9TT1VSQ0UgfCBEVUtfQ09NUElMRV9TVFJMRU4gfCBEVUtfQ09NUElMRV9OT0ZJTEVOQU1F KSkKKworI2RlZmluZSBkdWtfY29tcGlsZV9zdHJpbmdfZmlsZW5hbWUoY3R4LGZsYWdzLHNyYykg IFwKKwkoKHZvaWQpIGR1a19jb21waWxlX3JhdygoY3R4KSwgKHNyYyksIDAsIDEgLyphcmdzKi8g fCAoZmxhZ3MpIHwgRFVLX0NPTVBJTEVfTk9TT1VSQ0UgfCBEVUtfQ09NUElMRV9TVFJMRU4pKQor CisjZGVmaW5lIGR1a19wY29tcGlsZV9zdHJpbmcoY3R4LGZsYWdzLHNyYykgIFwKKwkoZHVrX2Nv bXBpbGVfcmF3KChjdHgpLCAoc3JjKSwgMCwgMCAvKmFyZ3MqLyB8IChmbGFncykgfCBEVUtfQ09N UElMRV9TQUZFIHwgRFVLX0NPTVBJTEVfTk9TT1VSQ0UgfCBEVUtfQ09NUElMRV9TVFJMRU4gfCBE VUtfQ09NUElMRV9OT0ZJTEVOQU1FKSkKKworI2RlZmluZSBkdWtfcGNvbXBpbGVfc3RyaW5nX2Zp bGVuYW1lKGN0eCxmbGFncyxzcmMpICBcCisJKGR1a19jb21waWxlX3JhdygoY3R4KSwgKHNyYyks IDAsIDEgLyphcmdzKi8gfCAoZmxhZ3MpIHwgRFVLX0NPTVBJTEVfU0FGRSB8IERVS19DT01QSUxF X05PU09VUkNFIHwgRFVLX0NPTVBJTEVfU1RSTEVOKSkKKworLyogbHN0cmluZyAqLworI2RlZmlu ZSBkdWtfZXZhbF9sc3RyaW5nKGN0eCxidWYsbGVuKSAgXAorCSgodm9pZCkgZHVrX2V2YWxfcmF3 KChjdHgpLCBidWYsIGxlbiwgMCAvKmFyZ3MqLyB8IERVS19DT01QSUxFX0VWQUwgfCBEVUtfQ09N UElMRV9OT1NPVVJDRSB8IERVS19DT01QSUxFX05PRklMRU5BTUUpKQorCisjZGVmaW5lIGR1a19l dmFsX2xzdHJpbmdfbm9yZXN1bHQoY3R4LGJ1ZixsZW4pICBcCisJKCh2b2lkKSBkdWtfZXZhbF9y YXcoKGN0eCksIGJ1ZiwgbGVuLCAwIC8qYXJncyovIHwgRFVLX0NPTVBJTEVfRVZBTCB8IERVS19D T01QSUxFX05PU09VUkNFIHwgRFVLX0NPTVBJTEVfTk9SRVNVTFQgfCBEVUtfQ09NUElMRV9OT0ZJ TEVOQU1FKSkKKworI2RlZmluZSBkdWtfcGV2YWxfbHN0cmluZyhjdHgsYnVmLGxlbikgIFwKKwko ZHVrX2V2YWxfcmF3KChjdHgpLCBidWYsIGxlbiwgMCAvKmFyZ3MqLyB8IERVS19DT01QSUxFX0VW QUwgfCBEVUtfQ09NUElMRV9OT1NPVVJDRSB8IERVS19DT01QSUxFX1NBRkUgfCBEVUtfQ09NUElM RV9OT0ZJTEVOQU1FKSkKKworI2RlZmluZSBkdWtfcGV2YWxfbHN0cmluZ19ub3Jlc3VsdChjdHgs YnVmLGxlbikgIFwKKwkoZHVrX2V2YWxfcmF3KChjdHgpLCBidWYsIGxlbiwgMCAvKmFyZ3MqLyB8 IERVS19DT01QSUxFX0VWQUwgfCBEVUtfQ09NUElMRV9TQUZFIHwgRFVLX0NPTVBJTEVfTk9TT1VS Q0UgfCBEVUtfQ09NUElMRV9OT1JFU1VMVCB8IERVS19DT01QSUxFX05PRklMRU5BTUUpKQorCisj ZGVmaW5lIGR1a19jb21waWxlX2xzdHJpbmcoY3R4LGZsYWdzLGJ1ZixsZW4pICBcCisJKCh2b2lk KSBkdWtfY29tcGlsZV9yYXcoKGN0eCksIGJ1ZiwgbGVuLCAwIC8qYXJncyovIHwgKGZsYWdzKSB8 IERVS19DT01QSUxFX05PU09VUkNFIHwgRFVLX0NPTVBJTEVfTk9GSUxFTkFNRSkpCisKKyNkZWZp bmUgZHVrX2NvbXBpbGVfbHN0cmluZ19maWxlbmFtZShjdHgsZmxhZ3MsYnVmLGxlbikgIFwKKwko KHZvaWQpIGR1a19jb21waWxlX3JhdygoY3R4KSwgYnVmLCBsZW4sIDEgLyphcmdzKi8gfCAoZmxh Z3MpIHwgRFVLX0NPTVBJTEVfTk9TT1VSQ0UpKQorCisjZGVmaW5lIGR1a19wY29tcGlsZV9sc3Ry aW5nKGN0eCxmbGFncyxidWYsbGVuKSAgXAorCShkdWtfY29tcGlsZV9yYXcoKGN0eCksIGJ1Ziwg bGVuLCAwIC8qYXJncyovIHwgKGZsYWdzKSB8IERVS19DT01QSUxFX1NBRkUgfCBEVUtfQ09NUElM RV9OT1NPVVJDRSB8IERVS19DT01QSUxFX05PRklMRU5BTUUpKQorCisjZGVmaW5lIGR1a19wY29t cGlsZV9sc3RyaW5nX2ZpbGVuYW1lKGN0eCxmbGFncyxidWYsbGVuKSAgXAorCShkdWtfY29tcGls ZV9yYXcoKGN0eCksIGJ1ZiwgbGVuLCAxIC8qYXJncyovIHwgKGZsYWdzKSB8IERVS19DT01QSUxF X1NBRkUgfCBEVUtfQ09NUElMRV9OT1NPVVJDRSkpCisKKy8qCisgKiAgQnl0ZWNvZGUgbG9hZC9k dW1wCisgKi8KKworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZHVtcF9mdW5jdGlvbihkdWtf Y29udGV4dCAqY3R4KTsKK0RVS19FWFRFUk5BTF9ERUNMIHZvaWQgZHVrX2xvYWRfZnVuY3Rpb24o ZHVrX2NvbnRleHQgKmN0eCk7CisKKy8qCisgKiAgRGVidWdnaW5nCisgKi8KKworRFVLX0VYVEVS TkFMX0RFQ0wgdm9pZCBkdWtfcHVzaF9jb250ZXh0X2R1bXAoZHVrX2NvbnRleHQgKmN0eCk7CisK Ky8qCisgKiAgRGVidWdnZXIgKGRlYnVnIHByb3RvY29sKQorICovCisKK0RVS19FWFRFUk5BTF9E RUNMIHZvaWQgZHVrX2RlYnVnZ2VyX2F0dGFjaChkdWtfY29udGV4dCAqY3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1a19kZWJ1Z19yZWFkX2Z1bmN0aW9u IHJlYWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVr X2RlYnVnX3dyaXRlX2Z1bmN0aW9uIHdyaXRlX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1a19kZWJ1Z19wZWVrX2Z1bmN0aW9uIHBlZWtfY2IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2RlYnVnX3JlYWRfZmx1 c2hfZnVuY3Rpb24gcmVhZF9mbHVzaF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkdWtfZGVidWdfd3JpdGVfZmx1c2hfZnVuY3Rpb24gd3JpdGVfZmx1c2hf Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVrX2RlYnVn X3JlcXVlc3RfZnVuY3Rpb24gcmVxdWVzdF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkdWtfZGVidWdfZGV0YWNoZWRfZnVuY3Rpb24gZGV0YWNoZWRfY2Is CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdWRhdGEp OworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVidWdnZXJfZGV0YWNoKGR1a19jb250ZXh0 ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgdm9pZCBkdWtfZGVidWdnZXJfY29vcGVyYXRlKGR1 a19jb250ZXh0ICpjdHgpOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVrX2Jvb2xfdCBkdWtfZGVidWdn ZXJfbm90aWZ5KGR1a19jb250ZXh0ICpjdHgsIGR1a19pZHhfdCBudmFsdWVzKTsKK0RVS19FWFRF Uk5BTF9ERUNMIHZvaWQgZHVrX2RlYnVnZ2VyX3BhdXNlKGR1a19jb250ZXh0ICpjdHgpOworCisv KgorICogIFRpbWUgaGFuZGxpbmcKKyAqLworCitEVUtfRVhURVJOQUxfREVDTCBkdWtfZG91Ymxl X3QgZHVrX2dldF9ub3coZHVrX2NvbnRleHQgKmN0eCk7CitEVUtfRVhURVJOQUxfREVDTCB2b2lk IGR1a190aW1lX3RvX2NvbXBvbmVudHMoZHVrX2NvbnRleHQgKmN0eCwgZHVrX2RvdWJsZV90IHRp bWV2YWwsIGR1a190aW1lX2NvbXBvbmVudHMgKmNvbXApOworRFVLX0VYVEVSTkFMX0RFQ0wgZHVr X2RvdWJsZV90IGR1a19jb21wb25lbnRzX3RvX3RpbWUoZHVrX2NvbnRleHQgKmN0eCwgZHVrX3Rp bWVfY29tcG9uZW50cyAqY29tcCk7CisKKy8qCisgKiAgRGF0ZSBwcm92aWRlciByZWxhdGVkIGNv bnN0YW50cworICoKKyAqICBOT1RFOiBUaGVzZSBhcmUgInNlbWkgcHVibGljIiAtIHlvdSBzaG91 bGQgb25seSB1c2UgdGhlc2UgaWYgeW91IHdyaXRlCisgKiAgeW91ciBvd24gcGxhdGZvcm0gc3Bl Y2lmaWMgRGF0ZSBwcm92aWRlciwgc2VlIGRvYy9kYXRldGltZS5yc3QuCisgKi8KKworLyogTWls bGlzZWNvbmQgY291bnQgY29uc3RhbnRzLiAqLworI2RlZmluZSBEVUtfREFURV9NU0VDX1NFQ09O RCAgICAgICAgICAxMDAwTAorI2RlZmluZSBEVUtfREFURV9NU0VDX01JTlVURSAgICAgICAgICAo NjBMICogMTAwMEwpCisjZGVmaW5lIERVS19EQVRFX01TRUNfSE9VUiAgICAgICAgICAgICg2MEwg KiA2MEwgKiAxMDAwTCkKKyNkZWZpbmUgRFVLX0RBVEVfTVNFQ19EQVkgICAgICAgICAgICAgKDI0 TCAqIDYwTCAqIDYwTCAqIDEwMDBMKQorCisvKiBFQ01BU2NyaXB0IGRhdGUgcmFuZ2UgaXMgMTAw IG1pbGxpb24gZGF5cyBmcm9tIEVwb2NoOgorICogPiAxMDBlNiAqIDI0ICogNjAgKiA2MCAqIDEw MDAgIC8vIDEwME0gZGF5cyBpbiBtaWxsaXNlY3MKKyAqIDg2NDAwMDAwMDAwMDAwMDAKKyAqICg9 IDguNjRlMTUpCisgKi8KKyNkZWZpbmUgRFVLX0RBVEVfTVNFQ18xMDBNX0RBWVMgICAgICAgICAo OC42NGUxNSkKKyNkZWZpbmUgRFVLX0RBVEVfTVNFQ18xMDBNX0RBWVNfTEVFV0FZICAoOC42NGUx NSArIDI0ICogMzYwMGUzKQorCisvKiBFQ01BU2NyaXB0IHllYXIgcmFuZ2U6CisgKiA+IG5ldyBE YXRlKDEwMGU2ICogMjQgKiAzNjAwZTMpLnRvSVNPU3RyaW5nKCkKKyAqICcrMjc1NzYwLTA5LTEz VDAwOjAwOjAwLjAwMFonCisgKiA+IG5ldyBEYXRlKC0xMDBlNiAqIDI0ICogMzYwMGUzKS50b0lT T1N0cmluZygpCisgKiAnLTI3MTgyMS0wNC0yMFQwMDowMDowMC4wMDBaJworICovCisjZGVmaW5l IERVS19EQVRFX01JTl9FQ01BX1lFQVIgICAgICgtMjcxODIxTCkKKyNkZWZpbmUgRFVLX0RBVEVf TUFYX0VDTUFfWUVBUiAgICAgMjc1NzYwTAorCisvKiBQYXJ0IGluZGljZXMgZm9yIGludGVybmFs IGJyZWFrZG93bnMuICBQYXJ0IG9yZGVyIGZyb20gRFVLX0RBVEVfSURYX1lFQVIKKyAqIHRvIERV S19EQVRFX0lEWF9NSUxMSVNFQ09ORCBtYXRjaGVzIGFyZ3VtZW50IG9yZGVyaW5nIG9mIEVDTUFT Y3JpcHQgQVBJCisgKiBjYWxscyAobGlrZSBEYXRlIGNvbnN0cnVjdG9yIGNhbGwpLiAgU29tZSBm dW5jdGlvbnMgaW4gZHVrX2JpX2RhdGUuYworICogZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBvcmRl cmluZywgc28gY2hhbmdlIHdpdGggY2FyZS4gIDE2IGJpdHMgYXJlIG5vdAorICogZW5vdWdoIGZv ciBhbGwgcGFydHMgKHllYXIsIHNwZWNpZmljYWxseSkuCisgKgorICogTXVzdCBiZSBpbi1zeW5j IHdpdGggZ2VuYnVpbHRpbnMucHkuCisgKi8KKyNkZWZpbmUgRFVLX0RBVEVfSURYX1lFQVIgICAg ICAgICAgIDAgIC8qIHllYXIgKi8KKyNkZWZpbmUgRFVLX0RBVEVfSURYX01PTlRIICAgICAgICAg IDEgIC8qIG1vbnRoOiAwIHRvIDExICovCisjZGVmaW5lIERVS19EQVRFX0lEWF9EQVkgICAgICAg ICAgICAyICAvKiBkYXkgd2l0aGluIG1vbnRoOiAwIHRvIDMwICovCisjZGVmaW5lIERVS19EQVRF X0lEWF9IT1VSICAgICAgICAgICAzCisjZGVmaW5lIERVS19EQVRFX0lEWF9NSU5VVEUgICAgICAg ICA0CisjZGVmaW5lIERVS19EQVRFX0lEWF9TRUNPTkQgICAgICAgICA1CisjZGVmaW5lIERVS19E QVRFX0lEWF9NSUxMSVNFQ09ORCAgICA2CisjZGVmaW5lIERVS19EQVRFX0lEWF9XRUVLREFZICAg ICAgICA3ICAvKiB3ZWVrZGF5OiAwIHRvIDYsIDA9c3VuZGF5LCAxPW1vbmRheSwgZXRjICovCisj ZGVmaW5lIERVS19EQVRFX0lEWF9OVU1fUEFSVFMgICAgICA4CisKKy8qIEludGVybmFsIEFQSSBj YWxsIGZsYWdzLCB1c2VkIGZvciB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBkdWtfYmlfZGF0ZS5jLgor ICogQ2VydGFpbiBmbGFncyBhcmUgdXNlZCBieSBvbmx5IGNlcnRhaW4gZnVuY3Rpb25zLCBidXQg c2luY2UgdGhlIGZsYWdzCisgKiBkb24ndCBvdmVybGFwLCBhIHNpbmdsZSBmbGFncyB2YWx1ZSBj YW4gYmUgcGFzc2VkIGFyb3VuZCB0byBtdWx0aXBsZQorICogZnVuY3Rpb25zLgorICoKKyAqIFRo ZSB1bnVzZWQgdG9wIGJpdHMgb2YgdGhlIGZsYWdzIGZpZWxkIGFyZSBhbHNvIHVzZWQgdG8gcGFz cyB2YWx1ZXMKKyAqIHRvIGhlbHBlcnMgKGR1a19fZ2V0X3BhcnRfaGVscGVyKCkgYW5kIGR1a19f c2V0X3BhcnRfaGVscGVyKCkpLgorICoKKyAqIE11c3QgYmUgaW4tc3luYyB3aXRoIGdlbmJ1aWx0 aW5zLnB5LgorICovCisKKy8qIE5PVEU6IHdoZW4gd3JpdGluZyBhIERhdGUgcHJvdmlkZXIgeW91 IG9ubHkgbmVlZCBhIGZldyBzcGVjaWZpYworICogZmxhZ3MgZnJvbSBoZXJlLCB0aGUgcmVzdCBh cmUgaW50ZXJuYWwuICBBdm9pZCB1c2luZyBhbnl0aGluZyB5b3UKKyAqIGRvbid0IG5lZWQuCisg Ki8KKworI2RlZmluZSBEVUtfREFURV9GTEFHX05BTl9UT19aRVJPICAgICAgICAgICgxIDw8IDAp ICAvKiB0aW1ldmFsIGJyZWFrZG93bjogaW50ZXJuYWwgdGltZSB2YWx1ZSBOYU4gLT4gemVybyAq LworI2RlZmluZSBEVUtfREFURV9GTEFHX05BTl9UT19SQU5HRV9FUlJPUiAgICgxIDw8IDEpICAv KiB0aW1ldmFsIGJyZWFrZG93bjogaW50ZXJuYWwgdGltZSB2YWx1ZSBOYU4gLT4gUmFuZ2VFcnJv ciAodG9JU09TdHJpbmcpICovCisjZGVmaW5lIERVS19EQVRFX0ZMQUdfT05FQkFTRUQgICAgICAg ICAgICAgKDEgPDwgMikgIC8qIHRpbWV2YWwgYnJlYWtkb3duOiBjb252ZXJ0IG1vbnRoIGFuZCBk YXktb2YtbW9udGggcGFydHMgdG8gb25lLWJhc2VkIChkZWZhdWx0IGlzIHplcm8tYmFzZWQpICov CisjZGVmaW5lIERVS19EQVRFX0ZMQUdfRVFVSVZZRUFSICAgICAgICAgICAgKDEgPDwgMykgIC8q IHRpbWV2YWwgYnJlYWtkb3duOiByZXBsYWNlIHllYXIgd2l0aCBlcXVpdmFsZW50IHllYXIgaW4g dGhlIFsxOTcxLDIwMzddIHJhbmdlIGZvciBEU1QgY2FsY3VsYXRpb25zICovCisjZGVmaW5lIERV S19EQVRFX0ZMQUdfTE9DQUxUSU1FICAgICAgICAgICAgKDEgPDwgNCkgIC8qIGNvbnZlcnQgdGlt ZSB2YWx1ZSB0byBsb2NhbCB0aW1lICovCisjZGVmaW5lIERVS19EQVRFX0ZMQUdfU1VCMTkwMCAg ICAgICAgICAgICAgKDEgPDwgNSkgIC8qIGdldHRlcjogc3VidHJhY3QgMTkwMCBmcm9tIHllYXIg d2hlbiBnZXR0aW5nIHllYXIgcGFydCAqLworI2RlZmluZSBEVUtfREFURV9GTEFHX1RPU1RSSU5H X0RBVEUgICAgICAgICgxIDw8IDYpICAvKiBpbmNsdWRlIGRhdGUgcGFydCBpbiBzdHJpbmcgY29u dmVyc2lvbiByZXN1bHQgKi8KKyNkZWZpbmUgRFVLX0RBVEVfRkxBR19UT1NUUklOR19USU1FICAg ICAgICAoMSA8PCA3KSAgLyogaW5jbHVkZSB0aW1lIHBhcnQgaW4gc3RyaW5nIGNvbnZlcnNpb24g cmVzdWx0ICovCisjZGVmaW5lIERVS19EQVRFX0ZMQUdfVE9TVFJJTkdfTE9DQUxFICAgICAgKDEg PDwgOCkgIC8qIHVzZSBsb2NhbGUgc3BlY2lmaWMgZm9ybWF0dGluZyBpZiBhdmFpbGFibGUgKi8K KyNkZWZpbmUgRFVLX0RBVEVfRkxBR19USU1FU0VUVEVSICAgICAgICAgICAoMSA8PCA5KSAgLyog c2V0dGVyOiBjYWxsIGlzIGEgdGltZSBzZXR0ZXIgKGFmZmVjdHMgaG91ciwgbWluLCBzZWMsIG1z KTsgb3RoZXJ3aXNlIGRhdGUgc2V0dGVyIChhZmZlY3RzIHllYXIsIG1vbnRoLCBkYXktaW4tbW9u dGgpICovCisjZGVmaW5lIERVS19EQVRFX0ZMQUdfWUVBUl9GSVhVUCAgICAgICAgICAgKDEgPDwg MTApIC8qIHNldHRlcjogcGVyZm9ybSAyLWRpZ2l0IHllYXIgZml4dXAgKDAwLi4uOTkgLT4gMTkw MC4uLjE5OTkpICovCisjZGVmaW5lIERVS19EQVRFX0ZMQUdfU0VQX1QgICAgICAgICAgICAgICAg KDEgPDwgMTEpIC8qIHN0cmluZyBjb252ZXJzaW9uOiB1c2UgJ1QnIGluc3RlYWQgb2YgJyAnIGFz IGEgc2VwYXJhdG9yICovCisjZGVmaW5lIERVS19EQVRFX0ZMQUdfVkFMVUVfU0hJRlQgICAgICAg ICAgMTIgICAgICAgIC8qIGFkZGl0aW9uYWwgdmFsdWVzIGJlZ2luIGF0IGJpdCAxMiAqLworCisv KgorICogIFJPTSBwb2ludGVyIGNvbXByZXNzaW9uCisgKi8KKworLyogU3VwcG9ydCBhcnJheSBm b3IgUk9NIHBvaW50ZXIgY29tcHJlc3Npb24uICBPbmx5IGRlY2xhcmVkIHdoZW4gUk9NCisgKiBw b2ludGVyIGNvbXByZXNzaW9uIGlzIGFjdGl2ZS4KKyAqLworI2lmIGRlZmluZWQoRFVLX1VTRV9S T01fT0JKRUNUUykgJiYgZGVmaW5lZChEVUtfVVNFX0hFQVBQVFIxNikKK0RVS19FWFRFUk5BTF9E RUNMIGNvbnN0IHZvaWQgKiBjb25zdCBkdWtfcm9tX2NvbXByZXNzZWRfcG9pbnRlcnNbXTsKKyNl bmRpZgorCisvKgorICogIEMrKyBuYW1lIG1hbmdsaW5nCisgKi8KKworI2lmIGRlZmluZWQoX19j cGx1c3BsdXMpCisvKiBlbmQgJ2V4dGVybiAiQyInIHdyYXBwZXIgKi8KK30KKyNlbmRpZgorCisv KgorICogIEVORCBQVUJMSUMgQVBJCisgKi8KKworI2VuZGlmICAvKiBEVUtUQVBFX0hfSU5DTFVE RUQgKi8KZGlmZiAtLWdpdCBhL3NoZWxsL2luY2x1ZGUvaWd0LWJ1aWx0aW5zLmggYi9zaGVsbC9p bmNsdWRlL2lndC1idWlsdGlucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uMGYzZjZjODAyCi0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwvaW5jbHVkZS9pZ3QtYnVpbHRp bnMuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIElHVF9CVUlMVElOU19ICisjZGVmaW5lIElH VF9CVUlMVElOU19ICisKKyNpbmNsdWRlICJkdWt0YXBlLmgiCisKK3N0cnVjdCBpZ3RfYnVpbHRp biB7CisJc3RydWN0IGlndF9idWlsdGluICpuZXh0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJZHVr X3JldF90ICgqY3RvcikoZHVrX2NvbnRleHQgKmN0eCk7Cit9OworCitpbnQgaWd0X2J1aWx0aW5z X3NldHVwKGR1a19jb250ZXh0ICpjdHgpOworCit2b2lkIGlndF9yZWdpc3Rlcl9idWlsdGluKHN0 cnVjdCBpZ3RfYnVpbHRpbiAqYik7Cit2b2lkIGlndF9yZWdpc3Rlcl9nbG9iYWwoc3RydWN0IGln dF9idWlsdGluICpiKTsKKworI2VuZGlmIC8qIElHVF9CVUlMVElOU19IICovCmRpZmYgLS1naXQg YS9zaGVsbC9tZXNvbi5idWlsZCBiL3NoZWxsL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uN2ViMDgxYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwv bWVzb24uYnVpbGQKQEAgLTAsMCArMSw3IEBACitleGVjdXRhYmxlKCdpZ3QnLCBbCisJICAgICAn ZHVrdGFwZS9kdWt0YXBlLmMnLAorCSAgICAgJ2lndC1idWlsdGlucy5jJywKKwkgICAgICdpZ3Qt c2hlbGwuYycsCisJICAgXSwgZGVwZW5kZW5jaWVzIDogWyBtYXRoLCBsaWJrbW9kIF0sCisJICAg aW5jbHVkZV9kaXJlY3RvcmllcyA6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJ2luY2x1ZGUnLCAnLi4v aW5jbHVkZScpCispCi0tIAoyLjE4LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aWd0LWRldgo=