From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zanoni, Paulo R" Subject: Re: [PATCH v4 1/4] drm: Add helper for DP++ adaptors Date: Fri, 6 May 2016 12:37:51 +0000 Message-ID: <1462538270.14511.13.camel@intel.com> References: <1462287356-5893-1-git-send-email-ville.syrjala@linux.intel.com> <1462298189-14255-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 93B8B6E541 for ; Fri, 6 May 2016 12:37:52 +0000 (UTC) In-Reply-To: <1462298189-14255-1-git-send-email-ville.syrjala@linux.intel.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "ville.syrjala@linux.intel.com" , "intel-gfx@lists.freedesktop.org" Cc: "daniel.vetter@ffwll.ch" , "tore@fud.no" , "stable@vger.kernel.org" List-Id: intel-gfx@lists.freedesktop.org RW0gVGVyLCAyMDE2LTA1LTAzIMOgcyAyMDo1NiArMDMwMCwgdmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20NCmVzY3JldmV1Og0KPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tPg0KPiANCj4gQWRkIGEgaGVscGVyIHdoaWNoIGFpZHMgaW4gdGhl IGlkZW50aWZpY2F0aW9uIG9mIERQIGR1YWwgbW9kZQ0KPiAoYWthLiBEUCsrKSBhZGFwdG9ycy4g VGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2YgYWRhcHRvcnMNCj4gc3BlY2lmaWVkOiB0eXBlIDEg RFZJLCB0eXBlIDEgSERNSSwgdHlwZSAyIERWSSwgdHlwZSAyIEhETUkNCj4gDQo+IFR5cGUgMSBh ZGFwdG9ycyBoYXZlIGEgbWF4IFRNRFMgY2xvY2sgbGltaXQgb2YgMTY1TUh6LCB0eXBlIDINCj4g YWRhcHRvcnMNCj4gbWF5IGdvIGFzIGhpZ2ggYXMgMzAwTUh6IGFuZCB0aGV5IHByb3ZpZGUgYSBy ZWdpc3RlciBpbmZvcm1pbmcgdGhlDQo+IHNvdXJjZSBkZXZpY2Ugd2hhdCB0aGUgYWN0dWFsIGxp bWl0IGlzLiBTdXBwb3NlZGx5IGFsc28gdHlwZSAxDQo+IGFkYXB0b3JzDQo+IG1heSBvcHRpb25h bGx5IGltcGxlbWVudCB0aGlzIHJlZ2lzdGVyLiBUaGlzIFRNRFMgY2xvY2sgbGltaXQgaXMgdGhl DQo+IG1haW4gcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZXNlIGFkYXB0b3JzLg0K PiANCj4gVHlwZSAxIGFkYXB0b3JzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGludGVybmFsIHJl Z2lzdGVycyBhbmQgdGhlDQo+IHNpbmsNCj4gRERDIGJ1cyB0aHJvdWdoIEkyQy4gVHlwZSAyIGFk YXB0b3JzIHByb3ZpZGUgdGhpcyBhY2Nlc3MgYm90aCB2aWEgSTJDDQo+IGFuZCBJMkMtb3Zlci1B VVguIEEgdHlwZSAyIHNvdXJjZSBkZXZpY2UgbWF5IGNob29zZSB0byBpbXBsZW1lbnQNCj4gZWl0 aGVyDQo+IG9mIHRoZXNlIG1ldGhvZHMuIElmIGEgc291cmNlIGRldmljZSBpbXBsZW1lbnRzIHRo ZSBJMkMtb3Zlci1BVVgNCj4gbWV0aG9kLCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBvYnZpb3VzbHkg bmVlZCBzcGVjaWZpYyBzdXBwb3J0IGZvciBzdWNoDQo+IGFkYXB0b3JzIHNpbmNlIHRoZSBwb3J0 IGlzIGRyaXZlbiBsaWtlIGFuIEhETUkgcG9ydCwgYnV0IEREQw0KPiBjb21tdW5pY2F0aW9uIGhh cHBlcyBvdmVyIHRoZSBBVVggY2hhbm5lbC4NCj4gDQo+IFRoaXMgaGVscGVyIHNob3VsZCBiZSBl bm91Z2ggdG8gaWRlbnRpZnkgdGhlIGFkYXB0b3IgdHlwZSAoc29tZQ0KPiB0eXBlIDEgRFZJIGFk YXB0b3JzIG1heSBiZSBhIHNsaWdodCBleGNlcHRpb24pIGFuZCB0aGUgbWF4aW11bSBUTURTDQo+ IGNsb2NrIGxpbWl0LiBBbm90aGVyIGZlYXR1cmUgdGhhdCBtYXkgYmUgYXZhaWxhYmxlIGlzIGNv bnRyb2wgb3Zlcg0KPiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVycyBvbiB0aGUgYWRhcHRvciwgcG9z c2libHkgYWxsb3dpbmcgZm9yIHNvbWUNCj4gcG93ZXIgc2F2aW5nIHdoZW4gdGhlIFRNRFMgbGlu ayBpcyBkb3duLg0KPiANCj4gT3RoZXIgdXNlciBjb250cm9sbGFibGUgZmVhdHVyZXMgdGhhdCBt YXkgYmUgYXZhaWxhYmxlIGluIHRoZQ0KPiBhZGFwdG9ycw0KPiBhcmUgZG93bnN0cmVhbSBpMmMg YnVzIHNwZWVkIGNvbnRyb2wgd2hlbiB1c2luZyBpMmMtb3Zlci1hdXgsIGFuZA0KPiBzb21lIGNv bnRyb2wgb3ZlciB0aGUgQ0VDIHBpbi4gSSBjaG9zZSBub3QgdG8gcHJvdmlkZSBhbnkgaGVscGVy DQo+IGZ1bmN0aW9ucyBmb3IgdGhvc2Ugc2luY2UgSSBoYXZlIG5vIHVzZSBmb3IgdGhlbSBpbiBp OTE1IGF0IHRoaXMNCj4gdGltZS4NCj4gVGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyBpbiB0aGUg YWRhcHRvciBhcmUgbW9zdGx5IGp1c3QgaW5mb3JtYXRpb24sDQo+IGVnLiBJRUVFIE9VSSwgaGFy ZHdhcmUgYW5kIGZpcm13YXJlIHJldmlzaW9uLCBldGMuDQo+IA0KPiB2MjogUGFzcyBhZGFwdG9y IHR5cGUgdG8gaGVscGVyIGZ1bmN0aW9ucyB0byBlYXNlIGRyaXZlcg0KPiBpbXBsZW1lbnRhdGlv bg0KPiDCoMKgwqDCoEZpeCBhIGJ1bmNoIG9mIHR5cG9lcyAoUGF1bG8pDQo+IMKgwqDCoMKgQWRk IERSTV9EUF9EVUFMX01PREVfVU5LTk9XTiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgKHll dCkNCj4ga25vdw0KPiDCoMKgwqDCoHRoZSB0eXBlIChQYXVsbykNCj4gwqDCoMKgwqBSZWplY3Qg MHgwMCBhbmQgMHhmZiBEUF9EVUFMX01PREVfTUFYX1RNRFNfQ0xPQ0sgdmFsdWVzIChQYXVsbykN Cj4gwqDCoMKgwqBBZGp1c3QgZHJtX2RwX2R1YWxfbW9kZV9kZXRlY3QoKSB0eXBlMiB2cy4gdHlw ZTEgZGV0ZWN0aW9uIHRvDQo+IMKgwqDCoMKgZWFzZSBmdXR1cmUgTFNQQ09OIGVuYWJsaW5nDQo+ IMKgwqDCoMKgUmVtb3ZlIHRoZSB1bnVzZWQgRFBfRFVBTF9NT0RFX0xBU1RfUkVTRVJWRUQgZGVm aW5lDQo+IHYzOiBGaXgga2VybmVsIGRvYyBmdW5jdGlvbiBhcmd1bWVudCBkZXNjcmlwdGlvbnMg KEphbmkpDQo+IMKgwqDCoMKgcy9OT05FL1VOS05PV04vIGluIGRybV9kcF9kdWFsX21vZGVfZGV0 ZWN0KCkgZG9jcw0KPiDCoMKgwqDCoEFkZCBrZXJuZWwgZG9jIGZvciBlbnVtIGRybV9kcF9kdWFs X21vZGVfdHlwZQ0KPiDCoMKgwqDCoEFjdHVhbGx5IGJ1aWxkIHRoZSBkb2NzDQo+IMKgwqDCoMKg Rml4IG1vcmUgdHlwb2VzDQo+IHY0OiBBZGp1c3QgY29kZSBpbmRlbnRhdGlvbiBvZiB0eXBlMiBh ZGFwdG9yIGRldGVjdGlvbiAoU2hhc2hhbmspDQo+IMKgwqDCoMKgQWRkIGRlYnVnIG1lc3NhZ2Vz IGZvciBmYWlsdXJzIGNhc2VzIChTaGFzaGFuaykNCj4gDQo+IENjOiBzdGFibGVAdmdlci5rZXJu ZWwub3JnDQo+IENjOiBUb3JlIEFuZGVyc29uIDx0b3JlQGZ1ZC5ubz4NCj4gQ2M6IFBhdWxvIFph bm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPg0KPiBDYzogU2hhc2hhbmsgU2hhcm1hIDxz aGFzaGFuay5zaGFybWFAaW50ZWwuY29tPg0KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4NCj4gQ2M6IFNoYXNoYW5rIFNoYXJtYSA8c2hhc2hhbmsuc2hhcm1hQGlu dGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxh QGxpbnV4LmludGVsLmNvbT4NCj4gLS0tDQo+IMKgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50 bXBswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDYgKw0KPiDCoGRyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAyICst DQo+IMKgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmMgfCAzNjUNCj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+IMKgaW5jbHVkZS9kcm0vZHJtX2RwX2R1 YWxfbW9kZV9oZWxwZXIuaMKgwqDCoMKgwqB8wqDCoDkyICsrKysrKysrDQo+IMKgNCBmaWxlcyBj aGFuZ2VkLCA0NjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuYw0KPiDCoGNy ZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsDQo+IGIvRG9j dW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsDQo+IGluZGV4IDE0NjRmYjJmM2M0Ni4uYzI0ODEy NDM1N2RmIDEwMDY0NA0KPiAtLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwNCj4g KysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsDQo+IEBAIC0xNjIzLDYgKzE2MjMs MTIgQEAgdm9pZCBpbnRlbF9jcnRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiDCoCFF ZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYw0KPiDCoMKgwqDCoMKgPC9zZWN0Mj4NCj4g wqDCoMKgwqDCoDxzZWN0Mj4NCj4gK8KgwqDCoMKgwqDCoDx0aXRsZT5EaXNwbGF5IFBvcnQgRHVh bCBNb2RlIEFkYXB0b3IgSGVscGVyIEZ1bmN0aW9ucw0KPiBSZWZlcmVuY2U8L3RpdGxlPg0KPiAr IVBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuYyBkcCBkdWFsIG1vZGUg aGVscGVycw0KPiArIUlpbmNsdWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oDQo+ICsh RWRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5jDQo+ICvCoMKgwqDCoDwv c2VjdDI+DQo+ICvCoMKgwqDCoDxzZWN0Mj4NCj4gwqDCoMKgwqDCoMKgwqA8dGl0bGU+RGlzcGxh eSBQb3J0IE1TVCBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZTwvdGl0bGU+DQo+IMKgIVBkcml2 ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIGRwIG1zdCBoZWxwZXINCj4gwqAhSWlu Y2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQ0KPiBpbmRleCAxYTI2YjRl YjFjZTAuLjI5ZjJlZTliOTUzNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQ0KPiBAQCAtMjMsNyArMjMsNyBA QCBkcm0tJChDT05GSUdfQUdQKSArPSBkcm1fYWdwc3VwcG9ydC5vDQo+IMKgDQo+IMKgZHJtX2tt c19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8NCj4gZHJtX3By b2JlX2hlbHBlci5vIFwNCj4gwqAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3RvcG9s b2d5Lm8NCj4gZHJtX2F0b21pY19oZWxwZXIubyBcDQo+IC0JCWRybV9rbXNfaGVscGVyX2NvbW1v bi5vDQo+ICsJCWRybV9rbXNfaGVscGVyX2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVy Lm8NCj4gwqANCj4gwqBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1X QVJFKSArPSBkcm1fZWRpZF9sb2FkLm8NCj4gwqBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1f RkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVyLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5jDQo+IGIvZHJpdmVycy9ncHUvZHJt L2RybV9kcF9kdWFsX21vZGVfaGVscGVyLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAwLi42ODQyMTc4NDc0YmENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIuYw0KPiBAQCAtMCwwICsxLDM2 NSBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uDQo+ ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24NCj4gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUNCj4gIlNvZnR3YXJlIiks DQo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dA0KPiBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwNCj4gc3VibGljZW5zZSwNCj4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tDQo+IHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcNCj4gY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZQ0KPiBpbmNsdWRlZCBpbg0KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuDQo+ICsgKg0KPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQo+IEVYUFJFU1MgT1IN Cj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YNCj4gTUVSQ0hBTlRBQklMSVRZLA0KPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8NCj4gRVZFTlQgU0hBTEwNCj4g KyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwNCj4gREFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUg0KPiBPVEhFUldJU0UsDQo+ICsgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RQ0KPiBVU0UgT1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAq Lw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9l eHBvcnQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9kcF9kdWFsX21vZGVfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4NCj4gKw0K PiArLyoqDQo+ICsgKiBET0M6IGRwIGR1YWwgbW9kZSBoZWxwZXJzDQo+ICsgKg0KPiArICogSGVs cGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggRFAgZHVhbCBtb2RlIChha2EuIERQKyspIGFkYXB0 b3JzLg0KPiArICoNCj4gKyAqIFR5cGUgMToNCj4gKyAqIEFkYXB0b3IgcmVnaXN0ZXJzIChpZiBh bnkpIGFuZCB0aGUgc2luayBEREMgYnVzIG1heSBiZSBhY2Nlc3NlZA0KPiB2aWEgSTJDLg0KPiAr ICoNCj4gKyAqIFR5cGUgMjoNCj4gKyAqIEFkYXB0b3IgcmVnaXN0ZXJzIGFuZCBzaW5rIEREQyBi dXMgY2FuIGJlIGFjY2Vzc2VkIGVpdGhlciB2aWEgSTJDDQo+IG9yDQo+ICsgKiBJMkMtb3Zlci1B VVguIFNvdXJjZSBkZXZpY2VzIG1heSBjaG9vc2UgdG8gaW1wbGVtZW50IGVpdGhlciBvZg0KPiB0 aGVzZQ0KPiArICogYWNjZXNzIG1ldGhvZHMuDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBEUF9E VUFMX01PREVfU0xBVkVfQUREUkVTUyAweDQwDQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RwX2R1 YWxfbW9kZV9yZWFkIC0gUmVhZCBmcm9tIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvcg0KPiByZWdp c3RlcihzKQ0KPiArICogQGFkYXB0ZXI6IEkyQyBhZGFwdGVyIGZvciB0aGUgRERDIGJ1cw0KPiAr ICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0DQo+ICsgKiBAYnVmZmVyOiBidWZmZXIgZm9yIHJl dHVybiBkYXRhDQo+ICsgKiBAc2l6ZTogc2l6byBvZiB0aGUgYnVmZmVyDQo+ICsgKg0KPiArICog UmVhZHMgQHNpemUgYnl0ZXMgZnJvbSB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0b3IgcmVnaXN0ZXJz DQo+ICsgKiBzdGFydGluZyBhdCBAb2Zmc2V0Lg0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsg KiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQ0KPiArICovDQo+ ICtzc2l6ZV90IGRybV9kcF9kdWFsX21vZGVfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0 ZXIsDQo+ICsJCQnCoMKgwqDCoMKgwqB1OCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNp emUpDQo+ICt7DQo+ICsJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gew0KPiArCQl7DQo+ICsJCQku YWRkciA9IERQX0RVQUxfTU9ERV9TTEFWRV9BRERSRVNTLA0KPiArCQkJLmZsYWdzID0gMCwNCj4g KwkJCS5sZW4gPSAxLA0KPiArCQkJLmJ1ZiA9ICZvZmZzZXQsDQo+ICsJCX0sDQo+ICsJCXsNCj4g KwkJCS5hZGRyID0gRFBfRFVBTF9NT0RFX1NMQVZFX0FERFJFU1MsDQo+ICsJCQkuZmxhZ3MgPSBJ MkNfTV9SRCwNCj4gKwkJCS5sZW4gPSBzaXplLA0KPiArCQkJLmJ1ZiA9IGJ1ZmZlciwNCj4gKwkJ fSwNCj4gKwl9Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBpMmNfdHJhbnNmZXIoYWRh cHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsJaWYgKHJldCAhPSBBUlJBWV9TSVpFKG1zZ3MpKQ0KPiArCQlyZXR1cm4g LUVQUk9UTzsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KRVhQT1JUX1NZTUJPTChkcm1fZHBf ZHVhbF9tb2RlX3JlYWQpOw0KDQoob3IgbWFrZSBpdCBzdGF0aWMgYW5kIHJlbW92ZSBmcm9tIHRo ZSAuaCBmaWxlKQ0KDQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RwX2R1YWxfbW9kZV93cml0ZSAt IFdyaXRlIHRvIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvcg0KPiByZWdpc3RlcihzKQ0KPiArICog QGFkYXB0ZXI6IEkyQyBhZGFwdGVyIGZvciB0aGUgRERDIGJ1cw0KPiArICogQG9mZnNldDogcmVn aXN0ZXIgb2Zmc2V0DQo+ICsgKiBAYnVmZmVyOiBidWZmZXIgZm9yIHdyaXRlIGRhdGENCj4gKyAq IEBzaXplOiBzaXpvIG9mIHRoZSBidWZmZXINCj4gKyAqDQo+ICsgKiBXcml0ZXMgQHNpemUgYnl0 ZXMgdG8gdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yIHJlZ2lzdGVycw0KPiArICogc3RhcnRpbmcg YXQgQG9mZnNldC4NCj4gKyAqDQo+ICsgKiBSZXR1cm5zOg0KPiArICogMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCj4gKyAqLw0KPiArc3NpemVfdCBkcm1fZHBf ZHVhbF9tb2RlX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwNCj4gKwkJCcKgwqDC oMKgwqDCoMKgdTggb2Zmc2V0LCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdA0KPiBzaXplKQ0K PiArew0KPiArCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsNCj4gKwkJLmFkZHIgPSBEUF9EVUFMX01P REVfU0xBVkVfQUREUkVTUywNCj4gKwkJLmZsYWdzID0gMCwNCj4gKwkJLmxlbiA9IDEgKyBzaXpl LA0KPiArCQkuYnVmID0gTlVMTCwNCj4gKwl9Ow0KPiArCXZvaWQgKmRhdGE7DQo+ICsJaW50IHJl dDsNCj4gKw0KPiArCWRhdGEgPSBrbWFsbG9jKG1zZy5sZW4sIEdGUF9URU1QT1JBUlkpOw0KPiAr CWlmICghZGF0YSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwltc2cuYnVmID0gZGF0 YTsNCj4gKw0KPiArCW1lbWNweShkYXRhLCAmb2Zmc2V0LCAxKTsNCj4gKwltZW1jcHkoZGF0YSAr IDEsIGJ1ZmZlciwgc2l6ZSk7DQo+ICsNCj4gKwlyZXQgPSBpMmNfdHJhbnNmZXIoYWRhcHRlciwg Jm1zZywgMSk7DQo+ICsNCj4gKwlrZnJlZShkYXRhKTsNCj4gKw0KPiArCWlmIChyZXQgPCAwKQ0K PiArCQlyZXR1cm4gcmV0Ow0KPiArCWlmIChyZXQgIT0gMSkNCj4gKwkJcmV0dXJuIC1FUFJPVE87 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2R1YWxf bW9kZV93cml0ZSk7DQo+ICsNCj4gK3N0YXRpYyBib29sIGlzX2hkbWlfYWRhcHRvcihjb25zdCBj aGFyDQo+IGhkbWlfaWRbRFBfRFVBTF9NT0RFX0hETUlfSURfTEVOXSkNCj4gK3sNCj4gKwlzdGF0 aWMgY29uc3QgY2hhcg0KPiBkcF9kdWFsX21vZGVfaGRtaV9pZFtEUF9EVUFMX01PREVfSERNSV9J RF9MRU5dID0NCj4gKwkJIkRQLUhETUkgQURBUFRPUlx4MDQiOw0KPiArDQo+ICsJcmV0dXJuIG1l bWNtcChoZG1pX2lkLCBkcF9kdWFsX21vZGVfaGRtaV9pZCwNCj4gKwkJwqDCoMKgwqDCoMKgc2l6 ZW9mKGRwX2R1YWxfbW9kZV9oZG1pX2lkKSkgPT0gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJv b2wgaXNfdHlwZTJfYWRhcHRvcih1aW50OF90IGFkYXB0b3JfaWQpDQo+ICt7DQo+ICsJcmV0dXJu IGFkYXB0b3JfaWQgPT0gKERQX0RVQUxfTU9ERV9UWVBFX1RZUEUyIHwNCj4gKwkJCcKgwqDCoMKg wqDCoERQX0RVQUxfTU9ERV9SRVZfVFlQRTIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRy bV9kcF9kdWFsX21vZGVfZGV0ZWN0IC0gSWRlbnRpZnkgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9y DQo+ICsgKiBAYWRhcHRlcjogSTJDIGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzDQo+ICsgKg0KPiAr ICogQXR0ZW1wdCB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiB0aGUgRFAgZHVhbCBtb2RlIGFkYXB0 b3IgdXNlZC4NCj4gKyAqDQo+ICsgKiBOb3RlIHRoYXQgd2hlbiB0aGUgYW5zd2VyIGlzIEBEUk1f RFBfRFVBTF9NT0RFX1VOS05PV04gaXQncyBub3QNCj4gKyAqIGNlcnRhaW4gd2hldGhlciB3ZSdy ZSBkZWFsaW5nIHdpdGggYSBuYXRpdmUgSERNSSBwb3J0IG9yDQo+ICsgKiBhIHR5cGUgMSBEVkkg ZHVhbCBtb2RlIGFkYXB0b3IuIFRoZSBkcml2ZXIgd2lsbCBoYXZlIHRvIHVzZQ0KPiArICogc29t ZSBvdGhlciBoYXJkd2FyZS9kcml2ZXIgc3BlY2lmaWMgbWVjaGFuaXNtIHRvIG1ha2UgdGhhdA0K PiArICogZGlzdGluY3Rpb24uDQo+ICsgKg0KPiArICogUmV0dXJuczoNCj4gKyAqIFRoZSB0eXBl IG9mIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvciB1c2VkDQo+ICsgKi8NCj4gK2VudW0gZHJtX2Rw X2R1YWxfbW9kZV90eXBlIGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KHN0cnVjdA0KPiBpMmNfYWRh cHRlciAqYWRhcHRlcikNCj4gK3sNCj4gKwljaGFyIGhkbWlfaWRbRFBfRFVBTF9NT0RFX0hETUlf SURfTEVOXSA9IHt9Ow0KPiArCXVpbnQ4X3QgYWRhcHRvcl9pZCA9IDB4MDA7DQo+ICsJc3NpemVf dCByZXQ7DQo+ICsNCj4gKwkvKg0KPiArCcKgKiBMZXQncyBzZWUgaWYgdGhlIGFkYXB0b3IgaXMg dGhlcmUgdGhlIGJ5IHJlYWRpbmcgdGhlDQo+ICsJwqAqIEhETUkgSUQgcmVnaXN0ZXJzLg0KPiAr CcKgKg0KPiArCcKgKiBOb3RlIHRoYXQgdHlwZSAxIERWSSBhZGFwdG9ycyBhcmUgbm90IHJlcXVp cmVkIHRvDQo+IGltcGxlbW50DQo+ICsJwqAqIGFueSByZWdpc3RlcnMsIGFuZCB0aGF0IHByZXNl bnRzIGEgcHJvYmxlbSBmb3IgZGV0ZWN0aW9uLg0KPiArCcKgKiBJZiB0aGUgaTJjIHRyYW5zZmVy IGlzIG5hY2tlZCwgd2UgbWF5IG9yIG1heSBub3QgYmUNCj4gZGVhbGluZw0KPiArCcKgKiB3aXRo IGEgdHlwZSAxIERWSSBhZGFwdG9yLiBTb21lIG90aGVyIG1lY2hhbmlzbSBvZg0KPiBkZXRlY3Rp bmcNCj4gKwnCoCogdGhlIHByZXNlbmNlIG9mIHRoZSBhZGFwdG9yIGlzIHJlcXVpcmVkLiBPbmUg d2F5IHdvdWxkIGJlDQo+ICsJwqAqIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgQ09ORklHMSBw aW4sIEFub3RoZXIgbWV0aG9kDQo+IHdvdWxkDQo+ICsJwqAqIHNpbXBseSByZXF1aXJlIHRoZSBk cml2ZXIgdG8ga25vdyB3aGV0aGVyIHRoZSBwb3J0IGlzIGENCj4gRFArKw0KPiArCcKgKiBwb3J0 IG9yIGEgbmF0aXZlIEhETUkgcG9ydC4gQm90aCBvZiB0aGVzZSBtZXRob2RzIGFyZQ0KPiBlbnRp cmVseQ0KPiArCcKgKiBoYXJkd2FyZS9kcml2ZXIgc3BlY2lmaWMgc28gd2UgY2FuJ3QgZGVhbCB3 aXRoIHRoZW0gaGVyZS4NCj4gKwnCoCovDQo+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFk KGFkYXB0ZXIsIERQX0RVQUxfTU9ERV9IRE1JX0lELA0KPiArCQkJCcKgwqDCoMKgaGRtaV9pZCwg c2l6ZW9mKGhkbWlfaWQpKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gRFJNX0RQX0RVQUxf TU9ERV9VTktOT1dOOw0KPiArDQo+ICsJLyoNCj4gKwnCoCogU2lnaC4gU29tZSAobWF5YmUgYWxs PykgdHlwZSAxIGFkYXB0b3JzIGFyZSBicm9rZW4gYW5kDQo+IGFjaw0KPiArCcKgKiB0aGUgb2Zm c2V0IGJ1dCBpZ25vcmUgaXQsIGFuZCBpbnN0ZWFkIHRoZXkganVzdCBhbHdheXMNCj4gcmV0dXJu DQo+ICsJwqAqIGRhdGEgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEhETUkgSUQgYnVmZmVyLiBTbyBm b3IgYQ0KPiBicm9rZW4NCj4gKwnCoCogdHlwZSAxIEhETUkgYWRhcHRvciBhIHNpbmdsZSBieXRl IHJlYWQgd2lsbCBhbHdheXMgZ2l2ZQ0KPiB1cw0KPiArCcKgKiAweDQ0LCBhbmQgZm9yIGEgdHlw ZSAxIERWSSBhZGFwdG9yIGl0IHNob3VsZCBnaXZlIDB4MDANCj4gKwnCoCogKGFzc3VtaW5nIGl0 IGltcGxlbWVudHMgYW55IHJlZ2lzdGVycykuIEZvcnR1bmF0ZWx5DQo+IG5laXRoZXINCj4gKwnC oCogb2YgdGhvc2UgdmFsdWVzIHdpbGwgbWF0Y2ggdGhlIHR5cGUgMiBzaWduYXR1cmUgb2YgdGhl DQo+ICsJwqAqIERQX0RVQUxfTU9ERV9BREFQVE9SX0lEIHJlZ2lzdGVyIHNvIHdlIGNhbiBwcm9j ZWVkIHdpdGgNCj4gKwnCoCogdGhlIHR5cGUgMiBhZGFwdG9yIGRldGVjdGlvbiBzYWZlbHkgZXZl biBpbiB0aGUgcHJlc2VuY2UNCj4gKwnCoCogb2YgYnJva2VuIHR5cGUgMSBhZGFwdG9ycy4NCj4g KwnCoCovDQo+ICsJcmV0ID0gZHJtX2RwX2R1YWxfbW9kZV9yZWFkKGFkYXB0ZXIsDQo+IERQX0RV QUxfTU9ERV9BREFQVE9SX0lELA0KPiArCQkJCcKgwqDCoMKgJmFkYXB0b3JfaWQsDQo+IHNpemVv ZihhZGFwdG9yX2lkKSk7DQo+ICsJaWYgKHJldCA9PSAwKSB7DQo+ICsJCWlmIChpc190eXBlMl9h ZGFwdG9yKGFkYXB0b3JfaWQpKSB7DQo+ICsJCQlpZiAoaXNfaGRtaV9hZGFwdG9yKGhkbWlfaWQp KQ0KPiArCQkJCXJldHVybiBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0hETUk7DQo+ICsJCQllbHNl DQo+ICsJCQkJcmV0dXJuIERSTV9EUF9EVUFMX01PREVfVFlQRTJfRFZJOw0KPiArCQl9DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKGlzX2hkbWlfYWRhcHRvcihoZG1pX2lkKSkNCj4gKwkJcmV0dXJuIERS TV9EUF9EVUFMX01PREVfVFlQRTFfSERNSTsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBEUk1fRFBf RFVBTF9NT0RFX1RZUEUxX0RWSTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2R1YWxf bW9kZV9kZXRlY3QpOw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kcF9kdWFsX21vZGVfbWF4X3Rt ZHNfY2xvY2sgLSBNYXggVE1EUyBjbG9jayBmb3IgRFAgZHVhbCBtb2RlDQo+IGFkYXB0b3INCj4g KyAqIEB0eXBlOiBEUCBkdWFsIG1vZGUgYWRhcHRvciB0eXBlDQo+ICsgKiBAYWRhcHRlcjogSTJD IGFkYXB0ZXIgZm9yIHRoZSBEREMgYnVzDQo+ICsgKg0KPiArICogRGV0ZXJtaW5lIHRoZSBtYXgg VE1EUyBjbG9jayB0aGUgYWRhcHRvciBzdXBwb3J0cyBiYXNlZCBvbiB0aGUNCj4gKyAqIHR5cGUg b2YgdGhlIGR1YWwgbW9kZSBhZGFwdG9yIGFuZCB0aGUgRFBfRFVBTF9NT0RFX01BWF9UTURTX0NM T0NLDQo+ICsgKiByZWdpc3RlciAob24gdHlwZTIgYWRhcHRvcnMpLiBBcyBzb21lIHR5cGUgMSBh ZGFwdG9ycyBoYXZlDQo+ICsgKiBwcm9ibGVtcyB3aXRoIHJlZ2lzdGVycyAoc2VlIGNvbW1lbnRz IGluDQo+IGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KCkpDQo+ICsgKiB3ZSBkb24ndCByZWFkIHRo ZSByZWdpc3RlciBvbiB0aG9zZSwgaW5zdGVhZCB3ZSBzaW1wbHkgYXNzdW1lDQo+ICsgKiBhIDE2 NSBNSHogbGltaXQgYmFzZWQgb24gdGhlIHNwZWNpZmljYXRpb24uDQo+ICsgKg0KPiArICogUmV0 dXJuczoNCj4gKyAqIE1heGltdW0gc3VwcG9ydGVkIFRNRFMgY2xvY2sgcmF0ZSBmb3IgdGhlIERQ IGR1YWwgbW9kZSBhZGFwdG9yIGluDQo+IGtIei4NCj4gKyAqLw0KPiAraW50IGRybV9kcF9kdWFs X21vZGVfbWF4X3RtZHNfY2xvY2soZW51bSBkcm1fZHBfZHVhbF9tb2RlX3R5cGUgdHlwZSwNCj4g KwkJCQnCoMKgwqDCoHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikNCj4gK3sNCj4gKwl1aW50 OF90IG1heF90bWRzX2Nsb2NrOw0KPiArCXNzaXplX3QgcmV0Ow0KPiArDQo+ICsJLyogbmF0aXZl IEhETUkgc28gbm8gbGltaXQgKi8NCj4gKwlpZiAodHlwZSA9PSBEUk1fRFBfRFVBTF9NT0RFX05P TkUpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJLyoNCj4gKwnCoCogVHlwZSAxIGFkYXB0b3Jz IGFyZSBsaW1pdGVkIHRvIDE2NU1Ieg0KPiArCcKgKiBUeXBlIDIgYWRhcHRvcnMgY2FuIHRlbGxz IHVzIHRoZWlyIGxpbWl0DQo+ICsJwqAqLw0KPiArCWlmICh0eXBlIDwgRFJNX0RQX0RVQUxfTU9E RV9UWVBFMl9EVkkpDQo+ICsJCXJldHVybiAxNjUwMDA7DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBf ZHVhbF9tb2RlX3JlYWQoYWRhcHRlciwNCj4gRFBfRFVBTF9NT0RFX01BWF9UTURTX0NMT0NLLA0K PiArCQkJCcKgwqDCoMKgJm1heF90bWRzX2Nsb2NrLA0KPiBzaXplb2YobWF4X3RtZHNfY2xvY2sp KTsNCj4gKwlpZiAocmV0IHx8IG1heF90bWRzX2Nsb2NrID09IDB4MDAgfHwgbWF4X3RtZHNfY2xv Y2sgPT0gMHhmZikNCj4gew0KPiArCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gcXVlcnkgbWF4 IFRNRFMgY2xvY2tcbiIpOw0KPiArCQlyZXR1cm4gMTY1MDAwOw0KPiArCX0NCj4gKw0KPiArCXJl dHVybiBtYXhfdG1kc19jbG9jayAqIDUwMDAgLyAyOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChk cm1fZHBfZHVhbF9tb2RlX21heF90bWRzX2Nsb2NrKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1f ZHBfZHVhbF9tb2RlX2dldF90bWRzX291dHB1dCAtIEdldCB0aGUgc3RhdGUgb2YgdGhlIFRNRFMN Cj4gb3V0cHV0IGJ1ZmZlcnMgaW4gdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yDQo+ICsgKiBAdHlw ZTogRFAgZHVhbCBtb2RlIGFkYXB0b3IgdHlwZQ0KPiArICogQGFkYXB0ZXI6IEkyQyBhZGFwdGVy IGZvciB0aGUgRERDIGJ1cw0KPiArICogQGVuYWJsZWQ6IGN1cnJlbnQgc3RhdGUgb2YgdGhlIFRN RFMgb3V0cHV0IGJ1ZmZlcnMNCj4gKyAqDQo+ICsgKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBUTURT IG91dHB1dCBidWZmZXJzIGluIHRoZSBhZGFwdG9yLiBGb3INCj4gKyAqIHR5cGUyIGFkYXB0b3Jz IHRoaXMgaXMgcXVlcmllZCBmcm9tIHRoZSBEUF9EVUFMX01PREVfVE1EU19PRU4NCj4gKyAqIHJl Z2lzdGVyLiBBcyBzb21lIHR5cGUgMSBhZGFwdG9ycyBoYXZlIHByb2JsZW1zIHdpdGggcmVnaXN0 ZXJzDQo+ICsgKiAoc2VlIGNvbW1lbnRzIGluIGRybV9kcF9kdWFsX21vZGVfZGV0ZWN0KCkpIHdl IGRvbid0IHJlYWQgdGhlDQo+ICsgKiByZWdpc3RlciBvbiB0aG9zZSwgaW5zdGVhZCB3ZSBzaW1w bHkgYXNzdW1lIHRoYXQgdGhlIGJ1ZmZlcnMNCj4gKyAqIGFyZSBhbHdheXMgZW5hYmxlZC4NCj4g KyAqDQo+ICsgKiBSZXR1cm5zOg0KPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBj b2RlIG9uIGZhaWx1cmUNCj4gKyAqLw0KPiAraW50IGRybV9kcF9kdWFsX21vZGVfZ2V0X3RtZHNf b3V0cHV0KGVudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlDQo+IHR5cGUsDQo+ICsJCQkJwqDCoMKg wqDCoHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwNCj4gKwkJCQnCoMKgwqDCoMKgYm9vbCAq ZW5hYmxlZCkNCj4gK3sNCj4gKwl1aW50OF90IHRtZHNfb2VuOw0KPiArCXNzaXplX3QgcmV0Ow0K PiArDQo+ICsJaWYgKHR5cGUgPCBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0RWSSkgew0KPiArCQkq ZW5hYmxlZCA9IHRydWU7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGRy bV9kcF9kdWFsX21vZGVfcmVhZChhZGFwdGVyLCBEUF9EVUFMX01PREVfVE1EU19PRU4sDQo+ICsJ CQkJwqDCoMKgwqAmdG1kc19vZW4sIHNpemVvZih0bWRzX29lbikpOw0KPiArCWlmIChyZXQpIHsN Cj4gKwkJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIHF1ZXJ5IHN0YXRlIG9mIFRNRFMgb3V0cHV0 DQo+IGJ1ZmZlcnNcbiIpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCSplbmFi bGVkID0gISh0bWRzX29lbiAmIERQX0RVQUxfTU9ERV9UTURTX0RJU0FCTEUpOw0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9kdWFsX21vZGVfZ2V0X3Rt ZHNfb3V0cHV0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZHBfZHVhbF9tb2RlX3NldF90bWRz X291dHB1dCAtIEVuYWJsZS9kaXNhYmxlIFRNRFMgb3V0cHV0DQo+IGJ1ZmZlcnMgaW4gdGhlIERQ IGR1YWwgbW9kZSBhZGFwdG9yDQo+ICsgKiBAdHlwZTogRFAgZHVhbCBtb2RlIGFkYXB0b3IgdHlw ZQ0KPiArICogQGFkYXB0ZXI6IEkyQyBhZGFwdGVyIGZvciB0aGUgRERDIGJ1cw0KPiArICogQGVu YWJsZTogZW5hYmxlIChhcyBvcHBvc2VkIHRvIGRpc2FibGUpIHRoZSBUTURTIG91dHB1dCBidWZm ZXJzDQo+ICsgKg0KPiArICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgVE1EUyBvdXRwdXQgYnVmZmVy cyBpbiB0aGUgYWRhcHRvci4gRm9yDQo+ICsgKiB0eXBlMiB0aGlzIGlzIHNldCB2aWEgdGhlIERQ X0RVQUxfTU9ERV9UTURTX09FTiByZWdpc3Rlci4gQXMNCj4gKyAqIHNvbWUgdHlwZSAxIGFkYXB0 b3JzIGhhdmUgcHJvYmxlbXMgd2l0aCByZWdpc3RlcnMgKHNlZSBjb21tZW50cw0KPiArICogaW4g ZHJtX2RwX2R1YWxfbW9kZV9kZXRlY3QoKSkgd2UgYXZvaWQgdG91Y2hpbmcgdGhlIHJlZ2lzdGVy LA0KPiArICogbWFraW5nIHRoaXMgZnVuY3Rpb24gYSBuby1vcCBvbiB0eXBlIDEgYWRhcHRvcnMu DQo+ICsgKg0KPiArICogUmV0dXJuczoNCj4gKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK2ludCBkcm1fZHBfZHVhbF9tb2RlX3NldF90 bWRzX291dHB1dChlbnVtIGRybV9kcF9kdWFsX21vZGVfdHlwZQ0KPiB0eXBlLA0KPiArCQkJCcKg wqDCoMKgwqBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsDQo+IGJvb2wgZW5hYmxlKQ0KPiAr ew0KPiArCXVpbnQ4X3QgdG1kc19vZW4gPSBlbmFibGUgPyAwIDogRFBfRFVBTF9NT0RFX1RNRFNf RElTQUJMRTsNCj4gKwlzc2l6ZV90IHJldDsNCj4gKw0KPiArCWlmICh0eXBlIDwgRFJNX0RQX0RV QUxfTU9ERV9UWVBFMl9EVkkpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJcmV0ID0gZHJtX2Rw X2R1YWxfbW9kZV93cml0ZShhZGFwdGVyLCBEUF9EVUFMX01PREVfVE1EU19PRU4sDQo+ICsJCQkJ wqDCoMKgwqDCoCZ0bWRzX29lbiwgc2l6ZW9mKHRtZHNfb2VuKSk7DQo+ICsJaWYgKHJldCkgew0K PiArCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gJXMgVE1EUyBvdXRwdXQgYnVmZmVyc1xuIiwN Cj4gKwkJCcKgwqDCoMKgwqDCoGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsNCj4gKwkJ cmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9T WU1CT0woZHJtX2RwX2R1YWxfbW9kZV9zZXRfdG1kc19vdXRwdXQpOw0KPiArDQo+ICsvKioNCj4g KyAqIGRybV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZSAtIEdldCB0aGUgbmFtZSBvZiB0aGUg RFAgZHVhbCBtb2RlDQo+IGFkYXB0b3IgdHlwZSBhcyBhIHN0cmluZw0KPiArICogQHR5cGU6IERQ IGR1YWwgbW9kZSBhZGFwdG9yIHR5cGUNCj4gKyAqDQo+ICsgKiBSZXR1cm5zOg0KPiArICogU3Ry aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEUCBkdWFsIG1vZGUgYWRhcHRvciB0eXBlDQo+ICsg Ki8NCj4gK2NvbnN0IGNoYXIgKmRybV9kcF9nZXRfZHVhbF9tb2RlX3R5cGVfbmFtZShlbnVtDQo+ IGRybV9kcF9kdWFsX21vZGVfdHlwZSB0eXBlKQ0KPiArew0KPiArCXN3aXRjaCAodHlwZSkgew0K PiArCWNhc2UgRFJNX0RQX0RVQUxfTU9ERV9OT05FOg0KPiArCQlyZXR1cm4gIm5vbmUiOw0KPiAr CWNhc2UgRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9EVkk6DQo+ICsJCXJldHVybiAidHlwZSAxIERW SSI7DQo+ICsJY2FzZSBEUk1fRFBfRFVBTF9NT0RFX1RZUEUxX0hETUk6DQo+ICsJCXJldHVybiAi dHlwZSAxIEhETUkiOw0KPiArCWNhc2UgRFJNX0RQX0RVQUxfTU9ERV9UWVBFMl9EVkk6DQo+ICsJ CXJldHVybiAidHlwZSAyIERWSSI7DQo+ICsJY2FzZSBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0hE TUk6DQo+ICsJCXJldHVybiAidHlwZSAyIEhETUkiOw0KPiArCWRlZmF1bHQ6DQo+ICsJCVdBUk5f T04odHlwZSAhPSBEUk1fRFBfRFVBTF9NT0RFX1VOS05PV04pOw0KPiArCQlyZXR1cm4gInVua25v d24iOw0KPiArCX0NCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2dldF9kdWFsX21vZGVf dHlwZV9uYW1lKTsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9kdWFsX21vZGVf aGVscGVyLmgNCj4gYi9pbmNsdWRlL2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5oDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZThhOWRmZDBlMDU1DQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9oZWxw ZXIuaA0KPiBAQCAtMCwwICsxLDkyIEBADQo+ICsvKg0KPiArICogQ29weXJpZ2h0IMKpIDIwMTYg SW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqDQo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbg0KPiBvYnRhaW5pbmcgYQ0KPiArICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZQ0KPiAiU29mdHdhcmUiKSwNCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0DQo+IGxpbWl0YXRpb24NCj4gKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LA0KPiBzdWJsaWNlbnNlLA0KPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20NCj4gdGhlDQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZw0KPiBjb25kaXRp b25zOg0KPiArICoNCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlDQo+IGluY2x1ZGVkIGluDQo+ICsgKiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwNCj4gRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRg0KPiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBO Tw0KPiBFVkVOVCBTSEFMTA0KPiArICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9S KFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLA0KPiBEQU1BR0VTIE9SDQo+ICsgKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SDQo+IE9U SEVSV0lTRSwNCj4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFDQo+IFVTRSBPUg0KPiArICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgRFJNX0RQX0RVQUxfTU9ERV9I RUxQRVJfSA0KPiArI2RlZmluZSBEUk1fRFBfRFVBTF9NT0RFX0hFTFBFUl9IDQo+ICsNCj4gKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiArDQo+ICsvKg0KPiArICogT3B0aW9uYWwgZm9yIHR5 cGUgMSBEVkkgYWRhcHRvcnMNCj4gKyAqIE1hbmRhdG9yeSBmb3IgdHlwZSAxIEhETUkgYW5kIHR5 cGUgMiBhZGFwdG9ycw0KPiArICovDQo+ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9IRE1JX0lEIDB4 MDAgLyogMDAtMGYgKi8NCj4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RFX0hETUlfSURfTEVOIDE2 DQo+ICsvKg0KPiArICogT3B0aW9uYWwgZm9yIHR5cGUgMSBhZGFwdG9ycw0KPiArICogTWFuZGF0 b3J5IGZvciB0eXBlIDIgYWRhcHRvcnMNCj4gKyAqLw0KPiArI2RlZmluZSBEUF9EVUFMX01PREVf QURBUFRPUl9JRCAweDEwDQo+ICsjZGVmaW5lwqDCoERQX0RVQUxfTU9ERV9SRVZfTUFTSyAweDA3 DQo+ICsjZGVmaW5lwqDCoERQX0RVQUxfTU9ERV9SRVZfVFlQRTIgMHgwMA0KPiArI2RlZmluZcKg wqBEUF9EVUFMX01PREVfVFlQRV9NQVNLIDB4ZjANCj4gKyNkZWZpbmXCoMKgRFBfRFVBTF9NT0RF X1RZUEVfVFlQRTIgMHhhMA0KPiArI2RlZmluZSBEUF9EVUFMX01PREVfSUVFRV9PVUkgMHgxMSAv KiAxMS0xMyovDQo+ICsjZGVmaW5lwqDCoERQX0RVQUxfSUVFRV9PVUlfTEVOIDMNCj4gKyNkZWZp bmUgRFBfRFVBTF9ERVZJQ0VfSUQgMHgxNCAvKiAxNC0xOSAqLw0KPiArI2RlZmluZcKgwqBEUF9E VUFMX0RFVklDRV9JRF9MRU4gNg0KPiArI2RlZmluZSBEUF9EVUFMX01PREVfSEFSRFdBUkVfUkVW IDB4MWENCj4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0ZJUk1XQVJFX01BSk9SX1JFViAweDFiDQo+ ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9GSVJNV0FSRV9NSU5PUl9SRVYgMHgxYw0KPiArI2RlZmlu ZSBEUF9EVUFMX01PREVfTUFYX1RNRFNfQ0xPQ0sgMHgxZA0KPiArI2RlZmluZSBEUF9EVUFMX01P REVfSTJDX1NQRUVEX0NBUCAweDFlDQo+ICsjZGVmaW5lIERQX0RVQUxfTU9ERV9UTURTX09FTiAw eDIwDQo+ICsjZGVmaW5lwqDCoERQX0RVQUxfTU9ERV9UTURTX0RJU0FCTEUgMHgwMQ0KPiArI2Rl ZmluZSBEUF9EVUFMX01PREVfSERNSV9QSU5fQ1RSTCAweDIxDQo+ICsjZGVmaW5lwqDCoERQX0RV QUxfTU9ERV9DRUNfRU5BQkxFIDB4MDENCj4gKyNkZWZpbmUgRFBfRFVBTF9NT0RFX0kyQ19TUEVF RF9DVFJMIDB4MjINCj4gKw0KPiArc3RydWN0IGkyY19hZGFwdGVyOw0KPiArDQo+ICtzc2l6ZV90 IGRybV9kcF9kdWFsX21vZGVfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsDQo+ICsJ CQnCoMKgwqDCoMKgwqB1OCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOw0KPiAr c3NpemVfdCBkcm1fZHBfZHVhbF9tb2RlX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRl ciwNCj4gKwkJCcKgwqDCoMKgwqDCoMKgdTggb2Zmc2V0LCBjb25zdCB2b2lkICpidWZmZXIsIHNp emVfdA0KPiBzaXplKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBlbnVtIGRybV9kcF9kdWFsX21vZGVf dHlwZSAtIFR5cGUgb2YgdGhlIERQIGR1YWwgbW9kZSBhZGFwdG9yDQo+ICsgKiBARFJNX0RQX0RV QUxfTU9ERV9OT05FOiBObyBEUCBkdWFsIG1vZGUgYWRhcHRvcg0KPiArICogQERSTV9EUF9EVUFM X01PREVfVU5LTk9XTjogQ291bGQgYmUgZWl0aGVyIG5vbmUgb3IgdHlwZSAxIERWSQ0KPiBhZGFw dG9yDQo+ICsgKiBARFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9EVkk6IFR5cGUgMSBEVkkgYWRhcHRv cg0KPiArICogQERSTV9EUF9EVUFMX01PREVfVFlQRTFfSERNSTogVHlwZSAxIEhETUkgYWRhcHRv cg0KPiArICogQERSTV9EUF9EVUFMX01PREVfVFlQRTJfRFZJOiBUeXBlIDIgRFZJIGFkYXB0b3IN Cj4gKyAqIEBEUk1fRFBfRFVBTF9NT0RFX1RZUEUyX0hETUk6IFR5cGUgMiBIRE1JIGFkYXB0b3IN Cj4gKyAqLw0KPiArZW51bSBkcm1fZHBfZHVhbF9tb2RlX3R5cGUgew0KPiArCURSTV9EUF9EVUFM X01PREVfTk9ORSwNCj4gKwlEUk1fRFBfRFVBTF9NT0RFX1VOS05PV04sDQo+ICsJRFJNX0RQX0RV QUxfTU9ERV9UWVBFMV9EVkksDQo+ICsJRFJNX0RQX0RVQUxfTU9ERV9UWVBFMV9IRE1JLA0KPiAr CURSTV9EUF9EVUFMX01PREVfVFlQRTJfRFZJLA0KPiArCURSTV9EUF9EVUFMX01PREVfVFlQRTJf SERNSSwNCj4gK307DQo+ICsNCj4gK2VudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlIGRybV9kcF9k dWFsX21vZGVfZGV0ZWN0KHN0cnVjdA0KPiBpMmNfYWRhcHRlciAqYWRhcHRlcik7DQo+ICtpbnQg ZHJtX2RwX2R1YWxfbW9kZV9tYXhfdG1kc19jbG9jayhlbnVtIGRybV9kcF9kdWFsX21vZGVfdHlw ZSB0eXBlLA0KPiArCQkJCcKgwqDCoMKgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsNCj4g K2ludCBkcm1fZHBfZHVhbF9tb2RlX2dldF90bWRzX291dHB1dChlbnVtIGRybV9kcF9kdWFsX21v ZGVfdHlwZQ0KPiB0eXBlLA0KPiArCQkJCcKgwqDCoMKgwqBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXB0ZXIsDQo+IGJvb2wgKmVuYWJsZWQpOw0KPiAraW50IGRybV9kcF9kdWFsX21vZGVfc2V0X3Rt ZHNfb3V0cHV0KGVudW0gZHJtX2RwX2R1YWxfbW9kZV90eXBlDQo+IHR5cGUsDQo+ICsJCQkJwqDC oMKgwqDCoHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwNCj4gYm9vbCBlbmFibGUpOw0KPiAr Y29uc3QgY2hhciAqZHJtX2RwX2dldF9kdWFsX21vZGVfdHlwZV9uYW1lKGVudW0NCj4gZHJtX2Rw X2R1YWxfbW9kZV90eXBlIHR5cGUpOw0KPiArDQo+ICsjZW5kaWYKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==