From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Souza, Jose" Subject: Re: [PATCH 03/23] drm/i915: Move the TypeC port handling code to a separate file Date: Fri, 7 Jun 2019 17:56:43 +0000 Message-ID: <5d5a2d8c89e30ea163c0244b7f3efce3d0b143dc.camel@intel.com> References: <20190604145826.16424-1-imre.deak@intel.com> <20190604145826.16424-4-imre.deak@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1180089DBC for ; Fri, 7 Jun 2019 17:56:46 +0000 (UTC) In-Reply-To: <20190604145826.16424-4-imre.deak@intel.com> Content-Language: en-US Content-ID: <2B3605C318B6A04E90EF0649B3E21174@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "intel-gfx@lists.freedesktop.org" , "Deak, Imre" Cc: "Zanoni, Paulo R" List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE5LTA2LTA0IGF0IDE3OjU4ICswMzAwLCBJbXJlIERlYWsgd3JvdGU6DQo+IE1v dmUgdGhlIFR5cGVDIHBvcnQgaGFuZGxpbmcgZnVuY3Rpb25zIHRvIGEgbmV3IGZpbGUgZm9yIGNs YXJpdHkuDQo+IA0KPiBXaGlsZSBhdCBpdDoNCj4gLSBzL2ljbF90Y19wb3J0X2Nvbm5lY3RlZCgp L2ludGVsX3RjX3BvcnRfY29ubmVjdGVkKCkvDQo+ICAgaWNsX3RjX3BoeV9kaXNjb25uZWN0KCks IHdpbGwgYmUgdW5leHBvcnRlZCBsYXRlci4NCj4gDQo+IC0NCj4gcy9pbnRlbF9kcF9nZXRfZmlh X3N1cHBvcnRlZF9sYW5lX2NvdW50KCkvaW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfDQo+IGNv dW50KCkvDQo+ICAgSXQncyB1c2VkIGZvciBIRE1JIGxlZ2FjeSBtb2RlIHRvby4NCj4gDQo+IC0g U2ltcGxpZnkgZnVuY3Rpb24gaW50ZXJmYWNlcyBieSBwYXNzaW5nIG9ubHkgZGlnX3BvcnQgdG8g dGhlbS4NCj4gDQo+IE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4NCg0KTmljZS4NCg0KUmV2aWV3ZWQt Ynk6IEpvc8OpIFJvYmVydG8gZGUgU291emEgPGpvc2Uuc291emFAaW50ZWwuY29tPg0KDQo+IA0K PiBDYzogQW5pbWVzaCBNYW5uYSA8YW5pbWVzaC5tYW5uYUBpbnRlbC5jb20+DQo+IENjOiBQYXVs byBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4NCj4gQ2M6IEpvc8OpIFJvYmVydG8g ZGUgU291emEgPGpvc2Uuc291emFAaW50ZWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBJbXJlIERl YWsgPGltcmUuZGVha0BpbnRlbC5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlLmhlYWRlci10ZXN0IHwgICAxICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RkaS5jICAgICAgICAgIHwgICA2ICstDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jICAgICAgICAgICB8IDIyNyArLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAtDQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5oICAgICAgICAgICB8ICAgMiAtDQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF90Yy5jICAgICAgICAgICB8IDIzMA0KPiArKysrKysrKysrKysrKysr KysrKysrDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5oICAgICAgICAgICB8ICAx MyArKw0KPiAgNyBmaWxlcyBjaGFuZ2VkLCAyNTIgaW5zZXJ0aW9ucygrKSwgMjMwIGRlbGV0aW9u cygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Rj LmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5o DQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQ0KPiBpbmRleCBjMGE3YjI5OTQwNzcuLjc0YzRk MTFkODNlYiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gQEAgLTE3MSw3ICsxNzEsOCBA QCBpOTE1LXkgKz0gaW50ZWxfYXVkaW8ubyBcDQo+ICAJICBpbnRlbF9wc3IubyBcDQo+ICAJICBp bnRlbF9xdWlya3MubyBcDQo+ICAJICBpbnRlbF9zaWRlYmFuZC5vIFwNCj4gLQkgIGludGVsX3Nw cml0ZS5vDQo+ICsJICBpbnRlbF9zcHJpdGUubyBcDQo+ICsJICBpbnRlbF90Yy5vDQo+ICBpOTE1 LSQoQ09ORklHX0FDUEkpCQkrPSBpbnRlbF9hY3BpLm8gaW50ZWxfb3ByZWdpb24ubw0KPiAgaTkx NS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKQkrPSBpbnRlbF9mYmRldi5vDQo+ICANCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0DQo+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUuaGVhZGVyLXRlc3QNCj4gaW5kZXggNmVm M2I2NDdhYzY1Li5lODBlOGU0NWIwOWMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlLmhlYWRlci10ZXN0DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlLmhlYWRlci10ZXN0DQo+IEBAIC01OCw2ICs1OCw3IEBAIGhlYWRlcl90ZXN0IDo9IFwN Cj4gIAlpbnRlbF9zZHZvLmggXA0KPiAgCWludGVsX3NpZGViYW5kLmggXA0KPiAgCWludGVsX3Nw cml0ZS5oIFwNCj4gKwlpbnRlbF90Yy5oIFwNCj4gIAlpbnRlbF90di5oIFwNCj4gIAlpbnRlbF91 bmNvcmUuaCBcDQo+ICAJaW50ZWxfdmRzYy5oIFwNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RkaS5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRp LmMNCj4gaW5kZXggMzUwZWFmNTRmMDFmLi41YTFjOTg0MzgzNzUgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RkaS5jDQo+IEBAIC00NSw2ICs0NSw3IEBADQo+ICAjaW5jbHVkZSAiaW50ZWxf bHNwY29uLmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCINCj4gICNpbmNsdWRlICJpbnRl bF9wc3IuaCINCj4gKyNpbmNsdWRlICJpbnRlbF90Yy5oIg0KPiAgI2luY2x1ZGUgImludGVsX3Zk c2MuaCINCj4gIA0KPiAgc3RydWN0IGRkaV9idWZfdHJhbnMgew0KPiBAQCAtMzkwNCw3ICszOTA1 LDYgQEAgc3RhdGljIGludCBpbnRlbF9kZGlfY29tcHV0ZV9jb25maWcoc3RydWN0DQo+IGludGVs X2VuY29kZXIgKmVuY29kZXIsDQo+ICBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfZW5jb2Rlcl9zdXNw ZW5kKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQ0KPiAgew0KPiAgCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KCZlbmNvZGVyLQ0KPiA+ YmFzZSk7DQo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29k ZXItPmJhc2UuZGV2KTsNCj4gIA0KPiAgCWludGVsX2RwX2VuY29kZXJfc3VzcGVuZChlbmNvZGVy KTsNCj4gIA0KPiBAQCAtMzkxNCw3ICszOTE0LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2Vu Y29kZXJfc3VzcGVuZChzdHJ1Y3QNCj4gaW50ZWxfZW5jb2RlciAqZW5jb2RlcikNCj4gIAkgKiBl dmVuIGlmIHRoZSBzaW5rIGhhcyBkaXNhcHBlYXJlZCB3aGlsZSBiZWluZyBzdXNwZW5kZWQuDQo+ ICAJICovDQo+ICAJaWYgKGRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCkNCj4gLQkJaWNsX3RjX3Bo eV9kaXNjb25uZWN0KGk5MTUsIGRpZ19wb3J0KTsNCj4gKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0 KGRpZ19wb3J0KTsNCj4gIH0NCj4gIA0KPiAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJf cmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jb2RlcikNCj4gQEAgLTM5MzYsNyArMzkz Niw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0DQo+IGRy bV9lbmNvZGVyICplbmNvZGVyKQ0KPiAgCWludGVsX2RwX2VuY29kZXJfZmx1c2hfd29yayhlbmNv ZGVyKTsNCj4gIA0KPiAgCWlmIChpbnRlbF9wb3J0X2lzX3RjKGk5MTUsIGRpZ19wb3J0LT5iYXNl LnBvcnQpKQ0KPiAtCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoaTkxNSwgZGlnX3BvcnQpOw0KPiAr CQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOw0KPiAgDQo+ICAJZHJtX2VuY29kZXJf Y2xlYW51cChlbmNvZGVyKTsNCj4gIAlrZnJlZShkaWdfcG9ydCk7DQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHAuYw0KPiBpbmRleCAyNGI1NmIyYTc2YzguLmI2OTMxMGJkOTkxNCAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYw0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5jDQo+IEBAIC02Miw2ICs2Miw3IEBADQo+ICAjaW5jbHVkZSAi aW50ZWxfcGFuZWwuaCINCj4gICNpbmNsdWRlICJpbnRlbF9wc3IuaCINCj4gICNpbmNsdWRlICJp bnRlbF9zaWRlYmFuZC5oIg0KPiArI2luY2x1ZGUgImludGVsX3RjLmgiDQo+ICAjaW5jbHVkZSAi aW50ZWxfdmRzYy5oIg0KPiAgDQo+ICAjZGVmaW5lIERQX0RQUlhfRVNJX0xFTiAxNA0KPiBAQCAt MjExLDQ2ICsyMTIsMTMgQEAgc3RhdGljIGludCBpbnRlbF9kcF9tYXhfY29tbW9uX3JhdGUoc3Ry dWN0DQo+IGludGVsX2RwICppbnRlbF9kcCkNCj4gIAlyZXR1cm4gaW50ZWxfZHAtPmNvbW1vbl9y YXRlc1tpbnRlbF9kcC0+bnVtX2NvbW1vbl9yYXRlcyAtIDFdOw0KPiAgfQ0KPiAgDQo+IC1zdGF0 aWMgaW50IGludGVsX2RwX2dldF9maWFfc3VwcG9ydGVkX2xhbmVfY291bnQoc3RydWN0IGludGVs X2RwDQo+ICppbnRlbF9kcCkNCj4gLXsNCj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpk aWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LQ0KPiA+YmFzZS5iYXNlLmRldik7 DQo+IC0JZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBk aWdfcG9ydC0NCj4gPmJhc2UucG9ydCk7DQo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7DQo+ IC0JdTMyIGxhbmVfaW5mbzsNCj4gLQ0KPiAtCWlmICh0Y19wb3J0ID09IFBPUlRfVENfTk9ORSB8 fCBkaWdfcG9ydC0+dGNfdHlwZSAhPQ0KPiBUQ19QT1JUX1RZUEVDKQ0KPiAtCQlyZXR1cm4gNDsN Cj4gLQ0KPiAtCWxhbmVfaW5mbyA9IDA7DQo+IC0Jd2l0aF9pbnRlbF9kaXNwbGF5X3Bvd2VyKGRl dl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9DT1JFLA0KPiB3YWtlcmVmKQ0KPiAtCQlsYW5l X2luZm8gPSAoSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKSAmDQo+IC0JCQkgICAgIERQX0xB TkVfQVNTSUdOTUVOVF9NQVNLKHRjX3BvcnQpKSA+Pg0KPiAtCQkJCURQX0xBTkVfQVNTSUdOTUVO VF9TSElGVCh0Y19wb3J0KTsNCj4gLQ0KPiAtCXN3aXRjaCAobGFuZV9pbmZvKSB7DQo+IC0JZGVm YXVsdDoNCj4gLQkJTUlTU0lOR19DQVNFKGxhbmVfaW5mbyk7DQo+IC0JY2FzZSAxOg0KPiAtCWNh c2UgMjoNCj4gLQljYXNlIDQ6DQo+IC0JY2FzZSA4Og0KPiAtCQlyZXR1cm4gMTsNCj4gLQljYXNl IDM6DQo+IC0JY2FzZSAxMjoNCj4gLQkJcmV0dXJuIDI7DQo+IC0JY2FzZSAxNToNCj4gLQkJcmV0 dXJuIDQ7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+ICAvKiBUaGVvcmV0aWNhbCBtYXggYmV0d2VlbiBz b3VyY2UgYW5kIHNpbmsgKi8NCj4gIHN0YXRpYyBpbnQgaW50ZWxfZHBfbWF4X2NvbW1vbl9sYW5l X2NvdW50KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICB7DQo+ICAJc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPQ0KPiBkcF90b19kaWdfcG9ydChpbnRlbF9k cCk7DQo+ICAJaW50IHNvdXJjZV9tYXggPSBpbnRlbF9kaWdfcG9ydC0+bWF4X2xhbmVzOw0KPiAg CWludCBzaW5rX21heCA9IGRybV9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcC0+ZHBjZCk7DQo+ IC0JaW50IGZpYV9tYXggPSBpbnRlbF9kcF9nZXRfZmlhX3N1cHBvcnRlZF9sYW5lX2NvdW50KGlu dGVsX2RwKTsNCj4gKwlpbnQgZmlhX21heCA9IGludGVsX3RjX3BvcnRfZmlhX21heF9sYW5lX2Nv dW50KGludGVsX2RpZ19wb3J0KTsNCj4gIA0KPiAgCXJldHVybiBtaW4zKHNvdXJjZV9tYXgsIHNp bmtfbWF4LCBmaWFfbWF4KTsNCj4gIH0NCj4gQEAgLTUyMzEsMTk1ICs1MTk5LDYgQEAgc3RhdGlj IGJvb2wgaWNsX2NvbWJvX3BvcnRfY29ubmVjdGVkKHN0cnVjdA0KPiBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwNCj4gIAlyZXR1cm4gSTkxNV9SRUFEKFNERUlTUikgJiBTREVfRERJX0hPVFBM VUdfSUNQKHBvcnQpOw0KPiAgfQ0KPiAgDQo+IC1zdGF0aWMgY29uc3QgY2hhciAqdGNfdHlwZV9u YW1lKGVudW0gdGNfcG9ydF90eXBlIHR5cGUpDQo+IC17DQo+IC0Jc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCBuYW1lc1tdID0gew0KPiAtCQlbVENfUE9SVF9VTktOT1dOXSA9ICJ1bmtub3duIiwN Cj4gLQkJW1RDX1BPUlRfTEVHQUNZXSA9ICJsZWdhY3kiLA0KPiAtCQlbVENfUE9SVF9UWVBFQ10g PSAidHlwZWMiLA0KPiAtCQlbVENfUE9SVF9UQlRdID0gInRidCIsDQo+IC0JfTsNCj4gLQ0KPiAt CWlmIChXQVJOX09OKHR5cGUgPj0gQVJSQVlfU0laRShuYW1lcykpKQ0KPiAtCQl0eXBlID0gVENf UE9SVF9VTktOT1dOOw0KPiAtDQo+IC0JcmV0dXJuIG5hbWVzW3R5cGVdOw0KPiAtfQ0KPiAtDQo+ IC1zdGF0aWMgdm9pZCBpY2xfdXBkYXRlX3RjX3BvcnRfdHlwZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJICAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQN Cj4gKmludGVsX2RpZ19wb3J0LA0KPiAtCQkJCSAgICBib29sIGlzX2xlZ2FjeSwgYm9vbCBpc190 eXBlYywgYm9vbA0KPiBpc190YnQpDQo+IC17DQo+IC0JZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9k aWdfcG9ydC0+YmFzZS5wb3J0Ow0KPiAtCWVudW0gdGNfcG9ydF90eXBlIG9sZF90eXBlID0gaW50 ZWxfZGlnX3BvcnQtPnRjX3R5cGU7DQo+IC0NCj4gLQlXQVJOX09OKGlzX2xlZ2FjeSArIGlzX3R5 cGVjICsgaXNfdGJ0ICE9IDEpOw0KPiAtDQo+IC0JaWYgKGlzX2xlZ2FjeSkNCj4gLQkJaW50ZWxf ZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX0xFR0FDWTsNCj4gLQllbHNlIGlmIChpc190eXBl YykNCj4gLQkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1RZUEVDOw0KPiAtCWVs c2UgaWYgKGlzX3RidCkNCj4gLQkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1RC VDsNCj4gLQllbHNlDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCS8qIFR5cGVzIGFyZSBub3Qgc3Vw cG9zZWQgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lLiAqLw0KPiAtCVdBUk5fT04ob2xkX3R5cGUg IT0gVENfUE9SVF9VTktOT1dOICYmDQo+IC0JCW9sZF90eXBlICE9IGludGVsX2RpZ19wb3J0LT50 Y190eXBlKTsNCj4gLQ0KPiAtCWlmIChvbGRfdHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlw ZSkNCj4gLQkJRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBoYXMgVEMgdHlwZSAlc1xuIiwNCj4gcG9y dF9uYW1lKHBvcnQpLA0KPiAtCQkJICAgICAgdGNfdHlwZV9uYW1lKGludGVsX2RpZ19wb3J0LT50 Y190eXBlKSk7DQo+IC19DQo+IC0NCj4gLS8qDQo+IC0gKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVu dHMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIENvbm5lY3QgRmxvdw0KPiBkZXNjcmliZWQgYnkgb3Vy DQo+IC0gKiBzcGVjaWZpY2F0aW9uLCBHZW4xMSBUeXBlQyBQcm9ncmFtbWluZyBjaGFwdGVyLiBU aGUgcmVzdCBvZiB0aGUNCj4gZmxvdyAocmVhZGluZw0KPiAtICogbGFuZXMsIEVESUQsIGV0Yykg aXMgZG9uZSBhcyBuZWVkZWQgaW4gdGhlIHR5cGljYWwgcGxhY2VzLg0KPiAtICoNCj4gLSAqIFVu bGlrZSB0aGUgb3RoZXIgcG9ydHMsIHR5cGUtQyBwb3J0cyBhcmUgbm90IGF2YWlsYWJsZSB0byB1 c2UgYXMNCj4gc29vbiBhcyB3ZQ0KPiAtICogZ2V0IGEgaG90cGx1Zy4gVGhlIHR5cGUtQyBQSFlz IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZQ0KPiBjb250cm9sbGVyczoNCj4gLSAqIGRp c3BsYXksIFVTQiwgZXRjLiBBcyBhIHJlc3VsdCwgaGFuZHNoYWtpbmcgdGhyb3VnaCBGSUEgaXMN Cj4gcmVxdWlyZWQgYXJvdW5kDQo+IC0gKiBjb25uZWN0IGFuZCBkaXNjb25uZWN0IHRvIGNsZWFu bHkgdHJhbnNmZXIgb3duZXJzaGlwIHdpdGggdGhlDQo+IGNvbnRyb2xsZXIgYW5kDQo+IC0gKiBz ZXQgdGhlIHR5cGUtQyBwb3dlciBzdGF0ZS4NCj4gLSAqDQo+IC0gKiBXZSBjb3VsZCBvcHQgdG8g b25seSBkbyB0aGUgY29ubmVjdCBmbG93IHdoZW4gd2UgYWN0dWFsbHkgdHJ5IHRvDQo+IHVzZSB0 aGUgQVVYDQo+IC0gKiBjaGFubmVscyBvciBkbyBhIG1vZGVzZXQsIHRoZW4gaW1tZWRpYXRlbHkg cnVuIHRoZSBkaXNjb25uZWN0DQo+IGZsb3cgYWZ0ZXINCj4gLSAqIHVzYWdlLCBidXQgdGhlcmUg YXJlIHNvbWUgaW1wbGljYXRpb25zIG9uIHRoaXMgZm9yIGEgZHluYW1pYw0KPiBlbnZpcm9ubWVu dDoNCj4gLSAqIHRoaW5ncyBtYXkgZ28gYXdheSBvciBjaGFuZ2UgYmVoaW5kIG91ciBiYWNrcy4g U28gZm9yIG5vdyBvdXINCj4gZHJpdmVyIGlzDQo+IC0gKiBhbHdheXMgdHJ5aW5nIHRvIGFjcXVp cmUgb3duZXJzaGlwIG9mIHRoZSBjb250cm9sbGVyIGFzIHNvb24gYXMNCj4gaXQgZ2V0cyBhbg0K PiAtICogaW50ZXJydXB0IChvciBwb2xscyBzdGF0ZSBhbmQgc2VlcyBhIHBvcnQgaXMgY29ubmVj dGVkKSBhbmQgb25seQ0KPiBnaXZlcyBpdA0KPiAtICogYmFjayB3aGVuIGl0IHNlZXMgYSBkaXNj b25uZWN0LiBJbXBsZW1lbnRhdGlvbiBvZiBhIG1vcmUgZmluZS0NCj4gZ3JhaW5lZCBtb2RlbA0K PiAtICogd2lsbCByZXF1aXJlIGEgbG90IG9mIGNvb3JkaW5hdGlvbiB3aXRoIHVzZXIgc3BhY2Ug YW5kIHRob3JvdWdoDQo+IHRlc3RpbmcgZm9yDQo+IC0gKiB0aGUgZXh0cmEgcG9zc2libGUgY2Fz ZXMuDQo+IC0gKi8NCj4gLXN0YXRpYyBib29sIGljbF90Y19waHlfY29ubmVjdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+IC0JCQkgICAgICAgc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQpDQo+IC17DQo+IC0JZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRl bF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0NCj4gPmJhc2UucG9ydCk7DQo+IC0JdTMy IHZhbDsNCj4gLQ0KPiAtCWlmIChkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX0xFR0FDWSAm Jg0KPiAtCSAgICBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX1RZUEVDKQ0KPiAtCQlyZXR1 cm4gdHJ1ZTsNCj4gLQ0KPiAtCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBQTVMpOw0K PiAtCWlmICghKHZhbCAmIERQX1BIWV9NT0RFX1NUQVRVU19DT01QTEVURUQodGNfcG9ydCkpKSB7 DQo+IC0JCURSTV9ERUJVR19LTVMoIkRQIFBIWSBmb3IgVEMgcG9ydCAlZCBub3QgcmVhZHlcbiIs DQo+IHRjX3BvcnQpOw0KPiAtCQlXQVJOX09OKGRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCk7DQo+ IC0JCXJldHVybiBmYWxzZTsNCj4gLQl9DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFRoaXMgZnVuY3Rp b24gbWF5IGJlIGNhbGxlZCBtYW55IHRpbWVzIGluIGEgcm93IHdpdGhvdXQgYW4NCj4gSFBEIGV2 ZW50DQo+IC0JICogaW4gYmV0d2Vlbiwgc28gdHJ5IHRvIGF2b2lkIHRoZSB3cml0ZSB3aGVuIHdl IGNhbi4NCj4gLQkgKi8NCj4gLQl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7 DQo+IC0JaWYgKCEodmFsICYgRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpKSkg ew0KPiAtCQl2YWwgfD0gRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpOw0KPiAt CQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7DQo+IC0JfQ0KPiAtDQo+IC0J LyoNCj4gLQkgKiBOb3cgd2UgaGF2ZSB0byByZS1jaGVjayB0aGUgbGl2ZSBzdGF0ZSwgaW4gY2Fz ZSB0aGUgcG9ydA0KPiByZWNlbnRseQ0KPiAtCSAqIGJlY2FtZSBkaXNjb25uZWN0ZWQuIE5vdCBu ZWNlc3NhcnkgZm9yIGxlZ2FjeSBtb2RlLg0KPiAtCSAqLw0KPiAtCWlmIChkaWdfcG9ydC0+dGNf dHlwZSA9PSBUQ19QT1JUX1RZUEVDICYmDQo+IC0JICAgICEoSTkxNV9SRUFEKFBPUlRfVFhfREZM RVhEUFNQKSAmDQo+IFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCkpKSB7DQo+IC0JCURSTV9ERUJV R19LTVMoIlRDIFBIWSAlZCBzdWRkZW4gZGlzY29ubmVjdC5cbiIsDQo+IHRjX3BvcnQpOw0KPiAt CQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGV2X3ByaXYsIGRpZ19wb3J0KTsNCj4gLQkJcmV0dXJu IGZhbHNlOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiB0cnVlOw0KPiAtfQ0KPiAtDQo+IC0vKg0K PiAtICogU2VlIHRoZSBjb21tZW50IGF0IHRoZSBjb25uZWN0IGZ1bmN0aW9uLiBUaGlzIGltcGxl bWVudHMgdGhlDQo+IERpc2Nvbm5lY3QNCj4gLSAqIEZsb3cuDQo+IC0gKi8NCj4gLXZvaWQgaWNs X3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4g LQkJCSAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KQ0KPiAtew0KPiAtCWVu dW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQt DQo+ID5iYXNlLnBvcnQpOw0KPiAtDQo+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BP UlRfVU5LTk9XTikNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBUQlQgZGlzY29u bmVjdGlvbiBmbG93IGlzIHJlYWQgdGhlIGxpdmUgc3RhdHVzLCB3aGF0IHdhcw0KPiBkb25lIGlu DQo+IC0JICogY2FsbGVyLg0KPiAtCSAqLw0KPiAtCWlmIChkaWdfcG9ydC0+dGNfdHlwZSA9PSBU Q19QT1JUX1RZUEVDIHx8DQo+IC0JICAgIGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfTEVH QUNZKSB7DQo+IC0JCXUzMiB2YWw7DQo+IC0NCj4gLQkJdmFsID0gSTkxNV9SRUFEKFBPUlRfVFhf REZMRVhEUENTU1MpOw0KPiAtCQl2YWwgJj0gfkRQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0 Y19wb3J0KTsNCj4gLQkJSTkxNV9XUklURShQT1JUX1RYX0RGTEVYRFBDU1NTLCB2YWwpOw0KPiAt CX0NCj4gLQ0KPiAtCURSTV9ERUJVR19LTVMoIlBvcnQgJWMgVEMgdHlwZSAlcyBkaXNjb25uZWN0 ZWRcbiIsDQo+IC0JCSAgICAgIHBvcnRfbmFtZShkaWdfcG9ydC0+YmFzZS5wb3J0KSwNCj4gLQkJ ICAgICAgdGNfdHlwZV9uYW1lKGRpZ19wb3J0LT50Y190eXBlKSk7DQo+IC0NCj4gLQlkaWdfcG9y dC0+dGNfdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsNCj4gLX0NCj4gLQ0KPiAtLyoNCj4gLSAqIFRo ZSB0eXBlLUMgcG9ydHMgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGV2ZW4gd2hlbiB0aGV5IGFyZQ0K PiBjb25uZWN0ZWQsIHRoZXkgbWF5DQo+IC0gKiBub3QgYmUgYXZhaWxhYmxlL3VzYWJsZSBieSB0 aGUgZ3JhcGhpY3MgZHJpdmVyOiBzZWUgdGhlIGNvbW1lbnQNCj4gb24NCj4gLSAqIGljbF90Y19w aHlfY29ubmVjdCgpLiBTbyBpbiBvdXIgZHJpdmVyIGluc3RlYWQgb2YgYWRkaW5nIHRoZQ0KPiBh ZGRpdGlvbmFsDQo+IC0gKiBjb25jZXB0IG9mICJ1c2FibGUiIGFuZCBtYWtlIGV2ZXJ5dGhpbmcg Y2hlY2sgZm9yICJjb25uZWN0ZWQgYW5kDQo+IHVzYWJsZSIgd2UNCj4gLSAqIGRlZmluZSBhIHBv cnQgYXMgImNvbm5lY3RlZCIgd2hlbiBpdCBpcyBub3Qgb25seSBjb25uZWN0ZWQsIGJ1dA0KPiBh bHNvIHdoZW4gaXQNCj4gLSAqIGlzIHVzYWJsZSBieSB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyLiBU aGF0IG1haW50YWlucyB0aGUgb2xkDQo+IGFzc3VtcHRpb24gdGhhdA0KPiAtICogY29ubmVjdGVk IHBvcnRzIGFyZSB1c2FibGUsIGFuZCBhdm9pZHMgZXhwb3NpbmcgdG8gdGhlIHVzZXJzDQo+IG9i amVjdHMgdGhleQ0KPiAtICogY2FuJ3QgcmVhbGx5IHVzZS4NCj4gLSAqLw0KPiAtc3RhdGljIGJv b2wgaWNsX3RjX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwNCj4gLQkJCQkgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQNCj4gKmludGVsX2RpZ19wb3J0 KQ0KPiAtew0KPiAtCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsN Cj4gLQllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIHBv cnQpOw0KPiAtCWJvb2wgaXNfbGVnYWN5LCBpc190eXBlYywgaXNfdGJ0Ow0KPiAtCXUzMiBkcHNw Ow0KPiAtDQo+IC0JLyoNCj4gLQkgKiBDb21wbGFpbiBpZiB3ZSBnb3QgYSBsZWdhY3kgcG9ydCBI UEQsIGJ1dCBWQlQgZGlkbid0IG1hcmsNCj4gdGhlIHBvcnQgYXMNCj4gLQkgKiBsZWdhY3kuIFRy ZWF0IHRoZSBwb3J0IGFzIGxlZ2FjeSBmcm9tIG5vdyBvbi4NCj4gLQkgKi8NCj4gLQlpZiAoIWlu dGVsX2RpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCAmJg0KPiAtCSAgICBJOTE1X1JFQUQoU0RFSVNS KSAmIFNERV9UQ19IT1RQTFVHX0lDUCh0Y19wb3J0KSkgew0KPiAtCQlEUk1fRVJST1IoIlZCVCBp bmNvcnJlY3RseSBjbGFpbXMgcG9ydCAlYyBpcyBub3QgVHlwZUMNCj4gbGVnYWN5XG4iLA0KPiAt CQkJICBwb3J0X25hbWUocG9ydCkpOw0KPiAtCQlpbnRlbF9kaWdfcG9ydC0+dGNfbGVnYWN5X3Bv cnQgPSB0cnVlOw0KPiAtCX0NCj4gLQlpc19sZWdhY3kgPSBpbnRlbF9kaWdfcG9ydC0+dGNfbGVn YWN5X3BvcnQ7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0 IGJlIHVzaW5nIHRoZSBJU1IgYml0cyBmb3INCj4gZGV0ZWN0aW5nDQo+IC0JICogYmV0d2VlbiBU QyBhbmQgVEJULiBXZSBzaG91bGQgdXNlIERGTEVYRFBTUC4NCj4gLQkgKi8NCj4gLQlkcHNwID0g STkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKTsNCj4gLQlpc190eXBlYyA9IGRwc3AgJiBUQ19M SVZFX1NUQVRFX1RDKHRjX3BvcnQpOw0KPiAtCWlzX3RidCA9IGRwc3AgJiBUQ19MSVZFX1NUQVRF X1RCVCh0Y19wb3J0KTsNCj4gLQ0KPiAtCWlmICghaXNfbGVnYWN5ICYmICFpc190eXBlYyAmJiAh aXNfdGJ0KSB7DQo+IC0JCWljbF90Y19waHlfZGlzY29ubmVjdChkZXZfcHJpdiwgaW50ZWxfZGln X3BvcnQpOw0KPiAtDQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQl9DQo+IC0NCj4gLQlpY2xfdXBk YXRlX3RjX3BvcnRfdHlwZShkZXZfcHJpdiwgaW50ZWxfZGlnX3BvcnQsIGlzX2xlZ2FjeSwNCj4g aXNfdHlwZWMsDQo+IC0JCQkJaXNfdGJ0KTsNCj4gLQ0KPiAtCWlmICghaWNsX3RjX3BoeV9jb25u ZWN0KGRldl9wcml2LCBpbnRlbF9kaWdfcG9ydCkpDQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQ0K PiAtCXJldHVybiB0cnVlOw0KPiAtfQ0KPiAtDQo+ICBzdGF0aWMgYm9vbCBpY2xfZGlnaXRhbF9w b3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2Rlcg0KPiAqZW5jb2RlcikNCj4gIHsNCj4g IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJh c2UuZGV2KTsNCj4gQEAgLTU0MjgsNyArNTIwNyw3IEBAIHN0YXRpYyBib29sIGljbF9kaWdpdGFs X3BvcnRfY29ubmVjdGVkKHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQ0KPiAgCWlm IChpbnRlbF9wb3J0X2lzX2NvbWJvcGh5KGRldl9wcml2LCBlbmNvZGVyLT5wb3J0KSkNCj4gIAkJ cmV0dXJuIGljbF9jb21ib19wb3J0X2Nvbm5lY3RlZChkZXZfcHJpdiwgZGlnX3BvcnQpOw0KPiAg CWVsc2UgaWYgKGludGVsX3BvcnRfaXNfdGMoZGV2X3ByaXYsIGVuY29kZXItPnBvcnQpKQ0KPiAt CQlyZXR1cm4gaWNsX3RjX3BvcnRfY29ubmVjdGVkKGRldl9wcml2LCBkaWdfcG9ydCk7DQo+ICsJ CXJldHVybiBpbnRlbF90Y19wb3J0X2Nvbm5lY3RlZChkaWdfcG9ydCk7DQo+ICAJZWxzZQ0KPiAg CQlNSVNTSU5HX0NBU0UoZW5jb2Rlci0+aHBkX3Bpbik7DQo+ICANCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcC5oDQo+IGluZGV4IGRhNzBiMWE0MWM4My4uNjU3YmJiMWY1ZWQwIDEwMDY0NA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwLmgNCj4gQEAgLTExMiw4ICsxMTIsNiBAQCBib29sIGludGVsX2Rw X2dldF9jb2xvcmltZXRyeV9zdGF0dXMoc3RydWN0DQo+IGludGVsX2RwICppbnRlbF9kcCk7DQo+ ICBpbnQgaW50ZWxfZHBfbGlua19yZXF1aXJlZChpbnQgcGl4ZWxfY2xvY2ssIGludCBicHApOw0K PiAgaW50IGludGVsX2RwX21heF9kYXRhX3JhdGUoaW50IG1heF9saW5rX2Nsb2NrLCBpbnQgbWF4 X2xhbmVzKTsNCj4gIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2Rlcik7DQo+IC12b2lkIGljbF90Y19waHlfZGlzY29ubmVjdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+IC0JCQkgICBzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICpkaWdfcG9ydCk7DQo+ICANCj4gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50 IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50IGxhbmVfY291bnQpDQo+ICB7DQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5jDQo+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdGMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwMDAuLjdhMWI1ODcwOTQ1Zg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3RjLmMNCj4gQEAgLTAsMCArMSwyMzAgQEANCj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBNSVQNCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJ bnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIg0K PiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfdGMuaCINCj4gKw0K PiArc3RhdGljIGNvbnN0IGNoYXIgKnRjX3R5cGVfbmFtZShlbnVtIHRjX3BvcnRfdHlwZSB0eXBl KQ0KPiArew0KPiArCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsNCj4gKwkJ W1RDX1BPUlRfVU5LTk9XTl0gPSAidW5rbm93biIsDQo+ICsJCVtUQ19QT1JUX0xFR0FDWV0gPSAi bGVnYWN5IiwNCj4gKwkJW1RDX1BPUlRfVFlQRUNdID0gInR5cGVjIiwNCj4gKwkJW1RDX1BPUlRf VEJUXSA9ICJ0YnQiLA0KPiArCX07DQo+ICsNCj4gKwlpZiAoV0FSTl9PTih0eXBlID49IEFSUkFZ X1NJWkUobmFtZXMpKSkNCj4gKwkJdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsNCj4gKw0KPiArCXJl dHVybiBuYW1lc1t0eXBlXTsNCj4gK30NCj4gKw0KPiAraW50IGludGVsX3RjX3BvcnRfZmlhX21h eF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQNCj4gKmRpZ19wb3J0KQ0KPiAr ew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3Bv cnQtDQo+ID5iYXNlLmJhc2UuZGV2KTsNCj4gKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVs X3BvcnRfdG9fdGMoZGV2X3ByaXYsIGRpZ19wb3J0LQ0KPiA+YmFzZS5wb3J0KTsNCj4gKwlpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsNCj4gKwl1MzIgbGFuZV9pbmZvOw0KPiArDQo+ICsJaWYgKHRj X3BvcnQgPT0gUE9SVF9UQ19OT05FIHx8IGRpZ19wb3J0LT50Y190eXBlICE9DQo+IFRDX1BPUlRf VFlQRUMpDQo+ICsJCXJldHVybiA0Ow0KPiArDQo+ICsJbGFuZV9pbmZvID0gMDsNCj4gKwl3aXRo X2ludGVsX2Rpc3BsYXlfcG93ZXIoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9ESVNQTEFZX0NPUkUs DQo+IHdha2VyZWYpDQo+ICsJCWxhbmVfaW5mbyA9IChJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQ U1ApICYNCj4gKwkJCSAgICAgRFBfTEFORV9BU1NJR05NRU5UX01BU0sodGNfcG9ydCkpID4+DQo+ ICsJCQkJRFBfTEFORV9BU1NJR05NRU5UX1NISUZUKHRjX3BvcnQpOw0KPiArDQo+ICsJc3dpdGNo IChsYW5lX2luZm8pIHsNCj4gKwlkZWZhdWx0Og0KPiArCQlNSVNTSU5HX0NBU0UobGFuZV9pbmZv KTsNCj4gKwljYXNlIDE6DQo+ICsJY2FzZSAyOg0KPiArCWNhc2UgNDoNCj4gKwljYXNlIDg6DQo+ ICsJCXJldHVybiAxOw0KPiArCWNhc2UgMzoNCj4gKwljYXNlIDEyOg0KPiArCQlyZXR1cm4gMjsN Cj4gKwljYXNlIDE1Og0KPiArCQlyZXR1cm4gNDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gKy8qDQo+ ICsgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIENvbm5l Y3QgRmxvdw0KPiBkZXNjcmliZWQgYnkgb3VyDQo+ICsgKiBzcGVjaWZpY2F0aW9uLCBHZW4xMSBU eXBlQyBQcm9ncmFtbWluZyBjaGFwdGVyLiBUaGUgcmVzdCBvZiB0aGUNCj4gZmxvdyAocmVhZGlu Zw0KPiArICogbGFuZXMsIEVESUQsIGV0YykgaXMgZG9uZSBhcyBuZWVkZWQgaW4gdGhlIHR5cGlj YWwgcGxhY2VzLg0KPiArICoNCj4gKyAqIFVubGlrZSB0aGUgb3RoZXIgcG9ydHMsIHR5cGUtQyBw b3J0cyBhcmUgbm90IGF2YWlsYWJsZSB0byB1c2UgYXMNCj4gc29vbiBhcyB3ZQ0KPiArICogZ2V0 IGEgaG90cGx1Zy4gVGhlIHR5cGUtQyBQSFlzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBs ZQ0KPiBjb250cm9sbGVyczoNCj4gKyAqIGRpc3BsYXksIFVTQiwgZXRjLiBBcyBhIHJlc3VsdCwg aGFuZHNoYWtpbmcgdGhyb3VnaCBGSUEgaXMNCj4gcmVxdWlyZWQgYXJvdW5kDQo+ICsgKiBjb25u ZWN0IGFuZCBkaXNjb25uZWN0IHRvIGNsZWFubHkgdHJhbnNmZXIgb3duZXJzaGlwIHdpdGggdGhl DQo+IGNvbnRyb2xsZXIgYW5kDQo+ICsgKiBzZXQgdGhlIHR5cGUtQyBwb3dlciBzdGF0ZS4NCj4g KyAqDQo+ICsgKiBXZSBjb3VsZCBvcHQgdG8gb25seSBkbyB0aGUgY29ubmVjdCBmbG93IHdoZW4g d2UgYWN0dWFsbHkgdHJ5IHRvDQo+IHVzZSB0aGUgQVVYDQo+ICsgKiBjaGFubmVscyBvciBkbyBh IG1vZGVzZXQsIHRoZW4gaW1tZWRpYXRlbHkgcnVuIHRoZSBkaXNjb25uZWN0DQo+IGZsb3cgYWZ0 ZXINCj4gKyAqIHVzYWdlLCBidXQgdGhlcmUgYXJlIHNvbWUgaW1wbGljYXRpb25zIG9uIHRoaXMg Zm9yIGEgZHluYW1pYw0KPiBlbnZpcm9ubWVudDoNCj4gKyAqIHRoaW5ncyBtYXkgZ28gYXdheSBv ciBjaGFuZ2UgYmVoaW5kIG91ciBiYWNrcy4gU28gZm9yIG5vdyBvdXINCj4gZHJpdmVyIGlzDQo+ ICsgKiBhbHdheXMgdHJ5aW5nIHRvIGFjcXVpcmUgb3duZXJzaGlwIG9mIHRoZSBjb250cm9sbGVy IGFzIHNvb24gYXMNCj4gaXQgZ2V0cyBhbg0KPiArICogaW50ZXJydXB0IChvciBwb2xscyBzdGF0 ZSBhbmQgc2VlcyBhIHBvcnQgaXMgY29ubmVjdGVkKSBhbmQgb25seQ0KPiBnaXZlcyBpdA0KPiAr ICogYmFjayB3aGVuIGl0IHNlZXMgYSBkaXNjb25uZWN0LiBJbXBsZW1lbnRhdGlvbiBvZiBhIG1v cmUgZmluZS0NCj4gZ3JhaW5lZCBtb2RlbA0KPiArICogd2lsbCByZXF1aXJlIGEgbG90IG9mIGNv b3JkaW5hdGlvbiB3aXRoIHVzZXIgc3BhY2UgYW5kIHRob3JvdWdoDQo+IHRlc3RpbmcgZm9yDQo+ ICsgKiB0aGUgZXh0cmEgcG9zc2libGUgY2FzZXMuDQo+ICsgKi8NCj4gK3N0YXRpYyBib29sIGlj bF90Y19waHlfY29ubmVjdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19w b3J0LQ0KPiA+YmFzZS5iYXNlLmRldik7DQo+ICsJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRl bF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0NCj4gPmJhc2UucG9ydCk7DQo+ICsJdTMy IHZhbDsNCj4gKw0KPiArCWlmIChkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX0xFR0FDWSAm Jg0KPiArCSAgICBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX1RZUEVDKQ0KPiArCQlyZXR1 cm4gdHJ1ZTsNCj4gKw0KPiArCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBQTVMpOw0K PiArCWlmICghKHZhbCAmIERQX1BIWV9NT0RFX1NUQVRVU19DT01QTEVURUQodGNfcG9ydCkpKSB7 DQo+ICsJCURSTV9ERUJVR19LTVMoIkRQIFBIWSBmb3IgVEMgcG9ydCAlZCBub3QgcmVhZHlcbiIs DQo+IHRjX3BvcnQpOw0KPiArCQlXQVJOX09OKGRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCk7DQo+ ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRoaXMgZnVuY3Rp b24gbWF5IGJlIGNhbGxlZCBtYW55IHRpbWVzIGluIGEgcm93IHdpdGhvdXQgYW4NCj4gSFBEIGV2 ZW50DQo+ICsJICogaW4gYmV0d2Vlbiwgc28gdHJ5IHRvIGF2b2lkIHRoZSB3cml0ZSB3aGVuIHdl IGNhbi4NCj4gKwkgKi8NCj4gKwl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7 DQo+ICsJaWYgKCEodmFsICYgRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpKSkg ew0KPiArCQl2YWwgfD0gRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpOw0KPiAr CQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7DQo+ICsJfQ0KPiArDQo+ICsJ LyoNCj4gKwkgKiBOb3cgd2UgaGF2ZSB0byByZS1jaGVjayB0aGUgbGl2ZSBzdGF0ZSwgaW4gY2Fz ZSB0aGUgcG9ydA0KPiByZWNlbnRseQ0KPiArCSAqIGJlY2FtZSBkaXNjb25uZWN0ZWQuIE5vdCBu ZWNlc3NhcnkgZm9yIGxlZ2FjeSBtb2RlLg0KPiArCSAqLw0KPiArCWlmIChkaWdfcG9ydC0+dGNf dHlwZSA9PSBUQ19QT1JUX1RZUEVDICYmDQo+ICsJICAgICEoSTkxNV9SRUFEKFBPUlRfVFhfREZM RVhEUFNQKSAmDQo+IFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCkpKSB7DQo+ICsJCURSTV9ERUJV R19LTVMoIlRDIFBIWSAlZCBzdWRkZW4gZGlzY29ubmVjdC5cbiIsDQo+IHRjX3BvcnQpOw0KPiAr CQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOw0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBTZWUg dGhlIGNvbW1lbnQgYXQgdGhlIGNvbm5lY3QgZnVuY3Rpb24uIFRoaXMgaW1wbGVtZW50cyB0aGUN Cj4gRGlzY29ubmVjdA0KPiArICogRmxvdy4NCj4gKyAqLw0KPiArdm9pZCBpY2xfdGNfcGh5X2Rp c2Nvbm5lY3Qoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpDQo+ICt7DQo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0NCj4g PmJhc2UuYmFzZS5kZXYpOw0KPiArCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90 b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtDQo+ID5iYXNlLnBvcnQpOw0KPiArDQo+ICsJaWYgKGRp Z19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfVU5LTk9XTikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ ICsJLyoNCj4gKwkgKiBUQlQgZGlzY29ubmVjdGlvbiBmbG93IGlzIHJlYWQgdGhlIGxpdmUgc3Rh dHVzLCB3aGF0IHdhcw0KPiBkb25lIGluDQo+ICsJICogY2FsbGVyLg0KPiArCSAqLw0KPiArCWlm IChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1RZUEVDIHx8DQo+ICsJICAgIGRpZ19wb3J0 LT50Y190eXBlID09IFRDX1BPUlRfTEVHQUNZKSB7DQo+ICsJCXUzMiB2YWw7DQo+ICsNCj4gKwkJ dmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUENTU1MpOw0KPiArCQl2YWwgJj0gfkRQX1BI WV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KTsNCj4gKwkJSTkxNV9XUklURShQT1JUX1RY X0RGTEVYRFBDU1NTLCB2YWwpOw0KPiArCX0NCj4gKw0KPiArCURSTV9ERUJVR19LTVMoIlBvcnQg JWMgVEMgdHlwZSAlcyBkaXNjb25uZWN0ZWRcbiIsDQo+ICsJCSAgICAgIHBvcnRfbmFtZShkaWdf cG9ydC0+YmFzZS5wb3J0KSwNCj4gKwkJICAgICAgdGNfdHlwZV9uYW1lKGRpZ19wb3J0LT50Y190 eXBlKSk7DQo+ICsNCj4gKwlkaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaWNsX3VwZGF0ZV90Y19wb3J0X3R5cGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUNCj4gKmRldl9wcml2LA0KPiArCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0DQo+ICppbnRlbF9kaWdfcG9ydCwNCj4gKwkJCQkgICAgYm9vbCBpc19sZWdhY3ks IGJvb2wgaXNfdHlwZWMsIGJvb2wNCj4gaXNfdGJ0KQ0KPiArew0KPiArCWVudW0gcG9ydCBwb3J0 ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsNCj4gKwllbnVtIHRjX3BvcnRfdHlwZSBvbGRf dHlwZSA9IGludGVsX2RpZ19wb3J0LT50Y190eXBlOw0KPiArDQo+ICsJV0FSTl9PTihpc19sZWdh Y3kgKyBpc190eXBlYyArIGlzX3RidCAhPSAxKTsNCj4gKw0KPiArCWlmIChpc19sZWdhY3kpDQo+ ICsJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9MRUdBQ1k7DQo+ICsJZWxzZSBp ZiAoaXNfdHlwZWMpDQo+ICsJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9UWVBF QzsNCj4gKwllbHNlIGlmIChpc190YnQpDQo+ICsJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0g VENfUE9SVF9UQlQ7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwkvKiBUeXBlcyBh cmUgbm90IHN1cHBvc2VkIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZS4gKi8NCj4gKwlXQVJOX09O KG9sZF90eXBlICE9IFRDX1BPUlRfVU5LTk9XTiAmJg0KPiArCQlvbGRfdHlwZSAhPSBpbnRlbF9k aWdfcG9ydC0+dGNfdHlwZSk7DQo+ICsNCj4gKwlpZiAob2xkX3R5cGUgIT0gaW50ZWxfZGlnX3Bv cnQtPnRjX3R5cGUpDQo+ICsJCURSTV9ERUJVR19LTVMoIlBvcnQgJWMgaGFzIFRDIHR5cGUgJXNc biIsDQo+IHBvcnRfbmFtZShwb3J0KSwNCj4gKwkJCSAgICAgIHRjX3R5cGVfbmFtZShpbnRlbF9k aWdfcG9ydC0+dGNfdHlwZSkpOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsgKiBUaGUgdHlw ZS1DIHBvcnRzIGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBldmVuIHdoZW4gdGhleSBhcmUNCj4gY29u bmVjdGVkLCB0aGV5IG1heQ0KPiArICogbm90IGJlIGF2YWlsYWJsZS91c2FibGUgYnkgdGhlIGdy YXBoaWNzIGRyaXZlcjogc2VlIHRoZSBjb21tZW50DQo+IG9uDQo+ICsgKiBpY2xfdGNfcGh5X2Nv bm5lY3QoKS4gU28gaW4gb3VyIGRyaXZlciBpbnN0ZWFkIG9mIGFkZGluZyB0aGUNCj4gYWRkaXRp b25hbA0KPiArICogY29uY2VwdCBvZiAidXNhYmxlIiBhbmQgbWFrZSBldmVyeXRoaW5nIGNoZWNr IGZvciAiY29ubmVjdGVkIGFuZA0KPiB1c2FibGUiIHdlDQo+ICsgKiBkZWZpbmUgYSBwb3J0IGFz ICJjb25uZWN0ZWQiIHdoZW4gaXQgaXMgbm90IG9ubHkgY29ubmVjdGVkLCBidXQNCj4gYWxzbyB3 aGVuIGl0DQo+ICsgKiBpcyB1c2FibGUgYnkgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlci4gVGhhdCBt YWludGFpbnMgdGhlIG9sZA0KPiBhc3N1bXB0aW9uIHRoYXQNCj4gKyAqIGNvbm5lY3RlZCBwb3J0 cyBhcmUgdXNhYmxlLCBhbmQgYXZvaWRzIGV4cG9zaW5nIHRvIHRoZSB1c2Vycw0KPiBvYmplY3Rz IHRoZXkNCj4gKyAqIGNhbid0IHJlYWxseSB1c2UuDQo+ICsgKi8NCj4gK2Jvb2wgaW50ZWxfdGNf cG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpDQo+ICt7 DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9y dC0NCj4gPmJhc2UuYmFzZS5kZXYpOw0KPiArCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJh c2UucG9ydDsNCj4gKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMoZGV2 X3ByaXYsIHBvcnQpOw0KPiArCWJvb2wgaXNfbGVnYWN5LCBpc190eXBlYywgaXNfdGJ0Ow0KPiAr CXUzMiBkcHNwOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBDb21wbGFpbiBpZiB3ZSBnb3QgYSBsZWdh Y3kgcG9ydCBIUEQsIGJ1dCBWQlQgZGlkbid0IG1hcmsNCj4gdGhlIHBvcnQgYXMNCj4gKwkgKiBs ZWdhY3kuIFRyZWF0IHRoZSBwb3J0IGFzIGxlZ2FjeSBmcm9tIG5vdyBvbi4NCj4gKwkgKi8NCj4g KwlpZiAoIWRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCAmJg0KPiArCSAgICBJOTE1X1JFQUQoU0RF SVNSKSAmIFNERV9UQ19IT1RQTFVHX0lDUCh0Y19wb3J0KSkgew0KPiArCQlEUk1fRVJST1IoIlZC VCBpbmNvcnJlY3RseSBjbGFpbXMgcG9ydCAlYyBpcyBub3QgVHlwZUMNCj4gbGVnYWN5XG4iLA0K PiArCQkJICBwb3J0X25hbWUocG9ydCkpOw0KPiArCQlkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQg PSB0cnVlOw0KPiArCX0NCj4gKwlpc19sZWdhY3kgPSBkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQ7 DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IGJlIHVzaW5n IHRoZSBJU1IgYml0cyBmb3INCj4gZGV0ZWN0aW5nDQo+ICsJICogYmV0d2VlbiBUQyBhbmQgVEJU LiBXZSBzaG91bGQgdXNlIERGTEVYRFBTUC4NCj4gKwkgKi8NCj4gKwlkcHNwID0gSTkxNV9SRUFE KFBPUlRfVFhfREZMRVhEUFNQKTsNCj4gKwlpc190eXBlYyA9IGRwc3AgJiBUQ19MSVZFX1NUQVRF X1RDKHRjX3BvcnQpOw0KPiArCWlzX3RidCA9IGRwc3AgJiBUQ19MSVZFX1NUQVRFX1RCVCh0Y19w b3J0KTsNCj4gKw0KPiArCWlmICghaXNfbGVnYWN5ICYmICFpc190eXBlYyAmJiAhaXNfdGJ0KSB7 DQo+ICsJCWljbF90Y19waHlfZGlzY29ubmVjdChkaWdfcG9ydCk7DQo+ICsNCj4gKwkJcmV0dXJu IGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCWljbF91cGRhdGVfdGNfcG9ydF90eXBlKGRldl9wcml2 LCBkaWdfcG9ydCwgaXNfbGVnYWN5LA0KPiBpc190eXBlYywNCj4gKwkJCQlpc190YnQpOw0KPiAr DQo+ICsJaWYgKCFpY2xfdGNfcGh5X2Nvbm5lY3QoZGlnX3BvcnQpKQ0KPiArCQlyZXR1cm4gZmFs c2U7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuaA0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3RjLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi45 NGM2MmFjNGExNjINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF90Yy5oDQo+IEBAIC0wLDAgKzEsMTMgQEANCj4gKyNpZm5kZWYgX19JTlRFTF9UQ19I X18NCj4gKyNkZWZpbmUgX19JTlRFTF9UQ19IX18NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+DQo+ICsNCj4gK3N0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQ7DQo+ICsNCj4gK3ZvaWQg aWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 KTsNCj4gKw0KPiArYm9vbCBpbnRlbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICpkaWdfcG9ydCk7DQo+ICtpbnQgaW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVf Y291bnQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydA0KPiAqZGlnX3BvcnQpOw0KPiArDQo+ICsj ZW5kaWYgLyogX19JTlRFTF9UQ19IX18gKi8NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeA==