From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 27763A04C1; Wed, 20 Nov 2019 14:40:54 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EB0E82B87; Wed, 20 Nov 2019 14:40:53 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by dpdk.org (Postfix) with ESMTP id 278F827D for ; Wed, 20 Nov 2019 14:40:53 +0100 (CET) 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 Date: Wed, 20 Nov 2019 14:40:50 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35C60C15@smartserver.smartshare.dk> In-Reply-To: <1574244727-6003-2-git-send-email-joyce.kong@arm.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [dpdk-dev] [PATCH v4 1/6] lib/eal: implement the family of rte bitoperation APIs Thread-Index: AdWfiwm/4fxjCLTHTmyvNHavDW+toQAHMPVA References: <1571125801-45773-1-git-send-email-joyce.kong@arm.com> <1574244727-6003-2-git-send-email-joyce.kong@arm.com> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Joyce Kong" , Cc: , , , , , , , , , , , , Subject: Re: [dpdk-dev] [PATCH v4 1/6] lib/eal: implement the family of rte bitoperation APIs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkZXYgW21haWx0bzpkZXYtYm91 bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIEpveWNlIEtvbmcNCj4gU2VudDogV2VkbmVzZGF5 LCBOb3ZlbWJlciAyMCwgMjAxOSAxMToxMiBBTQ0KPiANCj4gVGhlcmUgYXJlIGEgbG90IGZ1bmN0 aW9ucyBvZiBiaXQgb3BlcmF0aW9ucyBzY2F0dGVyZWQgYW5kDQo+IGR1cGxpY2F0ZWQgaW4gUE1E cywgY29uc29saWRhdGluZyB0aGVtIGludG8gYSBjb21tb24gQVBJDQo+IGZhbWlseSBpcyBuZWNl c3NhcnkuIEZ1cnRoZXJtb3JlLCB3aGVuIHRoZSBiaXQgb3BlcmF0aW9uDQo+IGlzIGFwcGxpZWQg dG8gdGhlIElPIGRldmljZXMsIHVzZSBfX0FUT01JQ19BQ1FfUkVMIHRvDQo+IGVuc3VyZSB0aGUg b3JkZXJpbmcgZm9yIGlvIGJpdCBvcGVyYXRpb24uDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBKb3lj ZSBLb25nIDxqb3ljZS5rb25nQGFybS5jb20+DQo+IFJldmlld2VkLWJ5OiBHYXZpbiBIdSA8Z2F2 aW4uaHVAYXJtLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IFBoaWwgWWFuZyA8cGhpbC55YW5nQGFybS5j b20+DQo+IC0tLQ0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICA1ICsNCj4gIGRvYy9hcGkvZG94eS1hcGktaW5kZXgubWQgICAgICAgICAgICAgICAgICB8 ICAgNSArLQ0KPiAgbGliL2xpYnJ0ZV9lYWwvY29tbW9uL01ha2VmaWxlICAgICAgICAgICAgIHwg ICAxICsNCj4gIGxpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV9iaXRvcHMuaCB8IDQ3 NA0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgbGliL2xpYnJ0ZV9lYWwvY29t bW9uL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAzICstDQo+ICA1IGZpbGVzIGNoYW5nZWQsIDQ4 NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV9iaXRvcHMuaA0KPiANCj4gZGlmZiAtLWdp dCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCj4gaW5kZXggZjJmZGI5My4uNGVlMjcxMiAx MDA2NDQNCj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gKysrIGIvTUFJTlRBSU5FUlMNCj4gQEAgLTIz Myw2ICsyMzMsMTEgQEAgTTogQ3Jpc3RpYW4gRHVtaXRyZXNjdSA8Y3Jpc3RpYW4uZHVtaXRyZXNj dUBpbnRlbC5jb20+DQo+ICBGOiBsaWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfYml0 bWFwLmgNCj4gIEY6IGFwcC90ZXN0L3Rlc3RfYml0bWFwLmMNCj4gDQo+ICtCaXRvcHMNCj4gK006 IEpveWNlIEtvbmcgPGpveWNlLmtvbmdAYXJtLmNvbT4NCj4gK0Y6IGxpYi9saWJydGVfZWFsL2Nv bW1vbi9pbmNsdWRlL3J0ZV9iaXRvcHMuaA0KPiArRjogYXBwL3Rlc3QvdGVzdF9iaXRvcHMuYw0K PiArDQo+ICBNQ1Nsb2NrIC0gRVhQRVJJTUVOVEFMDQo+ICBNOiBQaGlsIFlhbmcgPHBoaWwueWFu Z0Bhcm0uY29tPg0KPiAgRjogbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvZ2VuZXJpYy9y dGVfbWNzbG9jay5oDQo+IGRpZmYgLS1naXQgYS9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kIGIv ZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiBpbmRleCBkZmY0OTZiLi5hZGU3YzAxIDEwMDY0 NA0KPiAtLS0gYS9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+ICsrKyBiL2RvYy9hcGkvZG94 eS1hcGktaW5kZXgubWQNCj4gQEAgLTEzMywxMiArMTMzLDEzIEBAIFRoZSBwdWJsaWMgQVBJIGhl YWRlcnMgYXJlIGdyb3VwZWQgYnkgdG9waWNzOg0KPiAgICBbQlBGXSAgICAgICAgICAgICAgICAo QHJlZiBydGVfYnBmLmgpDQo+IA0KPiAgLSAqKmNvbnRhaW5lcnMqKjoNCj4gKyAgW2JpdG1hcF0g ICAgICAgICAgICAgKEByZWYgcnRlX2JpdG1hcC5oKSwNCj4gKyAgW2JpdG9wc10gICAgICAgICAg ICAgKEByZWYgcnRlX2JpdG9wcy5oKSwNCj4gICAgW21idWZdICAgICAgICAgICAgICAgKEByZWYg cnRlX21idWYuaCksDQo+ICAgIFttYnVmIHBvb2wgb3BzXSAgICAgIChAcmVmIHJ0ZV9tYnVmX3Bv b2xfb3BzLmgpLA0KPiAgICBbcmluZ10gICAgICAgICAgICAgICAoQHJlZiBydGVfcmluZy5oKSwN Cj4gICAgW3N0YWNrXSAgICAgICAgICAgICAgKEByZWYgcnRlX3N0YWNrLmgpLA0KPiAtICBbdGFp bHFdICAgICAgICAgICAgICAoQHJlZiBydGVfdGFpbHEuaCksDQo+IC0gIFtiaXRtYXBdICAgICAg ICAgICAgIChAcmVmIHJ0ZV9iaXRtYXAuaCkNCj4gKyAgW3RhaWxxXSAgICAgICAgICAgICAgKEBy ZWYgcnRlX3RhaWxxLmgpDQo+IA0KPiAgLSAqKnBhY2tldCBmcmFtZXdvcmsqKjoNCj4gICAgKiBb cG9ydF0gICAgICAgICAgICAgKEByZWYgcnRlX3BvcnQuaCk6DQo+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX2VhbC9jb21tb24vTWFrZWZpbGUNCj4gYi9saWIvbGlicnRlX2VhbC9jb21tb24vTWFr ZWZpbGUNCj4gaW5kZXggYzJjNmQ5Mi4uZGQwMjVjMSAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0 ZV9lYWwvY29tbW9uL01ha2VmaWxlDQo+ICsrKyBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9NYWtl ZmlsZQ0KPiBAQCAtMTksNiArMTksNyBAQCBJTkMgKz0gcnRlX21hbGxvYy5oIHJ0ZV9rZWVwYWxp dmUuaCBydGVfdGltZS5oDQo+ICBJTkMgKz0gcnRlX3NlcnZpY2UuaCBydGVfc2VydmljZV9jb21w b25lbnQuaA0KPiAgSU5DICs9IHJ0ZV9iaXRtYXAuaCBydGVfdmZpby5oIHJ0ZV9oeXBlcnZpc29y LmggcnRlX3Rlc3QuaA0KPiAgSU5DICs9IHJ0ZV9yZWNpcHJvY2FsLmggcnRlX2ZiYXJyYXkuaCBy dGVfdXVpZC5oDQo+ICtJTkMgKz0gcnRlX2JpdG9wcy5oDQo+IA0KPiAgR0VORVJJQ19JTkMgOj0g cnRlX2F0b21pYy5oIHJ0ZV9ieXRlb3JkZXIuaCBydGVfY3ljbGVzLmggcnRlX3ByZWZldGNoLmgN Cj4gIEdFTkVSSUNfSU5DICs9IHJ0ZV9tZW1jcHkuaCBydGVfY3B1ZmxhZ3MuaA0KPiBkaWZmIC0t Z2l0IGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvcnRlX2JpdG9wcy5oDQo+IGIvbGli L2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvcnRlX2JpdG9wcy5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjM0MTU4ZDENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfYml0b3BzLmgNCj4gQEAgLTAsMCAr MSw0NzQgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4g KyAqIENvcHlyaWdodChjKSAyMDE5IEFybSBMaW1pdGVkDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRl ZiBfUlRFX0JJVE9QU19IXw0KPiArI2RlZmluZSBfUlRFX0JJVE9QU19IXw0KPiArDQo+ICsvKioN Cj4gKyAqIEBmaWxlDQo+ICsgKiBCaXQgT3BlcmF0aW9ucw0KPiArICoNCj4gKyAqIFRoaXMgZmls ZSBkZWZpbmVzIGEgQVBJIGZvciBiaXQgb3BlcmF0aW9ucyB3aXRob3V0L3dpdGggbWVtb3J5DQo+ IG9yZGVyaW5nLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKyNpbmNs dWRlIDxydGVfZGVidWcuaD4NCj4gKyNpbmNsdWRlIDxydGVfY29tcGF0Lmg+DQo+ICsNCj4gKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAzMiBiaXQgb3BlcmF0aW9ucyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+IC0tLSovDQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4g KyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwg d2l0aG91dCBwcmlvcg0KPiBub3RpY2UNCj4gKyAqDQo+ICsgKiBHZXQgdGhlIHRhcmdldCBiaXQg ZnJvbSBhIDMyLWJpdCB2YWx1ZSB3aXRob3V0IG1lbW9yeSBvcmRlcmluZy4NCj4gKyAqDQo+ICsg KiBAcGFyYW0gbnINCj4gKyAqICAgVGhlIHRhcmdldCBiaXQgdG8gZ2V0Lg0KPiArICogQHBhcmFt IGFkZHINCj4gKyAqICAgVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYml0Lg0KPiArICogQHJldHVy bg0KPiArICogICBUaGUgdGFyZ2V0IGJpdC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFs DQo+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ICtydGVfZ2V0X2JpdDMyX3JlbGF4ZWQodW5z aWduZWQgaW50IG5yLCB1aW50MzJfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwg MzIpOw0KPiArDQo+ICsJdWludDMyX3QgbWFzayA9IFVJTlQzMl9DKDEpIDw8IG5yOw0KPiArCXJl dHVybiBfX2F0b21pY19sb2FkX24oYWRkciwgX19BVE9NSUNfUkVMQVhFRCkgJiBtYXNrOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRo aXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNl DQo+ICsgKg0KPiArICogU2V0IHRoZSB0YXJnZXQgYml0IGluIGEgMzItYml0IHZhbHVlIHRvIDEg d2l0aG91dCBtZW1vcnkgb3JkZXJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIG5yDQo+ICsgKiAg IFRoZSB0YXJnZXQgYml0IHRvIHNldC4NCj4gKyAqIEBwYXJhbSBhZGRyDQo+ICsgKiAgIFRoZSBh ZGRyZXNzIGhvbGRpbmcgdGhlIGJpdC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK3J0ZV9zZXRfYml0MzJfcmVsYXhlZCh1bnNpZ25lZCBp bnQgbnIsIHVpbnQzMl90ICphZGRyKQ0KPiArew0KPiArCVJURV9BU1NFUlQobnIgPCAzMik7DQo+ ICsNCj4gKwl1aW50MzJfdCBtYXNrID0gVUlOVDMyX0MoMSkgPDwgbnI7DQo+ICsJX19hdG9taWNf ZmV0Y2hfb3IoYWRkciwgbWFzaywgX19BVE9NSUNfUkVMQVhFRCk7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiBub3RpY2UNCj4gKyAqDQo+ICsg KiBDbGVhciB0aGUgdGFyZ2V0IGJpdCBpbiBhIDMyLWJpdCB2YWx1ZSB0byAwIHdpdGhvdXQgbWVt b3J5IG9yZGVyaW5nLg0KPiArICoNCj4gKyAqIEBwYXJhbSBucg0KPiArICogICBUaGUgdGFyZ2V0 IGJpdCB0byBjbGVhci4NCj4gKyAqIEBwYXJhbSBhZGRyDQo+ICsgKiAgIFRoZSBhZGRyZXNzIGhv bGRpbmcgdGhlIGJpdC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMg aW5saW5lIHZvaWQNCj4gK3J0ZV9jbGVhcl9iaXQzMl9yZWxheGVkKHVuc2lnbmVkIGludCBuciwg dWludDMyX3QgKmFkZHIpDQo+ICt7DQo+ICsJUlRFX0FTU0VSVChuciA8IDMyKTsNCj4gKw0KPiAr CXVpbnQzMl90IG1hc2sgPSBVSU5UMzJfQygxKSA8PCBucjsNCj4gKwlfX2F0b21pY19mZXRjaF9h bmQoYWRkciwgfm1hc2ssIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Us IG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlDQo+ICsgKg0KPiArICogUmV0 dXJuIHRoZSBvcmlnaW5hbCBiaXQgZnJvbSBhIDMyLWJpdCB2YWx1ZSwgdGhlbiBzZXQgaXQgdG8g MSB3aXRob3V0DQo+ICsgKiBtZW1vcnkgb3JkZXJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIG5y DQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0IHRvIGdldCBhbmQgc2V0Lg0KPiArICogQHBhcmFtIGFk ZHINCj4gKyAqICAgVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYml0Lg0KPiArICogQHJldHVybg0K PiArICogICBUaGUgb3JpZ2luYWwgYml0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwN Cj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QNCj4gK3J0ZV90ZXN0X2FuZF9zZXRfYml0MzJfcmVs YXhlZCh1bnNpZ25lZCBpbnQgbnIsIHVpbnQzMl90ICphZGRyKQ0KPiArew0KPiArCVJURV9BU1NF UlQobnIgPCAzMik7DQo+ICsNCj4gKwl1aW50MzJfdCBtYXNrID0gVUlOVDMyX0MoMSkgPDwgbnI7 DQo+ICsJcmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKGFkZHIsIG1hc2ssIF9fQVRPTUlDX1JFTEFY RUQpICYgbWFzazsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIg RVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0 IHByaW9yDQo+IG5vdGljZQ0KPiArICoNCj4gKyAqIFJldHVybiB0aGUgb3JpZ2luYWwgYml0IGZy b20gYSAzMi1iaXQgdmFsdWUsIHRoZW4gY2xlYXIgaXQgdG8gMCB3aXRob3V0DQo+ICsgKiBtZW1v cnkgb3JkZXJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIG5yDQo+ICsgKiAgIFRoZSB0YXJnZXQg Yml0IHRvIGdldCBhbmQgY2xlYXIuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRk cmVzcyBob2xkaW5nIHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBvcmlnaW5h bCBiaXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGluZSB1 aW50MzJfdA0KPiArcnRlX3Rlc3RfYW5kX2NsZWFyX2JpdDMyX3JlbGF4ZWQodW5zaWduZWQgaW50 IG5yLCB1aW50MzJfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwgMzIpOw0KPiAr DQo+ICsJdWludDMyX3QgbWFzayA9IFVJTlQzMl9DKDEpIDw8IG5yOw0KPiArCXJldHVybiBfX2F0 b21pY19mZXRjaF9hbmQoYWRkciwgfm1hc2ssIF9fQVRPTUlDX1JFTEFYRUQpICYgbWFzazsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0 aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+IG5vdGlj ZQ0KPiArICoNCj4gKyAqIEdldCB0aGUgdGFyZ2V0IGJpdCBmcm9tIGEgMzItYml0IHZhbHVlIHdp dGggbWVtb3J5IG9yZGVyaW5nLg0KPiArICoNCj4gKyAqIEBwYXJhbSBucg0KPiArICogICBUaGUg dGFyZ2V0IGJpdCB0byBnZXQuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRkcmVz cyBob2xkaW5nIHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0 Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdWludDMy X3QNCj4gK3J0ZV9nZXRfYml0MzIodW5zaWduZWQgaW50IG5yLCB1aW50MzJfdCAqYWRkcikNCj4g K3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwgMzIpOw0KPiArDQo+ICsJdWludDMyX3QgbWFzayA9IFVJ TlQzMl9DKDEpIDw8IG5yOw0KPiArCXJldHVybiBfX2F0b21pY19sb2FkX24oYWRkciwgX19BVE9N SUNfQUNRVUlSRSkgJiBtYXNrOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQs IHdpdGhvdXQgcHJpb3INCj4gbm90aWNlDQo+ICsgKg0KPiArICogU2V0IHRoZSB0YXJnZXQgYml0 IGluIGEgMzItYml0IHZhbHVlIHRvIDEgd2l0aCBtZW1vcnkgb3JkZXJpbmcuDQo+ICsgKg0KPiAr ICogQHBhcmFtIG5yDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0IHRvIHNldC4NCj4gKyAqIEBwYXJh bSBhZGRyDQo+ICsgKiAgIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJpdC4NCj4gKyAqLw0KPiAr X19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK3J0ZV9zZXRfYml0 MzIodW5zaWduZWQgaW50IG5yLCB1aW50MzJfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJU KG5yIDwgMzIpOw0KPiArDQo+ICsJdWludDMyX3QgbWFzayA9IFVJTlQzMl9DKDEpIDw8IG5yOw0K PiArCV9fYXRvbWljX2ZldGNoX29yKGFkZHIsIG1hc2ssIF9fQVRPTUlDX0FDUV9SRUwpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRo aXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNl DQo+ICsgKg0KPiArICogQ2xlYXIgdGhlIHRhcmdldCBiaXQgaW4gYSAzMi1iaXQgdmFsdWUgdG8g MCB3aXRoIG1lbW9yeSBvcmRlcmluZy4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbnINCj4gKyAqICAg VGhlIHRhcmdldCBiaXQgdG8gY2xlYXIuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUg YWRkcmVzcyBob2xkaW5nIHRoZSBiaXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtydGVfY2xlYXJfYml0MzIodW5zaWduZWQgaW50IG5y LCB1aW50MzJfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwgMzIpOw0KPiArDQo+ ICsJdWludDMyX3QgbWFzayA9IFVJTlQzMl9DKDEpIDw8IG5yOw0KPiArCV9fYXRvbWljX2ZldGNo X2FuZChhZGRyLCB+bWFzaywgX19BVE9NSUNfQUNRX1JFTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiBub3RpY2UNCj4gKyAqDQo+ICsgKiBS ZXR1cm4gdGhlIG9yaWdpbmFsIGJpdCBmcm9tIGEgMzItYml0IHZhbHVlLCB0aGVuIHNldCBpdCB0 byAxIHdpdGgNCj4gKyAqIG1lbW9yeSBvcmRlcmluZy4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbnIN Cj4gKyAqICAgVGhlIHRhcmdldCBiaXQgdG8gZ2V0IGFuZCBzZXQuDQo+ICsgKiBAcGFyYW0gYWRk cg0KPiArICogICBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgIFRoZSBvcmlnaW5hbCBiaXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiArc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiArcnRlX3Rlc3RfYW5kX3NldF9iaXQzMih1bnNp Z25lZCBpbnQgbnIsIHVpbnQzMl90ICphZGRyKQ0KPiArew0KPiArCVJURV9BU1NFUlQobnIgPCAz Mik7DQo+ICsNCj4gKwl1aW50MzJfdCBtYXNrID0gVUlOVDMyX0MoMSkgPDwgbnI7DQo+ICsJcmV0 dXJuIF9fYXRvbWljX2ZldGNoX29yKGFkZHIsIG1hc2ssIF9fQVRPTUlDX0FDUV9SRUwpICYgbWFz azsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVO VEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+ IG5vdGljZQ0KPiArICoNCj4gKyAqIFJldHVybiB0aGUgb3JpZ2luYWwgYml0IGZyb20gYSAzMi1i aXQgdmFsdWUsIHRoZW4gY2xlYXIgaXQgdG8gMCB3aXRoDQo+ICsgKiBtZW1vcnkgb3JkZXJpbmcu DQo+ICsgKg0KPiArICogQHBhcmFtIG5yDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0IHRvIGdldCBh bmQgY2xlYXIuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRkcmVzcyBob2xkaW5n IHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBvcmlnaW5hbCBiaXQuDQo+ICsg Ki8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiAr cnRlX3Rlc3RfYW5kX2NsZWFyX2JpdDMyKHVuc2lnbmVkIGludCBuciwgdWludDMyX3QgKmFkZHIp DQo+ICt7DQo+ICsJUlRFX0FTU0VSVChuciA8IDMyKTsNCj4gKw0KPiArCXVpbnQzMl90IG1hc2sg PSBVSU5UMzJfQygxKSA8PCBucjsNCj4gKwlyZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKGFkZHIs IH5tYXNrLCBfX0FUT01JQ19BQ1FfUkVMKSAmIG1hc2s7DQo+ICt9DQo+ICsNCj4gKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA2NCBiaXQgb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQo+IC0tLSovDQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91 dCBwcmlvcg0KPiBub3RpY2UNCj4gKyAqDQo+ICsgKiBHZXQgdGhlIHRhcmdldCBiaXQgZnJvbSBh IDY0LWJpdCB2YWx1ZSB3aXRob3V0IG1lbW9yeSBvcmRlcmluZy4NCj4gKyAqDQo+ICsgKiBAcGFy YW0gbnINCj4gKyAqICAgVGhlIHRhcmdldCBiaXQgdG8gZ2V0Lg0KPiArICogQHBhcmFtIGFkZHIN Cj4gKyAqICAgVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYml0Lg0KPiArICogQHJldHVybg0KPiAr ICogICBUaGUgdGFyZ2V0IGJpdC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtz dGF0aWMgaW5saW5lIHVpbnQ2NF90DQo+ICtydGVfZ2V0X2JpdDY0X3JlbGF4ZWQodW5zaWduZWQg aW50IG5yLCB1aW50NjRfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwgNjQpOw0K PiArDQo+ICsJdWludDY0X3QgbWFzayA9IFVJTlQ2NF9DKDEpIDw8IG5yOw0KPiArCXJldHVybiBf X2F0b21pY19sb2FkX24oYWRkciwgX19BVE9NSUNfUkVMQVhFRCkgJiBtYXNrOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ IG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlDQo+ICsg Kg0KPiArICogU2V0IHRoZSB0YXJnZXQgYml0IGluIGEgNjQtYml0IHZhbHVlIHRvIDEgd2l0aG91 dCBtZW1vcnkgb3JkZXJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIG5yDQo+ICsgKiAgIFRoZSB0 YXJnZXQgYml0IHRvIHNldC4NCj4gKyAqIEBwYXJhbSBhZGRyDQo+ICsgKiAgIFRoZSBhZGRyZXNz IGhvbGRpbmcgdGhlIGJpdC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQNCj4gK3J0ZV9zZXRfYml0NjRfcmVsYXhlZCh1bnNpZ25lZCBpbnQgbnIs IHVpbnQ2NF90ICphZGRyKQ0KPiArew0KPiArCVJURV9BU1NFUlQobnIgPCA2NCk7DQo+ICsNCj4g Kwl1aW50NjRfdCBtYXNrID0gVUlOVDY0X0MoMSkgPDwgbnI7DQo+ICsJX19hdG9taWNfZmV0Y2hf b3IoYWRkciwgbWFzaywgX19BVE9NSUNfUkVMQVhFRCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwg b3IgYmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiBub3RpY2UNCj4gKyAqDQo+ICsgKiBDbGVh ciB0aGUgdGFyZ2V0IGJpdCBpbiBhIDY0LWJpdCB2YWx1ZSB0byAwIHdpdGhvdXQgbWVtb3J5IG9y ZGVyaW5nLg0KPiArICoNCj4gKyAqIEBwYXJhbSBucg0KPiArICogICBUaGUgdGFyZ2V0IGJpdCB0 byBjbGVhci4NCj4gKyAqIEBwYXJhbSBhZGRyDQo+ICsgKiAgIFRoZSBhZGRyZXNzIGhvbGRpbmcg dGhlIGJpdC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgaW5saW5l IHZvaWQNCj4gK3J0ZV9jbGVhcl9iaXQ2NF9yZWxheGVkKHVuc2lnbmVkIGludCBuciwgdWludDY0 X3QgKmFkZHIpDQo+ICt7DQo+ICsJUlRFX0FTU0VSVChuciA8IDY0KTsNCj4gKw0KPiArCXVpbnQ2 NF90IG1hc2sgPSBVSU5UNjRfQygxKSA8PCBucjsNCj4gKwlfX2F0b21pY19mZXRjaF9hbmQoYWRk ciwgfm1hc2ssIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3 YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJl IHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlDQo+ICsgKg0KPiArICogUmV0dXJuIHRo ZSBvcmlnaW5hbCBiaXQgZnJvbSBhIDY0LWJpdCB2YWx1ZSwgdGhlbiBzZXQgaXQgdG8gMSB3aXRo b3V0DQo+ICsgKiBtZW1vcnkgb3JkZXJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIG5yDQo+ICsg KiAgIFRoZSB0YXJnZXQgYml0IHRvIGdldCBhbmQgc2V0Lg0KPiArICogQHBhcmFtIGFkZHINCj4g KyAqICAgVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYml0Lg0KPiArICogQHJldHVybg0KPiArICog ICBUaGUgb3JpZ2luYWwgYml0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0 YXRpYyBpbmxpbmUgdWludDY0X3QNCj4gK3J0ZV90ZXN0X2FuZF9zZXRfYml0NjRfcmVsYXhlZCh1 bnNpZ25lZCBpbnQgbnIsIHVpbnQ2NF90ICphZGRyKQ0KPiArew0KPiArCVJURV9BU1NFUlQobnIg PCA2NCk7DQo+ICsNCj4gKwl1aW50NjRfdCBtYXNrID0gVUlOVDY0X0MoMSkgPDwgbnI7DQo+ICsJ cmV0dXJuIF9fYXRvbWljX2ZldGNoX29yKGFkZHIsIG1hc2ssIF9fQVRPTUlDX1JFTEFYRUQpICYg bWFzazsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9y DQo+IG5vdGljZQ0KPiArICoNCj4gKyAqIFJldHVybiB0aGUgb3JpZ2luYWwgYml0IGZyb20gYSA2 NC1iaXQgdmFsdWUsIHRoZW4gY2xlYXIgaXQgdG8gMCB3aXRob3V0DQo+ICsgKiBtZW1vcnkgb3Jk ZXJpbmcuDQo+ICsgKg0KPiArICogQHBhcmFtIG5yDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0IHRv IGdldCBhbmQgY2xlYXIuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRkcmVzcyBo b2xkaW5nIHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBvcmlnaW5hbCBiaXQu DQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGluZSB1aW50NjRf dA0KPiArcnRlX3Rlc3RfYW5kX2NsZWFyX2JpdDY0X3JlbGF4ZWQodW5zaWduZWQgaW50IG5yLCB1 aW50NjRfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwgNjQpOw0KPiArDQo+ICsJ dWludDY0X3QgbWFzayA9IFVJTlQ2NF9DKDEpIDw8IG5yOw0KPiArCXJldHVybiBfX2F0b21pY19m ZXRjaF9hbmQoYWRkciwgfm1hc2ssIF9fQVRPTUlDX1JFTEFYRUQpICYgbWFzazsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ SSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+IG5vdGljZQ0KPiAr ICoNCj4gKyAqIEdldCB0aGUgdGFyZ2V0IGJpdCBmcm9tIGEgNjQtYml0IHZhbHVlIHdpdGggbWVt b3J5IG9yZGVyaW5nLg0KPiArICoNCj4gKyAqIEBwYXJhbSBucg0KPiArICogICBUaGUgdGFyZ2V0 IGJpdCB0byBnZXQuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRkcmVzcyBob2xk aW5nIHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0Lg0KPiAr ICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QNCj4g K3J0ZV9nZXRfYml0NjQodW5zaWduZWQgaW50IG5yLCB1aW50NjRfdCAqYWRkcikNCj4gK3sNCj4g KwlSVEVfQVNTRVJUKG5yIDwgNjQpOw0KPiArDQo+ICsJdWludDY0X3QgbWFzayA9IFVJTlQ2NF9D KDEpIDw8IG5yOw0KPiArCXJldHVybiBfX2F0b21pY19sb2FkX24oYWRkciwgX19BVE9NSUNfQUNR VUlSRSkgJiBtYXNrOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBA YiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhv dXQgcHJpb3INCj4gbm90aWNlDQo+ICsgKg0KPiArICogU2V0IHRoZSB0YXJnZXQgYml0IGluIGEg NjQtYml0IHZhbHVlIHRvIDEgd2l0aCBtZW1vcnkgb3JkZXJpbmcuDQo+ICsgKg0KPiArICogQHBh cmFtIG5yDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0IHRvIHNldC4NCj4gKyAqIEBwYXJhbSBhZGRy DQo+ICsgKiAgIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJpdC4NCj4gKyAqLw0KPiArX19ydGVf ZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK3J0ZV9zZXRfYml0NjQodW5z aWduZWQgaW50IG5yLCB1aW50NjRfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwg NjQpOw0KPiArDQo+ICsJdWludDY0X3QgbWFzayA9IFVJTlQ2NF9DKDEpIDw8IG5yOw0KPiArCV9f YXRvbWljX2ZldGNoX29yKGFkZHIsIG1hc2ssIF9fQVRPTUlDX0FDUV9SRUwpOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ IG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlDQo+ICsg Kg0KPiArICogQ2xlYXIgdGhlIHRhcmdldCBiaXQgaW4gYSA2NC1iaXQgdmFsdWUgdG8gMCB3aXRo IG1lbW9yeSBvcmRlcmluZy4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbnINCj4gKyAqICAgVGhlIHRh cmdldCBiaXQgdG8gY2xlYXIuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRkcmVz cyBob2xkaW5nIHRoZSBiaXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3Rh dGljIGlubGluZSB2b2lkDQo+ICtydGVfY2xlYXJfYml0NjQodW5zaWduZWQgaW50IG5yLCB1aW50 NjRfdCAqYWRkcikNCj4gK3sNCj4gKwlSVEVfQVNTRVJUKG5yIDwgNjQpOw0KPiArDQo+ICsJdWlu dDY0X3QgbWFzayA9IFVJTlQ2NF9DKDEpIDw8IG5yOw0KPiArCV9fYXRvbWljX2ZldGNoX2FuZChh ZGRyLCB+bWFzaywgX19BVE9NSUNfQUNRX1JFTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog QHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSwgb3Ig YmUgcmVtb3ZlZCwgd2l0aG91dCBwcmlvcg0KPiBub3RpY2UNCj4gKyAqDQo+ICsgKiBSZXR1cm4g dGhlIG9yaWdpbmFsIGJpdCBmcm9tIGEgNjQtYml0IHZhbHVlLCB0aGVuIHNldCBpdCB0byAxIHdp dGgNCj4gKyAqIG1lbW9yeSBvcmRlcmluZy4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbnINCj4gKyAq ICAgVGhlIHRhcmdldCBiaXQgdG8gZ2V0IGFuZCBzZXQuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiAr ICogICBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiaXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAg IFRoZSBvcmlnaW5hbCBiaXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3Rh dGljIGlubGluZSB1aW50NjRfdA0KPiArcnRlX3Rlc3RfYW5kX3NldF9iaXQ2NCh1bnNpZ25lZCBp bnQgbnIsIHVpbnQ2NF90ICphZGRyKQ0KPiArew0KPiArCVJURV9BU1NFUlQobnIgPCA2NCk7DQo+ ICsNCj4gKwl1aW50NjRfdCBtYXNrID0gVUlOVDY0X0MoMSkgPDwgbnI7DQo+ICsJcmV0dXJuIF9f YXRvbWljX2ZldGNoX29yKGFkZHIsIG1hc2ssIF9fQVRPTUlDX0FDUV9SRUwpICYgbWFzazsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0 aGlzIEFQSSBtYXkgY2hhbmdlLCBvciBiZSByZW1vdmVkLCB3aXRob3V0IHByaW9yDQo+IG5vdGlj ZQ0KPiArICoNCj4gKyAqIFJldHVybiB0aGUgb3JpZ2luYWwgYml0IGZyb20gYSA2NC1iaXQgdmFs dWUsIHRoZW4gY2xlYXIgaXQgdG8gMCB3aXRoDQo+ICsgKiBtZW1vcnkgb3JkZXJpbmcuDQo+ICsg Kg0KPiArICogQHBhcmFtIG5yDQo+ICsgKiAgIFRoZSB0YXJnZXQgYml0IHRvIGdldCBhbmQgY2xl YXIuDQo+ICsgKiBAcGFyYW0gYWRkcg0KPiArICogICBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBi aXQuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIFRoZSBvcmlnaW5hbCBiaXQuDQo+ICsgKi8NCj4g K19fcnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGlubGluZSB1aW50NjRfdA0KPiArcnRlX3Rl c3RfYW5kX2NsZWFyX2JpdDY0KHVuc2lnbmVkIGludCBuciwgdWludDY0X3QgKmFkZHIpDQo+ICt7 DQo+ICsJUlRFX0FTU0VSVChuciA8IDY0KTsNCj4gKw0KPiArCXVpbnQ2NF90IG1hc2sgPSBVSU5U NjRfQygxKSA8PCBucjsNCj4gKwlyZXR1cm4gX19hdG9taWNfZmV0Y2hfYW5kKGFkZHIsIH5tYXNr LCBfX0FUT01JQ19BQ1FfUkVMKSAmIG1hc2s7DQo+ICt9DQo+ICsjZW5kaWYgLyogX1JURV9CSVRP UFNfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZWFsL2NvbW1vbi9tZXNvbi5idWls ZA0KPiBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9tZXNvbi5idWlsZA0KPiBpbmRleCBkNmExNDli Li44YTUxOTdiIDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX2VhbC9jb21tb24vbWVzb24uYnVp bGQNCj4gKysrIGIvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+IEBAIC01MCw5 ICs1MCwxMCBAQCBjb21tb25fb2JqcyArPSBlYWxfY29tbW9uX2FyY2hfb2Jqcw0KPiANCj4gIGNv bW1vbl9oZWFkZXJzID0gZmlsZXMoDQo+ICAJJ2luY2x1ZGUvcnRlX2FsYXJtLmgnLA0KPiArCSdp bmNsdWRlL3J0ZV9iaXRtYXAuaCcsDQo+ICsJJ2luY2x1ZGUvcnRlX2JpdG9wcy5oJywNCj4gIAkn aW5jbHVkZS9ydGVfYnJhbmNoX3ByZWRpY3Rpb24uaCcsDQo+ICAJJ2luY2x1ZGUvcnRlX2J1cy5o JywNCj4gLQknaW5jbHVkZS9ydGVfYml0bWFwLmgnLA0KPiAgCSdpbmNsdWRlL3J0ZV9jbGFzcy5o JywNCj4gIAknaW5jbHVkZS9ydGVfY29tbW9uLmgnLA0KPiAgCSdpbmNsdWRlL3J0ZV9jb21wYXQu aCcsDQo+IC0tDQo+IDIuNy40DQo+IA0KDQpBY2tlZC1ieTogTW9ydGVuIEJyw7hydXAgPG1iQHNt YXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCg0K