From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 297C221197372 for ; Mon, 11 Jun 2018 14:40:55 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jun 2018 14:40:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,212,1526367600"; d="scan'208";a="46347231" Received: from orsmsx106.amr.corp.intel.com ([10.22.225.133]) by fmsmga007.fm.intel.com with ESMTP; 11 Jun 2018 14:40:36 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.88]) by ORSMSX106.amr.corp.intel.com ([169.254.1.45]) with mapi id 14.03.0319.002; Mon, 11 Jun 2018 14:40:37 -0700 From: "Kinney, Michael D" To: Ard Biesheuvel , "Yao, Jiewen" , "Kinney, Michael D" CC: "edk2-devel@lists.01.org" , Leif Lindholm , "Zeng, Star" Thread-Topic: [PATCH v2 1/5] MdeModulePkg/CapsulePei: clean Dcache before consuming capsule data Thread-Index: AQHT/vYfw9PpXXVcaU+7ReDxjV5IpaRcDKUAgAAAzoCAAABigP//jCqQ Date: Mon, 11 Jun 2018 21:40:36 +0000 Message-ID: References: <20180608065811.2065-1-ard.biesheuvel@linaro.org> <20180608065811.2065-2-ard.biesheuvel@linaro.org> <74D8A39837DF1E4DA445A8C0B3885C503AC3DA25@shsmsx102.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.22.254.139] MIME-Version: 1.0 Subject: Re: [PATCH v2 1/5] MdeModulePkg/CapsulePei: clean Dcache before consuming capsule data X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jun 2018 21:40:55 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkLA0KDQpJIHdvdWxkIHN0aWxsIHByZWZlciB0aGUgY2FjaGUgbWFpbnRlbmFuY2UgYmUg ZG9uZSBpbmRlcGVuZGVudA0Kb2YgY2Fwc3VsZXMgaW4gY2FzZSB0aGVyZSBpcyBvdGhlciBtZW1v cnkgcmFuZ2VzIHRoYXQgbmVlZCB0bw0KYmUgZmx1c2hlZCBmb3Igb3RoZXIgZmVhdHVyZXMuDQoN ClRoZSBDYWNoZU1haW50ZW5hbmNlTGliIGZvciBBUk0gaGFzIHNldmVyYWwgc2VydmljZXMgdGhh dCBhcmUNCm5vdCBpbXBsZW1lbnRlZCBhbmQgQVNTRVJUKCkuICBJIGZvdW5kIHNvbWUgQVJNIGRv Y3VtZW50YXRpb24gDQp0aGF0IHNheXMgdGhhdCBjYWNoZXMgY2FuIGJlIGZsdXNoZWQgYnkgbG9v cGluZyB0aHJvdWdoIHRoZSANCmluZGV4ZXMuICANCg0KaHR0cDovL2luZm9jZW50ZXIuYXJtLmNv bS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZGRpMDIwMWQvY2gwM3MwM3MwNS5o dG1sDQoNCkkga25vdyB5b3UgbWVudGlvbmVkIHRoYXQgdGhlcmUgY2FuIGJlIGFsdGVybmF0ZSBN TVUNCmltcGxlbWVudGF0aW9ucyB0aGF0IG1heSBub3Qgd29yayB3aXRoIHRoYXQgYWxnb3JpdGht LiAgSG93ZXZlcg0KdGhhdCBjb3VsZCByZXF1aXJlIGEgY3VzdG9taXplZCBDYWNoZU1haW50ZW5h bmNlTGliLiAgQ2FuIHlvdQ0KcHJvdmlkZSB0aGUgZmx1c2ggYWxsIHVzaW5nIHRoZSBkb2N1bWVu dGVkIGFsZ29yaXRobSBhbmQgdXNlIHRoYXQNCmluc3RhbmNlIGZvciBzeXN0ZW1zIHRoYXQgYXJl IGNvbXBhdGlibGUgd2l0aCB0aGUgZG9jdW1lbnRlZCBhbGdvcml0aG0uDQpUaGVuLCB0aGUgZmx1 c2ggYWxsIEFQSSBjYW4gYmUgdXNlZCBpbiBSZXNldFN5c3RlbSgpIG9yIFNFQyBQaGFzZQ0Kd2hl biB0aGUgYm9vdCBtb2RlIGlzIHdhcm0gcmVzZXQuDQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBcmQgQmllc2hldXZlbCBbbWFpbHRvOmFyZC5iaWVzaGV1 dmVsQGxpbmFyby5vcmddDQo+IFNlbnQ6IE1vbmRheSwgSnVuZSAxMSwgMjAxOCAyOjI5IFBNDQo+ IFRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IENjOiBlZGsyLWRldmVs QGxpc3RzLjAxLm9yZzsgTGVpZiBMaW5kaG9sbQ0KPiA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn PjsgWmVuZywgU3Rhcg0KPiA8c3Rhci56ZW5nQGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBE DQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2 MiAxLzVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlUGVpOiBjbGVhbg0KPiBEY2FjaGUgYmVmb3JlIGNv bnN1bWluZyBjYXBzdWxlIGRhdGENCj4gDQo+IE9uIDExIEp1bmUgMjAxOCBhdCAyMzoyNywgWWFv LCBKaWV3ZW4NCj4gPGppZXdlbi55YW9AaW50ZWwuY29tPiB3cm90ZToNCj4gPiBIaSBBcmQNCj4g PiBNYXkgSSBzdWdnZXN0IHRoYXQgd2Ugc3BsaXQgdGhlIENhcHN1bGUgRGlzcGF0Y2ggcGF0Y2gN Cj4gZnJvbSB0aGUgY2FjaGUgbWFpbnRlbmFuY2UgcGF0Y2g/DQo+ID4NCj4gPiBJIHRoaW5rIHRo ZSBmb3JtZXIgbWF5IHJlcXVpcmUgbW9yZSB0aW1lIGZvciBkZXNpZ24NCj4gZGlzY3Vzc2lvbi4N Cj4gPg0KPiANCj4gWWVzLCB0aGF0IGlzIGZpbmUuIEFzIEkgZXhwbGFpbmVkLCBpdCBoYXMgbWFp bmx5IHRvIGRvIHdpdGgNCj4gZGlzcGF0Y2hpbmcgdGhlIGNhcHN1bGUgYXQgYSB0aW1lIHdoZW4g dGhlIGNvbnNvbGUgb3IgR09QDQo+IGlzIGF2YWlsYWJsZQ0KPiB0byByZXBvcnQgcHJvZ3Jlc3Mu IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgY2FjaGUNCj4gbWFpbnRlbmFuY2UgaXNzdWUuDQo+ IA0KPiANCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogQXJkIEJp ZXNoZXV2ZWwgW21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiA+PiBTZW50OiBN b25kYXksIEp1bmUgMTEsIDIwMTggMjoyNSBQTQ0KPiA+PiBUbzogZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmcNCj4gPj4gQ2M6IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9yZz47 IFplbmcsIFN0YXINCj4gPHN0YXIuemVuZ0BpbnRlbC5jb20+Ow0KPiA+PiBZYW8sIEppZXdlbiA8 amlld2VuLnlhb0BpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+PiA8bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+OyBBcmQgQmllc2hldXZlbA0KPiA8YXJkLmJpZXNoZXV2ZWxAbGlu YXJvLm9yZz4NCj4gPj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAxLzVdIE1kZU1vZHVsZVBrZy9D YXBzdWxlUGVpOg0KPiBjbGVhbiBEY2FjaGUgYmVmb3JlDQo+ID4+IGNvbnN1bWluZyBjYXBzdWxl IGRhdGENCj4gPj4NCj4gPj4gT24gOCBKdW5lIDIwMTggYXQgMDg6NTgsIEFyZCBCaWVzaGV1dmVs DQo+IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPiB3cm90ZToNCj4gPj4gPiBXaGVuIGNhcHN1 bGUgdXBkYXRlcyBhcmUgc3RhZ2VkIGZvciBwcm9jZXNzaW5nIGFmdGVyIGENCj4gd2FybSByZWJv b3QsDQo+ID4+ID4gdGhleSBhcmUgY29waWVkIGludG8gbWVtb3J5IHdpdGggdGhlIE1NVSBhbmQg Y2FjaGVzDQo+IGVuYWJsZWQuIFdoZW4NCj4gPj4gPiB0aGUgY2Fwc3VsZSBQRUkgZ2V0cyBhcm91 bmQgdG8gY29hbGVzY2luZyB0aGUgY2Fwc3VsZSwNCj4gdGhlIE1NVSBhbmQNCj4gPj4gPiBjYWNo ZXMgbWF5IHN0aWxsIGJlIGRpc2FibGVkLCBhbmQgc28gb24gYXJjaGl0ZWN0dXJlcw0KPiB3aGVy ZSB1bmNhY2hlZA0KPiA+PiA+IGFjY2Vzc2VzIGFyZSBpbmNvaGVyZW50IHdpdGggdGhlIGNhY2hl cyAoc3VjaCBhcyBBUk0NCj4gYW5kIEFBUkNINjQpLA0KPiA+PiA+IHdlIG1heSByZWFkIHN0YWxl IGRhdGEgaWYgd2UgZG9uJ3QgY2xlYW4gdGhlIGNhY2hlcyB0bw0KPiBtZW1vcnkgZmlyc3QuDQo+ ID4+ID4NCj4gPj4gPiBOb3RlIHRoYXQgdGhpcyBjYWNoZSBtYWludGVuYW5jZSBjYW5ub3QgYmUg ZG9uZSBkdXJpbmcNCj4gdGhlIGludm9jYXRpb24NCj4gPj4gPiBvZiBVcGRhdGVDYXBzdWxlKCks IHNpbmNlIHRoZSBTY2F0dGVyR2F0aGVyTGlzdA0KPiBzdHJ1Y3R1cmVzIGFyZSBvbmx5DQo+ID4+ ID4gaWRlbnRpZmllZCBieSBwaHlzaWNhbCBhZGRyZXNzLCBhbmQgYXQgcnVudGltZSwgdGhlDQo+ IGZpcm13YXJlIGRvZXNuJ3QNCj4gPj4gPiBrbm93IHdoZXRoZXIgYW5kIHdoZXJlIHRoaXMgbWVt b3J5IGlzIG1hcHBlZCwgYW5kDQo+IGNhY2hlIG1haW50ZW5hbmNlDQo+ID4+ID4gcmVxdWlyZXMg YSB2aXJ0dWFsIGFkZHJlc3MuDQo+ID4+ID4NCj4gPj4gPiBSZXZpZXdlZC1ieTogSmlld2VuIFlh byA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5v Q29yZSBDb250cmlidXRpb24gQWdyZWVtZW50DQo+IDEuMQ0KPiA+PiA+IFNpZ25lZC1vZmYtYnk6 IEFyZCBCaWVzaGV1dmVsDQo+IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPg0KPiA+Pg0KPiA+ PiBTdGFyLA0KPiA+Pg0KPiA+PiBJZiB5b3UgYXJlIG9rIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRo ZSBwYXRjaCwgcGxlYXNlIGxldA0KPiBtZSBrbm93Lg0KPiA+Pg0KPiA+PiBUaGlzIHBhdGNoIGFu ZCB0aGUgUHNjaVJlc2V0U3lzdGVtTGliIG9uZSBhcmUNCj4gcHJlcmVxdWlzaXRlcyBmb3IgbWFr aW5nDQo+ID4+IFBlcnNpc3RBY3Jvc3NSZXNldCBjYXBzdWxlcyB3b3JrIGF0IGFsbCBvbiBBUk0g c3lzdGVtcy4NCj4gVGhlIHJlbWFpbmluZw0KPiA+PiBwYXRjaGVzIGFyZSBvbmx5IHJlbGV2YW50 IHdoZW4gdXNpbmcgdGhlIG5ldyBwcm9ncmVzcw0KPiByZXBvcnRpbmcgQVBJcywNCj4gPj4gc28g dGhvc2UgY2FuIHdhaXQsIGJ1dCBJIHdvdWxkIGxpa2UgdG8gbWVyZ2UgdGhpcyBvbmUgYXMNCj4g c29vbiBhcyBpdCBpcw0KPiA+PiByZWFkeS4NCj4gPj4NCj4gPj4gVGhhbmtzLA0KPiA+PiBBcmQu DQo+ID4+DQo+ID4+DQo+ID4+ID4gLS0tDQo+ID4+ID4gIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv Q2Fwc3VsZVBlaS9DYXBzdWxlUGVpLmluZg0KPiB8ICAxICsNCj4gPj4gPg0KPiBNZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ29tbW9uL0NhcHN1bGVDb2FsZXNjZS5jDQo+IHwgMzgN Cj4gPj4gKysrKysrKysrKysrKystLS0tLS0NCj4gPj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAyOCBp bnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkNCj4gPj4gPg0KPiA+PiA+IGRpZmYgLS1naXQN Cj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ2Fwc3VsZVBlaS5pbmYNCj4g Pj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ2Fwc3VsZVBlaS5pbmYNCj4g Pj4gPiBpbmRleCBjNTRiYzIxYTk1YTguLjU5NGUxMTBkMWY4YSAxMDA2NDQNCj4gPj4gPiAtLS0g YS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ2Fwc3VsZVBlaS5pbmYNCj4gPj4g PiArKysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ2Fwc3VsZVBlaS5pbmYN Cj4gPj4gPiBAQCAtNDgsNiArNDgsNyBAQCBbUGFja2FnZXNdDQo+ID4+ID4NCj4gPj4gPiAgW0xp YnJhcnlDbGFzc2VzXQ0KPiA+PiA+ICAgIEJhc2VMaWINCj4gPj4gPiArICBDYWNoZU1haW50ZW5h bmNlTGliDQo+ID4+ID4gICAgSG9iTGliDQo+ID4+ID4gICAgQmFzZU1lbW9yeUxpYg0KPiA+PiA+ ICAgIFBlaVNlcnZpY2VzTGliDQo+ID4+ID4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvQ2Fwc3VsZVBlaS9Db21tb24vQ2Fwc3VsZUNvYWxlc2NlLg0KPiBjDQo+ID4+DQo+ IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlUGVpL0NvbW1vbi9DYXBzdWxlQ29hbGVz Y2UuDQo+IGMNCj4gPj4gPiBpbmRleCAzZTcwNTRjZDM4YTkuLjUyYjgwZTMwYjQ3OSAxMDA2NDQN Cj4gPj4gPiAtLS0NCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ29tbW9u L0NhcHN1bGVDb2FsZXNjZS4NCj4gYw0KPiA+PiA+ICsrKw0KPiBiL01kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvQ2Fwc3VsZVBlaS9Db21tb24vQ2Fwc3VsZUNvYWxlc2NlLg0KPiBjDQo+ID4+ID4gQEAg LTI3LDYgKzI3LDcgQEAgV0lUSE9VVCBXQVJSQU5USUVTIE9SDQo+IFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkNCj4gPj4gS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPj4gPiAgI2lu Y2x1ZGUgPEd1aWQvQ2Fwc3VsZVZlbmRvci5oPg0KPiA+PiA+DQo+ID4+ID4gICNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQ2FjaGVN YWludGVuYW5jZUxpYi5oPg0KPiA+PiA+ICAjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0K PiA+PiA+ICAjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiA+PiA+ICAjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTGliLmg+DQo+ID4+ID4gQEAgLTI1Myw2ICsyNTQsNyBAQCBWYWxpZGF0ZUNh cHN1bGVCeU1lbW9yeVJlc291cmNlICgNCj4gPj4gPiAgICApDQo+ID4+ID4gIHsNCj4gPj4gPiAg ICBVSU5UTiAgICAgICAgICAgICBJbmRleDsNCj4gPj4gPiArICBCT09MRUFOICAgICAgICAgICBW YWxpZDsNCj4gPj4gPg0KPiA+PiA+ICAgIC8vDQo+ID4+ID4gICAgLy8gU2FuaXR5IENoZWNrDQo+ ID4+ID4gQEAgLTI3MCwyNSArMjcyLDM5IEBAIFZhbGlkYXRlQ2Fwc3VsZUJ5TWVtb3J5UmVzb3Vy Y2UNCj4gKA0KPiA+PiA+ICAgICAgcmV0dXJuIEZBTFNFOw0KPiA+PiA+ICAgIH0NCj4gPj4gPg0K PiA+PiA+ICsgIFZhbGlkID0gRkFMU0U7DQo+ID4+ID4gICAgaWYgKE1lbW9yeVJlc291cmNlID09 IE5VTEwpIHsNCj4gPj4gPiAgICAgIC8vDQo+ID4+ID4gICAgICAvLyBObyBtZW1vcnkgcmVzb3Vy Y2UgZGVzY3JpcHRvciByZXBvcnRlZCBpbiBIT0INCj4gbGlzdCBiZWZvcmUgY2Fwc3VsZQ0KPiA+ PiBDb2FsZXNjZS4NCj4gPj4gPiAgICAgIC8vDQo+ID4+ID4gLSAgICByZXR1cm4gVFJVRTsNCj4g Pj4gPiArICAgIFZhbGlkID0gVFJVRTsNCj4gPj4gPiArICB9IGVsc2Ugew0KPiA+PiA+ICsgICAg Zm9yIChJbmRleCA9IDA7DQo+IE1lbW9yeVJlc291cmNlW0luZGV4XS5SZXNvdXJjZUxlbmd0aCAh PSAwOyBJbmRleCsrKSB7DQo+ID4+ID4gKyAgICAgIGlmICgoQWRkcmVzcyA+PQ0KPiBNZW1vcnlS ZXNvdXJjZVtJbmRleF0uUGh5c2ljYWxTdGFydCkgJiYNCj4gPj4gPiArICAgICAgICAgICgoQWRk cmVzcyArIFNpemUpIDw9DQo+IChNZW1vcnlSZXNvdXJjZVtJbmRleF0uUGh5c2ljYWxTdGFydCAr DQo+ID4+IE1lbW9yeVJlc291cmNlW0luZGV4XS5SZXNvdXJjZUxlbmd0aCkpKSB7DQo+ID4+ID4g KyAgICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiQWRkcmVzcygweCVseCkNCj4gU2l6ZSgweCVs eCkgaW4NCj4gPj4gTWVtb3J5UmVzb3VyY2VbMHgleF0gLSBTdGFydCgweCVseCkgTGVuZ3RoKDB4 JWx4KVxuIiwNCj4gPj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsIFNp emUsDQo+ID4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCwNCj4gPj4gTWVt b3J5UmVzb3VyY2VbSW5kZXhdLlBoeXNpY2FsU3RhcnQsDQo+ID4+IE1lbW9yeVJlc291cmNlW0lu ZGV4XS5SZXNvdXJjZUxlbmd0aCkpOw0KPiA+PiA+ICsgICAgICAgIFZhbGlkID0gVFJVRTsNCj4g Pj4gPiArICAgICAgICBicmVhazsNCj4gPj4gPiArICAgICAgfQ0KPiA+PiA+ICsgICAgfQ0KPiA+ PiA+ICsgICAgaWYgKCFWYWxpZCkgew0KPiA+PiA+ICsgICAgICBERUJVRyAoKEVGSV9EX0VSUk9S LCAiRVJST1I6IEFkZHJlc3MoMHglbHgpDQo+IFNpemUoMHglbHgpIG5vdCBpbg0KPiA+PiBhbnkg TWVtb3J5UmVzb3VyY2VcbiIsIEFkZHJlc3MsIFNpemUpKTsNCj4gPj4gPiArICAgIH0NCj4gPj4g PiAgICB9DQo+ID4+ID4NCj4gPj4gPiAtICBmb3IgKEluZGV4ID0gMDsNCj4gTWVtb3J5UmVzb3Vy Y2VbSW5kZXhdLlJlc291cmNlTGVuZ3RoICE9IDA7IEluZGV4KyspIHsNCj4gPj4gPiAtICAgIGlm ICgoQWRkcmVzcyA+PQ0KPiBNZW1vcnlSZXNvdXJjZVtJbmRleF0uUGh5c2ljYWxTdGFydCkgJiYN Cj4gPj4gPiAtICAgICAgICAoKEFkZHJlc3MgKyBTaXplKSA8PQ0KPiAoTWVtb3J5UmVzb3VyY2Vb SW5kZXhdLlBoeXNpY2FsU3RhcnQgKw0KPiA+PiBNZW1vcnlSZXNvdXJjZVtJbmRleF0uUmVzb3Vy Y2VMZW5ndGgpKSkgew0KPiA+PiA+IC0gICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJBZGRyZXNz KDB4JWx4KSBTaXplKDB4JWx4KQ0KPiBpbg0KPiA+PiBNZW1vcnlSZXNvdXJjZVsweCV4XSAtIFN0 YXJ0KDB4JWx4KSBMZW5ndGgoMHglbHgpXG4iLA0KPiA+PiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgIEFkZHJlc3MsIFNpemUsDQo+ID4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg SW5kZXgsDQo+IE1lbW9yeVJlc291cmNlW0luZGV4XS5QaHlzaWNhbFN0YXJ0LA0KPiA+PiBNZW1v cnlSZXNvdXJjZVtJbmRleF0uUmVzb3VyY2VMZW5ndGgpKTsNCj4gPj4gPiAtICAgICAgcmV0dXJu IFRSVUU7DQo+ID4+ID4gLSAgICB9DQo+ID4+ID4gKyAgaWYgKFZhbGlkKSB7DQo+ID4+ID4gKyAg ICAvLw0KPiA+PiA+ICsgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbWF5IHN0aWxsIGJlIHJ1bm5p bmcgd2l0aA0KPiB0aGUgTU1VIGFuZCBjYWNoZXMNCj4gPj4gZGlzYWJsZWQsDQo+ID4+ID4gKyAg ICAvLyBhbmQgb24gYXJjaGl0ZWN0dXJlcyBzdWNoIGFzIEFSTSBvciBBQVJDSDY0LA0KPiBjYXBz dWxlIFttZXRhXWRhdGENCj4gPj4gbG9hZGVkDQo+ID4+ID4gKyAgICAvLyBpbnRvIG1lbW9yeSB3 aXRoIHRoZSBjYWNoZXMgb24gaXMgb25seQ0KPiBndWFyYW50ZWVkIHRvIGJlIHZpc2libGUgdG8g dGhlDQo+ID4+ID4gKyAgICAvLyBDUFUgcnVubmluZyB3aXRoIHRoZSBjYWNoZXMgb2ZmIGFmdGVy DQo+IHBlcmZvcm1pbmcgYW4gZXhwbGljaXQNCj4gPj4gd3JpdGViYWNrLg0KPiA+PiA+ICsgICAg Ly8NCj4gPj4gPiArICAgIFdyaXRlQmFja0RhdGFDYWNoZVJhbmdlICgoVk9JRCAqKShVSU5UTilB ZGRyZXNzLA0KPiAoVUlOVE4pU2l6ZSk7DQo+ID4+ID4gICAgfQ0KPiA+PiA+DQo+ID4+ID4gLSAg REVCVUcgKChFRklfRF9FUlJPUiwgIkVSUk9SOiBBZGRyZXNzKDB4JWx4KQ0KPiBTaXplKDB4JWx4 KSBub3QgaW4gYW55DQo+ID4+IE1lbW9yeVJlc291cmNlXG4iLCBBZGRyZXNzLCBTaXplKSk7DQo+ ID4+ID4gLSAgcmV0dXJuIEZBTFNFOw0KPiA+PiA+ICsgIHJldHVybiBWYWxpZDsNCj4gPj4gPiAg fQ0KPiA+PiA+DQo+ID4+ID4gIC8qKg0KPiA+PiA+IC0tDQo+ID4+ID4gMi4xNy4wDQo+ID4+ID4N Cg==