From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:37789 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751859AbdBHDV1 (ORCPT ); Tue, 7 Feb 2017 22:21:27 -0500 From: David Lin To: Steve deRosier CC: Kalle Valo , "linux-wireless@vger.kernel.org" , Johannes Berg , Chor Teck Law , James Lin , Pete Hsieh Subject: RE: [EXT] Re: [PATCH v9] Add new mac80211 driver mwlwifi. Date: Wed, 8 Feb 2017 02:50:38 +0000 Message-ID: <990cae988bbd40b3bd46e8ff03bf9f82@SC-EXCH02.marvell.com> (sfid-20170208_042133_208912_88A96CEF) References: <260962939eeb4dbbb6e462cc010aac21@SC-EXCH02.marvell.com> In-Reply-To: Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: PiBGcm9tOiBzdGV2ZS5kZXJvc2llckBnbWFpbC5jb20gV3JvdGU6DQo+IEhpIERhdmlkLA0KPiAN Cj4gRmlyc3Qgb2ZmLCBJIHdhbnRlZCB0byBzYXkgdGhhbmsteW91IGZvciB5b3VyIHdvcmsgYW5k IGVmZm9ydCBpbiB0cnlpbmcgdG8gZ2V0DQo+IG13bHdpZmkgdXBzdHJlYW0uIE15IGNvbW1lbnRz IGFyZSBpbi1saW5lIHdpdGggbXkgZ2VuZXJhbCBub3Rlcw0KPiBhZnRlcndhcmRzLg0KPiANCj4g T24gVHVlLCBEZWMgMjAsIDIwMTYgYXQgODoxMSBQTSwgRGF2aWQgTGluIDxkbGluQG1hcnZlbGwu Y29tPiB3cm90ZToNCj4gDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21h cnZlbGwvbXdsd2lmaS9kZWJ1Z2ZzLmgNCj4gPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS9kZWJ1Z2ZzLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 IDAwMDAwMDAuLmI0YzNlYjMNCj4gPiArLyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5l cyBkZWJ1ZyBmcyByZWxhdGVkIGZ1bmN0aW9ucy4gKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX01X TF9ERUJVR0ZTX0hfDQo+ID4gKyNkZWZpbmUgX01XTF9ERUJVR0ZTX0hfDQo+ID4gKw0KPiA+ICt2 b2lkIG13bF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOyB2b2lkDQo+ID4g K213bF9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7DQo+ID4gKw0KPiAN Cj4gWW91IHNob3VsZCBndWFyZCB0aGVzZSBzbyB0aGV5IGRlZmluZSB0byBlbXB0eSBmdW5jdGlv bnMgaWYNCj4gQ09ORklHX0RFQlVHX0ZTIGlzbid0IGVuYWJsZWQgc28gdGhleSBjYW4gYmUgdXNl ZCBieSBhIGNhbGxlciB3aXRob3V0DQo+IGV4cGxpY2l0IGd1YXJkcy4NCj4gDQoNCkkgd2lsbCBt b2RpZnkgaXQuDQoNCj4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFy dmVsbC9td2x3aWZpL2Rldi5oDQo+ID4gYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213 bHdpZmkvZGV2LmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAu LmM3YjEwYWMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWFydmVsbC9td2x3aWZpL2Rldi5oDQo+IC4uLg0KPiA+ICtzdHJ1Y3QgbXdsX2FtcGR1X3N0 cmVhbSB7DQo+ID4gKyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KPiA+ICsgdTggdGlkOw0K PiA+ICsgdTggc3RhdGU7DQo+ID4gKyB1OCBpZHg7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjaWZk ZWYgQ09ORklHX0RFQlVHX0ZTDQo+ID4gKyNkZWZpbmUgTUFDX1JFR19BRERSX1BDSShvZmZzZXQp ICAgICAgKChwcml2LT5pb2Jhc2UxICsgMHhBMDAwKSArDQo+IChvZmZzZXQpKQ0KPiA+ICsNCj4g PiArI2RlZmluZSBNV0xfQUNDRVNTX01BQyAgICAgICAgICAgICAgICAxDQo+ID4gKyNkZWZpbmUg TVdMX0FDQ0VTU19SRiAgICAgICAgICAgICAgICAgMg0KPiA+ICsjZGVmaW5lIE1XTF9BQ0NFU1Nf QkJQICAgICAgICAgICAgICAgIDMNCj4gPiArI2RlZmluZSBNV0xfQUNDRVNTX0NBVSAgICAgICAg ICAgICAgICA0DQo+ID4gKyNkZWZpbmUgTVdMX0FDQ0VTU19BRERSMCAgICAgICAgICAgICAgNQ0K PiA+ICsjZGVmaW5lIE1XTF9BQ0NFU1NfQUREUjEgICAgICAgICAgICAgIDYNCj4gPiArI2RlZmlu ZSBNV0xfQUNDRVNTX0FERFIgICAgICAgICAgICAgICA3DQo+ID4gKyNlbmRpZg0KPiANCj4gT0ss IEkgZ2V0IHRoYXQgeW91J3JlIG9ubHkgdXNpbmcgdGhlIGFib3ZlIGluIHRoZSBkZWJ1Z2ZzIGZ1 bmN0aW9ucywgYnV0IGFzIGZvcg0KPiBnZW5lcmljIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMs IHRoZXNlIHdvdWxkIGJlIHZhbGlkIG5vIG1hdHRlciBpZg0KPiBDT05GSUdfREVCVUdfRlMgaXMg ZGVmaW5lZC4gSGF2aW5nIHRoZSBndWFyZCBoZXJlIGp1c3Qgc2VlbXMgdG8NCj4gY29tcGxpY2F0 ZSB0aGluZ3MuDQo+IA0KDQpJIHdpbGwgcmVtb3ZlIGl0Lg0KDQo+IA0KPiA+ICsNCj4gPiArc3Ry dWN0IG13bF9wcml2IHsNCj4gPiArIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3Ow0KPiA+ICsgc3Ry dWN0IGZpcm13YXJlICpmd191Y29kZTsNCj4gPiArIGJvb2wgZndfZGV2aWNlX3B3cnRibDsNCj4g PiArIGJvb2wgZm9yYmlkZGVuX3NldHRpbmc7DQo+ID4gKw0KPiA+ICsgc3RydWN0IHRoZXJtYWxf Y29vbGluZ19kZXZpY2UgKmNkZXY7DQo+ID4gKyB1MzIgdGhyb3R0bGVfc3RhdGU7DQo+ID4gKyB1 MzIgcXVpZXRfcGVyaW9kOw0KPiA+ICsgaW50IHRlbXBlcmF0dXJlOw0KPiA+ICsNCj4gPiArI2lm ZGVmIENPTkZJR19ERUJVR19GUw0KPiA+ICsgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHk7DQo+ ID4gKyB1MzIgcmVnX3R5cGU7DQo+ID4gKyB1MzIgcmVnX29mZnNldDsNCj4gPiArIHUzMiByZWdf dmFsdWU7DQo+ID4gKyBpbnQgdHhfZGVzY19udW07DQo+ID4gKyNlbmRpZg0KPiANCj4gV2UncmUg c2F2aW5nIGEgZmV3IGJ5dGVzIGhlcmUgYXQgdGhlIGNvc3Qgb2Ygc29tZSBjb21wbGV4aXR5LiBJ IGNvdWxkIGdvIGVpdGhlcg0KPiB3YXksIGJ1dCBJIGhhdGUgd2hlbiBwcml2IHN0cnVjdHVyZXMg bXV0YXRlLg0KPiANCg0KSSB3aWxsIHJlbW92ZSB0aGUgY29tcGlsZSBjb250cm9sLg0KDQo+IA0K PiA+ICsvKiBEZWZpbmVkIGluIG1hYzgwMjExLmMuICovDQo+ID4gK2V4dGVybiBjb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX29wcyBtd2xfbWFjODAyMTFfb3BzOw0KPiANCj4gRG9lcyB0aGlzIG5lZWQg dG8gYmUgaW4gZGV2Lmg/DQo+IA0KPiANCg0KSXQgY2FuIGJlIG1vdmVkIHRvIG1haW4uYy4NCg0K PiANCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZp L2Z3Y21kLmMNCj4gPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2Nt ZC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi45YzNjY2Y5 DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZl bGwvbXdsd2lmaS9md2NtZC5jDQo+ID4gQEAgLTAsMCArMSwyODM3IEBADQo+ID4gKy8qDQo+ID4g KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0K PiA+ICsgKg0KPiA+ICsgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3Ry aWJ1dGVkIGJ5IE1hcnZlbGwNCj4gPiArSW50ZXJuYXRpb25hbA0KPiA+ICsgKiBMdGQuIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLA0K PiA+ICtKdW5lIDE5OTENCj4gPiArICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJl ZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMNCj4gPiArDQo+ID4gKyNkZWZpbmUgTUFYX1dB SVRfRldfQ09NUExFVEVfSVRFUkFUSU9OUyAgICAgICAgIDIwMDANCj4gPiArI2RlZmluZSBNQVhf V0FJVF9HRVRfSFdfU1BFQ1NfSVRFUkFUT05TICAgICAgICAgMw0KPiA+ICsNCj4gPiArc3RydWN0 IGNtZF9oZWFkZXIgew0KPiA+ICsgX19sZTE2IGNvbW1hbmQ7DQo+ID4gKyBfX2xlMTYgbGVuOw0K PiA+ICt9IF9fcGFja2VkOw0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgbXdsX2Z3Y21kX2Noa19h ZGFwdGVyKHN0cnVjdCBtd2xfcHJpdiAqcHJpdikgew0KPiA+ICsgdTMyIHJlZ3ZhbDsNCj4gPiAr DQo+ID4gKyByZWd2YWwgPSByZWFkbChwcml2LT5pb2Jhc2UxICsgTUFDUkVHX1JFR19JTlRfQ09E RSk7DQo+IA0KPiBDb3VsZG4ndCB0aGUgYWJvdmUgYmUgb25lIGxpbmU/DQo+DQoNClllcy4gSSB3 aWxsIG1vZGlmeSBpdC4NCiANCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG13bF9md2NtZF9n ZXRfdHhfcG93ZXJzKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgdTE2ICpwb3dsaXN0LA0KPiB1MTYg Y2gsDQo+ID4gKyAgIHUxNiBiYW5kLCB1MTYgd2lkdGgsIHUxNiBzdWJfY2gpDQo+ID4gK3sNCj4g PiArIHN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93ZXIgKnBjbWQ7ICBpbnQgaTsNCj4g PiArDQo+ID4gKyBwY21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfdHhfcG93ZXIgKikm cHJpdi0+cGNtZF9idWZbMF07DQo+IA0KPiBPZnRlbiBoYXBwZW5zLCBzbyBJIHByb2JhYmx5IHdv bid0IGNhdGNoIHRoZW0gYWxsLCBidXQgdGhpcyBjb3VsZCBsaWtld2lzZSBiZQ0KPiBkb25lIGlu IG9uZSBsaW5lLiBUaGVuIGFnYWluLi4uIGxpbmUgbGVuZ3RoIGlzc3Vlcywgc28gNTAvNTAgb24g dGhhdC4NCj4gDQo+DQoNCkkgd2lsbCBtb2RpZnkgaXQuDQoNCj4gPiArDQo+ID4gK3N0YXRpYyB1 OCBtd2xfZndjbWRfZ2V0XzgwbV9wcmlfY2hubCh1OCBjaGFubmVsKSB7DQo+ID4gKyB1OCBhY3Rf cHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMDsNCj4gPiArDQo+ID4gKyBzd2l0Y2ggKGNoYW5u ZWwpIHsNCj4gPiArIGNhc2UgMzY6DQo+ID4gKyBhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NI QU5fMDsNCj4gPiArIGJyZWFrOw0KPiA+ICsgY2FzZSA0MDoNCj4gPiArIGFjdF9wcmltYXJ5ID0g QUNUX1BSSU1BUllfQ0hBTl8xOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDQ0Og0KPiA+ICsg YWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQo+ID4gKyBicmVhazsNCj4gPiArIGNh c2UgNDg6DQo+ID4gKyBhY3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMzsNCj4gPiArIGJy ZWFrOw0KPiA+ICsgY2FzZSA1MjoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hB Tl8wOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDU2Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBB Q1RfUFJJTUFSWV9DSEFOXzE7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgNjA6DQo+ID4gKyBh Y3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMjsNCj4gPiArIGJyZWFrOw0KPiA+ICsgY2Fz ZSA2NDoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KPiA+ICsgYnJl YWs7DQo+ID4gKyBjYXNlIDEwMDoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hB Tl8wOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDEwNDoNCj4gPiArIGFjdF9wcmltYXJ5ID0g QUNUX1BSSU1BUllfQ0hBTl8xOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDEwODoNCj4gPiAr IGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8yOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBj YXNlIDExMjoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KPiA+ICsg YnJlYWs7DQo+ID4gKyBjYXNlIDExNjoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllf Q0hBTl8wOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDEyMDoNCj4gPiArIGFjdF9wcmltYXJ5 ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDEyNDoNCj4g PiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8yOw0KPiA+ICsgYnJlYWs7DQo+ID4g KyBjYXNlIDEyODoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KPiA+ ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDEzMjoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1B UllfQ0hBTl8wOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDEzNjoNCj4gPiArIGFjdF9wcmlt YXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDE0MDoN Cj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8yOw0KPiA+ICsgYnJlYWs7DQo+ ID4gKyBjYXNlIDE0NDoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0K PiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDE0OToNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BS SU1BUllfQ0hBTl8wOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDE1MzoNCj4gPiArIGFjdF9w cmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8xOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDE1 NzoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8yOw0KPiA+ICsgYnJlYWs7 DQo+ID4gKyBjYXNlIDE2MToNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8z Ow0KPiA+ICsgYnJlYWs7DQo+ID4gKyB9DQo+ID4gKw0KPiA+ICsgcmV0dXJuIGFjdF9wcmltYXJ5 Ow0KPiA+ICt9DQo+ID4gKw0KPiANCj4gSWdub3JhbmNlIHNwZWFraW5nIGhlcmUgcGVyaGFwcywg YnV0IHRoZSBhYm92ZSBsb29rcyBsaWtlIHNvbWV0aGluZyB0aGF0DQo+IG5lYXJseSBldmVyeSBk cml2ZXIgd291bGQgbmVlZCB0byBkZWFsIHdpdGguIElzbid0IHRoZXJlIGEgaGVscGVyIGZ1bmN0 aW9uIGluDQo+IG1hYzgwMjExIG9yIHNvbWUgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRoYW4gZXhw bGljaXRseSBkb2luZyBhIHN3aXRjaCBsb2dpYw0KPiBsb29rdXA/DQo+IA0KDQpUaGlzIGlzIHRo ZSBmdW5jdGlvbiBuZWVkZWQgZm9yIG91ciBob3N0IGNvbW1hbmQuIFRoZXJlIGlzIG5vIGhlbHBl ciBmdW5jdGlvbiBpbiBtYWM4MDIxMS4NCg0KPiA+ICtpbnQgbXdsX2Z3Y21kX3NldF9uZXdfc3Ru X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCj4gPiArICAgICAgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwNCj4gPiArICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCj4gPiAr ew0KPiA+ICsgc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQo+ID4gKyBzdHJ1Y3Qg bXdsX3ZpZiAqbXdsX3ZpZjsNCj4gPiArIHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0biAq cGNtZDsNCj4gPiArIHUzMiByYXRlczsNCj4gPiArDQo+ID4gKyBtd2xfdmlmID0gbXdsX2Rldl9n ZXRfdmlmKHZpZik7DQo+ID4gKw0KPiA+ICsgcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0 X25ld19zdG4gKikmcHJpdi0+cGNtZF9idWZbMF07DQo+ID4gKw0KPiA+ICsgbXV0ZXhfbG9jaygm cHJpdi0+ZndjbWRfbXV0ZXgpOw0KPiA+ICsNCj4gPiArIG1lbXNldChwY21kLCAweDAwLCBzaXpl b2YoKnBjbWQpKTsNCj4gPiArIHBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENN RF9DTURfU0VUX05FV19TVE4pOw0KPiA+ICsgcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUx NihzaXplb2YoKnBjbWQpKTsgY21kX2hkci5tYWNpZCA9DQo+ID4gKyBwY21kLT5td2xfdmlmLT5t YWNpZDsNCj4gPiArDQo+ID4gKyBwY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihIT1NUQ01EX0FD VF9TVEFfQUNUSU9OX0FERCk7DQo+ID4gKyBpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBF X1NUQVRJT04pIHsNCj4gPiArIHBjbWQtPmFpZCA9IDA7DQo+ID4gKyBwY21kLT5zdG5faWQgPSAw Ow0KPiA+ICsgfSBlbHNlIHsNCj4gPiArIHBjbWQtPmFpZCA9IGNwdV90b19sZTE2KHN0YS0+YWlk KTsNCj4gPiArIHBjbWQtPnN0bl9pZCA9IGNwdV90b19sZTE2KHN0YS0+YWlkKTsNCj4gPiArIH0N Cj4gPiArIGV0aGVyX2FkZHJfY29weShwY21kLT5tYWNfYWRkciwgc3RhLT5hZGRyKTsNCj4gPiAr DQo+ID4gKyBpZiAoaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kID09IE5MODAyMTFfQkFORF8y R0haKSByYXRlcyA9DQo+ID4gKyBzdGEtPnN1cHBfcmF0ZXNbTkw4MDIxMV9CQU5EXzJHSFpdOw0K PiA+ICsgZWxzZQ0KPiA+ICsgcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbTkw4MDIxMV9CQU5EXzVH SFpdIDw8IDU7DQo+ID4gKyBwY21kLT5wZWVyX2luZm8ubGVnYWN5X3JhdGVfYml0bWFwID0gY3B1 X3RvX2xlMzIocmF0ZXMpOw0KPiA+ICsNCj4gPiArIGlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0 ZWQpIHsNCj4gPiArIHBjbWQtPnBlZXJfaW5mby5odF9yYXRlc1swXSA9IHN0YS0+aHRfY2FwLm1j cy5yeF9tYXNrWzBdOw0KPiA+ICsgcGNtZC0+cGVlcl9pbmZvLmh0X3JhdGVzWzFdID0gc3RhLT5o dF9jYXAubWNzLnJ4X21hc2tbMV07DQo+ID4gKyBwY21kLT5wZWVyX2luZm8uaHRfcmF0ZXNbMl0g PSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1syXTsNCj4gPiArIHBjbWQtPnBlZXJfaW5mby5odF9y YXRlc1szXSA9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzNdOw0KPiA+ICsgcGNtZC0+cGVlcl9p bmZvLmh0X2NhcF9pbmZvID0gY3B1X3RvX2xlMTYoc3RhLT5odF9jYXAuY2FwKTsNCj4gPiArIHBj bWQtPnBlZXJfaW5mby5tYWNfaHRfcGFyYW1faW5mbyA9DQo+ID4gKyAoc3RhLT5odF9jYXAuYW1w ZHVfZmFjdG9yICYgMykgfA0KPiA+ICsgKChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ICYgNykg PDwgMik7IH0NCj4gPiArDQo+ID4gKyBpZiAoc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpIHsN Cj4gPiArIHBjbWQtPnBlZXJfaW5mby52aHRfbWF4X3J4X21jcyA9DQo+ID4gKyBjcHVfdG9fbGUz MigqKCh1MzIgKikNCj4gPiArICZzdGEtPnZodF9jYXAudmh0X21jcy5yeF9tY3NfbWFwKSk7DQo+ ID4gKyBwY21kLT5wZWVyX2luZm8udmh0X2NhcCA9IGNwdV90b19sZTMyKHN0YS0+dmh0X2NhcC5j YXApOw0KPiA+ICsgcGNtZC0+cGVlcl9pbmZvLnZodF9yeF9jaGFubmVsX3dpZHRoID0gc3RhLT5i YW5kd2lkdGg7DQo+ID4gKyB9DQo+ID4gKw0KPiA+ICsgcGNtZC0+aXNfcW9zX3N0YSA9IHN0YS0+ d21lOw0KPiA+ICsgcGNtZC0+cW9zX2luZm8gPSAoKHN0YS0+dWFwc2RfcXVldWVzIDw8IDQpIHwg KHN0YS0+bWF4X3NwIDw8IDEpKTsNCj4gPiArDQo+ID4gKyBpZiAobXdsX2Z3Y21kX2V4ZWNfY21k KHByaXYsIEhPU1RDTURfQ01EX1NFVF9ORVdfU1ROKSkgew0KPiA+ICsgbXV0ZXhfdW5sb2NrKCZw cml2LT5md2NtZF9tdXRleCk7IHdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQNCj4gPiArIGV4 ZWN1dGlvblxuIik7IHJldHVybiAtRUlPOyB9DQo+ID4gKw0KPiA+ICsgaWYgKHZpZi0+dHlwZSA9 PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQo+ID4gKyBldGhlcl9hZGRyX2NvcHkocGNtZC0+ bWFjX2FkZHIsIG13bF92aWYtPnN0YV9tYWMpOw0KPiA+ICsNCj4gPiArIGlmIChtd2xfZndjbWRf ZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX05FV19TVE4pKSB7DQo+ID4gKyBtdXRleF91 bmxvY2soJnByaXYtPmZ3Y21kX211dGV4KTsgd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZA0K PiA+ICsgZXhlY3V0aW9uXG4iKTsgcmV0dXJuIC1FSU87IH0gfQ0KPiANCj4gT0ssIHRpbWUgdG8g YXNrLiBXaHkgYXJlIHdlIHRlbGxpbmcgdGhlIGZpcm13YXJlIHRoYXQgd2UncmUgY29ubmVjdGVk IHRvDQo+IG91cnNlbHZlcz8gSSB3b3VsZCBwcmVzdW1lIHRoZSBmaXJtd2FyZSBhbHJlYWR5IGtu b3dzIG91ciBNQUMgYWRkcmVzcy4NCj4gDQo+IEkgbm90aWNlZCB0aGlzIG9yaWdpbmFsbHkgYmVj YXVzZSB0aGVyZSdzIGEgbmFzdHkgYnVnIHdpdGggcmVjeWNsaW5nIHRoZQ0KPiBjb21tYW5kIGJ1 ZmZlciAoZm9yIHNkaW8sIGl0J3Mgbm90IHJlbGV2YW50IGZvciB0aGlzIGRyaXZlcikgYW5kIGlu IGRvaW5nDQo+IGV4cGVyaW1lbnRzIEkgbm90aWNlZCB0aGF0IHRocm91Z2hwdXQgc2lnbmlmaWNh bnRseSBpbmNyZWFzZXMgaW4gU1RBIG1vZGUgaWYNCj4gd2UganVzdCBsZWF2ZSBvdXQgdGhlIGVu dGlyZSBjbGF1c2UuDQo+IA0KPiBJbiBicmllZmx5IGV4YW1pbmluZyB0aGUgZmlybXdhcmUgc291 cmNlIEkgc2VlIG5vIHJlYXNvbiB0byBkbyB0aGlzLCBidXQgdGhlcmUncw0KPiBhIGhpZGRlbiBj aHVuayBhbmQgSSBkb24ndCBrbm93IHdoYXQgdGhlIGhhcmR3YXJlIGl0c2VsZiBkb2VzIHdpdGgg dGhlIE1BQw0KPiB0YWJsZS4NCj4gDQo+IFNvLCB3aHkgaXMgaXQgbmVjZXNzYXJ5Pw0KPiANCg0K SSB3aWxsIGNoZWNrLg0KDQo+IA0KPiA+ICtpbnQgbXdsX2Z3Y21kX3NldF9uZXdfc3RuX2RlbChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCj4gPiArICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZiwgdTggKmFkZHIpIHsgIHN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9DQo+ID4gK2h3LT5wcml2 OyAgc3RydWN0IG13bF92aWYgKm13bF92aWY7ICBzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X25ld19z dG4NCj4gPiArKnBjbWQ7DQo+ID4gKw0KPiA+ICsgbXdsX3ZpZiA9IG13bF9kZXZfZ2V0X3ZpZih2 aWYpOw0KPiA+ICsNCj4gPiArIHBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3NldF9uZXdfc3Ru ICopJnByaXYtPnBjbWRfYnVmWzBdOw0KPiA+ICsNCj4gPiArIG11dGV4X2xvY2soJnByaXYtPmZ3 Y21kX211dGV4KTsNCj4gPiArDQo+ID4gKyBtZW1zZXQocGNtZCwgMHgwMCwgc2l6ZW9mKCpwY21k KSk7DQo+ID4gKyBwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhPU1RDTURfQ01EX1NF VF9ORVdfU1ROKTsNCj4gPiArIHBjbWQtPmNtZF9oZHIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9m KCpwY21kKSk7IGNtZF9oZHIubWFjaWQgPQ0KPiA+ICsgcGNtZC0+bXdsX3ZpZi0+bWFjaWQ7DQo+ ID4gKw0KPiA+ICsgcGNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9BQ1RfU1RBX0FD VElPTl9SRU1PVkUpOw0KPiA+ICsgZXRoZXJfYWRkcl9jb3B5KHBjbWQtPm1hY19hZGRyLCBhZGRy KTsNCj4gPiArDQo+ID4gKyBpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01E X1NFVF9ORVdfU1ROKSkgew0KPiA+ICsgbXV0ZXhfdW5sb2NrKCZwcml2LT5md2NtZF9tdXRleCk7 IHdpcGh5X2Vycihody0+d2lwaHksICJmYWlsZWQNCj4gPiArIGV4ZWN1dGlvblxuIik7IHJldHVy biAtRUlPOyB9DQo+ID4gKw0KPiA+ICsgaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9T VEFUSU9OKSB7DQo+ID4gKyBldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIG13bF92aWYt PnN0YV9tYWMpOw0KPiA+ICsNCj4gPiArIGlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9T VENNRF9DTURfU0VUX05FV19TVE4pKSB7DQo+ID4gKyBtdXRleF91bmxvY2soJnByaXYtPmZ3Y21k X211dGV4KTsgd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZA0KPiA+ICsgZXhlY3V0aW9uXG4i KTsgcmV0dXJuIC1FSU87IH0gfQ0KPiA+ICsNCj4gDQo+IERpdHRvLg0KPiANCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3ZGwuYw0KPiA+IGIv ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3ZGwuYw0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uZjRkNWZhMQ0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndkbC5j DQo+IC4uLg0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXdsX2Z3ZGxfdHJpZ19wY2ljbWQoc3Ry dWN0IG13bF9wcml2ICpwcml2KSB7DQo+ID4gK3dyaXRlbChwcml2LT5wcGh5c19jbWRfYnVmLCBw cml2LT5pb2Jhc2UxICsgTUFDUkVHX1JFR19HRU5fUFRSKTsNCj4gPiArDQo+ID4gKyB3cml0ZWwo MHgwMCwgcHJpdi0+aW9iYXNlMSArIE1BQ1JFR19SRUdfSU5UX0NPREUpOw0KPiA+ICsNCj4gPiAr IHdyaXRlbChNQUNSRUdfSDJBUklDX0JJVF9ET09SX0JFTEwsDQo+ID4gKyAgICAgICBwcml2LT5p b2Jhc2UxICsgTUFDUkVHX1JFR19IMkFfSU5URVJSVVBUX0VWRU5UUyk7IH0NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIG13bF9md2RsX3RyaWdfcGNpY21kX2Jvb3Rjb2RlKHN0cnVjdCBtd2xfcHJp diAqcHJpdikgew0KPiA+ICt3cml0ZWwocHJpdi0+cHBoeXNfY21kX2J1ZiwgcHJpdi0+aW9iYXNl MSArIE1BQ1JFR19SRUdfR0VOX1BUUik7DQo+ID4gKw0KPiA+ICsgd3JpdGVsKDB4MDAsIHByaXYt PmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsNCj4gPiArDQo+ID4gKyB3cml0ZWwoTUFD UkVHX0gyQVJJQ19CSVRfRE9PUl9CRUxMLA0KPiA+ICsgICAgICAgcHJpdi0+aW9iYXNlMSArIE1B Q1JFR19SRUdfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOyB9DQo+ID4gKw0KPiANCj4gVW5sZXNzIEkn bSBtaXN0YWtlbiB0aGUgYWJvdmUgdHdvIGZ1bmN0aW9ucyBhcmUgMTAwJSBpZGVudGljYWwuIElu IG15IHZlcnNpb24NCj4gSSBjb2xsYXBzZWQgdGhlbSB0byBhIHNpbmdsZSBvbmUgYW5kIGl0IHdv cmtzIGZpbmUuDQo+IA0KDQpJIHdpbGwgY2hlY2sgYW5kIG1vZGlmeSBpdC4NCg0KPiA+ICtpbnQg bXdsX2Z3ZGxfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpIHsNCj4g Li4uDQo+ID4gKw0KPiA+ICsgd2hpbGUgKHNpemVfZndfZG93bmxvYWRlZCA8IGZ3LT5zaXplKSB7 IGxlbiA9IHJlYWRsKHByaXYtPmlvYmFzZTEgKw0KPiA+ICsgMHhjNDApOw0KPiA+ICsNCj4gPiAr IGlmICghbGVuKQ0KPiA+ICsgYnJlYWs7DQo+ID4gKw0KPiA+ICsgLyogdGhpcyBjb3BpZXMgdGhl IG5leHQgY2h1bmsgb2YgZncgYmluYXJ5IHRvIGJlIGRlbGl2ZXJlZCAqLw0KPiA+ICsgbWVtY3B5 KChjaGFyICopJnByaXYtPnBjbWRfYnVmWzBdLA0KPiA+ICsgICAgICAgKGZ3LT5kYXRhICsgc2l6 ZV9md19kb3dubG9hZGVkKSwgbGVuKTsNCj4gPiArDQo+ID4gKyAvKiB0aGlzIGZ1bmN0aW9uIHdy aXRlcyBwZGF0YSB0byBjMTAsIHRoZW4gd3JpdGUgMiB0byBjMTggKi8NCj4gPiArIG13bF9md2Rs X3RyaWdfcGNpY21kX2Jvb3Rjb2RlKHByaXYpOw0KPiA+ICsNCj4gPiArIC8qIHRoaXMgaXMgYXJi aXRyYXJ5IHBlciB5b3VyIHBsYXRmb3JtOyB3ZSB1c2UgMHhmZmZmICovDQo+ID4gKyBjdXJyX2l0 ZXJhdGlvbiA9IEZXX01BWF9OVU1fQ0hFQ0tTOw0KPiA+ICsNCj4gPiArIC8qIE5PVEU6IHRoZSBm b2xsb3dpbmcgYmFjayB0byBiYWNrIGNoZWNrcyBvbiBDMUMgaXMgdGltZQ0KPiA+ICsgKiBzZW5z aXRpdmUsIGhlbmNlIG1heSBuZWVkIHRvIGJlIHR3ZWFrZWQgZGVwZW5kZW50IG9uIGhvc3QNCj4g PiArICogcHJvY2Vzc29yLiBUaW1lIGZvciBTQzIgdG8gZ28gZnJvbSB0aGUgd3JpdGUgb2YgZXZl bnQgMiB0bw0KPiA+ICsgKiBDMUMgPT0gMiBpcyB+MTMwMCBuU2VjLiBIZW5jZSB0aGUgY2hlY2tp bmdzIG9uIGhvc3QgaGFzIHRvDQo+ID4gKyAqIGNvbnNpZGVyIGhvdyBlZmZpY2llbnQgeW91ciBj b2RlIGNhbiBiZSB0byBtZWV0IHRoaXMgdGltaW5nLA0KPiA+ICsgKiBvciB5b3UgY2FuIGFsdGVy bmF0aXZlbHkgdHdlYWsgdGhpcyByb3V0aW5lcyB0byBmaXQgeW91cg0KPiA+ICsgKiBwbGF0Zm9y bQ0KPiA+ICsgKi8NCj4gPiArIGRvIHsNCj4gPiArIGludF9jb2RlID0gcmVhZGwocHJpdi0+aW9i YXNlMSArIDB4YzFjKTsgaWYgKGludF9jb2RlICE9IDApIGJyZWFrOw0KPiA+ICsgY29uZF9yZXNj aGVkKCk7IGN1cnJfaXRlcmF0aW9uLS07IH0gd2hpbGUgKGN1cnJfaXRlcmF0aW9uKTsNCj4gPiAr DQo+IA0KPiBUaGVyZSdzIHNvbWV0aGluZyBmaXNoeSB3aXRoIHRoZSBhYm92ZS4gSGF2aW5nIHRv ICJ0d2VhayIgZHJpdmVyIHRpbWluZyBiYXNlZA0KPiBvbiBwbGF0Zm9ybSBpcyBhIGh1Z2UgcmVk IGZsYWcuIFRoZXJlJ3MgZ290IHRvIGJlIHNvbWV0aGluZyBiZXR0ZXIgdGhhbiB0aGUNCj4gYWJv dmUuDQo+IA0KDQpJdCB3aWxsIHJlbGVhc2UgQ1BVLg0KDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvbWFjODAyMTEuYw0KPiA+IGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21hYzgwMjExLmMNCj4gLi4uDQo+ID4g K3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywN Cj4gPiArICAgICAgIHUzMiBjaGFuZ2VkKQ0KPiA+ICt7DQo+ID4gKyBzdHJ1Y3QgaWVlZTgwMjEx X2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7ICBpbnQgcmM7DQo+ID4gKw0KPiA+ICsgd2lwaHlfZGVi dWcoaHctPndpcGh5LCAiY2hhbmdlOiAweCV4XG4iLCBjaGFuZ2VkKTsNCj4gPiArDQo+ID4gKyBp ZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSByYyA9DQo+ID4gKyBtd2xfZndj bWRfcmFkaW9fZGlzYWJsZShodyk7IGVsc2UgcmMgPSBtd2xfZndjbWRfcmFkaW9fZW5hYmxlKGh3 KTsNCj4gPiArDQo+ID4gKyBpZiAocmMpDQo+ID4gKyBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyBp ZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7IGludCByYXRlID0g MDsNCj4gPiArDQo+ID4gKyBpZiAoY29uZi0+Y2hhbmRlZi5jaGFuLT5iYW5kID09IE5MODAyMTFf QkFORF8yR0haKSB7DQo+IA0KPiBDYXVzZXMgY29tcGlsZSB3YXJuaW5nLiBTaG91bGQgYmUgSUVF RTgwMjExX0JBTkRfMkdIWi4NCj4gDQoNCk5vLCB5b3UgbmVlZCB0byB1c2UgdXBkYXRlZCBtYWM4 MDIxMS4NCg0KPiANCj4gPiArIG13bF9md2NtZF9zZXRfYXBtb2RlKGh3LCBBUF9NT0RFXzJfNEdI Wl8xMUFDX01JWEVEKTsNCj4gPiArIG13bF9md2NtZF9zZXRfbGlua2FkYXB0X2NzX21vZGUoaHcs DQo+ID4gKyBMSU5LX0NTX1NUQVRFX0NPTlNFUlYpOw0KPiA+ICsgcmF0ZSA9IG13bF9yYXRlc18y NFswXS5od192YWx1ZTsNCj4gPiArIH0gZWxzZSBpZiAoY29uZi0+Y2hhbmRlZi5jaGFuLT5iYW5k ID09IE5MODAyMTFfQkFORF81R0haKSB7DQo+IA0KPiBDYXVzZXMgY29tcGlsZSB3YXJuaW5nLiBT aG91bGQgYmUgSUVFRTgwMjExX0JBTkRfNUdIWi4NCj4gDQo+ID4gK3N0YXRpYyB2b2lkIG13bF9t YWM4MDIxMV9ic3NfaW5mb19jaGFuZ2VkX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcNCj4gKmh3LA0K PiA+ICsgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQo+ID4gKyAgICAgc3RydWN0IGll ZWU4MDIxMV9ic3NfY29uZiAqaW5mbywNCj4gPiArICAgICB1MzIgY2hhbmdlZCkNCj4gPiArew0K PiA+ICsgaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpDQo+ID4gK213bF9m d2NtZF9zZXRfcmFkaW9fcHJlYW1ibGUoaHcsDQo+ID4gKyAgICAgdmlmLT5ic3NfY29uZi51c2Vf c2hvcnRfcHJlYW1ibGUpOw0KPiA+ICsNCj4gPiArIGlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURf QkFTSUNfUkFURVMpIHsgaW50IGlkeDsgaW50IHJhdGU7DQo+ID4gKw0KPiA+ICsgLyogVXNlIGxv d2VzdCBzdXBwb3J0ZWQgYmFzaWMgcmF0ZSBmb3IgbXVsdGljYXN0cw0KPiA+ICsgKiBhbmQgbWFu YWdlbWVudCBmcmFtZXMgKHN1Y2ggYXMgcHJvYmUgcmVzcG9uc2VzIC0tDQo+ID4gKyAqIGJlYWNv bnMgd2lsbCBhbHdheXMgZ28gb3V0IGF0IDEgTWIvcykuDQo+ID4gKyAqLw0KPiA+ICsgaWR4ID0g ZmZzKHZpZi0+YnNzX2NvbmYuYmFzaWNfcmF0ZXMpOyBpZiAoaWR4KSBpZHgtLTsNCj4gPiArDQo+ ID4gKyBpZiAoaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kID09IE5MODAyMTFfQkFORF8yR0ha KQ0KPiANCj4gQ2F1c2VzIGNvbXBpbGUgd2FybmluZy4gU2hvdWxkIGJlIElFRUU4MDIxMV9CQU5E XzJHSFouDQo+IA0KDQpObywgeW91IG5lZWQgdG8gdXNlIHVwZGF0ZWQgbWFjODAyMTEuDQoNCj4g DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9t YWluLmMNCj4gPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9tYWluLmMN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiAuLi4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KPiA+ICsjaWZkZWYgQ09ORklHX09GDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pg0KPiA+ICsjZW5kaWYNCj4gDQo+IElzbid0IG9mLmggaW50ZXJuYWxseSBndWFyZGVkPw0KPiAN Cg0KWWVzLiBJdCBpcyBtZW50aW9uZWQgYnkgSm9oYW5uZXMsIEkgd2lsbCByZW1vdmUgaXQuDQoN Cj4gPiArDQo+ID4gKyNpbmNsdWRlICJzeXNhZHB0LmgiDQo+ID4gKyNpbmNsdWRlICJkZXYuaCIN Cj4gPiArI2luY2x1ZGUgImZ3ZGwuaCINCj4gPiArI2luY2x1ZGUgImZ3Y21kLmgiDQo+ID4gKyNp bmNsdWRlICJ0eC5oIg0KPiA+ICsjaW5jbHVkZSAicnguaCINCj4gPiArI2luY2x1ZGUgImlzci5o Ig0KPiA+ICsjaW5jbHVkZSAidGhlcm1hbC5oIg0KPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZT DQo+ID4gKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiDQo+ID4gKyNlbmRpZg0KPiANCj4gWW91ciBkZWJ1 Z2ZzLmggc2hvdWxkIGJlIGludGVybmFsbHkgZ3VhcmRlZC4gTW9yZSBsYXRlci4uLg0KPiANCg0K U2FtZSBhcyBhYm92ZS4NCg0KPiA+ICsNCj4gPiArI2RlZmluZSBNV0xfREVTQyAgICAgICAgICJN YXJ2ZWxsIDgwMi4xMWFjIFdpcmVsZXNzIE5ldHdvcmsgRHJpdmVyIg0KPiA+ICsjZGVmaW5lIE1X TF9ERVZfTkFNRSAgICAgIk1hcnZlbGwgODAyLjExYWMgQWRhcHRlciINCj4gPiArDQo+ID4gKyNk ZWZpbmUgRklMRV9QQVRIX0xFTiAgICA2NA0KPiA+ICsjZGVmaW5lIENNRF9CVUZfU0laRSAgICAg MHg0MDAwDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXdsX3BjaV9p ZF90YmxbXSA9IHsgIHsNCj4gPiArUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTU1KSwgLmRyaXZl cl9kYXRhID0gTVdMODg2NCwgfSwgIHsNCj4gPiArUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYjM4 KSwgLmRyaXZlcl9kYXRhID0gTVdMODg5NywgfSwgIHsgfSwgfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBzdHJ1Y3QgbXdsX2NoaXBfaW5mbyBtd2xfY2hpcF90YmxbXSA9IHsgIFtNV0w4ODY0XSA9IHsN Cj4gPiArLnBhcnRfbmFtZSA9ICI4OFc4ODY0IiwgIC5md19pbWFnZSA9ICJtd2x3aWZpLzg4Vzg4 NjQuYmluIiwNCj4gPiArLmFudGVubmFfdHggPSBBTlRFTk5BX1RYXzRfQVVUTywgIC5hbnRlbm5h X3J4ID0NCj4gQU5URU5OQV9SWF80X0FVVE8sDQo+ID4gK30sICBbTVdMODg5N10gPSB7ICAucGFy dF9uYW1lID0gIjg4Vzg4OTciLCAgLmZ3X2ltYWdlID0NCj4gPiArIm13bHdpZmkvODhXODg5Ny5i aW4iLCAgLmFudGVubmFfdHggPSBBTlRFTk5BX1RYXzIsICAuYW50ZW5uYV9yeCA9DQo+ID4gK0FO VEVOTkFfUlhfMiwgIH0sIH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4 MDIxMV9jaGFubmVsIG13bF9jaGFubmVsc18yNFtdID0geyAgeyAuYmFuZA0KPiA+ICs9IE5MODAy MTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxLCB9LCAgeyAu YmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdf dmFsdWUgPSAyLCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVy X2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFf QkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0LCB9LCAgeyAuYmFu ZA0KPiA+ICs9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFs dWUgPSA1LCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2Zy ZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFO RF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3LCB9LCAgeyAuYmFuZA0K PiA+ICs9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUg PSA4LCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEg PSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF8y R0haLCAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCwgfSwgIHsgLmJhbmQNCj4g PiArPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0g MTEsIH0sICB7IC5iYW5kDQo+ID4gKz0gTkw4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9 IDI0NjcsIC5od192YWx1ZSA9IDEyLCB9LCAgeyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF8y R0haLCAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMywgfSwgIHsgLmJhbmQNCj4g PiArPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0g MTQsIH0sIH07DQo+ID4gKw0KPiANCj4gU28sIGludGVyZXN0aW5nIHRoaW5nLi4uIHRoZXJlJ3Mg NjIgdXNlcyBvZiBOTDgwMjExX0JBTkRfeCBpbiB0aGlzIGRyaXZlciwgYnV0DQo+IG9ubHkgdGhl IGZldyBzcG90cyBJIG1lbnRpb25lZCBjYXVzZSB3YXJuaW5ncy4gSSBub3RpY2UgaW4gdGhlIG1v c3QgcmVjZW50DQo+IGludGVybmFsIGRyb3AgeW91J3ZlIGNoYW5nZWQgdGhlIGFib3ZlIHRvIElF RUU4MDIxMV9CQU5EXzJHSFouIEkgd29uZGVyDQo+IGlmIHRoYXQgaXMgd2hhdCBzaG91bGQgYmUg ZG9uZSBldmVyeXdoZXJlPw0KPiANCg0KUGxlYXNlIHVzZSB1cGRhdGVkIG1hYzgwMjExLg0KDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsX3JhdGVzXzI0W10gPSB7 ICB7IC5iaXRyYXRlID0NCj4gPiArMTAsIC5od192YWx1ZSA9IDIsIH0sICB7IC5iaXRyYXRlID0g MjAsIC5od192YWx1ZSA9IDQsIH0sICB7IC5iaXRyYXRlDQo+ID4gKz0gNTUsIC5od192YWx1ZSA9 IDExLCB9LCAgeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMjIsIH0sICB7DQo+ID4gKy5i aXRyYXRlID0gMjIwLCAuaHdfdmFsdWUgPSA0NCwgfSwgIHsgLmJpdHJhdGUgPSA2MCwgLmh3X3Zh bHVlID0gMTIsDQo+ID4gK30sICB7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4LCB9LCAg eyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlDQo+ID4gKz0gMjQsIH0sICB7IC5iaXRyYXRlID0g MTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwgIHsgLmJpdHJhdGUgPSAyNDAsDQo+ID4gKy5od192YWx1 ZSA9IDQ4LCB9LCAgeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sICB7IC5iaXRy YXRlDQo+ID4gKz0gNDgwLCAuaHdfdmFsdWUgPSA5NiwgfSwgIHsgLmJpdHJhdGUgPSA1NDAsIC5o d192YWx1ZSA9IDEwOCwgfSwgfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX2NoYW5uZWwgbXdsX2NoYW5uZWxzXzUwW10gPSB7ICB7IC5iYW5kDQo+ID4gKz0gTkw4 MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUxODAsIC5od192YWx1ZSA9IDM2LCB9LCAg eyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MjAwLCAu aHdfdmFsdWUgPSA0MCwgfSwgIHsgLmJhbmQNCj4gPiArPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNl bnRlcl9mcmVxID0gNTIyMCwgLmh3X3ZhbHVlID0gNDQsIH0sICB7IC5iYW5kDQo+ID4gKz0gTkw4 MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUyNDAsIC5od192YWx1ZSA9IDQ4LCB9LCAg eyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MjYwLCAu aHdfdmFsdWUgPSA1MiwgfSwgIHsgLmJhbmQNCj4gPiArPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNl bnRlcl9mcmVxID0gNTI4MCwgLmh3X3ZhbHVlID0gNTYsIH0sICB7IC5iYW5kDQo+ID4gKz0gTkw4 MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUzMDAsIC5od192YWx1ZSA9IDYwLCB9LCAg eyAuYmFuZA0KPiA+ICs9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1MzIwLCAu aHdfdmFsdWUgPSA2NCwgfSwgIHsgLmJhbmQNCj4gPiArPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNl bnRlcl9mcmVxID0gNTUwMCwgLmh3X3ZhbHVlID0gMTAwLCB9LCAgew0KPiA+ICsuYmFuZCA9IE5M ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTIwLCAuaHdfdmFsdWUgPSAxMDQsIH0s DQo+ID4gK3sgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTU0MCwg Lmh3X3ZhbHVlID0gMTA4LCB9LA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosIC5j ZW50ZXJfZnJlcSA9IDU1NjAsIC5od192YWx1ZSA9IDExMiwgfSwNCj4gPiAreyAuYmFuZCA9IE5M ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NTgwLCAuaHdfdmFsdWUgPSAxMTYsIH0s DQo+ID4gK3sgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTYwMCwg Lmh3X3ZhbHVlID0gMTIwLCB9LA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosIC5j ZW50ZXJfZnJlcSA9IDU2MjAsIC5od192YWx1ZSA9IDEyNCwgfSwNCj4gPiAreyAuYmFuZCA9IE5M ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NjQwLCAuaHdfdmFsdWUgPSAxMjgsIH0s DQo+ID4gK3sgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTY2MCwg Lmh3X3ZhbHVlID0gMTMyLCB9LA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosIC5j ZW50ZXJfZnJlcSA9IDU2ODAsIC5od192YWx1ZSA9IDEzNiwgfSwNCj4gPiAreyAuYmFuZCA9IE5M ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzAwLCAuaHdfdmFsdWUgPSAxNDAsIH0s DQo+ID4gK3sgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTcyMCwg Lmh3X3ZhbHVlID0gMTQ0LCB9LA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosIC5j ZW50ZXJfZnJlcSA9IDU3NDUsIC5od192YWx1ZSA9IDE0OSwgfSwNCj4gPiAreyAuYmFuZCA9IE5M ODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzY1LCAuaHdfdmFsdWUgPSAxNTMsIH0s DQo+ID4gK3sgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTc4NSwg Lmh3X3ZhbHVlID0gMTU3LCB9LA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosIC5j ZW50ZXJfZnJlcSA9IDU4MDUsIC5od192YWx1ZSA9IDE2MSwgfSwNCj4gPiArfTsNCj4gDQo+IERp dHRvLg0KPiANCj4gLi4uDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtd2xfcHJvY2Vzc19vZl9k dHMoc3RydWN0IG13bF9wcml2ICpwcml2KSB7ICNpZmRlZg0KPiA+ICtDT05GSUdfT0YNCj4gDQo+ IFNvIGEgbW9yZSBjb21tb24gaWRpb20gaW4gdGhlIGRyaXZlcnMgaXM6DQo+ICAgI2lmZGVmIENP TkZJR19PRg0KPiAgIGRlZmluZSBwcm9jZXNzIG9mX2R0cyBmdW5jdGlvbiB7fQ0KPiAgICNlbHNl DQo+ICAgZGVmaW5lIEVNUFRZIG9mX2R0cyBmdW5jdGlvbiB7fQ0KPiAgICNlbmRpZg0KPiANCj4g SSBndWVzcyBpdCdzIHRoZSBzYW1lIGVmZmVjdCBlaXRoZXIgd2F5LiBJIGRvbid0IG11Y2ggY2Fy ZSBhcyBsb25nIGFzDQo+IG13bF9wcm9jZXNzX29mX2R0cygpIGNhbiBiZSBjYWxsZWQgd2l0aG91 dCBndWFyZHMsIHdoaWNoIGl0IGNhbi4gQnV0IEkgdGhvdWdodA0KPiBJIHNob3VsZCBtZW50aW9u IGl0IGluY2FzZSBhbnlvbmUgZWxzZSBjYXJlcy4gQW5kIHRoaXMgaXMgbm90IGNvbnNpc3RlbnQg d2l0aA0KPiBob3cgeW91IGhhdmUgZG9uZSB0aGUgc2FtZSB0aGluZyBmb3IgQ09ORklHX0RFQlVH X0ZTDQo+IA0KDQpJIHdpbGwgbW9kaWZ5IGl0Lg0KDQo+ID4gKyBzdHJ1Y3QgcHJvcGVydHkgKnBy b3A7DQo+ID4gKyB1MzIgcHJvcF92YWx1ZTsNCj4gPiArDQo+ID4gKyBwcml2LT5kdF9ub2RlID0N Cj4gPiArIG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHBjaV9idXNfdG9fT0Zfbm9kZShwcml2LT5wZGV2 LT5idXMpLA0KPiA+ICsgICAgICJtd2x3aWZpIik7DQo+ID4gKyBpZiAoIXByaXYtPmR0X25vZGUp DQo+ID4gKyByZXR1cm47DQo+ID4gKw0KPiA+ICsgLyogbG9vayBmb3IgYWxsIG1hdGNoaW5nIHBy b3BlcnR5IG5hbWVzICovDQo+ID4gKyBmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKHByaXYtPmR0 X25vZGUsIHByb3ApIHsgaWYNCj4gPiArIChzdHJjbXAocHJvcC0+bmFtZSwgIm1hcnZlbGwsMmdo eiIpID09IDApDQo+ID4gKyBwcml2LT5kaXNhYmxlXzJnID0gdHJ1ZTsNCj4gPiArIGlmIChzdHJj bXAocHJvcC0+bmFtZSwgIm1hcnZlbGwsNWdoeiIpID09IDApDQo+ID4gKyBwcml2LT5kaXNhYmxl XzVnID0gdHJ1ZTsNCj4gPiArIGlmIChzdHJjbXAocHJvcC0+bmFtZSwgIm1hcnZlbGwsY2hhaW5t YXNrIikgPT0gMCkgeyBwcm9wX3ZhbHVlID0NCj4gPiArIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAq KXByb3AtPnZhbHVlKSk7IGlmIChwcm9wX3ZhbHVlID09IDIpDQo+ID4gKyBwcml2LT5hbnRlbm5h X3R4ID0gQU5URU5OQV9UWF8yOw0KPiA+ICsNCj4gPiArIHByb3BfdmFsdWUgPSBiZTMyX3RvX2Nw dSgqKChfX2JlMzIgKikgKHByb3AtPnZhbHVlICsgNCkpKTsgaWYNCj4gPiArIChwcm9wX3ZhbHVl ID09IDIpDQo+ID4gKyBwcml2LT5hbnRlbm5hX3J4ID0gQU5URU5OQV9SWF8yOw0KPiA+ICsgfQ0K PiA+ICsgfQ0KPiA+ICsNCj4gPiArIHByaXYtPnB3cl9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25h bWUocHJpdi0+ZHRfbm9kZSwNCj4gPiArICAgICAgIm1hcnZlbGwscG93ZXJ0YWJsZSIpOw0KPiA+ ICsjZW5kaWYNCj4gPiArfQ0KPiANCj4gQUZBSUNULCB0aGVyZSdzIG5vIGRvY3VtZW50YXRpb24g Zm9yIHRoZXNlIERUIGJpbmRpbmdzLiBUaGUgbXdsd2lmaSBub2RlIGFuZA0KPiB0aGUgbWFydmVs bCxwb3dlcnRhYmxlIGJvdGggbmVlZCBmdWxsIGRvY3VtZW50YXRpb24gaW4NCj4gRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzLy4uLiAuDQo+IA0KPiBGcmFua2x5IEkgaGF2ZSBhIGZl ZWxpbmcgSSdtIGdvaW5nIHRvIG5lZWQgdGhlc2UgRFQgbm9kZXMgYW5kIEknZCBsaWtlIHRvIG5v dA0KPiBoYXZlIHRvIGd1ZXNzLWFuZC1jaGVjayBiYXNlZCBvbiB0aGUgY29kZS4NCj4gDQoNClBv d2VyIHRhYmxlIHdvbid0IGJlIHVzZWQgZm9yIGNoaXAgd2l0aCBkZXZpY2UgcG93ZXIgdGFibGUs IGl0IGlzIG9ubHkgdXNlZCBmb3Igb2xkIHByb2R1Y3RzIG9mIE9wZW5XcnQuIEZvciB1cHN0cmVh bSwgdGhlIHJlbGF0ZWQgY29kZSBpcyByZW1vdmVkLg0KPG1hcnZlbGwsMmdoej4gaXMgdXNlZCB0 byBkaXNhYmxlIDJnIGJhbmQuDQo8bWFydmVsbCw1Z2h6PiBpcyB1c2VkIHRvIGRpc2FibGUgNWcg YmFuZC4NCjxtYXJ2ZWxsLCBjaGFpbm1hc2s+IGlzc3VlZCB0byBzcGVjaWZ5IGFudGVubmEgbnVt YmVyIChpZiBkZWZhdWx0IG51bWJlciBpcyBzdWl0YWJsZSBmb3IgeW91LCB0aGVyZSBpcyBubyBu ZWVkIHRvIHVzZSB0aGlzIHBhcmFtZXRlcikuIA0KDQo+IC4uLg0KPiANCj4gPiArc3RhdGljIGlu dCBtd2xfd2xfaW5pdChzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpIHsgIHN0cnVjdCBpZWVlODAyMTFf aHcNCj4gPiArKmh3OyAgaW50IHJjOyAgaW50IGk7DQo+ID4gKw0KPiA+ICsgaHcgPSBwcml2LT5o dzsNCj4gPiArDQo+ID4gKyBody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBTWVNBRFBUX01JTl9CWVRF U19IRUFEUk9PTTsgcXVldWVzID0NCj4gPiArIGh3LT5TWVNBRFBUX1RYX1dNTV9RVUVVRVM7DQo+ ID4gKw0KPiA+ICsgLyogU2V0IHJzc2kgdmFsdWVzIHRvIGRCbSAqLw0KPiA+ICsgaWVlZTgwMjEx X2h3X3NldChodywgU0lHTkFMX0RCTSk7DQo+ID4gKyBpZWVlODAyMTFfaHdfc2V0KGh3LCBIQVNf UkFURV9DT05UUk9MKTsNCj4gPiArDQo+ID4gKyAvKiBBc2sgbWFjODAyMTEgbm90IHRvIHRyaWdn ZXIgUFMgbW9kZQ0KPiA+ICsgKiBiYXNlZCBvbiBQTSBiaXQgb2YgaW5jb21pbmcgZnJhbWVzLg0K PiA+ICsgKi8NCj4gPiArIGllZWU4MDIxMV9od19zZXQoaHcsIEFQX0xJTktfUFMpOw0KPiA+ICsN Cj4gPiArIGllZWU4MDIxMV9od19zZXQoaHcsIFNVUFBPUlRTX1BFUl9TVEFfR1RLKTsgaWVlZTgw MjExX2h3X3NldChodywNCj4gPiArIE1GUF9DQVBBQkxFKTsNCj4gPiArDQo+ID4gKyBody0+d2lw aHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfSUJTU19SU047IGZsYWdzIHw9DQo+ID4gKyBody0+d2lw aHktPldJUEhZX0ZMQUdfSEFTX0NIQU5ORUxfU1dJVENIOw0KPiA+ICsNCj4gPiArIGh3LT53aXBo eS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19TVVBQT1JUU19URExTOw0KPiA+ICsNCj4gPiArIGh3LT52 aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2xfdmlmKTsgc3RhX2RhdGFfc2l6ZSA9DQo+ ID4gKyBody0+c2l6ZW9mKHN0cnVjdCBtd2xfc3RhKTsNCj4gPiArDQo+ID4gKyBwcml2LT5hcF9t YWNpZHNfc3VwcG9ydGVkID0gMHgwMDAwZmZmZjsgc3RhX21hY2lkc19zdXBwb3J0ZWQgPQ0KPiA+ ICsgcHJpdi0+MHgwMDAxMDAwMDsNCj4gDQo+IEhvdyBhYm91dCB3ZSBkb2N1bWVudCB3aGF0IHRo ZXNlIG1hZ2ljIG51bWJlcnMgYXJlPyBBIG5pY2UgbmFtZWQNCj4gY29uc3RhbnQgYXQgbGVhc3Qg d291bGQgYmUgbmljZS4NCg0KVGhleSBhcmUgdXNlZCB0byBrZWVwIHN0YXR1cyBvZiB1c2VkIEFQ IGFuZCBTVEEuDQoNCj4gDQo+ID4gK3N0YXRpYyBpbnQgbXdsX3Byb2JlKHN0cnVjdCBwY2lfZGV2 ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZA0KPiA+ICsqaWQpIHsNCj4gLi4uDQo+ ID4gKyB3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwgIiVzIFRYIGFudGVubmFzLCAlcyBSWCBh bnRlbm5hc1xuIiwNCj4gPiArICAgKHByaXYtPmFudGVubmFfdHggPT0gQU5URU5OQV9UWF80X0FV VE8pID8gIjQiIDogIjIiLA0KPiA+ICsgICAocHJpdi0+YW50ZW5uYV9yeCA9PSBBTlRFTk5BX1JY XzRfQVVUTykgPyAiNCIgOiAiMiIpOw0KPiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19ERUJVR19G Uw0KPiA+ICsgbXdsX2RlYnVnZnNfaW5pdChodyk7DQo+IA0KPiBUaGUgZ3VhcmRzIHNob3VsZCBi ZSBpbnRlcm5hbCB0byBtd2xfZGVidWdmc19pbml0KCkgc28gd2UgZG9uJ3QgaGF2ZSB0byBndWFy ZA0KPiBpdCB3aGVuIHdlIGNhbGwgaXQuIE11Y2ggbGlrZSBtd2xfcHJvY2Vzc19vZl9kdHMoKSBp cyBhYmxlIHRvIGJlIGNhbGxlZCBhbmQNCj4gY29tcGlsZXMgb3V0IGlmIENPTkZJR19PRiBpc24n dCBkZWZpbmVkLCBtd2xfZGVidWdmc19pbml0KCkgc2hvdWxkIGhhdmUgdGhlDQo+IGd1YXJkcyBp bnRlcm5hbCB0byBkZWJ1Z2ZzLmgvZGVidWdmcy5jIGFuZCB3ZSBzaG91bGRuJ3QgbmVlZCB0byB3 b3JyeSBhYm91dA0KPiBpdCB3aGVuIHdlIGNhbGwgaXQuDQo+IA0KDQpJIHdpbGwgbW9kaWZ5IGl0 Lg0KDQo+ID4gK3N0YXRpYyB2b2lkIG13bF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsg IHN0cnVjdCBpZWVlODAyMTFfaHcNCj4gPiArKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOyAg c3RydWN0IG13bF9wcml2ICpwcml2Ow0KPiA+ICsNCj4gPiArIGlmICghaHcpDQo+ID4gKyByZXR1 cm47DQo+ID4gKw0KPiA+ICsgcHJpdiA9IGh3LT5wcml2Ow0KPiA+ICsNCj4gPiArIG13bF93bF9k ZWluaXQocHJpdik7DQo+ID4gKyBwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7DQo+ID4gKyBp ZWVlODAyMTFfZnJlZV9odyhodyk7DQo+ID4gKyBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQo+ ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+ID4gKyBtd2xfZGVidWdmc19yZW1v dmUoaHcpOw0KPiA+ICsjZW5kaWYNCj4gDQo+IEFzIHByZXZpb3VzbHkgY29tbWVudGVkIG9uLg0K PiANCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvdGhlcm1h bC5jDQo+IC4uLg0KPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCAw NDQ0LA0KPiBtd2xfdGhlcm1hbF9zaG93X3RlbXAsDQo+ID4gKyAgTlVMTCwgMCk7DQo+ID4gKw0K PiANCj4gU2hvdWxkIHVzZSBTX0lSVUdPIGluc3RlYWQgb2YgbnVtZXJpYyAwNDQ0Lg0KPiANCj4g T0ssIHRoYXQncyBpdCBmb3Igc3BlY2lmaWNzLiBJIGtub3cgYSBudW1iZXIgb2YgdGhlbSBhcmUg anVzdCBuaXRzLg0KPiANCg0KWW91IG5lZWQgdG8gbW9kaWZ5IHRoaXMgd2F5IHRvIHBhc3MgY2hl Y2twYXRjaC5wbC4NCg0KPiBBIGZldyBnZW5lcmFsIGNvbW1lbnRzOg0KPiANCj4gKiBJIHNhdyBp dCBpdCBxdWl0ZSBhIGJpdCwgYnV0IGRpZG4ndCBjb21tZW50IG9uIGl0IGV2ZXJ5IHRpbWU6IHRo ZXJlJ3MgbWFueQ0KPiBwbGFjZXMgd2hlcmUgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBjYW4gYmUg Y29tYmluZWQgd2l0aCBpdHMgaW5pdGlhbA0KPiBhc3NpZ25tZW50Lg0KPiANCj4gKiBJIGhhcHBl biB0byBjb25jdXIgd2l0aCBKb2hhbm5lcycgY29tbWVudHMgcmVnYXJkaW5nIHRoZSBJRXMgYW5k IHlvdXINCj4gYmVhY29uIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBpc3N1ZSwg d2l0aCBwb3RlbnRpYWwgZm9yIGJpZyBidWdzIGRvd24NCj4gdGhlIHJvYWQuIEF0IHRoZSB2ZXJ5 IGxlYXN0LCBpdCdzIGEgbWFpbnRlbmFuY2UgaGVhZGFjaGUuDQo+IA0KPiBGcm9tIG15IHBlcnNw ZWN0aXZlLCBJJ2QgY29uc2lkZXIgaXQgYSBmaXJtd2FyZSBidWcgaWYgdGhlcmUncyBubyB3YXkg YXJvdW5kIGl0Lg0KPiBJcyB0aGUgZmlybXdhcmUgZ29pbmcgdG8gc3RyaXAgdGhlIElFcyB0aGF0 IGhvc3RhcGQgaGFwcGVucyB0byBhZGQgdG8gdGhlDQo+IGJlYWNvbnM/IElzIHRoZXJlIHNvbWUg InBhc3N0aHJvdWdoIiBvciBzb21lIG90aGVyIHdheSB0aGF0IGl0IGNhbiBiZQ0KPiByZWNvbmNp bGVkPw0KPiANCj4gSSBzdHJvbmdseSBzdXNwZWN0IHRoZXJlJ3MgYmV0dGVyIHdheXMgdG8gaGFu ZGxlIGl0LCBldmVuIHdpdGhvdXQgY2hhbmdpbmcgdGhlDQo+IGZpcm13YXJlLCBidXQgSSBoYXZl bid0IHlldCB0YWtlbiBhIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGlzLg0KPiANCj4gSW4gYW55IGNh c2UsIHdoaWxlIHRoZXJlJ3Mgc3R1ZmYgSSB3b3VsZG4ndCBtaW5kIHNlZWluZyBjaGFuZ2VkLCBJ IHJhdGhlciBzZWUgaXQNCj4gZ28gaW4gc29vbmVyIHJhdGhlciB0aGFuIGxhdGVyIHNvIEkgYW5k IG90aGVycyBjYW4gY29udHJpYnV0ZSBvbiB0b3Agb2YgaXQsDQo+IGluc3RlYWQgb2Ygd2FpdGlu ZyB0byBzZWUgaXQgInBlcmZlY3QiIGZpcnN0Lg0KDQotIFRoZSBvYmplY3RpdmUgaXMgdG8gdXNl IHRoZSBzYW1lIHByb2R1Y3Rpb24gZmlybXdhcmUgYmluYXJ5IGZvciBib3RoIHRoZSBvcGVuIHNv dXJjZSBhbmQgcHJvcHJpZXRhcnkgZHJpdmVyLiBTYW1lIGludGVyZmFjZSBpcyBjdXJyZW50bHkg dXNlZCBieSBwcm9wcmlldGFyeSBkcml2ZXIgZm9yIGhpc3RvcmljYWxseSByZWFzb24sIHdoaWxl IHRoZSBvcGVuIHNvdXJjZSBIQUwgaXMgYWRhcHRpbmcgdG8gaXQgZm9yIHRoZSBleGlzdGluZyBz aGlwcGluZyBwcm9kdWN0Lg0KLSBXZSB3aWxsIG1ha2UgY2hhbmdlcyBhbmQgY2xlYW4gdGhpbmdz IHVwIGluIGZ1dHVyZS4gSSB3aWxsIHNwZW5kIGVmZm9ydCB0byBjb250aW51ZSBpdHMgbWFpbnRl bmFuY2UgYW5kIGNsZWFuLXVwLg0KDQo+IA0KPiBQbGVhc2UgYWRkIG15IHJldmlld2VkLWJ5LiAg SWYgd2UncmUgd2FpdGluZyBvbiBhIHYxMCwgZG8geW91IGhhdmUgYW4gRVRBPw0KDQpJdCBsb29r cyBsaWtlIHRoZXJlIGlzIG5vIG1vcmUgY29tbWVudHMgZm9yIHBhdGNoIHY5LCBJIHdpbGwgc2Vu ZCBvdXQgcGF0Y2ggdjEwIGVuZCBvZiB0aGlzIG1vbnRoLg0KDQo+IA0KPiBUaGFua3MsDQo+IC0g U3RldmUNCg==