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=-12.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,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 BE3A2C388F9 for ; Tue, 3 Nov 2020 19:35:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6AF182080D for ; Tue, 3 Nov 2020 19:35:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6AF182080D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B5D676E8ED; Tue, 3 Nov 2020 19:35:00 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5666F6E8D7 for ; Tue, 3 Nov 2020 19:34:57 +0000 (UTC) IronPort-SDR: 45yfMLubUxlH5k0mU+8LHzINbowMjfrDLufNIPwgi8Z+LWYrPaJvBzhGjnTK+aHjjK60zSbVa7 9sQs1kotK1uw== X-IronPort-AV: E=McAfee;i="6000,8403,9794"; a="156102017" X-IronPort-AV: E=Sophos;i="5.77,448,1596524400"; d="scan'208";a="156102017" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Nov 2020 11:34:57 -0800 IronPort-SDR: B52Ih85F8EmvERwBwriVGQqxsE0JXGXRAS7UkDZ8wU95x8urOVNdEVmh6oRdtJRzHyOGuuEG8U e4Rz+6YrL1VA== X-IronPort-AV: E=Sophos;i="5.77,448,1596524400"; d="scan'208";a="538611010" Received: from adamreyx-mobl.amr.corp.intel.com (HELO achrisan-DESK2.amr.corp.intel.com) ([10.254.36.83]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-SHA; 03 Nov 2020 11:34:56 -0800 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com Subject: [PATCH v11 6/7] drm/kmb: Mipi DSI part of the display driver Date: Tue, 3 Nov 2020 11:34:32 -0800 Message-Id: <1604432073-15933-7-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1604432073-15933-1-git-send-email-anitha.chrisanthus@intel.com> References: <1604432073-15933-1-git-send-email-anitha.chrisanthus@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: edmund.j.dea@intel.com, sam@ravnborg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SW5pdGlhbGl6ZXMgTWlwaSBEU0kgYW5kIHNldHMgdXAgY29ubmVjdHMgdG8gQURWIGJyaWRnZQoK djI6IHJlbW92ZWQgbGljZW5zZSB0ZXh0CiAgICB1cGNsYXNzZWQgZGV2X3ByaXZhdGUsIHJlbW92 ZWQgSEFWRV9JUlEuIChTYW0pCgp2MzogU3F1YXNoZWQgYWxsIDU5IGNvbW1pdHMgdG8gb25lCgp2 NDogcmV2aWV3IGNoYW5nZXMgZnJvbSBTYW0gUmF2bmJvcmcKCXJlbmFtZWQgZGV2X3AgdG8ga21i Cgp2NTogY29ycmVjdGVkIHNwZWxsaW5ncwp2NjogY29ycmVjdGVkIGNoZWNrcGF0Y2ggd2Fybmlu Z3MKdjc6IHJldmlldyBjaGFuZ2VzIFNhbSBSYXZuYm9yZyBhbmQgVGhvbWFzIFppbW1lcm1hbgoJ cmVtb3ZlZCB1bm5lY2Vzc2FyeSBsb2dzIGFuZCBkZWZpbmVzIGFuZCBpZmRlZiBjb2RlcyAoU2Ft KQoJc3BsaXQgZHBoeV9pbml0X3NlcXVlbmNlIHNtYWxsZXIgKFNhbSkKCXJlbW92ZWQgcmVkdW5k YW50IGNoZWNrcyBpbiBrbWJfZHNpIChTYW0pCgljaGFuZ2VkIGttYl9kc2lfaW5pdCB0byBkcm1f YnJpZGdlX2Nvbm5lY3Rvcl9pbml0IGFuZAoJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlciB0 byBicmlkZ2UncyBjb25uZWN0b3IgKFNhbSkKdjg6IGNhbGwgZHJtX2JyaWRnZV9hdHRhY2ggd2l0 aCBEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IKdjk6IHJlbmFtZWQga21iX2RzaV9od19p bml0IHRvIGttYl9kc2lfbW9kZV9zZXQgKERhbmllbCBWKQp2MTA6IGNoYW5nZXMgaW4gZHJpdmVy IHRvIGFjY29tbW9kYXRlIGNoYW5nZXMgaW4gRFQgdG8gc2VwYXJhdGUgRFNJCiAgICAgZW50cmll cyAoU2FtIFIpCiAgICAgYWRkZWQgY29tbWVudHMgdG8gY2xhcmlmeSBlbXB0eSBkc2kgaG9zdCBm dW5jdGlvbnMKICAgICByZXZpZXcgY2hhbmdlcyBmcm9tIFNhbSB0byBzZXBhcmF0ZSBvdXQgRFNJ IHBhcnQsCiAgICAgcmVtb3ZlZCBkZXBlbmRlbmNpZXMgb24gZHJtIHNpZGUgKFNhbSBSKQp2MTE6 IHJldmlldyBjaGFuZ2VzIGZvciBzZXBhcmF0ZSBtc3NjYW0gbm9kZSAoU2FtIFIsIE5laWwgQSkK ClNpZ25lZC1vZmYtYnk6IEFuaXRoYSBDaHJpc2FudGh1cyA8YW5pdGhhLmNocmlzYW50aHVzQGlu dGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KQ2M6 IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KQ2M6IFRob21hcyBaaW1tZXJtYW5uIDx0 emltbWVybWFubkBzdXNlLmRlPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5jIHwgMTU2MiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmgg fCAgMzg3ICsrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTk0OSBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2kuaAoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNp LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0NzIzZAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5jCkBAIC0wLDAgKzEsMTU2MiBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHly aWdodCDCqSAyMDE5LTIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9n cmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9t aXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4K KworI2luY2x1ZGUgImttYl9kc2kuaCIKKyNpbmNsdWRlICJrbWJfcmVncy5oIgorCitzdGF0aWMg c3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0Oworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRzaV9kZXZpY2U7CitzdGF0aWMgc3RydWN0IGRybV9icmlkZ2UgKmFkdl9icmlkZ2U7 CisKKy8qIERlZmF1bHQgc2V0dGluZyBpcyAxMDgwcCwgNCBsYW5lcyAqLworI2RlZmluZSBJTUdf SEVJR0hUX0xJTkVTICAxMDgwCisjZGVmaW5lIElNR19XSURUSF9QWCAgICAgIDE5MjAKKyNkZWZp bmUgTUlQSV9UWF9BQ1RJVkVfTEFORVMgNAorCitzdGF0aWMgc3RydWN0IG1pcGlfdHhfZnJhbWVf c2VjdGlvbl9jZmcgbWlwaV90eF9mcmFtZTBfc2VjdF9jZmcgPSB7CisJLndpZHRoX3BpeGVscyA9 IElNR19XSURUSF9QWCwKKwkuaGVpZ2h0X2xpbmVzID0gSU1HX0hFSUdIVF9MSU5FUywKKwkuZGF0 YV90eXBlID0gRFNJX0xQX0RUX1BQU19SR0I4ODhfMjRCLAorCS5kYXRhX21vZGUgPSBNSVBJX0RB VEFfTU9ERTEsCisJLmRtYV9wYWNrZWQgPSAwCit9OworCitzdGF0aWMgc3RydWN0IG1pcGlfdHhf ZnJhbWVfY2ZnIG1pcGl0eF9mcmFtZTBfY2ZnID0geworCS5zZWN0aW9uc1swXSA9ICZtaXBpX3R4 X2ZyYW1lMF9zZWN0X2NmZywKKwkuc2VjdGlvbnNbMV0gPSBOVUxMLAorCS5zZWN0aW9uc1syXSA9 IE5VTEwsCisJLnNlY3Rpb25zWzNdID0gTlVMTCwKKwkudnN5bmNfd2lkdGggPSA1LAorCS52X2Jh Y2twb3JjaCA9IDM2LAorCS52X2Zyb250cG9yY2ggPSA0LAorCS5oc3luY193aWR0aCA9IDQ0LAor CS5oX2JhY2twb3JjaCA9IDE0OCwKKwkuaF9mcm9udHBvcmNoID0gODgKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbWlwaV90eF9kc2lfY2ZnIG1pcGl0eF9kc2lfY2ZnID0geworCS5oZnBfYmxh bmtfZW4gPSAwLAorCS5lb3RwX2VuID0gMCwKKwkubHBtX2xhc3RfdmZwX2xpbmUgPSAwLAorCS5s cG1fZmlyc3RfdnNhX2xpbmUgPSAwLAorCS5zeW5jX3B1bHNlX2V2ZW50biA9IERTSV9WSURFT19N T0RFX05PX0JVUlNUX0VWRU5ULAorCS5oZnBfYmxhbmtpbmcgPSBTRU5EX0JMQU5LX1BBQ0tFVCwK KwkuaGJwX2JsYW5raW5nID0gU0VORF9CTEFOS19QQUNLRVQsCisJLmhzYV9ibGFua2luZyA9IFNF TkRfQkxBTktfUEFDS0VULAorCS52X2JsYW5raW5nID0gU0VORF9CTEFOS19QQUNLRVQsCit9Owor CitzdGF0aWMgc3RydWN0IG1pcGlfY3RybF9jZmcgbWlwaV90eF9pbml0X2NmZyA9IHsKKwkuYWN0 aXZlX2xhbmVzID0gTUlQSV9UWF9BQ1RJVkVfTEFORVMsCisJLmxhbmVfcmF0ZV9tYnBzID0gTUlQ SV9UWF9MQU5FX0RBVEFfUkFURV9NQlBTLAorCS5yZWZfY2xrX2toeiA9IE1JUElfVFhfUkVGX0NM S19LSFosCisJLmNmZ19jbGtfa2h6ID0gTUlQSV9UWF9DRkdfQ0xLX0tIWiwKKwkudHhfY3RybF9j ZmcgPSB7CisJCQkuZnJhbWVzWzBdID0gJm1pcGl0eF9mcmFtZTBfY2ZnLAorCQkJLmZyYW1lc1sx XSA9IE5VTEwsCisJCQkuZnJhbWVzWzJdID0gTlVMTCwKKwkJCS5mcmFtZXNbM10gPSBOVUxMLAor CQkJLnR4X2RzaV9jZmcgPSAmbWlwaXR4X2RzaV9jZmcsCisJCQkubGluZV9zeW5jX3BrdF9lbiA9 IDAsCisJCQkubGluZV9jb3VudGVyX2FjdGl2ZSA9IDAsCisJCQkuZnJhbWVfY291bnRlcl9hY3Rp dmUgPSAwLAorCQkJLnR4X2Fsd2F5c191c2VfaGFjdCA9IDEsCisJCQkudHhfaGFjdF93YWl0X3N0 b3AgPSAxLAorCQkJfQorfTsKKworc3RydWN0ICBtaXBpX2hzX2ZyZXFfcmFuZ2VfY2ZnIHsKKwl1 MTYgZGVmYXVsdF9iaXRfcmF0ZV9tYnBzOworCXU4IGhzZnJlcXJhbmdlX2NvZGU7Cit9OworCitz dHJ1Y3QgdmNvX3BhcmFtcyB7CisJdTMyIGZyZXE7CisJdTMyIHJhbmdlOworCXUzMiBkaXZpZGVy OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2Y29fcGFyYW1zIHZjb190YWJsZVtdID0gewor CXs1MiwgMHgzZiwgOH0sCisJezgwLCAweDM5LCA4fSwKKwl7MTA1LCAweDJmLCA0fSwKKwl7MTYw LCAweDI5LCA0fSwKKwl7MjEwLCAweDFmLCAyfSwKKwl7MzIwLCAweDE5LCAyfSwKKwl7NDIwLCAw eDBmLCAxfSwKKwl7NjMwLCAweDA5LCAxfSwKKwl7MTEwMCwgMHgwMywgMX0sCisJezB4ZmZmZiwg MHgwMSwgMX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfaHNfZnJlcV9yYW5nZV9j ZmcKK21pcGlfaHNfZnJlcV9yYW5nZVtNSVBJX0RQSFlfREVGQVVMVF9CSVRfUkFURVNdID0gewor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gODAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgwMH0s CisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSA5MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDEw fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDIwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDExMCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDMwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEyMCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDAxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEzMCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDExfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE0MCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDIxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE1MCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDMxfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE2MCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDAyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE3MCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDEyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE4 MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDE5MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDIwNSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDAzfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDIyMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDEzfSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDIzNSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDIzfSwKKwl7LmRlZmF1bHRfYml0 X3JhdGVfbWJwcyA9IDI1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDMzfSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDI3NSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA0fSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDMwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDE0fSwKKwl7LmRl ZmF1bHRfYml0X3JhdGVfbWJwcyA9IDMyNSwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDI1fSwKKwl7 LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDM1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDM1fSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDQwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDA1 fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDQ1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDE2fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDUwMCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDI2fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDU1MCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDM3fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDYwMCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDA3fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDY1MCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDE4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDcwMCwgLmhzZnJl cXJhbmdlX2NvZGUgPSAweDI4fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDc1MCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDM5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDgwMCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDA5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDg1 MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDE5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDkwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDI5fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJw cyA9IDEwMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgwQX0sCisJey5kZWZhdWx0X2JpdF9yYXRl X21icHMgPSAxMDUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MUF9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gMTEwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDJBfSwKKwl7LmRlZmF1bHRf Yml0X3JhdGVfbWJwcyA9IDExNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzQn0sCisJey5kZWZh dWx0X2JpdF9yYXRlX21icHMgPSAxMjAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEJ9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTI1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDFCfSwK Kwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEzMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgy Qn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMzUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9 IDB4M0N9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTQwMCwgLmhzZnJlcXJhbmdlX2Nv ZGUgPSAweDBDfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE0NTAsIC5oc2ZyZXFyYW5n ZV9jb2RlID0gMHgxQ30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxNTAwLCAuaHNmcmVx cmFuZ2VfY29kZSA9IDB4MkN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTU1MCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDNEfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE2MDAs IC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgwRH0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAx NjUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MUR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gMTcwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDJFfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVf bWJwcyA9IDE3NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzRX0sCisJey5kZWZhdWx0X2JpdF9y YXRlX21icHMgPSAxODAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEV9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gMTg1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDFFfSwKKwl7LmRlZmF1 bHRfYml0X3JhdGVfbWJwcyA9IDE5MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgyRn0sCisJey5k ZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxOTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4M0Z9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjAwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDBG fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIwNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0g MHg0MH0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMTAwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4NDF9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjE1MCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDQyfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIyMDAsIC5oc2ZyZXFy YW5nZV9jb2RlID0gMHg0M30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMjUwLCAuaHNm cmVxcmFuZ2VfY29kZSA9IDB4NDR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjMwMCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ1fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDIz NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0Nn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMg PSAyNDAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDd9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gMjQ1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ4fSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDI1MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0OX0KK307CisKK3N0YXRpYyB2 b2lkIGttYl9kc2lfY2xrX2Rpc2FibGUoc3RydWN0IGttYl9kc2kgKmttYl9kc2kpCit7CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGttYl9kc2ktPmNsa19taXBpKTsKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoa21iX2RzaS0+Y2xrX21pcGlfZWNmZyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGtt Yl9kc2ktPmNsa19taXBpX2NmZyk7Cit9CisKK3ZvaWQga21iX2RzaV9ob3N0X3VucmVnaXN0ZXIo c3RydWN0IGttYl9kc2kgKmttYl9kc2kpCit7CisJa21iX2RzaV9jbGtfZGlzYWJsZShrbWJfZHNp KTsKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoa21iX2RzaS0+aG9zdCk7Cit9CisKKy8qCisg KiBUaGlzIERTSSBjYW4gb25seSBiZSBwYWlyZWQgd2l0aCBicmlkZ2VzIHRoYXQgZG8gY29uZmln IHRocm91Z2ggaTJjCisgKiB3aGljaCBpcyBBRFYgNzUzNSBpbiB0aGUgS01CIEVWTQorICovCitz dGF0aWMgc3NpemVfdCBrbWJfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3Qg Kmhvc3QsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga21iX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYpCit7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga21iX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3Qg bWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk ZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9z dF9vcHMga21iX2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0ga21iX2RzaV9ob3N0X2F0dGFj aCwKKwkuZGV0YWNoID0ga21iX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNmZXIgPSBrbWJfZHNp X2hvc3RfdHJhbnNmZXIsCit9OworCitpbnQga21iX2RzaV9ob3N0X2JyaWRnZV9pbml0KHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVuY29kZXJfbm9kZSwgKmRz aV9vdXQ7CisKKwkvKiBDcmVhdGUgYW5kIHJlZ2lzdGVyIE1JUEkgRFNJIGhvc3QgKi8KKwlpZiAo IWRzaV9ob3N0KSB7CisJCWRzaV9ob3N0ID0ga3phbGxvYyhzaXplb2YoKmRzaV9ob3N0KSwgR0ZQ X0tFUk5FTCk7CisJCWlmICghZHNpX2hvc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkc2lf aG9zdC0+b3BzID0gJmttYl9kc2lfaG9zdF9vcHM7CisKKwkJaWYgKCFkc2lfZGV2aWNlKSB7CisJ CQlkc2lfZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKmRzaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsK KwkJCWlmICghZHNpX2RldmljZSkgeworCQkJCWtmcmVlKGRzaV9ob3N0KTsKKwkJCQlyZXR1cm4g LUVOT01FTTsKKwkJCX0KKwkJfQorCisJCWRzaV9ob3N0LT5kZXYgPSBkZXY7CisJCW1pcGlfZHNp X2hvc3RfcmVnaXN0ZXIoZHNpX2hvc3QpOworCX0KKworCS8qIEZpbmQgQURWNzUzNSBub2RlIGFu ZCBpbml0aWFsaXplIGl0ICovCisJZHNpX291dCA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9y ZWdzKGRldi0+b2Zfbm9kZSwgMCwgMSk7CisJaWYgKCFkc2lfb3V0KSB7CisJCURSTV9FUlJPUigi RmFpbGVkIHRvIGdldCBkc2lfb3V0IG5vZGUgaW5mbyBmcm9tIERUXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCWVuY29kZXJfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJl bnQoZHNpX291dCk7CisJaWYgKCFlbmNvZGVyX25vZGUpIHsKKwkJb2Zfbm9kZV9wdXQoZHNpX291 dCk7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBicmlkZ2UgaW5mbyBmcm9tIERUXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIExvY2F0ZSBkcm0gYnJpZGdlIGZyb20gdGhlIGhk bWkgZW5jb2RlciBEVCBub2RlICovCisJYWR2X2JyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShl bmNvZGVyX25vZGUpOworCW9mX25vZGVfcHV0KGRzaV9vdXQpOworCW9mX25vZGVfcHV0KGVuY29k ZXJfbm9kZSk7CisJaWYgKCFhZHZfYnJpZGdlKSB7CisJCURSTV9ERUJVRygiV2FpdCBmb3IgZXh0 ZXJuYWwgYnJpZGdlIGRyaXZlciBEVFxuIik7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIG1pcGlfZ2V0X2RhdGF0eXBlX3BhcmFtcyh1 MzIgZGF0YV90eXBlLCB1MzIgZGF0YV9tb2RlLAorCQkJCSAgICBzdHJ1Y3QgbWlwaV9kYXRhX3R5 cGVfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFtcyBkYXRh X3R5cGVfcGFyYW07CisKKwlzd2l0Y2ggKGRhdGFfdHlwZSkgeworCWNhc2UgRFNJX0xQX0RUX1BQ U19ZQ0JDUjQyMF8xMkI6CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfcGl4ZWxz ID0gMjsKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9ieXRlcyA9IDM7CisJCXN3 aXRjaCAoZGF0YV9tb2RlKSB7CisJCQkvKiBDYXNlIDAgbm90IHN1cHBvcnRlZCBhY2NvcmRpbmcg dG8gTURLICovCisJCWNhc2UgMToKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlkYXRhX3R5cGVf cGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMjsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9w Y2xrID0gMjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiRFNJOiBJbnZh bGlkIGRhdGFfbW9kZSAlZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9 OworCQlicmVhazsKKwljYXNlIERTSV9MUF9EVF9QUFNfWUNCQ1I0MjJfMTZCOgorCQlkYXRhX3R5 cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDI7CisJCWRhdGFfdHlwZV9wYXJhbS5z aXplX2NvbnN0cmFpbnRfYnl0ZXMgPSA0OworCQlzd2l0Y2ggKGRhdGFfbW9kZSkgeworCQkJLyog Q2FzZSAwIGFuZCAxIG5vdCBzdXBwb3J0ZWQgYWNjb3JkaW5nCisJCQkgKiB0byBNREsKKwkJCSAq LworCQljYXNlIDI6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJ CWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMTY7CisJCQlicmVhazsKKwkJY2FzZSAz OgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDI7CisJCQlkYXRhX3R5cGVf cGFyYW0uYml0c19wZXJfcGNsayA9IDMyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1f RVJST1IoIkRTSTogSW52YWxpZCBkYXRhX21vZGUgJWRcbiIsIGRhdGFfbW9kZSk7CisJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJfTsKKwkJYnJlYWs7CisJY2FzZSBEU0lfTFBfRFRfTFBQU19ZQ0JDUjQy Ml8yMEI6CisJY2FzZSBEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzI0QjoKKwkJZGF0YV90eXBlX3Bh cmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAyOworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9j b25zdHJhaW50X2J5dGVzID0gNjsKKwkJc3dpdGNoIChkYXRhX21vZGUpIHsKKwkJCS8qIENhc2Ug MCBub3Qgc3VwcG9ydGVkIGFjY29yZGluZyB0byBNREsgKi8KKwkJY2FzZSAxOgorCQljYXNlIDI6 CisJCWNhc2UgMzoKKwkJCWRhdGFfdHlwZV9wYXJhbS5waXhlbHNfcGVyX3BjbGsgPSAxOworCQkJ ZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAyNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJRFJNX0VSUk9SKCJEU0k6IEludmFsaWQgZGF0YV9tb2RlICVkXG4iLCBkYXRhX21vZGUp OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX07CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX1BQ U19SR0I1NjVfMTZCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9 IDE7CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAyOworCQlzd2l0 Y2ggKGRhdGFfbW9kZSkgeworCQljYXNlIDA6CisJCWNhc2UgMToKKwkJCWRhdGFfdHlwZV9wYXJh bS5waXhlbHNfcGVyX3BjbGsgPSAxOworCQkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsg PSAxNjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCWNhc2UgMzoKKwkJCWRhdGFfdHlwZV9wYXJh bS5waXhlbHNfcGVyX3BjbGsgPSAyOworCQkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsg PSAzMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJEU0k6IEludmFsaWQg ZGF0YV9tb2RlICVkXG4iLCBkYXRhX21vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX07CisJ CWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX1BQU19SR0I2NjZfMThCOgorCQlkYXRhX3R5cGVfcGFy YW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDQ7CisJCWRhdGFfdHlwZV9wYXJhbS5zaXplX2Nv bnN0cmFpbnRfYnl0ZXMgPSA5OworCQlkYXRhX3R5cGVfcGFyYW0uYml0c19wZXJfcGNsayA9IDE4 OworCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJYnJlYWs7CisJY2Fz ZSBEU0lfTFBfRFRfTFBQU19SR0I2NjZfMThCOgorCWNhc2UgRFNJX0xQX0RUX1BQU19SR0I4ODhf MjRCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDE7CisJCWRh dGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAzOworCQlkYXRhX3R5cGVfcGFy YW0uYml0c19wZXJfcGNsayA9IDI0OworCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xr ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBEU0lfTFBfRFRfUFBTX1JHQjEwMTAxMF8zMEI6CisJCWRh dGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfcGl4ZWxzID0gNDsKKwkJZGF0YV90eXBlX3Bh cmFtLnNpemVfY29uc3RyYWludF9ieXRlcyA9IDE1OworCQlkYXRhX3R5cGVfcGFyYW0uYml0c19w ZXJfcGNsayA9IDMwOworCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJEU0k6IEludmFsaWQgZGF0YV90eXBlICVk XG4iLCBkYXRhX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9OworCisJKnBhcmFtcyA9IGRh dGFfdHlwZV9wYXJhbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjb21wdXRlX3djKHUz MiB3aWR0aF9weCwgdTggc2l6ZV9jb25zdHJfcCwgdTggc2l6ZV9jb25zdHJfYikKK3sKKwkvKiBD YWxjdWxhdGUgdGhlIHdvcmQgY291bnQgZm9yIGVhY2ggbG9uZyBwYWNrZXQgKi8KKwlyZXR1cm4g KCgod2lkdGhfcHggLyBzaXplX2NvbnN0cl9wKSAqIHNpemVfY29uc3RyX2IpICYgMHhmZmZmKTsK K30KKworc3RhdGljIHUzMiBjb21wdXRlX3VucGFja2VkX2J5dGVzKHUzMiB3YywgdTggYml0c19w ZXJfcGNsaykKK3sKKwkvKiBOdW1iZXIgb2YgUENMSyBjeWNsZXMgbmVlZGVkIHRvIHRyYW5zZmVy IGEgbGluZQorCSAqIHdpdGggZWFjaCBQQ0xLIGN5Y2xlLCA0IEJ5dGVzIGFyZSBzZW50IHRocm91 Z2ggdGhlIFBQTCBtb2R1bGUKKwkgKi8KKwlyZXR1cm4gKCh3YyAqIDgpIC8gYml0c19wZXJfcGNs aykgKiA0OworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfZmdfc2VjdGlvbl9jZmdfcmVncyhzdHJ1 Y3Qga21iX2RzaSAqa21iX2RzaSwKKwkJCQkgICAgICAgdTggZnJhbWVfaWQsIHU4IHNlY3Rpb24s CisJCQkJICAgICAgIHUzMiBoZWlnaHRfbGluZXMsIHUzMiB1bnBhY2tlZF9ieXRlcywKKwkJCQkg ICAgICAgc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdF9waGNmZyAqcGhfY2ZnKQoreworCXUzMiBj ZmcgPSAwOworCXUzMiBjdHJsX25vID0gTUlQSV9DVFJMNjsKKwl1MzIgcmVnX2FkcjsKKworCS8q IEZyYW1lIHNlY3Rpb24gcGFja2V0IGhlYWRlciAqLworCS8qIFdvcmQgY291bnQgYml0cyBbMTU6 MF0gKi8KKwljZmcgPSAocGhfY2ZnLT53YyAmIE1JUElfVFhfU0VDVF9XQ19NQVNLKSA8PCAwOwor CisJLyogRGF0YSB0eXBlIChiaXRzIFsyMToxNl0pICovCisJY2ZnIHw9ICgocGhfY2ZnLT5kYXRh X3R5cGUgJiBNSVBJX1RYX1NFQ1RfRFRfTUFTSykKKwkJPDwgTUlQSV9UWF9TRUNUX0RUX1NISUZU KTsKKworCS8qIFZpcnR1YWwgY2hhbm5lbCAoYml0cyBbMjM6MjJdKSAqLworCWNmZyB8PSAoKHBo X2NmZy0+dmNoYW5uZWwgJiBNSVBJX1RYX1NFQ1RfVkNfTUFTSykKKwkJPDwgTUlQSV9UWF9TRUNU X1ZDX1NISUZUKTsKKworCS8qIERhdGEgbW9kZSAoYml0cyBbMjQ6MjVdKSAqLworCWNmZyB8PSAo KHBoX2NmZy0+ZGF0YV9tb2RlICYgTUlQSV9UWF9TRUNUX0RNX01BU0spCisJCTw8IE1JUElfVFhf U0VDVF9ETV9TSElGVCk7CisJaWYgKHBoX2NmZy0+ZG1hX3BhY2tlZCkKKwkJY2ZnIHw9IE1JUElf VFhfU0VDVF9ETUFfUEFDS0VEOworCisJZGV2X2RiZyhrbWJfZHNpLT5kZXYsCisJCSJjdHJsPSVk IGZyYW1lX2lkPSVkIHNlY3Rpb249JWQgY2ZnPSV4IHBhY2tlZD0lZFxuIiwKKwkJICBjdHJsX25v LCBmcmFtZV9pZCwgc2VjdGlvbiwgY2ZnLCBwaF9jZmctPmRtYV9wYWNrZWQpOworCWttYl93cml0 ZV9taXBpKGttYl9kc2ksCisJCSAgICAgICAoTUlQSV9UWG1fSFNfRkduX1NFQ1RvX1BIKGN0cmxf bm8sIGZyYW1lX2lkLCBzZWN0aW9uKSksCisJCSAgICAgICBjZmcpOworCisJLyogVW5wYWNrZWQg Ynl0ZXMgKi8KKworCS8qIFRoZXJlIGFyZSA0IGZyYW1lIGdlbmVyYXRvcnMgYW5kIGVhY2ggZmcg aGFzIDQgc2VjdGlvbnMKKwkgKiBUaGVyZSBhcmUgMiByZWdpc3RlcnMgZm9yIHVucGFja2VkIGJ5 dGVzICgjIGJ5dGVzIGVhY2gKKwkgKiBzZWN0aW9uIG9jY3VwaWVzIGluIG1lbW9yeSkKKwkgKiBS RUdfVU5QQUNLRURfQllURVMwOiBbMTU6MF0tQllURVMwLCBbMzE6MTZdLUJZVEVTMQorCSAqIFJF R19VTlBBQ0tFRF9CWVRFUzE6IFsxNTowXS1CWVRFUzIsIFszMToxNl0tQllURVMzCisJICovCisJ cmVnX2FkciA9CisJICAgIE1JUElfVFhtX0hTX0ZHbl9TRUNUX1VOUEFDS0VEX0JZVEVTMChjdHJs X25vLAorCQkJCQkJIGZyYW1lX2lkKSArIChzZWN0aW9uIC8gMikgKiA0OworCWttYl93cml0ZV9i aXRzX21pcGkoa21iX2RzaSwgcmVnX2FkciwgKHNlY3Rpb24gJSAyKSAqIDE2LCAxNiwKKwkJCSAg ICB1bnBhY2tlZF9ieXRlcyk7CisJZGV2X2RiZyhrbWJfZHNpLT5kZXYsCisJCSJ1bnBhY2tlZF9i eXRlcyA9ICVkLCB3b3JkY291bnQgPSAlZFxuIiwgdW5wYWNrZWRfYnl0ZXMsCisJCSAgcGhfY2Zn LT53Yyk7CisKKwkvKiBMaW5lIGNvbmZpZyAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19GR25f U0VDVG9fTElORV9DRkcoY3RybF9ubywgZnJhbWVfaWQsIHNlY3Rpb24pOworCWttYl93cml0ZV9t aXBpKGttYl9kc2ksIHJlZ19hZHIsIGhlaWdodF9saW5lcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1MzIgbWlwaV90eF9mZ19zZWN0aW9uX2NmZyhzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwK KwkJCQkgIHU4IGZyYW1lX2lkLCB1OCBzZWN0aW9uLAorCQkJCSAgc3RydWN0IG1pcGlfdHhfZnJh bWVfc2VjdGlvbl9jZmcgKmZyYW1lX3NjZmcsCisJCQkJICB1MzIgKmJpdHNfcGVyX3BjbGssIHUz MiAqd2MpCit7CisJdTMyIHJldCA9IDA7CisJdTMyIHVucGFja2VkX2J5dGVzOworCXN0cnVjdCBt aXBpX2RhdGFfdHlwZV9wYXJhbXMgZGF0YV90eXBlX3BhcmFtZXRlcnM7CisJc3RydWN0IG1pcGlf dHhfZnJhbWVfc2VjdF9waGNmZyBwaF9jZmc7CisKKwlyZXQgPSBtaXBpX2dldF9kYXRhdHlwZV9w YXJhbXMoZnJhbWVfc2NmZy0+ZGF0YV90eXBlLAorCQkJCSAgICAgICBmcmFtZV9zY2ZnLT5kYXRh X21vZGUsCisJCQkJICAgICAgICZkYXRhX3R5cGVfcGFyYW1ldGVycyk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCS8qIFBhY2tldCB3aWR0aCBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiB0 aGUgbWluaW11bSBwYWNrZXQgd2lkdGgKKwkgKiAoaW4gcGl4ZWxzKSBzZXQgZm9yIGVhY2ggZGF0 YSB0eXBlCisJICovCisJaWYgKGZyYW1lX3NjZmctPndpZHRoX3BpeGVscyAlCisJICAgIGRhdGFf dHlwZV9wYXJhbWV0ZXJzLnNpemVfY29uc3RyYWludF9waXhlbHMgIT0gMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwkqd2MgPSBjb21wdXRlX3djKGZyYW1lX3NjZmctPndpZHRoX3BpeGVscywKKwkJ CSBkYXRhX3R5cGVfcGFyYW1ldGVycy5zaXplX2NvbnN0cmFpbnRfcGl4ZWxzLAorCQkJIGRhdGFf dHlwZV9wYXJhbWV0ZXJzLnNpemVfY29uc3RyYWludF9ieXRlcyk7CisJdW5wYWNrZWRfYnl0ZXMg PSBjb21wdXRlX3VucGFja2VkX2J5dGVzKCp3YywKKwkJCQkJCWRhdGFfdHlwZV9wYXJhbWV0ZXJz LmJpdHNfcGVyX3BjbGspOworCXBoX2NmZy53YyA9ICp3YzsKKwlwaF9jZmcuZGF0YV9tb2RlID0g ZnJhbWVfc2NmZy0+ZGF0YV9tb2RlOworCXBoX2NmZy5kYXRhX3R5cGUgPSBmcmFtZV9zY2ZnLT5k YXRhX3R5cGU7CisJcGhfY2ZnLmRtYV9wYWNrZWQgPSBmcmFtZV9zY2ZnLT5kbWFfcGFja2VkOwor CXBoX2NmZy52Y2hhbm5lbCA9IGZyYW1lX2lkOworCisJbWlwaV90eF9mZ19zZWN0aW9uX2NmZ19y ZWdzKGttYl9kc2ksIGZyYW1lX2lkLCBzZWN0aW9uLAorCQkJCSAgICBmcmFtZV9zY2ZnLT5oZWln aHRfbGluZXMsCisJCQkJICAgIHVucGFja2VkX2J5dGVzLCAmcGhfY2ZnKTsKKworCS8qIENhbGxl ciBuZWVkcyBiaXRzX3Blcl9jbGsgZm9yIGFkZGl0aW9uYWwgY2FsdWNsYXRpb25zICovCisJKmJp dHNfcGVyX3BjbGsgPSBkYXRhX3R5cGVfcGFyYW1ldGVycy5iaXRzX3Blcl9wY2xrOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfdHhfZmdfY2ZnX3JlZ3Moc3RydWN0IGttYl9k c2kgKmttYl9kc2ksIHU4IGZyYW1lX2dlbiwKKwkJCQlzdHJ1Y3QgbWlwaV90eF9mcmFtZV90aW1p bmdfY2ZnICpmZ19jZmcpCit7CisJdTMyIHN5c2NsazsKKwl1MzIgcHBsX2xscF9yYXRpbzsKKwl1 MzIgY3RybF9ubyA9IE1JUElfQ1RSTDYsIHJlZ19hZHIsIHZhbCwgb2Zmc2V0OworCisJLyogNTAw IE1oeiBzeXN0ZW0gY2xvY2sgbWludXMgNTAgdG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2Ug aW4KKwkgKiBNSVBJIGNsb2NrIHNwZWVkIGluIFJUTCB0ZXN0cworCSAqLworCXN5c2NsayA9IGtt Yl9kc2ktPnN5c19jbGtfbWh6IC0gNTA7CisKKwkvKiBQUEwtUGl4ZWwgUGFja2luZyBMYXllciwg TExQLUxvdyBMZXZlbCBQcm90b2NvbAorCSAqIEZyYW1lIGdlbmFydG9yIHRpbWluZyBwYXJhbWV0 ZXJzIGFyZSBjbG9ja2VkIG9uIHRoZSBzeXN0ZW0gY2xvY2ssCisJICogd2hlcmVhcyBhcyB0aGUg ZXF1aXZhbGVudCBwYXJhbWV0ZXJzIGluIHRoZSBMTFAgYmxvY2tzIGFyZSBjbG9ja2VkCisJICog b24gTExQIFR4IGNsb2NrIGZyb20gdGhlIEQtUEhZIC0gQllURSBjbG9jaworCSAqLworCisJLyog TXVsdGlwbHkgYnkgMTAwMCB0byBtYWludGFpbiBwcmVjaXNpb24gKi8KKwlwcGxfbGxwX3JhdGlv ID0gKChmZ19jZmctPmJwcCAvIDgpICogc3lzY2xrICogMTAwMCkgLworCSAgICAoKGZnX2NmZy0+ bGFuZV9yYXRlX21icHMgLyA4KSAqIGZnX2NmZy0+YWN0aXZlX2xhbmVzKTsKKworCWRldl9kYmco a21iX2RzaS0+ZGV2LCAicHBsX2xscF9yYXRpbz0lZFxuIiwgcHBsX2xscF9yYXRpbyk7CisJZGV2 X2RiZyhrbWJfZHNpLT5kZXYsICJicHA9JWQgc3lzY2xrPSVkIGxhbmUtcmF0ZT0lZCBhY3RpdmUt bGFuZXM9JWRcbiIsCisJCWZnX2NmZy0+YnBwLCBzeXNjbGssIGZnX2NmZy0+bGFuZV9yYXRlX21i cHMsCisJCSBmZ19jZmctPmFjdGl2ZV9sYW5lcyk7CisKKwkvKiBGcmFtZSBnZW5lcmF0b3IgbnVt YmVyIG9mIGxpbmVzICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0ZHbl9OVU1fTElORVMoY3Ry bF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVfbWlwaShrbWJfZHNpLCByZWdfYWRyLCBmZ19j ZmctPnZfYWN0aXZlKTsKKworCS8qIHZzeW5jIHdpZHRoCisJICogVGhlcmUgYXJlIDIgcmVnaXN0 ZXJzIGZvciB2c3luYyB3aWR0aCAoVlNBIGluIGxpbmVzIGZvcgorCSAqIGNoYW5uZWxzIDAtMykK KwkgKiBSRUdfVlNZTkNfV0lEVEgwOiBbMTU6MF0tVlNBIGZvciBjaGFubmVsMCwgWzMxOjE2XS1W U0EgZm9yIGNoYW5uZWwxCisJICogUkVHX1ZTWU5DX1dJRFRIMTogWzE1OjBdLVZTQSBmb3IgY2hh bm5lbDIsIFszMToxNl0tVlNBIGZvciBjaGFubmVsMworCSAqLworCW9mZnNldCA9IChmcmFtZV9n ZW4gJSAyKSAqIDE2OworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19WU1lOQ19XSURUSG4oY3RybF9u bywgZnJhbWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2JpdHNfbWlwaShrbWJfZHNpLCByZWdfYWRy LCBvZmZzZXQsIDE2LCBmZ19jZmctPnZzeW5jX3dpZHRoKTsKKworCS8qIHZlcnRpY2FsIGJhY2tw b3JjaCAodmJwKSAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19WX0JBQ0tQT1JDSEVTbihjdHJs X25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3JpdGVfYml0c19taXBpKGttYl9kc2ksIHJlZ19h ZHIsIG9mZnNldCwgMTYsIGZnX2NmZy0+dl9iYWNrcG9yY2gpOworCisJLyogdmVydGljYWwgZnJv bnRwb3JjaCAodmZwKSAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19WX0ZST05UUE9SQ0hFU24o Y3RybF9ubywgZnJhbWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2JpdHNfbWlwaShrbWJfZHNpLCBy ZWdfYWRyLCBvZmZzZXQsIDE2LCBmZ19jZmctPnZfZnJvbnRwb3JjaCk7CisKKwkvKiB2ZXJ0aWNh bCBhY3RpdmUgKHZhY3RpdmUpICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX1ZfQUNUSVZFbihj dHJsX25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3JpdGVfYml0c19taXBpKGttYl9kc2ksIHJl Z19hZHIsIG9mZnNldCwgMTYsIGZnX2NmZy0+dl9hY3RpdmUpOworCisJLyogaHN5bmMgd2lkdGgg Ki8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfSFNZTkNfV0lEVEhuKGN0cmxfbm8sIGZyYW1lX2dl bik7CisJa21iX3dyaXRlX21pcGkoa21iX2RzaSwgcmVnX2FkciwKKwkJICAgICAgIChmZ19jZmct PmhzeW5jX3dpZHRoICogcHBsX2xscF9yYXRpbykgLyAxMDAwKTsKKworCS8qIGhvcml6b250YWwg YmFja3BvcmNoIChoYnApICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hTX0hfQkFDS1BPUkNIbihj dHJsX25vLCBmcmFtZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIHJlZ19hZHIsCisJ CSAgICAgICAoZmdfY2ZnLT5oX2JhY2twb3JjaCAqIHBwbF9sbHBfcmF0aW8pIC8gMTAwMCk7CisK KwkvKiBob3Jpem9udGFsIGZyb250cG9yY2ggKGhmcCkgKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1f SFNfSF9GUk9OVFBPUkNIbihjdHJsX25vLCBmcmFtZV9nZW4pOworCWttYl93cml0ZV9taXBpKGtt Yl9kc2ksIHJlZ19hZHIsCisJCSAgICAgICAoZmdfY2ZnLT5oX2Zyb250cG9yY2ggKiBwcGxfbGxw X3JhdGlvKSAvIDEwMDApOworCisJLyogaG9yaXpvbnRhbCBhY3RpdmUgKGhhKSAqLworCXJlZ19h ZHIgPSBNSVBJX1RYbV9IU19IX0FDVElWRW4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKworCS8qIGNv bnZlcnQgaF9hY3RpdmUgd2hpY2ggaXMgd2MgaW4gYnl0ZXMgdG8gY3ljbGVzICovCisJdmFsID0g KGZnX2NmZy0+aF9hY3RpdmUgKiBzeXNjbGsgKiAxMDAwKSAvCisJICAgICgoZmdfY2ZnLT5sYW5l X3JhdGVfbWJwcyAvIDgpICogZmdfY2ZnLT5hY3RpdmVfbGFuZXMpOworCXZhbCAvPSAxMDAwOwor CWttYl93cml0ZV9taXBpKGttYl9kc2ksIHJlZ19hZHIsIHZhbCk7CisKKwkvKiBsbHAgaHN5bmMg d2lkdGggKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfTExQX0hTWU5DX1dJRFRIbihjdHJsX25v LCBmcmFtZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIHJlZ19hZHIsIGZnX2NmZy0+ aHN5bmNfd2lkdGggKiAoZmdfY2ZnLT5icHAgLyA4KSk7CisKKwkvKiBsbHAgaCBiYWNrcG9yY2gg Ki8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfTExQX0hfQkFDS1BPUkNIbihjdHJsX25vLCBmcmFt ZV9nZW4pOworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIHJlZ19hZHIsIGZnX2NmZy0+aF9iYWNr cG9yY2ggKiAoZmdfY2ZnLT5icHAgLyA4KSk7CisKKwkvKiBsbHAgaCBmcm9udHBvcmNoICovCisJ cmVnX2FkciA9IE1JUElfVFhtX0hTX0xMUF9IX0ZST05UUE9SQ0huKGN0cmxfbm8sIGZyYW1lX2dl bik7CisJa21iX3dyaXRlX21pcGkoa21iX2RzaSwgcmVnX2FkciwKKwkJICAgICAgIGZnX2NmZy0+ aF9mcm9udHBvcmNoICogKGZnX2NmZy0+YnBwIC8gOCkpOworfQorCitzdGF0aWMgdm9pZCBtaXBp X3R4X2ZnX2NmZyhzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwgdTggZnJhbWVfZ2VuLAorCQkJICAg dTggYWN0aXZlX2xhbmVzLCB1MzIgYnBwLCB1MzIgd2MsCisJCQkgICB1MzIgbGFuZV9yYXRlX21i cHMsIHN0cnVjdCBtaXBpX3R4X2ZyYW1lX2NmZyAqZmdfY2ZnKQoreworCXUzMiBpLCBmZ19udW1f bGluZXMgPSAwOworCXN0cnVjdCBtaXBpX3R4X2ZyYW1lX3RpbWluZ19jZmcgZmdfdF9jZmc7CisK KwkvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIGZyYW1lIGdlbmVyYXRvciBudW1iZXIgb2YKKwkgKiBs aW5lcyBiYXNlZCBvbiBpdCdzIGFjdGl2ZSBzZWN0aW9ucworCSAqLworCWZvciAoaSA9IDA7IGkg PCBNSVBJX1RYX0ZSQU1FX0dFTl9TRUNUSU9OUzsgaSsrKSB7CisJCWlmIChmZ19jZmctPnNlY3Rp b25zW2ldKQorCQkJZmdfbnVtX2xpbmVzICs9IGZnX2NmZy0+c2VjdGlvbnNbaV0tPmhlaWdodF9s aW5lczsKKwl9CisKKwlmZ190X2NmZy5icHAgPSBicHA7CisJZmdfdF9jZmcubGFuZV9yYXRlX21i cHMgPSBsYW5lX3JhdGVfbWJwczsKKwlmZ190X2NmZy5oc3luY193aWR0aCA9IGZnX2NmZy0+aHN5 bmNfd2lkdGg7CisJZmdfdF9jZmcuaF9iYWNrcG9yY2ggPSBmZ19jZmctPmhfYmFja3BvcmNoOwor CWZnX3RfY2ZnLmhfZnJvbnRwb3JjaCA9IGZnX2NmZy0+aF9mcm9udHBvcmNoOworCWZnX3RfY2Zn LmhfYWN0aXZlID0gd2M7CisJZmdfdF9jZmcudnN5bmNfd2lkdGggPSBmZ19jZmctPnZzeW5jX3dp ZHRoOworCWZnX3RfY2ZnLnZfYmFja3BvcmNoID0gZmdfY2ZnLT52X2JhY2twb3JjaDsKKwlmZ190 X2NmZy52X2Zyb250cG9yY2ggPSBmZ19jZmctPnZfZnJvbnRwb3JjaDsKKwlmZ190X2NmZy52X2Fj dGl2ZSA9IGZnX251bV9saW5lczsKKwlmZ190X2NmZy5hY3RpdmVfbGFuZXMgPSBhY3RpdmVfbGFu ZXM7CisKKwkvKiBBcHBseSBmcmFtZSBnZW5lcmF0b3IgdGltaW5nIHNldHRpbmcgKi8KKwltaXBp X3R4X2ZnX2NmZ19yZWdzKGttYl9kc2ksIGZyYW1lX2dlbiwgJmZnX3RfY2ZnKTsKK30KKworc3Rh dGljIHZvaWQgbWlwaV90eF9tdWx0aWNoYW5uZWxfZmlmb19jZmcoc3RydWN0IGttYl9kc2kgKmtt Yl9kc2ksCisJCQkJCSAgdTggYWN0aXZlX2xhbmVzLCB1OCB2Y2hhbm5lbF9pZCkKK3sKKwl1MzIg Zmlmb19zaXplLCBmaWZvX3J0aHJlc2hvbGQ7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2Owor CisJLyogQ2xlYXIgYWxsIG1jIGZpZm8gY2hhbm5lbCBzaXplcyBhbmQgdGhyZXNob2xkcyAqLwor CWttYl93cml0ZV9taXBpKGttYl9kc2ksIE1JUElfVFhfSFNfTUNfRklGT19DVFJMX0VOLCAwKTsK KwlrbWJfd3JpdGVfbWlwaShrbWJfZHNpLCBNSVBJX1RYX0hTX01DX0ZJRk9fQ0hBTl9BTExPQzAs IDApOworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIE1JUElfVFhfSFNfTUNfRklGT19DSEFOX0FM TE9DMSwgMCk7CisJa21iX3dyaXRlX21pcGkoa21iX2RzaSwgTUlQSV9UWF9IU19NQ19GSUZPX1JU SFJFU0hPTEQwLCAwKTsKKwlrbWJfd3JpdGVfbWlwaShrbWJfZHNpLCBNSVBJX1RYX0hTX01DX0ZJ Rk9fUlRIUkVTSE9MRDEsIDApOworCisJZmlmb19zaXplID0gKChhY3RpdmVfbGFuZXMgPiBNSVBJ X0RfTEFORVNfUEVSX0RQSFkpID8KKwkJICAgICBNSVBJX0NUUkxfNExBTkVfTUFYX01DX0ZJRk9f TE9DIDoKKwkJICAgICBNSVBJX0NUUkxfMkxBTkVfTUFYX01DX0ZJRk9fTE9DKSAtIDE7CisKKwkv KiBNQyBmaWZvIHNpemUgZm9yIHZpcnR1YWwgY2hhbm5lbHMgMC0zCisJICogUkVHX01DX0ZJRk9f Q0hBTl9BTExPQzA6IFs4OjBdLWNoYW5uZWwwLCBbMjQ6MTZdLWNoYW5uZWwxCisJICogUkVHX01D X0ZJRk9fQ0hBTl9BTExPQzE6IFs4OjBdLTIsIFsyNDoxNl0tY2hhbm5lbDMKKwkgKi8KKwlTRVRf TUNfRklGT19DSEFOX0FMTE9DKGttYl9kc2ksIGN0cmxfbm8sIHZjaGFubmVsX2lkLCBmaWZvX3Np emUpOworCisJLyogU2V0IHRocmVzaG9sZCB0byBoYWxmIHRoZSBmaWZvIHNpemUsIGFjdHVhbCBz aXplPXNpemUqMTYgKi8KKwlmaWZvX3J0aHJlc2hvbGQgPSAoKGZpZm9fc2l6ZSkgKiA4KSAmIEJJ VF9NQVNLXzE2OworCVNFVF9NQ19GSUZPX1JUSFJFU0hPTEQoa21iX2RzaSwgY3RybF9ubywgdmNo YW5uZWxfaWQsIGZpZm9fcnRocmVzaG9sZCk7CisKKwkvKiBFbmFibGUgdGhlIE1DIEZJRk8gY2hh bm5lbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBWaXJ0dWFsIENoYW5uZWwgKi8KKwlrbWJfc2V0X2Jp dF9taXBpKGttYl9kc2ksIE1JUElfVFhtX0hTX01DX0ZJRk9fQ1RSTF9FTihjdHJsX25vKSwKKwkJ CSB2Y2hhbm5lbF9pZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfdHhfY3RybF9jZmcoc3RydWN0 IGttYl9kc2kgKmttYl9kc2ksIHU4IGZnX2lkLAorCQkJICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2Nm ZyAqY3RybF9jZmcpCit7CisJdTMyIHN5bmNfY2ZnID0gMCwgY3RybCA9IDAsIGZnX2VuOworCXUz MiBjdHJsX25vID0gTUlQSV9DVFJMNjsKKworCS8qIE1JUElfVFhfSFNfU1lOQ19DRkcgKi8KKwlp ZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLmxpbmVfc3luY19wa3RfZW4pCisJCXN5bmNfY2ZnIHw9 IExJTkVfU1lOQ19QS1RfRU5BQkxFOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcuZnJhbWVf Y291bnRlcl9hY3RpdmUpCisJCXN5bmNfY2ZnIHw9IEZSQU1FX0NPVU5URVJfQUNUSVZFOworCWlm IChjdHJsX2NmZy0+dHhfY3RybF9jZmcubGluZV9jb3VudGVyX2FjdGl2ZSkKKwkJc3luY19jZmcg fD0gTElORV9DT1VOVEVSX0FDVElWRTsKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2Rz aV9jZmctPnZfYmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9WX0JMQU5LSU5HOworCWlmIChj dHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+aHNhX2JsYW5raW5nKQorCQlzeW5jX2Nm ZyB8PSBEU0lfSFNBX0JMQU5LSU5HOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNp X2NmZy0+aGJwX2JsYW5raW5nKQorCQlzeW5jX2NmZyB8PSBEU0lfSEJQX0JMQU5LSU5HOworCWlm IChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+aGZwX2JsYW5raW5nKQorCQlzeW5j X2NmZyB8PSBEU0lfSEZQX0JMQU5LSU5HOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhf ZHNpX2NmZy0+c3luY19wdWxzZV9ldmVudG4pCisJCXN5bmNfY2ZnIHw9IERTSV9TWU5DX1BVTFNF X0VWRU5UTjsKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2RzaV9jZmctPmxwbV9maXJz dF92c2FfbGluZSkKKwkJc3luY19jZmcgfD0gRFNJX0xQTV9GSVJTVF9WU0FfTElORTsKKwlpZiAo Y3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2RzaV9jZmctPmxwbV9sYXN0X3ZmcF9saW5lKQorCQlz eW5jX2NmZyB8PSBEU0lfTFBNX0xBU1RfVkZQX0xJTkU7CisKKwkvKiBFbmFibGUgZnJhbWUgZ2Vu ZXJhdG9yICovCisJZmdfZW4gPSAxIDw8IGZnX2lkOworCXN5bmNfY2ZnIHw9IEZSQU1FX0dFTl9F TihmZ19lbik7CisKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxfY2ZnLnR4X2Fsd2F5c191c2VfaGFj dCkKKwkJc3luY19jZmcgfD0gQUxXQVlTX1VTRV9IQUNUKGZnX2VuKTsKKwlpZiAoY3RybF9jZmct PnR4X2N0cmxfY2ZnLnR4X2hhY3Rfd2FpdF9zdG9wKQorCQlzeW5jX2NmZyB8PSBIQUNUX1dBSVRf U1RPUChmZ19lbik7CisKKwlkZXZfZGJnKGttYl9kc2ktPmRldiwgInN5bmNfY2ZnPSVkIGZnX2Vu PSVkXG4iLCBzeW5jX2NmZywgZmdfZW4pOworCisJLyogTUlQSV9UWF9IU19DVFJMICovCisKKwkv KiB0eXBlOkRTSSwgc291cmNlOkxDRCAqLworCWN0cmwgPSBIU19DVFJMX0VOIHwgVFhfU09VUkNF OworCWN0cmwgfD0gTENEX1ZDKGZnX2lkKTsKKwljdHJsIHw9IEFDVElWRV9MQU5FUyhjdHJsX2Nm Zy0+YWN0aXZlX2xhbmVzIC0gMSk7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lf Y2ZnLT5lb3RwX2VuKQorCQljdHJsIHw9IERTSV9FT1RQX0VOOworCWlmIChjdHJsX2NmZy0+dHhf Y3RybF9jZmcudHhfZHNpX2NmZy0+aGZwX2JsYW5rX2VuKQorCQljdHJsIHw9IERTSV9DTURfSEZQ X0VOOworCisJLyo2NyBucyBzdG9wIHRpbWUgKi8KKwljdHJsIHw9IEhTRVhJVF9DTlQoMHg0Myk7 CisKKwlrbWJfd3JpdGVfbWlwaShrbWJfZHNpLCBNSVBJX1RYbV9IU19TWU5DX0NGRyhjdHJsX25v KSwgc3luY19jZmcpOworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIE1JUElfVFhtX0hTX0NUUkwo Y3RybF9ubyksIGN0cmwpOworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfaW5pdF9jbnRybChzdHJ1 Y3Qga21iX2RzaSAqa21iX2RzaSwKKwkJCSAgICAgIHN0cnVjdCBtaXBpX2N0cmxfY2ZnICpjdHJs X2NmZykKK3sKKwl1MzIgcmV0ID0gMDsKKwl1OCBhY3RpdmVfdmNoYW5uZWxzID0gMDsKKwl1OCBm cmFtZV9pZCwgc2VjdDsKKwl1MzIgYml0c19wZXJfcGNsayA9IDA7CisJdTMyIHdvcmRfY291bnQg PSAwOworCXN0cnVjdCBtaXBpX3R4X2ZyYW1lX2NmZyAqZnJhbWU7CisKKwkvKiBUaGlzIGlzIHRo ZSBvcmRlciB0byBpbml0aWFsaXplIE1JUEkgVFg6CisJICogMS4gc2V0IGZyYW1lIHNlY3Rpb24g cGFyYW1ldGVycworCSAqIDIuIHNldCBmcmFtZSBzcGVjaWZpYyBwYXJhbWV0ZXJzCisJICogMy4g Y29ubmVjdCBsY2QgdG8gbWlwaQorCSAqIDQuIG11bHRpIGNoYW5uZWwgZmlmbyBjZmcKKwkgKiA1 LiBzZXQgbWlwaXR4Y2N0cmxjZmcKKwkgKi8KKworCWZvciAoZnJhbWVfaWQgPSAwOyBmcmFtZV9p ZCA8IDQ7IGZyYW1lX2lkKyspIHsKKwkJZnJhbWUgPSBjdHJsX2NmZy0+dHhfY3RybF9jZmcuZnJh bWVzW2ZyYW1lX2lkXTsKKworCQkvKiBGaW5kIHZhbGlkIGZyYW1lLCBhc3N1bWUgb25seSBvbmUg dmFsaWQgZnJhbWUgKi8KKwkJaWYgKCFmcmFtZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEZyYW1l IFNlY3Rpb24gY29uZmlndXJhdGlvbiAqLworCQkvKiBUT0RPIC0gYXNzdW1lIHRoZXJlIGlzIG9u bHkgb25lIHZhbGlkIHNlY3Rpb24gaW4gYSBmcmFtZSwKKwkJICogc28gYml0c19wZXJfcGNsayBh bmQgd29yZF9jb3VudCBhcmUgb25seSBzZXQgb25jZQorCQkgKi8KKwkJZm9yIChzZWN0ID0gMDsg c2VjdCA8IE1JUElfQ1RSTF9WSVJUVUFMX0NIQU5ORUxTOyBzZWN0KyspIHsKKwkJCWlmICghZnJh bWUtPnNlY3Rpb25zW3NlY3RdKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSBtaXBpX3R4X2Zn X3NlY3Rpb25fY2ZnKGttYl9kc2ksIGZyYW1lX2lkLCBzZWN0LAorCQkJCQkJICAgICBmcmFtZS0+ c2VjdGlvbnNbc2VjdF0sCisJCQkJCQkgICAgICZiaXRzX3Blcl9wY2xrLAorCQkJCQkJICAgICAm d29yZF9jb3VudCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBT ZXQgZnJhbWUgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCQltaXBpX3R4X2ZnX2NmZyhrbWJfZHNp LCBmcmFtZV9pZCwgY3RybF9jZmctPmFjdGl2ZV9sYW5lcywKKwkJCSAgICAgICBiaXRzX3Blcl9w Y2xrLCB3b3JkX2NvdW50LAorCQkJICAgICAgIGN0cmxfY2ZnLT5sYW5lX3JhdGVfbWJwcywgZnJh bWUpOworCisJCWFjdGl2ZV92Y2hhbm5lbHMrKzsKKworCQkvKiBTdG9wIGl0ZXJhdGluZyBhcyBv bmx5IG9uZSB2aXJ0dWFsIGNoYW5uZWwKKwkJICogc2hhbGwgYmUgdXNlZCBmb3IgTENEIGNvbm5l Y3Rpb24KKwkJICovCisJCWJyZWFrOworCX0KKworCWlmIChhY3RpdmVfdmNoYW5uZWxzID09IDAp CisJCXJldHVybiAtRUlOVkFMOworCS8qIE11bHRpLUNoYW5uZWwgRklGTyBDb25maWd1cmF0aW9u ICovCisJbWlwaV90eF9tdWx0aWNoYW5uZWxfZmlmb19jZmcoa21iX2RzaSwgY3RybF9jZmctPmFj dGl2ZV9sYW5lcywgZnJhbWVfaWQpOworCisJLyogRnJhbWUgR2VuZXJhdG9yIEVuYWJsZSAqLwor CW1pcGlfdHhfY3RybF9jZmcoa21iX2RzaSwgZnJhbWVfaWQsIGN0cmxfY2ZnKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbW9kZV9zZW5kKHN0cnVjdCBrbWJfZHNpICpr bWJfZHNpLCB1MzIgZHBoeV9ubywKKwkJCSAgIHUzMiB0ZXN0X2NvZGUsIHUzMiB0ZXN0X2RhdGEp Cit7CisJLyogU3RlcHMgdG8gc2VuZCB0ZXN0IGNvZGU6CisJICogLSBzZXQgdGVzdGNsayBISUdI CisJICogLSBzZXQgdGVzdGRpbiB3aXRoIHRlc3QgY29kZQorCSAqIC0gc2V0IHRlc3RlbiBISUdI CisJICogLSBzZXQgdGVzdGNsayBMT1cKKwkgKiAtIHNldCB0ZXN0ZW4gTE9XCisJICovCisKKwkv KiBTZXQgdGVzdGNsayBoaWdoICovCisJU0VUX0RQSFlfVEVTVF9DVFJMMV9DTEsoa21iX2RzaSwg ZHBoeV9ubyk7CisKKwkvKiBTZXQgdGVzdGRpbiAqLworCVNFVF9URVNUX0RJTjBfMyhrbWJfZHNp LCBkcGh5X25vLCB0ZXN0X2NvZGUpOworCisJLyogU2V0IHRlc3RlbiBoaWdoICovCisJU0VUX0RQ SFlfVEVTVF9DVFJMMV9FTihrbWJfZHNpLCBkcGh5X25vKTsKKworCS8qIFNldCB0ZXN0Y2xrIGxv dyAqLworCUNMUl9EUEhZX1RFU1RfQ1RSTDFfQ0xLKGttYl9kc2ksIGRwaHlfbm8pOworCisJLyog U2V0IHRlc3RlbiBsb3cgKi8KKwlDTFJfRFBIWV9URVNUX0NUUkwxX0VOKGttYl9kc2ksIGRwaHlf bm8pOworCisJaWYgKHRlc3RfY29kZSkgeworCQkvKiAgU3RlcHMgdG8gc2VuZCB0ZXN0IGRhdGE6 CisJCSAqIC0gc2V0IHRlc3RlbiBMT1cKKwkJICogLSBzZXQgdGVzdGNsayBMT1cKKwkJICogLSBz ZXQgdGVzdGRpbiB3aXRoIGRhdGEKKwkJICogLSBzZXQgdGVzdGNsayBISUdICisJCSAqLworCisJ CS8qIFNldCB0ZXN0ZW4gbG93ICovCisJCUNMUl9EUEhZX1RFU1RfQ1RSTDFfRU4oa21iX2RzaSwg ZHBoeV9ubyk7CisKKwkJLyogU2V0IHRlc3RjbGsgbG93ICovCisJCUNMUl9EUEhZX1RFU1RfQ1RS TDFfQ0xLKGttYl9kc2ksIGRwaHlfbm8pOworCisJCS8qIFNldCBkYXRhIGluIHRlc3RkaW4gKi8K KwkJa21iX3dyaXRlX21pcGkoa21iX2RzaSwKKwkJCSAgICAgICBEUEhZX1RFU1RfRElOMF8zICsg KChkcGh5X25vIC8gMHg0KSAqIDB4NCksCisJCQkgICAgICAgdGVzdF9kYXRhIDw8ICgoZHBoeV9u byAlIDQpICogOCkpOworCisJCS8qIFNldCB0ZXN0Y2xrIGhpZ2ggKi8KKwkJU0VUX0RQSFlfVEVT VF9DVFJMMV9DTEsoa21iX2RzaSwgZHBoeV9ubyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZv aWQKKwlzZXRfdGVzdF9tb2RlX3NyY19vc2NfZnJlcV90YXJnZXRfbG93X2JpdHMoc3RydWN0IGtt Yl9kc2kgKmttYl9kc2ksCisJCQkJCQkgICB1MzIgZHBoeV9ubywKKwkJCQkJCSAgIHUzMiBmcmVx KQoreworCS8qIFR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3IGRh dGFib29rLAorCSAqIHNyX29zY19mcmVxX3RhcmdldFs3OjBdCisJICovCisJdGVzdF9tb2RlX3Nl bmQoa21iX2RzaSwgZHBoeV9ubywgVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTLAorCQkg ICAgICAgKGZyZXEgJiAweDdmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorCXNldF90ZXN0 X21vZGVfc3JjX29zY19mcmVxX3RhcmdldF9oaV9iaXRzKHN0cnVjdCBrbWJfZHNpICprbWJfZHNp LAorCQkJCQkJICB1MzIgZHBoeV9ubywKKwkJCQkJCSAgdTMyIGZyZXEpCit7CisJdTMyIGRhdGE7 CisKKwkvKiBGbGFnIHRoaXMgYXMgaGlnaCBuaWJibGUgKi8KKwlkYXRhID0gKChmcmVxID4+IDYp ICYgMHgxZikgfCAoMSA8PCA3KTsKKworCS8qIFR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCBy ZWZlciBUYWJsZSAxMjA3IGRhdGFib29rLAorCSAqIHNyX29zY19mcmVxX3RhcmdldFsxMTo3XQor CSAqLworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIFRFU1RfQ09ERV9TTEVXX1JB VEVfRERMX0NZQ0xFUywgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfdHhfZ2V0X3Zjb19w YXJhbXMoc3RydWN0IHZjb19wYXJhbXMgKnZjbykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHZjb190YWJsZSk7IGkrKykgeworCQlpZiAodmNvLT5mcmVxIDwgdmNv X3RhYmxlW2ldLmZyZXEpIHsKKwkJCSp2Y28gPSB2Y29fdGFibGVbaV07CisJCQlyZXR1cm47CisJ CX0KKwl9CisKKwlXQVJOX09OQ0UoMSwgIkludmFsaWQgdmNvIGZyZXEgPSAldSBmb3IgUExMIHNl dHVwXG4iLCB2Y28tPmZyZXEpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4X3BsbF9zZXR1cChz dHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwgdTMyIGRwaHlfbm8sCisJCQkgICAgICB1MzIgcmVmX2Ns a19taHosIHUzMiB0YXJnZXRfZnJlcV9taHopCit7CisJdTMyIGJlc3RfbiA9IDAsIGJlc3RfbSA9 IDA7CisJdTMyIG4gPSAwLCBtID0gMCwgZGl2ID0gMCwgZGVsdGEsIGZyZXEgPSAwLCB0X2ZyZXE7 CisJdTMyIGJlc3RfZnJlcV9kZWx0YSA9IDMwMDA7CisKKwkvKiBwbGxfcmVmX2NsazogLSB2YWxp ZCByYW5nZTogMn42NCBNSHo7IFR5cGljYWxseSAyNCBNSHoKKwkgKiBGdmNvOiAtIHZhbGlkIHJh bmdlOiAzMjB+MTI1MCBNSHogKEdlbjMgRC1QSFkpCisJICogRm91dDogLSB2YWxpZCByYW5nZTog NDB+MTI1MCBNSHogKEdlbjMgRC1QSFkpCisJICogbjogLSB2YWxpZCByYW5nZSBbMCAxNV0KKwkg KiBOOiAtIE4gPSBuICsgMQorCSAqICAgICAgLXZhbGlkIHJhbmdlOiBbMSAxNl0KKwkgKiAgICAg IC1jb25kaXRpb25zOiAtIChwbGxfcmVmX2NsayAvIE4pID49IDIgTUh6CisJICogICAgICAgICAg ICAgLShwbGxfcmVmX2NsayAvIE4pIDw9IDggTUh6CisJICogbTogdmFsaWQgcmFuZ2UgWzYyIDYy M10KKwkgKiBNOiAtIE0gPSBtICsgMgorCSAqICAgICAgLXZhbGlkIHJhbmdlIFs2NCA2MjVdCisJ ICogICAgICAtRnZjbyA9IChNL04pICogcGxsX3JlZl9jbGsKKwkgKi8KKwlzdHJ1Y3QgdmNvX3Bh cmFtcyB2Y29fcCA9IHsKKwkJLnJhbmdlID0gMCwKKwkJLmRpdmlkZXIgPSAxLAorCX07CisKKwl2 Y29fcC5mcmVxID0gdGFyZ2V0X2ZyZXFfbWh6OworCW1pcGlfdHhfZ2V0X3Zjb19wYXJhbXMoJnZj b19wKTsKKworCS8qIFNlYXJjaCBwbGwgbiBwYXJhbWV0ZXIgKi8KKwlmb3IgKG4gPSBQTExfTl9N SU47IG4gPD0gUExMX05fTUFYOyBuKyspIHsKKwkJLyogQ2FsY3VsYXRlIHRoZSBwbGwgaW5wdXQg ZnJlcXVlbmN5IGRpdmlzaW9uIHJhdGlvCisJCSAqIG11bHRpcGx5IGJ5IDEwMDAgZm9yIHByZWNp c2lvbiAtCisJCSAqIG5vIGZsb2F0aW5nIHBvaW50LCBhZGQgbiBmb3Igcm91bmRpbmcKKwkJICov CisJCWRpdiA9ICgocmVmX2Nsa19taHogKiAxMDAwKSArIG4pIC8gKG4gKyAxKTsKKworCQkvKiBG b3VuZCBhIHZhbGlkIG4gcGFyYW1ldGVyICovCisJCWlmICgoZGl2IDwgMjAwMCB8fCBkaXYgPiA4 MDAwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNlYXJjaCBwbGwgbSBwYXJhbWV0ZXIgKi8KKwkJ Zm9yIChtID0gUExMX01fTUlOOyBtIDw9IFBMTF9NX01BWDsgbSsrKSB7CisJCQkvKiBDYWxjdWxh dGUgdGhlIEZ2Y28oRFBIWSBQTEwgb3V0cHV0IGZyZXF1ZW5jeSkKKwkJCSAqIHVzaW5nIHRoZSBj dXJyZW50IG4sbSBwYXJhbXMKKwkJCSAqLworCQkJZnJlcSA9IGRpdiAqIChtICsgMik7CisJCQlm cmVxIC89IDEwMDA7CisKKwkJCS8qIFRyaW0gdGhlIHBvdGVudGlhbCBwbGwgZnJlcSB0byBtYXgg c3VwcG9ydGVkICovCisJCQlpZiAoZnJlcSA+IFBMTF9GVkNPX01BWCkKKwkJCQljb250aW51ZTsK KworCQkJZGVsdGEgPSBhYnMoZnJlcSAtIHRhcmdldF9mcmVxX21oeik7CisKKwkJCS8qIFNlbGVj dCB0aGUgYmVzdCAoY2xvc2VzdCB0byB0YXJnZXQgcGxsIGZyZXEpCisJCQkgKiBuLG0gcGFyYW1l dGVycyBzbyBmYXIKKwkJCSAqLworCQkJaWYgKGRlbHRhIDwgYmVzdF9mcmVxX2RlbHRhKSB7CisJ CQkJYmVzdF9uID0gbjsKKwkJCQliZXN0X20gPSBtOworCQkJCWJlc3RfZnJlcV9kZWx0YSA9IGRl bHRhOworCQkJfQorCQl9CisJfQorCisJLyogUHJvZ3JhbSB2Y29fY250cmwgcGFyYW1ldGVyCisJ ICogUExMX1ZDT19Db250cm9sWzU6MF0gPSBwbGxfdmNvX2NudHJsX292ciwKKwkgKiBQTExfVkNP X0NvbnRyb2xbNl0gICA9IHBsbF92Y29fY250cmxfb3ZyX2VuCisJICovCisJdGVzdF9tb2RlX3Nl bmQoa21iX2RzaSwgZHBoeV9ubywgVEVTVF9DT0RFX1BMTF9WQ09fQ1RSTCwgKHZjb19wLnJhbmdl CisJCQkJCQkJCXwgKDEgPDwgNikpKTsKKworCS8qIFByb2dyYW0gbSwgbiBwbGwgcGFyYW1ldGVy cyAqLworCWRldl9kYmcoa21iX2RzaS0+ZGV2LCAibSA9ICVkIG4gPSAlZFxuIiwgYmVzdF9tLCBi ZXN0X24pOworCisJLyogUExMX0lucHV0X0RpdmlkZXJfUmF0aW9bMzowXSA9IHBsbF9uX292ciAq LworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfSU5QVVRf RElWSURFUiwKKwkJICAgICAgIChiZXN0X24gJiAweDBmKSk7CisKKwkvKiBtIC0gbG93IG5pYmJs ZSBQTExfTG9vcF9EaXZpZGVyX1JhdGlvWzQ6MF0KKwkgKiBwbGxfbV9vdnJbNDowXQorCSAqLwor CXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfRkVFREJBQ0tf RElWSURFUiwKKwkJICAgICAgIChiZXN0X20gJiAweDFmKSk7CisKKwkvKiBtIC0gaGlnaCBuaWJi bGUgUExMX0xvb3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21fb3ZyWzk6NV0KKwkgKi8K Kwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCBURVNUX0NPREVfUExMX0ZFRURCQUNL X0RJVklERVIsCisJCSAgICAgICAoKGJlc3RfbSA+PiA1KSAmIDB4MWYpIHwgUExMX0ZFRURCQUNL X0RJVklERVJfSElHSCk7CisKKwkvKiBFbmFibGUgb3ZlcndyaXRlIG9mIG4sbSBwYXJhbWV0ZXJz IDpwbGxfbl9vdnJfZW4sIHBsbF9tX292cl9lbiAqLworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ks IGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfT1VUUFVUX0NMS19TRUwsCisJCSAgICAgICAoUExMX05f T1ZSX0VOIHwgUExMX01fT1ZSX0VOKSk7CisKKwkvKiBQcm9ncmFtIENoYXJnZS1QdW1wIHBhcmFt ZXRlcnMgKi8KKworCS8qIHBsbF9wcm9wX2NudHJsLWZpeGVkIHZhbHVlcyBmb3IgcHJvcF9jbnRy bCBmcm9tIERQSFkgZG9jICovCisJdF9mcmVxID0gdGFyZ2V0X2ZyZXFfbWh6ICogdmNvX3AuZGl2 aWRlcjsKKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLAorCQkgICAgICAgVEVTVF9D T0RFX1BMTF9QUk9QT1JUSU9OQUxfQ0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAgICgodF9mcmVx ID4gMTE1MCkgPyAweDBDIDogMHgwQikpOworCisJLyogcGxsX2ludF9jbnRybC1maXhlZCB2YWx1 ZSBmb3IgaW50X2NudHJsIGZyb20gRFBIWSBkb2MgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNp LCBkcGh5X25vLCBURVNUX0NPREVfUExMX0lOVEVHUkFMX0NIQVJHRV9QVU1QX0NUUkwsCisJCSAg ICAgICAweDAwKTsKKworCS8qIHBsbF9nbXBfY250cmwtZml4ZWQgdmFsdWUgZm9yIGdtcF9jbnRy bCBmcm9tIERQSFkgZG9jaSAqLworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIFRF U1RfQ09ERV9QTExfR01QX0NUUkwsIDB4MTApOworCisJLyogcGxsX2NwYmlhc19jbnRybC1maXhl ZCB2YWx1ZSBmb3IgY3BiaWFzX2NudHJsIGZyb20gRFBIWSBkb2MgKi8KKwl0ZXN0X21vZGVfc2Vu ZChrbWJfZHNpLCBkcGh5X25vLCBURVNUX0NPREVfUExMX0NIQVJHRV9QVU1QX0JJQVMsIDB4MTAp OworCisJLyogcGxsX3RoMSAtTG9jayBEZXRlY3RvciBQaGFzZSBlcnJvciB0aHJlc2hvbGQsCisJ ICogZG9jdW1lbnQgZ2l2ZXMgZml4ZWQgdmFsdWUKKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWJf ZHNpLCBkcGh5X25vLCBURVNUX0NPREVfUExMX1BIQVNFX0VSUl9DVFJMLCAweDAyKTsKKworCS8q IFBMTCBMb2NrIENvbmZpZ3VyYXRpb24gKi8KKworCS8qIHBsbF90aDIgLSBMb2NrIEZpbHRlciBs ZW5ndGgsIGRvY3VtZW50IGdpdmVzIGZpeGVkIHZhbHVlICovCisJdGVzdF9tb2RlX3NlbmQoa21i X2RzaSwgZHBoeV9ubywgVEVTVF9DT0RFX1BMTF9MT0NLX0ZJTFRFUiwgMHg2MCk7CisKKwkvKiBw bGxfdGgzLSBQTEwgVW5sb2NraW5nIGZpbHRlciwgZG9jdW1lbnQgZ2l2ZXMgZml4ZWQgdmFsdWUg Ki8KKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCBURVNUX0NPREVfUExMX1VOTE9D S19GSUxURVIsIDB4MDMpOworCisJLyogcGxsX2xvY2tfc2VsLVBMTCBMb2NrIERldGVjdG9yIFNl bGVjdGlvbiwKKwkgKiBkb2N1bWVudCBnaXZlcyBmaXhlZCB2YWx1ZQorCSAqLworCXRlc3RfbW9k ZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfTE9DS19ERVRFQ1RPUiwgMHgw Mik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zbGV3cmF0ZV9ndF8xNTAwKHN0cnVjdCBrbWJfZHNp ICprbWJfZHNpLCB1MzIgZHBoeV9ubykKK3sKKwl1MzIgdGVzdF9jb2RlID0gMCwgdGVzdF9kYXRh ID0gMDsKKwkvKiBCeXBhc3Mgc2xldyByYXRlIGNhbGlicmF0aW9uIGFsZ29yaXRobQorCSAqIGJp dHNbMTowfSBzcmNhbF9lbl9vdnJfZW4sIHNyY2FsX2VuX292cgorCSAqLworCXRlc3RfY29kZSA9 IFRFU1RfQ09ERV9TTEVXX1JBVEVfT1ZFUlJJREVfQ1RSTDsKKwl0ZXN0X2RhdGEgPSAweDAyOwor CXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsK KworCS8qIERpc2FibGUgc2xldyByYXRlIGNhbGlicmF0aW9uICovCisJdGVzdF9jb2RlID0gVEVT VF9DT0RFX1NMRVdfUkFURV9ERExfTE9PUF9DVFJMOworCXRlc3RfZGF0YSA9IDB4MDA7CisJdGVz dF9tb2RlX3NlbmQoa21iX2RzaSwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworfQor CitzdGF0aWMgdm9pZCBzZXRfc2xld3JhdGVfZ3RfMTAwMChzdHJ1Y3Qga21iX2RzaSAqa21iX2Rz aSwgdTMyIGRwaHlfbm8pCit7CisJdTMyIHRlc3RfY29kZSA9IDAsIHRlc3RfZGF0YSA9IDA7CisK KwkvKiBCaXRSYXRlOiA+IDEgR2JwcyAmJiA8PSAxLjUgR2JwczogLSBzbGV3IHJhdGUgY29udHJv bCBPTgorCSAqIHR5cGljYWwgcmlzZS9mYWxsIHRpbWVzOiAxNjYgcHMKKwkgKi8KKworCS8qIERv IG5vdCBieXBhc3Mgc2xldyByYXRlIGNhbGlicmF0aW9uIGFsZ29yaXRobQorCSAqIGJpdHNbMTow fT1zcmNhbF9lbl9vdnJfZW4sIHNyY2FsX2VuX292ciwgYml0WzZdPXNyX3JhbmdlCisJICovCisJ dGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9PVkVSUklERV9DVFJMOworCXRlc3RfZGF0 YSA9ICgweDAzIHwgKDEgPDwgNikpOworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8s IHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCS8qIEVuYWJsZSBzbGV3IHJhdGUgY2FsaWJyYXRp b24gKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9MT09QX0NUUkw7CisJ dGVzdF9kYXRhID0gMHgwMTsKKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCB0ZXN0 X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBTZXQgc3Jfb3NjX2ZyZXFfdGFyZ2V0WzY6MF0gbG93 IG5pYmJsZQorCSAqIHR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3 IGRhdGFib29rCisJICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lD TEVTOworCXRlc3RfZGF0YSA9ICgweDcyZiAmIDB4N2YpOworCXRlc3RfbW9kZV9zZW5kKGttYl9k c2ksIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCS8qIFNldCBzcl9vc2NfZnJl cV90YXJnZXRbMTE6N10gaGlnaCBuaWJibGUKKwkgKiBUeXBpY2FsIHJpc2UvZmFsbCB0aW1lPTE2 NiwgcmVmZXIgVGFibGUgMTIwNyBkYXRhYm9vaworCSAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09E RV9TTEVXX1JBVEVfRERMX0NZQ0xFUzsKKwl0ZXN0X2RhdGEgPSAoKDB4NzJmID4+IDYpICYgMHgx ZikgfCAoMSA8PCA3KTsKKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCB0ZXN0X2Nv ZGUsIHRlc3RfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zbGV3cmF0ZV9sdF8xMDAwKHN0 cnVjdCBrbWJfZHNpICprbWJfZHNpLCB1MzIgZHBoeV9ubykKK3sKKwl1MzIgdGVzdF9jb2RlID0g MCwgdGVzdF9kYXRhID0gMDsKKworCS8qIGxhbmVfcmF0ZV9tYnBzIDw9IDEwMDAgTWJwcworCSAq IEJpdFJhdGU6ICA8PSAxIEdicHM6CisJICogLSBzbGV3IHJhdGUgY29udHJvbCBPTgorCSAqIC0g dHlwaWNhbCByaXNlL2ZhbGwgdGltZXM6IDIyNSBwcworCSAqLworCisJLyogRG8gbm90IGJ5cGFz cyBzbGV3IHJhdGUgY2FsaWJyYXRpb24gYWxnb3JpdGhtICovCisJdGVzdF9jb2RlID0gVEVTVF9D T0RFX1NMRVdfUkFURV9PVkVSUklERV9DVFJMOworCXRlc3RfZGF0YSA9ICgweDAzIHwgKDEgPDwg NikpOworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9k YXRhKTsKKworCS8qIEVuYWJsZSBzbGV3IHJhdGUgY2FsaWJyYXRpb24gKi8KKwl0ZXN0X2NvZGUg PSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9MT09QX0NUUkw7CisJdGVzdF9kYXRhID0gMHgwMTsK Kwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7 CisKKwkvKiBUeXBpY2FsIHJpc2UvZmFsbCB0aW1lPTI1NSwgcmVmZXIgVGFibGUgMTIwNyBkYXRh Ym9vayAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0NZQ0xFUzsKKwl0 ZXN0X2RhdGEgPSAoMHg1MjMgJiAweDdmKTsKKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5 X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBTZXQgc3Jfb3NjX2ZyZXFfdGFyZ2V0 WzExOjddIGhpZ2ggbmliYmxlICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9E RExfQ1lDTEVTOworCXRlc3RfZGF0YSA9ICgoMHg1MjMgPj4gNikgJiAweDFmKSB8ICgxIDw8IDcp OworCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIHRlc3RfY29kZSwgdGVzdF9kYXRh KTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcGxsKHN0cnVjdCBrbWJfZHNpICprbWJfZHNpLCB1 MzIgZHBoeV9ubywKKwkJICAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZykKK3sKKwl1MzIg dGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMDsKKworCS8qIFNldCBQTEwgcmVndWxhdG9yIGlu IGJ5cGFzcyAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9QTExfQU5BTE9HX1BST0c7CisJdGVz dF9kYXRhID0gMHgwMTsKKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCB0ZXN0X2Nv ZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBQTEwgUGFyYW1ldGVycyBTZXR1cCAqLworCW1pcGlfdHhf cGxsX3NldHVwKGttYl9kc2ksIGRwaHlfbm8sIGNmZy0+cmVmX2Nsa19raHogLyAxMDAwLAorCQkJ ICBjZmctPmxhbmVfcmF0ZV9tYnBzIC8gMik7CisKKwkvKiBTZXQgY2xrc2VsICovCisJa21iX3dy aXRlX2JpdHNfbWlwaShrbWJfZHNpLCBEUEhZX0lOSVRfQ1RSTDEsIFBMTF9DTEtTRUxfMCwgMiwg MHgwMSk7CisKKwkvKiBTZXQgcGxsX3NoYWRvd19jb250cm9sICovCisJa21iX3NldF9iaXRfbWlw aShrbWJfZHNpLCBEUEhZX0lOSVRfQ1RSTDEsIFBMTF9TSEFET1dfQ1RSTCk7Cit9CisKK3N0YXRp YyB2b2lkIHNldF9sYW5lX2RhdGFfcmF0ZShzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwgdTMyIGRw aHlfbm8sCisJCQkgICAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZykKK3sKKwl1MzIgaSwg dGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNSVBJX0RQ SFlfREVGQVVMVF9CSVRfUkFURVM7IGkrKykgeworCQlpZiAobWlwaV9oc19mcmVxX3JhbmdlW2ld LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA8CisJCSAgICBjZmctPmxhbmVfcmF0ZV9tYnBzKQorCQkJ Y29udGludWU7CisKKwkJLyogU2VuZCB0aGUgdGVzdCBjb2RlIGFuZCBkYXRhICovCisJCS8qIGJp dFs2OjBdID0gaHNmcmVxcmFuZ2Vfb3ZyIGJpdFs3XSA9IGhzZnJlcXJhbmdlX292cl9lbiAqLwor CQl0ZXN0X2NvZGUgPSBURVNUX0NPREVfSFNfRlJFUV9SQU5HRV9DRkc7CisJCXRlc3RfZGF0YSA9 IChtaXBpX2hzX2ZyZXFfcmFuZ2VbaV0uaHNmcmVxcmFuZ2VfY29kZSAmIDB4N2YpIHwKKwkJICAg ICgxIDw8IDcpOworCQl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCB0ZXN0X2NvZGUs IHRlc3RfZGF0YSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZHBoeV9pbml0X3Nl cXVlbmNlKHN0cnVjdCBrbWJfZHNpICprbWJfZHNpLAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2N0 cmxfY2ZnICpjZmcsIHUzMiBkcGh5X25vLAorCQkJICAgICAgIGludCBhY3RpdmVfbGFuZXMsIGVu dW0gZHBoeV9tb2RlIG1vZGUpCit7CisJdTMyIHRlc3RfY29kZSA9IDAsIHRlc3RfZGF0YSA9IDAs IHZhbDsKKworCS8qIFNldCBELVBIWSBpbiBzaHV0ZG93biBtb2RlICovCisJLyogQXNzZXJ0IFJT VFogc2lnbmFsICovCisJQ0xSX0RQSFlfSU5JVF9DVFJMMChrbWJfZHNpLCBkcGh5X25vLCBSRVNF VFopOworCisJLyogQXNzZXJ0IFNIVVRET1dOWiBzaWduYWwgKi8KKwlDTFJfRFBIWV9JTklUX0NU UkwwKGttYl9kc2ksIGRwaHlfbm8sIFNIVVRET1dOWik7CisJdmFsID0ga21iX3JlYWRfbWlwaShr bWJfZHNpLCBEUEhZX0lOSVRfQ1RSTDApOworCisJLyogSW5pdCBELVBIWV9uCisJICogUHVsc2Ug dGVzdGNsZWFyIHNpZ25hbCB0byBtYWtlIHN1cmUgdGhlIGQtcGh5IGNvbmZpZ3VyYXRpb24KKwkg KiBzdGFydHMgZnJvbSBhIGNsZWFuIGJhc2UKKwkgKi8KKwlDTFJfRFBIWV9URVNUX0NUUkwwKGtt Yl9kc2ksIGRwaHlfbm8pOworCW5kZWxheSgxNSk7CisJU0VUX0RQSFlfVEVTVF9DVFJMMChrbWJf ZHNpLCBkcGh5X25vKTsKKwluZGVsYXkoMTUpOworCUNMUl9EUEhZX1RFU1RfQ1RSTDAoa21iX2Rz aSwgZHBoeV9ubyk7CisJbmRlbGF5KDE1KTsKKworCS8qIFNldCBtYXN0ZXJtYWNybyBiaXQgLSBN YXN0ZXIgb3Igc2xhdmUgbW9kZSAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9NVUxUSVBMRV9Q SFlfQ1RSTDsKKworCS8qIERQSFkgaGFzIGl0cyBvd24gY2xvY2sgbGFuZSBlbmFibGVkIChtYXN0 ZXIpICovCisJaWYgKG1vZGUgPT0gTUlQSV9EUEhZX01BU1RFUikKKwkJdGVzdF9kYXRhID0gMHgw MTsKKwllbHNlCisJCXRlc3RfZGF0YSA9IDB4MDA7CisKKwkvKiBTZW5kIHRoZSB0ZXN0IGNvZGUg YW5kIGRhdGEgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5X25vLCB0ZXN0X2NvZGUs IHRlc3RfZGF0YSk7CisKKwkvKiBTZXQgdGhlIGxhbmUgZGF0YSByYXRlICovCisJc2V0X2xhbmVf ZGF0YV9yYXRlKGttYl9kc2ksIGRwaHlfbm8sIGNmZyk7CisKKwkvKiBIaWdoLVNwZWVkIFR4IFNs ZXcgUmF0ZSBDYWxpYnJhdGlvbgorCSAqIEJpdFJhdGU6ID4gMS41IEdicHMgJiYgPD0gMi41IEdi cHM6IHNsZXcgcmF0ZSBjb250cm9sIE9GRgorCSAqLworCWlmIChjZmctPmxhbmVfcmF0ZV9tYnBz ID4gMTUwMCkKKwkJc2V0X3NsZXdyYXRlX2d0XzE1MDAoa21iX2RzaSwgZHBoeV9ubyk7CisJZWxz ZSBpZiAoY2ZnLT5sYW5lX3JhdGVfbWJwcyA+IDEwMDApCisJCXNldF9zbGV3cmF0ZV9ndF8xMDAw KGttYl9kc2ksIGRwaHlfbm8pOworCWVsc2UKKwkJc2V0X3NsZXdyYXRlX2x0XzEwMDAoa21iX2Rz aSwgZHBoeV9ubyk7CisKKwkvKiBTZXQgY2ZnY2xrZnJlcXJhbmdlICovCisJdmFsID0gKCgoY2Zn LT5jZmdfY2xrX2toeiAvIDEwMDApIC0gMTcpICogNCkgJiAweDNmOworCVNFVF9EUEhZX0ZSRVFf Q1RSTDBfMyhrbWJfZHNpLCBkcGh5X25vLCB2YWwpOworCisJLyogRW5hYmxlIGNvbmZpZyBjbGsg Zm9yIHRoZSBjb3JyZXNwb25kaW5nIGQtcGh5ICovCisJa21iX3NldF9iaXRfbWlwaShrbWJfZHNp LCBEUEhZX0NGR19DTEtfRU4sIGRwaHlfbm8pOworCisJLyogUExMIHNldHVwICovCisJaWYgKG1v ZGUgPT0gTUlQSV9EUEhZX01BU1RFUikKKwkJc2V0dXBfcGxsKGttYl9kc2ksIGRwaHlfbm8sIGNm Zyk7CisKKwkvKiBTZW5kIE5PUk1BTCBPUEVSQVRJT04gdGVzdCBjb2RlICovCisJdGVzdF9jb2Rl ID0gMHgwOworCXRlc3RfZGF0YSA9IDB4MDsKKwl0ZXN0X21vZGVfc2VuZChrbWJfZHNpLCBkcGh5 X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBDb25maWd1cmUgQkFTRURJUiBmb3Ig ZGF0YSBsYW5lcworCSAqIE5PVEU6IGJhc2VkaXIgb25seSBhcHBsaWVzIHRvIExBTkVfMCBvZiBl YWNoIEQtUEhZLgorCSAqIFRoZSBvdGhlciBsYW5lcyBrZWVwIHRoZWlyIGRpcmVjdGlvbiBiYXNl ZCBvbiB0aGUgRC1QSFkgdHlwZSwKKwkgKiBlaXRoZXIgUnggb3IgVHguCisJICogYml0c1s1OjBd ICAtIEJhc2VEaXI6IDEgPSBSeAorCSAqIGJpdHNbOTo2XSAtIEJhc2VEaXI6IDAgPSBUeAorCSAq LworCWttYl93cml0ZV9iaXRzX21pcGkoa21iX2RzaSwgRFBIWV9JTklUX0NUUkwyLCAwLCA5LCAw eDAzZik7CisJbmRlbGF5KDE1KTsKKworCS8qIEVuYWJsZSBDTE9DSyBMQU5FCisJICogQ2xvY2sg bGFuZSBzaG91bGQgYmUgZW5hYmxlZCByZWdhcmRsZXNzIG9mIHRoZSBkaXJlY3Rpb24KKwkgKiBz ZXQgZm9yIHRoZSBELVBIWSAoUngvVHgpCisJICovCisJa21iX3NldF9iaXRfbWlwaShrbWJfZHNp LCBEUEhZX0lOSVRfQ1RSTDIsIDEyICsgZHBoeV9ubyk7CisKKwkvKiBFbmFibGUgREFUQSBMQU5F UyAqLworCWttYl93cml0ZV9iaXRzX21pcGkoa21iX2RzaSwgRFBIWV9FTkFCTEUsIGRwaHlfbm8g KiAyLCAyLAorCQkJICAgICgoMSA8PCBhY3RpdmVfbGFuZXMpIC0gMSkpOworCisJbmRlbGF5KDE1 KTsKKworCS8qIFRha2UgRC1QSFkgb3V0IG9mIHNodXRkb3duIG1vZGUgKi8KKwkvKiBEZWFzc2Vy dCBTSFVURE9XTlogc2lnbmFsICovCisJU0VUX0RQSFlfSU5JVF9DVFJMMChrbWJfZHNpLCBkcGh5 X25vLCBTSFVURE9XTlopOworCW5kZWxheSgxNSk7CisKKwkvKiBEZWFzc2VydCBSU1RaIHNpZ25h bCAqLworCVNFVF9EUEhZX0lOSVRfQ1RSTDAoa21iX2RzaSwgZHBoeV9ubywgUkVTRVRaKTsKK30K Kworc3RhdGljIHZvaWQgZHBoeV93YWl0X2ZzbShzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwgdTMy IGRwaHlfbm8sCisJCQkgIGVudW0gZHBoeV90eF9mc20gZnNtX3N0YXRlKQoreworCWVudW0gZHBo eV90eF9mc20gdmFsID0gRFBIWV9UWF9QT1dFUkRXTjsKKwlpbnQgaSA9IDA7CisJaW50IHN0YXR1 cyA9IDE7CisKKwlkbyB7CisJCXRlc3RfbW9kZV9zZW5kKGttYl9kc2ksIGRwaHlfbm8sIFRFU1Rf Q09ERV9GU01fQ09OVFJPTCwgMHg4MCk7CisKKwkJdmFsID0gR0VUX1RFU1RfRE9VVDRfNyhrbWJf ZHNpLCBkcGh5X25vKTsKKwkJaSsrOworCQlpZiAoaSA+IFRJTUVPVVQpIHsKKwkJCXN0YXR1cyA9 IDA7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHZhbCAhPSBmc21fc3RhdGUpOworCisJZGV2 X2RiZyhrbWJfZHNpLT5kZXYsICIlczogZHBoeSAlZCB2YWwgPSAleCIsIF9fZnVuY19fLCBkcGh5 X25vLCB2YWwpOworCWRldl9kYmcoa21iX2RzaS0+ZGV2LCAiKiBEUEhZICVkIFdBSVRfRlNNICVz ICoiLAorCQlkcGh5X25vLCBzdGF0dXMgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIik7Cit9CisKK3N0 YXRpYyB2b2lkIHdhaXRfaW5pdF9kb25lKHN0cnVjdCBrbWJfZHNpICprbWJfZHNpLCB1MzIgZHBo eV9ubywKKwkJCSAgIHUzMiBhY3RpdmVfbGFuZXMpCit7CisJdTMyIHN0b3BzdGF0ZWRhdGEgPSAw OworCXUzMiBkYXRhX2xhbmVzID0gKDEgPDwgYWN0aXZlX2xhbmVzKSAtIDE7CisJaW50IGkgPSAw LCB2YWw7CisJaW50IHN0YXR1cyA9IDE7CisKKwlkbyB7CisJCXZhbCA9IGttYl9yZWFkX21pcGko a21iX2RzaSwgTUlQSV9EUEhZX1NUQVQ0XzcpOworCQlzdG9wc3RhdGVkYXRhID0gR0VUX1NUT1BT VEFURV9EQVRBKGttYl9kc2ksIGRwaHlfbm8pCisJCQkJJiBkYXRhX2xhbmVzOworCisJCS8qIFRP RE8tbmVlZCB0byBhZGQgYSB0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgKi8KKwkJaSsrOwor CisJCWlmIChpID4gVElNRU9VVCkgeworCQkJc3RhdHVzID0gMDsKKwkJCWRldl9kYmcoa21iX2Rz aS0+ZGV2LAorCQkJCSIhIFdBSVRfSU5JVF9ET05FOiBUSU1JTkcgT1VUIShlcnJfc3RhdD0lZCki LAorCQkJCWttYl9yZWFkX21pcGkoa21iX2RzaSwgTUlQSV9EUEhZX0VSUl9TVEFUNl83KSk7CisJ CQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHN0b3BzdGF0ZWRhdGEgIT0gZGF0YV9sYW5lcyk7CisK KwlkZXZfZGJnKGttYl9kc2ktPmRldiwgIiogRFBIWSAlZCBJTklUIC0gJXMgKiIsCisJCWRwaHlf bm8sIHN0YXR1cyA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKTsKK30KKworc3RhdGljIHZvaWQgd2Fp dF9wbGxfbG9jayhzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwgdTMyIGRwaHlfbm8pCit7CisJaW50 IGkgPSAwOworCWludCBzdGF0dXMgPSAxOworCisJZG8geworCQkvKiBUT0RPLW5lZWQgdG8gYWRk IGEgdGltZSBvdXQgYW5kIHJldHVybiBmYWlsdXJlICovCisJCWkrKzsKKwkJaWYgKGkgPiBUSU1F T1VUKSB7CisJCQlzdGF0dXMgPSAwOworCQkJZGV2X2RiZyhrbWJfZHNpLT5kZXYsICIlczogdGlt aW5nIG91dCIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoIUdFVF9QTExf TE9DSyhrbWJfZHNpLCBkcGh5X25vKSk7CisKKwlkZXZfZGJnKGttYl9kc2ktPmRldiwgIiogUExM IExvY2tlZCBmb3IgRFBIWSAlZCAtICVzICoiLAorCQlkcGh5X25vLCBzdGF0dXMgPyAiU1VDQ0VT UyIgOiAiRkFJTEVEIik7Cit9CisKK3N0YXRpYyB1MzIgbWlwaV90eF9pbml0X2RwaHkoc3RydWN0 IGttYl9kc2kgKmttYl9kc2ksCisJCQkgICAgIHN0cnVjdCBtaXBpX2N0cmxfY2ZnICpjZmcpCit7 CisJdTMyIGRwaHlfbm8gPSBNSVBJX0RQSFk2OworCisJLyogTXVsdGlwbGUgRC1QSFlzIG5lZWRl ZCAqLworCWlmIChjZmctPmFjdGl2ZV9sYW5lcyA+IE1JUElfRFBIWV9EX0xBTkVTKSB7CisJCS8q CisJCSAqSW5pdGlhbGl6YXRpb24gZm9yIFR4IGFnZ3JlZ2F0aW9uIG1vZGUgaXMgZG9uZSBhY2Nv cmRpbmcgdG8KKwkJICphLiBzdGFydCBpbml0IFBIWTEKKwkJICpiLiBwb2xsIGZvciBQSFkxIEZT TSBzdGF0ZSBMT0NLCisJCSAqICAgYjEuIHJlZyBhZGRyIDB4MDNbMzowXSAtIHN0YXRlX21haW5b MzowXSA9PSA1IChMT0NLKQorCQkgKmMuIHBvbGwgZm9yIFBIWTEgY2FsaWJyYXRpb25zIGRvbmUg OgorCQkgKiAgIGMxLiB0ZXJtaW5hdGlvbiBjYWxpYnJhdGlvbiBsb3dlciBzZWN0aW9uOiBhZGRy IDB4MjJbNV0KKwkJICogICAtIHJlc2NhbF9kb25lCisJCSAqICAgYzIuIHNsZXdyYXRlIGNhbGli cmF0aW9uIChpZiBkYXRhIHJhdGUgPCA9IDE1MDAgTWJwcyk6CisJCSAqICAgICBhZGRyIDB4QTdb MzoyXSAtIHNyY2FsX2RvbmUsIHNyX2ZpbmlzaGVkCisJCSAqZC4gc3RhcnQgaW5pdCBQSFkwCisJ CSAqZS4gcG9sbCBmb3IgUEhZMCBzdG9wc3RhdGUKKwkJICpmLiBwb2xsIGZvciBQSFkxIHN0b3Bz dGF0ZQorCQkgKi8KKwkJLyogUEhZICNOKzEgKCdzbGF2ZScpICovCisKKwkJZHBoeV9pbml0X3Nl cXVlbmNlKGttYl9kc2ksIGNmZywgZHBoeV9ubyArIDEsCisJCQkJICAgKGNmZy0+YWN0aXZlX2xh bmVzIC0gTUlQSV9EUEhZX0RfTEFORVMpLAorCQkJCSAgIE1JUElfRFBIWV9TTEFWRSk7CisJCWRw aHlfd2FpdF9mc20oa21iX2RzaSwgZHBoeV9ubyArIDEsIERQSFlfVFhfTE9DSyk7CisKKwkJLyog UEhZICNOIG1hc3RlciAqLworCQlkcGh5X2luaXRfc2VxdWVuY2Uoa21iX2RzaSwgY2ZnLCBkcGh5 X25vLCBNSVBJX0RQSFlfRF9MQU5FUywKKwkJCQkgICBNSVBJX0RQSFlfTUFTVEVSKTsKKworCQkv KiBXYWl0IGZvciBEUEhZIGluaXQgdG8gY29tcGxldGUgKi8KKwkJd2FpdF9pbml0X2RvbmUoa21i X2RzaSwgZHBoeV9ubywgTUlQSV9EUEhZX0RfTEFORVMpOworCQl3YWl0X2luaXRfZG9uZShrbWJf ZHNpLCBkcGh5X25vICsgMSwKKwkJCSAgICAgICBjZmctPmFjdGl2ZV9sYW5lcyAtIE1JUElfRFBI WV9EX0xBTkVTKTsKKwkJd2FpdF9wbGxfbG9jayhrbWJfZHNpLCBkcGh5X25vKTsKKwkJd2FpdF9w bGxfbG9jayhrbWJfZHNpLCBkcGh5X25vICsgMSk7CisJCWRwaHlfd2FpdF9mc20oa21iX2RzaSwg ZHBoeV9ubywgRFBIWV9UWF9JRExFKTsKKwl9IGVsc2UgewkJLyogU2luZ2xlIERQSFkgKi8KKwkJ ZHBoeV9pbml0X3NlcXVlbmNlKGttYl9kc2ksIGNmZywgZHBoeV9ubywgY2ZnLT5hY3RpdmVfbGFu ZXMsCisJCQkJICAgTUlQSV9EUEhZX01BU1RFUik7CisJCWRwaHlfd2FpdF9mc20oa21iX2RzaSwg ZHBoeV9ubywgRFBIWV9UWF9JRExFKTsKKwkJd2FpdF9pbml0X2RvbmUoa21iX2RzaSwgZHBoeV9u bywgY2ZnLT5hY3RpdmVfbGFuZXMpOworCQl3YWl0X3BsbF9sb2NrKGttYl9kc2ksIGRwaHlfbm8p OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb25uZWN0X2xjZF90b19taXBp KHN0cnVjdCBrbWJfZHNpICprbWJfZHNpKQoreworCXN0cnVjdCByZWdtYXAgKm1zc2NhbTsKKwor CW1zc2NhbSA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoImludGVsLGtlZW1i YXktbXNzY2FtIik7CisJaWYgKElTX0VSUihtc3NjYW0pKSB7CisJCWRldl9kYmcoa21iX2RzaS0+ ZGV2LCAiZmFpbGVkIHRvIGdldCBtc3NjYW0gc3lzY29uIik7CisJCXJldHVybjsKKwl9CisKKwkv KiBESVNBQkxFIE1JUEktPkNJRiBDT05ORUNUSU9OICovCisJcmVnbWFwX3dyaXRlKG1zc2NhbSwg TVNTX01JUElfQ0lGX0NGRywgMCk7CisKKwkvKiBFTkFCTEUgTENELT5NSVBJIENPTk5FQ1RJT04g Ki8KKwlyZWdtYXBfd3JpdGUobXNzY2FtLCBNU1NfTENEX01JUElfQ0ZHLCAxKTsKKwkvKiBESVNB QkxFIExDRC0+Q0lGIExPT1BCQUNLICovCisJcmVnbWFwX3dyaXRlKG1zc2NhbSwgTVNTX0xPT1BC QUNLX0NGRywgMSk7Cit9CisKK2ludCBrbWJfZHNpX21vZGVfc2V0KHN0cnVjdCBrbWJfZHNpICpr bWJfZHNpLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJICAgICBpbnQgc3lzX2Ns a19taHopCit7CisJdTY0IGRhdGFfcmF0ZTsKKworCWttYl9kc2ktPnN5c19jbGtfbWh6ID0gc3lz X2Nsa19taHo7CisJbWlwaV90eF9pbml0X2NmZy5hY3RpdmVfbGFuZXMgPSBNSVBJX1RYX0FDVElW RV9MQU5FUzsKKworCW1pcGlfdHhfZnJhbWUwX3NlY3RfY2ZnLndpZHRoX3BpeGVscyA9IG1vZGUt PmNydGNfaGRpc3BsYXk7CisJbWlwaV90eF9mcmFtZTBfc2VjdF9jZmcuaGVpZ2h0X2xpbmVzID0g bW9kZS0+Y3J0Y192ZGlzcGxheTsKKwltaXBpdHhfZnJhbWUwX2NmZy52c3luY193aWR0aCA9CisJ CW1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydDsKKwltaXBpdHhf ZnJhbWUwX2NmZy52X2JhY2twb3JjaCA9CisJCW1vZGUtPmNydGNfdnRvdGFsIC0gbW9kZS0+Y3J0 Y192c3luY19lbmQ7CisJbWlwaXR4X2ZyYW1lMF9jZmcudl9mcm9udHBvcmNoID0KKwkJbW9kZS0+ Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmRpc3BsYXk7CisJbWlwaXR4X2ZyYW1lMF9j ZmcuaHN5bmNfd2lkdGggPQorCQltb2RlLT5jcnRjX2hzeW5jX2VuZCAtIG1vZGUtPmNydGNfaHN5 bmNfc3RhcnQ7CisJbWlwaXR4X2ZyYW1lMF9jZmcuaF9iYWNrcG9yY2ggPQorCQltb2RlLT5jcnRj X2h0b3RhbCAtIG1vZGUtPmNydGNfaHN5bmNfZW5kOworCW1pcGl0eF9mcmFtZTBfY2ZnLmhfZnJv bnRwb3JjaCA9CisJCW1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5 OworCisJLyogTGFuZSByYXRlID0gKHZ0b3RhbCpodG90YWwqZnBzKmJwcCkvNCAvIDEwMDAwMDAK KwkgKiB0byBjb252ZXJ0IHRvIE1icHMKKwkgKi8KKwlkYXRhX3JhdGUgPSAoKCgodTMyKW1vZGUt PmNydGNfdnRvdGFsICoJKHUzMiltb2RlLT5jcnRjX2h0b3RhbCkgKgorCQkJKHUzMikoZHJtX21v ZGVfdnJlZnJlc2gobW9kZSkpICoKKwkJCU1JUElfVFhfQlBQKSAvIG1pcGlfdHhfaW5pdF9jZmcu YWN0aXZlX2xhbmVzKSAvCTEwMDAwMDA7CisKKwlkZXZfZGJnKGttYl9kc2ktPmRldiwgImRhdGFf cmF0ZT0ldSBhY3RpdmVfbGFuZXM9JWRcbiIsCisJCSh1MzIpZGF0YV9yYXRlLCBtaXBpX3R4X2lu aXRfY2ZnLmFjdGl2ZV9sYW5lcyk7CisKKwkvKiBXaGVuIGxhdGUgcmF0ZSA8IDgwMCwgbW9kZXNl dCBmYWlscyB3aXRoIDQgbGFuZXMsCisJICogc28gc3dpdGNoIHRvIDIgbGFuZXMKKwkgKi8KKwlp ZiAoZGF0YV9yYXRlIDwgODAwKSB7CisJCW1pcGlfdHhfaW5pdF9jZmcuYWN0aXZlX2xhbmVzID0g MjsKKwkJbWlwaV90eF9pbml0X2NmZy5sYW5lX3JhdGVfbWJwcyA9IGRhdGFfcmF0ZSAqIDI7CisJ fSBlbHNlIHsKKwkJbWlwaV90eF9pbml0X2NmZy5sYW5lX3JhdGVfbWJwcyA9IGRhdGFfcmF0ZTsK Kwl9CisKKwlrbWJfd3JpdGVfbWlwaShrbWJfZHNpLCBEUEhZX0VOQUJMRSwgMCk7CisJa21iX3dy aXRlX21pcGkoa21iX2RzaSwgRFBIWV9JTklUX0NUUkwwLCAwKTsKKwlrbWJfd3JpdGVfbWlwaShr bWJfZHNpLCBEUEhZX0lOSVRfQ1RSTDEsIDApOworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIERQ SFlfSU5JVF9DVFJMMiwgMCk7CisKKwkvKiBJbml0aWFsaXplIG1pcGkgY29udHJvbGxlciAqLwor CW1pcGlfdHhfaW5pdF9jbnRybChrbWJfZHNpLCAmbWlwaV90eF9pbml0X2NmZyk7CisKKwkvKiBE cGh5IGluaXRpYWxpemF0aW9uICovCisJbWlwaV90eF9pbml0X2RwaHkoa21iX2RzaSwgJm1pcGlf dHhfaW5pdF9jZmcpOworCisJY29ubmVjdF9sY2RfdG9fbWlwaShrbWJfZHNpKTsKKwlkZXZfaW5m byhrbWJfZHNpLT5kZXYsICJtaXBpIGh3IGluaXRpYWxpemVkIik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RydWN0IGttYl9kc2kgKmttYl9kc2lfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBrbWJfZHNpICprbWJfZHNpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGdldF9kZXZpY2UoJnBkZXYtPmRldik7CisKKwlrbWJfZHNpID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCprbWJfZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrbWJfZHNpKSB7CisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGttYl9kc2lcbiIpOworCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKKwl9CisKKwlrbWJfZHNpLT5ob3N0ID0gZHNpX2hvc3Q7CisJa21iX2RzaS0+ aG9zdC0+b3BzID0gJmttYl9kc2lfaG9zdF9vcHM7CisKKwlkc2lfZGV2aWNlLT5ob3N0ID0ga21i X2RzaS0+aG9zdDsKKwlrbWJfZHNpLT5kZXZpY2UgPSBkc2lfZGV2aWNlOworCisJcmV0dXJuIGtt Yl9kc2k7Cit9CisKK2ludCBrbWJfZHNpX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcmV0ID0gMDsK KworCWVuY29kZXIgPSAma21iX2RzaS0+YmFzZTsKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9 IDE7CisJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKKworCXJldCA9IGRybV9zaW1wbGVf ZW5jb2Rlcl9pbml0KGRldiwgZW5jb2RlciwgRFJNX01PREVfRU5DT0RFUl9EU0kpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihrbWJfZHNpLT5kZXYsICJGYWlsZWQgdG8gaW5pdCBlbmNvZGVyICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIExpbmsgZHJtX2JyaWRnZSB0byBl bmNvZGVyICovCisJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZW5jb2RlciwgYWR2X2JyaWRnZSwg TlVMTCwKKwkJCQlEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGJyaWRnZSB0byBNSVBJXG4iKTsKKwkJZHJt X2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2luZm8o ZGV2LCAiQnJpZGdlIGF0dGFjaGVkIDogU1VDQ0VTUyIpOworCWNvbm5lY3RvciA9IGRybV9icmlk Z2VfY29ubmVjdG9yX2luaXQoZGV2LCBlbmNvZGVyKTsKKwlpZiAoSVNfRVJSKGNvbm5lY3Rvcikp IHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIGJyaWRnZSBjb25uZWN0b3IiKTsKKwkJ ZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwkJcmV0dXJuIFBUUl9FUlIoY29ubmVjdG9y KTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIp OworCXJldHVybiAwOworfQorCitpbnQga21iX2RzaV9tYXBfbW1pbyhzdHJ1Y3Qga21iX2RzaSAq a21iX2RzaSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBrbWJfZHNpLT5kZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGtt Yl9kc2ktPnBkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJCQkgICAibWlwaSIpOworCWlmICghcmVz KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByZXNvdXJjZSBmb3IgbWlwaSIpOwor CQlyZXR1cm4gLUVOT01FTTsKKwl9CisJa21iX2RzaS0+bWlwaV9tbWlvID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGttYl9kc2ktPm1pcGlfbW1pbykpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW9yZW1hcCBtaXBpIHJlZ2lzdGVycyIpOworCQly ZXR1cm4gUFRSX0VSUihrbWJfZHNpLT5taXBpX21taW8pOworCX0KKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBrbWJfZHNpX2Nsa19lbmFibGUoc3RydWN0IGttYl9kc2kgKmttYl9kc2kpCit7 CisJaW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrbWJfZHNpLT5kZXY7CisKKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoa21iX2RzaS0+Y2xrX21pcGkpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIE1JUEkgY2xvY2s6ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShrbWJfZHNpLT5j bGtfbWlwaV9lY2ZnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVu YWJsZSBNSVBJX0VDRkcgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShrbWJfZHNpLT5jbGtfbWlwaV9jZmcpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIE1JUElfQ0ZHIGNsb2NrOiAl ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJTVUNDRVNT IDogZW5hYmxlZCBNSVBJIGNsb2Nrc1xuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrbWJfZHNp X2Nsa19pbml0KHN0cnVjdCBrbWJfZHNpICprbWJfZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRl diA9IGttYl9kc2ktPmRldjsKKwl1bnNpZ25lZCBsb25nIGNsazsKKworCWttYl9kc2ktPmNsa19t aXBpID0gZGV2bV9jbGtfZ2V0KGRldiwgImNsa19taXBpIik7CisJaWYgKElTX0VSUihrbWJfZHNp LT5jbGtfbWlwaSkpIHsKKwkJZGV2X2VycihkZXYsICJkZXZtX2Nsa19nZXQoKSBmYWlsZWQgY2xr X21pcGlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihrbWJfZHNpLT5jbGtfbWlwaSk7CisJfQorCisJ a21iX2RzaS0+Y2xrX21pcGlfZWNmZyA9IGRldm1fY2xrX2dldChkZXYsICJjbGtfbWlwaV9lY2Zn Iik7CisJaWYgKElTX0VSUihrbWJfZHNpLT5jbGtfbWlwaV9lY2ZnKSkgeworCQlkZXZfZXJyKGRl diwgImRldm1fY2xrX2dldCgpIGZhaWxlZCBjbGtfbWlwaV9lY2ZnXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoa21iX2RzaS0+Y2xrX21pcGlfZWNmZyk7CisJfQorCisJa21iX2RzaS0+Y2xrX21pcGlf Y2ZnID0gZGV2bV9jbGtfZ2V0KGRldiwgImNsa19taXBpX2NmZyIpOworCWlmIChJU19FUlIoa21i X2RzaS0+Y2xrX21pcGlfY2ZnKSkgeworCQlkZXZfZXJyKGRldiwgImRldm1fY2xrX2dldCgpIGZh aWxlZCBjbGtfbWlwaV9jZmdcbiIpOworCQlyZXR1cm4gUFRSX0VSUihrbWJfZHNpLT5jbGtfbWlw aV9jZmcpOworCX0KKwkvKiBTZXQgTUlQSSBjbG9jayB0byAyNCBNaHogKi8KKwljbGtfc2V0X3Jh dGUoa21iX2RzaS0+Y2xrX21pcGksIEtNQl9NSVBJX0RFRkFVTFRfQ0xLKTsKKwlpZiAoY2xrX2dl dF9yYXRlKGttYl9kc2ktPmNsa19taXBpKSAhPSBLTUJfTUlQSV9ERUZBVUxUX0NMSykgeworCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgdG8gY2xrX21pcGkgdG8gJWRcbiIsCisJCQlLTUJf TUlQSV9ERUZBVUxUX0NMSyk7CisJCXJldHVybiAtMTsKKwl9CisJZGV2X2RiZyhkZXYsICJjbGtf bWlwaSA9ICVsZFxuIiwgY2xrX2dldF9yYXRlKGttYl9kc2ktPmNsa19taXBpKSk7CisKKwljbGsg PSBjbGtfZ2V0X3JhdGUoa21iX2RzaS0+Y2xrX21pcGlfZWNmZyk7CisJaWYgKGNsayAhPSBLTUJf TUlQSV9ERUZBVUxUX0NGR19DTEspIHsKKwkJLyogU2V0IE1JUElfRUNGRyBjbG9jayB0byAyNCBN aHogKi8KKwkJY2xrX3NldF9yYXRlKGttYl9kc2ktPmNsa19taXBpX2VjZmcsIEtNQl9NSVBJX0RF RkFVTFRfQ0ZHX0NMSyk7CisJCWNsayA9IGNsa19nZXRfcmF0ZShrbWJfZHNpLT5jbGtfbWlwaV9l Y2ZnKTsKKwkJaWYgKGNsayAhPSBLTUJfTUlQSV9ERUZBVUxUX0NGR19DTEspIHsKKwkJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIHNldCB0byBjbGtfbWlwaV9lY2ZnIHRvICVkXG4iLAorCQkJCUtN Ql9NSVBJX0RFRkFVTFRfQ0ZHX0NMSyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwljbGsg PSBjbGtfZ2V0X3JhdGUoa21iX2RzaS0+Y2xrX21pcGlfY2ZnKTsKKwlpZiAoY2xrICE9IEtNQl9N SVBJX0RFRkFVTFRfQ0ZHX0NMSykgeworCQkvKiBTZXQgTUlQSV9DRkcgY2xvY2sgdG8gMjQgTWh6 ICovCisJCWNsa19zZXRfcmF0ZShrbWJfZHNpLT5jbGtfbWlwaV9jZmcsIDI0MDAwMDAwKTsKKwkJ Y2xrID0gY2xrX2dldF9yYXRlKGttYl9kc2ktPmNsa19taXBpX2NmZyk7CisJCWlmIChjbGsgIT0g S01CX01JUElfREVGQVVMVF9DRkdfQ0xLKSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBz ZXQgY2xrX21pcGlfY2ZnIHRvICVkXG4iLAorCQkJCUtNQl9NSVBJX0RFRkFVTFRfQ0ZHX0NMSyk7 CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4ga21iX2RzaV9jbGtfZW5hYmxlKGtt Yl9kc2kpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmggYi9k cml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42NmI3YzUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9r bWJfZHNpLmgKQEAgLTAsMCArMSwzODcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxOS0yMDIwIEludGVsIENvcnBvcmF0 aW9uCisgKi8KKworI2lmbmRlZiBfX0tNQl9EU0lfSF9fCisjZGVmaW5lIF9fS01CX0RTSV9IX18K KworI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9k c2kuaD4KKworLyogTUlQSSBUWCBDRkcgKi8KKyNkZWZpbmUgTUlQSV9UWF9MQU5FX0RBVEFfUkFU RV9NQlBTIDg5MQorI2RlZmluZSBNSVBJX1RYX1JFRl9DTEtfS0haICAgICAgICAgMjQwMDAKKyNk ZWZpbmUgTUlQSV9UWF9DRkdfQ0xLX0tIWiAgICAgICAgIDI0MDAwCisjZGVmaW5lIE1JUElfVFhf QlBQCQkgICAgMjQKKworLyogRFBIWSBUeCB0ZXN0IGNvZGVzKi8KKyNkZWZpbmUgVEVTVF9DT0RF X0ZTTV9DT05UUk9MCQkJCTB4MDMKKyNkZWZpbmUgVEVTVF9DT0RFX01VTFRJUExFX1BIWV9DVFJM CQkJMHgwQworI2RlZmluZSBURVNUX0NPREVfUExMX1BST1BPUlRJT05BTF9DSEFSR0VfUFVNUF9D VFJMCTB4MEUKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9JTlRFR1JBTF9DSEFSR0VfUFVNUF9DVFJM CQkweDBGCisjZGVmaW5lIFRFU1RfQ09ERV9QTExfVkNPX0NUUkwJCQkJMHgxMgorI2RlZmluZSBU RVNUX0NPREVfUExMX0dNUF9DVFJMCQkJCTB4MTMKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9QSEFT RV9FUlJfQ1RSTAkJCTB4MTQKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9MT0NLX0ZJTFRFUgkJCTB4 MTUKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9VTkxPQ0tfRklMVEVSCQkJMHgxNgorI2RlZmluZSBU RVNUX0NPREVfUExMX0lOUFVUX0RJVklERVIJCQkweDE3CisjZGVmaW5lIFRFU1RfQ09ERV9QTExf RkVFREJBQ0tfRElWSURFUgkJCTB4MTgKKyNkZWZpbmUgICBQTExfRkVFREJBQ0tfRElWSURFUl9I SUdICQkJQklUKDcpCisjZGVmaW5lIFRFU1RfQ09ERV9QTExfT1VUUFVUX0NMS19TRUwJCQkweDE5 CisjZGVmaW5lICAgUExMX05fT1ZSX0VOCQkJCQlCSVQoNCkKKyNkZWZpbmUgICBQTExfTV9PVlJf RU4JCQkJCUJJVCg1KQorI2RlZmluZSBURVNUX0NPREVfVk9EX0xFVkVMCQkJCTB4MjQKKyNkZWZp bmUgVEVTVF9DT0RFX1BMTF9DSEFSR0VfUFVNUF9CSUFTCQkJMHgxQworI2RlZmluZSBURVNUX0NP REVfUExMX0xPQ0tfREVURUNUT1IJCQkweDFECisjZGVmaW5lIFRFU1RfQ09ERV9IU19GUkVRX1JB TkdFX0NGRwkJCTB4NDQKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9BTkFMT0dfUFJPRwkJCTB4MUYK KyNkZWZpbmUgVEVTVF9DT0RFX1NMRVdfUkFURV9PVkVSUklERV9DVFJMCQkweEEwCisjZGVmaW5l IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0xPT1BfQ1RSTAkJMHhBMworI2RlZmluZSBURVNUX0NP REVfU0xFV19SQVRFX0RETF9DWUNMRVMJCQkweEE0CisKKy8qIERQSFkgcGFyYW1zICovCisjZGVm aW5lIFBMTF9OX01JTgkwCisjZGVmaW5lIFBMTF9OX01BWAkxNQorI2RlZmluZSBQTExfTV9NSU4J NjIKKyNkZWZpbmUgUExMX01fTUFYCTYyMworI2RlZmluZSBQTExfRlZDT19NQVgJMTI1MAorCisj ZGVmaW5lIFRJTUVPVVQJCTYwMAorCisjZGVmaW5lIE1JUElfVFhfRlJBTUVfR0VOCQkJCTQKKyNk ZWZpbmUgTUlQSV9UWF9GUkFNRV9HRU5fU0VDVElPTlMJCQk0CisjZGVmaW5lIE1JUElfQ1RSTF9W SVJUVUFMX0NIQU5ORUxTCQkJNAorI2RlZmluZSBNSVBJX0RfTEFORVNfUEVSX0RQSFkJCQkJMgor I2RlZmluZSBNSVBJX0NUUkxfMkxBTkVfTUFYX01DX0ZJRk9fTE9DCQkJMjU1CisjZGVmaW5lIE1J UElfQ1RSTF80TEFORV9NQVhfTUNfRklGT19MT0MJCQk1MTEKKy8qIDIgRGF0YSBMYW5lcyBwZXIg RC1QSFkgKi8KKyNkZWZpbmUgTUlQSV9EUEhZX0RfTEFORVMJCQkJMgorI2RlZmluZSBNSVBJX0RQ SFlfREVGQVVMVF9CSVRfUkFURVMJCQk2MworCisjZGVmaW5lIEtNQl9NSVBJX0RFRkFVTFRfQ0xL CQkJCTI0MDAwMDAwCisjZGVmaW5lIEtNQl9NSVBJX0RFRkFVTFRfQ0ZHX0NMSwkJCTI0MDAwMDAw CisKKyNkZWZpbmUgdG9fa21iX2RzaSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGttYl9kc2ks IGJhc2UpCisKK3N0cnVjdCBrbWJfZHNpIHsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgYmFzZTsKKwlz dHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2U7 CisJc3RydWN0IGRybV9icmlkZ2UgKmFkdl9icmlkZ2U7CisJdm9pZCBfX2lvbWVtICptaXBpX21t aW87CisJc3RydWN0IGNsayAqY2xrX21pcGk7CisJc3RydWN0IGNsayAqY2xrX21pcGlfZWNmZzsK KwlzdHJ1Y3QgY2xrICpjbGtfbWlwaV9jZmc7CisJaW50IHN5c19jbGtfbWh6OworfTsKKworLyog RFBIWSBUeCB0ZXN0IGNvZGVzICovCisKK2VudW0gbWlwaV9jdHJsX251bSB7CisJTUlQSV9DVFJM MCA9IDAsCisJTUlQSV9DVFJMMSwKKwlNSVBJX0NUUkwyLAorCU1JUElfQ1RSTDMsCisJTUlQSV9D VFJMNCwKKwlNSVBJX0NUUkw1LAorCU1JUElfQ1RSTDYsCisJTUlQSV9DVFJMNywKKwlNSVBJX0NU Ukw4LAorCU1JUElfQ1RSTDksCisJTUlQSV9DVFJMX05BCit9OworCitlbnVtIG1pcGlfZHBoeV9u dW0geworCU1JUElfRFBIWTAgPSAwLAorCU1JUElfRFBIWTEsCisJTUlQSV9EUEhZMiwKKwlNSVBJ X0RQSFkzLAorCU1JUElfRFBIWTQsCisJTUlQSV9EUEhZNSwKKwlNSVBJX0RQSFk2LAorCU1JUElf RFBIWTcsCisJTUlQSV9EUEhZOCwKKwlNSVBJX0RQSFk5LAorCU1JUElfRFBIWV9OQQorfTsKKwor ZW51bSBtaXBpX2RpciB7CisJTUlQSV9SWCwKKwlNSVBJX1RYCit9OworCitlbnVtIG1pcGlfY3Ry bF90eXBlIHsKKwlNSVBJX0RTSSwKKwlNSVBJX0NTSQorfTsKKworZW51bSBtaXBpX2RhdGFfaWYg eworCU1JUElfSUZfRE1BLAorCU1JUElfSUZfUEFSQUxMRUwKK307CisKK2VudW0gbWlwaV9kYXRh X21vZGUgeworCU1JUElfREFUQV9NT0RFMCwKKwlNSVBJX0RBVEFfTU9ERTEsCisJTUlQSV9EQVRB X01PREUyLAorCU1JUElfREFUQV9NT0RFMworfTsKKworZW51bSBtaXBpX2RzaV92aWRlb19tb2Rl IHsKKwlEU0lfVklERU9fTU9ERV9OT19CVVJTVF9QVUxTRSwKKwlEU0lfVklERU9fTU9ERV9OT19C VVJTVF9FVkVOVCwKKwlEU0lfVklERU9fTU9ERV9CVVJTVAorfTsKKworZW51bSBtaXBpX2RzaV9i bGFua2luZ19tb2RlIHsKKwlUUkFOU0lUSU9OX1RPX0xPV19QT1dFUiwKKwlTRU5EX0JMQU5LX1BB Q0tFVAorfTsKKworZW51bSBtaXBpX2RzaV9lb3RwIHsKKwlEU0lfRU9UUF9ESVNBQkxFRCwKKwlE U0lfRU9UUF9FTkFCTEVTCit9OworCitlbnVtIG1pcGlfZHNpX2RhdGFfdHlwZSB7CisJRFNJX1NQ X0RUX1JFU0VSVkVEXzAwID0gMHgwMCwKKwlEU0lfU1BfRFRfVlNZTkNfU1RBUlQgPSAweDAxLAor CURTSV9TUF9EVF9DT0xPUl9NT0RFX09GRiA9IDB4MDIsCisJRFNJX1NQX0RUX0dFTkVSSUNfU0hP UlRfV1IgPSAweDAzLAorCURTSV9TUF9EVF9HRU5FUklDX1JEID0gMHgwNCwKKwlEU0lfU1BfRFRf RENTX1NIT1JUX1dSID0gMHgwNSwKKwlEU0lfU1BfRFRfRENTX1JEID0gMHgwNiwKKwlEU0lfU1Bf RFRfRU9UUCA9IDB4MDgsCisJRFNJX0xQX0RUX05VTEwgPSAweDA5LAorCURTSV9MUF9EVF9SRVNF UlZFRF8wQSA9IDB4MGEsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzBCID0gMHgwYiwKKwlEU0lfTFBf RFRfTFBQU19ZQ0JDUjQyMl8yMEIgPSAweDBjLAorCURTSV9MUF9EVF9QUFNfUkdCMTAxMDEwXzMw QiA9IDB4MGQsCisJRFNJX0xQX0RUX1BQU19SR0I1NjVfMTZCID0gMHgwZSwKKwlEU0lfTFBfRFRf UkVTRVJWRURfMEYgPSAweDBmLAorCisJRFNJX1NQX0RUX1JFU0VSVkVEXzEwID0gMHgxMCwKKwlE U0lfU1BfRFRfVlNZTkNfRU5EID0gMHgxMSwKKwlEU0lfU1BfRFRfQ09MT1JfTU9ERV9PTiA9IDB4 MTIsCisJRFNJX1NQX0RUX0dFTkVSSUNfU0hPUlRfV1JfMVBBUiA9IDB4MTMsCisJRFNJX1NQX0RU X0dFTkVSSUNfUkRfMVBBUiA9IDB4MTQsCisJRFNJX1NQX0RUX0RDU19TSE9SVF9XUl8xUEFSID0g MHgxNSwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMTYgPSAweDE2LAorCURTSV9TUF9EVF9SRVNFUlZF RF8xNyA9IDB4MTcsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzE4ID0gMHgxOCwKKwlEU0lfTFBfRFRf QkxBTksgPSAweDE5LAorCURTSV9MUF9EVF9SRVNFUlZFRF8xQSA9IDB4MWEsCisJRFNJX0xQX0RU X1JFU0VSVkVEXzFCID0gMHgxYiwKKwlEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzI0QiA9IDB4MWMs CisJRFNJX0xQX0RUX1BQU19SR0IxMjEyMTJfMzZCID0gMHgxZCwKKwlEU0lfTFBfRFRfUFBTX1JH QjY2Nl8xOEIgPSAweDFlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8xRiA9IDB4MWYsCisKKwlEU0lf U1BfRFRfUkVTRVJWRURfMjAgPSAweDIwLAorCURTSV9TUF9EVF9IU1lOQ19TVEFSVCA9IDB4MjEs CisJRFNJX1NQX0RUX1NIVVRfRE9XTl9QRVJJUEhfQ01EID0gMHgyMiwKKwlEU0lfU1BfRFRfR0VO RVJJQ19TSE9SVF9XUl8yUEFSID0gMHgyMywKKwlEU0lfU1BfRFRfR0VORVJJQ19SRF8yUEFSID0g MHgyNCwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMjUgPSAweDI1LAorCURTSV9TUF9EVF9SRVNFUlZF RF8yNiA9IDB4MjYsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzI3ID0gMHgyNywKKwlEU0lfU1BfRFRf UkVTRVJWRURfMjggPSAweDI4LAorCURTSV9MUF9EVF9HRU5FUklDX0xPTkdfV1IgPSAweDI5LAor CURTSV9MUF9EVF9SRVNFUlZFRF8yQSA9IDB4MmEsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzJCID0g MHgyYiwKKwlEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzE2QiA9IDB4MmMsCisJRFNJX0xQX0RUX1JF U0VSVkVEXzJEID0gMHgyZCwKKwlEU0lfTFBfRFRfTFBQU19SR0I2NjZfMThCID0gMHgyZSwKKwlE U0lfTFBfRFRfUkVTRVJWRURfMkYgPSAweDJmLAorCisJRFNJX1NQX0RUX1JFU0VSVkVEXzMwID0g MHgzMCwKKwlEU0lfU1BfRFRfSFNZTkNfRU5EID0gMHgzMSwKKwlEU0lfU1BfRFRfVFVSTl9PTl9Q RVJJUEhfQ01EID0gMHgzMiwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzMgPSAweDMzLAorCURTSV9T UF9EVF9SRVNFUlZFRF8zNCA9IDB4MzQsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzM1ID0gMHgzNSwK KwlEU0lfU1BfRFRfUkVTRVJWRURfMzYgPSAweDM2LAorCURTSV9TUF9EVF9TRVRfTUFYX1JFVFVS Tl9QS1RfU0laRSA9IDB4MzcsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzM4ID0gMHgzOCwKKwlEU0lf TFBfRFRfRFNDX0xPTkdfV1IgPSAweDM5LAorCURTSV9MUF9EVF9SRVNFUlZFRF8zQSA9IDB4M2Es CisJRFNJX0xQX0RUX1JFU0VSVkVEXzNCID0gMHgzYiwKKwlEU0lfTFBfRFRfUkVTRVJWRURfM0Mg PSAweDNjLAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0MjBfMTJCID0gMHgzZCwKKwlEU0lfTFBfRFRf UFBTX1JHQjg4OF8yNEIgPSAweDNlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8zRiA9IDB4M2YKK307 CisKK2VudW0gbWlwaV90eF9oc190cF9zZWwgeworCU1JUElfVFhfSFNfVFBfV0hPTEVfRlJBTUVf Q09MT1IwID0gMCwKKwlNSVBJX1RYX0hTX1RQX1dIT0xFX0ZSQU1FX0NPTE9SMSwKKwlNSVBJX1RY X0hTX1RQX1ZfU1RSSVBFUywKKwlNSVBJX1RYX0hTX1RQX0hfU1RSSVBFUywKK307CisKK2VudW0g ZHBoeV9tb2RlIHsKKwlNSVBJX0RQSFlfU0xBVkUgPSAwLAorCU1JUElfRFBIWV9NQVNURVIKK307 CisKK2VudW0gZHBoeV90eF9mc20geworCURQSFlfVFhfUE9XRVJEV04gPSAwLAorCURQSFlfVFhf QkdQT04sCisJRFBIWV9UWF9URVJNQ0FMLAorCURQSFlfVFhfVEVSTUNBTFVQLAorCURQSFlfVFhf T0ZGU0VUQ0FMLAorCURQSFlfVFhfTE9DSywKKwlEUEhZX1RYX1NSQ0FMLAorCURQSFlfVFhfSURM RSwKKwlEUEhZX1RYX1VMUCwKKwlEUEhZX1RYX0xBTkVTVEFSVCwKKwlEUEhZX1RYX0NMS0FMSUdO LAorCURQSFlfVFhfRERMVFVOTklORywKKwlEUEhZX1RYX1VMUF9GT1JDRV9QTEwsCisJRFBIWV9U WF9MT0NLX0xPU1MKK307CisKK3N0cnVjdCBtaXBpX2RhdGFfdHlwZV9wYXJhbXMgeworCXU4IHNp emVfY29uc3RyYWludF9waXhlbHM7CisJdTggc2l6ZV9jb25zdHJhaW50X2J5dGVzOworCXU4IHBp eGVsc19wZXJfcGNsazsKKwl1OCBiaXRzX3Blcl9wY2xrOworfTsKKworc3RydWN0IG1pcGlfdHhf ZHNpX2NmZyB7CisJdTggaGZwX2JsYW5rX2VuOwkvKiBIb3Jpem9udGFsIGZyb250IHBvcmNoIGJs YW5raW5nIGVuYWJsZSAqLworCXU4IGVvdHBfZW47CQkvKiBFbmQgb2YgdHJhbnNtaXNzaW9uIHBh Y2tldCBlbmFibGUgKi8KKwkvKiBMYXN0IHZlcnRpY2FsIGZyb250IHBvcmNoIGJsYW5raW5nIG1v ZGUgKi8KKwl1OCBscG1fbGFzdF92ZnBfbGluZTsKKwkvKiBGaXJzdCB2ZXJ0aWNhbCBzeW5jIGFj dGl2ZSBibGFua2luZyBtb2RlICovCisJdTggbHBtX2ZpcnN0X3ZzYV9saW5lOworCXU4IHN5bmNf cHVsc2VfZXZlbnRuOwkvKiBTeW5jIHR5cGUgKi8KKwl1OCBoZnBfYmxhbmtpbmc7CS8qIEhvcml6 b250YWwgZnJvbnQgcG9yY2ggYmxhbmtpbmcgbW9kZSAqLworCXU4IGhicF9ibGFua2luZzsJLyog SG9yaXpvbnRhbCBiYWNrIHBvcmNoIGJsYW5raW5nIG1vZGUgKi8KKwl1OCBoc2FfYmxhbmtpbmc7 CS8qIEhvcml6b250YWwgc3luYyBhY3RpdmUgYmxhbmtpbmcgbW9kZSAqLworCXU4IHZfYmxhbmtp bmc7CQkvKiBWZXJ0aWNhbCB0aW1pbmcgYmxhbmtpbmcgbW9kZSAqLworfTsKKworc3RydWN0IG1p cGlfdHhfZnJhbWVfc2VjdGlvbl9jZmcgeworCXUzMiBkbWFfdl9zdHJpZGU7CisJdTE2IGRtYV92 X3NjYWxlX2NmZzsKKwl1MTYgd2lkdGhfcGl4ZWxzOworCXUxNiBoZWlnaHRfbGluZXM7CisJdTgg ZG1hX3BhY2tlZDsKKwl1OCBicHA7CisJdTggYnBwX3VucGFja2VkOworCXU4IGRtYV9oX3N0cmlk ZTsKKwl1OCBkYXRhX3R5cGU7CisJdTggZGF0YV9tb2RlOworCXU4IGRtYV9mbGlwX3JvdGF0ZV9z ZWw7Cit9OworCitzdHJ1Y3QgbWlwaV90eF9mcmFtZV90aW1pbmdfY2ZnIHsKKwl1MzIgYnBwOwor CXUzMiBsYW5lX3JhdGVfbWJwczsKKwl1MzIgaHN5bmNfd2lkdGg7CisJdTMyIGhfYmFja3BvcmNo OworCXUzMiBoX2Zyb250cG9yY2g7CisJdTMyIGhfYWN0aXZlOworCXUxNiB2c3luY193aWR0aDsK Kwl1MTYgdl9iYWNrcG9yY2g7CisJdTE2IHZfZnJvbnRwb3JjaDsKKwl1MTYgdl9hY3RpdmU7CisJ dTggYWN0aXZlX2xhbmVzOworfTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdF9waGNmZyB7 CisJdTMyIHdjOworCWVudW0gbWlwaV9kYXRhX21vZGUgZGF0YV9tb2RlOworCWVudW0gbWlwaV9k c2lfZGF0YV90eXBlIGRhdGFfdHlwZTsKKwl1OCB2Y2hhbm5lbDsKKwl1OCBkbWFfcGFja2VkOwor fTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfY2ZnIHsKKwlzdHJ1Y3QgbWlwaV90eF9mcmFtZV9z ZWN0aW9uX2NmZyAqc2VjdGlvbnNbTUlQSV9UWF9GUkFNRV9HRU5fU0VDVElPTlNdOworCXUzMiBo c3luY193aWR0aDsJLyogaW4gcGl4ZWxzICovCisJdTMyIGhfYmFja3BvcmNoOwkvKiBpbiBwaXhl bHMgKi8KKwl1MzIgaF9mcm9udHBvcmNoOwkvKiBpbiBwaXhlbHMgKi8KKwl1MTYgdnN5bmNfd2lk dGg7CS8qIGluIGxpbmVzICovCisJdTE2IHZfYmFja3BvcmNoOwkvKiBpbiBsaW5lcyAqLworCXUx NiB2X2Zyb250cG9yY2g7CS8qIGluIGxpbmVzICovCit9OworCitzdHJ1Y3QgbWlwaV90eF9jdHJs X2NmZyB7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfY2ZnICpmcmFtZXNbTUlQSV9UWF9GUkFNRV9H RU5dOworCWNvbnN0IHN0cnVjdCBtaXBpX3R4X2RzaV9jZmcgKnR4X2RzaV9jZmc7CisJdTggbGlu ZV9zeW5jX3BrdF9lbjsKKwl1OCBsaW5lX2NvdW50ZXJfYWN0aXZlOworCXU4IGZyYW1lX2NvdW50 ZXJfYWN0aXZlOworCXU4IHR4X2hzY2xra2lkbGVfY250OworCXU4IHR4X2hzZXhpdF9jbnQ7CisJ dTggdHhfY3JjX2VuOworCXU4IHR4X2hhY3Rfd2FpdF9zdG9wOworCXU4IHR4X2Fsd2F5c191c2Vf aGFjdDsKKwl1OCB0eF93YWl0X3RyaWc7CisJdTggdHhfd2FpdF9hbGxfc2VjdDsKK307CisKKy8q IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBNSVBJIGNvbnRyb2wgKi8KK3N0cnVjdCBtaXBp X2N0cmxfY2ZnIHsKKwl1OCBhY3RpdmVfbGFuZXM7CS8qICMgYWN0aXZlIGxhbmVzIHBlciBjb250 cm9sbGVyIDIvNCAqLworCXUzMiBsYW5lX3JhdGVfbWJwczsJLyogTUJQUyAqLworCXUzMiByZWZf Y2xrX2toejsKKwl1MzIgY2ZnX2Nsa19raHo7CisJc3RydWN0IG1pcGlfdHhfY3RybF9jZmcgdHhf Y3RybF9jZmc7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQga21iX3dyaXRlX21pcGkoc3RydWN0 IGttYl9kc2kgKmttYl9kc2ksCisJCQkJICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsdWUpCit7 CisJd3JpdGVsKHZhbHVlLCAoa21iX2RzaS0+bWlwaV9tbWlvICsgcmVnKSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdTMyIGttYl9yZWFkX21pcGkoc3RydWN0IGttYl9kc2kgKmttYl9kc2ksIHVuc2ln bmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGttYl9kc2ktPm1pcGlfbW1pbyArIHJlZyk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWJfd3JpdGVfYml0c19taXBpKHN0cnVjdCBrbWJf ZHNpICprbWJfZHNpLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgb2Zmc2V0LAor CQkJCSAgICAgICB1MzIgbnVtX2JpdHMsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgcmVnX3ZhbCA9IGtt Yl9yZWFkX21pcGkoa21iX2RzaSwgcmVnKTsKKwl1MzIgbWFzayA9ICgxIDw8IG51bV9iaXRzKSAt IDE7CisKKwl2YWx1ZSAmPSBtYXNrOworCW1hc2sgPDw9IG9mZnNldDsKKwlyZWdfdmFsICY9ICh+ bWFzayk7CisJcmVnX3ZhbCB8PSAodmFsdWUgPDwgb2Zmc2V0KTsKKwlrbWJfd3JpdGVfbWlwaShr bWJfZHNpLCByZWcsIHJlZ192YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX3NldF9i aXRfbWlwaShzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJl ZywgdTMyIG9mZnNldCkKK3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX21pcGkoa21iX2RzaSwg cmVnKTsKKworCWttYl93cml0ZV9taXBpKGttYl9kc2ksIHJlZywgcmVnX3ZhbCB8ICgxIDw8IG9m ZnNldCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21iX2Nscl9iaXRfbWlwaShzdHJ1Y3Qg a21iX2RzaSAqa21iX2RzaSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdTMyIG9mZnNldCkK K3sKKwl1MzIgcmVnX3ZhbCA9IGttYl9yZWFkX21pcGkoa21iX2RzaSwgcmVnKTsKKworCWttYl93 cml0ZV9taXBpKGttYl9kc2ksIHJlZywgcmVnX3ZhbCAmICh+KDEgPDwgb2Zmc2V0KSkpOworfQor CitpbnQga21iX2RzaV9ob3N0X2JyaWRnZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7CitzdHJ1 Y3Qga21iX2RzaSAqa21iX2RzaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwor dm9pZCBrbWJfZHNpX2hvc3RfdW5yZWdpc3RlcihzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSk7Citp bnQga21iX2RzaV9tb2RlX3NldChzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSwgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCisJCSAgICAgaW50IHN5c19jbGtfbWh6KTsKK2ludCBrbWJfZHNp X21hcF9tbWlvKHN0cnVjdCBrbWJfZHNpICprbWJfZHNpKTsKK2ludCBrbWJfZHNpX2Nsa19pbml0 KHN0cnVjdCBrbWJfZHNpICprbWJfZHNpKTsKK2ludCBrbWJfZHNpX2VuY29kZXJfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSk7CisjZW5kaWYgLyog X19LTUJfRFNJX0hfXyAqLwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=