From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (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 83FB421967BEE for ; Tue, 20 Jun 2017 17:51:41 -0700 (PDT) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Jun 2017 17:53:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.39,366,1493708400"; d="scan'208,217";a="115559333" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga005.jf.intel.com with ESMTP; 20 Jun 2017 17:53:04 -0700 Received: from fmsmsx115.amr.corp.intel.com (10.18.116.19) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 20 Jun 2017 17:53:04 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx115.amr.corp.intel.com (10.18.116.19) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 20 Jun 2017 17:53:03 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.146]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.56]) with mapi id 14.03.0319.002; Wed, 21 Jun 2017 08:52:48 +0800 From: "Yao, Jiewen" To: "Justen, Jordan L" , Laszlo Ersek , "Fan, Jeff" , "Kinney, Michael D" , edk2-devel-01 Thread-Topic: [PATCH 1/5] OvmfPkg: introduce Q35TsegSizeLib (class header and sole lib instance) Thread-Index: AQHS6SHB91cKOu4qPkm7Q5DWQsrGTaIufg5Q Date: Wed, 21 Jun 2017 00:52:48 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503A96B991@shsmsx102.ccr.corp.intel.com> References: <20170608171333.17937-1-lersek@redhat.com> <20170608171333.17937-2-lersek@redhat.com> <149789342556.32751.17592475673245441129@jljusten-skl> In-Reply-To: <149789342556.32751.17592475673245441129@jljusten-skl> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.22 Subject: Re: [PATCH 1/5] OvmfPkg: introduce Q35TsegSizeLib (class header and sole lib instance) 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: Wed, 21 Jun 2017 00:51:41 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QXMgZmFyIGFzIEkga25vdywgdGhlIHJlYWwgcGxhdGZvcm0gU21tQWNjZXNzUGVpbSBtYXkgZGVw ZW5kIG9uIGdFZmlQZWlNZW1vcnlEaXNjb3ZlcmVkUHBpR3VpZCwgYmVjYXVzZSB0aGUgU21yYW1I b2IgaXMgcHJvZHVjZWQgaW4gTVJDIHdyYXBwZXIuDQoNCkF0IHNhbWUgdGltZSwgSSBhbHNvIHNh dyBhIHNvbHV0aW9uIHRvIHVzZSBsaWJyYXJ5IHRvIHByb2R1Y2UgU21tQWNjZXNzUHBpLiBJbiBz dWNoIGNhc2UsIHRoZXJlIGlzIG5vIGRlcGVuZGVuY3kgZXhwcmVzc2lvbiwgYmVjYXVzZSBvbmUg bW9kdWxlIGRvZXMgMiB0aGluZ3M6IDEpIGluaXQgbWVtb3J5LCAyKSBwcm9kdWNlIFNtbUFjY2Vz c1BwaS4NCg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCkZyb206IEp1c3RlbiwgSm9yZGFuIEwN ClNlbnQ6IFR1ZXNkYXksIEp1bmUgMjAsIDIwMTcgMTozMCBBTQ0KVG86IExhc3psbyBFcnNlayA8 bGVyc2VrQHJlZGhhdC5jb20+OyBGYW4sIEplZmYgPGplZmYuZmFuQGludGVsLmNvbT47IEtpbm5l eSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFlhbywgSmlld2VuIDxq aWV3ZW4ueWFvQGludGVsLmNvbT47IGVkazItZGV2ZWwtMDEgPGVkazItZGV2ZWxAbGlzdHMuMDEu b3JnPg0KU3ViamVjdDogUmU6IFtQQVRDSCAxLzVdIE92bWZQa2c6IGludHJvZHVjZSBRMzVUc2Vn U2l6ZUxpYiAoY2xhc3MgaGVhZGVyIGFuZCBzb2xlIGxpYiBpbnN0YW5jZSkNCg0KT24gMjAxNy0w Ni0wOCAxMDoxMzoyOSwgTGFzemxvIEVyc2VrIHdyb3RlOg0KPiBPdm1mUGtnIGNvbnRhaW5zIHRo cmVlIG1vZHVsZXMgdGhhdCB3b3JrIHdpdGggdGhlIFRTRUcgKFNNUkFNKSBzaXplOg0KPiBQbGF0 Zm9ybVBlaSAoUEVJTSksIFNtbUFjY2Vzc1BlaSAoUEVJTSksIGFuZCBTbW1BY2Nlc3MyRHhlIChE WEVfRFJJVkVSKS4NCj4gVGhlc2UgbW9kdWxlcyBvcGVuLWNvZGUgdGhlIGludGVycHJldGF0aW9u IG9mIHRoZSBFU01SQU1DIHJlZ2lzdGVyJ3MNCj4gVFNFR19TWiBiaXQtZmllbGQuIFRoYXQgaXMg T0sgYXMgbG9uZyBhcyB3ZSBzdGljayB3aXRoIHRoZSBRMzUgaGFyZHdhcmUNCj4gc3BlYyBhbmQg bm90aGluZyBtb3JlLCBidXQgaXQgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGJlbmVmaXQgZnJvbSBh bg0KPiB1cGNvbWluZyBRRU1VIGZlYXR1cmUsIG5hbWVseSBleHRlbmRlZCBUU0VHIHNpemVzLg0K Pg0KPiBJbnRyb2R1Y2UgdGhlIFEzNVRzZWdTaXplTGliIGNsYXNzLCBhbmQgaXRzIHNvbGUgbGli IGluc3RhbmNlLCBmb3INCj4gZXh0cmFjdGluZyAvIGNlbnRyYWxpemluZyBUU0VHIHNpemUgcXVl cnlpbmcgYW5kIGludGVycHJldGF0aW9uLiBUaGlzDQo+IGxpYnJhcnkgaW5zdGFuY2UgaXMgc2Vs ZiBjb250YWluZWQgYW5kIGRvZXMgbm90IGNvbnN1bWUgZHluYW1pYyBQQ0RzIChmb3INCj4gZXhh bXBsZSwgaXQgZG9lc24ndCBjb25zdW1lIFBjZE92bWZIb3N0QnJpZGdlUGNpRGV2SWQpLCBiZWNh dXNlIHN1Y2ggUENEcw0KPiB0ZW5kIHRvIGJlIHNldCBpbiBQbGF0Zm9ybVBlaSwgYnV0IHRoZSBk aXNwYXRjaCBvcmRlciBiZXR3ZWVuIFBsYXRmb3JtUGVpDQo+IGFuZCBTbW1BY2Nlc3NQZWkgaXMg dW5zcGVjaWZpZWQgKGJvdGggaGF2ZSBUUlVFIGZvciBERVBFWCkuDQoNCkkgdGhpbmsgdGhhdCBv biAncmVhbCcgcGxhdGZvcm1zIHRoZXJlIHdvdWxkIGJlIGFuIGVuZm9yY2VkIG9yZGVyaW5nDQpv ZiBQbGF0Zm9ybSBQRUkgYmVmb3JlIHRoZSBQRUkgU01NIGRyaXZlcnMuIEknbSBub3Qgc3VyZSB3 aGF0IHRoZQ0KbWVjaGFuaXNtIGlzLCBhbmQgd2hldGhlciBpdCBpcyBhcHBsaWNhYmxlIHRvIE9W TUYuDQoNCkplZmYsIE1pa2UsIEppZXdlbiwgRG8geW91IGtub3c/IERvIHRoZSBjaGlwc2V0IFNN TSBkcml2ZXJzIGRlcGVuZCBvbg0KZ0VmaVBlaU1lbW9yeURpc2NvdmVyZWRQcGlHdWlkIHRoYXQg aXMgdHJpZ2dlcmVkIGJ5IFBsYXRmb3JtIFBFST8gRG9lcw0KZ0VmaVBlaU1lbW9yeURpc2NvdmVy ZWRQcGlHdWlkIGFsc28gaW5zdGFsbCBvbiBTMyByZXN1bWU/DQoNCkxhc3psbywgSXQgc291bmRl ZCBsaWtlIHlvdSdkIGJlIG9wZW4gdG8gdXNpbmcgYSBQQ0QsIGJ1dCB0aGUgUEVJDQpkcml2ZXIg b3JkZXJpbmcgaXNzdWUgcHJldmVudGVkIGl0LiBJcyB0aGF0IHJpZ2h0Pw0KDQpUaGFua3MsDQoN Ci1Kb3JkYW4NCg0KPiBJbiB0aGUgbmV4dCBmZXcgcGF0Y2hlcyB3ZSdyZSBnb2luZyB0byByZWJh c2UgdGhlIHRocmVlIGxpc3RlZCBtb2R1bGVzIHRvDQo+IFEzNVRzZWdTaXplTGliLiBBcyBpbnRy b2R1Y2VkLCB0aGUgbGlicmFyeSBpbnN0YW5jZSBvbmx5IGNhcHR1cmVzIHRoZQ0KPiBjdXJyZW50 bHkgc3VwcG9ydGVkIFRTRUcgc2l6ZXMuDQo+DQo+IENjOiBKb3JkYW4gSnVzdGVuIDxqb3JkYW4u bC5qdXN0ZW5AaW50ZWwuY29tPG1haWx0bzpqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPj4NCj4g Q29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMA0K PiBTaWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPG1haWx0bzps ZXJzZWtAcmVkaGF0LmNvbT4+DQo+IC0tLQ0KPiAgT3ZtZlBrZy9Pdm1mUGtnLmRlYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQo+ICBPdm1mUGtnL092bWZQa2dJYTMyLmRz YyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gIE92bWZQa2cvT3ZtZlBrZ0lh MzJYNjQuZHNjICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPiAgT3ZtZlBrZy9Pdm1m UGtnWDY0LmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ICBPdm1mUGtn L0xpYnJhcnkvUTM1VHNlZ1NpemVMaWIvUTM1VHNlZ1NpemVMaWIuaW5mIHwgIDQ3ICsrKysrDQo+ ICBPdm1mUGtnL0luY2x1ZGUvTGlicmFyeS9RMzVUc2VnU2l6ZUxpYi5oICAgICAgICAgIHwgIDc0 ICsrKysrKysrDQo+ICBPdm1mUGtnL0xpYnJhcnkvUTM1VHNlZ1NpemVMaWIvUTM1VHNlZ1NpemVM aWIuYyAgIHwgMTg2ICsrKysrKysrKysrKysrKysrKysrDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDMx NSBpbnNlcnRpb25zKCspDQo+DQo+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2cuZGVjIGIv T3ZtZlBrZy9Pdm1mUGtnLmRlYw0KPiBpbmRleCA1NjI3YmUwYmFiMGEuLjdiOTIyMDM2OWI5NSAx MDA2NDQNCj4gLS0tIGEvT3ZtZlBrZy9Pdm1mUGtnLmRlYw0KPiArKysgYi9Pdm1mUGtnL092bWZQ a2cuZGVjDQo+IEBAIC0yNywxNCArMjcsMTkgQEAgW0xpYnJhcnlDbGFzc2VzXQ0KPiAgICAjDQo+ ICAgIExvYWRMaW51eExpYnxJbmNsdWRlL0xpYnJhcnkvTG9hZExpbnV4TGliLmgNCj4NCj4gICAg IyMgIEBsaWJyYXJ5Y2xhc3MgIFNhdmUgYW5kIHJlc3RvcmUgdmFyaWFibGVzIHVzaW5nIGEgZmls ZQ0KPiAgICAjDQo+ICAgIE52VmFyc0ZpbGVMaWJ8SW5jbHVkZS9MaWJyYXJ5L052VmFyc0ZpbGVM aWIuaA0KPg0KPiArICAjIyAgQGxpYnJhcnljbGFzcyAgVXRpbGl0eSBsaWJyYXJ5IHRvIHF1ZXJ5 IFRTRUcgc2l6ZS1yZWxhdGVkIHF1YW50aXRpZXMgb24NCj4gKyAgIyAgICAgICAgICAgICAgICAg IFEzNS4NCj4gKyAgIw0KPiArICBRMzVUc2VnU2l6ZUxpYnxJbmNsdWRlL0xpYnJhcnkvUTM1VHNl Z1NpemVMaWIuaA0KPiArDQo+ICAgICMjICBAbGlicmFyeWNsYXNzICBBY2Nlc3MgUUVNVSdzIGZp cm13YXJlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlDQo+ICAgICMNCj4gICAgUWVtdUZ3Q2ZnTGli fEluY2x1ZGUvTGlicmFyeS9RZW11RndDZmdMaWIuaA0KPg0KPiAgICAjIyAgQGxpYnJhcnljbGFz cyAgUzMgc3VwcG9ydCBmb3IgUUVNVSBmd19jZmcNCj4gICAgIw0KPiAgICBRZW11RndDZmdTM0xp YnxJbmNsdWRlL0xpYnJhcnkvUWVtdUZ3Q2ZnUzNMaWIuaA0KPiBkaWZmIC0tZ2l0IGEvT3ZtZlBr Zy9Pdm1mUGtnSWEzMi5kc2MgYi9Pdm1mUGtnL092bWZQa2dJYTMyLmRzYw0KPiBpbmRleCAwNjQ3 ZjM0NjI1N2EuLjg5MTdjMmY3YjA4NSAxMDA2NDQNCj4gLS0tIGEvT3ZtZlBrZy9Pdm1mUGtnSWEz Mi5kc2MNCj4gKysrIGIvT3ZtZlBrZy9Pdm1mUGtnSWEzMi5kc2MNCj4gQEAgLTEyOSwxNCArMTI5 LDE1IEBAIFtMaWJyYXJ5Q2xhc3Nlc10NCj4gICAgVWVmaUxpYnxNZGVQa2cvTGlicmFyeS9VZWZp TGliL1VlZmlMaWIuaW5mDQo+ICAgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYnxNZGVQa2cvTGli cmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmlu Zg0KPiAgICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaVJ1 bnRpbWVTZXJ2aWNlc1RhYmxlTGliL1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5pbmYNCj4g ICAgVWVmaURyaXZlckVudHJ5UG9pbnR8TWRlUGtnL0xpYnJhcnkvVWVmaURyaXZlckVudHJ5UG9p bnQvVWVmaURyaXZlckVudHJ5UG9pbnQuaW5mDQo+ICAgIFVlZmlBcHBsaWNhdGlvbkVudHJ5UG9p bnR8TWRlUGtnL0xpYnJhcnkvVWVmaUFwcGxpY2F0aW9uRW50cnlQb2ludC9VZWZpQXBwbGljYXRp b25FbnRyeVBvaW50LmluZg0KPiAgICBEZXZpY2VQYXRoTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlE ZXZpY2VQYXRoTGliRGV2aWNlUGF0aFByb3RvY29sL1VlZmlEZXZpY2VQYXRoTGliRGV2aWNlUGF0 aFByb3RvY29sLmluZg0KPiAgICBOdlZhcnNGaWxlTGlifE92bWZQa2cvTGlicmFyeS9OdlZhcnNG aWxlTGliL052VmFyc0ZpbGVMaWIuaW5mDQo+ICsgIFEzNVRzZWdTaXplTGlifE92bWZQa2cvTGli cmFyeS9RMzVUc2VnU2l6ZUxpYi9RMzVUc2VnU2l6ZUxpYi5pbmYNCj4gICAgRmlsZUhhbmRsZUxp YnxNZGVQa2cvTGlicmFyeS9VZWZpRmlsZUhhbmRsZUxpYi9VZWZpRmlsZUhhbmRsZUxpYi5pbmYN Cj4gICAgVWVmaUNwdUxpYnxVZWZpQ3B1UGtnL0xpYnJhcnkvQmFzZVVlZmlDcHVMaWIvQmFzZVVl ZmlDcHVMaWIuaW5mDQo+ICAgIFNlY3VyaXR5TWFuYWdlbWVudExpYnxNZGVNb2R1bGVQa2cvTGli cmFyeS9EeGVTZWN1cml0eU1hbmFnZW1lbnRMaWIvRHhlU2VjdXJpdHlNYW5hZ2VtZW50TGliLmlu Zg0KPiAgICBOZXRMaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlTmV0TGliL0R4ZU5ldExpYi5p bmYNCj4gICAgSXBJb0xpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVJcElvTGliL0R4ZUlwSW9M aWIuaW5mDQo+ICAgIFVkcElvTGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZVVkcElvTGliL0R4 ZVVkcElvTGliLmluZg0KPiAgICBEcGNMaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlRHBjTGli L0R4ZURwY0xpYi5pbmYNCj4gZGlmZiAtLWdpdCBhL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNj IGIvT3ZtZlBrZy9Pdm1mUGtnSWEzMlg2NC5kc2MNCj4gaW5kZXggMTE4MmIxODU4YTdkLi41NmU5 YzViNzkwZDcgMTAwNjQ0DQo+IC0tLSBhL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNjDQo+ICsr KyBiL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNjDQo+IEBAIC0xMzQsMTQgKzEzNCwxNSBAQCBb TGlicmFyeUNsYXNzZXNdDQo+ICAgIFVlZmlMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZp TGliLmluZg0KPiAgICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWJ8TWRlUGtnL0xpYnJhcnkvVWVm aUJvb3RTZXJ2aWNlc1RhYmxlTGliL1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5pbmYNCj4gICAg VWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlSdW50aW1lU2Vy dmljZXNUYWJsZUxpYi9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaW5mDQo+ICAgIFVlZmlE cml2ZXJFbnRyeVBvaW50fE1kZVBrZy9MaWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBvaW50L1VlZmlE cml2ZXJFbnRyeVBvaW50LmluZg0KPiAgICBVZWZpQXBwbGljYXRpb25FbnRyeVBvaW50fE1kZVBr Zy9MaWJyYXJ5L1VlZmlBcHBsaWNhdGlvbkVudHJ5UG9pbnQvVWVmaUFwcGxpY2F0aW9uRW50cnlQ b2ludC5pbmYNCj4gICAgRGV2aWNlUGF0aExpYnxNZGVQa2cvTGlicmFyeS9VZWZpRGV2aWNlUGF0 aExpYkRldmljZVBhdGhQcm90b2NvbC9VZWZpRGV2aWNlUGF0aExpYkRldmljZVBhdGhQcm90b2Nv bC5pbmYNCj4gICAgTnZWYXJzRmlsZUxpYnxPdm1mUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9O dlZhcnNGaWxlTGliLmluZg0KPiArICBRMzVUc2VnU2l6ZUxpYnxPdm1mUGtnL0xpYnJhcnkvUTM1 VHNlZ1NpemVMaWIvUTM1VHNlZ1NpemVMaWIuaW5mDQo+ICAgIEZpbGVIYW5kbGVMaWJ8TWRlUGtn L0xpYnJhcnkvVWVmaUZpbGVIYW5kbGVMaWIvVWVmaUZpbGVIYW5kbGVMaWIuaW5mDQo+ICAgIFVl ZmlDcHVMaWJ8VWVmaUNwdVBrZy9MaWJyYXJ5L0Jhc2VVZWZpQ3B1TGliL0Jhc2VVZWZpQ3B1TGli LmluZg0KPiAgICBTZWN1cml0eU1hbmFnZW1lbnRMaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhl U2VjdXJpdHlNYW5hZ2VtZW50TGliL0R4ZVNlY3VyaXR5TWFuYWdlbWVudExpYi5pbmYNCj4gICAg TmV0TGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZU5ldExpYi9EeGVOZXRMaWIuaW5mDQo+ICAg IElwSW9MaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlSXBJb0xpYi9EeGVJcElvTGliLmluZg0K PiAgICBVZHBJb0xpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVVZHBJb0xpYi9EeGVVZHBJb0xp Yi5pbmYNCj4gICAgRHBjTGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZURwY0xpYi9EeGVEcGNM aWIuaW5mDQo+IGRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dYNjQuZHNjIGIvT3ZtZlBrZy9P dm1mUGtnWDY0LmRzYw0KPiBpbmRleCA2MzZkZmIxYjU2MzguLjYxOGI3MmJmZmE4MCAxMDA2NDQN Cj4gLS0tIGEvT3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYw0KPiArKysgYi9Pdm1mUGtnL092bWZQa2dY NjQuZHNjDQo+IEBAIC0xMzQsMTQgKzEzNCwxNSBAQCBbTGlicmFyeUNsYXNzZXNdDQo+ICAgIFVl ZmlMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGliLmluZg0KPiAgICBVZWZpQm9vdFNl cnZpY2VzVGFibGVMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliL1Vl ZmlCb290U2VydmljZXNUYWJsZUxpYi5pbmYNCj4gICAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxl TGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi9VZWZpUnVudGlt ZVNlcnZpY2VzVGFibGVMaWIuaW5mDQo+ICAgIFVlZmlEcml2ZXJFbnRyeVBvaW50fE1kZVBrZy9M aWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBvaW50L1VlZmlEcml2ZXJFbnRyeVBvaW50LmluZg0KPiAg ICBVZWZpQXBwbGljYXRpb25FbnRyeVBvaW50fE1kZVBrZy9MaWJyYXJ5L1VlZmlBcHBsaWNhdGlv bkVudHJ5UG9pbnQvVWVmaUFwcGxpY2F0aW9uRW50cnlQb2ludC5pbmYNCj4gICAgRGV2aWNlUGF0 aExpYnxNZGVQa2cvTGlicmFyeS9VZWZpRGV2aWNlUGF0aExpYkRldmljZVBhdGhQcm90b2NvbC9V ZWZpRGV2aWNlUGF0aExpYkRldmljZVBhdGhQcm90b2NvbC5pbmYNCj4gICAgTnZWYXJzRmlsZUxp YnxPdm1mUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZhcnNGaWxlTGliLmluZg0KPiArICBR MzVUc2VnU2l6ZUxpYnxPdm1mUGtnL0xpYnJhcnkvUTM1VHNlZ1NpemVMaWIvUTM1VHNlZ1NpemVM aWIuaW5mDQo+ICAgIEZpbGVIYW5kbGVMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaUZpbGVIYW5kbGVM aWIvVWVmaUZpbGVIYW5kbGVMaWIuaW5mDQo+ICAgIFVlZmlDcHVMaWJ8VWVmaUNwdVBrZy9MaWJy YXJ5L0Jhc2VVZWZpQ3B1TGliL0Jhc2VVZWZpQ3B1TGliLmluZg0KPiAgICBTZWN1cml0eU1hbmFn ZW1lbnRMaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlU2VjdXJpdHlNYW5hZ2VtZW50TGliL0R4 ZVNlY3VyaXR5TWFuYWdlbWVudExpYi5pbmYNCj4gICAgTmV0TGlifE1kZU1vZHVsZVBrZy9MaWJy YXJ5L0R4ZU5ldExpYi9EeGVOZXRMaWIuaW5mDQo+ICAgIElwSW9MaWJ8TWRlTW9kdWxlUGtnL0xp YnJhcnkvRHhlSXBJb0xpYi9EeGVJcElvTGliLmluZg0KPiAgICBVZHBJb0xpYnxNZGVNb2R1bGVQ a2cvTGlicmFyeS9EeGVVZHBJb0xpYi9EeGVVZHBJb0xpYi5pbmYNCj4gICAgRHBjTGlifE1kZU1v ZHVsZVBrZy9MaWJyYXJ5L0R4ZURwY0xpYi9EeGVEcGNMaWIuaW5mDQo+IGRpZmYgLS1naXQgYS9P dm1mUGtnL0xpYnJhcnkvUTM1VHNlZ1NpemVMaWIvUTM1VHNlZ1NpemVMaWIuaW5mIGIvT3ZtZlBr Zy9MaWJyYXJ5L1EzNVRzZWdTaXplTGliL1EzNVRzZWdTaXplTGliLmluZg0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjhmOTllNTViOGM0OA0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL092bWZQa2cvTGlicmFyeS9RMzVUc2VnU2l6ZUxpYi9RMzVUc2VnU2l6 ZUxpYi5pbmYNCj4gQEAgLTAsMCArMSw0NyBAQA0KPiArIyMgQGZpbGUNCj4gKyMgVXRpbGl0eSBs aWJyYXJ5IHRvIHF1ZXJ5IFRTRUcgc2l6ZS1yZWxhdGVkIHF1YW50aXRpZXMgb24gUTM1Lg0KPiAr Iw0KPiArIyBDb3B5cmlnaHQgKEMpIDIwMTcsIFJlZCBIYXQsIEluYy4NCj4gKyMNCj4gKyMgVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlDQo+ICsjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgQlNEIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMgdGhpcw0KPiArIyBkaXN0cmlidXRpb24u IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsjIGh0dHA6 Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKyMNCj4gKyMgVEhF IFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJ UyIgQkFTSVMsIFdJVEhPVVQNCj4gKyMgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0Yg QU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsjIw0KPiArDQo+ICtbRGVm aW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMS4yNQ0KPiArICBC QVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBRMzVUc2VnU2l6ZUxpYg0KPiArICBGSUxF X0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA2MDE5NTc4Ri0wMDc4LTQ2RDQtODZFRS0wNkM0 ODZBMzA0RDINCj4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gQkFTRQ0KPiAr ICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgTElCUkFSWV9DTEFT UyAgICAgICAgICAgICAgICAgID0gUTM1VHNlZ1NpemVMaWJ8UEVJTSBEWEVfRFJJVkVSDQo+ICsN Cj4gKyMNCj4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9u bHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQNCj4gKyMgdG9vbHMuDQo+ICsjDQo+ICsj ICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0DQo+ICsjDQo+ICsNCj4g K1tTb3VyY2VzXQ0KPiArICBRMzVUc2VnU2l6ZUxpYi5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4g KyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyAgT3ZtZlBrZy9Pdm1mUGtnLmRlYw0KPiArDQo+ICtb TGlicmFyeUNsYXNzZXNdDQo+ICsgIEJhc2VMaWINCj4gKyAgRGVidWdMaWINCj4gKyAgUGNkTGli DQo+ICsgIFBjaUxpYg0KPiArDQo+ICtbRmVhdHVyZVBjZF0NCj4gKyAgZ1VlZmlPdm1mUGtnVG9r ZW5TcGFjZUd1aWQuUGNkU21tU21yYW1SZXF1aXJlDQo+ICsNCj4gK1tGaXhlZFBjZF0NCj4gKyAg Z1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1VHNlZ01ieXRlcw0KPiBkaWZmIC0tZ2l0 IGEvT3ZtZlBrZy9JbmNsdWRlL0xpYnJhcnkvUTM1VHNlZ1NpemVMaWIuaCBiL092bWZQa2cvSW5j bHVkZS9MaWJyYXJ5L1EzNVRzZWdTaXplTGliLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXggMDAwMDAwMDAwMDAwLi41ODBlZjY4ODc5MzENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9Pdm1mUGtnL0luY2x1ZGUvTGlicmFyeS9RMzVUc2VnU2l6ZUxpYi5oDQo+IEBAIC0wLDAgKzEs NzQgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBVdGlsaXR5IGxpYnJhcnkgdG8gcXVlcnkgVFNFRyBz aXplLXJlbGF0ZWQgcXVhbnRpdGllcyBvbiBRMzUuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChDKSAy MDE3LCBSZWQgSGF0LCBJbmMuDQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlDQo+ICsgIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2Ugd2hpY2ggYWNj b21wYW5pZXMgdGhpcw0KPiArICBkaXN0cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxp Y2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNl cy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBV TkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVA0KPiArICBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg T1IgSU1QTElFRC4NCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9fUTM1X1RTRUdfU0laRV9MSUJf Xw0KPiArI2RlZmluZSBfX1EzNV9UU0VHX1NJWkVfTElCX18NCj4gKw0KPiArLyoqDQo+ICsgIFF1 ZXJ5IHRoZSBwcmVmZXJyZWQgc2l6ZSBvZiBUU0VHLCBpbiBtZWdhYnl0ZXMuDQo+ICsNCj4gKyAg VGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9ubHkg b24gdGhlIFEzNSBib2FyZC4gSWYNCj4gKyAgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBhbm90 aGVyIGJvYXJkLCB0aGUgZnVuY3Rpb24gbG9ncyBhbiBpbmZvcm1hdGl2ZQ0KPiArICBlcnJvciBt ZXNzYWdlIGFuZCBkb2VzIG5vdCByZXR1cm4uDQo+ICsNCj4gKyAgQHJldHVybiAgVGhlIHByZWZl cnJlZCBzaXplIG9mIFRTRUcsIGV4cHJlc3NlZCBpbiBtZWdhYnl0ZXMuDQo+ICsqKi8NCj4gK1VJ TlQxNg0KPiArRUZJQVBJDQo+ICtRMzVUc2VnU2l6ZUdldFByZWZlcnJlZE1ieXRlcyAoDQo+ICsg IFZPSUQNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFF1ZXJ5IHRoZSBFU01SQU1DLlRTRUdf U1ogYml0LWZpZWxkIHZhbHVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByZWZlcnJlZA0KPiAr ICBUU0VHIHNpemUuDQo+ICsNCj4gKyAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2Fs bGluZyB0aGlzIGZ1bmN0aW9uIG9ubHkgb24gdGhlIFEzNSBib2FyZC4gSWYNCj4gKyAgdGhlIGZ1 bmN0aW9uIGlzIGNhbGxlZCBvbiBhbm90aGVyIGJvYXJkLCB0aGUgZnVuY3Rpb24gbG9ncyBhbiBp bmZvcm1hdGl2ZQ0KPiArICBlcnJvciBtZXNzYWdlIGFuZCBkb2VzIG5vdCByZXR1cm4uDQo+ICsN Cj4gKyAgQHJldHVybiAgVGhlIEVTTVJBTUMuVFNFR19TWiBiaXQtZmllbGQgdmFsdWUgdGhhdCBj b3JyZXNwb25kcyB0byB0aGUNCj4gKyAgICAgICAgICAgcHJlZmVycmVkIFRTRUcgc2l6ZS4gVGhl IHJldHVybiB2YWx1ZSBpcyBhIHN1YnNldCBvZg0KPiArICAgICAgICAgICBNQ0hfRVNNUkFNQ19U U0VHX01BU0ssIGRlZmluZWQgaW4gPEluZHVzdHJ5U3RhbmRhcmQvUTM1TWNoSWNoOS5oPi4NCj4g KyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArUTM1VHNlZ1NpemVHZXRQcmVmZXJyZWRFc21y YW1jVHNlZ1N6TWFzayAoDQo+ICsgIFZPSUQNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIEV4 dHJhY3QgdGhlIFRTRUdfU1ogYml0LWZpZWxkIGZyb20gdGhlIHBhc3NlZCBpbiBFU01SQU1DIHJl Z2lzdGVyIHZhbHVlLCBhbmQNCj4gKyAgcmV0dXJuIHRoZSBudW1iZXIgb2YgbWVnYWJ5dGVzIHRo YXQgaXQgcmVwcmVzZW50cy4NCj4gKw0KPiArICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZv ciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gb25seSBvbiB0aGUgUTM1IGJvYXJkLiBJZg0KPiArICB0 aGUgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGFub3RoZXIgYm9hcmQsIHRoZSBmdW5jdGlvbiBsb2dz IGFuIGluZm9ybWF0aXZlDQo+ICsgIGVycm9yIG1lc3NhZ2UgYW5kIGRvZXMgbm90IHJldHVybi4N Cj4gKw0KPiArICBAcGFyYW1baW5dIEVzbXJhbWNWYWwgIFRoZSBFU01SQU1DIHJlZ2lzdGVyIHZh bHVlIHRvIGV4dHJhY3QgdGhlIFRTRUdfU1oNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBi aXQtZmllbGQgZnJvbSwgdXNpbmcgTUNIX0VTTVJBTUNfVFNFR19NQVNLIGZyb20NCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICA8SW5kdXN0cnlTdGFuZGFyZC9RMzVNY2hJY2g5Lmg+LiBJZiB0 aGUgZXh0cmFjdGVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgYml0LWZpZWxkIGNhbm5v dCBiZSBtYXBwZWQgdG8gYSBNQiBjb3VudCwgdGhlIGZ1bmN0aW9uDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgbG9ncyBhbiBlcnJvciBtZXNzYWdlIGFuZCBkb2VzIG5vdCByZXR1cm4uDQo+ ICsNCj4gKyAgQHJldHVybiAgVGhlIG51bWJlciBvZiBtZWdhYnl0ZXMgdGhhdCB0aGUgZXh0cmFj dGVkIFRTRUdfU1ogYml0LWZpZWxkDQo+ICsgICAgICAgICAgIHJlcHJlc2VudHMuDQo+ICsqKi8N Cj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtRMzVUc2VnU2l6ZUNvbnZlcnRFc21yYW1jVmFsVG9N Ynl0ZXMgKA0KPiArICBJTiBVSU5UOCBFc21yYW1jVmFsDQo+ICsgICk7DQo+ICsNCj4gKyNlbmRp Zg0KPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9MaWJyYXJ5L1EzNVRzZWdTaXplTGliL1EzNVRzZWdT aXplTGliLmMgYi9Pdm1mUGtnL0xpYnJhcnkvUTM1VHNlZ1NpemVMaWIvUTM1VHNlZ1NpemVMaWIu Yw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmRiNTdhOGIz MDhkZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL092bWZQa2cvTGlicmFyeS9RMzVUc2VnU2l6 ZUxpYi9RMzVUc2VnU2l6ZUxpYi5jDQo+IEBAIC0wLDAgKzEsMTg2IEBADQo+ICsvKiogQGZpbGUN Cj4gKyAgVXRpbGl0eSBsaWJyYXJ5IHRvIHF1ZXJ5IFRTRUcgc2l6ZS1yZWxhdGVkIHF1YW50aXRp ZXMgb24gUTM1Lg0KPiArDQo+ICsgIENvcHlyaWdodCAoQykgMjAxNywgUmVkIEhhdCwgSW5jLg0K PiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJl IGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZQ0KPiArICB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMNCj4gKyAg ZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBh dA0KPiArICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNF IE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQNCj4gKyAgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsqKi8N Cj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPiArI2luY2x1 ZGUgPExpYnJhcnkvUGNpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9RMzVUc2VnU2l6ZUxp Yi5oPg0KPiArI2luY2x1ZGUgPE92bWZQbGF0Zm9ybXMuaD4NCj4gKw0KPiArU1RBVElDIEJPT0xF QU4gbVByZWZlcmVuY2VzSW5pdGlhbGl6ZWQ7DQo+ICtTVEFUSUMgVUlOVDggICBtUHJlZmVycmVk RXNtcmFtY1RzZWdTek1hc2s7DQo+ICsNCj4gKy8qKg0KPiArICBGZXRjaCB0aGUgcHJlZmVyZW5j ZXMgaW50byBzdGF0aWMgdmFyaWFibGVzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIHVzZWQgYnkgdGhl DQo+ICsgIHB1YmxpYyBmdW5jdGlvbnMgb2YgdGhpcyBsaWJyYXJ5IGluc3RhbmNlLg0KPiArDQo+ ICsgIFRoZSBRMzUgYm9hcmQgcmVxdWlyZW1lbnQgZG9jdW1lbnRlZCBvbiB0aG9zZSBpbnRlcmZh Y2VzIGlzIGNvbW1vbmx5IGVuZm9yY2VkDQo+ICsgIGhlcmUuDQo+ICsqKi8NCj4gK1NUQVRJQw0K PiArVk9JRA0KPiArUTM1VHNlZ1NpemVHZXRQcmVmZXJlbmNlcyAoDQo+ICsgIFZPSUQNCj4gKyAg KQ0KPiArew0KPiArICBVSU5UMTYgSG9zdEJyaWRnZURldklkOw0KPiArDQo+ICsgIGlmIChtUHJl ZmVyZW5jZXNJbml0aWFsaXplZCkgew0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgcmVhY2hlZCBpZiBTTVJB TSBzdXBwb3J0IGlzIHJlcXVpcmVkLg0KPiArICAvLw0KPiArICBBU1NFUlQgKEZlYXR1cmVQY2RH ZXQgKFBjZFNtbVNtcmFtUmVxdWlyZSkpOw0KPiArDQo+ICsgIEhvc3RCcmlkZ2VEZXZJZCA9IFBj aVJlYWQxNiAoT1ZNRl9IT1NUQlJJREdFX0RJRCk7DQo+ICsgIGlmIChIb3N0QnJpZGdlRGV2SWQg IT0gSU5URUxfUTM1X01DSF9ERVZJQ0VfSUQpIHsNCj4gKyAgICBERUJVRyAoKA0KPiArICAgICAg REVCVUdfRVJST1IsDQo+ICsgICAgICAiJWE6ICVhOiBubyBUU0VHIChTTVJBTSkgb24gaG9zdCBi cmlkZ2UgRElEPTB4JTA0eDsgIg0KPiArICAgICAgIm9ubHkgRElEPTB4JTA0eCAoUTM1KSBpcyBz dXBwb3J0ZWRcbiIsDQo+ICsgICAgICBnRWZpQ2FsbGVyQmFzZU5hbWUsDQo+ICsgICAgICBfX0ZV TkNUSU9OX18sDQo+ICsgICAgICBIb3N0QnJpZGdlRGV2SWQsDQo+ICsgICAgICBJTlRFTF9RMzVf TUNIX0RFVklDRV9JRA0KPiArICAgICAgKSk7DQo+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsg ICAgQ3B1RGVhZExvb3AgKCk7DQo+ICsgIH0NCj4gKw0KPiArICBtUHJlZmVyZW5jZXNJbml0aWFs aXplZCA9IFRSVUU7DQo+ICsNCj4gKyAgc3dpdGNoIChGaXhlZFBjZEdldDggKFBjZFEzNVRzZWdN Ynl0ZXMpKSB7DQo+ICsgIGNhc2UgMToNCj4gKyAgICBtUHJlZmVycmVkRXNtcmFtY1RzZWdTek1h c2sgPSBNQ0hfRVNNUkFNQ19UU0VHXzFNQjsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSAyOg0K PiArICAgIG1QcmVmZXJyZWRFc21yYW1jVHNlZ1N6TWFzayA9IE1DSF9FU01SQU1DX1RTRUdfMk1C Ow0KPiArICAgIGJyZWFrOw0KPiArICBjYXNlIDg6DQo+ICsgICAgbVByZWZlcnJlZEVzbXJhbWNU c2VnU3pNYXNrID0gTUNIX0VTTVJBTUNfVFNFR184TUI7DQo+ICsgICAgYnJlYWs7DQo+ICsgIGRl ZmF1bHQ6DQo+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArDQo+ ICsvKioNCj4gKyAgUXVlcnkgdGhlIHByZWZlcnJlZCBzaXplIG9mIFRTRUcsIGluIG1lZ2FieXRl cy4NCj4gKw0KPiArICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoaXMg ZnVuY3Rpb24gb25seSBvbiB0aGUgUTM1IGJvYXJkLiBJZg0KPiArICB0aGUgZnVuY3Rpb24gaXMg Y2FsbGVkIG9uIGFub3RoZXIgYm9hcmQsIHRoZSBmdW5jdGlvbiBsb2dzIGFuIGluZm9ybWF0aXZl DQo+ICsgIGVycm9yIG1lc3NhZ2UgYW5kIGRvZXMgbm90IHJldHVybi4NCj4gKw0KPiArICBAcmV0 dXJuICBUaGUgcHJlZmVycmVkIHNpemUgb2YgVFNFRywgZXhwcmVzc2VkIGluIG1lZ2FieXRlcy4N Cj4gKyoqLw0KPiArVUlOVDE2DQo+ICtFRklBUEkNCj4gK1EzNVRzZWdTaXplR2V0UHJlZmVycmVk TWJ5dGVzICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIC8vDQo+ICsgIC8vIFF1ZXJ5 IHRoZSBFU01SQU1DLlRTRUdfU1ogcHJlZmVyZW5jZSBhbmQgY29udmVydCBpdCB0byBtZWdhYnl0 ZXMuDQo+ICsgIC8vDQo+ICsgIHJldHVybiBRMzVUc2VnU2l6ZUNvbnZlcnRFc21yYW1jVmFsVG9N Ynl0ZXMgKA0KPiArICAgICAgICAgICBRMzVUc2VnU2l6ZUdldFByZWZlcnJlZEVzbXJhbWNUc2Vn U3pNYXNrICgpDQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsg IFF1ZXJ5IHRoZSBFU01SQU1DLlRTRUdfU1ogYml0LWZpZWxkIHZhbHVlIHRoYXQgY29ycmVzcG9u ZHMgdG8gdGhlIHByZWZlcnJlZA0KPiArICBUU0VHIHNpemUuDQo+ICsNCj4gKyAgVGhlIGNhbGxl ciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9ubHkgb24gdGhlIFEz NSBib2FyZC4gSWYNCj4gKyAgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBhbm90aGVyIGJvYXJk LCB0aGUgZnVuY3Rpb24gbG9ncyBhbiBpbmZvcm1hdGl2ZQ0KPiArICBlcnJvciBtZXNzYWdlIGFu ZCBkb2VzIG5vdCByZXR1cm4uDQo+ICsNCj4gKyAgQHJldHVybiAgVGhlIEVTTVJBTUMuVFNFR19T WiBiaXQtZmllbGQgdmFsdWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUNCj4gKyAgICAgICAgICAg cHJlZmVycmVkIFRTRUcgc2l6ZS4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN1YnNldCBvZg0KPiAr ICAgICAgICAgICBNQ0hfRVNNUkFNQ19UU0VHX01BU0ssIGRlZmluZWQgaW4gPEluZHVzdHJ5U3Rh bmRhcmQvUTM1TWNoSWNoOS5oPi4NCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArUTM1 VHNlZ1NpemVHZXRQcmVmZXJyZWRFc21yYW1jVHNlZ1N6TWFzayAoDQo+ICsgIFZPSUQNCj4gKyAg KQ0KPiArew0KPiArICBRMzVUc2VnU2l6ZUdldFByZWZlcmVuY2VzICgpOw0KPiArICByZXR1cm4g bVByZWZlcnJlZEVzbXJhbWNUc2VnU3pNYXNrOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiAr ICBFeHRyYWN0IHRoZSBUU0VHX1NaIGJpdC1maWVsZCBmcm9tIHRoZSBwYXNzZWQgaW4gRVNNUkFN QyByZWdpc3RlciB2YWx1ZSwgYW5kDQo+ICsgIHJldHVybiB0aGUgbnVtYmVyIG9mIG1lZ2FieXRl cyB0aGF0IGl0IHJlcHJlc2VudHMuDQo+ICsNCj4gKyAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJs ZSBmb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9ubHkgb24gdGhlIFEzNSBib2FyZC4gSWYNCj4g KyAgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBhbm90aGVyIGJvYXJkLCB0aGUgZnVuY3Rpb24g bG9ncyBhbiBpbmZvcm1hdGl2ZQ0KPiArICBlcnJvciBtZXNzYWdlIGFuZCBkb2VzIG5vdCByZXR1 cm4uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBFc21yYW1jVmFsICBUaGUgRVNNUkFNQyByZWdpc3Rl ciB2YWx1ZSB0byBleHRyYWN0IHRoZSBUU0VHX1NaDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgYml0LWZpZWxkIGZyb20sIHVzaW5nIE1DSF9FU01SQU1DX1RTRUdfTUFTSyBmcm9tDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgPEluZHVzdHJ5U3RhbmRhcmQvUTM1TWNoSWNoOS5oPi4g SWYgdGhlIGV4dHJhY3RlZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGJpdC1maWVsZCBj YW5ub3QgYmUgbWFwcGVkIHRvIGEgTUIgY291bnQsIHRoZSBmdW5jdGlvbg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgIGxvZ3MgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZG9lcyBub3QgcmV0dXJu Lg0KPiArDQo+ICsgIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgbWVnYWJ5dGVzIHRoYXQgdGhlIGV4 dHJhY3RlZCBUU0VHX1NaIGJpdC1maWVsZA0KPiArICAgICAgICAgICByZXByZXNlbnRzLg0KPiAr KiovDQo+ICtVSU5UMTYNCj4gK0VGSUFQSQ0KPiArUTM1VHNlZ1NpemVDb252ZXJ0RXNtcmFtY1Zh bFRvTWJ5dGVzICgNCj4gKyAgSU4gVUlOVDggRXNtcmFtY1ZhbA0KPiArICApDQo+ICt7DQo+ICsg IFVJTlQ4ICBUc2VnU2l6ZUJpdHM7DQo+ICsgIFVJTlQxNiBNYnl0ZXM7DQo+ICsNCj4gKyAgUTM1 VHNlZ1NpemVHZXRQcmVmZXJlbmNlcyAoKTsNCj4gKw0KPiArICBUc2VnU2l6ZUJpdHMgPSBFc21y YW1jVmFsICYgTUNIX0VTTVJBTUNfVFNFR19NQVNLOw0KPiArICBzd2l0Y2ggKFRzZWdTaXplQml0 cykgew0KPiArICBjYXNlIE1DSF9FU01SQU1DX1RTRUdfMU1COg0KPiArICAgIE1ieXRlcyA9IDE7 DQo+ICsgICAgYnJlYWs7DQo+ICsgIGNhc2UgTUNIX0VTTVJBTUNfVFNFR18yTUI6DQo+ICsgICAg TWJ5dGVzID0gMjsNCj4gKyAgICBicmVhazsNCj4gKyAgY2FzZSBNQ0hfRVNNUkFNQ19UU0VHXzhN QjoNCj4gKyAgICBNYnl0ZXMgPSA4Ow0KPiArICAgIGJyZWFrOw0KPiArICBkZWZhdWx0Og0KPiAr ICAgIERFQlVHICgoDQo+ICsgICAgICBERUJVR19FUlJPUiwNCj4gKyAgICAgICIlYTogJWE6IHVu a25vd24gVHNlZ1NpemVCaXRzPTB4JTAyeFxuIiwNCj4gKyAgICAgIGdFZmlDYWxsZXJCYXNlTmFt ZSwNCj4gKyAgICAgIF9fRlVOQ1RJT05fXywNCj4gKyAgICAgIFRzZWdTaXplQml0cw0KPiArICAg ICAgKSk7DQo+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsgICAgQ3B1RGVhZExvb3AgKCk7DQo+ ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEtlZXAgY29tcGlsZXJzIGhhcHB5Lg0KPiArICAgIC8v DQo+ICsgICAgTWJ5dGVzID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBNYnl0ZXM7DQo+ ICt9DQo+IC0tDQo+IDIuOS4zDQo+DQo+DQo=