From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.65; helo=mga03.intel.com; envelope-from=michael.d.kinney@intel.com; receiver=edk2-devel@lists.01.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 D983D21A10960 for ; Wed, 29 Nov 2017 11:20:42 -0800 (PST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Nov 2017 11:25:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,338,1508828400"; d="scan'208";a="7339150" Received: from orsmsx102.amr.corp.intel.com ([10.22.225.129]) by FMSMGA003.fm.intel.com with ESMTP; 29 Nov 2017 11:25:06 -0800 Received: from orsmsx152.amr.corp.intel.com (10.22.226.39) by ORSMSX102.amr.corp.intel.com (10.22.225.129) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 29 Nov 2017 11:25:05 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.80]) by ORSMSX152.amr.corp.intel.com ([169.254.8.218]) with mapi id 14.03.0319.002; Wed, 29 Nov 2017 11:25:06 -0800 From: "Kinney, Michael D" To: Leif Lindholm , Meenakshi Aggarwal , "Gao, Liming" , "Kinney, Michael D" CC: "edk2-devel@lists.01.org" , Ard Biesheuvel Thread-Topic: [edk2] [PATCH 1/1] MdePkg/IoLib: Add support for big-endian MMIO Thread-Index: AQHSJf8g4WbKjSWeTUGVohhhcxe8iqCr++gAgAAQ+YCAADsgAIAAJeEAgjcV3KCABIjHYIAAVAOQgEHVTuCABCXCAP//5yvw Date: Wed, 29 Nov 2017 19:25:05 +0000 Message-ID: References: <1476437615-29534-1-git-send-email-bhupesh.sharma@nxp.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14B49505E@shsmsx102.ccr.corp.intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E16B65D@SHSMSX104.ccr.corp.intel.com> <20171129125114.i3y446ds4qrkohxl@bivouac.eciton.net> In-Reply-To: <20171129125114.i3y446ds4qrkohxl@bivouac.eciton.net> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_IC x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzVjYmJjZGEtODk0NC00N2MxLTg0ZmMtNzg3NjA4YzMxYmE3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJGXC9ibHc3OE5sdU5sMEVrK0JGU1VcL01aSmgyb2JBV3RRSkZJaHMzaG42V2JQajdTZzNiVzFRWEl4NzZtYTlHVlcifQ== dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Subject: Re: [PATCH 1/1] MdePkg/IoLib: Add support for big-endian MMIO 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, 29 Nov 2017 19:20:43 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGVpZiwNCg0KSSBhZ3JlZSB0aGF0IHRoaXMgc2hvdWxkIGJlIGRlc2NyaWJlZCBhcyBieXRlIHN3 YXBwaW5nLg0KDQpXaGF0IGFib3V0IGEgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYWNjZXNzIEhXIHdp dGggYW5kDQp3aXRob3V0IHRoZSBieXRlcyBzd2FwcGVkPyAgSXQgZ2V0cyBtb3JlIGNvbXBsZXgg aWYgYQ0KbW9kdWxlIGlzIGxpbmtlZCBhZ2FpbnN0IHNldmVyYWwgbGlicyBhbmQgc29tZSBsaWJz DQphY2Nlc3MgSFcgd2l0aCBieXRlcyBzd2FwcGVkIGFuZCBzb21lIGRvIG5vdC4NCg0KVGhhbmtz LA0KDQpNaWtlDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZWRrMi1k ZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtDQo+IGJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiBCZWhh bGYgT2YgTGVpZiBMaW5kaG9sbQ0KPiBTZW50OiBXZWRuZXNkYXksIE5vdmVtYmVyIDI5LCAyMDE3 IDQ6NTEgQU0NCj4gVG86IE1lZW5ha3NoaSBBZ2dhcndhbCA8bWVlbmFrc2hpLmFnZ2Fyd2FsQG54 cC5jb20+Ow0KPiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+IENjOiBLaW5u ZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Ow0KPiBlZGsyLWRldmVs QGxpc3RzLjAxLm9yZzsgQXJkIEJpZXNoZXV2ZWwNCj4gPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5v cmc+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIDEvMV0gTWRlUGtnL0lvTGliOiBBZGQN Cj4gc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBNTUlPDQo+IA0KPiBIaSBNZWVuYWtzaGksDQo+IA0K PiBJIGZpbmFsbHkgZ290IGFyb3VuZCB0byBsb29raW5nIGF0IHRoZSB3YXRjaGRvZyBjb2RlDQo+ ICh0aGF0IHVzZXMgdGhpcw0KPiBsaWJyYXJ5KSwgYW5kIHRoYXQgaGFzIGNvbnZpbmNlZCBtZSB0 aGUgYmVzdCBzb2x1dGlvbg0KPiBpcyB0byBkbyB3aGF0DQo+IExpbWluZyBwcm9wb3NlZC4NCj4g DQo+IExvb2tpbmcgYXQgdGhpcyBzbmlwcGV0Og0KPiANCj4gPiArU1RBVElDDQo+ID4gK1VJTlQx Ng0KPiA+ICtFRklBUEkNCj4gPiArV2RvZ1JlYWQgKA0KPiA+ICsgwqBJTiDCoFVJTlROIMKgIMKg IEFkZHJlc3MNCj4gPiArIMKgKQ0KPiA+ICt7DQo+ID4gKyDCoGlmIChGaXhlZFBjZEdldEJvb2wg KFBjZFdkb2dCaWdFbmRpYW4pKSB7DQo+ID4gKyDCoCDCoHJldHVybiBCZU1taW9SZWFkMTYgKEFk ZHJlc3MpOw0KPiA+ICsgwqB9IGVsc2Ugew0KPiA+ICsgwqAgwqByZXR1cm4gTW1pb1JlYWQxNihB ZGRyZXNzKTsNCj4gPiArIMKgfQ0KPiANCj4gVGhpcyBpcyBhY3R1YWxseSBhIHByZXR0eSBnb29k IGRlbW9uc3RyYXRpb24gb2YgdGhlDQo+IGFyZ3VtZW50cyB0aGF0DQo+IHdlcmUgbWFkZSB3aXRo IHJlZ2FyZHMgdG8gaG93IHRoZSBCZUlvTGliIGNvdWxkIGJlIGp1c3QNCj4gYW5vdGhlcg0KPiBp bXBsZW1lbnRhdGlvbiBvZiBJb0xpYi4NCj4gDQo+IFlvdSB3b3VsZCB0aGVuIGp1c3QgZG8gKGlu IHlvdXIgLmRzYyk6DQo+IMKgIFBsYXRmb3JtL05YUC9Ecml2ZXJzL1dhdGNoRG9nL1dhdGNoRG9n RHhlLmluZiB7DQo+IMKgIMKgIElvTGlifDxwYXRoIHRvIEJlSW9MaWIgLmluZj4NCj4gwqAgfQ0K PiANCj4gVGhpcyBjYXVzZXMgdGhlIGJpZy1lbmRpYW4gdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB0 byBiZQ0KPiB1c2VkIGZvciB0aGlzDQo+IGNvbXBvbmVudC4gVGhpcyBtYWtlcyB0aGVzZSBXZG9n PGFjY2Vzcz4gZnVuY3Rpb25zIGFuZA0KPiB0aGUgUGNkDQo+IHJlZHVuZGFudCwgYW5kIHRoZSBy ZXN0IG9mIHRoZSBjb2RlIGNhbiB1c2UNCj4gTW1pb1JlYWQxNigpL01taW9Xcml0ZTE2KCkNCj4g ZGlyZWN0bHkuDQo+IA0KPiBCdXQgdGhlbiwgaXQgaXMgbm90IHJlYWxseSBhIGJpZy1lbmRpYW4g b3IgbGl0dGUtZW5kaWFuDQo+IHZlcnNpb24gb2YgdGhlDQo+IGxpYnJhcnkgd2UgbmVlZC4gV2Ug YWx3YXlzIGtub3cgd2hpY2ggZW5kaWFubmVzcyB3ZSBhcmUNCj4gYnVpbGRpbmcgZm9yLg0KPiBX aGF0IHdlIG5lZWQgaXMgYSBieXRlc3dhcHBpbmcgZmxhdm91ciBvZiBJb0xpYi4NCj4gDQo+IFNv IExpbWluZywgd2hhdCBpZiB3ZSBkbyBzb21ldGhpbmcgbGlrZSBhZGRpbmcgYQ0KPiBNZGVQa2cv TGlicmFyeS9CYXNlSW9MaWJJbnRyaW5zaWMvQmFzZUlvTGliSW50cmluc2ljU3dhDQo+IHAuaW5m DQo+IC0tLQ0KPiBbRGVmaW5lc10NCj4gICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAg PSAweDAwMDEwMDFBDQo+ICAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0NCj4gQmFz ZUlvTGliSW50cmluc2ljU3dhcA0KPiAgIE1PRFVMRV9VTklfRklMRSAgICAgICAgICAgICAgICA9 DQo+IEJhc2VJb0xpYkludHJpbnNpYy51bmkNCj4gICBGSUxFX0dVSUQgICAgICAgICAgICAgICAg ICAgICAgPSBkNGE2MGQ0NC0zNjg4LTRhNTAtDQo+IGIyZDAtNWM2ZmMyNDIyNTIzDQo+ICAgTU9E VUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gQkFTRQ0KPiAgIFZFUlNJT05fU1RSSU5HICAg ICAgICAgICAgICAgICA9IDEuMA0KPiAgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9 IElvTGliDQo+IA0KPiANCj4gIw0KPiAjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9 IElBMzIgWDY0IEVCQyBJUEYgQVJNDQo+IEFBUkNINjQNCj4gIw0KPiANCj4gW1NvdXJjZXNdDQo+ ICAgQmFzZUlvTGliSW50cmluc2ljSW50ZXJuYWwuaA0KPiAgIElvSGlnaExldmVsLmMNCj4gICBJ b0xpYi5jDQo+ICAgSW9MaWJFYmMuYyAgICAgICAgICMgQXNzZXJ0cyBvbiBhbGwgaS9vIHBvcnQg YWNjZXNzZXMNCj4gICBJb0xpYk1taW9CdWZmZXIuYw0KPiANCj4gW1BhY2thZ2VzXQ0KPiAgIE1k ZVBrZy9NZGVQa2cuZGVjDQo+IA0KPiBbTGlicmFyeUNsYXNzZXNdDQo+ICAgRGVidWdMaWINCj4g ICBCYXNlTGliDQo+IA0KPiBbQnVpbGRPcHRpb25zXQ0KPiAgIEdDQzoqXypfKl9DQ19GTEFHUyAg PSAtRFNXQVBfQllURVMNCj4gLS0tDQo+IA0KPiBBbmQgdGhlbiBhZGQNCj4gDQo+ICNpZmRlZiBT V0FQX0JZVEVTDQo+ICAgcmV0dXJuIFN3YXBCeXRlc1hYIChWYWx1ZSk7DQo+ICNlbHNlDQo+ICAg cmV0dXJuIFZhbHVlOw0KPiAjZmkNCj4gDQo+IGZvciB0aGUgcmVhZCBvcGVyYXRpb25zIGFuZA0K PiANCj4gI2lmZGVmIFNXQVBfQllURVMNCj4gICAqKHR5cGUpQWRkcmVzcyA9IFN3YXBCeXRlc1hY IChWYWx1ZSk7DQo+ICNlbHNlDQo+ICAgKih0eXBlKUFkZHJlc3MgPSBWYWx1ZTsNCj4gI2ZpDQo+ IA0KPiBmb3IgdGhlIHdyaXRlIG9wZXJhdGlvbnMgaW4gSW9MaWIuYz8NCj4gDQo+IC8NCj4gICAg IExlaWYNCj4gDQo+IE9uIE1vbiwgTm92IDI3LCAyMDE3IGF0IDA2OjA2OjMzQU0gKzAwMDAsIE1l ZW5ha3NoaQ0KPiBBZ2dhcndhbCB3cm90ZToNCj4gPiBIaSBMZWlmLA0KPiA+DQo+ID4gVGhpcyBp cyByZWdhcmRpbmcgQmlnLUVuZGlhbiBMaWJyYXJ5IHBhdGNoIChbUEFUQ0ggdjINCj4gMS85XQ0K PiA+IFBsYXRmb3JtL05YUDogQWRkIHN1cHBvcnQgZm9yIEJpZyBFbmRpYW4gTW1pbyBBUElzKQ0K PiA+DQo+ID4gV2UgaGF2ZSBzdGFydGVkIHRoaXMgZGlzY3Vzc2lvbiBiZWZvcmUgYW5kIHRoZQ0K PiBzdWdnZXN0aW9uIHdhcyB0bw0KPiA+IGNyZWF0ZSBhIHNlcGFyYXRlIC5pbmYgZmlsZSBrZWVw aW5nIEFQSXMgbmFtZSBzYW1lDQo+ID4gZS5nLiBNbWlvUmVhZC9NbWlvV3JpdGUgaW4gTWRlUGtn Lg0KPiA+DQo+ID4gQnV0IHdlIGNhbid0IGdvIHdpdGggdGhpcyBhcHByb2FjaCAocmVhc29uIG1l bnRpb25lZA0KPiBieSBVZGl0KS4NCj4gPg0KPiA+IFNvIHBsZWFzZSBzdWdnZXN0IGlmIHdlIHNo b3VsZCBrZWVwIHRoaXMgbGlicmFyeQ0KPiB1bmRlciBQbGF0Zm9ybS9OWFANCj4gPiBvciBJIHNl bmQgYSBuZXcgcGF0Y2ggbW92aW5nIHRoaXMgbGlicmFyeSBpbiBNZGVQa2cuDQo+ID4NCj4gPiBC dXQgd2UgaGF2ZSB0byBrZWVwIGEgZGlmZmVyZW50IG5hbWUgZm9yIEJpZyBFbmRpYW4NCj4gTU1J TyBBUElzLg0KPiA+DQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gTWVlbmFrc2hpDQo+ID4NCj4gPg0K PiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFVkaXQgS3VtYXIN Cj4gPiA+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAyMywgMjAxNyAxMjozOCBQTQ0KPiA+ID4gVG86 IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IE1lZW5ha3NoaQ0KPiBBZ2dhcndh bA0KPiA+ID4gPG1lZW5ha3NoaS5hZ2dhcndhbEBueHAuY29tPjsgQXJkIEJpZXNoZXV2ZWwNCj4g PiA+IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPjsgS2lubmV5LCBNaWNoYWVsIEQNCj4gPiA+ IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IGVkazItDQo+IGRldmVsQGxpc3RzLjAxLm9y Zw0KPiA+ID4gU3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6IEFk ZA0KPiBzdXBwb3J0IGZvciBiaWctZW5kaWFuDQo+ID4gPiBNTUlPDQo+ID4gPg0KPiA+ID4gSGkg TWVlbmFrc2hpL0xpbWluZywNCj4gPiA+IE15IDIgY2VudHMsIGFyb3VuZCB0aGlzLg0KPiA+ID4N Cj4gPiA+IDEpDQo+ID4gPiBIYXZpbmcgYSBuZXcgbGliIGZvciBCRSByZWFkIG1pZ2h0IG5vdCBi ZSBoZWxwZnVsDQo+IGZvciB1cywgZS5nLiBhIElQIHdoaWNoIGlzIGluDQo+ID4gPiBCRSBtb2Rl IGFjY2VzcyB0aGUgVUFSVCBmb3IgcHJpbnQgb3Igc3lzdGVtDQo+IHJlZ2lzdGVycyB3aGljaCBh cmUgaW4gTEUsIHRoZW4NCj4gPiA+IHdpdGggbmV3IExpYiwgd2Ugd2lsbCBnZXQgYWxsIHJlYWQv d3JpdGUgaW4gQkUgbW9kZQ0KPiA+ID4NCj4gPiA+IDIpDQo+ID4gPiBFc3BlY2lhbGx5IGZvciBv dXIgSVBzLCB3aGljaCBhcmUgY2hhbmdpbmcgZnJvbSBCRQ0KPiB0byBMRSBkZXBlbmRpbmcgb24N Cj4gPiA+IHBsYXRmb3JtLg0KPiA+ID4gQXMgc2FpZCBiZWZvcmUsIGhhdmluZyBCRSByZWFkIGxp YiB3aXRoIEFQSSBuYW1lIG9mDQo+IE1taW9SZWFkMzIgZXRjLCB3aWxsIG5vdA0KPiA+ID4gaGVs cCAoSSBndWVzcyBNZWVuYWtzaGkgYWxyZWFkeSBzZWVuIHNvbWUgcHJvYmxlbXMNCj4gYXJvdW5k IHRoaXMpIEFkZGluZyBhDQo+ID4gPiBuZXcgbGliIHdpdGggTW1pb1JlYWQzMkJFIEFQSSBuYW1l IGNvdWxkIGhlbHAsIGJ1dA0KPiBJUCBkcml2ZXIgd2UgbmVlZCB0bw0KPiA+ID4gdGFrZSBjYXJl IG9mIElQIG1vZGUgZWl0aGVyIGJ5IFBjZCBvciAjZGVmaW5lLCB0bw0KPiBzZWxlY3QgTW1pb1Jl YWQzMiBvcg0KPiA+ID4gTW1pb1JlYWQzMkJFLg0KPiA+ID4gVGhpcyBjb25kaXRpb25hbCBjb21w aWxlIG5lZWRzIHRvIGJlIGRvbmUgZm9yIGFsbA0KPiBJUHMgKHdoaWNoIHdvcmtzIGluIEJFL0xF DQo+ID4gPiBtb2RlIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMpLg0KPiA+ID4NCj4gPiA+IE15IHBy ZWZlcnJlZCB3YXkgb2YgaW1wbGVtZW50YXRpb24gdG8gdXNlIG9uZQ0KPiBmdW5jdGlvbiBpbiBJ UCBkcml2ZXIsIEFuZA0KPiA+ID4gYmFzZWQgb24gSVAgbW9kZSwgZG8gdGhlIHN3aXRjaC4NCj4g PiA+DQo+ID4gPiBOZXcgTGliIGNvdWxkIGhhdmUgZnVuY3Rpb24gbGlrZSBiZWxvdw0KPiA+ID4g TW1pb1JlYWQzMkdlbmVyaWMoSU4gIFVJTlROICAgICBBZGRyZXNzLCBCT09MDQo+IElzSVBCRSkg ew0KPiA+ID4gICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlOw0KPiA+ ID4NCj4gPiA+ICAgIEFTU0VSVCAoKEFkZHJlc3MgJiAzKSA9PSAwKTsNCj4gPiA+ICAgIFZhbHVl ID0gKih2b2xhdGlsZSBVSU5UMzIqKUFkZHJlc3M7DQo+ID4gPiAgICBJZihJc0lQQkUpDQo+ID4g PiAgICAgIFZhbHVlID0gU3dhcEJ5dGVzMzIoVmFsdWUpOw0KPiA+ID4gIHJldHVybiAgVmFsdWU7 DQo+ID4gPiB9DQo+ID4gPg0KPiA+ID4gQW5kIElQIGRyaXZlciBjYW4gdXNlIGl0DQo+ID4gPiBN bWlvUmVhZDMyR2VuZXJpYyhBRERSLA0KPiA+ID4gRml4ZWRQY2RHZXQoVGhpc19JUF9Nb2RlX0Zv cl9UaGlzX3BsYXRmb3JtKQ0KPiA+ID4NCj4gPiA+IENvbW1lbnRzIGFyZSB3ZWxjb21lLg0KPiA+ ID4NCj4gPiA+IFJlZ2FyZHMNCj4gPiA+IFVkaXQNCj4gPiA+DQo+ID4gPiA+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRl dmVsLQ0KPiBib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmIE9mDQo+ID4gPiA+IEdhbywg TGltaW5nDQo+ID4gPiA+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxNiwgMjAxNyA4OjQ4IEFNDQo+ ID4gPiA+IFRvOiBNZWVuYWtzaGkgQWdnYXJ3YWwNCj4gPG1lZW5ha3NoaS5hZ2dhcndhbEBueHAu Y29tPjsgQXJkIEJpZXNoZXV2ZWwNCj4gPiA+ID4gPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+ OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4gPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ OyBlZGsyLQ0KPiBkZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+ID4gU3ViamVjdDogUmU6IFtlZGsy XSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6IEFkZA0KPiBzdXBwb3J0IGZvcg0KPiA+ID4gPiBi aWctZW5kaWFuIE1NSU8NCj4gPiA+ID4NCj4gPiA+ID4gTWVlbmFrc2hpOg0KPiA+ID4gPiAgIEkg c3VnZ2VzdCB0byBpbnRyb2R1Y2UgbmV3IElvTGliIGxpYnJhcnkNCj4gaW5zdGFuY2UsIG5vdCB0 byBhZGQgbmV3IElvTGliDQo+ID4gPiBBUElzLg0KPiA+ID4gPiBOZXcgSW9MaWIgbGlicmFyeSBp bnN0YW5jZSB3aWxsIHBlcmZvcm0gSU8NCj4gb3BlcmF0aW9uIGFzIHRoZSBiaWcNCj4gPiA+ID4g ZW5kaWFuLiBZb3UgY2FuIHVwZGF0ZQ0KPiBNZGVQa2cvTGlicmFyeS9CYXNlSW9MaWJJbnRyaW5z aWMgaW5zdGFuY2UsIGFkZA0KPiA+ID4gPiBuZXcgc291cmNlIGZpbGUgYW5kIG5ldyBJTkYgZm9y IGl0Lg0KPiA+ID4gPg0KPiA+ID4gPiBVSU5UMzINCj4gPiA+ID4gRUZJQVBJDQo+ID4gPiA+IE1t aW9SZWFkMzIgKA0KPiA+ID4gPiAgIElOICBVSU5UTiAgICAgQWRkcmVzcw0KPiA+ID4gPiAgICkN Cj4gPiA+ID4gew0KPiA+ID4gPiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICBW YWx1ZTsNCj4gPiA+ID4NCj4gPiA+ID4gICBBU1NFUlQgKChBZGRyZXNzICYgMykgPT0gMCk7DQo+ ID4gPiA+ICAgVmFsdWUgPSAqKHZvbGF0aWxlIFVJTlQzMiopQWRkcmVzczsNCj4gPiA+ID4gICBy ZXR1cm4gU3dhcEJ5dGVzMzIoVmFsdWUpOw0KPiA+ID4gPiB9DQo+ID4gPiA+DQo+ID4gPiA+IFRo YW5rcw0KPiA+ID4gPiBMaW1pbmcNCj4gPiA+ID4gPi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4gPiA+ID5Gcm9tOiBNZWVuYWtzaGkgQWdnYXJ3YWwNCj4gW21haWx0bzptZWVuYWtzaGku YWdnYXJ3YWxAbnhwLmNvbV0NCj4gPiA+ID4gPlNlbnQ6IEZyaWRheSwgT2N0b2JlciAxMywgMjAx NyAyOjA3IFBNDQo+ID4gPiA+ID5UbzogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxp bmFyby5vcmc+Ow0KPiBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4gPiA+PG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPjsgZWRrMi0NCj4gZGV2ZWxAbGlzdHMuMDEub3JnOyBHYW8sIExpbWluZw0K PiA+ID4gPiA+PGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiA+ID4gPiA+U3ViamVjdDogUkU6IFtl ZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6DQo+IEFkZCBzdXBwb3J0IGZvcg0KPiA+ID4g PiA+YmlnLWVuZGlhbiBNTUlPDQo+ID4gPiA+ID4NCj4gPiA+ID4gPkhpIEFsbCwNCj4gPiA+ID4g Pg0KPiA+ID4gPiA+DQo+ID4gPiA+ID5JdOKAmXMgYSBwcmV0dHkgb2xkIGRpc2N1c3Npb24sIHdl IGhhdmUgbGVmdCB0aGUNCj4gdXBzdHJlYW1pbmcgb2YgTlhQDQo+ID4gPiA+ID5wYWNrYWdlIGlu IGJldHdlZW4gYmVjYXVzZSBvZiBzb21lIG90aGVyIHdvcmssDQo+IGJ1dCBoYXZlIHN0YXJ0ZWQg aXQNCj4gPiA+ID4gPmFnYWluDQo+ID4gPiA+IG5vdy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID5Jc3N1ZSAgOiBGZXcgTlhQIG1vZHVsZXMgc3VwcG9ydCBCaWcgRW5kaWFuDQo+IE1N SU9zIGFzIHRoZXNlIGFyZSBwb3J0ZWQNCj4gPiA+ID4gPmZyb20gUG93ZXJQQy4NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+U29sdXRpb24gc3VnZ2VzdGVkIDogQ3JlYXRlIGEgc2VwYXJhdGUgbGlicmFy eQ0KPiBmb3IgQkUgTU1JTyBBUElzLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPlNv IHdoYXQgSSBoYXZlIGRvbmUgaXMsIEkgaGF2ZSBjcmVhdGVkIGENCj4gc2VwYXJhdGUgbGlicmFy eSB0byBzdXBwb3J0DQo+ID4gPiA+ID5CRSBNTUlPIEFQSXMgYW5kIGN1cnJlbnRseSBrZWVwaW5n IGl0IHRvIG15DQo+IHBhY2thZ2UuDQo+ID4gPiA+ID5UaGlzIGxpYnJhcnkgaXMgYmFzaWNhbGx5 IGEgd3JhcHBlciBvdmVyDQo+IGV4aXN0aW5nIE1NSU8gQVBJcy4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+VUlOVDMyDQo+ID4gPiA+ID5FRklBUEkNCj4gPiA+ID4gPkJlTW1pb1JlYWQzMiAoDQo+ID4g PiA+ID4gIElOICBVSU5UTiAgICAgQWRkcmVzcw0KPiA+ID4gPiA+ICApDQo+ID4gPiA+ID57DQo+ ID4gPiA+ID4gIFVJTlQzMiAgVmFsdWU7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgVmFsdWUgPSBN bWlvUmVhZDMyKEFkZHJlc3MpOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHJldHVybiBTd2FwQnl0 ZXMzMihWYWx1ZSk7DQo+ID4gPiA+ID59DQo+ID4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ TmVlZCB5b3VyIG9waW5pb24gb24gYmVsb3cgb3B0aW5vczoNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ MS4gV2lsbCB0aGlzIGJlIGEgZ29vZCBpZGVhIHRvIG1ha2UgdGhpcyBsaWJyYXJ5DQo+IGEgcGFy dCBvZiBNZGVQa2c/IE9SDQo+ID4gPiA+ID4NCj4gPiA+ID4gPjIuIEFkZCBhIG5ldyBmaWxlIGUu Zy4gSW9CZU1taW8uYyBsaWtlDQo+IElvSGlnaExldmVsLmMgaW4NCj4gPiA+ID4gPk1kZVBrZy9M aWJyYXJ5L0Jhc2VJb0xpYkludHJpbnNpYy8NCj4gPiA+ID4gPiBBbmQgbWFkZSB0aGVzZSBBUElz IGEgcGFydCBvZiBJb0xpYiBpdHNlbGYuIE9SDQo+ID4gPiA+ID4NCj4gPiA+ID4gPjMuIEtlZXAg dGhpcyBsaWJyYXJ5IGludGVybmFsIHRvIE5YUCBwYWNrYWdlLg0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4NCj4gPiA+ID4gPlBsZWFzZSBwcm92aWRlIHlvdXIgaW5wdXRzLg0KPiA+ID4gPiA+DQo+ID4g PiA+ID4NCj4gPiA+ID4gPlRoYW5rcyAmIFJlZ2FyZHMsDQo+ID4gPiA+ID5NZWVuYWtzaGkNCj4g PiA+ID4gPg0KPiA+ID4gPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+ PiBGcm9tOiBCaHVwZXNoIFNoYXJtYQ0KPiA+ID4gPiA+PiBTZW50OiBNb25kYXksIE9jdG9iZXIg MTcsIDIwMTYgMzoyOCBQTQ0KPiA+ID4gPiA+PiBUbzogQXJkIEJpZXNoZXV2ZWwNCj4gPGFyZC5i aWVzaGV1dmVsQGxpbmFyby5vcmc+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4gPiA+PiA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gPiA+ID4+IENjOiBHYW8sIExpbWluZyA8bGlt aW5nLmdhb0BpbnRlbC5jb20+OyBlZGsyLQ0KPiBkZXZlbEBtbDAxLjAxLm9yZzsNCj4gPiA+ID4g Pj4gTWVlbmFrc2hpIEFnZ2Fyd2FsDQo+IDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhwLmNvbT4NCj4g PiA+ID4gPj4gU3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6DQo+ IEFkZCBzdXBwb3J0IGZvcg0KPiA+ID4gPiA+PiBiaWctZW5kaWFuIE1NSU8NCj4gPiA+ID4gPj4N Cj4gPiA+ID4gPj4gSGkgQXJkLA0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiA+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4+ID4gRnJvbTogQXJkIEJpZXNoZXV2ZWwNCj4gW21h aWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiA+ID4gPiA+PiA+IFNlbnQ6IE1vbmRh eSwgT2N0b2JlciAxNywgMjAxNiAxOjEyIFBNDQo+ID4gPiA+ID4+ID4gVG86IEtpbm5leSwgTWlj aGFlbCBEDQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiA+ID4gPj4gPiBDYzog R2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsNCj4gQmh1cGVzaCBTaGFybWENCj4g PiA+ID4gPj4gPiA8Ymh1cGVzaC5zaGFybWFAbnhwLmNvbT47IGVkazItDQo+IGRldmVsQG1sMDEu MDEub3JnDQo+ID4gPiA+ID4+ID4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMS8xXQ0KPiBN ZGVQa2cvSW9MaWI6IEFkZCBzdXBwb3J0IGZvcg0KPiA+ID4gPiA+PiA+IGJpZy0gZW5kaWFuIE1N SU8NCj4gPiA+ID4gPj4gPg0KPiA+ID4gPiA+PiA+IE9uIDE3IE9jdG9iZXIgMjAxNiBhdCAwNTox MCwgS2lubmV5LCBNaWNoYWVsDQo+IEQNCj4gPiA+ID4gPj4gPiA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+IHdyb3RlOg0KPiA+ID4gPiA+PiA+ID4gQmh1cGVzaCwNCj4gPiA+ID4gPj4gPiA+ DQo+ID4gPiA+ID4+ID4gPiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFkZCBhbiBBUk0gc3BlY2lm aWMNCj4gUENEIHRvIHNlbGVjdA0KPiA+ID4gPiA+PiA+ID4gZW5kaWFubmVzcyBhbmQgdXBkYXRl DQo+ID4gPiA+ID4+ID4gPg0KPiBNZGVQa2cvTGlicmFyeS9CYXNlSW9MaWJJbnRyaW5zaWMvSW9M aWJBcm0uYyB0byB1c2UNCj4gdGhhdCBQQ0QgaW4NCj4gPiA+ID4gPj4gPiA+IE1taW9SZWFkL1dy aXRlKCkgQVBJcyBpbiB0aGF0IGZpbGUgdG8NCj4gc3VwcG9ydCBib3RoIGVuZGlhbiB0eXBlcy4N Cj4gPiA+ID4gPj4gPiA+IFlvdSBjYW4gdXNlIHRoZSBTd2FwQnl0ZXN4eCgpIGZ1bmN0aW9ucw0K PiBmcm9tIEJhc2VMaWIoYXMNCj4gPiA+ID4gPj4gPiBMYXN6bG8NCj4gPiA+ID4gPj4gPiA+IHN1 Z2dlc3RlZCkgYmFzZWQgb24gdGhlIHNldHRpbmcgb2YgdGhpcw0KPiBBUk0gc3BlY2lmaWMgUENE Lg0KPiA+ID4gPiA+PiA+ID4NCj4gPiA+ID4gPj4gPiA+IE1vZHVsZXMgdGhhdCBsaW5rIGFnYWlu c3QgdGhpcyBsaWIgY2FuDQo+IHNlbGVjdCBlbmRpYW5uZXNzIGJ5DQo+ID4gPiA+ID4+ID4gPiBz ZXR0aW5nIFBDRCBpbiB0aGUgc2NvcGUgb2YgdGhhdCBtb2R1bGUuDQo+ID4gPiA+ID4+ID4gPg0K PiA+ID4gPiA+PiA+ID4gVGhlIElQRiB2ZXJzaW9uIG9mIElvTGliIHVzZXMgYW4gSVBGDQo+IHNw ZWNpZmljIFBDRCB0byB0cmFuc2xhdGUNCj4gPiA+ID4gPj4gPiA+IEkvTyBwb3J0IGFjY2Vzc2Vz IHRvIE1NSU8gYWNjZXNzZXMuICBTbw0KPiB0aGVyZSBpcyBhbHJlYWR5IGFuDQo+ID4gPiA+ID4+ ID4gPiBleGFtcGxlIG9mIGFuIGFyY2ggc3BlY2lmaWMgUENEIGluIHRoaXMNCj4gbGliIGluc3Rh bmNlLg0KPiA+ID4gPiA+PiA+ID4NCj4gPiA+ID4gPj4gPg0KPiA+ID4gPiA+PiA+IFRoaXMgaXMg bm90IGEgcGxhdGZvcm0gd2lkZSB0aGluZywgaXQgaXMgYQ0KPiBwZXItZGV2aWNlIHByb3BlcnR5 DQo+ID4gPiA+ID4+ID4gd2hldGhlciB0aGUgTU1JTyBvY2N1cnMgaW4gYmlnIGVuZGlhbiBvcg0K PiBsaXR0bGUgZW5kaWFuIG1hbm5lci4NCj4gPiA+ID4gPj4gPg0KPiA+ID4gPiA+PiA+IFNvIEkg dGhpbmsgTGltaW5nJ3Mgc3VnZ2VzdGlvbiBtYWtlcyBzZW5zZToNCj4gY3JlYXRlIGFuIElvTGli DQo+ID4gPiA+ID4+ID4gaW1wbGVtZW50YXRpb24gdGhhdCBwZXJmb3JtcyB0aGUgYnl0ZQ0KPiBz d2FwcGluZywgYW5kIHNlbGVjdGl2ZWx5DQo+ID4gPiA+ID4+ID4gaW5jb3Jwb3JhdGUgaXQgaW50 byBkcml2ZXJzIHRoYXQgcmVxdWlyZSBpdA0KPiB1c2luZw0KPiA+ID4gPiA+PiA+DQo+ID4gPiA+ ID4+ID4gQmVNbWlvRGV2aWNlRHhlLmluZiB7DQo+ID4gPiA+ID4+ID4gICA8TGlicmFyeUNsYXNz ZXM+DQo+ID4gPiA+ID4+ID4gICAgIElvTGlifFNvbWVQa2cvTGlicmFyeS9CaWdFbmRpYW5Jb0xp Yi5pbmYNCj4gPiA+ID4gPj4gPiB9DQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IFRoYXQncyBjb3Jy ZWN0LiBJIHRoaW5rIGNyZWF0aW5nIGEgc2VwYXJhdGUNCj4gSW9MaWIgZm9yIGJ5dGUtc3dhcHBp bmcNCj4gPiA+ID4gPj4gbWFrZXMgc2Vuc2UuDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IFdlIHdp bGwgcmV3b3JrIHRoZSBwYXRjaCBhY2NvcmRpbmdseS4NCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4g UmVnYXJkcywNCj4gPiA+ID4gPj4gQmh1cGVzaA0KPiA+ID4gPiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+ID4gPiBlZGsyLWRldmVsIG1haWxpbmcg bGlzdA0KPiA+ID4gPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4gPiBodHRwczovL2xp c3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gZWRrMi1kZXZlbCBtYWlsaW5nIGxp c3QNCj4gZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFp bG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=