Return-path: Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:19123 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751377AbbFIH0A (ORCPT ); Tue, 9 Jun 2015 03:26:00 -0400 From: David Lin To: Johannes Berg CC: "linux-wireless@vger.kernel.org" , "Pete Hsieh" , Chor Teck Law Subject: RE: [PATCH] Add new mac80211 driver mwlwifi. Date: Tue, 9 Jun 2015 07:25:54 +0000 Message-ID: <52abf3860d5941869a72b4ecf9c99616@SC-EXCH02.marvell.com> (sfid-20150609_092616_411333_BD0FF823) References: <6d9f23a4a8bf4315b0c7630a9a1c37ad@SC-EXCH02.marvell.com> (sfid-20150604_065726_449748_FA29E81C) <1433598191.2467.65.camel@sipsolutions.net> In-Reply-To: <1433598191.2467.65.camel@sipsolutions.net> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: PiBPbiBTYXR1cmRheSwgSnVuZSAwNiwgMjAxNSA5OjQzIFBNLCBKb2hhbm5lcyBCZXJnIHdyb3Rl OiANCj4NCj4gSGkgRGF2aWQsIGFsbCwNCj4gDQo+IEknbSBub3QgcmVhbGx5IGluIHRoZSBjaGFp biBoZXJlLCBidXQgSSBmaWd1cmVkIEknZCByZXZpZXcgeW91ciBkcml2ZXINCj4gbm9uZXRoZWxl c3MuIEknbGwgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZSB0aGluZ3MsIGJ1dCBm b3Igbm93IGhlcmUncyBhDQo+IGJpdCBvZiBhIHJldmlldyBqdXN0IG9mIHRoZSBjb2RlLg0KPiAN Cj4gQ2FuIHlvdSBwZXJoYXBzIGV4cGxhaW4gaG93IHRoZSBTVEEvQVAgZmlybXdhcmUgc2VwYXJh dGlvbiB3b3Jrcz8gSSd2ZSBub3QNCj4gcmVhbGx5IG1hbmFnZWQgdG8gZmlndXJlIHRoYXQgb3V0 IC0gYWRtaXR0ZWRseSB3aXRoIG5vdCBhbGwgdGhhdCBtdWNoIGVmZm9ydA0KPiB0aG91Z2guDQo+ DQpIaSBKb2hhbm5lcywNCg0KUXVlc3Rpb25zOg0KDQoxLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHdo eSBkb2VzIGEgUENJKGUpIGRyaXZlciBuZWVkIE9GPw0KVGhpcyBkcml2ZXIgd2lsbCBhY2NlcHQg cGFyYW1ldGVycyBpbiBEVFMgZmlsZSBmb3IgYmFuZCBjb250cm9sLCBhbnRlbm5hIHNldHRpbmcg YW5kIHBvd2VyIHRhYmxlLCB0byBjYXRlciBmb3IgZGlmZmVyZW50IGJvYXJkcyBjb21iaW5hdGlv biBpbnNpZGUgYSBzeXN0ZW0uDQoyLiBDYW4geW91IHBlcmhhcHMgZXhwbGFpbiBob3cgdGhlIFNU QS9BUCBmaXJtd2FyZSBzZXBhcmF0aW9uIHdvcmtzPw0KRm9yIHRoaXMgZHJpdmVyLCB0aGUgQVAv U1RBIG1vZGUgd2lsbCB1c2UgdGhlIHNhbWUgc2luZ2xlIGZpcm13YXJlIGJpbmFyeSwgc28gdGhl cmUgaXMgbm8g4oCcc2VwYXJhdGlvbuKAnSBwZXIgc2UuIFRoZSBmaXJtd2FyZSB3aWxsIHN1cHBv cnQgQVAvU1RBIG1vZGUuDQozLiBEb2VzIHRoaXMgZHJpdmVyIGhhcyBhbnkgcmVsYXRpb24gdG8g bXdpZmlleD8NCk13aWZpZXggaXMgZHJpdmVyIGZvciBGaXJtd2FyZS1iYXNlZCBNTE1FLiBJdCBp bnRlcmZhY2VzIHdpdGggZmlybXdhcmUgd2l0aCA4MDIuMyBwYWNrZXRzLiBNd2x3aWZpIGlzIHRo ZSBIb3N0IFNvZnQgQVAvU1RBIGRyaXZlciB0aGF0IHdvcmtzIHdpdGggbWFjODAyMTEuDQoNCkkg d2lsbCBiZSB3b3JraW5nIG9uIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBhcyB5b3Ugc3VnZ2VzdGVk Og0KDQoxLiBSZW1vdmUgbXdsIGZyb20gZmlsZW5hbWUgKG13bF94eHgueCAtPiB4eHgueCkuDQoy LiBSZW1vdmUgY29tbWVudCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvZGUgYmxvY2sgYW5kIHRh a2Ugb2ZmIHN0YXRpYyBmdW5jdGlvbiBwcmUtZGVjbGFyYXRpb24uDQozLiBSZW1vdmUgZmlsZSBk ZWJ1Zy5jIGFuZCBkZWJ1Zy5oLg0KNC4gVHlwbyBlcnJvciwgdW5uZWNlc3NhcnkgY29tbWVudCwg cHJlZmVyIGNvbW1lbnQgc3R5bGUgYW5kIHVzZSBCSVQgTUFDUk8gaW5zdGVhZCBvZiBjb25zdGFu dC4NCjUuIE1vdmUgaXNyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGlzci5jIGFuZCBpc3IuaC4NCjYu IFJlbW92ZSBNQUNSTyBmb3IgU1BJTiBMT0NLIGFuZCBsZXQgc3BpbiBsb2NrIGJlIGF0dGFjaGVk IHRvIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUuDQo3LiBGb3IgZmlybXdhcmUgcmVsYXRlZCBzdHJ1 Y3R1cmUsIHVzZSBfX2xlMTYgZm9yIHUxNiBhbmQgX19sZTMyIGZvciB1MzIuIEFkZCBjb21waWxl ciBjb250cm9sIOKAnC1EX19DSEVDS19FTkRJQU5fX+KAnSB0byBoZWxwIHRvIGNoZWNrIGVuZGlh biBwcm9ibGVtLg0KOC4gRm9yIGZpcm13YXJlIHJlbGF0ZWQgc3RydWN0dXJlLCB0YWtlIG9mZiBi aXQgZmllbGQuDQoNCldlIHJlY29tbWVuZCB0aGF0IHRoZSBmb2xsb3dpbmdzIHNob3VsZCBub3Qg YmUgY2hhbmdlZCBhdCBjdXJyZW50IHN0YWdlOg0KDQoxLiBEaXJlY3RvcnkgbmFtZSDigJxtd2x3 aWZp4oCdLg0KVGhpcyBpcyB0byBiZSBjb25zaXN0ZW50IHdpdGggc29tZSBwcmVkZWNlc3Nvci4g Rm9yIGV4YW1wbGUsIEludGVsIHVzZXMgaXdsd2lmaSwgcmVhbHRlayB1c2VzIHJ0bHdpZmkuIFdl IGRvIG5vdCBzZWUgYSBuZWVkIHRvIGNoYW5nZSBpdC4gVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBr ZWVwIHRoZSBvcmlnaW5hbCBwcm9qZWN0IG13bHdpZmkgb24gb3BlbndydCBmb2xkZXIgcmVtYWlu IGludGFjdCwgd2hpbGUgd2UgY29udGludWUgdG8gbWFpbnRhaW4gdGhlbSB0aGUgc2FtZSB3YXkv cGFjZS4NCjIuIEludGVyZmFjZSB3aXRoIEYvVy4NCkYvVyB1c2VkIGJ5IHRoaXMgZHJpdmVyIGlz IGFsc28gdXNlZCBieSBvdGhlciBtYXJ2ZWxs4oCZcyBkcml2ZXJzLg0KMy4gQU1QRFUgcmVsYXRl ZCBjb2RlLg0KSXQgaGFzIGJlZW4gd2VsbCB0ZXN0ZWQgYW5kIGxldmVyYWdlZCBmcm9tIG13bDhr LiBXZSBtYXkgZW5oYW5jZSBpdCBpbiBmdXR1cmUsIGJ1dCBwbGVhc2UgYWNjZXB0IHRoZSBjdXJy ZW50IGNvZGUgc3RhdHVzIGZvciBub3cuDQoNCkFmdGVyIG1vZGlmaWNhdGlvbiBpcyBkb25lLCBJ IHdpbGwgY29tZSBvdXQgW1BBVENIIHYyXSBmb3IgeW91IHRvIHJldmlldyBhZ2Fpbi4NCg0KVGhh bmtzLA0KRGF2aWQNCj4gDQo+IE9uIFRodSwgMjAxNS0wNi0wNCBhdCAwNDo1NyArMDAwMCwgRGF2 aWQgTGluIHdyb3RlOg0KPiANCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsd2lmaS9LY29u ZmlnICAgICAgICB8ICAgMTcgKw0KPiANCj4gRG9lcyB0aGlzIGRyaXZlciBoYXMgYW55IHJlbGF0 aW9uIHRvIG13aWZpZXg/IFBlcmhhcHMgdGhlIHNhbWUgbWFpbnRhaW5lcg0KPiB0ZWFtLCBldGMu PyBDb3VsZCBjb25zaWRlciBtb3ZpbmcgYWxsIHRoZSBNYXJ2ZWxsIGRyaXZlcnMgaW50byBvbmUg ZGlyZWN0b3J5LA0KPiBidXQgbm90IHJlYWxseSBuZWNlc3NhcnkgSSBndWVzcy4NCj4gDQo+IE91 dCBvZiBjdXJpb3NpdHkgLSB3aHkgIm13bHdpZmkiIGFuZCBub3QganVzdCAibXdsIiBvciBzaW1p bGFyPyA6KQ0KPiANCj4gQWxzbyAtIGNvbnNpZGVyIGFkZGluZyBhIE1BSU5UQUlORVJTIGVudHJ5 IGZvciB0aGlzIGRyaXZlci4NCj4gDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213bHdpZmkv bXdsX2RlYnVnLmMgICAgfCAgMjA3ICsrDQo+IA0KPiBUaGUgbXdsXyBwcmVmaXggZG9lc24ndCBy ZWFsbHkgZG8gbXVjaCBmb3IgdGhpcyBkcml2ZXIgKGVzcGVjaWFsbHkgc2luY2UgaXQncw0KPiB1 c2VkIGZvciBhbGwgZmlsZXMpIC0tIEknZCBjb25zaWRlciByZW1vdmluZyBpdC4NCj4gDQo+ID4g QEAgLTI4NCw1ICsyODQsNiBAQCBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3 L0tjb25maWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9LY29u ZmlnIg0KPiA+ICBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9LY29uZmlnIg0K PiA+ICBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnIg0KPiA+ICtzb3Vy Y2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL213bHdpZmkvS2NvbmZpZyINCj4gDQo+IFBlcmhhcHMs IGp1c3QgbGlrZSB3aXRoIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLCB3ZSBzaG91bGQgYWxzbyBj b25zaWRlciBoYXZpbmcNCj4gcGVyLXZlbmRvciBLY29uZmlnIHN0cnVjdHVyZSwgbGlrZSBFdGhl cm5ldCBkcml2ZXJzIGhhdmUgbm93Lg0KPiANCj4gVGhlbiBhZ2FpbiwgdW5sZXNzIHdlIGRlY2lk ZSB3ZSB3YW50IHRvIGRvIHRoaXMgZm9yIGFsbCBkcml2ZXJzIGFuZCBhbGwgZGV2aWNlcw0KPiBp dCBkb2Vzbid0IHJlYWxseSBkbyBtdWNoLg0KPiANCj4gPiArCWRlcGVuZHMgb24gUENJICYmIE1B QzgwMjExDQo+ID4gKwlzZWxlY3QgRldfTE9BREVSDQo+ID4gKwlzZWxlY3QgT0YNCj4gDQo+IFRo YXQncyBpbnRlcmVzdGluZywgd2h5IGRvZXMgYSBQQ0koZSkgZHJpdmVyIG5lZWQgT0Y/DQo+IA0K PiA+ICsvKiBDT05TVEFOVFMgQU5EIE1BQ1JPUw0KPiA+ICsqLw0KPiANCj4gdGhhdCBvbmUtbGlu ZSBjb21tZW50IHN0eWxlIChhbHNvIGluIG90aGVyIHBsYWNlcyBiZWxvdywgYW5kIHBlcmhhcHMg b3RoZXINCj4gZmlsZXMpIGlzIGEgYnV0IHN0cmFuZ2UNCj4gDQo+ID4gKyNkZWZpbmUgUFJUXzhC WVRFUyAiMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMngNCj4gMHglMDJ4 IDB4JTAyeFxuIg0KPiANCj4gRG8geW91IHJlYWxseSBuZWVkIHRoZSAiMHgiIGluIGhlcmU/IE90 aGVyd2lzZSBpdCdkIGJlIG11Y2ggbmljZXIgdG8gdXNlICVwaA0KPiBpbnN0ZWFkIG9mIG1hY3Jv cy4NCj4gDQo+ID4gK3ZvaWQgbXdsX2RlYnVnX3BydCh1MzIgY2xhc3NsZXZlbCwgY29uc3QgY2hh ciAqZnVuYywgY29uc3QgY2hhcg0KPiA+ICsqZm9ybWF0LCAuLi4pIHsNCj4gDQo+ID4gKwlkZWJ1 Z19zdHJpbmcgPSBrbWFsbG9jKDEwMjQsIEdGUF9BVE9NSUMpOw0KPiA+ICsNCj4gPiArCWlmICgh ZGVidWdfc3RyaW5nKQ0KPiA+ICsJCXJldHVybjsNCj4gDQo+IFRoYXQgc2VlbXMgYSBiaXQgcXVl c3Rpb25hYmxlIC0gd2hlbiBtZW1vcnkgYWxsb2NhdGlvbnMgc3RhcnQgZmFpbGluZyBpcyBvbmUg b2YNCj4gdGhvc2UgcGxhY2VzIHdoZXJlIHlvdSByZWFsbHkgd2FudCBkZWJ1ZyBvdXRwdXQgLi4u DQo+IA0KPiA+ICsJc3dpdGNoIChjbGFzcykgew0KPiA+ICsJY2FzZSBEQkdfQ0xBU1NfRU5URVI6 DQo+ID4gKwkJcHJfZGVidWcoIkVudGVyICVzKCkgLi4uXG4iLCBmdW5jKTsNCj4gPiArCQlicmVh azsNCj4gPiArCWNhc2UgREJHX0NMQVNTX0VYSVQ6DQo+ID4gKwkJcHJfZGVidWcoIi4uLiBFeGl0 ICVzKClcbiIsIGZ1bmMpOw0KPiA+ICsJCWJyZWFrOw0KPiANCj4gSSB0aGluayB5b3Ugc2hvdWxk IG5vdCBoYXZlIGVudGVyL2V4aXQgbG9nZ2luZyBhdCBhbGwgYnV0IHVzZSBmdW5jdGlvbiB0cmFj aW5nDQo+IGluc3RlYWQgaW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoaXMgYmVjb21lcyBuZWNlc3Nh cnkuDQo+IA0KPiA+ICsJaWYgKHN0cmxlbihkZWJ1Z19zdHJpbmcpID4gMCkgew0KPiANCj4gc3Ry bGVuKCkgPiAwIHNlZW1zIHByZXR0eSBleHBlbnNpdmUgLSBwZXJoYXBzIHRoZSBjb21waWxlciBj YW4gb3B0aW1pc2UgaXQsIGJ1dA0KPiBzdGlsbC4NCj4gDQo+ID4gKwkJaWYgKGRlYnVnX3N0cmlu Z1tzdHJsZW4oZGVidWdfc3RyaW5nKSAtIDFdID09ICdcbicpDQo+ID4gKwkJCWRlYnVnX3N0cmlu Z1tzdHJsZW4oZGVidWdfc3RyaW5nKSAtIDFdID0gJ1wwJzsNCj4gPiArCQkJcHJfZGVidWcoIiVz KCk6ICVzXG4iLCBmdW5jLCBkZWJ1Z19zdHJpbmcpOw0KPiA+ICsJfQ0KPiANCj4gWW91IHNob3Vs ZCBhbHNvIGJlIGFibGUgdG8ganVzdCBwYXNzIHRoZSBvcmlnaW5hbCBhcmd1bWVudHMgdG8gcHJf ZGVidWcsDQo+IHBlcmhhcHMgd2l0aCAlcFYsIGFuZCBnZXQgcmlkIG9mIHRoZSBhbGxvY2F0aW9u IGVudGlyZWx5Lg0KPiANCj4gPiArCWZvciAoY3Vycl9ieXRlID0gMDsgY3Vycl9ieXRlIDwgbGVu OyBjdXJyX2J5dGUgPSBjdXJyX2J5dGUgKyA4KSB7DQo+IA0KPiBUaGlzIHJlYWxseSBpcyBwcmV0 dHkgaWNreSAtIGdldCByaWQgb2YgaXQgYW5kIHVzZSAlcGggaW4gdGhlIGNhbGxlci4gSWYgaXQn cyBsb25nZXINCj4gdGhhbiB3aGF0J3Mgc3VwcG9ydGVkIHRoZXJlIHlvdSBwcm9iYWJseSBzaG91 bGRuJ3QgaGF2ZSBpdCBhdCBhbGwgYW5kIGFkZA0KPiB0cmFjaW5nIGV2ZW50cyB0byB5b3VyIGRy aXZlciBpbnN0ZWFkLg0KPiANCj4gPiArdm9pZCBtd2xfZGVidWdfZHVtcGRhdGEoY29uc3Qgdm9p ZCAqZGF0YSwgaW50IGxlbiwgY2hhciAqbWFya2VyKQ0KPiANCj4gZGl0dG8uDQo+IA0KPiA+ICsj ZGVmaW5lIERCR19MRVZFTF8wIEJJVCgwKSAgICAvKiBtd2xfbWFpbi5jICAgICAqLw0KPiA+ICsj ZGVmaW5lIERCR19MRVZFTF8xIEJJVCgxKSAgICAvKiBtd2xfZndkbC5jICAgICAqLw0KPiA+ICsj ZGVmaW5lIERCR19MRVZFTF8yIEJJVCgyKSAgICAvKiBtd2xfZndjbWQuYyAgICAqLw0KPiA+ICsj ZGVmaW5lIERCR19MRVZFTF8zIEJJVCgzKSAgICAvKiBtd2xfdHguYyAgICAgICAqLw0KPiA+ICsj ZGVmaW5lIERCR19MRVZFTF80IEJJVCg0KSAgICAvKiBtd2xfcnguYyAgICAgICAqLw0KPiA+ICsj ZGVmaW5lIERCR19MRVZFTF81IEJJVCg1KSAgICAvKiBtd2xfbWFjODAyMTEuYyAqLw0KPiANCj4g VGhpcyBzZWVtcyB2ZXJ5IHF1ZXN0aW9uYWJsZS4NCj4gDQo+ID4gKyNkZWZpbmUgREJHX0NMQVNT XzcgQklUKDIzKQ0KPiANCj4gYW5kIHRob3NlIGFyZSBob3BlZnVsbHkgbm90IHVzZWQgYXQgYWxs IC0gcmVtb3ZlIHRoZW0/DQo+IA0KPiBDb25zaWRlciBhZGRpbmcgX19wcmludGYoeCx5KSBhbm5v dGF0aW9uIHRvIHRoZSBmdW5jdGlvbnMgdG8gY2hlY2sgdGhlIHZhbGlkaXR5DQo+IG9mIHRoZSBm b3JtYXQgc3RyaW5ncy4NCj4gDQo+ID4gKyNkZWZpbmUgV0xEQkdfRFVNUF9EQVRBKGNsYXNzbGV2 ZWwsIGRhdGEsIGxlbikgI2RlZmluZQ0KPiA+ICtXTERCR19FTlRFUihjbGFzc2xldmVsKSAjZGVm aW5lIFdMREJHX0VOVEVSX0lORk8oY2xhc3NsZXZlbCwgLi4uKQ0KPiA+ICsjZGVmaW5lIFdMREJH X0VYSVQoY2xhc3NsZXZlbCkgI2RlZmluZSBXTERCR19FWElUX0lORk8oY2xhc3NsZXZlbCwNCj4g PiArLi4uKSAjZGVmaW5lIFdMREJHX0lORk8oY2xhc3NsZXZlbCwgLi4uKSAjZGVmaW5lDQo+ID4g K1dMREJHX1dBUk5JTkcoY2xhc3NsZXZlbCwgLi4uKSAjZGVmaW5lIFdMREJHX0VSUk9SKGNsYXNz bGV2ZWwsIC4uLikNCj4gPiArI2RlZmluZSBXTERCR19QQU5JQyhjbGFzc2xldmVsLCAuLi4pDQo+ IA0KPiBDb25zaWRlciBzdGlsbCBleHBhbmRpbmcgdGhlbSB0byBzb21lIGlubGluZSB0aGF0IGdl dHMgdGhlIGFyZ3VtZW50cyBhbmQgYWxzbw0KPiBoYXMgX19wcmludGYoeCx5KSBhbm5vdGF0aW9u IHNvIHlvdSBnZXQgY29tcGlsZS10aW1lIGNoZWNraW5nIGV2ZW4gd2hlbiB5b3UNCj4gZG9uJ3Qg aGF2ZSBkZWJ1ZyBlbmFibGVkLg0KPiANCj4gPiArLyogTWFwIHRvIDB4ODAwMDAwMDAgKEJ1cyBj b250cm9sKSBvbiBCQVIwICovDQo+IA0KPiBzaG91bGQgYmUgc2luZ2xlLWxpbmUgY29tbWVudCBz dHlsZSAtIG5vdCBnb2luZyB0byBjb21tZW50IG9uIHRoYXQgYW55IG1vcmUNCj4gDQo+ID4gKyNk ZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfVFhfRE9ORSAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBi aXQgMA0KPiAqLw0KPiA+ICsjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX1JYX1JEWSAgICAgICAg ICAgIDB4MDAwMDAwMDIgLyogYml0IDENCj4gKi8NCj4gPiArI2RlZmluZSBNQUNSRUdfQTJIUklD X0JJVF9PUENfRE9ORSAgICAgICAgICAweDAwMDAwMDA0IC8qIGJpdCAyDQo+ICovDQo+ID4gKyNk ZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfTUFDX0VWRU5UICAgICAgICAgMHgwMDAwMDAwOCAvKiBi aXQgMw0KPiAqLw0KPiA+ICsjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX1JYX1BST0JMRU0gICAg ICAgIDB4MDAwMDAwMTAgLyogYml0IDQNCj4gKi8NCj4gPiArI2RlZmluZSBNQUNSRUdfQTJIUklD X0JJVF9SQURJT19PRkYgICAgICAgICAweDAwMDAwMDIwIC8qIGJpdCA1DQo+ICovDQo+ID4gKyNk ZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfUkFESU9fT04gICAgICAgICAgMHgwMDAwMDA0MCAvKiBi aXQgNg0KPiAqLw0KPiA+ICsjZGVmaW5lIE1BQ1JFR19BMkhSSUNfQklUX1JBREFSX0RFVEVDVCAg ICAgIDB4MDAwMDAwODAgLyogYml0IDcNCj4gKi8NCj4gPiArI2RlZmluZSBNQUNSRUdfQTJIUklD X0JJVF9JQ1ZfRVJST1IgICAgICAgICAweDAwMDAwMTAwIC8qIGJpdCA4DQo+ICovDQo+ID4gKyNk ZWZpbmUgTUFDUkVHX0EySFJJQ19CSVRfV0VBS0lWX0VSUk9SICAgICAgMHgwMDAwMDIwMCAvKiBi aXQgOQ0KPiAqLw0KPiANCj4gVGhvc2UgY29tbWVudHMgYXJlIGNsZWFybHkgdXNlbGVzcyAtIGp1 c3QgdXNlIEJJVChOKSBhcyBiZWxvdz8hDQo+IA0KPiA+ICsjZGVmaW5lIE1BQ1JFR19BMkhSSUNf QklUX1FVRVVFX0VNUFRZICAgICAgIEJJVCgxMCkNCj4gDQo+ID4gKyNkZWZpbmUgTUFDUkVHX0Ey SFJJQ19CSVRfQ0hBTl9TV0lUQ0ggICAgICAgQklUKDEyKSAvKg0KPiBJRUVFODAyMTFfREggKi8N Cj4gDQo+IFdoYXQncyB0aGF0IHN1cHBvc2VkIHRvIG1lYW4/DQo+IA0KPiA+ICsjZGVmaW5lIE1B Q1JFR19BMkhSSUNfQkFfV0FUQ0hET0cgICAgICAgICAgIEJJVCgxNCkNCj4gPiArI2RlZmluZSBN QUNSRUdfQTJIUklDX0JJVF9TU1VfRE9ORSAgICAgICAgICBCSVQoMTYpDQo+ID4gKyNkZWZpbmUg TUFDUkVHX0EySFJJQ19DT05TRUNfVFhGQUlMICAgICAgICAgQklUKDE3KSAvKiAxNSB0YWtlbg0K PiBieSBJU1JfVFhBQ0sgKi8NCj4gDQo+IFRoYXQgY29tbWVudCBzZWVtcyBtaXNwbGFjZWQ/IG1h eWJlIGl0IHNob3VsZCBiZSBiZXR3ZWVuIDE0IGFuZCAxNj8NCj4gDQo+ID4gKyNkZWZpbmUgSVNS X1NSQ19CSVRTICAgICAgICAoKE1BQ1JFR19BMkhSSUNfQklUX1JYX1JEWSkgfCBcDQo+ID4gKwkJ CSAgICAgKE1BQ1JFR19BMkhSSUNfQklUX1RYX0RPTkUpIHwgXA0KPiA+ICsJCQkgICAgIChNQUNS RUdfQTJIUklDX0JJVF9PUENfRE9ORSkgfCBcDQo+IA0KPiBMb3RzIG9mIHVzZWxlc3MgcGFyZW50 aGVzZXMuDQo+IA0KPiA+ICsjZGVmaW5lIE1BQ1JFR19IMkFSSUNfQklUX1BQQV9SRUFEWSAgICAg ICAgIDB4MDAwMDAwMDEgLyogYml0IDANCj4gKi8NCj4gDQo+IHNlZSBhYm92ZQ0KPiANCj4gPiAr I2RlZmluZSBXTF9TRUNfU0xFRVAobnVtX3NlY3MpICAgICAgICAgICAgICBtZGVsYXkobnVtX3Nl Y3MgKg0KPiAxMDAwKQ0KPiA+ICsjZGVmaW5lIFdMX01TRUNfU0xFRVAobnVtX21pbGxpX3NlY3Mp ICAgICAgIG1kZWxheShudW1fbWlsbGlfc2VjcykNCj4gPiArDQo+ID4gKyNkZWZpbmUgRU5ESUFO X1NXQVAzMihfdmFsKSAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKF92YWwpKQ0KPiA+ICsj ZGVmaW5lIEVORElBTl9TV0FQMTYoX3ZhbCkgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUxNihf dmFsKSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgREVDTEFSRV9MT0NLKGwpICAgICAgICAgICAgICAg ICAgICAgc3BpbmxvY2tfdCBsDQo+ID4gKyNkZWZpbmUgU1BJTl9MT0NLX0lOSVQobCkgICAgICAg ICAgICAgICAgICAgc3Bpbl9sb2NrX2luaXQobCkNCj4gPiArI2RlZmluZSBTUElOX0xPQ0sobCkg ICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2sobCkNCj4gPiArI2RlZmluZSBTUElOX1VO TE9DSyhsKSAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jayhsKQ0KPiA+ICsjZGVmaW5l IFNQSU5fTE9DS19JUlFTQVZFKGwsIGYpICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKGws IGYpDQo+ID4gKyNkZWZpbmUgU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRShsLCBmKSAgICAgICAgc3Bp bl91bmxvY2tfaXJxcmVzdG9yZShsLA0KPiBmKQ0KPiANCj4gTm9wZSwgZ2V0IHJpZCBvZiBhbGwg dGhlc2UuDQo+IA0KPiA+ICsvKiB2aWYgYW5kIHN0YXRpb24NCj4gPiArKi8NCj4gPiArI2RlZmlu ZSBNQVhfV0VQX0tFWV9MRU4gICAgICAgICAgICAgIDEzDQo+IA0KPiBVc2UgV0xBTl9LRVlfTEVO X1dFUDEwND8NCj4gDQo+ID4gKyNkZWZpbmUgTVdMX1ZJRihfdmlmKSAgICAgICAgICAgICAgICAo KHN0cnVjdCBtd2xfdmlmDQo+ICopJigoX3ZpZiktPmRydl9wcml2KSkNCj4gPiArI2RlZmluZSBJ RUVFODAyMTFfS0VZX0NPTkYoX3U4KSAgICAgICgoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZg0K PiAqKShfdTgpKQ0KPiA+ICsjZGVmaW5lIE1XTF9TVEEoX3N0YSkgICAgICAgICAgICAgICAgKChz dHJ1Y3QgbXdsX3N0YQ0KPiAqKSYoKF9zdGEpLT5kcnZfcHJpdikpDQo+IA0KPiBjb252ZXJ0IHRo ZXNlIHRvIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zDQo+IA0KPiA+ICtlbnVtIHsNCj4gPiArCUlF RUVfVFlQRV9NQU5BR0VNRU5UID0gMCwNCj4gPiArCUlFRUVfVFlQRV9DT05UUk9MLA0KPiA+ICsJ SUVFRV9UWVBFX0RBVEENCj4gPiArfTsNCj4gDQo+IFRoaXMgd2lsbCBiZSByYXRoZXIgY29uZnVz aW5nIHNpbmNlIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlIHNwZWMgLSBnZXQgcmlkIG9mIHRoZW0NCj4g YW5kIHVzZSBJRUVFODAyMTFfRlRZUEVfKiB3aXRoIHRoZSBjb3JyZWN0IHNoaWZ0L21hc2suDQo+ IA0KPiA+ICtzdHJ1Y3QgbXdsX3JhdGVfaW5mbyB7DQo+ID4gKwl1MzIgZm9ybWF0OjI7ICAgICAg ICAvKiAwID0gTGVnYWN5LCAxID0gMTFuLCAyID0gMTFhYyAqLw0KPiA+ICsJdTMyIHN0YmM6MTsN Cj4gPiArCXUzMiByc3ZkMToxOw0KPiA+ICsJdTMyIGJhbmR3aWR0aDoyOyAgICAgLyogMCA9IDIw IE1IeiwgMSA9IDQwIE1IeiwgMiA9IDgwIE1IeiAqLw0KPiA+ICsJdTMyIHNob3J0X2dpOjE7ICAg ICAgLyogMCA9IHN0YW5kYXJkIGd1YXJkIGludGVydmFsLCAxID0gc2hvcnQgKi8NCj4gPiArCXUz MiByc3ZkMjoxOw0KPiA+ICsJdTMyIHJhdGVfaWRfbWNzOjc7DQo+ID4gKwl1MzIgcHJlYW1ibGVf dHlwZToxOyAvKiBQcmVhbWJsZXR5cGUgMCA9IExvbmcsIDEgPSBTaG9ydDsgKi8NCj4gPiArCXUz MiBwb3dlcl9pZDo2Ow0KPiA+ICsJdTMyIGFkdl9jb2Rpbmc6MTsgICAgLyogbGRwYyAqLw0KPiA+ ICsJdTMyIGJmOjE7DQo+ID4gKwl1MzIgYW50X3NlbGVjdDo4OyAgICAvKiBCaXRtYXAgdG8gc2Vs ZWN0IG9uZSBvZiB0aGUgdHJhbnNtaXQgYW50ZW5uYSAqLw0KPiA+ICt9IF9fcGFja2VkOw0KPiAN Cj4gVGhpcyBiZWluZyBfX3BhY2tlZCBzZWVtcyB0byBpbmRpY2F0ZSB5b3Ugd2FudCB0byBzZW5k IGl0IHRvIHRoZSBoYXJkd2FyZSAtDQo+IHlvdSBzaG91bGQgcHJvYmFibHkgcHV0IHN1Y2ggc3Ry dWN0dXJlcyBpbnRvIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUuDQo+IA0KPiBBbHNvLCB1c2luZyBi aXRmaWVsZHMgaW4gYSBzdHJ1Y3R1cmUgc2VudCB0byBoYXJkd2FyZSBjYW5ub3QgcG9zc2libHkg YmUgZW5kaWFuDQo+IGNvcnJlY3QgLSBzaW1wbHkgZG9uJ3QgZG8gaXQgYW5kIHVzZSBjb25zdGFu dHMvc2hpZnRzL21hc2tzL2V0Yy4NCj4gaW5zdGVhZC4NCj4gDQo+IFRoZW4gYWdhaW4sIGFmdGVy IHNlZWluZyB0aGUgbmV4dCBzdHJ1Y3QgLSBwZXJoYXBzIHRoaXMgc2ltcGx5IHNob3VsZG4ndCBi ZQ0KPiBwYWNrZWQsIG9yIGhhdmUgYSBjb21tZW50IGFzIHRvIHdoeSBpdCBtdXN0IGJlPw0KPiAN Cj4gPiArc3RydWN0IG13bF90eF9kZXNjIHsNCj4gPiArCXU4IGRhdGFfcmF0ZTsNCj4gPiArCXU4 IHR4X3ByaW9yaXR5Ow0KPiA+ICsJdTE2IHFvc19jdHJsOw0KPiA+ICsJdTMyIHBrdF9wdHI7DQo+ ID4gKwl1MTYgcGt0X2xlbjsNCj4gPiArCXU4IGRlc3RfYWRkcltFVEhfQUxFTl07DQo+ID4gKwl1 MzIgcHBoeXNfbmV4dDsNCj4gPiArCXUzMiBzYXBfcGt0X2luZm87DQo+ID4gKwlzdHJ1Y3QgbXds X3JhdGVfaW5mbyByYXRlX2luZm87DQo+ID4gKwl1OCB0eXBlOw0KPiA+ICsJdTggeG1pdF9jb250 cm9sOyAgICAgLyogYml0IDA6IHVzZSByYXRlaW5mbywgYml0IDE6IGRpc2FibGUgYW1wZHUgKi8N Cj4gPiArCXUxNiByZXNlcnZlZDsNCj4gPiArCXUzMiB0Y3BhY2tfc247DQo+ID4gKwl1MzIgdGNw YWNrX3NyY19kc3Q7DQo+ID4gKwlzdHJ1Y3Qgc2tfYnVmZiAqcHNrX2J1ZmY7DQo+ID4gKwlzdHJ1 Y3QgbXdsX3R4X2Rlc2MgKnBuZXh0Ow0KPiA+ICsJdTggcmVzZXJ2ZWQxWzJdOw0KPiA+ICsJdTgg cGFja2V0X2luZm87DQo+ID4gKwl1OCBwYWNrZXRfaWQ7DQo+ID4gKwl1MTYgcGFja2V0X2xlbl9h bmRfcmV0cnk7DQo+ID4gKwl1MTYgcGFja2V0X3JhdGVfaW5mbzsNCj4gPiArCXU4ICpzdGFfaW5m bzsNCj4gPiArCXUzMiBzdGF0dXM7DQo+ID4gK30gX19wYWNrZWQ7DQo+IA0KPiBTZWUgYWJvdmUg LSBjbGVhcmx5IHRoaXMgb25lIGNhbm5vdCBiZSBzZW50IHRvIHRoZSBoYXJkd2FyZS4NCj4gDQo+ ID4gK3N0cnVjdCBtd2xfaHdfcnNzaV9pbmZvIHsNCj4gPiArCXUzMiByc3NpX2E6ODsNCj4gPiAr CXUzMiByc3NpX2I6ODsNCj4gPiArCXUzMiByc3NpX2M6ODsNCj4gPiArCXUzMiByc3NpX2Q6ODsN Cj4gPiArfSBfX3BhY2tlZDsNCj4gDQo+IEVyciwgd2hhdCdzIHdpdGggdGhlIGJpdGZpZWxkcz8h DQo+IA0KPiA+ICtzdHJ1Y3QgbXdsX2h3X25vaXNlX2Zsb29yX2luZm8gew0KPiA+ICsJdTMyIG5v aXNlX2Zsb29yX2E6ODsNCj4gPiArCXUzMiBub2lzZV9mbG9vcl9iOjg7DQo+ID4gKwl1MzIgbm9p c2VfZmxvb3JfYzo4Ow0KPiA+ICsJdTMyIG5vaXNlX2Zsb29yX2Q6ODsNCj4gPiArfSBfX3BhY2tl ZDsNCj4gDQo+IERpdHRvLg0KPiANCj4gPiArc3RydWN0IG13bF9yeF9kZXNjIHsNCj4gPiArCXUx NiBwa3RfbGVuOyAgICAgICAgICAgICAgICAgLyogdG90YWwgbGVuZ3RoIG9mIHJlY2VpdmVkIGRh dGEgICAgICAqLw0KPiA+ICsJc3RydWN0IG13bF9yeHJhdGVfaW5mbyByYXRlOyAvKiByZWNlaXZl IHJhdGUgaW5mb3JtYXRpb24gICAgICAgICAgICovDQo+ID4gKwl1MzIgcHBoeXNfYnVmZl9kYXRh OyAgICAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgcGF5bG9hZCBkYXRhICAgKi8NCj4gPiAr CXUzMiBwcGh5c19uZXh0OyAgICAgICAgICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBuZXh0 IFJYIGRlc2MNCj4gKi8NCj4gPiArCXUxNiBxb3NfY3RybDsgICAgICAgICAgICAgICAgLyogcmVj ZWl2ZWQgUW9zQ3RybCBmaWVsZCB2YXJpYWJsZSAgICAqLw0KPiA+ICsJdTE2IGh0X3NpZzI7ICAg ICAgICAgICAgICAgICAvKiBsaWtlIG5hbWUgc3RhdGVzDQo+ICovDQo+ID4gKwlzdHJ1Y3QgbXds X2h3X3Jzc2lfaW5mbyBod19yc3NpX2luZm87DQo+ID4gKwlzdHJ1Y3QgbXdsX2h3X25vaXNlX2Zs b29yX2luZm8gaHdfbm9pc2VfZmxvb3JfaW5mbzsNCj4gPiArCXU4IG5vaXNlX2Zsb29yOw0KPiA+ ICsJdTggcmVzZXJ2ZWRbM107DQo+ID4gKwl1OCByc3NpOyAgICAgICAgICAgICAgICAgICAgIC8q IHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0IGluZGljYXRpb24gKi8NCj4gPiArCXU4IHN0YXR1czsg ICAgICAgICAgICAgICAgICAgLyogc3RhdHVzIGZpZWxkIGNvbnRhaW5pbmcgVVNFRCBiaXQgICAq Lw0KPiA+ICsJdTggY2hhbm5lbDsgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHRoaXMgcGt0 IHdhcyByZWNlaXZlZCBvbg0KPiAqLw0KPiA+ICsJdTggcnhfY29udHJvbDsgICAgICAgICAgICAg ICAvKiB0aGUgY29udHJvbCBlbGVtZW50IG9mIHRoZSBkZXNjICAgICovDQo+ID4gKwkvKiBhYm92 ZSBhcmUgMzJiaXRzIGFsaWduZWQgYW5kIGlzIHNhbWUgYXMgRlcsIFJ4Q29udHJvbCBwdXQgYXQg ZW5kDQo+ID4gKwkgKiBmb3Igc3luYw0KPiA+ICsJICovDQo+ID4gKwlzdHJ1Y3Qgc2tfYnVmZiAq cHNrX2J1ZmY7ICAgIC8qIGFzc29jaWF0ZWQgc2tfYnVmZiBmb3IgTGludXggICAgICAgKi8NCj4g PiArCXZvaWQgKnBidWZmX2RhdGE7ICAgICAgICAgICAgLyogdmlydHVhbCBhZGRyZXNzIG9mIHBh eWxvYWQgZGF0YSAgICAqLw0KPiA+ICsJc3RydWN0IG13bF9yeF9kZXNjICpwbmV4dDsgICAvKiB2 aXJ0dWFsIGFkZHJlc3Mgb2YgbmV4dCBSWCBkZXNjICAgICovDQo+ID4gK30gX19wYWNrZWQ7DQo+ IA0KPiBUaGlzIGlzIHJlYWxseSByZWFsbHkgc3RyYW5nZSAtIHRoZSBmaXJzdCBmZXcgZmllbGRz ICphcmUqIHVzZWQgd2l0aCB0aGUgZmlybXdhcmUsDQo+IGFuZCB0aGUgbGF0dGVyIGFyZW4ndD8g QnV0IGhvdyBjb21lIHRoZW4gdGhleSBjYW4gYmUgInUzMiINCj4gcmF0aGVyIHRoYW4gIl9fbGUz MiI/IFZlcnkgb2RkLg0KPiANCj4gPiArc3RydWN0IG13bF9kZXNjX2RhdGEgew0KPiA+ICsJZG1h X2FkZHJfdCBwcGh5c190eF9yaW5nOyAgICAgICAgICAvKiBwdHIgdG8gZmlyc3QgVFggZGVzYyAo cGh5cy4pDQo+ICovDQo+ID4gKwlzdHJ1Y3QgbXdsX3R4X2Rlc2MgKnB0eF9yaW5nOyAgICAgIC8q IHB0ciB0byBmaXJzdCBUWCBkZXNjICh2aXJ0LikgICAgKi8NCj4gPiArCXN0cnVjdCBtd2xfdHhf ZGVzYyAqcG5leHRfdHhfZGVzYzsgLyogbmV4dCBUWCBkZXNjIHRoYXQgY2FuIGJlIHVzZWQNCj4g Ki8NCj4gPiArCXN0cnVjdCBtd2xfdHhfZGVzYyAqcHN0YWxlX3R4X2Rlc2M7LyogdGhlIHN0YWxl ZCBUWCBkZXNjcmlwdG9yDQo+ICovDQo+ID4gKwlkbWFfYWRkcl90IHBwaHlzX3J4X3Jpbmc7ICAg ICAgICAgIC8qIHB0ciB0byBmaXJzdCBSWCBkZXNjIChwaHlzLikNCj4gKi8NCj4gPiArCXN0cnVj dCBtd2xfcnhfZGVzYyAqcHJ4X3Jpbmc7ICAgICAgLyogcHRyIHRvIGZpcnN0IFJYIGRlc2MgKHZp cnQuKSAgICAqLw0KPiA+ICsJc3RydWN0IG13bF9yeF9kZXNjICpwbmV4dF9yeF9kZXNjOyAvKiBu ZXh0IFJYIGRlc2MgdGhhdCBjYW4gYmUgdXNlZA0KPiAqLw0KPiA+ICsJdW5zaWduZWQgaW50IHdj Yl9iYXNlOyAgICAgICAgICAgICAvKiBGVyBiYXNlIG9mZnNldCBmb3IgcmVnaXN0ZXJzDQo+ICov DQo+ID4gKwl1bnNpZ25lZCBpbnQgcnhfZGVzY193cml0ZTsgICAgICAgIC8qIEZXIGRlc2NyaXB0 b3Igd3JpdGUgcG9zaXRpb24NCj4gKi8NCj4gPiArCXVuc2lnbmVkIGludCByeF9kZXNjX3JlYWQ7 ICAgICAgICAgLyogRlcgZGVzY3JpcHRvciByZWFkIHBvc2l0aW9uDQo+ICovDQo+ID4gKwl1bnNp Z25lZCBpbnQgcnhfYnVmX3NpemU7ICAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgUlggYnVmZmVy cw0KPiAqLw0KPiA+ICt9IF9fcGFja2VkOw0KPiANCj4gQ2xlYXJseSBzaG91bGRuJ3QgYmUgcGFj a2VkLg0KPiANCj4gPiArc3RydWN0IG13bF9sb2NrcyB7DQo+ID4gKwlERUNMQVJFX0xPQ0soeG1p dF9sb2NrKTsgICAgICAgICAgIC8qIHVzZWQgdG8gcHJvdGVjdCBUWCBhY3Rpb25zDQo+ICovDQo+ ID4gKwlERUNMQVJFX0xPQ0soZndjbWRfbG9jayk7ICAgICAgICAgIC8qIHVzZWQgdG8gcHJvdGVj dCBGVw0KPiBjb21tYW5kcyAgICAgKi8NCj4gPiArCURFQ0xBUkVfTE9DSyhzdHJlYW1fbG9jayk7 ICAgICAgICAgLyogdXNlZCB0byBwcm90ZWN0IHN0cmVhbQ0KPiAqLw0KPiA+ICt9Ow0KPiANCj4g V2hhYWE/DQo+IA0KPiBObyBubyAuLi4gZmlyc3Qgb2YgYWxsLCBwdXR0aW5nIGxvY2tzIHdpdGgg dGhlIGRhdGEgdGhleSBwcm90ZWN0IHNlZW1zIG11Y2ggYmV0dGVyLA0KPiB0aGVuIHRoZSBtYWNy b3MsIC4uLg0KPiANCj4gPiArc3RydWN0IGJlYWNvbl9pbmZvIHsNCj4gPiArCWJvb2wgdmFsaWQ7 DQo+ID4gKwl1MTYgY2FwX2luZm87DQo+ID4gKwl1OCBiX3JhdGVfc2V0W1NZU0FEUFRfTUFYX0RB VEFfUkFURVNfR107DQo+ID4gKwl1OCBvcF9yYXRlX3NldFtTWVNBRFBUX01BWF9EQVRBX1JBVEVT X0ddOw0KPiA+ICsJdTggaWVfd21tX2xlbjsgICAgICAgICAgICAgICAvKiBLZWVwIFdNTSBJRSAq Lw0KPiA+ICsJdTggKmllX3dtbV9wdHI7DQo+IA0KPiBJJ20gbm90IHN1cmUgd2h5IHlvdSdkIG5l ZWQgc3VjaCBhIHN0cnVjdCB3aXRoIG1hYzgwMjExLCBidXQgZXZlbiBpZiB5b3UgZG8NCj4gaXQn ZCBiZSBmYXIgbW9yZSBlZmZpY2llbnQgdG8gbm90IGFsdGVybmF0ZSB1OCBhbmQgdTggKiBmaWVs ZHMgc2luY2UgdGhhdCBiYXNpY2FsbHkNCj4gd2FzdGVzIDcgYnl0ZXMgZm9yIGFsaWdubWVudCBl YWNoIHRpbWUgeW91IGRvIGl0Lg0KPiANCj4gPiArCXUxNiBpdjE2Ow0KPiA+ICsJdTMyIGl2MzI7 DQo+ID4gKwlzOCBrZXlpZHg7DQo+ID4gK307DQo+IA0KPiBIbW0uIEFyZSB5b3Ugc3VyZSB5b3Ug bmVlZCBhbiBpdjE2L2l2MzIgaW4gYSAqdmlmKiBzdHJ1Y3Q/IFRoYXQgc2VlbXMgdmVyeQ0KPiBz dXNwaWNpb3VzLg0KPiANCj4gPiArc3RydWN0IG13bF9zdGEgew0KPiA+ICsJdTggaXNfYW1wZHVf YWxsb3dlZDsNCj4gPiArCXN0cnVjdCBtd2xfdHhfaW5mbyB0eF9zdGF0c1tNV0xfTUFYX1RJRF07 DQo+ID4gKwl1MTYgaXYxNjsNCj4gPiArCXUzMiBpdjMyOw0KPiA+ICt9Ow0KPiANCj4gSGVyZSBh bHNvIC0geW91IGNhbiBzdGlsbCBoYXZlIG11bHRpcGxlIGtleXMsIGV2ZW4gVEtJUC4NCj4gDQo+ ID4gK3N0cnVjdCBtd2xfdHhfY3RybCB7DQo+ID4gKwl1OCB0eF9wcmlvcml0eTsNCj4gPiArCXUx NiBxb3NfY3RybDsNCj4gPiArCXU4IHR5cGU7DQo+ID4gKwl1OCB4bWl0X2NvbnRyb2w7DQo+ID4g Kwl1OCAqc3RhX2luZm87DQo+ID4gKwlib29sIGNjbXA7DQo+ID4gK30gX19wYWNrZWQ7DQo+IA0K PiBBZ2FpbiwgZG9uJ3QgZG8gcGFja2VkIGZvciBob3N0IHN0cnVjdHVyZXMsIGl0IGp1c3Qga2ls bHMgeW91ciBwZXJmb3JtYW5jZSBvbg0KPiBtYW55IGFyY2hpdGVjdHVyZXMuIEluc3RlYWQsIHJl b3JkZXIgdGhlIHN0cnVjdHVyZSBzbyBpdCdzIG5hdGl2ZWx5IHBhY2tlZCENCj4gDQo+ID4gKy8q IEdlbmVucmFsIGVycm9yICovDQo+IA0KPiB0eXBvDQo+IA0KPiA+ICsvKiBLZXkgdHlwZSBpcyBX RVAJCSovDQo+ID4gKyNkZWZpbmUgS0VZX1RZUEVfSURfV0VQICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDANCj4gPiArLyogS2V5IHR5cGUgaXMgVEtJUAkJKi8NCj4gPiArI2RlZmluZSBLRVlf VFlQRV9JRF9US0lQICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQ0KPiA+ICsvKiBLZXkgdHlw ZSBpcyBBRVMtQ0NNUAkqLw0KPiA+ICsjZGVmaW5lIEtFWV9UWVBFX0lEX0FFUwkgICAgICAgICAg ICAgICAgICAgICAgICAweDAyDQo+IA0KPiBUaG9zZSBjb21tZW50cyBhcmUgcHJldHR5IHVzZWxl c3MuDQo+IA0KPiA+ICsvKiBHcm91cCBrZXkgZm9yIFRYICovDQo+ID4gKyNkZWZpbmUgRU5DUl9L RVlfRkxBR19UWEdST1VQS0VZICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQNCj4gPiArLyogcGFp cndpc2UgKi8NCj4gPiArI2RlZmluZSBFTkNSX0tFWV9GTEFHX1BBSVJXSVNFICAgICAgICAgICAg ICAgICAgMHgwMDAwMDAwOA0KPiANCj4gc2FtZSBoZXJlIGV0Yy4uLg0KPiANCj4gPiArLyogICAg ICBNaXNjDQo+ID4gKyovDQo+ID4gKyNkZWZpbmUgTVdMX1NQSU5fTE9DSyhYKSAgICAgU1BJTl9M T0NLX0lSUVNBVkUoWCwgZmxhZ3MpDQo+ID4gKyNkZWZpbmUgTVdMX1NQSU5fVU5MT0NLKFgpICAg U1BJTl9VTkxPQ0tfSVJRUkVTVE9SRShYLCBmbGFncykNCj4gDQo+IFVtbSwgbm9wZS4NCj4gDQo+ ID4gK3N0cnVjdCBob3N0Y21kX2hlYWRlciB7DQo+ID4gKwl1MTYgY21kOw0KPiA+ICsJdTE2IGxl bjsNCj4gPiArCXU4IHNlcV9udW07DQo+ID4gKwl1OCBtYWNpZDsNCj4gPiArCXUxNiByZXN1bHQ7 DQo+ID4gK30gX19wYWNrZWQ7DQo+IA0KPiBOb3cgdGhpcyByZWFsbHkgbG9va3MgbGlrZSBhIHN0 cnVjdCB5b3UgZXhjaGFuZ2Ugd2l0aCB0aGUgZGV2aWNlLCBzbyBpdCBzaG91bGQNCj4gcHJvYmFi bHkgYmUgdXNpbmcgX19sZTE2IGluc3RlYWQgb2YgdTE2Lg0KPiANCj4gPiArc3RydWN0IGhvc3Rj bWRfY21kX2dldF9od19zcGVjIHsNCj4gPiArCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRy Ow0KPiA+ICsJdTggdmVyc2lvbjsgICAgICAgICAgICAgICAgICAvKiB2ZXJzaW9uIG9mIHRoZSBI Vw0KPiAqLw0KPiA+ICsJdTggaG9zdF9pZjsgICAgICAgICAgICAgICAgICAvKiBob3N0IGludGVy ZmFjZQ0KPiAqLw0KPiA+ICsJdTE2IG51bV93Y2I7ICAgICAgICAgICAgICAgICAvKiBNYXguIG51 bWJlciBvZiBXQ0IgRlcgY2FuDQo+IGhhbmRsZSAgICAgKi8NCj4gPiArCXUxNiBudW1fbWNhc3Rf YWRkcjsgICAgICAgICAgLyogTWF4TmJyIG9mIE1DIGFkZHJlc3NlcyBGVyBjYW4NCj4gaGFuZGxl ICovDQo+IA0KPiBkaXR0bywgYW5kIHRocm91Z2hvdXQgdGhpcyBmaWxlLg0KPiANCj4gVW5sZXNz IHRoZSBmaXJtd2FyZSBjYW4gc29tZWhvdyBydW4gaW4gImhvc3QgZW5kaWFuIj8gU2VlbXMgcmF0 aGVyIHVubGlrZWx5DQo+IHRvIG1lIHNpbmNlIGRlYWxpbmcgd2l0aCB3aWZpIGlzIG11Y2ggZWFz aWVyIGluIGxpdHRsZSBlbmRpYW4gZmlybXdhcmUuDQo+IA0KPiA+ICsJLyogSW5kaWNhdGVzIHN1 cHBvcnRlZCBBTVBEVSB0eXBlDQo+ID4gKwkgKiAoMSA9IGltcGxpY2l0LCAwID0gZXhwbGljaXQg KGRlZmF1bHQpKQ0KPiA+ICsJICovDQo+ID4gKwl1MzIgaW1wbGljaXRfYW1wZHVfYmE6MTsNCj4g PiArCS8qIGluZGljYXRlcyBtYnNzIGZlYXR1cmVzIGRpc2FibGUgaW4gRlcgKi8NCj4gPiArCXUz MiBkaXNhYmxlbWJzczoxOw0KPiA+ICsJdTMyIGhvc3RfZm9ybV9iZWFjb246MTsNCj4gPiArCXUz MiBob3N0X2Zvcm1fcHJvYmVfcmVzcG9uc2U6MTsNCj4gPiArCXUzMiBob3N0X3Bvd2VyX3NhdmU6 MTsNCj4gPiArCXUzMiBob3N0X2VuY3JfZGVjcl9tZ3Q6MTsNCj4gPiArCXUzMiBob3N0X2ludHJh X2Jzc19vZmZsb2FkOjE7DQo+ID4gKwl1MzIgaG9zdF9pdl9vZmZsb2FkOjE7DQo+ID4gKwl1MzIg aG9zdF9lbmNyX2RlY3JfZnJhbWU6MTsNCj4gPiArCXUzMiByZXNlcnZlZDogMjE7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLw0KPiA+ICsJdTMyIHR4X3djYl9udW1fcGVyX3F1 ZXVlOw0KPiA+ICsJdTMyIHRvdGFsX3J4X3djYjsNCj4gPiArfSBfX3BhY2tlZDsNCj4gDQo+IEFu ZCBoZXJlIGZvciByZWFsIC0gZG9uJ3QgdXNlIGJpdGZpZWxkcyBpbiBkYXRhIGV4Y2hhbmdlZCB3 aXRoIHRoZSBkZXZpY2UuDQo+IA0KPiA+ICtzdHJ1Y3QgaG9zdGNtZF9jbWRfYnJvYWRjYXN0X3Nz aWRfZW5hYmxlIHsNCj4gPiArCXN0cnVjdCBob3N0Y21kX2hlYWRlciBjbWRfaGRyOw0KPiA+ICsJ dTMyIGVuYWJsZTsNCj4gPiArfSBfX3BhY2tlZDsNCj4gDQo+IE1heWJlLCBidHcsIHlvdSBzaG91 bGQgY29uc2lkZXIgaGF2aW5nIHRoZSBoZWFkZXIgc29tZWhvdyBzZXBhcmF0ZSBmcm9tDQo+IHRo ZSBzdHJ1Y3RzIHNpbmNlIGl0J3MgYWx3YXlzIHByZXNlbnQuIE5vIGlkZWEgaG93IHlvdSB1c2Ug aXQgdGhvdWdoLCBzbyBwZXJoYXBzDQo+IG5vdCBzb21ldGhpbmcgeW91IHdhbnQgdG8gZG8uDQo+ IA0KPiA+ICtzdHJ1Y3QgcnNuX2llIHsNCj4gPiArCXU4IGVsZW1faWQ7DQo+ID4gKwl1OCBsZW47 DQo+ID4gKwl1OCBvdWlfdHlwZVs0XTsgICAgICAgICAgICAgIC8qIDAwOjUwOmYyOjAxICovDQo+ ID4gKwl1OCB2ZXJbMl07DQo+ID4gKwl1OCBncnBfa2V5X2NpcGhlcls0XTsNCj4gPiArCXU4IHB3 c19rZXlfY250WzJdOw0KPiA+ICsJdTggcHdzX2tleV9jaXBoZXJfbGlzdFs0XTsNCj4gPiArCXU4 IGF1dGhfa2V5X2NudFsyXTsNCj4gPiArCXU4IGF1dGhfa2V5X2xpc3RbNF07DQo+ID4gK30gX19w YWNrZWQ7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcnNuNDhfaWUgew0KPiA+ICsJdTggZWxlbV9pZDsN Cj4gPiArCXU4IGxlbjsNCj4gPiArCXU4IHZlclsyXTsNCj4gDQo+IEknbSBnZXR0aW5nIGEgZmVl bGluZyB0aGF0IHlvdXIgaGFyZHdhcmUgaXMgdG9vIHNtYXJ0IGZvciBhIG1hYzgwMjExDQo+IGRy aXZlciAuLi4gOy0pDQo+IA0KPiA+ICtzdHJ1Y3QgaG9zdGNtZF9jbWRfdXBkYXRlX2VuY3J5cHRv aW4gew0KPiANCj4gdHlwbyAtIGVuY3J5cHRpb24NCj4gDQo+ID4gK3N0YXRpYyBib29sIG13bF9m d2NtZF9jaGtfYWRhcHRlcihzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpOw0KPiANCj4gUGVyc29uYWxs eSwgSSdkIG5ldmVyIG1peCBob3N0IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB3aXRoIGRldmljZSBj b21tYW5kDQo+IHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgaW4gYSBoZWFkZXIgZmlsZSBzbyB0aGV5 J3JlIGJvdGggbW9yZSBjbGVhcmx5DQo+IGlkZW50aWZpYWJsZS4NCj4gDQo+IEFjdHVhbGx5LCB0 aGlzIGlzIGluIGEgQyBmaWxlIC0geW91IHNob3VsZCBhdm9pZCBzdGF0aWMgZm9yd2FyZCBkZWNs YXJhdGlvbnMNCj4gYW55d2F5LCByZW9yZGVyIHRoZSBjb2RlIGluc3RlYWQuDQo+IA0KPiA+ICt2 b2lkIG13bF9md2NtZF9yZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCj4gDQo+ID4gKwlC VUdfT04oIWh3KTsNCj4gPiArCXByaXYgPSBody0+cHJpdjsNCj4gPiArCUJVR19PTighcHJpdik7 DQo+IA0KPiBBdm9pZCBCVUdfT04oKSwgaXQganVzdCBtYWtlcyBsaWZlIGVhc2llciwgaWYgb25s eSBmb3IgdGhlIHBvb3IgZGV2ZWxvcGVyIHdobw0KPiBoYXBwZW5lZCB0byBwYXNzIE5VTEwgZm9y IHNvbWUgc3R1cGlkIHJlYXNvbiAuLi4NCj4gDQo+IEFsc28sIGlmIGh3IGlzIHZhbGlkIHRoZW4g aHctPnByaXYgcmVhbGx5IGNhbid0IGJlIE5VTEwgLi4uIHRoaW5rIG9mIGhvdyB0aGUNCj4gbWVt b3J5IGxheW91dCBpcyBkb25lLg0KPiANCj4gPiArCWlmIChtd2xfZndjbWRfY2hrX2FkYXB0ZXIo cHJpdikpIHsNCj4gPiArCQl3cml0ZWwoSVNSX1JFU0VULA0KPiA+ICsJCSAgICAgICBwcml2LT5p b2Jhc2UxICsgTUFDUkVHX1JFR19IMkFfSU5URVJSVVBUX0VWRU5UUyk7DQo+ID4gKwl9DQo+IA0K PiBObyBuZWVkIGZvciBicmFjZXMuDQo+IA0KPiA+ICsJV0xEQkdfRVhJVChEQkdfTEVWRUxfMik7 DQo+IA0KPiBJIHRoaW5rIHlvdSBzaG91bGQgZ2V0IHJpZCBvZiBhbGwgb2YgdGhlc2UuDQo+IA0K PiBBbmQgb2YgY291cnNlIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSB0aGVtZSBzaW5jZSBhbGwgb2Yg eW91ciBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4NCj4gdGhpcyB3YXkgOikNCj4gDQo+ID4gKwlwY21k LT5jbWRfaGRyLmNtZCA9DQo+IEVORElBTl9TV0FQMTYoSE9TVENNRF9DTURfR0VUX0hXX1NQRUMp Ow0KPiA+ICsJcGNtZC0+Y21kX2hkci5sZW4gPSBFTkRJQU5fU1dBUDE2KHNpemVvZigqcGNtZCkp Ow0KPiA+ICsJcGNtZC0+ZndfYXdha2VfY29va2llID0gRU5ESUFOX1NXQVAzMihwcml2LT5wcGh5 c19jbWRfYnVmICsNCj4gMjA0OCk7DQo+IA0KPiBTbyBJIHJlYWxseSB0aGluayB5b3UgbmVlZCB0 byBhZGQgdGhlIHByb3BlciBfX2xlMTYgYW5ub3RhdGlvbnMsIG1ha2Ugc3BhcnNlDQo+IHJ1biBv biB5b3VyIGNvZGUgLSBhZGQNCj4gDQo+IGNjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18N Cj4gDQo+IHRvIHlvdXIgTWFrZWZpbGUgdG8gZG8gdGhhdCwgZ2V0IHJpZCBvZiB0aGUgbWFjcm9z IGFuZCBmaXggYWxsIHRoZSBzcGFyc2UNCj4gd2FybmluZ3MgYnkgdXNpbmcgdGhlIHByb3BlciBs ZVhYX3RvX2NwdSBhbmQgY3B1X3RvX2xlWFggaW4gYWxsIHBsYWNlcy4NCj4gDQo+ID4gKwl3aGls ZSAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0dFVF9IV19TUEVDKSkgew0K PiA+ICsJCVdMREJHX1BSSU5UKCJmYWlsZWQgZXhlY3V0aW9uIik7DQo+ID4gKwkJV0xfTVNFQ19T TEVFUCgxMDAwKTsNCj4gPiArCQlXTERCR19QUklOVCgicmVwZWF0IGNvbW1hbmQgPSAleCIsICh1 bnNpZ25lZCBpbnQpcGNtZCk7DQo+ID4gKwl9DQo+IA0KPiBBbiBpbmZpbml0ZSBsb29wIGRvZXNu J3Qgc2VlbSBsaWtlIGEgZ3JlYXQgaWRlYS4NCj4gDQo+ID4gKwlpZiAoKGNvbmYtPmNoYW5kZWYu d2lkdGggPT0gTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpIHx8DQo+ID4gKwkgICAgKGNvbmYt PmNoYW5kZWYud2lkdGggPT0gTkw4MDIxMV9DSEFOX1dJRFRIXzIwKSkgew0KPiA+ICsJCXdpZHRo ID0gQ0hfMjBfTUhaX1dJRFRIOw0KPiA+ICsJCXN1Yl9jaCA9IE5PX0VYVF9DSEFOTkVMOw0KPiA+ ICsNCj4gPiArCX0gZWxzZSBpZiAoY29uZi0+Y2hhbmRlZi53aWR0aCA9PSBOTDgwMjExX0NIQU5f V0lEVEhfNDApIHsNCj4gDQo+IGV4dHJhIGJsYW5rIGxpbmUNCj4gDQo+ID4gKwlpZiAoKHByaXYt PnBvd2luaXRlZCAmIDEpID09IDApIHsNCj4gPiArCQltd2xfZndjbWRfZ2V0X3R4X3Bvd2Vycyhw cml2LCBwcml2LT50YXJnZXRfcG93ZXJzLA0KPiA+ICsJCQkJCWNoYW5uZWwtPmh3X3ZhbHVlLCBi YW5kLCB3aWR0aCwgc3ViX2NoKTsNCj4gPiArCQlwcml2LT5wb3dpbml0ZWQgfD0gMTsNCj4gPiAr CX0NCj4gDQo+IFRoYXQgIjEiIHNob3VsZCBwcm9iYWJseSBiZSBhIGNvbnN0YW50IHRoYXQncyBk ZWZpbmVkIHNvbWV3aGVyZT8NCj4gDQo+ID4gKwlpZiAoKHByaXYtPnBvd2luaXRlZCAmIDIpID09 IDApIHsNCj4gPiArCQltd2xfZndjbWRfZ2V0X3R4X3Bvd2Vycyhwcml2LCBwcml2LT5tYXhfdHhf cG93LA0KPiA+ICsJCQkJCWNoYW5uZWwtPmh3X3ZhbHVlLCBiYW5kLCB3aWR0aCwgc3ViX2NoKTsN Cj4gPiArDQo+ID4gKwkJcHJpdi0+cG93aW5pdGVkIHw9IDI7DQo+ID4gKwl9DQo+IA0KPiBEaXR0 byBmb3IgdGhlICIyIj8NCj4gDQo+IA0KPiA+ICsJaWYgKChjb25mLT5jaGFuZGVmLndpZHRoID09 IE5MODAyMTFfQ0hBTl9XSURUSF8yMF9OT0hUKSB8fA0KPiA+ICsJICAgIChjb25mLT5jaGFuZGVm LndpZHRoID09IE5MODAyMTFfQ0hBTl9XSURUSF8yMCkpIHsNCj4gPiArCQlwY21kLT5jaG5sX2Zs YWdzLmNobmxfd2lkdGggPSBDSF8yMF9NSFpfV0lEVEg7DQo+ID4gKwkJcGNtZC0+Y2hubF9mbGFn cy5hY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMDsNCj4gPiArCX0gZWxzZSBpZiAoY29u Zi0+Y2hhbmRlZi53aWR0aCA9PSBOTDgwMjExX0NIQU5fV0lEVEhfNDApIHsNCj4gPiArCQlwY21k LT5jaG5sX2ZsYWdzLmNobmxfd2lkdGggPSBDSF80MF9NSFpfV0lEVEg7DQo+ID4gKwkJaWYgKGNv bmYtPmNoYW5kZWYuY2VudGVyX2ZyZXExID4gY2hhbm5lbC0+Y2VudGVyX2ZyZXEpDQo+ID4gKwkJ CXBjbWQtPmNobmxfZmxhZ3MuYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzA7DQo+ID4g KwkJZWxzZQ0KPiA+ICsJCQlwY21kLT5jaG5sX2ZsYWdzLmFjdF9wcmltYXJ5ID0gQUNUX1BSSU1B UllfQ0hBTl8xOw0KPiA+ICsJfSBlbHNlIGlmIChjb25mLT5jaGFuZGVmLndpZHRoID09IE5MODAy MTFfQ0hBTl9XSURUSF84MCkgew0KPiA+ICsJCXBjbWQtPmNobmxfZmxhZ3MuY2hubF93aWR0aCA9 IENIXzgwX01IWl9XSURUSDsNCj4gPiArCQlwY21kLT5jaG5sX2ZsYWdzLmFjdF9wcmltYXJ5ID0N Cj4gPiArCQkJbXdsX2Z3Y21kX2dldF84MG1fcHJpX2Nobmxfb2Zmc2V0KHBjbWQtPmN1cnJfY2hu bCk7DQo+ID4gKwl9DQo+IA0KPiBCdHcsIG1pZ2h0IGJlIHdvcnRoIHJld3JpdGluZyB0aGVzZSBh cyBzd2l0Y2ggc3RhdGVtZW50cy4NCj4gDQo+IFtza2lwcGluZyB0aGUgcmVzdCBvZiB0aGlzIGZp bGUgZm9yIHRoaXMgcm91bmRdDQo+IA0KPiA+ICsvKiAgRGVmaW5lIE9wTW9kZSBmb3IgU29mdEFQ L1N0YXRpb24gbW9kZQ0KPiA+ICsgKg0KPiA+ICsgKiAgVGhlIGZvbGxvd2luZyBtb2RlIHNpZ25h dHVyZSBoYXMgdG8gYmUgd3JpdHRlbiB0byBQQ0kgc2NyYXRjaA0KPiA+ICtyZWdpc3RlciMwDQo+ ID4gKyAqICByaWdodCBhZnRlciBzdWNjZXNzZnVsbHkgZG93bmxvYWRpbmcgdGhlIGxhc3QgYmxv Y2sgb2YgZmlybXdhcmUNCj4gPiArYW5kDQo+ID4gKyAqICBiZWZvcmUgd2FpdGluZyBmb3IgZmly bXdhcmUgcmVhZHkgc2lnbmF0dXJlICAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBIT1NUQ01EX1NU QV9NT0RFICAgICAgICAgICAgICAgIDB4NUENCj4gPiArI2RlZmluZSBIT1NUQ01EX1NPRlRBUF9N T0RFICAgICAgICAgICAgIDB4QTUNCj4gDQo+IFRoaXMgaXMgYSBiaXQgc3RyYW5nZSAtIGhvdyBh cmUgeW91IGFkdmVydGlzaW5nIHRoZSBjYXBhYmlsaXRpZXMgZm9yIHRoaXM/DQo+IA0KPiBBbHNv LCBubyBQMlAgd2hpY2ggcmVxdWlyZXMgY29tYmluYXRpb25zPw0KPiANCj4gPiArc3RhdGljIHZv aWQgbXdsX21hYzgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KPiA+ICsJCQkgICAg c3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLA0KPiA+ICsJCQkgICAgc3RydWN0 IHNrX2J1ZmYgKnNrYik7DQo+IA0KPiBhZ2FpbiwgdHJ5IHRvIGF2b2lkIHN0YXRpYyBmb3J3YXJk IGRlY2xhcmF0aW9ucw0KPiANCj4gPiArc3RhdGljIGlycXJldHVybl90ICgqbXdsX21hYzgwMjEx X2lzcikoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsX3JhdGVzXzI0W10gPSB7DQo+ID4gKwl7IC5iaXRyYXRl ID0gMTAsIC5od192YWx1ZSA9IDIsIH0sDQo+ID4gKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1 ZSA9IDQsIH0sDQo+ID4gKwl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LA0KPiA+ ICsJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMjIsIH0sDQo+ID4gKwl7IC5iaXRyYXRl ID0gMjIwLCAuaHdfdmFsdWUgPSA0NCwgfSwNCj4gDQo+IEludGVyZXN0aW5nIC0gMjIgTUJwcyBz dXBwb3J0IGlzIHZlcnkgcmFyZS4NCj4gDQo+ID4gK3N0cnVjdCBpZWVlODAyMTFfb3BzICptd2xf bWFjODAyMTFfZ2V0X29wcyh2b2lkKSB7DQo+ID4gKwlyZXR1cm4gJm13bF9tYWM4MDIxMV9vcHM7 DQo+ID4gK30NCj4gDQo+IFRoaXMgbG9va3Mgc3RyYW5nZSwgd2h5IHNob3VsZCBpdCBiZSBuZWNl c3NhcnkgcmF0aGVyIHRoYW4gc2ltcGx5IGV4cG9zaW5nIHRoZQ0KPiBzdHJ1Y3R1cmUgaW4gdGhl IGhlYWRlciBmaWxlPz8NCj4gDQo+ID4gK3ZvaWQgbXdsX21hYzgwMjExX3NldF9pc3IoaXJxcmV0 dXJuX3QgKCppc3IpKGludCBpcnEsIHZvaWQgKmRldl9pZCkpDQo+ID4gK3sNCj4gPiArCVdMREJH X0VOVEVSKERCR19MRVZFTF81KTsNCj4gPiArDQo+ID4gKwltd2xfbWFjODAyMTFfaXNyID0gaXNy Ow0KPiANCj4gVGhpcyBkb2Vzbid0IHNlZW0gcmlnaHQgLSB5b3Ugc2hvdWxkIGF2b2lkIGdsb2Jh bCBzdGF0ZSwgYnV0IHN0b3JlIHN0YXRlIHBlcg0KPiBkZXZpY2UuDQo+IA0KPiA+ICsJaW5kZXgg PSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsNCj4gPiArDQo+ID4gKwltd2xfdHhfeG1pdCho dywgaW5kZXgsIGNvbnRyb2wtPnN0YSwgc2tiKTsNCj4gDQo+IHdoeSBwYXNzIHRoZSBpbmRleCBh bmQgc3RhdGlvbiBzZXBhcmF0ZWx5LCBzaW5jZSB0aGV5J3JlIGJvdGggaW4gdGhlIHNrYj8NCj4g DQo+ID4gKwlyYyA9IG13bF9md2NtZF9yYWRpb19lbmFibGUoaHcpOw0KPiA+ICsNCj4gPiArCWlm ICghcmMpDQo+ID4gKwkJcmMgPSBtd2xfZndjbWRfc2V0X3JhdGVfYWRhcHRfbW9kZShodywgMCk7 DQo+ID4gKw0KPiA+ICsJaWYgKCFyYykNCj4gPiArCQlyYyA9IG13bF9md2NtZF9zZXRfd21tX21v ZGUoaHcsIHRydWUpOw0KPiA+ICsNCj4gPiArCWlmICghcmMpDQo+ID4gKwkJcmMgPSBtd2xfZndj bWRfc2V0X2R3ZHNfc3RhbW9kZShodywgdHJ1ZSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFyYykNCj4g PiArCQlyYyA9IG13bF9md2NtZF9zZXRfZndfZmx1c2hfdGltZXIoaHcsIDApOw0KPiANCj4gVGhp cyBpcyBwcmV0dHkgbm9uLXN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGNvZGUgZm9yIHRoZSBrZXJu ZWwsIGJldHRlciByZXdyaXRlDQo+IHdpdGggZ290by4NCj4gDQo+ID4gKwkvKiBTZXR1cCBkcml2 ZXIgcHJpdmF0ZSBhcmVhLg0KPiA+ICsJKi8NCj4gPiArCW13bF92aWYgPSBNV0xfVklGKHZpZik7 DQo+ID4gKwltZW1zZXQobXdsX3ZpZiwgMCwgc2l6ZW9mKCptd2xfdmlmKSk7DQo+IA0KPiBUaGUg YXJlYSBzaG91bGQgYWxyZWFkeSBiZSBtZW1zZXQgdG8gMCwgdW5sZXNzIHRoZSBpbnRlcmZhY2Ug aGFkIGJlZW4gYWRkZWQNCj4gYmVmb3JlLiBOb3Qgc3VyZSB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBv ciBub3QsIGJ1dCB5b3Ugc2hvdWxkIGJlIGF3YXJlLg0KPiANCj4gPiArCXByaXYtPm1hY2lkc191 c2VkIHw9IDEgPDwgbXdsX3ZpZi0+bWFjaWQ7DQo+IA0KPiBUaGUgbWFjLUlEIGhhbmRsaW5nIHdv dWxkIGFwcGVhciB0byBiZSBtaXNzaW5nIGxvY2tpbmc/IFVubGVzcyB5b3UgcmVhbGx5DQo+IG5l dmVyIGV2ZXIgYWNjZXNzIGl0IGZyb20gb3V0c2lkZSB0aGUgYWRkL3JlbW92ZSBjb250ZXh0Lg0K PiANCj4gPiArCQlyYyA9IG13bF9md2NtZF9zZXRfcmZfY2hhbm5lbChodywgY29uZik7DQo+ID4g Kw0KPiA+ICsJCWlmIChyYykNCj4gPiArCQkJZ290byBvdXQ7DQo+IA0KPiBJJ2QgcmVtb3ZlIHRo b3NlIGV4dHJhIGJsYW5rIGxpbmVzIGFmdGVyIHRoZSBhc3NpZ25tZW50cywgYW5kIEkgbm90ZSB0 aGF0IGhlcmUNCj4geW91IHVzZWQgbW9yZSBjdXN0b21hcnkgc3R5bGUgd2l0aCBnb3Rvcy4NCj4g DQo+ID4gK3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsDQo+ID4gKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KPiA+ICsJCQkJc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCj4gDQo+IFBsZWFzZSBjb25zaWRlciBpbXBsZW1lbnRp bmcgc3RhX3N0YXRlLCBJIGhvcGUgd2UgY2FuIHBlcmhhcHMgb25lIGRheSBnZXQNCj4gcmlkIG9m IHN0YV9hZGQvc3RhX3JlbW92ZS4NCj4gDQo+IA0KPiA+ICsJaWYgKG13bF92aWYtPmlzX3N0YSkN Cj4gPiArCQltd2xfZndjbWRfc2V0X25ld19zdG5fZGVsKGh3LCB2aWYsIHN0YS0+YWRkcik7DQo+ IA0KPiBUaGF0IHNlZW1zIHN1c3BpY2lvdXMsIGl0IHNob3VsZG4ndCBiZSBuZWVkZWQgdG8gZGVs ZXRlIGJlZm9yZSB5b3UgYWRkPw0KPiANCj4gPiArc3RhdGljIGludCBtd2xfbWFjODAyMTFfYW1w ZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KPiA+ICsJCQkJICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLA0KPiA+ICsJCQkJICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9t bG1lX2FjdGlvbiBhY3Rpb24sDQo+ID4gKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEsDQo+ID4gKwkJCQkgICAgIHUxNiB0aWQsIHUxNiAqc3NuLCB1OCBidWZfc2l6ZSkgew0KPiA+ ICsJaW50IGksIHJjID0gMDsNCj4gPiArCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2 Ow0KPiA+ICsJc3RydWN0IG13bF9hbXBkdV9zdHJlYW0gKnN0cmVhbTsNCj4gPiArCXU4ICphZGRy ID0gc3RhLT5hZGRyLCBpZHg7DQo+ID4gKwlzdHJ1Y3QgbXdsX3N0YSAqc3RhX2luZm8gPSBNV0xf U1RBKHN0YSk7DQo+ID4gKw0KPiA+ICsJV0xEQkdfRU5URVIoREJHX0xFVkVMXzUpOw0KPiA+ICsN Cj4gPiArCWlmICghKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikp IHsNCj4gPiArCQlXTERCR19FWElUX0lORk8oREJHX0xFVkVMXzUsICJubyBIVyBBTVBEVSIpOw0K PiA+ICsJCXJldHVybiAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+IA0KPiBJJ20gYWxtb3N0IGNlcnRh aW4gbWFjODAyMTEgY2hlY2tzIHRoaXMgYWxyZWFkeSA6KQ0KPiANCj4gPiArCWNhc2UgSUVFRTgw MjExX0FNUERVX1RYX1NUQVJUOg0KPiA+ICsJCS8qIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlIHRo ZSBodyBxdWV1ZXMgbWF5IGNvbnRhaW4gb3V0Z29pbmcNCj4gPiArCQkgKiBwYWNrZXRzIGZvciB0 aGlzIFJBL1RJRCB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGlzIEJBDQo+ID4gKwkJICogc2Vzc2lv bi4gIFRoZSBodyB3aWxsIGFzc2lnbiBzZXF1ZW5jZSBudW1iZXJzIHRvIHRoZXNlDQo+ID4gKwkJ ICogcGFja2V0cyBhcyB0aGV5IGdvIG91dC4gIFNvIGlmIHdlIHF1ZXJ5IHRoZSBodyBmb3IgaXRz IG5leHQNCj4gPiArCQkgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHVzZSB0aGF0IGZvciB0aGUgU1NO IGhlcmUsIGl0IG1heSBlbmQgdXANCj4gPiArCQkgKiBiZWluZyB3cm9uZywgd2hpY2ggd2lsbCBs ZWFkIHRvIHNlcXVlbmNlIG51bWJlciBtaXNtYXRjaCBhdA0KPiA+ICsJCSAqIHRoZSByZWNpcGll bnQuICBUbyBhdm9pZCB0aGlzLCB3ZSByZXNldCB0aGUgc2VxdWVuY2UgbnVtYmVyDQo+ID4gKwkJ ICogdG8gTyBmb3IgdGhlIGZpcnN0IE1QRFUgaW4gdGhpcyBCQSBzdHJlYW0uDQo+ID4gKwkJICov DQo+ID4gKwkJKnNzbiA9IDA7DQo+IA0KPiBJJ20gbm90IHN1cmUgdGhhdCBkb2VzIHdoYXQgeW91 IHRoaW5rIGl0IGRvZXM/ICJzc24iIGlzIGp1c3Qgd2hhdA0KPiBtYWM4MDIxMSB0ZWxscyB0aGUg cmVtb3RlIHNpZGUsIHdoaWNoIHJlYWxseSBzaG91bGRuJ3QgYmUgMCBub3Igc2hvdWxkIGl0IGJl DQo+IHJlc2V0IHNpbmNlIG90aGVyd2lzZSB0aGUgcGVlciB3aWxsIGV4cGVjdCBzb21ldGhpbmcg ZWxzZToNCj4gDQo+IEltYWdpbmUgeW91J3JlIGF0IHNlcW5vIDB4ZjAwIG5vdywgd2l0aCBzc249 MCB0aGUgcGVlciB3b3VsZCBzdGlsbCBleHBlY3QNCj4gMHgxMDAgcGFja2V0cyBiZWZvcmUgYWdn cmVnYXRpb24gc3RhcnRzLiBUaGF0J3MgcHJvYmFibHkgbm90IHNvIGJhZCB0aG91Z2gsDQo+IGJ1 dCBpbWFnaW5lIHlvdSdyZSBhdCAwIGF0IHRoaXMgbW9tZW50IGZvciB3cmFwcGluZyByZWFzb25z IC4uLiBzZWVtcyB0aGF0DQo+IHdvdWxkIGdldCBjb25mdXNlZC4NCj4gDQo+ID4gKwkJLyogUmVs ZWFzZSB0aGUgbG9jayBiZWZvcmUgd2UgZG8gdGhlIHRpbWUgY29uc3VtaW5nIHN0dWZmDQo+ID4g KwkJKi8NCj4gPiArCQlTUElOX1VOTE9DSygmcHJpdi0+bG9ja3Muc3RyZWFtX2xvY2spOw0KPiA+ ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FNUERVX0FUVEVNUFRTOyBpKyspIHsNCj4g PiArCQkJLyogQ2hlY2sgaWYgbGluayBpcyBzdGlsbCB2YWxpZA0KPiA+ICsJCQkqLw0KPiA+ICsJ CQlpZiAoIXN0YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkKSB7DQo+ID4gKwkJCQlTUElOX0xPQ0so JnByaXYtPmxvY2tzLnN0cmVhbV9sb2NrKTsNCj4gPiArCQkJCW13bF9md2NtZF9yZW1vdmVfc3Ry ZWFtKGh3LCBzdHJlYW0pOw0KPiA+ICsJCQkJU1BJTl9VTkxPQ0soJnByaXYtPmxvY2tzLnN0cmVh bV9sb2NrKTsNCj4gPiArCQkJCVdMREJHX0VYSVRfSU5GTyhEQkdfTEVWRUxfNSwNCj4gPiArCQkJ CQkJImxpbmsgaXMgbm8gdmFsaWQgbm93Iik7DQo+ID4gKwkJCQlyZXR1cm4gLUVCVVNZOw0KPiA+ ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlyYyA9IG13bF9md2NtZF9jaGVja19iYShodywgc3RyZWFt LCB2aWYpOw0KPiA+ICsNCj4gPiArCQkJaWYgKCFyYykNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsN Cj4gPiArCQkJV0xfTVNFQ19TTEVFUCgxMDAwKTsNCj4gPiArCQl9DQo+IA0KPiBUaGF0IHNlZW1z IEZBUiB0b28gbG9uZyB0byBkbyBpbiB0aGUgY29udGV4dCBvZiBtYWM4MDIxMSdzIHdvcmsgcXVl dWUsIGl0J2xsDQo+IHN0YWxsIGEgbG90IG9mIG90aGVyIHByb2Nlc3NpbmcuIFlvdSBzaG91bGQg ZG8gdGhpcyBhc3luY2hyb25vdXNseS4NCj4gDQo+ID4gKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFO R0VEX0VSUF9QUkVBTUJMRSkgew0KPiA+ICsJCW13bF9md2NtZF9zZXRfcmFkaW9fcHJlYW1ibGUo aHcsDQo+ID4gKwkJCQkJICAgICB2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpICYm IHZpZi0+YnNzX2NvbmYuYXNzb2MpIHsNCj4gPiArCQltd2xfZndjbWRfc2V0X2FpZChodywgdmlm LCAodTggKil2aWYtPmJzc19jb25mLmJzc2lkLA0KPiA+ICsJCQkJICB2aWYtPmJzc19jb25mLmFp ZCk7DQo+ID4gKwl9DQo+IA0KPiBObyBuZWVkIGZvciBicmFjZXMuDQo+IA0KPiA+ICsJCWlmICgo aW5mby0+c3NpZFswXSAhPSAnXDAnKSAmJg0KPiA+ICsJCSAgICAoaW5mby0+c3NpZF9sZW4gIT0g MCkgJiYNCj4gPiArCQkgICAgKCFpbmZvLT5oaWRkZW5fc3NpZCkpDQo+ID4gKwkJCW13bF9md2Nt ZF9icm9hZGNhc3Rfc3NpZF9lbmFibGUoaHcsIHZpZiwgdHJ1ZSk7DQo+ID4gKwkJZWxzZQ0KPiA+ ICsJCQltd2xfZndjbWRfYnJvYWRjYXN0X3NzaWRfZW5hYmxlKGh3LCB2aWYsIGZhbHNlKTsNCj4g PiArCX0NCj4gDQo+IFdoeSBkb2VzIHRoZSBmaXJtd2FyZSBuZWVkIHRvIGtub3cgYWJvdXQgdGhp cz8gV2hhdCBwYXJ0IGRvZXMgaXQgb2ZmbG9hZA0KPiB0aGF0IG1ha2VzIHRoaXMgbmVjZXNzYXJ5 PyBUaGlzIHNlZW1zIGEgYml0IGxpa2UgYSBoYWNrIHNpbmNlIHdlIGFscmVhZHkgaGF2ZQ0KPiB0 aGlzIGluIHN0cnVjdCBjZmc4MDIxMV9hcF9zZXR0aW5ncywgYnV0IHBlcmhhcHMganVzdCBhcmUg bWlzc2luZyB0byBwYXNzIGl0DQo+IHRocm91Z2ggdG8gdGhlIGRyaXZlcj8gVW5sZXNzIHlvdSBo YXZlIHNvbWUgb2ZmbG9hZHMgdGhvdWdoIGl0IHNob3VsZG4ndCBiZQ0KPiBuZWVkZWQ/DQo+IA0K PiA+ICsJYmFuZC0+dmh0X2NhcC5jYXAgfD0NCj4gSUVFRTgwMjExX1ZIVF9DQVBfU1VfQkVBTUZP Uk1FUl9DQVBBQkxFOw0KPiA+ICsJYmFuZC0+dmh0X2NhcC5jYXAgfD0NCj4gSUVFRTgwMjExX1ZI VF9DQVBfU1VfQkVBTUZPUk1FRV9DQVBBQkxFOw0KPiA+ICsJYmFuZC0+dmh0X2NhcC5jYXAgfD0N Cj4gSUVFRTgwMjExX1ZIVF9DQVBfTVVfQkVBTUZPUk1FUl9DQVBBQkxFOw0KPiA+ICsJYmFuZC0+ dmh0X2NhcC5jYXAgfD0NCj4gSUVFRTgwMjExX1ZIVF9DQVBfTVVfQkVBTUZPUk1FRV9DQVBBQkxF Ow0KPiANCj4gWW91IHNob3VsZCBwcm9iYWJseSBub3QgeWV0IGFkdmVydGlzZSBNVV9CRUFNRk9S TUVFIHNpbmNlIG1hYzgwMjExDQo+IGRvZXNuJ3QgeWV0IGhhdmUgdGhlIGxvZ2ljIHRvIHByb3Bl cmx5IHNwbGl0IHRoYXQgcGVyIHZpcnR1YWwgaW50ZXJmYWNlIC4uLiBXZSdyZQ0KPiB3b3JraW5n IG9uIHRoYXQuIEhvdyBjb21lIHlvdSBoYXZlbid0IHRob3VnaHQgYWJvdXQgZ3JvdXAgY29sbGlz aW9ucz8gSQ0KPiB0aG91Z2h0IHRoaXMgZHJpdmVyIHN1cHBvcnRlZCA+MSB2aXJ0dWFsIGNsaWVu dCBpbnRlcmZhY2UuDQo+IA0KPiA+ICsJLyogRXh0cmEgaGVhZHJvb20gaXMgdGhlIHNpemUgb2Yg dGhlIHJlcXVpcmVkIERNQSBoZWFkZXINCj4gPiArCSAqIG1pbnVzIHRoZSBzaXplIG9mIHRoZSBz bWFsbGVzdCA4MDIuMTEgZnJhbWUgKENUUyBmcmFtZSkuDQo+ID4gKwkgKi8NCj4gPiArCWh3LT5l eHRyYV90eF9oZWFkcm9vbSA9DQo+ID4gKwkJc2l6ZW9mKHN0cnVjdCBtd2xfZG1hX2RhdGEpIC0g c2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3RzKTsNCj4gDQo+IElmIHlvdSBoYXZlIGFuIFMvRyBE TUEgZW5naW5lLCBjb25zaWRlciBhdm9pZGluZyB0aGlzLCBpdCdzIG9mdGVuIG5vdCB2ZXJ5DQo+ IGVmZmljaWVudC4NCj4gDQo+ID4gKwkvKiBRdWV1ZSBBRERCQSByZXF1ZXN0IGluIHRoZSByZXNw ZWN0aXZlIGRhdGEgcXVldWUuICBXaGlsZSBzZXR0aW5nIHVwDQo+ID4gKwkgKiB0aGUgYW1wZHUg c3RyZWFtLCBtYWM4MDIxMSBxdWV1ZXMgZnVydGhlciBwYWNrZXRzIGZvciB0aGF0DQo+ID4gKwkg KiBwYXJ0aWN1bGFyIHJhL3RpZCBwYWlyLiAgSG93ZXZlciwgcGFja2V0cyBwaWxlZCB1cCBpbiB0 aGUgaGFyZHdhcmUNCj4gPiArCSAqIGZvciB0aGF0IHJhL3RpZCBwYWlyIHdpbGwgc3RpbGwgZ28g b3V0LiBBRERCQSByZXF1ZXN0IGFuZCB0aGUNCj4gPiArCSAqIHJlbGF0ZWQgZGF0YSBwYWNrZXRz IGdvaW5nIG91dCBmcm9tIGRpZmZlcmVudCBxdWV1ZXMgYXN5bmNocm9ub3VzbHkNCj4gPiArCSAq IHdpbGwgY2F1c2UgYSBzaGlmdCBpbiB0aGUgcmVjZWl2ZXIgd2luZG93IHdoaWNoIG1pZ2h0IHJl c3VsdCBpbg0KPiA+ICsJICogYW1wZHUgcGFja2V0cyBnZXR0aW5nIGRyb3BwZWQgYXQgdGhlIHJl Y2VpdmVyIGFmdGVyIHRoZSBzdHJlYW0gaGFzDQo+ID4gKwkgKiBiZWVuIHNldHVwLg0KPiA+ICsJ ICovDQo+IA0KPiBUaGF0J3Mgd2h5IHlvdSdyZSBzdXBwb3NlZCB0byBzZXQgdGhlIFNTTiBjb3Jy ZWN0bHkgLi4uIDopDQo+IA0KPiA+ICsJZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9P Rl9ERVNDX0RBVEE7IG51bSsrKSB7DQo+ID4gKwkJd2hpbGUgKFNUQUxFX1RYRChudW0pICYmIChT VEFMRV9UWEQobnVtKS0+c3RhdHVzICYNCj4gPiArCQkgICAgICAgRU5ESUFOX1NXQVAzMihFQUdM RV9UWERfU1RBVFVTX09LKSkgJiYNCj4gPiArCQkgICAgICAgKCEoU1RBTEVfVFhEKG51bSktPnN0 YXR1cyAmDQo+ID4gKwkJICAgICAgIEVORElBTl9TV0FQMzIoRUFHTEVfVFhEX1NUQVRVU19GV19P V05FRCkpKSkgew0KPiA+ICsJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsDQo+ID4gKwkJ CQkJIEVORElBTl9TV0FQMzIoU1RBTEVfVFhEKG51bSktPnBrdF9wdHIpLA0KPiA+ICsJCQkJCSBT VEFMRV9UWEQobnVtKS0+cHNrX2J1ZmYtPmxlbiwNCj4gPiArCQkJCQkgUENJX0RNQV9UT0RFVklD RSk7DQo+ID4gKwkJCWRvbmVfc2tiID0gU1RBTEVfVFhEKG51bSktPnBza19idWZmOw0KPiA+ICsJ CQlyYXRlX2luZm8gPSBTVEFMRV9UWEQobnVtKS0+cmF0ZV9pbmZvOw0KPiA+ICsJCQlTVEFMRV9U WEQobnVtKS0+cGt0X2xlbiA9IDA7DQo+ID4gKwkJCVNUQUxFX1RYRChudW0pLT5wc2tfYnVmZiA9 IE5VTEw7DQo+ID4gKwkJCVNUQUxFX1RYRChudW0pLT5zdGF0dXMgPQ0KPiA+ICsJCQkJRU5ESUFO X1NXQVAzMihFQUdMRV9UWERfU1RBVFVTX0lETEUpOw0KPiA+ICsJCQlwcml2LT5md19kZXNjX2Nu dFtudW1dLS07DQo+ID4gKwkJCVNUQUxFX1RYRChudW0pID0gU1RBTEVfVFhEKG51bSktPnBuZXh0 Ow0KPiA+ICsJCQl3bWIoKTsgLyogbWVtb3J5IGJhcnJpZXIgKi8NCj4gDQo+IFRoYXQncyBub3Qg YSB2ZXJ5IGdvb2QgY29tbWVudC4gQXJlIHlvdSBzdXJlIHRoYXQncyBjb3JyZWN0IGJ0dz8gSXQg ZG9lc24ndA0KPiBtYWtlIG11Y2ggc2Vuc2UgdG8gbWUgaGVyZS4NCj4gDQo+ID4gKwkJCQlDVVJS X1RYRChudW0pLnN0YXR1cyA9DQo+ID4gKwkJCQkJRU5ESUFOX1NXQVAzMihFQUdMRV9UWERfU1RB VFVTX0lETEUpOw0KPiA+ICsJCQkJQ1VSUl9UWEQobnVtKS5wc2tfYnVmZiA9IE5VTEw7DQo+ID4g KwkJCQlDVVJSX1RYRChudW0pLnBrdF9wdHIgPSAwOw0KPiA+ICsJCQkJQ1VSUl9UWEQobnVtKS5w a3RfbGVuID0gMDsNCj4gDQo+IFRoYXQncyBhIGJpdCBtYWNyby1oZWF2eSBmb3IgbXkgdGFzdGUg LSB3aHkgbm90IGp1c3QgaGF2ZSBhIGxvY2FsIHZhcmlhYmxlDQo+IGN1cnJfdHhkPw0KPiANCj4g PiArc3RhdGljIGlubGluZSB2b2lkIG13bF90eF9pbnNlcnRfY2NtcF9oZHIodTggKnBjY21wX2hk ciwNCj4gPiArCQkJCQkgIHU4IGtleV9pZCwgdTE2IGl2MTYsIHUzMiBpdjMyKSB7DQo+ID4gKwkq KCh1MTYgKilwY2NtcF9oZHIpID0gaXYxNjsNCj4gPiArCXBjY21wX2hkclsyXSA9IDA7DQo+ID4g KwlwY2NtcF9oZHJbM10gPSBFWFRfSVYgfCAoa2V5X2lkIDw8IDYpOw0KPiA+ICsJKigodTMyICop JnBjY21wX2hkcls0XSkgPSBpdjMyOw0KPiA+ICt9DQo+IA0KPiBXaHkgZG9uJ3QgeW91IGxldCBt YWM4MDIxMSBkbyB0aGlzPw0KPiANCj4gam9oYW5uZXMNCg0K