From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.65; helo=mga03.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 01D9A2095E522 for ; Sat, 30 Sep 2017 20:53:22 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Sep 2017 20:56:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,462,1500966000"; d="scan'208";a="905510037" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by FMSMGA003.fm.intel.com with ESMTP; 30 Sep 2017 20:56:39 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sat, 30 Sep 2017 20:56:39 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sat, 30 Sep 2017 20:56:38 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.175]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.213]) with mapi id 14.03.0319.002; Sun, 1 Oct 2017 11:56:37 +0800 From: "Yao, Jiewen" To: Laszlo Ersek CC: edk2-devel-01 , Ladi Prosek , Ard Biesheuvel Thread-Topic: [edk2] multiple levels of support for MOR / MORLock Thread-Index: AQHTOFkQdWjN5VpEtUydh2Cd6XgU/KLLGEVggAAWqYCAAKqDwP//sp4AgAFCDoCAAJHBgIABAf09 Date: Sun, 1 Oct 2017 03:56:36 +0000 Message-ID: <82879E98-4FBB-421B-823F-5A973E18ED96@intel.com> References: <039cf353-80fb-9f20-6ad2-f52517ab4de7@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503A9C9497@shsmsx102.ccr.corp.intel.com> <1aa05a42-a7a7-410b-c123-8face8be9f78@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503A9C9E00@shsmsx102.ccr.corp.intel.com> <5931c346-67cd-e2fa-aa11-dec14f1841bc@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503A9CAC10@shsmsx102.ccr.corp.intel.com>, In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: MIME-Version: 1.0 Subject: Re: multiple levels of support for MOR / MORLock X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Oct 2017 03:53:23 -0000 Content-Language: zh-CN Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 R29vZCB0ZXN0ISBUaGFua3MgZm9yIHRoZSBpbnZlc3RpZ2F0aW9uLg0KDQpUaGF0IGlzIGEgbGl0 dGxlIGFubm95aW5nLg0KSSBzdGlsbCBkbyBub3Qgd2FudCB0byB1c2UgUENELiBNeSB0aG91Z2h0 IGlzIGJlbG93Og0KDQpDdXJyZW50IE1PUiBoYXMgVENHIHByb3RvY29sIGRlcGVuZGVuY2UuICAg U28gY2FuIHdlIGFkZCBvbmUgbW9yZSBjaGVjayAtIHRvIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2Yg VENHL1RDRzIgcHJvdG9jb2wgaW4gdmFyaWFibGUgZHJpdmVyPyBCb3RoIFRDRyBhbmQgVENHMiBh cmUgaW4gbWRlcGtnLCB0aGVyZSBpcyBubyBkZXBlbmRlbmN5IGlzc3VlLg0KDQpFdmVuIGlmIE1P UiBpcyBwcmVzZW50LCBidXQgbmVpdGhlciBUQ0cgbm9yIFRDRzIgaXMgcHJlc2VudCwgZG9uJ3Qg Y3JlYXRlIE1PUkwgYnV0IGRlbGV0ZSBNT1IuIChKdXN0IGluIGNhc2UgcGVvcGxlIGJvb3QgZmVk b3JhLCB0aGVuIGJvb3Qgd2luZG93cykgSSBiZWxpZXZlIHRoYXQgY2FuIGhhbmRsZSB0aGUgZmVk b3JhIGlzc3VlLg0KDQp0aGFuayB5b3UhDQpZYW8sIEppZXdlbg0KDQoNCj4g1NogMjAxN8TqMTDU wjHI1aOsyc/O5zQ6MzOjrExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+INC0tcCjug0K PiANCj4gSGVsbG8gSmlld2VuLA0KPiANCj4+IE9uIDA5LzMwLzE3IDA1OjUzLCBZYW8sIEppZXdl biB3cm90ZToNCj4+IEFncmVlLiBBZGRpbmcgYSBob29rIGZ1bmN0aW9uIGlzIE9LIGZvciBtZSwg YXMgbG9uZyBhcyB0aGUgaG9vaw0KPj4gZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gaXMgaW4gVGNn TW9yTG9ja1hYWC5jDQo+IA0KPiBJJ3ZlIGltcGxlbWVudGVkIHRoaXMsIGJ1dCBJJ3ZlIHJ1biBp bnRvIGEgcHJvYmxlbSB3aGlsZSB0ZXN0aW5nIGl0Lg0KPiANCj4gWW91ciBpZGVhIHJlcXVpcmVz IHRoYXQgKm5vdGhpbmcqIGNyZWF0ZSB0aGUgTU9SIHZhcmlhYmxlIG90aGVyIHRoYW4NCj4gDQo+ ICBTZWN1cml0eVBrZy9UY2cvTWVtb3J5T3ZlcndyaXRlQ29udHJvbC9UY2dNb3IuaW5mDQo+IA0K PiBVbmZvcnR1bmF0ZWx5LCByZWxlYXNlZCBGZWRvcmEgb3BlcmF0aW5nIHN5c3RlbXMgYnJlYWsg dGhpcyBhc3N1bXB0aW9uLg0KPiAoSXQgaXMgYSBMaW51eCBrZXJuZWwgYnVnLCBubyBxdWVzdGlv biBhYm91dCB0aGF0LCBidXQgaXQgc3RpbGwgYnJlYWtzDQo+IHRoZSBpZGVhLikNCj4gDQo+IE5h bWVseSwgaW4gdGhlIGN1cnJlbnQgdXBzdHJlYW0gTGludXgga2VybmVsICh0aGUgKnVwY29taW5n KiB2NC4xNA0KPiByZWxlYXNlKSwgdGhlcmUgaXMgYSBmdW5jdGlvbiBjYWxsZWQNCj4gZWZpX2Vu YWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbigpLCBhZGRlZCBpbiBjb21taXQgY2NjODI5YmEz NjI0YjoNCj4gDQo+ICBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVs L2dpdC90b3J2YWxkcy9saW51eC5naXQvY29tbWl0Lz9pZD1jY2M4MjliYTM2MjRiDQo+IA0KPj4g LyoNCj4+ICogRW5hYmxlIHJlYm9vdCBhdHRhY2sgbWl0aWdhdGlvbi4gVGhpcyByZXF1ZXN0cyB0 aGF0IHRoZSBmaXJtd2FyZSBjbGVhciB0aGUNCj4+ICogUkFNIG9uIG5leHQgcmVib290IGJlZm9y ZSBwcm9jZWVkaW5nIHdpdGggYm9vdCwgZW5zdXJpbmcgdGhhdCBhbnkgc2VjcmV0cw0KPj4gKiBh cmUgY2xlYXJlZC4gSWYgdXNlcmxhbmQgaGFzIGVuc3VyZWQgdGhhdCBhbGwgc2VjcmV0cyBoYXZl IGJlZW4gcmVtb3ZlZA0KPj4gKiBmcm9tIFJBTSBiZWZvcmUgcmVib290IGl0IGNhbiBzaW1wbHkg cmVzZXQgdGhpcyB2YXJpYWJsZS4NCj4+ICovDQo+PiB2b2lkIGVmaV9lbmFibGVfcmVzZXRfYXR0 YWNrX21pdGlnYXRpb24oZWZpX3N5c3RlbV90YWJsZV90ICpzeXNfdGFibGVfYXJnKQ0KPj4gew0K Pj4gICAgICAgIHU4IHZhbCA9IDE7DQo+PiAgICAgICAgZWZpX2d1aWRfdCB2YXJfZ3VpZCA9IE1F TU9SWV9PTkxZX1JFU0VUX0NPTlRST0xfR1VJRDsNCj4+ICAgICAgICBlZmlfc3RhdHVzX3Qgc3Rh dHVzOw0KPj4gICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YXNpemUgPSAwOw0KPj4gDQo+PiAgICAg ICAgc3RhdHVzID0gZ2V0X2VmaV92YXIoZWZpX01lbW9yeU92ZXJXcml0ZVJlcXVlc3RfbmFtZSwg JnZhcl9ndWlkLA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZkYXRhc2l6 ZSwgTlVMTCk7DQo+PiANCj4+ICAgICAgICBpZiAoc3RhdHVzID09IEVGSV9OT1RfRk9VTkQpDQo+ PiAgICAgICAgICAgICAgICByZXR1cm47DQo+PiANCj4+ICAgICAgICBzZXRfZWZpX3ZhcihlZmlf TWVtb3J5T3ZlcldyaXRlUmVxdWVzdF9uYW1lLCAmdmFyX2d1aWQsDQo+PiAgICAgICAgICAgICAg ICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQo+PiAgICAgICAgICAgICAgICAgICAg RUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUyB8DQo+PiAgICAgICAgICAgICAgICAgICAg RUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTLCBzaXplb2YodmFsKSwgJnZhbCk7DQo+PiB9DQo+ IA0KPiBUaGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3QgaW4gdGhhdCBpdCBmaXJzdCBjaGVja3Mgd2hl dGhlciB0aGUgTU9SDQo+IHZhcmlhYmxlIGV4aXN0cy4gSWYgaXQgZG9lc24ndCBleGlzdCwgdGhl IGZ1bmN0aW9uIGRvZXNuJ3QgKmNyZWF0ZSogdGhlDQo+IHZhcmlhYmxlLg0KPiANCj4gSG93ZXZl ciwgc2V2ZXJhbCBGZWRvcmEgZGlzdHJpYnV0aW9uIGtlcm5lbHMgKmFscmVhZHkqIGNvbnRhaW4g YW4NCj4gKmVhcmxpZXIqIHZlcnNpb24gb2YgdGhlIHNhbWUgZnVuY3Rpb24gKHdoaWNoIGhhZCBu ZXZlciBiZWVuIG1lcmdlZCBpbnRvDQo+IHVwc3RyZWFtIExpbnV4KSwgYW5kIHRoYXQgdmFyaWFu dCBvZiB0aGUgZnVuY3Rpb24gaXMgaW5jb3JyZWN0Og0KPiANCj4gIGh0dHBzOi8vZ2l0Lmtlcm5l bC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2p3Ym95ZXIvZmVkb3JhLmdpdC9jb21taXQv P2lkPTY1NjczZTM3ZTYxZDgNCj4gDQo+PiBzdGF0aWMgdm9pZCBlbmFibGVfcmVzZXRfYXR0YWNr X21pdGlnYXRpb24odm9pZCkNCj4+IHsNCj4+ICAgICAgICBzdGF0aWMgY29uc3QgZWZpX2d1aWRf dCB2YXJfZ3VpZCA9IE1FTU9SWV9PTkxZX1JFU0VUX0NPTlRST0xfR1VJRDsNCj4+ICAgICAgICBz dGF0aWMgY29uc3QgZWZpX2NoYXIxNl90IE1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sX25h bWVbXSA9IHsNCj4+ICAgICAgICAgICAgICAgICdNJywgJ2UnLCAnbScsICdvJywgJ3InLCAneScs DQo+PiAgICAgICAgICAgICAgICAnTycsICd2JywgJ2UnLCAncicsICd3JywgJ3InLCAnaScsICd0 JywgJ2UnLA0KPj4gICAgICAgICAgICAgICAgJ1InLCAnZScsICdxJywgJ3UnLCAnZScsICdzJywg J3QnLA0KPj4gICAgICAgICAgICAgICAgJ0MnLCAnbycsICduJywgJ3QnLCAncicsICdvJywgJ2wn LA0KPj4gICAgICAgICAgICAgICAgMA0KPj4gICAgICAgIH07DQo+PiAgICAgICAgdTggdmFsID0g MTsNCj4+IA0KPj4gICAgICAgIC8qIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGhlcmUgLSB0aGVy ZSdzIG5vdCByZWFsbHkgYSBsb3Qgd2UgY2FuIGRvICovDQo+PiAgICAgICAgZWZpX2NhbGxfcnVu dGltZShzZXRfdmFyaWFibGUsDQo+PiAgICAgICAgICAgICAgICAgICAgICAgIChlZmlfY2hhcjE2 X3QgKilNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbF9uYW1lLA0KPj4gICAgICAgICAgICAg ICAgICAgICAgICAoZWZpX2d1aWRfdCAqKSZ2YXJfZ3VpZCwNCj4+ICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQo+PiAgICAgICAgICAgICAgICAgICAg ICAgIEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MgfA0KPj4gICAgICAgICAgICAgICAg ICAgICAgICBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MsDQo+PiAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZih2YWwpLCB2YWwpOw0KPj4gfQ0KPiANCj4gVGhpcyB2YXJpYW50IGRvZXMg bm90IGNoZWNrIGlmIHRoZSBNT1IgdmFyaWFibGUgZXhpc3RzLg0KPiANCj4gSWYgdGhlIHZhcmlh YmxlIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBpdA0KPiAo aW5jb3JyZWN0bHkpLiBBdCB0aGUgbmV4dCBib290LCB0aGUgU21tRW5kT2ZEeGUgY2FsbGJhY2sg aW4NCj4gIlRjZ01vckxvY2tTbW0uYyIgd2lsbCB0aGluayB0aGF0IHRoZSBmaXJtd2FyZSBwbGF0 Zm9ybSBpbmNsdWRlcyBzdXBwb3J0DQo+IGZvciB0aGUgTU9SIHZhcmlhYmxlIChpdCBhc3N1bWVz IHRoYXQgVGNnTW9yLmluZiBpcyBwYXJ0IG9mIHRoZSBmaXJtd2FyZQ0KPiBhbmQgdGhhdCBUY2dN b3IuaW5mIGNyZWF0ZWQgdGhlIHZhcmlhYmxlKSwgYW5kIHRoZW4gdGhlIGNhbGxiYWNrDQo+IGNy ZWF0ZXMvc2V0cyBNb3JMb2NrIGFzIHdlbGwuDQo+IA0KPiBBZ2FpbiwgdGhpcyBpcyBjbGVhcmx5 IGEga2VybmVsIGJ1ZywgYnV0IGl0IGlzIHBhcnQgb2YgYXQgbGVhc3QgdGhlDQo+IGZvbGxvd2lu ZyByZWxlYXNlczoNCj4gDQo+IC0gRmVkb3JhIDI2Og0KPiAgaHR0cHM6Ly9naXQua2VybmVsLm9y Zy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvandib3llci9mZWRvcmEuZ2l0L2NvbW1pdC8/aWQ9 NjU2NzNlMzdlNjFkDQo+IA0KPiAtIEZlZG9yYSAyNToNCj4gIGh0dHBzOi8vZ2l0Lmtlcm5lbC5v cmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2p3Ym95ZXIvZmVkb3JhLmdpdC9jb21taXQvP2lk PTFmNGU1ZTY1NzY4NQ0KPiANCj4gLSBGZWRvcmEgMjQ6DQo+ICBodHRwczovL2dpdC5rZXJuZWwu b3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qd2JveWVyL2ZlZG9yYS5naXQvY29tbWl0Lz9p ZD02Nzc3NjVkNGRiOGUNCj4gDQo+IFRodXMgdGhlIFNtbUVuZE9mRHhlIGNhbGxiYWNrIHdvdWxk bid0IHdvcmsgY29ycmVjdGx5IHRvZ2V0aGVyIHdpdGgNCj4gdGhlc2UgRmVkb3JhIHJlbGVhc2Vz Lg0KPiANCj4gVGhhbmtzLA0KPiBMYXN6bG8NCj4gDQo+PiBGcm9tOiBMYXN6bG8gRXJzZWsgW21h aWx0bzpsZXJzZWtAcmVkaGF0LmNvbV0NCj4+IFNlbnQ6IFNhdHVyZGF5LCBTZXB0ZW1iZXIgMzAs IDIwMTcgMTI6MzkgQU0NCj4+IFRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+ DQo+PiBDYzogZWRrMi1kZXZlbC0wMSA8ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+OyBMYWRpIFBy b3NlayA8bHByb3Nla0ByZWRoYXQuY29tPg0KPj4gU3ViamVjdDogUmU6IFtlZGsyXSBtdWx0aXBs ZSBsZXZlbHMgb2Ygc3VwcG9ydCBmb3IgTU9SIC8gTU9STG9jaw0KPj4gDQo+Pj4gT24gMDkvMjkv MTcgMTU6MjYsIFlhbywgSmlld2VuIHdyb3RlOg0KPj4+IFN1cmUuIEZlZWwgZnJlZSB0byBzdWJt aXQgcGF0Y2guDQo+Pj4gDQo+Pj4gRm9yIHRoZSBmaXgsIEkgc3VnZ2VzdCB3ZSBrZWVwIGFsbCBN T1JMIHJlbGF0ZWQgY29kZSBpbnRvDQo+Pj4gVGNnTW9yTG9ja1hYWC5jLiBJIGRvIG5vdCBzdWdn ZXN0IHdlIG1peCB0aGUgTU9STCBzdHVmZiBpbnRvDQo+Pj4gVmFyaWFibGVYWFguYy4NCj4+IA0K Pj4gSSd2ZSBoYWQgbW9yZSB0aG91Z2h0cyBhYm91dCB0aGlzLCBzaW5jZSBzZW5kaW5nIG15IGxh c3QgZW1haWwuDQo+PiANCj4+IEN1cnJlbnRseSBTbW1FbmRPZkR4ZUNhbGxiYWNrKCkNCj4+IFtN ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvVmFyaWFibGVTbW0uY10g cGVyZm9ybXMNCj4+IHRoZSBmb2xsb3dpbmcgYWN0aW9uczoNCj4+IA0KPj4gLSBzZXRzICJtRW5k T2ZEeGUiIHRvIFRSVUUNCj4+IC0gY2FsbHMgVmFyQ2hlY2tMaWJJbml0aWFsaXplQXRFbmRPZkR4 ZSgpDQo+PiAtIGNhbGxzIEluaXRpYWxpemVWYXJpYWJsZVF1b3RhKCkNCj4+IC0gY2FsbHMgUmVj bGFpbUZvck9TKCkgb3B0aW9uYWxseQ0KPj4gDQo+PiBJZiB3ZSByZWdpc3RlciBhIHNlcGFyYXRl IGNhbGxiYWNrIGZvciBnRWZpU21tRW5kT2ZEeGVQcm90b2NvbEd1aWQsIGluDQo+PiBvcmRlciB0 byBjcmVhdGUgdGhlIE1PUkwgdmFyaWFibGUsIHRoZW4gdGhhdCBjYWxsYmFjayBjb3VsZCBiZSBp bnZva2VkDQo+PiBhZnRlciBTbW1FbmRPZkR4ZUNhbGxiYWNrKCkuIEkgdGhpbmsgaXQgd291bGQg bm90IGJlIG9wdGltYWwgdG8gY3JlYXRlDQo+PiBNT1JMIGFmdGVyIFNtbUVuZE9mRHhlQ2FsbGJh Y2soKSBoYXMgcnVuLCBldmVuIGlmIGl0IHdvcmtlZCwNCj4+IHRlY2huaWNhbGx5IHNwZWFraW5n LiBUaGlzIHN1Z2dlc3RzIHRvIGhvb2sgdGhlIE1PUkwgY3JlYXRpb24gdG8gdGhlDQo+PiB0b3Ag b2YgU21tRW5kT2ZEeGVDYWxsYmFjaygpLiBXaGF0IGRvIHlvdSBzdWdnZXN0Pw0KPj4gDQo+Pj4g QSByZW1pbmRlciB0aGF0LCB0aGUgUFJDIHRlYW0gd2lsbCBoYXZlIHRoZSBQUkMgbmF0aW9uYWwg aG9saWRheSBpbg0KPj4+IG5leHQgd2Vlay4gQXMgc3VjaCwgd2Ugd29uJ3QgaGF2ZSB0b28gbXVj aCBhY3Rpdml0eSBpbiBuZXh0IHdlZWsuDQo+Pj4gDQo+Pj4gSWYgeW91IHN1Ym1pdCB0aGUgcGF0 Y2gsIEkgd2lsbCB0cnkgdG8gcmV2aWV3IGluIG5leHQgd2VlayB0byB1bmJsb2NrDQo+Pj4gdGhl IExpbnV4IHdvcmsuDQo+PiANCj4+IEFoLCBzb3JyeSwgSSBoYXZlbid0IGJlZW4gYXdhcmUgb2Yg dGhlIGhvbGlkYXlzLg0KPj4gDQo+PiBJIG1pZ2h0IHNlbmQgYSBwYXRjaCBzb29uLCBidXQgcGxl YXNlIGRvbid0IGxldCBtZSBkaXN0dXJiIHlvdSBkdXJpbmcNCj4+IHRoZSBob2xpZGF5cyEgRXNw ZWNpYWxseSBiZWNhdXNlIHRoaXMgcGF0Y2ggbWlnaHQgbmVlZCBtb3JlIGRpc2N1c3Npb24NCj4+ IGFuZCBtb3JlIHZlcnNpbnMuIEhvbGlkYXlzIGFyZSBmb3IgZ2V0dGluZyByZXN0ZWQgZnJvbSB3 b3JrISA6KSBXZSBjYW4NCj4+IHNvcnQgaXQgb3V0IGFmdGVyIHlvdSByZXR1cm4uDQo+PiANCj4+ PiBJbiB0aGUgcGF0Y2gsIGlmIHlvdSBjYW4gYWRkIHRoZSBkZXRhaWxlZCB0ZXN0IHJlc3VsdCwg dGhhdCB3aWxsIGJlDQo+Pj4gdmVyeSBoZWxwZnVsIGZvciB1cy4gRm9yIGV4YW1wbGUsIHRlc3Qg U01NL25vbi1TTU0gdmVyc2lvbiwgdGVzdCB3aXRoDQo+Pj4gTU9SIHByZXNlbnQvYWJzZW50LCBl dGMuDQo+PiANCj4+IEZvciB0aGUgIm5vIE1PUiwgbm8gTU9STCIgY2FzZSwgSSdsbCBoYXZlIHRv IHJlbHkgb24gTGFkaSwgZm9yIHRlc3QNCj4+IHJlc3VsdHMgKExhZGkgb2ZmZXJlZCB0byBoZWxw IHRlc3QgdGhhdCBjYXNlLCB0aGFua3MgYWdhaW4gZm9yIHRoYXQsDQo+PiBMYWRpKS4NCj4+IA0K Pj4gSG93ZXZlciwgZm9yIHJlZ3Jlc3Npb24tdGVzdGluZyB0aGUgImJvdGggTU9SIGFuZCBNT1JM IiBjYXNlLCBJIGNhbg0KPj4gb25seSByZWx5IG9uIEludGVsIGRldmVsb3BlcnMgYW5kIHF1YWxp dHkgZW5naW5lZXJzIC0tIE9WTUYgZG9lc24ndA0KPj4gaGF2ZSBhbnkgVFBNIC8gTU9SIHNvbHV0 aW9uIGF0IHRoZSBtb21lbnQuIChJZiB3ZSBoYWQgb25lLCB0aGVuIHdlDQo+PiB3b3VsZG4ndCBo YXZlIGZvdW5kIG9yIHJlcG9ydGVkIHRoaXMgaXNzdWUgaW4gdGhlIGZpcnN0IHBsYWNlLiA6KSAp DQo+PiANCj4+IFRoZSBmYWN0IHRoYXQgSSBjYW4ndCByZWdyZXNzaW9uLXRlc3QgdGhlIE1PUitN T1JMIGNhc2UgbXlzZWxmDQo+PiBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IHdlIHNob3VsZCBwb3N0 cG9uZSB0aGUgcmV2aWV3IGFuZCBjb21taXQgKGlmDQo+PiBhcHByb3ByaWF0ZSkgb2YgdGhlIHBh dGNoIHVudGlsIGFmdGVyIHRoZSBQUkMgbmF0aW9uYWwgaG9saWRheS4NCj4+IA0KPj4gVGhhbmtz IQ0KPj4gTGFzemxvDQo+PiANCj4+IA0KPj4+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsy LWRldmVsLWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiBCZWhhbGYgT2YgTGFzemxvIEVyc2VrDQo+ Pj4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMjksIDIwMTcgNzowNiBQTQ0KPj4+IFRvOiBZYW8s IEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29t Pj4NCj4+PiBDYzogZWRrMi1kZXZlbC0wMSA8ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRv OmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPj4NCj4+PiBTdWJqZWN0OiBSZTogW2VkazJdIG11bHRp cGxlIGxldmVscyBvZiBzdXBwb3J0IGZvciBNT1IgLyBNT1JMb2NrDQo+Pj4gDQo+Pj4+IE9uIDA5 LzI5LzE3IDAzOjUyLCBZYW8sIEppZXdlbiB3cm90ZToNCj4+Pj4gVGhhbmtzIExhc3psby4NCj4+ Pj4gDQo+Pj4+IFllcywgSSBhZ3JlZSBpdCBpcyBidWcuIFdvdWxkIHlvdSBwbGVhc2UgaGVscCB0 byBmaWxlIGEgYnVnemlsYXIgaW4NCj4+Pj4gRURLSUk/DQo+Pj4+IA0KPj4+PiBGb3IgdGhlIGZp eCwgSSB0aGluayB3ZSBoYXZlIGEgd2F5IHRvIHJlc29sdmUgaXQgd2l0aG91dCBQQ0QuIChJIGRv DQo+Pj4+IG5vdCB3YW50IHRvIGJvdGhlciBhIHBsYXRmb3JtIGRldmVsb3BlciB0byBzZXQgYSBu ZXcgUENELikNCj4+Pj4gDQo+Pj4+IFRoZSBvbmx5IGludmFsaWQgY2FzZSB3ZSBuZWVkIGhhbmRs ZSBpczogTU9SIGlzIGFic2VudCwgYnV0IE1PUkwgaXMNCj4+Pj4gcHJlc2VudC4NCj4+Pj4gDQo+ Pj4+IE15IHRob3VnaHQgaXMgdG8gbGV0IFZhcmlhYmxlIGRyaXZlciBjaGVjayBpZiBNT1IgaXMg cHJlc2VudC4NCj4+Pj4gVmFyaWFibGUgZHJpdmVyIGNhbiBkZWZlciB0aGUgTU9STCBzZXR0aW5n IGF0IEVuZE9mRHhlIGV2ZW50IGJhc2VkDQo+Pj4+IHVwb24gdGhlIHByZXNlbmNlIG9mIE1PUi4g SWYgTU9SIGRyaXZlciBpcyBwcmVzZW50LCBpdCBzZXRzIE1PUiBhdA0KPj4+PiBlbnRyeXBvaW50 LiBFbmRPZkR4ZSBpcyBnb29kIGVub3VnaCB0byBrbm93IHRoZSBzdGF0ZS4NCj4+Pj4gDQo+Pj4+ IEFsc28sIGJlY2F1c2UgRW5kT2ZEeGUgaXMgUEkgZXZlbnQsIHRoZSBVRUZJIE9TIGlzIG5vdCBh d2FyZSBvZg0KPj4+PiB0aGF0Lg0KPj4+IA0KPj4+IFNvdW5kcyBncmVhdDsgdGhhbmtzIGEgbG90 IQ0KPj4+IA0KPj4+IEkndmUgZmlsZWQ6DQo+Pj4gDQo+Pj4gIGh0dHBzOi8vYnVnemlsbGEudGlh bm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3DQo+Pj4gDQo+Pj4gSWYgcG9zc2libGUgSSdk IGxpa2UgdGhlIGZpeCB0byBiZSBjb21taXR0ZWQgc29tZXRpbWUgbmV4dCB3ZWVrLiBJcw0KPj4+ IGl0IE9LIGlmIEkgdHJ5IGFuZCBzdWJtaXQgYSBwYXRjaCBzb29uPyBNeSBwbGFuIGlzIHRoZSBm b2xsb3dpbmc6DQo+Pj4gDQo+Pj4gLSBJbiBNb3JMb2NrSW5pdCgpIFtUY2dNb3JMb2NrU21tLmNd LCBjYWxsDQo+Pj4gZ1Ntc3QtPlNtbVJlZ2lzdGVyUHJvdG9jb2xOb3RpZnkoKSBpbiBvcmRlciB0 byByZWdpc3RlciBhIGNhbGxiYWNrDQo+Pj4gZm9yIGdFZmlTbW1FbmRPZkR4ZVByb3RvY29sR3Vp ZA0KPj4+IA0KPj4+IC0gSW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCBjYWxsIFZhcmlhYmxlU2Vy dmljZUdldFZhcmlhYmxlKCksIHdpdGgNCj4+PiBzaXplIDAsIHRvIHNlZSBpZiBNT1IgaXMgcHJl c2VudCAtLSBpZiBFRklfQlVGRkVSX1RPT19TTUFMTCBpcw0KPj4+IHJldHVybmVkLCBNT1IgaXMg cHJlc2VudDsgb3RoZXJ3aXNlIE1PUiBpcyBhYnNlbnQuDQo+Pj4gDQo+Pj4gLSBJZiBNT1IgaXMg cHJlc2VudCwgdGhlbiBjYWxsIFNldE1vckxvY2tWYXJpYWJsZSgwKSBmcm9tIHRoZQ0KPj4+IGNh bGxiYWNrIGZ1bmN0aW9uOyBsaWtlIE1vckxvY2tJbml0KCkgZG9lcyBub3cuIE90aGVyd2lzZSwg ZG8NCj4+PiBub3RoaW5nLg0KPj4+IA0KPj4+IC0gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgbm8g Y2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBJIHNob3VsZA0KPj4+IGRlLXJlZ2lzdGVyIHRoZSBj YWxsYmFjay4gKEkuZS4gY2FsbCBTbW1SZWdpc3RlclByb3RvY29sTm90aWZ5KCkgd2l0aA0KPj4+ IGEgTlVMTCBGdW5jdGlvbiBhcmd1bWVudC4pDQo+Pj4gDQo+Pj4gDQo+Pj4gTm93LCBJIGNhbiBz ZWUgdGhhdCBWYXJpYWJsZVNtbS5jIGFscmVhZHkgaW5zdGFsbHMgc3VjaCBhIGNhbGxiYWNrIC0t DQo+Pj4gU21tRW5kT2ZEeGVDYWxsYmFjaygpLiBTaG91bGQgSSBob29rIGludG8gdGhhdCBjYWxs YmFjayBmdW5jdGlvbg0KPj4+IHRocm91Z2ggYSBuZXcgQk9PTEVBTiB2YXJpYWJsZSwgc3VjaCBh cyAibURlbGF5ZWRNb3JMb2NrSW5pdCIgKGFuZA0KPj4+IHRoZW4gTW9yTG9ja0luaXQoKSB3b3Vs ZCBvbmx5IHNldCB0aGlzIHZhcmlhYmxlIHRvIFRSVUUpLCBvciBzaG91bGQgSQ0KPj4+IGluc3Rh bGwgYSBzZXBhcmF0ZSBjYWxsYmFjaz8NCj4+PiANCj4+PiBFaXRoZXIgd2F5LCBJIGRvbid0IHRo aW5rIHRoYXQgSSBzaG91bGQgZG8gdGhlIE1PUi9NT1JMIHN0dWZmIGluIHRoZQ0KPj4+IGN1cnJl bnQgU21tRW5kT2ZEeGVDYWxsYmFjaygpIGZ1bmN0aW9uICp1bmNvbmRpdGlvbmFsbHkqLCBiZWNh dXNlDQo+Pj4gdGhhdCBjYWxsYmFjayBpcyBzZXQgdXAgd2hlbiB0aGUgKnJlYWQqIGhhbGYgb2Yg dGhlIHZhcmlhYmxlIHNlcnZpY2VzDQo+Pj4gaXMgaW5pdGlhbGl6ZWQsIGJ1dCBNT1JMIG9ubHkg YmVjb21lcyByZWxldmFudCB3aGVuIHRoZSAqd3JpdGUqIGhhbGYNCj4+PiBvZiB0aGUgdmFyaWFi bGUgc2VydmljZXMgaXMgaW5pdGlhbGl6ZWQgKHdoaWNoIG9jY3VycyBpbiB0aGUNCj4+PiBTbW1G dHdOb3RpZmljYXRpb25FdmVudCgpIGNhbGxiYWNrLCBpLmUuIHdoZW4gdGhlIEZhdWx0VG9sZXJh bnRXcml0ZQ0KPj4+IFNNTSBwcm90b2NvbCBiZWNvbWVzIGF2YWlsYWJsZSkuIEhlbmNlIEkgdGhp bmsgd2UgbmVlZCBlaXRoZXIgYQ0KPj4+IHNlcGFyYXRlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiwg b3IgYSBuZXcgYm9vbGVhbiBmb3IgdGhlIGV4aXN0ZW50DQo+Pj4gY2FsbGJhY2suDQo+Pj4gDQo+ Pj4gVGhhbmtzIQ0KPj4+IExhc3psbw0K