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 94E23A00C4; Sat, 30 Jul 2022 00:00:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B70F4014F; Sat, 30 Jul 2022 00:00:25 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 3B1F84003F for ; Sat, 30 Jul 2022 00:00:22 +0200 (CEST) Received: from fraeml714-chm.china.huawei.com (unknown [172.18.147.201]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4LvhGT73CRz67FSP; Sat, 30 Jul 2022 05:58:09 +0800 (CST) Received: from fraeml712-chm.china.huawei.com (10.206.15.61) by fraeml714-chm.china.huawei.com (10.206.15.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Sat, 30 Jul 2022 00:00:21 +0200 Received: from fraeml712-chm.china.huawei.com ([10.206.15.61]) by fraeml712-chm.china.huawei.com ([10.206.15.61]) with mapi id 15.01.2375.024; Sat, 30 Jul 2022 00:00:21 +0200 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "Konstantin Ananyev" , "dev@dpdk.org" , Bruce Richardson CC: Jan Viktorin , Ruifeng Wang , David Christensen , "Stanislaw Kardach" Subject: RE: [RFC v2] non-temporal memcpy Thread-Topic: [RFC v2] non-temporal memcpy Thread-Index: AdifYjmzwv8JvkFhT0yj+PrUQl+y2QAQTHNwAN90EwAAAaH6gAAF35igAAtj7lAACZD7QA== Date: Fri, 29 Jul 2022 22:00:21 +0000 Message-ID: <750f172a82014660b16e434a722f04d9@huawei.com> References: <98CBD80474FA8B44BF855DF32C47DC35D871D4@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35D871DB@smartserver.smartshare.dk> <262c214b-7870-a221-2621-6684dce42823@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D871E6@smartserver.smartshare.dk> <2c646d01-14d0-e5cb-2d7c-50c8456fc3e5@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D8720C@smartserver.smartshare.dk> <24a6aafd01534dc0b75105f1356de574@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35D8720F@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D8720F@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.195.246.146] 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 DQoNCj4gPiA+ID4gPj4+PiBIaSBNb3J0ZW4sDQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+Pj4g VGhpcyBSRkMgcHJvcG9zZXMgYSBzZXQgb2YgZnVuY3Rpb25zIG9wdGltaXplZCBmb3Igbm9uLQ0K PiA+IHRlbXBvcmFsDQo+ID4gPiA+ID4+Pj4gbWVtb3J5IGNvcHkuDQo+ID4gPiA+ID4+Pj4+DQo+ ID4gPiA+ID4+Pj4+IEF0IHRoaXMgc3RhZ2UsIEkgYW0gYXNraW5nIGZvciBmZWVkYmFjayBvbiB0 aGUgY29uY2VwdC4NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pj4gQXBwbGljYXRpb25zIHNv bWV0aW1lcyBkYXRhIHRvIGFub3RoZXIgbWVtb3J5IGxvY2F0aW9uLCB3aGljaA0KPiA+IGlzDQo+ ID4gPiA+ID4+IG9ubHkNCj4gPiA+ID4gPj4+PiB1c2VkDQo+ID4gPiA+ID4+Pj4+IG11Y2ggbGF0 ZXIuDQo+ID4gPiA+ID4+Pj4+IEluIHRoaXMgY2FzZSwgaXQgaXMgaW5lZmZpY2llbnQgdG8gcG9s bHV0ZSB0aGUgZGF0YSBjYWNoZQ0KPiA+IHdpdGgNCj4gPiA+ID4gdGhlDQo+ID4gPiA+ID4+Pj4g Y29waWVkDQo+ID4gPiA+ID4+Pj4+IGRhdGEuDQo+ID4gPiA+ID4+Pj4+DQo+ID4gPiA+ID4+Pj4+ IEFuIGV4YW1wbGUgdXNlIGNhc2UgKG9yaWdpbmF0aW5nIGZyb20gYSByZWFsIGxpZmUNCj4gPiBh cHBsaWNhdGlvbik6DQo+ID4gPiA+ID4+Pj4+IENvcHlpbmcgZmlsdGVyZWQgcGFja2V0cywgb3Ig dGhlIGZpcnN0IHBhcnQgb2YgdGhlbSwgaW50byBhDQo+ID4gPiA+IGNhcHR1cmUNCj4gPiA+ID4g Pj4+PiBidWZmZXINCj4gPiA+ID4gPj4+Pj4gZm9yIG9mZmxpbmUgYW5hbHlzaXMuDQo+ID4gPiA+ ID4+Pj4+DQo+ID4gPiA+ID4+Pj4+IFRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyB0 byBhY2hpZXZlIGEgcGVyZm9ybWFuY2UNCj4gPiBnYWluDQo+ID4gPiA+IGJ5DQo+ID4gPiA+ID4+ Pj4gbm90DQo+ID4gPiA+ID4+Pj4+IHBvbGx1dGluZyB0aGUgY2FjaGUgd2hlbiBjb3B5aW5nIGRh dGEuDQo+ID4gPiA+ID4+Pj4+IEFsdGhvdWdoIHRoZSB0aHJvdWdocHV0IG1heSBiZSBpbXByb3Zl ZCBieSBmdXJ0aGVyDQo+ID4gb3B0aW1pemF0aW9uLA0KPiA+ID4gPiBJDQo+ID4gPiA+ID4+IGRv DQo+ID4gPiA+ID4+Pj4gbm90DQo+ID4gPiA+ID4+Pj4+IGNvbnNpZGVyIHRocm91Z3B1dCBvcHRp bWl6YXRpb24gcmVsZXZhbnQgaW5pdGlhbGx5Lg0KPiA+ID4gPiA+Pj4+Pg0KPiA+ID4gPiA+Pj4+ PiBUaGUgeDg2IG5vbi10ZW1wb3JhbCBsb2FkIGluc3RydWN0aW9ucyBoYXZlIDE2IGJ5dGUgYWxp Z25tZW50DQo+ID4gPiA+ID4+Pj4+IHJlcXVpcmVtZW50cyBbMV0sIHdoaWxlIEFSTSBub24tdGVt cG9yYWwgbG9hZCBpbnN0cnVjdGlvbnMNCj4gPiBhcmUNCj4gPiA+ID4gPj4+PiBhdmFpbGFibGUg d2l0aA0KPiA+ID4gPiA+Pj4+PiA0IGJ5dGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBbMl0uDQo+ ID4gPiA+ID4+Pj4+IEJvdGggcGxhdGZvcm1zIG9mZmVyIG5vbi10ZW1wb3JhbCBzdG9yZSBpbnN0 cnVjdGlvbnMgd2l0aCA0DQo+ID4gYnl0ZQ0KPiA+ID4gPiA+Pj4+IGFsaWdubWVudA0KPiA+ID4g PiA+Pj4+PiByZXF1aXJlbWVudHMuDQo+ID4gPiA+ID4+Pj4+DQo+ID4gPiA+ID4+Pj4+IEluIGFk ZGl0aW9uIHRvIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHdpdGhvdXQgYW55IGFsaWdubWVudA0KPiA+ ID4gPiA+Pj4+IHJlcXVpcmVtZW50cywgd2UNCj4gPiA+ID4gPj4+Pj4gYWxzbyBwcm92aWRlIGZ1 bmN0aW9ucyBmb3IgcmVzcGVjdGl2bHkgMTYgYW5kIDQgYnl0ZSBhbGlnbmVkDQo+ID4gPiA+IGFj Y2Vzcw0KPiA+ID4gPiA+Pj4+IGZvcg0KPiA+ID4gPiA+Pj4+PiBwZXJmb3JtYW5jZSBwdXJwb3Nl cy4NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pj4gVGhlIGZ1bmN0aW9uIG5hbWVzIHJlc2Vt YmxlIHN0YW5kYXJkIEMgbGlicmFyeSBmdW5jdGlvbg0KPiA+IG5hbWVzLA0KPiA+ID4gPiBidXQN Cj4gPiA+ID4gPj4+PiB0aGVpcg0KPiA+ID4gPiA+Pj4+PiBzaWduYXR1cmVzIGFyZSBpbnRlbnRp b25hbGx5IGRpZmZlcmVudC4gTm8gbmVlZCB0byBkcmFnDQo+ID4gbGVnYWN5DQo+ID4gPiA+IGlu dG8NCj4gPiA+ID4gPj4+PiBpdC4NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pj4gTkI6IERv bid0IGNvbW1lbnQgb24gc3BhY2VzIGZvciBpbmRlbnRhdGlvbjsgYSBwYXRjaCB3aWxsDQo+ID4g Zm9sbG93DQo+ID4gPiA+ID4+IERQREsNCj4gPiA+ID4gPj4+PiBjb2RpbmcNCj4gPiA+ID4gPj4+ Pj4gc3R5bGUgYW5kIHVzZSBUQUIuDQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+Pg0KPiA+ID4g PiA+Pj4+IEkgdGhpbmsgdGhlcmUgd2VyZSBkaXNjdXNzaW9ucyBpbiBvdGhlciBkaXJlY3Rpb24g LSByZW1vdmUNCj4gPiA+ID4gPj4gcnRlX21lbWNweSgpDQo+ID4gPiA+ID4+Pj4gY29tcGxldGVs eSBhbmQgdXNlIG1lbWNweSgpIGluc3RlYWQuLi4NCj4gPiA+ID4gPj4+DQo+ID4gPiA+ID4+PiBZ ZXMsIHRoZSBoaWdobHkgb3B0aW1pemVkIHJ0ZV9tZW1jcHkoKSBpbXBsZW1lbnRhdGlvbiBvZg0K PiA+IG1lbWNweSgpDQo+ID4gPiA+IGhhcw0KPiA+ID4gPiA+PiBiZWNvbWUgb2Jzb2xldGUsIG5v dyB0aGF0IG1vZGVybiBjb21waWxlcnMgcHJvdmlkZSBhbiBlZmZpY2llbnQNCj4gPiA+ID4gPj4g bWVtY3B5KCkgaW1wbGVtZW50YXRpb24uDQo+ID4gPiA+ID4+Pg0KPiA+ID4gPiA+Pj4gSXQncyBh biBleGNlbGxlbnQgcmVmZXJlbmNlLCBiZWNhdXNlIHdlIHNob3VsZCBsZWFybiBmcm9tIGl0LA0K PiA+IGFuZA0KPiA+ID4gPiA+PiBhdm9pZCBpbnRyb2R1Y2luZyBzaW1pbGFyIG1pc3Rha2VzIHdp dGggbm9uLXRlbXBvcmFsIG1lbWNweS4NCj4gPiA+ID4gPj4+DQo+ID4gPiA+ID4+Pj4gQnV0IGlm IHdlIGhhdmUgYSBnb29kIHVzZSBjYXNlIGZvciB0aGF0LCB0aGVuIEkgYW0gcG9zaXRpdmUgaW4N Cj4gPiA+ID4gPj4+PiBwcmluY2lwbGUuDQo+ID4gPiA+ID4+Pg0KPiA+ID4gPiA+Pj4gVGhlIHN0 YW5kYXJkIEMgbGlicmFyeSBkb2Vzbid0IG9mZmVyIG5vbi10ZW1wb3JhbCBtZW1jcHkoKSwgc28N Cj4gPiB3ZQ0KPiA+ID4gPiA+PiBuZWVkIHRvIGltcGxlbWVudCBpdCBvdXJzZWx2ZXMuDQo+ID4g PiA+ID4+Pg0KPiA+ID4gPiA+Pj4+IFRob3VnaCBJIHRoaW5rIHdlIG5lZWQgYSBjbGVhciB1c2Ut Y2FzZSB3aXRoaW4gZHBkayBmb3IgaXQNCj4gPiA+ID4gPj4+PiB0byBkZW1vbnN0cmF0ZSBwZXJm b21hbmNlIGdhaW4uDQo+ID4gPiA+ID4+Pg0KPiA+ID4gPiA+Pj4gVGhlIHBlcmZvcm1hbmNlIGdh aW4gaXMgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSBkYXRhIGNhY2hlLiBEUERLDQo+ID4gPiA+ID4+ IGV4YW1wbGUgYXBwbGljYXRpb25zLCBsaWtlIGwzZndkLCBhcmUgcHJvYmFibHkgdG9vIHByaW1p dGl2ZSB0bw0KPiA+ID4gPiBtZWFzdXJlDQo+ID4gPiA+ID4+IGFueSBiZW5lZml0IGluIHRoaXMg cmVnYXJkLg0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4gPj4+PiBQcm9iYWJseSBjb3B5aW5nIHBhY2tl dHMgd2l0aGluIHBkdW1wIGxpYiwgb3IgZXhhbXBsZXMvZG1hLiBvcg0KPiA+IC4uLg0KPiA+ID4g PiA+Pj4NCj4gPiA+ID4gPj4+IEdvb2QgcG9pbnQgLSB0aGUgbmV3IGZ1bmN0aW9ucyBzaG91bGQg YmUgdXNlZCBzb21ld2hlcmUgd2l0aGluDQo+ID4gPiA+IERQREsuDQo+ID4gPiA+ID4+IEZvciB0 aGlzIHB1cnBvc2UsIEkgd2lsbCBsb29rIGludG8gbW9kaWZ5aW5nIHJ0ZV9wa3RtYnVmX2NvcHko KSwNCj4gPiA+ID4gd2hpY2gNCj4gPiA+ID4gPj4gaXMgdXNlZCBieSBwZHVtcF9jb3B5KCksIHRv IHVzZSBub24tdGVtcG9yYWwgY29weWluZyBvZiB0aGUNCj4gPiBwYWNrZXQNCj4gPiA+ID4gPj4g ZGF0YS4NCj4gPiA+ID4gPj4+DQo+ID4gPiA+ID4+Pj4gQW5vdGhlciB0aG91Z2h0IC0gZG8gd2Ug cmVhbGx5IG5lZWQgYSBzZXBhcmF0ZSBpbmxpbmUgZnVuY3Rpb24NCj4gPiBmb3INCj4gPiA+ID4g Pj4gZWFjaA0KPiA+ID4gPiA+Pj4+IGZsYXZvdXI/DQo+ID4gPiA+ID4+Pj4gTWlnaHQgYmUganVz dCBvbmUgbm9uLWlubGluZSBydGVfbWVtY3B5X250KGRzdCwgc3JjLCBzaXplLA0KPiA+IGZsYWdz KSwNCj4gPiA+ID4gPj4+PiB3aGVyZSBmbGFncyBjb3VsZCBiZSBjb21iaW5hdGlvbiBvZiBOVF9T UkMsIE5UX0RTVCwgYW5kIGtlZXANCj4gPiA+ID4gPj4gYWxpZ25tZW50DQo+ID4gPiA+ID4+Pj4g ZGV0ZWN0aW9uL2RlY2lzaW9ucyB0byBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uPw0KPiA+ID4g PiA+Pj4NCj4gPiA+ID4gPj4+IFRoYW5rIHlvdSBmb3IgdGhlIGZlZWRiYWNrLCBLb25zdGFudGlu Lg0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4gPj4+IE15IGFuc3dlciB0byB0aGlzIHN1Z2dlc3Rpb24g Z2V0cyBhIGxpdHRsZSBsb25nd2luZGVkLi4uDQo+ID4gPiA+ID4+Pg0KPiA+ID4gPiA+Pj4gTG9v a2luZyBhdCB0aGUgRFBESyBwY2FwbmcgbGlicmFyeSwgaXQgY29waWVzIGEgNCBieXRlIGFsaWdu ZWQNCj4gPiA+ID4gPj4gbWV0YWRhdGEgc3RydWN0dXJlIHNpemVkIDI4IGJ5dGUuIFNvIGl0IGNh biBkbyB3aXRoIDQgYnl0ZQ0KPiA+IGFsaWduZWQNCj4gPiA+ID4gPj4gZnVuY3Rpb25zLg0KPiA+ ID4gPiA+Pj4NCj4gPiA+ID4gPj4+IE91ciBhcHBsaWNhdGlvbiBjYW4gY2FwdHVyZSBwYWNrZXRz IHN0YXJ0aW5nIGF0IHRoZSBJUCBoZWFkZXIsDQo+ID4gPiA+IHdoaWNoDQo+ID4gPiA+ID4+IGlz IG9mZnNldCBieSAxNCBieXRlIChFdGhlcm5ldCBoZWFkZXIgc2l6ZSkgZnJvbSB0aGUgcGFja2V0 DQo+ID4gYnVmZmVyLA0KPiA+ID4gPiBzbw0KPiA+ID4gPiA+PiBpdCByZXF1aXJlcyAyIGJ5dGUg YWxpZ25tZW50LiBBbmQgdGh1cywgcmVxdWlyaW5nIDQgYnl0ZQ0KPiA+IGFsaWdubWVudA0KPiA+ ID4gPiBpcw0KPiA+ID4gPiA+PiBub3QgYWNjZXB0YWJsZS4NCj4gPiA+ID4gPj4+DQo+ID4gPiA+ ID4+PiBPdXIgYXBwbGljYXRpb24gdXNlcyAxNiBieXRlIGFsaWdubWVudCBpbiB0aGUgY2FwdHVy ZSBidWZmZXINCj4gPiBhcmVhLA0KPiA+ID4gPiA+PiBhbmQgY2FuIGJlbmVmaXQgZnJvbSAxNiBi eXRlIGFsaWduZWQgZnVuY3Rpb25zLiBGdXJ0aGVybW9yZSwgeDg2DQo+ID4gPiA+ID4+IHByb2Nl c3NvcnMgcmVxdWlyZSAxNiBieXRlIGFsaWdubWVudCBmb3Igbm9uLXRlbXBvcmFsIGxvYWQNCj4g PiA+ID4gPj4gaW5zdHJ1Y3Rpb25zLCBzbyBJIHRoaW5rIGEgMTYgYnl0ZSBhbGlnbmVkIG5vbi10 ZW1wb3JhbCBtZW1jcHkNCj4gPiA+ID4gZnVuY3Rpb24NCj4gPiA+ID4gPj4gc2hvdWxkIGJlIG9m ZmVyZWQuDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IFllcywgeDg2IG5lZWRz IDE2QiBhbGlnbm1lbnQgZm9yIE5UIGxvYWQvc3RvcmVzDQo+ID4gPiA+ID4+IEJ1dCB0aGF0J3Mg c3VwcG9zZWQgdG8gYmUgYXJjaCBzcGVjaWZpYyBsaW1pdGF0aW9uLA0KPiA+ID4gPiA+PiB0aGF0 IHdlIHByb2JhYmx5IHdhbnQgdG8gaGlkZSwgbm8/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBBZ3Jl ZS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+PiBJbnNpZGUgdGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBh bGlnbm1lbnQgb2YgYm90aCBzcmMgYW5kIGRzdA0KPiA+ID4gPiA+PiBhbmQgZGVjaWRlIHNob3Vs ZCBpdCB1c2UgTlQgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgb3IganVzdA0KPiA+ID4gPiA+PiBk byBub3JtYWwgY29weS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFllcywgSSdtIGV4cGVyaW1lbnRp bmcgd2l0aCB0aGUgeDg2IGlubGluZSBmdW5jdGlvbiBzaG93biBiZWxvdy4NCj4gPiBBbmQNCj4g PiA+ID4gaG9wZWZ1bGx5LCB3aXRoIHNvbWUgImV4dGVybiBpbmxpbmUiIG9yIG90aGVyIG1hZ2lj LCBJIGNhbiBoaWRlIHRoZQ0KPiA+ID4gPiBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIGluIHRo ZSBhcmNoIHNwZWNpZmljIGhlYWRlcnMsIGFuZCBvbmx5DQo+ID4gZXhwb3NlDQo+ID4gPiA+IHRo ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBvZiBydGVfbWVtY3B5X250KCkgaW4gdGhlIGNvbW1vbiBo ZWFkZXIuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24gdGhl IHg4NiBpbXBsZW1lbnRhdGlvbiAtIHdoZW4gSSdtDQo+ID4gc2F0aXNmaWVkDQo+ID4gPiA+IHdp dGggdGhhdCwgSSdsbCBsb29rIGludG8gaG93IHRvIGhpZGUgdGhlIGltcGxlbWVudGF0aW9ucyBp biB0aGUNCj4gPiBhcmNoDQo+ID4gPiA+IHNwZWNpZmljIGhlYWRlciBmaWxlcywgYW5kIG9ubHkg ZXhwb3NlIHRoZSBjb21tb24gZnVuY3Rpb24NCj4gPiBkZWNsYXJhdGlvbg0KPiA+ID4gPiBpbiB0 aGUgZ2VuZXJpYyBoZWFkZXIgZmlsZSBhbHNvIHVzZWQgZm9yIGRvY3VtZW50YXRpb24uIEkgd29y a3MgZm9yDQo+ID4gPiA+IHJ0ZV9tZW1jcHkoKSwgc28gSSBjYW4gcHJvYmFibHkgZmluZCB0aGUg d2F5IHRvIGRvIGl0IHRoZXJlLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gLyoNCj4gPiA+ID4gPiAg ICogTm9uLVRlbXBvcmFsIE1lbW9yeSBPcGVyYXRpb25zIEZsYWdzLg0KPiA+ID4gPiA+ICAgKi8N Cj4gPiA+ID4gPg0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTkFfTUFTSyAgKFVJ TlQ2NF9DKDB4RkUpIDw8IDApICAgLyoqDQo+ID4gTGVuZ3RoDQo+ID4gPiA+IGFsaWdubWVudCBt YXNrLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjJBICAgICAgKFVJTlQ2 NF9DKDIpIDw8IDApICAgICAgLyoqDQo+ID4gTGVuZ3RoIGlzDQo+ID4gPiA+IDIgYnl0ZSBhbGln bmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjRBICAgICAgKFVJTlQ2 NF9DKDQpIDw8IDApICAgICAgLyoqDQo+ID4gTGVuZ3RoIGlzDQo+ID4gPiA+IDQgYnl0ZSBhbGln bmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjhBICAgICAgKFVJTlQ2 NF9DKDgpIDw8IDApICAgICAgLyoqDQo+ID4gTGVuZ3RoIGlzDQo+ID4gPiA+IDggYnl0ZSBhbGln bmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjE2QSAgICAgKFVJTlQ2 NF9DKDE2KSA8PCAwKSAgICAgLyoqDQo+ID4gTGVuZ3RoIGlzDQo+ID4gPiA+IDE2IGJ5dGUgYWxp Z25lZC4gKi8NCj4gPiA+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9MRU4zMkEgICAgIChVSU5U NjRfQygzMikgPDwgMCkgICAgIC8qKg0KPiA+IExlbmd0aCBpcw0KPiA+ID4gPiAzMiBieXRlIGFs aWduZWQuICovDQo+ID4gPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfTEVONjRBICAgICAoVUlO VDY0X0MoNjQpIDw8IDApICAgICAvKioNCj4gPiBMZW5ndGggaXMNCj4gPiA+ID4gNjQgYnl0ZSBh bGlnbmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjEyOEEgICAgKFVJ TlQ2NF9DKDEyOCkgPDwgMCkgICAgLyoqDQo+ID4gTGVuZ3RoIGlzDQo+ID4gPiA+IDEyOCBieXRl IGFsaWduZWQuICovDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9E U1RBX01BU0sgIChVSU5UNjRfQygweEZFKSA8PCA4KSAgIC8qKg0KPiA+ID4gPiBEZXN0aW5hdGlv biBhZGRyZXNzIGFsaWdubWVudCBtYXNrLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9Q U19GX0RTVDJBICAgICAgKFVJTlQ2NF9DKDIpIDw8IDgpICAgICAgLyoqDQo+ID4gPiA+IERlc3Rp bmF0aW9uIGFkZHJlc3MgaXMgMiBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ID4gI2RlZmluZSBS VEVfTUVNT1BTX0ZfRFNUNEEgICAgICAoVUlOVDY0X0MoNCkgPDwgOCkgICAgICAvKioNCj4gPiA+ ID4gRGVzdGluYXRpb24gYWRkcmVzcyBpcyA0IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gPiAj ZGVmaW5lIFJURV9NRU1PUFNfRl9EU1Q4QSAgICAgIChVSU5UNjRfQyg4KSA8PCA4KSAgICAgIC8q Kg0KPiA+ID4gPiBEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIDggYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDE2QSAgICAgKFVJTlQ2NF9DKDE2KSA8PCA4 KSAgICAgLyoqDQo+ID4gPiA+IERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgMTYgYnl0ZSBhbGlnbmVk LiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDMyQSAgICAgKFVJTlQ2NF9D KDMyKSA8PCA4KSAgICAgLyoqDQo+ID4gPiA+IERlc3RpbmF0aW9uIGFkZHJlc3MgaXMgMzIgYnl0 ZSBhbGlnbmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0RTVDY0QSAgICAg KFVJTlQ2NF9DKDY0KSA8PCA4KSAgICAgLyoqDQo+ID4gPiA+IERlc3RpbmF0aW9uIGFkZHJlc3Mg aXMgNjQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0RT VDEyOEEgICAgKFVJTlQ2NF9DKDEyOCkgPDwgOCkgICAgLyoqDQo+ID4gPiA+IERlc3RpbmF0aW9u IGFkZHJlc3MgaXMgMTI4IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICNk ZWZpbmUgUlRFX01FTU9QU19GX1NSQ0FfTUFTSyAgKFVJTlQ2NF9DKDB4RkUpIDw8IDE2KSAgLyoq DQo+ID4gU291cmNlDQo+ID4gPiA+IGFkZHJlc3MgYWxpZ25tZW50IG1hc2suICovDQo+ID4gPiA+ ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JDMkEgICAgICAoVUlOVDY0X0MoMikgPDwgMTYpICAg ICAvKioNCj4gPiBTb3VyY2UNCj4gPiA+ID4gYWRkcmVzcyBpcyAyIGJ5dGUgYWxpZ25lZC4gKi8N Cj4gPiA+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9TUkM0QSAgICAgIChVSU5UNjRfQyg0KSA8 PCAxNikgICAgIC8qKg0KPiA+IFNvdXJjZQ0KPiA+ID4gPiBhZGRyZXNzIGlzIDQgYnl0ZSBhbGln bmVkLiAqLw0KPiA+ID4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX1NSQzhBICAgICAgKFVJTlQ2 NF9DKDgpIDw8IDE2KSAgICAgLyoqDQo+ID4gU291cmNlDQo+ID4gPiA+IGFkZHJlc3MgaXMgOCBi eXRlIGFsaWduZWQuICovDQo+ID4gPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JDMTZBICAg ICAoVUlOVDY0X0MoMTYpIDw8IDE2KSAgICAvKioNCj4gPiBTb3VyY2UNCj4gPiA+ID4gYWRkcmVz cyBpcyAxNiBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0Zf U1JDMzJBICAgICAoVUlOVDY0X0MoMzIpIDw8IDE2KSAgICAvKioNCj4gPiBTb3VyY2UNCj4gPiA+ ID4gYWRkcmVzcyBpcyAzMiBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ID4gI2RlZmluZSBSVEVf TUVNT1BTX0ZfU1JDNjRBICAgICAoVUlOVDY0X0MoNjQpIDw8IDE2KSAgICAvKioNCj4gPiBTb3Vy Y2UNCj4gPiA+ID4gYWRkcmVzcyBpcyA2NCBieXRlIGFsaWduZWQuICovDQo+ID4gPiA+ID4gI2Rl ZmluZSBSVEVfTUVNT1BTX0ZfU1JDMTI4QSAgICAoVUlOVDY0X0MoMTI4KSA8PCAxNikgICAvKioN Cj4gPiBTb3VyY2UNCj4gPiA+ID4gYWRkcmVzcyBpcyAxMjggYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gLyoqDQo+ID4gPiA+ID4gICAqIEB3YXJuaW5nDQo+ID4gPiA+ID4g ICAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5v dGljZS4NCj4gPiA+ID4gPiAgICoNCj4gPiA+ID4gPiAgICogTm9uLXRlbXBvcmFsIG1lbW9yeSBj b3B5Lg0KPiA+ID4gPiA+ICAgKiBUaGUgbWVtb3J5IGFyZWFzIG11c3Qgbm90IG92ZXJsYXAuDQo+ ID4gPiA+ID4gICAqDQo+ID4gPiA+ID4gICAqIEBub3RlDQo+ID4gPiA+ID4gICAqIElmIHRoZSBk ZXN0aW5hdGlvbiBhbmQvb3IgbGVuZ3RoIGlzIHVuYWxpZ25lZCwgc29tZSBjb3BpZWQNCj4gPiBi eXRlcw0KPiA+ID4gPiB3aWxsIGJlDQo+ID4gPiA+ID4gICAqIHN0b3JlZCBpbiB0aGUgZGVzdGlu YXRpb24gbWVtb3J5IGFyZWEgdXNpbmcgdGVtcG9yYWwgYWNjZXNzLg0KPiA+ID4gPiA+ICAgKg0K PiA+ID4gPiA+ICAgKiBAcGFyYW0gZHN0DQo+ID4gPiA+ID4gICAqICAgUG9pbnRlciB0byB0aGUg bm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uIG1lbW9yeSBhcmVhLg0KPiA+ID4gPiA+ICAgKiBAcGFy YW0gc3JjDQo+ID4gPiA+ID4gICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIHNvdXJj ZSBtZW1vcnkgYXJlYS4NCj4gPiA+ID4gPiAgICogQHBhcmFtIGxlbg0KPiA+ID4gPiA+ICAgKiAg IE51bWJlciBvZiBieXRlcyB0byBjb3B5Lg0KPiA+ID4gPiA+ICAgKiBAcGFyYW0gZmxhZ3MNCj4g PiA+ID4gPiAgICogICBIaW50cyBmb3IgbWVtb3J5IGFjY2Vzcy4NCj4gPiA+ID4gPiAgICogICBB bnkgb2YgdGhlIFJURV9NRU1PUFNfRl9MRU5uQSwgUlRFX01FTU9QU19GX0RTVG5BLA0KPiA+ID4g PiBSVEVfTUVNT1BTX0ZfU1JDbkEgZmxhZ3MuDQo+ID4gPiA+ID4gICAqLw0KPiA+ID4gPiA+IF9f cnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gPiA+IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lDQo+ ID4gPiA+ID4gX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18oMSwgMiksIF9fYWNjZXNzX18od3Jp dGVfb25seSwgMSwgMyksDQo+ID4gPiA+IF9fYWNjZXNzX18ocmVhZF9vbmx5LCAyLCAzKSkpDQo+ ID4gPiA+ID4gdm9pZCBydGVfbWVtY3B5X250KHZvaWQgKiBfX3J0ZV9yZXN0cmljdCBkc3QsIGNv bnN0IHZvaWQgKg0KPiA+ID4gPiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNpemVfdCBsZW4sDQo+ID4g PiA+ID4gICAgICAgICAgY29uc3QgdWludDY0X3QgZmxhZ3MpDQo+ID4gPiA+ID4gew0KPiA+ID4g PiA+ICAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSA/DQo+ID4gPiA+ID4gICAg ICAgICAgICAgICgoZmxhZ3MgJiBSVEVfTUVNT1BTX0ZfTEVOQV9NQVNLKSA+PQ0KPiA+IFJURV9N RU1PUFNfRl9MRU4xNkENCj4gPiA+ID4gJiYNCj4gPiA+ID4gPiAgICAgICAgICAgICAgKGZsYWdz ICYgUlRFX01FTU9QU19GX0RTVEFfTUFTSykgPj0NCj4gPiBSVEVfTUVNT1BTX0ZfRFNUMTZBKQ0K PiA+ID4gPiA6DQo+ID4gPiA+ID4gICAgICAgICAgICAgICEoKCh1aW50cHRyX3QpZHN0IHwgbGVu KSAmICgxNiAtIDEpKSkgew0KPiA+ID4gPiA+ICAgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3Rh bnRfcChmbGFncykgPw0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgKGZsYWdzICYgUlRFX01F TU9QU19GX1NSQ0FfTUFTSykgPj0NCj4gPiA+ID4gUlRFX01FTU9QU19GX1NSQzE2QSA6DQo+ID4g PiA+ID4gICAgICAgICAgICAgICAgICAhKCh1aW50cHRyX3Qpc3JjICYgKDE2IC0gMSkpKQ0KPiA+ ID4gPiA+ICAgICAgICAgICAgICBydGVfbWVtY3B5X250MTZhKGRzdCwgc3JjLCBsZW4vKiwgZmxh Z3MqLyk7DQo+ID4gPiA+ID4gICAgICAgICAgZWxzZQ0KPiA+ID4gPiA+ICAgICAgICAgICAgICBy dGVfbWVtY3B5X250MTZkbGEoZHN0LCBzcmMsIGxlbi8qLCBmbGFncyovKTsNCj4gPiA+ID4gPiAg ICAgIH0NCj4gPiA+ID4gPiAgICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdz KSA/ICgNCj4gPiA+ID4gPiAgICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX0xFTkFf TUFTSykgPj0NCj4gPiBSVEVfTUVNT1BTX0ZfTEVONEENCj4gPiA+ID4gJiYNCj4gPiA+ID4gPiAg ICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX0RTVEFfTUFTSykgPj0NCj4gPiBSVEVf TUVNT1BTX0ZfRFNUNEENCj4gPiA+ID4gJiYNCj4gPiA+ID4gPiAgICAgICAgICAgICAgKGZsYWdz ICYgUlRFX01FTU9QU19GX1NSQ0FfTUFTSykgPj0NCj4gPiBSVEVfTUVNT1BTX0ZfU1JDNEEpDQo+ ID4gPiA+IDoNCj4gPiA+ID4gPiAgICAgICAgICAgICAgISgoKHVpbnRwdHJfdClkc3QgfCAodWlu dHB0cl90KXNyYyB8IGxlbikgJiAoNCAtDQo+ID4gMSkpKSB7DQo+ID4gPiA+ID4gICAgICAgICAg cnRlX21lbWNweV9udDRhKGRzdCwgc3JjLCBsZW4vKiwgZmxhZ3MqLyk7DQo+ID4gPiA+ID4gICAg ICB9DQo+ID4gPiA+ID4gICAgICBlbHNlDQo+ID4gPiA+ID4gICAgICAgICAgcnRlX21lbWNweV9u dF91bmFsaWduZWQoZHN0LCBzcmMsIGxlbi8qLCBmbGFncyovKTsNCj4gPiA+ID4gPiB9DQo+ID4g PiA+DQo+ID4gPiA+DQo+ID4gPiA+IERvIHdlIHJlYWxseSBuZWVkIHRvIGV4cG9zZSBhbGwgdGhl c2UgZG96ZW4gZmxhZ3M/DQo+ID4gPiA+IE15IHRob3VnaHQgYXQgbGVhc3QgYWJvdXQgeDg2IGlt cGxlbWVudGFpb24gd2FzIGFib3V0IHNvbWV0aGluZw0KPiA+IG1vcmUNCj4gPiA+ID4gc2ltcGxl IGxpa2U6DQo+ID4gPiA+IHZvaWQgcnRlX21lbWNweV9udCh2b2lkICogX19ydGVfcmVzdHJpY3Qg ZHN0LA0KPiA+ID4gPiAJY29uc3Qgdm9pZCAqIF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxl biwNCj4gPiA+ID4gCWNvbnN0IHVpbnQ2NF90IGZsYWdzKQ0KPiA+ID4gPiB7DQo+ID4gPiA+DQo+ ID4gPiA+IAlpZiAoZmxhZ3MgPT0gKFNSQ19OVCB8IERTVF9OVCkgJiYgKChkc3QgfCBzcmMpICYg MHhmKSA9PSAwKSB7DQo+ID4gPiA+IAkJX2RvX250X3NyY19udF9kc3RfbnQoLi4uKTsNCj4gPiA+ ID4gCX0gZWxzZSBpZiAoZmxhZ3MgPT0gRFNUX05UICYmIChkc3QgJiAweGYpID09IDApIHsNCj4g PiA+ID4gCQlfZG9fc3JjX25hX2RzdF9udCguLi4pOw0KPiA+ID4gPiAJfSBlbHNlIGlmIChmbGFn cyA9PSBTUkNfTlQgJiYgKHNyYyAmIDB4ZikgPT0gMCkgew0KPiA+ID4gPiAJCV9kb19zcmNfbnRf ZHN0X25hKC4uLik7DQo+ID4gPiA+IAl9IGVsc2UNCj4gPiA+ID4gCQltZW1jcHkoZHN0LCBzcmMs IGxlbik7DQo+ID4gPiA+IH0NCj4gPiA+DQo+ID4gPiBUaGUgY29tYmluYXRpb24gb2YgZmxhZ3Ms IGlubGluZSBhbmQgX19idWlsdGluX2NvbnN0YW50X3AoKSBhbGxvd3MNCj4gPiB0aGUgY29tcGls ZXIgdG8gcHJvZHVjZSB6ZXJvLW92ZXJoZWFkIGNvZGUuIFdpdGhvdXQgaXQsIHRoZQ0KPiA+ID4g cmVzdWx0aW5nIGNvZGUgd2lsbCBjb250YWluIGEgYnVuY2ggb2YgcnVuLXRpbWUgYml0bWFzayBj b21wYXJpc29ucw0KPiA+IGFuZCBicmFuY2hlcyB0byBkZXRlcm1pbmUgdGhlIHVsdGltYXRlIGNv cHkgZnVuY3Rpb24uDQo+ID4NCj4gPiBJIHRoaW5rIGl0IGlzIHVuYXZvaWRhYmxlLCB1bmxlc3Mg eW91ciBpbnRlbnRpb24gZm9yIHRoaXMgZnVuY3Rpb24gdG8NCj4gPiB0cnVzdCBmbGFncyB3aXRo b3V0IGNoZWNraW5nIGFjdHVhbCBhZGRyZXNzZXMuDQo+IA0KPiBUaGUgaW50ZW50aW9uIGlzIHRv IHRydXN0IHRoZSBmbGFncy4gRmFzdCBwYXRoIGZ1bmN0aW9ucyBzaG91bGQgdHJ1c3QgdGhhdCBw YXJhbWV0ZXJzIHBhc3NlZCBhcmUgdmFsaWQgYW5kIGNvbmZvcm0gdG8gc3BlY2lmaWVkDQo+IHJl cXVpcmVtZW50cy4NCj4gDQo+IFdlIGNhbiBhbHdheXMgdGhyb3cgaW4gYSBmZXcgUlRFX0FTU0VS VHMgLSB0aGV5IGFyZSBvbWl0dGVkIHVubGVzcyBjb21waWxlZCBmb3IgZGVidWcsIGFuZCB0aHVz IGhhdmUgemVybyBjb3N0IGluIHByb2R1Y3Rpb24uDQo+IA0KPiA+DQo+ID4gIE9uIHg4Ng0KPiA+ ID4gdGhlcmUgYXJlIG5vdCBvbmx5IDE2IGJ5dGUsIGJ1dCBhbHNvIDQgYnl0ZSBhbGlnbm1lbnQg dmFyaWFudHMgb2YNCj4gPiBub24tdGVtcG9yYWwgc3RvcmUuIFRoZSBiZWF1dHkgb2YgaXQgd2ls bCBiZSBtb3JlIG9idmlvdXMgd2hlbiB0aGUNCj4gPiA+IHBhdGNoIGlzIHJlYWR5Lg0KPiA+DQo+ ID4gT2ssIEkgd2lsbCBqdXN0IHdhaXQgZm9yIGZpbmFsIHZlcnNpb24gdGhlbiA6KQ0KPiA+DQo+ ID4gPg0KPiA+ID4gQW5kIGluIG15IGN1cnJlbnQgd29ya2luZyB2ZXJzaW9uIChub3QgdGhlIGNv ZGUgcHJvdmlkZWQgaGVyZSksIHRoZQ0KPiA+IGZsYWdzIGFyZSBoaW50cywgc28gdXNpbmcgdGhl bSB3aWxsIGJlIG9wdGlvbmFsLiBUaGUgZnVuY3Rpb24NCj4gPiA+IGhlYWRlcnMgd2lsbCBsb29r IHJvdWdobHkgbGlrZSB0aGlzOg0KPiA+ID4NCj4gPiA+IHN0YXRpYyBpbmxpbmUgdm9pZCBydGVf bWVtY3B5X250X2V4KA0KPiA+ID4gCQl2b2lkICogZHN0LCBjb25zdCB2b2lkICogc3JjLA0KPiA+ ID4gCQlzaXplX3QgbGVuLCB1aW50NjRfdCBmbGFncyk7DQo+ID4gPg0KPiA+ID4gc3RhdGljIGlu bGluZSB2b2lkIHJ0ZV9tZW1jcHlfbnQoDQo+ID4gPiAJCXZvaWQgKiBkc3QsIGNvbnN0IHZvaWQg KiBzcmMsDQo+ID4gPiAJCXNpemVfdCBsZW4pDQo+ID4gPiB7DQo+ID4gPiAJcnRlX21lbWNweV9u dF9leChkc3QsIHNyYywgbGVuLCAwKTsNCj4gPiA+IH0NCj4gPiA+DQo+ID4gPiBJIG1pZ2h0IGFk ZCBhbiBfZXggcG9zdGZpeCB2YXJpYW50IG9mIHRoZSBtYnVmIHBhY2tldCBub24tdGVtcG9yYWwN Cj4gPiBjb3B5IGZ1bmN0aW9uIHRvbywgYnV0IEknbSBub3Qgd29ya2luZyBvbiB0aGF0IGZ1bmN0 aW9uIHlldCwgc28gSQ0KPiA+ID4gZG9uJ3QgeWV0IGtub3cgaWYgaXQgbWFrZXMgc2Vuc2Ugb3Ig bm90Lg0KPiA+ID4NCj4gPiA+IE15IGNvbmNlcHQgZm9yIGJ1aWxkIHRpbWUgYWxpZ25tZW50IGhp bnRzIGNhbiBhbHNvIGJlIGNvcGllZCBpbnRvIGFuDQo+ID4gcnRlX21lbWNweV9leCgpIGZ1bmN0 aW9uIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4gQnV0IEkNCj4gPiA+IGRvbid0IHdhbnQgbXkg cGF0Y2ggdG8gZXhwYW5kIHRvbyBtdWNoIG91dHNpZGUgaXRzIGluaXRpYWwgc2NvcGUsIHNvDQo+ ID4gSSB3aWxsIG5vdCBtb2RpZnkgcnRlX21lbWNweSgpIHdpdGggdGhpcyBwYXRjaC4NCj4gPiA+ DQo+ID4gPiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHByb3ZpZGUgcnRlX21lbWNweV9leChkLHMs bCxmbGFncykgaW5zdGVhZCBvZg0KPiA+IHJ0ZV9tZW1jcHlfbnRbX2V4XSgpLCBhbmQgdXNlIHRo ZSBmbGFncyB0byBpbmRpY2F0ZSBub24tDQo+ID4gPiB0ZW1wb3JhbCBzb3VyY2UgYW5kIGRlc3Rp bmF0aW9uLg0KPiA+ID4NCj4gPiA+IFRoaXMgaXMgb25seSBhIHF1ZXN0aW9uIGFib3V0IHdoaWNo IEFQSSB0aGUgY29tbXVuaXR5IHByZWZlcnMuIEkgd2lsbA0KPiA+IG5vdCBjaGFuZ2UgdGhlIGlt cGxlbWVudGF0aW9uIG9mIHJ0ZV9tZW1jcHkoKSB3aXRoIHRoaXMgcGF0Y2ggLQ0KPiA+ID4gaXQn cyBhbm90aGVyIGpvYiB0byBkbyB0aGF0Lg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+PiBXaGlsZSB3b3JraW5n IG9uIHRoZXNlIGZ1bnRpb25zLCBJIGV4cGVyaW1lbnRlZCB3aXRoIGFuDQo+ID4gPiA+ID4+IHJ0 ZV9tZW1jcHlfbnQoKSB0YWtpbmcgZmxhZ3MsIHdoaWNoIGlzIGFsc28gbXkgcGVyc29uYWwNCj4g PiBwcmVmZXJlbmNlLA0KPiA+ID4gPiBidXQNCj4gPiA+ID4gPj4gaGF2ZW4ndCBzdWNjZWVkIHll dC4gRXNwZWNpYWxseSB3aGVuIGNvcHlpbmcgYSAxNiBieXRlIGFsaWduZWQNCj4gPiA+ID4gPj4g c3RydWN0dXJlIG9mIG9ubHkgMTYgYnl0ZSwgdGhlIG92ZXJoZWFkIG9mIHRoZSBmdW5jdGlvbiBj YWxsICsNCj4gPiA+ID4gPj4gY29tcGFyaW5nIHRoZSBmbGFncyArIHRoZSBjb3B5IGxvb3Agb3Zl cmhlYWQgaXMgc2lnbmlmaWNhbnQsDQo+ID4gPiA+IGNvbXBhcmVkDQo+ID4gPiA+ID4+IHRvIGlu bGluZSBjb2RlIGNvbnNpc3Rpbmcgb2Ygb25seSBvbmUgcGFpciBvZiAibW92bnRkcWENCj4gPiA+ ID4gKCVyc2kpLCV4bW0wOw0KPiA+ID4gPiA+PiBtb3ZudGRxICV4bW0wLCglcmRpKSIgaW5zdHJ1 Y3Rpb25zLg0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4gPj4+IFJlbWVtYmVyIHRoYXQgYSBub24taW5s aW5lZCBydGVfbWVtY3B5X250KCkgd2lsbCBiZSBjYWxsZWQgd2l0aA0KPiA+ID4gPiB2ZXJ5DQo+ ID4gPiA+ID4+IHZhcnlpbmcgc2l6ZSwgZHVlIHRvIHRoZSB0eXBpY2FsIG1peCBvZiBzbWFsbCBh bmQgYmlnIHBhY2tldHMsDQo+ID4gc28NCj4gPiA+ID4gPj4gYnJhbmNoIHByZWRpY3Rpb24gd2ls bCBub3QgaGVscC4NCj4gPiA+ID4gPj4+DQo+ID4gPiA+ID4+PiBUaGlzIFJGQyBkb2VzIG5vdCB5 ZXQgc2hvdyB0aGUgcnRlX21lbWNweV9udCgpIGZ1bmN0aW9uDQo+ID4gaGFuZGxpbmcNCj4gPiA+ ID4gPj4gdW5hbGlnbmVkIGxvYWQvc3RvcmUsIGJ1dCBpdCBpcyBtb3JlIGNvbXBsZXggdGhhbiB0 aGUgYWxpZ25lZA0KPiA+ID4gPiA+PiBmdW5jdGlvbnMuIFNvIEkgdGhpbmsgdGhlIGFsaWduZWQg dmFyaWFudHMgYXJlIHdhcnJhbnRlZCAtIGZvcg0KPiA+ID4gPiA+PiBwZXJmb3JtYW5jZSByZWFz b25zLg0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4gPj4+IFNvbWUgb2YgdGhlIG5lZWQgZm9yIGV4cG9z aW5nIGluZGl2aWR1YWwgZnVuY3Rpb25zIGZvcg0KPiA+IGRpZmZlcmVudA0KPiA+ID4gPiA+PiBh bGlnbm1lbnQgc3RlbXMgZnJvbSB0aGUgY29tcGlsZXIgYmVpbmcgdW5hYmxlIHRvIGRldGVybWlu ZSB0aGUNCj4gPiA+ID4gPj4gYWxpZ25tZW50IG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u IHBvaW50ZXJzIGF0IGJ1aWxkIHRpbWUuDQo+ID4gU28NCj4gPiA+ID4gd2UNCj4gPiA+ID4gPj4g bmVlZCB0byBoZWxwIHRoZSBjb21waWxlciB3aXRoIHRoaXMgYXQgYnVpbGQgdGltZSwgYW5kIHRo dXMgdGhlDQo+ID4gbmVlZA0KPiA+ID4gPiA+PiBmb3IgaW5saW5pbmcgdGhlIGZ1bmN0aW9uLiBJ ZiB3ZSBleHBvc2UgYSBidW5jaCBvZiBzbWFsbCBpbmxpbmUNCj4gPiA+ID4gPj4gZnVuY3Rpb25z IG9yIGEgYmlnIGlubGluZSBmdW5jdGlvbiB3aXRoIGZsYWdzIHNlZW1zIHRvIGJlIGENCj4gPiBt YXR0ZXINCj4gPiA+ID4gb2YNCj4gPiA+ID4gPj4gdGFzdGUuDQo+ID4gPiA+ID4+Pg0KPiA+ID4g PiA+Pj4gVGhpbmtpbmcgYWJvdXQgaXQsIHlvdSBhcmUgcHJvYmFibHkgcmlnaHQgdGhhdCBleHBv c2luZyBhDQo+ID4gc2luZ2xlDQo+ID4gPiA+ID4+IGZ1bmN0aW9uIHdpdGggZmxhZ3MgaXMgYmV0 dGVyIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzIGFuZA0KPiA+IGVhc2llcg0KPiA+ID4gPiBm b3INCj4gPiA+ID4gPj4gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQuIEJ1dCBpdCBz dGlsbCBuZWVkcyB0byBiZQ0KPiA+IGlubGluZSwNCj4gPiA+ID4gZm9yDQo+ID4gPiA+ID4+IHRo ZSByZWFzb25zIGRlc2NyaWJlZCBhYm92ZS4NCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4NCj4gPiA+ ID4gPj4gT2ssIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBtYWluIHVzZS1jYXNlIGZvciBp dCB3b3VsZCBiZQ0KPiA+ID4gPiBjb3B5aW5nDQo+ID4gPiA+ID4+IG9mDQo+ID4gPiA+ID4+IGJp ZyBjaHVua3Mgb2YgZGF0YSwgYnV0IGZyb20geW91ciBkZXNjcmlwdGlvbiBpdCBtaWdodCBub3Qg YmUNCj4gPiB0aGUNCj4gPiA+ID4gY2FzZS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoaXMgaXMg Zm9yIHF1aWNrbHkgY29weWluZyByZWxhdGl2ZWx5IHNtYWxsIHBpZWNlcyBvZiBkYXRhDQo+ID4g PiA+IHN5bmNocm9ub3VzbHkgd2l0aG91dCBwb2xsdXRpbmcgdGhlIENQVXMgZGF0YSBjYWNoZSwg ZS5nLiBqdXN0DQo+ID4gYmVmb3JlDQo+ID4gPiA+IHBhc3Npbmcgb24gYSBwYWNrZXQgdG8gYW4g RXRoZXJuZXQgUE1EIGZvciB0cmFuc21pc3Npb24uDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBCaWcg Y2h1bmtzIG9mIGRhdGEgc2hvdWxkIGJlIGNvcGllZCBhc3luY2hyb25vdXNseSBieSBETUEuDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPj4gWWVzLCBmb3IganVzdCAxNi8zMkIgY29weSBmdW5jdGlvbiBj YWxsIG92ZXJoZWFkIG1pZ2h0IGJlIHdheQ0KPiA+IHRvbw0KPiA+ID4gPiA+PiBoaWdoLi4uDQo+ ID4gPiA+ID4+IEFzIGFub3RoZXIgYWx0ZXJuYXRpdmUgLSB3b3VsZCBtZW1jcHlfbnRfYnVsaygp IGhlbHAgc29tZWhvdz8NCj4gPiA+ID4gPj4gSXQgY2FuIGRvIGNvcHlpbmcgZm9yIHRoZSBzZXZl cmFsIHNyYy9kc3QgcGFpcnMgYXQgb25jZSBhbmQNCj4gPiA+ID4gPj4gdGhhdCBtaWdodCBoZWxw IHRvIGFtb3J0aXplIGNvc3Qgb2YgZnVuY3Rpb24gY2FsbC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ IEluIG1hbnkgY2FzZXMsIG1lbWNweV9udCgpIHdpbGwgcmVwbGFjZSBtZW1jcHkoKSBpbnNpZGUg bG9vcHMsIHNvDQo+ID4gaXQNCj4gPiA+ID4gc2hvdWxkIGJlIGp1c3QgYXMgZWFzeSB0byB1c2Ug YXMgbWVtY3B5KCkuIEUuZy4gbG9vayBhdA0KPiA+ID4gPiBydGVfcGt0bWJ1Zl9jb3B5KCkuLi4g QnVpbGRpbmcgYSBtZW1jb3B5IGFycmF5IHRvIHBhc3MgdG8NCj4gPiA+ID4gbWVtY3B5X250X2J1 bGsoKSBmcm9tIHJ0ZV9wa3RtYnVmX2NvcHkoKSB3b3VsZCByZXF1aXJlIGENCj4gPiBzaWduaWZp Y2FudA0KPiA+ID4gPiByZXdyaXRlIG9mIHJ0ZV9wa3RtYnVmX2NvcHkoKSwgY29tcGFyZWQgdG8g anVzdCByZXBsYWNpbmcNCj4gPiBydGVfbWVtY3B5KCkNCj4gPiA+ID4gd2l0aCBydGVfbWVtY3B5 X250KCkuIEFuZCB0aGlzIGlzIGp1c3Qgb25lIGZ1bmN0aW9uIHVzaW5nIG1lbWNweSgpLg0KPiA+ ID4gPg0KPiA+ID4gPiBBY3R1YWxseSwgb25lIHF1ZXN0aW9uIEkgaGF2ZSBmb3Igc3VjaCBzbWFs bCBkYXRhLXRyYW5zZmVyDQo+ID4gPiA+ICgxNkIgcGVyIHBhY2tldCkgLSBkbyB5b3Ugc3RpbGwg c2VlIHNvbWUgbm90aWNhYmxlIHBlcmZvbWFuY2UNCj4gPiA+ID4gaW1wcm92ZW1lbnQgZm9yIHN1 Y2ggc2NlbmFyaW8/DQo+ID4gPg0KPiA+ID4gQ29weWluZyAxNiBieXRlIGZyb20gZWFjaCBwYWNr ZXQgaW4gYSBidXJzdCBvZiAzMiBwYWNrZXRzIHdvdWxkDQo+ID4gb3RoZXJ3aXNlIHBvbGx1dGUg NjQgY2FjaGUgbGluZXMgPSA0IEtCIGNhY2hlLiBXaXRoIHR5cGljYWxseSA2NCBLQiBMMQ0KPiA+ ID4gY2FjaGUsIEkgdGhpbmsgaXQgbWFrZXMgYSBkaWZmZXJlbmNlLg0KPiA+DQo+ID4gSSB1bmRl cnN0YW5kIHRoZSBpbnRlbnRpb24gYmVoaW5kLCBteSBxdWVzdGlvbiB3YXMgLSBpdCBpcyByZWFs bHkNCj4gPiBtZWFzdXJhYmxlPw0KPiA+IFNvbWV0aGluZyBsaWtlOiB1c2luZyBwa3RtYnVmX2Nv cHlfbnQobGVuPTE2KSBvdmVyIHVzaW5nDQo+ID4gcGt0bWJ1Zl9jb3B5KGxlbj0xNikNCj4gPiBv biB3b3JrbG9hZCBYIGdpdmVzIFklIHRob3VnaHRwdXQgaW1wcm92ZW1lbnQ/DQo+IA0KPiBJZiB0 aGUgYXBwbGljYXRpb24gaXMgY29tcGxleCBlbm91Z2gsIGFuZCBuZWVkcyBzb21lIG9mIHRob3Nl IDQgS0IgY2FjaGUgb3RoZXJ3aXNlIHdhc3RlZCwgdGhlcmUgd2lsbCBiZSBhIHNpZ25pZmljYW50 IHRocm91Z2hwdXQNCj4gaW1wcm92ZW1lbnQ7IG90aGVyd2lzZSBwcm9iYWJseSBub3QuDQo+IA0K PiBJIGhhdmUgYSBnZW5lcmFsIHByb2JsZW0gd2l0aCB0aGlzIHR5cGUgb2YgcXVlc3Rpb246IEkg aGF0ZSB0aGF0IHRocm91Z2hwdXQgaXMgdGhlIG9ubHkgS1BJIChLZXkgUGVyZm9ybWFuY2UgSW5k aWNhdG9yKSBnZXR0aW5nIGFueQ0KPiBhdHRlbnRpb24gb24gdGhlIG1haWxpbmcgbGlzdCEgT3Ro ZXIgS1BJcywgc3VjaCBhcyBsYXRlbmN5IGFuZCByZXNvdXJjZSBjb25zZXJ2YXRpb24sIGFyZSBq dXN0IGFzIGltcG9ydGFudCBpbiBtYW55IHJlYWwgbGlmZSB1c2UgY2FzZXMuDQoNCldlbGwsIEkg c3VwcG9zZSB0aGF0IHNvcnQgb2YgZXhwZWN0ZWQgcXVlc3Rpb24gZm9yIHRoZSBwYXRjaCB0aGF0 IGludHJvZHVjZXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOg0Kd2hhdCBpcyB0aGUgYmVuZWZp dCB3ZSBleHBlY3QgdG8gZ2V0IGFuZCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0Pw0KVGhyb3VnaHB1 dCBvciBsYXRlbmN5IGltcHJvdmVtZW50IHNlZW1zIGxpa2UgYW4gb2J2aW91cyBjaG9pY2UgaGVy ZS4NCkFib3V0IHJlc291cmNlIGNvbnNlcnZhdGlvbiAtIGlmIHRoZSBwYXRjaCBhaW1zIHRvIGlt cHJvdmUgY2FjaGUgY29uc3VtcHRpb24sIHRoZW4gb24gc29tZSBjYWNoZS1ib3VuZA0Kd29ya2xv YWRzIGl0IHNob3VsZCByZXN1bHQgaW4gdGhyb3VnaHB1dCBpbXByb3ZlbWVudCwgY29ycmVjdD8g DQoNCj4gDQo+IEhlcmUncyBhIG51bWJlciBmb3IgeW91OiA2LjI1ICUgcmVkdWN0aW9uIGluIEwx IGRhdGEgY2FjaGUgY29uc3VtcHRpb24uIChBc3N1bWluZyA2NCBLQiBMMSBjYWNoZSB3aXRoIDY0 IGJ5dGUgY2FjaGUgbGluZXMgYW5kDQo+IGFwcGxpY2F0aW9uIGJ1cnN0IGxlbmd0aCBvZiAzMiBw YWNrZXRzLikNCg0KSSB1bmRlcnN0YW5kIHRoYXQgaXQgc2hvdWxkIHJlZHVjZSBjYWNoZSBldmlj dGlvbiByYXRlLg0KVGhlIHRoaW5nIGlzIHRoYXQgbm9uLXRlbXBvcmFsIHN0b3JlcyBhcmUgbm90 IGZyZWUgYWxzbzogdGhleSBjb25zdW1lIFdDIGJ1ZmZlcnMgYW5kIHNvbWUgbWVtb3J5LWJ1cyBi YW5kd2lkdGguDQpBRkFJSywgZm9yIDE2QiBub24tY29uc2VjdXRpdmUgTlQgc3RvcmVzLCBpdCBt ZWFucyB0aGF0IG9ubHkgMjUlIG9mIFdDIGJ1ZmZlcnMgY2FwYWNpdHkgd2lsbCBiZSB1c2VkLA0K YW5kIGluIHRoZW9yeSBpdCBtaWdodCBsZWFkIHRvIGV4dHJhIG1lbW9yeSBwcmVzc3VyZSBhbmQg d29yc2UgcGVyZm9ybWFuY2UgaW4gZ2VuZXJhbC4NCkluIGZhY3QsIElBIG1hbnVhbHMgZXhwbGlj aXRseSByZWNvbW1lbmQgdG8gYXZvaWQgcGFydGlhbCBjYWNoLWxpbmUgd3JpdGVzIHdoZW5ldmVy IHBvc3NpYmxlLg0KTm93LCBJIGRvbid0IGtub3cgd2hhdCB3b3VsZCBiZSBtb3JlIGV4cGVuc2l2 ZSBpbiB0aGF0IGNhc2U6IHJlLWZpbGwgZXh0cmEgY2FjaGUtbGluZXMsDQpvciBleHRyYSBwYXJ0 aWFsIHdyaXRlIG1lbW9yeSB0cmFuc2FjdGlvbnMuDQpUaGF0J3Mgd2h5IEkgYXNrZWQgZm9yIHNv bWUgcGVyZm9ybWFuY2UgbnVtYmVycyBoZXJlLg0KIA0KPiA+DQo+ID4gPg0KPiA+ID4gPiBBbm90 aGVyIHF1ZXN0aW9uIC0gd2hvIHdpbGwgZG8gJ3NmZW5jZScgYWZ0ZXIgdGhlIGNvcHlpbmc/DQo+ ID4gPiA+IFdvdWxkIGl0IGJlIGluc2lkZSBtZW1jcHlfbnQgKHNlZW1zIHF1aXRlIGNvc3RseSks IG9yIHdvdWxkDQo+ID4gPiA+IGl0IGJlIGFub3RoZXIgQVBJIGZ1bmN0aW9uIGZvciB0aGF0OiBt ZW1jcHlfbnRfZmx1c2goKSBvciBzbz8NCj4gPiA+DQo+ID4gPiBPdXRzaWRlLiBPbmx5IHRoZSBk ZXZlbG9wZXIga25vd3Mgd2hlbiBpdCBpcyByZXF1aXJlZCwgc28gaXQgd291bGRuJ3QNCj4gPiBt YWtlIGFueSBzZW5zZSB0byBhZGQgdGhlIGNvc3QgaW5zaWRlIG1lbWNweV9udCgpLg0KPiA+ID4N Cj4gPiA+IEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIGFkZCBhIGZsdXNoIGZ1bmN0aW9uOyBpdCB3 b3VsZCBqdXN0IGJlDQo+ID4gYW5vdGhlciBuYW1lIGZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIGZ1 bmN0aW9uLiBSZWZlcnJpbmcgdG8gdGhlDQo+ID4gcmVxdWlyZWQNCj4gPiA+IG9wZXJhdGlvbiBp biB0aGUgbWVtY3B5X250KCkgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiBzaG91bGQgc3VmZmljZS4N Cj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+Pg0KPiA+ ID4gPiA+Pj4+DQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+Pj4gWzFdIGh0dHBzOi8vd3d3Lmlu dGVsLmNvbS9jb250ZW50L3d3dy91cy9lbi9kb2NzL2ludHJpbnNpY3MtDQo+ID4gPiA+ID4+Pj4g Z3VpZGUvaW5kZXguaHRtbCN0ZXh0PV9tbV9zdHJlYW1fbG9hZA0KPiA+ID4gPiA+Pj4+PiBbMl0g aHR0cHM6Ly9kZXZlbG9wZXIuYXJtLmNvbS9kb2N1bWVudGF0aW9uLzEwMDA3Ni8wMTAwL0E2NC0N Cj4gPiA+ID4gPj4+PiBJbnN0cnVjdGlvbi1TZXQtUmVmZXJlbmNlL0E2NC1GbG9hdGluZy1wb2lu dC0NCj4gPiBJbnN0cnVjdGlvbnMvTEROUC0tDQo+ID4gPiA+ID4+IFNJTUQtDQo+ID4gPiA+ID4+ Pj4gYW5kLUZQLQ0KPiA+ID4gPiA+Pj4+Pg0KPiA+ID4gPiA+Pj4+PiBWMjoNCj4gPiA+ID4gPj4+ Pj4gLSBPbmx5IGNvcHkgZnJvbSBub24tdGVtcG9yYWwgc291cmNlIHRvIG5vbi10ZW1wb3JhbA0K PiA+IGRlc3RpbmF0aW9uLg0KPiA+ID4gPiA+Pj4+PiAgICAgIEkuZS4gcmVtb3ZlIHRoZSB0d28g dmFyaWFudHMgd2l0aCBvbmx5IHNvdXJjZSBhbmQvb3INCj4gPiA+ID4gPj4gZGVzdGluYXRpb24N Cj4gPiA+ID4gPj4+PiBiZWluZw0KPiA+ID4gPiA+Pj4+PiAgICAgIG5vbi10ZW1wb3JhbC4NCj4g PiA+ID4gPj4+Pj4gLSBEbyBub3QgcmVxdWlyZSBhbGlnbm1lbnQuDQo+ID4gPiA+ID4+Pj4+ICAg ICAgSW5zdGVhZCwgb2ZmZXIgYWRkaXRpb25hbCA0IGFuZCAxNiBieXRlIGFsaWduZWQNCj4gPiBm dW5jdGlvbnMNCj4gPiA+ID4gZm9yDQo+ID4gPiA+ID4+Pj4gcGVyZm9ybWFuY2UNCj4gPiA+ID4g Pj4+Pj4gICAgICBwdXJwb3Nlcy4NCj4gPiA+ID4gPj4+Pj4gLSBJbXBsZW1lbnRlZCB0d28gb2Yg dGhlIGZ1bmN0aW9ucyBmb3IgeDg2Lg0KPiA+ID4gPiA+Pj4+PiAtIFJlbW92ZSBtZW1zZXQgZnVu Y3Rpb24uDQo+ID4gPiA+ID4+Pj4+DQo+ID4gPiA+ID4+Pj4+IFNpZ25lZC1vZmYtYnk6IE1vcnRl biBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4gPiA+ID4+Pj4+IC0tLQ0K PiA+ID4gPiA+Pj4+Pg0KPiA+ID4gPiA+Pj4+PiAvKioNCj4gPiA+ID4gPj4+Pj4gICAgICogQHdh cm5pbmcNCj4gPiA+ID4gPj4+Pj4gICAgICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3INCj4gPiBub3RpY2UuDQo+ID4gPiA+ID4+Pj4+ICAgICAqDQo+ ID4gPiA+ID4+Pj4+ICAgICAqIENvcHkgZGF0YSBmcm9tIG5vbi10ZW1wb3JhbCBzb3VyY2UgdG8g bm9uLXRlbXBvcmFsDQo+ID4gPiA+ID4+IGRlc3RpbmF0aW9uLg0KPiA+ID4gPiA+Pj4+PiAgICAg Kg0KPiA+ID4gPiA+Pj4+PiAgICAgKiBAcGFyYW0gZHN0DQo+ID4gPiA+ID4+Pj4+ICAgICAqICAg UG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uIG9mIHRoZSBkYXRhLg0KPiA+ ID4gPiA+Pj4+PiAgICAgKiAgIFNob3VsZCBiZSA0IGJ5dGUgYWxpZ25lZCwgZm9yIG9wdGltYWwg cGVyZm9ybWFuY2UuDQo+ID4gPiA+ID4+Pj4+ICAgICAqIEBwYXJhbSBzcmMNCj4gPiA+ID4gPj4+ Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgc291cmNlIGRhdGEuDQo+ID4g PiA+ID4+Pj4+ICAgICAqICAgTm8gYWxpZ25tZW50IHJlcXVpcmVtZW50cy4NCj4gPiA+ID4gPj4+ Pj4gICAgICogQHBhcmFtIGxlbg0KPiA+ID4gPiA+Pj4+PiAgICAgKiAgIE51bWJlciBvZiBieXRl cyB0byBjb3B5Lg0KPiA+ID4gPiA+Pj4+PiAgICAgKiAgIFNob3VsZCBiZSBiZSBkaXZpc2libGUg YnkgNCwgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuDQo+ID4gPiA+ID4+Pj4+ICAgICAqLw0KPiA+ ID4gPiA+Pj4+PiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ID4gPj4+Pj4gc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUNCj4gPiA+ID4gPj4+Pj4gX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18o MSwgMiksIF9fYWNjZXNzX18od3JpdGVfb25seSwgMSwNCj4gPiAzKSwNCj4gPiA+ID4gPj4+PiBf X2FjY2Vzc19fKHJlYWRfb25seSwgMiwgMykpKQ0KPiA+ID4gPiA+Pj4+PiB2b2lkIHJ0ZV9tZW1j cHlfbnQodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRzdCwgY29uc3Qgdm9pZCAqDQo+ID4gPiA+ID4+ Pj4gX19ydGVfcmVzdHJpY3Qgc3JjLCBzaXplX3QgbGVuKQ0KPiA+ID4gPiA+Pj4+PiAvKiBJbXBs ZW1lbnRhdGlvbiBULkIuRC4gKi8NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pj4gLyoqDQo+ ID4gPiA+ID4+Pj4+ICAgICAqIEB3YXJuaW5nDQo+ID4gPiA+ID4+Pj4+ICAgICAqIEBiIEVYUEVS SU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yDQo+ID4gbm90aWNlLg0K PiA+ID4gPiA+Pj4+PiAgICAgKg0KPiA+ID4gPiA+Pj4+PiAgICAgKiBDb3B5IGRhdGEgaW4gYmxv Y2tzIG9mIDE2IGJ5dGUgZnJvbSBhbGlnbmVkIG5vbi0NCj4gPiB0ZW1wb3JhbA0KPiA+ID4gPiA+ PiBzb3VyY2UNCj4gPiA+ID4gPj4+Pj4gICAgICogdG8gYWxpZ25lZCBub24tdGVtcG9yYWwgZGVz dGluYXRpb24uDQo+ID4gPiA+ID4+Pj4+ICAgICAqDQo+ID4gPiA+ID4+Pj4+ICAgICAqIEBwYXJh bSBkc3QNCj4gPiA+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwg ZGVzdGluYXRpb24gb2YgdGhlIGRhdGEuDQo+ID4gPiA+ID4+Pj4+ICAgICAqICAgTXVzdCBiZSAx NiBieXRlIGFsaWduZWQuDQo+ID4gPiA+ID4+Pj4+ICAgICAqIEBwYXJhbSBzcmMNCj4gPiA+ID4g Pj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgc291cmNlIGRhdGEuDQo+ ID4gPiA+ID4+Pj4+ICAgICAqICAgTXVzdCBiZSAxNiBieXRlIGFsaWduZWQuDQo+ID4gPiA+ID4+ Pj4+ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+ID4gPj4+Pj4gICAgICogICBOdW1iZXIgb2YgYnl0 ZXMgdG8gY29weS4NCj4gPiA+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIGRpdmlzaWJsZSBieSAx Ni4NCj4gPiA+ID4gPj4+Pj4gICAgICovDQo+ID4gPiA+ID4+Pj4+IF9fcnRlX2V4cGVyaW1lbnRh bA0KPiA+ID4gPiA+Pj4+PiBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZQ0KPiA+ID4gPiA+Pj4+ PiBfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXygxLCAyKSwgX19hY2Nlc3NfXyh3cml0ZV9vbmx5 LCAxLA0KPiA+IDMpLA0KPiA+ID4gPiA+Pj4+IF9fYWNjZXNzX18ocmVhZF9vbmx5LCAyLCAzKSkp DQo+ID4gPiA+ID4+Pj4+IHZvaWQgcnRlX21lbWNweV9udDE2YSh2b2lkICogX19ydGVfcmVzdHJp Y3QgZHN0LCBjb25zdCB2b2lkICoNCj4gPiA+ID4gPj4+PiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNp emVfdCBsZW4pDQo+ID4gPiA+ID4+Pj4+IHsNCj4gPiA+ID4gPj4+Pj4gICAgICAgIGNvbnN0IHZv aWQgKiBjb25zdCAgZW5kID0gUlRFX1BUUl9BREQoc3JjLCBsZW4pOw0KPiA+ID4gPiA+Pj4+Pg0K PiA+ID4gPiA+Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNfYWxpZ25lZChkc3QsIHNpemVv ZihfX20xMjhpKSkpOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNfYWxp Z25lZChzcmMsIHNpemVvZihfX20xMjhpKSkpOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgUlRFX0FT U0VSVChydGVfaXNfYWxpZ25lZChsZW4sIHNpemVvZihfX20xMjhpKSkpOw0KPiA+ID4gPiA+Pj4+ Pg0KPiA+ID4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBsYXJnZSBwb3J0aW9uIG9mIGRhdGEuICov DQo+ID4gPiA+ID4+Pj4+ICAgICAgICB3aGlsZSAoUlRFX1BUUl9ESUZGKGVuZCwgc3JjKSA+PSA0 ICogc2l6ZW9mKF9fbTEyOGkpKQ0KPiA+IHsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICByZWdp c3RlciBfX20xMjhpICAgIHhtbTAsIHhtbTEsIHhtbTIsIHhtbTM7DQo+ID4gPiA+ID4+Pj4+DQo+ ID4gPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEy OCgpIG5vdCB0YWtpbmcgYQ0KPiA+ID4gPiBjb25zdA0KPiA+ID4gPiA+Pj4+IHBvaW50ZXIgYXMg cGFyYW1ldGVyLiAqLw0KPiA+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gN Cj4gPiA+ID4gPj4+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rpc2NhcmRl ZC1xdWFsaWZpZXJzIg0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTAgPSBfbW1fc3RyZWFt X2xvYWRfc2kxMjgoUlRFX1BUUl9BREQoc3JjLCAwICoNCj4gPiA+ID4gPj4+PiBzaXplb2YoX19t MTI4aSkpKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICB4bW0xID0gX21tX3N0cmVhbV9sb2Fk X3NpMTI4KFJURV9QVFJfQUREKHNyYywgMSAqDQo+ID4gPiA+ID4+Pj4gc2l6ZW9mKF9fbTEyOGkp KSk7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgeG1tMiA9IF9tbV9zdHJlYW1fbG9hZF9zaTEy OChSVEVfUFRSX0FERChzcmMsIDIgKg0KPiA+ID4gPiA+Pj4+IHNpemVvZihfX20xMjhpKSkpOw0K PiA+ID4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTMgPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUlRF X1BUUl9BREQoc3JjLCAzICoNCj4gPiA+ID4gPj4+PiBzaXplb2YoX19tMTI4aSkpKTsNCj4gPiA+ ID4gPj4+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3ANCj4gPiA+ID4gPj4+Pj4gICAgICAg ICAgICBfbW1fc3RyZWFtX3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPiA+IHNpemVv ZihfX20xMjhpKSksDQo+ID4gPiA+ID4+Pj4geG1tMCk7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAg ICAgX21tX3N0cmVhbV9zaTEyOChSVEVfUFRSX0FERChkc3QsIDEgKg0KPiA+ID4gPiBzaXplb2Yo X19tMTI4aSkpLA0KPiA+ID4gPiA+Pj4+IHhtbTEpOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAg IF9tbV9zdHJlYW1fc2kxMjgoUlRFX1BUUl9BREQoZHN0LCAyICoNCj4gPiA+ID4gc2l6ZW9mKF9f bTEyOGkpKSwNCj4gPiA+ID4gPj4+PiB4bW0yKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICBf bW1fc3RyZWFtX3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMyAqDQo+ID4gPiA+IHNpemVvZihfX20x MjhpKSksDQo+ID4gPiA+ID4+Pj4geG1tMyk7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgc3Jj ID0gUlRFX1BUUl9BREQoc3JjLCA0ICogc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4gPj4+Pj4g ICAgICAgICAgICBkc3QgPSBSVEVfUFRSX0FERChkc3QsIDQgKiBzaXplb2YoX19tMTI4aSkpOw0K PiA+ID4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4gPiA+Pj4+Pg0KPiA+ID4gPiA+Pj4+PiAgICAg ICAgLyogQ29weSByZW1haW5pbmcgZGF0YS4gKi8NCj4gPiA+ID4gPj4+Pj4gICAgICAgIHdoaWxl IChzcmMgIT0gZW5kKSB7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgcmVnaXN0ZXIgX19tMTI4 aSAgICB4bW07DQo+ID4gPiA+ID4+Pj4+DQo+ID4gPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91 bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+ID4gPiBjb25z dA0KPiA+ID4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4gPiA+Pj4+PiAj cHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCj4gPiA+ID4gPj4+Pj4gI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBpZ25vcmVkICItV2Rpc2NhcmRlZC1xdWFsaWZpZXJzIg0KPiA+ID4gPiA+Pj4+PiAg ICAgICAgICAgIHhtbSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChzcmMpOw0KPiA+ID4gPiA+Pj4+ PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcA0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgIF9t bV9zdHJlYW1fc2kxMjgoZHN0LCB4bW0pOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgIHNyYyA9 IFJURV9QVFJfQUREKHNyYywgc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAg ICAgICBkc3QgPSBSVEVfUFRSX0FERChkc3QsIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPiA+ID4+ Pj4+ICAgICAgICB9DQo+ID4gPiA+ID4+Pj4+IH0NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+ Pj4gLyoqDQo+ID4gPiA+ID4+Pj4+ICAgICAqIEB3YXJuaW5nDQo+ID4gPiA+ID4+Pj4+ICAgICAq IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yDQo+ID4g bm90aWNlLg0KPiA+ID4gPiA+Pj4+PiAgICAgKg0KPiA+ID4gPiA+Pj4+PiAgICAgKiBDb3B5IGRh dGEgaW4gYmxvY2tzIG9mIDQgYnl0ZSBmcm9tIGFsaWduZWQgbm9uLXRlbXBvcmFsDQo+ID4gPiA+ IHNvdXJjZQ0KPiA+ID4gPiA+Pj4+PiAgICAgKiB0byBhbGlnbmVkIG5vbi10ZW1wb3JhbCBkZXN0 aW5hdGlvbi4NCj4gPiA+ID4gPj4+Pj4gICAgICoNCj4gPiA+ID4gPj4+Pj4gICAgICogQHBhcmFt IGRzdA0KPiA+ID4gPiA+Pj4+PiAgICAgKiAgIFBvaW50ZXIgdG8gdGhlIG5vbi10ZW1wb3JhbCBk ZXN0aW5hdGlvbiBvZiB0aGUgZGF0YS4NCj4gPiA+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIDQg Ynl0ZSBhbGlnbmVkLg0KPiA+ID4gPiA+Pj4+PiAgICAgKiBAcGFyYW0gc3JjDQo+ID4gPiA+ID4+ Pj4+ICAgICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIHNvdXJjZSBkYXRhLg0KPiA+ ID4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUgNCBieXRlIGFsaWduZWQuDQo+ID4gPiA+ID4+Pj4+ ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+ID4gPj4+Pj4gICAgICogICBOdW1iZXIgb2YgYnl0ZXMg dG8gY29weS4NCj4gPiA+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIGRpdmlzaWJsZSBieSA0Lg0K PiA+ID4gPiA+Pj4+PiAgICAgKi8NCj4gPiA+ID4gPj4+Pj4gX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gPiA+ID4+Pj4+IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lDQo+ID4gPiA+ID4+Pj4+IF9f YXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIpLCBfX2FjY2Vzc19fKHdyaXRlX29ubHksIDEs DQo+ID4gMyksDQo+ID4gPiA+ID4+Pj4gX19hY2Nlc3NfXyhyZWFkX29ubHksIDIsIDMpKSkNCj4g PiA+ID4gPj4+Pj4gdm9pZCBydGVfbWVtY3B5X250NGEodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRz dCwgY29uc3Qgdm9pZCAqDQo+ID4gPiA+ID4+Pj4gX19ydGVfcmVzdHJpY3Qgc3JjLCBzaXplX3Qg bGVuKQ0KPiA+ID4gPiA+Pj4+PiB7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICBpbnQzMl90ICAgICAg ICAgICAgIGJ1ZltzaXplb2YoX19tMTI4aSkgLw0KPiA+IHNpemVvZihpbnQzMl90KV0NCj4gPiA+ ID4gPj4+PiBfX3J0ZV9hbGlnbmVkKHNpemVvZihfX20xMjhpKSk7DQo+ID4gPiA+ID4+Pj4+ICAg ICAgICAvKiogQWRkcmVzcyBvZiBzb3VyY2UgZGF0YSwgcm91bmRlZCBkb3duIHRvIGFjaGlldmUN Cj4gPiA+ID4gPj4gYWxpZ25tZW50Lg0KPiA+ID4gPiA+Pj4+ICovDQo+ID4gPiA+ID4+Pj4+ICAg ICAgICBjb25zdCB2b2lkICogICAgICAgIHNyY2EgPSBSVEVfUFRSX0FMSUdOX0ZMT09SKHNyYywN Cj4gPiA+ID4gPj4+PiBzaXplb2YoX19tMTI4aSkpOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgLyoq IEFkZHJlc3Mgb2YgZW5kIG9mIHNvdXJjZSBkYXRhLCByb3VuZGVkIGRvd24gdG8NCj4gPiBhY2hp ZXZlDQo+ID4gPiA+ID4+Pj4gYWxpZ25tZW50LiAqLw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgY29u c3Qgdm9pZCAqIGNvbnN0ICBzcmNlbmRhID0NCj4gPiA+ID4gPj4+PiBSVEVfUFRSX0FMSUdOX0ZM T09SKFJURV9QVFJfQUREKHNyYywgbGVuKSwgc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+ID4gPj4+ Pj4gICAgICAgIGNvbnN0IGludCAgICAgICAgICAgb2Zmc2V0ID0gIFJURV9QVFJfRElGRihzcmMs IHNyY2EpDQo+ID4gLw0KPiA+ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90KTsNCj4gPiA+ID4gPj4+ Pj4gICAgICAgIHJlZ2lzdGVyIF9fbTEyOGkgICAgeG1tMDsNCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQoZHN0LCBzaXplb2YoaW50 MzJfdCkpKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQo c3JjLCBzaXplb2YoaW50MzJfdCkpKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQo cnRlX2lzX2FsaWduZWQobGVuLCBzaXplb2YoaW50MzJfdCkpKTsNCj4gPiA+ID4gPj4+Pj4NCj4g PiA+ID4gPj4+Pj4gICAgICAgIGlmICh1bmxpa2VseShsZW4gPT0gMCkpIHJldHVybjsNCj4gPiA+ ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pj4gICAgICAgIC8qIENvcHkgZmlyc3QsIG5vbi1fX20xMjhp IGFsaWduZWQsIHBhcnQgb2Ygc291cmNlDQo+ID4gZGF0YS4NCj4gPiA+ID4gKi8NCj4gPiA+ID4g Pj4+Pj4gICAgICAgIGlmIChvZmZzZXQpIHsNCj4gPiA+ID4gPj4+Pj4gLyogTm90ZTogV29ya2Fy b3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3NpMTI4KCkgbm90IHRha2luZyBhDQo+ID4gPiA+IGNv bnN0DQo+ID4gPiA+ID4+Pj4gcG9pbnRlciBhcyBwYXJhbWV0ZXIuICovDQo+ID4gPiA+ID4+Pj4+ ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBk aWFnbm9zdGljIGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPiA+ID4+Pj4+ ICAgICAgICAgICAgeG1tMCA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChzcmNhKTsNCj4gPiA+ID4g Pj4+Pj4gICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcA0KPiA+ID4gPiA+Pj4+PiAgICAg ICAgICAgIHN3aXRjaCAob2Zmc2V0KSB7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAgIGNh c2UgMToNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihS VEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1Zlsx XSk7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkobGVuID09 IDEgKiBzaXplb2YoaW50MzJfdCkpKQ0KPiA+ID4gPiByZXR1cm47DQo+ID4gPiA+ID4+Pj4+ICAg ICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAxICoNCj4g PiA+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+ID4gPiA+Pj4+PiAgICAg ICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGxlbiA9PSAyICogc2l6ZW9mKGludDMyX3QpKSkN Cj4gPiA+ID4gcmV0dXJuOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0 cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4gPiA+ID4+Pj4gc2l6ZW9mKGludDMy X3QpKSwgYnVmWzNdKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDI6DQo+ID4gPiA+ID4+Pj4+ICAgICAg ICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4gPiA+ ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAg ICAgICAgICAgICAgaWYgKHVubGlrZWx5KGxlbiA9PSAxICogc2l6ZW9mKGludDMyX3QpKSkNCj4g PiA+ID4gcmV0dXJuOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVh bV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3Qp KSwgYnVmWzNdKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDM6DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAg ICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4gPiA+ID4g Pj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbM10pOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgfQ0KPiA+ID4gPiA+Pj4+ PiAgICAgICAgICAgIHNyY2EgPSBSVEVfUFRSX0FERChzcmNhLCAoNCAtIG9mZnNldCkgKg0KPiA+ ID4gPiBzaXplb2YoaW50MzJfdCkpOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgIGRzdCA9IFJU RV9QVFJfQUREKGRzdCwgKDQgLSBvZmZzZXQpICoNCj4gPiA+ID4gc2l6ZW9mKGludDMyX3QpKTsN Cj4gPiA+ID4gPj4+Pj4gICAgICAgIH0NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pj4gICAg ICAgIC8qIENvcHkgbWlkZGxlLCBfX20xMjhpIGFsaWduZWQsIHBhcnQgb2Ygc291cmNlIGRhdGEu DQo+ID4gKi8NCj4gPiA+ID4gPj4+Pj4gICAgICAgIHdoaWxlIChzcmNhICE9IHNyY2VuZGEpIHsN Cj4gPiA+ID4gPj4+Pj4gLyogTm90ZTogV29ya2Fyb3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3Np MTI4KCkgbm90IHRha2luZyBhDQo+ID4gPiA+IGNvbnN0DQo+ID4gPiA+ID4+Pj4gcG9pbnRlciBh cyBwYXJhbWV0ZXIuICovDQo+ID4gPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz aA0KPiA+ID4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGlzY2Fy ZGVkLXF1YWxpZmllcnMiDQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgeG1tMCA9IF9tbV9zdHJl YW1fbG9hZF9zaTEyOChzcmNhKTsNCj4gPiA+ID4gPj4+Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBwb3ANCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKili dWYsIHhtbTApOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVf UFRSX0FERChkc3QsIDAgKg0KPiA+IHNpemVvZihpbnQzMl90KSksDQo+ID4gPiA+ID4+Pj4gYnVm WzBdKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9B REQoZHN0LCAxICoNCj4gPiBzaXplb2YoaW50MzJfdCkpLA0KPiA+ID4gPiA+Pj4+IGJ1ZlsxXSk7 DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRz dCwgMiAqDQo+ID4gc2l6ZW9mKGludDMyX3QpKSwNCj4gPiA+ID4gPj4+PiBidWZbMl0pOw0KPiA+ ID4gPiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDMg Kg0KPiA+IHNpemVvZihpbnQzMl90KSksDQo+ID4gPiA+ID4+Pj4gYnVmWzNdKTsNCj4gPiA+ID4g Pj4+Pj4gICAgICAgICAgICBzcmNhID0gUlRFX1BUUl9BREQoc3JjYSwgc2l6ZW9mKF9fbTEyOGkp KTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICBkc3QgPSBSVEVfUFRSX0FERChkc3QsIDQgKiBz aXplb2YoaW50MzJfdCkpOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4gPiA+Pj4+Pg0K PiA+ID4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBsYXN0LCBub24tX19tMTI4aSBhbGlnbmVkLCBw YXJ0IG9mIHNvdXJjZQ0KPiA+IGRhdGEuICovDQo+ID4gPiA+ID4+Pj4+ICAgICAgICBpZiAoUlRF X1BUUl9ESUZGKHNyY2EsIHNyYykgIT0gNCkgew0KPiA+ID4gPiA+Pj4+PiAvKiBOb3RlOiBXb3Jr YXJvdW5kIGZvciBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoKSBub3QgdGFraW5nIGENCj4gPiA+ID4g Y29uc3QNCj4gPiA+ID4gPj4+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+ID4gPj4+ Pj4gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQo+ID4gPiA+ID4+Pj4+ICNwcmFnbWEgR0ND IGRpYWdub3N0aWMgaWdub3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPiA+ID4gPj4+ Pj4gICAgICAgICAgICB4bW0wID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KHNyY2EpOw0KPiA+ID4g PiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOCgodm9pZCAqKWJ1ZiwgeG1tMCk7DQo+ ID4gPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPiA+ID4+Pj4+ICAg ICAgICAgICAgc3dpdGNoIChvZmZzZXQpIHsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAg Y2FzZSAxOg0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMy KFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVm WzBdKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiA+ Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDI6DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAg ICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4gPiA+ID4gPj4+PiBz aXplb2YoaW50MzJfdCkpLCBidWZbMF0pOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg ICAgaWYgKHVubGlrZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDENCj4gPiAqDQo+ID4g PiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpKSkgcmV0dXJuOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAg ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPiA+ ID4+Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzFdKTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDM6DQo+ ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9B REQoZHN0LCAwICoNCj4gPiA+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMF0pOw0KPiA+ ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KFJURV9QVFJfRElGRihz cmNhLCBzcmMpID09IDENCj4gPiAqDQo+ID4gPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpKSkgcmV0 dXJuOw0KPiA+ID4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJU RV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzFd KTsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShSVEVfUFRS X0RJRkYoc3JjYSwgc3JjKSA9PSAyDQo+ID4gKg0KPiA+ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90 KSkpIHJldHVybjsNCj4gPiA+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIF9tbV9zdHJlYW1f c2kzMihSVEVfUFRSX0FERChkc3QsIDIgKg0KPiA+ID4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSks IGJ1ZlsyXSk7DQo+ID4gPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+ ID4gPj4+Pj4gICAgICAgICAgICB9DQo+ID4gPiA+ID4+Pj4+ICAgICAgICB9DQo+ID4gPiA+ID4+ Pj4+IH0NCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+Pg0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4g Pj4NCj4gPiA+ID4gPg0KPiA+ID4gPg0KDQo=