From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.groups.io with SMTP id smtpd.web11.3020.1622061420385936617 for ; Wed, 26 May 2021 13:37:00 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ZQ7UWoIG; spf=pass (domain: redhat.com, ip: 216.205.24.124, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1622061419; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hWBg/WHwrKbANzjqEeNBwgmTfErOfQkGe6EDHNVLCA0=; b=ZQ7UWoIGrcBLQoi8Lye8G7M/QHP91WoDyVFuFY2e0moW0J1rZVtKwZumnGsWakVOBc8uIT bdNDoLTfdVbJ2Rr/b1+z27+6+ix4SCaOGZxFnZkNEInujwqqse+Gf1r8uQqYk32dNoa1qm T3ArIfL2DrnD4Ko1nsFuoTSQnDNmLx0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-381-Nu66clw1Pke5m3hsY1ysSw-1; Wed, 26 May 2021 16:36:56 -0400 X-MC-Unique: Nu66clw1Pke5m3hsY1ysSw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9B7B9106BB4D; Wed, 26 May 2021 20:36:54 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-114-61.ams2.redhat.com [10.36.114.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id A176A5D9DE; Wed, 26 May 2021 20:36:52 +0000 (UTC) From: "Laszlo Ersek" To: devel@edk2.groups.io Cc: Andrew Fish , Ard Biesheuvel , Jordan Justen , Leif Lindholm , Michael D Kinney , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 21/43] OvmfPkg/PlatformPei: remove Xen support Date: Wed, 26 May 2021 22:14:24 +0200 Message-Id: <20210526201446.12554-22-lersek@redhat.com> In-Reply-To: <20210526201446.12554-1-lersek@redhat.com> References: <20210526201446.12554-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lersek@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 VGhlICJPdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtUGVpLmluZiIgbW9kdWxlIGlzIHVzZWQg YnkgdGhlIGZvbGxvd2luZwpwbGF0Zm9ybSBEU0NzOgoKICBPdm1mUGtnL0FtZFNldi9BbWRTZXZY NjQuZHNjCiAgT3ZtZlBrZy9Pdm1mUGtnSWEzMi5kc2MKICBPdm1mUGtnL092bWZQa2dJYTMyWDY0 LmRzYwogIE92bWZQa2cvT3ZtZlBrZ1g2NC5kc2MKClJlbW92ZSBYZW4gc3VwcG9ydCBmcm9tICJP dm1mUGtnL1BsYXRmb3JtUGVpIiwgaW5jbHVkaW5nIGFueSBkZXBlbmRlbmNpZXMKdGhhdCBub3cg YmVjb21lIHVudXNlZC4gVGhlIGJhc2ljIGlkZWEgaXMgdG8gc3Vic3RpdHV0ZSBGQUxTRSBmb3Ig Im1YZW4iLgoKUmVtb3ZlICJPdm1mUGtnL1BsYXRmb3JtUGVpIiBmcm9tIHRoZSAiT3ZtZlBrZzog WGVuLXJlbGF0ZWQgbW9kdWxlcyIKc2VjdGlvbiBvZiAiTWFpbnRhaW5lcnMudHh0Ii4KClRoaXMg cGF0Y2ggaXMgYmVzdCByZXZpZXdlZCB3aXRoICJnaXQgc2hvdyAtYiAtVyIuCgpDYzogQW5kcmV3 IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT4KQ2M6IEFyZCBCaWVzaGV1dmVsIDxhcmRiK3RpYW5vY29y ZUBrZXJuZWwub3JnPgpDYzogSm9yZGFuIEp1c3RlbiA8am9yZGFuLmwuanVzdGVuQGludGVsLmNv bT4KQ2M6IExlaWYgTGluZGhvbG0gPGxlaWZAbnV2aWFpbmMuY29tPgpDYzogTWljaGFlbCBEIEtp bm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+CkNjOiBQaGlsaXBwZSBNYXRoaWV1LURh dWTDqSA8cGhpbG1kQHJlZGhhdC5jb20+ClJlZjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUu b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIyClNpZ25lZC1vZmYtYnk6IExhc3psbyBFcnNlayA8bGVy c2VrQHJlZGhhdC5jb20+Ci0tLQogT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybVBlaS5pbmYg fCAgIDQgLQogTWFpbnRhaW5lcnMudHh0ICAgICAgICAgICAgICAgICAgICAgfCAgIDMgLQogT3Zt ZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5oICAgICAgfCAgMTcgLS0KIE92bWZQa2cvUGxhdGZv cm1QZWkvWGVuLmggICAgICAgICAgIHwgIDM5IC0tLS0KIE92bWZQa2cvUGxhdGZvcm1QZWkvTWVt RGV0ZWN0LmMgICAgIHwgIDEwICstCiBPdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtLmMgICAg ICB8IDE2MiArKysrKysrLS0tLS0tLQogT3ZtZlBrZy9QbGF0Zm9ybVBlaS9YZW4uYyAgICAgICAg ICAgfCAyMjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0 aW9ucygrKSwgMzgwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL092bWZQa2cvUGxhdGZvcm1Q ZWkvUGxhdGZvcm1QZWkuaW5mIGIvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybVBlaS5pbmYK aW5kZXggNmVmNzdiYTdiYjIxLi44OWQxZjc2MzY4NzAgMTAwNjQ0Ci0tLSBhL092bWZQa2cvUGxh dGZvcm1QZWkvUGxhdGZvcm1QZWkuaW5mCisrKyBiL092bWZQa2cvUGxhdGZvcm1QZWkvUGxhdGZv cm1QZWkuaW5mCkBAIC0zMCwyNiArMzAsMjMgQEAgW1NvdXJjZXNdCiAgIEZlYXR1cmVDb250cm9s LmMNCiAgIEZ2LmMNCiAgIE1lbURldGVjdC5jDQogICBNZW1UeXBlSW5mby5jDQogICBQbGF0Zm9y bS5jDQogICBQbGF0Zm9ybS5oDQotICBYZW4uYw0KLSAgWGVuLmgNCiANCiBbUGFja2FnZXNdDQog ICBFbWJlZGRlZFBrZy9FbWJlZGRlZFBrZy5kZWMNCiAgIE1kZVBrZy9NZGVQa2cuZGVjDQogICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KICAgU2VjdXJpdHlQa2cvU2VjdXJpdHlQa2cu ZGVjDQogICBVZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjDQogICBPdm1mUGtnL092bWZQa2cuZGVj DQogDQogW0d1aWRzXQ0KICAgZ0VmaU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQNCi0gIGdFZmlY ZW5JbmZvR3VpZA0KIA0KIFtMaWJyYXJ5Q2xhc3Nlc10NCiAgIEJhc2VMaWINCiAgIENhY2hlTWFp bnRlbmFuY2VMaWINCiAgIERlYnVnTGliDQogICBIb2JMaWINCkBAIC05MywxMyArOTAsMTIgQEAg W1BjZF0KICAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1VHNlZ01ieXRlcw0KICAg Z1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1U21yYW1BdERlZmF1bHRTbWJhc2UNCiAg IGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5QY2RHdWlkZWRFeHRyYWN0SGFuZGxlclRhYmxlQWRk cmVzcw0KICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoTnZTdG9yYWdl RnR3U3BhcmVTaXplDQogICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hO dlN0b3JhZ2VWYXJpYWJsZVNpemUNCiAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RFbXVWYXJpYWJsZU52U3RvcmVSZXNlcnZlZA0KLSAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3Bh Y2VHdWlkLlBjZFBjaURpc2FibGVCdXNFbnVtZXJhdGlvbg0KICAgZ0VmaU1kZU1vZHVsZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZER4ZUlwbFN3aXRjaFRvTG9uZ01vZGUNCiAgIGdFZmlNZGVNb2R1bGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RVc2UxR1BhZ2VUYWJsZQ0KICAgZ0VmaU1kZU1vZHVsZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZFNldE54Rm9yU3RhY2sNCiAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RBY3BpUzNFbmFibGUNCiAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RQdGVNZW1vcnlFbmNyeXB0aW9uQWRkcmVzc09yTWFzaw0KICAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZEdoY2JCYXNlDQpkaWZmIC0tZ2l0IGEvTWFpbnRhaW5lcnMudHh0 IGIvTWFpbnRhaW5lcnMudHh0CmluZGV4IDgyMDA4YTAwNDZjNi4uYmU0MGExZDZmMmI2IDEwMDY0 NAotLS0gYS9NYWludGFpbmVycy50eHQKKysrIGIvTWFpbnRhaW5lcnMudHh0CkBAIC00OTgsMTUg KzQ5OCwxMiBAQCBGOiBPdm1mUGtnL0xpYnJhcnkvWGVuQ29uc29sZVNlcmlhbFBvcnRMaWIvCiBG OiBPdm1mUGtnL0xpYnJhcnkvWGVuSHlwZXJjYWxsTGliLw0KIEY6IE92bWZQa2cvTGlicmFyeS9Y ZW5Jb01taW9MaWIvDQogRjogT3ZtZlBrZy9MaWJyYXJ5L1hlblBsYXRmb3JtTGliLw0KIEY6IE92 bWZQa2cvTGlicmFyeS9YZW5SZWFsVGltZUNsb2NrTGliLw0KIEY6IE92bWZQa2cvT3ZtZlhlbi4q DQogRjogT3ZtZlBrZy9Pdm1mWGVuRWxmSGVhZGVyR2VuZXJhdG9yLmMNCi1GOiBPdm1mUGtnL1Bs YXRmb3JtUGVpL01lbURldGVjdC5jDQotRjogT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybS4q DQotRjogT3ZtZlBrZy9QbGF0Zm9ybVBlaS9YZW4uKg0KIEY6IE92bWZQa2cvU21iaW9zUGxhdGZv cm1EeGUvKlhlbi5jDQogRjogT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvDQogRjogT3ZtZlBr Zy9YZW5CdXNEeGUvDQogRjogT3ZtZlBrZy9YZW5Jb1BjaUR4ZS8NCiBGOiBPdm1mUGtnL1hlbklv UHZoRHhlLw0KIEY6IE92bWZQa2cvWGVuUGxhdGZvcm1QZWkvDQpkaWZmIC0tZ2l0IGEvT3ZtZlBr Zy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5oIGIvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5o CmluZGV4IDA0ODRlYzllNmI0Yy4uOGIxZDI3MGMyYjBiIDEwMDY0NAotLS0gYS9Pdm1mUGtnL1Bs YXRmb3JtUGVpL1BsYXRmb3JtLmgKKysrIGIvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9QbGF0Zm9ybS5o CkBAIC05NCwzNCArOTQsMTcgQEAgSW5zdGFsbEZlYXR1cmVDb250cm9sQ2FsbGJhY2sgKAogDQog Vk9JRA0KIEluc3RhbGxDbGVhckNhY2hlQ2FsbGJhY2sgKA0KICAgVk9JRA0KICAgKTsNCiANCi1F RklfU1RBVFVTDQotSW5pdGlhbGl6ZVhlbiAoDQotICBWT0lEDQotICApOw0KLQ0KLUJPT0xFQU4N Ci1YZW5EZXRlY3QgKA0KLSAgVk9JRA0KLSAgKTsNCi0NCiBWT0lEDQogQW1kU2V2SW5pdGlhbGl6 ZSAoDQogICBWT0lEDQogICApOw0KIA0KLWV4dGVybiBCT09MRUFOIG1YZW47DQotDQotVk9JRA0K LVhlblB1Ymxpc2hSYW1SZWdpb25zICgNCi0gIFZPSUQNCi0gICk7DQotDQogZXh0ZXJuIEVGSV9C T09UX01PREUgbUJvb3RNb2RlOw0KIA0KIGV4dGVybiBCT09MRUFOIG1TM1N1cHBvcnRlZDsNCiAN CiBleHRlcm4gVUlOVDggbVBoeXNNZW1BZGRyZXNzV2lkdGg7DQogDQpkaWZmIC0tZ2l0IGEvT3Zt ZlBrZy9QbGF0Zm9ybVBlaS9YZW4uaCBiL092bWZQa2cvUGxhdGZvcm1QZWkvWGVuLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MDU0ODEyODBjMC4uMDAwMDAwMDAwMDAwCi0tLSBh L092bWZQa2cvUGxhdGZvcm1QZWkvWGVuLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBA Ci0vKiogQGZpbGUNCi0gIE92bWYgaW5mbyBzdHJ1Y3R1cmUgcGFzc2VkIGJ5IFhlbg0KLQ0KLUNv cHlyaWdodCAoYykgMjAxMywgQ2l0cml4IFN5c3RlbXMgVUsgTHRkLjxCUj4NCi0NCi1TUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KLQ0KLSoqLw0KLQ0KLSNpZm5k ZWYgX19YRU5fSF9fDQotI2RlZmluZSBfX1hFTl9IX18NCi0NCi0jaW5jbHVkZSA8UGlQZWkuaD4N Ci0NCi0vLyBQaHlzaWNhbCBhZGRyZXNzIG9mIE9WTUYgaW5mbw0KLSNkZWZpbmUgT1ZNRl9JTkZP X1BIWVNJQ0FMX0FERFJFU1MgMHgwMDAwMTAwMA0KLQ0KLS8vIFRoaXMgc3RydWN0dXJlIG11c3Qg bWF0Y2ggdGhlIGRlZmluaXRpb24gb24gWGVuIHNpZGUNCi0jcHJhZ21hIHBhY2soMSkNCi10eXBl ZGVmIHN0cnVjdCB7DQotICBDSEFSOCBTaWduYXR1cmVbMTRdOyAvLyBYZW5IVk1PVk1GXDANCi0g IFVJTlQ4IExlbmd0aDsgICAgICAgIC8vIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZQ0KLSAgVUlO VDggQ2hlY2tzdW07ICAgICAgLy8gU2V0IHN1Y2ggdGhhdCB0aGUgc3VtIG92ZXIgYnl0ZXMgMC4u bGVuZ3RoID09IDANCi0gIC8vDQotICAvLyBQaHlzaWNhbCBhZGRyZXNzIG9mIGFuIGFycmF5IG9m IFRhYmxlc0NvdW50IGVsZW1lbnRzLg0KLSAgLy8NCi0gIC8vIEVhY2ggZWxlbWVudCBjb250YWlu cyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIEJJT1MgdGFibGUuDQotICAvLw0KLSAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgVGFibGVzOw0KLSAgVUlOVDMyIFRhYmxlc0NvdW50Ow0KLSAgLy8NCi0g IC8vIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEU4MjAgdGFibGUsIGNvbnRhaW5zIEU4MjBFbnRy aWVzQ291bnQgZW50cmllcy4NCi0gIC8vDQotICBFRklfUEhZU0lDQUxfQUREUkVTUyBFODIwOw0K LSAgVUlOVDMyIEU4MjBFbnRyaWVzQ291bnQ7DQotfSBFRklfWEVOX09WTUZfSU5GTzsNCi0jcHJh Z21hIHBhY2soKQ0KLQ0KLSNlbmRpZiAvKiBfX1hFTl9IX18gKi8NCmRpZmYgLS1naXQgYS9Pdm1m UGtnL1BsYXRmb3JtUGVpL01lbURldGVjdC5jIGIvT3ZtZlBrZy9QbGF0Zm9ybVBlaS9NZW1EZXRl Y3QuYwppbmRleCBjMDhhYTJlNDVhNTMuLjJkZWVjMTI4ZjQ2NCAxMDA2NDQKLS0tIGEvT3ZtZlBr Zy9QbGF0Zm9ybVBlaS9NZW1EZXRlY3QuYworKysgYi9Pdm1mUGtnL1BsYXRmb3JtUGVpL01lbURl dGVjdC5jCkBAIC0xMzIsMTYgKzEzMiwxMiBAQCBRZW11VWMzMkJhc2VJbml0aWFsaXphdGlvbiAo CiAgIFZPSUQNCiAgICkNCiB7DQogICBVSU5UMzIgTG93ZXJNZW1vcnlTaXplOw0KICAgVUlOVDMy IFVjMzJTaXplOw0KIA0KLSAgaWYgKG1YZW4pIHsNCi0gICAgcmV0dXJuOw0KLSAgfQ0KLQ0KICAg aWYgKG1Ib3N0QnJpZGdlRGV2SWQgPT0gSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQpIHsNCiAgICAg Ly8NCiAgICAgLy8gT24gcTM1LCB0aGUgMzItYml0IGFyZWEgdGhhdCB3ZSdsbCBtYXJrIGFzIFVD LCB0aHJvdWdoIHZhcmlhYmxlIE1UUlJzLA0KICAgICAvLyBzdGFydHMgYXQgUGNkUGNpRXhwcmVz c0Jhc2VBZGRyZXNzLiBUaGUgcGxhdGZvcm0gRFNDIGlzIHJlc3BvbnNpYmxlIGZvcg0KICAgICAv LyBzZXR0aW5nIFBjZFBjaUV4cHJlc3NCYXNlQWRkcmVzcyBzdWNoIHRoYXQgZGVzY3JpYmluZyB0 aGUNCiAgICAgLy8gW1BjZFBjaUV4cHJlc3NCYXNlQWRkcmVzcywgNEdCKSByYW5nZSByZXF1aXJl IGEgdmVyeSBzbWFsbCBudW1iZXIgb2YNCkBAIC04MTYsMTcgKzgxMiwxMyBAQCBRZW11SW5pdGlh bGl6ZVJhbSAoCiAqKi8NCiBWT0lEDQogSW5pdGlhbGl6ZVJhbVJlZ2lvbnMgKA0KICAgVk9JRA0K ICAgKQ0KIHsNCi0gIGlmICghbVhlbikgew0KLSAgICBRZW11SW5pdGlhbGl6ZVJhbSAoKTsNCi0g IH0gZWxzZSB7DQotICAgIFhlblB1Ymxpc2hSYW1SZWdpb25zICgpOw0KLSAgfQ0KKyAgUWVtdUlu aXRpYWxpemVSYW0gKCk7DQogDQogICBpZiAobVMzU3VwcG9ydGVkICYmIG1Cb290TW9kZSAhPSBC T09UX09OX1MzX1JFU1VNRSkgew0KICAgICAvLw0KICAgICAvLyBUaGlzIGlzIHRoZSBtZW1vcnkg cmFuZ2UgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIFBFSSBvbiBTMyByZXN1bWUNCiAgICAgLy8NCiAg ICAgQnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1BsYXRm b3JtUGVpL1BsYXRmb3JtLmMgYi9Pdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtLmMKaW5kZXgg OTY0Njg3MDFlM2I4Li5kM2EyMDEyMmEyZWEgMTAwNjQ0Ci0tLSBhL092bWZQa2cvUGxhdGZvcm1Q ZWkvUGxhdGZvcm0uYworKysgYi9Pdm1mUGtnL1BsYXRmb3JtUGVpL1BsYXRmb3JtLmMKQEAgLTE0 MywxMDMgKzE0MywxMDAgQEAgTWVtTWFwSW5pdGlhbGl6YXRpb24gKAogICBWT0lEDQogICApDQog ew0KICAgVUlOVDY0ICAgICAgICBQY2lJb0Jhc2U7DQogICBVSU5UNjQgICAgICAgIFBjaUlvU2l6 ZTsNCiAgIFJFVFVSTl9TVEFUVVMgUGNkU3RhdHVzOw0KKyAgVUlOVDMyICAgICAgICBUb3BPZkxv d1JhbTsNCisgIFVJTlQ2NCAgICAgICAgUGNpRXhCYXJCYXNlOw0KKyAgVUlOVDMyICAgICAgICBQ Y2lCYXNlOw0KKyAgVUlOVDMyICAgICAgICBQY2lTaXplOw0KIA0KICAgUGNpSW9CYXNlID0gMHhD MDAwOw0KICAgUGNpSW9TaXplID0gMHg0MDAwOw0KIA0KICAgLy8NCiAgIC8vIFZpZGVvIG1lbW9y eSArIExlZ2FjeSBCSU9TIHJlZ2lvbg0KICAgLy8NCiAgIEFkZElvTWVtb3J5UmFuZ2VIb2IgKDB4 MEEwMDAwLCBCQVNFXzFNQik7DQogDQotICBpZiAoIW1YZW4pIHsNCi0gICAgVUlOVDMyICBUb3BP Zkxvd1JhbTsNCi0gICAgVUlOVDY0ICBQY2lFeEJhckJhc2U7DQotICAgIFVJTlQzMiAgUGNpQmFz ZTsNCi0gICAgVUlOVDMyICBQY2lTaXplOw0KLQ0KLSAgICBUb3BPZkxvd1JhbSA9IEdldFN5c3Rl bU1lbW9yeVNpemVCZWxvdzRnYiAoKTsNCi0gICAgUGNpRXhCYXJCYXNlID0gMDsNCi0gICAgaWYg KG1Ib3N0QnJpZGdlRGV2SWQgPT0gSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQpIHsNCi0gICAgICAv Lw0KLSAgICAgIC8vIFRoZSBNTUNPTkZJRyBhcmVhIGlzIGV4cGVjdGVkIHRvIGZhbGwgYmV0d2Vl biB0aGUgdG9wIG9mIGxvdyBSQU0gYW5kDQotICAgICAgLy8gdGhlIGJhc2Ugb2YgdGhlIDMyLWJp dCBQQ0kgaG9zdCBhcGVydHVyZS4NCi0gICAgICAvLw0KLSAgICAgIFBjaUV4QmFyQmFzZSA9IEZp eGVkUGNkR2V0NjQgKFBjZFBjaUV4cHJlc3NCYXNlQWRkcmVzcyk7DQotICAgICAgQVNTRVJUIChU b3BPZkxvd1JhbSA8PSBQY2lFeEJhckJhc2UpOw0KLSAgICAgIEFTU0VSVCAoUGNpRXhCYXJCYXNl IDw9IE1BWF9VSU5UMzIgLSBTSVpFXzI1Nk1CKTsNCi0gICAgICBQY2lCYXNlID0gKFVJTlQzMiko UGNpRXhCYXJCYXNlICsgU0laRV8yNTZNQik7DQotICAgIH0gZWxzZSB7DQotICAgICAgQVNTRVJU IChUb3BPZkxvd1JhbSA8PSBtUWVtdVVjMzJCYXNlKTsNCi0gICAgICBQY2lCYXNlID0gbVFlbXVV YzMyQmFzZTsNCi0gICAgfQ0KLQ0KKyAgVG9wT2ZMb3dSYW0gPSBHZXRTeXN0ZW1NZW1vcnlTaXpl QmVsb3c0Z2IgKCk7DQorICBQY2lFeEJhckJhc2UgPSAwOw0KKyAgaWYgKG1Ib3N0QnJpZGdlRGV2 SWQgPT0gSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQpIHsNCiAgICAgLy8NCi0gICAgLy8gYWRkcmVz cyAgICAgICBwdXJwb3NlICAgc2l6ZQ0KLSAgICAvLyAtLS0tLS0tLS0tLS0gIC0tLS0tLS0tICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICAgIC8vIG1heCh0b3AsIDJnKSAgUENJIE1NSU8g IDB4RkMwMDAwMDAgLSBtYXgodG9wLCAyZykNCi0gICAgLy8gMHhGQzAwMDAwMCAgICBnYXAgICAg ICAgICAgICAgICAgICAgICAgICAgICA0NCBNQg0KLSAgICAvLyAweEZFQzAwMDAwICAgIElPLUFQ SUMgICAgICAgICAgICAgICAgICAgICAgICA0IEtCDQotICAgIC8vIDB4RkVDMDEwMDAgICAgZ2Fw ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjAgS0INCi0gICAgLy8gMHhGRUQwMDAwMCAgICBI UEVUICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBLQg0KLSAgICAvLyAweEZFRDAwNDAwICAg IGdhcCAgICAgICAgICAgICAgICAgICAgICAgICAgMTExIEtCDQotICAgIC8vIDB4RkVEMUMwMDAg ICAgZ2FwIChQSUlYNCkgLyBSQ1JCIChJQ0g5KSAgICAgMTYgS0INCi0gICAgLy8gMHhGRUQyMDAw MCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5NiBLQg0KLSAgICAvLyAweEZFRTAw MDAwICAgIExBUElDICAgICAgICAgICAgICAgICAgICAgICAgICAxIE1CDQorICAgIC8vIFRoZSBN TUNPTkZJRyBhcmVhIGlzIGV4cGVjdGVkIHRvIGZhbGwgYmV0d2VlbiB0aGUgdG9wIG9mIGxvdyBS QU0gYW5kDQorICAgIC8vIHRoZSBiYXNlIG9mIHRoZSAzMi1iaXQgUENJIGhvc3QgYXBlcnR1cmUu DQogICAgIC8vDQotICAgIFBjaVNpemUgPSAweEZDMDAwMDAwIC0gUGNpQmFzZTsNCi0gICAgQWRk SW9NZW1vcnlCYXNlU2l6ZUhvYiAoUGNpQmFzZSwgUGNpU2l6ZSk7DQotICAgIFBjZFN0YXR1cyA9 IFBjZFNldDY0UyAoUGNkUGNpTW1pbzMyQmFzZSwgUGNpQmFzZSk7DQotICAgIEFTU0VSVF9SRVRV Uk5fRVJST1IgKFBjZFN0YXR1cyk7DQotICAgIFBjZFN0YXR1cyA9IFBjZFNldDY0UyAoUGNkUGNp TW1pbzMyU2l6ZSwgUGNpU2l6ZSk7DQotICAgIEFTU0VSVF9SRVRVUk5fRVJST1IgKFBjZFN0YXR1 cyk7DQorICAgIFBjaUV4QmFyQmFzZSA9IEZpeGVkUGNkR2V0NjQgKFBjZFBjaUV4cHJlc3NCYXNl QWRkcmVzcyk7DQorICAgIEFTU0VSVCAoVG9wT2ZMb3dSYW0gPD0gUGNpRXhCYXJCYXNlKTsNCisg ICAgQVNTRVJUIChQY2lFeEJhckJhc2UgPD0gTUFYX1VJTlQzMiAtIFNJWkVfMjU2TUIpOw0KKyAg ICBQY2lCYXNlID0gKFVJTlQzMikoUGNpRXhCYXJCYXNlICsgU0laRV8yNTZNQik7DQorICB9IGVs c2Ugew0KKyAgICBBU1NFUlQgKFRvcE9mTG93UmFtIDw9IG1RZW11VWMzMkJhc2UpOw0KKyAgICBQ Y2lCYXNlID0gbVFlbXVVYzMyQmFzZTsNCisgIH0NCiANCi0gICAgQWRkSW9NZW1vcnlCYXNlU2l6 ZUhvYiAoMHhGRUMwMDAwMCwgU0laRV80S0IpOw0KLSAgICBBZGRJb01lbW9yeUJhc2VTaXplSG9i ICgweEZFRDAwMDAwLCBTSVpFXzFLQik7DQotICAgIGlmIChtSG9zdEJyaWRnZURldklkID09IElO VEVMX1EzNV9NQ0hfREVWSUNFX0lEKSB7DQotICAgICAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAo SUNIOV9ST09UX0NPTVBMRVhfQkFTRSwgU0laRV8xNktCKTsNCi0gICAgICAvLw0KLSAgICAgIC8v IE5vdGU6IHRoZXJlIHNob3VsZCBiZSBhbg0KLSAgICAgIC8vDQotICAgICAgLy8gICBBZGRJb01l bW9yeUJhc2VTaXplSG9iIChQY2lFeEJhckJhc2UsIFNJWkVfMjU2TUIpOw0KLSAgICAgIC8vDQot ICAgICAgLy8gY2FsbCBiZWxvdywganVzdCBsaWtlIHRoZSBvbmUgYWJvdmUgZm9yIFJDQkEuIEhv d2V2ZXIsIExpbnV4IGluc2lzdHMNCi0gICAgICAvLyB0aGF0IHRoZSBNTUNPTkZJRyBhcmVhIGJl IG1hcmtlZCBpbiB0aGUgRTgyMCBvciBVRUZJIG1lbW9yeSBtYXAgYXMNCi0gICAgICAvLyAicmVz ZXJ2ZWQgbWVtb3J5IiAtLSBMaW51eCBkb2VzIG5vdCBjb250ZW50IGl0c2VsZiB3aXRoIGEgc2lt cGxlIGdhcA0KLSAgICAgIC8vIGluIHRoZSBtZW1vcnkgbWFwIHdoZXJldmVyIHRoZSBNQ0ZHIEFD UEkgdGFibGUgcG9pbnRzIHRvLg0KLSAgICAgIC8vDQotICAgICAgLy8gVGhpcyBhcHBlYXJzIHRv IGJlIGEgc2FmZXR5IG1lYXN1cmUuIFRoZSBQQ0kgRmlybXdhcmUgU3BlY2lmaWNhdGlvbg0KLSAg ICAgIC8vIChyZXYgMy4xKSBzYXlzIGluIDQuMS4yLiAiTUNGRyBUYWJsZSBEZXNjcmlwdGlvbiI6 ICJUaGUgcmVzb3VyY2VzIGNhbg0KLSAgICAgIC8vICpvcHRpb25hbGx5KiBiZSByZXR1cm5lZCBp biBbLi4uXSBFRklHZXRNZW1vcnlNYXAgYXMgcmVzZXJ2ZWQgbWVtb3J5DQotICAgICAgLy8gWy4u Ll0iLiAoRW1waGFzaXMgYWRkZWQgaGVyZS4pDQotICAgICAgLy8NCi0gICAgICAvLyBOb3JtYWxs eSB3ZSBhZGQgbWVtb3J5IHJlc291cmNlIGRlc2NyaXB0b3IgSE9CcyBpbg0KLSAgICAgIC8vIFFl bXVJbml0aWFsaXplUmFtKCksIGFuZCBwcmUtYWxsb2NhdGUgZnJvbSB0aG9zZSB3aXRoIG1lbW9y eQ0KLSAgICAgIC8vIGFsbG9jYXRpb24gSE9CcyBpbiBJbml0aWFsaXplUmFtUmVnaW9ucygpLiBI b3dldmVyLCB0aGUgTU1DT05GSUcgYXJlYQ0KLSAgICAgIC8vIGlzIG1vc3QgZGVmaW5pdGVseSBu b3QgUkFNOyBzbywgYXMgYW4gZXhjZXB0aW9uLCBjb3ZlciBpdCB3aXRoDQotICAgICAgLy8gdW5j YWNoZWFibGUgcmVzZXJ2ZWQgbWVtb3J5IHJpZ2h0IGhlcmUuDQotICAgICAgLy8NCi0gICAgICBB ZGRSZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iIChQY2lFeEJhckJhc2UsIFNJWkVfMjU2TUIsIEZB TFNFKTsNCi0gICAgICBCdWlsZE1lbW9yeUFsbG9jYXRpb25Ib2IgKFBjaUV4QmFyQmFzZSwgU0la RV8yNTZNQiwNCi0gICAgICAgIEVmaVJlc2VydmVkTWVtb3J5VHlwZSk7DQotICAgIH0NCi0gICAg QWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoUGNkR2V0MzIoUGNkQ3B1TG9jYWxBcGljQmFzZUFkZHJl c3MpLCBTSVpFXzFNQik7DQorICAvLw0KKyAgLy8gYWRkcmVzcyAgICAgICBwdXJwb3NlICAgc2l6 ZQ0KKyAgLy8gLS0tLS0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KKyAgLy8gbWF4KHRvcCwgMmcpICBQQ0kgTU1JTyAgMHhGQzAwMDAwMCAtIG1heCh0b3AsIDJn KQ0KKyAgLy8gMHhGQzAwMDAwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NCBN Qg0KKyAgLy8gMHhGRUMwMDAwMCAgICBJTy1BUElDICAgICAgICAgICAgICAgICAgICAgICAgNCBL Qg0KKyAgLy8gMHhGRUMwMTAwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyMCBL Qg0KKyAgLy8gMHhGRUQwMDAwMCAgICBIUEVUICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBL Qg0KKyAgLy8gMHhGRUQwMDQwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMSBL Qg0KKyAgLy8gMHhGRUQxQzAwMCAgICBnYXAgKFBJSVg0KSAvIFJDUkIgKElDSDkpICAgICAxNiBL Qg0KKyAgLy8gMHhGRUQyMDAwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5NiBL Qg0KKyAgLy8gMHhGRUUwMDAwMCAgICBMQVBJQyAgICAgICAgICAgICAgICAgICAgICAgICAgMSBN Qg0KKyAgLy8NCisgIFBjaVNpemUgPSAweEZDMDAwMDAwIC0gUGNpQmFzZTsNCisgIEFkZElvTWVt b3J5QmFzZVNpemVIb2IgKFBjaUJhc2UsIFBjaVNpemUpOw0KKyAgUGNkU3RhdHVzID0gUGNkU2V0 NjRTIChQY2RQY2lNbWlvMzJCYXNlLCBQY2lCYXNlKTsNCisgIEFTU0VSVF9SRVRVUk5fRVJST1Ig KFBjZFN0YXR1cyk7DQorICBQY2RTdGF0dXMgPSBQY2RTZXQ2NFMgKFBjZFBjaU1taW8zMlNpemUs IFBjaVNpemUpOw0KKyAgQVNTRVJUX1JFVFVSTl9FUlJPUiAoUGNkU3RhdHVzKTsNCiANCisgIEFk ZElvTWVtb3J5QmFzZVNpemVIb2IgKDB4RkVDMDAwMDAsIFNJWkVfNEtCKTsNCisgIEFkZElvTWVt b3J5QmFzZVNpemVIb2IgKDB4RkVEMDAwMDAsIFNJWkVfMUtCKTsNCisgIGlmIChtSG9zdEJyaWRn ZURldklkID09IElOVEVMX1EzNV9NQ0hfREVWSUNFX0lEKSB7DQorICAgIEFkZElvTWVtb3J5QmFz ZVNpemVIb2IgKElDSDlfUk9PVF9DT01QTEVYX0JBU0UsIFNJWkVfMTZLQik7DQorICAgIC8vDQor ICAgIC8vIE5vdGU6IHRoZXJlIHNob3VsZCBiZSBhbg0KKyAgICAvLw0KKyAgICAvLyAgIEFkZElv TWVtb3J5QmFzZVNpemVIb2IgKFBjaUV4QmFyQmFzZSwgU0laRV8yNTZNQik7DQogICAgIC8vDQot ICAgIC8vIE9uIFEzNSwgdGhlIElPIFBvcnQgc3BhY2UgaXMgYXZhaWxhYmxlIGZvciBQQ0kgcmVz b3VyY2UgYWxsb2NhdGlvbnMgZnJvbQ0KLSAgICAvLyAweDYwMDAgdXAuDQorICAgIC8vIGNhbGwg YmVsb3csIGp1c3QgbGlrZSB0aGUgb25lIGFib3ZlIGZvciBSQ0JBLiBIb3dldmVyLCBMaW51eCBp bnNpc3RzDQorICAgIC8vIHRoYXQgdGhlIE1NQ09ORklHIGFyZWEgYmUgbWFya2VkIGluIHRoZSBF ODIwIG9yIFVFRkkgbWVtb3J5IG1hcCBhcw0KKyAgICAvLyAicmVzZXJ2ZWQgbWVtb3J5IiAtLSBM aW51eCBkb2VzIG5vdCBjb250ZW50IGl0c2VsZiB3aXRoIGEgc2ltcGxlIGdhcA0KKyAgICAvLyBp biB0aGUgbWVtb3J5IG1hcCB3aGVyZXZlciB0aGUgTUNGRyBBQ1BJIHRhYmxlIHBvaW50cyB0by4N CiAgICAgLy8NCi0gICAgaWYgKG1Ib3N0QnJpZGdlRGV2SWQgPT0gSU5URUxfUTM1X01DSF9ERVZJ Q0VfSUQpIHsNCi0gICAgICBQY2lJb0Jhc2UgPSAweDYwMDA7DQotICAgICAgUGNpSW9TaXplID0g MHhBMDAwOw0KLSAgICAgIEFTU0VSVCAoKElDSDlfUE1CQVNFX1ZBTFVFICYgMHhGMDAwKSA8IFBj aUlvQmFzZSk7DQotICAgIH0NCisgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIGEgc2FmZXR5IG1l YXN1cmUuIFRoZSBQQ0kgRmlybXdhcmUgU3BlY2lmaWNhdGlvbg0KKyAgICAvLyAocmV2IDMuMSkg c2F5cyBpbiA0LjEuMi4gIk1DRkcgVGFibGUgRGVzY3JpcHRpb24iOiAiVGhlIHJlc291cmNlcyBj YW4NCisgICAgLy8gKm9wdGlvbmFsbHkqIGJlIHJldHVybmVkIGluIFsuLi5dIEVGSUdldE1lbW9y eU1hcCBhcyByZXNlcnZlZCBtZW1vcnkNCisgICAgLy8gWy4uLl0iLiAoRW1waGFzaXMgYWRkZWQg aGVyZS4pDQorICAgIC8vDQorICAgIC8vIE5vcm1hbGx5IHdlIGFkZCBtZW1vcnkgcmVzb3VyY2Ug ZGVzY3JpcHRvciBIT0JzIGluDQorICAgIC8vIFFlbXVJbml0aWFsaXplUmFtKCksIGFuZCBwcmUt YWxsb2NhdGUgZnJvbSB0aG9zZSB3aXRoIG1lbW9yeQ0KKyAgICAvLyBhbGxvY2F0aW9uIEhPQnMg aW4gSW5pdGlhbGl6ZVJhbVJlZ2lvbnMoKS4gSG93ZXZlciwgdGhlIE1NQ09ORklHIGFyZWENCisg ICAgLy8gaXMgbW9zdCBkZWZpbml0ZWx5IG5vdCBSQU07IHNvLCBhcyBhbiBleGNlcHRpb24sIGNv dmVyIGl0IHdpdGgNCisgICAgLy8gdW5jYWNoZWFibGUgcmVzZXJ2ZWQgbWVtb3J5IHJpZ2h0IGhl cmUuDQorICAgIC8vDQorICAgIEFkZFJlc2VydmVkTWVtb3J5QmFzZVNpemVIb2IgKFBjaUV4QmFy QmFzZSwgU0laRV8yNTZNQiwgRkFMU0UpOw0KKyAgICBCdWlsZE1lbW9yeUFsbG9jYXRpb25Ib2Ig KFBjaUV4QmFyQmFzZSwgU0laRV8yNTZNQiwNCisgICAgICBFZmlSZXNlcnZlZE1lbW9yeVR5cGUp Ow0KKyAgfQ0KKyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoUGNkR2V0MzIoUGNkQ3B1TG9jYWxB cGljQmFzZUFkZHJlc3MpLCBTSVpFXzFNQik7DQorDQorICAvLw0KKyAgLy8gT24gUTM1LCB0aGUg SU8gUG9ydCBzcGFjZSBpcyBhdmFpbGFibGUgZm9yIFBDSSByZXNvdXJjZSBhbGxvY2F0aW9ucyBm cm9tDQorICAvLyAweDYwMDAgdXAuDQorICAvLw0KKyAgaWYgKG1Ib3N0QnJpZGdlRGV2SWQgPT0g SU5URUxfUTM1X01DSF9ERVZJQ0VfSUQpIHsNCisgICAgUGNpSW9CYXNlID0gMHg2MDAwOw0KKyAg ICBQY2lJb1NpemUgPSAweEEwMDA7DQorICAgIEFTU0VSVCAoKElDSDlfUE1CQVNFX1ZBTFVFICYg MHhGMDAwKSA8IFBjaUlvQmFzZSk7DQogICB9DQogDQogICAvLw0KICAgLy8gQWRkIFBDSSBJTyBQ b3J0IHNwYWNlIGF2YWlsYWJsZSBmb3IgUENJIHJlc291cmNlIGFsbG9jYXRpb25zLg0KICAgLy8N CiAgIEJ1aWxkUmVzb3VyY2VEZXNjcmlwdG9ySG9iICgNCkBAIC0zNjgsMTUgKzM2NSwxNSBAQCBN aXNjSW5pdGlhbGl6YXRpb24gKAogICAgICAgcmV0dXJuOw0KICAgfQ0KICAgUGNkU3RhdHVzID0g UGNkU2V0MTZTIChQY2RPdm1mSG9zdEJyaWRnZVBjaURldklkLCBtSG9zdEJyaWRnZURldklkKTsN CiAgIEFTU0VSVF9SRVRVUk5fRVJST1IgKFBjZFN0YXR1cyk7DQogDQogICAvLw0KLSAgLy8gSWYg dGhlIGFwcHJvcHJpYXRlIElPc3BhY2UgZW5hYmxlIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGUgQUNQ SSBQTUJBDQotICAvLyBoYXMgYmVlbiBjb25maWd1cmVkIChlLmcuLCBieSBYZW4pIGFuZCBza2lw IHRoZSBzZXR1cCBoZXJlLg0KLSAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBpbiBBY3BpVGlt ZXJMaWJDb25zdHJ1Y3RvciAoKS4NCisgIC8vIElmIHRoZSBhcHByb3ByaWF0ZSBJT3NwYWNlIGVu YWJsZSBiaXQgaXMgc2V0LCBhc3N1bWUgdGhlIEFDUEkgUE1CQSBoYXMNCisgIC8vIGJlZW4gY29u ZmlndXJlZCBhbmQgc2tpcCB0aGUgc2V0dXAgaGVyZS4gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBp bg0KKyAgLy8gQWNwaVRpbWVyTGliQ29uc3RydWN0b3IgKCkuDQogICAvLw0KICAgaWYgKChQY2lS ZWFkOCAoQWNwaUN0bFJlZykgJiBBY3BpRW5CaXQpID09IDApIHsNCiAgICAgLy8NCiAgICAgLy8g VGhlIFBFSSBwaGFzZSBzaG91bGQgYmUgZXhpdGVkIHdpdGggZnVsbHkgYWNjZXNzaWJlIEFDUEkg UE0gSU8gc3BhY2U6DQogICAgIC8vIDEuIHNldCBQTUJBDQogICAgIC8vDQpAQCAtNzAwLDE0ICs2 OTcsMTIgQEAgSW5pdGlhbGl6ZVBsYXRmb3JtICgKICAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQog DQogICBERUJVRyAoKERFQlVHX0lORk8sICJQbGF0Zm9ybSBQRUlNIExvYWRlZFxuIikpOw0KIA0K ICAgRGVidWdEdW1wQ21vcyAoKTsNCiANCi0gIFhlbkRldGVjdCAoKTsNCi0NCiAgIGlmIChRZW11 RndDZmdTM0VuYWJsZWQgKCkpIHsNCiAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUzMgc3VwcG9y dCB3YXMgZGV0ZWN0ZWQgb24gUUVNVVxuIikpOw0KICAgICBtUzNTdXBwb3J0ZWQgPSBUUlVFOw0K ICAgICBTdGF0dXMgPSBQY2RTZXRCb29sUyAoUGNkQWNwaVMzRW5hYmxlLCBUUlVFKTsNCiAgICAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCiAgIH0NCkBAIC03MzIsMTcgKzcyNywxMiBAQCBJ bml0aWFsaXplUGxhdGZvcm0gKAogICBQdWJsaXNoUGVpTWVtb3J5ICgpOw0KIA0KICAgUWVtdVVj MzJCYXNlSW5pdGlhbGl6YXRpb24gKCk7DQogDQogICBJbml0aWFsaXplUmFtUmVnaW9ucyAoKTsN CiANCi0gIGlmIChtWGVuKSB7DQotICAgIERFQlVHICgoREVCVUdfSU5GTywgIlhlbiB3YXMgZGV0 ZWN0ZWRcbiIpKTsNCi0gICAgSW5pdGlhbGl6ZVhlbiAoKTsNCi0gIH0NCi0NCiAgIGlmIChtQm9v dE1vZGUgIT0gQk9PVF9PTl9TM19SRVNVTUUpIHsNCiAgICAgaWYgKCFGZWF0dXJlUGNkR2V0IChQ Y2RTbW1TbXJhbVJlcXVpcmUpKSB7DQogICAgICAgUmVzZXJ2ZUVtdVZhcmlhYmxlTnZTdG9yZSAo KTsNCiAgICAgfQ0KICAgICBQZWlGdkluaXRpYWxpemF0aW9uICgpOw0KICAgICBNZW1UeXBlSW5m b0luaXRpYWxpemF0aW9uICgpOw0KZGlmZiAtLWdpdCBhL092bWZQa2cvUGxhdGZvcm1QZWkvWGVu LmMgYi9Pdm1mUGtnL1BsYXRmb3JtUGVpL1hlbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAxMDQ5MjJjNjdlN2UuLjAwMDAwMDAwMDAwMAotLS0gYS9Pdm1mUGtnL1BsYXRmb3JtUGVp L1hlbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKkBmaWxlDQotICBYZW4g UGxhdGZvcm0gUEVJIHN1cHBvcnQNCi0NCi0gIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTYsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCi0gIENvcHlyaWdodCAo YykgMjAxMSwgQW5kcmVpIFdhcmtlbnRpbiA8YW5kcmVpd0Btb3Rvcm9sYS5jb20+DQotDQotICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KLQ0KLSoqLw0KLQ0K LS8vDQotLy8gVGhlIHBhY2thZ2UgbGV2ZWwgaGVhZGVyIGZpbGVzIHRoaXMgbW9kdWxlIHVzZXMN Ci0vLw0KLSNpbmNsdWRlIDxQaVBlaS5oPg0KLQ0KLS8vDQotLy8gVGhlIExpYnJhcnkgY2xhc3Nl cyB0aGlzIG1vZHVsZSBjb25zdW1lcw0KLS8vDQotI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIu aD4NCi0jaW5jbHVkZSA8TGlicmFyeS9Ib2JMaWIuaD4NCi0jaW5jbHVkZSA8TGlicmFyeS9NZW1v cnlBbGxvY2F0aW9uTGliLmg+DQotI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQotI2luY2x1 ZGUgPEd1aWQvWGVuSW5mby5oPg0KLSNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0U4MjAuaD4N Ci0jaW5jbHVkZSA8TGlicmFyeS9SZXNvdXJjZVB1YmxpY2F0aW9uTGliLmg+DQotI2luY2x1ZGUg PExpYnJhcnkvTXRyckxpYi5oPg0KLQ0KLSNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KLSNpbmNsdWRl ICJYZW4uaCINCi0NCi1CT09MRUFOIG1YZW4gPSBGQUxTRTsNCi0NCi1TVEFUSUMgVUlOVDMyIG1Y ZW5MZWFmID0gMDsNCi0NCi1FRklfWEVOX0lORk8gbVhlbkluZm87DQotDQotLyoqDQotICBSZXR1 cm5zIEU4MjAgbWFwIHByb3ZpZGVkIGJ5IFhlbg0KLQ0KLSAgQHBhcmFtIEVudHJpZXMgICAgICBQ b2ludGVyIHRvIEU4MjAgbWFwDQotICBAcGFyYW0gQ291bnQgICAgICAgIE51bWJlciBvZiBlbnRy aWVzDQotDQotICBAcmV0dXJuIEVGSV9TVEFUVVMNCi0qKi8NCi1FRklfU1RBVFVTDQotWGVuR2V0 RTgyME1hcCAoDQotICBFRklfRTgyMF9FTlRSWTY0ICoqRW50cmllcywNCi0gIFVJTlQzMiAqQ291 bnQNCi0gICkNCi17DQotICBFRklfWEVOX09WTUZfSU5GTyAqSW5mbyA9DQotICAgIChFRklfWEVO X09WTUZfSU5GTyAqKShVSU5UTikgT1ZNRl9JTkZPX1BIWVNJQ0FMX0FERFJFU1M7DQotDQotICBp ZiAoQXNjaWlTdHJDbXAgKChDSEFSOCAqKSBJbmZvLT5TaWduYXR1cmUsICJYZW5IVk1PVk1GIikp IHsNCi0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQotICB9DQotDQotICBBU1NFUlQgKEluZm8t PkU4MjAgPCBNQVhfQUREUkVTUyk7DQotICAqRW50cmllcyA9IChFRklfRTgyMF9FTlRSWTY0ICop KFVJTlROKSBJbmZvLT5FODIwOw0KLSAgKkNvdW50ID0gSW5mby0+RTgyMEVudHJpZXNDb3VudDsN Ci0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQotDQotLyoqDQotICBDb25uZWN0cyB0byB0 aGUgSHlwZXJ2aXNvci4NCi0NCi0gIEBwYXJhbSAgWGVuTGVhZiAgICAgQ1BVSUQgaW5kZXggdXNl ZCB0byBjb25uZWN0Lg0KLQ0KLSAgQHJldHVybiBFRklfU1RBVFVTDQotDQotKiovDQotRUZJX1NU QVRVUw0KLVhlbkNvbm5lY3QgKA0KLSAgVUlOVDMyIFhlbkxlYWYNCi0gICkNCi17DQotICBVSU5U MzIgSW5kZXg7DQotICBVSU5UMzIgVHJhbnNmZXJSZWc7DQotICBVSU5UMzIgVHJhbnNmZXJQYWdl czsNCi0gIFVJTlQzMiBYZW5WZXJzaW9uOw0KLQ0KLSAgQXNtQ3B1aWQgKFhlbkxlYWYgKyAyLCAm VHJhbnNmZXJQYWdlcywgJlRyYW5zZmVyUmVnLCBOVUxMLCBOVUxMKTsNCi0gIG1YZW5JbmZvLkh5 cGVyUGFnZXMgPSBBbGxvY2F0ZVBhZ2VzIChUcmFuc2ZlclBhZ2VzKTsNCi0gIGlmICghbVhlbklu Zm8uSHlwZXJQYWdlcykgew0KLSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQotICB9 DQotDQotICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBUcmFuc2ZlclBhZ2VzOyBJbmRleCsrKSB7 DQotICAgIEFzbVdyaXRlTXNyNjQgKFRyYW5zZmVyUmVnLA0KLSAgICAgICAgICAgICAgICAgICAo VUlOVE4pIG1YZW5JbmZvLkh5cGVyUGFnZXMgKw0KLSAgICAgICAgICAgICAgICAgICAoSW5kZXgg PDwgRUZJX1BBR0VfU0hJRlQpICsgSW5kZXgpOw0KLSAgfQ0KLQ0KLSAgQXNtQ3B1aWQgKFhlbkxl YWYgKyAxLCAmWGVuVmVyc2lvbiwgTlVMTCwgTlVMTCwgTlVMTCk7DQotICBERUJVRyAoKERFQlVH X0VSUk9SLCAiRGV0ZWN0ZWQgWGVuIHZlcnNpb24gJWQuJWRcbiIsDQotICAgICAgICAgIFhlblZl cnNpb24gPj4gMTYsIFhlblZlcnNpb24gJiAweEZGRkYpKTsNCi0gIG1YZW5JbmZvLlZlcnNpb25N YWpvciA9IChVSU5UMTYpKFhlblZlcnNpb24gPj4gMTYpOw0KLSAgbVhlbkluZm8uVmVyc2lvbk1p bm9yID0gKFVJTlQxNikoWGVuVmVyc2lvbiAmIDB4RkZGRik7DQotDQotICBCdWlsZEd1aWREYXRh SG9iICgNCi0gICAgJmdFZmlYZW5JbmZvR3VpZCwNCi0gICAgJm1YZW5JbmZvLA0KLSAgICBzaXpl b2YobVhlbkluZm8pDQotICAgICk7DQotDQotICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotfQ0KLQ0K LS8qKg0KLSAgRmlndXJlcyBvdXQgaWYgd2UgYXJlIHJ1bm5pbmcgaW5zaWRlIFhlbiBIVk0uDQot DQotICBAcmV0dmFsIFRSVUUgICBYZW4gd2FzIGRldGVjdGVkDQotICBAcmV0dmFsIEZBTFNFICBY ZW4gd2FzIG5vdCBkZXRlY3RlZA0KLQ0KLSoqLw0KLUJPT0xFQU4NCi1YZW5EZXRlY3QgKA0KLSAg Vk9JRA0KLSAgKQ0KLXsNCi0gIFVJTlQ4IFNpZ25hdHVyZVsxM107DQotDQotICBpZiAobVhlbkxl YWYgIT0gMCkgew0KLSAgICByZXR1cm4gVFJVRTsNCi0gIH0NCi0NCi0gIFNpZ25hdHVyZVsxMl0g PSAnXDAnOw0KLSAgZm9yIChtWGVuTGVhZiA9IDB4NDAwMDAwMDA7IG1YZW5MZWFmIDwgMHg0MDAx MDAwMDsgbVhlbkxlYWYgKz0gMHgxMDApIHsNCi0gICAgQXNtQ3B1aWQgKG1YZW5MZWFmLA0KLSAg ICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICAgIChVSU5UMzIgKikgJlNpZ25hdHVyZVsw XSwNCi0gICAgICAgICAgICAgIChVSU5UMzIgKikgJlNpZ25hdHVyZVs0XSwNCi0gICAgICAgICAg ICAgIChVSU5UMzIgKikgJlNpZ25hdHVyZVs4XSk7DQotDQotICAgIGlmICghQXNjaWlTdHJDbXAg KChDSEFSOCAqKSBTaWduYXR1cmUsICJYZW5WTU1YZW5WTU0iKSkgew0KLSAgICAgIG1YZW4gPSBU UlVFOw0KLSAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICB9DQotDQotICBtWGVuTGVhZiA9 IDA7DQotICByZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLQ0KLVZPSUQNCi1YZW5QdWJsaXNoUmFtUmVn aW9ucyAoDQotICBWT0lEDQotICApDQotew0KLSAgRUZJX0U4MjBfRU5UUlk2NCAgKkU4MjBNYXA7 DQotICBVSU5UMzIgICAgICAgICAgICBFODIwRW50cmllc0NvdW50Ow0KLSAgRUZJX1NUQVRVUyAg ICAgICAgU3RhdHVzOw0KLQ0KLSAgaWYgKCFtWGVuKSB7DQotICAgIHJldHVybjsNCi0gIH0NCi0N Ci0gIERFQlVHICgoREVCVUdfSU5GTywgIlVzaW5nIG1lbW9yeSBtYXAgcHJvdmlkZWQgYnkgWGVu XG4iKSk7DQotDQotICAvLw0KLSAgLy8gUGFyc2UgUkFNIGluIEU4MjAgbWFwDQotICAvLw0KLSAg RTgyMEVudHJpZXNDb3VudCA9IDA7DQotICBTdGF0dXMgPSBYZW5HZXRFODIwTWFwICgmRTgyME1h cCwgJkU4MjBFbnRyaWVzQ291bnQpOw0KLQ0KLSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Ci0NCi0gIGlmIChFODIwRW50cmllc0NvdW50ID4gMCkgew0KLSAgICBFRklfRTgyMF9FTlRSWTY0 ICpFbnRyeTsNCi0gICAgVUlOVDMyIExvb3A7DQotDQotICAgIGZvciAoTG9vcCA9IDA7IExvb3Ag PCBFODIwRW50cmllc0NvdW50OyBMb29wKyspIHsNCi0gICAgICBFbnRyeSA9IEU4MjBNYXAgKyBM b29wOw0KLQ0KLSAgICAgIC8vDQotICAgICAgLy8gT25seSBjYXJlIGFib3V0IFJBTQ0KLSAgICAg IC8vDQotICAgICAgaWYgKEVudHJ5LT5UeXBlICE9IEVmaUFjcGlBZGRyZXNzUmFuZ2VNZW1vcnkp IHsNCi0gICAgICAgIGNvbnRpbnVlOw0KLSAgICAgIH0NCi0NCi0gICAgICBBZGRNZW1vcnlCYXNl U2l6ZUhvYiAoRW50cnktPkJhc2VBZGRyLCBFbnRyeS0+TGVuZ3RoKTsNCi0NCi0gICAgICBNdHJy U2V0TWVtb3J5QXR0cmlidXRlIChFbnRyeS0+QmFzZUFkZHIsIEVudHJ5LT5MZW5ndGgsIENhY2hl V3JpdGVCYWNrKTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKioNCi0gIFBlcmZvcm0gWGVu IFBFSSBpbml0aWFsaXphdGlvbi4NCi0NCi0gIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgIFhlbiBp bml0aWFsaXplZCBzdWNjZXNzZnVsbHkNCi0gIEByZXR1cm4gRUZJX05PVF9GT1VORCAgIE5vdCBy dW5uaW5nIHVuZGVyIFhlbg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMNCi1Jbml0aWFsaXplWGVuICgN Ci0gIFZPSUQNCi0gICkNCi17DQotICBSRVRVUk5fU1RBVFVTIFBjZFN0YXR1czsNCi0NCi0gIGlm IChtWGVuTGVhZiA9PSAwKSB7DQotICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KLSAgfQ0KLQ0K LSAgWGVuQ29ubmVjdCAobVhlbkxlYWYpOw0KLQ0KLSAgLy8NCi0gIC8vIFJlc2VydmUgYXdheSBI Vk1MT0FERVIgcmVzZXJ2ZWQgbWVtb3J5IFsweEZDMDAwMDAwLDB4RkQwMDAwMDApLg0KLSAgLy8g VGhpcyBuZWVkcyB0byBtYXRjaCBIVk1MT0FERVIgUkVTRVJWRURfTUVNQkFTRS9SRVNFUlZFRF9N RU1TSVpFLg0KLSAgLy8NCi0gIEFkZFJlc2VydmVkTWVtb3J5QmFzZVNpemVIb2IgKDB4RkMwMDAw MDAsIDB4MTAwMDAwMCwgRkFMU0UpOw0KLQ0KLSAgUGNkU3RhdHVzID0gUGNkU2V0Qm9vbFMgKFBj ZFBjaURpc2FibGVCdXNFbnVtZXJhdGlvbiwgVFJVRSk7DQotICBBU1NFUlRfUkVUVVJOX0VSUk9S IChQY2RTdGF0dXMpOw0KLQ0KLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KLX0NCi0tIAoyLjE5LjEu My5nMzAyNDdhYTVkMjAxCgoK