From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0070.outbound.protection.outlook.com [104.47.32.70]) by dpdk.org (Postfix) with ESMTP id B95A2100F for ; Wed, 30 Aug 2017 08:24:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=DKOdu+gYB1I0b7fc3hyuUK5obOsxGSeyytSV0ymF200=; b=do/ZxohGza7MQnXuKAE4Bq0f6gpB9zuA0PgVnjQC6oXdQxAwjgs/uKwQxLvuaK9Cv1MCJwVVZ6M+wAPR9XdwFI42fzeSt6NV8g18Gv7+juOUAVkZGhCeMG+xKnhsZ1+rgGOUWEqJKsH/EHLvgG4G8l/4AaA7i19Ht4zGpSHkAog= Received: from DM5PR12MB1129.namprd12.prod.outlook.com (10.168.236.136) by DM5PR12MB1148.namprd12.prod.outlook.com (10.168.236.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1385.9; Wed, 30 Aug 2017 06:24:30 +0000 Received: from DM5PR12MB1129.namprd12.prod.outlook.com ([10.168.236.136]) by DM5PR12MB1129.namprd12.prod.outlook.com ([10.168.236.136]) with mapi id 15.01.1362.019; Wed, 30 Aug 2017 06:24:30 +0000 From: "Kumar, Ravi1" To: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH] crypto/ccp: Add support for AMD CCP Crypto poll mode driver Thread-Index: AQHTHblO27DuKcHC/0+d4jgCl5e8uqKcdYFA Date: Wed, 30 Aug 2017 06:24:30 +0000 Message-ID: References: <1503675933-13789-1-git-send-email-ravi1.kumar@amd.com> In-Reply-To: <1503675933-13789-1-git-send-email-ravi1.kumar@amd.com> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Ravi1.Kumar@amd.com; x-originating-ip: [202.56.249.162] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DM5PR12MB1148; 20:1GXfjNGs7c4K1oQvZZKKwBCULHxkRvrAcsa/Gq2KXynRf9HILYeepHh7k9cW1CubGqZAKi4n3LLPChrEaSH32tttXTohd6yUqWdDrHDYi2iOMyp/94BWNe8Ua215iSqvgH1kGHVcxFDpNpu4u6rw83tH/PdBpElM11MGKHB9vnuZN8deyFAIwVKd/6H7A2eNFL4cykgwSVKGRS2cX2xCemJi2DAV/FQc/+gh65wHCxHwyauMwnWF7PFeh5LNyQnS x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 6b8d9e93-11eb-491e-8119-08d4ef6fc5f3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM5PR12MB1148; x-ms-traffictypediagnostic: DM5PR12MB1148: x-exchange-antispam-report-test: UriScan:(767451399110)(228905959029699); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6055026)(6041248)(20161123555025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR12MB1148; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR12MB1148; x-forefront-prvs: 041517DFAB x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(39860400002)(189002)(377454003)(51234002)(13464003)(199003)(110136004)(72206003)(86362001)(54356999)(6116002)(106356001)(102836003)(3846002)(3280700002)(50986999)(76176999)(105586002)(53946003)(3660700001)(305945005)(7736002)(575784001)(74316002)(2906002)(2501003)(5660300001)(16200700003)(2351001)(7696004)(8936002)(81156014)(1730700003)(68736007)(81166006)(14454004)(53546010)(101416001)(97736004)(189998001)(478600001)(5640700003)(25786009)(6436002)(2950100002)(66066001)(6916009)(2900100001)(6246003)(229853002)(53936002)(77096006)(9686003)(55016002)(33656002)(6506006)(99286003)(217873001)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1148; H:DM5PR12MB1129.namprd12.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Aug 2017 06:24:30.5060 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1148 Subject: Re: [dpdk-dev] [PATCH] crypto/ccp: Add support for AMD CCP Crypto poll mode driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Aug 2017 06:24:35 -0000 SGksDQoNClBsZWFzZSBkbyBub3QgY29uc2lkZXIgdGhpcyBwYXRjaCBhcyB0aGUgbGljZW5zZSBo YXMgdG8gYmUgdXBkYXRlZC4gV2UgYXJlIHdvcmtpbmcgd2l0aCBvdXIgbGVnYWwgdGVhbSB0byBn ZXQgdGhhdCBkb25lLiANCg0KUmVnYXJkcywNClJhdmkNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCkZyb206IGRldiBbbWFpbHRvOmRldi1ib3VuY2VzQGRwZGsub3JnXSBPbiBCZWhhbGYg T2YgUmF2aSBLdW1hcg0KU2VudDogRnJpZGF5LCBBdWd1c3QgMjUsIDIwMTcgOToxNiBQTQ0KVG86 IGRldkBkcGRrLm9yZw0KU3ViamVjdDogW2RwZGstZGV2XSBbUEFUQ0hdIGNyeXB0by9jY3A6IEFk ZCBzdXBwb3J0IGZvciBBTUQgQ0NQIENyeXB0byBwb2xsIG1vZGUgZHJpdmVyDQoNClRoZSBDQ1Ag cG9sbCBtb2RlIGRyaXZlciBsaWJyYXJ5IChsaWJydGVfcG1kX2NjcCkgaW1wbGVtZW50cyBzdXBw b3J0IGZvciBBTUTigJlzIGNyeXB0b2dyYXBoaWMgY28tcHJvY2Vzc29yIChDQ1ApLiBUaGUgQ0NQ IFBNRCBpcyBhIHZpcnR1YWwgY3J5cHRvIHBvbGwgbW9kZSBkcml2ZXIgd2hpY2ggc2NoZWR1bGVz IGNyeXB0byBvcGVyYXRpb25zIHRvIG9uZSBvciBtb3JlIGF2YWlsYWJsZSBDQ1AgaGFyZHdhcmUg ZW5naW5lcyBvbiB0aGUgcGxhdGZvcm0uIFRoZSBDQ1AgUE1EIHByb3ZpZGVzIHBvbGwgbW9kZSBj cnlwdG8gZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgYWNjZWxlcmF0 b3IgZGV2aWNlczoNCi0JQU1EIENyeXB0b2dyYXBoaWMgQ28tcHJvY2Vzc29yICgweDE0NTYpDQot CUFNRCBDcnlwdG9ncmFwaGljIENvLXByb2Nlc3NvciAoMHgxNDY4KQ0KVGhlIHBhdGNoc2V0IGNv bnNpc3RzIG9mIGZvbGxvd2luZyBhbGdvcml0aG1zIHN1cHBvcnQ6DQotCUNpcGhlciBBbGdvcml0 aG0gc3VwcG9ydA0KbwlSVEVfQ1JZUFRPX0NJUEhFUl9BRVNfRUNCDQpvCVJURV9DUllQVE9fQ0lQ SEVSX0FFU19DQkMNCm8JUlRFX0NSWVBUT19DSVBIRVJfQUVTX0NUUg0KbwlSVEVfQ1JZUFRPX0NJ UEhFUl8zREVTX0NCQw0KLQlBdXRoZW50aWNhdGlvbiBBbGdvcml0aG0gc3VwcG9ydA0KbwlSVEVf Q1JZUFRPX0FVVEhfU0hBMQ0KbwlSVEVfQ1JZUFRPX0FVVEhfU0hBMV9ITUFDDQpvCVJURV9DUllQ VE9fQVVUSF9TSEEyMjQNCm8JUlRFX0NSWVBUT19BVVRIX1NIQTIyNF9ITUFDDQpvCVJURV9DUllQ VE9fQVVUSF9TSEEyNTYNCm8JUlRFX0NSWVBUT19BVVRIX1NIQTI1Nl9ITUFDDQpvCVJURV9DUllQ VE9fQVVUSF9TSEEzODQNCm8JUlRFX0NSWVBUT19BVVRIX1NIQTM4NF9ITUFDDQpvCVJURV9DUllQ VE9fQVVUSF9TSEE1MTINCm8JUlRFX0NSWVBUT19BVVRIX1NIQTUxMl9ITUFDDQpvCVJURV9DUllQ VE9fQVVUSF9NRDVfSE1BQw0KbwlSVEVfQ1JZUFRPX0FVVEhfQUVTX0NNQUMNCkFkZGl0aW9uIHRv IGNyeXB0byBMaWJyYXJ5IHRvIHN1cHBvcnQgU0hBMyBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0N Cm8JUlRFX0NSWVBUT19BVVRIX1NIQTNfMjI0DQpvCVJURV9DUllQVE9fQVVUSF9TSEEzXzIyNF9I TUFDDQpvCVJURV9DUllQVE9fQVVUSF9TSEEzXzI1Ng0KbwlSVEVfQ1JZUFRPX0FVVEhfU0hBM18y NTZfSE1BQw0KbwlSVEVfQ1JZUFRPX0FVVEhfU0hBM18zODQNCm8JUlRFX0NSWVBUT19BVVRIX1NI QTNfMzg0X0hNQUMNCm8JUlRFX0NSWVBUT19BVVRIX1NIQTNfNTEyDQpvCVJURV9DUllQVE9fQVVU SF9TSEEzXzUxMl9ITUFDDQotCUFFQUQgQWxnb3JpdGhtIFN1cHBvcnQNCm8JUlRFX0NSWVBUT19B RUFEX0FFU19HQ00NCg0KVGhlIENDUCBQTUQgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4gRm9s bG93aW5nIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCBpbiBEUERLIGNvbmZpZ3VyYXRpb24gdG8gZW5h YmxlIENDUCBQTUQuDQpDT05GSUdfUlRFX0xJQlJURV9QTURfQ0NQIChkZWZhdWx0IG4pDQoNClNp Z25lZC1vZmYtYnk6IFJhdmkgS3VtYXIgPHJhdmkxLmt1bWFyQGFtZC5jb20+DQotLS0NCiBNQUlO VEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsNCiBjb25maWcv Y29tbW9uX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsNCiBkb2MvZ3VpZGVz L2NyeXB0b2RldnMvY2NwLnJzdCAgICAgICAgICAgICAgfCAgMTI2ICsrDQogZG9jL2d1aWRlcy9j cnlwdG9kZXZzL2ZlYXR1cmVzL2NjcC5pbmkgICAgIHwgICA1NyArDQogZG9jL2d1aWRlcy9jcnlw dG9kZXZzL2ZlYXR1cmVzL2RlZmF1bHQuaW5pIHwgICAxMiArDQogZG9jL2d1aWRlcy9jcnlwdG9k ZXZzL2luZGV4LnJzdCAgICAgICAgICAgIHwgICAgMSArDQogZHJpdmVycy9jcnlwdG8vTWFrZWZp bGUgICAgICAgICAgICAgICAgICAgIHwgICAgMiArDQogZHJpdmVycy9jcnlwdG8vY2NwL01ha2Vm aWxlICAgICAgICAgICAgICAgIHwgICA3MSArDQogZHJpdmVycy9jcnlwdG8vY2NwL2NjcF9jcnlw dG8uYyAgICAgICAgICAgIHwgMzAwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogZHJp dmVycy9jcnlwdG8vY2NwL2NjcF9jcnlwdG8uaCAgICAgICAgICAgIHwgIDQxMSArKysrDQogZHJp dmVycy9jcnlwdG8vY2NwL2NjcF9kZXYuYyAgICAgICAgICAgICAgIHwgIDg0NyArKysrKysrKw0K IGRyaXZlcnMvY3J5cHRvL2NjcC9jY3BfZGV2LmggICAgICAgICAgICAgICB8ICA1MzMgKysrKysN CiBkcml2ZXJzL2NyeXB0by9jY3AvY2NwX3BjaS5jICAgICAgICAgICAgICAgfCAgMzMxICsrKw0K IGRyaXZlcnMvY3J5cHRvL2NjcC9jY3BfcGNpLmggICAgICAgICAgICAgICB8ICAgNTggKw0KIGRy aXZlcnMvY3J5cHRvL2NjcC9jY3BfcG1kX29wcy5jICAgICAgICAgICB8ICA4NjAgKysrKysrKysN CiBkcml2ZXJzL2NyeXB0by9jY3AvY2NwX3BtZF9wcml2YXRlLmggICAgICAgfCAgMTM1ICsrDQog ZHJpdmVycy9jcnlwdG8vY2NwL3J0ZV9jY3BfcG1kLmMgICAgICAgICAgIHwgIDI4MyArKysNCiBk cml2ZXJzL2NyeXB0by9jY3AvcnRlX3BtZF9jY3BfdmVyc2lvbi5tYXAgfCAgICAzICsNCiBsaWIv bGlicnRlX2NyeXB0b2Rldi9ydGVfY3J5cHRvX3N5bS5oICAgICAgfCAgIDE4ICsNCiBtay9ydGUu YXBwLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsNCiAyMCBmaWxlcyBj aGFuZ2VkLCA2NzY4IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL2d1aWRl cy9jcnlwdG9kZXZzL2NjcC5yc3QNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL2d1aWRlcy9jcnlw dG9kZXZzL2ZlYXR1cmVzL2NjcC5pbmkNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jcnlw dG8vY2NwL01ha2VmaWxlDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY3J5cHRvL2NjcC9j Y3BfY3J5cHRvLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jcnlwdG8vY2NwL2NjcF9j cnlwdG8uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2NyeXB0by9jY3AvY2NwX2Rldi5j DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY3J5cHRvL2NjcC9jY3BfZGV2LmgNCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jcnlwdG8vY2NwL2NjcF9wY2kuYw0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2NyeXB0by9jY3AvY2NwX3BjaS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvY3J5cHRvL2NjcC9jY3BfcG1kX29wcy5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvY3J5cHRvL2NjcC9jY3BfcG1kX3ByaXZhdGUuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2NyeXB0by9jY3AvcnRlX2NjcF9wbWQuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2NyeXB0by9jY3AvcnRlX3BtZF9jY3BfdmVyc2lvbi5tYXANCg0KZGlmZiAtLWdpdCBhL01B SU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCmluZGV4IGEwY2Q3NWUuLmNjZTZiY2UgMTAwNjQ0DQot LS0gYS9NQUlOVEFJTkVSUw0KKysrIGIvTUFJTlRBSU5FUlMNCkBAIC01ODYsNiArNTg2LDExIEBA IE06IEZhbiBaaGFuZyA8cm95LmZhbi56aGFuZ0BpbnRlbC5jb20+DQogRjogZHJpdmVycy9jcnlw dG8vc2NoZWR1bGVyLw0KIEY6IGRvYy9ndWlkZXMvY3J5cHRvZGV2cy9zY2hlZHVsZXIucnN0DQog DQorQU1EIENDUCBDcnlwdG8gUE1EIA0KK006IFJhdmkgS3VtYXIgPFJhdmkxLkt1bWFyQGFtZC5j b20+DQorRjogZHJpdmVycy9jcnlwdG8vY2NwLw0KK0Y6IGRvYy9ndWlkZXMvY3J5cHRvZGV2cy9j Y3AucnN0DQorRjogZG9jL2d1aWRlcy9jcnlwdG9kZXZzL2ZlYXR1cmVzL2NjcC5pbmkNCiANCiBF dmVudGRldiBEcml2ZXJzDQogLS0tLS0tLS0tLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL2NvbmZpZy9j b21tb25fYmFzZSBiL2NvbmZpZy9jb21tb25fYmFzZQ0KaW5kZXggNWU5N2EwOC4uMzM1M2UxOSAx MDA2NDQNCi0tLSBhL2NvbmZpZy9jb21tb25fYmFzZQ0KKysrIGIvY29uZmlnL2NvbW1vbl9iYXNl DQpAQCAtNTE0LDYgKzUxNCwxMiBAQCBDT05GSUdfUlRFX0xJQlJURV9QTURfQ1JZUFRPX1NDSEVE VUxFUl9ERUJVRz1uDQogQ09ORklHX1JURV9MSUJSVEVfUE1EX05VTExfQ1JZUFRPPXkNCiANCiAj DQorIyBDb21waWxlIFBNRCBmb3IgQU1EIENDUCBjcnlwdG8gZGV2aWNlDQorIw0KK0NPTkZJR19S VEVfTElCUlRFX1BNRF9DQ1A9bg0KK0NPTkZJR19SVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEg9 bg0KKw0KKyMNCiAjIENvbXBpbGUgZ2VuZXJpYyBldmVudCBkZXZpY2UgbGlicmFyeQ0KICMNCiBD T05GSUdfUlRFX0xJQlJURV9FVkVOVERFVj15DQpkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9jcnlw dG9kZXZzL2NjcC5yc3QgYi9kb2MvZ3VpZGVzL2NyeXB0b2RldnMvY2NwLnJzdA0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjgzMzQzZmUNCi0tLSAvZGV2L251bGwNCisrKyBi L2RvYy9ndWlkZXMvY3J5cHRvZGV2cy9jY3AucnN0DQpAQCAtMCwwICsxLDEyNiBAQA0KKy4uICBC U0QgTElDRU5TRQ0KKyAgICBDb3B5cmlnaHQoYykgMjAxNyBBZHZhbmNlIE1pY3JvIERldmljZXMs IEluYy4NCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgICAgUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAg IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucw0KKyAgICBhcmUgbWV0Og0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisg ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodA0KKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4NCisgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAgICBkaXN0cmlidXRpb24uDQor ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBZHZhbmNlIE1pY3JvIERldmljZXMsIEluYyBub3Ig dGhlIG5hbWVzIG9mDQorICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAgICBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTDQorICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UDQorICAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KKyAgICBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0K KyAgICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwNCisgICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAgICBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgICAg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZDQorICAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgICAgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICAgIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuDQorDQorQU1EIENDUCBQb2xsIE1vZGUgRHJpdmVyDQorPT09PT09PT09PT09PT09 PT09PT09PT09DQorDQorVGhpcyBjb2RlIHByb3ZpZGVzIHRoZSBpbml0aWFsIGltcGxlbWVudGF0 aW9uIG9mIHRoZSBjY3AgcG9sbCBtb2RlIGRyaXZlci4NCitUaGUgQ0NQIHBvbGwgbW9kZSBkcml2 ZXIgbGlicmFyeSAobGlicnRlX3BtZF9jY3ApIGltcGxlbWVudHMgc3VwcG9ydCBmb3INCitBTUTi gJlzIGNyeXB0b2dyYXBoaWMgY28tcHJvY2Vzc29yIChDQ1ApLiBUaGUgQ0NQIFBNRCBpcyBhIHZp cnR1YWwgY3J5cHRvDQorcG9sbCBtb2RlIGRyaXZlciB3aGljaCBzY2hlZHVsZXMgY3J5cHRvIG9w ZXJhdGlvbnMgdG8gb25lIG9yIG1vcmUgYXZhaWxhYmxlDQorQ0NQIGhhcmR3YXJlIGVuZ2luZXMg b24gdGhlIHBsYXRmb3JtLiBUaGUgQ0NQIFBNRCBwcm92aWRlcyBwb2xsIG1vZGUgY3J5cHRvDQor ZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgYWNjZWxlcmF0b3IgZGV2 aWNlczo6DQorDQorCUFNRCBDcnlwdG9ncmFwaGljIENvLXByb2Nlc3NvciAoMHgxNDU2KQ0KKwlB TUQgQ3J5cHRvZ3JhcGhpYyBDby1wcm9jZXNzb3IgKDB4MTQ2OCkNCisNCitGZWF0dXJlcw0KKy0t LS0tLS0tDQorDQorQ0NQIFBNRCBoYXMgc3VwcG9ydCBmb3I6DQorDQorU3VwcG9ydGVkIGNpcGhl ciBhbGdvcml0aG1zOg0KKyogYGBSVEVfQ1JZUFRPX0NJUEhFUl9BRVNfQ0JDYGANCisqIGBgUlRF X0NSWVBUT19DSVBIRVJfQUVTX0VDQmBgDQorKiBgYFJURV9DUllQVE9fQ0lQSEVSX0FFU19DVFJg YA0KKyogYGBSVEVfQ1JZUFRPX0NJUEhFUl8zREVTX0NCQ2BgDQorDQorU3VwcG9ydGVkIGF1dGhl bnRpY2F0aW9uIGFsZ29yaXRobXM6DQorKiBgYFJURV9DUllQVE9fQVVUSF9TSEExYGANCisqIGBg UlRFX0NSWVBUT19BVVRIX1NIQTFfSE1BQ2BgDQorKiBgYFJURV9DUllQVE9fQVVUSF9TSEEyMjRg YA0KKyogYGBSVEVfQ1JZUFRPX0FVVEhfU0hBMjI0X0hNQUNgYA0KKyogYGBSVEVfQ1JZUFRPX0FV VEhfU0hBMjU2YGANCisqIGBgUlRFX0NSWVBUT19BVVRIX1NIQTI1Nl9ITUFDYGANCisqIGBgUlRF X0NSWVBUT19BVVRIX1NIQTM4NGBgDQorKiBgYFJURV9DUllQVE9fQVVUSF9TSEEzODRfSE1BQ2Bg DQorKiBgYFJURV9DUllQVE9fQVVUSF9TSEE1MTJgYA0KKyogYGBSVEVfQ1JZUFRPX0FVVEhfU0hB NTEyX0hNQUNgYA0KKyogYGBSVEVfQ1JZUFRPX0FVVEhfTUQ1X0hNQUNgYA0KKyogYGBSVEVfQ1JZ UFRPX0FVVEhfQUVTX0NNQUNgYA0KKyogYGBSVEVfQ1JZUFRPX0FVVEhfU0hBM18yMjRgYA0KKyog YGBSVEVfQ1JZUFRPX0FVVEhfU0hBM18yMjRfSE1BQ2BgDQorKiBgYFJURV9DUllQVE9fQVVUSF9T SEEzXzI1NmBgDQorKiBgYFJURV9DUllQVE9fQVVUSF9TSEEzXzI1Nl9ITUFDYGANCisqIGBgUlRF X0NSWVBUT19BVVRIX1NIQTNfMzg0YGANCisqIGBgUlRFX0NSWVBUT19BVVRIX1NIQTNfMzg0X0hN QUNgYA0KKyogYGBSVEVfQ1JZUFRPX0FVVEhfU0hBM181MTJgYA0KKyogYGBSVEVfQ1JZUFRPX0FV VEhfU0hBM181MTJfSE1BQ2BgDQorDQorU3VwcG9ydGVkIEFFQUQgYWxnb3JpdGhtczoNCisqIGBg UlRFX0NSWVBUT19BRUFEX0FFU19HQ01gYA0KKw0KK0luc3RhbGxhdGlvbg0KKy0tLS0tLS0tLS0t LQ0KKw0KK1RvIGNvbXBpbGUgQ0NQIFBNRCwgaXQgaGFzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIGNv bmZpZy9jb21tb25fYmFzZSBmaWxlLg0KKyogYGBDT05GSUdfUlRFX0xJQlJURV9QTURfQ0NQPXlg YA0KKw0KK1RoZSBDQ1AgUE1EIGFsc28gc3VwcG9ydHMgY29tcHV0aW5nIGF1dGhlbnRpY2F0aW9u IG92ZXIgQ1BVIHdpdGggY2lwaGVyIG9mZmxvYWRlZA0KK3RvIENDUC4gVG8gZW5hYmxlIHRoaXMg ZmVhdHVyZSwgZW5hYmxlIGZvbGxvd2luZyBpbiB0aGUgY29uZmlndXJhdGlvbi4NCisqIGBgQ09O RklHX1JURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSD15YGANCisNCitUaGlzIGNvZGUgd2FzIHZl cmlmaWVkIG9uIFVidW50dSAxNi4wNC4NCisNCitJbml0aWFsaXphdGlvbg0KKy0tLS0tLS0tLS0t LS0tDQorDQorQmluZCB0aGUgQ0NQIGRldmljZXMgdG8gRFBESyBVSU8gZHJpdmVyIG1vZHVsZSBi ZWZvcmUgcnVubmluZyB0aGUgQ0NQIFBNRCBzdGFjay4NCitlLmcuIGZvciB0aGUgMHgxNDU2IGRl dmljZTo6DQorDQorCWNkIHRvIHRoZSB0b3AtbGV2ZWwgRFBESyBkaXJlY3RvcnkNCisJbW9kcHJv YmUgdWlvDQorCWluc21vZCAuL2J1aWxkL2ttb2QvaWdiX3Vpby5rbw0KKwllY2hvICIxMDIyIDE0 NTYiID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvaWdiX3Vpby9uZXdfaWQNCisNCitBbm90aGVyIHdh eSB0byBiaW5kIHRoZSBDQ1AgZGV2aWNlcyB0byBEUERLIFVJTyBkcml2ZXIgaXMgYnkgdXNpbmcg dGhlIGBgZHBkay1kZXZiaW5kLnB5YGAgc2NyaXB0Lg0KK1RoZSBmb2xsb3dpbmcgY29tbWFuZCBh c3N1bWVzIGBgQkZEYGAgb2YgYGAwMDAwOjA5OjAwLjJgYDo6DQorDQorCWNkIHRvIHRoZSB0b3At bGV2ZWwgRFBESyBkaXJlY3RvcnkNCisJLi91c2VydG9vbHMvZHBkay1kZXZiaW5kLnB5IC1iIGln Yl91aW8gMDAwMDowOTowMC4yDQorDQorVG8gdmVyaWZ5IHJlYWwgdHJhZmZpYyBsMmZ3ZC1jcnlw dG8gZXhhbXBsZSBjYW4gYmUgdXNlZCB3aXRoIGZvbGxvd2luZyBjb21tYW5kOg0KKw0KKy4uIGNv ZGUtYmxvY2s6OiBjb25zb2xlDQorDQorCXN1ZG8gLi9idWlsZC9sMmZ3ZC1jcnlwdG8gLWwgMSAt biA0IC0tdmRldiAiY3J5cHRvX2NjcCIgLS0gLXAgMHgxDQorCS0tY2hhaW4gQ0lQSEVSX0hBU0gg LS1jaXBoZXJfb3AgRU5DUllQVCAtLWNpcGhlcl9hbGdvIEFFU19DQkMNCisJLS1jaXBoZXJfa2V5 IDAwOjAxOjAyOjAzOjA0OjA1OjA2OjA3OjA4OjA5OjBhOjBiOjBjOjBkOjBlOjBmDQorCS0taXYg MDA6MDE6MDI6MDM6MDQ6MDU6MDY6MDc6MDg6MDk6MGE6MGI6MGM6MGQ6MGU6ZmYNCisJLS1hdXRo X29wIEdFTkVSQVRFIC0tYXV0aF9hbGdvIFNIQTFfSE1BQw0KKwktLWF1dGhfa2V5IDExOjExOjEx OjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjExOjEx DQorCToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMToxMTox MToxMToxMToxMToxMToxMToxMToxMQ0KKwk6MTE6MTE6MTE6MTE6MTE6MTE6MTE6MTE6MTE6MTE6 MTE6MTE6MTE6MTE6MTE6MTE6MTENCisNCitMaW1pdGF0aW9ucw0KKy0tLS0tLS0tLS0tDQorDQor KiBDaGFpbmVkIG1idWZzIGFyZSBub3Qgc3VwcG9ydGVkDQorKiBNRDVfSE1BQyBpcyBzdXBwb3J0 ZWQgb25seSBpZiBgYENPTkZJR19SVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEg9eWBgIGlzIGVu YWJsZWQgaW4gY29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL2RvYy9ndWlkZXMvY3J5cHRvZGV2 cy9mZWF0dXJlcy9jY3AuaW5pIGIvZG9jL2d1aWRlcy9jcnlwdG9kZXZzL2ZlYXR1cmVzL2NjcC5p bmkNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi42MTg0YTY3DQotLS0gL2Rl di9udWxsDQorKysgYi9kb2MvZ3VpZGVzL2NyeXB0b2RldnMvZmVhdHVyZXMvY2NwLmluaQ0KQEAg LTAsMCArMSw1NyBAQA0KKzsNCis7IFN1cHBvcnRlZCBmZWF0dXJlcyBvZiB0aGUgJ2NjcCcgY3J5 cHRvIGRyaXZlci4NCis7DQorOyBSZWZlciB0byBkZWZhdWx0LmluaSBmb3IgdGhlIGZ1bGwgbGlz dCBvZiBhdmFpbGFibGUgUE1EIGZlYXR1cmVzLg0KKzsNCitbRmVhdHVyZXNdDQorU3ltbWV0cmlj IGNyeXB0byAgICAgICA9IFkNCitTeW0gb3BlcmF0aW9uIGNoYWluaW5nID0gWQ0KK0hXIEFjY2Vs ZXJhdGVkICAgICAgICAgPSBZDQorDQorOw0KKzsgU3VwcG9ydGVkIGNyeXB0byBhbGdvcml0aG1z IG9mIHRoZSAnY2NwJyBjcnlwdG8gZHJpdmVyLg0KKzsNCitbQ2lwaGVyXQ0KK0FFUyBDQkMgKDEy OCkgID0gWQ0KK0FFUyBDQkMgKDE5MikgID0gWQ0KK0FFUyBDQkMgKDI1NikgID0gWQ0KK0FFUyBF Q0IgKDEyOCkgID0gWQ0KK0FFUyBFQ0IgKDE5MikgID0gWQ0KK0FFUyBFQ0IgKDI1NikgID0gWQ0K K0FFUyBDVFIgKDEyOCkgID0gWQ0KK0FFUyBDVFIgKDE5MikgID0gWQ0KK0FFUyBDVFIgKDI1Nikg ID0gWQ0KKzNERVMgQ0JDICAgICAgID0gWQ0KKw0KKzsNCis7IFN1cHBvcnRlZCBhdXRoZW50aWNh dGlvbiBhbGdvcml0aG1zIG9mIHRoZSAnY2NwJyBjcnlwdG8gZHJpdmVyLg0KKzsNCitbQXV0aF0N CitNRDUgSE1BQyAgICAgICA9IFkNCitTSEExICAgICAgICAgICA9IFkNCitTSEExIEhNQUMgICAg ICA9IFkNCitTSEEyMjQJICAgICAgID0gWQ0KK1NIQTIyNCBITUFDICAgID0gWQ0KK1NIQTI1NiAg ICAgICAgID0gWQ0KK1NIQTI1NiBITUFDICAgID0gWQ0KK1NIQTM4NCAgICAgICAgID0gWQ0KK1NI QTM4NCBITUFDICAgID0gWQ0KK1NIQTUxMiAgICAgICAgID0gWQ0KK1NIQTUxMiBITUFDICAgID0g WQ0KK0FFUyBDTUFDICAgICAgID0gWQ0KK1NIQTNfMjI0ICAgICAgID0gWQ0KK1NIQTNfMjI0IEhN QUMgID0gWQ0KK1NIQTNfMjU2ICAgICAgID0gWQ0KK1NIQTNfMjU2IEhNQUMgID0gWQ0KK1NIQTNf Mzg0ICAgICAgID0gWQ0KK1NIQTNfMzg0IEhNQUMgID0gWQ0KK1NIQTNfNTEyICAgICAgID0gWQ0K K1NIQTNfNTEyIEhNQUMgID0gWQ0KKw0KKzsNCis7IFN1cHBvcnRlZCBBRUFEIGFsZ29yaXRobXMg b2YgdGhlICdjY3AnIGNyeXB0byBkcml2ZXIuDQorOw0KK1tBRUFEXQ0KK0FFUyBHQ00gKDEyOCkg PSBZDQorQUVTIEdDTSAoMTkyKSA9IFkNCitBRVMgR0NNICgyNTYpID0gWQ0KZGlmZiAtLWdpdCBh L2RvYy9ndWlkZXMvY3J5cHRvZGV2cy9mZWF0dXJlcy9kZWZhdWx0LmluaSBiL2RvYy9ndWlkZXMv Y3J5cHRvZGV2cy9mZWF0dXJlcy9kZWZhdWx0LmluaQ0KaW5kZXggMDkyNjg4Ny4uZDA5OTQzZiAx MDA2NDQNCi0tLSBhL2RvYy9ndWlkZXMvY3J5cHRvZGV2cy9mZWF0dXJlcy9kZWZhdWx0LmluaQ0K KysrIGIvZG9jL2d1aWRlcy9jcnlwdG9kZXZzL2ZlYXR1cmVzL2RlZmF1bHQuaW5pDQpAQCAtMjYs NiArMjYsOSBAQCBOVUxMICAgICAgICAgICA9DQogQUVTIENCQyAoMTI4KSAgPQ0KIEFFUyBDQkMg KDE5MikgID0NCiBBRVMgQ0JDICgyNTYpICA9DQorQUVTIEVDQiAoMTI4KSAgPQ0KK0FFUyBFQ0Ig KDE5MikgID0NCitBRVMgRUNCICgyNTYpICA9DQogQUVTIENUUiAoMTI4KSAgPQ0KIEFFUyBDVFIg KDE5MikgID0NCiBBRVMgQ1RSICgyNTYpICA9DQpAQCAtNjAsNiArNjMsMTUgQEAgQUVTIEdNQUMg ICAgID0NCiBTTk9XM0cgVUlBMiAgPQ0KIEtBU1VNSSBGOSAgICA9DQogWlVDIEVJQTMgICAgID0N CitBRVMgQ01BQyAgICAgPQ0KK1NIQTNfMjI0ICAgICA9IA0KK1NIQTNfMjI0IEhNQUM9DQorU0hB M18yNTYgICAgID0NCitTSEEzXzI1NiBITUFDPQ0KK1NIQTNfMzg0ICAgICA9DQorU0hBM18zODQg SE1BQz0NCitTSEEzXzUxMiAgICAgPQ0KK1NIQTNfNTEyIEhNQUM9DQogDQogOw0KIDsgU3VwcG9y dGVkIEFFQUQgYWxnb3JpdGhtcyBvZiBhIGRlZmF1bHQgY3J5cHRvIGRyaXZlci4NCmRpZmYgLS1n aXQgYS9kb2MvZ3VpZGVzL2NyeXB0b2RldnMvaW5kZXgucnN0IGIvZG9jL2d1aWRlcy9jcnlwdG9k ZXZzL2luZGV4LnJzdA0KaW5kZXggMzYxYjgyZC4uZjMxYzk3OCAxMDA2NDQNCi0tLSBhL2RvYy9n dWlkZXMvY3J5cHRvZGV2cy9pbmRleC5yc3QNCisrKyBiL2RvYy9ndWlkZXMvY3J5cHRvZGV2cy9p bmRleC5yc3QNCkBAIC0zOSw2ICszOSw3IEBAIENyeXB0byBEZXZpY2UgRHJpdmVycw0KICAgICBh ZXNuaV9tYg0KICAgICBhZXNuaV9nY20NCiAgICAgYXJtdjgNCisgICAgY2NwDQogICAgIGRwYWEy X3NlYw0KICAgICBrYXN1bWkNCiAgICAgb3BlbnNzbA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5 cHRvL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUNCmluZGV4IDdhNzE5YjkuLjM1 MDU2NDkgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQ0KKysrIGIvZHJpdmVy cy9jcnlwdG8vTWFrZWZpbGUNCkBAIC01NSw1ICs1NSw3IEBAIERJUlMtJChDT05GSUdfUlRFX0xJ QlJURV9QTURfTlVMTF9DUllQVE8pICs9IG51bGwNCiBERVBESVJTLW51bGwgPSAkKGNvcmUtbGli cykNCiBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUE1EX0RQQUEyX1NFQykgKz0gZHBhYTJfc2Vj DQogREVQRElSUy1kcGFhMl9zZWMgPSAkKGNvcmUtbGlicykNCitESVJTLSQoQ09ORklHX1JURV9M SUJSVEVfUE1EX0NDUCkgKz0gY2NwDQorREVQRElSUy1jY3AgPSAkKGNvcmUtbGlicykNCiANCiBp bmNsdWRlICQoUlRFX1NESykvbWsvcnRlLnN1YmRpci5taw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y3J5cHRvL2NjcC9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRvL2NjcC9NYWtlZmlsZQ0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjhiNmExNWENCi0tLSAvZGV2L251bGwNCisr KyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9NYWtlZmlsZQ0KQEAgLTAsMCArMSw3MSBAQA0KKyMgICBC U0QgTElDRU5TRQ0KKyMNCisjICAgQ29weXJpZ2h0KGMpIDIwMTcgQWR2YW5jZSBNaWNybyBEZXZp Y2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorIw0KKyMgICBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisjICAg bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zDQorIyAgIGFyZSBtZXQ6DQorIw0KKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisjICAgICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4NCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4NCisjICAgICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisjICAg ICAgIGRpc3RyaWJ1dGlvbi4NCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWR2YW5jZSBN aWNybyBEZXZpY2VzLCBJbmMgbm9yIHRoZSBuYW1lcw0KKyMgICAgICAgb2YgaXRzIGNvbnRyaWJ1 dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisjICAgICAg IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl bg0KKyMJcGVybWlzc2lvbi4NCisjDQorIyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisjICAgIkFTIElTIiBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisj ICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SDQorIyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorIyAgIE9XTkVSIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyMg ICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UDQorIyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyMgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisjICAgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVA0KKyMgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisjICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisNCitpbmNsdWRl ICQoUlRFX1NESykvbWsvcnRlLnZhcnMubWsNCisNCisNCisjIGxpYnJhcnkgbmFtZQ0KK0xJQiA9 IGxpYnJ0ZV9wbWRfY2NwLmENCisNCisjIGJ1aWxkIGZsYWdzDQorQ0ZMQUdTICs9IC1PMw0KK0NG TEFHUyArPSAtSSQoU1JDRElSKQ0KK0NGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykNCisNCisjIGxp YnJhcnkgdmVyc2lvbg0KK0xJQkFCSVZFUiA6PSAxDQorDQorIyBleHRlcm5hbCBsaWJyYXJ5IGlu Y2x1ZGUgcGF0aHMNCitMRExJQlMgKz0gLWxjcnlwdG8NCitMRExJQlMgKz0gLWxwdGhyZWFkDQor TERMSUJTICs9IC1sY3J5cHRvDQorDQorIyB2ZXJzaW9uaW5nIGV4cG9ydCBtYXANCitFWFBPUlRf TUFQIDo9IHJ0ZV9wbWRfY2NwX3ZlcnNpb24ubWFwDQorDQorIyBsaWJyYXJ5IHNvdXJjZSBmaWxl cw0KK1NSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9QTURfQ0NQKSArPSBydGVfY2NwX3BtZC5jDQor U1JDUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9DQ1ApICs9IGNjcF9jcnlwdG8uYw0KK1NSQ1Mt JChDT05GSUdfUlRFX0xJQlJURV9QTURfQ0NQKSArPSBjY3BfZGV2LmMNCitTUkNTLSQoQ09ORklH X1JURV9MSUJSVEVfUE1EX0NDUCkgKz0gY2NwX3BjaS5jDQorU1JDUy0kKENPTkZJR19SVEVfTElC UlRFX1BNRF9DQ1ApICs9IGNjcF9wbWRfb3BzLmMNCisNCisjIGV4cG9ydCBpbmNsdWRlIGZpbGVz DQorU1lNTElOSy15LWluY2x1ZGUgKz0NCisNCisjIGxpYnJhcnkgZGVwZW5kZW5jaWVzDQorREVQ RElSUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9DQ1ApICs9IGxpYi9saWJydGVfZWFsDQorREVQ RElSUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9DQ1ApICs9IGxpYi9saWJydGVfbWJ1Zg0KK0RF UERJUlMtJChDT05GSUdfUlRFX0xJQlJURV9QTURfQ0NQKSArPSBsaWIvbGlicnRlX21lbXBvb2wN CitERVBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUE1EX0NDUCkgKz0gbGliL2xpYnJ0ZV9yaW5n DQorREVQRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9DQ1ApICs9IGxpYi9saWJydGVfY3J5 cHRvZGV2DQorDQoraW5jbHVkZSAkKFJURV9TREspL21rL3J0ZS5saWIubWsNCmRpZmYgLS1naXQg YS9kcml2ZXJzL2NyeXB0by9jY3AvY2NwX2NyeXB0by5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL2Nj cF9jcnlwdG8uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjYzZGExY2QN Ci0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfY3J5cHRvLmMNCkBA IC0wLDAgKzEsMzAwOCBAQA0KKy8qLQ0KKyAqICAgQlNEIExJQ0VOU0UNCisgKg0KKyAqICAgQ29w eXJpZ2h0KGMpIDIwMTcgQWR2YW5jZSBNaWNybyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuDQorICoNCisgKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogICBhcmUg bWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQNCisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4NCisgKiAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogICAgICAgZGlzdHJpYnV0 aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWR2YW5jZSBNaWNybyBEZXZpY2Vz LCBJbmMgbm9yIHRoZSBuYW1lcw0KKyAqICAgICAgIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJl IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICAgICAgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQorICogICAg ICAgcGVybWlzc2lvbi4NCisgKg0KKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICAgIkFTIElTIiBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisg KiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUg0KKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiAgIE9XTkVSIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0K KyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVA0KKyAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogICBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisg KiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQNCisgKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqICAgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisg Ki8NCisNCisjaW5jbHVkZSA8ZGlyZW50Lmg+DQorI2luY2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1 ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzeXMvbW1hbi5o Pg0KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorI2lu Y2x1ZGUgPHVuaXN0ZC5oPg0KKw0KKyNpbmNsdWRlIDxydGVfaGV4ZHVtcC5oPg0KKyNpbmNsdWRl IDxydGVfbWVtem9uZS5oPg0KKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQorI2luY2x1ZGUgPHJ0 ZV9tZW1vcnkuaD4NCisjaW5jbHVkZSA8cnRlX3NwaW5sb2NrLmg+DQorI2luY2x1ZGUgPHJ0ZV9z dHJpbmdfZm5zLmg+DQorI2luY2x1ZGUgPHJ0ZV9jcnlwdG9kZXZfcG1kLmg+DQorDQorI2luY2x1 ZGUgPGNjcF9kZXYuaD4NCisjaW5jbHVkZSA8Y2NwX2NyeXB0by5oPg0KKyNpbmNsdWRlIDxjY3Bf cGNpLmg+DQorI2luY2x1ZGUgPGNjcF9wbWRfcHJpdmF0ZS5oPg0KKw0KKyNpbmNsdWRlIDxvcGVu c3NsL3NoYS5oPiAvKnBhcnRpYWwgaGFzaCBhcGlzKi8NCisjaW5jbHVkZSA8b3BlbnNzbC9jbWFj Lmg+IC8qc3ViIGtleSBhcGlzKi8NCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4gLypzdWIga2V5 IGFwaXMqLw0KKw0KKyNpZmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisjaW5jbHVk ZSA8b3BlbnNzbC9jb25mLmg+DQorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+DQorI2luY2x1ZGUg PG9wZW5zc2wvaG1hYy5oPg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgUlRFX0xJQlJURV9QTURfQ0NQ X0NQVV9BVVRIDQorLyogU0hBIGluaXRpYWwgY29udGV4dCB2YWx1ZXMgKi8NCitzdGF0aWMgdWlu dDMyX3QgY2NwX3NoYTFfaW5pdFtTSEEyNTZfRElHRVNUX1NJWkUgLyBzaXplb2YodWludDMyX3Qp XSA9IHsNCisJU0hBMV9INCwgU0hBMV9IMywNCisJU0hBMV9IMiwgU0hBMV9IMSwNCisJU0hBMV9I MCwgMHgwVSwNCisJMHgwVSwgMHgwVSwNCit9Ow0KKw0KK3VpbnQzMl90IGNjcF9zaGEyMjRfaW5p dFtTSEEyNTZfRElHRVNUX1NJWkUgLyBzaXplb2YodWludDMyX3QpXSA9IHsNCisJU0hBMjI0X0g3 LCBTSEEyMjRfSDYsDQorCVNIQTIyNF9INSwgU0hBMjI0X0g0LA0KKwlTSEEyMjRfSDMsIFNIQTIy NF9IMiwNCisJU0hBMjI0X0gxLCBTSEEyMjRfSDAsDQorfTsNCisNCit1aW50MzJfdCBjY3Bfc2hh MjU2X2luaXRbU0hBMjU2X0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHVpbnQzMl90KV0gPSB7DQorCVNI QTI1Nl9INywgU0hBMjU2X0g2LA0KKwlTSEEyNTZfSDUsIFNIQTI1Nl9INCwNCisJU0hBMjU2X0gz LCBTSEEyNTZfSDIsDQorCVNIQTI1Nl9IMSwgU0hBMjU2X0gwLA0KK307DQorDQordWludDY0X3Qg Y2NwX3NoYTM4NF9pbml0W1NIQTUxMl9ESUdFU1RfU0laRSAvIHNpemVvZih1aW50NjRfdCldID0g ew0KKwlTSEEzODRfSDcsIFNIQTM4NF9INiwNCisJU0hBMzg0X0g1LCBTSEEzODRfSDQsDQorCVNI QTM4NF9IMywgU0hBMzg0X0gyLA0KKwlTSEEzODRfSDEsIFNIQTM4NF9IMCwNCit9Ow0KKw0KK3Vp bnQ2NF90IGNjcF9zaGE1MTJfaW5pdFtTSEE1MTJfRElHRVNUX1NJWkUgLyBzaXplb2YodWludDY0 X3QpXSA9IHsNCisJU0hBNTEyX0g3LCBTSEE1MTJfSDYsDQorCVNIQTUxMl9INSwgU0hBNTEyX0g0 LA0KKwlTSEE1MTJfSDMsIFNIQTUxMl9IMiwNCisJU0hBNTEyX0gxLCBTSEE1MTJfSDAsDQorfTsN CisjZW5kaWYNCisNCitleHRlcm4gdWludDhfdCBjcnlwdG9kZXZfZHJpdmVyX2lkOw0KKw0KKyNp ZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNkZWZpbmUgU0hBM19DT05TVCh4KSB4DQorI2Vsc2UNCisj ZGVmaW5lIFNIQTNfQ09OU1QoeCkgeCMjTA0KKyNlbmRpZg0KKw0KKy8qKiAnV29yZHMnIGhlcmUg cmVmZXJzIHRvIHVpbnQ2NF90ICovDQorI2RlZmluZSBTSEEzX0tFQ0NBS19TUE9OR0VfV09SRFMg XA0KKwkoKCgxNjAwKSAvIDgpIC8gc2l6ZW9mKHVpbnQ2NF90KSkNCit0eXBlZGVmIHN0cnVjdCBz aGEzX2NvbnRleHRfIHsNCisJdWludDY0X3Qgc2F2ZWQ7DQorCS8qKg0KKwkgKiBUaGUgcG9ydGlv biBvZiB0aGUgaW5wdXQgbWVzc2FnZSB0aGF0IHdlDQorCSAqIGRpZG4ndCBjb25zdW1lIHlldA0K KwkgKi8NCisJdW5pb24gew0KKwkJdWludDY0X3Qgc1tTSEEzX0tFQ0NBS19TUE9OR0VfV09SRFNd Ow0KKwkJLyogS2VjY2FrJ3Mgc3RhdGUgKi8NCisJCXVpbnQ4X3Qgc2JbU0hBM19LRUNDQUtfU1BP TkdFX1dPUkRTICogOF07DQorCQkvKip0b3RhbCAyMDAgY3R4IHNpemUqKi8NCisJfTsNCisJdW5z aWduZWQgaW50IGJ5dGVJbmRleDsNCisJLyoqDQorCSAqIDAuLjctLXRoZSBuZXh0IGJ5dGUgYWZ0 ZXIgdGhlIHNldCBvbmUNCisJICogKHN0YXJ0cyBmcm9tIDA7IDAtLW5vbmUgYXJlIGJ1ZmZlcmVk KQ0KKwkgKi8NCisJdW5zaWduZWQgaW50IHdvcmRJbmRleDsNCisJLyoqDQorCSAqIDAuLjI0LS10 aGUgbmV4dCB3b3JkIHRvIGludGVncmF0ZSBpbnB1dA0KKwkgKiAoc3RhcnRzIGZyb20gMCkNCisJ ICovDQorCXVuc2lnbmVkIGludCBjYXBhY2l0eVdvcmRzOw0KKwkvKioNCisJICogdGhlIGRvdWJs ZSBzaXplIG9mIHRoZSBoYXNoIG91dHB1dCBpbg0KKwkgKiB3b3JkcyAoZS5nLiAxNiBmb3IgS2Vj Y2FrIDUxMikNCisJICovDQorfSBzaGEzX2NvbnRleHQ7DQorDQorI2lmbmRlZiBTSEEzX1JPVEw2 NA0KKyNkZWZpbmUgU0hBM19ST1RMNjQoeCwgeSkgXA0KKwkoKCh4KSA8PCAoeSkpIHwgKCh4KSA+ PiAoKHNpemVvZih1aW50NjRfdCkqOCkgLSAoeSkpKSkNCisjZW5kaWYNCisNCitzdGF0aWMgY29u c3QgdWludDY0X3Qga2VjY2FrZl9ybmRjWzI0XSA9IHsNCisJU0hBM19DT05TVCgweDAwMDAwMDAw MDAwMDAwMDFVTCksIFNIQTNfQ09OU1QoMHgwMDAwMDAwMDAwMDA4MDgyVUwpLA0KKwlTSEEzX0NP TlNUKDB4ODAwMDAwMDAwMDAwODA4YVVMKSwgU0hBM19DT05TVCgweDgwMDAwMDAwODAwMDgwMDBV TCksDQorCVNIQTNfQ09OU1QoMHgwMDAwMDAwMDAwMDA4MDhiVUwpLCBTSEEzX0NPTlNUKDB4MDAw MDAwMDA4MDAwMDAwMVVMKSwNCisJU0hBM19DT05TVCgweDgwMDAwMDAwODAwMDgwODFVTCksIFNI QTNfQ09OU1QoMHg4MDAwMDAwMDAwMDA4MDA5VUwpLA0KKwlTSEEzX0NPTlNUKDB4MDAwMDAwMDAw MDAwMDA4YVVMKSwgU0hBM19DT05TVCgweDAwMDAwMDAwMDAwMDAwODhVTCksDQorCVNIQTNfQ09O U1QoMHgwMDAwMDAwMDgwMDA4MDA5VUwpLCBTSEEzX0NPTlNUKDB4MDAwMDAwMDA4MDAwMDAwYVVM KSwNCisJU0hBM19DT05TVCgweDAwMDAwMDAwODAwMDgwOGJVTCksIFNIQTNfQ09OU1QoMHg4MDAw MDAwMDAwMDAwMDhiVUwpLA0KKwlTSEEzX0NPTlNUKDB4ODAwMDAwMDAwMDAwODA4OVVMKSwgU0hB M19DT05TVCgweDgwMDAwMDAwMDAwMDgwMDNVTCksDQorCVNIQTNfQ09OU1QoMHg4MDAwMDAwMDAw MDA4MDAyVUwpLCBTSEEzX0NPTlNUKDB4ODAwMDAwMDAwMDAwMDA4MFVMKSwNCisJU0hBM19DT05T VCgweDAwMDAwMDAwMDAwMDgwMGFVTCksIFNIQTNfQ09OU1QoMHg4MDAwMDAwMDgwMDAwMDBhVUwp LA0KKwlTSEEzX0NPTlNUKDB4ODAwMDAwMDA4MDAwODA4MVVMKSwgU0hBM19DT05TVCgweDgwMDAw MDAwMDAwMDgwODBVTCksDQorCVNIQTNfQ09OU1QoMHgwMDAwMDAwMDgwMDAwMDAxVUwpLCBTSEEz X0NPTlNUKDB4ODAwMDAwMDA4MDAwODAwOFVMKQ0KK307DQorDQorc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBrZWNjYWtmX3JvdGNbMjRdID0gew0KKwkxLCAzLCA2LCAxMCwgMTUsIDIxLCAyOCwg MzYsIDQ1LCA1NSwgMiwgMTQsIDI3LCA0MSwgNTYsIDgsIDI1LCA0MywgNjIsDQorCTE4LCAzOSwg NjEsIDIwLCA0NA0KK307DQorDQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrZWNjYWtmX3Bp bG5bMjRdID0gew0KKwkxMCwgNywgMTEsIDE3LCAxOCwgMywgNSwgMTYsIDgsIDIxLCAyNCwgNCwg MTUsIDIzLCAxOSwgMTMsIDEyLCAyLCAyMCwNCisJMTQsIDIyLCA5LCA2LCAxDQorfTsNCisNCitz dGF0aWMgZW51bSBjY3BfY21kX29yZGVyDQorY2NwX2dldF9jbWRfaWQoY29uc3Qgc3RydWN0IHJ0 ZV9jcnlwdG9fc3ltX3hmb3JtICp4Zm9ybSkNCit7DQorCWVudW0gY2NwX2NtZF9vcmRlciByZXMg PSBDQ1BfQ01EX05PVF9TVVBQT1JURUQ7DQorDQorCWlmICh4Zm9ybSA9PSBOVUxMKQ0KKwkJcmV0 dXJuIHJlczsNCisJaWYgKHhmb3JtLT50eXBlID09IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgp IHsNCisJCWlmICh4Zm9ybS0+bmV4dCA9PSBOVUxMKQ0KKwkJCXJldHVybiBDQ1BfQ01EX0FVVEg7 DQorCQllbHNlIGlmICh4Zm9ybS0+bmV4dC0+dHlwZSA9PSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9D SVBIRVIpDQorCQkJcmV0dXJuIENDUF9DTURfSEFTSF9DSVBIRVI7DQorCX0NCisJaWYgKHhmb3Jt LT50eXBlID09IFJURV9DUllQVE9fU1lNX1hGT1JNX0NJUEhFUikgew0KKwkJaWYgKHhmb3JtLT5u ZXh0ID09IE5VTEwpDQorCQkJcmV0dXJuIENDUF9DTURfQ0lQSEVSOw0KKwkJZWxzZSBpZiAoeGZv cm0tPm5leHQtPnR5cGUgPT0gUlRFX0NSWVBUT19TWU1fWEZPUk1fQVVUSCkNCisJCQlyZXR1cm4g Q0NQX0NNRF9DSVBIRVJfSEFTSDsNCisJfQ0KKwlpZiAoeGZvcm0tPnR5cGUgPT0gUlRFX0NSWVBU T19TWU1fWEZPUk1fQUVBRCkNCisJCXJldHVybiBDQ1BfQ01EX0NPTUJJTkVEOw0KKwlyZXR1cm4g cmVzOw0KK30NCisNCisjaWZuZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKy8qKnBh cnRpYWwgaGFzaCB1c2luZyBvcGVuc3NsKi8NCitzdGF0aWMgaW50IHBhcnRpYWxfaGFzaF9zaGEx KHVpbnQ4X3QgKmRhdGFfaW4sIHVpbnQ4X3QgKmRhdGFfb3V0KQ0KK3sNCisJU0hBX0NUWCBjdHg7 DQorDQorCWlmICghU0hBMV9Jbml0KCZjdHgpKQ0KKwkJcmV0dXJuIC1FRkFVTFQ7DQorCVNIQTFf VHJhbnNmb3JtKCZjdHgsIGRhdGFfaW4pOw0KKwlydGVfbWVtY3B5KGRhdGFfb3V0LCAmY3R4LCBT SEFfRElHRVNUX0xFTkdUSCk7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHBhcnRp YWxfaGFzaF9zaGEyMjQodWludDhfdCAqZGF0YV9pbiwgdWludDhfdCAqZGF0YV9vdXQpDQorew0K KwlTSEEyNTZfQ1RYIGN0eDsNCisNCisJaWYgKCFTSEEyMjRfSW5pdCgmY3R4KSkNCisJCXJldHVy biAtRUZBVUxUOw0KKwlTSEEyNTZfVHJhbnNmb3JtKCZjdHgsIGRhdGFfaW4pOw0KKwlydGVfbWVt Y3B5KGRhdGFfb3V0LCAmY3R4LA0KKwkJICAgU0hBMjU2X0RJR0VTVF9MRU5HVEgpOw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludCBwYXJ0aWFsX2hhc2hfc2hhMjU2KHVpbnQ4X3QgKmRh dGFfaW4sIHVpbnQ4X3QgKmRhdGFfb3V0KQ0KK3sNCisJU0hBMjU2X0NUWCBjdHg7DQorDQorCWlm ICghU0hBMjU2X0luaXQoJmN0eCkpDQorCQlyZXR1cm4gLUVGQVVMVDsNCisJU0hBMjU2X1RyYW5z Zm9ybSgmY3R4LCBkYXRhX2luKTsNCisJcnRlX21lbWNweShkYXRhX291dCwgJmN0eCwNCisJCSAg IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg cGFydGlhbF9oYXNoX3NoYTM4NCh1aW50OF90ICpkYXRhX2luLCB1aW50OF90ICpkYXRhX291dCkN Cit7DQorCVNIQTUxMl9DVFggY3R4Ow0KKw0KKwlpZiAoIVNIQTM4NF9Jbml0KCZjdHgpKQ0KKwkJ cmV0dXJuIC1FRkFVTFQ7DQorCVNIQTUxMl9UcmFuc2Zvcm0oJmN0eCwgZGF0YV9pbik7DQorCXJ0 ZV9tZW1jcHkoZGF0YV9vdXQsICZjdHgsDQorCQkgICBTSEE1MTJfRElHRVNUX0xFTkdUSCk7DQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHBhcnRpYWxfaGFzaF9zaGE1MTIodWludDhf dCAqZGF0YV9pbiwgdWludDhfdCAqZGF0YV9vdXQpDQorew0KKwlTSEE1MTJfQ1RYIGN0eDsNCisN CisJaWYgKCFTSEE1MTJfSW5pdCgmY3R4KSkNCisJCXJldHVybiAtRUZBVUxUOw0KKwlTSEE1MTJf VHJhbnNmb3JtKCZjdHgsIGRhdGFfaW4pOw0KKwlydGVfbWVtY3B5KGRhdGFfb3V0LCAmY3R4LA0K KwkJICAgU0hBNTEyX0RJR0VTVF9MRU5HVEgpOw0KKwlyZXR1cm4gMDsNCit9DQorI2VuZGlmDQor DQorc3RhdGljIHZvaWQNCitrZWNjYWtmKHVpbnQ2NF90IHNbMjVdKQ0KK3sNCisJaW50IGksIGos IHJvdW5kOw0KKwl1aW50NjRfdCB0LCBiY1s1XTsNCisjZGVmaW5lIEtFQ0NBS19ST1VORFMgMjQN CisNCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgS0VDQ0FLX1JPVU5EUzsgcm91bmQrKykgew0K Kw0KKwkJLyogVGhldGEgKi8NCisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspDQorCQkJYmNbaV0g PSBzW2ldIF4gc1tpICsgNV0gXiBzW2kgKyAxMF0gXiBzW2kgKyAxNV0gXg0KKwkJCQlzW2kgKyAy MF07DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7DQorCQkJdCA9IGJjWyhpICsgNCkg JSA1XSBeIFNIQTNfUk9UTDY0KGJjWyhpICsgMSkgJSA1XSwgMSk7DQorCQkJZm9yIChqID0gMDsg aiA8IDI1OyBqICs9IDUpDQorCQkJCXNbaiArIGldIF49IHQ7DQorCQl9DQorDQorCQkvKiBSaG8g UGkgKi8NCisJCXQgPSBzWzFdOw0KKwkJZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHsNCisJCQlq ID0ga2VjY2FrZl9waWxuW2ldOw0KKwkJCWJjWzBdID0gc1tqXTsNCisJCQlzW2pdID0gU0hBM19S T1RMNjQodCwga2VjY2FrZl9yb3RjW2ldKTsNCisJCQl0ID0gYmNbMF07DQorCQl9DQorDQorCQkv KiBDaGkgKi8NCisJCWZvciAoaiA9IDA7IGogPCAyNTsgaiArPSA1KSB7DQorCQkJZm9yIChpID0g MDsgaSA8IDU7IGkrKykNCisJCQkJYmNbaV0gPSBzW2ogKyBpXTsNCisJCQlmb3IgKGkgPSAwOyBp IDwgNTsgaSsrKQ0KKwkJCQlzW2ogKyBpXSBePSAofmJjWyhpICsgMSkgJSA1XSkgJg0KKwkJCQkJ ICAgIGJjWyhpICsgMikgJSA1XTsNCisJCX0NCisNCisJCS8qIElvdGEgKi8NCisJCXNbMF0gXj0g a2VjY2FrZl9ybmRjW3JvdW5kXTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK3NoYTNfSW5p dDIyNCh2b2lkICpwcml2KQ0KK3sNCisJc2hhM19jb250ZXh0ICpjdHggPSAoc2hhM19jb250ZXh0 ICopIHByaXY7DQorDQorCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7DQorCWN0eC0+Y2Fw YWNpdHlXb3JkcyA9IDIgKiAyMjQgLyAoOCAqIHNpemVvZih1aW50NjRfdCkpOw0KK30NCisNCitz dGF0aWMgdm9pZA0KK3NoYTNfSW5pdDI1Nih2b2lkICpwcml2KQ0KK3sNCisJc2hhM19jb250ZXh0 ICpjdHggPSAoc2hhM19jb250ZXh0ICopIHByaXY7DQorDQorCW1lbXNldChjdHgsIDAsIHNpemVv ZigqY3R4KSk7DQorCWN0eC0+Y2FwYWNpdHlXb3JkcyA9IDIgKiAyNTYgLyAoOCAqIHNpemVvZih1 aW50NjRfdCkpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK3NoYTNfSW5pdDM4NCh2b2lkICpwcml2 KQ0KK3sNCisJc2hhM19jb250ZXh0ICpjdHggPSAoc2hhM19jb250ZXh0ICopIHByaXY7DQorDQor CW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7DQorCWN0eC0+Y2FwYWNpdHlXb3JkcyA9IDIg KiAzODQgLyAoOCAqIHNpemVvZih1aW50NjRfdCkpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK3No YTNfSW5pdDUxMih2b2lkICpwcml2KQ0KK3sNCisJc2hhM19jb250ZXh0ICpjdHggPSAoc2hhM19j b250ZXh0ICopIHByaXY7DQorDQorCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7DQorCWN0 eC0+Y2FwYWNpdHlXb3JkcyA9IDIgKiA1MTIgLyAoOCAqIHNpemVvZih1aW50NjRfdCkpOw0KK30N CisNCisNCisvKiBUaGlzIGlzIHNpbXBseSB0aGUgJ3VwZGF0ZScgd2l0aCB0aGUgcGFkZGluZyBi bG9jay4NCisgKiBUaGUgcGFkZGluZyBibG9jayBpcyAweDAxIHx8IDB4MDAqIHx8IDB4ODAuIEZp cnN0IDB4MDEgYW5kIGxhc3QgMHg4MA0KKyAqIGJ5dGVzIGFyZSBhbHdheXMgcHJlc2VudCwgYnV0 IHRoZXkgY2FuIGJlIHRoZSBzYW1lIGJ5dGUuDQorICovDQorc3RhdGljIHZvaWQNCitzaGEzX1Vw ZGF0ZSh2b2lkICpwcml2LCB2b2lkIGNvbnN0ICpidWZJbiwgc2l6ZV90IGxlbikNCit7DQorCXNo YTNfY29udGV4dCAqY3R4ID0gKHNoYTNfY29udGV4dCAqKSBwcml2Ow0KKwl1bnNpZ25lZCBpbnQg b2xkX3RhaWwgPSAoOCAtIGN0eC0+Ynl0ZUluZGV4KSAmIDc7DQorCXNpemVfdCB3b3JkczsNCisJ dW5zaWduZWQgaW50IHRhaWw7DQorCXNpemVfdCBpOw0KKwljb25zdCB1aW50OF90ICpidWYgPSBi dWZJbjsNCisNCisJaWYgKGxlbiA8IG9sZF90YWlsKSB7DQorCQl3aGlsZSAobGVuLS0pDQorCQkJ Y3R4LT5zYXZlZCB8PSAodWludDY0X3QpICgqKGJ1ZisrKSkgPDwNCisJCQkJICAgICAgKChjdHgt PmJ5dGVJbmRleCsrKSAqIDgpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWlmIChvbGRfdGFpbCkg ew0KKwkJbGVuIC09IG9sZF90YWlsOw0KKwkJd2hpbGUgKG9sZF90YWlsLS0pDQorCQkJY3R4LT5z YXZlZCB8PSAodWludDY0X3QpICgqKGJ1ZisrKSkgPDwNCisJCQkJICAgICAgKChjdHgtPmJ5dGVJ bmRleCsrKSAqIDgpOw0KKw0KKwkJY3R4LT5zW2N0eC0+d29yZEluZGV4XSBePSBjdHgtPnNhdmVk Ow0KKwkJY3R4LT5ieXRlSW5kZXggPSAwOw0KKwkJY3R4LT5zYXZlZCA9IDA7DQorCQlpZiAoKytj dHgtPndvcmRJbmRleCA9PQ0KKwkJICAgKFNIQTNfS0VDQ0FLX1NQT05HRV9XT1JEUyAtIGN0eC0+ Y2FwYWNpdHlXb3JkcykpIHsNCisJCQlrZWNjYWtmKGN0eC0+cyk7DQorCQkJY3R4LT53b3JkSW5k ZXggPSAwOw0KKwkJfQ0KKwl9DQorDQorCXdvcmRzID0gbGVuIC8gc2l6ZW9mKHVpbnQ2NF90KTsN CisJdGFpbCA9IGxlbiAtIHdvcmRzICogc2l6ZW9mKHVpbnQ2NF90KTsNCisNCisJZm9yIChpID0g MDsgaSA8IHdvcmRzOyBpKyssIGJ1ZiArPSBzaXplb2YodWludDY0X3QpKSB7DQorCQljb25zdCB1 aW50NjRfdCB0ID0gKHVpbnQ2NF90KSAoYnVmWzBdKSB8DQorCQkJKCh1aW50NjRfdCkgKGJ1Zlsx XSkgPDwgOCAqIDEpIHwNCisJCQkoKHVpbnQ2NF90KSAoYnVmWzJdKSA8PCA4ICogMikgfA0KKwkJ CSgodWludDY0X3QpIChidWZbM10pIDw8IDggKiAzKSB8DQorCQkJKCh1aW50NjRfdCkgKGJ1Zls0 XSkgPDwgOCAqIDQpIHwNCisJCQkoKHVpbnQ2NF90KSAoYnVmWzVdKSA8PCA4ICogNSkgfA0KKwkJ CSgodWludDY0X3QpIChidWZbNl0pIDw8IDggKiA2KSB8DQorCQkJKCh1aW50NjRfdCkgKGJ1Zls3 XSkgPDwgOCAqIDcpOw0KKwkJY3R4LT5zW2N0eC0+d29yZEluZGV4XSBePSB0Ow0KKwkJaWYgKCsr Y3R4LT53b3JkSW5kZXggPT0NCisJCSAgIChTSEEzX0tFQ0NBS19TUE9OR0VfV09SRFMgLSBjdHgt PmNhcGFjaXR5V29yZHMpKSB7DQorCQkJa2VjY2FrZihjdHgtPnMpOw0KKwkJCWN0eC0+d29yZElu ZGV4ID0gMDsNCisJCX0NCisJfQ0KKw0KKwl3aGlsZSAodGFpbC0tKQ0KKwkJY3R4LT5zYXZlZCB8 PSAodWludDY0X3QpICgqKGJ1ZisrKSkgPDwgKChjdHgtPmJ5dGVJbmRleCsrKSAqIDgpOw0KK30N CisNCitpbnQgcGFydGlhbF9oYXNoX3NoYTNfMjI0KHVpbnQ4X3QgKmRhdGFfaW4sIHVpbnQ4X3Qg KmRhdGFfb3V0KQ0KK3sNCisJc2hhM19jb250ZXh0ICpjdHg7DQorCWludCBpOw0KKw0KKwljdHgg PSBydGVfem1hbGxvYygic2hhMy1jdHgiLCBzaXplb2Yoc2hhM19jb250ZXh0KSwgMCk7DQorCWlm ICghY3R4KSB7DQorCQlDQ1BfTE9HX0VSUigic2hhMy1jdHggY3JlYXRpb24gZmFpbGVkIik7DQor CQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKwlzaGEzX0luaXQyMjQoY3R4KTsNCisJc2hhM19VcGRh dGUoY3R4LCBkYXRhX2luLCBTSEEzXzIyNF9CTE9DS19TSVpFKTsNCisJZm9yIChpID0gMDsgaSA8 IENDUF9TSEEzX0NUWF9TSVpFOyBpKyssIGRhdGFfb3V0KyspDQorCQkqZGF0YV9vdXQgPSBjdHgt PnNiW0NDUF9TSEEzX0NUWF9TSVpFIC0gaSAtIDFdOw0KKwlydGVfZnJlZShjdHgpOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQoraW50IHBhcnRpYWxfaGFzaF9zaGEzXzI1Nih1aW50OF90ICpkYXRh X2luLCB1aW50OF90ICpkYXRhX291dCkNCit7DQorCXNoYTNfY29udGV4dCAqY3R4Ow0KKwlpbnQg aTsNCisNCisJY3R4ID0gcnRlX3ptYWxsb2MoInNoYTMtY3R4Iiwgc2l6ZW9mKHNoYTNfY29udGV4 dCksIDApOw0KKwlpZiAoIWN0eCkgew0KKwkJQ0NQX0xPR19FUlIoInNoYTMtY3R4IGNyZWF0aW9u IGZhaWxlZCIpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQorCX0NCisJc2hhM19Jbml0MjU2KGN0eCk7 DQorCXNoYTNfVXBkYXRlKGN0eCwgZGF0YV9pbiwgU0hBM18yNTZfQkxPQ0tfU0laRSk7DQorCWZv ciAoaSA9IDA7IGkgPCBDQ1BfU0hBM19DVFhfU0laRTsgaSsrLCBkYXRhX291dCsrKQ0KKwkJKmRh dGFfb3V0ID0gY3R4LT5zYltDQ1BfU0hBM19DVFhfU0laRSAtIGkgLSAxXTsNCisJcnRlX2ZyZWUo Y3R4KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBwYXJ0aWFsX2hhc2hfc2hhM18zODQo dWludDhfdCAqZGF0YV9pbiwgdWludDhfdCAqZGF0YV9vdXQpDQorew0KKwlzaGEzX2NvbnRleHQg KmN0eDsNCisJaW50IGk7DQorDQorCWN0eCA9IHJ0ZV96bWFsbG9jKCJzaGEzLWN0eCIsIHNpemVv ZihzaGEzX2NvbnRleHQpLCAwKTsNCisJaWYgKCFjdHgpIHsNCisJCUNDUF9MT0dfRVJSKCJzaGEz LWN0eCBjcmVhdGlvbiBmYWlsZWQiKTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorCXNoYTNf SW5pdDM4NChjdHgpOw0KKwlzaGEzX1VwZGF0ZShjdHgsIGRhdGFfaW4sIFNIQTNfMzg0X0JMT0NL X1NJWkUpOw0KKwlmb3IgKGkgPSAwOyBpIDwgQ0NQX1NIQTNfQ1RYX1NJWkU7IGkrKywgZGF0YV9v dXQrKykNCisJCSpkYXRhX291dCA9IGN0eC0+c2JbQ0NQX1NIQTNfQ1RYX1NJWkUgLSBpIC0gMV07 DQorCXJ0ZV9mcmVlKGN0eCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgcGFydGlhbF9o YXNoX3NoYTNfNTEyKHVpbnQ4X3QgKmRhdGFfaW4sIHVpbnQ4X3QgKmRhdGFfb3V0KQ0KK3sNCisJ c2hhM19jb250ZXh0ICpjdHg7DQorCWludCBpOw0KKw0KKwljdHggPSBydGVfem1hbGxvYygic2hh My1jdHgiLCBzaXplb2Yoc2hhM19jb250ZXh0KSwgMCk7DQorCWlmICghY3R4KSB7DQorCQlDQ1Bf TE9HX0VSUigic2hhMy1jdHggY3JlYXRpb24gZmFpbGVkIik7DQorCQlyZXR1cm4gLUVOT01FTTsN CisJfQ0KKwlzaGEzX0luaXQ1MTIoY3R4KTsNCisJc2hhM19VcGRhdGUoY3R4LCBkYXRhX2luLCBT SEEzXzUxMl9CTE9DS19TSVpFKTsNCisJZm9yIChpID0gMDsgaSA8IENDUF9TSEEzX0NUWF9TSVpF OyBpKyssIGRhdGFfb3V0KyspDQorCQkqZGF0YV9vdXQgPSBjdHgtPnNiW0NDUF9TSEEzX0NUWF9T SVpFIC0gaSAtIDFdOw0KKwlydGVfZnJlZShjdHgpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor I2lmbmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCitzdGF0aWMgaW50IGdlbmVyYXRl X3BhcnRpYWxfaGFzaChzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNlc3MpDQorew0KKw0KKwl1aW50OF90 IGlwYWRbc2Vzcy0+YXV0aC5ibG9ja19zaXplXTsNCisJdWludDhfdAlvcGFkW3Nlc3MtPmF1dGgu YmxvY2tfc2l6ZV07DQorCXVpbnQ4X3QgKmlwYWRfdCwgKm9wYWRfdDsNCisJdWludDMyX3QgKmhh c2hfdmFsdWVfYmUzMiwgaGFzaF90ZW1wMzJbOF07DQorCXVpbnQ2NF90ICpoYXNoX3ZhbHVlX2Jl NjQsIGhhc2hfdGVtcDY0WzhdOw0KKwlpbnQgaSwgY291bnQ7DQorCXVpbnQ4X3QgKmhhc2hfdmFs dWVfc2hhMzsNCisNCisJb3BhZF90ID0gaXBhZF90ID0gKHVpbnQ4X3QgKilzZXNzLT5hdXRoLmtl eTsNCisNCisJaGFzaF92YWx1ZV9iZTMyID0gKHVpbnQzMl90ICopKCh1aW50OF90ICopc2Vzcy0+ YXV0aC5wcmVfY29tcHV0ZSk7DQorCWhhc2hfdmFsdWVfYmU2NCA9ICh1aW50NjRfdCAqKSgodWlu dDhfdCAqKXNlc3MtPmF1dGgucHJlX2NvbXB1dGUpOw0KKw0KKwkvKipjb25zaWRlcmluZyBrZXkg c2l6ZSBpcyBhbHdheXMgZXF1YWwgdG8gYmxvY2sgc2l6ZSBvZiBhbGdvcml0aG0qLw0KKwlmb3Ig KGkgPSAwOyBpIDwgc2Vzcy0+YXV0aC5ibG9ja19zaXplOyBpKyspIHsNCisJCWlwYWRbaV0gPSAo aXBhZF90W2ldIF4gSE1BQ19JUEFEX1ZBTFVFKTsNCisJCW9wYWRbaV0gPSAob3BhZF90W2ldIF4g SE1BQ19PUEFEX1ZBTFVFKTsNCisJfQ0KKw0KKwlzd2l0Y2ggKHNlc3MtPmF1dGguYWxnbykgew0K KwljYXNlIENDUF9BVVRIX0FMR09fU0hBMV9ITUFDOg0KKwkJY291bnQgPSBTSEExX0RJR0VTVF9T SVpFID4+IDI7DQorDQorCQlpZiAocGFydGlhbF9oYXNoX3NoYTEoaXBhZCwgKHVpbnQ4X3QgKilo YXNoX3RlbXAzMikpDQorCQkJcmV0dXJuIC0xOw0KKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyssIGhhc2hfdmFsdWVfYmUzMisrKQ0KKwkJCSpoYXNoX3ZhbHVlX2JlMzIgPSBoYXNoX3RlbXAz Mltjb3VudCAtIDEgLSBpXTsNCisNCisJCWhhc2hfdmFsdWVfYmUzMiA9ICh1aW50MzJfdCAqKSgo dWludDhfdCAqKXNlc3MtPmF1dGgucHJlX2NvbXB1dGUNCisJCQkJCSAgICAgICArIHNlc3MtPmF1 dGguY3R4X2xlbik7DQorCQlpZiAocGFydGlhbF9oYXNoX3NoYTEob3BhZCwgKHVpbnQ4X3QgKilo YXNoX3RlbXAzMikpDQorCQkJcmV0dXJuIC0xOw0KKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyssIGhhc2hfdmFsdWVfYmUzMisrKQ0KKwkJCSpoYXNoX3ZhbHVlX2JlMzIgPSBoYXNoX3RlbXAz Mltjb3VudCAtIDEgLSBpXTsNCisJCXJldHVybiAwOw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hB MjI0X0hNQUM6DQorCQljb3VudCA9IFNIQTI1Nl9ESUdFU1RfU0laRSA+PiAyOw0KKw0KKwkJaWYg KHBhcnRpYWxfaGFzaF9zaGEyMjQoaXBhZCwgKHVpbnQ4X3QgKiloYXNoX3RlbXAzMikpDQorCQkJ cmV0dXJuIC0xOw0KKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGhhc2hfdmFsdWVfYmUz MisrKQ0KKwkJCSpoYXNoX3ZhbHVlX2JlMzIgPSBoYXNoX3RlbXAzMltjb3VudCAtIDEgLSBpXTsN CisNCisJCWhhc2hfdmFsdWVfYmUzMiA9ICh1aW50MzJfdCAqKSgodWludDhfdCAqKXNlc3MtPmF1 dGgucHJlX2NvbXB1dGUNCisJCQkJCSAgICAgICArIHNlc3MtPmF1dGguY3R4X2xlbik7DQorCQlp ZiAocGFydGlhbF9oYXNoX3NoYTIyNChvcGFkLCAodWludDhfdCAqKWhhc2hfdGVtcDMyKSkNCisJ CQlyZXR1cm4gLTE7DQorCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgaGFzaF92YWx1ZV9i ZTMyKyspDQorCQkJKmhhc2hfdmFsdWVfYmUzMiA9IGhhc2hfdGVtcDMyW2NvdW50IC0gMSAtIGld Ow0KKwkJcmV0dXJuIDA7DQorCWNhc2UgQ0NQX0FVVEhfQUxHT19TSEEzXzIyNF9ITUFDOg0KKwkJ aGFzaF92YWx1ZV9zaGEzID0gc2Vzcy0+YXV0aC5wcmVfY29tcHV0ZTsNCisJCWlmIChwYXJ0aWFs X2hhc2hfc2hhM18yMjQoaXBhZCwgaGFzaF92YWx1ZV9zaGEzKSkNCisJCQlyZXR1cm4gLTE7DQor DQorCQloYXNoX3ZhbHVlX3NoYTMgPSAodWludDhfdCAqKShzZXNzLT5hdXRoLnByZV9jb21wdXRl DQorCQkJCQkgICAgICAgKyBzZXNzLT5hdXRoLmN0eF9sZW4pOw0KKwkJaWYgKHBhcnRpYWxfaGFz aF9zaGEzXzIyNChvcGFkLCBoYXNoX3ZhbHVlX3NoYTMpKQ0KKwkJCXJldHVybiAtMTsNCisJCXJl dHVybiAwOw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBMjU2X0hNQUM6DQorCQljb3VudCA9IFNI QTI1Nl9ESUdFU1RfU0laRSA+PiAyOw0KKw0KKwkJaWYgKHBhcnRpYWxfaGFzaF9zaGEyNTYoaXBh ZCwgKHVpbnQ4X3QgKiloYXNoX3RlbXAzMikpDQorCQkJcmV0dXJuIC0xOw0KKwkJZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyssIGhhc2hfdmFsdWVfYmUzMisrKQ0KKwkJCSpoYXNoX3ZhbHVlX2Jl MzIgPSBoYXNoX3RlbXAzMltjb3VudCAtIDEgLSBpXTsNCisNCisJCWhhc2hfdmFsdWVfYmUzMiA9 ICh1aW50MzJfdCAqKSgodWludDhfdCAqKXNlc3MtPmF1dGgucHJlX2NvbXB1dGUNCisJCQkJCSAg ICAgICArIHNlc3MtPmF1dGguY3R4X2xlbik7DQorCQlpZiAocGFydGlhbF9oYXNoX3NoYTI1Nihv cGFkLCAodWludDhfdCAqKWhhc2hfdGVtcDMyKSkNCisJCQlyZXR1cm4gLTE7DQorCQlmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKywgaGFzaF92YWx1ZV9iZTMyKyspDQorCQkJKmhhc2hfdmFsdWVf YmUzMiA9IGhhc2hfdGVtcDMyW2NvdW50IC0gMSAtIGldOw0KKwkJcmV0dXJuIDA7DQorCWNhc2Ug Q0NQX0FVVEhfQUxHT19TSEEzXzI1Nl9ITUFDOg0KKwkJaGFzaF92YWx1ZV9zaGEzID0gc2Vzcy0+ YXV0aC5wcmVfY29tcHV0ZTsNCisJCWlmIChwYXJ0aWFsX2hhc2hfc2hhM18yNTYoaXBhZCwgaGFz aF92YWx1ZV9zaGEzKSkNCisJCQlyZXR1cm4gLTE7DQorDQorCQloYXNoX3ZhbHVlX3NoYTMgPSAo dWludDhfdCAqKShzZXNzLT5hdXRoLnByZV9jb21wdXRlDQorCQkJCQkgICAgICArIHNlc3MtPmF1 dGguY3R4X2xlbik7DQorCQlpZiAocGFydGlhbF9oYXNoX3NoYTNfMjU2KG9wYWQsIGhhc2hfdmFs dWVfc2hhMykpDQorCQkJcmV0dXJuIC0xOw0KKwkJcmV0dXJuIDA7DQorCWNhc2UgQ0NQX0FVVEhf QUxHT19TSEEzODRfSE1BQzoNCisJCWNvdW50ID0gU0hBNTEyX0RJR0VTVF9TSVpFID4+IDM7DQor DQorCQlpZiAocGFydGlhbF9oYXNoX3NoYTM4NChpcGFkLCAodWludDhfdCAqKWhhc2hfdGVtcDY0 KSkNCisJCQlyZXR1cm4gLTE7DQorCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgaGFzaF92 YWx1ZV9iZTY0KyspDQorCQkJKmhhc2hfdmFsdWVfYmU2NCA9IGhhc2hfdGVtcDY0W2NvdW50IC0g MSAtIGldOw0KKw0KKwkJaGFzaF92YWx1ZV9iZTY0ID0gKHVpbnQ2NF90ICopKCh1aW50OF90ICop c2Vzcy0+YXV0aC5wcmVfY29tcHV0ZQ0KKwkJCQkJICAgICAgICsgc2Vzcy0+YXV0aC5jdHhfbGVu KTsNCisJCWlmIChwYXJ0aWFsX2hhc2hfc2hhMzg0KG9wYWQsICh1aW50OF90ICopaGFzaF90ZW1w NjQpKQ0KKwkJCXJldHVybiAtMTsNCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBoYXNo X3ZhbHVlX2JlNjQrKykNCisJCQkqaGFzaF92YWx1ZV9iZTY0ID0gaGFzaF90ZW1wNjRbY291bnQg LSAxIC0gaV07DQorCQlyZXR1cm4gMDsNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTNfMzg0X0hN QUM6DQorCQloYXNoX3ZhbHVlX3NoYTMgPSBzZXNzLT5hdXRoLnByZV9jb21wdXRlOw0KKwkJaWYg KHBhcnRpYWxfaGFzaF9zaGEzXzM4NChpcGFkLCBoYXNoX3ZhbHVlX3NoYTMpKQ0KKwkJCXJldHVy biAtMTsNCisNCisJCWhhc2hfdmFsdWVfc2hhMyA9ICh1aW50OF90ICopKHNlc3MtPmF1dGgucHJl X2NvbXB1dGUNCisJCQkJCSAgICAgICsgc2Vzcy0+YXV0aC5jdHhfbGVuKTsNCisJCWlmIChwYXJ0 aWFsX2hhc2hfc2hhM18zODQob3BhZCwgaGFzaF92YWx1ZV9zaGEzKSkNCisJCQlyZXR1cm4gLTE7 DQorCQlyZXR1cm4gMDsNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTUxMl9ITUFDOg0KKwkJY291 bnQgPSBTSEE1MTJfRElHRVNUX1NJWkUgPj4gMzsNCisNCisJCWlmIChwYXJ0aWFsX2hhc2hfc2hh NTEyKGlwYWQsICh1aW50OF90ICopaGFzaF90ZW1wNjQpKQ0KKwkJCXJldHVybiAtMTsNCisJCWZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBoYXNoX3ZhbHVlX2JlNjQrKykNCisJCQkqaGFzaF92 YWx1ZV9iZTY0ID0gaGFzaF90ZW1wNjRbY291bnQgLSAxIC0gaV07DQorDQorCQloYXNoX3ZhbHVl X2JlNjQgPSAodWludDY0X3QgKikoKHVpbnQ4X3QgKilzZXNzLT5hdXRoLnByZV9jb21wdXRlDQor CQkJCQkgICAgICAgKyBzZXNzLT5hdXRoLmN0eF9sZW4pOw0KKwkJaWYgKHBhcnRpYWxfaGFzaF9z aGE1MTIob3BhZCwgKHVpbnQ4X3QgKiloYXNoX3RlbXA2NCkpDQorCQkJcmV0dXJuIC0xOw0KKwkJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGhhc2hfdmFsdWVfYmU2NCsrKQ0KKwkJCSpoYXNo X3ZhbHVlX2JlNjQgPSBoYXNoX3RlbXA2NFtjb3VudCAtIDEgLSBpXTsNCisJCXJldHVybiAwOw0K KwljYXNlIENDUF9BVVRIX0FMR09fU0hBM181MTJfSE1BQzoNCisJCWhhc2hfdmFsdWVfc2hhMyA9 IHNlc3MtPmF1dGgucHJlX2NvbXB1dGU7DQorCQlpZiAocGFydGlhbF9oYXNoX3NoYTNfNTEyKGlw YWQsIGhhc2hfdmFsdWVfc2hhMykpDQorCQkJcmV0dXJuIC0xOw0KKw0KKwkJaGFzaF92YWx1ZV9z aGEzID0gKHVpbnQ4X3QgKikoc2Vzcy0+YXV0aC5wcmVfY29tcHV0ZQ0KKwkJCQkJICAgICAgKyBz ZXNzLT5hdXRoLmN0eF9sZW4pOw0KKwkJaWYgKHBhcnRpYWxfaGFzaF9zaGEzXzUxMihvcGFkLCBo YXNoX3ZhbHVlX3NoYTMpKQ0KKwkJCXJldHVybiAtMTsNCisJCXJldHVybiAwOw0KKwlkZWZhdWx0 Og0KKwkJQ0NQX0xPR19FUlIoIkludmFsaWQgc2Vzc2lvbiBhbGdvIik7DQorCQlyZXR1cm4gLTE7 DQorCX0NCit9DQorDQorLyogcHJlcGFyZSB0ZW1wb3Jhcnkga2V5cyBLMSBhbmQgSzIgKi8NCitz dGF0aWMgdm9pZCBwcmVwYXJlX2tleSh1bnNpZ25lZCBjaGFyICprLCB1bnNpZ25lZCBjaGFyICps LCBpbnQgYmwpDQorew0KKwlpbnQgaTsNCisJLyogU2hpZnQgYmxvY2sgdG8gbGVmdCwgaW5jbHVk aW5nIGNhcnJ5ICovDQorCWZvciAoaSA9IDA7IGkgPCBibDsgaSsrKSB7DQorCQlrW2ldID0gbFtp XSA8PCAxOw0KKwkJaWYgKGkgPCBibCAtIDEgJiYgbFtpICsgMV0gJiAweDgwKQ0KKwkJCWtbaV0g fD0gMTsNCisJfQ0KKwkvKiBJZiBNU0Igc2V0IGZpeHVwIHdpdGggUiAqLw0KKwlpZiAobFswXSAm IDB4ODApDQorCQlrW2JsIC0gMV0gXj0gYmwgPT0gMTYgPyAweDg3IDogMHgxYjsNCit9DQorDQor Lyoqc3Via2V5cyBLMSBhbmQgSzIgZ2VuZXJhdGlvbiBmb3IgQ01BQyovDQorc3RhdGljIGludA0K K2dlbmVyYXRlX3N1YmtleXMoc3RydWN0IGNjcF9zZXNzaW9uICpzZXNzKQ0KK3sNCisJY29uc3Qg RVZQX0NJUEhFUiAqYWxnbzsNCisJRVZQX0NJUEhFUl9DVFggKmN0eDsNCisJdW5zaWduZWQgY2hh ciAqY2NwX2N0eDsNCisJc2l6ZV90IGk7DQorCWludCBkc3RsZW4sIHRvdGxlbjsNCisJdW5zaWdu ZWQgY2hhciB6ZXJvX2l2W0FFU19CTE9DS19TSVpFXSA9IHswfTsNCisJdW5zaWduZWQgY2hhciBk c3RbMiAqIEFFU19CTE9DS19TSVpFXSA9IHswfTsNCisJdW5zaWduZWQgY2hhciBrMVtBRVNfQkxP Q0tfU0laRV0gPSB7MH07DQorCXVuc2lnbmVkIGNoYXIgazJbQUVTX0JMT0NLX1NJWkVdID0gezB9 Ow0KKw0KKwlpZiAoc2Vzcy0+YXV0aC51dC5hZXNfdHlwZSA9PSBDQ1BfQUVTX1RZUEVfMTI4KQ0K KwkJYWxnbyA9ICBFVlBfYWVzXzEyOF9jYmMoKTsNCisJZWxzZSBpZiAoc2Vzcy0+YXV0aC51dC5h ZXNfdHlwZSA9PSBDQ1BfQUVTX1RZUEVfMTkyKQ0KKwkJYWxnbyA9ICBFVlBfYWVzXzE5Ml9jYmMo KTsNCisJZWxzZSBpZiAoc2Vzcy0+YXV0aC51dC5hZXNfdHlwZSA9PSBDQ1BfQUVTX1RZUEVfMjU2 KQ0KKwkJYWxnbyA9ICBFVlBfYWVzXzI1Nl9jYmMoKTsNCisJZWxzZSB7DQorCQlDQ1BfTE9HX0VS UigiSW52YWxpZCBDTUFDIHR5cGUgbGVuZ3RoIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJ Y3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7DQorCWlmICghY3R4KSB7DQorCQlDQ1BfTE9HX0VS UigiY3R4IGNyZWF0aW9uIGZhaWxlZCIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorCWlmIChFVlBf RW5jcnlwdEluaXQoY3R4LCBhbGdvLCAodW5zaWduZWQgY2hhciAqKXNlc3MtPmF1dGgua2V5LA0K KwkJCSAgICAodW5zaWduZWQgY2hhciAqKXplcm9faXYpIDw9IDApDQorCQlnb3RvIGtleV9nZW5l cmF0ZV9lcnI7DQorCWlmIChFVlBfQ0lQSEVSX0NUWF9zZXRfcGFkZGluZyhjdHgsIDApIDw9IDAp DQorCQlnb3RvIGtleV9nZW5lcmF0ZV9lcnI7DQorCWlmIChFVlBfRW5jcnlwdFVwZGF0ZShjdHgs IGRzdCwgJmRzdGxlbiwgemVyb19pdiwNCisJCQkgICAgICBBRVNfQkxPQ0tfU0laRSkgPD0gMCkN CisJCWdvdG8ga2V5X2dlbmVyYXRlX2VycjsNCisJaWYgKEVWUF9FbmNyeXB0RmluYWxfZXgoY3R4 LCBkc3QgKyBkc3RsZW4sICZ0b3RsZW4pIDw9IDApDQorCQlnb3RvIGtleV9nZW5lcmF0ZV9lcnI7 DQorDQorCW1lbXNldChzZXNzLT5hdXRoLnByZV9jb21wdXRlLCAwLCBDQ1BfU0JfQllURVMgKiAy KTsNCisNCisJY2NwX2N0eCA9ICh1bnNpZ25lZCBjaGFyICopKHNlc3MtPmF1dGgucHJlX2NvbXB1 dGUgKyBDQ1BfU0JfQllURVMgLSAxKTsNCisJcHJlcGFyZV9rZXkoazEsIGRzdCwgQUVTX0JMT0NL X1NJWkUpOw0KKwlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7ICBpKyssIGNjcF9jdHgt LSkNCisJCSpjY3BfY3R4ID0gazFbaV07DQorDQorCWNjcF9jdHggPSAodW5zaWduZWQgY2hhciAq KShzZXNzLT5hdXRoLnByZV9jb21wdXRlICsNCisJCQkJICAgKDIgKiBDQ1BfU0JfQllURVMpIC0g MSk7DQorCXByZXBhcmVfa2V5KGsyLCBrMSwgQUVTX0JMT0NLX1NJWkUpOw0KKwlmb3IgKGkgPSAw OyBpIDwgQUVTX0JMT0NLX1NJWkU7ICBpKyssIGNjcF9jdHgtLSkNCisJCSpjY3BfY3R4ID0gazJb aV07DQorDQorCUVWUF9DSVBIRVJfQ1RYX2ZyZWUoY3R4KTsNCisNCisJcmV0dXJuIDA7DQorDQor a2V5X2dlbmVyYXRlX2VycjoNCisJQ0NQX0xPR19FUlIoIkNNQUMgSW5pdCBmYWlsZWQiKTsNCisJ CXJldHVybiAtMTsNCit9DQorI2VuZGlmDQorDQorLyoqY29uZmlndXJlIHNlc3Npb24qLw0KK3N0 YXRpYyBpbnQNCitjY3BfY29uZmlndXJlX3Nlc3Npb25fY2lwaGVyKHN0cnVjdCBjY3Bfc2Vzc2lv biAqc2VzcywNCisJCQkgICAgIGNvbnN0IHN0cnVjdCBydGVfY3J5cHRvX3N5bV94Zm9ybSAqeGZv cm0pDQorew0KKwljb25zdCBzdHJ1Y3QgcnRlX2NyeXB0b19jaXBoZXJfeGZvcm0gKmNpcGhlcl94 Zm9ybSA9IE5VTEw7DQorCXNpemVfdCBpLCBqLCB4LCBjdHJfa2V5X2xlbjsNCisNCisJY2lwaGVy X3hmb3JtID0gJnhmb3JtLT5jaXBoZXI7DQorCS8qIHNldCBjaXBoZXIgZGlyZWN0aW9uICovDQor CWlmIChjaXBoZXJfeGZvcm0tPm9wID09ICBSVEVfQ1JZUFRPX0NJUEhFUl9PUF9FTkNSWVBUKQ0K KwkJc2Vzcy0+Y2lwaGVyLmRpciA9IENDUF9DSVBIRVJfRElSX0VOQ1JZUFQ7DQorCWVsc2UNCisJ CXNlc3MtPmNpcGhlci5kaXIgPSBDQ1BfQ0lQSEVSX0RJUl9ERUNSWVBUOw0KKw0KKwkvKiBzZXQg Y2lwaGVyIGtleSAqLw0KKwlzZXNzLT5jaXBoZXIua2V5X2xlbmd0aCA9IGNpcGhlcl94Zm9ybS0+ a2V5Lmxlbmd0aDsNCisJcnRlX21lbWNweShzZXNzLT5jaXBoZXIua2V5LCBjaXBoZXJfeGZvcm0t PmtleS5kYXRhLA0KKwkJICAgY2lwaGVyX3hmb3JtLT5rZXkubGVuZ3RoKTsNCisNCisJLyogc2V0 IGl2IHBhcmFtZXRlcnMgKi8NCisJc2Vzcy0+aXYub2Zmc2V0ID0gY2lwaGVyX3hmb3JtLT5pdi5v ZmZzZXQ7DQorCXNlc3MtPml2Lmxlbmd0aCA9IGNpcGhlcl94Zm9ybS0+aXYubGVuZ3RoOw0KKw0K Kwlzd2l0Y2ggKGNpcGhlcl94Zm9ybS0+YWxnbykgew0KKwljYXNlIFJURV9DUllQVE9fQ0lQSEVS X0FFU19DVFI6DQorCQlzZXNzLT5jaXBoZXIuYWxnbyA9IENDUF9DSVBIRVJfQUxHT19BRVNfQ1RS Ow0KKwkJc2Vzcy0+Y2lwaGVyLnVtLmFlc19tb2RlID0gQ0NQX0FFU19NT0RFX0NUUjsNCisJCXNl c3MtPmNpcGhlci5lbmdpbmUgPSBDQ1BfRU5HSU5FX0FFUzsNCisJCWlmIChzZXNzLT5jaXBoZXIu a2V5X2xlbmd0aCA9PSAxNikNCisJCQlzZXNzLT5jaXBoZXIudXQuYWVzX3R5cGUgPSBDQ1BfQUVT X1RZUEVfMTI4Ow0KKwkJZWxzZSBpZiAoc2Vzcy0+Y2lwaGVyLmtleV9sZW5ndGggPT0gMjQpDQor CQkJc2Vzcy0+Y2lwaGVyLnV0LmFlc190eXBlID0gQ0NQX0FFU19UWVBFXzE5MjsNCisJCWVsc2Ug aWYgKHNlc3MtPmNpcGhlci5rZXlfbGVuZ3RoID09IDMyKQ0KKwkJCXNlc3MtPmNpcGhlci51dC5h ZXNfdHlwZSA9IENDUF9BRVNfVFlQRV8yNTY7DQorCQllbHNlIHsNCisJCQlDQ1BfTE9HX0VSUigi SW52YWxpZCBjaXBoZXIga2V5IGxlbmd0aCIpOw0KKwkJCXJldHVybiAtMTsNCisJCX0NCisJCWN0 cl9rZXlfbGVuID0gc2Vzcy0+Y2lwaGVyLmtleV9sZW5ndGg7DQorCQlmb3IgKGkgPSAwOyBpIDwg Y3RyX2tleV9sZW47IGkrKykNCisJCQlzZXNzLT5jaXBoZXIua2V5X2NjcFtjdHJfa2V5X2xlbiAt IGkgLSAxXSA9DQorCQkJCXNlc3MtPmNpcGhlci5rZXlbaV07DQorCQlnb3RvIGZpbmlzaDsNCisJ Y2FzZSBSVEVfQ1JZUFRPX0NJUEhFUl9BRVNfRUNCOg0KKwkJc2Vzcy0+Y2lwaGVyLmFsZ28gPSBD Q1BfQ0lQSEVSX0FMR09fQUVTX0NCQzsNCisJCXNlc3MtPmNpcGhlci51bS5hZXNfbW9kZSA9IEND UF9BRVNfTU9ERV9FQ0I7DQorCQlzZXNzLT5jaXBoZXIuZW5naW5lID0gQ0NQX0VOR0lORV9BRVM7 DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0NJUEhFUl9BRVNfQ0JDOg0KKwkJc2Vzcy0+ Y2lwaGVyLmFsZ28gPSBDQ1BfQ0lQSEVSX0FMR09fQUVTX0NCQzsNCisJCXNlc3MtPmNpcGhlci51 bS5hZXNfbW9kZSA9IENDUF9BRVNfTU9ERV9DQkM7DQorCQlzZXNzLT5jaXBoZXIuZW5naW5lID0g Q0NQX0VOR0lORV9BRVM7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0NJUEhFUl8zREVT X0NCQzoNCisJCXNlc3MtPmNpcGhlci5hbGdvID0gQ0NQX0NJUEhFUl9BTEdPXzNERVNfQ0JDOw0K KwkJc2Vzcy0+Y2lwaGVyLnVtLmFlc19tb2RlID0gQ0NQX0RFU19NT0RFX0NCQzsNCisJCXNlc3Mt PmNpcGhlci5lbmdpbmUgPSBDQ1BfRU5HSU5FXzNERVM7DQorCQlicmVhazsNCisJZGVmYXVsdDoN CisJCUNDUF9MT0dfRVJSKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyIpOw0KKwkJcmV0dXJuIC0x Ow0KKwl9DQorDQorDQorCXN3aXRjaCAoc2Vzcy0+Y2lwaGVyLmVuZ2luZSkgew0KKwljYXNlIEND UF9FTkdJTkVfQUVTOg0KKwkJaWYgKHNlc3MtPmNpcGhlci5rZXlfbGVuZ3RoID09IDE2KQ0KKwkJ CXNlc3MtPmNpcGhlci51dC5hZXNfdHlwZSA9IENDUF9BRVNfVFlQRV8xMjg7DQorCQllbHNlIGlm IChzZXNzLT5jaXBoZXIua2V5X2xlbmd0aCA9PSAyNCkNCisJCQlzZXNzLT5jaXBoZXIudXQuYWVz X3R5cGUgPSBDQ1BfQUVTX1RZUEVfMTkyOw0KKwkJZWxzZSBpZiAoc2Vzcy0+Y2lwaGVyLmtleV9s ZW5ndGggPT0gMzIpDQorCQkJc2Vzcy0+Y2lwaGVyLnV0LmFlc190eXBlID0gQ0NQX0FFU19UWVBF XzI1NjsNCisJCWVsc2Ugew0KKwkJCUNDUF9MT0dfRVJSKCJJbnZhbGlkIGNpcGhlciBrZXkgbGVu Z3RoIik7DQorCQkJcmV0dXJuIC0xOw0KKwkJfQ0KKwkJZm9yIChpID0gMDsgaSA8IHNlc3MtPmNp cGhlci5rZXlfbGVuZ3RoIDsgaSsrKQ0KKwkJCXNlc3MtPmNpcGhlci5rZXlfY2NwW3Nlc3MtPmNp cGhlci5rZXlfbGVuZ3RoIC0gaSAtIDFdID0NCisJCQkJc2Vzcy0+Y2lwaGVyLmtleVtpXTsNCisJ CXNlc3MtPmNpcGhlci5rZXlfcGh5cyA9IHJ0ZV9tZW1fdmlydDJwaHkoc2Vzcy0+Y2lwaGVyLmtl eV9jY3ApOw0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0VOR0lORV8zREVTOg0KKwkJaWYgKHNlc3Mt PmNpcGhlci5rZXlfbGVuZ3RoID09IDE2KQ0KKwkJCXNlc3MtPmNpcGhlci51dC5kZXNfdHlwZSA9 IENDUF9ERVNfVFlQRV8xMjg7DQorCQllbHNlIGlmIChzZXNzLT5jaXBoZXIua2V5X2xlbmd0aCA9 PSAyNCkNCisJCQlzZXNzLT5jaXBoZXIudXQuZGVzX3R5cGUgPSBDQ1BfREVTX1RZUEVfMTkyOw0K KwkJZWxzZSB7DQorCQkJQ0NQX0xPR19FUlIoIkludmFsaWQgY2lwaGVyIGtleSBsZW5ndGgiKTsN CisJCQlyZXR1cm4gLTE7DQorCQl9DQorCQlmb3IgKGogPSAwLCB4ID0gMDsgaiA8IHNlc3MtPmNp cGhlci5rZXlfbGVuZ3RoLzg7IGorKywgeCArPSA4KQ0KKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBp KyspDQorCQkJCXNlc3MtPmNpcGhlci5rZXlfY2NwWyg4ICsgeCkgLSBpIC0gMV0gPQ0KKwkJCQkJ c2Vzcy0+Y2lwaGVyLmtleVtpICsgeF07DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCS8qIHNo b3VsZCBuZXZlciByZWFjaCBoZXJlICovDQorCQlDQ1BfTE9HX0VSUigiSW52YWxpZCBDQ1AgRW5n aW5lIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCitmaW5pc2g6DQorCXNlc3MtPmNpcGhlci5ub25j ZV9waHlzID0gcnRlX21lbV92aXJ0MnBoeShzZXNzLT5jaXBoZXIubm9uY2UpOw0KKwlzZXNzLT5j aXBoZXIua2V5X3BoeXMgPSBydGVfbWVtX3ZpcnQycGh5KHNlc3MtPmNpcGhlci5rZXlfY2NwKTsN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfY29uZmlndXJlX3Nlc3Npb25f YXV0aChzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNlc3MsDQorCQkJICAgY29uc3Qgc3RydWN0IHJ0ZV9j cnlwdG9fc3ltX3hmb3JtICp4Zm9ybSkNCit7DQorCWNvbnN0IHN0cnVjdCBydGVfY3J5cHRvX2F1 dGhfeGZvcm0gKmF1dGhfeGZvcm0gPSBOVUxMOw0KKyNpZm5kZWYgUlRFX0xJQlJURV9QTURfQ0NQ X0NQVV9BVVRIDQorCXNpemVfdCBpOw0KKyNlbmRpZg0KKw0KKwlhdXRoX3hmb3JtID0gJnhmb3Jt LT5hdXRoOw0KKw0KKwlzZXNzLT5hdXRoLmRpZ2VzdF9sZW5ndGggPSBhdXRoX3hmb3JtLT5kaWdl c3RfbGVuZ3RoOw0KKwlpZiAoYXV0aF94Zm9ybS0+b3AgPT0gIFJURV9DUllQVE9fQVVUSF9PUF9H RU5FUkFURSkNCisJCXNlc3MtPmF1dGgub3AgPSBDQ1BfQVVUSF9PUF9HRU5FUkFURTsNCisJZWxz ZQ0KKwkJc2Vzcy0+YXV0aC5vcCA9IENDUF9BVVRIX09QX1ZFUklGWTsNCisjaWZuZGVmIFJURV9M SUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKwlzd2l0Y2ggKGF1dGhfeGZvcm0tPmFsZ28pIHsNCisJ Y2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hBMToNCisJCXNlc3MtPmF1dGguZW5naW5lID0gQ0NQX0VO R0lORV9TSEE7DQorCQlzZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9BTEdPX1NIQTE7DQorCQlz ZXNzLT5hdXRoLnV0LnNoYV90eXBlID0gQ0NQX1NIQV9UWVBFXzE7DQorCQlzZXNzLT5hdXRoLmN0 eCA9ICh2b2lkICopY2NwX3NoYTFfaW5pdDsNCisJCXNlc3MtPmF1dGguY3R4X2xlbiA9IENDUF9T Ql9CWVRFUzsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0gQ0NQX1NCX0JZVEVTIC0gU0hBMV9ESUdF U1RfU0laRTsNCisJCWJyZWFrOw0KKwljYXNlIFJURV9DUllQVE9fQVVUSF9TSEExX0hNQUM6DQor CQlpZiAoYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aCA+IFNIQTFfQkxPQ0tfU0laRSkNCisJCQlyZXR1 cm4gLTE7DQorCQlzZXNzLT5hdXRoLmVuZ2luZSA9IENDUF9FTkdJTkVfU0hBOw0KKwkJc2Vzcy0+ YXV0aC5hbGdvID0gQ0NQX0FVVEhfQUxHT19TSEExX0hNQUM7DQorCQlzZXNzLT5hdXRoLnV0LnNo YV90eXBlID0gQ0NQX1NIQV9UWVBFXzE7DQorCQlzZXNzLT5hdXRoLmN0eF9sZW4gPSBDQ1BfU0Jf QllURVM7DQorCQlzZXNzLT5hdXRoLm9mZnNldCA9IENDUF9TQl9CWVRFUyAtIFNIQTFfRElHRVNU X1NJWkU7DQorCQlzZXNzLT5hdXRoLmJsb2NrX3NpemUgPSBTSEExX0JMT0NLX1NJWkU7DQorCQlz ZXNzLT5hdXRoLmtleV9sZW5ndGggPSBhdXRoX3hmb3JtLT5rZXkubGVuZ3RoOw0KKwkJbWVtc2V0 KHNlc3MtPmF1dGgua2V5LCAwLCBzZXNzLT5hdXRoLmJsb2NrX3NpemUpOw0KKwkJbWVtc2V0KHNl c3MtPmF1dGgucHJlX2NvbXB1dGUsIDAsIHNlc3MtPmF1dGguY3R4X2xlbiA8PCAxKTsNCisJCXJ0 ZV9tZW1jcHkoc2Vzcy0+YXV0aC5rZXksIGF1dGhfeGZvcm0tPmtleS5kYXRhLA0KKwkJCSAgIGF1 dGhfeGZvcm0tPmtleS5sZW5ndGgpOw0KKwkJaWYgKGdlbmVyYXRlX3BhcnRpYWxfaGFzaChzZXNz KSkNCisJCQlyZXR1cm4gLTE7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hB MjI0Og0KKwkJc2Vzcy0+YXV0aC5hbGdvID0gQ0NQX0FVVEhfQUxHT19TSEEyMjQ7DQorCQlzZXNz LT5hdXRoLmVuZ2luZSA9IENDUF9FTkdJTkVfU0hBOw0KKwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlw ZSA9IENDUF9TSEFfVFlQRV8yMjQ7DQorCQlzZXNzLT5hdXRoLmN0eCA9ICh2b2lkICopY2NwX3No YTIyNF9pbml0Ow0KKwkJc2Vzcy0+YXV0aC5jdHhfbGVuID0gQ0NQX1NCX0JZVEVTOw0KKwkJc2Vz cy0+YXV0aC5vZmZzZXQgPSBDQ1BfU0JfQllURVMgLSBTSEEyMjRfRElHRVNUX1NJWkU7DQorCQli cmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hBMjI0X0hNQUM6DQorCQlpZiAoYXV0aF94 Zm9ybS0+a2V5Lmxlbmd0aCA+IFNIQTIyNF9CTE9DS19TSVpFKQ0KKwkJCXJldHVybiAtMTsNCisJ CXNlc3MtPmF1dGguYWxnbyA9IENDUF9BVVRIX0FMR09fU0hBMjI0X0hNQUM7DQorCQlzZXNzLT5h dXRoLmVuZ2luZSA9IENDUF9FTkdJTkVfU0hBOw0KKwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlwZSA9 IENDUF9TSEFfVFlQRV8yMjQ7DQorCQlzZXNzLT5hdXRoLmN0eF9sZW4gPSBDQ1BfU0JfQllURVM7 DQorCQlzZXNzLT5hdXRoLm9mZnNldCA9IENDUF9TQl9CWVRFUyAtIFNIQTIyNF9ESUdFU1RfU0la RTsNCisJCXNlc3MtPmF1dGguYmxvY2tfc2l6ZSA9IFNIQTIyNF9CTE9DS19TSVpFOw0KKwkJc2Vz cy0+YXV0aC5rZXlfbGVuZ3RoID0gYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aDsNCisJCW1lbXNldChz ZXNzLT5hdXRoLmtleSwgMCwgc2Vzcy0+YXV0aC5ibG9ja19zaXplKTsNCisJCW1lbXNldChzZXNz LT5hdXRoLnByZV9jb21wdXRlLCAwLCBzZXNzLT5hdXRoLmN0eF9sZW4gPDwgMSk7DQorCQlydGVf bWVtY3B5KHNlc3MtPmF1dGgua2V5LCBhdXRoX3hmb3JtLT5rZXkuZGF0YSwNCisJCQkgICBhdXRo X3hmb3JtLT5rZXkubGVuZ3RoKTsNCisJCWlmIChnZW5lcmF0ZV9wYXJ0aWFsX2hhc2goc2Vzcykp DQorCQkJcmV0dXJuIC0xOw0KKwkJYnJlYWs7DQorCWNhc2UgUlRFX0NSWVBUT19BVVRIX1NIQTNf MjI0Og0KKwkJc2Vzcy0+YXV0aC5hbGdvID0gQ0NQX0FVVEhfQUxHT19TSEEzXzIyNDsNCisJCXNl c3MtPmF1dGguZW5naW5lID0gQ0NQX0VOR0lORV9TSEE7DQorCQlzZXNzLT5hdXRoLnV0LnNoYV90 eXBlID0gQ0NQX1NIQTNfVFlQRV8yMjQ7DQorCQlzZXNzLT5hdXRoLmN0eF9sZW4gPSBDQ1BfU0hB M19DVFhfU0laRTsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0gQ0NQX1NIQTNfQ1RYX1NJWkUgLSBT SEEyMjRfRElHRVNUX1NJWkU7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hB M18yMjRfSE1BQzoNCisJCWlmIChhdXRoX3hmb3JtLT5rZXkubGVuZ3RoID4gU0hBM18yMjRfQkxP Q0tfU0laRSkNCisJCQlyZXR1cm4gLTE7DQorCQlzZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9B TEdPX1NIQTNfMjI0X0hNQUM7DQorCQlzZXNzLT5hdXRoLmVuZ2luZSA9IENDUF9FTkdJTkVfU0hB Ow0KKwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlwZSA9IENDUF9TSEEzX1RZUEVfMjI0Ow0KKwkJc2Vz cy0+YXV0aC5jdHhfbGVuID0gQ0NQX1NIQTNfQ1RYX1NJWkU7DQorCQlzZXNzLT5hdXRoLm9mZnNl dCA9IENDUF9TSEEzX0NUWF9TSVpFIC0gU0hBMjI0X0RJR0VTVF9TSVpFOw0KKwkJc2Vzcy0+YXV0 aC5ibG9ja19zaXplID0gU0hBM18yMjRfQkxPQ0tfU0laRTsNCisJCXNlc3MtPmF1dGgua2V5X2xl bmd0aCA9IGF1dGhfeGZvcm0tPmtleS5sZW5ndGg7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5rZXks IDAsIHNlc3MtPmF1dGguYmxvY2tfc2l6ZSk7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5wcmVfY29t cHV0ZSwgMCwgMiAqIHNlc3MtPmF1dGguY3R4X2xlbik7DQorCQlydGVfbWVtY3B5KHNlc3MtPmF1 dGgua2V5LCBhdXRoX3hmb3JtLT5rZXkuZGF0YSwNCisJCQkgICBhdXRoX3hmb3JtLT5rZXkubGVu Z3RoKTsNCisJCWlmIChnZW5lcmF0ZV9wYXJ0aWFsX2hhc2goc2VzcykpDQorCQkJcmV0dXJuIC0x Ow0KKwkJYnJlYWs7DQorCWNhc2UgUlRFX0NSWVBUT19BVVRIX1NIQTI1NjoNCisJCXNlc3MtPmF1 dGguYWxnbyA9IENDUF9BVVRIX0FMR09fU0hBMjU2Ow0KKwkJc2Vzcy0+YXV0aC5lbmdpbmUgPSBD Q1BfRU5HSU5FX1NIQTsNCisJCXNlc3MtPmF1dGgudXQuc2hhX3R5cGUgPSBDQ1BfU0hBX1RZUEVf MjU2Ow0KKwkJc2Vzcy0+YXV0aC5jdHggPSAodm9pZCAqKWNjcF9zaGEyNTZfaW5pdDsNCisJCXNl c3MtPmF1dGguY3R4X2xlbiA9IENDUF9TQl9CWVRFUzsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0g Q0NQX1NCX0JZVEVTIC0gU0hBMjU2X0RJR0VTVF9TSVpFOw0KKwkJYnJlYWs7DQorCWNhc2UgUlRF X0NSWVBUT19BVVRIX1NIQTI1Nl9ITUFDOg0KKwkJaWYgKGF1dGhfeGZvcm0tPmtleS5sZW5ndGgg PiBTSEEyNTZfQkxPQ0tfU0laRSkNCisJCQlyZXR1cm4gLTE7DQorCQlzZXNzLT5hdXRoLmFsZ28g PSBDQ1BfQVVUSF9BTEdPX1NIQTI1Nl9ITUFDOw0KKwkJc2Vzcy0+YXV0aC5lbmdpbmUgPSBDQ1Bf RU5HSU5FX1NIQTsNCisJCXNlc3MtPmF1dGgudXQuc2hhX3R5cGUgPSBDQ1BfU0hBX1RZUEVfMjU2 Ow0KKwkJc2Vzcy0+YXV0aC5jdHhfbGVuID0gQ0NQX1NCX0JZVEVTOw0KKwkJc2Vzcy0+YXV0aC5v ZmZzZXQgPSBDQ1BfU0JfQllURVMgLSBTSEEyNTZfRElHRVNUX1NJWkU7DQorCQlzZXNzLT5hdXRo LmJsb2NrX3NpemUgPSBTSEEyNTZfQkxPQ0tfU0laRTsNCisJCXNlc3MtPmF1dGgua2V5X2xlbmd0 aCA9IGF1dGhfeGZvcm0tPmtleS5sZW5ndGg7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5rZXksIDAs IHNlc3MtPmF1dGguYmxvY2tfc2l6ZSk7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5wcmVfY29tcHV0 ZSwgMCwgc2Vzcy0+YXV0aC5jdHhfbGVuIDw8IDEpOw0KKwkJcnRlX21lbWNweShzZXNzLT5hdXRo LmtleSwgYXV0aF94Zm9ybS0+a2V5LmRhdGEsDQorCQkJICAgYXV0aF94Zm9ybS0+a2V5Lmxlbmd0 aCk7DQorCQlpZiAoZ2VuZXJhdGVfcGFydGlhbF9oYXNoKHNlc3MpKQ0KKwkJCXJldHVybiAtMTsN CisJCWJyZWFrOw0KKwljYXNlIFJURV9DUllQVE9fQVVUSF9TSEEzXzI1NjoNCisJCXNlc3MtPmF1 dGguYWxnbyA9IENDUF9BVVRIX0FMR09fU0hBM18yNTY7DQorCQlzZXNzLT5hdXRoLmVuZ2luZSA9 IENDUF9FTkdJTkVfU0hBOw0KKwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlwZSA9IENDUF9TSEEzX1RZ UEVfMjU2Ow0KKwkJc2Vzcy0+YXV0aC5jdHhfbGVuID0gQ0NQX1NIQTNfQ1RYX1NJWkU7DQorCQlz ZXNzLT5hdXRoLm9mZnNldCA9IENDUF9TSEEzX0NUWF9TSVpFIC0gU0hBMjU2X0RJR0VTVF9TSVpF Ow0KKwkJYnJlYWs7DQorCWNhc2UgUlRFX0NSWVBUT19BVVRIX1NIQTNfMjU2X0hNQUM6DQorCQlp ZiAoYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aCA+IFNIQTNfMjU2X0JMT0NLX1NJWkUpDQorCQkJcmV0 dXJuIC0xOw0KKwkJc2Vzcy0+YXV0aC5hbGdvID0gQ0NQX0FVVEhfQUxHT19TSEEzXzI1Nl9ITUFD Ow0KKwkJc2Vzcy0+YXV0aC5lbmdpbmUgPSBDQ1BfRU5HSU5FX1NIQTsNCisJCXNlc3MtPmF1dGgu dXQuc2hhX3R5cGUgPSBDQ1BfU0hBM19UWVBFXzI1NjsNCisJCXNlc3MtPmF1dGguY3R4X2xlbiA9 IENDUF9TSEEzX0NUWF9TSVpFOw0KKwkJc2Vzcy0+YXV0aC5vZmZzZXQgPSBDQ1BfU0hBM19DVFhf U0laRSAtIFNIQTI1Nl9ESUdFU1RfU0laRTsNCisJCXNlc3MtPmF1dGguYmxvY2tfc2l6ZSA9IFNI QTNfMjU2X0JMT0NLX1NJWkU7DQorCQlzZXNzLT5hdXRoLmtleV9sZW5ndGggPSBhdXRoX3hmb3Jt LT5rZXkubGVuZ3RoOw0KKwkJbWVtc2V0KHNlc3MtPmF1dGgua2V5LCAwLCBzZXNzLT5hdXRoLmJs b2NrX3NpemUpOw0KKwkJbWVtc2V0KHNlc3MtPmF1dGgucHJlX2NvbXB1dGUsIDAsIDIgKiBzZXNz LT5hdXRoLmN0eF9sZW4pOw0KKwkJcnRlX21lbWNweShzZXNzLT5hdXRoLmtleSwgYXV0aF94Zm9y bS0+a2V5LmRhdGEsDQorCQkJICAgYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aCk7DQorCQlpZiAoZ2Vu ZXJhdGVfcGFydGlhbF9oYXNoKHNlc3MpKQ0KKwkJCXJldHVybiAtMTsNCisJCWJyZWFrOw0KKwlj YXNlIFJURV9DUllQVE9fQVVUSF9TSEEzODQ6DQorCQlzZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVU SF9BTEdPX1NIQTM4NDsNCisJCXNlc3MtPmF1dGguZW5naW5lID0gQ0NQX0VOR0lORV9TSEE7DQor CQlzZXNzLT5hdXRoLnV0LnNoYV90eXBlID0gQ0NQX1NIQV9UWVBFXzM4NDsNCisJCXNlc3MtPmF1 dGguY3R4ID0gKHZvaWQgKiljY3Bfc2hhMzg0X2luaXQ7DQorCQlzZXNzLT5hdXRoLmN0eF9sZW4g PSBDQ1BfU0JfQllURVMgPDwgMTsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0gKENDUF9TQl9CWVRF UyA8PCAxKSAtIFNIQTM4NF9ESUdFU1RfU0laRTsNCisJCWJyZWFrOw0KKwljYXNlIFJURV9DUllQ VE9fQVVUSF9TSEEzODRfSE1BQzoNCisJCWlmIChhdXRoX3hmb3JtLT5rZXkubGVuZ3RoID4gU0hB Mzg0X0JMT0NLX1NJWkUpDQorCQkJcmV0dXJuIC0xOw0KKwkJc2Vzcy0+YXV0aC5hbGdvID0gQ0NQ X0FVVEhfQUxHT19TSEEzODRfSE1BQzsNCisJCXNlc3MtPmF1dGguZW5naW5lID0gQ0NQX0VOR0lO RV9TSEE7DQorCQlzZXNzLT5hdXRoLnV0LnNoYV90eXBlID0gQ0NQX1NIQV9UWVBFXzM4NDsNCisJ CXNlc3MtPmF1dGguY3R4X2xlbiA9IENDUF9TQl9CWVRFUyA8PCAxOw0KKwkJc2Vzcy0+YXV0aC5v ZmZzZXQgPSAoQ0NQX1NCX0JZVEVTIDw8IDEpIC0gU0hBMzg0X0RJR0VTVF9TSVpFOw0KKwkJc2Vz cy0+YXV0aC5ibG9ja19zaXplID0gU0hBMzg0X0JMT0NLX1NJWkU7DQorCQlzZXNzLT5hdXRoLmtl eV9sZW5ndGggPSBhdXRoX3hmb3JtLT5rZXkubGVuZ3RoOw0KKwkJbWVtc2V0KHNlc3MtPmF1dGgu a2V5LCAwLCBzZXNzLT5hdXRoLmJsb2NrX3NpemUpOw0KKwkJbWVtc2V0KHNlc3MtPmF1dGgucHJl X2NvbXB1dGUsIDAsIHNlc3MtPmF1dGguY3R4X2xlbiA8PCAxKTsNCisJCXJ0ZV9tZW1jcHkoc2Vz cy0+YXV0aC5rZXksIGF1dGhfeGZvcm0tPmtleS5kYXRhLA0KKwkJCSAgIGF1dGhfeGZvcm0tPmtl eS5sZW5ndGgpOw0KKwkJaWYgKGdlbmVyYXRlX3BhcnRpYWxfaGFzaChzZXNzKSkNCisJCQlyZXR1 cm4gLTE7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hBM18zODQ6DQorCQlz ZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9BTEdPX1NIQTNfMzg0Ow0KKwkJc2Vzcy0+YXV0aC5l bmdpbmUgPSBDQ1BfRU5HSU5FX1NIQTsNCisJCXNlc3MtPmF1dGgudXQuc2hhX3R5cGUgPSBDQ1Bf U0hBM19UWVBFXzM4NDsNCisJCXNlc3MtPmF1dGguY3R4X2xlbiA9IENDUF9TSEEzX0NUWF9TSVpF Ow0KKwkJc2Vzcy0+YXV0aC5vZmZzZXQgPSBDQ1BfU0hBM19DVFhfU0laRSAtIFNIQTM4NF9ESUdF U1RfU0laRTsNCisJCWJyZWFrOw0KKwljYXNlIFJURV9DUllQVE9fQVVUSF9TSEEzXzM4NF9ITUFD Og0KKwkJaWYgKGF1dGhfeGZvcm0tPmtleS5sZW5ndGggPiBTSEEzXzM4NF9CTE9DS19TSVpFKQ0K KwkJCXJldHVybiAtMTsNCisJCXNlc3MtPmF1dGguYWxnbyA9IENDUF9BVVRIX0FMR09fU0hBM18z ODRfSE1BQzsNCisJCXNlc3MtPmF1dGguZW5naW5lID0gQ0NQX0VOR0lORV9TSEE7DQorCQlzZXNz LT5hdXRoLnV0LnNoYV90eXBlID0gQ0NQX1NIQTNfVFlQRV8zODQ7DQorCQlzZXNzLT5hdXRoLmN0 eF9sZW4gPSBDQ1BfU0hBM19DVFhfU0laRTsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0gQ0NQX1NI QTNfQ1RYX1NJWkUgLSBTSEEzODRfRElHRVNUX1NJWkU7DQorCQlzZXNzLT5hdXRoLmJsb2NrX3Np emUgPSBTSEEzXzM4NF9CTE9DS19TSVpFOw0KKwkJc2Vzcy0+YXV0aC5rZXlfbGVuZ3RoID0gYXV0 aF94Zm9ybS0+a2V5Lmxlbmd0aDsNCisJCW1lbXNldChzZXNzLT5hdXRoLmtleSwgMCwgc2Vzcy0+ YXV0aC5ibG9ja19zaXplKTsNCisJCW1lbXNldChzZXNzLT5hdXRoLnByZV9jb21wdXRlLCAwLCAy ICogc2Vzcy0+YXV0aC5jdHhfbGVuKTsNCisJCXJ0ZV9tZW1jcHkoc2Vzcy0+YXV0aC5rZXksIGF1 dGhfeGZvcm0tPmtleS5kYXRhLA0KKwkJCSAgIGF1dGhfeGZvcm0tPmtleS5sZW5ndGgpOw0KKwkJ aWYgKGdlbmVyYXRlX3BhcnRpYWxfaGFzaChzZXNzKSkNCisJCQlyZXR1cm4gLTE7DQorCQlicmVh azsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hBNTEyOg0KKwkJc2Vzcy0+YXV0aC5hbGdvID0g Q0NQX0FVVEhfQUxHT19TSEE1MTI7DQorCQlzZXNzLT5hdXRoLmVuZ2luZSA9IENDUF9FTkdJTkVf U0hBOw0KKwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlwZSA9IENDUF9TSEFfVFlQRV81MTI7DQorCQlz ZXNzLT5hdXRoLmN0eCA9ICh2b2lkICopY2NwX3NoYTUxMl9pbml0Ow0KKwkJc2Vzcy0+YXV0aC5j dHhfbGVuID0gQ0NQX1NCX0JZVEVTIDw8IDE7DQorCQlzZXNzLT5hdXRoLm9mZnNldCA9IChDQ1Bf U0JfQllURVMgPDwgMSkgLSBTSEE1MTJfRElHRVNUX1NJWkU7DQorCQlicmVhazsNCisJY2FzZSBS VEVfQ1JZUFRPX0FVVEhfU0hBNTEyX0hNQUM6DQorCQlpZiAoYXV0aF94Zm9ybS0+a2V5Lmxlbmd0 aCA+IFNIQTUxMl9CTE9DS19TSVpFKQ0KKwkJCXJldHVybiAtMTsNCisJCXNlc3MtPmF1dGguYWxn byA9IENDUF9BVVRIX0FMR09fU0hBNTEyX0hNQUM7DQorCQlzZXNzLT5hdXRoLmVuZ2luZSA9IEND UF9FTkdJTkVfU0hBOw0KKwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlwZSA9IENDUF9TSEFfVFlQRV81 MTI7DQorCQlzZXNzLT5hdXRoLmN0eF9sZW4gPSBDQ1BfU0JfQllURVMgPDwgMTsNCisJCXNlc3Mt PmF1dGgub2Zmc2V0ID0gKENDUF9TQl9CWVRFUyA8PCAxKSAtIFNIQTUxMl9ESUdFU1RfU0laRTsN CisJCXNlc3MtPmF1dGguYmxvY2tfc2l6ZSA9IFNIQTUxMl9CTE9DS19TSVpFOw0KKwkJc2Vzcy0+ YXV0aC5rZXlfbGVuZ3RoID0gYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aDsNCisJCW1lbXNldChzZXNz LT5hdXRoLmtleSwgMCwgc2Vzcy0+YXV0aC5ibG9ja19zaXplKTsNCisJCW1lbXNldChzZXNzLT5h dXRoLnByZV9jb21wdXRlLCAwLCBzZXNzLT5hdXRoLmN0eF9sZW4gPDwgMSk7DQorCQlydGVfbWVt Y3B5KHNlc3MtPmF1dGgua2V5LCBhdXRoX3hmb3JtLT5rZXkuZGF0YSwNCisJCQkgICBhdXRoX3hm b3JtLT5rZXkubGVuZ3RoKTsNCisJCWlmIChnZW5lcmF0ZV9wYXJ0aWFsX2hhc2goc2VzcykpDQor CQkJcmV0dXJuIC0xOw0KKwkJYnJlYWs7DQorCWNhc2UgUlRFX0NSWVBUT19BVVRIX1NIQTNfNTEy Og0KKwkJc2Vzcy0+YXV0aC5hbGdvID0gQ0NQX0FVVEhfQUxHT19TSEEzXzUxMjsNCisJCXNlc3Mt PmF1dGguZW5naW5lID0gQ0NQX0VOR0lORV9TSEE7DQorCQlzZXNzLT5hdXRoLnV0LnNoYV90eXBl ID0gQ0NQX1NIQTNfVFlQRV81MTI7DQorCQlzZXNzLT5hdXRoLmN0eF9sZW4gPSBDQ1BfU0hBM19D VFhfU0laRTsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0gQ0NQX1NIQTNfQ1RYX1NJWkUgLSBTSEE1 MTJfRElHRVNUX1NJWkU7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfU0hBM181 MTJfSE1BQzoNCisJCWlmIChhdXRoX3hmb3JtLT5rZXkubGVuZ3RoID4gU0hBM181MTJfQkxPQ0tf U0laRSkNCisJCQlyZXR1cm4gLTE7DQorCQlzZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9BTEdP X1NIQTNfNTEyX0hNQUM7DQorCQlzZXNzLT5hdXRoLmVuZ2luZSA9IENDUF9FTkdJTkVfU0hBOw0K KwkJc2Vzcy0+YXV0aC51dC5zaGFfdHlwZSA9IENDUF9TSEEzX1RZUEVfNTEyOw0KKwkJc2Vzcy0+ YXV0aC5jdHhfbGVuID0gQ0NQX1NIQTNfQ1RYX1NJWkU7DQorCQlzZXNzLT5hdXRoLm9mZnNldCA9 IENDUF9TSEEzX0NUWF9TSVpFIC0gU0hBNTEyX0RJR0VTVF9TSVpFOw0KKwkJc2Vzcy0+YXV0aC5i bG9ja19zaXplID0gU0hBM181MTJfQkxPQ0tfU0laRTsNCisJCXNlc3MtPmF1dGgua2V5X2xlbmd0 aCA9IGF1dGhfeGZvcm0tPmtleS5sZW5ndGg7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5rZXksIDAs IHNlc3MtPmF1dGguYmxvY2tfc2l6ZSk7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5wcmVfY29tcHV0 ZSwgMCwgMiAqIHNlc3MtPmF1dGguY3R4X2xlbik7DQorCQlydGVfbWVtY3B5KHNlc3MtPmF1dGgu a2V5LCBhdXRoX3hmb3JtLT5rZXkuZGF0YSwNCisJCQkgICBhdXRoX3hmb3JtLT5rZXkubGVuZ3Ro KTsNCisJCWlmIChnZW5lcmF0ZV9wYXJ0aWFsX2hhc2goc2VzcykpDQorCQkJcmV0dXJuIC0xOw0K KwkJYnJlYWs7DQorCWNhc2UgUlRFX0NSWVBUT19BVVRIX0FFU19DTUFDOg0KKwkJc2Vzcy0+YXV0 aC5hbGdvID0gQ0NQX0FVVEhfQUxHT19BRVNfQ01BQzsNCisJCXNlc3MtPmF1dGguZW5naW5lID0g Q0NQX0VOR0lORV9BRVM7DQorCQlzZXNzLT5hdXRoLnVtLmFlc19tb2RlID0gQ0NQX0FFU19NT0RF X0NNQUM7DQorCQlzZXNzLT5hdXRoLmtleV9sZW5ndGggPSBhdXRoX3hmb3JtLT5rZXkubGVuZ3Ro Ow0KKwkJLyoqPHBhZGRpbmcgYW5kIGhhc2ggcmVzdWx0Ki8NCisJCXNlc3MtPmF1dGguY3R4X2xl biA9IENDUF9TQl9CWVRFUyA8PCAxOw0KKwkJc2Vzcy0+YXV0aC5vZmZzZXQgPSBBRVNfQkxPQ0tf U0laRTsNCisJCXNlc3MtPmF1dGguYmxvY2tfc2l6ZSA9IEFFU19CTE9DS19TSVpFOw0KKwkJaWYg KHNlc3MtPmF1dGgua2V5X2xlbmd0aCA9PSAxNikNCisJCQlzZXNzLT5hdXRoLnV0LmFlc190eXBl ID0gQ0NQX0FFU19UWVBFXzEyODsNCisJCWVsc2UgaWYgKHNlc3MtPmF1dGgua2V5X2xlbmd0aCA9 PSAyNCkNCisJCQlzZXNzLT5hdXRoLnV0LmFlc190eXBlID0gQ0NQX0FFU19UWVBFXzE5MjsNCisJ CWVsc2UgaWYgKHNlc3MtPmF1dGgua2V5X2xlbmd0aCA9PSAzMikNCisJCQlzZXNzLT5hdXRoLnV0 LmFlc190eXBlID0gQ0NQX0FFU19UWVBFXzI1NjsNCisJCWVsc2Ugew0KKwkJCUNDUF9MT0dfRVJS KCJJbnZhbGlkIENNQUMga2V5IGxlbmd0aCIpOw0KKwkJCXJldHVybiAtMTsNCisJCX0NCisJCXJ0 ZV9tZW1jcHkoc2Vzcy0+YXV0aC5rZXksIGF1dGhfeGZvcm0tPmtleS5kYXRhLA0KKwkJCSAgIHNl c3MtPmF1dGgua2V5X2xlbmd0aCk7DQorCQlmb3IgKGkgPSAwOyBpIDwgc2Vzcy0+YXV0aC5rZXlf bGVuZ3RoOyBpKyspDQorCQkJc2Vzcy0+YXV0aC5rZXlfY2NwW3Nlc3MtPmF1dGgua2V5X2xlbmd0 aCAtIGkgLSAxXSA9DQorCQkJCXNlc3MtPmF1dGgua2V5W2ldOw0KKwkJaWYgKGdlbmVyYXRlX3N1 YmtleXMoc2VzcykpDQorCQkJcmV0dXJuIC0xOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlD Q1BfTE9HX0VSUigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvIik7DQorCQlyZXR1cm4gLTE7DQorCX0N CisjZWxzZQ0KKwlzd2l0Y2ggKGF1dGhfeGZvcm0tPmFsZ28pIHsNCisJY2FzZSBSVEVfQ1JZUFRP X0FVVEhfU0hBMV9ITUFDOg0KKwkJaWYgKGF1dGhfeGZvcm0tPmtleS5sZW5ndGggPiBTSEExX0JM T0NLX1NJWkUpDQorCQkJcmV0dXJuIC0xOw0KKwkJc2Vzcy0+YXV0aC5hbGdvID0gQ0NQX0FVVEhf QUxHT19TSEExX0hNQUM7DQorCQlzZXNzLT5hdXRoLm9mZnNldCA9IENDUF9TQl9CWVRFUyAtIFNI QTFfRElHRVNUX1NJWkU7DQorCQlzZXNzLT5hdXRoLmJsb2NrX3NpemUgPSBTSEExX0JMT0NLX1NJ WkU7DQorCQlzZXNzLT5hdXRoLmtleV9sZW5ndGggPSBhdXRoX3hmb3JtLT5rZXkubGVuZ3RoOw0K KwkJbWVtc2V0KHNlc3MtPmF1dGgua2V5LCAwLCBzZXNzLT5hdXRoLmJsb2NrX3NpemUpOw0KKwkJ cnRlX21lbWNweShzZXNzLT5hdXRoLmtleSwgYXV0aF94Zm9ybS0+a2V5LmRhdGEsDQorCQkJICAg YXV0aF94Zm9ybS0+a2V5Lmxlbmd0aCk7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FV VEhfU0hBMjI0X0hNQUM6DQorCQlpZiAoYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aCA+IFNIQTIyNF9C TE9DS19TSVpFKQ0KKwkJCXJldHVybiAtMTsNCisJCXNlc3MtPmF1dGguYWxnbyA9IENDUF9BVVRI X0FMR09fU0hBMjI0X0hNQUM7DQorCQlzZXNzLT5hdXRoLm9mZnNldCA9IENDUF9TQl9CWVRFUyAt IFNIQTIyNF9ESUdFU1RfU0laRTsNCisJCXNlc3MtPmF1dGguYmxvY2tfc2l6ZSA9IFNIQTIyNF9C TE9DS19TSVpFOw0KKwkJc2Vzcy0+YXV0aC5rZXlfbGVuZ3RoID0gYXV0aF94Zm9ybS0+a2V5Lmxl bmd0aDsNCisJCW1lbXNldChzZXNzLT5hdXRoLmtleSwgMCwgc2Vzcy0+YXV0aC5ibG9ja19zaXpl KTsNCisJCXJ0ZV9tZW1jcHkoc2Vzcy0+YXV0aC5rZXksIGF1dGhfeGZvcm0tPmtleS5kYXRhLA0K KwkJCSAgIGF1dGhfeGZvcm0tPmtleS5sZW5ndGgpOw0KKwkJYnJlYWs7DQorCWNhc2UgUlRFX0NS WVBUT19BVVRIX1NIQTI1Nl9ITUFDOg0KKwkJaWYgKGF1dGhfeGZvcm0tPmtleS5sZW5ndGggPiBT SEEyNTZfQkxPQ0tfU0laRSkNCisJCQlyZXR1cm4gLTE7DQorCQlzZXNzLT5hdXRoLmFsZ28gPSBD Q1BfQVVUSF9BTEdPX1NIQTI1Nl9ITUFDOw0KKwkJc2Vzcy0+YXV0aC5vZmZzZXQgPSBDQ1BfU0Jf QllURVMgLSBTSEEyNTZfRElHRVNUX1NJWkU7DQorCQlzZXNzLT5hdXRoLmJsb2NrX3NpemUgPSBT SEEyNTZfQkxPQ0tfU0laRTsNCisJCXNlc3MtPmF1dGgua2V5X2xlbmd0aCA9IGF1dGhfeGZvcm0t PmtleS5sZW5ndGg7DQorCQltZW1zZXQoc2Vzcy0+YXV0aC5rZXksIDAsIHNlc3MtPmF1dGguYmxv Y2tfc2l6ZSk7DQorCQlydGVfbWVtY3B5KHNlc3MtPmF1dGgua2V5LCBhdXRoX3hmb3JtLT5rZXku ZGF0YSwNCisJCQkgICBhdXRoX3hmb3JtLT5rZXkubGVuZ3RoKTsNCisJCWJyZWFrOw0KKwljYXNl IFJURV9DUllQVE9fQVVUSF9TSEEzODRfSE1BQzoNCisJCWlmIChhdXRoX3hmb3JtLT5rZXkubGVu Z3RoID4gU0hBMzg0X0JMT0NLX1NJWkUpDQorCQkJcmV0dXJuIC0xOw0KKwkJc2Vzcy0+YXV0aC5h bGdvID0gQ0NQX0FVVEhfQUxHT19TSEEzODRfSE1BQzsNCisJCXNlc3MtPmF1dGgub2Zmc2V0ID0g KENDUF9TQl9CWVRFUyA8PCAxKSAtIFNIQTM4NF9ESUdFU1RfU0laRTsNCisJCXNlc3MtPmF1dGgu YmxvY2tfc2l6ZSA9IFNIQTM4NF9CTE9DS19TSVpFOw0KKwkJc2Vzcy0+YXV0aC5rZXlfbGVuZ3Ro ID0gYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aDsNCisJCW1lbXNldChzZXNzLT5hdXRoLmtleSwgMCwg c2Vzcy0+YXV0aC5ibG9ja19zaXplKTsNCisJCXJ0ZV9tZW1jcHkoc2Vzcy0+YXV0aC5rZXksIGF1 dGhfeGZvcm0tPmtleS5kYXRhLA0KKwkJCSAgIGF1dGhfeGZvcm0tPmtleS5sZW5ndGgpOw0KKwkJ YnJlYWs7DQorCWNhc2UgUlRFX0NSWVBUT19BVVRIX1NIQTUxMl9ITUFDOg0KKwkJaWYgKGF1dGhf eGZvcm0tPmtleS5sZW5ndGggPiBTSEE1MTJfQkxPQ0tfU0laRSkNCisJCQlyZXR1cm4gLTE7DQor CQlzZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9BTEdPX1NIQTUxMl9ITUFDOw0KKwkJc2Vzcy0+ YXV0aC5vZmZzZXQgPSAoQ0NQX1NCX0JZVEVTIDw8IDEpIC0gU0hBNTEyX0RJR0VTVF9TSVpFOw0K KwkJc2Vzcy0+YXV0aC5ibG9ja19zaXplID0gU0hBNTEyX0JMT0NLX1NJWkU7DQorCQlzZXNzLT5h dXRoLmtleV9sZW5ndGggPSBhdXRoX3hmb3JtLT5rZXkubGVuZ3RoOw0KKwkJbWVtc2V0KHNlc3Mt PmF1dGgua2V5LCAwLCBzZXNzLT5hdXRoLmJsb2NrX3NpemUpOw0KKwkJcnRlX21lbWNweShzZXNz LT5hdXRoLmtleSwgYXV0aF94Zm9ybS0+a2V5LmRhdGEsDQorCQkJICAgYXV0aF94Zm9ybS0+a2V5 Lmxlbmd0aCk7DQorCQlicmVhazsNCisJY2FzZSBSVEVfQ1JZUFRPX0FVVEhfTUQ1X0hNQUM6DQor CQlzZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9BTEdPX01ENV9ITUFDOw0KKwkJc2Vzcy0+YXV0 aC5vZmZzZXQgPSAoQ0NQX1NCX0JZVEVTIDw8IDEpIC0gTUQ1X0RJR0VTVF9TSVpFOw0KKwkJc2Vz cy0+YXV0aC5rZXlfbGVuZ3RoID0gYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aDsNCisJCXNlc3MtPmF1 dGguYmxvY2tfc2l6ZSA9IE1ENV9CTE9DS19TSVpFOw0KKwkJbWVtc2V0KHNlc3MtPmF1dGgua2V5 LCAwLCBzZXNzLT5hdXRoLmJsb2NrX3NpemUpOw0KKwkJcnRlX21lbWNweShzZXNzLT5hdXRoLmtl eSwgYXV0aF94Zm9ybS0+a2V5LmRhdGEsDQorCQkJICAgYXV0aF94Zm9ybS0+a2V5Lmxlbmd0aCk7 DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCUNDUF9MT0dfRVJSKCJVbnN1cHBvcnRlZCBoYXNo IGFsZ28iKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKyNlbmRpZg0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludA0KK2NjcF9jb25maWd1cmVfc2Vzc2lvbl9hZWFkKHN0cnVjdCBjY3Bfc2Vz c2lvbiAqc2VzcywNCisJCQkgICBjb25zdCBzdHJ1Y3QgcnRlX2NyeXB0b19zeW1feGZvcm0gKnhm b3JtKQ0KK3sNCisJY29uc3Qgc3RydWN0IHJ0ZV9jcnlwdG9fYWVhZF94Zm9ybSAqYWVhZF94Zm9y bSA9IE5VTEw7DQorCXNpemVfdCBpLCBjdHJfa2V5X2xlbjsNCisNCisJYWVhZF94Zm9ybSA9ICZ4 Zm9ybS0+YWVhZDsNCisNCisJLyogc2V0IGl2IHBhcmFtZXRlcnMgKi8NCisJc2Vzcy0+aXYub2Zm c2V0ID0gYWVhZF94Zm9ybS0+aXYub2Zmc2V0Ow0KKwlzZXNzLT5pdi5sZW5ndGggPSBhZWFkX3hm b3JtLT5pdi5sZW5ndGg7DQorDQorCXN3aXRjaCAoYWVhZF94Zm9ybS0+YWxnbykgew0KKwljYXNl IFJURV9DUllQVE9fQUVBRF9BRVNfR0NNOg0KKwkJc2Vzcy0+Y2lwaGVyLmFsZ28gPSBDQ1BfQ0lQ SEVSX0FMR09fQUVTX0dDTTsNCisJCXNlc3MtPmNpcGhlci51bS5hZXNfbW9kZSA9IENDUF9BRVNf TU9ERV9HQ1RSOw0KKwkJc2Vzcy0+Y2lwaGVyLmVuZ2luZSA9IENDUF9FTkdJTkVfQUVTOw0KKwkJ aWYgKHNlc3MtPmNpcGhlci5rZXlfbGVuZ3RoID09IDE2KQ0KKwkJCXNlc3MtPmNpcGhlci51dC5h ZXNfdHlwZSA9IENDUF9BRVNfVFlQRV8xMjg7DQorCQllbHNlIGlmIChzZXNzLT5jaXBoZXIua2V5 X2xlbmd0aCA9PSAyNCkNCisJCQlzZXNzLT5jaXBoZXIudXQuYWVzX3R5cGUgPSBDQ1BfQUVTX1RZ UEVfMTkyOw0KKwkJZWxzZSBpZiAoc2Vzcy0+Y2lwaGVyLmtleV9sZW5ndGggPT0gMzIpDQorCQkJ c2Vzcy0+Y2lwaGVyLnV0LmFlc190eXBlID0gQ0NQX0FFU19UWVBFXzI1NjsNCisJCWVsc2Ugew0K KwkJCUNDUF9MT0dfRVJSKCJJbnZhbGlkIGFlYWQga2V5IGxlbmd0aCIpOw0KKwkJCXJldHVybiAt MTsNCisJCX0NCisJCWN0cl9rZXlfbGVuID0gc2Vzcy0+Y2lwaGVyLmtleV9sZW5ndGg7DQorCQlm b3IgKGkgPSAwOyBpIDwgY3RyX2tleV9sZW47IGkrKykNCisJCQlzZXNzLT5jaXBoZXIua2V5X2Nj cFtjdHJfa2V5X2xlbiAtIGkgLSAxXSA9DQorCQkJCXNlc3MtPmNpcGhlci5rZXlbaV07DQorCQlz ZXNzLT5hdXRoLmFsZ28gPSBDQ1BfQVVUSF9BTEdPX0FFU19HQ007DQorCQlzZXNzLT5hdXRoLmVu Z2luZSA9IENDUF9FTkdJTkVfQUVTOw0KKwkJc2Vzcy0+YXV0aC51bS5hZXNfbW9kZSA9IENDUF9B RVNfTU9ERV9HSEFTSDsNCisJCXNlc3MtPmF1dGguY3R4X2xlbiA9IENDUF9TQl9CWVRFUzsNCisJ CXNlc3MtPmF1dGgub2Zmc2V0ID0gMDsNCisJCXNlc3MtPmF1dGguYmxvY2tfc2l6ZSA9IEFFU19C TE9DS19TSVpFOw0KKwkJc2Vzcy0+YXV0aC5hYWRfbGVuZ3RoID0gYWVhZF94Zm9ybS0+YWFkX2xl bmd0aDsNCisJCXNlc3MtPmNtZF9pZCA9IENDUF9DTURfQ09NQklORUQ7DQorCQlicmVhazsNCisJ ZGVmYXVsdDoNCisJCXJldHVybiAtRU5PVFNVUDsNCisJfQ0KKwlzZXNzLT5jaXBoZXIubm9uY2Vf cGh5cyA9IHJ0ZV9tZW1fdmlydDJwaHkoc2Vzcy0+Y2lwaGVyLm5vbmNlKTsNCisJc2Vzcy0+Y2lw aGVyLmtleV9waHlzID0gcnRlX21lbV92aXJ0MnBoeShzZXNzLT5jaXBoZXIua2V5X2NjcCk7DQor CXJldHVybiAwOw0KK30NCisNCitpbnQNCitjY3Bfc2V0X3Nlc3Npb25fcGFyYW1ldGVycyhzdHJ1 Y3QgY2NwX3Nlc3Npb24gKnNlc3MsDQorCQkJICAgY29uc3Qgc3RydWN0IHJ0ZV9jcnlwdG9fc3lt X3hmb3JtICp4Zm9ybSkNCit7DQorCWNvbnN0IHN0cnVjdCBydGVfY3J5cHRvX3N5bV94Zm9ybSAq Y2lwaGVyX3hmb3JtID0gTlVMTDsNCisJY29uc3Qgc3RydWN0IHJ0ZV9jcnlwdG9fc3ltX3hmb3Jt ICphdXRoX3hmb3JtID0gTlVMTDsNCisJY29uc3Qgc3RydWN0IHJ0ZV9jcnlwdG9fc3ltX3hmb3Jt ICphZWFkX3hmb3JtID0gTlVMTDsNCisJaW50IHJldCA9IDA7DQorDQorCXNlc3MtPmNtZF9pZCA9 IGNjcF9nZXRfY21kX2lkKHhmb3JtKTsNCisNCisJc3dpdGNoIChzZXNzLT5jbWRfaWQpIHsNCisJ Y2FzZSBDQ1BfQ01EX0NJUEhFUjoNCisJCWNpcGhlcl94Zm9ybSA9IHhmb3JtOw0KKwkJYnJlYWs7 DQorCWNhc2UgQ0NQX0NNRF9BVVRIOg0KKwkJYXV0aF94Zm9ybSA9IHhmb3JtOw0KKwkJYnJlYWs7 DQorCWNhc2UgQ0NQX0NNRF9DSVBIRVJfSEFTSDoNCisJCWNpcGhlcl94Zm9ybSA9IHhmb3JtOw0K KwkJYXV0aF94Zm9ybSA9IHhmb3JtLT5uZXh0Ow0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0NNRF9I QVNIX0NJUEhFUjoNCisJCWF1dGhfeGZvcm0gPSB4Zm9ybTsNCisJCWNpcGhlcl94Zm9ybSA9IHhm b3JtLT5uZXh0Ow0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0NNRF9DT01CSU5FRDoNCisJCWFlYWRf eGZvcm0gPSB4Zm9ybTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJQ0NQX0xPR19FUlIoIlVu c3VwcG9ydGVkIGNtZF9pZCIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8qIERlZmF1bHQg SVYgbGVuZ3RoID0gMCAqLw0KKwlzZXNzLT5pdi5sZW5ndGggPSAwOw0KKwlpZiAoY2lwaGVyX3hm b3JtKSB7DQorCQlyZXQgPSBjY3BfY29uZmlndXJlX3Nlc3Npb25fY2lwaGVyKHNlc3MsIGNpcGhl cl94Zm9ybSk7DQorCQlpZiAocmV0ICE9IDApIHsNCisJCQlDQ1BfTE9HX0VSUigiSW52YWxpZC91 bnN1cHBvcnRlZCBjaXBoZXIgcGFyYW1ldGVycyIpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQor CX0NCisJaWYgKGF1dGhfeGZvcm0pIHsNCisJCXJldCA9IGNjcF9jb25maWd1cmVfc2Vzc2lvbl9h dXRoKHNlc3MsIGF1dGhfeGZvcm0pOw0KKwkJaWYgKHJldCAhPSAwKSB7DQorCQkJQ0NQX0xPR19F UlIoIkludmFsaWQvdW5zdXBwb3J0ZWQgYXV0aCBwYXJhbWV0ZXJzIik7DQorCQkJcmV0dXJuIHJl dDsNCisJCX0NCisJfQ0KKwlpZiAoYWVhZF94Zm9ybSkgew0KKwkJcmV0ID0gY2NwX2NvbmZpZ3Vy ZV9zZXNzaW9uX2FlYWQoc2VzcywgYWVhZF94Zm9ybSk7DQorCQlpZiAocmV0ICE9IDApIHsNCisJ CQlDQ1BfTE9HX0VSUigiSW52YWxpZC91bnN1cHBvcnRlZCBhZWFkIHBhcmFtZXRlcnMiKTsNCisJ CQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwl9DQorCXJldHVybiByZXQ7DQorfQ0KKw0KKy8qIGNhbGN1 bGF0ZSBDQ1AgZGVzY3JpcHRvcnMgcmVxdWlyZW1lbnQgKi8NCitzdGF0aWMgaW5saW5lIGludA0K K2NjcF9jaXBoZXJfc2xvdChzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNlc3Npb24pDQorew0KKwlpbnQg Y291bnQgPSAwOw0KKw0KKwlzd2l0Y2ggKHNlc3Npb24tPmNpcGhlci5hbGdvKSB7DQorCWNhc2Ug Q0NQX0NJUEhFUl9BTEdPX0FFU19DQkM6DQorCQljb3VudCA9IDI7DQorCQkvKio8IG9wICsgcGFz c3Rocm91Z2ggZm9yIGl2Ki8NCisJCWJyZWFrOw0KKwljYXNlIENDUF9DSVBIRVJfQUxHT19BRVNf RUNCOg0KKwkJY291bnQgPSAxOw0KKwkJLyoqPG9ubHkgb3AqLw0KKwkJYnJlYWs7DQorCWNhc2Ug Q0NQX0NJUEhFUl9BTEdPX0FFU19DVFI6DQorCQljb3VudCA9IDI7DQorCQkvKio8IG9wICsgcGFz c3Rocm91Z2ggZm9yIGl2Ki8NCisJCWJyZWFrOw0KKwljYXNlIENDUF9DSVBIRVJfQUxHT18zREVT X0NCQzoNCisJCWNvdW50ID0gMjsNCisJCS8qKjwgb3AgKyBwYXNzdGhyb3VnaCBmb3IgaXYqLw0K KwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlDQ1BfTE9HX0VSUigiVW5zdXBwb3J0ZWQgQUxHTyAl ZCIsIHNlc3Npb24tPmNpcGhlci5hbGdvKTsNCisJfQ0KKwlyZXR1cm4gY291bnQ7DQorfQ0KKw0K K3N0YXRpYyBpbmxpbmUgaW50DQorY2NwX2F1dGhfc2xvdChzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNl c3Npb24pDQorew0KKwlpbnQgY291bnQgPSAwOw0KKw0KKwlzd2l0Y2ggKHNlc3Npb24tPmF1dGgu YWxnbykgew0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBMToNCisJY2FzZSBDQ1BfQVVUSF9BTEdP X1NIQTIyNDoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTI1NjoNCisJY2FzZSBDQ1BfQVVUSF9B TEdPX1NIQTM4NDoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTUxMjoNCisJCWNvdW50ID0gMzsN CisJCS8qKjwgb3AgKyBsc2IgcGFzc3Rocm91Z2ggY3B5IHRvL2Zyb20qLw0KKwkJYnJlYWs7DQor CWNhc2UgQ0NQX0FVVEhfQUxHT19TSEExX0hNQUM6DQorCWNhc2UgQ0NQX0FVVEhfQUxHT19TSEEy MjRfSE1BQzoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTI1Nl9ITUFDOg0KKwkJY291bnQgPSA2 Ow0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0FVVEhfQUxHT19TSEEzODRfSE1BQzoNCisJY2FzZSBD Q1BfQVVUSF9BTEdPX1NIQTUxMl9ITUFDOg0KKwkJY291bnQgPSA3Ow0KKwkJLyoqDQorCQkgKiAx LiBMb2FkIFBIYXNoMSA9IEgoayBeIGlwYWQpOyB0byBMU0INCisJCSAqIDIuIGdlbmVyYXRlIElI YXNoID0gSChoYXNoIG9uIG1lYXNzYWdlIHdpdGggUEhhc2gxDQorCQkgKiBhcyBpbml0IHZhbHVl cyk7DQorCQkgKiAzLiBSZXRyaWV2ZSBJSGFzaCAyIHNsb3RzIGZvciAzODQvNTEyDQorCQkgKiA0 LiBMb2FkIFBoYXNoMiA9IEgoayBeIG9wYWQpOyB0byBMU0INCisJCSAqIDUuIGdlbmVyYXRlIEZI YXNoID0gSChoYXNoIG9uIEloYXNoIHdpdGggUGhhc2gyDQorCQkgKiBhcyBpbml0IHZhbHVlKTsN CisJCSAqIDYuIFJldHJpZXZlIEhNQUMgb3V0cHV0IGZyb20gTFNCIHRvIGhvc3QgbWVtb3J5DQor CQkgKi8NCisJCWJyZWFrOw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBM18yMjQ6DQorCWNhc2Ug Q0NQX0FVVEhfQUxHT19TSEEzXzI1NjoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTNfMzg0Og0K KwljYXNlIENDUF9BVVRIX0FMR09fU0hBM181MTI6DQorCQljb3VudCA9IDE7DQorCQkvKio8IG9u bHkgb3AgY3R4IGFuZCBkc3QgaW4gaG9zdCBtZW1vcnkqLw0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQ X0FVVEhfQUxHT19TSEEzXzIyNF9ITUFDOg0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBM18yNTZf SE1BQzoNCisJCWNvdW50ID0gMzsNCisJCWJyZWFrOw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hB M18zODRfSE1BQzoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTNfNTEyX0hNQUM6DQorCQljb3Vu dCA9IDQ7DQorCQkvKioNCisJCSAqIDEuIE9wIHRvIFBlcmZvcm0gSWhhc2gNCisJCSAqIDIuIFJl dHJpZXZlIHJlc3VsdCBmcm9tIExTQiB0byBob3N0IG1lbW9yeQ0KKwkJICogMy4gUGVyZm9ybSBm aW5hbCBoYXNoDQorCQkgKi8NCisJCWJyZWFrOw0KKwljYXNlIENDUF9BVVRIX0FMR09fQUVTX0NN QUM6DQorCQljb3VudCA9IDQ7DQorCQkvKioNCisJCSAqIG9wDQorCQkgKiBleHRyYSBkZXNjcmlw dG9yIGluIHBhZGRpbmcgY2FzZQ0KKwkJICogKGsxL2syKDI1NToxMjgpIHdpdGggaXYoMTI3OjAp KQ0KKwkJICogUmV0cmlldmUgcmVzdWx0DQorCQkgKi8NCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0K KwkJQ0NQX0xPR19FUlIoIlVuc3VwcG9ydGVkIEFMR08gJWQiLCBzZXNzaW9uLT5jaXBoZXIuYWxn byk7DQorCX0NCisNCisJcmV0dXJuIGNvdW50Ow0KK30NCisNCitzdGF0aWMgaW50DQorY2NwX2Nv bWJpbmVkX21vZGVfc2xvdChzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNlc3Npb24pDQorew0KKwlpbnQg Y291bnQgPSAwOw0KKw0KKwlzd2l0Y2ggKHNlc3Npb24tPmNpcGhlci5hbGdvKSB7DQorCWNhc2Ug Q0NQX0NJUEhFUl9BTEdPX0FFU19HQ006DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCUNDUF9M T0dfRVJSKCJVbnN1cHBvcnRlZCBjb21iaW5lZCBjaXBoZXIgQUxHTyAlZCIsDQorCQkJICAgIHNl c3Npb24tPmNpcGhlci5hbGdvKTsNCisJfQ0KKwlzd2l0Y2ggKHNlc3Npb24tPmF1dGguYWxnbykg ew0KKwljYXNlIENDUF9BVVRIX0FMR09fQUVTX0dDTToNCisJCWNvdW50ID0gNTsNCisJCS8qKg0K KwkJICogMS4gUGFzc3RocnUgaXYNCisJCSAqIDIuIEhhc2ggQUFEDQorCQkgKiAzLiBHQ1RSDQor CQkgKiA0LiBSZWxvYWQgcGFzc3RocnUNCisJCSAqIDUuIEhhc2ggRmluYWwgdGFnDQorCQkgKi8N CisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJQ0NQX0xPR19FUlIoIlVuc3VwcG9ydGVkIGNvbWJp bmVkIGF1dGggQUxHTyAlZCIsDQorCQkJICAgIHNlc3Npb24tPmF1dGguYWxnbyk7DQorCX0NCisJ cmV0dXJuIGNvdW50Ow0KK30NCisNCitpbnQNCitjY3BfY29tcHV0ZV9zbG90X2NvdW50KHN0cnVj dCBjY3Bfc2Vzc2lvbiAqc2Vzc2lvbikNCit7DQorCWludCBjb3VudCA9IDA7DQorDQorCXN3aXRj aCAoc2Vzc2lvbi0+Y21kX2lkKSB7DQorCWNhc2UgQ0NQX0NNRF9DSVBIRVI6DQorCQljb3VudCA9 IGNjcF9jaXBoZXJfc2xvdChzZXNzaW9uKTsNCisJCWJyZWFrOw0KKwljYXNlIENDUF9DTURfQVVU SDoNCisjaWZuZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKwkJY291bnQgPSBjY3Bf YXV0aF9zbG90KHNlc3Npb24pOw0KKyNlbmRpZg0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0NNRF9D SVBIRVJfSEFTSDoNCisJY2FzZSBDQ1BfQ01EX0hBU0hfQ0lQSEVSOg0KKwkJY291bnQgPSBjY3Bf Y2lwaGVyX3Nsb3Qoc2Vzc2lvbik7DQorI2lmbmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FV VEgNCisJCWNvdW50ICs9IGNjcF9hdXRoX3Nsb3Qoc2Vzc2lvbik7DQorI2VuZGlmDQorCQlicmVh azsNCisJY2FzZSBDQ1BfQ01EX0NPTUJJTkVEOg0KKwkJY291bnQgPSBjY3BfY29tYmluZWRfbW9k ZV9zbG90KHNlc3Npb24pOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlDQ1BfTE9HX0VSUigi VW5zdXBwb3J0ZWQgY21kX2lkIik7DQorDQorCX0NCisNCisJcmV0dXJuIGNvdW50Ow0KK30NCisN CisjaWZkZWYgUlRFX0xJQlJURV9QTURfQ0NQX0NQVV9BVVRIDQorc3RhdGljIHVpbnQ4X3QNCith bGdvX3NlbGVjdChpbnQgc2Vzc2FsZ28sDQorCSAgICBjb25zdCBFVlBfTUQgKiphbGdvKQ0KK3sN CisJaW50IHJlcyA9IDA7DQorDQorCXN3aXRjaCAoc2Vzc2FsZ28pIHsNCisJY2FzZSBDQ1BfQVVU SF9BTEdPX01ENV9ITUFDOg0KKwkJKmFsZ28gPSBFVlBfbWQ1KCk7DQorCQlicmVhazsNCisJY2Fz ZSBDQ1BfQVVUSF9BTEdPX1NIQTFfSE1BQzoNCisJCSphbGdvID0gRVZQX3NoYTEoKTsNCisJCWJy ZWFrOw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBMjI0X0hNQUM6DQorCQkqYWxnbyA9IEVWUF9z aGEyMjQoKTsNCisJCWJyZWFrOw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBMjU2X0hNQUM6DQor CQkqYWxnbyA9IEVWUF9zaGEyNTYoKTsNCisJCWJyZWFrOw0KKwljYXNlIENDUF9BVVRIX0FMR09f U0hBMzg0X0hNQUM6DQorCQkqYWxnbyA9IEVWUF9zaGEzODQoKTsNCisJCWJyZWFrOw0KKwljYXNl IENDUF9BVVRIX0FMR09fU0hBNTEyX0hNQUM6DQorCQkqYWxnbyA9IEVWUF9zaGE1MTIoKTsNCisJ CWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmVzID0gLUVJTlZBTDsNCisJCWJyZWFrOw0KKwl9DQor CXJldHVybiByZXM7DQorfQ0KKw0KKw0KK3N0YXRpYyBpbnQNCitwcm9jZXNzX2NwdV9hdXRoX2ht YWModWludDhfdCAqc3JjLCB1aW50OF90ICpkc3QsDQorCQkgICAgICBfX3J0ZV91bnVzZWQgdWlu dDhfdCAqaXYsDQorCQkgICAgICBFVlBfUEtFWSAqcGtleSwNCisJCSAgICAgIGludCBzcmNsZW4s DQorCQkgICAgICBFVlBfTURfQ1RYICpjdHgsDQorCQkgICAgICBjb25zdCBFVlBfTUQgKmFsZ28s DQorCQkgICAgICB1aW50MTZfdCBkX2xlbikNCit7DQorCXNpemVfdCBkc3RsZW47DQorCXVuc2ln bmVkIGNoYXIgdGVtcF9kc3RbNjRdOw0KKw0KKwlpZiAoRVZQX0RpZ2VzdFNpZ25Jbml0KGN0eCwg TlVMTCwgYWxnbywgTlVMTCwgcGtleSkgPD0gMCkNCisJCWdvdG8gcHJvY2Vzc19hdXRoX2VycjsN CisNCisJaWYgKEVWUF9EaWdlc3RTaWduVXBkYXRlKGN0eCwgKGNoYXIgKilzcmMsIHNyY2xlbikg PD0gMCkNCisJCWdvdG8gcHJvY2Vzc19hdXRoX2VycjsNCisNCisJaWYgKEVWUF9EaWdlc3RTaWdu RmluYWwoY3R4LCB0ZW1wX2RzdCwgJmRzdGxlbikgPD0gMCkNCisJCWdvdG8gcHJvY2Vzc19hdXRo X2VycjsNCisNCisJcnRlX21lbWNweShkc3QsIHRlbXBfZHN0LCBkX2xlbik7DQorCXJldHVybiAw Ow0KK3Byb2Nlc3NfYXV0aF9lcnI6DQorCUNDUF9MT0dfRVJSKCJQcm9jZXNzIGNwdSBhdXRoIGZh aWxlZCIpOw0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQorDQorc3RhdGljIGludCBjcHVfYXV0 aF92ZXJpZnkoc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKm9wKQ0KK3sNCisJaW50IG9mZnNldDsNCisJ dWludDhfdCAqYWRkcjsNCisJc3RydWN0IGNjcF9zZXNzaW9uICpzZXNzaW9uOw0KKw0KKwlzZXNz aW9uID0gKHN0cnVjdCBjY3Bfc2Vzc2lvbiAqKWdldF9zZXNzaW9uX3ByaXZhdGVfZGF0YSgNCisJ CQkJCSBvcC0+c3ltLT5zZXNzaW9uLA0KKwkJCQkJIGNyeXB0b2Rldl9kcml2ZXJfaWQpOw0KKwlh ZGRyID0gKHVpbnQ4X3QgKikoKGNoYXIgKilvcC0+c3ltLT5tX3NyYy0+YnVmX2FkZHIgKw0KKwkJ CSAgIG9wLT5zeW0tPm1fc3JjLT5kYXRhX29mZiArDQorCQkJICAgb3AtPnN5bS0+bV9zcmMtPmRh dGFfbGVuIC0NCisJCQkgICBzZXNzaW9uLT5hdXRoLmRpZ2VzdF9sZW5ndGgpOw0KKwlvZmZzZXQg PSBzZXNzaW9uLT5hdXRoLm9mZnNldDsNCisNCisJcmV0dXJuIG1lbWNtcChhZGRyICsgb2Zmc2V0 LA0KKwkJICAgICAgb3AtPnN5bS0+YXV0aC5kaWdlc3QuZGF0YSwNCisJCSAgICAgIHNlc3Npb24t PmF1dGguZGlnZXN0X2xlbmd0aCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY3B1X2NyeXB0b19hdXRo KHN0cnVjdCBydGVfY3J5cHRvX29wICpvcCwgc3RydWN0IGNjcF9zZXNzaW9uICpzZXNzLA0KKwkJ CSAgIEVWUF9NRF9DVFggKmN0eCkNCit7DQorCXVpbnQ4X3QgKnNyYywgKmRzdDsNCisJaW50IHNy Y2xlbiwgc3RhdHVzOw0KKwlzdHJ1Y3QgcnRlX21idWYgKm1idWZfc3JjLCAqbWJ1Zl9kc3Q7DQor CWNvbnN0IEVWUF9NRCAqYWxnbyA9IE5VTEw7DQorCUVWUF9QS0VZICpwa2V5Ow0KKw0KKwlhbGdv X3NlbGVjdChzZXNzLT5hdXRoLmFsZ28sICZhbGdvKTsNCisJcGtleSA9IEVWUF9QS0VZX25ld19t YWNfa2V5KEVWUF9QS0VZX0hNQUMsIE5VTEwsIHNlc3MtPmF1dGgua2V5LA0KKwkJCQkgICAgc2Vz cy0+YXV0aC5rZXlfbGVuZ3RoKTsNCisJbWJ1Zl9zcmMgPSBvcC0+c3ltLT5tX3NyYzsNCisJbWJ1 Zl9kc3QgPSBvcC0+c3ltLT5tX2RzdCA/IG9wLT5zeW0tPm1fZHN0IDogb3AtPnN5bS0+bV9zcmM7 DQorCXNyY2xlbiA9IG9wLT5zeW0tPmF1dGguZGF0YS5sZW5ndGg7DQorCXNyYyA9IHJ0ZV9wa3Rt YnVmX210b2Rfb2Zmc2V0KG1idWZfc3JjLCB1aW50OF90ICosDQorCQkJCSAgICAgIG9wLT5zeW0t PmF1dGguZGF0YS5vZmZzZXQpOw0KKw0KKwlpZiAoc2Vzcy0+YXV0aC5vcCA9PSBDQ1BfQVVUSF9P UF9WRVJJRlkpIHsNCisJCWRzdCA9ICh1aW50OF90ICopcnRlX3BrdG1idWZfYXBwZW5kKG1idWZf c3JjLA0KKwkJCQkJCSAgICBzZXNzLT5hdXRoLmRpZ2VzdF9sZW5ndGgpOw0KKwl9IGVsc2Ugew0K KwkJZHN0ID0gb3AtPnN5bS0+YXV0aC5kaWdlc3QuZGF0YTsNCisJCWlmIChkc3QgPT0gTlVMTCkg ew0KKwkJCWRzdCA9IHJ0ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KG1idWZfZHN0LCB1aW50OF90ICos DQorCQkJCQkJICAgICBvcC0+c3ltLT5hdXRoLmRhdGEub2Zmc2V0ICsNCisJCQkJCQkgICAgIHNl c3MtPmF1dGguZGlnZXN0X2xlbmd0aCk7DQorCQl9DQorCX0NCisJc3RhdHVzID0gcHJvY2Vzc19j cHVfYXV0aF9obWFjKHNyYywgZHN0LCBOVUxMLA0KKwkJCQkgICAgICAgcGtleSwgc3JjbGVuLA0K KwkJCQkgICAgICAgY3R4LA0KKwkJCQkgICAgICAgYWxnbywNCisJCQkJICAgICAgIHNlc3MtPmF1 dGguZGlnZXN0X2xlbmd0aCk7DQorCWlmIChzdGF0dXMpIHsNCisJCW9wLT5zdGF0dXMgPSBSVEVf Q1JZUFRPX09QX1NUQVRVU19FUlJPUjsNCisJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJaWYg KHNlc3MtPmF1dGgub3AgPT0gQ0NQX0FVVEhfT1BfVkVSSUZZKSB7DQorCQlpZiAobWVtY21wKGRz dCwgb3AtPnN5bS0+YXV0aC5kaWdlc3QuZGF0YSwNCisJCQkgICBzZXNzLT5hdXRoLmRpZ2VzdF9s ZW5ndGgpICE9IDApIHsNCisJCQlvcC0+c3RhdHVzID0gUlRFX0NSWVBUT19PUF9TVEFUVVNfQVVU SF9GQUlMRUQ7DQorCQl9IGVsc2Ugew0KKwkJCW9wLT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NU QVRVU19TVUNDRVNTOw0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJb3AtPnN0YXR1cyA9IFJURV9DUllQ VE9fT1BfU1RBVFVTX1NVQ0NFU1M7DQorCX0NCisNCisJaWYgKHNlc3MtPmF1dGgub3AgPT0gQ0NQ X0FVVEhfT1BfVkVSSUZZKSB7DQorCQlydGVfcGt0bWJ1Zl90cmltKG1idWZfc3JjLA0KKwkJCQkg c2Vzcy0+YXV0aC5kaWdlc3RfbGVuZ3RoKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorI2Vu ZGlmDQorDQorc3RhdGljIHZvaWQNCitjY3BfcGVyZm9ybV9wYXNzdGhydShzdHJ1Y3QgY2NwX3Bh c3N0aHJ1ICpwc3QsDQorCQkgICAgIHN0cnVjdCBjY3BfcXVldWUgKmNtZF9xKQ0KK3sNCisJc3Ry dWN0IGNjcF9kZXNjICpkZXNjOw0KKwl1bmlvbiBjY3BfZnVuY3Rpb24gZnVuY3Rpb247DQorDQor CWRlc2MgPSAmY21kX3EtPnFiYXNlX2Rlc2NbY21kX3EtPnFpZHhdOw0KKw0KKwlDQ1BfQ01EX0VO R0lORShkZXNjKSA9IENDUF9FTkdJTkVfUEFTU1RIUlU7DQorDQorCUNDUF9DTURfU09DKGRlc2Mp ID0gMDsNCisJQ0NQX0NNRF9JT0MoZGVzYykgPSAwOw0KKwlDQ1BfQ01EX0lOSVQoZGVzYykgPSAw Ow0KKwlDQ1BfQ01EX0VPTShkZXNjKSA9IDA7DQorCUNDUF9DTURfUFJPVChkZXNjKSA9IDA7DQor DQorCWZ1bmN0aW9uLnJhdyA9IDA7DQorCUNDUF9QVF9CWVRFU1dBUCgmZnVuY3Rpb24pID0gcHN0 LT5ieXRlX3N3YXA7DQorCUNDUF9QVF9CSVRXSVNFKCZmdW5jdGlvbikgPSBwc3QtPmJpdF9tb2Q7 DQorCUNDUF9DTURfRlVOQ1RJT04oZGVzYykgPSBmdW5jdGlvbi5yYXc7DQorDQorCUNDUF9DTURf TEVOKGRlc2MpID0gcHN0LT5sZW47DQorDQorCWlmIChwc3QtPmRpcikgew0KKwkJQ0NQX0NNRF9T UkNfTE8oZGVzYykgPSAodWludDMyX3QpKHBzdC0+c3JjX2FkZHIpOw0KKwkJQ0NQX0NNRF9TUkNf SEkoZGVzYykgPSBoaWdoMzJfdmFsdWUocHN0LT5zcmNfYWRkcik7DQorCQlDQ1BfQ01EX1NSQ19N RU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQorDQorCQlDQ1BfQ01EX0RTVF9MTyhkZXNj KSA9ICh1aW50MzJfdCkocHN0LT5kZXN0X2FkZHIpOw0KKwkJQ0NQX0NNRF9EU1RfSEkoZGVzYykg PSAwOw0KKwkJQ0NQX0NNRF9EU1RfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU0I7DQorDQorCQlp ZiAocHN0LT5iaXRfbW9kICE9IENDUF9QQVNTVEhSVV9CSVRXSVNFX05PT1ApDQorCQkJQ0NQX0NN RF9MU0JfSUQoZGVzYykgPSBjbWRfcS0+c2Jfa2V5Ow0KKwl9IGVsc2Ugew0KKw0KKwkJQ0NQX0NN RF9TUkNfTE8oZGVzYykgPSAodWludDMyX3QpKHBzdC0+c3JjX2FkZHIpOw0KKwkJQ0NQX0NNRF9T UkNfSEkoZGVzYykgPSAwOw0KKwkJQ0NQX0NNRF9TUkNfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVf U0I7DQorDQorCQlDQ1BfQ01EX0RTVF9MTyhkZXNjKSA9ICh1aW50MzJfdCkocHN0LT5kZXN0X2Fk ZHIpOw0KKwkJQ0NQX0NNRF9EU1RfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUocHN0LT5kZXN0X2Fk ZHIpOw0KKwkJQ0NQX0NNRF9EU1RfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKwl9 DQorDQorCWNtZF9xLT5xaWR4ID0gKGNtZF9xLT5xaWR4ICsgMSkgJSBDT01NQU5EU19QRVJfUVVF VUU7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcGVyZm9ybV9obWFjKHN0cnVjdCBydGVfY3J5 cHRvX29wICpvcCwNCisJCSBzdHJ1Y3QgY2NwX3F1ZXVlICpjbWRfcSkNCit7DQorDQorCXN0cnVj dCBjY3Bfc2Vzc2lvbiAqc2Vzc2lvbjsNCisJdW5pb24gY2NwX2Z1bmN0aW9uIGZ1bmN0aW9uOw0K KwlzdHJ1Y3QgY2NwX2Rlc2MgKmRlc2M7DQorCXVpbnQzMl90IHRhaWw7DQorCXBoeXNfYWRkcl90 IHNyY19hZGRyLCBkZXN0X2FkZHIsIGRlc3RfYWRkcl90Ow0KKwlzdHJ1Y3QgY2NwX3Bhc3N0aHJ1 IHBzdDsNCisJdWludDY0X3QgYXV0aF9tc2dfYml0czsNCisJdm9pZCAqYXBwZW5kX3B0cjsNCisJ dWludDhfdCAqYWRkcjsNCisNCisJc2Vzc2lvbiA9IChzdHJ1Y3QgY2NwX3Nlc3Npb24gKilnZXRf c2Vzc2lvbl9wcml2YXRlX2RhdGEoDQorCQkJCQkgb3AtPnN5bS0+c2Vzc2lvbiwNCisJCQkJCSBj cnlwdG9kZXZfZHJpdmVyX2lkKTsNCisJYWRkciA9IHNlc3Npb24tPmF1dGgucHJlX2NvbXB1dGU7 DQorDQorCXNyY19hZGRyID0gcnRlX3BrdG1idWZfbXRvcGh5c19vZmZzZXQob3AtPnN5bS0+bV9z cmMsDQorCQkJCQkgICAgICBvcC0+c3ltLT5hdXRoLmRhdGEub2Zmc2V0KTsNCisJYXBwZW5kX3B0 ciA9ICh2b2lkICopcnRlX3BrdG1idWZfYXBwZW5kKG9wLT5zeW0tPm1fc3JjLA0KKwkJCQkJCXNl c3Npb24tPmF1dGguY3R4X2xlbik7DQorCWRlc3RfYWRkciA9IChwaHlzX2FkZHJfdClydGVfbWVt X3ZpcnQycGh5KGFwcGVuZF9wdHIpOw0KKwlkZXN0X2FkZHJfdCA9IGRlc3RfYWRkcjsNCisNCisJ LyoqIExvYWQgUEhhc2gxIHRvIExTQiovDQorCXBzdC5zcmNfYWRkciA9IChwaHlzX2FkZHJfdCly dGVfbWVtX3ZpcnQycGh5KCh2b2lkICopYWRkcik7DQorCXBzdC5kZXN0X2FkZHIgPSAocGh5c19h ZGRyX3QpKGNtZF9xLT5zYl9zaGEgKiBDQ1BfU0JfQllURVMpOw0KKwlwc3QubGVuID0gc2Vzc2lv bi0+YXV0aC5jdHhfbGVuOw0KKwlwc3QuZGlyID0gMTsNCisJcHN0LmJpdF9tb2QgPSBDQ1BfUEFT U1RIUlVfQklUV0lTRV9OT09QOw0KKwlwc3QuYnl0ZV9zd2FwID0gQ0NQX1BBU1NUSFJVX0JZVEVT V0FQX05PT1A7DQorCWNjcF9wZXJmb3JtX3Bhc3N0aHJ1KCZwc3QsIGNtZF9xKTsNCisNCisJLyoq c2hhIGVuZ2luZSBjb21tYW5kIGRlc2NyaXB0b3IgZm9yIEludGVybWVkaWF0ZUhhc2gqLw0KKw0K KwlkZXNjID0gJmNtZF9xLT5xYmFzZV9kZXNjW2NtZF9xLT5xaWR4XTsNCisJbWVtc2V0KGRlc2Ms IDAsIFFfREVTQ19TSVpFKTsNCisNCisJQ0NQX0NNRF9FTkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5F X1NIQTsNCisNCisJQ0NQX0NNRF9TT0MoZGVzYykgPSAwOw0KKwlDQ1BfQ01EX0lPQyhkZXNjKSA9 IDA7DQorCUNDUF9DTURfSU5JVChkZXNjKSA9IDE7DQorCUNDUF9DTURfRU9NKGRlc2MpID0gMTsN CisJQ0NQX0NNRF9QUk9UKGRlc2MpID0gMDsNCisNCisJZnVuY3Rpb24ucmF3ID0gMDsNCisJQ0NQ X1NIQV9UWVBFKCZmdW5jdGlvbikgPSBzZXNzaW9uLT5hdXRoLnV0LnNoYV90eXBlOw0KKwlDQ1Bf Q01EX0ZVTkNUSU9OKGRlc2MpID0gZnVuY3Rpb24ucmF3Ow0KKw0KKwlDQ1BfQ01EX0xFTihkZXNj KSA9IG9wLT5zeW0tPmF1dGguZGF0YS5sZW5ndGg7DQorCWF1dGhfbXNnX2JpdHMgPSAob3AtPnN5 bS0+YXV0aC5kYXRhLmxlbmd0aCArDQorCQkJIHNlc3Npb24tPmF1dGguYmxvY2tfc2l6ZSkgICog ODsNCisNCisJQ0NQX0NNRF9TUkNfTE8oZGVzYykgPSAoKHVpbnQzMl90KXNyY19hZGRyKTsNCisJ Q0NQX0NNRF9TUkNfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoc3JjX2FkZHIpOw0KKwlDQ1BfQ01E X1NSQ19NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQorDQorCUNDUF9DTURfTFNCX0lE KGRlc2MpID0gY21kX3EtPnNiX3NoYTsNCisJQ0NQX0NNRF9TSEFfTE8oZGVzYykgPSAoKHVpbnQz Ml90KWF1dGhfbXNnX2JpdHMpOw0KKwlDQ1BfQ01EX1NIQV9ISShkZXNjKSA9IGhpZ2gzMl92YWx1 ZShhdXRoX21zZ19iaXRzKTsNCisNCisJY21kX3EtPnFpZHggPSAoY21kX3EtPnFpZHggKyAxKSAl IENPTU1BTkRTX1BFUl9RVUVVRTsNCisNCisJcnRlX3dtYigpOw0KKw0KKwl0YWlsID0gKHVpbnQz Ml90KShjbWRfcS0+cWJhc2VfcGh5c19hZGRyICsgY21kX3EtPnFpZHggKiBRX0RFU0NfU0laRSk7 DQorCUNDUF9XUklURV9SRUcoY21kX3EtPnJlZ19iYXNlLCBDTURfUV9UQUlMX0xPX0JBU0UsIHRh aWwpOw0KKwlDQ1BfV1JJVEVfUkVHKGNtZF9xLT5yZWdfYmFzZSwgQ01EX1FfQ09OVFJPTF9CQVNF LA0KKwkJICAgICAgY21kX3EtPnFjb250cm9sIHwgQ01EX1FfUlVOKTsNCisNCisJLyogSW50ZXJt ZWRpYXRlIEhhc2ggdmFsdWUgcmV0cmlldmUgKi8NCisJaWYgKChzZXNzaW9uLT5hdXRoLnV0LnNo YV90eXBlID09IENDUF9TSEFfVFlQRV8zODQpIHx8DQorCSAgICAoc2Vzc2lvbi0+YXV0aC51dC5z aGFfdHlwZSA9PSBDQ1BfU0hBX1RZUEVfNTEyKSkgew0KKw0KKwkJcHN0LnNyY19hZGRyID0NCisJ CQkocGh5c19hZGRyX3QpKChjbWRfcS0+c2Jfc2hhICsgMSkgKiBDQ1BfU0JfQllURVMpOw0KKwkJ cHN0LmRlc3RfYWRkciA9IGRlc3RfYWRkcl90Ow0KKwkJcHN0LmxlbiA9IENDUF9TQl9CWVRFUzsN CisJCXBzdC5kaXIgPSAwOw0KKwkJcHN0LmJpdF9tb2QgPSBDQ1BfUEFTU1RIUlVfQklUV0lTRV9O T09QOw0KKwkJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNTVEhSVV9CWVRFU1dBUF8yNTZCSVQ7DQor CQljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0LCBjbWRfcSk7DQorDQorCQlwc3Quc3JjX2FkZHIg PSAocGh5c19hZGRyX3QpKGNtZF9xLT5zYl9zaGEgKiBDQ1BfU0JfQllURVMpOw0KKwkJcHN0LmRl c3RfYWRkciA9IGRlc3RfYWRkcl90ICsgQ0NQX1NCX0JZVEVTOw0KKwkJcHN0LmxlbiA9IENDUF9T Ql9CWVRFUzsNCisJCXBzdC5kaXIgPSAwOw0KKwkJcHN0LmJpdF9tb2QgPSBDQ1BfUEFTU1RIUlVf QklUV0lTRV9OT09QOw0KKwkJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNTVEhSVV9CWVRFU1dBUF8y NTZCSVQ7DQorCQljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0LCBjbWRfcSk7DQorDQorCX0gZWxz ZSB7DQorCQlwc3Quc3JjX2FkZHIgPSAocGh5c19hZGRyX3QpKGNtZF9xLT5zYl9zaGEgKiBDQ1Bf U0JfQllURVMpOw0KKwkJcHN0LmRlc3RfYWRkciA9IGRlc3RfYWRkcl90Ow0KKwkJcHN0LmxlbiA9 IHNlc3Npb24tPmF1dGguY3R4X2xlbjsNCisJCXBzdC5kaXIgPSAwOw0KKwkJcHN0LmJpdF9tb2Qg PSBDQ1BfUEFTU1RIUlVfQklUV0lTRV9OT09QOw0KKwkJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNT VEhSVV9CWVRFU1dBUF8yNTZCSVQ7DQorCQljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0LCBjbWRf cSk7DQorDQorCX0NCisNCisJLyoqIExvYWQgUEhhc2gyIHRvIExTQiovDQorCWFkZHIgKz0gc2Vz c2lvbi0+YXV0aC5jdHhfbGVuOw0KKwlwc3Quc3JjX2FkZHIgPSAocGh5c19hZGRyX3QpcnRlX21l bV92aXJ0MnBoeSgodm9pZCAqKWFkZHIpOw0KKwlwc3QuZGVzdF9hZGRyID0gKHBoeXNfYWRkcl90 KShjbWRfcS0+c2Jfc2hhICogQ0NQX1NCX0JZVEVTKTsNCisJcHN0LmxlbiA9IHNlc3Npb24tPmF1 dGguY3R4X2xlbjsNCisJcHN0LmRpciA9IDE7DQorCXBzdC5iaXRfbW9kID0gQ0NQX1BBU1NUSFJV X0JJVFdJU0VfTk9PUDsNCisJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNTVEhSVV9CWVRFU1dBUF9O T09QOw0KKwljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0LCBjbWRfcSk7DQorDQorCS8qKnNoYSBl bmdpbmUgY29tbWFuZCBkZXNjcmlwdG9yIGZvciBGaW5hbEhhc2gqLw0KKwlkZXN0X2FkZHJfdCAr PSBzZXNzaW9uLT5hdXRoLm9mZnNldDsNCisNCisJZGVzYyA9ICZjbWRfcS0+cWJhc2VfZGVzY1tj bWRfcS0+cWlkeF07DQorCW1lbXNldChkZXNjLCAwLCBRX0RFU0NfU0laRSk7DQorDQorCUNDUF9D TURfRU5HSU5FKGRlc2MpID0gQ0NQX0VOR0lORV9TSEE7DQorDQorCUNDUF9DTURfU09DKGRlc2Mp ID0gMDsNCisJQ0NQX0NNRF9JT0MoZGVzYykgPSAwOw0KKwlDQ1BfQ01EX0lOSVQoZGVzYykgPSAx Ow0KKwlDQ1BfQ01EX0VPTShkZXNjKSA9IDE7DQorCUNDUF9DTURfUFJPVChkZXNjKSA9IDA7DQor DQorCWZ1bmN0aW9uLnJhdyA9IDA7DQorCUNDUF9TSEFfVFlQRSgmZnVuY3Rpb24pID0gc2Vzc2lv bi0+YXV0aC51dC5zaGFfdHlwZTsNCisJQ0NQX0NNRF9GVU5DVElPTihkZXNjKSA9IGZ1bmN0aW9u LnJhdzsNCisNCisJQ0NQX0NNRF9MRU4oZGVzYykgPSAoc2Vzc2lvbi0+YXV0aC5jdHhfbGVuIC0N CisJCQkgICAgIHNlc3Npb24tPmF1dGgub2Zmc2V0KTsNCisJYXV0aF9tc2dfYml0cyA9IChzZXNz aW9uLT5hdXRoLmJsb2NrX3NpemUgKw0KKwkJCSBzZXNzaW9uLT5hdXRoLmN0eF9sZW4gLQ0KKwkJ CSBzZXNzaW9uLT5hdXRoLm9mZnNldCkgKiA4Ow0KKw0KKwlDQ1BfQ01EX1NSQ19MTyhkZXNjKSA9 ICh1aW50MzJfdCkoZGVzdF9hZGRyX3QpOw0KKwlDQ1BfQ01EX1NSQ19ISShkZXNjKSA9IGhpZ2gz Ml92YWx1ZShkZXN0X2FkZHJfdCk7DQorCUNDUF9DTURfU1JDX01FTShkZXNjKSA9IENDUF9NRU1U WVBFX1NZU1RFTTsNCisNCisJQ0NQX0NNRF9MU0JfSUQoZGVzYykgPSBjbWRfcS0+c2Jfc2hhOw0K KwlDQ1BfQ01EX1NIQV9MTyhkZXNjKSA9ICgodWludDMyX3QpYXV0aF9tc2dfYml0cyk7DQorCUND UF9DTURfU0hBX0hJKGRlc2MpID0gaGlnaDMyX3ZhbHVlKGF1dGhfbXNnX2JpdHMpOw0KKw0KKwlj bWRfcS0+cWlkeCA9IChjbWRfcS0+cWlkeCArIDEpICUgQ09NTUFORFNfUEVSX1FVRVVFOw0KKw0K KwlydGVfd21iKCk7DQorDQorCXRhaWwgPSAodWludDMyX3QpKGNtZF9xLT5xYmFzZV9waHlzX2Fk ZHIgKyBjbWRfcS0+cWlkeCAqIFFfREVTQ19TSVpFKTsNCisJQ0NQX1dSSVRFX1JFRyhjbWRfcS0+ cmVnX2Jhc2UsIENNRF9RX1RBSUxfTE9fQkFTRSwgdGFpbCk7DQorCUNDUF9XUklURV9SRUcoY21k X3EtPnJlZ19iYXNlLCBDTURfUV9DT05UUk9MX0JBU0UsDQorCQkgICAgICBjbWRfcS0+cWNvbnRy b2wgfCBDTURfUV9SVU4pOw0KKw0KKwkvKiBSZXRyaWV2ZSBobWFjIG91dHB1dCAqLw0KKwlwc3Qu c3JjX2FkZHIgPSAocGh5c19hZGRyX3QpKGNtZF9xLT5zYl9zaGEgKiBDQ1BfU0JfQllURVMpOw0K Kwlwc3QuZGVzdF9hZGRyID0gZGVzdF9hZGRyOw0KKwlwc3QubGVuID0gc2Vzc2lvbi0+YXV0aC5j dHhfbGVuOw0KKwlwc3QuZGlyID0gMDsNCisJcHN0LmJpdF9tb2QgPSBDQ1BfUEFTU1RIUlVfQklU V0lTRV9OT09QOw0KKwlpZiAoKHNlc3Npb24tPmF1dGgudXQuc2hhX3R5cGUgPT0gQ0NQX1NIQV9U WVBFXzM4NCkgfHwNCisJICAgIChzZXNzaW9uLT5hdXRoLnV0LnNoYV90eXBlID09IENDUF9TSEFf VFlQRV81MTIpKQ0KKwkJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNTVEhSVV9CWVRFU1dBUF9OT09Q Ow0KKwllbHNlDQorCQlwc3QuYnl0ZV9zd2FwID0gQ0NQX1BBU1NUSFJVX0JZVEVTV0FQXzI1NkJJ VDsNCisJY2NwX3BlcmZvcm1fcGFzc3RocnUoJnBzdCwgY21kX3EpOw0KKw0KKwlvcC0+c3RhdHVz ID0gUlRFX0NSWVBUT19PUF9TVEFUVVNfTk9UX1BST0NFU1NFRDsNCisJcmV0dXJuIDA7DQorDQor fQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcGVyZm9ybV9zaGEoc3RydWN0IHJ0ZV9jcnlwdG9fb3Ag Km9wLA0KKwkJc3RydWN0IGNjcF9xdWV1ZSAqY21kX3EpDQorew0KKwlzdHJ1Y3QgY2NwX3Nlc3Np b24gKnNlc3Npb247DQorCXVuaW9uIGNjcF9mdW5jdGlvbiBmdW5jdGlvbjsNCisJc3RydWN0IGNj cF9kZXNjICpkZXNjOw0KKwl1aW50MzJfdCB0YWlsOw0KKwlwaHlzX2FkZHJfdCBzcmNfYWRkciwg ZGVzdF9hZGRyOw0KKwlzdHJ1Y3QgY2NwX3Bhc3N0aHJ1IHBzdDsNCisJdm9pZCAqYXBwZW5kX3B0 cjsNCisJdWludDY0X3QgYXV0aF9tc2dfYml0czsNCisNCisJc2Vzc2lvbiA9IChzdHJ1Y3QgY2Nw X3Nlc3Npb24gKilnZXRfc2Vzc2lvbl9wcml2YXRlX2RhdGEoDQorCQkJCQkgb3AtPnN5bS0+c2Vz c2lvbiwNCisJCQkJCSBjcnlwdG9kZXZfZHJpdmVyX2lkKTsNCisNCisJc3JjX2FkZHIgPSBydGVf cGt0bWJ1Zl9tdG9waHlzX29mZnNldChvcC0+c3ltLT5tX3NyYywNCisJCQkJCSAgICAgIG9wLT5z eW0tPmF1dGguZGF0YS5vZmZzZXQpOw0KKw0KKwlhcHBlbmRfcHRyID0gKHZvaWQgKilydGVfcGt0 bWJ1Zl9hcHBlbmQob3AtPnN5bS0+bV9zcmMsDQorCQkJCQkJc2Vzc2lvbi0+YXV0aC5jdHhfbGVu KTsNCisJZGVzdF9hZGRyID0gKHBoeXNfYWRkcl90KXJ0ZV9tZW1fdmlydDJwaHkoYXBwZW5kX3B0 cik7DQorDQorCS8qKiBQYXNzdGhydSBzaGEgY29udGV4dCovDQorDQorCXBzdC5zcmNfYWRkciA9 IChwaHlzX2FkZHJfdClydGVfbWVtX3ZpcnQycGh5KCh2b2lkICopDQorCQkJCQkJICAgICBzZXNz aW9uLT5hdXRoLmN0eCk7DQorCXBzdC5kZXN0X2FkZHIgPSAocGh5c19hZGRyX3QpKGNtZF9xLT5z Yl9zaGEgKiBDQ1BfU0JfQllURVMpOw0KKwlwc3QubGVuID0gc2Vzc2lvbi0+YXV0aC5jdHhfbGVu Ow0KKwlwc3QuZGlyID0gMTsNCisJcHN0LmJpdF9tb2QgPSBDQ1BfUEFTU1RIUlVfQklUV0lTRV9O T09QOw0KKwlwc3QuYnl0ZV9zd2FwID0gQ0NQX1BBU1NUSFJVX0JZVEVTV0FQX05PT1A7DQorCWNj cF9wZXJmb3JtX3Bhc3N0aHJ1KCZwc3QsIGNtZF9xKTsNCisNCisJLyoqcHJlcGFyZSBzaGEgY29t bWFuZCBkZXNjcmlwdG9yKi8NCisNCisJZGVzYyA9ICZjbWRfcS0+cWJhc2VfZGVzY1tjbWRfcS0+ cWlkeF07DQorCW1lbXNldChkZXNjLCAwLCBRX0RFU0NfU0laRSk7DQorDQorCUNDUF9DTURfRU5H SU5FKGRlc2MpID0gQ0NQX0VOR0lORV9TSEE7DQorDQorCUNDUF9DTURfU09DKGRlc2MpID0gMDsN CisJQ0NQX0NNRF9JT0MoZGVzYykgPSAwOw0KKwlDQ1BfQ01EX0lOSVQoZGVzYykgPSAxOw0KKwlD Q1BfQ01EX0VPTShkZXNjKSA9IDE7DQorCUNDUF9DTURfUFJPVChkZXNjKSA9IDA7DQorDQorCWZ1 bmN0aW9uLnJhdyA9IDA7DQorCUNDUF9TSEFfVFlQRSgmZnVuY3Rpb24pID0gc2Vzc2lvbi0+YXV0 aC51dC5zaGFfdHlwZTsNCisJQ0NQX0NNRF9GVU5DVElPTihkZXNjKSA9IGZ1bmN0aW9uLnJhdzsN CisNCisJQ0NQX0NNRF9MRU4oZGVzYykgPSBvcC0+c3ltLT5hdXRoLmRhdGEubGVuZ3RoOw0KKwlh dXRoX21zZ19iaXRzID0gb3AtPnN5bS0+YXV0aC5kYXRhLmxlbmd0aCAqIDg7DQorDQorCUNDUF9D TURfU1JDX0xPKGRlc2MpID0gKCh1aW50MzJfdClzcmNfYWRkcik7DQorCUNDUF9DTURfU1JDX0hJ KGRlc2MpID0gaGlnaDMyX3ZhbHVlKHNyY19hZGRyKTsNCisJQ0NQX0NNRF9TUkNfTUVNKGRlc2Mp ID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwlDQ1BfQ01EX0xTQl9JRChkZXNjKSA9IGNtZF9x LT5zYl9zaGE7DQorCUNDUF9DTURfU0hBX0xPKGRlc2MpID0gKCh1aW50MzJfdClhdXRoX21zZ19i aXRzKTsNCisJQ0NQX0NNRF9TSEFfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoYXV0aF9tc2dfYml0 cyk7DQorDQorCWNtZF9xLT5xaWR4ID0gKGNtZF9xLT5xaWR4ICsgMSkgJSBDT01NQU5EU19QRVJf UVVFVUU7DQorDQorCXJ0ZV93bWIoKTsNCisNCisJdGFpbCA9ICh1aW50MzJfdCkoY21kX3EtPnFi YXNlX3BoeXNfYWRkciArIGNtZF9xLT5xaWR4ICogUV9ERVNDX1NJWkUpOw0KKwlDQ1BfV1JJVEVf UkVHKGNtZF9xLT5yZWdfYmFzZSwgQ01EX1FfVEFJTF9MT19CQVNFLCB0YWlsKTsNCisJQ0NQX1dS SVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX0NPTlRST0xfQkFTRSwNCisJCSAgICAgIGNt ZF9xLT5xY29udHJvbCB8IENNRF9RX1JVTik7DQorDQorCS8qIEhhc2ggdmFsdWUgcmV0cmlldmUg Ki8NCisJcHN0LnNyY19hZGRyID0gKHBoeXNfYWRkcl90KShjbWRfcS0+c2Jfc2hhICogQ0NQX1NC X0JZVEVTKTsNCisJcHN0LmRlc3RfYWRkciA9IGRlc3RfYWRkcjsNCisJcHN0LmxlbiA9IHNlc3Np b24tPmF1dGguY3R4X2xlbjsNCisJcHN0LmRpciA9IDA7DQorCXBzdC5iaXRfbW9kID0gQ0NQX1BB U1NUSFJVX0JJVFdJU0VfTk9PUDsNCisJaWYgKChzZXNzaW9uLT5hdXRoLnV0LnNoYV90eXBlID09 IENDUF9TSEFfVFlQRV8zODQpIHx8DQorCSAgICAoc2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZSA9 PSBDQ1BfU0hBX1RZUEVfNTEyKSkNCisJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNTVEhSVV9CWVRF U1dBUF9OT09QOw0KKwllbHNlDQorCXBzdC5ieXRlX3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllURVNX QVBfMjU2QklUOw0KKwljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0LCBjbWRfcSk7DQorDQorCW9w LT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NUQVRVU19OT1RfUFJPQ0VTU0VEOw0KKwlyZXR1cm4g MDsNCisNCit9DQorDQorc3RhdGljIGludA0KK2NjcF9wZXJmb3JtX3NoYTNfaG1hYyhzdHJ1Y3Qg cnRlX2NyeXB0b19vcCAqb3AsDQorCQkgICAgICBzdHJ1Y3QgY2NwX3F1ZXVlICpjbWRfcSkNCit7 DQorCXN0cnVjdCBjY3Bfc2Vzc2lvbiAqc2Vzc2lvbjsNCisJc3RydWN0IGNjcF9wYXNzdGhydSBw c3Q7DQorCXVuaW9uIGNjcF9mdW5jdGlvbiBmdW5jdGlvbjsNCisJc3RydWN0IGNjcF9kZXNjICpk ZXNjOw0KKwl1aW50OF90ICphcHBlbmRfcHRyOw0KKwl1aW50MzJfdCB0YWlsOw0KKwlwaHlzX2Fk ZHJfdCBzcmNfYWRkciwgZGVzdF9hZGRyLCBjdHhfcGFkZHIsIGRlc3RfYWRkcl90Ow0KKw0KKwlz ZXNzaW9uID0gKHN0cnVjdCBjY3Bfc2Vzc2lvbiAqKWdldF9zZXNzaW9uX3ByaXZhdGVfZGF0YSgN CisJCQkJCSBvcC0+c3ltLT5zZXNzaW9uLA0KKwkJCQkJIGNyeXB0b2Rldl9kcml2ZXJfaWQpOw0K Kw0KKwlzcmNfYWRkciA9IHJ0ZV9wa3RtYnVmX210b3BoeXNfb2Zmc2V0KG9wLT5zeW0tPm1fc3Jj LA0KKwkJCQkJICAgICAgb3AtPnN5bS0+YXV0aC5kYXRhLm9mZnNldCk7DQorCWFwcGVuZF9wdHIg PSAodWludDhfdCAqKXJ0ZV9wa3RtYnVmX2FwcGVuZChvcC0+c3ltLT5tX3NyYywNCisJCQkJCQlz ZXNzaW9uLT5hdXRoLmN0eF9sZW4pOw0KKwlpZiAoIWFwcGVuZF9wdHIpIHsNCisJCUNDUF9MT0df RVJSKCJDQ1AgTUJVRiBhcHBlbmQgZmFpbGVkXG4iKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKwlk ZXN0X2FkZHIgPSAocGh5c19hZGRyX3QpcnRlX21lbV92aXJ0MnBoeSgodm9pZCAqKWFwcGVuZF9w dHIpOw0KKwlkZXN0X2FkZHJfdCA9IGRlc3RfYWRkciArIChzZXNzaW9uLT5hdXRoLmN0eF9sZW4g LyAyKTsNCisJY3R4X3BhZGRyID0gKHBoeXNfYWRkcl90KXJ0ZV9tZW1fdmlydDJwaHkoKHZvaWQN CisJCQkJCQkgICAqKXNlc3Npb24tPmF1dGgucHJlX2NvbXB1dGUpOw0KKwlkZXNjID0gJmNtZF9x LT5xYmFzZV9kZXNjW2NtZF9xLT5xaWR4XTsNCisJbWVtc2V0KGRlc2MsIDAsIFFfREVTQ19TSVpF KTsNCisNCisJLypkZXNjMSBmb3IgU0hBMy1JaGFzaCBvcGVyYXRpb24gKi8NCisJQ0NQX0NNRF9F TkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5FX1NIQTsNCisJQ0NQX0NNRF9JTklUKGRlc2MpID0gMTsN CisJQ0NQX0NNRF9FT00oZGVzYykgPSAxOw0KKw0KKwlmdW5jdGlvbi5yYXcgPSAwOw0KKwlDQ1Bf U0hBX1RZUEUoJmZ1bmN0aW9uKSA9IHNlc3Npb24tPmF1dGgudXQuc2hhX3R5cGU7DQorCUNDUF9D TURfRlVOQ1RJT04oZGVzYykgPSBmdW5jdGlvbi5yYXc7DQorCUNDUF9DTURfTEVOKGRlc2MpID0g b3AtPnN5bS0+YXV0aC5kYXRhLmxlbmd0aDsNCisNCisJQ0NQX0NNRF9TUkNfTE8oZGVzYykgPSAo KHVpbnQzMl90KXNyY19hZGRyKTsNCisJQ0NQX0NNRF9TUkNfSEkoZGVzYykgPSBoaWdoMzJfdmFs dWUoc3JjX2FkZHIpOw0KKwlDQ1BfQ01EX1NSQ19NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNU RU07DQorDQorCUNDUF9DTURfRFNUX0xPKGRlc2MpID0gKGNtZF9xLT5zYl9zaGEgKiBDQ1BfU0Jf QllURVMpOw0KKwlDQ1BfQ01EX0RTVF9ISShkZXNjKSA9IDA7DQorCUNDUF9DTURfRFNUX01FTShk ZXNjKSA9IENDUF9NRU1UWVBFX1NCOw0KKw0KKwlDQ1BfQ01EX0tFWV9MTyhkZXNjKSA9ICgodWlu dDMyX3QpY3R4X3BhZGRyKTsNCisJQ0NQX0NNRF9LRVlfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUo Y3R4X3BhZGRyKTsNCisJQ0NQX0NNRF9LRVlfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lTVEVN Ow0KKw0KKwljbWRfcS0+cWlkeCA9IChjbWRfcS0+cWlkeCArIDEpICUgQ09NTUFORFNfUEVSX1FV RVVFOw0KKw0KKwlydGVfd21iKCk7DQorCXRhaWwgPSAodWludDMyX3QpKGNtZF9xLT5xYmFzZV9w aHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAqIFFfREVTQ19TSVpFKTsNCisJQ0NQX1dSSVRFX1JFRyhj bWRfcS0+cmVnX2Jhc2UsIENNRF9RX1RBSUxfTE9fQkFTRSwgdGFpbCk7DQorCUNDUF9XUklURV9S RUcoY21kX3EtPnJlZ19iYXNlLCBDTURfUV9DT05UUk9MX0JBU0UsDQorCQkgICAgICBjbWRfcS0+ cWNvbnRyb2wgfCBDTURfUV9SVU4pOw0KKw0KKwkvKiBJbnRlcm1lZGlhdGUgSGFzaCB2YWx1ZSBy ZXRyaWV2ZSAqLw0KKwlpZiAoKHNlc3Npb24tPmF1dGgudXQuc2hhX3R5cGUgPT0gQ0NQX1NIQTNf VFlQRV8zODQpIHx8DQorCSAgICAoc2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZSA9PSBDQ1BfU0hB M19UWVBFXzUxMikpIHsNCisNCisJCXBzdC5zcmNfYWRkciA9DQorCQkJKHBoeXNfYWRkcl90KSgo Y21kX3EtPnNiX3NoYSArIDEpICogQ0NQX1NCX0JZVEVTKTsNCisJCXBzdC5kZXN0X2FkZHIgPSBk ZXN0X2FkZHJfdDsNCisJCXBzdC5sZW4gPSBDQ1BfU0JfQllURVM7DQorCQlwc3QuZGlyID0gMDsN CisJCXBzdC5iaXRfbW9kID0gQ0NQX1BBU1NUSFJVX0JJVFdJU0VfTk9PUDsNCisJCXBzdC5ieXRl X3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllURVNXQVBfMjU2QklUOw0KKwkJY2NwX3BlcmZvcm1fcGFz c3RocnUoJnBzdCwgY21kX3EpOw0KKw0KKwkJcHN0LnNyY19hZGRyID0gKHBoeXNfYWRkcl90KShj bWRfcS0+c2Jfc2hhICogQ0NQX1NCX0JZVEVTKTsNCisJCXBzdC5kZXN0X2FkZHIgPSBkZXN0X2Fk ZHJfdCArIENDUF9TQl9CWVRFUzsNCisJCXBzdC5sZW4gPSBDQ1BfU0JfQllURVM7DQorCQlwc3Qu ZGlyID0gMDsNCisJCXBzdC5iaXRfbW9kID0gQ0NQX1BBU1NUSFJVX0JJVFdJU0VfTk9PUDsNCisJ CXBzdC5ieXRlX3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllURVNXQVBfMjU2QklUOw0KKwkJY2NwX3Bl cmZvcm1fcGFzc3RocnUoJnBzdCwgY21kX3EpOw0KKw0KKwl9IGVsc2Ugew0KKwkJcHN0LnNyY19h ZGRyID0gKHBoeXNfYWRkcl90KShjbWRfcS0+c2Jfc2hhICogQ0NQX1NCX0JZVEVTKTsNCisJCXBz dC5kZXN0X2FkZHIgPSBkZXN0X2FkZHJfdDsNCisJCXBzdC5sZW4gPSBDQ1BfU0JfQllURVM7DQor CQlwc3QuZGlyID0gMDsNCisJCXBzdC5iaXRfbW9kID0gQ0NQX1BBU1NUSFJVX0JJVFdJU0VfTk9P UDsNCisJCXBzdC5ieXRlX3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllURVNXQVBfMjU2QklUOw0KKwkJ Y2NwX3BlcmZvcm1fcGFzc3RocnUoJnBzdCwgY21kX3EpOw0KKwl9DQorDQorCS8qKnNoYSBlbmdp bmUgY29tbWFuZCBkZXNjcmlwdG9yIGZvciBGaW5hbEhhc2gqLw0KKwljdHhfcGFkZHIgKz0gQ0NQ X1NIQTNfQ1RYX1NJWkU7DQorCWRlc2MgPSAmY21kX3EtPnFiYXNlX2Rlc2NbY21kX3EtPnFpZHhd Ow0KKwltZW1zZXQoZGVzYywgMCwgUV9ERVNDX1NJWkUpOw0KKw0KKwlDQ1BfQ01EX0VOR0lORShk ZXNjKSA9IENDUF9FTkdJTkVfU0hBOw0KKwlDQ1BfQ01EX0lOSVQoZGVzYykgPSAxOw0KKwlDQ1Bf Q01EX0VPTShkZXNjKSA9IDE7DQorDQorCWZ1bmN0aW9uLnJhdyA9IDA7DQorCUNDUF9TSEFfVFlQ RSgmZnVuY3Rpb24pID0gc2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZTsNCisJQ0NQX0NNRF9GVU5D VElPTihkZXNjKSA9IGZ1bmN0aW9uLnJhdzsNCisNCisJaWYgKHNlc3Npb24tPmF1dGgudXQuc2hh X3R5cGUgPT0gQ0NQX1NIQTNfVFlQRV8yMjQpIHsNCisJCWRlc3RfYWRkcl90ICs9IChDQ1BfU0Jf QllURVMgLSBTSEEyMjRfRElHRVNUX1NJWkUpOw0KKwkJQ0NQX0NNRF9MRU4oZGVzYykgPSBTSEEy MjRfRElHRVNUX1NJWkU7DQorCX0gZWxzZSBpZiAoc2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZSA9 PSBDQ1BfU0hBM19UWVBFXzI1Nikgew0KKwkJQ0NQX0NNRF9MRU4oZGVzYykgPSBTSEEyNTZfRElH RVNUX1NJWkU7DQorCX0gZWxzZSBpZiAoc2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZSA9PSBDQ1Bf U0hBM19UWVBFXzM4NCkgew0KKwkJZGVzdF9hZGRyX3QgKz0gKDIgKiBDQ1BfU0JfQllURVMgLSBT SEEzODRfRElHRVNUX1NJWkUpOw0KKwkJQ0NQX0NNRF9MRU4oZGVzYykgPSBTSEEzODRfRElHRVNU X1NJWkU7DQorCX0gZWxzZSB7DQorCQlDQ1BfQ01EX0xFTihkZXNjKSA9IFNIQTUxMl9ESUdFU1Rf U0laRTsNCisJfQ0KKw0KKwlDQ1BfQ01EX1NSQ19MTyhkZXNjKSA9ICgodWludDMyX3QpZGVzdF9h ZGRyX3QpOw0KKwlDQ1BfQ01EX1NSQ19ISShkZXNjKSA9IGhpZ2gzMl92YWx1ZShkZXN0X2FkZHJf dCk7DQorCUNDUF9DTURfU1JDX01FTShkZXNjKSA9IENDUF9NRU1UWVBFX1NZU1RFTTsNCisNCisJ Q0NQX0NNRF9EU1RfTE8oZGVzYykgPSAodWludDMyX3QpZGVzdF9hZGRyOw0KKwlDQ1BfQ01EX0RT VF9ISShkZXNjKSA9IGhpZ2gzMl92YWx1ZShkZXN0X2FkZHIpOw0KKwlDQ1BfQ01EX0RTVF9NRU0o ZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQorDQorCUNDUF9DTURfS0VZX0xPKGRlc2MpID0g KCh1aW50MzJfdCljdHhfcGFkZHIpOw0KKwlDQ1BfQ01EX0tFWV9ISShkZXNjKSA9IGhpZ2gzMl92 YWx1ZShjdHhfcGFkZHIpOw0KKwlDQ1BfQ01EX0tFWV9NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9T WVNURU07DQorDQorCWNtZF9xLT5xaWR4ID0gKGNtZF9xLT5xaWR4ICsgMSkgJSBDT01NQU5EU19Q RVJfUVVFVUU7DQorDQorCXJ0ZV93bWIoKTsNCisJdGFpbCA9ICh1aW50MzJfdCkoY21kX3EtPnFi YXNlX3BoeXNfYWRkciArIGNtZF9xLT5xaWR4ICogUV9ERVNDX1NJWkUpOw0KKwlDQ1BfV1JJVEVf UkVHKGNtZF9xLT5yZWdfYmFzZSwgQ01EX1FfVEFJTF9MT19CQVNFLCB0YWlsKTsNCisJQ0NQX1dS SVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX0NPTlRST0xfQkFTRSwNCisJCSAgICAgIGNt ZF9xLT5xY29udHJvbCB8IENNRF9RX1JVTik7DQorDQorCW9wLT5zdGF0dXMgPSBSVEVfQ1JZUFRP X09QX1NUQVRVU19OT1RfUFJPQ0VTU0VEOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlu dA0KK2NjcF9wZXJmb3JtX3NoYTMoc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKm9wLA0KKwkJIHN0cnVj dCBjY3BfcXVldWUgKmNtZF9xKQ0KK3sNCisJc3RydWN0IGNjcF9zZXNzaW9uICpzZXNzaW9uOw0K Kwl1bmlvbiBjY3BfZnVuY3Rpb24gZnVuY3Rpb247DQorCXN0cnVjdCBjY3BfZGVzYyAqZGVzYzsN CisJdWludDhfdCAqY3R4X2FkZHIsICphcHBlbmRfcHRyOw0KKwl1aW50MzJfdCB0YWlsOw0KKwlw aHlzX2FkZHJfdCBzcmNfYWRkciwgZGVzdF9hZGRyLCBjdHhfcGFkZHI7DQorDQorCXNlc3Npb24g PSAoc3RydWN0IGNjcF9zZXNzaW9uICopZ2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRhKA0KKwkJCQkJ IG9wLT5zeW0tPnNlc3Npb24sDQorCQkJCQkgY3J5cHRvZGV2X2RyaXZlcl9pZCk7DQorDQorCXNy Y19hZGRyID0gcnRlX3BrdG1idWZfbXRvcGh5c19vZmZzZXQob3AtPnN5bS0+bV9zcmMsDQorCQkJ CQkgICAgICBvcC0+c3ltLT5hdXRoLmRhdGEub2Zmc2V0KTsNCisJYXBwZW5kX3B0ciA9ICh1aW50 OF90ICopcnRlX3BrdG1idWZfYXBwZW5kKG9wLT5zeW0tPm1fc3JjLA0KKwkJCQkJCXNlc3Npb24t PmF1dGguY3R4X2xlbik7DQorCWlmICghYXBwZW5kX3B0cikgew0KKwkJQ0NQX0xPR19FUlIoIkND UCBNQlVGIGFwcGVuZCBmYWlsZWRcbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorCWRlc3RfYWRk ciA9IChwaHlzX2FkZHJfdClydGVfbWVtX3ZpcnQycGh5KCh2b2lkICopYXBwZW5kX3B0cik7DQor CWN0eF9hZGRyID0gc2Vzc2lvbi0+YXV0aC5zaGEzX2N0eDsNCisJY3R4X3BhZGRyID0gKHBoeXNf YWRkcl90KXJ0ZV9tZW1fdmlydDJwaHkoKHZvaWQgKiljdHhfYWRkcik7DQorDQorCWRlc2MgPSAm Y21kX3EtPnFiYXNlX2Rlc2NbY21kX3EtPnFpZHhdOw0KKwltZW1zZXQoZGVzYywgMCwgUV9ERVND X1NJWkUpOw0KKw0KKwkvKiBwcmVwYXJlIGRlc2MgZm9yIFNIQTMgb3BlcmF0aW9uICovDQorCUND UF9DTURfRU5HSU5FKGRlc2MpID0gQ0NQX0VOR0lORV9TSEE7DQorCUNDUF9DTURfSU5JVChkZXNj KSA9IDE7DQorCUNDUF9DTURfRU9NKGRlc2MpID0gMTsNCisNCisJZnVuY3Rpb24ucmF3ID0gMDsN CisJQ0NQX1NIQV9UWVBFKCZmdW5jdGlvbikgPSBzZXNzaW9uLT5hdXRoLnV0LnNoYV90eXBlOw0K KwlDQ1BfQ01EX0ZVTkNUSU9OKGRlc2MpID0gZnVuY3Rpb24ucmF3Ow0KKw0KKwlDQ1BfQ01EX0xF TihkZXNjKSA9IG9wLT5zeW0tPmF1dGguZGF0YS5sZW5ndGg7DQorDQorCUNDUF9DTURfU1JDX0xP KGRlc2MpID0gKCh1aW50MzJfdClzcmNfYWRkcik7DQorCUNDUF9DTURfU1JDX0hJKGRlc2MpID0g aGlnaDMyX3ZhbHVlKHNyY19hZGRyKTsNCisJQ0NQX0NNRF9TUkNfTUVNKGRlc2MpID0gQ0NQX01F TVRZUEVfU1lTVEVNOw0KKw0KKwlDQ1BfQ01EX0RTVF9MTyhkZXNjKSA9ICgodWludDMyX3QpZGVz dF9hZGRyKTsNCisJQ0NQX0NNRF9EU1RfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoZGVzdF9hZGRy KTsNCisJQ0NQX0NNRF9EU1RfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwlD Q1BfQ01EX0tFWV9MTyhkZXNjKSA9ICgodWludDMyX3QpY3R4X3BhZGRyKTsNCisJQ0NQX0NNRF9L RVlfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoY3R4X3BhZGRyKTsNCisJQ0NQX0NNRF9LRVlfTUVN KGRlc2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwljbWRfcS0+cWlkeCA9IChjbWRfcS0+ cWlkeCArIDEpICUgQ09NTUFORFNfUEVSX1FVRVVFOw0KKw0KKwlydGVfd21iKCk7DQorDQorCXRh aWwgPSAodWludDMyX3QpKGNtZF9xLT5xYmFzZV9waHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAqIFFf REVTQ19TSVpFKTsNCisJQ0NQX1dSSVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX1RBSUxf TE9fQkFTRSwgdGFpbCk7DQorCUNDUF9XUklURV9SRUcoY21kX3EtPnJlZ19iYXNlLCBDTURfUV9D T05UUk9MX0JBU0UsDQorCQkgICAgICBjbWRfcS0+cWNvbnRyb2wgfCBDTURfUV9SVU4pOw0KKw0K KwlvcC0+c3RhdHVzID0gUlRFX0NSWVBUT19PUF9TVEFUVVNfTk9UX1BST0NFU1NFRDsNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcGVyZm9ybV9hZXNfY21hYyhzdHJ1Y3Qg cnRlX2NyeXB0b19vcCAqb3AsDQorCQkgICAgIHN0cnVjdCBjY3BfcXVldWUgKmNtZF9xKQ0KK3sN CisJc3RydWN0IGNjcF9zZXNzaW9uICpzZXNzaW9uOw0KKwl1bmlvbiBjY3BfZnVuY3Rpb24gZnVu Y3Rpb247DQorCXN0cnVjdCBjY3BfcGFzc3RocnUgcHN0Ow0KKwlzdHJ1Y3QgY2NwX2Rlc2MgKmRl c2M7DQorCXVpbnQzMl90IHRhaWw7DQorCXVpbnQ4X3QgKnNyY190YiwgKmFwcGVuZF9wdHIsICpj dHhfYWRkcjsNCisJcGh5c19hZGRyX3Qgc3JjX2FkZHIsIGRlc3RfYWRkciwga2V5X2FkZHI7DQor CWludCBsZW5ndGgsIG5vbl9hbGlnbl9sZW47DQorDQorCXNlc3Npb24gPSAoc3RydWN0IGNjcF9z ZXNzaW9uICopZ2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRhKA0KKwkJCQkJIG9wLT5zeW0tPnNlc3Np b24sDQorCQkJCQkgY3J5cHRvZGV2X2RyaXZlcl9pZCk7DQorCWtleV9hZGRyID0gcnRlX21lbV92 aXJ0MnBoeShzZXNzaW9uLT5hdXRoLmtleV9jY3ApOw0KKw0KKwlzcmNfYWRkciA9IHJ0ZV9wa3Rt YnVmX210b3BoeXNfb2Zmc2V0KG9wLT5zeW0tPm1fc3JjLA0KKwkJCQkJICAgICAgb3AtPnN5bS0+ YXV0aC5kYXRhLm9mZnNldCk7DQorCWFwcGVuZF9wdHIgPSAodWludDhfdCAqKXJ0ZV9wa3RtYnVm X2FwcGVuZChvcC0+c3ltLT5tX3NyYywNCisJCQkJCQlzZXNzaW9uLT5hdXRoLmN0eF9sZW4pOw0K KwlkZXN0X2FkZHIgPSAocGh5c19hZGRyX3QpcnRlX21lbV92aXJ0MnBoeSgodm9pZCAqKWFwcGVu ZF9wdHIpOw0KKw0KKwlmdW5jdGlvbi5yYXcgPSAwOw0KKwlDQ1BfQUVTX0VOQ1JZUFQoJmZ1bmN0 aW9uKSA9IENDUF9DSVBIRVJfRElSX0VOQ1JZUFQ7DQorCUNDUF9BRVNfTU9ERSgmZnVuY3Rpb24p ID0gc2Vzc2lvbi0+YXV0aC51bS5hZXNfbW9kZTsNCisJQ0NQX0FFU19UWVBFKCZmdW5jdGlvbikg PSBzZXNzaW9uLT5hdXRoLnV0LmFlc190eXBlOw0KKw0KKwlpZiAob3AtPnN5bS0+YXV0aC5kYXRh Lmxlbmd0aCAlIHNlc3Npb24tPmF1dGguYmxvY2tfc2l6ZSA9PSAwKSB7DQorDQorCQljdHhfYWRk ciA9IHNlc3Npb24tPmF1dGgucHJlX2NvbXB1dGU7DQorCQltZW1zZXQoY3R4X2FkZHIsIDAsIEFF U19CTE9DS19TSVpFKTsNCisJCXBzdC5zcmNfYWRkciA9IChwaHlzX2FkZHJfdClydGVfbWVtX3Zp cnQycGh5KCh2b2lkICopY3R4X2FkZHIpOw0KKwkJcHN0LmRlc3RfYWRkciA9IChwaHlzX2FkZHJf dCkoY21kX3EtPnNiX2l2ICogQ0NQX1NCX0JZVEVTKTsNCisJCXBzdC5sZW4gPSBDQ1BfU0JfQllU RVM7DQorCQlwc3QuZGlyID0gMTsNCisJCXBzdC5iaXRfbW9kID0gQ0NQX1BBU1NUSFJVX0JJVFdJ U0VfTk9PUDsNCisJCXBzdC5ieXRlX3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllURVNXQVBfTk9PUDsN CisJCWNjcF9wZXJmb3JtX3Bhc3N0aHJ1KCZwc3QsIGNtZF9xKTsNCisNCisJCWRlc2MgPSAmY21k X3EtPnFiYXNlX2Rlc2NbY21kX3EtPnFpZHhdOw0KKwkJbWVtc2V0KGRlc2MsIDAsIFFfREVTQ19T SVpFKTsNCisNCisJCS8qIHByZXBhcmUgZGVzYyBmb3IgYWVzLWNtYWMgY29tbWFuZCAqLw0KKwkJ Q0NQX0NNRF9FTkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5FX0FFUzsNCisJCUNDUF9DTURfRU9NKGRl c2MpID0gMTsNCisJCUNDUF9DTURfRlVOQ1RJT04oZGVzYykgPSBmdW5jdGlvbi5yYXc7DQorDQor CQlDQ1BfQ01EX0xFTihkZXNjKSA9IG9wLT5zeW0tPmF1dGguZGF0YS5sZW5ndGg7DQorCQlDQ1Bf Q01EX1NSQ19MTyhkZXNjKSA9ICgodWludDMyX3Qpc3JjX2FkZHIpOw0KKwkJQ0NQX0NNRF9TUkNf SEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoc3JjX2FkZHIpOw0KKwkJQ0NQX0NNRF9TUkNfTUVNKGRl c2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwkJQ0NQX0NNRF9LRVlfTE8oZGVzYykgPSAo KHVpbnQzMl90KWtleV9hZGRyKTsNCisJCUNDUF9DTURfS0VZX0hJKGRlc2MpID0gaGlnaDMyX3Zh bHVlKGtleV9hZGRyKTsNCisJCUNDUF9DTURfS0VZX01FTShkZXNjKSA9IENDUF9NRU1UWVBFX1NZ U1RFTTsNCisJCUNDUF9DTURfTFNCX0lEKGRlc2MpID0gY21kX3EtPnNiX2l2Ow0KKw0KKwkJY21k X3EtPnFpZHggPSAoY21kX3EtPnFpZHggKyAxKSAlIENPTU1BTkRTX1BFUl9RVUVVRTsNCisNCisJ CXJ0ZV93bWIoKTsNCisNCisJCXRhaWwgPQ0KKwkJKHVpbnQzMl90KShjbWRfcS0+cWJhc2VfcGh5 c19hZGRyICsgY21kX3EtPnFpZHggKiBRX0RFU0NfU0laRSk7DQorCQlDQ1BfV1JJVEVfUkVHKGNt ZF9xLT5yZWdfYmFzZSwgQ01EX1FfVEFJTF9MT19CQVNFLCB0YWlsKTsNCisJCUNDUF9XUklURV9S RUcoY21kX3EtPnJlZ19iYXNlLCBDTURfUV9DT05UUk9MX0JBU0UsDQorCQkJICAgICAgY21kX3Et PnFjb250cm9sIHwgQ01EX1FfUlVOKTsNCisJfSBlbHNlIHsNCisJCWN0eF9hZGRyID0gc2Vzc2lv bi0+YXV0aC5wcmVfY29tcHV0ZSArIENDUF9TQl9CWVRFUzsNCisJCW1lbXNldChjdHhfYWRkciwg MCwgQUVTX0JMT0NLX1NJWkUpOw0KKwkJcHN0LnNyY19hZGRyID0gKHBoeXNfYWRkcl90KXJ0ZV9t ZW1fdmlydDJwaHkoKHZvaWQgKiljdHhfYWRkcik7DQorCQlwc3QuZGVzdF9hZGRyID0gKHBoeXNf YWRkcl90KShjbWRfcS0+c2JfaXYgKiBDQ1BfU0JfQllURVMpOw0KKwkJcHN0LmxlbiA9IENDUF9T Ql9CWVRFUzsNCisJCXBzdC5kaXIgPSAxOw0KKwkJcHN0LmJpdF9tb2QgPSBDQ1BfUEFTU1RIUlVf QklUV0lTRV9OT09QOw0KKwkJcHN0LmJ5dGVfc3dhcCA9IENDUF9QQVNTVEhSVV9CWVRFU1dBUF9O T09QOw0KKwkJY2NwX3BlcmZvcm1fcGFzc3RocnUoJnBzdCwgY21kX3EpOw0KKw0KKwkJbGVuZ3Ro ID0gKG9wLT5zeW0tPmF1dGguZGF0YS5sZW5ndGggLyBBRVNfQkxPQ0tfU0laRSk7DQorCQlsZW5n dGggKj0gQUVTX0JMT0NLX1NJWkU7DQorCQlub25fYWxpZ25fbGVuID0gb3AtPnN5bS0+YXV0aC5k YXRhLmxlbmd0aCAtIGxlbmd0aDsNCisJCS8qIHByZXBhcmUgZGVzYyBmb3IgYWVzLWNtYWMgY29t bWFuZCAqLw0KKwkJLypDb21tYW5kIDEqLw0KKwkJZGVzYyA9ICZjbWRfcS0+cWJhc2VfZGVzY1tj bWRfcS0+cWlkeF07DQorCQltZW1zZXQoZGVzYywgMCwgUV9ERVNDX1NJWkUpOw0KKw0KKwkJQ0NQ X0NNRF9FTkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5FX0FFUzsNCisJCUNDUF9DTURfSU5JVChkZXNj KSA9IDE7DQorCQlDQ1BfQ01EX0ZVTkNUSU9OKGRlc2MpID0gZnVuY3Rpb24ucmF3Ow0KKw0KKwkJ Q0NQX0NNRF9MRU4oZGVzYykgPSBsZW5ndGg7DQorCQlDQ1BfQ01EX1NSQ19MTyhkZXNjKSA9ICgo dWludDMyX3Qpc3JjX2FkZHIpOw0KKwkJQ0NQX0NNRF9TUkNfSEkoZGVzYykgPSBoaWdoMzJfdmFs dWUoc3JjX2FkZHIpOw0KKwkJQ0NQX0NNRF9TUkNfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lT VEVNOw0KKw0KKwkJQ0NQX0NNRF9LRVlfTE8oZGVzYykgPSAoKHVpbnQzMl90KWtleV9hZGRyKTsN CisJCUNDUF9DTURfS0VZX0hJKGRlc2MpID0gaGlnaDMyX3ZhbHVlKGtleV9hZGRyKTsNCisJCUND UF9DTURfS0VZX01FTShkZXNjKSA9IENDUF9NRU1UWVBFX1NZU1RFTTsNCisJCUNDUF9DTURfTFNC X0lEKGRlc2MpID0gY21kX3EtPnNiX2l2Ow0KKw0KKwkJY21kX3EtPnFpZHggPSAoY21kX3EtPnFp ZHggKyAxKSAlIENPTU1BTkRTX1BFUl9RVUVVRTsNCisNCisJCS8qQ29tbWFuZCAyKi8NCisJCWFw cGVuZF9wdHIgPSBhcHBlbmRfcHRyICsgQ0NQX1NCX0JZVEVTOw0KKwkJbWVtc2V0KGFwcGVuZF9w dHIsIDAsIEFFU19CTE9DS19TSVpFKTsNCisJCXNyY190YiA9IHJ0ZV9wa3RtYnVmX210b2Rfb2Zm c2V0KG9wLT5zeW0tPm1fc3JjLA0KKwkJCQkJCSB1aW50OF90ICosDQorCQkJCQkJIG9wLT5zeW0t PmF1dGguZGF0YS5vZmZzZXQgKw0KKwkJCQkJCSBsZW5ndGgpOw0KKwkJcnRlX21lbWNweShhcHBl bmRfcHRyLCBzcmNfdGIsIG5vbl9hbGlnbl9sZW4pOw0KKwkJYXBwZW5kX3B0cltub25fYWxpZ25f bGVuXSA9IENNQUNfUEFEX1ZBTFVFOw0KKw0KKwkJZGVzYyA9ICZjbWRfcS0+cWJhc2VfZGVzY1tj bWRfcS0+cWlkeF07DQorCQltZW1zZXQoZGVzYywgMCwgUV9ERVNDX1NJWkUpOw0KKw0KKwkJQ0NQ X0NNRF9FTkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5FX0FFUzsNCisJCUNDUF9DTURfRU9NKGRlc2Mp ID0gMTsNCisJCUNDUF9DTURfRlVOQ1RJT04oZGVzYykgPSBmdW5jdGlvbi5yYXc7DQorCQlDQ1Bf Q01EX0xFTihkZXNjKSA9IEFFU19CTE9DS19TSVpFOw0KKw0KKwkJQ0NQX0NNRF9TUkNfTE8oZGVz YykgPSAoKHVpbnQzMl90KShkZXN0X2FkZHIgKyBDQ1BfU0JfQllURVMpKTsNCisJCUNDUF9DTURf U1JDX0hJKGRlc2MpID0gaGlnaDMyX3ZhbHVlKGRlc3RfYWRkciArIENDUF9TQl9CWVRFUyk7DQor CQlDQ1BfQ01EX1NSQ19NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQorDQorCQlDQ1Bf Q01EX0tFWV9MTyhkZXNjKSA9ICgodWludDMyX3Qpa2V5X2FkZHIpOw0KKwkJQ0NQX0NNRF9LRVlf SEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoa2V5X2FkZHIpOw0KKwkJQ0NQX0NNRF9LRVlfTUVNKGRl c2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKwkJQ0NQX0NNRF9MU0JfSUQoZGVzYykgPSBjbWRf cS0+c2JfaXY7DQorDQorCQljbWRfcS0+cWlkeCA9IChjbWRfcS0+cWlkeCArIDEpICUgQ09NTUFO RFNfUEVSX1FVRVVFOw0KKw0KKwkJcnRlX3dtYigpOw0KKwkJdGFpbCA9DQorCQkodWludDMyX3Qp KGNtZF9xLT5xYmFzZV9waHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAqIFFfREVTQ19TSVpFKTsNCisJ CUNDUF9XUklURV9SRUcoY21kX3EtPnJlZ19iYXNlLCBDTURfUV9UQUlMX0xPX0JBU0UsIHRhaWwp Ow0KKwkJQ0NQX1dSSVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX0NPTlRST0xfQkFTRSwN CisJCQkgICAgICBjbWRfcS0+cWNvbnRyb2wgfCBDTURfUV9SVU4pOw0KKwl9DQorCS8qIFJldHJp ZXZlIHJlc3VsdCAqLw0KKwlwc3QuZGVzdF9hZGRyID0gZGVzdF9hZGRyOw0KKwlwc3Quc3JjX2Fk ZHIgPSAocGh5c19hZGRyX3QpKGNtZF9xLT5zYl9pdiAqIENDUF9TQl9CWVRFUyk7DQorCXBzdC5s ZW4gPSBDQ1BfU0JfQllURVM7DQorCXBzdC5kaXIgPSAwOw0KKwlwc3QuYml0X21vZCA9IENDUF9Q QVNTVEhSVV9CSVRXSVNFX05PT1A7DQorCXBzdC5ieXRlX3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllU RVNXQVBfMjU2QklUOw0KKwljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0LCBjbWRfcSk7DQorDQor CW9wLT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NUQVRVU19OT1RfUFJPQ0VTU0VEOw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK2NjcF9wZXJmb3JtX2FlcyhzdHJ1Y3QgcnRlX2Ny eXB0b19vcCAqb3AsDQorCQlzdHJ1Y3QgY2NwX3F1ZXVlICpjbWRfcSwNCisJCXN0cnVjdCBjY3Bf YmF0Y2hfaW5mbyAqYl9pbmZvKQ0KK3sNCisJc3RydWN0IGNjcF9zZXNzaW9uICpzZXNzaW9uOw0K Kwl1bmlvbiBjY3BfZnVuY3Rpb24gZnVuY3Rpb247DQorCXVpbnQ4X3QgKmxzYl9idWY7DQorCXN0 cnVjdCBjY3BfcGFzc3RocnUgcHN0ID0gezB9Ow0KKwlzdHJ1Y3QgY2NwX2Rlc2MgKmRlc2M7DQor CXBoeXNfYWRkcl90IHNyY19hZGRyLCBkZXN0X2FkZHIsIGtleV9hZGRyOw0KKwl1aW50OF90ICpp djsNCisNCisJc2Vzc2lvbiA9IChzdHJ1Y3QgY2NwX3Nlc3Npb24gKilnZXRfc2Vzc2lvbl9wcml2 YXRlX2RhdGEoDQorCQkJCQkgb3AtPnN5bS0+c2Vzc2lvbiwNCisJCQkJCSBjcnlwdG9kZXZfZHJp dmVyX2lkKTsNCisJZnVuY3Rpb24ucmF3ID0gMDsNCisNCisJaXYgPSBydGVfY3J5cHRvX29wX2N0 b2Rfb2Zmc2V0KG9wLCB1aW50OF90ICosIHNlc3Npb24tPml2Lm9mZnNldCk7DQorCWlmIChzZXNz aW9uLT5jaXBoZXIudW0uYWVzX21vZGUgIT0gQ0NQX0FFU19NT0RFX0VDQikgew0KKwkJaWYgKHNl c3Npb24tPmNpcGhlci51bS5hZXNfbW9kZSA9PSBDQ1BfQUVTX01PREVfQ1RSKSB7DQorCQkJcnRl X21lbWNweShzZXNzaW9uLT5jaXBoZXIubm9uY2UgKyBBRVNfQkxPQ0tfU0laRSArDQorCQkJCSAg IENUUl9OT05DRV9TSVpFLCBpdiwgQ1RSX0lWX1NJWkUpOw0KKwkJCXBzdC5zcmNfYWRkciA9IChw aHlzX2FkZHJfdClzZXNzaW9uLT5jaXBoZXIubm9uY2VfcGh5czsNCisJCQlDQ1BfQUVTX1NJWkUo JmZ1bmN0aW9uKSA9IDB4MUY7DQorCQl9IGVsc2Ugew0KKwkJCWxzYl9idWYgPQ0KKwkJCSYoYl9p bmZvLT5sc2JfYnVmW2JfaW5mby0+bHNiX2J1Zl9pZHgqQ0NQX1NCX0JZVEVTXSk7DQorCQkJcnRl X21lbWNweShsc2JfYnVmICsNCisJCQkJICAgKENDUF9TQl9CWVRFUyAtIHNlc3Npb24tPml2Lmxl bmd0aCksDQorCQkJCSAgIGl2LCBzZXNzaW9uLT5pdi5sZW5ndGgpOw0KKwkJCXBzdC5zcmNfYWRk ciA9IGJfaW5mby0+bHNiX2J1Zl9waHlzICsNCisJCQkJKGJfaW5mby0+bHNiX2J1Zl9pZHggKiBD Q1BfU0JfQllURVMpOw0KKwkJCWJfaW5mby0+bHNiX2J1Zl9pZHgrKzsNCisJCX0NCisNCisJCXBz dC5kZXN0X2FkZHIgPSAocGh5c19hZGRyX3QpKGNtZF9xLT5zYl9pdiAqIENDUF9TQl9CWVRFUyk7 DQorCQlwc3QubGVuID0gQ0NQX1NCX0JZVEVTOw0KKwkJcHN0LmRpciA9IDE7DQorCQlwc3QuYml0 X21vZCA9IENDUF9QQVNTVEhSVV9CSVRXSVNFX05PT1A7DQorCQlwc3QuYnl0ZV9zd2FwID0gQ0NQ X1BBU1NUSFJVX0JZVEVTV0FQXzI1NkJJVDsNCisJCWNjcF9wZXJmb3JtX3Bhc3N0aHJ1KCZwc3Qs IGNtZF9xKTsNCisJfQ0KKw0KKwlkZXNjID0gJmNtZF9xLT5xYmFzZV9kZXNjW2NtZF9xLT5xaWR4 XTsNCisNCisJc3JjX2FkZHIgPSBydGVfcGt0bWJ1Zl9tdG9waHlzX29mZnNldChvcC0+c3ltLT5t X3NyYywNCisJCQkJCSAgICAgIG9wLT5zeW0tPmNpcGhlci5kYXRhLm9mZnNldCk7DQorCWlmIChs aWtlbHkob3AtPnN5bS0+bV9kc3QgIT0gTlVMTCkpDQorCQlkZXN0X2FkZHIgPSBydGVfcGt0bWJ1 Zl9tdG9waHlzX29mZnNldChvcC0+c3ltLT5tX2RzdCwNCisJCQkJCQlvcC0+c3ltLT5jaXBoZXIu ZGF0YS5vZmZzZXQpOw0KKwllbHNlDQorCQlkZXN0X2FkZHIgPSBzcmNfYWRkcjsNCisJa2V5X2Fk ZHIgPSBzZXNzaW9uLT5jaXBoZXIua2V5X3BoeXM7DQorDQorCS8qIHByZXBhcmUgZGVzYyBmb3Ig YWVzIGNvbW1hbmQgKi8NCisJQ0NQX0NNRF9FTkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5FX0FFUzsN CisJQ0NQX0NNRF9JTklUKGRlc2MpID0gMTsNCisJQ0NQX0NNRF9FT00oZGVzYykgPSAxOw0KKw0K KwlDQ1BfQUVTX0VOQ1JZUFQoJmZ1bmN0aW9uKSA9IHNlc3Npb24tPmNpcGhlci5kaXI7DQorCUND UF9BRVNfTU9ERSgmZnVuY3Rpb24pID0gc2Vzc2lvbi0+Y2lwaGVyLnVtLmFlc19tb2RlOw0KKwlD Q1BfQUVTX1RZUEUoJmZ1bmN0aW9uKSA9IHNlc3Npb24tPmNpcGhlci51dC5hZXNfdHlwZTsNCisJ Q0NQX0NNRF9GVU5DVElPTihkZXNjKSA9IGZ1bmN0aW9uLnJhdzsNCisNCisJQ0NQX0NNRF9MRU4o ZGVzYykgPSBvcC0+c3ltLT5jaXBoZXIuZGF0YS5sZW5ndGg7DQorDQorCUNDUF9DTURfU1JDX0xP KGRlc2MpID0gKCh1aW50MzJfdClzcmNfYWRkcik7DQorCUNDUF9DTURfU1JDX0hJKGRlc2MpID0g aGlnaDMyX3ZhbHVlKHNyY19hZGRyKTsNCisJQ0NQX0NNRF9TUkNfTUVNKGRlc2MpID0gQ0NQX01F TVRZUEVfU1lTVEVNOw0KKw0KKwlDQ1BfQ01EX0RTVF9MTyhkZXNjKSA9ICgodWludDMyX3QpZGVz dF9hZGRyKTsNCisJQ0NQX0NNRF9EU1RfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoZGVzdF9hZGRy KTsNCisJQ0NQX0NNRF9EU1RfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwlD Q1BfQ01EX0tFWV9MTyhkZXNjKSA9ICgodWludDMyX3Qpa2V5X2FkZHIpOw0KKwlDQ1BfQ01EX0tF WV9ISShkZXNjKSA9IGhpZ2gzMl92YWx1ZShrZXlfYWRkcik7DQorCUNDUF9DTURfS0VZX01FTShk ZXNjKSA9IENDUF9NRU1UWVBFX1NZU1RFTTsNCisNCisJaWYgKHNlc3Npb24tPmNpcGhlci51bS5h ZXNfbW9kZSAhPSBDQ1BfQUVTX01PREVfRUNCKQ0KKwkJQ0NQX0NNRF9MU0JfSUQoZGVzYykgPSBj bWRfcS0+c2JfaXY7DQorDQorCWNtZF9xLT5xaWR4ID0gKGNtZF9xLT5xaWR4ICsgMSkgJSBDT01N QU5EU19QRVJfUVVFVUU7DQorCW9wLT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NUQVRVU19OT1Rf UFJPQ0VTU0VEOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK2NjcF9wZXJmb3Jt XzNkZXMoc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKm9wLA0KKwkJc3RydWN0IGNjcF9xdWV1ZSAqY21k X3EsDQorCQlzdHJ1Y3QgY2NwX2JhdGNoX2luZm8gKmJfaW5mbykNCit7DQorCXN0cnVjdCBjY3Bf c2Vzc2lvbiAqc2Vzc2lvbjsNCisJdW5pb24gY2NwX2Z1bmN0aW9uIGZ1bmN0aW9uOw0KKwl1bnNp Z25lZCBjaGFyICpsc2JfYnVmOw0KKwlzdHJ1Y3QgY2NwX3Bhc3N0aHJ1IHBzdDsNCisJc3RydWN0 IGNjcF9kZXNjICpkZXNjOw0KKwl1aW50MzJfdCB0YWlsOw0KKwl1aW50OF90ICppdjsNCisJcGh5 c19hZGRyX3Qgc3JjX2FkZHIsIGRlc3RfYWRkciwga2V5X2FkZHI7DQorDQorCXNlc3Npb24gPSAo c3RydWN0IGNjcF9zZXNzaW9uICopZ2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRhKA0KKwkJCQkJIG9w LT5zeW0tPnNlc3Npb24sDQorCQkJCQkgY3J5cHRvZGV2X2RyaXZlcl9pZCk7DQorDQorCWl2ID0g cnRlX2NyeXB0b19vcF9jdG9kX29mZnNldChvcCwgdWludDhfdCAqLCBzZXNzaW9uLT5pdi5vZmZz ZXQpOw0KKwlzd2l0Y2ggKHNlc3Npb24tPmNpcGhlci51bS5kZXNfbW9kZSkgew0KKwljYXNlIEND UF9ERVNfTU9ERV9DQkM6DQorCQlsc2JfYnVmID0gJihiX2luZm8tPmxzYl9idWZbYl9pbmZvLT5s c2JfYnVmX2lkeCpDQ1BfU0JfQllURVNdKTsNCisJCWJfaW5mby0+bHNiX2J1Zl9pZHgrKzsNCisN CisJCXJ0ZV9tZW1jcHkobHNiX2J1ZiArIChDQ1BfU0JfQllURVMgLSBzZXNzaW9uLT5pdi5sZW5n dGgpLA0KKwkJCSAgIGl2LCBzZXNzaW9uLT5pdi5sZW5ndGgpOw0KKw0KKwkJcHN0LnNyY19hZGRy ID0gKHBoeXNfYWRkcl90KXJ0ZV9tZW1fdmlydDJwaHkoKHZvaWQgKikgbHNiX2J1Zik7DQorCQlw c3QuZGVzdF9hZGRyID0gKHBoeXNfYWRkcl90KShjbWRfcS0+c2JfaXYgKiBDQ1BfU0JfQllURVMp Ow0KKwkJcHN0LmxlbiA9IENDUF9TQl9CWVRFUzsNCisJCXBzdC5kaXIgPSAxOw0KKwkJcHN0LmJp dF9tb2QgPSBDQ1BfUEFTU1RIUlVfQklUV0lTRV9OT09QOw0KKwkJcHN0LmJ5dGVfc3dhcCA9IEND UF9QQVNTVEhSVV9CWVRFU1dBUF8yNTZCSVQ7DQorCQljY3BfcGVyZm9ybV9wYXNzdGhydSgmcHN0 LCBjbWRfcSk7DQorCQlicmVhazsNCisJY2FzZSBDQ1BfREVTX01PREVfQ0ZCOg0KKwljYXNlIEND UF9ERVNfTU9ERV9FQ0I6DQorCQlDQ1BfTE9HX0VSUigiVW5zdXBwb3J0ZWQgREVTIGNpcGhlciBt b2RlIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJc3JjX2FkZHIgPSBydGVfcGt0bWJ1Zl9t dG9waHlzX29mZnNldChvcC0+c3ltLT5tX3NyYywNCisJCQkJCSAgICAgIG9wLT5zeW0tPmNpcGhl ci5kYXRhLm9mZnNldCk7DQorCWlmICh1bmxpa2VseShvcC0+c3ltLT5tX2RzdCAhPSBOVUxMKSkN CisJCWRlc3RfYWRkciA9DQorCQkJcnRlX3BrdG1idWZfbXRvcGh5c19vZmZzZXQob3AtPnN5bS0+ bV9kc3QsDQorCQkJCQkJICAgb3AtPnN5bS0+Y2lwaGVyLmRhdGEub2Zmc2V0KTsNCisJZWxzZQ0K KwkJZGVzdF9hZGRyID0gc3JjX2FkZHI7DQorDQorCWtleV9hZGRyID0gcnRlX21lbV92aXJ0MnBo eShzZXNzaW9uLT5jaXBoZXIua2V5X2NjcCk7DQorDQorCWRlc2MgPSAmY21kX3EtPnFiYXNlX2Rl c2NbY21kX3EtPnFpZHhdOw0KKw0KKwltZW1zZXQoZGVzYywgMCwgUV9ERVNDX1NJWkUpOw0KKw0K KwkvKiBwcmVwYXJlIGRlc2MgZm9yIGRlcyBjb21tYW5kICovDQorCUNDUF9DTURfRU5HSU5FKGRl c2MpID0gQ0NQX0VOR0lORV8zREVTOw0KKw0KKwlDQ1BfQ01EX1NPQyhkZXNjKSA9IDA7DQorCUND UF9DTURfSU9DKGRlc2MpID0gMDsNCisJQ0NQX0NNRF9JTklUKGRlc2MpID0gMTsNCisJQ0NQX0NN RF9FT00oZGVzYykgPSAxOw0KKwlDQ1BfQ01EX1BST1QoZGVzYykgPSAwOw0KKw0KKwlmdW5jdGlv bi5yYXcgPSAwOw0KKwlDQ1BfREVTX0VOQ1JZUFQoJmZ1bmN0aW9uKSA9IHNlc3Npb24tPmNpcGhl ci5kaXI7DQorCUNDUF9ERVNfTU9ERSgmZnVuY3Rpb24pID0gc2Vzc2lvbi0+Y2lwaGVyLnVtLmRl c19tb2RlOw0KKwlDQ1BfREVTX1RZUEUoJmZ1bmN0aW9uKSA9IHNlc3Npb24tPmNpcGhlci51dC5k ZXNfdHlwZTsNCisJQ0NQX0NNRF9GVU5DVElPTihkZXNjKSA9IGZ1bmN0aW9uLnJhdzsNCisNCisJ Q0NQX0NNRF9MRU4oZGVzYykgPSBvcC0+c3ltLT5jaXBoZXIuZGF0YS5sZW5ndGg7DQorDQorCUND UF9DTURfU1JDX0xPKGRlc2MpID0gKCh1aW50MzJfdClzcmNfYWRkcik7DQorCUNDUF9DTURfU1JD X0hJKGRlc2MpID0gaGlnaDMyX3ZhbHVlKHNyY19hZGRyKTsNCisJQ0NQX0NNRF9TUkNfTUVNKGRl c2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwlDQ1BfQ01EX0RTVF9MTyhkZXNjKSA9ICgo dWludDMyX3QpZGVzdF9hZGRyKTsNCisJQ0NQX0NNRF9EU1RfSEkoZGVzYykgPSBoaWdoMzJfdmFs dWUoZGVzdF9hZGRyKTsNCisJQ0NQX0NNRF9EU1RfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lT VEVNOw0KKw0KKwlDQ1BfQ01EX0tFWV9MTyhkZXNjKSA9ICgodWludDMyX3Qpa2V5X2FkZHIpOw0K KwlDQ1BfQ01EX0tFWV9ISShkZXNjKSA9IGhpZ2gzMl92YWx1ZShrZXlfYWRkcik7DQorCUNDUF9D TURfS0VZX01FTShkZXNjKSA9IENDUF9NRU1UWVBFX1NZU1RFTTsNCisNCisJaWYgKHNlc3Npb24t PmNpcGhlci51bS5kZXNfbW9kZSkNCisJCUNDUF9DTURfTFNCX0lEKGRlc2MpID0gY21kX3EtPnNi X2l2Ow0KKw0KKwljbWRfcS0+cWlkeCA9IChjbWRfcS0+cWlkeCArIDEpICUgQ09NTUFORFNfUEVS X1FVRVVFOw0KKw0KKwlydGVfd21iKCk7DQorDQorCS8qIFdyaXRlIHRoZSBuZXcgdGFpbCBhZGRy ZXNzIGJhY2sgdG8gdGhlIHF1ZXVlIHJlZ2lzdGVyICovDQorCXRhaWwgPSAodWludDMyX3QpKGNt ZF9xLT5xYmFzZV9waHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAqIFFfREVTQ19TSVpFKTsNCisJQ0NQ X1dSSVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX1RBSUxfTE9fQkFTRSwgdGFpbCk7DQor CS8qIFR1cm4gdGhlIHF1ZXVlIGJhY2sgb24gdXNpbmcgb3VyIGNhY2hlZCBjb250cm9sIHJlZ2lz dGVyICovDQorCUNDUF9XUklURV9SRUcoY21kX3EtPnJlZ19iYXNlLCBDTURfUV9DT05UUk9MX0JB U0UsDQorCQkgICAgICBjbWRfcS0+cWNvbnRyb2wgfCBDTURfUV9SVU4pOw0KKw0KKwlvcC0+c3Rh dHVzID0gUlRFX0NSWVBUT19PUF9TVEFUVVNfTk9UX1BST0NFU1NFRDsNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcGVyZm9ybV9hZXNfZ2NtKHN0cnVjdCBydGVfY3J5cHRv X29wICpvcCwgc3RydWN0IGNjcF9xdWV1ZSAqY21kX3EpDQorew0KKwlzdHJ1Y3QgY2NwX3Nlc3Np b24gKnNlc3Npb247DQorCXVuaW9uIGNjcF9mdW5jdGlvbiBmdW5jdGlvbjsNCisJdWludDhfdCAq bHNiX2J1ZiwgKmFwcGVuZF9wdHIsICppdjsNCisJc3RydWN0IGNjcF9wYXNzdGhydSBwc3Q7DQor CXN0cnVjdCBjY3BfZGVzYyAqZGVzYzsNCisJdWludDMyX3QgdGFpbDsNCisJdWludDY0X3QgKnRl bXA7DQorCXBoeXNfYWRkcl90IHNyY19hZGRyLCBkZXN0X2FkZHIsIGtleV9hZGRyLCBhYWRfYWRk cjsNCisJcGh5c19hZGRyX3QgZGlnZXN0X2Rlc3RfYWRkcjsNCisJaW50IGxlbmd0aCwgbm9uX2Fs aWduX2xlbiwgaTsNCisNCisJc2Vzc2lvbiA9IChzdHJ1Y3QgY2NwX3Nlc3Npb24gKilnZXRfc2Vz c2lvbl9wcml2YXRlX2RhdGEoDQorCQkJCQkgb3AtPnN5bS0+c2Vzc2lvbiwNCisJCQkJCSBjcnlw dG9kZXZfZHJpdmVyX2lkKTsNCisJaXYgPSBydGVfY3J5cHRvX29wX2N0b2Rfb2Zmc2V0KG9wLCB1 aW50OF90ICosIHNlc3Npb24tPml2Lm9mZnNldCk7DQorCWtleV9hZGRyID0gcnRlX21lbV92aXJ0 MnBoeShzZXNzaW9uLT5jaXBoZXIua2V5X2NjcCk7DQorDQorCXNyY19hZGRyID0gcnRlX3BrdG1i dWZfbXRvcGh5c19vZmZzZXQob3AtPnN5bS0+bV9zcmMsDQorCQkJCQkgICAgICBvcC0+c3ltLT5j aXBoZXIuZGF0YS5vZmZzZXQpOw0KKwlpZiAodW5saWtlbHkob3AtPnN5bS0+bV9kc3QgIT0gTlVM TCkpDQorCQlkZXN0X2FkZHIgPSBydGVfcGt0bWJ1Zl9tdG9waHlzX29mZnNldChvcC0+c3ltLT5t X2RzdCwNCisJCQkJCQlvcC0+c3ltLT5jaXBoZXIuZGF0YS5vZmZzZXQpOw0KKwllbHNlDQorCQlk ZXN0X2FkZHIgPSBzcmNfYWRkcjsNCisJYXBwZW5kX3B0ciA9ICh1aW50OF90ICopcnRlX3BrdG1i dWZfYXBwZW5kKG9wLT5zeW0tPm1fc3JjLA0KKwkJCQkJCSAgIHNlc3Npb24tPmF1dGguY3R4X2xl bik7DQorCWRpZ2VzdF9kZXN0X2FkZHIgPSAocGh5c19hZGRyX3QpcnRlX21lbV92aXJ0MnBoeSgo dm9pZCAqKWFwcGVuZF9wdHIpOw0KKwlhcHBlbmRfcHRyICs9IEFFU19CTE9DS19TSVpFOw0KKwl0 ZW1wID0gKHVpbnQ2NF90ICopYXBwZW5kX3B0cjsNCisJKnRlbXArKyA9ICBydGVfYnN3YXA2NChz ZXNzaW9uLT5hdXRoLmFhZF9sZW5ndGggPDwgMyk7DQorCSp0ZW1wID0gIHJ0ZV9ic3dhcDY0KG9w LT5zeW0tPmNpcGhlci5kYXRhLmxlbmd0aCA8PCAzKTsNCisNCisJbm9uX2FsaWduX2xlbiA9IG9w LT5zeW0tPmNpcGhlci5kYXRhLmxlbmd0aCAlIEFFU19CTE9DS19TSVpFOw0KKwlsZW5ndGggPSBD Q1BfQUxJR04ob3AtPnN5bS0+Y2lwaGVyLmRhdGEubGVuZ3RoLCBBRVNfQkxPQ0tfU0laRSk7DQor DQorCWFhZF9hZGRyID0gcnRlX21lbV92aXJ0MnBoeSgodm9pZCAqKW9wLT5zeW0tPmFlYWQuYWFk LmRhdGEpOw0KKw0KKwkvKiBDTUQxIElWIFBhc3N0aHJ1ICovDQorCWZvciAoaSA9IDA7ICBpIDwg Q1RSX0lWX1NJWkU7IGkrKykNCisJCXNlc3Npb24tPmNpcGhlci5ub25jZVtDVFJfTk9OQ0VfU0la RSArIENUUl9JVl9TSVpFIC0gMSAtIGldID0NCisJCQlpdltpXTsNCisJbHNiX2J1ZiA9IHNlc3Np b24tPmNpcGhlci5ub25jZTsNCisNCisJcHN0LnNyY19hZGRyID0gKHBoeXNfYWRkcl90KXJ0ZV9t ZW1fdmlydDJwaHkoKHZvaWQgKikgbHNiX2J1Zik7DQorCXBzdC5kZXN0X2FkZHIgPSAocGh5c19h ZGRyX3QpKGNtZF9xLT5zYl9pdiAqIENDUF9TQl9CWVRFUyk7DQorCXBzdC5sZW4gPSBDQ1BfU0Jf QllURVM7DQorCXBzdC5kaXIgPSAxOw0KKwlwc3QuYml0X21vZCA9IENDUF9QQVNTVEhSVV9CSVRX SVNFX05PT1A7DQorCXBzdC5ieXRlX3N3YXAgPSBDQ1BfUEFTU1RIUlVfQllURVNXQVBfTk9PUDsN CisJY2NwX3BlcmZvcm1fcGFzc3RocnUoJnBzdCwgY21kX3EpOw0KKw0KKwkvKiBDTUQyIEdIQVNI LUFBRCAqLw0KKwlmdW5jdGlvbi5yYXcgPSAwOw0KKwlDQ1BfQUVTX0VOQ1JZUFQoJmZ1bmN0aW9u KSA9IENDUF9BRVNfTU9ERV9HSEFTSF9BQUQ7DQorCUNDUF9BRVNfTU9ERSgmZnVuY3Rpb24pID0g Q0NQX0FFU19NT0RFX0dIQVNIOw0KKwlDQ1BfQUVTX1RZUEUoJmZ1bmN0aW9uKSA9IHNlc3Npb24t PmNpcGhlci51dC5hZXNfdHlwZTsNCisNCisJZGVzYyA9ICZjbWRfcS0+cWJhc2VfZGVzY1tjbWRf cS0+cWlkeF07DQorCW1lbXNldChkZXNjLCAwLCBRX0RFU0NfU0laRSk7DQorDQorCUNDUF9DTURf RU5HSU5FKGRlc2MpID0gQ0NQX0VOR0lORV9BRVM7DQorCUNDUF9DTURfSU5JVChkZXNjKSA9IDE7 DQorCUNDUF9DTURfRlVOQ1RJT04oZGVzYykgPSBmdW5jdGlvbi5yYXc7DQorDQorCUNDUF9DTURf TEVOKGRlc2MpID0gc2Vzc2lvbi0+YXV0aC5hYWRfbGVuZ3RoOw0KKw0KKwlDQ1BfQ01EX1NSQ19M TyhkZXNjKSA9ICgodWludDMyX3QpYWFkX2FkZHIpOw0KKwlDQ1BfQ01EX1NSQ19ISShkZXNjKSA9 IGhpZ2gzMl92YWx1ZShhYWRfYWRkcik7DQorCUNDUF9DTURfU1JDX01FTShkZXNjKSA9IENDUF9N RU1UWVBFX1NZU1RFTTsNCisNCisJQ0NQX0NNRF9LRVlfTE8oZGVzYykgPSAoKHVpbnQzMl90KWtl eV9hZGRyKTsNCisJQ0NQX0NNRF9LRVlfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoa2V5X2FkZHIp Ow0KKwlDQ1BfQ01EX0tFWV9NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQorDQorCUND UF9DTURfTFNCX0lEKGRlc2MpID0gY21kX3EtPnNiX2l2Ow0KKw0KKwljbWRfcS0+cWlkeCA9IChj bWRfcS0+cWlkeCArIDEpICUgQ09NTUFORFNfUEVSX1FVRVVFOw0KKwlydGVfd21iKCk7DQorDQor CXRhaWwgPSAodWludDMyX3QpKGNtZF9xLT5xYmFzZV9waHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAq IFFfREVTQ19TSVpFKTsNCisJQ0NQX1dSSVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX1RB SUxfTE9fQkFTRSwgdGFpbCk7DQorCUNDUF9XUklURV9SRUcoY21kX3EtPnJlZ19iYXNlLCBDTURf UV9DT05UUk9MX0JBU0UsDQorCQkgICAgICBjbWRfcS0+cWNvbnRyb2wgfCBDTURfUV9SVU4pOw0K Kw0KKwkvKiBDTUQzIDogR0NUUiBQbGFpbiB0ZXh0ICovDQorCWZ1bmN0aW9uLnJhdyA9IDA7DQor CUNDUF9BRVNfRU5DUllQVCgmZnVuY3Rpb24pID0gc2Vzc2lvbi0+Y2lwaGVyLmRpcjsNCisJQ0NQ X0FFU19NT0RFKCZmdW5jdGlvbikgPSBDQ1BfQUVTX01PREVfR0NUUjsNCisJQ0NQX0FFU19UWVBF KCZmdW5jdGlvbikgPSBzZXNzaW9uLT5jaXBoZXIudXQuYWVzX3R5cGU7DQorCWlmIChub25fYWxp Z25fbGVuID09IDApDQorCQlDQ1BfQUVTX1NJWkUoJmZ1bmN0aW9uKSA9IChBRVNfQkxPQ0tfU0la RSA8PCAzKSAtIDE7DQorCWVsc2UNCisJCUNDUF9BRVNfU0laRSgmZnVuY3Rpb24pID0gKG5vbl9h bGlnbl9sZW4gPDwgMykgLSAxOw0KKw0KKw0KKwlkZXNjID0gJmNtZF9xLT5xYmFzZV9kZXNjW2Nt ZF9xLT5xaWR4XTsNCisJbWVtc2V0KGRlc2MsIDAsIFFfREVTQ19TSVpFKTsNCisNCisJQ0NQX0NN RF9FTkdJTkUoZGVzYykgPSBDQ1BfRU5HSU5FX0FFUzsNCisJQ0NQX0NNRF9FT00oZGVzYykgPSAx Ow0KKwlDQ1BfQ01EX0ZVTkNUSU9OKGRlc2MpID0gZnVuY3Rpb24ucmF3Ow0KKw0KKwlDQ1BfQ01E X0xFTihkZXNjKSA9IGxlbmd0aDsNCisNCisJQ0NQX0NNRF9TUkNfTE8oZGVzYykgPSAoKHVpbnQz Ml90KXNyY19hZGRyKTsNCisJQ0NQX0NNRF9TUkNfSEkoZGVzYykgPSBoaWdoMzJfdmFsdWUoc3Jj X2FkZHIpOw0KKwlDQ1BfQ01EX1NSQ19NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQor DQorCUNDUF9DTURfRFNUX0xPKGRlc2MpID0gKCh1aW50MzJfdClkZXN0X2FkZHIpOw0KKwlDQ1Bf Q01EX0RTVF9ISShkZXNjKSA9IGhpZ2gzMl92YWx1ZShkZXN0X2FkZHIpOw0KKwlDQ1BfQ01EX1NS Q19NRU0oZGVzYykgPSBDQ1BfTUVNVFlQRV9TWVNURU07DQorDQorCUNDUF9DTURfS0VZX0xPKGRl c2MpID0gKCh1aW50MzJfdClrZXlfYWRkcik7DQorCUNDUF9DTURfS0VZX0hJKGRlc2MpID0gaGln aDMyX3ZhbHVlKGtleV9hZGRyKTsNCisJQ0NQX0NNRF9LRVlfTUVNKGRlc2MpID0gQ0NQX01FTVRZ UEVfU1lTVEVNOw0KKw0KKwlDQ1BfQ01EX0xTQl9JRChkZXNjKSA9IGNtZF9xLT5zYl9pdjsNCisN CisJY21kX3EtPnFpZHggPSAoY21kX3EtPnFpZHggKyAxKSAlIENPTU1BTkRTX1BFUl9RVUVVRTsN CisJcnRlX3dtYigpOw0KKw0KKwl0YWlsID0gKHVpbnQzMl90KShjbWRfcS0+cWJhc2VfcGh5c19h ZGRyICsgY21kX3EtPnFpZHggKiBRX0RFU0NfU0laRSk7DQorCUNDUF9XUklURV9SRUcoY21kX3Et PnJlZ19iYXNlLCBDTURfUV9UQUlMX0xPX0JBU0UsIHRhaWwpOw0KKwlDQ1BfV1JJVEVfUkVHKGNt ZF9xLT5yZWdfYmFzZSwgQ01EX1FfQ09OVFJPTF9CQVNFLA0KKwkJICAgICAgY21kX3EtPnFjb250 cm9sIHwgQ01EX1FfUlVOKTsNCisNCisJLyogQ01ENCA6IFBUIHRvIGNvcHkgSVYgKi8NCisJcHN0 LnNyY19hZGRyID0gKHBoeXNfYWRkcl90KXJ0ZV9tZW1fdmlydDJwaHkoKHZvaWQgKikgbHNiX2J1 Zik7DQorCXBzdC5kZXN0X2FkZHIgPSAocGh5c19hZGRyX3QpKGNtZF9xLT5zYl9pdiAqIENDUF9T Ql9CWVRFUyk7DQorCXBzdC5sZW4gPSBBRVNfQkxPQ0tfU0laRTsNCisJcHN0LmRpciA9IDE7DQor CXBzdC5iaXRfbW9kID0gQ0NQX1BBU1NUSFJVX0JJVFdJU0VfTk9PUDsNCisJcHN0LmJ5dGVfc3dh cCA9IENDUF9QQVNTVEhSVV9CWVRFU1dBUF9OT09QOw0KKwljY3BfcGVyZm9ybV9wYXNzdGhydSgm cHN0LCBjbWRfcSk7DQorDQorCS8qIENNRDUgOiBHSEFTSC1GaW5hbCAqLw0KKwlmdW5jdGlvbi5y YXcgPSAwOw0KKwlDQ1BfQUVTX0VOQ1JZUFQoJmZ1bmN0aW9uKSA9IENDUF9BRVNfTU9ERV9HSEFT SF9GSU5BTDsNCisJQ0NQX0FFU19NT0RFKCZmdW5jdGlvbikgPSBDQ1BfQUVTX01PREVfR0hBU0g7 DQorCUNDUF9BRVNfVFlQRSgmZnVuY3Rpb24pID0gc2Vzc2lvbi0+Y2lwaGVyLnV0LmFlc190eXBl Ow0KKw0KKwlkZXNjID0gJmNtZF9xLT5xYmFzZV9kZXNjW2NtZF9xLT5xaWR4XTsNCisJbWVtc2V0 KGRlc2MsIDAsIFFfREVTQ19TSVpFKTsNCisNCisJQ0NQX0NNRF9FTkdJTkUoZGVzYykgPSBDQ1Bf RU5HSU5FX0FFUzsNCisJQ0NQX0NNRF9GVU5DVElPTihkZXNjKSA9IGZ1bmN0aW9uLnJhdzsNCisJ LyogTGFzdCBibG9jayAoQUFEX2xlbiB8fCBQVF9sZW4pKi8NCisJQ0NQX0NNRF9MRU4oZGVzYykg PSBBRVNfQkxPQ0tfU0laRTsNCisNCisJQ0NQX0NNRF9TUkNfTE8oZGVzYykgPSAoKHVpbnQzMl90 KWRpZ2VzdF9kZXN0X2FkZHIgKyBBRVNfQkxPQ0tfU0laRSk7DQorCUNDUF9DTURfU1JDX0hJKGRl c2MpID0gaGlnaDMyX3ZhbHVlKGRpZ2VzdF9kZXN0X2FkZHIgKyBBRVNfQkxPQ0tfU0laRSk7DQor CUNDUF9DTURfU1JDX01FTShkZXNjKSA9IENDUF9NRU1UWVBFX1NZU1RFTTsNCisNCisJQ0NQX0NN RF9EU1RfTE8oZGVzYykgPSAoKHVpbnQzMl90KWRpZ2VzdF9kZXN0X2FkZHIpOw0KKwlDQ1BfQ01E X0RTVF9ISShkZXNjKSA9IGhpZ2gzMl92YWx1ZShkaWdlc3RfZGVzdF9hZGRyKTsNCisJQ0NQX0NN RF9TUkNfTUVNKGRlc2MpID0gQ0NQX01FTVRZUEVfU1lTVEVNOw0KKw0KKwlDQ1BfQ01EX0tFWV9M TyhkZXNjKSA9ICgodWludDMyX3Qpa2V5X2FkZHIpOw0KKwlDQ1BfQ01EX0tFWV9ISShkZXNjKSA9 IGhpZ2gzMl92YWx1ZShrZXlfYWRkcik7DQorCUNDUF9DTURfS0VZX01FTShkZXNjKSA9IENDUF9N RU1UWVBFX1NZU1RFTTsNCisNCisJQ0NQX0NNRF9MU0JfSUQoZGVzYykgPSBjbWRfcS0+c2JfaXY7 DQorDQorCWNtZF9xLT5xaWR4ID0gKGNtZF9xLT5xaWR4ICsgMSkgJSBDT01NQU5EU19QRVJfUVVF VUU7DQorCXJ0ZV93bWIoKTsNCisNCisJdGFpbCA9ICh1aW50MzJfdCkoY21kX3EtPnFiYXNlX3Bo eXNfYWRkciArIGNtZF9xLT5xaWR4ICogUV9ERVNDX1NJWkUpOw0KKwlDQ1BfV1JJVEVfUkVHKGNt ZF9xLT5yZWdfYmFzZSwgQ01EX1FfVEFJTF9MT19CQVNFLCB0YWlsKTsNCisJQ0NQX1dSSVRFX1JF RyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX0NPTlRST0xfQkFTRSwNCisJCSAgICAgIGNtZF9xLT5x Y29udHJvbCB8IENNRF9RX1JVTik7DQorDQorCW9wLT5zdGF0dXMgPSBSVEVfQ1JZUFRPX09QX1NU QVRVU19OT1RfUFJPQ0VTU0VEOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSBp bnQNCitjY3BfY3J5cHRvX2NpcGhlcihzdHJ1Y3QgcnRlX2NyeXB0b19vcCAqb3AsDQorCQkgIHN0 cnVjdCBjY3BfcXVldWUgKmNtZF9xLA0KKwkJICBzdHJ1Y3QgY2NwX2JhdGNoX2luZm8gKmJfaW5m bykNCit7DQorCWludCByZXN1bHQ7DQorCXN0cnVjdCBjY3Bfc2Vzc2lvbiAqc2Vzc2lvbjsNCisN CisJc2Vzc2lvbiA9IChzdHJ1Y3QgY2NwX3Nlc3Npb24gKilnZXRfc2Vzc2lvbl9wcml2YXRlX2Rh dGEoDQorCQkJCQkgb3AtPnN5bS0+c2Vzc2lvbiwNCisJCQkJCSBjcnlwdG9kZXZfZHJpdmVyX2lk KTsNCisNCisJc3dpdGNoIChzZXNzaW9uLT5jaXBoZXIuYWxnbykgew0KKwljYXNlIENDUF9DSVBI RVJfQUxHT19BRVNfQ0JDOg0KKwkJcmVzdWx0ID0gY2NwX3BlcmZvcm1fYWVzKG9wLCBjbWRfcSwg Yl9pbmZvKTsNCisJCWJfaW5mby0+ZGVzY2NudCArPSAyOw0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQ X0NJUEhFUl9BTEdPX0FFU19DVFI6DQorCQlyZXN1bHQgPSBjY3BfcGVyZm9ybV9hZXMob3AsIGNt ZF9xLCBiX2luZm8pOw0KKwkJYl9pbmZvLT5kZXNjY250ICs9IDI7DQorCQlicmVhazsNCisJY2Fz ZSBDQ1BfQ0lQSEVSX0FMR09fQUVTX0VDQjoNCisJCXJlc3VsdCA9IGNjcF9wZXJmb3JtX2Flcyhv cCwgY21kX3EsIGJfaW5mbyk7DQorCQliX2luZm8tPmRlc2NjbnQgKz0gMTsNCisJCWJyZWFrOw0K KwljYXNlIENDUF9DSVBIRVJfQUxHT18zREVTX0NCQzoNCisJCXJlc3VsdCA9IGNjcF9wZXJmb3Jt XzNkZXMob3AsIGNtZF9xLCBiX2luZm8pOw0KKwkJYl9pbmZvLT5kZXNjY250ICs9IDI7DQorCQli cmVhazsNCisJZGVmYXVsdDoNCisJCUNDUF9MT0dfRVJSKCJVbnN1cHBvcnRlZCBDaXBoZXIgYWxn byIpOw0KKwkJcmVzdWx0ID0gLTE7DQorCX0NCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorc3Rh dGljIGlubGluZSBpbnQNCitjY3BfY3J5cHRvX2F1dGgoc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKm9w LA0KKwkJc3RydWN0IGNjcF9xdWV1ZSAqY21kX3EsDQorCQlzdHJ1Y3QgY2NwX2JhdGNoX2luZm8g KmJfaW5mbykNCit7DQorDQorCWludCByZXN1bHQgID0gMDsNCisJc3RydWN0IGNjcF9zZXNzaW9u ICpzZXNzaW9uOw0KKw0KKwlzZXNzaW9uID0gKHN0cnVjdCBjY3Bfc2Vzc2lvbiAqKWdldF9zZXNz aW9uX3ByaXZhdGVfZGF0YSgNCisJCQkJCSBvcC0+c3ltLT5zZXNzaW9uLA0KKwkJCQkJIGNyeXB0 b2Rldl9kcml2ZXJfaWQpOw0KKw0KKwlzd2l0Y2ggKHNlc3Npb24tPmF1dGguYWxnbykgew0KKwlj YXNlIENDUF9BVVRIX0FMR09fU0hBMToNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTIyNDoNCisJ Y2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTI1NjoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTM4NDoN CisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTUxMjoNCisJCXJlc3VsdCA9IGNjcF9wZXJmb3JtX3No YShvcCwgY21kX3EpOw0KKwkJYl9pbmZvLT5kZXNjY250ICs9IDM7DQorCQlicmVhazsNCisJY2Fz ZSBDQ1BfQVVUSF9BTEdPX1NIQTFfSE1BQzoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTIyNF9I TUFDOg0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBMjU2X0hNQUM6DQorCQlyZXN1bHQgPSBjY3Bf cGVyZm9ybV9obWFjKG9wLCBjbWRfcSk7DQorCQliX2luZm8tPmRlc2NjbnQgKz0gNjsNCisJCWJy ZWFrOw0KKw0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBMzg0X0hNQUM6DQorCWNhc2UgQ0NQX0FV VEhfQUxHT19TSEE1MTJfSE1BQzoNCisJCXJlc3VsdCA9IGNjcF9wZXJmb3JtX2htYWMob3AsIGNt ZF9xKTsNCisJCWJfaW5mby0+ZGVzY2NudCArPSA3Ow0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0FV VEhfQUxHT19TSEEzXzIyNDoNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTNfMjU2Og0KKwljYXNl IENDUF9BVVRIX0FMR09fU0hBM18zODQ6DQorCWNhc2UgQ0NQX0FVVEhfQUxHT19TSEEzXzUxMjoN CisJCXJlc3VsdCA9IGNjcF9wZXJmb3JtX3NoYTMob3AsIGNtZF9xKTsNCisJCWJfaW5mby0+ZGVz Y2NudCArPSAxOw0KKwkJYnJlYWs7DQorCWNhc2UgQ0NQX0FVVEhfQUxHT19TSEEzXzIyNF9ITUFD Og0KKwljYXNlIENDUF9BVVRIX0FMR09fU0hBM18yNTZfSE1BQzoNCisJCXJlc3VsdCA9IGNjcF9w ZXJmb3JtX3NoYTNfaG1hYyhvcCwgY21kX3EpOw0KKwkJYl9pbmZvLT5kZXNjY250ICs9IDM7DQor CQlicmVhazsNCisJY2FzZSBDQ1BfQVVUSF9BTEdPX1NIQTNfMzg0X0hNQUM6DQorCWNhc2UgQ0NQ X0FVVEhfQUxHT19TSEEzXzUxMl9ITUFDOg0KKwkJcmVzdWx0ID0gY2NwX3BlcmZvcm1fc2hhM19o bWFjKG9wLCBjbWRfcSk7DQorCQliX2luZm8tPmRlc2NjbnQgKz0gNDsNCisJCWJyZWFrOw0KKwlj YXNlIENDUF9BVVRIX0FMR09fQUVTX0NNQUM6DQorCQlyZXN1bHQgPSBjY3BfcGVyZm9ybV9hZXNf Y21hYyhvcCwgY21kX3EpOw0KKwkJYl9pbmZvLT5kZXNjY250ICs9IDQ7DQorCQlicmVhazsNCisJ ZGVmYXVsdDoNCisJCUNDUF9MT0dfRVJSKCJVbnN1cHBvcnRlZCBDaXBoZXIgYWxnbyIpOw0KKwkJ cmVzdWx0ID0gLTE7DQorCX0NCisNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorc3RhdGljIGlu bGluZSBpbnQNCitjY3BfY3J5cHRvX2NvbWJpbmVkKHN0cnVjdCBydGVfY3J5cHRvX29wICpvcCwN CisJCSAgICBzdHJ1Y3QgY2NwX3F1ZXVlICpjbWRfcSBfX3J0ZV91bnVzZWQsDQorCQkgICAgc3Ry dWN0IGNjcF9iYXRjaF9pbmZvICpiX2luZm8gX19ydGVfdW51c2VkKQ0KK3sNCisJaW50IHJlc3Vs dCAgPSAwOw0KKwlzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNlc3Npb247DQorDQorCXNlc3Npb24gPSAo c3RydWN0IGNjcF9zZXNzaW9uICopZ2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRhKA0KKwkJCQkJIG9w LT5zeW0tPnNlc3Npb24sDQorCQkJCQkgY3J5cHRvZGV2X2RyaXZlcl9pZCk7DQorDQorCXN3aXRj aCAoc2Vzc2lvbi0+YXV0aC5hbGdvKSB7DQorCWNhc2UgQ0NQX0FVVEhfQUxHT19BRVNfR0NNOg0K KwkJaWYgKHNlc3Npb24tPmNpcGhlci5hbGdvICE9IENDUF9DSVBIRVJfQUxHT19BRVNfR0NNKSB7 DQorCQkJQ0NQX0xPR19FUlIoIkluY29ycmVjdCBjaGFpbiBvcmRlciIpOw0KKwkJCXJldHVybiAt MTsNCisJCX0NCisJCXJlc3VsdCA9IGNjcF9wZXJmb3JtX2Flc19nY20ob3AsIGNtZF9xKTsNCisJ CWJfaW5mby0+ZGVzY2NudCArPSA1Ow0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlDQ1BfTE9H X0VSUigiVW5zdXBwb3J0ZWQgY29tYmluZWQgYWxnbyIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQor CXJldHVybiByZXN1bHQ7DQorfQ0KKw0KK2ludA0KK3Byb2Nlc3Nfb3BzX3RvX2VucXVldWUoY29u c3Qgc3RydWN0IGNjcF9xcCAqcXAsDQorCQkgICAgICAgc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKipv cCwNCisJCSAgICAgICBzdHJ1Y3QgY2NwX3F1ZXVlICpjbWRfcSwNCisJCSAgICAgICB1aW50MTZf dCBuYl9vcHMsDQorCQkgICAgICAgaW50IHNsb3RzX3JlcSkNCit7DQorCWludCBpLCByZXN1bHQg PSAwOw0KKwlzdHJ1Y3QgY2NwX2JhdGNoX2luZm8gKmJfaW5mbzsNCisJc3RydWN0IGNjcF9zZXNz aW9uICpzZXNzaW9uOw0KKyNpZmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisJRVZQ X01EX0NUWCAqYXV0aF9jdHggPSBOVUxMOw0KKyNlbmRpZg0KKw0KKwlpZiAocnRlX21lbXBvb2xf Z2V0KHFwLT5iYXRjaF9tcCwgKHZvaWQgKiopJmJfaW5mbykpIHsNCisJCUNDUF9MT0dfRVJSKCJi YXRjaCBpbmZvIGFsbG9jYXRpb24gZmFpbGVkIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKyNpZmRl ZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisJYXV0aF9jdHggPSBFVlBfTURfQ1RYX2Ny ZWF0ZSgpOw0KKwlpZiAodW5saWtlbHkoIWF1dGhfY3R4KSkgew0KKwkJQ0NQX0xPR19FUlIoIlVu YWJsZSB0byBjcmVhdGUgYXV0aCBjdHgiKTsNCisJCXJldHVybiAwOw0KKwl9DQorCWJfaW5mby0+ YXV0aF9vbmx5ID0gMTsNCisjZW5kaWYNCisJLyogcG9wdWxhdGUgYmF0Y2ggaW5mbyBuZWNlc3Nh cnkgZm9yIGRlcXVldWUgKi8NCisJYl9pbmZvLT5vcF9pZHggPSAwOw0KKwliX2luZm8tPmxzYl9i dWZfaWR4ID0gMDsNCisJYl9pbmZvLT5kZXNjY250ID0gMDsNCisJYl9pbmZvLT5jbWRfcSA9IGNt ZF9xOw0KKwliX2luZm8tPmxzYl9idWZfcGh5cyA9DQorCQkocGh5c19hZGRyX3QpcnRlX21lbV92 aXJ0MnBoeSgodm9pZCAqKWJfaW5mby0+bHNiX2J1Zik7DQorCXJ0ZV9hdG9taWM2NF9zdWIoJmJf aW5mby0+Y21kX3EtPmZyZWVfc2xvdHMsIHNsb3RzX3JlcSk7DQorDQorCWJfaW5mby0+aGVhZF9v ZmZzZXQgPSAodWludDMyX3QpKGNtZF9xLT5xYmFzZV9waHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAq DQorCQkJCQkgUV9ERVNDX1NJWkUpOw0KKwlmb3IgKGkgPSAwOyBpIDwgbmJfb3BzOyBpKyspIHsN CisJCXNlc3Npb24gPSAoc3RydWN0IGNjcF9zZXNzaW9uICopZ2V0X3Nlc3Npb25fcHJpdmF0ZV9k YXRhKA0KKwkJCQkJCSBvcFtpXS0+c3ltLT5zZXNzaW9uLA0KKwkJCQkJCSBjcnlwdG9kZXZfZHJp dmVyX2lkKTsNCisJCXN3aXRjaCAoc2Vzc2lvbi0+Y21kX2lkKSB7DQorCQljYXNlIENDUF9DTURf Q0lQSEVSOg0KKwkJCXJlc3VsdCA9IGNjcF9jcnlwdG9fY2lwaGVyKG9wW2ldLCBjbWRfcSwgYl9p bmZvKTsNCisJCQlicmVhazsNCisJCWNhc2UgQ0NQX0NNRF9BVVRIOg0KKyNpZm5kZWYgUlRFX0xJ QlJURV9QTURfQ0NQX0NQVV9BVVRIDQorCQkJcmVzdWx0ID0gY2NwX2NyeXB0b19hdXRoKG9wW2ld LCBjbWRfcSwgYl9pbmZvKTsNCisjZWxzZQ0KKwkJCXJlc3VsdCA9IGNwdV9jcnlwdG9fYXV0aChv cFtpXSwgc2Vzc2lvbiwgYXV0aF9jdHgpOw0KKyNlbmRpZg0KKwkJCWJyZWFrOw0KKwkJY2FzZSBD Q1BfQ01EX0NJUEhFUl9IQVNIOg0KKwkJCXJlc3VsdCA9IGNjcF9jcnlwdG9fY2lwaGVyKG9wW2ld LCBjbWRfcSwgYl9pbmZvKTsNCisJCQlpZiAocmVzdWx0KQ0KKwkJCQlicmVhazsNCisjaWZuZGVm IFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKwkJCXJlc3VsdCA9IGNjcF9jcnlwdG9fYXV0 aChvcFtpXSwgY21kX3EsIGJfaW5mbyk7DQorI2Vsc2UNCisJCQliX2luZm8tPmF1dGhfb25seSA9 IDA7DQorI2VuZGlmDQorCQkJYnJlYWs7DQorCQljYXNlIENDUF9DTURfSEFTSF9DSVBIRVI6DQor I2lmbmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisJCQlyZXN1bHQgPSBjY3BfY3J5 cHRvX2F1dGgob3BbaV0sIGNtZF9xLCBiX2luZm8pOw0KKyNlbHNlDQorCQkJcmVzdWx0ID0gY3B1 X2NyeXB0b19hdXRoKG9wW2ldLCBzZXNzaW9uLCBhdXRoX2N0eCk7DQorCQkJYl9pbmZvLT5hdXRo X29ubHkgPSAwOw0KKyNlbmRpZg0KKwkJCWlmIChyZXN1bHQpDQorCQkJCWJyZWFrOw0KKwkJCXJl c3VsdCA9IGNjcF9jcnlwdG9fY2lwaGVyKG9wW2ldLCBjbWRfcSwgYl9pbmZvKTsNCisJCQlicmVh azsNCisJCWNhc2UgQ0NQX0NNRF9DT01CSU5FRDoNCisJCQlyZXN1bHQgPSBjY3BfY3J5cHRvX2Nv bWJpbmVkKG9wW2ldLCBjbWRfcSwgYl9pbmZvKTsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQor CQkJQ0NQX0xPR19FUlIoIlVuc3VwcG9ydGVkIGNtZF9pZCIpOw0KKwkJCXJlc3VsdCA9IC0xOw0K KwkJfQ0KKwkJaWYgKHVubGlrZWx5KHJlc3VsdCA8IDApKSB7DQorCQkJcnRlX2F0b21pYzY0X2Fk ZCgmYl9pbmZvLT5jbWRfcS0+ZnJlZV9zbG90cywNCisJCQkJCSAoc2xvdHNfcmVxIC0gYl9pbmZv LT5kZXNjY250KSk7DQorCQkJYnJlYWs7DQorCQl9DQorCQliX2luZm8tPm9wW2ldID0gb3BbaV07 DQorCX0NCisNCisJYl9pbmZvLT5vcGNudCA9IGk7DQorCWJfaW5mby0+dGFpbF9vZmZzZXQgPSAo dWludDMyX3QpKGNtZF9xLT5xYmFzZV9waHlzX2FkZHIgKyBjbWRfcS0+cWlkeCAqDQorCQkJCQkg UV9ERVNDX1NJWkUpOw0KKw0KKwlydGVfd21iKCk7DQorCS8qIFdyaXRlIHRoZSBuZXcgdGFpbCBh ZGRyZXNzIGJhY2sgdG8gdGhlIHF1ZXVlIHJlZ2lzdGVyICovDQorCUNDUF9XUklURV9SRUcoY21k X3EtPnJlZ19iYXNlLCBDTURfUV9UQUlMX0xPX0JBU0UsDQorCQkJICAgICAgYl9pbmZvLT50YWls X29mZnNldCk7DQorCS8qIFR1cm4gdGhlIHF1ZXVlIGJhY2sgb24gdXNpbmcgb3VyIGNhY2hlZCBj b250cm9sIHJlZ2lzdGVyICovDQorCUNDUF9XUklURV9SRUcoY21kX3EtPnJlZ19iYXNlLCBDTURf UV9DT05UUk9MX0JBU0UsDQorCQkJICAgICAgY21kX3EtPnFjb250cm9sIHwgQ01EX1FfUlVOKTsN CisNCisJcnRlX3JpbmdfZW5xdWV1ZShxcC0+cHJvY2Vzc2VkX3BrdHMsICh2b2lkICopYl9pbmZv KTsNCisNCisJcmV0dXJuIGk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjY3BfYXV0aF9k cV9wcmVwYXJlKHN0cnVjdCBydGVfY3J5cHRvX29wICpvcCkNCit7DQorCXN0cnVjdCBjY3Bfc2Vz c2lvbiAqc2Vzc2lvbjsNCisJdWludDhfdCAqZGlnZXN0X2FkZHIsICphZGRyOw0KKwlzdHJ1Y3Qg cnRlX21idWYgKm1fbGFzdDsNCisJaW50IG9mZnNldDsNCisJdWludDhfdCBkaWdlc3RfbGVbNjRd Ow0KKw0KKwlzZXNzaW9uID0gKHN0cnVjdCBjY3Bfc2Vzc2lvbiAqKWdldF9zZXNzaW9uX3ByaXZh dGVfZGF0YSgNCisJCQkJCSBvcC0+c3ltLT5zZXNzaW9uLA0KKwkJCQkJIGNyeXB0b2Rldl9kcml2 ZXJfaWQpOw0KKw0KKwltX2xhc3QgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKG9wLT5zeW0tPm1fc3Jj KTsNCisJYWRkciA9ICh1aW50OF90ICopKChjaGFyICopbV9sYXN0LT5idWZfYWRkciArIG1fbGFz dC0+ZGF0YV9vZmYgKw0KKwkJCSAgIG1fbGFzdC0+ZGF0YV9sZW4gLSBzZXNzaW9uLT5hdXRoLmN0 eF9sZW4pOw0KKw0KKwlydGVfbWIoKTsNCisJb2Zmc2V0ID0gc2Vzc2lvbi0+YXV0aC5vZmZzZXQ7 DQorCWlmIChzZXNzaW9uLT5hdXRoLmVuZ2luZSA9PSBDQ1BfRU5HSU5FX1NIQSkNCisJCWlmICgo c2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZSAhPSBDQ1BfU0hBX1RZUEVfMSkgJiYNCisJCSAgICAo c2Vzc2lvbi0+YXV0aC51dC5zaGFfdHlwZSAhPSBDQ1BfU0hBX1RZUEVfMjI0KSAmJg0KKwkJICAg IChzZXNzaW9uLT5hdXRoLnV0LnNoYV90eXBlICE9IENDUF9TSEFfVFlQRV8yNTYpKSB7DQorCQkJ LyogQWxsIG90aGVyIGFsZ29yaXRobXMgcmVxdWlyZSBieXRlDQorCQkJICogc3dhcCBkb25lIGJ5 IGhvc3QNCisJCQkgKi8NCisJCQl1bnNpZ25lZCBpbnQgaTsNCisNCisJCQlvZmZzZXQgPSBzZXNz aW9uLT5hdXRoLmN0eF9sZW4gLQ0KKwkJCQlzZXNzaW9uLT5hdXRoLm9mZnNldCAtIDE7DQorCQkJ Zm9yIChpID0gMDsgaSA8IHNlc3Npb24tPmF1dGguZGlnZXN0X2xlbmd0aDsgaSsrKQ0KKwkJCQlk aWdlc3RfbGVbaV0gPSBhZGRyW29mZnNldCAtIGldOw0KKwkJCW9mZnNldCA9IDA7DQorCQkJYWRk ciA9IGRpZ2VzdF9sZTsNCisJCX0NCisNCisJb3AtPnN0YXR1cyA9IFJURV9DUllQVE9fT1BfU1RB VFVTX1NVQ0NFU1M7DQorCWlmIChzZXNzaW9uLT5hdXRoLm9wID09IENDUF9BVVRIX09QX1ZFUklG WSkgew0KKwkJaWYgKG1lbWNtcChhZGRyICsgb2Zmc2V0LA0KKwkJCSAgIG9wLT5zeW0tPmF1dGgu ZGlnZXN0LmRhdGEsDQorCQkJICAgc2Vzc2lvbi0+YXV0aC5kaWdlc3RfbGVuZ3RoKQ0KKwkJICAg ICE9IDApDQorCQkJb3AtPnN0YXR1cyA9DQorCQkJCVJURV9DUllQVE9fT1BfU1RBVFVTX0FVVEhf RkFJTEVEOw0KKw0KKwl9IGVsc2Ugew0KKwkJZGlnZXN0X2FkZHIgPSBvcC0+c3ltLT5hdXRoLmRp Z2VzdC5kYXRhOw0KKwkJaWYgKHVubGlrZWx5KGRpZ2VzdF9hZGRyID09IDApKQ0KKwkJCWRpZ2Vz dF9hZGRyID0gcnRlX3BrdG1idWZfbXRvZF9vZmZzZXQoDQorCQkJCQlvcC0+c3ltLT5tX2RzdCwN CisJCQkJCXVpbnQ4X3QgKiwNCisJCQkJCShvcC0+c3ltLT5hdXRoLmRhdGEub2Zmc2V0ICsNCisJ CQkJCSBvcC0+c3ltLT5hdXRoLmRhdGEubGVuZ3RoKSk7DQorCQlydGVfbWVtY3B5KGRpZ2VzdF9h ZGRyLCBhZGRyICsgb2Zmc2V0LA0KKwkJCSAgIHNlc3Npb24tPmF1dGguZGlnZXN0X2xlbmd0aCk7 DQorCX0NCisJLyogVHJpbSBhcmVhIHVzZWQgZm9yIGRpZ2VzdCBmcm9tIG1idWYuICovDQorCXJ0 ZV9wa3RtYnVmX3RyaW0ob3AtPnN5bS0+bV9zcmMsDQorCQkJIHNlc3Npb24tPmF1dGguY3R4X2xl bik7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcHJlcGFyZV9vcHMoc3RydWN0IHJ0ZV9jcnlw dG9fb3AgKipvcF9kLA0KKwkJc3RydWN0IGNjcF9iYXRjaF9pbmZvICpiX2luZm8sDQorCQl1aW50 MTZfdCBuYl9vcHMpDQorew0KKwlpbnQgaSwgbWluX29wczsNCisJc3RydWN0IGNjcF9zZXNzaW9u ICpzZXNzaW9uOw0KKw0KKyNpZmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisJRVZQ X01EX0NUWCAqYXV0aF9jdHggPSBOVUxMOw0KKw0KKwlhdXRoX2N0eCA9IEVWUF9NRF9DVFhfY3Jl YXRlKCk7DQorCWlmICh1bmxpa2VseSghYXV0aF9jdHgpKSB7DQorCQlDQ1BfTE9HX0VSUigiVW5h YmxlIHRvIGNyZWF0ZSBhdXRoIGN0eCIpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisjZW5kaWYNCisJ bWluX29wcyA9IFJURV9NSU4obmJfb3BzLCBiX2luZm8tPm9wY250KTsNCisNCisJZm9yIChpID0g MDsgaSA8IG1pbl9vcHM7IGkrKykgew0KKwkJb3BfZFtpXSA9IGJfaW5mby0+b3BbYl9pbmZvLT5v cF9pZHgrK107DQorCQlzZXNzaW9uID0gKHN0cnVjdCBjY3Bfc2Vzc2lvbiAqKWdldF9zZXNzaW9u X3ByaXZhdGVfZGF0YSgNCisJCQkJCQkgb3BfZFtpXS0+c3ltLT5zZXNzaW9uLA0KKwkJCQkJCSBj cnlwdG9kZXZfZHJpdmVyX2lkKTsNCisJCXN3aXRjaCAoc2Vzc2lvbi0+Y21kX2lkKSB7DQorCQlj YXNlIENDUF9DTURfQ0lQSEVSOg0KKwkJCW9wX2RbaV0tPnN0YXR1cyA9IFJURV9DUllQVE9fT1Bf U1RBVFVTX1NVQ0NFU1M7DQorCQkJYnJlYWs7DQorCQljYXNlIENDUF9DTURfQVVUSDoNCisjaWZu ZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKwkJCWNjcF9hdXRoX2RxX3ByZXBhcmUo b3BfZFtpXSk7DQorI2VuZGlmDQorCQkJYnJlYWs7DQorCQljYXNlIENDUF9DTURfQ0lQSEVSX0hB U0g6DQorI2lmZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKwkJCWNwdV9jcnlwdG9f YXV0aChvcF9kW2ldLCBzZXNzaW9uLCBhdXRoX2N0eCk7DQorI2Vsc2UNCisJCQljY3BfYXV0aF9k cV9wcmVwYXJlKG9wX2RbaV0pOw0KKyNlbmRpZg0KKwkJCWJyZWFrOw0KKwkJY2FzZSBDQ1BfQ01E X0hBU0hfQ0lQSEVSOg0KKyNpZmRlZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisJCQlp ZiAoIWNwdV9hdXRoX3ZlcmlmeShvcF9kW2ldKSkNCisJCQkJb3BfZFtpXS0+c3RhdHVzID0gUlRF X0NSWVBUT19PUF9TVEFUVVNfU1VDQ0VTUzsNCisJCQllbHNlDQorCQkJCW9wX2RbaV0tPnN0YXR1 cyA9DQorCQkJCQlSVEVfQ1JZUFRPX09QX1NUQVRVU19BVVRIX0ZBSUxFRDsNCisjZWxzZQ0KKwkJ CWNjcF9hdXRoX2RxX3ByZXBhcmUob3BfZFtpXSk7DQorI2VuZGlmDQorCQkJYnJlYWs7DQorCQlj YXNlIENDUF9DTURfQ09NQklORUQ6DQorCQkJY2NwX2F1dGhfZHFfcHJlcGFyZShvcF9kW2ldKTsN CisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJQ0NQX0xPR19FUlIoIlVuc3VwcG9ydGVkIGNt ZF9pZCIpOw0KKwkJfQ0KKwl9DQorDQorCWJfaW5mby0+b3BjbnQgLT0gbWluX29wczsNCisJcmV0 dXJuIG1pbl9vcHM7DQorfQ0KKw0KK2ludA0KK3Byb2Nlc3Nfb3BzX3RvX2RlcXVldWUoc3RydWN0 IGNjcF9xcCAqcXAsDQorCQkgICAgICAgc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKipvcCwNCisJCSAg ICAgICB1aW50MTZfdCBuYl9vcHMpDQorew0KKwlzdHJ1Y3QgY2NwX2JhdGNoX2luZm8gKmJfaW5m bzsNCisJdWludDMyX3QgY3VyX2hlYWRfb2Zmc2V0Ow0KKw0KKwlpZiAocXAtPmJfaW5mbyAhPSBO VUxMKSB7DQorCQliX2luZm8gPSBxcC0+Yl9pbmZvOw0KKwkJaWYgKHVubGlrZWx5KGJfaW5mby0+ b3BfaWR4ID4gMCkpDQorCQkJZ290byBzdWNjZXNzOw0KKwl9IGVsc2UgaWYgKHJ0ZV9yaW5nX2Rl cXVldWUocXAtPnByb2Nlc3NlZF9wa3RzLA0KKwkJCQkgICAgKHZvaWQgKiopJmJfaW5mbykpDQor CQlyZXR1cm4gMDsNCisjaWZkZWYgUlRFX0xJQlJURV9QTURfQ0NQX0NQVV9BVVRIDQorCWlmIChi X2luZm8tPmF1dGhfb25seSA9PSAxKQ0KKwkJZ290byBzdWNjZXNzOw0KKyNlbmRpZg0KKwljdXJf aGVhZF9vZmZzZXQgPSBDQ1BfUkVBRF9SRUcoYl9pbmZvLT5jbWRfcS0+cmVnX2Jhc2UsDQorCQkJ CSAgICAgICBDTURfUV9IRUFEX0xPX0JBU0UpOw0KKw0KKwlpZiAoYl9pbmZvLT5oZWFkX29mZnNl dCA8IGJfaW5mby0+dGFpbF9vZmZzZXQpIHsNCisJCWlmICgoY3VyX2hlYWRfb2Zmc2V0ID49IGJf aW5mby0+aGVhZF9vZmZzZXQpICYmDQorCQkgICAgKGN1cl9oZWFkX29mZnNldCA8IGJfaW5mby0+ dGFpbF9vZmZzZXQpKSB7DQorCQkJcXAtPmJfaW5mbyA9IGJfaW5mbzsNCisJCQlyZXR1cm4gMDsN CisJCX0NCisJfSBlbHNlIHsNCisJCWlmICgoY3VyX2hlYWRfb2Zmc2V0ID49IGJfaW5mby0+aGVh ZF9vZmZzZXQpIHx8DQorCQkgICAgKGN1cl9oZWFkX29mZnNldCA8IGJfaW5mby0+dGFpbF9vZmZz ZXQpKSB7DQorCQkJcXAtPmJfaW5mbyA9IGJfaW5mbzsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJ fQ0KKw0KKw0KK3N1Y2Nlc3M6DQorCW5iX29wcyA9IGNjcF9wcmVwYXJlX29wcyhvcCwgYl9pbmZv LCBuYl9vcHMpOw0KKwlydGVfYXRvbWljNjRfYWRkKCZiX2luZm8tPmNtZF9xLT5mcmVlX3Nsb3Rz LCBiX2luZm8tPmRlc2NjbnQpOw0KKwliX2luZm8tPmRlc2NjbnQgPSAwOw0KKwlpZiAoYl9pbmZv LT5vcGNudCA+IDApIHsNCisJCXFwLT5iX2luZm8gPSBiX2luZm87DQorCX0gZWxzZSB7DQorCQly dGVfbWVtcG9vbF9wdXQocXAtPmJhdGNoX21wLCAodm9pZCAqKWJfaW5mbyk7DQorCQlxcC0+Yl9p bmZvID0gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gbmJfb3BzOw0KK30NCmRpZmYgLS1naXQgYS9k cml2ZXJzL2NyeXB0by9jY3AvY2NwX2NyeXB0by5oIGIvZHJpdmVycy9jcnlwdG8vY2NwL2NjcF9j cnlwdG8uaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmI3NGNiZTANCi0t LSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfY3J5cHRvLmgNCkBAIC0w LDAgKzEsNDExIEBADQorLyotDQorICogICBCU0QgTElDRU5TRQ0KKyAqDQorICogICBDb3B5cmln aHQoYykgMjAxNyBBZHZhbmNlIE1pY3JvIERldmljZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCisgKg0KKyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisgKiAgIGFyZSBtZXQ6 DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dA0KKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbg0KKyAqICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiAgICAgICBkaXN0cmlidXRpb24u DQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBZHZhbmNlIE1pY3JvIERldmljZXMsIElu YyBub3IgdGhlIG5hbWVzDQorICogICAgICAgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgICAgICBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4NCisgKiAgICAgICBw ZXJtaXNzaW9uLg0KKyAqDQorICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogICAiQVMgSVMiIEFORCBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAqICAg TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SDQorICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqICAgT1dORVIgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICog ICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UDQorICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqICAg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVA0KKyAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogICBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0K Kw0KKyNpZm5kZWYgX0NDUF9DUllQVE9fSF8NCisjZGVmaW5lIF9DQ1BfQ1JZUFRPX0hfDQorDQor I2luY2x1ZGUgPGxpbWl0cy5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorI2luY2x1ZGUgPHN0 ZGludC5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisNCisjaW5jbHVkZSA8cnRlX2F0b21pYy5o Pg0KKyNpbmNsdWRlIDxydGVfYnl0ZW9yZGVyLmg+DQorI2luY2x1ZGUgPHJ0ZV9pby5oPg0KKyNp bmNsdWRlIDxydGVfcGNpLmg+DQorI2luY2x1ZGUgPHJ0ZV9zcGlubG9jay5oPg0KKyNpbmNsdWRl IDxydGVfY3J5cHRvX3N5bS5oPg0KKyNpbmNsdWRlIDxydGVfY3J5cHRvZGV2Lmg+DQorDQorI2lu Y2x1ZGUgPGNjcF9kZXYuaD4NCisNCisjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2DQorI2RlZmlu ZSBDTUFDX1BBRF9WQUxVRSAweDgwDQorI2RlZmluZSBDVFJfTk9OQ0VfU0laRSA0DQorI2RlZmlu ZSBDVFJfSVZfU0laRSA4DQorI2RlZmluZSBDQ1BfU0hBM19DVFhfU0laRSAyMDANCisNCisvKipN YWNybyBoZWxwZXJzIGZvciBDQ1AgY29tbWFuZCBjcmVhdGlvbiovDQorI2RlZmluZQlDQ1BfQUVT X1NJWkUocCkJCSgocCktPmFlcy5zaXplKQ0KKyNkZWZpbmUJQ0NQX0FFU19FTkNSWVBUKHApCSgo cCktPmFlcy5lbmNyeXB0KQ0KKyNkZWZpbmUJQ0NQX0FFU19NT0RFKHApCQkoKHApLT5hZXMubW9k ZSkNCisjZGVmaW5lCUNDUF9BRVNfVFlQRShwKQkJKChwKS0+YWVzLnR5cGUpDQorI2RlZmluZQlD Q1BfREVTX0VOQ1JZUFQocCkJKChwKS0+ZGVzLmVuY3J5cHQpDQorI2RlZmluZQlDQ1BfREVTX01P REUocCkJCSgocCktPmRlcy5tb2RlKQ0KKyNkZWZpbmUJQ0NQX0RFU19UWVBFKHApCQkoKHApLT5k ZXMudHlwZSkNCisjZGVmaW5lCUNDUF9TSEFfVFlQRShwKQkJKChwKS0+c2hhLnR5cGUpDQorI2Rl ZmluZQlDQ1BfUFRfQllURVNXQVAocCkJKChwKS0+cHQuYnl0ZXN3YXApDQorI2RlZmluZQlDQ1Bf UFRfQklUV0lTRShwKQkoKHApLT5wdC5iaXR3aXNlKQ0KKw0KKy8qKkhNQUMqLw0KKyNkZWZpbmUg SE1BQ19JUEFEX1ZBTFVFIDB4MzYNCisjZGVmaW5lIEhNQUNfT1BBRF9WQUxVRSAweDVjDQorDQor I2lmZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVUSA0KKyNkZWZpbmUgTUQ1X0RJR0VTVF9T SVpFICAgICAgICAgMTYNCisjZGVmaW5lIE1ENV9CTE9DS19TSVpFICAgICAgICAgIDY0DQorI2Vu ZGlmDQorDQorLyoqU0hBICovDQorI2RlZmluZSBTSEExX0RJR0VTVF9TSVpFICAgICAgICAyMA0K KyNkZWZpbmUgU0hBMV9CTE9DS19TSVpFICAgICAgICAgNjQNCisNCisjZGVmaW5lIFNIQTIyNF9E SUdFU1RfU0laRSAgICAgIDI4DQorI2RlZmluZSBTSEEyMjRfQkxPQ0tfU0laRSAgICAgICA2NA0K KyNkZWZpbmUgU0hBM18yMjRfQkxPQ0tfU0laRSAgICAgMTQ0DQorDQorI2RlZmluZSBTSEEyNTZf RElHRVNUX1NJWkUgICAgICAzMg0KKyNkZWZpbmUgU0hBMjU2X0JMT0NLX1NJWkUgICAgICAgNjQN CisjZGVmaW5lIFNIQTNfMjU2X0JMT0NLX1NJWkUgICAgIDEzNg0KKw0KKyNkZWZpbmUgU0hBMzg0 X0RJR0VTVF9TSVpFICAgICAgNDgNCisjZGVmaW5lIFNIQTM4NF9CTE9DS19TSVpFICAgICAgIDEy OA0KKyNkZWZpbmUgU0hBM18zODRfQkxPQ0tfU0laRQkxMDQNCisNCisjZGVmaW5lIFNIQTUxMl9E SUdFU1RfU0laRSAgICAgIDY0DQorI2RlZmluZSBTSEE1MTJfQkxPQ0tfU0laRSAgICAgICAxMjgN CisjZGVmaW5lIFNIQTNfNTEyX0JMT0NLX1NJWkUgICAgIDcyDQorDQorLyoqU0hBIExTQiBpbnRp YWxpYXphdGlvbiB2YWx1ZXMqLw0KKw0KKyNkZWZpbmUgU0hBMV9IMAkJMHg2NzQ1MjMwMVVMDQor I2RlZmluZSBTSEExX0gxCQkweGVmY2RhYjg5VUwNCisjZGVmaW5lIFNIQTFfSDIJCTB4OThiYWRj ZmVVTA0KKyNkZWZpbmUgU0hBMV9IMwkJMHgxMDMyNTQ3NlVMDQorI2RlZmluZSBTSEExX0g0CQkw eGMzZDJlMWYwVUwNCisNCisjZGVmaW5lIFNIQTIyNF9IMAkweGMxMDU5ZWQ4VUwNCisjZGVmaW5l IFNIQTIyNF9IMQkweDM2N2NkNTA3VUwNCisjZGVmaW5lIFNIQTIyNF9IMgkweDMwNzBkZDE3VUwN CisjZGVmaW5lIFNIQTIyNF9IMwkweGY3MGU1OTM5VUwNCisjZGVmaW5lIFNIQTIyNF9INAkweGZm YzAwYjMxVUwNCisjZGVmaW5lIFNIQTIyNF9INQkweDY4NTgxNTExVUwNCisjZGVmaW5lIFNIQTIy NF9INgkweDY0Zjk4ZmE3VUwNCisjZGVmaW5lIFNIQTIyNF9INwkweGJlZmE0ZmE0VUwNCisNCisj ZGVmaW5lIFNIQTI1Nl9IMAkweDZhMDllNjY3VUwNCisjZGVmaW5lIFNIQTI1Nl9IMQkweGJiNjdh ZTg1VUwNCisjZGVmaW5lIFNIQTI1Nl9IMgkweDNjNmVmMzcyVUwNCisjZGVmaW5lIFNIQTI1Nl9I MwkweGE1NGZmNTNhVUwNCisjZGVmaW5lIFNIQTI1Nl9INAkweDUxMGU1MjdmVUwNCisjZGVmaW5l IFNIQTI1Nl9INQkweDliMDU2ODhjVUwNCisjZGVmaW5lIFNIQTI1Nl9INgkweDFmODNkOWFiVUwN CisjZGVmaW5lIFNIQTI1Nl9INwkweDViZTBjZDE5VUwNCisNCisjZGVmaW5lIFNIQTM4NF9IMAkw eGNiYmI5ZDVkYzEwNTllZDhVTEwNCisjZGVmaW5lIFNIQTM4NF9IMQkweDYyOWEyOTJhMzY3Y2Q1 MDdVTEwNCisjZGVmaW5lIFNIQTM4NF9IMgkweDkxNTkwMTVhMzA3MGRkMTdVTEwNCisjZGVmaW5l IFNIQTM4NF9IMwkweDE1MmZlY2Q4ZjcwZTU5MzlVTEwNCisjZGVmaW5lIFNIQTM4NF9INAkweDY3 MzMyNjY3ZmZjMDBiMzFVTEwNCisjZGVmaW5lIFNIQTM4NF9INQkweDhlYjQ0YTg3Njg1ODE1MTFV TEwNCisjZGVmaW5lIFNIQTM4NF9INgkweGRiMGMyZTBkNjRmOThmYTdVTEwNCisjZGVmaW5lIFNI QTM4NF9INwkweDQ3YjU0ODFkYmVmYTRmYTRVTEwNCisNCisjZGVmaW5lIFNIQTUxMl9IMAkweDZh MDllNjY3ZjNiY2M5MDhVTEwNCisjZGVmaW5lIFNIQTUxMl9IMQkweGJiNjdhZTg1ODRjYWE3M2JV TEwNCisjZGVmaW5lIFNIQTUxMl9IMgkweDNjNmVmMzcyZmU5NGY4MmJVTEwNCisjZGVmaW5lIFNI QTUxMl9IMwkweGE1NGZmNTNhNWYxZDM2ZjFVTEwNCisjZGVmaW5lIFNIQTUxMl9INAkweDUxMGU1 MjdmYWRlNjgyZDFVTEwNCisjZGVmaW5lIFNIQTUxMl9INQkweDliMDU2ODhjMmIzZTZjMWZVTEwN CisjZGVmaW5lIFNIQTUxMl9INgkweDFmODNkOWFiZmI0MWJkNmJVTEwNCisjZGVmaW5lIFNIQTUx Ml9INwkweDViZTBjZDE5MTM3ZTIxNzlVTEwNCisNCisvKioNCisgKiBDQ1Agc3VwcG9ydGVkIEFF UyBtb2Rlcw0KKyAqLw0KK2VudW0gY2NwX2Flc19tb2RlIHsNCisJQ0NQX0FFU19NT0RFX0VDQiA9 IDAsDQorCUNDUF9BRVNfTU9ERV9DQkMsDQorCUNDUF9BRVNfTU9ERV9PRkIsDQorCUNDUF9BRVNf TU9ERV9DRkIsDQorCUNDUF9BRVNfTU9ERV9DVFIsDQorCUNDUF9BRVNfTU9ERV9DTUFDLA0KKwlD Q1BfQUVTX01PREVfR0hBU0gsDQorCUNDUF9BRVNfTU9ERV9HQ1RSLA0KKwlDQ1BfQUVTX01PREVf X0xBU1QsDQorfTsNCisNCisvKioNCisgKiBDQ1AgQUVTIEdIQVNIIG1vZGUNCisgKi8NCitlbnVt IGNjcF9hZXNfZ2hhc2hfbW9kZSB7DQorCUNDUF9BRVNfTU9ERV9HSEFTSF9BQUQgPSAwLA0KKwlD Q1BfQUVTX01PREVfR0hBU0hfRklOQUwNCit9Ow0KKw0KKy8qKg0KKyAqIENDUCBzdXBwb3J0ZWQg QUVTIHR5cGVzDQorICovDQorZW51bSBjY3BfYWVzX3R5cGUgew0KKwlDQ1BfQUVTX1RZUEVfMTI4 ID0gMCwNCisJQ0NQX0FFU19UWVBFXzE5MiwNCisJQ0NQX0FFU19UWVBFXzI1NiwNCisJQ0NQX0FF U19UWVBFX19MQVNULA0KK307DQorDQorLyoqKioqIDNERVMgZW5naW5lICoqKioqLw0KKw0KKy8q Kg0KKyAqIENDUCBzdXBwb3J0ZWQgREVTLzNERVMgbW9kZXMNCisgKi8NCitlbnVtIGNjcF9kZXNf bW9kZSB7DQorCUNDUF9ERVNfTU9ERV9FQ0IgPSAwLCAvKiBOb3Qgc3VwcG9ydGVkICovDQorCUND UF9ERVNfTU9ERV9DQkMsDQorCUNDUF9ERVNfTU9ERV9DRkIsDQorfTsNCisNCisvKioNCisgKiBD Q1Agc3VwcG9ydGVkIERFUyB0eXBlcw0KKyAqLw0KK2VudW0gY2NwX2Rlc190eXBlIHsNCisJQ0NQ X0RFU19UWVBFXzEyOCA9IDAsCS8qIDExMiArIDE2IHBhcml0eSAqLw0KKwlDQ1BfREVTX1RZUEVf MTkyLAkvKiAxNjggKyAyNCBwYXJpdHkgKi8NCisJQ0NQX0RFU19UWVBFX19MQVNULA0KK307DQor DQorLyoqKioqIFNIQSBlbmdpbmUgKioqKiovDQorDQorLyoqDQorICogY2NwX3NoYV90eXBlIC0g dHlwZSBvZiBTSEEgb3BlcmF0aW9uDQorICoNCisgKiBAQ0NQX1NIQV9UWVBFXzE6IFNIQS0xIG9w ZXJhdGlvbg0KKyAqIEBDQ1BfU0hBX1RZUEVfMjI0OiBTSEEtMjI0IG9wZXJhdGlvbg0KKyAqIEBD Q1BfU0hBX1RZUEVfMjU2OiBTSEEtMjU2IG9wZXJhdGlvbg0KKyAqLw0KK2VudW0gY2NwX3NoYV90 eXBlIHsNCisJQ0NQX1NIQV9UWVBFXzEgPSAxLA0KKwlDQ1BfU0hBX1RZUEVfMjI0LA0KKwlDQ1Bf U0hBX1RZUEVfMjU2LA0KKwlDQ1BfU0hBX1RZUEVfMzg0LA0KKwlDQ1BfU0hBX1RZUEVfNTEyLA0K KwlDQ1BfU0hBX1RZUEVfUlNWRDEsDQorCUNDUF9TSEFfVFlQRV9SU1ZEMiwNCisJQ0NQX1NIQTNf VFlQRV8yMjQsDQorCUNDUF9TSEEzX1RZUEVfMjU2LA0KKwlDQ1BfU0hBM19UWVBFXzM4NCwNCisJ Q0NQX1NIQTNfVFlQRV81MTIsDQorCUNDUF9TSEFfVFlQRV9fTEFTVCwNCit9Ow0KKw0KKy8qKg0K KyAqIENDUCBzdXBwb3J0ZWQgY2lwaGVyIGFsZ29yaXRobXMNCisgKi8NCitlbnVtIGNjcF9jaXBo ZXJfYWxnbyB7DQorCUNDUF9DSVBIRVJfQUxHT19BRVNfQ0JDID0gMCwNCisJQ0NQX0NJUEhFUl9B TEdPX0FFU19FQ0IsDQorCUNDUF9DSVBIRVJfQUxHT19BRVNfQ1RSLA0KKwlDQ1BfQ0lQSEVSX0FM R09fQUVTX0dDTSwNCisJQ0NQX0NJUEhFUl9BTEdPXzNERVNfQ0JDLA0KK307DQorDQorLyoqDQor ICogQ0NQIGNpcGhlciBvcGVyYXRpb24gdHlwZQ0KKyAqLw0KK2VudW0gY2NwX2NpcGhlcl9kaXIg ew0KKwlDQ1BfQ0lQSEVSX0RJUl9ERUNSWVBUID0gMCwNCisJQ0NQX0NJUEhFUl9ESVJfRU5DUllQ VCA9IDEsDQorfTsNCisNCisvKioNCisgKiBDQ1Agc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtcw0K KyAqLw0KK2VudW0gY2NwX2hhc2hfYWxnbyB7DQorCUNDUF9BVVRIX0FMR09fU0hBMSA9IDAsDQor CUNDUF9BVVRIX0FMR09fU0hBMV9ITUFDLA0KKwlDQ1BfQVVUSF9BTEdPX1NIQTIyNCwNCisJQ0NQ X0FVVEhfQUxHT19TSEEyMjRfSE1BQywNCisJQ0NQX0FVVEhfQUxHT19TSEEzXzIyNCwNCisJQ0NQ X0FVVEhfQUxHT19TSEEzXzIyNF9ITUFDLA0KKwlDQ1BfQVVUSF9BTEdPX1NIQTI1NiwNCisJQ0NQ X0FVVEhfQUxHT19TSEEyNTZfSE1BQywNCisJQ0NQX0FVVEhfQUxHT19TSEEzXzI1NiwNCisJQ0NQ X0FVVEhfQUxHT19TSEEzXzI1Nl9ITUFDLA0KKwlDQ1BfQVVUSF9BTEdPX1NIQTM4NCwNCisJQ0NQ X0FVVEhfQUxHT19TSEEzODRfSE1BQywNCisJQ0NQX0FVVEhfQUxHT19TSEEzXzM4NCwNCisJQ0NQ X0FVVEhfQUxHT19TSEEzXzM4NF9ITUFDLA0KKwlDQ1BfQVVUSF9BTEdPX1NIQTUxMiwNCisJQ0NQ X0FVVEhfQUxHT19TSEE1MTJfSE1BQywNCisJQ0NQX0FVVEhfQUxHT19TSEEzXzUxMiwNCisJQ0NQ X0FVVEhfQUxHT19TSEEzXzUxMl9ITUFDLA0KKwlDQ1BfQVVUSF9BTEdPX0FFU19DTUFDLA0KKwlD Q1BfQVVUSF9BTEdPX0FFU19HQ00sDQorI2lmZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVU SA0KKwlDQ1BfQVVUSF9BTEdPX01ENV9ITUFDLA0KKyNlbmRpZg0KK307DQorDQorLyoqDQorICog Q0NQIGhhc2ggb3BlcmF0aW9uIHR5cGUNCisgKi8NCitlbnVtIGNjcF9oYXNoX29wIHsNCisJQ0NQ X0FVVEhfT1BfR0VORVJBVEUgPSAwLA0KKwlDQ1BfQVVUSF9PUF9WRVJJRlkgPSAxLA0KK307DQor DQorLyogQ0NQIGNyeXB0byBwcml2YXRlIHNlc3Npb24gc3RydWN0dXJlICovDQorc3RydWN0IGNj cF9zZXNzaW9uIHsNCisJZW51bSBjY3BfY21kX29yZGVyIGNtZF9pZDsNCisJLyoqPCBjaGFpbiBv cmRlciBtb2RlICovDQorCXN0cnVjdCB7DQorCQl1aW50MTZfdCBsZW5ndGg7DQorCQl1aW50MTZf dCBvZmZzZXQ7DQorCX0gaXY7DQorCS8qKjwgSVYgcGFyYW1ldGVycyAqLw0KKwlzdHJ1Y3Qgew0K KwkJZW51bSBjY3BfY2lwaGVyX2FsZ28gIGFsZ287DQorCQllbnVtIGNjcF9lbmdpbmUgIGVuZ2lu ZTsNCisJCXVuaW9uIHsNCisJCQllbnVtIGNjcF9hZXNfbW9kZSBhZXNfbW9kZTsNCisJCQllbnVt IGNjcF9kZXNfbW9kZSBkZXNfbW9kZTsNCisJCX0gdW07DQorCQl1bmlvbiB7DQorCQkJZW51bSBj Y3BfYWVzX3R5cGUgYWVzX3R5cGU7DQorCQkJZW51bSBjY3BfZGVzX3R5cGUgZGVzX3R5cGU7DQor CQl9IHV0Ow0KKwkJZW51bSBjY3BfY2lwaGVyX2RpciBkaXI7DQorCQl1aW50NjRfdCBrZXlfbGVu Z3RoOw0KKwkJLyoqPCBtYXggY2lwaGVyIGtleSBzaXplIDI1NiBiaXRzICovDQorCQl1aW50OF90 IGtleVszMl07DQorCQkvKipjY3Aga2V5IGZvcm1hdCovDQorCQl1aW50OF90IGtleV9jY3BbMzJd Ow0KKwkJcGh5c19hZGRyX3Qga2V5X3BoeXM7DQorCQkvKipBRVMtY3RyIG5vbmNlKDQpIGl2KDgp IGN0ciovDQorCQl1aW50OF90IG5vbmNlWzMyXTsNCisJCXBoeXNfYWRkcl90IG5vbmNlX3BoeXM7 DQorCX0gY2lwaGVyOw0KKwkvKio8IENpcGhlciBQYXJhbWV0ZXJzICovDQorDQorCXN0cnVjdCB7 DQorCQllbnVtIGNjcF9oYXNoX2FsZ28gYWxnbzsNCisJCWVudW0gY2NwX2VuZ2luZSAgZW5naW5l Ow0KKwkJdW5pb24gew0KKwkJCWVudW0gY2NwX2Flc19tb2RlIGFlc19tb2RlOw0KKwkJfSB1bTsN CisJCXVuaW9uIHsNCisJCQllbnVtIGNjcF9zaGFfdHlwZSBzaGFfdHlwZTsNCisJCQllbnVtIGNj cF9hZXNfdHlwZSBhZXNfdHlwZTsNCisJCX0gdXQ7DQorCQllbnVtIGNjcF9oYXNoX29wIG9wOw0K KwkJdWludDY0X3Qga2V5X2xlbmd0aDsNCisJCS8qKjwgbWF4IGhhc2gga2V5IHNpemUgMTQ0IGJ5 dGVzIChzdHJ1Y3QgY2FwYWJpbHRpZXMpICovDQorCQl1aW50OF90IGtleVsxNDRdOw0KKwkJLyoq PCBtYXggYmUga2V5IHNpemUgb2YgQUVTLUNNQUMgaXMgMzIqLw0KKwkJdWludDhfdCBrZXlfY2Nw WzMyXTsNCisJCXBoeXNfYWRkcl90IGtleV9waHlzOw0KKwkJdWludDY0X3QgZGlnZXN0X2xlbmd0 aDsNCisJCXZvaWQgKmN0eDsNCisJCWludCBjdHhfbGVuOw0KKwkJaW50IG9mZnNldDsNCisJCWlu dCBibG9ja19zaXplOw0KKwkJLyoqPEJ1ZmZlciB0byBzdG9yZSAgU29mdHdhcmUgZ2VuZXJhdGVk IHByZWNvbXV0ZSB2YWx1ZXMqLw0KKwkJLyoqPCBGb3IgSE1BQyBIKGlwYWQgXiBrZXkpIGFuZCBI KG9wYWQgXiBrZXkpICovDQorCQkvKio8IEZvciBDTUFDIEsxIElWIGFuZCBLMiBJViovDQorCQl1 aW50OF90IHByZV9jb21wdXRlWzIgKiBDQ1BfU0hBM19DVFhfU0laRV07DQorCQkvKio8U0hBMyBp bml0aWFsIGN0eCBhbGwgemVyb3MqLw0KKwkJdWludDhfdCBzaGEzX2N0eFsyMDBdOw0KKwkJaW50 IGFhZF9sZW5ndGg7DQorCX0gYXV0aDsNCisJLyoqPCBBdXRoZW50aWNhdGlvbiBQYXJhbWV0ZXJz ICovDQorCWVudW0gcnRlX2NyeXB0b19hZWFkX2FsZ29yaXRobSBhZWFkX2FsZ287DQorCS8qKjwg QUVBRCBBbGdvcml0aG0gKi8NCisNCisJdWludDMyX3QgcmVzZXJ2ZWQ7DQorfSBfX3J0ZV9jYWNo ZV9hbGlnbmVkOw0KKw0KKw0KK3N0cnVjdCBjY3BfcXA7DQorDQorLyoqDQorICogU2V0IGFuZCB2 YWxpZGF0ZSBDQ1AgY3J5cHRvIHNlc3Npb24gcGFyYW1ldGVycw0KKyAqDQorICogQHBhcmFtIHNl c3MgY2NwIHByaXZhdGUgc2Vzc2lvbg0KKyAqIEBwYXJhbSB4Zm9ybSBjcnlwdG8geGZvcm0gZm9y IHRoaXMgc2Vzc2lvbg0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG90aGVyd2lzZSAtMQ0KKyAq Lw0KK2ludCBjY3Bfc2V0X3Nlc3Npb25fcGFyYW1ldGVycyhzdHJ1Y3QgY2NwX3Nlc3Npb24gKnNl c3MsDQorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfY3J5cHRvX3N5bV94Zm9ybSAqeGZvcm0p Ow0KKw0KKy8qKg0KKyAqIEZpbmQgY291bnQgb2Ygc2xvdHMNCisgKg0KKyAqIEBwYXJhbSBzZXNz aW9uIENDUCBwcml2YXRlIHNlc3Npb24NCisgKiBAcmV0dXJuIGNvdW50IG9mIGZyZWUgc2xvdHMg YXZhaWxhYmxlDQorICovDQoraW50IGNjcF9jb21wdXRlX3Nsb3RfY291bnQoc3RydWN0IGNjcF9z ZXNzaW9uICpzZXNzaW9uKTsNCisNCisvKioNCisgKiBwcm9jZXNzIGNyeXB0byBvcHMgdG8gYmUg ZW5xdWV1ZWQNCisgKg0KKyAqIEBwYXJhbSBxcCBDQ1AgY3J5cHRvIHF1ZXVlLXBhaXINCisgKiBA cGFyYW0gb3AgY3J5cHRvIG9wcyB0YWJsZQ0KKyAqIEBwYXJhbSBjbWRfcSBDQ1AgY21kIHF1ZXVl DQorICogQHBhcmFtIG5iX29wcyBOby4gb2Ygb3BzIHRvIGJlIHN1Ym1pdHRlZA0KKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzIG90aGVyd2lzZSAtMQ0KKyAqLw0KK2ludCBwcm9jZXNzX29wc190b19l bnF1ZXVlKGNvbnN0IHN0cnVjdCBjY3BfcXAgKnFwLA0KKwkJCSAgIHN0cnVjdCBydGVfY3J5cHRv X29wICoqb3AsDQorCQkJICAgc3RydWN0IGNjcF9xdWV1ZSAqY21kX3EsDQorCQkJICAgdWludDE2 X3QgbmJfb3BzLA0KKwkJCSAgIGludCBzbG90c19yZXEpOw0KKw0KKy8qKg0KKyAqIHByb2Nlc3Mg Y3J5cHRvIG9wcyB0byBiZSBkZXF1ZXVlZA0KKyAqDQorICogQHBhcmFtIHFwIENDUCBjcnlwdG8g cXVldWUtcGFpcg0KKyAqIEBwYXJhbSBvcCBjcnlwdG8gb3BzIHRhYmxlDQorICogQHBhcmFtIG5i X29wcyByZXF1ZXN0ZWQgbm8uIG9mIG9wcw0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG90aGVy d2lzZSAtMQ0KKyAqLw0KK2ludCBwcm9jZXNzX29wc190b19kZXF1ZXVlKHN0cnVjdCBjY3BfcXAg KnFwLA0KKwkJCSAgIHN0cnVjdCBydGVfY3J5cHRvX29wICoqb3AsDQorCQkJICAgdWludDE2X3Qg bmJfb3BzKTsNCisNCisNCisvKioNCisgKiBBcGlzIGZvciBTSEEzIHBhcnRpYWwgaGFzaCBnZW5l cmF0aW9uDQorICogQHBhcmFtIGRhdGFfaW4gYnVmZmVyIHBvaW50ZXIgb24gd2hpY2ggcGhhc2gg aXMgYXBwbGllZA0KKyAqIEBwYXJhbSBkYXRhX291dCBwaGFzaCByZXN1bHQgaW4gY2NwIGJlIGZv cm1hdCBpcyB3cml0dGVuDQorICovDQoraW50IHBhcnRpYWxfaGFzaF9zaGEzXzIyNCh1aW50OF90 ICpkYXRhX2luLA0KKwkJCSAgdWludDhfdCAqZGF0YV9vdXQpOw0KKw0KK2ludCBwYXJ0aWFsX2hh c2hfc2hhM18yNTYodWludDhfdCAqZGF0YV9pbiwNCisJCQkgIHVpbnQ4X3QgKmRhdGFfb3V0KTsN CisNCitpbnQgcGFydGlhbF9oYXNoX3NoYTNfMzg0KHVpbnQ4X3QgKmRhdGFfaW4sDQorCQkJICB1 aW50OF90ICpkYXRhX291dCk7DQorDQoraW50IHBhcnRpYWxfaGFzaF9zaGEzXzUxMih1aW50OF90 ICpkYXRhX2luLA0KKwkJCSAgdWludDhfdCAqZGF0YV9vdXQpOw0KKyNlbmRpZiAvKiBfQ0NQX0NS WVBUT19IXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfZGV2LmMgYi9k cml2ZXJzL2NyeXB0by9jY3AvY2NwX2Rldi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uMmJmN2UyMg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9jcnlwdG8vY2Nw L2NjcF9kZXYuYw0KQEAgLTAsMCArMSw4NDcgQEANCisvKi0NCisgKiAgIEJTRCBMSUNFTlNFDQor ICoNCisgKiAgIENvcHlyaWdodChjKSAyMDE3IEFkdmFuY2UgTWljcm8gRGV2aWNlcywgSW5jLiBB bGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiAgIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cw0KKyAqICAgYXJlIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0K KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQorICogICAgICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqICAg ICAgIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFkdmFuY2Ug TWljcm8gRGV2aWNlcywgSW5jIG5vciB0aGUgbmFtZXMNCisgKiAgICAgICBvZiBpdHMgY29udHJp YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAg ICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp dHRlbg0KKyAqICAgICAgIHBlcm1pc3Npb24uDQorICoNCisgKiAgIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAg ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UDQorICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorICogICBP V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwNCisgKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqICAgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZDQorICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiAgIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuDQorICovDQorDQorI2luY2x1ZGUgPGRpcmVudC5oPg0KKyNpbmNsdWRlIDxmY250 bC5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVk ZSA8c3lzL21tYW4uaD4NCisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+DQorI2luY2x1ZGUgPHN5cy90 eXBlcy5oPg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisNCisjaW5jbHVkZSA8cnRlX2hleGR1bXAu aD4NCisjaW5jbHVkZSA8cnRlX21lbXpvbmUuaD4NCisjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0K KyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+DQorI2luY2x1ZGUgPHJ0ZV9zcGlubG9jay5oPg0KKyNp bmNsdWRlIDxydGVfc3RyaW5nX2Zucy5oPg0KKw0KKyNpbmNsdWRlIDxjY3BfZGV2Lmg+DQorI2lu Y2x1ZGUgPGNjcF9wY2kuaD4NCisjaW5jbHVkZSA8Y2NwX3BtZF9wcml2YXRlLmg+DQorDQorI2lu Y2x1ZGUgPG9wZW5zc2wvc2hhLmg+IC8qcGFydGlhbCBoYXNoIGFwaXMqLw0KKyNpbmNsdWRlIDxv cGVuc3NsL2NtYWMuaD4gLypzdWIga2V5IGFwaXMqLw0KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PiAvKnN1YiBrZXkgYXBpcyovDQorDQorc3RydWN0IGNjcF9saXN0IGNjcF9saXN0ID0gVEFJTFFf SEVBRF9JTklUSUFMSVpFUihjY3BfbGlzdCk7DQorc3RhdGljIGludCBjY3BfZGV2X2lkOw0KKw0K K2ludA0KK2NjcF9kZXZfc3RhcnQoc3RydWN0IHJ0ZV9jcnlwdG9kZXYgKmRldikNCit7DQorCXN0 cnVjdCBjY3BfcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQorDQorCXBy aXYtPmxhc3RfZGV2ID0gVEFJTFFfRklSU1QoJmNjcF9saXN0KTsNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0cnVjdCBjY3BfcXVldWUgKg0KK2NjcF9hbGxvdF9xdWV1ZShzdHJ1Y3QgcnRlX2NyeXB0 b2RldiAqY2RldiwgaW50IHNsb3RfcmVxKQ0KK3sNCisJaW50IGksIHJldCA9IDA7DQorCXN0cnVj dCBjY3BfZGV2aWNlICpkZXY7DQorCXN0cnVjdCBjY3BfcHJpdmF0ZSAqcHJpdiA9IGNkZXYtPmRh dGEtPmRldl9wcml2YXRlOw0KKw0KKwlkZXYgPSBUQUlMUV9ORVhUKHByaXYtPmxhc3RfZGV2LCBu ZXh0KTsNCisJaWYgKHVubGlrZWx5KGRldiA9PSBOVUxMKSkNCisJCWRldiA9IFRBSUxRX0ZJUlNU KCZjY3BfbGlzdCk7DQorCXByaXYtPmxhc3RfZGV2ID0gZGV2Ow0KKwlpZiAoZGV2LT5xaWR4ID49 IGRldi0+Y21kX3FfY291bnQpDQorCQlkZXYtPnFpZHggPSAwOw0KKwlyZXQgPSBydGVfYXRvbWlj NjRfcmVhZCgmZGV2LT5jbWRfcVtkZXYtPnFpZHhdLmZyZWVfc2xvdHMpOw0KKwlpZiAocmV0ID49 IHNsb3RfcmVxKQ0KKwkJcmV0dXJuICZkZXYtPmNtZF9xW2Rldi0+cWlkeF07DQorCWZvciAoaSA9 IDA7IGkgPCBkZXYtPmNtZF9xX2NvdW50OyBpKyspIHsNCisJCWRldi0+cWlkeCsrOw0KKwkJaWYg KGRldi0+cWlkeCA+PSBkZXYtPmNtZF9xX2NvdW50KQ0KKwkJCWRldi0+cWlkeCA9IDA7DQorCQly ZXQgPSBydGVfYXRvbWljNjRfcmVhZCgmZGV2LT5jbWRfcVtkZXYtPnFpZHhdLmZyZWVfc2xvdHMp Ow0KKwkJaWYgKHJldCA+PSBzbG90X3JlcSkNCisJCQlyZXR1cm4gJmRldi0+Y21kX3FbZGV2LT5x aWR4XTsNCisJfQ0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQoraW50DQorY2NwX3JlYWRfaHdybmco dWludDMyX3QgKnZhbHVlKQ0KK3sNCisJc3RydWN0IGNjcF9kZXZpY2UgKmRldjsNCisNCisJVEFJ TFFfRk9SRUFDSChkZXYsICZjY3BfbGlzdCwgbmV4dCkgew0KKwkJdm9pZCAqdmFkZHIgPSAodm9p ZCAqKShkZXYtPnBjaS5tZW1fcmVzb3VyY2VbMl0uYWRkcik7DQorDQorCQl3aGlsZSAoZGV2LT5o d3JuZ19yZXRyaWVzKysgPCBUUk5HX1JFVFJJRVMpIHsNCisJCQkqdmFsdWUgPSBDQ1BfUkVBRF9S RUcodmFkZHIsIFRSTkdfT1VUX1JFRyk7DQorCQkJaWYgKCp2YWx1ZSkgew0KKwkJCQlkZXYtPmh3 cm5nX3JldHJpZXMgPSAwOw0KKwkJCQlyZXR1cm4gMDsNCisJCQl9DQorCQl9DQorCQlkZXYtPmh3 cm5nX3JldHJpZXMgPSAwOw0KKwl9DQorCXJldHVybiAtMTsNCit9DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCBydGVfbWVtem9uZSAqDQorY2NwX3F1ZXVlX2RtYV96b25lX3Jlc2VydmUoY29uc3Qg Y2hhciAqcXVldWVfbmFtZSwNCisJCQkgICB1aW50MzJfdCBxdWV1ZV9zaXplLA0KKwkJCSAgIGlu dCBzb2NrZXRfaWQpDQorew0KKwljb25zdCBzdHJ1Y3QgcnRlX21lbXpvbmUgKm16Ow0KKwl1bnNp Z25lZCBpbnQgbWVtem9uZV9mbGFncyA9IDA7DQorCWNvbnN0IHN0cnVjdCBydGVfbWVtc2VnICpt czsNCisNCisJbXogPSBydGVfbWVtem9uZV9sb29rdXAocXVldWVfbmFtZSk7DQorCWlmIChteiAh PSAwKQ0KKwkJcmV0dXJuIG16Ow0KKw0KKwltcyA9IHJ0ZV9lYWxfZ2V0X3BoeXNtZW1fbGF5b3V0 KCk7DQorCXN3aXRjaCAobXNbMF0uaHVnZXBhZ2Vfc3opIHsNCisJY2FzZShSVEVfUEdTSVpFXzJN KToNCisJCW1lbXpvbmVfZmxhZ3MgPSBSVEVfTUVNWk9ORV8yTUI7DQorCQlicmVhazsNCisJY2Fz ZShSVEVfUEdTSVpFXzFHKToNCisJCW1lbXpvbmVfZmxhZ3MgPSBSVEVfTUVNWk9ORV8xR0I7DQor CQlicmVhazsNCisJY2FzZShSVEVfUEdTSVpFXzE2TSk6DQorCQltZW16b25lX2ZsYWdzID0gUlRF X01FTVpPTkVfMTZNQjsNCisJCWJyZWFrOw0KKwljYXNlKFJURV9QR1NJWkVfMTZHKToNCisJCW1l bXpvbmVfZmxhZ3MgPSBSVEVfTUVNWk9ORV8xNkdCOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQltZW16b25lX2ZsYWdzID0gUlRFX01FTVpPTkVfU0laRV9ISU5UX09OTFk7DQorCX0NCisNCisJ cmV0dXJuIHJ0ZV9tZW16b25lX3Jlc2VydmVfYWxpZ25lZChxdWV1ZV9uYW1lLA0KKwkJCQkJICAg cXVldWVfc2l6ZSwNCisJCQkJCSAgIHNvY2tldF9pZCwNCisJCQkJCSAgIG1lbXpvbmVfZmxhZ3Ms DQorCQkJCQkgICBxdWV1ZV9zaXplKTsNCit9DQorDQorLyotLS1iaXRtYXAgc3VwcG9ydCBhcGlz LS0tKi8NCitzdGF0aWMgaW5saW5lIHZvaWQNCitjY3Bfc2V0X2JpdCh1bnNpZ25lZCBsb25nICpi aXRtYXAsIGludCBuKQ0KK3sNCisJX19zeW5jX2ZldGNoX2FuZF9vcigmYml0bWFwW1dPUkRfT0ZG U0VUKG4pXSwgKDFVTCA8PCBCSVRfT0ZGU0VUKG4pKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUg dm9pZA0KK2NjcF9jbGVhcl9iaXQodW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgbikNCit7DQor CV9fc3luY19mZXRjaF9hbmRfYW5kKCZiaXRtYXBbV09SRF9PRkZTRVQobildLCB+KDFVTCA8PCBC SVRfT0ZGU0VUKG4pKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QNCitjY3BfZ2V0 X2JpdCh1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBuKQ0KK3sNCisJcmV0dXJuICgoYml0bWFw W1dPUkRfT0ZGU0VUKG4pXSAmICgxIDw8IEJJVF9PRkZTRVQobikpKSAhPSAwKTsNCit9DQorDQor DQorc3RhdGljIGlubGluZSB1aW50MzJfdA0KK2NjcF9mZnoodW5zaWduZWQgbG9uZyB3b3JkKQ0K K3sNCisJdW5zaWduZWQgbG9uZyBmaXJzdF96ZXJvOw0KKw0KKwlmaXJzdF96ZXJvID0gX19idWls dGluX2Zmc2wofndvcmQpOw0KKwlyZXR1cm4gZmlyc3RfemVybyA/IChmaXJzdF96ZXJvIC0gMSkg Og0KKwkJQklUU19QRVJfV09SRDsNCit9DQorDQorc3RhdGljIGlubGluZSB1aW50MzJfdA0KK2Nj cF9maW5kX2ZpcnN0X3plcm9fYml0KHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVpbnQzMl90IGxpbWl0 KQ0KK3sNCisJdWludDMyX3QgaTsNCisJdWludDMyX3QgbndvcmRzID0gMDsNCisNCisJbndvcmRz ID0gKGxpbWl0IC0gMSkgLyBCSVRTX1BFUl9XT1JEICsgMTsNCisJZm9yIChpID0gMDsgaSA8IG53 b3JkczsgaSsrKSB7DQorCQlpZiAoYWRkcltpXSA9PSAwVUwpDQorCQkJcmV0dXJuIGkgKiBCSVRT X1BFUl9XT1JEOw0KKwkJaWYgKGFkZHJbaV0gPCB+KDBVTCkpDQorCQkJYnJlYWs7DQorCX0NCisJ cmV0dXJuIChpID09IG53b3JkcykgPyBsaW1pdCA6IGkgKiBCSVRTX1BFUl9XT1JEICsgY2NwX2Zm eihhZGRyW2ldKTsNCit9DQorDQorc3RhdGljIHZvaWQNCitjY3BfYml0bWFwX3NldCh1bnNpZ25l ZCBsb25nICptYXAsIHVuc2lnbmVkIGludCBzdGFydCwgaW50IGxlbikNCit7DQorCXVuc2lnbmVk IGxvbmcgKnAgPSBtYXAgKyBXT1JEX09GRlNFVChzdGFydCk7DQorCWNvbnN0IHVuc2lnbmVkIGlu dCBzaXplID0gc3RhcnQgKyBsZW47DQorCWludCBiaXRzX3RvX3NldCA9IEJJVFNfUEVSX1dPUkQg LSAoc3RhcnQgJSBCSVRTX1BFUl9XT1JEKTsNCisJdW5zaWduZWQgbG9uZyBtYXNrX3RvX3NldCA9 IENDUF9CSVRNQVBfRklSU1RfV09SRF9NQVNLKHN0YXJ0KTsNCisNCisJd2hpbGUgKGxlbiAtIGJp dHNfdG9fc2V0ID49IDApIHsNCisJCSpwIHw9IG1hc2tfdG9fc2V0Ow0KKwkJbGVuIC09IGJpdHNf dG9fc2V0Ow0KKwkJYml0c190b19zZXQgPSBCSVRTX1BFUl9XT1JEOw0KKwkJbWFza190b19zZXQg PSB+MFVMOw0KKwkJcCsrOw0KKwl9DQorCWlmIChsZW4pIHsNCisJCW1hc2tfdG9fc2V0ICY9IEND UF9CSVRNQVBfTEFTVF9XT1JEX01BU0soc2l6ZSk7DQorCQkqcCB8PSBtYXNrX3RvX3NldDsNCisJ fQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK2NjcF9iaXRtYXBfY2xlYXIodW5zaWduZWQgbG9uZyAq bWFwLCB1bnNpZ25lZCBpbnQgc3RhcnQsIGludCBsZW4pDQorew0KKwl1bnNpZ25lZCBsb25nICpw ID0gbWFwICsgV09SRF9PRkZTRVQoc3RhcnQpOw0KKwljb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSA9 IHN0YXJ0ICsgbGVuOw0KKwlpbnQgYml0c190b19jbGVhciA9IEJJVFNfUEVSX1dPUkQgLSAoc3Rh cnQgJSBCSVRTX1BFUl9XT1JEKTsNCisJdW5zaWduZWQgbG9uZyBtYXNrX3RvX2NsZWFyID0gQ0NQ X0JJVE1BUF9GSVJTVF9XT1JEX01BU0soc3RhcnQpOw0KKw0KKwl3aGlsZSAobGVuIC0gYml0c190 b19jbGVhciA+PSAwKSB7DQorCQkqcCAmPSB+bWFza190b19jbGVhcjsNCisJCWxlbiAtPSBiaXRz X3RvX2NsZWFyOw0KKwkJYml0c190b19jbGVhciA9IEJJVFNfUEVSX1dPUkQ7DQorCQltYXNrX3Rv X2NsZWFyID0gfjBVTDsNCisJCXArKzsNCisJfQ0KKwlpZiAobGVuKSB7DQorCQltYXNrX3RvX2Ns ZWFyICY9IENDUF9CSVRNQVBfTEFTVF9XT1JEX01BU0soc2l6ZSk7DQorCQkqcCAmPSB+bWFza190 b19jbGVhcjsNCisJfQ0KK30NCisNCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZw0KK19jY3BfZmlu ZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLA0KKwkJICAgdW5zaWduZWQgbG9u ZyBuYml0cywNCisJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsDQorCQkgICB1bnNpZ25lZCBsb25n IGludmVydCkNCit7DQorCXVuc2lnbmVkIGxvbmcgdG1wOw0KKw0KKwlpZiAoIW5iaXRzIHx8IHN0 YXJ0ID49IG5iaXRzKQ0KKwkJcmV0dXJuIG5iaXRzOw0KKw0KKwl0bXAgPSBhZGRyW3N0YXJ0IC8g QklUU19QRVJfV09SRF0gXiBpbnZlcnQ7DQorDQorCS8qIEhhbmRsZSAxc3Qgd29yZC4gKi8NCisJ dG1wICY9IENDUF9CSVRNQVBfRklSU1RfV09SRF9NQVNLKHN0YXJ0KTsNCisJc3RhcnQgPSBjY3Bf cm91bmRfZG93bihzdGFydCwgQklUU19QRVJfV09SRCk7DQorDQorCXdoaWxlICghdG1wKSB7DQor CQlzdGFydCArPSBCSVRTX1BFUl9XT1JEOw0KKwkJaWYgKHN0YXJ0ID49IG5iaXRzKQ0KKwkJCXJl dHVybiBuYml0czsNCisNCisJCXRtcCA9IGFkZHJbc3RhcnQgLyBCSVRTX1BFUl9XT1JEXSBeIGlu dmVydDsNCisJfQ0KKw0KKwlyZXR1cm4gUlRFX01JTihzdGFydCArIChmZnModG1wKSAtIDEpLCBu Yml0cyk7DQorfQ0KKw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nDQorY2NwX2ZpbmRfbmV4dF9iaXQo Y29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwNCisJCSAgdW5zaWduZWQgbG9uZyBzaXplLA0KKwkJ ICB1bnNpZ25lZCBsb25nIG9mZnNldCkNCit7DQorCXJldHVybiBfY2NwX2ZpbmRfbmV4dF9iaXQo YWRkciwgc2l6ZSwgb2Zmc2V0LCAwVUwpOw0KK30NCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZw0K K2NjcF9maW5kX25leHRfemVyb19iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwNCisJCSAg ICAgICB1bnNpZ25lZCBsb25nIHNpemUsDQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQp DQorew0KKwlyZXR1cm4gX2NjcF9maW5kX25leHRfYml0KGFkZHIsIHNpemUsIG9mZnNldCwgfjBV TCk7DQorfQ0KKw0KKy8qKg0KKyAqIGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhIC0gZmluZCBh IGNvbnRpZ3VvdXMgYWxpZ25lZCB6ZXJvIGFyZWENCisgKiBAbWFwOiBUaGUgYWRkcmVzcyB0byBi YXNlIHRoZSBzZWFyY2ggb24NCisgKiBAc2l6ZTogVGhlIGJpdG1hcCBzaXplIGluIGJpdHMNCisg KiBAc3RhcnQ6IFRoZSBiaXRudW1iZXIgdG8gc3RhcnQgc2VhcmNoaW5nIGF0DQorICogQG5yOiBU aGUgbnVtYmVyIG9mIHplcm9lZCBiaXRzIHdlJ3JlIGxvb2tpbmcgZm9yDQorICovDQorc3RhdGlj IHVuc2lnbmVkIGxvbmcNCitjY3BfYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEodW5zaWduZWQg bG9uZyAqbWFwLA0KKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsDQorCQkJICAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsDQorCQkJICAgICAgIHVuc2lnbmVkIGludCBucikNCit7DQorCXVu c2lnbmVkIGxvbmcgaW5kZXgsIGVuZCwgaTsNCisNCithZ2FpbjoNCisJaW5kZXggPSBjY3BfZmlu ZF9uZXh0X3plcm9fYml0KG1hcCwgc2l6ZSwgc3RhcnQpOw0KKw0KKwllbmQgPSBpbmRleCArIG5y Ow0KKwlpZiAoZW5kID4gc2l6ZSkNCisJCXJldHVybiBlbmQ7DQorCWkgPSBjY3BfZmluZF9uZXh0 X2JpdChtYXAsIGVuZCwgaW5kZXgpOw0KKwlpZiAoaSA8IGVuZCkgew0KKwkJc3RhcnQgPSBpICsg MTsNCisJCWdvdG8gYWdhaW47DQorCX0NCisJcmV0dXJuIGluZGV4Ow0KK30NCisNCitzdGF0aWMg dWludDMyX3QNCitjY3BfbHNiX2FsbG9jKHN0cnVjdCBjY3BfcXVldWUgKmNtZF9xLCB1bnNpZ25l ZCBpbnQgY291bnQpDQorew0KKwlzdHJ1Y3QgY2NwX2RldmljZSAqY2NwOw0KKwlpbnQgc3RhcnQ7 DQorDQorCS8qIEZpcnN0IGxvb2sgYXQgdGhlIG1hcCBmb3IgdGhlIHF1ZXVlICovDQorCWlmIChj bWRfcS0+bHNiID49IDApIHsNCisJCXN0YXJ0ID0gKHVpbnQzMl90KWNjcF9iaXRtYXBfZmluZF9u ZXh0X3plcm9fYXJlYShjbWRfcS0+bHNibWFwLA0KKwkJCQkJCQkJIExTQl9TSVpFLCAwLA0KKwkJ CQkJCQkJIGNvdW50KTsNCisJCWlmIChzdGFydCA8IExTQl9TSVpFKSB7DQorCQkJY2NwX2JpdG1h cF9zZXQoY21kX3EtPmxzYm1hcCwgc3RhcnQsIGNvdW50KTsNCisJCQlyZXR1cm4gc3RhcnQgKyBj bWRfcS0+bHNiICogTFNCX1NJWkU7DQorCQl9DQorCX0NCisNCisJLyogdHJ5IHRvIGdldCBhbiBl bnRyeSBmcm9tIHRoZSBzaGFyZWQgYmxvY2tzICovDQorCWNjcCA9IGNtZF9xLT5kZXY7DQorDQor CXJ0ZV9zcGlubG9ja19sb2NrKCZjY3AtPmxzYl9sb2NrKTsNCisNCisJc3RhcnQgPSAodWludDMy X3QpY2NwX2JpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGNjcC0+bHNibWFwLA0KKwkJCQkJCSAg ICBNQVhfTFNCX0NOVCAqIExTQl9TSVpFLA0KKwkJCQkJCSAgICAwLCBjb3VudCk7DQorCWlmIChz dGFydCA8PSBNQVhfTFNCX0NOVCAqIExTQl9TSVpFKSB7DQorCQljY3BfYml0bWFwX3NldChjY3At PmxzYm1hcCwgc3RhcnQsIGNvdW50KTsNCisJCXJ0ZV9zcGlubG9ja191bmxvY2soJmNjcC0+bHNi X2xvY2spOw0KKwkJcmV0dXJuIHN0YXJ0ICogTFNCX0lURU1fU0laRTsNCisJfQ0KKwlDQ1BfTE9H X0VSUigiTk8gTFNCcyBhdmFpbGFibGUiKTsNCisNCisJcnRlX3NwaW5sb2NrX3VubG9jaygmY2Nw LT5sc2JfbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBfX3J0ZV91 bnVzZWQNCitjY3BfbHNiX2ZyZWUoc3RydWN0IGNjcF9xdWV1ZSAqY21kX3EsDQorCSAgICAgdW5z aWduZWQgaW50IHN0YXJ0LA0KKwkgICAgIHVuc2lnbmVkIGludCBjb3VudCkNCit7DQorCWludCBs c2JubyA9IHN0YXJ0IC8gTFNCX1NJWkU7DQorDQorCWlmICghc3RhcnQpDQorCQlyZXR1cm47DQor DQorCWlmIChjbWRfcS0+bHNiID09IGxzYm5vKSB7DQorCQkvKiBBbiBlbnRyeSBmcm9tIHRoZSBw cml2YXRlIExTQiAqLw0KKwkJY2NwX2JpdG1hcF9jbGVhcihjbWRfcS0+bHNibWFwLCBzdGFydCAl IExTQl9TSVpFLCBjb3VudCk7DQorCX0gZWxzZSB7DQorCQkvKiBGcm9tIHRoZSBzaGFyZWQgTFNC cyAqLw0KKwkJc3RydWN0IGNjcF9kZXZpY2UgKmNjcCA9IGNtZF9xLT5kZXY7DQorDQorCQlydGVf c3BpbmxvY2tfbG9jaygmY2NwLT5sc2JfbG9jayk7DQorCQljY3BfYml0bWFwX2NsZWFyKGNjcC0+ bHNibWFwLCBzdGFydCwgY291bnQpOw0KKwkJcnRlX3NwaW5sb2NrX3VubG9jaygmY2NwLT5sc2Jf bG9jayk7DQorCX0NCit9DQorDQorc3RhdGljIGludA0KK2NjcF9maW5kX2xzYl9yZWdpb25zKHN0 cnVjdCBjY3BfcXVldWUgKmNtZF9xLCB1aW50NjRfdCBzdGF0dXMpDQorew0KKwlpbnQgcV9tYXNr ID0gMSA8PCBjbWRfcS0+aWQ7DQorCWludCB3ZWlnaHQgPSAwOw0KKwlpbnQgajsNCisNCisJLyog QnVpbGQgYSBiaXQgbWFzayB0byBrbm93IHdoaWNoIExTQnMNCisJICogdGhpcyBxdWV1ZSBoYXMg YWNjZXNzIHRvLg0KKwkgKiBEb24ndCBib3RoZXIgd2l0aCBzZWdtZW50IDANCisJICogYXMgaXQg aGFzIHNwZWNpYWwNCisJICogcHJpdmlsZWdlcy4NCisJICovDQorCWNtZF9xLT5sc2JtYXNrID0g MDsNCisJc3RhdHVzID4+PSBMU0JfUkVHSU9OX1dJRFRIOw0KKwlmb3IgKGogPSAxOyBqIDwgTUFY X0xTQl9DTlQ7IGorKykgew0KKwkJaWYgKHN0YXR1cyAmIHFfbWFzaykNCisJCQljY3Bfc2V0X2Jp dCgmY21kX3EtPmxzYm1hc2ssIGopOw0KKw0KKwkJc3RhdHVzID4+PSBMU0JfUkVHSU9OX1dJRFRI Ow0KKwl9DQorDQorCWZvciAoaiA9IDA7IGogPCBNQVhfTFNCX0NOVDsgaisrKQ0KKwkJaWYgKGNj cF9nZXRfYml0KCZjbWRfcS0+bHNibWFzaywgaikpDQorCQkJd2VpZ2h0Kys7DQorDQorCXByaW50 ZigiUXVldWUgJWQgY2FuIGFjY2VzcyAlZCBMU0IgcmVnaW9ucyAgb2YgbWFzayAgJWx1XG4iLA0K KwkgICAgICAgKGludCljbWRfcS0+aWQsIHdlaWdodCwgY21kX3EtPmxzYm1hc2spOw0KKw0KKwly ZXR1cm4gd2VpZ2h0ID8gMCA6IC1FSU5WQUw7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfZmlu ZF9hbmRfYXNzaWduX2xzYl90b19xKHN0cnVjdCBjY3BfZGV2aWNlICpjY3AsDQorCQkJICAgICBp bnQgbHNiX2NudCwgaW50IG5fbHNicywNCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmxzYl9wdWIp DQorew0KKwl1bnNpZ25lZCBsb25nIHFsc2IgPSAwOw0KKwlpbnQgYml0bm8gPSAwOw0KKwlpbnQg cWxzYl93Z3QgPSAwOw0KKwlpbnQgaSwgajsNCisNCisJLyogRm9yIGVhY2ggcXVldWU6DQorCSAq IElmIHRoZSBjb3VudCBvZiBwb3RlbnRpYWwgTFNCcyBhdmFpbGFibGUgdG8gYSBxdWV1ZSBtYXRj aGVzIHRoZQ0KKwkgKiBvcmRpbmFsIGdpdmVuIHRvIHVzIGluIGxzYl9jbnQ6DQorCSAqIENvcHkg dGhlIG1hc2sgb2YgcG9zc2libGUgTFNCcyBmb3IgdGhpcyBxdWV1ZSBpbnRvICJxbHNiIjsNCisJ ICogRm9yIGVhY2ggYml0IGluIHFsc2IsIHNlZSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4g dGhlDQorCSAqIGFnZ3JlZ2F0aW9uIG1hc2sgaXMgc2V0OyBpZiBzbywgd2UgaGF2ZSBhIG1hdGNo Lg0KKwkgKiAgICAgSWYgd2UgaGF2ZSBhIG1hdGNoLCBjbGVhciB0aGUgYml0IGluIHRoZSBhZ2dy ZWdhdGlvbiB0bw0KKwkgKiAgICAgbWFyayBpdCBhcyBubyBsb25nZXIgYXZhaWxhYmxlLg0KKwkg KiAgICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2gsIGNsZWFyIHRoZSBiaXQgaW4gcWxzYiBhbmQga2Vl cCBsb29raW5nLg0KKwkgKi8NCisJZm9yIChpID0gMDsgaSA8IGNjcC0+Y21kX3FfY291bnQ7IGkr Kykgew0KKwkJc3RydWN0IGNjcF9xdWV1ZSAqY21kX3EgPSAmY2NwLT5jbWRfcVtpXTsNCisNCisJ CXFsc2Jfd2d0ID0gMDsNCisJCWZvciAoaiA9IDA7IGogPCBNQVhfTFNCX0NOVDsgaisrKQ0KKwkJ CWlmIChjY3BfZ2V0X2JpdCgmY21kX3EtPmxzYm1hc2ssIGopKQ0KKwkJCQlxbHNiX3dndCsrOw0K Kw0KKwkJaWYgKHFsc2Jfd2d0ID09IGxzYl9jbnQpIHsNCisJCQlxbHNiID0gY21kX3EtPmxzYm1h c2s7DQorDQorCQkJYml0bm8gPSBmZnMocWxzYikgLSAxOw0KKwkJCXdoaWxlIChiaXRubyA8IE1B WF9MU0JfQ05UKSB7DQorCQkJCWlmIChjY3BfZ2V0X2JpdChsc2JfcHViLCBiaXRubykpIHsNCisJ CQkJCS8qIFdlIGZvdW5kIGFuIGF2YWlsYWJsZSBMU0INCisJCQkJCSAqIHRoYXQgdGhpcyBxdWV1 ZSBjYW4gYWNjZXNzDQorCQkJCQkgKi8NCisJCQkJCWNtZF9xLT5sc2IgPSBiaXRubzsNCisJCQkJ CWNjcF9jbGVhcl9iaXQobHNiX3B1YiwgYml0bm8pOw0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJ CQkJY2NwX2NsZWFyX2JpdCgmcWxzYiwgYml0bm8pOw0KKwkJCQliaXRubyA9IGZmcyhxbHNiKSAt IDE7DQorCQkJfQ0KKwkJCWlmIChiaXRubyA+PSBNQVhfTFNCX0NOVCkNCisJCQkJcmV0dXJuIC1F SU5WQUw7DQorCQkJbl9sc2JzLS07DQorCQl9DQorCX0NCisJcmV0dXJuIG5fbHNiczsNCit9DQor DQorLyogRm9yIGVhY2ggcXVldWUsIGZyb20gdGhlIG1vc3QtIHRvIGxlYXN0LWNvbnN0cmFpbmVk Og0KKyAqIGZpbmQgYW4gTFNCIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBxdWV1ZS4gSWYg dGhlcmUgYXJlIE4gcXVldWVzIHRoYXQNCisgKiBjYW4gb25seSB1c2UgTSBMU0JzLCB3aGVyZSBO ID4gTSwgZmFpbDsgb3RoZXJ3aXNlLCBldmVyeSBxdWV1ZSB3aWxsIGdldCBhDQorICogZGVkaWNh dGVkIExTQi4gUmVtYWluaW5nIExTQiByZWdpb25zIGJlY29tZSBhIHNoYXJlZCByZXNvdXJjZS4N CisgKiBJZiB3ZSBoYXZlIGZld2VyIExTQnMgdGhhbiBxdWV1ZXMsIGFsbCBMU0IgcmVnaW9ucyBi ZWNvbWUgc2hhcmVkDQorICogcmVzb3VyY2VzLg0KKyAqLw0KK3N0YXRpYyBpbnQNCitjY3BfYXNz aWduX2xzYnMoc3RydWN0IGNjcF9kZXZpY2UgKmNjcCkNCit7DQorCXVuc2lnbmVkIGxvbmcgbHNi X3B1YiA9IDAsIHFsc2IgPSAwOw0KKwlpbnQgbl9sc2JzID0gMDsNCisJaW50IGJpdG5vOw0KKwlp bnQgaSwgbHNiX2NudDsNCisJaW50IHJjID0gMDsNCisNCisJcnRlX3NwaW5sb2NrX2luaXQoJmNj cC0+bHNiX2xvY2spOw0KKw0KKwkvKiBDcmVhdGUgYW4gYWdncmVnYXRlIGJpdG1hcCB0byBnZXQg YSB0b3RhbCBjb3VudCBvZiBhdmFpbGFibGUgTFNCcyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgY2Nw LT5jbWRfcV9jb3VudDsgaSsrKQ0KKwkJbHNiX3B1YiB8PSBjY3AtPmNtZF9xW2ldLmxzYm1hc2s7 DQorDQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTFNCX0NOVDsgaSsrKQ0KKwkJaWYgKGNjcF9nZXRf Yml0KCZsc2JfcHViLCBpKSkNCisJCQluX2xzYnMrKzsNCisNCisJaWYgKG5fbHNicyA+PSBjY3At PmNtZF9xX2NvdW50KSB7DQorCQkvKiBXZSBoYXZlIGVub3VnaCBMU0JTIHRvIGdpdmUgZXZlcnkg cXVldWUgYSBwcml2YXRlIExTQi4NCisJCSAqIEJydXRlIGZvcmNlIHNlYXJjaCB0byBzdGFydCB3 aXRoIHRoZSBxdWV1ZXMgdGhhdCBhcmUgbW9yZQ0KKwkJICogY29uc3RyYWluZWQgaW4gTFNCIGNo b2ljZS4gV2hlbiBhbiBMU0IgaXMgcHJpdmF0ZWx5DQorCQkgKiBhc3NpZ25lZCwgaXQgaXMgcmVt b3ZlZCBmcm9tIHRoZSBwdWJsaWMgbWFzay4NCisJCSAqIFRoaXMgaXMgYW4gdWdseSBOIHNxdWFy ZWQgYWxnb3JpdGhtIHdpdGggc29tZSBvcHRpbWl6YXRpb24uDQorCQkgKi8NCisJCWZvciAobHNi X2NudCA9IDE7IG5fbHNicyAmJiAobHNiX2NudCA8PSBNQVhfTFNCX0NOVCk7DQorCQkgICAgIGxz Yl9jbnQrKykgew0KKwkJCXJjID0gY2NwX2ZpbmRfYW5kX2Fzc2lnbl9sc2JfdG9fcShjY3AsIGxz Yl9jbnQsIG5fbHNicywNCisJCQkJCQkJICAmbHNiX3B1Yik7DQorCQkJaWYgKHJjIDwgMCkNCisJ CQkJcmV0dXJuIC1FSU5WQUw7DQorCQkJbl9sc2JzID0gcmM7DQorCQl9DQorCX0NCisNCisJcmMg PSAwOw0KKwkvKiBXaGF0J3MgbGVmdCBvZiB0aGUgTFNCcywgYWNjb3JkaW5nIHRvIHRoZSBwdWJs aWMgbWFzaywgbm93IGJlY29tZQ0KKwkgKiBzaGFyZWQuIEFueSB6ZXJvIGJpdHMgaW4gdGhlIGxz Yl9wdWIgbWFzayByZXByZXNlbnQgYW4gTFNCIHJlZ2lvbg0KKwkgKiB0aGF0IGNhbid0IGJlIHVz ZWQgYXMgYSBzaGFyZWQgcmVzb3VyY2UsIHNvIG1hcmsgdGhlIExTQiBzbG90cyBmb3INCisJICog dGhlbSBhcyAiaW4gdXNlIi4NCisJICovDQorCXFsc2IgPSBsc2JfcHViOw0KKwliaXRubyA9IGNj cF9maW5kX2ZpcnN0X3plcm9fYml0KCZxbHNiLCBNQVhfTFNCX0NOVCk7DQorCXdoaWxlIChiaXRu byA8IE1BWF9MU0JfQ05UKSB7DQorCQljY3BfYml0bWFwX3NldChjY3AtPmxzYm1hcCwgYml0bm8g KiBMU0JfU0laRSwgTFNCX1NJWkUpOw0KKwkJY2NwX3NldF9iaXQoJnFsc2IsIGJpdG5vKTsNCisJ CWJpdG5vID0gY2NwX2ZpbmRfZmlyc3RfemVyb19iaXQoJnFsc2IsIE1BWF9MU0JfQ05UKTsNCisJ fQ0KKw0KKwlyZXR1cm4gcmM7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfYWRkX2RldmljZShz dHJ1Y3QgY2NwX2RldmljZSAqZGV2LCBpbnQgdHlwZSkNCit7DQorCWludCBpOw0KKwl1aW50MzJf dCBxbXIsIHN0YXR1c19sbywgc3RhdHVzX2hpLCBkbWFfYWRkcl9sbywgZG1hX2FkZHJfaGk7DQor CXVpbnQ2NF90IHN0YXR1czsNCisJc3RydWN0IGNjcF9xdWV1ZSAqY21kX3E7DQorCWNvbnN0IHN0 cnVjdCBydGVfbWVtem9uZSAqcV9tejsNCisJdm9pZCAqdmFkZHI7DQorDQorCWlmIChkZXYgPT0g TlVMTCkNCisJCXJldHVybiAtMTsNCisNCisJZGV2LT5pZCA9IGNjcF9kZXZfaWQrKzsNCisJZGV2 LT5xaWR4ID0gMDsNCisJdmFkZHIgPSAodm9pZCAqKShkZXYtPnBjaS5tZW1fcmVzb3VyY2VbMl0u YWRkcik7DQorDQorCWlmICh0eXBlID09IENDUF9WRVJTSU9OXzVCKSB7DQorCQlDQ1BfV1JJVEVf UkVHKHZhZGRyLCBDTURfVFJOR19DVExfT0ZGU0VULCAweDAwMDEyRDU3KTsNCisJCUNDUF9XUklU RV9SRUcodmFkZHIsIENNRF9DT05GSUdfMF9PRkZTRVQsIDB4MDAwMDAwMDMpOw0KKwkJZm9yIChp ID0gMDsgaSA8IDEyOyBpKyspIHsNCisJCQlDQ1BfV1JJVEVfUkVHKHZhZGRyLCBDTURfQUVTX01B U0tfT0ZGU0VULA0KKwkJCQkgICAgICBDQ1BfUkVBRF9SRUcodmFkZHIsIFRSTkdfT1VUX1JFRykp Ow0KKwkJfQ0KKwkJQ0NQX1dSSVRFX1JFRyh2YWRkciwgQ01EX1FVRVVFX01BU0tfT0ZGU0VULCAw eDAwMDAwMDFGKTsNCisJCUNDUF9XUklURV9SRUcodmFkZHIsIENNRF9RVUVVRV9QUklPX09GRlNF VCwgMHgwMDAwNUI2RCk7DQorCQlDQ1BfV1JJVEVfUkVHKHZhZGRyLCBDTURfQ01EX1RJTUVPVVRf T0ZGU0VULCAweDAwMDAwMDAwKTsNCisNCisJCUNDUF9XUklURV9SRUcodmFkZHIsIExTQl9QUklW QVRFX01BU0tfTE9fT0ZGU0VULCAweDNGRkZGRkZGKTsNCisJCUNDUF9XUklURV9SRUcodmFkZHIs IExTQl9QUklWQVRFX01BU0tfSElfT0ZGU0VULCAweDAwMDAwM0ZGKTsNCisNCisJCUNDUF9XUklU RV9SRUcodmFkZHIsIENNRF9DTEtfR0FURV9DVExfT0ZGU0VULCAweDAwMTA4ODIzKTsNCisJfQ0K KwlDQ1BfV1JJVEVfUkVHKHZhZGRyLCBDTURfUkVRSURfQ09ORklHX09GRlNFVCwgMHgwMDAwMTI0 OSk7DQorDQorCS8qIENvcHkgdGhlIHByaXZhdGUgTFNCIG1hc2sgdG8gdGhlIHB1YmxpYyByZWdp c3RlcnMgKi8NCisJc3RhdHVzX2xvID0gQ0NQX1JFQURfUkVHKHZhZGRyLCBMU0JfUFJJVkFURV9N QVNLX0xPX09GRlNFVCk7DQorCXN0YXR1c19oaSA9IENDUF9SRUFEX1JFRyh2YWRkciwgTFNCX1BS SVZBVEVfTUFTS19ISV9PRkZTRVQpOw0KKwlDQ1BfV1JJVEVfUkVHKHZhZGRyLCBMU0JfUFVCTElD X01BU0tfTE9fT0ZGU0VULCBzdGF0dXNfbG8pOw0KKwlDQ1BfV1JJVEVfUkVHKHZhZGRyLCBMU0Jf UFVCTElDX01BU0tfSElfT0ZGU0VULCBzdGF0dXNfaGkpOw0KKwlzdGF0dXMgPSAoKHVpbnQ2NF90 KXN0YXR1c19oaTw8MzApIHwgKCh1aW50NjRfdClzdGF0dXNfbG8pOw0KKw0KKwlkZXYtPmNtZF9x X2NvdW50ID0gMDsNCisJLyogRmluZCBhdmFpbGFibGUgcXVldWVzICovDQorCXFtciA9IENDUF9S RUFEX1JFRyh2YWRkciwgUV9NQVNLX1JFRyk7DQorCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdfUVVF VUVTOyBpKyspIHsNCisJCWlmICghKHFtciAmICgxIDw8IGkpKSkNCisJCQljb250aW51ZTsNCisJ CWNtZF9xID0gJmRldi0+Y21kX3FbZGV2LT5jbWRfcV9jb3VudCsrXTsNCisJCWNtZF9xLT5kZXYg PSBkZXY7DQorCQljbWRfcS0+aWQgPSBpOw0KKwkJY21kX3EtPnFpZHggPSAwOw0KKwkJY21kX3Et PnFzaXplID0gUV9TSVpFKFFfREVTQ19TSVpFKTsNCisNCisJCWNtZF9xLT5yZWdfYmFzZSA9ICh1 aW50OF90ICopdmFkZHIgKw0KKwkJCUNNRF9RX1NUQVRVU19JTkNSICogKGkgKyAxKTsNCisNCisJ CS8qIENDUCBxdWV1ZSBtZW1vcnkgKi8NCisJCXNucHJpbnRmKGNtZF9xLT5tZW16X25hbWUsIHNp emVvZihjbWRfcS0+bWVtel9uYW1lKSwNCisJCQkgIiVzXyVkXyVzXyVkXyVzIiwNCisJCQkgImNj cF9kZXYiLA0KKwkJCSAoaW50KWRldi0+aWQsICJxdWV1ZSIsDQorCQkJIChpbnQpY21kX3EtPmlk LCAibWVtIik7DQorCQlxX216ID0gY2NwX3F1ZXVlX2RtYV96b25lX3Jlc2VydmUoY21kX3EtPm1l bXpfbmFtZSwNCisJCQkJCQkgIGNtZF9xLT5xc2l6ZSwgU09DS0VUX0lEX0FOWSk7DQorCQljbWRf cS0+cWJhc2VfYWRkciA9ICh2b2lkICopcV9tei0+YWRkcjsNCisJCWNtZF9xLT5xYmFzZV9kZXNj ID0gKHZvaWQgKilxX216LT5hZGRyOw0KKwkJY21kX3EtPnFiYXNlX3BoeXNfYWRkciA9ICBxX216 LT5waHlzX2FkZHI7DQorDQorCQljbWRfcS0+cWNvbnRyb2wgPSAwOw0KKwkJLyogaW5pdCBjb250 cm9sIHJlZyB0byB6ZXJvICovDQorCQlDQ1BfV1JJVEVfUkVHKGNtZF9xLT5yZWdfYmFzZSwgQ01E X1FfQ09OVFJPTF9CQVNFLA0KKwkJCSAgICAgIGNtZF9xLT5xY29udHJvbCk7DQorDQorCQkvKiBE aXNhYmxlIHRoZSBpbnRlcnJ1cHRzICovDQorCQlDQ1BfV1JJVEVfUkVHKGNtZF9xLT5yZWdfYmFz ZSwgQ01EX1FfSU5UX0VOQUJMRV9CQVNFLCAweDAwKTsNCisJCUNDUF9SRUFEX1JFRyhjbWRfcS0+ cmVnX2Jhc2UsIENNRF9RX0lOVF9TVEFUVVNfQkFTRSk7DQorCQlDQ1BfUkVBRF9SRUcoY21kX3Et PnJlZ19iYXNlLCBDTURfUV9TVEFUVVNfQkFTRSk7DQorDQorCQkvKiBDbGVhciB0aGUgaW50ZXJy dXB0cyAqLw0KKwkJQ0NQX1dSSVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX0lOVEVSUlVQ VF9TVEFUVVNfQkFTRSwNCisJCQkgICAgICBBTExfSU5URVJSVVBUUyk7DQorDQorCQkvKiBDb25m aWd1cmUgc2l6ZSBvZiBlYWNoIHZpcnR1YWwgcXVldWUgYWNjZXNzaWJsZSB0byBob3N0ICovDQor CQljbWRfcS0+cWNvbnRyb2wgJj0gfihDTURfUV9TSVpFIDw8IENNRF9RX1NISUZUKTsNCisJCWNt ZF9xLT5xY29udHJvbCB8PSBRVUVVRV9TSVpFX1ZBTCA8PCBDTURfUV9TSElGVDsNCisNCisJCWRt YV9hZGRyX2xvID0gbG93MzJfdmFsdWUoY21kX3EtPnFiYXNlX3BoeXNfYWRkcik7DQorCQlDQ1Bf V1JJVEVfUkVHKGNtZF9xLT5yZWdfYmFzZSwgQ01EX1FfVEFJTF9MT19CQVNFLA0KKwkJCSAgICAg ICh1aW50MzJfdClkbWFfYWRkcl9sbyk7DQorCQlDQ1BfV1JJVEVfUkVHKGNtZF9xLT5yZWdfYmFz ZSwgQ01EX1FfSEVBRF9MT19CQVNFLA0KKwkJCSAgICAgICh1aW50MzJfdClkbWFfYWRkcl9sbyk7 DQorDQorCQlkbWFfYWRkcl9oaSA9IGhpZ2gzMl92YWx1ZShjbWRfcS0+cWJhc2VfcGh5c19hZGRy KTsNCisJCWNtZF9xLT5xY29udHJvbCB8PSAoZG1hX2FkZHJfaGkgPDwgMTYpOw0KKwkJQ0NQX1dS SVRFX1JFRyhjbWRfcS0+cmVnX2Jhc2UsIENNRF9RX0NPTlRST0xfQkFTRSwNCisJCQkgICAgICBj bWRfcS0+cWNvbnRyb2wpOw0KKw0KKwkJLyogY3JlYXRlIExTQiBNYXNrIG1hcCAqLw0KKwkJaWYg KGNjcF9maW5kX2xzYl9yZWdpb25zKGNtZF9xLCBzdGF0dXMpKQ0KKwkJCUNDUF9MT0dfRVJSKCJx dWV1ZSBkb2Vzbid0IGhhdmUgbHNiIHJlZ2lvbnMiKTsNCisJCWNtZF9xLT5sc2IgPSAtMTsNCisN CisJCXJ0ZV9hdG9taWM2NF9pbml0KCZjbWRfcS0+ZnJlZV9zbG90cyk7DQorCQlydGVfYXRvbWlj NjRfc2V0KCZjbWRfcS0+ZnJlZV9zbG90cywgKENPTU1BTkRTX1BFUl9RVUVVRSAtIDEpKTsNCisJ CS8qIHVudXNlZCBzbG90IGJhcnJpZXIgYi93IEgmVCAqLw0KKwl9DQorDQorCWlmIChjY3BfYXNz aWduX2xzYnMoZGV2KSkNCisJCUNDUF9MT0dfRVJSKCJVbmFibGUgdG8gYXNzaWduIGxzYiByZWdp b24iKTsNCisNCisJLyogcHJlLWFsbG9jYXRlIExTQiBzbG90cyAqLw0KKwlmb3IgKGkgPSAwOyBp IDwgZGV2LT5jbWRfcV9jb3VudDsgaSsrKSB7DQorCQlkZXYtPmNtZF9xW2ldLnNiX2tleSA9DQor CQkJY2NwX2xzYl9hbGxvYygmZGV2LT5jbWRfcVtpXSwgMSk7DQorCQlkZXYtPmNtZF9xW2ldLnNi X2l2ID0NCisJCQljY3BfbHNiX2FsbG9jKCZkZXYtPmNtZF9xW2ldLCAxKTsNCisJCWRldi0+Y21k X3FbaV0uc2Jfc2hhID0NCisJCQljY3BfbHNiX2FsbG9jKCZkZXYtPmNtZF9xW2ldLCAyKTsNCisJ CWRldi0+Y21kX3FbaV0uc2JfaG1hYyA9DQorCQkJY2NwX2xzYl9hbGxvYygmZGV2LT5jbWRfcVtp XSwgMik7DQorCX0NCisNCisJVEFJTFFfSU5TRVJUX1RBSUwoJmNjcF9saXN0LCBkZXYsIG5leHQp Ow0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQNCitjY3BfcmVtb3ZlX2RldmljZShz dHJ1Y3QgY2NwX2RldmljZSAqZGV2KQ0KK3sNCisJaWYgKGRldiA9PSBOVUxMKQ0KKwkJcmV0dXJu Ow0KKw0KKwlUQUlMUV9SRU1PVkUoJmNjcF9saXN0LCBkZXYsIG5leHQpOw0KK30NCisNCitzdGF0 aWMgaW50DQoraXNfY2NwX2RldmljZShjb25zdCBjaGFyICpkaXJuYW1lLA0KKwkgICAgICBjb25z dCBzdHJ1Y3QgcnRlX3BjaV9pZCAqY2NwX2lkLA0KKwkgICAgICBpbnQgKnR5cGUpDQorew0KKwlj aGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsNCisJY29uc3Qgc3RydWN0IHJ0ZV9wY2lfaWQgKmlkOw0K Kwl1aW50MTZfdCB2ZW5kb3IsIGRldmljZV9pZDsNCisJaW50IGk7DQorCXVuc2lnbmVkIGxvbmcg dG1wOw0KKw0KKwkvKiBnZXQgdmVuZG9yIGlkICovDQorCXNucHJpbnRmKGZpbGVuYW1lLCBzaXpl b2YoZmlsZW5hbWUpLCAiJXMvdmVuZG9yIiwgZGlybmFtZSk7DQorCWlmIChjY3BfcGNpX3BhcnNl X3N5c2ZzX3ZhbHVlKGZpbGVuYW1lLCAmdG1wKSA8IDApDQorCQlyZXR1cm4gMDsNCisJdmVuZG9y ID0gKHVpbnQxNl90KXRtcDsNCisNCisJLyogZ2V0IGRldmljZSBpZCAqLw0KKwlzbnByaW50Zihm aWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL2RldmljZSIsIGRpcm5hbWUpOw0KKwlpZiAo Y2NwX3BjaV9wYXJzZV9zeXNmc192YWx1ZShmaWxlbmFtZSwgJnRtcCkgPCAwKQ0KKwkJcmV0dXJu IDA7DQorCWRldmljZV9pZCA9ICh1aW50MTZfdCl0bXA7DQorDQorCWZvciAoaWQgPSBjY3BfaWQs IGkgPSAwOyBpZC0+dmVuZG9yX2lkICE9IDA7IGlkKyssIGkrKykgew0KKwkJaWYgKHZlbmRvciA9 PSBpZC0+dmVuZG9yX2lkICYmDQorCQkgICAgZGV2aWNlX2lkID09IGlkLT5kZXZpY2VfaWQpIHsN CisJCQkqdHlwZSA9IGk7DQorCQkJcmV0dXJuIDE7IC8qIE1hdGNoZWQgZGV2aWNlICovDQorCQl9 DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcHJvYmVfZGV2aWNl KGNvbnN0IGNoYXIgKmRpcm5hbWUsIHVpbnQxNl90IGRvbWFpbiwNCisJCSB1aW50OF90IGJ1cywg dWludDhfdCBkZXZpZCwNCisJCSB1aW50OF90IGZ1bmN0aW9uLCBpbnQgY2NwX3R5cGUpDQorew0K KwlzdHJ1Y3QgY2NwX2RldmljZSAqY2NwX2RldiA9IE5VTEw7DQorCXN0cnVjdCBydGVfcGNpX2Rl dmljZSAqcGNpOw0KKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsNCisJdW5zaWduZWQgbG9uZyB0 bXA7DQorCWludCB1aW9fZmQgPSAtMSwgaSwgdWlvX251bTsNCisJY2hhciB1aW9fZGV2bmFtZVtQ QVRIX01BWF07DQorCXZvaWQgKm1hcF9hZGRyOw0KKw0KKwljY3BfZGV2ID0gcnRlX3ptYWxsb2Mo ImNjcF9kZXZpY2UiLCBzaXplb2YoKmNjcF9kZXYpLA0KKwkJCSAgICAgIFJURV9DQUNIRV9MSU5F X1NJWkUpOw0KKwlpZiAoY2NwX2RldiA9PSBOVUxMKQ0KKwkJZ290byBmYWlsOw0KKwlwY2kgPSAm KGNjcF9kZXYtPnBjaSk7DQorDQorCXBjaS0+YWRkci5kb21haW4gPSBkb21haW47DQorCXBjaS0+ YWRkci5idXMgPSBidXM7DQorCXBjaS0+YWRkci5kZXZpZCA9IGRldmlkOw0KKwlwY2ktPmFkZHIu ZnVuY3Rpb24gPSBmdW5jdGlvbjsNCisNCisJLyogZ2V0IHZlbmRvciBpZCAqLw0KKwlzbnByaW50 ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL3ZlbmRvciIsIGRpcm5hbWUpOw0KKwlp ZiAoY2NwX3BjaV9wYXJzZV9zeXNmc192YWx1ZShmaWxlbmFtZSwgJnRtcCkgPCAwKQ0KKwkJZ290 byBmYWlsOw0KKwlwY2ktPmlkLnZlbmRvcl9pZCA9ICh1aW50MTZfdCl0bXA7DQorDQorCS8qIGdl dCBkZXZpY2UgaWQgKi8NCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIl cy9kZXZpY2UiLCBkaXJuYW1lKTsNCisJaWYgKGNjcF9wY2lfcGFyc2Vfc3lzZnNfdmFsdWUoZmls ZW5hbWUsICZ0bXApIDwgMCkNCisJCWdvdG8gZmFpbDsNCisJcGNpLT5pZC5kZXZpY2VfaWQgPSAo dWludDE2X3QpdG1wOw0KKw0KKwkvKiBnZXQgc3Vic3lzdGVtX3ZlbmRvciBpZCAqLw0KKwlzbnBy aW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL3N1YnN5c3RlbV92ZW5kb3IiLA0K KwkJCWRpcm5hbWUpOw0KKwlpZiAoY2NwX3BjaV9wYXJzZV9zeXNmc192YWx1ZShmaWxlbmFtZSwg JnRtcCkgPCAwKQ0KKwkJZ290byBmYWlsOw0KKwlwY2ktPmlkLnN1YnN5c3RlbV92ZW5kb3JfaWQg PSAodWludDE2X3QpdG1wOw0KKw0KKwkvKiBnZXQgc3Vic3lzdGVtX2RldmljZSBpZCAqLw0KKwlz bnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL3N1YnN5c3RlbV9kZXZpY2Ui LA0KKwkJCWRpcm5hbWUpOw0KKwlpZiAoY2NwX3BjaV9wYXJzZV9zeXNmc192YWx1ZShmaWxlbmFt ZSwgJnRtcCkgPCAwKQ0KKwkJZ290byBmYWlsOw0KKwlwY2ktPmlkLnN1YnN5c3RlbV9kZXZpY2Vf aWQgPSAodWludDE2X3QpdG1wOw0KKw0KKwkvKiBnZXQgY2xhc3NfaWQgKi8NCisJc25wcmludGYo ZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9jbGFzcyIsDQorCQkJZGlybmFtZSk7DQor CWlmIChjY3BfcGNpX3BhcnNlX3N5c2ZzX3ZhbHVlKGZpbGVuYW1lLCAmdG1wKSA8IDApDQorCQln b3RvIGZhaWw7DQorCS8qIHRoZSBsZWFzdCAyNCBiaXRzIGFyZSB2YWxpZDogY2xhc3MsIHN1YmNs YXNzLCBwcm9ncmFtIGludGVyZmFjZSAqLw0KKwlwY2ktPmlkLmNsYXNzX2lkID0gKHVpbnQzMl90 KXRtcCAmIFJURV9DTEFTU19BTllfSUQ7DQorDQorCS8qIHBhcnNlIHJlc291cmNlcyAqLw0KKwlz bnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL3Jlc291cmNlIiwgZGlybmFt ZSk7DQorCWlmIChjY3BfcGNpX3BhcnNlX3N5c2ZzX3Jlc291cmNlKGZpbGVuYW1lLCBwY2kpIDwg MCkNCisJCWdvdG8gZmFpbDsNCisNCisJdWlvX251bSA9IGNjcF9maW5kX3Vpb19kZXZuYW1lKGRp cm5hbWUpOw0KKwlpZiAodWlvX251bSA8IDApIHsNCisJCS8qDQorCQkgKiBJdCBtYXkgdGFrZSB0 aW1lIGZvciB1aW8gZGV2aWNlIHRvIGFwcGVhciwNCisJCSAqIHdhaXQgIGhlcmUgYW5kIHRyeSBh Z2Fpbg0KKwkJICovDQorCQl1c2xlZXAoMTAwMDAwKTsNCisJCXVpb19udW0gPSBjY3BfZmluZF91 aW9fZGV2bmFtZShkaXJuYW1lKTsNCisJCWlmICh1aW9fbnVtIDwgMCkNCisJCQlnb3RvIGZhaWw7 DQorCX0NCisJc25wcmludGYodWlvX2Rldm5hbWUsIHNpemVvZih1aW9fZGV2bmFtZSksICIvZGV2 L3VpbyV1IiwgdWlvX251bSk7DQorDQorCXVpb19mZCA9IG9wZW4odWlvX2Rldm5hbWUsIE9fUkRX Uik7DQorCWlmICh1aW9fZmQgPCAwKQ0KKwkJZ290byBmYWlsOw0KKw0KKwkvKiBNYXAgdGhlIFBD SSBtZW1vcnkgcmVzb3VyY2Ugb2YgZGV2aWNlICovDQorCWZvciAoaSA9IDA7IGkgPCBQQ0lfTUFY X1JFU09VUkNFOyBpKyspIHsNCisNCisJCWNoYXIgZGV2bmFtZVtQQVRIX01BWF07DQorCQlpbnQg cmVzX2ZkOw0KKw0KKwkJaWYgKHBjaS0+bWVtX3Jlc291cmNlW2ldLnBoeXNfYWRkciA9PSAwKQ0K KwkJCWNvbnRpbnVlOw0KKwkJc25wcmludGYoZGV2bmFtZSwgc2l6ZW9mKGRldm5hbWUpLCAiJXMv cmVzb3VyY2UlZCIsIGRpcm5hbWUsIGkpOw0KKwkJcmVzX2ZkID0gb3BlbihkZXZuYW1lLCBPX1JE V1IpOw0KKwkJaWYgKHJlc19mZCA8IDApDQorCQkJZ290byBmYWlsOw0KKwkJbWFwX2FkZHIgPSBt bWFwKE5VTEwsIHBjaS0+bWVtX3Jlc291cmNlW2ldLmxlbiwNCisJCQkJUFJPVF9SRUFEIHwgUFJP VF9XUklURSwNCisJCQkJTUFQX1NIQVJFRCwgcmVzX2ZkLCAwKTsNCisJCWlmIChtYXBfYWRkciA9 PSBNQVBfRkFJTEVEKQ0KKwkJCWdvdG8gZmFpbDsNCisNCisJCXBjaS0+bWVtX3Jlc291cmNlW2ld LmFkZHIgPSBtYXBfYWRkcjsNCisJfQ0KKw0KKwkvKiBkZXZpY2UgaXMgdmFsaWQsIGFkZCBpbiBs aXN0ICovDQorCWlmIChjY3BfYWRkX2RldmljZShjY3BfZGV2LCBjY3BfdHlwZSkpIHsNCisJCWNj cF9yZW1vdmVfZGV2aWNlKGNjcF9kZXYpOw0KKwkJZ290byBmYWlsOw0KKwl9DQorDQorCXJldHVy biAwOw0KK2ZhaWw6DQorCUNDUF9MT0dfRVJSKCJDQ1AgRGV2aWNlIHByb2JlIGZhaWxlZCIpOw0K KwlpZiAodWlvX2ZkID4gMCkNCisJCWNsb3NlKHVpb19mZCk7DQorCWlmIChjY3BfZGV2KQ0KKwkJ cnRlX2ZyZWUoY2NwX2Rldik7DQorCXJldHVybiAtMTsNCit9DQorDQoraW50DQorY2NwX3Byb2Jl X2RldmljZXMoY29uc3Qgc3RydWN0IHJ0ZV9wY2lfaWQgKmNjcF9pZCkNCit7DQorCWludCBkZXZf Y250ID0gMDsNCisJaW50IGNjcF90eXBlID0gMDsNCisJc3RydWN0IGRpcmVudCAqZDsNCisJRElS ICpkaXI7DQorCWludCByZXQgPSAwOw0KKwlpbnQgbW9kdWxlX2lkeCA9IDA7DQorCXVpbnQxNl90 IGRvbWFpbjsNCisJdWludDhfdCBidXMsIGRldmlkLCBmdW5jdGlvbjsNCisJY2hhciBkaXJuYW1l W1BBVEhfTUFYXTsNCisNCisJbW9kdWxlX2lkeCA9IGNjcF9jaGVja19wY2lfdWlvX21vZHVsZSgp Ow0KKwlpZiAobW9kdWxlX2lkeCA8IDApDQorCQlyZXR1cm4gLTE7DQorDQorCVRBSUxRX0lOSVQo JmNjcF9saXN0KTsNCisJZGlyID0gb3BlbmRpcihTWVNGU19QQ0lfREVWSUNFUyk7DQorCWlmIChk aXIgPT0gTlVMTCkNCisJCXJldHVybiAtMTsNCisJd2hpbGUgKChkID0gcmVhZGRpcihkaXIpKSAh PSBOVUxMKSB7DQorCQlpZiAoZC0+ZF9uYW1lWzBdID09ICcuJykNCisJCQljb250aW51ZTsNCisJ CWlmIChjY3BfcGFyc2VfcGNpX2FkZHJfZm9ybWF0KGQtPmRfbmFtZSwgc2l6ZW9mKGQtPmRfbmFt ZSksDQorCQkJCQkmZG9tYWluLCAmYnVzLCAmZGV2aWQsICZmdW5jdGlvbikgIT0gMCkNCisJCQlj b250aW51ZTsNCisJCXNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgIiVzLyVzIiwN CisJCQkgICAgIFNZU0ZTX1BDSV9ERVZJQ0VTLCBkLT5kX25hbWUpOw0KKwkJaWYgKGlzX2NjcF9k ZXZpY2UoZGlybmFtZSwgY2NwX2lkLCAmY2NwX3R5cGUpKSB7DQorCQkJcHJpbnRmKCJDQ1AgOiBE ZXRlY3RlZCBDQ1AgZGV2aWNlIHdpdGggSUQgPSAweCV4XG4iLA0KKwkJCSAgICAgICBjY3BfaWRb Y2NwX3R5cGVdLmRldmljZV9pZCk7DQorCQkJcmV0ID0gY2NwX3Byb2JlX2RldmljZShkaXJuYW1l LCBkb21haW4sIGJ1cywgZGV2aWQsDQorCQkJCQkgICAgICAgZnVuY3Rpb24sIGNjcF90eXBlKTsN CisJCQlpZiAocmV0ID09IDApDQorCQkJCWRldl9jbnQrKzsNCisJCX0NCisJfQ0KKwljbG9zZWRp cihkaXIpOw0KKwlyZXR1cm4gZGV2X2NudDsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlw dG8vY2NwL2NjcF9kZXYuaCBiL2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfZGV2LmgNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi41MzZhYjk0DQotLS0gL2Rldi9udWxsDQorKysg Yi9kcml2ZXJzL2NyeXB0by9jY3AvY2NwX2Rldi5oDQpAQCAtMCwwICsxLDUzMyBAQA0KKy8qLQ0K KyAqICAgQlNEIExJQ0VOU0UNCisgKg0KKyAqICAgQ29weXJpZ2h0KGMpIDIwMTcgQWR2YW5jZSBN aWNybyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiAgIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dA0KKyAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zDQorICogICBhcmUgbWV0Og0KKyAqDQorICogICAgICogUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQNCisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4N CisgKiAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlDQorICogICAgICAgZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIg dGhlIG5hbWUgb2YgQWR2YW5jZSBNaWNybyBEZXZpY2VzLCBJbmMgbm9yIHRoZSBuYW1lcw0KKyAq ICAgICAgIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzDQorICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQorICogICAgICAgcGVybWlzc2lvbi4NCisgKg0KKyAq ICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E IENPTlRSSUJVVE9SUw0KKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiAgIExJTUlURUQgVE8sIFRIRSBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KKyAqICAg QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBDT1BZUklHSFQNCisgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAqICAgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsDQorICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAgIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRQ0KKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIF9DQ1BfREVW X0hfDQorI2RlZmluZSBfQ0NQX0RFVl9IXw0KKw0KKyNpbmNsdWRlIDxsaW1pdHMuaD4NCisjaW5j bHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RyaW5n Lmg+DQorDQorI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCisjaW5jbHVkZSA8cnRlX2J5dGVvcmRl ci5oPg0KKyNpbmNsdWRlIDxydGVfaW8uaD4NCisjaW5jbHVkZSA8cnRlX3BjaS5oPg0KKyNpbmNs dWRlIDxydGVfc3BpbmxvY2suaD4NCisjaW5jbHVkZSA8cnRlX2NyeXB0b19zeW0uaD4NCisjaW5j bHVkZSA8cnRlX2NyeXB0b2Rldi5oPg0KKw0KKy8qKkNDUCBzc3BlY2lmaWMqLw0KKyNkZWZpbmUg TUFYX0hXX1FVRVVFUyAgICAgICAgICAgICAgICAgICA1DQorI2RlZmluZSBUUk5HX1JFVFJJRVMg ICAgICAgICAgICAgICAgICAgIDEwDQorI2RlZmluZSBDQ1BfQUxJR04oeCwgeSkgKCgoKHgpICsg KHkgLSAxKSkgLyB5KSAqIHkpDQorDQorLyoqKioqKiBSZWdpc3RlciBNYXBwaW5ncyAqKioqKiov DQorI2RlZmluZSBRX01BU0tfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwDQorI2RlZmlu ZSBUUk5HX09VVF9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDBjDQorDQorLyogLS0tLS0tLS0t LS0gQ0NQIFZlcnNpb24gNSBTcGVjaWZpY3MgLS0tLS0tLS0tLS0tICovDQorI2RlZmluZSBDTURf UVVFVUVfTUFTS19PRkZTRVQJCTB4MDANCisjZGVmaW5lCUNNRF9RVUVVRV9QUklPX09GRlNFVAkJ MHgwNA0KKyNkZWZpbmUgQ01EX1JFUUlEX0NPTkZJR19PRkZTRVQJCTB4MDgNCisjZGVmaW5lCUNN RF9DTURfVElNRU9VVF9PRkZTRVQJCTB4MTANCisjZGVmaW5lIExTQl9QVUJMSUNfTUFTS19MT19P RkZTRVQJMHgxOA0KKyNkZWZpbmUgTFNCX1BVQkxJQ19NQVNLX0hJX09GRlNFVAkweDFDDQorI2Rl ZmluZSBMU0JfUFJJVkFURV9NQVNLX0xPX09GRlNFVAkweDIwDQorI2RlZmluZSBMU0JfUFJJVkFU RV9NQVNLX0hJX09GRlNFVAkweDI0DQorDQorI2RlZmluZSBDTURfUV9DT05UUk9MX0JBU0UJCTB4 MDAwMA0KKyNkZWZpbmUgQ01EX1FfVEFJTF9MT19CQVNFCQkweDAwMDQNCisjZGVmaW5lIENNRF9R X0hFQURfTE9fQkFTRQkJMHgwMDA4DQorI2RlZmluZSBDTURfUV9JTlRfRU5BQkxFX0JBU0UJCTB4 MDAwQw0KKyNkZWZpbmUgQ01EX1FfSU5URVJSVVBUX1NUQVRVU19CQVNFCTB4MDAxMA0KKw0KKyNk ZWZpbmUgQ01EX1FfU1RBVFVTX0JBU0UJCTB4MDEwMA0KKyNkZWZpbmUgQ01EX1FfSU5UX1NUQVRV U19CQVNFCQkweDAxMDQNCisNCisjZGVmaW5lCUNNRF9DT05GSUdfMF9PRkZTRVQJCTB4NjAwMA0K KyNkZWZpbmUJQ01EX1RSTkdfQ1RMX09GRlNFVAkJMHg2MDA4DQorI2RlZmluZQlDTURfQUVTX01B U0tfT0ZGU0VUCQkweDYwMTANCisjZGVmaW5lCUNNRF9DTEtfR0FURV9DVExfT0ZGU0VUCQkweDYw M0MNCisNCisvKiBBZGRyZXNzIG9mZnNldCBiZXR3ZWVuIHR3byB2aXJ0dWFsIHF1ZXVlIHJlZ2lz dGVycyAqLw0KKyNkZWZpbmUgQ01EX1FfU1RBVFVTX0lOQ1IgICAgICAgICAgICAgIDB4MTAwMA0K Kw0KKy8qIEJpdCBtYXNrcyAqLw0KKyNkZWZpbmUgQ01EX1FfUlVOICAgICAgICAgICAgICAgICAg ICAgIDB4MQ0KKw0KKyNkZWZpbmUgQ01EX1FfU0laRSAgICAgICAgICAgICAgICAgICAgIDB4MUYN CisjZGVmaW5lIENNRF9RX1NISUZUICAgICAgICAgICAgICAgICAgICAzDQorI2RlZmluZSBDT01N QU5EU19QRVJfUVVFVUUgICAgICAgICAgICAgIDIwNDgNCisNCisjZGVmaW5lIFFVRVVFX1NJWkVf VkFMICAgICAgICAgICAgICAgICAgKChmZnMoQ09NTUFORFNfUEVSX1FVRVVFKSAtIDIpICYgXA0K KwkJCQkJIENNRF9RX1NJWkUpDQorI2RlZmluZSBRX0RFU0NfU0laRSAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihzdHJ1Y3QgY2NwX2Rlc2MpDQorI2RlZmluZSBRX1NJWkUobikgICAgICAgICAg ICAgICAgICAgICAgIChDT01NQU5EU19QRVJfUVVFVUUqKG4pKQ0KKw0KKyNkZWZpbmUgSU5UX0NP TVBMRVRJT04gICAgICAgICAgICAgICAgICAweDENCisjZGVmaW5lIElOVF9FUlJPUiAgICAgICAg ICAgICAgICAgICAgICAgMHgyDQorI2RlZmluZSBJTlRfUVVFVUVfU1RPUFBFRCAgICAgICAgICAg ICAgIDB4NA0KKyNkZWZpbmUgQUxMX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgICAoSU5UX0NP TVBMRVRJT058IFwNCisJCQkJCSBJTlRfRVJST1J8IFwNCisJCQkJCSBJTlRfUVVFVUVfU1RPUFBF RCkNCisNCisjZGVmaW5lIExTQl9SRUdJT05fV0lEVEggICAgICAgICAgICAgICAgNQ0KKyNkZWZp bmUgTUFYX0xTQl9DTlQgICAgICAgICAgICAgICAgICAgICA4DQorDQorI2RlZmluZSBMU0JfU0la RSAgICAgICAgICAgICAgICAgICAgICAgIDE2DQorI2RlZmluZSBMU0JfSVRFTV9TSVpFICAgICAg ICAgICAgICAgICAgIDMyDQorI2RlZmluZSBTTFNCX01BUF9TSVpFICAgICAgICAgICAgICAgICAg IChNQVhfTFNCX0NOVCAqIExTQl9TSVpFKQ0KKyNkZWZpbmUgTFNCX0VOVFJZX05VTUJFUihMU0Jf QUREUikgICAgICAoTFNCX0FERFIgLyBMU0JfSVRFTV9TSVpFKQ0KKw0KKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBHZW5lcmFsIENDUCBEZWZpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLw0KKw0KKyNkZWZpbmUgQ0NQX1NCX0JZVEVTICAgICAgICAgICAgICAgICAgICAzMg0KKy8q IFdvcmQgMCAqLw0KKyNkZWZpbmUgQ0NQX0NNRF9EVzAocCkJCSgocCktPmR3MCkNCisjZGVmaW5l IENDUF9DTURfU09DKHApCQkoQ0NQX0NNRF9EVzAocCkuc29jKQ0KKyNkZWZpbmUgQ0NQX0NNRF9J T0MocCkJCShDQ1BfQ01EX0RXMChwKS5pb2MpDQorI2RlZmluZSBDQ1BfQ01EX0lOSVQocCkJICAg ICAgICAoQ0NQX0NNRF9EVzAocCkuaW5pdCkNCisjZGVmaW5lIENDUF9DTURfRU9NKHApCQkoQ0NQ X0NNRF9EVzAocCkuZW9tKQ0KKyNkZWZpbmUgQ0NQX0NNRF9GVU5DVElPTihwKQkoQ0NQX0NNRF9E VzAocCkuZnVuY3Rpb24pDQorI2RlZmluZSBDQ1BfQ01EX0VOR0lORShwKQkoQ0NQX0NNRF9EVzAo cCkuZW5naW5lKQ0KKyNkZWZpbmUgQ0NQX0NNRF9QUk9UKHApCSAgICAgICAgKENDUF9DTURfRFcw KHApLnByb3QpDQorDQorLyogV29yZCAxICovDQorI2RlZmluZSBDQ1BfQ01EX0RXMShwKQkJKChw KS0+bGVuZ3RoKQ0KKyNkZWZpbmUgQ0NQX0NNRF9MRU4ocCkJCShDQ1BfQ01EX0RXMShwKSkNCisN CisvKiBXb3JkIDIgKi8NCisjZGVmaW5lIENDUF9DTURfRFcyKHApCQkoKHApLT5zcmNfbG8pDQor I2RlZmluZSBDQ1BfQ01EX1NSQ19MTyhwKQkoQ0NQX0NNRF9EVzIocCkpDQorDQorLyogV29yZCAz ICovDQorI2RlZmluZSBDQ1BfQ01EX0RXMyhwKQkJKChwKS0+ZHczKQ0KKyNkZWZpbmUgQ0NQX0NN RF9TUkNfTUVNKHApCSgocCktPmR3My5zcmNfbWVtKQ0KKyNkZWZpbmUgQ0NQX0NNRF9TUkNfSEko cCkJKChwKS0+ZHczLnNyY19oaSkNCisjZGVmaW5lIENDUF9DTURfTFNCX0lEKHApCSgocCktPmR3 My5sc2JfY3h0X2lkKQ0KKyNkZWZpbmUgQ0NQX0NNRF9GSVhfU1JDKHApCSgocCktPmR3My5maXhl ZCkNCisNCisvKiBXb3JkcyA0LzUgKi8NCisjZGVmaW5lIENDUF9DTURfRFc0KHApCQkoKHApLT5k dzQpDQorI2RlZmluZSBDQ1BfQ01EX0RTVF9MTyhwKQkoQ0NQX0NNRF9EVzQocCkuZHN0X2xvKQ0K KyNkZWZpbmUgQ0NQX0NNRF9EVzUocCkJCSgocCktPmR3NS5maWVsZHMuZHN0X2hpKQ0KKyNkZWZp bmUgQ0NQX0NNRF9EU1RfSEkocCkJKENDUF9DTURfRFc1KHApKQ0KKyNkZWZpbmUgQ0NQX0NNRF9E U1RfTUVNKHApCSgocCktPmR3NS5maWVsZHMuZHN0X21lbSkNCisjZGVmaW5lIENDUF9DTURfRklY X0RTVChwKQkoKHApLT5kdzUuZmllbGRzLmZpeGVkKQ0KKyNkZWZpbmUgQ0NQX0NNRF9TSEFfTE8o cCkJKChwKS0+ZHc0LnNoYV9sZW5fbG8pDQorI2RlZmluZSBDQ1BfQ01EX1NIQV9ISShwKQkoKHAp LT5kdzUuc2hhX2xlbl9oaSkNCisNCisvKiBXb3JkIDYvNyAqLw0KKyNkZWZpbmUgQ0NQX0NNRF9E VzYocCkJCSgocCktPmtleV9sbykNCisjZGVmaW5lIENDUF9DTURfS0VZX0xPKHApCShDQ1BfQ01E X0RXNihwKSkNCisjZGVmaW5lIENDUF9DTURfRFc3KHApCQkoKHApLT5kdzcpDQorI2RlZmluZSBD Q1BfQ01EX0tFWV9ISShwKQkoKHApLT5kdzcua2V5X2hpKQ0KKyNkZWZpbmUgQ0NQX0NNRF9LRVlf TUVNKHApCSgocCktPmR3Ny5rZXlfbWVtKQ0KKy8qIGJpdG1hcCAqLw0KK2VudW0gew0KKwlCSVRT X1BFUl9XT1JEID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQNCit9Ow0KKw0KKyNk ZWZpbmUgV09SRF9PRkZTRVQoYikgKChiKSAvIEJJVFNfUEVSX1dPUkQpDQorI2RlZmluZSBCSVRf T0ZGU0VUKGIpICAoKGIpICUgQklUU19QRVJfV09SRCkNCisNCisjZGVmaW5lIENDUF9ESVZfUk9V TkRfVVAobiwgZCkgICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpDQorI2RlZmluZSBDQ1BfQklUTUFQ X1NJWkUobnIpIFwNCisJQ0NQX0RJVl9ST1VORF9VUChuciwgQ0hBUl9CSVQgKiBzaXplb2YodW5z aWduZWQgbG9uZykpDQorDQorI2RlZmluZSBDQ1BfQklUTUFQX0ZJUlNUX1dPUkRfTUFTSyhzdGFy dCkgXA0KKwkofjBVTCA8PCAoKHN0YXJ0KSAmIChCSVRTX1BFUl9XT1JEIC0gMSkpKQ0KKyNkZWZp bmUgQ0NQX0JJVE1BUF9MQVNUX1dPUkRfTUFTSyhuYml0cykgXA0KKwkofjBVTCA+PiAoLShuYml0 cykgJiAoQklUU19QRVJfV09SRCAtIDEpKSkNCisNCisjZGVmaW5lIF9fY2NwX3JvdW5kX21hc2so eCwgeSkgKCh0eXBlb2YoeCkpKCh5KS0xKSkNCisjZGVmaW5lIGNjcF9yb3VuZF9kb3duKHgsIHkp ICgoeCkgJiB+X19jY3Bfcm91bmRfbWFzayh4LCB5KSkNCisNCisvKiogQ0NQIHJlZ2lzdGVycyBX cml0ZS9SZWFkICovDQorDQorc3RhdGljIGlubGluZSB2b2lkIGNjcF9wY2lfcmVnX3dyaXRlKHZv aWQgKmJhc2UsIGludCBvZmZzZXQsDQorCQkJCSAgICAgdWludDMyX3QgdmFsdWUpDQorew0KKwl2 b2xhdGlsZSB2b2lkICpyZWdfYWRkciA9ICgodWludDhfdCAqKWJhc2UgKyBvZmZzZXQpOw0KKw0K KwlydGVfd3JpdGUzMigocnRlX2NwdV90b19sZV8zMih2YWx1ZSkpLCByZWdfYWRkcik7DQorfQ0K Kw0KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2NwX3BjaV9yZWdfcmVhZCh2b2lkICpiYXNlLCBp bnQgb2Zmc2V0KQ0KK3sNCisJdm9sYXRpbGUgdm9pZCAqcmVnX2FkZHIgPSAoKHVpbnQ4X3QgKili YXNlICsgb2Zmc2V0KTsNCisNCisJcmV0dXJuIHJ0ZV9sZV90b19jcHVfMzIocnRlX3JlYWQzMihy ZWdfYWRkcikpOw0KK30NCisNCisjZGVmaW5lIENDUF9SRUFEX1JFRyhod19hZGRyLCByZWdfb2Zm c2V0KSBcDQorCWNjcF9wY2lfcmVnX3JlYWQoaHdfYWRkciwgcmVnX29mZnNldCkNCisNCisjZGVm aW5lIENDUF9XUklURV9SRUcoaHdfYWRkciwgcmVnX29mZnNldCwgdmFsdWUpIFwNCisJY2NwX3Bj aV9yZWdfd3JpdGUoaHdfYWRkciwgcmVnX29mZnNldCwgdmFsdWUpDQorDQorVEFJTFFfSEVBRChj Y3BfbGlzdCwgY2NwX2RldmljZSk7DQorDQorZXh0ZXJuIHN0cnVjdCBjY3BfbGlzdCBjY3BfbGlz dDsNCisNCisvKioNCisgKiBDQ1AgZGV2aWNlIHZlcnNpb24NCisgKi8NCitlbnVtIGNjcF9kZXZp Y2VfdmVyc2lvbiB7DQorCUNDUF9WRVJTSU9OXzVBID0gMCwNCisJQ0NQX1ZFUlNJT05fNUIsDQor fTsNCisNCisvKioNCisgKiBBIHN0cnVjdHVyZSBkZXNjcmliaW5nIHN0YXRpY3RpY3MuDQorICov DQorDQorc3RydWN0IHN0YXRzIHsNCisJdWludDY0X3QgZW5xX2NudDsNCisJdWludDY0X3QgZGVx X2NudDsNCisJdWludDY0X3QgZXJyX2NudDsNCit9Ow0KKw0KKy8qKg0KKyAqIEEgc3RydWN0dXJl IGRlc2NyaWJpbmcgYSBDQ1AgY29tbWFuZCBxdWV1ZS4NCisgKi8NCitzdHJ1Y3QgY2NwX3F1ZXVl IHsNCisJc3RydWN0IGNjcF9kZXZpY2UgKmRldjsNCisJY2hhciBtZW16X25hbWVbUlRFX01FTVpP TkVfTkFNRVNJWkVdOw0KKwlzdHJ1Y3Qgc3RhdHMgc3RhdDsNCisNCisJcnRlX2F0b21pYzY0X3Qg ZnJlZV9zbG90czsNCisJLyoqPGF2YWlsYWJsZSBmcmVlIHNsb3RzIHVwZGF0ZWQgZnJvbSBlbnEv ZGVxIGNhbGxzICovDQorDQorCS8qIFF1ZXVlIGlkZW50aWZpZXIgKi8NCisJdWludDY0X3QgaWQ7 CS8qKjwgcXVldWUgaWQgKi8NCisJdWludDY0X3QgcWlkeDsJLyoqPCBxdWV1ZSBpbmRleCAqLw0K Kwl1aW50NjRfdCBxc2l6ZTsJLyoqPCBxdWV1ZSBzaXplICovDQorDQorCS8qIFF1ZXVlICBhZGRy ZXNzICovDQorCXN0cnVjdCBjY3BfZGVzYyAqcWJhc2VfZGVzYzsNCisJdm9pZCAqcWJhc2VfYWRk cjsNCisJcGh5c19hZGRyX3QgcWJhc2VfcGh5c19hZGRyOw0KKwkvKio8IHF1ZXVlLXBhZ2UgcmVn aXN0ZXJzIGFkZHIgKi8NCisJdm9pZCAqcmVnX2Jhc2U7DQorDQorCXVpbnQzMl90IHFjb250cm9s Ow0KKwkvKio8IHF1ZXVlIGN0cmwgcmVnKi8NCisNCisJaW50IGxzYjsNCisJLyoqPGxzYiByZWdp b24gYXNzaWduZWQgdG8gcXVldWUqLw0KKwl1bnNpZ25lZCBsb25nIGxzYm1hc2s7DQorCS8qKjxs c2IgcmVnaW9ucyBxdWV1ZSBjYW4gYWNjZXNzKi8NCisJdW5zaWduZWQgbG9uZyBsc2JtYXBbQ0NQ X0JJVE1BUF9TSVpFKExTQl9TSVpFKV07DQorCS8qKjxBbGwgbHNiIHJlc291cmNlcyB3aGljaCBx dWV1ZSBpcyB1c2luZyovDQorCXVpbnQzMl90IHNiX2tleTsNCisJLyoqPGxzYiBhc3NpZ25lZCBm b3IgcXVldWUqLw0KKwl1aW50MzJfdCBzYl9pdjsNCisJLyoqPGxzYiBhc3NpZ25lZCBmb3IgaXYq Lw0KKwl1aW50MzJfdCBzYl9zaGE7DQorCS8qKjxsc2IgYXNzaWduZWQgZm9yIHNoYSBjdHgqLw0K Kwl1aW50MzJfdCBzYl9obWFjOw0KKwkvKio8bHNiIGFzc2lnbmVkIGZvciBobWFjIGN0eCovDQor fSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7DQorDQorLyoqDQorICogQSBzdHJ1Y3R1cmUgZGVzY3Jp YmluZyBhIENDUCBkZXZpY2UuDQorICovDQorc3RydWN0IGNjcF9kZXZpY2Ugew0KKwlUQUlMUV9F TlRSWShjY3BfZGV2aWNlKSBuZXh0Ow0KKwlpbnQgaWQ7DQorCS8qKjxDQ1AgZGV2IGlkIG9uIHBs YXRmb3JtKi8NCisJc3RydWN0IGNjcF9xdWV1ZSBjbWRfcVtNQVhfSFdfUVVFVUVTXTsNCisJLyoq PENDUCBxdWV1ZSovDQorCWludCBjbWRfcV9jb3VudDsNCisJLyoqPCMgb2YgY2NwIFF1ZXVlcyov DQorCXN0cnVjdCBydGVfcGNpX2RldmljZSBwY2k7DQorCXN0cnVjdCBzdGF0cyBzdGF0Ow0KKwl1 bnNpZ25lZCBsb25nIGxzYm1hcFtDQ1BfQklUTUFQX1NJWkUoU0xTQl9NQVBfU0laRSldOw0KKwkv Kio8c2hhcmVkIGxzYiBtYXNrIG9mIGNjcCovDQorCXJ0ZV9zcGlubG9ja190IGxzYl9sb2NrOw0K KwkvKio8cHJvdGVjdGlvbiBmb3Igc2hhcmVkIGxzYiByZWdpb24gYWxsb2NhdGlvbiovDQorCWlu dCBxaWR4Ow0KKwkvKio8Y3VycmVudCBxdWV1ZSBpbmRleCAqLw0KKwlpbnQgaHdybmdfcmV0cmll czsNCisJLyoqPHJldHJ5IGNvdW50ZXIgZm9yIENDUCBUUk5HICovDQorfSBfX3J0ZV9jYWNoZV9h bGlnbmVkOw0KKw0KKw0KKy8qKkNDUCBIL1cgZW5naW5lIHJlbGF0ZWQqLw0KKy8qKg0KKyAqIGNj cF9lbmdpbmUgLSBDQ1Agb3BlcmF0aW9uIGlkZW50aWZpZXJzDQorICoNCisgKiBAQ0NQX0VOR0lO RV9BRVM6IEFFUyBvcGVyYXRpb24NCisgKiBAQ0NQX0VOR0lORV9YVFNfQUVTOiAxMjgtYml0IFhU UyBBRVMgb3BlcmF0aW9uDQorICogQENDUF9FTkdJTkVfM0RFUzogREVTLzNERVMgb3BlcmF0aW9u DQorICogQENDUF9FTkdJTkVfU0hBOiBTSEEgb3BlcmF0aW9uDQorICogQENDUF9FTkdJTkVfUlNB OiBSU0Egb3BlcmF0aW9uDQorICogQENDUF9FTkdJTkVfUEFTU1RIUlU6IHBhc3MtdGhyb3VnaCBv cGVyYXRpb24NCisgKiBAQ0NQX0VOR0lORV9aTElCX0RFQ09NUFJFU1M6IHVudXNlZA0KKyAqIEBD Q1BfRU5HSU5FX0VDQzogRUNDIG9wZXJhdGlvbg0KKyAqLw0KK2VudW0gY2NwX2VuZ2luZSB7DQor CUNDUF9FTkdJTkVfQUVTID0gMCwNCisJQ0NQX0VOR0lORV9YVFNfQUVTXzEyOCwNCisJQ0NQX0VO R0lORV8zREVTLA0KKwlDQ1BfRU5HSU5FX1NIQSwNCisJQ0NQX0VOR0lORV9SU0EsDQorCUNDUF9F TkdJTkVfUEFTU1RIUlUsDQorCUNDUF9FTkdJTkVfWkxJQl9ERUNPTVBSRVNTLA0KKwlDQ1BfRU5H SU5FX0VDQywNCisJQ0NQX0VOR0lORV9fTEFTVCwNCit9Ow0KKw0KKw0KKy8qKioqKiBQYXNzdGhy dSBlbmdpbmUgKioqKiovDQorLyoqDQorICogY2NwX3Bhc3N0aHJ1X2JpdHdpc2UgLSB0eXBlIG9m IGJpdHdpc2UgcGFzc3RocnUgb3BlcmF0aW9uDQorICoNCisgKiBAQ0NQX1BBU1NUSFJVX0JJVFdJ U0VfTk9PUDogbm8gYml0d2lzZSBvcGVyYXRpb24gcGVyZm9ybWVkDQorICogQENDUF9QQVNTVEhS VV9CSVRXSVNFX0FORDogcGVyZm9ybSBiaXR3aXNlIEFORCBvZiBzcmMgd2l0aCBtYXNrDQorICog QENDUF9QQVNTVEhSVV9CSVRXSVNFX09SOiBwZXJmb3JtIGJpdHdpc2UgT1Igb2Ygc3JjIHdpdGgg bWFzaw0KKyAqIEBDQ1BfUEFTU1RIUlVfQklUV0lTRV9YT1I6IHBlcmZvcm0gYml0d2lzZSBYT1Ig b2Ygc3JjIHdpdGggbWFzaw0KKyAqIEBDQ1BfUEFTU1RIUlVfQklUV0lTRV9NQVNLOiBvdmVyd3Jp dGUgd2l0aCBtYXNrDQorICovDQorZW51bSBjY3BfcGFzc3RocnVfYml0d2lzZSB7DQorCUNDUF9Q QVNTVEhSVV9CSVRXSVNFX05PT1AgPSAwLA0KKwlDQ1BfUEFTU1RIUlVfQklUV0lTRV9BTkQsDQor CUNDUF9QQVNTVEhSVV9CSVRXSVNFX09SLA0KKwlDQ1BfUEFTU1RIUlVfQklUV0lTRV9YT1IsDQor CUNDUF9QQVNTVEhSVV9CSVRXSVNFX01BU0ssDQorCUNDUF9QQVNTVEhSVV9CSVRXSVNFX19MQVNU LA0KK307DQorDQorLyoqDQorICogY2NwX3Bhc3N0aHJ1X2J5dGVzd2FwIC0gdHlwZSBvZiBieXRl c3dhcCBwYXNzdGhydSBvcGVyYXRpb24NCisgKg0KKyAqIEBDQ1BfUEFTU1RIUlVfQllURVNXQVBf Tk9PUDogbm8gYnl0ZSBzd2FwcGluZyBwZXJmb3JtZWQNCisgKiBAQ0NQX1BBU1NUSFJVX0JZVEVT V0FQXzMyQklUOiBzd2FwIGJ5dGVzIHdpdGhpbiAzMi1iaXQgd29yZHMNCisgKiBAQ0NQX1BBU1NU SFJVX0JZVEVTV0FQXzI1NkJJVDogc3dhcCBieXRlcyB3aXRoaW4gMjU2LWJpdCB3b3Jkcw0KKyAq Lw0KK2VudW0gY2NwX3Bhc3N0aHJ1X2J5dGVzd2FwIHsNCisJQ0NQX1BBU1NUSFJVX0JZVEVTV0FQ X05PT1AgPSAwLA0KKwlDQ1BfUEFTU1RIUlVfQllURVNXQVBfMzJCSVQsDQorCUNDUF9QQVNTVEhS VV9CWVRFU1dBUF8yNTZCSVQsDQorCUNDUF9QQVNTVEhSVV9CWVRFU1dBUF9fTEFTVCwNCit9Ow0K Kw0KKy8qKg0KKyAqIENDUCBwYXNzdGhydQ0KKyAqLw0KK3N0cnVjdCBjY3BfcGFzc3RocnUgew0K KwlwaHlzX2FkZHJfdCBzcmNfYWRkcjsNCisJcGh5c19hZGRyX3QgZGVzdF9hZGRyOw0KKwllbnVt IGNjcF9wYXNzdGhydV9iaXR3aXNlIGJpdF9tb2Q7DQorCWVudW0gY2NwX3Bhc3N0aHJ1X2J5dGVz d2FwIGJ5dGVfc3dhcDsNCisJaW50IGxlbjsNCisJaW50IGRpcjsNCit9Ow0KKw0KKy8qIENDUCB2 ZXJzaW9uIDU6IFVuaW9uIHRvIGRlZmluZSB0aGUgZnVuY3Rpb24gZmllbGQgKGNtZF9yZWcxL2R3 b3JkMCkgKi8NCit1bmlvbiBjY3BfZnVuY3Rpb24gew0KKwlzdHJ1Y3Qgew0KKwkJdWludDE2X3Qg c2l6ZTo3Ow0KKwkJdWludDE2X3QgZW5jcnlwdDoxOw0KKwkJdWludDE2X3QgbW9kZTo1Ow0KKwkJ dWludDE2X3QgdHlwZToyOw0KKwl9IGFlczsNCisJc3RydWN0IHsNCisJCXVpbnQxNl90IHNpemU6 NzsNCisJCXVpbnQxNl90IGVuY3J5cHQ6MTsNCisJCXVpbnQxNl90IG1vZGU6NTsNCisJCXVpbnQx Nl90IHR5cGU6MjsNCisJfSBkZXM7DQorCXN0cnVjdCB7DQorCQl1aW50MTZfdCBzaXplOjc7DQor CQl1aW50MTZfdCBlbmNyeXB0OjE7DQorCQl1aW50MTZfdCByc3ZkOjU7DQorCQl1aW50MTZfdCB0 eXBlOjI7DQorCX0gYWVzX3h0czsNCisJc3RydWN0IHsNCisJCXVpbnQxNl90IHJzdmQxOjEwOw0K KwkJdWludDE2X3QgdHlwZTo0Ow0KKwkJdWludDE2X3QgcnN2ZDI6MTsNCisJfSBzaGE7DQorCXN0 cnVjdCB7DQorCQl1aW50MTZfdCBtb2RlOjM7DQorCQl1aW50MTZfdCBzaXplOjEyOw0KKwl9IHJz YTsNCisJc3RydWN0IHsNCisJCXVpbnQxNl90IGJ5dGVzd2FwOjI7DQorCQl1aW50MTZfdCBiaXR3 aXNlOjM7DQorCQl1aW50MTZfdCByZWZsZWN0OjI7DQorCQl1aW50MTZfdCByc3ZkOjg7DQorCX0g cHQ7DQorCXN0cnVjdCAgew0KKwkJdWludDE2X3QgcnN2ZDoxMzsNCisJfSB6bGliOw0KKwlzdHJ1 Y3Qgew0KKwkJdWludDE2X3Qgc2l6ZToxMDsNCisJCXVpbnQxNl90IHR5cGU6MjsNCisJCXVpbnQx Nl90IG1vZGU6MzsNCisJfSBlY2M7DQorCXVpbnQxNl90IHJhdzsNCit9Ow0KKw0KKw0KKy8qKg0K KyAqIGRlc2NyaXB0b3IgZm9yIHZlcnNpb24gNSBDUFAgY29tbWFuZHMNCisgKiA4IDMyLWJpdCB3 b3JkczoNCisgKiB3b3JkIDA6IGZ1bmN0aW9uOyBlbmdpbmU7IGNvbnRyb2wgYml0cw0KKyAqIHdv cmQgMTogbGVuZ3RoIG9mIHNvdXJjZSBkYXRhDQorICogd29yZCAyOiBsb3cgMzIgYml0cyBvZiBz b3VyY2UgcG9pbnRlcg0KKyAqIHdvcmQgMzogdXBwZXIgMTYgYml0cyBvZiBzb3VyY2UgcG9pbnRl cjsgc291cmNlIG1lbW9yeSB0eXBlDQorICogd29yZCA0OiBsb3cgMzIgYml0cyBvZiBkZXN0aW5h dGlvbiBwb2ludGVyDQorICogd29yZCA1OiB1cHBlciAxNiBiaXRzIG9mIGRlc3RpbmF0aW9uIHBv aW50ZXI7IGRlc3RpbmF0aW9uIG1lbW9yeQ0KKyAqIHR5cGUNCisgKiB3b3JkIDY6IGxvdyAzMiBi aXRzIG9mIGtleSBwb2ludGVyDQorICogd29yZCA3OiB1cHBlciAxNiBiaXRzIG9mIGtleSBwb2lu dGVyOyBrZXkgbWVtb3J5IHR5cGUNCisgKi8NCitzdHJ1Y3QgZHdvcmQwIHsNCisJdWludDMyX3Qg c29jOjE7DQorCXVpbnQzMl90IGlvYzoxOw0KKwl1aW50MzJfdCByc3ZkMToxOw0KKwl1aW50MzJf dCBpbml0OjE7DQorCXVpbnQzMl90IGVvbToxOw0KKwl1aW50MzJfdCBmdW5jdGlvbjoxNTsNCisJ dWludDMyX3QgZW5naW5lOjQ7DQorCXVpbnQzMl90IHByb3Q6MTsNCisJdWludDMyX3QgcnN2ZDI6 NzsNCit9Ow0KKw0KK3N0cnVjdCBkd29yZDMgew0KKwl1aW50MzJfdCBzcmNfaGk6MTY7DQorCXVp bnQzMl90IHNyY19tZW06MjsNCisJdWludDMyX3QgbHNiX2N4dF9pZDo4Ow0KKwl1aW50MzJfdCBy c3ZkMTo1Ow0KKwl1aW50MzJfdCBmaXhlZDoxOw0KK307DQorDQordW5pb24gZHdvcmQ0IHsNCisJ dWludDMyX3QgZHN0X2xvOwkvKiBOT04tU0hBICovDQorCXVpbnQzMl90IHNoYV9sZW5fbG87CS8q IFNIQSAqLw0KK307DQorDQordW5pb24gZHdvcmQ1IHsNCisJc3RydWN0IHsNCisJCXVpbnQzMl90 IGRzdF9oaToxNjsNCisJCXVpbnQzMl90IGRzdF9tZW06MjsNCisJCXVpbnQzMl90IHJzdmQxOjEz Ow0KKwkJdWludDMyX3QgZml4ZWQ6MTsNCisJfQ0KKwlmaWVsZHM7DQorCXVpbnQzMl90IHNoYV9s ZW5faGk7DQorfTsNCisNCitzdHJ1Y3QgZHdvcmQ3IHsNCisJdWludDMyX3Qga2V5X2hpOjE2Ow0K Kwl1aW50MzJfdCBrZXlfbWVtOjI7DQorCXVpbnQzMl90IHJzdmQxOjE0Ow0KK307DQorDQorc3Ry dWN0IGNjcF9kZXNjIHsNCisJc3RydWN0IGR3b3JkMCBkdzA7DQorCXVpbnQzMl90IGxlbmd0aDsN CisJdWludDMyX3Qgc3JjX2xvOw0KKwlzdHJ1Y3QgZHdvcmQzIGR3MzsNCisJdW5pb24gZHdvcmQ0 IGR3NDsNCisJdW5pb24gZHdvcmQ1IGR3NTsNCisJdWludDMyX3Qga2V5X2xvOw0KKwlzdHJ1Y3Qg ZHdvcmQ3IGR3NzsNCit9Ow0KKw0KK2VudW0gY2NwX21lbXR5cGUgew0KKwlDQ1BfTUVNVFlQRV9T WVNURU0gPSAwLA0KKwlDQ1BfTUVNVFlQRV9TQiwNCisJQ0NQX01FTVRZUEVfTE9DQUwsDQorCUND UF9NRU1UWVBFX19MQVNULA0KK307DQorDQorLyoqDQorICogY21kIGlkIHRvIGZvbGxvdyBvcmRl cg0KKyAqLw0KK2VudW0gY2NwX2NtZF9vcmRlciB7DQorCUNDUF9DTURfQ0lQSEVSID0gMCwNCisJ Q0NQX0NNRF9BVVRILA0KKwlDQ1BfQ01EX0NJUEhFUl9IQVNILA0KKwlDQ1BfQ01EX0hBU0hfQ0lQ SEVSLA0KKwlDQ1BfQ01EX0NPTUJJTkVELA0KKwlDQ1BfQ01EX05PVF9TVVBQT1JURUQsDQorfTsN CisNCitzdGF0aWMgaW5saW5lIHVpbnQzMl90DQorbG93MzJfdmFsdWUodW5zaWduZWQgbG9uZyBh ZGRyKQ0KK3sNCisJcmV0dXJuICgodWludDY0X3QpYWRkcikgJiAweDBmZmZmZmZmZjsNCit9DQor DQorc3RhdGljIGlubGluZSB1aW50MzJfdA0KK2hpZ2gzMl92YWx1ZSh1bnNpZ25lZCBsb25nIGFk ZHIpDQorew0KKwlyZXR1cm4gKCh1aW50NjRfdClhZGRyID4+IDMyKSAmIDB4MDAwMDBmZmZmOw0K K30NCisNCisvKg0KKyAqIFN0YXJ0IENDUCBkZXZpY2UNCisgKi8NCitpbnQgY2NwX2Rldl9zdGFy dChzdHJ1Y3QgcnRlX2NyeXB0b2RldiAqZGV2KTsNCisNCisvKioNCisgKiBEZXRlY3QgY2NwIHBs YXRmb3JtIGFuZCBpbml0aWFsaXplIGFsbCBjY3AgZGV2aWNlcw0KKyAqDQorICogQHBhcmFtIGNj cF9pZCBydGVfcGNpX2lkIGxpc3QgZm9yIHN1cHBvcnRlZCBDQ1AgZGV2aWNlcw0KKyAqIEByZXR1 cm4gbm8uIG9mIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBDQ1AgZGV2aWNlcw0KKyAqLw0KK2lu dCBjY3BfcHJvYmVfZGV2aWNlcyhjb25zdCBzdHJ1Y3QgcnRlX3BjaV9pZCAqY2NwX2lkKTsNCisN CisvKioNCisgKiBhbGxvY2F0ZSBhIGNjcCBjb21tYW5kIHF1ZXVlDQorICoNCisgKiBAZGV2IHJ0 ZSBjcnlwdG8gZGV2aWNlDQorICogQHBhcmFtIHNsb3RfcmVxIG51bWJlciBvZiByZXF1aXJlZA0K KyAqIEByZXR1cm4gYWxsb3R0ZWQgQ0NQIHF1ZXVlIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIE5VTEwN CisgKi8NCitzdHJ1Y3QgY2NwX3F1ZXVlICpjY3BfYWxsb3RfcXVldWUoc3RydWN0IHJ0ZV9jcnlw dG9kZXYgKmRldiwgaW50IHNsb3RfcmVxKTsNCisNCisvKioNCisgKiByZWFkIGh3cm5nIHZhbHVl DQorICoNCisgKiBAcGFyYW0gdHJuZ192YWx1ZSBkYXRhIHBvaW50ZXIgdG8gd3JpdGUgUk5HIHZh bHVlDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIC0xDQorICovDQoraW50IGNj cF9yZWFkX2h3cm5nKHVpbnQzMl90ICp0cm5nX3ZhbHVlKTsNCisNCisjZW5kaWYgLyogX0NDUF9E RVZfSF8gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3AvY2NwX3BjaS5jIGIvZHJp dmVycy9jcnlwdG8vY2NwL2NjcF9wY2kuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLmVmYzJlYmYNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9j Y3BfcGNpLmMNCkBAIC0wLDAgKzEsMzMxIEBADQorLyotDQorICogICBCU0QgTElDRU5TRQ0KKyAq DQorICogICBDb3B5cmlnaHQoYykgMjAxNyBBZHZhbmNlIE1pY3JvIERldmljZXMsIEluYy4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogICBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMN CisgKiAgIGFyZSBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisg KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodA0KKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyAqICAgICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiAgICAg ICBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBZHZhbmNlIE1p Y3JvIERldmljZXMsIEluYyBub3IgdGhlIG5hbWVzDQorICogICAgICAgb2YgaXRzIGNvbnRyaWJ1 dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgICAg ICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4NCisgKiAgICAgICBwZXJtaXNzaW9uLg0KKyAqDQorICogICBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogICAi QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVA0KKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqICAgT1dO RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsDQorICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiAgIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWQ0KKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogICBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxkaXJlbnQuaD4NCisjaW5jbHVkZSA8ZmNudGwu aD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUg PHVuaXN0ZC5oPg0KKw0KKyNpbmNsdWRlIDxydGVfc3RyaW5nX2Zucy5oPg0KKw0KKyNpbmNsdWRl IDxjY3BfcGNpLmg+DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1aW9fbW9kdWxlX25h bWVzW10gPSB7DQorCSJpZ2JfdWlvIiwNCisJInVpb19wY2lfZ2VuZXJpYyIsDQorfTsNCisNCitp bnQNCitjY3BfY2hlY2tfcGNpX3Vpb19tb2R1bGUodm9pZCkNCit7DQorCUZJTEUgKmZwOw0KKwlp bnQgaTsNCisJY2hhciBidWZbQlVGU0laXTsNCisNCisJZnAgPSBmb3BlbihQUk9DX01PRFVMRVMs ICJyIik7DQorCWlmIChmcCA9PSBOVUxMKQ0KKwkJcmV0dXJuIC0xOw0KKwlpID0gMDsNCisJd2hp bGUgKHVpb19tb2R1bGVfbmFtZXNbaV0gIT0gTlVMTCkgew0KKwkJd2hpbGUgKGZnZXRzKGJ1Ziwg c2l6ZW9mKGJ1ZiksIGZwKSAhPSBOVUxMKSB7DQorCQkJaWYgKCFzdHJuY21wKGJ1ZiwgdWlvX21v ZHVsZV9uYW1lc1tpXSwNCisJCQkJICAgICBzdHJsZW4odWlvX21vZHVsZV9uYW1lc1tpXSkpKQ0K KwkJCQlyZXR1cm4gaTsNCisJCX0NCisJCWkrKzsNCisJCXJld2luZChmcCk7DQorCX0NCisJcHJp bnRmKCJJbnNlcnQgaWdiX3VpbyBvciB1aW9fcGNpX2dlbmVyaWMga2VybmVsIG1vZHVsZShzKSIp Ow0KKwlyZXR1cm4gLTE7LyogdWlvIG5vdCBpbnNlcnRlZCAqLw0KK30NCisNCisvKg0KKyAqIHNw bGl0IHVwIGEgcGNpIGFkZHJlc3MgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMuDQorICovDQor aW50DQorY2NwX3BhcnNlX3BjaV9hZGRyX2Zvcm1hdChjb25zdCBjaGFyICpidWYsIGludCBidWZz aXplLCB1aW50MTZfdCAqZG9tYWluLA0KKwkJCSAgdWludDhfdCAqYnVzLCB1aW50OF90ICpkZXZp ZCwgdWludDhfdCAqZnVuY3Rpb24pDQorew0KKwkvKiBmaXJzdCBzcGxpdCBvbiAnOicgKi8NCisJ dW5pb24gc3BsaXRhZGRyIHsNCisJCXN0cnVjdCB7DQorCQkJY2hhciAqZG9tYWluOw0KKwkJCWNo YXIgKmJ1czsNCisJCQljaGFyICpkZXZpZDsNCisJCQljaGFyICpmdW5jdGlvbjsNCisJCX07DQor CQljaGFyICpzdHJbUENJX0ZNVF9OVkFMXTsNCisJCS8qIGxhc3QgZWxlbWVudC1zZXBhcmF0b3Ig aXMgIi4iIG5vdCAiOiIgKi8NCisJfSBzcGxpdGFkZHI7DQorDQorCWNoYXIgKmJ1Zl9jb3B5ID0g c3RybmR1cChidWYsIGJ1ZnNpemUpOw0KKw0KKwlpZiAoYnVmX2NvcHkgPT0gTlVMTCkNCisJCXJl dHVybiAtMTsNCisNCisJaWYgKHJ0ZV9zdHJzcGxpdChidWZfY29weSwgYnVmc2l6ZSwgc3BsaXRh ZGRyLnN0ciwgUENJX0ZNVF9OVkFMLCAnOicpDQorCQkJIT0gUENJX0ZNVF9OVkFMIC0gMSkNCisJ CWdvdG8gZXJyb3I7DQorCS8qIGZpbmFsIHNwbGl0IGlzIG9uICcuJyBiZXR3ZWVuIGRldmlkIGFu ZCBmdW5jdGlvbiAqLw0KKwlzcGxpdGFkZHIuZnVuY3Rpb24gPSBzdHJjaHIoc3BsaXRhZGRyLmRl dmlkLCAnLicpOw0KKwlpZiAoc3BsaXRhZGRyLmZ1bmN0aW9uID09IE5VTEwpDQorCQlnb3RvIGVy cm9yOw0KKwkqc3BsaXRhZGRyLmZ1bmN0aW9uKysgPSAnXDAnOw0KKw0KKwkvKiBub3cgY29udmVy dCB0byBpbnQgdmFsdWVzICovDQorCWVycm5vID0gMDsNCisJKmRvbWFpbiA9ICh1aW50OF90KXN0 cnRvdWwoc3BsaXRhZGRyLmRvbWFpbiwgTlVMTCwgMTYpOw0KKwkqYnVzID0gKHVpbnQ4X3Qpc3Ry dG91bChzcGxpdGFkZHIuYnVzLCBOVUxMLCAxNik7DQorCSpkZXZpZCA9ICh1aW50OF90KXN0cnRv dWwoc3BsaXRhZGRyLmRldmlkLCBOVUxMLCAxNik7DQorCSpmdW5jdGlvbiA9ICh1aW50OF90KXN0 cnRvdWwoc3BsaXRhZGRyLmZ1bmN0aW9uLCBOVUxMLCAxMCk7DQorCWlmIChlcnJubyAhPSAwKQ0K KwkJZ290byBlcnJvcjsNCisNCisJZnJlZShidWZfY29weSk7IC8qIGZyZWUgdGhlIGNvcHkgbWFk ZSB3aXRoIHN0cmR1cCAqLw0KKwlyZXR1cm4gMDsNCitlcnJvcjoNCisJZnJlZShidWZfY29weSk7 DQorCXJldHVybiAtMTsNCit9DQorDQoraW50DQorY2NwX3BjaV9wYXJzZV9zeXNmc192YWx1ZShj b25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgbG9uZyAqdmFsKQ0KK3sNCisJRklMRSAqZjsN CisJY2hhciBidWZbQlVGU0laXTsNCisJY2hhciAqZW5kID0gTlVMTDsNCisNCisJZiA9IGZvcGVu KGZpbGVuYW1lLCAiciIpOw0KKwlpZiAoZiA9PSBOVUxMKQ0KKwkJcmV0dXJuIC0xOw0KKwlpZiAo ZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikgPT0gTlVMTCkgew0KKwkJZmNsb3NlKGYpOw0KKwkJ cmV0dXJuIC0xOw0KKwl9DQorCSp2YWwgPSBzdHJ0b3VsKGJ1ZiwgJmVuZCwgMCk7DQorCWlmICgo YnVmWzBdID09ICdcMCcpIHx8IChlbmQgPT0gTlVMTCkgfHwgKCplbmQgIT0gJ1xuJykpIHsNCisJ CWZjbG9zZShmKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKwlmY2xvc2UoZik7DQorCXJldHVybiAw Ow0KK30NCisNCisvKiogSU8gcmVzb3VyY2UgdHlwZTogKi8NCisjZGVmaW5lIElPUkVTT1VSQ0Vf SU8gICAgICAgICAweDAwMDAwMTAwDQorI2RlZmluZSBJT1JFU09VUkNFX01FTSAgICAgICAgMHgw MDAwMDIwMA0KKw0KKy8qIHBhcnNlIG9uZSBsaW5lIG9mIHRoZSAicmVzb3VyY2UiIHN5c2ZzIGZp bGUgKG5vdGUgdGhhdCB0aGUgJ2xpbmUnDQorICogc3RyaW5nIGlzIG1vZGlmaWVkKQ0KKyAqLw0K K3N0YXRpYyBpbnQNCitjY3BfcGNpX3BhcnNlX29uZV9zeXNmc19yZXNvdXJjZShjaGFyICpsaW5l LCBzaXplX3QgbGVuLCB1aW50NjRfdCAqcGh5c19hZGRyLA0KKwkJCQkgdWludDY0X3QgKmVuZF9h ZGRyLCB1aW50NjRfdCAqZmxhZ3MpDQorew0KKwl1bmlvbiBwY2lfcmVzb3VyY2VfaW5mbyB7DQor CQlzdHJ1Y3Qgew0KKwkJCWNoYXIgKnBoeXNfYWRkcjsNCisJCQljaGFyICplbmRfYWRkcjsNCisJ CQljaGFyICpmbGFnczsNCisJCX07DQorCQljaGFyICpwdHJzW1BDSV9SRVNPVVJDRV9GTVRfTlZB TF07DQorCX0gcmVzX2luZm87DQorDQorCWlmIChydGVfc3Ryc3BsaXQobGluZSwgbGVuLCByZXNf aW5mby5wdHJzLCAzLCAnICcpICE9IDMpDQorCQlyZXR1cm4gLTE7DQorCWVycm5vID0gMDsNCisJ KnBoeXNfYWRkciA9IHN0cnRvdWxsKHJlc19pbmZvLnBoeXNfYWRkciwgTlVMTCwgMTYpOw0KKwkq ZW5kX2FkZHIgPSBzdHJ0b3VsbChyZXNfaW5mby5lbmRfYWRkciwgTlVMTCwgMTYpOw0KKwkqZmxh Z3MgPSBzdHJ0b3VsbChyZXNfaW5mby5mbGFncywgTlVMTCwgMTYpOw0KKwlpZiAoZXJybm8gIT0g MCkNCisJCXJldHVybiAtMTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHBhcnNlIHRoZSAi cmVzb3VyY2UiIHN5c2ZzIGZpbGUgKi8NCitpbnQNCitjY3BfcGNpX3BhcnNlX3N5c2ZzX3Jlc291 cmNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKmRldikNCit7 DQorCUZJTEUgKmZwOw0KKwljaGFyIGJ1ZltCVUZTSVpdOw0KKwlpbnQgaTsNCisJdWludDY0X3Qg cGh5c19hZGRyLCBlbmRfYWRkciwgZmxhZ3M7DQorDQorCWZwID0gZm9wZW4oZmlsZW5hbWUsICJy Iik7DQorCWlmIChmcCA9PSBOVUxMKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgUENJX01BWF9SRVNPVVJDRTsgaSsrKSB7DQorCQlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVm KSwgZnApID09IE5VTEwpDQorCQkJZ290byBlcnJvcjsNCisJCWlmIChjY3BfcGNpX3BhcnNlX29u ZV9zeXNmc19yZXNvdXJjZShidWYsIHNpemVvZihidWYpLA0KKwkJCQkmcGh5c19hZGRyLCAmZW5k X2FkZHIsICZmbGFncykgPCAwKQ0KKwkJCWdvdG8gZXJyb3I7DQorDQorCQlpZiAoZmxhZ3MgJiBJ T1JFU09VUkNFX01FTSkgew0KKwkJCWRldi0+bWVtX3Jlc291cmNlW2ldLnBoeXNfYWRkciA9IHBo eXNfYWRkcjsNCisJCQlkZXYtPm1lbV9yZXNvdXJjZVtpXS5sZW4gPSBlbmRfYWRkciAtIHBoeXNf YWRkciArIDE7DQorCQkJLyogbm90IG1hcHBlZCBmb3Igbm93ICovDQorCQkJZGV2LT5tZW1fcmVz b3VyY2VbaV0uYWRkciA9IE5VTEw7DQorCQl9DQorCX0NCisJZmNsb3NlKGZwKTsNCisJcmV0dXJu IDA7DQorDQorZXJyb3I6DQorCWZjbG9zZShmcCk7DQorCXJldHVybiAtMTsNCit9DQorDQoraW50 DQorY2NwX2ZpbmRfdWlvX2Rldm5hbWUoY29uc3QgY2hhciAqZGlybmFtZSkNCit7DQorDQorCURJ UiAqZGlyOw0KKwlzdHJ1Y3QgZGlyZW50ICplOw0KKwljaGFyIGRpcm5hbWVfdWlvW1BBVEhfTUFY XTsNCisJdW5zaWduZWQgaW50IHVpb19udW07DQorCWludCByZXQgPSAtMTsNCisNCisJLyogZGVw ZW5kaW5nIG9uIGtlcm5lbCB2ZXJzaW9uLCB1aW8gY2FuIGJlIGxvY2F0ZWQgaW4gdWlvL3Vpb1gN CisJICogb3IgdWlvOnVpb1gNCisJICovDQorCXNucHJpbnRmKGRpcm5hbWVfdWlvLCBzaXplb2Yo ZGlybmFtZV91aW8pLCAiJXMvdWlvIiwgZGlybmFtZSk7DQorCWRpciA9IG9wZW5kaXIoZGlybmFt ZV91aW8pOw0KKwlpZiAoZGlyID09IE5VTEwpIHsNCisJLyogcmV0cnkgd2l0aCB0aGUgcGFyZW50 IGRpcmVjdG9yeSBtaWdodCBiZSBkaWZmZXJlbnQga2VybmVsIHZlcnNpb24qLw0KKwkJZGlyID0g b3BlbmRpcihkaXJuYW1lKTsNCisJCWlmIChkaXIgPT0gTlVMTCkNCisJCQlyZXR1cm4gLTE7DQor CX0NCisNCisJLyogdGFrZSB0aGUgZmlyc3QgZmlsZSBzdGFydGluZyB3aXRoICJ1aW8iICovDQor CXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgew0KKwkJLyogZm9ybWF0IGNvdWxk IGJlIHVpbyVkIC4uLiovDQorCQlpbnQgc2hvcnRwcmVmaXhfbGVuID0gc2l6ZW9mKCJ1aW8iKSAt IDE7DQorCQkvKiAuLi4gb3IgdWlvOnVpbyVkICovDQorCQlpbnQgbG9uZ3ByZWZpeF9sZW4gPSBz aXplb2YoInVpbzp1aW8iKSAtIDE7DQorCQljaGFyICplbmRwdHI7DQorDQorCQlpZiAoc3RybmNt cChlLT5kX25hbWUsICJ1aW8iLCAzKSAhPSAwKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJLyogZmly c3QgdHJ5IHVpbyVkICovDQorCQllcnJubyA9IDA7DQorCQl1aW9fbnVtID0gc3RydG91bGwoZS0+ ZF9uYW1lICsgc2hvcnRwcmVmaXhfbGVuLCAmZW5kcHRyLCAxMCk7DQorCQlpZiAoZXJybm8gPT0g MCAmJiBlbmRwdHIgIT0gKGUtPmRfbmFtZSArIHNob3J0cHJlZml4X2xlbikpIHsNCisJCQlyZXQg PSB1aW9fbnVtOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJLyogdGhlbiB0cnkgdWlvOnVpbyVk ICovDQorCQllcnJubyA9IDA7DQorCQl1aW9fbnVtID0gc3RydG91bGwoZS0+ZF9uYW1lICsgbG9u Z3ByZWZpeF9sZW4sICZlbmRwdHIsIDEwKTsNCisJCWlmIChlcnJubyA9PSAwICYmIGVuZHB0ciAh PSAoZS0+ZF9uYW1lICsgbG9uZ3ByZWZpeF9sZW4pKSB7DQorCQkJcmV0ID0gdWlvX251bTsNCisJ CQlicmVhazsNCisJCX0NCisJfQ0KKwljbG9zZWRpcihkaXIpOw0KKwlyZXR1cm4gcmV0Ow0KKw0K Kw0KK30NCisNCisjZGVmaW5lIFVJT19ORVdJRCAiL3N5cy9idXMvcGNpL2RyaXZlcnMvJXMvbmV3 X2lkIg0KKyNkZWZpbmUgVUlPX0JJTkQgICIvc3lzL2J1cy9wY2kvZHJpdmVycy8lcy9iaW5kIg0K Kw0KK2ludA0KK2NjcF9iaW5kX3VpbyhpbnQgaWR4LCBjb25zdCBjaGFyICpkaXJuYW1lLCBzdHJ1 Y3QgcnRlX3BjaV9pZCAqaWQpDQorew0KKwlGSUxFICpmcDsNCisJaW50IGNudDsNCisJY2hhciBw YXRoW1BBVEhfTUFYXTsNCisJY2hhciAqbmFtZSA9IE5VTEw7DQorCWNoYXIgYnVmW0JVRlNJWl07 DQorCWNoYXIgZHJpdmVyX25hbWVbUEFUSF9NQVhdOw0KKwljaGFyIGZpbGVuYW1lW1BBVEhfTUFY XTsNCisNCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9kcml2ZXIi LCBkaXJuYW1lKTsNCisJY250ID0gcmVhZGxpbmsoZmlsZW5hbWUsIHBhdGgsIFBBVEhfTUFYKTsN CisJaWYgKGNudCA+PSBQQVRIX01BWCkNCisJCXJldHVybiAtMTsNCisJaWYgKGNudCA+PSAwKSB7 DQorCQlwYXRoW2NudF0gPSAnXDAnOw0KKwkJbmFtZSA9IHN0cnJjaHIocGF0aCwgJy8nKTsNCisJ CWlmIChuYW1lKSB7DQorCQkJc3RybmNweShkcml2ZXJfbmFtZSwgbmFtZSArIDEsIHN0cmxlbihu YW1lICsgMSkgKyAxKTsNCisJCQlpZiAoIXN0cmNtcChkcml2ZXJfbmFtZSwgdWlvX21vZHVsZV9u YW1lc1swXSkgfHwNCisJCQkgICAgIXN0cmNtcChkcml2ZXJfbmFtZSwgdWlvX21vZHVsZV9uYW1l c1sxXSkpDQorCQkJCXJldHVybiAwOyAvKiBBbHJlYWR5IGJpbmRlZCAqLw0KKwkJCXNucHJpbnRm KGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvZHJpdmVyL3VuYmluZCIsDQorCQkJCSBk aXJuYW1lKTsNCisJCQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOw0KKwkJCWlmIChmcCAhPSBO VUxMKSB7DQorCQkJCW5hbWUgPSBzdHJyY2hyKGRpcm5hbWUsICcvJyk7DQorCQkJCW5hbWUgKz0g MTsNCisJCQkJaWYgKGZ3cml0ZShuYW1lLCBzdHJsZW4obmFtZSksIDEsIGZwKSA9PSAwKSB7DQor CQkJCQlmY2xvc2UoZnApOw0KKwkJCQkJcmV0dXJuIC0xOyAvKiBGYWlsZWQgdG8gdW5iaW5kICov DQorCQkJCX0NCisJCQkJZmNsb3NlKGZwKTsNCisJCQl9DQorCQl9DQorCX0NCisJc25wcmludGYo ZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksIFVJT19ORVdJRCwgdWlvX21vZHVsZV9uYW1lc1tp ZHhdKTsNCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV4ICV4IiwgaWQtPnZlbmRvcl9p ZCwgaWQtPmRldmljZV9pZCk7DQorCWZwID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7DQorCWlmIChm cCAhPSBOVUxMKSB7DQorCQlpZiAoZndyaXRlKGJ1Ziwgc3RybGVuKGJ1ZiksIDEsIGZwKSA9PSAw KSB7DQorCQkJZmNsb3NlKGZwKTsNCisJCQlyZXR1cm4gLTE7IC8qIEZhaWxlZCB0byBiaW5kICov DQorCQl9DQorCQlmY2xvc2UoZnApOw0KKwl9IGVsc2UNCisJCXJldHVybiAtMTsgLyogRmFpbGVk IHRvIGJpbmQgKi8NCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksIFVJT19C SU5ELCB1aW9fbW9kdWxlX25hbWVzW2lkeF0pOw0KKwluYW1lID0gc3RycmNocihkaXJuYW1lLCAn LycpOw0KKwluYW1lICs9IDE7DQorCWZwID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7DQorCWlmIChm cCAhPSBOVUxMKSB7DQorCQlpZiAoZndyaXRlKG5hbWUsIHN0cmxlbihuYW1lKSwgMSwgZnApID09 IDApIHsNCisJCQlmY2xvc2UoZnApOw0KKwkJCXJldHVybiAtMTsgLyogRmFpbGVkIHRvIGJpbmQg Ki8NCisJCX0NCisJCWZjbG9zZShmcCk7DQorCQlyZXR1cm4gMDsgLyogQmluZCBzdWNjZXNzKi8N CisJfQ0KKwlyZXR1cm4gLTE7IC8qIEZhaWxlZCB0byBiaW5kICovDQorfQ0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfcGNpLmggYi9kcml2ZXJzL2NyeXB0by9jY3AvY2NwX3Bj aS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZjE4NzE0MQ0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvZHJpdmVycy9jcnlwdG8vY2NwL2NjcF9wY2kuaA0KQEAgLTAsMCArMSw1 OCBAQA0KKy8qLQ0KKyAqICAgQlNEIExJQ0VOU0UNCisgKg0KKyAqICAgQ29weXJpZ2h0KGMpIDIw MTcgQWR2YW5jZSBNaWNybyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoN CisgKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dA0KKyAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogICBhcmUgbWV0Og0KKyAqDQor ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQNCisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAg ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4NCisgKiAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogICAgICAgZGlzdHJpYnV0aW9uLg0KKyAqICAg ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQWR2YW5jZSBNaWNybyBEZXZpY2VzLCBJbmMgbm9yIHRo ZSBuYW1lcw0KKyAqICAgICAgIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQorICogICAgICAgcGVybWlzc2lv bi4NCisgKg0KKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiAgIExJTUlURUQg VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUg0KKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqICAgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VA0KKyAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiAgIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQNCisgKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZu ZGVmIF9DQ1BfUENJX0hfDQorI2RlZmluZSBfQ0NQX1BDSV9IXw0KKw0KKyNpbmNsdWRlIDxzdGRp bnQuaD4NCisNCisjaW5jbHVkZSA8cnRlX3BjaS5oPg0KKw0KKyNkZWZpbmUgU1lTRlNfUENJX0RF VklDRVMgIi9zeXMvYnVzL3BjaS9kZXZpY2VzIg0KKyNkZWZpbmUgUFJPQ19NT0RVTEVTICIvcHJv Yy9tb2R1bGVzIg0KKw0KK2ludCBjY3BfY2hlY2tfcGNpX3Vpb19tb2R1bGUodm9pZCk7DQorDQor aW50IGNjcF9wYXJzZV9wY2lfYWRkcl9mb3JtYXQoY29uc3QgY2hhciAqYnVmLCBpbnQgYnVmc2l6 ZSwgdWludDE2X3QgKmRvbWFpbiwNCisJCQkgICAgICB1aW50OF90ICpidXMsIHVpbnQ4X3QgKmRl dmlkLCB1aW50OF90ICpmdW5jdGlvbik7DQorDQoraW50IGNjcF9wY2lfcGFyc2Vfc3lzZnNfdmFs dWUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGxvbmcgKnZhbCk7DQorDQoraW50IGNj cF9wY2lfcGFyc2Vfc3lzZnNfcmVzb3VyY2UoY29uc3QgY2hhciAqZmlsZW5hbWUsDQorCQkJCSBz dHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKmRldik7DQorDQoraW50IGNjcF9maW5kX3Vpb19kZXZuYW1l KGNvbnN0IGNoYXIgKmRpcm5hbWUpOw0KKw0KK2ludCBjY3BfYmluZF91aW8oaW50IGlkeCwgY29u c3QgY2hhciAqZGlybmFtZSwgc3RydWN0IHJ0ZV9wY2lfaWQgKmlkKTsNCisNCisjZW5kaWYgLyog X0NDUF9QQ0lfSF8gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3AvY2NwX3BtZF9v cHMuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfcG1kX29wcy5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMC4uNGI2NGFhZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9jcnlwdG8vY2NwL2NjcF9wbWRfb3BzLmMNCkBAIC0wLDAgKzEsODYwIEBADQorLyotDQorICog ICBCU0QgTElDRU5TRQ0KKyAqDQorICogICBDb3B5cmlnaHQoYykgMjAxNyBBZHZhbmNlIE1pY3Jv IERldmljZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqICAgUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 DQorICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMNCisgKiAgIGFyZSBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0K KyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyAq ICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUNCisgKiAgICAgICBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUg bmFtZSBvZiBBZHZhbmNlIE1pY3JvIERldmljZXMsIEluYyBub3IgdGhlIG5hbWVzDQorICogICAg ICAgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMNCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljIHByaW9yIHdyaXR0ZW4NCisgKiAgICAgICBwZXJtaXNzaW9uLg0KKyAqDQorICogICBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O VFJJQlVUT1JTDQorICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogICBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP UFlSSUdIVA0KKyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogICBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwNCisgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqICAgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFDQorICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4N CisNCisjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KKyNpbmNsdWRlIDxydGVfY3J5cHRvZGV2X3Bt ZC5oPg0KKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQorDQorI2luY2x1ZGUgPGNjcF9wbWRfcHJp dmF0ZS5oPg0KKyNpbmNsdWRlIDxjY3BfZGV2Lmg+DQorI2luY2x1ZGUgPGNjcF9jcnlwdG8uaD4N CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZV9jcnlwdG9kZXZfY2FwYWJpbGl0aWVzIGNjcF9w bWRfY2FwYWJpbGl0aWVzW10gPSB7DQorI2lmZGVmIFJURV9MSUJSVEVfUE1EX0NDUF9DUFVfQVVU SA0KKwl7CS8qIE1ENSBITUFDICovDQorCQkub3AgPSBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVU UklDLA0KKwkJey5zeW0gPSB7DQorCQkJLnhmb3JtX3R5cGUgPSBSVEVfQ1JZUFRPX1NZTV9YRk9S TV9BVVRILA0KKwkJCXsuYXV0aCA9IHsNCisJCQkJIC5hbGdvID0gUlRFX0NSWVBUT19BVVRIX01E NV9ITUFDLA0KKwkJCQkgLmJsb2NrX3NpemUgPSA2NCwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJ CQkJCSAubWluID0gMSwNCisJCQkJCSAubWF4ID0gNjQsDQorCQkJCQkgLmluY3JlbWVudCA9IDEN CisJCQkJIH0sDQorCQkJCSAuZGlnZXN0X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDE2LA0KKwkJ CQkJIC5tYXggPSAxNiwNCisJCQkJCSAuaW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5h YWRfc2l6ZSA9IHsgMCB9DQorCQkJfSwgfQ0KKwkJfSwgfQ0KKwl9LA0KKyNlbmRpZg0KKwl7CS8q IFNIQTEgKi8NCisJCS5vcCA9IFJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQorCQl7LnN5 bSA9IHsNCisJCQkueGZvcm1fdHlwZSA9IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgsDQorCQkJ ey5hdXRoID0gew0KKwkJCQkgLmFsZ28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hBMSwNCisJCQkJIC5i bG9ja19zaXplID0gNjQsDQorCQkJCSAua2V5X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDAsDQor CQkJCQkgLm1heCA9IDAsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJCSAu ZGlnZXN0X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDIwLA0KKwkJCQkJIC5tYXggPSAyMCwNCisJ CQkJCSAuaW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5hYWRfc2l6ZSA9IHsgMCB9DQor CQkJIH0sIH0NCisJCX0sIH0NCisJfSwNCisJewkvKiBTSEExIEhNQUMgKi8NCisJCS5vcCA9IFJU RV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQorCQl7LnN5bSA9IHsNCisJCQkueGZvcm1fdHlw ZSA9IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgsDQorCQkJey5hdXRoID0gew0KKwkJCQkgLmFs Z28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hBMV9ITUFDLA0KKwkJCQkgLmJsb2NrX3NpemUgPSA2NCwN CisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gMSwNCisJCQkJCSAubWF4ID0gNjQs DQorCQkJCQkgLmluY3JlbWVudCA9IDENCisJCQkJIH0sDQorCQkJCSAuZGlnZXN0X3NpemUgPSB7 DQorCQkJCQkgLm1pbiA9IDIwLA0KKwkJCQkJIC5tYXggPSAyMCwNCisJCQkJCSAuaW5jcmVtZW50 ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5hYWRfc2l6ZSA9IHsgMCB9DQorCQkJIH0sIH0NCisJCX0s IH0NCisJfSwNCisJewkvKiBTSEEyMjQgKi8NCisJCS5vcCA9IFJURV9DUllQVE9fT1BfVFlQRV9T WU1NRVRSSUMsDQorCQl7LnN5bSA9IHsNCisJCQkueGZvcm1fdHlwZSA9IFJURV9DUllQVE9fU1lN X1hGT1JNX0FVVEgsDQorCQkJey5hdXRoID0gew0KKwkJCQkgLmFsZ28gPSBSVEVfQ1JZUFRPX0FV VEhfU0hBMjI0LA0KKwkJCQkgLmJsb2NrX3NpemUgPSA2NCwNCisJCQkJIC5rZXlfc2l6ZSA9IHsN CisJCQkJCSAubWluID0gMCwNCisJCQkJCSAubWF4ID0gMCwNCisJCQkJCSAuaW5jcmVtZW50ID0g MA0KKwkJCQkgfSwNCisJCQkJIC5kaWdlc3Rfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gMjgsDQor CQkJCQkgLm1heCA9IDI4LA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkg LmFhZF9zaXplID0geyAwIH0NCisJCQkgfSwgfQ0KKwkJfSwgfQ0KKwl9LA0KKwl7CS8qIFNIQTIy NCBITUFDICovDQorCQkub3AgPSBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5z eW0gPSB7DQorCQkJLnhmb3JtX3R5cGUgPSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9BVVRILA0KKwkJ CXsuYXV0aCA9IHsNCisJCQkJIC5hbGdvID0gUlRFX0NSWVBUT19BVVRIX1NIQTIyNF9ITUFDLA0K KwkJCQkgLmJsb2NrX3NpemUgPSA2NCwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJCSAubWlu ID0gMSwNCisJCQkJCSAubWF4ID0gNjQsDQorCQkJCQkgLmluY3JlbWVudCA9IDENCisJCQkJIH0s DQorCQkJCSAuZGlnZXN0X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDI4LA0KKwkJCQkJIC5tYXgg PSAyOCwNCisJCQkJCSAuaW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5hYWRfc2l6ZSA9 IHsgMCB9DQorCQkJIH0sIH0NCisJCX0sIH0NCisJfSwNCisJewkvKiBTSEEzLTIyNCAqLw0KKwkJ Lm9wID0gUlRFX0NSWVBUT19PUF9UWVBFX1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54 Zm9ybV90eXBlID0gUlRFX0NSWVBUT19TWU1fWEZPUk1fQVVUSCwNCisJCQl7LmF1dGggPSB7DQor CQkJCSAuYWxnbyA9IFJURV9DUllQVE9fQVVUSF9TSEEzXzIyNCwNCisJCQkJIC5ibG9ja19zaXpl ID0gMTQ0LA0KKwkJCQkgLmtleV9zaXplID0gew0KKwkJCQkJIC5taW4gPSAwLA0KKwkJCQkJIC5t YXggPSAwLA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9z aXplID0gew0KKwkJCQkJIC5taW4gPSAyOCwNCisJCQkJCSAubWF4ID0gMjgsDQorCQkJCQkgLmlu Y3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJCSAuYWFkX3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9 DQorCQl9LCB9DQorCX0sDQorCXsJLyogU0hBMy0yMjQgIEhNQUMqLw0KKwkJLm9wID0gUlRFX0NS WVBUT19PUF9UWVBFX1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54Zm9ybV90eXBlID0g UlRFX0NSWVBUT19TWU1fWEZPUk1fQVVUSCwNCisJCQl7LmF1dGggPSB7DQorCQkJCSAuYWxnbyA9 IFJURV9DUllQVE9fQVVUSF9TSEEzXzIyNF9ITUFDLA0KKwkJCQkgLmJsb2NrX3NpemUgPSAxNDQs DQorCQkJCSAua2V5X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDEsDQorCQkJCQkgLm1heCA9IDE0 NCwNCisJCQkJCSAuaW5jcmVtZW50ID0gMQ0KKwkJCQkgfSwNCisJCQkJIC5kaWdlc3Rfc2l6ZSA9 IHsNCisJCQkJCSAubWluID0gMjgsDQorCQkJCQkgLm1heCA9IDI4LA0KKwkJCQkJIC5pbmNyZW1l bnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmFhZF9zaXplID0geyAwIH0NCisJCQkgfSwgfQ0KKwkJ fSwgfQ0KKwl9LA0KKwl7CS8qIFNIQTI1NiAqLw0KKwkJLm9wID0gUlRFX0NSWVBUT19PUF9UWVBF X1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54Zm9ybV90eXBlID0gUlRFX0NSWVBUT19T WU1fWEZPUk1fQVVUSCwNCisJCQl7LmF1dGggPSB7DQorCQkJCSAuYWxnbyA9IFJURV9DUllQVE9f QVVUSF9TSEEyNTYsDQorCQkJCSAuYmxvY2tfc2l6ZSA9IDY0LA0KKwkJCQkgLmtleV9zaXplID0g ew0KKwkJCQkJIC5taW4gPSAwLA0KKwkJCQkJIC5tYXggPSAwLA0KKwkJCQkJIC5pbmNyZW1lbnQg PSAwDQorCQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9zaXplID0gew0KKwkJCQkJIC5taW4gPSAzMiwN CisJCQkJCSAubWF4ID0gMzIsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJ CSAuYWFkX3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9DQorCQl9LCB9DQorCX0sDQorCXsJLyogU0hB MjU2IEhNQUMgKi8NCisJCS5vcCA9IFJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQorCQl7 LnN5bSA9IHsNCisJCQkueGZvcm1fdHlwZSA9IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgsDQor CQkJey5hdXRoID0gew0KKwkJCQkgLmFsZ28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hBMjU2X0hNQUMs DQorCQkJCSAuYmxvY2tfc2l6ZSA9IDY0LA0KKwkJCQkgLmtleV9zaXplID0gew0KKwkJCQkJIC5t aW4gPSAxLA0KKwkJCQkJIC5tYXggPSA2NCwNCisJCQkJCSAuaW5jcmVtZW50ID0gMQ0KKwkJCQkg fSwNCisJCQkJIC5kaWdlc3Rfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gMzIsDQorCQkJCQkgLm1h eCA9IDMyLA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmFhZF9zaXpl ID0geyAwIH0NCisJCQkgfSwgfQ0KKwkJfSwgfQ0KKwl9LA0KKwl7CS8qIFNIQTMtMjU2ICovDQor CQkub3AgPSBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5zeW0gPSB7DQorCQkJ Lnhmb3JtX3R5cGUgPSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9BVVRILA0KKwkJCXsuYXV0aCA9IHsN CisJCQkJIC5hbGdvID0gUlRFX0NSWVBUT19BVVRIX1NIQTNfMjU2LA0KKwkJCQkgLmJsb2NrX3Np emUgPSAxMzYsDQorCQkJCSAua2V5X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDAsDQorCQkJCQkg Lm1heCA9IDAsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJCSAuZGlnZXN0 X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDMyLA0KKwkJCQkJIC5tYXggPSAzMiwNCisJCQkJCSAu aW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5hYWRfc2l6ZSA9IHsgMCB9DQorCQkJIH0s IH0NCisJCX0sIH0NCisJfSwNCisJewkvKiBTSEEzLTI1Ni1ITUFDICovDQorCQkub3AgPSBSVEVf Q1JZUFRPX09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5zeW0gPSB7DQorCQkJLnhmb3JtX3R5cGUg PSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9BVVRILA0KKwkJCXsuYXV0aCA9IHsNCisJCQkJIC5hbGdv ID0gUlRFX0NSWVBUT19BVVRIX1NIQTNfMjU2X0hNQUMsDQorCQkJCSAuYmxvY2tfc2l6ZSA9IDEz NiwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gMSwNCisJCQkJCSAubWF4ID0g MTM2LA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAxDQorCQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9zaXpl ID0gew0KKwkJCQkJIC5taW4gPSAzMiwNCisJCQkJCSAubWF4ID0gMzIsDQorCQkJCQkgLmluY3Jl bWVudCA9IDANCisJCQkJIH0sDQorCQkJCSAuYWFkX3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9DQor CQl9LCB9DQorCX0sDQorCXsJLyogU0hBMzg0ICovDQorCQkub3AgPSBSVEVfQ1JZUFRPX09QX1RZ UEVfU1lNTUVUUklDLA0KKwkJey5zeW0gPSB7DQorCQkJLnhmb3JtX3R5cGUgPSBSVEVfQ1JZUFRP X1NZTV9YRk9STV9BVVRILA0KKwkJCXsuYXV0aCA9IHsNCisJCQkJIC5hbGdvID0gUlRFX0NSWVBU T19BVVRIX1NIQTM4NCwNCisJCQkJIC5ibG9ja19zaXplID0gMTI4LA0KKwkJCQkgLmtleV9zaXpl ID0gew0KKwkJCQkJIC5taW4gPSAwLA0KKwkJCQkJIC5tYXggPSAwLA0KKwkJCQkJIC5pbmNyZW1l bnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9zaXplID0gew0KKwkJCQkJIC5taW4gPSA0 OCwNCisJCQkJCSAubWF4ID0gNDgsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJIH0sDQor CQkJCSAuYWFkX3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9DQorCQl9LCB9DQorCX0sDQorCXsJLyog U0hBMzg0IEhNQUMgKi8NCisJCS5vcCA9IFJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQor CQl7LnN5bSA9IHsNCisJCQkueGZvcm1fdHlwZSA9IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgs DQorCQkJey5hdXRoID0gew0KKwkJCQkgLmFsZ28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hBMzg0X0hN QUMsDQorCQkJCSAuYmxvY2tfc2l6ZSA9IDEyOCwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJ CSAubWluID0gMSwNCisJCQkJCSAubWF4ID0gMTI4LA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAxDQor CQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9zaXplID0gew0KKwkJCQkJIC5taW4gPSA0OCwNCisJCQkJ CSAubWF4ID0gNDgsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJCSAuYWFk X3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9DQorCQl9LCB9DQorCX0sDQorCXsJLyogU0hBMy0zODQg Ki8NCisJCS5vcCA9IFJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQorCQl7LnN5bSA9IHsN CisJCQkueGZvcm1fdHlwZSA9IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgsDQorCQkJey5hdXRo ID0gew0KKwkJCQkgLmFsZ28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hBM18zODQsDQorCQkJCSAuYmxv Y2tfc2l6ZSA9IDEwNCwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gMCwNCisJ CQkJCSAubWF4ID0gMCwNCisJCQkJCSAuaW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5k aWdlc3Rfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gNDgsDQorCQkJCQkgLm1heCA9IDQ4LA0KKwkJ CQkJIC5pbmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmFhZF9zaXplID0geyAwIH0NCisJ CQkgfSwgfQ0KKwkJfSwgfQ0KKwl9LA0KKwl7CS8qIFNIQTMtMzg0LUhNQUMgKi8NCisJCS5vcCA9 IFJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQorCQl7LnN5bSA9IHsNCisJCQkueGZvcm1f dHlwZSA9IFJURV9DUllQVE9fU1lNX1hGT1JNX0FVVEgsDQorCQkJey5hdXRoID0gew0KKwkJCQkg LmFsZ28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hBM18zODRfSE1BQywNCisJCQkJIC5ibG9ja19zaXpl ID0gMTA0LA0KKwkJCQkgLmtleV9zaXplID0gew0KKwkJCQkJIC5taW4gPSAxLA0KKwkJCQkJIC5t YXggPSAxMDQsDQorCQkJCQkgLmluY3JlbWVudCA9IDENCisJCQkJIH0sDQorCQkJCSAuZGlnZXN0 X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDQ4LA0KKwkJCQkJIC5tYXggPSA0OCwNCisJCQkJCSAu aW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJCQkJIC5hYWRfc2l6ZSA9IHsgMCB9DQorCQkJIH0s IH0NCisJCX0sIH0NCisJfSwNCisJewkvKiBTSEE1MTIgICovDQorCQkub3AgPSBSVEVfQ1JZUFRP X09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5zeW0gPSB7DQorCQkJLnhmb3JtX3R5cGUgPSBSVEVf Q1JZUFRPX1NZTV9YRk9STV9BVVRILA0KKwkJCXsuYXV0aCA9IHsNCisJCQkJIC5hbGdvID0gUlRF X0NSWVBUT19BVVRIX1NIQTUxMiwNCisJCQkJIC5ibG9ja19zaXplID0gMTI4LA0KKwkJCQkgLmtl eV9zaXplID0gew0KKwkJCQkJIC5taW4gPSAwLA0KKwkJCQkJIC5tYXggPSAwLA0KKwkJCQkJIC5p bmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9zaXplID0gew0KKwkJCQkJIC5t aW4gPSA2NCwNCisJCQkJCSAubWF4ID0gNjQsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJ IH0sDQorCQkJCSAuYWFkX3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9DQorCQl9LCB9DQorCX0sDQor CXsJLyogU0hBNTEyIEhNQUMgKi8NCisJCS5vcCA9IFJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRS SUMsDQorCQl7LnN5bSA9IHsNCisJCQkueGZvcm1fdHlwZSA9IFJURV9DUllQVE9fU1lNX1hGT1JN X0FVVEgsDQorCQkJey5hdXRoID0gew0KKwkJCQkgLmFsZ28gPSBSVEVfQ1JZUFRPX0FVVEhfU0hB NTEyX0hNQUMsDQorCQkJCSAuYmxvY2tfc2l6ZSA9IDEyOCwNCisJCQkJIC5rZXlfc2l6ZSA9IHsN CisJCQkJCSAubWluID0gMSwNCisJCQkJCSAubWF4ID0gMTI4LA0KKwkJCQkJIC5pbmNyZW1lbnQg PSAxDQorCQkJCSB9LA0KKwkJCQkgLmRpZ2VzdF9zaXplID0gew0KKwkJCQkJIC5taW4gPSA2NCwN CisJCQkJCSAubWF4ID0gNjQsDQorCQkJCQkgLmluY3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJ CSAuYWFkX3NpemUgPSB7IDAgfQ0KKwkJCSB9LCB9DQorCQl9LCB9DQorCX0sDQorCXsJLyogU0hB My01MTIgICovDQorCQkub3AgPSBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5z eW0gPSB7DQorCQkJLnhmb3JtX3R5cGUgPSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9BVVRILA0KKwkJ CXsuYXV0aCA9IHsNCisJCQkJIC5hbGdvID0gUlRFX0NSWVBUT19BVVRIX1NIQTNfNTEyLA0KKwkJ CQkgLmJsb2NrX3NpemUgPSA3MiwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJCSAubWluID0g MCwNCisJCQkJCSAubWF4ID0gMCwNCisJCQkJCSAuaW5jcmVtZW50ID0gMA0KKwkJCQkgfSwNCisJ CQkJIC5kaWdlc3Rfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gNjQsDQorCQkJCQkgLm1heCA9IDY0 LA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmFhZF9zaXplID0geyAw IH0NCisJCQkgfSwgfQ0KKwkJfSwgfQ0KKwl9LA0KKwl7CS8qIFNIQTMtNTEyLUhNQUMgICovDQor CQkub3AgPSBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5zeW0gPSB7DQorCQkJ Lnhmb3JtX3R5cGUgPSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9BVVRILA0KKwkJCXsuYXV0aCA9IHsN CisJCQkJIC5hbGdvID0gUlRFX0NSWVBUT19BVVRIX1NIQTNfNTEyX0hNQUMsDQorCQkJCSAuYmxv Y2tfc2l6ZSA9IDcyLA0KKwkJCQkgLmtleV9zaXplID0gew0KKwkJCQkJIC5taW4gPSAxLA0KKwkJ CQkJIC5tYXggPSA3MiwNCisJCQkJCSAuaW5jcmVtZW50ID0gMQ0KKwkJCQkgfSwNCisJCQkJIC5k aWdlc3Rfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gNjQsDQorCQkJCQkgLm1heCA9IDY0LA0KKwkJ CQkJIC5pbmNyZW1lbnQgPSAwDQorCQkJCSB9LA0KKwkJCQkgLmFhZF9zaXplID0geyAwIH0NCisJ CQl9LCB9DQorCQl9LCB9DQorCX0sDQorCXsJLypBRVMtQ01BQyAqLw0KKwkJLm9wID0gUlRFX0NS WVBUT19PUF9UWVBFX1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54Zm9ybV90eXBlID0g UlRFX0NSWVBUT19TWU1fWEZPUk1fQVVUSCwNCisJCQl7LmF1dGggPSB7DQorCQkJCSAuYWxnbyA9 IFJURV9DUllQVE9fQVVUSF9BRVNfQ01BQywNCisJCQkJIC5ibG9ja19zaXplID0gMTYsDQorCQkJ CSAua2V5X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDE2LA0KKwkJCQkJIC5tYXggPSAzMiwNCisJ CQkJCSAuaW5jcmVtZW50ID0gOA0KKwkJCQkgfSwNCisJCQkJIC5kaWdlc3Rfc2l6ZSA9IHsNCisJ CQkJCSAubWluID0gMTYsDQorCQkJCQkgLm1heCA9IDE2LA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAw DQorCQkJCSB9LA0KKwkJCQkgLmFhZF9zaXplID0geyAwIH0NCisJCQl9LCB9DQorCQl9LCB9DQor CX0sDQorCXsgICAgICAgLyogQUVTIEVDQiAqLw0KKwkJLm9wID0gUlRFX0NSWVBUT19PUF9UWVBF X1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54Zm9ybV90eXBlID0gUlRFX0NSWVBUT19T WU1fWEZPUk1fQ0lQSEVSLA0KKwkJCXsuY2lwaGVyID0gew0KKwkJCQkuYWxnbyA9IFJURV9DUllQ VE9fQ0lQSEVSX0FFU19FQ0IsDQorCQkJCS5ibG9ja19zaXplID0gMTYsDQorCQkJCS5rZXlfc2l6 ZSA9IHsNCisJCQkJICAgLm1pbiA9IDE2LA0KKwkJCQkgICAubWF4ID0gMzIsDQorCQkJCSAgIC5p bmNyZW1lbnQgPSA4DQorCQkJCX0sDQorCQkJCS5pdl9zaXplID0gew0KKwkJCQkgICAubWluID0g MCwNCisJCQkJICAgLm1heCA9IDAsDQorCQkJCSAgIC5pbmNyZW1lbnQgPSAwDQorCQkJCX0NCisJ CQl9LCB9DQorCQl9LCB9DQorCX0sDQorCXsgICAgICAgLyogQUVTIENCQyAqLw0KKwkJLm9wID0g UlRFX0NSWVBUT19PUF9UWVBFX1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54Zm9ybV90 eXBlID0gUlRFX0NSWVBUT19TWU1fWEZPUk1fQ0lQSEVSLA0KKwkJCXsuY2lwaGVyID0gew0KKwkJ CQkuYWxnbyA9IFJURV9DUllQVE9fQ0lQSEVSX0FFU19DQkMsDQorCQkJCS5ibG9ja19zaXplID0g MTYsDQorCQkJCS5rZXlfc2l6ZSA9IHsNCisJCQkJCS5taW4gPSAxNiwNCisJCQkJCS5tYXggPSAz MiwNCisJCQkJCS5pbmNyZW1lbnQgPSA4DQorCQkJCX0sDQorCQkJCS5pdl9zaXplID0gew0KKwkJ CQkJLm1pbiA9IDE2LA0KKwkJCQkJLm1heCA9IDE2LA0KKwkJCQkJLmluY3JlbWVudCA9IDANCisJ CQkJfQ0KKwkJCX0sIH0NCisJCX0sIH0NCisJfSwNCisJewkvKiBBRVMgQ1RSICovDQorCQkub3Ag PSBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVUUklDLA0KKwkJey5zeW0gPSB7DQorCQkJLnhmb3Jt X3R5cGUgPSBSVEVfQ1JZUFRPX1NZTV9YRk9STV9DSVBIRVIsDQorCQkJey5jaXBoZXIgPSB7DQor CQkJCS5hbGdvID0gUlRFX0NSWVBUT19DSVBIRVJfQUVTX0NUUiwNCisJCQkJLmJsb2NrX3NpemUg PSAxNiwNCisJCQkJLmtleV9zaXplID0gew0KKwkJCQkJLm1pbiA9IDIwLA0KKwkJCQkJLm1heCA9 IDM2LA0KKwkJCQkJLmluY3JlbWVudCA9IDgNCisJCQkJfSwNCisJCQkJLml2X3NpemUgPSB7DQor CQkJCQkubWluID0gOCwNCisJCQkJCS5tYXggPSA4LA0KKwkJCQkJLmluY3JlbWVudCA9IDANCisJ CQkJfQ0KKwkJCX0sIH0NCisJCX0sIH0NCisJfSwNCisJewkvKiAzREVTIENCQyAqLw0KKwkJLm9w ID0gUlRFX0NSWVBUT19PUF9UWVBFX1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJCS54Zm9y bV90eXBlID0gUlRFX0NSWVBUT19TWU1fWEZPUk1fQ0lQSEVSLA0KKwkJCXsuY2lwaGVyID0gew0K KwkJCQkuYWxnbyA9IFJURV9DUllQVE9fQ0lQSEVSXzNERVNfQ0JDLA0KKwkJCQkuYmxvY2tfc2l6 ZSA9IDgsDQorCQkJCS5rZXlfc2l6ZSA9IHsNCisJCQkJCS5taW4gPSAxNiwNCisJCQkJCS5tYXgg PSAyNCwNCisJCQkJCS5pbmNyZW1lbnQgPSA4DQorCQkJCX0sDQorCQkJCS5pdl9zaXplID0gew0K KwkJCQkJLm1pbiA9IDgsDQorCQkJCQkubWF4ID0gOCwNCisJCQkJCS5pbmNyZW1lbnQgPSAwDQor CQkJCX0NCisJCQl9LCB9DQorCQl9LCB9DQorCX0sDQorCXsgICAgICAgLyogQUVTIEdDTSAqLw0K KwkJLm9wID0gUlRFX0NSWVBUT19PUF9UWVBFX1NZTU1FVFJJQywNCisJCXsuc3ltID0gew0KKwkJ CS54Zm9ybV90eXBlID0gUlRFX0NSWVBUT19TWU1fWEZPUk1fQUVBRCwNCisJCQl7LmFlYWQgPSB7 DQorCQkJCSAuYWxnbyA9IFJURV9DUllQVE9fQUVBRF9BRVNfR0NNLA0KKwkJCQkgLmJsb2NrX3Np emUgPSAxNiwNCisJCQkJIC5rZXlfc2l6ZSA9IHsNCisJCQkJCSAubWluID0gMTYsDQorCQkJCQkg Lm1heCA9IDMyLA0KKwkJCQkJIC5pbmNyZW1lbnQgPSA4DQorCQkJCSB9LA0KKwkJCQkgLmRpZ2Vz dF9zaXplID0gew0KKwkJCQkJIC5taW4gPSAxNiwNCisJCQkJCSAubWF4ID0gMTYsDQorCQkJCQkg LmluY3JlbWVudCA9IDANCisJCQkJIH0sDQorCQkJCSAuYWFkX3NpemUgPSB7DQorCQkJCQkgLm1p biA9IDAsDQorCQkJCQkgLm1heCA9IDY1NTM1LA0KKwkJCQkJIC5pbmNyZW1lbnQgPSAxDQorCQkJ CSB9LA0KKwkJCQkgLml2X3NpemUgPSB7DQorCQkJCQkgLm1pbiA9IDEyLA0KKwkJCQkJIC5tYXgg PSAxNiwNCisJCQkJCSAuaW5jcmVtZW50ID0gNA0KKwkJCQkgfSwNCisJCQl9LCB9DQorCQl9LCB9 DQorCX0sDQorCVJURV9DUllQVE9ERVZfRU5EX09GX0NBUEFCSUxJVElFU19MSVNUKCkNCit9Ow0K Kw0KK3N0YXRpYyBpbnQNCitjY3BfcG1kX2NvbmZpZyhzdHJ1Y3QgcnRlX2NyeXB0b2RldiAqZGV2 IF9fcnRlX3VudXNlZCwNCisJICAgICAgIHN0cnVjdCBydGVfY3J5cHRvZGV2X2NvbmZpZyAqY29u ZmlnIF9fcnRlX3VudXNlZCkNCit7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50DQor Y2NwX3BtZF9zdGFydChzdHJ1Y3QgcnRlX2NyeXB0b2RldiAqZGV2KQ0KK3sNCisJcmV0dXJuIGNj cF9kZXZfc3RhcnQoZGV2KTsNCit9DQorDQorc3RhdGljIHZvaWQNCitjY3BfcG1kX3N0b3Aoc3Ry dWN0IHJ0ZV9jcnlwdG9kZXYgKmRldiBfX3J0ZV91bnVzZWQpDQorew0KKw0KK30NCisNCitzdGF0 aWMgaW50DQorY2NwX3BtZF9jbG9zZShzdHJ1Y3QgcnRlX2NyeXB0b2RldiAqZGV2IF9fcnRlX3Vu dXNlZCkNCit7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK2NjcF9wbWRfc3Rh dHNfZ2V0KHN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYsDQorCQkgIHN0cnVjdCBydGVfY3J5cHRv ZGV2X3N0YXRzICpzdGF0cykNCit7DQorCWludCBxcF9pZDsNCisNCisJZm9yIChxcF9pZCA9IDA7 IHFwX2lkIDwgZGV2LT5kYXRhLT5uYl9xdWV1ZV9wYWlyczsgcXBfaWQrKykgew0KKwkJc3RydWN0 IGNjcF9xcCAqcXAgPSBkZXYtPmRhdGEtPnF1ZXVlX3BhaXJzW3FwX2lkXTsNCisNCisJCXN0YXRz LT5lbnF1ZXVlZF9jb3VudCArPSBxcC0+cXBfc3RhdHMuZW5xdWV1ZWRfY291bnQ7DQorCQlzdGF0 cy0+ZGVxdWV1ZWRfY291bnQgKz0gcXAtPnFwX3N0YXRzLmRlcXVldWVkX2NvdW50Ow0KKw0KKwkJ c3RhdHMtPmVucXVldWVfZXJyX2NvdW50ICs9IHFwLT5xcF9zdGF0cy5lbnF1ZXVlX2Vycl9jb3Vu dDsNCisJCXN0YXRzLT5kZXF1ZXVlX2Vycl9jb3VudCArPSBxcC0+cXBfc3RhdHMuZGVxdWV1ZV9l cnJfY291bnQ7DQorCX0NCisNCit9DQorDQorc3RhdGljIHZvaWQNCitjY3BfcG1kX3N0YXRzX3Jl c2V0KHN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYpDQorew0KKwlpbnQgcXBfaWQ7DQorDQorCWZv ciAocXBfaWQgPSAwOyBxcF9pZCA8IGRldi0+ZGF0YS0+bmJfcXVldWVfcGFpcnM7IHFwX2lkKysp IHsNCisJCXN0cnVjdCBjY3BfcXAgKnFwID0gZGV2LT5kYXRhLT5xdWV1ZV9wYWlyc1txcF9pZF07 DQorDQorCQltZW1zZXQoJnFwLT5xcF9zdGF0cywgMCwgc2l6ZW9mKHFwLT5xcF9zdGF0cykpOw0K Kwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorY2NwX3BtZF9pbmZvX2dldChzdHJ1Y3QgcnRlX2Ny eXB0b2RldiAqZGV2LA0KKwkJIHN0cnVjdCBydGVfY3J5cHRvZGV2X2luZm8gKmRldl9pbmZvKQ0K K3sNCisJc3RydWN0IGNjcF9wcml2YXRlICppbnRlcm5hbHMgPSBkZXYtPmRhdGEtPmRldl9wcml2 YXRlOw0KKw0KKwlpZiAoZGV2X2luZm8gIT0gTlVMTCkgew0KKwkJZGV2X2luZm8tPmRyaXZlcl9p ZCA9IGRldi0+ZHJpdmVyX2lkOw0KKwkJZGV2X2luZm8tPmZlYXR1cmVfZmxhZ3MgPSBkZXYtPmZl YXR1cmVfZmxhZ3M7DQorCQlkZXZfaW5mby0+Y2FwYWJpbGl0aWVzID0gY2NwX3BtZF9jYXBhYmls aXRpZXM7DQorCQlkZXZfaW5mby0+bWF4X25iX3F1ZXVlX3BhaXJzID0gaW50ZXJuYWxzLT5tYXhf bmJfcXBhaXJzOw0KKwkJZGV2X2luZm8tPnN5bS5tYXhfbmJfc2Vzc2lvbnMgPSBpbnRlcm5hbHMt Pm1heF9uYl9zZXNzaW9uczsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50DQorY2NwX3BtZF9xcF9y ZWxlYXNlKHN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYsIHVpbnQxNl90IHFwX2lkKQ0KK3sNCisJ aWYgKGRldi0+ZGF0YS0+cXVldWVfcGFpcnNbcXBfaWRdICE9IE5VTEwpIHsNCisJCXJ0ZV9mcmVl KGRldi0+ZGF0YS0+cXVldWVfcGFpcnNbcXBfaWRdKTsNCisJCWRldi0+ZGF0YS0+cXVldWVfcGFp cnNbcXBfaWRdID0gTlVMTDsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0K K2NjcF9wbWRfcXBfc2V0X3VuaXF1ZV9uYW1lKHN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYsDQor CQlzdHJ1Y3QgY2NwX3FwICpxcCkNCit7DQorCXVuc2lnbmVkIGludCBuID0gc25wcmludGYocXAt Pm5hbWUsIHNpemVvZihxcC0+bmFtZSksDQorCQkJImNjcF9wbWRfJXVfcXBfJXUiLA0KKwkJCWRl di0+ZGF0YS0+ZGV2X2lkLCBxcC0+aWQpOw0KKw0KKwlpZiAobiA+IHNpemVvZihxcC0+bmFtZSkp DQorCQlyZXR1cm4gLTE7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgc3RydWN0IHJ0 ZV9yaW5nICoNCitjY3BfcG1kX3FwX2NyZWF0ZV9iYXRjaF9pbmZvX3Jpbmcoc3RydWN0IGNjcF9x cCAqcXAsDQorCQkJCSAgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwgaW50IHNvY2tldF9pZCkNCit7 DQorCXN0cnVjdCBydGVfcmluZyAqcjsNCisNCisJciA9IHJ0ZV9yaW5nX2xvb2t1cChxcC0+bmFt ZSk7DQorCWlmIChyKSB7DQorCQlpZiAoci0+c2l6ZSA+PSByaW5nX3NpemUpIHsNCisJCQlDQ1Bf TE9HX0lORk8oDQorCQkJCSJSZXVzaW5nIHJpbmcgJXMgZm9yIHByb2Nlc3NlZCBwYWNrZXRzIiwN CisJCQkJcXAtPm5hbWUpOw0KKwkJCXJldHVybiByOw0KKwkJfQ0KKwkJQ0NQX0xPR19JTkZPKA0K KwkJCSJVbmFibGUgdG8gcmV1c2UgcmluZyAlcyBmb3IgcHJvY2Vzc2VkIHBhY2tldHMiLA0KKwkJ CSBxcC0+bmFtZSk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gcnRlX3Jpbmdf Y3JlYXRlKHFwLT5uYW1lLCByaW5nX3NpemUsIHNvY2tldF9pZCwNCisJCQlSSU5HX0ZfU1BfRU5R IHwgUklOR19GX1NDX0RFUSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcG1kX3FwX3NldHVw KHN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXYsIHVpbnQxNl90IHFwX2lkLA0KKwkJIGNvbnN0IHN0 cnVjdCBydGVfY3J5cHRvZGV2X3FwX2NvbmYgKnFwX2NvbmYsDQorCQkgaW50IHNvY2tldF9pZCwg c3RydWN0IHJ0ZV9tZW1wb29sICpzZXNzaW9uX3Bvb2wpDQorew0KKwlzdHJ1Y3QgY2NwX3ByaXZh dGUgKmludGVybmFscyA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQorCXN0cnVjdCBjY3BfcXAg KnFwOw0KKwlpbnQgcmV0dmFsID0gMDsNCisNCisJaWYgKHFwX2lkID49IGludGVybmFscy0+bWF4 X25iX3FwYWlycykgew0KKwkJQ0NQX0xPR19FUlIoIkludmFsaWQgcXBfaWQgJXUsIHNob3VsZCBi ZSBsZXNzIHRoYW4gJXUiLA0KKwkJCSAgICBxcF9pZCwgaW50ZXJuYWxzLT5tYXhfbmJfcXBhaXJz KTsNCisJCXJldHVybiAoLUVJTlZBTCk7DQorCX0NCisNCisJLyogRnJlZSBtZW1vcnkgcHJpb3Ig dG8gcmUtYWxsb2NhdGlvbiBpZiBuZWVkZWQuICovDQorCWlmIChkZXYtPmRhdGEtPnF1ZXVlX3Bh aXJzW3FwX2lkXSAhPSBOVUxMKQ0KKwkJY2NwX3BtZF9xcF9yZWxlYXNlKGRldiwgcXBfaWQpOw0K Kw0KKwkvKiBBbGxvY2F0ZSB0aGUgcXVldWUgcGFpciBkYXRhIHN0cnVjdHVyZS4gKi8NCisJcXAg PSBydGVfem1hbGxvY19zb2NrZXQoIkNDUCBDcnlwdG8gUE1EIFF1ZXVlIFBhaXIiLCBzaXplb2Yo KnFwKSwNCisJCQkJCVJURV9DQUNIRV9MSU5FX1NJWkUsIHNvY2tldF9pZCk7DQorCWlmIChxcCA9 PSBOVUxMKSB7DQorCQlDQ1BfTE9HX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIHF1ZXVlIHBhaXIg bWVtb3J5Iik7DQorCQlyZXR1cm4gKC1FTk9NRU0pOw0KKwl9DQorDQorCXFwLT5kZXYgPSBkZXY7 DQorCXFwLT5pZCA9IHFwX2lkOw0KKwlkZXYtPmRhdGEtPnF1ZXVlX3BhaXJzW3FwX2lkXSA9IHFw Ow0KKw0KKwlyZXR2YWwgPSBjY3BfcG1kX3FwX3NldF91bmlxdWVfbmFtZShkZXYsIHFwKTsNCisJ aWYgKHJldHZhbCkgew0KKwkJQ0NQX0xPR19FUlIoIkZhaWxlZCB0byBjcmVhdGUgdW5pcXVlIG5h bWUgZm9yIGNjcCBxcCIpOw0KKwkJZ290byBxcF9zZXR1cF9jbGVhbnVwOw0KKwl9DQorDQorCXFw LT5wcm9jZXNzZWRfcGt0cyA9IGNjcF9wbWRfcXBfY3JlYXRlX2JhdGNoX2luZm9fcmluZyhxcCwN CisJCQlxcF9jb25mLT5uYl9kZXNjcmlwdG9ycywgc29ja2V0X2lkKTsNCisJaWYgKHFwLT5wcm9j ZXNzZWRfcGt0cyA9PSBOVUxMKSB7DQorCQlDQ1BfTE9HX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBi YXRjaCBpbmZvIHJpbmciKTsNCisJCWdvdG8gcXBfc2V0dXBfY2xlYW51cDsNCisJfQ0KKw0KKwlx cC0+c2Vzc19tcCA9IHNlc3Npb25fcG9vbDsNCisNCisJLyogbWVtcG9vbCBmb3IgYmF0Y2ggaW5m byovDQorCXFwLT5iYXRjaF9tcCA9IHJ0ZV9tZW1wb29sX2NyZWF0ZSgNCisJCQkJcXAtPm5hbWUs DQorCQkJCXFwX2NvbmYtPm5iX2Rlc2NyaXB0b3JzLA0KKwkJCQlzaXplb2Yoc3RydWN0IGNjcF9i YXRjaF9pbmZvKSwNCisJCQkJUlRFX0NBQ0hFX0xJTkVfU0laRSwNCisJCQkJMCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwNCisJCQkJU09DS0VUX0lEX0FOWSwgMCk7DQorCWlmIChxcC0+YmF0Y2hf bXAgPT0gTlVMTCkNCisJCWdvdG8gcXBfc2V0dXBfY2xlYW51cDsNCisJbWVtc2V0KCZxcC0+cXBf c3RhdHMsIDAsIHNpemVvZihxcC0+cXBfc3RhdHMpKTsNCisJcmV0dXJuIDA7DQorDQorcXBfc2V0 dXBfY2xlYW51cDoNCisJZGV2LT5kYXRhLT5xdWV1ZV9wYWlyc1txcF9pZF0gPSBOVUxMOw0KKwlp ZiAocXApDQorCQlydGVfZnJlZShxcCk7DQorCXJldHVybiAtMTsNCit9DQorDQorc3RhdGljIGlu dA0KK2NjcF9wbWRfcXBfc3RhcnQoc3RydWN0IHJ0ZV9jcnlwdG9kZXYgKmRldiBfX3J0ZV91bnVz ZWQsDQorCQkgdWludDE2X3QgcXVldWVfcGFpcl9pZCBfX3J0ZV91bnVzZWQpDQorew0KKwlyZXR1 cm4gLUVOT1RTVVA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitjY3BfcG1kX3FwX3N0b3Aoc3RydWN0 IHJ0ZV9jcnlwdG9kZXYgKmRldiBfX3J0ZV91bnVzZWQsDQorCQl1aW50MTZfdCBxdWV1ZV9wYWly X2lkIF9fcnRlX3VudXNlZCkNCit7DQorCXJldHVybiAtRU5PVFNVUDsNCit9DQorDQorc3RhdGlj IHVpbnQzMl90DQorY2NwX3BtZF9xcF9jb3VudChzdHJ1Y3QgcnRlX2NyeXB0b2RldiAqZGV2KQ0K K3sNCisJcmV0dXJuIGRldi0+ZGF0YS0+bmJfcXVldWVfcGFpcnM7DQorfQ0KKw0KK3N0YXRpYyB1 bnNpZ25lZA0KK2NjcF9wbWRfc2Vzc2lvbl9nZXRfc2l6ZShzdHJ1Y3QgcnRlX2NyeXB0b2RldiAq ZGV2IF9fcnRlX3VudXNlZCkNCit7DQorCXJldHVybiBzaXplb2Yoc3RydWN0IGNjcF9zZXNzaW9u KTsNCit9DQorDQorc3RhdGljIGludA0KK2NjcF9wbWRfc2Vzc2lvbl9jb25maWd1cmUoc3RydWN0 IHJ0ZV9jcnlwdG9kZXYgKmRldiwNCisJCQkgIHN0cnVjdCBydGVfY3J5cHRvX3N5bV94Zm9ybSAq eGZvcm0sDQorCQkJICBzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9zeW1fc2Vzc2lvbiAqc2VzcywNCisJ CQkgIHN0cnVjdCBydGVfbWVtcG9vbCAqbWVtcG9vbCkNCit7DQorCWludCByZXQ7DQorCXZvaWQg KnNlc3NfcHJpdmF0ZV9kYXRhOw0KKw0KKwlpZiAodW5saWtlbHkoc2VzcyA9PSBOVUxMIHx8IHhm b3JtID09IE5VTEwpKSB7DQorCQlDQ1BfTE9HX0VSUigiSW52YWxpZCBzZXNzaW9uIHN0cnVjdCBv ciB4Zm9ybSIpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQorCX0NCisNCisJaWYgKHJ0ZV9tZW1wb29s X2dldChtZW1wb29sLCAmc2Vzc19wcml2YXRlX2RhdGEpKSB7DQorCQlDQ1BfTE9HX0VSUigiQ291 bGRuJ3QgZ2V0IG9iamVjdCBmcm9tIHNlc3Npb24gbWVtcG9vbCIpOw0KKwkJcmV0dXJuIC1FTk9N RU07DQorCX0NCisJcmV0ID0gY2NwX3NldF9zZXNzaW9uX3BhcmFtZXRlcnMoc2Vzc19wcml2YXRl X2RhdGEsIHhmb3JtKTsNCisJaWYgKHJldCAhPSAwKSB7DQorCQlDQ1BfTE9HX0VSUigiZmFpbGVk IGNvbmZpZ3VyZSBzZXNzaW9uIHBhcmFtZXRlcnMiKTsNCisNCisJCS8qIFJldHVybiBzZXNzaW9u IHRvIG1lbXBvb2wgKi8NCisJCXJ0ZV9tZW1wb29sX3B1dChtZW1wb29sLCBzZXNzX3ByaXZhdGVf ZGF0YSk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorCXNldF9zZXNzaW9uX3ByaXZhdGVfZGF0YShz ZXNzLCBkZXYtPmRyaXZlcl9pZCwNCisJCQkJIHNlc3NfcHJpdmF0ZV9kYXRhKTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorY2NwX3BtZF9zZXNzaW9uX2NsZWFyKHN0cnVj dCBydGVfY3J5cHRvZGV2ICpkZXYsDQorCQkgICAgICBzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9zeW1f c2Vzc2lvbiAqc2VzcykNCit7DQorCXVpbnQ4X3QgaW5kZXggPSBkZXYtPmRyaXZlcl9pZDsNCisJ dm9pZCAqc2Vzc19wcml2ID0gZ2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRhKHNlc3MsIGluZGV4KTsN CisNCisJaWYgKHNlc3NfcHJpdikgew0KKwkJc3RydWN0IHJ0ZV9tZW1wb29sICpzZXNzX21wID0g cnRlX21lbXBvb2xfZnJvbV9vYmooc2Vzc19wcml2KTsNCisNCisJCXJ0ZV9tZW1wb29sX3B1dChz ZXNzX21wLCBzZXNzX3ByaXYpOw0KKwkJbWVtc2V0KHNlc3NfcHJpdiwgMCwgc2l6ZW9mKHN0cnVj dCBjY3Bfc2Vzc2lvbikpOw0KKwkJc2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRhKHNlc3MsIGluZGV4 LCBOVUxMKTsNCisJfQ0KK30NCisNCitzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9vcHMgY2NwX29wcyA9 IHsNCisJCS5kZXZfY29uZmlndXJlCQk9IGNjcF9wbWRfY29uZmlnLA0KKwkJLmRldl9zdGFydAkJ PSBjY3BfcG1kX3N0YXJ0LA0KKwkJLmRldl9zdG9wCQk9IGNjcF9wbWRfc3RvcCwNCisJCS5kZXZf Y2xvc2UJCT0gY2NwX3BtZF9jbG9zZSwNCisNCisJCS5zdGF0c19nZXQJCT0gY2NwX3BtZF9zdGF0 c19nZXQsDQorCQkuc3RhdHNfcmVzZXQJCT0gY2NwX3BtZF9zdGF0c19yZXNldCwNCisNCisJCS5k ZXZfaW5mb3NfZ2V0CQk9IGNjcF9wbWRfaW5mb19nZXQsDQorDQorCQkucXVldWVfcGFpcl9zZXR1 cAk9IGNjcF9wbWRfcXBfc2V0dXAsDQorCQkucXVldWVfcGFpcl9yZWxlYXNlCT0gY2NwX3BtZF9x cF9yZWxlYXNlLA0KKwkJLnF1ZXVlX3BhaXJfc3RhcnQJPSBjY3BfcG1kX3FwX3N0YXJ0LA0KKwkJ LnF1ZXVlX3BhaXJfc3RvcAk9IGNjcF9wbWRfcXBfc3RvcCwNCisJCS5xdWV1ZV9wYWlyX2NvdW50 CT0gY2NwX3BtZF9xcF9jb3VudCwNCisNCisJCS5zZXNzaW9uX2dldF9zaXplCT0gY2NwX3BtZF9z ZXNzaW9uX2dldF9zaXplLA0KKwkJLnNlc3Npb25fY29uZmlndXJlCT0gY2NwX3BtZF9zZXNzaW9u X2NvbmZpZ3VyZSwNCisJCS5zZXNzaW9uX2NsZWFyCQk9IGNjcF9wbWRfc2Vzc2lvbl9jbGVhcg0K K307DQorDQorc3RydWN0IHJ0ZV9jcnlwdG9kZXZfb3BzICpjY3BfcG1kX29wcyA9ICZjY3Bfb3Bz Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NjcC9jY3BfcG1kX3ByaXZhdGUuaCBiL2Ry aXZlcnMvY3J5cHRvL2NjcC9jY3BfcG1kX3ByaXZhdGUuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAuLmFiNWU4MmINCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvY3J5 cHRvL2NjcC9jY3BfcG1kX3ByaXZhdGUuaA0KQEAgLTAsMCArMSwxMzUgQEANCisvKi0NCisgKiAg IEJTRCBMSUNFTlNFDQorICoNCisgKiAgIENvcHlyaWdodChjKSAyMDE3IEFkdmFuY2UgTWljcm8g RGV2aWNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogICBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN CisgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucw0KKyAqICAgYXJlIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQor ICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQorICog ICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQ0KKyAqICAgICAgIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu YW1lIG9mIEFkdmFuY2UgTWljcm8gRGV2aWNlcywgSW5jIG5vciB0aGUgbmFtZXMNCisgKiAgICAg ICBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cw0KKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl Y2lmaWMgcHJpb3Igd3JpdHRlbg0KKyAqICAgICAgIHBlcm1pc3Npb24uDQorICoNCisgKiAgIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U UklCVVRPUlMNCisgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiAgIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q WVJJR0hUDQorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiAgIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLA0KKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogICAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UNCisgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2lmbmRlZiBfQ0NQX1BNRF9QUklW QVRFX0hfDQorI2RlZmluZSBfQ0NQX1BNRF9QUklWQVRFX0hfDQorDQorI2luY2x1ZGUgPHJ0ZV9j b25maWcuaD4NCisjaW5jbHVkZSA8cnRlX2NyeXB0b2Rldi5oPg0KKw0KKyNkZWZpbmUgQ1JZUFRP REVWX05BTUVfQ0NQX1BNRCBjcnlwdG9fY2NwDQorDQorI2RlZmluZSBDQ1BfTE9HX0VSUihmbXQs IGFyZ3MuLi4pIFwNCisJUlRFX0xPRyhFUlIsIENSWVBUT0RFViwgIlslc10gJXMoKSBsaW5lICV1 OiAiIGZtdCAiXG4iLCAgXA0KKwkJCVJURV9TVFIoQ1JZUFRPREVWX05BTUVfQ0NQX1BNRCksIFwN CisJCQlfX2Z1bmNfXywgX19MSU5FX18sICMjIGFyZ3MpDQorDQorI2lmZGVmIFJURV9MSUJSVEVf Q0NQX0RFQlVHDQorI2RlZmluZSBDQ1BfTE9HX0lORk8oZm10LCBhcmdzLi4uKSBcDQorCVJURV9M T0coSU5GTywgQ1JZUFRPREVWLCAiWyVzXSAlcygpIGxpbmUgJXU6ICIgZm10ICJcbiIsIFwNCisJ CQlSVEVfU1RSKENSWVBUT0RFVl9OQU1FX0NDUF9QTUQpLCBcDQorCQkJX19mdW5jX18sIF9fTElO RV9fLCAjIyBhcmdzKQ0KKw0KKyNkZWZpbmUgQ0NQX0xPR19EQkcoZm10LCBhcmdzLi4uKSBcDQor CVJURV9MT0coREVCVUcsIENSWVBUT0RFViwgIlslc10gJXMoKSBsaW5lICV1OiAiIGZtdCAiXG4i LCBcDQorCQkJUlRFX1NUUihDUllQVE9ERVZfTkFNRV9DQ1BfUE1EKSwgXA0KKwkJCV9fZnVuY19f LCBfX0xJTkVfXywgIyMgYXJncykNCisjZWxzZQ0KKyNkZWZpbmUgQ0NQX0xPR19JTkZPKGZtdCwg YXJncy4uLikNCisjZGVmaW5lIENDUF9MT0dfREJHKGZtdCwgYXJncy4uLikNCisjZW5kaWYNCisN CisvKio8IE1heGltdW0gcXVldWUgcGFpcnMgc3VwcG9ydGVkIGJ5IENDUCBQTUQgKi8NCisjZGVm aW5lIENDUF9QTURfTUFYX1FVRVVFX1BBSVJTCTENCisjZGVmaW5lIENDUF9OQl9NQVhfREVTQ1JJ UFRPUlMgMTAyNA0KKyNkZWZpbmUgQ0NQX01BWF9CVVJTVCA2NA0KKw0KKyNpbmNsdWRlIDxjY3Bf ZGV2Lmg+DQorDQorLyogcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBDQ1AgY3J5cHRv IGRldmljZSAqLw0KK3N0cnVjdCBjY3BfcHJpdmF0ZSB7DQorCXVuc2lnbmVkIGludCBtYXhfbmJf cXBhaXJzOwkvKio8IE1heCBudW1iZXIgb2YgcXVldWUgcGFpcnMgKi8NCisJdW5zaWduZWQgaW50 IG1heF9uYl9zZXNzaW9uczsJLyoqPCBNYXggbnVtYmVyIG9mIHNlc3Npb25zICovDQorCXVpbnQ4 X3QgY3J5cHRvX251bV9kZXY7CQkvKio8IE51bWJlciBvZiB3b3JraW5nIGNyeXB0byBkZXZpY2Vz ICovDQorCXN0cnVjdCBjY3BfZGV2aWNlICpsYXN0X2RldjsJLyoqPCBMYXN0IHdvcmtpbmcgY3J5 cHRvIGRldmljZSAqLw0KK307DQorDQorLyogQ0NQIGJhdGNoIGluZm8gKi8NCitzdHJ1Y3QgY2Nw X2JhdGNoX2luZm8gew0KKwlzdHJ1Y3QgcnRlX2NyeXB0b19vcCAqb3BbQ0NQX01BWF9CVVJTVF07 DQorCS8qKjwgb3B0YWJsZSBwb3B1bGF0ZWQgYXQgZW5xdWUgdGltZSBmcm9tIGFwcCovDQorCWlu dCBvcF9pZHg7DQorCXN0cnVjdCBjY3BfcXVldWUgKmNtZF9xOw0KKwl1aW50MTZfdCBvcGNudDsN CisJLyoqPCMgIG9mIGNyeXB0byBvcHMgaW4gYmF0Y2gqLw0KKwlpbnQgZGVzY2NudDsNCisJLyoq PCMgb2YgY2NwIHF1ZXVlIGRlc2NyaXB0b3JzKi8NCisJdWludDMyX3QgaGVhZF9vZmZzZXQ7DQor CS8qKjwgY2NwIHF1ZXVlIGhlYWQgdGFpbCBvZmZzZXRzIHRpbWUgb2YgZW5xdWV1ZSovDQorCXVp bnQzMl90IHRhaWxfb2Zmc2V0Ow0KKwl1aW50OF90IGxzYl9idWZbQ0NQX1NCX0JZVEVTICogQ0NQ X01BWF9CVVJTVF07DQorCXBoeXNfYWRkcl90IGxzYl9idWZfcGh5czsNCisJLyoqPCBMU0IgaW50 ZXJtZWRpYXRlIGJ1ZiBmb3IgcGFzc3RocnUgKi8NCisJaW50IGxzYl9idWZfaWR4Ow0KKyNpZmRl ZiBSVEVfTElCUlRFX1BNRF9DQ1BfQ1BVX0FVVEgNCisJaW50IGF1dGhfb25seTsNCisJLyoqPCBh dXRoIG9ubHkgb3BzIGJhdGNoICovDQorI2VuZGlmDQorfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0K Kw0KKy8qKjwgQ0NQIGNyeXB0byBxdWV1ZSBwYWlyICovDQorc3RydWN0IGNjcF9xcCB7DQorCXVp bnQxNl90IGlkOw0KKwkvKio8IFF1ZXVlIFBhaXIgSWRlbnRpZmllciAqLw0KKwljaGFyIG5hbWVb UlRFX0NSWVBUT0RFVl9OQU1FX0xFTl07DQorCS8qKjwgVW5pcXVlIFF1ZXVlIFBhaXIgTmFtZSAq Lw0KKwlzdHJ1Y3QgcnRlX3JpbmcgKnByb2Nlc3NlZF9wa3RzOw0KKwkvKio8IFJpbmcgZm9yIHBs YWNpbmcgcHJvY2VzcyBwYWNrZXRzICovDQorCXN0cnVjdCBydGVfbWVtcG9vbCAqc2Vzc19tcDsN CisJLyoqPCBTZXNzaW9uIE1lbXBvb2wgKi8NCisJc3RydWN0IHJ0ZV9tZW1wb29sICpiYXRjaF9t cDsNCisJLyoqPCBTZXNzaW9uIE1lbXBvb2wgZm9yIGJhdGNoIGluZm8gKi8NCisJc3RydWN0IHJ0 ZV9jcnlwdG9kZXZfc3RhdHMgcXBfc3RhdHM7DQorCS8qKjwgUXVldWUgcGFpciBzdGF0aXN0aWNz ICovDQorCXN0cnVjdCBjY3BfYmF0Y2hfaW5mbyAqYl9pbmZvOw0KKwkvKio8IFN0b3JlIG9wcyBw dWxsZWQgb3V0IG9mIHF1ZXVlICovDQorCXN0cnVjdCBydGVfY3J5cHRvZGV2ICpkZXY7DQorCS8q KjwgcnRlIGNyeXB0byBkZXZpY2UgdG8gd2hpY2ggdGhpcyBxcCBiZWxvbmdzICovDQorfSBfX3J0 ZV9jYWNoZV9hbGlnbmVkOw0KKw0KKw0KKy8qKjwgZGV2aWNlIHNwZWNpZmljIG9wZXJhdGlvbnMg ZnVuY3Rpb24gcG9pbnRlciBzdHJ1Y3R1cmUgKi8NCitleHRlcm4gc3RydWN0IHJ0ZV9jcnlwdG9k ZXZfb3BzICpjY3BfcG1kX29wczsNCisNCisNCitleHRlcm4gc3RydWN0IHJ0ZV9jcnlwdG9kZXZf b3BzICpjY3BfY3B1X3BtZF9vcHM7DQordWludDE2X3QNCitjY3BfY3B1X3BtZF9lbnF1ZXVlX2J1 cnN0KHZvaWQgKnF1ZXVlX3BhaXIsDQorCQkJICBzdHJ1Y3QgcnRlX2NyeXB0b19vcCAqKm9wcywN CisJCQkgIHVpbnQxNl90IG5iX29wcyk7DQordWludDE2X3QNCitjY3BfY3B1X3BtZF9kZXF1ZXVl X2J1cnN0KHZvaWQgKnF1ZXVlX3BhaXIsDQorCQkJICBzdHJ1Y3QgcnRlX2NyeXB0b19vcCAqKm9w cywNCisJCQkgIHVpbnQxNl90IG5iX29wcyk7DQorDQorI2VuZGlmIC8qIF9DQ1BfUE1EX1BSSVZB VEVfSF8gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3AvcnRlX2NjcF9wbWQuYyBi L2RyaXZlcnMvY3J5cHRvL2NjcC9ydGVfY2NwX3BtZC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMC4uZTdlM2I5OQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9jcnlw dG8vY2NwL3J0ZV9jY3BfcG1kLmMNCkBAIC0wLDAgKzEsMjgzIEBADQorLyotDQorICogICBCU0Qg TElDRU5TRQ0KKyAqDQorICogICBDb3B5cmlnaHQoYykgMjAxNyBBZHZhbmNlIE1pY3JvIERldmlj ZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqICAgUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICog ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMNCisgKiAgIGFyZSBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAg ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyAqICAgICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUNCisgKiAgICAgICBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv ZiBBZHZhbmNlIE1pY3JvIERldmljZXMsIEluYyBub3IgdGhlIG5hbWVzDQorICogICAgICAgb2Yg aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMNCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4NCisgKiAgICAgICBwZXJtaXNzaW9uLg0KKyAqDQorICogICBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTDQorICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVA0KKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogICBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI VA0KKyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogICBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwN CisgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqICAgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF DQorICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQor I2luY2x1ZGUgPHJ0ZV9jb25maWcuaD4NCisjaW5jbHVkZSA8cnRlX2NyeXB0b2Rldi5oPg0KKyNp bmNsdWRlIDxydGVfY3J5cHRvZGV2X3BtZC5oPg0KKyNpbmNsdWRlIDxydGVfY3J5cHRvZGV2X3Zk ZXYuaD4NCisjaW5jbHVkZSA8cnRlX3ZkZXYuaD4NCisjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0K Kw0KKyNpbmNsdWRlIDxjY3BfY3J5cHRvLmg+DQorI2luY2x1ZGUgPGNjcF9kZXYuaD4NCisjaW5j bHVkZSA8Y2NwX3BtZF9wcml2YXRlLmg+DQorDQorLyoqDQorICogR2xvYmFsIHN0YXRpYyBwYXJh bWV0ZXIgdXNlZCB0byBmaW5kIGlmIENDUCBkZXZpY2UgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4N CisgKi8NCitzdGF0aWMgdW5zaWduZWQgaW50IGNjcF9wbWRfaW5pdF9kb25lOw0KK3VpbnQ4X3Qg Y3J5cHRvZGV2X2RyaXZlcl9pZDsNCisNCitzdGF0aWMgc3RydWN0IGNjcF9zZXNzaW9uICoNCitn ZXRfY2NwX3Nlc3Npb24oc3RydWN0IGNjcF9xcCAqcXAsIHN0cnVjdCBydGVfY3J5cHRvX29wICpv cCkNCit7DQorCXN0cnVjdCBjY3Bfc2Vzc2lvbiAqc2VzcyA9IE5VTEw7DQorDQorCWlmIChvcC0+ c2Vzc190eXBlID09IFJURV9DUllQVE9fT1BfV0lUSF9TRVNTSU9OKSB7DQorCQlpZiAodW5saWtl bHkob3AtPnN5bS0+c2Vzc2lvbiA9PSBOVUxMKSkNCisJCQlyZXR1cm4gTlVMTDsNCisNCisJCXNl c3MgPSAoc3RydWN0IGNjcF9zZXNzaW9uICopDQorCQkJZ2V0X3Nlc3Npb25fcHJpdmF0ZV9kYXRh KA0KKwkJCQlvcC0+c3ltLT5zZXNzaW9uLA0KKwkJCQljcnlwdG9kZXZfZHJpdmVyX2lkKTsNCisJ fSBlbHNlIHsNCisJCXZvaWQgKl9zZXNzOw0KKwkJdm9pZCAqX3Nlc3NfcHJpdmF0ZV9kYXRhID0g TlVMTDsNCisNCisJCWlmIChydGVfbWVtcG9vbF9nZXQocXAtPnNlc3NfbXAsICZfc2VzcykpDQor CQkJcmV0dXJuIE5VTEw7DQorCQlpZiAocnRlX21lbXBvb2xfZ2V0KHFwLT5zZXNzX21wLCAodm9p ZCAqKikmX3Nlc3NfcHJpdmF0ZV9kYXRhKSkNCisJCQlyZXR1cm4gTlVMTDsNCisNCisJCXNlc3Mg PSAoc3RydWN0IGNjcF9zZXNzaW9uICopX3Nlc3NfcHJpdmF0ZV9kYXRhOw0KKw0KKwkJaWYgKHVu bGlrZWx5KGNjcF9zZXRfc2Vzc2lvbl9wYXJhbWV0ZXJzKHNlc3MsDQorCQkJCQkJCW9wLT5zeW0t Pnhmb3JtKSAhPSAwKSkgew0KKwkJCXJ0ZV9tZW1wb29sX3B1dChxcC0+c2Vzc19tcCwgX3Nlc3Mp Ow0KKwkJCXJ0ZV9tZW1wb29sX3B1dChxcC0+c2Vzc19tcCwgX3Nlc3NfcHJpdmF0ZV9kYXRhKTsN CisJCQlzZXNzID0gTlVMTDsNCisJCX0NCisJCW9wLT5zeW0tPnNlc3Npb24gPSAoc3RydWN0IHJ0 ZV9jcnlwdG9kZXZfc3ltX3Nlc3Npb24gKilfc2VzczsNCisJCXNldF9zZXNzaW9uX3ByaXZhdGVf ZGF0YShvcC0+c3ltLT5zZXNzaW9uLCBjcnlwdG9kZXZfZHJpdmVyX2lkLA0KKwkJCQkJIF9zZXNz X3ByaXZhdGVfZGF0YSk7DQorCX0NCisNCisJcmV0dXJuIHNlc3M7DQorfQ0KKw0KK3N0YXRpYyB1 aW50MTZfdA0KK2NjcF9wbWRfZW5xdWV1ZV9idXJzdCh2b2lkICpxdWV1ZV9wYWlyLCBzdHJ1Y3Qg cnRlX2NyeXB0b19vcCAqKm9wcywNCisJCSAgICAgIHVpbnQxNl90IG5iX29wcykNCit7DQorCXN0 cnVjdCBjY3Bfc2Vzc2lvbiAqc2VzcyA9IE5VTEw7DQorCXN0cnVjdCBjY3BfcXAgKnFwID0gcXVl dWVfcGFpcjsNCisJc3RydWN0IGNjcF9xdWV1ZSAqY21kX3E7DQorCXN0cnVjdCBydGVfY3J5cHRv ZGV2ICpkZXYgPSBxcC0+ZGV2Ow0KKwlpbnQgaSwgZW5xX2NudCwgc2xvdHNfcmVxID0gMDsNCisN CisJaWYgKG5iX29wcyA9PSAwKQ0KKwkJcmV0dXJuIDA7DQorDQorCWlmICh1bmxpa2VseShydGVf cmluZ19mdWxsKHFwLT5wcm9jZXNzZWRfcGt0cykgIT0gMCkpDQorCQlyZXR1cm4gMDsNCisNCisJ Zm9yIChpID0gMDsgaSA8IG5iX29wczsgaSsrKSB7DQorCQlzZXNzID0gZ2V0X2NjcF9zZXNzaW9u KHFwLCBvcHNbaV0pOw0KKwkJaWYgKHVubGlrZWx5KHNlc3MgPT0gTlVMTCkgJiYgKGkgPT0gMCkp IHsNCisJCQlxcC0+cXBfc3RhdHMuZW5xdWV1ZV9lcnJfY291bnQrKzsNCisJCQlyZXR1cm4gMDsN CisJCX0gZWxzZSBpZiAoc2VzcyA9PSBOVUxMKSB7DQorCQkJbmJfb3BzID0gaTsNCisJCQlicmVh azsNCisJCX0NCisJCXNsb3RzX3JlcSArPSBjY3BfY29tcHV0ZV9zbG90X2NvdW50KHNlc3MpOw0K Kwl9DQorDQorCWNtZF9xID0gY2NwX2FsbG90X3F1ZXVlKGRldiwgc2xvdHNfcmVxKTsNCisJaWYg KHVubGlrZWx5KGNtZF9xID09IE5VTEwpKQ0KKwkJcmV0dXJuIDA7DQorDQorCWVucV9jbnQgPSBw cm9jZXNzX29wc190b19lbnF1ZXVlKHFwLCBvcHMsIGNtZF9xLCBuYl9vcHMsIHNsb3RzX3JlcSk7 DQorCXFwLT5xcF9zdGF0cy5lbnF1ZXVlZF9jb3VudCArPSBlbnFfY250Ow0KKwlyZXR1cm4gZW5x X2NudDsNCit9DQorDQorc3RhdGljIHVpbnQxNl90DQorY2NwX3BtZF9kZXF1ZXVlX2J1cnN0KHZv aWQgKnF1ZXVlX3BhaXIsIHN0cnVjdCBydGVfY3J5cHRvX29wICoqb3BzLA0KKwkJdWludDE2X3Qg bmJfb3BzKQ0KK3sNCisJc3RydWN0IGNjcF9xcCAqcXAgPSBxdWV1ZV9wYWlyOw0KKwl1bnNpZ25l ZCBpbnQgbmJfZGVxdWV1ZWQsIGk7DQorDQorCW5iX2RlcXVldWVkID0gcHJvY2Vzc19vcHNfdG9f ZGVxdWV1ZShxcCwgb3BzLCBuYl9vcHMpOw0KKw0KKwkvKiBGcmVlIHNlc3Npb24gaWYgYSBzZXNz aW9uLWxlc3MgY3J5cHRvIG9wLiAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgbmJfZGVxdWV1ZWQ7IGkr KykNCisJCWlmICh1bmxpa2VseShvcHNbaV0tPnNlc3NfdHlwZSA9PQ0KKwkJCSAgICAgUlRFX0NS WVBUT19PUF9TRVNTSU9OTEVTUykpIHsNCisJCQlydGVfbWVtcG9vbF9wdXQocXAtPnNlc3NfbXAs IG9wc1tpXS0+c3ltLT5zZXNzaW9uKTsNCisJCQlvcHNbaV0tPnN5bS0+c2Vzc2lvbiA9IE5VTEw7 DQorCQl9DQorCXFwLT5xcF9zdGF0cy5kZXF1ZXVlZF9jb3VudCArPSBuYl9kZXF1ZXVlZDsNCisN CisJcmV0dXJuIG5iX2RlcXVldWVkOw0KK30NCisNCisvKg0KKyAqIFRoZSBzZXQgb2YgUENJIGRl dmljZXMgdGhpcyBkcml2ZXIgc3VwcG9ydHMNCisgKi8NCitzdGF0aWMgc3RydWN0IHJ0ZV9wY2lf aWQgY2NwX3BjaV9pZFtdID0gew0KKwl7DQorCQlSVEVfUENJX0RFVklDRSgweDEwMjIsIDB4MTQ1 NiksIC8qIEFNRCBDQ1AtNWEgKi8NCisJfSwNCisJew0KKwkJUlRFX1BDSV9ERVZJQ0UoMHgxMDIy LCAweDE0NjgpLCAvKiBBTUQgQ0NQLTViICovDQorCX0sDQorCXsuZGV2aWNlX2lkID0gMH0sDQor fTsNCisNCisvKiogUmVtb3ZlIGNjcCBwbWQgKi8NCitzdGF0aWMgaW50DQorY3J5cHRvZGV2X2Nj cF9yZW1vdmUoc3RydWN0IHJ0ZV92ZGV2X2RldmljZSAqZGV2KQ0KK3sNCisJY29uc3QgY2hhciAq bmFtZTsNCisNCisJbmFtZSA9IHJ0ZV92ZGV2X2RldmljZV9uYW1lKGRldik7DQorCWlmIChuYW1l ID09IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJUlRFX0xPRyhJTkZPLCBQTUQsICJD bG9zaW5nIGNjcCBkZXZpY2UgJXMgb24gbnVtYSBzb2NrZXQgJXVcbiIsDQorCQkJbmFtZSwgcnRl X3NvY2tldF9pZCgpKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKiBDcmVhdGUgY3J5cHRv IGRldmljZSAqLw0KK3N0YXRpYyBpbnQNCitjcnlwdG9kZXZfY2NwX2NyZWF0ZShjb25zdCBjaGFy ICpuYW1lLA0KKwkJICAgICBzdHJ1Y3QgcnRlX3ZkZXZfZGV2aWNlICp2ZGV2LA0KKwkJICAgICBz dHJ1Y3QgcnRlX2NyeXB0b192ZGV2X2luaXRfcGFyYW1zICppbml0X3BhcmFtcykNCit7DQorCXN0 cnVjdCBydGVfY3J5cHRvZGV2ICpkZXY7DQorCXN0cnVjdCBjY3BfcHJpdmF0ZSAqaW50ZXJuYWxz Ow0KKwl1aW50OF90IGNyeXB0b2Rldl9jbnQgPSAwOw0KKw0KKwlpZiAoaW5pdF9wYXJhbXMtPm5h bWVbMF0gPT0gJ1wwJykNCisJCXNucHJpbnRmKGluaXRfcGFyYW1zLT5uYW1lLCBzaXplb2YoaW5p dF9wYXJhbXMtPm5hbWUpLA0KKwkJCQkiJXMiLCBuYW1lKTsNCisNCisJZGV2ID0gcnRlX2NyeXB0 b2Rldl92ZGV2X3BtZF9pbml0KGluaXRfcGFyYW1zLT5uYW1lLA0KKwkJCXNpemVvZihzdHJ1Y3Qg Y2NwX3ByaXZhdGUpLA0KKwkJCWluaXRfcGFyYW1zLT5zb2NrZXRfaWQsDQorCQkJdmRldik7DQor CWlmIChkZXYgPT0gTlVMTCkgew0KKwkJQ0NQX0xPR19FUlIoImZhaWxlZCB0byBjcmVhdGUgY3J5 cHRvZGV2IHZkZXYiKTsNCisJCWdvdG8gaW5pdF9lcnJvcjsNCisJfQ0KKw0KKwljcnlwdG9kZXZf Y250ID0gY2NwX3Byb2JlX2RldmljZXMoY2NwX3BjaV9pZCk7DQorDQorCWlmIChjcnlwdG9kZXZf Y250ID09IDApIHsNCisJCUNDUF9MT0dfRVJSKCJmYWlsZWQgdG8gZGV0ZWN0IENDUCBjcnlwdG8g ZGV2aWNlIik7DQorCQlnb3RvIGluaXRfZXJyb3I7DQorCX0NCisNCisJcHJpbnRmKCJDQ1AgOiBD cnlwdG8gZGV2aWNlIGNvdW50ID0gJWRcbiIsIGNyeXB0b2Rldl9jbnQpOw0KKwlkZXYtPmRyaXZl cl9pZCA9IGNyeXB0b2Rldl9kcml2ZXJfaWQ7DQorDQorCS8qIHJlZ2lzdGVyIHJ4L3R4IGJ1cnN0 IGZ1bmN0aW9ucyBmb3IgZGF0YSBwYXRoICovDQorCWRldi0+ZGV2X29wcyA9IGNjcF9wbWRfb3Bz Ow0KKwlkZXYtPmVucXVldWVfYnVyc3QgPSBjY3BfcG1kX2VucXVldWVfYnVyc3Q7DQorCWRldi0+ ZGVxdWV1ZV9idXJzdCA9IGNjcF9wbWRfZGVxdWV1ZV9idXJzdDsNCisNCisJZGV2LT5mZWF0dXJl X2ZsYWdzID0gUlRFX0NSWVBUT0RFVl9GRl9TWU1NRVRSSUNfQ1JZUFRPIHwNCisJCQlSVEVfQ1JZ UFRPREVWX0ZGX0hXX0FDQ0VMRVJBVEVEIHwNCisJCQlSVEVfQ1JZUFRPREVWX0ZGX1NZTV9PUEVS QVRJT05fQ0hBSU5JTkc7DQorDQorCWludGVybmFscyA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7 DQorDQorCWludGVybmFscy0+bWF4X25iX3FwYWlycyA9IGluaXRfcGFyYW1zLT5tYXhfbmJfcXVl dWVfcGFpcnM7DQorCWludGVybmFscy0+bWF4X25iX3Nlc3Npb25zID0gaW5pdF9wYXJhbXMtPm1h eF9uYl9zZXNzaW9uczsNCisJaW50ZXJuYWxzLT5jcnlwdG9fbnVtX2RldiA9IGNyeXB0b2Rldl9j bnQ7DQorDQorCXJldHVybiAwOw0KKw0KK2luaXRfZXJyb3I6DQorCUNDUF9MT0dfRVJSKCJkcml2 ZXIgJXM6IGNyeXB0b2Rldl9jY3BfY3JlYXRlIGZhaWxlZCIsDQorCQkgICAgaW5pdF9wYXJhbXMt Pm5hbWUpOw0KKwljcnlwdG9kZXZfY2NwX3JlbW92ZSh2ZGV2KTsNCisNCisJcmV0dXJuIC1FRkFV TFQ7DQorfQ0KKw0KKy8qKiBQcm9iZSBjY3AgcG1kICovDQorc3RhdGljIGludA0KK2NyeXB0b2Rl dl9jY3BfcHJvYmUoc3RydWN0IHJ0ZV92ZGV2X2RldmljZSAqdmRldikNCit7DQorCWludCByYyA9 IDA7DQorCWNvbnN0IGNoYXIgKm5hbWU7DQorCXN0cnVjdCBydGVfY3J5cHRvX3ZkZXZfaW5pdF9w YXJhbXMgaW5pdF9wYXJhbXMgPSB7DQorCQlDQ1BfUE1EX01BWF9RVUVVRV9QQUlSUywNCisJCVJU RV9DUllQVE9ERVZfVkRFVl9ERUZBVUxUX01BWF9OQl9TRVNTSU9OUywNCisJCXJ0ZV9zb2NrZXRf aWQoKSwNCisJCXswfQ0KKwl9Ow0KKwljb25zdCBjaGFyICppbnB1dF9hcmdzOw0KKw0KKwlpZiAo Y2NwX3BtZF9pbml0X2RvbmUpIHsNCisJCVJURV9MT0coSU5GTywgUE1ELCAiQ0NQIFBNRCBhbHJl YWR5IGluaXRpYWxpemVkXG4iKTsNCisJCXJldHVybiAtRUZBVUxUOw0KKwl9DQorCW5hbWUgPSBy dGVfdmRldl9kZXZpY2VfbmFtZSh2ZGV2KTsNCisJaWYgKG5hbWUgPT0gTlVMTCkNCisJCXJldHVy biAtRUlOVkFMOw0KKw0KKwlpbnB1dF9hcmdzID0gcnRlX3ZkZXZfZGV2aWNlX2FyZ3ModmRldik7 DQorCXJ0ZV9jcnlwdG9kZXZfdmRldl9wYXJzZV9pbml0X3BhcmFtcygmaW5pdF9wYXJhbXMsIGlu cHV0X2FyZ3MpOw0KKwlpbml0X3BhcmFtcy5tYXhfbmJfcXVldWVfcGFpcnMgPSBDQ1BfUE1EX01B WF9RVUVVRV9QQUlSUzsNCisNCisJUlRFX0xPRyhJTkZPLCBQTUQsICJJbml0aWFsaXNpbmcgJXMg b24gTlVNQSBub2RlICVkXG4iLCBuYW1lLA0KKwkJCWluaXRfcGFyYW1zLnNvY2tldF9pZCk7DQor CVJURV9MT0coSU5GTywgUE1ELCAiTWF4IG51bWJlciBvZiBxdWV1ZSBwYWlycyA9ICVkXG4iLA0K KwkJCWluaXRfcGFyYW1zLm1heF9uYl9xdWV1ZV9wYWlycyk7DQorCVJURV9MT0coSU5GTywgUE1E LCAiTWF4IG51bWJlciBvZiBzZXNzaW9ucyA9ICVkXG4iLA0KKwkJCWluaXRfcGFyYW1zLm1heF9u Yl9zZXNzaW9ucyk7DQorDQorCXJjID0gY3J5cHRvZGV2X2NjcF9jcmVhdGUobmFtZSwgdmRldiwg JmluaXRfcGFyYW1zKTsNCisJaWYgKHJjKQ0KKwkJcmV0dXJuIHJjOw0KKwljY3BfcG1kX2luaXRf ZG9uZSA9IDE7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgc3RydWN0IHJ0ZV92ZGV2X2Ry aXZlciBjcnlwdG9kZXZfY2NwX3BtZF9kcnYgPSB7DQorCS5wcm9iZSA9IGNyeXB0b2Rldl9jY3Bf cHJvYmUsDQorCS5yZW1vdmUgPSBjcnlwdG9kZXZfY2NwX3JlbW92ZQ0KK307DQorDQorUlRFX1BN RF9SRUdJU1RFUl9WREVWKENSWVBUT0RFVl9OQU1FX0NDUF9QTUQsIGNyeXB0b2Rldl9jY3BfcG1k X2Rydik7DQorUlRFX1BNRF9SRUdJU1RFUl9QQVJBTV9TVFJJTkcoQ1JZUFRPREVWX05BTUVfQ0NQ X1BNRCwNCisJIm1heF9uYl9xdWV1ZV9wYWlycz08aW50PiBtYXhfbmJfc2Vzc2lvbnM9PGludD4g c29ja2V0X2lkPTxpbnQ+Iik7DQorUlRFX1BNRF9SRUdJU1RFUl9DUllQVE9fRFJJVkVSKGNyeXB0 b2Rldl9jY3BfcG1kX2RydiwgY3J5cHRvZGV2X2RyaXZlcl9pZCk7DQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9jcnlwdG8vY2NwL3J0ZV9wbWRfY2NwX3ZlcnNpb24ubWFwIGIvZHJpdmVycy9jcnlwdG8v Y2NwL3J0ZV9wbWRfY2NwX3ZlcnNpb24ubWFwDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uYTc1MzAzMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9jcnlwdG8vY2Nw L3J0ZV9wbWRfY2NwX3ZlcnNpb24ubWFwDQpAQCAtMCwwICsxLDMgQEANCitEUERLXzE3LjExIHsN CisJbG9jYWw6ICo7DQorfTsNCmRpZmYgLS1naXQgYS9saWIvbGlicnRlX2NyeXB0b2Rldi9ydGVf Y3J5cHRvX3N5bS5oIGIvbGliL2xpYnJ0ZV9jcnlwdG9kZXYvcnRlX2NyeXB0b19zeW0uaA0KaW5k ZXggMGNlYWE5MS4uZWVhM2M4NyAxMDA2NDQNCi0tLSBhL2xpYi9saWJydGVfY3J5cHRvZGV2L3J0 ZV9jcnlwdG9fc3ltLmgNCisrKyBiL2xpYi9saWJydGVfY3J5cHRvZGV2L3J0ZV9jcnlwdG9fc3lt LmgNCkBAIC0yNzQsNiArMjc0LDI0IEBAIGVudW0gcnRlX2NyeXB0b19hdXRoX2FsZ29yaXRobSB7 DQogCVJURV9DUllQVE9fQVVUSF9aVUNfRUlBMywNCiAJLyoqPCBaVUMgYWxnb3JpdGhtIGluIEVJ QTMgbW9kZSAqLw0KIA0KKwkvKio8IFNIQTMgYWxnb3JpdGhtIHN1cHBvcnQqLw0KKwlSVEVfQ1JZ UFRPX0FVVEhfU0hBM18yMjQsDQorCS8qKjwgMjI0IGJpdCBTSEEzIGFsZ29yaXRobS4gKi8NCisJ UlRFX0NSWVBUT19BVVRIX1NIQTNfMjI0X0hNQUMsDQorCS8qKjwgSE1BQyB1c2luZyAyMjQgYml0 IFNIQTMgYWxnb3JpdGhtLiAqLw0KKwlSVEVfQ1JZUFRPX0FVVEhfU0hBM18yNTYsDQorCS8qKjwg MjU2IGJpdCBTSEEzIGFsZ29yaXRobS4gKi8NCisJUlRFX0NSWVBUT19BVVRIX1NIQTNfMjU2X0hN QUMsDQorCS8qKjwgSE1BQyB1c2luZyAyNTYgYml0IFNIQTMgYWxnb3JpdGhtLiAqLw0KKwlSVEVf Q1JZUFRPX0FVVEhfU0hBM18zODQsDQorCS8qKjwgMzg0IGJpdCBTSEEzIGFsZ29yaXRobS4gKi8N CisJUlRFX0NSWVBUT19BVVRIX1NIQTNfMzg0X0hNQUMsDQorCS8qKjwgSE1BQyB1c2luZyAzODQg Yml0IFNIQTMgYWxnb3JpdGhtLiAqLw0KKwlSVEVfQ1JZUFRPX0FVVEhfU0hBM181MTIsDQorCS8q KjwgNTEyIGJpdCBTSEEzIGFsZ29yaXRobS4gKi8NCisJUlRFX0NSWVBUT19BVVRIX1NIQTNfNTEy X0hNQUMsDQorCS8qKjwgSE1BQyB1c2luZyA1MTIgYml0IFNIQTMgYWxnb3JpdGhtLiAqLw0KKw0K IAlSVEVfQ1JZUFRPX0FVVEhfTElTVF9FTkQNCiB9Ow0KIA0KZGlmZiAtLWdpdCBhL21rL3J0ZS5h cHAubWsgYi9tay9ydGUuYXBwLm1rDQppbmRleCBjMjVmZGQ5Li5jNjViZDU1IDEwMDY0NA0KLS0t IGEvbWsvcnRlLmFwcC5taw0KKysrIGIvbWsvcnRlLmFwcC5taw0KQEAgLTE1Miw2ICsxNTIsNyBA QCBfTERMSUJTLSQoQ09ORklHX1JURV9MSUJSVEVfUE1EX0FFU05JX01CKSAgICArPSAtTCQoQUVT TklfTVVMVElfQlVGRkVSX0xJQl9QQVRIKQ0KIF9MRExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9Q TURfQUVTTklfR0NNKSAgICs9IC1scnRlX3BtZF9hZXNuaV9nY20NCiBfTERMSUJTLSQoQ09ORklH X1JURV9MSUJSVEVfUE1EX0FFU05JX0dDTSkgICArPSAtTCQoQUVTTklfTVVMVElfQlVGRkVSX0xJ Ql9QQVRIKSAtbElQU2VjX01CDQogX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9PUEVO U1NMKSAgICAgKz0gLWxydGVfcG1kX29wZW5zc2wgLWxjcnlwdG8NCitfTERMSUJTLSQoQ09ORklH X1JURV9MSUJSVEVfUE1EX0NDUCkgICAgICAgICArPSAtbHJ0ZV9wbWRfY2NwIC1sY3J5cHRvDQog X0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9OVUxMX0NSWVBUTykgKz0gLWxydGVfcG1k X251bGxfY3J5cHRvDQogX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9RQVQpICAgICAg ICAgKz0gLWxydGVfcG1kX3FhdCAtbGNyeXB0bw0KIF9MRExJQlMtJChDT05GSUdfUlRFX0xJQlJU RV9QTURfU05PVzNHKSAgICAgICs9IC1scnRlX3BtZF9zbm93M2cNCi0tIA0KMi43LjQNCg0K