From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4E3B5A00C4; Thu, 30 Jun 2022 17:21:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E71624069D; Thu, 30 Jun 2022 17:21:32 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id BA6A540694 for ; Thu, 30 Jun 2022 17:21:31 +0200 (CEST) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v1 0/5] Direct re-arming of buffers on receive side Date: Thu, 30 Jun 2022 17:21:27 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D87199@smartserver.smartshare.dk> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v1 0/5] Direct re-arming of buffers on receive side Thread-Index: AQHYaOu4EddlA+nThkio6GVpTNxEK60tSI6AgAEaNPCABeakgIAFaLvAgATATQCAAI/5AIAoK1bAgAEkOkA= References: <20220420081650.2043183-1-feifei.wang2@arm.com> <20220516061012.618787-1-feifei.wang2@arm.com> <5320c9dd-8f53-155e-7900-ff02bfa11b4d@yandex.ru> <48994ee9-74b4-7fcc-f61b-c8f45686a031@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D870EA@smartserver.smartshare.dk> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Honnappa Nagarahalli" , "Konstantin Ananyev" , "Feifei Wang" Cc: "nd" , , "Ruifeng Wang" , , "nd" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org PiBGcm9tOiBIb25uYXBwYSBOYWdhcmFoYWxsaSBbbWFpbHRvOkhvbm5hcHBhLk5hZ2FyYWhhbGxp QGFybS5jb21dDQo+IFNlbnQ6IFdlZG5lc2RheSwgMjkgSnVuZSAyMDIyIDIzLjU4DQo+IA0KPiA8 c25pcD4NCj4gDQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+IDE2LzA1LzIwMjIgMDc6MTAsIEZlaWZl aSBXYW5nINC/0LjRiNC10YI6DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4+PiBDdXJyZW50bHks IHRoZSB0cmFuc21pdCBzaWRlIGZyZWVzIHRoZSBidWZmZXJzIGludG8gdGhlDQo+IGxjb3JlDQo+ ID4gPiA+Pj4+Pj4+IGNhY2hlIGFuZCB0aGUgcmVjZWl2ZSBzaWRlIGFsbG9jYXRlcyBidWZmZXJz IGZyb20gdGhlIGxjb3JlDQo+ID4gPiBjYWNoZS4NCj4gPiA+ID4+Pj4+Pj4gVGhlIHRyYW5zbWl0 IHNpZGUgdHlwaWNhbGx5IGZyZWVzIDMyIGJ1ZmZlcnMgcmVzdWx0aW5nIGluDQo+ID4gPiA+Pj4+ Pj4+IDMyKjg9MjU2QiBvZiBzdG9yZXMgdG8gbGNvcmUgY2FjaGUuIFRoZSByZWNlaXZlIHNpZGUN Cj4gYWxsb2NhdGVzDQo+ID4gPiAzMg0KPiA+ID4gPj4+Pj4+PiBidWZmZXJzIGFuZCBzdG9yZXMg dGhlbSBpbiB0aGUgcmVjZWl2ZSBzaWRlIHNvZnR3YXJlIHJpbmcsDQo+ID4gPiA+Pj4+Pj4+IHJl c3VsdGluZyBpbiAzMio4PTI1NkIgb2Ygc3RvcmVzIGFuZCAyNTZCIG9mIGxvYWQgZnJvbSB0aGUN Cj4gPiA+IGxjb3JlIGNhY2hlLg0KPiA+ID4gPj4+Pj4+Pg0KPiA+ID4gPj4+Pj4+PiBUaGlzIHBh dGNoIHByb3Bvc2VzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIGZyZWVpbmcNCj4gdG8vYWxsb2NhdGlu Zw0KPiA+ID4gPj4+Pj4+PiBmcm9tIHRoZSBsY29yZSBjYWNoZS4gaS5lLiB0aGUgcmVjZWl2ZSBz aWRlIHdpbGwgZnJlZSB0aGUNCj4gPiA+IGJ1ZmZlcnMNCj4gPiA+ID4+Pj4+Pj4gZnJvbSB0cmFu c21pdCBzaWRlIGRpcmVjdGx5IGludG8gaXQncyBzb2Z0d2FyZSByaW5nLiBUaGlzDQo+IHdpbGwN Cj4gPiA+ID4+Pj4+Pj4gYXZvaWQgdGhlIDI1NkIgb2YgbG9hZHMgYW5kIHN0b3JlcyBpbnRyb2R1 Y2VkIGJ5IHRoZSBsY29yZQ0KPiA+ID4gY2FjaGUuDQo+ID4gPiA+Pj4+Pj4+IEl0IGFsc28gZnJl ZXMgdXAgdGhlIGNhY2hlIGxpbmVzIHVzZWQgYnkgdGhlIGxjb3JlIGNhY2hlLg0KPiA+ID4gPj4+ Pj4+Pg0KPiA+ID4gPj4+Pj4+PiBIb3dldmVyLCB0aGlzIHNvbHV0aW9uIHBvc2VzIHNldmVyYWwg Y29uc3RyYWludHM6DQo+ID4gPiA+Pj4+Pj4+DQo+ID4gPiA+Pj4+Pj4+IDEpVGhlIHJlY2VpdmUg cXVldWUgbmVlZHMgdG8ga25vdyB3aGljaCB0cmFuc21pdCBxdWV1ZSBpdA0KPiA+ID4gc2hvdWxk DQo+ID4gPiA+Pj4+Pj4+IHRha2UgdGhlIGJ1ZmZlcnMgZnJvbS4gVGhlIGFwcGxpY2F0aW9uIGxv Z2ljIGRlY2lkZXMgd2hpY2gNCj4gPiA+ID4+Pj4+Pj4gdHJhbnNtaXQgcG9ydCB0byB1c2UgdG8g c2VuZCBvdXQgdGhlIHBhY2tldHMuIEluIG1hbnkgdXNlDQo+ID4gPiA+Pj4+Pj4+IGNhc2VzIHRo ZSBOSUMgbWlnaHQgaGF2ZSBhIHNpbmdsZSBwb3J0IChbMV0sIFsyXSwgWzNdKSwgaW4NCj4gPiA+ ID4+Pj4+Pj4gd2hpY2ggY2FzZQ0KPiA+ID4gYQ0KPiA+ID4gPj4+Pj4+PiBnaXZlbiB0cmFuc21p dCBxdWV1ZSBpcyBhbHdheXMgbWFwcGVkIHRvIGEgc2luZ2xlIHJlY2VpdmUNCj4gPiA+ID4+Pj4+ Pj4gcXVldWUNCj4gPiA+ID4+Pj4+Pj4gKDE6MSBSeCBxdWV1ZTogVHggcXVldWUpLiBUaGlzIGlz IGVhc3kgdG8gY29uZmlndXJlLg0KPiA+ID4gPj4+Pj4+Pg0KPiA+ID4gPj4+Pj4+PiBJZiB0aGUg TklDIGhhcyAyIHBvcnRzICh0aGVyZSBhcmUgc2V2ZXJhbCByZWZlcmVuY2VzKSwgdGhlbg0KPiB3 ZQ0KPiA+ID4gPj4+Pj4+PiB3aWxsIGhhdmUNCj4gPiA+ID4+Pj4+Pj4gMToyIChSWCBxdWV1ZTog VFggcXVldWUpIG1hcHBpbmcgd2hpY2ggaXMgc3RpbGwgZWFzeSB0bw0KPiA+ID4gY29uZmlndXJl Lg0KPiA+ID4gPj4+Pj4+PiBIb3dldmVyLCBpZiB0aGlzIGlzIGdlbmVyYWxpemVkIHRvICdOJyBw b3J0cywgdGhlDQo+ID4gPiA+Pj4+Pj4+IGNvbmZpZ3VyYXRpb24gY2FuIGJlIGxvbmcuIE1vcmUg b3ZlciB0aGUgUE1EIHdvdWxkIGhhdmUgdG8NCj4gPiA+ID4+Pj4+Pj4gc2NhbiBhIGxpc3Qgb2Yg dHJhbnNtaXQgcXVldWVzIHRvIHB1bGwgdGhlIGJ1ZmZlcnMgZnJvbS4NCj4gPiA+ID4+Pj4+DQo+ ID4gPiA+Pj4+Pj4gSnVzdCB0byByZS1pdGVyYXRlIHNvbWUgZ2VuZXJpYyBjb25jZXJucyBhYm91 dCB0aGlzDQo+IHByb3Bvc2FsOg0KPiA+ID4gPj4+Pj4+ICAgICAtIFdlIGVmZmVjdGl2ZWx5IGxp bmsgUlggYW5kIFRYIHF1ZXVlcyAtIHdoZW4gdGhpcw0KPiBmZWF0dXJlDQo+ID4gPiBpcyBlbmFi bGVkLA0KPiA+ID4gPj4+Pj4+ICAgICAgIHVzZXIgY2FuJ3Qgc3RvcCBUWCBxdWV1ZSB3aXRob3V0 IHN0b3BwaW5nIGxpbmtlZCBSWA0KPiBxdWV1ZQ0KPiA+ID4gZmlyc3QuDQo+ID4gPiA+Pj4+Pj4g ICAgICAgUmlnaHQgbm93IHVzZXIgaXMgZnJlZSB0byBzdGFydC9zdG9wIGFueSBxdWV1ZXMgYXQg aGlzDQo+ID4gPiB3aWxsLg0KPiA+ID4gPj4+Pj4+ICAgICAgIElmIHRoYXQgZmVhdHVyZSB3aWxs IGFsbG93IHRvIGxpbmsgcXVldWVzIGZyb20NCj4gZGlmZmVyZW50DQo+ID4gPiBwb3J0cywNCj4g PiA+ID4+Pj4+PiAgICAgICB0aGVuIGV2ZW4gcG9ydHMgd2lsbCBiZWNvbWUgZGVwZW5kZW50IGFu ZCB1c2VyIHdpbGwNCj4gaGF2ZQ0KPiA+ID4gdG8gcGF5IGV4dHJhDQo+ID4gPiA+Pj4+Pj4gICAg ICAgY2FyZSB3aGVuIG1hbmFnaW5nIHN1Y2ggcG9ydHMuDQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+ Pj4gW0ZlaWZlaV0gV2hlbiBkaXJlY3QgcmVhcm0gZW5hYmxlZCwgdGhlcmUgYXJlIHR3byBwYXRo IGZvcg0KPiA+ID4gPj4+Pj4gdGhyZWFkDQo+ID4gPiB0bw0KPiA+ID4gPj4+Pj4gY2hvb3NlLiBJ ZiB0aGVyZSBhcmUgZW5vdWdoIFR4IGZyZWVkIGJ1ZmZlcnMsIFJ4IGNhbiBwdXQNCj4gYnVmZmVy cw0KPiA+ID4gPj4+Pj4gZnJvbSBUeC4NCj4gPiA+ID4+Pj4+IE90aGVyd2lzZSwgUnggd2lsbCBw dXQgYnVmZmVycyBmcm9tIG1lbXBvb2wgYXMgdXN1YWwuIFRodXMsDQo+ID4gPiA+Pj4+PiB1c2Vy cw0KPiA+ID4gZG8NCj4gPiA+ID4+Pj4+IG5vdCBuZWVkIHRvIHBheSBtdWNoIGF0dGVudGlvbiBt YW5hZ2luZyBwb3J0cy4NCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4gV2hhdCBJIGFtIHRhbGtpbmcg YWJvdXQ6IHJpZ2h0IG5vdyBkaWZmZXJlbnQgcG9ydCBvciBkaWZmZXJlbnQNCj4gPiA+IHF1ZXVl cw0KPiA+ID4gPj4+PiBvZiB0aGUgc2FtZSBwb3J0IGNhbiBiZSB0cmVhdGVkIGFzIGluZGVwZW5k ZW50IGVudGl0aWVzOg0KPiA+ID4gPj4+PiBpbiBnZW5lcmFsIHVzZXIgaXMgZnJlZSB0byBzdGFy dC9zdG9wIChhbmQgZXZlbiByZWNvbmZpZ3VyZSBpbg0KPiA+ID4gc29tZQ0KPiA+ID4gPj4+PiBj YXNlcykgb25lIGVudGl0eSB3aXRob3V0IG5lZWQgdG8gc3RvcCBvdGhlciBlbnRpdHkuDQo+ID4g PiA+Pj4+IEkuRSB1c2VyIGNhbiBzdG9wIGFuZCByZS1jb25maWd1cmUgVFggcXVldWUgd2hpbGUg a2VlcA0KPiByZWNlaXZpbmcNCj4gPiA+ID4+Pj4gcGFja2V0cyBmcm9tIFJYIHF1ZXVlLg0KPiA+ ID4gPj4+PiBXaXRoIGRpcmVjdCByZS1hcm0gZW5hYmxlZCwgSSB0aGluayBpdCB3b3VsZG4ndCBi ZSBwb3NzaWJsZQ0KPiBhbnkNCj4gPiA+IG1vcmU6DQo+ID4gPiA+Pj4+IGJlZm9yZSBzdG9wcGlu Zy9yZWNvbmZpZ3VyaW5nIFRYIHF1ZXVlIHVzZXIgd291bGQgaGF2ZSBtYWtlDQo+IHN1cmUNCj4g PiA+IHRoYXQNCj4gPiA+ID4+Pj4gY29ycmVzcG9uZGluZyBSWCBxdWV1ZSB3b3VsZG4ndCBiZSB1 c2VkIGJ5IGRhdGFwYXRoLg0KPiA+ID4gPj4+IEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhl IHByb2JsZW0gYmV0dGVyLiBGb3IgdGhlIFRYIHF1ZXVlDQo+IHRvDQo+ID4gPiBiZSBzdG9wcGVk LA0KPiA+ID4gPj4gdGhlIHVzZXIgbXVzdCBoYXZlIGJsb2NrZWQgdGhlIGRhdGEgcGxhbmUgZnJv bSBhY2Nlc3NpbmcgdGhlIFRYDQo+ID4gPiBxdWV1ZS4NCj4gPiA+ID4+DQo+ID4gPiA+PiBTdXJl bHkgaXQgaXMgdXNlciByZXNwb25zaWJpbGl0eSB0bm90IHRvIGNhbGwgdHhfYnVyc3QoKSBmb3IN Cj4gPiA+IHN0b3BwZWQvcmVsZWFzZWQgcXVldWUuDQo+ID4gPiA+PiBUaGUgcHJvYmxlbSBpcyB0 aGF0IHdoaWxlIFRYIGZvciB0aGF0IHF1ZXVlIGlzIHN0b3BwZWQsIFJYIGZvcg0KPiA+ID4gcmVs YXRlZCBxdWV1ZSBzdGlsbA0KPiA+ID4gPj4gY2FuIGNvbnRpbnVlLg0KPiA+ID4gPj4gU28gcnhf YnVyc3QoKSB3aWxsIHRyeSB0byByZWFkL21vZGlmeSBUWCBxdWV1ZSBkYXRhLCB0aGF0IG1pZ2h0 DQo+IGJlDQo+ID4gPiBhbHJlYWR5IGZyZWVkLA0KPiA+ID4gPj4gb3Igc2ltdWx0YW5lb3VzbHkg bW9kaWZpZWQgYnkgY29udHJvbCBwYXRoLg0KPiA+ID4gPiBVbmRlcnN0b29kLCBhZ3JlZSBvbiB0 aGUgaXNzdWUNCj4gPiA+ID4NCj4gPiA+ID4+DQo+ID4gPiA+PiBBZ2FpbiwgaXQgYWxsIGNhbiBi ZSBtaXRpZ2F0ZWQgYnkgY2FyZWZ1bGx5IHJlLWRlc2lnbmluZyBhbmQNCj4gPiA+IG1vZGlmeWlu ZyBjb250cm9sIGFuZA0KPiA+ID4gPj4gZGF0YS1wYXRoIGluc2lkZSB1c2VyIGFwcCAtIGJ5IGRv aW5nIGV4dHJhIGNoZWNrcyBhbmQNCj4gPiA+IHN5bmNocm9uaXphdGlvbnMsIGV0Yy4NCj4gPiA+ ID4+IEJ1dCBmcm9tIHByYWN0aWNhbCBwb2ludCAtIEkgcHJlc3VtZSBtb3N0IG9mIHVzZXJzIHNp bXBseSB3b3VsZA0KPiA+ID4gYXZvaWQgdXNpbmcgdGhpcw0KPiA+ID4gPj4gZmVhdHVyZSBkdWUg YWxsIHBvdGVudGlhbCBwcm9ibGVtcyBpdCBtaWdodCBjYXVzZS4NCj4gPiA+ID4gVGhhdCBpcyBz dWJqZWN0aXZlLCBpdCBhbGwgZGVwZW5kcyBvbiB0aGUgcGVyZm9ybWFuY2UNCj4gaW1wcm92ZW1l bnRzDQo+ID4gPiB1c2VycyBzZWUgaW4gdGhlaXIgYXBwbGljYXRpb24uDQo+ID4gPiA+IElNTywg dGhlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHNlZW4gd2l0aCB0aGlzIHBhdGNoIGlzIHdvcnRo DQo+IGZldw0KPiA+ID4gY2hhbmdlcy4NCj4gPiA+DQo+ID4gPiBZZXMsIGl0IGlzIHN1YmplY3Rp dmUgdGlsbCBzb21lIGV4dGVudCwgdGhvdWdoIG15IGZlZWxpbmcgdGhhdCBpdA0KPiA+ID4gbWln aHQgZW5kLXVwIGJlaW5nIHNvcnQgb2Ygc3ludGhldGljIGltcHJvdmVtZW50IHVzZWQgb25seSBi eSBzb21lDQo+ID4gPiBzaG93LWNhc2UgYmVuY2htYXJrcy4NCj4gPg0KPiA+IEkgYmVsaWV2ZSB0 aGF0IG9uZSBzcGVjaWZpYyBpbXBvcnRhbnQgdXNlIGNhc2UgaGFzIGFscmVhZHkgYmVlbg0KPiBt ZW50aW9uZWQsIHNvIEkNCj4gPiBkb24ndCB0aGluayB0aGlzIGlzIGEgYmVuY2htYXJrIG9ubHkg ZmVhdHVyZS4NCj4gKzENCj4gDQo+ID4NCj4gPiA+ICBGcm9tIG15IHBlcnNwZWN0aXZlLCBpdCB3 b3VsZCBiZSBtdWNoIG1vcmUgcGxhdXNpYmxlLCBpZiB3ZSBjYW4NCj4gPiA+IGludHJvZHVjZSBz b21lIHNvcnQgb2YgZ2VuZXJpYyBpbXByb3ZlbWVudCwgdGhhdCBkb2Vzbid0IGltcG9zZSBhbGwN Cj4gPiA+IHRoZXNlIGV4dHJhIGNvbnN0cmFpbnRzIGFuZCBpbXBsaWNhdGlvbnMuDQo+ID4gPiBM aWtlIG9uZSwgZGlzY3Vzc2VkIGJlbG93IGluIHRoYXQgdGhyZWFkIHdpdGggWkMgbWVtcG9vbCBh cHByb2FjaC4NCj4gPiA+DQo+ID4NCj4gPiBDb25zaWRlcmluZyB0aGlzIGZlYXR1cmUgZnJvbSBh IGhpZ2ggbGV2ZWwgcGVyc3BlY3RpdmUsIEkgYWdyZWUgd2l0aA0KPiBLb25zdGFudGluJ3MNCj4g PiBjb25jZXJucywgc28gSSdsbCBhbHNvIHN1cHBvcnQgaGlzIHZpZXdzLg0KPiBXZSBkaWQgaGFj ayB0aGUgWkMgbWVtcG9vbCBhcHByb2FjaCBbMV0sIGxldmVsIG9mIGltcHJvdmVtZW50IGlzIHBy ZXR0eQ0KPiBzbWFsbCBjb21wYXJlZCB3aXRoIHRoaXMgcGF0Y2guDQo+IA0KPiBbMV0gaHR0cDov L3BhdGNoZXMuZHBkay5vcmcvcHJvamVjdC9kcGRrL3BhdGNoLzIwMjIwNjEzMDU1MTM2LjE5NDk3 ODQtDQo+IDEtZmVpZmVpLndhbmcyQGFybS5jb20vDQo+IA0KPiA+DQo+ID4gSWYgdGhpcyBwYXRj aCBpcyBzdXBwb3NlZCB0byBiZSBhIGdlbmVyaWMgZmVhdHVyZSwgcGxlYXNlIGFkZCBzdXBwb3J0 DQo+IGZvciBpdCBpbiBhbGwNCj4gPiBOSUMgUE1Ecywgbm90IGp1c3Qgb25lLiAoUmVnYXJkbGVz cyBpZiB0aGUgZmVhdHVyZSBpcyBkZWZpbmVkIGFzIDE6MQ0KPiBtYXBwaW5nIG9yDQo+ID4gTjpN IG1hcHBpbmcuKSBJdCBpcyBwdXJlbHkgc29mdHdhcmUsIHNvIGl0IHNob3VsZCBiZSBhdmFpbGFi bGUgZm9yDQo+IGFsbCBQTURzLCBub3QNCj4gPiBqdXN0IHlvdXIgZmF2b3JpdGUgaGFyZHdhcmUh IENvbnNpZGVyIHRoZSAiZmFzdCBtYnVmIGZyZWUiIGZlYXR1cmUsDQo+IHdoaWNoIGlzDQo+ID4g cHVyZSBzb2Z0d2FyZTsgd2h5IGlzIHRoYXQgZmVhdHVyZSBub3QgaW1wbGVtZW50ZWQgaW4gYWxs IFBNRHM/DQo+IEFncmVlLCBpdCBpcyBnb29kIHRvIGhhdmUgaXQgc3VwcG9ydGVkIGluIGFsbCB0 aGUgZHJpdmVycy4gV2UgZG8gbm90DQo+IGhhdmUgYSBmYXZvcml0ZSBoYXJkd2FyZSwganVzdCBw aWNrZWQgYSBQTUQgd2hpY2ggd2UgYXJlIG1vcmUgZmFtaWxpYXINCj4gd2l0aC4gV2UgZG8gcGxh biB0byBpbXBsZW1lbnQgaW4gb3RoZXIgcHJvbWluZW50IFBNRHMuDQo+IA0KPiA+DQo+ID4gQSBz ZWNvbmRhcnkgcG9pbnQgSSdtIG1ha2luZyBoZXJlIGlzIHRoYXQgdGhpcyBzcGVjaWZpYyBmZWF0 dXJlIHdpbGwNCj4gbGVhZCB0byBhbg0KPiA+IGVub3Jtb3VzIGFtb3VudCBvZiBjb3B5LXBhc3Rl IGNvZGUsIGluc3RlYWQgb2YgYSBnZW5lcmljIGxpYnJhcnkNCj4gZnVuY3Rpb24NCj4gPiBlYXNp bHkgYXZhaWxhYmxlIGZvciBhbGwgUE1Ecy4NCj4gQXJlIHlvdSB0YWxraW5nIGFib3V0IHRoZSBp NDBlIGRyaXZlciBjb2RlIGluIHNwZWNpZmljPyBJZiB5ZXMsIGFncmVlDQo+IHdlIHNob3VsZCBh dm9pZCBjb3B5LXBhc3RlIGFuZCB3ZSB3aWxsIGxvb2sgdG8gcmVkdWNlIHRoYXQuDQoNClllcywg SSBhbSB0YWxraW5nIGFib3V0IHRoZSBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkIGludG8g YWxsIHByb21pbmVudCBQTURzLiBQZXJoYXBzIHlvdSBjYW4gbW92ZSB0aGUgbWFqb3JpdHkgb2Yg aXQgaW50byBhIGNvbW1vbiBkaXJlY3RvcnksIGlmIG5vdCBpbiBhIGdlbmVyaWMgbGlicmFyeSwg c28gdGhlIG1vZGlmaWNhdGlvbiBwZXIgUE1EIGJlY29tZXMgc21hbGxlci4gKEkgc2VlIHRoZSBz YW1lIGNvcHktcGFzdGUgaXNzdWUgd2l0aCB0aGUgImZhc3QgbWJ1ZiBmcmVlIiBmZWF0dXJlLCBp ZiB0byBiZSBzdXBwb3J0ZWQgYnkgb3RoZXIgdGhhbiB0aGUgaTQwZSBQTUQuKQ0KDQpQbGVhc2Ug bm90ZSB0aGF0IEkgZG8gbm90IGV4cGVjdCB5b3UgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZSBp biBvdGhlciBQTURzIHRoYW4geW91IG5lZWQuIEkgd2FzIHRyeWluZyB0byBtYWtlIHRoZSBwb2lu dCB0aGF0IGltcGxlbWVudGluZyBhIHNvZnR3YXJlIGZlYXR1cmUgaW4gYSBQTUQgcmVxdWlyZXMg Y29weS1wYXN0aW5nIHRvIG90aGVyIFBNRHMsIHdoaWNoIGNhbiByZXF1aXJlIGEgYmlnIGVmZm9y dDsgd2hpbGUgaW1wbGVtZW50aW5nIGl0IGluIGEgbGlicmFyeSBhbmQgY2FsbGluZyB0aGUgbGli cmFyeSBmcm9tIHRoZSBQTURzIHJlcXVpcmUgYSBzbWFsbGVyIGVmZm9ydCBwZXIgUE1ELiBJIGlu dGVudGlvbmFsbHkgcGhyYXNlZCBpdCBzb21ld2hhdCBwcm92b2tpbmdseSwgYW5kIHdhcyBsdWNr eSBub3QgdG8gb2ZmZW5kIGFueW9uZS4gOi0pDQoNCj4gDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4g Pj4NCj4gPiA+ID4+PiBMaWtlIEZlaWZlaSBzYXlzLCB0aGUgUlggc2lkZSBoYXMgdGhlIG5vcm1h bCBwYWNrZXQgYWxsb2NhdGlvbg0KPiA+ID4gPj4+IHBhdGgNCj4gPiA+IHN0aWxsIGF2YWlsYWJs ZS4NCj4gPiA+ID4+PiBBbHNvIHRoaXMgc291bmRzIGxpa2UgYSBjb3JuZXIgY2FzZSB0byBtZSwg d2UgY2FuIGhhbmRsZSB0aGlzDQo+ID4gPiB0aHJvdWdoIGNoZWNrcyBpbg0KPiA+ID4gPj4gdGhl IHF1ZXVlX3N0b3AgQVBJLg0KPiA+ID4gPj4NCj4gPiA+ID4+IERlcGVuZHMuDQo+ID4gPiA+PiBp ZiBpdCB3b3VsZCBiZSBhbGxvd2VkIHRvIGxpbmsgcXVldWVzIG9ubHkgZnJvbSB0aGUgc2FtZSBw b3J0LA0KPiB0aGVuDQo+ID4gPiB5ZXMsIGV4dHJhDQo+ID4gPiA+PiBjaGVja3MgZm9yIHF1ZXVl LXN0b3AgbWlnaHQgYmUgZW5vdWdoLg0KPiA+ID4gPj4gQXMgcmlnaHQgbm93IERQREsgZG9lc24n dCBhbGxvdyB1c2VyIHRvIGNoYW5nZSBudW1iZXIgb2YgcXVldWVzDQo+ID4gPiB3aXRob3V0DQo+ ID4gPiA+PiBkZXZfc3RvcCgpIGZpcnN0Lg0KPiA+ID4gPj4gVGhvdWdoIGlmIGl0IHdvdWxkIGJl IGFsbG93ZWQgdG8gbGluayBxdWV1ZXMgZnJvbSBkaWZmZXJlbnQNCj4gcG9ydHMsDQo+ID4gPiB0 aGVuIHNpdHVhdGlvbg0KPiA+ID4gPj4gd2lsbCBiZSBtdWNoIHdvcnNlLg0KPiA+ID4gPj4gUmln aHQgbm93IHBvcnRzIGFyZSB0b3RhbGx5IGluZGVwZW5kZW50IGVudGl0aWVzIChleGNlcHQgc29t ZQ0KPiA+ID4gc3BlY2lhbCBjYXNlcyBsaWtlDQo+ID4gPiA+PiBsaW5rLWJvbmRpbmcsIGV0Yy4p Lg0KPiA+ID4gPj4gQXMgb25lIHBvcnQgY2FuIGtlZXAgZG9pbmcgUlgvVFgsIHNlY29uZCBvbmUg Y2FuIGJlIHN0b3BwZWQsIHJlLQ0KPiA+ID4gY29uZmd1cmVkLA0KPiA+ID4gPj4gZXZlbiBkZXRh Y2hlZCwgYW5kIG5ld2x5IGF0dGFjaGVkIGRldmljZSBtaWdodCByZS11c2Ugc2FtZSBwb3J0DQo+ ID4gPiBudW1iZXIuDQo+ID4gPiA+IEkgc2VlIHRoaXMgYXMgYSBzaW1pbGFyIHJlc3RyaWN0aW9u IHRvIHRoZSBvbmUgZGlzY3Vzc2VkIGFib3ZlLg0KPiA+ID4NCj4gPiA+IFllcywgdGhleSBhcmUg c2ltaWxhciBpbiBwcmluY2lwYWwsIHRob3VnaCBJIHRoaW5rIHRoYXQgdGhlIGNhc2UNCj4gd2l0 aA0KPiA+ID4gcXVldWVzIGZyb20gZGlmZmVyZW50IHBvcnQgd291bGQgbWFrZSB0aGluZ3MgbXVj aCBtb3JlIGNvbXBsZXguDQo+ID4gPg0KPiA+ID4gID4gRG8geW91IHNlZSBhbnkgaXNzdWVzIGlm IHdlIGVuZm9yY2UgdGhpcyB3aXRoIGNoZWNrcz8NCj4gPiA+DQo+ID4gPiBIYXJkIHRvIHRlbGwg c3RyYWlnaHR3YXksIGEgbG90IHdpbGwgZGVwZW5kIGhvdyBzbWFydCBzdWNoDQo+ID4gPiBpbXBs ZW1lbnRhdGlvbiB3b3VsZCBiZS4NCj4gPiA+IFVzdWFsbHkgRFBESyB0ZW5kcyBub3QgdG8gYXZv aWQgaGVhdnkNCj4gPiA+IHN5bmNocm9uaXphdGlvbnMgd2l0aGluIGl0cyBkYXRhLXBhdGggZnVu Y3Rpb25zLg0KPiA+DQo+ID4gQ2VydGFpbmx5ISBJbXBsZW1lbnRpbmcgbW9yZSBhbmQgbW9yZSBv ZiBzdWNoIGZlYXR1cmVzIGluIHRoZSBQTURzDQo+IHdpbGwgbGVhZA0KPiA+IHRvIGxvbmdlciBh bmQgbG9uZ2VyIGRhdGEgcGxhbmUgY29kZSBwYXRocyBpbiB0aGUgUE1Ecy4gSXQgaXMgdGhlDQo+ ICJzYWxhbWkNCj4gPiBtZXRob2QiLCB3aGVyZSBlYWNoIHNtYWxsIHBpZWNlIG1ha2VzIG5vIHBl cmZvcm1hbmNlIGRpZmZlcmVuY2UsIGJ1dA0KPiB0aGV5IGFsbA0KPiA+IGFkZCB1cCwgYW5kIGV2 ZW50dWFsbHkgdGhlIHN1bSBvZiB0aGVtIGRvZXMgaW1wYWN0IHRoZSBwZXJmb3JtYW5jZSBvZg0K PiB0aGUNCj4gPiBnZW5lcmFsIHVzZSBjYXNlIG5lZ2F0aXZlbHkuDQo+IEl0IHdvdWxkIGJlIGdv b2QgdG8gaGF2ZSBhIHRlc3QgcnVubmluZyBpbiBVTkggdGhhdCBzaG93cyB0aGUNCj4gcGVyZm9y bWFuY2UgdHJlbmQuDQorMQ0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPj4NCj4gPiA+ID4+DQo+ ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+Pg0KPiA+ID4gPj4+Pj4+IC0gdmVyeSBsaW1pdGVkIHVzYWdl IHNjZW5hcmlvIC0gaXQgd2lsbCBoYXZlIGEgcG9zaXRpdmUNCj4gZWZmZWN0DQo+ID4gPiBvbmx5 DQo+ID4gPiA+Pj4+Pj4gICAgICB3aGVuIHdlIGhhdmUgYSBmaXhlZCBmb3J3YXJkaW5nIG1hcHBp bmc6IGFsbCAob3IgbmVhcmx5DQo+ID4gPiBhbGwpIHBhY2tldHMNCj4gPiA+ID4+Pj4+PiAgICAg IGZyb20gdGhlIFJYIHF1ZXVlIGFyZSBmb3J3YXJkZWQgaW50byB0aGUgc2FtZSBUWCBxdWV1ZS4N Cj4gPiA+ID4+Pj4+DQo+ID4gPiA+Pj4+PiBbRmVpZmVpXSBBbHRob3VnaCB0aGUgdXNhZ2Ugc2Nl bmFyaW8gaXMgbGltaXRlZCwgdGhpcyB1c2FnZQ0KPiA+ID4gc2NlbmFyaW8NCj4gPiA+ID4+Pj4+ IGhhcyBhIHdpZGUgcmFuZ2Ugb2YgYXBwbGljYXRpb25zLCBzdWNoIGFzIE5JQyB3aXRoIG9uZSBw b3J0Lg0KPiA+ID4gPj4+Pg0KPiA+ID4gPj4+PiB5ZXMsIHRoZXJlIGFyZSBOSUNzIHdpdGggb25l IHBvcnQsIGJ1dCBubyBndWFyYW50ZWUgdGhlcmUNCj4gPiA+ID4+Pj4gd291bGRuJ3QNCj4gPiA+ IGJlDQo+ID4gPiA+Pj4+IHNldmVyYWwgc3VjaCBOSUNzIHdpdGhpbiB0aGUgc3lzdGVtLg0KPiA+ ID4gPj4+IFdoYXQgSSBzZWUgaW4gbXkgaW50ZXJhY3Rpb25zIGlzLCBhIHNpbmdsZSBOSUMvRFBV IGlzIHVuZGVyDQo+ID4gPiB1dGlsaXplZCBmb3IgYSAyDQo+ID4gPiA+PiBzb2NrZXQgc3lzdGVt LiBTb21lIGFyZSBhZGRpbmcgbW9yZSBzb2NrZXRzIHRvIHRoZSBzeXN0ZW0gdG8NCj4gYmV0dGVy DQo+ID4gPiB1dGlsaXplIHRoZQ0KPiA+ID4gPj4gRFBVLiBUaGUgTklDIGJhbmR3aWR0aCBjb250 aW51ZXMgdG8gZ3JvdyBzaWduaWZpY2FudGx5LiBJIGRvIG5vdA0KPiA+ID4gdGhpbmsgdGhlcmUg d2lsbA0KPiA+ID4gPj4gYmUgYSBtdWx0aS1EUFUgcGVyIHNlcnZlciBzY2VuYXJpby4NCj4gPiA+ ID4+DQo+ID4gPiA+Pg0KPiA+ID4gPj4gSW50ZXJlc3RpbmcuLi4gZnJvbSBteSBleHBlcmllbmNl IGl0IGlzIHZpc2EtdmVyc2E6DQo+ID4gPiA+PiBpbiBtYW55IGNhc2VzIDIwMEdiL3MgaXMgbm90 IHRoYXQgbXVjaCB0aGVzZSBkYXlzIHRvIHNhdHVyYXRlDQo+ID4gPiA+PiBtb2Rlcm4NCj4gPiA+ IDIgc29ja2V0DQo+ID4gPiA+PiB4ODYgc2VydmVyLg0KPiA+ID4gPj4gVGhvdWdoIEkgc3VwcG9z ZSBhIGxvdCBkZXBlbmRzIG9uIHBhcnRpY3VsYXIgSFcgYW5kIGFjdHVhbA0KPiB3b3JrbG9hZC4N Cj4gPiA+ID4+DQo+ID4gPiA+Pj4NCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4+IEZ1cnRyaGVybW9y ZSwgSSB0aGluayB0aGlzIGlzIGEgdHJhZGVvZmYgYmV0d2VlbiBwZXJmb3JtYW5jZQ0KPiBhbmQN Cj4gPiA+ID4+Pj4+IGZsZXhpYmlsaXR5Lg0KPiA+ID4gPj4+Pj4gT3VyIGdvYWwgaXMgdG8gYWNo aWV2ZSBiZXN0IHBlcmZvcm1hbmNlLCB0aGlzIG1lYW5zIHdlIG5lZWQNCj4gdG8NCj4gPiA+IGdp dmUNCj4gPiA+ID4+Pj4+IHVwIHNvbWUgZmxleGliaWxpdHkgZGVjaXNpdmVseS4gRm9yIGV4YW1w bGUgb2YgJ0ZBU1RfRlJFRQ0KPiBNb2RlJywNCj4gPiA+IGl0DQo+ID4gPiA+Pj4+PiBkZWxldGVz IG1vc3Qgb2YgdGhlIGJ1ZmZlciBjaGVjayAocmVmY250ID4gMSwgZXh0ZXJuYWwNCj4gYnVmZmVy LA0KPiA+ID4gY2hhaW4NCj4gPiA+ID4+Pj4+IGJ1ZmZlciksIGNob29zZXMgYSBzaG9yZXN0IHBh dGgsIGFuZCB0aGVuIGFjaGlldmUgc2lnbmlmaWNhbnQNCj4gPiA+ID4+Pj4+IHBlcmZvcm1hbmNl DQo+ID4gPiA+Pj4+IGltcHJvdmVtZW50Lg0KPiA+ID4gPj4+Pj4+IFdvbmRlciBkaWQgeW91IGhh ZCBhIGNoYW5jZSB0byBjb25zaWRlciBtZW1wb29sLWNhY2hlIFpDDQo+IEFQSSwNCj4gPiA+ID4+ Pj4+PiBzaW1pbGFyIHRvIG9uZSB3ZSBoYXZlIGZvciB0aGUgcmluZz8NCj4gPiA+ID4+Pj4+PiBJ dCB3b3VsZCBhbGxvdyB1cyBvbiBUWCBmcmVlIHBhdGggdG8gYXZvaWQgY29weWluZyBtYnVmcyB0 bw0KPiA+ID4gPj4+Pj4+IHRlbXBvcmFyeSBhcnJheSBvbiB0aGUgc3RhY2suDQo+ID4gPiA+Pj4+ Pj4gSW5zdGVhZCB3ZSBjYW4gcHV0IHRoZW0gc3RyYWlnaHQgZnJvbSBUWCBTVyByaW5nIHRvIHRo ZQ0KPiBtZW1wb29sDQo+ID4gPiBjYWNoZS4NCj4gPiA+ID4+Pj4+PiBUaGF0IHNob3VsZCBzYXZl IGV4dHJhIHN0b3JlL2xvYWQgZm9yIG1idWYgYW5kIG1pZ2h0IGhlbHAgdG8NCj4gPiA+ID4+Pj4+ PiBhY2hpZXZlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbiB3aXRob3V0IGJ5LXBhc3NpbmcgbWVtcG9v bC4NCj4gPiA+ID4+Pj4+PiBJdCBwcm9iYWJseSB3b3VsZG4ndCBiZSBhcyBmYXN0IGFzIHdoYXQg eW91IHByb3Bvc2luZywgYnV0DQo+ID4gPiA+Pj4+Pj4gbWlnaHQNCj4gPiA+IGJlDQo+ID4gPiA+ Pj4+Pj4gZmFzdCBlbm91Z2ggdG8gY29uc2lkZXIgYXMgYWx0ZXJuYXRpdmUuDQo+ID4gPiA+Pj4+ Pj4gQWdhaW4sIGl0IHdvdWxkIGJlIGEgZ2VuZXJpYyBvbmUsIHNvIHdlIGNhbiBhdm9pZCBhbGwg dGhlc2UNCj4gPiA+ID4+Pj4+PiBpbXBsaWNhdGlvbnMgYW5kIGxpbWl0YXRpb25zLg0KPiA+ID4g Pj4+Pj4NCj4gPiA+ID4+Pj4+IFtGZWlmZWldIEkgdGhpbmsgdGhpcyBpcyBhIGdvb2QgdHJ5LiBI b3dldmVyLCB0aGUgbW9zdA0KPiBpbXBvcnRhbnQNCj4gPiA+ID4+Pj4+IHRoaW5nIGlzIHRoYXQg aWYgd2UgY2FuIGJ5cGFzcyB0aGUgbWVtcG9vbCBkZWNpc2l2ZWx5IHRvDQo+IHB1cnN1ZQ0KPiA+ ID4gdGhlDQo+ID4gPiA+Pj4+PiBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBnYWlucy4NCj4gPiA+ ID4+Pj4NCj4gPiA+ID4+Pj4gSSB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24sIGFuZCBJIHBlcnNv bmFsbHkgdGhpbmsgdGhpcyBpcw0KPiB3cm9uZw0KPiA+ID4gYW5kDQo+ID4gPiA+Pj4+IGRhbmdl cm91cyBhdHRpdHVkZS4NCj4gPiA+ID4+Pj4gV2UgaGF2ZSBtZW1wb29sIGFic3RyYWN0aW9uIGlu IHBsYWNlIGZvciB2ZXJ5IGdvb2QgcmVhc29uLg0KPiA+ID4gPj4+PiBTbyB3ZSBuZWVkIHRvIHRy eSB0byBpbXByb3ZlIG1lbXBvb2wgcGVyZm9ybWFuY2UgKGFuZCBBUEkgaWYNCj4gPiA+ID4+Pj4g bmVjZXNzYXJ5KSBhdCBmaXJzdCBwbGFjZSwgbm90IHRvIGF2b2lkIGl0IGFuZCBicmVhayBvdXIg b3duDQo+ID4gPiA+Pj4+IHJ1bGVzDQo+ID4gPiBhbmQNCj4gPiA+ID4+IHJlY29tbWVuZGF0aW9u cy4NCj4gPiA+ID4+PiBUaGUgYWJzdHJhY3Rpb24gY2FuIGJlIHRob3VnaHQgb2YgYXQgYSBoaWdo ZXIgbGV2ZWwuIGkuZS4gdGhlDQo+ID4gPiBkcml2ZXIgbWFuYWdlcyB0aGUNCj4gPiA+ID4+IGJ1 ZmZlciBhbGxvY2F0aW9uL2ZyZWUgYW5kIGlzIGhpZGRlbiBmcm9tIHRoZSBhcHBsaWNhdGlvbi4g VGhlDQo+ID4gPiBhcHBsaWNhdGlvbiBkb2VzDQo+ID4gPiA+PiBub3QgbmVlZCB0byBiZSBhd2Fy ZSBvZiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW1wbGVtZW50ZWQuDQo+ID4gPiA+Pj4NCj4gPiA+ ID4+Pj4NCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4+IEZvciBaQywgdGhlcmUgbWF5YmUgYSBwcm9i bGVtIGZvciBpdCBpbiBpNDBlLiBUaGUgcmVhc29uIGZvcg0KPiA+ID4gPj4+Pj4gdGhhdCBwdXQg VHggYnVmZmVycyBpbnRvIHRlbXBvcmFyeSBpcyB0aGF0IGk0MGVfdHhfZW50cnkNCj4gPiA+ID4+ Pj4+IGluY2x1ZGVzDQo+ID4gPiBidWZmZXINCj4gPiA+ID4+Pj4+IHBvaW50ZXIgYW5kIGluZGV4 Lg0KPiA+ID4gPj4+Pj4gVGh1cyB3ZSBjYW5ub3QgcHV0IFR4IFNXX3JpbmcgZW50cnkgaW50byBt ZW1wb29sIGRpcmVjdGx5LCB3ZQ0KPiA+ID4gbmVlZA0KPiA+ID4gPj4+Pj4gdG8gZmlyc3RsdCBl eHRyYWN0IG1idWYgcG9pbnRlci4gRmluYWxseSwgdGhvdWdoIHdlIHVzZSBaQywNCj4gd2UNCj4g PiA+IHN0aWxsDQo+ID4gPiA+Pj4+PiBjYW4ndCBhdm9pZCB1c2luZyBhIHRlbXBvcmFyeSBzdGFj ayB0byBleHRyYWN0IFR4IGJ1ZmZlcg0KPiA+ID4gcG9pbnRlcnMuDQo+ID4gPiA+Pj4+DQo+ID4g PiA+Pj4+IFdoZW4gdGFsa2luZyBhYm91dCBaQyBBUEkgZm9yIG1lbXBvb2wgY2FjaGUgSSBtZWFu dCBzb21ldGhpbmcNCj4gPiA+IGxpa2U6DQo+ID4gPiA+Pj4+IHZvaWQgKiogbWVtcG9vbF9jYWNo ZV9wdXRfemNfc3RhcnQoc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlDQo+ICptYywNCj4gPiA+ID4+ Pj4gdWludDMyX3QgKm5iX2VsZW0sIHVpbnQzMl90IGZsYWdzKTsgdm9pZA0KPiA+ID4gPj4+PiBt ZW1wb29sX2NhY2hlX3B1dF96Y19maW5pc2goc3RydWN0DQo+ID4gPiA+Pj4+IHJ0ZV9tZW1wb29s X2NhY2hlICptYywgdWludDMyX3QgbmJfZWxlbSk7IGkuZS4gX3N0YXJ0XyB3aWxsDQo+ID4gPiA+ Pj4+IHJldHVybiB1c2VyIGEgcG9pbnRlciBpbnNpZGUgbXAtY2FjaGUgd2hlcmUgdG8gcHV0IGZy ZWUgZWxlbXMNCj4gYW5kDQo+ID4gPiA+Pj4+IG1heA0KPiA+ID4gbnVtYmVyDQo+ID4gPiA+Pj4+ IG9mIHNsb3RzIHRoYXQgY2FuIGJlIHNhZmVseSBmaWxsZWQuDQo+ID4gPiA+Pj4+IF9maW5pc2hf IHdpbGwgdXBkYXRlIG1jLT5sZW4uDQo+ID4gPiA+Pj4+IEFzIGFuIGV4YW1wbGU6DQo+ID4gPiA+ Pj4+DQo+ID4gPiA+Pj4+IC8qIGV4cGVjdCB0byBmcmVlIE4gbWJ1ZnMgKi8NCj4gPiA+ID4+Pj4g dWludDMyX3QgbiA9IE47DQo+ID4gPiA+Pj4+IHZvaWQgKipwID0gbWVtcG9vbF9jYWNoZV9wdXRf emNfc3RhcnQobWMsICZuLCAuLi4pOw0KPiA+ID4gPj4+Pg0KPiA+ID4gPj4+PiAvKiBmcmVlIHVw IHRvIG4gZWxlbXMgKi8NCj4gPiA+ID4+Pj4gZm9yIChpID0gMDsgaSAhPSBuOyBpKyspIHsNCj4g PiA+ID4+Pj4NCj4gPiA+ID4+Pj4gICAgICAvKiBnZXQgbmV4dCBmcmVlIG1idWYgZnJvbSBzb21l d2hlcmUgKi8NCj4gPiA+ID4+Pj4gICAgICBtYiA9IGV4dHJhY3RfYW5kX3ByZWZyZWVfbWJ1Zigu Li4pOw0KPiA+ID4gPj4+Pg0KPiA+ID4gPj4+PiAgICAgIC8qIG5vIG1vcmUgZnJlZSBtYnVmcyBm b3Igbm93ICovDQo+ID4gPiA+Pj4+ICAgICAgaWYgKG1iID09IE5VTEwpDQo+ID4gPiA+Pj4+ICAg ICAgICAgYnJlYWs7DQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+ICAgICAgcFtpXSA9IG1iOw0KPiA+ ID4gPj4+PiB9DQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+IC8qIGZpbmFsaXplIFpDIHB1dCwgd2l0 aCBfaV8gZnJlZWQgZWxlbXMgKi8NCj4gPiA+ID4+Pj4gbWVtcG9vbF9jYWNoZV9wdXRfemNfZmlu aXNoKG1jLCBpKTsNCj4gPiA+ID4+Pj4NCj4gPiA+ID4+Pj4gVGhhdCB3YXksIEkgdGhpbmsgd2Ug Y2FuIG92ZXJjb21lIHRoZSBpc3N1ZSB3aXRoIGk0MGVfdHhfZW50cnkNCj4gPiA+ID4+Pj4geW91 IG1lbnRpb25lZCBhYm92ZS4gUGx1cyBpdCBtaWdodCBiZSB1c2VmdWwgaW4gb3RoZXIgc2ltaWxh cg0KPiBwbGFjZXMuDQo+ID4gPiA+Pj4+DQo+ID4gPiA+Pj4+IEFub3RoZXIgYWx0ZXJuYXRpdmUg aXMgb2J2aW91c2x5IHRvIHNwbGl0IGk0MGVfdHhfZW50cnkgaW50bw0KPiB0d28NCj4gPiA+ID4+ Pj4gc3RydWN0cyAob25lIGZvciBtYnVmLCBzZWNvbmQgZm9yIGl0cyBtZXRhZGF0YSkgYW5kIGhh dmUgYQ0KPiA+ID4gc2VwYXJhdGUNCj4gPiA+ID4+Pj4gYXJyYXkgZm9yIGVhY2ggb2YgdGhlbS4N Cj4gPiA+ID4+Pj4gVGhvdWdoIHdpdGggdGhhdCBhcHByb2FjaCB3ZSBuZWVkIHRvIG1ha2Ugc3Vy ZSBubyBwZXJmIGRyb3BzDQo+IHdpbGwNCj4gPiA+IGJlDQo+ID4gPiA+Pj4+IGludHJvZHVjZWQs IHBsdXMgcHJvYmFibHkgbW9yZSBjb2RlIGNoYW5nZXMgd2lsbCBiZSByZXF1aXJlZC4NCj4gPiA+ ID4+PiBDb21taXQgJzUxNzFiNGVlNmI2IiBhbHJlYWR5IGRvZXMgdGhpcyAoaW4gYSBkaWZmZXJl bnQgd2F5KSwNCj4gYnV0DQo+ID4gPiBqdXN0IGZvcg0KPiA+ID4gPj4gQVZYNTEyLiBVbmZvcnR1 bmF0ZWx5LCBpdCBkb2VzIG5vdCByZWNvcmQgYW55IHBlcmZvcm1hbmNlDQo+ID4gPiBpbXByb3Zl bWVudHMuIFdlDQo+ID4gPiA+PiBjb3VsZCBwb3J0IHRoaXMgdG8gQXJtIE5FT04gYW5kIGxvb2sg YXQgdGhlIHBlcmZvcm1hbmNlLg0KPiA+ID4gPg0KPiA+ID4NCg0K