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.151; helo=mga17.intel.com; envelope-from=binx.song@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 838312215BD97 for ; Thu, 1 Feb 2018 17:28:56 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Feb 2018 17:34:33 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,445,1511856000"; d="scan'208";a="16368226" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga002.fm.intel.com with ESMTP; 01 Feb 2018 17:34:33 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 1 Feb 2018 17:34:33 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.124]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.130]) with mapi id 14.03.0319.002; Fri, 2 Feb 2018 09:34:31 +0800 From: "Song, BinX" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Dong, Eric" , "Ni, Ruiyu" Thread-Topic: [PATCH] UefiCpuPkg: Enhance CPU feature dependency check Thread-Index: AdOaYTQY+pBf08MTTXCTDz1deLfPb///p5kA//5t4gCAA1+PAP/+rE4w Date: Fri, 2 Feb 2018 01:34:31 +0000 Message-ID: <559D2DF22BC9A3468B4FA1AA547F0EF1025E2B05@shsmsx102.ccr.corp.intel.com> References: <559D2DF22BC9A3468B4FA1AA547F0EF1025E2535@shsmsx102.ccr.corp.intel.com> <9ef96ab1-d50b-5f1a-14ff-43b07562a975@redhat.com> <559D2DF22BC9A3468B4FA1AA547F0EF1025E2848@shsmsx102.ccr.corp.intel.com> <372be680-648a-b67a-98c0-90ec5c1b83c0@redhat.com> In-Reply-To: <372be680-648a-b67a-98c0-90ec5c1b83c0@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] UefiCpuPkg: Enhance CPU feature dependency check 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: Fri, 02 Feb 2018 01:28:57 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQpUaGFua3MgZm9yIHlvdXIgcmVwbHksIEkgaGF2ZSBhbHNvIGRpc2N1c3Nl ZCB0aGlzIHBhdGNoIHdpdGggRXJpYyBhbmQgUmF5LCBhbGwgY29tbWVudHMgd2lsbCBiZSBpbiB0 aGUgVjIgcGF0Y2guDQoNCkJlc3QgUmVnYXJkcywNCkJlbGwgU29uZw0KDQoNCj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJl ZGhhdC5jb21dDQo+IFNlbnQ6IFRodXJzZGF5LCBGZWJydWFyeSAxLCAyMDE4IDk6MTYgUE0NCj4g VG86IFNvbmcsIEJpblggPGJpbnguc29uZ0BpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZw0KPiBDYzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gU3ViamVjdDog UmU6IFtQQVRDSF0gVWVmaUNwdVBrZzogRW5oYW5jZSBDUFUgZmVhdHVyZSBkZXBlbmRlbmN5IGNo ZWNrDQo+IA0KPiBPbiAwMi8wMS8xOCAwMzowOSwgU29uZywgQmluWCB3cm90ZToNCj4gPiBIaSBM YXN6bG8sDQo+ID4NCj4gPiBUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuDQo+ID4gRXhwbGFpbiB0 aGUgaXNzdWUgZmlyc3Q6DQo+ID4gSW4gQ3B1Q29tbW9uRmVhdHVyZXNMaWIuaW5mIC0+IENwdUNv bW1vbkZlYXR1cmVzTGliLmMgLT4NCj4gQ3B1Q29tbW9uRmVhdHVyZXNMaWJDb25zdHJ1Y3Rvcigp IGZ1bmN0aW9uLA0KPiA+IGl0IGludm9rZXMgUmVnaXN0ZXJDcHVGZWF0dXJlKCkgdG8gcmVnaXN0 ZXIgQ1BVIGZlYXR1cmUuIFNvbWUgb3JpZ2luYWwNCj4gc291cmNlIGNvZGVzIGlzIGhlcmUuDQo+ ID4gICBpZiAoSXNDcHVGZWF0dXJlU3VwcG9ydGVkIChDUFVfRkVBVFVSRV9BRVNOSSkpIHsNCj4g PiAgICAgU3RhdHVzID0gUmVnaXN0ZXJDcHVGZWF0dXJlICgNCj4gPiAgICAgICAgICAgICAgICAi QUVTTkkiLA0KPiA+ICAgICAgICAgICAgICAgIEFlc25pR2V0Q29uZmlnRGF0YSwNCj4gPiAgICAg ICAgICAgICAgICBBZXNuaVN1cHBvcnQsDQo+ID4gICAgICAgICAgICAgICAgQWVzbmlJbml0aWFs aXplLA0KPiA+ICAgICAgICAgICAgICAgIENQVV9GRUFUVVJFX0FFU05JLA0KPiA+ICAgICAgICAg ICAgICAgIENQVV9GRUFUVVJFX0VORA0KPiA+ICAgICAgICAgICAgICAgICk7DQo+ID4gICAgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICB9DQo+ID4gICBpZiAoSXNDcHVGZWF0dXJl U3VwcG9ydGVkIChDUFVfRkVBVFVSRV9NV0FJVCkpIHsNCj4gPiAgICAgU3RhdHVzID0gUmVnaXN0 ZXJDcHVGZWF0dXJlICgNCj4gPiAgICAgICAgICAgICAgICAiTVdBSVQiLA0KPiA+ICAgICAgICAg ICAgICAgIE5VTEwsDQo+ID4gICAgICAgICAgICAgICAgTW9uaXRvck13YWl0U3VwcG9ydCwNCj4g PiAgICAgICAgICAgICAgICBNb25pdG9yTXdhaXRJbml0aWFsaXplLA0KPiA+ICAgICAgICAgICAg ICAgIENQVV9GRUFUVVJFX01XQUlULA0KPiA+ICAgICAgICAgICAgICAgIENQVV9GRUFUVVJFX0VO RA0KPiA+ICAgICAgICAgICAgICAgICk7DQo+ID4gICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gICB9DQo+ID4NCj4gPiBUaGVuIEkgdXBkYXRlIHRoZW0gdG8gYmVsb3cuDQo+ID4g ICBpZiAoSXNDcHVGZWF0dXJlU3VwcG9ydGVkIChDUFVfRkVBVFVSRV9BRVNOSSkpIHsNCj4gPiAg ICAgU3RhdHVzID0gUmVnaXN0ZXJDcHVGZWF0dXJlICgNCj4gPiAgICAgICAgICAgICAgICAiQUVT TkkiLA0KPiA+ICAgICAgICAgICAgICAgIEFlc25pR2V0Q29uZmlnRGF0YSwNCj4gPiAgICAgICAg ICAgICAgICBBZXNuaVN1cHBvcnQsDQo+ID4gICAgICAgICAgICAgICAgQWVzbmlJbml0aWFsaXpl LA0KPiA+ICAgICAgICAgICAgICAgIENQVV9GRUFUVVJFX0FFU05JLA0KPiA+ICAgICAgICAgICAg ICAgIENQVV9GRUFUVVJFX01XQUlUIHwgQ1BVX0ZFQVRVUkVfQkVGT1JFLA0KPiA+ICAgICAgICAg ICAgICAgIENQVV9GRUFUVVJFX0VORA0KPiA+ICAgICAgICAgICAgICAgICk7DQo+ID4gICAgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICB9DQo+ID4gICBpZiAoSXNDcHVGZWF0dXJl U3VwcG9ydGVkIChDUFVfRkVBVFVSRV9NV0FJVCkpIHsNCj4gPiAgICAgU3RhdHVzID0gUmVnaXN0 ZXJDcHVGZWF0dXJlICgNCj4gPiAgICAgICAgICAgICAgICAiTVdBSVQiLA0KPiA+ICAgICAgICAg ICAgICAgIE5VTEwsDQo+ID4gICAgICAgICAgICAgICAgTW9uaXRvck13YWl0U3VwcG9ydCwNCj4g PiAgICAgICAgICAgICAgICBNb25pdG9yTXdhaXRJbml0aWFsaXplLA0KPiA+ICAgICAgICAgICAg ICAgIENQVV9GRUFUVVJFX01XQUlULA0KPiA+ICAgICAgICAgICAgICAgIENQVV9GRUFUVVJFX0FF U05JIHwgQ1BVX0ZFQVRVUkVfQkVGT1JFLA0KPiA+ICAgICAgICAgICAgICAgIENQVV9GRUFUVVJF X0VORA0KPiA+ICAgICAgICAgICAgICAgICk7DQo+ID4gICAgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+ID4gICB9DQo+ID4gT3JpZ2luYWwgZnVuY3Rpb24gQ2hlY2tDcHVGZWF0dXJlc0Rl cGVuZGVuY3koKSB3aWxsIGVudGVyIGEgZGVhZCBsb29wDQo+IGFuZCBwcm9tcHQgbm90aGluZyB3 aGVuIGNoZWNraW5nIGFuZCBzb3J0aW5nIHRoZW0uDQo+IA0KPiBBaCwgSSBzZWUsIHNvIHRoZSBS ZWdpc3RlckNwdUZlYXR1cmUoKSBjYWxsIGNhbiBhZGQgYmVmb3JlL2FmdGVyIGhpbnRzDQo+IHRv IHRoZSBmZWF0dXJlcy4gQW5kIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBjYXVzZSBhbiBpbmZpbml0 ZSBsb29wIGN1cnJlbnRseS4NCj4gDQo+ID4gSSB0aGluayBhIGJldHRlciB3YXkgaXMgdG8gZGV0 ZWN0IHRoaXMgY29uZmxpY3RlZCBsb2dpYyBhbmQgZ2l2ZSBzb21lIGhpbnRzIHRvDQo+IHVzZXIs IHRoZW4gYXNzZXJ0KGZhbHNlKS4NCj4gPg0KPiA+IEZvciB5b3VyIHRocmVlIGNvbW1lbnRzLg0K PiA+IDEuIEhvdyBhYm91dCBjaGFuZ2UgdG8gdGhpcz8NCj4gPiAgIGlmIChCZWZvcmVGbGFnKSB7 DQo+ID4gICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFcnJvcjogRmVhdHVyZSAlYSBiZWZvcmUg Y29uZGl0aW9uIGlzIGludmFsaWQhIiwNCj4gQ3VycmVudENwdUZlYXR1cmUtPkZlYXR1cmVOYW1l KSk7DQo+ID4gICB9IGVsc2Ugew0KPiA+ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRXJyb3I6 IEZlYXR1cmUgJWEgYWZ0ZXIgY29uZGl0aW9uIGlzIGludmFsaWQhIiwNCj4gQ3VycmVudENwdUZl YXR1cmUtPkZlYXR1cmVOYW1lKSk7DQo+ID4gICB9DQo+IA0KPiBJdCdzIE9LIHRvIGRvIHRoaXMg YXMgd2VsbDoNCj4gDQo+ICAgREVCVUcgKCgNCj4gICAgIERFQlVHX0VSUk9SLA0KPiAgICAgIkVy cm9yOiBGZWF0dXJlICVhICVhIGNvbmRpdGlvbiBpcyBpbnZhbGlkIVxuIiwNCj4gICAgIEN1cnJl bnRDcHVGZWF0dXJlLT5GZWF0dXJlTmFtZSwNCj4gICAgIEJlZm9yZUZsYWcgPyAiYmVmb3JlIiA6 ICJhZnRlciINCj4gICAgICkpOw0KPiANCj4gPiAyLiBXaWxsIHVwZGF0ZSBpdCBpbiBWMiBwYXRj aC4NCj4gPiAzLiBIb3cgYWJvdXQgYWRkIGEgcHJlZml4IGJlZm9yZSB0aGUgbmFtZT8NCj4gUmVn aXN0ZXJDcHVGZWF0dXJlc0xpYlNvcnRDcHVGZWF0dXJlcygpIHdpbGwgYmUgdW5pcXVlLg0KPiAN Cj4gU3VyZS4NCj4gDQo+IFRoYW5rcyENCj4gTGFzemxvDQo+IA0KPiA+DQo+ID4gQmVzdCBSZWdh cmRzLA0KPiA+IEJlbGwgU29uZw0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4+IEZyb206IExhc3psbyBFcnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiA+ PiBTZW50OiBXZWRuZXNkYXksIEphbnVhcnkgMzEsIDIwMTggNTo0NCBQTQ0KPiA+PiBUbzogU29u ZywgQmluWCA8YmlueC5zb25nQGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ ID4+IENjOiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiA+PiBTdWJqZWN0OiBS ZTogW1BBVENIXSBVZWZpQ3B1UGtnOiBFbmhhbmNlIENQVSBmZWF0dXJlIGRlcGVuZGVuY3kNCj4g Y2hlY2sNCj4gPj4NCj4gPj4gT24gMDEvMzEvMTggMDg6MDAsIFNvbmcsIEJpblggd3JvdGU6DQo+ ID4+PiBDdXJyZW50IENQVSBmZWF0dXJlIGRlcGVuZGVuY3kgY2hlY2sgd2lsbCBoYW5nIG9uIHdo ZW4gbWVldCBiZWxvdw0KPiBvcg0KPiA+Pj4gc2ltaWxhciBjYXNlOg0KPiA+Pj4gaWYgKElzQ3B1 RmVhdHVyZVN1cHBvcnRlZCAoQ1BVX0ZFQVRVUkVfQUVTTkkpKSB7DQo+ID4+PiAgIFN0YXR1cyA9 IFJlZ2lzdGVyQ3B1RmVhdHVyZSAoDQo+ID4+PiAgICAgICAgICAgICAgIkFFU05JIiwNCj4gPj4+ ICAgICAgICAgICAgICBBZXNuaUdldENvbmZpZ0RhdGEsDQo+ID4+PiAgICAgICAgICAgICAgQWVz bmlTdXBwb3J0LA0KPiA+Pj4gICAgICAgICAgICAgIEFlc25pSW5pdGlhbGl6ZSwNCj4gPj4+ICAg ICAgICAgICAgICBDUFVfRkVBVFVSRV9BRVNOSSwNCj4gPj4+ICAgICAgICAgICAgICBDUFVfRkVB VFVSRV9NV0FJVCB8IENQVV9GRUFUVVJFX0JFRk9SRSwNCj4gPj4+ICAgICAgICAgICAgICBDUFVf RkVBVFVSRV9FTkQNCj4gPj4+ICAgICAgICAgICAgICApOw0KPiA+Pj4gICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+Pj4gfQ0KPiA+Pj4gaWYgKElzQ3B1RmVhdHVyZVN1cHBvcnRlZCAo Q1BVX0ZFQVRVUkVfTVdBSVQpKSB7DQo+ID4+PiAgIFN0YXR1cyA9IFJlZ2lzdGVyQ3B1RmVhdHVy ZSAoDQo+ID4+PiAgICAgICAgICAgICAgIk1XQUlUIiwNCj4gPj4+ICAgICAgICAgICAgICBOVUxM LA0KPiA+Pj4gICAgICAgICAgICAgIE1vbml0b3JNd2FpdFN1cHBvcnQsDQo+ID4+PiAgICAgICAg ICAgICAgTW9uaXRvck13YWl0SW5pdGlhbGl6ZSwNCj4gPj4+ICAgICAgICAgICAgICBDUFVfRkVB VFVSRV9NV0FJVCwNCj4gPj4+ICAgICAgICAgICAgICBDUFVfRkVBVFVSRV9BRVNOSSB8IENQVV9G RUFUVVJFX0JFRk9SRSwNCj4gPj4+ICAgICAgICAgICAgICBDUFVfRkVBVFVSRV9FTkQNCj4gPj4+ ICAgICAgICAgICAgICApOw0KPiA+Pj4gICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ Pj4gfQ0KPiA+Pj4NCj4gPj4+IFNvbHV0aW9uIGlzIHRvIHNlcGFyYXRlIGN1cnJlbnQgQ1BVIGZl YXR1cmUgZGVwZW5kZW5jeSBjaGVjayBpbnRvDQo+ID4+PiBzb3J0IGFuZCBjaGVjayB0d28gcGFy dHMuDQo+ID4+Pg0KPiA+Pj4gU29ydCBmdW5jdGlvbjoNCj4gPj4+IEFjY29yZGluZyB0byBDUFUg ZmVhdHVyZSdzIGRlcGVuZGVuY3ksIHNvcnQgYWxsIENQVSBmZWF0dXJlcy4NCj4gPj4+IExhdGVy IGRlcGVuZGVuY3kgd2lsbCBvdmVycmlkZSBwcmV2aW91cyBkZXBlbmRlbmN5IGlmIHRoZXkgYXJl DQo+IGNvbmZsaWN0ZWQuDQo+ID4+Pg0KPiA+Pj4gQ2hlY2sgZnVuY3Rpb246DQo+ID4+PiBDaGVj ayBzb3J0ZWQgQ1BVIGZlYXR1cmVzJyByZWxhdGlvbnNoaXAsIEFTU0VSVCBpbnZhbGlkIHJlbGF0 aW9uc2hpcC4NCj4gPj4+DQo+ID4+PiBDYzogRXJpYyBEb25nIDxlcmljLmRvbmdAaW50ZWwuY29t Pg0KPiA+Pj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4+PiBDb250 cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+ID4+ PiBTaWduZWQtb2ZmLWJ5OiBCZWxsIFNvbmcgPGJpbnguc29uZ0BpbnRlbC5jb20+DQo+ID4+PiAt LS0NCj4gPj4+ICAuLi4vUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9DcHVGZWF0dXJlc0luaXRpYWxp emUuYyB8IDI3MQ0KPiA+PiArKysrKysrKysrKysrKysrKysrKy0NCj4gPj4+ICAuLi4vUmVnaXN0 ZXJDcHVGZWF0dXJlc0xpYi9SZWdpc3RlckNwdUZlYXR1cmVzLmggICB8ICAgNyArDQo+ID4+PiAg Li4uL1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMzAg Ky0tLS0tLS0tLQ0KPiA+Pj4gIDMgZmlsZXMgY2hhbmdlZCwgMjc4IGluc2VydGlvbnMoKyksIDEz MCBkZWxldGlvbnMoLSkNCj4gPj4+DQo+ID4+PiBkaWZmIC0tZ2l0DQo+ID4+IGEvVWVmaUNwdVBr Zy9MaWJyYXJ5L1JlZ2lzdGVyQ3B1RmVhdHVyZXNMaWIvQ3B1RmVhdHVyZXNJbml0aWFsaXplLmMN Cj4gPj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVnaXN0ZXJDcHVGZWF0dXJlc0xpYi9DcHVGZWF0 dXJlc0luaXRpYWxpemUuYw0KPiA+Pj4gaW5kZXggNGQ3NWMwNy4uMmZkMGQ1ZiAxMDA2NDQNCj4g Pj4+IC0tLSBhL1VlZmlDcHVQa2cvTGlicmFyeS9SZWdpc3RlckNwdUZlYXR1cmVzTGliL0NwdUZl YXR1cmVzSW5pdGlhbGl6ZS5jDQo+ID4+PiArKysNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvUmVn aXN0ZXJDcHVGZWF0dXJlc0xpYi9DcHVGZWF0dXJlc0luaXRpYWxpemUuYw0KPiA+Pj4gQEAgLTQy Myw2ICs0MjMsMjcxIEBAIER1bXBSZWdpc3RlclRhYmxlT25Qcm9jZXNzb3IgKA0KPiA+Pj4gIH0N Cj4gPj4+DQo+ID4+PiAgLyoqDQo+ID4+PiArICBGcm9tIEZlYXR1cmVCaXRNYXNrLCBmaW5kIHRo ZSByaWdodCBmZWF0dXJlIGVudHJ5IGluIENQVSBmZWF0dXJlIGxpc3QuDQo+ID4+PiArDQo+ID4+ PiArICBAcGFyYW1baW5dICBGZWF0dXJlTGlzdCAgICBUaGUgcG9pbnRlciB0byBDUFUgZmVhdHVy ZSBsaXN0Lg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgQ3VycmVudEZlYXR1cmUgVGhlIHBvaW50ZXIg dG8gY3VycmVudCBDUFUgZmVhdHVyZS4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gIEJlZm9yZUZsYWcg ICAgIFRSVUU6IEJlZm9yZUZlYXR1cmVCaXRNYXNrOyBGQUxTRToNCj4gPj4gQWZ0ZXJGZWF0dXJl Qml0TWFzay4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR1cm4gIFRoZSBwb2ludGVyIHRvIHJpZ2h0 IENQVSBmZWF0dXJlIGVudHJ5Lg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0xJU1RfRU5UUlkgKg0KPiA+ Pj4gK0ZpbmRGZWF0dXJlSW5MaXN0KA0KPiA+Pj4gKyAgSU4gTElTVF9FTlRSWSAgICAgICAgICAg ICAgKkNwdUZlYXR1cmVMaXN0LA0KPiA+Pj4gKyAgSU4gQ1BVX0ZFQVRVUkVTX0VOVFJZICAgICAg KkN1cnJlbnRDcHVGZWF0dXJlLA0KPiA+Pj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAg IEJlZm9yZUZsYWcNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBMSVNUX0VOVFJZICAg ICAgICAgICAgICAgICAqVGVtcEVudHJ5Ow0KPiA+Pj4gKyAgQ1BVX0ZFQVRVUkVTX0VOVFJZICAg ICAgICAgKlRlbXBGZWF0dXJlOw0KPiA+Pj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg KkZlYXR1cmVCaXRNYXNrOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgRmVhdHVyZUJpdE1hc2sgPSBCZWZv cmVGbGFnID8gQ3VycmVudENwdUZlYXR1cmUtDQo+ID4+PiBCZWZvcmVGZWF0dXJlQml0TWFzayA6 IEN1cnJlbnRDcHVGZWF0dXJlLT5BZnRlckZlYXR1cmVCaXRNYXNrOw0KPiA+Pj4gKyAgVGVtcEVu dHJ5ID0gR2V0Rmlyc3ROb2RlIChDcHVGZWF0dXJlTGlzdCk7DQo+ID4+PiArICB3aGlsZSAoIUlz TnVsbCAoQ3B1RmVhdHVyZUxpc3QsIFRlbXBFbnRyeSkpIHsNCj4gPj4+ICsgICAgVGVtcEZlYXR1 cmUgPSBDUFVfRkVBVFVSRV9FTlRSWV9GUk9NX0xJTksgKFRlbXBFbnRyeSk7DQo+ID4+PiArICAg IGlmIChJc0JpdE1hc2tNYXRjaENoZWNrIChGZWF0dXJlQml0TWFzaywgVGVtcEZlYXR1cmUtDQo+ ID4+PiBGZWF0dXJlTWFzaykpew0KPiA+Pj4gKyAgICAgIHJldHVybiBUZW1wRW50cnk7DQo+ID4+ PiArICAgIH0NCj4gPj4+ICsgICAgVGVtcEVudHJ5ID0gVGVtcEVudHJ5LT5Gb3J3YXJkTGluazsN Cj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJFcnJv cjogRmVhdHVyZSAlYSAiLCBDdXJyZW50Q3B1RmVhdHVyZS0NCj4gPj4+IEZlYXR1cmVOYW1lLCBC ZWZvcmVGbGFnID8gImJlZm9yZSAiOiJhZnRlciAiLCAiY29uZGl0aW9uIGlzIGludmFsaWQhXG4i KSk7DQo+ID4+DQo+ID4+IEhpLCBJIHNraW1tZWQgdGhpcyBwYXRjaCBxdWlja2x5IC0tIEkgY2Fu IHRlbGwgdGhhdCBJIGNhbid0IHJlYWxseSB0ZWxsDQo+ID4+IHdoYXQncyBnb2luZyBvbi4gSSBk b24ndCBrbm93IGhvdyB0aGUgZmVhdHVyZSBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQNCj4gPj4g aW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hhdCB0aGUgYnVnIGlzLg0KPiA+Pg0KPiA+PiBIb3dl dmVyLCBJIGRvIHNlZSB0aGF0IHRoZSBhYm92ZSBERUJVRyBtYWNybyBpbnZvY2F0aW9uIGlzIGlu Y29ycmVjdC4NCj4gPj4gVGhlIGZvcm1hdCBzdHJpbmcgaGFzIG9uZSAoMSkgJWEgY29udmVyc2lv biBzcGVjaWZpY2F0aW9uLCBidXQgd2UgcGFzcw0KPiA+PiB0aHJlZSAoMykgYXJndW1lbnRzLg0K PiA+Pg0KPiA+PiBJIHRoaW5rIHRoZSBsYXN0IGFyZ3VtZW50ICgiY29uZGl0aW9uIGlzIGludmFs aWQhXG4iKSBzaG91bGQgYWN0dWFsbHkgYmUNCj4gPj4gcGFydCBvZiB0aGUgZm9ybWF0IHN0cmlu Zy4gQW5kIHRoZW4sIHRoZSAiYmVmb3JlIi8iYWZ0ZXIiIHN0cmluZyBoYXMgdG8NCj4gPj4gYmUg cHJpbnRlZCBzb21laG93IGFzIHdlbGwuDQo+ID4+DQo+ID4+IEFub3RoZXIgc3VwZXJmaWNpYWwg b2JzZXJ2YXRpb24gYmVsb3c6DQo+ID4+DQo+ID4+PiArLyoqDQo+ID4+PiArICBDaGVjayBzb3J0 ZWQgQ1BVIGZlYXR1cmVzJyByZWxhdGlvbnNoaXAsIEFTU0VSVCBpbnZhbGlkIG9uZS4NCj4gPj4+ ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gIEZlYXR1cmVMaXN0ICBUaGUgcG9pbnRlciB0byBDUFUg ZmVhdHVyZSBsaXN0Lg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1ZPSUQNCj4gPj4+ICtDaGVja0NwdUZl YXR1cmVzUmVsYXRpb25TaGlwICgNCj4gPj4NCj4gPj4gSSBkb24ndCB0aGluayB3ZSBzaG91bGQg Y2FwaXRhbGl6ZSAiU2hpcCIgaW4gdGhpcyBpZGVudGlmaWVyLg0KPiA+Pg0KPiA+PiBUaGlyZCBj b21tZW50OiB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRlZmluZSAic29ydGluZyIsIHNvIEkn bSBub3QNCj4gPj4gc3VyZSBteSBxdWVzdGlvbiBhcHBsaWVzLCBidXQ6IGNhbiB3ZSByZXBsYWNl IHRoZSBtYW51YWwgc29ydGluZyB3aXRoDQo+ID4+IFNvcnRMaWI/DQo+ID4+DQo+ID4+IFRoYW5r cw0KPiA+PiBMYXN6bG8NCg0K