From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 004945A33 for ; Fri, 14 Oct 2016 17:01:00 +0200 (CEST) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP; 14 Oct 2016 08:00:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,493,1473145200"; d="scan'208";a="19591436" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga006.fm.intel.com with ESMTP; 14 Oct 2016 08:00:58 -0700 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Fri, 14 Oct 2016 08:00:58 -0700 Received: from fmsmsx108.amr.corp.intel.com ([169.254.9.94]) by fmsmsx124.amr.corp.intel.com ([169.254.8.236]) with mapi id 14.03.0248.002; Fri, 14 Oct 2016 08:00:58 -0700 From: "Eads, Gage" To: Jerin Jacob , "dev@dpdk.org" CC: "thomas.monjalon@6wind.com" , "Richardson, Bruce" , "Vangati, Narender" , "hemant.agrawal@nxp.com" Thread-Topic: [dpdk-dev] [RFC] [PATCH v2] libeventdev: event driven programming model framework for DPDK Thread-Index: AQHSI/YNvEzO7rdOo0eii1P1kcIFBKCoDBoA Date: Fri, 14 Oct 2016 15:00:57 +0000 Message-ID: <9184057F7FC11744A2107296B6B8EB1E01E179E0@FMSMSX108.amr.corp.intel.com> References: <20161005072451.GA2358@localhost.localdomain> <1476214216-31982-1-git-send-email-jerin.jacob@caviumnetworks.com> In-Reply-To: <1476214216-31982-1-git-send-email-jerin.jacob@caviumnetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOGRhNDYxOTQtM2I3OS00ODdmLWExMzMtODQyMzQ5NzE2YzljIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6Inh5R1BPT1pTVU9zb2lENTNsMkhkXC9XbmRRaGpvQ0xBXC82bVVPTCtHTkdIND0ifQ== x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.107] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] [PATCH v2] libeventdev: event driven programming model framework for DPDK X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Oct 2016 15:01:03 -0000 VGhhbmtzIEplcmluLCB0aGlzIGxvb2tzIGdvb2QuIEkndmUgcHV0IGEgZmV3IG5vdGVzL3F1ZXN0 aW9ucyBpbmxpbmUuDQoNClRoYW5rcywNCkdhZ2UNCg0KPiAgLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gIEZyb206IEplcmluIEphY29iIFttYWlsdG86amVyaW4uamFjb2JAY2F2aXVtbmV0 d29ya3MuY29tXQ0KPiAgU2VudDogVHVlc2RheSwgT2N0b2JlciAxMSwgMjAxNiAyOjMwIFBNDQo+ ICBUbzogZGV2QGRwZGsub3JnDQo+ICBDYzogdGhvbWFzLm1vbmphbG9uQDZ3aW5kLmNvbTsgUmlj aGFyZHNvbiwgQnJ1Y2UNCj4gIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IFZhbmdhdGks IE5hcmVuZGVyDQo+ICA8bmFyZW5kZXIudmFuZ2F0aUBpbnRlbC5jb20+OyBoZW1hbnQuYWdyYXdh bEBueHAuY29tOyBFYWRzLCBHYWdlDQo+ICA8Z2FnZS5lYWRzQGludGVsLmNvbT47IEplcmluIEph Y29iIDxqZXJpbi5qYWNvYkBjYXZpdW1uZXR3b3Jrcy5jb20+DQo+ICBTdWJqZWN0OiBbZHBkay1k ZXZdIFtSRkNdIFtQQVRDSCB2Ml0gbGliZXZlbnRkZXY6IGV2ZW50IGRyaXZlbiBwcm9ncmFtbWlu Zw0KPiAgbW9kZWwgZnJhbWV3b3JrIGZvciBEUERLDQo+ICANCj4gIFRoYW5rcyB0byBJbnRlbCBh bmQgTlhQIGZvbGtzIGZvciB0aGUgcG9zaXRpdmUgYW5kIGNvbnN0cnVjdGl2ZSBmZWVkYmFjaw0K PiAgSSd2ZSByZWNlaXZlZCBzbyBmYXIuIEhlcmUgaXMgdGhlIHVwZGF0ZWQgUkZDKHYyKS4NCj4g IA0KPiAgSSd2ZSBhdHRlbXB0ZWQgdG8gYWRkcmVzcyBhcyBtYW55IGNvbW1lbnRzIGFzIHBvc3Np YmxlLg0KPiAgDQo+ICBUaGlzIHNlcmllcyBhZGRzIHJ0ZV9ldmVudGRldi5oIHRvIHRoZSBEUERL IHRyZWUgd2l0aA0KPiAgYWRlcXVhdGUgZG9jdW1lbnRhdGlvbiBpbiBkb3h5Z2VuIGZvcm1hdC4N Cj4gIA0KPiAgVXBkYXRlcyBhcmUgYWxzbyBhdmFpbGFibGUgb25saW5lOg0KPiAgDQo+ICBSZWxh dGVkIGRyYWZ0IGhlYWRlciBmaWxlICh0aGlzIHBhdGNoKToNCj4gIGh0dHBzOi8vcmF3Z2l0LmNv bS9qZXJpbmphY29iay9saWJldmVudGRldi9tYXN0ZXIvcnRlX2V2ZW50ZGV2LmgNCj4gIA0KPiAg UERGIHZlcnNpb24oZG94Z2VuIG91dHB1dCk6DQo+ICBodHRwczovL3Jhd2dpdC5jb20vamVyaW5q YWNvYmsvbGliZXZlbnRkZXYvbWFzdGVyL2xpYnJ0ZV9ldmVudGRldl92Mi5wZGYNCj4gIA0KPiAg UmVwbzoNCj4gIGh0dHBzOi8vZ2l0aHViLmNvbS9qZXJpbmphY29iay9saWJldmVudGRldg0KPiAg DQo+ICB2MS4udjINCj4gIA0KPiAgLSBBZGRlZCBDYXZpdW0sIEludGVsLCBOWFAgY29weXJpZ2h0 cyBpbiBoZWFkZXIgZmlsZQ0KPiAgDQo+ICAtIENoYW5nZWQgdGhlIGNvbmNlcHQgb2YgZmxvdyBx dWV1ZXMgdG8gZmxvdyBpZHMuDQo+ICBUaGlzIGlzIGF2b2lkIGRpY3RhdGluZyBhIHNwZWNpZmlj IHN0cnVjdHVyZSB0byBob2xkIHRoZSBmbG93cy4NCj4gIEEgcy93IGltcGxlbWVudGF0aW9uIGNh biBkbyBhdG9taWMgbG9hZCBiYWxhbmNpbmcgb24gbXVsdGlwbGUNCj4gIGZsb3cgaWRzIG1vcmUg ZWZmaWNpZW50bHkgdGhhbiBtYWludGFpbmluZyBlYWNoIGV2ZW50IGluIGEgc3BlY2lmaWMgZmxv dyBxdWV1ZS4NCj4gIA0KPiAgLSBDaGFuZ2UgdGhlIHNjaGVkdWxpbmcgZ3JvdXAgdG8gZXZlbnQg cXVldWUuDQo+ICBBIHNjaGVkdWxpbmcgZ3JvdXAgaXMgbW9yZSBhIHN0cmVhbSBvZiBldmVudHMs IHNvIGFuIGV2ZW50IHF1ZXVlIGlzIGEgYmV0dGVyDQo+ICAgYWJzdHJhY3Rpb24uDQo+ICANCj4g IC0gSW50cm9kdWNlZCBldmVudCBwb3J0IGNvbmNlcHQsIEluc3RlYWQgb2YgdHJ5aW5nIGV2ZW50 ZGV2IGFjY2VzcyB0byB0aGUgbGNvcmUsDQo+ICBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlv biBjYWxsZWQgZXZlbnQgcG9ydCBpcyBuZWVkZWQgd2hpY2ggaXMgdGhlDQo+ICBhcHBsaWNhdGlv biBpL2YgdG8gdGhlIGV2ZW50ZGV2IHRvIGRlcXVldWUgYW5kIGVucXVldWUgdGhlIGV2ZW50cy4N Cj4gIE9uZSBvciBtb3JlIGV2ZW50IHF1ZXVlcyBjYW4gYmUgbGlua2VkIHRvIHNpbmdsZSBldmVu dCBwb3J0Lg0KPiAgVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgZXZlbnQgcG9ydCBwZXIgbGNv cmUgYWxsb3dpbmcgbXVsdGlwbGUgbGlnaHR3ZWlnaHQNCj4gIHRocmVhZHMgdG8gaGF2ZSB0aGVp ciBvd24gaS9mIGludG8gZXZlbnRkZXYsIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBp dC4NCj4gIEFuIGV2ZW50IHBvcnQgd2lsbCBiZSBib3VuZCB0byBhIGxjb3JlIG9yIGEgbGlnaHR3 ZWlnaHQgdGhyZWFkIHRvIGtlZXANCj4gIHBvcnRhYmxlIGFwcGxpY2F0aW9uIHdvcmtmbG93Lg0K PiAgQW4gZXZlbnQgcG9ydCBhYnN0cmFjdGlvbiBhbHNvIGVuY2Fwc3VsYXRlcyBkZXF1ZXVlIGRl cHRoIGFuZCBlbnF1ZXVlIGRlcHRoDQo+ICBmb3INCj4gIGEgc2NoZWR1bGVyIGltcGxlbWVudGF0 aW9ucyB3aGljaCBjYW4gc2NoZWR1bGUgbXVsdGlwbGUgZXZlbnRzIGF0IGEgdGltZSBhbmQNCj4g IG91dHB1dCBldmVudHMgdGhhdCBjYW4gYmUgYnVmZmVyZWQuDQo+ICANCj4gIC0gQWRkZWQgY29u ZmlndXJhdGlvbiBvcHRpb25zIHdpdGggZXZlbnQgcXVldWUobmJfYXRvbWljX2Zsb3dzLA0KPiAg bmJfYXRvbWljX29yZGVyX3NlcXVlbmNlcywgc2luZ2xlIGNvbnN1bWVyIGV0YykNCj4gIGFuZCBl dmVudCBwb3J0KGRlcXVldWVfcXVldWVfZGVwdGgsIGVucXVldWVfcXVldWVfZGVwdGggZXRjKSB0 byBkZWZpbmUNCj4gIHRoZQ0KPiAgbGltaXRzIG9uIHRoZSByZXNvdXJjZSB1c2FnZS4oVXNlZnVs IGZvciBvcHRpbWl6ZWQgc29mdHdhcmUgaW1wbGVtZW50YXRpb24pDQo+ICANCj4gIC0gSW50cm9k dWNlZCBSVEVfRVZFTlRfREVWX0NBUF9RVUVVRV9RT1MgYW5kDQo+ICBSVEVfRVZFTlRfREVWX0NB UF9FVkVOVF9RT1MNCj4gIHNjaGVtZXMgb2YgcHJpb3JpdHkgaGFuZGxpbmcNCj4gIA0KPiAgLSBB ZGRlZCBldmVudCBwb3J0IHRvIGV2ZW50IHF1ZXVlIHNlcnZpY2luZyBwcmlvcml0eS4NCj4gIFRo aXMgYWxsb3dzIHR3byBldmVudCBwb3J0cyB0byBjb25uZWN0IHRvIHRoZSBzYW1lIGV2ZW50IHF1 ZXVlIHdpdGgNCj4gIGRpZmZlcmVudCBwcmlvcml0aWVzLg0KPiAgDQo+ICAtIENoYW5nZWQgdGhl IHdvcmtmbG93IGFzIHNjaGVkdWxlL2RlcXVldWUvZW5xdWV1ZS4NCj4gIEFuIGltcGxlbWVudGF0 aW9uIGlzIGZyZWUgdG8gZGVmaW5lIHNjaGVkdWxlIGFzIE5PT1AuDQo+ICBBIGRpc3RyaWJ1dGVk IHMvdyBzY2hlZHVsZXIgY2FuIHVzZSB0aGlzIHRvIHNjaGVkdWxlIGV2ZW50czsNCj4gIGFsc28g YSBjZW50cmFsaXplZCBzL3cgc2NoZWR1bGVyIGNhbiBtYWtlIHRoaXMgYSBOT09QIG9uIG5vbi1z Y2hlZHVsZXIgY29yZXMuDQo+ICANCj4gIC0gUmVtb3ZlZCBDYXZpdW0gSFcgc3BlY2lmaWMgc2No ZWR1bGVfZnJvbV9ncm91cCBBUEkNCj4gIA0KPiAgLSBSZW1vdmVkIENhdml1bSBIVyBzcGVjaWZp YyBjdHh0X3VwZGF0ZS9jdHh0X3dhaXQgQVBJcy4NCj4gICBJbnRyb2R1Y2VkIGEgbW9yZSBnZW5l cmljICJldmVudCBwaW5uaW5nIiBjb25jZXB0LiBpLmUNCj4gIElmIHRoZSBub3JtYWwgd29ya2Zs b3cgaXMgYSBkZXF1ZXVlIC0+IGRvIHdvcmsgYmFzZWQgb24gZXZlbnQgdHlwZSAtPg0KPiAgZW5x dWV1ZSwNCj4gIGEgcGluX2V2ZW50IGFyZ3VtZW50IHRvIGVucXVldWUNCj4gIHdoZXJlIHRoZSBw aW5uZWQgZXZlbnQgaXMgcmV0dXJuZWQgdGhyb3VnaCB0aGUgbm9ybWFsIGRlcXVldWUpDQo+ICBh bGxvd3MgYXBwbGljYXRpb24gd29ya2Zsb3cgdG8gcmVtYWluIHRoZSBzYW1lIHdoZXRoZXIgb3Ig bm90IGFuDQo+ICBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBpdC4NCj4gIA0KPiAgLSBBZGRlZCBk ZXF1ZXVlKCkgYnVyc3QgdmFyaWFudA0KPiAgDQo+ICAtIEFkZGVkIHRoZSBkZWZpbml0aW9uIG9m IGEgY2xvc2VkL29wZW4gc3lzdGVtIC0gd2hlcmUgb3BlbiBzeXN0ZW0gaXMgbWVtb3J5DQo+ICBi YWNrZWQgYW5kIGNsb3NlZCBzeXN0ZW0gZXZlbnRkZXYgaGFzIGxpbWl0ZWQgY2FwYWNpdHkuDQo+ ICBJbiBzdWNoIHN5c3RlbXMsIGl0IGlzIGFsc28gdXNlZnVsIHRvIGRlbm90ZSBwZXIgZXZlbnQg cG9ydCBob3cgbWFueSBwYWNrZXRzDQo+ICBjYW4gYmUgYWN0aXZlIGluIHRoZSBzeXN0ZW0uDQo+ ICBUaGlzIGNhbiBzZXJ2ZSBhcyBhIHRocmVzaG9sZCBmb3IgZXRoZGV2IGxpa2UgZGV2aWNlcyBz byB0aGV5IGRvbid0IG92ZXJ3aGVsbQ0KPiAgY29yZSB0byBjb3JlIGV2ZW50cy4NCj4gIA0KPiAg LSBBZGRlZCB0aGUgb3B0aW9uIHRvIHNwZWNpZnkgbWF4aW11bSBhbW91bnQgb2YgdGltZShpbiBu cykgYXBwbGljYXRpb24gbmVlZHMNCj4gIHdhaXQgb24gZGVxdWV1ZSgpDQo+ICANCj4gIC0gUmVt b3ZlZCB0aGUgc2NoZW1lIG9mIGV4cHJlc3NpbmcgdGhlIG51bWJlciBvZiBmbG93cyBpbiBsb2cy IGZvcm1hdA0KPiAgDQo+ICBPcGVuIGl0ZW0gb3IgdGhlIGl0ZW0gbmVlZHMgaW1wcm92ZW1lbnQu DQo+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAtIEFic3Ry YWN0IHRoZSBkaWZmZXJlbmNlcyBpbiBldmVudCBRb1MgbWFuYWdlbWVudCB3aXRoIGRpZmZlcmVu dCBwcmlvcml0eQ0KPiAgc2NoZW1lcw0KPiAgYXZhaWxhYmxlIGluIGRpZmZlcmVudCBIVyBvciBT VyBpbXBsZW1lbnRhdGlvbnMgd2l0aCBwb3J0YWJsZSBhcHBsaWNhdGlvbg0KPiAgd29ya2Zsb3cu DQo+ICANCj4gIEJhc2VkIG9uIHRoZSBmZWVkYmFjaywgdGhlcmUgdGhyZWUgZGlmZmVyZW50IGtp bmRzIG9mIFFvUyBzdXBwb3J0IGF2YWlsYWJsZSBpbg0KPiAgdGhyZWUgZGlmZmVyZW50IEhXIG9y IFNXIGltcGxlbWVudGF0aW9ucy4NCj4gIDEpIFByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUg ZXZlbnQgcXVldWUNCj4gIDIpIFByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGV2ZW50IGVu cXVldWUNCj4gIChTYW1lIGZsb3cgY2FuIGhhdmUgdHdvIGRpZmZlcmVudCBwcmlvcml0eSBvbiB0 d28gc2VwYXJhdGUgZW5xdWV1ZSkNCj4gIDMpIFByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUg ZmxvdyhlYWNoIGZsb3cgaGFzIHVuaXF1ZSBwcmlvcml0eSkNCj4gIA0KPiAgSW4gdjIsIFRoZSBk aWZmZXJlbmNlcyBhYnN0cmFjdGVkIGJhc2VkIG9uIGRldmljZSBjYXBhYmlsaXR5DQo+ICAoUlRF X0VWRU5UX0RFVl9DQVBfUVVFVUVfUU9TIGZvciB0aGUgZmlyc3Qgc2NoZW1lLA0KPiAgUlRFX0VW RU5UX0RFVl9DQVBfRVZFTlRfUU9TIGZvciB0aGUgc2Vjb25kIGFuZCB0aGlyZCBzY2hlbWUpLg0K PiAgVGhpcyBzY2hlbWUgd291bGQgY2FsbCBmb3IgZGlmZmVyZW50IGFwcGxpY2F0aW9uIHdvcmtm bG93IGZvcg0KPiAgbm9udHJpdmlhbCBRb1MtZW5hYmxlZCBhcHBsaWNhdGlvbnMuDQo+ICANCj4g IExvb2tpbmcgZm9yd2FyZCB0byBnZXR0aW5nIGNvbW1lbnRzIGZyb20gYm90aCBhcHBsaWNhdGlv biBhbmQgZHJpdmVyDQo+ICBpbXBsZW1lbnRhdGlvbiBwZXJzcGVjdGl2ZS4NCj4gIA0KPiAgL0pl cmluDQo+ICANCj4gIC0tLQ0KPiAgIGRvYy9hcGkvZG94eS1hcGktaW5kZXgubWQgICAgICAgICAg fCAgICAxICsNCj4gICBkb2MvYXBpL2RveHktYXBpLmNvbmYgICAgICAgICAgICAgIHwgICAgMSAr DQo+ICAgbGliL2xpYnJ0ZV9ldmVudGRldi9ydGVfZXZlbnRkZXYuaCB8IDEyMDQNCj4gICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTIw NiBpbnNlcnRpb25zKCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfZXZlbnRk ZXYvcnRlX2V2ZW50ZGV2LmgNCj4gIA0KPiAgZGlmZiAtLWdpdCBhL2RvYy9hcGkvZG94eS1hcGkt aW5kZXgubWQgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+ICBpbmRleCA2Njc1Zjk2Li4y OGMxMzI5IDEwMDY0NA0KPiAgLS0tIGEvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiAgKysr IGIvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiAgQEAgLTQwLDYgKzQwLDcgQEAgVGhlcmUg YXJlIG1hbnkgbGlicmFyaWVzLCBzbyB0aGVpciBoZWFkZXJzIG1heSBiZQ0KPiAgZ3JvdXBlZCBi eSB0b3BpY3M6DQo+ICAgICBbZXRoZGV2XSAgICAgICAgICAgICAoQHJlZiBydGVfZXRoZGV2Lmgp LA0KPiAgICAgW2V0aGN0cmxdICAgICAgICAgICAgKEByZWYgcnRlX2V0aF9jdHJsLmgpLA0KPiAg ICAgW2NyeXB0b2Rldl0gICAgICAgICAgKEByZWYgcnRlX2NyeXB0b2Rldi5oKSwNCj4gICsgIFtl dmVudGRldl0gICAgICAgICAgIChAcmVmIHJ0ZV9ldmVudGRldi5oKSwNCj4gICAgIFtkZXZhcmdz XSAgICAgICAgICAgIChAcmVmIHJ0ZV9kZXZhcmdzLmgpLA0KPiAgICAgW2JvbmRdICAgICAgICAg ICAgICAgKEByZWYgcnRlX2V0aF9ib25kLmgpLA0KPiAgICAgW3Zob3N0XSAgICAgICAgICAgICAg KEByZWYgcnRlX3ZpcnRpb19uZXQuaCksDQo+ICBkaWZmIC0tZ2l0IGEvZG9jL2FwaS9kb3h5LWFw aS5jb25mIGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mDQo+ICBpbmRleCA5ZGM3YWU1Li45ODQxNDc3 IDEwMDY0NA0KPiAgLS0tIGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mDQo+ICArKysgYi9kb2MvYXBp L2RveHktYXBpLmNvbmYNCj4gIEBAIC00MSw2ICs0MSw3IEBAIElOUFVUICAgICAgICAgICAgICAg ICAgID0gZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCBcDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWIvbGlicnRlX2NyeXB0b2RldiBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWIvbGlicnRlX2Rpc3RyaWJ1dG9yIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYi9saWJydGVfZXRoZXIgXA0KPiAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGli L2xpYnJ0ZV9ldmVudGRldiBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvbGli cnRlX2hhc2ggXA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL2xpYnJ0ZV9pcF9m cmFnIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi9saWJydGVfam9ic3RhdHMg XA0KPiAgZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZXZlbnRkZXYvcnRlX2V2ZW50ZGV2LmgNCj4g IGIvbGliL2xpYnJ0ZV9ldmVudGRldi9ydGVfZXZlbnRkZXYuaA0KPiAgbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gIGluZGV4IDAwMDAwMDAuLmY2MGU0NjENCj4gIC0tLSAvZGV2L251bGwNCj4gICsr KyBiL2xpYi9saWJydGVfZXZlbnRkZXYvcnRlX2V2ZW50ZGV2LmgNCj4gIEBAIC0wLDAgKzEsMTIw NCBAQA0KPiAgKy8qDQo+ICArICogICBCU0QgTElDRU5TRQ0KPiAgKyAqDQo+ICArICogICBDb3B5 cmlnaHQgMjAxNiBDYXZpdW0uDQo+ICArICogICBDb3B5cmlnaHQgMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbi4NCj4gICsgKiAgIENvcHlyaWdodCAyMDE2IE5YUC4NCj4gICsgKg0KPiAgKyAqICAgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0DQo+ICArICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCj4gICsgKiAgIGFyZSBtZXQ6DQo+ICArICoNCj4g ICsgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodA0KPiAgKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCj4gICsgKiAgICAgKiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dA0KPiAgKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KPiAgKyAqICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCj4gICsgKiAgICAgICBkaXN0 cmlidXRpb24uDQo+ICArICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDYXZpdW0gbm9yIHRo ZSBuYW1lcyBvZiBpdHMNCj4gICsgKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gICsgKiAgICAgICBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ ICArICoNCj4gICsgKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI VCBIT0xERVJTIEFORA0KPiAgQ09OVFJJQlVUT1JTDQo+ICArICogICAiQVMgSVMiIEFORCBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUDQo+ICBOT1QNCj4g ICsgKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORA0KPiAgRklUTkVTUyBGT1INCj4gICsgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4gIENPUFlSSUdIVA0KPiAgKyAq ICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsDQo+ICBJTkNJREVOVEFMLA0KPiAgKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUDQo+ICBOT1QNCj4gICsgKiAgIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MN Cj4gIE9GIFVTRSwNCj4gICsgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQNCj4gIEFORCBPTiBBTlkNCj4gICsgKiAgIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SDQo+ ICBUT1JUDQo+ICArICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+ICBUSEUgVVNFDQo+ICArICogICBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gNCj4gIERBTUFH RS4NCj4gICsgKi8NCj4gICsNCj4gICsjaWZuZGVmIF9SVEVfRVZFTlRERVZfSF8NCj4gICsjZGVm aW5lIF9SVEVfRVZFTlRERVZfSF8NCj4gICsNCj4gICsvKioNCj4gICsgKiBAZmlsZQ0KPiAgKyAq DQo+ICArICogUlRFIEV2ZW50IERldmljZSBBUEkNCj4gICsgKg0KPiAgKyAqIFRoZSBFdmVudCBE ZXZpY2UgQVBJIGlzIGNvbXBvc2VkIG9mIHR3byBwYXJ0czoNCj4gICsgKg0KPiAgKyAqIC0gVGhl IGFwcGxpY2F0aW9uLW9yaWVudGVkIEV2ZW50IEFQSSB0aGF0IGluY2x1ZGVzIGZ1bmN0aW9ucyB0 byBzZXR1cA0KPiAgKyAqICAgYW4gZXZlbnQgZGV2aWNlIChjb25maWd1cmUgaXQsIHNldHVwIGl0 cyBxdWV1ZXMsIHBvcnRzIGFuZCBzdGFydCBpdCksIHRvDQo+ICArICogICBlc3RhYmxpc2ggdGhl IGxpbmsgYmV0d2VlbiBxdWV1ZXMgdG8gcG9ydCBhbmQgdG8gcmVjZWl2ZSBldmVudHMsIGFuZCBz byBvbi4NCj4gICsgKg0KPiAgKyAqIC0gVGhlIGRyaXZlci1vcmllbnRlZCBFdmVudCBBUEkgdGhh dCBleHBvcnRzIGEgZnVuY3Rpb24gYWxsb3dpbmcNCj4gICsgKiAgIGFuIGV2ZW50IHBvbGwgTW9k ZSBEcml2ZXIgKFBNRCkgdG8gc2ltdWx0YW5lb3VzbHkgcmVnaXN0ZXIgaXRzZWxmIGFzDQo+ICAr ICogICBhbiBldmVudCBkZXZpY2UgZHJpdmVyLg0KPiAgKyAqDQo+ICArICogRXZlbnQgZGV2aWNl IGNvbXBvbmVudHM6DQo+ICArICoNCj4gICsgKiAgICAgICAgICAgICAgICAgICAgICstLS0tLS0t LS0tLS0tLS0tLSsNCj4gICsgKiAgICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0r IHwNCj4gICsgKiAgICAgICAgKy0tLS0tLS0rICAgIHwgfCAgICBmbG93IDAgICB8IHwNCj4gICsg KiAgICAgICAgfFBhY2tldCB8ICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwNCj4gICsgKiAgICAgICAg fGV2ZW50ICB8ICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwNCj4gICsgKiAgICAgICAgfCAgICAgICB8 ICAgIHwgfCAgICBmbG93IDEgICB8IHxldmVudF9wb3J0X2xpbmsocG9ydDAsIHF1ZXVlMCkNCj4g ICsgKiAgICAgICAgKy0tLS0tLS0rICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgIHwgICAgICst LS0tLS0tLSsNCj4gICsgKiAgICAgICAgKy0tLS0tLS0rICAgIHwgKy0tLS0tLS0tLS0tLS0rIG8t LS0tLXYtLS0tLW8gICAgICAgIHxkZXF1ZXVlICstLS0tLS0rDQo+ICArICogICAgICAgIHxDcnlw dG8gfCAgICB8IHwgICAgZmxvdyBuICAgfCB8ICAgICAgICAgICB8IGV2ZW50ICArLS0tLS0tLT58 Q29yZSAwfA0KPiAgKyAqICAgICAgICB8d29yayAgIHwgICAgfCArLS0tLS0tLS0tLS0tLSsgby0t LS0rICAgICAgfCBwb3J0IDAgfCAgICAgICAgfCAgICAgIHwNCj4gICsgKiAgICAgICAgfGRvbmUg ZXZ8ICAgIHwgIGV2ZW50IHF1ZXVlIDAgIHwgICAgfCAgICAgICstLS0tLS0tLSsgICAgICAgICst LS0tLS0rDQo+ICArICogICAgICAgICstLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAg IHwNCj4gICsgKiAgICAgICAgKy0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0K PiAgKyAqICAgICAgICB8VGltZXIgIHwgICAgKy0tLS0tLS0tLS0tLS0tLS0tKyAgICB8ICAgICAg Ky0tLS0tLS0tKw0KPiAgKyAqICAgICAgICB8ZXhwaXJ5IHwgICAgfCArLS0tLS0tLS0tLS0tLSsg fCAgICArLS0tLS0tbyAgICAgICAgfGRlcXVldWUgKy0tLS0tLSsNCj4gICsgKiAgICAgICAgfGV2 ZW50ICB8ICAgIHwgfCAgICBmbG93IDAgICB8IG8tLS0tLS0tLS0tLW8gZXZlbnQgICstLS0tLS0t PnxDb3JlIDF8DQo+ICArICogICAgICAgICstLS0tLS0tKyAgICB8ICstLS0tLS0tLS0tLS0tKyB8 ICAgICAgKy0tLS1vIHBvcnQgMSB8ICAgICAgICB8ICAgICAgfA0KPiAgKyAqICAgICAgIEV2ZW50 IGVucXVldWUgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgIHwgICAgKy0tLS0tLS0tKyAgICAgICAg Ky0tLS0tLSsNCj4gICsgKiAgICAgby0tLS0tLS0tLS0tLS0+IHwgfCAgICBmbG93IDEgICB8IHwg ICAgICB8DQo+ICArICogICAgICAgIGVucXVldWUoICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAg ICAgfA0KPiAgKyAqICAgICAgICBxdWV1ZV9pZCwgICAgfCAgICAgICAgICAgICAgICAgfCAgICAg IHwgICAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4gICsgKiAgICAgICAgZmxvd19pZCwg ICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgICB8ICAgIHwgICAgICAgIHxkZXF1ZXVlIHxDb3Jl IDJ8DQo+ICArICogICAgICAgIHNjaGVkX3R5cGUsICB8IHwgICAgZmxvdyBuICAgfCBvLS0tLS0t LS0tLS1vIGV2ZW50ICArLS0tLS0tLT58ICAgICAgfA0KPiAgKyAqICAgICAgICBldmVudF90eXBl LCAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgIHwgICAgfCBwb3J0IDIgfCAgICAgICAgKy0tLS0t LSsNCj4gICsgKiAgICAgICAgc3ViZXZfdHlwZSwgIHwgIGV2ZW50IHF1ZXVlIDEgIHwgICAgICB8 ICAgICstLS0tLS0tLSsNCj4gICsgKiAgICAgICAgZXZlbnQpICAgICAgICstLS0tLS0tLS0tLS0t LS0tLSsgICAgICB8ICAgICstLS0tLS0tLSsNCj4gICsgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgIHxkZXF1ZXVlICstLS0tLS0rDQo+ ICArICogICAgICAgICstLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgfCAgICB8 IGV2ZW50ICArLS0tLS0tLT58Q29yZSBufA0KPiAgKyAqICAgICAgICB8Q29yZSAgIHwgICAgfCAr LS0tLS0tLS0tLS0tLSsgby0tLS0tLS0tLS0tbyBwb3J0IG4gfCAgICAgICAgfCAgICAgIHwNCj4g ICsgKiAgICAgICAgfChTVykgICB8ICAgIHwgfCAgICBmbG93IDAgICB8IHwgICAgICB8ICAgICst LS0tLS0tLSsgICAgICAgICstLSstLS0rDQo+ICArICogICAgICAgIHxldmVudCAgfCAgICB8ICst LS0tLS0tLS0tLS0tKyB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICArICog ICAgICAgICstLS0tLS0tKyAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICB8DQo+ICArICogICAgICAgICAgICBeICAgICAgICB8IHwgICAgZmxvdyAx ICAgfCB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICArICogICAgICAgICAg ICB8ICAgICAgICB8ICstLS0tLS0tLS0tLS0tKyBvLS0tLS0tKyAgICAgICAgICAgICAgICAgICAg ICAgICB8DQo+ICArICogICAgICAgICAgICB8ICAgICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICArICogICAgICAgICAgICB8ICAgICAg ICB8IHwgICAgZmxvdyBuICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ ICArICogICAgICAgICAgICB8ICAgICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8DQo+ICArICogICAgICAgICAgICB8ICAgICAgICB8ICBldmVu dCBxdWV1ZSBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICArICogICAg ICAgICAgICB8ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8DQo+ICArICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICArICogICAgICAgICAgICAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rDQo+ICArICoNCj4gICsgKg0KPiAgKyAqDQo+ICArICogRXZlbnQgZGV2aWNlOiBBIGhhcmR3 YXJlIG9yIHNvZnR3YXJlLWJhc2VkIGV2ZW50IHNjaGVkdWxlci4NCj4gICsgKg0KPiAgKyAqIEV2 ZW50OiBBIHVuaXQgb2Ygc2NoZWR1bGluZyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHBhY2tldCBvciBv dGhlciBkYXRhdHlwZQ0KPiAgKyAqIGxpa2UgU1cgZ2VuZXJhdGVkIGV2ZW50IGZyb20gdGhlIGNv cmUsIENyeXB0byB3b3JrIGNvbXBsZXRpb24NCj4gIG5vdGlmaWNhdGlvbiwNCj4gICsgKiBUaW1l ciBleHBpcnkgZXZlbnQgbm90aWZpY2F0aW9uIGV0YyBhcyB3ZWxsIGFzIG1ldGFkYXRhLg0KPiAg KyAqIFRoZSBtZXRhZGF0YSBpbmNsdWRlcyBmbG93IElELCBzY2hlZHVsaW5nIHR5cGUsIGV2ZW50 IHByaW9yaXR5LCBldmVudF90eXBlLA0KPiAgKyAqIHN1Yl9ldmVudF90eXBlIGV0Yy4NCj4gICsg Kg0KPiAgKyAqIEV2ZW50IHF1ZXVlOiBBIHF1ZXVlIGNvbnRhaW5pbmcgZXZlbnRzIHRoYXQgYXJl IHNjaGVkdWxlZCBieSB0aGUgZXZlbnQNCj4gIGRldi4NCj4gICsgKiBBbiBldmVudCBxdWV1ZSBj b250YWlucyBldmVudHMgb2YgZGlmZmVyZW50IGZsb3dzIGFzc29jaWF0ZWQgd2l0aA0KPiAgc2No ZWR1bGluZw0KPiAgKyAqIHR5cGVzLCBzdWNoIGFzIGF0b21pYywgb3JkZXJlZCwgb3IgcGFyYWxs ZWwuDQo+ICArICoNCj4gICsgKiBFdmVudCBwb3J0OiBBbiBhcHBsaWNhdGlvbidzIGludGVyZmFj ZSBpbnRvIHRoZSBldmVudCBkZXYgZm9yIGVucXVldWUgYW5kDQo+ICArICogZGVxdWV1ZSBvcGVy YXRpb25zLiBFYWNoIGV2ZW50IHBvcnQgY2FuIGJlIGxpbmtlZCB3aXRoIG9uZSBvciBtb3JlDQo+ ICArICogZXZlbnQgcXVldWVzIGZvciBkZXF1ZXVlIG9wZXJhdGlvbnMuDQo+ICArICoNCj4gICsg KiBCeSBkZWZhdWx0LCBhbGwgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgRXZlbnQgRGV2aWNlIEFQSSBl eHBvcnRlZCBieSBhIFBNRA0KPiAgKyAqIGFyZSBsb2NrLWZyZWUgZnVuY3Rpb25zIHdoaWNoIGFz c3VtZSB0byBub3QgYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBvbg0KPiAgKyAqIGRpZmZlcmVudCBs b2dpY2FsIGNvcmVzIHRvIHdvcmsgb24gdGhlIHNhbWUgdGFyZ2V0IG9iamVjdC4gRm9yIGluc3Rh bmNlLA0KPiAgKyAqIHRoZSBkZXF1ZXVlIGZ1bmN0aW9uIG9mIGEgUE1EIGNhbm5vdCBiZSBpbnZv a2VkIGluIHBhcmFsbGVsIG9uIHR3byBsb2dpY2FsDQo+ICArICogY29yZXMgdG8gb3BlcmF0ZXMg b24gc2FtZSAgZXZlbnQgcG9ydC4gT2YgY291cnNlLCB0aGlzIGZ1bmN0aW9uDQo+ICArICogY2Fu IGJlIGludm9rZWQgaW4gcGFyYWxsZWwgYnkgZGlmZmVyZW50IGxvZ2ljYWwgY29yZXMgb24gZGlm ZmVyZW50IHBvcnRzLg0KPiAgKyAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXBw ZXIgbGV2ZWwgYXBwbGljYXRpb24gdG8gZW5mb3JjZSB0aGlzIHJ1bGUuDQo+ICArICoNCj4gICsg KiBJbiBhbGwgZnVuY3Rpb25zIG9mIHRoZSBFdmVudCBBUEksIHRoZSBFdmVudCBkZXZpY2UgaXMN Cj4gICsgKiBkZXNpZ25hdGVkIGJ5IGFuIGludGVnZXIgPj0gMCBuYW1lZCB0aGUgZGV2aWNlIGlk ZW50aWZpZXIgKmRldl9pZCoNCj4gICsgKg0KPiAgKyAqIEF0IHRoZSBFdmVudCBkcml2ZXIgbGV2 ZWwsIEV2ZW50IGRldmljZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgZ2VuZXJpYw0KPiAgKyAqIGRh dGEgc3RydWN0dXJlIG9mIHR5cGUgKnJ0ZV9ldmVudF9kZXYqLg0KPiAgKyAqDQo+ICArICogRXZl bnQgZGV2aWNlcyBhcmUgZHluYW1pY2FsbHkgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIFBDSS9Tb0Mg ZGV2aWNlIHByb2JpbmcNCj4gICsgKiBwaGFzZSBwZXJmb3JtZWQgYXQgRUFMIGluaXRpYWxpemF0 aW9uIHRpbWUuDQo+ICArICogV2hlbiBhbiBFdmVudCBkZXZpY2UgaXMgYmVpbmcgcHJvYmVkLCBh ICpydGVfZXZlbnRfZGV2KiBzdHJ1Y3R1cmUgYW5kDQo+ICArICogYSBuZXcgZGV2aWNlIGlkZW50 aWZpZXIgYXJlIGFsbG9jYXRlZCBmb3IgdGhhdCBkZXZpY2UuIFRoZW4sIHRoZQ0KPiAgKyAqIGV2 ZW50X2Rldl9pbml0KCkgZnVuY3Rpb24gc3VwcGxpZWQgYnkgdGhlIEV2ZW50IGRyaXZlciBtYXRj aGluZyB0aGUgcHJvYmVkDQo+ICArICogZGV2aWNlIGlzIGludm9rZWQgdG8gcHJvcGVybHkgaW5p dGlhbGl6ZSB0aGUgZGV2aWNlLg0KPiAgKyAqDQo+ICArICogVGhlIHJvbGUgb2YgdGhlIGRldmlj ZSBpbml0IGZ1bmN0aW9uIGNvbnNpc3RzIG9mIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgb3INCj4g ICsgKiBzb2Z0d2FyZSBldmVudCBkcml2ZXIgaW1wbGVtZW50YXRpb25zLg0KPiAgKyAqDQo+ICAr ICogSWYgdGhlIGRldmljZSBpbml0IG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgY29ycmVz cG9uZGVuY2UgYmV0d2Vlbg0KPiAgKyAqIHRoZSBkZXZpY2UgaWRlbnRpZmllciBhc3NpZ25lZCB0 byB0aGUgbmV3IGRldmljZSBhbmQgaXRzIGFzc29jaWF0ZWQNCj4gICsgKiAqcnRlX2V2ZW50X2Rl diogc3RydWN0dXJlIGlzIGVmZmVjdGl2ZWx5IHJlZ2lzdGVyZWQuDQo+ICArICogT3RoZXJ3aXNl LCBib3RoIHRoZSAqcnRlX2V2ZW50X2Rldiogc3RydWN0dXJlIGFuZCB0aGUgZGV2aWNlIGlkZW50 aWZpZXIgYXJlDQo+ICArICogZnJlZWQuDQo+ICArICoNCj4gICsgKiBUaGUgZnVuY3Rpb25zIGV4 cG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBFdmVudCBBUEkgdG8gc2V0dXAgYSBkZXZpY2UNCj4g ICsgKiBkZXNpZ25hdGVkIGJ5IGl0cyBkZXZpY2UgaWRlbnRpZmllciBtdXN0IGJlIGludm9rZWQg aW4gdGhlIGZvbGxvd2luZyBvcmRlcjoNCj4gICsgKiAgICAgLSBydGVfZXZlbnRfZGV2X2NvbmZp Z3VyZSgpDQo+ICArICogICAgIC0gcnRlX2V2ZW50X3F1ZXVlX3NldHVwKCkNCj4gICsgKiAgICAg LSBydGVfZXZlbnRfcG9ydF9zZXR1cCgpDQo+ICArICogICAgIC0gcnRlX2V2ZW50X3BvcnRfbGlu aygpDQo+ICArICogICAgIC0gcnRlX2V2ZW50X2Rldl9zdGFydCgpDQo+ICArICoNCj4gICsgKiBU aGVuLCB0aGUgYXBwbGljYXRpb24gY2FuIGludm9rZSwgaW4gYW55IG9yZGVyLCB0aGUgZnVuY3Rp b25zDQo+ICArICogZXhwb3J0ZWQgYnkgdGhlIEV2ZW50IEFQSSB0byBzY2hlZHVsZSBldmVudHMs IGRlcXVldWUgZXZlbnRzLCBlbnF1ZXVlDQo+ICBldmVudHMsDQo+ICArICogY2hhbmdlIGV2ZW50 IHF1ZXVlKHMpIHRvIGV2ZW50IHBvcnQgW3VuXWxpbmsgZXN0YWJsaXNobWVudCBhbmQgc28gb24u DQo+ICArICoNCj4gICsgKiBBcHBsaWNhdGlvbiBtYXkgdXNlIHJ0ZV9ldmVudF9bcXVldWUvcG9y dF1fZGVmYXVsdF9jb25mX2dldCgpIHRvIGdldCB0aGUNCj4gICsgKiBkZWZhdWx0IGNvbmZpZ3Vy YXRpb24gdG8gc2V0IHVwIGFuIGV2ZW50IHF1ZXVlIG9yIGV2ZW50IHBvcnQgYnkNCj4gICsgKiBv dmVycmlkaW5nIGZldyBkZWZhdWx0IHZhbHVlcy4NCj4gICsgKg0KPiAgKyAqIElmIHRoZSBhcHBs aWNhdGlvbiB3YW50cyB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gKGkuZS4gY2FsbA0KPiAg KyAqIHJ0ZV9ldmVudF9kZXZfY29uZmlndXJlKCksIHJ0ZV9ldmVudF9xdWV1ZV9zZXR1cCgpLCBv cg0KPiAgKyAqIHJ0ZV9ldmVudF9wb3J0X3NldHVwKCkpLCBpdCBtdXN0IGNhbGwgcnRlX2V2ZW50 X2Rldl9zdG9wKCkgZmlyc3QgdG8gc3RvcCB0aGUNCj4gICsgKiBkZXZpY2UgYW5kIHRoZW4gZG8g dGhlIHJlY29uZmlndXJhdGlvbiBiZWZvcmUgY2FsbGluZyBydGVfZXZlbnRfZGV2X3N0YXJ0KCkN Cj4gICsgKiBhZ2Fpbi4gVGhlIHNjaGVkdWxlLCBlbnF1ZXVlIGFuZCBkZXF1ZXVlIGZ1bmN0aW9u cyBzaG91bGQgbm90IGJlIGludm9rZWQNCj4gICsgKiB3aGVuIHRoZSBkZXZpY2UgaXMgc3RvcHBl ZC4NCj4gICsgKg0KPiAgKyAqIEZpbmFsbHksIGFuIGFwcGxpY2F0aW9uIGNhbiBjbG9zZSBhbiBF dmVudCBkZXZpY2UgYnkgaW52b2tpbmcgdGhlDQo+ICArICogcnRlX2V2ZW50X2Rldl9jbG9zZSgp IGZ1bmN0aW9uLg0KPiAgKyAqDQo+ICArICogRWFjaCBmdW5jdGlvbiBvZiB0aGUgYXBwbGljYXRp b24gRXZlbnQgQVBJIGludm9rZXMgYSBzcGVjaWZpYyBmdW5jdGlvbg0KPiAgKyAqIG9mIHRoZSBQ TUQgdGhhdCBjb250cm9scyB0aGUgdGFyZ2V0IGRldmljZSBkZXNpZ25hdGVkIGJ5IGl0cyBkZXZp Y2UNCj4gICsgKiBpZGVudGlmaWVyLg0KPiAgKyAqDQo+ICArICogRm9yIHRoaXMgcHVycG9zZSwg YWxsIGRldmljZS1zcGVjaWZpYyBmdW5jdGlvbnMgb2YgYW4gRXZlbnQgZHJpdmVyIGFyZQ0KPiAg KyAqIHN1cHBsaWVkIHRocm91Z2ggYSBzZXQgb2YgcG9pbnRlcnMgY29udGFpbmVkIGluIGEgZ2Vu ZXJpYyBzdHJ1Y3R1cmUgb2YgdHlwZQ0KPiAgKyAqICpldmVudF9kZXZfb3BzKi4NCj4gICsgKiBU aGUgYWRkcmVzcyBvZiB0aGUgKmV2ZW50X2Rldl9vcHMqIHN0cnVjdHVyZSBpcyBzdG9yZWQgaW4g dGhlDQo+ICAqcnRlX2V2ZW50X2RldioNCj4gICsgKiBzdHJ1Y3R1cmUgYnkgdGhlIGRldmljZSBp bml0IGZ1bmN0aW9uIG9mIHRoZSBFdmVudCBkcml2ZXIsIHdoaWNoIGlzDQo+ICArICogaW52b2tl ZCBkdXJpbmcgdGhlIFBDSS9Tb0MgZGV2aWNlIHByb2JpbmcgcGhhc2UsIGFzIGV4cGxhaW5lZCBl YXJsaWVyLg0KPiAgKyAqDQo+ICArICogSW4gb3RoZXIgd29yZHMsIGVhY2ggZnVuY3Rpb24gb2Yg dGhlIEV2ZW50IEFQSSBzaW1wbHkgcmV0cmlldmVzIHRoZQ0KPiAgKyAqICpydGVfZXZlbnRfZGV2 KiBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgaWRlbnRpZmllciBhbmQNCj4g ICsgKiBwZXJmb3JtcyBhbiBpbmRpcmVjdCBpbnZvY2F0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5n IGRyaXZlciBmdW5jdGlvbg0KPiAgKyAqIHN1cHBsaWVkIGluIHRoZSAqZXZlbnRfZGV2X29wcyog c3RydWN0dXJlIG9mIHRoZSAqcnRlX2V2ZW50X2RldioNCj4gIHN0cnVjdHVyZS4NCj4gICsgKg0K PiAgKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGUgYWRkcmVzcyBvZiB0aGUgZmFzdC1w YXRoIGZ1bmN0aW9ucyBvZiB0aGUNCj4gICsgKiBFdmVudCBkcml2ZXIgaXMgbm90IGNvbnRhaW5l ZCBpbiB0aGUgKmV2ZW50X2Rldl9vcHMqIHN0cnVjdHVyZS4NCj4gICsgKiBJbnN0ZWFkLCB0aGV5 IGFyZSBkaXJlY3RseSBzdG9yZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgKnJ0ZV9ldmVudF9k ZXYqDQo+ICArICogc3RydWN0dXJlIHRvIGF2b2lkIGFuIGV4dHJhIGluZGlyZWN0IG1lbW9yeSBh Y2Nlc3MgZHVyaW5nIHRoZWlyIGludm9jYXRpb24uDQo+ICArICoNCj4gICsgKiBSVEUgZXZlbnQg ZGV2aWNlIGRyaXZlcnMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIGZvciBlbnF1ZXVlIG9yIGRlcXVl dWUNCj4gICsgKiBvcGVyYXRpb24uIEluc3RlYWQsIEV2ZW50IGRyaXZlcnMgZXhwb3J0IFBvbGwt TW9kZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlDQo+ICArICogZnVuY3Rpb25zIHRvIGFwcGxpY2F0aW9u cy4NCj4gICsgKg0KPiAgKyAqIEFuIGV2ZW50IGRyaXZlbiBiYXNlZCBhcHBsaWNhdGlvbiBoYXMg Zm9sbG93aW5nIHR5cGljYWwgd29ya2Zsb3cgb24NCj4gIGZhc3RwYXRoOg0KPiAgKyAqIFxjb2Rl ey5jfQ0KPiAgKyAqCXdoaWxlICgxKSB7DQo+ICArICoNCj4gICsgKgkJcnRlX2V2ZW50X3NjaGVk dWxlKGRldl9pZCk7DQo+ICArICoNCj4gICsgKgkJcnRlX2V2ZW50X2RlcXVldWUoLi4uKTsNCj4g ICsgKg0KPiAgKyAqCQkoZXZlbnQgcHJvY2Vzc2luZykNCj4gICsgKg0KPiAgKyAqCQlydGVfZXZl bnRfZW5xdWV1ZSguLi4pOw0KPiAgKyAqCX0NCj4gICsgKiBcZW5kY29kZQ0KPiAgKyAqDQo+ICAr ICogVGhlICpzY2hlZHVsZSogb3BlcmF0aW9uIGlzIGludGVuZGVkIHRvIGRvIGV2ZW50IHNjaGVk dWxpbmcsIGFuZCB0aGUNCj4gICsgKiAqZGVxdWV1ZSogb3BlcmF0aW9uIHJldHVybnMgdGhlIHNj aGVkdWxlZCBldmVudHMuIEFuIGltcGxlbWVudGF0aW9uDQo+ICArICogaXMgZnJlZSB0byBkZWZp bmUgdGhlIHNlbWFudGljcyBiZXR3ZWVuICpzY2hlZHVsZSogYW5kICpkZXF1ZXVlKi4gRm9yDQo+ ICArICogZXhhbXBsZSwgYSBzeXN0ZW0gYmFzZWQgb24gYSBoYXJkd2FyZSBzY2hlZHVsZXIgY2Fu IGRlZmluZSBpdHMNCj4gICsgKiBydGVfZXZlbnRfc2NoZWR1bGUoKSB0byBiZSBhbiBOT09QLCB3 aGVyZWFzIGEgc29mdHdhcmUgc2NoZWR1bGVyIGNhbiB1c2UNCj4gICsgKiB0aGUgKnNjaGVkdWxl KiBvcGVyYXRpb24gdG8gc2NoZWR1bGUgZXZlbnRzLg0KPiAgKyAqDQo+ICArICogVGhlIGV2ZW50 cyBhcmUgaW5qZWN0ZWQgdG8gZXZlbnQgZGV2aWNlIHRocm91Z2ggKmVucXVldWUqIG9wZXJhdGlv biBieQ0KPiAgKyAqIGV2ZW50IHByb2R1Y2VycyBpbiB0aGUgc3lzdGVtLiBUaGUgdHlwaWNhbCBl dmVudCBwcm9kdWNlcnMgYXJlIGV0aGRldg0KPiAgKyAqIHN1YnN5c3RlbSBmb3IgZ2VuZXJhdGlu ZyBwYWNrZXQgZXZlbnRzLCBjb3JlKFNXKSBmb3IgZ2VuZXJhdGluZyBldmVudHMNCj4gIGJhc2Vk DQo+ICArICogb24gZGlmZmVyZW50IHN0YWdlcyBvZiBhcHBsaWNhdGlvbiBwcm9jZXNzaW5nLCBj cnlwdG9kZXYgZm9yIGdlbmVyYXRpbmcNCj4gICsgKiBjcnlwdG8gd29yayBjb21wbGV0aW9uIG5v dGlmaWNhdGlvbiBldGMNCj4gICsgKg0KPiAgKyAqIFRoZSAqZGVxdWV1ZSogb3BlcmF0aW9uIGdl dHMgb25lIG9yIG1vcmUgZXZlbnRzIGZyb20gdGhlIGV2ZW50IHBvcnRzLg0KPiAgKyAqIFRoZSBh cHBsaWNhdGlvbiBwcm9jZXNzIHRoZSBldmVudHMgYW5kIHNlbmQgdG8gZG93bnN0cmVhbSBldmVu dCBxdWV1ZQ0KPiAgdGhyb3VnaA0KPiAgKyAqIHJ0ZV9ldmVudF9lbnF1ZXVlKCkgaWYgaXQgaXMg YW4gaW50ZXJtZWRpYXRlIHN0YWdlIG9mIGV2ZW50IHByb2Nlc3NpbmcsIG9uDQo+ICArICogdGhl IGZpbmFsIHN0YWdlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNlbmQgdG8gZGlmZmVyZW50IHN1YnN5 c3RlbSBsaWtlIGV0aGRldg0KPiAgKyAqIHRvIHNlbmQgdGhlIHBhY2tldC9ldmVudCBvbiB0aGUg d2lyZSB1c2luZyBldGhkZXYgcnRlX2V0aF90eF9idXJzdCgpIEFQSS4NCj4gICsgKg0KPiAgKyAq Lw0KPiAgKw0KPiAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiAgK2V4dGVybiAiQyIgew0KPiAgKyNl bmRpZg0KPiAgKw0KPiAgKyNpbmNsdWRlIDxydGVfcGNpLmg+DQo+ICArI2luY2x1ZGUgPHJ0ZV9k ZXYuaD4NCj4gICsjaW5jbHVkZSA8cnRlX2RldmFyZ3MuaD4NCj4gICsjaW5jbHVkZSA8cnRlX2Vy cm5vLmg+DQo+ICArDQo+ICArLyoqDQo+ICArICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgZXZl bnQgZGV2aWNlcyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkNCj4gICsgKiBpbml0aWFsaXNl ZC4NCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIFRoZSB0b3RhbCBudW1iZXIgb2Yg dXNhYmxlIGV2ZW50IGRldmljZXMuDQo+ICArICovDQo+ICArZXh0ZXJuIHVpbnQ4X3QNCj4gICty dGVfZXZlbnRfZGV2X2NvdW50KHZvaWQpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIEdldCB0aGUg ZGV2aWNlIGlkZW50aWZpZXIgZm9yIHRoZSBuYW1lZCBldmVudCBkZXZpY2UuDQo+ICArICoNCj4g ICsgKiBAcGFyYW0gbmFtZQ0KPiAgKyAqICAgRXZlbnQgZGV2aWNlIG5hbWUgdG8gc2VsZWN0IHRo ZSBldmVudCBkZXZpY2UgaWRlbnRpZmllci4NCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsg KiAgIFJldHVybnMgZXZlbnQgZGV2aWNlIGlkZW50aWZpZXIgb24gc3VjY2Vzcy4NCj4gICsgKiAg IC0gPDA6IEZhaWx1cmUgdG8gZmluZCBuYW1lZCBldmVudCBkZXZpY2UuDQo+ICArICovDQo+ICAr ZXh0ZXJuIHVpbnQ4X3QNCj4gICtydGVfZXZlbnRfZGV2X2dldF9kZXZfaWQoY29uc3QgY2hhciAq bmFtZSk7DQoNClRoaXMgcmV0dXJuIHR5cGUgc2hvdWxkIGJlIGludDhfdCwgb3Igc29tZSBzaWdu ZWQgdHlwZSwgdG8gc3VwcG9ydCB0aGUgZmFpbHVyZSBjYXNlLg0KDQo+ICArDQo+ICArLyoqDQo+ ICArICogUmV0dXJuIHRoZSBOVU1BIHNvY2tldCB0byB3aGljaCBhIGRldmljZSBpcyBjb25uZWN0 ZWQuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmll ciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIFRoZSBOVU1BIHNvY2tl dCBpZCB0byB3aGljaCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCBvcg0KPiAgKyAqICAgYSBkZWZh dWx0IG9mIHplcm8gaWYgdGhlIHNvY2tldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4NCj4gICsg KiAgIC0gLTE6IGRldl9pZCB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UuDQo+ICArICovDQo+ICArZXh0 ZXJuIGludA0KPiAgK3J0ZV9ldmVudF9kZXZfc29ja2V0X2lkKHVpbnQ4X3QgZGV2X2lkKTsNCj4g ICsNCj4gICsvKiBFdmVudCBkZXZpY2UgY2FwYWJpbGl0eSBiaXRtYXAgZmxhZ3MgKi8NCj4gICsj ZGVmaW5lIFJURV9FVkVOVF9ERVZfQ0FQX1FVRVVFX1FPUyAgICAgICAgKDEgPDwgMCkNCj4gICsv Kio8IEV2ZW50IHNjaGVkdWxpbmcgcHJpb3JpdGl6YXRpb24gaXMgYmFzZWQgb24gdGhlIHByaW9y aXR5IGFzc29jaWF0ZWQgd2l0aA0KPiAgKyAqICBlYWNoIGV2ZW50IHF1ZXVlLg0KPiAgKyAqDQo+ ICArICogIFxzZWUgcnRlX2V2ZW50X3F1ZXVlX3NldHVwKCksIFJURV9FVkVOVF9RVUVVRV9QUklP UklUWV9OT1JNQUwNCj4gICsgKi8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9ERVZfQ0FQX0VWRU5U X1FPUyAgICAgICAgKDEgPDwgMSkNCj4gICsvKio8IEV2ZW50IHNjaGVkdWxpbmcgcHJpb3JpdGl6 YXRpb24gaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aA0KPiAgKyAqICBl YWNoIGV2ZW50LiBQcmlvcml0eSBvZiBlYWNoIGV2ZW50IGlzIHN1cHBsaWVkIGluICpydGVfZXZl bnQqIHN0cnVjdHVyZQ0KPiAgKyAqICBvbiBlYWNoIGVucXVldWUgb3BlcmF0aW9uLg0KPiAgKyAq DQo+ICArICogIFxzZWUgcnRlX2V2ZW50X2VucXVldWUoKQ0KPiAgKyAqLw0KPiAgKw0KPiAgKy8q Kg0KPiAgKyAqIEV2ZW50IGRldmljZSBpbmZvcm1hdGlvbg0KPiAgKyAqLw0KPiAgK3N0cnVjdCBy dGVfZXZlbnRfZGV2X2luZm8gew0KPiAgKwljb25zdCBjaGFyICpkcml2ZXJfbmFtZTsJLyoqPCBF dmVudCBkcml2ZXIgbmFtZSAqLw0KPiAgKwlzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKnBjaV9kZXY7 CS8qKjwgUENJIGluZm9ybWF0aW9uICovDQo+ICArCXVpbnQzMl90IG1pbl9kZXF1ZXVlX3dhaXRf bnM7DQo+ICArCS8qKjwgTWluaW11bSBzdXBwb3J0ZWQgZ2xvYmFsIGRlcXVldWUgd2FpdCBkZWxh eShucykgYnkgdGhpcyBkZXZpY2UNCj4gICovDQo+ICArCXVpbnQzMl90IG1heF9kZXF1ZXVlX3dh aXRfbnM7DQo+ICArCS8qKjwgTWF4aW11bSBzdXBwb3J0ZWQgZ2xvYmFsIGRlcXVldWUgd2FpdCBk ZWxheShucykgYnkgdGhpcyBkZXZpY2UNCj4gICovDQo+ICArCXVpbnQzMl90IGRlcXVldWVfd2Fp dF9uczsNCj4gICsJLyoqPCBDb25maWd1cmVkIGdsb2JhbCBkZXF1ZXVlIHdhaXQgZGVsYXkobnMp IGZvciB0aGlzIGRldmljZSAqLw0KPiAgKwl1aW50OF90IG1heF9ldmVudF9xdWV1ZXM7DQo+ICAr CS8qKjwgTWF4aW11bSBldmVudF9xdWV1ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlICovDQo+ ICArCXVpbnQzMl90IG1heF9ldmVudF9xdWV1ZV9mbG93czsNCj4gICsJLyoqPCBNYXhpbXVtIHN1 cHBvcnRlZCBmbG93cyBpbiBhbiBldmVudCBxdWV1ZSBieSB0aGlzIGRldmljZSovDQo+ICArCXVp bnQ4X3QgbWF4X2V2ZW50X3F1ZXVlX3ByaW9yaXR5X2xldmVsczsNCj4gICsJLyoqPCBNYXhpbXVt IG51bWJlciBvZiBldmVudCBxdWV1ZSBwcmlvcml0eSBsZXZlbHMgYnkgdGhpcyBkZXZpY2UuDQo+ ICArCSAqIFZhbGlkIHdoZW4gdGhlIGRldmljZSBoYXMgUlRFX0VWRU5UX0RFVl9DQVBfUVVFVUVf UU9TDQo+ICBjYXBhYmlsaXR5DQo+ICArCSAqLw0KPiAgKwl1aW50OF90IG5iX2V2ZW50X3F1ZXVl czsNCj4gICsJLyoqPCBDb25maWd1cmVkIG51bWJlciBvZiBldmVudCBxdWV1ZXMgZm9yIHRoaXMg ZGV2aWNlICovDQo+ICArCXVpbnQ4X3QgbWF4X2V2ZW50X3ByaW9yaXR5X2xldmVsczsNCj4gICsJ LyoqPCBNYXhpbXVtIG51bWJlciBvZiBldmVudCBwcmlvcml0eSBsZXZlbHMgYnkgdGhpcyBkZXZp Y2UuDQo+ICArCSAqIFZhbGlkIHdoZW4gdGhlIGRldmljZSBoYXMgUlRFX0VWRU5UX0RFVl9DQVBf RVZFTlRfUU9TDQo+ICBjYXBhYmlsaXR5DQo+ICArICAgICAgICAgKi8NCj4gICsJdWludDhfdCBt YXhfZXZlbnRfcG9ydHM7DQo+ICArCS8qKjwgTWF4aW11bSBudW1iZXIgb2YgZXZlbnQgcG9ydHMg c3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlICovDQo+ICArCXVpbnQ4X3QgbmJfZXZlbnRfcG9ydHM7 DQo+ICArCS8qKjwgQ29uZmlndXJlZCBudW1iZXIgb2YgZXZlbnQgcG9ydHMgZm9yIHRoaXMgZGV2 aWNlICovDQo+ICArCXVpbnQ4X3QgbWF4X2V2ZW50X3BvcnRfZGVxdWV1ZV9xdWV1ZV9kZXB0aDsN Cj4gICsJLyoqPCBNYXhpbXVtIGRlcXVldWUgcXVldWUgZGVwdGggZm9yIGFueSBldmVudCBwb3J0 Lg0KPiAgKwkgKiBJbXBsZW1lbnRhdGlvbnMgY2FuIHNjaGVkdWxlIE4gZXZlbnRzIGF0IGEgdGlt ZSB0byBhbiBldmVudCBwb3J0Lg0KPiAgKwkgKiBBIGRldmljZSB0aGF0IGRvZXMgbm90IHN1cHBv cnQgYnVsayBkZXF1ZXVlIHdpbGwgc2V0IHRoaXMgYXMgMS4NCj4gICsJICogXHNlZSBydGVfZXZl bnRfcG9ydF9zZXR1cCgpDQo+ICArCSAqLw0KPiAgKwl1aW50MzJfdCBtYXhfZXZlbnRfcG9ydF9l bnF1ZXVlX3F1ZXVlX2RlcHRoOw0KPiAgKwkvKio8IE1heGltdW0gZW5xdWV1ZSBxdWV1ZSBkZXB0 aCBmb3IgYW55IGV2ZW50IHBvcnQuDQo+ICBJbXBsZW1lbnRhdGlvbnMNCj4gICsJICogY2FuIGJh dGNoIE4gZXZlbnRzIGF0IGEgdGltZSB0byBlbnF1ZXVlIHRocm91Z2ggZXZlbnQgcG9ydA0KPiAg KwkgKiBcc2VlIHJ0ZV9ldmVudF9wb3J0X3NldHVwKCkNCj4gICsJICovDQo+ICArCWludDMyX3Qg bWF4X251bV9ldmVudHM7DQo+ICArCS8qKjwgQSAqY2xvc2VkIHN5c3RlbSogZXZlbnQgZGV2IGhh cyBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgZXZlbnRzDQo+ICBpdA0KPiAgKwkgKiBjYW4gbWFu YWdlIGF0IGEgdGltZS4gQW4gKm9wZW4gc3lzdGVtKiBldmVudCBkZXYgZG9lcyBub3QgaGF2ZSBh DQo+ICArCSAqIGxpbWl0IGFuZCB3aWxsIHNwZWNpZnkgdGhpcyBhcyAtMS4NCj4gICsJICovDQo+ ICArCXVpbnQzMl90IGV2ZW50X2Rldl9jYXA7DQo+ICArCS8qKjwgRXZlbnQgZGV2aWNlIGNhcGFi aWxpdGllcyhSVEVfRVZFTlRfREVWX0NBUF8pKi8NCj4gICt9Ow0KPiAgKw0KPiAgKy8qKg0KPiAg KyAqIFJldHJpZXZlIHRoZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIG9mIGFuIGV2ZW50IGRldmlj ZS4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIFRoZSBpZGVudGlmaWVy IG9mIHRoZSBkZXZpY2UuDQo+ICArICoNCj4gICsgKiBAcGFyYW1bb3V0XSBkZXZfaW5mbw0KPiAg KyAqICAgQSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9mIHR5cGUgKnJ0ZV9ldmVudF9kZXZfaW5m byogdG8gYmUgZmlsbGVkIHdpdGggdGhlDQo+ICArICogICBjb250ZXh0dWFsIGluZm9ybWF0aW9u IG9mIHRoZSBkZXZpY2UuDQo+ICArICoNCj4gICsgKi8NCj4gICtleHRlcm4gdm9pZA0KPiAgK3J0 ZV9ldmVudF9kZXZfaW5mb19nZXQodWludDhfdCBkZXZfaWQsIHN0cnVjdCBydGVfZXZlbnRfZGV2 X2luZm8NCj4gICpkZXZfaW5mbyk7DQoNCkknbSB3b25kZXJpbmcgaWYgdGhpcyByZXR1cm4gdHlw ZSBzaG91bGQgYmUgaW50LCBzbyB3ZSBjYW4gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBkZXZfaWQg aXMgaW52YWxpZC4NCg0KPiAgKw0KPiAgKy8qIEV2ZW50IGRldmljZSBjb25maWd1cmF0aW9uIGJp dG1hcCBmbGFncyAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX0RFVl9DRkdfUEVSX0RFUVVFVUVf V0FJVCAoMSA8PCAwKQ0KPiAgKy8qKjwgT3ZlcnJpZGUgdGhlIGdsb2JhbCAqZGVxdWV1ZV93YWl0 X25zKiBhbmQgdXNlIHBlciBkZXF1ZXVlIHdhaXQgaW4gbnMuDQo+ICArICogIFxzZWUgcnRlX2V2 ZW50X2RlcXVldWVfd2FpdF90aW1lKCksIHJ0ZV9ldmVudF9kZXF1ZXVlKCkNCj4gICsgKi8NCj4g ICsNCj4gICsvKiogRXZlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovDQo+ICAr c3RydWN0IHJ0ZV9ldmVudF9kZXZfY29uZmlnIHsNCj4gICsJdWludDMyX3QgZGVxdWV1ZV93YWl0 X25zOw0KPiAgKwkvKio8IHJ0ZV9ldmVudF9kZXF1ZXVlKCkgd2FpdCBmb3IgKmRlcXVldWVfd2Fp dF9ucyogbnMgb24gdGhpcw0KPiAgZGV2aWNlLg0KPiAgKwkgKiBUaGlzIHZhbHVlIHNob3VsZCBi ZSBpbiB0aGUgcmFuZ2Ugb2YgKm1pbl9kZXF1ZXVlX3dhaXRfbnMqIGFuZA0KPiAgKwkgKiAqbWF4 X2RlcXVldWVfd2FpdF9ucyogd2hpY2ggcHJldmlvdXNseSBwcm92aWRlZCBpbg0KPiAgKwkgKiBy dGVfZXZlbnRfZGV2X2luZm9fZ2V0KCkNCj4gICsJICogXHNlZSBSVEVfRVZFTlRfREVWX0NGR19Q RVJfREVRVUVVRV9XQUlUDQo+ICArCSAqLw0KPiAgKwlpbnQzMl90IG5iX2V2ZW50c19saW1pdDsN Cj4gICsJLyoqPCBBcHBsaWVzIHRvICpjbG9zZWQgc3lzdGVtKiBldmVudCBkZXYgb25seS4gVGhp cyBmaWVsZCBpbmRpY2F0ZXMgYQ0KPiAgKwkgKiBsaW1pdCB0byBldGhkZXYtbGlrZSBkZXZpY2Vz IHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIGluamVjdGVkDQo+ICArCSAqIGludG8gdGhl IHN5c3RlbSB0byBub3Qgb3ZlcndoZWxtIGNvcmUtdG8tY29yZSBldmVudHMuDQo+ICArCSAqIFRo aXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUgKm1heF9udW1fZXZlbnRzKiB3aGljaCBwcmV2aW91 c2x5DQo+ICArCSAqIHByb3ZpZGVkIGluIHJ0ZV9ldmVudF9kZXZfaW5mb19nZXQoKQ0KPiAgKwkg Ki8NCj4gICsJdWludDhfdCBuYl9ldmVudF9xdWV1ZXM7DQo+ICArCS8qKjwgTnVtYmVyIG9mIGV2 ZW50IHF1ZXVlcyB0byBjb25maWd1cmUgb24gdGhpcyBkZXZpY2UuDQo+ICArCSAqIFRoaXMgdmFs dWUgY2Fubm90IGV4Y2VlZCB0aGUgKm1heF9ldmVudF9xdWV1ZXMqIHdoaWNoIHByZXZpb3VzbHkN Cj4gICsJICogcHJvdmlkZWQgaW4gcnRlX2V2ZW50X2Rldl9pbmZvX2dldCgpDQo+ICArCSAqLw0K PiAgKwl1aW50OF90IG5iX2V2ZW50X3BvcnRzOw0KPiAgKwkvKio8IE51bWJlciBvZiBldmVudCBw b3J0cyB0byBjb25maWd1cmUgb24gdGhpcyBkZXZpY2UuDQo+ICArCSAqIFRoaXMgdmFsdWUgY2Fu bm90IGV4Y2VlZCB0aGUgKm1heF9ldmVudF9wb3J0cyogd2hpY2ggcHJldmlvdXNseQ0KPiAgKwkg KiBwcm92aWRlZCBpbiBydGVfZXZlbnRfZGV2X2luZm9fZ2V0KCkNCj4gICsJICovDQo+ICArCXVp bnQzMl90IGV2ZW50X2Rldl9jZmc7DQo+ICArCS8qKjwgRXZlbnQgZGV2aWNlIGNvbmZpZyBmbGFn cyhSVEVfRVZFTlRfREVWX0NGR18pKi8NCj4gICt9Ow0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIENv bmZpZ3VyZSBhbiBldmVudCBkZXZpY2UuDQo+ICArICoNCj4gICsgKiBUaGlzIGZ1bmN0aW9uIG11 c3QgYmUgaW52b2tlZCBmaXJzdCBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uIGluIHRoZQ0KPiAg KyAqIEFQSS4gVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSByZS1pbnZva2VkIHdoZW4gYSBkZXZp Y2UgaXMgaW4gdGhlDQo+ICArICogc3RvcHBlZCBzdGF0ZS4NCj4gICsgKg0KPiAgKyAqIFRoZSBj YWxsZXIgbWF5IHVzZSBydGVfZXZlbnRfZGV2X2luZm9fZ2V0KCkgdG8gZ2V0IHRoZSBjYXBhYmls aXR5IG9mIGVhY2gNCj4gICsgKiByZXNvdXJjZXMgYXZhaWxhYmxlIGZvciB0aGlzIGV2ZW50IGRl dmljZS4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIFRoZSBpZGVudGlm aWVyIG9mIHRoZSBkZXZpY2UgdG8gY29uZmlndXJlLg0KPiAgKyAqIEBwYXJhbSBjb25maWcNCj4g ICsgKiAgIFRoZSBldmVudCBkZXZpY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuDQo+ICArICoN Cj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIDA6IFN1Y2Nlc3MsIGRldmljZSBjb25maWd1cmVk Lg0KPiAgKyAqICAgLSA8MDogRXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgZHJpdmVyIGNvbmZp Z3VyYXRpb24gZnVuY3Rpb24uDQo+ICArICovDQo+ICArZXh0ZXJuIGludA0KPiAgK3J0ZV9ldmVu dF9kZXZfY29uZmlndXJlKHVpbnQ4X3QgZGV2X2lkLCBzdHJ1Y3QgcnRlX2V2ZW50X2Rldl9jb25m aWcNCj4gICpjb25maWcpOw0KPiAgKw0KPiAgKw0KPiAgKy8qIEV2ZW50IHF1ZXVlIHNwZWNpZmlj IEFQSXMgKi8NCj4gICsNCj4gICsjZGVmaW5lIFJURV9FVkVOVF9RVUVVRV9QUklPUklUWV9ISUdI RVNUICAgMA0KPiAgKy8qKjwgSGlnaGVzdCBldmVudCBxdWV1ZSBwcmlvcml0eSAqLw0KPiAgKyNk ZWZpbmUgUlRFX0VWRU5UX1FVRVVFX1BSSU9SSVRZX05PUk1BTCAgICAxMjgNCj4gICsvKio8IE5v cm1hbCBldmVudCBxdWV1ZSBwcmlvcml0eSAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX1FVRVVF X1BSSU9SSVRZX0xPV0VTVCAgICAyNTUNCj4gICsvKio8IExvd2VzdCBldmVudCBxdWV1ZSBwcmlv cml0eSAqLw0KPiAgKw0KPiAgKy8qIEV2ZW50IHF1ZXVlIGNvbmZpZ3VyYXRpb24gYml0bWFwIGZs YWdzICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfUVVFVUVfQ0ZHX1NJTkdMRV9DT05TVU1FUiAg ICAoMSA8PCAwKQ0KPiAgKy8qKjwgVGhpcyBldmVudCBxdWV1ZSBsaW5rcyBvbmx5IHRvIGEgc2lu Z2xlIGV2ZW50IHBvcnQuDQo+ICArICoNCj4gICsgKiAgXHNlZSBydGVfZXZlbnRfcG9ydF9zZXR1 cCgpLCBydGVfZXZlbnRfcG9ydF9saW5rKCkNCj4gICsgKi8NCj4gICsNCj4gICsvKiogRXZlbnQg cXVldWUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8NCj4gICtzdHJ1Y3QgcnRlX2V2ZW50X3F1 ZXVlX2NvbmYgew0KPiAgKwl1aW50MzJfdCBuYl9hdG9taWNfZmxvd3M7DQo+ICArCS8qKjwgVGhl IG1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSBmbG93cyB0aGlzIHF1ZXVlIGNhbiB0cmFjayBhdCBh bnkNCj4gICsJICogZ2l2ZW4gdGltZS4gVGhlIHZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9m DQo+ICArCSAqIFsxIC0gbWF4X2V2ZW50X3F1ZXVlX2Zsb3dzKV0gd2hpY2ggcHJldmlvdXNseSBz dXBwbGllZA0KPiAgKwkgKiB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpLg0KPiAgKwkgKi8N Cj4gICsJdWludDMyX3QgbmJfYXRvbWljX29yZGVyX3NlcXVlbmNlczsNCj4gICsJLyoqPCBUaGUg bWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgZXZlbnRzIHdhaXRpbmcgdG8gYmUNCj4gIChl Z3Jlc3MtKQ0KPiAgKwkgKiByZW9yZGVyZWQgYnkgdGhpcyBxdWV1ZS4gSW4gb3RoZXIgd29yZHMs IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbg0KPiAgKwkgKiB0aGlzIHF1ZXVl4oCZcyByZW9yZGVy IGJ1ZmZlci5UaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YNCj4gICsJICogWzEgLSBt YXhfZXZlbnRfcXVldWVfZmxvd3MpXSB3aGljaCBwcmV2aW91c2x5IHN1cHBsaWVkDQo+ICArCSAq IHRvIHJ0ZV9ldmVudF9kZXZfY29uZmlndXJlKCkuDQo+ICArCSAqLw0KPiAgKwl1aW50MzJfdCBl dmVudF9xdWV1ZV9jZmc7IC8qKjwgUXVldWUgY29uZmlnDQo+ICBmbGFncyhFVkVOVF9RVUVVRV9D RkdfKSAqLw0KPiAgKwl1aW50OF90IHByaW9yaXR5Ow0KPiAgKwkvKio8IFByaW9yaXR5IGZvciB0 aGlzIGV2ZW50IHF1ZXVlIHJlbGF0aXZlIHRvIG90aGVyIGV2ZW50IHF1ZXVlcy4NCj4gICsJICog VGhlIHJlcXVlc3RlZCBwcmlvcml0eSBzaG91bGQgaW4gdGhlIHJhbmdlIG9mDQo+ICArCSAqIFtS VEVfRVZFTlRfUVVFVUVfUFJJT1JJVFlfSElHSEVTVCwNCj4gIFJURV9FVkVOVF9RVUVVRV9QUklP UklUWV9MT1dFU1RdLg0KPiAgKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gc2hhbGwgbm9ybWFsaXpl IHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgdG8NCj4gICsJICogZXZlbnQgZGV2aWNlIHN1cHBvcnRl ZCBwcmlvcml0eSB2YWx1ZS4NCj4gICsJICogVmFsaWQgd2hlbiB0aGUgZGV2aWNlIGhhcyBSVEVf RVZFTlRfREVWX0NBUF9RVUVVRV9RT1MNCj4gIGNhcGFiaWxpdHkNCj4gICsJICovDQo+ICArfTsN Cj4gICsNCj4gICsvKioNCj4gICsgKiBSZXRyaWV2ZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9u IGluZm9ybWF0aW9uIG9mIGFuIGV2ZW50IHF1ZXVlDQo+ICBkZXNpZ25hdGVkDQo+ICArICogYnkg aXRzICpxdWV1ZV9pZCogZnJvbSB0aGUgZXZlbnQgZHJpdmVyIGZvciBhbiBldmVudCBkZXZpY2Uu DQo+ICArICoNCj4gICsgKiBUaGlzIGZ1bmN0aW9uIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29u anVuY3Rpb24gd2l0aA0KPiAgcnRlX2V2ZW50X3F1ZXVlX3NldHVwKCkNCj4gICsgKiB3aGVyZSBj YWxsZXIgbmVlZHMgdG8gc2V0IHVwIHRoZSBxdWV1ZSBieSBvdmVycmlkaW5nIGZldyBkZWZhdWx0 IHZhbHVlcy4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIFRoZSBpZGVu dGlmaWVyIG9mIHRoZSBkZXZpY2UuDQo+ICArICogQHBhcmFtIHF1ZXVlX2lkDQo+ICArICogICBU aGUgaW5kZXggb2YgdGhlIGV2ZW50IHF1ZXVlIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBpbmZv cm1hdGlvbi4NCj4gICsgKiAgIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJf ZXZlbnRfcXVldWVzIC0gMV0NCj4gICsgKiAgIHByZXZpb3VzbHkgc3VwcGxpZWQgdG8gcnRlX2V2 ZW50X2Rldl9jb25maWd1cmUoKS4NCj4gICsgKiBAcGFyYW1bb3V0XSBxdWV1ZV9jb25mDQo+ICAr ICogICBUaGUgcG9pbnRlciB0byB0aGUgZGVmYXVsdCBldmVudCBxdWV1ZSBjb25maWd1cmF0aW9u IGRhdGEuDQo+ICArICoNCj4gICsgKiBcc2VlIHJ0ZV9ldmVudF9xdWV1ZV9zZXR1cCgpDQo+ICAr ICoNCj4gICsgKi8NCj4gICtleHRlcm4gdm9pZA0KPiAgK3J0ZV9ldmVudF9xdWV1ZV9kZWZhdWx0 X2NvbmZfZ2V0KHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHF1ZXVlX2lkLA0KPiAgKwkJCQkgc3Ry dWN0IHJ0ZV9ldmVudF9xdWV1ZV9jb25mICpxdWV1ZV9jb25mKTsNCj4gICsNCj4gICsvKioNCj4g ICsgKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIGFuIGV2ZW50IHF1ZXVlIGZvciBhbiBldmVudCBkZXZp Y2UuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmll ciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEBwYXJhbSBxdWV1ZV9pZA0KPiAgKyAqICAgVGhlIGlu ZGV4IG9mIHRoZSBldmVudCBxdWV1ZSB0byBzZXR1cC4gVGhlIHZhbHVlIG11c3QgYmUgaW4gdGhl IHJhbmdlDQo+ICArICogICBbMCwgbmJfZXZlbnRfcXVldWVzIC0gMV0gcHJldmlvdXNseSBzdXBw bGllZCB0bw0KPiAgcnRlX2V2ZW50X2Rldl9jb25maWd1cmUoKS4NCj4gICsgKiBAcGFyYW0gcXVl dWVfY29uZg0KPiAgKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSB0 byBiZSB1c2VkIGZvciB0aGUgZXZlbnQgcXVldWUuDQo+ICArICogICBOVUxMIHZhbHVlIGlzIGFs bG93ZWQsIGluIHdoaWNoIGNhc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uCXVzZWQuDQo+ICArICoN Cj4gICsgKiBcc2VlIHJ0ZV9ldmVudF9xdWV1ZV9kZWZhdWx0X2NvbmZfZ2V0KCkNCj4gICsgKg0K PiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIC0gMDogU3VjY2VzcywgZXZlbnQgcXVldWUgY29ycmVj dGx5IHNldCB1cC4NCj4gICsgKiAgIC0gPDA6IGV2ZW50IHF1ZXVlIGNvbmZpZ3VyYXRpb24gZmFp bGVkDQo+ICArICovDQo+ICArZXh0ZXJuIGludA0KPiAgK3J0ZV9ldmVudF9xdWV1ZV9zZXR1cCh1 aW50OF90IGRldl9pZCwgdWludDhfdCBxdWV1ZV9pZCwNCj4gICsJCSAgICAgIHN0cnVjdCBydGVf ZXZlbnRfcXVldWVfY29uZiAqcXVldWVfY29uZik7DQo+ICArDQo+ICArLyoqDQo+ICArICogR2V0 IHRoZSBudW1iZXIgb2YgZXZlbnQgcXVldWVzIG9uIGEgc3BlY2lmaWMgZXZlbnQgZGV2aWNlDQo+ ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBFdmVudCBkZXZpY2UgaWRlbnRp Zmllci4NCj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIFRoZSBudW1iZXIgb2YgY29uZmlndXJl ZCBldmVudCBxdWV1ZXMNCj4gICsgKi8NCj4gICtleHRlcm4gdWludDE2X3QNCj4gICtydGVfZXZl bnRfcXVldWVfY291bnQodWludDhfdCBkZXZfaWQpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIEdl dCB0aGUgcHJpb3JpdHkgb2YgdGhlIGV2ZW50IHF1ZXVlIG9uIGEgc3BlY2lmaWMgZXZlbnQgZGV2 aWNlDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBFdmVudCBkZXZpY2Ug aWRlbnRpZmllci4NCj4gICsgKiBAcGFyYW0gcXVldWVfaWQNCj4gICsgKiAgIEV2ZW50IHF1ZXVl IGlkZW50aWZpZXIuDQo+ICArICogQHJldHVybg0KPiAgKyAqICAgLSBJZiB0aGUgZGV2aWNlIGhh cyBSVEVfRVZFTlRfREVWX0NBUF9RVUVVRV9RT1MgY2FwYWJpbGl0eSB0aGVuIHRoZQ0KPiAgKyAq ICAgIGNvbmZpZ3VyZWQgcHJpb3JpdHkgb2YgdGhlIGV2ZW50IHF1ZXVlIGluDQo+ICArICogICAg W1JURV9FVkVOVF9RVUVVRV9QUklPUklUWV9ISUdIRVNULA0KPiAgUlRFX0VWRU5UX1FVRVVFX1BS SU9SSVRZX0xPV0VTVF0gcmFuZ2UNCj4gICsgKiAgICBlbHNlIHRoZSB2YWx1ZSBvbmUNCj4gICsg Ki8NCj4gICtleHRlcm4gdWludDhfdA0KPiAgK3J0ZV9ldmVudF9xdWV1ZV9wcmlvcml0eSh1aW50 OF90IGRldl9pZCwgdWludDhfdCBxdWV1ZV9pZCk7DQo+ICArDQo+ICArLyogRXZlbnQgcG9ydCBz cGVjaWZpYyBBUElzICovDQo+ICArDQo+ICArLyoqIEV2ZW50IHBvcnQgY29uZmlndXJhdGlvbiBz dHJ1Y3R1cmUgKi8NCj4gICtzdHJ1Y3QgcnRlX2V2ZW50X3BvcnRfY29uZiB7DQo+ICArCWludDMy X3QgbmV3X2V2ZW50X3RocmVzaG9sZDsNCj4gICsJLyoqPCBBIGJhY2twcmVzc3VyZSB0aHJlc2hv bGQgZm9yIG5ldyBldmVudCBlbnF1ZXVlcyBvbiB0aGlzIHBvcnQuDQo+ICArCSAqIFVzZSBmb3Ig KmNsb3NlZCBzeXN0ZW0qIGV2ZW50IGRldiB3aGVyZSBldmVudCBjYXBhY2l0eSBpcyBsaW1pdGVk LA0KPiAgKwkgKiBhbmQgY2Fubm90IGV4Y2VlZCB0aGUgY2FwYWNpdHkgb2YgdGhlIGV2ZW50IGRl di4NCj4gICsJICogQ29uZmlndXJpbmcgcG9ydHMgd2l0aCBkaWZmZXJlbnQgdGhyZXNob2xkcyBj YW4gbWFrZSBoaWdoZXIgcHJpb3JpdHkNCj4gICsJICogdHJhZmZpYyBsZXNzIGxpa2VseSB0byAg YmUgYmFja3ByZXNzdXJlZC4NCj4gICsJICogRm9yIGV4YW1wbGUsIGEgcG9ydCB1c2VkIHRvIGlu amVjdCBOSUMgUnggcGFja2V0cyBpbnRvIHRoZSBldmVudCBkZXYNCj4gICsJICogY2FuIGhhdmUg YSBsb3dlciB0aHJlc2hvbGQgc28gYXMgbm90IHRvIG92ZXJ3aGVsbSB0aGUgZGV2aWNlLA0KPiAg KwkgKiB3aGlsZSBwb3J0cyB1c2VkIGZvciB3b3JrZXIgcG9vbHMgY2FuIGhhdmUgYSBoaWdoZXIg dGhyZXNob2xkLg0KPiAgKwkgKi8NCj4gICsJdWludDhfdCBkZXF1ZXVlX3F1ZXVlX2RlcHRoOw0K PiAgKwkvKio8IENvbmZpZ3VyZSBudW1iZXIgb2YgYnVsayBkZXF1ZXVlcyBmb3IgdGhpcyBldmVu dCBwb3J0Lg0KPiAgKwkgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlDQo+ICAqbWF4X2V2 ZW50X3BvcnRfZGVxdWV1ZV9xdWV1ZV9kZXB0aCoNCj4gICsJICogd2hpY2ggcHJldmlvdXNseSBz dXBwbGllZCB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpDQo+ICArCSAqLw0KPiAgKwl1aW50 OF90IGVucXVldWVfcXVldWVfZGVwdGg7DQo+ICArCS8qKjwgQ29uZmlndXJlIG51bWJlciBvZiBi dWxrIGVucXVldWVzIGZvciB0aGlzIGV2ZW50IHBvcnQuDQo+ICArCSAqIFRoaXMgdmFsdWUgY2Fu bm90IGV4Y2VlZCB0aGUNCj4gICptYXhfZXZlbnRfcG9ydF9lbnF1ZXVlX3F1ZXVlX2RlcHRoKg0K PiAgKwkgKiB3aGljaCBwcmV2aW91c2x5IHN1cHBsaWVkIHRvIHJ0ZV9ldmVudF9kZXZfY29uZmln dXJlKCkNCj4gICsJICovDQo+ICArfTsNCj4gICsNCj4gICsvKioNCj4gICsgKiBSZXRyaWV2ZSB0 aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIG9mIGFuIGV2ZW50IHBvcnQgZGVz aWduYXRlZA0KPiAgKyAqIGJ5IGl0cyAqcG9ydF9pZCogZnJvbSB0aGUgZXZlbnQgZHJpdmVyIGZv ciBhbiBldmVudCBkZXZpY2UuDQo+ICArICoNCj4gICsgKiBUaGlzIGZ1bmN0aW9uIGludGVuZGVk IHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aA0KPiAgcnRlX2V2ZW50X3BvcnRfc2V0dXAo KQ0KPiAgKyAqIHdoZXJlIGNhbGxlciBuZWVkcyB0byBzZXQgdXAgdGhlIHBvcnQgYnkgb3ZlcnJp ZGluZyBmZXcgZGVmYXVsdCB2YWx1ZXMuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ ICArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEBwYXJhbSBwb3J0 X2lkDQo+ICArICogICBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHBvcnQgdG8gZ2V0IHRoZSBjb25m aWd1cmF0aW9uIGluZm9ybWF0aW9uLg0KPiAgKyAqICAgVGhlIHZhbHVlIG11c3QgYmUgaW4gdGhl IHJhbmdlIFswLCBuYl9ldmVudF9wb3J0cyAtIDFdDQo+ICArICogICBwcmV2aW91c2x5IHN1cHBs aWVkIHRvIHJ0ZV9ldmVudF9kZXZfY29uZmlndXJlKCkuDQo+ICArICogQHBhcmFtW291dF0gcG9y dF9jb25mDQo+ICArICogICBUaGUgcG9pbnRlciB0byB0aGUgZGVmYXVsdCBldmVudCBwb3J0IGNv bmZpZ3VyYXRpb24gZGF0YQ0KPiAgKyAqDQo+ICArICogXHNlZSBydGVfZXZlbnRfcG9ydF9zZXR1 cCgpDQo+ICArICoNCj4gICsgKi8NCj4gICtleHRlcm4gdm9pZA0KPiAgK3J0ZV9ldmVudF9wb3J0 X2RlZmF1bHRfY29uZl9nZXQodWludDhfdCBkZXZfaWQsIHVpbnQ4X3QgcG9ydF9pZCwNCj4gICsJ CQkJc3RydWN0IHJ0ZV9ldmVudF9wb3J0X2NvbmYgKnBvcnRfY29uZik7DQo+ICArDQo+ICArLyoq DQo+ICArICogQWxsb2NhdGUgYW5kIHNldCB1cCBhbiBldmVudCBwb3J0IGZvciBhbiBldmVudCBk ZXZpY2UuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRp ZmllciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEBwYXJhbSBwb3J0X2lkDQo+ICArICogICBUaGUg aW5kZXggb2YgdGhlIGV2ZW50IHBvcnQgdG8gc2V0dXAuIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRo ZSByYW5nZQ0KPiAgKyAqICAgWzAsIG5iX2V2ZW50X3BvcnRzIC0gMV0gcHJldmlvdXNseSBzdXBw bGllZCB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpLg0KPiAgKyAqIEBwYXJhbSBwb3J0X2Nv bmYNCj4gICsgKiAgIFRoZSBwb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgdG8gYmUg dXNlZCBmb3IgdGhlIHF1ZXVlLg0KPiAgKyAqICAgTlVMTCB2YWx1ZSBpcyBhbGxvd2VkLCBpbiB3 aGljaCBjYXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbgl1c2VkLg0KPiAgKyAqDQo+ICArICogXHNl ZSBydGVfZXZlbnRfcG9ydF9kZWZhdWx0X2NvbmZfZ2V0KCkNCj4gICsgKg0KPiAgKyAqIEByZXR1 cm4NCj4gICsgKiAgIC0gMDogU3VjY2VzcywgZXZlbnQgcG9ydCBjb3JyZWN0bHkgc2V0IHVwLg0K PiAgKyAqICAgLSA8MDogUG9ydCBjb25maWd1cmF0aW9uIGZhaWxlZA0KPiAgKyAqICAgLSAoLUVE UVVPVCkgUXVvdGEgZXhjZWVkZWQoQXBwbGljYXRpb24gdHJpZWQgdG8gbGluayB0aGUgcXVldWUN Cj4gIGNvbmZpZ3VyZWQNCj4gICsgKiAgIHdpdGggUlRFX0VWRU5UX1FVRVVFX0NGR19TSU5HTEVf Q09OU1VNRVIgdG8gbW9yZSB0aGFuIG9uZQ0KPiAgZXZlbnQgcG9ydHMpDQo+ICArICovDQo+ICAr ZXh0ZXJuIGludA0KPiAgK3J0ZV9ldmVudF9wb3J0X3NldHVwKHVpbnQ4X3QgZGV2X2lkLCB1aW50 OF90IHBvcnRfaWQsDQo+ICArCQkgICAgIHN0cnVjdCBydGVfZXZlbnRfcG9ydF9jb25mICpwb3J0 X2NvbmYpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIEdldCB0aGUgbnVtYmVyIG9mIGRlcXVldWUg cXVldWUgZGVwdGggY29uZmlndXJlZCBmb3IgZXZlbnQgcG9ydA0KPiAgZGVzaWduYXRlZA0KPiAg KyAqIGJ5IGl0cyAqcG9ydF9pZCogb24gYSBzcGVjaWZpYyBldmVudCBkZXZpY2UNCj4gICsgKg0K PiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIEV2ZW50IGRldmljZSBpZGVudGlmaWVyLg0K PiAgKyAqIEBwYXJhbSBwb3J0X2lkDQo+ICArICogICBFdmVudCBwb3J0IGlkZW50aWZpZXIuDQo+ ICArICogQHJldHVybg0KPiAgKyAqICAgLSBUaGUgbnVtYmVyIG9mIGNvbmZpZ3VyZWQgZGVxdWV1 ZSBxdWV1ZSBkZXB0aA0KPiAgKyAqDQo+ICArICogXHNlZSBydGVfZXZlbnRfZGVxdWV1ZV9idXJz dCgpDQo+ICArICovDQo+ICArZXh0ZXJuIHVpbnQ4X3QNCj4gICtydGVfZXZlbnRfcG9ydF9kZXF1 ZXVlX2RlcHRoKHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHBvcnRfaWQpOw0KPiAgKw0KPiAgKy8q Kg0KPiAgKyAqIEdldCB0aGUgbnVtYmVyIG9mIGVucXVldWUgcXVldWUgZGVwdGggY29uZmlndXJl ZCBmb3IgZXZlbnQgcG9ydA0KPiAgZGVzaWduYXRlZA0KPiAgKyAqIGJ5IGl0cyAqcG9ydF9pZCog b24gYSBzcGVjaWZpYyBldmVudCBkZXZpY2UNCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQN Cj4gICsgKiAgIEV2ZW50IGRldmljZSBpZGVudGlmaWVyLg0KPiAgKyAqIEBwYXJhbSBwb3J0X2lk DQo+ICArICogICBFdmVudCBwb3J0IGlkZW50aWZpZXIuDQo+ICArICogQHJldHVybg0KPiAgKyAq ICAgLSBUaGUgbnVtYmVyIG9mIGNvbmZpZ3VyZWQgZW5xdWV1ZSBxdWV1ZSBkZXB0aA0KPiAgKyAq DQo+ICArICogXHNlZSBydGVfZXZlbnRfZW5xdWV1ZV9idXJzdCgpDQo+ICArICovDQo+ICArZXh0 ZXJuIHVpbnQ4X3QNCj4gICtydGVfZXZlbnRfcG9ydF9lbnF1ZXVlX2RlcHRoKHVpbnQ4X3QgZGV2 X2lkLCB1aW50OF90IHBvcnRfaWQpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIEdldCB0aGUgbnVt YmVyIG9mIHBvcnRzIG9uIGEgc3BlY2lmaWMgZXZlbnQgZGV2aWNlDQo+ICArICoNCj4gICsgKiBA cGFyYW0gZGV2X2lkDQo+ICArICogICBFdmVudCBkZXZpY2UgaWRlbnRpZmllci4NCj4gICsgKiBA cmV0dXJuDQo+ICArICogICAtIFRoZSBudW1iZXIgb2YgY29uZmlndXJlZCBwb3J0cw0KPiAgKyAq Lw0KPiAgK2V4dGVybiB1aW50OF90DQo+ICArcnRlX2V2ZW50X3BvcnRfY291bnQodWludDhfdCBk ZXZfaWQpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIFN0YXJ0IGFuIGV2ZW50IGRldmljZS4NCj4g ICsgKg0KPiAgKyAqIFRoZSBkZXZpY2Ugc3RhcnQgc3RlcCBpcyB0aGUgbGFzdCBvbmUgYW5kIGNv bnNpc3RzIG9mIHNldHRpbmcgdGhlIGV2ZW50DQo+ICArICogcXVldWVzIHRvIHN0YXJ0IGFjY2Vw dGluZyB0aGUgZXZlbnRzIGFuZCBzY2hlZHVsZXMgdG8gZXZlbnQgcG9ydHMuDQo+ICArICoNCj4g ICsgKiBPbiBzdWNjZXNzLCBhbGwgYmFzaWMgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBBUEkg KGV2ZW50IGVucXVldWUsDQo+ICArICogZXZlbnQgZGVxdWV1ZSBhbmQgc28gb24pIGNhbiBiZSBp bnZva2VkLg0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgRXZlbnQgZGV2 aWNlIGlkZW50aWZpZXINCj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIDA6IFN1Y2Nlc3MsIGRl dmljZSBzdGFydGVkLg0KPiAgKyAqICAgLSA8MDogRXJyb3IgY29kZSBvZiB0aGUgZHJpdmVyIGRl dmljZSBzdGFydCBmdW5jdGlvbi4NCj4gICsgKi8NCj4gICtleHRlcm4gaW50DQo+ICArcnRlX2V2 ZW50X2Rldl9zdGFydCh1aW50OF90IGRldl9pZCk7DQo+ICArDQo+ICArLyoqDQo+ICArICogU3Rv cCBhbiBldmVudCBkZXZpY2UuIFRoZSBkZXZpY2UgY2FuIGJlIHJlc3RhcnRlZCB3aXRoIGEgY2Fs bCB0bw0KPiAgKyAqIHJ0ZV9ldmVudF9kZXZfc3RhcnQoKQ0KPiAgKyAqDQo+ICArICogQHBhcmFt IGRldl9pZA0KPiAgKyAqICAgRXZlbnQgZGV2aWNlIGlkZW50aWZpZXIuDQo+ICArICovDQo+ICAr ZXh0ZXJuIHZvaWQNCj4gICtydGVfZXZlbnRfZGV2X3N0b3AodWludDhfdCBkZXZfaWQpOw0KPiAg Kw0KPiAgKy8qKg0KPiAgKyAqIENsb3NlIGFuIGV2ZW50IGRldmljZS4gVGhlIGRldmljZSBjYW5u b3QgYmUgcmVzdGFydGVkIQ0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAg RXZlbnQgZGV2aWNlIGlkZW50aWZpZXINCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAg LSAwIG9uIHN1Y2Nlc3NmdWxseSBjbG9zaW5nIGRldmljZQ0KPiAgKyAqICAtIDwwIG9uIGZhaWx1 cmUgdG8gY2xvc2UgZGV2aWNlDQo+ICArICovDQo+ICArZXh0ZXJuIGludA0KPiAgK3J0ZV9ldmVu dF9kZXZfY2xvc2UodWludDhfdCBkZXZfaWQpOw0KPiAgKw0KPiAgKy8qIFNjaGVkdWxlciB0eXBl IGRlZmluaXRpb25zICovDQo+ICArI2RlZmluZSBSVEVfU0NIRURfVFlQRV9PUkRFUkVECQkwDQo+ ICArLyoqPCBPcmRlcmVkIHNjaGVkdWxpbmcNCj4gICsgKg0KPiAgKyAqIEV2ZW50cyBmcm9tIGFu IG9yZGVyZWQgZmxvdyBvZiBhbiBldmVudCBxdWV1ZSBjYW4gYmUgc2NoZWR1bGVkIHRvDQo+ICBt dWx0aXBsZQ0KPiAgKyAqIHBvcnRzIGZvciBjb25jdXJyZW50IHByb2Nlc3Npbmcgd2hpbGUgbWFp bnRhaW5pbmcgdGhlIG9yaWdpbmFsIGV2ZW50IG9yZGVyLg0KPiAgKyAqIFRoaXMgc2NoZW1lIGVu YWJsZXMgdGhlIHVzZXIgdG8gYWNoaWV2ZSBoaWdoIHNpbmdsZSBmbG93IHRocm91Z2hwdXQgYnkN Cj4gICsgKiBhdm9pZGluZyBTVyBzeW5jaHJvbml6YXRpb24gZm9yIG9yZGVyaW5nIGJldHdlZW4g cG9ydHMgd2hpY2ggYm91bmQgdG8NCj4gIGNvcmVzLg0KPiAgKyAqDQo+ICArICogVGhlIHNvdXJj ZSBmbG93IG9yZGVyaW5nIGZyb20gYW4gZXZlbnQgcXVldWUgaXMgbWFpbnRhaW5lZCB3aGVuIGV2 ZW50cw0KPiAgYXJlDQo+ICArICogZW5xdWV1ZWQgdG8gdGhlaXIgZGVzdGluYXRpb24gcXVldWUg d2l0aGluIHRoZSBzYW1lIG9yZGVyZWQgZmxvdyBjb250ZXh0Lg0KPiAgKyAqIEFuIGV2ZW50IHBv cnQgaG9sZHMgdGhlIGNvbnRleHQgdW50aWwgYXBwbGljYXRpb24gY2FsbCBydGVfZXZlbnRfZGVx dWV1ZSgpDQo+ICArICogZnJvbSB0aGUgc2FtZSBwb3J0LCB3aGljaCBpbXBsaWNpdGx5IHJlbGVh c2VzIHRoZSBjb250ZXh0Lg0KPiAgKyAqIFVzZXIgbWF5IGFsbG93IHRoZSBzY2hlZHVsZXIgdG8g cmVsZWFzZSB0aGUgY29udGV4dCBlYXJsaWVyIHRoYW4gdGhhdA0KPiAgKyAqIGJ5IGNhbGxpbmcg cnRlX2V2ZW50X3JlbGVhc2UoKQ0KPiAgKyAqDQo+ICArICogRXZlbnRzIGZyb20gdGhlIHNvdXJj ZSBxdWV1ZSBhcHBlYXIgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIgd2hlbiBkZXF1ZXVlZA0KPiAg KyAqIGZyb20gYSBkZXN0aW5hdGlvbiBxdWV1ZS4NCj4gICsgKiBFdmVudCBvcmRlcmluZyBpcyBi YXNlZCBvbiB0aGUgcmVjZWl2ZWQgZXZlbnQocyksIGJ1dCBhbHNvIG90aGVyDQo+ICArICogKG5l d2x5IGFsbG9jYXRlZCBvciBzdG9yZWQpIGV2ZW50cyBhcmUgb3JkZXJlZCB3aGVuIGVucXVldWVk IHdpdGhpbiB0aGUNCj4gIHNhbWUNCj4gICsgKiBvcmRlcmVkIGNvbnRleHQuIEV2ZW50cyBub3Qg ZW5xdWV1ZWQgKGUuZy4gcmVsZWFzZWQgb3Igc3RvcmVkKSB3aXRoaW4gdGhlDQo+ICArICogY29u dGV4dCBhcmUgIGNvbnNpZGVyZWQgbWlzc2luZyBmcm9tIHJlb3JkZXJpbmcgYW5kIGFyZSBza2lw cGVkIGF0IHRoaXMNCj4gIHRpbWUNCj4gICsgKiAoYnV0IGNhbiBiZSBvcmRlcmVkIGFnYWluIHdp dGhpbiBhbm90aGVyIGNvbnRleHQpLg0KPiAgKyAqDQo+ICArICogXHNlZSBydGVfZXZlbnRfZGVx dWV1ZSgpLCBydGVfZXZlbnRfcmVsZWFzZSgpDQo+ICArICovDQo+ICArDQo+ICArI2RlZmluZSBS VEVfU0NIRURfVFlQRV9BVE9NSUMJCTENCj4gICsvKio8IEF0b21pYyBzY2hlZHVsaW5nDQo+ICAr ICoNCj4gICsgKiBFdmVudHMgZnJvbSBhbiBhdG9taWMgZmxvdyBvZiBhbiBldmVudCBxdWV1ZSBj YW4gYmUgc2NoZWR1bGVkIG9ubHkgdG8gYQ0KPiAgKyAqIHNpbmdsZSBwb3J0IGF0IGEgdGltZS4g VGhlIHBvcnQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGV4Y2x1c2l2ZSAoYXRvbWljKQ0KPiAgKyAq IGFjY2VzcyB0byB0aGUgYXNzb2NpYXRlZCBmbG93IGNvbnRleHQsIHdoaWNoIGVuYWJsZXMgdGhl IHVzZXIgdG8gYXZvaWQgU1cNCj4gICsgKiBzeW5jaHJvbml6YXRpb24uIEF0b21pYyBmbG93cyBh bHNvIGhlbHAgdG8gbWFpbnRhaW4gZXZlbnQgb3JkZXJpbmcNCj4gICsgKiBzaW5jZSBvbmx5IG9u ZSBwb3J0IGF0IGEgdGltZSBjYW4gcHJvY2VzcyBldmVudHMgZnJvbSBhIGZsb3cgb2YgYW4NCj4g ICsgKiBldmVudCBxdWV1ZS4NCj4gICsgKg0KPiAgKyAqIFRoZSBhdG9taWMgcXVldWUgc3luY2hy b25pemF0aW9uIGNvbnRleHQgaXMgZGVkaWNhdGVkIHRvIHRoZSBwb3J0IHVudGlsDQo+ICArICog YXBwbGljYXRpb24gY2FsbCBydGVfZXZlbnRfZGVxdWV1ZSgpIGZyb20gdGhlIHNhbWUgcG9ydCwg d2hpY2ggaW1wbGljaXRseQ0KPiAgKyAqIHJlbGVhc2VzIHRoZSBjb250ZXh0LiBVc2VyIG1heSBh bGxvdyB0aGUgc2NoZWR1bGVyIHRvIHJlbGVhc2UgdGhlIGNvbnRleHQNCj4gICsgKiBlYXJsaWVy IHRoYW4gdGhhdCBieSBjYWxsaW5nIHJ0ZV9ldmVudF9yZWxlYXNlKCkNCj4gICsgKg0KPiAgKyAq IFxzZWUgcnRlX2V2ZW50X2RlcXVldWUoKSwgcnRlX2V2ZW50X3JlbGVhc2UoKQ0KPiAgKyAqLw0K PiAgKw0KPiAgKyNkZWZpbmUgUlRFX1NDSEVEX1RZUEVfUEFSQUxMRUwJCTINCj4gICsvKio8IFBh cmFsbGVsIHNjaGVkdWxpbmcNCj4gICsgKg0KPiAgKyAqIFRoZSBzY2hlZHVsZXIgcGVyZm9ybXMg cHJpb3JpdHkgc2NoZWR1bGluZywgbG9hZCBiYWxhbmNpbmcsIGV0Yy4gZnVuY3Rpb25zDQo+ICAr ICogYnV0IGRvZXMgbm90IHByb3ZpZGUgYWRkaXRpb25hbCBldmVudCBzeW5jaHJvbml6YXRpb24g b3Igb3JkZXJpbmcuDQo+ICArICogSXQgaXMgZnJlZSB0byBzY2hlZHVsZSBldmVudHMgZnJvbSBh IHNpbmdsZSBwYXJhbGxlbCBmbG93IG9mIGFuIGV2ZW50IHF1ZXVlDQo+ICArICogdG8gbXVsdGlw bGUgZXZlbnRzIHBvcnRzIGZvciBjb25jdXJyZW50IHByb2Nlc3NpbmcuDQo+ICArICogVGhlIGFw cGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBmbG93IGNvbnRleHQgc3luY2hyb25pemF0aW9u IGFuZA0KPiAgKyAqIGV2ZW50IG9yZGVyaW5nIChTVyBzeW5jaHJvbml6YXRpb24pLg0KPiAgKyAq Lw0KPiAgKw0KPiAgKy8qIEV2ZW50IHR5cGVzIHRvIGNsYXNzaWZ5IHRoZSBldmVudCBzb3VyY2Ug Ki8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9UWVBFX0VUSERFVgkJMHgwDQo+ICArLyoqPCBUaGUg ZXZlbnQgZ2VuZXJhdGVkIGZyb20gZXRoZGV2IHN1YnN5c3RlbSAqLw0KPiAgKyNkZWZpbmUgUlRF X0VWRU5UX1RZUEVfQ1JZUFRPREVWCTB4MQ0KPiAgKy8qKjwgVGhlIGV2ZW50IGdlbmVyYXRlZCBm cm9tIGNyeXBvZGV2IHN1YnN5c3RlbSAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX1RZUEVfVElN RVJERVYJCTB4Mg0KPiAgKy8qKjwgVGhlIGV2ZW50IGdlbmVyYXRlZCBmcm9tIHRpbWVyZGV2IHN1 YnN5c3RlbSAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX1RZUEVfQ09SRQkJMHgzDQo+ICArLyoq PCBUaGUgZXZlbnQgZ2VuZXJhdGVkIGZyb20gY29yZS4NCj4gICsgKiBBcHBsaWNhdGlvbiBtYXkg dXNlICpzdWJfZXZlbnRfdHlwZSogdG8gZnVydGhlciBjbGFzc2lmeSB0aGUgZXZlbnQNCj4gICsg Ki8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9UWVBFX01BWAkJMHgxMA0KPiAgKy8qKjwgTWF4aW11 bSBudW1iZXIgb2YgZXZlbnQgdHlwZXMgKi8NCj4gICsNCj4gICsvKiBFdmVudCBwcmlvcml0eSAq Lw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX1BSSU9SSVRZX0hJR0hFU1QgICAgICAwDQo+ICArLyoq PCBIaWdoZXN0IGV2ZW50IHByaW9yaXR5ICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfUFJJT1JJ VFlfTk9STUFMICAgICAgIDEyOA0KPiAgKy8qKjwgTm9ybWFsIGV2ZW50IHByaW9yaXR5ICovDQo+ ICArI2RlZmluZSBSVEVfRVZFTlRfUFJJT1JJVFlfTE9XRVNUICAgICAgIDI1NQ0KPiAgKy8qKjwg TG93ZXN0IGV2ZW50IHByaW9yaXR5ICovDQo+ICArDQo+ICArLyoqDQo+ICArICogVGhlIGdlbmVy aWMgKnJ0ZV9ldmVudCogc3RydWN0dXJlIHRvIGhvbGQgdGhlIGV2ZW50IGF0dHJpYnV0ZXMNCj4g ICsgKiBmb3IgZGVxdWV1ZSBhbmQgZW5xdWV1ZSBvcGVyYXRpb24NCj4gICsgKi8NCj4gICtzdHJ1 Y3QgcnRlX2V2ZW50IHsNCj4gICsJLyoqIFdPUkQwICovDQo+ICArCVJURV9TVERfQzExDQo+ICAr ICAgICAgICB1bmlvbiB7DQo+ICArCQl1aW50NjRfdCB1NjQ7DQo+ICArCQkvKiogRXZlbnQgYXR0 cmlidXRlcyBmb3IgZGVxdWV1ZSBvciBlbnF1ZXVlIG9wZXJhdGlvbiAqLw0KPiAgKwkJc3RydWN0 IHsNCj4gICsJCQl1aW50MzJfdCBmbG93X2lkOjI0Ow0KPiAgKwkJCS8qKjwgVGFyZ2V0ZWQgZmxv dyBpZGVudGlmaWVyIGZvciB0aGUgZW5xdWV1ZSBhbmQNCj4gICsJCQkgKiBkZXF1ZXVlIG9wZXJh dGlvbi4NCj4gICsJCQkgKiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YNCj4gICsJ CQkgKiBbMSAtIG1heF9ldmVudF9xdWV1ZV9mbG93cyldIHdoaWNoDQo+ICArCQkJICogcHJldmlv dXNseSBzdXBwbGllZCB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpLg0KPiAgKwkJCSAqLw0K PiAgKwkJCXVpbnQzMl90IHF1ZXVlX2lkOjg7DQo+ICArCQkJLyoqPCBUYXJnZXRlZCBldmVudCBx dWV1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW5xdWV1ZQ0KPiAgb3INCj4gICsJCQkgKiBkZXF1ZXVl IG9wZXJhdGlvbi4NCj4gICsJCQkgKiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YN Cj4gICsJCQkgKiBbMCwgbmJfZXZlbnRfcXVldWVzIC0gMV0gd2hpY2ggcHJldmlvdXNseSBzdXBw bGllZA0KPiAgdG8NCj4gICsJCQkgKiBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpLg0KPiAgKwkJ CSAqLw0KPiAgKwkJCXVpbnQ4X3QgIHNjaGVkX3R5cGU7DQo+ICArCQkJLyoqPCBTY2hlZHVsZXIg c3luY2hyb25pemF0aW9uIHR5cGUNCj4gIChSVEVfU0NIRURfVFlQRV8pDQo+ICArCQkJICogYXNz b2NpYXRlZCB3aXRoIGZsb3cgaWQgb24gYSBnaXZlbiBldmVudCBxdWV1ZQ0KPiAgKwkJCSAqIGZv ciB0aGUgZW5xdWV1ZSBhbmQgZGVxdWV1ZSBvcGVyYXRpb24uDQo+ICArCQkJICovDQo+ICArCQkJ dWludDhfdCAgZXZlbnRfdHlwZTsNCj4gICsJCQkvKio8IEV2ZW50IHR5cGUgdG8gY2xhc3NpZnkg dGhlIGV2ZW50IHNvdXJjZS4gKi8NCj4gICsJCQl1aW50OF90ICBzdWJfZXZlbnRfdHlwZTsNCj4g ICsJCQkvKio8IFN1Yi1ldmVudCB0eXBlcyBiYXNlZCBvbiB0aGUgZXZlbnQgc291cmNlLg0KPiAg KwkJCSAqIFxzZWUgUlRFX0VWRU5UX1RZUEVfQ09SRQ0KPiAgKwkJCSAqLw0KPiAgKwkJCXVpbnQ4 X3QgIHByaW9yaXR5Ow0KPiAgKwkJCS8qKjwgRXZlbnQgcHJpb3JpdHkgcmVsYXRpdmUgdG8gb3Ro ZXIgZXZlbnRzIGluIHRoZQ0KPiAgKwkJCSAqIGV2ZW50IHF1ZXVlLiBUaGUgcmVxdWVzdGVkIHBy aW9yaXR5IHNob3VsZCBpbiB0aGUNCj4gICsJCQkgKiByYW5nZSBvZiAgW1JURV9FVkVOVF9QUklP UklUWV9ISUdIRVNULA0KPiAgKwkJCSAqIFJURV9FVkVOVF9QUklPUklUWV9MT1dFU1RdLg0KPiAg KwkJCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbCBub3JtYWxpemUgdGhlIHJlcXVlc3RlZA0K PiAgKwkJCSAqIHByaW9yaXR5IHRvIHN1cHBvcnRlZCBwcmlvcml0eSB2YWx1ZS4NCj4gICsJCQkg KiBWYWxpZCB3aGVuIHRoZSBkZXZpY2UgaGFzDQo+ICBSVEVfRVZFTlRfREVWX0NBUF9FVkVOVF9R T1MNCj4gICsJCQkgKiBjYXBhYmlsaXR5Lg0KPiAgKwkJCSAqLw0KPiAgKwkJfTsNCj4gICsJfTsN Cj4gICsJLyoqIFdPUkQxICovDQo+ICArCVJURV9TVERfQzExDQo+ICArCXVuaW9uIHsNCj4gICsJ CXVpbnRwdHJfdCBldmVudDsNCj4gICsJCS8qKjwgT3BhcXVlIGV2ZW50IHBvaW50ZXIgKi8NCj4g ICsJCXN0cnVjdCBydGVfbWJ1ZiAqbWJ1ZjsNCj4gICsJCS8qKjwgbWJ1ZiBwb2ludGVyIGlmIGRl cXVldWVkIGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBtYnVmDQo+ICAqLw0KPiAgKwl9Ow0KPiAg K307DQo+ICArDQo+ICArLyoqDQo+ICArICogU2NoZWR1bGUgb25lIG9yIG1vcmUgZXZlbnRzIGlu IHRoZSBldmVudCBkZXYuDQo+ICArICoNCj4gICsgKiBBbiBldmVudCBkZXYgaW1wbGVtZW50YXRp b24gbWF5IGRlZmluZSB0aGlzIGlzIGEgTk9PUCwgZm9yIGluc3RhbmNlIGlmDQo+ICArICogdGhl IGV2ZW50IGRldiBwZXJmb3JtcyBpdHMgc2NoZWR1bGluZyBpbiBoYXJkd2FyZS4NCj4gICsgKg0K PiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZp Y2UuDQo+ICArICovDQo+ICArZXh0ZXJuIHZvaWQNCj4gICtydGVfZXZlbnRfc2NoZWR1bGUodWlu dDhfdCBkZXZfaWQpOw0KDQpPbmUgaWRlYTogSGF2ZSB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSBu dW1iZXIgb2Ygc2NoZWR1bGVkIHBhY2tldHMgKG9yIDAgZm9yIGltcGxlbWVudGF0aW9ucyB0aGF0 IGRvIHNjaGVkdWxpbmcgaW4gaGFyZHdhcmUpLiBUaGlzIGNvdWxkIGJlIGEgaGVscGZ1bCBkaWFn bm9zdGljIGZvciB0aGUgc29mdHdhcmUgc2NoZWR1bGVyLg0KDQo+ICArDQo+ICArLyoqDQo+ICAr ICogRW5xdWV1ZSB0aGUgZXZlbnQgb2JqZWN0IHN1cHBsaWVkIGluIHRoZSAqcnRlX2V2ZW50KiBz dHJ1Y3R1cmUgb24gYW4NCj4gICsgKiBldmVudCBkZXZpY2UgZGVzaWduYXRlZCBieSBpdHMgKmRl dl9pZCogdGhyb3VnaCB0aGUgZXZlbnQgcG9ydCBzcGVjaWZpZWQgYnkNCj4gICsgKiAqcG9ydF9p ZCouIFRoZSBldmVudCBvYmplY3Qgc3BlY2lmaWVzIHRoZSBldmVudCBxdWV1ZSBvbiB3aGljaCB0 aGlzDQo+ICArICogZXZlbnQgd2lsbCBiZSBlbnF1ZXVlZC4NCj4gICsgKg0KPiAgKyAqIEBwYXJh bSBkZXZfaWQNCj4gICsgKiAgIEV2ZW50IGRldmljZSBpZGVudGlmaWVyLg0KPiAgKyAqIEBwYXJh bSBwb3J0X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZXZlbnQgcG9ydC4NCj4g ICsgKiBAcGFyYW0gZXYNCj4gICsgKiAgIFBvaW50ZXIgdG8gc3RydWN0IHJ0ZV9ldmVudA0KPiAg KyAqIEBwYXJhbSBwaW5fZXZlbnQNCj4gICsgKiAgIEhpbnQgdG8gdGhlIHNjaGVkdWxlciB0aGF0 IHRoZSBldmVudCBjYW4gYmUgcGlubmVkIHRvIHRoZSBzYW1lIHBvcnQgZm9yDQo+ICArICogICB0 aGUgbmV4dCBzY2hlZHVsaW5nIHN0YWdlLiBGb3IgaW1wbGVtZW50YXRpb25zIHRoYXQgc3VwcG9y dCBpdCwgdGhpcw0KPiAgKyAqICAgYWxsb3dzIHRoZSBzYW1lIGNvcmUgdG8gcHJvY2VzcyB0aGUg bmV4dCBzdGFnZSBpbiB0aGUgcGlwZWxpbmUgZm9yIGEgZ2l2ZW4NCj4gICsgKiAgIGV2ZW50LCB0 YWtpbmcgYWR2YW50YWdlIG9mIGNhY2hlIGxvY2FsaXR5LiBUaGUgcGlubmVkIGV2ZW50IHdpbGwg YmUNCj4gICsgKiAgIHJlY2VpdmVkIHRocm91Z2ggcnRlX2V2ZW50X2RlcXVldWUoKS4gVGhpcyBp cyBhIGhpbnQgYW5kIHRoZSBldmVudCBpcw0KPiAgKyAqICAgbm90IGd1YXJhbnRlZWQgdG8gYmUg cGlubmVkIHRvIHRoZSBwb3J0LiBUaGlzIGhpbnQgaXMgdmFsaWQgb25seSB3aGVuIHRoZQ0KPiAg KyAqICAgZXZlbnQgaXMgZGVxdWV1ZWQgd2l0aCBydGVfZXZlbnRfZGVxdWV1ZSgpIGZvbGxvd2Vk IGJ5DQo+ICBydGVfZXZlbnRfZW5xdWV1ZSgpLg0KPiAgKyAqDQo+ICArICogQHJldHVybg0KPiAg KyAqICAtIDAgb24gc3VjY2Vzcw0KPiAgKyAqICAtIDwwIG9uIGZhaWx1cmUuIEZhaWx1cmUgY2Fu IG9jY3VyIGlmIHRoZSBldmVudCBwb3J0J3Mgb3V0cHV0IHF1ZXVlIGlzDQo+ICArICogICAgIGJh Y2twcmVzc3VyZWQsIGZvciBpbnN0YW5jZS4NCj4gICsgKi8NCj4gICtleHRlcm4gaW50DQo+ICAr cnRlX2V2ZW50X2VucXVldWUodWludDhfdCBkZXZfaWQsIHVpbnQ4X3QgcG9ydF9pZCwgc3RydWN0 IHJ0ZV9ldmVudCAqZXYsDQo+ICArCQkgIGJvb2wgcGluX2V2ZW50KTsNCj4gICsNCj4gICsvKioN Cj4gICsgKiBFbnF1ZXVlIGEgYnVyc3Qgb2YgZXZlbnRzIG9iamVjdHMgc3VwcGxpZWQgaW4gKnJ0 ZV9ldmVudCogc3RydWN0dXJlIG9uIGFuDQo+ICArICogZXZlbnQgZGV2aWNlIGRlc2lnbmF0ZWQg YnkgaXRzICpkZXZfaWQqIHRocm91Z2ggdGhlIGV2ZW50IHBvcnQgc3BlY2lmaWVkIGJ5DQo+ICAr ICogKnBvcnRfaWQqLiBFYWNoIGV2ZW50IG9iamVjdCBzcGVjaWZpZXMgdGhlIGV2ZW50IHF1ZXVl IG9uIHdoaWNoIGl0DQo+ICArICogd2lsbCBiZSBlbnF1ZXVlZC4NCj4gICsgKg0KPiAgKyAqIFRo ZSBydGVfZXZlbnRfZW5xdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIGlzIGludm9rZWQgdG8gZW5xdWV1 ZQ0KPiAgKyAqIG11bHRpcGxlIGV2ZW50IG9iamVjdHMuDQo+ICArICogSXQgaXMgdGhlIGJ1cnN0 IHZhcmlhbnQgb2YgcnRlX2V2ZW50X2VucXVldWUoKSBmdW5jdGlvbi4NCj4gICsgKg0KPiAgKyAq IFRoZSAqbnVtKiBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBldmVudCBvYmplY3RzIHRvIGVu cXVldWUgd2hpY2ggYXJlDQo+ICArICogc3VwcGxpZWQgaW4gdGhlICpldiogYXJyYXkgb2YgKnJ0 ZV9ldmVudCogc3RydWN0dXJlLg0KPiAgKyAqDQo+ICArICogVGhlIHJ0ZV9ldmVudF9lbnF1ZXVl X2J1cnN0KCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mDQo+ICArICogZXZlbnRzIG9i amVjdHMgaXQgYWN0dWFsbHkgZW5xdWV1ZWQuIEEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvICpudW0q IG1lYW5zDQo+ICArICogdGhhdCBhbGwgZXZlbnQgb2JqZWN0cyBoYXZlIGJlZW4gZW5xdWV1ZWQu DQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmllciBv ZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEBwYXJhbSBwb3J0X2lkDQo+ICArICogICBUaGUgaWRlbnRp ZmllciBvZiB0aGUgZXZlbnQgcG9ydC4NCj4gICsgKiBAcGFyYW0gZXYNCj4gICsgKiAgIEFuIGFy cmF5IG9mICpudW0qIHBvaW50ZXJzIHRvICpydGVfZXZlbnQqIHN0cnVjdHVyZQ0KPiAgKyAqICAg d2hpY2ggY29udGFpbiB0aGUgZXZlbnQgb2JqZWN0IGVucXVldWUgb3BlcmF0aW9ucyB0byBiZSBw cm9jZXNzZWQuDQo+ICArICogQHBhcmFtIG51bQ0KPiAgKyAqICAgVGhlIG51bWJlciBvZiBldmVu dCBvYmplY3RzIHRvIGVucXVldWUsIHR5cGljYWxseSBudW1iZXIgb2YNCj4gICsgKiAgIHJ0ZV9l dmVudF9wb3J0X2VucXVldWVfZGVwdGgoKSBhdmFpbGFibGUgZm9yIHRoaXMgcG9ydC4NCj4gICsg KiBAcGFyYW0gcGluX2V2ZW50DQo+ICArICogICBIaW50IHRvIHRoZSBzY2hlZHVsZXIgdGhhdCB0 aGUgZXZlbnQgY2FuIGJlIHBpbm5lZCB0byB0aGUgc2FtZSBwb3J0IGZvcg0KPiAgKyAqICAgdGhl IG5leHQgc2NoZWR1bGluZyBzdGFnZS4gRm9yIGltcGxlbWVudGF0aW9ucyB0aGF0IHN1cHBvcnQg aXQsIHRoaXMNCj4gICsgKiAgIGFsbG93cyB0aGUgc2FtZSBjb3JlIHRvIHByb2Nlc3MgdGhlIG5l eHQgc3RhZ2UgaW4gdGhlIHBpcGVsaW5lIGZvciBhIGdpdmVuDQo+ICArICogICBldmVudCwgdGFr aW5nIGFkdmFudGFnZSBvZiBjYWNoZSBsb2NhbGl0eS4gVGhlIHBpbm5lZCBldmVudCB3aWxsIGJl DQo+ICArICogICByZWNlaXZlZCB0aHJvdWdoIHJ0ZV9ldmVudF9kZXF1ZXVlKCkuIFRoaXMgaXMg YSBoaW50IGFuZCB0aGUgZXZlbnQgaXMNCj4gICsgKiAgIG5vdCBndWFyYW50ZWVkIHRvIGJlIHBp bm5lZCB0byB0aGUgcG9ydC4gVGhpcyBoaW50IGlzIHZhbGlkIG9ubHkgd2hlbiB0aGUNCj4gICsg KiAgIGV2ZW50IGlzIGRlcXVldWVkIHdpdGggcnRlX2V2ZW50X2RlcXVldWUoKSBmb2xsb3dlZCBi eQ0KPiAgcnRlX2V2ZW50X2VucXVldWUoKS4NCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsg KiAgIFRoZSBudW1iZXIgb2YgZXZlbnQgb2JqZWN0cyBhY3R1YWxseSBlbnF1ZXVlZCBvbiB0aGUg ZXZlbnQgZGV2aWNlLiBUaGUNCj4gICsgKiAgIHJldHVybiB2YWx1ZSBjYW4gYmUgbGVzcyB0aGFu IHRoZSB2YWx1ZSBvZiB0aGUgKm51bSogcGFyYW1ldGVyIHdoZW4gdGhlDQo+ICArICogICBldmVu dCBkZXZpY2VzIHF1ZXVlIGlzIGZ1bGwgb3IgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBzcGVj aWZpZWQgaW4gYQ0KPiAgKyAqICAgKnJ0ZV9ldmVudCouIElmIHJldHVybiB2YWx1ZSBpcyBsZXNz IHRoYW4gKm51bSosIHRoZSByZW1haW5pbmcgZXZlbnRzIGF0DQo+ICArICogICB0aGUgZW5kIG9m IGV2W10gYXJlIG5vdCBjb25zdW1lZCwgYW5kIHRoZSBjYWxsZXIgaGFzIHRvIHRha2UgY2FyZSBv ZiB0aGVtLg0KPiAgKyAqDQo+ICArICogXHNlZSBydGVfZXZlbnRfZW5xdWV1ZSgpLCBydGVfZXZl bnRfcG9ydF9lbnF1ZXVlX2RlcHRoKCkNCj4gICsgKi8NCj4gICtleHRlcm4gaW50DQo+ICArcnRl X2V2ZW50X2VucXVldWVfYnVyc3QodWludDhfdCBkZXZfaWQsIHVpbnQ4X3QgcG9ydF9pZCwNCj4g ICsJCQlzdHJ1Y3QgcnRlX2V2ZW50IGV2W10sIGludCBudW0sIGJvb2wgcGluX2V2ZW50KTsNCj4g ICsNCj4gICsvKioNCj4gICsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byAqd2FpdCogdmFsdWUg Zm9yIHJ0ZV9ldmVudF9kZXF1ZXVlKCkNCj4gICsgKg0KPiAgKyAqIElmIHRoZSBkZXZpY2UgaXMg Y29uZmlndXJlZCB3aXRoDQo+ICBSVEVfRVZFTlRfREVWX0NGR19QRVJfREVRVUVVRV9XQUlUIGZs YWcgdGhlbg0KPiAgKyAqIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBjb252 ZXJ0IHdhaXQgdmFsdWUgaW4gbmFub3NlY29uZHMgdG8NCj4gICsgKiBpbXBsZW1lbnRhdGlvbnMg c3BlY2lmaWMgd2FpdCB2YWx1ZSBzdXBwbGllZCBpbiBydGVfZXZlbnRfZGVxdWV1ZSgpDQo+ICAr ICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUg ZGV2aWNlLg0KPiAgKyAqIEBwYXJhbSBucw0KPiAgKyAqICAgV2FpdCB0aW1lIGluIG5hbm9zZWNv bmQNCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiBWYWx1ZSBmb3IgdGhlICp3YWl0KiBw YXJhbWV0ZXIgaW4gcnRlX2V2ZW50X2RlcXVldWUoKSBmdW5jdGlvbg0KPiAgKyAqDQo+ICArICog XHNlZSBydGVfZXZlbnRfZGVxdWV1ZSgpLCBSVEVfRVZFTlRfREVWX0NGR19QRVJfREVRVUVVRV9X QUlUDQo+ICArICogXHNlZSBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpDQo+ICArICoNCj4gICsg Ki8NCj4gICtleHRlcm4gdWludDY0X3QNCj4gICtydGVfZXZlbnRfZGVxdWV1ZV93YWl0X3RpbWUo dWludDhfdCBkZXZfaWQsIHVpbnQ2NF90IG5zKTsNCj4gICsNCj4gICsvKioNCj4gICsgKiBEZXF1 ZXVlIGFuIGV2ZW50IGZyb20gdGhlIGV2ZW50IHBvcnQgc3BlY2lmaWVkIGJ5ICpwb3J0X2lkKiBv biB0aGUNCj4gICsgKiBldmVudCBkZXZpY2UgZGVzaWduYXRlZCBieSBpdHMgKmRldl9pZCouDQo+ ICArICoNCj4gICsgKiBydGVfZXZlbnRfZGVxdWV1ZSgpIGRvZXMgbm90IGRpY3RhdGUgdGhlIHNw ZWNpZmljcyBvZiBzY2hlZHVsaW5nIGFsZ29yaXRobQ0KPiAgYXMNCj4gICsgKiBlYWNoIGV2ZW50 ZGV2IGRyaXZlciBtYXkgaGF2ZSBkaWZmZXJlbnQgY3JpdGVyaWEgdG8gc2NoZWR1bGUgYW4gZXZl bnQuDQo+ICArICogSG93ZXZlciwgaW4gZ2VuZXJhbCwgZnJvbSBhbiBhcHBsaWNhdGlvbiBwZXJz cGVjdGl2ZSBzY2hlZHVsZXIgbWF5IHVzZSB0aGUNCj4gICsgKiBmb2xsb3dpbmcgc2NoZW1lIHRv IGRpc3BhdGNoIGFuIGV2ZW50IHRvIHRoZSBwb3J0Lg0KPiAgKyAqDQo+ICArICogMSkgU2VsZWN0 aW9uIG9mIGV2ZW50IHF1ZXVlIGJhc2VkIG9uDQo+ICArICogICBhKSBUaGUgbGlzdCBvZiBldmVu dCBxdWV1ZXMgYXJlIGxpbmtlZCB0byB0aGUgZXZlbnQgcG9ydC4NCj4gICsgKiAgIGIpIElmIHRo ZSBkZXZpY2UgaGFzIFJURV9FVkVOVF9ERVZfQ0FQX1FVRVVFX1FPUyBjYXBhYmlsaXR5IHRoZW4N Cj4gIGV2ZW50DQo+ICArICogICBxdWV1ZSBzZWxlY3Rpb24gZnJvbSBsaXN0IGlzIGJhc2VkIG9u IGV2ZW50IHF1ZXVlIHByaW9yaXR5IHJlbGF0aXZlIHRvDQo+ICArICogICBvdGhlciBldmVudCBx dWV1ZSBzdXBwbGllZCBhcyAqcHJpb3JpdHkqIGluIHJ0ZV9ldmVudF9xdWV1ZV9zZXR1cCgpDQo+ ICArICogICBjKSBJZiB0aGUgZGV2aWNlIGhhcyBSVEVfRVZFTlRfREVWX0NBUF9FVkVOVF9RT1Mg Y2FwYWJpbGl0eSB0aGVuDQo+ICBldmVudA0KPiAgKyAqICAgcXVldWUgc2VsZWN0aW9uIGZyb20g dGhlIGxpc3QgaXMgYmFzZWQgb24gZXZlbnQgcHJpb3JpdHkgc3VwcGxpZWQgYXMNCj4gICsgKiAg ICpwcmlvcml0eSogaW4gcnRlX2V2ZW50X2VucXVldWVfYnVyc3QoKQ0KPiAgKyAqIDIpIFNlbGVj dGlvbiBvZiBldmVudA0KPiAgKyAqICAgYSkgVGhlIG51bWJlciBvZiBmbG93cyBhdmFpbGFibGUg aW4gc2VsZWN0ZWQgZXZlbnQgcXVldWUuDQo+ICArICogICBiKSBTY2hlZHVsZSB0eXBlIG1ldGhv ZCBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50DQo+ICArICoNCj4gICsgKiBPbiBhIHN1Y2Nlc3Nm dWwgZGVxdWV1ZSwgdGhlIGV2ZW50IHBvcnQgaG9sZHMgZmxvdyBpZCBhbmQgc2NoZWR1bGUgdHlw ZQ0KPiAgKyAqIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwYXRjaGVkIGV2ZW50LiBU aGUgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5DQo+ICArICogcmVsZWFzZWQgaW4gdGhlIG5leHQg cnRlX2V2ZW50X2RlcXVldWUoKSBpbnZvY2F0aW9uLCBvciBydGVfZXZlbnRfcmVsZWFzZSgpDQo+ ICArICogY2FuIGJlIGNhbGxlZCB0byByZWxlYXNlIHRoZSBjb250ZXh0IGVhcmx5Lg0KPiAgKyAq DQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRl dmljZS4NCj4gICsgKiBAcGFyYW0gcG9ydF9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2Yg dGhlIGV2ZW50IHBvcnQuDQo+ICArICogQHBhcmFtW291dF0gZXYNCj4gICsgKiAgIFBvaW50ZXIg dG8gc3RydWN0IHJ0ZV9ldmVudC4gT24gc3VjY2Vzc2Z1bCBldmVudCBkaXNwYXRjaCwgaW1wbGVt ZW50YXRpb24NCj4gICsgKiAgIHVwZGF0ZXMgdGhlIGV2ZW50IGF0dHJpYnV0ZXMuDQo+ICArICog QHBhcmFtIHdhaXQNCj4gICsgKiAgIDAgLSBuby13YWl0LCByZXR1cm5zIGltbWVkaWF0ZWx5IGlm IHRoZXJlIGlzIG5vIGV2ZW50Lg0KPiAgKyAqICAgPjAgLSB3YWl0IGZvciB0aGUgZXZlbnQsIGlm IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCB3aXRoDQo+ICArICogICBSVEVfRVZFTlRfREVWX0NG R19QRVJfREVRVUVVRV9XQUlUIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQNCj4gIHVudGls DQo+ICArICogICB0aGUgZXZlbnQgYXZhaWxhYmxlIG9yICp3YWl0KiB0aW1lLg0KPiAgKyAqICAg aWYgdGhlIGRldmljZSBpcyBub3QgY29uZmlndXJlZCB3aXRoDQo+ICBSVEVfRVZFTlRfREVWX0NG R19QRVJfREVRVUVVRV9XQUlUDQo+ICArICogICB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0 IHVudGlsIHRoZSBldmVudCBhdmFpbGFibGUgb3IgKmRlcXVldWVfd2FpdF9ucyoNCj4gICsgKiAg IG5zIHdoaWNoIHdhcyBwcmV2aW91c2x5IHN1cHBsaWVkIHRvIHJ0ZV9ldmVudF9kZXZfY29uZmln dXJlKCkNCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiBXaGVuIHRydWUsIGEgdmFsaWQg ZXZlbnQgaGFzIGJlZW4gZGlzcGF0Y2hlZCBieSB0aGUgc2NoZWR1bGVyLg0KPiAgKyAqDQo+ICAr ICovDQo+ICArZXh0ZXJuIGJvb2wNCj4gICtydGVfZXZlbnRfZGVxdWV1ZSh1aW50OF90IGRldl9p ZCwgdWludDhfdCBwb3J0X2lkLA0KPiAgKwkJICBzdHJ1Y3QgcnRlX2V2ZW50ICpldiwgdWludDY0 X3Qgd2FpdCk7DQo+ICArDQo+ICArLyoqDQo+ICArICogRGVxdWV1ZSBhIGJ1cnN0IG9mIGV2ZW50 cyBvYmplY3RzIGZyb20gdGhlIGV2ZW50IHBvcnQgZGVzaWduYXRlZCBieSBpdHMNCj4gICsgKiAq ZXZlbnRfcG9ydF9pZCosIG9uIGFuIGV2ZW50IGRldmljZSBkZXNpZ25hdGVkIGJ5IGl0cyAqZGV2 X2lkKi4NCj4gICsgKg0KPiAgKyAqIFRoZSBydGVfZXZlbnRfZGVxdWV1ZV9idXJzdCgpIGZ1bmN0 aW9uIGlzIGludm9rZWQgdG8gZGVxdWV1ZQ0KPiAgKyAqIG11bHRpcGxlIGV2ZW50IG9iamVjdHMu IEl0IGlzIHRoZSBidXJzdCB2YXJpYW50IG9mIHJ0ZV9ldmVudF9kZXF1ZXVlKCkNCj4gICsgKiBm dW5jdGlvbi4NCj4gICsgKg0KPiAgKyAqIFRoZSAqbnVtKiBwYXJhbWV0ZXIgaXMgdGhlIG1heGlt dW0gbnVtYmVyIG9mIGV2ZW50IG9iamVjdHMgdG8gZGVxdWV1ZQ0KPiAgd2hpY2gNCj4gICsgKiBh cmUgcmV0dXJuZWQgaW4gdGhlICpldiogYXJyYXkgb2YgKnJ0ZV9ldmVudCogc3RydWN0dXJlLg0K PiAgKyAqDQo+ICArICogVGhlIHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gcmV0 dXJucyB0aGUgbnVtYmVyIG9mDQo+ICArICogZXZlbnRzIG9iamVjdHMgaXQgYWN0dWFsbHkgZGVx dWV1ZWQuIEEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvDQo+ICArICogKm51bSogbWVhbnMgdGhhdCBh bGwgZXZlbnQgb2JqZWN0cyBoYXZlIGJlZW4gZGVxdWV1ZWQuDQo+ICArICoNCj4gICsgKiBUaGUg bnVtYmVyIG9mIGV2ZW50cyBkZXF1ZXVlZCBpcyB0aGUgbnVtYmVyIG9mIHNjaGVkdWxlciBjb250 ZXh0cyBoZWxkDQo+ICBieQ0KPiAgKyAqIHRoaXMgcG9ydC4gVGhlc2UgY29udGV4dHMgYXJlIGF1 dG9tYXRpY2FsbHkgcmVsZWFzZWQgaW4gdGhlIG5leHQNCj4gICsgKiBydGVfZXZlbnRfZGVxdWV1 ZSgpIGludm9jYXRpb24sIG9yIHJ0ZV9ldmVudF9yZWxlYXNlKCkgY2FuIGJlIGNhbGxlZCBvbmNl DQo+ICArICogcGVyIGV2ZW50IHRvIHJlbGVhc2UgdGhlIGNvbnRleHRzIGVhcmx5Lg0KPiAgKyAq DQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRl dmljZS4NCj4gICsgKiBAcGFyYW0gcG9ydF9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2Yg dGhlIGV2ZW50IHBvcnQuDQo+ICArICogQHBhcmFtW291dF0gZXYNCj4gICsgKiAgIEFuIGFycmF5 IG9mICpudW0qIHBvaW50ZXJzIHRvICpydGVfZXZlbnQqIHN0cnVjdHVyZSB3aGljaCBpcyBwb3B1 bGF0ZWQNCj4gICsgKiAgIHdpdGggdGhlIGRlcXVldWVkIGV2ZW50IG9iamVjdHMuDQo+ICArICog QHBhcmFtIG51bQ0KPiAgKyAqICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50IG9iamVjdHMg dG8gZGVxdWV1ZSwgdHlwaWNhbGx5IG51bWJlciBvZg0KPiAgKyAqICAgcnRlX2V2ZW50X3BvcnRf ZGVxdWV1ZV9kZXB0aCgpIGF2YWlsYWJsZSBmb3IgdGhpcyBwb3J0Lg0KPiAgKyAqIEBwYXJhbSB3 YWl0DQo+ICArICogICAwIC0gbm8td2FpdCwgcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGVyZSBp cyBubyBldmVudC4NCj4gICsgKiAgID4wIC0gd2FpdCBmb3IgdGhlIGV2ZW50LCBpZiB0aGUgZGV2 aWNlIGlzIGNvbmZpZ3VyZWQgd2l0aA0KPiAgKyAqICAgUlRFX0VWRU5UX0RFVl9DRkdfUEVSX0RF UVVFVUVfV0FJVCB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0DQo+ICB1bnRpbCB0aGUNCj4g ICsgKiAgIGV2ZW50IGF2YWlsYWJsZSBvciAqd2FpdCogdGltZS4NCj4gICsgKiAgIGlmIHRoZSBk ZXZpY2UgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aA0KPiAgUlRFX0VWRU5UX0RFVl9DRkdfUEVSX0RF UVVFVUVfV0FJVA0KPiAgKyAqICAgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0 aGUgZXZlbnQgYXZhaWxhYmxlIG9yICpkZXF1ZXVlX3dhaXRfbnMqDQo+ICArICogICBucyB3aGlj aCB3YXMgcHJldmlvdXNseSBzdXBwbGllZCB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpDQo+ ICArICoNCj4gICsgKiBAcmV0dXJuDQo+ICArICogVGhlIG51bWJlciBvZiBldmVudCBvYmplY3Rz IGFjdHVhbGx5IGRlcXVldWVkIGZyb20gdGhlIHBvcnQuIFRoZSByZXR1cm4NCj4gICsgKiB2YWx1 ZSBjYW4gYmUgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiB0aGUgKm51bSogcGFyYW1ldGVyIHdoZW4g dGhlDQo+ICArICogZXZlbnQgcG9ydCdzIHF1ZXVlIGlzIG5vdCBmdWxsLg0KPiAgKyAqDQo+ICAr ICogXHNlZSBydGVfZXZlbnRfZGVxdWV1ZSgpLCBydGVfZXZlbnRfcG9ydF9kZXF1ZXVlX2RlcHRo KCkNCj4gICsgKi8NCj4gICtleHRlcm4gaW50DQo+ICArcnRlX2V2ZW50X2RlcXVldWVfYnVyc3Qo dWludDhfdCBkZXZfaWQsIHVpbnQ4X3QgcG9ydF9pZCwNCj4gICsJCQlzdHJ1Y3QgcnRlX2V2ZW50 ICpldiwgaW50IG51bSwgdWludDY0X3Qgd2FpdCk7DQo+ICArDQo+ICArLyoqDQo+ICArICogUmVs ZWFzZSB0aGUgY3VycmVudCBmbG93IGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGEgc2NoZWR1bGUg dHlwZSB3aGljaA0KPiAgKyAqIGRlcXVldWVkIGZyb20gYSBnaXZlbiBldmVudCBxdWV1ZSB0aG91 Z2ggdGhlIGV2ZW50IHBvcnQgZGVzaWduYXRlZCBieQ0KPiAgKyAqIGl0cyAqcG9ydF9pZCoNCj4g ICsgKg0KPiAgKyAqIElmIGN1cnJlbnQgZmxvdydzIHNjaGVkdWxlciB0eXBlIG1ldGhvZCBpcyAq UlRFX1NDSEVEX1RZUEVfQVRPTUlDKg0KPiAgKyAqIHRoZW4gdGhpcyBmdW5jdGlvbiBoaW50cyB0 aGUgc2NoZWR1bGVyIHRoYXQgdGhlIHVzZXIgaGFzIGNvbXBsZXRlZCBjcml0aWNhbA0KPiAgKyAq IHNlY3Rpb24gcHJvY2Vzc2luZyBpbiB0aGUgY3VycmVudCBhdG9taWMgY29udGV4dC4NCj4gICsg KiBUaGUgc2NoZWR1bGVyIGlzIG5vdyBhbGxvd2VkIHRvIHNjaGVkdWxlIGV2ZW50cyBmcm9tIHRo ZSBzYW1lIGZsb3cgZnJvbQ0KPiAgKyAqIGFuIGV2ZW50IHF1ZXVlIHRvIGFub3RoZXIgcG9ydC4g SG93ZXZlciwgdGhlIGNvbnRleHQgbWF5IGJlIHN0aWxsIGhlbGQNCj4gICsgKiB1bnRpbCB0aGUg bmV4dCBydGVfZXZlbnRfZGVxdWV1ZSgpIG9yIHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCkgY2Fs bCwgdGhpcw0KPiAgKyAqIGNhbGwgYWxsb3dzIGJ1dCBkb2VzIG5vdCBmb3JjZSB0aGUgc2NoZWR1 bGVyIHRvIHJlbGVhc2UgdGhlIGNvbnRleHQgZWFybHkuDQo+ICArICoNCj4gICsgKiBFYXJseSBh dG9taWMgY29udGV4dCByZWxlYXNlIG1heSBpbmNyZWFzZSBwYXJhbGxlbGlzbSBhbmQgdGh1cyBz eXN0ZW0NCj4gICsgKiBwZXJmb3JtYW5jZSwgYnV0IHRoZSB1c2VyIG5lZWRzIHRvIGRlc2lnbiBj YXJlZnVsbHkgdGhlIHNwbGl0IGludG8gY3JpdGljYWwNCj4gICsgKiB2cyBub24tY3JpdGljYWwg c2VjdGlvbnMuDQo+ICArICoNCj4gICsgKiBJZiBjdXJyZW50IGZsb3cncyBzY2hlZHVsZXIgdHlw ZSBtZXRob2QgaXMgKlJURV9TQ0hFRF9UWVBFX09SREVSRUQqDQo+ICArICogdGhlbiB0aGlzIGZ1 bmN0aW9uIGhpbnRzIHRoZSBzY2hlZHVsZXIgdGhhdCB0aGUgdXNlciBoYXMgZG9uZSBhbGwgdGhh dCBuZWVkDQo+ICArICogdG8gbWFpbnRhaW4gZXZlbnQgb3JkZXIgaW4gdGhlIGN1cnJlbnQgb3Jk ZXJlZCBjb250ZXh0Lg0KPiAgKyAqIFRoZSBzY2hlZHVsZXIgaXMgYWxsb3dlZCB0byByZWxlYXNl IHRoZSBvcmRlcmVkIGNvbnRleHQgb2YgdGhpcyBwb3J0IGFuZA0KPiAgKyAqIGF2b2lkIHJlb3Jk ZXJpbmcgYW55IGZvbGxvd2luZyBlbnF1ZXVlcy4NCj4gICsgKg0KPiAgKyAqIEVhcmx5IG9yZGVy ZWQgY29udGV4dCByZWxlYXNlIG1heSBpbmNyZWFzZSBwYXJhbGxlbGlzbSBhbmQgdGh1cyBzeXN0 ZW0NCj4gICsgKiBwZXJmb3JtYW5jZS4NCj4gICsgKg0KPiAgKyAqIElmIGN1cnJlbnQgZmxvdydz IHNjaGVkdWxlciB0eXBlIG1ldGhvZCBpcyAqUlRFX1NDSEVEX1RZUEVfUEFSQUxMRUwqDQo+ICAr ICogb3Igbm8gc2NoZWR1bGluZyBjb250ZXh0IGlzIGhlbGQgdGhlbiB0aGlzIGZ1bmN0aW9uIG1h eSBiZSBhbiBOT09QLA0KPiAgKyAqIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uDQo+ ICArICoNCj4gICsgKiBJZiBtdWx0aXBsZSBldmVudHMgYXJlIGRlcXVldWVkIHdpdGggcnRlX2V2 ZW50X2RlcXVldWVfYnVyc3QoKSwNCj4gICsgKiBydGVfZXZlbnRfcmVsZWFzZSgpIHdpbGwgcmVs ZWFzZSBlYWNoIGZsb3cgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggYQ0KPiAgKyAqIHNjaGVkdWxl IHR5cGUgb2YgYW4gZXZlbnQgdGhvdWdoICppbmRleCosIGl0IGRlbm90ZXMgdGhlIG9yZGVyIGlu DQo+ICArICogd2hpY2ggaXQgd2FzIGRlcXVldWVkIHdpdGggcnRlX2V2ZW50X2RlcXVldWVfYnVy c3QoKQ0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZp ZXIgb2YgdGhlIGRldmljZS4NCj4gICsgKiBAcGFyYW0gcG9ydF9pZA0KPiAgKyAqICAgVGhlIGlk ZW50aWZpZXIgb2YgdGhlIGV2ZW50IHBvcnQuDQo+ICArICogQHBhcmFtIGluZGV4DQo+ICArICog ICBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHRoYXQgZGVxdWV1ZWQgd2l0aCBydGVfZXZlbnRfZGVx dWV1ZV9idXJzdCgpDQo+ICArICogICB3aGljaCBuZWVkcyB0byByZWxlYXNlLiBUaGUgdmFsdWUg emVybyB1c2VkIGlmIHRoZSBldmVudCBkZXF1ZXVlZCB3aXRoDQo+ICArICogICBydGVfZXZlbnRf ZGVxdWV1ZSgpDQo+ICArICoNCj4gICsgKiAgXHNlZSBydGVfZXZlbnRfZGVxdWV1ZSgpLCBydGVf ZXZlbnRfZGVxdWV1ZV9idXJzdCgpDQo+ICArICovDQo+ICArZXh0ZXJuIHZvaWQNCj4gICtydGVf ZXZlbnRfcmVsZWFzZSh1aW50OF90IGRldl9pZCwgdWludDhfdCBwb3J0X2lkLCB1aW50OF90IGlu ZGV4KTsNCj4gICsNCj4gICsjZGVmaW5lIFJURV9FVkVOVF9RVUVVRV9TRVJWSUNFX1BSSU9SSVRZ X0hJR0hFU1QgIDANCj4gICsvKio8IEhpZ2hlc3QgZXZlbnQgcXVldWUgc2VydmljaW5nIHByaW9y aXR5ICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfUVVFVUVfU0VSVklDRV9QUklPUklUWV9OT1JN QUwgICAxMjgNCj4gICsvKio8IE5vcm1hbCBldmVudCBxdWV1ZSBzZXJ2aWNpbmcgcHJpb3JpdHkg Ki8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9RVUVVRV9TRVJWSUNFX1BSSU9SSVRZX0xPV0VTVCAg IDI1NQ0KPiAgKy8qKjwgTG93ZXN0IGV2ZW50IHF1ZXVlIHNlcnZpY2luZyBwcmlvcml0eSAqLw0K PiAgKw0KPiAgKy8qKiBTdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcXVldWUgdG8gcG9ydCBsaW5rIGVz dGFibGlzaG1lbnQgYXR0cmlidXRlcyAqLw0KPiAgK3N0cnVjdCBydGVfZXZlbnRfcXVldWVfbGlu ayB7DQo+ICArCXVpbnQ4X3QgcXVldWVfaWQ7DQo+ICArCS8qKjwgRXZlbnQgcXVldWUgaWRlbnRp ZmllciB0byBzZWxlY3QgdGhlIHNvdXJjZSBxdWV1ZSB0byBsaW5rICovDQo+ICArCXVpbnQ4X3Qg cHJpb3JpdHk7DQo+ICArCS8qKjwgVGhlIHByaW9yaXR5IG9mIHRoZSBldmVudCBxdWV1ZSBmb3Ig dGhpcyBldmVudCBwb3J0Lg0KPiAgKwkgKiBUaGUgcHJpb3JpdHkgZGVmaW5lcyB0aGUgZXZlbnQg cG9ydCdzIHNlcnZpY2luZyBwcmlvcml0eSBmb3INCj4gICsJICogZXZlbnQgcXVldWUsIHdoaWNo IG1heSBiZSBpZ25vcmVkIGJ5IGFuIGltcGxlbWVudGF0aW9uLg0KPiAgKwkgKiBUaGUgcmVxdWVz dGVkIHByaW9yaXR5IHNob3VsZCBpbiB0aGUgcmFuZ2Ugb2YNCj4gICsJICogW1JURV9FVkVOVF9R VUVVRV9TRVJWSUNFX1BSSU9SSVRZX0hJR0hFU1QsDQo+ICArCSAqIFJURV9FVkVOVF9RVUVVRV9T RVJWSUNFX1BSSU9SSVRZX0xPV0VTVF0uDQo+ICArCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaGFs bCBub3JtYWxpemUgdGhlIHJlcXVlc3RlZCBwcmlvcml0eSB0bw0KPiAgKwkgKiBpbXBsZW1lbnRh dGlvbiBzdXBwb3J0ZWQgcHJpb3JpdHkgdmFsdWUuDQo+ICArCSAqLw0KPiAgK307DQo+ICArDQo+ ICArLyoqDQo+ICArICogTGluayBtdWx0aXBsZSBzb3VyY2UgZXZlbnQgcXVldWVzIHN1cHBsaWVk IGluICpydGVfZXZlbnRfcXVldWVfbGluayoNCj4gICsgKiBzdHJ1Y3R1cmUgYXMgKnF1ZXVlX2lk KiB0byB0aGUgZGVzdGluYXRpb24gZXZlbnQgcG9ydCBkZXNpZ25hdGVkIGJ5IGl0cw0KPiAgKyAq ICpwb3J0X2lkKiBvbiB0aGUgZXZlbnQgZGV2aWNlIGRlc2lnbmF0ZWQgYnkgaXRzICpkZXZfaWQq Lg0KPiAgKyAqDQo+ICArICogVGhlIGxpbmsgZXN0YWJsaXNobWVudCBzaGFsbCBlbmFibGUgdGhl IGV2ZW50IHBvcnQgKnBvcnRfaWQqIGZyb20NCj4gICsgKiByZWNlaXZpbmcgZXZlbnRzIGZyb20g dGhlIHNwZWNpZmllZCBldmVudCBxdWV1ZSAqcXVldWVfaWQqDQo+ICArICoNCj4gICsgKiBBbiBl dmVudCBxdWV1ZSBtYXkgbGluayB0byBvbmUgb3IgbW9yZSBldmVudCBwb3J0cy4NCj4gICsgKiBU aGUgbnVtYmVyIG9mIGxpbmtzIGNhbiBiZSBlc3RhYmxpc2hlZCBmcm9tIGFuIGV2ZW50IHF1ZXVl IHRvIGV2ZW50IHBvcnQgaXMNCj4gICsgKiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLg0KPiAgKyAq DQo+ICArICogRXZlbnQgcXVldWUocykgdG8gZXZlbnQgcG9ydCBsaW5rIGVzdGFibGlzaG1lbnQg Y2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZQ0KPiAgKyAqIHdpdGhvdXQgcmUtY29uZmlndXJpbmcg dGhlIGRldmljZSB0byBzdXBwb3J0IHNjYWxpbmcgYW5kIHRvIHJlZHVjZSB0aGUNCj4gICsgKiBs YXRlbmN5IG9mIGNyaXRpY2FsIHdvcmsgYnkgZXN0YWJsaXNoaW5nIHRoZSBsaW5rIHdpdGggbW9y ZSBldmVudCBwb3J0cw0KPiAgKyAqIGF0IHJ1bnRpbWUuDQo+ICArICoNCj4gICsgKiBAcGFyYW0g ZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqDQo+ ICArICogQHBhcmFtIHBvcnRfaWQNCj4gICsgKiAgIEV2ZW50IHBvcnQgaWRlbnRpZmllciB0byBz ZWxlY3QgdGhlIGRlc3RpbmF0aW9uIHBvcnQgdG8gbGluay4NCj4gICsgKg0KPiAgKyAqIEBwYXJh bSBsaW5rDQo+ICArICogICBBbiBhcnJheSBvZiAqbnVtKiBwb2ludGVycyB0byAqcnRlX2V2ZW50 X3F1ZXVlX2xpbmsqIHN0cnVjdHVyZQ0KPiAgKyAqICAgd2hpY2ggY29udGFpbiB0aGUgZXZlbnQg cXVldWUgdG8gZXZlbnQgcG9ydCBsaW5rIGVzdGFibGlzaG1lbnQgYXR0cmlidXRlcy4NCj4gICsg KiAgIE5VTEwgdmFsdWUgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSB0aGlzIGZ1bmN0aW9uIGxp bmtzIGFsbCB0aGUgY29uZmlndXJlZA0KPiAgKyAqICAgZXZlbnQgcXVldWVzICpuYl9ldmVudF9x dWV1ZXMqIHdoaWNoIHByZXZpb3VzbHkgc3VwcGxpZWQgdG8NCj4gICsgKiAgIHJ0ZV9ldmVudF9k ZXZfY29uZmlndXJlKCkgdG8gdGhlIGV2ZW50IHBvcnQgKnBvcnRfaWQqIHdpdGggbm9ybWFsDQo+ ICBzZXJ2aWNpbmcNCj4gICsgKiAgIHByaW9yaXR5KFJURV9FVkVOVF9RVUVVRV9TRVJWSUNFX1BS SU9SSVRZX05PUk1BTCkuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gbnVtDQo+ICArICogICBUaGUg bnVtYmVyIG9mIGxpbmtzIHRvIGVzdGFibGlzaA0KPiAgKyAqDQo+ICArICogQHJldHVybg0KPiAg KyAqIFRoZSBudW1iZXIgb2YgbGlua3MgYWN0dWFsbHkgZXN0YWJsaXNoZWQgb24gdGhlIGV2ZW50 IGRldmljZS4gVGhlIHJldHVybg0KPiAgKyAqIHZhbHVlIGNhbiBiZSBsZXNzIHRoYW4gdGhlIHZh bHVlIG9mIHRoZSAqbnVtKiBwYXJhbWV0ZXIgd2hlbiB0aGUNCj4gICsgKiBpbXBsZW1lbnRhdGlv biBoYXMgdGhlIGxpbWl0YXRpb24gb24gc3BlY2lmaWMgcXVldWUgdG8gcG9ydCBsaW5rDQo+ICAr ICogZXN0YWJsaXNobWVudCBvciBpZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZA0K PiAgKyAqIGluIGEgKnJ0ZV9ldmVudF9xdWV1ZV9saW5rKi4NCj4gICsgKiBJZiB0aGUgcmV0dXJu IHZhbHVlIGlzIGxlc3MgdGhhbiAqbnVtKiwgdGhlIHJlbWFpbmluZyBsaW5rcyBhdCB0aGUgZW5k IG9mDQo+ICArICogbGlua1tdIGFyZSBub3QgZXN0YWJsaXNoZWQsIGFuZCB0aGUgY2FsbGVyIGhh cyB0byB0YWtlIGNhcmUgb2YgdGhlbS4NCj4gICsgKiBJZiByZXR1cm4gdmFsdWUgaXMgbGVzcyB0 aGFuICpudW0qIHRoZW4gaW1wbGVtZW50YXRpb24gc2hhbGwgdXBkYXRlIHRoZQ0KPiAgKyAqIHJ0 ZV9lcnJubyBhY2NvcmRpbmdseSwgUG9zc2libGUgcnRlX2Vycm5vIHZhbHVlcyBhcmUNCj4gICsg KiAoLUVEUVVPVCkgUXVvdGEgZXhjZWVkZWQoQXBwbGljYXRpb24gdHJpZWQgdG8gbGluayB0aGUg cXVldWUgY29uZmlndXJlZA0KPiAgd2l0aA0KPiAgKyAqICBSVEVfRVZFTlRfUVVFVUVfQ0ZHX1NJ TkdMRV9DT05TVU1FUiB0byBtb3JlIHRoYW4gb25lIGV2ZW50DQo+ICBwb3J0cykNCj4gICsgKiAo LUVJTlZBTCkgSW52YWxpZCBwYXJhbWV0ZXINCj4gICsgKg0KPiAgKyAqLw0KPiAgK2V4dGVybiBp bnQNCj4gICtydGVfZXZlbnRfcG9ydF9saW5rKHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHBvcnRf aWQsDQo+ICArCQkgICAgc3RydWN0IHJ0ZV9ldmVudF9xdWV1ZV9saW5rIGxpbmtbXSwgaW50IG51 bSk7DQo+ICArDQo+ICArLyoqDQo+ICArICogVW5saW5rIG11bHRpcGxlIHNvdXJjZSBldmVudCBx dWV1ZXMgc3VwcGxpZWQgaW4gKnF1ZXVlcyogZnJvbSB0aGUNCj4gIGRlc3RpbmF0aW9uDQo+ICAr ICogZXZlbnQgcG9ydCBkZXNpZ25hdGVkIGJ5IGl0cyAqcG9ydF9pZCogb24gdGhlIGV2ZW50IGRl dmljZSBkZXNpZ25hdGVkDQo+ICArICogYnkgaXRzICpkZXZfaWQqLg0KPiAgKyAqDQo+ICArICog VGhlIHVubGluayBlc3RhYmxpc2htZW50IHNoYWxsIGRpc2FibGUgdGhlIGV2ZW50IHBvcnQgKnBv cnRfaWQqIGZyb20NCj4gICsgKiByZWNlaXZpbmcgZXZlbnRzIGZyb20gdGhlIHNwZWNpZmllZCBl dmVudCBxdWV1ZSAqcXVldWVfaWQqDQo+ICArICoNCj4gICsgKiBFdmVudCBxdWV1ZShzKSB0byBl dmVudCBwb3J0IHVubGluayBlc3RhYmxpc2htZW50IGNhbiBiZSBjaGFuZ2VkIGF0DQo+ICBydW50 aW1lDQo+ICArICogd2l0aG91dCByZS1jb25maWd1cmluZyB0aGUgZGV2aWNlLg0KPiAgKyAqDQo+ ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRldmlj ZS4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBwb3J0X2lkDQo+ICArICogICBFdmVudCBwb3J0IGlk ZW50aWZpZXIgdG8gc2VsZWN0IHRoZSBkZXN0aW5hdGlvbiBwb3J0IHRvIHVubGluay4NCj4gICsg Kg0KPiAgKyAqIEBwYXJhbSBxdWV1ZXMNCj4gICsgKiAgIEFuIGFycmF5IG9mICpudW0qIGV2ZW50 IHF1ZXVlcyB0byBiZSB1bmxpbmtlZCBmcm9tIHRoZSBldmVudCBwb3J0Lg0KPiAgKyAqICAgTlVM TCB2YWx1ZSBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gdW5saW5rcyBh bGwgdGhlDQo+ICArICogICBldmVudCBxdWV1ZShzKSBmcm9tIHRoZSBldmVudCBwb3J0ICpwb3J0 X2lkKi4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBudW0NCj4gICsgKiAgIFRoZSBudW1iZXIgb2Yg dW5saW5rcyB0byBlc3RhYmxpc2gNCj4gICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiBUaGUg bnVtYmVyIG9mIHVubGlua3MgYWN0dWFsbHkgZXN0YWJsaXNoZWQgb24gdGhlIGV2ZW50IGRldmlj ZS4gVGhlIHJldHVybg0KPiAgKyAqIHZhbHVlIGNhbiBiZSBsZXNzIHRoYW4gdGhlIHZhbHVlIG9m IHRoZSAqbnVtKiBwYXJhbWV0ZXIgd2hlbiB0aGUNCj4gICsgKiBpbXBsZW1lbnRhdGlvbiBoYXMg dGhlIGxpbWl0YXRpb24gb24gc3BlY2lmaWMgcXVldWUgdG8gcG9ydCB1bmxpbmsNCj4gICsgKiBl c3RhYmxpc2htZW50IG9yIGlmIGludmFsaWQgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkLg0KPiAg KyAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbGVzcyB0aGFuICpudW0qLCB0aGUgcmVtYWluaW5n IHF1ZXVlcyBhdCB0aGUgZW5kIG9mDQo+ICArICogcXVldWVzW10gYXJlIG5vdCBlc3RhYmxpc2hl ZCwgYW5kIHRoZSBjYWxsZXIgaGFzIHRvIHRha2UgY2FyZSBvZiB0aGVtLg0KPiAgKyAqIElmIHJl dHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4gKm51bSogdGhlbiBpbXBsZW1lbnRhdGlvbiBzaGFsbCB1 cGRhdGUgdGhlDQo+ICArICogcnRlX2Vycm5vIGFjY29yZGluZ2x5LCBQb3NzaWJsZSBydGVfZXJy bm8gdmFsdWVzIGFyZQ0KPiAgKyAqICgtRUlOVkFMKSBJbnZhbGlkIHBhcmFtZXRlcg0KPiAgKyAq DQo+ICArICovDQo+ICArZXh0ZXJuIGludA0KPiAgK3J0ZV9ldmVudF9wb3J0X3VubGluayh1aW50 OF90IGRldl9pZCwgdWludDhfdCBwb3J0X2lkLA0KPiAgKwkJICAgIHVpbnQ4X3QgcXVldWVzW10s IGludCBudW0pOw0KPiAgKw0KPiAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiAgK30NCj4gICsjZW5k aWYNCj4gICsNCj4gICsjZW5kaWYgLyogX1JURV9FVkVOVERFVl9IXyAqLw0KPiAgLS0NCj4gIDIu NS41DQoNCg==