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=-14.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 8C813C433E0 for ; Sat, 23 May 2020 08:42:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5B53C20757 for ; Sat, 23 May 2020 08:42:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="atRM3qX1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387692AbgEWIm4 (ORCPT ); Sat, 23 May 2020 04:42:56 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:33353 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387641AbgEWImz (ORCPT ); Sat, 23 May 2020 04:42:55 -0400 X-UUID: 2576db3c991f4dfaa1748f1d6577cffe-20200523 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=fLUML1paBXlljV67aj24+7MW0niD7kbd9M1hvJM29HM=; b=atRM3qX11QT41qnfrPLW+okDkx8yoqS+/wGbk+tDkMf9xVIDb5J6zGuIU45P2lHptledWhk4rd5DTrCxh+wXv08fEHkufsxBPIHnmsiwdnqCtca5VUQzGQzzQyMX3EjbuHuT4SOrzd7soxQOV8R7MhA07+x0jzBBZISn9ksmYDs=; X-UUID: 2576db3c991f4dfaa1748f1d6577cffe-20200523 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1823396620; Sat, 23 May 2020 16:42:47 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 23 May 2020 16:42:45 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sat, 23 May 2020 16:42:44 +0800 From: Dongchun Zhu To: , , , , , , , , , , CC: , , , , , , , , Subject: [V9, 2/2] media: i2c: ov02a10: Add OV02A10 image sensor driver Date: Sat, 23 May 2020 16:41:03 +0800 Message-ID: <20200523084103.31276-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20200523084103.31276-1-dongchun.zhu@mediatek.com> References: <20200523084103.31276-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain 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 QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgT1YwMkExMCBpbWFnZSBzZW5zb3IuDQoN ClNpZ25lZC1vZmYtYnk6IERvbmdjaHVuIFpodSA8ZG9uZ2NodW4uemh1QG1lZGlhdGVrLmNvbT4N Ci0tLQ0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KIGRyaXZlcnMvbWVk aWEvaTJjL0tjb25maWcgICB8ICAgMTMgKw0KIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlICB8 ICAgIDEgKw0KIGRyaXZlcnMvbWVkaWEvaTJjL292MDJhMTAuYyB8IDEwMjUgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDQgZmlsZXMgY2hhbmdlZCwgMTA0MCBp bnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvaTJjL292MDJh MTAuYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KaW5kZXggNjNh MjMzNS4uZTc2NzdjNSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQorKysgYi9NQUlOVEFJTkVS Uw0KQEAgLTEyMzk1LDYgKzEyMzk1LDcgQEAgTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3Jn DQogUzoJTWFpbnRhaW5lZA0KIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdp dA0KIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMvb3Z0aSxv djAyYTEwLnlhbWwNCitGOglkcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMNCiANCiBPTU5JVklT SU9OIE9WMTM4NTggU0VOU09SIERSSVZFUg0KIE06CVNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVz QGxpbnV4LmludGVsLmNvbT4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmln IGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KaW5kZXggMTI1ZDU5Ni4uZDg1NzJjZCAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCisrKyBiL2RyaXZlcnMvbWVkaWEv aTJjL0tjb25maWcNCkBAIC02NTUsNiArNjU1LDE5IEBAIGNvbmZpZyBWSURFT19JTVgzNTUNCiAJ ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUN CiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW14MzU1Lg0KIA0KK2NvbmZpZyBWSURFT19PVjAy QTEwDQorCXRyaXN0YXRlICJPbW5pVmlzaW9uIE9WMDJBMTAgc2Vuc29yIHN1cHBvcnQiDQorCWRl cGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDINCisJc2VsZWN0IE1FRElBX0NPTlRST0xMRVINCisJ c2VsZWN0IFZJREVPX1Y0TDJfU1VCREVWX0FQSQ0KKwlzZWxlY3QgVjRMMl9GV05PREUNCisJaGVs cA0KKwkgIFRoaXMgaXMgYSBWaWRlbzRMaW51eDIgc2Vuc29yIGRyaXZlciBmb3IgdGhlIE9tbmlW aXNpb24NCisJICBPVjAyQTEwIGNhbWVyYS4NCisNCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVy IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUNCisJICBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgb3YwMmExMC4NCisNCiBjb25maWcgVklERU9fT1YyNjQwDQogCXRyaXN0YXRlICJPbW5pVmlz aW9uIE9WMjY0MCBzZW5zb3Igc3VwcG9ydCINCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEky Qw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUNCmluZGV4IDc3YmY3ZDAuLjY1NjZkZDkgMTAwNjQ0DQotLS0gYS9kcml2 ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUN CkBAIC02Myw2ICs2Myw3IEBAIG9iai0kKENPTkZJR19WSURFT19WUDI3U01QWCkgKz0gdnAyN3Nt cHgubw0KIG9iai0kKENPTkZJR19WSURFT19TT05ZX0JURl9NUFgpICs9IHNvbnktYnRmLW1weC5v DQogb2JqLSQoQ09ORklHX1ZJREVPX1VQRDY0MDMxQSkgKz0gdXBkNjQwMzFhLm8NCiBvYmotJChD T05GSUdfVklERU9fVVBENjQwODMpICs9IHVwZDY0MDgzLm8NCitvYmotJChDT05GSUdfVklERU9f T1YwMkExMCkgKz0gb3YwMmExMC5vDQogb2JqLSQoQ09ORklHX1ZJREVPX09WMjY0MCkgKz0gb3Yy NjQwLm8NCiBvYmotJChDT05GSUdfVklERU9fT1YyNjgwKSArPSBvdjI2ODAubw0KIG9iai0kKENP TkZJR19WSURFT19PVjI2ODUpICs9IG92MjY4NS5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp YS9pMmMvb3YwMmExMC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMTYwYTBiNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIv ZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQpAQCAtMCwwICsxLDEwMjUgQEANCisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8vIENvcHlyaWdodCAoYykgMjAyMCBNZWRp YVRlayBJbmMuDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bp by9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5o Pg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWFzeW5jLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDIt Y3RybHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVk aWEvdjRsMi1md25vZGUuaD4NCisNCisjZGVmaW5lIENISVBfSUQJCQkJCQkweDI1MDkNCisjZGVm aW5lIE9WMDJBMTBfUkVHX0NISVBfSURfSAkJCQkweDAyDQorI2RlZmluZSBPVjAyQTEwX1JFR19D SElQX0lEX0wJCQkJMHgwMw0KKw0KKy8qIEJpdFsxXSB2ZXJ0aWNhbCB1cHNpZGUgZG93biAqLw0K Ky8qIEJpdFswXSBob3Jpem9udGFsIG1pcnJvciAqLw0KKyNkZWZpbmUgUkVHX01JUlJPUl9GTElQ X0NPTlRST0wJCQkJMHgzZg0KKw0KKy8qIE9yaWVudGF0aW9uICovDQorI2RlZmluZSBSRUdfTUlS Uk9SX0ZMSVBfRU5BQkxFCQkJCTB4MDMNCisNCisvKiBCaXRbMjowXSBNSVBJIHRyYW5zbWlzc2lv biBzcGVlZCBzZWxlY3QgKi8NCisjZGVmaW5lIFRYX1NQRUVEX0FSRUFfU0VMCQkJCTB4YTENCisj ZGVmaW5lIE9WMDJBMTBfTUlQSV9UWF9TUEVFRF9ERUZBVUxUCQkJMHgwMw0KKw0KKyNkZWZpbmUg UkVHX1BBR0VfU1dJVENICQkJCQkweGZkDQorI2RlZmluZSBSRUdfR0xPQkFMX0VGRkVDVElWRQkJ CQkweDAxDQorI2RlZmluZSBSRUdfRU5BQkxFCQkJCQlCSVQoMCkNCisNCisjZGVmaW5lIFJFR19T Q19DVFJMX01PREUJCQkJMHhhYw0KKyNkZWZpbmUgU0NfQ1RSTF9NT0RFX1NUQU5EQlkJCQkJMHgw MA0KKyNkZWZpbmUgU0NfQ1RSTF9NT0RFX1NUUkVBTUlORwkJCQkweDAxDQorDQorI2RlZmluZSBP VjAyQTEwX0VYUF9TSElGVAkJCQk4DQorI2RlZmluZSBPVjAyQTEwX1JFR19FWFBPU1VSRV9ICQkJ CTB4MDMNCisjZGVmaW5lIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0wJCQkJMHgwNA0KKyNkZWZpbmUJ T1YwMkExMF9FWFBPU1VSRV9NSU4JCQkJNA0KKyNkZWZpbmUgT1YwMkExMF9FWFBPU1VSRV9NQVhf TUFSR0lOCQkJNA0KKyNkZWZpbmUJT1YwMkExMF9FWFBPU1VSRV9TVEVQCQkJCTENCisNCisjZGVm aW5lIE9WMDJBMTBfVlRTX1NISUZUCQkJCTgNCisjZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19ICQkJ CTB4MDUNCisjZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19MCQkJCTB4MDYNCisjZGVmaW5lIE9WMDJB MTBfQkFTSUNfTElORQkJCQkxMjI0DQorDQorI2RlZmluZSBPVjAyQTEwX1JFR19HQUlOCQkJCTB4 MjQNCisjZGVmaW5lIE9WMDJBMTBfR0FJTl9NSU4JCQkJMHgxMA0KKyNkZWZpbmUgT1YwMkExMF9H QUlOX01BWAkJCQkweGY4DQorI2RlZmluZSBPVjAyQTEwX0dBSU5fU1RFUAkJCQkweDAxDQorI2Rl ZmluZSBPVjAyQTEwX0dBSU5fREVGQVVMVAkJCQkweDQwDQorDQorLyogVGVzdCBwYXR0ZXJuIGNv bnRyb2wgKi8NCisjZGVmaW5lIE9WMDJBMTBfUkVHX1RFU1RfUEFUVEVSTgkJCTB4YjYNCisNCisj ZGVmaW5lIEhaX1BFUl9NSFoJCQkJCTEwMDAwMDBMDQorI2RlZmluZSBPVjAyQTEwX0xJTktfRlJF UV8zOTBNSFoJCQkoMzkwICogSFpfUEVSX01IWikNCisjZGVmaW5lIE9WMDJBMTBfRUNMS19GUkVR CQkJCSgyNCAqIEhaX1BFUl9NSFopDQorI2RlZmluZSBPVjAyQTEwX0RBVEFfTEFORVMJCQkJMQ0K KyNkZWZpbmUgT1YwMkExMF9CSVRTX1BFUl9TQU1QTEUJCQkJMTANCisNCitzdGF0aWMgY29uc3Qg Y2hhciAqIGNvbnN0IG92MDJhMTBfc3VwcGx5X25hbWVzW10gPSB7DQorCSJkb3ZkZCIsCS8qIERp Z2l0YWwgSS9PIHBvd2VyICovDQorCSJhdmRkIiwJCS8qIEFuYWxvZyBwb3dlciAqLw0KKwkiZHZk ZCIsCQkvKiBEaWdpdGFsIGNvcmUgcG93ZXIgKi8NCit9Ow0KKw0KK3N0cnVjdCBvdjAyYTEwX3Jl ZyB7DQorCXU4IGFkZHI7DQorCXU4IHZhbDsNCit9Ow0KKw0KK3N0cnVjdCBvdjAyYTEwX3JlZ19s aXN0IHsNCisJdTMyIG51bV9vZl9yZWdzOw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgKnJl Z3M7DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMF9tb2RlIHsNCisJdTMyIHdpZHRoOw0KKwl1MzIg aGVpZ2h0Ow0KKwl1MzIgZXhwX2RlZjsNCisJdTMyIGh0c19kZWY7DQorCXUzMiB2dHNfZGVmOw0K Kwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCByZWdfbGlzdDsNCit9Ow0KKw0KK3N0cnVj dCBvdjAyYTEwIHsNCisJdTMyIGVjbGtfZnJlcTsNCisJdTMyIG1pcGlfY2xvY2tfdHhfc3BlZWQ7 DQorDQorCXN0cnVjdCBjbGsgKmVjbGs7DQorCXN0cnVjdCBncGlvX2Rlc2MgKnBkX2dwaW87DQor CXN0cnVjdCBncGlvX2Rlc2MgKm5fcnN0X2dwaW87DQorCXN0cnVjdCByZWd1bGF0b3JfYnVsa19k YXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpXTsNCisNCisJYm9v bCBzdHJlYW1pbmc7DQorCWJvb2wgdXBzaWRlX2Rvd247DQorDQorCS8qDQorCSAqIFNlcmlhbGl6 ZSBjb250cm9sIGFjY2VzcywgZ2V0L3NldCBmb3JtYXQsIGdldCBzZWxlY3Rpb24NCisJICogYW5k IHN0YXJ0IHN0cmVhbWluZy4NCisJICovDQorCXN0cnVjdCBtdXRleCBtdXRleDsNCisJc3RydWN0 IHY0bDJfc3ViZGV2IHN1YmRldjsNCisJc3RydWN0IG1lZGlhX3BhZCBwYWQ7DQorCXN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgZm10Ow0KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3RybF9o YW5kbGVyOw0KKwlzdHJ1Y3QgdjRsMl9jdHJsICpleHBvc3VyZTsNCisNCisJY29uc3Qgc3RydWN0 IG92MDJhMTBfbW9kZSAqY3VyX21vZGU7DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBv djAyYTEwICp0b19vdjAyYTEwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpDQorew0KKwlyZXR1cm4g Y29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3YwMmExMCwgc3ViZGV2KTsNCit9DQorDQorLyoNCisg KiBlY2xrIDI0TWh6DQorICogcGNsayAzOU1oeg0KKyAqIGxpbmVsZW5ndGggOTM0KDB4M2E2KQ0K KyAqIGZyYW1lbGVuZ3RoIDEzOTAoMHg1NkUpDQorICogZ3JhYndpbmRvd193aWR0aCAxNjAwDQor ICogZ3JhYndpbmRvd19oZWlnaHQgMTIwMA0KKyAqIG1heF9mcmFtZXJhdGUgMzBmcHMNCisgKiBt aXBpX2RhdGFyYXRlIHBlciBsYW5lIDc4ME1icHMNCisgKi8NCitzdGF0aWMgY29uc3Qgc3RydWN0 IG92MDJhMTBfcmVnIG92MDJhMTBfMTYwMHgxMjAwX3JlZ3NbXSA9IHsNCisJezB4ZmQsIDB4MDF9 LA0KKwl7MHhhYywgMHgwMH0sDQorCXsweGZkLCAweDAwfSwNCisJezB4MmYsIDB4Mjl9LA0KKwl7 MHgzNCwgMHgwMH0sDQorCXsweDM1LCAweDIxfSwNCisJezB4MzAsIDB4MTV9LA0KKwl7MHgzMywg MHgwMX0sDQorCXsweGZkLCAweDAxfSwNCisJezB4NDQsIDB4MDB9LA0KKwl7MHgyYSwgMHg0Y30s DQorCXsweDJiLCAweDFlfSwNCisJezB4MmMsIDB4NjB9LA0KKwl7MHgyNSwgMHgxMX0sDQorCXsw eDAzLCAweDAxfSwNCisJezB4MDQsIDB4YWV9LA0KKwl7MHgwOSwgMHgwMH0sDQorCXsweDBhLCAw eDAyfSwNCisJezB4MDYsIDB4YTZ9LA0KKwl7MHgzMSwgMHgwMH0sDQorCXsweDI0LCAweDQwfSwN CisJezB4MDEsIDB4MDF9LA0KKwl7MHhmYiwgMHg3M30sDQorCXsweGZkLCAweDAxfSwNCisJezB4 MTYsIDB4MDR9LA0KKwl7MHgxYywgMHgwOX0sDQorCXsweDIxLCAweDQyfSwNCisJezB4MTIsIDB4 MDR9LA0KKwl7MHgxMywgMHgxMH0sDQorCXsweDExLCAweDQwfSwNCisJezB4MzMsIDB4ODF9LA0K Kwl7MHhkMCwgMHgwMH0sDQorCXsweGQxLCAweDAxfSwNCisJezB4ZDIsIDB4MDB9LA0KKwl7MHg1 MCwgMHgxMH0sDQorCXsweDUxLCAweDIzfSwNCisJezB4NTIsIDB4MjB9LA0KKwl7MHg1MywgMHgx MH0sDQorCXsweDU0LCAweDAyfSwNCisJezB4NTUsIDB4MjB9LA0KKwl7MHg1NiwgMHgwMn0sDQor CXsweDU4LCAweDQ4fSwNCisJezB4NWQsIDB4MTV9LA0KKwl7MHg1ZSwgMHgwNX0sDQorCXsweDY2 LCAweDY2fSwNCisJezB4NjgsIDB4Njh9LA0KKwl7MHg2YiwgMHgwMH0sDQorCXsweDZjLCAweDAw fSwNCisJezB4NmYsIDB4NDB9LA0KKwl7MHg3MCwgMHg0MH0sDQorCXsweDcxLCAweDBhfSwNCisJ ezB4NzIsIDB4ZjB9LA0KKwl7MHg3MywgMHgxMH0sDQorCXsweDc1LCAweDgwfSwNCisJezB4NzYs IDB4MTB9LA0KKwl7MHg4NCwgMHgwMH0sDQorCXsweDg1LCAweDEwfSwNCisJezB4ODYsIDB4MTB9 LA0KKwl7MHg4NywgMHgwMH0sDQorCXsweDhhLCAweDIyfSwNCisJezB4OGIsIDB4MjJ9LA0KKwl7 MHgxOSwgMHhmMX0sDQorCXsweDI5LCAweDAxfSwNCisJezB4ZmQsIDB4MDF9LA0KKwl7MHg5ZCwg MHgxNn0sDQorCXsweGEwLCAweDI5fSwNCisJezB4YTEsIDB4MDN9LA0KKwl7MHhhZCwgMHg2Mn0s DQorCXsweGFlLCAweDAwfSwNCisJezB4YWYsIDB4ODV9LA0KKwl7MHhiMSwgMHgwMX0sDQorCXsw eDhlLCAweDA2fSwNCisJezB4OGYsIDB4NDB9LA0KKwl7MHg5MCwgMHgwNH0sDQorCXsweDkxLCAw eGIwfSwNCisJezB4NDUsIDB4MDF9LA0KKwl7MHg0NiwgMHgwMH0sDQorCXsweDQ3LCAweDZjfSwN CisJezB4NDgsIDB4MDN9LA0KKwl7MHg0OSwgMHg4Yn0sDQorCXsweDRhLCAweDAwfSwNCisJezB4 NGIsIDB4MDd9LA0KKwl7MHg0YywgMHgwNH0sDQorCXsweDRkLCAweGI3fSwNCisJezB4ZjAsIDB4 NDB9LA0KKwl7MHhmMSwgMHg0MH0sDQorCXsweGYyLCAweDQwfSwNCisJezB4ZjMsIDB4NDB9LA0K Kwl7MHgzZiwgMHgwMH0sDQorCXsweGZkLCAweDAxfSwNCisJezB4MDUsIDB4MDB9LA0KKwl7MHgw NiwgMHhhNn0sDQorCXsweGZkLCAweDAxfSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICog Y29uc3Qgb3YwMmExMF90ZXN0X3BhdHRlcm5fbWVudVtdID0gew0KKwkiRGlzYWJsZWQiLA0KKwki Q29sb3IgQmFyIiwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzNjQgbGlua19mcmVxX21lbnVfaXRl bXNbXSA9IHsNCisJT1YwMkExMF9MSU5LX0ZSRVFfMzkwTUhaLA0KK307DQorDQorc3RhdGljIHU2 NCB0b19waXhlbF9yYXRlKHUzMiBmX2luZGV4KQ0KK3sNCisJdTY0IHBpeGVsX3JhdGUgPSBsaW5r X2ZyZXFfbWVudV9pdGVtc1tmX2luZGV4XSAqIDIgKiBPVjAyQTEwX0RBVEFfTEFORVM7DQorDQor CWRvX2RpdihwaXhlbF9yYXRlLCBPVjAyQTEwX0JJVFNfUEVSX1NBTVBMRSk7DQorDQorCXJldHVy biBwaXhlbF9yYXRlOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG92MDJhMTBfbW9kZSBz dXBwb3J0ZWRfbW9kZXNbXSA9IHsNCisJew0KKwkJLndpZHRoID0gMTYwMCwNCisJCS5oZWlnaHQg PSAxMjAwLA0KKwkJLmV4cF9kZWYgPSAweDAxYWUsDQorCQkuaHRzX2RlZiA9IDB4MDNhNiwNCisJ CS52dHNfZGVmID0gMHgwNTZlLA0KKwkJLnJlZ19saXN0ID0gew0KKwkJCS5udW1fb2ZfcmVncyA9 IEFSUkFZX1NJWkUob3YwMmExMF8xNjAweDEyMDBfcmVncyksDQorCQkJLnJlZ3MgPSBvdjAyYTEw XzE2MDB4MTIwMF9yZWdzLA0KKwkJfSwNCisJfSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgb3YwMmEx MF93cml0ZV9hcnJheShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwNCisJCQkgICAgICAgY29uc3Qg c3RydWN0IG92MDJhMTBfcmVnX2xpc3QgKnJfbGlzdCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwl1bnNp Z25lZCBpbnQgaTsNCisJaW50IHJldDsNCisNCisJZm9yIChpID0gMDsgaSA8IHJfbGlzdC0+bnVt X29mX3JlZ3M7IGkrKykgew0KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGll bnQsIHJfbGlzdC0+cmVnc1tpXS5hZGRyLA0KKwkJCQkJCXJfbGlzdC0+cmVnc1tpXS52YWwpOw0K KwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBvdjAyYTEwX3JlYWRfc21idXMoc3RydWN0IG92MDJhMTAgKm92MDJh MTAsIHVuc2lnbmVkIGNoYXIgcmVnLA0KKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnZhbCkNCit7 DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAy YTEwLT5zdWJkZXYpOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRl X2RhdGEoY2xpZW50LCByZWcpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQor CSp2YWwgPSAodW5zaWduZWQgY2hhcilyZXQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdm9pZCBvdjAyYTEwX2ZpbGxfZm10KGNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUgKm1vZGUs DQorCQkJICAgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmbXQpDQorew0KKwlmbXQtPndp ZHRoID0gbW9kZS0+d2lkdGg7DQorCWZtdC0+aGVpZ2h0ID0gbW9kZS0+aGVpZ2h0Ow0KKwlmbXQt PmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfc2V0 X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9w YWRfY29uZmlnICpjZmcsDQorCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQ0K K3sNCisJc3RydWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCisJc3RydWN0 IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mbXQgPSAmZm10LT5mb3JtYXQ7DQorDQorCW11dGV4 X2xvY2soJm92MDJhMTAtPm11dGV4KTsNCisNCisJaWYgKG92MDJhMTAtPnN0cmVhbWluZykgew0K KwkJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQorCQlyZXR1cm4gLUVCVVNZOw0KKwl9 DQorDQorCS8qIE9ubHkgb25lIHNlbnNvciBtb2RlIHN1cHBvcnRlZCAqLw0KKwltYnVzX2ZtdC0+ Y29kZSA9IG92MDJhMTAtPmZtdC5jb2RlOw0KKwlvdjAyYTEwX2ZpbGxfZm10KG92MDJhMTAtPmN1 cl9tb2RlLCBtYnVzX2ZtdCk7DQorCW92MDJhMTAtPmZtdCA9IGZtdC0+Zm9ybWF0Ow0KKw0KKwlt dXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgb3YwMmExMF9nZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJICAg c3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJCQkgICBzdHJ1Y3QgdjRsMl9z dWJkZXZfZm9ybWF0ICpmbXQpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292 MDJhMTAoc2QpOw0KKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCA9ICZmbXQt PmZvcm1hdDsNCisNCisJbXV0ZXhfbG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlmbXQtPmZv cm1hdCA9IG92MDJhMTAtPmZtdDsNCisJbWJ1c19mbXQtPmNvZGUgPSBvdjAyYTEwLT5mbXQuY29k ZTsNCisJb3YwMmExMF9maWxsX2ZtdChvdjAyYTEwLT5jdXJfbW9kZSwgbWJ1c19mbXQpOw0KKw0K KwltdXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgb3YwMmExMF9lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LA0KKwkJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQorCQkJCSAgc3Ry dWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtICpjb2RlKQ0KK3sNCisJc3RydWN0IG92MDJh MTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCisNCisJaWYgKGNvZGUtPmluZGV4ID49IEFS UkFZX1NJWkUoc3VwcG9ydGVkX21vZGVzKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwljb2Rl LT5jb2RlID0gb3YwMmExMC0+Zm10LmNvZGU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IG92MDJhMTBfZW51bV9mcmFtZV9zaXplcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0K KwkJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJCQkJICAgIHN0 cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0gKmZzZSkNCit7DQorCWlmIChmc2UtPmlu ZGV4ID49IEFSUkFZX1NJWkUoc3VwcG9ydGVkX21vZGVzKSkNCisJCXJldHVybiAtRUlOVkFMOw0K Kw0KKwlmc2UtPm1pbl93aWR0aCAgPSBzdXBwb3J0ZWRfbW9kZXNbZnNlLT5pbmRleF0ud2lkdGg7 DQorCWZzZS0+bWF4X3dpZHRoICA9IHN1cHBvcnRlZF9tb2Rlc1tmc2UtPmluZGV4XS53aWR0aDsN CisJZnNlLT5tYXhfaGVpZ2h0ID0gc3VwcG9ydGVkX21vZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsN CisJZnNlLT5taW5faGVpZ2h0ID0gc3VwcG9ydGVkX21vZGVzW2ZzZS0+aW5kZXhdLmhlaWdodDsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9jaGVja19zZW5zb3Jf aWQoc3RydWN0IG92MDJhMTAgKm92MDJhMTApDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJdTE2IGlkOw0K Kwl1OCBjaGlwX2lkX2g7DQorCXU4IGNoaXBfaWRfbDsNCisJaW50IHJldDsNCisNCisJLyogQ2hl Y2sgc2Vuc29yIHJldmlzaW9uICovDQorCXJldCA9IG92MDJhMTBfcmVhZF9zbWJ1cyhvdjAyYTEw LCBPVjAyQTEwX1JFR19DSElQX0lEX0gsICZjaGlwX2lkX2gpOw0KKwlpZiAocmV0KQ0KKwkJcmV0 dXJuIHJldDsNCisNCisJcmV0ID0gb3YwMmExMF9yZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBf UkVHX0NISVBfSURfTCwgJmNoaXBfaWRfbCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0K Kw0KKwlpZCA9IChjaGlwX2lkX2ggPDwgOCkgfCBjaGlwX2lkX2w7DQorCWlmIChpZCAhPSBDSElQ X0lEKSB7DQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVuZXhwZWN0ZWQgc2Vuc29yIGlkKCUw NHgpXG4iLCBpZCk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBvdjAyYTEwX3Bvd2VyX29uKHN0cnVjdCBkZXZpY2UgKmRldikNCit7 DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7DQorCXN0 cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisJc3Ry dWN0IG92MDJhMTAgKm92MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCisJaW50IHJldDsNCisNCisJ Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPm5fcnN0X2dwaW8sIDApOw0KKwlncGlv ZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+cGRfZ3BpbywgMCk7DQorDQorCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShvdjAyYTEwLT5lY2xrKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBlY2xrXG4iKTsNCisJCXJldHVybiByZXQ7DQor CX0NCisNCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUob3YwMmExMF9z dXBwbHlfbmFtZXMpLA0KKwkJCQkgICAgb3YwMmExMC0+c3VwcGxpZXMpOw0KKwlpZiAocmV0IDwg MCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIpOw0K KwkJZ290byBkaXNhYmxlX2NsazsNCisJfQ0KKwl1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7DQor DQorCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChvdjAyYTEwLT5wZF9ncGlvLCAxKTsNCisJdXNs ZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KKw0KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3Yw MmExMC0+bl9yc3RfZ3BpbywgMSk7DQorCXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsNCisNCisJ cmV0ID0gb3YwMmExMF9jaGVja19zZW5zb3JfaWQob3YwMmExMCk7DQorCWlmIChyZXQpDQorCQln b3RvIGRpc2FibGVfcmVndWxhdG9yOw0KKw0KKwlyZXR1cm4gMDsNCisNCitkaXNhYmxlX3JlZ3Vs YXRvcjoNCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKG92MDJhMTBfc3VwcGx5 X25hbWVzKSwNCisJCQkgICAgICAgb3YwMmExMC0+c3VwcGxpZXMpOw0KK2Rpc2FibGVfY2xrOg0K KwljbGtfZGlzYWJsZV91bnByZXBhcmUob3YwMmExMC0+ZWNsayk7DQorDQorCXJldHVybiByZXQ7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9wb3dlcl9vZmYoc3RydWN0IGRldmljZSAqZGV2 KQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsN CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0K KwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0KKw0KKwlncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+bl9yc3RfZ3BpbywgMCk7DQorCWNsa19kaXNhYmxl X3VucHJlcGFyZShvdjAyYTEwLT5lY2xrKTsNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92 MDJhMTAtPnBkX2dwaW8sIDApOw0KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUo b3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCSAgICAgICBvdjAyYTEwLT5zdXBwbGllcyk7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IF9fb3YwMmExMF9zdGFydF9zdHJlYW0o c3RydWN0IG92MDJhMTAgKm92MDJhMTApDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJY29uc3Qgc3RydWN0 IG92MDJhMTBfcmVnX2xpc3QgKnJlZ19saXN0Ow0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBBcHBseSBk ZWZhdWx0IHZhbHVlcyBvZiBjdXJyZW50IG1vZGUgKi8NCisJcmVnX2xpc3QgPSAmb3YwMmExMC0+ Y3VyX21vZGUtPnJlZ19saXN0Ow0KKwlyZXQgPSBvdjAyYTEwX3dyaXRlX2FycmF5KG92MDJhMTAs IHJlZ19saXN0KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIEFwcGx5IGN1 c3RvbWl6ZWQgdmFsdWVzIGZyb20gdXNlciAqLw0KKwlyZXQgPSBfX3Y0bDJfY3RybF9oYW5kbGVy X3NldHVwKG92MDJhMTAtPnN1YmRldi5jdHJsX2hhbmRsZXIpOw0KKwlpZiAocmV0KQ0KKwkJcmV0 dXJuIHJldDsNCisNCisJLyogU2V0IG9yaWVudGF0aW9uIHRvIDE4MCBkZWdyZWUgKi8NCisJaWYg KG92MDJhMTAtPnVwc2lkZV9kb3duKSB7DQorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9k YXRhKGNsaWVudCwgUkVHX01JUlJPUl9GTElQX0NPTlRST0wsDQorCQkJCQkJUkVHX01JUlJPUl9G TElQX0VOQUJMRSk7DQorCQlpZiAocmV0KSB7DQorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJm YWlsZWQgdG8gc2V0IG9yaWVudGF0aW9uXG4iKTsNCisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKwkJ cmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNU SVZFLA0KKwkJCQkJCVJFR19FTkFCTEUpOw0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJl dDsNCisJfQ0KKw0KKwkvKiBTZXQgbWlwaSBUWCBzcGVlZCBhY2NvcmRpbmcgdG8gRFQgcHJvcGVy dHkgKi8NCisJaWYgKG92MDJhMTAtPm1pcGlfY2xvY2tfdHhfc3BlZWQgIT0gT1YwMkExMF9NSVBJ X1RYX1NQRUVEX0RFRkFVTFQpIHsNCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEo Y2xpZW50LCBUWF9TUEVFRF9BUkVBX1NFTCwNCisJCQkJCQlvdjAyYTEwLT5taXBpX2Nsb2NrX3R4 X3NwZWVkKTsNCisJCWlmIChyZXQgPCAwKQ0KKwkJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyog U2V0IHN0cmVhbSBvbiByZWdpc3RlciAqLw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVf ZGF0YShjbGllbnQsIFJFR19TQ19DVFJMX01PREUsDQorCQkJCQkgU0NfQ1RSTF9NT0RFX1NUUkVB TUlORyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19vdjAyYTEwX3N0b3Bfc3RyZWFtKHN0cnVjdCBv djAyYTEwICpvdjAyYTEwKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJf Z2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorDQorCXJldHVybiBpMmNfc21idXNf d3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCisJCQkJCSBTQ19DVFJM X01PREVfU1RBTkRCWSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9lbnRpdHlfaW5pdF9j Zmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCisJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9jb25maWcgKmNmZykNCit7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0gew0K KwkJLndoaWNoID0gY2ZnID8gVjRMMl9TVUJERVZfRk9STUFUX1RSWSA6IFY0TDJfU1VCREVWX0ZP Uk1BVF9BQ1RJVkUsDQorCQkuZm9ybWF0ID0gew0KKwkJCS53aWR0aCA9IDE2MDAsDQorCQkJLmhl aWdodCA9IDEyMDAsDQorCQl9DQorCX07DQorDQorCW92MDJhMTBfc2V0X2ZtdChzZCwgY2ZnLCAm Zm10KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zX3N0cmVh bShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgb24pDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAq b3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0g djRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJ bXV0ZXhfbG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlpZiAob3YwMmExMC0+c3RyZWFtaW5n ID09IG9uKQ0KKwkJZ290byB1bmxvY2tfYW5kX3JldHVybjsNCisNCisJaWYgKG9uKSB7DQorCQly ZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZjbGllbnQtPmRldik7DQorCQlpZiAocmV0IDwgMCkg ew0KKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmY2xpZW50LT5kZXYpOw0KKwkJCWdvdG8gdW5s b2NrX2FuZF9yZXR1cm47DQorCQl9DQorDQorCQlyZXQgPSBfX292MDJhMTBfc3RhcnRfc3RyZWFt KG92MDJhMTApOw0KKwkJaWYgKHJldCkgew0KKwkJCV9fb3YwMmExMF9zdG9wX3N0cmVhbShvdjAy YTEwKTsNCisJCQlvdjAyYTEwLT5zdHJlYW1pbmcgPSAhb247DQorCQkJZ290byBlcnJfcnBtX3B1 dDsNCisJCX0NCisJfSBlbHNlIHsNCisJCV9fb3YwMmExMF9zdG9wX3N0cmVhbShvdjAyYTEwKTsN CisJCXBtX3J1bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQorCX0NCisNCisJb3YwMmExMC0+c3Ry ZWFtaW5nID0gb247DQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1 cm4gMDsNCisNCitlcnJfcnBtX3B1dDoNCisJcG1fcnVudGltZV9wdXQoJmNsaWVudC0+ZGV2KTsN Cit1bmxvY2tfYW5kX3JldHVybjoNCisJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQor DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBv djAyYTEwX3BtX29wcyA9IHsNCisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9m b3JjZV9zdXNwZW5kLA0KKwkJCQlwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkNCisJU0VUX1JVTlRJ TUVfUE1fT1BTKG92MDJhMTBfcG93ZXJfb2ZmLCBvdjAyYTEwX3Bvd2VyX29uLCBOVUxMKQ0KK307 DQorDQorLyoNCisgKiBvdjAyYTEwX3NldF9leHBvc3VyZSAtIEZ1bmN0aW9uIGNhbGxlZCB3aGVu IHNldHRpbmcgZXhwb3N1cmUgdGltZQ0KKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1 Y3R1cmUNCisgKiBAdmFsOiBWYXJpYWJsZSBmb3IgZXhwb3N1cmUgdGltZSwgaW4gdGhlIHVuaXQg b2YgbWljcm8tc2Vjb25kDQorICoNCisgKiBTZXQgZXhwb3N1cmUgdGltZSBiYXNlZCBvbiBpbnB1 dCB2YWx1ZS4NCisgKg0KKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQorICovDQorc3RhdGljIGlu dCBvdjAyYTEwX3NldF9leHBvc3VyZShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkN Cit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZv djAyYTEwLT5zdWJkZXYpOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVf Ynl0ZV9kYXRhKGNsaWVudCwgUkVHX1BBR0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJl dCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9k YXRhKGNsaWVudCwgT1YwMkExMF9SRUdfRVhQT1NVUkVfSCwNCisJCQkJCXZhbCA+PiBPVjAyQTEw X0VYUF9TSElGVCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0g aTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0ws IHZhbCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0dXJuIGkyY19z bWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJ CSBSRUdfRU5BQkxFKTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9nYWluKHN0cnVj dCBvdjAyYTEwICpvdjAyYTEwLCBpbnQgdmFsKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWludCByZXQ7 DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfUEFHRV9T V0lUQ0gsIFJFR19FTkFCTEUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQor CXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19HQUlO LCB2YWwpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBpMmNf c21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQorCQkJ CQkgUkVHX0VOQUJMRSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zZXRfdmJsYW5rKHN0 cnVjdCBvdjAyYTEwICpvdjAyYTEwLCBpbnQgdmFsKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCXUzMiB2 dHMgPSB2YWwgKyBvdjAyYTEwLT5jdXJfbW9kZS0+aGVpZ2h0IC0gT1YwMkExMF9CQVNJQ19MSU5F Ow0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVu dCwgUkVHX1BBR0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1Yw MkExMF9SRUdfVlRTX0gsDQorCQkJCQl2dHMgPj4gT1YwMkExMF9WVFNfU0hJRlQpOw0KKwlpZiAo cmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRl X2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19WVFNfTCwgdnRzKTsNCisJaWYgKHJldCA8IDApDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGll bnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KKwkJCQkJIFJFR19FTkFCTEUpOw0KK30NCisNCitz dGF0aWMgaW50IG92MDJhMTBfc2V0X3Rlc3RfcGF0dGVybihzdHJ1Y3Qgb3YwMmExMCAqb3YwMmEx MCwgaW50IHBhdHRlcm4pDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9n ZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0g aTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VO QUJMRSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3Nt YnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX1RFU1RfUEFUVEVSTiwNCisJ CQkJCXBhdHRlcm4pOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9 IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwN CisJCQkJCVJFR19FTkFCTEUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQor CXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9E RSwNCisJCQkJCSBTQ19DVFJMX01PREVfU1RSRUFNSU5HKTsNCit9DQorDQorc3RhdGljIGludCBv djAyYTEwX3NldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQorew0KKwlzdHJ1Y3Qgb3Yw MmExMCAqb3YwMmExMCA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLA0KKwkJCQkJICAgICAg IHN0cnVjdCBvdjAyYTEwLCBjdHJsX2hhbmRsZXIpOw0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJczY0IG1heF9l eHBvOw0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBQcm9wYWdhdGUgY2hhbmdlIG9mIGN1cnJlbnQgY29u dHJvbCB0byBhbGwgcmVsYXRlZCBjb250cm9scyAqLw0KKwlpZiAoY3RybC0+aWQgPT0gVjRMMl9D SURfVkJMQU5LKSB7DQorCQkvKiBVcGRhdGUgbWF4IGV4cG9zdXJlIHdoaWxlIG1lZXRpbmcgZXhw ZWN0ZWQgdmJsYW5raW5nICovDQorCQltYXhfZXhwbyA9IG92MDJhMTAtPmN1cl9tb2RlLT5oZWln aHQgKyBjdHJsLT52YWwgLQ0KKwkJCSAgIE9WMDJBMTBfRVhQT1NVUkVfTUFYX01BUkdJTjsNCisJ CV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShvdjAyYTEwLT5leHBvc3VyZSwNCisJCQkJCSBvdjAy YTEwLT5leHBvc3VyZS0+bWluaW11bSwgbWF4X2V4cG8sDQorCQkJCQkgb3YwMmExMC0+ZXhwb3N1 cmUtPnN0ZXAsDQorCQkJCQkgb3YwMmExMC0+ZXhwb3N1cmUtPmRlZmF1bHRfdmFsdWUpOw0KKwl9 DQorDQorCS8qIFY0TDIgY29udHJvbHMgdmFsdWVzIHdpbGwgYmUgYXBwbGllZCBvbmx5IHdoZW4g cG93ZXIgaXMgYWxyZWFkeSB1cCAqLw0KKwlpZiAoIXBtX3J1bnRpbWVfZ2V0X2lmX2luX3VzZSgm Y2xpZW50LT5kZXYpKQ0KKwkJcmV0dXJuIDA7DQorDQorCXN3aXRjaCAoY3RybC0+aWQpIHsNCisJ Y2FzZSBWNEwyX0NJRF9FWFBPU1VSRToNCisJCXJldCA9IG92MDJhMTBfc2V0X2V4cG9zdXJlKG92 MDJhMTAsIGN0cmwtPnZhbCk7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9H QUlOOg0KKwkJcmV0ID0gb3YwMmExMF9zZXRfZ2FpbihvdjAyYTEwLCBjdHJsLT52YWwpOw0KKwkJ YnJlYWs7DQorCWNhc2UgVjRMMl9DSURfVkJMQU5LOg0KKwkJcmV0ID0gb3YwMmExMF9zZXRfdmJs YW5rKG92MDJhMTAsIGN0cmwtPnZhbCk7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9URVNU X1BBVFRFUk46DQorCQlyZXQgPSBvdjAyYTEwX3NldF90ZXN0X3BhdHRlcm4ob3YwMmExMCwgY3Ry bC0+dmFsKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWJy ZWFrOw0KKwl9Ow0KKw0KKwlwbV9ydW50aW1lX3B1dCgmY2xpZW50LT5kZXYpOw0KKw0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29w cyBvdjAyYTEwX3ZpZGVvX29wcyA9IHsNCisJLnNfc3RyZWFtID0gb3YwMmExMF9zX3N0cmVhbSwN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX29wcyBvdjAyYTEw X3BhZF9vcHMgPSB7DQorCS5pbml0X2NmZyA9IG92MDJhMTBfZW50aXR5X2luaXRfY2ZnLA0KKwku ZW51bV9tYnVzX2NvZGUgPSBvdjAyYTEwX2VudW1fbWJ1c19jb2RlLA0KKwkuZW51bV9mcmFtZV9z aXplID0gb3YwMmExMF9lbnVtX2ZyYW1lX3NpemVzLA0KKwkuZ2V0X2ZtdCA9IG92MDJhMTBfZ2V0 X2ZtdCwNCisJLnNldF9mbXQgPSBvdjAyYTEwX3NldF9mbXQsDQorfTsNCisNCitzdGF0aWMgY29u c3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdjAyYTEwX3N1YmRldl9vcHMgPSB7DQorCS52aWRl bwk9ICZvdjAyYTEwX3ZpZGVvX29wcywNCisJLnBhZAk9ICZvdjAyYTEwX3BhZF9vcHMsDQorfTsN CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIG92MDJhMTBf c3ViZGV2X2VudGl0eV9vcHMgPSB7DQorCS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlu a192YWxpZGF0ZSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBv djAyYTEwX2N0cmxfb3BzID0gew0KKwkuc19jdHJsID0gb3YwMmExMF9zZXRfY3RybCwNCit9Ow0K Kw0KK3N0YXRpYyBpbnQgb3YwMmExMF9pbml0aWFsaXplX2NvbnRyb2xzKHN0cnVjdCBvdjAyYTEw ICpvdjAyYTEwKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1 YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUg Km1vZGU7DQorCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGFuZGxlcjsNCisJc3RydWN0IHY0 bDJfY3RybCAqY3RybDsNCisJdTY0IGV4cG9zdXJlX21heDsNCisJdTMyIHBpeGVsX3JhdGU7DQor CWludCByZXQ7DQorDQorCWhhbmRsZXIgPSAmb3YwMmExMC0+Y3RybF9oYW5kbGVyOw0KKwltb2Rl ID0gb3YwMmExMC0+Y3VyX21vZGU7DQorCXJldCA9IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoaGFu ZGxlciwgNyk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwloYW5kbGVyLT5sb2Nr ID0gJm92MDJhMTAtPm11dGV4Ow0KKw0KKwljdHJsID0gdjRsMl9jdHJsX25ld19pbnRfbWVudSho YW5kbGVyLCBOVUxMLCBWNEwyX0NJRF9MSU5LX0ZSRVEsIDAsIDAsDQorCQkJCSAgICAgIGxpbmtf ZnJlcV9tZW51X2l0ZW1zKTsNCisJaWYgKGN0cmwpDQorCQljdHJsLT5mbGFncyB8PSBWNEwyX0NU UkxfRkxBR19SRUFEX09OTFk7DQorDQorCXBpeGVsX3JhdGUgPSB0b19waXhlbF9yYXRlKDApOw0K Kwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCBOVUxMLCBWNEwyX0NJRF9QSVhFTF9SQVRFLCAw LCBwaXhlbF9yYXRlLCAxLA0KKwkJCSAgcGl4ZWxfcmF0ZSk7DQorDQorCWV4cG9zdXJlX21heCA9 IG1vZGUtPnZ0c19kZWYgLSA0Ow0KKwlvdjAyYTEwLT5leHBvc3VyZSA9IHY0bDJfY3RybF9uZXdf c3RkKGhhbmRsZXIsICZvdjAyYTEwX2N0cmxfb3BzLA0KKwkJCQkJICAgICAgVjRMMl9DSURfRVhQ T1NVUkUsDQorCQkJCQkgICAgICBPVjAyQTEwX0VYUE9TVVJFX01JTiwNCisJCQkJCSAgICAgIGV4 cG9zdXJlX21heCwNCisJCQkJCSAgICAgIE9WMDJBMTBfRVhQT1NVUkVfU1RFUCwNCisJCQkJCSAg ICAgIG1vZGUtPmV4cF9kZWYpOw0KKw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3Yw MmExMF9jdHJsX29wcywNCisJCQkgIFY0TDJfQ0lEX0FOQUxPR1VFX0dBSU4sDQorCQkJICBPVjAy QTEwX0dBSU5fTUlOLA0KKwkJCSAgT1YwMkExMF9HQUlOX01BWCwNCisJCQkgIE9WMDJBMTBfR0FJ Tl9TVEVQLA0KKwkJCSAgT1YwMkExMF9HQUlOX0RFRkFVTFQpOw0KKw0KKwl2NGwyX2N0cmxfbmV3 X3N0ZF9tZW51X2l0ZW1zKGhhbmRsZXIsICZvdjAyYTEwX2N0cmxfb3BzLA0KKwkJCQkgICAgIFY0 TDJfQ0lEX1RFU1RfUEFUVEVSTiwNCisJCQkJICAgICBBUlJBWV9TSVpFKG92MDJhMTBfdGVzdF9w YXR0ZXJuX21lbnUpIC0gMSwNCisJCQkJICAgICAwLCAwLCBvdjAyYTEwX3Rlc3RfcGF0dGVybl9t ZW51KTsNCisNCisJaWYgKGhhbmRsZXItPmVycm9yKSB7DQorCQlyZXQgPSBoYW5kbGVyLT5lcnJv cjsNCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgY29udHJvbHMoJWQp XG4iLCByZXQpOw0KKwkJZ290byBlcnJfZnJlZV9oYW5kbGVyOw0KKwl9DQorDQorCW92MDJhMTAt PnN1YmRldi5jdHJsX2hhbmRsZXIgPSBoYW5kbGVyOw0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJf ZnJlZV9oYW5kbGVyOg0KKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOw0KKw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfY2hlY2tfaHdjZmcoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCit7DQorCXN0cnVjdCBmd25v ZGVfaGFuZGxlICplcDsNCisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9IGRldl9md25v ZGUoZGV2KTsNCisJc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50IGJ1c19jZmcgPSB7DQorCQku YnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZLA0KKwl9Ow0KKwl1bnNpZ25lZCBpbnQgaSwg ajsNCisJaW50IHJldDsNCisNCisJaWYgKCFmd25vZGUpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisN CisJZXAgPSBmd25vZGVfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZndub2RlLCBOVUxMKTsNCisJ aWYgKCFlcCkNCisJCXJldHVybiAtRU5YSU87DQorDQorCXJldCA9IHY0bDJfZndub2RlX2VuZHBv aW50X2FsbG9jX3BhcnNlKGVwLCAmYnVzX2NmZyk7DQorCWZ3bm9kZV9oYW5kbGVfcHV0KGVwKTsN CisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWlmICghYnVzX2NmZy5ucl9vZl9saW5r X2ZyZXF1ZW5jaWVzKSB7DQorCQlkZXZfZXJyKGRldiwgIm5vIGxpbmsgZnJlcXVlbmNpZXMgZGVm aW5lZCIpOw0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gY2hlY2tfaHdjZmdfZXJyb3I7DQor CX0NCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGlua19mcmVxX21lbnVfaXRlbXMp OyBpKyspIHsNCisJCWZvciAoaiA9IDA7IGogPCBidXNfY2ZnLm5yX29mX2xpbmtfZnJlcXVlbmNp ZXM7IGorKykgew0KKwkJCWlmIChsaW5rX2ZyZXFfbWVudV9pdGVtc1tpXSA9PQ0KKwkJCQlidXNf Y2ZnLmxpbmtfZnJlcXVlbmNpZXNbal0pDQorCQkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJaWYgKGog PT0gYnVzX2NmZy5ucl9vZl9saW5rX2ZyZXF1ZW5jaWVzKSB7DQorCQkJZGV2X2VycihkZXYsICJu byBsaW5rIGZyZXF1ZW5jeSAlbGxkIHN1cHBvcnRlZCIsDQorCQkJCWxpbmtfZnJlcV9tZW51X2l0 ZW1zW2ldKTsNCisJCQlyZXQgPSAtRUlOVkFMOw0KKwkJCWdvdG8gY2hlY2tfaHdjZmdfZXJyb3I7 DQorCQl9DQorCX0NCisNCitjaGVja19od2NmZ19lcnJvcjoNCisJdjRsMl9md25vZGVfZW5kcG9p bnRfZnJlZSgmYnVzX2NmZyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQg b3YwMmExMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KK3sNCisJc3RydWN0IGRl dmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMDsNCisJ dW5zaWduZWQgaW50IHJvdGF0aW9uOw0KKwl1bnNpZ25lZCBpbnQgY2xvY2tfbGFuZV90eF9zcGVl ZDsNCisJdW5zaWduZWQgaW50IGk7DQorCWludCByZXQ7DQorDQorCW92MDJhMTAgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKm92MDJhMTApLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFvdjAyYTEw KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXJldCA9IG92MDJhMTBfY2hlY2tfaHdjZmcoZGV2 LCBvdjAyYTEwKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY2hl Y2sgSFcgY29uZmlndXJhdGlvbjogJWQiLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0K Kwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmb3YwMmExMC0+c3ViZGV2LCBjbGllbnQsICZvdjAyYTEw X3N1YmRldl9vcHMpOw0KKwlvdjAyYTEwLT5taXBpX2Nsb2NrX3R4X3NwZWVkID0gT1YwMkExMF9N SVBJX1RYX1NQRUVEX0RFRkFVTFQ7DQorCW92MDJhMTAtPmZtdC5jb2RlID0gTUVESUFfQlVTX0ZN VF9TQkdHUjEwXzFYMTA7DQorDQorCS8qIE9wdGlvbmFsIGluZGljYXRpb24gb2YgcGh5c2ljYWwg cm90YXRpb24gb2Ygc2Vuc29yICovDQorCXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihk ZXZfZndub2RlKGRldiksICJyb3RhdGlvbiIsICZyb3RhdGlvbik7DQorCWlmICghcmV0ICYmIHJv dGF0aW9uID09IDE4MCkgew0KKwkJb3YwMmExMC0+dXBzaWRlX2Rvd24gPSB0cnVlOw0KKwkJb3Yw MmExMC0+Zm10LmNvZGUgPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMDsNCisJfQ0KKw0KKwkv KiBPcHRpb25hbCBpbmRpY2F0aW9uIG9mIG1pcGkgVFggc3BlZWQgKi8NCisJcmV0ID0gZndub2Rl X3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgIm92dGksbWlwaS10eC1zcGVlZCIs DQorCQkJCSAgICAgICAmY2xvY2tfbGFuZV90eF9zcGVlZCk7DQorDQorCWlmICghcmV0KQ0KKwkJ b3YwMmExMC0+bWlwaV9jbG9ja190eF9zcGVlZCA9IGNsb2NrX2xhbmVfdHhfc3BlZWQ7DQorDQor CS8qIEdldCBzeXN0ZW0gY2xvY2sgKGVjbGspICovDQorCW92MDJhMTAtPmVjbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAiZWNsayIpOw0KKwlpZiAoSVNfRVJSKG92MDJhMTAtPmVjbGspKSB7DQorCQly ZXQgPSBQVFJfRVJSKG92MDJhMTAtPmVjbGspOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g Z2V0IGVjbGsgJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGZ3 bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksICJjbG9jay1mcmVxdWVuY3ki LA0KKwkJCQkgICAgICAgJm92MDJhMTAtPmVjbGtfZnJlcSk7DQorCWlmIChyZXQpIHsNCisJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBlY2xrIGZyZXF1ZW5jeVxuIik7DQorCQlyZXR1cm4g cmV0Ow0KKwl9DQorDQorCXJldCA9IGNsa19zZXRfcmF0ZShvdjAyYTEwLT5lY2xrLCBvdjAyYTEw LT5lY2xrX2ZyZXEpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBz ZXQgZWNsayBmcmVxdWVuY3kgKDI0TUh6KVxuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CWlmIChjbGtfZ2V0X3JhdGUob3YwMmExMC0+ZWNsaykgIT0gT1YwMkExMF9FQ0xLX0ZSRVEpIHsN CisJCWRldl93YXJuKGRldiwgIndyb25nIGVjbGsgZnJlcXVlbmN5ICVkIEh6LCBleHBlY3RlZDog JWQgSHpcbiIsDQorCQkJIG92MDJhMTAtPmVjbGtfZnJlcSwgT1YwMkExMF9FQ0xLX0ZSRVEpOw0K KwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJb3YwMmExMC0+cGRfZ3BpbyA9IGRldm1fZ3Bp b2RfZ2V0KGRldiwgInBvd2VyZG93biIsIEdQSU9EX09VVF9ISUdIKTsNCisJaWYgKElTX0VSUihv djAyYTEwLT5wZF9ncGlvKSkgew0KKwkJcmV0ID0gUFRSX0VSUihvdjAyYTEwLT5wZF9ncGlvKTsN CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwb3dlcmRvd24tZ3Bpb3MgJWRcbiIsIHJl dCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCW92MDJhMTAtPm5fcnN0X2dwaW8gPSBkZXZt X2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9MT1cpOw0KKwlpZiAoSVNfRVJSKG92 MDJhMTAtPm5fcnN0X2dwaW8pKSB7DQorCQlyZXQgPSBQVFJfRVJSKG92MDJhMTAtPm5fcnN0X2dw aW8pOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0LWdwaW9zICVkXG4iLCBy ZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShvdjAyYTEwX3N1cHBseV9uYW1lcyk7IGkrKykNCisJCW92MDJhMTAtPnN1cHBsaWVzW2ldLnN1 cHBseSA9IG92MDJhMTBfc3VwcGx5X25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX3JlZ3VsYXRv cl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCQkg ICAgICBvdjAyYTEwLT5zdXBwbGllcyk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGdldCByZWd1bGF0b3JzXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJ bXV0ZXhfaW5pdCgmb3YwMmExMC0+bXV0ZXgpOw0KKwlvdjAyYTEwLT5jdXJfbW9kZSA9ICZzdXBw b3J0ZWRfbW9kZXNbMF07DQorCXJldCA9IG92MDJhMTBfaW5pdGlhbGl6ZV9jb250cm9scyhvdjAy YTEwKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBjb250cm9sc1xuIik7DQorCQlnb3RvIGVycl9kZXN0cm95X211dGV4Ow0KKwl9DQorDQorCW92 MDJhMTAtPnN1YmRldi5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCisJb3Yw MmExMC0+c3ViZGV2LmVudGl0eS5vcHMgPSAmb3YwMmExMF9zdWJkZXZfZW50aXR5X29wczsNCisJ b3YwMmExMC0+c3ViZGV2LmVudGl0eS5mdW5jdGlvbiA9IE1FRElBX0VOVF9GX0NBTV9TRU5TT1I7 DQorCW92MDJhMTAtPnBhZC5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7DQorCXJldCA9IG1l ZGlhX2VudGl0eV9wYWRzX2luaXQoJm92MDJhMTAtPnN1YmRldi5lbnRpdHksIDEsICZvdjAyYTEw LT5wYWQpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5p dCBlbnRpdHkgcGFkczogJWQiLCByZXQpOw0KKwkJZ290byBlcnJfZnJlZV9oYW5kbGVyOw0KKwl9 DQorDQorCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQorCWlmICghcG1fcnVudGltZV9lbmFibGVk KGRldikpIHsNCisJCXJldCA9IG92MDJhMTBfcG93ZXJfb24oZGV2KTsNCisJCWlmIChyZXQgPCAw KSB7DQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcG93ZXIgb246ICVkXG4iLCByZXQpOw0K KwkJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlcjsNCisJCX0NCisJfQ0KKw0KKwlyZXQgPSB2NGwyX2Fz eW5jX3JlZ2lzdGVyX3N1YmRldigmb3YwMmExMC0+c3ViZGV2KTsNCisJaWYgKHJldCkgew0KKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgVjRMMiBzdWJkZXY6ICVkIiwgcmV0KTsN CisJCWlmICghcG1fcnVudGltZV9lbmFibGVkKGRldikpDQorCQkJb3YwMmExMF9wb3dlcl9vZmYo ZGV2KTsNCisJCWdvdG8gZXJyX2NsZWFuX2VudGl0eTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisN CitlcnJfY2xlYW5fZW50aXR5Og0KKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmb3YwMmExMC0+c3Vi ZGV2LmVudGl0eSk7DQorZXJyX2ZyZWVfaGFuZGxlcjoNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJl ZShvdjAyYTEwLT5zdWJkZXYuY3RybF9oYW5kbGVyKTsNCitlcnJfZGVzdHJveV9tdXRleDoNCisJ bXV0ZXhfZGVzdHJveSgmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IG92MDJhMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQor ew0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7 DQorCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorDQorCXY0bDJf YXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOw0KKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2Qt PmVudGl0eSk7DQorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoc2QtPmN0cmxfaGFuZGxlcik7DQor CXBtX3J1bnRpbWVfZGlzYWJsZSgmY2xpZW50LT5kZXYpOw0KKwlpZiAoIXBtX3J1bnRpbWVfc3Rh dHVzX3N1c3BlbmRlZCgmY2xpZW50LT5kZXYpKQ0KKwkJb3YwMmExMF9wb3dlcl9vZmYoJmNsaWVu dC0+ZGV2KTsNCisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCZjbGllbnQtPmRldik7DQorCW11 dGV4X2Rlc3Ryb3koJm92MDJhMTAtPm11dGV4KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG92MDJhMTBfb2ZfbWF0Y2hbXSA9IHsNCisJ eyAuY29tcGF0aWJsZSA9ICJvdnRpLG92MDJhMTAiIH0sDQorCXt9DQorfTsNCitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBvdjAyYTEwX29mX21hdGNoKTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19k cml2ZXIgb3YwMmExMF9pMmNfZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAi b3YwMmExMCIsDQorCQkucG0gPSAmb3YwMmExMF9wbV9vcHMsDQorCQkub2ZfbWF0Y2hfdGFibGUg PSBvdjAyYTEwX29mX21hdGNoLA0KKwl9LA0KKwkucHJvYmVfbmV3CT0gJm92MDJhMTBfcHJvYmUs DQorCS5yZW1vdmUJCT0gJm92MDJhMTBfcmVtb3ZlLA0KK307DQorDQorbW9kdWxlX2kyY19kcml2 ZXIob3YwMmExMF9pMmNfZHJpdmVyKTsNCisNCitNT0RVTEVfQVVUSE9SKCJEb25nY2h1biBaaHUg PGRvbmdjaHVuLnpodUBtZWRpYXRlay5jb20+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJPbW5p VmlzaW9uIE9WMDJBMTAgc2Vuc29yIGRyaXZlciIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsNCisNCi0tIA0KMi45LjINCg==