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 2D45243B73; Thu, 22 Feb 2024 10:22:28 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0110E402DA; Thu, 22 Feb 2024 10:22:28 +0100 (CET) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id A624B40281 for ; Thu, 22 Feb 2024 10:22:26 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id 82C312011D; Thu, 22 Feb 2024 10:22:24 +0100 (CET) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: RE: [RFC v3 1/6] eal: add static per-lcore memory allocation facility X-MimeOLE: Produced By Microsoft Exchange V6.5 Date: Thu, 22 Feb 2024 10:22:21 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F249@smartserver.smartshare.dk> In-Reply-To: <20240220084908.488252-2-mattias.ronnblom@ericsson.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [RFC v3 1/6] eal: add static per-lcore memory allocation facility Thread-Index: Adpj2smcCE0nrwN3RdOK742Fe+NkXgBhihxg References: <20240219094036.485727-2-mattias.ronnblom@ericsson.com> <20240220084908.488252-1-mattias.ronnblom@ericsson.com> <20240220084908.488252-2-mattias.ronnblom@ericsson.com> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , Cc: , "Stephen Hemminger" 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 PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOm1hdHRpYXMucm9ubmJsb21AZXJpY3Nz b24uY29tXQ0KPiBTZW50OiBUdWVzZGF5LCAyMCBGZWJydWFyeSAyMDI0IDA5LjQ5DQo+IA0KPiBJ bnRyb2R1Y2UgRFBESyBwZXItbGNvcmUgaWQgdmFyaWFibGVzLCBvciBsY29yZSB2YXJpYWJsZXMg Zm9yIHNob3J0Lg0KPiANCj4gQW4gbGNvcmUgdmFyaWFibGUgaGFzIG9uZSB2YWx1ZSBmb3IgZXZl cnkgY3VycmVudCBhbmQgZnV0dXJlIGxjb3JlDQo+IGlkLWVxdWlwcGVkIHRocmVhZC4NCj4gDQo+ IFRoZSBwcmltYXJ5IDxydGVfbGNvcmVfdmFyLmg+IHVzZSBjYXNlIGlzIGZvciBzdGF0aWNhbGx5 IGFsbG9jYXRpbmcNCj4gc21hbGwgY2h1bmtzIG9mIG9mdGVuLXVzZWQgZGF0YSwgd2hpY2ggaXMg cmVsYXRlZCBsb2dpY2FsbHksIGJ1dCB3aGVyZQ0KPiB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgYmVu ZWZpdHMgdG8gcmVhcCBmcm9tIGhhdmluZyB1cGRhdGVzIGJlaW5nIGxvY2FsDQo+IHRvIGFuIGxj b3JlLg0KPiANCj4gTGNvcmUgdmFyaWFibGVzIGFyZSBzaW1pbGFyIHRvIHRocmVhZC1sb2NhbCBz dG9yYWdlIChUTFMsIGUuZy4sIEMxMQ0KPiBfVGhyZWFkX2xvY2FsKSwgYnV0IGRlY291cGxpbmcg dGhlIHZhbHVlcycgbGlmZSB0aW1lIHdpdGggdGhhdCBvZiB0aGUNCj4gdGhyZWFkcy4NCj4gDQo+ IExjb3JlIHZhcmlhYmxlcyBhcmUgYWxzbyBzaW1pbGFyIGluIHRlcm1zIG9mIGZ1bmN0aW9uYWxp dHkgcHJvdmlkZWQgYnkNCj4gRnJlZUJTRCBrZXJuZWwncyBEUENQVV8qKCkgZmFtaWx5IG9mIG1h Y3JvcyBhbmQgdGhlIGFzc29jaWF0ZWQNCj4gYnVpbGQtdGltZSBtYWNoaW5lcnkuIERQQ1BVIHVz ZXMgbGlua2VyIHNjcmlwdHMsIHdoaWNoIGVmZmVjdGl2ZWx5DQo+IHByZXZlbnRzIHRoZSByZXVz ZSBvZiBpdHMsIG90aGVyd2lzZSBzZWVtaW5nbHkgdmlhYmxlLCBhcHByb2FjaC4NCj4gDQo+IFRo ZSBjdXJyZW50bHktcHJldmFpbGluZyB3YXkgdG8gc29sdmUgdGhlIHNhbWUgcHJvYmxlbSBhcyBs Y29yZQ0KPiB2YXJpYWJsZXMgaXMgdG8ga2VlcCBhIG1vZHVsZSdzIHBlci1sY29yZSBkYXRhIGFz IFJURV9NQVhfTENPUkUtc2l6ZWQNCj4gYXJyYXkgb2YgY2FjaGUtYWxpZ25lZCwgUlRFX0NBQ0hF X0dVQVJEZWQgc3RydWN0cy4gVGhlIGJlbmVmaXQgb2YNCj4gbGNvcmUgdmFyaWFibGVzIG92ZXIg dGhpcyBhcHByb2FjaCBpcyB0aGF0IGRhdGEgcmVsYXRlZCB0byB0aGUgc2FtZQ0KPiBsY29yZSBu b3cgaXMgY2xvc2UgKHNwYXRpYWxseSwgaW4gbWVtb3J5KSwgcmF0aGVyIHRoYW4gZGF0YSB1c2Vk IGJ5DQo+IHRoZSBzYW1lIG1vZHVsZSwgd2hpY2ggaW4gdHVybiBhdm9pZCBleGNlc3NpdmUgdXNl IG9mIHBhZGRpbmcsDQo+IHBvbGx1dGluZyBjYWNoZXMgd2l0aCB1bnVzZWQgZGF0YS4NCj4gDQo+ IFJGQyB2MzoNCj4gICogUmVwbGFjZSB1c2Ugb2YgR0NDLXNwZWNpZmljIGFsaWdub2YoPGV4cHJl c3Npb24+KSB3aXRoIGFsaWdub2YoPHR5cGU+KS4NCj4gICogVXBkYXRlIGV4YW1wbGUgdG8gcmVm bGVjdCBGT1JFQUNIIG1hY3JvIG5hbWUgY2hhbmdlIChpbiBSRkMgdjIpLg0KPiANCj4gUkZDIHYy Og0KPiAgKiBVc2UgYWxpZ25vZiB0byBkZXJpdmUgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gKE1v cnRlbiBCcsO4cnVwKQ0KPiAgKiBDaGFuZ2UgbmFtZSBvZiBGT1JFQUNIIHRvIG1ha2UgaXQgZGlz dGluY3QgZnJvbSA8cnRlX2xjb3JlLmg+J3MNCj4gICAgKnBlci1FQUwtdGhyZWFkKiBSVEVfTENP UkVfRk9SRUFDSCgpLiAoTW9ydGVuIEJyw7hydXApDQo+ICAqIEFsbG93IHVzZXItc3BlY2lmaWVk IGFsaWdubWVudCwgYnV0IGxpbWl0IG1heCB0byBjYWNoZSBsaW5lIHNpemUuDQo+IA0KPiBTaWdu ZWQtb2ZmLWJ5OiBNYXR0aWFzIFLDtm5uYmxvbSA8bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5j b20+DQo+IC0tLQ0KPiAgY29uZmlnL3J0ZV9jb25maWcuaCAgICAgICAgICAgICAgICAgICB8ICAg MSArDQo+ICBkb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kICAgICAgICAgICAgIHwgICAxICsNCj4g IGxpYi9lYWwvY29tbW9uL2VhbF9jb21tb25fbGNvcmVfdmFyLmMgfCAgODIgKysrKysrDQo+ICBs aWIvZWFsL2NvbW1vbi9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICAxICsNCj4gIGxpYi9lYWwv aW5jbHVkZS9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEgKw0KPiAgbGliL2VhbC9pbmNsdWRl L3J0ZV9sY29yZV92YXIuaCAgICAgICB8IDM3NSArKysrKysrKysrKysrKysrKysrKysrKysrKw0K PiAgbGliL2VhbC92ZXJzaW9uLm1hcCAgICAgICAgICAgICAgICAgICB8ICAgNCArDQo+ICA3IGZp bGVzIGNoYW5nZWQsIDQ2NSBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2VhbC9jb21tb24vZWFsX2NvbW1vbl9sY29yZV92YXIuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9lYWwvaW5jbHVkZS9ydGVfbGNvcmVfdmFyLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9jb25m aWcvcnRlX2NvbmZpZy5oIGIvY29uZmlnL3J0ZV9jb25maWcuaA0KPiBpbmRleCBkYTI2NWQ3ZGQy Li44ODQ0ODJlNDczIDEwMDY0NA0KPiAtLS0gYS9jb25maWcvcnRlX2NvbmZpZy5oDQo+ICsrKyBi L2NvbmZpZy9ydGVfY29uZmlnLmgNCj4gQEAgLTMwLDYgKzMwLDcgQEANCj4gIC8qIEVBTCBkZWZp bmVzICovDQo+ICAjZGVmaW5lIFJURV9DQUNIRV9HVUFSRF9MSU5FUyAxDQo+ICAjZGVmaW5lIFJU RV9NQVhfSEVBUFMgMzINCj4gKyNkZWZpbmUgUlRFX01BWF9MQ09SRV9WQVIgMTA0ODU3Ng0KPiAg I2RlZmluZSBSVEVfTUFYX01FTVNFR19MSVNUUyAxMjgNCj4gICNkZWZpbmUgUlRFX01BWF9NRU1T RUdfUEVSX0xJU1QgODE5Mg0KPiAgI2RlZmluZSBSVEVfTUFYX01FTV9NQl9QRVJfTElTVCAzMjc2 OA0KPiBkaWZmIC0tZ2l0IGEvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCBiL2RvYy9hcGkvZG94 eS1hcGktaW5kZXgubWQNCj4gaW5kZXggYTZhNzY4YmQ3Yy4uYmIwNmJiN2NhMSAxMDA2NDQNCj4g LS0tIGEvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiArKysgYi9kb2MvYXBpL2RveHktYXBp LWluZGV4Lm1kDQo+IEBAIC05OCw2ICs5OCw3IEBAIFRoZSBwdWJsaWMgQVBJIGhlYWRlcnMgYXJl IGdyb3VwZWQgYnkgdG9waWNzOg0KPiAgICBbaW50ZXJydXB0c10oQHJlZiBydGVfaW50ZXJydXB0 cy5oKSwNCj4gICAgW2xhdW5jaF0oQHJlZiBydGVfbGF1bmNoLmgpLA0KPiAgICBbbGNvcmVdKEBy ZWYgcnRlX2xjb3JlLmgpLA0KPiArICBbbGNvcmUtdmFyaWJsZV0oQHJlZiBydGVfbGNvcmVfdmFy LmgpLA0KPiAgICBbcGVyLWxjb3JlXShAcmVmIHJ0ZV9wZXJfbGNvcmUuaCksDQo+ICAgIFtzZXJ2 aWNlIGNvcmVzXShAcmVmIHJ0ZV9zZXJ2aWNlLmgpLA0KPiAgICBba2VlcGFsaXZlXShAcmVmIHJ0 ZV9rZWVwYWxpdmUuaCksDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9lYWxfY29tbW9u X2xjb3JlX3Zhci5jDQo+IGIvbGliL2VhbC9jb21tb24vZWFsX2NvbW1vbl9sY29yZV92YXIuYw0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5kZmQxMWNiZDBiDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2VhbC9jb21tb24vZWFsX2NvbW1vbl9sY29yZV92 YXIuYw0KPiBAQCAtMCwwICsxLDgyIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNCBFcmljc3NvbiBBQg0KPiArICov DQo+ICsNCj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2Nv bW1vbi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9sb2cu aD4NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9sY29yZV92YXIuaD4NCj4gKw0KPiArI2luY2x1ZGUg ImVhbF9wcml2YXRlLmgiDQo+ICsNCj4gKyNkZWZpbmUgV0FSTl9USFJFU0hPTEQgNzUNCg0KSXQn cyBub3QgYW4gZXJyb3IgY29uZGl0aW9uLCBzbyA3NSAlIHNlZW1zIGxpa2UgYSBsb3cgdGhyZXNo b2xkIGZvciBXQVJOSU5HLg0KQ29uc2lkZXIgaW5jcmVhc2luZyBpdCB0byA5NSAlLCBvciBjaGFu Z2UgdGhlIGxldmVsIHRvIE5PVElDRS4NCk9yIGJvdGguDQoNCj4gKw0KPiArLyoNCj4gKyAqIEF2 b2lkIHVzaW5nIG9mZnNldCB6ZXJvLCBzaW5jZSBpdCB3b3VsZCByZXN1bHQgaW4gYSBOVUxMLXZh bHVlDQo+ICsgKiAiaGFuZGxlIiAob2Zmc2V0KSBwb2ludGVyLCB3aGljaCBpbiBwcmluY2lwbGUg YW5kIHBlciB0aGUgQVBJDQo+ICsgKiBkZWZpbml0aW9uIHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwg YnV0IG1heSBjb25mdXNlIHNvbWUgdG9vbHMgYW5kDQo+ICsgKiB1c2Vycy4NCj4gKyAqLw0KPiAr I2RlZmluZSBJTklUSUFMX09GRlNFVCAxDQo+ICsNCj4gK2NoYXIgcnRlX2xjb3JlX3ZhcltSVEVf TUFYX0xDT1JFXVtSVEVfTUFYX0xDT1JFX1ZBUl0gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gKw0K PiArc3RhdGljIHVpbnRwdHJfdCBhbGxvY2F0ZWQgPSBJTklUSUFMX09GRlNFVDsNCg0KUGxlYXNl IGFkZCBhbiBBUEkgdG8gZ2V0IHRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIGxjb3JlIHZhcmlhYmxl IG1lbW9yeS4NClRoZSBlYXN5IG9wdGlvbiBpcyB0byBtYWtlIHRoZSBhYm92ZSB2YXJpYWJsZSBw dWJsaWMgKHdpdGggYSBwcm9wZXIgbmFtZSwgZS5nLiBydGVfbGNvcmVfdmFyX2FsbG9jYXRlZCku DQoNClRoZSB0b3RhbCBhbW91bnQgb2YgbGNvcmUgdmFyaWFibGUgbWVtb3J5IGlzIGFscmVhZHkg cHVibGljOiBSVEVfTUFYX0xDT1JFX1ZBUi4NCg0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArdmVy aWZ5X2FsbG9jYXRpb24odWludHB0cl90IG5ld19hbGxvY2F0ZWQpDQo+ICt7DQo+ICsJc3RhdGlj IGJvb2wgaGFzX3dhcm5lZDsNCj4gKw0KPiArCVJURV9WRVJJRlkobmV3X2FsbG9jYXRlZCA8IFJU RV9NQVhfTENPUkVfVkFSKTsNCj4gKw0KPiArCWlmIChuZXdfYWxsb2NhdGVkID4gKFdBUk5fVEhS RVNIT0xEICogUlRFX01BWF9MQ09SRV9WQVIpIC8gMTAwICYmDQo+ICsJICAgICFoYXNfd2FybmVk KSB7DQo+ICsJCUVBTF9MT0coV0FSTklORywgIlBlci1sY29yZSBkYXRhIHVzYWdlIGhhcyBleGNl ZWRlZCAlZCUlICINCj4gKwkJCSJvZiB0aGUgbWF4aW11bSBjYXBhY2l0eSAoJWQgYnl0ZXMpIiwg V0FSTl9USFJFU0hPTEQsDQo+ICsJCQlSVEVfTUFYX0xDT1JFX1ZBUik7DQo+ICsJCWhhc193YXJu ZWQgPSB0cnVlOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgKg0KPiArbGNvcmVf dmFyX2FsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pDQo+ICt7DQo+ICsJdWludHB0cl90 IG5ld19hbGxvY2F0ZWQgPSBSVEVfQUxJR05fQ0VJTChhbGxvY2F0ZWQsIGFsaWduKTsNCj4gKw0K PiArCXZvaWQgKm9mZnNldCA9ICh2b2lkICopbmV3X2FsbG9jYXRlZDsNCj4gKw0KPiArCW5ld19h bGxvY2F0ZWQgKz0gc2l6ZTsNCj4gKw0KPiArCXZlcmlmeV9hbGxvY2F0aW9uKG5ld19hbGxvY2F0 ZWQpOw0KPiArDQo+ICsJYWxsb2NhdGVkID0gbmV3X2FsbG9jYXRlZDsNCj4gKw0KPiArCUVBTF9M T0coREVCVUcsICJBbGxvY2F0ZWQgJSJQUkl1UFRSIiBieXRlcyBvZiBwZXItbGNvcmUgZGF0YSB3 aXRoIGEgIg0KPiArCQkiJSJQUkl1UFRSIi1ieXRlIGFsaWdubWVudCIsIHNpemUsIGFsaWduKTsN Cj4gKw0KPiArCXJldHVybiBvZmZzZXQ7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgKg0KPiArcnRlX2xj b3JlX3Zhcl9hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQ0KPiArew0KPiArCS8qIEhh dmluZyB0aGUgcGVyLWxjb3JlIGJ1ZmZlciBzaXplIGFsaWduZWQgb24gY2FjaGUgbGluZXMNCj4g KwkgKiBhc3N1cmVzIGFzIHdlbGwgYXMgaGF2aW5nIHRoZSBiYXNlIHBvaW50ZXIgYWxpZ25lZCBv biBjYWNoZQ0KPiArCSAqIHNpemUgYXNzdXJlcyB0aGF0IGFsaWduZWQgb2Zmc2V0cyBhbHNvIHRy YW5zbGF0ZSB0byBhbGlnbmVkDQo+ICsJICogcG9pbnRlcnMgYWNyb3NzIGFsbCB2YWx1ZXMuDQo+ ICsJICovDQo+ICsJUlRFX0JVSUxEX0JVR19PTihSVEVfTUFYX0xDT1JFX1ZBUiAlIFJURV9DQUNI RV9MSU5FX1NJWkUgIT0gMCk7DQo+ICsJUlRFX0FTU0VSVChhbGlnbiA8PSBSVEVfQ0FDSEVfTElO RV9TSVpFKTsNCj4gKw0KPiArCS8qICcwJyBtZWFucyBhc2tpbmcgZm9yIHdvcnN0LWNhc2UgYWxp Z25tZW50IHJlcXVpcmVtZW50cyAqLw0KPiArCWlmIChhbGlnbiA9PSAwKQ0KPiArCQlhbGlnbiA9 IGFsaWdub2YobWF4X2FsaWduX3QpOw0KPiArDQo+ICsJUlRFX0FTU0VSVChydGVfaXNfcG93ZXJf b2ZfMihhbGlnbikpOw0KPiArDQo+ICsJcmV0dXJuIGxjb3JlX3Zhcl9hbGxvYyhzaXplLCBhbGln bik7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9tZXNvbi5idWlsZCBiL2xp Yi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+IGluZGV4IDIyYTYyNmJhNmYuLmQ0MTQwMzY4MGIg MTAwNjQ0DQo+IC0tLSBhL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9l YWwvY29tbW9uL21lc29uLmJ1aWxkDQo+IEBAIC0xOCw2ICsxOCw3IEBAIHNvdXJjZXMgKz0gZmls ZXMoDQo+ICAgICAgICAgICdlYWxfY29tbW9uX2ludGVycnVwdHMuYycsDQo+ICAgICAgICAgICdl YWxfY29tbW9uX2xhdW5jaC5jJywNCj4gICAgICAgICAgJ2VhbF9jb21tb25fbGNvcmUuYycsDQo+ ICsgICAgICAgICdlYWxfY29tbW9uX2xjb3JlX3Zhci5jJywNCj4gICAgICAgICAgJ2VhbF9jb21t b25fbWNmZy5jJywNCj4gICAgICAgICAgJ2VhbF9jb21tb25fbWVtYWxsb2MuYycsDQo+ICAgICAg ICAgICdlYWxfY29tbW9uX21lbW9yeS5jJywNCj4gZGlmZiAtLWdpdCBhL2xpYi9lYWwvaW5jbHVk ZS9tZXNvbi5idWlsZCBiL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWlsZA0KPiBpbmRleCBlOTRi MDU2ZDQ2Li45NDQ5MjUzZTIzIDEwMDY0NA0KPiAtLS0gYS9saWIvZWFsL2luY2x1ZGUvbWVzb24u YnVpbGQNCj4gKysrIGIvbGliL2VhbC9pbmNsdWRlL21lc29uLmJ1aWxkDQo+IEBAIC0yNyw2ICsy Nyw3IEBAIGhlYWRlcnMgKz0gZmlsZXMoDQo+ICAgICAgICAgICdydGVfa2VlcGFsaXZlLmgnLA0K PiAgICAgICAgICAncnRlX2xhdW5jaC5oJywNCj4gICAgICAgICAgJ3J0ZV9sY29yZS5oJywNCj4g KyAgICAgICAgJ3J0ZV9sY29yZV92YXIuaCcsDQo+ICAgICAgICAgICdydGVfbG9ja19hbm5vdGF0 aW9ucy5oJywNCj4gICAgICAgICAgJ3J0ZV9tYWxsb2MuaCcsDQo+ICAgICAgICAgICdydGVfbWNz bG9jay5oJywNCj4gZGlmZiAtLWdpdCBhL2xpYi9lYWwvaW5jbHVkZS9ydGVfbGNvcmVfdmFyLmgg Yi9saWIvZWFsL2luY2x1ZGUvcnRlX2xjb3JlX3Zhci5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAuLmRhNDlkNDhkN2MNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9saWIvZWFsL2luY2x1ZGUvcnRlX2xjb3JlX3Zhci5oDQo+IEBAIC0wLDAgKzEsMzc1IEBADQo+ ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmln aHQoYykgMjAyNCBFcmljc3NvbiBBQg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1JURV9MQ09S RV9WQVJfSF8NCj4gKyNkZWZpbmUgX1JURV9MQ09SRV9WQVJfSF8NCj4gKw0KPiArLyoqDQo+ICsg KiBAZmlsZQ0KPiArICoNCj4gKyAqIFJURSBQZXItbGNvcmUgaWQgdmFyaWFibGVzDQo+ICsgKg0K PiArICogVGhpcyBBUEkgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gY3JlYXRlIGFuZCBhY2Nlc3Mg cGVyLWxjb3JlIGlkDQo+ICsgKiB2YXJpYWJsZXMgaW4gYSBzcGFjZS0gYW5kIGN5Y2xlLWVmZmlj aWVudCBtYW5uZXIuDQo+ICsgKg0KPiArICogQSBwZXItbGNvcmUgaWQgdmFyaWFibGUgKG9yIGxj b3JlIHZhcmlhYmxlIGZvciBzaG9ydCkgaGFzIG9uZSB2YWx1ZQ0KPiArICogZm9yIGVhY2ggRUFM IHRocmVhZCBhbmQgcmVnaXN0ZXJlZCBub24tRUFMIHRocmVhZC4gSW4gb3RoZXIgd29yZHMsDQo+ ICsgKiB0aGVyZSdzIG9uZSBjb3B5IG9mIGl0cyB2YWx1ZSBmb3IgZWFjaCBhbmQgZXZlcnkgY3Vy cmVudCBhbmQgZnV0dXJlDQo+ICsgKiBsY29yZSBpZC1lcXVpcHBlZCB0aHJlYWQsIHdpdGggdGhl IHRvdGFsIG51bWJlciBvZiBjb3BpZXMgYW1vdW50aW5nDQo+ICsgKiB0byBcYyBSVEVfTUFYX0xD T1JFLg0KPiArICoNCj4gKyAqIEluIG9yZGVyIHRvIGFjY2VzcyB0aGUgdmFsdWVzIG9mIGFuIGxj b3JlIHZhcmlhYmxlLCBhIGhhbmRsZSBpcw0KPiArICogdXNlZC4gVGhlIHR5cGUgb2YgdGhlIGhh bmRsZSBpcyBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlJ3MgdHlwZQ0KPiArICogKGUuZy4sIGZvciBc YyB1aW50MzJfdCBsY29yZSB2YXJpYWJsZSwgdGhlIGhhbmRsZSBpcyBhDQo+ICsgKiA8Y29kZT51 aW50MzJfdCAqPC9jb2RlPi4gQSBoYW5kbGUgbWF5IGJlIHBhc3NlZCBiZXR3ZWVuIG1vZHVsZXMg YW5kDQo+ICsgKiB0aHJlYWRzIGp1c3QgbGlrZSBhbnkgcG9pbnRlciwgYnV0IGl0cyB2YWx1ZSBp cyBub3QgdGhlIGFkZHJlc3Mgb2YNCj4gKyAqIGFueSBwYXJ0aWN1bGFyIG9iamVjdCwgYnV0IHJh dGhlciBqdXN0IGFuIG9wYXF1ZSBpZGVudGlmaWVyLCBzdG9yZWQNCj4gKyAqIGluIGEgdHlwZWQg cG9pbnRlciAodG8gaW5mb3JtIHRoZSBhY2Nlc3MgbWFjcm8gdGhlIHR5cGUgb2YgdmFsdWVzKS4N Cj4gKyAqDQo+ICsgKiBAYiBDcmVhdGlvbg0KPiArICoNCj4gKyAqIEFuIGxjb3JlIHZhcmlhYmxl IGlzIGNyZWF0ZWQgaW4gdHdvIHN0ZXBzOg0KPiArICogIDEuIERlZmluZSBhIGxjb3JlIHZhcmlh YmxlIGhhbmRsZSBieSB1c2luZyBccmVmIFJURV9MQ09SRV9WQVJfSEFORExFLg0KPiArICogIDIu IEFsbG9jYXRlIGxjb3JlIHZhcmlhYmxlIHN0b3JhZ2UgYW5kIGluaXRpYWxpemUgdGhlIGhhbmRs ZSB3aXRoDQo+ICsgKiAgICAgYSB1bmlxdWUgaWRlbnRpZmllciBieSBccmVmIFJURV9MQ09SRV9W QVJfQUxMT0Mgb3INCj4gKyAqICAgICBccmVmIFJURV9MQ09SRV9WQVJfSU5JVC4gQWxsb2NhdGlv biBnZW5lcmFsbHkgb2NjdXJzIHRoZSB0aW1lIG9mDQo+ICsgKiAgICAgbW9kdWxlIGluaXRpYWxp emF0aW9uLCBidXQgbWF5IGJlIGRvbmUgYXQgYW55IHRpbWUuDQo+ICsgKg0KPiArICogQW4gbGNv cmUgdmFyaWFibGUgaXMgbm90IHRpZWQgdG8gdGhlIG93bmluZyB0aHJlYWQncyBsaWZldGltZS4g SXQncw0KPiArICogYXZhaWxhYmxlIGZvciB1c2UgYnkgYW55IHRocmVhZCBpbW1lZGlhdGVseSBh ZnRlciBoYXZpbmcgYmVlbg0KPiArICogYWxsb2NhdGVkLCBhbmQgY29udGludWVzIHRvIGJlIGF2 YWlsYWJsZSB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZg0KPiArICogdGhlIEVBTC4NCj4gKyAq DQo+ICsgKiBMY29yZSB2YXJpYWJsZXMgY2Fubm90IGFuZCBuZWVkIG5vdCBiZSBmcmVlZC4NCj4g KyAqDQo+ICsgKiBAYiBBY2Nlc3MNCj4gKyAqDQo+ICsgKiBUaGUgdmFsdWUgb2YgYW55IGxjb3Jl IHZhcmlhYmxlIGZvciBhbnkgbGNvcmUgaWQgbWF5IGJlIGFjY2Vzc2VkDQo+ICsgKiBmcm9tIGFu eSB0aHJlYWQgKGluY2x1ZGluZyB1bnJlZ2lzdGVyZWQgdGhyZWFkcyksIGJ1dCBpcyBzaG91bGQN Cj4gKyAqIGdlbmVyYWxseSBvbmx5ICpmcmVxdWVudGx5KiByZWFkIGZyb20gb3Igd3JpdHRlbiB0 byBieSB0aGUgb3duZXIuDQo+ICsgKg0KPiArICogVmFsdWVzIG9mIHRoZSBzYW1lIGxjb3JlIHZh cmlhYmxlIGJ1dCBvd25lZCBieSB0byBkaWZmZXJlbnQgbGNvcmUNCj4gKyAqIGlkcyAqbWF5KiBi ZSBmcmVxdWVudGx5IHJlYWQgb3Igd3JpdHRlbiBieSB0aGUgb3duZXJzIHdpdGhvdXQgdGhlDQo+ ICsgKiByaXNrIG9mIGZhbHNlIHNoYXJpbmcuDQo+ICsgKg0KPiArICogQW4gYXBwcm9wcmlhdGUg c3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSAoZS5nLiwgYXRvbWljcykgc2hvdWxkDQo+ICsgKiBl bXBsb3llZCB0byBhc3N1cmUgdGhlcmUgYXJlIG5vIGRhdGEgcmFjZXMgYmV0d2VlbiB0aGUgb3du aW5nDQo+ICsgKiB0aHJlYWQgYW5kIGFueSBub24tb3duZXIgdGhyZWFkcyBhY2Nlc3NpbmcgdGhl IHNhbWUgbGNvcmUgdmFyaWFibGUNCj4gKyAqIGluc3RhbmNlLg0KPiArICoNCj4gKyAqIFRoZSB2 YWx1ZSBvZiB0aGUgbGNvcmUgdmFyaWFibGUgZm9yIGEgcGFydGljdWxhciBsY29yZSBpZCBtYXkg YmUNCj4gKyAqIHJldHJpZXZlZCB3aXRoIFxyZWYgUlRFX0xDT1JFX1ZBUl9MQ09SRV9HRVQuIFRv IGdldCBhIHBvaW50ZXIgdG8gdGhlDQo+ICsgKiBzYW1lIG9iamVjdCwgdXNlIFxyZWYgUlRFX0xD T1JFX1ZBUl9MQ09SRV9QVFIuDQo+ICsgKg0KPiArICogVG8gbW9kaWZ5IHRoZSB2YWx1ZSBvZiBh biBsY29yZSB2YXJpYWJsZSBmb3IgYSBwYXJ0aWN1bGFyIGxjb3JlIGlkLA0KPiArICogZWl0aGVy IGFjY2VzcyB0aGUgb2JqZWN0IHRocm91Z2ggdGhlIHBvaW50ZXIgcmV0cmlldmVkIGJ5IFxyZWYN Cj4gKyAqIFJURV9MQ09SRV9WQVJfTENPUkVfUFRSIG9yLCBmb3IgcHJpbWl0aXZlIHR5cGVzLCB1 c2UgXHJlZg0KPiArICogUlRFX0xDT1JFX1ZBUl9MQ09SRV9TRVQuDQo+ICsgKg0KPiArICogVGhl IGFjY2VzcyBtYWNyb3MgZWFjaCBoYXMgYSBzaG9ydC1oYW5kIHdoaWNoIG1heSBiZSB1c2VkIGJ5 IGFuIEVBTA0KPiArICogdGhyZWFkIG9yIHJlZ2lzdGVyZWQgbm9uLUVBTCB0aHJlYWQgdG8gYWNj ZXNzIHRoZSBsY29yZSB2YXJpYWJsZQ0KPiArICogaW5zdGFuY2Ugb2YgaXRzIG93biBsY29yZSBp ZC4gVGhvc2UgYXJlIFxyZWYgUlRFX0xDT1JFX1ZBUl9HRVQsDQo+ICsgKiBccmVmIFJURV9MQ09S RV9WQVJfUFRSLCBhbmQgXHJlZiBSVEVfTENPUkVfVkFSX1NFVC4NCj4gKyAqDQo+ICsgKiBBbHRo b3VnaCB0aGUgaGFuZGxlIChhcyBkZWZpbmVkIGJ5IFxyZWYgUlRFX0xDT1JFX1ZBUl9IQU5ETEUp IGlzIGENCj4gKyAqIHBvaW50ZXIgd2l0aCB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2YWx1ZSwgaXQg bWF5IG5vdCBiZSBkaXJlY3RseQ0KPiArICogZGVyZWZlcmVuY2VkIGFuZCBtdXN0IGJlIHRyZWF0 ZWQgYXMgYW4gb3BhcXVlIGlkZW50aWZpZXIuIFRoZQ0KPiArICogKmlkZW50aWZpZXIqIHZhbHVl IGlzIGNvbW1vbiBhY3Jvc3MgYWxsIGxjb3JlIGlkcy4NCj4gKyAqDQo+ICsgKiBAYiBTdG9yYWdl DQo+ICsgKg0KPiArICogQW4gbGNvcmUgdmFyaWFibGUncyB2YWx1ZXMgbWF5IGJ5IG9mIGEgcHJp bWl0aXZlIHR5cGUgbGlrZSBcYyBpbnQsDQo+ICsgKiBidXQgd291bGQgbW9yZSB0eXBpY2FsbHkg YmUgYSBcYyBzdHJ1Y3QuIEFuIGFwcGxpY2F0aW9uIG1heSBjaG9vc2UNCj4gKyAqIHRvIGRlZmlu ZSBhbiBsY29yZSB2YXJpYWJsZSwgd2hpY2ggaXQgdGhlbiBpdCBnb2VzIG9uIHRvIG5ldmVyDQo+ ICsgKiBhbGxvY2F0ZS4NCj4gKyAqDQo+ICsgKiBUaGUgbGNvcmUgdmFyaWFibGUgaGFuZGxlIGlu dHJvZHVjZXMgYSBwZXItdmFyaWFibGUgKG5vdA0KPiArICogcGVyLXZhbHVlL3Blci1sY29yZSBp ZCkgb3ZlcmhlYWQgb2YgXGMgc2l6ZW9mKHZvaWQgKikgYnl0ZXMsIHNvDQo+ICsgKiB0aGVyZSBh cmUgc29tZSBtZW1vcnkgZm9vdHByaW50IGdhaW5zIHRvIGJlIG1hZGUgYnkgb3JnYW5pemluZyBh bGwNCj4gKyAqIHBlci1sY29yZSBpZCBkYXRhIGZvciBhIHBhcnRpY3VsYXIgbW9kdWxlIGFzIG9u ZSBsY29yZSB2YXJpYWJsZQ0KPiArICogKGUuZy4sIGFzIGEgc3RydWN0KS4NCj4gKyAqDQo+ICsg KiBUaGUgc3VtIG9mIGFsbCBsY29yZSB2YXJpYWJsZXMsIHBsdXMgYW55IHBhZGRpbmcgcmVxdWly ZWQsIG11c3QgYmUNCj4gKyAqIGxlc3MgdGhhbiB0aGUgRFBESyBidWlsZC10aW1lIGNvbnN0YW50 IFxjIFJURV9NQVhfTENPUkVfVkFSLiBBDQo+ICsgKiB2aW9sYXRpb24gb2YgdGhpcyBtYXhpbXVt IHJlc3VsdHMgaW4gdGhlIHByb2Nlc3MgYmVpbmcgdGVybWluYXRlZC4NCj4gKyAqDQo+ICsgKiBJ dCdzIHJlYXNvbmFibGUgdG8gZXhwZWN0ZWQgdGhhdCBcYyBSVEVfTUFYX0xDT1JFX1ZBUiBpcyBv biB0aGUNCj4gKyAqIHNhbWUgb3JkZXIgb2YgbWFnbml0dWRlIGluIHNpemUgYXMgYSB0aHJlYWQg c3RhY2suDQo+ICsgKg0KPiArICogVGhlIGxjb3JlIHZhcmlhYmxlIHN0b3JhZ2UgYnVmZmVycyBh cmUga2VwdCBpbiB0aGUgQlNTIHNlY3Rpb24gaW4NCj4gKyAqIHRoZSByZXN1bHRpbmcgYmluYXJ5 LCB3aGVyZSBkYXRhIGdlbmVyYWxseSBpc24ndCBtYXBwZWQgaW4gdW50aWwNCj4gKyAqIGl0J3Mg YWNjZXNzZWQuIFRoaXMgbWVhbnMgdGhhdCB1bnVzZWQgcG9ydGlvbnMgb2YgdGhlIGxjb3JlDQo+ ICsgKiB2YXJpYWJsZSBzdG9yYWdlIGFyZWEgd2lsbCBub3Qgb2NjdXB5IGFueSBwaHlzaWNhbCBt ZW1vcnkgKHdpdGggYQ0KPiArICogZ3JhbnVsYXJpdHkgb2YgdGhlIG1lbW9yeSBwYWdlIHNpemUg W3VzdWFsbHkgNCBrQl0pLg0KPiArICoNCj4gKyAqIExjb3JlIHZhcmlhYmxlcyBzaG91bGQgZ2Vu ZXJhbGx5ICpub3QqIGJlIFxyZWYgX19ydGVfY2FjaGVfYWxpZ25lZA0KPiArICogYW5kIG5lZWQg Km5vdCogaW5jbHVkZSBhIFxyZWYgUlRFX0NBQ0hFX0dVQVJEIGZpZWxkLCBzaW5jZSB0aGUgdXNl DQo+ICsgKiBvZiB0aGVzZSBjb25zdHJ1Y3RzIGFyZSBkZXNpZ25lZCB0byBhdm9pZCBmYWxzZSBz aGFyaW5nLiBJbiB0aGUNCj4gKyAqIGNhc2Ugb2YgYW4gbGNvcmUgdmFyaWFibGUgaW5zdGFuY2Us IGFsbCBuZWFyYnkgZGF0YSBzdHJ1Y3R1cmVzDQo+ICsgKiBzaG91bGQgYWxtb3N0LWFsd2F5cyBi ZSB3cml0dGVuIHRvIGJ5IGEgc2luZ2xlIHRocmVhZCAodGhlIGxjb3JlDQo+ICsgKiB2YXJpYWJs ZSBvd25lcikuIEFkZGluZyBwYWRkaW5nIHdpbGwgaW5jcmVhc2UgdGhlIGVmZmVjdGl2ZSBtZW1v cnkNCj4gKyAqIHdvcmtpbmcgc2V0IHNpemUsIGFuZCBwb3RlbnRpYWxseSByZWR1Y2luZyBwZXJm b3JtYW5jZS4NCj4gKyAqDQo+ICsgKiBAYiBFeGFtcGxlDQo+ICsgKg0KPiArICogQmVsb3cgaXMg YW4gZXhhbXBsZSBvZiB0aGUgdXNlIG9mIGFuIGxjb3JlIHZhcmlhYmxlOg0KPiArICoNCj4gKyAq IFxjb2Rley5jfQ0KPiArICogc3RydWN0IGZvb19sY29yZV9zdGF0ZSB7DQo+ICsgKiAgICAgICAg IGludCBhOw0KPiArICogICAgICAgICBsb25nIGI7DQo+ICsgKiB9Ow0KPiArICoNCj4gKyAqIHN0 YXRpYyBSVEVfTENPUkVfVkFSX0hBTkRMRShzdHJ1Y3QgZm9vX2xjb3JlX3N0YXRlLCBsY29yZV9z dGF0ZXMpOw0KPiArICoNCj4gKyAqIGxvbmcgZm9vX2dldF9hX3BsdXNfYih2b2lkKQ0KPiArICog ew0KPiArICogICAgICAgICBzdHJ1Y3QgZm9vX2xjb3JlX3N0YXRlICpzdGF0ZSA9IFJURV9MQ09S RV9WQVJfUFRSKGxjb3JlX3N0YXRlcyk7DQo+ICsgKg0KPiArICogICAgICAgICByZXR1cm4gc3Rh dGUtPmEgKyBzdGF0ZS0+YjsNCj4gKyAqIH0NCj4gKyAqDQo+ICsgKiBSVEVfSU5JVChydGVfZm9v X2luaXQpDQo+ICsgKiB7DQo+ICsgKiAgICAgICAgIHVuc2lnbmVkIGludCBsY29yZV9pZDsNCg0K VGhpcyB2YXJpYWJsZSBpcyBwYXJ0IG9mIFJURV9MQ09SRV9WQVJfRk9SRUFDSF9WQUxVRSgpLCBh bmQgY2FuIGJlIHJlbW92ZWQgZnJvbSBoZXJlLg0KDQo+ICsgKg0KPiArICogICAgICAgICBSVEVf TENPUkVfVkFSX0FMTE9DKGZvb19zdGF0ZSk7DQoNClR5cG86IGZvb19zdGF0ZSAtPiBsY29yZV9z dGF0ZXMNCg0KPiArICoNCj4gKyAqICAgICAgICAgc3RydWN0IGZvb19sY29yZV9zdGF0ZSAqc3Rh dGU7DQo+ICsgKiAgICAgICAgIFJURV9MQ09SRV9WQVJfRk9SRUFDSF9WQUxVRShsY29yZV9zdGF0 ZXMpIHsNCg0KVHlwbzoNClJURV9MQ09SRV9WQVJfRk9SRUFDSF9WQUxVRShsY29yZV9zdGF0ZXMp DQotPg0KUlRFX0xDT1JFX1ZBUl9GT1JFQUNIX1ZBTFVFKHN0YXRlLCBsY29yZV9zdGF0ZXMpDQoN Cj4gKyAqICAgICAgICAgICAgICAgICAoaW5pdGlhbGl6ZSAnc3RhdGUnKQ0KPiArICogICAgICAg ICB9DQo+ICsgKg0KPiArICogICAgICAgICAob3RoZXIgaW5pdGlhbGl6YXRpb24pDQo+ICsgKiB9 DQo+ICsgKiBcZW5kY29kZQ0KPiArICoNCj4gKyAqDQo+ICsgKiBAYiBBbHRlcm5hdGl2ZXMNCj4g KyAqDQo+ICsgKiBMY29yZSB2YXJpYWJsZXMgYXJlIGRlc2lnbmVkIHRvIHJlcGxhY2UgYSBwYXR0 ZXJuIGV4ZW1wbGlmaWVkIGJlbG93Og0KPiArICogXGNvZGV7LmN9DQo+ICsgKiBzdHJ1Y3QgZm9v X2xjb3JlX3N0YXRlIHsNCj4gKyAqICAgICAgICAgaW50IGE7DQo+ICsgKiAgICAgICAgIGxvbmcg YjsNCj4gKyAqICAgICAgICAgUlRFX0NBQ0hFX0dVQVJEOw0KPiArICogfSBfX3J0ZV9jYWNoZV9h bGlnbmVkOw0KPiArICoNCj4gKyAqIHN0YXRpYyBzdHJ1Y3QgZm9vX2xjb3JlX3N0YXRlIGxjb3Jl X3N0YXRlc1tSVEVfTUFYX0xDT1JFXTsNCj4gKyAqIFxlbmRjb2RlDQo+ICsgKg0KPiArICogVGhp cyBzY2hlbWUgaXMgc2ltcGxlIGFuZCBlZmZlY3RpdmUsIGJ1dCBoYXMgb25lIGRyYXdiYWNrOiB0 aGUgZGF0YQ0KPiArICogaXMgb3JnYW5pemVkIHNvIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIGFs bCBsY29yZXMgZm9yIGEgcGFydGljdWxhcg0KPiArICogbW9kdWxlIGlzIGtlcHQgY2xvc2UgaW4g bWVtb3J5LiBBdCBhIGJhcmUgbWluaW11bSwgdGhpcyBmb3JjZXMgdGhlDQo+ICsgKiB1c2Ugb2Yg Y2FjaGUtbGluZSBhbGlnbm1lbnQgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gV2l0aCBDUFUNCj4g KyAqIGhhcmR3YXJlIHByZWZldGNoaW5nIGFuZCBtZW1vcnkgbG9hZHMgcmVzdWx0aW5nIGZyb20g c3BlY3VsYXRpdmUNCj4gKyAqIGV4ZWN1dGlvbiAoZnVuY3Rpb25zIHdoaWNoIHNlZW1pbmdseSBh cmUgZ2V0dGluZyBtb3JlIGVhZ2VyIGZhc3Rlcg0KPiArICogdGhhbiB0aGV5IGFyZSBnZXR0aW5n IG1vcmUgaW50ZWxsaWdlbnQpLCBvbmUgb3IgbW9yZSAiZ3VhcmQiIGNhY2hlDQo+ICsgKiBsaW5l cyBtYXkgYmUgcmVxdWlyZWQgdG8gc2VwYXJhdGUgb25lIGxjb3JlJ3MgZGF0YSBmcm9tIGFub3Ro ZXIncy4NCj4gKyAqDQo+ICsgKiBMY29yZSB2YXJpYWJsZXMgaGFzIHRoZSB1cHNpZGUgb2Ygd29y a2luZyB3aXRoLCBub3QgYWdhaW5zdCwgdGhlDQo+ICsgKiBDUFUncyBhc3N1bXB0aW9ucyBhbmQg Zm9yIGV4YW1wbGUgbmV4dC1saW5lIHByZWZldGNoZXJzIG1heSB3ZWxsDQo+ICsgKiB3b3JrIHRo ZSB3YXkgaXRzIGRlc2lnbmVycyBpbnRlbmRlZCAoaS5lLiwgdG8gdGhlIGJlbmVmaXQsIG5vdA0K PiArICogZGV0cmltZW50LCBvZiBzeXN0ZW0gcGVyZm9ybWFuY2UpLg0KPiArICoNCj4gKyAqIEFu b3RoZXIgYWx0ZXJuYXRpdmUgdG8gXHJlZiBydGVfbGNvcmVfdmFyLmggaXMgdGhlIFxyZWYNCj4g KyAqIHJ0ZV9wZXJfbGNvcmUuaCBBUEksIHdoaWNoIG1ha2UgdXNlIG9mIHRocmVhZC1sb2NhbCBz dG9yYWdlIChUTFMsDQo+ICsgKiBlLmcuLCBHQ0MgX190aHJlYWQgb3IgQzExIF9UaHJlYWRfbG9j YWwpLiBUaGUgbWFpbiBkaWZmZXJlbmNlcw0KPiArICogYmV0d2VlbiBieSB1c2luZyB0aGUgdmFy aW91cyBmb3JtcyBvZiBUTFMgKGUuZy4sIFxyZWYNCj4gKyAqIFJURV9ERUZJTkVfUEVSX0xDT1JF IG9yIF9UaHJlYWRfbG9jYWwpIGFuZCB0aGUgdXNlIG9mIGxjb3JlDQo+ICsgKiB2YXJpYWJsZXMg YXJlOg0KPiArICoNCj4gKyAqICAgKiBUaGUgZXhpc3RlbmNlIGFuZCBub24tZXhpc3RlbmNlIG9m IGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlDQo+ICsgKiAgICAgaW5zdGFuY2UgZm9sbG93IHRoYXQg b2YgcGFydGljdWxhciB0aHJlYWQncy4gVGhlIGRhdGEgY2Fubm90IGJlDQo+ICsgKiAgICAgYWNj ZXNzZWQgYmVmb3JlIHRoZSB0aHJlYWQgaGFzIGJlZW4gY3JlYXRlZCwgbm9yIGFmdGVyIGl0IGhh cw0KPiArICogICAgIGV4aXRlZC4gT25lIGVmZmVjdCBvZiB0aGlzIGlzIHRocmVhZC1sb2NhbCB2 YXJpYWJsZXMgbXVzdA0KPiArICogICAgIGluaXRpYWxpemVkIGluIGEgImxhenkiIG1hbm5lciAo ZS5nLiwgYXQgdGhlIHBvaW50IG9mIHRocmVhZA0KPiArICogICAgIGNyZWF0aW9uKS4gTGNvcmUg dmFyaWFibGVzIG1heSBiZSBhY2Nlc3NlZCBpbW1lZGlhdGVseSBhZnRlcg0KPiArICogICAgIGhh dmluZyBiZWVuIGFsbG9jYXRlZCAod2hpY2ggaXMgdXN1YWxseSBwcmlvciBhbnkgdGhyZWFkIGJl eW9uZA0KPiArICogICAgIHRoZSBtYWluIHRocmVhZCBpcyBydW5uaW5nKS4NCj4gKyAqICAgKiBB IHRocmVhZC1sb2NhbCB2YXJpYWJsZSBpcyBkdXBsaWNhdGVkIGFjcm9zcyBhbGwgdGhyZWFkcyBp biB0aGUNCj4gKyAqICAgICBwcm9jZXNzLCBpbmNsdWRpbmcgdW5yZWdpc3RlcmVkIG5vbi1FQUwg dGhyZWFkcyAoaS5lLiwNCj4gKyAqICAgICAicmVndWxhciIgdGhyZWFkcykuIEZvciBEUERLIGFw cGxpY2F0aW9ucyBoZWF2aWx5IHJlbHlpbmcgb24NCj4gKyAqICAgICBtdWx0aS10aHJlYWRpbmcg KGluIGNvbmp1bmN0aW9uIHRvIERQREsncyAib25lIHRocmVhZCBwZXIgY29yZSINCj4gKyAqICAg ICBwYXR0ZXJuKSwgZWl0aGVyIGJ5IGhhdmluZyBtYW55IGNvbmN1cnJlbnQgdGhyZWFkcyBvcg0K PiArICogICAgIGNyZWF0aW5nL2Rlc3Ryb3lpbmcgdGhyZWFkcyBhdCBhIGhpZ2ggcmF0ZSwgYW4g ZXhjZXNzaXZlIHVzZSBvZg0KPiArICogICAgIHRocmVhZC1sb2NhbCB2YXJpYWJsZXMgbWF5IGNh dXNlIGluZWZmaWNpZW5jaWVzIChlLmcuLA0KPiArICogICAgIGluY3JlYXNlZCB0aHJlYWQgY3Jl YXRpb24gb3ZlcmhlYWQgZHVlIHRvIHRocmVhZC1sb2NhbCBzdG9yYWdlDQo+ICsgKiAgICAgaW5p dGlhbGl6YXRpb24gb3IgaW5jcmVhc2VkIHRvdGFsIFJBTSBmb290cHJpbnQgdXNhZ2UpLiBMY29y ZQ0KPiArICogICAgIHZhcmlhYmxlcyAqb25seSogZXhpc3QgZm9yIHRocmVhZHMgd2l0aCBhbiBs Y29yZSBpZCwgYW5kIHRodXMNCj4gKyAqICAgICBub3QgZm9yIHN1Y2ggInJlZ3VsYXIiIHRocmVh ZHMuDQo+ICsgKiAgICogSWYgZGF0YSBpbiB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtYXkgYmUgc2hh cmVkIGJldHdlZW4gdGhyZWFkcw0KPiArICogICAgIChpLmUuLCBjYW4gYSBwb2ludGVyIHRvIGEg dGhyZWFkLWxvY2FsIHZhcmlhYmxlIGJlIHBhc3NlZCB0bw0KPiArICogICAgIGFuZCBzdWNjZXNz ZnVsbHkgZGVyZWZlcmVuY2VkIGJ5IG5vbi1vd25pbmcgdGhyZWFkKSBkZXBlbmRzIG9uDQo+ICsg KiAgICAgdGhlIGRldGFpbHMgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbi4gV2l0aCBHQ0MgX190 aHJlYWQgYW5kDQo+ICsgKiAgICAgR0NDIF9UaHJlYWRfbG9jYWwsIHN1Y2ggZGF0YSBzaGFyaW5n IGlzIHN1cHBvcnRlZC4gSW4gdGhlIEMxMQ0KPiArICogICAgIHN0YW5kYXJkLCB0aGUgcmVzdWx0 IG9mIGFjY2Vzc2luZyBhbm90aGVyIHRocmVhZCdzDQo+ICsgKiAgICAgX1RocmVhZF9sb2NhbCBv YmplY3QgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gTGNvcmUgdmFyaWFibGUNCj4gKyAqICAg ICBpbnN0YW5jZXMgbWF5IGJlIGFjY2Vzc2VkIHJlbGlhYmx5IGJ5IGFueSB0aHJlYWQuDQo+ICsg Ki8NCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ICtleHRlcm4gIkMiIHsNCj4gKyNlbmRp Zg0KPiArDQo+ICsjaW5jbHVkZSA8c3RkZGVmLmg+DQo+ICsjaW5jbHVkZSA8c3RkYWxpZ24uaD4N Cj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4gKyNpbmNsdWRlIDxydGVfY29uZmln Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ICsNCj4gKy8qKg0KPiArICogR2l2ZW4g dGhlIGxjb3JlIHZhcmlhYmxlIHR5cGUsIHByb2R1Y2VzIHRoZSB0eXBlIG9mIHRoZSBsY29yZQ0K PiArICogdmFyaWFibGUgaGFuZGxlLg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJf SEFORExFX1RZUEUodHlwZSkJCVwNCj4gKwl0eXBlICoNCg0KVGhpcyBtYWNybyBzZWVtcyBzdXBl cmZsdW91cy4NCkluIFJURV9MQ09SRV9WQVJfSEFORExFKHR5cGUsIG5hbWUpIGp1c3QgdXNlOg0K IHR5cGUgKiBuYW1lDQpBcmUgdGhlcmUgb3RoZXIgdXNlIGNhc2VzIGZvciBpdD8NCg0KPiArDQo+ ICsvKioNCj4gKyAqIERlZmluZSBhIGxjb3JlIHZhcmlhYmxlIGhhbmRsZS4NCj4gKyAqDQo+ICsg KiBUaGlzIG1hY3JvIGRlZmluZXMgYSB2YXJpYWJsZSB3aGljaCBpcyB1c2VkIGFzIGEgaGFuZGxl IHRvIGFjY2Vzcw0KPiArICogdGhlIHZhcmlvdXMgcGVyLWxjb3JlIGlkIGluc3RhbmNlcyBvZiBh IHBlci1sY29yZSBpZCB2YXJpYWJsZS4NCj4gKyAqDQo+ICsgKiBUaGUgYWltIHdpdGggdGhpcyBt YWNybyBpcyB0byBtYWtlIGNsZWFyIGF0IHRoZSBwb2ludCBvZg0KPiArICogZGVjbGFyYXRpb24g dGhhdCB0aGlzIGlzIGFuIGxjb3JlIGhhbmRsZXIsIHJhdGhlciB0aGFuIGEgcmVndWxhcg0KPiAr ICogcG9pbnRlci4NCj4gKyAqDQo+ICsgKiBBZGQgQGIgc3RhdGljIGFzIGEgcHJlZml4IGluIGNh c2UgdGhlIGxjb3JlIHZhcmlhYmxlIGFyZSBvbmx5IHRvIGJlDQo+ICsgKiBhY2Nlc3NlZCBmcm9t IGEgcGFydGljdWxhciB0cmFuc2xhdGlvbiB1bml0Lg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9M Q09SRV9WQVJfSEFORExFKHR5cGUsIG5hbWUpCVwNCj4gKwlSVEVfTENPUkVfVkFSX0hBTkRMRV9U WVBFKHR5cGUpIG5hbWUNCg0KVGhpbmtpbmcgb3V0IGxvdWQgaGVyZS4uLg0KQ29uc2lkZXIgaWYg dGhpcyBuYW1lIHNob3VsZCBiZSBtb3JlIHNpbWlsYXIgd2l0aCBSVEVfREVGSU5FX1BFUl9MQ09S RSh0eXBlLCBuYW1lKSwgZS5nLiBSVEVfREVGSU5FX0xDT1JFX1ZBUih0eXBlLCBuYW1lKSBvciBS VEVfTENPUkVfVkFSX0RFRklORSh0eXBlLCBuYW1lKS4NClVzaW5nIHRoZSBjb21tb24gcHJlZml4 IFJURV9MQ09SRV9WQVIgaXMgcHJlZmVyYWJsZS4NClVzaW5nIHRoZSB0ZXJtICJoYW5kbGUiIGlu ZGljYXRlcyB0aGF0IGl0IGlzIG9wYXF1ZSBhbmQgbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGJ5IGFu IGFsbG9jYXRpb24gZnVuY3Rpb24uDQpPbiB0aGUgb3RoZXIgaGFuZCwgdGhlICJoYW5kbGUiIGlz IG5vdCB1bmlxdWUgcGVyIHRocmVhZCwgc28gaXQncyBub3IgcmVhbGx5IGEgImhhbmRsZSIuDQoN Cj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gbGNvcmUgdmFyaWFibGUs IGFuZCBpbml0aWFsaXplIGl0cyBoYW5kbGUuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX0xDT1JF X1ZBUl9BTExPQ19TSVpFX0FMSUdOKG5hbWUsIHNpemUsIGFsaWduKQlcDQo+ICsJbmFtZSA9IHJ0 ZV9sY29yZV92YXJfYWxsb2Moc2l6ZSwgYWxpZ24pDQo+ICsNCj4gKy8qKg0KPiArICogQWxsb2Nh dGUgc3BhY2UgZm9yIGFuIGxjb3JlIHZhcmlhYmxlLCBhbmQgaW5pdGlhbGl6ZSBpdHMgaGFuZGxl LA0KPiArICogd2l0aCB2YWx1ZXMgYWxpZ25lZCBmb3IgYW55IHR5cGUgb2Ygb2JqZWN0Lg0KPiAr ICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfQUxMT0NfU0laRShuYW1lLCBzaXplKQlcDQo+ ICsJbmFtZSA9IHJ0ZV9sY29yZV92YXJfYWxsb2Moc2l6ZSwgMCkNCj4gKw0KPiArLyoqDQo+ICsg KiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gbGNvcmUgdmFyaWFibGUgb2YgdGhlIHNpemUgYW5kIGFs aWdubWVudA0KPiByZXF1aXJlbWVudHMNCj4gKyAqIHN1Z2dlc3RlZCBieSB0aGUgaGFuZGxlciBw b2ludGVyIHR5cGUsIGFuZCBpbml0aWFsaXplIGl0cyBoYW5kbGUuDQo+ICsgKi8NCj4gKyNkZWZp bmUgUlRFX0xDT1JFX1ZBUl9BTExPQyhuYW1lKQkJCQkJXA0KPiArCVJURV9MQ09SRV9WQVJfQUxM T0NfU0laRV9BTElHTihuYW1lLCBzaXplb2YoKihuYW1lKSksCQlcDQo+ICsJCQkJICAgICAgIGFs aWdub2YodHlwZW9mKCoobmFtZSkpKSkNCj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBhbiBl eHBsaWNpdGx5LXNpemVkLCBleHBsaWNpdGx5LWFsaWduZWQgbGNvcmUgdmFyaWFibGUgYnkNCj4g KyAqIG1lYW5zIG9mIGEgXHJlZiBSVEVfSU5JVCBjb25zdHJ1Y3Rvci4NCj4gKyAqLw0KPiArI2Rl ZmluZSBSVEVfTENPUkVfVkFSX0lOSVRfU0laRV9BTElHTihuYW1lLCBzaXplLCBhbGlnbikJCVwN Cj4gKwlSVEVfSU5JVChydGVfbGNvcmVfdmFyX2luaXRfICMjIG5hbWUpCQkJCVwNCj4gKwl7CQkJ CQkJCQlcDQo+ICsJCVJURV9MQ09SRV9WQVJfQUxMT0NfU0laRV9BTElHTihuYW1lLCBzaXplLCBh bGlnbik7CVwNCj4gKwl9DQo+ICsNCj4gKy8qKg0KPiArICogQWxsb2NhdGUgYW4gZXhwbGljaXRs eS1zaXplZCBsY29yZSB2YXJpYWJsZSBieSBtZWFucyBvZiBhIFxyZWYNCj4gKyAqIFJURV9JTklU IGNvbnN0cnVjdG9yLg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfSU5JVF9TSVpF KG5hbWUsIHNpemUpCQlcDQo+ICsJUlRFX0xDT1JFX1ZBUl9JTklUX1NJWkVfQUxJR04obmFtZSwg c2l6ZSwgMCkNCj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBhbiBsY29yZSB2YXJpYWJsZSBi eSBtZWFucyBvZiBhIFxyZWYgUlRFX0lOSVQgY29uc3RydWN0b3IuDQo+ICsgKi8NCj4gKyNkZWZp bmUgUlRFX0xDT1JFX1ZBUl9JTklUKG5hbWUpCQkJCQlcDQo+ICsJUlRFX0lOSVQocnRlX2xjb3Jl X3Zhcl9pbml0XyAjIyBuYW1lKQkJCQlcDQo+ICsJewkJCQkJCQkJXA0KPiArCQlSVEVfTENPUkVf VkFSX0FMTE9DKG5hbWUpOwkJCQlcDQo+ICsJfQ0KPiArDQo+ICsjZGVmaW5lIF9fUlRFX0xDT1JF X1ZBUl9MQ09SRV9QVFIobGNvcmVfaWQsIG5hbWUpCQlcDQo+ICsJKCh2b2lkICopKCZydGVfbGNv cmVfdmFyW2xjb3JlX2lkXVsodWludHB0cl90KShuYW1lKV0pKQ0KDQpUaGlzIG1hY3JvIGFsc28g c2VlbXMgc3VwZXJmbHVvdXMuDQpEb2Vzbid0IFJURV9MQ09SRV9WQVJfTENPUkVfUFRSKCkgc3Vm ZmljZT8NCg0KPiArDQo+ICsvKioNCj4gKyAqIEdldCBwb2ludGVyIHRvIGxjb3JlIHZhcmlhYmxl IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBsY29yZSBpZC4NCj4gKyAqLw0KPiArI2RlZmlu ZSBSVEVfTENPUkVfVkFSX0xDT1JFX1BUUihsY29yZV9pZCwgbmFtZSkJCQkJXA0KPiArCSgodHlw ZW9mKG5hbWUpKV9fUlRFX0xDT1JFX1ZBUl9MQ09SRV9QVFIobGNvcmVfaWQsIG5hbWUpKQ0KDQpU aGlzIHVzZXMgdHlwZSBjYXN0aW5nLg0KSSB3b25kZXIgaWYgYWRkaXRpb25hbCBidWlsZC10aW1l IHR5cGUgY2hlY2tpbmcgd291bGQgYmUgcG9zc2libGUuLi4NCk5pY2UgdG8gaGF2ZTogVGhlIGNv bXBpbGVyIHNob3VsZCBmYWlsIGlmIG5hbWUgaXMgbm90IGEgcG9pbnRlciwgYnV0IGEgc3RydWN0 IG9yIGFuIHVpbnQ2NF90LCBvciBldmVuIGFuIHVpbnRwdHJfdC4NCg0KPiArDQo+ICsvKioNCj4g KyAqIEdldCB2YWx1ZSBvZiBhIGxjb3JlIHZhcmlhYmxlIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZp ZWQgbGNvcmUgaWQuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZBUl9MQ09SRV9HRVQo bGNvcmVfaWQsIG5hbWUpCQlcDQo+ICsJKCooUlRFX0xDT1JFX1ZBUl9MQ09SRV9QVFIobGNvcmVf aWQsIG5hbWUpKSkNCg0KVGhlIGZvdXIgYWNjZXNzb3IgZnVuY3Rpb25zLCBSVEVfTENPUkVfVkFS W19MQ09SRV1fR0VUL1NFVCgpLCBzZWVtIHN1cGVyZmx1b3VzLg0KVGhleSBtYWtlIHRoZSBBUEkg c2VlbSBtb3JlIGNvbXBsZXggdGhhbiBqdXN0IHVzaW5nIFJURV9MQ09SRV9WQVJbX0xDT1JFXV9Q VFIoKSBmb3IgYWNjZXNzLg0KDQo+ICsNCj4gKy8qKg0KPiArICogU2V0IHRoZSB2YWx1ZSBvZiBh IGxjb3JlIHZhcmlhYmxlIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZpZWQgbGNvcmUgaWQuDQo+ICsg Ki8NCj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZBUl9MQ09SRV9TRVQobGNvcmVfaWQsIG5hbWUsIHZh bHVlKQkJXA0KPiArCSgqKFJURV9MQ09SRV9WQVJfTENPUkVfUFRSKGxjb3JlX2lkLCBuYW1lKSkg PSAodmFsdWUpKQ0KPiArDQo+ICsvKioNCj4gKyAqIEdldCBwb2ludGVyIHRvIGxjb3JlIHZhcmlh YmxlIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IHRocmVhZC4NCj4gKyAqDQo+ICsgKiBNYXkgb25s eSBiZSB1c2VkIGJ5IEVBTCB0aHJlYWRzIGFuZCByZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcy4N Cj4gKyAqLw0KPiArI2RlZmluZSBSVEVfTENPUkVfVkFSX1BUUihuYW1lKSBSVEVfTENPUkVfVkFS X0xDT1JFX1BUUihydGVfbGNvcmVfaWQoKSwgbmFtZSkNCj4gKw0KPiArLyoqDQo+ICsgKiBHZXQg dmFsdWUgb2YgbGNvcmUgdmFyaWFibGUgaW5zdGFuY2Ugb2YgdGhlIGN1cnJlbnQgdGhyZWFkLg0K PiArICoNCj4gKyAqIE1heSBvbmx5IGJlIHVzZWQgYnkgRUFMIHRocmVhZHMgYW5kIHJlZ2lzdGVy ZWQgbm9uLUVBTCB0aHJlYWRzLg0KPiArICovDQo+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfR0VU KG5hbWUpIFJURV9MQ09SRV9WQVJfTENPUkVfR0VUKHJ0ZV9sY29yZV9pZCgpLCBuYW1lKQ0KPiAr DQo+ICsvKioNCj4gKyAqIFNldCB2YWx1ZSBvZiBsY29yZSB2YXJpYWJsZSBpbnN0YW5jZSBvZiB0 aGUgY3VycmVudCB0aHJlYWQuDQo+ICsgKg0KPiArICogTWF5IG9ubHkgYmUgdXNlZCBieSBFQUwg dGhyZWFkcyBhbmQgcmVnaXN0ZXJlZCBub24tRUFMIHRocmVhZHMuDQo+ICsgKi8NCj4gKyNkZWZp bmUgUlRFX0xDT1JFX1ZBUl9TRVQobmFtZSwgdmFsdWUpIFwNCj4gKwlSVEVfTENPUkVfVkFSX0xD T1JFX1NFVChydGVfbGNvcmVfaWQoKSwgbmFtZSwgdmFsdWUpDQo+ICsNCj4gKy8qKg0KPiArICog SXRlcmF0ZSBvdmVyIGVhY2ggbGNvcmUgaWQncyB2YWx1ZSBmb3IgYSBsY29yZSB2YXJpYWJsZS4N Cj4gKyAqLw0KPiArI2RlZmluZSBSVEVfTENPUkVfVkFSX0ZPUkVBQ0hfVkFMVUUodmFyLCBuYW1l KQkJCQlcDQo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbGNvcmVfaWQgPQkJCQkJXA0KPiArCQkgICAg ICgoKHZhcikgPSBSVEVfTENPUkVfVkFSX0xDT1JFX1BUUigwLCBuYW1lKSksIDApOwlcDQo+ICsJ ICAgICBsY29yZV9pZCA8IFJURV9NQVhfTENPUkU7CQkJCQlcDQo+ICsJICAgICBsY29yZV9pZCsr LCAodmFyKSA9IFJURV9MQ09SRV9WQVJfTENPUkVfUFRSKGxjb3JlX2lkLCBuYW1lKSkNCg0KUlRF X0xDT1JFX1ZBUl9GT1JFQUNIX1BUUihwdHIsIG5hbWUpIHdvdWxkIGJlIGFuIGV2ZW4gYmV0dGVy IG5hbWU7IGNvbnNpZGVyaW5nIHRoYXQgInZhciIgaXMgcmVhbGx5IGEgcG9pbnRlci4NCg0KSSBh bHNvIHdvbmRlciBhYm91dCBidWlsZC10aW1lIHR5cGUgY2hlY2tpbmcgaGVyZS4uLg0KTmljZSB0 byBoYXZlOiBUaGUgY29tcGlsZXIgc2hvdWxkIGZhaWwgaWYgInB0ciIgaXMgbm90IGEgcG9pbnRl ci4NCg0KPiArDQo+ICtleHRlcm4gY2hhciBydGVfbGNvcmVfdmFyW1JURV9NQVhfTENPUkVdW1JU RV9NQVhfTENPUkVfVkFSXTsNCj4gKw0KPiArLyoqDQo+ICsgKiBBbGxvY2F0ZSBzcGFjZSBpbiB0 aGUgcGVyLWxjb3JlIGlkIGJ1ZmZlcnMgZm9yIGEgbGNvcmUgdmFyaWFibGUuDQo+ICsgKg0KPiAr ICogVGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMgb25seSBhbiBvcGFxdWUgaWRlbnRpZmVyIG9mIHRo ZSB2YXJpYWJsZS4gVG8NCj4gKyAqIGdldCBhbiBhY3R1YWwgcG9pbnRlciB0byBhIHBhcnRpY3Vs YXIgaW5zdGFuY2Ugb2YgdGhlIHZhcmlhYmxlIHVzZQ0KPiArICogXHJlZiBSVEVfTENPUkVfVkFS X1BUUiBvciBccmVmIFJURV9MQ09SRV9WQVJfTENPUkVfUFRSLg0KPiArICoNCj4gKyAqIFRoZSBh bGxvY2F0aW9uIGlzIGFsd2F5cyBzdWNjZXNzZnVsLCBiYXJyaW5nIGEgZmF0YWwgZXhoYXVzdGlv biBvZg0KPiArICogdGhlIHBlci1sY29yZSBpZCBidWZmZXIgc3BhY2UuDQo+ICsgKg0KPiArICog QHBhcmFtIHNpemUNCj4gKyAqICAgVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgdmFyaWFibGUn cyBwZXItbGNvcmUgaWQgdmFsdWUuDQo+ICsgKiBAcGFyYW0gYWxpZ24NCj4gKyAqICAgSWYgMCwg dGhlIHZhbHVlcyB3aWxsIGJlIHN1aXRhYmx5IGFsaWduZWQgZm9yIGFueSBraW5kIG9mIHR5cGUN Cj4gKyAqICAgKGkuZS4sIGFsaWdub2YobWF4X2FsaWduX3QpKS4gT3RoZXJ3aXNlLCB0aGUgdmFs dWVzIHdpbGwgYmUgYWxpZ25lZA0KPiArICogICBvbiBhIG11bHRpcGxlIG9mICphbGlnbiosIHdo aWNoIG11c3QgYmUgYSBwb3dlciBvZiAyIGFuZCBlcXVhbCBvcg0KPiArICogICBsZXNzIHRoYW4g XGMgUlRFX0NBQ0hFX0xJTkVfU0laRS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIGlkIG9m IHRoZSB2YXJpYWJsZSwgc3RvcmVkIGluIGEgdm9pZCBwb2ludGVyIHZhbHVlLg0KPiArICovDQo+ ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3ZvaWQgKg0KPiArcnRlX2xjb3JlX3Zhcl9hbGxvYyhz aXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsNCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8qIF9SVEVfTENPUkVfVkFSX0hfICovDQo+ IGRpZmYgLS1naXQgYS9saWIvZWFsL3ZlcnNpb24ubWFwIGIvbGliL2VhbC92ZXJzaW9uLm1hcA0K PiBpbmRleCA1ZTBjZDQ3YzgyLi5lOTBiODYxMTVhIDEwMDY0NA0KPiAtLS0gYS9saWIvZWFsL3Zl cnNpb24ubWFwDQo+ICsrKyBiL2xpYi9lYWwvdmVyc2lvbi5tYXANCj4gQEAgLTM5Myw2ICszOTMs MTAgQEAgRVhQRVJJTUVOVEFMIHsNCj4gIAkjIGFkZGVkIGluIDIzLjA3DQo+ICAJcnRlX21lbXpv bmVfbWF4X2dldDsNCj4gIAlydGVfbWVtem9uZV9tYXhfc2V0Ow0KPiArDQo+ICsJIyBhZGRlZCBp biAyNC4wMw0KPiArCXJ0ZV9sY29yZV92YXJfYWxsb2M7DQo+ICsJcnRlX2xjb3JlX3ZhcjsNCj4g IH07DQo+IA0KPiAgSU5URVJOQUwgew0KPiAtLQ0KPiAyLjM0LjENCg0KQWNrZWQtYnk6IE1vcnRl biBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQoNCg==