From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.1.65; helo=eur02-he1-obe.outbound.protection.outlook.com; envelope-from=pankaj.bansal@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10065.outbound.protection.outlook.com [40.107.1.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 962E6222630DD for ; Sun, 25 Feb 2018 22:28:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=opx/gzwkeUJ53X4hqLaUjxfFbSxqqiNz5xosGb/ptfI=; b=NS8MUqf45bjd2RN89fGDLx5Q1W4I/xDBEty+Kv7je+kqGA0mc9FSU+0gQV5GGhe4sBNdhWSSddduD7e1ZIpCcsZVZ99Hkp8sfOMMJY3CHd/3Ze0EflmBjdUzdETEcG4kF3CaMCV1jx044OW0JU/b/sWJr214cQiHyn1chsKzExs= Received: from AM0PR0402MB3940.eurprd04.prod.outlook.com (52.133.40.140) by AM0PR0402MB3396.eurprd04.prod.outlook.com (52.133.45.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.527.15; Mon, 26 Feb 2018 06:33:57 +0000 Received: from AM0PR0402MB3940.eurprd04.prod.outlook.com ([fe80::4815:8101:2a92:25ea]) by AM0PR0402MB3940.eurprd04.prod.outlook.com ([fe80::4815:8101:2a92:25ea%13]) with mapi id 15.20.0527.021; Mon, 26 Feb 2018 06:33:57 +0000 From: Pankaj Bansal To: Laszlo Ersek , "Gao, Liming" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" Thread-Topic: [edk2] [RFC] MdePkg/BaseLib: Change BitField functions. Thread-Index: AQHToZVOQewKy+TSDEeGa3mFQGqLrKOsyRvwgAUfboCAAACwgIAAEuAAgARX1HA= Date: Mon, 26 Feb 2018 06:33:57 +0000 Message-ID: References: <1518173996-26906-1-git-send-email-pankaj.bansal@nxp.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E1CEF81@SHSMSX104.ccr.corp.intel.com> <48d7d1a9-503f-2a72-803d-f63a8bc67e9c@redhat.com> In-Reply-To: <48d7d1a9-503f-2a72-803d-f63a8bc67e9c@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=pankaj.bansal@nxp.com; x-originating-ip: [14.142.187.166] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR0402MB3396; 7:AOlaHvZSVb3p494vkm7T/ud+r8DgXc5Fmt6O0jleD76PIzv82aIA3zOI0oOfHwR1bfp0ROP7DYeyjHH2uRRrW3B60pRlQjIOPoXhBFhwfbS7g/w9PlTzdCtd8A6WcVOjaDDptfzpaSMaoMtbqfgZXoYuul45pJJnjWYXmm0mcNT3N3eqi68G5x8yKibwWQgzLctLVq2fQsfeYvUEI9JWrSoZHmyI44dSSO0naCjTCaKhYSJmIrYjTbC9jpkcjmvB x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 33fd2507-e0de-4b67-8d99-08d57ce2ea33 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020); SRVR:AM0PR0402MB3396; x-ms-traffictypediagnostic: AM0PR0402MB3396: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(185117386973197)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040501)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3231220)(944501161)(3002001)(6055026)(6041288)(20161123558120)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(6072148)(201708071742011); SRVR:AM0PR0402MB3396; BCL:0; PCL:0; RULEID:; SRVR:AM0PR0402MB3396; x-forefront-prvs: 05954A7C45 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39380400002)(396003)(376002)(346002)(366004)(39860400002)(13464003)(53474002)(199004)(189003)(53754006)(33656002)(6506007)(105586002)(3660700001)(6436002)(53546011)(99286004)(55016002)(93886005)(9686003)(106356001)(5660300001)(6306002)(6116002)(7696005)(68736007)(3846002)(59450400001)(53936002)(66066001)(53946003)(97736004)(55236004)(74316002)(26005)(45080400002)(7736002)(305945005)(6246003)(76176011)(229853002)(110136005)(102836004)(186003)(5250100002)(8936002)(478600001)(14454004)(81156014)(81166006)(2501003)(8676002)(2900100001)(25786009)(3280700002)(2950100002)(316002)(86362001)(966005)(4326008)(2906002)(579004)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0402MB3396; H:AM0PR0402MB3940.eurprd04.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: DJyEyxrw4BmsecbnJOxSiJbc08Jh2XQEKJjSRVXEVnmjaIBtWrxJf8BGsJW5y24bqFsJfKqkJf1QsV7ZFJw3wHQgkoRSYe8QLAIdj8GZ+GBteTWX0dHbcmMfux55JMkk5y72XohHiIydy1hSmxEeEVwx48y+MW7SyXxTA8tqiv0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33fd2507-e0de-4b67-8d99-08d57ce2ea33 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Feb 2018 06:33:57.5555 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3396 Subject: Re: [RFC] MdePkg/BaseLib: Change BitField functions. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Feb 2018 06:28:01 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGVsbG8gTGFzemxvLA0KDQpUaGFua3MgZm9yIHlvdXIgZXhwbGFuYXRpb24uDQpOb3cgSSB1bmRl cnN0YW5kIHRoZSB1c2FnZSBvZiBiaXQgZmllbGQgZnVuY3Rpb25zLg0KDQpSZWdhcmRzLA0KUGFu a2FqIEJhbnNhbA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExhc3ps byBFcnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiBTZW50OiBGcmlkYXksIEZlYnJ1 YXJ5IDIzLCAyMDE4IDU6NDMgUE0NCj4gVG86IFBhbmthaiBCYW5zYWwgPHBhbmthai5iYW5zYWxA bnhwLmNvbT47IEdhbywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnDQo+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1JGQ10gTWRlUGtnL0Jhc2VMaWI6 IENoYW5nZSBCaXRGaWVsZCBmdW5jdGlvbnMuDQo+IA0KPiBPbiAwMi8yMy8xOCAxMjoxNiwgUGFu a2FqIEJhbnNhbCB3cm90ZToNCj4gPiBIaSBMaW1pbmcgR2FvLA0KPiA+DQo+ID4gVGhhbmtzIGZv ciB5b3VyIGNvbW1lbnRzLg0KPiA+IEkgYW0gbm90IGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgZnVs bCBwdXJwb3NlIG9mIHRoZSBCaXRGaWVsZCBmdW5jdGlvbnMuDQo+ID4gQ2FuIHlvdSBwbGVhc2Ug aGVscCBtZSB0byB1bmRlcnN0YW5kLg0KPiA+DQo+ID4gQXMgcGVyIG15IHVuZGVyc3RhbmRpbmcg Og0KPiA+IEJpdEZpZWxkQW5kMzIgKE9wZXJhbmQsIFN0YXJ0Qml0LCBFbmRCaXQsIEFuZERhdGEp IDoNCj4gPg0KPiA+IFdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBiaXR3aXNlIGFuZCAoJikgYmV0 d2VlbiBPcGVyYW5kJ3MgYml0cyAoU3RhcnRCaXQNCj4gdG8gRW5kQml0LCBib3RoIGluY2x1c2l2 ZSkgYW5kIEFuZERhdGEncyBiaXRzIChTdGFydGJpdCB0byBFbmRiaXQsIGJvdGgNCj4gaW5jbHVz aXZlKS4NCj4gPiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVuIHdoeSBpcyB0aGVyZSBhIHJlc3Ry aWN0aW9uIG9uIEFuZERhdGEgPyAoSWYNCj4gPiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBi aXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdA0KPiA+IGFuZCBFbmRCaXQs IHRoZW4gQVNTRVJUKCkuKQ0KPiA+DQo+ID4gSG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5k ZWQgdG8gYmUgdXNlZCA/DQo+IA0KPiBTdGFydEJpdCBhbmQgRW5kQml0IGRlc2lnbmF0ZSBhIGJp dC1maWVsZCB3aXRoaW4gT3BlcmFuZC4gT3BlcmFuZCBpcyB0aGUNCj4gImNvbnRhaW5lciIgb2Yg dGhlIGJpdC1maWVsZC4NCj4gDQo+ICJBbmREYXRhIiBpcyBtZWFudCBmb3IgdGhlIGJpdC1maWVs ZCBpdHNlbGYsIG5vdCB0aGUgY29udGFpbmVyLiBBbmREYXRhIGlzDQo+IGFwcGxpZWQgcmVsYXRp dmUgdG8gU3RhcnRCaXQsIGFuZCAocmVsYXRpdmUgdG8gU3RhcnRCaXQpIGl0IG11c3Qgbm90IGV4 Y2VlZA0KPiBFbmRCaXQuDQo+IA0KPiBTbyBCaXRGaWVsZEFuZDMyKCkgYXBwbGllcyB0aGUgQW5k RGF0YSBtYXNrIHRvIHRoZSBiaXQtZmllbGQgd2l0aGluIHRoZSAzMi1iaXQNCj4gY29udGFpbmVy IHdvcmQuIEJpdHMgb3V0c2lkZSBvZiB0aGUgYml0LWZpZWxkIGFyZSB1bmNoYW5nZWQuDQo+IA0K PiBMYXN6bG8NCj4gDQo+IA0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBG cm9tOiBHYW8sIExpbWluZyBbbWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tXQ0KPiA+PiBTZW50 OiBGcmlkYXksIEZlYnJ1YXJ5IDIzLCAyMDE4IDQ6MzMgUE0NCj4gPj4gVG86IFBhbmthaiBCYW5z YWwgPHBhbmthai5iYW5zYWxAbnhwLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4+ IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4+ IFN1YmplY3Q6IFJFOiBbUkZDXSBNZGVQa2cvQmFzZUxpYjogQ2hhbmdlIEJpdEZpZWxkIGZ1bmN0 aW9ucy4NCj4gPj4NCj4gPj4gUGFua2FqOg0KPiA+PiAgIE9yRGF0YSwgQW5kRGF0YSBhbmQgVmFs dWUgYXJlIHRoZSBiaXQgZmllbGQgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4+IFN0YXJ0Qml0IGFu ZCBFbmRCaXQuIFRoZXkgYXJlIG5vdCB0aGUgZnVsbCB2YWx1ZS4gVGhleSBtdXN0IGJlDQo+ID4+ IGFkanVzdGVkIHRvIHRoZSBmdWxsIHZhbHVlLCB0aGVuIGNhbGN1bGF0ZWQgd2l0aCBPcGVyYW5k Lg0KPiA+Pg0KPiA+PiAgIEFuZCwgd2UgdXNlIExTaGl0KCkgb3IgUlNoaXQoKSBmdW5jdGlvbiBm b3IgNjRiaXQgb3BlcmFuZCwgYmVjYXVzZQ0KPiA+PiB3ZSBmaW5kIFZTIGNvbXBpbGVyIG1heSBn ZW5lcmF0ZSB0aGUgaW50cmluc2ljIGZ1bmN0aW9uIHdoZW4gPj4gb3IgPDwNCj4gPj4gaXMgdXNl ZCA2NGJpdCBvcGVyYW5kIG9uIDMyYml0IGFyY2guDQo+ID4+DQo+ID4+IFRoYW5rcw0KPiA+PiBM aW1pbmcNCj4gPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+PiBGcm9tOiBQYW5r YWogQmFuc2FsIFttYWlsdG86cGFua2FqLmJhbnNhbEBueHAuY29tXQ0KPiA+Pj4gU2VudDogVHVl c2RheSwgRmVicnVhcnkgMjAsIDIwMTggMTI6NTAgUE0NCj4gPj4+IFRvOiBlZGsyLWRldmVsQGxp c3RzLjAxLm9yZw0KPiA+Pj4gQ2M6IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47 IEtpbm5leSwgTWljaGFlbCBEDQo+ID4+PiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ ID4+PiBTdWJqZWN0OiBSRTogW1JGQ10gTWRlUGtnL0Jhc2VMaWI6IENoYW5nZSBCaXRGaWVsZCBm dW5jdGlvbnMuDQo+ID4+Pg0KPiA+Pj4gSGkgZXZlcnlib2R5LA0KPiA+Pj4NCj4gPj4+IEFueSBj b21tZW50cyBvbiB0aGlzIGNoYW5nZSA/DQo+ID4+Pg0KPiA+Pj4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4+Pj4gRnJvbTogUGFua2FqIEJhbnNhbA0KPiA+Pj4+IFNlbnQ6IEZyaWRh eSwgRmVicnVhcnkgMDksIDIwMTggNDozMCBQTQ0KPiA+Pj4+IFRvOiBlZGsyLWRldmVsQGxpc3Rz LjAxLm9yZw0KPiA+Pj4+IENjOiBQYW5rYWogQmFuc2FsIDxwYW5rYWouYmFuc2FsQG54cC5jb20+ OyBNaWNoYWVsIEQgS2lubmV5DQo+ID4+Pj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsg TGltaW5nIEdhbyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+ID4+Pj4gU3ViamVjdDogW1JGQ10g TWRlUGtnL0Jhc2VMaWI6IENoYW5nZSBCaXRGaWVsZCBmdW5jdGlvbnMuDQo+ID4+Pj4NCj4gPj4+ PiBUaGUgYml0IGZpZWxkIGZ1bmN0aW9ucyBpbiBNZGVQa2cgYXJlIG5vdCB3b3JraW5nIGFzIGV4 cGVjdGVkLg0KPiA+Pj4+IFRoZSByZXN0cmljdGlvbnMgb24gVmFsdWUgcGFyYW1ldGVyIHN1Y2gg dGhhdCBWYWx1ZSBzaG91bGQgbm90IGJlDQo+ID4+Pj4gZ3JlYXRlciB0aGFuIHRoZSBiaXRtYXNr IHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdCBhbmQNCj4gPj4+PiBFbmRCaXQgZG9l c24ndCBzZWVtDQo+ID4+PiB0bw0KPiA+Pj4+IG1ha2Ugc2Vuc2UuDQo+ID4+Pj4NCj4gPj4+PiBB bHNvIHRoZSByZXN0cmljdGlvbiBvbiBFbmQgYml0IHRvIG5vdCBiZSBlcXVhbCB0byBzdGFydCBi aXQNCj4gPj4+PiBwcm9oaWJpdHMgc2luZ2xlIGJpdCBjaGFuZ2UuDQo+ID4+Pj4NCj4gPj4+PiBU aGlzIGlzIGFuIGF0dGVtcHQgdG8gY29ycmVjdCB0aGVzZSBsaW1pdGF0aW9ucy4NCj4gPj4+Pg0K PiA+Pj4+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4N Cj4gPj4+PiBDYzogTGltaW5nIEdhbyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+ID4+Pj4gQ29u dHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+ Pj4+IFNpZ25lZC1vZmYtYnk6IFBhbmthaiBCYW5zYWwgPHBhbmthai5iYW5zYWxAbnhwLmNvbT4N Cj4gPj4+PiAtLS0NCj4gPj4+Pg0KPiA+Pj4+IE5vdGVzOg0KPiA+Pj4+ICAgICBUaGlzIGlzIGEg UkZDIHBhdGNoLg0KPiA+Pj4+DQo+ID4+Pj4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvQml0Rmll bGQuYyB8IDE3OQ0KPiA+Pj4+ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0NCj4gPj4+PiAg MSBmaWxlIGNoYW5nZWQsIDg5IGluc2VydGlvbnMoKyksIDkwIGRlbGV0aW9ucygtKQ0KPiA+Pj4+ DQo+ID4+Pj4gZGlmZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvQml0RmllbGQuYw0K PiA+Pj4+IGIvTWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9CaXRGaWVsZC5jDQo+ID4+Pj4gaW5kZXgg ZWI5ZTI3Ni4uMmI1YmU1MiAxMDA2NDQNCj4gPj4+PiAtLS0gYS9NZGVQa2cvTGlicmFyeS9CYXNl TGliL0JpdEZpZWxkLmMNCj4gPj4+PiArKysgYi9NZGVQa2cvTGlicmFyeS9CYXNlTGliL0JpdEZp ZWxkLmMNCj4gPj4+PiBAQCAtMiw2ICsyLDggQEANCj4gPj4+PiAgICBCaXQgZmllbGQgZnVuY3Rp b25zIG9mIEJhc2VMaWIuDQo+ID4+Pj4NCj4gPj4+PiAgICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAy MDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiA+Pj4+IHJlc2VydmVkLjxCUj4N Cj4gPj4+PiArICBDb3B5cmlnaHQgMjAxOCBOWFANCj4gPj4+PiArDQo+ID4+Pj4gICAgVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiA+Pj4+ICAgIGFyZSBsaWNl bnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zDQo+ ID4+Pj4gb2YgdGhlIEJTRCBMaWNlbnNlDQo+ID4+Pj4gICAgd2hpY2ggYWNjb21wYW5pZXMgdGhp cyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZQ0KPiA+Pj4+IGxpY2Vuc2UgbWF5 IGJlIGZvdW5kIGF0IEBAIC0xNCw2ICsxNiwxMiBAQA0KPiA+Pj4+DQo+ID4+Pj4gICNpbmNsdWRl ICJCYXNlTGliSW50ZXJuYWxzLmgiDQo+ID4+Pj4NCj4gPj4+PiArI2RlZmluZSBCSVRNQVNLX1VO SVROKFN0YXJ0Qml0LCBFbmRCaXQpIFwNCj4gPj4+PiArICAgICgoKE1BWF9VSU5UTikgPDwgKFN0 YXJ0Qml0KSkgJiAoTUFYX1VJTlROID4+ICgoc2l6ZW9mIChVSU5UTikNCj4gPj4+PiArKg0KPiA+ Pj4+ICs4KQ0KPiA+Pj4+ICstIDEgLSAoRW5kQml0KSkpKQ0KPiA+Pj4+ICsNCj4gPj4+PiArI2Rl ZmluZSBCSVRNQVNLX1VOSVQ2NChTdGFydEJpdCwgRW5kQml0KSBcDQo+ID4+Pj4gKyAgICAoKChN QVhfVUlOVDY0KSA8PCAoU3RhcnRCaXQpKSAmIChNQVhfVUlOVDY0ID4+ICgoc2l6ZW9mDQo+ID4+ Pj4gKyhVSU5UNjQpDQo+ID4+Pj4gKyoNCj4gPj4+PiArOCkgLSAxIC0gKEVuZEJpdCkpKSkNCj4g Pj4+PiArDQo+ID4+Pj4gIC8qKg0KPiA+Pj4+ICAgIFdvcmtlciBmdW5jdGlvbiB0aGF0IHJldHVy bnMgYSBiaXQgZmllbGQgZnJvbSBPcGVyYW5kLg0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTM0LDExICs0 Miw5IEBAIEludGVybmFsQmFzZUxpYkJpdEZpZWxkUmVhZFVpbnQgKA0KPiA+Pj4+ICAgIElOICAg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQNCj4gPj4+PiAgICApDQo+ID4+Pj4g IHsNCj4gPj4+PiAtICAvLw0KPiA+Pj4+IC0gIC8vIH4oKFVJTlROKS0yIDw8IEVuZEJpdCkgaXMg YSBtYXNrIGluIHdoaWNoIGJpdFswXSB0aHJ1DQo+ID4+Pj4gYml0W0VuZEJpdF0NCj4gPj4+PiAt ICAvLyBhcmUgMSdzIHdoaWxlIGJpdFtFbmRCaXQgKyAxXSB0aHJ1IHRoZSBtb3N0IHNpZ25pZmlj YW50IGJpdCBhcmUgMCdzLg0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgcmV0dXJuIChPcGVyYW5k ICYgfigoVUlOVE4pLTIgPDwgRW5kQml0KSkgPj4gU3RhcnRCaXQ7DQo+ID4+Pj4gKyAgVUlOVE4g IE1hc2sgPSBCSVRNQVNLX1VOSVROIChTdGFydEJpdCwgRW5kQml0KTsNCj4gPj4+PiArDQo+ID4+ Pj4gKyAgcmV0dXJuICggKE9wZXJhbmQgJiBNYXNrKSA+PiBTdGFydEJpdCk7DQo+ID4+Pj4gIH0N Cj4gPj4+Pg0KPiA+Pj4+ICAvKioNCj4gPj4+PiBAQCAtNjgsMTkgKzc0LDkgQEAgSW50ZXJuYWxC YXNlTGliQml0RmllbGRPclVpbnQgKA0KPiA+Pj4+ICAgIElOICAgICAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICBPckRhdGENCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAtICAvLw0K PiA+Pj4+IC0gIC8vIEhpZ2hlciBiaXRzIGluIE9yRGF0YSB0aG9zZSBhcmUgbm90IHVzZWQgbXVz dCBiZSB6ZXJvLg0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgLy8gRW5kQml0IC0gU3RhcnRCaXQg KyAxIG1pZ2h0IGJlIDMyIHdoaWxlIHRoZSByZXN1bHQgcmlnaHQNCj4gPj4+PiBzaGlmdGluZyAz MiBvbiBhIDMyYml0IGludGVnZXIgaXMgdW5kZWZpbmVkLA0KPiA+Pj4+IC0gIC8vIFNvIHRoZSBs b2dpYyBpcyB1cGRhdGVkIHRvIHJpZ2h0IHNoaWZ0IChFbmRCaXQgLSBTdGFydEJpdCkNCj4gPj4+ PiBiaXRzIGFuZCBjb21wYXJlIHRoZSBsYXN0IGJpdCBkaXJlY3RseS4NCj4gPj4+PiAtICAvLw0K PiA+Pj4+IC0gIEFTU0VSVCAoKE9yRGF0YSA+PiAoRW5kQml0IC0gU3RhcnRCaXQpKSA9PSAoKE9y RGF0YSA+PiAoRW5kQml0IC0NCj4gPj4+PiBTdGFydEJpdCkpICYgMSkpOw0KPiA+Pj4+IC0NCj4g Pj4+PiAtICAvLw0KPiA+Pj4+IC0gIC8vIH4oKFVJTlROKS0yIDw8IEVuZEJpdCkgaXMgYSBtYXNr IGluIHdoaWNoIGJpdFswXSB0aHJ1DQo+ID4+Pj4gYml0W0VuZEJpdF0NCj4gPj4+PiAtICAvLyBh cmUgMSdzIHdoaWxlIGJpdFtFbmRCaXQgKyAxXSB0aHJ1IHRoZSBtb3N0IHNpZ25pZmljYW50IGJp dCBhcmUgMCdzLg0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgcmV0dXJuIE9wZXJhbmQgfCAoKE9y RGF0YSA8PCBTdGFydEJpdCkgJiB+KChVSU5UTikgLTIgPDwNCj4gPj4+PiBFbmRCaXQpKTsNCj4g Pj4+PiArICBVSU5UTiAgTWFzayA9IEJJVE1BU0tfVU5JVE4gKFN0YXJ0Qml0LCBFbmRCaXQpOw0K PiA+Pj4+ICsNCj4gPj4+PiArICByZXR1cm4gKCAoIChPcGVyYW5kIHwgT3JEYXRhKSAmIE1hc2sp IHwgKE9wZXJhbmQgJiB+TWFzaykpOw0KPiA+Pj4+ICB9DQo+ID4+Pj4NCj4gPj4+PiAgLyoqDQo+ ID4+Pj4gQEAgLTExMCwxOSArMTA2LDM4IEBAIEludGVybmFsQmFzZUxpYkJpdEZpZWxkQW5kVWlu dCAoDQo+ID4+Pj4gICAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFuZERhdGEN Cj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAtICAvLw0KPiA+Pj4+IC0gIC8vIEhpZ2hl ciBiaXRzIGluIEFuZERhdGEgdGhvc2UgYXJlIG5vdCB1c2VkIG11c3QgYmUgemVyby4NCj4gPj4+ PiAtICAvLw0KPiA+Pj4+IC0gIC8vIEVuZEJpdCAtIFN0YXJ0Qml0ICsgMSBtaWdodCBiZSAzMiB3 aGlsZSB0aGUgcmVzdWx0IHJpZ2h0DQo+ID4+Pj4gc2hpZnRpbmcgMzIgb24gYSAzMmJpdCBpbnRl Z2VyIGlzIHVuZGVmaW5lZCwNCj4gPj4+PiAtICAvLyBTbyB0aGUgbG9naWMgaXMgdXBkYXRlZCB0 byByaWdodCBzaGlmdCAoRW5kQml0IC0gU3RhcnRCaXQpDQo+ID4+Pj4gYml0cyBhbmQgY29tcGFy ZSB0aGUgbGFzdCBiaXQgZGlyZWN0bHkuDQo+ID4+Pj4gLSAgLy8NCj4gPj4+PiAtICBBU1NFUlQg KChBbmREYXRhID4+IChFbmRCaXQgLSBTdGFydEJpdCkpID09ICgoQW5kRGF0YSA+PiAoRW5kQml0 DQo+ID4+Pj4gLQ0KPiA+Pj4gU3RhcnRCaXQpKQ0KPiA+Pj4+ICYgMSkpOw0KPiA+Pj4+IC0NCj4g Pj4+PiAtICAvLw0KPiA+Pj4+IC0gIC8vIH4oKFVJTlROKS0yIDw8IEVuZEJpdCkgaXMgYSBtYXNr IGluIHdoaWNoIGJpdFswXSB0aHJ1DQo+ID4+Pj4gYml0W0VuZEJpdF0NCj4gPj4+PiAtICAvLyBh cmUgMSdzIHdoaWxlIGJpdFtFbmRCaXQgKyAxXSB0aHJ1IHRoZSBtb3N0IHNpZ25pZmljYW50IGJp dCBhcmUgMCdzLg0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgcmV0dXJuIE9wZXJhbmQgJiB+KCh+ QW5kRGF0YSA8PCBTdGFydEJpdCkgJiB+KChVSU5UTiktMiA8PA0KPiA+Pj4+IEVuZEJpdCkpOw0K PiA+Pj4+ICsgIFVJTlROICBNYXNrID0gQklUTUFTS19VTklUTiAoU3RhcnRCaXQsIEVuZEJpdCk7 DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgIHJldHVybiAgKCAoIChPcGVyYW5kICYgQW5kRGF0YSkgJiBN YXNrKSB8IChPcGVyYW5kICYgfk1hc2spKTsgfQ0KPiA+Pj4+ICsNCj4gPj4+PiArLyoqDQo+ID4+ Pj4gKyAgV29ya2VyIGZ1bmN0aW9uIHRoYXQgd3JpdGVzIGEgYml0IGZpZWxkIHRvIGFuIHZhbHVl LCBhbmQgcmV0dXJucw0KPiA+Pj4+ICt0aGUNCj4gPj4gcmVzdWx0Lg0KPiA+Pj4+ICsNCj4gPj4+ PiArICBXcml0ZXMgVmFsdWUgdG8gdGhlIGJpdCBmaWVsZCBzcGVjaWZpZWQgYnkgdGhlIFN0YXJ0 Qml0IGFuZCB0aGUNCj4gPj4+PiArIEVuZEJpdCBpbiAgT3BlcmFuZC4gQWxsIG90aGVyIGJpdHMg aW4gT3BlcmFuZCBhcmUgcHJlc2VydmVkLiBUaGUNCj4gPj4+PiArIG5ldyA4LWJpdCB2YWx1ZSBp cyAgcmV0dXJuZWQuDQo+ID4+Pj4gKw0KPiA+Pj4+ICsgIEBwYXJhbSAgT3BlcmFuZCAgIE9wZXJh bmQgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgYml0ZmllbGQNCj4gPj4gb3BlcmF0aW9uLg0KPiA+ Pj4+ICsgIEBwYXJhbSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdCBzaWduaWZp Y2FudCBiaXQgaW4gdGhlIGJpdA0KPiBmaWVsZC4NCj4gPj4+PiArICBAcGFyYW0gIEVuZEJpdCAg ICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdA0KPiBm aWVsZC4NCj4gPj4+PiArICBAcGFyYW0gIFZhbHVlICAgICBUaGUgbmV3IHZhbHVlIG9mIHRoZSBi aXQgZmllbGQuDQo+ID4+Pj4gKw0KPiA+Pj4+ICsgIEByZXR1cm4gVGhlIG5ldyB2YWx1ZS4NCj4g Pj4+PiArDQo+ID4+Pj4gKyoqLw0KPiA+Pj4+ICtVSU5UTg0KPiA+Pj4+ICtFRklBUEkNCj4gPj4+ PiArSW50ZXJuYWxCYXNlTGliQml0RmllbGRXcml0ZVVpbnQgKA0KPiA+Pj4+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBPcGVyYW5kLA0KPiA+Pj4+ICsgIElOICAgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwNCj4gPj4+PiArICBJTiAgICAgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgRW5kQml0LA0KPiA+Pj4+ICsgIElOICAgICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiA+Pj4+ICsgICkNCj4gPj4+PiArew0KPiA+Pj4+ICsg IFVJTlROICBNYXNrID0gQklUTUFTS19VTklUTiAoU3RhcnRCaXQsIEVuZEJpdCk7DQo+ID4+Pj4g Kw0KPiA+Pj4+ICsgIHJldHVybiAgKCAoVmFsdWUgJiBNYXNrKSB8IChPcGVyYW5kICYgfk1hc2sp KTsNCj4gPj4+PiAgfQ0KPiA+Pj4+DQo+ID4+Pj4gIC8qKg0KPiA+Pj4+IEBAIC0xNTMsNyArMTY4 LDcgQEAgQml0RmllbGRSZWFkOCAoDQo+ID4+Pj4gICAgKQ0KPiA+Pj4+ICB7DQo+ID4+Pj4gICAg QVNTRVJUIChFbmRCaXQgPCA4KTsNCj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJp dCk7DQo+ID4+Pj4gKyAgQVNTRVJUIChTdGFydEJpdCA8IEVuZEJpdCk7DQo+ID4+Pj4gICAgcmV0 dXJuIChVSU5UOClJbnRlcm5hbEJhc2VMaWJCaXRGaWVsZFJlYWRVaW50IChPcGVyYW5kLA0KPiA+ Pj4+IFN0YXJ0Qml0LCBFbmRCaXQpOyAgfQ0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTE5MCw4ICsyMDUs OCBAQCBCaXRGaWVsZFdyaXRlOCAoDQo+ID4+Pj4gICAgKQ0KPiA+Pj4+ICB7DQo+ID4+Pj4gICAg QVNTRVJUIChFbmRCaXQgPCA4KTsNCj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJp dCk7DQo+ID4+Pj4gLSAgcmV0dXJuIEJpdEZpZWxkQW5kVGhlbk9yOCAoT3BlcmFuZCwgU3RhcnRC aXQsIEVuZEJpdCwgMCwgVmFsdWUpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRC aXQpOw0KPiA+Pj4+ICsgIHJldHVybiAoVUlOVDgpSW50ZXJuYWxCYXNlTGliQml0RmllbGRXcml0 ZVVpbnQgKE9wZXJhbmQsDQo+ID4+Pj4gKyBTdGFydEJpdCwgRW5kQml0LA0KPiA+Pj4+IFZhbHVl KTsNCj4gPj4+PiAgfQ0KPiA+Pj4+DQo+ID4+Pj4gIC8qKg0KPiA+Pj4+IEBAIC0yMjgsNyArMjQz LDcgQEAgQml0RmllbGRPcjggKA0KPiA+Pj4+ICAgICkNCj4gPj4+PiAgew0KPiA+Pj4+ICAgIEFT U0VSVCAoRW5kQml0IDwgOCk7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFydEJpdCA8PSBFbmRCaXQp Ow0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0KPiA+Pj4+ICAgIHJldHVy biAoVUlOVDgpSW50ZXJuYWxCYXNlTGliQml0RmllbGRPclVpbnQgKE9wZXJhbmQsIFN0YXJ0Qml0 LA0KPiA+Pj4+IEVuZEJpdCwgT3JEYXRhKTsgIH0NCj4gPj4+Pg0KPiA+Pj4+IEBAIC0yNjYsNyAr MjgxLDcgQEAgQml0RmllbGRBbmQ4ICgNCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAg ICBBU1NFUlQgKEVuZEJpdCA8IDgpOw0KPiA+Pj4+IC0gIEFTU0VSVCAoU3RhcnRCaXQgPD0gRW5k Qml0KTsNCj4gPj4+PiArICBBU1NFUlQgKFN0YXJ0Qml0IDwgRW5kQml0KTsNCj4gPj4+PiAgICBy ZXR1cm4gKFVJTlQ4KUludGVybmFsQmFzZUxpYkJpdEZpZWxkQW5kVWludCAoT3BlcmFuZCwgU3Rh cnRCaXQsDQo+ID4+Pj4gRW5kQml0LCBBbmREYXRhKTsgIH0NCj4gPj4+Pg0KPiA+Pj4+IEBAIC0y NzUsNyArMjkwLDcgQEAgQml0RmllbGRBbmQ4ICgNCj4gPj4+PiAgICBiaXR3aXNlIE9SLCBhbmQg cmV0dXJucyB0aGUgcmVzdWx0Lg0KPiA+Pj4+DQo+ID4+Pj4gICAgUGVyZm9ybXMgYSBiaXR3aXNl IEFORCBiZXR3ZWVuIHRoZSBiaXQgZmllbGQgc3BlY2lmaWVkIGJ5DQo+ID4+Pj4gU3RhcnRCaXQg YW5kIEVuZEJpdA0KPiA+Pj4+IC0gIGluIE9wZXJhbmQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQg YnkgQW5kRGF0YSwgZm9sbG93ZWQgYnkgYQ0KPiA+Pj4+IGJpdHdpc2UNCj4gPj4+PiArICBpbiBP cGVyYW5kIGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGZvbGxvd2VkIGJ5IGEN Cj4gPj4+PiArIGJpdHdpc2UNCj4gPj4+PiAgICBPUiB3aXRoIHZhbHVlIHNwZWNpZmllZCBieSBP ckRhdGEuIEFsbCBvdGhlciBiaXRzIGluIE9wZXJhbmQgYXJlDQo+ID4+Pj4gICAgcHJlc2VydmVk LiBUaGUgbmV3IDgtYml0IHZhbHVlIGlzIHJldHVybmVkLg0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTMw OCw3ICszMjMsNyBAQCBCaXRGaWVsZEFuZFRoZW5PcjggKA0KPiA+Pj4+ICAgICkNCj4gPj4+PiAg ew0KPiA+Pj4+ICAgIEFTU0VSVCAoRW5kQml0IDwgOCk7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFy dEJpdCA8PSBFbmRCaXQpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0K PiA+Pj4+ICAgIHJldHVybiBCaXRGaWVsZE9yOCAoDQo+ID4+Pj4gICAgICAgICAgICAgQml0Rmll bGRBbmQ4IChPcGVyYW5kLCBTdGFydEJpdCwgRW5kQml0LCBBbmREYXRhKSwNCj4gPj4+PiAgICAg ICAgICAgICBTdGFydEJpdCwNCj4gPj4+PiBAQCAtMzQ1LDcgKzM2MCw3IEBAIEJpdEZpZWxkUmVh ZDE2ICgNCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAgICBBU1NFUlQgKEVuZEJpdCA8 IDE2KTsNCj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJpdCk7DQo+ID4+Pj4gKyAg QVNTRVJUIChTdGFydEJpdCA8IEVuZEJpdCk7DQo+ID4+Pj4gICAgcmV0dXJuIChVSU5UMTYpSW50 ZXJuYWxCYXNlTGliQml0RmllbGRSZWFkVWludCAoT3BlcmFuZCwNCj4gPj4+PiBTdGFydEJpdCwN Cj4gPj4+IEVuZEJpdCk7DQo+ID4+Pj4gIH0NCj4gPj4+Pg0KPiA+Pj4+IEBAIC0zODIsOCArMzk3 LDggQEAgQml0RmllbGRXcml0ZTE2ICgNCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAg ICBBU1NFUlQgKEVuZEJpdCA8IDE2KTsNCj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVu ZEJpdCk7DQo+ID4+Pj4gLSAgcmV0dXJuIEJpdEZpZWxkQW5kVGhlbk9yMTYgKE9wZXJhbmQsIFN0 YXJ0Qml0LCBFbmRCaXQsIDAsDQo+ID4+Pj4gVmFsdWUpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3Rh cnRCaXQgPCBFbmRCaXQpOw0KPiA+Pj4+ICsgIHJldHVybiAoVUlOVDE2KUludGVybmFsQmFzZUxp YkJpdEZpZWxkV3JpdGVVaW50IChPcGVyYW5kLA0KPiA+Pj4+ICsgU3RhcnRCaXQsDQo+ID4+Pj4g RW5kQml0LCBWYWx1ZSk7DQo+ID4+Pj4gIH0NCj4gPj4+Pg0KPiA+Pj4+ICAvKioNCj4gPj4+PiBA QCAtNDIwLDcgKzQzNSw3IEBAIEJpdEZpZWxkT3IxNiAoDQo+ID4+Pj4gICAgKQ0KPiA+Pj4+ICB7 DQo+ID4+Pj4gICAgQVNTRVJUIChFbmRCaXQgPCAxNik7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFy dEJpdCA8PSBFbmRCaXQpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0K PiA+Pj4+ICAgIHJldHVybiAoVUlOVDE2KUludGVybmFsQmFzZUxpYkJpdEZpZWxkT3JVaW50IChP cGVyYW5kLCBTdGFydEJpdCwNCj4gPj4+PiBFbmRCaXQsIE9yRGF0YSk7ICB9DQo+ID4+Pj4NCj4g Pj4+PiBAQCAtNDU4LDcgKzQ3Myw3IEBAIEJpdEZpZWxkQW5kMTYgKA0KPiA+Pj4+ICAgICkNCj4g Pj4+PiAgew0KPiA+Pj4+ICAgIEFTU0VSVCAoRW5kQml0IDwgMTYpOw0KPiA+Pj4+IC0gIEFTU0VS VCAoU3RhcnRCaXQgPD0gRW5kQml0KTsNCj4gPj4+PiArICBBU1NFUlQgKFN0YXJ0Qml0IDwgRW5k Qml0KTsNCj4gPj4+PiAgICByZXR1cm4gKFVJTlQxNilJbnRlcm5hbEJhc2VMaWJCaXRGaWVsZEFu ZFVpbnQgKE9wZXJhbmQsDQo+ID4+Pj4gU3RhcnRCaXQsIEVuZEJpdCwgQW5kRGF0YSk7ICB9DQo+ ID4+Pj4NCj4gPj4+PiBAQCAtNDY3LDcgKzQ4Miw3IEBAIEJpdEZpZWxkQW5kMTYgKA0KPiA+Pj4+ ICAgIGJpdHdpc2UgT1IsIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuDQo+ID4+Pj4NCj4gPj4+PiAg ICBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIGJpdCBmaWVsZCBzcGVjaWZpZWQg YnkNCj4gPj4+PiBTdGFydEJpdCBhbmQgRW5kQml0DQo+ID4+Pj4gLSAgaW4gT3BlcmFuZCBhbmQg dGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmREYXRhLCBmb2xsb3dlZCBieSBhDQo+ID4+Pj4gYml0 d2lzZQ0KPiA+Pj4+ICsgIGluIE9wZXJhbmQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5k RGF0YSwgZm9sbG93ZWQgYnkgYQ0KPiA+Pj4+ICsgYml0d2lzZQ0KPiA+Pj4+ICAgIE9SIHdpdGgg dmFsdWUgc3BlY2lmaWVkIGJ5IE9yRGF0YS4gQWxsIG90aGVyIGJpdHMgaW4gT3BlcmFuZCBhcmUN Cj4gPj4+PiAgICBwcmVzZXJ2ZWQuIFRoZSBuZXcgMTYtYml0IHZhbHVlIGlzIHJldHVybmVkLg0K PiA+Pj4+DQo+ID4+Pj4gQEAgLTUwMCw3ICs1MTUsNyBAQCBCaXRGaWVsZEFuZFRoZW5PcjE2ICgN Cj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAgICBBU1NFUlQgKEVuZEJpdCA8IDE2KTsN Cj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJpdCk7DQo+ID4+Pj4gKyAgQVNTRVJU IChTdGFydEJpdCA8IEVuZEJpdCk7DQo+ID4+Pj4gICAgcmV0dXJuIEJpdEZpZWxkT3IxNiAoDQo+ ID4+Pj4gICAgICAgICAgICAgQml0RmllbGRBbmQxNiAoT3BlcmFuZCwgU3RhcnRCaXQsIEVuZEJp dCwgQW5kRGF0YSksDQo+ID4+Pj4gICAgICAgICAgICAgU3RhcnRCaXQsDQo+ID4+Pj4gQEAgLTUz Nyw3ICs1NTIsNyBAQCBCaXRGaWVsZFJlYWQzMiAoDQo+ID4+Pj4gICAgKQ0KPiA+Pj4+ICB7DQo+ ID4+Pj4gICAgQVNTRVJUIChFbmRCaXQgPCAzMik7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFydEJp dCA8PSBFbmRCaXQpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0KPiA+ Pj4+ICAgIHJldHVybiAoVUlOVDMyKUludGVybmFsQmFzZUxpYkJpdEZpZWxkUmVhZFVpbnQgKE9w ZXJhbmQsDQo+ID4+Pj4gU3RhcnRCaXQsDQo+ID4+PiBFbmRCaXQpOw0KPiA+Pj4+ICB9DQo+ID4+ Pj4NCj4gPj4+PiBAQCAtNTc0LDggKzU4OSw4IEBAIEJpdEZpZWxkV3JpdGUzMiAoDQo+ID4+Pj4g ICAgKQ0KPiA+Pj4+ICB7DQo+ID4+Pj4gICAgQVNTRVJUIChFbmRCaXQgPCAzMik7DQo+ID4+Pj4g LSAgQVNTRVJUIChTdGFydEJpdCA8PSBFbmRCaXQpOw0KPiA+Pj4+IC0gIHJldHVybiBCaXRGaWVs ZEFuZFRoZW5PcjMyIChPcGVyYW5kLCBTdGFydEJpdCwgRW5kQml0LCAwLA0KPiA+Pj4+IFZhbHVl KTsNCj4gPj4+PiArICBBU1NFUlQgKFN0YXJ0Qml0IDwgRW5kQml0KTsNCj4gPj4+PiArICByZXR1 cm4gKFVJTlQzMilJbnRlcm5hbEJhc2VMaWJCaXRGaWVsZFdyaXRlVWludCAoT3BlcmFuZCwNCj4g Pj4+PiArIFN0YXJ0Qml0LA0KPiA+Pj4+IEVuZEJpdCwgVmFsdWUpOw0KPiA+Pj4+ICB9DQo+ID4+ Pj4NCj4gPj4+PiAgLyoqDQo+ID4+Pj4gQEAgLTYxMiw3ICs2MjcsNyBAQCBCaXRGaWVsZE9yMzIg KA0KPiA+Pj4+ICAgICkNCj4gPj4+PiAgew0KPiA+Pj4+ICAgIEFTU0VSVCAoRW5kQml0IDwgMzIp Ow0KPiA+Pj4+IC0gIEFTU0VSVCAoU3RhcnRCaXQgPD0gRW5kQml0KTsNCj4gPj4+PiArICBBU1NF UlQgKFN0YXJ0Qml0IDwgRW5kQml0KTsNCj4gPj4+PiAgICByZXR1cm4gKFVJTlQzMilJbnRlcm5h bEJhc2VMaWJCaXRGaWVsZE9yVWludCAoT3BlcmFuZCwgU3RhcnRCaXQsDQo+ID4+Pj4gRW5kQml0 LCBPckRhdGEpOyAgfQ0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTY1MCw3ICs2NjUsNyBAQCBCaXRGaWVs ZEFuZDMyICgNCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAgICBBU1NFUlQgKEVuZEJp dCA8IDMyKTsNCj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJpdCk7DQo+ID4+Pj4g KyAgQVNTRVJUIChTdGFydEJpdCA8IEVuZEJpdCk7DQo+ID4+Pj4gICAgcmV0dXJuIChVSU5UMzIp SW50ZXJuYWxCYXNlTGliQml0RmllbGRBbmRVaW50IChPcGVyYW5kLA0KPiA+Pj4+IFN0YXJ0Qml0 LCBFbmRCaXQsIEFuZERhdGEpOyAgfQ0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTY1OSw3ICs2NzQsNyBA QCBCaXRGaWVsZEFuZDMyICgNCj4gPj4+PiAgICBiaXR3aXNlIE9SLCBhbmQgcmV0dXJucyB0aGUg cmVzdWx0Lg0KPiA+Pj4+DQo+ID4+Pj4gICAgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBiZXR3ZWVu IHRoZSBiaXQgZmllbGQgc3BlY2lmaWVkIGJ5DQo+ID4+Pj4gU3RhcnRCaXQgYW5kIEVuZEJpdA0K PiA+Pj4+IC0gIGluIE9wZXJhbmQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5kRGF0YSwg Zm9sbG93ZWQgYnkgYQ0KPiA+Pj4+IGJpdHdpc2UNCj4gPj4+PiArICBpbiBPcGVyYW5kIGFuZCB0 aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGZvbGxvd2VkIGJ5IGENCj4gPj4+PiArIGJp dHdpc2UNCj4gPj4+PiAgICBPUiB3aXRoIHZhbHVlIHNwZWNpZmllZCBieSBPckRhdGEuIEFsbCBv dGhlciBiaXRzIGluIE9wZXJhbmQgYXJlDQo+ID4+Pj4gICAgcHJlc2VydmVkLiBUaGUgbmV3IDMy LWJpdCB2YWx1ZSBpcyByZXR1cm5lZC4NCj4gPj4+Pg0KPiA+Pj4+IEBAIC02OTIsNyArNzA3LDcg QEAgQml0RmllbGRBbmRUaGVuT3IzMiAoDQo+ID4+Pj4gICAgKQ0KPiA+Pj4+ICB7DQo+ID4+Pj4g ICAgQVNTRVJUIChFbmRCaXQgPCAzMik7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFydEJpdCA8PSBF bmRCaXQpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0KPiA+Pj4+ICAg IHJldHVybiBCaXRGaWVsZE9yMzIgKA0KPiA+Pj4+ICAgICAgICAgICAgIEJpdEZpZWxkQW5kMzIg KE9wZXJhbmQsIFN0YXJ0Qml0LCBFbmRCaXQsIEFuZERhdGEpLA0KPiA+Pj4+ICAgICAgICAgICAg IFN0YXJ0Qml0LA0KPiA+Pj4+IEBAIC03MjksOCArNzQ0LDExIEBAIEJpdEZpZWxkUmVhZDY0ICgN Cj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAgICBBU1NFUlQgKEVuZEJpdCA8IDY0KTsN Cj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJpdCk7DQo+ID4+Pj4gLSAgcmV0dXJu IFJTaGlmdFU2NCAoT3BlcmFuZCAmIH5MU2hpZnRVNjQgKChVSU5UNjQpLTIsIEVuZEJpdCksDQo+ ID4+Pj4gU3RhcnRCaXQpOw0KPiA+Pj4+ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0K PiA+Pj4+ICsNCj4gPj4+PiArICBVSU5UNjQgIE1hc2sgPSBCSVRNQVNLX1VOSVQ2NCAoU3RhcnRC aXQsIEVuZEJpdCk7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsgIHJldHVybiAoIChPcGVyYW5kICYgTWFz aykgPj4gU3RhcnRCaXQpOw0KPiA+Pj4+ICB9DQo+ID4+Pj4NCj4gPj4+PiAgLyoqDQo+ID4+Pj4g QEAgLTc2Niw4ICs3ODQsMTEgQEAgQml0RmllbGRXcml0ZTY0ICgNCj4gPj4+PiAgICApDQo+ID4+ Pj4gIHsNCj4gPj4+PiAgICBBU1NFUlQgKEVuZEJpdCA8IDY0KTsNCj4gPj4+PiAtICBBU1NFUlQg KFN0YXJ0Qml0IDw9IEVuZEJpdCk7DQo+ID4+Pj4gLSAgcmV0dXJuIEJpdEZpZWxkQW5kVGhlbk9y NjQgKE9wZXJhbmQsIFN0YXJ0Qml0LCBFbmRCaXQsIDAsDQo+ID4+Pj4gVmFsdWUpOw0KPiA+Pj4+ ICsgIEFTU0VSVCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0KPiA+Pj4+ICsNCj4gPj4+PiArICBVSU5U NjQgIE1hc2sgPSBCSVRNQVNLX1VOSVQ2NCAoU3RhcnRCaXQsIEVuZEJpdCk7DQo+ID4+Pj4gKw0K PiA+Pj4+ICsgIHJldHVybiAgKCAoVmFsdWUgJiBNYXNrKSB8IChPcGVyYW5kICYgfk1hc2spKTsN Cj4gPj4+PiAgfQ0KPiA+Pj4+DQo+ID4+Pj4gIC8qKg0KPiA+Pj4+IEBAIC04MDMsMjMgKzgyNCwx MiBAQCBCaXRGaWVsZE9yNjQgKA0KPiA+Pj4+ICAgIElOICAgICAgVUlOVDY0ICAgICAgICAgICAg ICAgICAgICBPckRhdGENCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAtICBVSU5UNjQg IFZhbHVlMTsNCj4gPj4+PiAtICBVSU5UNjQgIFZhbHVlMjsNCj4gPj4+PiAtDQo+ID4+Pj4gICAg QVNTRVJUIChFbmRCaXQgPCA2NCk7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFydEJpdCA8PSBFbmRC aXQpOw0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgLy8gSGlnaGVyIGJpdHMgaW4gT3JEYXRhIHRo b3NlIGFyZSBub3QgdXNlZCBtdXN0IGJlIHplcm8uDQo+ID4+Pj4gLSAgLy8NCj4gPj4+PiAtICAv LyBFbmRCaXQgLSBTdGFydEJpdCArIDEgbWlnaHQgYmUgNjQgd2hpbGUgdGhlIHJlc3VsdCByaWdo dA0KPiA+Pj4+IHNoaWZ0aW5nIDY0IG9uDQo+ID4+Pj4gUlNoaWZ0VTY0KCkgQVBJIGlzIGludmFs aWQsDQo+ID4+Pj4gLSAgLy8gU28gdGhlIGxvZ2ljIGlzIHVwZGF0ZWQgdG8gcmlnaHQgc2hpZnQg KEVuZEJpdCAtIFN0YXJ0Qml0KQ0KPiA+Pj4+IGJpdHMgYW5kIGNvbXBhcmUgdGhlIGxhc3QgYml0 IGRpcmVjdGx5Lg0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgQVNTRVJUIChSU2hpZnRVNjQgKE9y RGF0YSwgRW5kQml0IC0gU3RhcnRCaXQpID09IChSU2hpZnRVNjQNCj4gPj4+PiAoT3JEYXRhLA0K PiA+Pj4gRW5kQml0DQo+ID4+Pj4gLSBTdGFydEJpdCkgJiAxKSk7DQo+ID4+Pj4gLQ0KPiA+Pj4+ IC0gIFZhbHVlMSA9IExTaGlmdFU2NCAoT3JEYXRhLCBTdGFydEJpdCk7DQo+ID4+Pj4gLSAgVmFs dWUyID0gTFNoaWZ0VTY0ICgoVUlOVDY0KSAtIDIsIEVuZEJpdCk7DQo+ID4+Pj4gLQ0KPiA+Pj4+ IC0gIHJldHVybiBPcGVyYW5kIHwgKFZhbHVlMSAmIH5WYWx1ZTIpOw0KPiA+Pj4+ICsgIEFTU0VS VCAoU3RhcnRCaXQgPCBFbmRCaXQpOw0KPiA+Pj4+ICsNCj4gPj4+PiArICBVSU5UNjQgIE1hc2sg PSBCSVRNQVNLX1VOSVQ2NCAoU3RhcnRCaXQsIEVuZEJpdCk7DQo+ID4+Pj4gKw0KPiA+Pj4+ICsg IHJldHVybiAoICggKE9wZXJhbmQgfCBPckRhdGEpICYgTWFzaykgfCAoT3BlcmFuZCAmIH5NYXNr KSk7DQo+ID4+Pj4gIH0NCj4gPj4+Pg0KPiA+Pj4+ICAvKioNCj4gPj4+PiBAQCAtODU1LDIzICs4 NjUsMTIgQEAgQml0RmllbGRBbmQ2NCAoDQo+ID4+Pj4gICAgSU4gICAgICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIEFuZERhdGENCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAtICBV SU5UNjQgIFZhbHVlMTsNCj4gPj4+PiAtICBVSU5UNjQgIFZhbHVlMjsNCj4gPj4+PiAtDQo+ID4+ Pj4gICAgQVNTRVJUIChFbmRCaXQgPCA2NCk7DQo+ID4+Pj4gLSAgQVNTRVJUIChTdGFydEJpdCA8 PSBFbmRCaXQpOw0KPiA+Pj4+IC0gIC8vDQo+ID4+Pj4gLSAgLy8gSGlnaGVyIGJpdHMgaW4gQW5k RGF0YSB0aG9zZSBhcmUgbm90IHVzZWQgbXVzdCBiZSB6ZXJvLg0KPiA+Pj4+IC0gIC8vDQo+ID4+ Pj4gLSAgLy8gRW5kQml0IC0gU3RhcnRCaXQgKyAxIG1pZ2h0IGJlIDY0IHdoaWxlIHRoZSByaWdo dCBzaGlmdGluZyA2NA0KPiA+Pj4+IG9uIFJTaGlmdFU2NCgpIEFQSSBpcyBpbnZhbGlkLA0KPiA+ Pj4+IC0gIC8vIFNvIHRoZSBsb2dpYyBpcyB1cGRhdGVkIHRvIHJpZ2h0IHNoaWZ0IChFbmRCaXQg LSBTdGFydEJpdCkNCj4gPj4+PiBiaXRzIGFuZCBjb21wYXJlIHRoZSBsYXN0IGJpdCBkaXJlY3Rs eS4NCj4gPj4+PiAtICAvLw0KPiA+Pj4+IC0gIEFTU0VSVCAoUlNoaWZ0VTY0IChBbmREYXRhLCBF bmRCaXQgLSBTdGFydEJpdCkgPT0gKFJTaGlmdFU2NA0KPiA+Pj4+IChBbmREYXRhLCBFbmRCaXQg LSBTdGFydEJpdCkgJiAxKSk7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gIFZhbHVlMSA9IExTaGlmdFU2 NCAofkFuZERhdGEsIFN0YXJ0Qml0KTsNCj4gPj4+PiAtICBWYWx1ZTIgPSBMU2hpZnRVNjQgKChV SU5UNjQpLTIsIEVuZEJpdCk7DQo+ID4+Pj4gLQ0KPiA+Pj4+IC0gIHJldHVybiBPcGVyYW5kICYg fihWYWx1ZTEgJiB+VmFsdWUyKTsNCj4gPj4+PiArICBBU1NFUlQgKFN0YXJ0Qml0IDwgRW5kQml0 KTsNCj4gPj4+PiArDQo+ID4+Pj4gKyAgVUlOVDY0ICBNYXNrID0gQklUTUFTS19VTklUNjQgKFN0 YXJ0Qml0LCBFbmRCaXQpOw0KPiA+Pj4+ICsNCj4gPj4+PiArICByZXR1cm4gICggKCAoT3BlcmFu ZCAmIEFuZERhdGEpICYgTWFzaykgfCAoT3BlcmFuZCAmIH5NYXNrKSk7DQo+ID4+Pj4gIH0NCj4g Pj4+Pg0KPiA+Pj4+ICAvKioNCj4gPj4+PiBAQCAtODc5LDcgKzg3OCw3IEBAIEJpdEZpZWxkQW5k NjQgKA0KPiA+Pj4+ICAgIGJpdHdpc2UgT1IsIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuDQo+ID4+ Pj4NCj4gPj4+PiAgICBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIGJpdCBmaWVs ZCBzcGVjaWZpZWQgYnkNCj4gPj4+PiBTdGFydEJpdCBhbmQgRW5kQml0DQo+ID4+Pj4gLSAgaW4g T3BlcmFuZCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmREYXRhLCBmb2xsb3dlZCBieSBh DQo+ID4+Pj4gYml0d2lzZQ0KPiA+Pj4+ICsgIGluIE9wZXJhbmQgYW5kIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkgQW5kRGF0YSwgZm9sbG93ZWQgYnkgYQ0KPiA+Pj4+ICsgYml0d2lzZQ0KPiA+Pj4+ ICAgIE9SIHdpdGggdmFsdWUgc3BlY2lmaWVkIGJ5IE9yRGF0YS4gQWxsIG90aGVyIGJpdHMgaW4g T3BlcmFuZCBhcmUNCj4gPj4+PiAgICBwcmVzZXJ2ZWQuIFRoZSBuZXcgNjQtYml0IHZhbHVlIGlz IHJldHVybmVkLg0KPiA+Pj4+DQo+ID4+Pj4gQEAgLTkxMiw3ICs5MTEsNyBAQCBCaXRGaWVsZEFu ZFRoZW5PcjY0ICgNCj4gPj4+PiAgICApDQo+ID4+Pj4gIHsNCj4gPj4+PiAgICBBU1NFUlQgKEVu ZEJpdCA8IDY0KTsNCj4gPj4+PiAtICBBU1NFUlQgKFN0YXJ0Qml0IDw9IEVuZEJpdCk7DQo+ID4+ Pj4gKyAgQVNTRVJUIChTdGFydEJpdCA8IEVuZEJpdCk7DQo+ID4+Pj4gICAgcmV0dXJuIEJpdEZp ZWxkT3I2NCAoDQo+ID4+Pj4gICAgICAgICAgICAgQml0RmllbGRBbmQ2NCAoT3BlcmFuZCwgU3Rh cnRCaXQsIEVuZEJpdCwgQW5kRGF0YSksDQo+ID4+Pj4gICAgICAgICAgICAgU3RhcnRCaXQsDQo+ ID4+Pj4gLS0NCj4gPj4+PiAyLjcuNA0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiA+ IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gaHR0cHM6Ly9lbWVhMDEuc2FmZWxpbmtzLnBy b3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmxpcw0KPiA+IHRzLjAxLm9y ZyUyRm1haWxtYW4lMkZsaXN0aW5mbyUyRmVkazItDQo+IGRldmVsJmRhdGE9MDIlN0MwMSU3Q3Bh bmthai5iYW5zDQo+ID4NCj4gYWwlNDBueHAuY29tJTdDZWQ2MTNlNzk5MzU0NDU1NTRhMjYwOGQ1 N2FiNmM2Y2QlN0M2ODZlYTFkM2JjMmINCj4gNGM2ZmE5MmMNCj4gPg0KPiBkOTljNWMzMDE2MzUl N0MwJTdDMCU3QzYzNjU0OTg0Nzc5NjM2NzQ2MyZzZGF0YT1SeUZwSjRrY0puQ0RDT1MNCj4gRDEw M0FXZQ0KPiA+IDhjT3ljVGlEQlJCWWxDRnNGOWNDRSUzRCZyZXNlcnZlZD0wDQo+ID4NCg0K