From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 573F26CC7 for ; Tue, 4 Sep 2018 03:11:47 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Sep 2018 18:11:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,327,1531810800"; d="scan'208";a="70073161" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga007.jf.intel.com with ESMTP; 03 Sep 2018 18:11:45 -0700 Received: from fmsmsx152.amr.corp.intel.com (10.18.125.5) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 3 Sep 2018 18:11:45 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX152.amr.corp.intel.com (10.18.125.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 3 Sep 2018 18:11:44 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.226]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.16]) with mapi id 14.03.0319.002; Tue, 4 Sep 2018 09:11:42 +0800 From: "Yao, Lei A" To: "Ma, Liang J" , "Hunt, David" CC: "dev@dpdk.org" , "Nicolau, Radu" , "Burakov, Anatoly" , "Geary, John" Thread-Topic: [PATCH v6 1/4] lib/librte_power: traffic pattern aware power control Thread-Index: AQHUQTv6/+0cO6ByIEy2/mF65nXs/6TfVSYA Date: Tue, 4 Sep 2018 01:11:41 +0000 Message-ID: <2DBBFF226F7CF64BAFCA79B681719D953A53B4C1@shsmsx102.ccr.corp.intel.com> References: <1531238668-2214-1-git-send-email-radu.nicolau@intel.com> <1535727871-30168-1-git-send-email-liang.j.ma@intel.com> In-Reply-To: <1535727871-30168-1-git-send-email-liang.j.ma@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiODVkZjgzY2YtNjU4OC00YTQwLTkxNzAtZGQxNTM1MDM4OGFiIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiY3Z2NWxxVHREZVlXVSsraXpFRkY1NUdBTXVsYUo4Z0xWRWJRZktud1ROVVVxRWFlV1N3ZnRoOVwvYjFsanVuSkgifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v6 1/4] lib/librte_power: traffic pattern aware power control X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Sep 2018 01:11:48 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWEsIExpYW5nIEoNCj4g U2VudDogRnJpZGF5LCBBdWd1c3QgMzEsIDIwMTggMTE6MDQgUE0NCj4gVG86IEh1bnQsIERhdmlk IDxkYXZpZC5odW50QGludGVsLmNvbT4NCj4gQ2M6IGRldkBkcGRrLm9yZzsgWWFvLCBMZWkgQSA8 bGVpLmEueWFvQGludGVsLmNvbT47IE5pY29sYXUsIFJhZHUNCj4gPHJhZHUubmljb2xhdUBpbnRl bC5jb20+OyBCdXJha292LCBBbmF0b2x5IDxhbmF0b2x5LmJ1cmFrb3ZAaW50ZWwuY29tPjsNCj4g R2VhcnksIEpvaG4gPGpvaG4uZ2VhcnlAaW50ZWwuY29tPjsgTWEsIExpYW5nIEogPGxpYW5nLmou bWFAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjYgMS80XSBsaWIvbGlicnRlX3Bvd2Vy OiB0cmFmZmljIHBhdHRlcm4gYXdhcmUgcG93ZXIgY29udHJvbA0KPiANCj4gMS4gQWJzdHJhY3QN Cj4gDQo+IEZvciBwYWNrZXQgcHJvY2Vzc2luZyB3b3JrbG9hZHMgc3VjaCBhcyBEUERLIHBvbGxp bmcgaXMgY29udGludW91cy4NCj4gVGhpcyBtZWFucyBDUFUgY29yZXMgYWx3YXlzIHNob3cgMTAw JSBidXN5IGluZGVwZW5kZW50IG9mIGhvdyBtdWNoDQo+IHdvcmsNCj4gdGhvc2UgY29yZXMgYXJl IGRvaW5nLiBJdCBpcyBjcml0aWNhbCB0byBhY2N1cmF0ZWx5IGRldGVybWluZSBob3cgYnVzeQ0K PiBhIGNvcmUgaXMgaHVnZWx5IGltcG9ydGFudCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOg0K PiANCj4gICAgKiBObyBpbmRpY2F0aW9uIG9mIG92ZXJsb2FkIGNvbmRpdGlvbnMNCj4gDQo+ICAg ICogVXNlciBkbyBub3Qga25vdyBob3cgbXVjaCByZWFsIGxvYWQgaXMgb24gYSBzeXN0ZW0gbWVh bmluZyByZXN1bHRlZCBpbg0KPiAgICAgIHdhc3RlZCBlbmVyZ3kgYXMgbm8gcG93ZXIgbWFuYWdl bWVudCBpcyB1dGlsaXplZA0KPiANCj4gQ29tcGFyZWQgdG8gdGhlIG9yaWdpbmFsIGwzZndkLXBv d2VyIGRlc2lnbiwgaW5zdGVhZCBvZiBnb2luZyB0byBzbGVlcA0KPiBhZnRlciBkZXRlY3Rpbmcg YW4gZW1wdHkgcG9sbCwgdGhlIG5ldyBtZWNoYW5pc20ganVzdCBsb3dlcnMgdGhlIGNvcmUNCj4g ZnJlcXVlbmN5LiBBcyBhIHJlc3VsdCwgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN0b3AgcG9s bGluZyB0aGUgZGV2aWNlLA0KPiB3aGljaCBsZWFkcyB0byBpbXByb3ZlZCBoYW5kbGluZyBvZiBi dXJzdHMgb2YgdHJhZmZpYy4NCj4gDQo+IFdoZW4gdGhlIHN5c3RlbSBiZWNvbWUgYnVzeSwgdGhl IGVtcHR5IHBvbGwgbWVjaGFuaXNtIGNhbiBhbHNvIGluY3JlYXNlDQo+IHRoZSBjb3JlDQo+IGZy ZXF1ZW5jeSAoaW5jbHVkaW5nIHR1cmJvKSB0byBkbyBiZXN0IGVmZm9ydCBmb3IgaW50ZW5zaXZl IHRyYWZmaWMuIFRoaXMgZ2l2ZXMNCj4gdXMgbW9yZSBmbGV4aWJsZSBhbmQgYmFsYW5jZWQgdHJh ZmZpYyBhd2FyZW5lc3Mgb3ZlciB0aGUgc3RhbmRhcmQgbDNmd2QtDQo+IHBvd2VyDQo+IGFwcGxp Y2F0aW9uLg0KPiANCj4gMi4gUHJvcG9zZWQgc29sdXRpb24NCj4gDQo+IFRoZSBwcm9wb3NlZCBz b2x1dGlvbiBmb2N1c2VzIG9uIGhvdyBtYW55IHRpbWVzIGVtcHR5IHBvbGxzIGFyZSBleGVjdXRl ZC4NCj4gVGhlIGxlc3MNCj4gdGhlIG51bWJlciBvZiBlbXB0eSBwb2xscywgbWVhbnMgY3VycmVu dCBjb3JlIGlzIGJ1c3kgd2l0aCBwcm9jZXNzaW5nDQo+IHdvcmtsb2FkLA0KPiB0aGVyZWZvcmUs IHRoZSBoaWdoZXIgZnJlcXVlbmN5IGlzIG5lZWRlZC4gVGhlIGhpZ2ggZW1wdHkgcG9sbCBudW1i ZXINCj4gaW5kaWNhdGVzDQo+IHRoZSBjdXJyZW50IGNvcmUgbm90IGRvaW5nIGFueSByZWFsIHdv cmsgdGhlcmVmb3JlLCB3ZSBjYW4gbG93ZXIgdGhlDQo+IGZyZXF1ZW5jeQ0KPiB0byBzYWZlIHBv d2VyLg0KPiANCj4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGVhY2ggY29yZSBoYXMg MSBlbXB0eS1wb2xsIGNvdW50ZXIgd2hpY2gNCj4gYXNzdW1lDQo+IDEgY29yZSBpcyBkZWRpY2F0 ZWQgdG8gMSBxdWV1ZS4gVGhpcyB3aWxsIG5lZWQgdG8gYmUgZXhwYW5kZWQgaW4gdGhlIGZ1dHVy ZQ0KPiB0byBzdXBwb3J0IG11bHRpcGxlIHF1ZXVlcyBwZXIgY29yZS4NCj4gDQo+IDIuMSBQb3dl ciBzdGF0ZSBkZWZpbml0aW9uOg0KPiANCj4gCUxPVzogIE5vdCBjdXJyZW50bHkgdXNlZCwgcmVz ZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuDQo+IA0KPiAJTUVEOiAgdGhlIGZyZXF1ZW5jeSBpcyB1c2Vk IHRvIHByb2Nlc3MgbW9kZXN0IHRyYWZmaWMgd29ya2xvYWQuDQo+IA0KPiAJSElHSDogdGhlIGZy ZXF1ZW5jeSBpcyB1c2VkIHRvIHByb2Nlc3MgYnVzeSB0cmFmZmljIHdvcmtsb2FkLg0KPiANCj4g Mi4yIFRoZXJlIGFyZSB0d28gcGhhc2VzIHRvIGVzdGFibGlzaCB0aGUgcG93ZXIgbWFuYWdlbWVu dCBzeXN0ZW06DQo+IA0KPiAJYS5Jbml0aWFsaXphdGlvbi9UcmFpbmluZyBwaGFzZS4gVGhlIHRy YWluaW5nIHBoYXNlIGlzIG5lY2Vzc2FyeQ0KPiAJICBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHRo ZSBzeXN0ZW0gcG9sbGluZyBiYXNlbGluZSBudW1iZXJzIGZyb20NCj4gCSAgaWRsZSB0byBidXN5 LiBUaGUgaGlnaGVzdCBwb2xsIGNvdW50IHdpbGwgYmUgZHVyaW5nIGlkbGUsIHdoZXJlIGFsbA0K PiAJICBwb2xscyBhcmUgZW1wdHkuIFRoZXNlIHBvbGwgY291bnRzIHdpbGwgYmUgZGlmZmVyZW50 IGJldHdlZW4NCj4gCSAgc3lzdGVtcyBkdWUgdG8gdGhlIG1hbnkgcG9zc2libGUgcHJvY2Vzc29y IG1pY3JvLWFyY2gsIGNhY2hlDQo+IAkgIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbnMsIGhlbmNl IHRoZSB0cmFpbmluZyBwaGFzZS4NCj4gICAJICBJbiB0aGUgdHJhaW5pbmcgcGhhc2UsIHRyYWZm aWMgaXMgYmxvY2tlZCBzbyB0aGUgdHJhaW5pbmcgYWxnb3JpdGhtDQo+ICAgCSAgY2FuIGF2ZXJh Z2UgdGhlIGVtcHR5LXBvbGwgbnVtYmVycyBmb3IgdGhlIExPVywgTUVEIGFuZA0KPiAgCSAgSElH SCAgcG93ZXIgc3RhdGVzIGluIG9yZGVyIHRvIGNyZWF0ZSBhIGJhc2VsaW5lLg0KPiAgIAkgIFRo ZSBjb3JlJ3MgY291bnRlciBhcmUgY29sbGVjdGVkIGV2ZXJ5IDEwbXMsIGFuZCB0aGUgVHJhaW5p bmcNCj4gIAkgICBwaGFzZSB3aWxsIHRha2UgMiBzZWNvbmRzLg0KPiANCj4gCWIuTm9ybWFsIHBo YXNlLiBXaGVuIHRoZSB0cmFpbmluZyBwaGFzZSBpcyBjb21wbGV0ZSwgdHJhZmZpYyBpcw0KPiAg IAkgIHN0YXJ0ZWQuIFRoZSBydW4tdGltZSBwb2xsIGNvdW50cyBhcmUgY29tcGFyZWQgd2l0aCB0 aGUNCj4gCSAgYmFzZWxpbmUgYW5kIHRoZSBkZWNpc2lvbiB3aWxsIGJlIHRha2VuIHRvIG1vdmUg dG8gTUVEIHBvd2VyDQo+ICAgCSAgc3RhdGUgb3IgSElHSCBwb3dlciBzdGF0ZS4gVGhlIGNvdW50 ZXJzIGFyZSBjYWxjdWxhdGVkIGV2ZXJ5IDEwbXMuDQo+IA0KPiAzLiBQcm9wb3NlZCAgQVBJDQo+ IA0KPiAxLiAgcnRlX3Bvd2VyX2VtcHR5X3BvbGxfc3RhdF9pbml0KHZvaWQpOw0KPiB3aGljaCBp cyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3lzdGVtLg0KPiANCj4g Mi4gIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfZnJlZSh2b2lkKTsNCj4gd2hpY2ggaXMgdXNl ZCB0byBmcmVlIHRoZSByZXNvdXJjZSBob2xkIGJ5IHBvd2VyIG1hbmFnZW1lbnQgc3lzdGVtLg0K PiANCj4gMy4gIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfdXBkYXRlKHVuc2lnbmVkIGludCBs Y29yZV9pZCk7DQo+IHdoaWNoIGlzIHVzZWQgdG8gdXBkYXRlIHNwZWNpZmljIGNvcmUgZW1wdHkg cG9sbCBjb3VudGVyLCBub3QgdGhyZWFkIHNhZmUNCj4gDQo+IDQuICBydGVfcG93ZXJfcG9sbF9z dGF0X3VwZGF0ZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQsIHVpbnQ4X3QgbmJfcGt0KTsNCj4gd2hp Y2ggaXMgdXNlZCB0byB1cGRhdGUgc3BlY2lmaWMgY29yZSB2YWxpZCBwb2xsIGNvdW50ZXIsIG5v dCB0aHJlYWQgc2FmZQ0KPiANCj4gNS4gIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfZmV0Y2go dW5zaWduZWQgaW50IGxjb3JlX2lkKTsNCj4gd2hpY2ggaXMgdXNlZCB0byBnZXQgc3BlY2lmaWMg Y29yZSBlbXB0eSBwb2xsIGNvdW50ZXIuDQo+IA0KPiA2LiAgcnRlX3Bvd2VyX3BvbGxfc3RhdF9m ZXRjaCh1bnNpZ25lZCBpbnQgbGNvcmVfaWQpOw0KPiB3aGljaCBpcyB1c2VkIHRvIGdldCBzcGVj aWZpYyBjb3JlIHZhbGlkIHBvbGwgY291bnRlci4NCj4gDQo+IDcuICBydGVfZW1wdHlfcG9sbF9k ZXRlY3Rpb24odm9pZCk7DQo+IHdoaWNoIGlzIHVzZWQgdG8gZGV0ZWN0IGVtcHR5IHBvbGwgc3Rh dGUgY2hhbmdlcy4NCj4gDQo+IENoYW5nZUxvZzoNCj4gdjI6IGZpeCBzb21lIGNvZGluZyBzdHls ZSBpc3N1ZXMNCj4gdjM6IHJlbmFtZSB0aGUgZmlsZW5hbWUsIEFQSSBuYW1lLg0KPiB2NDogbm8g Y2hhbmdlDQo+IHY1OiBubyBjaGFuZ2UNCj4gdjY6IHJlLXdvcmsgdGhlIGNvZGUgbGF5b3V0LCB1 cGRhdGUgQVBJDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBMaWFuZyBNYSA8bGlhbmcuai5tYUBpbnRl bC5jb20+DQo+IC0tLQ0KPiAgbGliL2xpYnJ0ZV9wb3dlci9NYWtlZmlsZSAgICAgICAgICAgICAg IHwgICA2ICstDQo+ICBsaWIvbGlicnRlX3Bvd2VyL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAg IDUgKy0NCj4gIGxpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuYyB8IDUwMA0K PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgbGliL2xpYnJ0ZV9wb3dlci9y dGVfcG93ZXJfZW1wdHlfcG9sbC5oIHwgMjA1ICsrKysrKysrKysrKysNCj4gIGxpYi9saWJydGVf cG93ZXIvcnRlX3Bvd2VyX3ZlcnNpb24ubWFwICB8ICAxMyArDQo+ICA1IGZpbGVzIGNoYW5nZWQs IDcyNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuYw0KPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuaA0KPiANCj4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfcG93ZXIvTWFrZWZpbGUgYi9saWIvbGlicnRlX3Bvd2VyL01h a2VmaWxlDQo+IGluZGV4IDZmODVlODguLmE4ZjEzMDEgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJy dGVfcG93ZXIvTWFrZWZpbGUNCj4gKysrIGIvbGliL2xpYnJ0ZV9wb3dlci9NYWtlZmlsZQ0KPiBA QCAtNiw4ICs2LDkgQEAgaW5jbHVkZSAkKFJURV9TREspL21rL3J0ZS52YXJzLm1rDQo+ICAjIGxp YnJhcnkgbmFtZQ0KPiAgTElCID0gbGlicnRlX3Bvd2VyLmENCj4gDQo+ICtDRkxBR1MgKz0gLURB TExPV19FWFBFUklNRU5UQUxfQVBJDQo+ICBDRkxBR1MgKz0gJChXRVJST1JfRkxBR1MpIC1JJChT UkNESVIpIC1PMyAtZm5vLXN0cmljdC1hbGlhc2luZw0KPiAtTERMSUJTICs9IC1scnRlX2VhbA0K PiArTERMSUJTICs9IC1scnRlX2VhbCAtbHJ0ZV90aW1lcg0KPiANCj4gIEVYUE9SVF9NQVAgOj0g cnRlX3Bvd2VyX3ZlcnNpb24ubWFwDQo+IA0KPiBAQCAtMTYsOCArMTcsOSBAQCBMSUJBQklWRVIg Oj0gMQ0KPiAgIyBhbGwgc291cmNlIGFyZSBzdG9yZWQgaW4gU1JDUy15DQo+ICBTUkNTLSQoQ09O RklHX1JURV9MSUJSVEVfUE9XRVIpIDo9IHJ0ZV9wb3dlci5jDQo+IHBvd2VyX2FjcGlfY3B1ZnJl cS5jDQo+ICBTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfUE9XRVIpICs9IHBvd2VyX2t2bV92bS5j DQo+IGd1ZXN0X2NoYW5uZWwuYw0KPiArU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX1BPV0VSKSAr PSBydGVfcG93ZXJfZW1wdHlfcG9sbC5jDQo+IA0KPiAgIyBpbnN0YWxsIHRoaXMgaGVhZGVyIGZp bGUNCj4gLVNZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9QT1dFUiktaW5jbHVkZSA6PSBydGVf cG93ZXIuaA0KPiArU1lNTElOSy0kKENPTkZJR19SVEVfTElCUlRFX1BPV0VSKS1pbmNsdWRlIDo9 IHJ0ZV9wb3dlci5oDQo+IHJ0ZV9wb3dlcl9lbXB0eV9wb2xsLmgNCj4gDQo+ICBpbmNsdWRlICQo UlRFX1NESykvbWsvcnRlLmxpYi5taw0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9wb3dlci9t ZXNvbi5idWlsZCBiL2xpYi9saWJydGVfcG93ZXIvbWVzb24uYnVpbGQNCj4gaW5kZXggMjUzMTcz Zi4uNjM5NTdlYiAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9wb3dlci9tZXNvbi5idWlsZA0K PiArKysgYi9saWIvbGlicnRlX3Bvd2VyL21lc29uLmJ1aWxkDQo+IEBAIC01LDUgKzUsNiBAQCBp ZiBob3N0X21hY2hpbmUuc3lzdGVtKCkgIT0gJ2xpbnV4Jw0KPiAgCWJ1aWxkID0gZmFsc2UNCj4g IGVuZGlmDQo+ICBzb3VyY2VzID0gZmlsZXMoJ3J0ZV9wb3dlci5jJywgJ3Bvd2VyX2FjcGlfY3B1 ZnJlcS5jJywNCj4gLQkJJ3Bvd2VyX2t2bV92bS5jJywgJ2d1ZXN0X2NoYW5uZWwuYycpDQo+IC1o ZWFkZXJzID0gZmlsZXMoJ3J0ZV9wb3dlci5oJykNCj4gKwkJJ3Bvd2VyX2t2bV92bS5jJywgJ2d1 ZXN0X2NoYW5uZWwuYycsDQo+ICsJCSdydGVfcG93ZXJfZW1wdHlfcG9sbC5jJykNCj4gK2hlYWRl cnMgPSBmaWxlcygncnRlX3Bvd2VyLmgnLCdydGVfcG93ZXJfZW1wdHlfcG9sbC5oJykNCj4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuYw0KPiBiL2xp Yi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwLi4zZGFjNjU0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv bGliL2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfZW1wdHlfcG9sbC5jDQo+IEBAIC0wLDAgKzEsNTAw IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBD b3B5cmlnaHQoYykgMjAxMC0yMDE4IEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiAr I2luY2x1ZGUgPHN0cmluZy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ICsj aW5jbHVkZSA8cnRlX2N5Y2xlcy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gKyNp bmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJydGVfcG93ZXIuaCINCj4g KyNpbmNsdWRlICJydGVfcG93ZXJfZW1wdHlfcG9sbC5oIg0KPiArDQo+ICsjZGVmaW5lIElOVEVS VkFMU19QRVJfU0VDT05EIDEwMCAgICAgLyogKDEwbXMpICovDQo+ICsjZGVmaW5lIFNFQ09ORFNf VE9fVFJBSU5fRk9SIDINCj4gKyNkZWZpbmUgREVGQVVMVF9NRURfVE9fSElHSF9QRVJDRU5UX1RI UkVTSE9MRCA3MA0KPiArI2RlZmluZSBERUZBVUxUX0hJR0hfVE9fTUVEX1BFUkNFTlRfVEhSRVNI T0xEIDMwDQo+ICsjZGVmaW5lIERFRkFVTFRfQ1lDTEVTX1BFUl9QQUNLRVQgODAwDQo+ICsNCj4g K3N0YXRpYyBzdHJ1Y3QgZXBfcGFyYW1zICplcF9wYXJhbXM7DQo+ICtzdGF0aWMgdWludDMyX3Qg bWVkX3RvX2hpZ2hfdGhyZXNob2xkID0NCj4gREVGQVVMVF9NRURfVE9fSElHSF9QRVJDRU5UX1RI UkVTSE9MRDsNCj4gK3N0YXRpYyB1aW50MzJfdCBoaWdoX3RvX21lZF90aHJlc2hvbGQgPQ0KPiBE RUZBVUxUX0hJR0hfVE9fTUVEX1BFUkNFTlRfVEhSRVNIT0xEOw0KPiArDQo+ICtzdGF0aWMgdWlu dDMyX3QgYXZhaWxfZnJlcXNbUlRFX01BWF9MQ09SRV1bTlVNX0ZSRVFTXTsNCj4gKw0KPiArc3Rh dGljIHVpbnQzMl90IHRvdGFsX2F2YWlsX2ZyZXFzW1JURV9NQVhfTENPUkVdOw0KPiArDQo+ICtz dGF0aWMgdWludDMyX3QgZnJlcV9pbmRleFtOVU1fRlJFUV07DQo+ICsNCj4gK3N0YXRpYyB1aW50 MzJfdA0KPiArZ2V0X2ZyZXFfaW5kZXgoZW51bSBmcmVxX3ZhbCBpbmRleCkNCj4gK3sNCj4gKwly ZXR1cm4gZnJlcV9pbmRleFtpbmRleF07DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIGludA0K PiArc2V0X3Bvd2VyX2ZyZXEoaW50IGxjb3JlX2lkLCBlbnVtIGZyZXFfdmFsIGZyZXEsIGJvb2wg c3BlY2lmaWNfZnJlcSkNCj4gK3sNCj4gKwlpbnQgZXJyID0gMDsNCj4gKwl1aW50MzJfdCBwb3dl cl9mcmVxX2luZGV4Ow0KPiArCWlmICghc3BlY2lmaWNfZnJlcSkNCj4gKwkJcG93ZXJfZnJlcV9p bmRleCA9IGdldF9mcmVxX2luZGV4KGZyZXEpOw0KPiArCWVsc2UNCj4gKwkJcG93ZXJfZnJlcV9p bmRleCA9IGZyZXE7DQo+ICsNCj4gKwllcnIgPSBydGVfcG93ZXJfc2V0X2ZyZXEobGNvcmVfaWQs IHBvd2VyX2ZyZXFfaW5kZXgpOw0KPiArDQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ ICtleGl0X3RyYWluaW5nX3N0YXRlKHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3RhdHMp DQo+ICt7DQo+ICsJUlRFX1NFVF9VU0VEKHBvbGxfc3RhdHMpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ICtlbnRlcl90 cmFpbmluZ19zdGF0ZShzdHJ1Y3QgcHJpb3JpdHlfd29ya2VyICpwb2xsX3N0YXRzKQ0KPiArew0K PiArCXBvbGxfc3RhdHMtPml0ZXJfY291bnRlciA9IDA7DQo+ICsJcG9sbF9zdGF0cy0+Y3VyX2Zy ZXEgPSBMT1c7DQo+ICsJcG9sbF9zdGF0cy0+cXVldWVfc3RhdGUgPSBUUkFJTklORzsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUp KQ0KPiArZW50ZXJfbm9ybWFsX3N0YXRlKHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3Rh dHMpDQo+ICt7DQo+ICsJLyogQ2xlYXIgdGhlIGF2ZXJhZ2VzIGFycmF5cyBhbmQgc3RycyAqLw0K PiArCW1lbXNldChwb2xsX3N0YXRzLT5lZHBpX2F2LCAwLCBzaXplb2YocG9sbF9zdGF0cy0+ZWRw aV9hdikpOw0KPiArCXBvbGxfc3RhdHMtPmVjID0gMDsNCj4gKwltZW1zZXQocG9sbF9zdGF0cy0+ cHBpX2F2LCAwLCBzaXplb2YocG9sbF9zdGF0cy0+cHBpX2F2KSk7DQo+ICsJcG9sbF9zdGF0cy0+ cGMgPSAwOw0KPiArDQo+ICsJcG9sbF9zdGF0cy0+Y3VyX2ZyZXEgPSBNRUQ7DQo+ICsJcG9sbF9z dGF0cy0+aXRlcl9jb3VudGVyID0gMDsNCj4gKwlwb2xsX3N0YXRzLT50aHJlc2hvbGRfY3RyID0g MDsNCj4gKwlwb2xsX3N0YXRzLT5xdWV1ZV9zdGF0ZSA9IE1FRF9OT1JNQUw7DQo+ICsJc2V0X3Bv d2VyX2ZyZXEocG9sbF9zdGF0cy0+bGNvcmVfaWQsIE1FRCwgZmFsc2UpOw0KPiArDQo+ICsJLyog VHJ5IGhlcmUgKi8NCj4gKwlwb2xsX3N0YXRzLT50aHJlc2hbTUVEXS50aHJlc2hvbGRfcGVyY2Vu dCA9DQo+IG1lZF90b19oaWdoX3RocmVzaG9sZDsNCj4gKwlwb2xsX3N0YXRzLT50aHJlc2hbSEdI XS50aHJlc2hvbGRfcGVyY2VudCA9DQo+IGhpZ2hfdG9fbWVkX3RocmVzaG9sZDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQ0K PiArZW50ZXJfYnVzeV9zdGF0ZShzdHJ1Y3QgcHJpb3JpdHlfd29ya2VyICpwb2xsX3N0YXRzKQ0K PiArew0KPiArCW1lbXNldChwb2xsX3N0YXRzLT5lZHBpX2F2LCAwLCBzaXplb2YocG9sbF9zdGF0 cy0+ZWRwaV9hdikpOw0KPiArCXBvbGxfc3RhdHMtPmVjID0gMDsNCj4gKwltZW1zZXQocG9sbF9z dGF0cy0+cHBpX2F2LCAwLCBzaXplb2YocG9sbF9zdGF0cy0+cHBpX2F2KSk7DQo+ICsJcG9sbF9z dGF0cy0+cGMgPSAwOw0KPiArDQo+ICsJcG9sbF9zdGF0cy0+Y3VyX2ZyZXEgPSBIR0g7DQo+ICsJ cG9sbF9zdGF0cy0+aXRlcl9jb3VudGVyID0gMDsNCj4gKwlwb2xsX3N0YXRzLT50aHJlc2hvbGRf Y3RyID0gMDsNCj4gKwlwb2xsX3N0YXRzLT5xdWV1ZV9zdGF0ZSA9IEhHSF9CVVNZOw0KPiArCXNl dF9wb3dlcl9mcmVxKHBvbGxfc3RhdHMtPmxjb3JlX2lkLCBIR0gsIGZhbHNlKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQ0K PiArZW50ZXJfcHVyZ2Vfc3RhdGUoc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cykN Cj4gK3sNCj4gKwlwb2xsX3N0YXRzLT5pdGVyX2NvdW50ZXIgPSAwOw0KPiArCXBvbGxfc3RhdHMt PnF1ZXVlX3N0YXRlID0gTE9XX1BVUkdFOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZv aWQgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ICtzZXRfc3RhdGUoc3RydWN0IHBy aW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0cywNCj4gKwkJZW51bSBxdWV1ZV9zdGF0ZSBuZXdfc3Rh dGUpDQo+ICt7DQo+ICsJZW51bSBxdWV1ZV9zdGF0ZSBvbGRfc3RhdGUgPSBwb2xsX3N0YXRzLT5x dWV1ZV9zdGF0ZTsNCj4gKwlpZiAob2xkX3N0YXRlICE9IG5ld19zdGF0ZSkgew0KPiArDQo+ICsJ CS8qIENhbGwgYW55IG9sZCBzdGF0ZSBleGl0IGZ1bmN0aW9ucyAqLw0KPiArCQlpZiAob2xkX3N0 YXRlID09IFRSQUlOSU5HKQ0KPiArCQkJZXhpdF90cmFpbmluZ19zdGF0ZShwb2xsX3N0YXRzKTsN Cj4gKw0KPiArCQkvKiBDYWxsIGFueSBuZXcgc3RhdGUgZW50cnkgZnVuY3Rpb25zICovDQo+ICsJ CWlmIChuZXdfc3RhdGUgPT0gVFJBSU5JTkcpDQo+ICsJCQllbnRlcl90cmFpbmluZ19zdGF0ZShw b2xsX3N0YXRzKTsNCj4gKwkJaWYgKG5ld19zdGF0ZSA9PSBNRURfTk9STUFMKQ0KPiArCQkJZW50 ZXJfbm9ybWFsX3N0YXRlKHBvbGxfc3RhdHMpOw0KPiArCQlpZiAobmV3X3N0YXRlID09IEhHSF9C VVNZKQ0KPiArCQkJZW50ZXJfYnVzeV9zdGF0ZShwb2xsX3N0YXRzKTsNCj4gKwkJaWYgKG5ld19z dGF0ZSA9PSBMT1dfUFVSR0UpDQo+ICsJCQllbnRlcl9wdXJnZV9zdGF0ZShwb2xsX3N0YXRzKTsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3VwZGF0ZV90cmFpbmlu Z19zdGF0cyhzdHJ1Y3QgcHJpb3JpdHlfd29ya2VyICpwb2xsX3N0YXRzLA0KPiArCQl1aW50MzJf dCBmcmVxLA0KPiArCQlib29sIHNwZWNpZmljX2ZyZXEsDQo+ICsJCXVpbnQzMl90IG1heF90cmFp bl9pdGVyKQ0KPiArew0KPiArCVJURV9TRVRfVVNFRChzcGVjaWZpY19mcmVxKTsNCj4gKw0KPiAr CWNoYXIgcGZpX3N0clszMl07DQo+ICsJdWludDY0X3QgcDBfZW1wdHlfZGVxOw0KPiArDQo+ICsJ c3ByaW50ZihwZmlfc3RyLCAiJTAyZCIsIGZyZXEpOw0KPiArDQo+ICsJaWYgKHBvbGxfc3RhdHMt PmN1cl9mcmVxID09IGZyZXEgJiYNCj4gKwkJCXBvbGxfc3RhdHMtPnRocmVzaFtmcmVxXS50cmFp bmVkID09IGZhbHNlKSB7DQo+ICsJCWlmIChwb2xsX3N0YXRzLT50aHJlc2hbZnJlcV0uY3VyX3Ry YWluX2l0ZXIgPT0gMCkgew0KPiArDQo+ICsJCQlzZXRfcG93ZXJfZnJlcShwb2xsX3N0YXRzLT5s Y29yZV9pZCwNCj4gKwkJCQkJZnJlcSwgc3BlY2lmaWNfZnJlcSk7DQo+ICsNCj4gKwkJCXBvbGxf c3RhdHMtPmVtcHR5X2RlcXVldWVzX3ByZXYgPQ0KPiArCQkJCXBvbGxfc3RhdHMtPmVtcHR5X2Rl cXVldWVzOw0KPiArDQo+ICsJCQlwb2xsX3N0YXRzLT50aHJlc2hbZnJlcV0uY3VyX3RyYWluX2l0 ZXIrKzsNCj4gKw0KPiArCQkJcmV0dXJuOw0KPiArCQl9IGVsc2UgaWYgKHBvbGxfc3RhdHMtPnRo cmVzaFtmcmVxXS5jdXJfdHJhaW5faXRlcg0KPiArCQkJCTw9IG1heF90cmFpbl9pdGVyKSB7DQo+ ICsNCj4gKwkJCXAwX2VtcHR5X2RlcSA9IHBvbGxfc3RhdHMtPmVtcHR5X2RlcXVldWVzIC0NCj4g KwkJCQlwb2xsX3N0YXRzLT5lbXB0eV9kZXF1ZXVlc19wcmV2Ow0KPiArDQo+ICsJCQlwb2xsX3N0 YXRzLT5lbXB0eV9kZXF1ZXVlc19wcmV2ID0NCj4gKwkJCQlwb2xsX3N0YXRzLT5lbXB0eV9kZXF1 ZXVlczsNCj4gKw0KPiArCQkJcG9sbF9zdGF0cy0+dGhyZXNoW2ZyZXFdLmJhc2VfZWRwaSArPQ0K PiBwMF9lbXB0eV9kZXE7DQo+ICsJCQlwb2xsX3N0YXRzLT50aHJlc2hbZnJlcV0uY3VyX3RyYWlu X2l0ZXIrKzsNCj4gKw0KPiArCQl9IGVsc2Ugew0KPiArCQkJaWYgKHBvbGxfc3RhdHMtPnRocmVz aFtmcmVxXS50cmFpbmVkID09IGZhbHNlKSB7DQo+ICsJCQkJcG9sbF9zdGF0cy0+dGhyZXNoW2Zy ZXFdLmJhc2VfZWRwaSA9DQo+ICsJCQkJCXBvbGxfc3RhdHMtPnRocmVzaFtmcmVxXS5iYXNlX2Vk cGkgLw0KPiArCQkJCQltYXhfdHJhaW5faXRlcjsNCj4gKw0KPiArCQkJCS8qIEFkZCBvbiBhIGZh Y3RvciBvZiAwLjA1JSwgdGhpcyBzaG91bGQNCj4gcmVtb3ZlIGFueSAqLw0KPiArCQkJCS8qIGZh bHNlIG5lZ2F0aXZlcyB3aGVuIHRoZSBzeXN0ZW0gaXMgMCUNCj4gYnVzeSAqLw0KPiArCQkJCXBv bGxfc3RhdHMtPnRocmVzaFtmcmVxXS5iYXNlX2VkcGkgKz0NCj4gKwkJCQkJcG9sbF9zdGF0cy0+ dGhyZXNoW2ZyZXFdLmJhc2VfZWRwaSAvDQo+IDIwMDA7DQo+ICsNCj4gKwkJCQlwb2xsX3N0YXRz LT50aHJlc2hbZnJlcV0udHJhaW5lZCA9IHRydWU7DQo+ICsJCQkJcG9sbF9zdGF0cy0+Y3VyX2Zy ZXErKzsNCj4gKw0KPiArCQkJfQ0KPiArCQl9DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQ0KPiArdXBkYXRl X3N0YXRzKHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3RhdHMpDQo+ICt7DQo+ICsJdWlu dDY0X3QgdG90X2VkcGkgPSAwLCB0b3RfcHBpID0gMDsNCj4gKwl1aW50MzJfdCBqLCBwZXJjZW50 Ow0KPiArDQo+ICsJc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcyA9IHBvbGxfc3RhdHM7DQo+ICsN Cj4gKwl1aW50NjRfdCBjdXJfZWRwaSA9IHMtPmVtcHR5X2RlcXVldWVzIC0gcy0NCj4gPmVtcHR5 X2RlcXVldWVzX3ByZXY7DQo+ICsNCj4gKwlzLT5lbXB0eV9kZXF1ZXVlc19wcmV2ID0gcy0+ZW1w dHlfZGVxdWV1ZXM7DQo+ICsNCj4gKwl1aW50NjRfdCBwcGkgPSBzLT5udW1fZGVxdWV1ZV9wa3Rz IC0gcy0NCj4gPm51bV9kZXF1ZXVlX3BrdHNfcHJldjsNCj4gKw0KPiArCXMtPm51bV9kZXF1ZXVl X3BrdHNfcHJldiA9IHMtPm51bV9kZXF1ZXVlX3BrdHM7DQo+ICsNCj4gKwlpZiAocy0+dGhyZXNo W3MtPmN1cl9mcmVxXS5iYXNlX2VkcGkgPCBjdXJfZWRwaSkgew0KPiArCQlSVEVfTE9HKERFQlVH LCBQT1dFUiwgImN1cl9lZHBpIGlzIHRvbyBsYXJnZSAiDQo+ICsJCQkJImN1ciBlZHBpICVsZCAi DQo+ICsJCQkJImJhc2UgZXBkaSAlbGRcbiIsDQo+ICsJCQkJY3VyX2VkcGksDQo+ICsJCQkJcy0+ dGhyZXNoW3MtPmN1cl9mcmVxXS5iYXNlX2VkcGkpOw0KPiArCQkvKiBWYWx1ZSB0byBtYWtlIHVz IGZhaWwgbmVlZCBkZWJ1ZyBsb2cqLw0KPiArCQlyZXR1cm4gMTAwMFVMOw0KPiArCX0NCj4gKw0K PiArCXMtPmVkcGlfYXZbcy0+ZWMrKyAlIEJJTlNfQVZdID0gY3VyX2VkcGk7DQo+ICsJcy0+cHBp X2F2W3MtPnBjKysgJSBCSU5TX0FWXSA9IHBwaTsNCj4gKw0KPiArCWZvciAoaiA9IDA7IGogPCBC SU5TX0FWOyBqKyspIHsNCj4gKwkJdG90X2VkcGkgKz0gcy0+ZWRwaV9hdltqXTsNCj4gKwkJdG90 X3BwaSArPSBzLT5wcGlfYXZbal07DQo+ICsJfQ0KPiArDQo+ICsJdG90X2VkcGkgPSB0b3RfZWRw aSAvIEJJTlNfQVY7DQo+ICsNCj4gKwlwZXJjZW50ID0gMTAwIC0gKHVpbnQzMl90KSgoKGZsb2F0 KXRvdF9lZHBpIC8NCj4gKwkJCShmbG9hdClzLT50aHJlc2hbcy0+Y3VyX2ZyZXFdLmJhc2VfZWRw aSkgKiAxMDApOw0KPiArDQo+ICsJcmV0dXJuICh1aW50MzJfdClwZXJjZW50Ow0KPiArfQ0KPiAr DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu ZSkpDQo+ICt1cGRhdGVfc3RhdHNfbm9ybWFsKHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxf c3RhdHMpDQo+ICt7DQo+ICsJdWludDMyX3QgcGVyY2VudDsNCj4gKw0KPiArCWlmIChwb2xsX3N0 YXRzLT50aHJlc2hbcG9sbF9zdGF0cy0+Y3VyX2ZyZXFdLmJhc2VfZWRwaSA9PSAwKQ0KPiArCQly ZXR1cm47DQo+ICsNCj4gKwlwZXJjZW50ID0gdXBkYXRlX3N0YXRzKHBvbGxfc3RhdHMpOw0KPiAr DQo+ICsJaWYgKHBlcmNlbnQgPiAxMDApDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmIChwb2xs X3N0YXRzLT5jdXJfZnJlcSA9PSBMT1cpDQo+ICsJCVJURV9MT0coSU5GTywgUE9XRVIsICJQdXJn ZSBNb2RlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOw0KPiArCWVsc2UgaWYgKHBvbGxfc3RhdHMtPmN1 cl9mcmVxID09IE1FRCkgew0KPiArDQo+ICsJCWlmIChwZXJjZW50ID4NCj4gKwkJCXBvbGxfc3Rh dHMtPnRocmVzaFtNRURdLnRocmVzaG9sZF9wZXJjZW50KSB7DQo+ICsNCj4gKwkJCWlmIChwb2xs X3N0YXRzLT50aHJlc2hvbGRfY3RyIDwNCj4gSU5URVJWQUxTX1BFUl9TRUNPTkQpDQo+ICsJCQkJ cG9sbF9zdGF0cy0+dGhyZXNob2xkX2N0cisrOw0KPiArCQkJZWxzZSB7DQo+ICsJCQkJc2V0X3N0 YXRlKHBvbGxfc3RhdHMsIEhHSF9CVVNZKTsNCj4gKwkJCQlSVEVfTE9HKElORk8sIFBPV0VSLCAi TU9WRSB0byBIR0hcbiIpOw0KPiArCQkJfQ0KPiArDQo+ICsJCX0gZWxzZSB7DQo+ICsJCQkvKiBy ZXNldCAqLw0KPiArCQkJLyogbmVlZCBkZWJ1ZyBsb2cgKi8NCj4gKwkJCXBvbGxfc3RhdHMtPnRo cmVzaG9sZF9jdHIgPSAwOw0KPiArCQl9DQo+ICsNCj4gKwl9IGVsc2UgaWYgKHBvbGxfc3RhdHMt PmN1cl9mcmVxID09IEhHSCkgew0KPiArDQo+ICsJCWlmIChwZXJjZW50IDwNCj4gKwkJCQlwb2xs X3N0YXRzLT50aHJlc2hbSEdIXS50aHJlc2hvbGRfcGVyY2VudCkNCj4gew0KPiArDQo+ICsJCQlp ZiAocG9sbF9zdGF0cy0+dGhyZXNob2xkX2N0ciA8DQo+IElOVEVSVkFMU19QRVJfU0VDT05EKQ0K PiArCQkJCXBvbGxfc3RhdHMtPnRocmVzaG9sZF9jdHIrKzsNCj4gKwkJCWVsc2UNCj4gKwkJCQlz ZXRfc3RhdGUocG9sbF9zdGF0cywgTUVEX05PUk1BTCk7DQpTdWdnZXN0IGFkZCBsb2cgd2hlbiBz dGF0dXMgY2hhbmdlIGZyb20gSGlnaCB0byBNRUQgaGVyZSBhbHNvLiANClJURV9MT0coSU5GTywg UE9XRVIsICJNT1ZFIHRvIE1FRFxuIik7DQo+ICsJCX0gZWxzZQ0KPiArCQkJLyogcmVzZXQgKi8N Cj4gKwkJCS8qIG5lZWQgZGVidWcgbG9nICovDQo+ICsJCQlwb2xsX3N0YXRzLT50aHJlc2hvbGRf Y3RyID0gMDsNCj4gKw0KPiArDQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtl bXB0eV9wb2xsX3RyYWluaW5nKHN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxfc3RhdHMsDQo+ ICsJCXVpbnQzMl90IG1heF90cmFpbl9pdGVyKQ0KPiArew0KPiArDQo+ICsJaWYgKHBvbGxfc3Rh dHMtPml0ZXJfY291bnRlciA8IElOVEVSVkFMU19QRVJfU0VDT05EKSB7DQo+ICsJCXBvbGxfc3Rh dHMtPml0ZXJfY291bnRlcisrOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKw0KPiAr CXVwZGF0ZV90cmFpbmluZ19zdGF0cyhwb2xsX3N0YXRzLA0KPiArCQkJTE9XLA0KPiArCQkJZmFs c2UsDQo+ICsJCQltYXhfdHJhaW5faXRlcik7DQo+ICsNCj4gKwl1cGRhdGVfdHJhaW5pbmdfc3Rh dHMocG9sbF9zdGF0cywNCj4gKwkJCU1FRCwNCj4gKwkJCWZhbHNlLA0KPiArCQkJbWF4X3RyYWlu X2l0ZXIpOw0KPiArDQo+ICsJdXBkYXRlX3RyYWluaW5nX3N0YXRzKHBvbGxfc3RhdHMsDQo+ICsJ CQlIR0gsDQo+ICsJCQlmYWxzZSwNCj4gKwkJCW1heF90cmFpbl9pdGVyKTsNCj4gKw0KPiArDQo+ ICsJaWYgKHBvbGxfc3RhdHMtPnRocmVzaFtMT1ddLnRyYWluZWQgPT0gdHJ1ZQ0KPiArCQkJJiYg cG9sbF9zdGF0cy0+dGhyZXNoW01FRF0udHJhaW5lZCA9PSB0cnVlDQo+ICsJCQkmJiBwb2xsX3N0 YXRzLT50aHJlc2hbSEdIXS50cmFpbmVkID09IHRydWUpIHsNCj4gKw0KPiArCQlzZXRfc3RhdGUo cG9sbF9zdGF0cywgTUVEX05PUk1BTCk7DQo+ICsNCj4gKwkJUlRFX0xPRyhJTkZPLCBQT1dFUiwg IlRyYWluaW5nIGlzIENvbXBsZXRlIGZvciAlZFxuIiwNCj4gKwkJCQlwb2xsX3N0YXRzLT5sY29y ZV9pZCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4g K3J0ZV9lbXB0eV9wb2xsX2RldGVjdGlvbihzdHJ1Y3QgcnRlX3RpbWVyICp0aW0sDQo+ICsJCXZv aWQgKmFyZykNCj4gK3sNCj4gKw0KPiArCXVpbnQzMl90IGk7DQo+ICsNCj4gKwlzdHJ1Y3QgcHJp b3JpdHlfd29ya2VyICpwb2xsX3N0YXRzOw0KPiArDQo+ICsJUlRFX1NFVF9VU0VEKHRpbSk7DQo+ ICsNCj4gKwlSVEVfU0VUX1VTRUQoYXJnKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBOVU1f Tk9ERVM7IGkrKykgew0KPiArDQo+ICsJCXBvbGxfc3RhdHMgPSAmKGVwX3BhcmFtcy0+d3JrX2Rh dGEud3JrX3N0YXRzW2ldKTsNCj4gKw0KPiArCQlpZiAocnRlX2xjb3JlX2lzX2VuYWJsZWQocG9s bF9zdGF0cy0+bGNvcmVfaWQpID09IDApDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlzd2l0 Y2ggKHBvbGxfc3RhdHMtPnF1ZXVlX3N0YXRlKSB7DQo+ICsJCWNhc2UoVFJBSU5JTkcpOg0KPiAr CQkJZW1wdHlfcG9sbF90cmFpbmluZyhwb2xsX3N0YXRzLA0KPiArCQkJCQllcF9wYXJhbXMtPm1h eF90cmFpbl9pdGVyKTsNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWNhc2UoSEdIX0JVU1kpOg0K PiArCQljYXNlKE1FRF9OT1JNQUwpOg0KPiArCQkJdXBkYXRlX3N0YXRzX25vcm1hbChwb2xsX3N0 YXRzKTsNCj4gKw0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJY2FzZShMT1dfUFVSR0UpOg0KPiAr CQkJYnJlYWs7DQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQl9DQo+ICsN Cj4gKwl9DQo+ICsNCj4gK30NCj4gKw0KPiAraW50IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiArcnRl X3Bvd2VyX2VtcHR5X3BvbGxfc3RhdF9pbml0KHN0cnVjdCBlcF9wYXJhbXMgKiplcHRyLCB1aW50 OF90DQo+ICpmcmVxX3RsYikNCj4gK3sNCj4gKwl1aW50MzJfdCBpOw0KPiArCS8qIEFsbG9jYXRl IHRoZSBlcF9wYXJhbXMgc3RydWN0dXJlICovDQo+ICsJZXBfcGFyYW1zID0gcnRlX3ptYWxsb2Nf c29ja2V0KE5VTEwsDQo+ICsJCQlzaXplb2Yoc3RydWN0IGVwX3BhcmFtcyksDQo+ICsJCQkwLA0K PiArCQkJcnRlX3NvY2tldF9pZCgpKTsNCj4gKw0KPiArCWlmICghZXBfcGFyYW1zKQ0KPiArCQly dGVfcGFuaWMoIkNhbm5vdCBhbGxvY2F0ZSBoZWFwIG1lbW9yeSBmb3IgZXBfcGFyYW1zICINCj4g KwkJCQkiZm9yIHNvY2tldCAlZFxuIiwgcnRlX3NvY2tldF9pZCgpKTsNCj4gKw0KPiArCWlmIChm cmVxX3RsYiA9PSBOVUxMKSB7DQo+ICsJCWZyZXFfaW5kZXhbTE9XXSA9IDE0Ow0KPiArCQlmcmVx X2luZGV4W01FRF0gPSA5Ow0KPiArCQlmcmVxX2luZGV4W0hHSF0gPSAxOw0KPiArCX0gZWxzZSB7 DQo+ICsJCWZyZXFfaW5kZXhbTE9XXSA9IGZyZXFfdGxiW0xPV107DQo+ICsJCWZyZXFfaW5kZXhb TUVEXSA9IGZyZXFfdGxiW01FRF07DQo+ICsJCWZyZXFfaW5kZXhbSEdIXSA9IGZyZXFfdGxiW0hH SF07DQo+ICsJfQ0KPiArDQo+ICsJUlRFX0xPRyhJTkZPLCBQT1dFUiwgIkluaXRpYWxpemUgdGhl IEVtcHR5IFBvbGxcbiIpOw0KPiArDQo+ICsJLyogNSBzZWNvbmRzIHdvcnRoIG9mIHRyYWluaW5n ICovDQo+ICsJZXBfcGFyYW1zLT5tYXhfdHJhaW5faXRlciA9IElOVEVSVkFMU19QRVJfU0VDT05E ICoNCj4gU0VDT05EU19UT19UUkFJTl9GT1I7DQo+ICsNCj4gKwlzdHJ1Y3Qgc3RhdHNfZGF0YSAq dyA9ICZlcF9wYXJhbXMtPndya19kYXRhOw0KPiArDQo+ICsJKmVwdHIgPSBlcF9wYXJhbXM7DQo+ ICsNCj4gKwkvKiBpbml0aWFsaXplIGFsbCB3cmtfc3RhdHMgc3RhdGUgKi8NCj4gKwlmb3IgKGkg PSAwOyBpIDwgTlVNX05PREVTOyBpKyspIHsNCj4gKw0KPiArCQlpZiAocnRlX2xjb3JlX2lzX2Vu YWJsZWQoaSkgPT0gMCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXNldF9zdGF0ZSgmdy0+ d3JrX3N0YXRzW2ldLCBUUkFJTklORyk7DQo+ICsJCS8qaW5pdCB0aGUgZnJlcXMgdGFibGUgKi8N Cj4gKwkJdG90YWxfYXZhaWxfZnJlcXNbaV0gPSBydGVfcG93ZXJfZnJlcXMoaSwNCj4gKwkJCQlh dmFpbF9mcmVxc1tpXSwNCj4gKwkJCQlOVU1fRlJFUVMpOw0KPiArDQo+ICsJCWlmIChnZXRfZnJl cV9pbmRleChMT1cpID4gdG90YWxfYXZhaWxfZnJlcXNbaV0pDQo+ICsJCQlyZXR1cm4gLTE7DQo+ ICsNCj4gKwl9DQo+ICsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICt2b2lkIF9f cnRlX2V4cGVyaW1lbnRhbA0KPiArcnRlX3Bvd2VyX2VtcHR5X3BvbGxfc3RhdF9mcmVlKHZvaWQp DQo+ICt7DQo+ICsNCj4gKwlSVEVfTE9HKElORk8sIFBPV0VSLCAiQ2xvc2UgdGhlIEVtcHR5IFBv bGxcbiIpOw0KPiArDQo+ICsJaWYgKGVwX3BhcmFtcyAhPSBOVUxMKQ0KPiArCQlydGVfZnJlZShl cF9wYXJhbXMpOw0KPiArfQ0KPiArDQo+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVf cG93ZXJfZW1wdHlfcG9sbF9zdGF0X3VwZGF0ZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQpDQo+ICt7 DQo+ICsJc3RydWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0czsNCj4gKw0KPiArCWlmIChs Y29yZV9pZCA+PSBOVU1fTk9ERVMpDQo+ICsJCXJldHVybiAtMTsNCj4gKw0KPiArCXBvbGxfc3Rh dHMgPSAmKGVwX3BhcmFtcy0+d3JrX2RhdGEud3JrX3N0YXRzW2xjb3JlX2lkXSk7DQo+ICsNCj4g KwlpZiAocG9sbF9zdGF0cy0+bGNvcmVfaWQgPT0gMCkNCj4gKwkJcG9sbF9zdGF0cy0+bGNvcmVf aWQgPSBsY29yZV9pZDsNCj4gKw0KPiArCXBvbGxfc3RhdHMtPmVtcHR5X2RlcXVldWVzKys7DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IF9fcnRlX2V4cGVyaW1lbnRhbA0K PiArcnRlX3Bvd2VyX3BvbGxfc3RhdF91cGRhdGUodW5zaWduZWQgaW50IGxjb3JlX2lkLCB1aW50 OF90IG5iX3BrdCkNCj4gK3sNCj4gKw0KPiArCXN0cnVjdCBwcmlvcml0eV93b3JrZXIgKnBvbGxf c3RhdHM7DQo+ICsNCj4gKwlpZiAobGNvcmVfaWQgPj0gTlVNX05PREVTKQ0KPiArCQlyZXR1cm4g LTE7DQo+ICsNCj4gKwlwb2xsX3N0YXRzID0gJihlcF9wYXJhbXMtPndya19kYXRhLndya19zdGF0 c1tsY29yZV9pZF0pOw0KPiArDQo+ICsJaWYgKHBvbGxfc3RhdHMtPmxjb3JlX2lkID09IDApDQo+ ICsJCXBvbGxfc3RhdHMtPmxjb3JlX2lkID0gbGNvcmVfaWQ7DQo+ICsNCj4gKwlwb2xsX3N0YXRz LT5udW1fZGVxdWV1ZV9wa3RzICs9IG5iX3BrdDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICsNCj4gK3VpbnQ2NF90IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiArcnRlX3Bvd2VyX2Vt cHR5X3BvbGxfc3RhdF9mZXRjaCh1bnNpZ25lZCBpbnQgbGNvcmVfaWQpDQo+ICt7DQo+ICsJc3Ry dWN0IHByaW9yaXR5X3dvcmtlciAqcG9sbF9zdGF0czsNCj4gKw0KPiArCWlmIChsY29yZV9pZCA+ PSBOVU1fTk9ERVMpDQo+ICsJCXJldHVybiAtMTsNCj4gKw0KPiArCXBvbGxfc3RhdHMgPSAmKGVw X3BhcmFtcy0+d3JrX2RhdGEud3JrX3N0YXRzW2xjb3JlX2lkXSk7DQo+ICsNCj4gKwlpZiAocG9s bF9zdGF0cy0+bGNvcmVfaWQgPT0gMCkNCj4gKwkJcG9sbF9zdGF0cy0+bGNvcmVfaWQgPSBsY29y ZV9pZDsNCj4gKw0KPiArCXJldHVybiBwb2xsX3N0YXRzLT5lbXB0eV9kZXF1ZXVlczsNCj4gK30N Cj4gKw0KPiArdWludDY0X3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVfcG93ZXJfcG9sbF9z dGF0X2ZldGNoKHVuc2lnbmVkIGludCBsY29yZV9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcHJpb3Jp dHlfd29ya2VyICpwb2xsX3N0YXRzOw0KPiArDQo+ICsJaWYgKGxjb3JlX2lkID49IE5VTV9OT0RF UykNCj4gKwkJcmV0dXJuIC0xOw0KPiArDQo+ICsJcG9sbF9zdGF0cyA9ICYoZXBfcGFyYW1zLT53 cmtfZGF0YS53cmtfc3RhdHNbbGNvcmVfaWRdKTsNCj4gKw0KPiArCWlmIChwb2xsX3N0YXRzLT5s Y29yZV9pZCA9PSAwKQ0KPiArCQlwb2xsX3N0YXRzLT5sY29yZV9pZCA9IGxjb3JlX2lkOw0KPiAr DQo+ICsJcmV0dXJuIHBvbGxfc3RhdHMtPm51bV9kZXF1ZXVlX3BrdHM7DQo+ICt9DQo+IGRpZmYg LS1naXQgYS9saWIvbGlicnRlX3Bvd2VyL3J0ZV9wb3dlcl9lbXB0eV9wb2xsLmgNCj4gYi9saWIv bGlicnRlX3Bvd2VyL3J0ZV9wb3dlcl9lbXB0eV9wb2xsLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMC4uZTQzOTgxZg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xp Yi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX2VtcHR5X3BvbGwuaA0KPiBAQCAtMCwwICsxLDIwNSBA QA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICogQ29w eXJpZ2h0KGMpIDIwMTAtMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNp Zm5kZWYgX1JURV9FTVBUWV9QT0xMX0gNCj4gKyNkZWZpbmUgX1JURV9FTVBUWV9QT0xMX0gNCj4g Kw0KPiArLyoqDQo+ICsgKiBAZmlsZQ0KPiArICogUlRFIFBvd2VyIE1hbmFnZW1lbnQNCj4gKyAq Lw0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCj4gKw0K PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4gKyNpbmNsdWRlIDxydGVfYnl0ZW9yZGVyLmg+ DQo+ICsjaW5jbHVkZSA8cnRlX2xvZy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9zdHJpbmdfZm5zLmg+ DQo+ICsjaW5jbHVkZSA8cnRlX3Bvd2VyLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3RpbWVyLmg+DQo+ ICsNCj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiArZXh0ZXJuICJDIiB7DQo+ICsjZW5kaWYNCj4g Kw0KPiArI2RlZmluZSBOVU1fRlJFUVMgMjANCj4gKw0KPiArI2RlZmluZSBCSU5TX0FWIDQgLyog SGFzIHRvIGJlIF4yICovDQo+ICsNCj4gKyNkZWZpbmUgRFJPUCAoTlVNX0RJUkVDVElPTlMgKiBO VU1fREVWSUNFUykNCj4gKw0KPiArI2RlZmluZSBOVU1fUFJJT1JJVElFUyAgICAgICAgICAyDQo+ ICsNCj4gKyNkZWZpbmUgTlVNX05PREVTICAgICAgICAgMzEgLyogQW55IHJlc2VhbmFibGUgcHJp bWUgbnVtYmVyIHNob3VsZA0KPiB3b3JrKi8NCj4gKw0KPiArLyogUHJvY2Vzc29yIFBvd2VyIFN0 YXRlICovDQo+ICtlbnVtIGZyZXFfdmFsIHsNCj4gKwlMT1csDQo+ICsJTUVELA0KPiArCUhHSCwN Cj4gKwlOVU1fRlJFUSA9IE5VTV9GUkVRUw0KPiArfTsNCj4gKw0KPiArDQo+ICsvKiBRdWV1ZSBQ b2xsaW5nIFN0YXRlICovDQo+ICtlbnVtIHF1ZXVlX3N0YXRlIHsNCj4gKwlUUkFJTklORywgLyog Tk8gVFJBRkZJQyAqLw0KPiArCU1FRF9OT1JNQUwsICAgLyogTUVEICovDQo+ICsJSEdIX0JVU1ks ICAgICAvKiBISUdIICovDQo+ICsJTE9XX1BVUkdFLCAgICAvKiBMT1cgKi8NCj4gK307DQo+ICsN Cj4gKy8qIFF1ZXVlIFN0YXRzICovDQo+ICtzdHJ1Y3QgZnJlcV90aHJlc2hvbGQgew0KPiArDQo+ ICsJdWludDY0X3QgYmFzZV9lZHBpOw0KPiArCWJvb2wgdHJhaW5lZDsNCj4gKwl1aW50MzJfdCB0 aHJlc2hvbGRfcGVyY2VudDsNCj4gKwl1aW50MzJfdCBjdXJfdHJhaW5faXRlcjsNCj4gK307DQo+ ICsNCj4gKy8qIEVhY2ggV29yZGVyIFRocmVhZCBFbXB0eSBQb2xsIFN0YXRzICovDQo+ICtzdHJ1 Y3QgcHJpb3JpdHlfd29ya2VyIHsNCj4gKw0KPiArCS8qIEN1cnJlbnQgZGVxdWV1ZSBhbmQgdGhy b3VnaHB1dCBjb3VudHMgKi8NCj4gKwkvKiBUaGVzZSAyIGFyZSB3cml0dGVuIHRvIGJ5IHRoZSB3 b3JrZXIgdGhyZWFkcyAqLw0KPiArCS8qIFNvIGtlZXAgdGhlbSBvbiB0aGVpciBvd24gY2FjaGUg bGluZSAqLw0KPiArCXVpbnQ2NF90IGVtcHR5X2RlcXVldWVzOw0KPiArCXVpbnQ2NF90IG51bV9k ZXF1ZXVlX3BrdHM7DQo+ICsNCj4gKwllbnVtIHF1ZXVlX3N0YXRlIHF1ZXVlX3N0YXRlOw0KPiAr DQo+ICsJdWludDY0X3QgZW1wdHlfZGVxdWV1ZXNfcHJldjsNCj4gKwl1aW50NjRfdCBudW1fZGVx dWV1ZV9wa3RzX3ByZXY7DQo+ICsNCj4gKwkvKiBVc2VkIGZvciB0cmFpbmluZyBvbmx5ICovDQo+ ICsJc3RydWN0IGZyZXFfdGhyZXNob2xkIHRocmVzaFtOVU1fRlJFUV07DQo+ICsJZW51bSBmcmVx X3ZhbCBjdXJfZnJlcTsNCj4gKw0KPiArCS8qIGJ1Y2tldCBhcnJheXMgdG8gY2FsY3VsYXRlIHRo ZSBhdmVyYWdlcyAqLw0KPiArCXVpbnQ2NF90IGVkcGlfYXZbQklOU19BVl07DQo+ICsJdWludDMy X3QgIGVjOw0KPiArCXVpbnQ2NF90IHBwaV9hdltCSU5TX0FWXTsNCj4gKwl1aW50MzJfdCAgcGM7 DQo+ICsNCj4gKwl1aW50MzJfdCBsY29yZV9pZDsNCj4gKwl1aW50MzJfdCBpdGVyX2NvdW50ZXI7 DQo+ICsJdWludDMyX3QgdGhyZXNob2xkX2N0cjsNCj4gKwl1aW50MzJfdCBkaXNwbGF5X2N0cjsN Cj4gKwl1aW50OF90ICBkZXZfaWQ7DQo+ICsNCj4gK30gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4g Kw0KPiArDQo+ICtzdHJ1Y3Qgc3RhdHNfZGF0YSB7DQo+ICsNCj4gKwlzdHJ1Y3QgcHJpb3JpdHlf d29ya2VyIHdya19zdGF0c1tOVU1fTk9ERVNdOw0KPiArDQo+ICsJLyogZmxhZyB0byBzdG9wIHJ4 IHRocmVhZHMgcHJvY2Vzc2luZyBwYWNrZXRzIHVudGlsIHRyYWluaW5nIG92ZXIgKi8NCj4gKwli b29sIHN0YXJ0X3J4Ow0KPiArDQo+ICt9Ow0KPiArDQo+ICsvKiBFbXB0eSBQb2xsIFBhcmFtZXRl cnMgKi8NCj4gK3N0cnVjdCBlcF9wYXJhbXMgew0KPiArDQo+ICsJLyogVGltZXIgcmVsYXRlZCBz dHVmZiAqLw0KPiArCXVpbnQ2NF90IGludGVydmFsX3RpY2tzOw0KPiArCXVpbnQzMl90IG1heF90 cmFpbl9pdGVyOw0KPiArDQo+ICsJc3RydWN0IHJ0ZV90aW1lciB0aW1lcjA7DQo+ICsJc3RydWN0 IHN0YXRzX2RhdGEgd3JrX2RhdGE7DQo+ICt9Ow0KPiArDQo+ICsNCj4gKy8qKg0KPiArICogSW5p dGlhbGl6ZSB0aGUgcG93ZXIgbWFuYWdlbWVudCBzeXN0ZW0uDQo+ICsgKg0KPiArICogQHBhcmFt IGVwdHINCj4gKyAqICAgdGhlIHN0cnVjdHVyZSBvZiBlbXB0eSBwb2xsIGNvbmZpZ3VyYXRpb24N Cj4gKyAqIEBmcmVxX3RsYg0KPiArICogICB0aGUgcG93ZXIgc3RhdGUvZnJlcXVlbmN5ICBtYXBw aW5nIHRhYmxlDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogIC0gMCBvbiBzdWNjZXNzLg0K PiArICogIC0gTmVnYXRpdmUgb24gZXJyb3IuDQo+ICsgKi8NCj4gK2ludCBfX3J0ZV9leHBlcmlt ZW50YWwNCj4gK3J0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfaW5pdChzdHJ1Y3QgZXBfcGFyYW1z ICoqZXB0ciwgdWludDhfdA0KPiAqZnJlcV90bGIpOw0KPiArDQo+ICsvKioNCj4gKyAqIEZyZWUg dGhlIHJlc291cmNlIGhvbGQgYnkgcG93ZXIgbWFuYWdlbWVudCBzeXN0ZW0uDQo+ICsgKi8NCj4g K3ZvaWQgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVfcG93ZXJfZW1wdHlfcG9sbF9zdGF0X2Zy ZWUodm9pZCk7DQo+ICsNCj4gKy8qKg0KPiArICogVXBkYXRlIHNwZWNpZmljIGNvcmUgZW1wdHkg cG9sbCBjb3VudGVyDQo+ICsgKiBJdCdzIG5vdCB0aHJlYWQgc2FmZS4NCj4gKyAqDQo+ICsgKiBA cGFyYW0gbGNvcmVfaWQNCj4gKyAqICBsY29yZSBpZA0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4g KyAqICAtIDAgb24gc3VjY2Vzcy4NCj4gKyAqICAtIE5lZ2F0aXZlIG9uIGVycm9yLg0KPiArICov DQo+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVfcG93ZXJfZW1wdHlfcG9sbF9zdGF0 X3VwZGF0ZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIFVwZGF0 ZSBzcGVjaWZpYyBjb3JlIHZhbGlkIHBvbGwgY291bnRlciwgbm90IHRocmVhZCBzYWZlLg0KPiAr ICoNCj4gKyAqIEBwYXJhbSBsY29yZV9pZA0KPiArICogIGxjb3JlIGlkLg0KPiArICogQHBhcmFt IG5iX3BrdA0KPiArICogIFRoZSBwYWNrZXQgbnVtYmVyIG9mIG9uZSB2YWxpZCBwb2xsLg0KPiAr ICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAtIDAgb24gc3VjY2Vzcy4NCj4gKyAqICAtIE5lZ2F0 aXZlIG9uIGVycm9yLg0KPiArICovDQo+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ICtydGVf cG93ZXJfcG9sbF9zdGF0X3VwZGF0ZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQsIHVpbnQ4X3QgbmJf cGt0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBGZXRjaCBzcGVjaWZpYyBjb3JlIGVtcHR5IHBvbGwg Y291bnRlci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbGNvcmVfaWQNCj4gKyAqICBsY29yZSBpZA0K PiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICBDdXJyZW50IGxjb3JlIGVtcHR5IHBvbGwgY291 bnRlciB2YWx1ZS4NCj4gKyAqLw0KPiArdWludDY0X3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ICty dGVfcG93ZXJfZW1wdHlfcG9sbF9zdGF0X2ZldGNoKHVuc2lnbmVkIGludCBsY29yZV9pZCk7DQo+ ICsNCj4gKy8qKg0KPiArICogRmV0Y2ggc3BlY2lmaWMgY29yZSB2YWxpZCBwb2xsIGNvdW50ZXIu DQo+ICsgKg0KPiArICogQHBhcmFtIGxjb3JlX2lkDQo+ICsgKiAgbGNvcmUgaWQNCj4gKyAqDQo+ ICsgKiBAcmV0dXJuDQo+ICsgKiAgQ3VycmVudCBsY29yZSB2YWxpZCBwb2xsIGNvdW50ZXIgdmFs dWUuDQo+ICsgKi8NCj4gK3VpbnQ2NF90IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiArcnRlX3Bvd2Vy X3BvbGxfc3RhdF9mZXRjaCh1bnNpZ25lZCBpbnQgbGNvcmVfaWQpOw0KPiArDQo+ICsvKioNCj4g KyAqIEVtcHR5IHBvbGwgIHN0YXRlIGNoYW5nZSBkZXRlY3Rpb24gZnVuY3Rpb24NCj4gKyAqDQo+ ICsgKiBAcGFyYW0gIHRpbQ0KPiArICogIFRoZSB0aW1lciBzdHJ1Y3R1cmUNCj4gKyAqIEBwYXJh bSAgYXJnDQo+ICsgKiAgVGhlIGN1c3RvbWl6ZWQgcGFyYW1ldGVyDQo+ICsgKi8NCj4gK3ZvaWQg IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiArcnRlX2VtcHR5X3BvbGxfZGV0ZWN0aW9uKHN0cnVjdCBy dGVfdGltZXIgKnRpbSwgdm9pZCAqYXJnKTsNCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRl X3Bvd2VyL3J0ZV9wb3dlcl92ZXJzaW9uLm1hcA0KPiBiL2xpYi9saWJydGVfcG93ZXIvcnRlX3Bv d2VyX3ZlcnNpb24ubWFwDQo+IGluZGV4IGRkNTg3ZGYuLjExZmZkZmIgMTAwNjQ0DQo+IC0tLSBh L2xpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX3ZlcnNpb24ubWFwDQo+ICsrKyBiL2xpYi9saWJy dGVfcG93ZXIvcnRlX3Bvd2VyX3ZlcnNpb24ubWFwDQo+IEBAIC0zMywzICszMywxNiBAQCBEUERL XzE4LjA4IHsNCj4gIAlydGVfcG93ZXJfZ2V0X2NhcGFiaWxpdGllczsNCj4gDQo+ICB9IERQREtf MTcuMTE7DQo+ICsNCj4gK0VYUEVSSU1FTlRBTCB7DQo+ICsgICAgICAgIGdsb2JhbDoNCj4gKw0K PiArICAgICAgICBydGVfcG93ZXJfZW1wdHlfcG9sbF9zdGF0X2luaXQ7DQo+ICsgICAgICAgIHJ0 ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRfZnJlZTsNCj4gKyAgICAgICAgcnRlX3Bvd2VyX2VtcHR5 X3BvbGxfc3RhdF91cGRhdGU7DQo+ICsgICAgICAgIHJ0ZV9wb3dlcl9lbXB0eV9wb2xsX3N0YXRf ZmV0Y2g7DQo+ICsgICAgICAgIHJ0ZV9wb3dlcl9wb2xsX3N0YXRfZmV0Y2g7DQo+ICsgICAgICAg IHJ0ZV9wb3dlcl9wb2xsX3N0YXRfdXBkYXRlOw0KPiArICAgICAgICBydGVfZW1wdHlfcG9sbF9k ZXRlY3Rpb247DQo+ICsNCj4gK307DQo+IC0tDQo+IDIuNy41DQoNCg==