From mboxrd@z Thu Jan 1 00:00:00 1970 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 mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE901C54FCD for ; Sat, 1 Aug 2026 08:10:29 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 11D7B40612; Sat, 1 Aug 2026 10:10:29 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id B132B40299 for ; Sat, 1 Aug 2026 10:10:27 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id 9E64320730 for ; Sat, 1 Aug 2026 10:10:27 +0200 (CEST) Subject: RE: [RFC PATCH] NEW: pile stack and mempool driver Date: Sat, 1 Aug 2026 10:10:25 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35F659AE@smartserver.smartshare.dk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" In-Reply-To: <20260731180202.978978-1-mb@smartsharesystems.com> Content-Transfer-Encoding: base64 X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-class: urn:content-classes:message Thread-Topic: [RFC PATCH] NEW: pile stack and mempool driver Thread-Index: Ad0hjQJ8OCAUoyaKQe+x0SGLuF4ZzwAAC62g X-MimeOLE: Produced By Microsoft Exchange V6.5 References: <20260731180202.978978-1-mb@smartsharesystems.com> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: 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 UExFQVNFIElHTk9SRS4NCihSZXNlbnQgZHVlIHRvIGludGVybmFsIG1haWwgcHJvYmxlbXMuKQ0K DQpWZW5saWcgaGlsc2VuIC8gS2luZCByZWdhcmRzLA0KLU1vcnRlbiBCcsO4cnVwDQoNCg0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNb3J0ZW4gQnLDuHJ1cCBbbWFpbHRv Om1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbV0NCj4gU2VudDogRnJpZGF5LCAzMSBKdWx5IDIwMjYg MjAuMDINCj4gVG86IGRldkBkcGRrLm9yZw0KPiBDYzogTW9ydGVuIEJyw7hydXANCj4gU3ViamVj dDogW1JGQyBQQVRDSF0gTkVXOiBwaWxlIHN0YWNrIGFuZCBtZW1wb29sIGRyaXZlcg0KPiANCj4g RWFybHkgc3VibWlzc2lvbiBvZjoNCj4gLSBzb21lIG1lbXBvb2wgb3B0aW1pemF0aW9ucywNCj4g LSBhIG5ldyBtZW1wb29sICJwaWxlIiBkcml2ZXIsIGFuZA0KPiAtIGl0cyB1bmRlcmx5aW5nICJw aWxlIiBzdGFjayBpbXBsZW1lbnRhdGlvbi4NCj4gDQo+IEZvciBjb21tdW5pdHkgZmVlZGJhY2sg YW5kIENJIHRlc3QuDQo+IA0KPiBOZWVkbGVzcyB0byBzYXksIHRoaXMgbXVzdCBiZSBzZXBhcmF0 ZWQgaW50byBhIHNlcmllcyBvZiBwYXRjaGVzLg0KPiBGb3Igbm93LCBJJ20gc3VibWl0dGluZyBh IHNuYXBzaG90IG9mIHdvcmsgaW4gcHJvZ3Jlc3MuDQo+IA0KPiBTb21lIHBlcmZvcm1hbmNlIG51 bWJlcnMgZnJvbSBtZW1wb29sX3BlcmZfYXV0b3Rlc3RfMmNvcmVzLCBhbGwNCj4gd2l0aCBjYWNo ZT0xMDI0IGNvcmVzPTIgbl9rZWVwPTMyNzY4Og0KPiANCj4gc3RhcnQgcGVyZm9ybWFuY2UgdGVz dCAodXNpbmcgcmluZ19tcF9tYywgd2l0aCBjYWNoZSkNCj4gbl9nZXRfYnVsaz0gNjQgbl9wdXRf YnVsaz0gNjQgY29uc3RhbnRfbj0wIHJhdGVfcGVyc2VjPSA3NTM5ODUzMzgNCj4gbl9nZXRfYnVs az0yNTYgbl9wdXRfYnVsaz0yNTYgY29uc3RhbnRfbj0wIHJhdGVfcGVyc2VjPSA3NTU4MDU5MTMN Cj4gDQo+IHN0YXJ0IHBlcmZvcm1hbmNlIHRlc3QgZm9yIGxmX3N0YWNrICh3aXRoIGNhY2hlKQ0K PiBuX2dldF9idWxrPSA2NCBuX3B1dF9idWxrPSA2NCBjb25zdGFudF9uPTAgcmF0ZV9wZXJzZWM9 ICAyOTEzMjM1Mg0KPiBuX2dldF9idWxrPTI1NiBuX3B1dF9idWxrPTI1NiBjb25zdGFudF9uPTAg cmF0ZV9wZXJzZWM9ICAyOTI3NjcwOA0KPiANCj4gc3RhcnQgcGVyZm9ybWFuY2UgdGVzdCBmb3Ig cGlsZSAod2l0aCBjYWNoZSkNCj4gbl9nZXRfYnVsaz0gNjQgbl9wdXRfYnVsaz0gNjQgY29uc3Rh bnRfbj0wIHJhdGVfcGVyc2VjPSA1NjAxNTk0NzkNCj4gbl9nZXRfYnVsaz0yNTYgbl9wdXRfYnVs az0yNTYgY29uc3RhbnRfbj0wIHJhdGVfcGVyc2VjPSA1NTc5MTA5MzMNCj4gDQo+IEhhdCB0aXAg dG8gQnJ1Y2UgZm9yIGJyaW5naW5nIGF0dGVudGlvbiB0byB0aGUgcmluZyBub3QgYmVpbmcgdGhl DQo+IG9wdGltYWwgbWVtcG9vbCBkcml2ZXIuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4g QnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tPg0KPiAtLS0NCj4gIGFwcC90ZXN0L3Rl c3RfbWVtcG9vbC5jICAgICAgICAgICAgICAgICAgIHwgICAzICstDQo+ICBhcHAvdGVzdC90ZXN0 X3N0YWNrLmMgICAgICAgICAgICAgICAgICAgICB8ICA3MCArKysrLQ0KPiAgYXBwL3Rlc3QvdGVz dF9zdGFja19wZXJmLmMgICAgICAgICAgICAgICAgfCAgMTUgKy0NCj4gIGNvbmZpZy9ydGVfY29u ZmlnLmggICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstDQo+ICBkb2MvZ3VpZGVzL3Byb2df Z3VpZGUvc3RhY2tfbGliLnJzdCAgICAgICB8ICA2NyArKysrLQ0KPiAgZHJpdmVycy9tZW1wb29s L3N0YWNrL3J0ZV9tZW1wb29sX3N0YWNrLmMgfCAgNDAgKysrDQo+ICBkcml2ZXJzL25ldC9ib25k aW5nL3J0ZV9ldGhfYm9uZF9wbWQuYyAgICB8ICAgMiArLQ0KPiAgZHJpdmVycy9uZXQvaW50ZWwv Y3BmbC9jcGZsX3J4dHguaCAgICAgICAgfCAgIDIgKy0NCj4gIGRyaXZlcnMvbmV0L3N4ZTIvc3hl Ml90eHJ4X3ZlY19hdng1MTIuYyAgIHwgICAzICstDQo+ICBkcml2ZXJzL25ldC90YXAvcnRlX2V0 aF90YXAuYyAgICAgICAgICAgICB8ICAgMiArLQ0KPiAgbGliL2VhbC9pbmNsdWRlL3J0ZV9jb21t b24uaCAgICAgICAgICAgICAgfCAgMTIgKw0KPiAgbGliL2VhbC94ODYvaW5jbHVkZS9ydGVfbWVt Y3B5LmggICAgICAgICAgfCAgMjkgKysNCj4gIGxpYi9tZW1wb29sL21lbXBvb2xfdHJhY2UuaCAg ICAgICAgICAgICAgIHwgICAxIC0NCj4gIGxpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmMgICAgICAg ICAgICAgICAgIHwgIDUxICsrLS0NCj4gIGxpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmggICAgICAg ICAgICAgICAgIHwgIDc0ICsrKy0tDQo+ICBsaWIvc3RhY2svbWVzb24uYnVpbGQgICAgICAgICAg ICAgICAgICAgICB8ICAgMyArLQ0KPiAgbGliL3N0YWNrL3J0ZV9zdGFjay5jICAgICAgICAgICAg ICAgICAgICAgfCAgMTggKy0NCj4gIGxpYi9zdGFjay9ydGVfc3RhY2suaCAgICAgICAgICAgICAg ICAgICAgIHwgIDc3ICsrKysrLQ0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19sZi5oICAgICAgICAg ICAgICAgICAgfCAgIDYgKy0NCj4gIGxpYi9zdGFjay9ydGVfc3RhY2tfbGZfYzExLmggICAgICAg ICAgICAgIHwgICAyICstDQo+ICBsaWIvc3RhY2svcnRlX3N0YWNrX2xmX2dlbmVyaWMuaCAgICAg ICAgICB8ICAgMiArLQ0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19sZl9zdHVicy5oICAgICAgICAg ICAgfCAgIDIgKy0NCj4gIGxpYi9zdGFjay9ydGVfc3RhY2tfcGlsZS5jICAgICAgICAgICAgICAg IHwgIDMzICsrKw0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19waWxlLmggICAgICAgICAgICAgICAg fCAzMTYgKysrKysrKysrKysrKysrKysrKysrKw0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19zdGQu aCAgICAgICAgICAgICAgICAgfCAgNDEgKystDQo+ICAyNSBmaWxlcyBjaGFuZ2VkLCA3NTYgaW5z ZXJ0aW9ucygrKSwgMTIwIGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9z dGFjay9ydGVfc3RhY2tfcGlsZS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3N0YWNrL3J0 ZV9zdGFja19waWxlLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC90ZXN0X21lbXBvb2wu YyBiL2FwcC90ZXN0L3Rlc3RfbWVtcG9vbC5jDQo+IGluZGV4IGU1NDI0OWNlNjEuLjc2ZDQ1Y2Vh MmEgMTAwNjQ0DQo+IC0tLSBhL2FwcC90ZXN0L3Rlc3RfbWVtcG9vbC5jDQo+ICsrKyBiL2FwcC90 ZXN0L3Rlc3RfbWVtcG9vbC5jDQo+IEBAIC0xMTIsOCArMTEyLDcgQEAgdGVzdF9tZW1wb29sX2Jh c2ljKHN0cnVjdCBydGVfbWVtcG9vbCAqbXAsIGludA0KPiB1c2VfZXh0ZXJuYWxfY2FjaGUpDQo+ ICAJCUdPVE9fRVJSKHJldCwgb3V0KTsNCj4gDQo+ICAJcHJpbnRmKCJnZXQgcHJpdmF0ZSBkYXRh XG4iKTsNCj4gLQlpZiAocnRlX21lbXBvb2xfZ2V0X3ByaXYobXApICE9IChjaGFyICopbXAgKw0K PiAtCQkJUlRFX01FTVBPT0xfSEVBREVSX1NJWkUobXAsIG1wLT5jYWNoZV9zaXplKSkNCj4gKwlp ZiAocnRlX21lbXBvb2xfZ2V0X3ByaXYobXApICE9IChjaGFyICopbXAgKyBzaXplb2Yoc3RydWN0 DQo+IHJ0ZV9tZW1wb29sKSkNCj4gIAkJR09UT19FUlIocmV0LCBvdXQpOw0KPiANCj4gICNpZm5k ZWYgUlRFX0VYRUNfRU5WX0ZSRUVCU0QgLyogcnRlX21lbV92aXJ0MmlvdmEoKSBub3Qgc3VwcG9y dGVkIG9uDQo+IGJzZCAqLw0KPiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3QvdGVzdF9zdGFjay5jIGIv YXBwL3Rlc3QvdGVzdF9zdGFjay5jDQo+IGluZGV4IDU1MTc5ODI3NzQuLmFjNTJmMWMwNDggMTAw NjQ0DQo+IC0tLSBhL2FwcC90ZXN0L3Rlc3Rfc3RhY2suYw0KPiArKysgYi9hcHAvdGVzdC90ZXN0 X3N0YWNrLmMNCj4gQEAgLTgxLDEzICs4MSwyOSBAQCB0ZXN0X3N0YWNrX3B1c2hfcG9wKHN0cnVj dCBydGVfc3RhY2sgKnMsIHZvaWQNCj4gKipvYmpfdGFibGUsIHVuc2lnbmVkIGludCBidWxrX3N6 KQ0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gLQlmb3IgKGkgPSAwOyBpIDwgU1RBQ0tfU0laRTsgaSsr KSB7DQo+IC0JCWlmIChvYmpfdGFibGVbaV0gIT0gcG9wcGVkX29ianNbU1RBQ0tfU0laRSAtIGkg LSAxXSkgew0KPiAtCQkJcHJpbnRmKCJbJXMoKToldV0gSW5jb3JyZWN0IHZhbHVlICVwIGF0IGlu ZGV4DQo+IDB4JXhcbiIsDQo+IC0JCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLA0KPiAtCQkJ ICAgICAgIHBvcHBlZF9vYmpzW1NUQUNLX1NJWkUgLSBpIC0gMV0sIGkpOw0KPiAtCQkJcnRlX2Zy ZWUocG9wcGVkX29ianMpOw0KPiAtCQkJcmV0dXJuIC0xOw0KPiArCWlmICghKHMtPmZsYWdzICYg UlRFX1NUQUNLX0ZfUElMRSkpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IFNUQUNLX1NJWkU7IGkr Kykgew0KPiArCQkJaWYgKG9ial90YWJsZVtpXSAhPSBwb3BwZWRfb2Jqc1tTVEFDS19TSVpFIC0g aSAtIDFdKQ0KPiB7DQo+ICsJCQkJcHJpbnRmKCJbJXMoKToldV0gSW5jb3JyZWN0IHZhbHVlICVw IGF0IGluZGV4DQo+IDB4JXhcbiIsDQo+ICsJCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywN Cj4gKwkJCQkgICAgICAgcG9wcGVkX29ianNbU1RBQ0tfU0laRSAtIGkgLSAxXSwgaSk7DQo+ICsJ CQkJcnRlX2ZyZWUocG9wcGVkX29ianMpOw0KPiArCQkJCXJldHVybiAtMTsNCj4gKwkJCX0NCj4g KwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmICgocy0+ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9QSUxFKSAm JiAoYnVsa19zeiAmDQo+IChSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgLSAxKSkgPT0gMCkgew0K PiArCQlmb3IgKGkgPSAwOyBpIDwgU1RBQ0tfU0laRTsgaSArPSBSVEVfU1RBQ0tfUElMRV9CVUxL X1NJWkUpDQo+IHsNCj4gKwkJCWlmIChtZW1jbXAoJm9ial90YWJsZVtpXSwNCj4gKwkJCQkJJnBv cHBlZF9vYmpzW1NUQUNLX1NJWkUgLQ0KPiBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgLSBpXSwN Cj4gKwkJCQkJUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFKSAhPSAwKSB7DQo+ICsJCQkJcHJpbnRm KCJbJXMoKToldV0gSW5jb3JyZWN0IHZhbHVlcyAlcCBhdCBpbmRleA0KPiAweCV4IHdpdGggYnVs ayBzaXplICV1XG4iLA0KPiArCQkJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sDQo+ICsJCQkJ ICAgICAgIHBvcHBlZF9vYmpzW1NUQUNLX1NJWkUgLQ0KPiBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJ WkUgLSBpXSwgaSwgYnVsa19zeik7DQo+ICsJCQkJcnRlX2ZyZWUocG9wcGVkX29ianMpOw0KPiAr CQkJCXJldHVybiAtMTsNCj4gKwkJCX0NCj4gIAkJfQ0KPiAgCX0NCj4gDQo+IEBAIC0xNTIsMTIg KzE2OCwyNiBAQCB0ZXN0X3N0YWNrX2Jhc2ljKHVpbnQzMl90IGZsYWdzKQ0KPiAgCQlnb3RvIGZh aWxfdGVzdDsNCj4gIAl9DQo+IA0KPiAtCXJldCA9IHJ0ZV9zdGFja19wdXNoKHMsIG9ial90YWJs ZSwgMiAqIFNUQUNLX1NJWkUpOw0KPiAtCWlmIChyZXQgIT0gMCkgew0KPiAtCQlwcmludGYoIlsl cygpOiV1XSBFeGNlc3Mgb2JqZWN0cyBwdXNoIHN1Y2NlZWRlZFxuIiwNCj4gLQkJICAgICAgIF9f ZnVuY19fLCBfX0xJTkVfXyk7DQo+IC0JCWdvdG8gZmFpbF90ZXN0Ow0KPiArX19ydGVfZGlhZ25v c3RpY19wdXNoDQo+ICsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XYXJyYXktYm91 bmRzIg0KPiArI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N0cmluZ29wLW92ZXJy ZWFkIg0KPiArCWlmICghKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfUElMRSkpIHsNCj4gKwkJcmV0 ID0gcnRlX3N0YWNrX3B1c2gocywgb2JqX3RhYmxlLCAyICogU1RBQ0tfU0laRSk7DQo+ICsJCWlm IChyZXQgIT0gMCkgew0KPiArCQkJcHJpbnRmKCJbJXMoKToldV0gRXhjZXNzIG9iamVjdHMgcHVz aCBzdWNjZWVkZWRcbiIsDQo+ICsJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsNCj4gKwkJ CWdvdG8gZmFpbF90ZXN0Ow0KPiArCQl9DQo+ICAJfQ0KPiArCWlmIChzLT5mbGFncyAmIFJURV9T VEFDS19GX1BJTEUpIHsNCj4gKwkJcmV0ID0gcnRlX3N0YWNrX3B1c2gocywgb2JqX3RhYmxlLCBT VEFDS19TSVpFICoNCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFICsgMSk7DQo+ICsJCWlmIChy ZXQgIT0gMCkgew0KPiArCQkJcHJpbnRmKCJbJXMoKToldV0gRXhjZXNzIG9iamVjdHMgcHVzaCBz dWNjZWVkZWRcbiIsDQo+ICsJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsNCj4gKwkJCWdv dG8gZmFpbF90ZXN0Ow0KPiArCQl9DQo+ICsJfQ0KPiArX19ydGVfZGlhZ25vc3RpY19wb3ANCj4g DQo+ICAJcmV0ID0gcnRlX3N0YWNrX3BvcChzLCBvYmpfdGFibGUsIDEpOw0KPiAgCWlmIChyZXQg IT0gMCkgew0KPiBAQCAtMTgxLDE0ICsyMTEsMTQgQEAgdGVzdF9zdGFja19uYW1lX3JldXNlKHVp bnQzMl90IGZsYWdzKQ0KPiAgew0KPiAgCXN0cnVjdCBydGVfc3RhY2sgKnNbMl07DQo+IA0KPiAt CXNbMF0gPSBydGVfc3RhY2tfY3JlYXRlKCJ0ZXN0IiwgU1RBQ0tfU0laRSwgcnRlX3NvY2tldF9p ZCgpLA0KPiBmbGFncyk7DQo+ICsJc1swXSA9IHJ0ZV9zdGFja19jcmVhdGUoX19mdW5jX18sIFNU QUNLX1NJWkUsIHJ0ZV9zb2NrZXRfaWQoKSwNCj4gZmxhZ3MpOw0KPiAgCWlmIChzWzBdID09IE5V TEwpIHsNCj4gIAkJcHJpbnRmKCJbJXMoKToldV0gRmFpbGVkIHRvIGNyZWF0ZSBhIHN0YWNrXG4i LA0KPiAgCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsNCj4gIAkJcmV0dXJuIC0xOw0KPiAg CX0NCj4gDQo+IC0Jc1sxXSA9IHJ0ZV9zdGFja19jcmVhdGUoInRlc3QiLCBTVEFDS19TSVpFLCBy dGVfc29ja2V0X2lkKCksDQo+IGZsYWdzKTsNCj4gKwlzWzFdID0gcnRlX3N0YWNrX2NyZWF0ZShf X2Z1bmNfXywgU1RBQ0tfU0laRSwgcnRlX3NvY2tldF9pZCgpLA0KPiBmbGFncyk7DQo+ICAJaWYg KHNbMV0gIT0gTlVMTCkgew0KPiAgCQlwcmludGYoIlslcygpOiV1XSBGYWlsZWQgdG8gZGV0ZWN0 IHJlLXVzZWQgbmFtZVxuIiwNCj4gIAkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7DQo+IEBA IC0zMDAsNiArMzMwLDcgQEAgc3RhY2tfdGhyZWFkX3B1c2hfcG9wKF9fcnRlX3VudXNlZCB2b2lk ICphcmdzKQ0KPiAgCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgbnVtKTsNCj4gIAkJCXJl dHVybiAtMTsNCj4gIAkJfQ0KPiArCQlydGVfY29tcGlsZXJfYmFycmllcigpOw0KPiAgCX0NCj4g DQo+ICAJcmV0dXJuIDA7DQo+IEBAIC0zODQsNSArNDE1LDE2IEBAIHRlc3RfbGZfc3RhY2sodm9p ZCkNCj4gICNlbmRpZg0KPiAgfQ0KPiANCj4gK3N0YXRpYyBpbnQNCj4gK3Rlc3RfcGlsZSh2b2lk KQ0KPiArew0KPiArI2lmIGRlZmluZWQoUlRFX1NUQUNLX1BJTEVfU1VQUE9SVEVEKQ0KPiArCXJl dHVybiBfX3Rlc3Rfc3RhY2soUlRFX1NUQUNLX0ZfUElMRSk7DQo+ICsjZWxzZQ0KPiArCXJldHVy biBURVNUX1NLSVBQRUQ7DQo+ICsjZW5kaWYNCj4gK30NCj4gKw0KPiAgUkVHSVNURVJfRkFTVF9U RVNUKHN0YWNrX2F1dG90ZXN0LCBOT0hVR0VfU0tJUCwgQVNBTl9PSywgdGVzdF9zdGFjayk7DQo+ ICBSRUdJU1RFUl9GQVNUX1RFU1Qoc3RhY2tfbGZfYXV0b3Rlc3QsIE5PSFVHRV9TS0lQLCBBU0FO X09LLA0KPiB0ZXN0X2xmX3N0YWNrKTsNCj4gK1JFR0lTVEVSX0ZBU1RfVEVTVChzdGFja19waWxl X2F1dG90ZXN0LCBOT0hVR0VfU0tJUCwgQVNBTl9PSywNCj4gdGVzdF9waWxlKTsNCj4gZGlmZiAt LWdpdCBhL2FwcC90ZXN0L3Rlc3Rfc3RhY2tfcGVyZi5jIGIvYXBwL3Rlc3QvdGVzdF9zdGFja19w ZXJmLmMNCj4gaW5kZXggM2YxN2EyNjA2Yy4uNTg2NDEwNjcxZiAxMDA2NDQNCj4gLS0tIGEvYXBw L3Rlc3QvdGVzdF9zdGFja19wZXJmLmMNCj4gKysrIGIvYXBwL3Rlc3QvdGVzdF9zdGFja19wZXJm LmMNCj4gQEAgLTE0LDE0ICsxNCwxNCBAQA0KPiAgI2luY2x1ZGUgInRlc3QuaCINCj4gDQo+ICAj ZGVmaW5lIFNUQUNLX05BTUUgIlNUQUNLX1BFUkYiDQo+IC0jZGVmaW5lIE1BWF9CVVJTVCAzMg0K PiArI2RlZmluZSBNQVhfQlVSU1QgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUgLyAyDQo+ICAj ZGVmaW5lIFNUQUNLX1NJWkUgKFJURV9NQVhfTENPUkUgKiBNQVhfQlVSU1QpDQo+IA0KPiAgLyoN Cj4gICAqIFB1c2gvcG9wIGJ1bGsgc2l6ZXMsIG1hcmtlZCB2b2xhdGlsZSBzbyB0aGV5IGFyZW4n dCB0cmVhdGVkIGFzDQo+IGNvbXBpbGUtdGltZQ0KPiAgICogY29uc3RhbnRzLg0KPiAgICovDQo+ IC1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ1bGtfc2l6ZXNbXSA9IHs4LCBNQVhfQlVS U1R9Ow0KPiArc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGludCBidWxrX3NpemVzW10gPSB7MSwg OCwgMzIsIE1BWF9CVVJTVH07DQo+IA0KPiAgc3RhdGljIFJURV9BVE9NSUModWludDMyX3QpIGxj b3JlX2JhcnJpZXI7DQo+IA0KPiBAQCAtMzU0LDUgKzM1NCwxNiBAQCB0ZXN0X2xmX3N0YWNrX3Bl cmYodm9pZCkNCj4gICNlbmRpZg0KPiAgfQ0KPiANCj4gK3N0YXRpYyBpbnQNCj4gK3Rlc3RfcGls ZV9wZXJmKHZvaWQpDQo+ICt7DQo+ICsjaWYgZGVmaW5lZChSVEVfU1RBQ0tfUElMRV9TVVBQT1JU RUQpDQo+ICsJcmV0dXJuIF9fdGVzdF9zdGFja19wZXJmKFJURV9TVEFDS19GX1BJTEUpOw0KPiAr I2Vsc2UNCj4gKwlyZXR1cm4gVEVTVF9TS0lQUEVEOw0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4g IFJFR0lTVEVSX1BFUkZfVEVTVChzdGFja19wZXJmX2F1dG90ZXN0LCB0ZXN0X3N0YWNrX3BlcmYp Ow0KPiAgUkVHSVNURVJfUEVSRl9URVNUKHN0YWNrX2xmX3BlcmZfYXV0b3Rlc3QsIHRlc3RfbGZf c3RhY2tfcGVyZik7DQo+ICtSRUdJU1RFUl9QRVJGX1RFU1Qoc3RhY2tfcGlsZV9wZXJmX2F1dG90 ZXN0LCB0ZXN0X3BpbGVfcGVyZik7DQo+IGRpZmYgLS1naXQgYS9jb25maWcvcnRlX2NvbmZpZy5o IGIvY29uZmlnL3J0ZV9jb25maWcuaA0KPiBpbmRleCAwNDQ3Y2RmMmFkLi4wMzM1MDY2MGU0IDEw MDY0NA0KPiAtLS0gYS9jb25maWcvcnRlX2NvbmZpZy5oDQo+ICsrKyBiL2NvbmZpZy9ydGVfY29u ZmlnLmgNCj4gQEAgLTU2LDcgKzU2LDcgQEANCj4gICNkZWZpbmUgUlRFX0NPTlRJR01FTV9ERUZB VUxUX0JVRl9TSVpFICg1MTIqMTAyNCoxMDI0KQ0KPiANCj4gIC8qIG1lbXBvb2wgZGVmaW5lcyAq Lw0KPiAtI2RlZmluZSBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSA1MTINCj4gKyNkZWZpbmUg UlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUgMTAyNA0KPiAgLyogUlRFX0xJQlJURV9NRU1QT09M X1NUQVRTIGlzIG5vdCBzZXQgKi8NCj4gIC8qIFJURV9MSUJSVEVfTUVNUE9PTF9ERUJVRyBpcyBu b3Qgc2V0ICovDQo+IA0KPiBAQCAtNjQsNiArNjQsOSBAQA0KPiAgI2RlZmluZSBSVEVfTUJVRl9E RUZBVUxUX01FTVBPT0xfT1BTICJyaW5nX21wX21jIg0KPiAgLyogUlRFX01CVUZfSElTVE9SWV9E RUJVRyBpcyBub3Qgc2V0ICovDQo+IA0KPiArLyogc3RhY2sgZGVmaW5lcyAqLw0KPiArI2RlZmlu ZSBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgMzINCj4gKw0KPiAgLyogZXRoZXIgZGVmaW5lcyAq Lw0KPiAgI2RlZmluZSBSVEVfTUFYX1FVRVVFU19QRVJfUE9SVCAxMDI0DQo+ICAjZGVmaW5lIFJU RV9FVEhERVZfUlhUWF9DQUxMQkFDS1MgMQ0KPiBkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9wcm9n X2d1aWRlL3N0YWNrX2xpYi5yc3QNCj4gYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvc3RhY2tfbGli LnJzdA0KPiBpbmRleCBmZGYwNTY3MzBjLi45YjQ3MzAzMGQzIDEwMDY0NA0KPiAtLS0gYS9kb2Mv Z3VpZGVzL3Byb2dfZ3VpZGUvc3RhY2tfbGliLnJzdA0KPiArKysgYi9kb2MvZ3VpZGVzL3Byb2df Z3VpZGUvc3RhY2tfbGliLnJzdA0KPiBAQCAtMSw1ICsxLDYgQEANCj4gIC4uICBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICAgICAgQ29weXJpZ2h0KGMpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24uDQo+ICsgICAgQ29weXJpZ2h0KGMpIDIwMjYgU21hcnRTaGFyZSBTeXN0 ZW1zLg0KPiANCj4gIFN0YWNrIExpYnJhcnkNCj4gID09PT09PT09PT09PT0NCj4gQEAgLTksOSAr MTAsMTAgQEAgc3RhY2sgb2YgcG9pbnRlcnMuDQo+IA0KPiAgVGhlIHN0YWNrIGxpYnJhcnkgcHJv dmlkZXMgdGhlIGZvbGxvd2luZyBiYXNpYyBvcGVyYXRpb25zOg0KPiANCj4gLSogIENyZWF0ZSBh IHVuaXF1ZWx5IG5hbWVkIHN0YWNrIG9mIGEgdXNlci1zcGVjaWZpZWQgc2l6ZSBhbmQgdXNpbmcg YQ0KPiArKiAgQ3JlYXRlIGEgdW5pcXVlbHkgbmFtZWQgc3RhY2sgKG9yIHBpbGUpIG9mIGEgdXNl ci1zcGVjaWZpZWQgc2l6ZQ0KPiBhbmQgdXNpbmcgYQ0KPiAgICAgdXNlci1zcGVjaWZpZWQgc29j a2V0LCB3aXRoIGVpdGhlciBzdGFuZGFyZCAobG9jay1iYXNlZCkgb3IgbG9jay0NCj4gZnJlZQ0K PiAgICAgYmVoYXZpb3IuDQo+ICsgICBUaGUgcGlsZSByZXNlbWJsZXMgYSBsb2NrLWZyZWUgc3Rh Y2ssIGJ1dCBpcyBub3Qgc3RyaWN0bHkgTElGTy4NCj4gDQo+ICAqICBQdXNoIGFuZCBwb3AgYSBi dXJzdCBvZiBvbmUgb3IgbW9yZSBzdGFjayBvYmplY3RzIChwb2ludGVycykuDQo+ICAgICBUaGVz ZSBmdW5jdGlvbnMgYXJlIG11bHRpLXRocmVhZCBzYWZlLg0KPiBAQCAtMjUsOCArMjcsOSBAQCBU aGUgc3RhY2sgbGlicmFyeSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGJhc2ljDQo+IG9wZXJhdGlv bnM6DQo+ICBJbXBsZW1lbnRhdGlvbg0KPiAgLS0tLS0tLS0tLS0tLS0NCj4gDQo+IC1UaGUgbGli cmFyeSBzdXBwb3J0cyB0d28gdHlwZXMgb2Ygc3RhY2tzOiBzdGFuZGFyZCAobG9jay1iYXNlZCkg YW5kDQo+IGxvY2stZnJlZS4NCj4gLUJvdGggdHlwZXMgdXNlIHRoZSBzYW1lIHNldCBvZiBpbnRl cmZhY2VzLCBidXQgdGhlaXIgaW1wbGVtZW50YXRpb25zDQo+IGRpZmZlci4NCj4gK1RoZSBsaWJy YXJ5IHN1cHBvcnRzIHRocmVlIHR5cGVzIG9mIHN0YWNrczogc3RhbmRhcmQgKGxvY2stYmFzZWQp LA0KPiBsb2NrLWZyZWUsDQo+ICthbmQgcGlsZSAobG9jay1mcmVlLCBub3Qgc3RyaWN0bHkgTElG Tywgb3B0aW1pemVkIGZvciBidWxrDQo+IG9wZXJhdGlvbnMpLg0KPiArQWxsIHR5cGVzIHVzZSB0 aGUgc2FtZSBzZXQgb2YgaW50ZXJmYWNlcywgYnV0IHRoZWlyIGltcGxlbWVudGF0aW9ucw0KPiBk aWZmZXIuDQo+IA0KPiAgLi4gX1N0YWNrX0xpYnJhcnlfU3RkX1N0YWNrOg0KPiANCj4gQEAgLTY0 LDcgKzY3LDcgQEAgVGhlIGxpbmtlZCBsaXN0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIG1haW50 YWluZWQgaW4NCj4gYSBsb2NrLWZyZWUgTElGTywgYW5kIGFyZQ0KPiAgYWxsb2NhdGVkIGJlZm9y ZSBzdGFjayBwdXNoZXMgYW5kIGZyZWVkIGFmdGVyIHN0YWNrIHBvcHMuIFNpbmNlIHRoZQ0KPiBz dGFjayBoYXMgYQ0KPiAgZml4ZWQgbWF4aW11bSBkZXB0aCwgdGhlc2UgZWxlbWVudHMgZG8gbm90 IG5lZWQgdG8gYmUgZHluYW1pY2FsbHkNCj4gY3JlYXRlZC4NCj4gDQo+IC1UaGUgbG9jay1mcmVl IGJlaGF2aW9yIGlzIHNlbGVjdGVkIGJ5IHBhc3NpbmcgdGhlICpSVEVfU1RBQ0tfRl9MRioNCj4g ZmxhZyB0bw0KPiArVGhlIGxvY2stZnJlZSBiZWhhdmlvciBpcyBzZWxlY3RlZCBieSBwYXNzaW5n IHRoZSBgYFJURV9TVEFDS19GX0xGYGANCj4gZmxhZyB0bw0KPiAgYGBydGVfc3RhY2tfY3JlYXRl KClgYC4NCj4gDQo+ICBQcmV2ZW50aW5nIHRoZSBBQkEgcHJvYmxlbQ0KPiBAQCAtODYsMyArODks NTkgQEAgYm90aCBwb3Agc3RhbGUgZGF0YSBhbmQgaW5jb3JyZWN0bHkgY2hhbmdlIHRoZSBoZWFk DQo+IHBvaW50ZXIuIEJ5IGFkZGluZyBhDQo+ICBtb2RpZmljYXRpb24gY291bnRlciB0aGF0IGlz IHVwZGF0ZWQgb24gZXZlcnkgcHVzaCBhbmQgcG9wIGFzIHBhcnQgb2YNCj4gdGhlDQo+ICBjb21w YXJlLWFuZC1zd2FwLCB0aGUgYWxnb3JpdGhtIGNhbiBkZXRlY3Qgd2hlbiB0aGUgbGlzdCBjaGFu Z2VzIGV2ZW4NCj4gaWYgdGhlDQo+ICBoZWFkIHBvaW50ZXIgcmVtYWlucyB0aGUgc2FtZS4NCj4g Kw0KPiArLi4gX1N0YWNrX0xpYnJhcnlfUGlsZToNCj4gKw0KPiArUGlsZQ0KPiArfn5+fg0KPiAr DQo+ICtUaGUgcGlsZSBpcyBhIHN0YWNrLWxpa2UgaW1wbGVtZW50YXRpb24sIG9wdGltaXplZCBm b3IgYnVsaw0KPiBvcGVyYXRpb25zLg0KPiArSXQgaXMgb25seSBMSUZPIG9uIGJ1bGsgbGV2ZWws IG5vdCBvbiBvYmplY3QgbGV2ZWw7IGkuZS4gYXJyYXlzIG9mDQo+IGJ1bGtzIGFyZQ0KPiArcHVz aGVkIGFuZCBwb3BwZWQgaW4gTElGTyBtYW5uZXIsIGJ1dCBvYmplY3RzIHdpdGhpbiBlYWNoIGJ1 bGsgYXJlIG5vdA0KPiBvcmRlcmVkDQo+ICthcyBleHBlY3RlZCBieSBhIHN0YWNrLg0KPiArDQo+ ICtUaGUgcGlsZSBpbXBsZW1lbnRhdGlvbiBnZW5lcmFsbHkgcmVzZW1ibGVzIHRoYXQgb2YgdGhl IGxvY2stZnJlZQ0KPiBzdGFjay4NCj4gK0luIGFkZGl0aW9uIHRvIHRoZSBsb2NrLWZyZWUgc3Rh Y2sncyBsaW5rZWQgbGlzdCBvZiBzb2xvIChzaW5nbGUtDQo+IG9iamVjdCkgZWxlbWVudHMsDQo+ ICtpdCBhbHNvIGNvbnRhaW5zIGEgbGlua2VkIGxpc3Qgb2YgYnVsayAobXVsdGktb2JqZWN0KSBl bGVtZW50cy4NCj4gK0FuZCBzaW1pbGFyIHRvIHRoZSBsaW5rZWQgbGlzdCBvZiBmcmVlIGVsZW1l bnRzLCBpdCBjb250YWlucyB0d28NCj4gbGlua2VkIGxpc3RzIG9mDQo+ICtmcmVlIGVsZW1lbnRz LCBvbmUgZm9yIGVhY2ggZWxlbWVudCB0eXBlIChidWxrIGFuZCBzb2xvKS4NCj4gK1RoZSBsb2Nr LWZyZWUgcHJvcGVydHkgbWVhbnMgdGhhdCBtdWx0aXBsZSB0aHJlYWRzIGNhbiBwdXNoIGFuZCBw b3ANCj4gc2ltdWx0YW5lb3VzbHkuDQo+ICtPbmUgdGhyZWFkIGJlaW5nIHByZWVtcHRlZC9kZWxh eWVkIGluIGEgcHVzaCBvciBwb3Agb3BlcmF0aW9uIHdpbGwgbm90DQo+ICtpbXBlZGUgdGhlIGZv cndhcmQgcHJvZ3Jlc3Mgb2YgYW55IG90aGVyIHRocmVhZC4NCj4gKw0KPiArUHVzaCBvcGVyYXRp b25zIGFyZSBwZXJmb3JtZWQgYnkgc3BsaXR0aW5nIHRoZSBidXJzdCBpbiB0d286IG9iamVjdHMN Cj4gZml0dGluZyBpbnRvDQo+ICtidWxrIGVsZW1lbnRzLCBhbmQgYW55IHJlbWFpbmluZyBvYmpl Y3RzIChhZnRlciBmaWxsaW5nIGJ1bGsgZWxlbWVudHMpDQo+IGludG8NCj4gK3NvbG8gZWxlbWVu dHMsIGFuZCB0aGVuIHBlcmZvcm1haW5nIHR3byBsb2NrLWZyZWUgcHVzaCBvcGVyYXRpb25zLA0K PiArb25lIGZvciBlYWNoIGVsZW1lbnQgdHlwZSAoc29sbyBhbmQgYnVsaykuDQo+ICsNCj4gK1Bv cCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYnkgc3BsaXR0aW5nIHRoZSBidXJzdCBpbiB0d286 IG9iamVjdHMNCj4gZml0dGluZyBpbnRvDQo+ICtidWxrIGVsZW1lbnRzLCBhbmQgYW55IHJlbWFp bmluZyBvYmplY3RzIChub3QgZmlsbGluZyBhIGJ1bGsgZWxlbWVudCkNCj4gaW50bw0KPiArc29s byBlbGVtZW50cy4gVHdvIGxvY2stZnJlZSBwb3Agb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLA0K PiArZmlyc3QgZm9yIGJ1bGsgZWxlbWVudHMsIGFuZCB0aGVuIGZvciBzb2xvIGVsZW1lbnRzLg0K PiArSWYgdGhlIHBvcCBvcGVyYXRpb24gZm9yIGJ1bGsgZWxlbWVudHMgZmFpbHMsIGl0IGtlZXBz IHJldHJ5aW5nLA0KPiByZXF1ZXN0aW5nIG9uZQ0KPiArbGVzcyBidWxrIGVsZW1lbnQuIFRoZSBu dW1iZXIgb2Ygc29sbyBlbGVtZW50cyBpbiB0aGUgZm9sbG93aW5nDQo+IHJlcXVlc3QgaXMNCj4g K2NvcnJlc3BvbmRpbmdseSBpbmNyZWFzZWQuDQo+ICsNCj4gK1RoZSBwaWxlJ3MgbG9jay1mcmVl IGxpc3QgcHVzaCBhbmQgcG9wIG9wZXJhdGlvbnMgdXNlIHRoZSBsb2NrLWZyZWUNCj4gc3RhY2sn cw0KPiAraW1wbGVtZW50YXRpb25zIChhbmQgdXNlcyB0eXBlIGNhc3RpbmcgdG8gbWltaWNrIEMr KyBjbGFzcw0KPiBpbmhlcml0YW5jZSkuDQo+ICsNCj4gK1RoZSBsaW5rZWQgbGlzdCBlbGVtZW50 cyB0aGVtc2VsdmVzIGFyZSBtYWludGFpbmVkIGluIHR3byBsb2NrLWZyZWUNCj4gTElGT3MsDQo+ ICtvbmUgZm9yIGJ1bGsgZWxlbWVudHMgYW5kIG9uZSBmb3Igc29sbyBlbGVtZW50cywgYW5kIGFy ZQ0KPiArYWxsb2NhdGVkIGJlZm9yZSBwdXNoZXMgYW5kIGZyZWVkIGFmdGVyIHBvcHMuIFNpbmNl IHRoZSBwaWxlIGhhcyBhDQo+ICtmaXhlZCBtYXhpbXVtIGRlcHRoLCB0aGVzZSBlbGVtZW50cyBk byBub3QgbmVlZCB0byBiZSBkeW5hbWljYWxseQ0KPiBjcmVhdGVkLg0KPiArDQo+ICtUaGUgcGls ZSBiZWhhdmlvciBpcyBzZWxlY3RlZCBieSBwYXNzaW5nIHRoZSBgYFJURV9TVEFDS19GX1BJTEVg YCBmbGFnDQo+IHRvDQo+ICtgYHJ0ZV9zdGFja19jcmVhdGUoKWBgLg0KPiArDQo+ICtUaGUgcGls ZSBidWxrIHNpemUgY2FuIGJlIGNoYW5nZWQgYnkgbW9kaWZ5aW5nDQo+IGBgUlRFX1NUQUNLX1BJ TEVfQlVMS19TSVpFYGAgaW4NCj4gK2BgY29uZmlnL3J0ZV9jb25maWcuaGBgLg0KPiArRm9yIG9w dGltYWwgcGVyZm9ybWFuY2Ugd2hlbiB1c2luZyB0aGUgcGlsZSBtZW1wb29sIGRyaXZlciwgdGhl DQo+ICttZW1wb29sIGNhY2hlIHNpemUgLyAyIHNob3VsZCBiZSBkaXZpc2libGUgYnkgdGhlIHBp bGUgYnVsayBzaXplLg0KPiArDQo+ICtOb3RlOg0KPiArVGhlIHBpbGUgaXMgZGVzaWduZWQgYW5k IG9wdGltaXplZCBmb3IgdXNlIHdpdGggYnVsa3Mgb2Ygb2JqZWN0cy4NCj4gK0J1cnN0cyBub3Qg YSBtdWx0aXBsZSBvZiB0aGUgYnVsayBzaXplIGFyZSBzdGlsbCBoYW5kbGVkIGluIGEgbG9jay0N Cj4gZnJlZSwNCj4gK2ZvcndhcmQtcHJvZ3Jlc3MtZ3VhcmFudGVlZCBtYW5uZXIuIEhvd2V2ZXIs IHBvcCBvcGVyYXRpb25zIG1heQ0KPiBleGhpYml0DQo+ICtzaWduaWZpY2FudGx5IGxvd2VyIHBl cmZvcm1hbmNlIGluIGluc3RhbmNlcyB3aGVyZSB0aGUgb3B0aW1hbCBudW1iZXINCj4gb2YNCj4g K2J1bGsgZWxlbWVudHMgaXMgdW5hdmFpbGFibGUsIGFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gcmV0 cnkgKGZldGNoaW5nDQo+ICtpbmNyZWFzaW5nbHkgZmV3ZXIgYnVsayBlbGVtZW50cyBhbmQgY29y cmVzcG9uZGluZ2x5IG1vcmUgc29sbw0KPiBlbGVtZW50cykuDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21lbXBvb2wvc3RhY2svcnRlX21lbXBvb2xfc3RhY2suYw0KPiBiL2RyaXZlcnMvbWVtcG9v bC9zdGFjay9ydGVfbWVtcG9vbF9zdGFjay5jDQo+IGluZGV4IDE0NzY5MDUyMjcuLjc0NjdiOGIz OWUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbWVtcG9vbC9zdGFjay9ydGVfbWVtcG9vbF9zdGFj ay5jDQo+ICsrKyBiL2RyaXZlcnMvbWVtcG9vbC9zdGFjay9ydGVfbWVtcG9vbF9zdGFjay5jDQo+ IEBAIC00MSw2ICs0MSwzNiBAQCBsZl9zdGFja19hbGxvYyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1w KQ0KPiAgCXJldHVybiBfX3N0YWNrX2FsbG9jKG1wLCBSVEVfU1RBQ0tfRl9MRik7DQo+ICB9DQo+ IA0KPiArc3RhdGljIGludA0KPiArcGlsZV9hbGxvYyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wKQ0K PiArew0KPiArCXJldHVybiBfX3N0YWNrX2FsbG9jKG1wLCBSVEVfU1RBQ0tfRl9QSUxFKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludA0KPiArcGlsZV9lbnF1ZXVlKHN0cnVjdCBydGVfbWVtcG9v bCAqbXAsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiArCSAgICAgIHVuc2lnbmVkIGludCBu KQ0KPiArew0KPiArCXN0cnVjdCBydGVfc3RhY2sgKnMgPSBtcC0+cG9vbF9kYXRhOw0KPiArDQo+ ICsJUlRFX0FTU0VSVChzICE9IE5VTEwpOw0KPiArCVJURV9BU1NFUlQob2JqX3RhYmxlICE9IE5V TEwpOw0KPiArDQo+ICsJcmV0dXJuIF9fcnRlX3N0YWNrX3BpbGVfcHVzaChzLCBvYmpfdGFibGUs IG4pID09IDAgPyAtRU5PQlVGUyA6DQo+IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4g K3BpbGVfZGVxdWV1ZShzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLCB2b2lkICoqb2JqX3RhYmxlLA0K PiArCSAgICAgIHVuc2lnbmVkIGludCBuKQ0KPiArew0KPiArCXN0cnVjdCBydGVfc3RhY2sgKnMg PSBtcC0+cG9vbF9kYXRhOw0KPiArDQo+ICsJUlRFX0FTU0VSVChzICE9IE5VTEwpOw0KPiArCVJU RV9BU1NFUlQob2JqX3RhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsJcmV0dXJuIF9fcnRlX3N0YWNr X3BpbGVfcG9wKHMsIG9ial90YWJsZSwgbikgPT0gMCA/IC1FTk9CVUZTIDogMDsNCj4gK30NCj4g Kw0KPiAgc3RhdGljIGludA0KPiAgc3RhY2tfZW5xdWV1ZShzdHJ1Y3QgcnRlX21lbXBvb2wgKm1w LCB2b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gIAkgICAgICB1bnNpZ25lZCBpbnQgbikNCj4g QEAgLTkzLDUgKzEyMywxNSBAQCBzdGF0aWMgc3RydWN0IHJ0ZV9tZW1wb29sX29wcyBvcHNfbGZf c3RhY2sgPSB7DQo+ICAJLmdldF9jb3VudCA9IHN0YWNrX2dldF9jb3VudA0KPiAgfTsNCj4gDQo+ ICtzdGF0aWMgc3RydWN0IHJ0ZV9tZW1wb29sX29wcyBvcHNfcGlsZSA9IHsNCj4gKwkubmFtZSA9 ICJwaWxlIiwNCj4gKwkuYWxsb2MgPSBwaWxlX2FsbG9jLA0KPiArCS5mcmVlID0gc3RhY2tfZnJl ZSwNCj4gKwkuZW5xdWV1ZSA9IHBpbGVfZW5xdWV1ZSwNCj4gKwkuZGVxdWV1ZSA9IHBpbGVfZGVx dWV1ZSwNCj4gKwkuZ2V0X2NvdW50ID0gc3RhY2tfZ2V0X2NvdW50DQo+ICt9Ow0KPiArDQo+ICBS VEVfTUVNUE9PTF9SRUdJU1RFUl9PUFMob3BzX3N0YWNrKTsNCj4gIFJURV9NRU1QT09MX1JFR0lT VEVSX09QUyhvcHNfbGZfc3RhY2spOw0KPiArUlRFX01FTVBPT0xfUkVHSVNURVJfT1BTKG9wc19w aWxlKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvcnRlX2V0aF9ib25kX3Bt ZC5jDQo+IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ydGVfZXRoX2JvbmRfcG1kLmMNCj4gaW5kZXgg NmE0Zjk5N2I1YS4uOTJkN2Y0ZjRlZiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvYm9uZGlu Zy9ydGVfZXRoX2JvbmRfcG1kLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ydGVfZXRo X2JvbmRfcG1kLmMNCj4gQEAgLTE3MDIsNyArMTcwMiw3IEBAIG1lbWJlcl9jb25maWd1cmVfc2xv d19xdWV1ZShzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmJvbmRpbmdfZXRoX2RldiwNCj4gIAkJc25w cmludGYobWVtX25hbWUsIFJURV9ESU0obWVtX25hbWUpLA0KPiAibWVtYmVyX3BvcnQldV9zbG93 X3Bvb2wiLA0KPiAgCQkJCW1lbWJlcl9pZCk7DQo+ICAJCXBvcnQtPnNsb3dfcG9vbCA9IHJ0ZV9w a3RtYnVmX3Bvb2xfY3JlYXRlKG1lbV9uYW1lLCA4MTkxLA0KPiAtCQkJMjUwLCAwLCBSVEVfTUJV Rl9ERUZBVUxUX0JVRl9TSVpFLA0KPiArCQkJMjU2LCAwLCBSVEVfTUJVRl9ERUZBVUxUX0JVRl9T SVpFLA0KPiAgCQkJbWVtYmVyX2V0aF9kZXYtPmRhdGEtPm51bWFfbm9kZSk7DQo+IA0KPiAgCQkv KiBBbnkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBpbml0aWFsaXphdGlvbiBpcw0KPiBj cml0aWNhbCBiZWNhdXNlDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pbnRlbC9jcGZsL2Nw Zmxfcnh0eC5oDQo+IGIvZHJpdmVycy9uZXQvaW50ZWwvY3BmbC9jcGZsX3J4dHguaA0KPiBpbmRl eCA1MmNkZWNhYzg4Li5mYWYyOGZkNDg5IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9pbnRl bC9jcGZsL2NwZmxfcnh0eC5oDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2ludGVsL2NwZmwvY3BmbF9y eHR4LmgNCj4gQEAgLTI1LDcgKzI1LDcgQEANCj4gICNkZWZpbmUgQ1BGTF9QMlBfUVVFVUVfR1JQ X0lECTENCj4gICNkZWZpbmUgQ1BGTF9QMlBfREVTQ19MRU4JMTYNCj4gICNkZWZpbmUgQ1BGTF9Q MlBfTkJfTUJVRgk0MDk2DQo+IC0jZGVmaW5lIENQRkxfUDJQX0NBQ0hFX1NJWkUJMjUwDQo+ICsj ZGVmaW5lIENQRkxfUDJQX0NBQ0hFX1NJWkUJMjU2DQo+ICAjZGVmaW5lIENQRkxfUDJQX01CVUZf U0laRQkyMDQ4DQo+ICAjZGVmaW5lIENQRkxfUDJQX1JJTkdfQlVGCTEyOA0KPiANCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3N4ZTIvc3hlMl90eHJ4X3ZlY19hdng1MTIuYw0KPiBiL2RyaXZl cnMvbmV0L3N4ZTIvc3hlMl90eHJ4X3ZlY19hdng1MTIuYw0KPiBpbmRleCBhODMwYzdhMzNiLi40 ZGVkNWNiNjNlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9zeGUyL3N4ZTJfdHhyeF92ZWNf YXZ4NTEyLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvc3hlMi9zeGUyX3R4cnhfdmVjX2F2eDUxMi5j DQo+IEBAIC02NywxMSArNjcsMTIgQEAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50MzJf dA0KPiBzeGUyX3R4X2J1ZnNfZnJlZV92ZWNfYXZ4NTEyKHN0cnVjdCBzeGUyX3R4X3ENCj4gIAkJ fQ0KPiAgCQljYWNoZS0+bGVuICs9IHJzX3RocmVzaDsNCj4gDQo+IC0JCWlmIChjYWNoZS0+bGVu ID49IGNhY2hlLT5mbHVzaHRocmVzaCkgew0KPiArCQlpZiAoY2FjaGUtPmxlbiA+PSBjYWNoZS0+ c2l6ZSkgew0KPiAgCQkJKHZvaWQpcnRlX21lbXBvb2xfb3BzX2VucXVldWVfYnVsayhtcCwNCj4g IAkJCQkJJmNhY2hlLT5vYmpzW2NhY2hlLT5zaXplXSwgY2FjaGUtPmxlbiAtDQo+IGNhY2hlLT5z aXplKTsNCj4gIAkJCWNhY2hlLT5sZW4gPSBjYWNoZS0+c2l6ZTsNCj4gIAkJfQ0KPiArDQo+ICAJ CWdvdG8gZG9uZTsNCj4gIAl9DQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwL3J0 ZV9ldGhfdGFwLmMNCj4gYi9kcml2ZXJzL25ldC90YXAvcnRlX2V0aF90YXAuYw0KPiBpbmRleCBi OTM0NTJmMTY4Li5iMzE0MjU2MWMyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC90YXAvcnRl X2V0aF90YXAuYw0KPiArKysgYi9kcml2ZXJzL25ldC90YXAvcnRlX2V0aF90YXAuYw0KPiBAQCAt NjEsNyArNjEsNyBAQA0KPiAgI2RlZmluZSBUQVBfTUFYX01BQ19BRERSUwkxNg0KPiAgI2RlZmlu ZSBUQVBfR1NPX01CVUZTX1BFUl9DT1JFCTEyOA0KPiAgI2RlZmluZSBUQVBfR1NPX01CVUZfU0VH X1NJWkUJMTI4DQo+IC0jZGVmaW5lIFRBUF9HU09fTUJVRl9DQUNIRV9TSVpFCTQNCj4gKyNkZWZp bmUgVEFQX0dTT19NQlVGX0NBQ0hFX1NJWkUJMzINCj4gICNkZWZpbmUgVEFQX0dTT19NQlVGU19O VU0gXA0KPiAgCShUQVBfR1NPX01CVUZTX1BFUl9DT1JFICogVEFQX0dTT19NQlVGX0NBQ0hFX1NJ WkUpDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC9pbmNsdWRlL3J0ZV9jb21tb24uaA0KPiBi L2xpYi9lYWwvaW5jbHVkZS9ydGVfY29tbW9uLmgNCj4gaW5kZXggNzlkMmEwYWI5My4uMGZkMDkw NjUwNiAxMDA2NDQNCj4gLS0tIGEvbGliL2VhbC9pbmNsdWRlL3J0ZV9jb21tb24uaA0KPiArKysg Yi9saWIvZWFsL2luY2x1ZGUvcnRlX2NvbW1vbi5oDQo+IEBAIC01NjcsNiArNTY3LDE1IEBAIHN0 YXRpYyB2b2lkDQo+IF9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IoUlRFX1BSSU8ocHJpbykpLCB1 c2VkKSkgZnVuYyh2b2lkKQ0KPiAgI2RlZmluZSBfX3J0ZV9hc3N1bWUoY29uZGl0aW9uKSBfX2Fz c3VtZShjb25kaXRpb24pDQo+ICAjZW5kaWYNCj4gDQo+ICsvKioNCj4gKyAqIEFsaWdubWVudCBo aW50IHByZWNvbmRpdGlvbg0KPiArICovDQo+ICsjaWZkZWYgUlRFX1RPT0xDSEFJTl9NU1ZDDQo+ ICsjZGVmaW5lIF9fcnRlX2Fzc3VtZV9hbGlnbmVkKHB0ciwgYWxpZ25tZW50KSAocHRyKQ0KPiAr I2Vsc2UNCj4gKyNkZWZpbmUgX19ydGVfYXNzdW1lX2FsaWduZWQocHRyLCBhbGlnbm1lbnQpDQo+ IF9fYnVpbHRpbl9hc3N1bWVfYWxpZ25lZChwdHIsIGFsaWdubWVudCkNCj4gKyNlbmRpZg0KPiAr DQo+ICAvKioNCj4gICAqIERpc2FibGUgQWRkcmVzc1Nhbml0aXplciBvbiBzb21lIGNvZGUNCj4g ICAqLw0KPiBAQCAtNzc1LDYgKzc4NCw5IEBAIHJ0ZV9pc19hbGlnbmVkKGNvbnN0IHZvaWQgKiBj b25zdCBfX3J0ZV9yZXN0cmljdA0KPiBwdHIsIGNvbnN0IHVuc2lnbmVkIGludCBhbGlnbikNCj4g IC8qKiBGb3JjZSBtaW5pbXVtIGNhY2hlIGxpbmUgYWxpZ25tZW50LiAqLw0KPiAgI2RlZmluZSBf X3J0ZV9jYWNoZV9taW5fYWxpZ25lZCBfX3J0ZV9hbGlnbmVkKFJURV9DQUNIRV9MSU5FX01JTl9T SVpFKQ0KPiANCj4gKy8qKiBDYWNoZSBhbGlnbm1lbnQgaGludCBwcmVjb25kaXRpb24gKi8NCj4g KyNkZWZpbmUgX19ydGVfYXNzdW1lX2NhY2hlX2FsaWduZWQocHRyKSBfX3J0ZV9hc3N1bWVfYWxp Z25lZChwdHIsDQo+IFJURV9DQUNIRV9MSU5FX1NJWkUpDQo+ICsNCj4gICNkZWZpbmUgX1JURV9D QUNIRV9HVUFSRF9IRUxQRVIyKHVuaXF1ZSkgXA0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVf U0laRSkgXA0KPiAgCWNoYXIgY2FjaGVfZ3VhcmRfICMjIHVuaXF1ZVtSVEVfQ0FDSEVfTElORV9T SVpFICoNCj4gUlRFX0NBQ0hFX0dVQVJEX0xJTkVTXQ0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC94 ODYvaW5jbHVkZS9ydGVfbWVtY3B5LmgNCj4gYi9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1j cHkuaA0KPiBpbmRleCA4ZWQ4YzU1MDEwLi4zZmUxZThkMjQ3IDEwMDY0NA0KPiAtLS0gYS9saWIv ZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiArKysgYi9saWIvZWFsL3g4Ni9pbmNsdWRl L3J0ZV9tZW1jcHkuaA0KPiBAQCAtNzA3LDYgKzcwNywzNSBAQCBydGVfbWVtY3B5KHZvaWQgKl9f cnRlX3Jlc3RyaWN0IGRzdCwgY29uc3Qgdm9pZA0KPiAqX19ydGVfcmVzdHJpY3Qgc3JjLCBzaXpl X3QgbikNCj4gICNlbmRpZg0KPiAgCQlyZXR1cm4gZHN0Ow0KPiAgCX0NCj4gKwkvKiBDb21tb24g d2F5IGZvciBzbWFsbCBjb3B5IHNpemUgb2YgNjQtYnl0ZSBibG9ja3MgKi8NCj4gKyNpZiBkZWZp bmVkIF9fQVZYNTEyRl9fICYmIGRlZmluZWQgUlRFX01FTUNQWV9BVlg1MTINCj4gKwlpZiAoX19y dGVfY29uc3RhbnQobikgJiYgKG4gJiA2MykgPT0gMCAmJiBuIDw9IDUxMikgew0KPiArI2VsaWYg ZGVmaW5lZCBSVEVfTUVNQ1BZX0FWWA0KPiArCWlmIChfX3J0ZV9jb25zdGFudChuKSAmJiAobiAm IDYzKSA9PSAwICYmIG4gPD0gMjU2KSB7DQo+ICsjZWxzZSAvKiBTU0UgaW1wbGVtZW50YXRpb24g Ki8NCj4gKwlpZiAoX19ydGVfY29uc3RhbnQobikgJiYgKG4gJiA2MykgPT0gMCAmJiBuIDw9IDUx Mikgew0KPiArI2VuZGlmDQo+ICsJCXZvaWQgKnJldCA9IGRzdDsNCj4gKw0KPiArCQlpZiAobiAm IDUxMikgew0KPiArCQkJcnRlX21vdjI1NigodWludDhfdCAqKWRzdCArIDAgKiAyNTYsIChjb25z dCB1aW50OF90DQo+ICopc3JjICsgMCAqIDI1Nik7DQo+ICsJCQlydGVfbW92MjU2KCh1aW50OF90 ICopZHN0ICsgMSAqIDI1NiwgKGNvbnN0IHVpbnQ4X3QNCj4gKilzcmMgKyAxICogMjU2KTsNCj4g KwkJfQ0KPiArCQlpZiAobiAmIDI1Nikgew0KPiArCQkJcnRlX21vdjI1NigodWludDhfdCAqKWRz dCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiArCQkJc3JjID0gKGNvbnN0IHVpbnQ4X3QgKilz cmMgKyAyNTY7DQo+ICsJCQlkc3QgPSAodWludDhfdCAqKWRzdCArIDI1NjsNCj4gKwkJfQ0KPiAr CQlpZiAobiAmIDEyOCkgew0KPiArCQkJcnRlX21vdjEyOCgodWludDhfdCAqKWRzdCwgKGNvbnN0 IHVpbnQ4X3QgKilzcmMpOw0KPiArCQkJc3JjID0gKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxMjg7 DQo+ICsJCQlkc3QgPSAodWludDhfdCAqKWRzdCArIDEyODsNCj4gKwkJfQ0KPiArCQlpZiAobiAm IDY0KQ0KPiArCQkJcnRlX21vdjY0KCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNy Yyk7DQo+ICsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+IA0KPiAgCS8qIEltcGxlbWVudGF0 aW9uIGZvciBzaXplID4gNjQgYnl0ZXMgZGVwZW5kcyBvbiBhbGlnbm1lbnQgd2l0aA0KPiB2ZWN0 b3IgcmVnaXN0ZXIgc2l6ZS4gKi8NCj4gIAlpZiAoISgoKHVpbnRwdHJfdClkc3QgfCAodWludHB0 cl90KXNyYykgJiBBTElHTk1FTlRfTUFTSykpDQo+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC9t ZW1wb29sX3RyYWNlLmggYi9saWIvbWVtcG9vbC9tZW1wb29sX3RyYWNlLmgNCj4gaW5kZXggMjNj ZGExNDczYy4uNjBlNDdjZjY3YiAxMDA2NDQNCj4gLS0tIGEvbGliL21lbXBvb2wvbWVtcG9vbF90 cmFjZS5oDQo+ICsrKyBiL2xpYi9tZW1wb29sL21lbXBvb2xfdHJhY2UuaA0KPiBAQCAtMTE5LDcg KzExOSw2IEBAIFJURV9UUkFDRV9QT0lOVCgNCj4gIAlydGVfdHJhY2VfcG9pbnRfZW1pdF9pMzIo c29ja2V0X2lkKTsNCj4gIAlydGVfdHJhY2VfcG9pbnRfZW1pdF9wdHIoY2FjaGUpOw0KPiAgCXJ0 ZV90cmFjZV9wb2ludF9lbWl0X3UzMihjYWNoZS0+bGVuKTsNCj4gLQlydGVfdHJhY2VfcG9pbnRf ZW1pdF91MzIoY2FjaGUtPmZsdXNodGhyZXNoKTsNCj4gICkNCj4gDQo+ICBSVEVfVFJBQ0VfUE9J TlQoDQo+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5jIGIvbGliL21lbXBv b2wvcnRlX21lbXBvb2wuYw0KPiBpbmRleCA4MTdlMmI4ZGMxLi40NTdlZjhmZDFiIDEwMDY0NA0K PiAtLS0gYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5jDQo+ICsrKyBiL2xpYi9tZW1wb29sL3J0 ZV9tZW1wb29sLmMNCj4gQEAgLTc1MywxNCArNzUzLDEzIEBAIHN0YXRpYyB2b2lkDQo+ICBtZW1w b29sX2NhY2hlX2luaXQoc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICpjYWNoZSwgdWludDMyX3Qg c2l6ZSkNCj4gIHsNCj4gIAljYWNoZS0+c2l6ZSA9IHNpemU7DQo+IC0JY2FjaGUtPmZsdXNodGhy ZXNoID0gc2l6ZTsgLyogT2Jzb2xldGU7IGZvciBBUEkvQUJJIGNvbXBhdGliaWxpdHkNCj4gcHVy cG9zZXMgb25seSAqLw0KPiAgCWNhY2hlLT5sZW4gPSAwOw0KPiAgfQ0KPiANCj4gIC8qDQo+ICAg KiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBjYWNoZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSByZXRy aWV2ZWQgZnJvbQ0KPiBhbmQNCj4gICAqIHJldHVybmVkIHRvIGFuIHVuZGVybHlpbmcgbWVtcG9v bC4gVGhpcyBzdHJ1Y3R1cmUgaXMgaWRlbnRpY2FsIHRvDQo+IHRoZQ0KPiAtICogbG9jYWxfY2Fj aGVbbGNvcmVfaWRdIHBvaW50ZWQgdG8gYnkgdGhlIG1lbXBvb2wgc3RydWN0dXJlLg0KPiArICog bG9jYWxfY2FjaGVbbGNvcmVfaWRdIGVudHJ5IGluIHRoZSBtZW1wb29sIHN0cnVjdHVyZS4NCj4g ICAqLw0KPiAgUlRFX0VYUE9SVF9TWU1CT0wocnRlX21lbXBvb2xfY2FjaGVfY3JlYXRlKQ0KPiAg c3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICoNCj4gQEAgLTgzOCw5ICs4MzcsMjEgQEAgcnRlX21l bXBvb2xfY3JlYXRlX2VtcHR5KGNvbnN0IGNoYXIgKm5hbWUsDQo+IHVuc2lnbmVkIG4sIHVuc2ln bmVkIGVsdF9zaXplLA0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIAl9DQo+IA0KPiArCS8qDQo+ICsJ ICogQWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6ZWQgbW92ZSB3 aXRoaW4NCj4gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ICsJICogQHJlZiBydGVfbWVtcG9vbF9kb19n ZW5lcmljX3B1dCgpIGltcGxlbWVudGF0aW9uLg0KPiArCSAqLw0KPiArCWlmIChjYWNoZV9zaXpl ICYgMzEpIHsNCj4gKwkJdW5zaWduZWQgaW50IHJvdW5kZWQgPSBSVEVfQUxJR05fTVVMX0NFSUwo Y2FjaGVfc2l6ZSwgMzIpOw0KPiArCQlSVEVfTUVNUE9PTF9MT0coV0FSTklORywgIiVzIGNhY2hl IHNpemUgJXUgbm90IGRpdmlzaWJsZSBieQ0KPiAzMiwgdXNpbmcgJXUgaW5zdGVhZC4iLA0KPiAr CQkJCW5hbWUsIGNhY2hlX3NpemUsIHJvdW5kZWQpOw0KPiArCQljYWNoZV9zaXplID0gcm91bmRl ZDsNCj4gKwl9DQo+ICsNCj4gIAkvKiBhc2tlZCBjYWNoZSB0b28gYmlnICovDQo+ICAJaWYgKGNh Y2hlX3NpemUgPiBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSB8fA0KPiAgCSAgICBjYWNoZV9z aXplID4gbikgew0KPiArCQlSVEVfTUVNUE9PTF9MT0coRVJSLCAiQ2FjaGUgc2l6ZSB0b28gYmln LiIpOw0KPiAgCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ICAJCXJldHVybiBOVUxMOw0KPiAgCX0N Cj4gQEAgLTg4NCw3ICs4OTUsNyBAQCBydGVfbWVtcG9vbF9jcmVhdGVfZW1wdHkoY29uc3QgY2hh ciAqbmFtZSwgdW5zaWduZWQNCj4gbiwgdW5zaWduZWQgZWx0X3NpemUsDQo+ICAJCWdvdG8gZXhp dF91bmxvY2s7DQo+ICAJfQ0KPiANCj4gLQltZW1wb29sX3NpemUgPSBSVEVfTUVNUE9PTF9IRUFE RVJfU0laRShtcCwgY2FjaGVfc2l6ZSk7DQo+ICsJbWVtcG9vbF9zaXplID0gc2l6ZW9mKHN0cnVj dCBydGVfbWVtcG9vbCk7DQo+ICAJbWVtcG9vbF9zaXplICs9IHByaXZhdGVfZGF0YV9zaXplOw0K PiAgCW1lbXBvb2xfc2l6ZSA9IFJURV9BTElHTl9DRUlMKG1lbXBvb2xfc2l6ZSwgUlRFX01FTVBP T0xfQUxJR04pOw0KPiANCj4gQEAgLTkwMCw3ICs5MTEsNyBAQCBydGVfbWVtcG9vbF9jcmVhdGVf ZW1wdHkoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQNCj4gbiwgdW5zaWduZWQgZWx0X3NpemUs DQo+IA0KPiAgCS8qIGluaXQgdGhlIG1lbXBvb2wgc3RydWN0dXJlICovDQo+ICAJbXAgPSBtei0+ YWRkcjsNCj4gLQltZW1zZXQobXAsIDAsIFJURV9NRU1QT09MX0hFQURFUl9TSVpFKG1wLCBjYWNo ZV9zaXplKSk7DQo+ICsJbWVtc2V0KG1wLCAwLCBtZW1wb29sX3NpemUpOw0KPiAgCXJldCA9IHN0 cmxjcHkobXAtPm5hbWUsIG5hbWUsIHNpemVvZihtcC0+bmFtZSkpOw0KPiAgCWlmIChyZXQgPCAw IHx8IHJldCA+PSAoaW50KXNpemVvZihtcC0+bmFtZSkpIHsNCj4gIAkJcnRlX2Vycm5vID0gRU5B TUVUT09MT05HOw0KPiBAQCAtOTM3LDEzICs5NDgsNiBAQCBydGVfbWVtcG9vbF9jcmVhdGVfZW1w dHkoY29uc3QgY2hhciAqbmFtZSwNCj4gdW5zaWduZWQgbiwgdW5zaWduZWQgZWx0X3NpemUsDQo+ ICAJCWdvdG8gZXhpdF91bmxvY2s7DQo+ICAJfQ0KPiANCj4gLQkvKg0KPiAtCSAqIGxvY2FsX2Nh Y2hlIHBvaW50ZXIgaXMgc2V0IGV2ZW4gaWYgY2FjaGVfc2l6ZSBpcyB6ZXJvLg0KPiAtCSAqIFRo ZSBsb2NhbF9jYWNoZSBwb2ludHMgdG8ganVzdCBwYXN0IHRoZSBlbHRfcGFbXSBhcnJheS4NCj4g LQkgKi8NCj4gLQltcC0+bG9jYWxfY2FjaGUgPSAoc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICop DQo+IC0JCVJURV9QVFJfQUREKG1wLCBSVEVfTUVNUE9PTF9IRUFERVJfU0laRShtcCwgMCkpOw0K PiAtDQo+ICAJLyogSW5pdCBhbGwgZGVmYXVsdCBjYWNoZXMuICovDQo+ICAJaWYgKGNhY2hlX3Np emUgIT0gMCkgew0KPiAgCQlmb3IgKGxjb3JlX2lkID0gMDsgbGNvcmVfaWQgPCBSVEVfTUFYX0xD T1JFOyBsY29yZV9pZCsrKQ0KPiBAQCAtMTE5Nyw2ICsxMjAxLDcgQEAgbWVtcG9vbF9vYmpfYXVk aXQoc3RydWN0IHJ0ZV9tZW1wb29sICptcCwNCj4gX19ydGVfdW51c2VkIHZvaWQgKm9wYXF1ZSwN Cj4gIAlSVEVfTUVNUE9PTF9DSEVDS19DT09LSUVTKG1wLCAmb2JqLCAxLCAyKTsNCj4gIH0NCj4g DQo+ICsvKiBjaGVjayBjb29raWVzIGJlZm9yZSBhbmQgYWZ0ZXIgb2JqZWN0cyAqLw0KPiAgc3Rh dGljIHZvaWQNCj4gIG1lbXBvb2xfYXVkaXRfY29va2llcyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1w KQ0KPiAgew0KPiBAQCAtMTIxMywyMyArMTIxOCwyOCBAQCBtZW1wb29sX2F1ZGl0X2Nvb2tpZXMo c3RydWN0IHJ0ZV9tZW1wb29sICptcCkNCj4gICNkZWZpbmUgbWVtcG9vbF9hdWRpdF9jb29raWVz KG1wKSBkbyB7fSB3aGlsZSgwKQ0KPiAgI2VuZGlmDQo+IA0KPiAtLyogY2hlY2sgY29va2llcyBi ZWZvcmUgYW5kIGFmdGVyIG9iamVjdHMgKi8NCj4gKy8qIGNoZWNrIGNhY2hlIHNpemUgY29uc2lz dGVuY3kgKi8NCj4gIHN0YXRpYyB2b2lkDQo+ICBtZW1wb29sX2F1ZGl0X2NhY2hlKGNvbnN0IHN0 cnVjdCBydGVfbWVtcG9vbCAqbXApDQo+ICB7DQo+IC0JLyogY2hlY2sgY2FjaGUgc2l6ZSBjb25z aXN0ZW5jeSAqLw0KPiAgCXVuc2lnbmVkIGxjb3JlX2lkOw0KPiArCWNvbnN0IHVpbnQzMl90IGNh Y2hlX3NpemUgPSBtcC0+Y2FjaGVfc2l6ZTsNCj4gDQo+IC0JaWYgKG1wLT5jYWNoZV9zaXplID09 IDApDQo+IC0JCXJldHVybjsNCj4gKwlpZiAoY2FjaGVfc2l6ZSA+IFJURV9NRU1QT09MX0NBQ0hF X01BWF9TSVpFKSB7DQo+ICsJCVJURV9NRU1QT09MX0xPRyhDUklULCAiYmFkbmVzcyBvbiBjYWNo ZSBzaXplIik7DQo+ICsJCXJ0ZV9wYW5pYygiTUVNUE9PTDogaW52YWxpZCBjYWNoZSBzaXplXG4i KTsNCj4gKwl9DQo+IA0KPiAgCWZvciAobGNvcmVfaWQgPSAwOyBsY29yZV9pZCA8IFJURV9NQVhf TENPUkU7IGxjb3JlX2lkKyspIHsNCj4gIAkJY29uc3Qgc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hl ICpjYWNoZTsNCj4gIAkJY2FjaGUgPSAmbXAtPmxvY2FsX2NhY2hlW2xjb3JlX2lkXTsNCj4gLQkJ aWYgKGNhY2hlLT5sZW4gPiBSVEVfRElNKGNhY2hlLT5vYmpzKSkgew0KPiAtCQkJUlRFX01FTVBP T0xfTE9HKENSSVQsICJiYWRuZXNzIG9uIGNhY2hlWyV1XSIsDQo+IC0JCQkJbGNvcmVfaWQpOw0K PiAtCQkJcnRlX3BhbmljKCJNRU1QT09MOiBpbnZhbGlkIGNhY2hlIGxlblxuIik7DQo+ICsJCWlm IChjYWNoZS0+c2l6ZSAhPSBjYWNoZV9zaXplKSB7DQo+ICsJCQlSVEVfTUVNUE9PTF9MT0coQ1JJ VCwgImJhZG5lc3Mgb24gY2FjaGVbJXVdIHNpemUiLA0KPiBsY29yZV9pZCk7DQo+ICsJCQlydGVf cGFuaWMoIk1FTVBPT0w6IGludmFsaWQgY2FjaGVbJXVdIHNpemVcbiIsDQo+IGxjb3JlX2lkKTsN Cj4gKwkJfQ0KPiArCQlpZiAoY2FjaGUtPmxlbiA+IGNhY2hlX3NpemUpIHsNCj4gKwkJCVJURV9N RU1QT09MX0xPRyhDUklULCAiYmFkbmVzcyBvbiBjYWNoZVsldV0gbGVuIiwNCj4gbGNvcmVfaWQp Ow0KPiArCQkJcnRlX3BhbmljKCJNRU1QT09MOiBpbnZhbGlkIGNhY2hlWyV1XSBsZW5cbiIsDQo+ IGxjb3JlX2lkKTsNCj4gIAkJfQ0KPiAgCX0NCj4gIH0NCj4gQEAgLTEyNDEsOSArMTI1MSw2IEBA IHJ0ZV9tZW1wb29sX2F1ZGl0KHN0cnVjdCBydGVfbWVtcG9vbCAqbXApDQo+ICB7DQo+ICAJbWVt cG9vbF9hdWRpdF9jYWNoZShtcCk7DQo+ICAJbWVtcG9vbF9hdWRpdF9jb29raWVzKG1wKTsNCj4g LQ0KPiAtCS8qIEZvciBjYXNlIHdoZXJlIG1lbXBvb2wgREVCVUcgaXMgbm90IHNldCwgYW5kIGNh Y2hlIHNpemUgaXMgMA0KPiAqLw0KPiAtCVJURV9TRVRfVVNFRChtcCk7DQo+ICB9DQo+IA0KPiAg LyogZHVtcCB0aGUgc3RhdHVzIG9mIHRoZSBtZW1wb29sIG9uIHRoZSBjb25zb2xlICovDQo+IGRp ZmYgLS1naXQgYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oIGIvbGliL21lbXBvb2wvcnRlX21l bXBvb2wuaA0KPiBpbmRleCA1MGQ5NThjN2M2Li40OWU4NDAxMjgwIDEwMDY0NA0KPiAtLS0gYS9s aWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oDQo+ICsrKyBiL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29s LmgNCj4gQEAgLTg5LDE0ICs4OSwxNCBAQCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25lZCBydGVf bWVtcG9vbF9kZWJ1Z19zdGF0cw0KPiB7DQo+ICAgKi8NCj4gIHN0cnVjdCBfX3J0ZV9jYWNoZV9h bGlnbmVkIHJ0ZV9tZW1wb29sX2NhY2hlIHsNCj4gIAl1aW50MzJfdCBzaXplOwkgICAgICAvKio8 IFNpemUgb2YgdGhlIGNhY2hlICovDQo+IC0JdWludDMyX3QgZmx1c2h0aHJlc2g7IC8qKjwgT2Jz b2xldGU7IGZvciBBUEkvQUJJIGNvbXBhdGliaWxpdHkNCj4gcHVycG9zZXMgb25seSAqLw0KPiAg CXVpbnQzMl90IGxlbjsJICAgICAgLyoqPCBDdXJyZW50IGNhY2hlIGNvdW50ICovDQo+ICAjaWZk ZWYgUlRFX0xJQlJURV9NRU1QT09MX1NUQVRTDQo+IC0JdWludDMyX3QgdW51c2VkOw0KPiAgCS8q DQo+ICAJICogQWx0ZXJuYXRpdmUgbG9jYXRpb24gZm9yIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXBk YXRlZCBtZW1wb29sDQo+IHN0YXRpc3RpY3MgKHBlci1sY29yZSksDQo+ICAJICogcHJvdmlkaW5n IGZhc3RlciB1cGRhdGUgYWNjZXNzIHdoZW4gdXNpbmcgYSBtZW1wb29sIGNhY2hlLg0KPiArCSAq IE5vdGU6IDE2LWJ5dGUgYWxpZ25lZCBmb3Igb3B0aW1hbCBTSU1EIGFjY2Vzcywgd2hlbiB1cGRh dGluZw0KPiBwYWlycyBvZiBjb3VudGVycy4NCj4gIAkgKi8NCj4gKwlhbGlnbmFzKDE2KQ0KPiAg CXN0cnVjdCB7DQo+ICAJCXVpbnQ2NF90IHB1dF9idWxrOyAgICAgICAgICAvKio8IE51bWJlciBv ZiBwdXRzLiAqLw0KPiAgCQl1aW50NjRfdCBwdXRfb2JqczsgICAgICAgICAgLyoqPCBOdW1iZXIg b2Ygb2JqZWN0cw0KPiBzdWNjZXNzZnVsbHkgcHV0LiAqLw0KPiBAQCAtMTA0LDE1ICsxMDQsOSBA QCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25lZCBydGVfbWVtcG9vbF9jYWNoZSB7DQo+ICAJCXVp bnQ2NF90IGdldF9zdWNjZXNzX29ianM7ICAvKio8IE9iamVjdHMgc3VjY2Vzc2Z1bGx5DQo+IGFs bG9jYXRlZC4gKi8NCj4gIAl9IHN0YXRzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3Rh dGlzdGljcyAqLw0KPiAgI2VuZGlmDQo+IC0JLyoqDQo+IC0JICogQ2FjaGUgb2JqZWN0cw0KPiAt CSAqDQo+IC0JICogTm90ZToNCj4gLQkgKiBDYWNoZSBpcyBhbGxvY2F0ZWQgYXQgZG91YmxlIHNp emUgZm9yIEFQSS9BQkkgY29tcGF0aWJpbGl0eQ0KPiBwdXJwb3NlcyBvbmx5Lg0KPiAtCSAqIFdo ZW4gcmVkdWNpbmcgaXRzIHNpemUgYXQgYW4gQVBJL0FCSSBicmVha2luZyByZWxlYXNlLA0KPiAt CSAqIHJlbWVtYmVyIHRvIGFkZCBhIGNhY2hlIGd1YXJkIGFmdGVyIGl0Lg0KPiAtCSAqLw0KPiAt CWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgdm9pZA0KPiAqb2Jqc1tSVEVfTUVNUE9PTF9D QUNIRV9NQVhfU0laRSAqIDJdOw0KPiArCS8qKiBDYWNoZSBvYmplY3RzICovDQo+ICsJYWxpZ25h cyhSVEVfQ0FDSEVfTElORV9TSVpFKSB2b2lkDQo+ICpvYmpzW1JURV9NRU1QT09MX0NBQ0hFX01B WF9TSVpFXTsNCj4gKwlSVEVfQ0FDSEVfR1VBUkQ7DQo+ICB9Ow0KPiANCj4gIC8qKg0KPiBAQCAt MjQwLDggKzIzNCw3IEBAIHN0cnVjdCBfX3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9tZW1wb29sIHsN Cj4gIAl1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAvKio8IEZsYWdzIG9mIHRoZSBt ZW1wb29sLiAqLw0KPiAgCWludCBzb2NrZXRfaWQ7ICAgICAgICAgICAgICAgICAgIC8qKjwgU29j a2V0IGlkIHBhc3NlZCBhdCBjcmVhdGUuDQo+ICovDQo+ICAJdWludDMyX3Qgc2l6ZTsgICAgICAg ICAgICAgICAgICAgLyoqPCBNYXggc2l6ZSBvZiB0aGUgbWVtcG9vbC4gKi8NCj4gLQl1aW50MzJf dCBjYWNoZV9zaXplOw0KPiAtCS8qKjwgU2l6ZSBvZiBwZXItbGNvcmUgZGVmYXVsdCBsb2NhbCBj YWNoZS4gKi8NCj4gKwl1aW50MzJfdCBjYWNoZV9zaXplOyAgICAgICAgICAgICAvKio8IFNpemUg b2YgcGVyLWxjb3JlIGRlZmF1bHQNCj4gbG9jYWwgY2FjaGUuICovDQo+IA0KPiAgCXVpbnQzMl90 IGVsdF9zaXplOyAgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiBhbiBlbGVtZW50LiAqLw0KPiAg CXVpbnQzMl90IGhlYWRlcl9zaXplOyAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiBoZWFkZXIgKGJl Zm9yZQ0KPiBlbHQpLiAqLw0KPiBAQCAtMjU3LDEzICsyNTAsMTMgQEAgc3RydWN0IF9fcnRlX2Nh Y2hlX2FsaWduZWQgcnRlX21lbXBvb2wgew0KPiAgCSAqLw0KPiAgCWludDMyX3Qgb3BzX2luZGV4 Ow0KPiANCj4gLQlzdHJ1Y3QgcnRlX21lbXBvb2xfY2FjaGUgKmxvY2FsX2NhY2hlOyAvKio8IFBl ci1sY29yZSBsb2NhbCBjYWNoZQ0KPiAqLw0KPiAtDQo+ICAJdWludDMyX3QgcG9wdWxhdGVkX3Np emU7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgcG9wdWxhdGVkDQo+IG9iamVjdHMuICovDQo+ICAJ c3RydWN0IHJ0ZV9tZW1wb29sX29iamhkcl9saXN0IGVsdF9saXN0OyAvKio8IExpc3Qgb2Ygb2Jq ZWN0cyBpbg0KPiBwb29sICovDQo+ICAJdWludDMyX3QgbmJfbWVtX2NodW5rczsgICAgICAgICAg LyoqPCBOdW1iZXIgb2YgbWVtb3J5IGNodW5rcyAqLw0KPiAgCXN0cnVjdCBydGVfbWVtcG9vbF9t ZW1oZHJfbGlzdCBtZW1fbGlzdDsgLyoqPCBMaXN0IG9mIG1lbW9yeQ0KPiBjaHVua3MgKi8NCj4g DQo+ICsJc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlIGxvY2FsX2NhY2hlW1JURV9NQVhfTENPUkVd OyAvKio8IFBlci0NCj4gbGNvcmUgbG9jYWwgY2FjaGUgKi8NCj4gKw0KPiAgI2lmZGVmIFJURV9M SUJSVEVfTUVNUE9PTF9TVEFUUw0KPiAgCS8qKiBQZXItbGNvcmUgc3RhdGlzdGljcy4NCj4gIAkg Kg0KPiBAQCAtMjcxLDYgKzI2NCw4IEBAIHN0cnVjdCBfX3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9t ZW1wb29sIHsNCj4gIAkgKi8NCj4gIAlzdHJ1Y3QgcnRlX21lbXBvb2xfZGVidWdfc3RhdHMgc3Rh dHNbUlRFX01BWF9MQ09SRSArIDFdOw0KPiAgI2VuZGlmDQo+ICsNCj4gKwkvKiBQcml2YXRlIGRh dGEgYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1lbXBvb2wNCj4gc3RydWN0dXJl LiAqLw0KPiAgfTsNCj4gDQo+ICAvKiogU3ByZWFkaW5nIGFtb25nIG1lbW9yeSBjaGFubmVscyBu b3QgcmVxdWlyZWQuICovDQo+IEBAIC0zNjIsMTggKzM1Nyw2IEBAIHN0cnVjdCBfX3J0ZV9jYWNo ZV9hbGlnbmVkIHJ0ZV9tZW1wb29sIHsNCj4gICNkZWZpbmUgUlRFX01FTVBPT0xfQ0FDSEVfU1RB VF9BREQoY2FjaGUsIG5hbWUsIG4pIGRvIHt9IHdoaWxlICgwKQ0KPiAgI2VuZGlmDQo+IA0KPiAt LyoqDQo+IC0gKiBAaW50ZXJuYWwgQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBtZW1wb29sIGhl YWRlci4NCj4gLSAqDQo+IC0gKiBAcGFyYW0gbXANCj4gLSAqICAgUG9pbnRlciB0byB0aGUgbWVt b3J5IHBvb2wuDQo+IC0gKiBAcGFyYW0gY3MNCj4gLSAqICAgU2l6ZSBvZiB0aGUgcGVyLWxjb3Jl IGNhY2hlLg0KPiAtICovDQo+IC0jZGVmaW5lIFJURV9NRU1QT09MX0hFQURFUl9TSVpFKG1wLCBj cykgXA0KPiAtCShzaXplb2YoKihtcCkpICsgKCgoY3MpID09IDApID8gMCA6IFwNCj4gLQkoc2l6 ZW9mKHN0cnVjdCBydGVfbWVtcG9vbF9jYWNoZSkgKiBSVEVfTUFYX0xDT1JFKSkpDQo+IC0NCj4g IC8qIHJldHVybiB0aGUgaGVhZGVyIG9mIGEgbWVtcG9vbCBvYmplY3QgKGludGVybmFsKSAqLw0K PiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRlX21lbXBvb2xfb2JqaGRyICoNCj4gIHJ0ZV9tZW1w b29sX2dldF9oZWFkZXIodm9pZCAqb2JqKQ0KPiBAQCAtNzE4LDcgKzcwMSw3IEBAIHN0cnVjdCBf X3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9tZW1wb29sX29wcyB7DQo+ICAJcnRlX21lbXBvb2xfZGVx dWV1ZV9jb250aWdfYmxvY2tzX3QgZGVxdWV1ZV9jb250aWdfYmxvY2tzOw0KPiAgfTsNCj4gDQo+ IC0jZGVmaW5lIFJURV9NRU1QT09MX01BWF9PUFNfSURYIDE2ICAvKio8IE1heCByZWdpc3RlcmVk IG9wcyBzdHJ1Y3RzICovDQo+ICsjZGVmaW5lIFJURV9NRU1QT09MX01BWF9PUFNfSURYIDMyICAv Kio8IE1heCByZWdpc3RlcmVkIG9wcyBzdHJ1Y3RzICovDQo+IA0KPiAgLyoqDQo+ICAgKiBTdHJ1 Y3R1cmUgc3RvcmluZyB0aGUgdGFibGUgb2YgcmVnaXN0ZXJlZCBvcHMgc3RydWN0cywgZWFjaCBv Zg0KPiB3aGljaCBjb250YWluDQo+IEBAIC0xMDQ5LDcgKzEwMzIsNyBAQCBydGVfbWVtcG9vbF9m cmVlKHN0cnVjdCBydGVfbWVtcG9vbCAqbXApOw0KPiAgICogICBJZiBjYWNoZV9zaXplIGlzIG5v bi16ZXJvLCB0aGUgcnRlX21lbXBvb2wgbGlicmFyeSB3aWxsIHRyeSB0bw0KPiAgICogICBsaW1p dCB0aGUgYWNjZXNzZXMgdG8gdGhlIGNvbW1vbiBsb2NrbGVzcyBwb29sLCBieSBtYWludGFpbmlu ZyBhDQo+ICAgKiAgIHBlci1sY29yZSBvYmplY3QgY2FjaGUuIFRoaXMgYXJndW1lbnQgbXVzdCBi ZSBsb3dlciBvciBlcXVhbCB0bw0KPiAtICogICBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSBh bmQgbi4NCj4gKyAqICAgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUgYW5kIG4sIGFuZCBpdCBt dXN0IGJlIGRpdmlzaWJsZSBieSAzMi4NCj4gICAqICAgVGhlIGFjY2VzcyB0byB0aGUgcGVyLWxj b3JlIHRhYmxlIGlzIG9mIGNvdXJzZQ0KPiAgICogICBmYXN0ZXIgdGhhbiB0aGUgbXVsdGktcHJv ZHVjZXIvY29uc3VtZXIgcG9vbC4gVGhlIGNhY2hlIGNhbiBiZQ0KPiAgICogICBkaXNhYmxlZCBp ZiB0aGUgY2FjaGVfc2l6ZSBhcmd1bWVudCBpcyBzZXQgdG8gMDsgaXQgY2FuIGJlIHVzZWZ1bA0K PiB0bw0KPiBAQCAtMTM2OCwxNSArMTM1MSwxNiBAQCBydGVfbWVtcG9vbF9jYWNoZV9mcmVlKHN0 cnVjdCBydGVfbWVtcG9vbF9jYWNoZQ0KPiAqY2FjaGUpOw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5 c19pbmxpbmUgc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICoNCj4gIHJ0ZV9tZW1wb29sX2RlZmF1 bHRfY2FjaGUoc3RydWN0IHJ0ZV9tZW1wb29sICptcCwgdW5zaWduZWQgbGNvcmVfaWQpDQo+ICB7 DQo+IC0JaWYgKHVubGlrZWx5KG1wLT5jYWNoZV9zaXplID09IDApKQ0KPiArCWlmICh1bmxpa2Vs eShsY29yZV9pZCA9PSBMQ09SRV9JRF9BTlkpKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gDQo+IC0J aWYgKHVubGlrZWx5KGxjb3JlX2lkID09IExDT1JFX0lEX0FOWSkpDQo+ICsJc3RydWN0IHJ0ZV9t ZW1wb29sX2NhY2hlICpjYWNoZSA9ICZtcC0+bG9jYWxfY2FjaGVbbGNvcmVfaWRdOw0KPiArDQo+ ICsJaWYgKHVubGlrZWx5KGNhY2hlLT5zaXplID09IDApKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4g DQo+IC0JcnRlX21lbXBvb2xfdHJhY2VfZGVmYXVsdF9jYWNoZShtcCwgbGNvcmVfaWQsDQo+IC0J CSZtcC0+bG9jYWxfY2FjaGVbbGNvcmVfaWRdKTsNCj4gLQlyZXR1cm4gJm1wLT5sb2NhbF9jYWNo ZVtsY29yZV9pZF07DQo+ICsJcnRlX21lbXBvb2xfdHJhY2VfZGVmYXVsdF9jYWNoZShtcCwgbGNv cmVfaWQsIGNhY2hlKTsNCj4gKwlyZXR1cm4gY2FjaGU7DQo+ICB9DQo+IA0KPiAgLyoqDQo+IEBA IC0xNDQ1LDkgKzE0MjksMjIgQEAgcnRlX21lbXBvb2xfZG9fZ2VuZXJpY19wdXQoc3RydWN0IHJ0 ZV9tZW1wb29sDQo+ICptcCwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ICAJCSAqIGFyZSBt b3JlIGhvdCwgZnJvbSB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgY2FjaGUuDQo+ICAJCSAqLw0KPiAg CQlfX3J0ZV9hc3N1bWUoY2FjaGUtPmxlbiA+IGNhY2hlLT5zaXplIC8gMik7DQo+IC0JCXJ0ZV9t ZW1wb29sX29wc19lbnF1ZXVlX2J1bGsobXAsICZjYWNoZS0+b2Jqc1swXSwgY2FjaGUtDQo+ID5z aXplIC8gMik7DQo+IC0JCXJ0ZV9tZW1jcHkoJmNhY2hlLT5vYmpzWzBdLCAmY2FjaGUtPm9ianNb Y2FjaGUtPnNpemUgLyAyXSwNCj4gLQkJCQlzaXplb2Yodm9pZCAqKSAqIChjYWNoZS0+bGVuIC0g Y2FjaGUtPnNpemUgLw0KPiAyKSk7DQo+ICsJCXJ0ZV9tZW1wb29sX29wc19lbnF1ZXVlX2J1bGso bXAsIGNhY2hlLT5vYmpzLCBjYWNoZS0+c2l6ZSAvDQo+IDIpOw0KPiArCQkvKg0KPiArCQkgKiBG b3IgaW1wcm92ZWQgcnRlX21lbWNweSgpIHBlcmZvcm1hbmNlLCBtb3ZlIGRvd24gb2JqZWN0cw0K PiArCQkgKiBmcm9tIENQVSBjYWNoZSBsaW5lIGFsaWduZWQgYWRkcmVzcyBpbiBjaHVua3Mgb2Yg MzINCj4gYnl0ZXMuDQo+ICsJCSAqIE5vdGU6IEZvciBjYWNoZS0+b2Jqc1tjYWNoZS0+c2l6ZSAv IDJdIHRvIGJlIGNhY2hlIGxpbmUNCj4gYWxpZ25lZCwgY2FjaGUtPnNpemUNCj4gKwkJICogbXVz dCBiZSBkaXZpc2libGUgYnkgMzIgb24gMzItYml0IGFyY2hpdGVjdHVyZSB3aXRoIDY0LQ0KPiBi eXRlIGNhY2hlIGxpbmUsDQo+ICsJCSAqIGRpdmlzaWJsZSBieSAzMiBvbiA2NC1iaXQgYXJjaGl0 ZWN0dXJlIHdpdGggMTI4LWJ5dGUNCj4gY2FjaGUgbGluZSwgYW5kDQo+ICsJCSAqIGJlIGRpdmlz aWJsZSBieSAxNiBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlIHdpdGggNjQtYnl0ZQ0KPiBjYWNoZSBs aW5lLg0KPiArCQkgKiBGb3IgQVBJIGNvbnNpc3RlbmN5LCByZXF1aXJlIG1lbXBvb2wgY2FjaGUg c2l6ZSBpcw0KPiBkaXZpc2libGUgYnkgMzIuDQo+ICsJCSAqLw0KPiArCQljb25zdCBzaXplX3Qg bW92ZSA9IFJURV9BTElHTl9NVUxfQ0VJTCgNCj4gKwkJCQlzaXplb2Yodm9pZCAqKSAqIChjYWNo ZS0+bGVuIC0gY2FjaGUtPnNpemUgLw0KPiAyKSwgMzIpOw0KPiArCQlfX3J0ZV9hc3N1bWUobW92 ZSA+PSAzMik7DQo+ICsJCV9fcnRlX2Fzc3VtZSgobW92ZSAmIDMxKSA9PSAwKTsNCj4gKwkJcnRl X21lbWNweShjYWNoZS0+b2JqcywgX19ydGVfYXNzdW1lX2NhY2hlX2FsaWduZWQoJmNhY2hlLQ0K PiA+b2Jqc1tjYWNoZS0+c2l6ZSAvIDJdKSwNCj4gKwkJCQltb3ZlKTsNCj4gIAkJY2FjaGVfb2Jq cyA9ICZjYWNoZS0+b2Jqc1tjYWNoZS0+bGVuIC0gY2FjaGUtPnNpemUgLyAyXTsNCj4gIAkJY2Fj aGUtPmxlbiA9IGNhY2hlLT5sZW4gLSBjYWNoZS0+c2l6ZSAvIDIgKyBuOw0KPiAgCX0gZWxzZSB7 DQo+IEBAIC0xODkyLDggKzE4ODksNyBAQCB2b2lkIHJ0ZV9tZW1wb29sX2F1ZGl0KHN0cnVjdCBy dGVfbWVtcG9vbCAqbXApOw0KPiAgICovDQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgKnJ0ZV9tZW1w b29sX2dldF9wcml2KHN0cnVjdCBydGVfbWVtcG9vbCAqbXApDQo+ICB7DQo+IC0JcmV0dXJuIChj aGFyICopbXAgKw0KPiAtCQlSVEVfTUVNUE9PTF9IRUFERVJfU0laRShtcCwgbXAtPmNhY2hlX3Np emUpOw0KPiArCXJldHVybiAoY2hhciAqKW1wICsgc2l6ZW9mKHN0cnVjdCBydGVfbWVtcG9vbCk7 DQo+ICB9DQo+IA0KPiAgLyoqDQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svbWVzb24uYnVpbGQg Yi9saWIvc3RhY2svbWVzb24uYnVpbGQNCj4gaW5kZXggMTgxNzdhNzQyZi4uNTBlNjg4NTIyZSAx MDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9zdGFjay9t ZXNvbi5idWlsZA0KPiBAQCAtMSw3ICsxLDcgQEANCj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0zLUNsYXVzZQ0KPiAgIyBDb3B5cmlnaHQoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlv bg0KPiANCj4gLXNvdXJjZXMgPSBmaWxlcygncnRlX3N0YWNrLmMnLCAncnRlX3N0YWNrX3N0ZC5j JywgJ3J0ZV9zdGFja19sZi5jJykNCj4gK3NvdXJjZXMgPSBmaWxlcygncnRlX3N0YWNrLmMnLCAn cnRlX3N0YWNrX3N0ZC5jJywgJ3J0ZV9zdGFja19sZi5jJywNCj4gJ3J0ZV9zdGFja19waWxlLmMn KQ0KPiAgaGVhZGVycyA9IGZpbGVzKCdydGVfc3RhY2suaCcpDQo+ICAjIHN1YmhlYWRlcnMsIG5v dCBmb3IgZGlyZWN0IGluY2x1c2lvbiBieSBhcHBzDQo+ICBpbmRpcmVjdF9oZWFkZXJzICs9IGZp bGVzKA0KPiBAQCAtMTAsNCArMTAsNSBAQCBpbmRpcmVjdF9oZWFkZXJzICs9IGZpbGVzKA0KPiAg ICAgICAgICAncnRlX3N0YWNrX2xmX2dlbmVyaWMuaCcsDQo+ICAgICAgICAgICdydGVfc3RhY2tf bGZfYzExLmgnLA0KPiAgICAgICAgICAncnRlX3N0YWNrX2xmX3N0dWJzLmgnLA0KPiArICAgICAg ICAncnRlX3N0YWNrX3BpbGUuaCcsDQo+ICApDQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svcnRl X3N0YWNrLmMgYi9saWIvc3RhY2svcnRlX3N0YWNrLmMNCj4gaW5kZXggNGM3OGZlNGI0Yi4uYTRi YmY4YTRkNyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFjay5jDQo+ICsrKyBiL2xp Yi9zdGFjay9ydGVfc3RhY2suYw0KPiBAQCAtMSw1ICsxLDYgQEANCj4gIC8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gICAqIENvcHlyaWdodChjKSAyMDE5IEludGVs IENvcnBvcmF0aW9uDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNiBTbWFydFNoYXJlIFN5c3RlbXMN Cj4gICAqLw0KPiANCj4gICNpbmNsdWRlIDxzdGRhbGlnbi5oPg0KPiBAQCAtMzIsNiArMzMsOCBA QCBydGVfc3RhY2tfaW5pdChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB1bnNpZ25lZCBpbnQNCj4gY291 bnQsIHVpbnQzMl90IGZsYWdzKQ0KPiANCj4gIAlpZiAoZmxhZ3MgJiBSVEVfU1RBQ0tfRl9MRikN Cj4gIAkJcnRlX3N0YWNrX2xmX2luaXQocywgY291bnQpOw0KPiArCWVsc2UgaWYgKGZsYWdzICYg UlRFX1NUQUNLX0ZfUElMRSkNCj4gKwkJcnRlX3N0YWNrX3BpbGVfaW5pdChzLCBjb3VudCk7DQo+ ICAJZWxzZQ0KPiAgCQlydGVfc3RhY2tfc3RkX2luaXQocyk7DQo+ICB9DQo+IEBAIC00MSw2ICs0 NCw4IEBAIHJ0ZV9zdGFja19nZXRfbWVtc2l6ZSh1bnNpZ25lZCBpbnQgY291bnQsIHVpbnQzMl90 DQo+IGZsYWdzKQ0KPiAgew0KPiAgCWlmIChmbGFncyAmIFJURV9TVEFDS19GX0xGKQ0KPiAgCQly ZXR1cm4gcnRlX3N0YWNrX2xmX2dldF9tZW1zaXplKGNvdW50KTsNCj4gKwllbHNlIGlmIChmbGFn cyAmIFJURV9TVEFDS19GX1BJTEUpDQo+ICsJCXJldHVybiBydGVfc3RhY2tfcGlsZV9nZXRfbWVt c2l6ZShjb3VudCk7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gcnRlX3N0YWNrX3N0ZF9nZXRfbWVt c2l6ZShjb3VudCk7DQo+ICB9DQo+IEBAIC01OCw3ICs2MywxMSBAQCBydGVfc3RhY2tfY3JlYXRl KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludA0KPiBjb3VudCwgaW50IHNvY2tldF9pZCwN Cj4gIAl1bnNpZ25lZCBpbnQgc3o7DQo+ICAJaW50IHJldDsNCj4gDQo+IC0JaWYgKGZsYWdzICYg fihSVEVfU1RBQ0tfRl9MRikpIHsNCj4gKwlpZiAoZmxhZ3MgJiB+KFJURV9TVEFDS19GX0xGIHwg UlRFX1NUQUNLX0ZfUElMRSkpIHsNCj4gKwkJU1RBQ0tfTE9HX0VSUigiVW5zdXBwb3J0ZWQgc3Rh Y2sgZmxhZ3MgJSN4IiwgZmxhZ3MpOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsJaWYg KChmbGFncyAmIFJURV9TVEFDS19GX0xGKSAmJiAoZmxhZ3MgJiBSVEVfU1RBQ0tfRl9QSUxFKSkg ew0KPiAgCQlTVEFDS19MT0dfRVJSKCJVbnN1cHBvcnRlZCBzdGFjayBmbGFncyAlI3giLCBmbGFn cyk7DQo+ICAJCXJldHVybiBOVUxMOw0KPiAgCX0NCj4gQEAgLTczLDYgKzgyLDEzIEBAIHJ0ZV9z dGFja19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50DQo+IGNvdW50LCBpbnQg c29ja2V0X2lkLA0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIAl9DQo+ICAjZW5kaWYNCj4gKyNpZiAh ZGVmaW5lZChSVEVfU1RBQ0tfUElMRV9TVVBQT1JURUQpDQo+ICsJaWYgKGZsYWdzICYgUlRFX1NU QUNLX0ZfUElMRSkgew0KPiArCQlTVEFDS19MT0dfRVJSKCJQaWxlIGlzIG5vdCBzdXBwb3J0ZWQg b24geW91ciBwbGF0Zm9ybSIpOw0KPiArCQlydGVfZXJybm8gPSBFTk9UU1VQOw0KPiArCQlyZXR1 cm4gTlVMTDsNCj4gKwl9DQo+ICsjZW5kaWYNCj4gDQo+ICAJc3ogPSBydGVfc3RhY2tfZ2V0X21l bXNpemUoY291bnQsIGZsYWdzKTsNCj4gDQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svcnRlX3N0 YWNrLmggYi9saWIvc3RhY2svcnRlX3N0YWNrLmgNCj4gaW5kZXggZmQxN2FjNzkxZC4uYmY2NGRi YzdiYyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFjay5oDQo+ICsrKyBiL2xpYi9z dGFjay9ydGVfc3RhY2suaA0KPiBAQCAtMSw1ICsxLDYgQEANCj4gIC8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gICAqIENvcHlyaWdodChjKSAyMDE5IEludGVsIENv cnBvcmF0aW9uDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNiBTbWFydFNoYXJlIFN5c3RlbXMNCj4g ICAqLw0KPiANCj4gIC8qKg0KPiBAQCAtMjgsMTEgKzI5LDQ1IEBADQo+ICAjZGVmaW5lIFJURV9T VEFDS19OQU1FU0laRSAoUlRFX01FTVpPTkVfTkFNRVNJWkUgLSBcDQo+ICAJCQkgICBzaXplb2Yo UlRFX1NUQUNLX01aX1BSRUZJWCkgKyAxKQ0KPiANCj4gK3N0YXRpY19hc3NlcnQoKChzaXplb2Yo dm9pZCAqKSAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSkgJg0KPiBSVEVfQ0FDSEVfTElORV9N QVNLKSA9PSAwLA0KPiArCQkiUGlsZSBidWxrIHNpemUgbXVzdCBiZSBkaXZpc2libGUgYnkgQ1BV IGNhY2hlIGxpbmUgc2l6ZSIpOw0KPiArDQo+ICsvKiBOb3RlOiBBbHNvIHVzZWQgYXMgc29sbyAo c2luZ2xlLW9iamVjdCkgcGlsZSBlbGVtZW50LiAqLw0KPiAgc3RydWN0IHJ0ZV9zdGFja19sZl9l bGVtIHsNCj4gIAl2b2lkICpkYXRhOwkJCS8qKjwgRGF0YSBwb2ludGVyICovDQo+ICAJc3RydWN0 IHJ0ZV9zdGFja19sZl9lbGVtICpuZXh0OwkvKio8IE5leHQgcG9pbnRlciAqLw0KPiAgfTsNCj4g DQo+ICsvKg0KPiArICogQnVsayAobXVsdGktb2JqZWN0KSBwaWxlIGVsZW1lbnQuDQo+ICsgKiBJ bmhlcml0ZWQgZnJvbSB0aGUgcnRlX3N0YWNrX2xmX2VsZW0gKHNpbmdsZS1vYmplY3QpIGNsYXNz LA0KPiArICogYW5kIGV4dGVuZGVkIHdpdGggYW4gYXJyYXkgZm9yIGhvbGRpbmcgYSBidWxrIG9m IG9iamVjdCBwb2ludGVycy4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtf ZWxlbSB7DQo+ICsJLyogVGhlIGZpcnN0IHBhcnQgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhl IHJ0ZV9zdGFja19sZl9lbGVtDQo+IHBhcmVudCBjbGFzcy4gKi8NCj4gKwl2b2lkICpkYXRhOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGF0YSBwb2ludGVyDQo+ICh1bnVz ZWQpICovDQo+ICsJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqbmV4dDsgICAgICAv Kio8IE5leHQgcG9pbnRlciAqLw0KPiArCS8qIFRoZSBzZWNvbmQgcGFydCBkaWZmZXJzLiAqLw0K PiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkNCj4gKwl2b2lkICpvYmpzW1JURV9TVEFD S19QSUxFX0JVTEtfU0laRV07ICAgICAgIC8qKjwgQnVsayAobXVsdGktDQo+IG9iamVjdCkgcG9p bnRlcnMgKi8NCj4gK307DQo+ICsNCj4gK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBydGVf c3RhY2tfbGZfZWxlbSkgPT0NCj4gKwkJc2l6ZW9mKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAq KSArIHNpemVvZih2b2lkKiksDQo+ICsJCSJQYXJlbnQgdHlwZSBoYXMgY2hhbmdlZCIpOw0KPiAr c3RhdGljX2Fzc2VydChSVEVfU0laRU9GX0ZJRUxEKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwg bmV4dCkgPT0NCj4gKwkJUlRFX1NJWkVPRl9GSUVMRChzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVs a19lbGVtLCBuZXh0KSwNCj4gKwkJIkluaGVyaXRlZCB0eXBlIG1pc21hdGNoIik7DQo+ICtzdGF0 aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgbmV4dCkgPT0NCj4g KwkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSwgbmV4dCksDQo+ICsJ CSJJbmhlcml0ZWQgdHlwZSBtaXNtYXRjaCIpOw0KPiArc3RhdGljX2Fzc2VydChSVEVfU0laRU9G X0ZJRUxEKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgZGF0YSkgPT0NCj4gKwkJUlRFX1NJWkVP Rl9GSUVMRChzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtLCBkYXRhKSwNCj4gKwkJIklu aGVyaXRlZCB0eXBlIG1pc21hdGNoIik7DQo+ICtzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVj dCBydGVfc3RhY2tfbGZfZWxlbSwgZGF0YSkgPT0NCj4gKwkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9z dGFja19waWxlX2J1bGtfZWxlbSwgZGF0YSksDQo+ICsJCSJJbmhlcml0ZWQgdHlwZSBtaXNtYXRj aCIpOw0KPiArDQo+ICBzdHJ1Y3QgX19ydGVfYWxpZ25lZCgxNikgcnRlX3N0YWNrX2xmX2hlYWQg ew0KPiAgCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqdG9wOyAvKio8IFN0YWNrIHRvcCAqLw0K PiAgCXVpbnQ2NF90IGNudDsgLyoqPCBNb2RpZmljYXRpb24gY291bnRlciBmb3IgYXZvaWRpbmcg QUJBIHByb2JsZW0NCj4gKi8NCj4gQEAgLTUxLDEyICs4NiwzNSBAQCBzdHJ1Y3QgcnRlX3N0YWNr X2xmX2xpc3Qgew0KPiAgc3RydWN0IHJ0ZV9zdGFja19sZiB7DQo+ICAJLyoqIExJRk8gbGlzdCBv ZiBlbGVtZW50cyAqLw0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0IHJ0 ZV9zdGFja19sZl9saXN0IHVzZWQ7DQo+ICsJUlRFX0NBQ0hFX0dVQVJEOw0KPiAgCS8qKiBMSUZP IGxpc3Qgb2YgZnJlZSBlbGVtZW50cyAqLw0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0la RSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IGZyZWU7DQo+ICsJUlRFX0NBQ0hFX0dVQVJEOw0K PiAgCS8qKiBMSUZPIGVsZW1lbnRzICovDQo+ICAJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpF KSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gZWxlbXNbXTsNCj4gIH07DQo+IA0KPiArLyogUGls ZSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aHJlZSBsb2NrLWZyZWUgTElGTy1saWtlIGxpc3RzOg0K PiArICogIC0gQSBsaXN0IG9mIGVsZW1lbnRzLCBlYWNoIGVsZW1lbnQgaG9sZGluZyBhIGJ1bGsg b2YgcG9pbnRlcnMgdG8NCj4gb2JqZWN0cy4NCj4gKyAqICAtIEEgbGlzdCBvZiBlbGVtZW50cywg ZWFjaCBlbGVtZW50IGhvbGRpbmcgb25lIHBvaW50ZXIgdG8gYW4NCj4gb2JqZWN0Lg0KPiArICog IC0gQSBsaXN0IG9mIGZyZWUgbGlua2VkLWxpc3QgZWxlbWVudHMuDQo+ICsgKi8NCj4gK3N0cnVj dCBydGVfc3RhY2tfcGlsZSB7DQo+ICsJLyoqIExJRk8gbGlzdCBvZiBidWxrIChtdWx0aS1vYmpl Y3QpIGVsZW1lbnRzICovDQo+ICsJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3Qg cnRlX3N0YWNrX2xmX2xpc3QgYnVsazsNCj4gKwlSVEVfQ0FDSEVfR1VBUkQ7DQo+ICsJLyoqIExJ Rk8gbGlzdCBvZiBzb2xvIChzaW5nbGUtb2JqZWN0KSBlbGVtZW50cyAqLw0KPiArCWFsaWduYXMo UlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IHNvbG87DQo+ICsJ UlRFX0NBQ0hFX0dVQVJEOw0KPiArCS8qKiBMSUZPIGxpc3Qgb2YgZnJlZSBidWxrIGVsZW1lbnRz ICovDQo+ICsJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3QgcnRlX3N0YWNrX2xm X2xpc3QgZnJlZV9idWxrOw0KPiArCVJURV9DQUNIRV9HVUFSRDsNCj4gKwkvKiogTElGTyBsaXN0 IG9mIGZyZWUgc29sbyBlbGVtZW50cyAqLw0KPiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0la RSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IGZyZWVfc29sbzsNCj4gKwlSVEVfQ0FDSEVfR1VB UkQ7DQo+ICsJLyoqIExJRk8gZWxlbWVudHMgZm9sbG93LCBmaXJzdCBidWxrLCB0aGVuIHNvbG8g Ki8NCj4gK307DQo+ICsNCj4gIC8qIFN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBMSUZPLCBpdHMg Y3VycmVudCBsZW5ndGgsIGFuZCBhIGxvY2sgZm9yDQo+IG11dHVhbA0KPiAgICogZXhjbHVzaW9u Lg0KPiAgICovDQo+IEBAIC03OCw2ICsxMzYsNyBAQCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25l ZCBydGVfc3RhY2sgew0KPiAgCXVpbnQzMl90IGZsYWdzOyAvKio8IEZsYWdzIHN1cHBsaWVkIGF0 IGNyZWF0aW9uLiAqLw0KPiAgCXVuaW9uIHsNCj4gIAkJc3RydWN0IHJ0ZV9zdGFja19sZiBzdGFj a19sZjsgLyoqPCBMb2NrLWZyZWUgTElGTw0KPiBzdHJ1Y3R1cmUuICovDQo+ICsJCXN0cnVjdCBy dGVfc3RhY2tfcGlsZSBzdGFja19waWxlOyAvKio8IExvY2stZnJlZSBwaWxlDQo+IChMSUZPLWxp a2UpIHN0cnVjdHVyZS4gKi8NCj4gIAkJc3RydWN0IHJ0ZV9zdGFja19zdGQgc3RhY2tfc3RkOwkv Kio8IExJRk8gc3RydWN0dXJlLiAqLw0KPiAgCX07DQo+ICB9Ow0KPiBAQCAtODgsOCArMTQ3LDE2 IEBAIHN0cnVjdCBfX3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9zdGFjayB7DQo+ICAgKi8NCj4gICNk ZWZpbmUgUlRFX1NUQUNLX0ZfTEYgMHgwMDAxDQo+IA0KPiArLyoqDQo+ICsgKiBUaGUgc3RhY2st bGlrZSBwaWxlIHVzZXMgbG9jay1mcmVlIHB1c2ggYW5kIHBvcCBmdW5jdGlvbnMuDQo+ICsgKiBJ dCBpcyBvcHRpbWl6ZWQgZm9yIGJ1bGtzIG9mIG9iamVjdHMsIGFuZCBpcyBub3Qgc3RyaWN0bHkg TElGTy4NCj4gKyAqIFRoaXMgZmxhZyBpcyBvbmx5IHN1cHBvcnRlZCBvbiB4ODZfNjQgb3IgYXJt NjQgcGxhdGZvcm1zLA0KPiBjdXJyZW50bHkuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX1NUQUNL X0ZfUElMRSAweDAwMDINCj4gKw0KPiAgI2luY2x1ZGUgInJ0ZV9zdGFja19zdGQuaCINCj4gICNp bmNsdWRlICJydGVfc3RhY2tfbGYuaCINCj4gKyNpbmNsdWRlICJydGVfc3RhY2tfcGlsZS5oIg0K PiANCj4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiAgZXh0ZXJuICJDIiB7DQo+IEBAIC0xMDgsMTMg KzE3NSwxNSBAQCBleHRlcm4gIkMiIHsNCj4gICAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3Rz IHB1c2hlZCAoZWl0aGVyIDAgb3IgKm4qKS4NCj4gICAqLw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5 c19pbmxpbmUgdW5zaWduZWQgaW50DQo+IC1ydGVfc3RhY2tfcHVzaChzdHJ1Y3QgcnRlX3N0YWNr ICpzLCB2b2lkICogY29uc3QgKm9ial90YWJsZSwgdW5zaWduZWQNCj4gaW50IG4pDQo+ICtydGVf c3RhY2tfcHVzaChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB2b2lkICogY29uc3QgKiBfX3J0ZV9yZXN0 cmljdA0KPiBvYmpfdGFibGUsIHVuc2lnbmVkIGludCBuKQ0KPiAgew0KPiAgCVJURV9BU1NFUlQo cyAhPSBOVUxMKTsNCj4gIAlSVEVfQVNTRVJUKG9ial90YWJsZSAhPSBOVUxMKTsNCj4gDQo+ICAJ aWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfTEYpDQo+ICAJCXJldHVybiBfX3J0ZV9zdGFja19s Zl9wdXNoKHMsIG9ial90YWJsZSwgbik7DQo+ICsJZWxzZSBpZiAocy0+ZmxhZ3MgJiBSVEVfU1RB Q0tfRl9QSUxFKQ0KPiArCQlyZXR1cm4gX19ydGVfc3RhY2tfcGlsZV9wdXNoKHMsIG9ial90YWJs ZSwgbik7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gX19ydGVfc3RhY2tfc3RkX3B1c2gocywgb2Jq X3RhYmxlLCBuKTsNCj4gIH0NCj4gQEAgLTEzMiwxMyArMjAxLDE1IEBAIHJ0ZV9zdGFja19wdXNo KHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKiBjb25zdA0KPiAqb2JqX3RhYmxlLCB1bnNpZ25l ZCBpbnQgbikNCj4gICAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIHBvcHBlZCAoZWl0aGVy IDAgb3IgKm4qKS4NCj4gICAqLw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWdu ZWQgaW50DQo+IC1ydGVfc3RhY2tfcG9wKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKipvYmpf dGFibGUsIHVuc2lnbmVkIGludCBuKQ0KPiArcnRlX3N0YWNrX3BvcChzdHJ1Y3QgcnRlX3N0YWNr ICpzLCB2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gdW5zaWduZWQgaW50IG4p DQo+ICB7DQo+ICAJUlRFX0FTU0VSVChzICE9IE5VTEwpOw0KPiAgCVJURV9BU1NFUlQob2JqX3Rh YmxlICE9IE5VTEwpOw0KPiANCj4gIAlpZiAocy0+ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9MRikNCj4g IAkJcmV0dXJuIF9fcnRlX3N0YWNrX2xmX3BvcChzLCBvYmpfdGFibGUsIG4pOw0KPiArCWVsc2Ug aWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfUElMRSkNCj4gKwkJcmV0dXJuIF9fcnRlX3N0YWNr X3BpbGVfcG9wKHMsIG9ial90YWJsZSwgbik7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gX19ydGVf c3RhY2tfc3RkX3BvcChzLCBvYmpfdGFibGUsIG4pOw0KPiAgfQ0KPiBAQCAtMTU4LDYgKzIyOSw4 IEBAIHJ0ZV9zdGFja19jb3VudChzdHJ1Y3QgcnRlX3N0YWNrICpzKQ0KPiANCj4gIAlpZiAocy0+ ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9MRikNCj4gIAkJcmV0dXJuIF9fcnRlX3N0YWNrX2xmX2NvdW50 KHMpOw0KPiArCWVsc2UgaWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfUElMRSkNCj4gKwkJcmV0 dXJuIF9fcnRlX3N0YWNrX3BpbGVfY291bnQocyk7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gX19y dGVfc3RhY2tfc3RkX2NvdW50KHMpOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvbGliL3N0YWNrL3J0 ZV9zdGFja19sZi5oIGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZi5oDQo+IGluZGV4IGYyYjAxMmNk MGUuLjY1NTYyMGFhYTkgMTAwNjQ0DQo+IC0tLSBhL2xpYi9zdGFjay9ydGVfc3RhY2tfbGYuaA0K PiArKysgYi9saWIvc3RhY2svcnRlX3N0YWNrX2xmLmgNCj4gQEAgLTM0LDcgKzM0LDcgQEANCj4g ICAqLw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICBfX3J0 ZV9zdGFja19sZl9wdXNoKHN0cnVjdCBydGVfc3RhY2sgKnMsDQo+IC0JCSAgICB2b2lkICogY29u c3QgKm9ial90YWJsZSwNCj4gKwkJICAgIHZvaWQgKiBjb25zdCAqIF9fcnRlX3Jlc3RyaWN0IG9i al90YWJsZSwNCj4gIAkJICAgIHVuc2lnbmVkIGludCBuKQ0KPiAgew0KPiAgCXN0cnVjdCBydGVf c3RhY2tfbGZfZWxlbSAqdG1wLCAqZmlyc3QsICpsYXN0ID0gTlVMTDsNCj4gQEAgLTcxLDcgKzcx LDggQEAgX19ydGVfc3RhY2tfbGZfcHVzaChzdHJ1Y3QgcnRlX3N0YWNrICpzLA0KPiAgICogICAt IEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBwb3BwZWQuDQo+ICAgKi8NCj4gIHN0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiAtX19ydGVfc3RhY2tfbGZfcG9wKHN0cnVj dCBydGVfc3RhY2sgKnMsIHZvaWQgKipvYmpfdGFibGUsIHVuc2lnbmVkIGludA0KPiBuKQ0KPiAr X19ydGVfc3RhY2tfbGZfcG9wKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKiogX19ydGVfcmVz dHJpY3QNCj4gb2JqX3RhYmxlLA0KPiArCQkgICB1bnNpZ25lZCBpbnQgbikNCj4gIHsNCj4gIAlz dHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKmZpcnN0LCAqbGFzdCA9IE5VTEw7DQo+IA0KPiBAQCAt NzksNiArODAsNyBAQCBfX3J0ZV9zdGFja19sZl9wb3Aoc3RydWN0IHJ0ZV9zdGFjayAqcywgdm9p ZA0KPiAqKm9ial90YWJsZSwgdW5zaWduZWQgaW50IG4pDQo+ICAJCXJldHVybiAwOw0KPiANCj4g IAkvKiBQb3AgbiB1c2VkIGVsZW1lbnRzICovDQo+ICsJX19ydGVfYXNzdW1lKG9ial90YWJsZSAh PSBOVUxMKTsNCj4gIAlmaXJzdCA9IF9fcnRlX3N0YWNrX2xmX3BvcF9lbGVtcygmcy0+c3RhY2tf bGYudXNlZCwNCj4gIAkJCQkJIG4sIG9ial90YWJsZSwgJmxhc3QpOw0KPiAgCWlmICh1bmxpa2Vs eShmaXJzdCA9PSBOVUxMKSkNCj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfbGZf YzExLmgNCj4gYi9saWIvc3RhY2svcnRlX3N0YWNrX2xmX2MxMS5oDQo+IGluZGV4IGI5N2UwMmQ2 YTEuLjUwMWU5ODVhNDkgMTAwNjQ0DQo+IC0tLSBhL2xpYi9zdGFjay9ydGVfc3RhY2tfbGZfYzEx LmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9jMTEuaA0KPiBAQCAtOTksNyArOTks NyBAQCBfX3J0ZV9zdGFja19sZl9wdXNoX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdA0K PiAqbGlzdCwNCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHN0cnVjdCBydGVfc3RhY2tf bGZfZWxlbSAqDQo+ICBfX3J0ZV9zdGFja19sZl9wb3BfZWxlbXMoc3RydWN0IHJ0ZV9zdGFja19s Zl9saXN0ICpsaXN0LA0KPiAgCQkJIHVuc2lnbmVkIGludCBudW0sDQo+IC0JCQkgdm9pZCAqKm9i al90YWJsZSwNCj4gKwkJCSB2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gIAkJ CSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKipsYXN0KQ0KPiAgew0KPiAgCXN0cnVjdCBydGVf c3RhY2tfbGZfaGVhZCBvbGRfaGVhZDsNCj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3Rh Y2tfbGZfZ2VuZXJpYy5oDQo+IGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9nZW5lcmljLmgNCj4g aW5kZXggY2M2OWU0ZDE2OC4uYzRjYzRkMmMwMyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0 ZV9zdGFja19sZl9nZW5lcmljLmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9nZW5l cmljLmgNCj4gQEAgLTc0LDcgKzc0LDcgQEAgX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcyhzdHJ1 Y3QgcnRlX3N0YWNrX2xmX2xpc3QNCj4gKmxpc3QsDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKg0KPiAgX19ydGVfc3RhY2tfbGZfcG9wX2Vs ZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdCAqbGlzdCwNCj4gIAkJCSB1bnNpZ25lZCBpbnQg bnVtLA0KPiAtCQkJIHZvaWQgKipvYmpfdGFibGUsDQo+ICsJCQkgdm9pZCAqKiBfX3J0ZV9yZXN0 cmljdCBvYmpfdGFibGUsDQo+ICAJCQkgc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICoqbGFzdCkN Cj4gIHsNCj4gIAlzdHJ1Y3QgcnRlX3N0YWNrX2xmX2hlYWQgb2xkX2hlYWQ7DQo+IGRpZmYgLS1n aXQgYS9saWIvc3RhY2svcnRlX3N0YWNrX2xmX3N0dWJzLmgNCj4gYi9saWIvc3RhY2svcnRlX3N0 YWNrX2xmX3N0dWJzLmgNCj4gaW5kZXggYTA1YWJmMWYxYy4uNDU3YTQxNWNjZiAxMDA2NDQNCj4g LS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9zdHVicy5oDQo+ICsrKyBiL2xpYi9zdGFjay9y dGVfc3RhY2tfbGZfc3R1YnMuaA0KPiBAQCAtMzAsNyArMzAsNyBAQCBfX3J0ZV9zdGFja19sZl9w dXNoX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdA0KPiAqbGlzdCwNCj4gIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqDQo+ICBfX3J0ZV9z dGFja19sZl9wb3BfZWxlbXMoc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0ICpsaXN0LA0KPiAgCQkJ IHVuc2lnbmVkIGludCBudW0sDQo+IC0JCQkgdm9pZCAqKm9ial90YWJsZSwNCj4gKwkJCSB2b2lk ICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gIAkJCSBzdHJ1Y3QgcnRlX3N0YWNrX2xm X2VsZW0gKipsYXN0KQ0KPiAgew0KPiAgCVJURV9TRVRfVVNFRChvYmpfdGFibGUpOw0KPiBkaWZm IC0tZ2l0IGEvbGliL3N0YWNrL3J0ZV9zdGFja19waWxlLmMgYi9saWIvc3RhY2svcnRlX3N0YWNr X3BpbGUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5lYjQy YmE3MGE5DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19waWxl LmMNCj4gQEAgLTAsMCArMSwzMyBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjYgU21hcnRTaGFyZSBTeXN0ZW1zDQo+ ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgInJ0ZV9zdGFjay5oIg0KPiArDQo+ICt2b2lkDQo+ICty dGVfc3RhY2tfcGlsZV9pbml0KHN0cnVjdCBydGVfc3RhY2sgKnMsIHVuc2lnbmVkIGludCBjb3Vu dCkNCj4gK3sNCj4gKyAgICB1bnNpZ25lZCBpbnQgYnVsayA9IChjb3VudCArIFJURV9TVEFDS19Q SUxFX0JVTEtfU0laRSAtIDEpIC8NCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFOw0KPiArCXN0 cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKiBidWxrX2VsZW1zID0gKHN0cnVjdA0KPiBy dGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKikoJnMtPnN0YWNrX3BpbGUgKyAxKTsNCj4gKwlzdHJ1 Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKiBzb2xvX2VsZW1zID0gKHN0cnVjdCBydGVfc3RhY2tfbGZf ZWxlbQ0KPiAqKSZidWxrX2VsZW1zW2J1bGtdOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ ICsJZm9yIChpID0gMDsgaSA8IGJ1bGs7IGkrKykNCj4gKwkJX19ydGVfc3RhY2tfcGlsZV9idWxr X3B1c2hfZWxlbXMoJnMtPnN0YWNrX3BpbGUuZnJlZV9idWxrLA0KPiArCQkJCQkgICZidWxrX2Vs ZW1zW2ldLCAmYnVsa19lbGVtc1tpXSwgMSk7DQo+ICsJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyspDQo+ICsJCV9fcnRlX3N0YWNrX2xmX3B1c2hfZWxlbXMoJnMtPnN0YWNrX3BpbGUuZnJlZV9z b2xvLA0KPiArCQkJCQkgICZzb2xvX2VsZW1zW2ldLCAmc29sb19lbGVtc1tpXSwgMSk7DQo+ICt9 DQo+ICsNCj4gK3NzaXplX3QNCj4gK3J0ZV9zdGFja19waWxlX2dldF9tZW1zaXplKHVuc2lnbmVk IGludCBjb3VudCkNCj4gK3sNCj4gKyAgICB1bnNpZ25lZCBpbnQgYnVsayA9IChjb3VudCArIFJU RV9TVEFDS19QSUxFX0JVTEtfU0laRSAtIDEpIC8NCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpF Ow0KPiArCXNzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHJ0ZV9zdGFjayk7IC8qIEFscmVhZHkg Y2FjaGUgbGluZQ0KPiBhbGlnbmVkLiAqLw0KPiArCXN6ICs9IGJ1bGsgKiBzaXplb2Yoc3RydWN0 IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSk7IC8qIEFscmVhZHkNCj4gY2FjaGUgbGluZSBhbGln bmVkLiAqLw0KPiArCXN6ICs9IFJURV9DQUNIRV9MSU5FX1JPVU5EVVAoY291bnQgKiBzaXplb2Yo c3RydWN0DQo+IHJ0ZV9zdGFja19sZl9lbGVtKSk7DQo+ICsJc3ogKz0gUlRFX0NBQ0hFX0dVQVJE X0xJTkVTICogUlRFX0NBQ0hFX0xJTkVfU0laRTsNCj4gKw0KPiArCXJldHVybiBzejsNCj4gK30N Cj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfcGlsZS5oIGIvbGliL3N0YWNrL3J0 ZV9zdGFja19waWxlLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw MC4uZDkyODUxNWQxOA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9zdGFjay9ydGVfc3Rh Y2tfcGlsZS5oDQo+IEBAIC0wLDAgKzEsMzE2IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNiBTbWFydFNoYXJlIFN5 c3RlbXMNCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9SVEVfU1RBQ0tfUElMRV9IXw0KPiArI2Rl ZmluZSBfUlRFX1NUQUNLX1BJTEVfSF8NCj4gKw0KPiArI2lmICEoZGVmaW5lZChSVEVfQVJDSF9Y ODZfNjQpIHx8IGRlZmluZWQoUlRFX0FSQ0hfQVJNNjQpKQ0KPiArI2luY2x1ZGUgInJ0ZV9zdGFj a19sZl9zdHVicy5oIg0KPiArI2Vsc2UNCj4gKyNpZmRlZiBSVEVfVVNFX0MxMV9NRU1fTU9ERUwN Cj4gKyNpbmNsdWRlICJydGVfc3RhY2tfbGZfYzExLmgiDQo+ICsjZWxzZQ0KPiArI2luY2x1ZGUg InJ0ZV9zdGFja19sZl9nZW5lcmljLmgiDQo+ICsjZW5kaWYNCj4gKw0KPiArLyoqDQo+ICsgKiBJ bmRpY2F0ZXMgdGhhdCBSVEVfU1RBQ0tfRl9QSUxFIGlzIHN1cHBvcnRlZC4NCj4gKyAqLw0KPiAr I2RlZmluZSBSVEVfU1RBQ0tfUElMRV9TVVBQT1JURUQNCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0 aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK19fcnRlX3N0YWNrX3BpbGVf Y291bnQoc3RydWN0IHJ0ZV9zdGFjayAqcykNCj4gK3sNCj4gKwkvKiBzdGFja19sZl9wdXNoKCkg YW5kIHN0YWNrX2xmX3BvcCgpIGRvIG5vdCB1cGRhdGUgdGhlIGxpc3Qncw0KPiBjb250ZW50cw0K PiArCSAqIGFuZCBzdGFja19sZi0+bGVuIGF0b21pY2FsbHksIHdoaWNoIGNhbiBjYXVzZSB0aGUg bGlzdCB0bw0KPiBhcHBlYXINCj4gKwkgKiBzaG9ydGVyIHRoYW4gaXQgYWN0dWFsbHkgaXMgaWYg dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUNCj4gb3RoZXINCj4gKwkgKiB0aHJlYWRzIGFy ZSBtb2RpZnlpbmcgdGhlIGxpc3QuDQo+ICsJICoNCj4gKwkgKiBIb3dldmVyLCBnaXZlbiB0aGUg aW5oZXJlbnRseSBhcHByb3hpbWF0ZSBuYXR1cmUgb2YgdGhlDQo+IGdldF9jb3VudA0KPiArCSAq IGNhbGxiYWNrIC0tIGV2ZW4gaWYgdGhlIGxpc3QgYW5kIGl0cyBzaXplIHdlcmUgdXBkYXRlZA0K PiBhdG9taWNhbGx5LA0KPiArCSAqIHRoZSBzaXplIGNvdWxkIGNoYW5nZSBiZXR3ZWVuIHdoZW4g Z2V0X2NvdW50IGV4ZWN1dGVzIGFuZCB3aGVuDQo+IHRoZQ0KPiArCSAqIHZhbHVlIGlzIHJldHVy bmVkIHRvIHRoZSBjYWxsZXIgLS0gdGhpcyBpcyBhY2NlcHRhYmxlLg0KPiArCSAqDQo+ICsJICog VGhlIHN0YWNrX2xmLT5sZW4gdXBkYXRlcyBhcmUgcGxhY2VkIHN1Y2ggdGhhdCB0aGUgbGlzdCBt YXkNCj4gYXBwZWFyIHRvDQo+ICsJICogaGF2ZSBmZXdlciBlbGVtZW50cyB0aGFuIGl0IGRvZXMs IGJ1dCB3aWxsIG5ldmVyIGFwcGVhciB0bw0KPiBoYXZlIG1vcmUNCj4gKwkgKiBlbGVtZW50cy4g SWYgdGhlIG1lbXBvb2wgaXMgbmVhci1lbXB0eSB0byB0aGUgcG9pbnQgdGhhdCB0aGlzDQo+IGlz IGENCj4gKwkgKiBjb25jZXJuLCB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgaW5jcmVhc2luZyB0 aGUgbWVtcG9vbCBzaXplLg0KPiArCSAqLw0KPiArI2lmZGVmIFJURV9VU0VfQzExX01FTV9NT0RF TA0KPiArCXJldHVybiBSVEVfTUlOKCh1bnNpZ25lZCBpbnQpcy0+Y2FwYWNpdHksDQo+ICsJCQko dW5zaWduZWQgaW50KXJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmcy0NCj4gPnN0YWNrX3BpbGUu YnVsay5sZW4sDQo+ICsJCQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpICogUlRFX1NUQUNLX1BJ TEVfQlVMS19TSVpFDQo+ICsNCj4gKwkJCSh1bnNpZ25lZCBpbnQpcnRlX2F0b21pY19sb2FkX2V4 cGxpY2l0KCZzLQ0KPiA+c3RhY2tfcGlsZS5zb2xvLmxlbiwNCj4gKwkJCXJ0ZV9tZW1vcnlfb3Jk ZXJfcmVsYXhlZCkpOw0KPiArI2Vsc2UNCj4gKwkvKiBOT1RFOiByZXZpZXcgZm9yIHBvdGVudGlh bCBvcmRlcmluZyBvcHRpbWl6YXRpb24gKi8NCj4gKwlyZXR1cm4gUlRFX01JTigodW5zaWduZWQg aW50KXMtPmNhcGFjaXR5LA0KPiArCQkJKHVuc2lnbmVkIGludClydGVfYXRvbWljX2xvYWRfZXhw bGljaXQoJnMtDQo+ID5zdGFja19waWxlLmJ1bGsubGVuLA0KPiArCQkJcnRlX21lbW9yeV9vcmRl cl9zZXFfY3N0KSAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRQ0KPiArDQo+ICsJCQkodW5zaWdu ZWQgaW50KXJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmcy0NCj4gPnN0YWNrX3BpbGUuc29sby5s ZW4sDQo+ICsJCQlydGVfbWVtb3J5X29yZGVyX3NlcV9jc3QpKTsNCj4gKyNlbmRpZg0KPiArfQ0K PiArDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ICtfX3J0ZV9zdGFja19w aWxlX2J1bGtfcHVzaF9lbGVtcyhzdHJ1Y3QgcnRlX3N0YWNrX2xmX2xpc3QgKmxpc3QsDQo+ICsJ CXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmZpcnN0LA0KPiArCQlzdHJ1Y3QgcnRl X3N0YWNrX3BpbGVfYnVsa19lbGVtICpsYXN0LA0KPiArCQl1bnNpZ25lZCBpbnQgbnVtKQ0KPiAr ew0KPiArCV9fcnRlX3N0YWNrX2xmX3B1c2hfZWxlbXMobGlzdCwNCj4gKwkJKHN0cnVjdCBydGVf c3RhY2tfbGZfZWxlbSAqKWZpcnN0LA0KPiArCQkoc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICop bGFzdCwNCj4gKwkJbnVtKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqDQo+ICtfX3J0ZV9zdGFja19waWxl X2J1bGtfcG9wX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdCAqbGlzdCwNCj4gKwkJdW5z aWduZWQgaW50IG51bSwNCj4gKwkJdm9pZCAqKiBfX3J0ZV9yZXN0cmljdCBvYmpfdGFibGUsDQo+ ICsJCXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKipsYXN0KQ0KPiArew0KPiArCXN0 cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmZpcnN0ID0gKHN0cnVjdA0KPiBydGVfc3Rh Y2tfcGlsZV9idWxrX2VsZW0gKilfX3J0ZV9zdGFja19sZl9wb3BfZWxlbXMobGlzdCwgbnVtLCBO VUxMLA0KPiAoc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICoqKWxhc3QpOw0KPiArCWlmIChmaXJz dCA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCWlmIChvYmpfdGFibGUgIT0g TlVMTCkgew0KPiArCQkvKiBUcmF2ZXJzZSB0aGUgbGlzdCB0byBjb3B5IHRoZSBidWxrcy4gKi8N Cj4gKwkJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqdG1wID0gZmlyc3Q7DQo+ICsJ CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtOyBpKyssIHRtcCA9IHRtcC0+bmV4dCkN Cj4gKwkJCXJ0ZV9tZW1jcHkoJm9ial90YWJsZVtpICogUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpF XSwNCj4gdG1wLT5vYmpzLCBzaXplb2Yodm9pZCAqKSAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0la RSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGZpcnN0Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAqIFB1c2ggc2V2ZXJhbCBvYmplY3RzIG9uIHRoZSBwaWxlIChsb2NrLWZyZWUsIE1ULXNhZmUp Lg0KPiArICoNCj4gKyAqIEBwYXJhbSBwaWxlDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcGls ZSBzdHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsgKiAgIEEgcG9pbnRlciB0 byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0cykuDQo+ICsgKiBAcGFyYW0gbg0K PiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVzaCBvbiB0aGUgcGlsZSBmcm9tIHRo ZSBvYmpfdGFibGUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2Jq ZWN0cyBwdXNoZWQgKGVpdGhlciAwIG9yICpuKikuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiArX19ydGVfc3RhY2tfcGlsZV9wdXNoKHN0cnVj dCBydGVfc3RhY2sgKnMsDQo+ICsJCXZvaWQgKiBjb25zdCAqIF9fcnRlX3Jlc3RyaWN0IG9ial90 YWJsZSwNCj4gKwkJdW5zaWduZWQgaW50IG4pDQo+ICt7DQo+ICsJUlRFX0FTU0VSVChzICE9IE5V TEwpOw0KPiArCVJURV9BU1NFUlQob2JqX3RhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsJc3RydWN0 IHJ0ZV9zdGFja19waWxlICpwaWxlID0gJnMtPnN0YWNrX3BpbGU7DQo+ICsJc3RydWN0IHJ0ZV9z dGFja19waWxlX2J1bGtfZWxlbSAqYnVsa19maXJzdCA9IE5VTEwsICpidWxrX2xhc3QgPQ0KPiBO VUxMOw0KPiArCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqc29sb19maXJzdCA9IE5VTEwsICpz b2xvX2xhc3QgPSBOVUxMOw0KPiArCXVuc2lnbmVkIGludCBuX2J1bGsgPSBuIC8gUlRFX1NUQUNL X1BJTEVfQlVMS19TSVpFOw0KPiArCXVuc2lnbmVkIGludCBuX3NvbG8gPSBuICYgKFJURV9TVEFD S19QSUxFX0JVTEtfU0laRSAtIDEpOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJaWYg KHVubGlrZWx5KG5fYnVsayA9PSAwKSkgew0KPiArCQlpZiAodW5saWtlbHkobl9zb2xvID09IDAp KQ0KPiArCQkJcmV0dXJuIDA7DQo+ICsJCWVsc2UNCj4gKwkJCWdvdG8gc29sbzsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBBbGxvY2F0ZSBuX2J1bGsgZWxlbWVudHMgZnJvbSB0aGUgZnJlZSBsaXN0LiAq Lw0KPiArCWJ1bGtfZmlyc3QgPSBfX3J0ZV9zdGFja19waWxlX2J1bGtfcG9wX2VsZW1zKCZwaWxl LT5mcmVlX2J1bGssDQo+IG5fYnVsaywgTlVMTCwgJmJ1bGtfbGFzdCk7DQo+ICsJaWYgKHVubGlr ZWx5KGJ1bGtfZmlyc3QgPT0gTlVMTCkpDQo+ICsJCXJldHVybiAwOyAvKiBGYWlsZWQuICovDQo+ ICsNCj4gKwlpZiAobGlrZWx5KG5fc29sbyA9PSAwKSkNCj4gKwkJZ290byBidWxrOw0KPiArDQo+ ICtzb2xvOg0KPiArCS8qIEFsbG9jYXRlIG5fc29sbyBlbGVtZW50cyBmcm9tIHRoZSBmcmVlIGxp c3QuICovDQo+ICsJc29sb19maXJzdCA9IF9fcnRlX3N0YWNrX2xmX3BvcF9lbGVtcygmcGlsZS0+ ZnJlZV9zb2xvLCBuX3NvbG8sDQo+IE5VTEwsICZzb2xvX2xhc3QpOw0KPiArCWlmICh1bmxpa2Vs eShzb2xvX2ZpcnN0ID09IE5VTEwpKSB7DQo+ICsJCS8qIEZhaWxlZC4gUm9sbCBiYWNrLiAqLw0K PiArCQlpZiAobl9idWxrID4gMCkNCj4gKwkJCV9fcnRlX3N0YWNrX3BpbGVfYnVsa19wdXNoX2Vs ZW1zKCZwaWxlLT5mcmVlX2J1bGssDQo+IGJ1bGtfZmlyc3QsIGJ1bGtfbGFzdCwgbl9idWxrKTsN Cj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBDb25zdHJ1Y3QgdGhl IHNvbG8gZWxlbWVudHMuDQo+ICsJICogQ29weSB0aGUgb2JqZWN0cywgYnV0IGlnbm9yZSB0aGUg b2JqZWN0IG9yZGVyLg0KPiArCSAqLw0KPiArCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqdG1w X3NvbG8gPSBzb2xvX2ZpcnN0Ow0KPiArCV9fcnRlX2Fzc3VtZShuX3NvbG8gPiAwKTsNCj4gKwlf X3J0ZV9hc3N1bWUobl9zb2xvIDwgUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFKTsNCj4gKwlmb3Ig KGkgPSAwOyBpIDwgbl9zb2xvOyBpKyssIHRtcF9zb2xvID0gdG1wX3NvbG8tPm5leHQpDQo+ICsJ CXRtcF9zb2xvLT5kYXRhID0gb2JqX3RhYmxlW25fYnVsayAqDQo+IFJURV9TVEFDS19QSUxFX0JV TEtfU0laRSArIGldOw0KPiArDQo+ICsJLyogUHVzaCB0aGVtIHRvIHRoZSBzb2xvIGxpc3QuICov DQo+ICsJX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcygmcGlsZS0+c29sbywgc29sb19maXJzdCwg c29sb19sYXN0LA0KPiBuX3NvbG8pOw0KPiArDQo+ICsJaWYgKHVubGlrZWx5KG5fYnVsayA9PSAw KSkNCj4gKwkJcmV0dXJuIG47IC8qIERvbmUuICovDQo+ICsNCj4gK2J1bGs6DQo+ICsJLyoNCj4g KwkgKiBDb25zdHJ1Y3QgdGhlIGJ1bGsgZWxlbWVudHMuDQo+ICsJICogQ29weSBidWxrcyBpbiBy ZXZlcnNlIG9yZGVyLCBidXQgaWdub3JlIHRoZSBvYmplY3Qgb3JkZXINCj4gd2l0aGluIGVhY2gg YnVsay4NCj4gKwkgKi8NCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICp0bXBf YnVsayA9IGJ1bGtfZmlyc3Q7DQo+ICsJX19ydGVfYXNzdW1lKG5fYnVsayA+IDApOw0KPiArCWZv ciAoaSA9IDA7IGkgPCBuX2J1bGs7IGkrKywgdG1wX2J1bGsgPSB0bXBfYnVsay0+bmV4dCkNCj4g KwkJcnRlX21lbWNweSh0bXBfYnVsay0+b2JqcywgJm9ial90YWJsZVsobl9idWxrIC0gaSAtIDEp ICoNCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFXSwgc2l6ZW9mKHZvaWQgKikgKiBSVEVfU1RB Q0tfUElMRV9CVUxLX1NJWkUpOw0KPiArDQo+ICsJLyogUHVzaCB0aGVtIHRvIHRoZSBidWxrIGxp c3QuICovDQo+ICsJX19ydGVfc3RhY2tfcGlsZV9idWxrX3B1c2hfZWxlbXMoJnBpbGUtPmJ1bGss IGJ1bGtfZmlyc3QsDQo+IGJ1bGtfbGFzdCwgbl9idWxrKTsNCj4gKw0KPiArCXJldHVybiBuOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIFBvcCBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcGls ZSAobG9jay1mcmVlLCBNVC1zYWZlKS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcGlsZQ0KPiArICog ICBBIHBvaW50ZXIgdG8gdGhlIHBpbGUgc3RydWN0dXJlLg0KPiArICogQHBhcmFtIG9ial90YWJs ZQ0KPiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVj dHMpLg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1 bGwgZnJvbSB0aGUgcGlsZS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgQWN0dWFsIG51bWJlciBv ZiBvYmplY3RzIHBvcHBlZCAoZWl0aGVyIDAgb3IgKm4qKS4NCj4gKyAqLw0KPiArc3RhdGljIF9f cnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICtfX3J0ZV9zdGFja19waWxlX3BvcChz dHJ1Y3QgcnRlX3N0YWNrICpzLA0KPiArCQl2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJs ZSwNCj4gKwkJdW5zaWduZWQgaW50IG4pDQo+ICt7DQo+ICsJUlRFX0FTU0VSVChzICE9IE5VTEwp Ow0KPiArCVJURV9BU1NFUlQob2JqX3RhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsJc3RydWN0IHJ0 ZV9zdGFja19waWxlICpwaWxlID0gJnMtPnN0YWNrX3BpbGU7DQo+ICsJc3RydWN0IHJ0ZV9zdGFj a19waWxlX2J1bGtfZWxlbSAqYnVsa19maXJzdCA9IE5VTEwsICpidWxrX2xhc3QgPQ0KPiBOVUxM Ow0KPiArCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqc29sb19maXJzdCA9IE5VTEwsICpzb2xv X2xhc3QgPSBOVUxMOw0KPiArCXVuc2lnbmVkIGludCBuX2J1bGsgPSBuIC8gUlRFX1NUQUNLX1BJ TEVfQlVMS19TSVpFOw0KPiArCXVuc2lnbmVkIGludCBuX3NvbG8gPSBuICYgKFJURV9TVEFDS19Q SUxFX0JVTEtfU0laRSAtIDEpOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJaWYgKHVu bGlrZWx5KG5fYnVsayA9PSAwKSkgew0KPiArCQlpZiAodW5saWtlbHkobl9zb2xvID09IDApKQ0K PiArCQkJcmV0dXJuIDA7DQo+ICsJCWVsc2UNCj4gKwkJCWdvdG8gc29sbzsNCj4gKwl9DQo+ICsN Cj4gK2J1bGs6DQo+ICsJLyogRmV0Y2ggbl9idWxrICogUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpF IG9iamVjdHMgYXMgYnVsaw0KPiBlbGVtZW50cy4gKi8NCj4gKwlidWxrX2ZpcnN0ID0gX19ydGVf c3RhY2tfcGlsZV9idWxrX3BvcF9lbGVtcygmcGlsZS0+YnVsaywgbl9idWxrLA0KPiBvYmpfdGFi bGUsICZidWxrX2xhc3QpOw0KPiArCWlmICh1bmxpa2VseShidWxrX2ZpcnN0ID09IE5VTEwpKSB7 DQo+ICsJCS8qIE5vdCBhdmFpbGFibGUuIFJldHJ5IHdpdGggZmV3ZXIgYnVsayBlbGVtZW50czsg b2JqZWN0cw0KPiB0byBiZSBmZXRjaGVkIGFzIHNvbG8gZWxlbWVudHMgaW5zdGVhZC4gKi8NCj4g KwkJbl9zb2xvICs9IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRTsNCj4gKwkJbl9idWxrLS07DQo+ ICsJCWlmIChuX2J1bGsgPiAwKQ0KPiArCQkJZ290byBidWxrOw0KPiArCQllbHNlDQo+ICsJCQln b3RvIHNvbG87DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGxpa2VseShuX3NvbG8gPT0gMCkpDQo+ICsJ CWdvdG8gZG9uZTsNCj4gKw0KPiArc29sbzoNCj4gKwkvKiBGZXRjaCBuX3NvbG8gb2JqZWN0cyBh cyBzb2xvIGVsZW1lbnRzLiAqLw0KPiArCXNvbG9fZmlyc3QgPSBfX3J0ZV9zdGFja19sZl9wb3Bf ZWxlbXMoJnBpbGUtPnNvbG8sIG5fc29sbywNCj4gJm9ial90YWJsZVtuX2J1bGsgKiBSVEVfU1RB Q0tfUElMRV9CVUxLX1NJWkVdLCAmc29sb19sYXN0KTsNCj4gKwlpZiAoc29sb19maXJzdCAhPSBO VUxMKQ0KPiArCQlnb3RvIGRvbmU7DQo+ICsNCj4gKwkvKiBTb2xvIGVsZW1lbnRzIG5vdCBhdmFp bGFibGUuIFRyeSBmcmFnbWVudGF0aW9uLiAqLw0KPiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVf U0laRSkgdm9pZCAqDQo+IG9ial9mcmFnW1JURV9TVEFDS19QSUxFX0JVTEtfU0laRV07DQo+ICsJ c3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqZnJhZzsNCj4gKw0KPiArCS8qIEZldGNo IGEgZnJhZ21lbnRhdGlvbiBlbGVtZW50IGFzIGEgYnVsayBlbGVtZW50LiAqLw0KPiArCWZyYWcg PSBfX3J0ZV9zdGFja19waWxlX2J1bGtfcG9wX2VsZW1zKCZwaWxlLT5idWxrLCAxLCBvYmpfZnJh ZywNCj4gTlVMTCk7DQo+ICsJaWYgKHVubGlrZWx5KGZyYWcgPT0gTlVMTCkpIHsNCj4gKwkJLyog RmFpbGVkLiBSb2xsIGJhY2suICovDQo+ICsJCWlmIChuX2J1bGsgPiAwKQ0KPiArCQkJX19ydGVf c3RhY2tfcGlsZV9idWxrX3B1c2hfZWxlbXMoJnBpbGUtPmJ1bGssDQo+IGJ1bGtfZmlyc3QsIGJ1 bGtfbGFzdCwgbl9idWxrKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJLyogR2V0 IG5fc29sbyBvYmplY3RzIGZyb20gdGhlIGZyYWdtZW50YXRpb24gZWxlbWVudC4gKi8NCj4gKwlf X3J0ZV9hc3N1bWUobl9zb2xvID4gMCk7DQo+ICsJX19ydGVfYXNzdW1lKG5fc29sbyA8IFJURV9T VEFDS19QSUxFX0JVTEtfU0laRSk7DQo+ICsJZm9yIChpID0gMDsgaSA8IG5fc29sbzsgaSsrKQ0K PiArCQlvYmpfdGFibGVbbl9idWxrICogUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFICsgaV0gPQ0K PiBvYmpfZnJhZ1tpXTsNCj4gKw0KPiArCS8qIEZldGNoIGZyZWUgZWxlbWVudHMgZm9yIHRoZSBl eGNlc3Mgb2JqZWN0cy4gKi8NCj4gKwlfX3J0ZV9hc3N1bWUoUlRFX1NUQUNLX1BJTEVfQlVMS19T SVpFIC0gbl9zb2xvID4gMCk7DQo+ICsJX19ydGVfYXNzdW1lKFJURV9TVEFDS19QSUxFX0JVTEtf U0laRSAtIG5fc29sbyA8DQo+IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSAtIDEpOw0KPiArCXNv bG9fZmlyc3QgPSBfX3J0ZV9zdGFja19sZl9wb3BfZWxlbXMoJnBpbGUtPmZyZWVfc29sbywNCj4g UlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFIC0gbl9zb2xvLCBOVUxMLCAmc29sb19sYXN0KTsNCj4g KwlpZiAodW5saWtlbHkoc29sb19maXJzdCA9PSBOVUxMKSkgew0KPiArCQkvKiBGYWlsZWQuIFJv bGwgYmFjay4gKi8NCj4gKwkJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqbGFzdDsN Cj4gKwkJaWYgKG5fYnVsayA+IDApIHsNCj4gKwkJCS8qIEF0dGFjaCB0aGUgYnVsayBlbGVtZW50 cyBhZnRlciB0aGUgZnJhZ21lbnRhdGlvbg0KPiBlbGVtZW50LiAqLw0KPiArCQkJZnJhZy0+bmV4 dCA9IGJ1bGtfZmlyc3Q7DQo+ICsJCQlsYXN0ID0gYnVsa19sYXN0Ow0KPiArCQl9IGVsc2UNCj4g KwkJCWxhc3QgPSBmcmFnOw0KPiArCQlfX3J0ZV9zdGFja19waWxlX2J1bGtfcHVzaF9lbGVtcygm cGlsZS0+YnVsaywgZnJhZywgbGFzdCwgMQ0KPiArIG5fYnVsayk7DQo+ICsJCXJldHVybiAwOw0K PiArCX0NCj4gKw0KPiArCS8qIENvbnN0cnVjdCB0aGUgc29sbyBlbGVtZW50cyBmcm9tIHRoZSBl eGNlc3Mgb2JqZWN0cy4gKi8NCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKnRtcCA9IHNv bG9fZmlyc3Q7DQo+ICsJX19ydGVfYXNzdW1lKG5fc29sbyA+IDApOw0KPiArCV9fcnRlX2Fzc3Vt ZShuX3NvbG8gPCBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUpOw0KPiArCWZvciAoaSA9IG5fc29s bzsgaSA8IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRTsgaSsrLCB0bXAgPSB0bXAtDQo+ID5uZXh0 KQ0KPiArCQl0bXAtPmRhdGEgPSBvYmpfZnJhZ1tpXTsNCj4gKw0KPiArCS8qIFB1c2ggdGhlIGV4 Y2VzcyBvYmplY3RzIGFzIHNvbG8gZWxlbWVudHMuICovDQo+ICsJX19ydGVfc3RhY2tfbGZfcHVz aF9lbGVtcygmcGlsZS0+c29sbywgc29sb19maXJzdCwgc29sb19sYXN0LA0KPiBSVEVfU1RBQ0tf UElMRV9CVUxLX1NJWkUgLSBuX3NvbG8pOw0KPiArCW5fc29sbyA9IDA7DQo+ICsNCj4gKwkvKiBB ZGQgdGhlIGZyYWdtZW50YXRpb24gZWxlbWVudCBpbiBmcm9udCBvZiB0aGUgYnVsayBlbGVtZW50 cywNCj4gc28gaXQgY2FuIGJlIGZyZWVkLiAqLw0KPiArCWlmIChuX2J1bGsgPiAwKQ0KPiArCQlm cmFnLT5uZXh0ID0gYnVsa19maXJzdDsNCj4gKwllbHNlDQo+ICsJCWJ1bGtfbGFzdCA9IGZyYWc7 DQo+ICsJYnVsa19maXJzdCA9IGZyYWc7DQo+ICsJbl9idWxrKys7DQo+ICsNCj4gK2RvbmU6DQo+ ICsJLyogU3VjY2Vzcy4gRnJlZSB0aGUgZWxlbWVudHMuICovDQo+ICsJaWYgKG5fYnVsayA+IDAp DQo+ICsJCV9fcnRlX3N0YWNrX3BpbGVfYnVsa19wdXNoX2VsZW1zKCZwaWxlLT5mcmVlX2J1bGss DQo+IGJ1bGtfZmlyc3QsIGJ1bGtfbGFzdCwgbl9idWxrKTsNCj4gKwlpZiAobl9zb2xvID4gMCkN Cj4gKwkJX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcygmcGlsZS0+ZnJlZV9zb2xvLCBzb2xvX2Zp cnN0LA0KPiBzb2xvX2xhc3QsIG5fc29sbyk7DQo+ICsNCj4gKwlyZXR1cm4gbjsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgSW5pdGlhbGl6ZSBhIHBpbGUgc3RhY2suDQo+ICsg Kg0KPiArICogQHBhcmFtIHMNCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBzdGFjayBzdHJ1Y3R1 cmUuDQo+ICsgKiBAcGFyYW0gY291bnQNCj4gKyAqICAgVGhlIHNpemUgb2YgdGhlIHN0YWNrLg0K PiArICovDQo+ICt2b2lkDQo+ICtydGVfc3RhY2tfcGlsZV9pbml0KHN0cnVjdCBydGVfc3RhY2sg KnMsIHVuc2lnbmVkIGludCBjb3VudCk7DQo+ICsNCj4gKy8qKg0KPiArICogQGludGVybmFsIFJl dHVybiB0aGUgbWVtb3J5IHJlcXVpcmVkIGZvciBhIHBpbGUgc3RhY2suDQo+ICsgKg0KPiArICog QHBhcmFtIGNvdW50DQo+ICsgKiAgIFRoZSBzaXplIG9mIHRoZSBzdGFjay4NCj4gKyAqIEByZXR1 cm4NCj4gKyAqICAgVGhlIGJ5dGVzIHRvIGFsbG9jYXRlIGZvciBhIHBpbGUgc3RhY2suDQo+ICsg Ki8NCj4gK3NzaXplX3QNCj4gK3J0ZV9zdGFja19waWxlX2dldF9tZW1zaXplKHVuc2lnbmVkIGlu dCBjb3VudCk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfUlRFX1NUQUNLX1BJTEVfSF8gKi8NCj4gZGlm ZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfc3RkLmggYi9saWIvc3RhY2svcnRlX3N0YWNr X3N0ZC5oDQo+IGluZGV4IGFlMjhhZGQ1YzQuLjAwMzA5NWExNDQgMTAwNjQ0DQo+IC0tLSBhL2xp Yi9zdGFjay9ydGVfc3RhY2tfc3RkLmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19zdGQu aA0KPiBAQCAtNiw2ICs2LDcgQEANCj4gICNkZWZpbmUgX1JURV9TVEFDS19TVERfSF8NCj4gDQo+ ICAjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+DQo+ICsjaW5jbHVkZSA8cnRlX21l bWNweS5oPg0KPiANCj4gIC8qKg0KPiAgICogQGludGVybmFsIFB1c2ggc2V2ZXJhbCBvYmplY3Rz IG9uIHRoZSBzdGFjayAoTVQtc2FmZSkuDQo+IEBAIC0yMCwyNyArMjEsMjQgQEANCj4gICAqICAg QWN0dWFsIG51bWJlciBvZiBvYmplY3RzIHB1c2hlZCAoZWl0aGVyIDAgb3IgKm4qKS4NCj4gICAq Lw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+IC1fX3J0ZV9z dGFja19zdGRfcHVzaChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB2b2lkICogY29uc3QgKm9ial90YWJs ZSwNCj4gK19fcnRlX3N0YWNrX3N0ZF9wdXNoKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKiBj b25zdCAqDQo+IF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gIAkJICAgICB1bnNpZ25lZCBp bnQgbikNCj4gIHsNCj4gLQlzdHJ1Y3QgcnRlX3N0YWNrX3N0ZCAqc3RhY2sgPSAmcy0+c3RhY2tf c3RkOw0KPiAtCXVuc2lnbmVkIGludCBpbmRleDsNCj4gLQl2b2lkICoqY2FjaGVfb2JqczsNCj4g KwlzdHJ1Y3QgcnRlX3N0YWNrX3N0ZCAqIF9fcnRlX3Jlc3RyaWN0IHN0YWNrID0gJnMtPnN0YWNr X3N0ZDsNCj4gKwl2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IHN0YWNrX29ianM7DQo+IA0KPiAgCXJ0 ZV9zcGlubG9ja19sb2NrKCZzdGFjay0+bG9jayk7DQo+IC0JY2FjaGVfb2JqcyA9ICZzdGFjay0+ b2Jqc1tzdGFjay0+bGVuXTsNCj4gDQo+IC0JLyogSXMgdGhlcmUgc3VmZmljaWVudCBzcGFjZSBp biB0aGUgc3RhY2s/ICovDQo+IC0JaWYgKChzdGFjay0+bGVuICsgbikgPiBzLT5jYXBhY2l0eSkg ew0KPiArCWlmICh1bmxpa2VseSgoc3RhY2stPmxlbiArIG4pID4gcy0+Y2FwYWNpdHkpKSB7DQo+ ICsJCS8qIEluc3VmZmljaWVudCByb29tIGluIHRoZSBzdGFjay4gKi8NCj4gIAkJcnRlX3NwaW5s b2NrX3VubG9jaygmc3RhY2stPmxvY2spOw0KPiAgCQlyZXR1cm4gMDsNCj4gIAl9DQo+IA0KPiAt CS8qIEFkZCBlbGVtZW50cyBiYWNrIGludG8gdGhlIGNhY2hlICovDQo+IC0JZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgbjsgKytpbmRleCwgb2JqX3RhYmxlKyspDQo+IC0JCWNhY2hlX29ianNbaW5k ZXhdID0gKm9ial90YWJsZTsNCj4gLQ0KPiArCS8qIFB1c2ggb2JqZWN0cyB0byB0aGUgc3RhY2sg Ki8NCj4gKwlzdGFja19vYmpzID0gJnN0YWNrLT5vYmpzW3N0YWNrLT5sZW5dOw0KPiAgCXN0YWNr LT5sZW4gKz0gbjsNCj4gKwlydGVfbWVtY3B5KHN0YWNrX29ianMsIG9ial90YWJsZSwgc2l6ZW9m KHZvaWQgKikgKiBuKTsNCj4gDQo+ICAJcnRlX3NwaW5sb2NrX3VubG9jaygmc3RhY2stPmxvY2sp Ow0KPiAgCXJldHVybiBuOw0KPiBAQCAtNTksMjggKzU3LDI3IEBAIF9fcnRlX3N0YWNrX3N0ZF9w dXNoKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKg0KPiBjb25zdCAqb2JqX3RhYmxlLA0KPiAg ICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgcG9wcGVkIChlaXRoZXIgMCBvciAqbiopLg0K PiAgICovDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gLV9f cnRlX3N0YWNrX3N0ZF9wb3Aoc3RydWN0IHJ0ZV9zdGFjayAqcywgdm9pZCAqKm9ial90YWJsZSwg dW5zaWduZWQNCj4gaW50IG4pDQo+ICtfX3J0ZV9zdGFja19zdGRfcG9wKHN0cnVjdCBydGVfc3Rh Y2sgKnMsIHZvaWQgKiogX19ydGVfcmVzdHJpY3QNCj4gb2JqX3RhYmxlLCB1bnNpZ25lZCBpbnQg bikNCj4gIHsNCj4gLQlzdHJ1Y3QgcnRlX3N0YWNrX3N0ZCAqc3RhY2sgPSAmcy0+c3RhY2tfc3Rk Ow0KPiAtCXVuc2lnbmVkIGludCBpbmRleCwgbGVuOw0KPiAtCXZvaWQgKipjYWNoZV9vYmpzOw0K PiArCXN0cnVjdCBydGVfc3RhY2tfc3RkICogX19ydGVfcmVzdHJpY3Qgc3RhY2sgPSAmcy0+c3Rh Y2tfc3RkOw0KPiArCXVuc2lnbmVkIGludCBpbmRleDsNCj4gKwl2b2lkICoqIF9fcnRlX3Jlc3Ry aWN0IHN0YWNrX29ianM7DQo+IA0KPiAgCXJ0ZV9zcGlubG9ja19sb2NrKCZzdGFjay0+bG9jayk7 DQo+IA0KPiAgCWlmICh1bmxpa2VseShuID4gc3RhY2stPmxlbikpIHsNCj4gKwkJLyogSW5zdWZm aWNpZW50IG9iamVjdHMgaW4gdGhlIHN0YWNrLiAqLw0KPiAgCQlydGVfc3BpbmxvY2tfdW5sb2Nr KCZzdGFjay0+bG9jayk7DQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+IC0JY2FjaGVfb2Jq cyA9IHN0YWNrLT5vYmpzOw0KPiAtDQo+IC0JZm9yIChpbmRleCA9IDAsIGxlbiA9IHN0YWNrLT5s ZW4gLSAxOyBpbmRleCA8IG47DQo+IC0JCQkrK2luZGV4LCBsZW4tLSwgb2JqX3RhYmxlKyspDQo+ IC0JCSpvYmpfdGFibGUgPSBjYWNoZV9vYmpzW2xlbl07DQo+IC0NCj4gKwkvKiBQb3Agb2JqZWN0 cyBmcm9tIHRoZSBzdGFjayAqLw0KPiArCXN0YWNrX29ianMgPSAmc3RhY2stPm9ianNbc3RhY2st Pmxlbl07DQo+ICAJc3RhY2stPmxlbiAtPSBuOw0KPiAtCXJ0ZV9zcGlubG9ja191bmxvY2soJnN0 YWNrLT5sb2NrKTsNCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKQ0KPiAr CQkqb2JqX3RhYmxlKysgPSAqLS1zdGFja19vYmpzOw0KPiANCj4gKwlydGVfc3BpbmxvY2tfdW5s b2NrKCZzdGFjay0+bG9jayk7DQo+ICAJcmV0dXJuIG47DQo+ICB9DQo+IA0KPiAtLQ0KPiAyLjQz LjANCg0K