From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C8ED7A034C; Fri, 21 Jan 2022 02:56:28 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5022242715; Fri, 21 Jan 2022 02:56:28 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 3EBCE40042 for ; Fri, 21 Jan 2022 02:56:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642730185; x=1674266185; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=+OsJLxP9e/1oUOQmCwCyHTbR7QRElIr+1yPE5mLI5+Q=; b=kO0a4Ccd0PQI2X8u+3SxNKeR360Z410UTaEdfOFx/f0dEeD+WVM3omol mO3NGl1PCwAnaEP8IIYX1sAYiwmk92bP+BW7Kea9x2Ew0Bo+/zCuqkBdJ vVYUrZyE6QflIqn7kTamoamKeAq9tHMUWzPoh5+tKpqr1ZBnL41vaeoC8 Scr7G9RR/RV+8CbcU1XTJsVdCZoECuFMrkiWO0ccPHj96z1pcUpS03b4i K48jfwJubuWGlx+WCBUS25v6wy2uGKtNxDyxTCAUU8bo+sfS9wpJf97T4 C7xFoORG/HeDrxK8dNQNntZdA4w1tvJLi1kNNaa/vVAw0fJDHlN9KqqRI g==; X-IronPort-AV: E=McAfee;i="6200,9189,10233"; a="225519741" X-IronPort-AV: E=Sophos;i="5.88,303,1635231600"; d="scan'208";a="225519741" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jan 2022 17:56:23 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,303,1635231600"; d="scan'208";a="694468456" Received: from irsmsx602.ger.corp.intel.com ([163.33.146.8]) by orsmga005.jf.intel.com with ESMTP; 20 Jan 2022 17:56:22 -0800 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by irsmsx602.ger.corp.intel.com (163.33.146.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Fri, 21 Jan 2022 01:56:19 +0000 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2308.020; Fri, 21 Jan 2022 09:56:17 +0800 From: "Hu, Jiayu" To: Maxime Coquelin , "dev@dpdk.org" CC: "i.maximets@ovn.org" , "Xia, Chenbo" , "Richardson, Bruce" , "Van Haaren, Harry" , "Pai G, Sunil" , "Mcnamara, John" , "Ding, Xuan" , "Jiang, Cheng1" , "liangma@liangbit.com" Subject: RE: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Topic: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Index: AQHX/YRLKQmFmmnxdUWszaUEZw5AFqxrvTEAgAEA7mA= Date: Fri, 21 Jan 2022 01:56:16 +0000 Message-ID: <83ed6664283e4af7ac45314b3a4cf202@intel.com> References: <20211122105437.3534231-1-jiayu.hu@intel.com> <20211230215505.329674-1-jiayu.hu@intel.com> <20211230215505.329674-2-jiayu.hu@intel.com> <108fc875-7b17-a998-e78b-5597de152d70@redhat.com> In-Reply-To: <108fc875-7b17-a998-e78b-5597de152d70@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.200.16 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLA0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMsIGFuZCBwbGVhc2Ugc2VlIHJl cGxpZXMgaW5saW5lLg0KDQpUaGFua3MsDQpKaWF5dQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+IEZyb206IE1heGltZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5j b20+DQo+IFNlbnQ6IEZyaWRheSwgSmFudWFyeSAyMSwgMjAyMiAxOjAwIEFNDQo+IFRvOiBIdSwg SmlheXUgPGppYXl1Lmh1QGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogaS5tYXhpbWV0 c0Bvdm4ub3JnOyBYaWEsIENoZW5ibyA8Y2hlbmJvLnhpYUBpbnRlbC5jb20+OyBSaWNoYXJkc29u LA0KPiBCcnVjZSA8YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+OyBWYW4gSGFhcmVuLCBIYXJy eQ0KPiA8aGFycnkudmFuLmhhYXJlbkBpbnRlbC5jb20+OyBQYWkgRywgU3VuaWwgPHN1bmlsLnBh aS5nQGludGVsLmNvbT47DQo+IE1jbmFtYXJhLCBKb2huIDxqb2huLm1jbmFtYXJhQGludGVsLmNv bT47IERpbmcsIFh1YW4NCj4gPHh1YW4uZGluZ0BpbnRlbC5jb20+OyBKaWFuZywgQ2hlbmcxIDxj aGVuZzEuamlhbmdAaW50ZWwuY29tPjsNCj4gbGlhbmdtYUBsaWFuZ2JpdC5jb20NCj4gU3ViamVj dDogUmU6IFtQQVRDSCB2MSAxLzFdIHZob3N0OiBpbnRlZ3JhdGUgZG1hZGV2IGluIGFzeW5jaHJv bm91cw0KPiBkYXRhcGF0aA0KPiANCj4gSGkgSmlheXUsDQo+IA0KPiBPbiAxMi8zMC8yMSAyMjo1 NSwgSmlheXUgSHUgd3JvdGU6DQo+ID4gU2luY2UgZG1hZGV2IGlzIGludHJvZHVjZWQgaW4gMjEu MTEsIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB2aG9zdCBETUENCj4gPiBhYnN0cmFjdGlvbiBs YXllciBhbmQgc2ltcGxpZnkgYXBwbGljYXRpb24gbG9naWNzLCB0aGlzIHBhdGNoIGludGVncmF0 ZXMNCj4gPiBkbWFkZXYgaW4gYXN5bmNocm9ub3VzIGRhdGEgcGF0aC4NCj4gPg0KPiA+IFNpZ25l ZC1vZmYtYnk6IEppYXl1IEh1IDxqaWF5dS5odUBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1i eTogU3VuaWwgUGFpIEcgPHN1bmlsLnBhaS5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIGRv Yy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9saWIucnN0IHwgIDcwICsrKystLS0tLQ0KPiA+ICAg ZXhhbXBsZXMvdmhvc3QvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgIGV4YW1w bGVzL3Zob3N0L2lvYXQuYyAgICAgICAgICAgICAgIHwgMjE4IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQo+ID4gICBleGFtcGxlcy92aG9zdC9pb2F0LmggICAgICAgICAgICAgICB8ICA2MyAt LS0tLS0tLQ0KPiA+ICAgZXhhbXBsZXMvdmhvc3QvbWFpbi5jICAgICAgICAgICAgICAgfCAyMzAg KysrKysrKysrKysrKysrKysrKysrKystLS0tLQ0KPiA+ICAgZXhhbXBsZXMvdmhvc3QvbWFpbi5o ICAgICAgICAgICAgICAgfCAgMTEgKysNCj4gPiAgIGV4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxk ICAgICAgICAgIHwgICA2ICstDQo+ID4gICBsaWIvdmhvc3QvbWVzb24uYnVpbGQgICAgICAgICAg ICAgICB8ICAgMyArLQ0KPiA+ICAgbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oICAgICAgICAg fCAxMjEgKysrKystLS0tLS0tLS0tDQo+ID4gICBsaWIvdmhvc3QvdmVyc2lvbi5tYXAgICAgICAg ICAgICAgICB8ICAgMyArDQo+ID4gICBsaWIvdmhvc3Qvdmhvc3QuYyAgICAgICAgICAgICAgICAg ICB8IDEzMCArKysrKysrKysrKy0tLS0tDQo+ID4gICBsaWIvdmhvc3Qvdmhvc3QuaCAgICAgICAg ICAgICAgICAgICB8ICA1MyArKysrKystDQo+ID4gICBsaWIvdmhvc3QvdmlydGlvX25ldC5jICAg ICAgICAgICAgICB8IDIwNiArKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gICAxMyBmaWxl cyBjaGFuZ2VkLCA1ODcgaW5zZXJ0aW9ucygrKSwgNTI5IGRlbGV0aW9ucygtKQ0KPiA+ICAgZGVs ZXRlIG1vZGUgMTAwNjQ0IGV4YW1wbGVzL3Zob3N0L2lvYXQuYw0KPiA+ICAgZGVsZXRlIG1vZGUg MTAwNjQ0IGV4YW1wbGVzL3Zob3N0L2lvYXQuaA0KPiANCj4gDQo+IA0KPiA+IGRpZmYgLS1naXQg YS9leGFtcGxlcy92aG9zdC9tYWluLmMgYi9leGFtcGxlcy92aG9zdC9tYWluLmMNCj4gPiBpbmRl eCAzM2QwMjNhYTM5Li40NDA3MzQ5OWJjIDEwMDY0NA0KPiA+IC0tLSBhL2V4YW1wbGVzL3Zob3N0 L21haW4uYw0KPiA+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L21haW4uYw0KPiA+IEBAIC0yNCw4ICsy NCw5IEBADQo+ID4gICAjaW5jbHVkZSA8cnRlX2lwLmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX3Rj cC5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9wYXVzZS5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX2Rt YWRldi5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX3Zob3N0X2FzeW5jLmg+DQo+ID4NCj4gPiAtI2lu Y2x1ZGUgImlvYXQuaCINCj4gPiAgICNpbmNsdWRlICJtYWluLmgiDQo+ID4NCj4gPiAgICNpZm5k ZWYgTUFYX1FVRVVFUw0KPiA+IEBAIC01Niw2ICs1NywxNCBAQA0KPiA+ICAgI2RlZmluZSBSVEVf VEVTVF9UWF9ERVNDX0RFRkFVTFQgNTEyDQo+ID4NCj4gPiAgICNkZWZpbmUgSU5WQUxJRF9QT1JU X0lEIDB4RkYNCj4gPiArI2RlZmluZSBJTlZBTElEX0RNQV9JRCAtMQ0KPiA+ICsNCj4gPiArI2Rl ZmluZSBNQVhfVkhPU1RfREVWSUNFIDEwMjQNCj4gDQo+IEl0IGlzIGJldHRlciB0byBkZWZpbmUg UlRFX1ZIT1NUX01BWF9ERVZJQ0VTIGluIHJ0ZV92aG9zdC5oLA0KPiBhbmQgdXNlIGl0IGhlcmUg aW4gaW4gdmhvc3QgbGlicmFyeSBzbyB0aGF0IGl0IHdpbGwgYWx3YXlzIGJlIGFsaWduZWQNCj4g d2l0aCB0aGUgVmhvc3QgbGlicmFyeS4NCg0KT0ssIEkgd2lsbCByZW5hbWUgIk1BWF9WSE9TVF9E RVZJQ0UiIHRvICJSVEVfTUFYX1ZIT1NUX0RFVklDRSIgaW4NCnZob3N0IGxpYnJhcnksIGFuZCB1 c2UgaXQgaW5zdGVhZC4NCg0KPiANCj4gPiArI2RlZmluZSBETUFfUklOR19TSVpFIDQwOTYNCj4g DQo+IEFzIHByZXZpb3VzIHJldmlldywgdGhlIERNQSByaW5nIHNpemUgc2hvdWxkIG5vdCBiZSBo YXJkLWNvZGVkLg0KPiBQbGVhc2UgdXNlIHRoZSBETUEgbGliIGhlbHBlcnMgdG8gZ2V0IHRoZSBy aW5nIHNpemUgYWxzbyBoZXJlLg0KDQpZZXMsIGl0IHNob3VsZG4ndCBoYXJkY29kZS4gQnV0IGZy b20gbXkgcGVyc3BlY3RpdmUsIEkgZG9uJ3Qgd2FudCB0bw0KZ2l2ZSBhbnkgaW1wbGljYXRpb24g dG8gdXNlcnMgdGhhdCB0aGUgbWF4IHJpbmcgc2l6ZSBpcyBhbHdheXMgdGhlIGJlc3QNCmNob2lj ZS4gSXQncyBsaWtlIHRoZSBjaG9pY2Ugb2YgTklDIHJpbmcgc2l6ZSwgYW5kIGRlZmF1bHQgaXMg MjA0OCBpbiBPVlMuDQpJIHRoaW5rIGl0J3MgYmV0dGVyIHVzZSBhIGRlZmF1bHQgdmFsdWUgYW5k IGNoZWNrIGlmIGl0J3MgT0sgZm9yIHVzZWQgRE1BDQpkZXZpY2VzLg0KDQo+IA0KPiBMb29raW5n IGF0IHRoZSBkbWFkZXYgbGlicmFyeSwgSSB3b3VsZCBqdXN0IHVzZSB0aGUgbWF4IHZhbHVlIHBy b3ZpZGVkDQo+IGJ5IHRoZSBkZXZpY2UuIFdoYXQgd291bGQgYmUgdGhlIGRvd25zaWRlIG9mIGRv aW5nIHNvPw0KDQpVc2luZyBtYXggcmluZyBzaXplIG1heSBjYXVzZSB0aGUgbWVtb3J5IGZvb3Rw cmludCBhIGJpdCBsYXJnZXIsIGFuZCBpdCBpcw0KdGhlIHNhbWUgYXMgdGhlIGxhcmdlIHJpbmcg c2l6ZSBvZiB2aG9zdCwgSU1PLiBCdXQgaXQncyBub3QgYSBtZWFzdXJhYmxlDQoiY29zdCIsIGFu ZCBJIGFtIG5vdCBzdXJlIGlmIGl0J3MgYSBjb3N0IG9yIG5vdCBUQkguIEJlY2F1c2UgbWVtcG9v bCBoYXMNCmEgY2FjaGUgYW5kIGl0IHVzdWFsbHkgYWxsb2NhdGVzIG1idWZzIHJlY2VudGx5IHVz ZWQuIFNvIGNhY2hlIG1pc3Mgc3RhdHVzDQpzaG91bGQgbm90IGJlY29tZSB0b28gbXVjaCB3b3Jz ZSBiZWNhdXNlIG9mIGxhcmdlIHJpbmcgc2l6ZS4gQnV0IGl0DQpkZXBlbmRzIG9uIGxvdHMgb2Yg ZmFjdG9ycywgYW5kIGhhcmQgdG8gdGVsbCBpZiBpdCBodXJ0cyBwZXJmIG9yIG5vdC4NCg0KPiAN Cj4gTG9va2luZyBhdCBjdXJyZW50bHkgYXZhaWxhYmxlIERNQSBkZXZpY2UgZHJpdmVycywgdGhp cyBpcyB0aGVpcg0KPiBtYXhfZGVzYyB2YWx1ZToNCj4gICAtIENOWEs6IDE1DQo+ICAgLSBEUEFB OiA2NA0KPiAgIC0gSElTSTogODE5Mg0KPiAgIC0gSURYRDogNDE5Mg0KPiAgIC0gSU9BVDogNDE5 Mg0KPiAgIC0gU2tlbGV0b246IDgxOTINCj4gDQo+IFNvIGhhcmNvZGluZyB0byA0MTkyIHdpbGwg cHJldmVudCBzb21lIHRvIERNQSBkZXZpY2VzIHRvIGJlIHVzZWQsIGFuZA0KPiB3aWxsIG5vdCBt YWtlIGZ1bGwgYmVuZWZpdCBvZiB0aGVpciBjYXBhYmlsaXRpZXMgZm9yIG90aGVycy4NCg0KR29v ZCBjYXRjaC4gdmhvc3QgZXhhbXBsZSBzaG91bGQgYmUgY29tcGF0aWJsZSB0byBhbGwgRE1BIGRl dmljZXMgdG9vLg0KSSB3aWxsIGNoYW5nZSBsYXRlci4NCg0KPiANCj4gPiArc3RydWN0IGRtYV9m b3Jfdmhvc3QgZG1hX2JpbmRbTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gK3N0cnVjdCBydGVfdmhv c3RfYXN5bmNfZG1hX2luZm8NCj4gZG1hX2NvbmZpZ1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsN Cj4gPiArc3RhdGljIGludCBkbWFfY291bnQ7DQo+ID4NCj4gPiAgIC8qIG1hc2sgb2YgZW5hYmxl ZCBwb3J0cyAqLw0KPiA+ICAgc3RhdGljIHVpbnQzMl90IGVuYWJsZWRfcG9ydF9tYXNrID0gMDsN Cj4gPiBAQCAtOTYsOCArMTA1LDYgQEAgc3RhdGljIGludCBidWlsdGluX25ldF9kcml2ZXI7DQo+ ID4NCj4gPiAgIHN0YXRpYyBpbnQgYXN5bmNfdmhvc3RfZHJpdmVyOw0KPiA+DQo+ID4gLXN0YXRp YyBjaGFyICpkbWFfdHlwZTsNCj4gPiAtDQo+ID4gICAvKiBTcGVjaWZ5IHRpbWVvdXQgKGluIHVz ZWNvbmRzKSBiZXR3ZWVuIHJldHJpZXMgb24gUlguICovDQo+ID4gICBzdGF0aWMgdWludDMyX3Qg YnVyc3RfcnhfZGVsYXlfdGltZSA9IEJVUlNUX1JYX1dBSVRfVVM7DQo+ID4gICAvKiBTcGVjaWZ5 IHRoZSBudW1iZXIgb2YgcmV0cmllcyBvbiBSWC4gKi8NCj4gPiBAQCAtMTk2LDEzICsyMDMsMTM0 IEBAIHN0cnVjdCB2aG9zdF9idWZmdGFibGUNCj4gKnZob3N0X3R4YnVmZltSVEVfTUFYX0xDT1JF ICogTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gICAjZGVmaW5lIE1CVUZfVEFCTEVfRFJBSU5fVFND CSgocnRlX2dldF90c2NfaHooKSArIFVTX1BFUl9TIC0gMSkgXA0KPiA+ICAgCQkJCSAvIFVTX1BF Ul9TICogQlVSU1RfVFhfRFJBSU5fVVMpDQo+ID4NCj4gPiArc3RhdGljIGlubGluZSBib29sDQo+ ID4gK2lzX2RtYV9jb25maWd1cmVkKGludDE2X3QgZGV2X2lkKQ0KPiA+ICt7DQo+ID4gKwlpbnQg aTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZG1hX2NvdW50OyBpKyspIHsNCj4gPiAr CQlpZiAoZG1hX2NvbmZpZ1tpXS5kZXZfaWQgPT0gZGV2X2lkKSB7DQo+ID4gKwkJCXJldHVybiB0 cnVlOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gDQo+IE5vIG5lZWQgZm9yIGJyYWNlcyBmb3IgYm90 aCB0aGUgbG9vcCBhbmQgdGhlIGlmLg0KDQpTdXJlLCBJIHdpbGwgY2hhbmdlIGluIHRoZSBuZXh0 IHZlcnNpb24uDQoNCj4gDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4g ICBzdGF0aWMgaW5saW5lIGludA0KPiA+ICAgb3Blbl9kbWEoY29uc3QgY2hhciAqdmFsdWUpDQo+ ID4gICB7DQo+ID4gLQlpZiAoZG1hX3R5cGUgIT0gTlVMTCAmJiBzdHJuY21wKGRtYV90eXBlLCAi aW9hdCIsIDQpID09IDApDQo+ID4gLQkJcmV0dXJuIG9wZW5faW9hdCh2YWx1ZSk7DQo+ID4gKwlz dHJ1Y3QgZG1hX2Zvcl92aG9zdCAqZG1hX2luZm8gPSBkbWFfYmluZDsNCj4gPiArCWNoYXIgKmlu cHV0ID0gc3RybmR1cCh2YWx1ZSwgc3RybGVuKHZhbHVlKSArIDEpOw0KPiA+ICsJY2hhciAqYWRk cnMgPSBpbnB1dDsNCj4gPiArCWNoYXIgKnB0cnNbMl07DQo+ID4gKwljaGFyICpzdGFydCwgKmVu ZCwgKnN1YnN0cjsNCj4gPiArCWludDY0X3QgdmlkLCB2cmluZ19pZDsNCj4gPiArDQo+ID4gKwlz dHJ1Y3QgcnRlX2RtYV9pbmZvIGluZm87DQo+ID4gKwlzdHJ1Y3QgcnRlX2RtYV9jb25mIGRldl9j b25maWcgPSB7IC5uYl92Y2hhbnMgPSAxIH07DQo+ID4gKwlzdHJ1Y3QgcnRlX2RtYV92Y2hhbl9j b25mIHFjb25mID0gew0KPiA+ICsJCS5kaXJlY3Rpb24gPSBSVEVfRE1BX0RJUl9NRU1fVE9fTUVN LA0KPiA+ICsJCS5uYl9kZXNjID0gRE1BX1JJTkdfU0laRQ0KPiA+ICsJfTsNCj4gPiArDQo+ID4g KwlpbnQgZGV2X2lkOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwl1aW50MTZfdCBpID0gMDsN Cj4gPiArCWNoYXIgKmRtYV9hcmdbTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gKwlpbnQgYXJnc19u cjsNCj4gPiArDQo+ID4gKwl3aGlsZSAoaXNibGFuaygqYWRkcnMpKQ0KPiA+ICsJCWFkZHJzKys7 DQo+ID4gKwlpZiAoKmFkZHJzID09ICdcMCcpIHsNCj4gPiArCQlyZXQgPSAtMTsNCj4gPiArCQln b3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBwcm9jZXNzIERNQSBkZXZpY2VzIHdp dGhpbiBicmFja2V0LiAqLw0KPiA+ICsJYWRkcnMrKzsNCj4gPiArCXN1YnN0ciA9IHN0cnRvayhh ZGRycywgIjtdIik7DQo+ID4gKwlpZiAoIXN1YnN0cikgew0KPiA+ICsJCXJldCA9IC0xOw0KPiA+ ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWFyZ3NfbnIgPSBydGVfc3Ryc3Bs aXQoc3Vic3RyLCBzdHJsZW4oc3Vic3RyKSwNCj4gPiArCQkJZG1hX2FyZywgTUFYX1ZIT1NUX0RF VklDRSwgJywnKTsNCj4gPiArCWlmIChhcmdzX25yIDw9IDApIHsNCj4gPiArCQlyZXQgPSAtMTsN Cj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl3aGlsZSAoaSA8IGFyZ3Nf bnIpIHsNCj4gPiArCQljaGFyICphcmdfdGVtcCA9IGRtYV9hcmdbaV07DQo+ID4gKwkJdWludDhf dCBzdWJfbnI7DQo+ID4gKw0KPiA+ICsJCXN1Yl9uciA9IHJ0ZV9zdHJzcGxpdChhcmdfdGVtcCwg c3RybGVuKGFyZ190ZW1wKSwgcHRycywgMiwgJ0AnKTsNCj4gPiArCQlpZiAoc3ViX25yICE9IDIp IHsNCj4gPiArCQkJcmV0ID0gLTE7DQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJCX0NCj4gPiAr DQo+ID4gKwkJc3RhcnQgPSBzdHJzdHIocHRyc1swXSwgInR4ZCIpOw0KPiA+ICsJCWlmIChzdGFy dCA9PSBOVUxMKSB7DQo+ID4gKwkJCXJldCA9IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiAr CQl9DQo+ID4gKw0KPiA+ICsJCXN0YXJ0ICs9IDM7DQo+ID4gKwkJdmlkID0gc3RydG9sKHN0YXJ0 LCAmZW5kLCAwKTsNCj4gPiArCQlpZiAoZW5kID09IHN0YXJ0KSB7DQo+ID4gKwkJCXJldCA9IC0x Ow0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXZyaW5nX2lkID0g MCArIFZJUlRJT19SWFE7DQo+ID4gKw0KPiA+ICsJCWRldl9pZCA9IHJ0ZV9kbWFfZ2V0X2Rldl9p ZF9ieV9uYW1lKHB0cnNbMV0pOw0KPiA+ICsJCWlmIChkZXZfaWQgPCAwKSB7DQo+ID4gKwkJCVJU RV9MT0coRVJSLCBWSE9TVF9DT05GSUcsICJGYWlsIHRvIGZpbmQNCj4gRE1BICVzLlxuIiwgcHRy c1sxXSk7DQo+ID4gKwkJCXJldCA9IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9IGVs c2UgaWYgKGlzX2RtYV9jb25maWd1cmVkKGRldl9pZCkpIHsNCj4gPiArCQkJZ290byBkb25lOw0K PiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaWYgKHJ0ZV9kbWFfY29uZmlndXJlKGRldl9pZCwgJmRl dl9jb25maWcpICE9IDApIHsNCj4gPiArCQkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZh aWwgdG8gY29uZmlndXJlDQo+IERNQSAlZC5cbiIsIGRldl9pZCk7DQo+ID4gKwkJCXJldCA9IC0x Ow0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChydGVfZG1h X3ZjaGFuX3NldHVwKGRldl9pZCwgMCwgJnFjb25mKSAhPSAwKSB7DQo+ID4gKwkJCVJURV9MT0co RVJSLCBWSE9TVF9DT05GSUcsICJGYWlsIHRvIHNldCB1cA0KPiBETUEgJWQuXG4iLCBkZXZfaWQp Ow0KPiA+ICsJCQlyZXQgPSAtMTsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+DQo+ ID4gLQlyZXR1cm4gLTE7DQo+ID4gKwkJcnRlX2RtYV9pbmZvX2dldChkZXZfaWQsICZpbmZvKTsN Cj4gPiArCQlpZiAoaW5mby5uYl92Y2hhbnMgIT0gMSkgew0KPiA+ICsJCQlSVEVfTE9HKEVSUiwg VkhPU1RfQ09ORklHLCAiRE1BICVkIGhhcyBubw0KPiBxdWV1ZXMuXG4iLCBkZXZfaWQpOw0KPiA+ ICsJCQlyZXQgPSAtMTsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiANCj4gU28sIEkg d291bGQgY2FsbCBydGVfZG1hX2luZm9fZ2V0KCkgYmVmb3JlIGNhbGxpbmcgcnRlX2RtYV92Y2hh bl9zZXR1cCgpDQo+IHRvIGdldCBkZXNjIG51bWJlciB2YWx1ZSB3b3JraW5nIHdpdGggdGhlIERN QSBkZXZpY2UuDQoNClJpZ2h0LCBJIHdpbGwgY2hhbmdlIGxhdGVyLg0KDQo+IA0KPiA+ICsNCj4g PiArCQlpZiAocnRlX2RtYV9zdGFydChkZXZfaWQpICE9IDApIHsNCj4gPiArCQkJUlRFX0xPRyhF UlIsIFZIT1NUX0NPTkZJRywgIkZhaWwgdG8gc3RhcnQNCj4gRE1BICV1LlxuIiwgZGV2X2lkKTsN Cj4gPiArCQkJcmV0ID0gLTE7DQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJZG1hX2NvbmZpZ1tkbWFfY291bnRdLmRldl9pZCA9IGRldl9pZDsNCj4gPiArCQlkbWFf Y29uZmlnW2RtYV9jb3VudF0ubWF4X3ZjaGFucyA9IDE7DQo+ID4gKwkJZG1hX2NvbmZpZ1tkbWFf Y291bnQrK10ubWF4X2Rlc2MgPSBETUFfUklOR19TSVpFOw0KPiA+ICsNCj4gPiArZG9uZToNCj4g PiArCQkoZG1hX2luZm8gKyB2aWQpLT5kbWFzW3ZyaW5nX2lkXS5kZXZfaWQgPSBkZXZfaWQ7DQo+ ID4gKwkJaSsrOw0KPiA+ICsJfQ0KPiA+ICtvdXQ6DQo+ID4gKwlmcmVlKGlucHV0KTsNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gICB9DQo+ID4NCj4gPiAgIC8qDQo+ID4gQEAgLTUwMCw4ICs2Mjgs NiBAQCBlbnVtIHsNCj4gPiAgIAlPUFRfQ0xJRU5UX05VTSwNCj4gPiAgICNkZWZpbmUgT1BUX0JV SUxUSU5fTkVUX0RSSVZFUiAgImJ1aWx0aW4tbmV0LWRyaXZlciINCj4gPiAgIAlPUFRfQlVJTFRJ Tl9ORVRfRFJJVkVSX05VTSwNCj4gPiAtI2RlZmluZSBPUFRfRE1BX1RZUEUgICAgICAgICAgICAi ZG1hLXR5cGUiDQo+ID4gLQlPUFRfRE1BX1RZUEVfTlVNLA0KPiA+ICAgI2RlZmluZSBPUFRfRE1B UyAgICAgICAgICAgICAgICAiZG1hcyINCj4gPiAgIAlPUFRfRE1BU19OVU0sDQo+ID4gICB9Ow0K PiA+IEBAIC01MzksOCArNjY1LDYgQEAgdXNfdmhvc3RfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hh ciAqKmFyZ3YpDQo+ID4gICAJCQkJTlVMTCwgT1BUX0NMSUVOVF9OVU19LA0KPiA+ICAgCQl7T1BU X0JVSUxUSU5fTkVUX0RSSVZFUiwgbm9fYXJndW1lbnQsDQo+ID4gICAJCQkJTlVMTCwgT1BUX0JV SUxUSU5fTkVUX0RSSVZFUl9OVU19LA0KPiA+IC0JCXtPUFRfRE1BX1RZUEUsIHJlcXVpcmVkX2Fy Z3VtZW50LA0KPiA+IC0JCQkJTlVMTCwgT1BUX0RNQV9UWVBFX05VTX0sDQo+ID4gICAJCXtPUFRf RE1BUywgcmVxdWlyZWRfYXJndW1lbnQsDQo+ID4gICAJCQkJTlVMTCwgT1BUX0RNQVNfTlVNfSwN Cj4gPiAgIAkJe05VTEwsIDAsIDAsIDB9LA0KPiA+IEBAIC02NjEsMTAgKzc4NSw2IEBAIHVzX3Zo b3N0X3BhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiA+ICAgCQkJfQ0KPiA+ICAg CQkJYnJlYWs7DQo+ID4NCj4gPiAtCQljYXNlIE9QVF9ETUFfVFlQRV9OVU06DQo+ID4gLQkJCWRt YV90eXBlID0gb3B0YXJnOw0KPiA+IC0JCQlicmVhazsNCj4gPiAtDQo+ID4gICAJCWNhc2UgT1BU X0RNQVNfTlVNOg0KPiA+ICAgCQkJaWYgKG9wZW5fZG1hKG9wdGFyZykgPT0gLTEpIHsNCj4gPiAg IAkJCQlSVEVfTE9HKElORk8sIFZIT1NUX0NPTkZJRywNCj4gPiBAQCAtODQxLDkgKzk2MSwxMCBA QCBjb21wbGV0ZV9hc3luY19wa3RzKHN0cnVjdCB2aG9zdF9kZXYgKnZkZXYpDQo+ID4gICB7DQo+ ID4gICAJc3RydWN0IHJ0ZV9tYnVmICpwX2NwbFtNQVhfUEtUX0JVUlNUXTsNCj4gPiAgIAl1aW50 MTZfdCBjb21wbGV0ZV9jb3VudDsNCj4gPiArCWludDE2X3QgZG1hX2lkID0gZG1hX2JpbmRbdmRl di0+dmlkXS5kbWFzW1ZJUlRJT19SWFFdLmRldl9pZDsNCj4gPg0KPiA+ICAgCWNvbXBsZXRlX2Nv dW50ID0gcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQodmRldi0+dmlkLA0KPiA+IC0J CQkJCVZJUlRJT19SWFEsIHBfY3BsLA0KPiBNQVhfUEtUX0JVUlNUKTsNCj4gPiArCQkJCQlWSVJU SU9fUlhRLCBwX2NwbCwgTUFYX1BLVF9CVVJTVCwNCj4gZG1hX2lkLCAwKTsNCj4gPiAgIAlpZiAo Y29tcGxldGVfY291bnQpIHsNCj4gPiAgIAkJZnJlZV9wa3RzKHBfY3BsLCBjb21wbGV0ZV9jb3Vu dCk7DQo+ID4gICAJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgY29t cGxldGVfY291bnQsDQo+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+IEBAIC04ODMsMTEgKzEwMDQs MTIgQEAgZHJhaW5fdmhvc3Qoc3RydWN0IHZob3N0X2RldiAqdmRldikNCj4gPg0KPiA+ICAgCWlm IChidWlsdGluX25ldF9kcml2ZXIpIHsNCj4gPiAgIAkJcmV0ID0gdnNfZW5xdWV1ZV9wa3RzKHZk ZXYsIFZJUlRJT19SWFEsIG0sIG5yX3htaXQpOw0KPiA+IC0JfSBlbHNlIGlmIChhc3luY192aG9z dF9kcml2ZXIpIHsNCj4gPiArCX0gZWxzZSBpZiAoZG1hX2JpbmRbdmRldi0+dmlkXS5kbWFzW1ZJ UlRJT19SWFFdLmFzeW5jX2VuYWJsZWQpIHsNCj4gPiAgIAkJdWludDE2X3QgZW5xdWV1ZV9mYWls ID0gMDsNCj4gPiArCQlpbnQxNl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYtDQo+ID52aWRdLmRt YXNbVklSVElPX1JYUV0uZGV2X2lkOw0KPiA+DQo+ID4gICAJCWNvbXBsZXRlX2FzeW5jX3BrdHMo dmRldik7DQo+ID4gLQkJcmV0ID0gcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYt PnZpZCwNCj4gVklSVElPX1JYUSwgbSwgbnJfeG1pdCk7DQo+ID4gKwkJcmV0ID0gcnRlX3Zob3N0 X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtPnZpZCwNCj4gVklSVElPX1JYUSwgbSwgbnJfeG1p dCwgZG1hX2lkLCAwKTsNCj4gPiAgIAkJX19hdG9taWNfYWRkX2ZldGNoKCZ2ZGV2LT5wa3RzX2lu ZmxpZ2h0LCByZXQsDQo+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+DQo+ID4gICAJCWVucXVldWVf ZmFpbCA9IG5yX3htaXQgLSByZXQ7DQo+ID4gQEAgLTkwNSw3ICsxMDI3LDcgQEAgZHJhaW5fdmhv c3Qoc3RydWN0IHZob3N0X2RldiAqdmRldikNCj4gPiAgIAkJCQlfX0FUT01JQ19TRVFfQ1NUKTsN Cj4gPiAgIAl9DQo+ID4NCj4gPiAtCWlmICghYXN5bmNfdmhvc3RfZHJpdmVyKQ0KPiA+ICsJaWYg KCFkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkNCj4g PiAgIAkJZnJlZV9wa3RzKG0sIG5yX3htaXQpOw0KPiA+ICAgfQ0KPiA+DQo+ID4gQEAgLTEyMTEs MTIgKzEzMzMsMTMgQEAgZHJhaW5fZXRoX3J4KHN0cnVjdCB2aG9zdF9kZXYgKnZkZXYpDQo+ID4g ICAJaWYgKGJ1aWx0aW5fbmV0X2RyaXZlcikgew0KPiA+ICAgCQllbnF1ZXVlX2NvdW50ID0gdnNf ZW5xdWV1ZV9wa3RzKHZkZXYsIFZJUlRJT19SWFEsDQo+ID4gICAJCQkJCQlwa3RzLCByeF9jb3Vu dCk7DQo+ID4gLQl9IGVsc2UgaWYgKGFzeW5jX3Zob3N0X2RyaXZlcikgew0KPiA+ICsJfSBlbHNl IGlmIChkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkg ew0KPiA+ICAgCQl1aW50MTZfdCBlbnF1ZXVlX2ZhaWwgPSAwOw0KPiA+ICsJCWludDE2X3QgZG1h X2lkID0gZG1hX2JpbmRbdmRldi0NCj4gPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+ ID4NCj4gPiAgIAkJY29tcGxldGVfYXN5bmNfcGt0cyh2ZGV2KTsNCj4gPiAgIAkJZW5xdWV1ZV9j b3VudCA9IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdCh2ZGV2LQ0KPiA+dmlkLA0KPiA+ IC0JCQkJCVZJUlRJT19SWFEsIHBrdHMsIHJ4X2NvdW50KTsNCj4gPiArCQkJCQlWSVJUSU9fUlhR LCBwa3RzLCByeF9jb3VudCwgZG1hX2lkLA0KPiAwKTsNCj4gPiAgIAkJX19hdG9taWNfYWRkX2Zl dGNoKCZ2ZGV2LT5wa3RzX2luZmxpZ2h0LCBlbnF1ZXVlX2NvdW50LA0KPiBfX0FUT01JQ19TRVFf Q1NUKTsNCj4gPg0KPiA+ICAgCQllbnF1ZXVlX2ZhaWwgPSByeF9jb3VudCAtIGVucXVldWVfY291 bnQ7DQo+ID4gQEAgLTEyMzUsNyArMTM1OCw3IEBAIGRyYWluX2V0aF9yeChzdHJ1Y3Qgdmhvc3Rf ZGV2ICp2ZGV2KQ0KPiA+ICAgCQkJCV9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ICAgCX0NCj4gPg0K PiA+IC0JaWYgKCFhc3luY192aG9zdF9kcml2ZXIpDQo+ID4gKwlpZiAoIWRtYV9iaW5kW3ZkZXYt PnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkKQ0KPiA+ICAgCQlmcmVlX3BrdHMo cGt0cywgcnhfY291bnQpOw0KPiA+ICAgfQ0KPiA+DQo+ID4gQEAgLTEzODcsMTggKzE1MTAsMjAg QEAgZGVzdHJveV9kZXZpY2UoaW50IHZpZCkNCj4gPiAgIAkJIiglZCkgZGV2aWNlIGhhcyBiZWVu IHJlbW92ZWQgZnJvbSBkYXRhIGNvcmVcbiIsDQo+ID4gICAJCXZkZXYtPnZpZCk7DQo+ID4NCj4g PiAtCWlmIChhc3luY192aG9zdF9kcml2ZXIpIHsNCj4gPiArCWlmIChkbWFfYmluZFt2aWRdLmRt YXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkgew0KPiA+ICAgCQl1aW50MTZfdCBuX3BrdCA9 IDA7DQo+ID4gKwkJaW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JY UV0uZGV2X2lkOw0KPiA+ICAgCQlzdHJ1Y3QgcnRlX21idWYgKm1fY3BsW3ZkZXYtPnBrdHNfaW5m bGlnaHRdOw0KPiA+DQo+ID4gICAJCXdoaWxlICh2ZGV2LT5wa3RzX2luZmxpZ2h0KSB7DQo+ID4g ICAJCQluX3BrdCA9IHJ0ZV92aG9zdF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwNCj4g VklSVElPX1JYUSwNCj4gPiAtCQkJCQkJbV9jcGwsIHZkZXYtPnBrdHNfaW5mbGlnaHQpOw0KPiA+ ICsJCQkJCQltX2NwbCwgdmRldi0+cGt0c19pbmZsaWdodCwNCj4gZG1hX2lkLCAwKTsNCj4gPiAg IAkJCWZyZWVfcGt0cyhtX2NwbCwgbl9wa3QpOw0KPiA+ICAgCQkJX19hdG9taWNfc3ViX2ZldGNo KCZ2ZGV2LT5wa3RzX2luZmxpZ2h0LCBuX3BrdCwNCj4gX19BVE9NSUNfU0VRX0NTVCk7DQo+ID4g ICAJCX0NCj4gPg0KPiA+ICAgCQlydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyKHZp ZCwgVklSVElPX1JYUSk7DQo+ID4gKwkJZG1hX2JpbmRbdmlkXS5kbWFzW1ZJUlRJT19SWFFdLmFz eW5jX2VuYWJsZWQgPSBmYWxzZTsNCj4gPiAgIAl9DQo+ID4NCj4gPiAgIAlydGVfZnJlZSh2ZGV2 KTsNCj4gPiBAQCAtMTQ2OCwyMCArMTU5MywxNCBAQCBuZXdfZGV2aWNlKGludCB2aWQpDQo+ID4g ICAJCSIoJWQpIGRldmljZSBoYXMgYmVlbiBhZGRlZCB0byBkYXRhIGNvcmUgJWRcbiIsDQo+ID4g ICAJCXZpZCwgdmRldi0+Y29yZWlkKTsNCj4gPg0KPiA+IC0JaWYgKGFzeW5jX3Zob3N0X2RyaXZl cikgew0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY29uZmlnIGNvbmZpZyA9IHswfTsN Cj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzIGNoYW5uZWxfb3BzOw0K PiA+IC0NCj4gPiAtCQlpZiAoZG1hX3R5cGUgIT0gTlVMTCAmJiBzdHJuY21wKGRtYV90eXBlLCAi aW9hdCIsIDQpID09IDApIHsNCj4gPiAtCQkJY2hhbm5lbF9vcHMudHJhbnNmZXJfZGF0YSA9IGlv YXRfdHJhbnNmZXJfZGF0YV9jYjsNCj4gPiAtCQkJY2hhbm5lbF9vcHMuY2hlY2tfY29tcGxldGVk X2NvcGllcyA9DQo+ID4gLQkJCQlpb2F0X2NoZWNrX2NvbXBsZXRlZF9jb3BpZXNfY2I7DQo+ID4g LQ0KPiA+IC0JCQljb25maWcuZmVhdHVyZXMgPSBSVEVfVkhPU1RfQVNZTkNfSU5PUkRFUjsNCj4g PiArCWlmIChkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0uZGV2X2lkICE9IElOVkFMSURf RE1BX0lEKSB7DQo+ID4gKwkJaW50IHJldDsNCj4gPg0KPiA+IC0JCQlyZXR1cm4gcnRlX3Zob3N0 X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLA0KPiBWSVJUSU9fUlhRLA0KPiA+IC0JCQkJY29u ZmlnLCAmY2hhbm5lbF9vcHMpOw0KPiA+ICsJCXJldCA9IHJ0ZV92aG9zdF9hc3luY19jaGFubmVs X3JlZ2lzdGVyKHZpZCwgVklSVElPX1JYUSk7DQo+ID4gKwkJaWYgKHJldCA9PSAwKSB7DQo+ID4g KwkJCWRtYV9iaW5kW3ZpZF0uZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkID0NCj4gdHJ1 ZTsNCj4gPiAgIAkJfQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gICAJfQ0KPiA+DQo+ID4gICAJ cmV0dXJuIDA7DQo+ID4gQEAgLTE1MDIsMTQgKzE2MjEsMTUgQEAgdnJpbmdfc3RhdGVfY2hhbmdl ZChpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwgaW50IGVuYWJsZSkNCj4gPiAgIAlpZiAo cXVldWVfaWQgIT0gVklSVElPX1JYUSkNCj4gPiAgIAkJcmV0dXJuIDA7DQo+ID4NCj4gPiAtCWlm IChhc3luY192aG9zdF9kcml2ZXIpIHsNCj4gPiArCWlmIChkbWFfYmluZFt2aWRdLmRtYXNbcXVl dWVfaWRdLmFzeW5jX2VuYWJsZWQpIHsNCj4gPiAgIAkJaWYgKCFlbmFibGUpIHsNCj4gPiAgIAkJ CXVpbnQxNl90IG5fcGt0ID0gMDsNCj4gPiArCQkJaW50MTZfdCBkbWFfaWQgPQ0KPiBkbWFfYmlu ZFt2aWRdLmRtYXNbVklSVElPX1JYUV0uZGV2X2lkOw0KPiA+ICAgCQkJc3RydWN0IHJ0ZV9tYnVm ICptX2NwbFt2ZGV2LT5wa3RzX2luZmxpZ2h0XTsNCj4gPg0KPiA+ICAgCQkJd2hpbGUgKHZkZXYt PnBrdHNfaW5mbGlnaHQpIHsNCj4gPiAgIAkJCQluX3BrdCA9DQo+IHJ0ZV92aG9zdF9jbGVhcl9x dWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwgcXVldWVfaWQsDQo+ID4gLQkJCQkJCQltX2NwbCwgdmRl di0NCj4gPnBrdHNfaW5mbGlnaHQpOw0KPiA+ICsJCQkJCQkJbV9jcGwsIHZkZXYtDQo+ID5wa3Rz X2luZmxpZ2h0LCBkbWFfaWQsIDApOw0KPiA+ICAgCQkJCWZyZWVfcGt0cyhtX2NwbCwgbl9wa3Qp Ow0KPiA+ICAgCQkJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwNCj4g bl9wa3QsIF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ICAgCQkJfQ0KPiA+IEBAIC0xNjU3LDYgKzE3 NzcsMjUgQEAgY3JlYXRlX21idWZfcG9vbCh1aW50MTZfdCBucl9wb3J0LCB1aW50MzJfdA0KPiBu cl9zd2l0Y2hfY29yZSwgdWludDMyX3QgbWJ1Zl9zaXplLA0KPiA+ICAgCQlydGVfZXhpdChFWElU X0ZBSUxVUkUsICJDYW5ub3QgY3JlYXRlIG1idWYgcG9vbFxuIik7DQo+ID4gICB9DQo+ID4NCj4g PiArc3RhdGljIHZvaWQNCj4gPiAraW5pdF9kbWEodm9pZCkNCj4gPiArew0KPiA+ICsJaW50IGk7 DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IE1BWF9WSE9TVF9ERVZJQ0U7IGkrKykgew0K PiA+ICsJCWludCBqOw0KPiA+ICsNCj4gPiArCQlmb3IgKGogPSAwOyBqIDwgUlRFX01BWF9RVUVV RVNfUEVSX1BPUlQgKiAyOyBqKyspIHsNCj4gPiArCQkJZG1hX2JpbmRbaV0uZG1hc1tqXS5kZXZf aWQgPSBJTlZBTElEX0RNQV9JRDsNCj4gPiArCQkJZG1hX2JpbmRbaV0uZG1hc1tqXS5hc3luY19l bmFibGVkID0gZmFsc2U7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBSVEVfRE1BREVWX0RFRkFVTFRfTUFYOyBpKyspIHsNCj4gPiArCQlkbWFfY29uZmln W2ldLmRldl9pZCA9IElOVkFMSURfRE1BX0lEOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICAgLyoNCj4gPiAgICAqIE1haW4gZnVuY3Rpb24sIGRvZXMgaW5pdGlhbGlzYXRpb24gYW5kIGNh bGxzIHRoZSBwZXItbGNvcmUgZnVuY3Rpb25zLg0KPiA+ICAgICovDQo+ID4gQEAgLTE2NzksNiAr MTgxOCw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gPiAgIAlhcmdjIC09IHJl dDsNCj4gPiAgIAlhcmd2ICs9IHJldDsNCj4gPg0KPiA+ICsJLyogaW5pdGlhbGl6ZSBkbWEgc3Ry dWN0dXJlcyAqLw0KPiA+ICsJaW5pdF9kbWEoKTsNCj4gPiArDQo+ID4gICAJLyogcGFyc2UgYXBw IGFyZ3VtZW50cyAqLw0KPiA+ICAgCXJldCA9IHVzX3Zob3N0X3BhcnNlX2FyZ3MoYXJnYywgYXJn dik7DQo+ID4gICAJaWYgKHJldCA8IDApDQo+ID4gQEAgLTE3NTQsNiArMTg5NiwyMCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+ID4gICAJaWYgKGNsaWVudF9tb2RlKQ0KPiA+ICAg CQlmbGFncyB8PSBSVEVfVkhPU1RfVVNFUl9DTElFTlQ7DQo+ID4NCj4gPiArCWlmIChhc3luY192 aG9zdF9kcml2ZXIpIHsNCj4gDQo+IFlvdSBzaG91bGQgYmUgYWJsZSB0byBnZXQgcmlkIG9mZiBh c3luY192aG9zdF9kcml2ZXIgYW5kIGluc3RlYWQgcmVseSBvbg0KPiBkbWFfY291bnQuDQoNClll cywgSSB3aWxsIHJlbW92ZSBpdC4NCg0KPiANCj4gPiArCQlpZiAocnRlX3Zob3N0X2FzeW5jX2Rt YV9jb25maWd1cmUoZG1hX2NvbmZpZywgZG1hX2NvdW50KQ0KPiA8IDApIHsNCj4gPiArCQkJUlRF X0xPRyhFUlIsIFZIT1NUX1BPUlQsICJGYWlsZWQgdG8gY29uZmlndXJlDQo+IERNQSBpbiB2aG9z dC5cbiIpOw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgZG1hX2NvdW50OyBpKyspIHsNCj4gPiAr CQkJCWlmIChkbWFfY29uZmlnW2ldLmRldl9pZCAhPSBJTlZBTElEX0RNQV9JRCkNCj4gew0KPiA+ ICsJCQkJCXJ0ZV9kbWFfc3RvcChkbWFfY29uZmlnW2ldLmRldl9pZCk7DQo+ID4gKwkJCQkJZG1h X2NvbmZpZ1tpXS5kZXZfaWQgPQ0KPiBJTlZBTElEX0RNQV9JRDsNCj4gPiArCQkJCX0NCj4gPiAr CQkJfQ0KPiA+ICsJCQlkbWFfY291bnQgPSAwOw0KPiA+ICsJCQlhc3luY192aG9zdF9kcml2ZXIg PSBmYWxzZTsNCj4gDQo+IExldCdzIGp1c3QgZXhpdCB0aGUgYXBwIGlmIERNQXMgd2VyZSBwcm92 aWRlZCBpbiBjb21tYW5kIGxpbmUgYnV0IGNhbm5vdA0KPiBiZSB1c2VkLg0KDQpPSywgSSB3aWxs IGNoYW5nZSBsYXRlci4NCg0KPiANCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAgCS8q IFJlZ2lzdGVyIHZob3N0IHVzZXIgZHJpdmVyIHRvIGhhbmRsZSB2aG9zdCBtZXNzYWdlcy4gKi8N Cj4gPiAgIAlmb3IgKGkgPSAwOyBpIDwgbmJfc29ja2V0czsgaSsrKSB7DQo+ID4gICAJCWNoYXIg KmZpbGUgPSBzb2NrZXRfZmlsZXMgKyBpICogUEFUSF9NQVg7DQo+ID4gZGlmZiAtLWdpdCBhL2xp Yi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaCBiL2xpYi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0K PiA+IGluZGV4IGE4N2VhNmJhMzcuLjIzYTdhMmQ4YjMgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL3Zo b3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ID4gKysrIGIvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3lu Yy5oDQo+ID4gQEAgLTI3LDcwICsyNywxMiBAQCBzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyIHsN Cj4gPiAgIH07DQo+ID4NCj4gPiAgIC8qKg0KPiA+IC0gKiBkbWEgdHJhbnNmZXIgc3RhdHVzDQo+ ID4gKyAqIERNQSBkZXZpY2UgaW5mb3JtYXRpb24NCj4gPiAgICAqLw0KPiA+IC1zdHJ1Y3QgcnRl X3Zob3N0X2FzeW5jX3N0YXR1cyB7DQo+ID4gLQkvKiogQW4gYXJyYXkgb2YgYXBwbGljYXRpb24g c3BlY2lmaWMgZGF0YSBmb3Igc291cmNlIG1lbW9yeSAqLw0KPiA+IC0JdWludHB0cl90ICpzcmNf b3BhcXVlX2RhdGE7DQo+ID4gLQkvKiogQW4gYXJyYXkgb2YgYXBwbGljYXRpb24gc3BlY2lmaWMg ZGF0YSBmb3IgZGVzdGluYXRpb24gbWVtb3J5ICovDQo+ID4gLQl1aW50cHRyX3QgKmRzdF9vcGFx dWVfZGF0YTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0gKiBkbWEgb3BlcmF0aW9u IGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhcHBsaWNhdGlvbnMNCj4gPiAtICovDQo+ ID4gLXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgew0KPiA+IC0JLyoqDQo+ID4g LQkgKiBpbnN0cnVjdCBhc3luYyBlbmdpbmVzIHRvIHBlcmZvcm0gY29waWVzIGZvciBhIGJhdGNo IG9mIHBhY2tldHMNCj4gPiAtCSAqDQo+ID4gLQkgKiBAcGFyYW0gdmlkDQo+ID4gLQkgKiAgaWQg b2Ygdmhvc3QgZGV2aWNlIHRvIHBlcmZvcm0gZGF0YSBjb3BpZXMNCj4gPiAtCSAqIEBwYXJhbSBx dWV1ZV9pZA0KPiA+IC0JICogIHF1ZXVlIGlkIHRvIHBlcmZvcm0gZGF0YSBjb3BpZXMNCj4gPiAt CSAqIEBwYXJhbSBpb3ZfaXRlcg0KPiA+IC0JICogIGFuIGFycmF5IG9mIElPViBpdGVyYXRvcnMN Cj4gPiAtCSAqIEBwYXJhbSBvcGFxdWVfZGF0YQ0KPiA+IC0JICogIG9wYXF1ZSBkYXRhIHBhaXIg c2VuZGluZyB0byBETUEgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gY291bnQNCj4gPiAtCSAqICBu dW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICJkZXNjcyIgYXJyYXkNCj4gPiAtCSAqIEByZXR1cm4N Cj4gPiAtCSAqICBudW1iZXIgb2YgSU9WIGl0ZXJhdG9ycyBwcm9jZXNzZWQsIG5lZ2F0aXZlIHZh bHVlIG1lYW5zIGVycm9yDQo+ID4gLQkgKi8NCj4gPiAtCWludDMyX3QgKCp0cmFuc2Zlcl9kYXRh KShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2lv dl9pdGVyICppb3ZfaXRlciwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAq b3BhcXVlX2RhdGEsDQo+ID4gLQkJdWludDE2X3QgY291bnQpOw0KPiA+IC0JLyoqDQo+ID4gLQkg KiBjaGVjayBjb3B5LWNvbXBsZXRlZCBwYWNrZXRzIGZyb20gdGhlIGFzeW5jIGVuZ2luZQ0KPiA+ IC0JICogQHBhcmFtIHZpZA0KPiA+IC0JICogIGlkIG9mIHZob3N0IGRldmljZSB0byBjaGVjayBj b3B5IGNvbXBsZXRpb24NCj4gPiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0KPiA+IC0JICogIHF1ZXVl IGlkIHRvIGNoZWNrIGNvcHkgY29tcGxldGlvbg0KPiA+IC0JICogQHBhcmFtIG9wYXF1ZV9kYXRh DQo+ID4gLQkgKiAgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG9wYXF1ZSBkYXRhIHBhaXIgZnJvbSBE TUEgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gbWF4X3BhY2tldHMNCj4gPiAtCSAqICBtYXggbnVt YmVyIG9mIHBhY2tldHMgY291bGQgYmUgY29tcGxldGVkDQo+ID4gLQkgKiBAcmV0dXJuDQo+ID4g LQkgKiAgbnVtYmVyIG9mIGFzeW5jIGRlc2NzIGNvbXBsZXRlZCwgbmVnYXRpdmUgdmFsdWUgbWVh bnMgZXJyb3INCj4gPiAtCSAqLw0KPiA+IC0JaW50MzJfdCAoKmNoZWNrX2NvbXBsZXRlZF9jb3Bp ZXMpKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3Rf YXN5bmNfc3RhdHVzICpvcGFxdWVfZGF0YSwNCj4gPiAtCQl1aW50MTZfdCBtYXhfcGFja2V0cyk7 DQo+ID4gLX07DQo+ID4gLQ0KPiA+IC0vKioNCj4gPiAtICogIGFzeW5jIGNoYW5uZWwgZmVhdHVy ZXMNCj4gPiAtICovDQo+ID4gLWVudW0gew0KPiA+IC0JUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVIg PSAxVSA8PCAwLA0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAqICBhc3luYyBjaGFu bmVsIGNvbmZpZ3VyYXRpb24NCj4gPiAtICovDQo+ID4gLXN0cnVjdCBydGVfdmhvc3RfYXN5bmNf Y29uZmlnIHsNCj4gPiAtCXVpbnQzMl90IGZlYXR1cmVzOw0KPiA+IC0JdWludDMyX3QgcnN2ZFsy XTsNCj4gPiArc3RydWN0IHJ0ZV92aG9zdF9hc3luY19kbWFfaW5mbyB7DQo+ID4gKwlpbnQxNl90 IGRldl9pZDsJLyogRE1BIGRldmljZSBJRCAqLw0KPiA+ICsJdWludDE2X3QgbWF4X3ZjaGFuczsJ LyogbWF4IG51bWJlciBvZiB2Y2hhbiAqLw0KPiA+ICsJdWludDE2X3QgbWF4X2Rlc2M7CS8qIG1h eCBkZXNjIG51bWJlciBvZiB2Y2hhbiAqLw0KPiA+ICAgfTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4g QEAgLTEwMCwxNyArNDIsMTEgQEAgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiA+ ICAgICogIHZob3N0IGRldmljZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ ID4gICAgKiBAcGFyYW0gcXVldWVfaWQNCj4gPiAgICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBj aGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ID4gLSAqIEBwYXJhbSBjb25maWcNCj4gPiAtICog IEFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUNCj4gPiAtICogQHBhcmFtIG9w cw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBvcGVyYXRpb24gY2FsbGJhY2tzDQo+ID4gICAgKiBA cmV0dXJuDQo+ID4gICAgKiAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlcw0KPiA+ICAgICov DQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAtaW50IHJ0ZV92aG9zdF9hc3luY19jaGFu bmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0Jc3RydWN0IHJ0 ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3lu Y19jaGFubmVsX29wcyAqb3BzKTsNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3Jl Z2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4g ICAgKiBVbnJlZ2lzdGVyIGFuIGFzeW5jIGNoYW5uZWwgZm9yIGEgdmhvc3QgcXVldWUNCj4gPiBA QCAtMTM2LDE3ICs3MiwxMSBAQCBpbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rl cihpbnQgdmlkLA0KPiB1aW50MTZfdCBxdWV1ZV9pZCk7DQo+ID4gICAgKiAgdmhvc3QgZGV2aWNl IGlkIGFzeW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQgdG8NCj4gPiAgICAqIEBwYXJhbSBxdWV1 ZV9pZA0KPiA+ICAgICogIHZob3N0IHF1ZXVlIGlkIGFzeW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNo ZWQgdG8NCj4gPiAtICogQHBhcmFtIGNvbmZpZw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBjb25m aWd1cmF0aW9uDQo+ID4gLSAqIEBwYXJhbSBvcHMNCj4gPiAtICogIEFzeW5jIGNoYW5uZWwgb3Bl cmF0aW9uIGNhbGxiYWNrcw0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIDAgb24gc3VjY2Vz cywgLTEgb24gZmFpbHVyZXMNCj4gPiAgICAqLw0KPiA+ICAgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gLWludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGlu dCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3lu Y19jb25maWcgY29uZmlnLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w cyAqb3BzKTsNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVh ZF91bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpOw0KPiA+DQo+ID4gICAvKioN Cj4gPiAgICAqIFVucmVnaXN0ZXIgYW4gYXN5bmMgY2hhbm5lbCBmb3IgYSB2aG9zdCBxdWV1ZSB3 aXRob3V0IHBlcmZvcm1pbmcgYW55DQo+ID4gQEAgLTE3OSwxMiArMTA5LDE3IEBAIGludA0KPiBy dGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50IHZpZCwN Cj4gPiAgICAqICBhcnJheSBvZiBwYWNrZXRzIHRvIGJlIGVucXVldWVkDQo+ID4gICAgKiBAcGFy YW0gY291bnQNCj4gPiAgICAqICBwYWNrZXRzIG51bSB0byBiZSBlbnF1ZXVlZA0KPiA+ICsgKiBA cGFyYW0gZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0K PiA+ICsgKiBAcGFyYW0gdmNoYW4NCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZpcnR1YWwg RE1BIGNoYW5uZWwNCj4gPiAgICAqIEByZXR1cm4NCj4gPiAgICAqICBudW0gb2YgcGFja2V0cyBl bnF1ZXVlZA0KPiA+ICAgICovDQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAgIHVpbnQx Nl90IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZfdCBxdWV1 ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCk7DQo+ ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQsIGludDE2X3QgZG1h X2lkLA0KPiA+ICsJCXVpbnQxNl90IHZjaGFuKTsNCj4gDQo+IE1heWJlIHVzaW5nIHZjaGFuX2lk IHdvdWxkIGJlIGNsZWFyZXIgZm9yIHRoZSBBUEkgdXNlciwgc2FtZSBjb21tZW50DQo+IGJlbG93 Lg0KDQpZZXMsIEkgd2lsbCBjaGFuZ2UgbGF0ZXIuDQoNCj4gDQo+ID4NCj4gPiAgIC8qKg0KPiA+ ICAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgYXN5bmMgY29tcGxldGlvbiBzdGF0dXMgZm9yIGEg c3BlY2lmaWMgdmhvc3QNCj4gPiBAQCAtMTk5LDEyICsxMzQsMTcgQEAgdWludDE2X3QgcnRlX3Zo b3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KGludA0KPiB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0K PiA+ICAgICogIGJsYW5rIGFycmF5IHRvIGdldCByZXR1cm4gcGFja2V0IHBvaW50ZXINCj4gPiAg ICAqIEBwYXJhbSBjb3VudA0KPiA+ICAgICogIHNpemUgb2YgdGhlIHBhY2tldCBhcnJheQ0KPiA+ ICsgKiBAcGFyYW0gZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRl dmljZQ0KPiA+ICsgKiBAcGFyYW0gdmNoYW4NCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZp cnR1YWwgRE1BIGNoYW5uZWwNCj4gPiAgICAqIEByZXR1cm4NCj4gPiAgICAqICBudW0gb2YgcGFj a2V0cyByZXR1cm5lZA0KPiA+ICAgICovDQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAg IHVpbnQxNl90IHJ0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVpbnQx Nl90IHF1ZXVlX2lkLA0KPiA+IC0JCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNv dW50KTsNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCwgaW50 MTZfdCBkbWFfaWQsDQo+ID4gKwkJdWludDE2X3QgdmNoYW4pOw0KPiA+DQo+ID4gICAvKioNCj4g PiAgICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGluLWZsaWdodCBwYWNr ZXRzIGZvciB0aGUgdmhvc3QNCj4gPiBAQCAtMjM1LDExICsxNzUsMzIgQEAgaW50IHJ0ZV92aG9z dF9hc3luY19nZXRfaW5mbGlnaHQoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpOw0KPiA+ ICAgICogIEJsYW5rIGFycmF5IHRvIGdldCByZXR1cm4gcGFja2V0IHBvaW50ZXINCj4gPiAgICAq IEBwYXJhbSBjb3VudA0KPiA+ICAgICogIFNpemUgb2YgdGhlIHBhY2tldCBhcnJheQ0KPiA+ICsg KiBAcGFyYW0gZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmlj ZQ0KPiA+ICsgKiBAcGFyYW0gdmNoYW4NCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZpcnR1 YWwgRE1BIGNoYW5uZWwNCj4gPiAgICAqIEByZXR1cm4NCj4gPiAgICAqICBOdW1iZXIgb2YgcGFj a2V0cyByZXR1cm5lZA0KPiA+ICAgICovDQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAg IHVpbnQxNl90IHJ0ZV92aG9zdF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVp bnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0JCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90 IGNvdW50KTsNCj4gPiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCwg aW50MTZfdCBkbWFfaWQsDQo+ID4gKwkJdWludDE2X3QgdmNoYW4pOw0KPiA+ICsvKioNCj4gPiAr ICogVGhlIERNQSB2Q2hhbm5lbHMgdXNlZCBpbiBhc3luY2hyb25vdXMgZGF0YSBwYXRoIG11c3Qg YmUNCj4gY29uZmlndXJlZA0KPiA+ICsgKiBmaXJzdC4gU28gdGhpcyBmdW5jdGlvbiBuZWVkcyB0 byBiZSBjYWxsZWQgYmVmb3JlIGVuYWJsaW5nIERNQQ0KPiA+ICsgKiBhY2NlbGVyYXRpb24gZm9y IHZyaW5nLiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBhc3luY2hyb25vdXMgZGF0YSBwYXRoDQo+ ID4gKyAqIGNhbm5vdCBiZSBlbmFibGVkIGZvciBhbnkgdnJpbmcgZnVydGhlci4NCj4gPiArICoN Cj4gPiArICogQHBhcmFtIGRtYXMNCj4gPiArICogIERNQSBpbmZvcm1hdGlvbg0KPiA+ICsgKiBA cGFyYW0gY291bnQNCj4gPiArICogIEVsZW1lbnQgbnVtYmVyIG9mICdkbWFzJw0KPiA+ICsgKiBA cmV0dXJuDQo+ID4gKyAqICAwIG9uIHN1Y2Nlc3MsIGFuZCAtMSBvbiBmYWlsdXJlDQo+ID4gKyAq Lw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19kbWFf Y29uZmlndXJlKHN0cnVjdCBydGVfdmhvc3RfYXN5bmNfZG1hX2luZm8NCj4gKmRtYXMsDQo+ID4g KwkJdWludDE2X3QgY291bnQpOw0KPiA+DQo+ID4gICAjZW5kaWYgLyogX1JURV9WSE9TVF9BU1lO Q19IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvdmVyc2lvbi5tYXAgYi9saWIvdmhv c3QvdmVyc2lvbi5tYXANCj4gPiBpbmRleCBhN2VmN2YxOTc2Li4xMjAyYmE5YzFhIDEwMDY0NA0K PiA+IC0tLSBhL2xpYi92aG9zdC92ZXJzaW9uLm1hcA0KPiA+ICsrKyBiL2xpYi92aG9zdC92ZXJz aW9uLm1hcA0KPiA+IEBAIC04NCw2ICs4NCw5IEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4NCj4gPiAg IAkjIGFkZGVkIGluIDIxLjExDQo+ID4gICAJcnRlX3Zob3N0X2dldF9tb25pdG9yX2FkZHI7DQo+ ID4gKw0KPiA+ICsJIyBhZGRlZCBpbiAyMi4wMw0KPiA+ICsJcnRlX3Zob3N0X2FzeW5jX2RtYV9j b25maWd1cmU7DQo+ID4gICB9Ow0KPiA+DQo+ID4gICBJTlRFUk5BTCB7DQo+ID4gZGlmZiAtLWdp dCBhL2xpYi92aG9zdC92aG9zdC5jIGIvbGliL3Zob3N0L3Zob3N0LmMNCj4gPiBpbmRleCAxM2E5 YmI5ZGQxLi4zMmYzN2Y0ODUxIDEwMDY0NA0KPiA+IC0tLSBhL2xpYi92aG9zdC92aG9zdC5jDQo+ ID4gKysrIGIvbGliL3Zob3N0L3Zob3N0LmMNCj4gPiBAQCAtMzQ0LDYgKzM0NCw3IEBAIHZob3N0 X2ZyZWVfYXN5bmNfbWVtKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQ0KPiA+ICAgCQlyZXR1 cm47DQo+ID4NCj4gPiAgIAlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfaW5mbyk7DQo+ID4gKwly dGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfY21wbF9mbGFnKTsNCj4gPg0KPiA+ICAgCXJ0ZV9mcmVl KHZxLT5hc3luYy0+YnVmZmVyc19wYWNrZWQpOw0KPiA+ICAgCXZxLT5hc3luYy0+YnVmZmVyc19w YWNrZWQgPSBOVUxMOw0KPiA+IEBAIC0xNjI2LDggKzE2MjcsNyBAQCBydGVfdmhvc3RfZXh0ZXJu X2NhbGxiYWNrX3JlZ2lzdGVyKGludCB2aWQsDQo+ID4gICB9DQo+ID4NCj4gPiAgIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+IC1hc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2 aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hh bm5lbF9vcHMgKm9wcykNCj4gPiArYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50 MTZfdCBxdWV1ZV9pZCkNCj4gPiAgIHsNCj4gPiAgIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0g Z2V0X2RldmljZSh2aWQpOw0KPiA+ICAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZGV2 LT52aXJ0cXVldWVbcXVldWVfaWRdOw0KPiA+IEBAIC0xNjU2LDYgKzE2NTYsMTQgQEAgYXN5bmNf Y2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAgIAkJ Z290byBvdXRfZnJlZV9hc3luYzsNCj4gPiAgIAl9DQo+ID4NCj4gPiArCWFzeW5jLT5wa3RzX2Nt cGxfZmxhZyA9IHJ0ZV96bWFsbG9jX3NvY2tldChOVUxMLCB2cS0+c2l6ZSAqDQo+IHNpemVvZihi b29sKSwNCj4gPiArCQkJUlRFX0NBQ0hFX0xJTkVfU0laRSwgbm9kZSk7DQo+ID4gKwlpZiAoIWFz eW5jLT5wa3RzX2NtcGxfZmxhZykgew0KPiA+ICsJCVZIT1NUX0xPR19DT05GSUcoRVJSLCAiZmFp bGVkIHRvIGFsbG9jYXRlIGFzeW5jDQo+IHBrdHNfY21wbF9mbGFnICh2aWQgJWQsIHFpZDogJWQp XG4iLA0KPiA+ICsJCQkJdmlkLCBxdWV1ZV9pZCk7DQo+ID4gKwkJZ290byBvdXRfZnJlZV9hc3lu YzsNCj4gPiArCX0NCj4gPiArDQo+ID4gICAJaWYgKHZxX2lzX3BhY2tlZChkZXYpKSB7DQo+ID4g ICAJCWFzeW5jLT5idWZmZXJzX3BhY2tlZCA9IHJ0ZV9tYWxsb2Nfc29ja2V0KE5VTEwsDQo+ID4g ICAJCQkJdnEtPnNpemUgKiBzaXplb2Yoc3RydWN0DQo+IHZyaW5nX3VzZWRfZWxlbV9wYWNrZWQp LA0KPiA+IEBAIC0xNjc2LDkgKzE2ODQsNiBAQCBhc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2 aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+ICAgCQl9DQo+ID4gICAJfQ0KPiA+DQo+ID4g LQlhc3luYy0+b3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPSBvcHMtDQo+ID5jaGVja19jb21w bGV0ZWRfY29waWVzOw0KPiA+IC0JYXN5bmMtPm9wcy50cmFuc2Zlcl9kYXRhID0gb3BzLT50cmFu c2Zlcl9kYXRhOw0KPiA+IC0NCj4gPiAgIAl2cS0+YXN5bmMgPSBhc3luYzsNCj4gPg0KPiA+ICAg CXJldHVybiAwOw0KPiA+IEBAIC0xNjkxLDE1ICsxNjk2LDEzIEBAIGFzeW5jX2NoYW5uZWxfcmVn aXN0ZXIoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQsDQo+ID4gICB9DQo+ID4NCj4gPiAg IGludA0KPiA+IC1ydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50 MTZfdCBxdWV1ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25m aWcsDQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAqb3BzKQ0KPiA+ ICtydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1 ZV9pZCkNCj4gPiAgIHsNCj4gPiAgIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsNCj4gPiAg IAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+ICAgCWludCBy ZXQ7DQo+ID4NCj4gPiAtCWlmIChkZXYgPT0gTlVMTCB8fCBvcHMgPT0gTlVMTCkNCj4gPiArCWlm IChkZXYgPT0gTlVMTCkNCj4gPiAgIAkJcmV0dXJuIC0xOw0KPiA+DQo+ID4gICAJaWYgKHF1ZXVl X2lkID49IFZIT1NUX01BWF9WUklORykNCj4gPiBAQCAtMTcxMCwzMyArMTcxMywyMCBAQCBydGVf dmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLA0KPiB1aW50MTZfdCBxdWV1ZV9p ZCwNCj4gPiAgIAlpZiAodW5saWtlbHkodnEgPT0gTlVMTCB8fCAhZGV2LT5hc3luY19jb3B5KSkN Cj4gPiAgIAkJcmV0dXJuIC0xOw0KPiA+DQo+ID4gLQlpZiAodW5saWtlbHkoIShjb25maWcuZmVh dHVyZXMgJiBSVEVfVkhPU1RfQVNZTkNfSU5PUkRFUikpKSB7DQo+ID4gLQkJVkhPU1RfTE9HX0NP TkZJRyhFUlIsDQo+ID4gLQkJCSJhc3luYyBjb3B5IGlzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLWlu b3JkZXIgbW9kZSAiDQo+ID4gLQkJCSIodmlkICVkLCBxaWQ6ICVkKVxuIiwgdmlkLCBxdWV1ZV9p ZCk7DQo+ID4gLQkJcmV0dXJuIC0xOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCWlmICh1bmxpa2Vs eShvcHMtPmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPT0gTlVMTCB8fA0KPiA+IC0JCW9wcy0+dHJh bnNmZXJfZGF0YSA9PSBOVUxMKSkNCj4gPiAtCQlyZXR1cm4gLTE7DQo+ID4gLQ0KPiA+ICAgCXJ0 ZV9zcGlubG9ja19sb2NrKCZ2cS0+YWNjZXNzX2xvY2spOw0KPiA+IC0JcmV0ID0gYXN5bmNfY2hh bm5lbF9yZWdpc3Rlcih2aWQsIHF1ZXVlX2lkLCBvcHMpOw0KPiA+ICsJcmV0ID0gYXN5bmNfY2hh bm5lbF9yZWdpc3Rlcih2aWQsIHF1ZXVlX2lkKTsNCj4gPiAgIAlydGVfc3BpbmxvY2tfdW5sb2Nr KCZ2cS0+YWNjZXNzX2xvY2spOw0KPiA+DQo+ID4gICAJcmV0dXJuIHJldDsNCj4gPiAgIH0NCj4g Pg0KPiA+ICAgaW50DQo+ID4gLXJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVh ZF91bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0 ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5 bmNfY2hhbm5lbF9vcHMgKm9wcykNCj4gPiArcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0 ZXJfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCkNCj4gPiAgIHsN Cj4gPiAgIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsNCj4gPiAgIAlzdHJ1Y3QgdmlydGlv X25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+DQo+ID4gLQlpZiAoZGV2ID09IE5VTEwg fHwgb3BzID09IE5VTEwpDQo+ID4gKwlpZiAoZGV2ID09IE5VTEwpDQo+ID4gICAJCXJldHVybiAt MTsNCj4gPg0KPiA+ICAgCWlmIChxdWV1ZV9pZCA+PSBWSE9TVF9NQVhfVlJJTkcpDQo+ID4gQEAg LTE3NDcsMTggKzE3MzcsNyBAQA0KPiBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90 aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAgCWlmICh1bmxp a2VseSh2cSA9PSBOVUxMIHx8ICFkZXYtPmFzeW5jX2NvcHkpKQ0KPiA+ICAgCQlyZXR1cm4gLTE7 DQo+ID4NCj4gPiAtCWlmICh1bmxpa2VseSghKGNvbmZpZy5mZWF0dXJlcyAmIFJURV9WSE9TVF9B U1lOQ19JTk9SREVSKSkpIHsNCj4gPiAtCQlWSE9TVF9MT0dfQ09ORklHKEVSUiwNCj4gPiAtCQkJ ImFzeW5jIGNvcHkgaXMgbm90IHN1cHBvcnRlZCBvbiBub24taW5vcmRlciBtb2RlICINCj4gPiAt CQkJIih2aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQsIHF1ZXVlX2lkKTsNCj4gPiAtCQlyZXR1cm4g LTE7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKHVubGlrZWx5KG9wcy0+Y2hlY2tfY29tcGxl dGVkX2NvcGllcyA9PSBOVUxMIHx8DQo+ID4gLQkJb3BzLT50cmFuc2Zlcl9kYXRhID09IE5VTEwp KQ0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gYXN5bmNfY2hhbm5lbF9y ZWdpc3Rlcih2aWQsIHF1ZXVlX2lkLCBvcHMpOw0KPiA+ICsJcmV0dXJuIGFzeW5jX2NoYW5uZWxf cmVnaXN0ZXIodmlkLCBxdWV1ZV9pZCk7DQo+ID4gICB9DQo+ID4NCj4gPiAgIGludA0KPiA+IEBA IC0xODM1LDYgKzE4MTQsODMgQEANCj4gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rl cl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkKQ0KPiA+ICAgCXJl dHVybiAwOw0KPiA+ICAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZv aWQNCj4gPiArdmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKHZvaWQpDQo+ID4gK3sNCj4gPiArCXVp bnQxNl90IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IFJURV9ETUFERVZfREVGQVVM VF9NQVg7IGkrKykgew0KPiA+ICsJCXN0cnVjdCBhc3luY19kbWFfaW5mbyAqZG1hID0gJmRtYV9j b3B5X3RyYWNrW2ldOw0KPiA+ICsJCWludDE2X3QgajsNCj4gPiArDQo+ID4gKwkJaWYgKGRtYS0+ bWF4X3ZjaGFucyA9PSAwKSB7DQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJZm9yIChqID0gMDsgaiA8IGRtYS0+bWF4X3ZjaGFuczsgaisrKSB7DQo+ID4gKwkJCXJ0 ZV9mcmVlKGRtYS0+dmNoYW5zW2pdLm1ldGFkYXRhKTsNCj4gPiArCQl9DQo+ID4gKwkJcnRlX2Zy ZWUoZG1hLT52Y2hhbnMpOw0KPiA+ICsJCWRtYS0+dmNoYW5zID0gTlVMTDsNCj4gPiArCQlkbWEt Pm1heF92Y2hhbnMgPSAwOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiAr cnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1cmUoc3RydWN0IHJ0ZV92aG9zdF9hc3luY19kbWFf aW5mbyAqZG1hcywNCj4gdWludDE2X3QgY291bnQpDQo+ID4gK3sNCj4gPiArCXVpbnQxNl90IGk7 DQo+ID4gKw0KPiA+ICsJaWYgKCFkbWFzKSB7DQo+ID4gKwkJVkhPU1RfTE9HX0NPTkZJRyhFUlIs ICJJbnZhbGlkIERNQSBjb25maWd1cmF0aW9uDQo+IHBhcmFtZXRlci5cbiIpOw0KPiA+ICsJCXJl dHVybiAtMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr Kykgew0KPiA+ICsJCXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqdmNoYW5zOw0KPiA+ICsJ CWludDE2X3QgZGV2X2lkOw0KPiA+ICsJCXVpbnQxNl90IG1heF92Y2hhbnM7DQo+ID4gKwkJdWlu dDE2X3QgbWF4X2Rlc2M7DQo+ID4gKwkJdWludDE2X3QgajsNCj4gPiArDQo+ID4gKwkJZGV2X2lk ID0gZG1hc1tpXS5kZXZfaWQ7DQo+ID4gKwkJbWF4X3ZjaGFucyA9IGRtYXNbaV0ubWF4X3ZjaGFu czsNCj4gPiArCQltYXhfZGVzYyA9IGRtYXNbaV0ubWF4X2Rlc2M7DQo+ID4gKw0KPiA+ICsJCWlm ICghcnRlX2lzX3Bvd2VyX29mXzIobWF4X2Rlc2MpKSB7DQo+ID4gKwkJCW1heF9kZXNjID0gcnRl X2FsaWduMzJwb3cyKG1heF9kZXNjKTsNCj4gPiArCQl9DQo+IA0KPiBUaGF0IHdpbGwgYmUgcHJv YmxlbWF0aWMgd2l0aCBDTlhLIGRyaXZlciB0aGF0IHJlcG9ydHMgMTUgYXMgbWF4X2Rlc2MuDQoN ClRoZSBtYXhfZGVzYyB1c2VkIGhlcmUgaXMgdG8gYWxsb2NhdGUgYSBjaXJjdWxhciBhcnJheSBm b3IgdmNoYW5uZWwsIGFuZCBpdHMgc2l6ZQ0KbXVzdCA+PSB2Y2hhbiBTVyByaW5nIHNpemUsIHdo aWNoIGlzIGNvbmZpZ3VyZWQgYnkgcnRlX2RtYV92Y2hhbl9zZXR1cCgpLg0KU28gSSB0aGluayBy dGVfYWxpZ24zMnBvdzIoMTUpIHdpbGwgbm90IGJlY29tZSBhIHByb2JsZW0gZm9yIENOWEsuDQoN Cj4gDQo+ID4gKw0KPiA+ICsJCXZjaGFucyA9IHJ0ZV96bWFsbG9jKE5VTEwsIHNpemVvZihzdHJ1 Y3QNCj4gYXN5bmNfZG1hX3ZjaGFuX2luZm8pICogbWF4X3ZjaGFucywNCj4gPiArCQkJCVJURV9D QUNIRV9MSU5FX1NJWkUpOw0KPiA+ICsJCWlmICh2Y2hhbnMgPT0gTlVMTCkgew0KPiA+ICsJCQlW SE9TVF9MT0dfQ09ORklHKEVSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2Y2hhbnMNCj4gZm9yIGRt YS0lZC4iDQo+ID4gKwkJCQkJIiBDYW5ub3QgZW5hYmxlIGFzeW5jIGRhdGEtcGF0aC5cbiIsDQo+ IGRldl9pZCk7DQo+ID4gKwkJCXZob3N0X2ZyZWVfYXN5bmNfZG1hX21lbSgpOw0KPiA+ICsJCQly ZXR1cm4gLTE7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlmb3IgKGogPSAwOyBqIDwgbWF4X3Zj aGFuczsgaisrKSB7DQo+ID4gKwkJCXZjaGFuc1tqXS5tZXRhZGF0YSA9IHJ0ZV96bWFsbG9jKE5V TEwsIHNpemVvZihib29sICopDQo+ICogbWF4X2Rlc2MsDQo+ID4gKwkJCQkJUlRFX0NBQ0hFX0xJ TkVfU0laRSk7DQo+IA0KPiBUaGF0J3MgcXVpdGUgYSBodWdlIGFsbG9jYXRpb24gKDQwOTYgKiA4 QiBwZXIgY2hhbm5lbCkuDQoNClRoZSBmYWN0IGlzIHRoYXQgbWF4X3ZjaGFucyBpcyAxIGZvciBh bGwgYXZhaWxhYmxlIERNQSBkZXZpY2VzIGluIERQREsuIFNvIHRoZSByZWFsDQpzaXplIGlzIDQw OTYqOCpudW1fZG1hX2RldmljZXMuIExpa2UgQ2hlbmJvIHN1Z2dlc3RlZCwgaXQgd291bGQgc2F2 ZSBtZW1vcnkNCmlmIERNQSBsaWJyYXJ5IHByb3ZpZGVzIGEgQVBJIHRvIHF1ZXJ5IHZjaGFubmVs IHJlYWwgcmluZyBzaXplLiBCdXQgZm9yIG5vdywgdG8gbWFrZQ0KQVBJIGNvbXBhdGlibGUgZm9y IGxhdGVyIGNoYW5nZXMsIEkgdGhpbmsgQ2hlbmJvJ3Mgc3VnZ2VzdGlvbiB0aGF0IHVzaW5nIGRt YV9pZCBhbmQNCnF1ZXJ5aW5nIG1heF9kZXNjIGluIHZob3N0IGlzIGdvb2QsIHNpbmNlIGl0J3Mg ZWFzeSB0byBjaGFuZ2Ugdmhvc3QgdG8gdXNlIHJlYWwgcmluZw0Kc2l6ZSBpbnN0ZWFkIG1heCBy aW5nIHNpemUsIGlmIERNQSBsaWJyYXJ5IHByb3ZpZGVzIHRoaXMgQVBJIGluIHRoZSBmdXR1cmUu DQoNCj4gDQo+ID4gKwkJCWlmICghdmNoYW5zW2pdLm1ldGFkYXRhKSB7DQo+ID4gKwkJCQlWSE9T VF9MT0dfQ09ORklHKEVSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZQ0KPiBtZXRhZGF0YSBmb3IgIg0K PiA+ICsJCQkJCQkiZG1hLSVkIHZjaGFuLSV1XG4iLA0KPiBkZXZfaWQsIGopOw0KPiA+ICsJCQkJ dmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ID4gKwkJCQlyZXR1cm4gLTE7DQo+ID4gKwkJ CX0NCj4gPiArDQo+ID4gKwkJCXZjaGFuc1tqXS5yaW5nX3NpemUgPSBtYXhfZGVzYzsNCj4gPiAr CQkJdmNoYW5zW2pdLnJpbmdfbWFzayA9IG1heF9kZXNjIC0gMTsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCWRtYV9jb3B5X3RyYWNrW2Rldl9pZF0udmNoYW5zID0gdmNoYW5zOw0KPiA+ICsJCWRt YV9jb3B5X3RyYWNrW2Rldl9pZF0ubWF4X3ZjaGFucyA9IG1heF92Y2hhbnM7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gICBpbnQNCj4gPiAgIHJ0 ZV92aG9zdF9hc3luY19nZXRfaW5mbGlnaHQoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQpDQo+ ID4gICB7DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92aG9zdC5oIGIvbGliL3Zob3N0L3Zo b3N0LmgNCj4gPiBpbmRleCA3MDg1ZTA4ODVjLi5kOWJkYTM0ZTExIDEwMDY0NA0KPiA+IC0tLSBh L2xpYi92aG9zdC92aG9zdC5oDQo+ID4gKysrIGIvbGliL3Zob3N0L3Zob3N0LmgNCj4gPiBAQCAt MTksNiArMTksNyBAQA0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+ICAgI2luY2x1 ZGUgPHJ0ZV9yd2xvY2suaD4NCj4gPiAgICNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ID4gKyNp bmNsdWRlIDxydGVfZG1hZGV2Lmg+DQo+ID4NCj4gPiAgICNpbmNsdWRlICJydGVfdmhvc3QuaCIN Cj4gPiAgICNpbmNsdWRlICJydGVfdmRwYS5oIg0KPiA+IEBAIC01MCw2ICs1MSw3IEBADQo+ID4N Cj4gPiAgICNkZWZpbmUgVkhPU1RfTUFYX0FTWU5DX0lUIChNQVhfUEtUX0JVUlNUKQ0KPiA+ICAg I2RlZmluZSBWSE9TVF9NQVhfQVNZTkNfVkVDIDIwNDgNCj4gPiArI2RlZmluZSBWSE9TVF9BU1lO Q19ETUFfQkFUQ0hJTkdfU0laRSAzMg0KPiA+DQo+ID4gICAjZGVmaW5lIFBBQ0tFRF9ERVNDX0VO UVVFVUVfVVNFRF9GTEFHKHcpCVwNCj4gPiAgIAkoKHcpID8gKFZSSU5HX0RFU0NfRl9BVkFJTCB8 IFZSSU5HX0RFU0NfRl9VU0VEIHwNCj4gVlJJTkdfREVTQ19GX1dSSVRFKSA6IFwNCj4gPiBAQCAt MTE5LDYgKzEyMSw0MSBAQCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCB7DQo+ID4gICAJ dWludDMyX3QgY291bnQ7DQo+ID4gICB9Ow0KPiA+DQo+ID4gK3N0cnVjdCBhc3luY19kbWFfdmNo YW5faW5mbyB7DQo+ID4gKwkvKiBjaXJjdWxhciBhcnJheSB0byB0cmFjayBjb3B5IG1ldGFkYXRh ICovDQo+ID4gKwlib29sICoqbWV0YWRhdGE7DQo+ID4gKw0KPiA+ICsJLyogbWF4IGVsZW1lbnRz IGluICdtZXRhZGF0YScgKi8NCj4gPiArCXVpbnQxNl90IHJpbmdfc2l6ZTsNCj4gPiArCS8qIHJp bmcgaW5kZXggbWFzayBmb3IgJ21ldGFkYXRhJyAqLw0KPiA+ICsJdWludDE2X3QgcmluZ19tYXNr Ow0KPiANCj4gR2l2ZW4gY254aywgd2UgY2Fubm90IHVzZSBhIG1hc2sgYXMgdGhlIHJpbmcgc2l6 ZSBtYXkgbm90IGJlIGEgcG93Mi4NCg0KVGhlIHJpbmdfbWFzayBpcyBub3QgZm9yIGRldmljZSB2 Y2hhbiByaW5nLCBidXQgZm9yIGNpcmN1bGFyIGJ1ZmZlciB3aGljaCBpcw0KdXNlZCB0byB0cmFj ayBjb3B5IGNvbnRleHQuIFRoZSBzaXplIG9mIGNpcmN1bGFyIGJ1ZmZlciBvbmx5IG5lZWRzID49 IHZjaGFuDQpyaW5nIHNpemUuIFNvIGlmIHdlIGNhbiBndWFyYW50ZWUgdGhlIHNpemUgb2YgY2ly Y3VsYXIgYnVmZmVyIGlzIHBvdzIsIHJpbmdfbWFzaw0KY2FuIGJlIHVzZWQuDQoNCj4gDQo+ID4g Kw0KPiA+ICsJLyogYmF0Y2hpbmcgY29waWVzIGJlZm9yZSBhIERNQSBkb29yYmVsbCAqLw0KPiA+ ICsJdWludDE2X3QgbnJfYmF0Y2hpbmc7DQo+ID4gKw0KPiA+ICsJLyoqDQo+ID4gKwkgKiBETUEg dmlydHVhbCBjaGFubmVsIGxvY2suIEFsdGhvdWdoIGl0IGlzIGFibGUgdG8gYmluZCBETUENCj4g PiArCSAqIHZpcnR1YWwgY2hhbm5lbHMgdG8gZGF0YSBwbGFuZSB0aHJlYWRzLCB2aG9zdCBjb250 cm9sIHBsYW5lDQo+ID4gKwkgKiB0aHJlYWQgY291bGQgY2FsbCBkYXRhIHBsYW5lIGZ1bmN0aW9u cyB0b28sIHRodXMgY2F1c2luZw0KPiA+ICsJICogRE1BIGRldmljZSBjb250ZW50aW9uLg0KPiA+ ICsJICoNCj4gPiArCSAqIEZvciBleGFtcGxlLCBpbiBWTSBleGl0IGNhc2UsIHZob3N0IGNvbnRy b2wgcGxhbmUgdGhyZWFkIG5lZWRzDQo+ID4gKwkgKiB0byBjbGVhciBpbi1mbGlnaHQgcGFja2V0 cyBiZWZvcmUgZGlzYWJsZSB2cmluZywgYnV0IHRoZXJlIGNvdWxkDQo+ID4gKwkgKiBiZSBhbm90 dGhlciBkYXRhIHBsYW5lIHRocmVhZCBpcyBlbnF1ZXVpbmcgcGFja2V0cyB0byB0aGUgc2FtZQ0K PiA+ICsJICogdnJpbmcgd2l0aCB0aGUgc2FtZSBETUEgdmlydHVhbCBjaGFubmVsLiBCdXQgZG1h ZGV2IFBNRA0KPiBmdW5jdGlvbnMNCj4gPiArCSAqIGFyZSBsb2NrLWZyZWUsIHNvIHRoZSBjb250 cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIHRocmVhZHMNCj4gPiArCSAqIGNvdWxkIG9wZXJhdGUg dGhlIHNhbWUgRE1BIHZpcnR1YWwgY2hhbm5lbCBhdCB0aGUgc2FtZSB0aW1lLg0KPiA+ICsJICov DQo+ID4gKwlydGVfc3BpbmxvY2tfdCBkbWFfbG9jazsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0 cnVjdCBhc3luY19kbWFfaW5mbyB7DQo+ID4gKwl1aW50MTZfdCBtYXhfdmNoYW5zOw0KPiA+ICsJ c3RydWN0IGFzeW5jX2RtYV92Y2hhbl9pbmZvICp2Y2hhbnM7DQo+ID4gK307DQo+ID4gKw0KPiA+ ICtleHRlcm4gc3RydWN0IGFzeW5jX2RtYV9pbmZvDQo+IGRtYV9jb3B5X3RyYWNrW1JURV9ETUFE RVZfREVGQVVMVF9NQVhdOw0KPiA+ICsNCj4gPiAgIC8qKg0KPiA+ICAgICogaW5mbGlnaHQgYXN5 bmMgcGFja2V0IGluZm9ybWF0aW9uDQo+ID4gICAgKi8NCj4gPiBAQCAtMTI5LDkgKzE2Niw2IEBA IHN0cnVjdCBhc3luY19pbmZsaWdodF9pbmZvIHsNCj4gPiAgIH07DQo+ID4NCj4gPiAgIHN0cnVj dCB2aG9zdF9hc3luYyB7DQo+ID4gLQkvKiBvcGVyYXRpb24gY2FsbGJhY2tzIGZvciBETUEgKi8N Cj4gPiAtCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgb3BzOw0KPiA+IC0NCj4g PiAgIAlzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyIGlvdl9pdGVyW1ZIT1NUX01BWF9BU1lOQ19J VF07DQo+ID4gICAJc3RydWN0IHJ0ZV92aG9zdF9pb3ZlYyBpb3ZlY1tWSE9TVF9NQVhfQVNZTkNf VkVDXTsNCj4gPiAgIAl1aW50MTZfdCBpdGVyX2lkeDsNCj4gPiBAQCAtMTM5LDYgKzE3MywxOSBA QCBzdHJ1Y3Qgdmhvc3RfYXN5bmMgew0KPiA+DQo+ID4gICAJLyogZGF0YSB0cmFuc2ZlciBzdGF0 dXMgKi8NCj4gPiAgIAlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAqcGt0c19pbmZvOw0KPiA+ ICsJLyoqDQo+ID4gKwkgKiBwYWNrZXQgcmVvcmRlciBhcnJheS4gInRydWUiIGluZGljYXRlcyB0 aGF0IERNQQ0KPiA+ICsJICogZGV2aWNlIGNvbXBsZXRlcyBhbGwgY29waWVzIGZvciB0aGUgcGFj a2V0Lg0KPiA+ICsJICoNCj4gPiArCSAqIE5vdGUgdGhhdCB0aGlzIGFycmF5IGNvdWxkIGJlIHdy aXR0ZW4gYnkgbXVsdGlwbGUNCj4gPiArCSAqIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gRm9y IGV4YW1wbGUsIHR3byB0aHJlYWRzDQo+ID4gKwkgKiBlbnF1ZXVlIHBhY2tldHMgdG8gdGhlIHNh bWUgdmlydHF1ZXVlIHdpdGggdGhlaXINCj4gPiArCSAqIG93biBETUEgZGV2aWNlcy4gSG93ZXZl ciwgc2luY2Ugb2ZmbG9hZGluZyBpcw0KPiA+ICsJICogcGVyLXBhY2tldCBiYXNpcywgZWFjaCBw YWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUNCj4gPiArCSAqIHdyaXR0ZW4gYnkgb25lIHRocmVhZC4g QW5kIHNpbmdsZSBieXRlIHdyaXRlIGlzDQo+ID4gKwkgKiBhdG9taWMsIHNvIG5vIGxvY2sgaXMg bmVlZGVkLg0KPiA+ICsJICovDQo+IA0KPiBUaGUgdnEtPmFjY2Vzc19sb2NrIGlzIGhlbGQgYnkg dGhlIHRocmVhZHMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpDQo+IGFueXdheSwgcmlnaHQ/DQoN ClllcywgdGhyZWFkcyB3aWxsIGFjcXVpcmUgdnEtPmFjY2Vzc19sb2NrLCBidXQgdGhpbmsgYWJv dXQgdGhlIGNhc2Ugb2YNCnNoYXJpbmcgb25lIERNQSBiZXR3ZWVuIDIgdnJpbmdzLiBJdCdzIHBv c3NpYmxlIHRvIHBvbGwgY29tcGxldGVkIGNvcGllcw0KZnJvbSBETUEwIHRoYXQgYmVsb25nIHRv IHZyaW5nMSwgd2hlbiB0aGUgdGhyZWFkIGNhbGxzIHBvbGxfZW5xdWV1ZV9jb21wbGV0ZWQNCmZv ciB2cmluZzAsIGFzIHZyaW5nMCBhbmQgdnJpbmcxIHNoYXJlIERNQTAuIFRoZSB2cS0+YWNjZXNz X2xvY2sgd2lsbCBub3QNCnByb3RlY3QgdnJpbmcxIGluIHRoaXMgY2FzZS4gDQoNCkkgdGhpbmsg dGhlIGNvbW1lbnQgaXMgbm90IGFjY3VyYXRlLi4uIEluIHRoZSBjYXNlIG9mIHR3byB0aHJlYWRz IGVucXVldWUNCnBrdHMgdG8gdGhlIHNhbWUgdnJpbmcsIHRoZXkgd2lsbCBub3Qgd3JpdGUgdGhl IGFycmF5IHBrdHNfY21wbF9mbGFnIHNpbXVsdGFuZW91c2x5DQppbiBzdWJtaXRfZW5xdWV1ZV9i dXJzdCwgYnV0IHBvbGxfZW5xdWV1ZV9jb21wbGV0ZWQuIEluIGFkZGl0aW9uLCBzaW5jZQ0Kb2Zm bG9hZGluZyBpcyBwZXItcGFja2V0IGJhc2lzLCBlYWNoIGVsZW0gaW4gcGt0c19jbXBsX2ZsYWcg d2lsbCBvbmx5IGJlIHdyaXR0ZW4NCmJ5IG9uZSB0aHJlYWQuIFRoZXJlZm9yZSwgaXQncyBwb3Nz aWJsZSBtdWx0aXBsZSB0aHJlYWRzIHdyaXRlIHBrdHNfY21wbF9mbGFnDQphdCB0aGUgc2FtZSB0 aW1lLCBidXQgdGhleSB3cml0ZSBkaWZmZXJlbnQgZWxlbWVudHMuIEkgd2lsbCB1cGRhdGUgdGhl IGNvbW1lbnQNCmlmIHRoZSBhYm92ZSBleHBsYW5hdGlvbiBsb29rcyByZWFzb25hYmxlIHRvIHlv dS4NCg0KPiANCj4gPiArCWJvb2wgKnBrdHNfY21wbF9mbGFnOw0KPiA+ICAgCXVpbnQxNl90IHBr dHNfaWR4Ow0KPiA+ICAgCXVpbnQxNl90IHBrdHNfaW5mbGlnaHRfbjsNCj4gPiAgIAl1bmlvbiB7 DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMgYi9saWIvdmhvc3Qvdmly dGlvX25ldC5jDQo+ID4gaW5kZXggYjNkOTU0YWFiNC4uOWY4MWZjOTczMyAxMDA2NDQNCj4gPiAt LS0gYS9saWIvdmhvc3QvdmlydGlvX25ldC5jDQo+ID4gKysrIGIvbGliL3Zob3N0L3ZpcnRpb19u ZXQuYw0KPiA+IEBAIC0xMSw2ICsxMSw3IEBADQo+ID4gICAjaW5jbHVkZSA8cnRlX25ldC5oPg0K PiA+ICAgI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9pcC5oPg0K PiA+ICsjaW5jbHVkZSA8cnRlX2RtYWRldi5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV92aG9zdC5o Pg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV90Y3AuaD4NCj4gPiAgICNpbmNsdWRlIDxydGVfdWRwLmg+ DQo+ID4gQEAgLTI1LDYgKzI2LDkgQEANCj4gPg0KPiA+ICAgI2RlZmluZSBNQVhfQkFUQ0hfTEVO IDI1Ng0KPiA+DQo+ID4gKy8qIERNQSBkZXZpY2UgY29weSBvcGVyYXRpb24gdHJhY2tpbmcgYXJy YXkuICovDQo+ID4gK3N0cnVjdCBhc3luY19kbWFfaW5mbyBkbWFfY29weV90cmFja1tSVEVfRE1B REVWX0RFRkFVTFRfTUFYXTsNCj4gPiArDQo+ID4gICBzdGF0aWMgIF9fcnRlX2Fsd2F5c19pbmxp bmUgYm9vbA0KPiA+ICAgcnh2cV9pc19tZXJnZWFibGUoc3RydWN0IHZpcnRpb19uZXQgKmRldikN Cj4gPiAgIHsNCj4gPiBAQCAtNDMsNiArNDcsMTA4IEBAIGlzX3ZhbGlkX3ZpcnRfcXVldWVfaWR4 KHVpbnQzMl90IGlkeCwgaW50IGlzX3R4LA0KPiB1aW50MzJfdCBucl92cmluZykNCj4gPiAgIAly ZXR1cm4gKGlzX3R4IF4gKGlkeCAmIDEpKSA9PSAwICYmIGlkeCA8IG5yX3ZyaW5nOw0KPiA+ICAg fQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVpbnQxNl90DQo+ID4gK3Zo b3N0X2FzeW5jX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgaW50MTZf dCBkbWFfaWQsDQo+ID4gKwkJdWludDE2X3QgdmNoYW4sIHVpbnQxNl90IGhlYWRfaWR4LA0KPiA+ ICsJCXN0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKnBrdHMsIHVpbnQxNl90IG5yX3BrdHMpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqZG1hX2luZm8gPQ0KPiAm ZG1hX2NvcHlfdHJhY2tbZG1hX2lkXS52Y2hhbnNbdmNoYW5dOw0KPiA+ICsJdWludDE2X3Qgcmlu Z19tYXNrID0gZG1hX2luZm8tPnJpbmdfbWFzazsNCj4gPiArCXVpbnQxNl90IHBrdF9pZHg7DQo+ ID4gKw0KPiA+ICsJcnRlX3NwaW5sb2NrX2xvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ID4g Kw0KPiA+ICsJZm9yIChwa3RfaWR4ID0gMDsgcGt0X2lkeCA8IG5yX3BrdHM7IHBrdF9pZHgrKykg ew0KPiA+ICsJCXN0cnVjdCBydGVfdmhvc3RfaW92ZWMgKmlvdiA9IHBrdHNbcGt0X2lkeF0uaW92 Ow0KPiA+ICsJCWludCBjb3B5X2lkeCA9IDA7DQo+ID4gKwkJdWludDE2X3QgbnJfc2VncyA9IHBr dHNbcGt0X2lkeF0ubnJfc2VnczsNCj4gPiArCQl1aW50MTZfdCBpOw0KPiA+ICsNCj4gPiArCQlp ZiAocnRlX2RtYV9idXJzdF9jYXBhY2l0eShkbWFfaWQsIHZjaGFuKSA8IG5yX3NlZ3MpIHsNCj4g PiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwg bnJfc2VnczsgaSsrKSB7DQo+ID4gKwkJCS8qKg0KPiA+ICsJCQkgKiBXZSBoYXZlIGNoZWNrZWQg dGhlIGF2YWlsYWJsZSBzcGFjZSBiZWZvcmUNCj4gc3VibWl0IGNvcGllcyB0byBETUENCj4gPiAr CQkJICogdkNoYW5uZWwsIHNvIHdlIGRvbid0IGhhbmRsZSBlcnJvciBoZXJlLg0KPiA+ICsJCQkg Ki8NCj4gPiArCQkJY29weV9pZHggPSBydGVfZG1hX2NvcHkoZG1hX2lkLCB2Y2hhbiwNCj4gKHJ0 ZV9pb3ZhX3QpaW92W2ldLnNyY19hZGRyLA0KPiA+ICsJCQkJCShydGVfaW92YV90KWlvdltpXS5k c3RfYWRkciwgaW92W2ldLmxlbiwNCj4gPiArCQkJCQlSVEVfRE1BX09QX0ZMQUdfTExDKTsNCj4g PiArDQo+ID4gKwkJCS8qKg0KPiA+ICsJCQkgKiBPbmx5IHN0b3JlIHBhY2tldCBjb21wbGV0aW9u IGZsYWcgYWRkcmVzcyBpbiB0aGUNCj4gbGFzdCBjb3B5J3MNCj4gPiArCQkJICogc2xvdCwgYW5k IG90aGVyIHNsb3RzIGFyZSBzZXQgdG8gTlVMTC4NCj4gPiArCQkJICovDQo+ID4gKwkJCWlmICh1 bmxpa2VseShpID09IChucl9zZWdzIC0gMSkpKSB7DQo+IA0KPiBJIGRvbid0IHRoaW5rIHVzaW5n IHVubGlrZWx5KCkgaXMgYXBwcm9wcmlhdGUgaGVyZSwgYXMgc2luZ2xlLXNlZ21lbnQNCj4gcGFj a2V0cyBhcmUgbW9yZSB0aGUgbm9ybSB0aGFuIHRoZSBleGNlcHRpb24sIGlzbid0Pw0KDQpZZXMs IGdvb2Qgc3VnZ2VzdGlvbiwgYW5kIEkgd2lsbCBjaGFuZ2UgbGF0ZXIuDQoNCj4gDQo+ID4gKwkJ CQlkbWFfaW5mby0+bWV0YWRhdGFbY29weV9pZHggJiByaW5nX21hc2tdDQo+ID0NCj4gZG1hX2lu Zm8tPm1ldGFkYXRhW2NvcHlfaWR4ICUgcmluZ19zaXplXSBpbnN0ZWFkLg0KPiA+ICsJCQkJCSZ2 cS0+YXN5bmMtDQo+ID5wa3RzX2NtcGxfZmxhZ1toZWFkX2lkeCAlIHZxLT5zaXplXTsNCj4gPiAr CQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZG1hX2luZm8tPm5yX2JhdGNoaW5nICs9IG5y X3NlZ3M7DQo+ID4gKwkJaWYgKHVubGlrZWx5KGRtYV9pbmZvLT5ucl9iYXRjaGluZyA+PQ0KPiBW SE9TVF9BU1lOQ19ETUFfQkFUQ0hJTkdfU0laRSkpIHsNCj4gPiArCQkJcnRlX2RtYV9zdWJtaXQo ZG1hX2lkLCB2Y2hhbik7DQo+ID4gKwkJCWRtYV9pbmZvLT5ucl9iYXRjaGluZyA9IDA7DQo+ID4g KwkJfQ0KPiA+ICsNCj4gPiArCQloZWFkX2lkeCsrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArb3V0 Og0KPiA+ICsJaWYgKGRtYV9pbmZvLT5ucl9iYXRjaGluZyA+IDApIHsNCj4gPiArCQlydGVfZG1h X3N1Ym1pdChkbWFfaWQsIHZjaGFuKTsNCj4gPiArCQlkbWFfaW5mby0+bnJfYmF0Y2hpbmcgPSAw Ow0KPiA+ICsJfQ0KPiA+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmZG1hX2luZm8tPmRtYV9sb2Nr KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcGt0X2lkeDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDE2X3QNCj4gPiArdmhvc3RfYXN5bmNfZG1hX2No ZWNrX2NvbXBsZXRlZChpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNoYW4sDQo+IHVpbnQxNl90 IG1heF9wa3RzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFuX2luZm8gKmRt YV9pbmZvID0NCj4gJmRtYV9jb3B5X3RyYWNrW2RtYV9pZF0udmNoYW5zW3ZjaGFuXTsNCj4gPiAr CXVpbnQxNl90IHJpbmdfbWFzayA9IGRtYV9pbmZvLT5yaW5nX21hc2s7DQo+ID4gKwl1aW50MTZf dCBsYXN0X2lkeCA9IDA7DQo+ID4gKwl1aW50MTZfdCBucl9jb3BpZXM7DQo+ID4gKwl1aW50MTZf dCBjb3B5X2lkeDsNCj4gPiArCXVpbnQxNl90IGk7DQo+ID4gKw0KPiA+ICsJcnRlX3NwaW5sb2Nr X2xvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ID4gKw0KPiA+ICsJLyoqDQo+ID4gKwkgKiBT aW5jZSBhbGwgbWVtb3J5IGlzIHBpbm5lZCBhbmQgYWRkcmVzc2VzIHNob3VsZCBiZSB2YWxpZCwN Cj4gPiArCSAqIHdlIGRvbid0IGNoZWNrIGVycm9ycy4NCj4gDQo+IFBsZWFzZSwgY2hlY2sgZm9y IGVycm9ycyB0byBlYXNlIGRlYnVnZ2luZywgeW91IGNhbiBmb3Igbm93IGFkZCBhIGRlYnVnDQo+ IHByaW50IGlmIGVycm9yIGlzIHNldCB3aGljaCB3b3VsZCBwcmludCBydGVfZXJybm8uIEFuZCBv bmNlIHdlIGhhdmUgbXkNCj4gVmhvc3Qgc3RhdGlzdGljcyBzZXJpZXMgaW4sIEkgY291bGQgYWRk IGEgY291bnRlciBmb3IgaXQuDQo+IA0KPiBUaGUgRE1BIGRldmljZSBjb3VsZCBiZSBpbiBhIGJh ZCBzdGF0ZSBmb3Igb3RoZXIgcmVhc29uIHRoYW4gdW5waW5uZWQNCj4gbWVtb3J5IG9yIHVudmFs aWQgYWRkcmVzc2VzLg0KDQpTdXJlLCB0aGFua3MgZm9yIHlvdXIgc3VnZ2VzdGlvbnMuIEkgd2ls bCBhZGQgbGF0ZXIuIEluIGFkZGl0aW9uLCBmb3IgdGhlIGVycm9yDQpoYW5kbGluZyBpbiBydGVf ZG1hX2NvcHkoKSwgSSBhdm9pZHMgRU5PU1BDIGVycm9yIGJ5IGNoZWNraW5nIGNhcGFjaXR5IGJl Zm9yZQ0KY2FsbCBydGVfZG1hX2NvcHkoKS4gV2hlbiBvdGhlciBlcnJvcnMgaGFwcGVuLCBpdCdz IHBvc3NpYmxlIHRoYXQgYSBwYXJ0IG9mIGNvcGllcw0Kb2YgYSBwYWNrZXQgYXJlIGVucXVldWUg dG8gRE1BLCBidXQgdGhlIGxlZnQgYXJlIGZhaWxlZC4gRE1BIGxpYnJhcnkgZG9lc24ndCBoYXZl DQphIGNhbmNlbCBBUEkgdG8gZHJvcCBjb3BpZXMgZW5xdWV1ZWQgdG8gRE1BIFNXIHJpbmcgYnV0 IG5vdCBzdWJtaXR0ZWQgdG8gRE1BDQpkZXZpY2UsIHNvIHRoZSBvbmx5IHdheSB0byBoYW5kbGUg dGhlIHBhcnRpYWwgb2ZmbG9hZGluZyBjYXNlIGVycm9yIGlzIHRvIHN0b3JlIGFsbCBWQQ0KZm9y IGVhY2ggSU9WQSBzZWdtZW50cyBhbmQgZG8gU1cgY29weSBmb3IgZXJyb3Igb25lcy4gSU9WQSBj YW4gYmUgUEEsIHNvIElPVkENCmFuZCBWQSBzZWdtZW50cyBmb3IgYSBzYW1lIHBhY2tldCB3b3Vs ZCBiZSBkaWZmZXJlbnQuIEhvdyBkbyB5b3UgdGhpbms/DQoNCj4gDQo+ID4gKwkgKi8NCj4gPiAr CW5yX2NvcGllcyA9IHJ0ZV9kbWFfY29tcGxldGVkKGRtYV9pZCwgdmNoYW4sIG1heF9wa3RzLCAm bGFzdF9pZHgsDQo+IE5VTEwpOw0KPiANCj4gQXJlIHlvdSBzdXJlIG1heF9wa3RzIGlzIHZhbGlk IGhlcmUgYXMgYSBwYWNrZXQgY291bGQgY29udGFpbiBzZXZlcmFsDQo+IHNlZ21lbnRzPw0KDQpO bywgaXQncyBub3QgdGhlIGJlc3QgY2hvaWNlIGZvciBTRyBwYWNrZXRzLiBCdXQgaXQgd2lsbCBu b3QgY2F1c2UgZXJyb3IsDQpidXQgaHVydCBwZXJmb3JtYW5jZS4gSSBoYXZlIGFkZGVkIGEgZmFj dG9yIHRvIG1pdGlnYXRlIHRoZSBpbXBhY3RzIHRvDQpwZXJmb3JtYW5jZSBmb3IgU0cgcGFja2V0 cy4gU3BlY2lmaWNhbGx5LCB0aGUgbnVtYmVyIG9mIGNvcGllcyB0byBwb2xsDQppcyBjYWxjdWxh dGVkIGJ5IGZhY3RvciptYXhfcGt0cywgYW5kIGZhY3RvciBpcyBzZXQgdG8gMSBieSBkZWZhdWx0 IGJ1dA0KdXNlcnMgY2FuIGNoYW5nZSBpdCB2aWEgcnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1 cmUoKS4gRm9yIGV4YW1wbGUsDQppZiB0aGUgYXZnLiBwYWNrZXQgaXMgNEtCLCBzbyB0aGUgZmFj dG9yIGNhbiBiZSBzZXQgdG8gMiAoNEtCLzJLQiwgd2hlcmUNCjJLQiBpcyBtYnVmX3NpemUpLiBU aGVuIHRoZSBjb3BpZXMgdG8gcG9sbCBmcm9tIERNQSBkZXZpY2UgaXMgMiozMiwNCnJhdGhlciB0 aGFuIDMyIGluIGN1cnJlbnQgZGVzaWduLg0KDQo+IA0KPiA+ICsJaWYgKG5yX2NvcGllcyA9PSAw KSB7DQo+ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY29weV9pZHggPSBs YXN0X2lkeCAtIG5yX2NvcGllcyArIDE7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnJfY29waWVz OyBpKyspIHsNCj4gPiArCQlib29sICpmbGFnOw0KPiA+ICsNCj4gPiArCQlmbGFnID0gZG1hX2lu Zm8tPm1ldGFkYXRhW2NvcHlfaWR4ICYgcmluZ19tYXNrXTsNCj4gDQo+IGRtYV9pbmZvLT5tZXRh ZGF0YVtjb3B5X2lkeCAlIHJpbmdfc2l6ZV0NCj4gDQo+ID4gKwkJaWYgKGZsYWcpIHsNCj4gPiAr CQkJLyoqDQo+ID4gKwkJCSAqIE1hcmsgdGhlIHBhY2tldCBmbGFnIGFzIHJlY2VpdmVkLiBUaGUg ZmxhZw0KPiA+ICsJCQkgKiBjb3VsZCBiZWxvbmcgdG8gYW5vdGhlciB2aXJ0cXVldWUgYnV0IHdy aXRlDQo+ID4gKwkJCSAqIGlzIGF0b21pYy4NCj4gPiArCQkJICovDQo+ID4gKwkJCSpmbGFnID0g dHJ1ZTsNCj4gPiArCQkJZG1hX2luZm8tPm1ldGFkYXRhW2NvcHlfaWR4ICYgcmluZ19tYXNrXSA9 IE5VTEw7DQo+IA0KPiBkbWFfaW5mby0+bWV0YWRhdGFbY29weV9pZHggJSByaW5nX3NpemVdDQoN ClBsZWFzZSBzZWUgY29tbWVudHMgYWJvdmUuDQoNClRoYW5rcywNCkppYXl1DQo=