From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id E192189031 for ; Wed, 17 Apr 2019 08:41:07 +0000 (UTC) From: "Ser, Simon" Date: Wed, 17 Apr 2019 08:40:22 +0000 Message-ID: <1040e18c9b67829f3518772949d31b625ca4b822.camel@intel.com> References: <20190411123648.4123-1-simon.ser@intel.com> <20190411123648.4123-2-simon.ser@intel.com> <55db79de-0a06-0169-3abb-c5b34af10fb8@linux.intel.com> In-Reply-To: <55db79de-0a06-0169-3abb-c5b34af10fb8@linux.intel.com> Content-Language: en-US Content-ID: <76BB1C824E852745BC4A2B390168A83E@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v4 1/5] tests/kms_chamelium: add dp-audio test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "igt-dev@lists.freedesktop.org" , "martin.peres@linux.intel.com" List-ID: T24gVHVlLCAyMDE5LTA0LTE2IGF0IDE1OjAyICswMzAwLCBNYXJ0aW4gUGVyZXMgd3JvdGU6DQo+ IE9uIDExLzA0LzIwMTkgMTU6MzYsIFNpbW9uIFNlciB3cm90ZToNCj4gPiBUaGlzIG5ldyB0ZXN0 IGVuc3VyZXMgRGlzcGxheVBvcnQgYXVkaW8gd29ya3MgYnkgdXNpbmcgdGhlIENoYW1lbGl1bS4N Cj4gPiANCj4gPiBJdCBlbmFibGVzIHRoZSBEaXNwbGF5UG9ydCBvdXRwdXQgYW5kIHNlbmRzIGFu IGF1ZGlvIHNpZ25hbCBjb250YWluaW5nIGEgc2V0IG9mDQo+ID4gZnJlcXVlbmNpZXMgd2UgY2hv b3NlIHRvIGFsbCBIRE1JL0Rpc3BsYXlQb3J0IGF1ZGlvIGRldmljZXMuIEl0IHN0YXJ0cw0KPiA+ IHJlY29yZGluZyBhdWRpbyBvbiB0aGUgQ2hhbWVsaXVtIGRldmljZSBhbmQgdXNlcyB0aGUgc3Ry ZWFtIHNlcnZlciB0byByZXRyaWV2ZQ0KPiA+IGNhcHR1cmVkIGF1ZGlvIHBhZ2VzLiBJdCB0aGVu IGNoZWNrcyB0aGF0IHRoZSBjYXB0dXJlIGF1ZGlvIHNpZ25hbCBjb250YWlucyB0aGUNCj4gPiBm cmVxdWVuY2llcyB3ZSBzZW50LCBhbmQgb25seSB0aG9zZSwgYnkgY29tcHV0aW5nIGEgRkZULg0K PiA+IA0KPiA+IEEgbmV3IGxpYnJhcnkgaGFzIGJlZW4gYWRkZWQgdG8gbGliaWd0IHRvIGNvbW11 bmljYXRlIHdpdGggdGhlIHN0cmVhbSBzZXJ2ZXIuDQo+ID4gSXQgaW1wbGVtZW50cyBhIHNpbXBs ZSBjdXN0b20gVENQIHByb3RvY29sLg0KPiA+IA0KPiA+IEluIGNhc2UgdGhlIHRlc3QgZmFpbHMs IGEgV0FWIGZpbGUgd2l0aCB0aGUgY2FwdHVyZWQgZGF0YSBpcyBzYXZlZCBvbiBkaXNrLg0KPiA+ IA0KPiA+IFJpZ2h0IG5vdyB0aGUgdGVzdCBoYXMgYSBmZXcgbGltaXRhdGlvbnM6DQo+ID4gDQo+ ID4gLSBPbmx5IHRoZSBmaXJzdCBjaGFubmVsIGlzIGNoZWNrZWQNCj4gPiAtIElHVCBvbmx5IGdl bmVyYXRlcyBhdWRpbyB3aXRoIGEgc2luZ2xlIHNhbXBsaW5nIHJhdGUgKDQ4IEtIeikNCj4gPiAt IEF1ZGlvIGRhdGEgaXMgbm90IGNhcHR1cmVkIGluIHJlYWwtdGltZQ0KPiA+IA0KPiA+IFRoZXNl IGxpbWl0YXRpb25zIHdpbGwgYmUgbGlmdGVkIGluIGZ1dHVyZSBwYXRjaGVzLg0KPiA+IA0KPiA+ IFB1bHNlQXVkaW8gbXVzdCBub3QgcnVuIGR1cmluZyB0aGUgdGVzdHMgc2luY2UgQUxTQSBpcyB1 c2VkIGRpcmVjdGx5LiBUbyBlbnN1cmUNCj4gPiB0aGlzLCBlZGl0IC9ldGMvcHVsc2UvY2xpZW50 LmNvbmYgYW5kIGFkZCBgYXV0b3NwYXduPW5vYC4gVGhlbiBydW4NCj4gPiBgcHVsc2VhdWRpbyAt LWtpbGxgLg0KPiA+IA0KPiA+IFRoaXMgY29tbWl0IGRlbGV0ZXMgdGhlIGV4aXN0aW5nIGF1ZGlv IHRlc3RzLiBUaGV5IHdlcmVuJ3QgcnVuIGFuZCByZXF1aXJlZCBhbg0KPiA+IGV4b3RpYyBjb25m aWd1cmF0aW9uIChIRE1JIGF1ZGlvIHNwbGl0dGVyLCBkdW1teSBIRE1JIHNpbmsgYW5kIGEgbGlu ZS1pbiBwb3J0DQo+ID4gb24gdGhlIERVVCkuDQo+ID4gDQo+ID4gVGhpcyBwYXRjaCBkZXBlbmRz IG9uIHRoZSBmb2xsb3dpbmcgQ2hhbWVsZW9uIGJ1Z3M6DQo+ID4gDQo+ID4gLSBodHRwczovL2Ny YnVnLmNvbS85NDgwNjANCj4gPiAtIGh0dHBzOi8vY3JidWcuY29tLzk1MDg1Nw0KPiANCj4gU2Vl bXMgbGlrZSB5b3VyIGZpeGVzIGxhbmRlZCBhbHJlYWR5ISBHcmVhdCENCj4gDQo+ID4gU2lnbmVk LW9mZi1ieTogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBk b2NzL2F1ZGlvLnR4dCAgICAgICAgICAgICB8ICA0NSAtLS0NCj4gPiAgZG9jcy9jaGFtZWxpdW0u dHh0ICAgICAgICAgfCAgMzIgKy0NCj4gPiAgbGliL2lndC5oICAgICAgICAgICAgICAgICAgfCAg IDEgKw0KPiA+ICBsaWIvaWd0X2Fsc2EuYyAgICAgICAgICAgICB8ICA0MiArKy0NCj4gPiAgbGli L2lndF9hbHNhLmggICAgICAgICAgICAgfCAgIDEgKw0KPiA+ICBsaWIvaWd0X2F1ZGlvLmMgICAg ICAgICAgICB8IDI4NSArKysrKysrKysrKystLS0tLS0NCj4gPiAgbGliL2lndF9hdWRpby5oICAg ICAgICAgICAgfCAgMTIgKy0NCj4gPiAgbGliL2lndF9hdXguYyAgICAgICAgICAgICAgfCAgMzEg KysNCj4gPiAgbGliL2lndF9hdXguaCAgICAgICAgICAgICAgfCAgIDEgKw0KPiA+ICBsaWIvaWd0 X2NoYW1lbGl1bS5jICAgICAgICB8IDEwMSArKysrKysrDQo+ID4gIGxpYi9pZ3RfY2hhbWVsaXVt LmggICAgICAgIHwgIDExICsNCj4gPiAgbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmMgfCA1OTIg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBsaWIvaWd0X2NoYW1l bGl1bV9zdHJlYW0uaCB8ICA1MiArKysrDQo+ID4gIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAg IHwgICA1ICstDQo+ID4gIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgIDUyICsrLS0NCj4g PiAgbWVzb25fb3B0aW9ucy50eHQgICAgICAgICAgfCAgIDYgLQ0KPiA+ICB0ZXN0cy9hdWRpby5j ICAgICAgICAgICAgICB8IDE5MyAtLS0tLS0tLS0tLS0NCj4gPiAgdGVzdHMva21zX2NoYW1lbGl1 bS5jICAgICAgfCAyNzYgKysrKysrKysrKysrKysrKy0NCj4gPiAgdGVzdHMvbWVzb24uYnVpbGQg ICAgICAgICAgfCAgIDkgKy0NCj4gPiAgMTkgZmlsZXMgY2hhbmdlZCwgMTM1OCBpbnNlcnRpb25z KCspLCAzODkgZGVsZXRpb25zKC0pDQo+ID4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkb2NzL2F1ZGlv LnR4dA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmMN Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5oDQo+ID4g IGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9hdWRpby5jDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBh L2RvY3MvYXVkaW8udHh0IGIvZG9jcy9hdWRpby50eHQNCj4gPiBkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleCAxNThhZDVkMS4uMDAwMDAwMDANCj4gPiAtLS0gYS9kb2NzL2F1ZGlv LnR4dA0KPiA+ICsrKyAvZGV2L251bGwNCj4gPiBAQCAtMSw0NSArMCwwIEBADQo+ID4gLUF1ZGlv IFN1cHBvcnQgaW4gSUdUDQo+ID4gLT09PT09PT09PT09PT09PT09PT09DQo+ID4gLQ0KPiA+IC1U aGlzIGRvY3VtZW50IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFuZCBpbnN0cnVjdGlvbnMgYWJvdXQg YXVkaW8gc3VwcG9ydCBpbiBJR1QuDQo+ID4gLQ0KPiA+IC1JbnRyb2R1Y3Rpb24NCj4gPiAtLS0t LS0tLS0tLS0tDQo+ID4gLQ0KPiA+IC1UaGUgYXVkaW8gdGVzdCBpcyBhaW1lZCBhdCB0ZXN0aW5n IHRoZSBhdWRpbyBmZWF0dXJlcyBvZiBkaXNwbGF5IGNvbm5lY3RvcnMsDQo+ID4gLXN1Y2ggYXMg SERNSS4NCj4gPiAtDQo+ID4gLVRlc3Qgc2V0dXANCj4gPiAtLS0tLS0tLS0tLQ0KPiA+IC0NCj4g PiAtVGhlIHNldHVwIHJlcXVpcmVkIGZvciB0aGUgYXVkaW8gdGVzdCBjb25zaXN0cyBvZiB1c2lu ZyBhbiBIRE1JLVZHQSBhZGFwdGVyIHdpdGgNCj4gPiAtYW4gYXVkaW8tb3V0IDMuNSBtbSBqYWNr IHRvIGV4dHJhY3QgdGhlIGF1ZGlvIGZyb20gdGhlIEhETUkgaW50ZXJmYWNlLg0KPiA+IC1UaGUg YXVkaW8tb3V0IGphY2sgaXMgY29ubmVjdGVkIGJhY2sgdG8gdGhlIGRldmljZS11bmRlci10ZXN0 J3MgbGluZS1pbi4NCj4gPiAtDQo+ID4gLURlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3Igb2YgdGhl IGFkYXB0ZXIsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gY29ubmVjdCBhDQo+ID4gLWdob3N0IFZH QSBkb25nbGUgdG8gaXQgKGluIG9yZGVyIHRvIGVtdWxhdGUgYSBjb25uZWN0ZWQgZGlzcGxheSkg dG8gZW5hYmxlIHRoZQ0KPiA+IC1hdWRpbyBvdXRwdXQuIFRoZXJlIGFyZSBndWlkZXMgYXZhaWxh YmxlIGRldGFpbGluZyBob3cgdG8gYnVpbGQgdGhlc2UuDQo+ID4gLQ0KPiA+IC1XaGVuIGV4ZWN1 dGVkLCB0aGUgdGVzdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2VuZCB0aGUgdGVzdCBhdWRpbyBzaWdu YWwgdG8gYWxsDQo+ID4gLUFMU0EgYXVkaW8gSERNSSBvdXRwdXRzIGFuZCByZWNvcmQgZnJvbSB0 aGUgc3RhbmRhcmQgQUxTQSBjYXB0dXJlIGRldmljZS4NCj4gPiAtDQo+ID4gLUNvbmZpZ3VyYXRp b24NCj4gPiAtLS0tLS0tLS0tLS0tLQ0KPiA+IC0NCj4gPiAtSW4gb3JkZXIgdG8gZGVwbG95IHRo ZSB0ZXN0LCBBTFNBIGNvbnRyb2xzIGhhdmUgdG8gYmUgY29uZmlndXJlZCB0byBzZXQgdGhlDQo+ ID4gLUFMU0EgY2FwdHVyZSBzb3VyY2UgdG8gbGluZS1pbi4gT24gSW50ZWwgeDg2IHN5c3RlbXMs IHRoaXMgY2FuIGJlIGFjaGlldmVkDQo+ID4gLXdpdGggdGhlIGZvbGxvd2luZyBjYWxscyB0byB0 aGUgYW1peGVyIHV0aWxpdHk6DQo+ID4gLSMgYW1peGVyIHNzZXQgTGluZSAzMSBvbg0KPiA+IC0j IGFtaXhlciBzc2V0ICJJbnB1dCBTb3VyY2UiIExpbmUNCj4gPiAtDQo+ID4gLUl0IGlzIHRoZW4g dXNlZnVsIHRvIHN0b3JlIHRoZSBBTFNBIHN0YXRlIHBlcm1hbmVudGx5IHdpdGggdGhlIGFsc2Fj dGwgdXRpbGl0eToNCj4gPiAtIyBhbHNhY3RsIHN0b3JlDQo+ID4gLQ0KPiA+IC1UaGVzZSBzZXR0 aW5ncyBjYW4gYmUgcmVzdG9yZWQgd2l0aCB0aGUgYWxzYWN0bCB1dGlsaXR5Og0KPiA+IC0jIGFs c2FjdGwgcmVzdG9yZQ0KPiA+IC0NCj4gPiAtSXQgaXMgZGVzaXJhYmxlIHRvIGVuc3VyZSB0aGF0 IHRoZSBhbHNhLXJlc3RvcmUgYW5kIGFsc2Etc3RhdGUgc3lzdGVtZCBzZXJ2aWNlcw0KPiA+IC1h cmUgZW5hYmxlZCB0byBkbyB0aGlzIGpvYiBhdXRvbWF0aWNhbGx5LCBlc3BlY2lhbGx5IGluIHRo ZSBjYXNlIG9mIGFuDQo+ID4gLWF1dG9tYXRlZCB0ZXN0aW5nIHN5c3RlbToNCj4gPiAtIyBzeXN0 ZW1jdGwgZW5hYmxlIGFsc2EtcmVzdG9yZQ0KPiA+IC0jIHN5c3RlbWN0bCBlbmFibGUgYWxzYS1z dGF0ZQ0KPiA+IGRpZmYgLS1naXQgYS9kb2NzL2NoYW1lbGl1bS50eHQgYi9kb2NzL2NoYW1lbGl1 bS50eHQNCj4gPiBpbmRleCAwY2FiY2RjNi4uMzE2ZGQ2MDcgMTAwNjQ0DQo+ID4gLS0tIGEvZG9j cy9jaGFtZWxpdW0udHh0DQo+ID4gKysrIGIvZG9jcy9jaGFtZWxpdW0udHh0DQo+ID4gQEAgLTEz OSw2ICsxMzksMjMgQEAgJCBtYWtlIHJlbW90ZS1pbnN0YWxsIENIQU1FTEVPTl9IT1NUPTE5Mi4x NjguNzIuMQ0KPiA+ICANCj4gPiAgVGhlIHByb2Nlc3MgcmVxdWlyZXMgdGhlIENoYW1lbGl1bSB0 byBiZSBjb25uZWN0ZWQgdG8gdGhlIEludGVybmV0IHRvIHN1Y2NlZWQuDQo+ID4gIA0KPiA+ICtB dWRpbyBDYXB0dXJlDQo+ID4gKy0tLS0tLS0tLS0tLS0NCj4gPiArDQo+ID4gK1RoZSBDaGFtZWxp dW0gc3VwcG9ydHMgYXVkaW8gY2FwdHVyZS4gSUdUIHRlc3RzIHRha2UgYWR2YW50YWdlIG9mIHRo ZQ0KPiA+ICtDaGFtZWxpdW0gc3RyZWFtaW5nIHNlcnZlciB0byBkb3dubG9hZCBhdWRpbyBzYW1w bGVzIGZyb20gdGhlIENoYW1lbGl1bS4NCj4gPiArDQo+ID4gK0lHVCBuZWVkcyBkaXJlY3QgYWNj ZXNzIHRvIGF1ZGlvIGRldmljZXMgdGhyb3VnaCBBTFNBLCBzbyBQdWxzZUF1ZGlvIG5lZWRzIHRv DQo+ID4gK2JlIHN0b3BwZWQgKG90aGVyd2lzZSBhdWRpbyB0ZXN0cyB3aWxsIGF1dG9tYXRpY2Fs bHkgZ2V0IHNraXBwZWQpLiBUbyBtYWtlIHN1cmUNCj4gPiArUHVsc2VBdWRpbyBpc24ndCBydW5u aW5nOg0KPiA+ICsNCj4gPiArLSBFZGl0IC9ldGMvcHVsc2UvY2xpZW50LmNvbmYgYW5kIGFkZCBh dXRvc3Bhd249bm8NCj4gPiArLSBSdW4gYHB1bHNlYXVkaW8gLS1raWxsYCAoaWYgaXQgc3VjY2Vl ZHMsIGl0IG1lYW5zIFB1bHNlQXVkaW8gd2FzIHJ1bm5pbmcpDQo+ID4gKy0gTWFrZSBzdXJlIGEg REUgdGhhdCBhdXRvbWF0aWNhbGx5IHNwYXducyBQdWxzZUF1ZGlvIGlzbid0IHJ1bm5pbmcNCj4g PiArDQo+ID4gK0luIGNhc2UgYSB0ZXN0IGZhaWxzLCB0aGUgcmF3IGNhcHR1cmVkIGF1ZGlvIGZp bGVzIHdpbGwgYmUgZHVtcGVkIGluIGEgV0FWDQo+ID4gK2ZpbGUuDQo+ID4gKw0KPiA+ICBDb250 cmlidXRpbmcgQ2hhbmdlcyB0byB0aGUgRGFlbW9uDQo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCj4gPiAgDQo+ID4gQEAgLTE0NiwxMCArMTYzLDExIEBAIENvbnRyaWJ1 dGlvbnMgdG8gdGhlIENoYW1lbGl1bSBkYWVtb24sIGp1c3QgbGlrZSBhbnkgY29udHJpYnV0aW9u IHRvIENocm9taXVtT1MsDQo+ID4gIGFyZSBzdWJtaXR0ZWQgYW5kIHJldmlld2VkIGF0OiBodHRw czovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLw0KPiA+ICANCj4gPiAgVGhlIENo cm9taXVtT1MgcHJvamVjdCBwcm92aWRlcyBhbiBleHRlbnNpdmUgZGV2ZWxvcGVyIGd1aWRlOg0K PiA+IC1odHRwczovL3d3dy5jaHJvbWl1bS5vcmcvY2hyb21pdW0tb3MvZGV2ZWxvcGVyLWd1aWRl IHRoYXQgYXNzdW1lcyBydW5uaW5nIHdpdGhpbg0KPiA+IC10aGUgQ2hyb21pdW1PUyBidWlsZCBz eXN0ZW0uIFNpbmNlIHRoaXMgaXMgbGlrZWx5IG5vdCB0aGUgY2FzZSBmb3IgY29udHJpYnV0aW5n DQo+ID4gLXRvIHRoZSBDaGFtZWxpdW0gZGFlbW9uLCBvbmx5IHRoZSBwYXJ0IGFib3V0IHVwbG9h ZGluZyBjaGFuZ2VzIGlzIHJlbGV2YW50Og0KPiA+IC1odHRwczovL3d3dy5jaHJvbWl1bS5vcmcv Y2hyb21pdW0tb3MvZGV2ZWxvcGVyLWd1aWRlI1RPQy1VcGxvYWQteW91ci1jaGFuZ2VzLWFuZC1n ZXQtYS1jb2RlLXJldmlldw0KPiA+ICtodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v Y2hyb21pdW1vcy9kb2NzLysvbWFzdGVyL2RldmVsb3Blcl9ndWlkZS5tZA0KPiA+ICtJdCB0aGF0 IGFzc3VtZXMgcnVubmluZyB3aXRoaW4gdGhlIENocm9taXVtT1MgYnVpbGQgc3lzdGVtLiBTaW5j ZSB0aGlzIGlzDQo+IA0KPiBUaGUgd29yZCAidGhhdCIgc2VlbXMgb3V0IG9mIHBsYWNlLg0KPiAN Cj4gPiArbGlrZWx5IG5vdCB0aGUgY2FzZSBmb3IgY29udHJpYnV0aW5nIHRvIHRoZSBDaGFtZWxp dW0gZGFlbW9uLCBvbmx5IHRoZSBwYXJ0DQo+ID4gK2Fib3V0IHVwbG9hZGluZyBjaGFuZ2VzIGlz IHJlbGV2YW50Og0KPiA+ICtodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p dW1vcy9kb2NzLysvbWFzdGVyL2RldmVsb3Blcl9ndWlkZS5tZCNVcGxvYWQteW91ci1jaGFuZ2Vz LWFuZC1nZXQtYS1jb2RlLXJldmlldw0KPiA+ICANCj4gPiAgTW9zdCBvZiB0aGUgcHJvY2VzcyBp cyBhYm91dCB1c2luZyB0aGUgR2Vycml0IHdlYiBpbnRlcmZhY2UgZm9yIHN1Ym1pdHRpbmcgYW5k DQo+ID4gIGhhdmluZyB0aGUgY2hhbmdlIHJldmlld2VkIGFuZCBub3QgZm9yZ2V0dGluZyB0aGUg Q2hhbmdlLUlkLCBURVNUPSBhbmQgQlVHPQ0KPiA+IEBAIC0xNjIsNyArMTgwLDcgQEAgU3VwcG9y dCBmb3IgdGhlIENoYW1lbGl1bSBwbGF0Zm9ybSBpbiBJR1QgaXMgZm91bmQgaW4gdGhlIGZvbGxv d2luZyBwbGFjZXM6DQo+ID4gICogbGliL2lndF9jaGFtZWxpdW0uYzogbGlicmFyeSB3aXRoIENo YW1lbGl1bS1yZWxhdGVkIGhlbHBlcnMNCj4gPiAgKiB0ZXN0cy9rbXNfY2hhbWVsaXVtLmM6IHN1 Yi10ZXN0cyB1c2luZyB0aGUgQ2hhbWVsaXVtDQo+ID4gIA0KPiA+IC1BcyBvZiBsYXRlIEF1Z3Vz dCAyMDE3LCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQgYnkgSUdUOg0KPiA+ICtB cyBvZiBlYXJseSBBcHJpbCAyMDE5LCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQg YnkgSUdUOg0KPiA+ICAqIFBpeGVsLWJ5LXBpeGVsIGZyYW1lIGludGVncml0eSB0ZXN0cyBmb3Ig RFAgYW5kIEhETUkNCj4gPiAgKiBFcnJvci10cmVuZC1iYXNlZCBmcmFtZSBpbnRlZ3JpdHkgdGVz dHMgZm9yIFZHQQ0KPiA+ICAqIENSQy1iYXNlZCBmcmFtZSBpbnRlZ3JpdHkgdGVzdHMgZm9yIERQ IGFuZCBIRE1JDQo+ID4gQEAgLTE3Myw2ICsxOTEsNyBAQCBBcyBvZiBsYXRlIEF1Z3VzdCAyMDE3 LCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQgYnkgSUdUOg0KPiA+ICAgIGVhY2gg aW50ZXJmYWNlIG9yIGNvbWJpbmVkDQo+ID4gICogRURJRCBkaXNwbGF5IGlkZW50aWZpZXIgaW50 ZWdyaXR5IGNoZWNrIGZvciBhbGwgaW50ZXJmYWNlcw0KPiA+ICAqIEVESUQgZGlzcGxheSBpZGVu dGlmaWVyIGNoYW5nZSBkdXJpbmcgc3VzcGVuZCBmb3IgYWxsIGludGVyZmFjZXMNCj4gPiArKiBB dWRpbyBGb3VyaWVyLWJhc2VkIHRlc3RzIGZvciBEUCBhdCA0OEtIeg0KPiANCj4gTWF5YmUgYW4g ZXh0cmEgcGF0Y2ggd2lsbCBiZSBuZWVkZWQgdG8gdXBkYXRlIHRoZSBsaXN0IG9mDQo+IGNhcGFi aWxpdGllcy4uLiBvciB3ZSBqdXN0IGltcGxlbWVudCB0aGVtIDpwDQo+ID4gDQo+ID4gIA0KPiA+ ICBGdXR1cmUgRGV2ZWxvcG1lbnRzDQo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiBAQCAt MTgwLDcgKzE5OSw4IEBAIEZ1dHVyZSBEZXZlbG9wbWVudHMNCj4gPiAgV2l0aCB0aGUgY3VycmVu dCBnZW5lcmF0aW9uIG9mIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSwgc3VwcG9ydCBmb3IgdGVzdGlu ZyBhDQo+ID4gIG51bWJlciBvZiBhZGRpdGlvbmFsIGRpc3BsYXkgZmVhdHVyZXMgY291bGQgYmUg aW5jbHVkZWQgYXMgZnV0dXJlIGRldmVsb3BtZW50cywNCj4gPiAgaW5jbHVkaW5nOg0KPiA+IC0q IEF1ZGlvIGNhcHR1cmUgZnJvbSBIRE1JIGFuZCBEUA0KPiA+ICsqIEF1ZGlvIGNhcHR1cmUgZnJv bSBIRE1JLCB3aXRoIG11bHRpcGxlIGNoYW5uZWxzIGFuZCB3aXRoIG90aGVyIHBsYXliYWNrDQo+ ID4gKyAgc2FtcGxpbmcgcmF0ZXMNCj4gDQo+IERvbid0IHJlbW92ZSBEUCBzaW5jZSBpdCBkb2Vz IG5vdCB5ZXQgaGF2ZSB0aGUgZmVhdHVyZXMgeW91IGFyZSB0YWxraW5nDQo+IGFib3V0Lg0KDQpI bW0uIFRoZSBtZWFuaW5nIG9mIHRoYXQgY29tbWEgd2FzIGEgbG9naWNhbCAiYW5kIi4gSW5zdGVh ZCwgSSdsbCBqdXN0DQpzcGxpdCB0aGlzIGludG8gbXVsdGlwbGUgYnVsbGV0IHBvaW50cy4NCg0K PiA+ICAqIEhpZ2gtYmFuZHdpZHRoIERpZ2l0YWwgQ29udGVudCBQcm90ZWN0aW9uIChIRENQKSBz dHJlYW1pbmcgdG8gdGhlIGRpc3BsYXkNCj4gPiAgKiBSZW1vdGUgY29udHJvbCBmb3J3YXJkaW5n IChDRUMpIHNlbnQgZnJvbSB0aGUgZGlzcGxheQ0KPiA+ICAqIFlVViBjb2xvcnNwYWNlIGZvciBI RE1JLCBpbnN0ZWFkIG9mIFJHQg0KPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0 LmgNCj4gPiBpbmRleCA2NjU0YTY1OS4uNTg1MmQ1NTcgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2ln dC5oDQo+ID4gKysrIGIvbGliL2lndC5oDQo+ID4gQEAgLTQzLDYgKzQzLDcgQEANCj4gPiAgI2lu Y2x1ZGUgImlndF9zdGF0cy5oIg0KPiA+ICAjaWZkZWYgSEFWRV9DSEFNRUxJVU0NCj4gPiAgI2lu Y2x1ZGUgImlndF9jaGFtZWxpdW0uaCINCj4gPiArI2luY2x1ZGUgImlndF9jaGFtZWxpdW1fc3Ry ZWFtLmgiDQo+ID4gICNlbmRpZg0KPiA+ICAjaW5jbHVkZSAiaW5zdGRvbmUuaCINCj4gPiAgI2lu Y2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYWxz YS5jIGIvbGliL2lndF9hbHNhLmMNCj4gPiBpbmRleCBiYjY2ODJjYy4uNDU2YzBjODUgMTAwNjQ0 DQo+ID4gLS0tIGEvbGliL2lndF9hbHNhLmMNCj4gPiArKysgYi9saWIvaWd0X2Fsc2EuYw0KPiA+ IEBAIC0yNiw5ICsyNiwxMSBAQA0KPiA+ICANCj4gPiAgI2luY2x1ZGUgImNvbmZpZy5oIg0KPiA+ ICANCj4gPiArI2luY2x1ZGUgPGxpbWl0cy5oPg0KPiA+ICAjaW5jbHVkZSA8YWxzYS9hc291bmRs aWIuaD4NCj4gPiAgDQo+ID4gICNpbmNsdWRlICJpZ3RfYWxzYS5oIg0KPiA+ICsjaW5jbHVkZSAi aWd0X2F1eC5oIg0KPiA+ICAjaW5jbHVkZSAiaWd0X2NvcmUuaCINCj4gPiAgDQo+ID4gICNkZWZp bmUgSEFORExFU19NQVgJOA0KPiA+IEBAIC02MSw2ICs2MywyNSBAQCBzdHJ1Y3QgYWxzYSB7DQo+ ID4gIAlpbnQgaW5wdXRfc2FtcGxlc190cmlnZ2VyOw0KPiA+ICB9Ow0KPiA+ICANCj4gPiArLyoq DQo+ID4gKyAqIGFsc2FfaGFzX2V4Y2x1c2l2ZV9hY2Nlc3M6DQo+ID4gKyAqIENoZWNrIHdoZXRo ZXIgQUxTQSBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byBhdWRpbyBkZXZpY2VzLiBGYWlscyBpZg0K PiA+ICsgKiBQdWxzZUF1ZGlvIGlzIHJ1bm5pbmcuDQo+ID4gKyAqLw0KPiA+ICtib29sIGFsc2Ff aGFzX2V4Y2x1c2l2ZV9hY2Nlc3Modm9pZCkNCj4gPiArew0KPiA+ICsJaWYgKGlndF9pc19wcm9j ZXNzX3J1bm5pbmcoInB1bHNlYXVkaW8iKSkgew0KPiA+ICsJCWlndF93YXJuKCJJdCBzZWVtcyB0 aGF0IFB1bHNlQXVkaW8gaXMgcnVubmluZy4gQXVkaW8gdGVzdHMgIg0KPiA+ICsJCQkgIm5lZWQg ZGlyZWN0IGFjY2VzcyB0byBhdWRpbyBkZXZpY2VzLCBzbyBQdWxzZUF1ZGlvICINCj4gPiArCQkJ ICJuZWVkcyB0byBiZSBzdG9wcGVkLiBZb3UgY2FuIGRvIHNvIGJ5IHJ1bm5pbmcgIg0KPiA+ICsJ CQkgImBwdWxzZWF1ZGlvIC0ta2lsbGAuIEFsc28gbWFrZSBzdXJlIHRvIGFkZCAiDQo+ID4gKwkJ CSAiYXV0b3NwYXduPW5vIHRvIC9ldGMvcHVsc2UvY2xpZW50LmNvbmZcbiIpOw0KPiA+ICsJCXJl dHVybiBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0K PiA+ICsNCj4gPiAgc3RhdGljIHZvaWQgYWxzYV9lcnJvcl9oYW5kbGVyKGNvbnN0IGNoYXIgKmZp bGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jdGlvbiwNCj4gPiAgCQkJICAgICAgIGludCBl cnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KPiA+ICB7DQo+ID4gQEAgLTc4LDYgKzk5LDExIEBA IHN0cnVjdCBhbHNhICphbHNhX2luaXQodm9pZCkNCj4gPiAgew0KPiA+ICAJc3RydWN0IGFsc2Eg KmFsc2E7DQo+ID4gIA0KPiA+ICsJaWYgKCFhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzKCkpIHsN Cj4gPiArCQlpZ3Rfd2FybigiYWxzYSBkb2Vzbid0IGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byBh dWRpbyBkZXZpY2VzXG4iKTsNCj4gDQo+IEhvdyBhYm91dCBmb2xkaW5nIHRoZSBzZWNvbmQgd2Fy biBpbiBhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzKCk/IEl0DQo+IHdvdWxkIGltcHJvdmUgdGhl IGNoYW5jZXMgb2YgaGF2aW5nIGEgY29uc2lzdGVudCBzdHJpbmcgdG8gZ3JlcCBvbiBpbg0KPiBj aWJ1Z2xvZyBpbiBjYXNlIG90aGVyIHVzZXJzIGRlY2lkZSB0byB1c2UgdGhlIGZ1bmN0aW9uLg0K PiANCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gIAlhbHNhID0gbWFs bG9jKHNpemVvZihzdHJ1Y3QgYWxzYSkpOw0KPiA+ICAJbWVtc2V0KGFsc2EsIDAsIHNpemVvZihz dHJ1Y3QgYWxzYSkpOw0KPiA+ICANCj4gPiBAQCAtNTUzLDE2ICs1NzksMjAgQEAgaW50IGFsc2Ff cnVuKHN0cnVjdCBhbHNhICphbHNhLCBpbnQgZHVyYXRpb25fbXMpDQo+ID4gIAkJCQkJaWYgKHJl dCA8IDApIHsNCj4gPiAgCQkJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwNCj4gPiAg CQkJCQkJCQkgICAgICByZXQsIDApOw0KPiA+IC0JCQkJCQlpZiAocmV0IDwgMCkNCj4gPiArCQkJ CQkJaWYgKHJldCA8IDApIHsNCj4gPiArCQkJCQkJCWlndF9kZWJ1Zygic25kX3BjbV9yZWNvdmVy IGFmdGVyIHNuZF9wY21fd3JpdGVpIGZhaWxlZCIpOw0KPiA+ICAJCQkJCQkJZ290byBjb21wbGV0 ZTsNCj4gPiArCQkJCQkJfQ0KPiA+ICAJCQkJCX0NCj4gPiAgDQo+ID4gIAkJCQkJb3V0cHV0X2Nv dW50c1tpXSArPSByZXQ7DQo+ID4gIAkJCQl9IGVsc2UgaWYgKG91dHB1dF9jb3VudHNbaV0gPCBv dXRwdXRfdHJpZ2dlciAmJg0KPiA+ICAJCQkJCSAgIHJldCA8IDApIHsNCj4gPiAgCQkJCQlyZXQg PSBzbmRfcGNtX3JlY292ZXIoaGFuZGxlLCByZXQsIDApOw0KPiA+IC0JCQkJCWlmIChyZXQgPCAw KQ0KPiA+ICsJCQkJCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJCQkJCWlndF9kZWJ1Zygic25kX3Bj bV9yZWNvdmVyIGZhaWxlZCIpOw0KPiA+ICAJCQkJCQlnb3RvIGNvbXBsZXRlOw0KPiA+ICsJCQkJ CX0NCj4gPiAgCQkJCX0NCj4gPiAgCQkJfQ0KPiA+ICANCj4gPiBAQCAtNjA5LDE2ICs2MzksMjAg QEAgaW50IGFsc2FfcnVuKHN0cnVjdCBhbHNhICphbHNhLCBpbnQgZHVyYXRpb25fbXMpDQo+ID4g IAkJCQkJcmV0ID0gMDsNCj4gPiAgCQkJCX0gZWxzZSBpZiAocmV0IDwgMCkgew0KPiA+ICAJCQkJ CXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5kbGUsIHJldCwgMCk7DQo+ID4gLQkJCQkJaWYgKHJl dCA8IDApDQo+ID4gKwkJCQkJaWYgKHJldCA8IDApIHsNCj4gPiArCQkJCQkJaWd0X2RlYnVnKCJz bmRfcGNtX3JlY292ZXIgYWZ0ZXIgc25kX3BjbV9yZWFkaSBmYWlsZWQiKTsNCj4gPiAgCQkJCQkJ Z290byBjb21wbGV0ZTsNCj4gPiArCQkJCQl9DQo+ID4gIAkJCQl9DQo+ID4gIA0KPiA+ICAJCQkJ aW5wdXRfY291bnQgKz0gcmV0Ow0KPiA+ICAJCQkJaW5wdXRfdG90YWwgKz0gcmV0Ow0KPiA+ICAJ CQl9IGVsc2UgaWYgKGlucHV0X2NvdW50IDwgaW5wdXRfdHJpZ2dlciAmJiByZXQgPCAwKSB7DQo+ ID4gIAkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFuZGxlLCByZXQsIDApOw0KPiA+IC0JCQkJ aWYgKHJldCA8IDApDQo+ID4gKwkJCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQkJCWlndF9kZWJ1 Zygic25kX3BjbV9yZWNvdmVyIGZhaWxlZCIpOw0KPiA+ICAJCQkJCWdvdG8gY29tcGxldGU7DQo+ ID4gKwkJCQl9DQo+ID4gIAkJCX0NCj4gPiAgCQl9DQo+ID4gIAl9IHdoaWxlICghcmVhY2hlZCk7 DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYWxzYS5oIGIvbGliL2lndF9hbHNhLmgNCj4gPiBp bmRleCA1MDc5NTEzMC4uNWM4MDRiNDYgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2lndF9hbHNhLmgN Cj4gPiArKysgYi9saWIvaWd0X2Fsc2EuaA0KPiA+IEBAIC0zMyw2ICszMyw3IEBADQo+ID4gIA0K PiA+ICBzdHJ1Y3QgYWxzYTsNCj4gPiAgDQo+ID4gK2Jvb2wgYWxzYV9oYXNfZXhjbHVzaXZlX2Fj Y2Vzcyh2b2lkKTsNCj4gPiAgc3RydWN0IGFsc2EgKmFsc2FfaW5pdCh2b2lkKTsNCj4gPiAgaW50 IGFsc2Ffb3Blbl9vdXRwdXQoc3RydWN0IGFsc2EgKmFsc2EsIGNvbnN0IGNoYXIgKmRldmljZV9u YW1lKTsNCj4gPiAgaW50IGFsc2Ffb3Blbl9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSwgY29uc3Qg Y2hhciAqZGV2aWNlX25hbWUpOw0KPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2F1ZGlvLmMgYi9s aWIvaWd0X2F1ZGlvLmMNCj4gPiBpbmRleCBhMDU5MmQ1My4uNGNjOWJkZjAgMTAwNjQ0DQo+ID4g LS0tIGEvbGliL2lndF9hdWRpby5jDQo+ID4gKysrIGIvbGliL2lndF9hdWRpby5jDQo+ID4gQEAg LTI2LDggKzI2LDExIEBADQo+ID4gIA0KPiA+ICAjaW5jbHVkZSAiY29uZmlnLmgiDQo+ID4gIA0K PiA+IC0jaW5jbHVkZSA8bWF0aC5oPg0KPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiArI2lu Y2x1ZGUgPGZjbnRsLmg+DQo+ID4gICNpbmNsdWRlIDxnc2wvZ3NsX2ZmdF9yZWFsLmg+DQo+ID4g KyNpbmNsdWRlIDxtYXRoLmg+DQo+ID4gKyNpbmNsdWRlIDx1bmlzdGQuaD4NCj4gPiAgDQo+ID4g ICNpbmNsdWRlICJpZ3RfYXVkaW8uaCINCj4gPiAgI2luY2x1ZGUgImlndF9jb3JlLmgiDQo+ID4g QEAgLTEyOCw3ICsxMzEsNyBAQCBpbnQgYXVkaW9fc2lnbmFsX2FkZF9mcmVxdWVuY3koc3RydWN0 IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgZnJlcXVlbmN5KQ0KPiA+ICAgKi8NCj4gPiAgdm9p ZCBhdWRpb19zaWduYWxfc3ludGhlc2l6ZShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwpDQo+ ID4gIHsNCj4gPiAtCXNob3J0ICpwZXJpb2Q7DQo+ID4gKwlpbnQxNl90ICpwZXJpb2Q7DQo+ID4g IAlkb3VibGUgdmFsdWU7DQo+ID4gIAlpbnQgZnJhbWVzOw0KPiA+ICAJaW50IGZyZXE7DQo+ID4g QEAgLTE0NSw5ICsxNDgsOSBAQCB2b2lkIGF1ZGlvX3NpZ25hbF9zeW50aGVzaXplKHN0cnVjdCBh dWRpb19zaWduYWwgKnNpZ25hbCkNCj4gPiAgDQo+ID4gIAkJZm9yIChqID0gMDsgaiA8IGZyYW1l czsgaisrKSB7DQo+ID4gIAkJCXZhbHVlID0gMi4wICogTV9QSSAqIGZyZXEgLyBzaWduYWwtPnNh bXBsaW5nX3JhdGUgKiBqOw0KPiA+IC0JCQl2YWx1ZSA9IHNpbih2YWx1ZSkgKiBTSFJUX01BWCAv IHNpZ25hbC0+ZnJlcXNfY291bnQ7DQo+ID4gKwkJCXZhbHVlID0gc2luKHZhbHVlKSAqIElOVDE2 X01BWCAvIHNpZ25hbC0+ZnJlcXNfY291bnQ7DQo+ID4gIA0KPiA+IC0JCQlwZXJpb2Rbal0gPSAo c2hvcnQpIHZhbHVlOw0KPiA+ICsJCQlwZXJpb2Rbal0gPSAoaW50MTZfdCkgdmFsdWU7DQo+IA0K PiBTZWVtcyBsaWtlIGFsbCB0aGVzZSBhbHNhIGNoYW5nZXMgc2hvdWxkIGJlIGluIHRoZWlyIG93 biBwYXRjaGVzIHNvIGFzDQo+IHlvdSBjb3VsZCBleHBsYWluIHdoeSB0aGVzZSBjaGFuZ2VzIGFy ZSBuZWVkZWQuDQo+IA0KPiBBcmUgeW91IGFmcmFpZCB0aGF0IHNvbWUgcGxhdGZvcm1zIHdvdWxk IG5vdCBoYXZlIFNIT1JUID09IElOVDE2Pw0KPiANCj4gSWYgdGhlc2UgY2hhbmdlcyB3b3VsZCBo YXZlIHJlcXVpcmVkIGNoYW5nZXMgaW4gY29kZSB0aGF0IHlvdSB3b3VsZA0KPiBjaGFuZ2UgYW55 d2F5IHJpZ2h0IGFmdGVyLCB0aGVuIGF0IGxlYXN0IGV4cGxhaW4gdGhlIGNoYW5nZXMgaW4gdGhl DQo+IGNvbW1pdCBsb2cgOikNCg0KWWVhaCwgc29ycnkgYWJvdXQgdGhpcy4gSSBqdXN0IGNvbXBs ZXRlbHkgZm9yZ290IGFib3V0IHRoaXMgY2hhbmdlIHdoZW4NCndyaXRpbmcgdGhlIGNvbW1pdCBs b2cuIFRCSCB3aGVuIHdyaXRpbmcgdGhpcyBwYXRjaCBJIHdhcyBtYWlubHkNCmNvbmNlcm5lZCBh Ym91dCBnZXR0aW5nIHNvbWV0aGluZyB3b3JraW5nIF9hdCBhbGxfLCBhbmQgaXQgdG9vayBxdWl0 ZSBhDQpmZXcgZGF5cy4gOlANCg0KVGhlIHJhdGlvbmFsZSBpczoNCg0KLSBUaGUgc3RhbmRhcmQg c2F5cyBhIHNob3J0IGlzIGF0IGxlYXN0IDE2IGJpdCB3aWRlLCBidXQgYSBzaG9ydCBjYW4gYmUN CiAgbGFyZ2VyIChpbiBwcmFjdGljZSBpdCB3b24ndCBoYXBwZW4sIGJ1dCBiZXR0ZXIgdXNlIHR5 cGVzIGNvcnJlY3RseSkNCi0gSXQgbWFrZXMgaXQgY2xlYXJlciB0aGF0IHRoZSBhdWRpbyBmb3Jt YXQgaXMgUzE2X0xFLCBzaW5jZSAiMTYiIGlzIA0KICBpbiB0aGUgdHlwZSBuYW1lLg0KDQpJIGNh biBleHRyYWN0IHRoZXNlIGNoYW5nZXMgdG8gYW4gaW5kaXZpZHVhbCBjb21taXQgaWYgbmVlZGVk Lg0KDQo+ID4gIAkJfQ0KPiA+ICANCj4gPiAgCQlzaWduYWwtPmZyZXFzW2ldLnBlcmlvZCA9IHBl cmlvZDsNCj4gPiBAQCAtMTg2LDE3ICsxODksMTYgQEAgdm9pZCBhdWRpb19zaWduYWxfY2xlYW4o c3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKQ0KPiA+ICAgKiBzaWduYWwgZGF0YSAoaW4gaW50 ZXJsZWF2ZWQgUzE2X0xFIGZvcm1hdCksIGF0IHRoZSByZXF1ZXN0ZWQgc2FtcGxpbmcgcmF0ZQ0K PiA+ICAgKiBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzLg0KPiA+ICAgKi8NCj4gPiAtdm9pZCBhdWRp b19zaWduYWxfZmlsbChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIHNob3J0ICpidWZmZXIs IGludCBmcmFtZXMpDQo+ID4gK3ZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3Np Z25hbCAqc2lnbmFsLCBpbnQxNl90ICpidWZmZXIsIGludCBmcmFtZXMpDQo+ID4gIHsNCj4gPiAt CXNob3J0ICpkZXN0aW5hdGlvbjsNCj4gPiAtCXNob3J0ICpzb3VyY2U7DQo+ID4gKwlpbnQxNl90 ICpkZXN0aW5hdGlvbiwgKnNvdXJjZTsNCj4gPiAgCWludCB0b3RhbDsNCj4gPiAgCWludCBmcmVx X2ZyYW1lczsNCj4gPiAgCWludCBmcmVxX29mZnNldDsNCj4gPiAgCWludCBjb3VudDsNCj4gPiAg CWludCBpLCBqLCBrOw0KPiA+ICANCj4gPiAtCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihzaG9y dCkgKiBzaWduYWwtPmNoYW5uZWxzICogZnJhbWVzKTsNCj4gPiArCW1lbXNldChidWZmZXIsIDAs IHNpemVvZihpbnQxNl90KSAqIHNpZ25hbC0+Y2hhbm5lbHMgKiBmcmFtZXMpOw0KPiA+ICANCj4g PiAgCWZvciAoaSA9IDA7IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKyspIHsNCj4gPiAgCQl0 b3RhbCA9IDA7DQo+ID4gQEAgLTIyOSw5NyArMjMxLDIxNCBAQCB2b2lkIGF1ZGlvX3NpZ25hbF9m aWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1l cykNCj4gPiAgfQ0KPiA+ICANCj4gPiAgLyoqDQo+ID4gLSAqIGF1ZGlvX3NpZ25hbF9kZXRlY3Q6 DQo+ID4gLSAqIEBzaWduYWw6IFRoZSB0YXJnZXQgc2lnbmFsIHN0cnVjdHVyZQ0KPiA+IC0gKiBA Y2hhbm5lbHM6IFRoZSBpbnB1dCBkYXRhJ3MgbnVtYmVyIG9mIGNoYW5uZWxzDQo+ID4gLSAqIEBz YW1wbGluZ19yYXRlOiBUaGUgaW5wdXQgZGF0YSdzIHNhbXBsaW5nIHJhdGUNCj4gPiAtICogQGJ1 ZmZlcjogVGhlIGlucHV0IGRhdGEncyBidWZmZXINCj4gPiAtICogQGZyYW1lczogVGhlIGlucHV0 IGRhdGEncyBudW1iZXIgb2YgZnJhbWVzDQo+ID4gLSAqDQo+ID4gLSAqIERldGVjdCB0aGF0IHRo ZSBmcmVxdWVuY2llcyBzcGVjaWZpZWQgaW4gQHNpZ25hbCwgYW5kIG9ubHkgdGhvc2UsIGFyZQ0K PiA+IC0gKiBwcmVzZW50IGluIHRoZSBpbnB1dCBkYXRhLiBUaGUgaW5wdXQgZGF0YSdzIGZvcm1h dCBpcyByZXF1aXJlZCB0byBiZSBTMTZfTEUuDQo+ID4gKyAqIENoZWNrcyB0aGF0IGZyZXF1ZW5j aWVzIHNwZWNpZmllZCBpbiBzaWduYWwsIGFuZCBvbmx5IHRob3NlLCBhcmUgaW5jbHVkZWQNCj4g PiArICogaW4gdGhlIGlucHV0IGRhdGEuDQo+ID4gICAqDQo+ID4gLSAqIFJldHVybnM6IEEgYm9v bGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRldGVjdGlvbiB3YXMgc3VjY2Vzc2Z1bA0KPiA+ ICsgKiBzYW1wbGluZ19yYXRlIGlzIGdpdmVuIGluIEh6LiBkYXRhX2xlbiBpcyB0aGUgbnVtYmVy IG9mIGVsZW1lbnRzIGluIGRhdGEuDQo+ID4gICAqLw0KPiA+IC1ib29sIGF1ZGlvX3NpZ25hbF9k ZXRlY3Qoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgY2hhbm5lbHMsDQo+ID4gLQkJ CSBpbnQgc2FtcGxpbmdfcmF0ZSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcykNCj4gPiArYm9v bCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50IHNh bXBsaW5nX3JhdGUsDQo+ID4gKwkJCSBkb3VibGUgKmRhdGEsIHNpemVfdCBkYXRhX2xlbikNCj4g PiAgew0KPiA+IC0JZG91YmxlIGRhdGFbZnJhbWVzXTsNCj4gPiAtCWludCBhbXBsaXR1ZGVbZnJh bWVzIC8gMl07DQo+ID4gKwlzaXplX3QgYW1wbGl0dWRlX2xlbiA9IGRhdGFfbGVuIC8gMiArIDE7 DQo+ID4gKwlkb3VibGUgYW1wbGl0dWRlW2FtcGxpdHVkZV9sZW5dOw0KPiANCj4gYmluX3Bvd2Vy Pw0KDQpIbW0sICJhbXBsaXR1ZGUiIGlzIHVzZWQgdG9vIGl0IHNlZW1zIFsxXS4gQnV0IGJpbl9w b3dlciBMR1RNLCBsZXQncw0Kc3dpdGNoIHRvIHRoaXMgd29yZGluZy4NCg0KWzFdOiBodHRwczov L2VuLndpa2lwZWRpYS5vcmcvd2lraS9GYXN0X0ZvdXJpZXJfdHJhbnNmb3JtIy9tZWRpYS9GaWxl OkZGVF9vZl9Db3NpbmVfU3VtbWF0aW9uX0Z1bmN0aW9uLnBuZw0KDQo+ID4gIAlib29sIGRldGVj dGVkW3NpZ25hbC0+ZnJlcXNfY291bnRdOw0KPiA+IC0JaW50IHRocmVzaG9sZDsNCj4gPiAtCWJv b2wgYWJvdmU7DQo+ID4gLQlpbnQgZXJyb3I7DQo+ID4gLQlpbnQgZnJlcSA9IDA7DQo+ID4gLQlp bnQgbWF4Ow0KPiA+IC0JaW50IGMsIGksIGo7DQo+ID4gLQ0KPiA+IC0JLyogQWxsb3dlZCBlcnJv ciBpbiBIeiBkdWUgdG8gRkZUIHN0ZXAuICovDQo+ID4gLQllcnJvciA9IHNhbXBsaW5nX3JhdGUg LyBmcmFtZXM7DQo+ID4gKwlpbnQgcmV0LCBlcHNpbG9uLCBmcmVxLCBtYXhfZnJlcTsNCj4gPiAr CWRvdWJsZSBtYXgsIHRocmVzaG9sZDsNCj4gPiArCXNpemVfdCBpLCBqOw0KPiA+ICsJYm9vbCBh Ym92ZSwgc3VjY2VzczsNCj4gPiArDQo+ID4gKwkvKiBBbGxvd2VkIGVycm9yIGluIEh6IGR1ZSB0 byBGRlQgc3RlcCAqLw0KPiA+ICsJZXBzaWxvbiA9IHNhbXBsaW5nX3JhdGUgLyBkYXRhX2xlbjsN Cj4gDQo+IGZyZXFfYWNjdXJhY3kgd291bGQgYmUgYSBuaWNlciBuYW1lLg0KDQpBZ3JlZWQuDQoN Cj4gPiArCWlndF9kZWJ1ZygiYWxsb3dlZCBmcmVxLiBlcnJvcjogJWQgSHpcbiIsIGVwc2lsb24p Ow0KPiA+ICsNCj4gPiArCXJldCA9IGdzbF9mZnRfcmVhbF9yYWRpeDJfdHJhbnNmb3JtKGRhdGEs IDEsIGRhdGFfbGVuKTsNCj4gPiArCWlndF9hc3NlcnQocmV0ID09IDApOw0KPiA+ICsNCj4gPiAr CS8qIEZvciBpIDwgZGF0YV9sZW4gLyAyLCB0aGUgcmVhbCBwYXJ0IG9mIHRoZSBpLXRoIHRlcm0g aXMgc3RvcmVkIGF0DQo+ID4gKwkgKiBkYXRhW2ldIGFuZCBpdHMgaW1hZ2luYXJ5IHBhcnQgaXMg c3RvcmVkIGF0IGRhdGFbZGF0YV9sZW4gLSBpXS4NCj4gPiArCSAqIGkgPSAwIGFuZCBpID0gZGF0 YV9sZW4gLyAyIGFyZSBzcGVjaWFsIGNhc2VzLCB0aGV5IGFyZSBwdXJlbHkgcmVhbA0KPiA+ICsJ ICogc28gdGhlaXIgaW1hZ2luYXJ5IHBhcnQgaXNuJ3Qgc3RvcmVkLg0KPiA+ICsJICoNCj4gPiAr CSAqIFRoZSBhbXBsaXR1ZGUgaXMgZW5jb2RlZCBhcyB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21w bGV4IG51bWJlciBhbmQNCj4gPiArCSAqIHRoZSBwaGFzZSBpcyBlbmNvZGVkIGFzIGl0cyBhbmds ZS4NCj4gPiArCSAqLw0KPiANCj4gVGhhbmtzIGZvciBkb2N1bWVudGluZyB0aGUgaWRpb3N5bmNy YXNpZXMgb2YgR1NMIQ0KPiANCj4gLyogY29tcHV0ZSB0aGUgcG93ZXIgcmVjZWl2ZWQgYXQgZXZl cnkgYmluIG9mIHRoZSBGRlQsIGFuZCByZWNvcmQgdGhlDQo+ICAqIG1heGltdW0gcG93ZXIgcmVj ZWl2ZWQgYXMgYSB3YXkgdG8gbm9ybWFsaXplIGFsbCB0aGUgb3RoZXJzLg0KPiAgKi8NCj4gDQo+ ID4gKwltYXggPSAwOw0KPiA+ICsJYW1wbGl0dWRlWzBdID0gZGF0YVswXTsNCj4gPiArCWZvciAo aSA9IDE7IGkgPCBhbXBsaXR1ZGVfbGVuIC0gMTsgaSsrKSB7DQo+ID4gKwkJYW1wbGl0dWRlW2ld ID0gaHlwb3QoZGF0YVtpXSwgZGF0YVtkYXRhX2xlbiAtIGldKTsNCj4gPiArCQlpZiAoYW1wbGl0 dWRlW2ldID4gbWF4KQ0KPiA+ICsJCQltYXggPSBhbXBsaXR1ZGVbaV07DQo+ID4gKwl9DQo+ID4g KwlhbXBsaXR1ZGVbYW1wbGl0dWRlX2xlbiAtIDFdID0gZGF0YVtkYXRhX2xlbiAvIDJdOw0KPiAN Cj4gV2hhdCdzIHRoZSBjb2Rpbmcgc3R5bGUgb2YgSUdUIHdydCBzcGFjZXMgdnMgdGFicz8NCg0K QWx3YXlzIHVzZSB0YWJzPyBJREdJLCBJIG9ubHkgc2VlIHRhYnMgaW4gdGhlcmUuIEknbSBwcm9i YWJseSBtaXNzaW5nDQpzb21ldGhpbmcuDQoNCj4gPiAgDQo+ID4gLQlmb3IgKGMgPSAwOyBjIDwg Y2hhbm5lbHM7IGMrKykgew0KPiA+IC0JCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykNCj4g PiAtCQkJZGF0YVtpXSA9IChkb3VibGUpIGJ1ZmZlcltpICogY2hhbm5lbHMgKyBjXTsNCj4gPiAr CWZvciAoaSA9IDA7IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKyspDQo+ID4gKwkJZGV0ZWN0 ZWRbaV0gPSBmYWxzZTsNCj4gDQo+IFRoaXMgY291bGQgaGF2ZSBiZWVuIGEgYml0ZmllbGQsIGJ1 dCBtZWghDQoNClJpZ2h0LiBTdGlsbCBoYXZlIHRvIGJlIGEgbGl0dGxlIGNhcmVmdWwgYmVjYXVz ZSBpbiB0aGUgZnV0dXJlIHdlJ2xsDQpwcm9iYWJseSB0ZXN0IDggY2hhbm5lbHMgd2l0aCBhIGNv dXBsZSBvZiBkaWZmZXJlbnQgZnJlcXVlbmNpZXMgb24gZWFjaA0KKHdlIHRlc3QgNSBmcmVxdWVu Y2llcyBBVE0sIHNvIHRoYXQgd291bGQgYmUgNDAgdG90YWwpLCBzbyBpdCBjb3VsZA0Kc29tZXdo YXQgYXBwcm9hY2ggYSA2NCBmcmVxdWVuY2llcyBsaW1pdC4NCg0KPiA+ICANCj4gPiAtCQlnc2xf ZmZ0X3JlYWxfcmFkaXgyX3RyYW5zZm9ybShkYXRhLCAxLCBmcmFtZXMpOw0KPiA+ICsJLyogV2Ug d2FudCB0byBkZXRlY3QgcGVha3MgYWJvdmUgYSBnaXZlbiB0aHJlc2hvbGQuICovDQo+IA0KPiAv KiBEbyBhIGxpbmVhciBzZWFyY2ggdGhyb3VnaCB0aGUgRkZUIGJpbnMnIHBvd2VyIHRvIGZpbmQg dGhlIHRoZSBsb2NhbA0KPiAgKiBtYXhpbXVtcyB0aGF0IGV4Y2VlZCBoYWxmIG9mIHRoZSBhYnNv bHV0ZSBtYXhpbXVtIHRoYXQgd2UgcHJldmlvdXNseQ0KPiAgKiBjYWxjdWxhdGVkLg0KPiAgKg0K PiAgKiBTaW5jZSB0aGUgZnJlcXVlbmNpZXMgbWlnaHQgbm90IGJlIHBlcmZlY3RseSBhbGlnbmVk IHdpdGggdGhlIGJpbnMgb2YNCj4gICogdGhlIEZGVCwgd2UgbmVlZCB0byBmaW5kIHRoZSBsb2Nh bCBtYXhpbXVtIGFjcm9zcyBzb21lIGNvbnNlY3V0aXZlDQo+ICAqIGJpbnMuIE9uY2UgdGhlIHBv d2VyIHJldHVybnMgdW5kZXIgdGhlIHBvd2VyIHRocmVzaG9sZCwgd2UgY29tcGFyZQ0KPiAgKiB0 aGUgZnJlcXVlbmN5IG9mIHRoZSBiaW4gdGhhdCByZWNlaXZlZCB0aGUgbWF4aW11bSBwb3dlciB0 byB0aGUNCj4gICogZXhwZWN0ZWQgZnJlcXVlbmNpZXMuIElmIGZvdW5kLCB3ZSBtYXJrIHRoaXMg ZnJlcXVlbmN5IGFzIHN1Y2gsDQo+ICAqIG90aGVyd2lzZSB3ZSB3YXJuIHRoYXQgYW4gdW5leHBl Y3RlZCBmcmVxdWVuY3kgd2FzIGZvdW5kLg0KPiAgKi8NCj4gDQo+ID4gKwl0aHJlc2hvbGQgPSBt YXggLyAyOw0KPiA+ICsJc3VjY2VzcyA9IHRydWU7DQo+ID4gKwlhYm92ZSA9IGZhbHNlOw0KPiA+ ICsJbWF4ID0gMDsNCj4gPiArCW1heF9mcmVxID0gLTE7DQo+IA0KPiBsb2NhbF9tYXggPSAwOw0K PiBsb2NhbF9tYXhfZnJlcSA9IC0xOw0KDQpUaGF0J3MgYmV0dGVyIGluZGVlZC4NCg0KPiA+ICsJ Zm9yIChpID0gMDsgaSA8IGFtcGxpdHVkZV9sZW47IGkrKykgew0KPiA+ICsJCWZyZXEgPSBzYW1w bGluZ19yYXRlICogaSAvIGRhdGFfbGVuOw0KPiA+ICANCj4gPiAtCQltYXggPSAwOw0KPiA+ICsJ CWlmIChhbXBsaXR1ZGVbaV0gPiB0aHJlc2hvbGQpDQo+ID4gKwkJCWFib3ZlID0gdHJ1ZTsNCj4g PiAgDQo+ID4gLQkJZm9yIChpID0gMDsgaSA8IGZyYW1lcyAvIDI7IGkrKykgew0KPiA+IC0JCQlh bXBsaXR1ZGVbaV0gPSBoeXBvdChkYXRhW2ldLCBkYXRhW2ZyYW1lcyAtIGldKTsNCj4gPiAtCQkJ aWYgKGFtcGxpdHVkZVtpXSA+IG1heCkNCj4gPiAtCQkJCW1heCA9IGFtcGxpdHVkZVtpXTsNCj4g PiArCQlpZiAoIWFib3ZlKSB7DQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICAJCX0NCj4gPiAgDQo+ ID4gLQkJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykNCj4gPiAtCQkJ ZGV0ZWN0ZWRbaV0gPSBmYWxzZTsNCj4gPiAtDQo+ID4gLQkJdGhyZXNob2xkID0gbWF4IC8gMjsN Cj4gPiAtCQlhYm92ZSA9IGZhbHNlOw0KPiA+IC0JCW1heCA9IDA7DQo+ID4gLQ0KPiA+IC0JCWZv ciAoaSA9IDA7IGkgPCBmcmFtZXMgLyAyOyBpKyspIHsNCj4gPiAtCQkJaWYgKGFtcGxpdHVkZVtp XSA+IHRocmVzaG9sZCkNCj4gPiAtCQkJCWFib3ZlID0gdHJ1ZTsNCj4gPiAtDQo+ID4gLQkJCWlm IChhYm92ZSkgew0KPiA+IC0JCQkJaWYgKGFtcGxpdHVkZVtpXSA8IHRocmVzaG9sZCkgew0KPiA+ IC0JCQkJCWFib3ZlID0gZmFsc2U7DQo+ID4gLQkJCQkJbWF4ID0gMDsNCj4gPiAtDQo+ID4gLQkJ CQkJZm9yIChqID0gMDsgaiA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGorKykgew0KPiA+IC0JCQkJ CQlpZiAoc2lnbmFsLT5mcmVxc1tqXS5mcmVxID4NCj4gPiAtCQkJCQkJICAgIGZyZXEgLSBlcnJv ciAmJg0KPiA+IC0JCQkJCQkgICAgc2lnbmFsLT5mcmVxc1tqXS5mcmVxIDwNCj4gPiAtCQkJCQkJ ICAgIGZyZXEgKyBlcnJvcikgew0KPiA+IC0JCQkJCQkJZGV0ZWN0ZWRbal0gPSB0cnVlOw0KPiA+ IC0JCQkJCQkJYnJlYWs7DQo+ID4gLQkJCQkJCX0NCj4gPiAtCQkJCQl9DQo+ID4gLQ0KPiA+IC0J CQkJCS8qIERldGVjdGVkIGZyZXF1ZW5jeSB3YXMgbm90IGdlbmVyYXRlZC4gKi8NCj4gPiAtCQkJ CQlpZiAoaiA9PSBzaWduYWwtPmZyZXFzX2NvdW50KSB7DQo+ID4gLQkJCQkJCWlndF9kZWJ1Zygi RGV0ZWN0ZWQgYWRkaXRpb25hbCBmcmVxdWVuY3k6ICVkXG4iLA0KPiA+IC0JCQkJCQkJICBmcmVx KTsNCj4gPiAtCQkJCQkJcmV0dXJuIGZhbHNlOw0KPiA+IC0JCQkJCX0NCj4gPiArCQkvKiBJZiB3 ZSB3ZXJlIGFib3ZlIHRoZSB0aHJlc2hvbGQgYW5kIHdlJ3JlIG5vdCBhbnltb3JlLCBpdCdzDQo+ ID4gKwkJICogdGltZSB0byBkZWNpZGUgd2hldGhlciB0aGUgcGVhayBmcmVxdWVuY3kgaXMgY29y cmVjdCBvcg0KPiA+ICsJCSAqIGludmFsaWQuICovDQo+ID4gKwkJaWYgKGFtcGxpdHVkZVtpXSA8 IHRocmVzaG9sZCkgew0KPiA+ICsJCQlmb3IgKGogPSAwOyBqIDwgc2lnbmFsLT5mcmVxc19jb3Vu dDsgaisrKSB7DQo+ID4gKwkJCQlpZiAoc2lnbmFsLT5mcmVxc1tqXS5mcmVxID4NCj4gPiArCQkJ CSAgICBtYXhfZnJlcSAtIGVwc2lsb24gJiYNCj4gPiArCQkJCSAgICBzaWduYWwtPmZyZXFzW2pd LmZyZXEgPA0KPiA+ICsJCQkJICAgIG1heF9mcmVxICsgZXBzaWxvbikgew0KPiA+ICsJCQkJCWRl dGVjdGVkW2pdID0gdHJ1ZTsNCj4gPiArCQkJCQlpZ3RfZGVidWcoIkZyZXF1ZW5jeSAlZCBkZXRl Y3RlZFxuIiwNCj4gPiArCQkJCQkJICBtYXhfZnJlcSk7DQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4g IAkJCQl9DQo+ID4gKwkJCX0NCj4gPiAgDQo+ID4gLQkJCQlpZiAoYW1wbGl0dWRlW2ldID4gbWF4 KSB7DQo+ID4gLQkJCQkJbWF4ID0gYW1wbGl0dWRlW2ldOw0KPiA+IC0JCQkJCWZyZXEgPSBzYW1w bGluZ19yYXRlICogaSAvIGZyYW1lczsNCj4gPiAtCQkJCX0NCj4gPiArCQkJLyogV2UgaGF2ZW4n dCBnZW5lcmF0ZWQgdGhpcyBmcmVxdWVuY3ksIGJ1dCB3ZSBkZXRlY3RlZA0KPiA+ICsJCQkgKiBp dC4gKi8NCj4gPiArCQkJaWYgKGogPT0gc2lnbmFsLT5mcmVxc19jb3VudCkgew0KPiA+ICsJCQkJ aWd0X2RlYnVnKCJEZXRlY3RlZCBhZGRpdGlvbmFsIGZyZXF1ZW5jeTogJWRcbiIsDQo+ID4gKwkJ CQkJICBtYXhfZnJlcSk7DQo+ID4gKwkJCQlzdWNjZXNzID0gZmFsc2U7DQo+ID4gIAkJCX0NCj4g PiArDQo+ID4gKwkJCWFib3ZlID0gZmFsc2U7DQo+ID4gKwkJCW1heCA9IDA7DQo+ID4gKwkJCW1h eF9mcmVxID0gLTE7DQo+ID4gIAkJfQ0KPiA+ICANCj4gPiAtCQlmb3IgKGkgPSAwOyBpIDwgc2ln bmFsLT5mcmVxc19jb3VudDsgaSsrKSB7DQo+ID4gLQkJCWlmICghZGV0ZWN0ZWRbaV0pIHsNCj4g PiAtCQkJCWlndF9kZWJ1ZygiTWlzc2luZyBmcmVxdWVuY3k6ICVkXG4iLA0KPiA+IC0JCQkJCSAg c2lnbmFsLT5mcmVxc1tpXS5mcmVxKTsNCj4gPiAtCQkJCXJldHVybiBmYWxzZTsNCj4gPiAtCQkJ fQ0KPiA+ICsJCWlmIChhbXBsaXR1ZGVbaV0gPiBtYXgpIHsNCj4gPiArCQkJbWF4ID0gYW1wbGl0 dWRlW2ldOw0KPiA+ICsJCQltYXhfZnJlcSA9IGZyZXE7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCS8qIENoZWNrIHRoYXQgYWxsIGZyZXF1ZW5jaWVzIHdlIGdlbmVyYXRlZCBoYXZl IGJlZW4gZGV0ZWN0ZWQuICovDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19j b3VudDsgaSsrKSB7DQo+ID4gKwkJaWYgKCFkZXRlY3RlZFtpXSkgew0KPiA+ICsJCQlpZ3RfZGVi dWcoIk1pc3NpbmcgZnJlcXVlbmN5OiAlZFxuIiwNCj4gPiArCQkJCSAgc2lnbmFsLT5mcmVxc1tp XS5mcmVxKTsNCj4gPiArCQkJc3VjY2VzcyA9IGZhbHNlOw0KPiA+ICAJCX0NCj4gPiAgCX0NCj4g PiAgDQo+ID4gLQlyZXR1cm4gdHJ1ZTsNCj4gPiArCXJldHVybiBzdWNjZXNzOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogRXh0cmFjdHMgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIGEg bXVsdGktY2hhbm5lbCBTMzJfTEUgaW5wdXQgYnVmZmVyLg0KPiA+ICsgKi8NCj4gPiArc2l6ZV90 IGF1ZGlvX2V4dHJhY3RfY2hhbm5lbF9zMzJfbGUoZG91YmxlICpkc3QsIHNpemVfdCBkc3RfY2Fw LA0KPiA+ICsJCQkJICAgIGludDMyX3QgKnNyYywgc2l6ZV90IHNyY19sZW4sDQo+ID4gKwkJCQkg ICAgaW50IG5fY2hhbm5lbHMsIGludCBjaGFubmVsKQ0KPiA+ICt7DQo+ID4gKwlzaXplX3QgZHN0 X2xlbiwgaTsNCj4gPiArDQo+ID4gKwlpZ3RfYXNzZXJ0KGNoYW5uZWwgPCBuX2NoYW5uZWxzKTsN Cj4gPiArCWlndF9hc3NlcnQoc3JjX2xlbiAlIG5fY2hhbm5lbHMgPT0gMCk7DQo+ID4gKwlkc3Rf bGVuID0gc3JjX2xlbiAvIG5fY2hhbm5lbHM7DQo+ID4gKwlpZ3RfYXNzZXJ0KGRzdF9sZW4gPD0g ZHN0X2NhcCk7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZHN0X2xlbjsgaSsrKQ0KPiA+ICsJCWRz dFtpXSA9IChkb3VibGUpIHNyY1tpICogbl9jaGFubmVscyArIGNoYW5uZWxdOw0KPiA+ICsNCj4g PiArCXJldHVybiBkc3RfbGVuOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJJRkZfVEFH ICJSSUZGIg0KPiA+ICsjZGVmaW5lIFdBVkVfVEFHICJXQVZFIg0KPiA+ICsjZGVmaW5lIEZNVF9U QUcgImZtdCAiDQo+ID4gKyNkZWZpbmUgREFUQV9UQUcgImRhdGEiDQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZA0KPiA+ICthcHBlbmRfdG9fYnVmZmVyKGNoYXIgKmRzdCwgc2l6ZV90ICppLCBjb25z dCB2b2lkICpzcmMsIHNpemVfdCBzcmNfc2l6ZSkNCj4gPiArew0KPiA+ICsJbWVtY3B5KCZkc3Rb KmldLCBzcmMsIHNyY19zaXplKTsNCj4gPiArCSppICs9IHNyY19zaXplOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogQ3JlYXRlcyBhIG5ldyBXQVYgZmlsZS4gc2FtcGxlX3JhdGUg aXMgaW4gSHouIElmIHBhdGggaXMgbm90IE5VTEwsIGl0IHdpbGwNCj4gPiArICogYmUgc2V0IHRv IHRoZSBuZXcgZmlsZSBwYXRoICh0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlLWlu ZyBpdCkuDQo+ID4gKyAqDQo+ID4gKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhl IGNhbGxlciBpcyBleHBlY3RlZCB0byB3cml0ZSBTMzJfTEUgUENNIGRhdGENCj4gPiArICogdG8g dGhlIHJldHVybmVkIGZpbGUgZGVzY3JpcHRvci4NCj4gPiArICoNCj4gPiArICogU2VlIGh0dHA6 Ly93d3ctbW1zcC5lY2UubWNnaWxsLmNhL0RvY3VtZW50cy9BdWRpb0Zvcm1hdHMvV0FWRS9XQVZF Lmh0bWwgZm9yDQo+ID4gKyAqIGEgV0FWIGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb24uDQo+ID4g KyAqLw0KPiA+ICtpbnQgYXVkaW9fY3JlYXRlX3dhdl9maWxlX3MzMl9sZShjb25zdCBjaGFyICpx dWFsaWZpZXIsIHVpbnQzMl90IHNhbXBsZV9yYXRlLA0KPiA+ICsJCQkJIHVpbnQxNl90IGNoYW5u ZWxzLCBjaGFyICoqcGF0aCkNCj4gDQo+IFdoYXQgaXMgcXVhbGlmaWVyPw0KDQpUaGlzIGlzIHRh a2VuIGZyb20gaWd0X3dyaXRlX2ZyYW1lX3RvX3BuZy4gSSBndWVzcyB0aGlzIGNvdWxkIHVzZSBz b21lDQptb3JlIGRvY3MuDQoNCi8qKg0KICogYXVkaW9fY3JlYXRlX3dhdl9maWxlX3MzMl9sZToN CiAqIEBxdWFsaWZpZXI6IHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAodGhlIHRlc3QgbmFtZSB3 aWxsIGJlIHByZXBlbmRlZCwgYW5kDQogKiB0aGUgZmlsZSBleHRlbnNpb24gd2lsbCBiZSBhcHBl bmRlZCkNCiAqIEBzYW1wbGVfcmF0ZTogdGhlIHNhbXBsZSByYXRlIGluIEh6DQogKiBAY2hhbm5l bHM6IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMNCiAqIEBwYXRoOiBpZiBub24tTlVMTCwgd2lsbCBi ZSBzZXQgdG8gYSBwb2ludGVyIHRvIHRoZSBuZXcgZmlsZSBwYXRoICh0aGUNCiAqIGNhbGxlciBp cyByZXNwb25zaWJsZSBmb3IgZnJlZS1pbmcgaXQpDQogKg0KICogQ3JlYXRlcyBhIG5ldyBXQVYg ZmlsZS4NCiAqDQogKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxsZXIgaXMg ZXhwZWN0ZWQgdG8gd3JpdGUgUzMyX0xFIFBDTSBkYXRhDQogKiB0byB0aGUgcmV0dXJuZWQgZmls ZSBkZXNjcmlwdG9yLg0KICoNCiAqIFNlZSBodHRwOi8vd3d3LW1tc3AuZWNlLm1jZ2lsbC5jYS9E b2N1bWVudHMvQXVkaW9Gb3JtYXRzL1dBVkUvV0FWRS5odG1sIGZvcg0KICogYSBXQVYgZmlsZSBm b3JtYXQgc3BlY2lmaWNhdGlvbi4NCiAqDQogKiBSZXR1cm5zOiBhIGZpbGUgZGVzY3JpcHRvciB0 byB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlLCBvciAtMSBvbiBlcnJvci4NCiAqLw0KDQo+IE1heWJl IHdlIGNhbiByZW5hbWUgdGhhdCB0byBjaGFubmVsX2NvdW50Pw0KDQpJIHdhbnQgdG8gc2hvdmUg aW4gdGhlIHBsYXliYWNrIGZyZXF1ZW5jeSB0b28gaW4gdGhlIGZ1dHVyZSwgc28gSSdkDQpyYXRo ZXIgbm90Lg0KDQo+ID4gK3sNCj4gPiArCWNoYXIgX3BhdGhbUEFUSF9NQVhdOw0KPiA+ICsJY29u c3QgY2hhciAqdGVzdF9uYW1lLCAqc3VidGVzdF9uYW1lOw0KPiA+ICsJaW50IGZkOw0KPiA+ICsJ Y2hhciBoZWFkZXJbNDRdOw0KPiA+ICsJc2l6ZV90IGkgPSAwOw0KPiA+ICsJdWludDMyX3QgZmls ZV9zaXplLCBjaHVua19zaXplLCBieXRlX3JhdGU7DQo+ID4gKwl1aW50MTZfdCBmb3JtYXQsIGJs b2NrX2FsaWduLCBiaXRzX3Blcl9zYW1wbGU7DQo+ID4gKw0KPiA+ICsJdGVzdF9uYW1lID0gaWd0 X3Rlc3RfbmFtZSgpOw0KPiA+ICsJc3VidGVzdF9uYW1lID0gaWd0X3N1YnRlc3RfbmFtZSgpOw0K PiA+ICsNCj4gPiArCWlndF9hc3NlcnQoaWd0X2ZyYW1lX2R1bXBfcGF0aCk7DQo+ID4gKwlzbnBy aW50ZihfcGF0aCwgc2l6ZW9mKF9wYXRoKSwgIiVzL2F1ZGlvLSVzLSVzLSVzLndhdiIsDQo+ID4g KwkJIGlndF9mcmFtZV9kdW1wX3BhdGgsIHRlc3RfbmFtZSwgc3VidGVzdF9uYW1lLCBxdWFsaWZp ZXIpOw0KPiA+ICsNCj4gPiArCWlmIChwYXRoKQ0KPiA+ICsJCSpwYXRoID0gc3RyZHVwKF9wYXRo KTsNCj4gPiArDQo+ID4gKwlpZ3RfZGVidWcoIkR1bXBpbmcgJXMgYXVkaW8gdG8gJXNcbiIsIHF1 YWxpZmllciwgX3BhdGgpOw0KPiA+ICsJZmQgPSBvcGVuKF9wYXRoLCBPX1dST05MWSB8IE9fQ1JF QVQgfCBPX1RSVU5DKTsNCj4gPiArCWlmIChmZCA8IDApIHsNCj4gPiArCQlpZ3Rfd2Fybigib3Bl biBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwkvKiBGaWxlIGhlYWRlciAqLw0KPiA+ICsJZmlsZV9zaXplID0g VUlOVDMyX01BWDsgLyogdW5rbm93biBmaWxlIHNpemUgKi8NCj4gPiArCWFwcGVuZF90b19idWZm ZXIoaGVhZGVyLCAmaSwgUklGRl9UQUcsIHN0cmxlbihSSUZGX1RBRykpOw0KPiA+ICsJYXBwZW5k X3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmZmlsZV9zaXplLCBzaXplb2YoZmlsZV9zaXplKSk7DQo+ ID4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIFdBVkVfVEFHLCBzdHJsZW4oV0FWRV9U QUcpKTsNCj4gPiArDQo+ID4gKwkvKiBGb3JtYXQgY2h1bmsgKi8NCj4gPiArCWNodW5rX3NpemUg PSAxNjsNCj4gPiArCWZvcm1hdCA9IDE7IC8qIFBDTSAqLw0KPiA+ICsJYml0c19wZXJfc2FtcGxl ID0gMzI7IC8qIFMzMl9MRSAqLw0KPiA+ICsJYnl0ZV9yYXRlID0gc2FtcGxlX3JhdGUgKiBjaGFu bmVscyAqIGJpdHNfcGVyX3NhbXBsZSAvIDg7DQo+ID4gKwlibG9ja19hbGlnbiA9IGNoYW5uZWxz ICogYml0c19wZXJfc2FtcGxlIC8gODsNCj4gPiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAm aSwgRk1UX1RBRywgc3RybGVuKEZNVF9UQUcpKTsNCj4gPiArCWFwcGVuZF90b19idWZmZXIoaGVh ZGVyLCAmaSwgJmNodW5rX3NpemUsIHNpemVvZihjaHVua19zaXplKSk7DQo+ID4gKwlhcHBlbmRf dG9fYnVmZmVyKGhlYWRlciwgJmksICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKTsNCj4gPiArCWFw cGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmNoYW5uZWxzLCBzaXplb2YoY2hhbm5lbHMpKTsN Cj4gPiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJnNhbXBsZV9yYXRlLCBzaXplb2Yo c2FtcGxlX3JhdGUpKTsNCj4gPiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmJ5dGVf cmF0ZSwgc2l6ZW9mKGJ5dGVfcmF0ZSkpOw0KPiA+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIs ICZpLCAmYmxvY2tfYWxpZ24sIHNpemVvZihibG9ja19hbGlnbikpOw0KPiA+ICsJYXBwZW5kX3Rv X2J1ZmZlcihoZWFkZXIsICZpLCAmYml0c19wZXJfc2FtcGxlLCBzaXplb2YoYml0c19wZXJfc2Ft cGxlKSk7DQo+ID4gKw0KPiA+ICsJLyogRGF0YSBjaHVuayAqLw0KPiA+ICsJY2h1bmtfc2l6ZSA9 IFVJTlQzMl9NQVg7IC8qIHVua25vd24gY2h1bmsgc2l6ZSAqLw0KPiA+ICsJYXBwZW5kX3RvX2J1 ZmZlcihoZWFkZXIsICZpLCBEQVRBX1RBRywgc3RybGVuKERBVEFfVEFHKSk7DQo+ID4gKwlhcHBl bmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZjaHVua19zaXplLCBzaXplb2YoY2h1bmtfc2l6ZSkp Ow0KPiA+ICsNCj4gPiArCWlndF9hc3NlcnQoaSA9PSBzaXplb2YoaGVhZGVyKSk7DQo+ID4gKw0K PiA+ICsJaWYgKHdyaXRlKGZkLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpKSAhPSBzaXplb2YoaGVh ZGVyKSkgew0KPiA+ICsJCWlndF93YXJuKCJ3cml0ZSBmYWlsZWQ6ICVzJ24iLCBzdHJlcnJvcihl cnJubykpOw0KPiA+ICsJCWNsb3NlKGZkKTsNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIGZkOw0KPiA+ICB9DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf YXVkaW8uaCBiL2xpYi9pZ3RfYXVkaW8uaA0KPiA+IGluZGV4IGIzYjY1OGE0Li40YWE0M2U2OSAx MDA2NDQNCj4gPiAtLS0gYS9saWIvaWd0X2F1ZGlvLmgNCj4gPiArKysgYi9saWIvaWd0X2F1ZGlv LmgNCj4gPiBAQCAtMzAsNiArMzAsNyBAQA0KPiA+ICAjaW5jbHVkZSAiY29uZmlnLmgiDQo+ID4g IA0KPiA+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPg0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ ID4gIA0KPiA+ICBzdHJ1Y3QgYXVkaW9fc2lnbmFsOw0KPiA+ICANCj4gPiBAQCAtMzcsOCArMzgs MTMgQEAgc3RydWN0IGF1ZGlvX3NpZ25hbCAqYXVkaW9fc2lnbmFsX2luaXQoaW50IGNoYW5uZWxz LCBpbnQgc2FtcGxpbmdfcmF0ZSk7DQo+ID4gIGludCBhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5j eShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludCBmcmVxdWVuY3kpOw0KPiA+ICB2b2lk IGF1ZGlvX3NpZ25hbF9zeW50aGVzaXplKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCk7DQo+ ID4gIHZvaWQgYXVkaW9fc2lnbmFsX2NsZWFuKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCk7 DQo+ID4gLXZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFs LCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsNCj4gPiAtYm9vbCBhdWRpb19zaWduYWxfZGV0 ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50IGNoYW5uZWxzLA0KPiA+IC0JCQkg aW50IHNhbXBsaW5nX3JhdGUsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpOw0KPiA+ICt2b2lk IGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50MTZfdCAq YnVmZmVyLCBpbnQgZnJhbWVzKTsNCj4gPiArYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVj dCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50IHNhbXBsaW5nX3JhdGUsDQo+ID4gKwkJCSBkb3Vi bGUgKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7DQo+ID4gK3NpemVfdCBhdWRpb19leHRyYWN0X2No YW5uZWxfczMyX2xlKGRvdWJsZSAqZHN0LCBzaXplX3QgZHN0X2NhcCwNCj4gPiArCQkJCSAgICBp bnQzMl90ICpzcmMsIHNpemVfdCBzcmNfbGVuLA0KPiA+ICsJCQkJICAgIGludCBuX2NoYW5uZWxz LCBpbnQgY2hhbm5lbCk7DQo+ID4gK2ludCBhdWRpb19jcmVhdGVfd2F2X2ZpbGVfczMyX2xlKGNv bnN0IGNoYXIgKnF1YWxpZmllciwgdWludDMyX3Qgc2FtcGxlX3JhdGUsDQo+ID4gKwkJCQkgdWlu dDE2X3QgY2hhbm5lbHMsIGNoYXIgKipwYXRoKTsNCj4gPiAgDQo+ID4gICNlbmRpZg0KPiA+IGRp ZmYgLS1naXQgYS9saWIvaWd0X2F1eC5jIGIvbGliL2lndF9hdXguYw0KPiA+IGluZGV4IDA1NTI4 MzUyLi45NWNlYjg0NSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvaWd0X2F1eC5jDQo+ID4gKysrIGIv bGliL2lndF9hdXguYw0KPiA+IEBAIC0xMjU5LDYgKzEyNTksMzcgQEAgdm9pZCBpZ3Rfc2V0X21v ZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCkNCj4gPiAgCWlndF9zZXRf bW9kdWxlX3BhcmFtKG5hbWUsIHN0cik7DQo+ID4gIH0NCj4gPiAgDQo+ID4gKy8qKg0KPiA+ICsg KiBpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nOg0KPiA+ICsgKiBAY29tbTogTmFtZSBvZiBwcm9jZXNz IGluIHRoZSBmb3JtIGZvdW5kIGluIC9wcm9jL3BpZC9jb21tIChsaW1pdGVkIHRvIDE1DQo+ID4g KyAqIGNoYXJzKQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm5zOiB0cnVlIGluIGNhc2UgdGhlIHBy b2Nlc3MgaGFzIGJlZW4gZm91bmQsIGZhbHNlIG90aGVyd2lzZS4NCj4gPiArICoNCj4gPiArICog VGhpcyBmdW5jdGlvbiBjaGVja3MgaW4gdGhlIHByb2Nlc3MgdGFibGUgZm9yIGFuIGVudHJ5IHdp dGggdGhlIG5hbWUgQGNvbW0uDQo+ID4gKyAqLw0KPiA+ICtpbnQgaWd0X2lzX3Byb2Nlc3NfcnVu bmluZyhjb25zdCBjaGFyICpjb21tKQ0KPiA+ICt7DQo+ID4gKwlQUk9DVEFCICpwcm9jOw0KPiA+ ICsJcHJvY190ICpwcm9jX2luZm87DQo+ID4gKwlib29sIGZvdW5kID0gZmFsc2U7DQo+ID4gKw0K PiA+ICsJcHJvYyA9IG9wZW5wcm9jKFBST0NfRklMTENPTSB8IFBST0NfRklMTFNUQVQgfCBQUk9D X0ZJTExBUkcpOw0KPiANCj4gU2VlbXMgbGlrZSB5b3UgY2FuIGRyb3AgRklMTEFSRzoNCj4gDQo+ IEZyb20gbWFuOg0KPiAgICAgICAgUFJPQ19GSUxMQVJHDQo+ICAgICAgICAgICAgIGVxdWl2YWxl bnQgdG8gUFJPQ19GSUxMQ09NDQoNCkdvb2QgY2F0Y2gNCg0KPiA+ICsJaWd0X2Fzc2VydChwcm9j ICE9IE5VTEwpOw0KPiA+ICsNCj4gPiArCXdoaWxlICgocHJvY19pbmZvID0gcmVhZHByb2MocHJv YywgTlVMTCkpKSB7DQo+ID4gKwkJaWYgKCFzdHJuY2FzZWNtcChwcm9jX2luZm8tPmNtZCwgY29t bSwgc2l6ZW9mKHByb2NfaW5mby0+Y21kKSkpIHsNCj4gPiArCQkJZnJlZXByb2MocHJvY19pbmZv KTsNCj4gPiArCQkJZm91bmQgPSB0cnVlOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4g KwkJZnJlZXByb2MocHJvY19pbmZvKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljbG9zZXByb2Mo cHJvYyk7DQo+ID4gKwlyZXR1cm4gZm91bmQ7DQo+ID4gK30NCj4gPiArDQo+ID4gIC8qKg0KPiA+ ICAgKiBpZ3RfdGVybWluYXRlX3Byb2Nlc3M6DQo+ID4gICAqIEBzaWc6IFNpZ25hbCB0byBzZW5k DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXV4LmggYi9saWIvaWd0X2F1eC5oDQo+ID4gaW5k ZXggNTUzOTI3OTAuLmRiZDg4YjY3IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9pZ3RfYXV4LmgNCj4g PiArKysgYi9saWIvaWd0X2F1eC5oDQo+ID4gQEAgLTI3OSw2ICsyNzksNyBAQCBib29sIGlndF9h bGxvd191bmxpbWl0ZWRfZmlsZXModm9pZCk7DQo+ID4gIHZvaWQgaWd0X3NldF9tb2R1bGVfcGFy YW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKTsNCj4gPiAgdm9pZCBpZ3Rfc2V0 X21vZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCk7DQo+ID4gIA0KPiA+ ICtpbnQgaWd0X2lzX3Byb2Nlc3NfcnVubmluZyhjb25zdCBjaGFyICpjb21tKTsNCj4gPiAgaW50 IGlndF90ZXJtaW5hdGVfcHJvY2VzcyhpbnQgc2lnLCBjb25zdCBjaGFyICpjb21tKTsNCj4gPiAg dm9pZCBpZ3RfbHNvZihjb25zdCBjaGFyICpkcGF0aCk7DQo+ID4gIA0KPiA+IGRpZmYgLS1naXQg YS9saWIvaWd0X2NoYW1lbGl1bS5jIGIvbGliL2lndF9jaGFtZWxpdW0uYw0KPiA+IGluZGV4IDAy Y2M5YjJjLi43YzkwMzBkMSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvaWd0X2NoYW1lbGl1bS5jDQo+ ID4gKysrIGIvbGliL2lndF9jaGFtZWxpdW0uYw0KPiA+IEBAIC0yMTgsNiArMjE4LDEyIEBAIHZv aWQgY2hhbWVsaXVtX2Rlc3Ryb3lfZnJhbWVfZHVtcChzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1 bXAgKmR1bXApDQo+ID4gIAlmcmVlKGR1bXApOw0KPiA+ICB9DQo+ID4gIA0KPiA+ICt2b2lkIGNo YW1lbGl1bV9kZXN0cm95X2F1ZGlvX2ZpbGUoc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICph dWRpb19maWxlKQ0KPiA+ICt7DQo+ID4gKwlmcmVlKGF1ZGlvX2ZpbGUtPnBhdGgpOw0KPiA+ICsJ ZnJlZShhdWRpb19maWxlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3RydWN0IGZzbV9tb25pdG9y X2FyZ3Mgew0KPiA+ICAJc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtOw0KPiA+ICAJc3RydWN0 IGNoYW1lbGl1bV9wb3J0ICpwb3J0Ow0KPiA+IEBAIC05MjQsNiArOTMwLDEwMSBAQCBpbnQgY2hh bWVsaXVtX2dldF9jYXB0dXJlZF9mcmFtZV9jb3VudChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxp dW0pDQo+ID4gIAlyZXR1cm4gcmV0Ow0KPiA+ICB9DQo+ID4gIA0KPiA+ICsvKioNCj4gPiArICog Y2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmluZ19hdWRpbzoNCj4gPiArICogQGNoYW1lbGl1bTogdGhl IENoYW1lbGl1bSBpbnN0YW5jZQ0KPiA+ICsgKiBAcG9ydDogdGhlIHBvcnQgdG8gY2FwdHVyZSBh dWRpbyBmcm9tIChpdCBtdXN0IHN1cHBvcnQgYXVkaW8pDQo+ID4gKyAqIEBzYXZlX3RvX2ZpbGU6 IHdoZXRoZXIgdGhlIGNhcHR1cmVkIGF1ZGlvIGRhdGEgc2hvdWxkIGJlIHNhdmVkIHRvIGEgZmls ZSBvbg0KPiA+ICsgKiB0aGUgQ2hhbWVsaXVtIGRldmljZQ0KPiA+ICsgKg0KPiA+ICsgKiBTdGFy dHMgY2FwdHVyaW5nIGF1ZGlvIGZyb20gYSBDaGFtZWxpdW0gcG9ydC4gVG8gc3RvcCB0aGUgY2Fw dHVyZSwgdXNlDQo+ID4gKyAqICNjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVkaW8uIFRvIHJl dHJpZXZlIHRoZSBhdWRpbyBkYXRhLCBlaXRoZXIgdXNlIHRoZQ0KPiA+ICsgKiBzdHJlYW0gc2Vy dmVyIG9yIGVuYWJsZSBAc2F2ZV90b19maWxlICh0aGUgbGF0dGVyIGlzIG1haW5seSB1c2VmdWwg Zm9yDQo+ID4gKyAqIGRlYnVnZ2luZyBwdXJwb3NlcykuDQo+ID4gKyAqDQo+ID4gKyAqIEl0IGlz bid0IHBvc3NpYmxlIHRvIGNhcHR1cmUgYXVkaW8gZnJvbSBtdWx0aXBsZSBwb3J0cyBhdCB0aGUg c2FtZSB0aW1lLg0KPiA+ICsgKi8NCj4gPiArdm9pZCBjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5n X2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwNCj4gPiArCQkJCSAgICBzdHJ1Y3Qg Y2hhbWVsaXVtX3BvcnQgKnBvcnQsDQo+ID4gKwkJCQkgICAgYm9vbCBzYXZlX3RvX2ZpbGUpDQo+ ID4gK3sNCj4gPiArCXhtbHJwY192YWx1ZSAqcmVzOw0KPiA+ICsNCj4gPiArCXJlcyA9IGNoYW1l bGl1bV9ycGMoY2hhbWVsaXVtLCBwb3J0LCAiU3RhcnRDYXB0dXJpbmdBdWRpbyIsICIoaWIpIiwN Cj4gPiArCQkJICAgIHBvcnQtPmlkLCBzYXZlX3RvX2ZpbGUpOw0KPiA+ICsJeG1scnBjX0RFQ1JF RihyZXMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhdWRpb19mb3JtYXRfZnJv bV94bWwoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLA0KPiA+ICsJCQkJICB4bWxycGNfdmFs dWUgKnJlcywgaW50ICpyYXRlLCBpbnQgKmNoYW5uZWxzKQ0KPiA+ICt7DQo+ID4gKwl4bWxycGNf dmFsdWUgKnJlc190eXBlLCAqcmVzX3JhdGUsICpyZXNfc2FtcGxlX2Zvcm1hdCwgKnJlc19jaGFu bmVsOw0KPiA+ICsJY2hhciAqdHlwZSwgKnNhbXBsZV9mb3JtYXQ7DQo+ID4gKw0KPiA+ICsJeG1s cnBjX3N0cnVjdF9maW5kX3ZhbHVlKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAiZmlsZV90eXBlIiwg JnJlc190eXBlKTsNCj4gPiArCXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1ZSgmY2hhbWVsaXVtLT5l bnYsIHJlcywgInJhdGUiLCAmcmVzX3JhdGUpOw0KPiA+ICsJeG1scnBjX3N0cnVjdF9maW5kX3Zh bHVlKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAic2FtcGxlX2Zvcm1hdCIsICZyZXNfc2FtcGxlX2Zv cm1hdCk7DQo+ID4gKwl4bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1bS0+ZW52LCBy ZXMsICJjaGFubmVsIiwgJnJlc19jaGFubmVsKTsNCj4gPiArDQo+ID4gKwl4bWxycGNfcmVhZF9z dHJpbmcoJmNoYW1lbGl1bS0+ZW52LCByZXNfdHlwZSwgKGNvbnN0IGNoYXIgKiopICZ0eXBlKTsN Cj4gPiArCWlndF9hc3NlcnQoc3RyY21wKHR5cGUsICJyYXciKSA9PSAwKTsNCj4gPiArCWZyZWUo dHlwZSk7DQo+ID4gKw0KPiA+ICsJeG1scnBjX3JlYWRfc3RyaW5nKCZjaGFtZWxpdW0tPmVudiwg cmVzX3NhbXBsZV9mb3JtYXQsIChjb25zdCBjaGFyICoqKSAmc2FtcGxlX2Zvcm1hdCk7DQo+ID4g KwlpZ3RfYXNzZXJ0KHN0cmNtcChzYW1wbGVfZm9ybWF0LCAiUzMyX0xFIikgPT0gMCk7DQo+ID4g KwlmcmVlKHNhbXBsZV9mb3JtYXQpOw0KPiA+ICsNCj4gPiArCXhtbHJwY19yZWFkX2ludCgmY2hh bWVsaXVtLT5lbnYsIHJlc19yYXRlLCByYXRlKTsNCj4gPiArCXhtbHJwY19yZWFkX2ludCgmY2hh bWVsaXVtLT5lbnYsIHJlc19jaGFubmVsLCBjaGFubmVscyk7DQo+ID4gKw0KPiA+ICsJeG1scnBj X0RFQ1JFRihyZXNfY2hhbm5lbCk7DQo+ID4gKwl4bWxycGNfREVDUkVGKHJlc19zYW1wbGVfZm9y bWF0KTsNCj4gPiArCXhtbHJwY19ERUNSRUYocmVzX3JhdGUpOw0KPiA+ICsJeG1scnBjX0RFQ1JF RihyZXNfdHlwZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBjaGFtZWxpdW1f c3RvcF9jYXB0dXJpbmdfYXVkaW86DQo+ID4gKyAqIEBjaGFtZWxpdW06IHRoZSBDaGFtZWxpdW0g aW5zdGFuY2UNCj4gPiArICogQHBvcnQ6IHRoZSBwb3J0IGZyb20gd2hpY2ggYXVkaW8gaXMgYmVp bmcgY2FwdHVyZWQNCj4gPiArICoNCj4gPiArICogU3RvcHMgY2FwdHVyaW5nIGF1ZGlvIGZyb20g YSBDaGFtZWxpdW0gcG9ydC4gSWYNCj4gPiArICogI2NoYW1lbGl1bV9zdGFydF9jYXB0dXJpbmdf YXVkaW8gaGFzIGJlZW4gY2FsbGVkIHdpdGggQHNhdmVfdG9fZmlsZSBlbmFibGVkLA0KPiA+ICsg KiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgI2NoYW1lbGl1bV9hdWRpb19maWxlIHN0cnVj dCBjb250YWluaW5nIGRldGFpbHMNCj4gPiArICogYWJvdXQgdGhlIGF1ZGlvIGZpbGUuIE9uY2Ug dGhlIGNhbGxlciBpcyBkb25lIHdpdGggdGhlIHN0cnVjdCwgdGhleSBzaG91bGQNCj4gPiArICog cmVsZWFzZSBpdCB3aXRoICNjaGFtZWxpdW1fZGVzdHJveV9hdWRpb19maWxlLg0KPiA+ICsgKi8N Cj4gPiArc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICpjaGFtZWxpdW1fc3RvcF9jYXB0dXJp bmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLA0KPiA+ICsJCQkJCQkJICAgIHN0 cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkNCj4gPiArew0KPiA+ICsJeG1scnBjX3ZhbHVlICpy ZXMsICpyZXNfcGF0aCwgKnJlc19wcm9wczsNCj4gPiArCXN0cnVjdCBjaGFtZWxpdW1fYXVkaW9f ZmlsZSAqZmlsZSA9IE5VTEw7DQo+ID4gKwljaGFyICpwYXRoOw0KPiA+ICsNCj4gPiArCXJlcyA9 IGNoYW1lbGl1bV9ycGMoY2hhbWVsaXVtLCBOVUxMLCAiU3RvcENhcHR1cmluZ0F1ZGlvIiwgIihp KSIsDQo+ID4gKwkJCSAgICBwb3J0LT5pZCk7DQo+ID4gKwl4bWxycGNfYXJyYXlfcmVhZF9pdGVt KCZjaGFtZWxpdW0tPmVudiwgcmVzLCAwLCAmcmVzX3BhdGgpOw0KPiA+ICsJeG1scnBjX2FycmF5 X3JlYWRfaXRlbSgmY2hhbWVsaXVtLT5lbnYsIHJlcywgMSwgJnJlc19wcm9wcyk7DQo+ID4gKw0K PiA+ICsJeG1scnBjX3JlYWRfc3RyaW5nKCZjaGFtZWxpdW0tPmVudiwgcmVzX3BhdGgsIChjb25z dCBjaGFyICoqKSAmcGF0aCk7DQo+ID4gKw0KPiA+ICsJaWYgKHN0cmxlbihwYXRoKSA+IDApIHsN Cj4gPiArCQlmaWxlID0gY2FsbG9jKDEsIHNpemVvZigqZmlsZSkpOw0KPiA+ICsJCWZpbGUtPnBh dGggPSBwYXRoOw0KPiA+ICsNCj4gPiArCQlhdWRpb19mb3JtYXRfZnJvbV94bWwoY2hhbWVsaXVt LCByZXNfcHJvcHMsDQo+ID4gKwkJCQkgICAgICAmZmlsZS0+cmF0ZSwgJmZpbGUtPmNoYW5uZWxz KTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZnJlZShwYXRoKTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwl4bWxycGNfREVDUkVGKHJlc19wcm9wcyk7DQo+ID4gKwl4bWxycGNfREVDUkVGKHJlc19w YXRoKTsNCj4gPiArCXhtbHJwY19ERUNSRUYocmVzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmls ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3RhdGljIHBpeG1hbl9pbWFnZV90ICpjb252ZXJ0X2Zy YW1lX2Zvcm1hdChwaXhtYW5faW1hZ2VfdCAqc3JjLA0KPiA+ICAJCQkJCSAgICBpbnQgZm9ybWF0 KQ0KPiA+ICB7DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtLmggYi9saWIvaWd0 X2NoYW1lbGl1bS5oDQo+ID4gaW5kZXggMjMzZWFkODUuLjA0N2Y4YzVkIDEwMDY0NA0KPiA+IC0t LSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmgNCj4gPiArKysgYi9saWIvaWd0X2NoYW1lbGl1bS5oDQo+ ID4gQEAgLTUzLDYgKzUzLDEyIEBAIGVudW0gY2hhbWVsaXVtX2NoZWNrIHsNCj4gPiAgCUNIQU1F TElVTV9DSEVDS19DUkMsDQo+ID4gIH07DQo+ID4gIA0KPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2F1 ZGlvX2ZpbGUgew0KPiA+ICsJY2hhciAqcGF0aDsNCj4gPiArCWludCByYXRlOyAvKiBIeiAqLw0K PiA+ICsJaW50IGNoYW5uZWxzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAgc3RydWN0IGNoYW1lbGl1 bSAqY2hhbWVsaXVtX2luaXQoaW50IGRybV9mZCk7DQo+ID4gIHZvaWQgY2hhbWVsaXVtX2RlaW5p dChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0pOw0KPiA+ICB2b2lkIGNoYW1lbGl1bV9yZXNl dChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0pOw0KPiA+IEBAIC0xMDAsNiArMTA2LDEwIEBA IHZvaWQgY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmUoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVt LA0KPiA+ICB2b2lkIGNoYW1lbGl1bV9zdG9wX2NhcHR1cmUoc3RydWN0IGNoYW1lbGl1bSAqY2hh bWVsaXVtLCBpbnQgZnJhbWVfY291bnQpOw0KPiA+ICB2b2lkIGNoYW1lbGl1bV9jYXB0dXJlKHN0 cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LA0K PiA+ICAJCSAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGZyYW1lX2NvdW50 KTsNCj4gPiArdm9pZCBjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1ZGlvKHN0cnVjdCBjaGFt ZWxpdW0gKmNoYW1lbGl1bSwNCj4gPiArCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBv cnQsIGJvb2wgc2F2ZV90b19maWxlKTsNCj4gPiArc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxl ICpjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVs aXVtLA0KPiA+ICsJCQkJCQkJICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCk7DQo+ID4g IGlndF9jcmNfdCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfY3JjcyhzdHJ1Y3QgY2hhbWVsaXVt ICpjaGFtZWxpdW0sDQo+ID4gIAkJCQkJaW50ICpmcmFtZV9jb3VudCk7DQo+ID4gIHN0cnVjdCBj aGFtZWxpdW1fZnJhbWVfZHVtcCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoc3RydWN0 IGNoYW1lbGl1bSAqY2hhbWVsaXVtLA0KPiA+IEBAIC0xMzEsNSArMTQxLDYgQEAgdm9pZCBjaGFt ZWxpdW1fYXNzZXJ0X2ZyYW1lX21hdGNoX29yX2R1bXAoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVs aXVtLA0KPiA+ICB2b2lkIGNoYW1lbGl1bV9jcm9wX2FuYWxvZ19mcmFtZShzdHJ1Y3QgY2hhbWVs aXVtX2ZyYW1lX2R1bXAgKmR1bXAsIGludCB3aWR0aCwNCj4gPiAgCQkJCSBpbnQgaGVpZ2h0KTsN Cj4gPiAgdm9pZCBjaGFtZWxpdW1fZGVzdHJveV9mcmFtZV9kdW1wKHN0cnVjdCBjaGFtZWxpdW1f ZnJhbWVfZHVtcCAqZHVtcCk7DQo+ID4gK3ZvaWQgY2hhbWVsaXVtX2Rlc3Ryb3lfYXVkaW9fZmls ZShzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmF1ZGlvX2ZpbGUpOw0KPiA+ICANCj4gPiAg I2VuZGlmIC8qIElHVF9DSEFNRUxJVU1fSCAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2No YW1lbGl1bV9zdHJlYW0uYyBiL2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMC4uOWUxYmExY2ENCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmMNCj4gPiBAQCAtMCww ICsxLDU5MiBAQA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jw b3JhdGlvbg0KPiA+ICsgKg0KPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPiA+ICsgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLA0KPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+ID4gKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLA0KPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gPiArICoN Cj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dA0KPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+ID4g KyAqIFNvZnR3YXJlLg0KPiA+ICsgKg0KPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiA+ICsg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwNCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+ID4gKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSDQo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQo+ID4gKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MNCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLg0KPiA+ICsgKg0KPiA+ICsgKiBBdXRo b3JzOiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+DQo+ID4gKyAqLw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgImNvbmZpZy5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGFycGEvaW5ldC5o Pg0KPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiArI2luY2x1ZGUgPG5ldGRiLmg+DQo+ID4g KyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ID4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4gPiArI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgImlndF9jaGFtZWxpdW1fc3RyZWFtLmgiDQo+ID4gKyNpbmNsdWRlICJp Z3RfY29yZS5oIg0KPiA+ICsjaW5jbHVkZSAiaWd0X3JjLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFNUUkVBTV9QT1JUIDk5OTQNCj4gPiArI2RlZmluZSBTVFJFQU1fVkVSU0lPTl9NQUpPUiAxDQo+ ID4gKyNkZWZpbmUgU1RSRUFNX1ZFUlNJT05fTUlOT1IgMA0KPiA+ICsNCj4gPiArZW51bSBzdHJl YW1fZXJyb3Igew0KPiA+ICsJU1RSRUFNX0VSUk9SX05PTkUgPSAwLA0KPiA+ICsJU1RSRUFNX0VS Uk9SX0NPTU1BTkQgPSAxLA0KPiA+ICsJU1RSRUFNX0VSUk9SX0FSR1VNRU5UID0gMiwNCj4gPiAr CVNUUkVBTV9FUlJPUl9FWElTVFMgPSAzLA0KPiA+ICsJU1RSRUFNX0VSUk9SX1ZJREVPX01FTV9P VkVSRkxPV19TVE9QID0gNCwNCj4gPiArCVNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZMT1df RFJPUCA9IDUsDQo+ID4gKwlTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX1NUT1AgPSA2 LA0KPiA+ICsJU1RSRUFNX0VSUk9SX0FVRElPX01FTV9PVkVSRkxPV19EUk9QID0gNywNCj4gPiAr CVNUUkVBTV9FUlJPUl9OT19NRU0gPSA4LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSBzdHJl YW1fbWVzc2FnZV9raW5kIHsNCj4gPiArCVNUUkVBTV9NRVNTQUdFX1JFUVVFU1QgPSAwLA0KPiA+ ICsJU1RSRUFNX01FU1NBR0VfUkVTUE9OU0UgPSAxLA0KPiA+ICsJU1RSRUFNX01FU1NBR0VfREFU QSA9IDIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgew0K PiA+ICsJU1RSRUFNX01FU1NBR0VfUkVTRVQgPSAwLA0KPiA+ICsJU1RSRUFNX01FU1NBR0VfR0VU X1ZFUlNJT04gPSAxLA0KPiA+ICsJU1RSRUFNX01FU1NBR0VfVklERU9fU1RSRUFNID0gMiwNCj4g PiArCVNUUkVBTV9NRVNTQUdFX1NIUklOS19WSURFTyA9IDMsDQo+ID4gKwlTVFJFQU1fTUVTU0FH RV9WSURFT19GUkFNRSA9IDQsDQo+ID4gKwlTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX1ZJ REVPID0gNSwNCj4gPiArCVNUUkVBTV9NRVNTQUdFX1NUT1BfRFVNUF9WSURFTyA9IDYsDQo+ID4g KwlTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX0FVRElPID0gNywNCj4gPiArCVNUUkVBTV9N RVNTQUdFX1NUT1BfRFVNUF9BVURJTyA9IDgsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg Y2hhbWVsaXVtX3N0cmVhbSB7DQo+ID4gKwljaGFyICpob3N0Ow0KPiA+ICsJdW5zaWduZWQgaW50 IHBvcnQ7DQo+ID4gKw0KPiA+ICsJaW50IGZkOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGlj IGNvbnN0IGNoYXIgKnN0cmVhbV9lcnJvcl9zdHIoZW51bSBzdHJlYW1fZXJyb3IgZXJyKQ0KPiA+ ICt7DQo+ID4gKwlzd2l0Y2ggKGVycikgew0KPiA+ICsJY2FzZSBTVFJFQU1fRVJST1JfTk9ORToN Cj4gPiArCQlyZXR1cm4gIm5vIGVycm9yIjsNCj4gPiArCWNhc2UgU1RSRUFNX0VSUk9SX0NPTU1B TkQ6DQo+ID4gKwkJcmV0dXJuICJpbnZhbGlkIGNvbW1hbmQiOw0KPiA+ICsJY2FzZSBTVFJFQU1f RVJST1JfQVJHVU1FTlQ6DQo+ID4gKwkJcmV0dXJuICJpbnZhbGlkIGFyZ3VtZW50cyI7DQo+ID4g KwljYXNlIFNUUkVBTV9FUlJPUl9FWElTVFM6DQo+ID4gKwkJcmV0dXJuICJkdW1wIGFscmVhZHkg c3RhcnRlZCI7DQo+ID4gKwljYXNlIFNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZMT1dfU1RP UDoNCj4gPiArCQlyZXR1cm4gInZpZGVvIGR1bXAgc3RvcHBlZCBhZnRlciBvdmVyZmxvdyI7DQo+ ID4gKwljYXNlIFNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZMT1dfRFJPUDoNCj4gPiArCQly ZXR1cm4gInZpZGVvIGZyYW1lIGRyb3BwZWQgYWZ0ZXIgb3ZlcmZsb3ciOw0KPiA+ICsJY2FzZSBT VFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX1NUT1A6DQo+ID4gKwkJcmV0dXJuICJhdWRp byBkdW1wIHN0b3BwcmVkIGFmdGVyIG92ZXJmbG93IjsNCj4gPiArCWNhc2UgU1RSRUFNX0VSUk9S X0FVRElPX01FTV9PVkVSRkxPV19EUk9QOg0KPiA+ICsJCXJldHVybiAiYXVkaW8gcGFnZSBkcm9w cGVkIGFmdGVyIG92ZXJmbG93IjsNCj4gPiArCWNhc2UgU1RSRUFNX0VSUk9SX05PX01FTToNCj4g PiArCQlyZXR1cm4gIm91dCBvZiBtZW1vcnkiOw0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJuICJ1bmtu b3duIGVycm9yIjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIFRoZSBDaGFtZWxp dW0gVVJMIGlzIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBXZSBuZWVkIHRv IGV4dHJhY3QNCj4gPiArICogdGhlIGhvc3QgdG8gY29ubmVjdCB0byB0aGUgc3RyZWFtIHNlcnZl ci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBjaGFyICpwYXJzZV91cmxfaG9zdChjb25zdCBjaGFy ICp1cmwpDQo+ID4gK3sNCj4gPiArCXN0YXRpYyBjb25zdCBjaGFyIHByZWZpeFtdID0gImh0dHA6 Ly8iOw0KPiA+ICsJY2hhciAqY29sb247DQo+ID4gKw0KPiA+ICsJaWYgKHN0cnN0cih1cmwsIHBy ZWZpeCkgIT0gdXJsKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsJdXJsICs9IHN0cmxlbihw cmVmaXgpOw0KPiA+ICsNCj4gPiArCWNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsNCj4gPiArCWlm ICghY29sb24pDQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHN0cm5k dXAodXJsLCBjb2xvbiAtIHVybCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGNo YW1lbGl1bV9zdHJlYW1fcmVhZF9jb25maWcoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVu dCkNCj4gPiArew0KPiA+ICsJR0Vycm9yICplcnJvciA9IE5VTEw7DQo+ID4gKwlnY2hhciAqY2hh bWVsaXVtX3VybDsNCj4gPiArDQo+ID4gKwlpZiAoIWlndF9rZXlfZmlsZSkgew0KPiA+ICsJCWln dF93YXJuKCJObyBjb25maWd1cmF0aW9uIGZpbGUgYXZhaWxhYmxlIGZvciBjaGFtZWxpdW1cbiIp Ow0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljaGFtZWxpdW1f dXJsID0gZ19rZXlfZmlsZV9nZXRfc3RyaW5nKGlndF9rZXlfZmlsZSwgIkNoYW1lbGl1bSIsICJV UkwiLA0KPiA+ICsJCQkJCSAgICAgICZlcnJvcik7DQo+ID4gKwlpZiAoIWNoYW1lbGl1bV91cmwp IHsNCj4gPiArCQlpZ3Rfd2FybigiQ291bGRuJ3QgcmVhZCBDaGFtZWxpdW0gVVJMIGZyb20gY29u ZmlnIGZpbGU6ICVzXG4iLA0KPiA+ICsJCQkgZXJyb3ItPm1lc3NhZ2UpOw0KPiA+ICsJCXJldHVy biBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljbGllbnQtPmhvc3QgPSBwYXJzZV91cmxf aG9zdChjaGFtZWxpdW1fdXJsKTsNCj4gPiArCWlmICghY2xpZW50LT5ob3N0KSB7DQo+ID4gKwkJ aWd0X3dhcm4oIkludmFsaWQgQ2hhbWVsaXVtIFVSTCBpbiBjb25maWcgZmlsZTogJXNcbiIsDQo+ ID4gKwkJCSBjaGFtZWxpdW1fdXJsKTsNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+ ID4gKwljbGllbnQtPnBvcnQgPSBTVFJFQU1fUE9SVDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1 ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9jb25u ZWN0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpDQo+ID4gK3sNCj4gPiArCWludCBy ZXQ7DQo+ID4gKwljaGFyIHBvcnRfc3RyWzE2XTsNCj4gPiArCXN0cnVjdCBhZGRyaW5mbyBoaW50 cyA9IHt9Ow0KPiA+ICsJc3RydWN0IGFkZHJpbmZvICpyZXN1bHRzLCAqYWk7DQo+ID4gKwlzdHJ1 Y3QgdGltZXZhbCB0diA9IHt9Ow0KPiA+ICsNCj4gPiArCWlndF9kZWJ1ZygiQ29ubmVjdGluZyB0 byBDaGFtZWxpdW0gc3RyZWFtIHNlcnZlcjogdGNwOi8vJXM6JXVcbiIsDQo+ID4gKwkJICBjbGll bnQtPmhvc3QsIGNsaWVudC0+cG9ydCk7DQo+ID4gKw0KPiA+ICsJc25wcmludGYocG9ydF9zdHIs IHNpemVvZihwb3J0X3N0ciksICIldSIsIGNsaWVudC0+cG9ydCk7DQo+ID4gKw0KPiA+ICsJaGlu dHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOw0KPiA+ICsJaGludHMuYWlfc29ja3R5cGUgPSBTT0NL X1NUUkVBTTsNCj4gPiArCXJldCA9IGdldGFkZHJpbmZvKGNsaWVudC0+aG9zdCwgcG9ydF9zdHIs ICZoaW50cywgJnJlc3VsdHMpOw0KPiA+ICsJaWYgKHJldCAhPSAwKSB7DQo+ID4gKwkJaWd0X3dh cm4oImdldGFkZHJpbmZvIGZhaWxlZDogJXNcbiIsIGdhaV9zdHJlcnJvcihyZXQpKTsNCj4gPiAr CQlyZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2xpZW50LT5mZCA9IC0xOw0K PiA+ICsJZm9yIChhaSA9IHJlc3VsdHM7IGFpICE9IE5VTEw7IGFpID0gYWktPmFpX25leHQpIHsN Cj4gPiArCQljbGllbnQtPmZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlw ZSwNCj4gPiArCQkJCSAgICBhaS0+YWlfcHJvdG9jb2wpOw0KPiA+ICsJCWlmIChjbGllbnQtPmZk ID09IC0xKQ0KPiA+ICsJCQljb250aW51ZTsNCj4gPiArDQo+ID4gKwkJaWYgKGNvbm5lY3QoY2xp ZW50LT5mZCwgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA9PSAtMSkgew0KPiA+ICsJCQlj bG9zZShjbGllbnQtPmZkKTsNCj4gPiArCQkJY2xpZW50LT5mZCA9IC0xOw0KPiA+ICsJCQljb250 aW51ZTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWZyZWVhZGRyaW5mbyhyZXN1bHRzKTsNCj4gPiArDQo+ID4gKwlpZiAoY2xpZW50LT5mZCA8 IDApIHsNCj4gPiArCQlpZ3Rfd2FybigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbWVsaXVtIHN0 cmVhbSBzZXJ2ZXJcbiIpOw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBTZXQgYSByZWFkIGFuZCB3cml0ZSB0aW1lb3V0IG9mIDUgc2Vjb25kcy4gKi8NCj4g PiArCXR2LnR2X3NlYyA9IDU7DQo+ID4gKwlzZXRzb2Nrb3B0KGNsaWVudC0+ZmQsIFNPTF9TT0NL RVQsIFNPX1JDVlRJTUVPLCAmdHYsIHNpemVvZih0dikpOw0KPiA+ICsJc2V0c29ja29wdChjbGll bnQtPmZkLCBTT0xfU09DS0VULCBTT19TTkRUSU1FTywgJnR2LCBzaXplb2YodHYpKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgcmVh ZF93aG9sZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pDQo+ID4gK3sNCj4gPiAr CXNzaXplX3QgcmV0Ow0KPiA+ICsJc2l6ZV90IG4gPSAwOw0KPiA+ICsJY2hhciAqcHRyOw0KPiA+ ICsNCj4gPiArCXdoaWxlIChuIDwgYnVmX2xlbikgew0KPiA+ICsJCXB0ciA9IChjaGFyICopIGJ1 ZiArIG47DQo+ID4gKwkJcmV0ID0gcmVhZChmZCwgcHRyLCBidWZfbGVuIC0gbik7DQo+ID4gKwkJ aWYgKHJldCA8IDApIHsNCj4gPiArCQkJaWd0X3dhcm4oInJlYWQgZmFpbGVkOiAlc1xuIiwgc3Ry ZXJyb3IoZXJybm8pKTsNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJCX0gZWxzZSBpZiAo cmV0ID09IDApIHsNCj4gPiArCQkJaWd0X3dhcm4oInNob3J0IHJlYWRcbiIpOw0KPiA+ICsJCQly ZXR1cm4gZmFsc2U7DQo+ID4gKwkJfQ0KPiA+ICsJCW4gKz0gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB3cml0 ZV93aG9sZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pDQo+ID4gK3sNCj4gPiAr CXNzaXplX3QgcmV0Ow0KPiA+ICsJc2l6ZV90IG4gPSAwOw0KPiA+ICsJY2hhciAqcHRyOw0KPiA+ ICsNCj4gPiArCXdoaWxlIChuIDwgYnVmX2xlbikgew0KPiA+ICsJCXB0ciA9IChjaGFyICopIGJ1 ZiArIG47DQo+ID4gKwkJcmV0ID0gd3JpdGUoZmQsIHB0ciwgYnVmX2xlbiAtIG4pOw0KPiA+ICsJ CWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJCWlndF93YXJuKCJ3cml0ZSBmYWlsZWQ6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOw0KPiA+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwkJfSBlbHNlIGlm IChyZXQgPT0gMCkgew0KPiA+ICsJCQlpZ3Rfd2Fybigic2hvcnQgd3JpdGVcbiIpOw0KPiA+ICsJ CQlyZXR1cm4gZmFsc2U7DQo+ID4gKwkJfQ0KPiA+ICsJCW4gKz0gcmV0Ow0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBy ZWFkX2FuZF9kaXNjYXJkKGludCBmZCwgc2l6ZV90IGxlbikNCj4gPiArew0KPiA+ICsJY2hhciBi dWZbMTAyNF07DQo+ID4gKwlzaXplX3QgbjsNCj4gPiArDQo+ID4gKwl3aGlsZSAobGVuID4gMCkg ew0KPiA+ICsJCW4gPSBsZW47DQo+ID4gKwkJaWYgKG4gPiBzaXplb2YoYnVmKSkNCj4gPiArCQkJ biA9IHNpemVvZihidWYpOw0KPiA+ICsNCj4gPiArCQlpZiAoIXJlYWRfd2hvbGUoZmQsIGJ1Ziwg bikpDQo+ID4gKwkJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkJbGVuIC09IG47DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKiBS ZWFkIGEgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUgc29ja2V0Lg0KPiA+ICsgKg0KPiA+ICsgKiBU aGUgaGVhZGVyIGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6DQo+ID4gKyAqIC0gdTE2OiBtZXNzYWdl IHR5cGUNCj4gPiArICogLSB1MTY6IGVycm9yIGNvZGUNCj4gPiArICogLSB1MzI6IG1lc3NhZ2Ug bGVuZ3RoDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX3JlYWRf aGVhZGVyKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsDQo+ID4gKwkJCQkJIGVudW0g c3RyZWFtX21lc3NhZ2Vfa2luZCAqa2luZCwNCj4gPiArCQkJCQkgZW51bSBzdHJlYW1fbWVzc2Fn ZV90eXBlICp0eXBlLA0KPiA+ICsJCQkJCSBlbnVtIHN0cmVhbV9lcnJvciAqZXJyLA0KPiA+ICsJ CQkJCSBzaXplX3QgKmxlbikNCj4gPiArew0KPiA+ICsJdWludDE2X3QgX3R5cGU7DQo+ID4gKwlj aGFyIGJ1Zls4XTsNCj4gPiArDQo+ID4gKwlpZiAoIXJlYWRfd2hvbGUoY2xpZW50LT5mZCwgYnVm LCBzaXplb2YoYnVmKSkpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCV90eXBl ID0gbnRvaHMoKih1aW50MTZfdCAqKSAmYnVmWzBdKTsNCj4gPiArCSp0eXBlID0gX3R5cGUgJiAw eEZGOw0KPiA+ICsJKmtpbmQgPSBfdHlwZSA+PiA4Ow0KPiA+ICsJKmVyciA9IG50b2hzKCoodWlu dDE2X3QgKikgJmJ1ZlsyXSk7DQo+ID4gKwkqbGVuID0gbnRvaGwoKih1aW50MzJfdCAqKSAmYnVm WzRdKTsNCj4gPiArDQo+ID4gKwkvL2lndF9kZWJ1ZygicmVjZWl2ZWQgbWVzc2FnZToga2luZD0l ZCB0eXBlPSVkIGVycj0lZCBsZW49JXp1XG4iLA0KPiA+ICsJLy8JICAqa2luZCwgKnR5cGUsICpl cnIsICpsZW4pOw0KPiANCj4gWW91IHByb2JhYmx5IHdhbnQgdG8ga2VlcCB0aGlzIGRlYnVnIG1l c3NhZ2UuIElmIG5vdCwgdGhlbiBjb21tZW50IGl0DQo+IHByb3Blcmx5IHdpdGggLyogKi8gb3Ig ZGVsZXRlIGl0Lg0KDQpBaCwgc2VlbXMgbGlrZSBJIGZvcmdvdCB0byByZW1vdmUgaXQuIEkgZG9u J3QgdGhpbmsgd2Ugd2FudCB0byBrZWVwIGl0LA0KYmVjYXVzZSBpdCdzIGV4dHJlbWVseSBjaGF0 dHkgd2hlbiByZWNlaXZpbmcgYXVkaW8gcGFnZXMuDQoNCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1 ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV93cml0 ZV9oZWFkZXIoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwNCj4gPiArCQkJCQkgIGVu dW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLA0KPiA+ICsJCQkJCSAgZW51bSBzdHJlYW1fZXJy b3IgZXJyLA0KPiA+ICsJCQkJCSAgc2l6ZV90IGxlbikNCj4gPiArew0KPiA+ICsJY2hhciBidWZb OF07DQo+ID4gKwl1aW50MTZfdCBfdHlwZTsNCj4gPiArDQo+ID4gKwlfdHlwZSA9IHR5cGUgfCAo U1RSRUFNX01FU1NBR0VfUkVRVUVTVCA8PCA4KTsNCj4gPiArDQo+ID4gKwkqKHVpbnQxNl90ICop ICZidWZbMF0gPSBodG9ucyhfdHlwZSk7DQo+ID4gKwkqKHVpbnQxNl90ICopICZidWZbMl0gPSBo dG9ucyhlcnIpOw0KPiA+ICsJKih1aW50MzJfdCAqKSAmYnVmWzRdID0gaHRvbmwobGVuKTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gd3JpdGVfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBzaXplb2YoYnVm KSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVh ZF9yZXNwb25zZShzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LA0KPiA+ICsJCQkJCSAg IGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLA0KPiA+ICsJCQkJCSAgIHZvaWQgKmJ1Ziwg c2l6ZV90IGJ1Zl9sZW4pDQo+ID4gK3sNCj4gPiArCWVudW0gc3RyZWFtX21lc3NhZ2Vfa2luZCBy ZWFkX2tpbmQ7DQo+ID4gKwllbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgcmVhZF90eXBlOw0KPiA+ ICsJZW51bSBzdHJlYW1fZXJyb3IgcmVhZF9lcnI7DQo+ID4gKwlzaXplX3QgcmVhZF9sZW47DQo+ ID4gKw0KPiA+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVudCwgJnJl YWRfa2luZCwgJnJlYWRfdHlwZSwNCj4gPiArCQkJCQkgICZyZWFkX2VyciwgJnJlYWRfbGVuKSkN Cj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJaWYgKHJlYWRfa2luZCAhPSBTVFJF QU1fTUVTU0FHRV9SRVNQT05TRSkgew0KPiA+ICsJCWlndF93YXJuKCJFeHBlY3RlZCBhIHJlc3Bv bnNlLCBnb3Qga2luZCAlZFxuIiwgcmVhZF9raW5kKTsNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ ID4gKwl9DQo+ID4gKwlpZiAocmVhZF90eXBlICE9IHR5cGUpIHsNCj4gPiArCQlpZ3Rfd2Fybigi RXhwZWN0ZWQgbWVzc2FnZSB0eXBlICVkLCBnb3QgJWRcbiIsDQo+ID4gKwkJCSB0eXBlLCByZWFk X3R5cGUpOw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArCX0NCj4gPiArCWlmIChyZWFkX2Vy ciAhPSBTVFJFQU1fRVJST1JfTk9ORSkgew0KPiA+ICsJCWlndF93YXJuKCJSZWNlaXZlZCBlcnJv cjogJXMgKCVkKVxuIiwNCj4gPiArCQkJIHN0cmVhbV9lcnJvcl9zdHIocmVhZF9lcnIpLCByZWFk X2Vycik7DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGJ1Zl9sZW4g IT0gcmVhZF9sZW4pIHsNCj4gPiArCQlpZ3Rfd2FybigiUmVjZWl2ZWQgaW52YWxpZCBtZXNzYWdl IGJvZHkgc2l6ZSAiDQo+ID4gKwkJCSAiKGdvdCAlenUgYnl0ZXMsIHdhbnQgJXp1IGJ5dGVzKVxu IiwNCj4gPiArCQkJIHJlYWRfbGVuLCBidWZfbGVuKTsNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJlYWRfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBi dWZfbGVuKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVh bV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsDQo+ID4gKwkJ CQkJICAgZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGUsDQo+ID4gKwkJCQkJICAgdm9pZCAq YnVmLCBzaXplX3QgYnVmX2xlbikNCj4gPiArew0KPiA+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFt X3dyaXRlX2hlYWRlcihjbGllbnQsIHR5cGUsIFNUUkVBTV9FUlJPUl9OT05FLA0KPiA+ICsJCQkJ CSAgIGJ1Zl9sZW4pKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlpZiAoYnVm X2xlbiA9PSAwKQ0KPiA+ICsJCXJldHVybiB0cnVlOw0KPiA+ICsNCj4gPiArCXJldHVybiB3cml0 ZV93aG9sZShjbGllbnQtPmZkLCBidWYsIGJ1Zl9sZW4pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0g KmNsaWVudCwNCj4gPiArCQkJCSAgZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGUsDQo+ID4g KwkJCQkgIHZvaWQgKnJlcV9idWYsIHNpemVfdCByZXFfbGVuLA0KPiA+ICsJCQkJICB2b2lkICpy ZXNwX2J1Ziwgc2l6ZV90IHJlc3BfbGVuKQ0KPiA+ICt7DQo+ID4gKwlpZiAoIWNoYW1lbGl1bV9z dHJlYW1fd3JpdGVfcmVxdWVzdChjbGllbnQsIHR5cGUsIHJlcV9idWYsIHJlcV9sZW4pKQ0KPiA+ ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY2hhbWVsaXVtX3N0cmVhbV9y ZWFkX3Jlc3BvbnNlKGNsaWVudCwgdHlwZSwgcmVzcF9idWYsIHJlc3BfbGVuKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9jaGVja192ZXJzaW9uKHN0 cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpDQo+ID4gK3sNCj4gPiArCWNoYXIgcmVzcFsy XTsNCj4gPiArCXVpbnQ4X3QgbWFqb3IsIG1pbm9yOw0KPiA+ICsNCj4gPiArCWlmICghY2hhbWVs aXVtX3N0cmVhbV9jYWxsKGNsaWVudCwgU1RSRUFNX01FU1NBR0VfR0VUX1ZFUlNJT04sDQo+ID4g KwkJCQkgICBOVUxMLCAwLCByZXNwLCBzaXplb2YocmVzcCkpKQ0KPiA+ICsJCXJldHVybiBmYWxz ZTsNCj4gPiArDQo+ID4gKwltYWpvciA9IHJlc3BbMF07DQo+ID4gKwltaW5vciA9IHJlc3BbMV07 DQo+ID4gKwlpZiAobWFqb3IgIT0gU1RSRUFNX1ZFUlNJT05fTUFKT1IgfHwgbWlub3IgPCBTVFJF QU1fVkVSU0lPTl9NSU5PUikgew0KPiA+ICsJCWlndF93YXJuKCJWZXJzaW9uIG1pc21hdGNoICh3 YW50ICVkLiVkLCBnb3QgJWQuJWQpXG4iLA0KPiA+ICsJCQkgU1RSRUFNX1ZFUlNJT05fTUFKT1Is IFNUUkVBTV9WRVJTSU9OX01JTk9SLA0KPiA+ICsJCQkgbWFqb3IsIG1pbm9yKTsNCj4gPiArCQly ZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBjaGFtZWxpdW1fc3RyZWFtX2R1bXBfcmVhbHRpbWVf YXVkaW86DQo+ID4gKyAqDQo+ID4gKyAqIFN0YXJ0cyBhdWRpbyBjYXB0dXJlLiBUaGUgY2FsbGVy IGNhbiB0aGVuIGNhbGwNCj4gPiArICogI2NoYW1lbGl1bV9zdHJlYW1fcmVjZWl2ZV9yZWFsdGlt ZV9hdWRpbyB0byByZWNlaXZlIGF1ZGlvIHBhZ2VzLg0KPiA+ICsgKi8NCj4gPiArYm9vbCBjaGFt ZWxpdW1fc3RyZWFtX2R1bXBfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0g KmNsaWVudCwNCj4gPiArCQkJCQkgIGVudW0gY2hhbWVsaXVtX3N0cmVhbV9yZWFsdGltZV9tb2Rl IG1vZGUpDQo+ID4gK3sNCj4gPiArCWNoYXIgcmVxWzFdOw0KPiA+ICsNCj4gPiArCWlndF9kZWJ1 ZygiU3RhcnRpbmcgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmVcbiIpOw0KPiA+ICsNCj4gPiArCXJl cVswXSA9IG1vZGU7DQo+ID4gKwlyZXR1cm4gY2hhbWVsaXVtX3N0cmVhbV9jYWxsKGNsaWVudCwg U1RSRUFNX01FU1NBR0VfRFVNUF9SRUFMVElNRV9BVURJTywNCj4gPiArCQkJCSAgICAgcmVxLCBz aXplb2YocmVxKSwgTlVMTCwgMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBj aGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW86DQo+ID4gKyAqIEBwYWdlX2Nv dW50OiBpZiBub24tTlVMTCwgd2lsbCBiZSBzZXQgdG8gdGhlIGR1bXBlZCBwYWdlIG51bWJlcg0K PiA+ICsgKiBAYnVmOiBtdXN0IGVpdGhlciBwb2ludCB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRl ZCBtZW1vcnkgcmVnaW9uIG9yIE5VTEwNCj4gPiArICogQGJ1Zl9sZW46IG51bWJlciBvZiBlbGVt ZW50cyBvZiAqQGJ1ZiwgZm9yIHplcm8gaWYgQGJ1ZiBpcyBOVUxMDQo+ID4gKyAqDQo+ID4gKyAq IFJlY2VpdmVzIG9uZSBhdWRpbyBwYWdlIGZyb20gdGhlIHN0cmVhbWluZyBzZXJ2ZXIuDQo+ID4g KyAqDQo+ID4gKyAqIEluICJiZXN0IGVmZm9ydCIgbW9kZSwgc29tZSBwYWdlcyBjYW4gYmUgZHJv cHBlZC4gVGhpcyBjYW4gYmUgZGV0ZWN0ZWQgdmlhDQo+ID4gKyAqIHRoZSBwYWdlIGNvdW50Lg0K PiA+ICsgKg0KPiA+ICsgKiBidWZfbGVuIHdpbGwgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSBw YWdlLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcg0KPiA+ICsgKiBjYWxsaW5nIGZyZWUo Mykgb24gKmJ1Zi4NCj4gPiArICovDQo+ID4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZl X3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsDQo+ID4gKwkJ CQkJICAgICBzaXplX3QgKnBhZ2VfY291bnQsDQo+ID4gKwkJCQkJICAgICBpbnQzMl90ICoqYnVm LCBzaXplX3QgKmJ1Zl9sZW4pDQo+ID4gK3sNCj4gPiArCWVudW0gc3RyZWFtX21lc3NhZ2Vfa2lu ZCBraW5kOw0KPiA+ICsJZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGU7DQo+ID4gKwllbnVt IHN0cmVhbV9lcnJvciBlcnI7DQo+ID4gKwlzaXplX3QgYm9keV9sZW47DQo+ID4gKwljaGFyIHBh Z2VfY291bnRfYnVmWzRdOw0KPiA+ICsJaW50MzJfdCAqcHRyOw0KPiA+ICsNCj4gPiArCXdoaWxl ICh0cnVlKSB7DQo+ID4gKwkJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVu dCwgJmtpbmQsICZ0eXBlLA0KPiA+ICsJCQkJCQkgICZlcnIsICZib2R5X2xlbikpDQo+ID4gKwkJ CXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwkJaWYgKGtpbmQgIT0gU1RSRUFNX01FU1NBR0Vf REFUQSkgew0KPiA+ICsJCQlpZ3Rfd2FybigiRXhwZWN0ZWQgYSBkYXRhIG1lc3NhZ2UsIGdvdCBr aW5kICVkXG4iLCBraW5kKTsNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsJCX0NCj4gPiAr CQlpZiAodHlwZSAhPSBTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX0FVRElPKSB7DQo+ID4g KwkJCWlndF93YXJuKCJFeHBlY3RlZCByZWFsLXRpbWUgYXVkaW8gZHVtcCBtZXNzYWdlLCAiDQo+ ID4gKwkJCQkgImdvdCB0eXBlICVkXG4iLCB0eXBlKTsNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0K PiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaWYgKGVyciA9PSBTVFJFQU1fRVJST1JfTk9ORSkNCj4g PiArCQkJYnJlYWs7DQo+ID4gKwkJZWxzZSBpZiAoZXJyICE9IFNUUkVBTV9FUlJPUl9BVURJT19N RU1fT1ZFUkZMT1dfRFJPUCkgew0KPiA+ICsJCQlpZ3Rfd2FybigiUmVjZWl2ZWQgZXJyb3I6ICVz ICglZClcbiIsDQo+ID4gKwkJCQkgc3RyZWFtX2Vycm9yX3N0cihlcnIpLCBlcnIpOw0KPiA+ICsJ CQlyZXR1cm4gZmFsc2U7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZ3RfZGVidWcoIkRyb3Bw ZWQgYW4gYXVkaW8gcGFnZSBiZWNhdXNlIG9mIGFuIG92ZXJmbG93XG4iKTsNCj4gPiArCQlpZ3Rf YXNzZXJ0KGJvZHlfbGVuID09IDApOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlndF9hc3NlcnQo Ym9keV9sZW4gPj0gc2l6ZW9mKHBhZ2VfY291bnRfYnVmKSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFy ZWFkX3dob2xlKGNsaWVudC0+ZmQsIHBhZ2VfY291bnRfYnVmLCBzaXplb2YocGFnZV9jb3VudF9i dWYpKSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwlpZiAocGFnZV9jb3VudCkNCj4gPiAr CQkqcGFnZV9jb3VudCA9IG50b2hsKCoodWludDMyX3QgKikgJnBhZ2VfY291bnRfYnVmWzBdKTsN Cj4gPiArCWJvZHlfbGVuIC09IHNpemVvZihwYWdlX2NvdW50X2J1Zik7DQo+ID4gKw0KPiA+ICsJ aWd0X2Fzc2VydChib2R5X2xlbiAlIHNpemVvZihpbnQzMl90KSA9PSAwKTsNCj4gPiArCWlmICgq YnVmX2xlbiAqIHNpemVvZihpbnQzMl90KSAhPSBib2R5X2xlbikgew0KPiA+ICsJCXB0ciA9IHJl YWxsb2MoKmJ1ZiwgYm9keV9sZW4pOw0KPiA+ICsJCWlmICghcHRyKSB7DQo+ID4gKwkJCWlndF93 YXJuKCJyZWFsbG9jIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQo+ID4gKwkJCXJl dHVybiBmYWxzZTsNCj4gPiArCQl9DQo+ID4gKwkJKmJ1ZiA9IHB0cjsNCj4gPiArCQkqYnVmX2xl biA9IGJvZHlfbGVuIC8gc2l6ZW9mKGludDMyX3QpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJl dHVybiByZWFkX3dob2xlKGNsaWVudC0+ZmQsICpidWYsIGJvZHlfbGVuKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIGNoYW1lbGl1bV9zdHJlYW1fc3RvcF9yZWFsdGltZV9hdWRp bzoNCj4gPiArICoNCj4gPiArICogU3RvcHMgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmUuIFRoaXMg YWxzbyBkcm9wcyBhbnkgYnVmZmVyZWQgYXVkaW8gcGFnZXMuDQo+ID4gKyAqIFRoZSBjYWxsZXIg c2hvdWxkbid0IGNhbGwgI2NoYW1lbGl1bV9zdHJlYW1fcmVjZWl2ZV9yZWFsdGltZV9hdWRpbyBh ZnRlcg0KPiA+ICsgKiBzdG9wcGluZyBhdWRpbyBjYXB0dXJlLg0KPiA+ICsgKi8NCj4gPiArYm9v bCBjaGFtZWxpdW1fc3RyZWFtX3N0b3BfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9z dHJlYW0gKmNsaWVudCkNCj4gPiArew0KPiA+ICsJZW51bSBzdHJlYW1fbWVzc2FnZV9raW5kIGtp bmQ7DQo+ID4gKwllbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZTsNCj4gPiArCWVudW0gc3Ry ZWFtX2Vycm9yIGVycjsNCj4gPiArCXNpemVfdCBsZW47DQo+ID4gKw0KPiA+ICsJaWd0X2RlYnVn KCJTdG9wcGluZyByZWFsLXRpbWUgYXVkaW8gY2FwdHVyZVxuIik7DQo+ID4gKw0KPiA+ICsJaWYg KCFjaGFtZWxpdW1fc3RyZWFtX3dyaXRlX3JlcXVlc3QoY2xpZW50LA0KPiA+ICsJCQkJCSAgICBT VFJFQU1fTUVTU0FHRV9TVE9QX0RVTVBfQVVESU8sDQo+ID4gKwkJCQkJICAgIE5VTEwsIDApKQ0K PiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwl3aGlsZSAodHJ1ZSkgew0KPiA+ICsJ CWlmICghY2hhbWVsaXVtX3N0cmVhbV9yZWFkX2hlYWRlcihjbGllbnQsICZraW5kLCAmdHlwZSwN Cj4gPiArCQkJCQkJICAmZXJyLCAmbGVuKSkNCj4gPiArCQkJcmV0dXJuIGZhbHNlOw0KPiA+ICsN Cj4gPiArCQlpZiAoa2luZCA9PSBTVFJFQU1fTUVTU0FHRV9SRVNQT05TRSkNCj4gPiArCQkJYnJl YWs7DQo+ID4gKw0KPiA+ICsJCWlmICghcmVhZF9hbmRfZGlzY2FyZChjbGllbnQtPmZkLCBsZW4p KQ0KPiA+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHR5cGUg IT0gU1RSRUFNX01FU1NBR0VfU1RPUF9EVU1QX0FVRElPKSB7DQo+ID4gKwkJaWd0X3dhcm4oIlVu ZXhwZWN0ZWQgcmVzcG9uc2UgdHlwZSAlZFxuIiwgdHlwZSk7DQo+ID4gKwkJcmV0dXJuIGZhbHNl Ow0KPiA+ICsJfQ0KPiA+ICsJaWYgKGVyciAhPSBTVFJFQU1fRVJST1JfTk9ORSkgew0KPiA+ICsJ CWlndF93YXJuKCJSZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxuIiwNCj4gPiArCQkJIHN0cmVhbV9l cnJvcl9zdHIoZXJyKSwgZXJyKTsNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+ID4g KwlpZiAobGVuICE9IDApIHsNCj4gPiArCQlpZ3Rfd2FybigiRXhwZWN0ZWQgYW4gZW1wdHkgcmVz cG9uc2UsIGdvdCAlenUgYnl0ZXNcbiIsIGxlbik7DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogY2hhbWVsaXVtX3N0cmVhbV9hdWRpb19mb3JtYXQ6DQo+ID4gKyAqDQo+ID4gKyAq IEdldHMgdGhlIGZvcm1hdCB1c2VkIGZvciBhdWRpbyBwYWdlcy4NCj4gPiArICoNCj4gPiArICog RGF0YSB3aWxsIGFsd2F5cyBiZSBjYXB0dXJlZCBpbiByYXcgcGFnZXMgb2YgUzMyX0xFIGVsZW1l bnRzLiBUaGlzIGZ1bmN0aW9uDQo+ID4gKyAqIGV4cG9zZXMgdGhlIHNhbXBsaW5nIHJhdGUgYW5k IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuDQo+ID4gKyAqLw0KPiA+ICt2b2lkIGNoYW1lbGl1bV9z dHJlYW1fYXVkaW9fZm9ybWF0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpzdHJlYW0sDQo+ID4g KwkJCQkgICBpbnQgKnJhdGUsIGludCAqY2hhbm5lbHMpDQo+ID4gK3sNCj4gPiArCS8qIFRPRE86 IHRoZSBDaGFtZWxpdW0gc3RyZWFtaW5nIHNlcnZlciBkb2Vzbid0IGV4cG9zZSB0aG9zZSB5ZXQu DQo+ID4gKwkgKiBKdXN0IGhhcmRjb2RlIHRoZSB2YWx1ZXMgZm9yIG5vdy4gKi8NCj4gPiArCSpy YXRlID0gNDgwMDA7DQo+ID4gKwkqY2hhbm5lbHMgPSA4Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogY2hhbWVsaXVtX3N0cmVhbV9pbml0Og0KPiA+ICsgKg0KPiA+ICsgKiBDb25u ZWN0cyB0byB0aGUgQ2hhbWVsaXVtIHN0cmVhbWluZyBzZXJ2ZXIuDQo+ID4gKyAqLw0KPiA+ICtz dHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2hhbWVsaXVtX3N0cmVhbV9pbml0KHZvaWQpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQ7DQo+ID4gKw0KPiA+ICsJ Y2xpZW50ID0gY2FsbG9jKDEsIHNpemVvZigqY2xpZW50KSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFj aGFtZWxpdW1fc3RyZWFtX3JlYWRfY29uZmlnKGNsaWVudCkpDQo+ID4gKwkJZ290byBlcnJvcl9j bGllbnQ7DQo+ID4gKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fY29ubmVjdChjbGllbnQpKQ0KPiA+ ICsJCWdvdG8gZXJyb3JfY2xpZW50Ow0KPiA+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX2NoZWNr X3ZlcnNpb24oY2xpZW50KSkNCj4gPiArCQlnb3RvIGVycm9yX2ZkOw0KPiA+ICsNCj4gPiArCXJl dHVybiBjbGllbnQ7DQo+ID4gKw0KPiA+ICtlcnJvcl9mZDoNCj4gPiArCWNsb3NlKGNsaWVudC0+ ZmQpOw0KPiA+ICtlcnJvcl9jbGllbnQ6DQo+ID4gKwlmcmVlKGNsaWVudCk7DQo+ID4gKwlyZXR1 cm4gTlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBjaGFtZWxpdW1fc3RyZWFtX2RlaW5p dChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQ0KPiA+ICt7DQo+ID4gKwlpZiAoY2xv c2UoY2xpZW50LT5mZCkgIT0gMCkNCj4gPiArCQlpZ3Rfd2FybigiY2xvc2UgZmFpbGVkOiAlc1xu Iiwgc3RyZXJyb3IoZXJybm8pKTsNCj4gPiArCWZyZWUoY2xpZW50KTsNCj4gPiArfQ0KPiA+IGRp ZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uaCBiL2xpYi9pZ3RfY2hhbWVsaXVt X3N0cmVhbS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMC4u ZGU0ZTk5MzENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvbGliL2lndF9jaGFtZWxpdW1f c3RyZWFtLmgNCj4gPiBAQCAtMCwwICsxLDUyIEBADQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdo dCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uDQo+ID4gKyAqDQo+ID4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhDQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24N Cj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KPiA+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0DQo+ID4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUNCj4gPiArICogU29mdHdhcmUuDQo+ID4gKyAqDQo+ID4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SDQo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KPiA+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwNCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCj4gPiArICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcN Cj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuDQo+ ID4gKyAqDQo+ID4gKyAqIEF1dGhvcnM6IFNpbW9uIFNlciA8c2ltb24uc2VyQGludGVsLmNvbT4N Cj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIElHVF9DSEFNRUxJVU1fU1RSRUFNX0gNCj4g PiArI2RlZmluZSBJR1RfQ0hBTUVMSVVNX1NUUkVBTV9IDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAi Y29uZmlnLmgiDQo+ID4gKw0KPiA+ICtlbnVtIGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9k ZSB7DQo+ID4gKwlDSEFNRUxJVU1fU1RSRUFNX1JFQUxUSU1FX05PTkUgPSAwLA0KPiA+ICsJLyog c3RvcCBkdW1waW5nIHdoZW4gb3ZlcmZsb3cgKi8NCj4gPiArCUNIQU1FTElVTV9TVFJFQU1fUkVB TFRJTUVfU1RPUF9XSEVOX09WRVJGTE9XID0gMSwNCj4gPiArCS8qIGRyb3AgZGF0YSBvbiBvdmVy ZmxvdyAqLw0KPiA+ICsJQ0hBTUVMSVVNX1NUUkVBTV9SRUFMVElNRV9CRVNUX0VGRk9SVCA9IDIs DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbTsNCj4gPiArDQo+ ID4gK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjaGFtZWxpdW1fc3RyZWFtX2luaXQodm9pZCk7 DQo+ID4gK3ZvaWQgY2hhbWVsaXVtX3N0cmVhbV9kZWluaXQoc3RydWN0IGNoYW1lbGl1bV9zdHJl YW0gKmNsaWVudCk7DQo+ID4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9kdW1wX3JlYWx0aW1lX2F1 ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsDQo+ID4gKwkJCQkJICBlbnVtIGNo YW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBtb2RlKTsNCj4gPiArdm9pZCBjaGFtZWxpdW1f c3RyZWFtX2F1ZGlvX2Zvcm1hdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtLA0KPiA+ ICsJCQkJICAgaW50ICpyYXRlLCBpbnQgKmNoYW5uZWxzKTsNCj4gPiArYm9vbCBjaGFtZWxpdW1f c3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNs aWVudCwNCj4gPiArCQkJCQkgICAgIHNpemVfdCAqcGFnZV9jb3VudCwNCj4gPiArCQkJCQkgICAg IGludDMyX3QgKipidWYsIHNpemVfdCAqYnVmX2xlbik7DQo+ID4gK2Jvb2wgY2hhbWVsaXVtX3N0 cmVhbV9zdG9wX3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQp Ow0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBi L2xpYi9tZXNvbi5idWlsZA0KPiA+IGluZGV4IGE4NDYyOTMzLi5lZWFkMGFmYiAxMDA2NDQNCj4g PiAtLS0gYS9saWIvbWVzb24uYnVpbGQNCj4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPiBA QCAtOTIsNyArOTIsNyBAQCBpZiB2YWxncmluZC5mb3VuZCgpDQo+ID4gIGVuZGlmDQo+ID4gIA0K PiA+ICBpZiBnc2wuZm91bmQoKQ0KPiA+IC0JbGliX2RlcHMgKz0gWyBnc2wgXQ0KPiA+ICsJbGli X2RlcHMgKz0gZ3NsDQo+ID4gIAlsaWJfc291cmNlcyArPSBbICdpZ3RfZnJhbWUuYycsICdpZ3Rf YXVkaW8uYycgXQ0KPiA+ICBlbmRpZg0KPiA+ICANCj4gPiBAQCAtMTAxLDkgKzEwMSwxMCBAQCBp ZiBhbHNhLmZvdW5kKCkNCj4gPiAgCWxpYl9zb3VyY2VzICs9ICdpZ3RfYWxzYS5jJw0KPiA+ICBl bmRpZg0KPiA+ICANCj4gPiAtaWYgY2hhbWVsaXVtLmZvdW5kKCkNCj4gPiAraWYgY2hhbWVsaXVt X2ZvdW5kDQo+ID4gIAlsaWJfZGVwcyArPSBjaGFtZWxpdW0NCj4gPiAgCWxpYl9zb3VyY2VzICs9 ICdpZ3RfY2hhbWVsaXVtLmMnDQo+ID4gKwlsaWJfc291cmNlcyArPSAnaWd0X2NoYW1lbGl1bV9z dHJlYW0uYycNCj4gPiAgZW5kaWYNCj4gPiAgDQo+ID4gIHNyY2RpciA9IGpvaW5fcGF0aHMobWVz b24uc291cmNlX3Jvb3QoKSwgJ3Rlc3RzJykNCj4gPiBkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQg Yi9tZXNvbi5idWlsZA0KPiA+IGluZGV4IDU1NzQwMGE1Li5iZTZkZmY5ZCAxMDA2NDQNCj4gPiAt LS0gYS9tZXNvbi5idWlsZA0KPiA+ICsrKyBiL21lc29uLmJ1aWxkDQo+ID4gQEAgLTY0LDggKzY0 LDYgQEAgX2J1aWxkX292ZXJsYXkgPSBmYWxzZQ0KPiA+ICBfb3ZlcmxheV9yZXF1aXJlZCA9IGZh bHNlDQo+ID4gIF9idWlsZF9tYW4gPSBmYWxzZQ0KPiA+ICBfbWFuX3JlcXVpcmVkID0gZmFsc2UN Cj4gPiAtX2J1aWxkX2F1ZGlvID0gZmFsc2UNCj4gPiAtX2F1ZGlvX3JlcXVpcmVkID0gZmFsc2UN Cj4gPiAgX2J1aWxkX2NoYW1lbGl1bSA9IGZhbHNlDQo+ID4gIF9jaGFtZWxpdW1fcmVxdWlyZWQg PSBmYWxzZQ0KPiA+ICBfYnVpbGRfZG9jcyA9IGZhbHNlDQo+ID4gQEAgLTc5LDcgKzc3LDYgQEAg YnVpbGRfb3ZlcmxheSA9IGdldF9vcHRpb24oJ2J1aWxkX292ZXJsYXknKQ0KPiA+ICBvdmVybGF5 X2JhY2tlbmRzID0gZ2V0X29wdGlvbignb3ZlcmxheV9iYWNrZW5kcycpDQo+ID4gIGJ1aWxkX21h biA9IGdldF9vcHRpb24oJ2J1aWxkX21hbicpDQo+ID4gIHdpdGhfdmFsZ3JpbmQgPSBnZXRfb3B0 aW9uKCd3aXRoX3ZhbGdyaW5kJykNCj4gPiAtYnVpbGRfYXVkaW8gPSBnZXRfb3B0aW9uKCdidWls ZF9hdWRpbycpDQo+ID4gIGJ1aWxkX2NoYW1lbGl1bSA9IGdldF9vcHRpb24oJ2J1aWxkX2NoYW1l bGl1bScpDQo+ID4gIGJ1aWxkX2RvY3MgPSBnZXRfb3B0aW9uKCdidWlsZF9kb2NzJykNCj4gPiAg YnVpbGRfdGVzdHMgPSBnZXRfb3B0aW9uKCdidWlsZF90ZXN0cycpDQo+ID4gQEAgLTkxLDggKzg4 LDYgQEAgX2J1aWxkX292ZXJsYXkgPSBidWlsZF9vdmVybGF5ICE9ICdmYWxzZScNCj4gPiAgX292 ZXJsYXlfcmVxdWlyZWQgPSBidWlsZF9vdmVybGF5ID09ICd0cnVlJw0KPiA+ICBfYnVpbGRfbWFu ID0gYnVpbGRfbWFuICE9ICdmYWxzZScNCj4gPiAgX21hbl9yZXF1aXJlZCA9IGJ1aWxkX21hbiA9 PSAndHJ1ZScNCj4gPiAtX2J1aWxkX2F1ZGlvID0gYnVpbGRfYXVkaW8gIT0gJ2ZhbHNlJw0KPiA+ IC1fYXVkaW9fcmVxdWlyZWQgPSBidWlsZF9hdWRpbyA9PSAndHJ1ZScNCj4gPiAgX2J1aWxkX2No YW1lbGl1bSA9IGJ1aWxkX2NoYW1lbGl1bSAhPSAnZmFsc2UnDQo+ID4gIF9jaGFtZWxpdW1fcmVx dWlyZWQgPSBidWlsZF9jaGFtZWxpdW0gPT0gJ3RydWUnDQo+ID4gIF9idWlsZF9kb2NzID0gYnVp bGRfZG9jcyAhPSAnZmFsc2UnDQo+ID4gQEAgLTE2NiwyNiArMTYxLDYgQEAgY2Fpcm8gPSBkZXBl bmRlbmN5KCdjYWlybycsIHZlcnNpb24gOiAnPjEuMTIuMCcsIHJlcXVpcmVkIDogdHJ1ZSkNCj4g PiAgbGlidWRldiA9IGRlcGVuZGVuY3koJ2xpYnVkZXYnLCByZXF1aXJlZCA6IHRydWUpDQo+ID4g IGdsaWIgPSBkZXBlbmRlbmN5KCdnbGliLTIuMCcsIHJlcXVpcmVkIDogdHJ1ZSkNCj4gPiAgDQo+ ID4gLWdzbCA9IG51bGxfZGVwDQo+ID4gLWFsc2EgPSBudWxsX2RlcA0KPiA+IC1pZiBfYnVpbGRf YXVkaW8gb3IgX2J1aWxkX2NoYW1lbGl1bQ0KPiA+IC0JZ3NsID0gZGVwZW5kZW5jeSgnZ3NsJywg cmVxdWlyZWQgOiBfYXVkaW9fcmVxdWlyZWQgb3IgX2NoYW1lbGl1bV9yZXF1aXJlZCkNCj4gPiAt ZW5kaWYNCj4gPiAtaWYgX2J1aWxkX2F1ZGlvDQo+ID4gLQlhbHNhID0gZGVwZW5kZW5jeSgnYWxz YScsIHJlcXVpcmVkIDogX2F1ZGlvX3JlcXVpcmVkKQ0KPiA+IC1lbmRpZg0KPiA+IC0NCj4gPiAt YXVkaW9pbmZvID0gJ05vJw0KPiA+IC1pZiBfYnVpbGRfYXVkaW8gYW5kIGFsc2EuZm91bmQoKSBh bmQgZ3NsLmZvdW5kKCkNCj4gPiAtCWF1ZGlvaW5mbyA9ICdZZXMnDQo+ID4gLWVsc2UNCj4gPiAt CWlmIF9hdWRpb19yZXF1aXJlZA0KPiA+IC0JCWVycm9yKCdDYW5ub3QgYnVpbGQgYXVkaW8gdGVz dCBkdWUgdG8gbWlzc2luZyBkZXBlbmRlbmNpZXMnKQ0KPiA+IC0JZW5kaWYNCj4gPiAtCV9idWls ZF9hdWRpbyA9IGZhbHNlDQo+ID4gLWVuZGlmDQo+ID4gLWJ1aWxkX2luZm8gKz0gJ0J1aWxkIGF1 ZGlvIHRlc3Q6ICcgKyBhdWRpb2luZm8NCj4gPiAtDQo+ID4gIHhtbHJwYyA9IGRlcGVuZGVuY3ko J3htbHJwYycsIHJlcXVpcmVkIDogZmFsc2UpDQo+ID4gIHhtbHJwY191dGlsID0gZGVwZW5kZW5j eSgneG1scnBjX3V0aWwnLCByZXF1aXJlZCA6IGZhbHNlKQ0KPiA+ICB4bWxycGNfY2xpZW50ID0g ZGVwZW5kZW5jeSgneG1scnBjX2NsaWVudCcsIHJlcXVpcmVkIDogZmFsc2UpDQo+ID4gQEAgLTE5 NywyMSArMTcyLDMyIEBAIGlmIG5vdCB4bWxycGMuZm91bmQoKSBhbmQgeG1scnBjX2NtZC5mb3Vu ZCgpDQo+ID4gIA0KPiA+ICAJaWYgbGlic19jbWQucmV0dXJuY29kZSgpID09IDAgYW5kIGNmbGFn c19jbWQucmV0dXJuY29kZSgpID09IDANCj4gPiAgCQl4bWxycGMgPSBkZWNsYXJlX2RlcGVuZGVu Y3koY29tcGlsZV9hcmdzOiBjZmxhZ3NfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSwNCj4g PiAtCQkJCQkgICBsaW5rX2FyZ3MgOiBsaWJzX2NtZC5zdGRvdXQoKS5zdHJpcCgpLnNwbGl0KCkp DQo+ID4gKwkJCQkJICAgIGxpbmtfYXJncyA6IGxpYnNfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3Bs aXQoKSkNCj4gPiAgCQl4bWxycGNfdXRpbCA9IGRlY2xhcmVfZGVwZW5kZW5jeSgpDQo+ID4gIAkJ eG1scnBjX2NsaWVudCA9IGRlY2xhcmVfZGVwZW5kZW5jeSgpDQo+ID4gIAllbmRpZg0KPiA+ICBl bmRpZg0KPiA+ICANCj4gPiArZ3NsID0gbnVsbF9kZXANCj4gPiArYWxzYSA9IG51bGxfZGVwDQo+ ID4gIGNoYW1lbGl1bSA9IG51bGxfZGVwDQo+ID4gK2NoYW1lbGl1bV9mb3VuZCA9IGZhbHNlICMg VE9ETzogdXNlIGEgZGlzYWJsZXIgb2JqZWN0IGluc3RlYWQNCj4gPiAgY2hhbWVsaXVtaW5mbyA9 ICdObycNCj4gPiAtaWYgX2J1aWxkX2NoYW1lbGl1bSBhbmQgZ3NsLmZvdW5kKCkgYW5kIHhtbHJw Yy5mb3VuZCgpIGFuZCB4bWxycGNfdXRpbC5mb3VuZCgpIGFuZCB4bWxycGNfY2xpZW50LmZvdW5k KCkNCj4gPiAtCWNoYW1lbGl1bSA9IGRlY2xhcmVfZGVwZW5kZW5jeShkZXBlbmRlbmNpZXMgOiBb IHhtbHJwYywNCj4gPiAtCQkJCQkJCXhtbHJwY191dGlsLCB4bWxycGNfY2xpZW50XSkNCj4gPiAt CWNvbmZpZy5zZXQoJ0hBVkVfQ0hBTUVMSVVNJywgMSkNCj4gPiAtCWNoYW1lbGl1bWluZm8gPSAn WWVzJw0KPiA+IC1lbGlmIF9jaGFtZWxpdW1fcmVxdWlyZWQNCj4gPiAtCWVycm9yKCdDYW5ub3Qg YnVpbGQgY2hhbWVsaXVtIHRlc3QgZHVlIHRvIG1pc3NpbmcgZGVwZW5kZW5jaWVzJykNCj4gPiAr aWYgX2J1aWxkX2NoYW1lbGl1bQ0KPiA+ICsJZ3NsID0gZGVwZW5kZW5jeSgnZ3NsJywgcmVxdWly ZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQ0KPiA+ICsJYWxzYSA9IGRlcGVuZGVuY3koJ2Fsc2En LCByZXF1aXJlZCA6IF9jaGFtZWxpdW1fcmVxdWlyZWQpDQo+ID4gKwljaGFtZWxpdW0gPSBkZWNs YXJlX2RlcGVuZGVuY3koZGVwZW5kZW5jaWVzIDogWw0KPiA+ICsJCXhtbHJwYywNCj4gPiArCQl4 bWxycGNfdXRpbCwNCj4gPiArCQl4bWxycGNfY2xpZW50LA0KPiA+ICsJCWdzbCwNCj4gPiArCQlh bHNhLA0KPiA+ICsJXSwgcmVxdWlyZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQ0KPiA+ICsJaWYg eG1scnBjLmZvdW5kKCkgYW5kIHhtbHJwY191dGlsLmZvdW5kKCkgYW5kIHhtbHJwY19jbGllbnQu Zm91bmQoKSBhbmQgZ3NsLmZvdW5kKCkgYW5kIGFsc2EuZm91bmQoKQ0KPiA+ICsJCWNvbmZpZy5z ZXQoJ0hBVkVfQ0hBTUVMSVVNJywgMSkNCj4gPiArCQljaGFtZWxpdW1pbmZvID0gJ1llcycNCj4g PiArCQljaGFtZWxpdW1fZm91bmQgPSB0cnVlDQo+ID4gKwllbmRpZg0KPiA+ICBlbmRpZg0KPiA+ ICBidWlsZF9pbmZvICs9ICdCdWlsZCBDaGFtZWxpdW0gdGVzdDogJyArIGNoYW1lbGl1bWluZm8N Cj4gPiAgDQo+ID4gZGlmZiAtLWdpdCBhL21lc29uX29wdGlvbnMudHh0IGIvbWVzb25fb3B0aW9u cy50eHQNCj4gPiBpbmRleCAwY2QzYjM1MC4uODg4ZWZlNTYgMTAwNjQ0DQo+ID4gLS0tIGEvbWVz b25fb3B0aW9ucy50eHQNCj4gPiArKysgYi9tZXNvbl9vcHRpb25zLnR4dA0KPiA+IEBAIC0xMCwx MiArMTAsNiBAQCBvcHRpb24oJ292ZXJsYXlfYmFja2VuZHMnLA0KPiA+ICAgICAgICAgY2hvaWNl cyA6IFsgJ2F1dG8nLCAneCcsICd4dicgXSwNCj4gPiAgICAgICAgIGRlc2NyaXB0aW9uIDogJ092 ZXJsYXkgYmFja2VuZHMgdG8gZW5hYmxlJykNCj4gPiAgDQo+ID4gLW9wdGlvbignYnVpbGRfYXVk aW8nLA0KPiA+IC0gICAgICAgdHlwZSA6ICdjb21ibycsDQo+ID4gLSAgICAgICB2YWx1ZSA6ICdh dXRvJywNCj4gPiAtICAgICAgIGNob2ljZXMgOiBbJ2F1dG8nLCAndHJ1ZScsICdmYWxzZSddLA0K PiA+IC0gICAgICAgZGVzY3JpcHRpb24gOiAnQnVpbGQgYXVkaW8gdGVzdCcpDQo+ID4gLQ0KPiA+ ICBvcHRpb24oJ2J1aWxkX2NoYW1lbGl1bScsDQo+ID4gICAgICAgICB0eXBlIDogJ2NvbWJvJywN Cj4gPiAgICAgICAgIHZhbHVlIDogJ2F1dG8nLA0KPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9hdWRp by5jIGIvdGVzdHMvYXVkaW8uYw0KPiA+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDU2MDg3NmEzLi4wMDAwMDAwMA0KPiA+IC0tLSBhL3Rlc3RzL2F1ZGlvLmMNCj4gPiArKysg L2Rldi9udWxsDQo+ID4gQEAgLTEsMTkzICswLDAgQEANCj4gPiAtLyoNCj4gPiAtICogQ29weXJp Z2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24NCj4gPiAtICoNCj4gPiAtICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGENCj4gPiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4gPiAtICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bg0KPiA+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gPiAtICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+ID4gLSAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6DQo+ID4gLSAqDQo+ID4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQNCj4gPiAtICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQ0KPiA+IC0gKiBTb2Z0d2FyZS4NCj4gPiAtICoNCj4gPiAtICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1INCj4gPiAtICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ID4gLSAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTA0KPiA+IC0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KPiA+IC0gKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO Rw0KPiA+IC0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTDQo+ID4gLSAqIElOIFRIRSBTT0ZUV0FSRS4N Cj4gPiAtICoNCj4gPiAtICogQXV0aG9yczoNCj4gPiAtICogIFBhdWwgS29jaWFsa293c2tpIDxw YXVsLmtvY2lhbGtvd3NraUBsaW51eC5pbnRlbC5jb20+DQo+ID4gLSAqLw0KPiA+IC0NCj4gPiAt I2luY2x1ZGUgImNvbmZpZy5oIg0KPiA+IC0jaW5jbHVkZSAiaWd0LmgiDQo+ID4gLQ0KPiA+IC0j ZGVmaW5lIFBMQVlCQUNLX0NIQU5ORUxTCTINCj4gPiAtI2RlZmluZSBQTEFZQkFDS19GUkFNRVMJ CTEwMjQNCj4gPiAtDQo+ID4gLSNkZWZpbmUgQ0FQVFVSRV9TQU1QTEVfUkFURQk0ODAwMA0KPiA+ IC0jZGVmaW5lIENBUFRVUkVfQ0hBTk5FTFMJMg0KPiA+IC0jZGVmaW5lIENBUFRVUkVfREVWSUNF X05BTUUJImRlZmF1bHQiDQo+ID4gLSNkZWZpbmUgQ0FQVFVSRV9GUkFNRVMJCTIwNDgNCj4gPiAt DQo+ID4gLSNkZWZpbmUgUlVOX1RJTUVPVVQJCTIwMDANCj4gPiAtDQo+ID4gLXN0cnVjdCB0ZXN0 X2RhdGEgew0KPiA+IC0Jc3RydWN0IGFsc2EgKmFsc2E7DQo+ID4gLQlzdHJ1Y3QgYXVkaW9fc2ln bmFsICpzaWduYWw7DQo+ID4gLQ0KPiA+IC0JaW50IHN0cmVhazsNCj4gPiAtfTsNCj4gPiAtDQo+ ID4gLXN0YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNbXSA9IHsNCj4gPiAtCTMyMDAwLA0KPiA+IC0J NDQxMDAsDQo+ID4gLQk0ODAwMCwNCj4gPiAtCTg4MjAwLA0KPiA+IC0JOTYwMDAsDQo+ID4gLQkx NzY0MDAsDQo+ID4gLQkxOTIwMDAsDQo+ID4gLX07DQo+ID4gLQ0KPiA+IC1zdGF0aWMgaW50IHNh bXBsaW5nX3JhdGVzX2NvdW50ID0gc2l6ZW9mKHNhbXBsaW5nX3JhdGVzKSAvIHNpemVvZihpbnQp Ow0KPiA+IC0NCj4gPiAtc3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVzW10gPSB7DQo+ID4gLQkz MDAsDQo+ID4gLQk2MDAsDQo+ID4gLQkxMjAwLA0KPiA+IC0JODAwMDAsDQo+ID4gLQkxMDAwMCwN Cj4gPiAtfTsNCj4gPiAtDQo+ID4gLXN0YXRpYyBpbnQgdGVzdF9mcmVxdWVuY2llc19jb3VudCA9 IHNpemVvZih0ZXN0X2ZyZXF1ZW5jaWVzKSAvIHNpemVvZihpbnQpOw0KPiA+IC0NCj4gPiAtc3Rh dGljIGludCBvdXRwdXRfY2FsbGJhY2sodm9pZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZy YW1lcykNCj4gPiAtew0KPiA+IC0Jc3RydWN0IHRlc3RfZGF0YSAqdGVzdF9kYXRhID0gKHN0cnVj dCB0ZXN0X2RhdGEgKikgZGF0YTsNCj4gPiAtDQo+ID4gLQlhdWRpb19zaWduYWxfZmlsbCh0ZXN0 X2RhdGEtPnNpZ25hbCwgYnVmZmVyLCBmcmFtZXMpOw0KPiA+IC0NCj4gPiAtCXJldHVybiAwOw0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgaW50IGlucHV0X2NhbGxiYWNrKHZvaWQgKmRhdGEs IHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpDQo+ID4gLXsNCj4gPiAtCXN0cnVjdCB0ZXN0X2Rh dGEgKnRlc3RfZGF0YSA9IChzdHJ1Y3QgdGVzdF9kYXRhICopIGRhdGE7DQo+ID4gLQlib29sIGRl dGVjdDsNCj4gPiAtDQo+ID4gLQlkZXRlY3QgPSBhdWRpb19zaWduYWxfZGV0ZWN0KHRlc3RfZGF0 YS0+c2lnbmFsLCBDQVBUVVJFX0NIQU5ORUxTLA0KPiA+IC0JCQkJICAgICBDQVBUVVJFX1NBTVBM RV9SQVRFLCBidWZmZXIsIGZyYW1lcyk7DQo+ID4gLQlpZiAoZGV0ZWN0KQ0KPiA+IC0JCXRlc3Rf ZGF0YS0+c3RyZWFrKys7DQo+ID4gLQllbHNlDQo+ID4gLQkJdGVzdF9kYXRhLT5zdHJlYWsgPSAw Ow0KPiA+IC0NCj4gPiAtCS8qIEEgc3RyZWFrIG9mIDMgZ2l2ZXMgY29uZmlkZW5jZSB0aGF0IHRo ZSBzaWduYWwgaXMgZ29vZC4gKi8NCj4gPiAtCWlmICh0ZXN0X2RhdGEtPnN0cmVhayA9PSAzKQ0K PiA+IC0JCXJldHVybiAxOw0KPiA+IC0NCj4gPiAtCXJldHVybiAwOw0KPiA+IC19DQo+ID4gLQ0K PiA+IC1zdGF0aWMgdm9pZCB0ZXN0X2ludGVncml0eShjb25zdCBjaGFyICpkZXZpY2VfbmFtZSkN Cj4gPiAtew0KPiA+IC0Jc3RydWN0IHRlc3RfZGF0YSBkYXRhOw0KPiA+IC0JaW50IHNhbXBsaW5n X3JhdGU7DQo+ID4gLQlib29sIHJ1biA9IGZhbHNlOw0KPiA+IC0JYm9vbCB0ZXN0Ow0KPiA+IC0J aW50IGksIGo7DQo+ID4gLQlpbnQgcmV0Ow0KPiA+IC0NCj4gPiAtCWRhdGEuYWxzYSA9IGFsc2Ff aW5pdCgpOw0KPiA+IC0JaWd0X2Fzc2VydChkYXRhLmFsc2EpOw0KPiA+IC0NCj4gPiAtCXJldCA9 IGFsc2Ffb3Blbl9pbnB1dChkYXRhLmFsc2EsIENBUFRVUkVfREVWSUNFX05BTUUpOw0KPiA+IC0J aWd0X2Fzc2VydChyZXQgPj0gMCk7DQo+ID4gLQ0KPiA+IC0JYWxzYV9jb25maWd1cmVfaW5wdXQo ZGF0YS5hbHNhLCBDQVBUVVJFX0NIQU5ORUxTLA0KPiA+IC0JCQkgICAgIENBUFRVUkVfU0FNUExF X1JBVEUpOw0KPiA+IC0NCj4gPiAtCWFsc2FfcmVnaXN0ZXJfaW5wdXRfY2FsbGJhY2soZGF0YS5h bHNhLCBpbnB1dF9jYWxsYmFjaywgJmRhdGEsDQo+ID4gLQkJCQkgICAgIENBUFRVUkVfRlJBTUVT KTsNCj4gPiAtDQo+ID4gLQlmb3IgKGkgPSAwOyBpIDwgc2FtcGxpbmdfcmF0ZXNfY291bnQ7IGkr Kykgew0KPiA+IC0JCXJldCA9IGFsc2Ffb3Blbl9vdXRwdXQoZGF0YS5hbHNhLCBkZXZpY2VfbmFt ZSk7DQo+ID4gLQkJaWd0X2Fzc2VydChyZXQgPj0gMCk7DQo+ID4gLQ0KPiA+IC0JCXNhbXBsaW5n X3JhdGUgPSBzYW1wbGluZ19yYXRlc1tpXTsNCj4gPiAtDQo+ID4gLQkJdGVzdCA9IGFsc2FfdGVz dF9vdXRwdXRfY29uZmlndXJhdGlvbihkYXRhLmFsc2EsDQo+ID4gLQkJCQkJCSAgICAgIFBMQVlC QUNLX0NIQU5ORUxTLA0KPiA+IC0JCQkJCQkgICAgICBzYW1wbGluZ19yYXRlKTsNCj4gPiAtCQlp ZiAoIXRlc3QpIHsNCj4gPiAtCQkJYWxzYV9jbG9zZV9vdXRwdXQoZGF0YS5hbHNhKTsNCj4gPiAt CQkJY29udGludWU7DQo+ID4gLQkJfQ0KPiA+IC0NCj4gPiAtCQlpZ3RfZGVidWcoIlRlc3Rpbmcg d2l0aCBzYW1wbGluZyByYXRlICVkXG4iLCBzYW1wbGluZ19yYXRlKTsNCj4gPiAtDQo+ID4gLQkJ YWxzYV9jb25maWd1cmVfb3V0cHV0KGRhdGEuYWxzYSwgUExBWUJBQ0tfQ0hBTk5FTFMsDQo+ID4g LQkJCQkgICAgICAgc2FtcGxpbmdfcmF0ZSk7DQo+ID4gLQ0KPiA+IC0JCWRhdGEuc2lnbmFsID0g YXVkaW9fc2lnbmFsX2luaXQoUExBWUJBQ0tfQ0hBTk5FTFMsDQo+ID4gLQkJCQkJCXNhbXBsaW5n X3JhdGUpOw0KPiA+IC0JCWlndF9hc3NlcnQoZGF0YS5zaWduYWwpOw0KPiA+IC0NCj4gPiAtCQlm b3IgKGogPSAwOyBqIDwgdGVzdF9mcmVxdWVuY2llc19jb3VudDsgaisrKQ0KPiA+IC0JCQlhdWRp b19zaWduYWxfYWRkX2ZyZXF1ZW5jeShkYXRhLnNpZ25hbCwNCj4gPiAtCQkJCQkJICAgdGVzdF9m cmVxdWVuY2llc1tqXSk7DQo+ID4gLQ0KPiA+IC0JCWF1ZGlvX3NpZ25hbF9zeW50aGVzaXplKGRh dGEuc2lnbmFsKTsNCj4gPiAtDQo+ID4gLQkJYWxzYV9yZWdpc3Rlcl9vdXRwdXRfY2FsbGJhY2so ZGF0YS5hbHNhLCBvdXRwdXRfY2FsbGJhY2ssDQo+ID4gLQkJCQkJICAgICAgJmRhdGEsIFBMQVlC QUNLX0ZSQU1FUyk7DQo+ID4gLQ0KPiA+IC0JCWRhdGEuc3RyZWFrID0gMDsNCj4gPiAtDQo+ID4g LQkJcmV0ID0gYWxzYV9ydW4oZGF0YS5hbHNhLCBSVU5fVElNRU9VVCk7DQo+ID4gLQkJaWd0X2Fz c2VydChyZXQgPiAwKTsNCj4gPiAtDQo+ID4gLQkJYXVkaW9fc2lnbmFsX2NsZWFuKGRhdGEuc2ln bmFsKTsNCj4gPiAtCQlmcmVlKGRhdGEuc2lnbmFsKTsNCj4gPiAtDQo+ID4gLQkJYWxzYV9jbG9z ZV9vdXRwdXQoZGF0YS5hbHNhKTsNCj4gPiAtDQo+ID4gLQkJcnVuID0gdHJ1ZTsNCj4gPiAtCX0N Cj4gPiAtDQo+ID4gLQkvKiBNYWtlIHN1cmUgd2UgdGVzdGVkIGF0IGxlYXN0IG9uZSBmcmVxdWVu Y3kgKi8NCj4gPiAtCWlndF9hc3NlcnQocnVuKTsNCj4gPiAtDQo+ID4gLQlhbHNhX2Nsb3NlX2lu cHV0KGRhdGEuYWxzYSk7DQo+ID4gLQlmcmVlKGRhdGEuYWxzYSk7DQo+ID4gLX0NCj4gPiAtDQo+ ID4gLXN0YXRpYyB2b2lkIHRlc3Rfc3VzcGVuZF9yZXN1bWVfaW50ZWdyaXR5KGNvbnN0IGNoYXIg KmRldmljZV9uYW1lLA0KPiA+IC0JCQkJCSAgZW51bSBpZ3Rfc3VzcGVuZF9zdGF0ZSBzdGF0ZSwN Cj4gPiAtCQkJCQkgIGVudW0gaWd0X3N1c3BlbmRfdGVzdCB0ZXN0KQ0KPiA+IC17DQo+ID4gLQl0 ZXN0X2ludGVncml0eShkZXZpY2VfbmFtZSk7DQo+ID4gLQ0KPiA+IC0JaWd0X3N5c3RlbV9zdXNw ZW5kX2F1dG9yZXN1bWUoc3RhdGUsIHRlc3QpOw0KPiA+IC0NCj4gPiAtCXRlc3RfaW50ZWdyaXR5 KGRldmljZV9uYW1lKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtaWd0X21haW4NCj4gPiAtew0KPiA+ IC0JaWd0X3N1YnRlc3QoImhkbWktaW50ZWdyaXR5IikNCj4gPiAtCQl0ZXN0X2ludGVncml0eSgi SERNSSIpOw0KPiA+IC0NCj4gPiAtCWlndF9zdWJ0ZXN0KCJoZG1pLWludGVncml0eS1hZnRlci1z dXNwZW5kIikNCj4gPiAtCQl0ZXN0X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNV U1BFTkRfU1RBVEVfTUVNLA0KPiA+IC0JCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9OT05FKTsNCj4g PiAtDQo+ID4gLQlpZ3Rfc3VidGVzdCgiaGRtaS1pbnRlZ3JpdHktYWZ0ZXItaGliZXJuYXRlIikN Cj4gPiAtCQl0ZXN0X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNVU1BFTkRfU1RB VEVfRElTSywNCj4gPiAtCQkJCQkgICAgICBTVVNQRU5EX1RFU1RfREVWSUNFUyk7DQo+ID4gLX0N Cj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2NoYW1lbGl1bS5jIGIvdGVzdHMva21zX2NoYW1l bGl1bS5jDQo+ID4gaW5kZXggMmRjMTA0OWQuLjI5NzRmZjY5IDEwMDY0NA0KPiA+IC0tLSBhL3Rl c3RzL2ttc19jaGFtZWxpdW0uYw0KPiA+ICsrKyBiL3Rlc3RzL2ttc19jaGFtZWxpdW0uYw0KPiA+ IEBAIC00MTMsNyArNDEzLDcgQEAgdGVzdF9zdXNwZW5kX3Jlc3VtZV9lZGlkX2NoYW5nZShkYXRh X3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwNCj4gPiAgDQo+ID4gIHN0YXRp YyBpZ3Rfb3V0cHV0X3QgKg0KPiA+ICBwcmVwYXJlX291dHB1dChkYXRhX3QgKmRhdGEsDQo+ID4g LQkgICAgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQ0KPiA+ICsJICAgICAgIHN0cnVj dCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwgYm9vbCBzZXRfZWRpZCkNCj4gPiAgew0KPiA+ICAJaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0KPiA+ICAJaWd0X291dHB1dF90 ICpvdXRwdXQ7DQo+ID4gQEAgLTQyOCw3ICs0MjgsOCBAQCBwcmVwYXJlX291dHB1dChkYXRhX3Qg KmRhdGEsDQo+ID4gIAkvKiBUaGUgY2hhbWVsaXVtJ3MgZGVmYXVsdCBFRElEIGhhcyBhIGxvdCBv ZiByZXNvbHV0aW9ucywgd2F5IG1vcmUgdGhlbg0KPiA+ICAJICogd2UgbmVlZCB0byB0ZXN0DQo+ ID4gIAkgKi8NCj4gPiAtCWNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGRhdGEtPmNoYW1lbGl1bSwg cG9ydCwgZGF0YS0+ZWRpZF9pZCk7DQo+ID4gKwlpZiAoc2V0X2VkaWQpDQo+ID4gKwkJY2hhbWVs aXVtX3BvcnRfc2V0X2VkaWQoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBkYXRhLT5lZGlkX2lkKTsN Cj4gPiAgDQo+ID4gIAljaGFtZWxpdW1fcGx1ZyhkYXRhLT5jaGFtZWxpdW0sIHBvcnQpOw0KPiA+ ICAJd2FpdF9mb3JfY29ubmVjdG9yKGRhdGEsIHBvcnQsIERSTV9NT0RFX0NPTk5FQ1RFRCk7DQo+ ID4gQEAgLTYxMyw3ICs2MTQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfb25lX21vZGUo ZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsDQo+ID4gIA0KPiA+ICAJ cmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7DQo+ID4gIA0KPiA+IC0Jb3V0cHV0ID0gcHJlcGFyZV9v dXRwdXQoZGF0YSwgcG9ydCk7DQo+ID4gKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBw b3J0LCB0cnVlKTsNCj4gPiAgCWNvbm5lY3RvciA9IGNoYW1lbGl1bV9wb3J0X2dldF9jb25uZWN0 b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7DQo+ID4gIAlwcmltYXJ5ID0gaWd0X291 dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOw0KPiA+ ICAJaWd0X2Fzc2VydChwcmltYXJ5KTsNCj4gPiBAQCAtNjQ0LDcgKzY0NSw3IEBAIHN0YXRpYyB2 b2lkIHRlc3RfZGlzcGxheV9hbGxfbW9kZXMoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVt X3BvcnQgKnBvcnQsDQo+ID4gIA0KPiA+ICAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7DQo+ID4g IA0KPiA+IC0Jb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7DQo+ID4gKwlvdXRw dXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0LCB0cnVlKTsNCj4gPiAgCWNvbm5lY3RvciA9 IGNoYW1lbGl1bV9wb3J0X2dldF9jb25uZWN0b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxz ZSk7DQo+ID4gIAlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERS TV9QTEFORV9UWVBFX1BSSU1BUlkpOw0KPiA+ICAJaWd0X2Fzc2VydChwcmltYXJ5KTsNCj4gPiBA QCAtNjc5LDcgKzY4MCw3IEBAIHRlc3RfZGlzcGxheV9mcmFtZV9kdW1wKGRhdGFfdCAqZGF0YSwg c3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQ0KPiA+ICANCj4gPiAgCXJlc2V0X3N0YXRlKGRh dGEsIHBvcnQpOw0KPiA+ICANCj4gPiAtCW91dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBv cnQpOw0KPiA+ICsJb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCwgdHJ1ZSk7DQo+ ID4gIAljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVjdG9yKGRhdGEtPmNoYW1l bGl1bSwgcG9ydCwgZmFsc2UpOw0KPiA+ICAJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5l X3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsNCj4gPiAgCWlndF9hc3NlcnQo cHJpbWFyeSk7DQo+ID4gQEAgLTcxMCw2ICs3MTEsMjY2IEBAIHRlc3RfZGlzcGxheV9mcmFtZV9k dW1wKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQ0KPiA+ICAJZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsNCj4gPiAgfQ0KPiA+ICANCj4gPiArDQo+ID4g Ky8qIFBsYXliYWNrIHBhcmFtZXRlcnMgY29udHJvbCB0aGUgYXVkaW8gc2lnbmFsIHdlIHN5bnRo ZXNpemUgYW5kIHNlbmQgKi8NCj4gPiArI2RlZmluZSBQTEFZQkFDS19DSEFOTkVMUyAyDQo+ID4g KyNkZWZpbmUgUExBWUJBQ0tfU0FNUExFUyAxMDI0DQo+ID4gKw0KPiA+ICsvKiBDYXB0dXJlIHBh cmVtZXRlcnMgY29udHJvbCB0aGUgYXVkaW8gc2lnbmFsIHdlIHJlY2VpdmUgKi8NCj4gPiArI2Rl ZmluZSBDQVBUVVJFX1NBTVBMRVMgMjA0OA0KPiA+ICsNCj4gPiArI2RlZmluZSBBVURJT19EVVJB VElPTiAyMDAwIC8qIG1zICovDQo+ID4gKy8qIEEgc3RyZWFrIG9mIDMgZ2l2ZXMgY29uZmlkZW5j ZSB0aGF0IHRoZSBzaWduYWwgaXMgZ29vZC4gKi8NCj4gPiArI2RlZmluZSBNSU5fU1RSRUFLIDMN Cj4gPiArDQo+ID4gKy8qIFRPRE86IENoYW1lbGl1bSBvbmx5IHN1cHBvcnRzIDQ4S0h6IGZvciBu b3cgKi8NCj4gPiArc3RhdGljIGludCBzYW1wbGluZ19yYXRlc1tdID0gew0KPiA+ICsvKgkzMjAw MCwgKi8NCj4gPiArLyoJNDQxMDAsICovDQo+ID4gKwk0ODAwMCwNCj4gPiArLyoJODgyMDAsICov DQo+ID4gKy8qCTk2MDAwLCAqLw0KPiA+ICsvKgkxNzY0MDAsICovDQo+ID4gKy8qCTE5MjAwMCwg Ki8NCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNfY291bnQg PSBzaXplb2Yoc2FtcGxpbmdfcmF0ZXMpIC8gc2l6ZW9mKGludCk7DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IHRlc3RfZnJlcXVlbmNpZXNbXSA9IHsNCj4gPiArCTMwMCwNCj4gPiArCTYwMCwNCj4g PiArCTEyMDAsDQo+ID4gKwk4MDAwMCwNCj4gPiArCTEwMDAwLA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVzX2NvdW50ID0gc2l6ZW9mKHRlc3RfZnJlcXVl bmNpZXMpIC8gc2l6ZW9mKGludCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK291dHB1 dF9jYWxsYmFjayh2b2lkICpkYXRhLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwgPSAoc3RydWN0IGF1ZGlvX3NpZ25h bCAqKSBkYXRhOw0KPiA+ICsNCj4gPiArCWF1ZGlvX3NpZ25hbF9maWxsKHNpZ25hbCwgYnVmZmVy LCBmcmFtZXMpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgYm9vbA0KPiA+ICtkb190ZXN0X2Rpc3BsYXlfYXVkaW8oZGF0YV90ICpkYXRhLCBzdHJ1 Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsDQo+ID4gKwkJICAgICAgc3RydWN0IGFsc2EgKmFsc2Es IGludCBwbGF5YmFja19jaGFubmVscywNCj4gPiArCQkgICAgICBpbnQgcGxheWJhY2tfcmF0ZSkN Cj4gPiArew0KPiA+ICsJaW50IHJldCwgY2FwdHVyZV9yYXRlLCBjYXB0dXJlX2NoYW5uZWxzLCBt c2VjOw0KPiA+ICsJc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICphdWRpb19maWxlOw0KPiA+ ICsJc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKnN0cmVhbTsNCj4gPiArCWVudW0gY2hhbWVsaXVt X3N0cmVhbV9yZWFsdGltZV9tb2RlIHN0cmVhbV9tb2RlOw0KPiA+ICsJc3RydWN0IGF1ZGlvX3Np Z25hbCAqc2lnbmFsOw0KPiA+ICsJaW50MzJfdCAqcmVjdiwgKmJ1ZjsNCj4gPiArCWRvdWJsZSAq Y2hhbm5lbDsNCj4gPiArCXNpemVfdCBpLCBzdHJlYWssIHBhZ2VfY291bnQ7DQo+ID4gKwlzaXpl X3QgcmVjdl9sZW4sIGJ1Zl9sZW4sIGJ1Zl9jYXAsIGJ1Zl9zaXplLCBjaGFubmVsX2xlbjsNCj4g PiArCWJvb2wgb2s7DQo+ID4gKwljaGFyIGR1bXBfc3VmZml4WzY0XTsNCj4gPiArCWNoYXIgKmR1 bXBfcGF0aCA9IE5VTEw7DQo+ID4gKwlpbnQgZHVtcF9mZCA9IC0xOw0KPiA+ICsNCj4gPiArCWlm ICghYWxzYV90ZXN0X291dHB1dF9jb25maWd1cmF0aW9uKGFsc2EsIHBsYXliYWNrX2NoYW5uZWxz LA0KPiA+ICsJCQkJCSAgICBwbGF5YmFja19yYXRlKSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ ID4gKw0KPiA+ICsJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcGxheWJhY2sgc2FtcGxpbmcgcmF0 ZSAlZFxuIiwgcGxheWJhY2tfcmF0ZSk7DQo+ID4gKwlhbHNhX2NvbmZpZ3VyZV9vdXRwdXQoYWxz YSwgcGxheWJhY2tfY2hhbm5lbHMsIHBsYXliYWNrX3JhdGUpOw0KPiA+ICsNCj4gPiArCWNoYW1l bGl1bV9zdGFydF9jYXB0dXJpbmdfYXVkaW8oZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7 DQo+ID4gKw0KPiA+ICsJc3RyZWFtID0gY2hhbWVsaXVtX3N0cmVhbV9pbml0KCk7DQo+ID4gKwlp Z3RfYXNzZXJ0KHN0cmVhbSk7DQo+ID4gKw0KPiA+ICsJc3RyZWFtX21vZGUgPSBDSEFNRUxJVU1f U1RSRUFNX1JFQUxUSU1FX1NUT1BfV0hFTl9PVkVSRkxPVzsNCj4gPiArCW9rID0gY2hhbWVsaXVt X3N0cmVhbV9kdW1wX3JlYWx0aW1lX2F1ZGlvKHN0cmVhbSwgc3RyZWFtX21vZGUpOw0KPiA+ICsJ aWd0X2Fzc2VydChvayk7DQo+ID4gKw0KPiA+ICsJY2hhbWVsaXVtX3N0cmVhbV9hdWRpb19mb3Jt YXQoc3RyZWFtLCAmY2FwdHVyZV9yYXRlLCAmY2FwdHVyZV9jaGFubmVscyk7DQo+ID4gKw0KPiA+ ICsJaWYgKGlndF9mcmFtZV9kdW1wX2lzX2VuYWJsZWQoKSkgew0KPiA+ICsJCXNucHJpbnRmKGR1 bXBfc3VmZml4LCBzaXplb2YoZHVtcF9zdWZmaXgpLCAiY2FwdHVyZS0lZGNoLSVkIiwNCj4gPiAr CQkJIHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5YmFja19yYXRlKTsNCj4gPiArDQo+ID4gKwkJZHVt cF9mZCA9IGF1ZGlvX2NyZWF0ZV93YXZfZmlsZV9zMzJfbGUoZHVtcF9zdWZmaXgsDQo+ID4gKwkJ CQkJCSAgICAgICBjYXB0dXJlX3JhdGUsDQo+ID4gKwkJCQkJCSAgICAgICBjYXB0dXJlX2NoYW5u ZWxzLA0KPiA+ICsJCQkJCQkgICAgICAgJmR1bXBfcGF0aCk7DQo+ID4gKwkJaWd0X2Fzc2VydChk dW1wX2ZkID49IDApOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXNpZ25hbCA9IGF1ZGlvX3NpZ25h bF9pbml0KHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5YmFja19yYXRlKTsNCj4gPiArCWlndF9hc3Nl cnQoc2lnbmFsKTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgdGVzdF9mcmVxdWVuY2ll c19jb3VudDsgaSsrKQ0KPiA+ICsJCWF1ZGlvX3NpZ25hbF9hZGRfZnJlcXVlbmN5KHNpZ25hbCwg dGVzdF9mcmVxdWVuY2llc1tpXSk7DQo+ID4gKwlhdWRpb19zaWduYWxfc3ludGhlc2l6ZShzaWdu YWwpOw0KPiA+ICsNCj4gPiArCWFsc2FfcmVnaXN0ZXJfb3V0cHV0X2NhbGxiYWNrKGFsc2EsIG91 dHB1dF9jYWxsYmFjaywgc2lnbmFsLA0KPiA+ICsJCQkJICAgICAgUExBWUJBQ0tfU0FNUExFUyk7 DQo+ID4gKw0KPiA+ICsJLyogVE9ETzogZGV0ZWN0IHNpZ25hbCBpbiByZWFsLXRpbWUgKi8NCj4g PiArCXJldCA9IGFsc2FfcnVuKGFsc2EsIEFVRElPX0RVUkFUSU9OKTsNCj4gPiArCWlndF9hc3Nl cnQocmV0ID09IDApOw0KPiA+ICsNCj4gPiArCWFsc2FfY2xvc2Vfb3V0cHV0KGFsc2EpOw0KPiA+ ICsNCj4gPiArCS8qIE5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTI4LCBiZWNhdXNlIHRoYXQn cyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMNCj4gPiArCSAqIHdlIGdldCBwZXIgY2hhbm5lbCBlYWNo IHRpbWUgd2UgcmVjZWl2ZSBhbiBhdWRpbyBwYWdlIGZyb20gdGhlDQo+ID4gKwkgKiBDaGFtZWxp dW0gZGV2aWNlLiAqLw0KPiA+ICsJY2hhbm5lbF9sZW4gPSBDQVBUVVJFX1NBTVBMRVM7DQo+ID4g KwljaGFubmVsID0gbWFsbG9jKHNpemVvZihkb3VibGUpICogY2hhbm5lbF9sZW4pOw0KPiA+ICsN Cj4gPiArCWJ1Zl9jYXAgPSBjYXB0dXJlX2NoYW5uZWxzICogY2hhbm5lbF9sZW47DQo+ID4gKwli dWYgPSBtYWxsb2Moc2l6ZW9mKGludDMyX3QpICogYnVmX2NhcCk7DQo+ID4gKwlidWZfbGVuID0g MDsNCj4gPiArDQo+ID4gKwlyZWN2ID0gTlVMTDsNCj4gPiArCXJlY3ZfbGVuID0gMDsNCj4gPiAr DQo+ID4gKwlzdHJlYWsgPSAwOw0KPiA+ICsJbXNlYyA9IDA7DQo+ID4gKwlpID0gMDsNCj4gPiAr CXdoaWxlIChzdHJlYWsgPCBNSU5fU1RSRUFLICYmIG1zZWMgPCBBVURJT19EVVJBVElPTikgew0K PiA+ICsJCW9rID0gY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1ZGlvKHN0cmVh bSwNCj4gPiArCQkJCQkJCSAgICAgJnBhZ2VfY291bnQsDQo+ID4gKwkJCQkJCQkgICAgICZyZWN2 LCAmcmVjdl9sZW4pOw0KPiA+ICsJCWlndF9hc3NlcnQob2spOw0KPiA+ICsNCj4gPiArCQltZW1j cHkoJmJ1ZltidWZfbGVuXSwgcmVjdiwgcmVjdl9sZW4gKiBzaXplb2YoaW50MzJfdCkpOw0KPiA+ ICsJCWJ1Zl9sZW4gKz0gcmVjdl9sZW47DQo+ID4gKw0KPiA+ICsJCWlmIChidWZfbGVuIDwgYnVm X2NhcCkNCj4gPiArCQkJY29udGludWU7DQo+ID4gKwkJaWd0X2Fzc2VydChidWZfbGVuID09IGJ1 Zl9jYXApOw0KPiA+ICsNCj4gPiArCQlpZiAoZHVtcF9mZCA+PSAwKSB7DQo+ID4gKwkJCWJ1Zl9z aXplID0gYnVmX2xlbiAqIHNpemVvZihpbnQzMl90KTsNCj4gPiArCQkJaWd0X2Fzc2VydCh3cml0 ZShkdW1wX2ZkLCBidWYsIGJ1Zl9zaXplKSA9PSBidWZfc2l6ZSk7DQo+ID4gKwkJfQ0KPiA+ICsN Cj4gPiArCQkvKiBUT0RPOiBjaGVjayBvdGhlciBjaGFubmVscyB0b28sIG5vdCBqdXN0IHRoZSBm aXJzdCBvbmUgKi8NCj4gPiArCQlhdWRpb19leHRyYWN0X2NoYW5uZWxfczMyX2xlKGNoYW5uZWws IGNoYW5uZWxfbGVuLCBidWYsIGJ1Zl9sZW4sDQo+ID4gKwkJCQkJICAgICBjYXB0dXJlX2NoYW5u ZWxzLCAwKTsNCj4gPiArDQo+ID4gKwkJbXNlYyA9IGkgKiBjaGFubmVsX2xlbiAvIChkb3VibGUp IGNhcHR1cmVfcmF0ZSAqIDEwMDA7DQo+ID4gKwkJaWd0X2RlYnVnKCJEZXRlY3RpbmcgYXVkaW8g c2lnbmFsLCB0PSVkIG1zZWNcbiIsIG1zZWMpOw0KPiA+ICsNCj4gPiArCQlpZiAoYXVkaW9fc2ln bmFsX2RldGVjdChzaWduYWwsIGNhcHR1cmVfcmF0ZSwgY2hhbm5lbCwNCj4gPiArCQkJCQljaGFu bmVsX2xlbikpDQo+ID4gKwkJCXN0cmVhaysrOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJc3RyZWFr ID0gMDsNCj4gPiArDQo+ID4gKwkJYnVmX2xlbiA9IDA7DQo+ID4gKwkJaSsrOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWlmIChkdW1wX2ZkID49IDApIHsNCj4gPiArCQljbG9zZShkdW1wX2ZkKTsN Cj4gPiArCQlpZiAoc3RyZWFrID09IE1JTl9TVFJFQUspIHsNCj4gPiArCQkJLyogVGVzdCBzdWNj ZWVkZWQsIG5vIG5lZWQgdG8ga2VlcCB0aGUgY2FwdHVyZWQgZGF0YSAqLw0KPiA+ICsJCQl1bmxp bmsoZHVtcF9wYXRoKTsNCj4gPiArCQl9IGVsc2UNCj4gPiArCQkJaWd0X2RlYnVnKCJTYXZlZCBj YXB0dXJlZCBhdWRpbyBkYXRhIHRvICVzXG4iLCBkdW1wX3BhdGgpOw0KPiA+ICsJCWZyZWUoZHVt cF9wYXRoKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmcmVlKHJlY3YpOw0KPiA+ICsJZnJlZShi dWYpOw0KPiA+ICsJZnJlZShjaGFubmVsKTsNCj4gPiArDQo+ID4gKwlvayA9IGNoYW1lbGl1bV9z dHJlYW1fc3RvcF9yZWFsdGltZV9hdWRpbyhzdHJlYW0pOw0KPiA+ICsJaWd0X2Fzc2VydChvayk7 DQo+ID4gKw0KPiA+ICsJYXVkaW9fZmlsZSA9IGNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRp byhkYXRhLT5jaGFtZWxpdW0sDQo+ID4gKwkJCQkJCSAgICBwb3J0KTsNCj4gPiArCWlmIChhdWRp b19maWxlKSB7DQo+ID4gKwkJaWd0X2RlYnVnKCJBdWRpbyBmaWxlIHNhdmVkIG9uIHRoZSBDaGFt ZWxpdW0gaW4gJXNcbiIsDQo+ID4gKwkJCSAgYXVkaW9fZmlsZS0+cGF0aCk7DQo+ID4gKwkJY2hh bWVsaXVtX2Rlc3Ryb3lfYXVkaW9fZmlsZShhdWRpb19maWxlKTsNCj4gPiArCX0NCj4gDQo+IEkg d291bGQgc3VnZ2VzdCB0byBvbmx5IGR1bXAgdGhpcyBmaWxlIG9uIGZhaWx1cmUsIG5vdCB3aGVu IGhhdmluZyBhDQo+IHN1Y2Nlc3MuDQoNCjEuIFdlIGNhbid0IGRlY2lkZSB0aGlzIGFmdGVyLXRo ZS1mYWN0OiB3ZSBjYW4gb25seSBkZWNpZGUgd2hldGhlciB3ZQ0KICAgZHVtcCBvciBub3QgYmVm b3JlIHN0YXJ0aW5nIHRoZSBjYXB0dXJlLg0KMi4gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBhdWRp byBkdW1wczogbG9jYWwgKG9uIHRoZSBEVVQsIHNlZSBkdW1wX2ZkKSANCiAgIGFuZCByZW1vdGUg KG9uIHRoZSBDaGFtZWxpdW0sIHNlZSB0aGUgbGFzdCBwYXJhbSBvZiANCiAgIGNoYW1lbGl1bV9z dGFydF9jYXB0dXJpbmdfYXVkaW8pLiBJZiB0aGUgZmlsZSBoYXMgYmVlbiBkdW1wZWQgb24gdGhl DQogICBDaGFtZWxpdW0sIGNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpbyB3aWxsIHJldHVy biB0aGUgYXVkaW8gZmlsZQ0KICAgZGV0YWlscy4gSXQncyBzb21ldGltZXMgdXNlZnVsIHRvIGVu YWJsZSBDaGFtZWxpdW0gZHVtcHMgZm9yDQogICBkZWJ1Z2dpbmcgcHVycG9zZXMuDQoNCj4gPiAr DQo+ID4gKwlhdWRpb19zaWduYWxfY2xlYW4oc2lnbmFsKTsNCj4gPiArCWZyZWUoc2lnbmFsKTsN Cj4gPiArDQo+ID4gKwljaGFtZWxpdW1fc3RyZWFtX2RlaW5pdChzdHJlYW0pOw0KPiA+ICsNCj4g PiArCWlndF9hc3NlcnQoc3RyZWFrID09IE1JTl9TVFJFQUspOw0KPiA+ICsJcmV0dXJuIHRydWU7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK3Rlc3RfZGlzcGxheV9hdWRp byhkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwNCj4gPiArCQkgICBj b25zdCBjaGFyICphdWRpb19kZXZpY2UpDQo+ID4gK3sNCj4gPiArCWJvb2wgcnVuID0gZmFsc2U7 DQo+ID4gKwlzdHJ1Y3QgYWxzYSAqYWxzYTsNCj4gPiArCWludCByZXQ7DQo+ID4gKwlpZ3Rfb3V0 cHV0X3QgKm91dHB1dDsNCj4gPiArCWlndF9wbGFuZV90ICpwcmltYXJ5Ow0KPiA+ICsJc3RydWN0 IGlndF9mYiBmYjsNCj4gPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsNCj4gPiArCWRybU1vZGVD b25uZWN0b3IgKmNvbm5lY3RvcjsNCj4gPiArCWludCBmYl9pZCwgaTsNCj4gPiArDQo+ID4gKwlp Z3RfcmVxdWlyZShhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzKCkpOw0KPiA+ICsNCj4gPiArCWFs c2EgPSBhbHNhX2luaXQoKTsNCj4gPiArCWlndF9hc3NlcnQoYWxzYSk7DQo+ID4gKw0KPiA+ICsJ cmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7DQo+ID4gKw0KPiA+ICsJLyogVXNlIHRoZSBkZWZhdWx0 IENoYW1lbGl1bSBFRElEIGZvciB0aGlzIHRlc3QsIGFzIHRoZSBiYXNlIElHVCBFRElEDQo+ID4g KwkgKiBkb2Vzbid0IGFkdmVydGlzZSBhdWRpbyBzdXBwb3J0IChzZWUgZHJtX2RldGVjdF9tb25p dG9yX2F1ZGlvIGluDQo+ID4gKwkgKiB0aGUga2VybmVsIHRyZWUpLiAqLw0KPiA+ICsJb3V0cHV0 ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCwgZmFsc2UpOw0KPiA+ICsJY29ubmVjdG9yID0g Y2hhbWVsaXVtX3BvcnRfZ2V0X2Nvbm5lY3RvcihkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNl KTsNCj4gPiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSk7DQo+ID4gKwlpZ3RfYXNzZXJ0KHByaW1hcnkpOw0KPiA+ICsN Cj4gPiArCWlndF9hc3NlcnQoY29ubmVjdG9yLT5jb3VudF9tb2RlcyA+IDApOw0KPiA+ICsJbW9k ZSA9ICZjb25uZWN0b3ItPm1vZGVzWzBdOw0KPiA+ICsNCj4gPiArCWZiX2lkID0gaWd0X2NyZWF0 ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwNCj4gPiArCQkJCQkgICAgbW9kZS0+aGRp c3BsYXksIG1vZGUtPnZkaXNwbGF5LA0KPiA+ICsJCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LA0KPiA+ICsJCQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLA0KPiA+ICsJCQkJCSAg ICAwLCAwLCAwLCAmZmIpOw0KPiA+ICsJaWd0X2Fzc2VydChmYl9pZCA+IDApOw0KPiA+ICsNCj4g PiArCS8qIEVuYWJsZSB0aGUgb3V0cHV0IGJlY2F1c2UgdGhlIHJlY2VpdmVyIHdvbid0IHRyeSB0 byByZWNlaXZlIGF1ZGlvIGlmDQo+ID4gKwkgKiBpdCBkb2Vzbid0IHJlY2VpdmUgdmlkZW8uICov DQo+IE1heWJlIG1vdmUgdGhlIGFib3ZlIGNvbW1lbnQgdG8gYWJvdmUgaWd0X2Fzc2VydChjb25u ZWN0b3ItPmNvdW50X21vZGVzID4gMCk7ID8NCg0KQWNrDQoNCj4gPiArCWVuYWJsZV9vdXRwdXQo ZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBzYW1wbGluZ19yYXRlc19jb3VudDsgaSsrKSB7DQo+ID4gKwkJcmV0ID0gYWxzYV9vcGVu X291dHB1dChhbHNhLCBhdWRpb19kZXZpY2UpOw0KPiA+ICsJCWlndF9hc3NlcnQocmV0ID49IDAp Ow0KPiA+ICsNCj4gPiArCQkvKiBUT0RPOiBwbGF5YmFjayBvbiBhbGwgOCBhdmFpbGFibGUgY2hh bm5lbHMgKi8NCj4gPiArCQlydW4gfD0gZG9fdGVzdF9kaXNwbGF5X2F1ZGlvKGRhdGEsIHBvcnQs IGFsc2EsDQo+ID4gKwkJCQkJICAgICBQTEFZQkFDS19DSEFOTkVMUywNCj4gPiArCQkJCQkgICAg IHNhbXBsaW5nX3JhdGVzW2ldKTsNCj4gPiArDQo+ID4gKwkJYWxzYV9jbG9zZV9vdXRwdXQoYWxz YSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogTWFrZSBzdXJlIHdlIHRlc3RlZCBhdCBsZWFz dCBvbmUgZnJlcXVlbmN5LiAqLw0KPiA+ICsJaWd0X2Fzc2VydChydW4pOw0KPiA+ICsNCj4gPiAr CWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZmIpOw0KPiA+ICsNCj4gPiArCWRybU1vZGVG cmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7DQo+ID4gKw0KPiA+ICsJZnJlZShhbHNhKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArDQo+ID4gIHN0YXRpYyB2b2lkIHNlbGVjdF90aWxlZF9tb2RpZmllcihp Z3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQzMl90IHdpZHRoLA0KPiA+ICAJCQkJICB1aW50MzJfdCBo ZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwNCj4gPiAgCQkJCSAgdWludDY0X3QgKm1vZGlmaWVyKQ0K PiA+IEBAIC0xMDM3LDcgKzEyOTgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfcGxhbmVz X3JhbmRvbShkYXRhX3QgKmRhdGEsDQo+ID4gIAlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsNCj4g PiAgDQo+ID4gIAkvKiBGaW5kIHRoZSBjb25uZWN0b3IgYW5kIHBpcGUuICovDQo+ID4gLQlvdXRw dXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0KTsNCj4gPiArCW91dHB1dCA9IHByZXBhcmVf b3V0cHV0KGRhdGEsIHBvcnQsIHRydWUpOw0KPiA+ICANCj4gPiAgCW1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7DQo+ID4gIA0KPiA+IEBAIC0xMzA4LDYgKzE1NjksOSBAQCBpZ3Rf bWFpbg0KPiA+ICANCj4gPiAgCQljb25uZWN0b3Jfc3VidGVzdCgiZHAtZnJhbWUtZHVtcCIsIERp c3BsYXlQb3J0KQ0KPiA+ICAJCQl0ZXN0X2Rpc3BsYXlfZnJhbWVfZHVtcCgmZGF0YSwgcG9ydCk7 DQo+ID4gKw0KPiA+ICsJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJkcC1hdWRpbyIsIERpc3BsYXlQb3J0 KQ0KPiA+ICsJCQl0ZXN0X2Rpc3BsYXlfYXVkaW8oJmRhdGEsIHBvcnQsICJIRE1JIik7DQo+ID4g IAl9DQo+ID4gIA0KPiA+ICAJaWd0X3N1YnRlc3RfZ3JvdXAgew0KPiA+IGRpZmYgLS1naXQgYS90 ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkDQo+ID4gaW5kZXggNTE2N2E2Y2Mu LjVkM2VlZDgyIDEwMDY0NA0KPiA+IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkDQo+ID4gKysrIGIv dGVzdHMvbWVzb24uYnVpbGQNCj4gPiBAQCAtMjM4LDIwICsyMzgsMTMgQEAgaWYgbGliZHJtX25v dXZlYXUuZm91bmQoKQ0KPiA+ICAJdGVzdF9kZXBzICs9IGxpYmRybV9ub3V2ZWF1DQo+ID4gIGVu ZGlmDQo+ID4gIA0KPiA+IC1pZiBfYnVpbGRfY2hhbWVsaXVtIGFuZCBjaGFtZWxpdW0uZm91bmQo KQ0KPiA+ICtpZiBjaGFtZWxpdW1fZm91bmQNCj4gPiAgCXRlc3RfcHJvZ3MgKz0gWw0KPiA+ICAJ CSdrbXNfY2hhbWVsaXVtJywNCj4gPiAgCV0NCj4gPiAgCXRlc3RfZGVwcyArPSBjaGFtZWxpdW0N Cj4gPiAgZW5kaWYNCj4gPiAgDQo+ID4gLWlmIF9idWlsZF9hdWRpbyBhbmQgYWxzYS5mb3VuZCgp IGFuZCBnc2wuZm91bmQoKQ0KPiA+IC0JdGVzdF9wcm9ncyArPSBbDQo+ID4gLQkJJ2F1ZGlvJywN Cj4gPiAtCV0NCj4gPiAtCXRlc3RfZGVwcyArPSBhbHNhDQo+ID4gLWVuZGlmDQo+ID4gLQ0KPiA+ ICB0ZXN0X2V4ZWN1dGFibGVzID0gW10NCj4gPiAgdGVzdF9saXN0ID0gW10NCj4gPiAgDQo+ID4g DQo+IA0KPiBXZWxsLi4uIHRoYXQgd2FzIGEgbW91dGhmdWwhIEZvciB0aGUgbmV4dCBwYXRjaGVz LCBwbGVhc2Ugc3BsaXQgc3R1ZmYNCj4gbW9yZSBhZ2dyZXNzaXZlbHksIGV2ZW4gd2hlbiBhIHBh dGNoIHdvdWxkIG9ubHkgYmUgaW50cm9kdWNpbmcgZGVhZCBjb2RlLg0KDQpZZXMsIEkgcHJvbWlz ZSBub3QgdG8gZG8gdGhpcyBhZ2Fpbi4gOlMNCg0KVGhhbmtzIGZvciB0aGUgcmV2aWV3IQ0KDQo+ IFdpdGggdGhlc2UgY2hhbmdlZDoNCj4gDQo+IFJldmlld2VkLWJ5OiBNYXJ0aW4gUGVyZXMgPG1h cnRpbi5wZXJlc0BsaW51eC5pbnRlbC5jb20+DQo+IA0KPiBNYXJ0aW4NCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0Cmln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==