From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@citrix.com header.s=securemail header.b=Pg8bPGe1; spf=pass (domain: citrix.com, ip: 216.71.155.175, mailfrom: anthony.perard@citrix.com) Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by groups.io with SMTP; Tue, 13 Aug 2019 04:58:45 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1565697524; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LxIWAL2otNxzMxkwpzbh1CtLvNL30mSsL6IS4d0CuVk=; b=Pg8bPGe1Hj/+Pp23jbW+om7D+iMiJGP8D4uU0twv7K1Wygn3EeWcbvce BVaNgR+HXN6cdSzsjf3KoNJeFn2xuDSGldaK4V/qbWn60PSCpI9Ps9eUC g/DA19DJDGDhK5PFvqHQ9Ak0wbO0oXVOVic/VrCmXkTBVjhtFtuai3+02 0=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: JWz3jpstM9ApbuaHtI5wmMENGY14NAASH7i3+0Usdt4qhIxzCn+hPEU36eNaSNV+gkZwxgOgNr qeWOLd822YhtN+e8aLfXLY45bitGuMqJV5sPhUwoS+cbV82wQfv71PADC2ZFRh1n4Zdqg4hFUm 5U6/2E5NqwcXAeufn5zXXGcgCYu4eePzouTGhcL2VyL1YOZT4hUoMFdnJnO0TC3tWLw2qlCt1Q 1spFFD9J2bmX8wPmQ8AwDViPiohLeSPvkP7ls+rEvRpa8R8qAEgpLoI+LgjbcdOkICsCtjYhxO 6bo= X-SBRS: 2.7 X-MesageID: 4374849 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,381,1559534400"; d="scan'208";a="4374849" From: "Anthony PERARD" To: CC: Laszlo Ersek , Jordan Justen , Julien Grall , , Ard Biesheuvel , Anthony PERARD Subject: [PATCH v5 23/35] OvmfPkg/XenPlatformPei: Rework memory detection Date: Tue, 13 Aug 2019 12:31:07 +0100 Message-ID: <20190813113119.14804-24-anthony.perard@citrix.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190813113119.14804-1-anthony.perard@citrix.com> References: <20190813113119.14804-1-anthony.perard@citrix.com> MIME-Version: 1.0 Return-Path: anthony.perard@citrix.com Content-Transfer-Encoding: base64 Content-Type: text/plain V2hlbiBydW5uaW5nIGFzIGEgWGVuIFBWSCBndWVzdCwgdGhlcmUgaXMgbm8gQ01PUyB0byByZWFk IHRoZSBtZW1vcnkKc2l6ZSBmcm9tLiAgUmV3b3JrIEdldFN5c3RlbU1lbW9yeVNpemUoQmVsb3d8 QWJvdmUpNGdiKCkgc28gdGhleSBjYW4Kd29yayB3aXRob3V0IENNT1MgYnkgcmVhZGluZyB0aGUg ZTgyMCB0YWJsZS4KClJld29yayBYZW5QdWJsaXNoUmFtUmVnaW9ucyB0byBhbHNvIGNhcmUgZm9y IHRoZSByZXNlcnZlZCBhbmQgQUNQSQplbnRyeSBpbiB0aGUgZTgyMCB0YWJsZS4gVGhlIHJlZ2lv biB0aGF0IHdhcyBhZGRlZCBieSBJbml0aWFsaXplWGVuKCkKaXNuJ3QgbmVlZGVkIGFzIHRoYXQg c2FtZSBlbnRyeSBpcyBpbiB0aGUgZTgyMCB0YWJsZSBwcm92aWRlZCBieQpodm1sb2FkZXIuCgpN VFJSIHNldHRpbmdzIGFyZW4ndCBtb2RpZmllZCBhbnltb3JlLCBvbiBIVk0gaXQncyBhbHJlYWR5 IGRvbmUgYnkKaHZtbG9hZGVyLCBvbiBQVkggaXQgaXMgc3VwcG9zZWQgdG8gaGF2ZSBzYW5lIGRl ZmF1bHQuIE1UUlIgd2lsbCBuZWVkCnRvIGJlIGRvbmUgcHJvcGVybHkgYnV0IGtlZXBpbmcgd2hh dCdzIGFscmVhZHkgYmVlbiBkb25lIGJ5IHByb2dyYW1zCnRoYXQgaGF2ZSBydW4gYmVmb3JlIE9W TUYgd2lsbCBkbyBmb3Igbm93LgoKUmVmOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcv c2hvd19idWcuY2dpP2lkPTE2ODkKU2lnbmVkLW9mZi1ieTogQW50aG9ueSBQRVJBUkQgPGFudGhv bnkucGVyYXJkQGNpdHJpeC5jb20+CkFja2VkLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRo YXQuY29tPgotLS0KCk5vdGVzOgogICAgdjU6CiAgICAtIGZpeCBjb2Rpbmcgc3R5bGUKICAgIC0g Zml4IHR5cG8gaW4gY29tbWl0IG1lc3NhZ2UKICAgIC0gSGFuZGxlIGFsbCBwb3NzaWJsZSBjYXNl cyBvZiBhIEU4MjAgcmVzZXJ2ZWQgcmFuZ2Ugb3ZlcmxhcHBpbmcgd2l0aCB0aGUKICAgICAgTEFQ SUMgcmFuZ2UuCiAgICAKICAgIHY0OgogICAgLSBzb21lIGNvZGluZyBzdHlsZQogICAgLSBBZGRl ZCBBZGRSZXNlcnZlZE1lbW9yeVJhbmdlSG9iLCBhbmQgdXNpbmcgaXQuCiAgICAtIHRoaXMgcGF0 Y2ggbm93IHJlcGxhY2UgIk92bWZQa2cvWGVuUGxhdGZvcm1QZWk6IFJlc2VydmUgaHZtbG9hZGVy J3MgbWVtb3J5IG9ubHkgd2hlbiBpdCBoYXMgcnVuIgogICAgICBmcm9tIHYzLiAgaHZtbG9hZGVy IGhhdmUgYWRkZWQgYW4gZW50cnkgaW4gdGhlIGU4MjAgdGFibGUsIHRoZXJlIGlzIG5vCiAgICAg IG5lZWQgZm9yIGEgc3BlY2lhbCBjYXNlLgogICAgLSBub3csIGV2ZXJ5dGhpbmcgdGhhdCBpcyBp biB0aGUgZTgyMCB0YWJsZSBpcyBhZGRlZCB0byBPVk1GJ3MgbWVtb3J5CiAgICAgIG1hcCwgbm8g bW9yZSBza2lwcGluZyBBQ1BJIGVudHJpZXMgb3IgaHZtbG9hZGVyJ3MgcmVzZXJ2ZWQgZW50cmll cy4KICAgICAgSW5zdGVhZCwgd2UgbG9vayBmb3IgdGhlIGxvY2FsIEFQSUMgcmVnaW9uIGFuZCBh dm9pZCBpdCBpZiBpdCBpcwogICAgICBwcmVzZW50IGluIHRoZSBlODIwLgogICAgLSByZXdvcmsg Y29tbWl0IG1lc3NhZ2UKCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3JtLmggIHwgMTMg KysrKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL01lbURldGVjdC5jIHwgNjkgKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBPdm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3JtLmMgIHwg MTEgKysrKysKIE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuLmMgICAgICAgfCA3NSArKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMTQ3IGluc2VydGlvbnMo KyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkv UGxhdGZvcm0uaCBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvUGxhdGZvcm0uaAppbmRleCBkYjlh NjI1NzJmLi43NjYxZjRhOGRlIDEwMDY0NAotLS0gYS9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1Bs YXRmb3JtLmgKKysrIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5oCkBAIC00NCw2 ICs0NCwxMyBAQCBBZGRSZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iICgKICAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgIENhY2hlYWJsZQ0KICAgKTsNCiANCitWT0lEDQorQWRkUmVzZXJ2ZWRN ZW1vcnlSYW5nZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFz ZSwNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlMaW1pdCwNCisgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICBDYWNoZWFibGUNCisgICk7DQorDQogVk9JRA0KIEFkZHJl c3NXaWR0aEluaXRpYWxpemF0aW9uICgNCiAgIFZPSUQNCkBAIC0xMTQsNiArMTIxLDEyIEBAIFhl blB1Ymxpc2hSYW1SZWdpb25zICgKICAgVk9JRA0KICAgKTsNCiANCitFRklfU1RBVFVTDQorWGVu R2V0RTgyME1hcCAoDQorICBFRklfRTgyMF9FTlRSWTY0ICoqRW50cmllcywNCisgIFVJTlQzMiAq Q291bnQNCisgICk7DQorDQogZXh0ZXJuIEVGSV9CT09UX01PREUgbUJvb3RNb2RlOw0KIA0KIGV4 dGVybiBVSU5UOCBtUGh5c01lbUFkZHJlc3NXaWR0aDsNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hl blBsYXRmb3JtUGVpL01lbURldGVjdC5jIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9NZW1EZXRl Y3QuYwppbmRleCBjZjk1ZjljNDc0Li4xZjgxZWVlNDA3IDEwMDY0NAotLS0gYS9Pdm1mUGtnL1hl blBsYXRmb3JtUGVpL01lbURldGVjdC5jCisrKyBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvTWVt RGV0ZWN0LmMKQEAgLTk2LDYgKzk2LDQ1IEBAIFEzNVRzZWdNYnl0ZXNJbml0aWFsaXphdGlvbiAo CiAgIG1RMzVUc2VnTWJ5dGVzID0gRXh0ZW5kZWRUc2VnTWJ5dGVzOw0KIH0NCiANCitTVEFUSUMN CitVSU5UNjQNCitHZXRIaWdoZXN0U3lzdGVtTWVtb3J5QWRkcmVzcyAoDQorICBCT09MRUFOICAg ICAgIEJlbG93NGdiDQorICApDQorew0KKyAgRUZJX0U4MjBfRU5UUlk2NCAgICAqRTgyME1hcDsN CisgIFVJTlQzMiAgICAgICAgICAgICAgRTgyMEVudHJpZXNDb3VudDsNCisgIEVGSV9FODIwX0VO VFJZNjQgICAgKkVudHJ5Ow0KKyAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQorICBVSU5U MzIgICAgICAgICAgICAgIExvb3A7DQorICBVSU5UNjQgICAgICAgICAgICAgIEhpZ2hlc3RBZGRy ZXNzOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICBFbnRyeUVuZDsNCisNCisgIEhpZ2hlc3RBZGRy ZXNzID0gMDsNCisNCisgIFN0YXR1cyA9IFhlbkdldEU4MjBNYXAgKCZFODIwTWFwLCAmRTgyMEVu dHJpZXNDb3VudCk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgZm9yIChM b29wID0gMDsgTG9vcCA8IEU4MjBFbnRyaWVzQ291bnQ7IExvb3ArKykgew0KKyAgICBFbnRyeSA9 IEU4MjBNYXAgKyBMb29wOw0KKyAgICBFbnRyeUVuZCA9IEVudHJ5LT5CYXNlQWRkciArIEVudHJ5 LT5MZW5ndGg7DQorDQorICAgIGlmIChFbnRyeS0+VHlwZSA9PSBFZmlBY3BpQWRkcmVzc1Jhbmdl TWVtb3J5ICYmDQorICAgICAgICBFbnRyeUVuZCA+IEhpZ2hlc3RBZGRyZXNzKSB7DQorDQorICAg ICAgaWYgKEJlbG93NGdiICYmIChFbnRyeUVuZCA8PSBCQVNFXzRHQikpIHsNCisgICAgICAgIEhp Z2hlc3RBZGRyZXNzID0gRW50cnlFbmQ7DQorICAgICAgfSBlbHNlIGlmICghQmVsb3c0Z2IgJiYg KEVudHJ5RW5kID49IEJBU0VfNEdCKSkgew0KKyAgICAgICAgSGlnaGVzdEFkZHJlc3MgPSBFbnRy eUVuZDsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIC8vDQorICAvLyBSb3VuZCBkb3du IHRoZSBlbmQgYWRkcmVzcy4NCisgIC8vDQorICByZXR1cm4gSGlnaGVzdEFkZHJlc3MgJiB+KFVJ TlQ2NClFRklfUEFHRV9NQVNLOw0KK30NCiANCiBVSU5UMzINCiBHZXRTeXN0ZW1NZW1vcnlTaXpl QmVsb3c0Z2IgKA0KQEAgLTEwNSw2ICsxNDQsMTkgQEAgR2V0U3lzdGVtTWVtb3J5U2l6ZUJlbG93 NGdiICgKICAgVUlOVDggQ21vczB4MzQ7DQogICBVSU5UOCBDbW9zMHgzNTsNCiANCisgIC8vDQor ICAvLyBJbiBQVkggY2FzZSwgdGhlcmUgaXMgbm8gQ01PUywgd2UgaGF2ZSB0byBjYWxjdWxhdGUg dGhlIG1lbW9yeSBzaXplDQorICAvLyBmcm9tIHBhcnNpbmcgdGhlIEU4MjANCisgIC8vDQorICBp ZiAoWGVuUHZoRGV0ZWN0ZWQgKCkpIHsNCisgICAgVUlOVDY0ICBIaWdoZXN0QWRkcmVzczsNCisN CisgICAgSGlnaGVzdEFkZHJlc3MgPSBHZXRIaWdoZXN0U3lzdGVtTWVtb3J5QWRkcmVzcyAoVFJV RSk7DQorICAgIEFTU0VSVCAoSGlnaGVzdEFkZHJlc3MgPiAwICYmIEhpZ2hlc3RBZGRyZXNzIDw9 IEJBU0VfNEdCKTsNCisNCisgICAgcmV0dXJuIEhpZ2hlc3RBZGRyZXNzOw0KKyAgfQ0KKw0KICAg Ly8NCiAgIC8vIENNT1MgMHgzNC8weDM1IHNwZWNpZmllcyB0aGUgc3lzdGVtIG1lbW9yeSBhYm92 ZSAxNiBNQi4NCiAgIC8vICogQ01PUygweDM1KSBpcyB0aGUgaGlnaCBieXRlDQpAQCAtMTI5LDYg KzE4MSwyMyBAQCBHZXRTeXN0ZW1NZW1vcnlTaXplQWJvdmU0Z2IgKAogICBVSU5UMzIgU2l6ZTsN CiAgIFVJTlROICBDbW9zSW5kZXg7DQogDQorICAvLw0KKyAgLy8gSW4gUFZIIGNhc2UsIHRoZXJl IGlzIG5vIENNT1MsIHdlIGhhdmUgdG8gY2FsY3VsYXRlIHRoZSBtZW1vcnkgc2l6ZQ0KKyAgLy8g ZnJvbSBwYXJzaW5nIHRoZSBFODIwDQorICAvLw0KKyAgaWYgKFhlblB2aERldGVjdGVkICgpKSB7 DQorICAgIFVJTlQ2NCAgSGlnaGVzdEFkZHJlc3M7DQorDQorICAgIEhpZ2hlc3RBZGRyZXNzID0g R2V0SGlnaGVzdFN5c3RlbU1lbW9yeUFkZHJlc3MgKEZBTFNFKTsNCisgICAgQVNTRVJUIChIaWdo ZXN0QWRkcmVzcyA9PSAwIHx8IEhpZ2hlc3RBZGRyZXNzID49IEJBU0VfNEdCKTsNCisNCisgICAg aWYgKEhpZ2hlc3RBZGRyZXNzID49IEJBU0VfNEdCKSB7DQorICAgICAgSGlnaGVzdEFkZHJlc3Mg LT0gQkFTRV80R0I7DQorICAgIH0NCisNCisgICAgcmV0dXJuIEhpZ2hlc3RBZGRyZXNzOw0KKyAg fQ0KKw0KICAgLy8NCiAgIC8vIENNT1MgMHg1Yi0weDVkIHNwZWNpZmllcyB0aGUgc3lzdGVtIG1l bW9yeSBhYm92ZSA0R0IgTUIuDQogICAvLyAqIENNT1MoMHg1ZCkgaXMgdGhlIG1vc3Qgc2lnbmlm aWNhbnQgc2l6ZSBieXRlDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0 Zm9ybS5jIGIvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5jCmluZGV4IDZhYWFmYzNl ZTkuLjJmNDJjYTZjY2QgMTAwNjQ0Ci0tLSBhL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvUGxhdGZv cm0uYworKysgYi9Pdm1mUGtnL1hlblBsYXRmb3JtUGVpL1BsYXRmb3JtLmMKQEAgLTEwMiw2ICsx MDIsMTcgQEAgQWRkUmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoCiAgICAgKTsNCiB9DQogDQor Vk9JRA0KK0FkZFJlc2VydmVkTWVtb3J5UmFuZ2VIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJF U1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVt b3J5TGltaXQsDQorICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgQ2FjaGVhYmxlDQorICAp DQorew0KKyAgQWRkUmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoTWVtb3J5QmFzZSwNCisgICAg KFVJTlQ2NCkoTWVtb3J5TGltaXQgLSBNZW1vcnlCYXNlKSwgQ2FjaGVhYmxlKTsNCit9DQorDQog Vk9JRA0KIEFkZElvTWVtb3J5UmFuZ2VIb2IgKA0KICAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAg ICAgIE1lbW9yeUJhc2UsDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4u YyBiL092bWZQa2cvWGVuUGxhdGZvcm1QZWkvWGVuLmMKaW5kZXggNzJmNmYzN2I0Ni4uYzQ1MDZk ZWY5YSAxMDA2NDQKLS0tIGEvT3ZtZlBrZy9YZW5QbGF0Zm9ybVBlaS9YZW4uYworKysgYi9Pdm1m UGtnL1hlblBsYXRmb3JtUGVpL1hlbi5jCkBAIC0yNzYsOSArMjc2LDE0IEBAIFhlblB1Ymxpc2hS YW1SZWdpb25zICgKICAgVk9JRA0KICAgKQ0KIHsNCi0gIEVGSV9FODIwX0VOVFJZNjQgICpFODIw TWFwOw0KLSAgVUlOVDMyICAgICAgICAgICAgRTgyMEVudHJpZXNDb3VudDsNCi0gIEVGSV9TVEFU VVMgICAgICAgIFN0YXR1czsNCisgIEVGSV9FODIwX0VOVFJZNjQgICAgICAqRTgyME1hcDsNCisg IFVJTlQzMiAgICAgICAgICAgICAgICBFODIwRW50cmllc0NvdW50Ow0KKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9FODIwX0VOVFJZNjQgICAgICAqRW50cnk7DQorICBV SU5UTiAgICAgICAgICAgICAgICAgSW5kZXg7DQorICBVSU5UNjQgICAgICAgICAgICAgICAgTGFw aWNCYXNlOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgIExhcGljRW5kOw0KKw0KIA0KICAgREVC VUcgKChERUJVR19JTkZPLCAiVXNpbmcgbWVtb3J5IG1hcCBwcm92aWRlZCBieSBYZW5cbiIpKTsN CiANCkBAIC0yODcsMjYgKzI5Miw2MCBAQCBYZW5QdWJsaXNoUmFtUmVnaW9ucyAoCiAgIC8vDQog ICBFODIwRW50cmllc0NvdW50ID0gMDsNCiAgIFN0YXR1cyA9IFhlbkdldEU4MjBNYXAgKCZFODIw TWFwLCAmRTgyMEVudHJpZXNDb3VudCk7DQotDQogICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KIA0KLSAgaWYgKEU4MjBFbnRyaWVzQ291bnQgPiAwKSB7DQotICAgIEVGSV9FODIwX0VOVFJZ NjQgKkVudHJ5Ow0KLSAgICBVSU5UMzIgTG9vcDsNCisgIExhcGljQmFzZSA9IFBjZEdldDMyIChQ Y2RDcHVMb2NhbEFwaWNCYXNlQWRkcmVzcyk7DQorICBMYXBpY0VuZCA9IExhcGljQmFzZSArIFNJ WkVfMU1COw0KKyAgQWRkSW9NZW1vcnlSYW5nZUhvYiAoTGFwaWNCYXNlLCBMYXBpY0VuZCk7DQog DQotICAgIGZvciAoTG9vcCA9IDA7IExvb3AgPCBFODIwRW50cmllc0NvdW50OyBMb29wKyspIHsN Ci0gICAgICBFbnRyeSA9IEU4MjBNYXAgKyBMb29wOw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgRTgyMEVudHJpZXNDb3VudDsgSW5kZXgrKykgew0KKyAgICBVSU5UNjQgQmFzZTsNCisgICAg VUlOVDY0IEVuZDsNCisgICAgVUlOVDY0IFJlc2VydmVkQmFzZTsNCisgICAgVUlOVDY0IFJlc2Vy dmVkRW5kOw0KIA0KKyAgICBFbnRyeSA9ICZFODIwTWFwW0luZGV4XTsNCisNCisgICAgLy8NCisg ICAgLy8gUm91bmQgdXAgdGhlIHN0YXJ0IGFkZHJlc3MsIGFuZCByb3VuZCBkb3duIHRoZSBlbmQg YWRkcmVzcy4NCisgICAgLy8NCisgICAgQmFzZSA9IEFMSUdOX1ZBTFVFIChFbnRyeS0+QmFzZUFk ZHIsIChVSU5UNjQpRUZJX1BBR0VfU0laRSk7DQorICAgIEVuZCA9IChFbnRyeS0+QmFzZUFkZHIg KyBFbnRyeS0+TGVuZ3RoKSAmIH4oVUlOVDY0KUVGSV9QQUdFX01BU0s7DQorDQorICAgIHN3aXRj aCAoRW50cnktPlR5cGUpIHsNCisgICAgY2FzZSBFZmlBY3BpQWRkcmVzc1JhbmdlTWVtb3J5Og0K KyAgICAgIEFkZE1lbW9yeVJhbmdlSG9iIChCYXNlLCBFbmQpOw0KKyAgICAgIGJyZWFrOw0KKyAg ICBjYXNlIEVmaUFjcGlBZGRyZXNzUmFuZ2VBQ1BJOg0KKyAgICAgIEFkZFJlc2VydmVkTWVtb3J5 UmFuZ2VIb2IgKEJhc2UsIEVuZCwgRkFMU0UpOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEVm aUFjcGlBZGRyZXNzUmFuZ2VSZXNlcnZlZDoNCiAgICAgICAvLw0KLSAgICAgIC8vIE9ubHkgY2Fy ZSBhYm91dCBSQU0NCisgICAgICAvLyBodm1sb2FkZXIgbWFya3MgYSByYW5nZSB0aGF0IG92ZXJs YXBzIHdpdGggdGhlIGxvY2FsIEFQSUMgbWVtb3J5DQorICAgICAgLy8gbWFwcGVkIHJlZ2lvbiBh cyByZXNlcnZlZCwgYnV0IENwdUR4ZSB3YW50cyBpdCBhcyBtYXBwZWQgSU8uIFdlDQorICAgICAg Ly8gaGF2ZSBhbHJlYWR5IGFkZGVkIGl0IGFzIG1hcHBlZCBJTywgc28gc2tpcCBpdCBoZXJlLg0K ICAgICAgIC8vDQotICAgICAgaWYgKEVudHJ5LT5UeXBlICE9IEVmaUFjcGlBZGRyZXNzUmFuZ2VN ZW1vcnkpIHsNCi0gICAgICAgIGNvbnRpbnVlOw0KLSAgICAgIH0NCiANCi0gICAgICBBZGRNZW1v cnlCYXNlU2l6ZUhvYiAoRW50cnktPkJhc2VBZGRyLCBFbnRyeS0+TGVuZ3RoKTsNCisgICAgICAv Lw0KKyAgICAgIC8vIGFkZCBMQVBJQyBwcmVkZWNlc3NvciByYW5nZSwgaWYgYW55DQorICAgICAg Ly8NCisgICAgICBSZXNlcnZlZEJhc2UgPSBCYXNlOw0KKyAgICAgIFJlc2VydmVkRW5kID0gTUlO IChFbmQsIExhcGljQmFzZSk7DQorICAgICAgaWYgKFJlc2VydmVkQmFzZSA8IFJlc2VydmVkRW5k KSB7DQorICAgICAgICBBZGRSZXNlcnZlZE1lbW9yeVJhbmdlSG9iIChSZXNlcnZlZEJhc2UsIFJl c2VydmVkRW5kLCBGQUxTRSk7DQorICAgICAgfQ0KIA0KLSAgICAgIE10cnJTZXRNZW1vcnlBdHRy aWJ1dGUgKEVudHJ5LT5CYXNlQWRkciwgRW50cnktPkxlbmd0aCwgQ2FjaGVXcml0ZUJhY2spOw0K KyAgICAgIC8vDQorICAgICAgLy8gYWRkIExBUElDIHN1Y2Nlc3NvciByYW5nZSwgaWYgYW55DQor ICAgICAgLy8NCisgICAgICBSZXNlcnZlZEJhc2UgPSBNQVggKEJhc2UsIExhcGljRW5kKTsNCisg ICAgICBSZXNlcnZlZEVuZCA9IEVuZDsNCisgICAgICBpZiAoUmVzZXJ2ZWRCYXNlIDwgUmVzZXJ2 ZWRFbmQpIHsNCisgICAgICAgIEFkZFJlc2VydmVkTWVtb3J5UmFuZ2VIb2IgKFJlc2VydmVkQmFz ZSwgUmVzZXJ2ZWRFbmQsIEZBTFNFKTsNCisgICAgICB9DQorICAgICAgYnJlYWs7DQorICAgIGRl ZmF1bHQ6DQorICAgICAgYnJlYWs7DQogICAgIH0NCiAgIH0NCiB9DQpAQCAtMzI2LDEyICszNjUs NiBAQCBJbml0aWFsaXplWGVuICgKIHsNCiAgIFJFVFVSTl9TVEFUVVMgUGNkU3RhdHVzOw0KIA0K LSAgLy8NCi0gIC8vIFJlc2VydmUgYXdheSBIVk1MT0FERVIgcmVzZXJ2ZWQgbWVtb3J5IFsweEZD MDAwMDAwLDB4RkQwMDAwMDApLg0KLSAgLy8gVGhpcyBuZWVkcyB0byBtYXRjaCBIVk1MT0FERVIg UkVTRVJWRURfTUVNQkFTRS9SRVNFUlZFRF9NRU1TSVpFLg0KLSAgLy8NCi0gIEFkZFJlc2VydmVk TWVtb3J5QmFzZVNpemVIb2IgKDB4RkMwMDAwMDAsIDB4MTAwMDAwMCwgRkFMU0UpOw0KLQ0KICAg UGNkU3RhdHVzID0gUGNkU2V0Qm9vbFMgKFBjZFBjaURpc2FibGVCdXNFbnVtZXJhdGlvbiwgVFJV RSk7DQogICBBU1NFUlRfUkVUVVJOX0VSUk9SIChQY2RTdGF0dXMpOw0KIA0KLS0gCkFudGhvbnkg UEVSQVJECgo=