From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B500DC2BB55 for ; Thu, 16 Apr 2020 04:04:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4B25A2076D for ; Thu, 16 Apr 2020 04:04:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="KDOCORUH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726011AbgDPEEO (ORCPT ); Thu, 16 Apr 2020 00:04:14 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:45083 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725948AbgDPEEK (ORCPT ); Thu, 16 Apr 2020 00:04:10 -0400 X-UUID: cb7b52515e1840c29e6e05855e3a2bdf-20200416 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=LVKdAvu4eBz3OPv8Yx7QxkM0S0OnZ/OE3/tYmss2ttU=; b=KDOCORUHQIXYI1xApefqByZt2VN+gRcyirFi5vgA5fuf2yWN2inOQvCz7vxD4VZygbavYSWzSC7pt+EYtbiu/uj7XuPvpKUe5OfUypr0PPFd2OdbUbPrQIvTkrAy3LjwXGHZruRXUsGd9HoSIPguon57ZLQkpnQFhY9U7ShPfRY=; X-UUID: cb7b52515e1840c29e6e05855e3a2bdf-20200416 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1893458523; Thu, 16 Apr 2020 12:03:42 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 16 Apr 2020 12:03:41 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 16 Apr 2020 12:03:40 +0800 Message-ID: <1587009795.24163.87.camel@mhfsdcap03> Subject: Re: [PATCH v7 11/11] media: platform: Add jpeg dec/enc feature From: Xia Jiang To: Tomasz Figa CC: Hans Verkuil , Mauro Carvalho Chehab , Rob Herring , "Matthias Brugger" , Rick Chang , , , , , , Marek Szyprowski , Date: Thu, 16 Apr 2020 12:03:15 +0800 In-Reply-To: <20200306112337.GA163286@chromium.org> References: <20200303123446.20095-1-xia.jiang@mediatek.com> <20200303123446.20095-12-xia.jiang@mediatek.com> <20200306112337.GA163286@chromium.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org T24gRnJpLCAyMDIwLTAzLTA2IGF0IDIwOjIzICswOTAwLCBUb21hc3ogRmlnYSB3cm90ZToNCj4g SGkgWGlhLA0KPiANCj4gT24gVHVlLCBNYXIgMDMsIDIwMjAgYXQgMDg6MzQ6NDZQTSArMDgwMCwg WGlhIEppYW5nIHdyb3RlOg0KPiA+IEFkZCBtdGsganBlZyBlbmNvZGUgdjRsMiBkcml2ZXIgYmFz ZWQgb24ganBlZyBkZWNvZGUsIGJlY2F1c2UgdGhhdCBqcGVnDQo+ID4gZGVjb2RlIGFuZCBlbmNv ZGUgaGF2ZSBncmVhdCBzaW1pbGFyaXRpZXMgd2l0aCBmdW5jdGlvbiBvcGVyYXRpb24uDQo+IA0K PiBUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4gUGxlYXNlIHNlZSBteSBjb21tZW50cyBpbmxpbmUu DQoNCkRlYXIgVG9tYXN6LA0KDQpUaGFuayB5b3UgZm9yIHlvdXIgcmVwbHkuIEkgaGF2ZSBmb2xs b3dlZCB5b3VyIGFkdmljZSBhbmQgc3VibWl0ZWQgdjgNCnZlcnNpb24gcGF0Y2guDQoNClBsZWFz ZSBjaGVjayBteSByZXBseSBiZWxvdy4NCj4gW3NuaXBdDQo+IA0KPiA+IEBAIC01MSw2ICs1NCw0 MiBAQCBzdGF0aWMgc3RydWN0IG10a19qcGVnX2ZtdCBtdGtfanBlZ19mb3JtYXRzW10gPSB7DQo+ ID4gIAkJLnZfYWxpZ24JPSAzLA0KPiA+ICAJCS5mbGFncwkJPSBNVEtfSlBFR19GTVRfRkxBR19E RUNfQ0FQVFVSRSwNCj4gPiAgCX0sDQo+ID4gKwl7DQo+ID4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJ WF9GTVRfTlYxMk0sDQo+ID4gKwkJLmhfc2FtcGxlCT0gezQsIDIsIDJ9LA0KPiA+ICsJCS52X3Nh bXBsZQk9IHs0LCAyLCAyfSwNCj4gPiArCQkuY29scGxhbmVzCT0gMiwNCj4gPiArCQkuaF9hbGln bgk9IDQsDQo+ID4gKwkJLnZfYWxpZ24JPSA0LA0KPiA+ICsJCS5mbGFncwkJPSBNVEtfSlBFR19G TVRfRkxBR19FTkNfT1VUUFVULA0KPiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuZm91cmNjCQk9 IFY0TDJfUElYX0ZNVF9OVjIxTSwNCj4gPiArCQkuaF9zYW1wbGUJPSB7NCwgMiwgMn0sDQo+ID4g KwkJLnZfc2FtcGxlCT0gezQsIDIsIDJ9LA0KPiA+ICsJCS5jb2xwbGFuZXMJPSAyLA0KPiA+ICsJ CS5oX2FsaWduCT0gNCwNCj4gPiArCQkudl9hbGlnbgk9IDQsDQo+ID4gKwkJLmZsYWdzCQk9IE1U S19KUEVHX0ZNVF9GTEFHX0VOQ19PVVRQVVQsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5m b3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsDQo+ID4gKwkJLmhfc2FtcGxlCT0gezQsIDIsIDJ9 LA0KPiA+ICsJCS52X3NhbXBsZQk9IHs0LCA0LCA0fSwNCj4gPiArCQkuY29scGxhbmVzCT0gMSwN Cj4gPiArCQkuaF9hbGlnbgk9IDQsDQo+ID4gKwkJLnZfYWxpZ24JPSAzLA0KPiA+ICsJCS5mbGFn cwkJPSBNVEtfSlBFR19GTVRfRkxBR19FTkNfT1VUUFVULA0KPiA+ICsJfSwNCj4gPiArCXsNCj4g PiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVllVLA0KPiA+ICsJCS5oX3NhbXBsZQk9IHs0 LCAyLCAyfSwNCj4gPiArCQkudl9zYW1wbGUJPSB7NCwgNCwgNH0sDQo+ID4gKwkJLmNvbHBsYW5l cwk9IDEsDQo+ID4gKwkJLmhfYWxpZ24JPSA0LA0KPiA+ICsJCS52X2FsaWduCT0gMywNCj4gPiAr CQkuZmxhZ3MJCT0gTVRLX0pQRUdfRk1UX0ZMQUdfRU5DX09VVFBVVCwNCj4gPiArCX0sDQo+ID4g IH07DQo+IA0KPiBTaW5jZSB0aGUgZW5jb2RlciBhbmQgZGVjb2RlciBkb24ndCBzZWVtIHRvIHNo YXJlIGFsbW9zdCBhbnkgZm9ybWF0LA0KPiBwZXJoYXBzIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8g anVzdCBoYXZlIHNlcGFyYXRlIGZvcm1hdCBhcnJheXMgZm9yIGJvdGg/DQpkb25lLg0KPiANCj4g PiAgDQo+ID4gICNkZWZpbmUgTVRLX0pQRUdfTlVNX0ZPUk1BVFMgQVJSQVlfU0laRShtdGtfanBl Z19mb3JtYXRzKQ0KPiA+IEBAIC03MCw2ICsxMDksMTEgQEAgc3RydWN0IG10a19qcGVnX3NyY19i dWYgew0KPiA+ICBzdGF0aWMgaW50IGRlYnVnOw0KPiA+ICBtb2R1bGVfcGFyYW0oZGVidWcsIGlu dCwgMDY0NCk7DQo+ID4gIA0KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfanBlZ19jdHgg KmN0cmxfdG9fY3R4KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ID4gK3sNCj4gPiArCXJldHVy biBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IG10a19qcGVnX2N0eCwgY3RybF9o ZGwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfanBlZ19j dHggKm10a19qcGVnX2ZoX3RvX2N0eChzdHJ1Y3QgdjRsMl9maCAqZmgpDQo+ID4gIHsNCj4gPiAg CXJldHVybiBjb250YWluZXJfb2YoZmgsIHN0cnVjdCBtdGtfanBlZ19jdHgsIGZoKTsNCj4gPiBA QCAtODYsMTQgKzEzMCw2OSBAQCBzdGF0aWMgaW50IG10a19qcGVnX3F1ZXJ5Y2FwKHN0cnVjdCBm aWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfZGV2 ICpqcGVnID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiAgDQo+ID4gLQlzdHJzY3B5KGNhcC0+ ZHJpdmVyLCBNVEtfSlBFR19OQU1FICIgZGVjb2RlciIsIHNpemVvZihjYXAtPmRyaXZlcikpOw0K PiA+IC0Jc3Ryc2NweShjYXAtPmNhcmQsIE1US19KUEVHX05BTUUgIiBkZWNvZGVyIiwgc2l6ZW9m KGNhcC0+Y2FyZCkpOw0KPiA+ICsJc3Ryc2NweShjYXAtPmRyaXZlciwgTVRLX0pQRUdfTkFNRSwg c2l6ZW9mKGNhcC0+ZHJpdmVyKSk7DQo+ID4gKwlpZiAoanBlZy0+bW9kZSA9PSAgTVRLX0pQRUdf RU5DKQ0KPiA+ICsJCXN0cnNjcHkoY2FwLT5jYXJkLCBNVEtfSlBFR19OQU1FICIgZW5jb2RlciIs IHNpemVvZihjYXAtPmNhcmQpKTsNCj4gPiArCWVsc2UNCj4gPiArCQlzdHJzY3B5KGNhcC0+Y2Fy ZCwgTVRLX0pQRUdfTkFNRSAiIGRlY29kZXIiLCBzaXplb2YoY2FwLT5jYXJkKSk7DQo+ID4gIAlz bnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJwbGF0Zm9ybTol cyIsDQo+ID4gIAkJIGRldl9uYW1lKGpwZWctPmRldikpOw0KPiA+ICANCj4gPiAgCXJldHVybiAw Ow0KPiA+ICB9DQo+ID4gIA0KPiA+ICtzdGF0aWMgaW50IHZpZGlvY19qcGVnX3NfY3RybChzdHJ1 Y3QgdjRsMl9jdHJsICpjdHJsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpj dHggPSBjdHJsX3RvX2N0eChjdHJsKTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiAr CXN3aXRjaCAoY3RybC0+aWQpIHsNCj4gPiArCWNhc2UgVjRMMl9DSURfSlBFR19SRVNUQVJUX0lO VEVSVkFMOg0KPiA+ICsJCWN0eC0+cmVzdGFydF9pbnRlcnZhbCA9IGN0cmwtPnZhbDsNCj4gPiAr CQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9DSURfSlBFR19DT01QUkVTU0lPTl9RVUFMSVRZOg0K PiA+ICsJCWN0eC0+ZW5jX3F1YWxpdHkgPSBjdHJsLT52YWw7DQo+ID4gKwkJYnJlYWs7DQo+ID4g KwljYXNlIFY0TDJfQ0lEX0pQRUdfQUNUSVZFX01BUktFUjoNCj4gPiArCQljdHgtPmVuYWJsZV9l eGlmID0gY3RybC0+dmFsICYgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMTsNCj4gPiArCQli cmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiANCj4gV291bGRuJ3Qg aXQgYmUgZW5vdWdoIHRvIGp1c3QgcmV0dXJuIDAgZGlyZWN0bHkgYW5kIHJlbW92ZSByZXQ/DQp5 ZXMsZG9uZS4NCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9jdHJsX29wcyBtdGtfanBlZ19jdHJsX29wcyA9IHsNCj4gPiArCS5zX2N0cmwgPSB2aWRpb2Nf anBlZ19zX2N0cmwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19qcGVnX2N0 cmxzX3NldHVwKHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCkNCj4gPiArew0KPiA+ICsJY29uc3Qg c3RydWN0IHY0bDJfY3RybF9vcHMgKm9wcyA9ICZtdGtfanBlZ19jdHJsX29wczsNCj4gPiArCXN0 cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGFuZGxlciA9ICZjdHgtPmN0cmxfaGRsOw0KPiA+ICsJ c3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGN0eC0+anBlZzsNCj4gPiArDQo+ID4gKwl2NGwy X2N0cmxfaGFuZGxlcl9pbml0KGhhbmRsZXIsIDMpOw0KPiA+ICsNCj4gPiArCWlmIChqcGVnLT5t b2RlID09IE1US19KUEVHX0VOQykgew0KPiA+ICsJCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIs IG9wcywgVjRMMl9DSURfSlBFR19SRVNUQVJUX0lOVEVSVkFMLA0KPiA+ICsJCQkJICAwLCAxMDAs IDEsIDApOw0KPiA+ICsJCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIG9wcywNCj4gPiArCQkJ CSAgVjRMMl9DSURfSlBFR19DT01QUkVTU0lPTl9RVUFMSVRZLCA0OCwgMTAwLCAxLA0KPiA+ICsJ CQkJICA5MCk7DQo+ID4gKwkJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgb3BzLCBWNEwyX0NJ RF9KUEVHX0FDVElWRV9NQVJLRVIsIDAsDQo+ID4gKwkJCQkgIFY0TDJfSlBFR19BQ1RJVkVfTUFS S0VSX0FQUDEsIDAsIDApOw0KPiA+ICsNCj4gPiArCQlpZiAoaGFuZGxlci0+ZXJyb3IpIHsNCj4g PiArCQkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmY3R4LT5jdHJsX2hkbCk7DQo+ID4gKwkJCXJl dHVybiBoYW5kbGVyLT5lcnJvcjsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdjRs Ml9jdHJsX2hhbmRsZXJfc2V0dXAoJmN0eC0+Y3RybF9oZGwpOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50IG10a19qcGVnX2VudW1fZm10KHN0 cnVjdCBtdGtfanBlZ19mbXQgKm10a19qcGVnX2Zvcm1hdHMsIGludCBuLA0KPiA+ICAJCQkgICAg IHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYsIHUzMiB0eXBlKQ0KPiA+ICB7DQo+ID4gQEAgLTExOCwx OSArMjE3LDI3IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfZW51bV9mbXQoc3RydWN0IG10a19qcGVn X2ZtdCAqbXRrX2pwZWdfZm9ybWF0cywgaW50IG4sDQo+ID4gIHN0YXRpYyBpbnQgbXRrX2pwZWdf ZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkJ CSAgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikNCj4gPiAgew0KPiA+ICsJc3RydWN0IG10a19q cGVnX2N0eCAqY3R4ID0gbXRrX2pwZWdfZmhfdG9fY3R4KHByaXYpOw0KPiA+ICsNCj4gPiAgCXJl dHVybiBtdGtfanBlZ19lbnVtX2ZtdChtdGtfanBlZ19mb3JtYXRzLCBNVEtfSlBFR19OVU1fRk9S TUFUUywgZiwNCj4gPiArCQkJCSBjdHgtPmpwZWctPm1vZGUgPT0gTVRLX0pQRUdfRU5DID8NCj4g PiArCQkJCSBNVEtfSlBFR19GTVRfRkxBR19FTkNfQ0FQVFVSRSA6DQo+ID4gIAkJCQkgTVRLX0pQ RUdfRk1UX0ZMQUdfREVDX0NBUFRVUkUpOw0KPiANCj4gV2Ugd291bGRuJ3QgbmVlZCB0aGlzIHNw ZWNpYWwgY2FzaW5nIGlmIHdlIHNlcGFyYXRlIHRoZSBmb3JtYXQgYXJyYXlzLg0KZG9uZQ0KPiAN Cj4gPiAgfQ0KPiA+ICANCj4gPiAgc3RhdGljIGludCBtdGtfanBlZ19lbnVtX2ZtdF92aWRfb3V0 KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICAJCQkJICAgICBzdHJ1Y3QgdjRs Ml9mbXRkZXNjICpmKQ0KPiA+ICB7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSBt dGtfanBlZ19maF90b19jdHgocHJpdik7DQo+ID4gKw0KPiA+ICAJcmV0dXJuIG10a19qcGVnX2Vu dW1fZm10KG10a19qcGVnX2Zvcm1hdHMsIE1US19KUEVHX05VTV9GT1JNQVRTLCBmLA0KPiA+ICsJ CQkJIGN0eC0+anBlZy0+bW9kZSA9PSBNVEtfSlBFR19FTkMgPw0KPiA+ICsJCQkJIE1US19KUEVH X0ZNVF9GTEFHX0VOQ19PVVRQVVQgOg0KPiA+ICAJCQkJIE1US19KUEVHX0ZNVF9GTEFHX0RFQ19P VVRQVVQpOw0KPiANCj4gRGl0dG8uDQpkb25lLg0KPiANCj4gPiAgfQ0KPiA+ICANCj4gPiAtc3Rh dGljIHN0cnVjdCBtdGtfanBlZ19xX2RhdGEgKm10a19qcGVnX2dldF9xX2RhdGEoc3RydWN0IG10 a19qcGVnX2N0eCAqY3R4LA0KPiA+IC0JCQkJCQkgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkN Cj4gPiArc3RhdGljIHN0cnVjdCBtdGtfanBlZ19xX2RhdGEgKg0KPiA+ICttdGtfanBlZ19nZXRf cV9kYXRhKHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUp DQo+ID4gIHsNCj4gPiAgCWlmIChWNEwyX1RZUEVfSVNfT1VUUFVUKHR5cGUpKQ0KPiA+ICAJCXJl dHVybiAmY3R4LT5vdXRfcTsNCj4gPiBAQCAtMTQzLDkgKzI1MCwxNCBAQCBzdGF0aWMgc3RydWN0 IG10a19qcGVnX2ZtdCAqbXRrX2pwZWdfZmluZF9mb3JtYXQoc3RydWN0IG10a19qcGVnX2N0eCAq Y3R4LA0KPiA+ICB7DQo+ID4gIAl1bnNpZ25lZCBpbnQgaywgZm10X2ZsYWc7DQo+ID4gIA0KPiA+ IC0JZm10X2ZsYWcgPSAoZm10X3R5cGUgPT0gTVRLX0pQRUdfRk1UX1RZUEVfT1VUUFVUKSA/DQo+ ID4gLQkJICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVCA6DQo+ID4gLQkJICAgTVRLX0pQ RUdfRk1UX0ZMQUdfREVDX0NBUFRVUkU7DQo+ID4gKwlpZiAoY3R4LT5qcGVnLT5tb2RlID09ICBN VEtfSlBFR19FTkMpDQo+ID4gKwkJZm10X2ZsYWcgPSAoZm10X3R5cGUgPT0gTVRLX0pQRUdfRk1U X1RZUEVfT1VUUFVUKSA/DQo+ID4gKwkJCSAgIE1US19KUEVHX0ZNVF9GTEFHX0VOQ19PVVRQVVQg Og0KPiA+ICsJCQkgICBNVEtfSlBFR19GTVRfRkxBR19FTkNfQ0FQVFVSRTsNCj4gPiArCWVsc2UN Cj4gPiArCQlmbXRfZmxhZyA9IChmbXRfdHlwZSA9PSBNVEtfSlBFR19GTVRfVFlQRV9PVVRQVVQp ID8NCj4gPiArCQkJICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVCA6DQo+ID4gKwkJCSAg IE1US19KUEVHX0ZNVF9GTEFHX0RFQ19DQVBUVVJFOw0KPiANCj4gRGl0dG8uDQpkb25lLg0KPiAN Cj4gPiAgDQo+ID4gIAlmb3IgKGsgPSAwOyBrIDwgTVRLX0pQRUdfTlVNX0ZPUk1BVFM7IGsrKykg ew0KPiA+ICAJCXN0cnVjdCBtdGtfanBlZ19mbXQgKmZtdCA9ICZtdGtfanBlZ19mb3JtYXRzW2td Ow0KPiA+IEBAIC0xNzcsOSArMjg5LDczIEBAIHN0YXRpYyB2b2lkIG10a19qcGVnX2FkanVzdF9m bXRfbXBsYW5lKHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCwNCj4gPiAgCX0NCj4gPiAgfQ0KPiA+ ICANCj4gPiAtc3RhdGljIGludCBtdGtfanBlZ190cnlfZm10X21wbGFuZShzdHJ1Y3QgdjRsMl9m b3JtYXQgKmYsDQo+ID4gLQkJCQkgICBzdHJ1Y3QgbXRrX2pwZWdfZm10ICpmbXQsDQo+ID4gLQkJ CQkgICBzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsIGludCBxX3R5cGUpDQo+ID4gK3N0YXRpYyBp bnQgbXRrX2pwZWdfdHJ5X2VuY19mbXRfbXBsYW5lKHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwNCj4g PiArCQkJCSAgICAgICBzdHJ1Y3QgbXRrX2pwZWdfZm10ICpmbXQsDQo+ID4gKwkJCQkgICAgICAg c3RydWN0IG10a19qcGVnX2N0eCAqY3R4LCBpbnQgcV90eXBlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X21wID0gJmYtPmZtdC5waXhfbXA7DQo+ID4g KwlpbnQgaTsNCj4gPiArDQo+ID4gKwltZW1zZXQocGl4X21wLT5yZXNlcnZlZCwgMCwgc2l6ZW9m KHBpeF9tcC0+cmVzZXJ2ZWQpKTsNCj4gDQo+IFplcm9pbmcgdGhlIHJlc2VydmVkIGZpZWxkcyBp cyBoYW5kbGVkIGJ5IHRoZSBjb3JlLg0KcmVtb3ZlZCBpdC4NCj4gDQo+ID4gKwlwaXhfbXAtPmZp ZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsNCj4gPiArCWlmIChjdHgtPnN0YXRlICE9IE1U S19KUEVHX0lOSVQpIHsNCj4gDQo+IElzIHRoaXMgcmVhbGx5IHRoZSByaWdodCBjb25kaXRpb24/ IEFzIHBlciBWNEwyIHNlbWFudGljcywgdGhlIGZvcm1hdCBjYW4ndA0KPiBiZSBjaGFuZ2VkIHdo ZW4gdGhlIHF1ZXVlIGhhcyBidWZmZXJzIGFsbG9jYXRlZCAodmIyX2lzX2J1c3koKSkuIEFsc28s DQo+IENBUFRVUkUgcXVldWUgb2YgdGhlIGVuY29kZXIgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRo YXQgY291bGQgYmUgY2hhbmdlZCwNCj4gYXMgdGhlIHBpeGVsZm9ybWF0IGlzIGFsd2F5cyBKUEVH IGFuZCB0aGUgcmVzdCBkZXRlcm1pbmVkIGJ5IHRoZSBPVVRQVVQNCj4gcXVldWUsIHNvIHBlcmhh cHMgaXQgc2hvdWxkIGhhdmUgYWxsIHRoZSBHXy9UUllfL1NfRk1UIGlvY3RscyBpbXBsZW1lbnRl ZA0KPiBsaWtlIEdfRk1UPw0KSSBoYXZlIGNhbmNlbGQgdGhlIHN0YXRlIGZvciBqcGVnIGVuY29k ZXIuDQoNCj4gPiArCQltdGtfanBlZ19hZGp1c3RfZm10X21wbGFuZShjdHgsIGYpOw0KPiANCj4g VGhlIG5hbWUgb2YgdGhpIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGl0IGFkanVzdHMgc29tZXRoaW5n LCBidXQgaXQNCj4gZWZmZWN0aXZlbHkganVzdCBnZXRzIHRoZSBjdXJyZW50IGZvcm1hdC4gV2h5 IG5vdCBqdXN0IGNhbGwgdGhlDQo+IGltcGxlbWVudGF0aW9uIG9mIEdfRk1UIGRpcmVjdGx5Pw0K eWVzLCB1c2UgR19GTVQgZm9yIGpwZWcgZGVjb2RlciBhbmQgZGVsZXRlZCB0aGlzIGZ1bmN0aW9u Lg0KPiANCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwaXhfbXAtPm51 bV9wbGFuZXMgPSBmbXQtPmNvbHBsYW5lczsNCj4gPiArCXBpeF9tcC0+cGl4ZWxmb3JtYXQgPSBm bXQtPmZvdXJjYzsNCj4gPiArDQo+ID4gKwlpZiAocV90eXBlID09IE1US19KUEVHX0ZNVF9UWVBF X09VVFBVVCkgew0KPiANCj4gV2h5IHRoZSBjdXN0b20gcXVldWUgdHlwZSBtYWNybz8gQ291bGQg d2UgdXNlIHN0YW5kYXJkIGRlZmluaXRpb25zIGluc3RlYWQ/DQo+IEkuZS4gVjRMMl9CVUZfVFlQ RV9WSURFT19PVVRQVVRfTVBMQU5FLg0KZG9uZS4NCj4gDQo+ID4gKwkJaWYgKHBpeF9tcC0+bnVt X3BsYW5lcyA9PSAxVSkgew0KPiANCj4gbml0OiBJdCBpcyB1bnVzdWFsIHRvIGFkZCB0aGUgVSBw cmVmaXggaW4gY29tcGFyaXNpb25zIGxpa2UgdGhpcy4NCj4gDQo+ID4gKwkJCXBpeF9tcC0+aGVp Z2h0ID0gY2xhbXAocm91bmRfdXAocGl4X21wLT5oZWlnaHQsIDgpLA0KPiA+ICsJCQkJCSAgICAg ICBNVEtfSlBFR19NSU5fSEVJR0hULA0KPiA+ICsJCQkJCSAgICAgICBNVEtfSlBFR19NQVhfSEVJ R0hUKTsNCj4gPiArCQkJcGl4X21wLT53aWR0aCA9IGNsYW1wKHJvdW5kX3VwKHBpeF9tcC0+d2lk dGgsIDMyKSwNCj4gPiArCQkJCQkgICAgICBNVEtfSlBFR19NSU5fV0lEVEgsDQo+ID4gKwkJCQkJ ICAgICAgTVRLX0pQRUdfTUFYX1dJRFRIKTsNCj4gPiArCQkJcGl4X21wLT5wbGFuZV9mbXRbMF0u Ynl0ZXNwZXJsaW5lID0gcGl4X21wLT53aWR0aCAqIDI7DQo+ID4gKwkJCXBpeF9tcC0+cGxhbmVf Zm10WzBdLnNpemVpbWFnZSA9DQo+ID4gKwkJCQlwaXhfbXAtPndpZHRoICogcGl4X21wLT5oZWln aHQgKiAyOw0KPiA+ICsJCX0NCj4gPiArCQlpZiAocGl4X21wLT5udW1fcGxhbmVzID09IDJVKSB7 DQo+ID4gKwkJCXBpeF9tcC0+aGVpZ2h0ID0gY2xhbXAocm91bmRfdXAocGl4X21wLT5oZWlnaHQs IDE2KSwNCj4gPiArCQkJCQkgICAgICAgTVRLX0pQRUdfTUlOX0hFSUdIVCwNCj4gPiArCQkJCQkg ICAgICAgTVRLX0pQRUdfTUFYX0hFSUdIVCk7DQo+ID4gKwkJCXBpeF9tcC0+d2lkdGggPSBjbGFt cChyb3VuZF91cChwaXhfbXAtPndpZHRoLCAxNiksDQo+ID4gKwkJCQkJICAgICAgTVRLX0pQRUdf TUlOX1dJRFRILA0KPiA+ICsJCQkJCSAgICAgIE1US19KUEVHX01BWF9XSURUSCk7DQo+ID4gKwkJ CWZvciAoaSA9IDA7IGkgPCBwaXhfbXAtPm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsJCQkJcGl4 X21wLT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lID0NCj4gPiArCQkJCQlwaXhfbXAtPndpZHRo Ow0KPiA+ICsJCQkJcGl4X21wLT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlID0NCj4gPiArCQkJCQlw aXhfbXAtPndpZHRoICogcGl4X21wLT5oZWlnaHQgLw0KPiA+ICsJCQkJCShpICsgMSk7DQo+ID4g KwkJCX0NCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXBpeF9tcC0+aGVpZ2h0ID0g Y2xhbXAocGl4X21wLT5oZWlnaHQsIE1US19KUEVHX01JTl9IRUlHSFQsDQo+ID4gKwkJCQkgICAg ICAgTVRLX0pQRUdfTUFYX0hFSUdIVCk7DQo+ID4gKwkJcGl4X21wLT53aWR0aCA9IGNsYW1wKHBp eF9tcC0+d2lkdGgsIE1US19KUEVHX01JTl9XSURUSCwNCj4gPiArCQkJCSAgICAgIE1US19KUEVH X01BWF9XSURUSCk7DQo+ID4gKw0KPiA+ICsJCWlmIChmbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9G TVRfSlBFRykgew0KPiA+ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPSAw Ow0KPiA+ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPQ0KPiA+ICsJCQkJcm91 bmRfdXAocGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlLCAxMjgpOw0KPiA+ICsJCQlpZiAo cGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlID09IDApDQo+ID4gKwkJCQlwaXhfbXAtPnBs YW5lX2ZtdFswXS5zaXplaW1hZ2UgPQ0KPiA+ICsJCQkJCU1US19KUEVHX0RFRkFVTFRfU0laRUlN QUdFOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiANCj4gSXQgZG9lc24ndCBsb29rIGxpa2UgdGhlIGZ1bmN0aW9uIGFib3ZlIGRvZXMgYW55dGhp bmcgc3BlY2lmaWMgdG8gdGhlDQo+IGVuY29kZXIuIEl0IGp1c3QgZG9lcyBnZW5lcmljIGZvcm1h dCBhZGp1c3RtZW50Lg0KPiANCj4gQ291bGQgd2UganVzdCBhZGQgdmFyaW91cyBmb3JtYXQgcGFy YW1ldGVycyB0byB0aGUgbXRrX2pwZWdfZm10IHN0cnVjdCBhbmQNCj4gaGF2ZSBhIGdlbmVyaWMg ZnVuY3Rpb24gdGhhdCBpcyBzaGFyZWQgYnkgYm90aCBlbmNvZGVyIGFuZCBkZWNvZGVyPyBUaGF0 DQo+IHdvdWxkIGFsc28gbGV0IHVzIHJlbW92ZSB0aGUgY29uZGl0aW9uYWwgY29kZSBmb3IgcXVl dWUgdHlwZSwgYmVjYXVzZSB0aGUNCj4gb3BlcmF0aW9ucyBiZWxvdyBhY3R1YWxseSBkZXBlbmQg b24gdGhlIGZvcm1hdCwgbm90IHRoZSBxdWV1ZS4NCmRvbmUuDQo+IA0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBtdGtfanBlZ190cnlfZGVjX2ZtdF9tcGxhbmUoc3RydWN0IHY0bDJfZm9ybWF0ICpm LA0KPiA+ICsJCQkJICAgICAgIHN0cnVjdCBtdGtfanBlZ19mbXQgKmZtdCwNCj4gPiArCQkJCSAg ICAgICBzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsIGludCBxX3R5cGUpDQo+ID4gIHsNCj4gPiAg CXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXAgPSAmZi0+Zm10LnBpeF9tcDsN Cj4gPiAgCWludCBpOw0KPiA+IEBAIC0yODYsNiArNDYyLDcgQEAgc3RhdGljIGludCBtdGtfanBl Z190cnlfZm10X3ZpZF9jYXBfbXBsYW5lKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0K PiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSBtdGtfanBlZ19maF90b19j dHgocHJpdik7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfZm10ICpmbXQ7DQo+ID4gKwlzdHJ1Y3Qg bXRrX2pwZWdfZGV2ICpqcGVnID0gY3R4LT5qcGVnOw0KPiA+ICANCj4gPiAgCWZtdCA9IG10a19q cGVnX2ZpbmRfZm9ybWF0KGN0eCwgZi0+Zm10LnBpeF9tcC5waXhlbGZvcm1hdCwNCj4gPiAgCQkJ CSAgIE1US19KUEVHX0ZNVF9UWVBFX0NBUFRVUkUpOw0KPiA+IEBAIC0yOTksNyArNDc2LDEyIEBA IHN0YXRpYyBpbnQgbXRrX2pwZWdfdHJ5X2ZtdF92aWRfY2FwX21wbGFuZShzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkgKGZtdC0+Zm91cmNjID4+IDE2ICYgMHhmZiksDQo+ ID4gIAkJIChmbXQtPmZvdXJjYyA+PiAyNCAmIDB4ZmYpKTsNCj4gPiAgDQo+ID4gLQlyZXR1cm4g bXRrX2pwZWdfdHJ5X2ZtdF9tcGxhbmUoZiwgZm10LCBjdHgsIE1US19KUEVHX0ZNVF9UWVBFX0NB UFRVUkUpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUgPT0gTVRLX0pQRUdfRU5DKQ0KPiA+ICsJCXJl dHVybiBtdGtfanBlZ190cnlfZW5jX2ZtdF9tcGxhbmUoZiwgZm10LCBjdHgsDQo+ID4gKwkJCQkJ CSAgIE1US19KUEVHX0ZNVF9UWVBFX0NBUFRVUkUpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJldHVy biBtdGtfanBlZ190cnlfZGVjX2ZtdF9tcGxhbmUoZiwgZm10LCBjdHgsDQo+ID4gKwkJCQkJCSAg IE1US19KUEVHX0ZNVF9UWVBFX0NBUFRVUkUpOw0KPiANCj4gV2l0aCBhIGdlbmVyaWMgZm9ybWF0 IGFkanVzdG1lbnQgZnVuY3Rpb24gd2Ugd291bGRuJ3QgbmVlZCB0aGlzIHNwZWNpYWwNCj4gY2Fz aW5nLg0KZG9uZS4NCj4gDQo+ID4gIH0NCj4gPiAgDQo+ID4gIHN0YXRpYyBpbnQgbXRrX2pwZWdf dHJ5X2ZtdF92aWRfb3V0X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4g PiBAQCAtMzA3LDYgKzQ4OSw3IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfdHJ5X2ZtdF92aWRfb3V0 X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgew0KPiA+ICAJc3Ry dWN0IG10a19qcGVnX2N0eCAqY3R4ID0gbXRrX2pwZWdfZmhfdG9fY3R4KHByaXYpOw0KPiA+ICAJ c3RydWN0IG10a19qcGVnX2ZtdCAqZm10Ow0KPiA+ICsJc3RydWN0IG10a19qcGVnX2RldiAqanBl ZyA9IGN0eC0+anBlZzsNCj4gPiAgDQo+ID4gIAlmbXQgPSBtdGtfanBlZ19maW5kX2Zvcm1hdChj dHgsIGYtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQsDQo+ID4gIAkJCQkgICBNVEtfSlBFR19GTVRf VFlQRV9PVVRQVVQpOw0KPiA+IEBAIC0zMjAsNyArNTAzLDEyIEBAIHN0YXRpYyBpbnQgbXRrX2pw ZWdfdHJ5X2ZtdF92aWRfb3V0X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwN Cj4gPiAgCQkgKGZtdC0+Zm91cmNjID4+IDE2ICYgMHhmZiksDQo+ID4gIAkJIChmbXQtPmZvdXJj YyA+PiAyNCAmIDB4ZmYpKTsNCj4gPiAgDQo+ID4gLQlyZXR1cm4gbXRrX2pwZWdfdHJ5X2ZtdF9t cGxhbmUoZiwgZm10LCBjdHgsIE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVCk7DQo+ID4gKwlpZiAo anBlZy0+bW9kZSA9PSBNVEtfSlBFR19FTkMpDQo+ID4gKwkJcmV0dXJuIG10a19qcGVnX3RyeV9l bmNfZm10X21wbGFuZShmLCBmbXQsIGN0eCwNCj4gPiArCQkJCQkJICAgTVRLX0pQRUdfRk1UX1RZ UEVfT1VUUFVUKTsNCj4gPiArCWVsc2UNCj4gPiArCQlyZXR1cm4gbXRrX2pwZWdfdHJ5X2RlY19m bXRfbXBsYW5lKGYsIGZtdCwgY3R4LA0KPiA+ICsJCQkJCQkgICBNVEtfSlBFR19GTVRfVFlQRV9P VVRQVVQpOw0KPiANCj4gRGl0dG8uDQpkb25lLg0KPiANCj4gPiAgfQ0KPiA+ICANCj4gPiAgc3Rh dGljIGludCBtdGtfanBlZ19zX2ZtdF9tcGxhbmUoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LA0K PiA+IEBAIC00MjUsMjggKzYxMyw0OCBAQCBzdGF0aWMgaW50IG10a19qcGVnX2dfc2VsZWN0aW9u KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICAJCQkJc3RydWN0IHY0bDJfc2Vs ZWN0aW9uICpzKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSBtdGtf anBlZ19maF90b19jdHgocHJpdik7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnID0g Y3R4LT5qcGVnOw0KPiA+ICANCj4gPiAtCWlmIChzLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklE RU9fQ0FQVFVSRSkNCj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCWlmIChqcGVnLT5tb2Rl ID09IE1US19KUEVHX0VOQykgew0KPiA+ICsJCWlmIChzLT50eXBlICE9IFY0TDJfQlVGX1RZUEVf VklERU9fT1VUUFVUKQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IEluc3RlYWQgb2Yg cmVwZWF0aW5nIHRoZSBpZi9lbHNlIGluIGV2ZXJ5IGNhbGxiYWNrLCBjb3VsZCB3ZSBpbnN0ZWFk DQo+IHByb3ZpZGUgc2VwYXJhdGUgb3BzIHN0cnVjdHMgZm9yIGVuY29kZXIgYW5kIGRlY29kZXIg c28gdGhleSBjYW4gaGF2ZQ0KPiBzZXBhcmF0ZSBjYWxsYmFja3MgZm9yIHRob3NlIHRoYXQgbmVl ZCB0byBkaWZmZXIgc2lnbmlmaWNhbnRseT8NCmRvbmUuDQo+IA0KPiA+ICANCj4gPiAtCXN3aXRj aCAocy0+dGFyZ2V0KSB7DQo+ID4gLQljYXNlIFY0TDJfU0VMX1RHVF9DT01QT1NFOg0KPiA+IC0J Y2FzZSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9ERUZBVUxUOg0KPiA+IC0JCXMtPnIud2lkdGggPSBj dHgtPm91dF9xLnc7DQo+ID4gLQkJcy0+ci5oZWlnaHQgPSBjdHgtPm91dF9xLmg7DQo+ID4gLQkJ cy0+ci5sZWZ0ID0gMDsNCj4gPiAtCQlzLT5yLnRvcCA9IDA7DQo+ID4gLQkJYnJlYWs7DQo+ID4g LQljYXNlIFY0TDJfU0VMX1RHVF9DT01QT1NFX0JPVU5EUzoNCj4gPiAtCWNhc2UgVjRMMl9TRUxf VEdUX0NPTVBPU0VfUEFEREVEOg0KPiA+IC0JCXMtPnIud2lkdGggPSBjdHgtPmNhcF9xLnc7DQo+ ID4gLQkJcy0+ci5oZWlnaHQgPSBjdHgtPmNhcF9xLmg7DQo+ID4gLQkJcy0+ci5sZWZ0ID0gMDsN Cj4gPiAtCQlzLT5yLnRvcCA9IDA7DQo+ID4gLQkJYnJlYWs7DQo+ID4gLQlkZWZhdWx0Og0KPiA+ IC0JCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCXN3aXRjaCAocy0+dGFyZ2V0KSB7DQo+ID4gKwkJ Y2FzZSBWNEwyX1NFTF9UR1RfQ1JPUDoNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9DUk9QX0JP VU5EUzoNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9DUk9QX0RFRkFVTFQ6DQo+ID4gKwkJCXMt PnIud2lkdGggPSBjdHgtPm91dF9xLnc7DQo+ID4gKwkJCXMtPnIuaGVpZ2h0ID0gY3R4LT5vdXRf cS5oOw0KPiA+ICsJCQlzLT5yLmxlZnQgPSAwOw0KPiA+ICsJCQlzLT5yLnRvcCA9IDA7DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaWYgKHMtPnR5cGUgIT0gVjRMMl9CVUZfVFlQ RV9WSURFT19DQVBUVVJFKQ0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkJ c3dpdGNoIChzLT50YXJnZXQpIHsNCj4gPiArCQljYXNlIFY0TDJfU0VMX1RHVF9DT01QT1NFOg0K PiA+ICsJCWNhc2UgVjRMMl9TRUxfVEdUX0NPTVBPU0VfREVGQVVMVDoNCj4gPiArCQkJcy0+ci53 aWR0aCA9IGN0eC0+b3V0X3EudzsNCj4gPiArCQkJcy0+ci5oZWlnaHQgPSBjdHgtPm91dF9xLmg7 DQo+ID4gKwkJCXMtPnIubGVmdCA9IDA7DQo+ID4gKwkJCXMtPnIudG9wID0gMDsNCj4gPiArCQkJ YnJlYWs7DQo+ID4gKwkJY2FzZSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9CT1VORFM6DQo+ID4gKwkJ Y2FzZSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9QQURERUQ6DQo+ID4gKwkJCXMtPnIud2lkdGggPSBj dHgtPmNhcF9xLnc7DQo+ID4gKwkJCXMtPnIuaGVpZ2h0ID0gY3R4LT5jYXBfcS5oOw0KPiA+ICsJ CQlzLT5yLmxlZnQgPSAwOw0KPiA+ICsJCQlzLT5yLnRvcCA9IDA7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiAg CX0NCj4gPiArDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+ICANCj4gPiBAQCAtNDU0LDIw ICs2NjIsMzggQEAgc3RhdGljIGludCBtdGtfanBlZ19zX3NlbGVjdGlvbihzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkJCXN0cnVjdCB2NGwyX3NlbGVjdGlvbiAqcykNCj4g PiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gbXRrX2pwZWdfZmhfdG9fY3R4 KHByaXYpOw0KPiA+ICsJc3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGN0eC0+anBlZzsNCj4g PiAgDQo+ID4gLQlpZiAocy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpDQo+ ID4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwlpZiAoanBlZy0+bW9kZSA9PSBNVEtfSlBFR19F TkMpIHsNCj4gPiArCQlpZiAocy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkN Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBEaXR0by4NCmRvbmUuDQo+IA0KPiA+ICAN Cj4gPiAtCXN3aXRjaCAocy0+dGFyZ2V0KSB7DQo+ID4gLQljYXNlIFY0TDJfU0VMX1RHVF9DT01Q T1NFOg0KPiA+IC0JCXMtPnIubGVmdCA9IDA7DQo+ID4gLQkJcy0+ci50b3AgPSAwOw0KPiA+IC0J CWN0eC0+b3V0X3EudyA9IHMtPnIud2lkdGg7DQo+ID4gLQkJY3R4LT5vdXRfcS5oID0gcy0+ci5o ZWlnaHQ7DQo+ID4gLQkJYnJlYWs7DQo+ID4gLQlkZWZhdWx0Og0KPiA+IC0JCXJldHVybiAtRUlO VkFMOw0KPiA+ICsJCXN3aXRjaCAocy0+dGFyZ2V0KSB7DQo+ID4gKwkJY2FzZSBWNEwyX1NFTF9U R1RfQ1JPUDoNCj4gPiArCQkJcy0+ci5sZWZ0ID0gMDsNCj4gPiArCQkJcy0+ci50b3AgPSAwOw0K PiA+ICsJCQljdHgtPm91dF9xLncgPSBzLT5yLndpZHRoOw0KPiA+ICsJCQljdHgtPm91dF9xLmgg PSBzLT5yLmhlaWdodDsNCj4gDQo+IFdoYXQgaGFwcGVucyBpZiB0aGUgdXNlcnNwYWNlIHByb3Zp ZGVzIGEgdmFsdWUgYmlnZ2VyIHRoYW4gY3VycmVudCBmb3JtYXQ/DQp3ZSBuZWVkIGdldCB0aGUg bWluIHZhbHVlIG9mIHVzZXJzcGFjZSB2YWx1ZSBhbmQgY3VycmVudCB2YWx1ZSxjaGFuZ2VkDQpp dCBsaWtlIHRoaXM6DQpjdHgtPm91dF9xLncgPSBtaW4ocy0+ci53aWR0aCwgY3R4LT5vdXRfcS53 KTsNCmN0eC0+b3V0X3EuaCA9IG1pbihzLT5yLmhlaWdodCxjdHgtPm91dF9xLmgpOw0KPiANCj4g PiArCQkJYnJlYWs7DQo+ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlpZiAocy0+dHlwZSAhPSBWNEwyX0JVRl9U WVBFX1ZJREVPX0NBUFRVUkUpDQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr CQlzd2l0Y2ggKHMtPnRhcmdldCkgew0KPiA+ICsJCWNhc2UgVjRMMl9TRUxfVEdUX0NPTVBPU0U6 DQo+ID4gKwkJCXMtPnIubGVmdCA9IDA7DQo+ID4gKwkJCXMtPnIudG9wID0gMDsNCj4gPiArCQkJ Y3R4LT5vdXRfcS53ID0gcy0+ci53aWR0aDsNCj4gPiArCQkJY3R4LT5vdXRfcS5oID0gcy0+ci5o ZWlnaHQ7DQo+IA0KPiBUaGlzIGlzIGFib3V0IGV4aXN0aW5nIGNvZGUsIGJ1dCBwZXJoYXBzIG5l ZWRzIHRvIGJlIGZpeGVkLiBTaG91bGRuJ3QgdGhlDQo+IGRlY29kZXIgY29tcG9zZSByZWN0YW5n bGUgYmUgcmVhZC1vbmx5LCBhcyBpdCBtZWFucyB0aGUgdmlzaWJsZSBzaXplIG9mIHRoZQ0KPiBk ZWNvZGVkIEpQRUcgYXMgcGVyIHRoZSBpbWFnZSBtZXRhZGF0YT8NCnllcyxJIG1pc3VuZGVyc3Rv b2QgaXQuVGhlIG9yaWduYWwgY29kZSBpcyByaWdodDoNCnMtPnIud2lkdGggPSBjdHgtPm91dF9x Lnc7DQpzLT5yLmhlaWdodCA9IGN0eC0+b3V0X3EuaDsNCj4gDQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiAgCX0N Cj4gPiArDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+ICANCj4gPiBAQCAtNjQzLDI5ICs4 NjksNDIgQEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfYnVmX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVy ICp2YikNCj4gPiAgCQlnb3RvIGVuZDsNCj4gPiAgDQo+ID4gIAlqcGVnX3NyY19idWYgPSBtdGtf anBlZ192YjJfdG9fc3JjYnVmKHZiKTsNCj4gPiAtCXBhcmFtID0gJmpwZWdfc3JjX2J1Zi0+ZGVj X3BhcmFtOw0KPiA+IC0JbWVtc2V0KHBhcmFtLCAwLCBzaXplb2YoKnBhcmFtKSk7DQo+ID4gLQ0K PiA+IC0JaWYgKGpwZWdfc3JjX2J1Zi0+ZmxhZ3MgJiBNVEtfSlBFR19CVUZfRkxBR1NfTEFTVF9G UkFNRSkgew0KPiA+IC0JCXY0bDJfZGJnKDEsIGRlYnVnLCAmanBlZy0+djRsMl9kZXYsICJHb3Qg ZW9zXG4iKTsNCj4gPiAtCQlnb3RvIGVuZDsNCj4gPiAtCX0NCj4gPiAtCWhlYWRlcl92YWxpZCA9 IG10a19qcGVnX3BhcnNlKHBhcmFtLCAodTggKil2YjJfcGxhbmVfdmFkZHIodmIsIDApLA0KPiA+ IC0JCQkJICAgICAgdmIyX2dldF9wbGFuZV9wYXlsb2FkKHZiLCAwKSk7DQo+ID4gLQlpZiAoIWhl YWRlcl92YWxpZCkgew0KPiA+IC0JCXY0bDJfZXJyKCZqcGVnLT52NGwyX2RldiwgIkhlYWRlciBp bnZhbGlkLlxuIik7DQo+ID4gLQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0VS Uk9SKTsNCj4gPiAtCQlyZXR1cm47DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGN0eC0+c3Rh dGUgPT0gTVRLX0pQRUdfSU5JVCkgew0KPiA+IC0JCXN0cnVjdCB2YjJfcXVldWUgKmRzdF92cSA9 IHY0bDJfbTJtX2dldF92cSgNCj4gPiAtCQkJY3R4LT5maC5tMm1fY3R4LCBWNEwyX0JVRl9UWVBF X1ZJREVPX0NBUFRVUkVfTVBMQU5FKTsNCj4gPiArCWlmIChqcGVnLT5tb2RlID09IE1US19KUEVH X0VOQykgew0KPiA+ICsJCWlmIChqcGVnX3NyY19idWYtPmZsYWdzICYgTVRLX0pQRUdfQlVGX0ZM QUdTX0xBU1RfRlJBTUUpIHsNCj4gPiArCQkJdjRsMl9kYmcoMSwgZGVidWcsICZqcGVnLT52NGwy X2RldiwgIkdvdCBlb3MiKTsNCj4gPiArCQkJZ290byBlbmQ7DQo+ID4gKwkJfQ0KPiA+ICsJCWlm IChjdHgtPnN0YXRlID09IE1US19KUEVHX0lOSVQpDQo+ID4gKwkJCWN0eC0+c3RhdGUgPSBNVEtf SlBFR19SVU5OSU5HOw0KPiANCj4gV2h5IGRvZXMgdGhlIHN0YXRlIGNoYW5nZSBoZXJlPyBRdWV1 aW5nIGJ1ZmZlcnMgaXMgYSByZXBldGl0aXZlIG9wZXJhdGlvbi4NCj4gV2hhdCdzIHNwZWNpYWwg YWJvdXQgdGhlIGZpcnN0IGJ1ZmZlcj8NCj4gDQo+IFBlcmhhcHMgdGhlIHN0YXRlIHNob3VsZCBj aGFuZ2Ugd2hlbiB3ZSBzdGFydCBzdHJlYW1pbmcgb24gYm90aCBxdWV1ZXM/DQo+IA0KPiAoT24g YSBzaWRlIG5vdGUsIEkgZG9uJ3Qgc2VlIGEgbmVlZCBmb3IgY3R4LT5zdGF0ZSBpbiBjYXNlIG9m IHRoZSBlbmNvZGVyLg0KPiBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdmIyIGJ5IHRoZSBt ZWFucyBvZiB2YjJfaXNfYnVzeSgpIG9yDQo+IHZiMl9pc19zdHJlYW1pbmcoKSBzaG91bGQgYmUg ZW5vdWdoLikNCmRlbGV0ZWQgdGhlIGN0eC0+c3RhdGUgaW4gY2FzZSBvZiB0aGUgZW5jb2Rlci4N Cj4gDQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXBhcmFtID0gJmpwZWdfc3JjX2J1Zi0+ZGVjX3Bh cmFtOw0KPiA+ICsJCW1lbXNldChwYXJhbSwgMCwgc2l6ZW9mKCpwYXJhbSkpOw0KPiA+ICsNCj4g PiArCQlpZiAoanBlZ19zcmNfYnVmLT5mbGFncyAmIE1US19KUEVHX0JVRl9GTEFHU19MQVNUX0ZS QU1FKSB7DQo+ID4gKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCAmanBlZy0+djRsMl9kZXYsICJHb3Qg ZW9zXG4iKTsNCj4gPiArCQkJZ290byBlbmQ7DQo+ID4gKwkJfQ0KPiA+ICsJCWhlYWRlcl92YWxp ZCA9IG10a19qcGVnX3BhcnNlKHBhcmFtLA0KPiA+ICsJCQkJCSAgICAgICh1OCAqKXZiMl9wbGFu ZV92YWRkcih2YiwgMCksDQo+ID4gKwkJCQkJICAgICAgdmIyX2dldF9wbGFuZV9wYXlsb2FkKHZi LCAwKSk7DQo+ID4gKwkJaWYgKCFoZWFkZXJfdmFsaWQpIHsNCj4gPiArCQkJdjRsMl9lcnIoJmpw ZWctPnY0bDJfZGV2LCAiSGVhZGVyIGludmFsaWQuXG4iKTsNCj4gPiArCQkJdmIyX2J1ZmZlcl9k b25lKHZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCj4gPiArCQkJcmV0dXJuOw0KPiA+ICsJCX0N Cj4gPiAgDQo+ID4gLQkJbXRrX2pwZWdfcXVldWVfc3JjX2NoZ19ldmVudChjdHgpOw0KPiA+IC0J CW10a19qcGVnX3NldF9xdWV1ZV9kYXRhKGN0eCwgcGFyYW0pOw0KPiA+IC0JCWN0eC0+c3RhdGUg PSB2YjJfaXNfc3RyZWFtaW5nKGRzdF92cSkgPw0KPiA+IC0JCQkJTVRLX0pQRUdfU09VUkNFX0NI QU5HRSA6IE1US19KUEVHX1JVTk5JTkc7DQo+ID4gKwkJaWYgKGN0eC0+c3RhdGUgPT0gTVRLX0pQ RUdfSU5JVCkgew0KPiA+ICsJCQlzdHJ1Y3QgdmIyX3F1ZXVlICpkc3RfdnE7DQo+ID4gKw0KPiA+ ICsJCQlkc3RfdnEgPSB2NGwyX20ybV9nZXRfdnENCj4gPiArCQkJCQkoY3R4LT5maC5tMm1fY3R4 LA0KPiA+ICsJCQkJCSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKTsNCj4gPiAr CQkJbXRrX2pwZWdfcXVldWVfc3JjX2NoZ19ldmVudChjdHgpOw0KPiA+ICsJCQltdGtfanBlZ19z ZXRfcXVldWVfZGF0YShjdHgsIHBhcmFtKTsNCj4gPiArCQkJY3R4LT5zdGF0ZSA9IHZiMl9pc19z dHJlYW1pbmcoZHN0X3ZxKSA/DQo+ID4gKwkJCQkJTVRLX0pQRUdfU09VUkNFX0NIQU5HRSA6DQo+ ID4gKwkJCQkJTVRLX0pQRUdfUlVOTklORzsNCj4gPiArCQl9DQo+ID4gIAl9DQo+ID4gIGVuZDoN Cj4gPiAgCXY0bDJfbTJtX2J1Zl9xdWV1ZShjdHgtPmZoLm0ybV9jdHgsIHRvX3ZiMl92NGwyX2J1 ZmZlcih2YikpOw0KPiANCj4gSXQgc291bmRzIGxpa2Ugd2Ugd291bGQgYWxzbyBiZW5lZml0IGZy b20ganVzdCBoYXZpbmcgc2VwYXJhdGUgY2FsbGJhY2tzDQo+IGZvciBlbmNvZGVyIGFuIGRlY29k ZXIgaGVyZS4NCmRvbmUuDQo+IA0KPiBUaGUgY29kZSBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBh dGNoLCBidXQgc3RhcnRfc3RyZWFtaW5nIGltcGxlbWVudGF0aW9uDQo+IGhhcyBhIHByb2JsZW0g dGhhdCBJIHdhbnQgdG8gcG9pbnQgb3V0Og0KPiANCj4gCXN0YXRpYyBpbnQgbXRrX2pwZWdfc3Rh cnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBjb3VudCkNCj4g CXsNCj4gCQlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHEpOw0K PiAJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiOw0KPiAJCWludCByZXQgPSAwOw0KPiAJDQo+ IAkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjdHgtPmpwZWctPmRldik7DQo+IAkJaWYgKHJl dCA8IDApDQo+IAkJCWdvdG8gZXJyOw0KPiANCj4gVGhpcyBpcyBhIG1lbW9yeSB0byBtZW1vcnkg ZGV2aWNlLCBzbyBpdCBkb2Vzbid0IG5lZWQgdG8ga2VlcCBydW5uaW5nIGFsbA0KPiB0aGUgdGlt ZSB3aGVuIHN0cmVhbWluZyBpcyBlbmFibGVkLiBPbmUgd291bGQgbm9ybWFsbHkgY2FsbA0KPiBw bV9ydW50aW1lX2dldF9zeW5jKCkgYmVmb3JlIHN0YXJ0aW5nIGEgZnJhbWUgYW5kIHRoZW4gcG1f cnVudGltZV9wdXQoKQ0KPiBhZnRlciBjb21wbGV0aW5nIGl0LiBUaGlzIHdvdWxkIHNhdmUgcG93 ZXIgZm9yIHRoZSB0aW1lIGJldHdlZW4gcHJvY2Vzc2luZw0KPiB0d28gZnJhbWVzLg0KSSBoYXZl IHJlbW92ZWQgcG1fcnVudGltZV9nZXRfc3luYygpIHRvIGRldmljZV9ydW4oKSBiZWZvcmUgc3Rh cnRpbmcgYQ0KZnJhbWUgYW5kIHBtX3J1bnRpbWVfcHV0KCkgdG8gaXJxIGhhbmRsZXIgZnVuY3Rp b24gYWZ0ZXIgY29tcGxldGluZyBpdC4NCj4gDQo+IAkJcmV0dXJuIDA7DQo+IAllcnI6DQo+IAkJ d2hpbGUgKCh2YiA9IG10a19qcGVnX2J1Zl9yZW1vdmUoY3R4LCBxLT50eXBlKSkpDQo+IAkJCXY0 bDJfbTJtX2J1Zl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX1FVRVVFRCk7DQo+IAkJcmV0dXJuIHJl dDsNCj4gCX0NCj4gDQo+ID4gQEAgLTcwOCwxNiArOTQ3LDE2IEBAIHN0YXRpYyB2b2lkIG10a19q cGVnX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnEpDQo+ID4gIAkgKiBzdWJzYW1w bGluZy4gVXBkYXRlIGNhcHR1cmUgcXVldWUgd2hlbiB0aGUgc3RyZWFtIGlzIG9mZi4NCj4gPiAg CSAqLw0KPiA+ICAJaWYgKGN0eC0+c3RhdGUgPT0gTVRLX0pQRUdfU09VUkNFX0NIQU5HRSAmJg0K PiA+IC0JICAgICFWNEwyX1RZUEVfSVNfT1VUUFVUKHEtPnR5cGUpKSB7DQo+ID4gKwkgICAgIVY0 TDJfVFlQRV9JU19PVVRQVVQocS0+dHlwZSkgJiYNCj4gPiArCSAgICBjdHgtPmpwZWctPm1vZGUg PT0gTVRLX0pQRUdfREVDKSB7DQo+ID4gIAkJc3RydWN0IG10a19qcGVnX3NyY19idWYgKnNyY19i dWY7DQo+ID4gIA0KPiA+ICAJCXZiID0gdjRsMl9tMm1fbmV4dF9zcmNfYnVmKGN0eC0+ZmgubTJt X2N0eCk7DQo+ID4gIAkJc3JjX2J1ZiA9IG10a19qcGVnX3ZiMl90b19zcmNidWYoJnZiLT52YjJf YnVmKTsNCj4gPiAgCQltdGtfanBlZ19zZXRfcXVldWVfZGF0YShjdHgsICZzcmNfYnVmLT5kZWNf cGFyYW0pOw0KPiA+ICAJCWN0eC0+c3RhdGUgPSBNVEtfSlBFR19SVU5OSU5HOw0KPiA+IC0JfSBl bHNlIGlmIChWNEwyX1RZUEVfSVNfT1VUUFVUKHEtPnR5cGUpKSB7DQo+ID4gKwl9IGVsc2UgaWYg KFY0TDJfVFlQRV9JU19PVVRQVVQocS0+dHlwZSkpDQo+ID4gIAkJY3R4LT5zdGF0ZSA9IE1US19K UEVHX0lOSVQ7DQo+ID4gLQl9DQo+IA0KPiBXb3VsZG4ndCBpdCBiZSBwb3NzaWJsZSB0aGF0IGF0 IHRoaXMgcG9pbnQgdGhlIGVuY29kZXIgaXMgYWN0dWFsbHkgaW4NCj4gcHJvY2VzcyBvZiBlbmNv ZGluZyBhIGZyYW1lPyBXb3VsZG4ndCB0aGlzIGNvZGUgcmFjZSB3aXRoIHRoZSBpbnRlcnJ1cHQN Cj4gaGFuZGxlcj8NCmhhdmUgcmVtb3ZlZCBjdHgtPnN0YXRlIG9mIGpwZWcgZW5jb2Rlci4NCj4g DQo+ID4gIA0KPiA+ICAJd2hpbGUgKCh2YiA9IG10a19qcGVnX2J1Zl9yZW1vdmUoY3R4LCBxLT50 eXBlKSkpDQo+ID4gIAkJdjRsMl9tMm1fYnVmX2RvbmUodmIsIFZCMl9CVUZfU1RBVEVfRVJST1Ip Ow0KPiA+IEBAIC03NzIsNiArMTAxMSw0NSBAQCBzdGF0aWMgaW50IG10a19qcGVnX3NldF9kZWNf ZHN0KHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCwNCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ ID4gIA0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZW5jX2RzdChzdHJ1Y3QgbXRrX2pw ZWdfY3R4ICpjdHgsIHZvaWQgX19pb21lbSAqYmFzZSwNCj4gPiArCQkJCSBzdHJ1Y3QgdmIyX2J1 ZmZlciAqZHN0X2J1ZiwNCj4gPiArCQkJCSBzdHJ1Y3QgbXRrX2pwZWdfZW5jX2JzICpicykNCj4g PiArew0KPiA+ICsJYnMtPmRtYV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIo ZHN0X2J1ZiwgMCk7DQo+ID4gKwlicy0+ZG1hX2FkZHJfb2Zmc2V0ID0gY3R4LT5lbmFibGVfZXhp ZiA/IE1US19KUEVHX0RFRkFVTFRfRVhJRl9TSVpFIDogMDsNCj4gDQo+IENvdWxkIHlvdSBleHBs YWluIHdoYXQgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIGRtYV9hZGRyX29mZnNldCBhbmQgd2hlcmUg dGhlDQo+IGRlZmF1bHQgRVhJRiBzaXplIGNvbWVzIGZyb20/IEFsc28sIGhvdyBpcyB0aGUgZW5j b2RlciBvdXRwdXQgYWZmZWN0ZWQgYnkNCj4gdGhlIGVuYWJsZV9leGlmIGZsYWc/DQpJZiBlbmFi bGVkIHRoZSBleGlmIG1vZGUsIHRoZSByZWFsIG91dHB1dCB3aWxsIGJlIGZpbGxlZCBhdCB0aGUg bG9jYWl0b24NCm9mIGRzdF9hZGRyKyBkbWFfYWRkcl9vZmZzZXQoZXhpZiBzaXplKS5UaGUgZG1h X2FkZHJfb2Zmc2V0IHdpbGwgYmUNCmZpbGxlZCBieSB0aGUgYXBwbGljYXRpb24uDQpUaGUgZGVm YXVsdCBleGlmIHNpemUgaXMgc2V0dGVkIGFzIGNvbnN0YW50IHZhbHVlIDY0ayBhY2NvcmRpbmcg dG8gdGhlDQpzcGVjLihFeGlmIG1ldGFkYXRhIGFyZSByZXN0cmljdGVkIGluIHNpemUgdG8gNjRr QiBpbiBKUEVHIGltYWdlcw0KYmVjYXVzZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24g dGhpcyBpbmZvcm1hdGlvbiBtdXN0IGJlDQpjb250YWluZWQgd2l0aGluIGEgc2lnbmVkIEpQRUcg QVBQMSBzZWdtZW50KQ0KPiANCj4gPiArCWJzLT5kbWFfYWRkcl9vZmZzZXRtYXNrID0gYnMtPmRt YV9hZGRyICYgSlBFR19FTkNfRFNUX0FERFJfT0ZGU0VUX01BU0s7DQo+ID4gKwlicy0+c2l6ZSA9 IHJvdW5kX3VwKHZiMl9wbGFuZV9zaXplKGRzdF9idWYsIDApLCAxMjgpOw0KPiANCj4gV2UgY2Fu J3Qgcm91bmQgdXAgdGhlIHNpemUgdGhhdCBjb21lcyBmcm9tIHZiMiwgYmVjYXVzZSBpdCBjb3Vs ZCBsZWFkIHRvIGENCj4gYnVmZmVyIG92ZXJmbG93LiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRo ZSBoYXJkd2FyZSBkb2Vzbid0IHdyaXRlIG1vcmUNCj4gdGhhbiB0aGUgdmFsdWUgcmV0dXJuZWQg YnkgdmIyX3BsYW5lX3NpemUoKS4NCmRvbmUuDQo+IA0KPiA+ICsNCj4gPiArCW10a19qcGVnX2Vu Y19zZXRfZHN0X2FkZHIoYmFzZSwgYnMtPmRtYV9hZGRyLCBicy0+c2l6ZSwNCj4gPiArCQkJCSAg YnMtPmRtYV9hZGRyX29mZnNldCwNCj4gPiArCQkJCSAgYnMtPmRtYV9hZGRyX29mZnNldG1hc2sp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZW5jX3NyYyhz dHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsIHZvaWQgX19pb21lbSAqYmFzZSwNCj4gPiArCQkJCSBz dHJ1Y3QgdmIyX2J1ZmZlciAqc3JjX2J1ZiwNCj4gPiArCQkJCSBzdHJ1Y3QgbXRrX2pwZWdfZW5j X2ZiICpmYikNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJbXRrX2pwZWdfZW5j X3NldF9pbWdfc2l6ZShiYXNlLCBjdHgtPm91dF9xLncsIGN0eC0+b3V0X3EuaCk7DQo+ID4gKwlt dGtfanBlZ19lbmNfc2V0X2VuY19mb3JtYXQoYmFzZSwgY3R4LT5vdXRfcS5mbXQtPmZvdXJjYyk7 DQo+ID4gKwltdGtfanBlZ19lbmNfc2V0X2Jsa19udW0oYmFzZSwgY3R4LT5vdXRfcS5mbXQtPmZv dXJjYywgY3R4LT5vdXRfcS53LA0KPiA+ICsJCQkJIGN0eC0+b3V0X3EuaCk7DQo+ID4gKwltdGtf anBlZ19lbmNfc2V0X3N0cmlkZShiYXNlLCBjdHgtPm91dF9xLmZtdC0+Zm91cmNjLCBjdHgtPm91 dF9xLncsDQo+ID4gKwkJCQljdHgtPm91dF9xLmgsIGN0eC0+b3V0X3EuYnl0ZXNwZXJsaW5lWzBd KTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc3JjX2J1Zi0+bnVtX3BsYW5lczsgaSsr KSB7DQo+ID4gKwkJZmItPmZiX2FkZHJbaV0uZG1hX2FkZHIgPQ0KPiA+ICsJCQl2YjJfZG1hX2Nv bnRpZ19wbGFuZV9kbWFfYWRkcihzcmNfYnVmLCBpKSArDQo+ID4gKwkJCXNyY19idWYtPnBsYW5l c1tpXS5kYXRhX29mZnNldDsNCj4gPiArCQlmYi0+ZmJfYWRkcltpXS5zaXplID0gdmIyX3BsYW5l X3NpemUoc3JjX2J1ZiwgaSkgLQ0KPiA+ICsJCQkJICAgICAgc3JjX2J1Zi0+cGxhbmVzW2ldLmRh dGFfb2Zmc2V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW10a19qcGVnX2VuY19zZXRfc3JjX2Fk ZHIoYmFzZSwgZmItPmZiX2FkZHJbMF0uZG1hX2FkZHIsDQo+ID4gKwkJCQkgIGZiLT5mYl9hZGRy WzFdLmRtYV9hZGRyKTsNCj4gDQo+IFdoYXQgd291bGQgYmUgdGhlIHNlY29uZCBkbWFfYWRkciBp biBjYXNlIG9mIGEgZm9ybWF0IHdpdGggMSBwbGFuZT8NCmhhdmUgY2hhbmdlZCBpdCBhY2NvcmRp bmcgdG8gdGhlIG51bV9wbGFuZXM6d2hlbiBpdCBpcyAxLCB3ZSBqdXN0IHNldA0KdGhlIGZpcnN0 IGRtYV9hZGRyLHdoZW4gaXQgaXMgMiwgc2V0IGJvdGggYWRkcmVzcy4NCj4gDQo+ID4gK30NCj4g PiArDQo+ID4gIHN0YXRpYyB2b2lkIG10a19qcGVnX2RldmljZV9ydW4odm9pZCAqcHJpdikNCj4g PiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gcHJpdjsNCj4gPiBAQCAtNzgy LDYgKzEwNjAsOCBAQCBzdGF0aWMgdm9pZCBtdGtfanBlZ19kZXZpY2VfcnVuKHZvaWQgKnByaXYp DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfc3JjX2J1ZiAqanBlZ19zcmNfYnVmOw0KPiA+ICAJc3Ry dWN0IG10a19qcGVnX2JzIGJzOw0KPiA+ICAJc3RydWN0IG10a19qcGVnX2ZiIGZiOw0KPiA+ICsJ c3RydWN0IG10a19qcGVnX2VuY19icyBlbmNfYnM7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZW5j X2ZiIGVuY19mYjsNCj4gPiAgCWludCBpOw0KPiA+ICANCj4gPiAgCXNyY19idWYgPSB2NGwyX20y bV9uZXh0X3NyY19idWYoY3R4LT5maC5tMm1fY3R4KTsNCj4gPiBAQCAtNzkyLDMwICsxMDcyLDQ3 IEBAIHN0YXRpYyB2b2lkIG10a19qcGVnX2RldmljZV9ydW4odm9pZCAqcHJpdikNCj4gPiAgCQlm b3IgKGkgPSAwOyBpIDwgZHN0X2J1Zi0+dmIyX2J1Zi5udW1fcGxhbmVzOyBpKyspDQo+ID4gIAkJ CXZiMl9zZXRfcGxhbmVfcGF5bG9hZCgmZHN0X2J1Zi0+dmIyX2J1ZiwgaSwgMCk7DQo+ID4gIAkJ YnVmX3N0YXRlID0gVkIyX0JVRl9TVEFURV9ET05FOw0KPiANCj4gQWJvdXQgZXhpc3RpbmcgY29k ZSwgYnV0IHdlIG1heSB3YW50IHRvIGV4cGxhaW4gdGhpcy4NCj4gV2hhdCBpcyB0aGlzIGxhc3Qg ZnJhbWUgaGFuZGxpbmcgYWJvdmUgZm9yPw0KaWYgdGhlIHVzZXIgZ2l2ZXMgdXMgYSBlbXB0eSBi dWZmZXIobWVhbnMgaXQgaXMgdGhlIGxhc3QgZnJhbWUpLHRoZQ0KZHJpdmVyIHdpbGwgbm90IGVu Y29kZSBhbmQgZG9uZSB0aGUgYnVmZmVyIHRvIHRoZSB1c2VyLg0KDQo+ID4gLQkJZ290byBkZWNf ZW5kOw0KPiA+ICsJCWdvdG8gZGV2aWNlX3J1bl9lbmQ7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0J aWYgKG10a19qcGVnX2NoZWNrX3Jlc29sdXRpb25fY2hhbmdlKGN0eCwgJmpwZWdfc3JjX2J1Zi0+ ZGVjX3BhcmFtKSkgew0KPiA+IC0JCW10a19qcGVnX3F1ZXVlX3NyY19jaGdfZXZlbnQoY3R4KTsN Cj4gPiAtCQljdHgtPnN0YXRlID0gTVRLX0pQRUdfU09VUkNFX0NIQU5HRTsNCj4gPiAtCQl2NGwy X20ybV9qb2JfZmluaXNoKGpwZWctPm0ybV9kZXYsIGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gLQkJ cmV0dXJuOw0KPiA+IC0JfQ0KPiA+ICsJaWYgKGpwZWctPm1vZGUgPT0gTVRLX0pQRUdfRU5DKSB7 DQo+ID4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmpwZWctPmh3X2xvY2ssIGZsYWdzKTsNCj4gPiAr CQltdGtfanBlZ19lbmNfcmVzZXQoanBlZy0+cmVnX2Jhc2UpOw0KPiANCj4gV2h5IGRvIHdlIG5l ZWQgdG8gcmVzZXQgZXZlcnkgZnJhbWU/DQpXZSBkbyB0aGlzIG9wZXJhdGlvbiBpcyB0byBlbnN1 cmUgdGhhdCBhbGwgcmVnaXN0ZXJzIGFyZSBjbGVhcmVkLg0KSXQncyBzYWZlciBmcm9tIHRoZSBo YXJkd2FyZSBwb2ludCBvZiB2aWV3Lg0KPiANCj4gPiArDQo+ID4gKwkJbXRrX2pwZWdfc2V0X2Vu Y19kc3QoY3R4LCBqcGVnLT5yZWdfYmFzZSwgJmRzdF9idWYtPnZiMl9idWYsDQo+ID4gKwkJCQkg ICAgICZlbmNfYnMpOw0KPiA+ICsJCW10a19qcGVnX3NldF9lbmNfc3JjKGN0eCwganBlZy0+cmVn X2Jhc2UsICZzcmNfYnVmLT52YjJfYnVmLA0KPiA+ICsJCQkJICAgICAmZW5jX2ZiKTsNCj4gPiAr CQltdGtfanBlZ19lbmNfc2V0X2N0cmxfY2ZnKGpwZWctPnJlZ19iYXNlLCBjdHgtPmVuYWJsZV9l eGlmLA0KPiA+ICsJCQkJCSAgY3R4LT5lbmNfcXVhbGl0eSwNCj4gPiArCQkJCQkgIGN0eC0+cmVz dGFydF9pbnRlcnZhbCk7DQo+ID4gKw0KPiA+ICsJCW10a19qcGVnX2VuY19zdGFydChqcGVnLT5y ZWdfYmFzZSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlmIChtdGtfanBlZ19jaGVja19yZXNv bHV0aW9uX2NoYW5nZQ0KPiA+ICsJCQkoY3R4LCAmanBlZ19zcmNfYnVmLT5kZWNfcGFyYW0pKSB7 DQo+ID4gKwkJCW10a19qcGVnX3F1ZXVlX3NyY19jaGdfZXZlbnQoY3R4KTsNCj4gPiArCQkJY3R4 LT5zdGF0ZSA9IE1US19KUEVHX1NPVVJDRV9DSEFOR0U7DQo+ID4gKwkJCXY0bDJfbTJtX2pvYl9m aW5pc2goanBlZy0+bTJtX2RldiwgY3R4LT5maC5tMm1fY3R4KTsNCj4gDQo+IFRoaXMgaXMgYSBi aXQgc3RyYW5nZS4gUmVzb2x1dGlvbiBjaGFuZ2Ugc2hvdWxkIGJlIHNpZ25hbGVkIHdoZW4gdGhl DQo+IGhhcmR3YXJlIGF0dGVtcHRlZCB0byBkZWNvZGUgYSBmcmFtZSBhbmQgZGV0ZWN0ZWQgYSBk aWZmZXJlbnQgcmVzb2x1dGlvbg0KPiB0aGFuIGN1cnJlbnQuIEl0IHNob3VsZG4ndCBiZSBuZWNl c3NhcnkgZm9yIHRoZSB1c2Vyc3BhY2UgdG8gcXVldWUgYSBwYWlyDQo+IG9mIGJ1ZmZlcnMgdG8g c2lnbmFsIGl0LCBhcyB3aXRoIHRoZSBjdXJyZW50IGNvZGUuDQpJZiB0aGUgdGhlIHJlc29sdXRp b24gaXMgYmlnZ2VyIHRoYW4gY3VycmVudCwgdGhlIGN1cnJlbnQgYnVmZmVyIHdpbGwNCm5vdCBi ZSBlbm91Z2ggZm9yIHRoZSBjaGFuZ2VkIHJlc29sdXRpb24uU2hvdWxkbid0IGl0IHRlbGwgdGhl IHVzZXJzcGFjZQ0KdG8gcXVldWUgbmV3IGJ1ZmZlciBhbmQgc3RyZWFtIG9uIGFnYWluPw0KPiAN Cj4gPiArCQkJcmV0dXJuOw0KPiA+ICsJCX0NCj4gPiAgDQo+ID4gLQltdGtfanBlZ19zZXRfZGVj X3NyYyhjdHgsICZzcmNfYnVmLT52YjJfYnVmLCAmYnMpOw0KPiA+IC0JaWYgKG10a19qcGVnX3Nl dF9kZWNfZHN0KGN0eCwgJmpwZWdfc3JjX2J1Zi0+ZGVjX3BhcmFtLCAmZHN0X2J1Zi0+dmIyX2J1 ZiwgJmZiKSkNCj4gPiAtCQlnb3RvIGRlY19lbmQ7DQo+ID4gKwkJbXRrX2pwZWdfc2V0X2RlY19z cmMoY3R4LCAmc3JjX2J1Zi0+dmIyX2J1ZiwgJmJzKTsNCj4gPiArCQlpZiAobXRrX2pwZWdfc2V0 X2RlY19kc3QoY3R4LCAmanBlZ19zcmNfYnVmLT5kZWNfcGFyYW0sDQo+ID4gKwkJCQkJICZkc3Rf YnVmLT52YjJfYnVmLCAmZmIpKQ0KPiA+ICsJCQlnb3RvIGRldmljZV9ydW5fZW5kOw0KPiA+ICAN Cj4gPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZqcGVnLT5od19sb2NrLCBmbGFncyk7DQo+ID4gLQlt dGtfanBlZ19kZWNfcmVzZXQoanBlZy0+ZGVjX3JlZ19iYXNlKTsNCj4gPiAtCW10a19qcGVnX2Rl Y19zZXRfY29uZmlnKGpwZWctPmRlY19yZWdfYmFzZSwNCj4gPiAtCQkJCSZqcGVnX3NyY19idWYt PmRlY19wYXJhbSwgJmJzLCAmZmIpOw0KPiA+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZqcGVnLT5o d19sb2NrLCBmbGFncyk7DQo+ID4gKwkJbXRrX2pwZWdfZGVjX3Jlc2V0KGpwZWctPnJlZ19iYXNl KTsNCj4gDQo+IFNhbWUgaGVyZSwgd2h5IGRvIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGRlY29kZXIg ZXZlcnkgZnJhbWU/IFNob3VsZG4ndCBpdCBiZQ0KPiBlbm91Z2ggdG8gcmVzZXQgaXQgaW4gcnVu dGltZSByZXN1bWUgY2FsbGJhY2s/DQpEaXR0by4NCj4gDQo+ID4gKwkJbXRrX2pwZWdfZGVjX3Nl dF9jb25maWcoanBlZy0+cmVnX2Jhc2UsDQo+ID4gKwkJCQkJJmpwZWdfc3JjX2J1Zi0+ZGVjX3Bh cmFtLCAmYnMsICZmYik7DQo+ID4gIA0KPiA+IC0JbXRrX2pwZWdfZGVjX3N0YXJ0KGpwZWctPmRl Y19yZWdfYmFzZSk7DQo+ID4gKwkJbXRrX2pwZWdfZGVjX3N0YXJ0KGpwZWctPnJlZ19iYXNlKTsN Cj4gPiArCX0NCj4gPiAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmpwZWctPmh3X2xvY2ssIGZs YWdzKTsNCj4gPiAgCXJldHVybjsNCj4gPiAgDQo+ID4gLWRlY19lbmQ6DQo+ID4gK2RldmljZV9y dW5fZW5kOg0KPiA+ICAJdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsN Cj4gPiAgCXY0bDJfbTJtX2RzdF9idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gIAl2 NGwyX20ybV9idWZfZG9uZShzcmNfYnVmLCBidWZfc3RhdGUpOw0KPiA+IEBAIC04NzUsMzAgKzEx NzIsMzAgQEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfY2xrX29uKHN0cnVjdCBtdGtfanBlZ19kZXYg KmpwZWcpDQo+ID4gIAlyZXQgPSBtdGtfc21pX2xhcmJfZ2V0KGpwZWctPmxhcmIpOw0KPiA+ICAJ aWYgKHJldCkNCj4gPiAgCQlkZXZfZXJyKGpwZWctPmRldiwgIm10a19zbWlfbGFyYl9nZXQgbGFy YnZkZWMgZmFpbCAlZFxuIiwgcmV0KTsNCj4gPiAtCWNsa19wcmVwYXJlX2VuYWJsZShqcGVnLT5j bGtfamRlY19zbWkpOw0KPiA+IC0JY2xrX3ByZXBhcmVfZW5hYmxlKGpwZWctPmNsa19qZGVjKTsN Cj4gPiArCWlmIChqcGVnLT5tb2RlID09IE1US19KUEVHX0RFQykNCj4gPiArCQljbGtfcHJlcGFy ZV9lbmFibGUoanBlZy0+Y2xrX2pwZWdfc21pKTsNCj4gDQo+IENvdWxkIHRoZSBjbGtfYnVsa18q IEFQSSBiZSB1c2VkIGluc3RlYWQ/IEl0IHdvdWxkIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3INCj4g dGhpcyBzcGVjaWFsIGNhc2luZy4NCmRvbmUuDQo+IA0KPiA+ICsJY2xrX3ByZXBhcmVfZW5hYmxl KGpwZWctPmNsa19qcGVnKTsNCj4gPiAgfQ0KPiA+ICANCj4gPiAgc3RhdGljIHZvaWQgbXRrX2pw ZWdfY2xrX29mZihzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnKQ0KPiA+ICB7DQo+ID4gLQljbGtf ZGlzYWJsZV91bnByZXBhcmUoanBlZy0+Y2xrX2pkZWMpOw0KPiA+IC0JY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGpwZWctPmNsa19qZGVjX3NtaSk7DQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUo anBlZy0+Y2xrX2pwZWcpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUgPT0gTVRLX0pQRUdfREVDKQ0K PiA+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShqcGVnLT5jbGtfanBlZ19zbWkpOw0KPiANCj4g RGl0dG8uDQpkb25lLg0KPiANCj4gPiAgCW10a19zbWlfbGFyYl9wdXQoanBlZy0+bGFyYik7DQo+ ID4gIH0NCj4gPiAgDQo+ID4gLXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfanBlZ19kZWNfaXJxKGlu dCBpcnEsIHZvaWQgKnByaXYpDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfanBlZ19pcnEo aW50IGlycSwgdm9pZCAqcHJpdikNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAq anBlZyA9IHByaXY7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHg7DQo+ID4gIAlzdHJ1 Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmLCAqZHN0X2J1ZjsNCj4gPiAgCXN0cnVjdCBtdGtf anBlZ19zcmNfYnVmICpqcGVnX3NyY19idWY7DQo+ID4gIAllbnVtIHZiMl9idWZmZXJfc3RhdGUg YnVmX3N0YXRlID0gVkIyX0JVRl9TVEFURV9FUlJPUjsNCj4gPiAtCXUzMglkZWNfaXJxX3JldDsN Cj4gPiAtCXUzMiBkZWNfcmV0Ow0KPiA+ICsJdTMyIGlycV9yZXQ7DQo+ID4gKwl1MzIgcmV0LCBy ZXN1bHRfc2l6ZTsNCj4gPiAgCWludCBpOw0KPiA+ICANCj4gPiAtCWRlY19yZXQgPSBtdGtfanBl Z19kZWNfZ2V0X2ludF9zdGF0dXMoanBlZy0+ZGVjX3JlZ19iYXNlKTsNCj4gPiAtCWRlY19pcnFf cmV0ID0gbXRrX2pwZWdfZGVjX2VudW1fcmVzdWx0KGRlY19yZXQpOw0KPiA+ICAJY3R4ID0gdjRs Ml9tMm1fZ2V0X2N1cnJfcHJpdihqcGVnLT5tMm1fZGV2KTsNCj4gPiAgCWlmICghY3R4KSB7DQo+ ID4gIAkJdjRsMl9lcnIoJmpwZWctPnY0bDJfZGV2LCAiQ29udGV4dCBpcyBOVUxMXG4iKTsNCj4g PiBAQCAtOTA5LDMyICsxMjA2LDg5IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfanBlZ19kZWNf aXJxKGludCBpcnEsIHZvaWQgKnByaXYpDQo+ID4gIAlkc3RfYnVmID0gdjRsMl9tMm1fZHN0X2J1 Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsNCj4gPiAgCWpwZWdfc3JjX2J1ZiA9IG10a19qcGVn X3ZiMl90b19zcmNidWYoJnNyY19idWYtPnZiMl9idWYpOw0KPiA+ICANCj4gPiAtCWlmIChkZWNf aXJxX3JldCA+PSBNVEtfSlBFR19ERUNfUkVTVUxUX1VOREVSRkxPVykNCj4gPiAtCQltdGtfanBl Z19kZWNfcmVzZXQoanBlZy0+ZGVjX3JlZ19iYXNlKTsNCj4gPiArCWlmIChqcGVnLT5tb2RlID09 IE1US19KUEVHX0VOQykgew0KPiANCj4gQXMgdGhlIGhhcmR3YXJlIGJsb2NrcyBhcmUgY29tcGxl dGVseSBkaWZmZXJlbnQsIHdlIGRlZmluaXRlbHkgd2FudCB0byBoYXZlDQo+IHNlcGFyYXRlIGlu dGVycnVwdCBoYW5kbGVycyBmb3IgdGhlbSwgcmF0aGVyIHRoYW4gdGhpcyBzcGVjaWFsIGNhc2lu Zy4NCmRvbmUuDQo+IA0KPiA+ICsJCXJldCA9IG10a19qcGVnX2VuY19nZXRfaW50X3N0YXR1cyhq cGVnLT5yZWdfYmFzZSk7DQo+ID4gKwkJaXJxX3JldCA9IG10a19qcGVnX2VuY19lbnVtX3Jlc3Vs dChqcGVnLT5yZWdfYmFzZSwgcmV0KTsNCj4gPiAgDQo+ID4gLQlpZiAoZGVjX2lycV9yZXQgIT0g TVRLX0pQRUdfREVDX1JFU1VMVF9FT0ZfRE9ORSkgew0KPiA+IC0JCWRldl9lcnIoanBlZy0+ZGV2 LCAiZGVjb2RlIGZhaWxlZFxuIik7DQo+ID4gLQkJZ290byBkZWNfZW5kOw0KPiA+IC0JfQ0KPiA+ ICsJCWlmIChpcnFfcmV0ID49IE1US19KUEVHX0VOQ19SRVNVTFRfU1RBTEwpDQo+ID4gKwkJCW10 a19qcGVnX2VuY19yZXNldChqcGVnLT5yZWdfYmFzZSk7DQo+ID4gKw0KPiA+ICsJCWlmIChpcnFf cmV0ICE9IE1US19KUEVHX0VOQ19SRVNVTFRfRE9ORSkgew0KPiA+ICsJCQlkZXZfZXJyKGpwZWct PmRldiwgImVuY29kZSBmYWlsZWRcbiIpOw0KPiA+ICsJCQlnb3RvIGlycV9lbmQ7DQo+ID4gKwkJ fQ0KPiA+ICsNCj4gPiArCQlyZXN1bHRfc2l6ZSA9IG10a19qcGVnX2VuY19nZXRfZmlsZV9zaXpl KGpwZWctPnJlZ19iYXNlKTsNCj4gPiArCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoJmRzdF9idWYt PnZiMl9idWYsIDAsDQo+ID4gKwkJCQkgICAgICByZXN1bHRfc2l6ZSk7DQo+ID4gKwl9IGVsc2Ug ew0KPiA+ICsJCXJldCA9IG10a19qcGVnX2RlY19nZXRfaW50X3N0YXR1cyhqcGVnLT5yZWdfYmFz ZSk7DQo+ID4gKwkJaXJxX3JldCA9IG10a19qcGVnX2RlY19lbnVtX3Jlc3VsdChyZXQpOw0KPiA+ ICsNCj4gPiArCQlpZiAoaXJxX3JldCA+PSBNVEtfSlBFR19ERUNfUkVTVUxUX1VOREVSRkxPVykN Cj4gPiArCQkJbXRrX2pwZWdfZGVjX3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsNCj4gPiAgDQo+ID4g LQlmb3IgKGkgPSAwOyBpIDwgZHN0X2J1Zi0+dmIyX2J1Zi5udW1fcGxhbmVzOyBpKyspDQo+ID4g LQkJdmIyX3NldF9wbGFuZV9wYXlsb2FkKCZkc3RfYnVmLT52YjJfYnVmLCBpLA0KPiA+IC0JCQkJ ICAgICAganBlZ19zcmNfYnVmLT5kZWNfcGFyYW0uY29tcF9zaXplW2ldKTsNCj4gPiArCQlpZiAo aXJxX3JldCAhPSBNVEtfSlBFR19ERUNfUkVTVUxUX0VPRl9ET05FKSB7DQo+ID4gKwkJCWRldl9l cnIoanBlZy0+ZGV2LCAiZGVjb2RlIGZhaWxlZFxuIik7DQo+ID4gKwkJCWdvdG8gaXJxX2VuZDsN Cj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBkc3RfYnVmLT52YjJfYnVm Lm51bV9wbGFuZXM7IGkrKykNCj4gPiArCQkJdmIyX3NldF9wbGFuZV9wYXlsb2FkDQo+ID4gKwkJ CQkoJmRzdF9idWYtPnZiMl9idWYsIGksDQo+ID4gKwkJCQkganBlZ19zcmNfYnVmLT5kZWNfcGFy YW0uY29tcF9zaXplW2ldKTsNCj4gPiArCX0NCj4gPiAgDQo+ID4gIAlidWZfc3RhdGUgPSBWQjJf QlVGX1NUQVRFX0RPTkU7DQo+ID4gIA0KPiA+IC1kZWNfZW5kOg0KPiA+ICtpcnFfZW5kOg0KPiA+ ICAJdjRsMl9tMm1fYnVmX2RvbmUoc3JjX2J1ZiwgYnVmX3N0YXRlKTsNCj4gPiAgCXY0bDJfbTJt X2J1Zl9kb25lKGRzdF9idWYsIGJ1Zl9zdGF0ZSk7DQo+ID4gIAl2NGwyX20ybV9qb2JfZmluaXNo KGpwZWctPm0ybV9kZXYsIGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gIAlyZXR1cm4gSVJRX0hBTkRM RUQ7DQo+ID4gIH0NCj4gPiAgDQo+ID4gLXN0YXRpYyB2b2lkIG10a19qcGVnX3NldF9kZWZhdWx0 X3BhcmFtcyhzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgpDQo+ID4gK3N0YXRpYyB2b2lkIG10a19q cGVnX3NldF9lbmNfZGVmYXVsdF9wYXJhbXMoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4KQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfcV9kYXRhICpxID0gJmN0eC0+b3V0X3E7DQo+ID4g Kw0KPiA+ICsJY3R4LT5maC5jdHJsX2hhbmRsZXIgPSAmY3R4LT5jdHJsX2hkbDsNCj4gDQo+IFBl cmhhcHMgdGhpcyBjb3VsZCBiZSBqdXN0IG1vdmVkIHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFu IGR1cGxpY2F0aW5nIGZvcg0KPiBlbmNvZGVyIGFuZCBkZWNvZGVyPw0KPiANCj4gPiArDQo+ID4g KwljdHgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywNCj4gPiArCWN0eC0+eWNi Y3JfZW5jID0gVjRMMl9ZQ0JDUl9FTkNfREVGQVVMVDsNCj4gPiArCWN0eC0+cXVhbnRpemF0aW9u ID0gVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVDsNCj4gPiArCWN0eC0+eGZlcl9mdW5jID0gVjRM Ml9YRkVSX0ZVTkNfREVGQVVMVDsNCj4gPiArDQo+ID4gKwlxLT53ID0gTVRLX0pQRUdfTUlOX1dJ RFRIOw0KPiA+ICsJcS0+aCA9IE1US19KUEVHX01JTl9IRUlHSFQ7DQo+ID4gKw0KPiA+ICsJcS0+ Zm10ID0gbXRrX2pwZWdfZmluZF9mb3JtYXQoY3R4LCBWNEwyX1BJWF9GTVRfWVVZViwNCj4gPiAr CQkJCSAgICAgIE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVCk7DQo+ID4gKw0KPiA+ICsJcS0+dyA9 IGNsYW1wKHJvdW5kX3VwKHEtPncsIDMyKSwgTVRLX0pQRUdfTUlOX1dJRFRILA0KPiA+ICsJCSAg ICAgTVRLX0pQRUdfTUFYX1dJRFRIKTsNCj4gPiArCXEtPmggPSBjbGFtcChyb3VuZF91cChxLT5o LCA4KSwgTVRLX0pQRUdfTUlOX0hFSUdIVCwNCj4gPiArCQkgICAgIE1US19KUEVHX01BWF9IRUlH SFQpOw0KPiANCj4gSXMgdGhpcyBjbGFtcCgpIHJlYWxseSBuZWVkZWQ/IFRoZSBjb2RlIGV4cGxp Y2l0bHkgc2V0cyBjb3JyZWN0IHZhbHVlcw0KPiBmZXcgbGluZXMgYWJvdmUuDQo+IA0KPiA+ICsN Cj4gPiArCXEtPnNpemVpbWFnZVswXSA9IHEtPncgKiBxLT5oICogMjsNCj4gPiArCXEtPmJ5dGVz cGVybGluZVswXSA9IHEtPncgKiAyOw0KPiANCj4gSW4gZ2VuZXJhbCB0aGlzIGtpbmQgb2YgaGFy ZGNvZGVkIGNvbXB1dGF0aW9uIGlzIHJlYWxseSBlcnJvciBwcm9uZSwgZS5nLg0KPiBpZiB0aGUg ZGVmYXVsdCBwaXhlbGZvcm1hdCBjaGFuZ2VzIGZvciBzb21lIHJlYXNvbi4gQ291bGQgdGhlIHNh bWUgbG9naWMgYXMNCj4gZm9yIFRSWV8vU19GTVQgYmUgY2FsbGVkIGZyb20gaGVyZSB0byBjb21w dXRlIHRoZXNlIHZhbHVlcz8NCmRvbmUuDQo+ID4gKw0KPiA+ICsJcSA9ICZjdHgtPmNhcF9xOw0K PiA+ICsJcS0+dyA9IE1US19KUEVHX01JTl9XSURUSDsNCj4gPiArCXEtPmggPSBNVEtfSlBFR19N SU5fSEVJR0hUOw0KPiA+ICsJcS0+Zm10ID0gbXRrX2pwZWdfZmluZF9mb3JtYXQoY3R4LCBWNEwy X1BJWF9GTVRfSlBFRywNCj4gPiArCQkJCSAgICAgIE1US19KUEVHX0ZNVF9UWVBFX0NBUFRVUkUp Ow0KPiA+ICsJcS0+Ynl0ZXNwZXJsaW5lWzBdID0gMDsNCj4gPiArCXEtPnNpemVpbWFnZVswXSA9 IE1US19KUEVHX0RFRkFVTFRfU0laRUlNQUdFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBtdGtfanBlZ19zZXRfZGVjX2RlZmF1bHRfcGFyYW1zKHN0cnVjdCBtdGtfanBlZ19jdHgg KmN0eCkNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX3FfZGF0YSAqcSA9ICZjdHgtPm91 dF9xOw0KPiA+ICAJaW50IGk7DQo+ID4gIA0KPiA+ICsJY3R4LT5maC5jdHJsX2hhbmRsZXIgPSAm Y3R4LT5jdHJsX2hkbDsNCj4gPiArDQo+ID4gIAljdHgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9S U1BBQ0VfSlBFRywNCj4gPiAgCWN0eC0+eWNiY3JfZW5jID0gVjRMMl9ZQ0JDUl9FTkNfREVGQVVM VDsNCj4gPiAgCWN0eC0+cXVhbnRpemF0aW9uID0gVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVDsN Cj4gPiBAQCAtOTkwLDcgKzEzNDQsMTggQEAgc3RhdGljIGludCBtdGtfanBlZ19vcGVuKHN0cnVj dCBmaWxlICpmaWxlKQ0KPiA+ICAJCWdvdG8gZXJyb3I7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0J bXRrX2pwZWdfc2V0X2RlZmF1bHRfcGFyYW1zKGN0eCk7DQo+ID4gKwlyZXQgPSBtdGtfanBlZ19j dHJsc19zZXR1cChjdHgpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCXY0bDJfZXJyKCZqcGVn LT52NGwyX2RldiwgIkZhaWxlZCB0byBzZXR1cCBjb250cm9scygpICglZClcbiIsDQo+IA0KPiBu aXQ6IElzIHRoZSAiKCkiIGFmdGVyICJjb250cm9scyIgbmVjZXNzYXJ5Pw0KeWVzLGNoYW5nZWQu DQo+IA0KPiA+ICsJCQkgcmV0KTsNCj4gPiArCQlnb3RvIGVycm9yOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlmIChqcGVnLT5tb2RlID09IE1US19KUEVHX0VOQykNCj4gPiArCQltdGtfanBlZ19z ZXRfZW5jX2RlZmF1bHRfcGFyYW1zKGN0eCk7DQo+ID4gKwllbHNlDQo+ID4gKwkJbXRrX2pwZWdf c2V0X2RlY19kZWZhdWx0X3BhcmFtcyhjdHgpOw0KPiA+ICsNCj4gPiAgCW11dGV4X3VubG9jaygm anBlZy0+bG9jayk7DQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgDQo+ID4gQEAgLTEwMTAsNiArMTM3 NSw3IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4g PiAgDQo+ID4gIAltdXRleF9sb2NrKCZqcGVnLT5sb2NrKTsNCj4gPiAgCXY0bDJfbTJtX2N0eF9y ZWxlYXNlKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZj dHgtPmN0cmxfaGRsKTsNCj4gPiAgCXY0bDJfZmhfZGVsKCZjdHgtPmZoKTsNCj4gPiAgCXY0bDJf ZmhfZXhpdCgmY3R4LT5maCk7DQo+ID4gIAlrZnJlZShjdHgpOw0KPiA+IEBAIC0xMDQzLDE5ICsx NDA5LDI0IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfY2xrX2luaXQoc3RydWN0IG10a19qcGVnX2Rl diAqanBlZykNCj4gPiAgDQo+ID4gIAlqcGVnLT5sYXJiID0gJnBkZXYtPmRldjsNCj4gPiAgDQo+ ID4gLQlqcGVnLT5jbGtfamRlYyA9IGRldm1fY2xrX2dldChqcGVnLT5kZXYsICJqcGdkZWMiKTsN Cj4gPiAtCWlmIChJU19FUlIoanBlZy0+Y2xrX2pkZWMpKQ0KPiA+IC0JCXJldHVybiBQVFJfRVJS KGpwZWctPmNsa19qZGVjKTsNCj4gPiArCWlmIChqcGVnLT5tb2RlID09IE1US19KUEVHX0VOQykg ew0KPiA+ICsJCWpwZWctPmNsa19qcGVnID0gZGV2bV9jbGtfZ2V0KGpwZWctPmRldiwgImpwZ2Vu YyIpOw0KPiA+ICsJCXJldHVybiBQVFJfRVJSX09SX1pFUk8oanBlZy0+Y2xrX2pwZWcpOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWpwZWctPmNsa19qcGVnID0gZGV2bV9jbGtfZ2V0KGpwZWctPmRl diwgImpwZ2RlYyIpOw0KPiA+ICsJaWYgKElTX0VSUihqcGVnLT5jbGtfanBlZykpDQo+ID4gKwkJ cmV0dXJuIFBUUl9FUlIoanBlZy0+Y2xrX2pwZWcpOw0KPiA+ICANCj4gPiAtCWpwZWctPmNsa19q ZGVjX3NtaSA9IGRldm1fY2xrX2dldChqcGVnLT5kZXYsICJqcGdkZWMtc21pIik7DQo+ID4gLQly ZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGpwZWctPmNsa19qZGVjX3NtaSk7DQo+ID4gKwlqcGVnLT5j bGtfanBlZ19zbWkgPSBkZXZtX2Nsa19nZXQoanBlZy0+ZGV2LCAianBnZGVjLXNtaSIpOw0KPiA+ ICsJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhqcGVnLT5jbGtfanBlZ19zbWkpOw0KPiANCj4gSSdk IHN1Z2dlc3QgcHV0dGluZyB0aGUgY2xvY2sgbmFtZXMgaW4gYSBtYXRjaF9kYXRhIHN0cnVjdCwg d2hpY2ggY291bGQgYmUNCj4gcG9pbnRlZCB0byBieSB0aGUgLmRhdGEgZmllbGQgb2Ygb2ZfZGV2 aWNlX2lkLiBUaGVuIGRldm1fY2xrX2J1bGtfZ2V0KCkNCj4gY291bGQgYmUgdXNlZCBnZW5lcmlj YWxseSwgd2l0aG91dCB0aGUgbmVlZCB0byBzcGVjaWFsIGNhc2UgYmV0d2VlbiBlbmNvZGVyDQo+ IGFuZCBkZWNvZGVyLg0KZG9uZS4NCj4gDQo+ID4gIH0NCj4gPiAgDQo+ID4gIHN0YXRpYyBpbnQg bXRrX2pwZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgew0KPiA+ ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBlZzsNCj4gPiAgCXN0cnVjdCByZXNvdXJjZSAqcmVz Ow0KPiA+IC0JaW50IGRlY19pcnE7DQo+ID4gKwlpbnQganBlZ19pcnE7DQo+ID4gIAlpbnQgcmV0 Ow0KPiA+ICANCj4gPiAgCWpwZWcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpq cGVnKSwgR0ZQX0tFUk5FTCk7DQo+ID4gQEAgLTEwNjUsMjggKzE0MzYsMjYgQEAgc3RhdGljIGlu dCBtdGtfanBlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJbXV0 ZXhfaW5pdCgmanBlZy0+bG9jayk7DQo+ID4gIAlzcGluX2xvY2tfaW5pdCgmanBlZy0+aHdfbG9j ayk7DQo+ID4gIAlqcGVnLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJanBlZy0+bW9kZSA9IChl bnVtIG10a19qcGVnX21vZGUpb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGpwZWctPmRldik7DQo+ IA0KPiBBcyB0aGUgbWF0Y2ggZGF0YSBpcyBleHBlY3RlZCB0byBiZSBhIHBvaW50ZXIsIGl0IHNo b3VsZG4ndCBiZSBjYXN0ZWQgdG8gYQ0KPiBub24tcG9pbnRlciB2YWx1ZS4gUGxlYXNlIGRlZmlu ZSBhIHN0cnVjdCB3aXRoIG5lY2Vzc2FyeSBoYXJkd2FyZS1zcGVjaWZpYw0KPiBkYXRhIGFuZCBo YXZlIHRoZSAuZGF0YSBmaWVsZCBvZiBvZl9kZXZpY2VfaWQgcG9pbnQgdG8gaXQuDQpkb25lLg0K PiANCj4gPiAgDQo+ID4gIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOw0KPiA+IC0JanBlZy0+ZGVjX3JlZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKCZwZGV2LT5kZXYsIHJlcyk7DQo+ID4gLQlpZiAoSVNfRVJSKGpwZWctPmRlY19yZWdf YmFzZSkpIHsNCj4gPiAtCQlyZXQgPSBQVFJfRVJSKGpwZWctPmRlY19yZWdfYmFzZSk7DQo+ID4g KwlqcGVnLT5yZWdfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMp Ow0KPiA+ICsJaWYgKElTX0VSUihqcGVnLT5yZWdfYmFzZSkpIHsNCj4gPiArCQlyZXQgPSBQVFJf RVJSKGpwZWctPnJlZ19iYXNlKTsNCj4gPiAgCQlyZXR1cm4gcmV0Ow0KPiA+ICAJfQ0KPiA+ICAN Cj4gPiAtCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwg MCk7DQo+ID4gLQlkZWNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gPiAtCWlm ICghcmVzIHx8IGRlY19pcnEgPCAwKSB7DQo+ID4gLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGdldCBkZWNfaXJxICVkLlxuIiwgZGVjX2lycSk7DQo+ID4gLQkJcmV0ID0gLUVJTlZB TDsNCj4gDQo+IFRoaXMgaXMgYSBidWcgZml4LCBzbyBwbGVzZSBkbyBpdCBpbiBhIHNlcGFyYXRl IHBhdGNoLCBlYXJsaWVyIGluIHRoZQ0KPiBzZXJpZXMuDQpkb25lLg0KPiANCj4gPiAtCQlyZXR1 cm4gcmV0Ow0KPiA+ICsJanBlZ19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiA+ ICsJaWYgKGpwZWdfaXJxIDwgMCkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxl ZCB0byBnZXQganBlZ19pcnEgJWQuXG4iLCBqcGVnX2lycSk7DQo+ID4gKwkJcmV0dXJuIGpwZWdf aXJxOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiAtCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYt PmRldiwgZGVjX2lycSwgbXRrX2pwZWdfZGVjX2lycSwgMCwNCj4gPiArCXJldCA9IGRldm1fcmVx dWVzdF9pcnEoJnBkZXYtPmRldiwganBlZ19pcnEsIG10a19qcGVnX2lycSwgMCwNCj4gPiAgCQkJ ICAgICAgIHBkZXYtPm5hbWUsIGpwZWcpOw0KPiA+ICAJaWYgKHJldCkgew0KPiA+IC0JCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGRlY19pcnEgJWQgKCVkKVxuIiwNCj4g PiAtCQkJZGVjX2lycSwgcmV0KTsNCj4gPiAtCQlyZXQgPSAtRUlOVkFMOw0KPiANCj4gRGl0dG8u IChDb3VsZCBiZSBpbiBvbmUgcGF0Y2ggYXMgdGhlIHNpbWlsYXIgZml4IGFib3ZlLikNCmRvbmUu DQo+IA0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGpwZWdf aXJxICVkICglZClcbiIsDQo+ID4gKwkJCWpwZWdfaXJxLCByZXQpOw0KPiA+ICAJCWdvdG8gZXJy X3JlcV9pcnE7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IEBAIC0xMTEwLDMzICsxNDc5LDM1IEBAIHN0 YXRpYyBpbnQgbXRrX2pwZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4g PiAgCQlnb3RvIGVycl9tMm1faW5pdDsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gLQlqcGVnLT5kZWNf dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOw0KPiA+IC0JaWYgKCFqcGVnLT5kZWNfdmRldikg ew0KPiA+ICsJanBlZy0+dmZkX2pwZWcgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsNCj4gDQo+IFdo eSAidmZkIj8gInZkZXYiIHNvdW5kcyBtb3JlIGxpa2UgdmlkZW9fZGV2aWNlLg0KZG9uZS4NCj4g DQo+IEFsc28sIHRoZSAianBlZyIgc3VmZml4IGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWVkZWQsIGFz IHRoZSBwYXJlbnQgc3RydWN0IGlzDQo+IHR5cGljYWxseSBjYWxsZWQgImpwZWciLg0KZG9uZS4N Cj4gDQo+ID4gKwlpZiAoIWpwZWctPnZmZF9qcGVnKSB7DQo+ID4gIAkJcmV0ID0gLUVOT01FTTsN Cj4gPiAtCQlnb3RvIGVycl9kZWNfdmRldl9hbGxvYzsNCj4gPiArCQlnb3RvIGVycl92ZmRfanBl Z19hbGxvYzsNCj4gPiAgCX0NCj4gPiAtCXNucHJpbnRmKGpwZWctPmRlY192ZGV2LT5uYW1lLCBz aXplb2YoanBlZy0+ZGVjX3ZkZXYtPm5hbWUpLA0KPiA+IC0JCSAiJXMtZGVjIiwgTVRLX0pQRUdf TkFNRSk7DQo+ID4gLQlqcGVnLT5kZWNfdmRldi0+Zm9wcyA9ICZtdGtfanBlZ19mb3BzOw0KPiA+ IC0JanBlZy0+ZGVjX3ZkZXYtPmlvY3RsX29wcyA9ICZtdGtfanBlZ19pb2N0bF9vcHM7DQo+ID4g LQlqcGVnLT5kZWNfdmRldi0+bWlub3IgPSAtMTsNCj4gPiAtCWpwZWctPmRlY192ZGV2LT5yZWxl YXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7DQo+ID4gLQlqcGVnLT5kZWNfdmRldi0+bG9jayA9 ICZqcGVnLT5sb2NrOw0KPiA+IC0JanBlZy0+ZGVjX3ZkZXYtPnY0bDJfZGV2ID0gJmpwZWctPnY0 bDJfZGV2Ow0KPiA+IC0JanBlZy0+ZGVjX3ZkZXYtPnZmbF9kaXIgPSBWRkxfRElSX00yTTsNCj4g PiAtCWpwZWctPmRlY192ZGV2LT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1NUUkVBTUlORyB8DQo+ ID4gKwlzbnByaW50ZihqcGVnLT52ZmRfanBlZy0+bmFtZSwgc2l6ZW9mKGpwZWctPnZmZF9qcGVn LT5uYW1lKSwNCj4gPiArCQkgIiVzLSVzIiwgTVRLX0pQRUdfTkFNRSwNCj4gPiArCQkganBlZy0+ bW9kZSA9PSBNVEtfSlBFR19FTkMgPyAiZW5jIiA6ICJkZWMiKTsNCj4gPiArCWpwZWctPnZmZF9q cGVnLT5mb3BzID0gJm10a19qcGVnX2ZvcHM7DQo+ID4gKwlqcGVnLT52ZmRfanBlZy0+aW9jdGxf b3BzID0gJm10a19qcGVnX2lvY3RsX29wczsNCj4gPiArCWpwZWctPnZmZF9qcGVnLT5taW5vciA9 IC0xOw0KPiA+ICsJanBlZy0+dmZkX2pwZWctPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFz ZTsNCj4gPiArCWpwZWctPnZmZF9qcGVnLT5sb2NrID0gJmpwZWctPmxvY2s7DQo+ID4gKwlqcGVn LT52ZmRfanBlZy0+djRsMl9kZXYgPSAmanBlZy0+djRsMl9kZXY7DQo+ID4gKwlqcGVnLT52ZmRf anBlZy0+dmZsX2RpciA9IFZGTF9ESVJfTTJNOw0KPiA+ICsJanBlZy0+dmZkX2pwZWctPmRldmlj ZV9jYXBzID0gVjRMMl9DQVBfU1RSRUFNSU5HIHwNCj4gPiAgCQkJCSAgICAgIFY0TDJfQ0FQX1ZJ REVPX00yTV9NUExBTkU7DQo+ID4gIA0KPiA+IC0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNl KGpwZWctPmRlY192ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAzKTsNCj4gPiArCXJldCA9IHZpZGVv X3JlZ2lzdGVyX2RldmljZShqcGVnLT52ZmRfanBlZywgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOw0K PiANCj4gRllJIHRoZSB0eXBlIGNoYW5nZWQgdG8gVkZMX1RZUEVfVklERU8gcmVjZW50bHkuDQpJ IGNoYW5nZWQgVkZMX1RZUEVfR1JBQkJFUiB0byBWRkxfVFlQRV9WSURFTyxidXQgYnVpbGRlZCBm YWlsLg0KPiA+ICAJaWYgKHJldCkgew0KPiA+ICAJCXY0bDJfZXJyKCZqcGVnLT52NGwyX2Rldiwg IkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOw0KPiA+IC0JCWdvdG8gZXJyX2Rl Y192ZGV2X3JlZ2lzdGVyOw0KPiA+ICsJCWdvdG8gZXJyX3ZmZF9qcGVnX3JlZ2lzdGVyOw0KPiA+ ICAJfQ0KPiA+ICANCj4gPiAtCXZpZGVvX3NldF9kcnZkYXRhKGpwZWctPmRlY192ZGV2LCBqcGVn KTsNCj4gPiArCXZpZGVvX3NldF9kcnZkYXRhKGpwZWctPnZmZF9qcGVnLCBqcGVnKTsNCj4gPiAg CXY0bDJfaW5mbygmanBlZy0+djRsMl9kZXYsDQo+ID4gLQkJICAiZGVjb2RlciBkZXZpY2UgcmVn aXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQgKCVkLCVkKVxuIiwNCj4gPiAtCQkgIGpwZWctPmRlY192 ZGV2LT5udW0sIFZJREVPX01BSk9SLCBqcGVnLT5kZWNfdmRldi0+bWlub3IpOw0KPiA+ICsJCSAg ImpwZWcgZGV2aWNlICVkIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkICglZCwlZClcbiIsDQo+ IA0KPiBIZXJlIGl0IHdvdWxkIGJlIGFjdHVhbGx5IHVzZWZ1bCB0byBzcGVjaWFsIGNhc2UgdGhl IGVuY29kZXIgYW5kIGRlY29kZXIsDQo+IGJlY2F1c2UgaXQgd291bGQgYmUgZWFzaWVyIGZvciB0 aGUgdXNlciB0byBrbm93IHdoaWNoIGRldmljZSBpcyB3aGljaC4NCj4gDQo+ID4gKwkJICBqcGVn LT5tb2RlLCBqcGVnLT52ZmRfanBlZy0+bnVtLCBWSURFT19NQUpPUiwNCj4gPiArCQkgIGpwZWct PnZmZF9qcGVnLT5taW5vcik7DQo+ID4gIA0KPiA+ICAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwganBlZyk7DQo+ID4gIA0KPiA+IEBAIC0xMTQ0LDEwICsxNTE1LDEwIEBAIHN0YXRpYyBpbnQg bXRrX2pwZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgDQo+ID4g IAlyZXR1cm4gMDsNCj4gPiAgDQo+ID4gLWVycl9kZWNfdmRldl9yZWdpc3RlcjoNCj4gPiAtCXZp ZGVvX2RldmljZV9yZWxlYXNlKGpwZWctPmRlY192ZGV2KTsNCj4gPiArZXJyX3ZmZF9qcGVnX3Jl Z2lzdGVyOg0KPiA+ICsJdmlkZW9fZGV2aWNlX3JlbGVhc2UoanBlZy0+dmZkX2pwZWcpOw0KPiA+ ICANCj4gPiAtZXJyX2RlY192ZGV2X2FsbG9jOg0KPiA+ICtlcnJfdmZkX2pwZWdfYWxsb2M6DQo+ ID4gIAl2NGwyX20ybV9yZWxlYXNlKGpwZWctPm0ybV9kZXYpOw0KPiA+ICANCj4gPiAgZXJyX20y bV9pbml0Og0KPiA+IEBAIC0xMTY3LDggKzE1MzgsOCBAQCBzdGF0aWMgaW50IG10a19qcGVnX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJc3RydWN0IG10a19qcGVn X2RldiAqanBlZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICANCj4gPiAgCXBt X3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4gPiAtCXZpZGVvX3VucmVnaXN0ZXJfZGV2 aWNlKGpwZWctPmRlY192ZGV2KTsNCj4gPiAtCXZpZGVvX2RldmljZV9yZWxlYXNlKGpwZWctPmRl Y192ZGV2KTsNCj4gPiArCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGpwZWctPnZmZF9qcGVnKTsN Cj4gPiArCXZpZGVvX2RldmljZV9yZWxlYXNlKGpwZWctPnZmZF9qcGVnKTsNCj4gPiAgCXY0bDJf bTJtX3JlbGVhc2UoanBlZy0+bTJtX2Rldik7DQo+ID4gIAl2NGwyX2RldmljZV91bnJlZ2lzdGVy KCZqcGVnLT52NGwyX2Rldik7DQo+ID4gIA0KPiA+IEBAIC0xMTc5LDcgKzE1NTAsMTEgQEAgc3Rh dGljIF9fbWF5YmVfdW51c2VkIGludCBtdGtfanBlZ19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2Ug KmRldikNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOw0KPiA+ICANCj4gPiAtCW10a19qcGVnX2RlY19yZXNldChqcGVnLT5kZWNf cmVnX2Jhc2UpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUgPT0gTVRLX0pQRUdfRU5DKQ0KPiA+ICsJ CW10a19qcGVnX2VuY19yZXNldChqcGVnLT5yZWdfYmFzZSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJ bXRrX2pwZWdfZGVjX3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsNCj4gDQo+IElzIHRoZSByZXNldCBo ZXJlIHJlYWxseSBuZWNlc3Nhcnk/IFdlJ3JlIGdvaW5nIHRvIGN1dCBkb3duIHRoZSBwb3dlciB0 bw0KPiB0aGUgSVAgYmxvY2sgc29tZSB0aW1lIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLg0K SSBoYXZlIGRlbGV0ZWQgaXQgLg0KPiANCj4gPiArDQo+ID4gIAltdGtfanBlZ19jbGtfb2ZmKGpw ZWcpOw0KPiA+ICANCj4gPiAgCXJldHVybiAwOw0KPiA+IEBAIC0xMTkwLDcgKzE1NjUsMTAgQEAg c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtdGtfanBlZ19wbV9yZXN1bWUoc3RydWN0IGRldmlj ZSAqZGV2KQ0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOw0KPiA+ICANCj4gPiAgCW10a19qcGVnX2Nsa19vbihqcGVnKTsNCj4gPiAtCW10a19q cGVnX2RlY19yZXNldChqcGVnLT5kZWNfcmVnX2Jhc2UpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUg PT0gTVRLX0pQRUdfRU5DKQ0KPiA+ICsJCW10a19qcGVnX2VuY19yZXNldChqcGVnLT5yZWdfYmFz ZSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJbXRrX2pwZWdfZGVjX3Jlc2V0KGpwZWctPnJlZ19iYXNl KTsNCj4gPiAgDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiANCj4gVGhlIGNvZGUgaXMgbm90 IHZpc2libGUgaW4gdGhpcyBwYXRjaCwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3lz dGVtDQo+IFBNIG9wcyBkb2Vzbid0IGxvb2sgY29ycmVjdC4NCj4gDQo+IAlzdGF0aWMgX19tYXli ZV91bnVzZWQgaW50IG10a19qcGVnX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiAJew0K PiAJCWludCByZXQ7DQo+IAkNCj4gCQlpZiAocG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkNCj4g CQkJcmV0dXJuIDA7DQo+IAkNCj4gCQlyZXQgPSBtdGtfanBlZ19wbV9zdXNwZW5kKGRldik7DQo+ IA0KPiBUaGUgaGFyZHdhcmUgbWF5IGJlIGN1cnJlbnRseSBwcm9jZXNzaW5nIGEgZnJhbWUuIFdv dWxkbid0IHRoaXMgY2F1c2UNCj4gaXNzdWVzPyBBbHNvLCB3b3VsZG4ndCB0aGlzIHJhY2Ugd2l0 aCB0aGUgaW50ZXJydXB0IGhhbmRsZXI/DQpZZXMuSSBoYXZlIGFkZGVkIGxvY2sgbWVjaGFuaXNt cyBpbiB0aGlzIGZ1bmN0aW9uIGFuZCBpcnEgaGFuZGxlcg0KZnVuY3Rpb24gdG8gYXZvaWQgdGhp cy4NCj4gDQo+IE5vcm1hbGx5IG9uZSB3b3VsZCBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBzY2hl ZHVsaW5nIG5leHQgZnJhbWVzIGhlcmUsDQo+IHdhaXQgZm9yIHRoZSBkcml2ZXIgdG8gZmluaXNo IHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgZnJhbWUgYW5kIG9ubHkgdGhlbg0KPiBzdXNwZW5kLg0K PiANCj4gCQlyZXR1cm4gcmV0Ow0KPiAJfQ0KPiAJDQo+IAlzdGF0aWMgX19tYXliZV91bnVzZWQg aW50IG10a19qcGVnX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+IAl7DQo+IAkJaW50IHJl dDsNCj4gCQ0KPiAJCWlmIChwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQ0KPiAJCQlyZXR1cm4g MDsNCj4gCQ0KPiAJCXJldCA9IG10a19qcGVnX3BtX3Jlc3VtZShkZXYpOw0KPiANCj4gSGVyZSBv bmUgbm9ybWFsbHkgbmVlZHMgdG8gdW5ibG9jayB0aGUgZHJpdmVyIGZyb20gc2NoZWR1bGluZyBu ZXh0IGZyYW1lcy4NCj4gCQ0KPiAJCXJldHVybiByZXQ7DQo+IAl9DQo+IA0KPiA+IEBAIC0xMjI2 LDExICsxNjA0LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtdGtfanBlZ19w bV9vcHMgPSB7DQo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19qcGVn X21hdGNoW10gPSB7DQo+ID4gIAl7DQo+ID4gIAkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4 MTczLWpwZ2RlYyIsDQo+ID4gLQkJLmRhdGEgICAgICAgPSBOVUxMLA0KPiA+ICsJCS5kYXRhICAg ICAgID0gKHZvaWQgKilNVEtfSlBFR19ERUMsDQo+ID4gIAl9LA0KPiA+ICAJew0KPiA+ICAJCS5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS1qcGdkZWMiLA0KPiA+IC0JCS5kYXRhICAgICAg ID0gTlVMTCwNCj4gPiArCQkuZGF0YSAgICAgICA9ICh2b2lkICopTVRLX0pQRUdfREVDLA0KPiA+ ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstanBnZW5j IiwNCj4gPiArCQkuZGF0YSAgICAgICA9ICh2b2lkICopTVRLX0pQRUdfRU5DLA0KPiA+ICAJfSwN Cj4gPiAgCXt9LA0KPiA+ICB9Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL210ay1qcGVnL210a19qcGVnX2NvcmUuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRr LWpwZWcvbXRrX2pwZWdfY29yZS5oDQo+ID4gaW5kZXggOWJiZDYxNWIxMDY3Li4wMmEzODdkOGJl NWQgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtf anBlZ19jb3JlLmgNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210 a19qcGVnX2NvcmUuaA0KPiA+IEBAIC0zLDYgKzMsNyBAQA0KPiA+ICAgKiBDb3B5cmlnaHQgKGMp IDIwMTYgTWVkaWFUZWsgSW5jLg0KPiA+ICAgKiBBdXRob3I6IE1pbmcgSHNpdSBUc2FpIDxtaW5n aHNpdS50c2FpQG1lZGlhdGVrLmNvbT4NCj4gPiAgICogICAgICAgICBSaWNrIENoYW5nIDxyaWNr LmNoYW5nQG1lZGlhdGVrLmNvbT4NCj4gPiArICogICAgICAgICBYaWEgSmlhbmcgPHhpYS5qaWFu Z0BtZWRpYXRlay5jb20+DQo+ID4gICAqLw0KPiA+ICANCj4gPiAgI2lmbmRlZiBfTVRLX0pQRUdf Q09SRV9IDQo+ID4gQEAgLTE5LDE2ICsyMCwxOSBAQA0KPiA+ICANCj4gPiAgI2RlZmluZSBNVEtf SlBFR19GTVRfRkxBR19ERUNfT1VUUFVUCUJJVCgwKQ0KPiA+ICAjZGVmaW5lIE1US19KUEVHX0ZN VF9GTEFHX0RFQ19DQVBUVVJFCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIE1US19KUEVHX0ZNVF9GTEFH X0VOQ19PVVRQVVQJQklUKDIpDQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfRk1UX0ZMQUdfRU5DX0NB UFRVUkUJQklUKDMpDQo+ID4gIA0KPiA+ICAjZGVmaW5lIE1US19KUEVHX0ZNVF9UWVBFX09VVFBV VAkxDQo+ID4gICNkZWZpbmUgTVRLX0pQRUdfRk1UX1RZUEVfQ0FQVFVSRQkyDQo+ID4gIA0KPiA+ ICAjZGVmaW5lIE1US19KUEVHX01JTl9XSURUSAkzMlUNCj4gPiAgI2RlZmluZSBNVEtfSlBFR19N SU5fSEVJR0hUCTMyVQ0KPiA+IC0jZGVmaW5lIE1US19KUEVHX01BWF9XSURUSAk4MTkyVQ0KPiA+ IC0jZGVmaW5lIE1US19KUEVHX01BWF9IRUlHSFQJODE5MlUNCj4gPiArI2RlZmluZSBNVEtfSlBF R19NQVhfV0lEVEgJNjU1MzVVDQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfTUFYX0hFSUdIVAk2NTUz NVUNCj4gDQo+IElzIHRoaXMgY29ycmVjdCBldmVuIGZvciB0aGUgZGVjb2Rlcj8NCnllcy4NCj4g DQo+ID4gIA0KPiA+ICAjZGVmaW5lIE1US19KUEVHX0RFRkFVTFRfU0laRUlNQUdFCSgxICogMTAy NCAqIDEwMjQpDQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfREVGQVVMVF9FWElGX1NJWkUJKDY0ICog MTAyNCkNCj4gPiAgDQo+ID4gIC8qKg0KPiA+ICAgKiBlbnVtIG10a19qcGVnX2N0eF9zdGF0ZSAt IGNvbnRleCBzdGF0ZSBvZiBqcGVnDQo+ID4gQEAgLTM5LDYgKzQzLDE0IEBAIGVudW0gbXRrX2pw ZWdfY3R4X3N0YXRlIHsNCj4gPiAgCU1US19KUEVHX1NPVVJDRV9DSEFOR0UsDQo+ID4gIH07DQo+ ID4gIA0KPiA+ICsvKioNCj4gPiArICogZW51bSBtdGtfanBlZ19tb2RlIC0gbW9kZSBvZiBqcGVn DQo+ID4gKyAqLw0KPiA+ICtlbnVtIG10a19qcGVnX21vZGUgew0KPiA+ICsJTVRLX0pQRUdfRU5D LA0KPiA+ICsJTVRLX0pQRUdfREVDLA0KPiA+ICt9Ow0KPiA+ICsNCj4gDQo+IFBlcmhhcHMgYm9v bCBpc19lbmNvZGVyIGluc3RlZCBvZiBhbiBlbnVtIGNvdWxkIHNpbXBsaWZ5IHRoZSBjb2RlIGEg Yml0Pw0KSSBoYXZlIGRlbGV0ZWQgdGhpcy4NCj4gDQo+ID4gIC8qKg0KPiA+ICAgKiBzdHJ1Y3Qg bXRfanBlZyAtIEpQRUcgSVAgYWJzdHJhY3Rpb24NCj4gPiAgICogQGxvY2s6CQl0aGUgbXV0ZXgg cHJvdGVjdGluZyB0aGlzIHN0cnVjdHVyZQ0KPiA+IEBAIC00OCwxMSArNjAsMTIgQEAgZW51bSBt dGtfanBlZ19jdHhfc3RhdGUgew0KPiA+ICAgKiBAdjRsMl9kZXY6CQl2NGwyIGRldmljZSBmb3Ig bWVtMm1lbSBtb2RlDQo+ID4gICAqIEBtMm1fZGV2OgkJdjRsMiBtZW0ybWVtIGRldmljZSBkYXRh DQo+ID4gICAqIEBhbGxvY19jdHg6CQl2aWRlb2J1ZjIgbWVtb3J5IGFsbG9jYXRvcidzIGNvbnRl eHQNCj4gPiAtICogQGRlY192ZGV2OgkJdmlkZW8gZGV2aWNlIG5vZGUgZm9yIGRlY29kZXIgbWVt Mm1lbSBtb2RlDQo+ID4gLSAqIEBkZWNfcmVnX2Jhc2U6CUpQRUcgcmVnaXN0ZXJzIG1hcHBpbmcN Cj4gPiAtICogQGNsa19qZGVjOgkJSlBFRyBodyB3b3JraW5nIGNsb2NrDQo+ID4gLSAqIEBjbGtf amRlY19zbWk6CUpQRUcgU01JIGJ1cyBjbG9jaw0KPiA+ICsgKiBAdmZkX2pwZWc6CQl2aWRlbyBk ZXZpY2Ugbm9kZSBmb3IganBlZyBtZW0ybWVtIG1vZGUNCj4gPiArICogQHJlZ19iYXNlOgkJSlBF RyByZWdpc3RlcnMgbWFwcGluZw0KPiA+ICsgKiBAY2xrX2pwZWc6CQlKUEVHIGh3IHdvcmtpbmcg Y2xvY2sNCj4gPiArICogQGNsa19qcGVnX3NtaToJSlBFRyBTTUkgYnVzIGNsb2NrDQo+ID4gICAq IEBsYXJiOgkJU01JIGRldmljZQ0KPiA+ICsgKiBAbW9kZToJCWNvbXByZXNzaW9uIChlbmNvZGUp IG9wZXJhdGlvbiBvciBkZWNvbXByZXNzaW9uIChkZWNvZGUpDQo+ID4gICAqLw0KPiA+ICBzdHJ1 Y3QgbXRrX2pwZWdfZGV2IHsNCj4gPiAgCXN0cnVjdCBtdXRleAkJbG9jazsNCj4gPiBAQCAtNjIs MTEgKzc1LDEyIEBAIHN0cnVjdCBtdGtfanBlZ19kZXYgew0KPiA+ICAJc3RydWN0IHY0bDJfZGV2 aWNlCXY0bDJfZGV2Ow0KPiA+ICAJc3RydWN0IHY0bDJfbTJtX2RldgkqbTJtX2RldjsNCj4gPiAg CXZvaWQJCQkqYWxsb2NfY3R4Ow0KPiA+IC0Jc3RydWN0IHZpZGVvX2RldmljZQkqZGVjX3ZkZXY7 DQo+ID4gLQl2b2lkIF9faW9tZW0JCSpkZWNfcmVnX2Jhc2U7DQo+ID4gLQlzdHJ1Y3QgY2xrCQkq Y2xrX2pkZWM7DQo+ID4gLQlzdHJ1Y3QgY2xrCQkqY2xrX2pkZWNfc21pOw0KPiA+ICsJc3RydWN0 IHZpZGVvX2RldmljZQkqdmZkX2pwZWc7DQo+ID4gKwl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsN Cj4gPiArCXN0cnVjdCBjbGsJCSpjbGtfanBlZzsNCj4gPiArCXN0cnVjdCBjbGsJCSpjbGtfanBl Z19zbWk7DQo+ID4gIAlzdHJ1Y3QgZGV2aWNlCQkqbGFyYjsNCj4gPiArCWVudW0gbXRrX2pwZWdf bW9kZQltb2RlOw0KPiA+ICB9Ow0KPiA+ICANCj4gPiAgLyoqDQo+ID4gQEAgLTExMyw2ICsxMjcs NyBAQCBzdHJ1Y3QgbXRrX2pwZWdfcV9kYXRhIHsNCj4gPiAgICogQGNhcF9xOgkJZGVzdGluYXRp b24gKGNhcHR1cmUpIHF1ZXVlIHF1ZXVlIGluZm9ybWF0aW9uDQo+ID4gICAqIEBmaDoJCQlWNEwy IGZpbGUgaGFuZGxlDQo+ID4gICAqIEBzdGF0ZToJCXN0YXRlIG9mIHRoZSBjb250ZXh0DQo+ID4g KyAqIEBjdHJsX2hkbDoJCWNvbnRyb2xzIGhhbmRsZXINCj4gPiAgICogQGNvbG9yc3BhY2U6IGVu dW0gdjRsMl9jb2xvcnNwYWNlOyBzdXBwbGVtZW50YWwgdG8gcGl4ZWxmb3JtYXQNCj4gPiAgICog QHljYmNyX2VuYzogZW51bSB2NGwyX3ljYmNyX2VuY29kaW5nLCBZJ0NiQ3IgZW5jb2RpbmcNCj4g PiAgICogQHF1YW50aXphdGlvbjogZW51bSB2NGwyX3F1YW50aXphdGlvbiwgY29sb3JzcGFjZSBx dWFudGl6YXRpb24NCj4gPiBAQCAtMTI0LDYgKzEzOSwxMCBAQCBzdHJ1Y3QgbXRrX2pwZWdfY3R4 IHsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19xX2RhdGEJCWNhcF9xOw0KPiA+ICAJc3RydWN0IHY0 bDJfZmgJCQlmaDsNCj4gPiAgCWVudW0gbXRrX2pwZWdfY3R4X3N0YXRlCQlzdGF0ZTsNCj4gPiAr CXU4CQkJCWVuYWJsZV9leGlmOw0KPiANCj4gYm9vbD8NCnllcy4NCj4gDQo+ID4gKwl1OAkJCQll bmNfcXVhbGl0eTsNCj4gPiArCXU4CQkJCXJlc3RhcnRfaW50ZXJ2YWw7DQo+ID4gKwlzdHJ1Y3Qg djRsMl9jdHJsX2hhbmRsZXIJY3RybF9oZGw7DQo+ID4gIA0KPiA+ICAJZW51bSB2NGwyX2NvbG9y c3BhY2UgY29sb3JzcGFjZTsNCj4gPiAgCWVudW0gdjRsMl95Y2Jjcl9lbmNvZGluZyB5Y2Jjcl9l bmM7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRr X2pwZWdfZGVjX2h3LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVn X2RlY19ody5oDQo+ID4gaW5kZXggMWNjMzdkYmZjOGU3Li5jZTI2M2RiNWYzMGEgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19kZWNfaHcu aA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfZGVj X2h3LmgNCj4gPiBAQCAtMywxMCArMywxMSBAQA0KPiA+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYg TWVkaWFUZWsgSW5jLg0KPiA+ICAgKiBBdXRob3I6IE1pbmcgSHNpdSBUc2FpIDxtaW5naHNpdS50 c2FpQG1lZGlhdGVrLmNvbT4NCj4gPiAgICogICAgICAgICBSaWNrIENoYW5nIDxyaWNrLmNoYW5n QG1lZGlhdGVrLmNvbT4NCj4gPiArICogICAgICAgICBYaWEgSmlhbmcgPHhpYS5qaWFuZ0BtZWRp YXRlay5jb20+DQo+ID4gICAqLw0KPiA+ICANCj4gPiAtI2lmbmRlZiBfTVRLX0pQRUdfSFdfSA0K PiA+IC0jZGVmaW5lIF9NVEtfSlBFR19IV19IDQo+ID4gKyNpZm5kZWYgX01US19KUEVHX0RFQ19I V19IDQo+ID4gKyNkZWZpbmUgX01US19KUEVHX0RFQ19IV19IDQo+ID4gIA0KPiA+ICAjaW5jbHVk ZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4NCj4gPiAgDQo+ID4gQEAgLTc1LDQgKzc2LDQgQEAg dm9pZCBtdGtfanBlZ19kZWNfc2V0X2NvbmZpZyh2b2lkIF9faW9tZW0gKmJhc2UsDQo+ID4gIHZv aWQgbXRrX2pwZWdfZGVjX3Jlc2V0KHZvaWQgX19pb21lbSAqZGVjX3JlZ19iYXNlKTsNCj4gPiAg dm9pZCBtdGtfanBlZ19kZWNfc3RhcnQodm9pZCBfX2lvbWVtICpkZWNfcmVnX2Jhc2UpOw0KPiA+ ICANCj4gPiAtI2VuZGlmIC8qIF9NVEtfSlBFR19IV19IICovDQo+ID4gKyNlbmRpZiAvKiBfTVRL X0pQRUdfREVDX0hXX0ggKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9tdGstanBlZy9tdGtfanBlZ19lbmNfaHcuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRr LWpwZWcvbXRrX2pwZWdfZW5jX2h3LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uZGEzZTdhODNhODBhDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsr KyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfZW5jX2h3LmMNCj4g PiBAQCAtMCwwICsxLDI3MyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5DQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJ bmMuDQo+ID4gKyAqIEF1dGhvcjogWGlhIEppYW5nIDx4aWEuamlhbmdAbWVkaWF0ZWsuY29tPg0K PiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1 ZjItY29yZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm10a19qcGVnX2VuY19ody5oIg0KPiA+ ICsNCj4gPiArc3RhdGljIHN0cnVjdCBtdGtfanBlZ19lbmNfcWx0IG10a19qcGVnX2VuY19xdWFs aXR5W10gPSB7DQo+IA0KPiBzdGF0aWMgY29uc3Q/DQpkb25lLg0KPiANCj4gPiArCXsNCj4gPiAr CQkucXVhbGl0eV9wYXJhbQkJPSA5NywNCj4gPiArCQkuaGFyZHdhcmVfdmFsdWUJPSBKUEVHX0VO Q19RVUFMSVRZX1E5NywNCj4gPiArCX0sDQo+ID4gKwl7DQo+ID4gKwkJLnF1YWxpdHlfcGFyYW0J CT0gOTUsDQo+ID4gKwkJLmhhcmR3YXJlX3ZhbHVlCT0gSlBFR19FTkNfUVVBTElUWV9ROTUsDQo+ ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5xdWFsaXR5X3BhcmFtCQk9IDkyLA0KPiA+ICsJCS5o YXJkd2FyZV92YWx1ZQk9IEpQRUdfRU5DX1FVQUxJVFlfUTkyLA0KPiA+ICsJfSwNCj4gPiArCXsN Cj4gPiArCQkucXVhbGl0eV9wYXJhbQkJPSA5MCwNCj4gPiArCQkuaGFyZHdhcmVfdmFsdWUJPSBK UEVHX0VOQ19RVUFMSVRZX1E5MCwNCj4gPiArCX0sDQo+ID4gKwl7DQo+ID4gKwkJLnF1YWxpdHlf cGFyYW0JCT0gODcsDQo+ID4gKwkJLmhhcmR3YXJlX3ZhbHVlCT0gSlBFR19FTkNfUVVBTElUWV9R ODcsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5xdWFsaXR5X3BhcmFtCQk9IDg0LA0KPiA+ ICsJCS5oYXJkd2FyZV92YWx1ZQk9IEpQRUdfRU5DX1FVQUxJVFlfUTg0LA0KPiA+ICsJfSwNCj4g PiArCXsNCj4gPiArCQkucXVhbGl0eV9wYXJhbQkJPSA4MiwNCj4gPiArCQkuaGFyZHdhcmVfdmFs dWUJPSBKUEVHX0VOQ19RVUFMSVRZX1E4MiwNCj4gPiArCX0sDQo+ID4gKwl7DQo+ID4gKwkJLnF1 YWxpdHlfcGFyYW0JCT0gODAsDQo+ID4gKwkJLmhhcmR3YXJlX3ZhbHVlCT0gSlBFR19FTkNfUVVB TElUWV9RODAsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5xdWFsaXR5X3BhcmFtCQk9IDc0 LA0KPiA+ICsJCS5oYXJkd2FyZV92YWx1ZQk9IEpQRUdfRU5DX1FVQUxJVFlfUTc0LA0KPiA+ICsJ fSwNCj4gPiArCXsNCj4gPiArCQkucXVhbGl0eV9wYXJhbQkJPSA2OCwNCj4gPiArCQkuaGFyZHdh cmVfdmFsdWUJPSBKUEVHX0VOQ19RVUFMSVRZX1E2OCwNCj4gPiArCX0sDQo+ID4gKwl7DQo+ID4g KwkJLnF1YWxpdHlfcGFyYW0JCT0gNjQsDQo+ID4gKwkJLmhhcmR3YXJlX3ZhbHVlCT0gSlBFR19F TkNfUVVBTElUWV9RNjQsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5xdWFsaXR5X3BhcmFt CQk9IDYwLA0KPiA+ICsJCS5oYXJkd2FyZV92YWx1ZQk9IEpQRUdfRU5DX1FVQUxJVFlfUTYwLA0K PiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkucXVhbGl0eV9wYXJhbQkJPSA0OCwNCj4gPiArCQku aGFyZHdhcmVfdmFsdWUJPSBKUEVHX0VOQ19RVUFMSVRZX1E0OCwNCj4gPiArCX0sDQo+ID4gKwl7 DQo+ID4gKwkJLnF1YWxpdHlfcGFyYW0JCT0gMzksDQo+ID4gKwkJLmhhcmR3YXJlX3ZhbHVlCT0g SlBFR19FTkNfUVVBTElUWV9RMzksDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5xdWFsaXR5 X3BhcmFtCQk9IDM0LA0KPiA+ICsJCS5oYXJkd2FyZV92YWx1ZQk9IEpQRUdfRU5DX1FVQUxJVFlf UTM0LA0KPiA+ICsJfSwNCj4gPiArfTsNCj4gDQo+IG5pdDogUGVyaGFwcyB3ZSBjb3VsZCBjb25k ZW5zZSB0aGlzIGEgYml0PyBFLmcuDQo+IA0KPiBbLi4uXSA9IHsNCj4gCXsgLnF1YWxpdHkgPSBY WCwgLmh3ID0gWVkgfS4NCj4gCS8vIC4uLg0KPiB9Ow0KZG9uZS4NCj4gDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIE1US19KUEVHX0VOQ19OVU1fUVVBTElUWSBBUlJBWV9TSVpFKG10a19qcGVnX2VuY19x dWFsaXR5KQ0KPiANCj4gSSB0aGluayBqdXN0IHVzaW5nIEFSUkFZX1NJWkUoKSBkaXJlY3RseSB3 b3VsZCBtYWtlIHRoZSBjb2RlIGNsZWFyZXIgKGFuZA0KPiBpdCdzIHNpbWlsYXIgbGVuZ3RoIHRv IHRoZSBtYWNybykuDQpkb25lLg0KPiANCj4gPiArDQo+ID4gK3ZvaWQgbXRrX2pwZWdfZW5jX3Jl c2V0KHZvaWQgX19pb21lbSAqYmFzZSkNCj4gPiArew0KPiA+ICsJd3JpdGVsKDB4MDAsIGJhc2Ug KyBKUEVHX0VOQ19SU1RCKTsNCj4gPiArCXdyaXRlbChKUEVHX0VOQ19SRVNFVF9CSVQsIGJhc2Ug KyBKUEVHX0VOQ19SU1RCKTsNCj4gPiArCXdyaXRlbCgweDAwLCBiYXNlICsgSlBFR19FTkNfQ09E RUNfU0VMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdTMyIG10a19qcGVnX2VuY19nZXRfaW50X3N0 YXR1cyh2b2lkIF9faW9tZW0gKmJhc2UpDQo+ID4gK3sNCj4gPiArCXUzMiByZXQ7DQo+ID4gKw0K PiA+ICsJcmV0ID0gcmVhZGwoYmFzZSArIEpQRUdfRU5DX0lOVF9TVFMpICYNCj4gPiArCQkgICAg SlBFR19FTkNfSU5UX1NUQVRVU19NQVNLX0FMTElSUTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJ d3JpdGVsKDAsIGJhc2UgKyBKUEVHX0VOQ19JTlRfU1RTKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g cmV0Ow0KPiA+ICt9DQo+IA0KPiBEb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBhIGZ1bmN0aW9u IGZvciB3aGF0IGlzIGVzc2VudGlhbGx5IGp1c3QgMiBsaW5lcz8NCj4gQWxzbywgdGhlIG5hbWUg aXMgbWlzbGVhZGluZywgYXMgdGhlIGZ1bmN0aW9uIG5vdCBvbmx5IGdldHMgYnV0IGFsc28NCj4g Y2xlYXJzLg0KTWFrZSBhbGwgaHcgcmVnaXN0ZXIgc2V0dGluZyBpbiBtdGtfanBlZ19lbmNfaHcu YyBpcyBvbmUgcGFydCBvZiBjdXJyZW50DQphcmNoaXRlY3R1cmUuDQpJIGhhdmUgY2hhbmdlZCB0 aGUgZnVuY3Rpb24gbmFtZSB0bw0KbXRrX2pwZWdfZW5jX2dldF9hbmRfY2xlYXJfaW50X3N0YXR1 cy4NCj4gDQo+ID4gKw0KPiA+ICt1MzIgbXRrX2pwZWdfZW5jX2dldF9maWxlX3NpemUodm9pZCBf X2lvbWVtICpiYXNlKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gcmVhZGwoYmFzZSArIEpQRUdfRU5D X0RNQV9BRERSMCkgLQ0KPiA+ICsJICAgICAgIHJlYWRsKGJhc2UgKyBKUEVHX0VOQ19EU1RfQURE UjApOw0KPiA+ICt9DQo+IA0KPiBUaGlzIGlzIGNhbGxlZCBvbmNlIGZyb20gdGhlIGludGVycnVw dCBoYW5kbGVyLCB3aGljaCBpcyBoYXJkd2FyZS1zcGVjaWZpYw0KPiBhbnl3YXksIHNvIG9uZSB3 b3VsZCBub3JtYWxseSBqdXN0IHJlYWQgdGhlIHJlZ2lzdGVycyBkaXJlY3RseSBmcm9tIHRoZXJl Lg0KTWFrZSBhbGwgaHcgcmVnaXN0ZXIgc2V0dGluZyBpbiBtdGtfanBlZ19lbmNfaHcuYyBpcyBv bmUgcGFydCBvZiBjdXJyZW50DQphcmNoaXRlY3R1cmUuDQo+IA0KPiA+ICsNCj4gPiArdTMyIG10 a19qcGVnX2VuY19lbnVtX3Jlc3VsdCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBpcnFfc3RhdHVz KQ0KPiA+ICt7DQo+ID4gKwlpZiAoaXJxX3N0YXR1cyAmIEpQRUdfRU5DX0lOVF9TVEFUVVNfRE9O RSkNCj4gPiArCQlyZXR1cm4gTVRLX0pQRUdfRU5DX1JFU1VMVF9ET05FOw0KPiA+ICsJZWxzZSBp ZiAoaXJxX3N0YXR1cyAmIEpQRUdfRU5DX0lOVF9TVEFUVVNfU1RBTEwpDQo+ID4gKwkJcmV0dXJu IE1US19KUEVHX0VOQ19SRVNVTFRfU1RBTEw7DQo+ID4gKwllbHNlIGlmIChpcnFfc3RhdHVzICYg SlBFR19FTkNfSU5UX1NUQVRVU19WQ09ERUNfSVJRKQ0KPiA+ICsJCXJldHVybiBNVEtfSlBFR19F TkNfUkVTVUxUX1ZDT0RFQ19JUlE7DQo+ID4gKwlyZXR1cm4gTVRLX0pQRUdfRU5DX1JFU1VMVF9F UlJPUl9VTktOT1dOOw0KPiA+ICt9DQo+IA0KPiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNh bGxlZCBvbmx5IG9uY2UgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLg0KPiBXb3VsZG4ndCBpdCBi ZSBtb3JlIHJlYWRhYmxlIGlmIHRoZSBpbnRlcnJ1cHQgbWFza3Mgd2VyZSBqdXN0IGNoZWNrZWQN Cj4gZGlyZWN0bHkgdGhlcmU/DQpEaXR0by4NCj4gDQo+ID4gKw0KPiA+ICt2b2lkIG10a19qcGVn X2VuY19zZXRfaW1nX3NpemUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgd2lkdGgsIHUzMiBoZWln aHQpDQo+ID4gK3sNCj4gPiArCXUzMiB2YWx1ZTsNCj4gPiArDQo+ID4gKwl2YWx1ZSA9IEpQRUdf RU5DX1dJRFRIX0hFSUdIVCh3aWR0aCwgaGVpZ2h0KTsNCj4gPiArCXdyaXRlbCh2YWx1ZSwgYmFz ZSArIEpQRUdfRU5DX0lNR19TSVpFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBtdGtfanBl Z19lbmNfc2V0X2VuY19mb3JtYXQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgZW5jX2Zvcm1hdCkN Cj4gPiArew0KPiA+ICsJdTMyIHl1dl9mb3JtYXQsIHZhbHVlOw0KPiA+ICsNCj4gPiArCXl1dl9m b3JtYXQgPSBKUEVHX0VOQ19ZVVZfRk9STUFUX1lVWVY7DQo+ID4gKwlzd2l0Y2ggKGVuY19mb3Jt YXQpIHsNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6DQo+ID4gKwkJeXV2X2Zvcm1hdCA9 IEpQRUdfRU5DX1lVVl9GT1JNQVRfWVVZVjsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRM Ml9QSVhfRk1UX1lWWVU6DQo+ID4gKwkJeXV2X2Zvcm1hdCA9IEpQRUdfRU5DX1lVVl9GT1JNQVRf WVZZVTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX05WMTJNOg0KPiA+ ICsJCXl1dl9mb3JtYXQgPSBKUEVHX0VOQ19ZVVZfRk9STUFUX05WMTI7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIFY0TDJfUElYX0ZNVF9OVjIxTToNCj4gPiArCQl5dXZfZm9ybWF0ID0gSlBF R19FTkNfWVVWX0ZPUk1BVF9OVjEyOw0KPiANCj4gSW5zdGVhZCBvZiB0aGUgZXhwbGljaXQgc3dp dGNoIGhlcmUsIHdlIGNvdWxkIGp1c3QgaGF2ZSB0aGUgaGFyZHdhcmUgZm9ybWF0DQo+IGNvbnRh aW5lZCBpbiB0aGUgbXRrX2pwZWdfZm10IHN0cnVjdC4NCmRvbmUuDQo+IA0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl2 YWx1ZSA9IHJlYWRsKGJhc2UgKyBKUEVHX0VOQ19DVFJMKTsNCj4gPiArCXZhbHVlICY9IH5KUEVH X0VOQ19DVFJMX1lVVl9GT1JNQVRfTUFTSzsNCj4gPiArCXZhbHVlIHw9IEpQRUdfRU5DX0ZPUk1B VCh5dXZfZm9ybWF0KTsNCj4gPiArCXdyaXRlbCh2YWx1ZSwgYmFzZSArIEpQRUdfRU5DX0NUUkwp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19zZXRfYmxrX251bSh2b2lk IF9faW9tZW0gKmJhc2UsIHUzMiBlbmNfZm9ybWF0LCB1MzIgd2lkdGgsDQo+ID4gKwkJCSAgICAg IHUzMiBoZWlnaHQpDQo+ID4gK3sNCj4gPiArCXUzMiBibGtfbnVtOw0KPiA+ICsJdTMyIGlzXzQy MDsNCj4gPiArCXUzMiBwYWRkaW5nX3dpZHRoOw0KPiA+ICsJdTMyIHBhZGRpbmdfaGVpZ2h0Ow0K PiA+ICsNCj4gPiArCWlzXzQyMCA9IChlbmNfZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjEyTSB8 fA0KPiA+ICsJCSAgZW5jX2Zvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTlYyMU0pID8gMSA6IDA7DQo+ ID4gKwlwYWRkaW5nX3dpZHRoID0gcm91bmRfdXAod2lkdGgsIDE2KTsNCj4gPiArCXBhZGRpbmdf aGVpZ2h0ID0gcm91bmRfdXAoaGVpZ2h0LCBpc180MjAgPyAxNiA6IDgpOw0KPiA+ICsNCj4gPiAr CWJsa19udW0gPSAocGFkZGluZ193aWR0aCA+PiA0KSAqIChwYWRkaW5nX2hlaWdodCA+PiAoaXNf NDIwID8gNCA6IDMpKSAqDQo+ID4gKwkJICAoaXNfNDIwID8gNiA6IDQpIC0gMTsNCj4gDQo+IFRo ZSB3aG9sZSBjb2RlIGFib3ZlIGNvdWxkIGJlIHJld3JpdHRlbiBhcyBiZWxvdzoNCj4gDQo+IGlm IChlbmNfZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjEyTQ0KPiAgICAgfHwgZW5jX2Zvcm1hdCA9 PSBWNEwyX1BJWF9GTVRfTlYyMU0pDQo+IAlibGtfbnVtID0gRElWX1JPVU5EX1VQKHdpZHRoLCAx NikgKiBESVZfUk9VTkRfVVAoaGVpZ2h0LCAxNikgKiA2IC0gMTsNCj4gZWxzZQ0KPiAJYmxrX251 bSA9IERJVl9ST1VORF9VUCh3aWR0aCwgMTYpICogRElWX1JPVU5EX1VQKGhlaWdodCwgOCkgKiA0 IC0gMTsNCj4gDQo+IEhvd2V2ZXIgdGhlIG1hZ2ljIG51bWJlcnMgZGVzZXJ2ZSBzb21lIGV4cGxh bmF0aW9uLCBlc3BlY2lhbGx5DQo+IG11bHRpcGxpY2F0aW9uIGJ5IDYgb3IgNCBhbmQgc3VidHJh Y3Rpb24gb2YgMS4NCmRvbmUuDQo+IA0KPiA+ICsNCj4gPiArCXdyaXRlbChibGtfbnVtLCBiYXNl ICsgSlBFR19FTkNfQkxLX05VTSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgbXRrX2pwZWdf ZW5jX3NldF9zdHJpZGUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgZW5jX2Zvcm1hdCwgdTMyIHdp ZHRoLA0KPiA+ICsJCQkgICAgIHUzMiBoZWlnaHQsIHUzMiBieXRlc3BlcmxpbmUpDQo+ID4gK3sN Cj4gPiArCXUzMiB3aWR0aF9ldmVuOw0KPiA+ICsJdTMyIGlzXzQyMDsNCj4gDQo+IFBlcmhhcHMg c2hvdWxkIGJlIGJvb2w/DQp5ZXMuDQo+IA0KPiA+ICsJdTMyIGltZ19zdHJpZGU7DQo+ID4gKwl1 MzIgbWVtX3N0cmlkZTsNCj4gPiArDQo+ID4gKwl3aWR0aF9ldmVuID0gcm91bmRfdXAod2lkdGgs IDIpOw0KPiA+ICsJaXNfNDIwID0gKGVuY19mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX05WMTJNIHx8 DQo+ID4gKwkJICBlbmNfZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjIxTSkgPyAxIDogMDsNCj4g DQo+IE5vIG5lZWQgZm9yIHRoZSBleHBsaWNpdCAxIDogMC4NCj4gDQo+ID4gKwlpZiAoIWlzXzQy MCkNCj4gPiArCQl3aWR0aF9ldmVuID0gd2lkdGhfZXZlbiA8PCAxOw0KPiA+ICsJaW1nX3N0cmlk ZSA9IHJvdW5kX3VwKHdpZHRoX2V2ZW4sIChpc180MjAgPyAxNiA6IDMyKSk7DQo+ID4gKwltZW1f c3RyaWRlID0gaXNfNDIwID8gYnl0ZXNwZXJsaW5lIDogcm91bmRfdXAod2lkdGhfZXZlbiwgMzIp Ow0KPiANCj4gV291bGRuJ3QgaXQgbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGlmIGl0IHdh cyByZXdyaXR0ZW4gbGlrZSBiZWxvdz8NCj4gDQo+IGlmIChlbmNfZm9ybWF0ID09IFY0TDJfUElY X0ZNVF9OVjEyTQ0KPiAgICAgfHwgZW5jX2Zvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTlYyMU0pIHsN Cj4gICAgICAgICAvKiA0OjI6MCAqLw0KPiAJaW1nX3N0cmlkZSA9IHJvdW5kX3VwKHdpZHRoLCAx Nik7DQo+IAltZW1fc3RyaWRlID0gYnl0ZXNwZXJsaW5lOw0KPiB9IGVsc2Ugew0KPiAJLyogNDoy OjIgKi8NCj4gCWltZ19zdHJpZGUgPSByb3VuZF91cCh3aWR0aCAqIDIsIDMyKTsNCj4gCW1lbV9z dHJpZGUgPSBpbWdfc3RyaWRlOw0KPiB9DQo+IA0KZG9uZS4NCj4gPiArDQo+ID4gKwl3cml0ZWwo aW1nX3N0cmlkZSwgYmFzZSArIEpQRUdfRU5DX0lNR19TVFJJREUpOw0KPiA+ICsJd3JpdGVsKG1l bV9zdHJpZGUsIGJhc2UgKyBKUEVHX0VOQ19TVFJJREUpOw0KPiANCj4gRG9lcyB0aGUgaGFyZHdh cmUgYXNzdW1lIHRoYXQgWSBhbmQgQ2JDciBwbGFuZXMgaGF2ZSB0aGUgc2FtZSBzdHJpZGVzPw0K eWVzLHdlIGp1c3Qgc2V0IGltYWdlIHN0cmlkZSBhbmQgbWVtb3J5IHN0cmlkZSB0byBoYXJkd2Fy ZS4NCj4gDQo+IFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBpbWdfc3RyaWRlIGFuZCBt ZW1fc3RyaWRlPw0KVGhlIGltYWdlIHN0cmlkZShwaWN0dXJlIHJlYWwgd2lkdGggc3RyaWRlICkg aXMgMzItYnl0ZSBhbGlnbmVkIGZvcg0KeXV2NDIwLCAxNi1ieXRlIGFsaWduZWQgZm9yIHl1djQy MC4NClRoZSBtZW1vcnkgc3RyaWRlIG11c3QgYmUgMTI4LWJ5dGUgYWxpZ25lZC4NCkluIGdlbmVy YWwsIG1lbW9yeSBzdHJpZGUgaXMgYmlnZ2VyIHRoYW4gaW1hZ2Ugc3RyaWRlLg0KPiANCj4gPiAr fQ0KPiA+ICsNCj4gPiArdm9pZCBtdGtfanBlZ19lbmNfc2V0X3NyY19hZGRyKHZvaWQgX19pb21l bSAqYmFzZSwgdTMyIHNyY19hZGRyLA0KPiA+ICsJCQkgICAgICAgdTMyIHNyY19hZGRyX2MpDQo+ ID4gK3sNCj4gPiArCXdyaXRlbChzcmNfYWRkciwgYmFzZSArIEpQRUdfRU5DX1NSQ19MVU1BX0FE RFIpOw0KPiA+ICsJd3JpdGVsKHNyY19hZGRyX2MsIGJhc2UgKyBKUEVHX0VOQ19TUkNfQ0hST01B X0FERFIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19zZXRfZHN0X2Fk ZHIodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgZHN0X2FkZHIsDQo+ID4gKwkJCSAgICAgICB1MzIg c3RhbGxfc2l6ZSwgdTMyIGluaXRfb2Zmc2V0LA0KPiA+ICsJCQkgICAgICAgdTMyIG9mZnNldF9t YXNrKQ0KPiA+ICt7DQo+ID4gKwl3cml0ZWwoSlBFR19FTkNfSU5JVF9PRkZTRVQoaW5pdF9vZmZz ZXQpLCBiYXNlICsgSlBFR19FTkNfT0ZGU0VUX0FERFIpOw0KPiA+ICsJd3JpdGVsKEpQRUdfRU5D X09GRlNFVF9NQVNLKG9mZnNldF9tYXNrKSwNCj4gPiArCSAgICAgICBiYXNlICsgSlBFR19FTkNf QllURV9PRkZTRVRfTUFTSyk7DQo+ID4gKwl3cml0ZWwoSlBFR19FTkNfRFNUX0FERFIoZHN0X2Fk ZHIpLCBiYXNlICsgSlBFR19FTkNfRFNUX0FERFIwKTsNCj4gPiArCXdyaXRlbChKUEVHX0VOQ19T VEFMTF9BRERSKGRzdF9hZGRyLCBzdGFsbF9zaXplKSwNCj4gPiArCSAgICAgICBiYXNlICsgSlBF R19FTkNfU1RBTExfQUREUjApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtf anBlZ19lbmNfc2V0X3F1YWxpdHkodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcXVhbGl0eSkNCj4g PiArew0KPiA+ICsJdTMyIHZhbHVlOw0KPiA+ICsJdTMyIGksIGVuY19xdWFsaXR5Ow0KPiA+ICsN Cj4gPiArCWVuY19xdWFsaXR5ID0gbXRrX2pwZWdfZW5jX3F1YWxpdHlbMF0uaGFyZHdhcmVfdmFs dWU7DQo+IA0KPiBGb3IgdmFsdWVzIGxlc3MgdGhhbiAzNCwgc2hvdWxkbid0IHdlIHVzZSB0aGUg bG93ZXN0IHF1YWxpdHksIG5vdCB0aGUNCj4gaGlnaGVzdD8NClllcyxJIGhhdmUgZml4ZWQgdGhl IGJ1Zy4NCj4gDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgTVRLX0pQRUdfRU5DX05VTV9RVUFMSVRZ OyBpKyspIHsNCj4gDQo+IFBsZWFzZSB1c2UgQVJSQVlfU0laRSgpIGluc3RlYWQgb2YgdGhlIG1h Y3JvIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubw0KPiBhY2NpZGVudGFsIG91dCBvZiBib3VuZHMg YWNjZXNzLg0KZG9uZS4NCj4gDQo+ID4gKwkJaWYgKHF1YWxpdHkgPj0gbXRrX2pwZWdfZW5jX3F1 YWxpdHlbaV0ucXVhbGl0eV9wYXJhbSkgew0KPiA+ICsJCQllbmNfcXVhbGl0eSA9IG10a19qcGVn X2VuY19xdWFsaXR5W2ldLmhhcmR3YXJlX3ZhbHVlOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmFsdWUgPSByZWFkbChiYXNlICsgSlBFR19FTkNfUVVB TElUWSk7DQo+IA0KPiBEbyB3ZSBuZWVkIHRvIHJlYWQgdGhlIHJlZ2lzdGVyPw0KPiANCj4gPiAr CXZhbHVlID0gSlBFR19FTkNfU0VUX1FVQUxJVFkodmFsdWUsIGVuY19xdWFsaXR5KTsNCj4gPiAr CXdyaXRlbCh2YWx1ZSwgYmFzZSArIEpQRUdfRU5DX1FVQUxJVFkpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19lbmNfc2V0X3Jlc3RhcnRfaW50ZXJ2YWwodm9pZCBf X2lvbWVtICpiYXNlLA0KPiA+ICsJCQkJCSAgICAgIHUzMiByZXN0YXJ0X2ludGVydmFsKQ0KPiA+ ICt7DQo+ID4gKwl1MzIgdmFsdWU7DQo+ID4gKw0KPiA+ICsJdmFsdWUgPSByZWFkbChiYXNlICsg SlBFR19FTkNfQ1RSTCk7DQo+ID4gKwlpZiAocmVzdGFydF9pbnRlcnZhbCkNCj4gPiArCQl2YWx1 ZSB8PSBKUEVHX0VOQ19DVFJMX1JFU1RBUlRfRU5fQklUOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXZh bHVlICY9IH5KUEVHX0VOQ19DVFJMX1JFU1RBUlRfRU5fQklUOw0KPiA+ICsJd3JpdGVsKHZhbHVl LCBiYXNlICsgSlBFR19FTkNfQ1RSTCk7DQo+ID4gKwl3cml0ZWwocmVzdGFydF9pbnRlcnZhbCwg YmFzZSArIEpQRUdfRU5DX1JTVF9NQ1VfTlVNKTsNCj4gPiArfQ0KPiANCj4gV291bGRuJ3QgaXQg bWFrZSBtb3JlIHNlbnNlIHRvIGp1c3QgZG8gYWxsIHRoZSByZWdpc3RlciBzZXR0aW5ncyBpbiBv bmUNCj4gZnVuY3Rpb24sIHdpdGggY29tbWVudHM/IFNwbGl0dGluZyBpdCBsaWtlIGhlcmUgaW50 cm9kdWNlcyBzdXBlcmZsdW91cw0KPiByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIC0gd2UgY291 bGQganVzdCByZWFkIEpQRUdfRU5DX0NUUkwgb25jZSwgdXBkYXRlDQo+IGFsbCB0aGUgZmllbGRz IGluIHRoZSBsb2NhbCB2YXJpYWJsZSBhbmQgd3JpdGUgaXQgb25jZSBpZiBkb25lIGluIG9uZQ0K PiBmdW5jdGlvbi4NCmRvbmUuDQo+IA0KPiBBIHR5cGljYWwgYXBwcm9hY2ggaXMgdG8gaGF2ZSBv bmUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGUgbmVjZXNzYXJ5IFY0TDINCj4gY29udGV4dCBh bmQgdGhlbiBleHRyYWN0cyBuZWNlc3NhcnkgcGFyYW1ldGVycyBkaXJlY3RseSBmcm9tIHRoZXJl IGFuZA0KPiBwcm9ncmFtcyB0aGUgcmVnaXN0ZXJzLiBUaGF0IHJlZHVjZXMgdGhlIGxldmVsIG9m IGFic3RyYWN0aW9uIGFuZCBtYWtlcyB0aGUNCj4gY29kZSBlYXNpZXIgdG8gZm9sbG93IGZvciBh bnlvbmUgZmFtaWxpYXIgd2l0aCBWNEwyLg0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10 a19qcGVnX2VuY19zZXRfZW5jb2RlX21vZGUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgZXhpZl9l bikNCj4gPiArew0KPiA+ICsJdTMyIHZhbHVlOw0KPiA+ICsNCj4gPiArCXZhbHVlID0gcmVhZGwo YmFzZSArIEpQRUdfRU5DX0NUUkwpOw0KPiA+ICsJdmFsdWUgJj0gfkpQRUdfRU5DX0NUUkxfRklM RV9GT1JNQVRfQklUOw0KPiA+ICsJd3JpdGVsKHZhbHVlLCBiYXNlICsgSlBFR19FTkNfQ1RSTCk7 DQo+ID4gKw0KPiA+ICsJaWYgKGV4aWZfZW4pIHsNCj4gPiArCQl2YWx1ZSA9IHJlYWRsKGJhc2Ug KyBKUEVHX0VOQ19DVFJMKTsNCj4gDQo+IERvIHdlIG5lZWQgdG8gcmVhZCB0aGUgcmVnaXN0ZXIg c2Vjb25kIHRpbWU/IENvdWxkIHdlIGp1c3QgcmVhZCBpdCBvbmNlLA0KPiB0YWtlIGNhcmUgb2Yg Ym90aCBmaWVsZHMgYW5kIHdyaXRlIG9uY2U/DQpkb25lLkkgaGF2ZSBtYWtlZCBhbGwgSlBFR19F TkNfQ1RSTCBzZXR0aW5ncyBpbiBvbmUgZnVuY3Rpb24gYW5kIGp1c3QNCnJlYWQgb25jZS4NCj4g DQo+ID4gKwkJdmFsdWUgfD0gSlBFR19FTkNfRU5fSkZJRl9FWElGOw0KPiA+ICsJCXdyaXRlbCh2 YWx1ZSwgYmFzZSArIEpQRUdfRU5DX0NUUkwpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICt2b2lkIG10a19qcGVnX2VuY19zZXRfY3RybF9jZmcodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIg ZXhpZl9lbiwgdTMyIHF1YWxpdHksDQo+ID4gKwkJCSAgICAgICB1MzIgcmVzdGFydF9pbnRlcnZh bCkNCj4gPiArew0KPiA+ICsJbXRrX2pwZWdfZW5jX3NldF9xdWFsaXR5KGJhc2UsIHF1YWxpdHkp Ow0KPiA+ICsNCj4gPiArCW10a19qcGVnX2VuY19zZXRfcmVzdGFydF9pbnRlcnZhbChiYXNlLCBy ZXN0YXJ0X2ludGVydmFsKTsNCj4gPiArDQo+ID4gKwltdGtfanBlZ19lbmNfc2V0X2VuY29kZV9t b2RlKGJhc2UsIGV4aWZfZW4pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG10a19qcGVnX2Vu Y19zdGFydCh2b2lkIF9faW9tZW0gKmJhc2UpDQo+ID4gK3sNCj4gPiArCXUzMiB2YWx1ZTsNCj4g PiArDQo+ID4gKwl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBKUEVHX0VOQ19DVFJMKTsNCj4gPiArCXZh bHVlIHw9IEpQRUdfRU5DX0NUUkxfSU5UX0VOX0JJVCB8IEpQRUdfRU5DX0NUUkxfRU5BQkxFX0JJ VDsNCj4gPiArCXdyaXRlbCh2YWx1ZSwgYmFzZSArIEpQRUdfRU5DX0NUUkwpOw0KPiA+ICt9DQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdf ZW5jX2h3LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19o dy5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQw ZDdkMjE4YTBjMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19ody5oDQo+ID4gQEAgLTAsMCArMSw4NiBAQA0K PiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovDQo+ID4gKy8q DQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJbmMuDQo+ID4gKyAqIEF1dGhv cjogWGlhIEppYW5nIDx4aWEuamlhbmdAbWVkaWF0ZWsuY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8N Cj4gPiArDQo+ID4gKyNpZm5kZWYgX01US19KUEVHX0VOQ19IV19IDQo+ID4gKyNkZWZpbmUgX01U S19KUEVHX0VOQ19IV19IDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWNv cmUuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJtdGtfanBlZ19jb3JlLmgiDQo+ID4gKyNpbmNs dWRlICJtdGtfanBlZ19lbmNfcmVnLmgiDQo+ID4gKw0KPiA+ICtlbnVtIHsNCj4gPiArCU1US19K UEVHX0VOQ19SRVNVTFRfRE9ORQkJPSAwLA0KPiANCj4gbml0OiBObyBuZWVkIGZvciBleHBsaWNp dCB2YWx1ZSBhc3NpZ25tZW50Lg0KPiANCj4gPiArCU1US19KUEVHX0VOQ19SRVNVTFRfU1RBTEws DQo+ID4gKwlNVEtfSlBFR19FTkNfUkVTVUxUX1ZDT0RFQ19JUlEsDQo+ID4gKwlNVEtfSlBFR19F TkNfUkVTVUxUX0VSUk9SX1VOS05PV04NCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg KiBzdHJ1Y3QgbXRrX2pwZWdfZW5jX3FsdCAtIEpQRUcgZW5jb2RlciBxdWFsaXR5IGRhdGENCj4g PiArICogQHF1YWxpdHlfcGFyYW06CXF1YWxpdHkgdmFsdWUNCj4gPiArICogQGhhcmR3YXJlX3Zh bHVlOmhhcmR3YXJlIHZhbHVlIG9mIHF1YWxpdHkNCj4gPiArICovDQo+ID4gK3N0cnVjdCBtdGtf anBlZ19lbmNfcWx0IHsNCj4gPiArCXU4CXF1YWxpdHlfcGFyYW07DQo+ID4gKwl1OAloYXJkd2Fy ZV92YWx1ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgbXRfanBl Z19lbmNfYnMgLSBKUEVHIGVuY29kZXIgYml0c3RyZWFtICBidWZmZXINCj4gPiArICogQGRtYV9h ZGRyOgkJCUpQRUcgZW5jb2RlciBkZXN0aW5hdGlvbiBhZGRyZXNzDQo+ID4gKyAqIEBzaXplOgkJ CUpQRUcgZW5jb2RlciBiaXN0cmVhbSBzaXplDQo+ID4gKyAqIEBkbWFfYWRkcl9vZmZzZXQ6CQlK UEVHIGVuY29kZXIgb2Zmc2V0IGFkZHJlc3MNCj4gPiArICogQGRtYV9hZGRyX29mZnNldG1hc2s6 CUpQRUcgZW5jb2RlciBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mZnNldCBtYXNrDQo+ID4gKyAqLw0K PiA+ICtzdHJ1Y3QgbXRrX2pwZWdfZW5jX2JzIHsNCj4gPiArCWRtYV9hZGRyX3QJZG1hX2FkZHI7 DQo+ID4gKwlzaXplX3QJCXNpemU7DQo+ID4gKwl1MzIJCQlkbWFfYWRkcl9vZmZzZXQ7DQo+ID4g Kwl1MzIJCQlkbWFfYWRkcl9vZmZzZXRtYXNrOw0KPiANCj4gU29tZXRoaW5nIHNlZW1zIHRvIGJl IHdyb25nIHdpdGggdGhlIGluZGVudGF0aW9uIGhlcmUuIEluIGdlbmVyYWwgaXQncw0KPiBhZHZp c2FibGUgdG8gYXZvaWQgdXNpbmcgdGFicyBiZXR3ZWVuIHR5cGVzIGFuZCBmaWVsZCBuYW1lcyBh bmQganVzdCBoYXZlIGENCj4gc2luZ2xlIHNwYWNlLCBiZWNhdXNlIGNoYW5naW5nIHNvbWUgdHlw ZXMgb3IgYWRkaW5nIG5ldyBmaWVsZHMgY291bGQgYnJlYWsNCj4gdGhlIGluZGVudGF0aW9uIGlm IHRhYnMgYXJlIHVzZWQuDQo+IA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0 cnVjdCBtdGtfanBlZ19tZW0gLSBKUEVHIG1lbW9yeQ0KPiA+ICsgKiBAZG1hX2FkZHI6CQltZW1v cnkgYWRkcmVzcw0KPiA+ICsgKiBAc2l6ZToJCW1lbW9yeSBzaXplDQo+ID4gKyAqLw0KPiA+ICtz dHJ1Y3QgbXRrX2pwZWdfbWVtIHsNCj4gPiArCWRtYV9hZGRyX3QJZG1hX2FkZHI7DQo+ID4gKwlz aXplX3QJCXNpemU7DQo+ID4gK307DQo+IA0KPiBEbyB3ZSBuZWVkIHRoaXMgaW50ZXJtZWRpYXRl IHN0cnVjdD8gUGVyaGFwcyB3ZSBjb3VsZCBqdXN0IGdldCB0aGVzZQ0KPiBkaXJlY3RseSBmcm9t IHZiMj8NCnllcyxJIGhhdmUgZGVsZXRlZCBpdC4NCj4gDQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogc3RydWN0IG10a19qcGVnX2VuY19mYiAtIEpQRUcgZW5jb2RlciBmcmFtZSBidWZmZXINCj4g PiArICogQGZiX2FkZHI6CQlmcm1hZSBidWZmZXIgbWVtb3J5IGluZm9ybWF0aW9uDQo+ID4gKyAq IEBudW1fcGxhbmVzOgkJbnVtYmVyIG9mIHBsYW5lcw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IG10 a19qcGVnX2VuY19mYiB7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfbWVtCWZiX2FkZHJbTVRLX0pQ RUdfQ09NUF9NQVhdOw0KPiANCj4gU2luY2UgaXQncyBqdXN0IGEgc21hbGwgc3RydWN0LCBJJ2Qg anVzdCBzdWdnZXN0IHVzaW5nIFZJREVPX01BWF9QTEFORVMuDQpEb25lDQo+IA0KPiA+ICsJdTMy CQkJbnVtX3BsYW5lczsNCj4gPiArfTsNCj4gDQo+IE9yIGFjdHVhbGx5IGp1c3QgZHJvcHBpbmcg dGhpcyBzdHJ1Y3QgYXQgYWxsLiBXZSBzaG91bGQgYmUgYWJsZSB0byBqdXN0DQo+IGRpcmVjdGx5 IGdldCB0aGVzZSBwYXJhbWV0ZXJzIGZyb20gdmIyIHdoZW5ldmVyIG5lZWRlZC4NCj4gDQo+ID4g Kw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19yZXNldCh2b2lkIF9faW9tZW0gKmJhc2UpOw0KPiA+ ICt1MzIgbXRrX2pwZWdfZW5jX2dldF9pbnRfc3RhdHVzKHZvaWQgX19pb21lbSAqYmFzZSk7DQo+ ID4gK3UzMiBtdGtfanBlZ19lbmNfZ2V0X2ZpbGVfc2l6ZSh2b2lkIF9faW9tZW0gKmJhc2UpOw0K PiA+ICt1MzIgbXRrX2pwZWdfZW5jX2VudW1fcmVzdWx0KHZvaWQgX19pb21lbSAqYmFzZSwgdTMy IGlycV9zdGF0dXMpOw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19zZXRfaW1nX3NpemUodm9pZCBf X2lvbWVtICpiYXNlLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpOw0KPiA+ICt2b2lkIG10a19qcGVn X2VuY19zZXRfZW5jX2Zvcm1hdCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBlbmNfZm9ybWF0KTsN Cj4gPiArdm9pZCBtdGtfanBlZ19lbmNfc2V0X2Jsa19udW0odm9pZCBfX2lvbWVtICpiYXNlLCB1 MzIgZW5jX2Zvcm1hdCwgdTMyIHdpZHRoLA0KPiA+ICsJCQkgICAgICB1MzIgaGVpZ2h0KTsNCj4g PiArdm9pZCBtdGtfanBlZ19lbmNfc2V0X3N0cmlkZSh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBl bmNfZm9ybWF0LCB1MzIgd2lkdGgsDQo+ID4gKwkJCSAgICAgdTMyIGhlaWdodCwgdTMyIGJ5dGVz cGVybGluZSk7DQo+ID4gK3ZvaWQgbXRrX2pwZWdfZW5jX3NldF9zcmNfYWRkcih2b2lkIF9faW9t ZW0gKmJhc2UsIHUzMiBzcmNfYWRkciwNCj4gPiArCQkJICAgICAgIHUzMiBzcmNfYWRkcl9jKTsN Cj4gPiArdm9pZCBtdGtfanBlZ19lbmNfc2V0X2RzdF9hZGRyKHZvaWQgX19pb21lbSAqYmFzZSwg dTMyIGRzdF9hZGRyLA0KPiA+ICsJCQkgICAgICAgdTMyIHN0YWxsX3NpemUsIHUzMiBpbml0X29m ZnNldCwNCj4gPiArCQkJICAgICAgIHUzMiBvZmZzZXRfbWFzayk7DQo+ID4gK3ZvaWQgbXRrX2pw ZWdfZW5jX3NldF9jdHJsX2NmZyh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBleGlmX2VuLCB1MzIg cXVhbGl0eSwNCj4gPiArCQkJICAgICAgIHUzMiByZXN0YXJ0X2ludGVydmFsKTsNCj4gPiArdm9p ZCBtdGtfanBlZ19lbmNfc3RhcnQodm9pZCBfX2lvbWVtICplbmNfcmVnX2Jhc2UpOw0KPiA+ICsN Cj4gPiArI2VuZGlmIC8qIF9NVEtfSlBFR19FTkNfSFdfSCAqLw0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19yZWcuaCBiL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfZW5jX3JlZy5oDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNlYzM2MzFhZGRjNQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVn L210a19qcGVnX2VuY19yZWcuaA0KPiA+IEBAIC0wLDAgKzEsNzggQEANCj4gPiArLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLg0KPiA+ICsgKiBBdXRob3I6IFhpYSBKaWFuZyA8 eGlhLmppYW5nQG1lZGlhdGVrLmNvbT4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKyNpZm5kZWYg X01US19KUEVHX0VOQ19SRUdfSA0KPiA+ICsjZGVmaW5lIF9NVEtfSlBFR19FTkNfUkVHX0gNCj4g PiArDQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfSU5UX1NUQVRVU19ET05FCQkJQklUKDApDQo+ID4g KyNkZWZpbmUgSlBFR19FTkNfSU5UX1NUQVRVU19TVEFMTAkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5l IEpQRUdfRU5DX0lOVF9TVEFUVVNfVkNPREVDX0lSUQkJQklUKDQpDQo+ID4gKyNkZWZpbmUgSlBF R19FTkNfSU5UX1NUQVRVU19NQVNLX0FMTElSUQkJMHgxMw0KPiA+ICsNCj4gPiArI2RlZmluZSBK UEVHX0VOQ19EU1RfQUREUl9PRkZTRVRfTUFTSyBHRU5NQVNLKDMsIDApDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIEpQRUdfRU5DX0NUUkxfWVVWX0ZPUk1BVF9NQVNLIDB4MTgNCj4gPiArI2RlZmluZSBK UEVHX0VOQ19DVFJMX1JFU1RBUlRfRU5fQklUICAgICAgICAgICAgQklUKDEwKQ0KPiA+ICsjZGVm aW5lIEpQRUdfRU5DX0NUUkxfRklMRV9GT1JNQVRfQklUICAgICAgICAgICBCSVQoNSkNCj4gPiAr I2RlZmluZSBKUEVHX0VOQ19FTl9KRklGX0VYSUYgICAgICAgICAgICAgICAgICAgQklUKDUpDQo+ ID4gKyNkZWZpbmUgSlBFR19FTkNfQ1RSTF9JTlRfRU5fQklUICAgICAgICAgICAgICAgIEJJVCgy KQ0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0NUUkxfRU5BQkxFX0JJVCAgICAgICAgICAgICAgICBC SVQoMCkNCj4gPiArI2RlZmluZSBKUEVHX0VOQ19SRVNFVF9CSVQgICAgICAgICAgICAgICAgICAg ICAgQklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1lVVl9GT1JNQVRfWVVZViAw DQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfWVVWX0ZPUk1BVF9ZVllVIDENCj4gPiArI2RlZmluZSBK UEVHX0VOQ19ZVVZfRk9STUFUX05WMTIgMg0KPiA+ICsjZGVmaW5lIEpFUEdfRU5DX1lVVl9GT1JN QVRfTlYyMSAzDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTYwIDB4MA0K PiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTgwIDB4MQ0KPiA+ICsjZGVmaW5lIEpQRUdf RU5DX1FVQUxJVFlfUTkwIDB4Mg0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTk1IDB4 Mw0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTM5IDB4NA0KPiA+ICsjZGVmaW5lIEpQ RUdfRU5DX1FVQUxJVFlfUTY4IDB4NQ0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTg0 IDB4Ng0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTkyIDB4Nw0KPiA+ICsjZGVmaW5l IEpQRUdfRU5DX1FVQUxJVFlfUTQ4IDB4OA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlf UTc0IDB4YQ0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTg3IDB4Yg0KPiA+ICsjZGVm aW5lIEpQRUdfRU5DX1FVQUxJVFlfUTM0IDB4Yw0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJ VFlfUTY0IDB4ZQ0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTgyIDB4Zg0KPiA+ICsj ZGVmaW5lIEpQRUdfRU5DX1FVQUxJVFlfUTk3IDB4MTANCj4gPiArDQo+ID4gKyNkZWZpbmUgSlBF R19FTkNfUlNUQgkJCQkweDEwMA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0NUUkwJCQkJMHgxMDQN Cj4gPiArI2RlZmluZSBKUEVHX0VOQ19RVUFMSVRZCQkJMHgxMDgNCj4gPiArI2RlZmluZSBKUEVH X0VOQ19CTEtfTlVNCQkJMHgxMEMNCj4gPiArI2RlZmluZSBKUEVHX0VOQ19CTEtfQ05UCQkJMHgx MTANCj4gPiArI2RlZmluZSBKUEVHX0VOQ19JTlRfU1RTCQkJMHgxMWMNCj4gPiArI2RlZmluZSBK UEVHX0VOQ19EU1RfQUREUjAJCQkweDEyMA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0RNQV9BRERS MAkJCTB4MTI0DQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfU1RBTExfQUREUjAJCTB4MTI4DQo+ID4g KyNkZWZpbmUgSlBFR19FTkNfT0ZGU0VUX0FERFIJCTB4MTM4DQo+ID4gKyNkZWZpbmUgSlBFR19F TkNfUlNUX01DVV9OVU0JCTB4MTUwDQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfSU1HX1NJWkUJCQkw eDE1NA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0RFQlVHX0lORk8wCQkweDE2MA0KPiA+ICsjZGVm aW5lIEpQRUdfRU5DX0RFQlVHX0lORk8xCQkweDE2NA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1RP VEFMX0NZQ0xFCQkweDE2OA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0JZVEVfT0ZGU0VUX01BU0sJ MHgxNmMNCj4gPiArI2RlZmluZSBKUEVHX0VOQ19TUkNfTFVNQV9BRERSCQkweDE3MA0KPiA+ICsj ZGVmaW5lIEpQRUdfRU5DX1NSQ19DSFJPTUFfQUREUgkweDE3NA0KPiA+ICsjZGVmaW5lIEpQRUdf RU5DX1NUUklERQkJCQkweDE3OA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0lNR19TVFJJREUJCQkw eDE3Yw0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0RDTV9DVFJMCQkJMHgzMDANCj4gPiArI2RlZmlu ZSBKUEVHX0VOQ19DT0RFQ19TRUwJCQkweDMxNA0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX1VMVFJB X1RIUkVTCQkweDMxOA0KPiANCj4gbml0OiBQbGVhc2UgbWFrZSBzdXJlIGFsbCB0aGUgbWFjcm8g dmFsdWVzIGFyZSBhbGlnbmVkIG5pY2VseSwgdXNpbmcgdGFicy4gDQpkb25lLg0KPiANCj4gPiAr DQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfRk9STUFUKHgpCQkoKCh4KSAmIDMpIDw8IDMpDQo+ID4g KyNkZWZpbmUgSlBFR19FTkNfV0lEVEhfSEVJR0hUKHcsIGgpCSgoKHcpIDw8IDE2KSB8IChoKSkN Cj4gPiArI2RlZmluZSBKUEVHX0VOQ19JTklUX09GRlNFVCh4KQkJKCh4KSAmICh+MHhmKSkNCj4g PiArI2RlZmluZSBKUEVHX0VOQ19PRkZTRVRfTUFTSyh4KQkJKCh4KSAmIDB4ZikNCj4gPiArI2Rl ZmluZSBKUEVHX0VOQ19EU1RfQUREUih4KQkJKCh4KSAmICh+MHhmKSkNCj4gPiArI2RlZmluZSBK UEVHX0VOQ19TVEFMTF9BRERSKHgsIHkpCQkoKCh4KSArICh5KSkgJiAofjB4ZikpDQo+IA0KPiBG b3IgdGhlIG9mZnNldCBhbmQgYWRkcmVzcyBjYWxjdWxhdGlvbiwgcGxlYXNlIGp1c3Qgb3BlbiBj b2RlIGluIHRoZQ0KPiBmdW5jdGlvbiB0aGF0IHdyaXRlcyB0aGUgcmVnaXN0ZXJzLCBhcyB0aGV5 J3JlIG5vdCBzcGVjaWZpYyBoYXJkd2FyZQ0KPiByZWdpc3RlciBsYXlvdXRzLCBidXQganVzdCBz aW1wbGUgY2FsY3VsYXRpb25zLg0KZG9uZS4NCj4gDQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfU0VU X1FVQUxJVFkoeCwgeSkJKCgoeCkgJiAweGZmZmYwMDAwKSB8ICh5KSkNCj4gDQo+IFRoYXQncyBh biB1bnVzdWFsIHBhdHRlcm4uIE5vcm1hbGx5IG1hY3JvcyBqdXN0IGdlbmVyYXRlIHRoZSB2YWx1 ZXMgZm9yIHRoZQ0KPiB0YXJnZXQgYml0ZmllbGQuIEl0J3MgcmVzcG9uc2liaWxpdHkgb2YgdGhl IGNhbGxlciB0byBPUiBpdCB3aXRoIHRoZQ0KPiByZXN0IG9mIHRoZSByZWdpc3Rlci4gVGhhdCB3 YXkgaXQncyBjbGVhciB3aGF0IHRoZSBjb2RlIGRvZXMgZnJvbSByZWFkaW5nDQo+IGl0Lg0KZG9u ZS4NCj4gDQo+IEJlc3QgcmVnYXJkcywNCj4gVG9tYXN6DQo+IA0KDQo=