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=-15.1 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=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 23FEDC433E0 for ; Thu, 2 Jul 2020 11:53:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D639D20884 for ; Thu, 2 Jul 2020 11:53:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="mH2sLhNk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728839AbgGBLxM (ORCPT ); Thu, 2 Jul 2020 07:53:12 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:14325 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1728661AbgGBLxK (ORCPT ); Thu, 2 Jul 2020 07:53:10 -0400 X-UUID: 56efd2751a7149f1ae727d046eabc65d-20200702 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=nYzuHQSUBu6aI92Jy4vieT9BF1v9uNv+L1KLy3k+ulg=; b=mH2sLhNkEsOxy/u11srQX31uNYmwP0dLNGQQO+KGgVlogD44wujSjQY3EpvwTegueAvB8KfUXS3KDVMzVewKp9npzESMxeLTOk9ZH1eKWNQWT9eiH9EcLjwM7GZhwzI7d+ws7iI9EgoGTP9qLhDM//v/3CyhFYofAdLPJ+aCbcI=; X-UUID: 56efd2751a7149f1ae727d046eabc65d-20200702 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 79855037; Thu, 02 Jul 2020 19:52:59 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 2 Jul 2020 19:52:54 +0800 Received: from localhost.localdomain (10.17.3.153) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 2 Jul 2020 19:52:54 +0800 From: Dongchun Zhu To: , , , , , , , , , , CC: , , , , , , , , Subject: [PATCH V12 2/2] media: i2c: ov02a10: Add OV02A10 image sensor driver Date: Thu, 2 Jul 2020 19:52:23 +0800 Message-ID: <20200702115223.21507-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20200702115223.21507-1-dongchun.zhu@mediatek.com> References: <20200702115223.21507-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgT1YwMkExMCBpbWFnZSBzZW5zb3IuDQoN ClJldmlld2VkLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0ub3JnPg0KU2lnbmVkLW9m Zi1ieTogRG9uZ2NodW4gWmh1IDxkb25nY2h1bi56aHVAbWVkaWF0ZWsuY29tPg0KLS0tDQogTUFJ TlRBSU5FUlMgICAgICAgICAgICAgICAgIHwgICAgMSArDQogZHJpdmVycy9tZWRpYS9pMmMvS2Nv bmZpZyAgIHwgICAxMyArDQogZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgIHwgICAgMSArDQog ZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jIHwgMTA1MiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrDQogNCBmaWxlcyBjaGFuZ2VkLCAxMDY3IGluc2VydGlvbnMo KykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvb3YwMmExMC5jDQoNCmRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQppbmRleCAzNzhjOTYxLi5hNmEy ZjhiIDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5FUlMNCisrKyBiL01BSU5UQUlORVJTDQpAQCAtMTI1 NjYsNiArMTI1NjYsNyBAQCBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcNCiBTOglNYWlu dGFpbmVkDQogVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0DQogRjoJRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2kyYy9vdnRpLG92MDJhMTAueWFt bA0KK0Y6CWRyaXZlcnMvbWVkaWEvaTJjL292MDJhMTAuYw0KIA0KIE9NTklWSVNJT04gT1YxMzg1 OCBTRU5TT1IgRFJJVkVSDQogTToJU2FrYXJpIEFpbHVzIDxzYWthcmkuYWlsdXNAbGludXguaW50 ZWwuY29tPg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcgYi9kcml2ZXJz L21lZGlhL2kyYy9LY29uZmlnDQppbmRleCBkYTExMDM2Li42NTUxOWNmIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZp Zw0KQEAgLTgxMiw2ICs4MTIsMTkgQEAgY29uZmlnIFZJREVPX0lNWDM1NQ0KIAkgIFRvIGNvbXBp bGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KIAkgIG1vZHVs ZSB3aWxsIGJlIGNhbGxlZCBpbXgzNTUuDQogDQorY29uZmlnIFZJREVPX09WMDJBMTANCisJdHJp c3RhdGUgIk9tbmlWaXNpb24gT1YwMkExMCBzZW5zb3Igc3VwcG9ydCINCisJZGVwZW5kcyBvbiBJ MkMgJiYgVklERU9fVjRMMg0KKwlzZWxlY3QgTUVESUFfQ09OVFJPTExFUg0KKwlzZWxlY3QgVklE RU9fVjRMMl9TVUJERVZfQVBJDQorCXNlbGVjdCBWNEwyX0ZXTk9ERQ0KKwloZWxwDQorCSAgVGhp cyBpcyBhIFZpZGVvNExpbnV4MiBzZW5zb3IgZHJpdmVyIGZvciB0aGUgT21uaVZpc2lvbg0KKwkg IE9WMDJBMTAgY2FtZXJhLg0KKw0KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1 bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdjAyYTEw Lg0KKw0KIGNvbmZpZyBWSURFT19PVjI2NDANCiAJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1YyNjQw IHNlbnNvciBzdXBwb3J0Ig0KIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDDQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtl ZmlsZQ0KaW5kZXggOTkzYWNhYi4uMzg0ZTY3NiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEv aTJjL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KQEAgLTYzLDYg KzYzLDcgQEAgb2JqLSQoQ09ORklHX1ZJREVPX1ZQMjdTTVBYKSArPSB2cDI3c21weC5vDQogb2Jq LSQoQ09ORklHX1ZJREVPX1NPTllfQlRGX01QWCkgKz0gc29ueS1idGYtbXB4Lm8NCiBvYmotJChD T05GSUdfVklERU9fVVBENjQwMzFBKSArPSB1cGQ2NDAzMWEubw0KIG9iai0kKENPTkZJR19WSURF T19VUEQ2NDA4MykgKz0gdXBkNjQwODMubw0KK29iai0kKENPTkZJR19WSURFT19PVjAyQTEwKSAr PSBvdjAyYTEwLm8NCiBvYmotJChDT05GSUdfVklERU9fT1YyNjQwKSArPSBvdjI2NDAubw0KIG9i ai0kKENPTkZJR19WSURFT19PVjI2ODApICs9IG92MjY4MC5vDQogb2JqLSQoQ09ORklHX1ZJREVP X09WMjY4NSkgKz0gb3YyNjg1Lm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9vdjAy YTEwLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwLi44Y2IxYjYxZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9t ZWRpYS9pMmMvb3YwMmExMC5jDQpAQCAtMCwwICsxLDEwNTIgQEANCisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KKy8vIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMu DQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0K KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1l ci5oPg0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGludXgvcmVndWxh dG9yL2NvbnN1bWVyLmg+DQorI2luY2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KKyNpbmNs dWRlIDxtZWRpYS92NGwyLWFzeW5jLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4N CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1m d25vZGUuaD4NCisNCisjZGVmaW5lIENISVBfSUQJCQkJCQkweDI1MDkNCisjZGVmaW5lIE9WMDJB MTBfUkVHX0NISVBfSURfSAkJCQkweDAyDQorI2RlZmluZSBPVjAyQTEwX1JFR19DSElQX0lEX0wJ CQkJMHgwMw0KKw0KKy8qIEJpdFsxXSB2ZXJ0aWNhbCB1cHNpZGUgZG93biAqLw0KKy8qIEJpdFsw XSBob3Jpem9udGFsIG1pcnJvciAqLw0KKyNkZWZpbmUgUkVHX01JUlJPUl9GTElQX0NPTlRST0wJ CQkJMHgzZg0KKw0KKy8qIE9yaWVudGF0aW9uICovDQorI2RlZmluZSBSRUdfTUlSUk9SX0ZMSVBf RU5BQkxFCQkJCTB4MDMNCisNCisvKiBCaXRbMjowXSBNSVBJIHRyYW5zbWlzc2lvbiBzcGVlZCBz ZWxlY3QgKi8NCisjZGVmaW5lIFRYX1NQRUVEX0FSRUFfU0VMCQkJCTB4YTENCisjZGVmaW5lIE9W MDJBMTBfTUlQSV9UWF9TUEVFRF9ERUZBVUxUCQkJMHgwMw0KKw0KKyNkZWZpbmUgUkVHX1BBR0Vf U1dJVENICQkJCQkweGZkDQorI2RlZmluZSBSRUdfR0xPQkFMX0VGRkVDVElWRQkJCQkweDAxDQor I2RlZmluZSBSRUdfRU5BQkxFCQkJCQlCSVQoMCkNCisNCisjZGVmaW5lIFJFR19TQ19DVFJMX01P REUJCQkJMHhhYw0KKyNkZWZpbmUgU0NfQ1RSTF9NT0RFX1NUQU5EQlkJCQkJMHgwMA0KKyNkZWZp bmUgU0NfQ1RSTF9NT0RFX1NUUkVBTUlORwkJCQkweDAxDQorDQorI2RlZmluZSBPVjAyQTEwX0VY UF9TSElGVAkJCQk4DQorI2RlZmluZSBPVjAyQTEwX1JFR19FWFBPU1VSRV9ICQkJCTB4MDMNCisj ZGVmaW5lIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0wJCQkJMHgwNA0KKyNkZWZpbmUJT1YwMkExMF9F WFBPU1VSRV9NSU4JCQkJNA0KKyNkZWZpbmUgT1YwMkExMF9FWFBPU1VSRV9NQVhfTUFSR0lOCQkJ NA0KKyNkZWZpbmUJT1YwMkExMF9FWFBPU1VSRV9TVEVQCQkJCTENCisNCisjZGVmaW5lIE9WMDJB MTBfVlRTX1NISUZUCQkJCTgNCisjZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19ICQkJCTB4MDUNCisj ZGVmaW5lIE9WMDJBMTBfUkVHX1ZUU19MCQkJCTB4MDYNCisjZGVmaW5lIE9WMDJBMTBfVlRTX01B WAkJCQkJMHgyMDlmDQorI2RlZmluZSBPVjAyQTEwX0JBU0lDX0xJTkUJCQkJMTIyNA0KKw0KKyNk ZWZpbmUgT1YwMkExMF9SRUdfR0FJTgkJCQkweDI0DQorI2RlZmluZSBPVjAyQTEwX0dBSU5fTUlO CQkJCTB4MTANCisjZGVmaW5lIE9WMDJBMTBfR0FJTl9NQVgJCQkJMHhmOA0KKyNkZWZpbmUgT1Yw MkExMF9HQUlOX1NURVAJCQkJMHgwMQ0KKyNkZWZpbmUgT1YwMkExMF9HQUlOX0RFRkFVTFQJCQkJ MHg0MA0KKw0KKy8qIFRlc3QgcGF0dGVybiBjb250cm9sICovDQorI2RlZmluZSBPVjAyQTEwX1JF R19URVNUX1BBVFRFUk4JCQkweGI2DQorDQorI2RlZmluZSBIWl9QRVJfTUhaCQkJCQkxMDAwMDAw TA0KKyNkZWZpbmUgT1YwMkExMF9MSU5LX0ZSRVFfMzkwTUhaCQkJKDM5MCAqIEhaX1BFUl9NSFop DQorI2RlZmluZSBPVjAyQTEwX0VDTEtfRlJFUQkJCQkoMjQgKiBIWl9QRVJfTUhaKQ0KKyNkZWZp bmUgT1YwMkExMF9EQVRBX0xBTkVTCQkJCTENCisjZGVmaW5lIE9WMDJBMTBfQklUU19QRVJfU0FN UExFCQkJCTEwDQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdjAyYTEwX3N1cHBseV9u YW1lc1tdID0gew0KKwkiZG92ZGQiLAkvKiBEaWdpdGFsIEkvTyBwb3dlciAqLw0KKwkiYXZkZCIs CQkvKiBBbmFsb2cgcG93ZXIgKi8NCisJImR2ZGQiLAkJLyogRGlnaXRhbCBjb3JlIHBvd2VyICov DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMF9yZWcgew0KKwl1OCBhZGRyOw0KKwl1OCB2YWw7DQor fTsNCisNCitzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCB7DQorCXUzMiBudW1fb2ZfcmVnczsNCisJ Y29uc3Qgc3RydWN0IG92MDJhMTBfcmVnICpyZWdzOw0KK307DQorDQorc3RydWN0IG92MDJhMTBf bW9kZSB7DQorCXUzMiB3aWR0aDsNCisJdTMyIGhlaWdodDsNCisJdTMyIGV4cF9kZWY7DQorCXUz MiBodHNfZGVmOw0KKwl1MzIgdnRzX2RlZjsNCisJY29uc3Qgc3RydWN0IG92MDJhMTBfcmVnX2xp c3QgcmVnX2xpc3Q7DQorfTsNCisNCitzdHJ1Y3Qgb3YwMmExMCB7DQorCXUzMiBlY2xrX2ZyZXE7 DQorCXUzMiBtaXBpX2Nsb2NrX3R4X3NwZWVkOw0KKw0KKwlzdHJ1Y3QgY2xrICplY2xrOw0KKwlz dHJ1Y3QgZ3Bpb19kZXNjICpwZF9ncGlvOw0KKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyc3RfZ3BpbzsN CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShvdjAyYTEw X3N1cHBseV9uYW1lcyldOw0KKw0KKwlib29sIHN0cmVhbWluZzsNCisJYm9vbCB1cHNpZGVfZG93 bjsNCisNCisJLyoNCisJICogU2VyaWFsaXplIGNvbnRyb2wgYWNjZXNzLCBnZXQvc2V0IGZvcm1h dCwgZ2V0IHNlbGVjdGlvbg0KKwkgKiBhbmQgc3RhcnQgc3RyZWFtaW5nLg0KKwkgKi8NCisJc3Ry dWN0IG11dGV4IG11dGV4Ow0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2Ow0KKwlzdHJ1Y3Qg bWVkaWFfcGFkIHBhZDsNCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmbXQ7DQorCXN0cnVj dCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7DQorCXN0cnVjdCB2NGwyX2N0cmwgKmV4 cG9zdXJlOw0KKw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlICpjdXJfbW9kZTsNCit9Ow0K Kw0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG92MDJhMTAgKnRvX292MDJhMTAoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCkNCit7DQorCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdjAyYTEw LCBzdWJkZXYpOw0KK30NCisNCisvKg0KKyAqIGVjbGsgMjRNaHoNCisgKiBwY2xrIDM5TWh6DQor ICogbGluZWxlbmd0aCA5MzQoMHgzYTYpDQorICogZnJhbWVsZW5ndGggMTM5MCgweDU2RSkNCisg KiBncmFid2luZG93X3dpZHRoIDE2MDANCisgKiBncmFid2luZG93X2hlaWdodCAxMjAwDQorICog bWF4X2ZyYW1lcmF0ZSAzMGZwcw0KKyAqIG1pcGlfZGF0YXJhdGUgcGVyIGxhbmUgNzgwTWJwcw0K KyAqLw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgb3YwMmExMF8xNjAweDEyMDBf cmVnc1tdID0gew0KKwl7MHhmZCwgMHgwMX0sDQorCXsweGFjLCAweDAwfSwNCisJezB4ZmQsIDB4 MDB9LA0KKwl7MHgyZiwgMHgyOX0sDQorCXsweDM0LCAweDAwfSwNCisJezB4MzUsIDB4MjF9LA0K Kwl7MHgzMCwgMHgxNX0sDQorCXsweDMzLCAweDAxfSwNCisJezB4ZmQsIDB4MDF9LA0KKwl7MHg0 NCwgMHgwMH0sDQorCXsweDJhLCAweDRjfSwNCisJezB4MmIsIDB4MWV9LA0KKwl7MHgyYywgMHg2 MH0sDQorCXsweDI1LCAweDExfSwNCisJezB4MDMsIDB4MDF9LA0KKwl7MHgwNCwgMHhhZX0sDQor CXsweDA5LCAweDAwfSwNCisJezB4MGEsIDB4MDJ9LA0KKwl7MHgwNiwgMHhhNn0sDQorCXsweDMx LCAweDAwfSwNCisJezB4MjQsIDB4NDB9LA0KKwl7MHgwMSwgMHgwMX0sDQorCXsweGZiLCAweDcz fSwNCisJezB4ZmQsIDB4MDF9LA0KKwl7MHgxNiwgMHgwNH0sDQorCXsweDFjLCAweDA5fSwNCisJ ezB4MjEsIDB4NDJ9LA0KKwl7MHgxMiwgMHgwNH0sDQorCXsweDEzLCAweDEwfSwNCisJezB4MTEs IDB4NDB9LA0KKwl7MHgzMywgMHg4MX0sDQorCXsweGQwLCAweDAwfSwNCisJezB4ZDEsIDB4MDF9 LA0KKwl7MHhkMiwgMHgwMH0sDQorCXsweDUwLCAweDEwfSwNCisJezB4NTEsIDB4MjN9LA0KKwl7 MHg1MiwgMHgyMH0sDQorCXsweDUzLCAweDEwfSwNCisJezB4NTQsIDB4MDJ9LA0KKwl7MHg1NSwg MHgyMH0sDQorCXsweDU2LCAweDAyfSwNCisJezB4NTgsIDB4NDh9LA0KKwl7MHg1ZCwgMHgxNX0s DQorCXsweDVlLCAweDA1fSwNCisJezB4NjYsIDB4NjZ9LA0KKwl7MHg2OCwgMHg2OH0sDQorCXsw eDZiLCAweDAwfSwNCisJezB4NmMsIDB4MDB9LA0KKwl7MHg2ZiwgMHg0MH0sDQorCXsweDcwLCAw eDQwfSwNCisJezB4NzEsIDB4MGF9LA0KKwl7MHg3MiwgMHhmMH0sDQorCXsweDczLCAweDEwfSwN CisJezB4NzUsIDB4ODB9LA0KKwl7MHg3NiwgMHgxMH0sDQorCXsweDg0LCAweDAwfSwNCisJezB4 ODUsIDB4MTB9LA0KKwl7MHg4NiwgMHgxMH0sDQorCXsweDg3LCAweDAwfSwNCisJezB4OGEsIDB4 MjJ9LA0KKwl7MHg4YiwgMHgyMn0sDQorCXsweDE5LCAweGYxfSwNCisJezB4MjksIDB4MDF9LA0K Kwl7MHhmZCwgMHgwMX0sDQorCXsweDlkLCAweDE2fSwNCisJezB4YTAsIDB4Mjl9LA0KKwl7MHhh MSwgMHgwM30sDQorCXsweGFkLCAweDYyfSwNCisJezB4YWUsIDB4MDB9LA0KKwl7MHhhZiwgMHg4 NX0sDQorCXsweGIxLCAweDAxfSwNCisJezB4OGUsIDB4MDZ9LA0KKwl7MHg4ZiwgMHg0MH0sDQor CXsweDkwLCAweDA0fSwNCisJezB4OTEsIDB4YjB9LA0KKwl7MHg0NSwgMHgwMX0sDQorCXsweDQ2 LCAweDAwfSwNCisJezB4NDcsIDB4NmN9LA0KKwl7MHg0OCwgMHgwM30sDQorCXsweDQ5LCAweDhi fSwNCisJezB4NGEsIDB4MDB9LA0KKwl7MHg0YiwgMHgwN30sDQorCXsweDRjLCAweDA0fSwNCisJ ezB4NGQsIDB4Yjd9LA0KKwl7MHhmMCwgMHg0MH0sDQorCXsweGYxLCAweDQwfSwNCisJezB4ZjIs IDB4NDB9LA0KKwl7MHhmMywgMHg0MH0sDQorCXsweDNmLCAweDAwfSwNCisJezB4ZmQsIDB4MDF9 LA0KKwl7MHgwNSwgMHgwMH0sDQorCXsweDA2LCAweGE2fSwNCisJezB4ZmQsIDB4MDF9LA0KK307 DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdjAyYTEwX3Rlc3RfcGF0dGVybl9tZW51 W10gPSB7DQorCSJEaXNhYmxlZCIsDQorCSJFaWdodCBWZXJ0aWNhbCBDb2xvdXIgQmFycyIsDQor fTsNCisNCitzdGF0aWMgY29uc3QgczY0IGxpbmtfZnJlcV9tZW51X2l0ZW1zW10gPSB7DQorCU9W MDJBMTBfTElOS19GUkVRXzM5ME1IWiwNCit9Ow0KKw0KK3N0YXRpYyB1NjQgdG9fcGl4ZWxfcmF0 ZSh1MzIgZl9pbmRleCkNCit7DQorCXU2NCBwaXhlbF9yYXRlID0gbGlua19mcmVxX21lbnVfaXRl bXNbZl9pbmRleF0gKiAyICogT1YwMkExMF9EQVRBX0xBTkVTOw0KKw0KKwlkb19kaXYocGl4ZWxf cmF0ZSwgT1YwMkExMF9CSVRTX1BFUl9TQU1QTEUpOw0KKw0KKwlyZXR1cm4gcGl4ZWxfcmF0ZTsN Cit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUgc3VwcG9ydGVkX21vZGVz W10gPSB7DQorCXsNCisJCS53aWR0aCA9IDE2MDAsDQorCQkuaGVpZ2h0ID0gMTIwMCwNCisJCS5l eHBfZGVmID0gMHgwMWFlLA0KKwkJLmh0c19kZWYgPSAweDAzYTYsDQorCQkudnRzX2RlZiA9IDB4 MDU2ZSwNCisJCS5yZWdfbGlzdCA9IHsNCisJCQkubnVtX29mX3JlZ3MgPSBBUlJBWV9TSVpFKG92 MDJhMTBfMTYwMHgxMjAwX3JlZ3MpLA0KKwkJCS5yZWdzID0gb3YwMmExMF8xNjAweDEyMDBfcmVn cywNCisJCX0sDQorCX0sDQorfTsNCisNCitzdGF0aWMgaW50IG92MDJhMTBfd3JpdGVfYXJyYXko c3RydWN0IG92MDJhMTAgKm92MDJhMTAsDQorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvdjAyYTEw X3JlZ19saXN0ICpyX2xpc3QpDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRs Ml9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCisJdW5zaWduZWQgaW50IGk7DQor CWludCByZXQ7DQorDQorCWZvciAoaSA9IDA7IGkgPCByX2xpc3QtPm51bV9vZl9yZWdzOyBpKysp IHsNCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByX2xpc3QtPnJl Z3NbaV0uYWRkciwNCisJCQkJCQlyX2xpc3QtPnJlZ3NbaV0udmFsKTsNCisJCWlmIChyZXQgPCAw KQ0KKwkJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgb3YwMmExMF9yZWFkX3NtYnVzKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLCB1bnNpZ25lZCBj aGFyIHJlZywNCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICp2YWwpDQorew0KKwlzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsN CisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwg cmVnKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkqdmFsID0gKHVuc2ln bmVkIGNoYXIpcmV0Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgb3YwMmEx MF9maWxsX2ZtdChjb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlICptb2RlLA0KKwkJCSAgICAgc3Ry dWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KQ0KK3sNCisJZm10LT53aWR0aCA9IG1vZGUtPndp ZHRoOw0KKwlmbXQtPmhlaWdodCA9IG1vZGUtPmhlaWdodDsNCisJZm10LT5maWVsZCA9IFY0TDJf RklFTERfTk9ORTsNCit9DQorDQorc3RhdGljIGludCBvdjAyYTEwX3NldF9mbXQoc3RydWN0IHY0 bDJfc3ViZGV2ICpzZCwNCisJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2Zn LA0KKwkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCit7DQorCXN0cnVjdCBv djAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorCXN0cnVjdCB2NGwyX21idXNfZnJh bWVmbXQgKm1idXNfZm10ID0gJmZtdC0+Zm9ybWF0Ow0KKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICpmcmFtZV9mbXQ7DQorCWludCByZXQgPSAwOw0KKw0KKwltdXRleF9sb2NrKCZvdjAyYTEw LT5tdXRleCk7DQorDQorCWlmIChvdjAyYTEwLT5zdHJlYW1pbmcgJiYgZm10LT53aGljaCA9PSBW NEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFKSB7DQorCQlyZXQgPSAtRUJVU1k7DQorCQlnb3RvIGVy cm9yOw0KKwl9DQorDQorCS8qIE9ubHkgb25lIHNlbnNvciBtb2RlIHN1cHBvcnRlZCAqLw0KKwlt YnVzX2ZtdC0+Y29kZSA9IG92MDJhMTAtPmZtdC5jb2RlOw0KKwlvdjAyYTEwX2ZpbGxfZm10KG92 MDJhMTAtPmN1cl9tb2RlLCBtYnVzX2ZtdCk7DQorDQorCWlmIChmbXQtPndoaWNoID09IFY0TDJf U1VCREVWX0ZPUk1BVF9UUlkpDQorCQlmcmFtZV9mbXQgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Zv cm1hdChzZCwgY2ZnLCAwKTsNCisJZWxzZQ0KKwkJZnJhbWVfZm10ID0gJm92MDJhMTAtPmZtdDsN CisNCisJKmZyYW1lX2ZtdCA9ICptYnVzX2ZtdDsNCisNCitlcnJvcjoNCisJbXV0ZXhfdW5sb2Nr KCZvdjAyYTEwLT5tdXRleCk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3Yw MmExMF9nZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJICAgc3RydWN0IHY0bDJf c3ViZGV2X3BhZF9jb25maWcgKmNmZywNCisJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0 ICpmbXQpDQorew0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0K KwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCA9ICZmbXQtPmZvcm1hdDsNCisN CisJbXV0ZXhfbG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlpZiAoZm10LT53aGljaCA9PSBW NEwyX1NVQkRFVl9GT1JNQVRfVFJZKSB7DQorCQlmbXQtPmZvcm1hdCA9ICp2NGwyX3N1YmRldl9n ZXRfdHJ5X2Zvcm1hdChzZCwgY2ZnLCBmbXQtPnBhZCk7DQorCX0gZWxzZSB7DQorCQlmbXQtPmZv cm1hdCA9IG92MDJhMTAtPmZtdDsNCisJCW1idXNfZm10LT5jb2RlID0gb3YwMmExMC0+Zm10LmNv ZGU7DQorCQlvdjAyYTEwX2ZpbGxfZm10KG92MDJhMTAtPmN1cl9tb2RlLCBtYnVzX2ZtdCk7DQor CX0NCisNCisJbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3Vi ZGV2ICpzZCwNCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KKwkJ CQkgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29kZSkNCit7DQorCXN0cnVj dCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorDQorCWlmIChjb2RlLT5pbmRl eCAhPSAwKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWNvZGUtPmNvZGUgPSBvdjAyYTEwLT5m bXQuY29kZTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9lbnVt X2ZyYW1lX3NpemVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJCSAgICBzdHJ1Y3QgdjRs Ml9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KKwkJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zy YW1lX3NpemVfZW51bSAqZnNlKQ0KK3sNCisJaWYgKGZzZS0+aW5kZXggPj0gQVJSQVlfU0laRShz dXBwb3J0ZWRfbW9kZXMpKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWZzZS0+bWluX3dpZHRo ICA9IHN1cHBvcnRlZF9tb2Rlc1tmc2UtPmluZGV4XS53aWR0aDsNCisJZnNlLT5tYXhfd2lkdGgg ID0gc3VwcG9ydGVkX21vZGVzW2ZzZS0+aW5kZXhdLndpZHRoOw0KKwlmc2UtPm1heF9oZWlnaHQg PSBzdXBwb3J0ZWRfbW9kZXNbZnNlLT5pbmRleF0uaGVpZ2h0Ow0KKwlmc2UtPm1pbl9oZWlnaHQg PSBzdXBwb3J0ZWRfbW9kZXNbZnNlLT5pbmRleF0uaGVpZ2h0Ow0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBvdjAyYTEwX2NoZWNrX3NlbnNvcl9pZChzdHJ1Y3Qgb3YwMmExMCAq b3YwMmExMCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJk ZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwl1MTYgaWQ7DQorCXU4IGNoaXBfaWRfaDsNCisJ dTggY2hpcF9pZF9sOw0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBDaGVjayBzZW5zb3IgcmV2aXNpb24g Ki8NCisJcmV0ID0gb3YwMmExMF9yZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBfUkVHX0NISVBf SURfSCwgJmNoaXBfaWRfaCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQg PSBvdjAyYTEwX3JlYWRfc21idXMob3YwMmExMCwgT1YwMkExMF9SRUdfQ0hJUF9JRF9MLCAmY2hp cF9pZF9sKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWlkID0gKGNoaXBfaWRf aCA8PCA4KSB8IGNoaXBfaWRfbDsNCisJaWYgKGlkICE9IENISVBfSUQpIHsNCisJCWRldl9lcnIo JmNsaWVudC0+ZGV2LCAiVW5leHBlY3RlZCBzZW5zb3IgaWQoJTA0eClcbiIsIGlkKTsNCisJCXJl dHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG92 MDJhMTBfcG93ZXJfb24oc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKwlzdHJ1Y3Qgb3YwMmExMCAqb3YwMmEx MCA9IHRvX292MDJhMTAoc2QpOw0KKwlpbnQgcmV0Ow0KKw0KKwlncGlvZF9zZXRfdmFsdWVfY2Fu c2xlZXAob3YwMmExMC0+cnN0X2dwaW8sIDEpOw0KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAo b3YwMmExMC0+cGRfZ3BpbywgMSk7DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShvdjAy YTEwLT5lY2xrKTsNCisJaWYgKHJldCA8IDApIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGVuYWJsZSBlY2xrXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gcmVndWxh dG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCQkg ICAgb3YwMmExMC0+c3VwcGxpZXMpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIpOw0KKwkJZ290byBkaXNhYmxlX2NsazsN CisJfQ0KKwl1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7DQorDQorCWdwaW9kX3NldF92YWx1ZV9j YW5zbGVlcChvdjAyYTEwLT5wZF9ncGlvLCAwKTsNCisJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDAp Ow0KKw0KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+cnN0X2dwaW8sIDApOw0K Kwl1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7DQorDQorCXJldCA9IG92MDJhMTBfY2hlY2tfc2Vu c29yX2lkKG92MDJhMTApOw0KKwlpZiAocmV0KQ0KKwkJZ290byBkaXNhYmxlX3JlZ3VsYXRvcjsN CisNCisJcmV0dXJuIDA7DQorDQorZGlzYWJsZV9yZWd1bGF0b3I6DQorCXJlZ3VsYXRvcl9idWxr X2Rpc2FibGUoQVJSQVlfU0laRShvdjAyYTEwX3N1cHBseV9uYW1lcyksDQorCQkJICAgICAgIG92 MDJhMTAtPnN1cHBsaWVzKTsNCitkaXNhYmxlX2NsazoNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KG92MDJhMTAtPmVjbGspOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG92 MDJhMTBfcG93ZXJfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAq c2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCisJc3RydWN0IG92MDJhMTAgKm92MDJh MTAgPSB0b19vdjAyYTEwKHNkKTsNCisNCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJh MTAtPnJzdF9ncGlvLCAxKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG92MDJhMTAtPmVjbGsp Ow0KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+cGRfZ3BpbywgMSk7DQorCXJl Z3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShvdjAyYTEwX3N1cHBseV9uYW1lcyksDQor CQkJICAgICAgIG92MDJhMTAtPnN1cHBsaWVzKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgX19vdjAyYTEwX3N0YXJ0X3N0cmVhbShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkN Cit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZv djAyYTEwLT5zdWJkZXYpOw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCAqcmVnX2xp c3Q7DQorCWludCByZXQ7DQorDQorCS8qIEFwcGx5IGRlZmF1bHQgdmFsdWVzIG9mIGN1cnJlbnQg bW9kZSAqLw0KKwlyZWdfbGlzdCA9ICZvdjAyYTEwLT5jdXJfbW9kZS0+cmVnX2xpc3Q7DQorCXJl dCA9IG92MDJhMTBfd3JpdGVfYXJyYXkob3YwMmExMCwgcmVnX2xpc3QpOw0KKwlpZiAocmV0KQ0K KwkJcmV0dXJuIHJldDsNCisNCisJLyogQXBwbHkgY3VzdG9taXplZCB2YWx1ZXMgZnJvbSB1c2Vy ICovDQorCXJldCA9IF9fdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAob3YwMmExMC0+c3ViZGV2LmN0 cmxfaGFuZGxlcik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBTZXQgb3Jp ZW50YXRpb24gdG8gMTgwIGRlZ3JlZSAqLw0KKwlpZiAob3YwMmExMC0+dXBzaWRlX2Rvd24pIHsN CisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfTUlSUk9SX0ZM SVBfQ09OVFJPTCwNCisJCQkJCQlSRUdfTUlSUk9SX0ZMSVBfRU5BQkxFKTsNCisJCWlmIChyZXQp IHsNCisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBzZXQgb3JpZW50YXRpb25c biIpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0 ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQorCQkJCQkJUkVHX0VOQUJMRSk7 DQorCQlpZiAocmV0IDwgMCkNCisJCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIFNldCBtaXBp IFRYIHNwZWVkIGFjY29yZGluZyB0byBEVCBwcm9wZXJ0eSAqLw0KKwlpZiAob3YwMmExMC0+bWlw aV9jbG9ja190eF9zcGVlZCAhPSBPVjAyQTEwX01JUElfVFhfU1BFRURfREVGQVVMVCkgew0KKwkJ cmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRYX1NQRUVEX0FSRUFfU0VM LA0KKwkJCQkJCW92MDJhMTAtPm1pcGlfY2xvY2tfdHhfc3BlZWQpOw0KKwkJaWYgKHJldCA8IDAp DQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBTZXQgc3RyZWFtIG9uIHJlZ2lzdGVyICov DQorCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxf TU9ERSwNCisJCQkJCSBTQ19DVFJMX01PREVfU1RSRUFNSU5HKTsNCit9DQorDQorc3RhdGljIGlu dCBfX292MDJhMTBfc3RvcF9zdHJlYW0oc3RydWN0IG92MDJhMTAgKm92MDJhMTApDQorew0KKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+ c3ViZGV2KTsNCisNCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBS RUdfU0NfQ1RSTF9NT0RFLA0KKwkJCQkJIFNDX0NUUkxfTU9ERV9TVEFOREJZKTsNCit9DQorDQor c3RhdGljIGludCBvdjAyYTEwX2VudGl0eV9pbml0X2NmZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LA0KKwkJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnKQ0KK3sNCisJc3Ry dWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmbXQgPSB7DQorCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9G T1JNQVRfVFJZLA0KKwkJLmZvcm1hdCA9IHsNCisJCQkud2lkdGggPSAxNjAwLA0KKwkJCS5oZWln aHQgPSAxMjAwLA0KKwkJfQ0KKwl9Ow0KKw0KKwlvdjAyYTEwX3NldF9mbXQoc2QsIGNmZywgJmZt dCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfc19zdHJlYW0o c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQ0KK3sNCisJc3RydWN0IG92MDJhMTAgKm92 MDJhMTAgPSB0b19vdjAyYTEwKHNkKTsNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0 bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWludCByZXQ7DQorDQorCW11 dGV4X2xvY2soJm92MDJhMTAtPm11dGV4KTsNCisNCisJaWYgKG92MDJhMTAtPnN0cmVhbWluZyA9 PSBvbikNCisJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47DQorDQorCWlmIChvbikgew0KKwkJcmV0 ID0gcG1fcnVudGltZV9nZXRfc3luYygmY2xpZW50LT5kZXYpOw0KKwkJaWYgKHJldCA8IDApIHsN CisJCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmNsaWVudC0+ZGV2KTsNCisJCQlnb3RvIHVubG9j a19hbmRfcmV0dXJuOw0KKwkJfQ0KKw0KKwkJcmV0ID0gX19vdjAyYTEwX3N0YXJ0X3N0cmVhbShv djAyYTEwKTsNCisJCWlmIChyZXQpIHsNCisJCQlfX292MDJhMTBfc3RvcF9zdHJlYW0ob3YwMmEx MCk7DQorCQkJb3YwMmExMC0+c3RyZWFtaW5nID0gIW9uOw0KKwkJCWdvdG8gZXJyX3JwbV9wdXQ7 DQorCQl9DQorCX0gZWxzZSB7DQorCQlfX292MDJhMTBfc3RvcF9zdHJlYW0ob3YwMmExMCk7DQor CQlwbV9ydW50aW1lX3B1dCgmY2xpZW50LT5kZXYpOw0KKwl9DQorDQorCW92MDJhMTAtPnN0cmVh bWluZyA9IG9uOw0KKwltdXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4KTsNCisNCisJcmV0dXJu IDA7DQorDQorZXJyX3JwbV9wdXQ6DQorCXBtX3J1bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQor dW5sb2NrX2FuZF9yZXR1cm46DQorCW11dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KKw0K KwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgb3Yw MmExMF9wbV9vcHMgPSB7DQorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBtX3J1bnRpbWVfZm9y Y2Vfc3VzcGVuZCwNCisJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpDQorCVNFVF9SVU5USU1F X1BNX09QUyhvdjAyYTEwX3Bvd2VyX29mZiwgb3YwMmExMF9wb3dlcl9vbiwgTlVMTCkNCit9Ow0K Kw0KKy8qDQorICogb3YwMmExMF9zZXRfZXhwb3N1cmUgLSBGdW5jdGlvbiBjYWxsZWQgd2hlbiBz ZXR0aW5nIGV4cG9zdXJlIHRpbWUNCisgKiBAcHJpdjogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0 dXJlDQorICogQHZhbDogVmFyaWFibGUgZm9yIGV4cG9zdXJlIHRpbWUsIGluIHRoZSB1bml0IG9m IG1pY3JvLXNlY29uZA0KKyAqDQorICogU2V0IGV4cG9zdXJlIHRpbWUgYmFzZWQgb24gaW5wdXQg dmFsdWUuDQorICoNCisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KKyAqLw0KK3N0YXRpYyBpbnQg b3YwMmExMF9zZXRfZXhwb3N1cmUoc3RydWN0IG92MDJhMTAgKm92MDJhMTAsIGludCB2YWwpDQor ew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3Yw MmExMC0+c3ViZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5 dGVfZGF0YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQorCWlmIChyZXQg PCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIE9WMDJBMTBfUkVHX0VYUE9TVVJFX0gsDQorCQkJCQl2YWwgPj4gT1YwMkExMF9F WFBfU0hJRlQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGky Y19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19FWFBPU1VSRV9MLCB2 YWwpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQorCQkJCQkg UkVHX0VOQUJMRSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9zZXRfZ2FpbihzdHJ1Y3Qg b3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwlpbnQgcmV0Ow0K Kw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1BBR0VfU1dJ VENILCBSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwly ZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdfR0FJTiwg dmFsKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1cm4gaTJjX3Nt YnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxfRUZGRUNUSVZFLA0KKwkJCQkJ IFJFR19FTkFCTEUpOw0KK30NCisNCitzdGF0aWMgaW50IG92MDJhMTBfc2V0X3ZibGFuayhzdHJ1 Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwl1MzIgdnRz ID0gdmFsICsgb3YwMmExMC0+Y3VyX21vZGUtPmhlaWdodCAtIE9WMDJBMTBfQkFTSUNfTElORTsN CisJaW50IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQs IFJFR19QQUdFX1NXSVRDSCwgUkVHX0VOQUJMRSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJu IHJldDsNCisNCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJB MTBfUkVHX1ZUU19ILA0KKwkJCQkJdnRzID4+IE9WMDJBMTBfVlRTX1NISUZUKTsNCisJaWYgKHJl dCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9k YXRhKGNsaWVudCwgT1YwMkExMF9SRUdfVlRTX0wsIHZ0cyk7DQorCWlmIChyZXQgPCAwKQ0KKwkJ cmV0dXJuIHJldDsNCisNCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50 LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCisJCQkJCSBSRUdfRU5BQkxFKTsNCit9DQorDQorc3Rh dGljIGludCBvdjAyYTEwX3NldF90ZXN0X3BhdHRlcm4oc3RydWN0IG92MDJhMTAgKm92MDJhMTAs IGludCBwYXR0ZXJuKQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0 X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCWludCByZXQ7DQorDQorCXJldCA9IGky Y19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfUEFHRV9TV0lUQ0gsIFJFR19FTkFC TEUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1 c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19URVNUX1BBVFRFUk4sDQorCQkJ CQlwYXR0ZXJuKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBp MmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQor CQkJCQlSRUdfRU5BQkxFKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwly ZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19TQ19DVFJMX01PREUs DQorCQkJCQkgU0NfQ1RSTF9NT0RFX1NUUkVBTUlORyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3Yw MmExMF9zZXRfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQ0KK3sNCisJc3RydWN0IG92MDJh MTAgKm92MDJhMTAgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCisJCQkJCSAgICAgICBz dHJ1Y3Qgb3YwMmExMCwgY3RybF9oYW5kbGVyKTsNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQorCXM2NCBtYXhfZXhw bzsNCisJaW50IHJldDsNCisNCisJLyogUHJvcGFnYXRlIGNoYW5nZSBvZiBjdXJyZW50IGNvbnRy b2wgdG8gYWxsIHJlbGF0ZWQgY29udHJvbHMgKi8NCisJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lE X1ZCTEFOSykgew0KKwkJLyogVXBkYXRlIG1heCBleHBvc3VyZSB3aGlsZSBtZWV0aW5nIGV4cGVj dGVkIHZibGFua2luZyAqLw0KKwkJbWF4X2V4cG8gPSBvdjAyYTEwLT5jdXJfbW9kZS0+aGVpZ2h0 ICsgY3RybC0+dmFsIC0NCisJCQkgICBPVjAyQTEwX0VYUE9TVVJFX01BWF9NQVJHSU47DQorCQlf X3Y0bDJfY3RybF9tb2RpZnlfcmFuZ2Uob3YwMmExMC0+ZXhwb3N1cmUsDQorCQkJCQkgb3YwMmEx MC0+ZXhwb3N1cmUtPm1pbmltdW0sIG1heF9leHBvLA0KKwkJCQkJIG92MDJhMTAtPmV4cG9zdXJl LT5zdGVwLA0KKwkJCQkJIG92MDJhMTAtPmV4cG9zdXJlLT5kZWZhdWx0X3ZhbHVlKTsNCisJfQ0K Kw0KKwkvKiBWNEwyIGNvbnRyb2xzIHZhbHVlcyB3aWxsIGJlIGFwcGxpZWQgb25seSB3aGVuIHBv d2VyIGlzIGFscmVhZHkgdXAgKi8NCisJaWYgKCFwbV9ydW50aW1lX2dldF9pZl9pbl91c2UoJmNs aWVudC0+ZGV2KSkNCisJCXJldHVybiAwOw0KKw0KKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQorCWNh c2UgVjRMMl9DSURfRVhQT1NVUkU6DQorCQlyZXQgPSBvdjAyYTEwX3NldF9leHBvc3VyZShvdjAy YTEwLCBjdHJsLT52YWwpOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURfQU5BTE9HVUVfR0FJ TjoNCisJCXJldCA9IG92MDJhMTBfc2V0X2dhaW4ob3YwMmExMCwgY3RybC0+dmFsKTsNCisJCWJy ZWFrOw0KKwljYXNlIFY0TDJfQ0lEX1ZCTEFOSzoNCisJCXJldCA9IG92MDJhMTBfc2V0X3ZibGFu ayhvdjAyYTEwLCBjdHJsLT52YWwpOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURfVEVTVF9Q QVRURVJOOg0KKwkJcmV0ID0gb3YwMmExMF9zZXRfdGVzdF9wYXR0ZXJuKG92MDJhMTAsIGN0cmwt PnZhbCk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldCA9IC1FSU5WQUw7DQorCQlicmVh azsNCisJfTsNCisNCisJcG1fcnVudGltZV9wdXQoJmNsaWVudC0+ZGV2KTsNCisNCisJcmV0dXJu IHJldDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMg b3YwMmExMF92aWRlb19vcHMgPSB7DQorCS5zX3N0cmVhbSA9IG92MDJhMTBfc19zdHJlYW0sDQor fTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9vcHMgb3YwMmExMF9w YWRfb3BzID0gew0KKwkuaW5pdF9jZmcgPSBvdjAyYTEwX2VudGl0eV9pbml0X2NmZywNCisJLmVu dW1fbWJ1c19jb2RlID0gb3YwMmExMF9lbnVtX21idXNfY29kZSwNCisJLmVudW1fZnJhbWVfc2l6 ZSA9IG92MDJhMTBfZW51bV9mcmFtZV9zaXplcywNCisJLmdldF9mbXQgPSBvdjAyYTEwX2dldF9m bXQsDQorCS5zZXRfZm10ID0gb3YwMmExMF9zZXRfZm10LA0KK307DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3YwMmExMF9zdWJkZXZfb3BzID0gew0KKwkudmlkZW8J PSAmb3YwMmExMF92aWRlb19vcHMsDQorCS5wYWQJPSAmb3YwMmExMF9wYWRfb3BzLA0KK307DQor DQorc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyBvdjAyYTEwX3N1 YmRldl9lbnRpdHlfb3BzID0gew0KKwkubGlua192YWxpZGF0ZSA9IHY0bDJfc3ViZGV2X2xpbmtf dmFsaWRhdGUsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgb3Yw MmExMF9jdHJsX29wcyA9IHsNCisJLnNfY3RybCA9IG92MDJhMTBfc2V0X2N0cmwsDQorfTsNCisN CitzdGF0aWMgaW50IG92MDJhMTBfaW5pdGlhbGl6ZV9jb250cm9scyhzdHJ1Y3Qgb3YwMmExMCAq b3YwMmExMCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJk ZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KKwljb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlICpt b2RlOw0KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhhbmRsZXI7DQorCXN0cnVjdCB2NGwy X2N0cmwgKmN0cmw7DQorCXM2NCBleHBvc3VyZV9tYXg7DQorCXM2NCB2YmxhbmtfZGVmOw0KKwlz NjQgcGl4ZWxfcmF0ZTsNCisJczY0IGhfYmxhbms7DQorCWludCByZXQ7DQorDQorCWhhbmRsZXIg PSAmb3YwMmExMC0+Y3RybF9oYW5kbGVyOw0KKwltb2RlID0gb3YwMmExMC0+Y3VyX21vZGU7DQor CXJldCA9IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoaGFuZGxlciwgNyk7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwloYW5kbGVyLT5sb2NrID0gJm92MDJhMTAtPm11dGV4Ow0KKw0K KwljdHJsID0gdjRsMl9jdHJsX25ld19pbnRfbWVudShoYW5kbGVyLCBOVUxMLCBWNEwyX0NJRF9M SU5LX0ZSRVEsIDAsIDAsDQorCQkJCSAgICAgIGxpbmtfZnJlcV9tZW51X2l0ZW1zKTsNCisJaWYg KGN0cmwpDQorCQljdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7DQorDQor CXBpeGVsX3JhdGUgPSB0b19waXhlbF9yYXRlKDApOw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoYW5k bGVyLCBOVUxMLCBWNEwyX0NJRF9QSVhFTF9SQVRFLCAwLCBwaXhlbF9yYXRlLCAxLA0KKwkJCSAg cGl4ZWxfcmF0ZSk7DQorDQorCWhfYmxhbmsgPSBtb2RlLT5odHNfZGVmIC0gbW9kZS0+d2lkdGg7 DQorCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIE5VTEwsIFY0TDJfQ0lEX0hCTEFOSywgaF9i bGFuaywgaF9ibGFuaywgMSwNCisJCQkgIGhfYmxhbmspOw0KKw0KKwl2YmxhbmtfZGVmID0gbW9k ZS0+dnRzX2RlZiAtIG1vZGUtPmhlaWdodDsNCisJdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwg Jm92MDJhMTBfY3RybF9vcHMsIFY0TDJfQ0lEX1ZCTEFOSywNCisJCQkgIHZibGFua19kZWYsIE9W MDJBMTBfVlRTX01BWCAtIG1vZGUtPmhlaWdodCwgMSwNCisJCQkgIHZibGFua19kZWYpOw0KKw0K KwlleHBvc3VyZV9tYXggPSBtb2RlLT52dHNfZGVmIC0gNDsNCisJb3YwMmExMC0+ZXhwb3N1cmUg PSB2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCAmb3YwMmExMF9jdHJsX29wcywNCisJCQkJCSAg ICAgIFY0TDJfQ0lEX0VYUE9TVVJFLA0KKwkJCQkJICAgICAgT1YwMkExMF9FWFBPU1VSRV9NSU4s DQorCQkJCQkgICAgICBleHBvc3VyZV9tYXgsDQorCQkJCQkgICAgICBPVjAyQTEwX0VYUE9TVVJF X1NURVAsDQorCQkJCQkgICAgICBtb2RlLT5leHBfZGVmKTsNCisNCisJdjRsMl9jdHJsX25ld19z dGQoaGFuZGxlciwgJm92MDJhMTBfY3RybF9vcHMsDQorCQkJICBWNEwyX0NJRF9BTkFMT0dVRV9H QUlOLCBPVjAyQTEwX0dBSU5fTUlOLA0KKwkJCSAgT1YwMkExMF9HQUlOX01BWCwgT1YwMkExMF9H QUlOX1NURVAsDQorCQkJICBPVjAyQTEwX0dBSU5fREVGQVVMVCk7DQorDQorCXY0bDJfY3RybF9u ZXdfc3RkX21lbnVfaXRlbXMoaGFuZGxlciwgJm92MDJhMTBfY3RybF9vcHMsDQorCQkJCSAgICAg VjRMMl9DSURfVEVTVF9QQVRURVJOLA0KKwkJCQkgICAgIEFSUkFZX1NJWkUob3YwMmExMF90ZXN0 X3BhdHRlcm5fbWVudSkgLSAxLA0KKwkJCQkgICAgIDAsIDAsIG92MDJhMTBfdGVzdF9wYXR0ZXJu X21lbnUpOw0KKw0KKwlpZiAoaGFuZGxlci0+ZXJyb3IpIHsNCisJCXJldCA9IGhhbmRsZXItPmVy cm9yOw0KKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBjb250cm9scygl ZClcbiIsIHJldCk7DQorCQlnb3RvIGVycl9mcmVlX2hhbmRsZXI7DQorCX0NCisNCisJb3YwMmEx MC0+c3ViZGV2LmN0cmxfaGFuZGxlciA9IGhhbmRsZXI7DQorDQorCXJldHVybiAwOw0KKw0KK2Vy cl9mcmVlX2hhbmRsZXI6DQorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7DQorDQor CXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgb3YwMmExMF9jaGVja19od2NmZyhzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwKQ0KK3sNCisJc3RydWN0IGZ3 bm9kZV9oYW5kbGUgKmVwOw0KKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gZGV2X2Z3 bm9kZShkZXYpOw0KKwlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgYnVzX2NmZyA9IHsNCisJ CS5idXNfdHlwZSA9IFY0TDJfTUJVU19DU0kyX0RQSFksDQorCX07DQorCXVuc2lnbmVkIGludCBp LCBqOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAoIWZ3bm9kZSkNCisJCXJldHVybiAtRUlOVkFMOw0K Kw0KKwllcCA9IGZ3bm9kZV9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChmd25vZGUsIE5VTEwpOw0K KwlpZiAoIWVwKQ0KKwkJcmV0dXJuIC1FTlhJTzsNCisNCisJcmV0ID0gdjRsMl9md25vZGVfZW5k cG9pbnRfYWxsb2NfcGFyc2UoZXAsICZidXNfY2ZnKTsNCisJZndub2RlX2hhbmRsZV9wdXQoZXAp Ow0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaWYgKCFidXNfY2ZnLm5yX29mX2xp bmtfZnJlcXVlbmNpZXMpIHsNCisJCWRldl9lcnIoZGV2LCAibm8gbGluayBmcmVxdWVuY2llcyBk ZWZpbmVkIik7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBjaGVja19od2NmZ19lcnJvcjsN CisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsaW5rX2ZyZXFfbWVudV9pdGVt cyk7IGkrKykgew0KKwkJZm9yIChqID0gMDsgaiA8IGJ1c19jZmcubnJfb2ZfbGlua19mcmVxdWVu Y2llczsgaisrKSB7DQorCQkJaWYgKGxpbmtfZnJlcV9tZW51X2l0ZW1zW2ldID09DQorCQkJCWJ1 c19jZmcubGlua19mcmVxdWVuY2llc1tqXSkNCisJCQkJYnJlYWs7DQorCQl9DQorDQorCQlpZiAo aiA9PSBidXNfY2ZnLm5yX29mX2xpbmtfZnJlcXVlbmNpZXMpIHsNCisJCQlkZXZfZXJyKGRldiwg Im5vIGxpbmsgZnJlcXVlbmN5ICVsbGQgc3VwcG9ydGVkIiwNCisJCQkJbGlua19mcmVxX21lbnVf aXRlbXNbaV0pOw0KKwkJCXJldCA9IC1FSU5WQUw7DQorCQkJZ290byBjaGVja19od2NmZ19lcnJv cjsNCisJCX0NCisJfQ0KKw0KK2NoZWNrX2h3Y2ZnX2Vycm9yOg0KKwl2NGwyX2Z3bm9kZV9lbmRw b2ludF9mcmVlKCZidXNfY2ZnKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGlu dCBvdjAyYTEwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQorCXN0cnVjdCBvdjAyYTEwICpvdjAyYTEwOw0K Kwl1bnNpZ25lZCBpbnQgcm90YXRpb247DQorCXVuc2lnbmVkIGludCBjbG9ja19sYW5lX3R4X3Nw ZWVkOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisJaW50IHJldDsNCisNCisJb3YwMmExMCA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqb3YwMmExMCksIEdGUF9LRVJORUwpOw0KKwlpZiAoIW92MDJh MTApDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcmV0ID0gb3YwMmExMF9jaGVja19od2NmZyhk ZXYsIG92MDJhMTApOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBj aGVjayBIVyBjb25maWd1cmF0aW9uOiAlZCIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQor DQorCXY0bDJfaTJjX3N1YmRldl9pbml0KCZvdjAyYTEwLT5zdWJkZXYsIGNsaWVudCwgJm92MDJh MTBfc3ViZGV2X29wcyk7DQorCW92MDJhMTAtPm1pcGlfY2xvY2tfdHhfc3BlZWQgPSBPVjAyQTEw X01JUElfVFhfU1BFRURfREVGQVVMVDsNCisJb3YwMmExMC0+Zm10LmNvZGUgPSBNRURJQV9CVVNf Rk1UX1NCR0dSMTBfMVgxMDsNCisNCisJLyogT3B0aW9uYWwgaW5kaWNhdGlvbiBvZiBwaHlzaWNh bCByb3RhdGlvbiBvZiBzZW5zb3IgKi8NCisJcmV0ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMy KGRldl9md25vZGUoZGV2KSwgInJvdGF0aW9uIiwgJnJvdGF0aW9uKTsNCisJaWYgKCFyZXQgJiYg cm90YXRpb24gPT0gMTgwKSB7DQorCQlvdjAyYTEwLT51cHNpZGVfZG93biA9IHRydWU7DQorCQlv djAyYTEwLT5mbXQuY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwOw0KKwl9DQorDQor CS8qIE9wdGlvbmFsIGluZGljYXRpb24gb2YgbWlwaSBUWCBzcGVlZCAqLw0KKwlyZXQgPSBmd25v ZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAib3Z0aSxtaXBpLXR4LXNwZWVk IiwNCisJCQkJICAgICAgICZjbG9ja19sYW5lX3R4X3NwZWVkKTsNCisNCisJaWYgKCFyZXQpDQor CQlvdjAyYTEwLT5taXBpX2Nsb2NrX3R4X3NwZWVkID0gY2xvY2tfbGFuZV90eF9zcGVlZDsNCisN CisJLyogR2V0IHN5c3RlbSBjbG9jayAoZWNsaykgKi8NCisJb3YwMmExMC0+ZWNsayA9IGRldm1f Y2xrX2dldChkZXYsICJlY2xrIik7DQorCWlmIChJU19FUlIob3YwMmExMC0+ZWNsaykpIHsNCisJ CXJldCA9IFBUUl9FUlIob3YwMmExMC0+ZWNsayk7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBnZXQgZWNsayAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0g Zndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwgImNsb2NrLWZyZXF1ZW5j eSIsDQorCQkJCSAgICAgICAmb3YwMmExMC0+ZWNsa19mcmVxKTsNCisJaWYgKHJldCkgew0KKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGVjbGsgZnJlcXVlbmN5XG4iKTsNCisJCXJldHVy biByZXQ7DQorCX0NCisNCisJcmV0ID0gY2xrX3NldF9yYXRlKG92MDJhMTAtPmVjbGssIG92MDJh MTAtPmVjbGtfZnJlcSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IHNldCBlY2xrIGZyZXF1ZW5jeSAoMjRNSHopXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisN CisJaWYgKGNsa19nZXRfcmF0ZShvdjAyYTEwLT5lY2xrKSAhPSBPVjAyQTEwX0VDTEtfRlJFUSkg ew0KKwkJZGV2X3dhcm4oZGV2LCAid3JvbmcgZWNsayBmcmVxdWVuY3kgJWQgSHosIGV4cGVjdGVk OiAlZCBIelxuIiwNCisJCQkgb3YwMmExMC0+ZWNsa19mcmVxLCBPVjAyQTEwX0VDTEtfRlJFUSk7 DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlvdjAyYTEwLT5wZF9ncGlvID0gZGV2bV9n cGlvZF9nZXQoZGV2LCAicG93ZXJkb3duIiwgR1BJT0RfT1VUX0hJR0gpOw0KKwlpZiAoSVNfRVJS KG92MDJhMTAtPnBkX2dwaW8pKSB7DQorCQlyZXQgPSBQVFJfRVJSKG92MDJhMTAtPnBkX2dwaW8p Ow0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBvd2VyZG93bi1ncGlvcyAlZFxuIiwg cmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJb3YwMmExMC0+cnN0X2dwaW8gPSBkZXZt X2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsNCisJaWYgKElTX0VSUihv djAyYTEwLT5yc3RfZ3BpbykpIHsNCisJCXJldCA9IFBUUl9FUlIob3YwMmExMC0+cnN0X2dwaW8p Ow0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0LWdwaW9zICVkXG4iLCByZXQp Ow0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShv djAyYTEwX3N1cHBseV9uYW1lcyk7IGkrKykNCisJCW92MDJhMTAtPnN1cHBsaWVzW2ldLnN1cHBs eSA9IG92MDJhMTBfc3VwcGx5X25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9i dWxrX2dldChkZXYsIEFSUkFZX1NJWkUob3YwMmExMF9zdXBwbHlfbmFtZXMpLA0KKwkJCQkgICAg ICBvdjAyYTEwLT5zdXBwbGllcyk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIGdldCByZWd1bGF0b3JzXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJbXV0 ZXhfaW5pdCgmb3YwMmExMC0+bXV0ZXgpOw0KKwlvdjAyYTEwLT5jdXJfbW9kZSA9ICZzdXBwb3J0 ZWRfbW9kZXNbMF07DQorDQorCXJldCA9IG92MDJhMTBfaW5pdGlhbGl6ZV9jb250cm9scyhvdjAy YTEwKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBjb250cm9sc1xuIik7DQorCQlnb3RvIGVycl9kZXN0cm95X211dGV4Ow0KKwl9DQorDQorCW92 MDJhMTAtPnN1YmRldi5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsNCisJb3Yw MmExMC0+c3ViZGV2LmVudGl0eS5vcHMgPSAmb3YwMmExMF9zdWJkZXZfZW50aXR5X29wczsNCisJ b3YwMmExMC0+c3ViZGV2LmVudGl0eS5mdW5jdGlvbiA9IE1FRElBX0VOVF9GX0NBTV9TRU5TT1I7 DQorCW92MDJhMTAtPnBhZC5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7DQorDQorCXJldCA9 IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJm92MDJhMTAtPnN1YmRldi5lbnRpdHksIDEsICZvdjAy YTEwLT5wYWQpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g aW5pdCBlbnRpdHkgcGFkczogJWQiLCByZXQpOw0KKwkJZ290byBlcnJfZnJlZV9oYW5kbGVyOw0K Kwl9DQorDQorCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQorCWlmICghcG1fcnVudGltZV9lbmFi bGVkKGRldikpIHsNCisJCXJldCA9IG92MDJhMTBfcG93ZXJfb24oZGV2KTsNCisJCWlmIChyZXQg PCAwKSB7DQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcG93ZXIgb246ICVkXG4iLCByZXQp Ow0KKwkJCWdvdG8gZXJyX2NsZWFuX2VudGl0eTsNCisJCX0NCisJfQ0KKw0KKwlyZXQgPSB2NGwy X2FzeW5jX3JlZ2lzdGVyX3N1YmRldigmb3YwMmExMC0+c3ViZGV2KTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgVjRMMiBzdWJkZXY6ICVkIiwgcmV0 KTsNCisJCWdvdG8gZXJyX3Bvd2VyX29mZjsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJf cG93ZXJfb2ZmOg0KKwlpZiAocG1fcnVudGltZV9lbmFibGVkKGRldikpDQorCQlwbV9ydW50aW1l X2Rpc2FibGUoZGV2KTsNCisJZWxzZQ0KKwkJb3YwMmExMF9wb3dlcl9vZmYoZGV2KTsNCitlcnJf Y2xlYW5fZW50aXR5Og0KKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmb3YwMmExMC0+c3ViZGV2LmVu dGl0eSk7DQorZXJyX2ZyZWVfaGFuZGxlcjoNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShvdjAy YTEwLT5zdWJkZXYuY3RybF9oYW5kbGVyKTsNCitlcnJfZGVzdHJveV9tdXRleDoNCisJbXV0ZXhf ZGVzdHJveSgmb3YwMmExMC0+bXV0ZXgpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0 aWMgaW50IG92MDJhMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQorCXN0 cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQorDQorCXY0bDJfYXN5bmNf dW5yZWdpc3Rlcl9zdWJkZXYoc2QpOw0KKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0 eSk7DQorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoc2QtPmN0cmxfaGFuZGxlcik7DQorCXBtX3J1 bnRpbWVfZGlzYWJsZSgmY2xpZW50LT5kZXYpOw0KKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1 c3BlbmRlZCgmY2xpZW50LT5kZXYpKQ0KKwkJb3YwMmExMF9wb3dlcl9vZmYoJmNsaWVudC0+ZGV2 KTsNCisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCZjbGllbnQtPmRldik7DQorCW11dGV4X2Rl c3Ryb3koJm92MDJhMTAtPm11dGV4KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG92MDJhMTBfb2ZfbWF0Y2hbXSA9IHsNCisJeyAuY29t cGF0aWJsZSA9ICJvdnRpLG92MDJhMTAiIH0sDQorCXt9DQorfTsNCitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBvdjAyYTEwX29mX21hdGNoKTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIg b3YwMmExMF9pMmNfZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAib3YwMmEx MCIsDQorCQkucG0gPSAmb3YwMmExMF9wbV9vcHMsDQorCQkub2ZfbWF0Y2hfdGFibGUgPSBvdjAy YTEwX29mX21hdGNoLA0KKwl9LA0KKwkucHJvYmVfbmV3CT0gJm92MDJhMTBfcHJvYmUsDQorCS5y ZW1vdmUJCT0gJm92MDJhMTBfcmVtb3ZlLA0KK307DQorDQorbW9kdWxlX2kyY19kcml2ZXIob3Yw MmExMF9pMmNfZHJpdmVyKTsNCisNCitNT0RVTEVfQVVUSE9SKCJEb25nY2h1biBaaHUgPGRvbmdj aHVuLnpodUBtZWRpYXRlay5jb20+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJPbW5pVmlzaW9u IE9WMDJBMTAgc2Vuc29yIGRyaXZlciIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCisN Ci0tIA0KMi45LjINCg==