From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=jaben.carsey@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 881B22111FE43 for ; Wed, 5 Sep 2018 11:55:03 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Sep 2018 11:55:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,334,1531810800"; d="scan'208";a="83330980" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga002.fm.intel.com with ESMTP; 05 Sep 2018 11:53:03 -0700 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 5 Sep 2018 11:53:02 -0700 Received: from fmsmsx103.amr.corp.intel.com ([169.254.2.126]) by fmsmsx156.amr.corp.intel.com ([169.254.13.131]) with mapi id 14.03.0319.002; Wed, 5 Sep 2018 11:53:02 -0700 From: "Carsey, Jaben" To: Andrew Fish CC: "Ni, Ruiyu" , Heinrich Schuchardt , "edk2-devel@lists.01.org" , Alexander Graf , AKASHI Takahiro , "Kinney, Michael D" , Laszlo Ersek Thread-Topic: [edk2] portability of ShellPkg Thread-Index: AQHURT2FSII4bnoVI0+D2t3UnpHUkaTh8cUsgAB+t4D//4sZHIAAeaCA//+LfzyAAHf+AP//j/cA Date: Wed, 5 Sep 2018 18:53:01 +0000 Message-ID: References: <20180905172546.hxc2vqn6pgmr2zqs@bivouac.eciton.net> <9FF5C684-0DA6-45B0-93D8-F6358ACF1C7A@intel.com> <7ADF7CDD-1EE8-41ED-BAF5-7AFC9000345C@apple.com> <8BDDD669-C118-4C7E-9A99-896B844EFA56@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMjNlOGM2MjEtOGIwYi00YmExLTlhM2QtZjRmMGNlYzkxOTIwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiWXZhM3ZLWm45TG90Z3RGV2ltWEtZR3ZmVnZmT1lCZFwvSjkyeFd6WUVlRlYzZ2R3emsxaDN5cHFlSStiYXJuaHMifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.1.200.106] MIME-Version: 1.0 Subject: Re: portability of ShellPkg X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Sep 2018 18:55:03 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QnV0IHRoYXQgaXMgdGhlIGxpbmUgTGVpZiB3YW50cyB0byByZW1vdmUuLi4gdGhlIGxpYnJhcnkg ZnJvbSB0aGUgY29tcG9uZW50cyBzZWN0aW9uLiAgTG9va3MganVzdCBsaWtlIE1kZVBrZyB0byBt ZS4uLiB3aGF0IGlzIGRpZmZlcmVudD8NCg0KLUphYmVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNlc0Bs aXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZg0KPiBBbmRyZXcgRmlzaA0KPiBTZW50OiBXZWRuZXNk YXksIFNlcHRlbWJlciAwNSwgMjAxOCAxMTozMyBBTQ0KPiBUbzogQ2Fyc2V5LCBKYWJlbiA8amFi ZW4uY2Fyc2V5QGludGVsLmNvbT4NCj4gQ2M6IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29t PjsgSGVpbnJpY2ggU2NodWNoYXJkdA0KPiA8eHlwcm9uLmdscGtAZ214LmRlPjsgZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc7IEFsZXhhbmRlciBHcmFmDQo+IDxhZ3JhZkBzdXNlLmRlPjsgQUtBU0hJ IFRha2FoaXJvIDx0YWthaGlyby5ha2FzaGlAbGluYXJvLm9yZz47IEtpbm5leSwNCj4gTWljaGFl bCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IExhc3psbyBFcnNlaw0KPiA8bGVyc2Vr QHJlZGhhdC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0gcG9ydGFiaWxpdHkgb2YgU2hlbGxQ a2cNCj4gSW1wb3J0YW5jZTogSGlnaA0KPiANCj4gSmFiZW4sDQo+IA0KPiBTb3JyeSB0byB0ZXN0 IGNvbXBpbGUgYSBsaWJyYXJ5IGp1c3QgbGlzdCB0aGUgbGlicmFyeSBpbiB0aGUgW0NvbXBvbmVu dHNdIHNlY3Rpb24NCj4gb2YgdGhlIERTQyBmaWxlLiBNZGVQa2cvTWRlUGtnLmRzYyBpcyBhbiBl eGFtcGxlIG9mIHRoaXMuDQo+IA0KPiBUaGFua3MsDQo+IA0KPiBBbmRyZXcgRmlzaA0KPiANCj4g PiBPbiBTZXAgNSwgMjAxOCwgYXQgMTE6MjMgQU0sIENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNl eUBpbnRlbC5jb20+DQo+IHdyb3RlOg0KPiA+DQo+ID4gQWhhLiBTbyB0aGF0IGlzIHZlcnkgZGlm ZmVyZW50IGZyb20gYSBub24gTlVMTCBsaWJyYXJ5IHdoZW4gbGlzdGVkIGluIHRoZQ0KPiBjb21w b25lbnRzIHNlY3Rpb24uICBUaGUgZ29hbCBpcyB0byB0ZXN0IGNvbXBpbGUgdGhlIGxpYnJhcnkg YnV0IG5vdCB1c2UgSQ0KPiB0aGluay4gIElzIHRoZXJlIGFueSB3YXkgdG8gZG8gdGhhdD8NCj4g Pg0KPiA+IEphYmVuDQo+ID4NCj4gPiBPbiBTZXAgNSwgMjAxOCwgYXQgMTE6MjEgQU0sIEFuZHJl dyBGaXNoIDxhZmlzaEBhcHBsZS5jb20NCj4gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PiB3cm90 ZToNCj4gPg0KPiA+Pg0KPiA+Pg0KPiA+Pj4gT24gU2VwIDUsIDIwMTgsIGF0IDExOjA1IEFNLCBD YXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tDQo+IDxtYWlsdG86amFiZW4uY2Fy c2V5QGludGVsLmNvbT4+IHdyb3RlOg0KPiA+Pj4NCj4gPj4+IEJ1dCBhIE5VTEwgbGliIGxpc3Rl ZCBpbiBjb21wb25lbnRzIHNlY3Rpb24gc2hvdWxkbuKAmXQgYmUgbGlua2VkIGluIHRvDQo+IGFu eXRoaW5nLi4uDQo+ID4+Pg0KPiA+Pg0KPiA+PiBKYWJlbiwNCj4gPj4NCj4gPj4gQSBOVUxMIGxp YnJhcnkgY2xhc3MgbWVhbnMgZm9yY2UgaXQgdG8gYmUgbGlua2VkIGluLg0KPiA+Pg0KPiA+PiBT aGVsbFBrZy9TaGVsbFBrZy5kc2M6NzA6ICAjIFtMaWJyYXJ5Q2xhc3Nlcy5BUk1dIGFuZCBOVUxM IG1lYW4gbGluayB0aGlzDQo+IGxpYnJhcnkgaW50byBhbGwgQVJNIGltYWdlcy4NCj4gPj4gU2hl bGxQa2cvU2hlbGxQa2cuZHNjOjcyOg0KPiBOVUxMfEFybVBrZy9MaWJyYXJ5L0NvbXBpbGVySW50 cmluc2ljc0xpYi9Db21waWxlckludHJpbnNpY3NMaWIuaW5mDQo+ID4+IFNoZWxsUGtnL1NoZWxs UGtnLmRzYzo3NToNCj4gTlVMTHxNZGVQa2cvTGlicmFyeS9CYXNlU3RhY2tDaGVja0xpYi9CYXNl U3RhY2tDaGVja0xpYi5pbmYNCj4gPj4gU2hlbGxQa2cvU2hlbGxQa2cuZHNjOjc4Og0KPiBOVUxM fEFybVBrZy9MaWJyYXJ5L0NvbXBpbGVySW50cmluc2ljc0xpYi9Db21waWxlckludHJpbnNpY3NM aWIuaW5mDQo+ID4+IFNoZWxsUGtnL1NoZWxsUGtnLmRzYzoxMTA6DQo+IE5VTEx8U2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxMZXZlbDJDb21tYW5kc0xpYi9VZWZpU2hlbGxMZXZlbDJDb21tYQ0K PiBuZHNMaWIuaW5mDQo+ID4+IFNoZWxsUGtnL1NoZWxsUGtnLmRzYzoxMTE6DQo+IE5VTEx8U2hl bGxQa2cvTGlicmFyeS9VZWZpU2hlbGxMZXZlbDFDb21tYW5kc0xpYi9VZWZpU2hlbGxMZXZlbDFD b21tYQ0KPiBuZHNMaWIuaW5mDQo+ID4+IFNoZWxsUGtnL1NoZWxsUGtnLmRzYzoxMTI6DQo+IE5V TEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxMZXZlbDNDb21tYW5kc0xpYi9VZWZpU2hlbGxM ZXZlbDNDb21tYQ0KPiBuZHNMaWIuaW5mDQo+ID4+IFNoZWxsUGtnL1NoZWxsUGtnLmRzYzoxMTQ6 DQo+IE5VTEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxEcml2ZXIxQ29tbWFuZHNMaWIvVWVm aVNoZWxsRHJpdmVyMUNvbQ0KPiBtYW5kc0xpYi5pbmYNCj4gPj4gU2hlbGxQa2cvU2hlbGxQa2cu ZHNjOjExNToNCj4gTlVMTHxTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEluc3RhbGwxQ29tbWFu ZHNMaWIvVWVmaVNoZWxsSW5zdGFsbDFDb20NCj4gbWFuZHNMaWIuaW5mDQo+ID4+IFNoZWxsUGtn L1NoZWxsUGtnLmRzYzoxMTY6DQo+IE5VTEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxEZWJ1 ZzFDb21tYW5kc0xpYi9VZWZpU2hlbGxEZWJ1ZzFDb20NCj4gbWFuZHNMaWIuaW5mDQo+ID4+IFNo ZWxsUGtnL1NoZWxsUGtnLmRzYzoxMTc6DQo+IE5VTEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hl bGxOZXR3b3JrMUNvbW1hbmRzTGliL1VlZmlTaGVsbE5ldHdvcmsxDQo+IENvbW1hbmRzTGliLmlu Zg0KPiA+PiBTaGVsbFBrZy9TaGVsbFBrZy5kc2M6MTE4Og0KPiBOVUxMfFNoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsTmV0d29yazJDb21tYW5kc0xpYi9VZWZpU2hlbGxOZXR3b3JrMg0KPiBDb21t YW5kc0xpYi5pbmYNCj4gPj4NCj4gPj4gTGlicmFyaWVzIGNhbiBnZXQgcHVsbGVkIGluIHZpYSBv dGhlciBsaWJyYXJpZXMuIFRoZSBvbmx5IHdheSB0byB0ZWxsIGZvciBzdXJlIGlzDQo+IHRvIGxv b2sgYXQgdGhlIGJ1aWxkIHJlcG9ydC4NCj4gPj4NCj4gPj4gJCBidWlsZCAtcCBTaGVsbFBrZy9T aGVsbFBrZy5kZWMgLWEgWDY0IC10IFhDT0RFNSAtLXJlcG9ydC1maWxlPXJlcG9ydC50eHQNCj4g Pj4gJCBjYXQgcmVwb3J0LnR4dCB8IGdyZXAgSG9iTGliDQo+ID4+IC9Wb2x1bWVzL0Nhc2UvVURL MjAxOC9NZGVQa2cvTGlicmFyeS9EeGVIb2JMaWIvRHhlSG9iTGliLmluZg0KPiA+PiB7SG9iTGli OiAgQyA9IEhvYkxpYkNvbnN0cnVjdG9yIFRpbWUgPSAxOW1zfQ0KPiA+Pg0KPiA+PiBZb3UgY2Fu IGNvbW1lbnQgb3V0IHRoZSBIb2JMaWIgcmVmZXJlbmNlIGluIHRoZSBTaGVsbFBrZy5kc2MgZmls ZSBhbmQNCj4gZmlndXJlIG91dCB3aG8gaXMgdXNpbmcgaXQgIiMjIyMNCj4gZmZIb2JMaWJ8TWRl UGtnL0xpYnJhcnkvRHhlSG9iTGliL0R4ZUhvYkxpYi5pbmYiDQo+ID4+ICQgYnVpbGQgLXAgU2hl bGxQa2cvU2hlbGxQa2cuZGVjIC1hIFg2NCAtdCBYQ09ERTUgLS1yZXBvcnQtZmlsZT1yZXBvcnQu dHh0DQo+ID4+IC4uLg0KPiA+PiBidWlsZC5weS4uLg0KPiA+PiAvVm9sdW1lcy9DYXNlL1VESzIw MTgvU2hlbGxQa2cvU2hlbGxQa2cuZHNjKC4uLik6IGVycm9yIDQwMDA6IEluc3RhbmNlDQo+IG9m IGxpYnJhcnkgY2xhc3MgW0hvYkxpYl0gaXMgbm90IGZvdW5kDQo+ID4+IGluDQo+IFsvVm9sdW1l cy9DYXNlL1VESzIwMTgvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaUJvb3RNYW5hZ2VyTGliL1Vl DQo+IGZpQm9vdE1hbmFnZXJMaWIuaW5mXSBbWDY0XQ0KPiA+PiBjb25zdW1lZCBieSBtb2R1bGUN Cj4gWy9Wb2x1bWVzL0Nhc2UvVURLMjAxOC9TaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVs bC5pbmZdDQo+ID4+DQo+ID4+IFRoYW5rcywNCj4gPj4NCj4gPj4gQW5kcmV3IEZpc2gNCj4gPj4N Cj4gPj4+IFVubGVzcyBpcyBsaXN0ZWQgYmVsb3cgd2l0aCB0aGUgc2hlbGwgSU5GIGFsc28sIGl0 IGp1c3QgdGVzdCBjb21waWxlcyBpdC4uLg0KPiA+Pj4NCj4gPj4+IE9yIHNvIEkgdGhvdWdodC4N Cj4gPj4+DQo+ID4+PiBPbiBTZXAgNSwgMjAxOCwgYXQgMTE6MDQgQU0sIEFuZHJldyBGaXNoIDxh ZmlzaEBhcHBsZS5jb20NCj4gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PiB3cm90ZToNCj4gPj4+ DQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+PiBPbiBTZXAgNSwgMjAxOCwgYXQgMTA6MzAgQU0sIENh cnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20NCj4gPG1haWx0bzpqYWJlbi5jYXJz ZXlAaW50ZWwuY29tPj4gd3JvdGU6DQo+ID4+Pj4+DQo+ID4+Pj4+IEhvdyBkb2VzIHJlbW92aW5n IGEgbGliIGZyb20gdGhlIGNvbXBvbmVudHMgc2VjdGlvbiBhZmZlY3QgdGhlIHNoZWxsDQo+IGJp bmFyeSBvdXRwdXQ/DQo+ID4+Pj4+DQo+ID4+Pj4+IElzIHRoZSBhc3NldCBhdCBjb21waWxlIHRp bWU/DQo+ID4+Pj4NCj4gPj4+PiBKYWJlbiwNCj4gPj4+Pg0KPiA+Pj4+IFRoZSBpc3N1ZSBpcyBs aWtlbHkgd2l0aCB0aGUgSE9CIGxpYiBjb25zdHJ1Y3RvciBpbiB0aGUgU2hlbGwgaUFTU0VSVGlu Zy4NCj4gTGVpZidzIGV4YW1wbGUgcGxhdGZvcm0gc3VwcG9ydHMgVUVGSSwgYnV0IG5vdCBQSSBz byBpdCBpcyBub3QgZXhwZWN0ZWQgdGhhdA0KPiBIT0JzIGV4aXN0Lg0KPiA+Pj4+DQo+ID4+Pj4g VGhlIGxpYnJhcnkgaGFzIGFuIGV4cGxpY2l0IGFzc3VtcHRpb24gdGhhdCBIT0JzIGV4aXN0LCBh bmQgdGhhdCBpcyBub3QNCj4gdGhlIGNhc2UgaW4gTGVpZidzIHBsYXRmb3JtLg0KPiA+Pj4+DQo+ ID4+Pj4NCj4gaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVyL01k ZVBrZy9MaWJyYXJ5L0R4ZUhvYkxpDQo+IGIvSG9iTGliLmMjTDU0DQo+IDxodHRwczovL2dpdGh1 Yi5jb20vdGlhbm9jb3JlL2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvRHhlSG9iDQo+ IExpYi9Ib2JMaWIuYyNMNTQ+DQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+IFZPSUQgKm1Ib2JMaXN0 ID0NCj4gPj4+PiBOVUxMOw0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiAvKioNCj4gPj4+Pg0KPiA+ Pj4+IFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIEhPQiBsaXN0Lg0KPiA+Pj4+DQo+ID4+Pj4N Cj4gPj4+PiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gZmlyc3QgSE9CIGlu IHRoZSBsaXN0Lg0KPiA+Pj4+DQo+ID4+Pj4gRm9yIFBFSSBwaGFzZSwgdGhlIFBFSSBzZXJ2aWNl IEdldEhvYkxpc3QoKSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUNCj4gcG9pbnRlcg0KPiA+ Pj4+DQo+ID4+Pj4gdG8gdGhlIEhPQiBsaXN0LiBGb3IgdGhlIERYRSBwaGFzZSwgdGhlIEhPQiBs aXN0IHBvaW50ZXIgY2FuIGJlIHJldHJpZXZlZA0KPiB0aHJvdWdoDQo+ID4+Pj4NCj4gPj4+PiB0 aGUgRUZJIFN5c3RlbSBUYWJsZSBieSBsb29raW5nIHVwIHRoZUhPQiBsaXN0IEdVSUQgaW4gdGhl IFN5c3RlbQ0KPiBDb25maWd1cmF0aW9uIFRhYmxlLg0KPiA+Pj4+DQo+ID4+Pj4gU2luY2UgdGhl IFN5c3RlbSBDb25maWd1cmF0aW9uIFRhYmxlIGRvZXMgbm90IGV4aXN0IHRoYXQgdGhlIHRpbWUg dGhlDQo+IERYRSBDb3JlIGlzDQo+ID4+Pj4NCj4gPj4+PiBsYXVuY2hlZCwgdGhlIERYRSBDb3Jl IHVzZXMgYSBnbG9iYWwgdmFyaWFibGUgZnJvbSB0aGUgRFhFIENvcmUgRW50cnkNCj4gUG9pbnQg TGlicmFyeQ0KPiA+Pj4+DQo+ID4+Pj4gdG8gbWFuYWdlIHRoZSBwb2ludGVyIHRvIHRoZSBIT0Ig bGlzdC4NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gSWYgdGhlIHBvaW50ZXIgdG8gdGhlIEhPQiBs aXN0IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+IFRoaXMg ZnVuY3Rpb24gYWxzbyBjYWNoZXMgdGhlIHBvaW50ZXIgdG8gdGhlIEhPQiBsaXN0IHJldHJpZXZl ZC4NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gQHJldHVybiBUaGUgcG9pbnRlciB0byB0aGUgSE9C IGxpc3QuDQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+ICoqLw0KPiA+Pj4+DQo+ID4+Pj4gVk9JRCAq DQo+ID4+Pj4NCj4gPj4+PiBFRklBUEkNCj4gPj4+Pg0KPiA+Pj4+IEdldEhvYkxpc3QgKA0KPiA+ Pj4+DQo+ID4+Pj4gVk9JRA0KPiA+Pj4+DQo+ID4+Pj4gKQ0KPiA+Pj4+DQo+ID4+Pj4gew0KPiA+ Pj4+DQo+ID4+Pj4gRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+IGlm IChtSG9iTGlzdCA9PQ0KPiA+Pj4+IE5VTEwpIHsNCj4gPj4+Pg0KPiA+Pj4+IFN0YXR1cyA9DQo+ ID4+Pj4gRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlICgmZ0VmaUhvYkxpc3RHdWlkLCAm bUhvYkxpc3QpOw0KPiA+Pj4+DQo+ID4+Pj4gQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4g Pj4+Pg0KPiA+Pj4+IEFTU0VSVCAobUhvYkxpc3QgIT0NCj4gPj4+PiBOVUxMKTsNCj4gPj4+Pg0K PiA+Pj4+IH0NCj4gPj4+Pg0KPiA+Pj4+IHJldHVybiBtSG9iTGlzdDsNCj4gPj4+Pg0KPiA+Pj4+ IH0NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gLyoqDQo+ID4+Pj4NCj4gPj4+PiBUaGUgY29uc3Ry dWN0b3IgZnVuY3Rpb24gY2FjaGVzIHRoZSBwb2ludGVyIHRvIEhPQiBsaXN0IGJ5IGNhbGxpbmcN Cj4gR2V0SG9iTGlzdCgpDQo+ID4+Pj4NCj4gPj4+PiBhbmQgd2lsbCBhbHdheXMgcmV0dXJuIEVG SV9TVUNDRVNTLg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBAcGFyYW0gSW1hZ2VIYW5kbGUgVGhl IGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2UuDQo+ID4+Pj4NCj4g Pj4+PiBAcGFyYW0gU3lzdGVtVGFibGUgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxl Lg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBAcmV0dmFsIEVGSV9TVUNDRVNTIFRoZSBjb25zdHJ1 Y3RvciBzdWNjZXNzZnVsbHkgZ2V0cyBIb2JMaXN0Lg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiAq Ki8NCj4gPj4+Pg0KPiA+Pj4+IEVGSV9TVEFUVVMNCj4gPj4+Pg0KPiA+Pj4+IEVGSUFQSQ0KPiA+ Pj4+DQo+ID4+Pj4gSG9iTGliQ29uc3RydWN0b3IgKA0KPiA+Pj4+DQo+ID4+Pj4gSU4gRUZJX0hB TkRMRSBJbWFnZUhhbmRsZSwNCj4gPj4+Pg0KPiA+Pj4+IElOIEVGSV9TWVNURU1fVEFCTEUgKlN5 c3RlbVRhYmxlDQo+ID4+Pj4NCj4gPj4+PiApDQo+ID4+Pj4NCj4gPj4+PiB7DQo+ID4+Pj4NCj4g Pj4+PiBHZXRIb2JMaXN0ICgpOw0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4+Pj4NCj4gPj4+PiB9DQo+ID4+Pj4NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4g LyoqDQo+ID4+Pj4NCj4gPj4+PiBSZXR1cm5zIHRoZSBuZXh0IGluc3RhbmNlIG9mIGEgSE9CIHR5 cGUgZnJvbSB0aGUgc3RhcnRpbmcgSE9CLg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBUaGlzIGZ1 bmN0aW9uIHNlYXJjaGVzIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIEhPQiB0eXBlIGZyb20gdGhl IHN0YXJ0aW5nDQo+IEhPQiBwb2ludGVyLg0KPiA+Pj4+DQo+ID4+Pj4gSWYgdGhlcmUgZG9lcyBu b3QgZXhpc3Qgc3VjaCBIT0IgdHlwZSBmcm9tIHRoZSBzdGFydGluZyBIT0IgcG9pbnRlciwgaXQN Cj4gd2lsbCByZXR1cm4gTlVMTC4NCj4gPj4+Pg0KPiA+Pj4+IEluIGNvbnRyYXN0IHdpdGggbWFj cm8gR0VUX05FWFRfSE9CKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc2tpcA0KPiB0aGUgc3Rh cnRpbmcgSE9CIHBvaW50ZXINCj4gPj4+Pg0KPiA+Pj4+IHVuY29uZGl0aW9uYWxseTogaXQgcmV0 dXJucyBIb2JTdGFydCBiYWNrIGlmIEhvYlN0YXJ0IGl0c2VsZiBtZWV0cyB0aGUNCj4gcmVxdWly ZW1lbnQ7DQo+ID4+Pj4NCj4gPj4+PiBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gdXNlIEdFVF9ORVhU X0hPQigpIGlmIGl0IHdpc2hlcyB0byBza2lwIGN1cnJlbnQNCj4gSG9iU3RhcnQuDQo+ID4+Pj4N Cj4gPj4+Pg0KPiA+Pj4+IElmIEhvYlN0YXJ0IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4+ Pj4NCj4gPj4+Pg0KPiA+Pj4+IEBwYXJhbSBUeXBlIFRoZSBIT0IgdHlwZSB0byByZXR1cm4uDQo+ ID4+Pj4NCj4gPj4+PiBAcGFyYW0gSG9iU3RhcnQgVGhlIHN0YXJ0aW5nIEhPQiBwb2ludGVyIHRv IHNlYXJjaCBmcm9tLg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBAcmV0dXJuIFRoZSBuZXh0IGlu c3RhbmNlIG9mIGEgSE9CIHR5cGUgZnJvbSB0aGUgc3RhcnRpbmcgSE9CLg0KPiA+Pj4+DQo+ID4+ Pj4NCj4gPj4+PiAqKi8NCj4gPj4+Pg0KPiA+Pj4+IFZPSUQgKg0KPiA+Pj4+DQo+ID4+Pj4gRUZJ QVBJDQo+ID4+Pj4NCj4gPj4+PiBHZXROZXh0SG9iICgNCj4gPj4+Pg0KPiA+Pj4+IElOIFVJTlQx NiBUeXBlLA0KPiA+Pj4+DQo+ID4+Pj4gSU4gQ09OU1QgVk9JRCAqSG9iU3RhcnQNCj4gPj4+Pg0K PiA+Pj4+ICkNCj4gPj4+Pg0KPiA+Pj4+IHsNCj4gPj4+Pg0KPiA+Pj4+IEVGSV9QRUlfSE9CX1BP SU5URVJTIEhvYjsNCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4gQVNTRVJUIChIb2JTdGFydCAhPQ0K PiA+Pj4+IE5VTEwpOw0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBIb2IuUmF3ID0gKFVJTlQ4ICop IEhvYlN0YXJ0Ow0KPiA+Pj4+DQo+ID4+Pj4gLy8NCj4gPj4+Pg0KPiA+Pj4+IC8vIFBhcnNlIHRo ZSBIT0IgbGlzdCB1bnRpbCBlbmQgb2YgbGlzdCBvciBtYXRjaGluZyB0eXBlIGlzIGZvdW5kLg0K PiA+Pj4+DQo+ID4+Pj4gLy8NCj4gPj4+Pg0KPiA+Pj4+IHdoaWxlICghRU5EX09GX0hPQl9MSVNU IChIb2IpKSB7DQo+ID4+Pj4NCj4gPj4+PiBpZiAoSG9iLkhlYWRlci0+SG9iVHlwZSA9PSBUeXBl KSB7DQo+ID4+Pj4NCj4gPj4+PiByZXR1cm4gSG9iLlJhdzsNCj4gPj4+Pg0KPiA+Pj4+IH0NCj4g Pj4+Pg0KPiA+Pj4+IEhvYi5SYXcgPQ0KPiA+Pj4+IEdFVF9ORVhUX0hPQiAoSG9iKTsNCj4gPj4+ Pg0KPiA+Pj4+IH0NCj4gPj4+Pg0KPiA+Pj4+IHJldHVybg0KPiA+Pj4+IE5VTEw7DQo+ID4+Pj4N Cj4gPj4+PiB9DQo+ID4+Pj4NCj4gPj4+PiBUaGFua3MsDQo+ID4+Pj4NCj4gPj4+PiBBbmRyZXcg RmlzaA0KPiA+Pj4+DQo+ID4+Pj4+DQo+ID4+Pj4+IEphYmVuDQo+ID4+Pj4+DQo+ID4+Pj4+PiBP biBTZXAgNSwgMjAxOCwgYXQgMTA6MjYgQU0sIExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1A bGluYXJvLm9yZw0KPiA8bWFpbHRvOmxlaWYubGluZGhvbG1AbGluYXJvLm9yZz4+IHdyb3RlOg0K PiA+Pj4+Pj4NCj4gPj4+Pj4+IEhpIGFsbCwNCj4gPj4+Pj4+DQo+ID4+Pj4+PiAoVGhpcyBpcyBw YXJ0bHkgYSBzdW1tYXJ5IG9mIGRpc2N1c3Npb25zIHRoYXQgaGF2ZSBiZWVuIGhlbGQgb24gSVJD DQo+ID4+Pj4+PiBhbmQgb2ZmbGluZSwgd2l0aCBBbGV4IEdyYWYgYW5kIE1pa2UgS2lubmV5LikN Cj4gPj4+Pj4+DQo+ID4+Pj4+PiBUaGUgVUVGSSBTaGVsbCwgYXMgcHJvZHVjZWQgYnkgdGhlIGNv bnRlbnRzIG9mIFNoZWxsUGtnLCBpcyBuZWVkZWQNCj4gZm9yDQo+ID4+Pj4+PiBydW5uaW5nIHRo ZSBVRUZJIFNDVC4gVGhpcyBoYXMgbmV2ZXIgYmVlbiBwcm9ibGVtYXRpYyBiZWZvcmUgLSBidXQN Cj4gbm93DQo+ID4+Pj4+PiB3ZSBhcmUgc3RhcnRpbmcgdG8gcnVuIFNDVCBvbiB0aGUgVS1Cb290 IGltcGxlbWVudGF0aW9uIG9mIHRoZSBVRUZJDQo+ID4+Pj4+PiBpbnRlcmZhY2VzLCBjZXJ0YWlu IGltcGxpY2l0IGFzc3VtcHRpb25zIG1heSBuZWVkIHRvIGJlIG1hZGUNCj4gZXhwbGljaXQsDQo+ ID4+Pj4+PiBhbmQgcGVyaGFwcyByZWV2YWx1YXRlZC4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBNeSBm ZWVsaW5nIGlzIHRoZSBmb2xsb3dpbmc6DQo+ID4+Pj4+PiAtIFRoZSBNaW5VZWZpU2hlbGwgdmFy aWFudCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBydW4gU0NULg0KPiA+Pj4+Pj4gLSBUaGUgVUVG SSBTaGVsbCBhcyBwcm92aWRlZCBieSBTaGVsbFBrZyAoYW55IGZsYXZvdXIpIHNob3VsZCBydW4g b24NCj4gPj4+Pj4+IGFueSB2YWxpZCBVRUZJIGltcGxlbWVudGF0aW9uLiBXaGVyZSB1bmRlcmx5 aW5nIGZ1bmN0aW9uYWxpdHkgaXMNCj4gPj4+Pj4+IG1pc3NpbmcgZm9yIGNlcnRhaW4gY29tbWFu ZHMsIHRob3NlIGNvbW1hbmRzIHNob3VsZCBiZQ0KPiA+Pj4+Pj4gZGVncmFkZWQvZGlzYWJsZWQg dG8gbGV0IHJlbWFpbmluZyBjb21tYW5kcyBmdW5jdGlvbi4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBJ ZGVhbGx5LCBJIHdvdWxkIGxpa2UgdG8gc2VlIGEgUmVhZG1lLm1kIGluIFNoZWxsUGtnLCBiYXNp Y2FsbHkNCj4gPj4+Pj4+IHByb3ZpZGluZyBhIG1pc3Npb24gc3RhdGVtZW50LiBJIGNvdWxkIHdy aXRlIG9uZSwgYnV0IEkgZXhwZWN0IHRoZQ0KPiA+Pj4+Pj4gcGVvcGxlIHdobyBhY3R1YWxseSBt YWludGFpbiBpdCB3b3VsZCBiZSBiZXR0ZXIgc3VpdGVkIDopDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4g V2UgY3VycmVudGx5IGhhdmUgYW4gaXNzdWUgd2l0aCBydW5uaW5nIHRoZSBzaGVsbCBvbiBVLUJv b3QgYmVjYXVzZQ0KPiA+Pj4+Pj4gZXZlbiBNaW5VZWZpU2hlbGwgcHVsbHMgaW4gVWVmaVNoZWxs RGVidWcxQ29tbWFuZHNMaWIuaW5mLiBUaGlzDQo+ID4+Pj4+PiBhcHBlYXJzIHRvIGJlIGluYWR2 ZXJ0ZW50LCBzaW5jZSBpdCBpcyBhbHNvIGluY2x1ZGVkIGEgZmV3IGxpbmVzDQo+ID4+Pj4+PiBm dXJ0aGVyIGRvd24gaW5zaWRlIGFuICFpZm5kZWYgJChOT19TSEVMTF9QUk9GSUxFUykgZ3VhcmQu DQo+ID4+Pj4+PiBTbyBJIHdvdWxkIHByb3Bvc2UgdGhlIGZvbGxvd2luZyBwYXRjaCAoYW5kIGNh biBzZW5kIGl0IG91dCBwcm9wZXJseQ0KPiA+Pj4+Pj4gaWYgdGhlIG1haW50YWluZXJzIGFncmVl KToNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvU2hlbGxQa2cuZHNj IGIvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+ID4+Pj4+PiBpbmRleCA1OWRkMDdlMGFlLi5jODUy YWJkM2Y3IDEwMDY0NA0KPiA+Pj4+Pj4gLS0tIGEvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+ID4+ Pj4+PiArKysgYi9TaGVsbFBrZy9TaGVsbFBrZy5kc2MNCj4gPj4+Pj4+IEBAIC0xMDEsNyArMTAx LDYgQEAgW0NvbXBvbmVudHNdDQo+ID4+Pj4+Pg0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bExldmVsM0NvbW1hbmRzTGliL1VlZmlTaGVsbExldmVsM0NvbW1hbmRzTGliDQo+IC5pbmYNCj4g Pj4+Pj4+DQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsRHJpdmVyMUNvbW1hbmRzTGliL1Vl ZmlTaGVsbERyaXZlcjFDb21tYW5kc0wNCj4gaWIuaW5mDQo+ID4+Pj4+Pg0KPiBTaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbEluc3RhbGwxQ29tbWFuZHNMaWIvVWVmaVNoZWxsSW5zdGFsbDFDb21t YW5kc0xpDQo+IGIuaW5mDQo+ID4+Pj4+PiAtDQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxs RGVidWcxQ29tbWFuZHNMaWIvVWVmaVNoZWxsRGVidWcxQ29tbWFuZHMNCj4gTGliLmluZg0KPiA+ Pj4+Pj4NCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxOZXR3b3JrMUNvbW1hbmRzTGliL1Vl ZmlTaGVsbE5ldHdvcmsxQ29tbQ0KPiBhbmRzTGliLmluZg0KPiA+Pj4+Pj4NCj4gU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxOZXR3b3JrMkNvbW1hbmRzTGliL1VlZmlTaGVsbE5ldHdvcmsyQ29t bQ0KPiBhbmRzTGliLmluZg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IFRoZSByZWFzb24gdGhpcyBjYXVz ZXMgYSBwcm9ibGVtIGlzIGJlY2F1c2UgdGhpcyBtb2R1bGUgaGFzIGENCj4gPj4+Pj4+IGRlcGVu ZGVuY3kgb24gSG9iTGliLCB3aGljaCBBU1NFUlRTIGlmIGl0IGRvZXMgbm90IGZpbmQgYW55IEhP QnMNCj4gbHlpbmcNCj4gPj4+Pj4+IGFyb3VuZC4gU2luY2UgSE9CcyBhcmUgYSBQSSBjb25jZXB0 IHJhdGhlciB0aGFuIGEgVUVGSSBjb25jZXB0LA0KPiA+Pj4+Pj4gaWRlYWxseSB3ZSB3b3VsZCBu b3QgdGVybWluYXRlIHRoZSBzaGVsbCBpZiB0aGV5IGFyZSBtaXNzaW5nLg0KPiBIb3dldmVyLA0K PiA+Pj4+Pj4gc2luY2UgdGhlIEhvYkxpYiBpcyBnZW5lcmljIHRvIEVESzIsIHdlIGFsc28gc2hv dWxkbid0IGp1c3QgZ28NCj4gPj4+Pj4+IHN0cmlwcGluZyBBU1NFUlRzIG91dCBvZiBpdC4gVGhl IGFib3ZlIHBhdGNoIGdpdmVzIHVzIGEgd2F5IG9mDQo+ID4+Pj4+PiB1bmJsb2NraW5nIHRoZSBT Q1Qgb24gVS1Cb290IFVFRkkgd2hpbGUgd2UgY29uc2lkZXIgd2hhdCB0byBkbw0KPiBhYm91dA0K PiA+Pj4+Pj4gdGhlIGJpZ2dlciBxdWVzdGlvbi4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBUaG91Z2h0 cz8NCj4gPj4+Pj4+DQo+ID4+Pj4+PiAvDQo+ID4+Pj4+PiAgIExlaWYNCj4gPj4+Pg0KPiA+Pg0K PiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4g ZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gaHR0 cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=