From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HSJXH-0004Bb-PR for qemu-devel@nongnu.org; Fri, 16 Mar 2007 17:00:27 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HSJXG-0004Ah-AP for qemu-devel@nongnu.org; Fri, 16 Mar 2007 17:00:27 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HSJXG-0004Aa-6p for qemu-devel@nongnu.org; Fri, 16 Mar 2007 16:00:26 -0500 Received: from wr-out-0506.google.com ([64.233.184.237]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HSJW2-0007VQ-Rf for qemu-devel@nongnu.org; Fri, 16 Mar 2007 16:59:14 -0400 Received: by wr-out-0506.google.com with SMTP id q50so693780wrq for ; Fri, 16 Mar 2007 13:59:10 -0700 (PDT) Message-ID: Date: Fri, 16 Mar 2007 21:59:09 +0100 From: "andrzej zaborowski" Sender: balrogg@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_99022_19134350.1174078749349" Subject: [Qemu-devel] [PATCH] SecureDigital card emulation. Reply-To: balrogg@gmail.com, qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_99022_19134350.1174078749349 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Emulates an SD card with the full command set (no SPI mode though). Should be more or less compliant with version 1.10 specification. This is mostly the same code I used for the OMAP emulation a long time ago, so it seems to be rather generic. I added the "-sd filename" switch to indicate the card image to use. Cheers, Andrew ------=_Part_99022_19134350.1174078749349 Content-Type: text/plain; name=0004-SecureDigital-card-emulation.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezd69jyp Content-Disposition: attachment; filename="0004-SecureDigital-card-emulation.txt" RnJvbSA4YzUzNzkxZWMxMWZmZGEwM2RlNzg4ZDViMGNiODUxMjkxOGQ4MDI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IEZyaSwgMTYgTWFyIDIwMDcgMTY6MDA6NTUgKzAxMDAKU3ViamVjdDogW1BBVENIXSBT ZWN1cmVEaWdpdGFsIGNhcmQgZW11bGF0aW9uLgoKLS0tCiBody9zZC5jIHwgMTUxOSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGh3L3NkLmggfCAgMTI5ICsrKysrKwogdmwuYyAgICB8ICAgMTIgKy0KIHZsLmggICAgfCAgICAy ICsKIDQgZmlsZXMgY2hhbmdlZCwgMTY2MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2h3L3NkLmMgYi9ody9zZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjM3YWNjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9ody9zZC5jCkBAIC0wLDAgKzEs MTUxOSBAQAorLyogCisgKiBTRCBNZW1vcnkgQ2FyZCBlbXVsYXRpb24gYXMgZGVmaW5lZCBpbiB0 aGUgIlNEIE1lbW9yeSBDYXJkIFBoeXNpY2FsCisgKiBsYXllciBzcGVjaWZpY2F0aW9uLCBWZXJz aW9uIDEuMTAuIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBBbmRyemVqIFphYm9yb3dza2kg IDxiYWxyb2dAemFib3Iub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInNkLmgiCisKK3N0 cnVjdCBzZF9zdGF0ZV9zIHsKKyAgICBlbnVtIHsKKyAgICAgICAgc2RfaW5hY3RpdmUsCisgICAg ICAgIHNkX2NhcmRfaWRlbnRpZmljYXRpb25fbW9kZSwKKyAgICAgICAgc2RfZGF0YV90cmFuc2Zl cl9tb2RlLAorICAgIH0gbW9kZTsKKyAgICBlbnVtIHsKKyAgICAgICAgc2RfaW5hY3RpdmVfc3Rh dGUgPSAtMSwKKyAgICAgICAgc2RfaWRsZV9zdGF0ZSA9IDAsCisgICAgICAgIHNkX3JlYWR5X3N0 YXRlLAorICAgICAgICBzZF9pZGVudGlmaWNhdGlvbl9zdGF0ZSwKKyAgICAgICAgc2Rfc3RhbmRi eV9zdGF0ZSwKKyAgICAgICAgc2RfdHJhbnNmZXJfc3RhdGUsCisgICAgICAgIHNkX3NlbmRpbmdk YXRhX3N0YXRlLAorICAgICAgICBzZF9yZWNlaXZpbmdkYXRhX3N0YXRlLAorICAgICAgICBzZF9w cm9ncmFtbWluZ19zdGF0ZSwKKyAgICAgICAgc2RfZGlzY29ubmVjdF9zdGF0ZSwKKyAgICB9IHN0 YXRlOworICAgIHVpbnQzMl90IG9jcjsKKyAgICB1aW50OF90IHNjcls4XTsKKyAgICB1aW50OF90 IGNpZFsxNl07CisgICAgdWludDhfdCBjc2RbMTZdOworICAgIHVpbnQxNl90IHJjYTsKKyAgICB1 aW50MzJfdCBjYXJkX3N0YXR1czsKKyAgICB1aW50OF90IHNkX3N0YXR1c1s2NF07CisgICAgaW50 IHdwX3N3aXRjaDsKKyAgICBpbnQgKndwX2dyb3VwczsKKyAgICB1aW50MzJfdCBzaXplOworICAg IGludCBibGtfbGVuOworICAgIHVpbnQzMl90IGVyYXNlX3N0YXJ0OworICAgIHVpbnQzMl90IGVy YXNlX2VuZDsKKyAgICB1aW50OF90IHB3ZFsxNl07CisgICAgaW50IHB3ZF9sZW47CisgICAgaW50 IGZ1bmN0aW9uX2dyb3VwWzZdOworCisgICAgaW50IGN1cnJlbnRfY21kOworICAgIGludCBibGtf d3JpdHRlbjsKKyAgICB1aW50MzJfdCBkYXRhX3N0YXJ0OworICAgIHVpbnQzMl90IGRhdGFfb2Zm c2V0OworICAgIHVpbnQ4X3QgZGF0YVs1MTJdOworICAgIHZvaWQgKCpyZWFkb25seV9jYikodm9p ZCAqLCBpbnQpOworICAgIHZvaWQgKCppbnNlcnRlZF9jYikodm9pZCAqLCBpbnQpOworICAgIHZv aWQgKm9wYXF1ZTsKKyAgICBCbG9ja0RyaXZlclN0YXRlICpiZHJ2OworfTsKKworc3RhdGljIHZv aWQgc2Rfc2V0X3N0YXR1cyhzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QpCit7CisgICAgc3dpdGNoIChz ZC0+c3RhdGUpIHsKKyAgICBjYXNlIHNkX2luYWN0aXZlX3N0YXRlOgorICAgICAgICBzZC0+bW9k ZSA9IHNkX2luYWN0aXZlOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2RfaWRsZV9zdGF0 ZToKKyAgICBjYXNlIHNkX3JlYWR5X3N0YXRlOgorICAgIGNhc2Ugc2RfaWRlbnRpZmljYXRpb25f c3RhdGU6CisgICAgICAgIHNkLT5tb2RlID0gc2RfY2FyZF9pZGVudGlmaWNhdGlvbl9tb2RlOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2Rfc3RhbmRieV9zdGF0ZToKKyAgICBjYXNlIHNk X3RyYW5zZmVyX3N0YXRlOgorICAgIGNhc2Ugc2Rfc2VuZGluZ2RhdGFfc3RhdGU6CisgICAgY2Fz ZSBzZF9yZWNlaXZpbmdkYXRhX3N0YXRlOgorICAgIGNhc2Ugc2RfcHJvZ3JhbW1pbmdfc3RhdGU6 CisgICAgY2FzZSBzZF9kaXNjb25uZWN0X3N0YXRlOgorICAgICAgICBzZC0+bW9kZSA9IHNkX2Rh dGFfdHJhbnNmZXJfbW9kZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2QtPmNhcmRf c3RhdHVzICY9IH5DVVJSRU5UX1NUQVRFOworICAgIHNkLT5jYXJkX3N0YXR1cyB8PSBzZC0+c3Rh dGUgPDwgOTsKK30KKworY29uc3Qgc2RfY21kX3R5cGVfdCBzZF9jbWRfdHlwZVs2NF0gPSB7Cisg ICAgc2RfYmMsICAgc2Rfbm9uZSwgc2RfYmNyLCAgc2RfYmNyLCAgc2Rfbm9uZSwgc2Rfbm9uZSwg c2Rfbm9uZSwgc2RfYWMsCisgICAgc2Rfbm9uZSwgc2RfYWMsICAgc2RfYWMsICAgc2RfYWR0Yywg c2RfYWMsICAgc2RfYWMsICAgc2Rfbm9uZSwgc2RfYWMsCisgICAgc2RfYWMsICAgc2RfYWR0Yywg c2RfYWR0Yywgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwKKyAg ICBzZF9hZHRjLCBzZF9hZHRjLCBzZF9hZHRjLCBzZF9hZHRjLCBzZF9hYywgICBzZF9hYywgICBz ZF9hZHRjLCBzZF9ub25lLAorICAgIHNkX2FjLCAgIHNkX2FjLCAgIHNkX25vbmUsIHNkX25vbmUs IHNkX25vbmUsIHNkX25vbmUsIHNkX2FjLCAgIHNkX25vbmUsCisgICAgc2Rfbm9uZSwgc2Rfbm9u ZSwgc2RfYmMsICAgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwK KyAgICBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25l LCBzZF9ub25lLCBzZF9hYywKKyAgICBzZF9hZHRjLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25l LCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLAorfTsKKworY29uc3Qgc2RfY21k X3R5cGVfdCBzZF9hY21kX3R5cGVbNjRdID0geworICAgIHNkX25vbmUsIHNkX25vbmUsIHNkX25v bmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX2FjLCAgIHNkX25vbmUsCisgICAgc2Rf bm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2RfYWR0Yywgc2Rfbm9u ZSwgc2Rfbm9uZSwKKyAgICBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9u b25lLCBzZF9ub25lLCBzZF9hZHRjLCBzZF9hYywKKyAgICBzZF9ub25lLCBzZF9ub25lLCBzZF9u b25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLAorICAgIHNk X25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25v bmUsIHNkX25vbmUsCisgICAgc2Rfbm9uZSwgc2RfYmNyLCAgc2RfYWMsICAgc2Rfbm9uZSwgc2Rf bm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwgc2Rfbm9uZSwKKyAgICBzZF9ub25lLCBzZF9ub25lLCBz ZF9ub25lLCBzZF9hZHRjLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLCBzZF9ub25lLAorICAg IHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNkX25vbmUsIHNk X25vbmUsIHNkX25vbmUsCit9OworCitzdGF0aWMgY29uc3QgaW50IHNkX2NtZF9jbGFzc1s2NF0g PSB7CisgICAgMCwgIDAsICAwLCAgMCwgIDAsICA5LCAxMCwgIDAsICAwLCAgMCwgIDAsICAxLCAg MCwgIDAsICAwLCAgMCwKKyAgICAyLCAgMiwgIDIsICAyLCAgMywgIDMsICAzLCAgMywgIDQsICA0 LCAgNCwgIDQsICA2LCAgNiwgIDYsICA2LAorICAgIDUsICA1LCAxMCwgMTAsIDEwLCAxMCwgIDUs ICA5LCAgOSwgIDksICA3LCAgNywgIDcsICA3LCAgNywgIDcsCisgICAgNywgIDcsIDEwLCAgNywg IDksICA5LCAgOSwgIDgsICA4LCAxMCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwKK307CisKK3N0 YXRpYyBjb25zdCBzZF9yc3BfdHlwZV90IHNkX2NtZF9yZXNwb25zZVs2NF0gPSB7CisgICAgc2Rf bm9yZSwgc2Rfbm9yZSwgc2RfcjIsICAgc2RfcjYsICAgc2Rfbm9yZSwgc2Rfbm9yZSwgc2RfcjEs ICAgc2RfcjFiLAorICAgIHNkX25vcmUsIHNkX3IyLCAgIHNkX3IyLCAgIHNkX25vcmUsIHNkX3Ix YiwgIHNkX3IxLCAgIHNkX25vcmUsIHNkX25vcmUsCisgICAgc2RfcjEsICAgc2RfcjEsICAgc2Rf cjEsICAgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwKKyAgICBz ZF9yMSwgICBzZF9yMSwgICBzZF9yMSwgICBzZF9yMSwgICBzZF9yMWIsICBzZF9yMWIsICBzZF9y MSwgICBzZF9ub3JlLAorICAgIHNkX3IxLCAgIHNkX3IxLCAgIHNkX25vcmUsIHNkX25vcmUsIHNk X25vcmUsIHNkX25vcmUsIHNkX3IxYiwgIHNkX25vcmUsCisgICAgc2Rfbm9yZSwgc2Rfbm9yZSwg c2RfcjEsICAgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwKKyAg ICBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBz ZF9ub3JlLCBzZF9yMSwKKyAgICBzZF9yMSwgICBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBz ZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLAorfTsKKworc3RhdGljIGNvbnN0IHNk X3JzcF90eXBlX3Qgc2RfYWNtZF9yZXNwb25zZVs2NF0gPSB7CisgICAgc2Rfbm9yZSwgc2Rfbm9y ZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2RfcjEsICAgc2Rfbm9yZSwK KyAgICBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9yMSwg ICBzZF9ub3JlLCBzZF9ub3JlLAorICAgIHNkX25vcmUsIHNkX25vcmUsIHNkX25vcmUsIHNkX25v cmUsIHNkX25vcmUsIHNkX25vcmUsIHNkX3IxLCAgIHNkX25vcmUsCisgICAgc2Rfbm9yZSwgc2Rf bm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9y ZSwKKyAgICBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9u b3JlLCBzZF9ub3JlLCBzZF9ub3JlLAorICAgIHNkX25vcmUsIHNkX3IzLCAgIHNkX3IxLCAgIHNk X25vcmUsIHNkX25vcmUsIHNkX25vcmUsIHNkX25vcmUsIHNkX25vcmUsCisgICAgc2Rfbm9yZSwg c2Rfbm9yZSwgc2Rfbm9yZSwgc2RfcjEsICAgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rfbm9yZSwgc2Rf bm9yZSwKKyAgICBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLCBz ZF9ub3JlLCBzZF9ub3JlLCBzZF9ub3JlLAorfTsKKworc3RhdGljIHVpbnQ4X3Qgc2RfY3JjNyh2 b2lkICptZXNzYWdlLCBzaXplX3Qgd2lkdGgpCit7CisgICAgaW50IGksIGJpdDsKKyAgICB1aW50 OF90IHNoaWZ0X3JlZyA9IDB4MDA7CisgICAgdWludDhfdCAqbXNnID0gKHVpbnQ4X3QgKikgbWVz c2FnZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArKywgbXNnICsrKQorICAgICAg ICBmb3IgKGJpdCA9IDc7IGJpdCA+PSAwOyBiaXQgLS0pIHsKKyAgICAgICAgICAgIHNoaWZ0X3Jl ZyA8PD0gMTsKKyAgICAgICAgICAgIGlmICgoc2hpZnRfcmVnID4+IDcpIF4gKCgqbXNnID4+IGJp dCkgJiAxKSkKKyAgICAgICAgICAgICAgICBzaGlmdF9yZWcgXj0gMHg4OTsKKyAgICAgICAgfQor CisgICAgcmV0dXJuIHNoaWZ0X3JlZzsKK30KKworc3RhdGljIHVpbnQxNl90IHNkX2NyYzE2KHZv aWQgKm1lc3NhZ2UsIHNpemVfdCB3aWR0aCkKK3sKKyAgICBpbnQgaSwgYml0OworICAgIHVpbnQx Nl90IHNoaWZ0X3JlZyA9IDB4MDAwMDsKKyAgICB1aW50MTZfdCAqbXNnID0gKHVpbnQxNl90ICop IG1lc3NhZ2U7CisgICAgd2lkdGggPDw9IDE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7 IGkgKyssIG1zZyArKykKKyAgICAgICAgZm9yIChiaXQgPSAxNTsgYml0ID49IDA7IGJpdCAtLSkg eworICAgICAgICAgICAgc2hpZnRfcmVnIDw8PSAxOworICAgICAgICAgICAgaWYgKChzaGlmdF9y ZWcgPj4gMTUpIF4gKCgqbXNnID4+IGJpdCkgJiAxKSkKKyAgICAgICAgICAgICAgICBzaGlmdF9y ZWcgXj0gMHgxMDExOworICAgICAgICB9CisKKyAgICByZXR1cm4gc2hpZnRfcmVnOworfQorCitz dGF0aWMgdm9pZCBzZF9zZXRfb2NyKHN0cnVjdCBzZF9zdGF0ZV9zICpzZCkKK3sKKyAgICBzZC0+ b2NyID0gMHg4MGZmZmZmMDsKK30KKworc3RhdGljIHZvaWQgc2Rfc2V0X3NjcihzdHJ1Y3Qgc2Rf c3RhdGVfcyAqc2QpCit7CisgICAgc2QtPnNjclswXSA9IDB4MDA7CQkvKiBTQ1IgU3RydWN0dXJl ICovCisgICAgc2QtPnNjclsxXSA9IDB4MmY7CQkvKiBTRCBTZWN1cml0eSBTdXBwb3J0ICovCisg ICAgc2QtPnNjclsyXSA9IDB4MDA7CisgICAgc2QtPnNjclszXSA9IDB4MDA7CisgICAgc2QtPnNj cls0XSA9IDB4MDA7CisgICAgc2QtPnNjcls1XSA9IDB4MDA7CisgICAgc2QtPnNjcls2XSA9IDB4 MDA7CisgICAgc2QtPnNjcls3XSA9IDB4MDA7Cit9CisKKyNkZWZpbmUgTUlECTB4YWEKKyNkZWZp bmUgT0lECSJYWSIKKyNkZWZpbmUgUE5NCSJRRU1VISIKKyNkZWZpbmUgUFJWCTB4MDEKKyNkZWZp bmUgTURUX1lSCTIwMDYKKyNkZWZpbmUgTURUX01PTgkyCisKK3N0YXRpYyB2b2lkIHNkX3NldF9j aWQoc3RydWN0IHNkX3N0YXRlX3MgKnNkKQoreworICAgIHNkLT5jaWRbMF0gPSBNSUQ7CQkvKiBG YWtlIGNhcmQgbWFudWZhY3R1cmVyIElEIChNSUQpICovCisgICAgc2QtPmNpZFsxXSA9IE9JRFsw XTsJLyogT0VNL0FwcGxpY2F0aW9uIElEIChPSUQpICovCisgICAgc2QtPmNpZFsyXSA9IE9JRFsx XTsKKyAgICBzZC0+Y2lkWzNdID0gUE5NWzBdOwkvKiBGYWtlIHByb2R1Y3QgbmFtZSAoUE5NKSAq LworICAgIHNkLT5jaWRbNF0gPSBQTk1bMV07CisgICAgc2QtPmNpZFs1XSA9IFBOTVsyXTsKKyAg ICBzZC0+Y2lkWzZdID0gUE5NWzNdOworICAgIHNkLT5jaWRbN10gPSBQTk1bNF07CisgICAgc2Qt PmNpZFs4XSA9IFBSVjsJCS8qIEZha2UgcHJvZHVjdCByZXZpc2lvbiAoUFJWKSAqLworICAgIHNk LT5jaWRbOV0gPSAweGRlOwkJLyogRmFrZSBzZXJpYWwgbnVtYmVyIChQU04pICovCisgICAgc2Qt PmNpZFsxMF0gPSAweGFkOworICAgIHNkLT5jaWRbMTFdID0gMHhiZTsKKyAgICBzZC0+Y2lkWzEy XSA9IDB4ZWY7CisgICAgc2QtPmNpZFsxM10gPSAweDAwIHwJLyogTWFudWZhY3R1cmUgZGF0ZSAo TURUKSAqLworICAgICAgICAoKE1EVF9ZUiAtIDIwMDApIC8gMTApOworICAgIHNkLT5jaWRbMTRd ID0gKChNRFRfWVIgJSAxMCkgPDwgNCkgfCBNRFRfTU9OOworICAgIHNkLT5jaWRbMTVdID0gKHNk X2NyYzcoc2QtPmNpZCwgMTUpIDw8IDEpIHwgMTsKK30KKworI2RlZmluZSBIV0JMT0NLX1NISUZU CTkJCQkvKiA1MTIgYnl0ZXMgKi8KKyNkZWZpbmUgU0VDVE9SX1NISUZUCTUJCQkvKiAxNiBraWxv Ynl0ZXMgKi8KKyNkZWZpbmUgV1BHUk9VUF9TSElGVAk3CQkJLyogMiBtZWdzICovCisjZGVmaW5l IENNVUxUX1NISUZUCTkJCQkvKiA1MTIgdGltZXMgSFdCTE9DS19TSVpFICovCisjZGVmaW5lIEJM T0NLX1NJWkUJKDEgPDwgKEhXQkxPQ0tfU0hJRlQpKQorI2RlZmluZSBTRUNUT1JfU0laRQkoMSA8 PCAoSFdCTE9DS19TSElGVCArIFNFQ1RPUl9TSElGVCkpCisjZGVmaW5lIFdQR1JPVVBfU0laRQko MSA8PCAoSFdCTE9DS19TSElGVCArIFNFQ1RPUl9TSElGVCArIFdQR1JPVVBfU0hJRlQpKQorCitz dGF0aWMgY29uc3QgdWludDhfdCBzZF9jc2RfcndfbWFza1sxNl0gPSB7CisgICAgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGZlLAorfTsKKworc3RhdGljIHZvaWQgc2Rf c2V0X2NzZChzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QsIHVpbnQzMl90IHNpemUpCit7CisgICAgdWlu dDMyX3QgY3NpemUgPSAoc2l6ZSA+PiAoQ01VTFRfU0hJRlQgKyBIV0JMT0NLX1NISUZUKSkgLSAx OworICAgIHVpbnQzMl90IHNlY3RzaXplID0gKDEgPDwgKFNFQ1RPUl9TSElGVCArIDEpKSAtIDE7 CisgICAgdWludDMyX3Qgd3BzaXplID0gKDEgPDwgKFdQR1JPVVBfU0hJRlQgKyAxKSkgLSAxOwor CisgICAgc2QtPmNzZFswXSA9IDB4MDA7CQkvKiBDU0Qgc3RydWN0dXJlICovCisgICAgc2QtPmNz ZFsxXSA9IDB4MjY7CQkvKiBEYXRhIHJlYWQgYWNjZXNzLXRpbWUtMSAqLworICAgIHNkLT5jc2Rb Ml0gPSAweDAwOwkJLyogRGF0YSByZWFkIGFjY2Vzcy10aW1lLTIgKi8KKyAgICBzZC0+Y3NkWzNd ID0gMHg1YTsJCS8qIE1heC4gZGF0YSB0cmFuc2ZlciByYXRlICovCisgICAgc2QtPmNzZFs0XSA9 IDB4NWY7CQkvKiBDYXJkIENvbW1hbmQgQ2xhc3NlcyAqLworICAgIHNkLT5jc2RbNV0gPSAweDUw IHwJCS8qIE1heC4gcmVhZCBkYXRhIGJsb2NrIGxlbmd0aCAqLworICAgICAgICBIV0JMT0NLX1NI SUZUOworICAgIHNkLT5jc2RbNl0gPSAweGUwIHwJCS8qIFBhcnRpYWwgYmxvY2sgZm9yIHJlYWQg YWxsb3dlZCAqLworICAgICAgICAoKGNzaXplID4+IDEwKSAmIDB4MDMpOworICAgIHNkLT5jc2Rb N10gPSAweDAwIHwJCS8qIERldmljZSBzaXplICovCisgICAgICAgICgoY3NpemUgPj4gMikgJiAw eGZmKTsKKyAgICBzZC0+Y3NkWzhdID0gMHgzZiB8CQkvKiBNYXguIHJlYWQgY3VycmVudCAqLwor ICAgICAgICAoKGNzaXplIDw8IDYpICYgMHhjMCk7CisgICAgc2QtPmNzZFs5XSA9IDB4ZmMgfAkJ LyogTWF4LiB3cml0ZSBjdXJyZW50ICovCisgICAgICAgICgoQ01VTFRfU0hJRlQgLSAyKSA+PiAx KTsKKyAgICBzZC0+Y3NkWzEwXSA9IDB4NDAgfAkvKiBFcmFzZSBzZWN0b3Igc2l6ZSAqLworICAg ICAgICAoKChDTVVMVF9TSElGVCAtIDIpIDw8IDcpICYgMHg4MCkgfCAoc2VjdHNpemUgPj4gMSk7 CisgICAgc2QtPmNzZFsxMV0gPSAweDAwIHwJLyogV3JpdGUgcHJvdGVjdCBncm91cCBzaXplICov CisgICAgICAgICgoc2VjdHNpemUgPDwgNykgJiAweDgwKSB8IHdwc2l6ZTsKKyAgICBzZC0+Y3Nk WzEyXSA9IDB4OTAgfAkvKiBXcml0ZSBzcGVlZCBmYWN0b3IgKi8KKyAgICAgICAgKEhXQkxPQ0tf U0hJRlQgPj4gMik7CisgICAgc2QtPmNzZFsxM10gPSAweDIwIHwJLyogTWF4LiB3cml0ZSBkYXRh IGJsb2NrIGxlbmd0aCAqLworICAgICAgICAoKEhXQkxPQ0tfU0hJRlQgPDwgNikgJiAweGMwKTsK KyAgICBzZC0+Y3NkWzE0XSA9IDB4MDA7CQkvKiBGaWxlIGZvcm1hdCBncm91cCAqLworICAgIHNk LT5jc2RbMTVdID0gKHNkX2NyYzcoc2QtPmNzZCwgMTUpIDw8IDEpIHwgMTsKK30KKworc3RhdGlj IHZvaWQgc2Rfc2V0X3JjYShzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QpCit7CisgICAgc2QtPnJjYSAr PSAweDQ1Njc7Cit9CisKKyNkZWZpbmUgQ0FSRF9TVEFUVVNfQQkweDAyMDA0MTAwCisjZGVmaW5l IENBUkRfU1RBVFVTX0IJMHgwMGMwMWUwMAorI2RlZmluZSBDQVJEX1NUQVRVU19DCTB4ZmQzOWEw MjgKKworc3RhdGljIHZvaWQgc2Rfc2V0X2NhcmRzdGF0dXMoc3RydWN0IHNkX3N0YXRlX3MgKnNk KQoreworICAgIHNkLT5jYXJkX3N0YXR1cyA9IDB4MDAwMDAxMDA7Cit9CisKK3N0YXRpYyB2b2lk IHNkX3NldF9zZHN0YXR1cyhzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QpCit7CisgICAgbWVtc2V0KHNk LT5zZF9zdGF0dXMsIDAsIDY0KTsKK30KKworc3RhdGljIGludCBzZF9yZXFfY3JjX3ZhbGlkYXRl KHN0cnVjdCBzZF9yZXF1ZXN0X3MgKnJlcSkKK3sKKyAgICB1aW50OF90IGJ1ZmZlcls1XTsKKyAg ICBidWZmZXJbMF0gPSAweDQwIHwgcmVxLT5jbWQ7CisgICAgYnVmZmVyWzFdID0gKHJlcS0+YXJn ID4+IDI0KSAmIDB4ZmY7CisgICAgYnVmZmVyWzJdID0gKHJlcS0+YXJnID4+IDE2KSAmIDB4ZmY7 CisgICAgYnVmZmVyWzNdID0gKHJlcS0+YXJnID4+IDgpICYgMHhmZjsKKyAgICBidWZmZXJbNF0g PSAocmVxLT5hcmcgPj4gMCkgJiAweGZmOworICAgIHJldHVybiAwOworICAgIHJldHVybiBzZF9j cmM3KGJ1ZmZlciwgNSkgIT0gcmVxLT5jcmM7CS8qIFRPRE8gKi8KK30KKwordm9pZCBzZF9yZXNw b25zZV9yMV9tYWtlKHN0cnVjdCBzZF9zdGF0ZV9zICpzZCwKKyAgICAgICAgICAgICAgICB1bmlv biBzZF9yZXNwb25zZV91ICpyZXNwb25zZSwgdWludDMyX3QgbGFzdF9zdGF0dXMpCit7CisgICAg aW50IGJ1ZmZlcls1XTsKKyAgICB1aW50MzJfdCBtYXNrID0gQ0FSRF9TVEFUVVNfQiBeIElMTEVH QUxfQ09NTUFORDsKKworICAgIHJlc3BvbnNlLT5yMS5jbWQgPSBzZC0+Y3VycmVudF9jbWQ7Cisg ICAgcmVzcG9uc2UtPnIxLnN0YXR1cyA9IChzZC0+Y2FyZF9zdGF0dXMgJiB+bWFzaykgfCAobGFz dF9zdGF0dXMgJiBtYXNrKTsKKyAgICBzZC0+Y2FyZF9zdGF0dXMgJj0gfkNBUkRfU1RBVFVTX0Mg fCBBUFBfQ01EOworCisgICAgYnVmZmVyWzBdID0gMHgwMCB8IHJlc3BvbnNlLT5yMS5jbWQ7Cisg ICAgYnVmZmVyWzFdID0gKHJlc3BvbnNlLT5yMS5zdGF0dXMgPj4gMjQpICYgMHhmZjsKKyAgICBi dWZmZXJbMl0gPSAocmVzcG9uc2UtPnIxLnN0YXR1cyA+PiAxNikgJiAweGZmOworICAgIGJ1ZmZl clszXSA9IChyZXNwb25zZS0+cjEuc3RhdHVzID4+IDgpICYgMHhmZjsKKyAgICBidWZmZXJbNF0g PSAocmVzcG9uc2UtPnIxLnN0YXR1cyA+PiAwKSAmIDB4ZmY7CisgICAgcmVzcG9uc2UtPnIxLmNy YyA9IHNkX2NyYzcoYnVmZmVyLCA1KTsKK30KKwordm9pZCBzZF9yZXNwb25zZV9yMl9tYWtlKHN0 cnVjdCBzZF9zdGF0ZV9zICpzZCwgdW5pb24gc2RfcmVzcG9uc2VfdSAqcmVzcG9uc2UpCit7Cisg ICAgcmVzcG9uc2UtPnIyLnJlZ1s3XSB8PSAweDAxOworfQorCit2b2lkIHNkX3Jlc3BvbnNlX3Iz X21ha2Uoc3RydWN0IHNkX3N0YXRlX3MgKnNkLCB1bmlvbiBzZF9yZXNwb25zZV91ICpyZXNwb25z ZSkKK3sKKyAgICByZXNwb25zZS0+cjMub2NyX3JlZyA9IHNkLT5vY3I7Cit9CisKK3ZvaWQgc2Rf cmVzcG9uc2VfcjZfbWFrZShzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QsIHVuaW9uIHNkX3Jlc3BvbnNl X3UgKnJlc3BvbnNlKQoreworICAgIGludCBidWZmZXJbNV07CisKKyAgICByZXNwb25zZS0+cjYu Y21kID0gc2QtPmN1cnJlbnRfY21kOworICAgIHJlc3BvbnNlLT5yNi5hcmcgPSBzZC0+cmNhOwor ICAgIHJlc3BvbnNlLT5yNi5zdGF0dXMgPQorICAgICAgICAoKHNkLT5jYXJkX3N0YXR1cyA+PiA4 KSAmIDB4YzAwMCkgfAorICAgICAgICAoKHNkLT5jYXJkX3N0YXR1cyA+PiA2KSAmIDB4MjAwMCkg fAorICAgICAgICAoc2QtPmNhcmRfc3RhdHVzICYgMHgxZmZmKTsKKworICAgIGJ1ZmZlclswXSA9 IDB4MDAgfCByZXNwb25zZS0+cjYuY21kOworICAgIGJ1ZmZlclsxXSA9IChyZXNwb25zZS0+cjYu YXJnID4+IDgpICYgMHhmZjsKKyAgICBidWZmZXJbMl0gPSAocmVzcG9uc2UtPnI2LmFyZyA+PiAw KSAmIDB4ZmY7CisgICAgYnVmZmVyWzNdID0gKHJlc3BvbnNlLT5yNi5zdGF0dXMgPj4gOCkgJiAw eGZmOworICAgIGJ1ZmZlcls0XSA9IChyZXNwb25zZS0+cjYuc3RhdHVzID4+IDApICYgMHhmZjsK KyAgICByZXNwb25zZS0+cjYuY3JjID0gc2RfY3JjNyhidWZmZXIsIDUpOworfQorCitzdGF0aWMg dm9pZCBzZF9yZXNldChzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QsIEJsb2NrRHJpdmVyU3RhdGUgKmJk cnYpCit7CisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICB1aW50NjRfdCBzZWN0OworCisgICAgYmRy dl9nZXRfZ2VvbWV0cnkoYmRydiwgJnNlY3QpOworICAgIHNlY3QgPDw9IDk7CisKKyAgICBpZiAo c2VjdCA+IDB4NDAwMDAwMDApCisgICAgICAgIHNpemUgPSAweDQwMDAwMDAwOwkvKiAxIGdpZyAq LworICAgIGVsc2UKKyAgICAgICAgc2l6ZSA9IHNlY3QgKyAxOworCisgICAgc2VjdCA9IChzaXpl ID4+IChIV0JMT0NLX1NISUZUICsgU0VDVE9SX1NISUZUICsgV1BHUk9VUF9TSElGVCkpICsgMTsK KworICAgIHNkLT5zdGF0ZSA9IHNkX2lkbGVfc3RhdGU7CisgICAgc2QtPnJjYSA9IDB4MDAwMDsK KyAgICBzZF9zZXRfb2NyKHNkKTsKKyAgICBzZF9zZXRfc2NyKHNkKTsKKyAgICBzZF9zZXRfY2lk KHNkKTsKKyAgICBzZF9zZXRfY3NkKHNkLCBzaXplKTsKKyAgICBzZF9zZXRfY2FyZHN0YXR1cyhz ZCk7CisgICAgc2Rfc2V0X3Nkc3RhdHVzKHNkKTsKKworICAgIHNkLT5iZHJ2ID0gYmRydjsKKwor ICAgIHNkLT53cF9zd2l0Y2ggPSBiZHJ2X2lzX3JlYWRfb25seShiZHJ2KTsKKyAgICBzZC0+d3Bf Z3JvdXBzID0gKGludCAqKSBxZW11X21hbGxvY3ooc2l6ZW9mKGludCkgKiBzZWN0KTsKKyAgICBt ZW1zZXQoc2QtPndwX2dyb3VwcywgMCwgc2l6ZW9mKGludCkgKiBzZWN0KTsKKyAgICBtZW1zZXQo c2QtPmZ1bmN0aW9uX2dyb3VwLCAwLCBzaXplb2YoaW50KSAqIDYpOworICAgIHNkLT5lcmFzZV9z dGFydCA9IDA7CisgICAgc2QtPmVyYXNlX2VuZCA9IDA7CisgICAgc2QtPnNpemUgPSBzaXplOwor ICAgIHNkLT5ibGtfbGVuID0gMHgyMDA7CisgICAgc2QtPnB3ZF9sZW4gPSAwOworfQorCitzdGF0 aWMgdm9pZCBzZF9jYXJkY2hhbmdlKHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBzdHJ1Y3Qgc2Rfc3Rh dGVfcyAqc2QgPSBvcGFxdWU7CisgICAgaWYgKHNkLT5pbnNlcnRlZF9jYikKKyAgICAgICAgc2Qt Pmluc2VydGVkX2NiKHNkLT5vcGFxdWUsIGJkcnZfaXNfaW5zZXJ0ZWQoc2QtPmJkcnYpKTsKKyAg ICBpZiAoYmRydl9pc19pbnNlcnRlZChzZC0+YmRydikpIHsKKyAgICAgICAgc2RfcmVzZXQoc2Qs IHNkLT5iZHJ2KTsKKyAgICAgICAgaWYgKHNkLT5yZWFkb25seV9jYikKKyAgICAgICAgICAgIHNk LT5yZWFkb25seV9jYihzZC0+b3BhcXVlLCBzZC0+d3Bfc3dpdGNoKTsKKyAgICB9Cit9CisKK3N0 cnVjdCBzZF9zdGF0ZV9zICpzZF9pbml0KCkKK3sKKyAgICBzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2Q7 CisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnMgPSBiZHJ2X25ldygic2QiKTsKKyAgICBiZHJ2X3Nl dF90eXBlX2hpbnQoYnMsIEJEUlZfVFlQRV9GTE9QUFkpOworCisgICAgaWYgKHNkX2ZpbGVuYW1l KSB7CisgICAgICAgIGlmIChiZHJ2X29wZW4oYnMsIHNkX2ZpbGVuYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgc25hcHNob3QgPyBCRFJWX09fU05BUFNIT1QgOiAwKSA8IDApCisgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZG4ndCBvcGVuICVzXG4iLAorICAgICAgICAg ICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHNkX2ZpbGVuYW1lKTsKKyAgICB9CisKKyAgICBzZCA9 IChzdHJ1Y3Qgc2Rfc3RhdGVfcyAqKSBxZW11X21hbGxvY3ooc2l6ZW9mKHN0cnVjdCBzZF9zdGF0 ZV9zKSk7CisgICAgc2RfcmVzZXQoc2QsIGJzKTsKKyAgICByZXR1cm4gc2Q7Cit9CisKK3ZvaWQg c2Rfc2V0X2NiKHN0cnVjdCBzZF9zdGF0ZV9zICpzZCwgdm9pZCAqb3BhcXVlLAorICAgICAgICAg ICAgICAgIHZvaWQgKCpyZWFkb25seV9jYikodm9pZCAqLCBpbnQpLAorICAgICAgICAgICAgICAg IHZvaWQgKCppbnNlcnRlZF9jYikodm9pZCAqLCBpbnQpKQoreworICAgIHNkLT5vcGFxdWUgPSBv cGFxdWU7CisgICAgc2QtPnJlYWRvbmx5X2NiID0gcmVhZG9ubHlfY2I7CisgICAgc2QtPmluc2Vy dGVkX2NiID0gaW5zZXJ0ZWRfY2I7CisgICAgaWYgKHNkLT5yZWFkb25seV9jYikKKyAgICAgICAg c2QtPnJlYWRvbmx5X2NiKHNkLT5vcGFxdWUsIGJkcnZfaXNfcmVhZF9vbmx5KHNkLT5iZHJ2KSk7 CisgICAgaWYgKHNkLT5pbnNlcnRlZF9jYikKKyAgICAgICAgc2QtPmluc2VydGVkX2NiKHNkLT5v cGFxdWUsIGJkcnZfaXNfaW5zZXJ0ZWQoc2QtPmJkcnYpKTsKKyAgICBiZHJ2X3NldF9jaGFuZ2Vf Y2Ioc2QtPmJkcnYsIHNkX2NhcmRjaGFuZ2UsIHNkKTsKK30KKworc3RhdGljIHZvaWQgc2RfZXJh c2Uoc3RydWN0IHNkX3N0YXRlX3MgKnNkKQoreworICAgIGludCBpLCBzdGFydCwgZW5kOworICAg IGlmICghc2QtPmVyYXNlX3N0YXJ0IHx8ICFzZC0+ZXJhc2VfZW5kKSB7CisgICAgICAgIHNkLT5j YXJkX3N0YXR1cyB8PSBFUkFTRV9TRVFfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK KyAgICBzdGFydCA9IHNkLT5lcmFzZV9zdGFydCA+PgorICAgICAgICAgICAgKEhXQkxPQ0tfU0hJ RlQgKyBTRUNUT1JfU0hJRlQgKyBXUEdST1VQX1NISUZUKTsKKyAgICBlbmQgPSBzZC0+ZXJhc2Vf ZW5kID4+CisgICAgICAgICAgICAoSFdCTE9DS19TSElGVCArIFNFQ1RPUl9TSElGVCArIFdQR1JP VVBfU0hJRlQpOworICAgIHNkLT5lcmFzZV9zdGFydCA9IDA7CisgICAgc2QtPmVyYXNlX2VuZCA9 IDA7CisgICAgc2QtPmNzZFsxNF0gfD0gMHg0MDsKKworICAgIGZvciAoaSA9IHN0YXJ0OyBpIDw9 IGVuZDsgaSArKykKKyAgICAgICAgaWYgKHNkLT53cF9ncm91cHNbaV0pCisgICAgICAgICAgICBz ZC0+Y2FyZF9zdGF0dXMgfD0gV1BfRVJBU0VfU0tJUDsKK30KKworc3RhdGljIHVpbnQzMl90IHNk X3dwYml0cyhzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2QsIHVpbnQzMl90IGFkZHIpCit7CisgICAgdWlu dDMyX3QgaSwgd3BudW07CisgICAgdWludDMyX3QgcmV0ID0gMDsKKworICAgIHdwbnVtID0gYWRk ciA+PiAoSFdCTE9DS19TSElGVCArIFNFQ1RPUl9TSElGVCArIFdQR1JPVVBfU0hJRlQpOworCisg ICAgZm9yIChpID0gMDsgaSA8IDMyOyBpICsrLCB3cG51bSArKywgYWRkciArPSBXUEdST1VQX1NJ WkUpCisgICAgICAgIGlmIChhZGRyIDwgc2QtPnNpemUgJiYgc2QtPndwX2dyb3Vwc1t3cG51bV0p CisgICAgICAgICAgICByZXQgfD0gKDEgPDwgaSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZCBzZF9mdW5jdGlvbl9zd2l0Y2goc3RydWN0IHNkX3N0YXRlX3MgKnNkLCB1aW50 MzJfdCBhcmcpCit7CisgICAgaW50IGksIG1vZGUsIG5ld19mdW5jLCBjcmM7CisgICAgbW9kZSA9 ICEhKGFyZyAmIDB4ODAwMDAwMDApOworCisgICAgc2QtPmRhdGFbMF0gPSAweDAwOwkJLyogTWF4 aW11bSBjdXJyZW50IGNvbnN1bXB0aW9uICovCisgICAgc2QtPmRhdGFbMV0gPSAweDAxOworICAg IHNkLT5kYXRhWzJdID0gMHg4MDsJCS8qIFN1cHBvcnRlZCBncm91cCA2IGZ1bmN0aW9ucyAqLwor ICAgIHNkLT5kYXRhWzNdID0gMHgwMTsKKyAgICBzZC0+ZGF0YVs0XSA9IDB4ODA7CQkvKiBTdXBw b3J0ZWQgZ3JvdXAgNSBmdW5jdGlvbnMgKi8KKyAgICBzZC0+ZGF0YVs1XSA9IDB4MDE7CisgICAg c2QtPmRhdGFbNl0gPSAweDgwOwkJLyogU3VwcG9ydGVkIGdyb3VwIDQgZnVuY3Rpb25zICovCisg ICAgc2QtPmRhdGFbN10gPSAweDAxOworICAgIHNkLT5kYXRhWzhdID0gMHg4MDsJCS8qIFN1cHBv cnRlZCBncm91cCAzIGZ1bmN0aW9ucyAqLworICAgIHNkLT5kYXRhWzldID0gMHgwMTsKKyAgICBz ZC0+ZGF0YVsxMF0gPSAweDgwOwkvKiBTdXBwb3J0ZWQgZ3JvdXAgMiBmdW5jdGlvbnMgKi8KKyAg ICBzZC0+ZGF0YVsxMV0gPSAweDQzOworICAgIHNkLT5kYXRhWzEyXSA9IDB4ODA7CS8qIFN1cHBv cnRlZCBncm91cCAxIGZ1bmN0aW9ucyAqLworICAgIHNkLT5kYXRhWzEzXSA9IDB4MDM7CisgICAg Zm9yIChpID0gMDsgaSA8IDY7IGkgKyspIHsKKyAgICAgICAgbmV3X2Z1bmMgPSAoYXJnID4+IChp ICogNCkpICYgMHgwZjsKKyAgICAgICAgaWYgKG1vZGUgJiYgbmV3X2Z1bmMgIT0gMHgwZikKKyAg ICAgICAgICAgIHNkLT5mdW5jdGlvbl9ncm91cFtpXSA9IG5ld19mdW5jOworICAgICAgICBzZC0+ ZGF0YVsxNCArIChpID4+IDEpXSA9IG5ld19mdW5jIDw8ICgoaSAqIDQpICYgNCk7CisgICAgfQor ICAgIG1lbXNldCgmc2QtPmRhdGFbMTddLCAwLCA0Nyk7CisgICAgY3JjID0gc2RfY3JjMTYoc2Qt PmRhdGEsIDY0KTsKKyAgICBzZC0+ZGF0YVs2NV0gPSBjcmMgPj4gODsKKyAgICBzZC0+ZGF0YVs2 Nl0gPSBjcmMgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZF93cF9hZGRyKHN0cnVj dCBzZF9zdGF0ZV9zICpzZCwgdWludDMyX3QgYWRkcikKK3sKKyAgICByZXR1cm4gc2QtPndwX2dy b3Vwc1thZGRyID4+CisgICAgICAgICAgICAoSFdCTE9DS19TSElGVCArIFNFQ1RPUl9TSElGVCAr IFdQR1JPVVBfU0hJRlQpXTsKK30KKworc3RhdGljIHZvaWQgc2RfbG9ja19jb21tYW5kKHN0cnVj dCBzZF9zdGF0ZV9zICpzZCkKK3sKKyAgICBpbnQgZXJhc2UsIGxvY2ssIGNscl9wd2QsIHNldF9w d2QsIHB3ZF9sZW47CisgICAgZXJhc2UgPSAhIShzZC0+ZGF0YVswXSAmIDB4MDgpOworICAgIGxv Y2sgPSBzZC0+ZGF0YVswXSAmIDB4MDQ7CisgICAgY2xyX3B3ZCA9IHNkLT5kYXRhWzBdICYgMHgw MjsKKyAgICBzZXRfcHdkID0gc2QtPmRhdGFbMF0gJiAweDAxOworCisgICAgaWYgKHNkLT5ibGtf bGVuID4gMSkKKyAgICAgICAgcHdkX2xlbiA9IHNkLT5kYXRhWzFdOworICAgIGVsc2UKKyAgICAg ICAgcHdkX2xlbiA9IDA7CisKKyAgICBpZiAoZXJhc2UpIHsKKyAgICAgICAgaWYgKCEoc2QtPmNh cmRfc3RhdHVzICYgQ0FSRF9JU19MT0NLRUQpIHx8IHNkLT5ibGtfbGVuID4gMSB8fAorICAgICAg ICAgICAgICAgICAgICAgICAgc2V0X3B3ZCB8fCBjbHJfcHdkIHx8IGxvY2sgfHwgc2QtPndwX3N3 aXRjaCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHNkLT5jc2RbMTRdICYgMHgyMCkpIHsK KyAgICAgICAgICAgIHNkLT5jYXJkX3N0YXR1cyB8PSBMT0NLX1VOTE9DS19GQUlMRUQ7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KHNkLT53cF9ncm91cHMs IDAsIHNpemVvZihpbnQpICogKHNkLT5zaXplID4+CisgICAgICAgICAgICAgICAgICAgICAgICAo SFdCTE9DS19TSElGVCArIFNFQ1RPUl9TSElGVCArIFdQR1JPVVBfU0hJRlQpKSk7CisgICAgICAg IHNkLT5jc2RbMTRdICY9IH4weDEwOworICAgICAgICBzZC0+Y2FyZF9zdGF0dXMgJj0gfkNBUkRf SVNfTE9DS0VEOworICAgICAgICBzZC0+cHdkX2xlbiA9IDA7CisgICAgICAgIC8qIEVyYXNpbmcg dGhlIGVudGlyZSBjYXJkIGhlcmUhICovCisgICAgICAgIHByaW50ZigiU0Q6IENhcmQgZm9yY2Ut ZXJhc2VkIGJ5IENNRDQyXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChz ZC0+YmxrX2xlbiA8IDIgKyBwd2RfbGVuIHx8CisgICAgICAgICAgICAgICAgICAgIHB3ZF9sZW4g PD0gc2QtPnB3ZF9sZW4gfHwKKyAgICAgICAgICAgICAgICAgICAgcHdkX2xlbiA+IHNkLT5wd2Rf bGVuICsgMTYpIHsKKyAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IExPQ0tfVU5MT0NLX0ZBSUxF RDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzZC0+cHdkX2xlbiAmJiBtZW1j bXAoc2QtPnB3ZCwgc2QtPmRhdGEgKyAyLCBzZC0+cHdkX2xlbikpIHsKKyAgICAgICAgc2QtPmNh cmRfc3RhdHVzIHw9IExPQ0tfVU5MT0NLX0ZBSUxFRDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K KworICAgIHB3ZF9sZW4gLT0gc2QtPnB3ZF9sZW47CisgICAgaWYgKChwd2RfbGVuICYmICFzZXRf cHdkKSB8fAorICAgICAgICAgICAgICAgICAgICAoY2xyX3B3ZCAmJiAoc2V0X3B3ZCB8fCBsb2Nr KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGxvY2sgJiYgIXNkLT5wd2RfbGVuICYmICFzZXRf cHdkKSB8fAorICAgICAgICAgICAgICAgICAgICAoIXNldF9wd2QgJiYgIWNscl9wd2QgJiYKKyAg ICAgICAgICAgICAgICAgICAgICgoKHNkLT5jYXJkX3N0YXR1cyAmIENBUkRfSVNfTE9DS0VEKSAm JiBsb2NrKSB8fAorICAgICAgICAgICAgICAgICAgICAgICghKHNkLT5jYXJkX3N0YXR1cyAmIENB UkRfSVNfTE9DS0VEKSAmJiAhbG9jaykpKSkgeworICAgICAgICBzZC0+Y2FyZF9zdGF0dXMgfD0g TE9DS19VTkxPQ0tfRkFJTEVEOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNl dF9wd2QpIHsKKyAgICAgICAgbWVtY3B5KHNkLT5wd2QsIHNkLT5kYXRhICsgMiArIHNkLT5wd2Rf bGVuLCBwd2RfbGVuKTsKKyAgICAgICAgc2QtPnB3ZF9sZW4gPSBwd2RfbGVuOworICAgIH0KKwor ICAgIGlmIChjbHJfcHdkKSB7CisgICAgICAgIHNkLT5wd2RfbGVuID0gMDsKKyAgICB9CisKKyAg ICBpZiAobG9jaykKKyAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IENBUkRfSVNfTE9DS0VEOwor ICAgIGVsc2UKKyAgICAgICAgc2QtPmNhcmRfc3RhdHVzICY9IH5DQVJEX0lTX0xPQ0tFRDsKK30K Kworc3RhdGljIHVuaW9uIHNkX3Jlc3BvbnNlX3Ugc2Rfbm9ybWFsX2NvbW1hbmQoc3RydWN0IHNk X3N0YXRlX3MgKnNkLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzZF9yZXF1ZXN0X3MgcmVxKQor eworICAgIHVpbnQzMl90IHJjYSA9IDB4MDAwMDsKKyAgICB1bmlvbiBzZF9yZXNwb25zZV91IHJl c3BvbnNlOworCisgICAgaWYgKHNkX2NtZF90eXBlW3JlcS5jbWRdID09IHNkX2FjIHx8IHNkX2Nt ZF90eXBlW3JlcS5jbWRdID09IHNkX2FkdGMpCisgICAgICAgIHJjYSA9IHJlcS5hcmcgPj4gMTY7 CisKKyAgICBzd2l0Y2ggKHJlcS5jbWQpIHsKKyAgICAvKiBCYXNpYyBjb21tYW5kcyAoQ2xhc3Mg MCBhbmQgQ2xhc3MgMSkgKi8KKyAgICBjYXNlIDA6CS8qIENNRDA6ICAgR09fSURMRV9TVEFURSAq LworICAgICAgICBzd2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX2luYWN0aXZl X3N0YXRlOgorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF9pZGxlX3N0YXRlOworICAgICAgICAgICAgc2Rf cmVzZXQoc2QsIHNkLT5iZHJ2KTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAg ICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjoJLyogQ01EMjogICBBTExfU0VORF9D SUQgKi8KKyAgICAgICAgc3dpdGNoIChzZC0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBzZF9yZWFk eV9zdGF0ZToKKyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX2lkZW50aWZpY2F0aW9uX3N0YXRl OworICAgICAgICAgICAgbWVtY3B5KHJlc3BvbnNlLnIyLnJlZywgc2QtPmNpZCwgMTYpOworICAg ICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMzoJLyogQ01E MzogICBTRU5EX1JFTEFUSVZFX0FERFIgKi8KKyAgICAgICAgc3dpdGNoIChzZC0+c3RhdGUpIHsK KyAgICAgICAgY2FzZSBzZF9pZGVudGlmaWNhdGlvbl9zdGF0ZToKKyAgICAgICAgY2FzZSBzZF9z dGFuZGJ5X3N0YXRlOgorICAgICAgICAgICAgc2QtPnN0YXRlID0gc2Rfc3RhbmRieV9zdGF0ZTsK KyAgICAgICAgICAgIHNkX3NldF9yY2Eoc2QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNl OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKworICAgIGNhc2UgNDoJLyogQ01ENDogICBTRU5EX0RTUiAqLworICAgICAg ICBzd2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3N0YW5kYnlfc3RhdGU6Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDY6CS8qIENNRDY6ICAgU1dJ VENIX0ZVTkNUSU9OICovCisgICAgICAgIHN3aXRjaCAoc2QtPm1vZGUpIHsKKyAgICAgICAgY2Fz ZSBzZF9kYXRhX3RyYW5zZmVyX21vZGU6CisgICAgICAgICAgICBzZF9mdW5jdGlvbl9zd2l0Y2go c2QsIHJlcS5hcmcpOworICAgICAgICAgICAgc2QtPnN0YXRlID0gc2Rfc2VuZGluZ2RhdGFfc3Rh dGU7CisgICAgICAgICAgICBzZC0+ZGF0YV9zdGFydCA9IDA7CisgICAgICAgICAgICBzZC0+ZGF0 YV9vZmZzZXQgPSAwOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor ICAgIGNhc2UgNzoJLyogQ01ENzogICBTRUxFQ1QvREVTRUxFQ1RfQ0FSRCAqLworICAgICAgICBz d2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3N0YW5kYnlfc3RhdGU6CisgICAg ICAgICAgICBpZiAoc2QtPnJjYSAhPSByY2EpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Bv bnNlOworCisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF90cmFuc2Zlcl9zdGF0ZTsKKyAgICAg ICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRl OgorICAgICAgICBjYXNlIHNkX3NlbmRpbmdkYXRhX3N0YXRlOgorICAgICAgICAgICAgaWYgKHNk LT5yY2EgPT0gcmNhKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBzZC0+ c3RhdGUgPSBzZF9zdGFuZGJ5X3N0YXRlOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwor CisgICAgICAgIGNhc2Ugc2RfZGlzY29ubmVjdF9zdGF0ZToKKyAgICAgICAgICAgIGlmIChzZC0+ cmNhICE9IHJjYSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAg ICAgIHNkLT5zdGF0ZSA9IHNkX3Byb2dyYW1taW5nX3N0YXRlOworICAgICAgICAgICAgcmV0dXJu IHJlc3BvbnNlOworCisgICAgICAgIGNhc2Ugc2RfcHJvZ3JhbW1pbmdfc3RhdGU6CisgICAgICAg ICAgICBpZiAoc2QtPnJjYSA9PSByY2EpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICAgIHNkLT5zdGF0ZSA9IHNkX2Rpc2Nvbm5lY3Rfc3RhdGU7CisgICAgICAgICAgICByZXR1 cm4gcmVzcG9uc2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA5OgkvKiBDTUQ5OiAgIFNFTkRfQ1NE ICovCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ugc2Rfc3RhbmRi eV9zdGF0ZToKKyAgICAgICAgICAgIGlmIChzZC0+cmNhICE9IHJjYSkKKyAgICAgICAgICAgICAg ICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAgICAgIG1lbWNweShyZXNwb25zZS5yMi5yZWcs IHNkLT5jc2QsIHNpemVvZihzZC0+Y3NkKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7 CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg ICAgIGJyZWFrOworCisgICAgY2FzZSAxMDoJLyogQ01EMTA6ICBTRU5EX0NJRCAqLworICAgICAg ICBzd2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3N0YW5kYnlfc3RhdGU6Cisg ICAgICAgICAgICBpZiAoc2QtPnJjYSAhPSByY2EpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl c3BvbnNlOworCisgICAgICAgICAgICBtZW1jcHkocmVzcG9uc2UucjIucmVnLCBzZC0+Y2lkLCBz aXplb2Yoc2QtPmNpZCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KworICAgIGNhc2UgMTE6CS8qIENNRDExOiAgUkVBRF9EQVRfVU5USUxfU1RPUCAqLworICAgICAg ICBzd2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgor ICAgICAgICAgICAgc2QtPnN0YXRlID0gc2Rfc2VuZGluZ2RhdGFfc3RhdGU7CisgICAgICAgICAg ICBzZC0+ZGF0YV9zdGFydCA9IHJlcS5hcmc7CisgICAgICAgICAgICBzZC0+ZGF0YV9vZmZzZXQg PSAwOworCisgICAgICAgICAgICBpZiAoc2QtPmRhdGFfc3RhcnQgKyBzZC0+YmxrX2xlbiA+IHNk LT5zaXplKQorICAgICAgICAgICAgICAgIHNkLT5jYXJkX3N0YXR1cyB8PSBBRERSRVNTX0VSUk9S OworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMTI6 CS8qIENNRDEyOiAgU1RPUF9UUkFOU01JU1NJT04gKi8KKyAgICAgICAgc3dpdGNoIChzZC0+c3Rh dGUpIHsKKyAgICAgICAgY2FzZSBzZF9zZW5kaW5nZGF0YV9zdGF0ZToKKyAgICAgICAgICAgIHNk LT5zdGF0ZSA9IHNkX3RyYW5zZmVyX3N0YXRlOworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNl OworCisgICAgICAgIGNhc2Ugc2RfcmVjZWl2aW5nZGF0YV9zdGF0ZToKKyAgICAgICAgICAgIHNk LT5zdGF0ZSA9IHNkX3Byb2dyYW1taW5nX3N0YXRlOworICAgICAgICAgICAgLyogQnp6enp6enp0 dCAuLi4uIE9wZXJhdGlvbiBjb21wbGV0ZS4gICovCisgICAgICAgICAgICBzZC0+c3RhdGUgPSBz ZF90cmFuc2Zlcl9zdGF0ZTsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIDEzOgkvKiBDTUQxMzogIFNFTkRfU1RBVFVTICovCisgICAgICAgIHN3aXRj aCAoc2QtPm1vZGUpIHsKKyAgICAgICAgY2FzZSBzZF9kYXRhX3RyYW5zZmVyX21vZGU6CisgICAg ICAgICAgICBpZiAoc2QtPnJjYSAhPSByY2EpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Bv bnNlOworCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz ZSAxNToJLyogQ01EMTU6ICBHT19JTkFDVElWRV9TVEFURSAqLworICAgICAgICBzd2l0Y2ggKHNk LT5tb2RlKSB7CisgICAgICAgIGNhc2Ugc2RfZGF0YV90cmFuc2Zlcl9tb2RlOgorICAgICAgICAg ICAgaWYgKHNkLT5yY2EgIT0gcmNhKQorICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsK KworICAgICAgICAgICAgc2QtPnN0YXRlID0gc2RfaW5hY3RpdmVfc3RhdGU7CisgICAgICAgICAg ICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgLyogQmxvY2sgcmVhZCBjb21tYW5k cyAoQ2xhc3NzIDIpICovCisgICAgY2FzZSAxNjoJLyogQ01EMTY6ICBTRVRfQkxPQ0tMRU4gKi8K KyAgICAgICAgc3dpdGNoIChzZC0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBzZF90cmFuc2Zlcl9z dGF0ZToKKyAgICAgICAgICAgIGlmIChyZXEuYXJnID4gKDEgPDwgSFdCTE9DS19TSElGVCkpCisg ICAgICAgICAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IEJMT0NLX0xFTl9FUlJPUjsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZC0+YmxrX2xlbiA9IHJlcS5hcmc7CisKKyAg ICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE3OgkvKiBD TUQxNzogIFJFQURfU0lOR0xFX0JMT0NLICovCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7 CisgICAgICAgIGNhc2Ugc2RfdHJhbnNmZXJfc3RhdGU6CisgICAgICAgICAgICBzZC0+c3RhdGUg PSBzZF9zZW5kaW5nZGF0YV9zdGF0ZTsKKyAgICAgICAgICAgIHNkLT5kYXRhX3N0YXJ0ID0gcmVx LmFyZzsKKyAgICAgICAgICAgIHNkLT5kYXRhX29mZnNldCA9IDA7CisKKyAgICAgICAgICAgIGlm IChzZC0+ZGF0YV9zdGFydCArIHNkLT5ibGtfbGVuID4gc2QtPnNpemUpCisgICAgICAgICAgICAg ICAgc2QtPmNhcmRfc3RhdHVzIHw9IEFERFJFU1NfRVJST1I7CisgICAgICAgICAgICByZXR1cm4g cmVzcG9uc2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAxODoJLyogQ01EMTg6ICBSRUFEX01VTFRJ UExFX0JMT0NLICovCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ug c2RfdHJhbnNmZXJfc3RhdGU6CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF9zZW5kaW5nZGF0 YV9zdGF0ZTsKKyAgICAgICAgICAgIHNkLT5kYXRhX3N0YXJ0ID0gcmVxLmFyZzsKKyAgICAgICAg ICAgIHNkLT5kYXRhX29mZnNldCA9IDA7CisKKyAgICAgICAgICAgIGlmIChzZC0+ZGF0YV9zdGFy dCArIHNkLT5ibGtfbGVuID4gc2QtPnNpemUpCisgICAgICAgICAgICAgICAgc2QtPmNhcmRfc3Rh dHVzIHw9IEFERFJFU1NfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworCisgICAgLyogQmxvY2sgd3JpdGUgY29tbWFuZHMgKENsYXNzIDQpICovCisgICAgY2Fz ZSAyNDoJLyogQ01EMjQ6ICBXUklURV9TSU5HTEVfQkxPQ0sgKi8KKyAgICAgICAgc3dpdGNoIChz ZC0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBzZF90cmFuc2Zlcl9zdGF0ZToKKyAgICAgICAgICAg IHNkLT5zdGF0ZSA9IHNkX3JlY2VpdmluZ2RhdGFfc3RhdGU7CisgICAgICAgICAgICBzZC0+ZGF0 YV9zdGFydCA9IHJlcS5hcmc7CisgICAgICAgICAgICBzZC0+ZGF0YV9vZmZzZXQgPSAwOworICAg ICAgICAgICAgc2QtPmJsa193cml0dGVuID0gMDsKKworICAgICAgICAgICAgaWYgKHNkLT5kYXRh X3N0YXJ0ICsgc2QtPmJsa19sZW4gPiBzZC0+c2l6ZSkKKyAgICAgICAgICAgICAgICBzZC0+Y2Fy ZF9zdGF0dXMgfD0gQUREUkVTU19FUlJPUjsKKyAgICAgICAgICAgIGlmIChzZF93cF9hZGRyKHNk LCBzZC0+ZGF0YV9zdGFydCkpCisgICAgICAgICAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IFdQ X1ZJT0xBVElPTjsKKyAgICAgICAgICAgIGlmIChzZC0+Y3NkWzE0XSAmIDB4MzApCisgICAgICAg ICAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IFdQX1ZJT0xBVElPTjsKKyAgICAgICAgICAgIHJl dHVybiByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI1OgkvKiBDTUQyNTogIFdSSVRF X01VTFRJUExFX0JMT0NLICovCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAg IGNhc2Ugc2RfdHJhbnNmZXJfc3RhdGU6CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF9yZWNl aXZpbmdkYXRhX3N0YXRlOworICAgICAgICAgICAgc2QtPmRhdGFfc3RhcnQgPSByZXEuYXJnOwor ICAgICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHNkLT5ibGtfd3Jp dHRlbiA9IDA7CisKKyAgICAgICAgICAgIGlmIChzZC0+ZGF0YV9zdGFydCArIHNkLT5ibGtfbGVu ID4gc2QtPnNpemUpCisgICAgICAgICAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IEFERFJFU1Nf RVJST1I7CisgICAgICAgICAgICBpZiAoc2Rfd3BfYWRkcihzZCwgc2QtPmRhdGFfc3RhcnQpKQor ICAgICAgICAgICAgICAgIHNkLT5jYXJkX3N0YXR1cyB8PSBXUF9WSU9MQVRJT047CisgICAgICAg ICAgICBpZiAoc2QtPmNzZFsxNF0gJiAweDMwKQorICAgICAgICAgICAgICAgIHNkLT5jYXJkX3N0 YXR1cyB8PSBXUF9WSU9MQVRJT047CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSAyNjoJLyogQ01EMjY6ICBQUk9HUkFNX0NJRCAqLworICAgICAgICBz d2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgorICAg ICAgICAgICAgc2QtPnN0YXRlID0gc2RfcmVjZWl2aW5nZGF0YV9zdGF0ZTsKKyAgICAgICAgICAg IHNkLT5kYXRhX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgIHNkLT5kYXRhX29mZnNldCA9IDA7Cisg ICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAyNzoJLyog Q01EMjc6ICBQUk9HUkFNX0NTRCAqLworICAgICAgICBzd2l0Y2ggKHNkLT5zdGF0ZSkgeworICAg ICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgorICAgICAgICAgICAgc2QtPnN0YXRlID0gc2Rf cmVjZWl2aW5nZGF0YV9zdGF0ZTsKKyAgICAgICAgICAgIHNkLT5kYXRhX3N0YXJ0ID0gMDsKKyAg ICAgICAgICAgIHNkLT5kYXRhX29mZnNldCA9IDA7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9u c2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgICAgIGJyZWFrOworCisgICAgLyogV3JpdGUgcHJvdGVjdGlvbiAoQ2xhc3MgNikgKi8KKyAg ICBjYXNlIDI4OgkvKiBDTUQyODogIFNFVF9XUklURV9QUk9UICovCisgICAgICAgIHN3aXRjaCAo c2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ugc2RfdHJhbnNmZXJfc3RhdGU6CisgICAgICAgICAg ICBpZiAocmVxLmFyZyA+PSBzZC0+c2l6ZSkgeworICAgICAgICAgICAgICAgIHNkLT5jYXJkX3N0 YXR1cyA9IEFERFJFU1NfRVJST1I7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF9wcm9ncmFtbWluZ19z dGF0ZTsKKyAgICAgICAgICAgIHNkLT53cF9ncm91cHNbcmVxLmFyZyA+PiAoSFdCTE9DS19TSElG VCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDVE9SX1NISUZUICsgV1BHUk9VUF9T SElGVCldID0gMTsKKyAgICAgICAgICAgIC8qIEJ6enp6enp6dHQgLi4uLiBPcGVyYXRpb24gY29t cGxldGUuICAqLworICAgICAgICAgICAgc2QtPnN0YXRlID0gc2RfdHJhbnNmZXJfc3RhdGU7Cisg ICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAyOToJLyog Q01EMjk6ICBDTFJfV1JJVEVfUFJPVCAqLworICAgICAgICBzd2l0Y2ggKHNkLT5zdGF0ZSkgewor ICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgorICAgICAgICAgICAgaWYgKHJlcS5hcmcg Pj0gc2QtPnNpemUpIHsKKyAgICAgICAgICAgICAgICBzZC0+Y2FyZF9zdGF0dXMgPSBBRERSRVNT X0VSUk9SOworICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgc2QtPnN0YXRlID0gc2RfcHJvZ3JhbW1pbmdfc3RhdGU7CisgICAgICAg ICAgICBzZC0+d3BfZ3JvdXBzW3JlcS5hcmcgPj4gKEhXQkxPQ0tfU0hJRlQgKworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNFQ1RPUl9TSElGVCArIFdQR1JPVVBfU0hJRlQpXSA9IDA7Cisg ICAgICAgICAgICAvKiBCenp6enp6enR0IC4uLi4gT3BlcmF0aW9uIGNvbXBsZXRlLiAgKi8KKyAg ICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3RyYW5zZmVyX3N0YXRlOworICAgICAgICAgICAgcmV0 dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMzA6CS8qIENNRDMwOiAgU0VORF9X UklURV9QUk9UICovCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ug c2RfdHJhbnNmZXJfc3RhdGU6CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF9zZW5kaW5nZGF0 YV9zdGF0ZTsKKyAgICAgICAgICAgICoodWludDMyX3QgKikgc2QtPmRhdGEgPSBzZF93cGJpdHMo c2QsIHJlcS5hcmcpOworICAgICAgICAgICAgc2QtPmRhdGFfc3RhcnQgPSByZXEuYXJnOworICAg ICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25z ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CisKKyAgICAvKiBFcmFzZSBjb21tYW5kcyAoQ2xhc3MgNSkgKi8KKyAgICBj YXNlIDMyOgkvKiBDTUQzMjogIEVSQVNFX1dSX0JMS19TVEFSVCAqLworICAgICAgICBzd2l0Y2gg KHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgorICAgICAgICAg ICAgc2QtPmVyYXNlX3N0YXJ0ID0gcmVxLmFyZzsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25z ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDMzOgkvKiBDTUQzMzogIEVSQVNFX1dSX0JMS19FTkQg Ki8KKyAgICAgICAgc3dpdGNoIChzZC0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBzZF90cmFuc2Zl cl9zdGF0ZToKKyAgICAgICAgICAgIHNkLT5lcmFzZV9lbmQgPSByZXEuYXJnOworICAgICAgICAg ICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMzg6CS8qIENNRDM4OiAg RVJBU0UgKi8KKyAgICAgICAgc3dpdGNoIChzZC0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBzZF90 cmFuc2Zlcl9zdGF0ZToKKyAgICAgICAgICAgIGlmIChzZC0+Y3NkWzE0XSAmIDB4MzApIHsKKyAg ICAgICAgICAgICAgICBzZC0+Y2FyZF9zdGF0dXMgfD0gV1BfVklPTEFUSU9OOworICAgICAgICAg ICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2Qt PnN0YXRlID0gc2RfcHJvZ3JhbW1pbmdfc3RhdGU7CisgICAgICAgICAgICBzZF9lcmFzZShzZCk7 CisgICAgICAgICAgICAvKiBCenp6enp6enR0IC4uLi4gT3BlcmF0aW9uIGNvbXBsZXRlLiAgKi8K KyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3RyYW5zZmVyX3N0YXRlOworICAgICAgICAgICAg cmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIC8qIExvY2sgY2FyZCBjb21tYW5kcyAo Q2xhc3MgNykgKi8KKyAgICBjYXNlIDQyOgkvKiBDTUQ0MjogIExPQ0tfVU5MT0NLICovCisgICAg ICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ugc2RfdHJhbnNmZXJfc3RhdGU6 CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF9yZWNlaXZpbmdkYXRhX3N0YXRlOworICAgICAg ICAgICAgc2QtPmRhdGFfc3RhcnQgPSAwOworICAgICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0ID0g MDsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0OgorICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiBBcHBs aWNhdGlvbiBzcGVjaWZpYyBjb21tYW5kcyAoQ2xhc3MgOCkgKi8KKyAgICBjYXNlIDU1OgkvKiBD TUQ1NTogIEFQUF9DTUQgKi8KKyAgICAgICAgaWYgKHNkLT5yY2EgIT0gcmNhKQorICAgICAgICAg ICAgcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIHNkLT5jYXJkX3N0YXR1cyB8PSBBUFBfQ01E OworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisKKyAgICBjYXNlIDU2OgkvKiBDTUQ1NjogIEdF Tl9DTUQgKi8KKyAgICAgICAgcHJpbnRmKCJTRDogR0VOX0NNRCAweCUwOHhcbiIsIHJlcS5hcmcp OworCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ugc2RfdHJhbnNm ZXJfc3RhdGU6CisgICAgICAgICAgICBzZC0+ZGF0YV9vZmZzZXQgPSAwOworICAgICAgICAgICAg aWYgKHJlcS5hcmcgJiAxKQorICAgICAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3NlbmRpbmdk YXRhX3N0YXRlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNkLT5zdGF0ZSA9 IHNkX3JlY2VpdmluZ2RhdGFfc3RhdGU7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisK KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc2QtPmNhcmRfc3RhdHVzIHw9IElMTEVH QUxfQ09NTUFORDsKKworICAgICAgICBwcmludGYoIlNEOiBVbmtub3duIENNRCVpXG4iLCByZXEu Y21kKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIHNkLT5jYXJkX3N0 YXR1cyB8PSBJTExFR0FMX0NPTU1BTkQ7CisgICAgcHJpbnRmKCJTRDogQ01EJWkgaW4gYSB3cm9u ZyBzdGF0ZVxuIiwgcmVxLmNtZCk7CisgICAgcmV0dXJuIHJlc3BvbnNlOworfQorCitzdGF0aWMg dW5pb24gc2RfcmVzcG9uc2VfdSBzZF9hcHBfY29tbWFuZChzdHJ1Y3Qgc2Rfc3RhdGVfcyAqc2Qs CisgICAgICAgIHN0cnVjdCBzZF9yZXF1ZXN0X3MgcmVxKSB7CisgICAgdWludDMyX3QgcmNhOwor ICAgIHVuaW9uIHNkX3Jlc3BvbnNlX3UgcmVzcG9uc2U7CisKKyAgICBpZiAoc2RfY21kX3R5cGVb cmVxLmNtZF0gPT0gc2RfYWMgfHwgc2RfY21kX3R5cGVbcmVxLmNtZF0gPT0gc2RfYWR0YykKKyAg ICAgICAgcmNhID0gcmVxLmFyZyA+PiAxNjsKKworICAgIHN3aXRjaCAocmVxLmNtZCkgeworICAg IGNhc2UgNjoJLyogQUNNRDY6ICBTRVRfQlVTX1dJRFRIICovCisgICAgICAgIHN3aXRjaCAoc2Qt PnN0YXRlKSB7CisgICAgICAgIGNhc2Ugc2RfdHJhbnNmZXJfc3RhdGU6CisgICAgICAgICAgICBz ZC0+c2Rfc3RhdHVzWzBdICY9IDB4M2Y7CisgICAgICAgICAgICBzZC0+c2Rfc3RhdHVzWzBdIHw9 IChyZXEuYXJnICYgMHgwMykgPDwgNjsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIDEzOgkvKiBBQ01EMTM6IFNEX1NUQVRVUyAqLworICAgICAgICBz d2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgorICAg ICAgICAgICAgc2QtPmRhdGFfc3RhcnQgPSAwOworICAgICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0 ID0gMDsKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl IDIyOgkvKiBBQ01EMjI6IFNFTkRfTlVNX1dSX0JMT0NLUyAqLworICAgICAgICBzd2l0Y2ggKHNk LT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNkX3RyYW5zZmVyX3N0YXRlOgorICAgICAgICAgICAg Kih1aW50MzJfdCAqKSBzZC0+ZGF0YSA9IHNkLT5ibGtfd3JpdHRlbjsKKworICAgICAgICAgICAg c2QtPmRhdGFfc3RhcnQgPSAwOworICAgICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0ID0gMDsKKyAg ICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDIzOgkvKiBB Q01EMjM6IFNFVF9XUl9CTEtfRVJBU0VfQ09VTlQgKi8KKyAgICAgICAgc3dpdGNoIChzZC0+c3Rh dGUpIHsKKyAgICAgICAgY2FzZSBzZF90cmFuc2Zlcl9zdGF0ZToKKyAgICAgICAgICAgIHJldHVy biByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDQxOgkvKiBBQ01ENDE6IFNEX0FQUF9P UF9DT05EICovCisgICAgICAgIHN3aXRjaCAoc2QtPnN0YXRlKSB7CisgICAgICAgIGNhc2Ugc2Rf aWRsZV9zdGF0ZToKKyAgICAgICAgICAgIC8qIFdlIGFjY2VwdCBhbnkgdm9sdGFnZS4gIDEwMDAw IFYgaXMgbm90aGluZy4gICovCisgICAgICAgICAgICBpZiAocmVxLmFyZykKKyAgICAgICAgICAg ICAgICBzZC0+c3RhdGUgPSBzZF9yZWFkeV9zdGF0ZTsKKworICAgICAgICAgICAgcmV0dXJuIHJl c3BvbnNlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgNDI6CS8qIEFDTUQ0MjogU0VUX0NMUl9DQVJE X0RFVEVDVCAqLworICAgICAgICBzd2l0Y2ggKHNkLT5zdGF0ZSkgeworICAgICAgICBjYXNlIHNk X3RyYW5zZmVyX3N0YXRlOgorICAgICAgICAgICAgLyogQnJpbmdpbmcgaW4gdGhlIDUwS09obSBw dWxsLXVwIHJlc2lzdG9yLi4uIERvbmUuICAqLworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNl OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKworICAgIGNhc2UgNTE6CS8qIEFDTUQ1MTogU0VORF9TQ1IgKi8KKyAgICAg ICAgc3dpdGNoIChzZC0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBzZF90cmFuc2Zlcl9zdGF0ZToK KyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3NlbmRpbmdkYXRhX3N0YXRlOworICAgICAgICAg ICAgc2QtPmRhdGFfc3RhcnQgPSAwOworICAgICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0ID0gMDsK KyAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor ICAgICAgICAvKiBGYWxsIGJhY2sgdG8gc3RhbmRhcmQgY29tbWFuZHMuICAqLworICAgICAgICBz ZC0+Y2FyZF9zdGF0dXMgJj0gfkFQUF9DTUQ7CisgICAgICAgIHJldHVybiBzZF9ub3JtYWxfY29t bWFuZChzZCwgcmVxKTsKKyAgICB9CisKKyAgICBwcmludGYoIlNEOiBBQ01EJWkgaW4gYSB3cm9u ZyBzdGF0ZVxuIiwgcmVxLmNtZCk7CisgICAgcmV0dXJuIHJlc3BvbnNlOworfQorCit1bmlvbiBz ZF9yZXNwb25zZV91IHNkX3dyaXRlX2NtZGxpbmUoc3RydWN0IHNkX3N0YXRlX3MgKnNkLAorICAg ICAgICBzdHJ1Y3Qgc2RfcmVxdWVzdF9zIHJlcSwgaW50ICpyc3BsZW4pIHsKKyAgICB1aW50MzJf dCBsYXN0X3N0YXR1cyA9IHNkLT5jYXJkX3N0YXR1czsKKyAgICB1bmlvbiBzZF9yZXNwb25zZV91 IHJlc3BvbnNlOworICAgIHNkX3JzcF90eXBlX3QgcnR5cGU7CisKKyAgICBpZiAoIWJkcnZfaXNf aW5zZXJ0ZWQoc2QtPmJkcnYpKSB7CisgICAgICAgICpyc3BsZW4gPSAwOworICAgICAgICByZXR1 cm4gcmVzcG9uc2U7CisgICAgfQorCisgICAgaWYgKHNkX3JlcV9jcmNfdmFsaWRhdGUoJnJlcSkp IHsKKyAgICAgICAgc2QtPmNhcmRfc3RhdHVzICY9IH5DT01fQ1JDX0VSUk9SOworICAgICAgICAq cnNwbGVuID0gMDsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIHNkLT5j YXJkX3N0YXR1cyAmPSB+Q0FSRF9TVEFUVVNfQjsKKyAgICBzZF9zZXRfc3RhdHVzKHNkKTsKKwor ICAgIGlmIChsYXN0X3N0YXR1cyAmIENBUkRfSVNfTE9DS0VEKQorICAgICAgICBpZiAoKChsYXN0 X3N0YXR1cyAmIEFQUF9DTUQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz ZF9hY21kX3R5cGVbcmVxLmNtZF0gPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2RfYWNtZF90eXBlW3JlcS5jbWRdID09IDcgfHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlcS5jbWQgPT0gNDEpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg KCEobGFzdF9zdGF0dXMgJiBBUFBfQ01EKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChz ZF9jbWRfdHlwZVtyZXEuY21kXSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNk X2NtZF90eXBlW3JlcS5jbWRdID09IDcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVx LmNtZCA9PSAxNiB8fCByZXEuY21kID09IDU1KSkpIHsKKyAgICAgICAgICAgIHNkLT5jYXJkX3N0 YXR1cyB8PSBJTExFR0FMX0NPTU1BTkQ7CisgICAgICAgICAgICBwcmludGYoIlNEOiBDYXJkIGlz IGxvY2tlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0KKwor ICAgIGlmIChsYXN0X3N0YXR1cyAmIEFQUF9DTUQpCisgICAgICAgIHJlc3BvbnNlID0gc2RfYXBw X2NvbW1hbmQoc2QsIHJlcSk7CisgICAgZWxzZQorICAgICAgICByZXNwb25zZSA9IHNkX25vcm1h bF9jb21tYW5kKHNkLCByZXEpOworCisgICAgaWYgKGxhc3Rfc3RhdHVzICYgQVBQX0NNRCkgewor ICAgICAgICBpZiAoc2QtPmNhcmRfc3RhdHVzICYgQVBQX0NNRCkgeworICAgICAgICAgICAgcnR5 cGUgPSBzZF9hY21kX3Jlc3BvbnNlW3JlcS5jbWRdOworICAgICAgICAgICAgc2QtPmNhcmRfc3Rh dHVzICY9IH5BUFBfQ01EOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJ0eXBlID0gc2Rf Y21kX3Jlc3BvbnNlW3JlcS5jbWRdOworICAgIH0gZWxzZQorICAgICAgICBydHlwZSA9IHNkX2Nt ZF9yZXNwb25zZVtyZXEuY21kXTsKKworICAgIHNkLT5jdXJyZW50X2NtZCA9IHJlcS5jbWQ7CisK KyAgICBzd2l0Y2ggKHJ0eXBlKSB7CisgICAgY2FzZSBzZF9yMToKKyAgICBjYXNlIHNkX3IxYjoK KyAgICAgICAgc2RfcmVzcG9uc2VfcjFfbWFrZShzZCwgJnJlc3BvbnNlLCBsYXN0X3N0YXR1cyk7 CisgICAgICAgICpyc3BsZW4gPSA0ODsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHNkX3Iy OgorICAgICAgICBzZF9yZXNwb25zZV9yMl9tYWtlKHNkLCAmcmVzcG9uc2UpOworICAgICAgICAq cnNwbGVuID0gMTI4OworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2RfcjM6CisgICAgICAg IHNkX3Jlc3BvbnNlX3IzX21ha2Uoc2QsICZyZXNwb25zZSk7CisgICAgICAgICpyc3BsZW4gPSA0 ODsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHNkX3I2OgorICAgICAgICBzZF9yZXNwb25z ZV9yNl9tYWtlKHNkLCAmcmVzcG9uc2UpOworICAgICAgICAqcnNwbGVuID0gNDg7CisgICAgICAg IGJyZWFrOworCisgICAgY2FzZSBzZF9ub3JlOgorICAgIGRlZmF1bHQ6CisgICAgICAgICpyc3Bs ZW4gPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc2QtPmNhcmRfc3RhdHVz ICYgSUxMRUdBTF9DT01NQU5EKQorICAgICAgICAqcnNwbGVuID0gMDsKKworICAgIHJldHVybiBy ZXNwb25zZTsKK30KKworLyogTm8gcmVhbCBuZWVkIGZvciA2NCBiaXQgYWRkcmVzc2VzIGhlcmUg Ki8KK3N0YXRpYyB2b2lkIHNkX2Jsa19yZWFkKEJsb2NrRHJpdmVyU3RhdGUgKmJkcnYsCisgICAg ICAgICAgICAgICAgdm9pZCAqZGF0YSwgdWludDMyX3QgYWRkciwgdWludDMyX3QgbGVuKQorewor ICAgIHVpbnQ4X3QgYnVmWzUxMl07CisgICAgdWludDMyX3QgZW5kID0gYWRkciArIGxlbjsKKwor ICAgIGlmICghYmRydiB8fCBiZHJ2X3JlYWQoYmRydiwgYWRkciA+PiA5LCBidWYsIDEpID09IC0x KSB7CisgICAgICAgIHByaW50Zigic2RfYmxrX3JlYWQ6IHJlYWQgZXJyb3Igb24gaG9zdCBzaWRl XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlbmQgPiAoYWRkciAmIH41 MTEpICsgNTEyKSB7CisgICAgICAgIG1lbWNweShkYXRhLCBidWYgKyAoYWRkciAmIDUxMSksIDUx MiAtIChhZGRyICYgNTExKSk7CisKKyAgICAgICAgaWYgKGJkcnZfcmVhZChiZHJ2LCBlbmQgPj4g OSwgYnVmLCAxKSA9PSAtMSkgeworICAgICAgICAgICAgcHJpbnRmKCJzZF9ibGtfcmVhZDogcmVh ZCBlcnJvciBvbiBob3N0IHNpZGVcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIG1lbWNweShkYXRhICsgNTEyIC0gKGFkZHIgJiA1MTEpLCBidWYsIGVuZCAmIDUx MSk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShkYXRhLCBidWYgKyAoYWRkciAmIDUxMSks IGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2Jsa193cml0ZShCbG9ja0RyaXZlclN0YXRlICpi ZHJ2LAorICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90 IGxlbikKK3sKKyAgICB1aW50OF90IGJ1Zls1MTJdOworICAgIHVpbnQzMl90IGVuZCA9IGFkZHIg KyBsZW47CisKKyAgICBpZiAoKGFkZHIgJiA1MTEpIHx8IGxlbiA8IDUxMikKKyAgICAgICAgaWYg KCFiZHJ2IHx8IGJkcnZfcmVhZChiZHJ2LCBhZGRyID4+IDksIGJ1ZiwgMSkgPT0gLTEpIHsKKyAg ICAgICAgICAgIHByaW50Zigic2RfYmxrX3dyaXRlOiByZWFkIGVycm9yIG9uIGhvc3Qgc2lkZVxu Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIGlmIChlbmQgPiAoYWRk ciAmIH41MTEpICsgNTEyKSB7CisgICAgICAgIG1lbWNweShidWYgKyAoYWRkciAmIDUxMSksIGRh dGEsIDUxMiAtIChhZGRyICYgNTExKSk7CisgICAgICAgIGlmIChiZHJ2X3dyaXRlKGJkcnYsIGFk ZHIgPj4gOSwgYnVmLCAxKSA9PSAtMSkgeworICAgICAgICAgICAgcHJpbnRmKCJzZF9ibGtfd3Jp dGU6IHdyaXRlIGVycm9yIG9uIGhvc3Qgc2lkZVxuIik7CisgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoYmRydl9yZWFkKGJkcnYsIGVuZCA+PiA5LCBidWYsIDEp ID09IC0xKSB7CisgICAgICAgICAgICBwcmludGYoInNkX2Jsa193cml0ZTogcmVhZCBlcnJvciBv biBob3N0IHNpZGVcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IG1lbWNweShidWYsIGRhdGEgKyA1MTIgLSAoYWRkciAmIDUxMSksIGVuZCAmIDUxMSk7CisgICAg ICAgIGlmIChiZHJ2X3dyaXRlKGJkcnYsIGVuZCA+PiA5LCBidWYsIDEpID09IC0xKQorICAgICAg ICAgICAgcHJpbnRmKCJzZF9ibGtfd3JpdGU6IHdyaXRlIGVycm9yIG9uIGhvc3Qgc2lkZVxuIik7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KGJ1ZiArIChhZGRyICYgNTExKSwgZGF0YSwg bGVuKTsKKyAgICAgICAgaWYgKCFiZHJ2IHx8IGJkcnZfd3JpdGUoYmRydiwgYWRkciA+PiA5LCBi dWYsIDEpID09IC0xKQorICAgICAgICAgICAgcHJpbnRmKCJzZF9ibGtfd3JpdGU6IHdyaXRlIGVy cm9yIG9uIGhvc3Qgc2lkZVxuIik7CisgICAgfQorfQorCisjZGVmaW5lIEJMS19SRUFEX0JMT0NL KGEsIGxlbikJc2RfYmxrX3JlYWQoc2QtPmJkcnYsIHNkLT5kYXRhLCBhLCBsZW4pCisjZGVmaW5l IEJMS19XUklURV9CTE9DSyhhLCBsZW4pCXNkX2Jsa193cml0ZShzZC0+YmRydiwgc2QtPmRhdGEs IGEsIGxlbikKKyNkZWZpbmUgQVBQX1JFQURfQkxPQ0soYSwgbGVuKQltZW1zZXQoc2QtPmRhdGEs IDB4ZWMsIGxlbikKKyNkZWZpbmUgQVBQX1dSSVRFX0JMT0NLKGEsIGxlbikKKwordm9pZCBzZF93 cml0ZV9kYXRsaW5lKHN0cnVjdCBzZF9zdGF0ZV9zICpzZCwgdWludDhfdCB2YWx1ZSkKK3sKKyAg ICBpbnQgaTsKKworICAgIGlmICghc2QtPmJkcnYgfHwgIWJkcnZfaXNfaW5zZXJ0ZWQoc2QtPmJk cnYpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2QtPnN0YXRlICE9IHNkX3JlY2Vpdmlu Z2RhdGFfc3RhdGUpIHsKKyAgICAgICAgcHJpbnRmKCJzZF93cml0ZV9kYXRsaW5lOiBub3QgaW4g UmVjZWl2aW5nLURhdGEgc3RhdGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg aWYgKHNkLT5jYXJkX3N0YXR1cyAmIChBRERSRVNTX0VSUk9SIHwgV1BfVklPTEFUSU9OKSkKKyAg ICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChzZC0+Y3VycmVudF9jbWQpIHsKKyAgICBjYXNl IDI0OgkvKiBDTUQyNDogIFdSSVRFX1NJTkdMRV9CTE9DSyAqLworICAgICAgICBzZC0+ZGF0YVtz ZC0+ZGF0YV9vZmZzZXQgKytdID0gdmFsdWU7CisgICAgICAgIGlmIChzZC0+ZGF0YV9vZmZzZXQg Pj0gc2QtPmJsa19sZW4pIHsKKyAgICAgICAgICAgIC8qIFRPRE86IENoZWNrIENSQyBiZWZvcmUg Y29tbWl0dGluZyAqLworICAgICAgICAgICAgc2QtPnN0YXRlID0gc2RfcHJvZ3JhbW1pbmdfc3Rh dGU7CisgICAgICAgICAgICBCTEtfV1JJVEVfQkxPQ0soc2QtPmRhdGFfc3RhcnQsIHNkLT5kYXRh X29mZnNldCk7CisgICAgICAgICAgICBzZC0+YmxrX3dyaXR0ZW4gKys7CisgICAgICAgICAgICBz ZC0+Y3NkWzE0XSB8PSAweDQwOworICAgICAgICAgICAgLyogQnp6enp6enp0dCAuLi4uIE9wZXJh dGlvbiBjb21wbGV0ZS4gICovCisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF90cmFuc2Zlcl9z dGF0ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjU6CS8qIENNRDI1 OiAgV1JJVEVfTVVMVElQTEVfQkxPQ0sgKi8KKyAgICAgICAgc2QtPmRhdGFbc2QtPmRhdGFfb2Zm c2V0ICsrXSA9IHZhbHVlOworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID49IHNkLT5ibGtf bGVuKSB7CisgICAgICAgICAgICAvKiBUT0RPOiBDaGVjayBDUkMgYmVmb3JlIGNvbW1pdHRpbmcg Ki8KKyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3Byb2dyYW1taW5nX3N0YXRlOworICAgICAg ICAgICAgQkxLX1dSSVRFX0JMT0NLKHNkLT5kYXRhX3N0YXJ0LCBzZC0+ZGF0YV9vZmZzZXQpOwor ICAgICAgICAgICAgc2QtPmJsa193cml0dGVuICsrOworICAgICAgICAgICAgc2QtPmRhdGFfc3Rh cnQgKz0gc2QtPmJsa19sZW47CisgICAgICAgICAgICBzZC0+ZGF0YV9vZmZzZXQgPSAwOworICAg ICAgICAgICAgaWYgKHNkLT5kYXRhX3N0YXJ0ICsgc2QtPmJsa19sZW4gPiBzZC0+c2l6ZSkgewor ICAgICAgICAgICAgICAgIHNkLT5jYXJkX3N0YXR1cyB8PSBBRERSRVNTX0VSUk9SOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNkX3dwX2Fk ZHIoc2QsIHNkLT5kYXRhX3N0YXJ0KSkgeworICAgICAgICAgICAgICAgIHNkLT5jYXJkX3N0YXR1 cyB8PSBXUF9WSU9MQVRJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBzZC0+Y3NkWzE0XSB8PSAweDQwOworCisgICAgICAgICAgICAvKiBCenp6 enp6enR0IC4uLi4gT3BlcmF0aW9uIGNvbXBsZXRlLiAgKi8KKyAgICAgICAgICAgIHNkLT5zdGF0 ZSA9IHNkX3JlY2VpdmluZ2RhdGFfc3RhdGU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK KyAgICBjYXNlIDI2OgkvKiBDTUQyNjogIFBST0dSQU1fQ0lEICovCisgICAgICAgIHNkLT5kYXRh W3NkLT5kYXRhX29mZnNldCArK10gPSB2YWx1ZTsKKyAgICAgICAgaWYgKHNkLT5kYXRhX29mZnNl dCA+PSBzaXplb2Yoc2QtPmNpZCkpIHsKKyAgICAgICAgICAgIC8qIFRPRE86IENoZWNrIENSQyBi ZWZvcmUgY29tbWl0dGluZyAqLworICAgICAgICAgICAgc2QtPnN0YXRlID0gc2RfcHJvZ3JhbW1p bmdfc3RhdGU7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNkLT5jaWQpOyBp ICsrKQorICAgICAgICAgICAgICAgIGlmICgoc2QtPmNpZFtpXSB8IDB4MDApICE9IHNkLT5kYXRh W2ldKQorICAgICAgICAgICAgICAgICAgICBzZC0+Y2FyZF9zdGF0dXMgfD0gQ0lEX0NTRF9PVkVS V1JJVEU7CisKKyAgICAgICAgICAgIGlmICghKHNkLT5jYXJkX3N0YXR1cyAmIENJRF9DU0RfT1ZF UldSSVRFKSkKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNkLT5jaWQp OyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNkLT5jaWRbaV0gfD0gMHgwMDsKKyAgICAg ICAgICAgICAgICAgICAgc2QtPmNpZFtpXSAmPSBzZC0+ZGF0YVtpXTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAvKiBCenp6enp6enR0IC4uLi4gT3BlcmF0aW9uIGNvbXBsZXRlLiAg Ki8KKyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3RyYW5zZmVyX3N0YXRlOworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAyNzoJLyogQ01EMjc6ICBQUk9HUkFNX0NTRCAq LworICAgICAgICBzZC0+ZGF0YVtzZC0+ZGF0YV9vZmZzZXQgKytdID0gdmFsdWU7CisgICAgICAg IGlmIChzZC0+ZGF0YV9vZmZzZXQgPj0gc2l6ZW9mKHNkLT5jc2QpKSB7CisgICAgICAgICAgICAv KiBUT0RPOiBDaGVjayBDUkMgYmVmb3JlIGNvbW1pdHRpbmcgKi8KKyAgICAgICAgICAgIHNkLT5z dGF0ZSA9IHNkX3Byb2dyYW1taW5nX3N0YXRlOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHNpemVvZihzZC0+Y3NkKTsgaSArKykKKyAgICAgICAgICAgICAgICBpZiAoKHNkLT5jc2RbaV0g fCBzZF9jc2RfcndfbWFza1tpXSkgIT0KKyAgICAgICAgICAgICAgICAgICAgKHNkLT5kYXRhW2ld IHwgc2RfY3NkX3J3X21hc2tbaV0pKQorICAgICAgICAgICAgICAgICAgICBzZC0+Y2FyZF9zdGF0 dXMgfD0gQ0lEX0NTRF9PVkVSV1JJVEU7CisKKyAgICAgICAgICAgIC8qIENvcHkgZmxhZyAoT1RQ KSAmIFBlcm1hbmVudCB3cml0ZSBwcm90ZWN0ICovCisgICAgICAgICAgICBpZiAoc2QtPmNzZFsx NF0gJiB+c2QtPmRhdGFbMTRdICYgMHg2MCkKKyAgICAgICAgICAgICAgICBzZC0+Y2FyZF9zdGF0 dXMgfD0gQ0lEX0NTRF9PVkVSV1JJVEU7CisKKyAgICAgICAgICAgIGlmICghKHNkLT5jYXJkX3N0 YXR1cyAmIENJRF9DU0RfT1ZFUldSSVRFKSkKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKHNkLT5jc2QpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNkLT5jc2Rb aV0gfD0gc2RfY3NkX3J3X21hc2tbaV07CisgICAgICAgICAgICAgICAgICAgIHNkLT5jc2RbaV0g Jj0gc2QtPmRhdGFbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogQnp6enp6 enp0dCAuLi4uIE9wZXJhdGlvbiBjb21wbGV0ZS4gICovCisgICAgICAgICAgICBzZC0+c3RhdGUg PSBzZF90cmFuc2Zlcl9zdGF0ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNh c2UgNDI6CS8qIENNRDQyOiAgTE9DS19VTkxPQ0sgKi8KKyAgICAgICAgc2QtPmRhdGFbc2QtPmRh dGFfb2Zmc2V0ICsrXSA9IHZhbHVlOworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID49IHNk LT5ibGtfbGVuKSB7CisgICAgICAgICAgICAvKiBUT0RPOiBDaGVjayBDUkMgYmVmb3JlIGNvbW1p dHRpbmcgKi8KKyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3Byb2dyYW1taW5nX3N0YXRlOwor ICAgICAgICAgICAgc2RfbG9ja19jb21tYW5kKHNkKTsKKyAgICAgICAgICAgIC8qIEJ6enp6enp6 dHQgLi4uLiBPcGVyYXRpb24gY29tcGxldGUuICAqLworICAgICAgICAgICAgc2QtPnN0YXRlID0g c2RfdHJhbnNmZXJfc3RhdGU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl IDU2OgkvKiBDTUQ1NjogIEdFTl9DTUQgKi8KKyAgICAgICAgc2QtPmRhdGFbc2QtPmRhdGFfb2Zm c2V0ICsrXSA9IHZhbHVlOworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID49IHNkLT5ibGtf bGVuKSB7CisgICAgICAgICAgICBBUFBfV1JJVEVfQkxPQ0soc2QtPmRhdGFfc3RhcnQsIHNkLT5k YXRhX29mZnNldCk7CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF90cmFuc2Zlcl9zdGF0ZTsK KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50 Zigic2Rfd3JpdGVfZGF0bGluZTogdW5rbm93biBjb21tYW5kXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorfQorCit1aW50OF90IHNkX3JlYWRfZGF0bGluZShzdHJ1Y3Qgc2Rfc3RhdGVfcyAq c2QpCit7CisgICAgLyogVE9ETzogQXBwZW5kIENSQ3MgKi8KKyAgICB1aW50OF90IHJldDsKKwor ICAgIGlmICghc2QtPmJkcnYgfHwgIWJkcnZfaXNfaW5zZXJ0ZWQoc2QtPmJkcnYpKQorICAgICAg ICByZXR1cm4gMHgwMDsKKworICAgIGlmIChzZC0+c3RhdGUgIT0gc2Rfc2VuZGluZ2RhdGFfc3Rh dGUpIHsKKyAgICAgICAgcHJpbnRmKCJzZF9yZWFkX2RhdGxpbmU6IG5vdCBpbiBTZW5kaW5nLURh dGEgc3RhdGVcbiIpOworICAgICAgICByZXR1cm4gMHgwMDsKKyAgICB9CisKKyAgICBpZiAoc2Qt PmNhcmRfc3RhdHVzICYgKEFERFJFU1NfRVJST1IgfCBXUF9WSU9MQVRJT04pKQorICAgICAgICBy ZXR1cm4gMHgwMDsKKworICAgIHN3aXRjaCAoc2QtPmN1cnJlbnRfY21kKSB7CisgICAgY2FzZSA2 OgkvKiBDTUQ2OiAgIFNXSVRDSF9GVU5DVElPTiAqLworICAgICAgICByZXQgPSBzZC0+ZGF0YVtz ZC0+ZGF0YV9vZmZzZXQgKytdOworCisgICAgICAgIGlmIChzZC0+ZGF0YV9vZmZzZXQgPj0gNjQp CisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF90cmFuc2Zlcl9zdGF0ZTsKKyAgICAgICAgYnJl YWs7CisKKyAgICBjYXNlIDExOgkvKiBDTUQxMTogIFJFQURfREFUX1VOVElMX1NUT1AgKi8KKyAg ICAgICAgaWYgKHNkLT5kYXRhX29mZnNldCA9PSAwKQorICAgICAgICAgICAgQkxLX1JFQURfQkxP Q0soc2QtPmRhdGFfc3RhcnQsIHNkLT5ibGtfbGVuKTsKKyAgICAgICAgcmV0ID0gc2QtPmRhdGFb c2QtPmRhdGFfb2Zmc2V0ICsrXTsKKworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID49IHNk LT5ibGtfbGVuKSB7CisgICAgICAgICAgICBzZC0+ZGF0YV9zdGFydCArPSBzZC0+YmxrX2xlbjsK KyAgICAgICAgICAgIHNkLT5kYXRhX29mZnNldCA9IDA7CisgICAgICAgICAgICBpZiAoc2QtPmRh dGFfc3RhcnQgKyBzZC0+YmxrX2xlbiA+IHNkLT5zaXplKSB7CisgICAgICAgICAgICAgICAgc2Qt PmNhcmRfc3RhdHVzIHw9IEFERFJFU1NfRVJST1I7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDEzOgkv KiBBQ01EMTM6IFNEX1NUQVRVUyAqLworICAgICAgICByZXQgPSBzZC0+c2Rfc3RhdHVzW3NkLT5k YXRhX29mZnNldCArK107CisKKyAgICAgICAgaWYgKHNkLT5kYXRhX29mZnNldCA+PSBzaXplb2Yo c2QtPnNkX3N0YXR1cykpCisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF90cmFuc2Zlcl9zdGF0 ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE3OgkvKiBDTUQxNzogIFJFQURfU0lOR0xF X0JMT0NLICovCisgICAgICAgIGlmIChzZC0+ZGF0YV9vZmZzZXQgPT0gMCkKKyAgICAgICAgICAg IEJMS19SRUFEX0JMT0NLKHNkLT5kYXRhX3N0YXJ0LCBzZC0+YmxrX2xlbik7CisgICAgICAgIHJl dCA9IHNkLT5kYXRhW3NkLT5kYXRhX29mZnNldCArK107CisKKyAgICAgICAgaWYgKHNkLT5kYXRh X29mZnNldCA+PSBzZC0+YmxrX2xlbikKKyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3RyYW5z ZmVyX3N0YXRlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMTg6CS8qIENNRDE4OiAgUkVB RF9NVUxUSVBMRV9CTE9DSyAqLworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID09IDApCisg ICAgICAgICAgICBCTEtfUkVBRF9CTE9DSyhzZC0+ZGF0YV9zdGFydCwgc2QtPmJsa19sZW4pOwor ICAgICAgICByZXQgPSBzZC0+ZGF0YVtzZC0+ZGF0YV9vZmZzZXQgKytdOworCisgICAgICAgIGlm IChzZC0+ZGF0YV9vZmZzZXQgPj0gc2QtPmJsa19sZW4pIHsKKyAgICAgICAgICAgIHNkLT5kYXRh X3N0YXJ0ICs9IHNkLT5ibGtfbGVuOworICAgICAgICAgICAgc2QtPmRhdGFfb2Zmc2V0ID0gMDsK KyAgICAgICAgICAgIGlmIChzZC0+ZGF0YV9zdGFydCArIHNkLT5ibGtfbGVuID4gc2QtPnNpemUp IHsKKyAgICAgICAgICAgICAgICBzZC0+Y2FyZF9zdGF0dXMgfD0gQUREUkVTU19FUlJPUjsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBi cmVhazsKKworICAgIGNhc2UgMjI6CS8qIEFDTUQyMjogU0VORF9OVU1fV1JfQkxPQ0tTICovCisg ICAgICAgIHJldCA9IHNkLT5kYXRhW3NkLT5kYXRhX29mZnNldCArK107CisKKyAgICAgICAgaWYg KHNkLT5kYXRhX29mZnNldCA+PSA0KQorICAgICAgICAgICAgc2QtPnN0YXRlID0gc2RfdHJhbnNm ZXJfc3RhdGU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAzMDoJLyogQ01EMzA6ICBTRU5E X1dSSVRFX1BST1QgKi8KKyAgICAgICAgcmV0ID0gc2QtPmRhdGFbc2QtPmRhdGFfb2Zmc2V0ICsr XTsKKworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID49IDQpCisgICAgICAgICAgICBzZC0+ c3RhdGUgPSBzZF90cmFuc2Zlcl9zdGF0ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDUx OgkvKiBBQ01ENTE6IFNFTkRfU0NSICovCisgICAgICAgIHJldCA9IHNkLT5zY3Jbc2QtPmRhdGFf b2Zmc2V0ICsrXTsKKworICAgICAgICBpZiAoc2QtPmRhdGFfb2Zmc2V0ID49IHNpemVvZihzZC0+ c2NyKSkKKyAgICAgICAgICAgIHNkLT5zdGF0ZSA9IHNkX3RyYW5zZmVyX3N0YXRlOworICAgICAg ICBicmVhazsKKworICAgIGNhc2UgNTY6CS8qIENNRDU2OiAgR0VOX0NNRCAqLworICAgICAgICBp ZiAoc2QtPmRhdGFfb2Zmc2V0ID09IDApCisgICAgICAgICAgICBBUFBfUkVBRF9CTE9DSyhzZC0+ ZGF0YV9zdGFydCwgc2QtPmJsa19sZW4pOworICAgICAgICByZXQgPSBzZC0+ZGF0YVtzZC0+ZGF0 YV9vZmZzZXQgKytdOworCisgICAgICAgIGlmIChzZC0+ZGF0YV9vZmZzZXQgPj0gc2QtPmJsa19s ZW4pCisgICAgICAgICAgICBzZC0+c3RhdGUgPSBzZF90cmFuc2Zlcl9zdGF0ZTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoInNkX3JlYWRfZGF0bGluZTog dW5rbm93biBjb21tYW5kXG4iKTsKKyAgICAgICAgcmV0dXJuIDB4MDA7CisgICAgfQorCisgICAg cmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2h3L3NkLmggYi9ody9zZC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGRmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9ody9z ZC5oCkBAIC0wLDAgKzEsMTI5IEBACisvKiAKKyAqIFNEIE1lbW9yeSBDYXJkIGVtdWxhdGlvbi4g IE1vc3RseSBjb3JyZWN0IGZvciBNTUMgdG9vLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBB bmRyemVqIFphYm9yb3dza2kgIDxiYWxyb2dAemFib3Iub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFS IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5k ZWYgX19od19zZF9oCisjZGVmaW5lIF9faHdfc2RfaAkJMQorCisjaW5jbHVkZSA8dmwuaD4KKwor I2RlZmluZSBPVVRfT0ZfUkFOR0UJCSgxIDw8IDMxKQorI2RlZmluZSBBRERSRVNTX0VSUk9SCQko MSA8PCAzMCkKKyNkZWZpbmUgQkxPQ0tfTEVOX0VSUk9SCQkoMSA8PCAyOSkKKyNkZWZpbmUgRVJB U0VfU0VRX0VSUk9SCQkoMSA8PCAyOCkKKyNkZWZpbmUgRVJBU0VfUEFSQU0JCSgxIDw8IDI3KQor I2RlZmluZSBXUF9WSU9MQVRJT04JCSgxIDw8IDI2KQorI2RlZmluZSBDQVJEX0lTX0xPQ0tFRAkJ KDEgPDwgMjUpCisjZGVmaW5lIExPQ0tfVU5MT0NLX0ZBSUxFRAkoMSA8PCAyNCkKKyNkZWZpbmUg Q09NX0NSQ19FUlJPUgkJKDEgPDwgMjMpCisjZGVmaW5lIElMTEVHQUxfQ09NTUFORAkJKDEgPDwg MjIpCisjZGVmaW5lIENBUkRfRUNDX0ZBSUxFRAkJKDEgPDwgMjEpCisjZGVmaW5lIENDX0VSUk9S CQkoMSA8PCAyMCkKKyNkZWZpbmUgU0RfRVJST1IJCSgxIDw8IDE5KQorI2RlZmluZSBDSURfQ1NE X09WRVJXUklURQkoMSA8PCAxNikKKyNkZWZpbmUgV1BfRVJBU0VfU0tJUAkJKDEgPDwgMTUpCisj ZGVmaW5lIENBUkRfRUNDX0RJU0FCTEVECSgxIDw8IDE0KQorI2RlZmluZSBFUkFTRV9SRVNFVAkJ KDEgPDwgMTMpCisjZGVmaW5lIENVUlJFTlRfU1RBVEUJCSg3IDw8IDkpCisjZGVmaW5lIFJFQURZ X0ZPUl9EQVRBCQkoMSA8PCA4KQorI2RlZmluZSBBUFBfQ01ECQkJKDEgPDwgNSkKKyNkZWZpbmUg QUtFX1NFUV9FUlJPUgkJKDEgPDwgMykKKwordHlwZWRlZiBlbnVtIHsKKyAgICBzZF9ub25lID0g LTEsCisgICAgc2RfYmMgPSAwLAkvKiBicm9hZGNhc3QgLS0gbm8gcmVzcG9uc2UgKi8KKyAgICBz ZF9iY3IsCQkvKiBicm9hZGNhc3Qgd2l0aCByZXNwb25zZSAqLworICAgIHNkX2FjLAkJLyogYWRk cmVzc2VkIC0tIG5vIGRhdGEgdHJhbnNmZXIgKi8KKyAgICBzZF9hZHRjLAkvKiBhZGRyZXNzZWQg d2l0aCBkYXRhIHRyYW5zZmVyICovCit9IHNkX2NtZF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7 CisgICAgc2Rfbm9yZSA9IDAsCS8qIG5vIHJlc3BvbnNlICovCisgICAgc2RfcjEsCQkvKiBub3Jt YWwgcmVzcG9uc2UgY29tbWFuZCAqLworICAgIHNkX3IyLAkJLyogQ0lELCBDU0QgcmVnaXN0ZXJz ICovCisgICAgc2RfcjMsCQkvKiBPQ1IgcmVnaXN0ZXIgKi8KKyAgICBzZF9yNiA9IDYsCS8qIFB1 Ymxpc2hlZCBSQ0EgcmVzcG9uc2UgKi8KKyAgICBzZF9yMWIgPSAtMSwKK30gc2RfcnNwX3R5cGVf dDsKKworc3RydWN0IHNkX3JlcXVlc3RfcyB7CisgICAgdWludDhfdCBjbWQ7CisgICAgdWludDMy X3QgYXJnOworICAgIHVpbnQ4X3QgY3JjOworfTsKKworc3RydWN0IHNkX3Jlc3BvbnNlX25vbmVf cyB7Cit9OworCitzdHJ1Y3Qgc2RfcmVzcG9uc2VfcjFfcyB7CisgICAgdWludDhfdCBjbWQ7Cisg ICAgdWludDMyX3Qgc3RhdHVzOworICAgIHVpbnQ4X3QgY3JjOworfTsKKworc3RydWN0IHNkX3Jl c3BvbnNlX3IxYl9zIHsKKyAgICB1aW50OF90IGNtZDsKKyAgICB1aW50MzJfdCBzdGF0dXM7Cisg ICAgdWludDhfdCBjcmM7Cit9OworCitzdHJ1Y3Qgc2RfcmVzcG9uc2VfcjJfcyB7CisgICAgdWlu dDE2X3QgcmVnWzhdOworfTsKKworc3RydWN0IHNkX3Jlc3BvbnNlX3IzX3MgeworICAgIHVpbnQz Ml90IG9jcl9yZWc7Cit9OworCitzdHJ1Y3Qgc2RfcmVzcG9uc2VfcjZfcyB7CisgICAgdWludDhf dCBjbWQ7CisgICAgdWludDE2X3QgYXJnOworICAgIHVpbnQxNl90IHN0YXR1czsKKyAgICB1aW50 OF90IGNyYzsKK307CisKK3VuaW9uIHNkX3Jlc3BvbnNlX3UgeworICAgIHN0cnVjdCBzZF9yZXNw b25zZV9ub25lX3Mgbm9uZTsKKyAgICBzdHJ1Y3Qgc2RfcmVzcG9uc2VfcjFfcyByMTsKKyAgICBz dHJ1Y3Qgc2RfcmVzcG9uc2VfcjFiX3MgcjFiOworICAgIHN0cnVjdCBzZF9yZXNwb25zZV9yMl9z IHIyOworICAgIHN0cnVjdCBzZF9yZXNwb25zZV9yM19zIHIzOworICAgIHN0cnVjdCBzZF9yZXNw b25zZV9yNl9zIHI2OworfTsKKworc3RydWN0IHNkX3N0YXRlX3M7CisKK3N0cnVjdCBzZF9zdGF0 ZV9zICpzZF9pbml0KHZvaWQpOwordW5pb24gc2RfcmVzcG9uc2VfdSBzZF93cml0ZV9jbWRsaW5l KHN0cnVjdCBzZF9zdGF0ZV9zICpzZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2RfcmVxdWVz dF9zIHJlcSwgaW50ICpyc3BsZW4pOwordm9pZCBzZF93cml0ZV9kYXRsaW5lKHN0cnVjdCBzZF9z dGF0ZV9zICpzZCwgdWludDhfdCB2YWx1ZSk7Cit1aW50OF90IHNkX3JlYWRfZGF0bGluZShzdHJ1 Y3Qgc2Rfc3RhdGVfcyAqc2QpOwordm9pZCBzZF9zZXRfY2Ioc3RydWN0IHNkX3N0YXRlX3MgKnNk LCB2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAgdm9pZCAoKnJlYWRvbmx5X2NiKSh2b2lk ICosIGludCksCisgICAgICAgICAgICAgICAgdm9pZCAoKmluc2VydGVkX2NiKSh2b2lkICosIGlu dCkpOworCisjZW5kaWYJLyogX19od19zZF9oICovCmRpZmYgLS1naXQgYS92bC5jIGIvdmwuYwpp bmRleCBkNGUxMmJhLi5lNWI1M2QyIDEwMDY0NAotLS0gYS92bC5jCisrKyBiL3ZsLmMKQEAgLTE4 NCw2ICsxODQsOCBAQCBjb25zdCBjaGFyICp2bmNfZGlzcGxheTsKIGludCBhY3BpX2VuYWJsZWQg PSAxOwogaW50IGZkX2Jvb3RjaGsgPSAxOwogaW50IG5vX3JlYm9vdCA9IDA7CitpbnQgc25hcHNo b3QgPSAwOworY29uc3QgY2hhciAqc2RfZmlsZW5hbWUgPSAwOwogaW50IGRhZW1vbml6ZSA9IDA7 CiBjb25zdCBjaGFyICpvcHRpb25fcm9tW01BWF9PUFRJT05fUk9NU107CiBpbnQgbmJfb3B0aW9u X3JvbXM7CkBAIC02NDA1LDYgKzY0MDcsNyBAQCB2b2lkIGhlbHAodm9pZCkKICAgICAgICAgICAg Ii1oZGEvLWhkYiBmaWxlICB1c2UgJ2ZpbGUnIGFzIElERSBoYXJkIGRpc2sgMC8xIGltYWdlXG4i CiAgICAgICAgICAgICItaGRjLy1oZGQgZmlsZSAgdXNlICdmaWxlJyBhcyBJREUgaGFyZCBkaXNr IDIvMyBpbWFnZVxuIgogICAgICAgICAgICAiLWNkcm9tIGZpbGUgICAgIHVzZSAnZmlsZScgYXMg SURFIGNkcm9tIGltYWdlIChjZHJvbSBpcyBpZGUxIG1hc3RlcilcbiIKKyAgICAgICAgICAgIi1z ZCBmaWxlICAgICAgICB1c2UgJ2ZpbGUnIGFzIFNlY3VyZURpZ2l0YWwgY2FyZCBpbWFnZVxuIgog ICAgICAgICAgICAiLWJvb3QgW2F8Y3xkfG5dIGJvb3Qgb24gZmxvcHB5IChhKSwgaGFyZCBkaXNr IChjKSwgQ0QtUk9NIChkKSwgb3IgbmV0d29yayAobilcbiIKICAgICAgICAgICAgIi1zbmFwc2hv dCAgICAgICB3cml0ZSB0byB0ZW1wb3JhcnkgZmlsZXMgaW5zdGVhZCBvZiBkaXNrIGltYWdlIGZp bGVzXG4iCiAjaWZkZWYgQ09ORklHX1NETApAQCAtNjU0MSw2ICs2NTQ0LDcgQEAgZW51bSB7CiAg ICAgUUVNVV9PUFRJT05faGRjLAogICAgIFFFTVVfT1BUSU9OX2hkZCwKICAgICBRRU1VX09QVElP Tl9jZHJvbSwKKyAgICBRRU1VX09QVElPTl9zZCwKICAgICBRRU1VX09QVElPTl9ib290LAogICAg IFFFTVVfT1BUSU9OX3NuYXBzaG90LAogI2lmZGVmIFRBUkdFVF9JMzg2CkBAIC02NjE3LDYgKzY2 MjEsNyBAQCBjb25zdCBRRU1VT3B0aW9uIHFlbXVfb3B0aW9uc1tdID0gewogICAgIHsgImhkYyIs IEhBU19BUkcsIFFFTVVfT1BUSU9OX2hkYyB9LAogICAgIHsgImhkZCIsIEhBU19BUkcsIFFFTVVf T1BUSU9OX2hkZCB9LAogICAgIHsgImNkcm9tIiwgSEFTX0FSRywgUUVNVV9PUFRJT05fY2Ryb20g fSwKKyAgICB7ICJzZCIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX3NkIH0sCiAgICAgeyAiYm9vdCIs IEhBU19BUkcsIFFFTVVfT1BUSU9OX2Jvb3QgfSwKICAgICB7ICJzbmFwc2hvdCIsIDAsIFFFTVVf T1BUSU9OX3NuYXBzaG90IH0sCiAjaWZkZWYgVEFSR0VUX0kzODYKQEAgLTY4OTYsNyArNjkwMSw3 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICBjb25zdCBjaGFyICpnZGJz dHViX3BvcnQ7CiAjZW5kaWYKICAgICBpbnQgaSwgY2Ryb21faW5kZXg7Ci0gICAgaW50IHNuYXBz aG90LCBsaW51eF9ib290OworICAgIGludCBsaW51eF9ib290OwogICAgIGNvbnN0IGNoYXIgKmlu aXRyZF9maWxlbmFtZTsKICAgICBjb25zdCBjaGFyICpoZF9maWxlbmFtZVtNQVhfRElTS1NdLCAq ZmRfZmlsZW5hbWVbTUFYX0ZEXTsKICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsICpr ZXJuZWxfY21kbGluZTsKQEAgLTcwNzIsNiArNzA3Nyw5IEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKICAgICAgICAgICAgICAgICAgICAgICAgIGNkcm9tX2luZGV4ID0gLTE7CiAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz ZSBRRU1VX09QVElPTl9zZDoKKyAgICAgICAgICAgICAgICBzZF9maWxlbmFtZSA9IG9wdGFyZzsK KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fc25h cHNob3Q6CiAgICAgICAgICAgICAgICAgc25hcHNob3QgPSAxOwogICAgICAgICAgICAgICAgIGJy ZWFrOwpAQCAtNzU0OCw3ICs3NTU2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogICAgICAgICAgICAgICAgIGZkX3RhYmxlW2ldID0gYmRydl9uZXcoYnVmKTsKICAgICAgICAg ICAgICAgICBiZHJ2X3NldF90eXBlX2hpbnQoZmRfdGFibGVbaV0sIEJEUlZfVFlQRV9GTE9QUFkp OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZkX2ZpbGVuYW1lW2ldICE9ICdcMCcp IHsKKyAgICAgICAgICAgIGlmIChmZF9maWxlbmFtZVtpXVswXSAhPSAnXDAnKSB7CiAgICAgICAg ICAgICAgICAgaWYgKGJkcnZfb3BlbihmZF90YWJsZVtpXSwgZmRfZmlsZW5hbWVbaV0sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdCA/IEJEUlZfT19TTkFQU0hPVCA6IDAp IDwgMCkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxk IG5vdCBvcGVuIGZsb3BweSBkaXNrIGltYWdlICclcydcbiIsCmRpZmYgLS1naXQgYS92bC5oIGIv dmwuaAppbmRleCA1NjNmNDM3Li5jZmFmYzA4IDEwMDY0NAotLS0gYS92bC5oCisrKyBiL3ZsLmgK QEAgLTE1Niw2ICsxNTYsOCBAQCBleHRlcm4gaW50IGtxZW11X2FsbG93ZWQ7CiBleHRlcm4gaW50 IHdpbjJrX2luc3RhbGxfaGFjazsKIGV4dGVybiBpbnQgdXNiX2VuYWJsZWQ7CiBleHRlcm4gaW50 IHNtcF9jcHVzOworZXh0ZXJuIGludCBzbmFwc2hvdDsKK2V4dGVybiBjb25zdCBjaGFyICpzZF9m aWxlbmFtZTsKIGV4dGVybiBpbnQgbm9fcXVpdDsKIGV4dGVybiBpbnQgc2VtaWhvc3RpbmdfZW5h YmxlZDsKIGV4dGVybiBpbnQgYXV0b3N0YXJ0OwotLSAKMS40LjQuMwoK ------=_Part_99022_19134350.1174078749349--