From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector2-amdcloud-onmicrosoft-com header.b=YbSJEeJM; spf=none, err=SPF record not found (domain: amd.com, ip: 40.107.76.74, mailfrom: thomas.lendacky@amd.com) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.74]) by groups.io with SMTP; Wed, 02 Oct 2019 07:44:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=njhy3vXtRjuu0F08FsY++QwftNhqeRxn9gyoyJy2NbUG8BPMd+TPC42wH6B5fyMwUZKnzo2hSy1+R9sWR9y0T7u9AKMGMiE+Ookj6kz7Cx3M70KjvMMv1i21Qw2OazkL2tpZ+f3BuZIM1kuArZrsCMGGjaYGJZorDMpnS2H2mRvl4ut6Wx3Eu3lGkQuJvGjwKU7L2RBX+RJqmKM17ts/jKogANwl6AeGZCksXIyrJtekyztO5M/Cx2vYGamGYFon4Hf7u2SMuaJK8f/5HbRdjyryDvd0wcitb488g8OX3sHdaaa8ta2M+1/zm89/L1z0PfyF3+e2O1WCjNiscu0QhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6IHQ6PoNqA2PXgkpOwXxS2nL9f62ffpAyES/0IOhlwU=; b=E5VTNecly2FFiTP6tnC9CRRrtFNle3XMItxbpZz1F0n7VTMrs9maYshB42NlbRPYtDZRvle0gt6m4DTI+2xHu/lHhSZWHQvLkmWLzCfyfczb8FZBNMCJ5rON9ChDMN/e4DCE+fjcQ5zjl8blWrFce1nxZ0Ikb5zwFKboFC3t3UrXMVhnvqsBKyXQ2THJgMJky81PDBCqwFzogXQ5Bjdev52gE54wI5Mwatv/dL3lll32fK36XuhGCDgPCNIVCH169aceo1noe8rJ4BLbf4/EvMv88o/tvKSxcrOjfGmq17+21s0KwfYYAHrWR+aNrX5sJsJO7RTcT845IHg/vYhmpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6IHQ6PoNqA2PXgkpOwXxS2nL9f62ffpAyES/0IOhlwU=; b=YbSJEeJMqNwTLIa00fhF4yEaU0FQf8ca50MQdApYDMbINdM119kkpT/TXTVeG93xWpDwl0F37iWHxqpgBCW2ZKcPFIat0DWazplLOIv5M+cj031i8HIc33c0yexSXw+YE8LmAPyon+/8gyt8cZkYAqx7K2MHUFhWYZt8ICD0jks= Received: from DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2747.namprd12.prod.outlook.com (20.176.118.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Wed, 2 Oct 2019 14:43:58 +0000 Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::85b7:7456:1a67:78aa]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::85b7:7456:1a67:78aa%7]) with mapi id 15.20.2305.023; Wed, 2 Oct 2019 14:43:58 +0000 From: "Lendacky, Thomas" To: Laszlo Ersek , "devel@edk2.groups.io" CC: Jordan Justen , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: Re: [edk2-devel] [RFC PATCH v2 08/44] OvmfPkg: Create GHCB pages for use during Pei and Dxe phase Thread-Topic: [edk2-devel] [RFC PATCH v2 08/44] OvmfPkg: Create GHCB pages for use during Pei and Dxe phase Thread-Index: AQHVbyPHXRDv/YGRIEiL4Ddvjs4NBKdHOLYAgABIpQA= Date: Wed, 2 Oct 2019 14:43:58 +0000 Message-ID: <964e94f7-fbd3-efa4-d309-1ef9e52fcfd0@amd.com> References: <9799d415f652618c8a960cdb0040918185588652.1568922728.git.thomas.lendacky@amd.com> <7aac09f5-8494-3fba-b114-b2b070b6e959@redhat.com> In-Reply-To: <7aac09f5-8494-3fba-b114-b2b070b6e959@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0055.namprd05.prod.outlook.com (2603:10b6:803:41::32) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 37bd90ac-3143-4372-f08c-08d74746f544 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2747: x-ms-exchange-purlcount: 3 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0178184651 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(376002)(396003)(136003)(366004)(346002)(39860400002)(52314003)(199004)(189003)(26005)(386003)(6506007)(966005)(229853002)(102836004)(5660300002)(53546011)(36756003)(478600001)(305945005)(7736002)(2501003)(6436002)(6306002)(6512007)(6486002)(52116002)(76176011)(110136005)(66066001)(54906003)(25786009)(486006)(2616005)(86362001)(31696002)(186003)(11346002)(6116002)(14454004)(316002)(476003)(446003)(31686004)(81156014)(81166006)(8676002)(2906002)(256004)(14444005)(8936002)(3846002)(19627235002)(71190400001)(71200400001)(4326008)(99286004)(66446008)(64756008)(66556008)(66476007)(66946007)(6246003);DIR:OUT;SFP:1101;SCL:1;SRVR:DM6PR12MB2747;H:DM6PR12MB3163.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: FoKODr1Je9UOcdBfMQmEmQcq+mhljN462oDhbilmXXNBAJ8b2wRcbjR8XwBR+m7KRy0bwnHKB/om/71o+ZVA2C3SBq9Fj+EUCMUNjAGrYU09bkzM9qcUmZDl0ckzL+kmEtKhtqbjttJg/0f2M9D/c5XOS9eIg28rmggKy7GHCtQsVLYBCCumWhRbI2gSZehkm5fcGpm2O9yiFQGEDsO/KQx3gIleC/InWCBx18cskwFQ37Q4C3YpoYddnQE/CDeMMRKcprd7k046M/VdyIFmblM+X+OodgY2bNZd5ByUMJN64l5TR4ryA/gXFuMYUhvsUbwHPVxxP6lmysYq4PFSvnLwdZOjQyrvY43dE19ALyG+RqfXJ79e38GAVXKVg94paUL2otznimhpjEdvQRCbUpD6BH1UkJebE9RO5hmNuCKlzt1n8Od7R7Z6nMGf7kqbCGfH7z9z1f7QFzhkVXIF0A== MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37bd90ac-3143-4372-f08c-08d74746f544 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Oct 2019 14:43:58.7431 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sBrH5GtoCen5t4th0p+vLj5J2qhVi4mJwR8GWhkUN04vHYzhEisOreGn+9bN/p1ZsV+HdX9WoaYeF2euvDYwHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2747 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 T24gMTAvMi8xOSA1OjIzIEFNLCBMYXN6bG8gRXJzZWsgd3JvdGU6DQo+IEFmdGVyIHRoZSBkaXNj dXNzaW9uIGVsc2V3aGVyZSBpbiB0aGlzIHBhdGNoIHRocmVhZCwgd2hpY2ggcmVsYXRlZCB0bw0K PiBjb21taXQgbWVzc2FnZXMsIGFuZCBwYXRjaCBvcmRlciBpbiB0aGUgc2VyaWVzLCBJIGNhbiBt YWtlIGEgZmV3IGNvZGluZw0KPiBzdHlsZSBjb21tZW50cyBvbiB0aGUgcGF0Y2guIChObyBjaGFu Z2UgdG8gZnVuY3Rpb25hbGl0eS4pDQo+IA0KPiBPbiAwOS8xOS8xOSAyMTo1MiwgTGVuZGFja3ks IFRob21hcyB3cm90ZToNCj4+IEZyb206IFRvbSBMZW5kYWNreSA8dGhvbWFzLmxlbmRhY2t5QGFt ZC5jb20+DQo+Pg0KPj4gQlo6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9MjE5OA0KPj4NCj4+IEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIEdIQ0IgcGFnZXMg ZHVyaW5nIFNFViBpbml0aWFsaXphdGlvbiBmb3IgdXNlDQo+PiBkdXJpbmcgUGVpIGFuZCBEeGUg cGhhc2VzLiBUaGUgR0hDQiBwYWdlKHMpIG11c3QgYmUgc2hhcmVkIHBhZ2VzLCBzbw0KPj4gY2xl YXIgdGhlIGVuY3J5cHRpb24gbWFzayBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgZW50cmll cy4gVXBvbg0KPj4gc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBzZXQgdGhlIEdIQ0IgUENEcyAoUGNk R2hjYkJhc2UgYW5kIFBjZEdoY2JTaXplKS4NCj4+DQo+PiBDYzogSm9yZGFuIEp1c3RlbiA8am9y ZGFuLmwuanVzdGVuQGludGVsLmNvbT4NCj4+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRo YXQuY29tPg0KPj4gQ2M6IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3Jn Pg0KPj4gU2lnbmVkLW9mZi1ieTogVG9tIExlbmRhY2t5IDx0aG9tYXMubGVuZGFja3lAYW1kLmNv bT4NCj4+IC0tLQ0KPj4gIE92bWZQa2cvT3ZtZlBrZ0lhMzIuZHNjICAgICAgICAgICAgIHwgIDIg KysNCj4+ICBPdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYyAgICAgICAgICB8ICAyICsrDQo+PiAg T3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYyAgICAgICAgICAgICAgfCAgMiArKw0KPj4gIE92bWZQa2cv UGxhdGZvcm1QZWkvUGxhdGZvcm1QZWkuaW5mIHwgIDIgKysNCj4+ICBPdm1mUGtnL1BsYXRmb3Jt UGVpL0FtZFNldi5jICAgICAgICB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ PiAgNSBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+Pg0K Pj4gZGlmZiAtLWdpdCBhL092bWZQa2cvT3ZtZlBrZ0lhMzIuZHNjIGIvT3ZtZlBrZy9Pdm1mUGtn SWEzMi5kc2MNCj4+IGluZGV4IDBjZTVjMDE3MjJlZi4uNDM2OWNmNmQ1NWU1IDEwMDY0NA0KPj4g LS0tIGEvT3ZtZlBrZy9Pdm1mUGtnSWEzMi5kc2MNCj4+ICsrKyBiL092bWZQa2cvT3ZtZlBrZ0lh MzIuZHNjDQo+PiBAQCAtNTYwLDYgKzU2MCw4IEBAIFtQY2RzRHluYW1pY0RlZmF1bHRdDQo+PiAg DQo+PiAgICAjIFNldCBTRVYtRVMgZGVmYXVsdHMNCj4+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RTZXZFc0FjdGl2ZXwwDQo+PiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkR2hjYkJhc2V8MA0KPj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VH dWlkLlBjZEdoY2JTaXplfDANCj4+ICANCj4+ICAhaWYgJChTTU1fUkVRVUlSRSkgPT0gVFJVRQ0K Pj4gICAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1VHNlZ01ieXRlc3w4DQo+PiBk aWZmIC0tZ2l0IGEvT3ZtZlBrZy9Pdm1mUGtnSWEzMlg2NC5kc2MgYi9Pdm1mUGtnL092bWZQa2dJ YTMyWDY0LmRzYw0KPj4gaW5kZXggZTc0NTVlMzVhNTVkLi5hNzRmNTAyODA2OGUgMTAwNjQ0DQo+ PiAtLS0gYS9Pdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYw0KPj4gKysrIGIvT3ZtZlBrZy9Pdm1m UGtnSWEzMlg2NC5kc2MNCj4+IEBAIC01NzIsNiArNTcyLDggQEAgW1BjZHNEeW5hbWljRGVmYXVs dF0NCj4+ICANCj4+ICAgICMgU2V0IFNFVi1FUyBkZWZhdWx0cw0KPj4gICAgZ0VmaU1kZU1vZHVs ZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFNldkVzQWN0aXZlfDANCj4+ICsgIGdFZmlNZGVNb2R1bGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RHaGNiQmFzZXwwDQo+PiArICBnRWZpTWRlTW9kdWxlUGtnVG9r ZW5TcGFjZUd1aWQuUGNkR2hjYlNpemV8MA0KPj4gIA0KPj4gICFpZiAkKFNNTV9SRVFVSVJFKSA9 PSBUUlVFDQo+PiAgICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2RRMzVUc2VnTWJ5dGVz fDgNCj4+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dYNjQuZHNjIGIvT3ZtZlBrZy9Pdm1m UGtnWDY0LmRzYw0KPj4gaW5kZXggMGI4MzA1Y2QxMGEyLi5mZDcxNGQzODZlNzUgMTAwNjQ0DQo+ PiAtLS0gYS9Pdm1mUGtnL092bWZQa2dYNjQuZHNjDQo+PiArKysgYi9Pdm1mUGtnL092bWZQa2dY NjQuZHNjDQo+PiBAQCAtNTcxLDYgKzU3MSw4IEBAIFtQY2RzRHluYW1pY0RlZmF1bHRdDQo+PiAg DQo+PiAgICAjIFNldCBTRVYtRVMgZGVmYXVsdHMNCj4+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RTZXZFc0FjdGl2ZXwwDQo+PiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkR2hjYkJhc2V8MA0KPj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VH dWlkLlBjZEdoY2JTaXplfDANCj4+ICANCj4+ICAhaWYgJChTTU1fUkVRVUlSRSkgPT0gVFJVRQ0K Pj4gICAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1VHNlZ01ieXRlc3w4DQo+PiBk aWZmIC0tZ2l0IGEvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybVBlaS5pbmYgYi9Pdm1mUGtn L1BsYXRmb3JtUGVpL1BsYXRmb3JtUGVpLmluZg0KPj4gaW5kZXggYTllNDI0YTYwMTJhLi42MmFi Yzk5ZjQ2MjIgMTAwNjQ0DQo+PiAtLS0gYS9Pdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtUGVp LmluZg0KPj4gKysrIGIvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybVBlaS5pbmYNCj4+IEBA IC0xMDUsNiArMTA1LDggQEAgW1BjZF0NCj4+ICAgIGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQu UGNkQ3B1QXBJbml0VGltZU91dEluTWljcm9TZWNvbmRzDQo+PiAgICBnVWVmaUNwdVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZENwdUFwU3RhY2tTaXplDQo+PiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkU2V2RXNBY3RpdmUNCj4+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNl R3VpZC5QY2RHaGNiQmFzZQ0KPj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBj ZEdoY2JTaXplDQo+PiAgDQo+PiAgW0ZpeGVkUGNkXQ0KPj4gICAgZ0VmaU1kZVBrZ1Rva2VuU3Bh Y2VHdWlkLlBjZFBjaUV4cHJlc3NCYXNlQWRkcmVzcw0KPiANCj4gKDEpIE9uY2UgeW91IG1vdmUg UGNkU2V2RXNBY3RpdmUgbmVhciB0aGUgb3RoZXINCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3Bh Y2VHdWlkIFBDRHMsIHBlcg0KPiA8aHR0cDovL21pZC5tYWlsLWFyY2hpdmUuY29tL2JkMzhkYTMx LTA5ODUtMmZmYy1iNjBkLWY4NjdhMDIxOGFiMkByZWRoYXQuY29tPiwNCj4gcGxlYXNlIGtlZXAg dGhlc2UgZ3JvdXBlZCB3aXRoIGl0LCB0b28uDQoNCldpbGwgZG8uDQoNCj4gDQo+PiBkaWZmIC0t Z2l0IGEvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9BbWRTZXYuYyBiL092bWZQa2cvUGxhdGZvcm1QZWkv QW1kU2V2LmMNCj4+IGluZGV4IDdhZTJmMjZhMmJhNy4uMzBjMGU0YWY3MjUyIDEwMDY0NA0KPj4g LS0tIGEvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9BbWRTZXYuYw0KPj4gKysrIGIvT3ZtZlBrZy9QbGF0 Zm9ybVBlaS9BbWRTZXYuYw0KPj4gQEAgLTE2LDYgKzE2LDkgQEANCj4+ICAjaW5jbHVkZSA8UGlQ ZWkuaD4NCj4+ICAjaW5jbHVkZSA8UmVnaXN0ZXIvQW1kL0NwdWlkLmg+DQo+PiAgI2luY2x1ZGUg PFJlZ2lzdGVyL0NwdWlkLmg+DQo+PiArI2luY2x1ZGUgPFJlZ2lzdGVyL0FtZC9Nc3IuaD4NCj4+ ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+PiArI2luY2x1ZGUgPExpYnJh cnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiANCj4gKDIpIFRoaXMgI2luY2x1ZGUgbGlzdCBp cyBjdXJyZW50bHkgc29ydGVkLiBDYW4geW91IHBsZWFzZSBrZWVwIGl0IHNvcnRlZD8NCj4gDQo+ PiAgDQo+PiAgI2luY2x1ZGUgIlBsYXRmb3JtLmgiDQo+PiAgDQo+PiBAQCAtMzAsNyArMzMsMTAg QEAgQW1kU2V2RXNJbml0aWFsaXplICgNCj4+ICAgIFZPSUQNCj4+ICAgICkNCj4+ICB7DQo+PiAt ICBSRVRVUk5fU1RBVFVTICAgICBQY2RTdGF0dXM7DQo+PiArICBWT0lEICAgICAgICAgICAgICAq R2hjYkJhc2U7DQo+PiArICBQSFlTSUNBTF9BRERSRVNTICBHaGNiQmFzZVBhOw0KPj4gKyAgVUlO VE4gICAgICAgICAgICAgR2hjYlBhZ2VDb3VudDsNCj4+ICsgIFJFVFVSTl9TVEFUVVMgICAgIFBj ZFN0YXR1cywgRGVjcnlwdFN0YXR1czsNCj4+ICANCj4+ICAgIGlmICghTWVtRW5jcnlwdFNldkVz SXNFbmFibGVkICgpKSB7DQo+PiAgICAgIHJldHVybjsNCj4+IEBAIC0zOCw2ICs0NCwzNCBAQCBB bWRTZXZFc0luaXRpYWxpemUgKA0KPj4gIA0KPj4gICAgUGNkU3RhdHVzID0gUGNkU2V0Qm9vbFMg KFBjZFNldkVzQWN0aXZlLCAxKTsNCj4+ICAgIEFTU0VSVF9SRVRVUk5fRVJST1IgKFBjZFN0YXR1 cyk7DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gQWxsb2NhdGUgR0hDQiBwYWdlcy4NCj4+ICsg IC8vDQo+PiArICBHaGNiUGFnZUNvdW50ID0gbU1heENwdUNvdW50Ow0KPj4gKyAgR2hjYkJhc2Ug PSBBbGxvY2F0ZVBhZ2VzIChHaGNiUGFnZUNvdW50KTsNCj4gDQo+IFllcywgQWxsb2NhdGVQYWdl cygpIGxvb2tzIHNhZmUsIHBlcg0KPiA8aHR0cDovL21pZC5tYWlsLWFyY2hpdmUuY29tLzQwMjlm NTMzLTlmMmEtYmE3MS0yYmE2LTM0ODE4N2RjNzY4NEByZWRoYXQuY29tPi4NCj4gDQo+PiArICBB U1NFUlQgKEdoY2JCYXNlKTsNCj4gDQo+ICgzKSBJIGRvbid0IHJlYWxseSBsaWtlIHVzaW5nICpv bmx5KiBhbiBBU1NFUlQgZm9yIHN0b3BwaW5nLCB3aGVuIHdlIHJ1bg0KPiBvdXQgb2YgcmVzb3Vy Y2VzIGluIGEgcGxhY2UgbGlrZSB0aGlzIChpLmUuIHdoZXJlIHRoZXJlJ3Mgbm8gd2F5IHRvDQo+ IHJlY292ZXIsIG9yIHRvIHJlcG9ydCB0aGUgaXNzdWUgbmljZWx5KS4gSSdkIHN1Z2dlc3QgdGhy b3dpbmcgaW4gYW4NCj4gZXhwbGljaXQgY2hlY2sgYW5kIGEgQ3B1RGVhZExvb3AoKSwgaW4gYWRk aXRpb24gdG8gdGhlIEFTU0VSVC4gQW55d2F5LA0KPiBub3QgcmVhbGx5IGltcG9ydGFudCwgdXAg dG8geW91Lg0KDQpPaywgbGV0IG1lIHRoaW5rIGFib3V0IHRoYXQuIElmIEFTU0VSVCBpcyBlbmFi bGVkLCB5b3UnbGwgZ2V0IHRoZSBBU1NFUlQNCm1lc3NhZ2UgKHNpbmNlIHRoZSBTRUMgR0hDQiBp cyBpbiBwbGFjZSBhbmQgT1ZNRiBpcyBydW5uaW5nIGluIDY0LWJpdA0KbW9kZSkuIElmIEFTU0VS VCBpcyBub3QgZW5hYmxlZCwgdGhlbiB0aGUgWmVyb01lbSB3aWxsIHNlZ2ZhdWx0IG9uIGEgTlVM TA0KcG9pbnRlciwgd2hpY2ggd2lsbCBnaXZlIGEgYml0IG1vcmUgaW5mbyB0aGFuIHRoZSBDcHVE ZWFkTG9vcCgpIHdoaWNoDQp3b3VsZCBsb29rIG1vcmUgbGlrZSBhIGhhbmcuDQoNCj4gDQo+ICg0 KSBUaGUgZXhwcmVzc2lvbiBpbiB0aGUgQVNTRVJUKCkgc2hvdWxkIGNvbXBhcmUgR2hjYkJhc2Ug YWdhaW5zdCBOVUxMDQo+IGV4cGxpY2l0bHksIGhvd2V2ZXIuIFRoZSBlZGsyIGNvZGluZyBzdHls ZSBwZXJtaXRzIHRoZSBpbXBsaWNpdCAiIT0gMCINCj4gY29tcGFyaXNvbiAoaW4gY29udHJvbGxp bmcgZXhwcmVzc2lvbnMpIGZvciBCT09MRUFOcyBvbmx5Lg0KDQpXaWxsIGRvLg0KDQo+IA0KPj4g Kw0KPj4gKyAgR2hjYkJhc2VQYSA9IChQSFlTSUNBTF9BRERSRVNTKShVSU5UTikgR2hjYkJhc2U7 DQo+PiArDQo+PiArICBEZWNyeXB0U3RhdHVzID0gTWVtRW5jcnlwdFNldkNsZWFyUGFnZUVuY01h c2sgKA0KPj4gKyAgICAwLA0KPj4gKyAgICBHaGNiQmFzZVBhLA0KPj4gKyAgICBHaGNiUGFnZUNv dW50LA0KPj4gKyAgICBUUlVFDQo+PiArICAgICk7DQo+PiArICBBU1NFUlRfUkVUVVJOX0VSUk9S IChEZWNyeXB0U3RhdHVzKTsNCj4+ICsNCj4+ICsgIFNldE1lbSAoR2hjYkJhc2UsIEdoY2JQYWdl Q291bnQgKiBTSVpFXzRLQiwgMCk7DQo+IA0KPiAoNSkgVGhlIGZvbGxvd2luZyB3b3VsZCBiZSBt b3JlIGlkaW9tYXRpYzoNCj4gDQo+ICAgWmVyb01lbSAoR2hjYkJhc2UsIEVGSV9QQUdFU19UT19T SVpFIChHaGNiUGFnZUNvdW50KSk7DQoNCldpbGwgZG8uDQoNCj4gDQo+IChsaWtlIHlvdSB3cml0 ZSBiZWxvdyBhbHJlYWR5KQ0KPiANCj4+ICsNCj4+ICsgIFBjZFN0YXR1cyA9IFBjZFNldDY0UyAo UGNkR2hjYkJhc2UsIChVSU5UNjQpR2hjYkJhc2VQYSk7DQo+PiArICBBU1NFUlRfUkVUVVJOX0VS Uk9SIChQY2RTdGF0dXMpOw0KPj4gKyAgUGNkU3RhdHVzID0gUGNkU2V0NjRTIChQY2RHaGNiU2l6 ZSwgKFVJTlQ2NClFRklfUEFHRVNfVE9fU0laRSAoR2hjYlBhZ2VDb3VudCkpOw0KPj4gKyAgQVNT RVJUX1JFVFVSTl9FUlJPUiAoUGNkU3RhdHVzKTsNCj4+ICsNCj4+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIlNFVi1FUyBpcyBlbmFibGVkLCAldSBHSENCIHBhZ2VzIGFsbG9jYXRlZCBzdGFydGlu ZyBhdCAweCVseFxuIiwgR2hjYlBhZ2VDb3VudCwgR2hjYkJhc2UpKTsNCj4gDQo+ICg2KSBUaGlz IGxpbmUgaXMgdG9vIGxvbmc7IHBsZWFzZSB0cnkgdG8gc3RpY2sgd2l0aCA8PTgwIGNoYXJzIHBl ciBsaW5lLg0KDQpIdWgsIGRvbid0IGtub3cgaG93IEkgbWlzc2VkIHRoYXQgb25lLiBJJ2xsIGZp eCB0aGF0Lg0KDQo+IA0KPiAoNykgVUlOVE4gdmFsdWVzIChzdWNoIGFzIEdoY2JQYWdlQ291bnQp IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gVUlOVDY0DQo+IGV4cGxpY2l0bHksIGFuZCB0aGVuIGZv cm1hdHRlZCB3aXRoICVsdS4NCg0KT2ssIHdpbGwgZG8gKGFuZCBJJ2xsIGNoZWNrIHRoZSByZXN0 IG9mIG15IHBhdGNoZXMgZm9yIHRoaXMpLg0KDQo+IA0KPiAoOCkgR2hjYkJhc2UgaXMgYSBwb2lu dGVyLXRvLXZvaWQ7IHBsZWFzZSBlaXRoZXIgZm9ybWF0IGl0IHdpdGggJXAsIG9yDQo+IHVzZSBH aGNiQmFzZVBhLiAoV2UgY2FuIHJlbHkgb24gdGhlIGxhdHRlciBiZWluZyBVSU5UNjQuKQ0KPiAN Cj4gICBERUJVRyAoKERFQlVHX0lORk8sDQo+ICAgICAiU0VWLUVTIGlzIGVuYWJsZWQsICVsdSBH SENCIHBhZ2VzIGFsbG9jYXRlZCBzdGFydGluZyBhdCAweCVseFxuIiwNCj4gICAgIChVSU5UNjQp R2hjYlBhZ2VDb3VudCwgR2hjYkJhc2VQYSkpOw0KPiANCj4+ICsNCj4+ICsgIEFzbVdyaXRlTXNy NjQgKE1TUl9TRVZfRVNfR0hDQiwgKFVJTlQ2NClHaGNiQmFzZVBhKTsNCj4+ICB9DQo+PiAgDQo+ PiAgLyoqDQo+Pg0KPiANCj4gKDkpIElmIHlvdSBsaWtlLCB5b3UgY2FuIGRyb3AgdGhlIChVSU5U NjQpIGNhc3RzIGZyb20gYWxsIHRoZQ0KPiAiR2hjYkJhc2VQYSIgcmVmZXJlbmNlczsgYWxsIG9m IGVkazIgdXNlcyBQSFlTSUNBTF9BRERSRVNTIGFuZA0KPiBFRklfUEhZU0lDQUxfQUREUkVTUyBp bnRlcmNoYW5nZWFibHksIGFuZCB0aGUgbGF0dGVyIGlzIFVJTlQ2NCBwZXIgc3BlYy4NCg0KTmlj ZSwgdGhhdCB3aWxsIGNsZWFuIGl0IHVwIGEgYml0Lg0KDQpUaGFua3MsIFRvbQ0KDQo+IA0KPiBX aXRoIHRoZSBhYm92ZSB1cGRhdGVkIC0tICgzKSBhbmQgKDkpIGFyZSBvcHRpb25hbCAtLQ0KPiAN Cj4gUmV2aWV3ZWQtYnk6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+IA0KPiBU aGFua3MhDQo+IExhc3psbw0KPiANCg==