From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Manoharan, Balasubramanian" Subject: Re: [PATCH v4 2/2] ethdev: add traffic management API Date: Wed, 31 May 2017 17:05:22 +0000 Message-ID: References: <1488589820-206947-2-git-send-email-cristian.dumitrescu@intel.com> <1495213972-109148-1-git-send-email-cristian.dumitrescu@intel.com> <1495213972-109148-3-git-send-email-cristian.dumitrescu@intel.com>, <20170531134509.GA13104@jerin> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Cristian Dumitrescu , "dev@dpdk.org" , "thomas.monjalon@6wind.com" , "hemant.agrawal@nxp.com" , "shreyansh.jain@nxp.com" To: "Jacob, Jerin" Return-path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0051.outbound.protection.outlook.com [104.47.33.51]) by dpdk.org (Postfix) with ESMTP id C768D137C for ; Wed, 31 May 2017 19:05:25 +0200 (CEST) In-Reply-To: <20170531134509.GA13104@jerin> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SSBhbSBmaW5lIHdpdGggdGhpcyBwcm9wb3NhbC4NCg0KQWNrZWQtYnk6IEJhbGFzdWJyYW1hbmlh biBNYW5vaGFyYW4NCjxiYWxhc3VicmFtYW5pYW4ubWFub2hhcmFuQGNhdml1bW5ldHdvcmtzLmNv bT4NCg0KPiBPbiAzMS1NYXktMjAxNywgYXQgNzoxNSBQTSwgSmFjb2IsIEplcmluIDxKZXJpbi5K YWNvYktvbGxhbnVra2FyYW5AY2F2aXVtLmNvbT4gd3JvdGU6DQo+IA0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPj4gRGF0ZTogRnJpLCAxOSBNYXkgMjAxNyAxODoxMjo1MiArMDEwMA0K Pj4gRnJvbTogQ3Jpc3RpYW4gRHVtaXRyZXNjdSA8Y3Jpc3RpYW4uZHVtaXRyZXNjdUBpbnRlbC5j b20+DQo+PiBUbzogZGV2QGRwZGsub3JnDQo+PiBDQzogdGhvbWFzLm1vbmphbG9uQDZ3aW5kLmNv bSwgamVyaW4uamFjb2JAY2F2aXVtbmV0d29ya3MuY29tLA0KPj4gYmFsYXN1YnJhbWFuaWFuLm1h bm9oYXJhbkBjYXZpdW0uY29tLCBoZW1hbnQuYWdyYXdhbEBueHAuY29tLA0KPj4gc2hyZXlhbnNo LmphaW5AbnhwLmNvbQ0KPj4gU3ViamVjdDogW1BBVENIIHY0IDIvMl0gZXRoZGV2OiBhZGQgdHJh ZmZpYyBtYW5hZ2VtZW50IEFQSQ0KPj4gWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDIuNy40DQo+ PiANCj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgZ2VuZXJpYyBldGhkZXYgQVBJIGZvciB0 aGUgdHJhZmZpYyBtYW5hZ2VyDQo+PiBjYXBhYmlsaXR5LCB3aGljaCBpbmNsdWRlczogaGllcmFy Y2hpY2FsIHNjaGVkdWxpbmcsIHRyYWZmaWMgc2hhcGluZywNCj4+IGNvbmdlc3Rpb24gbWFuYWdl bWVudCwgcGFja2V0IG1hcmtpbmcuDQo+PiANCj4+IE1haW4gZmVhdHVyZXM6DQo+PiAtIEV4cG9z ZWQgYXMgZXRoZGV2IHBsdWdpbiBjYXBhYmlsaXR5IChzaW1pbGFyIHRvIHJ0ZV9mbG93KQ0KPj4g LSBDYXBhYmlsaXR5IHF1ZXJ5IEFQSSBwZXIgcG9ydCwgcGVyIGxldmVsIGFuZCBwZXIgbm9kZQ0K Pj4gLSBTY2hlZHVsaW5nIGFsZ29yaXRobXM6IFN0cmljdCBQcmlvcml0eSAoU1ApLCBXZWlnaGVk IEZhaXIgUXVldWluZyAoV0ZRKQ0KPj4gLSBUcmFmZmljIHNoYXBpbmc6IHNpbmdsZS9kdWFsIHJh dGUsIHByaXZhdGUgKHBlciBub2RlKSBhbmQgc2hhcmVkIChieQ0KPj4gIG11bHRpcGxlIG5vZGVz KSBzaGFwZXJzDQo+PiAtIENvbmdlc3Rpb24gbWFuYWdlbWVudCBmb3IgaGllcmFyY2h5IGxlYWYg bm9kZXM6IGFsZ29yaXRobXMgb2YgdGFpbCBkcm9wLA0KPj4gIGhlYWQgZHJvcCwgV1JFRDsgcHJp dmF0ZSAocGVyIG5vZGUpIGFuZCBzaGFyZWQgKGJ5IG11bHRpcGxlIG5vZGVzKSBXUkVEDQo+PiAg Y29udGV4dHMNCj4+IC0gUGFja2V0IG1hcmtpbmc6IElFRUUgODAyLjFxIChWTEFOIERFSSksIElF VEYgUkZDIDMxNjggKElQdjQvSVB2NiBFQ04gZm9yDQo+PiAgVENQIGFuZCBTQ1RQKSwgSUVURiBS RkMgMjU5NyAoSVB2NCAvIElQdjYgRFNDUCkNCj4+IA0KPj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3Rp YW4gRHVtaXRyZXNjdSA8Y3Jpc3RpYW4uZHVtaXRyZXNjdUBpbnRlbC5jb20+DQo+IA0KPiBJTU8s IFdpdGggdGhpcyB2ZXJzaW9uLCBJdCBpcyByZWFjaGVkIHRvIGEgcmVhc29uYWJsZSBzaGFwZSB3 aGVyZSB3ZSBjYW4gc3RhcnQNCj4gdXNpbmcgaXQgYXMgYSBiYXNlIGZvciBuZXh0LXRtIGlmIHRo ZXJlIGFyZSBubyBvdGhlciByZXZpZXdlcnMgZm9yIHRoaXMNCj4gZmVhdHVyZS4NCj4gDQo+IFR3 byBtYWpvciBjb21tZW50cywNCj4gMSkgSU1PLCBXZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgQVBJ IGZvciBydGVfdG1fbm9kZV9hZGRfY2hlY2tfbGV2ZWwoKQ0KPiBhbmQgcnRlX3RtX25vZGVfYWRk KCkuV2UgY2FuIGp1c3Qga2VlcCwgcnRlX3RtX25vZGVfYWRkKCkgYW5kIG1vdmUgdGhlDQo+IGxl dmVsIGNoZWNrIGluIGNvbW1vbiBjb2RlLg0KPiANCj4gMikgVGhlcmUgYXJlIGEgbG90IG9mIGRv eHlnZW4gcmVuZGVyaW5nIGlzc3VlcyBpbiB0aGlzIGRvY3VtZW50LiBJIHdpbGwgdHJ5DQo+IHRv IGVudW1lcmF0ZSB0aGVtIGlubGluZS4gUGxlYXNlIGNyb3NzIGNoZWNrIHRoZSBoZWFkZXIgZmls ZSB3aXRoDQo+ICJtYWtlIGRvYy1hcGktaHRtbCIgb3V0cHV0Lg0KPiANCj4gV2l0aCBhYm92ZSBj aGFuZ2VzLA0KPiBBY2tlZC1ieTogSmVyaW4gSmFjb2IgPGplcmluLmphY29iQGNhdml1bW5ldHdv cmtzLmNvbT4NCj4gDQo+IA0KPj4gDQo+PiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDQgKw0KPj4gbGliL2xpYnJ0ZV9ldGhlci9NYWtlZmlsZSAgICAgICAgICAg ICAgfCAgICA1ICstDQo+PiBsaWIvbGlicnRlX2V0aGVyL3J0ZV9ldGhlcl92ZXJzaW9uLm1hcCB8 ICAgMzAgKw0KPj4gbGliL2xpYnJ0ZV9ldGhlci9ydGVfdG0uYyAgICAgICAgICAgICAgfCAgNDQ4 ICsrKysrKysrDQo+PiBsaWIvbGlicnRlX2V0aGVyL3J0ZV90bS5oICAgICAgICAgICAgICB8IDE5 MjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+IGxpYi9saWJydGVfZXRoZXIv cnRlX3RtX2RyaXZlci5oICAgICAgIHwgIDM3MyArKysrKysrDQo+IA0KPiBNaXNzaW5nIGRveHln ZW4gaG9va3MgaW4gZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiANCj4gW3J0ZV90bV0gICAg ICAgICAgICAgKEByZWYgcnRlX3RtLmgpLA0KPiBbcnRlX3RtX2RyaXZlcl0gICAgICAoQHJlZiBy dGVfdG1fZHJpdmVyLmgpLA0KPiANCj4+IDYgZmlsZXMgY2hhbmdlZCwgMjc4MiBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pDQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9ldGhl ci9ydGVfdG0uYw0KPj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfZXRoZXIvcnRlX3Rt LmgNCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2V0aGVyL3J0ZV90bV9kcml2ZXIu aA0KPj4gDQo+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KPj4gaW5k ZXggYWZiNGNhYi4uY2RhZjJhYyAxMDA2NDQNCj4+IC0tLSBhL01BSU5UQUlORVJTDQo+PiArKysg Yi9NQUlOVEFJTkVSUw0KPj4gQEAgLTI0MCw2ICsyNDAsMTAgQEAgRmxvdyBBUEkNCj4+IE06IEFk cmllbiBNYXphcmd1aWwgPGFkcmllbi5tYXphcmd1aWxANndpbmQuY29tPg0KPj4gRjogbGliL2xp YnJ0ZV9ldGhlci9ydGVfZmxvdyoNCj4+IA0KPj4gK1RyYWZmaWMgTWFuYWdlbWVudCBBUEkNCj4+ ICtNOiBDcmlzdGlhbiBEdW1pdHJlc2N1IDxjcmlzdGlhbi5kdW1pdHJlc2N1QGludGVsLmNvbT4N Cj4+ICtGOiBsaWIvbGlicnRlX2V0aGVyL3J0ZV90bSoNCj4gDQo+IEFkZCBuZXh0LXRtIHRyZWUg aGVyZS4NCj4gDQo+PiArDQo+PiBDcnlwdG8gQVBJDQo+PiBNOiBEZWNsYW4gRG9oZXJ0eSA8ZGVj bGFuLmRvaGVydHlAaW50ZWwuY29tPg0KPj4gRjogbGliL2xpYnJ0ZV9jcnlwdG9kZXYvDQo+PiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ldGhlci9NYWtlZmlsZSBiL2xpYi9saWJydGVfZXRoZXIv TWFrZWZpbGUNCj4+IGluZGV4IDkzZmRkZTEuLmRiNjkyYWUgMTAwNjQ0DQo+PiAtLS0gYS9saWIv bGlicnRlX2V0aGVyL01ha2VmaWxlDQo+PiArKysgYi9saWIvbGlicnRlX2V0aGVyL01ha2VmaWxl DQo+PiBAQCAtMSw2ICsxLDYgQEANCj4+ICMgICBCU0QgTElDRU5TRQ0KPj4gIw0KPj4gLSMgICBD b3B5cmlnaHQoYykgMjAxMC0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLg0KPj4gKyMgICBDb3B5cmlnaHQoYykgMjAxMC0yMDE3IEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLg0KPiANCj4gR29vZCB0byBhZGQgdGhlbSB0aGUgbmFtZSBvZiBv dGhlciBjb21wYW5pZXMgd2hvIGNvbnRyaWJ1dGVkIGluIHRoZQ0KPiBzcGVjaWZpY2F0aW9uLg0K PiANCj4+ICMgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPj4gIw0KPj4gIyAgIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0K Pj4gQEAgLTQ1LDYgKzQ1LDcgQEAgTElCQUJJVkVSIDo9IDYNCj4+IA0KPj4gU1JDUy15ICs9IHJ0 ZV9ldGhkZXYuYw0KPj4gU1JDUy15ICs9IHJ0ZV9mbG93LmMNCj4+ICtTUkNTLXkgKz0gcnRlX3Rt LmMNCj4+IA0KPj4gKyAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIFwNCj4+ICsgICAg ICAgICAgICBydGVfc3RyZXJyb3IoRU5PU1lTKSk7ICAgICAgICBcDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCj4+ICsgICAgb3BzLT5mdW5jOyAgICAgICAgICAgICAgICAgICAg XA0KPj4gK30pDQo+PiArDQo+PiArLyogR2V0IG51bWJlciBvZiBsZWFmIG5vZGVzICovDQo+PiAr aW50DQo+PiArcnRlX3RtX2dldF9udW1iZXJfb2ZfbGVhZl9ub2Rlcyh1aW50OF90IHBvcnRfaWQs DQo+PiArICAgIHVpbnQzMl90ICpuX2xlYWZfbm9kZXMsDQo+PiArICAgIHN0cnVjdCBydGVfdG1f ZXJyb3IgKmVycm9yKQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSAm cnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdOw0KPj4gKyAgICBjb25zdCBzdHJ1Y3QgcnRlX3RtX29w cyAqb3BzID0NCj4+ICsgICAgICAgIHJ0ZV90bV9vcHNfZ2V0KHBvcnRfaWQsIGVycm9yKTsNCj4+ ICsNCj4+ICsgICAgaWYgKG9wcyA9PSBOVUxMKQ0KPj4gKyAgICAgICAgcmV0dXJuIC1ydGVfZXJy bm87DQo+PiArDQo+PiArICAgIGlmIChuX2xlYWZfbm9kZXMgPT0gTlVMTCkgew0KPj4gKyAgICAg ICAgcnRlX3RtX2Vycm9yX3NldChlcnJvciwNCj4+ICsgICAgICAgICAgICBFSU5WQUwsDQo+PiAr ICAgICAgICAgICAgUlRFX1RNX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+PiArICAgICAgICAg ICAgTlVMTCwNCj4+ICsgICAgICAgICAgICBydGVfc3RyZXJyb3IoRUlOVkFMKSk7DQo+PiArICAg ICAgICByZXR1cm4gLXJ0ZV9lcnJubzsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICAqbl9sZWFm X25vZGVzID0gZGV2LT5kYXRhLT5uYl90eF9xdWV1ZXM7DQo+PiArICAgIHJldHVybiAwOw0KPj4g K30NCj4+ICsNCj4+ICsvKiBDaGVjayBub2RlIHR5cGUgKGxlYWYgb3Igbm9uLWxlYWYpICovDQo+ PiAraW50DQo+PiArcnRlX3RtX25vZGVfdHlwZV9nZXQodWludDhfdCBwb3J0X2lkLA0KPj4gKyAg ICB1aW50MzJfdCBub2RlX2lkLA0KPj4gKyAgICBpbnQgKmlzX2xlYWYsDQo+PiArICAgIHN0cnVj dCBydGVfdG1fZXJyb3IgKmVycm9yKQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdOw0KPiANCj4gbGVhZiBub2RlIGNhbiBi ZSBkZXRlY3RlZCBpbiB0aGUgY29tbW9uIGNvZGUgaXRzZWxmIGFzIGl0IGlzIDAgdG8NCj4gZGV2 LT5kYXRhLT5uYl90eF9xdWV1ZXMuDQo+IA0KPiANCj4+ICsgICAgcmV0dXJuIFJURV9UTV9GVU5D KHBvcnRfaWQsIG5vZGVfdHlwZV9nZXQpKGRldiwNCj4+ICsgICAgICAgIG5vZGVfaWQsIGlzX2xl YWYsIGVycm9yKTsNCj4+ICt9DQo+PiArDQo+PiArICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQo+PiArICogICAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UNCj4+ICsgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQo+PiArICovDQo+PiArDQo+PiArI2lm bmRlZiBfX0lOQ0xVREVfUlRFX1RNX0hfXw0KPj4gKyNkZWZpbmUgX19JTkNMVURFX1JURV9UTV9I X18NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAZmlsZQ0KPj4gKyAqIFJURSBHZW5lcmljIFRyYWZm aWMgTWFuYWdlciBBUEkNCj4+ICsgKg0KPj4gKyAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHRo ZSBhYmlsaXR5IHRvIGNvbmZpZ3VyZSB0aGUgdHJhZmZpYyBtYW5hZ2VyIGluIGENCj4+ICsgKiBn ZW5lcmljIHdheS4gSXQgaW5jbHVkZXMgZmVhdHVyZXMgc3VjaCBhczogaGllcmFyY2hpY2FsIHNj aGVkdWxpbmcsDQo+PiArICogdHJhZmZpYyBzaGFwaW5nLCBjb25nZXN0aW9uIG1hbmFnZW1lbnQs IHBhY2tldCBtYXJraW5nLCBldGMuDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPHN0ZGlu dC5oPg0KPj4gKw0KPj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPj4gK2V4dGVybiAiQyIgew0KPj4g KyNlbmRpZg0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEV0aGVybmV0IGZyYW1pbmcgb3ZlcmhlYWQu DQo+PiArICoNCj4+ICsgKiBPdmVyaGVhZCBmaWVsZHMgcGVyIEV0aGVybmV0IGZyYW1lOg0KPj4g KyAqIDEuIFByZWFtYmxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgNyBieXRlczsNCj4+ICsgKiAyLiBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKFNGRCk6ICAg ICAgICAgICAgICAgICAgICAgIDEgYnl0ZTsNCj4+ICsgKiAzLiBJbnRlci1GcmFtZSBHYXAgKElG Ryk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgYnl0ZXMuDQo+PiArICoNCj4+ICsg KiBPbmUgb2YgdGhlIHR5cGljYWwgdmFsdWVzIGZvciB0aGUgKnBrdF9sZW5ndGhfYWRqdXN0KiBm aWVsZCBvZiB0aGUgc2hhcGVyDQo+PiArICogcHJvZmlsZS4NCj4+ICsgKg0KPj4gKyAqIEBzZWUg c3RydWN0IHJ0ZV90bV9zaGFwZXJfcGFyYW1zDQo+PiArICoNCj4+ICsgKi8NCj4+ICsjZGVmaW5l IFJURV9UTV9FVEhfRlJBTUlOR19PVkVSSEVBRCAgICAgICAgICAgICAgICAgIDIwDQo+PiArDQo+ PiArLyoqDQo+PiArICogRXRoZXJuZXQgZnJhbWluZyBvdmVyaGVhZCBpbmNsdWRpbmcgdGhlIEZy YW1lIENoZWNrIFNlcXVlbmNlIChGQ1MpIGZpZWxkLg0KPj4gKyAqIFVzZWZ1bCB3aGVuIEZDUyBp cyBnZW5lcmF0ZWQgYW5kIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIEV0aGVybmV0IGZyYW1lIG9u DQo+PiArICogVFggc2lkZSB3aXRob3V0IGFueSBTVyBpbnRlcnZlbnRpb24uDQo+PiArICoNCj4+ ICsgKiBPbmUgb2YgdGhlIHR5cGljYWwgdmFsdWVzIGZvciB0aGUgcGt0X2xlbmd0aF9hZGp1c3Qg ZmllbGQgb2YgdGhlIHNoYXBlcg0KPj4gKyAqIHByb2ZpbGUuDQo+PiArICoNCj4+ICsgKiBAc2Vl IHN0cnVjdCBydGVfdG1fc2hhcGVyX3BhcmFtcw0KPj4gKyAqLw0KPj4gKyNkZWZpbmUgUlRFX1RN X0VUSF9GUkFNSU5HX09WRVJIRUFEX0ZDUyAgICAgICAgICAgICAgMjQNCj4+ICsNCj4+ICsvKio8 IEludmFsaWQgV1JFRCBwcm9maWxlIElEICovDQo+PiArI2RlZmluZSBSVEVfVE1fV1JFRF9QUk9G SUxFX0lEX05PTkUgICAgICAgICAgICAgICAgICBVSU5UMzJfTUFYDQo+PiArDQo+PiArLyoqPCBJ bnZhbGlkIHNoYXBlciBwcm9maWxlIElEICovDQo+PiArI2RlZmluZSBSVEVfVE1fU0hBUEVSX1BS T0ZJTEVfSURfTk9ORSAgICAgICAgICAgICAgICBVSU5UMzJfTUFYDQo+PiArDQo+PiArLyoqPCBO b2RlIElEIGZvciB0aGUgcGFyZW50IG9mIHRoZSByb290IG5vZGUgKi8NCj4+ICsjZGVmaW5lIFJU RV9UTV9OT0RFX0lEX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMl9NQVgNCj4+ ICsNCj4+ICsvKioNCj4+ICsgKiBDb2xvcg0KPj4gKyAqLw0KPj4gK2VudW0gcnRlX3RtX2NvbG9y IHsNCj4+ICsgICAgUlRFX1RNX0dSRUVOID0gMCwgLyoqPCBHcmVlbiAqLw0KPj4gKyAgICBSVEVf VE1fWUVMTE9XLCAvKio8IFllbGxvdyAqLw0KPj4gKyAgICBSVEVfVE1fUkVELCAvKio8IFJlZCAq Lw0KPj4gKyAgICBSVEVfVE1fQ09MT1JTIC8qKjwgTnVtYmVyIG9mIGNvbG9ycyAqLw0KPj4gK307 DQo+PiArDQo+PiArLyoqDQo+PiArICogTm9kZSBzdGF0aXN0aWNzIGNvdW50ZXIgdHlwZQ0KPj4g KyAqLw0KPj4gK2VudW0gcnRlX3RtX3N0YXRzX3R5cGUgew0KPj4gKyAgICAvKio8IE51bWJlciBv ZiBwYWNrZXRzIHNjaGVkdWxlZCBmcm9tIGN1cnJlbnQgbm9kZS4gKi8NCj4+ICsgICAgUlRFX1RN X1NUQVRTX05fUEtUUyA9IDEgPDwgMCwNCj4+ICsNCj4+ICsgICAgLyoqPCBOdW1iZXIgb2YgYnl0 ZXMgc2NoZWR1bGVkIGZyb20gY3VycmVudCBub2RlLiAqLw0KPj4gKyAgICBSVEVfVE1fU1RBVFNf Tl9CWVRFUyA9IDEgPDwgMSwNCj4+ICsNCj4+ICsgICAgLyoqPCBOdW1iZXIgb2YgZ3JlZW4gcGFj a2V0cyBkcm9wcGVkIGJ5IGN1cnJlbnQgbGVhZiBub2RlLiAgKi8NCj4+ICsgICAgUlRFX1RNX1NU QVRTX05fUEtUU19HUkVFTl9EUk9QUEVEID0gMSA8PCAyLA0KPj4gKw0KPj4gKyAgICAvKio8IE51 bWJlciBvZiB5ZWxsb3cgcGFja2V0cyBkcm9wcGVkIGJ5IGN1cnJlbnQgbGVhZiBub2RlLiAgKi8N Cj4+ICsgICAgUlRFX1RNX1NUQVRTX05fUEtUU19ZRUxMT1dfRFJPUFBFRCA9IDEgPDwgMywNCj4+ ICsNCj4+ICsgICAgLyoqPCBOdW1iZXIgb2YgcmVkIHBhY2tldHMgZHJvcHBlZCBieSBjdXJyZW50 IGxlYWYgbm9kZS4gICovDQo+PiArICAgIFJURV9UTV9TVEFUU19OX1BLVFNfUkVEX0RST1BQRUQg PSAxIDw8IDQsDQo+PiArDQo+PiArICAgIC8qKjwgTnVtYmVyIG9mIGdyZWVuIGJ5dGVzIGRyb3Bw ZWQgYnkgY3VycmVudCBsZWFmIG5vZGUuICAqLw0KPj4gKyAgICBSVEVfVE1fU1RBVFNfTl9CWVRF U19HUkVFTl9EUk9QUEVEID0gMSA8PCA1LA0KPj4gKw0KPj4gKyAgICAvKio8IE51bWJlciBvZiB5 ZWxsb3cgYnl0ZXMgZHJvcHBlZCBieSBjdXJyZW50IGxlYWYgbm9kZS4gICovDQo+PiArICAgIFJU RV9UTV9TVEFUU19OX0JZVEVTX1lFTExPV19EUk9QUEVEID0gMSA8PCA2LA0KPj4gKw0KPj4gKyAg ICAvKio8IE51bWJlciBvZiByZWQgYnl0ZXMgZHJvcHBlZCBieSBjdXJyZW50IGxlYWYgbm9kZS4g ICovDQo+PiArICAgIFJURV9UTV9TVEFUU19OX0JZVEVTX1JFRF9EUk9QUEVEID0gMSA8PCA3LA0K Pj4gKw0KPj4gKyAgICAvKio8IE51bWJlciBvZiBwYWNrZXRzIGN1cnJlbnRseSB3YWl0aW5nIGlu IHRoZSBwYWNrZXQgcXVldWUgb2YgY3VycmVudA0KPj4gKyAgICAgKiBsZWFmIG5vZGUuDQo+PiAr ICAgICAqLw0KPj4gKyAgICBSVEVfVE1fU1RBVFNfTl9QS1RTX1FVRVVFRCA9IDEgPDwgOCwNCj4+ ICsNCj4+ICsgICAgLyoqPCBOdW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IHdhaXRpbmcgaW4gdGhl IHBhY2tldCBxdWV1ZSBvZiBjdXJyZW50DQo+PiArICAgICAqIGxlYWYgbm9kZS4NCj4+ICsgICAg ICovDQo+PiArICAgIFJURV9UTV9TVEFUU19OX0JZVEVTX1FVRVVFRCA9IDEgPDwgOSwNCj4+ICt9 Ow0KPj4gKw0KPiANCj4+ICsgKiBOb2RlIHN0YXRpc3RpY3MgY291bnRlcnMNCj4+ICsgKi8NCj4+ ICtzdHJ1Y3QgcnRlX3RtX25vZGVfc3RhdHMgew0KPj4gKyAgICAvKio8IE51bWJlciBvZiBwYWNr ZXRzIHNjaGVkdWxlZCBmcm9tIGN1cnJlbnQgbm9kZS4gKi8NCj4+ICsgICAgdWludDY0X3Qgbl9w a3RzOw0KPiANCj4gSW5jb3JyZWN0IGRveHlnZW4gQVBJIEhUTUwgcmVuZGVyaW5nLiBJdCBpcyBy ZW5kZXJpbmcgYXMNCj4gIjwgTnVtYmVyIG9mIHBhY2tldHMgc2NoZWR1bGVkIGZyb20gY3VycmVu dCBub2RlLg0KPiBeXl4NCj4gDQo+IExvb2tzIGxpa2UgY29tbWVudCBoYXMgdG8gY29tZSBiZWxv dyB0aGUgInVpbnQ2NF90IG5fcGt0cyIuIEFwcGxpY2FibGUNCj4gYWNyb3NzIHRoZSBoZWFkZXIg ZmlsZS4NCj4gDQo+IA0KPj4gKw0KPj4gKyAgICAvKio8IE51bWJlciBvZiBieXRlcyBzY2hlZHVs ZWQgZnJvbSBjdXJyZW50IG5vZGUuICovDQo+PiArICAgIHVpbnQ2NF90IG5fYnl0ZXM7DQo+PiAr DQo+PiArICAgIC8qKjwgU3RhdGlzdGljcyBjb3VudGVycyBmb3IgbGVhZiBub2RlcyBvbmx5LiAq Lw0KPj4gKyAgICBzdHJ1Y3Qgew0KPj4gKyAgICAgICAgLyoqPCBOdW1iZXIgb2YgcGFja2V0cyBk cm9wcGVkIGJ5IGN1cnJlbnQgbGVhZiBub2RlIHBlciBlYWNoDQo+PiArICAgICAgICAgKiBjb2xv ci4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgdWludDY0X3Qgbl9wa3RzX2Ryb3BwZWRb UlRFX1RNX0NPTE9SU107DQo+PiArDQo+PiArICAgICAgICAvKio8IE51bWJlciBvZiBieXRlcyBk cm9wcGVkIGJ5IGN1cnJlbnQgbGVhZiBub2RlIHBlciBlYWNoDQo+PiArICAgICAgICAgKiBjb2xv ci4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgdWludDY0X3Qgbl9ieXRlc19kcm9wcGVk W1JURV9UTV9DT0xPUlNdOw0KPj4gKw0KPj4gKyAgICAgICAgLyoqPCBOdW1iZXIgb2YgcGFja2V0 cyBjdXJyZW50bHkgd2FpdGluZyBpbiB0aGUgcGFja2V0IHF1ZXVlIG9mDQo+PiArICAgICAgICAg KiBjdXJyZW50IGxlYWYgbm9kZS4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgdWludDY0 X3Qgbl9wa3RzX3F1ZXVlZDsNCj4+ICsNCj4+ICsgICAgICAgIC8qKjwgTnVtYmVyIG9mIGJ5dGVz IGN1cnJlbnRseSB3YWl0aW5nIGluIHRoZSBwYWNrZXQgcXVldWUgb2YNCj4+ICsgICAgICAgICAq IGN1cnJlbnQgbGVhZiBub2RlLg0KPj4gKyAgICAgICAgICovDQo+PiArICAgICAgICB1aW50NjRf dCBuX2J5dGVzX3F1ZXVlZDsNCj4+ICsgICAgfSBsZWFmOw0KPj4gK307DQo+PiArDQo+PiArLyoq DQo+PiArICogVHJhZmZpYyBtYW5hZ2VyIGR5bmFtaWMgdXBkYXRlcw0KPj4gKyAqLw0KPj4gK2Vu dW0gcnRlX3RtX2R5bmFtaWNfdXBkYXRlX3R5cGUgew0KPj4gKyAgICAvKio8IER5bmFtaWMgcGFy ZW50IG5vZGUgdXBkYXRlLiBUaGUgbmV3IHBhcmVudCBub2RlIGlzIGxvY2F0ZWQgb24gc2FtZQ0K Pj4gKyAgICAgKiBoaWVyYXJjaHkgbGV2ZWwgYXMgdGhlIGZvcm1lciBwYXJlbnQgbm9kZS4gQ29u c2VxdWVudGx5LCB0aGUgbm9kZQ0KPj4gKyAgICAgKiB3aG9zZSBwYXJlbnQgaXMgY2hhbmdlZCBw cmVzZXJ2ZXMgaXRzIGhpZXJhcmNoeSBsZXZlbC4NCj4+ICsgICAgICovDQo+PiArICAgIFJURV9U TV9VUERBVEVfTk9ERV9QQVJFTlRfS0VFUF9MRVZFTCA9IDEgPDwgMCwNCj4+ICsNCj4+ICsgICAg LyoqPCBEeW5hbWljIHBhcmVudCBub2RlIHVwZGF0ZS4gVGhlIG5ldyBwYXJlbnQgbm9kZSBpcyBs b2NhdGVkIG9uDQo+PiArICAgICAqIGRpZmZlcmVudCBoaWVyYXJjaHkgbGV2ZWwgdGhhbiB0aGUg Zm9ybWVyIHBhcmVudCBub2RlLiBDb25zZXF1ZW50bHksDQo+PiArICAgICAqIHRoZSBub2RlIHdo b3NlIHBhcmVudCBpcyBjaGFuZ2VkIGFsc28gY2hhbmdlcyBpdHMgaGllcmFyY2h5IGxldmVsLg0K Pj4gKyAgICAgKi8NCj4+ICsgICAgUlRFX1RNX1VQREFURV9OT0RFX1BBUkVOVF9DSEFOR0VfTEVW RUwgPSAxIDw8IDEsDQo+PiArDQo+PiArICAgIC8qKjwgRHluYW1pYyBub2RlIGFkZC9kZWxldGUu ICovDQo+PiArICAgIFJURV9UTV9VUERBVEVfTk9ERV9BRERfREVMRVRFID0gMSA8PCAyLA0KPj4g Kw0KPj4gKyAgICAvKio8IFN1c3BlbmQvcmVzdW1lIG5vZGVzLiAqLw0KPj4gKyAgICBSVEVfVE1f VVBEQVRFX05PREVfU1VTUEVORF9SRVNVTUUgPSAxIDw8IDMsDQo+PiArDQo+PiArICAgIC8qKjwg RHluYW1pYyBzd2l0Y2ggYmV0d2VlbiBieXRlLWJhc2VkIGFuZCBwYWNrZXQtYmFzZWQgV0ZRIHdl aWdodHMuICovDQo+PiArICAgIFJURV9UTV9VUERBVEVfTk9ERV9XRlFfV0VJR0hUX01PREUgPSAx IDw8IDQsDQo+PiArDQo+PiArICAgIC8qKjwgRHluYW1pYyB1cGRhdGUgb24gbnVtYmVyIG9mIFNQ IHByaW9yaXRpZXMuICovDQo+PiArICAgIFJURV9UTV9VUERBVEVfTk9ERV9OX1NQX1BSSU9SSVRJ RVMgPSAxIDw8IDUsDQo+PiArDQo+PiArICAgIC8qKjwgRHluYW1pYyB1cGRhdGUgb2YgY29uZ2Vz dGlvbiBtYW5hZ2VtZW50IG1vZGUgZm9yIGxlYWYgbm9kZXMuICovDQo+PiArICAgIFJURV9UTV9V UERBVEVfTk9ERV9DTUFOID0gMSA8PCA2LA0KPj4gKw0KPj4gKyAgICAvKio8IER5bmFtaWMgdXBk YXRlIG9mIHRoZSBzZXQgb2YgZW5hYmxlZCBzdGF0cyBjb3VudGVyIHR5cGVzLiAqLw0KPj4gKyAg ICBSVEVfVE1fVVBEQVRFX05PREVfU1RBVFMgPSAxIDw8IDcsDQo+PiArfTsNCj4+ICsNCj4+ICsv KioNCj4+ICsgKiBUcmFmZmljIG1hbmFnZXIgZ2V0IG51bWJlciBvZiBsZWFmIG5vZGVzDQo+PiAr ICoNCj4+ICsgKiBFYWNoIGxlYWYgbm9kZSBzaXRzIG9uIG9uIHRvcCBvZiBhIFRYIHF1ZXVlIG9m IHRoZSBjdXJyZW50IEV0aGVybmV0IHBvcnQuDQo+PiArICogVGhlcmVmb3JlLCB0aGUgc2V0IG9m IGxlYWYgbm9kZXMgaXMgcHJlZGVmaW5lZCwgdGhlaXIgbnVtYmVyIGlzIGFsd2F5cyBlcXVhbA0K Pj4gKyAqIHRvIE4gKHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBUWCBxdWV1ZXMgY29uZmlndXJl ZCBmb3IgdGhlIGN1cnJlbnQgcG9ydCkNCj4+ICsgKiBhbmQgdGhlaXIgSURzIGFyZSAwIC4uIChO LTEpLg0KPj4gKyAqDQo+PiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+IA0KPiBbaW5dIGNhbiBi ZSB0cmVhdGVkIGFzIGRlZmF1bHQgdG8gYXZvaWQgbWVudGlvbmluZyBbaW5dIGV2ZXJ5d2hlcmUu DQo+IA0KPj4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNl Lg0KPj4gKyAqIEBwYXJhbVtvdXRdIG5fbGVhZl9ub2Rlcw0KPj4gKyAqICAgTnVtYmVyIG9mIGxl YWYgbm9kZXMgZm9yIHRoZSBjdXJyZW50IHBvcnQuDQo+PiArICogQHBhcmFtW291dF0gZXJyb3IN Cj4+ICsgKiAgIEVycm9yIGRldGFpbHMuIEZpbGxlZCBpbiBvbmx5IG9uIGVycm9yLCB3aGVuIG5v dCBOVUxMLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXplcm8g ZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+IA0KPj4gKy8qKg0KPj4gKyAqIFRyYWZmaWMgbWFuYWdl ciBub2RlIGRlbGV0ZQ0KPj4gKyAqDQo+PiArICogRGVsZXRlIGFuIGV4aXN0aW5nIG5vZGUuIFRo aXMgb3BlcmF0aW9uIGZhaWxzIHdoZW4gdGhpcyBub2RlIGN1cnJlbnRseSBoYXMNCj4+ICsgKiBh dCBsZWFzdCBvbmUgdXNlciAoaS5lLiBjaGlsZCBub2RlKS4NCj4+ICsgKg0KPj4gKyAqIFdoZW4g Y2FsbGVkIGJlZm9yZSBydGVfdG1faGllcmFyY2h5X2NvbW1pdCgpIGludm9jYXRpb24sIHRoaXMg ZnVuY3Rpb24gaXMNCj4+ICsgKiB0eXBpY2FsbHkgdXNlZCB0byBkZWZpbmUgdGhlIGluaXRpYWwg c3RhcnQtdXAgaGllcmFyY2h5IGZvciB0aGUgcG9ydC4NCj4+ICsgKiBQcm92aWRlZCB0aGF0IGR5 bmFtaWMgaGllcmFyY2h5IHVwZGF0ZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBwb3J0 IChhcw0KPj4gKyAqIGFkdmVydGlzZWQgaW4gdGhlIHBvcnQgY2FwYWJpbGl0eSBzZXQpLCB0aGlz IGZ1bmN0aW9uIGNhbiBiZSBhbHNvIGNhbGxlZA0KPj4gKyAqIGFmdGVyIHRoZSBydGVfdG1faGll cmFyY2h5X2NvbW1pdCgpIGludm9jYXRpb24uDQo+PiArICoNCj4+ICsgKiBAcGFyYW1baW5dIHBv cnRfaWQNCj4+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmlj ZS4NCj4+ICsgKiBAcGFyYW1baW5dIG5vZGVfaWQNCj4+ICsgKiAgIE5vZGUgSUQuIE5lZWRzIHRv IGJlIHZhbGlkLg0KPj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+PiArICogICBFcnJvciBkZXRh aWxzLiBGaWxsZWQgaW4gb25seSBvbiBlcnJvciwgd2hlbiBub3QgTlVMTC4NCj4+ICsgKiBAcmV0 dXJuDQo+PiArICogICAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNl Lg0KPj4gKyAqDQo+PiArICogQHNlZSBSVEVfVE1fVVBEQVRFX05PREVfQUREX0RFTEVURQ0KPj4g KyAqLw0KPj4gK2ludA0KPj4gK3J0ZV90bV9ub2RlX2RlbGV0ZSh1aW50OF90IHBvcnRfaWQsDQo+ PiArICAgIHVpbnQzMl90IG5vZGVfaWQsDQo+PiArICAgIHN0cnVjdCBydGVfdG1fZXJyb3IgKmVy cm9yKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBUcmFmZmljIG1hbmFnZXIgbm9kZSBzdXNwZW5k DQo+PiArICoNCj4+ICsgKiBTdXNwZW5kIGFuIGV4aXN0aW5nIG5vZGUuIFdoaWxlIHRoZSBub2Rl IGlzIGluIHN1c3BlbmRlZCBzdGF0ZSwgbm8gcGFja2V0IGlzDQo+PiArICogc2NoZWR1bGVkIGZy b20gdGhpcyBub2RlIGFuZCBpdHMgZGVzY2VuZGFudHMuIFRoZSBub2RlIGV4aXRzIHRoZSBzdXNw ZW5kZWQNCj4+ICsgKiBzdGF0ZSB0aHJvdWdoIHRoZSBub2RlIHJlc3VtZSBvcGVyYXRpb24uDQo+ PiArICoNCj4+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4+ICsgKiAgIFRoZSBwb3J0IGlkZW50 aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4+ICsgKiBAcGFyYW1baW5dIG5vZGVfaWQN Cj4+ICsgKiAgIE5vZGUgSUQuIE5lZWRzIHRvIGJlIHZhbGlkLg0KPj4gKyAqIEBwYXJhbVtvdXRd IGVycm9yDQo+PiArICogICBFcnJvciBkZXRhaWxzLiBGaWxsZWQgaW4gb25seSBvbiBlcnJvciwg d2hlbiBub3QgTlVMTC4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICAwIG9uIHN1Y2Nlc3MsIG5v bi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPj4gKyAqDQo+PiArICogQHNlZSBydGVfdG1f bm9kZV9yZXN1bWUoKQ0KPj4gKyAqIEBzZWUgUlRFX1RNX1VQREFURV9OT0RFX1NVU1BFTkRfUkVT VU1FDQo+PiArICovDQo+PiAraW50DQo+PiArcnRlX3RtX25vZGVfc3VzcGVuZCh1aW50OF90IHBv cnRfaWQsDQo+PiArICAgIHVpbnQzMl90IG5vZGVfaWQsDQo+PiArICAgIHN0cnVjdCBydGVfdG1f ZXJyb3IgKmVycm9yKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBUcmFmZmljIG1hbmFnZXIgbm9k ZSByZXN1bWUNCj4+ICsgKg0KPj4gKyAqIFJlc3VtZSBhbiBleGlzdGluZyBub2RlIHRoYXQgaXMg Y3VycmVudGx5IGluIHN1c3BlbmRlZCBzdGF0ZS4gVGhlIG5vZGUNCj4+ICsgKiBlbnRlcmVkIHRo ZSBzdXNwZW5kZWQgc3RhdGUgYXMgcmVzdWx0IG9mIGEgcHJldmlvdXMgbm9kZSBzdXNwZW5kIG9w ZXJhdGlvbi4NCj4+ICsgKg0KPj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPj4gKyAqICAgVGhl IHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPj4gKyAqIEBwYXJhbVtp bl0gbm9kZV9pZA0KPj4gKyAqICAgTm9kZSBJRC4gTmVlZHMgdG8gYmUgdmFsaWQuDQo+PiArICog QHBhcmFtW291dF0gZXJyb3INCj4+ICsgKiAgIEVycm9yIGRldGFpbHMuIEZpbGxlZCBpbiBvbmx5 IG9uIGVycm9yLCB3aGVuIG5vdCBOVUxMLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgb24g c3VjY2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+PiArICoNCj4+ICsgKiBA c2VlIHJ0ZV90bV9ub2RlX3N1c3BlbmQoKQ0KPj4gKyAqIEBzZWUgUlRFX1RNX1VQREFURV9OT0RF X1NVU1BFTkRfUkVTVU1FDQo+PiArICovDQo+PiAraW50DQo+PiArcnRlX3RtX25vZGVfcmVzdW1l KHVpbnQ4X3QgcG9ydF9pZCwNCj4+ICsgICAgdWludDMyX3Qgbm9kZV9pZCwNCj4+ICsgICAgc3Ry dWN0IHJ0ZV90bV9lcnJvciAqZXJyb3IpOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIFRyYWZmaWMg bWFuYWdlciBoaWVyYXJjaHkgY29tbWl0DQo+PiArICoNCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCBkdXJpbmcgdGhlIHBvcnQgaW5pdGlhbGl6YXRpb24gcGhhc2UgKGJlZm9yZSB0aGUN Cj4+ICsgKiBFdGhlcm5ldCBwb3J0IGlzIHN0YXJ0ZWQpIHRvIGZyZWV6ZSB0aGUgc3RhcnQtdXAg aGllcmFyY2h5Lg0KPj4gKyAqDQo+PiArICogVGhpcyBmdW5jdGlvbiB0eXBpY2FsbHkgcGVyZm9y bXMgdGhlIGZvbGxvd2luZyBzdGVwczoNCj4+ICsgKiAgICBhKSBJdCB2YWxpZGF0ZXMgdGhlIHN0 YXJ0LXVwIGhpZXJhcmNoeSB0aGF0IHdhcyBwcmV2aW91c2x5IGRlZmluZWQgZm9yIHRoZQ0KPj4g KyAqICAgICAgIGN1cnJlbnQgcG9ydCB0aHJvdWdoIHN1Y2Nlc3NpdmUgcnRlX3RtX25vZGVfYWRk KCkgaW52b2NhdGlvbnM7DQo+PiArICogICAgYikgQXNzdW1pbmcgc3VjY2Vzc2Z1bCB2YWxpZGF0 aW9uLCBpdCBwZXJmb3JtcyBhbGwgdGhlIG5lY2Vzc2FyeSBwb3J0DQo+PiArICogICAgICAgc3Bl Y2lmaWMgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zIHRvIGluc3RhbGwgdGhlIHNwZWNpZmllZCBo aWVyYXJjaHkgb24NCj4+ICsgKiAgICAgICB0aGUgY3VycmVudCBwb3J0LCB3aXRoIGltbWVkaWF0 ZSBlZmZlY3Qgb25jZSB0aGUgcG9ydCBpcyBzdGFydGVkLg0KPj4gKyAqDQo+PiArICogVGhpcyBm dW5jdGlvbiBmYWlscyB3aGVuIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBoaWVyYXJjaHkgaXMg bm90IHN1cHBvcnRlZA0KPj4gKyAqIGJ5IHRoZSBFdGhlcm5ldCBwb3J0LCBpbiB3aGljaCBjYXNl IHRoZSB1c2VyIGNhbiBhYm9ydCBvciB0cnkgb3V0IGFub3RoZXINCj4+ICsgKiBoaWVyYXJjaHkg Y29uZmlndXJhdGlvbiAoZS5nLiBhIGhpZXJhcmNoeSB3aXRoIGxlc3MgbGVhZiBub2RlcyksIHdo aWNoIGNhbiBiZQ0KPj4gKyAqIGJ1aWxkIGZyb20gc2NyYXRjaCAod2hlbiAqY2xlYXJfb25fZmFp bCogaXMgZW5hYmxlZCkgb3IgYnkgbW9kaWZ5aW5nIHRoZQ0KPj4gKyAqIGV4aXN0aW5nIGhpZXJh cmNoeSBjb25maWd1cmF0aW9uICh3aGVuICpjbGVhcl9vbl9mYWlsKiBpcyBkaXNhYmxlZCkuDQo+ PiArICoNCj4+ICsgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgZmFpbCBkdWUg dG8gb3RoZXIgY2F1c2VzIChlLmcuIG5vdCBlbm91Z2gNCj4+ICsgKiBtZW1vcnkgYXZhaWxhYmxl IGluIHRoZSBzeXN0ZW0sIGV0YyksIGV2ZW4gdGhvdWdoIHRoZSBzcGVjaWZpZWQgaGllcmFyY2h5 IGlzDQo+PiArICogc3VwcG9ydGVkIGluIHByaW5jaXBsZSBieSB0aGUgY3VycmVudCBwb3J0Lg0K Pj4gKyAqDQo+PiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+PiArICogICBUaGUgcG9ydCBpZGVu dGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+PiArICogQHBhcmFtW2luXSBjbGVhcl9v bl9mYWlsDQo+PiArICogICBPbiBmdW5jdGlvbiBjYWxsIGZhaWx1cmUsIGhpZXJhcmNoeSBpcyBj bGVhcmVkIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMNCj4+ICsgKiAgIG5vbi16ZXJvIGFuZCBwcmVz ZXJ2ZWQgd2hlbiB0aGlzIHBhcmFtZXRlciBpcyBlcXVhbCB0byB6ZXJvLg0KPj4gKyAqIEBwYXJh bVtvdXRdIGVycm9yDQo+PiArICogICBFcnJvciBkZXRhaWxzLiBGaWxsZWQgaW4gb25seSBvbiBl cnJvciwgd2hlbiBub3QgTlVMTC4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICAwIG9uIHN1Y2Nl c3MsIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPj4gKyAqDQo+PiArICogQHNlZSBy dGVfdG1fbm9kZV9hZGQoKQ0KPj4gKyAqIEBzZWUgcnRlX3RtX25vZGVfZGVsZXRlKCkNCj4+ICsg Ki8NCj4+ICtpbnQNCj4+ICtydGVfdG1faGllcmFyY2h5X2NvbW1pdCh1aW50OF90IHBvcnRfaWQs DQo+PiArICAgIGludCBjbGVhcl9vbl9mYWlsLA0KPj4gKyAgICBzdHJ1Y3QgcnRlX3RtX2Vycm9y ICplcnJvcik7DQo+PiArDQo+PiArLyoqDQo+PiArICogVHJhZmZpYyBtYW5hZ2VyIG5vZGUgcGFy ZW50IHVwZGF0ZQ0KPj4gKyAqDQo+PiArICogUmVzdHJpY3Rpb24gZm9yIHJvb3Qgbm9kZTogaXRz IHBhcmVudCBjYW5ub3QgYmUgY2hhbmdlZC4NCj4+ICsgKg0KPj4gKyAqIFRoaXMgZnVuY3Rpb24g Y2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBydGVfdG1faGllcmFyY2h5X2NvbW1pdCgpDQo+ PiArICogaW52b2NhdGlvbi4gSXRzIHN1Y2Nlc3MgZGVwZW5kcyBvbiB0aGUgcG9ydCBzdXBwb3J0 IGZvciB0aGlzIG9wZXJhdGlvbiwgYXMNCj4+ICsgKiBhZHZlcnRpc2VkIHRocm91Z2ggdGhlIHBv cnQgY2FwYWJpbGl0eSBzZXQuDQo+PiArICoNCj4+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4+ ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4+ICsg KiBAcGFyYW1baW5dIG5vZGVfaWQNCj4+ICsgKiAgIE5vZGUgSUQuIE5lZWRzIHRvIGJlIHZhbGlk Lg0KPj4gKyAqIEBwYXJhbVtpbl0gcGFyZW50X25vZGVfaWQNCj4+ICsgKiAgIE5vZGUgSUQgZm9y IHRoZSBuZXcgcGFyZW50LiBOZWVkcyB0byBiZSB2YWxpZC4NCj4+ICsgKiBAcGFyYW1baW5dIHBy aW9yaXR5DQo+PiArICogICBOb2RlIHByaW9yaXR5LiBUaGUgaGlnaGVzdCBub2RlIHByaW9yaXR5 IGlzIHplcm8uIFVzZWQgYnkgdGhlIFNQIGFsZ29yaXRobQ0KPj4gKyAqICAgcnVubmluZyBvbiB0 aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50IG5vZGUgZm9yIHNjaGVkdWxpbmcgdGhpcyBjaGlsZCBu b2RlLg0KPj4gKyAqIEBwYXJhbVtpbl0gd2VpZ2h0DQo+PiArICogICBOb2RlIHdlaWdodC4gVGhl IG5vZGUgd2VpZ2h0IGlzIHJlbGF0aXZlIHRvIHRoZSB3ZWlnaHQgc3VtIG9mIGFsbCBzaWJsaW5n cw0KPj4gKyAqICAgdGhhdCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LiBUaGUgbG93ZXN0IHdlaWdo dCBpcyB6ZXJvLiBVc2VkIGJ5IHRoZSBXRlENCj4+ICsgKiAgIGFsZ29yaXRobSBydW5uaW5nIG9u IHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBmb3Igc2NoZWR1bGluZyB0aGlzDQo+PiAr ICogICBjaGlsZCBub2RlLg0KPj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+PiArICogICBFcnJv ciBkZXRhaWxzLiBGaWxsZWQgaW4gb25seSBvbiBlcnJvciwgd2hlbiBub3QgTlVMTC4NCj4+ICsg KiBAcmV0dXJuDQo+PiArICogICAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIGVycm9yIGNvZGUgb3Ro ZXJ3aXNlLg0KPj4gKyAqDQo+PiArICogQHNlZSBSVEVfVE1fVVBEQVRFX05PREVfUEFSRU5UX0tF RVBfTEVWRUwNCj4+ICsgKiBAc2VlIFJURV9UTV9VUERBVEVfTk9ERV9QQVJFTlRfQ0hBTkdFX0xF VkVMDQo+PiArICovDQo+PiAraW50DQo+PiArcnRlX3RtX25vZGVfcGFyZW50X3VwZGF0ZSh1aW50 OF90IHBvcnRfaWQsDQo+PiArICAgIHVpbnQzMl90IG5vZGVfaWQsDQo+PiArICAgIHVpbnQzMl90 IHBhcmVudF9ub2RlX2lkLA0KPj4gKyAgICB1aW50MzJfdCBwcmlvcml0eSwNCj4+ICsgICAgdWlu dDMyX3Qgd2VpZ2h0LA0KPj4gKyAgICBzdHJ1Y3QgcnRlX3RtX2Vycm9yICplcnJvcik7DQo+PiAr DQo+PiArLyoqDQo+PiArICogVHJhZmZpYyBtYW5hZ2VyIG5vZGUgcHJpdmF0ZSBzaGFwZXIgdXBk YXRlDQo+PiArICoNCj4+ICsgKiBSZXN0cmljdGlvbiBmb3IgdGhlIHJvb3Qgbm9kZTogaXRzIHBy aXZhdGUgc2hhcGVyIHByb2ZpbGUgbmVlZHMgdG8gYmUgdmFsaWQNCj4+ICsgKiBhbmQgc2luZ2xl IHJhdGUuDQo+PiArICoNCj4+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4+ICsgKiAgIFRoZSBw b3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4+ICsgKiBAcGFyYW1baW5d IG5vZGVfaWQNCj4+ICsgKiAgIE5vZGUgSUQuIE5lZWRzIHRvIGJlIHZhbGlkLg0KPj4gKyAqIEBw YXJhbVtpbl0gc2hhcGVyX3Byb2ZpbGVfaWQNCj4+ICsgKiAgIFNoYXBlciBwcm9maWxlIElEIGZv ciB0aGUgcHJpdmF0ZSBzaGFwZXIgb2YgdGhlIGN1cnJlbnQgbm9kZS4gTmVlZHMgdG8gYmUNCj4+ ICsgKiAgIGVpdGhlciB2YWxpZCBzaGFwZXIgcHJvZmlsZSBJRCBvciBSVEVfVE1fU0hBUEVSX1BS T0ZJTEVfSURfTk9ORSwgd2l0aA0KPj4gKyAqICAgdGhlIGxhdHRlciBkaXNhYmxpbmcgdGhlIHBy aXZhdGUgc2hhcGVyIG9mIHRoZSBjdXJyZW50IG5vZGUuDQo+PiArICogQHBhcmFtW291dF0gZXJy b3INCj4+ICsgKiAgIEVycm9yIGRldGFpbHMuIEZpbGxlZCBpbiBvbmx5IG9uIGVycm9yLCB3aGVu IG5vdCBOVUxMLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXpl cm8gZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+IA0KPiBNaXNzaW5nIHRoZSBAc2VlIHRvIHBvaW50 IHRoZSBjYXBhYmlsaXR5Lg0KPiANCj4gDQo+PiArICovDQo+PiAraW50DQo+PiArcnRlX3RtX25v ZGVfc2hhcGVyX3VwZGF0ZSh1aW50OF90IHBvcnRfaWQsDQo+PiArICAgIHVpbnQzMl90IG5vZGVf aWQsDQo+PiArICAgIHVpbnQzMl90IHNoYXBlcl9wcm9maWxlX2lkLA0KPj4gKyAgICBzdHJ1Y3Qg cnRlX3RtX2Vycm9yICplcnJvcik7DQo+PiArDQo+PiArLyoqDQo+PiArICogVHJhZmZpYyBtYW5h Z2VyIG5vZGUgc2hhcmVkIHNoYXBlcnMgdXBkYXRlDQo+PiArICoNCj4+ICsgKiBSZXN0cmljdGlv biBmb3Igcm9vdCBub2RlOiBjYW5ub3QgdXNlIGFueSBzaGFyZWQgcmF0ZSBzaGFwZXJzLg0KPj4g KyAqDQo+PiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+PiArICogICBUaGUgcG9ydCBpZGVudGlm aWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+PiArICogQHBhcmFtW2luXSBub2RlX2lkDQo+ PiArICogICBOb2RlIElELiBOZWVkcyB0byBiZSB2YWxpZC4NCj4+ICsgKiBAcGFyYW1baW5dIHNo YXJlZF9zaGFwZXJfaWQNCj4+ICsgKiAgIFNoYXJlZCBzaGFwZXIgSUQuIE5lZWRzIHRvIGJlIHZh bGlkLg0KPj4gKyAqIEBwYXJhbVtpbl0gYWRkDQo+PiArICogICBTZXQgdG8gbm9uLXplcm8gdmFs dWUgdG8gYWRkIHRoaXMgc2hhcmVkIHNoYXBlciB0byBjdXJyZW50IG5vZGUgb3IgdG8gemVybw0K Pj4gKyAqICAgdG8gZGVsZXRlIHRoaXMgc2hhcmVkIHNoYXBlciBmcm9tIGN1cnJlbnQgbm9kZS4N Cj4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPj4gKyAqICAgRXJyb3IgZGV0YWlscy4gRmlsbGVk IGluIG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+PiArICogQHJldHVybg0KPj4gKyAq ICAgMCBvbiBzdWNjZXNzLCBub24temVybyBlcnJvciBjb2RlIG90aGVyd2lzZS4NCj4gDQo+IE1p c3NpbmcgdGhlIEBzZWUgdG8gcG9pbnQgdGhlIGNhcGFiaWxpdHkuDQo+IA0KPj4gKyAqLw0KPj4g K2ludA0KPj4gK3J0ZV90bV9ub2RlX3NoYXJlZF9zaGFwZXJfdXBkYXRlKHVpbnQ4X3QgcG9ydF9p ZCwNCj4+ICsgICAgdWludDMyX3Qgbm9kZV9pZCwNCj4+ICsgICAgdWludDMyX3Qgc2hhcmVkX3No YXBlcl9pZCwNCj4+ICsgICAgaW50IGFkZCwNCj4+ICsgICAgc3RydWN0IHJ0ZV90bV9lcnJvciAq ZXJyb3IpOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIFRyYWZmaWMgbWFuYWdlciBub2RlIGVuYWJs ZWQgc3RhdGlzdGljcyBjb3VudGVycyB1cGRhdGUNCj4+ICsgKg0KPj4gKyAqIEBwYXJhbVtpbl0g cG9ydF9pZA0KPj4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2 aWNlLg0KPj4gKyAqIEBwYXJhbVtpbl0gbm9kZV9pZA0KPj4gKyAqICAgTm9kZSBJRC4gTmVlZHMg dG8gYmUgdmFsaWQuDQo+PiArICogQHBhcmFtW2luXSBzdGF0c19tYXNrDQo+PiArICogICBNYXNr IG9mIHN0YXRpc3RpY3MgY291bnRlciB0eXBlcyB0byBiZSBlbmFibGVkIGZvciB0aGUgY3VycmVu dCBub2RlLiBUaGlzDQo+PiArICogICBuZWVkcyB0byBiZSBhIHN1YnNldCBvZiB0aGUgc3RhdGlz dGljcyBjb3VudGVyIHR5cGVzIGF2YWlsYWJsZSBmb3IgdGhlDQo+PiArICogICBjdXJyZW50IG5v ZGUuIEFueSBzdGF0aXN0aWNzIGNvdW50ZXIgdHlwZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBzZXQg aXMgdG8NCj4+ICsgKiAgIGJlIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBub2RlLg0KPj4gKyAq IEBwYXJhbVtvdXRdIGVycm9yDQo+PiArICogICBFcnJvciBkZXRhaWxzLiBGaWxsZWQgaW4gb25s eSBvbiBlcnJvciwgd2hlbiBub3QgTlVMTC4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICAwIG9u IHN1Y2Nlc3MsIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPj4gKyAqDQo+PiArICog QHNlZSBlbnVtIHJ0ZV90bV9zdGF0c190eXBlDQo+PiArICogQHNlZSBSVEVfVE1fVVBEQVRFX05P REVfU1RBVFMNCj4gDQo+IEluY29ycmVjdCBkb3h5Z2VuIEFQSSBIVE1MIHJlbmRlcmluZy4NCj4g DQo+PiArICovDQo+PiAraW50DQo+PiArcnRlX3RtX25vZGVfc3RhdHNfdXBkYXRlKHVpbnQ4X3Qg cG9ydF9pZCwNCj4+ICsgICAgdWludDMyX3Qgbm9kZV9pZCwNCj4+ICsgICAgdWludDY0X3Qgc3Rh dHNfbWFzaywNCj4+ICsgICAgc3RydWN0IHJ0ZV90bV9lcnJvciAqZXJyb3IpOw0KPj4gKw0KPj4g Ky8qKg0KPj4gKyAqIFRyYWZmaWMgbWFuYWdlciBub2RlIFdGUSB3ZWlnaHQgbW9kZSB1cGRhdGUN Cj4+ICsgKg0KPj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPj4gKyAqICAgVGhlIHBvcnQgaWRl bnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPj4gKyAqIEBwYXJhbVtpbl0gbm9kZV9p ZA0KPj4gKyAqICAgTm9kZSBJRC4gTmVlZHMgdG8gYmUgdmFsaWQgbGVhZiBub2RlIElELg0KPj4g KyAqIEBwYXJhbVtpbl0gd2ZxX3dlaWdodF9tb2RlDQo+PiArICogICBXRlEgd2VpZ2h0IG1vZGUg Zm9yIGVhY2ggU1AgcHJpb3JpdHkuIFdoZW4gTlVMTCwgaXQgaW5kaWNhdGVzIHRoYXQgV0ZRIGlz DQo+PiArICogICB0byBiZSB1c2VkIGZvciBhbGwgcHJpb3JpdGllcy4gV2hlbiBub24tTlVMTCwg aXQgcG9pbnRzIHRvIGEgcHJlLWFsbG9jYXRlZA0KPj4gKyAqICAgYXJyYXkgb2YgKm5fc3BfcHJp b3JpdGllcyogdmFsdWVzLCB3aXRoIG5vbi16ZXJvIHZhbHVlIGZvciBieXRlLW1vZGUgYW5kDQo+ PiArICogICB6ZXJvIGZvciBwYWNrZXQtbW9kZS4NCj4+ICsgKiBAcGFyYW1baW5dIG5fc3BfcHJp b3JpdGllcw0KPj4gKyAqICAgTnVtYmVyIG9mIFNQIHByaW9yaXRpZXMuDQo+PiArICogQHBhcmFt W291dF0gZXJyb3INCj4+ICsgKiAgIEVycm9yIGRldGFpbHMuIEZpbGxlZCBpbiBvbmx5IG9uIGVy cm9yLCB3aGVuIG5vdCBOVUxMLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgb24gc3VjY2Vz cywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+PiArICoNCj4+ICsgKiBAc2VlIFJU RV9UTV9VUERBVEVfTk9ERV9XRlFfV0VJR0hUX01PREUNCj4+ICsgKiBAc2VlIFJURV9UTV9VUERB VEVfTk9ERV9OX1NQX1BSSU9SSVRJRVMNCj4+ICsgKi8NCj4+ICtpbnQNCj4+ICtydGVfdG1fbm9k ZV93ZnFfd2VpZ2h0X21vZGVfdXBkYXRlKHVpbnQ4X3QgcG9ydF9pZCwNCj4+ICsgICAgdWludDMy X3Qgbm9kZV9pZCwNCj4+ICsgICAgaW50ICp3ZnFfd2VpZ2h0X21vZGUsDQo+PiArICAgIHVpbnQz Ml90IG5fc3BfcHJpb3JpdGllcywNCj4+ICsgICAgc3RydWN0IHJ0ZV90bV9lcnJvciAqZXJyb3Ip Ow0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIFRyYWZmaWMgbWFuYWdlciBub2RlIGNvbmdlc3Rpb24g bWFuYWdlbWVudCBtb2RlIHVwZGF0ZQ0KPj4gKyAqDQo+PiArICogQHBhcmFtW2luXSBwb3J0X2lk DQo+PiArICogICBUaGUgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ PiArICogQHBhcmFtW2luXSBub2RlX2lkDQo+PiArICogICBOb2RlIElELiBOZWVkcyB0byBiZSB2 YWxpZCBsZWFmIG5vZGUgSUQuDQo+PiArICogQHBhcmFtW2luXSBjbWFuDQo+PiArICogICBDb25n ZXN0aW9uIG1hbmFnZW1lbnQgbW9kZS4NCj4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPj4gKyAq ICAgRXJyb3IgZGV0YWlscy4gRmlsbGVkIGluIG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwu DQo+PiArICogQHJldHVybg0KPj4gKyAqICAgMCBvbiBzdWNjZXNzLCBub24temVybyBlcnJvciBj b2RlIG90aGVyd2lzZS4NCj4+ICsgKg0KPj4gKyAqIEBzZWUgUlRFX1RNX1VQREFURV9OT0RFX0NN QU4NCj4+ICsgKi8NCj4+ICtpbnQNCj4+ICtydGVfdG1fbm9kZV9jbWFuX3VwZGF0ZSh1aW50OF90 IHBvcnRfaWQsDQo+PiArICAgIHVpbnQzMl90IG5vZGVfaWQsDQo+PiArICAgIGVudW0gcnRlX3Rt X2NtYW5fbW9kZSBjbWFuLA0KPj4gKyAgICBzdHJ1Y3QgcnRlX3RtX2Vycm9yICplcnJvcik7DQo+ PiArDQo+PiArLyoqDQo+PiArICogVHJhZmZpYyBtYW5hZ2VyIG5vZGUgcHJpdmF0ZSBXUkVEIGNv bnRleHQgdXBkYXRlDQo+PiArICoNCj4+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4+ICsgKiAg IFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4+ICsgKiBAcGFy YW1baW5dIG5vZGVfaWQNCj4+ICsgKiAgIE5vZGUgSUQuIE5lZWRzIHRvIGJlIHZhbGlkIGxlYWYg bm9kZSBJRC4NCj4+ICsgKiBAcGFyYW1baW5dIHdyZWRfcHJvZmlsZV9pZA0KPj4gKyAqICAgV1JF RCBwcm9maWxlIElEIGZvciB0aGUgcHJpdmF0ZSBXUkVEIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQg bm9kZS4gTmVlZHMgdG8NCj4+ICsgKiAgIGJlIGVpdGhlciB2YWxpZCBXUkVEIHByb2ZpbGUgSUQg b3IgUlRFX1RNX1dSRURfUFJPRklMRV9JRF9OT05FLCB3aXRoIHRoZQ0KPj4gKyAqICAgbGF0dGVy IGRpc2FibGluZyB0aGUgcHJpdmF0ZSBXUkVEIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgbm9kZS4N Cj4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPj4gKyAqICAgRXJyb3IgZGV0YWlscy4gRmlsbGVk IGluIG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+PiArICogQHJldHVybg0KPj4gKyAq ICAgMCBvbiBzdWNjZXNzLCBub24temVybyBlcnJvciBjb2RlIG90aGVyd2lzZS4NCj4+ICsgKi8N Cj4gDQo+IE1pc3NpbmcgdGhlIEBzZWUgdG8gcG9pbnQgdGhlIGNhcGFiaWxpdHkuDQo+IA0KPj4g K2ludA0KPj4gK3J0ZV90bV9ub2RlX3dyZWRfY29udGV4dF91cGRhdGUodWludDhfdCBwb3J0X2lk LA0KPj4gKyAgICB1aW50MzJfdCBub2RlX2lkLA0KPj4gKyAgICB1aW50MzJfdCB3cmVkX3Byb2Zp bGVfaWQsDQo+PiArICAgIHN0cnVjdCBydGVfdG1fZXJyb3IgKmVycm9yKTsNCj4+ICsNCj4+ICsv KioNCj4+ICsgKiBUcmFmZmljIG1hbmFnZXIgbm9kZSBzaGFyZWQgV1JFRCBjb250ZXh0IHVwZGF0 ZQ0KPj4gKyAqDQo+PiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+PiArICogICBUaGUgcG9ydCBp ZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+PiArICogQHBhcmFtW2luXSBub2Rl X2lkDQo+PiArICogICBOb2RlIElELiBOZWVkcyB0byBiZSB2YWxpZCBsZWFmIG5vZGUgSUQuDQo+ PiArICogQHBhcmFtW2luXSBzaGFyZWRfd3JlZF9jb250ZXh0X2lkDQo+PiArICogICBTaGFyZWQg V1JFRCBjb250ZXh0IElELiBOZWVkcyB0byBiZSB2YWxpZC4NCj4+ICsgKiBAcGFyYW1baW5dIGFk ZA0KPj4gKyAqICAgU2V0IHRvIG5vbi16ZXJvIHZhbHVlIHRvIGFkZCB0aGlzIHNoYXJlZCBXUkVE IGNvbnRleHQgdG8gY3VycmVudCBub2RlIG9yDQo+PiArICogICB0byB6ZXJvIHRvIGRlbGV0ZSB0 aGlzIHNoYXJlZCBXUkVEIGNvbnRleHQgZnJvbSBjdXJyZW50IG5vZGUuDQo+PiArICogQHBhcmFt W291dF0gZXJyb3INCj4+ICsgKiAgIEVycm9yIGRldGFpbHMuIEZpbGxlZCBpbiBvbmx5IG9uIGVy cm9yLCB3aGVuIG5vdCBOVUxMLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgb24gc3VjY2Vz cywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+IA0KPiBNaXNzaW5nIHRoZSBAc2Vl IHRvIHBvaW50IHRoZSBjYXBhYmlsaXR5Lg0KPiANCj4+ICsgKiBAc2VlIHN0cnVjdCBydGVfdG1f Y2FwYWJpbGl0aWVzOjptYXJrX3ZsYW5fZGVpX3N1cHBvcnRlZA0KPj4gKyAqLw0KPj4gK2ludA0K Pj4gK3J0ZV90bV9tYXJrX3ZsYW5fZGVpKHVpbnQ4X3QgcG9ydF9pZCwNCj4+ICsgICAgaW50IG1h cmtfZ3JlZW4sDQo+PiArICAgIGludCBtYXJrX3llbGxvdywNCj4+ICsgICAgaW50IG1hcmtfcmVk LA0KPj4gKyAgICBzdHJ1Y3QgcnRlX3RtX2Vycm9yICplcnJvcik7DQo+PiArDQo+PiArLyoqDQo+ PiArICogVHJhZmZpYyBtYW5hZ2VyIHBhY2tldCBtYXJraW5nIC0gSVB2NCAvIElQdjYgRUNOIChJ RVRGIFJGQyAzMTY4KQ0KPj4gKyAqDQo+PiArICogSUVURiBSRkNzIDI0NzQgYW5kIDMxNjggcmVv cmdhbml6ZSB0aGUgSVB2NCBUeXBlIG9mIFNlcnZpY2UgKFRPUykgZmllbGQNCj4+ICsgKiAoOCBi aXRzKSBhbmQgdGhlIElQdjYgVHJhZmZpYyBDbGFzcyAoVEMpIGZpZWxkICg4IGJpdHMpIGludG8g RGlmZmVyZW50aWF0ZWQNCj4+ICsgKiBTZXJ2aWNlcyBDb2RlcG9pbnQgKERTQ1ApIGZpZWxkICg2 IGJpdHMpIGFuZCBFeHBsaWNpdCBDb25nZXN0aW9uDQo+PiArICogTm90aWZpY2F0aW9uIChFQ04p IGZpZWxkICgyIGJpdHMpLiBUaGUgRFNDUCBmaWVsZCBpcyB0eXBpY2FsbHkgdXNlZCB0bw0KPj4g KyAqIGVuY29kZSB0aGUgdHJhZmZpYyBjbGFzcyBhbmQvb3IgZHJvcCBwcmlvcml0eSAoUkZDIDI1 OTcpLCB3aGlsZSB0aGUgRUNODQo+PiArICogZmllbGQgaXMgdXNlZCBieSBSRkMgMzE2OCB0byBp bXBsZW1lbnQgYSBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20NCj4+ICsgKiB0byBi ZSBsZXZlcmFnZWQgYnkgdHJhbnNwb3J0IGxheWVyIHByb3RvY29scyBzdWNoIGFzIFRDUCBhbmQg U0NUUCB0aGF0IGhhdmUNCj4+ICsgKiBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcy4NCj4+ ICsgKg0KPj4gKyAqIFdoZW4gY29uZ2VzdGlvbiBpcyBleHBlcmllbmNlZCwgYXMgYWx0ZXJuYXRp dmUgdG8gZHJvcHBpbmcgdGhlIHBhY2tldCwNCj4+ICsgKiByb3V0ZXJzIGNhbiBjaGFuZ2UgdGhl IEVDTiBmaWVsZCBvZiBpbnB1dCBwYWNrZXRzIGZyb20gMidiMDEgb3IgMidiMTANCj4+ICsgKiAo dmFsdWVzIGluZGljYXRpbmcgdGhhdCBzb3VyY2UgZW5kcG9pbnQgaXMgRUNOLWNhcGFibGUpIHRv IDInYjExIChtZWFuaW5nDQo+PiArICogdGhhdCBjb25nZXN0aW9uIGlzIGV4cGVyaWVuY2VkKS4g VGhlIGRlc3RpbmF0aW9uIGVuZHBvaW50IGNhbiB1c2UgdGhlDQo+PiArICogRUNOLUVjaG8gKEVD RSkgVENQIGZsYWcgdG8gcmVsYXkgdGhlIGNvbmdlc3Rpb24gaW5kaWNhdGlvbiBiYWNrIHRvIHRo ZQ0KPj4gKyAqIHNvdXJjZSBlbmRwb2ludCwgd2hpY2ggYWNrbm93bGVkZ2VzIGl0IGJhY2sgdG8g dGhlIGRlc3RpbmF0aW9uIGVuZHBvaW50IHdpdGgNCj4+ICsgKiB0aGUgQ29uZ2VzdGlvbiBXaW5k b3cgUmVkdWNlZCAoQ1dSKSBUQ1AgZmxhZy4NCj4+ICsgKg0KPj4gKyAqIEFsbCBJUHY0L0lQdjYg cGFja2V0cyBvZiBhIGdpdmVuIGNvbG9yIHdpdGggRUNOIHNldCB0byAy4oCZYjAxIG9yIDLigJli MTANCj4+ICsgKiBjYXJyeWluZyBUQ1Agb3IgU0NUUCBoYXZlIHRoZWlyIEVDTiBzZXQgdG8gMuKA mWIxMSBpZiB0aGUgbWFya2luZyBmZWF0dXJlIGlzDQo+PiArICogZW5hYmxlZCBmb3IgdGhlIGN1 cnJlbnQgY29sb3IsIG90aGVyd2lzZSB0aGUgRUNOIGZpZWxkIGlzIGxlZnQgYXMgaXMuDQo+PiAr ICoNCj4+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZp ZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4+ICsgKiBAcGFyYW1baW5dIG1hcmtfZ3JlZW4N Cj4+ICsgKiAgIFNldCB0byBub24temVybyB2YWx1ZSB0byBlbmFibGUgbWFya2luZyBvZiBncmVl biBwYWNrZXRzIGFuZCB0byB6ZXJvIHRvDQo+PiArICogICBkaXNhYmxlIGl0Lg0KPj4gKyAqIEBw YXJhbVtpbl0gbWFya195ZWxsb3cNCj4+ICsgKiAgIFNldCB0byBub24temVybyB2YWx1ZSB0byBl bmFibGUgbWFya2luZyBvZiB5ZWxsb3cgcGFja2V0cyBhbmQgdG8gemVybyB0bw0KPj4gKyAqICAg ZGlzYWJsZSBpdC4NCj4+ICsgKiBAcGFyYW1baW5dIG1hcmtfcmVkDQo+PiArICogICBTZXQgdG8g bm9uLXplcm8gdmFsdWUgdG8gZW5hYmxlIG1hcmtpbmcgb2YgcmVkIHBhY2tldHMgYW5kIHRvIHpl cm8gdG8NCj4+ICsgKiAgIGRpc2FibGUgaXQuDQo+PiArICogQHBhcmFtW291dF0gZXJyb3INCj4+ ICsgKiAgIEVycm9yIGRldGFpbHMuIEZpbGxlZCBpbiBvbmx5IG9uIGVycm9yLCB3aGVuIG5vdCBO VUxMLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gZXJy b3IgY29kZSBvdGhlcndpc2UuDQo+PiArICoNCj4+ICsgKiBAc2VlIHN0cnVjdCBydGVfdG1fY2Fw YWJpbGl0aWVzOjptYXJrX2lwX2Vjbl90Y3Bfc3VwcG9ydGVkDQo+PiArICogQHNlZSBzdHJ1Y3Qg cnRlX3RtX2NhcGFiaWxpdGllczo6bWFya19pcF9lY25fc2N0cF9zdXBwb3J0ZWQNCj4+ICsgKi8N Cj4+ICtpbnQNCj4+ICtydGVfdG1fbWFya19pcF9lY24odWludDhfdCBwb3J0X2lkLA0KPj4gKyAg ICBpbnQgbWFya19ncmVlbiwNCj4+ICsgICAgaW50IG1hcmtfeWVsbG93LA0KPj4gKyAgICBpbnQg bWFya19yZWQsDQo+PiArICAgIHN0cnVjdCBydGVfdG1fZXJyb3IgKmVycm9yKTsNCj4+ICsNCj4+ ICsvKioNCj4+ICsgKiBUcmFmZmljIG1hbmFnZXIgcGFja2V0IG1hcmtpbmcgLSBJUHY0IC8gSVB2 NiBEU0NQIChJRVRGIFJGQyAyNTk3KQ0KPj4gKyAqDQo+PiArICogSUVURiBSRkMgMjU5NyBtYXBz IHRoZSB0cmFmZmljIGNsYXNzIGFuZCB0aGUgZHJvcCBwcmlvcml0eSB0byB0aGUgSVB2NC9JUHY2 DQo+PiArICogRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgQ29kZXBvaW50IChEU0NQKSBmaWVsZCAo NiBiaXRzKS4gSGVyZSBhcmUgdGhlIERTQ1ANCj4+ICsgKiB2YWx1ZXMgcHJvcG9zZWQgYnkgdGhp cyBSRkM6DQo+PiArICoNCj4+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgMSAgICBD bGFzcyAyICAgIENsYXNzIDMgICAgQ2xhc3MgNA0KPj4gKyAqICAgICAgICAgICAgICAgICAgICAg Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rDQo+PiArICogICAg TG93IERyb3AgUHJlYyAgICB8ICAwMDEwMTAgIHwgIDAxMDAxMCAgfCAgMDExMDEwICB8ICAxMDAw MTAgIHwNCj4+ICsgKiAgICBNZWRpdW0gRHJvcCBQcmVjIHwgIDAwMTEwMCAgfCAgMDEwMTAwICB8 ICAwMTExMDAgIHwgIDEwMDEwMCAgfA0KPj4gKyAqICAgIEhpZ2ggRHJvcCBQcmVjICAgfCAgMDAx MTEwICB8ICAwMTAxMTAgIHwgIDAxMTExMCAgfCAgMTAwMTEwICB8DQo+PiArICogICAgICAgICAg ICAgICAgICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsN Cj4gDQo+IEluY29ycmVjdCBkb3h5Z2VuIEFQSSBIVE1MIHJlbmRlcmluZy4NCg==