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.151; helo=mga17.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (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 605B2224E6936 for ; Thu, 1 Mar 2018 09:12:44 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Mar 2018 09:18:52 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,408,1515484800"; d="scan'208";a="21354077" Received: from orsmsx104.amr.corp.intel.com ([10.22.225.131]) by fmsmga008.fm.intel.com with ESMTP; 01 Mar 2018 09:18:52 -0800 Received: from orsmsx151.amr.corp.intel.com (10.22.226.38) by ORSMSX104.amr.corp.intel.com (10.22.225.131) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 1 Mar 2018 09:18:52 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.232]) by ORSMSX151.amr.corp.intel.com ([169.254.7.10]) with mapi id 14.03.0319.002; Thu, 1 Mar 2018 09:18:51 -0800 From: "Kinney, Michael D" To: =?utf-8?B?TWFydmluIEjDpHVzZXI=?= , "edk2-devel@lists.01.org" , "Kinney, Michael D" CC: "lersek@redhat.com" , "Gao, Liming" Thread-Topic: [edk2] [PATCH 1/2] MdePkg/Base.h: Ensure safe bitwise operations. Thread-Index: AQHTr+q3IxS4cmiO9UyN5haxybivfqO5L8MAgAAKh4CAAPKdAIAADDeAgAAlQgCAAAangP//vvnQgACMyID//9+d8IABMceA///fkeA= Date: Thu, 1 Mar 2018 17:18:51 +0000 Message-ID: References: <62c9363b-7f27-cfff-492a-560660727b86@redhat.com> <366ffc0c-b55f-a3c1-973e-b80d3dd07d26@redhat.com> <2b22bfbd-24ce-e26c-9f1c-e5ba2816b48f@redhat.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.22.254.139] MIME-Version: 1.0 Subject: Re: [PATCH 1/2] MdePkg/Base.h: Ensure safe bitwise operations. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Mar 2018 17:12:44 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWFydmluLA0KDQpUaGFua3MuICBJIGFncmVlIHRoYXQgdGhlcmUgbWF5IGJlIHNvbWUgY29tcGls ZXIgYmVoYXZpb3IgYXNzdW1wdGlvbnMuDQoNCkkgd291bGQgcHJlZmVyIHdlIGFkZCB0byBCYXNl LmggdGVzdHMgZm9yIHRoZSBleHBlY3RlZCBiZWhhdmlvciANCmFzc3VtcHRpb25zIGFuZCBicmVh ayB0aGUgYnVpbGQgaWYgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGFkaGVyZQ0KdG8gdGhvc2UgYXNz dW1wdGlvbnMuICBXZSBoYXZlIGFscmVhZHkgYWRkZWQgdGhlc2UgdG8gdmVyaWZ5IHRoZQ0Kc2l6 ZSBvZiBiYXNlIHR5cGVzIGFuZCB0aGUgc2l6ZSBvZiBlbnVtcy4NCg0KLyoqDQogIFZlcmlmaWVz IHRoZSBzdG9yYWdlIHNpemUgb2YgYSBnaXZlbiBkYXRhIHR5cGUuDQoNCiAgVGhpcyBtYWNybyBn ZW5lcmF0ZXMgYSBkaXZpZGUgYnkgemVybyBlcnJvciBvciBhIHplcm8gc2l6ZSBhcnJheSBkZWNs YXJhdGlvbiBpbg0KICB0aGUgcHJlcHJvY2Vzc29yIGlmIHRoZSBzaXplIGlzIGluY29ycmVjdC4g IFRoZXNlIGFyZSBkZWNsYXJlZCBhcyAiZXh0ZXJuIiBzbw0KICB0aGUgc3BhY2UgZm9yIHRoZXNl IGFycmF5cyB3aWxsIG5vdCBiZSBpbiB0aGUgbW9kdWxlcy4NCg0KICBAcGFyYW0gIFRZUEUgIFRo ZSBkYXRlIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mLg0KICBAcGFyYW0gIFNpemUgIFRo ZSBleHBlY3RlZCBzaXplIGZvciB0aGUgVFlQRS4NCg0KKiovDQojZGVmaW5lIFZFUklGWV9TSVpF X09GKFRZUEUsIFNpemUpIGV4dGVybiBVSU5UOCBfVmVyaWZ5U2l6ZW9mIyNUWVBFWyhzaXplb2Yo VFlQRSkgPT0gKFNpemUpKSAvIChzaXplb2YoVFlQRSkgPT0gKFNpemUpKV0NCg0KLy8NCi8vIFZl cmlmeSB0aGF0IFByb2Nlc3NvckJpbmQuaCBwcm9kdWNlZCBVRUZJIERhdGEgVHlwZXMgdGhhdCBh cmUgY29tcGxpYW50IHdpdGgNCi8vIFNlY3Rpb24gMi4zLjEgb2YgdGhlIFVFRkkgMi4zIFNwZWNp ZmljYXRpb24uDQovLw0KVkVSSUZZX1NJWkVfT0YgKEJPT0xFQU4sIDEpOw0KVkVSSUZZX1NJWkVf T0YgKElOVDgsIDEpOw0KVkVSSUZZX1NJWkVfT0YgKFVJTlQ4LCAxKTsNClZFUklGWV9TSVpFX09G IChJTlQxNiwgMik7DQpWRVJJRllfU0laRV9PRiAoVUlOVDE2LCAyKTsNClZFUklGWV9TSVpFX09G IChJTlQzMiwgNCk7DQpWRVJJRllfU0laRV9PRiAoVUlOVDMyLCA0KTsNClZFUklGWV9TSVpFX09G IChJTlQ2NCwgOCk7DQpWRVJJRllfU0laRV9PRiAoVUlOVDY0LCA4KTsNClZFUklGWV9TSVpFX09G IChDSEFSOCwgMSk7DQpWRVJJRllfU0laRV9PRiAoQ0hBUjE2LCAyKTsNCg0KLy8NCi8vIFRoZSBm b2xsb3dpbmcgdGhyZWUgZW51bSB0eXBlcyBhcmUgdXNlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29t cGlsZXINCi8vIGNvbmZpZ3VyYXRpb24gZm9yIGVudW0gdHlwZXMgaXMgY29tcGxpYW50IHdpdGgg U2VjdGlvbiAyLjMuMSBvZiB0aGUgDQovLyBVRUZJIDIuMyBTcGVjaWZpY2F0aW9uLiBUaGVzZSBl bnVtIHR5cGVzIGFuZCBlbnVtIHZhbHVlcyBhcmUgbm90IA0KLy8gaW50ZW5kZWQgdG8gYmUgdXNl ZC4gQSBwcmVmaXggb2YgJ19fJyBpcyB1c2VkIGF2b2lkIGNvbmZsaWN0cyB3aXRoDQovLyBvdGhl ciB0eXBlcy4NCi8vDQp0eXBlZGVmIGVudW0gew0KICBfX1ZlcmlmeVVpbnQ4RW51bVZhbHVlID0g MHhmZg0KfSBfX1ZFUklGWV9VSU5UOF9FTlVNX1NJWkU7DQoNCnR5cGVkZWYgZW51bSB7DQogIF9f VmVyaWZ5VWludDE2RW51bVZhbHVlID0gMHhmZmZmDQp9IF9fVkVSSUZZX1VJTlQxNl9FTlVNX1NJ WkU7DQoNCnR5cGVkZWYgZW51bSB7DQogIF9fVmVyaWZ5VWludDMyRW51bVZhbHVlID0gMHhmZmZm ZmZmZg0KfSBfX1ZFUklGWV9VSU5UMzJfRU5VTV9TSVpFOw0KDQpWRVJJRllfU0laRV9PRiAoX19W RVJJRllfVUlOVDhfRU5VTV9TSVpFLCA0KTsNClZFUklGWV9TSVpFX09GIChfX1ZFUklGWV9VSU5U MTZfRU5VTV9TSVpFLCA0KTsNClZFUklGWV9TSVpFX09GIChfX1ZFUklGWV9VSU5UMzJfRU5VTV9T SVpFLCA0KTsNCg0KDQpNaWtlDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBG cm9tOiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC0NCj4gYm91bmNlc0BsaXN0cy4wMS5v cmddIE9uIEJlaGFsZiBPZiBNYXJ2aW4gSMOkdXNlcg0KPiBTZW50OiBUaHVyc2RheSwgTWFyY2gg MSwgMjAxOCAzOjExIEFNDQo+IFRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgS2lubmV5LCBN aWNoYWVsIEQNCj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzogbGVyc2VrQHJl ZGhhdC5jb207IEdhbywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gU3ViamVj dDogUmU6IFtlZGsyXSBbUEFUQ0ggMS8yXSBNZGVQa2cvQmFzZS5oOiBFbnN1cmUNCj4gc2FmZSBi aXR3aXNlIG9wZXJhdGlvbnMuDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+IEZyb206IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNv bT4NCj4gPiBTZW50OiBUaHVyc2RheSwgTWFyY2ggMSwgMjAxOCAyOjQyIEFNDQo+ID4gVG86IE1h cnZpbiBIw6R1c2VyIDxNYXJ2aW4uSGFldXNlckBvdXRsb29rLmNvbT47IGVkazItDQo+ID4gZGV2 ZWxAbGlzdHMuMDEub3JnOyBLaW5uZXksIE1pY2hhZWwgRA0KPiA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+DQo+ID4gQ2M6IGxlcnNla0ByZWRoYXQuY29tOyBHYW8sIExpbWluZw0KPiA8bGlt aW5nLmdhb0BpbnRlbC5jb20+DQo+ID4gU3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggMS8yXSBN ZGVQa2cvQmFzZS5oOiBFbnN1cmUNCj4gc2FmZSBiaXR3aXNlDQo+ID4gb3BlcmF0aW9ucy4NCj4g Pg0KPiA+IEhpIE1hcnZpbiwNCj4gPg0KPiA+IFllcy4gIEkgaGF2ZSBiZWVuIHJlYWRpbmcgdGhl IHRocmVhZC4NCj4gPg0KPiA+IExvdHMgb2YgcmVhbGx5IGdvb2QgYW5hbHlzaXMuDQo+ID4NCj4g PiBIb3dldmVyLCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIG1lIHRvIGFkZCAndScgdG8NCj4g dGhlIHNtYWxsZXIgQklUeHgsDQo+ID4gQkFTRXh4LCBhbmQgU0laRXh4IG1hY3JvcyBpZiB3ZSBo YXZlIGNvbnN0YW50cyBpbg0KPiBvdGhlciBwbGFjZXMgdGhhdCBkbyBub3QNCj4gPiBhZGQgdGhl ICd1Jy4gSSB0aGluayB0aGlzIHBhdGNoIG1heSBpbmNyZWFzZSB0aGUNCj4gaW5jb25zaXN0ZW5j eSBvZiB0aGUgd2hvbGUNCj4gPiB0cmVlLg0KPiANCj4gQmFzaWNhbGx5IGFwcGx5aW5nIHRoaXMg dG8gdGhlIEJJVCBkZWZpbml0aW9ucyBmaXJzdA0KPiB3YXMgdG8gc2VlIHdoZXRoZXIgdGhlIGNv bmNlcHQgaXMgcGVyY2VwdGVkIGFzIGEgd2hvbGUuDQo+IE9mIGNvdXJzZSB0aGlzIHNob3VsZCBi ZSBhcHBsaWVkIHRvIGFsbCBkZWZpbml0aW9ucw0KPiB0aGF0IGFyZSBhdCBzb21lIHBvaW50IHVz ZWQgYXMgYSBtYXNrLCB3aGljaCBJDQo+IGNvbnRpbnVlZCB0byBkbyBsb2NhbGx5Lg0KPiANCj4g Pg0KPiA+IElmIHdlIGRvbuKAmXQgbWFrZSB0aGlzIGNoYW5nZSwgd2hhdCB0eXBlcyBvZiBpc3N1 ZXMgZG8NCj4gd2UgbmVlZCB0byBmaXggYW5kDQo+ID4gd2hhdCB3b3VsZCB0aGUgZml4IGVudGFp bD8NCj4gDQo+IFRvIGJlIGhvbmVzdCwgYWN0dWFsIGlzc3VlcyBhcmUgdmVyeSB1bmxpa2VseSB0 byBoYXBwZW4NCj4gYXMgYWxsIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZp Y2F0aW9uIHVzZQ0KPiB0d28tY29tcGxlbWVudHMgZm9yIG5lZ2F0aXZlIHZhbHVlcy4NCj4gRnVy dGhlcm1vcmUsIGFsbCBjdXJyZW50bHkgc3VwcG9ydGVkIGNvbXBpbGVycw0KPiBpbXBsZW1lbnQg Yml0d2lzZSBvcGVyYXRpb25zIGZvciBzaWduZWQgaW50ZWdlcnMNCj4gc2VlbWluZ2x5IHRoZSBz YW1lIHdheSBhcyBmb3IgdW5zaWduZWQgdHlwZXMuDQo+IEhvd2V2ZXIsIGlmIGVpdGhlciB3aWxs IGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBjb2RlIHdpbGwNCj4gc2lsZW50bHkgYnJlYWsgYXMgaW4g bWFueSBtYXNrIG9wZXJhdGlvbnMgd2lsbCByZXR1cm4NCj4gdmFsdWVzIG5vdCBpbnRlbmRlZCBi eSB0aGUgY29kZS4NCj4gDQo+IElmIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIHNvbHV0 aW9uIGNvbmNlcHRzDQo+IHByZXZpb3VzbHkgZGlzY3Vzc2VkLCBJIHByb3Bvc2UgYXMgbGVhc3Qg YSBVbml0IFRlc3QgdG8NCj4gdmVyaWZ5IHRoZSBvcGVyYXRpb25zIHVzZWQgaW4gcHJheGlzIHdv cmsgb3V0IGZpbmUuDQo+IA0KPiBUaGFua3MsDQo+IE1hcnZpbi4NCj4gDQo+ID4NCj4gPiBNaWtl DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBNYXJ2 aW4gSMOkdXNlcg0KPiBbbWFpbHRvOk1hcnZpbi5IYWV1c2VyQG91dGxvb2suY29tXQ0KPiA+ID4g U2VudDogV2VkbmVzZGF5LCBGZWJydWFyeSAyOCwgMjAxOCAxMDo1MiBBTQ0KPiA+ID4gVG86IGVk azItZGV2ZWxAbGlzdHMuMDEub3JnOyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4gPG1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IGxlcnNla0ByZWRoYXQuY29tOyBHYW8sIExp bWluZw0KPiA+ID4gPGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiA+ID4gU3ViamVjdDogUkU6IFtl ZGsyXSBbUEFUQ0ggMS8yXSBNZGVQa2cvQmFzZS5oOg0KPiBFbnN1cmUgc2FmZSBiaXR3aXNlDQo+ ID4gPiBvcGVyYXRpb25zLg0KPiA+ID4NCj4gPiA+IEhleSBNaWtlLA0KPiA+ID4NCj4gPiA+IFlv dSBhcmUgcmlnaHQsIHRoZSBwYXRjaCB3YXMgcHJlbWF0dXJlIGJlY2F1c2UgSQ0KPiBkaWQgbm90 IGNvbnNpZGVyIGFueQ0KPiA+ID4gJ2luY29ycmVjdCcgb3IgJ2NsZXZlcicgdXNhZ2VzIG9mIHRo ZXNlDQo+IGRlZmluaXRpb25zLg0KPiA+ID4gVGhlIHByb2JsZW0gaXMgbm90IHByaW1hcmlseSB1 bmRlZmluZWQgYmVoYXZpb3IsDQo+IGJ1dA0KPiA+ID4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBi ZWhhdmlvci4NCj4gPiA+IEFueSBiaXR3aXNlIG9wZXJhdGlvbiB0byBhIHNpZ25lZCBpbnRlZ2Vy IHJlc3VsdHMNCj4gaW4NCj4gPiA+IGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3IsIHdo aWNoIGNvbXBpbGVycw0KPiB1c3VhbGx5IGRvIG5vdCB3YXJuDQo+ID4gPiBhYm91dCwgd2hpbGUg d2VsbC1kZWZpbmVkIGJlaGF2aW9yIGlzIGRlc2lyYWJsZS4NCj4gPiA+DQo+ID4gPiBIYXZlIHlv dSByZWFkIExhc3psbydzIGNvbW1lbnRzPyBUaGV5IGFyZSBxdWl0ZQ0KPiBnb29kIGF0IHNob3dp bmcgdXANCj4gPiA+IHdoYXQgbG9naWNzIG1pZ2h0IGJlIGFuZCBhcmUgcmVsaWVkIG9uLCB3aGlj aA0KPiBob3dldmVyIGFyZSBub3QNCj4gPiA+IGd1YXJhbnRlZWQgdG8gYmUgdGhlIGNhc2UgZm9y DQo+ID4gPiBub24teDg2IGFyY2hpdGVjdHVyZXMsDQo+ID4gPiBvciBldmVuIGZvciB4ODYgaW4g Y2FzZSBhIGRldmVsb3BtZW50IHRlYW0gZGVjaWRlcw0KPiB0byBjaGFuZ2UgdGhpcw0KPiA+ID4g YmVoYXZpb3Igc29tZSBkYXkgb3IgYSBuZXcgdG9vbGNoYWluIG5vdCBoYXZpbmcNCj4gYWRvcHRl ZCB0aGVtIGluIHRoZQ0KPiA+ID4gZmlyc3QgcGxhY2Ugc2hvdWxkIGJlIGFkZGVkLg0KPiA+ID4N Cj4gPiA+IEZ1cnRoZXJtb3JlLCBJIGRvbid0IHRoaW5rIGluY29uc2lzdGVuY3kgYmV0d2Vlbg0K PiB0aGUgZGVmaW5pdGlvbnMNCj4gPiA+IGdlbmVyYWxseSBpcyBkZXNpcmFibGUuDQo+ID4gPg0K PiA+ID4gVGhhbmtzLA0KPiA+ID4gTWFydmluLg0KPiA+ID4NCj4gPiA+ID4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gRnJvbTogS2lubmV5LCBNaWNoYWVsIEQNCj4gPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+ID4gPiBTZW50OiBXZWRuZXNkYXksIEZlYnJ1YXJ5 IDI4LCAyMDE4IDc6MzcgUE0NCj4gPiA+ID4gVG86IE1hcnZpbiBIw6R1c2VyIDxNYXJ2aW4uSGFl dXNlckBvdXRsb29rLmNvbT47DQo+IGVkazItDQo+ID4gPiA+IGRldmVsQGxpc3RzLjAxLm9yZzsg TGFzemxvIEVyc2VrDQo+IDxsZXJzZWtAcmVkaGF0LmNvbT47DQo+ID4gPiBLaW5uZXksIE1pY2hh ZWwgRA0KPiA+ID4gPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gPiA+IENjOiBH YW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+ID4gPiA+IFN1YmplY3Q6IFJFOiBb ZWRrMl0gW1BBVENIIDEvMl0gTWRlUGtnL0Jhc2UuaDoNCj4gRW5zdXJlDQo+ID4gPiBzYWZlIGJp dHdpc2UNCj4gPiA+ID4gb3BlcmF0aW9ucy4NCj4gPiA+ID4NCj4gPiA+ID4gSGkgTWFydmluLA0K PiA+ID4gPg0KPiA+ID4gPiBJIGRvIG5vdCB0aGluayBhZGQgJ3UnIHRvIHRoZSBCSVR4eCBkZWZp bmVzIGRvZXMNCj4gbm90DQo+ID4gPiBzZWVtIHRvIGJlIGEgY29tcGxldGUNCj4gPiA+ID4gc29s dXRpb24uICBDb2RlIGNhbiB1c2UgaW50ZWdlciBjb25zdGFudHMgaW4gbG90cw0KPiBvZg0KPiA+ ID4gcGxhY2VzIGluY2x1ZGluZyBvdGhlcg0KPiA+ID4gPiAjZGVmaW5lcyBvciBpbmxpbmUgaW4g ZXhwcmVzc2lvbnMuDQo+ID4gPiA+DQo+ID4gPiA+IElmIHdlIGZvbGxvdyB5b3VyIHN1Z2dlc3Rp b24gd291bGRu4oCZdCB3ZSBuZWVkIHRvDQo+IGFkZA0KPiA+ID4gJ3UnIHRvIGV2ZXJ5IGNvbnN0 YW50DQo+ID4gPiA+IHRoYXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhICctJw0KPiA+ID4gPiBhbmQg bWlnaHQgcG90ZW50aWFsbHkgYmUgdXNlZCB3aXRoIGEgYml0DQo+IG9wZXJhdGlvbj8NCj4gPiA+ ID4NCj4gPiA+ID4gQ29tcGlsZXJzIGFyZSBkb2luZyBhIGdvb2Qgam9iIG9mIGZpbmRpbmcNCj4g dW5kZWZpbmVkDQo+ID4gPiBiZWhhdmlvci4gIElzbuKAmXQgdGhhdA0KPiA+ID4gPiBzdWZmaWNp ZW50IHRvIGZpeCB0aGUgaXNzdWVzIGlkZW50aWZpZWQ/DQo+ID4gPiA+DQo+ID4gPiA+IE1pa2UN Cj4gPiA+ID4NCj4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ IEZyb206IE1hcnZpbiBIw6R1c2VyDQo+ID4gPiBbbWFpbHRvOk1hcnZpbi5IYWV1c2VyQG91dGxv b2suY29tXQ0KPiA+ID4gPiA+IFNlbnQ6IFdlZG5lc2RheSwgRmVicnVhcnkgMjgsIDIwMTggNjoy MSBBTQ0KPiA+ID4gPiA+IFRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgTGFzemxvIEVyc2Vr DQo+ID4gPiA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gPiA+ID4gQ2M6IEtpbm5leSwgTWljaGFl bCBEDQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47DQo+ID4gPiBHYW8sIExpbWluZw0K PiA+ID4gPiA+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gPiA+ID4gPiBTdWJqZWN0OiBSRTog W2VkazJdIFtQQVRDSCAxLzJdIE1kZVBrZy9CYXNlLmg6DQo+ID4gPiBFbnN1cmUgc2FmZSBiaXR3 aXNlDQo+ID4gPiA+ID4gb3BlcmF0aW9ucy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEhleSBMYXN6 bG8sDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJIGN1dCB5b3VyIHJhbnQgYmVjYXVzZSBpdCBpcyBu b3Qgc3RyaWN0bHkNCj4gcmVsYXRlZA0KPiA+ID4gdG8gdGhpcyBwYXRjaC4NCj4gPiA+ID4gPiBI b3dldmVyLCB0aGFuayB5b3UgZm9yIGNvbXBvc2luZyBpdA0KPiBuZXZlcnRoZWxlc3MNCj4gPiA+ IGJlY2F1c2UgaXQgd2FzIGFuDQo+ID4gPiA+ID4gaW50ZXJlc3RpbmcgcmVhZCENCj4gPiA+ID4g PiBDb21tZW50cyBhcmUgaW5saW5lLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gTWljaGFlbCwgTGlt aW5nLA0KPiA+ID4gPiA+IERvIHlvdSBoYXZlIGFueSBjb21tZW50cyByZWdhcmRpbmcgdGhlDQo+ IGRpc2N1c3Npb24/DQo+ID4gPiA+ID4gVGhhbmtzIGluIGFkdmFuY2UuDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBCZXN0IHJlZ2FyZHMsDQo+ID4gPiA+ID4gTWFydmluLg0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ID4gRnJvbTogTGFz emxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPiA+ID4gPiA+IFNlbnQ6IFdlZG5lc2Rh eSwgRmVicnVhcnkgMjgsIDIwMTggMjo1NyBQTQ0KPiA+ID4gPiA+ID4gVG86IE1hcnZpbiBIw6R1 c2VyDQo+IDxNYXJ2aW4uSGFldXNlckBvdXRsb29rLmNvbT47DQo+ID4gPiBlZGsyLQ0KPiA+ID4g PiA+ID4gZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gPiA+ID4gPiBDYzogbWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb207DQo+ID4gPiBsaW1pbmcuZ2FvQGludGVsLmNvbQ0KPiA+ID4gPiA+ID4gU3Vi amVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMS8yXQ0KPiBNZGVQa2cvQmFzZS5oOg0KPiA+ID4gRW5z dXJlDQo+ID4gPiA+ID4gc2FmZSBiaXR3aXNlDQo+ID4gPiA+ID4gPiBvcGVyYXRpb25zLg0KPiA+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+IE9uIDAyLzI4LzE4IDEyOjQzLCBNYXJ2aW4gSMOkdXNlciB3 cm90ZToNCj4gPiA+ID4gPiBbLi4uXQ0KPiA+ID4gPiA+ID4gPiBhcyBlZGsyIGRvZXMgbm90IHN1 cHBvcnQgdmVuZG9yIGV4dGVuc2lvbnMNCj4gc3VjaA0KPiA+ID4gYXMNCj4gPiA+ID4gPiBfX2lu dDEyOCBhbnl3YXkuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gTm90ICp5ZXQqLCBJIGd1ZXNz IDopIFVFRkkgMi43IGRvZXMgbGlzdA0KPiBVSU5UMTI4DQo+ID4gPiAvDQo+ID4gPiA+ID4gSU5U MTI4LCBpbiB0YWJsZSA1LCAiQ29tbW9uDQo+ID4gPiA+ID4gPiBVRUZJIERhdGEgVHlwZXMiLiBJ IGJlbGlldmUgdGhvc2UgdHlwZWRlZnMNCj4gbWF5DQo+ID4gPiBoYXZlDQo+ID4gPiA+ID4gYmVl biBhZGRlZCBmb3IgUklTQy1WLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gT2ggeWlrZXMsIEkgaGF2 ZSBub3Qgbm90aWNlZCB0aGF0IGJlZm9yZS4NCj4gQmVzaWRlcw0KPiA+ID4gdGhhdCBJIHdvbmRl ciBob3cNCj4gPiA+ID4gPiB0aGF0IHdpbGwgYmUgaW1wbGVtZW50ZWQgYnkgZWRrMiBmb3Igbm9u LSBSSVNDLQ0KPiBWDQo+ID4gPiBwbGF0Zm9ybXMsIG1heWJlIHRoYXQNCj4gPiA+ID4gPiBzaG91 bGQgYmUgY29uc2lkZXJlZD8NCj4gPiA+ID4gPiBBcyByaWRpY3Vsb3VzIGFzIGl0IHNvdW5kcywg bWF5YmUgc29tZSBraW5kIG9mDQo+ID4gPiBVSU5UX01BWCB0eXBlIChub3cNCj4gPiA+ID4gPiBV SU5UNjQsIGxhdGVyIFVJTlQxMjgpIHNob3VsZCBiZSBpbnRyb2R1Y2VkIGFuZA0KPiBhbnkNCj4g PiA+IEJJVCBvciBiaXRtYXNrDQo+ID4gPiA+ID4gZGVmaW5pdGlvbiBiZWluZyBleHBsaWNpdGx5 IGNhc3RlZCB0byB0aGF0Pw0KPiA+ID4gPiA+IEFyZSBCSVQgZGVmaW5pdGlvbnMgb3IgbWFza3Mg b2NjYXNpb25hbGx5IHVzZWQNCj4gaW4NCj4gPiA+IHByZXByb2Nlc3Nvcg0KPiA+ID4gPiA+IG9w ZXJhdGlvbnM/IFRoYXQgbWlnaHQgYnJlYWsgYWZ0ZXIgYWxsLg0KPiA+ID4gPiA+IEFueXdheSwg aWYgdGhhdCBpZGVhIHdvdWxkIGJlIGFwcHJvdmVkLCB0aGVyZQ0KPiA+ID4gcmVhbGx5IHdvdWxk IGhhdmUgdG8gYmUNCj4gPiA+ID4gPiBhIG5vdGUgcmVnYXJkaW5nIHRoaXMgZGVzaWduIGluIHNv bWUgb2YgdGhlDQo+IEVESzINCj4gPiA+IHNwZWNpZmljYXRpb25zLA0KPiA+ID4gPiA+IHByb2Jh Ymx5IEMgQ29kZSBTdHlsZS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFsuLi5dDQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gPiAtMSkgVGhlICd0cnVuY2F0aW5nIGNvbnN0YW50IHZhbHVlJyB3YXJu aW5nDQo+ID4gPiB3b3VsZA0KPiA+ID4gPiA+IHByb2JhYmx5IG5lZWQgdG8gYmUNCj4gPiA+ID4g PiA+ID4gZGlzYWJsZWQgZ2xvYmFsbHksIGhvd2V2ZXIgSSBkb24ndA0KPiB1bmRlcnN0YW5kDQo+ ID4gPiBob3cNCj4gPiA+ID4gPiBhbiBleHBsaWNpdCBjYXN0IGlzDQo+ID4gPiA+ID4gPiA+IGEg cHJvYmxlbSBhbnl3YXkuDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IERpZCBJIG92ZXJs b29rIGFueXRoaW5nIGNvbnRyYSByZWdhcmRpbmcNCj4gdGhhdD8NCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiBIbW1tLi4uIERvIHlvdSB0aGluayBpdCBjb3VsZCBoYXZlIGENCj4gcGVyZm9ybWFu Y2UNCj4gPiA+ID4gPiBpbXBhY3Qgb24gMzItYml0DQo+ID4gPiA+ID4gPiBwbGF0Zm9ybXM/IChJ IGRvbid0IHRoaW5rIHNvLCBhdCBsZWFzdCBub3QgaW4NCj4gPiA+ID4gPiBvcHRpbWl6ZWQgLyBS RUxFQVNFDQo+ID4gPiA+ID4gPiBidWlsZHMuKQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBkb24n dCB0aGluayBhbnkgcHJvcGVyIG9wdGltaXplciB3b3VsZCBub3QNCj4gPiA+IG9wdGltaXplIHRo aXMuIEFmdGVyIGFsbCwNCj4gPiA+ID4gPiBpdCBjYW4gbm90IG9ubHkgZXZhbHVhdGUgdGhlIHZh bHVlIGRpcmVjdGx5IGFuZA0KPiA+ID4gbm90aWNlIHRoYXQgdGhlIHZhbHVlDQo+ID4gPiA+ID4g ZG9lcyBub3QgcmVhY2ggaW50byB0aGUgJ2xvbmcgbG9uZyByYW5nZScsIGJ1dA0KPiBhbHNvDQo+ ID4gPiBjb25zaWRlciB0aGUgdHlwZQ0KPiA+ID4gPiA+IG9mIHRoZSBvdGhlciBvcGVyYW5kLg0K PiA+ID4gPiA+DQo+ID4gPiA+ID4gWy4uLl0NCj4gDQo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fDQo+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+IGVk azItZGV2ZWxAbGlzdHMuMDEub3JnDQo+IGh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlz dGluZm8vZWRrMi1kZXZlbA0K