Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8614C433EF for ; Wed, 12 Jan 2022 10:18:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352474AbiALKSo (ORCPT ); Wed, 12 Jan 2022 05:18:44 -0500 Received: from mswedge2.sunplus.com ([60.248.182.106]:49042 "EHLO mg.sunplus.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1346594AbiALKSf (ORCPT ); Wed, 12 Jan 2022 05:18:35 -0500 X-MailGates: (flag:3,DYNAMIC,RELAY,NOHOST:PASS)(compute_score:DELIVER,40 ,3) Received: from 172.17.9.112 by mg02.sunplus.com with MailGates ESMTP Server V5.0(49502:0:AUTH_RELAY) (envelope-from ); Wed, 12 Jan 2022 18:18:36 +0800 (CST) Received: from sphcmbx02.sunplus.com.tw (172.17.9.112) by sphcmbx02.sunplus.com.tw (172.17.9.112) with Microsoft SMTP Server (TLS) id 15.0.1497.26; Wed, 12 Jan 2022 18:18:30 +0800 Received: from sphcmbx02.sunplus.com.tw ([fe80::fd3d:ad1a:de2a:18bd]) by sphcmbx02.sunplus.com.tw ([fe80::fd3d:ad1a:de2a:18bd%14]) with mapi id 15.00.1497.026; Wed, 12 Jan 2022 18:18:30 +0800 From: =?utf-8?B?VG9ueSBIdWFuZyDpu4Pmh7fljpo=?= To: Ulf Hansson , Tony Huang , Li-hao Kuo , =?utf-8?B?TGggS3VvIOmDreWKm+ixqg==?= CC: "robh+dt@kernel.org" , "linux-mmc@vger.kernel.org" , "devicetree@vger.kerenl.org" , "linux-kernel@vger.kernel.org" , "p.zabel@pengutronix.de" , =?utf-8?B?V2VsbHMgTHUg5ZGC6Iqz6aiw?= Subject: RE: [PATCH v2 2/2] mmc: Add mmc driver for Sunplus SP7021 Thread-Topic: [PATCH v2 2/2] mmc: Add mmc driver for Sunplus SP7021 Thread-Index: AQHYAfQU59NchqLgkEC7tUn2lZqwQqxddH6AgAG58FA= Date: Wed, 12 Jan 2022 10:18:30 +0000 Message-ID: <917bace41e7a4d94a91f0ffff8755345@sphcmbx02.sunplus.com.tw> References: In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.25.108.54] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RGVhciBVbGYgSGFuc3NvbjoNCg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYyIDIvMl0gbW1jOiBB ZGQgbW1jIGRyaXZlciBmb3IgU3VucGx1cyBTUDcwMjENCj4gDQo+ICsgTGktaGF1IEt1bywNCj4g DQo+IE9uIFdlZCwgNSBKYW4gMjAyMiBhdCAwNjoyMCwgVG9ueSBIdWFuZyA8dG9ueWh1YW5nLnN1 bnBsdXNAZ21haWwuY29tPg0KPiB3cm90ZToNCj4gPg0KPiA+IEFkZCBtbWMgZHJpdmVyIGZvciBT dW5wbHVzIFNQNzAyMQ0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogVG9ueSBIdWFuZyA8dG9ueWh1 YW5nLnN1bnBsdXNAZ21haWwuY29tPg0KPiANCj4gVGhlcmUgaXMgYW5vdGhlciBkcml2ZXIgdGhh dCBoYXMgYmVlbiBwb3N0ZWQgZm9yIHRoZSBlTU1DL1NEL1NESU8NCj4gY29udHJvbGxlciBmb3Ig U3VucGx1cyBTUDcwMjEgWzFdLiBXaXRob3V0IGdvaW5nIGludG8gdGhlIGRldGFpbHMgaXQNCj4g bG9va3MgbGlrZSBpdCdzIGEgdmVyeSBzaW1pbGFyIElQIGJsb2NrIC0gb3IgYXQgbGVhc3QgaXQn cyBqdXN0IGENCj4gc2xpZ2h0bHkgZGlmZmVyZW50IHZlcnNpb24gb2YgaXQuDQo+IA0KPiBSYXRo ZXIgdGhhbiB1c2luZyBvbmUgc2VwYXJhdGUgZHJpdmVyIHBlciB2ZXJzaW9uIG9mIHRoZSBJUCBi bG9jaywgSQ0KPiBzdHJvbmdseSBzdWdnZXN0IHRoYXQgd2UgY29tYmluZSB0aGUgZHJpdmVycyBp bnRvIG9uZSBkcml2ZXIuDQo+IA0KPiBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhhdCB3ZSBuZWVkIHRv IGRpc3Rpbmd1aXNoIHRoZSB2YXJpYW50cyBpbiB0aGUNCj4gZHJpdmVyLCB3aGljaCBzaG91bGQg YmUgZG9uZSBieSB1c2luZyBvbmUgY29tcGF0aWJsZSBzdHJpbmcgcGVyDQo+IHZhcmlhbnQgb2Yg dGhlIElQIGJsb2NrLiBNb3Jlb3Zlciwgd2UgaGF2ZSBleGlzdGluZyBjb21tb24gbW1jIERUDQo+ IGJpbmRpbmdzLCB0aHVzIGFsbG93aW5nIHRoZSBibG9jayB0byBiZSB1c2VkIGZvciBvbmUgb2Yg U0QsIFNESU8gb3INCj4gZU1NQyAoIm5vLXNkIiwgIm5vLXNkaW8iIGFuZCAibm8tbW1jIiksIHdo aWNoIHNlZW0gbGlrZSBpdCBjYW4gYmUNCj4gdXNlZnVsIGZvciB0aGlzIGNhc2UuDQo+IA0KDQpX ZSB3aWxsIGZvbGxvdyB5b3VyIHN1Z2dlc3Rpb24uIFNEL1NESU8vZU1NQyBjb21iaW5lZCBpbnRv IG9uIGRyaXZlci4NCg0KPiBUaGF0IHNhaWQsIGJlZm9yZSBJIHN0YXJ0IHJldmlld2luZyB0aGlz LCBwZXJoYXBzICRzdWJqZWN0IHBhdGNoIGlzDQo+IHN0aWxsIGEgZ29vZCBzdGFydGluZyBwb2lu dCwgdGhlbiB3ZSBjYW4gYWRkIHN1cHBvcnQgZm9yIHRoZSBTRC9TRElPDQo+IHBhcnQvdmFyaWFu dCBvbiB0b3AgdG8gdGhlIHNhbWUgZHJpdmVyLiBXb3VsZCB0aGF0IG1ha2Ugc2Vuc2Ugb3IgZG8N Cj4geW91IHByZWZlciBhbm90aGVyIHBhdGggZm9yd2FyZD8NCj4gDQo+IEtpbmQgcmVnYXJkcw0K PiBVZmZlDQo+IA0KPiBbMV0NCj4gaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0 L2xpbnV4LW1tYy9saXN0Lz9zZXJpZXM9NjAxMTYwDQo+IA0KPiA+IC0tLQ0KPiA+IENoYW5nZXMg aW4gdjI6DQo+ID4gIC0gUmVtb3ZlIHVudXNlZCBjb2RlLg0KPiA+ICAtIE1vZGlmeSByZWFkL3dy aXRlIHJlZ2lzdGVyIGFkZHJlc3MuDQo+ID4NCj4gPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAg ICAgICAgIHwgICAgMSArDQo+ID4gIGRyaXZlcnMvbW1jL2hvc3Qvc3VucGx1c19tbWMuYyB8IDEy MDQNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAyIGZp bGVzIGNoYW5nZWQsIDEyMDUgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tbWMvaG9zdC9zdW5wbHVzX21tYy5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTUFJ TlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KPiA+IGluZGV4IDAxZWQ1N2EuLmJmOGMwNjYgMTAwNjQ0 DQo+ID4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gPiArKysgYi9NQUlOVEFJTkVSUw0KPiA+IEBAIC0x ODI0Niw2ICsxODI0Niw3IEBAIFNVTlBMVVMgTU1DIERSSVZFUg0KPiA+ICBNOiAgICAgVG9ueSBI dWFuZyA8dG9ueWh1YW5nLnN1bnBsdXNAZ21haWwuY29tPg0KPiA+ICBTOiAgICAgTWFpbnRhaW5l ZA0KPiA+ICBGOiAgICAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tY2Mvc3Vu cGx1LW1tYy55YW1sDQo+ID4gK0Y6ICAgICBkcml2ZXJzL21tYy9ob3N0L3N1bnBsdXNfbW1jLmMN Cj4gPg0KPiA+ICBTVVBFUkgNCj4gPiAgTTogICAgIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vy cy5zb3VyY2Vmb3JnZS5qcD4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zdW5w bHVzX21tYy5jDQo+IGIvZHJpdmVycy9tbWMvaG9zdC9zdW5wbHVzX21tYy5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi43ODcxNmNmDQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc3VucGx1c19tbWMuYw0KPiA+IEBAIC0w LDAgKzEsMTIwNCBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5DQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAoYykgU3VucGx1cyBJbmMuDQo+ID4gKyAq IEF1dGhvcjogVG9ueSBIdWFuZyA8dG9ueWh1YW5nLnN1bnBsdXNAZ21haWwuY29tPg0KPiA+ICsg Ki8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9tbWMvaG9zdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvbW1jL3Nsb3QtZ3Bpby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0 Lmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNQTU1DX01JTl9DTEsgICAgICAgICAgICAgICAgICA0 MDAwMDANCj4gPiArI2RlZmluZSBTUE1NQ19NQVhfQ0xLICAgICAgICAgICAgICAgICAgNTIwMDAw MDANCj4gPiArI2RlZmluZSBTUE1NQ19NQVhfQkxLX0NPVU5UICAgICAgICAgICAgNjU1MzYNCj4g PiArI2RlZmluZSBTUE1NQ19NQVhfVFVOQUJMRV9ETFkgIDcNCj4gPiArDQo+ID4gKyNkZWZpbmUg U1BNTUNfQ0FSRF9NRURJQVRZUEVfU1JDRFNUX1JFRyAweDAwMDANCj4gPiArI2RlZmluZSBTUE1N Q19NRURJQV9OT05FICAgICAgIDANCj4gPiArI2RlZmluZSBTUE1NQ19NRURJQV9TRCAgICAgICAg IDYNCj4gPiArI2RlZmluZSBTUE1NQ19NRURJQV9NUyAgICAgICAgIDcNCj4gPiArDQo+ID4gKyNk ZWZpbmUgU1BNTUNfU0RSQU1fU0VDVE9SXzBfU0laRV9SRUcgIDB4MDAwOA0KPiA+ICsjZGVmaW5l IFNQTU1DX0RNQV9CQVNFX0FERFJfUkVHDQo+IDB4MDAwQw0KPiA+ICsjZGVmaW5lIFNQTU1DX0hX X0RNQV9DVFJMX1JFRyAgICAgICAgICAgICAgICAgIDB4MDAxMA0KPiA+ICsjZGVmaW5lIFNQTU1D X01BWF9ETUFfTUVNT1JZX1NFQ1RPUlMgICA4DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNQTU1DX1NE UkFNX1NFQ1RPUl8xX0FERFJfUkVHIDB4MDAxOA0KPiA+ICsNCj4gPiArI2RlZmluZSBTUE1NQ19T RF9JTlRfUkVHICAgICAgIDB4MDA4OA0KPiA+ICsjZGVmaW5lIFNQTU1DX1NESU5UX1NEQ01QRU4g ICAgQklUKDApDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RJTlRfU0RDTVAgICAgICBCSVQoMSkNCj4g PiArI2RlZmluZSBTUE1NQ19TRElOVF9TRElPRU4gICAgIEJJVCgzKQ0KPiA+ICsjZGVmaW5lIFNQ TU1DX1NESU5UX1NESU8gICAgICAgQklUKDQpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNQTU1DX1NE X1BBR0VfTlVNX1JFRyAgMHgwMDhDDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RfQ09ORklHMF9SRUcg ICAweDAwOTANCj4gPiArI2RlZmluZSBTUE1NQ19NT0RFX1NEICAgICAgICAgICAgICAgICAgMA0K PiA+ICsjZGVmaW5lIFNQTU1DX01PREVfRU1NQyAgICAgICAgICAgICAgICAgICAgICAgIDENCj4g PiArI2RlZmluZSBTUE1NQ19NT0RFX1NESU8gICAgICAgICAgICAgICAgICAgICAgICAyDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFNQTU1DX1NESU9fQ1RSTF9SRUcgICAgICAgICAgICAweDAwOTQNCj4g PiArI2RlZmluZSBTUE1NQ19TRF9SU1RfUkVHICAgICAgICAgICAgICAgMHgwMDk4DQo+ID4gKyNk ZWZpbmUgU1BNTUNfU0RfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDA5Qw0KPiA+ICsNCj4gPiAr I2RlZmluZSBTUE1NQ19TRF9TVEFUVVNfUkVHDQo+IDB4MDBBMA0KPiA+ICsjZGVmaW5lIFNQTU1D X1NEU1RBVFVTX0RVTU1ZX1JFQURZDQo+IEJJVCgwKQ0KPiA+ICsjZGVmaW5lIFNQTU1DX1NEU1RB VFVTX1JTUF9CVUZfRlVMTA0KPiBCSVQoMSkNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRVU19U WF9EQVRBX0JVRl9FTVBUWSAgICAgICAgICAgICAgIEJJVCgyKQ0KPiA+ICsjZGVmaW5lIFNQTU1D X1NEU1RBVFVTX1JYX0RBVEFfQlVGX0ZVTEwNCj4gQklUKDMpDQo+ID4gKyNkZWZpbmUgU1BNTUNf U0RTVEFUVVNfQ01EX1BJTl9TVEFUVVMgICAgICAgICAgICAgICAgICBCSVQoNCkNCj4gPiArI2Rl ZmluZSBTUE1NQ19TRFNUQVRVU19EQVQwX1BJTl9TVEFUVVMgICAgICAgICAgICAgICAgIEJJVCg1 KQ0KPiA+ICsjZGVmaW5lIFNQTU1DX1NEU1RBVFVTX1JTUF9USU1FT1VUDQo+IEJJVCg2KQ0KPiA+ ICsjZGVmaW5lIFNQTU1DX1NEU1RBVFVTX0NBUkRfQ1JDX0NIRUNLX1RJTUVPVVQgIEJJVCg3KQ0K PiA+ICsjZGVmaW5lIFNQTU1DX1NEU1RBVFVTX1NUQl9USU1FT1VUDQo+IEJJVCg4KQ0KPiA+ICsj ZGVmaW5lIFNQTU1DX1NEU1RBVFVTX1JTUF9DUkM3X0VSUk9SICAgICAgICAgICAgICAgICAgQklU KDkpDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RTVEFUVVNfQ1JDX1RPS0VOX0NIRUNLX0VSUk9SICAg QklUKDEwKQ0KPiA+ICsjZGVmaW5lIFNQTU1DX1NEU1RBVFVTX1JEQVRBX0NSQzE2X0VSUk9SDQo+ IEJJVCgxMSkNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRVU19TVVNQRU5EX1NUQVRFX1JFQURZ DQo+IEJJVCgxMikNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRVU19CVVNZX0NZQ0xFDQo+IEJJ VCgxMykNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRVU19EQVQxX1BJTl9TVEFUVVMgICAgICAg ICAgICAgICAgIEJJVCgxNCkNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRVU19TRF9TRU5TRV9T VEFUVVMgICAgICAgICAgICAgICAgIEJJVCgxNSkNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRV U19CT09UX0FDS19USU1FT1VUDQo+IEJJVCgxNikNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRV U19CT09UX0RBVEFfVElNRU9VVA0KPiBCSVQoMTcpDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RTVEFU VVNfQk9PVF9BQ0tfRVJST1INCj4gQklUKDE4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBTUE1NQ19T RF9TVEFURV9SRUcgICAgICAgICAgICAgMHgwMEE0DQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RTVEFU RV9FUlJPUiAgICAgICAgICAgIEJJVCgxMykNCj4gPiArI2RlZmluZSBTUE1NQ19TRFNUQVRFX0ZJ TklTSCAgIEJJVCgxNCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RfSFdfU1RBVEVfUkVH ICAgICAgICAgIDB4MDBBOA0KPiA+ICsjZGVmaW5lIFNQTU1DX1NEX0JMT0NLU0laRV9SRUcgICAg ICAgICAweDAwQUMNCj4gPiArI2RlZmluZSBTUE1NQ19TRF9DT05GSUcxX1JFRyAgICAgICAgICAg MHgwMEIwDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RfVElNSU5HX0NPTkZJRzBfUkVHIDB4MDBCNA0K PiA+ICsjZGVmaW5lIFNQTU1DX1NEX1BJT0RBVEFUWF9SRUcgICAgICAgICAweDAwQkMNCj4gPiAr I2RlZmluZSBTUE1NQ19TRF9QSU9EQVRBUlhfUkVHICAgICAgICAgMHgwMEMwDQo+ID4gKyNkZWZp bmUgU1BNTUNfU0RfQ01EQlVGMF8zX1JFRyAgICAgICAgIDB4MDBDNA0KPiA+ICsjZGVmaW5lIFNQ TU1DX1NEX0NNREJVRjRfUkVHICAgICAgICAgICAweDAwQzgNCj4gPiArI2RlZmluZSBTUE1NQ19T RF9SU1BCVUYwXzNfUkVHICAgICAgICAgMHgwMENDDQo+ID4gKyNkZWZpbmUgU1BNTUNfU0RfUlNQ QlVGNF81X1JFRyAgICAgICAgIDB4MDBEMA0KPiA+ICsNCj4gPiArc3RydWN0IHNwbW1jX3R1bmlu Z19pbmZvIHsNCj4gPiArICAgICAgIGludCBlbmFibGVfdHVuaW5nOw0KPiA+ICsgICAgICAgaW50 IG5lZWRfdHVuaW5nOw0KPiA+ICsjZGVmaW5lIFNQTU1DX01BWF9SRVRSSUVTICg4ICogOCkNCj4g PiArICAgICAgIGludCByZXRyaWVkOyAvKiBob3cgbWFueSB0aW1lcyBoYXMgYmVlbiByZXRyaWVk ICovDQo+ID4gKyAgICAgICB1MzIgcmRfY3JjX2RseTozOw0KPiA+ICsgICAgICAgdTMyIHJkX2Rh dF9kbHk6MzsNCj4gPiArICAgICAgIHUzMiByZF9yc3BfZGx5OjM7DQo+ID4gKyAgICAgICB1MzIg d3JfY21kX2RseTozOw0KPiA+ICsgICAgICAgdTMyIHdyX2RhdF9kbHk6MzsNCj4gPiArICAgICAg IHUzMiBjbGtfZGx5OjM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qgc3BtbWNfaG9zdCB7 DQo+ID4gKyAgICAgICB2b2lkIF9faW9tZW0gKmJhc2U7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xr ICpjbGs7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YzsNCj4gPiArICAg ICAgIGludCBtb2RlOyAvKiBTRC9TRElPL2VNTUMgKi8NCj4gPiArICAgICAgIHNwaW5sb2NrX3Qg bG9jazsgLyogY29udHJvbGxlciBsb2NrICovDQo+ID4gKyAgICAgICBzdHJ1Y3QgbXV0ZXggbXJx X2xvY2s7DQo+ID4gKyAgICAgICAvKiB0YXNrbGV0IHVzZWQgdG8gaGFuZGxlIGVycm9yIHRoZW4g ZmluaXNoIHRoZSByZXF1ZXN0ICovDQo+ID4gKyAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg dHNrbGV0X2ZpbmlzaF9yZXE7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsNCj4g PiArICAgICAgIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxOyAvKiBjdXJyZW50IG1ycSAqLw0KPiA+ ICsNCj4gPiArICAgICAgIGludCBpcnE7DQo+ID4gKyAgICAgICBpbnQgdXNlX2ludDsgLyogc2hv dWxkIHJhaXNlIGlycSB3aGVuIGRvbmU/ICovDQo+ID4gKyAgICAgICBpbnQgcG93ZXJfc3RhdGU7 IC8qIGN1cnJlbnQgcG93ZXIgc3RhdGU6IG9mZi91cC9vbiAqLw0KPiA+ICsgICAgICAgaW50IGRk cl9lbmFibGVkOw0KPiA+ICsgICAgICAgaW50IHNpZ25hbF92b2x0YWdlOw0KPiA+ICsjZGVmaW5l IFNQTU1DX0RNQV9NT0RFIDANCj4gPiArI2RlZmluZSBTUE1NQ19QSU9fTU9ERSAxDQo+ID4gKyAg ICAgICBpbnQgZG1hcGlvX21vZGU7DQo+ID4gKyAgICAgICAvKiBmb3IgcHVycG9zZSBvZiByZWR1 Y2luZyBjb250ZXh0IHN3aXRjaCwgb25seSB3aGVuIHRyYW5zZmVyIGRhdGENCj4gdGhhdCovDQo+ ID4gKyAgICAgICAvKiBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIGBkbWFfaW50X3RocmVzaG9sZCcg c2hvdWxkIHVzZSBpbnRlcnJ1cHQNCj4gKi8NCj4gPiArICAgICAgIGludCBkbWFfaW50X3RocmVz aG9sZDsNCj4gPiArICAgICAgIHN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIgc2dfbWl0ZXI7IC8qIGZv ciBwaW8gbW9kZSB0byBhY2Nlc3Mgc2dsaXN0DQo+ICovDQo+ID4gKyAgICAgICBpbnQgZG1hX3Vz ZV9pbnQ7IC8qIHNob3VsZCByYWlzZSBpcnEgd2hlbiBkbWEgZG9uZSAqLw0KPiA+ICsgICAgICAg c3RydWN0IHNwbW1jX3R1bmluZ19pbmZvIHR1bmluZ19pbmZvOw0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGNvbnN0IHU4IHR1bmluZ19ibGtfcGF0dGVybl80Yml0W10gPSB7DQo+ID4gKyAg ICAgICAweGZmLCAweDBmLCAweGZmLCAweDAwLCAweGZmLCAweGNjLCAweGMzLCAweGNjLA0KPiA+ ICsgICAgICAgMHhjMywgMHgzYywgMHhjYywgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZSwgMHhlZiwN Cj4gPiArICAgICAgIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZGQsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4 ZmIsDQo+ID4gKyAgICAgICAweGJmLCAweGZmLCAweDdmLCAweGZmLCAweDc3LCAweGY3LCAweGJk LCAweGVmLA0KPiA+ICsgICAgICAgMHhmZiwgMHhmMCwgMHhmZiwgMHhmMCwgMHgwZiwgMHhmYywg MHhjYywgMHgzYywNCj4gPiArICAgICAgIDB4Y2MsIDB4MzMsIDB4Y2MsIDB4Y2YsIDB4ZmYsIDB4 ZWYsIDB4ZmYsIDB4ZWUsDQo+ID4gKyAgICAgICAweGZmLCAweGZkLCAweGZmLCAweGZkLCAweGRm LCAweGZmLCAweGJmLCAweGZmLA0KPiA+ICsgICAgICAgMHhiYiwgMHhmZiwgMHhmNywgMHhmZiwg MHhmNywgMHg3ZiwgMHg3YiwgMHhkZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCB1OCB0dW5pbmdfYmxrX3BhdHRlcm5fOGJpdFtdID0gew0KPiA+ICsgICAgICAgMHhmZiwgMHhm ZiwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwNCj4gPiArICAgICAgIDB4ZmYs IDB4ZmYsIDB4Y2MsIDB4Y2MsIDB4Y2MsIDB4MzMsIDB4Y2MsIDB4Y2MsDQo+ID4gKyAgICAgICAw eGNjLCAweDMzLCAweDMzLCAweGNjLCAweGNjLCAweGNjLCAweGZmLCAweGZmLA0KPiA+ICsgICAg ICAgMHhmZiwgMHhlZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwgMHhlZSwgMHhmZiwNCj4gPiAr ICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZGQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGQsIDB4ZGQsDQo+ ID4gKyAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGJiLCAweGZmLCAweGZmLCAweGZmLCAweGJi LA0KPiA+ICsgICAgICAgMHhiYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3NywgMHhmZiwgMHhmZiwg MHhmZiwNCj4gPiArICAgICAgIDB4NzcsIDB4NzcsIDB4ZmYsIDB4NzcsIDB4YmIsIDB4ZGQsIDB4 ZWUsIDB4ZmYsDQo+ID4gKyAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweGZmLCAweGZm LCAweGZmLCAweDAwLA0KPiA+ICsgICAgICAgMHgwMCwgMHhmZiwgMHhmZiwgMHhjYywgMHhjYywg MHhjYywgMHgzMywgMHhjYywNCj4gPiArICAgICAgIDB4Y2MsIDB4Y2MsIDB4MzMsIDB4MzMsIDB4 Y2MsIDB4Y2MsIDB4Y2MsIDB4ZmYsDQo+ID4gKyAgICAgICAweGZmLCAweGZmLCAweGVlLCAweGZm LCAweGZmLCAweGZmLCAweGVlLCAweGVlLA0KPiA+ICsgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwg MHhkZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZCwNCj4gPiArICAgICAgIDB4ZGQsIDB4ZmYsIDB4 ZmYsIDB4ZmYsIDB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsDQo+ID4gKyAgICAgICAweGJiLCAweGJi LCAweGZmLCAweGZmLCAweGZmLCAweDc3LCAweGZmLCAweGZmLA0KPiA+ICsgICAgICAgMHhmZiwg MHg3NywgMHg3NywgMHhmZiwgMHg3NywgMHhiYiwgMHhkZCwgMHhlZSwNCj4gPiArfTsNCj4gPiAr DQo+ID4gKy8qIFByb2R1Y2VzIGEgbWFzayBvZiBzZXQgYml0cyBjb3ZlcmluZyBhIHJhbmdlIG9m IGEgMzItYml0IHZhbHVlICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIGJpdGZpZWxkX21hc2so dTMyIHNoaWZ0LCB1MzIgd2lkdGgpDQo+ID4gK3sNCj4gPiArICAgICAgIHJldHVybiAoKDEgPDwg d2lkdGgpIC0gMSkgPDwgc2hpZnQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEV4dHJhY3QgdGhl IHZhbHVlIG9mIGEgYml0ZmllbGQgZm91bmQgd2l0aGluIGEgZ2l2ZW4gcmVnaXN0ZXIgdmFsdWUg Ki8NCj4gPiArc3RhdGljIGlubGluZSB1MzIgYml0ZmllbGRfZXh0cmFjdCh1MzIgcmVnX3ZhbCwg dTMyIHNoaWZ0LCB1MzIgd2lkdGgpDQo+ID4gK3sNCj4gPiArICAgICAgIHJldHVybiAocmVnX3Zh bCAmIGJpdGZpZWxkX21hc2soc2hpZnQsIHdpZHRoKSkgPj4gc2hpZnQ7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qIFJlcGxhY2UgdGhlIHZhbHVlIG9mIGEgYml0ZmllbGQgZm91bmQgd2l0aGluIGEg Z2l2ZW4gcmVnaXN0ZXIgdmFsdWUgKi8NCj4gPiArc3RhdGljIGlubGluZSB1MzIgYml0ZmllbGRf cmVwbGFjZSh1MzIgcmVnX3ZhbCwgdTMyIHNoaWZ0LCB1MzIgd2lkdGgsIHUzMiB2YWwpDQo+ID4g K3sNCj4gPiArICAgICAgIHUzMiBtYXNrID0gYml0ZmllbGRfbWFzayhzaGlmdCwgd2lkdGgpOw0K PiA+ICsNCj4gPiArICAgICAgIHJldHVybiAocmVnX3ZhbCAmIH5tYXNrKSB8ICh2YWwgPDwgc2hp ZnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogd2FpdCBmb3IgdHJhbnNhY3Rp b24gZG9uZSwgcmV0dXJuIC0xIGlmIGVycm9yLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlubGlu ZSBpbnQgc3BtbWNfd2FpdF9maW5pc2goc3RydWN0IHNwbW1jX2hvc3QgKmhvc3QpDQo+ID4gK3sN Cj4gPiArICAgICAgIC8qIFdhaXQgZm9yIHRyYW5zYWN0aW9uIGZpbmlzaCAqLw0KPiA+ICsgICAg ICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAw MCk7DQo+ID4gKw0KPiA+ICsgICAgICAgd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVv dXQpKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZWFkbChob3N0LT5iYXNlICsgU1BNTUNf U0RfU1RBVEVfUkVHKSAmDQo+IFNQTU1DX1NEU1RBVEVfRklOSVNIKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAocmVhZGwoaG9z dC0+YmFzZSArIFNQTU1DX1NEX1NUQVRFX1JFRykgJg0KPiBTUE1NQ19TRFNUQVRFX0VSUk9SKQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gPiArICAgICAgIH0NCj4g PiArICAgICAgIHJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBp bnQgc3BtbWNfd2FpdF9zZHN0YXR1cyhzdHJ1Y3Qgc3BtbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQN Cj4gaW50IHN0YXR1c19iaXQpDQo+ID4gK3sNCj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgdGlt ZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMDApOw0KPiA+ICsNCj4gPiArICAg ICAgIHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgew0KPiA+ICsgICAgICAg ICAgICAgICBpZiAocmVhZGwoaG9zdC0+YmFzZSArIFNQTU1DX1NEX1NUQVRVU19SRUcpICYNCj4g c3RhdHVzX2JpdCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiAr ICAgICAgICAgICAgICAgaWYgKHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9TVEFURV9SRUcp ICYNCj4gU1BNTUNfU0RTVEFURV9FUlJPUikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLTE7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICByZXR1cm4gLTE7DQo+ID4gK30N Cj4gPiArDQo+ID4gKyNkZWZpbmUgc3BtbWNfd2FpdF9yc3BidWZfZnVsbChob3N0KSBzcG1tY193 YWl0X3Nkc3RhdHVzKGhvc3QsDQo+IFNQTU1DX1NEU1RBVFVTX1JTUF9CVUZfRlVMTCkNCj4gPiAr I2RlZmluZSBzcG1tY193YWl0X3J4YnVmX2Z1bGwoaG9zdCkgc3BtbWNfd2FpdF9zZHN0YXR1cyho b3N0LA0KPiBTUE1NQ19TRFNUQVRVU19SWF9EQVRBX0JVRl9GVUxMKQ0KPiA+ICsjZGVmaW5lIHNw bW1jX3dhaXRfdHhidWZfZW1wdHkoaG9zdCkgc3BtbWNfd2FpdF9zZHN0YXR1cyhob3N0LA0KPiBT UE1NQ19TRFNUQVRVU19UWF9EQVRBX0JVRl9FTVBUWSkNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHNwbW1jX2dldF9yc3Aoc3RydWN0IHNwbW1jX2hvc3QgKmhvc3QsIHN0cnVjdA0KPiBtbWNfY29t bWFuZCAqY21kKQ0KPiA+ICt7DQo+ID4gKyAgICAgICB1MzIgdmFsdWUwXzMsIHZhbHVlNF81Ow0K PiA+ICsNCj4gPiArICAgICAgIGlmICh1bmxpa2VseSghKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BS RVNFTlQpKSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgICAgaWYgKHVu bGlrZWx5KGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikpIHsNCj4gPiArICAgICAgICAgICAgICAg aWYgKHNwbW1jX3dhaXRfcnNwYnVmX2Z1bGwoaG9zdCkpDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuOw0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZTBfMyA9IHJlYWRsKGhvc3Qt PmJhc2UgKw0KPiBTUE1NQ19TRF9SU1BCVUYwXzNfUkVHKTsNCj4gPiArICAgICAgICAgICAgICAg dmFsdWU0XzUgPSByZWFkbChob3N0LT5iYXNlICsNCj4gU1BNTUNfU0RfUlNQQlVGNF81X1JFRykg JiAweGZmZmY7DQo+ID4gKyAgICAgICAgICAgICAgIGNtZC0+cmVzcFswXSA9ICh2YWx1ZTBfMyA8 PCA4KSB8ICh2YWx1ZTRfNSA+PiA4KTsNCj4gPiArICAgICAgICAgICAgICAgY21kLT5yZXNwWzFd ID0gdmFsdWU0XzUgPDwgMjQ7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlMF8zID0gcmVhZGwo aG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1JTUEJVRjBfM19SRUcpOw0KPiA+ICsgICAgICAgICAg ICAgICB2YWx1ZTRfNSA9IHJlYWRsKGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19TRF9SU1BCVUY0XzVf UkVHKSAmIDB4ZmZmZjsNCj4gPiArICAgICAgICAgICAgICAgY21kLT5yZXNwWzFdIHw9IHZhbHVl MF8zID4+IDg7DQo+ID4gKyAgICAgICAgICAgICAgIGNtZC0+cmVzcFsyXSA9IHZhbHVlMF8zIDw8 IDI0Ow0KPiA+ICsgICAgICAgICAgICAgICBjbWQtPnJlc3BbMl0gfD0gdmFsdWU0XzUgPDwgODsN Cj4gPiArICAgICAgICAgICAgICAgdmFsdWUwXzMgPSByZWFkbChob3N0LT5iYXNlICsNCj4gU1BN TUNfU0RfUlNQQlVGMF8zX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlNF81ID0gcmVh ZGwoaG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1JTUEJVRjRfNV9SRUcpICYgMHhmZmZmOw0KPiA+ ICsgICAgICAgICAgICAgICBjbWQtPnJlc3BbMl0gfD0gdmFsdWUwXzMgPj4gMjQ7DQo+ID4gKyAg ICAgICAgICAgICAgIGNtZC0+cmVzcFszXSA9IHZhbHVlMF8zIDw8IDg7DQo+ID4gKyAgICAgICAg ICAgICAgIGNtZC0+cmVzcFszXSB8PSB2YWx1ZTRfNSA+PiA4Ow0KPiA+ICsgICAgICAgfSBlbHNl IHsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHNwbW1jX3dhaXRfcnNwYnVmX2Z1bGwoaG9zdCkp DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgICAgICAgICAg ICB2YWx1ZTBfMyA9IHJlYWRsKGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19TRF9SU1BCVUYwXzNfUkVH KTsNCj4gPiArICAgICAgICAgICAgICAgdmFsdWU0XzUgPSByZWFkbChob3N0LT5iYXNlICsNCj4g U1BNTUNfU0RfUlNQQlVGNF81X1JFRykgJiAweGZmZmY7DQo+ID4gKyAgICAgICAgICAgICAgIGNt ZC0+cmVzcFswXSA9ICh2YWx1ZTBfMyA8PCA4KSB8ICh2YWx1ZTRfNSA+PiA4KTsNCj4gPiArICAg ICAgICAgICAgICAgY21kLT5yZXNwWzFdID0gdmFsdWU0XzUgPDwgMjQ7DQo+ID4gKyAgICAgICB9 DQo+ID4gKyAgICAgICAvL3JldHVybjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg c3BtbWNfc2V0X2J1c19jbGsoc3RydWN0IHNwbW1jX2hvc3QgKmhvc3QsIGludCBjbGspDQo+ID4g K3sNCj4gPiArICAgICAgIHVuc2lnbmVkIGludCBjbGtkaXY7DQo+ID4gKyAgICAgICBpbnQgZl9t aW4gPSBob3N0LT5tbWMtPmZfbWluOw0KPiA+ICsgICAgICAgaW50IGZfbWF4ID0gaG9zdC0+bW1j LT5mX21heDsNCj4gPiArICAgICAgIHUzMiB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1N Q19TRF9DT05GSUcwX1JFRyk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKGNsayA8IGZfbWluKQ0K PiA+ICsgICAgICAgICAgICAgICBjbGsgPSBmX21pbjsNCj4gPiArICAgICAgIGlmIChjbGsgPiBm X21heCkNCj4gPiArICAgICAgICAgICAgICAgY2xrID0gZl9tYXg7DQo+ID4gKw0KPiA+ICsgICAg ICAgY2xrZGl2ID0gKGNsa19nZXRfcmF0ZShob3N0LT5jbGspICsgY2xrKSAvIGNsayAtIDE7DQo+ ID4gKyAgICAgICBpZiAoY2xrZGl2ID4gMHhmZmYpDQo+ID4gKyAgICAgICAgICAgICAgIGNsa2Rp diA9IDB4ZmZmOw0KPiA+ICsNCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2 YWx1ZSwgMjAsIDEyLCBjbGtkaXYpOw0KPiA+ICsgICAgICAgd3JpdGVsKHZhbHVlLCBob3N0LT5i YXNlICsgU1BNTUNfU0RfQ09ORklHMF9SRUcpOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIEluIG9y ZGVyIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGNvbnRleHQgc3dpdGNoLA0KPiA+ICsgICAg ICAgICogaWYgaXQgaXMgaGlnaCBzcGVlZCBvciB1cHBlciwgd2UgZG8gbm90IHVzZSBpbnRlcnJ1 cHQNCj4gPiArICAgICAgICAqIHdoZW4gc2VuZCBhIGNvbW1hbmQgdGhhdCB3aXRob3V0IGRhdGEg dHJhbnNmZXJyaW5nLg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICBpZiAoY2xrID4gMjUw MDAwMDApDQo+ID4gKyAgICAgICAgICAgICAgIGhvc3QtPnVzZV9pbnQgPSAwOw0KPiA+ICsgICAg ICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICBob3N0LT51c2VfaW50ID0gMTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3BtbWNfc2V0X2J1c190aW1pbmcoc3RydWN0IHNwbW1j X2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludA0KPiB0aW1pbmcpDQo+ID4gK3sNCj4gPiArICAgICAg IHUzMiB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05GSUcxX1JFRyk7DQo+ ID4gKyAgICAgICBpbnQgY2xrZGl2ID0gcmVhZGwoaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJ RzBfUkVHKSA+PiAyMDsNCj4gPiArICAgICAgIGludCBkZWxheSA9IGNsa2RpdiAvIDIgPCA3ID8g Y2xrZGl2IC8gMiA6IDc7DQo+ID4gKyAgICAgICBpbnQgaHNfZW4gPSAxOw0KPiA+ICsgICAgICAg Y2hhciAqdGltaW5nX25hbWU7DQo+ID4gKw0KPiA+ICsgICAgICAgaG9zdC0+ZGRyX2VuYWJsZWQg PSAwOw0KPiA+ICsgICAgICAgc3dpdGNoICh0aW1pbmcpIHsNCj4gPiArICAgICAgIGNhc2UgTU1D X1RJTUlOR19MRUdBQ1k6DQo+ID4gKyAgICAgICAgICAgICAgIGhzX2VuID0gMDsNCj4gPiArICAg ICAgICAgICAgICAgdGltaW5nX25hbWUgPSAibGVnYWN5IjsNCj4gPiArICAgICAgICAgICAgICAg YnJlYWs7DQo+ID4gKyAgICAgICBjYXNlIE1NQ19USU1JTkdfTU1DX0hTOg0KPiA+ICsgICAgICAg ICAgICAgICB0aW1pbmdfbmFtZSA9ICJtbWMgaGlnaC1zcGVlZCI7DQo+ID4gKyAgICAgICAgICAg ICAgIGJyZWFrOw0KPiA+ICsgICAgICAgY2FzZSBNTUNfVElNSU5HX1NEX0hTOg0KPiA+ICsgICAg ICAgICAgICAgICB0aW1pbmdfbmFtZSA9ICJzZCBoaWdoLXNwZWVkIjsNCj4gPiArICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICBjYXNlIE1NQ19USU1JTkdfVUhTX1NEUjUwOg0KPiA+ ICsgICAgICAgICAgICAgICB0aW1pbmdfbmFtZSA9ICJzZCB1aHMgU0RSNTAiOw0KPiA+ICsgICAg ICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIGNhc2UgTU1DX1RJTUlOR19VSFNfU0RSMTA0 Og0KPiA+ICsgICAgICAgICAgICAgICB0aW1pbmdfbmFtZSA9ICJzZCB1aHMgU0RSMTA0IjsNCj4g PiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICBjYXNlIE1NQ19USU1JTkdfVUhT X0REUjUwOg0KPiA+ICsgICAgICAgICAgICAgICBob3N0LT5kZHJfZW5hYmxlZCA9IDE7DQo+ID4g KyAgICAgICAgICAgICAgIHRpbWluZ19uYW1lID0gInNkIHVocyBERFI1MCI7DQo+ID4gKyAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgY2FzZSBNTUNfVElNSU5HX01NQ19ERFI1MjoN Cj4gPiArICAgICAgICAgICAgICAgaG9zdC0+ZGRyX2VuYWJsZWQgPSAxOw0KPiA+ICsgICAgICAg ICAgICAgICB0aW1pbmdfbmFtZSA9ICJtbWMgRERSNTIiOw0KPiA+ICsgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICAgIGNhc2UgTU1DX1RJTUlOR19NTUNfSFMyMDA6DQo+ID4gKyAgICAg ICAgICAgICAgIHRpbWluZ19uYW1lID0gIm1tYyBIUzIwMCI7DQo+ID4gKyAgICAgICAgICAgICAg IGJyZWFrOw0KPiA+ICsgICAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgICAgdGltaW5n X25hbWUgPSAiaW52YWxpZCI7DQo+ID4gKyAgICAgICAgICAgICAgIGhzX2VuID0gMDsNCj4gPiAr ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAg aWYgKGhzX2VuKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFj ZSh2YWx1ZSwgMzEsIDEsIDEpOyAvKg0KPiBzZF9oaWdoX3NwZWVkX2VuICovDQo+ID4gKyAgICAg ICAgICAgICAgIHdyaXRlbCh2YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJRzFfUkVH KTsNCj4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSByZWFkbChob3N0LT5iYXNlICsNCj4gU1BN TUNfU0RfVElNSU5HX0NPTkZJRzBfUkVHKTsNCj4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSBi aXRmaWVsZF9yZXBsYWNlKHZhbHVlLCA0LCAzLCBkZWxheSk7IC8qDQo+IHNkX3dyX2RhdF9kbHlf c2VsICovDQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1 ZSwgOCwgMywgZGVsYXkpOyAvKg0KPiBzZF93cl9jbWRfZGx5X3NlbCAqLw0KPiA+ICsgICAgICAg ICAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19TRF9USU1JTkdfQ09O RklHMF9SRUcpOw0KPiA+ICsgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgdmFs dWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAzMSwgMSwgMCk7DQo+ID4gKyAgICAgICAgICAg ICAgIHdyaXRlbCh2YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJRzFfUkVHKTsNCj4g PiArICAgICAgIH0NCj4gPiArICAgICAgIGlmIChob3N0LT5kZHJfZW5hYmxlZCkgew0KPiA+ICsg ICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05GSUcw X1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1 ZSwgMSwgMSwgMSk7IC8qIHNkZGRybW9kZSAqLw0KPiA+ICsgICAgICAgICAgICAgICB3cml0ZWwo dmFsdWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05GSUcwX1JFRyk7DQo+ID4gKyAgICAgICB9 IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBT UE1NQ19TRF9DT05GSUcwX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0Zmll bGRfcmVwbGFjZSh2YWx1ZSwgMSwgMSwgMCk7DQo+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbCh2 YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJRzBfUkVHKTsNCj4gPiArICAgICAgIH0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3BtbWNfc2V0X2J1c193aWR0aChzdHJ1 Y3Qgc3BtbWNfaG9zdCAqaG9zdCwgaW50IHdpZHRoKQ0KPiA+ICt7DQo+ID4gKyAgICAgICB1MzIg dmFsdWUgPSByZWFkbChob3N0LT5iYXNlICsgU1BNTUNfU0RfQ09ORklHMF9SRUcpOw0KPiA+ICsg ICAgICAgaW50IGJ1c193aWR0aDsNCj4gPiArDQo+ID4gKyAgICAgICBzd2l0Y2ggKHdpZHRoKSB7 DQo+ID4gKyAgICAgICBjYXNlIE1NQ19CVVNfV0lEVEhfODoNCj4gPiArICAgICAgICAgICAgICAg dmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxMSwgMSwgMCk7DQo+ID4gKyAgICAgICAg ICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgMTgsIDEsIDEpOw0KPiA+ICsg ICAgICAgICAgICAgICBidXNfd2lkdGggPSA4Ow0KPiA+ICsgICAgICAgICAgICAgICBicmVhazsN Cj4gPiArICAgICAgIGNhc2UgTU1DX0JVU19XSURUSF80Og0KPiA+ICsgICAgICAgICAgICAgICB2 YWx1ZSA9IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDExLCAxLCAxKTsNCj4gPiArICAgICAgICAg ICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxOCwgMSwgMCk7DQo+ID4gKyAg ICAgICAgICAgICAgIGJ1c193aWR0aCA9IDQ7DQo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSBiaXRmaWVs ZF9yZXBsYWNlKHZhbHVlLCAxMSwgMSwgMCk7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0g Yml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgMTgsIDEsIDApOw0KPiA+ICsgICAgICAgICAgICAgICBi dXNfd2lkdGggPSAxOw0KPiA+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIH07 DQo+ID4gKyAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05GSUcw X1JFRyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzZWxlY3QgdGhlIHdvcmtp bmcgbW9kZSBvZiBjb250cm9sbGVyOiBzZC9zZGlvL2VtbWMNCj4gPiArICovDQo+ID4gK3N0YXRp YyB2b2lkIHNwbW1jX3NlbGVjdF9tb2RlKHN0cnVjdCBzcG1tY19ob3N0ICpob3N0LCBpbnQgbW9k ZSkNCj4gPiArew0KPiA+ICsgICAgICAgdTMyIHZhbHVlID0gcmVhZGwoaG9zdC0+YmFzZSArIFNQ TU1DX1NEX0NPTkZJRzBfUkVHKTsNCj4gPiArDQo+ID4gKyAgICAgICBob3N0LT5tb2RlID0gbW9k ZTsNCj4gPiArICAgICAgIC8qIHNldCBgc2RtbWNtb2RlJywgYXMgaXQgd2lsbCBzYW1wbGUgZGF0 YSBhdCBmYWxsIGVkZ2UgKi8NCj4gPiArICAgICAgIC8qIG9mIFNEIGJ1cyBjbG9jayBpZiBgc2Rt bWNtb2RlJyBpcyBub3Qgc2V0IHdoZW4gKi8NCj4gPiArICAgICAgIC8qIGBzZF9oaWdoX3NwZWVk X2VuJyBpcyBub3Qgc2V0LCB3aGljaCBpcyBub3QgY29tcGxpYW50ICovDQo+ID4gKyAgICAgICAv KiB3aXRoIFNEIHNwZWNpZmljYXRpb24gKi8NCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRf cmVwbGFjZSh2YWx1ZSwgMTAsIDEsIDEpOw0KPiA+ICsgICAgICAgc3dpdGNoIChtb2RlKSB7DQo+ ID4gKyAgICAgICBjYXNlIFNQTU1DX01PREVfRU1NQzoNCj4gPiArICAgICAgICAgICAgICAgdmFs dWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCA5LCAxLCAwKTsNCj4gPiArICAgICAgICAgICAg ICAgd3JpdGVsKHZhbHVlLCBob3N0LT5iYXNlICsgU1BNTUNfU0RfQ09ORklHMF9SRUcpOw0KPiA+ ICsgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIGNhc2UgU1BNTUNfTU9ERV9TRElP Og0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDks IDEsIDEpOw0KPiA+ICsgICAgICAgICAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBT UE1NQ19TRF9DT05GSUcwX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZGwo aG9zdC0+YmFzZSArIFNQTU1DX1NESU9fQ1RSTF9SRUcpOw0KPiA+ICsgICAgICAgICAgICAgICB2 YWx1ZSA9IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDYsIDEsIDEpOyAvKiBpbnRfbXVsdGlfdHJp Zw0KPiAqLw0KPiA+ICsgICAgICAgICAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBT UE1NQ19TRElPX0NUUkxfUkVHKTsNCj4gPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAg ICAgICBjYXNlIFNQTU1DX01PREVfU0Q6DQo+ID4gKyAgICAgICBkZWZhdWx0Og0KPiA+ICsgICAg ICAgICAgICAgICB2YWx1ZSA9IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDksIDEsIDApOw0KPiA+ ICsgICAgICAgICAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05G SUcwX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzcG1tY19zd19yZXNldChzdHJ1Y3Qgc3BtbWNf aG9zdCAqaG9zdCkNCj4gPiArew0KPiA+ICsgICAgICAgdTMyIHZhbHVlOw0KPiA+ICsNCj4gPiAr ICAgICAgIC8qIE11c3QgcmVzZXQgZG1hIG9wZXJhdGlvbiBmaXJzdCwgb3IgaXQgd2lsbCovDQo+ ID4gKyAgICAgICAvKiBiZSBzdHVjayBvbiBzZF9zdGF0ZSA9PSAweDFjMDAgYmVjYXVzZSBvZiov DQo+ID4gKyAgICAgICAvKiBhIGNvbnRyb2xsZXIgc29mdHdhcmUgcmVzZXQgYnVnICovDQo+ID4g KyAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1NQ19IV19ETUFfQ1RSTF9SRUcp Ow0KPiA+ICsgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxMCwgMSwgMSk7 DQo+ID4gKyAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19IV19ETUFfQ1RS TF9SRUcpOw0KPiA+ICsgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxMCwg MSwgMCk7DQo+ID4gKyAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19IV19E TUFfQ1RSTF9SRUcpOw0KPiA+ICsgICAgICAgdmFsdWUgPSByZWFkbChob3N0LT5iYXNlICsgU1BN TUNfSFdfRE1BX0NUUkxfUkVHKTsNCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFj ZSh2YWx1ZSwgOSwgMSwgMSk7DQo+ID4gKyAgICAgICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2Ug KyBTUE1NQ19IV19ETUFfQ1RSTF9SRUcpOw0KPiA+ICsgICAgICAgd3JpdGVsKDB4NywgaG9zdC0+ YmFzZSArIFNQTU1DX1NEX1JTVF9SRUcpOw0KPiA+ICsgICAgICAgd2hpbGUgKHJlYWRsKGhvc3Qt PmJhc2UgKyBTUE1NQ19TRF9IV19TVEFURV9SRUcpICYgQklUKDYpKQ0KPiA+ICsgICAgICAgICAg ICAgICA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNwbW1jX3ByZXBhcmVfY21k KHN0cnVjdCBzcG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QNCj4gbW1jX2NvbW1hbmQgKmNtZCkNCj4g PiArew0KPiA+ICsgICAgICAgdTMyIHZhbHVlOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIGFkZCBz dGFydCBiaXQsIGFjY29yZGluZyB0byBzcGVjLCBjb21tYW5kIGZvcm1hdCAqLw0KPiA+ICsgICAg ICAgdmFsdWUgPSAoKGNtZC0+b3Bjb2RlIHwgMHg0MCkgPDwgMjQpIHwgKGNtZC0+YXJnID4+IDgp Ow0KPiA+ICsgICAgICAgd3JpdGVsKHZhbHVlLCBob3N0LT5iYXNlICsgU1BNTUNfU0RfQ01EQlVG MF8zX1JFRyk7DQo+ID4gKyAgICAgICB3cml0ZWIoY21kLT5hcmcgJiAweGZmLCBob3N0LT5iYXNl ICsNCj4gU1BNTUNfU0RfQ01EQlVGNF9SRUcpOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIGRpc2Fi bGUgaW50ZXJydXB0IGlmIG5lZWRlZCAqLw0KPiA+ICsgICAgICAgdmFsdWUgPSByZWFkbChob3N0 LT5iYXNlICsgU1BNTUNfU0RfSU5UX1JFRyk7DQo+ID4gKyAgICAgICB2YWx1ZSA9IGJpdGZpZWxk X3JlcGxhY2UodmFsdWUsIDIsIDEsIDEpOyAvKiBzZF9jbXBfY2xyICovDQo+ID4gKyAgICAgICBp ZiAobGlrZWx5KCFob3N0LT51c2VfaW50IHx8IGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikpDQo+ ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgMCwgMSwg MCk7IC8qIHNkY21wZW4gKi8NCj4gPiArICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAg dmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAwLCAxLCAxKTsNCj4gPiArICAgICAgIHdy aXRlbCh2YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0lOVF9SRUcpOw0KPiA+ICsNCj4gPiAr ICAgICAgIHZhbHVlID0gcmVhZGwoaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJRzBfUkVHKTsN Cj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgNCwgMiwgMCk7IC8q IHNkX3RyYW5zX21vZGUgKi8NCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2 YWx1ZSwgNywgMSwgMSk7IC8qIHNkY21kZHVtbXkgKi8NCj4gPiArICAgICAgIGlmIChsaWtlbHko Y21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkpIHsNCj4gPiArICAgICAgICAgICAgICAgdmFs dWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCA2LCAxLCAxKTsgLyogc2RhdXRvcnNwICovDQo+ ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdGZpZWxk X3JlcGxhY2UodmFsdWUsIDYsIDEsIDApOw0KPiA+ICsgICAgICAgICAgICAgICB3cml0ZWwodmFs dWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05GSUcwX1JFRyk7DQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIC8qDQo+ID4gKyAgICAgICAg KiBDdXJyZW50bHksIGhvc3QgaXMgbm90IGNhcGFibGUgb2YgY2hlY2tpbmcgUjIncyBDUkM3LA0K PiA+ICsgICAgICAgICogdGh1cywgZW5hYmxlIGNyYzcgY2hlY2sgb25seSBmb3IgNDggYml0IHJl c3BvbnNlIGNvbW1hbmRzDQo+ID4gKyAgICAgICAgKi8NCj4gPiArICAgICAgIGlmIChsaWtlbHko Y21kLT5mbGFncyAmIE1NQ19SU1BfQ1JDICYmICEoY21kLT5mbGFncyAmDQo+IE1NQ19SU1BfMTM2 KSkpDQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwg OCwgMSwgMSk7IC8qIHNkcnNwY2hrX2VuICovDQo+ID4gKyAgICAgICBlbHNlDQo+ID4gKyAgICAg ICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgOCwgMSwgMCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgaWYgKHVubGlrZWx5KGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikpDQo+ ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgMTUsIDEs IDEpOyAvKiBzZHJzcHR5cGUgKi8NCj4gPiArICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAg ICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxNSwgMSwgMCk7DQo+ID4gKyAgICAg ICB3cml0ZWwodmFsdWUsIGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9DT05GSUcwX1JFRyk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNwbW1jX3ByZXBhcmVfZGF0YShzdHJ1Y3Qgc3Bt bWNfaG9zdCAqaG9zdCwgc3RydWN0DQo+IG1tY19kYXRhICpkYXRhKQ0KPiA+ICt7DQo+ID4gKyAg ICAgICB1MzIgdmFsdWUsIHNyY2RzdDsNCj4gPiArICAgICAgIC8vc3RydWN0IG1tY19jb21tYW5k ICpjbWQgPSBkYXRhLT5tcnEtPmNtZDsNCj4gPiArDQo+ID4gKyAgICAgICB3cml0ZWwoZGF0YS0+ YmxvY2tzIC0gMSwgaG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1BBR0VfTlVNX1JFRyk7DQo+ID4g KyAgICAgICB3cml0ZWwoZGF0YS0+Ymxrc3ogLSAxLCBob3N0LT5iYXNlICsgU1BNTUNfU0RfQkxP Q0tTSVpFX1JFRyk7DQo+ID4gKyAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1N Q19TRF9DT05GSUcwX1JFRyk7DQo+ID4gKyAgICAgICBpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFU QV9SRUFEKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2 YWx1ZSwgNCwgMiwgMik7IC8qIHNkX3RyYW5zX21vZGUNCj4gKi8NCj4gPiArICAgICAgICAgICAg ICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCA2LCAxLCAwKTsgLyogc2RhdXRvcnNw ICovDQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwg NywgMSwgMCk7IC8qIHNkY21kZHVtbXkNCj4gKi8NCj4gPiArICAgICAgICAgICAgICAgc3JjZHN0 ID0gcmVhZGwoaG9zdC0+YmFzZSArDQo+IFNQTU1DX0NBUkRfTUVESUFUWVBFX1NSQ0RTVF9SRUcp Ow0KPiA+ICsgICAgICAgICAgICAgICBzcmNkc3QgPSBiaXRmaWVsZF9yZXBsYWNlKHNyY2RzdCwg NCwgNywgMHgxMik7DQo+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbChzcmNkc3QsIGhvc3QtPmJh c2UgKw0KPiBTUE1NQ19DQVJEX01FRElBVFlQRV9TUkNEU1RfUkVHKTsNCj4gPiArICAgICAgIH0g ZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1 ZSwgNCwgMiwgMSk7DQo+ID4gKyAgICAgICAgICAgICAgIHNyY2RzdCA9IHJlYWRsKGhvc3QtPmJh c2UgKw0KPiBTUE1NQ19DQVJEX01FRElBVFlQRV9TUkNEU1RfUkVHKTsNCj4gPiArICAgICAgICAg ICAgICAgc3JjZHN0ID0gYml0ZmllbGRfcmVwbGFjZShzcmNkc3QsIDQsIDcsIDB4MjEpOw0KPiA+ ICsgICAgICAgICAgICAgICB3cml0ZWwoc3JjZHN0LCBob3N0LT5iYXNlICsNCj4gU1BNTUNfQ0FS RF9NRURJQVRZUEVfU1JDRFNUX1JFRyk7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICB2YWx1 ZSA9IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDIsIDEsIDEpOw0KPiA+ICsgICAgICAgaWYgKGxp a2VseShob3N0LT5kbWFwaW9fbW9kZSA9PSBTUE1NQ19ETUFfTU9ERSkpIHsNCj4gPiArICAgICAg ICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsNCj4gPiArICAgICAgICAgICAgICAgZG1h X2FkZHJfdCBkbWFfYWRkcjsNCj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRtYV9z aXplOw0KPiA+ICsgICAgICAgICAgICAgICB1MzIgKnJlZ19hZGRyOw0KPiA+ICsgICAgICAgICAg ICAgICBpbnQgZG1hX2RpcmVjdGlvbiA9IGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCA/DQo+ IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7DQo+ID4gKyAgICAgICAgICAgICAgIGlu dCBpLCBjb3VudCA9IDE7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBjb3VudCA9IGRtYV9t YXBfc2coaG9zdC0+bW1jLT5wYXJlbnQsIGRhdGEtPnNnLA0KPiBkYXRhLT5zZ19sZW4sIGRtYV9k aXJlY3Rpb24pOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoIWNvdW50IHx8IGNv dW50ID4NCj4gU1BNTUNfTUFYX0RNQV9NRU1PUllfU0VDVE9SUykpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBkYXRhLT5lcnJvciA9IC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAg ICAgIGZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgY291bnQsIGkpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBkbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBkbWFfc2l6ZSA9IHNnX2RtYV9sZW4oc2cpIC8gNTEyIC0gMTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3cml0ZWwoZG1hX2FkZHIsIGhvc3QtPmJhc2UgKw0KPiBTUE1N Q19ETUFfQkFTRV9BRERSX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3cml0ZWwoZG1hX3NpemUsIGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19TRFJBTV9TRUNUT1JfMF9T SVpFX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19hZGRyID0gaG9zdC0+YmFzZSArDQo+IFNQ TU1DX1NEUkFNX1NFQ1RPUl8xX0FERFJfUkVHICsgKGkgLSAxKSAqIDI7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZWwoZG1hX2FkZHIsIHJlZ19hZGRyKTsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbChkbWFfc2l6ZSwgcmVnX2FkZHIg KyAxKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAg IH0NCj4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAw LCAxLCAwKTsgLyogc2RwaW9tb2RlICovDQo+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbCh2YWx1 ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJRzBfUkVHKTsNCj4gPiArICAgICAgICAgICAg ICAgLyogZW5hYmxlIGludGVycnVwdCBpZiBuZWVkZWQgKi8NCj4gPiArICAgICAgICAgICAgICAg aWYgKCFob3N0LT51c2VfaW50ICYmIGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzID4NCj4gaG9z dC0+ZG1hX2ludF90aHJlc2hvbGQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBob3N0 LT5kbWFfdXNlX2ludCA9IDE7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBy ZWFkbChob3N0LT5iYXNlICsNCj4gU1BNTUNfU0RfSU5UX1JFRyk7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAwLCAxLCAxKTsgLyoN Cj4gc2RjbXBlbiAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbCh2YWx1ZSwg aG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX0lOVF9SRUcpOw0KPiA+ICsgICAgICAgICAgICAgICB9 DQo+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdGZp ZWxkX3JlcGxhY2UodmFsdWUsIDAsIDEsIDEpOw0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9 IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDE0LCAxLCAxKTsgLyogcng0X2VuICovDQo+ID4gKyAg ICAgICAgICAgICAgIHdyaXRlbCh2YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0NPTkZJRzBf UkVHKTsNCj4gPiArICAgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2 b2lkIHNwbW1jX3RyaWdnZXJfdHJhbnNhY3Rpb24oc3RydWN0IHNwbW1jX2hvc3QgKmhvc3QpDQo+ ID4gK3sNCj4gPiArICAgICAgIHUzMiB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTUE1NQ19T RF9DVFJMX1JFRyk7DQo+ID4gKw0KPiA+ICsgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNl KHZhbHVlLCAwLCAxLCAxKTsgLyogdHJpZ2dlciB0cmFuc2FjdGlvbiAqLw0KPiA+ICsgICAgICAg d3JpdGVsKHZhbHVlLCBob3N0LT5iYXNlICsgU1BNTUNfU0RfQ1RSTF9SRUcpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBfX3NlbmRfc3RvcF9jbWQoc3RydWN0IHNwbW1jX2hvc3Qg Kmhvc3QpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBtbWNfY29tbWFuZCBzdG9wID0ge307 DQo+ID4gKyAgICAgICB1MzIgdmFsdWU7DQo+ID4gKw0KPiA+ICsgICAgICAgc3RvcC5vcGNvZGUg PSBNTUNfU1RPUF9UUkFOU01JU1NJT047DQo+ID4gKyAgICAgICBzdG9wLmFyZyA9IDA7DQo+ID4g KyAgICAgICBzdG9wLmZsYWdzID0gTU1DX1JTUF9SMUI7DQo+ID4gKyAgICAgICBzcG1tY19wcmVw YXJlX2NtZChob3N0LCAmc3RvcCk7DQo+ID4gKyAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJh c2UgKyBTUE1NQ19TRF9JTlRfUkVHKTsNCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVw bGFjZSh2YWx1ZSwgMCwgMSwgMCk7IC8qIHNkY21wZW4gKi8NCj4gPiArICAgICAgIHdyaXRlbCh2 YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0lOVF9SRUcpOw0KPiA+ICsgICAgICAgc3BtbWNf dHJpZ2dlcl90cmFuc2FjdGlvbihob3N0KTsNCj4gPiArICAgICAgIHNwbW1jX3dhaXRfZmluaXNo KGhvc3QpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogY2hlY2sgaWYgZXJyb3Ig b2NjdXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9uLg0KPiA+ICsgKiBAaG9zdCAtICBob3N0DQo+ID4g KyAqIEBtcnEgLSB0aGUgbXJxDQo+ID4gKyAqIEByZXR1cm4gMCBpZiBubyBlcnJvciBvdGhlcndp c2UgdGhlIGVycm9yIG51bWJlci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgc3BtbWNfY2hl Y2tfZXJyb3Ioc3RydWN0IHNwbW1jX2hvc3QgKmhvc3QsIHN0cnVjdA0KPiBtbWNfcmVxdWVzdCAq bXJxKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBpbnQgcmV0ID0gMDsNCj4gPiArICAgICAgIHN0cnVj dCBtbWNfY29tbWFuZCAqY21kID0gbXJxLT5jbWQ7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbW1jX2Rh dGEgKmRhdGEgPSBtcnEtPmRhdGE7DQo+ID4gKw0KPiA+ICsgICAgICAgdTMyIHZhbHVlID0gcmVh ZGwoaG9zdC0+YmFzZSArIFNQTU1DX1NEX1NUQVRFX1JFRyk7DQo+ID4gKyAgICAgICB1MzIgY3Jj X3Rva2VuID0gYml0ZmllbGRfZXh0cmFjdCh2YWx1ZSwgNCwgMyk7DQo+ID4gKw0KPiA+ICsgICAg ICAgaWYgKHVubGlrZWx5KHZhbHVlICYgU1BNTUNfU0RTVEFURV9FUlJPUikpIHsNCj4gPiArICAg ICAgICAgICAgICAgdTMyIHRpbWluZ19jZmcwID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIHZhbHVlID0gcmVhZGwoaG9zdC0+YmFzZSArIFNQTU1DX1NEX1NUQVRVU19SRUcpOw0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKGhvc3QtPnR1bmluZ19pbmZvLmVuYWJsZV90dW5p bmcpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdfY2ZnMCA9IHJlYWRsKGhv c3QtPmJhc2UgKw0KPiBTUE1NQ19TRF9USU1JTkdfQ09ORklHMF9SRUcpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGhvc3QtPnR1bmluZ19pbmZvLnJkX2NyY19kbHkgPQ0KPiBiaXRmaWVs ZF9leHRyYWN0KHRpbWluZ19jZmcwLCAyMCwgMyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgaG9zdC0+dHVuaW5nX2luZm8ucmRfZGF0X2RseSA9DQo+IGJpdGZpZWxkX2V4dHJhY3QodGlt aW5nX2NmZzAsIDE2LCAzKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBob3N0LT50dW5p bmdfaW5mby5yZF9yc3BfZGx5ID0NCj4gYml0ZmllbGRfZXh0cmFjdCh0aW1pbmdfY2ZnMCwgMTIs IDMpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGhvc3QtPnR1bmluZ19pbmZvLndyX2Nt ZF9kbHkgPQ0KPiBiaXRmaWVsZF9leHRyYWN0KHRpbWluZ19jZmcwLCA4LCAzKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBob3N0LT50dW5pbmdfaW5mby53cl9kYXRfZGx5ID0NCj4gYml0 ZmllbGRfZXh0cmFjdCh0aW1pbmdfY2ZnMCwgNCwgMyk7DQo+ID4gKyAgICAgICAgICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIFNQTU1DX1NEU1RBVFVTX1JT UF9USU1FT1VUKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVUSU1FRE9V VDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBob3N0LT50dW5pbmdfaW5mby53cl9jbWRf ZGx5Kys7DQo+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiBTUE1NQ19TRFNU QVRVU19SU1BfQ1JDN19FUlJPUikNCj4gew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dCA9IC1FSUxTRVE7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+dHVuaW5nX2lu Zm8ucmRfcnNwX2RseSsrOw0KPiA+ICsgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlICYgU1BNTUNfU0RTVEFUVVNf U1RCX1RJTUVPVVQpKQ0KPiB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXQgPSAtRVRJTUVET1VUOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9z dC0+dHVuaW5nX2luZm8ucmRfZGF0X2RseSsrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAodmFsdWUgJg0KPiBTUE1NQ19TRFNUQVRVU19SREFUQV9DUkMxNl9FUlJPUikg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTFNFUTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QtPnR1bmluZ19pbmZvLnJkX2Rh dF9kbHkrKzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYN Cj4gU1BNTUNfU0RTVEFUVVNfQ0FSRF9DUkNfQ0hFQ0tfVElNRU9VVCkgew0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVUSU1FRE9VVDsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhvc3QtPnR1bmluZ19pbmZvLnJkX2NyY19kbHkrKzsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYNCj4gU1BNTUNfU0RT VEFUVVNfQ1JDX1RPS0VOX0NIRUNLX0VSUk9SKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXQgPSAtRUlMU0VROw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGNyY190b2tlbiA9PSAweDUpDQo+ID4gKw0KPiBob3N0LT50dW5pbmdfaW5mby53 cl9kYXRfZGx5Kys7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ ID4gKw0KPiBob3N0LT50dW5pbmdfaW5mby5yZF9jcmNfZGx5Kys7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAg IGNtZC0+ZXJyb3IgPSByZXQ7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChkYXRhKSB7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZXJyb3IgPSByZXQ7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsNCj4gPiArICAgICAgICAgICAg ICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIWhvc3QtPnR1bmluZ19pbmZvLm5lZWRfdHVu aW5nICYmDQo+IGhvc3QtPnR1bmluZ19pbmZvLmVuYWJsZV90dW5pbmcpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgY21kLT5yZXRyaWVzID0gU1BNTUNfTUFYX1JFVFJJRVM7IC8qIHJldHJ5 DQo+IGl0ICovDQo+ID4gKyAgICAgICAgICAgICAgIHNwbW1jX3N3X3Jlc2V0KGhvc3QpOw0KPiA+ ICsgICAgICAgICAgICAgICBtZGVsYXkoNSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBp ZiAoaG9zdC0+dHVuaW5nX2luZm8uZW5hYmxlX3R1bmluZykgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHRpbWluZ19jZmcwID0gYml0ZmllbGRfcmVwbGFjZSh0aW1pbmdfY2ZnMCwgMjAs DQo+IDMsDQo+ID4gKw0KPiBob3N0LT50dW5pbmdfaW5mby5yZF9jcmNfZGx5KTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICB0aW1pbmdfY2ZnMCA9IGJpdGZpZWxkX3JlcGxhY2UodGltaW5n X2NmZzAsIDE2LA0KPiAzLA0KPiA+ICsNCj4gaG9zdC0+dHVuaW5nX2luZm8ucmRfZGF0X2RseSk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nX2NmZzAgPSBiaXRmaWVsZF9yZXBs YWNlKHRpbWluZ19jZmcwLCAxMiwNCj4gMywNCj4gPiArDQo+IGhvc3QtPnR1bmluZ19pbmZvLnJk X3JzcF9kbHkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ19jZmcwID0gYml0 ZmllbGRfcmVwbGFjZSh0aW1pbmdfY2ZnMCwgOCwNCj4gMywNCj4gPiArDQo+IGhvc3QtPnR1bmlu Z19pbmZvLndyX2NtZF9kbHkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ19j ZmcwID0gYml0ZmllbGRfcmVwbGFjZSh0aW1pbmdfY2ZnMCwgNCwNCj4gMywNCj4gPiArDQo+IGhv c3QtPnR1bmluZ19pbmZvLndyX2RhdF9kbHkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHdyaXRlbCh0aW1pbmdfY2ZnMCwgaG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1RJTUlOR19DT05G SUcwX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0gZWxzZSBpZiAo ZGF0YSkgew0KPiA+ICsgICAgICAgICAgICAgICBkYXRhLT5lcnJvciA9IDA7DQo+ID4gKyAgICAg ICAgICAgICAgIGRhdGEtPmJ5dGVzX3hmZXJlZCA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6 Ow0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgaG9zdC0+dHVuaW5nX2luZm8ubmVlZF90dW5p bmcgPSByZXQ7DQo+ID4gKyAgICAvKiBjb250cm9sbGVyIHdpbGwgbm90IHNlbmQgY21kIDEyIGF1 dG9tYXRpY2FsbHkgaWYgZXJyb3Igb2NjdXJyZWQgKi8NCj4gPiArICAgICAgIGlmIChjbWQtPm9w Y29kZSA9PSBNTUNfUkVBRF9NVUxUSVBMRV9CTE9DSyB8fA0KPiA+ICsgICAgICAgICAgIGNtZC0+ b3Bjb2RlID09IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSykgew0KPiA+ICsgICAgICAgICAgICAg ICBfX3NlbmRfc3RvcF9jbWQoaG9zdCk7DQo+ID4gKyAgICAgICAgICAgICAgIHNwbW1jX3N3X3Jl c2V0KGhvc3QpOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHRoZSBzdHJhdGVneSBpczoNCj4gPiArICogMS4g aWYgc2V2ZXJhbCBjb250aW51b3VzIGRlbGF5cyBhcmUgYWNjZXB0YWJsZSwgd2UgY2hvb3NlIGEg bWlkZGxlIG9uZTsNCj4gPiArICogMi4gb3RoZXJ3aXNlLCB3ZSBjaG9vc2UgdGhlIGZpcnN0IG9u ZS4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IF9fZmluZF9iZXN0X2RlbGF5KHU4 IGNhbmRpZGF0ZV9kbHkpDQo+ID4gK3sNCj4gPiArICAgICAgIGludCBmLCB3Ow0KPiA+ICsNCj4g PiArICAgICAgIGlmICghY2FuZGlkYXRlX2RseSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKyAgICAgICBmID0gZmZzKGNhbmRpZGF0ZV9kbHkpIC0gMTsNCj4gPiArICAgICAg IHcgPSBod2VpZ2h0OChjYW5kaWRhdGVfZGx5KTsNCj4gPiArICAgICAgIGlmICgweGZmID09IChi aXRmaWVsZF9tYXNrKGYsIHcpICYgfmNhbmRpZGF0ZV9kbHkpKQ0KPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gKGYgKyB3IC8gMik7DQo+ID4gKyAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiAoZik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgX19tYXli ZV91bnVzZWQgdm9pZCBzcG1tY190eGR1bW15KHN0cnVjdCBzcG1tY19ob3N0DQo+ICpob3N0LCBp bnQgY291bnQpDQo+ID4gK3sNCj4gPiArICAgICAgIHUzMiB2YWx1ZTsNCj4gPiArDQo+ID4gKyAg ICAgICBjb3VudCAmPSAweDFmZjsNCj4gPiArICAgICAgIHZhbHVlID0gcmVhZGwoaG9zdC0+YmFz ZSArIFNQTU1DX1NEX0NPTkZJRzFfUkVHKTsNCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRf cmVwbGFjZSh2YWx1ZSwgMCwgOSwgY291bnQpOw0KPiA+ICsgICAgICAgd3JpdGVsKHZhbHVlLCBo b3N0LT5iYXNlICsgU1BNTUNfU0RfQ09ORklHMV9SRUcpOw0KPiA+ICsgICAgICAgdmFsdWUgPSBy ZWFkbChob3N0LT5iYXNlICsgU1BNTUNfU0RfQ1RSTF9SRUcpOw0KPiA+ICsgICAgICAgdmFsdWUg PSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxLCAxLCAxKTsgLyogdHJpZ2dlciB0eCBkdW1teSAq Lw0KPiA+ICsgICAgICAgd3JpdGVsKHZhbHVlLCBob3N0LT5iYXNlICsgU1BNTUNfU0RfQ1RSTF9S RUcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzcG1tY194ZmVyX2RhdGFfcGlv KHN0cnVjdCBzcG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QNCj4gbW1jX2RhdGEgKmRhdGEpDQo+ID4g K3sNCj4gPiArICAgICAgIHUzMiAqYnVmOyAvKiB0eC9yeCA0IGJ5dGVzIG9uZSB0aW1lIGluIHBp byBtb2RlICovDQo+ID4gKyAgICAgICBpbnQgZGF0YV9sZWZ0ID0gZGF0YS0+YmxvY2tzICogZGF0 YS0+Ymxrc3o7DQo+ID4gKyAgICAgICBpbnQgY29uc3VtZWQsIHJlbWFpbjsNCj4gPiArDQo+ID4g KyAgICAgICBzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyICpzZ19taXRlciA9ICZob3N0LT5zZ19taXRl cjsNCj4gPiArICAgICAgIHVuc2lnbmVkIGludCBmbGFncyA9IDA7DQo+ID4gKw0KPiA+ICsgICAg ICAgaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpDQo+ID4gKyAgICAgICAgICAgICAg IGZsYWdzIHw9IFNHX01JVEVSX0ZST01fU0c7DQo+ID4gKyAgICAgICBlbHNlDQo+ID4gKyAgICAg ICAgICAgICAgIGZsYWdzIHw9IFNHX01JVEVSX1RPX1NHOw0KPiA+ICsgICAgICAgc2dfbWl0ZXJf c3RhcnQoJmhvc3QtPnNnX21pdGVyLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBmbGFncyk7DQo+ ID4gKyAgICAgICB3aGlsZSAoZGF0YV9sZWZ0ID4gMCkgew0KPiA+ICsgICAgICAgICAgICAgICBj b25zdW1lZCA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgIGlmICghc2dfbWl0ZXJfbmV4dChzZ19t aXRlcikpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAg ICAgICAgIGJ1ZiA9IHNnX21pdGVyLT5hZGRyOw0KPiA+ICsgICAgICAgICAgICAgICByZW1haW4g PSBzZ19taXRlci0+bGVuZ3RoOw0KPiA+ICsgICAgICAgICAgICAgICBkbyB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcG1tY193YWl0X3R4YnVmX2Vt cHR5KGhvc3QpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn b3RvIGRvbmU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZWwoKmJ1 ZiwgaG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1BJT0RBVEFUWF9SRUcpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoc3BtbWNfd2FpdF9yeGJ1Zl9mdWxsKGhvc3QpKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqYnVmID0gcmVhZGwoaG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1BJ T0RBVEFSWF9SRUcpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBidWYrKzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb25z dW1lZCArPSA0Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbiAtPSA0Ow0KPiA+ ICsgICAgICAgICAgICAgICB9IHdoaWxlIChyZW1haW4pOw0KPiA+ICsgICAgICAgICAgICAgICBz Z19taXRlci0+Y29uc3VtZWQgPSBjb25zdW1lZDsNCj4gPiArICAgICAgICAgICAgICAgZGF0YV9s ZWZ0IC09IGNvbnN1bWVkOw0KPiA+ICsgICAgICAgfQ0KPiA+ICtkb25lOg0KPiA+ICsgICAgICAg c2dfbWl0ZXJfc3RvcChzZ19taXRlcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHNwbW1jX2NvbnRyb2xsZXJfaW5pdChzdHJ1Y3Qgc3BtbWNfaG9zdCAqaG9zdCkNCj4gPiArew0K PiA+ICsgICAgICAgdTMyIHZhbHVlOw0KPiA+ICsgICAgICAgaW50IHJldCA9IHJlc2V0X2NvbnRy b2xfYXNzZXJ0KGhvc3QtPnJzdGMpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghcmV0KSB7DQo+ ID4gKyAgICAgICAgICAgICAgIG1kZWxheSgxKTsNCj4gPiArICAgICAgICAgICAgICAgcmV0ID0g cmVzZXRfY29udHJvbF9kZWFzc2VydChob3N0LT5yc3RjKTsNCj4gPiArICAgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19DQVJEX01F RElBVFlQRV9TUkNEU1RfUkVHKTsNCj4gPiArICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFj ZSh2YWx1ZSwgMCwgMywgU1BNTUNfTUVESUFfU0QpOw0KPiA+ICsgICAgICAgd3JpdGVsKHZhbHVl LCBob3N0LT5iYXNlICsNCj4gU1BNTUNfQ0FSRF9NRURJQVRZUEVfU1JDRFNUX1JFRyk7DQo+ID4g KyAgICAgICBob3N0LT5zaWduYWxfdm9sdGFnZSA9IE1NQ19TSUdOQUxfVk9MVEFHRV8zMzA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNwbW1jX3NldF9wb3dlcl9tb2RlKHN0cnVj dCBzcG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QNCj4gbW1jX2lvcyAqaW9zKQ0KPiA+ICt7DQo+ID4g KyAgICAgICBpZiAoaG9zdC0+cG93ZXJfc3RhdGUgPT0gaW9zLT5wb3dlcl9tb2RlKQ0KPiA+ICsg ICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgICAgc3dpdGNoIChpb3MtPnBv d2VyX21vZGUpIHsNCj4gPiArICAgICAgICAgICAgICAgLyogcG93ZXIgb2ZmLT51cC0+b24gKi8N Cj4gPiArICAgICAgIGNhc2UgTU1DX1BPV0VSX09OOg0KPiA+ICsgICAgICAgICAgICAgICBzcG1t Y19jb250cm9sbGVyX2luaXQoaG9zdCk7DQo+ID4gKyAgICAgICAgICAgICAgIHBtX3J1bnRpbWVf Z2V0X3N5bmMoaG9zdC0+bW1jLT5wYXJlbnQpOw0KPiA+ICsgICAgICAgICAgICAgICBicmVhazsN Cj4gPiArICAgICAgIGNhc2UgTU1DX1BPV0VSX1VQOg0KPiA+ICsgICAgICAgICAgICAgICBicmVh azsNCj4gPiArICAgICAgIGNhc2UgTU1DX1BPV0VSX09GRjoNCj4gPiArICAgICAgICAgICAgICAg cG1fcnVudGltZV9wdXQoaG9zdC0+bW1jLT5wYXJlbnQpOw0KPiA+ICsgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIGhvc3QtPnBvd2VyX3N0YXRlID0gaW9z LT5wb3dlcl9tb2RlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogMS4gdW5tYXAg c2NhdHRlcmxpc3QgaWYgbmVlZGVkOw0KPiA+ICsgKiAyLiBnZXQgcmVzcG9uc2UgJiBjaGVjayBl cnJvciBjb25kaXRpb25zOw0KPiA+ICsgKiAzLiB1bmxvY2sgaG9zdC0+bXJxX2xvY2sNCj4gPiAr ICogNC4gbm90aWZ5IG1tYyBsYXllciB0aGUgcmVxdWVzdCBpcyBkb25lDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCBzcG1tY19maW5pc2hfcmVxdWVzdChzdHJ1Y3Qgc3BtbWNfaG9zdCAqaG9z dCwgc3RydWN0DQo+IG1tY19yZXF1ZXN0ICptcnEpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVj dCBtbWNfY29tbWFuZCAqY21kOw0KPiA+ICsgICAgICAgc3RydWN0IG1tY19kYXRhICpkYXRhOw0K PiA+ICsNCj4gPiArICAgICAgIGlmICghbXJxKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm47 DQo+ID4gKw0KPiA+ICsgICAgICAgY21kID0gbXJxLT5jbWQ7DQo+ID4gKyAgICAgICBkYXRhID0g bXJxLT5kYXRhOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChkYXRhICYmIFNQTU1DX0RNQV9NT0RF ID09IGhvc3QtPmRtYXBpb19tb2RlKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGludCBkbWFfZGly ZWN0aW9uID0gZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEID8NCj4gRE1BX0ZST01fREVWSUNF IDogRE1BX1RPX0RFVklDRTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGRtYV91bm1hcF9z Zyhob3N0LT5tbWMtPnBhcmVudCwgZGF0YS0+c2csDQo+IGRhdGEtPnNnX2xlbiwgZG1hX2RpcmVj dGlvbik7DQo+ID4gKyAgICAgICAgICAgICAgIGhvc3QtPmRtYV91c2VfaW50ID0gMDsNCj4gPiAr ICAgICAgIH0NCj4gPiArICAgICAgIHNwbW1jX2dldF9yc3AoaG9zdCwgY21kKTsNCj4gPiArICAg ICAgIHNwbW1jX2NoZWNrX2Vycm9yKGhvc3QsIG1ycSk7DQo+ID4gKyAgICAgICBob3N0LT5tcnEg PSBOVUxMOw0KPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZob3N0LT5tcnFfbG9jayk7DQo+ID4g KyAgICAgICBtbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyogSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSAqLw0KPiA+ICtpcnFyZXR1cm5fdCBz cG1tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1 Y3Qgc3BtbWNfaG9zdCAqaG9zdCA9IGRldl9pZDsNCj4gPiArICAgICAgIHUzMiB2YWx1ZSA9IHJl YWRsKGhvc3QtPmJhc2UgKyBTUE1NQ19TRF9JTlRfUkVHKTsNCj4gPiArDQo+ID4gKyAgICAgICBz cGluX2xvY2soJmhvc3QtPmxvY2spOw0KPiA+ICsgICAgICAgaWYgKCh2YWx1ZSAmIFNQTU1DX1NE SU5UX1NEQ01QKSAmJiAodmFsdWUgJg0KPiBTUE1NQ19TRElOVF9TRENNUEVOKSkgew0KPiA+ICsg ICAgICAgICAgICAgICB2YWx1ZSA9IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDAsIDEsIDApOyAv KiBkaXNhYmxlIHNkY21wDQo+ICovDQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0Zmll bGRfcmVwbGFjZSh2YWx1ZSwgMiwgMSwgMSk7IC8qIHNkX2NtcF9jbHIgKi8NCj4gPiArICAgICAg ICAgICAgICAgd3JpdGVsKHZhbHVlLCBob3N0LT5iYXNlICsgU1BNTUNfU0RfSU5UX1JFRyk7DQo+ ID4gKyAgICAgICAgICAgICAgIC8qIGlmIGVycm9yIG9jY3VycmVkLCB3ZSBteSBuZWVkIHNlbmQg Y21kIDEyIHRvIHN0b3ANCj4gZGF0YSB0cmFuc2FjdGlvbiwqLw0KPiA+ICsgICAgICAgICAgICAg ICAvKiB3aGljaCBpcyB0aW1lIGNvbnN1bWluZywgc28gbWFrZSB1c2Ugb2YgdGFza2xldCB0bw0K PiBoYW5kbGUgdGhpcy4qLw0KPiA+ICsgICAgICAgICAgICAgICBpZiAodW5saWtlbHkocmVhZGwo aG9zdC0+YmFzZSArIFNQTU1DX1NEX1NUQVRFX1JFRykNCj4gJiBTUE1NQ19TRFNUQVRFX0VSUk9S KSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50 c2tsZXRfZmluaXNoX3JlcSk7DQo+ID4gKyAgICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzcG1tY19maW5pc2hfcmVxdWVzdChob3N0LCBob3N0LT5tcnEpOw0K PiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgaWYgKHZhbHVlICYgU1BNTUNfU0RJTlRfU0RJTyAm Jg0KPiA+ICsgICAgICAgICAgICh2YWx1ZSAmIFNQTU1DX1NESU5UX1NESU9FTikpIHsNCj4gPiAr ICAgICAgICAgICAgICAgbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOw0KPiA+ICsgICAg ICAgfQ0KPiA+ICsgICAgICAgc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOw0KPiA+ICsgICAgICAg cmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzcG1t Y19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QNCj4gKm1y cSkNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHNwbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJp dihtbWMpOw0KPiA+ICsgICAgICAgc3RydWN0IG1tY19kYXRhICpkYXRhOw0KPiA+ICsgICAgICAg c3RydWN0IG1tY19jb21tYW5kICpjbWQ7DQo+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4g PiArICAgICAgIHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaG9zdC0+bXJxX2xvY2sp Ow0KPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ ICsNCj4gPiArICAgICAgIGhvc3QtPm1ycSA9IG1ycTsNCj4gPiArICAgICAgIGRhdGEgPSBtcnEt PmRhdGE7DQo+ID4gKyAgICAgICBjbWQgPSBtcnEtPmNtZDsNCj4gPiArDQo+ID4gKyAgICAgICBz cG1tY19wcmVwYXJlX2NtZChob3N0LCBjbWQpOw0KPiA+ICsgICAgICAgLyogd2UgbmVlZCBtYW51 YWxseSByZWFkIHJlc3BvbnNlIFIyLiAqLw0KPiA+ICsgICAgICAgaWYgKHVubGlrZWx5KGNtZC0+ ZmxhZ3MgJiBNTUNfUlNQXzEzNikpIHsNCj4gPiArICAgICAgICAgICAgICAgc3BtbWNfdHJpZ2dl cl90cmFuc2FjdGlvbihob3N0KTsNCj4gPiArICAgICAgICAgICAgICAgc3BtbWNfZ2V0X3JzcCho b3N0LCBjbWQpOw0KPiA+ICsgICAgICAgICAgICAgICBzcG1tY193YWl0X2ZpbmlzaChob3N0KTsN Cj4gPiArICAgICAgICAgICAgICAgc3BtbWNfY2hlY2tfZXJyb3IoaG9zdCwgbXJxKTsNCj4gPiAr ICAgICAgICAgICAgICAgaG9zdC0+bXJxID0gTlVMTDsNCj4gPiArICAgICAgICAgICAgICAgbXV0 ZXhfdW5sb2NrKCZob3N0LT5tcnFfbG9jayk7DQo+ID4gKyAgICAgICAgICAgICAgIG1tY19yZXF1 ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOw0KPiA+ICsgICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgICAgaWYgKGRhdGEpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3BtbWNf cHJlcGFyZV9kYXRhKGhvc3QsIGRhdGEpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaWYg KHVubGlrZWx5KGhvc3QtPmRtYXBpb19tb2RlID09IFNQTU1DX1BJT19NT0RFDQo+ICYmIGRhdGEp KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIC8qIHBpbyBkYXRhIHRyYW5zZmVyIGRvIG5vdCB1c2UgaW50ZXJydXB0 ICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZWFkbChob3N0LT5iYXNl ICsNCj4gU1BNTUNfU0RfSU5UX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFs dWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAwLCAxLCAwKTsgLyoNCj4gc2RjbXBlbiAqLw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbCh2YWx1ZSwgaG9zdC0+YmFzZSArDQo+ IFNQTU1DX1NEX0lOVF9SRUcpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNwbW1jX3Ry aWdnZXJfdHJhbnNhY3Rpb24oaG9zdCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3Bt bWNfeGZlcl9kYXRhX3Bpbyhob3N0LCBkYXRhKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBzcG1tY193YWl0X2ZpbmlzaChob3N0KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBz cG1tY19maW5pc2hfcmVxdWVzdChob3N0LCBtcnEpOw0KPiA+ICsgICAgICAgICAgICAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGhvc3QtPnVzZV9pbnQgfHwg aG9zdC0+ZG1hX3VzZV9pbnQpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzcG1tY190cmlnZ2VyX3RyYW5zYWN0aW9uKGhvc3QpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3BtbWNfd2FpdF9maW5pc2goaG9zdCk7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcG1tY19maW5pc2hfcmVxdWVzdChob3N0LCBtcnEpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcG1tY190cmlnZ2VyX3RyYW5zYWN0aW9uKGhvc3QpOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAg fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzcG1tY19zZXRfaW9zKHN0cnVjdCBt bWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBz dHJ1Y3Qgc3BtbWNfaG9zdCAqaG9zdCA9IChzdHJ1Y3Qgc3BtbWNfaG9zdCAqKW1tY19wcml2KG1t Yyk7DQo+ID4gKw0KPiA+ICsgICAgICAgbXV0ZXhfbG9jaygmaG9zdC0+bXJxX2xvY2spOw0KPiA+ ICsgICAgICAgc3BtbWNfc2V0X3Bvd2VyX21vZGUoaG9zdCwgaW9zKTsNCj4gPiArICAgICAgIHNw bW1jX3NldF9idXNfY2xrKGhvc3QsIGlvcy0+Y2xvY2spOw0KPiA+ICsgICAgICAgc3BtbWNfc2V0 X2J1c190aW1pbmcoaG9zdCwgaW9zLT50aW1pbmcpOw0KPiA+ICsgICAgICAgc3BtbWNfc2V0X2J1 c193aWR0aChob3N0LCBpb3MtPmJ1c193aWR0aCk7DQo+ID4gKyAgICAgICAvKiBlbnN1cmUgbW9k ZSBpcyBjb3JyZWN0LCBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgaHcgcmVzZXQgdGhlDQo+IGNvbnRy b2xsZXIgKi8NCj4gPiArICAgICAgIHNwbW1jX3NlbGVjdF9tb2RlKGhvc3QsIGhvc3QtPm1vZGUp Ow0KPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZob3N0LT5tcnFfbG9jayk7DQo+ID4gKyAgICAg ICAvL3JldHVybjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIFJldHVybiB2YWx1 ZXMgZm9yIHRoZSBnZXRfY2QgY2FsbGJhY2sgc2hvdWxkIGJlOg0KPiA+ICsgKiAgIDAgZm9yIGEg YWJzZW50IGNhcmQNCj4gPiArICogICAxIGZvciBhIHByZXNlbnQgY2FyZA0KPiA+ICsgKiAgIC1F Tk9TWVMgd2hlbiBub3Qgc3VwcG9ydGVkIChlcXVhbCB0byBOVUxMIGNhbGxiYWNrKQ0KPiA+ICsg KiAgIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgd2hlbiBzb21ldGhpbmcgYmFkIGhhcHBlbmVk DQo+ID4gKyAqLw0KPiA+ICtpbnQgc3BtbWNfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQ0K PiA+ICt7DQo+ID4gKyAgICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAo bW1jX2Nhbl9ncGlvX2NkKG1tYykpDQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IG1tY19ncGlv X2dldF9jZChtbWMpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAg ICAgICAgICAgICByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc3BtbWNfZXhlY3V0ZV90dW5pbmcoc3RydWN0IG1t Y19ob3N0ICptbWMsIHUzMiBvcGNvZGUpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzcG1t Y19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsNCj4gPiArICAgICAgIGNvbnN0IHU4ICpibGtf cGF0dGVybjsNCj4gPiArICAgICAgIHU4ICpibGtfdGVzdDsNCj4gPiArICAgICAgIGludCBibGtz ejsNCj4gPiArICAgICAgIHU4IHNtcGxfZGx5ID0gMCwgY2FuZGlkYXRlX2RseSA9IDA7DQo+ID4g KyAgICAgICB1MzIgdmFsdWU7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKG1tYy0+aW9zLmJ1c193 aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzgpIHsNCj4gPiArICAgICAgICAgICAgICAgYmxrX3BhdHRl cm4gPSB0dW5pbmdfYmxrX3BhdHRlcm5fOGJpdDsNCj4gPiArICAgICAgICAgICAgICAgYmxrc3og PSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXQpOw0KPiA+ICsgICAgICAgfSBlbHNlIGlm IChtbWMtPmlvcy5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7DQo+ID4gKyAgICAgICAg ICAgICAgIGJsa19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQ7DQo+ID4gKyAgICAg ICAgICAgICAgIGJsa3N6ID0gc2l6ZW9mKHR1bmluZ19ibGtfcGF0dGVybl80Yml0KTsNCj4gPiAr ICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGJsa190ZXN0ID0ga21hbGxvYyhibGtzeiwg R0ZQX0tFUk5FTCk7DQo+ID4gKyAgICAgICBpZiAoIWJsa190ZXN0KQ0KPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgICBob3N0LT50dW5pbmdfaW5m by5lbmFibGVfdHVuaW5nID0gMDsNCj4gPiArICAgICAgIGRvIHsNCj4gPiArICAgICAgICAgICAg ICAgc3RydWN0IG1tY19yZXF1ZXN0IG1ycSA9IHtOVUxMfTsNCj4gPiArICAgICAgICAgICAgICAg c3RydWN0IG1tY19jb21tYW5kIGNtZCA9IHswfTsNCj4gPiArICAgICAgICAgICAgICAgc3RydWN0 IG1tY19jb21tYW5kIHN0b3AgPSB7MH07DQo+ID4gKyAgICAgICAgICAgICAgIHN0cnVjdCBtbWNf ZGF0YSBkYXRhID0gezB9Ow0KPiA+ICsgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3Qg c2c7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBjbWQub3Bjb2RlID0gb3Bjb2RlOw0KPiA+ ICsgICAgICAgICAgICAgICBjbWQuYXJnID0gMDsNCj4gPiArICAgICAgICAgICAgICAgY21kLmZs YWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIHN0b3Aub3Bjb2RlID0gTU1DX1NUT1BfVFJBTlNNSVNTSU9OOw0KPiA+ICsgICAgICAgICAg ICAgICBzdG9wLmFyZyA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgIHN0b3AuZmxhZ3MgPSBNTUNf UlNQX1IxQiB8IE1NQ19DTURfQUM7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBkYXRhLmJs a3N6ID0gYmxrc3o7DQo+ID4gKyAgICAgICAgICAgICAgIGRhdGEuYmxvY2tzID0gMTsNCj4gPiAr ICAgICAgICAgICAgICAgZGF0YS5mbGFncyA9IE1NQ19EQVRBX1JFQUQ7DQo+ID4gKyAgICAgICAg ICAgICAgIGRhdGEuc2cgPSAmc2c7DQo+ID4gKyAgICAgICAgICAgICAgIGRhdGEuc2dfbGVuID0g MTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHNnX2luaXRfb25lKCZzZywgYmxrX3Rlc3Qs IGJsa3N6KTsNCj4gPiArICAgICAgICAgICAgICAgbXJxLmNtZCA9ICZjbWQ7DQo+ID4gKyAgICAg ICAgICAgICAgIG1ycS5zdG9wID0gJnN0b3A7DQo+ID4gKyAgICAgICAgICAgICAgIG1ycS5kYXRh ID0gJmRhdGE7DQo+ID4gKyAgICAgICAgICAgICAgIGhvc3QtPm1ycSA9ICZtcnE7DQo+ID4gKw0K PiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRsKGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19T RF9USU1JTkdfQ09ORklHMF9SRUcpOw0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdGZp ZWxkX3JlcGxhY2UodmFsdWUsIDEyLCAzLCBzbXBsX2RseSk7IC8qDQo+IHNkX3JkX3JzcF9kbHlf c2VsICovDQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1 ZSwgMTYsIDMsIHNtcGxfZGx5KTsgLyoNCj4gc2RfcmRfZGF0X2RseV9zZWwgKi8NCj4gPiArICAg ICAgICAgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAyMCwgMywgc21wbF9k bHkpOyAvKg0KPiBzZF9yZF9jcmNfZGx5X3NlbCAqLw0KPiA+ICsgICAgICAgICAgICAgICB3cml0 ZWwodmFsdWUsIGhvc3QtPmJhc2UgKw0KPiBTUE1NQ19TRF9USU1JTkdfQ09ORklHMF9SRUcpOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgbW1jX3dhaXRfZm9yX3JlcShtbWMsICZtcnEpOw0K PiA+ICsgICAgICAgICAgICAgICBpZiAoIWNtZC5lcnJvciAmJiAhZGF0YS5lcnJvcikgew0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVtY21wKGJsa19wYXR0ZXJuLCBibGtfdGVz dCwgYmxrc3opKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRl X2RseSB8PSAoMSA8PCBzbXBsX2RseSk7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAg ICAgIH0gd2hpbGUgKHNtcGxfZGx5KysgPD0gU1BNTUNfTUFYX1RVTkFCTEVfRExZKTsNCj4gPiAr ICAgICAgIGhvc3QtPnR1bmluZ19pbmZvLmVuYWJsZV90dW5pbmcgPSAxOw0KPiA+ICsNCj4gPiAr ICAgICAgIGlmIChjYW5kaWRhdGVfZGx5KSB7DQo+ID4gKyAgICAgICAgICAgICAgIHNtcGxfZGx5 ID0gX19maW5kX2Jlc3RfZGVsYXkoY2FuZGlkYXRlX2RseSk7DQo+ID4gKyAgICAgICAgICAgICAg IHZhbHVlID0gcmVhZGwoaG9zdC0+YmFzZSArDQo+IFNQTU1DX1NEX1RJTUlOR19DT05GSUcwX1JF Ryk7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwg MTIsIDMsIHNtcGxfZGx5KTsgLyoNCj4gc2RfcmRfcnNwX2RseV9zZWwgKi8NCj4gPiArICAgICAg ICAgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAxNiwgMywgc21wbF9kbHkp OyAvKg0KPiBzZF9yZF9kYXRfZGx5X3NlbCAqLw0KPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9 IGJpdGZpZWxkX3JlcGxhY2UodmFsdWUsIDIwLCAzLCBzbXBsX2RseSk7IC8qDQo+IHNkX3JkX2Ny Y19kbHlfc2VsICovDQo+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbCh2YWx1ZSwgaG9zdC0+YmFz ZSArDQo+IFNQTU1DX1NEX1RJTUlOR19DT05GSUcwX1JFRyk7DQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcmV0dXJuIC1FSU87DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNwbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3Qg bW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSkNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHNw bW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOw0KPiA+ICsgICAgICAgdTMyIHZhbHVlID0g cmVhZGwoaG9zdC0+YmFzZSArIFNQTU1DX1NEX0lOVF9SRUcpOw0KPiA+ICsNCj4gPiArICAgICAg IHZhbHVlID0gYml0ZmllbGRfcmVwbGFjZSh2YWx1ZSwgNSwgMSwgMSk7IC8qIHNkaW9faW50X2Ns ciAqLw0KPiA+ICsgICAgICAgaWYgKGVuYWJsZSkNCj4gPiArICAgICAgICAgICAgICAgdmFsdWUg PSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAzLCAxLCAxKTsNCj4gPiArICAgICAgIGVsc2UNCj4g PiArICAgICAgICAgICAgICAgdmFsdWUgPSBiaXRmaWVsZF9yZXBsYWNlKHZhbHVlLCAzLCAxLCAw KTsNCj4gPiArICAgICAgIHdyaXRlbCh2YWx1ZSwgaG9zdC0+YmFzZSArIFNQTU1DX1NEX0lOVF9S RUcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29w cyBzcG1tY19vcHMgPSB7DQo+ID4gKyAgICAgICAucmVxdWVzdCA9IHNwbW1jX3JlcXVlc3QsDQo+ ID4gKyAgICAgICAuc2V0X2lvcyA9IHNwbW1jX3NldF9pb3MsDQo+ID4gKyAgICAgICAuZ2V0X2Nk ID0gc3BtbWNfZ2V0X2NkLA0KPiA+ICsgICAgICAgLmV4ZWN1dGVfdHVuaW5nID0gc3BtbWNfZXhl Y3V0ZV90dW5pbmcsDQo+ID4gKyAgICAgICAuZW5hYmxlX3NkaW9faXJxID0gc3BtbWNfZW5hYmxl X3NkaW9faXJxLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdHNrbGV0X2Z1bmNf ZmluaXNoX3JlcSh1bnNpZ25lZCBsb25nIGRhdGEpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVj dCBzcG1tY19ob3N0ICpob3N0ID0gKHN0cnVjdCBzcG1tY19ob3N0ICopZGF0YTsNCj4gPiArDQo+ ID4gKyAgICAgICBzcGluX2xvY2soJmhvc3QtPmxvY2spOw0KPiA+ICsgICAgICAgc3BtbWNfZmlu aXNoX3JlcXVlc3QoaG9zdCwgaG9zdC0+bXJxKTsNCj4gPiArICAgICAgIHNwaW5fdW5sb2NrKCZo b3N0LT5sb2NrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzcG1tY19kcnZfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsgICAgICAgaW50 IHJldCA9IDA7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsNCj4gPiArICAgICAg IHN0cnVjdCByZXNvdXJjZSAqcmVzOw0KPiA+ICsgICAgICAgc3RydWN0IHNwbW1jX2hvc3QgKmhv c3Q7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgbW9kZTsNCj4gPiArDQo+ID4gKyAgICAgICBt bWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2YoKmhvc3QpLCAmcGRldi0+ZGV2KTsNCj4gPiArICAg ICAgIGlmICghbW1jKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07DQo+ID4g KyAgICAgICAgICAgICAgIGdvdG8gcHJvYmVfZnJlZV9ob3N0Ow0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgIGhvc3QgPSBtbWNfcHJpdihtbWMpOw0KPiA+ICsgICAgICAgaG9zdC0+ bW1jID0gbW1jOw0KPiA+ICsgICAgICAgaG9zdC0+cG93ZXJfc3RhdGUgPSBNTUNfUE9XRVJfT0ZG Ow0KPiA+ICsgICAgICAgaG9zdC0+ZG1hX2ludF90aHJlc2hvbGQgPSAxMDI0Ow0KPiA+ICsgICAg ICAgaG9zdC0+ZG1hcGlvX21vZGUgPSBTUE1NQ19ETUFfTU9ERTsNCj4gPiArDQo+ID4gKyAgICAg ICBob3N0LT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRl diwgMCwNCj4gJnJlcyk7DQo+ID4gKyAgICAgICBpZiAoSVNfRVJSKGhvc3QtPmJhc2UpKQ0KPiA+ ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihob3N0LT5iYXNlKTsNCj4gPiArDQo+ID4g KyAgICAgICBob3N0LT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7DQo+ID4g KyAgICAgICBpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2 X2VycigmcGRldi0+ZGV2LCAiQ2FuIG5vdCBmaW5kIGNsb2NrIHNvdXJjZVxuIik7DQo+ID4gKyAg ICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIoaG9zdC0+Y2xrKTsNCj4gPiArICAgICAgICAgICAg ICAgZ290byBwcm9iZV9mcmVlX2hvc3Q7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAg ICAgaG9zdC0+cnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKCZwZGV2LT5k ZXYsIE5VTEwpOw0KPiA+ICsgICAgICAgaWYgKElTX0VSUihob3N0LT5yc3RjKSkgew0KPiA+ICsg ICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4gbm90IGZpbmQgcmVzZXQgY29u dHJvbGxlclxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIoaG9zdC0+cnN0 Yyk7DQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gcHJvYmVfZnJlZV9ob3N0Ow0KPiA+ICsgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGhvc3QtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCk7DQo+ID4gKyAgICAgICBpZiAoaG9zdC0+aXJxIDw9IDApIHsNCj4gPiArICAgICAgICAg ICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZ2V0IHNkIGlycSByZXNvdXJjZSBmYWlsXG4iKTsN Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgICAg Z290byBwcm9iZV9mcmVlX2hvc3Q7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBpZiAoZGV2 bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBob3N0LT5pcnEsIHNwbW1jX2lycSwNCj4gSVJRRl9T SEFSRUQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfbmFtZSgmcGRldi0+ ZGV2KSwgaG9zdCkpIHsNCj4gPiArICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAi RmFpbGVkIHRvIHJlcXVlc3Qgc2QgY2FyZA0KPiBpbnRlcnJ1cHQuXG4iKTsNCj4gPiArICAgICAg ICAgICAgICAgcmV0ID0gLUVOT0VOVDsNCj4gPiArICAgICAgICAgICAgICAgZ290byBwcm9iZV9m cmVlX2hvc3Q7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0gbW1jX29m X3BhcnNlKG1tYyk7DQo+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICBn b3RvIHByb2JlX2ZyZWVfaG9zdDsNCj4gPiArDQo+ID4gKyAgICAgICByZXQgPSBjbGtfcHJlcGFy ZShob3N0LT5jbGspOw0KPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAg Z290byBwcm9iZV9mcmVlX2hvc3Q7DQo+ID4gKyAgICAgICByZXQgPSBjbGtfZW5hYmxlKGhvc3Qt PmNsayk7DQo+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICBnb3RvIHBy b2JlX2Nsa191bnByZXBhcmU7DQo+ID4gKw0KPiA+ICsgICAgICAgc3Bpbl9sb2NrX2luaXQoJmhv c3QtPmxvY2spOw0KPiA+ICsgICAgICAgbXV0ZXhfaW5pdCgmaG9zdC0+bXJxX2xvY2spOw0KPiA+ ICsgICAgICAgdGFza2xldF9pbml0KCZob3N0LT50c2tsZXRfZmluaXNoX3JlcSwgdHNrbGV0X2Z1 bmNfZmluaXNoX3JlcSwNCj4gKHVuc2lnbmVkIGxvbmcpaG9zdCk7DQo+ID4gKyAgICAgICBtbWMt Pm9wcyA9ICZzcG1tY19vcHM7DQo+ID4gKyAgICAgICBtbWMtPmZfbWluID0gU1BNTUNfTUlOX0NM SzsNCj4gPiArICAgICAgIGlmIChtbWMtPmZfbWF4ID4gU1BNTUNfTUFYX0NMSykNCj4gPiArICAg ICAgICAgICAgICAgbW1jLT5mX21heCA9IFNQTU1DX01BWF9DTEs7DQo+ID4gKw0KPiA+ICsgICAg ICAgbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsNCj4gPiAr ICAgICAgIG1tYy0+bWF4X3NlZ19zaXplID0gU1BNTUNfTUFYX0JMS19DT1VOVCAqIDUxMjsNCj4g PiArICAgICAgIC8qIEhvc3QgY29udHJvbGxlciBzdXBwb3J0cyB1cCB0bw0KPiAiU1BNTUNfTUFY X0RNQV9NRU1PUllfU0VDVE9SUyIqLw0KPiA+ICsgICAgICAgLyogYS5rLmEuIG1heCBzY2F0dGVy ZWQgbWVtb3J5IHNlZ21lbnRzIHBlciByZXF1ZXN0Ki8NCj4gPiArICAgICAgIG1tYy0+bWF4X3Nl Z3MgPSBTUE1NQ19NQVhfRE1BX01FTU9SWV9TRUNUT1JTOw0KPiA+ICsgICAgICAgbW1jLT5tYXhf cmVxX3NpemUgPSBTUE1NQ19NQVhfQkxLX0NPVU5UICogNTEyOw0KPiA+ICsgICAgICAgLyogTGlt aXRlZCBieSB0aGUgbWF4IHZhbHVlIG9mIGRtYV9zaXplICYgZGF0YV9sZW5ndGgsIHNldCBpdCB0 bw0KPiA1MTIgYnl0ZXMgZm9yIG5vdyAqLw0KPiA+ICsgICAgICAgbW1jLT5tYXhfYmxrX3NpemUg PSA1MTI7DQo+ID4gKyAgICAgICBtbWMtPm1heF9ibGtfY291bnQgPSBTUE1NQ19NQVhfQkxLX0NP VU5UOyAvKiBMaW1pdGVkIGJ5DQo+IHNkX3BhZ2VfbnVtICovDQo+ID4gKw0KPiA+ICsgICAgICAg ZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGhvc3QpOw0KPiA+ICsgICAgICAgc3BtbWNfY29u dHJvbGxlcl9pbml0KGhvc3QpOw0KPiA+ICsgICAgICAgbW9kZSA9IChpbnQpb2ZfZGV2aWNlX2dl dF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOw0KPiA+ICsgICAgICAgc3BtbWNfc2VsZWN0X21vZGUo aG9zdCwgbW9kZSk7DQo+ID4gKyAgICAgICBtbWNfYWRkX2hvc3QobW1jKTsNCj4gPiArICAgICAg IGhvc3QtPnR1bmluZ19pbmZvLmVuYWJsZV90dW5pbmcgPSAxOw0KPiA+ICsgICAgICAgcG1fcnVu dGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOw0KPiA+ICsgICAgICAgcG1fcnVudGltZV9lbmFi bGUoJnBkZXYtPmRldik7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ ICtwcm9iZV9jbGtfdW5wcmVwYXJlOg0KPiA+ICsgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAi dW5hYmxlIHRvIGVuYWJsZSBjb250cm9sbGVyIGNsb2NrXG4iKTsNCj4gPiArICAgICAgIGNsa191 bnByZXBhcmUoaG9zdC0+Y2xrKTsNCj4gPiArcHJvYmVfZnJlZV9ob3N0Og0KPiA+ICsgICAgICAg aWYgKG1tYykNCj4gPiArICAgICAgICAgICAgICAgbW1jX2ZyZWVfaG9zdChtbWMpOw0KPiA+ICsN Cj4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg c3BtbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4g PiArICAgICAgIHN0cnVjdCBzcG1tY19ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo ZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgICBtbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsNCj4g PiArICAgICAgIGNsa19kaXNhYmxlKGhvc3QtPmNsayk7DQo+ID4gKyAgICAgICBjbGtfdW5wcmVw YXJlKGhvc3QtPmNsayk7DQo+ID4gKyAgICAgICBwbV9ydW50aW1lX2Rpc2FibGUoJmRldi0+ZGV2 KTsNCj4gPiArICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7DQo+ID4gKyAg ICAgICBtbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzcG1tY19kcnZfc3VzcGVuZChzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdA0KPiBzdGF0ZSkNCj4gPiArew0KPiA+ICsg ICAgICAgc3RydWN0IHNwbW1jX2hvc3QgKmhvc3Q7DQo+ID4gKw0KPiA+ICsgICAgICAgaG9zdCA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7DQo+ID4gKyAgICAgICBtdXRleF9sb2NrKCZob3N0 LT5tcnFfbG9jayk7IC8qIE1ha2Ugc3VyZSB0aGF0IG5vIG9uZSBpcyBob2xkaW5nDQo+IHRoZSBj b250cm9sbGVyICovDQo+ID4gKyAgICAgICBtdXRleF91bmxvY2soJmhvc3QtPm1ycV9sb2NrKTsN Cj4gPiArICAgICAgIGNsa19kaXNhYmxlKGhvc3QtPmNsayk7DQo+ID4gKyAgICAgICByZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzcG1tY19kcnZfcmVzdW1lKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHNwbW1j X2hvc3QgKmhvc3Q7DQo+ID4gKw0KPiA+ICsgICAgICAgaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKGRldik7DQo+ID4gKyAgICAgICByZXR1cm4gY2xrX2VuYWJsZShob3N0LT5jbGspOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX1BNDQo+ID4gKyNpZmRlZiBDT05GSUdfUE1f U0xFRVANCj4gPiArc3RhdGljIGludCBzcG1tY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikNCj4gPiArew0KPiA+ICsgICAgICAgcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7DQo+ ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzcG1t Y19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBwbV9y dW50aW1lX2ZvcmNlX3Jlc3VtZShkZXYpOw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArI2VuZGlmIC8qIGlmZGVmIENPTkZJR19QTV9TTEVFUCAqLw0KPiA+ICsNCj4gPiArI2lm ZGVmIENPTkZJR19QTV9SVU5USU1FDQo+ID4gK3N0YXRpYyBpbnQgc3BtbWNfcG1fcnVudGltZV9z dXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHNw bW1jX2hvc3QgKmhvc3Q7DQo+ID4gKw0KPiA+ICsgICAgICAgaG9zdCA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOw0KPiA+ICsgICAgICAgY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsNCj4gPiArICAgICAg IHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHNwbW1jX3BtX3J1bnRp bWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0 IHNwbW1jX2hvc3QgKmhvc3Q7DQo+ID4gKw0KPiA+ICsgICAgICAgaG9zdCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOw0KPiA+ICsgICAgICAgcmV0dXJuIGNsa19lbmFibGUoaG9zdC0+Y2xrKTsNCj4g PiArfQ0KPiA+ICsjZW5kaWYgLyogaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUgKi8NCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzcG1tY19wbV9vcHMgPSB7DQo+ID4g KyAgICAgICBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzcG1tY19wbV9zdXNwZW5kLA0KPiBzcG1t Y19wbV9yZXN1bWUpDQo+ID4gKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQ0KPiA+ICsgICAgICAg U0VUX1JVTlRJTUVfUE1fT1BTKHNwbW1jX3BtX3J1bnRpbWVfc3VzcGVuZCwNCj4gc3BtbWNfcG1f cnVudGltZV9yZXN1bWUsIE5VTEwpDQo+ID4gKyNlbmRpZg0KPiA+ICt9Ow0KPiA+ICsjZW5kaWYg LyogaWZkZWYgQ09ORklHX1BNICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBzcG1tY19vZl90YWJsZVtdID0gew0KPiA+ICsgICAgICAgew0KPiA+ICsgICAg ICAgICAgICAgICAuY29tcGF0aWJsZSA9ICJzdW5wbHVzLHNwNzAyMS1lbW1jIiwNCj4gPiArICAg ICAgICAgICAgICAgLmRhdGEgPSAodm9pZCAqKVNQTU1DX01PREVfRU1NQywNCj4gPiArICAgICAg IH0sDQo+ID4gKyAgICAgICB7Lyogc2VudGluZWwgKi99DQo+ID4gK307DQo+ID4gK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIHNwbW1jX29mX3RhYmxlKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIHNwbW1jX2RyaXZlciA9IHsNCj4gPiArICAgICAgIC5wcm9iZSA9 IHNwbW1jX2Rydl9wcm9iZSwNCj4gPiArICAgICAgIC5yZW1vdmUgPSBzcG1tY19kcnZfcmVtb3Zl LA0KPiA+ICsgICAgICAgLnN1c3BlbmQgPSBzcG1tY19kcnZfc3VzcGVuZCwNCj4gPiArICAgICAg IC5yZXN1bWUgPSBzcG1tY19kcnZfcmVzdW1lLA0KPiA+ICsgICAgICAgLmRyaXZlciA9IHsNCj4g PiArICAgICAgICAgICAgICAgLm5hbWUgPSAic3BtbWMiLA0KPiA+ICsgICAgICAgICAgICAgICAu b3duZXIgPSBUSElTX01PRFVMRSwNCj4gPiArI2lmZGVmIENPTkZJR19QTQ0KPiA+ICsgICAgICAg ICAgICAgICAucG0gPSAmc3BtbWNfcG1fb3BzLA0KPiA+ICsjZW5kaWYNCj4gPiArICAgICAgICAg ICAgICAgLm9mX21hdGNoX3RhYmxlID0gc3BtbWNfb2ZfdGFibGUsDQo+ID4gKyAgICAgICB9LA0K PiA+ICt9Ow0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNwbW1jX2RyaXZlcik7DQo+ID4g Kw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJUb255IEh1YW5nIDx0b255aHVhbmcuc3VucGx1c0BnbWFp bC5jb20+Iik7DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiU3VucGx1cyBNTUMgY29udHJvbGxl ciBkcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+IC0tDQo+ID4g Mi43LjQNCj4gPg0K