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 6DF1141CBE; Fri, 17 Feb 2023 11:14:43 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4DD7440F17; Fri, 17 Feb 2023 11:14:43 +0100 (CET) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 2209740EE1 for ; Fri, 17 Feb 2023 11:14:42 +0100 (CET) Received: from frapeml500007.china.huawei.com (unknown [172.18.147.200]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4PJ6xt1wQcz67FBw; Fri, 17 Feb 2023 18:10:10 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml500007.china.huawei.com (7.182.85.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Fri, 17 Feb 2023 11:14:41 +0100 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.017; Fri, 17 Feb 2023 11:14:41 +0100 From: Konstantin Ananyev To: Tomasz Duszynski , Konstantin Ananyev , "dev@dpdk.org" Subject: RE: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Topic: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Index: AQHZQi/0WtsdB195/EyIqAkaKgLk/K7SLcMAgACWeQCAACW00A== Date: Fri, 17 Feb 2023 10:14:40 +0000 Message-ID: References: <20230213113156.385482-1-tduszynski@marvell.com> <20230216175502.3164820-1-tduszynski@marvell.com> <20230216175502.3164820-2-tduszynski@marvell.com> <4b055bbc-36e5-671c-8117-fb0ee7307d55@yandex.ru> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.126.171.238] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected 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 DQoNCj4gPj4NCj4gPj4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSBD UFUgY29yZXMgYXJlIGlzb2xhdGVkIGkuZQ0KPiA+PiBydW4gZGVkaWNhdGVkIHRhc2tzLiBJbiBz dWNoIGNhc2VzIG9uZSBjYW5ub3QgdXNlIHN0YW5kYXJkIHBlcmYNCj4gPj4gdXRpbGl0eSB3aXRo b3V0IHNhY3JpZmljaW5nIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlLg0KPiA+Pg0KPiA+PiBTaWdu ZWQtb2ZmLWJ5OiBUb21hc3ogRHVzenluc2tpIDx0ZHVzenluc2tpQG1hcnZlbGwuY29tPg0KPiA+ PiBBY2tlZC1ieTogTW9ydGVuIEJyw7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4g Pj4gLS0tDQo+ID4+ICAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDUgKw0KPiA+PiAgIGFwcC90ZXN0L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgIHwgICAy ICsNCj4gPj4gICBhcHAvdGVzdC90ZXN0X3BtdS5jICAgICAgICAgICAgICAgICAgICB8ICA2MiAr KysrDQo+ID4+ICAgZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCAgICAgICAgICAgICAgfCAgIDMg Ky0NCj4gPj4gICBkb2MvYXBpL2RveHktYXBpLmNvbmYuaW4gICAgICAgICAgICAgICB8ICAgMSAr DQo+ID4+ICAgZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2ZpbGVfYXBwLnJzdCAgfCAgMTIgKw0K PiA+PiAgIGRvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjNfMDMucnN0IHwgICA3ICsNCj4g Pj4gICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4+ ICAgbGliL3BtdS9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgfCAgMTMgKw0KPiA+PiAg IGxpYi9wbXUvcG11X3ByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgIDMyICsrDQo+ID4+ICAg bGliL3BtdS9ydGVfcG11LmMgICAgICAgICAgICAgICAgICAgICAgfCA0NjAgKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiA+PiAgIGxpYi9wbXUvcnRlX3BtdS5oICAgICAgICAgICAgICAgICAg ICAgIHwgMjEyICsrKysrKysrKysrKw0KPiA+PiAgIGxpYi9wbXUvdmVyc2lvbi5tYXAgICAgICAg ICAgICAgICAgICAgIHwgIDE1ICsNCj4gPj4gICAxMyBmaWxlcyBjaGFuZ2VkLCA4MjQgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcHAvdGVz dC90ZXN0X3BtdS5jDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wbXUvbWVzb24uYnVp bGQNCj4gPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3BtdS9wbXVfcHJpdmF0ZS5oDQo+ID4+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wbXUvcnRlX3BtdS5jDQo+ID4+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9wbXUvcnRlX3BtdS5oDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9wbXUvdmVyc2lvbi5tYXANCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMgaW5kZXggMzQ5NTk0NmQwZi4uZDM3ZjI0MjEyMA0KPiA+PiAxMDA2NDQNCj4g Pj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4gPj4gKysrIGIvTUFJTlRBSU5FUlMNCj4gPj4gQEAgLTE2 OTcsNiArMTY5NywxMSBAQCBNOiBOaXRoaW4gRGFiaWxwdXJhbSA8bmRhYmlscHVyYW1AbWFydmVs bC5jb20+DQo+ID4+ICAgTTogUGF2YW4gTmlraGlsZXNoIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5j b20+DQo+ID4+ICAgRjogbGliL25vZGUvDQo+ID4+DQo+ID4+ICtQTVUgLSBFWFBFUklNRU5UQUwN Cj4gPj4gK006IFRvbWFzeiBEdXN6eW5za2kgPHRkdXN6eW5za2lAbWFydmVsbC5jb20+DQo+ID4+ ICtGOiBsaWIvcG11Lw0KPiA+PiArRjogYXBwL3Rlc3QvdGVzdF9wbXUqDQo+ID4+ICsNCj4gPj4N Cj4gPj4gICBUZXN0IEFwcGxpY2F0aW9ucw0KPiA+PiAgIC0tLS0tLS0tLS0tLS0tLS0tDQo+ID4+ IGRpZmYgLS1naXQgYS9hcHAvdGVzdC9tZXNvbi5idWlsZCBiL2FwcC90ZXN0L21lc29uLmJ1aWxk IGluZGV4DQo+ID4+IGYzNGQxOWUzYzMuLjZiNjFiN2ZjMzIgMTAwNjQ0DQo+ID4+IC0tLSBhL2Fw cC90ZXN0L21lc29uLmJ1aWxkDQo+ID4+ICsrKyBiL2FwcC90ZXN0L21lc29uLmJ1aWxkDQo+ID4+ IEBAIC0xMTEsNiArMTExLDcgQEAgdGVzdF9zb3VyY2VzID0gZmlsZXMoDQo+ID4+ICAgICAgICAg ICAndGVzdF9yZWNpcHJvY2FsX2RpdmlzaW9uX3BlcmYuYycsDQo+ID4+ICAgICAgICAgICAndGVz dF9yZWQuYycsDQo+ID4+ICAgICAgICAgICAndGVzdF9waWUuYycsDQo+ID4+ICsgICAgICAgICd0 ZXN0X3BtdS5jJywNCj4gPj4gICAgICAgICAgICd0ZXN0X3Jlb3JkZXIuYycsDQo+ID4+ICAgICAg ICAgICAndGVzdF9yaWIuYycsDQo+ID4+ICAgICAgICAgICAndGVzdF9yaWI2LmMnLA0KPiA+PiBA QCAtMjM5LDYgKzI0MCw3IEBAIGZhc3RfdGVzdHMgPSBbDQo+ID4+ICAgICAgICAgICBbJ2tuaV9h dXRvdGVzdCcsIGZhbHNlLCB0cnVlXSwNCj4gPj4gICAgICAgICAgIFsna3ZhcmdzX2F1dG90ZXN0 JywgdHJ1ZSwgdHJ1ZV0sDQo+ID4+ICAgICAgICAgICBbJ21lbWJlcl9hdXRvdGVzdCcsIHRydWUs IHRydWVdLA0KPiA+PiArICAgICAgICBbJ3BtdV9hdXRvdGVzdCcsIHRydWUsIHRydWVdLA0KPiA+ PiAgICAgICAgICAgWydwb3dlcl9jcHVmcmVxX2F1dG90ZXN0JywgZmFsc2UsIHRydWVdLA0KPiA+ PiAgICAgICAgICAgWydwb3dlcl9hdXRvdGVzdCcsIHRydWUsIHRydWVdLA0KPiA+PiAgICAgICAg ICAgWydwb3dlcl9rdm1fdm1fYXV0b3Rlc3QnLCBmYWxzZSwgdHJ1ZV0sIGRpZmYgLS1naXQNCj4g Pj4gYS9hcHAvdGVzdC90ZXN0X3BtdS5jIGIvYXBwL3Rlc3QvdGVzdF9wbXUuYyBuZXcgZmlsZSBt b2RlIDEwMDY0NCBpbmRleA0KPiA+PiAwMDAwMDAwMDAwLi5jMjU3NjM4ZThiDQo+ID4+IC0tLSAv ZGV2L251bGwNCj4gPj4gKysrIGIvYXBwL3Rlc3QvdGVzdF9wbXUuYw0KPiA+PiBAQCAtMCwwICsx LDYyIEBADQo+ID4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ ID4+ICsgKiBDb3B5cmlnaHQoQykgMjAyMyBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiA+ PiArICovDQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlICJ0ZXN0LmgiDQo+ID4+ICsNCj4gPj4gKyNp Zm5kZWYgUlRFX0VYRUNfRU5WX0xJTlVYDQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4g K3Rlc3RfcG11KHZvaWQpDQo+ID4+ICt7DQo+ID4+ICsJcHJpbnRmKCJwbXVfYXV0b3Rlc3Qgb25s eSBzdXBwb3J0ZWQgb24gTGludXgsIHNraXBwaW5nIHRlc3RcbiIpOw0KPiA+PiArCXJldHVybiBU RVNUX1NLSVBQRUQ7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gKyNlbHNlDQo+ID4+ICsNCj4gPj4g KyNpbmNsdWRlIDxydGVfcG11Lmg+DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3Rl c3RfcG11X3JlYWQodm9pZCkNCj4gPj4gK3sNCj4gPj4gKwljb25zdCBjaGFyICpuYW1lID0gTlVM TDsNCj4gPj4gKwlpbnQgdHJpZXMgPSAxMCwgZXZlbnQ7DQo+ID4+ICsJdWludDY0X3QgdmFsID0g MDsNCj4gPj4gKw0KPiA+PiArCWlmIChuYW1lID09IE5VTEwpIHsNCj4gPj4gKwkJcHJpbnRmKCJQ TVUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGFyY2hcbiIpOw0KPiA+PiArCQlyZXR1cm4gVEVTVF9T S0lQUEVEOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCWlmIChydGVfcG11X2luaXQoKSA8IDAp DQo+ID4+ICsJCXJldHVybiBURVNUX1NLSVBQRUQ7DQo+ID4+ICsNCj4gPj4gKwlldmVudCA9IHJ0 ZV9wbXVfYWRkX2V2ZW50KG5hbWUpOw0KPiA+PiArCXdoaWxlICh0cmllcy0tKQ0KPiA+PiArCQl2 YWwgKz0gcnRlX3BtdV9yZWFkKGV2ZW50KTsNCj4gPj4gKw0KPiA+PiArCXJ0ZV9wbXVfZmluaSgp Ow0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIHZhbCA/IFRFU1RfU1VDQ0VTUyA6IFRFU1RfRkFJTEVE OyB9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBzdHJ1Y3QgdW5pdF90ZXN0X3N1aXRlIHBtdV90ZXN0 cyA9IHsNCj4gPj4gKwkuc3VpdGVfbmFtZSA9ICJwbXUgYXV0b3Rlc3QiLA0KPiA+PiArCS5zZXR1 cCA9IE5VTEwsDQo+ID4+ICsJLnRlYXJkb3duID0gTlVMTCwNCj4gPj4gKwkudW5pdF90ZXN0X2Nh c2VzID0gew0KPiA+PiArCQlURVNUX0NBU0UodGVzdF9wbXVfcmVhZCksDQo+ID4+ICsJCVRFU1Rf Q0FTRVNfRU5EKCkNCj4gPj4gKwl9DQo+ID4+ICt9Ow0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50 DQo+ID4+ICt0ZXN0X3BtdSh2b2lkKQ0KPiA+PiArew0KPiA+PiArCXJldHVybiB1bml0X3Rlc3Rf c3VpdGVfcnVubmVyKCZwbXVfdGVzdHMpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICsjZW5kaWYg LyogUlRFX0VYRUNfRU5WX0xJTlVYICovDQo+ID4+ICsNCj4gPj4gK1JFR0lTVEVSX1RFU1RfQ09N TUFORChwbXVfYXV0b3Rlc3QsIHRlc3RfcG11KTsNCj4gPj4gZGlmZiAtLWdpdCBhL2RvYy9hcGkv ZG94eS1hcGktaW5kZXgubWQgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+ID4+IGluZGV4 IDJkZWVjN2VhMTkuLmE4ZTA0YTE5NWQgMTAwNjQ0DQo+ID4+IC0tLSBhL2RvYy9hcGkvZG94eS1h cGktaW5kZXgubWQNCj4gPj4gKysrIGIvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiA+PiBA QCAtMjIzLDcgKzIyMyw4IEBAIFRoZSBwdWJsaWMgQVBJIGhlYWRlcnMgYXJlIGdyb3VwZWQgYnkg dG9waWNzOg0KPiA+PiAgICAgW2xvZ10oQHJlZiBydGVfbG9nLmgpLA0KPiA+PiAgICAgW2Vycm5v XShAcmVmIHJ0ZV9lcnJuby5oKSwNCj4gPj4gICAgIFt0cmFjZV0oQHJlZiBydGVfdHJhY2UuaCks DQo+ID4+IC0gIFt0cmFjZV9wb2ludF0oQHJlZiBydGVfdHJhY2VfcG9pbnQuaCkNCj4gPj4gKyAg W3RyYWNlX3BvaW50XShAcmVmIHJ0ZV90cmFjZV9wb2ludC5oKSwgIFtwbXVdKEByZWYgcnRlX3Bt dS5oKQ0KPiA+Pg0KPiA+PiAgIC0gKiptaXNjKio6DQo+ID4+ICAgICBbRUFMIGNvbmZpZ10oQHJl ZiBydGVfZWFsLmgpLA0KPiA+PiBkaWZmIC0tZ2l0IGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmlu IGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluIGluZGV4DQo+ID4+IGU4NTk0MjYwOTkuLjM1MGI1 YThjOTQgMTAwNjQ0DQo+ID4+IC0tLSBhL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbg0KPiA+PiAr KysgYi9kb2MvYXBpL2RveHktYXBpLmNvbmYuaW4NCj4gPj4gQEAgLTYzLDYgKzYzLDcgQEAgSU5Q VVQgICAgICAgICAgICAgICAgICAgPSBAVE9QRElSQC9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1k IFwNCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wY2kgXA0K PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3BkdW1wIFwNCj4g Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9waXBlbGluZSBcDQo+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wbXUgXA0KPiA+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3BvcnQgXA0KPiA+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3Bvd2VyIFwNCj4gPj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9yYXdkZXYgXCBkaWZmIC0tZ2l0DQo+ ID4+IGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2ZpbGVfYXBwLnJzdA0KPiA+PiBiL2RvYy9n dWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4gPj4gaW5kZXggMTQyOTJkNGMyNS4u ODllMzhjZDMwMSAxMDA2NDQNCj4gPj4gLS0tIGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2Zp bGVfYXBwLnJzdA0KPiA+PiArKysgYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAu cnN0DQo+ID4+IEBAIC03LDYgKzcsMTggQEAgUHJvZmlsZSBZb3VyIEFwcGxpY2F0aW9uDQo+ID4+ ICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBtZXRob2RzIG9mIHByb2ZpbGluZyBE UERLIGFwcGxpY2F0aW9ucyBvbg0KPiA+PiAgIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLg0KPiA+ Pg0KPiA+PiArUGVyZm9ybWFuY2UgY291bnRlciBiYXNlZCBwcm9maWxpbmcNCj4gPj4gKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4+ICsNCj4gPj4gK01ham9yaXR5IG9m IGFyY2hpdGVjdHVyZXMgc3VwcG9ydCBzb21lIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAo UE1VKS4NCj4gPj4gK1N1Y2ggdW5pdCBwcm92aWRlcyBwcm9ncmFtbWFibGUgY291bnRlcnMgdGhh dCBtb25pdG9yIHNwZWNpZmljIGV2ZW50cy4NCj4gPj4gKw0KPiA+PiArRGlmZmVyZW50IHRvb2xz IGdhdGhlciB0aGF0IGluZm9ybWF0aW9uLCBsaWtlIGZvciBleGFtcGxlIHBlcmYuDQo+ID4+ICtI b3dldmVyLCBpbiBzb21lIHNjZW5hcmlvcyB3aGVuIENQVSBjb3JlcyBhcmUgaXNvbGF0ZWQgYW5k IHJ1bg0KPiA+PiArZGVkaWNhdGVkIHRhc2tzIGludGVycnVwdGluZyB0aG9zZSB0YXNrcyB3aXRo IHBlcmYgbWF5IGJlIHVuZGVzaXJhYmxlLg0KPiA+PiArDQo+ID4+ICtJbiBzdWNoIGNhc2VzLCBh biBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZSBQTVUgbGlicmFyeSB0byByZWFkIHN1Y2ggZXZlbnRz IHZpYQ0KPiA+YGBydGVfcG11X3JlYWQoKWBgLg0KPiA+PiArDQo+ID4+DQo+ID4+ICAgUHJvZmls aW5nIG9uIHg4Ng0KPiA+PiAgIC0tLS0tLS0tLS0tLS0tLS0NCj4gPj4gZGlmZiAtLWdpdCBhL2Rv Yy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjNfMDMucnN0DQo+ID4+IGIvZG9jL2d1aWRlcy9y ZWxfbm90ZXMvcmVsZWFzZV8yM18wMy5yc3QNCj4gPj4gaW5kZXggYWI5OThhNTM1Ny4uMjA2MjJl ZmU1OCAxMDA2NDQNCj4gPj4gLS0tIGEvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yM18w My5yc3QNCj4gPj4gKysrIGIvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yM18wMy5yc3QN Cj4gPj4gQEAgLTE0Nyw2ICsxNDcsMTMgQEAgTmV3IEZlYXR1cmVzDQo+ID4+ICAgICAqIEFkZGVk IHN1cHBvcnQgdG8gY2FwdHVyZSBwYWNrZXRzIGF0IGVhY2ggZ3JhcGggbm9kZSB3aXRoIHBhY2tl dCBtZXRhZGF0YSBhbmQNCj4gPj4gICAgICAgbm9kZSBuYW1lLg0KPiA+Pg0KPiA+PiArKiAqKkFk ZGVkIFBNVSBsaWJyYXJ5LioqDQo+ID4+ICsNCj4gPj4gKyAgQWRkZWQgYSBuZXcgcGVyZm9ybWFu Y2UgbW9uaXRvcmluZyB1bml0IChQTVUpIGxpYnJhcnkgd2hpY2ggYWxsb3dzDQo+ID4+ICsgYXBw bGljYXRpb25zICB0byBwZXJmb3JtIHNlbGYgbW9uaXRvcmluZyBhY3Rpdml0aWVzIHdpdGhvdXQg ZGVwZW5kaW5nIG9uIGV4dGVybmFsIHV0aWxpdGllcw0KPiA+bGlrZSBwZXJmLg0KPiA+PiArICBB ZnRlciBpbnRlZ3JhdGlvbiB3aXRoIDpkb2M6YC4uL3Byb2dfZ3VpZGUvdHJhY2VfbGliYCBkYXRh IGdhdGhlcmVkDQo+ID4+ICsgZnJvbSBoYXJkd2FyZSBjb3VudGVycyAgY2FuIGJlIHN0b3JlZCBp biBDVEYgZm9ybWF0IGZvciBmdXJ0aGVyIGFuYWx5c2lzLg0KPiA+PiArDQo+ID4+DQo+ID4+ICAg UmVtb3ZlZCBJdGVtcw0KPiA+PiAgIC0tLS0tLS0tLS0tLS0NCj4gPj4gZGlmZiAtLWdpdCBhL2xp Yi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZCBpbmRleA0KPiA+PiA0NTBjMDYxZDJiLi44 YTQyZDQ1ZDIwIDEwMDY0NA0KPiA+PiAtLS0gYS9saWIvbWVzb24uYnVpbGQNCj4gPj4gKysrIGIv bGliL21lc29uLmJ1aWxkDQo+ID4+IEBAIC0xMSw2ICsxMSw3IEBADQo+ID4+ICAgbGlicmFyaWVz ID0gWw0KPiA+PiAgICAgICAgICAgJ2t2YXJncycsICMgZWFsIGRlcGVuZHMgb24ga3ZhcmdzDQo+ ID4+ICAgICAgICAgICAndGVsZW1ldHJ5JywgIyBiYXNpYyBpbmZvIHF1ZXJ5aW5nDQo+ID4+ICsg ICAgICAgICdwbXUnLA0KPiA+PiAgICAgICAgICAgJ2VhbCcsICMgZXZlcnl0aGluZyBkZXBlbmRz IG9uIGVhbA0KPiA+PiAgICAgICAgICAgJ3JpbmcnLA0KPiA+PiAgICAgICAgICAgJ3JjdScsICMg cmN1IGRlcGVuZHMgb24gcmluZyBkaWZmIC0tZ2l0DQo+ID4+IGEvbGliL3BtdS9tZXNvbi5idWls ZCBiL2xpYi9wbXUvbWVzb24uYnVpbGQgbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPj4g MDAwMDAwMDAwMC4uYTQxNjBiNDk0ZQ0KPiA+PiAtLS0gL2Rldi9udWxsDQo+ID4+ICsrKyBiL2xp Yi9wbXUvbWVzb24uYnVpbGQNCj4gPj4gQEAgLTAsMCArMSwxMyBAQA0KPiA+PiArIyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICMgQ29weXJpZ2h0KEMpIDIwMjMgTWFydmVs bA0KPiA+PiArSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4+ICsNCj4gPj4gK2lmIG5vdCBpc19saW51 eA0KPiA+PiArICAgIGJ1aWxkID0gZmFsc2UNCj4gPj4gKyAgICByZWFzb24gPSAnb25seSBzdXBw b3J0ZWQgb24gTGludXgnDQo+ID4+ICsgICAgc3ViZGlyX2RvbmUoKQ0KPiA+PiArZW5kaWYNCj4g Pj4gKw0KPiA+PiAraW5jbHVkZXMgPSBbZ2xvYmFsX2luY10NCj4gPj4gKw0KPiA+PiArc291cmNl cyA9IGZpbGVzKCdydGVfcG11LmMnKQ0KPiA+PiAraGVhZGVycyA9IGZpbGVzKCdydGVfcG11Lmgn KQ0KPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9wbXVfcHJpdmF0ZS5oIGIvbGliL3BtdS9wbXVf cHJpdmF0ZS5oIG5ldyBmaWxlDQo+ID4+IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLmI5 ZjhjMWRkYzgNCj4gPj4gLS0tIC9kZXYvbnVsbA0KPiA+PiArKysgYi9saWIvcG11L3BtdV9wcml2 YXRlLmgNCj4gPj4gQEAgLTAsMCArMSwzMiBAQA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+PiArICogQ29weXJpZ2h0KGMpIDIwMjMgTWFydmVsbA0K PiA+PiArICovDQo+ID4+ICsNCj4gPj4gKyNpZm5kZWYgX1BNVV9QUklWQVRFX0hfDQo+ID4+ICsj ZGVmaW5lIF9QTVVfUFJJVkFURV9IXw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEFyY2hp dGVjdHVyZSBzcGVjaWZpYyBQTVUgaW5pdCBjYWxsYmFjay4NCj4gPj4gKyAqDQo+ID4+ICsgKiBA cmV0dXJuDQo+ID4+ICsgKiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBv dGhlcndpc2UuDQo+ID4+ICsgKi8NCj4gPj4gK2ludA0KPiA+PiArcG11X2FyY2hfaW5pdCh2b2lk KTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgUE1V IGNsZWFudXAgY2FsbGJhY2suDQo+ID4+ICsgKi8NCj4gPj4gK3ZvaWQNCj4gPj4gK3BtdV9hcmNo X2Zpbmkodm9pZCk7DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQXBwbHkgYXJjaGl0ZWN0 dXJlIHNwZWNpZmljIHNldHRpbmdzIHRvIGNvbmZpZyBiZWZvcmUgcGFzc2luZyBpdCB0byBzeXNj YWxsLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBjb25maWcNCj4gPj4gKyAqICAgQXJjaGl0 ZWN0dXJlIHNwZWNpZmljIGV2ZW50IGNvbmZpZ3VyYXRpb24uIENvbnN1bHQga2VybmVsIHNvdXJj ZXMgZm9yIGF2YWlsYWJsZSBvcHRpb25zLg0KPiA+PiArICovDQo+ID4+ICt2b2lkDQo+ID4+ICtw bXVfYXJjaF9maXh1cF9jb25maWcodWludDY0X3QgY29uZmlnWzNdKTsNCj4gPj4gKw0KPiA+PiAr I2VuZGlmIC8qIF9QTVVfUFJJVkFURV9IXyAqLw0KPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9y dGVfcG11LmMgYi9saWIvcG11L3J0ZV9wbXUuYyBuZXcgZmlsZSBtb2RlDQo+ID4+IDEwMDY0NCBp bmRleCAwMDAwMDAwMDAwLi45NTBmOTk5Y2I3DQo+ID4+IC0tLSAvZGV2L251bGwNCj4gPj4gKysr IGIvbGliL3BtdS9ydGVfcG11LmMNCj4gPj4gQEAgLTAsMCArMSw0NjAgQEANCj4gPj4gKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPj4gKyAqIENvcHlyaWdodChD KSAyMDIzIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4+ICsgKi8NCj4gPj4gKw0KPiA+ PiArI2luY2x1ZGUgPGN0eXBlLmg+DQo+ID4+ICsjaW5jbHVkZSA8ZGlyZW50Lmg+DQo+ID4+ICsj aW5jbHVkZSA8ZXJybm8uaD4NCj4gPj4gKyNpbmNsdWRlIDxyZWdleC5oPg0KPiA+PiArI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KPiA+PiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+PiArI2luY2x1ZGUg PHN5cy9pb2N0bC5oPg0KPiA+PiArI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQo+ID4+ICsjaW5jbHVk ZSA8c3lzL3F1ZXVlLmg+DQo+ID4+ICsjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4NCj4gPj4gKyNp bmNsdWRlIDx1bmlzdGQuaD4NCj4gPj4gKw0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4N Cj4gPj4gKyNpbmNsdWRlIDxydGVfcGVyX2xjb3JlLmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX3Bt dS5oPg0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9zcGlubG9jay5oPg0KPiA+PiArI2luY2x1ZGUgPHJ0 ZV90YWlscS5oPg0KPiA+PiArDQo+ID4+ICsjaW5jbHVkZSAicG11X3ByaXZhdGUuaCINCj4gPj4g Kw0KPiA+PiArI2RlZmluZSBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvc3lzL2J1cy9ldmVu dF9zb3VyY2UvZGV2aWNlcyINCj4gPg0KPiA+DQo+ID5JIHN1cHBvc2UgdGhhdCBwYXNzIChhcyB0 aGUgd2hvbGUgaW1wbGVtZW50YXRpb24pIGlzIGxpbnV4IHNwZWNpZmljPw0KPiA+SWYgc28sIHdv dWxkbid0IGl0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBpdCB1bmRlciBsaW51eCBzdWJkaXI/DQo+ID4N Cj4gDQo+IFRoZXJlIGFyZSBub3QgYW55IHBsYW5zIHRvIHN1cHBvcnQgdGhhdCBlbHNld2hlcmUg Y3VycmVudGx5IHNvIGZsYXQNCj4gZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBnb29kIGVub3VnaC4N Cj4gDQo+ID4+ICsNCj4gPj4gKyNkZWZpbmUgR0VOTUFTS19VTEwoaCwgbCkgKCh+MFVMTCAtICgx VUxMIDw8IChsKSkgKyAxKSAmICh+MFVMTCA+Pg0KPiA+PiArKCg2NCAtIDEgLSAoaCkpKSkpICNk ZWZpbmUgRklFTERfUFJFUChtLCB2KSAoKCh1aW50NjRfdCkodikgPDwNCj4gPj4gKyhfX2J1aWx0 aW5fZmZzbGwobSkgLSAxKSkgJiAobSkpDQo+ID4+ICsNCj4gPj4gK1JURV9ERUZJTkVfUEVSX0xD T1JFKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLCBfZXZlbnRfZ3JvdXApOw0KPiA+PiArc3Ry dWN0IHJ0ZV9wbXUgcnRlX3BtdTsNCj4gPg0KPiA+RG8gd2UgcmVhbGx5IG5lZWQgc3RydWN0IGRl Y2xhcmF0aW9uIGhlcmU/DQo+ID4NCj4gDQo+IFdoYXTigJlzIHRoZSBwcm9ibGVtIHdpdGggdGhp cyBwbGFjZW1lbnQgcHJlY2lzZWx5Pw0KDQpOb3QgYSBiaWcgZGVhbCwgYnV0IEl0IHNlZW1zIGV4 Y2Vzc2l2ZSBmb3IgbWUuDQpBcyBJIHVuZGVyc3RhbmQgeW91IGRvIGhhdmUgaW5jbHVkZSBqdXN0 IGFib3ZlIGZvciB0aGUgd2hvbGUgLmgNCnRoYXQgY29udGFpbnMgZGVmaW5pdGlvbiBvZiB0aGF0 IHN0cnVjdCBhbnl3YXkuICANCiANCj4gDQo+ID4NCj4gPj4gKy8qDQo+ID4+ICsgKiBGb2xsb3dp bmcgX19ydGVfd2VhayBmdW5jdGlvbnMgcHJvdmlkZSBkZWZhdWx0IG5vLW9wLg0KPiA+PiArQXJj aGl0ZWN0dXJlcyBzaG91bGQgb3ZlcnJpZGUgdGhlbSBpZg0KPiA+PiArICogbmVjZXNzYXJ5Lg0K PiA+PiArICovDQo+ID4+ICsNCj4gPj4gK2ludA0KPiA+PiArX19ydGVfd2VhayBwbXVfYXJjaF9p bml0KHZvaWQpDQo+ID4+ICt7DQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4g Pj4gK3ZvaWQNCj4gPj4gK19fcnRlX3dlYWsgcG11X2FyY2hfZmluaSh2b2lkKQ0KPiA+PiArew0K PiA+PiArfQ0KPiA+PiArDQo+ID4+ICt2b2lkDQo+ID4+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2Zp eHVwX2NvbmZpZyh1aW50NjRfdCBfX3J0ZV91bnVzZWQgY29uZmlnWzNdKSB7IH0NCj4gPj4gKw0K PiA+PiArc3RhdGljIGludA0KPiA+PiArZ2V0X3Rlcm1fZm9ybWF0KGNvbnN0IGNoYXIgKm5hbWUs IGludCAqbnVtLCB1aW50NjRfdCAqbWFzaykgew0KPiA+PiArCWNoYXIgcGF0aFtQQVRIX01BWF07 DQo+ID4+ICsJY2hhciAqY29uZmlnID0gTlVMTDsNCj4gPj4gKwlpbnQgaGlnaCwgbG93LCByZXQ7 DQo+ID4+ICsJRklMRSAqZnA7DQo+ID4+ICsNCj4gPj4gKwkqbnVtID0gKm1hc2sgPSAwOw0KPiA+ PiArCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFU SCAiLyVzL2Zvcm1hdC8lcyIsIHJ0ZV9wbXUubmFtZSwgbmFtZSk7DQo+ID4+ICsJZnAgPSBmb3Bl bihwYXRoLCAiciIpOw0KPiA+PiArCWlmIChmcCA9PSBOVUxMKQ0KPiA+PiArCQlyZXR1cm4gLWVy cm5vOw0KPiA+PiArDQo+ID4+ICsJZXJybm8gPSAwOw0KPiA+PiArCXJldCA9IGZzY2FuZihmcCwg IiVtW146XTolZC0lZCIsICZjb25maWcsICZsb3csICZoaWdoKTsNCj4gPj4gKwlpZiAocmV0IDwg Mikgew0KPiA+PiArCQlyZXQgPSAtRU5PREFUQTsNCj4gPj4gKwkJZ290byBvdXQ7DQo+ID4+ICsJ fQ0KPiA+PiArCWlmIChlcnJubykgew0KPiA+PiArCQlyZXQgPSAtZXJybm87DQo+ID4+ICsJCWdv dG8gb3V0Ow0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCWlmIChyZXQgPT0gMikNCj4gPj4gKwkJ aGlnaCA9IGxvdzsNCj4gPj4gKw0KPiA+PiArCSptYXNrID0gR0VOTUFTS19VTEwoaGlnaCwgbG93 KTsNCj4gPj4gKwkvKiBMYXN0IGRpZ2l0IHNob3VsZCBiZSBbMDEyXS4gSWYgbGFzdCBkaWdpdCBp cyBtaXNzaW5nIDAgaXMgaW1wbGllZC4gKi8NCj4gPj4gKwkqbnVtID0gY29uZmlnW3N0cmxlbihj b25maWcpIC0gMV07DQo+ID4+ICsJKm51bSA9IGlzZGlnaXQoKm51bSkgPyAqbnVtIC0gJzAnIDog MDsNCj4gPj4gKw0KPiA+PiArCXJldCA9IDA7DQo+ID4+ICtvdXQ6DQo+ID4+ICsJZnJlZShjb25m aWcpOw0KPiA+PiArCWZjbG9zZShmcCk7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gcmV0Ow0KPiA+ PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtwYXJzZV9ldmVudChjaGFyICpi dWYsIHVpbnQ2NF90IGNvbmZpZ1szXSkgew0KPiA+PiArCWNoYXIgKnRva2VuLCAqdGVybTsNCj4g Pj4gKwlpbnQgbnVtLCByZXQsIHZhbDsNCj4gPj4gKwl1aW50NjRfdCBtYXNrOw0KPiA+PiArDQo+ ID4+ICsJY29uZmlnWzBdID0gY29uZmlnWzFdID0gY29uZmlnWzJdID0gMDsNCj4gPj4gKw0KPiA+ PiArCXRva2VuID0gc3RydG9rKGJ1ZiwgIiwiKTsNCj4gPj4gKwl3aGlsZSAodG9rZW4pIHsNCj4g Pj4gKwkJZXJybm8gPSAwOw0KPiA+PiArCQkvKiA8dGVybT49PHZhbHVlPiAqLw0KPiA+PiArCQly ZXQgPSBzc2NhbmYodG9rZW4sICIlbVtePV09JWkiLCAmdGVybSwgJnZhbCk7DQo+ID4+ICsJCWlm IChyZXQgPCAxKQ0KPiA+PiArCQkJcmV0dXJuIC1FTk9EQVRBOw0KPiA+PiArCQlpZiAoZXJybm8p DQo+ID4+ICsJCQlyZXR1cm4gLWVycm5vOw0KPiA+PiArCQlpZiAocmV0ID09IDEpDQo+ID4+ICsJ CQl2YWwgPSAxOw0KPiA+PiArDQo+ID4+ICsJCXJldCA9IGdldF90ZXJtX2Zvcm1hdCh0ZXJtLCAm bnVtLCAmbWFzayk7DQo+ID4+ICsJCWZyZWUodGVybSk7DQo+ID4+ICsJCWlmIChyZXQpDQo+ID4+ ICsJCQlyZXR1cm4gcmV0Ow0KPiA+PiArDQo+ID4+ICsJCWNvbmZpZ1tudW1dIHw9IEZJRUxEX1BS RVAobWFzaywgdmFsKTsNCj4gPj4gKwkJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiwiKTsNCj4gPj4g Kwl9DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3Rh dGljIGludA0KPiA+PiArZ2V0X2V2ZW50X2NvbmZpZyhjb25zdCBjaGFyICpuYW1lLCB1aW50NjRf dCBjb25maWdbM10pIHsNCj4gPj4gKwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbQlVGU0laXTsN Cj4gPj4gKwlGSUxFICpmcDsNCj4gPj4gKwlpbnQgcmV0Ow0KPiA+PiArDQo+ID4+ICsJc25wcmlu dGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZl bnRzLyVzIiwgcnRlX3BtdS5uYW1lLCBuYW1lKTsNCj4gPj4gKwlmcCA9IGZvcGVuKHBhdGgsICJy Iik7DQo+ID4+ICsJaWYgKGZwID09IE5VTEwpDQo+ID4+ICsJCXJldHVybiAtZXJybm87DQo+ID4+ ICsNCj4gPj4gKwlyZXQgPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBmcCk7DQo+ID4+ICsJ aWYgKHJldCA9PSAwKSB7DQo+ID4+ICsJCWZjbG9zZShmcCk7DQo+ID4+ICsNCj4gPj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4+ICsJfQ0KPiA+PiArCWZjbG9zZShmcCk7DQo+ID4+ICsJYnVmW3Jl dF0gPSAnXDAnOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIHBhcnNlX2V2ZW50KGJ1ZiwgY29uZmln KTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArZG9fcGVyZl9ldmVu dF9vcGVuKHVpbnQ2NF90IGNvbmZpZ1szXSwgaW50IGdyb3VwX2ZkKSB7DQo+ID4+ICsJc3RydWN0 IHBlcmZfZXZlbnRfYXR0ciBhdHRyID0gew0KPiA+PiArCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg cGVyZl9ldmVudF9hdHRyKSwNCj4gPj4gKwkJLnR5cGUgPSBQRVJGX1RZUEVfUkFXLA0KPiA+PiAr CQkuZXhjbHVkZV9rZXJuZWwgPSAxLA0KPiA+PiArCQkuZXhjbHVkZV9odiA9IDEsDQo+ID4+ICsJ CS5kaXNhYmxlZCA9IDEsDQo+ID4+ICsJfTsNCj4gPj4gKw0KPiA+PiArCXBtdV9hcmNoX2ZpeHVw X2NvbmZpZyhjb25maWcpOw0KPiA+PiArDQo+ID4+ICsJYXR0ci5jb25maWcgPSBjb25maWdbMF07 DQo+ID4+ICsJYXR0ci5jb25maWcxID0gY29uZmlnWzFdOw0KPiA+PiArCWF0dHIuY29uZmlnMiA9 IGNvbmZpZ1syXTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiBzeXNjYWxsKFNZU19wZXJmX2V2ZW50 X29wZW4sICZhdHRyLCAwLCAtMSwgZ3JvdXBfZmQsIDApOyB9DQo+ID4+ICsNCj4gPj4gK3N0YXRp YyBpbnQNCj4gPj4gK29wZW5fZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91 cCkgew0KPiA+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudDsNCj4gPj4gKwl1aW50NjRf dCBjb25maWdbM107DQo+ID4+ICsJaW50IG51bSA9IDAsIHJldDsNCj4gPj4gKw0KPiA+PiArCS8q IGdyb3VwIGxlYWRlciBnZXRzIGNyZWF0ZWQgZmlyc3QsIHdpdGggZmQgPSAtMSAqLw0KPiA+PiAr CWdyb3VwLT5mZHNbMF0gPSAtMTsNCj4gPj4gKw0KPiA+PiArCVRBSUxRX0ZPUkVBQ0goZXZlbnQs ICZydGVfcG11LmV2ZW50X2xpc3QsIG5leHQpIHsNCj4gPj4gKwkJcmV0ID0gZ2V0X2V2ZW50X2Nv bmZpZyhldmVudC0+bmFtZSwgY29uZmlnKTsNCj4gPj4gKwkJaWYgKHJldCkNCj4gPj4gKwkJCWNv bnRpbnVlOw0KPiA+PiArDQo+ID4+ICsJCXJldCA9IGRvX3BlcmZfZXZlbnRfb3Blbihjb25maWcs IGdyb3VwLT5mZHNbMF0pOw0KPiA+PiArCQlpZiAocmV0ID09IC0xKSB7DQo+ID4+ICsJCQlyZXQg PSAtZXJybm87DQo+ID4+ICsJCQlnb3RvIG91dDsNCj4gPj4gKwkJfQ0KPiA+PiArDQo+ID4+ICsJ CWdyb3VwLT5mZHNbZXZlbnQtPmluZGV4XSA9IHJldDsNCj4gPj4gKwkJbnVtKys7DQo+ID4+ICsJ fQ0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICtvdXQ6DQo+ID4+ICsJZm9yICgtLW51 bTsgbnVtID49IDA7IG51bS0tKSB7DQo+ID4+ICsJCWNsb3NlKGdyb3VwLT5mZHNbbnVtXSk7DQo+ ID4+ICsJCWdyb3VwLT5mZHNbbnVtXSA9IC0xOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArDQo+ ID4+ICsJcmV0dXJuIHJldDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+ PiArbW1hcF9ldmVudHMoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwKSB7DQo+ID4+ ICsJbG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOw0KPiA+PiArCXVuc2ln bmVkIGludCBpOw0KPiA+PiArCXZvaWQgKmFkZHI7DQo+ID4+ICsJaW50IHJldDsNCj4gPj4gKw0K PiA+PiArCWZvciAoaSA9IDA7IGkgPCBydGVfcG11Lm51bV9ncm91cF9ldmVudHM7IGkrKykgew0K PiA+PiArCQlhZGRyID0gbW1hcCgwLCBwYWdlX3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwg Z3JvdXAtPmZkc1tpXSwgMCk7DQo+ID4+ICsJCWlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsNCj4g Pj4gKwkJCXJldCA9IC1lcnJubzsNCj4gPj4gKwkJCWdvdG8gb3V0Ow0KPiA+PiArCQl9DQo+ID4+ ICsNCj4gPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBhZGRyOw0KPiA+PiArCQlpZiAoIWdy b3VwLT5tbWFwX3BhZ2VzW2ldLT5jYXBfdXNlcl9yZHBtYykgew0KPiA+PiArCQkJcmV0ID0gLUVQ RVJNOw0KPiA+PiArCQkJZ290byBvdXQ7DQo+ID4+ICsJCX0NCj4gPj4gKwl9DQo+ID4+ICsNCj4g Pj4gKwlyZXR1cm4gMDsNCj4gPj4gK291dDoNCj4gPj4gKwlmb3IgKDsgaTsgaS0tKSB7DQo+ID4+ ICsJCW11bm1hcChncm91cC0+bW1hcF9wYWdlc1tpIC0gMV0sIHBhZ2Vfc2l6ZSk7DQo+ID4+ICsJ CWdyb3VwLT5tbWFwX3BhZ2VzW2kgLSAxXSA9IE5VTEw7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ ICsJcmV0dXJuIHJldDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHZvaWQNCj4gPj4g K2NsZWFudXBfZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCkgew0KPiA+ PiArCXVuc2lnbmVkIGludCBpOw0KPiA+PiArDQo+ID4+ICsJaWYgKGdyb3VwLT5mZHNbMF0gIT0g LTEpDQo+ID4+ICsJCWlvY3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0RJU0FCTEUs IFBFUkZfSU9DX0ZMQUdfR1JPVVApOw0KPiA+PiArDQo+ID4+ICsJZm9yIChpID0gMDsgaSA8IHJ0 ZV9wbXUubnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7DQo+ID4+ICsJCWlmIChncm91cC0+bW1hcF9w YWdlc1tpXSkgew0KPiA+PiArCQkJbXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2ldLCBzeXNjb25m KF9TQ19QQUdFX1NJWkUpKTsNCj4gPj4gKwkJCWdyb3VwLT5tbWFwX3BhZ2VzW2ldID0gTlVMTDsN Cj4gPj4gKwkJfQ0KPiA+PiArDQo+ID4+ICsJCWlmIChncm91cC0+ZmRzW2ldICE9IC0xKSB7DQo+ ID4+ICsJCQljbG9zZShncm91cC0+ZmRzW2ldKTsNCj4gPj4gKwkJCWdyb3VwLT5mZHNbaV0gPSAt MTsNCj4gPj4gKwkJfQ0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCWdyb3VwLT5lbmFibGVkID0g ZmFsc2U7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK2ludA0KPiA+PiArX19ydGVfcG11X2VuYWJs ZV9ncm91cCh2b2lkKQ0KPiA+PiArew0KPiA+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3Vw ICpncm91cCA9ICZSVEVfUEVSX0xDT1JFKF9ldmVudF9ncm91cCk7DQo+ID4+ICsJaW50IHJldDsN Cj4gPj4gKw0KPiA+PiArCWlmIChydGVfcG11Lm51bV9ncm91cF9ldmVudHMgPT0gMCkNCj4gPj4g KwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4+ICsNCj4gPj4gKwlyZXQgPSBvcGVuX2V2ZW50cyhncm91 cCk7DQo+ID4+ICsJaWYgKHJldCkNCj4gPj4gKwkJZ290byBvdXQ7DQo+ID4+ICsNCj4gPj4gKwly ZXQgPSBtbWFwX2V2ZW50cyhncm91cCk7DQo+ID4+ICsJaWYgKHJldCkNCj4gPj4gKwkJZ290byBv dXQ7DQo+ID4+ICsNCj4gPj4gKwlpZiAoaW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9J T0NfUkVTRVQsIFBFUkZfSU9DX0ZMQUdfR1JPVVApID09IC0xKSB7DQo+ID4+ICsJCXJldCA9IC1l cnJubzsNCj4gPj4gKwkJZ290byBvdXQ7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJaWYgKGlv Y3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0VOQUJMRSwgUEVSRl9JT0NfRkxBR19H Uk9VUCkgPT0gLTEpIHsNCj4gPj4gKwkJcmV0ID0gLWVycm5vOw0KPiA+PiArCQlnb3RvIG91dDsN Cj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlydGVfc3BpbmxvY2tfbG9jaygmcnRlX3BtdS5sb2Nr KTsNCj4gPj4gKwlUQUlMUV9JTlNFUlRfVEFJTCgmcnRlX3BtdS5ldmVudF9ncm91cF9saXN0LCBn cm91cCwgbmV4dCk7DQo+ID4+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmcnRlX3BtdS5sb2NrKTsN Cj4gPj4gKwlncm91cC0+ZW5hYmxlZCA9IHRydWU7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsN Cj4gPj4gKw0KPiA+PiArb3V0Og0KPiA+PiArCWNsZWFudXBfZXZlbnRzKGdyb3VwKTsNCj4gPj4g Kw0KPiA+PiArCXJldHVybiByZXQ7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQN Cj4gPj4gK3NjYW5fcG11cyh2b2lkKQ0KPiA+PiArew0KPiA+PiArCWNoYXIgcGF0aFtQQVRIX01B WF07DQo+ID4+ICsJc3RydWN0IGRpcmVudCAqZGVudDsNCj4gPj4gKwljb25zdCBjaGFyICpuYW1l Ow0KPiA+PiArCURJUiAqZGlycDsNCj4gPj4gKw0KPiA+PiArCWRpcnAgPSBvcGVuZGlyKEVWRU5U X1NPVVJDRV9ERVZJQ0VTX1BBVEgpOw0KPiA+PiArCWlmIChkaXJwID09IE5VTEwpDQo+ID4+ICsJ CXJldHVybiAtZXJybm87DQo+ID4+ICsNCj4gPj4gKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRp cnApKSkgew0KPiA+PiArCQluYW1lID0gZGVudC0+ZF9uYW1lOw0KPiA+PiArCQlpZiAobmFtZVsw XSA9PSAnLicpDQo+ID4+ICsJCQljb250aW51ZTsNCj4gPj4gKw0KPiA+PiArCQkvKiBzeXNmcyBl bnRyeSBzaG91bGQgZWl0aGVyIGNvbnRhaW4gY3B1cyBvciBiZSBhIGNwdSAqLw0KPiA+PiArCQlp ZiAoIXN0cmNtcChuYW1lLCAiY3B1IikpDQo+ID4+ICsJCQlicmVhazsNCj4gPj4gKw0KPiA+PiAr CQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEgg Ii8lcy9jcHVzIiwgbmFtZSk7DQo+ID4+ICsJCWlmIChhY2Nlc3MocGF0aCwgRl9PSykgPT0gMCkN Cj4gPj4gKwkJCWJyZWFrOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCWlmIChkZW50KSB7DQo+ ID4+ICsJCXJ0ZV9wbXUubmFtZSA9IHN0cmR1cChuYW1lKTsNCj4gPj4gKwkJaWYgKHJ0ZV9wbXUu bmFtZSA9PSBOVUxMKSB7DQo+ID4+ICsJCQljbG9zZWRpcihkaXJwKTsNCj4gPj4gKw0KPiA+PiAr CQkJcmV0dXJuIC1FTk9NRU07DQo+ID4+ICsJCX0NCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlj bG9zZWRpcihkaXJwKTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiBydGVfcG11Lm5hbWUgPyAwIDog LUVOT0RFVjsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHN0cnVjdCBydGVfcG11X2V2 ZW50ICoNCj4gPj4gK25ld19ldmVudChjb25zdCBjaGFyICpuYW1lKQ0KPiA+PiArew0KPiA+PiAr CXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudDsNCj4gPj4gKw0KPiA+PiArCWV2ZW50ID0gY2Fs bG9jKDEsIHNpemVvZigqZXZlbnQpKTsNCj4gPj4gKwlpZiAoZXZlbnQgPT0gTlVMTCkNCj4gPj4g KwkJZ290byBvdXQ7DQo+ID4+ICsNCj4gPj4gKwlldmVudC0+bmFtZSA9IHN0cmR1cChuYW1lKTsN Cj4gPj4gKwlpZiAoZXZlbnQtPm5hbWUgPT0gTlVMTCkgew0KPiA+PiArCQlmcmVlKGV2ZW50KTsN Cj4gPj4gKwkJZXZlbnQgPSBOVUxMOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArb3V0Og0KPiA+ PiArCXJldHVybiBldmVudDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHZvaWQNCj4g Pj4gK2ZyZWVfZXZlbnQoc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50KSB7DQo+ID4+ICsJZnJl ZShldmVudC0+bmFtZSk7DQo+ID4+ICsJZnJlZShldmVudCk7DQo+ID4+ICt9DQo+ID4+ICsNCj4g Pj4gK2ludA0KPiA+PiArcnRlX3BtdV9hZGRfZXZlbnQoY29uc3QgY2hhciAqbmFtZSkNCj4gPj4g K3sNCj4gPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+ID4+ICsJY2hhciBwYXRo W1BBVEhfTUFYXTsNCj4gPj4gKw0KPiA+PiArCWlmIChydGVfcG11Lm5hbWUgPT0gTlVMTCkNCj4g Pj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4+ICsNCj4gPj4gKwlpZiAocnRlX3BtdS5udW1fZ3Jv dXBfZXZlbnRzICsgMSA+PSBNQVhfTlVNX0dST1VQX0VWRU5UUykNCj4gPj4gKwkJcmV0dXJuIC1F Tk9TUEM7DQo+ID4+ICsNCj4gPj4gKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEVWRU5U X1NPVVJDRV9ERVZJQ0VTX1BBVEggIi8lcy9ldmVudHMvJXMiLCBydGVfcG11Lm5hbWUsIG5hbWUp Ow0KPiA+PiArCWlmIChhY2Nlc3MocGF0aCwgUl9PSykpDQo+ID4+ICsJCXJldHVybiAtRU5PREVW Ow0KPiA+PiArDQo+ID4+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUuZXZlbnRfbGlz dCwgbmV4dCkgew0KPiA+PiArCQlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgbmFtZSkpDQo+ID4+ ICsJCQlyZXR1cm4gZXZlbnQtPmluZGV4Ow0KPiA+PiArCQljb250aW51ZTsNCj4gPj4gKwl9DQo+ ID4+ICsNCj4gPj4gKwlldmVudCA9IG5ld19ldmVudChuYW1lKTsNCj4gPj4gKwlpZiAoZXZlbnQg PT0gTlVMTCkNCj4gPj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4+ICsNCj4gPj4gKwlldmVudC0+ aW5kZXggPSBydGVfcG11Lm51bV9ncm91cF9ldmVudHMrKzsNCj4gPj4gKwlUQUlMUV9JTlNFUlRf VEFJTCgmcnRlX3BtdS5ldmVudF9saXN0LCBldmVudCwgbmV4dCk7DQo+ID4+ICsNCj4gPj4gKwly ZXR1cm4gZXZlbnQtPmluZGV4Ow0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtpbnQNCj4gPj4gK3J0 ZV9wbXVfaW5pdCh2b2lkKQ0KPiA+PiArew0KPiA+PiArCWludCByZXQ7DQo+ID4+ICsNCj4gPj4g KwkvKiBBbGxvdyBjYWxsaW5nIGluaXQgZnJvbSBtdWx0aXBsZSBjb250ZXh0cyB3aXRoaW4gYSBz aW5nbGUgdGhyZWFkLiBUaGlzIHNpbXBsaWZpZXMNCj4gPj4gKwkgKiByZXNvdXJjZSBtYW5hZ2Vt ZW50IGEgYml0IGUuZyBpbiBjYXNlIGZhc3QtcGF0aCB0cmFjZXBvaW50IGhhcyBhbHJlYWR5IGJl ZW4gZW5hYmxlZA0KPiA+PiArCSAqIHZpYSBjb21tYW5kIGxpbmUgYnV0IGFwcGxpY2F0aW9uIGRv ZXNuJ3QgY2FyZSBlbm91Z2ggYW5kIHBlcmZvcm1zIGluaXQvZmluaSBhZ2Fpbi4NCj4gPj4gKwkg Ki8NCj4gPj4gKwlpZiAocnRlX3BtdS5pbml0aWFsaXplZCAhPSAwKSB7DQo+ID4+ICsJCXJ0ZV9w bXUuaW5pdGlhbGl6ZWQrKzsNCj4gPj4gKwkJcmV0dXJuIDA7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ ID4+ICsJcmV0ID0gc2Nhbl9wbXVzKCk7DQo+ID4+ICsJaWYgKHJldCkNCj4gPj4gKwkJZ290byBv dXQ7DQo+ID4+ICsNCj4gPj4gKwlyZXQgPSBwbXVfYXJjaF9pbml0KCk7DQo+ID4+ICsJaWYgKHJl dCkNCj4gPj4gKwkJZ290byBvdXQ7DQo+ID4+ICsNCj4gPj4gKwlUQUlMUV9JTklUKCZydGVfcG11 LmV2ZW50X2xpc3QpOw0KPiA+PiArCVRBSUxRX0lOSVQoJnJ0ZV9wbXUuZXZlbnRfZ3JvdXBfbGlz dCk7DQo+ID4+ICsJcnRlX3NwaW5sb2NrX2luaXQoJnJ0ZV9wbXUubG9jayk7DQo+ID4+ICsJcnRl X3BtdS5pbml0aWFsaXplZCA9IDE7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK291 dDoNCj4gPj4gKwlmcmVlKHJ0ZV9wbXUubmFtZSk7DQo+ID4+ICsJcnRlX3BtdS5uYW1lID0gTlVM TDsNCj4gPj4gKw0KPiA+PiArCXJldHVybiByZXQ7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3Zv aWQNCj4gPj4gK3J0ZV9wbXVfZmluaSh2b2lkKQ0KPiA+PiArew0KPiA+PiArCXN0cnVjdCBydGVf cG11X2V2ZW50X2dyb3VwICpncm91cCwgKnRtcF9ncm91cDsNCj4gPj4gKwlzdHJ1Y3QgcnRlX3Bt dV9ldmVudCAqZXZlbnQsICp0bXBfZXZlbnQ7DQo+ID4+ICsNCj4gPj4gKwkvKiBjbGVhbnVwIG9u Y2UgaW5pdCBjb3VudCBkcm9wcyB0byB6ZXJvICovDQo+ID4+ICsJaWYgKHJ0ZV9wbXUuaW5pdGlh bGl6ZWQgPT0gMCB8fCAtLXJ0ZV9wbXUuaW5pdGlhbGl6ZWQgIT0gMCkNCj4gPj4gKwkJcmV0dXJu Ow0KPiA+PiArDQo+ID4+ICsJUlRFX1RBSUxRX0ZPUkVBQ0hfU0FGRShldmVudCwgJnJ0ZV9wbXUu ZXZlbnRfbGlzdCwgbmV4dCwgdG1wX2V2ZW50KSB7DQo+ID4+ICsJCVRBSUxRX1JFTU9WRSgmcnRl X3BtdS5ldmVudF9saXN0LCBldmVudCwgbmV4dCk7DQo+ID4+ICsJCWZyZWVfZXZlbnQoZXZlbnQp Ow0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCVJURV9UQUlMUV9GT1JFQUNIX1NBRkUoZ3JvdXAs ICZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIG5leHQsIHRtcF9ncm91cCkgew0KPiA+PiArCQlU QUlMUV9SRU1PVkUoJnJ0ZV9wbXUuZXZlbnRfZ3JvdXBfbGlzdCwgZ3JvdXAsIG5leHQpOw0KPiA+ PiArCQljbGVhbnVwX2V2ZW50cyhncm91cCk7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJcG11 X2FyY2hfZmluaSgpOw0KPiA+PiArCWZyZWUocnRlX3BtdS5uYW1lKTsNCj4gPj4gKwlydGVfcG11 Lm5hbWUgPSBOVUxMOw0KPiA+PiArCXJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cyA9IDA7DQo+ID4+ ICt9DQo+ID4+IGRpZmYgLS1naXQgYS9saWIvcG11L3J0ZV9wbXUuaCBiL2xpYi9wbXUvcnRlX3Bt dS5oIG5ldyBmaWxlIG1vZGUNCj4gPj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjZiNjY0YzMz MzYNCj4gPj4gLS0tIC9kZXYvbnVsbA0KPiA+PiArKysgYi9saWIvcG11L3J0ZV9wbXUuaA0KPiA+ PiBAQCAtMCwwICsxLDIxMiBAQA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0zLUNsYXVzZQ0KPiA+PiArICogQ29weXJpZ2h0KGMpIDIwMjMgTWFydmVsbA0KPiA+PiArICov DQo+ID4+ICsNCj4gPj4gKyNpZm5kZWYgX1JURV9QTVVfSF8NCj4gPj4gKyNkZWZpbmUgX1JURV9Q TVVfSF8NCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAZmlsZQ0KPiA+PiArICoNCj4gPj4g KyAqIFBNVSBldmVudCB0cmFjaW5nIG9wZXJhdGlvbnMNCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlz IGZpbGUgZGVmaW5lcyBnZW5lcmljIEFQSSBhbmQgdHlwZXMgbmVjZXNzYXJ5IHRvIHNldHVwIFBN VSBhbmQNCj4gPj4gKyAqIHJlYWQgc2VsZWN0ZWQgY291bnRlcnMgaW4gcnVudGltZS4NCj4gPj4g KyAqLw0KPiA+PiArDQo+ID4+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPj4gK2V4dGVybiAiQyIg ew0KPiA+PiArI2VuZGlmDQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50 Lmg+DQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+ID4+ICsjaW5jbHVk ZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX2NvbW1vbi5o Pg0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9jb21wYXQuaD4NCj4gPj4gKyNpbmNsdWRlIDxydGVfc3Bp bmxvY2suaD4NCj4gPj4gKw0KPiA+PiArLyoqIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBpbiBh IGdyb3VwICovICNkZWZpbmUNCj4gPj4gK01BWF9OVU1fR1JPVVBfRVZFTlRTIDgNCj4gPj4gKw0K PiA+PiArLyoqDQo+ID4+ICsgKiBBIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgZ3JvdXAgb2YgZXZl bnRzLg0KPiA+PiArICovDQo+ID4+ICtzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCB7DQo+ID4+ ICsJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICptbWFwX3BhZ2VzW01BWF9OVU1fR1JPVVBf RVZFTlRTXTsgLyoqPCBhcnJheSBvZiB1c2VyIHBhZ2VzICovDQo+ID4+ICsJaW50IGZkc1tNQVhf TlVNX0dST1VQX0VWRU5UU107IC8qKjwgYXJyYXkgb2YgZXZlbnQgZGVzY3JpcHRvcnMgKi8NCj4g Pj4gKwlib29sIGVuYWJsZWQ7IC8qKjwgdHJ1ZSBpZiBncm91cCB3YXMgZW5hYmxlZCBvbiBwYXJ0 aWN1bGFyIGxjb3JlICovDQo+ID4+ICsJVEFJTFFfRU5UUlkocnRlX3BtdV9ldmVudF9ncm91cCkg bmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH0NCj4gPj4gK19fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBldmVu dC4NCj4gPj4gKyAqLw0KPiA+PiArc3RydWN0IHJ0ZV9wbXVfZXZlbnQgew0KPiA+PiArCWNoYXIg Km5hbWU7IC8qKjwgbmFtZSBvZiBhbiBldmVudCAqLw0KPiA+PiArCXVuc2lnbmVkIGludCBpbmRl eDsgLyoqPCBldmVudCBpbmRleCBpbnRvIGZkcy9tbWFwX3BhZ2VzICovDQo+ID4+ICsJVEFJTFFf RU5UUlkocnRlX3BtdV9ldmVudCkgbmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH07DQo+ID4+ICsN Cj4gPj4gKy8qKg0KPiA+PiArICogQSBQTVUgc3RhdGUgY29udGFpbmVyLg0KPiA+PiArICovDQo+ ID4+ICtzdHJ1Y3QgcnRlX3BtdSB7DQo+ID4+ICsJY2hhciAqbmFtZTsgLyoqPCBuYW1lIG9mIGNv cmUgUE1VIGxpc3RlZCB1bmRlciAvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyAqLw0KPiA+ PiArCXJ0ZV9zcGlubG9ja190IGxvY2s7IC8qKjwgc2VyaWFsaXplIGFjY2VzcyB0byBldmVudCBn cm91cCBsaXN0ICovDQo+ID4+ICsJVEFJTFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIGV2 ZW50X2dyb3VwX2xpc3Q7IC8qKjwgbGlzdCBvZiBldmVudCBncm91cHMgKi8NCj4gPj4gKwl1bnNp Z25lZCBpbnQgbnVtX2dyb3VwX2V2ZW50czsgLyoqPCBudW1iZXIgb2YgZXZlbnRzIGluIGEgZ3Jv dXAgKi8NCj4gPj4gKwlUQUlMUV9IRUFEKCwgcnRlX3BtdV9ldmVudCkgZXZlbnRfbGlzdDsgLyoq PCBsaXN0IG9mIG1hdGNoaW5nIGV2ZW50cyAqLw0KPiA+PiArCXVuc2lnbmVkIGludCBpbml0aWFs aXplZDsgLyoqPCBpbml0aWFsaXphdGlvbiBjb3VudGVyICovIH07DQo+ID4+ICsNCj4gPj4gKy8q KiBsY29yZSBldmVudCBncm91cCAqLw0KPiA+PiArUlRFX0RFQ0xBUkVfUEVSX0xDT1JFKHN0cnVj dCBydGVfcG11X2V2ZW50X2dyb3VwLCBfZXZlbnRfZ3JvdXApOw0KPiA+PiArDQo+ID4+ICsvKiog UE1VIHN0YXRlIGNvbnRhaW5lciAqLw0KPiA+PiArZXh0ZXJuIHN0cnVjdCBydGVfcG11IHJ0ZV9w bXU7DQo+ID4+ICsNCj4gPj4gKy8qKiBFYWNoIGFyY2hpdGVjdHVyZSBzdXBwb3J0aW5nIFBNVSBu ZWVkcyB0byBwcm92aWRlIGl0cyBvd24gdmVyc2lvbg0KPiA+PiArKi8gI2lmbmRlZiBydGVfcG11 X3BtY19yZWFkICNkZWZpbmUgcnRlX3BtdV9wbWNfcmVhZChpbmRleCkgKHsgMDsgfSkNCj4gPj4g KyNlbmRpZg0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3YXJuaW5nDQo+ID4+ICsgKiBA YiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UN Cj4gPj4gKyAqDQo+ID4+ICsgKiBSZWFkIFBNVSBjb3VudGVyLg0KPiA+PiArICoNCj4gPj4gKyAq IEB3YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGlyZWN0bHkuDQo+ID4+ICsgKg0K PiA+PiArICogQHBhcmFtIHBjDQo+ID4+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIG1tYXBwZWQgdXNl ciBwYWdlLg0KPiA+PiArICogQHJldHVybg0KPiA+PiArICogICBDb3VudGVyIHZhbHVlIHJlYWQg ZnJvbSBoYXJkd2FyZS4NCj4gPj4gKyAqLw0KPiA+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdWludDY0X3QNCj4gPj4gK19fcnRlX3BtdV9yZWFkX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2V2 ZW50X21tYXBfcGFnZSAqcGMpIHsNCj4gPj4gKwl1aW50NjRfdCB3aWR0aCwgb2Zmc2V0Ow0KPiA+ PiArCXVpbnQzMl90IHNlcSwgaW5kZXg7DQo+ID4+ICsJaW50NjRfdCBwbWM7DQo+ID4+ICsNCj4g Pj4gKwlmb3IgKDs7KSB7DQo+ID4+ICsJCXNlcSA9IHBjLT5sb2NrOw0KPiA+PiArCQlydGVfY29t cGlsZXJfYmFycmllcigpOw0KPiA+DQo+ID5BcmUgeW91IHN1cmUgdGhhdCBjb21waWxlcl9iYXJy aWVyKCkgaXMgZW5vdWdoIGhlcmU/DQo+ID5PbiBzb21lIGFyY2hzIENQVSBpdHNlbGYgaGFzIGZy ZWVkb20gdG8gcmUtb3JkZXIgcmVhZHMuDQo+ID5PciBJIGFtIG1pc3Npbmcgc29tZXRoaW5nIG9i dmlvdXMgaGVyZT8NCj4gPg0KPiANCj4gSXQncyBhIG1hdHRlciBvZiBub3Qga2VlcGluZyBvbGQg c3R1ZmYgY2FjaGVkIGluIHJlZ2lzdGVycw0KPiBhbmQgbWFraW5nIHN1cmUgdGhhdCB3ZSBoYXZl IHR3byByZWFkcyBvZiBsb2NrLiBDUFUgcmVvcmRlcmluZw0KPiB3b24ndCBkbyBhbnkgaGFybSBo ZXJlLg0KDQpTb3JyeSwgSSBkaWRuJ3QgZ2V0IHlvdSBoZXJlOg0KU3VwcG9zZSBDUFUgd2lsbCBy ZS1vcmRlciByZWFkcyBhbmQgd2lsbCByZWFkIGxvY2sgKmFmdGVyKiBpbmRleCBvciBvZmZzZXQg dmFsdWUuDQpXb3VsZG4ndCBpdCBtZWFuIHRoYXQgaW4gdGhhdCBjYXNlIGluZGV4IGFuZC9vciBv ZmZzZXQgY2FuIGNvbnRhaW4gb2xkL2ludmFsaWQgdmFsdWVzPyANCiANCj4gDQo+ID4+ICsJCWlu ZGV4ID0gcGMtPmluZGV4Ow0KPiA+PiArCQlvZmZzZXQgPSBwYy0+b2Zmc2V0Ow0KPiA+PiArCQl3 aWR0aCA9IHBjLT5wbWNfd2lkdGg7DQo+ID4+ICsNCj4gPj4gKwkJLyogaW5kZXggc2V0IHRvIDAg bWVhbnMgdGhhdCBwYXJ0aWN1bGFyIGNvdW50ZXIgY2Fubm90IGJlIHVzZWQgKi8NCj4gPj4gKwkJ aWYgKGxpa2VseShwYy0+Y2FwX3VzZXJfcmRwbWMgJiYgaW5kZXgpKSB7DQo+ID4+ICsJCQlwbWMg PSBydGVfcG11X3BtY19yZWFkKGluZGV4IC0gMSk7DQo+ID4+ICsJCQlwbWMgPDw9IDY0IC0gd2lk dGg7DQo+ID4+ICsJCQlwbWMgPj49IDY0IC0gd2lkdGg7DQo+ID4+ICsJCQlvZmZzZXQgKz0gcG1j Ow0KPiA+PiArCQl9DQo+ID4+ICsNCj4gPj4gKwkJcnRlX2NvbXBpbGVyX2JhcnJpZXIoKTsNCj4g Pj4gKw0KPiA+PiArCQlpZiAobGlrZWx5KHBjLT5sb2NrID09IHNlcSkpDQo+ID4+ICsJCQlyZXR1 cm4gb2Zmc2V0Ow0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0K PiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3YXJuaW5nDQo+ID4+ICsgKiBAYiBFWFBFUklN RU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPj4gKyAq DQo+ID4+ICsgKiBFbmFibGUgZ3JvdXAgb2YgZXZlbnRzIG9uIHRoZSBjYWxsaW5nIGxjb3JlLg0K PiA+PiArICoNCj4gPj4gKyAqIEB3YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGly ZWN0bHkuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiArICogICAwIGluIGNhc2Ug b2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPiA+PiArICovDQo+ID4+ICtf X3J0ZV9leHBlcmltZW50YWwNCj4gPj4gK2ludA0KPiA+PiArX19ydGVfcG11X2VuYWJsZV9ncm91 cCh2b2lkKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAd2FybmluZw0KPiA+PiArICog QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl DQo+ID4+ICsgKg0KPiA+PiArICogSW5pdGlhbGl6ZSBQTVUgbGlicmFyeS4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAd2FybmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRpcmVjdGx5Lg0KPiA+ PiArICoNCj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nlc3Ms IG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4gPj4gKyAqLw0KPiA+PiArX19ydGVfZXhwZXJp bWVudGFsDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9wbXVfaW5pdCh2b2lkKTsNCj4gPj4gKw0KPiA+ PiArLyoqDQo+ID4+ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4+ICsgKg0KPiA+PiArICog RmluYWxpemUgUE1VIGxpYnJhcnkuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBQTVUgY291 bnRlcnMgYXJlIG5vIGxvbmdlciBiZWluZyByZWFkLg0KPiA+PiArICovDQo+ID4+ICtfX3J0ZV9l eHBlcmltZW50YWwNCj4gPj4gK3ZvaWQNCj4gPj4gK3J0ZV9wbXVfZmluaSh2b2lkKTsNCj4gPj4g Kw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFM OiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4+ICsgKg0KPiA+ PiArICogQWRkIGV2ZW50IHRvIHRoZSBncm91cCBvZiBlbmFibGVkIGV2ZW50cy4NCj4gPj4gKyAq DQo+ID4+ICsgKiBAcGFyYW0gbmFtZQ0KPiA+PiArICogICBOYW1lIG9mIGFuIGV2ZW50IGxpc3Rl ZCB1bmRlciAvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcy9wbXUvZXZlbnRzLg0KPiA+PiAr ICogQHJldHVybg0KPiA+PiArICogICBFdmVudCBpbmRleCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5l Z2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4gPj4gKyAqLw0KPiA+PiArX19ydGVfZXhwZXJpbWVu dGFsDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIgKm5hbWUp Ow0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3YXJuaW5nDQo+ID4+ICsgKiBAYiBFWFBF UklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPj4g KyAqDQo+ID4+ICsgKiBSZWFkIGhhcmR3YXJlIGNvdW50ZXIgY29uZmlndXJlZCB0byBjb3VudCBv Y2N1cnJlbmNlcyBvZiBhbiBldmVudC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gaW5kZXgN Cj4gPj4gKyAqICAgSW5kZXggb2YgYW4gZXZlbnQgdG8gYmUgcmVhZC4NCj4gPj4gKyAqIEByZXR1 cm4NCj4gPj4gKyAqICAgRXZlbnQgdmFsdWUgcmVhZCBmcm9tIHJlZ2lzdGVyLiBJbiBjYXNlIG9m IGVycm9ycyBvciBsYWNrIG9mIHN1cHBvcnQNCj4gPj4gKyAqICAgMCBpcyByZXR1cm5lZC4gSW4g b3RoZXIgd29yZHMsIHN0cmVhbSBvZiB6ZXJvcyBpbiBhIHRyYWNlIGZpbGUNCj4gPj4gKyAqICAg aW5kaWNhdGVzIHByb2JsZW0gd2l0aCByZWFkaW5nIHBhcnRpY3VsYXIgUE1VIGV2ZW50IHJlZ2lz dGVyLg0KPiA+PiArICovDQo+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVpbnQ2NF90DQo+ID4+ICtydGVfcG11X3JlYWQodW5zaWduZWQg aW50IGluZGV4KQ0KPiA+PiArew0KPiA+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpn cm91cCA9ICZSVEVfUEVSX0xDT1JFKF9ldmVudF9ncm91cCk7DQo+ID4+ICsJaW50IHJldDsNCj4g Pj4gKw0KPiA+PiArCWlmICh1bmxpa2VseSghcnRlX3BtdS5pbml0aWFsaXplZCkpDQo+ID4+ICsJ CXJldHVybiAwOw0KPiA+PiArDQo+ID4+ICsJaWYgKHVubGlrZWx5KCFncm91cC0+ZW5hYmxlZCkp IHsNCj4gPj4gKwkJcmV0ID0gX19ydGVfcG11X2VuYWJsZV9ncm91cCgpOw0KPiA+PiArCQlpZiAo cmV0KQ0KPiA+PiArCQkJcmV0dXJuIDA7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJaWYgKHVu bGlrZWx5KGluZGV4ID49IHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cykpDQo+ID4+ICsJCXJldHVy biAwOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIF9fcnRlX3BtdV9yZWFkX3VzZXJwYWdlKGdyb3Vw LT5tbWFwX3BhZ2VzW2luZGV4XSk7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gKyNpZmRlZiBfX2Nw bHVzcGx1cw0KPiA+PiArfQ0KPiA+PiArI2VuZGlmDQo+ID4+ICsNCj4gPj4gKyNlbmRpZiAvKiBf UlRFX1BNVV9IXyAqLw0KPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS92ZXJzaW9uLm1hcCBiL2xp Yi9wbXUvdmVyc2lvbi5tYXAgbmV3IGZpbGUgbW9kZQ0KPiA+PiAxMDA2NDQgaW5kZXggMDAwMDAw MDAwMC4uMzlhNGYyNzljMQ0KPiA+PiAtLS0gL2Rldi9udWxsDQo+ID4+ICsrKyBiL2xpYi9wbXUv dmVyc2lvbi5tYXANCj4gPj4gQEAgLTAsMCArMSwxNSBAQA0KPiA+PiArRFBES18yMyB7DQo+ID4+ ICsJbG9jYWw6ICo7DQo+ID4+ICt9Ow0KPiA+PiArDQo+ID4+ICtFWFBFUklNRU5UQUwgew0KPiA+ PiArCWdsb2JhbDoNCj4gPj4gKw0KPiA+PiArCV9fcnRlX3BtdV9lbmFibGVfZ3JvdXA7DQo+ID4+ ICsJcGVyX2xjb3JlX19ldmVudF9ncm91cDsNCj4gPj4gKwlydGVfcG11Ow0KPiA+PiArCXJ0ZV9w bXVfYWRkX2V2ZW50Ow0KPiA+PiArCXJ0ZV9wbXVfZmluaTsNCj4gPj4gKwlydGVfcG11X2luaXQ7 DQo+ID4+ICsJcnRlX3BtdV9yZWFkOw0KPiA+PiArfTsNCg0K