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=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,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 E811BC433E2 for ; Mon, 31 Aug 2020 20:03:14 +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 B538D2078B for ; Mon, 31 Aug 2020 20:03:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B538D2078B 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 60BC16E434; Mon, 31 Aug 2020 20:03:07 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1EFE96E378 for ; Mon, 31 Aug 2020 20:03:06 +0000 (UTC) IronPort-SDR: sGRyt7VyQpNFV7rJWVyTw6FDbBg5XsEA6NDjk9kHvcVFIpsueTW0AtatWaunhrIAcZxEiCsehx bTrp7jFMPGSA== X-IronPort-AV: E=McAfee;i="6000,8403,9730"; a="156308794" X-IronPort-AV: E=Sophos;i="5.76,376,1592895600"; d="scan'208";a="156308794" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2020 13:03:05 -0700 IronPort-SDR: hhzZFONcirDMo2vb2nBG+cznaBKSPuKADN9dEM2e+ucQfWhC0ji95lnbicwj0WfxLbglmzv+SS i1WHyzeqaCSA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,376,1592895600"; d="scan'208";a="325054075" Received: from sgovind3-mobl.amr.corp.intel.com (HELO achrisan-DESK2.amr.corp.intel.com) ([10.255.86.92]) by fmsmga004.fm.intel.com with ESMTP; 31 Aug 2020 13:03:05 -0700 From: Anitha Chrisanthus To: dri-devel@lists.freedesktop.org, anitha.chrisanthus@intel.com, bob.j.paauwe@intel.com, edmund.j.dea@intel.com Subject: [PATCH v7 3/4] drm/kmb: Mipi DSI part of the display driver Date: Mon, 31 Aug 2020 13:02:51 -0700 Message-Id: <1598904172-30865-4-git-send-email-anitha.chrisanthus@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1598904172-30865-1-git-send-email-anitha.chrisanthus@intel.com> References: <1598904172-30865-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: daniel.vetter@intel.com 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 byBicmlkZ2UncyBjb25uZWN0b3IgKFNhbSkKCkNjOiBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9y Zy5vcmc+ClNpZ25lZC1vZmYtYnk6IEFuaXRoYSBDaHJpc2FudGh1cyA8YW5pdGhhLmNocmlzYW50 aHVzQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEJvYiBQYWF1d2UgPGJvYi5qLnBhYXV3ZUBpbnRl bC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgfCAxNTIzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0va21iL2tt Yl9kc2kuaCB8ICAzNTAgKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODczIGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0va21iL2ttYl9kc2kuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0va21i L2ttYl9kc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRiZmE3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ttYi9rbWJfZHNpLmMKQEAgLTAsMCAr MSwxNTIzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTktMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdl Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSAia21iX2Rydi5oIgorI2lu Y2x1ZGUgImttYl9kc2kuaCIKKyNpbmNsdWRlICJrbWJfcmVncy5oIgorCitzdGF0aWMgc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0Oworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaV9kZXZpY2U7CisKKy8qIERlZmF1bHQgc2V0dGluZyBpcyAxMDgwcCwgNCBsYW5lcyAqLwor I2RlZmluZSBJTUdfSEVJR0hUX0xJTkVTICAxMDgwCisjZGVmaW5lIElNR19XSURUSF9QWCAgICAg IDE5MjAKKyNkZWZpbmUgTUlQSV9UWF9BQ1RJVkVfTEFORVMgNAorCitzdHJ1Y3QgbWlwaV90eF9m cmFtZV9zZWN0aW9uX2NmZyBtaXBpX3R4X2ZyYW1lMF9zZWN0X2NmZyA9IHsKKwkud2lkdGhfcGl4 ZWxzID0gSU1HX1dJRFRIX1BYLAorCS5oZWlnaHRfbGluZXMgPSBJTUdfSEVJR0hUX0xJTkVTLAor CS5kYXRhX3R5cGUgPSBEU0lfTFBfRFRfUFBTX1JHQjg4OF8yNEIsCisJLmRhdGFfbW9kZSA9IE1J UElfREFUQV9NT0RFMSwKKwkuZG1hX3BhY2tlZCA9IDAKK307CisKK3N0cnVjdCBtaXBpX3R4X2Zy YW1lX2NmZyBtaXBpdHhfZnJhbWUwX2NmZyA9IHsKKwkuc2VjdGlvbnNbMF0gPSAmbWlwaV90eF9m cmFtZTBfc2VjdF9jZmcsCisJLnNlY3Rpb25zWzFdID0gTlVMTCwKKwkuc2VjdGlvbnNbMl0gPSBO VUxMLAorCS5zZWN0aW9uc1szXSA9IE5VTEwsCisJLnZzeW5jX3dpZHRoID0gNSwKKwkudl9iYWNr cG9yY2ggPSAzNiwKKwkudl9mcm9udHBvcmNoID0gNCwKKwkuaHN5bmNfd2lkdGggPSA0NCwKKwku aF9iYWNrcG9yY2ggPSAxNDgsCisJLmhfZnJvbnRwb3JjaCA9IDg4Cit9OworCitzdHJ1Y3QgbWlw aV90eF9kc2lfY2ZnIG1pcGl0eF9kc2lfY2ZnID0geworCS5oZnBfYmxhbmtfZW4gPSAwLAorCS5l b3RwX2VuID0gMCwKKwkubHBtX2xhc3RfdmZwX2xpbmUgPSAwLAorCS5scG1fZmlyc3RfdnNhX2xp bmUgPSAwLAorCS5zeW5jX3B1bHNlX2V2ZW50biA9IERTSV9WSURFT19NT0RFX05PX0JVUlNUX0VW RU5ULAorCS5oZnBfYmxhbmtpbmcgPSBTRU5EX0JMQU5LX1BBQ0tFVCwKKwkuaGJwX2JsYW5raW5n ID0gU0VORF9CTEFOS19QQUNLRVQsCisJLmhzYV9ibGFua2luZyA9IFNFTkRfQkxBTktfUEFDS0VU LAorCS52X2JsYW5raW5nID0gU0VORF9CTEFOS19QQUNLRVQsCit9OworCitzdHJ1Y3QgbWlwaV9j dHJsX2NmZyBtaXBpX3R4X2luaXRfY2ZnID0geworCS5hY3RpdmVfbGFuZXMgPSBNSVBJX1RYX0FD VElWRV9MQU5FUywKKwkubGFuZV9yYXRlX21icHMgPSBNSVBJX1RYX0xBTkVfREFUQV9SQVRFX01C UFMsCisJLnJlZl9jbGtfa2h6ID0gTUlQSV9UWF9SRUZfQ0xLX0tIWiwKKwkuY2ZnX2Nsa19raHog PSBNSVBJX1RYX0NGR19DTEtfS0haLAorCS50eF9jdHJsX2NmZyA9IHsKKwkJCS5mcmFtZXNbMF0g PSAmbWlwaXR4X2ZyYW1lMF9jZmcsCisJCQkuZnJhbWVzWzFdID0gTlVMTCwKKwkJCS5mcmFtZXNb Ml0gPSBOVUxMLAorCQkJLmZyYW1lc1szXSA9IE5VTEwsCisJCQkudHhfZHNpX2NmZyA9ICZtaXBp dHhfZHNpX2NmZywKKwkJCS5saW5lX3N5bmNfcGt0X2VuID0gMCwKKwkJCS5saW5lX2NvdW50ZXJf YWN0aXZlID0gMCwKKwkJCS5mcmFtZV9jb3VudGVyX2FjdGl2ZSA9IDAsCisJCQkudHhfYWx3YXlz X3VzZV9oYWN0ID0gMSwKKwkJCS50eF9oYWN0X3dhaXRfc3RvcCA9IDEsCisJCQl9Cit9OworCitz dHJ1Y3QgIG1pcGlfaHNfZnJlcV9yYW5nZV9jZmcgeworCXUxNiBkZWZhdWx0X2JpdF9yYXRlX21i cHM7CisJdTggaHNmcmVxcmFuZ2VfY29kZTsKK307CisKK3N0cnVjdCB2Y29fcGFyYW1zIHsKKwl1 MzIgZnJlcTsKKwl1MzIgcmFuZ2U7CisJdTMyIGRpdmlkZXI7Cit9OworCitzdGF0aWMgc3RydWN0 IHZjb19wYXJhbXMgdmNvX3RhYmxlW10gPSB7CisJezUyLCAweDNmLCA4fSwKKwl7ODAsIDB4Mzks IDh9LAorCXsxMDUsIDB4MmYsIDR9LAorCXsxNjAsIDB4MjksIDR9LAorCXsyMTAsIDB4MWYsIDJ9 LAorCXszMjAsIDB4MTksIDJ9LAorCXs0MjAsIDB4MGYsIDF9LAorCXs2MzAsIDB4MDksIDF9LAor CXsxMTAwLCAweDAzLCAxfSwKKwl7MHhmZmZmLCAweDAxLCAxfSwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgbWlwaV9oc19mcmVxX3JhbmdlX2NmZworbWlwaV9oc19mcmVxX3JhbmdlW01JUElfRFBIWV9E RUZBVUxUX0JJVF9SQVRFU10gPSB7CisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSA4MCwgLmhz ZnJlcXJhbmdlX2NvZGUgPSAweDAwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDkwLCAu aHNmcmVxcmFuZ2VfY29kZSA9IDB4MTB9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTAw LCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjB9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0g MTEwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MzB9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gMTIwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDF9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gMTMwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTF9LAorCXsuZGVmYXVsdF9iaXRfcmF0 ZV9tYnBzID0gMTQwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjF9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gMTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MzF9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gMTYwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDJ9LAorCXsuZGVmYXVs dF9iaXRfcmF0ZV9tYnBzID0gMTcwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTJ9LAorCXsuZGVm YXVsdF9iaXRfcmF0ZV9tYnBzID0gMTgwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjJ9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTkwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MzJ9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjA1LCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDN9 LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjIwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4 MTN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjM1LCAuaHNmcmVxcmFuZ2VfY29kZSA9 IDB4MjN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjUwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4MzN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjc1LCAuaHNmcmVxcmFuZ2Vf Y29kZSA9IDB4MDR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMzAwLCAuaHNmcmVxcmFu Z2VfY29kZSA9IDB4MTR9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMzI1LCAuaHNmcmVx cmFuZ2VfY29kZSA9IDB4MjV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMzUwLCAuaHNm cmVxcmFuZ2VfY29kZSA9IDB4MzV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gNDAwLCAu aHNmcmVxcmFuZ2VfY29kZSA9IDB4MDV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gNDUw LCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTZ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0g NTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MjZ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBz ID0gNTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mzd9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gNjAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDd9LAorCXsuZGVmYXVsdF9iaXRfcmF0 ZV9tYnBzID0gNjUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTh9LAorCXsuZGVmYXVsdF9iaXRf cmF0ZV9tYnBzID0gNzAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mjh9LAorCXsuZGVmYXVsdF9i aXRfcmF0ZV9tYnBzID0gNzUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mzl9LAorCXsuZGVmYXVs dF9iaXRfcmF0ZV9tYnBzID0gODAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MDl9LAorCXsuZGVm YXVsdF9iaXRfcmF0ZV9tYnBzID0gODUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MTl9LAorCXsu ZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gOTAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4Mjl9LAor CXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTAwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDBB fSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEwNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0g MHgxQX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMTAwLCAuaHNmcmVxcmFuZ2VfY29k ZSA9IDB4MkF9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTE1MCwgLmhzZnJlcXJhbmdl X2NvZGUgPSAweDNCfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEyMDAsIC5oc2ZyZXFy YW5nZV9jb2RlID0gMHgwQn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxMjUwLCAuaHNm cmVxcmFuZ2VfY29kZSA9IDB4MUJ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTMwMCwg LmhzZnJlcXJhbmdlX2NvZGUgPSAweDJCfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDEz NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgzQ30sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMg PSAxNDAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MEN9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9t YnBzID0gMTQ1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDFDfSwKKwl7LmRlZmF1bHRfYml0X3Jh dGVfbWJwcyA9IDE1MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgyQ30sCisJey5kZWZhdWx0X2Jp dF9yYXRlX21icHMgPSAxNTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4M0R9LAorCXsuZGVmYXVs dF9iaXRfcmF0ZV9tYnBzID0gMTYwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDBEfSwKKwl7LmRl ZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE2NTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHgxRH0sCisJ ey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxNzAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4MkV9 LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTc1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAw eDNFfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE4MDAsIC5oc2ZyZXFyYW5nZV9jb2Rl ID0gMHgwRX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAxODUwLCAuaHNmcmVxcmFuZ2Vf Y29kZSA9IDB4MUV9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMTkwMCwgLmhzZnJlcXJh bmdlX2NvZGUgPSAweDJGfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDE5NTAsIC5oc2Zy ZXFyYW5nZV9jb2RlID0gMHgzRn0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyMDAwLCAu aHNmcmVxcmFuZ2VfY29kZSA9IDB4MEZ9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjA1 MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQwfSwKKwl7LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9 IDIxMDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0MX0sCisJey5kZWZhdWx0X2JpdF9yYXRlX21i cHMgPSAyMTUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDJ9LAorCXsuZGVmYXVsdF9iaXRfcmF0 ZV9tYnBzID0gMjIwMCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQzfSwKKwl7LmRlZmF1bHRfYml0 X3JhdGVfbWJwcyA9IDIyNTAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0NH0sCisJey5kZWZhdWx0 X2JpdF9yYXRlX21icHMgPSAyMzAwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4NDV9LAorCXsuZGVm YXVsdF9iaXRfcmF0ZV9tYnBzID0gMjM1MCwgLmhzZnJlcXJhbmdlX2NvZGUgPSAweDQ2fSwKKwl7 LmRlZmF1bHRfYml0X3JhdGVfbWJwcyA9IDI0MDAsIC5oc2ZyZXFyYW5nZV9jb2RlID0gMHg0N30s CisJey5kZWZhdWx0X2JpdF9yYXRlX21icHMgPSAyNDUwLCAuaHNmcmVxcmFuZ2VfY29kZSA9IDB4 NDh9LAorCXsuZGVmYXVsdF9iaXRfcmF0ZV9tYnBzID0gMjUwMCwgLmhzZnJlcXJhbmdlX2NvZGUg PSAweDQ5fQorfTsKKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitrbWJfZHNpX21vZGVf dmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rv ci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9k ZV9jb25maWc7CisKKwlpZiAobW9kZS0+aGRpc3BsYXkgPCBtb2RlX2NvbmZpZy0+bWluX3dpZHRo IHx8CisJICAgIG1vZGUtPmhkaXNwbGF5ID4gbW9kZV9jb25maWctPm1heF93aWR0aCkKKwkJcmV0 dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCWlmIChtb2RlLT52ZGlzcGxheSA8IG1vZGVfY29uZmln LT5taW5faGVpZ2h0IHx8CisJICAgIG1vZGUtPnZkaXNwbGF5ID4gbW9kZV9jb25maWctPm1heF9o ZWlnaHQpCisJCXJldHVybiBNT0RFX0JBRF9WVkFMVUU7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30K Kworc3RhdGljIGludCBrbWJfZHNpX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworCWludCBudW1fbW9kZXMgPSAwOworCisJbnVtX21vZGVzID0gZHJtX2FkZF9t b2Rlc19ub2VkaWQoY29ubmVjdG9yLAorCQkJCQkgY29ubmVjdG9yLT5kZXYtPm1vZGVfY29uZmln Lm1heF93aWR0aCwKKwkJCSBjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7 CisKKwlEUk1fSU5GTygid2lkdGg9JWQgaGVpZ2h0PSVkXG4iLAorCQkgY29ubmVjdG9yLT5kZXYt Pm1vZGVfY29uZmlnLm1heF93aWR0aCwKKwkJIGNvbm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZy5t YXhfaGVpZ2h0KTsKKwlEUk1fSU5GTygibnVtIG1vZGVzPSVkXG4iLCBudW1fbW9kZXMpOworCisJ cmV0dXJuIG51bV9tb2RlczsKK30KKwordm9pZCBrbWJfZHNpX2hvc3RfdW5yZWdpc3Rlcih2b2lk KQoreworCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rlcihkc2lfaG9zdCk7CisJa2ZyZWUoZHNpX2hv c3QpOworfQorCitzdGF0aWMgdm9pZCBrbWJfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGttYl9jb25uZWN0b3IgKmttYl9j b25uZWN0b3IgPSB0b19rbWJfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlkcm1fY29ubmVjdG9y X2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShrbWJfY29ubmVjdG9yKTsKK30KKworc3RhdGlj IHZvaWQga21iX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBrbWJfZHNpICprbWJfZHNpID0gdG9fa21iX2RzaShlbmNvZGVyKTsKKwor CWlmICgha21iX2RzaSkKKwkJcmV0dXJuOworCisJa2ZyZWUoa21iX2RzaS0+ZHNpX2hvc3QpOwor CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKworCWtmcmVlKGttYl9kc2kpOworCWlm ICghZHNpX2RldmljZSkKKwkJa2ZyZWUoZHNpX2RldmljZSk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3Mga21iX2RzaV9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGtt Yl9kc2lfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdAorZHJtX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3Mga21iX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewor CS5nZXRfbW9kZXMgPSBrbWJfZHNpX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGttYl9kc2lf bW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5j cyBrbWJfZHNpX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGttYl9kc2lfY29ubmVj dG9yX2Rlc3Ryb3ksCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25u ZWN0b3JfbW9kZXMsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k ZXN0cm95X3N0YXRlLAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGttYl9k c2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICAgIGNv bnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBrbWJfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJ ICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBrbWJfZHNpX2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBrbWJfZHNpX2hvc3Rf b3BzID0geworCS5hdHRhY2ggPSBrbWJfZHNpX2hvc3RfYXR0YWNoLAorCS5kZXRhY2ggPSBrbWJf ZHNpX2hvc3RfZGV0YWNoLAorCS50cmFuc2ZlciA9IGttYl9kc2lfaG9zdF90cmFuc2ZlciwKK307 CisKK3N0YXRpYyBzdHJ1Y3Qga21iX2RzaV9ob3N0ICprbWJfZHNpX2hvc3RfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAorCQkJCQkgICAgICBzdHJ1Y3Qga21iX2RzaSAqa21iX2RzaSkKK3sK KwlzdHJ1Y3Qga21iX2RzaV9ob3N0ICpob3N0OworCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpo b3N0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gTlVMTDsKKworCWhvc3Qt PmJhc2UgPSBkc2lfaG9zdDsKKwlob3N0LT5iYXNlLT5vcHMgPSAma21iX2RzaV9ob3N0X29wczsK Kwlob3N0LT5rbWJfZHNpID0ga21iX2RzaTsKKworCWhvc3QtPmJhc2UtPmRldiA9IGRybS0+ZGV2 OworCisJZHNpX2RldmljZS0+aG9zdCA9IGhvc3QtPmJhc2U7CisJaG9zdC0+ZGV2aWNlID0gZHNp X2RldmljZTsKKwlyZXR1cm4gaG9zdDsKK30KKworc3RydWN0IGRybV9icmlkZ2UgKmttYl9kc2lf aG9zdF9icmlkZ2VfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSA9IE5VTEw7CisJc3RydWN0IGRldmljZV9ub2RlICplbmNvZGVyX25vZGU7CisK KwkvKiBDcmVhdGUgYW5kIHJlZ2lzdGVyIE1JUEkgRFNJIGhvc3QgKi8KKwlpZiAoIWRzaV9ob3N0 KSB7CisJCWRzaV9ob3N0ID0ga3phbGxvYyhzaXplb2YoKmRzaV9ob3N0KSwgR0ZQX0tFUk5FTCk7 CisJCWlmICghZHNpX2hvc3QpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCQlkc2lf aG9zdC0+b3BzID0gJmttYl9kc2lfaG9zdF9vcHM7CisKKwkJaWYgKCFkc2lfZGV2aWNlKSB7CisJ CQlkc2lfZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKmRzaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsK KwkJCWlmICghZHNpX2RldmljZSkgeworCQkJCWtmcmVlKGRzaV9ob3N0KTsKKwkJCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKKwkJCX0KKwkJfQorCisJCWRzaV9ob3N0LT5kZXYgPSBkZXY7CisJ CW1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoZHNpX2hvc3QpOworCX0KKwkvKiBGaW5kIEFEVjc1MzUg bm9kZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWVuY29kZXJfbm9kZSA9IG9mX3BhcnNlX3BoYW5k bGUoZGV2LT5vZl9ub2RlLCAiZW5jb2Rlci1zbGF2ZSIsIDApOworCisJaWYgKCFlbmNvZGVyX25v ZGUpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGJyaWRnZSBpbmZvIGZyb20gRFRcbiIp OworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBMb2NhdGUgZHJtIGJyaWRn ZSBmcm9tIHRoZSBoZG1pIGVuY29kZXIgRFQgbm9kZSAqLworCWJyaWRnZSA9IG9mX2RybV9maW5k X2JyaWRnZShlbmNvZGVyX25vZGUpOworCW9mX25vZGVfcHV0KGVuY29kZXJfbm9kZSk7CisJaWYg KCFicmlkZ2UpIHsKKwkJRFJNX0lORk8oIldhaXQgZm9yIGV4dGVybmFsIGJyaWRnZSBkcml2ZXIg RFRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKKwl9CisJcmV0dXJuIGJy aWRnZTsKK30KKworc3RhdGljIHUzMiBtaXBpX2dldF9kYXRhdHlwZV9wYXJhbXModTMyIGRhdGFf dHlwZSwgdTMyIGRhdGFfbW9kZSwKKwkJCQkgICAgc3RydWN0IG1pcGlfZGF0YV90eXBlX3BhcmFt cyAqcGFyYW1zKQoreworCXN0cnVjdCBtaXBpX2RhdGFfdHlwZV9wYXJhbXMgZGF0YV90eXBlX3Bh cmFtOworCisJc3dpdGNoIChkYXRhX3R5cGUpIHsKKwljYXNlIERTSV9MUF9EVF9QUFNfWUNCQ1I0 MjBfMTJCOgorCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDI7CisJ CWRhdGFfdHlwZV9wYXJhbS5zaXplX2NvbnN0cmFpbnRfYnl0ZXMgPSAzOworCQlzd2l0Y2ggKGRh dGFfbW9kZSkgeworCQkJLyogQ2FzZSAwIG5vdCBzdXBwb3J0ZWQgYWNjb3JkaW5nIHRvIE1ESyAq LworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJZGF0YV90eXBlX3BhcmFtLnBp eGVsc19wZXJfcGNsayA9IDI7CisJCQlkYXRhX3R5cGVfcGFyYW0uYml0c19wZXJfcGNsayA9IDI0 OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoIkRTSTogSW52YWxpZCBkYXRh X21vZGUgJWRcbiIsIGRhdGFfbW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsKKwkJYnJl YWs7CisJY2FzZSBEU0lfTFBfRFRfUFBTX1lDQkNSNDIyXzE2QjoKKwkJZGF0YV90eXBlX3BhcmFt LnNpemVfY29uc3RyYWludF9waXhlbHMgPSAyOworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25z dHJhaW50X2J5dGVzID0gNDsKKwkJc3dpdGNoIChkYXRhX21vZGUpIHsKKwkJCS8qIENhc2UgMCBh bmQgMSBub3Qgc3VwcG9ydGVkIGFjY29yZGluZworCQkJICogdG8gTURLCisJCQkgKi8KKwkJY2Fz ZSAyOgorCQkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCQlkYXRhX3R5 cGVfcGFyYW0uYml0c19wZXJfcGNsayA9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWRh dGFfdHlwZV9wYXJhbS5waXhlbHNfcGVyX3BjbGsgPSAyOworCQkJZGF0YV90eXBlX3BhcmFtLmJp dHNfcGVyX3BjbGsgPSAzMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJE U0k6IEludmFsaWQgZGF0YV9tb2RlICVkXG4iLCBkYXRhX21vZGUpOworCQkJcmV0dXJuIC1FSU5W QUw7CisJCX07CisJCWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX0xQUFNfWUNCQ1I0MjJfMjBCOgor CWNhc2UgRFNJX0xQX0RUX1BQU19ZQ0JDUjQyMl8yNEI6CisJCWRhdGFfdHlwZV9wYXJhbS5zaXpl X2NvbnN0cmFpbnRfcGl4ZWxzID0gMjsKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWlu dF9ieXRlcyA9IDY7CisJCXN3aXRjaCAoZGF0YV9tb2RlKSB7CisJCQkvKiBDYXNlIDAgbm90IHN1 cHBvcnRlZCBhY2NvcmRpbmcgdG8gTURLICovCisJCWNhc2UgMToKKwkJY2FzZSAyOgorCQljYXNl IDM6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxzX3Blcl9wY2xrID0gMTsKKwkJCWRhdGFfdHlw ZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURS TV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfbW9kZSAlZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9OworCQlicmVhazsKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCNTY1 XzE2QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAxOworCQlk YXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMjsKKwkJc3dpdGNoIChkYXRh X21vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxz X3Blcl9wY2xrID0gMTsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMTY7CisJ CQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlkYXRhX3R5cGVfcGFyYW0ucGl4ZWxz X3Blcl9wY2xrID0gMjsKKwkJCWRhdGFfdHlwZV9wYXJhbS5iaXRzX3Blcl9wY2xrID0gMzI7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfbW9k ZSAlZFxuIiwgZGF0YV9tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQlicmVhazsK KwljYXNlIERTSV9MUF9EVF9QUFNfUkdCNjY2XzE4QjoKKwkJZGF0YV90eXBlX3BhcmFtLnNpemVf Y29uc3RyYWludF9waXhlbHMgPSA0OworCQlkYXRhX3R5cGVfcGFyYW0uc2l6ZV9jb25zdHJhaW50 X2J5dGVzID0gOTsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsgPSAxODsKKwkJZGF0 YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJyZWFrOworCWNhc2UgRFNJX0xQ X0RUX0xQUFNfUkdCNjY2XzE4QjoKKwljYXNlIERTSV9MUF9EVF9QUFNfUkdCODg4XzI0QjoKKwkJ ZGF0YV90eXBlX3BhcmFtLnNpemVfY29uc3RyYWludF9waXhlbHMgPSAxOworCQlkYXRhX3R5cGVf cGFyYW0uc2l6ZV9jb25zdHJhaW50X2J5dGVzID0gMzsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNf cGVyX3BjbGsgPSAyNDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJ CWJyZWFrOworCWNhc2UgRFNJX0xQX0RUX1BQU19SR0IxMDEwMTBfMzBCOgorCQlkYXRhX3R5cGVf cGFyYW0uc2l6ZV9jb25zdHJhaW50X3BpeGVscyA9IDQ7CisJCWRhdGFfdHlwZV9wYXJhbS5zaXpl X2NvbnN0cmFpbnRfYnl0ZXMgPSAxNTsKKwkJZGF0YV90eXBlX3BhcmFtLmJpdHNfcGVyX3BjbGsg PSAzMDsKKwkJZGF0YV90eXBlX3BhcmFtLnBpeGVsc19wZXJfcGNsayA9IDE7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCURSTV9FUlJPUigiRFNJOiBJbnZhbGlkIGRhdGFfdHlwZSAlZFxuIiwgZGF0 YV90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKKworCSpwYXJhbXMgPSBkYXRhX3R5cGVf cGFyYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY29tcHV0ZV93Yyh1MzIgd2lkdGhf cHgsIHU4IHNpemVfY29uc3RyX3AsIHU4IHNpemVfY29uc3RyX2IpCit7CisJLyogQ2FsY3VsYXRl IHRoZSB3b3JkIGNvdW50IGZvciBlYWNoIGxvbmcgcGFja2V0ICovCisJcmV0dXJuICgoKHdpZHRo X3B4IC8gc2l6ZV9jb25zdHJfcCkgKiBzaXplX2NvbnN0cl9iKSAmIDB4ZmZmZik7Cit9CisKK3N0 YXRpYyB1MzIgY29tcHV0ZV91bnBhY2tlZF9ieXRlcyh1MzIgd2MsIHU4IGJpdHNfcGVyX3BjbGsp Cit7CisJLyogTnVtYmVyIG9mIFBDTEsgY3ljbGVzIG5lZWRlZCB0byB0cmFuc2ZlciBhIGxpbmUK KwkgKiB3aXRoIGVhY2ggUENMSyBjeWNsZSwgNCBCeXRlcyBhcmUgc2VudCB0aHJvdWdoIHRoZSBQ UEwgbW9kdWxlCisJICovCisJcmV0dXJuICgod2MgKiA4KSAvIGJpdHNfcGVyX3BjbGspICogNDsK K30KKworc3RhdGljIHUzMiBtaXBpX3R4X2ZnX3NlY3Rpb25fY2ZnX3JlZ3Moc3RydWN0IGttYl9k cm1fcHJpdmF0ZSAqa21iLAorCQkJCSAgICAgICB1OCBmcmFtZV9pZCwgdTggc2VjdGlvbiwKKwkJ CQkgICAgICAgdTMyIGhlaWdodF9saW5lcywgdTMyIHVucGFja2VkX2J5dGVzLAorCQkJCSAgICAg ICBzdHJ1Y3QgbWlwaV90eF9mcmFtZV9zZWN0X3BoY2ZnICpwaF9jZmcpCit7CisJdTMyIGNmZyA9 IDA7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCXUzMiByZWdfYWRyOworCisJLyogRnJh bWUgc2VjdGlvbiBwYWNrZXQgaGVhZGVyICovCisJLyogV29yZCBjb3VudCBiaXRzIFsxNTowXSAq LworCWNmZyA9IChwaF9jZmctPndjICYgTUlQSV9UWF9TRUNUX1dDX01BU0spIDw8IDA7CisKKwkv KiBEYXRhIHR5cGUgKGJpdHMgWzIxOjE2XSkgKi8KKwljZmcgfD0gKChwaF9jZmctPmRhdGFfdHlw ZSAmIE1JUElfVFhfU0VDVF9EVF9NQVNLKQorCQk8PCBNSVBJX1RYX1NFQ1RfRFRfU0hJRlQpOwor CisJLyogVmlydHVhbCBjaGFubmVsIChiaXRzIFsyMzoyMl0pICovCisJY2ZnIHw9ICgocGhfY2Zn LT52Y2hhbm5lbCAmIE1JUElfVFhfU0VDVF9WQ19NQVNLKQorCQk8PCBNSVBJX1RYX1NFQ1RfVkNf U0hJRlQpOworCisJLyogRGF0YSBtb2RlIChiaXRzIFsyNDoyNV0pICovCisJY2ZnIHw9ICgocGhf Y2ZnLT5kYXRhX21vZGUgJiBNSVBJX1RYX1NFQ1RfRE1fTUFTSykKKwkJPDwgTUlQSV9UWF9TRUNU X0RNX1NISUZUKTsKKwlpZiAocGhfY2ZnLT5kbWFfcGFja2VkKQorCQljZmcgfD0gTUlQSV9UWF9T RUNUX0RNQV9QQUNLRUQ7CisKKwlkcm1fZGJnKCZrbWItPmRybSwKKwkJImN0cmw9JWQgZnJhbWVf aWQ9JWQgc2VjdGlvbj0lZCBjZmc9JXggcGFja2VkPSVkXG4iLAorCQkgIGN0cmxfbm8sIGZyYW1l X2lkLCBzZWN0aW9uLCBjZmcsIHBoX2NmZy0+ZG1hX3BhY2tlZCk7CisJa21iX3dyaXRlX21pcGko a21iLAorCQkgICAgICAgKE1JUElfVFhtX0hTX0ZHbl9TRUNUb19QSChjdHJsX25vLCBmcmFtZV9p ZCwgc2VjdGlvbikpLAorCQkgICAgICAgY2ZnKTsKKworCS8qIFVucGFja2VkIGJ5dGVzICovCisK KwkvKiBUaGVyZSBhcmUgNCBmcmFtZSBnZW5lcmF0b3JzIGFuZCBlYWNoIGZnIGhhcyA0IHNlY3Rp b25zCisJICogVGhlcmUgYXJlIDIgcmVnaXN0ZXJzIGZvciB1bnBhY2tlZCBieXRlcyAoIyBieXRl cyBlYWNoCisJICogc2VjdGlvbiBvY2N1cGllcyBpbiBtZW1vcnkpCisJICogUkVHX1VOUEFDS0VE X0JZVEVTMDogWzE1OjBdLUJZVEVTMCwgWzMxOjE2XS1CWVRFUzEKKwkgKiBSRUdfVU5QQUNLRURf QllURVMxOiBbMTU6MF0tQllURVMyLCBbMzE6MTZdLUJZVEVTMworCSAqLworCXJlZ19hZHIgPQor CSAgICBNSVBJX1RYbV9IU19GR25fU0VDVF9VTlBBQ0tFRF9CWVRFUzAoY3RybF9ubywKKwkJCQkJ CSBmcmFtZV9pZCkgKyAoc2VjdGlvbiAvIDIpICogNDsKKwlrbWJfd3JpdGVfYml0c19taXBpKGtt YiwgcmVnX2FkciwgKHNlY3Rpb24gJSAyKSAqIDE2LCAxNiwKKwkJCSAgICB1bnBhY2tlZF9ieXRl cyk7CisJZHJtX2RiZygma21iLT5kcm0sCisJCSJ1bnBhY2tlZF9ieXRlcyA9ICVkLCB3b3JkY291 bnQgPSAlZFxuIiwgdW5wYWNrZWRfYnl0ZXMsCisJCSAgcGhfY2ZnLT53Yyk7CisKKwkvKiBMaW5l IGNvbmZpZyAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19GR25fU0VDVG9fTElORV9DRkcoY3Ry bF9ubywgZnJhbWVfaWQsIHNlY3Rpb24pOworCWttYl93cml0ZV9taXBpKGttYiwgcmVnX2Fkciwg aGVpZ2h0X2xpbmVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBtaXBpX3R4X2ZnX3Nl Y3Rpb25fY2ZnKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwKKwkJCQkgIHU4IGZyYW1lX2lk LCB1OCBzZWN0aW9uLAorCQkJCSAgc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdGlvbl9jZmcgKmZy YW1lX3NjZmcsCisJCQkJICB1MzIgKmJpdHNfcGVyX3BjbGssIHUzMiAqd2MpCit7CisJdTMyIHJl dCA9IDA7CisJdTMyIHVucGFja2VkX2J5dGVzOworCXN0cnVjdCBtaXBpX2RhdGFfdHlwZV9wYXJh bXMgZGF0YV90eXBlX3BhcmFtZXRlcnM7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdF9waGNm ZyBwaF9jZmc7CisKKwlyZXQgPSBtaXBpX2dldF9kYXRhdHlwZV9wYXJhbXMoZnJhbWVfc2NmZy0+ ZGF0YV90eXBlLAorCQkJCSAgICAgICBmcmFtZV9zY2ZnLT5kYXRhX21vZGUsCisJCQkJICAgICAg ICZkYXRhX3R5cGVfcGFyYW1ldGVycyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IFBhY2tldCB3aWR0aCBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiB0aGUgbWluaW11bSBwYWNrZXQg d2lkdGgKKwkgKiAoaW4gcGl4ZWxzKSBzZXQgZm9yIGVhY2ggZGF0YSB0eXBlCisJICovCisJaWYg KGZyYW1lX3NjZmctPndpZHRoX3BpeGVscyAlCisJICAgIGRhdGFfdHlwZV9wYXJhbWV0ZXJzLnNp emVfY29uc3RyYWludF9waXhlbHMgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqd2MgPSBj b21wdXRlX3djKGZyYW1lX3NjZmctPndpZHRoX3BpeGVscywKKwkJCSBkYXRhX3R5cGVfcGFyYW1l dGVycy5zaXplX2NvbnN0cmFpbnRfcGl4ZWxzLAorCQkJIGRhdGFfdHlwZV9wYXJhbWV0ZXJzLnNp emVfY29uc3RyYWludF9ieXRlcyk7CisJdW5wYWNrZWRfYnl0ZXMgPSBjb21wdXRlX3VucGFja2Vk X2J5dGVzKCp3YywKKwkJCQkJCWRhdGFfdHlwZV9wYXJhbWV0ZXJzLmJpdHNfcGVyX3BjbGspOwor CXBoX2NmZy53YyA9ICp3YzsKKwlwaF9jZmcuZGF0YV9tb2RlID0gZnJhbWVfc2NmZy0+ZGF0YV9t b2RlOworCXBoX2NmZy5kYXRhX3R5cGUgPSBmcmFtZV9zY2ZnLT5kYXRhX3R5cGU7CisJcGhfY2Zn LmRtYV9wYWNrZWQgPSBmcmFtZV9zY2ZnLT5kbWFfcGFja2VkOworCXBoX2NmZy52Y2hhbm5lbCA9 IGZyYW1lX2lkOworCisJbWlwaV90eF9mZ19zZWN0aW9uX2NmZ19yZWdzKGttYiwgZnJhbWVfaWQs IHNlY3Rpb24sCisJCQkJICAgIGZyYW1lX3NjZmctPmhlaWdodF9saW5lcywKKwkJCQkgICAgdW5w YWNrZWRfYnl0ZXMsICZwaF9jZmcpOworCisJLyogQ2FsbGVyIG5lZWRzIGJpdHNfcGVyX2NsayBm b3IgYWRkaXRpb25hbCBjYWx1Y2xhdGlvbnMgKi8KKwkqYml0c19wZXJfcGNsayA9IGRhdGFfdHlw ZV9wYXJhbWV0ZXJzLmJpdHNfcGVyX3BjbGs7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgbWlwaV90eF9mZ19jZmdfcmVncyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIHU4IGZy YW1lX2dlbiwKKwkJCQlzdHJ1Y3QgbWlwaV90eF9mcmFtZV90aW1pbmdfY2ZnICpmZ19jZmcpCit7 CisJdTMyIHN5c2NsazsKKwl1MzIgcHBsX2xscF9yYXRpbzsKKwl1MzIgY3RybF9ubyA9IE1JUElf Q1RSTDYsIHJlZ19hZHIsIHZhbCwgb2Zmc2V0OworCisJLyogNTAwIE1oeiBzeXN0ZW0gY2xvY2sg bWludXMgNTAgdG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2UgaW4KKwkgKiBNSVBJIGNsb2Nr IHNwZWVkIGluIFJUTCB0ZXN0cworCSAqLworCXN5c2NsayA9IGttYi0+c3lzX2Nsa19taHogLSA1 MDsKKworCS8qIFBQTC1QaXhlbCBQYWNraW5nIExheWVyLCBMTFAtTG93IExldmVsIFByb3RvY29s CisJICogRnJhbWUgZ2VuYXJ0b3IgdGltaW5nIHBhcmFtZXRlcnMgYXJlIGNsb2NrZWQgb24gdGhl IHN5c3RlbSBjbG9jaywKKwkgKiB3aGVyZWFzIGFzIHRoZSBlcXVpdmFsZW50IHBhcmFtZXRlcnMg aW4gdGhlIExMUCBibG9ja3MgYXJlIGNsb2NrZWQKKwkgKiBvbiBMTFAgVHggY2xvY2sgZnJvbSB0 aGUgRC1QSFkgLSBCWVRFIGNsb2NrCisJICovCisKKwkvKiBNdWx0aXBseSBieSAxMDAwIHRvIG1h aW50YWluIHByZWNpc2lvbiAqLworCXBwbF9sbHBfcmF0aW8gPSAoKGZnX2NmZy0+YnBwIC8gOCkg KiBzeXNjbGsgKiAxMDAwKSAvCisJICAgICgoZmdfY2ZnLT5sYW5lX3JhdGVfbWJwcyAvIDgpICog ZmdfY2ZnLT5hY3RpdmVfbGFuZXMpOworCisJZHJtX2RiZygma21iLT5kcm0sICJwcGxfbGxwX3Jh dGlvPSVkXG4iLCBwcGxfbGxwX3JhdGlvKTsKKwlkcm1fZGJnKCZrbWItPmRybSwgImJwcD0lZCBz eXNjbGs9JWQgbGFuZS1yYXRlPSVkIGFjdGl2ZS1sYW5lcz0lZFxuIiwKKwkJZmdfY2ZnLT5icHAs IHN5c2NsaywgZmdfY2ZnLT5sYW5lX3JhdGVfbWJwcywKKwkJIGZnX2NmZy0+YWN0aXZlX2xhbmVz KTsKKworCS8qIEZyYW1lIGdlbmVyYXRvciBudW1iZXIgb2YgbGluZXMgKi8KKwlyZWdfYWRyID0g TUlQSV9UWG1fSFNfRkduX05VTV9MSU5FUyhjdHJsX25vLCBmcmFtZV9nZW4pOworCWttYl93cml0 ZV9taXBpKGttYiwgcmVnX2FkciwgZmdfY2ZnLT52X2FjdGl2ZSk7CisKKwkvKiB2c3luYyB3aWR0 aAorCSAqIFRoZXJlIGFyZSAyIHJlZ2lzdGVycyBmb3IgdnN5bmMgd2lkdGggKFZTQSBpbiBsaW5l cyBmb3IKKwkgKiBjaGFubmVscyAwLTMpCisJICogUkVHX1ZTWU5DX1dJRFRIMDogWzE1OjBdLVZT QSBmb3IgY2hhbm5lbDAsIFszMToxNl0tVlNBIGZvciBjaGFubmVsMQorCSAqIFJFR19WU1lOQ19X SURUSDE6IFsxNTowXS1WU0EgZm9yIGNoYW5uZWwyLCBbMzE6MTZdLVZTQSBmb3IgY2hhbm5lbDMK KwkgKi8KKwlvZmZzZXQgPSAoZnJhbWVfZ2VuICUgMikgKiAxNjsKKwlyZWdfYWRyID0gTUlQSV9U WG1fSFNfVlNZTkNfV0lEVEhuKGN0cmxfbm8sIGZyYW1lX2dlbiAvIDIpOworCWttYl93cml0ZV9i aXRzX21pcGkoa21iLCByZWdfYWRyLCBvZmZzZXQsIDE2LCBmZ19jZmctPnZzeW5jX3dpZHRoKTsK KworCS8qIHZlcnRpY2FsIGJhY2twb3JjaCAodmJwKSAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9I U19WX0JBQ0tQT1JDSEVTbihjdHJsX25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3JpdGVfYml0 c19taXBpKGttYiwgcmVnX2Fkciwgb2Zmc2V0LCAxNiwgZmdfY2ZnLT52X2JhY2twb3JjaCk7CisK KwkvKiB2ZXJ0aWNhbCBmcm9udHBvcmNoICh2ZnApICovCisJcmVnX2FkciA9IE1JUElfVFhtX0hT X1ZfRlJPTlRQT1JDSEVTbihjdHJsX25vLCBmcmFtZV9nZW4gLyAyKTsKKwlrbWJfd3JpdGVfYml0 c19taXBpKGttYiwgcmVnX2Fkciwgb2Zmc2V0LCAxNiwgZmdfY2ZnLT52X2Zyb250cG9yY2gpOwor CisJLyogdmVydGljYWwgYWN0aXZlICh2YWN0aXZlKSAqLworCXJlZ19hZHIgPSBNSVBJX1RYbV9I U19WX0FDVElWRW4oY3RybF9ubywgZnJhbWVfZ2VuIC8gMik7CisJa21iX3dyaXRlX2JpdHNfbWlw aShrbWIsIHJlZ19hZHIsIG9mZnNldCwgMTYsIGZnX2NmZy0+dl9hY3RpdmUpOworCisJLyogaHN5 bmMgd2lkdGggKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfSFNZTkNfV0lEVEhuKGN0cmxfbm8s IGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLAorCQkgICAgICAgKGZn X2NmZy0+aHN5bmNfd2lkdGggKiBwcGxfbGxwX3JhdGlvKSAvIDEwMDApOworCisJLyogaG9yaXpv bnRhbCBiYWNrcG9yY2ggKGhicCkgKi8KKwlyZWdfYWRyID0gTUlQSV9UWG1fSFNfSF9CQUNLUE9S Q0huKGN0cmxfbm8sIGZyYW1lX2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLAor CQkgICAgICAgKGZnX2NmZy0+aF9iYWNrcG9yY2ggKiBwcGxfbGxwX3JhdGlvKSAvIDEwMDApOwor CisJLyogaG9yaXpvbnRhbCBmcm9udHBvcmNoIChoZnApICovCisJcmVnX2FkciA9IE1JUElfVFht X0hTX0hfRlJPTlRQT1JDSG4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlrbWJfd3JpdGVfbWlwaShr bWIsIHJlZ19hZHIsCisJCSAgICAgICAoZmdfY2ZnLT5oX2Zyb250cG9yY2ggKiBwcGxfbGxwX3Jh dGlvKSAvIDEwMDApOworCisJLyogaG9yaXpvbnRhbCBhY3RpdmUgKGhhKSAqLworCXJlZ19hZHIg PSBNSVBJX1RYbV9IU19IX0FDVElWRW4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKworCS8qIGNvbnZl cnQgaF9hY3RpdmUgd2hpY2ggaXMgd2MgaW4gYnl0ZXMgdG8gY3ljbGVzICovCisJdmFsID0gKGZn X2NmZy0+aF9hY3RpdmUgKiBzeXNjbGsgKiAxMDAwKSAvCisJICAgICgoZmdfY2ZnLT5sYW5lX3Jh dGVfbWJwcyAvIDgpICogZmdfY2ZnLT5hY3RpdmVfbGFuZXMpOworCXZhbCAvPSAxMDAwOworCWtt Yl93cml0ZV9taXBpKGttYiwgcmVnX2FkciwgdmFsKTsKKworCS8qIGxscCBoc3luYyB3aWR0aCAq LworCXJlZ19hZHIgPSBNSVBJX1RYbV9IU19MTFBfSFNZTkNfV0lEVEhuKGN0cmxfbm8sIGZyYW1l X2dlbik7CisJa21iX3dyaXRlX21pcGkoa21iLCByZWdfYWRyLCBmZ19jZmctPmhzeW5jX3dpZHRo ICogKGZnX2NmZy0+YnBwIC8gOCkpOworCisJLyogbGxwIGggYmFja3BvcmNoICovCisJcmVnX2Fk ciA9IE1JUElfVFhtX0hTX0xMUF9IX0JBQ0tQT1JDSG4oY3RybF9ubywgZnJhbWVfZ2VuKTsKKwlr bWJfd3JpdGVfbWlwaShrbWIsIHJlZ19hZHIsIGZnX2NmZy0+aF9iYWNrcG9yY2ggKiAoZmdfY2Zn LT5icHAgLyA4KSk7CisKKwkvKiBsbHAgaCBmcm9udHBvcmNoICovCisJcmVnX2FkciA9IE1JUElf VFhtX0hTX0xMUF9IX0ZST05UUE9SQ0huKGN0cmxfbm8sIGZyYW1lX2dlbik7CisJa21iX3dyaXRl X21pcGkoa21iLCByZWdfYWRyLAorCQkgICAgICAgZmdfY2ZnLT5oX2Zyb250cG9yY2ggKiAoZmdf Y2ZnLT5icHAgLyA4KSk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfdHhfZmdfY2ZnKHN0cnVjdCBr bWJfZHJtX3ByaXZhdGUgKmttYiwgdTggZnJhbWVfZ2VuLAorCQkJICAgdTggYWN0aXZlX2xhbmVz LCB1MzIgYnBwLCB1MzIgd2MsCisJCQkgICB1MzIgbGFuZV9yYXRlX21icHMsIHN0cnVjdCBtaXBp X3R4X2ZyYW1lX2NmZyAqZmdfY2ZnKQoreworCXUzMiBpLCBmZ19udW1fbGluZXMgPSAwOworCXN0 cnVjdCBtaXBpX3R4X2ZyYW1lX3RpbWluZ19jZmcgZmdfdF9jZmc7CisKKwkvKiBDYWxjdWxhdGUg dGhlIHRvdGFsIGZyYW1lIGdlbmVyYXRvciBudW1iZXIgb2YKKwkgKiBsaW5lcyBiYXNlZCBvbiBp dCdzIGFjdGl2ZSBzZWN0aW9ucworCSAqLworCWZvciAoaSA9IDA7IGkgPCBNSVBJX1RYX0ZSQU1F X0dFTl9TRUNUSU9OUzsgaSsrKSB7CisJCWlmIChmZ19jZmctPnNlY3Rpb25zW2ldKQorCQkJZmdf bnVtX2xpbmVzICs9IGZnX2NmZy0+c2VjdGlvbnNbaV0tPmhlaWdodF9saW5lczsKKwl9CisKKwlm Z190X2NmZy5icHAgPSBicHA7CisJZmdfdF9jZmcubGFuZV9yYXRlX21icHMgPSBsYW5lX3JhdGVf bWJwczsKKwlmZ190X2NmZy5oc3luY193aWR0aCA9IGZnX2NmZy0+aHN5bmNfd2lkdGg7CisJZmdf dF9jZmcuaF9iYWNrcG9yY2ggPSBmZ19jZmctPmhfYmFja3BvcmNoOworCWZnX3RfY2ZnLmhfZnJv bnRwb3JjaCA9IGZnX2NmZy0+aF9mcm9udHBvcmNoOworCWZnX3RfY2ZnLmhfYWN0aXZlID0gd2M7 CisJZmdfdF9jZmcudnN5bmNfd2lkdGggPSBmZ19jZmctPnZzeW5jX3dpZHRoOworCWZnX3RfY2Zn LnZfYmFja3BvcmNoID0gZmdfY2ZnLT52X2JhY2twb3JjaDsKKwlmZ190X2NmZy52X2Zyb250cG9y Y2ggPSBmZ19jZmctPnZfZnJvbnRwb3JjaDsKKwlmZ190X2NmZy52X2FjdGl2ZSA9IGZnX251bV9s aW5lczsKKwlmZ190X2NmZy5hY3RpdmVfbGFuZXMgPSBhY3RpdmVfbGFuZXM7CisKKwkvKiBBcHBs eSBmcmFtZSBnZW5lcmF0b3IgdGltaW5nIHNldHRpbmcgKi8KKwltaXBpX3R4X2ZnX2NmZ19yZWdz KGttYiwgZnJhbWVfZ2VuLCAmZmdfdF9jZmcpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4X211 bHRpY2hhbm5lbF9maWZvX2NmZyhzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJCQkJCSAg dTggYWN0aXZlX2xhbmVzLCB1OCB2Y2hhbm5lbF9pZCkKK3sKKwl1MzIgZmlmb19zaXplLCBmaWZv X3J0aHJlc2hvbGQ7CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCisJLyogQ2xlYXIgYWxs IG1jIGZpZm8gY2hhbm5lbCBzaXplcyBhbmQgdGhyZXNob2xkcyAqLworCWttYl93cml0ZV9taXBp KGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX0NUUkxfRU4sIDApOworCWttYl93cml0ZV9taXBpKGtt YiwgTUlQSV9UWF9IU19NQ19GSUZPX0NIQU5fQUxMT0MwLCAwKTsKKwlrbWJfd3JpdGVfbWlwaShr bWIsIE1JUElfVFhfSFNfTUNfRklGT19DSEFOX0FMTE9DMSwgMCk7CisJa21iX3dyaXRlX21pcGko a21iLCBNSVBJX1RYX0hTX01DX0ZJRk9fUlRIUkVTSE9MRDAsIDApOworCWttYl93cml0ZV9taXBp KGttYiwgTUlQSV9UWF9IU19NQ19GSUZPX1JUSFJFU0hPTEQxLCAwKTsKKworCWZpZm9fc2l6ZSA9 ICgoYWN0aXZlX2xhbmVzID4gTUlQSV9EX0xBTkVTX1BFUl9EUEhZKSA/CisJCSAgICAgTUlQSV9D VFJMXzRMQU5FX01BWF9NQ19GSUZPX0xPQyA6CisJCSAgICAgTUlQSV9DVFJMXzJMQU5FX01BWF9N Q19GSUZPX0xPQykgLSAxOworCisJLyogTUMgZmlmbyBzaXplIGZvciB2aXJ0dWFsIGNoYW5uZWxz IDAtMworCSAqIFJFR19NQ19GSUZPX0NIQU5fQUxMT0MwOiBbODowXS1jaGFubmVsMCwgWzI0OjE2 XS1jaGFubmVsMQorCSAqIFJFR19NQ19GSUZPX0NIQU5fQUxMT0MxOiBbODowXS0yLCBbMjQ6MTZd LWNoYW5uZWwzCisJICovCisJU0VUX01DX0ZJRk9fQ0hBTl9BTExPQyhrbWIsIGN0cmxfbm8sIHZj aGFubmVsX2lkLCBmaWZvX3NpemUpOworCisJLyogU2V0IHRocmVzaG9sZCB0byBoYWxmIHRoZSBm aWZvIHNpemUsIGFjdHVhbCBzaXplPXNpemUqMTYgKi8KKwlmaWZvX3J0aHJlc2hvbGQgPSAoKGZp Zm9fc2l6ZSkgKiA4KSAmIEJJVF9NQVNLXzE2OworCVNFVF9NQ19GSUZPX1JUSFJFU0hPTEQoa21i LCBjdHJsX25vLCB2Y2hhbm5lbF9pZCwgZmlmb19ydGhyZXNob2xkKTsKKworCS8qIEVuYWJsZSB0 aGUgTUMgRklGTyBjaGFubmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFZpcnR1YWwgQ2hhbm5lbCAq LworCWttYl9zZXRfYml0X21pcGkoa21iLCBNSVBJX1RYbV9IU19NQ19GSUZPX0NUUkxfRU4oY3Ry bF9ubyksCisJCQkgdmNoYW5uZWxfaWQpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX3R4X2N0cmxf Y2ZnKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwgdTggZmdfaWQsCisJCQkgICAgIHN0cnVj dCBtaXBpX2N0cmxfY2ZnICpjdHJsX2NmZykKK3sKKwl1MzIgc3luY19jZmcgPSAwLCBjdHJsID0g MCwgZmdfZW47CisJdTMyIGN0cmxfbm8gPSBNSVBJX0NUUkw2OworCisJLyogTUlQSV9UWF9IU19T WU5DX0NGRyAqLworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcubGluZV9zeW5jX3BrdF9lbikK KwkJc3luY19jZmcgfD0gTElORV9TWU5DX1BLVF9FTkFCTEU7CisJaWYgKGN0cmxfY2ZnLT50eF9j dHJsX2NmZy5mcmFtZV9jb3VudGVyX2FjdGl2ZSkKKwkJc3luY19jZmcgfD0gRlJBTUVfQ09VTlRF Ul9BQ1RJVkU7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy5saW5lX2NvdW50ZXJfYWN0aXZl KQorCQlzeW5jX2NmZyB8PSBMSU5FX0NPVU5URVJfQUNUSVZFOworCWlmIChjdHJsX2NmZy0+dHhf Y3RybF9jZmcudHhfZHNpX2NmZy0+dl9ibGFua2luZykKKwkJc3luY19jZmcgfD0gRFNJX1ZfQkxB TktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oc2FfYmxhbmtp bmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IU0FfQkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9j dHJsX2NmZy50eF9kc2lfY2ZnLT5oYnBfYmxhbmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IQlBf QkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oZnBfYmxh bmtpbmcpCisJCXN5bmNfY2ZnIHw9IERTSV9IRlBfQkxBTktJTkc7CisJaWYgKGN0cmxfY2ZnLT50 eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5zeW5jX3B1bHNlX2V2ZW50bikKKwkJc3luY19jZmcgfD0g RFNJX1NZTkNfUFVMU0VfRVZFTlROOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNp X2NmZy0+bHBtX2ZpcnN0X3ZzYV9saW5lKQorCQlzeW5jX2NmZyB8PSBEU0lfTFBNX0ZJUlNUX1ZT QV9MSU5FOworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfZHNpX2NmZy0+bHBtX2xhc3Rf dmZwX2xpbmUpCisJCXN5bmNfY2ZnIHw9IERTSV9MUE1fTEFTVF9WRlBfTElORTsKKworCS8qIEVu YWJsZSBmcmFtZSBnZW5lcmF0b3IgKi8KKwlmZ19lbiA9IDEgPDwgZmdfaWQ7CisJc3luY19jZmcg fD0gRlJBTUVfR0VOX0VOKGZnX2VuKTsKKworCWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhf YWx3YXlzX3VzZV9oYWN0KQorCQlzeW5jX2NmZyB8PSBBTFdBWVNfVVNFX0hBQ1QoZmdfZW4pOwor CWlmIChjdHJsX2NmZy0+dHhfY3RybF9jZmcudHhfaGFjdF93YWl0X3N0b3ApCisJCXN5bmNfY2Zn IHw9IEhBQ1RfV0FJVF9TVE9QKGZnX2VuKTsKKworCWRybV9kYmcoJmttYi0+ZHJtLCAic3luY19j Zmc9JWQgZmdfZW49JWRcbiIsIHN5bmNfY2ZnLCBmZ19lbik7CisKKwkvKiBNSVBJX1RYX0hTX0NU UkwgKi8KKworCS8qIHR5cGU6RFNJLCBzb3VyY2U6TENEICovCisJY3RybCA9IEhTX0NUUkxfRU4g fCBUWF9TT1VSQ0U7CisJY3RybCB8PSBMQ0RfVkMoZmdfaWQpOworCWN0cmwgfD0gQUNUSVZFX0xB TkVTKGN0cmxfY2ZnLT5hY3RpdmVfbGFuZXMgLSAxKTsKKwlpZiAoY3RybF9jZmctPnR4X2N0cmxf Y2ZnLnR4X2RzaV9jZmctPmVvdHBfZW4pCisJCWN0cmwgfD0gRFNJX0VPVFBfRU47CisJaWYgKGN0 cmxfY2ZnLT50eF9jdHJsX2NmZy50eF9kc2lfY2ZnLT5oZnBfYmxhbmtfZW4pCisJCWN0cmwgfD0g RFNJX0NNRF9IRlBfRU47CisKKwkvKjY3IG5zIHN0b3AgdGltZSAqLworCWN0cmwgfD0gSFNFWElU X0NOVCgweDQzKTsKKworCWttYl93cml0ZV9taXBpKGttYiwgTUlQSV9UWG1fSFNfU1lOQ19DRkco Y3RybF9ubyksIHN5bmNfY2ZnKTsKKwlrbWJfd3JpdGVfbWlwaShrbWIsIE1JUElfVFhtX0hTX0NU UkwoY3RybF9ubyksIGN0cmwpOworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfaW5pdF9jbnRybChz dHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsCisJCQkgICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2Nm ZyAqY3RybF9jZmcpCit7CisJdTMyIHJldCA9IDA7CisJdTggYWN0aXZlX3ZjaGFubmVscyA9IDA7 CisJdTggZnJhbWVfaWQsIHNlY3Q7CisJdTMyIGJpdHNfcGVyX3BjbGsgPSAwOworCXUzMiB3b3Jk X2NvdW50ID0gMDsKKwlzdHJ1Y3QgbWlwaV90eF9mcmFtZV9jZmcgKmZyYW1lOworCisJLyogVGhp cyBpcyB0aGUgb3JkZXIgdG8gaW5pdGlhbGl6ZSBNSVBJIFRYOgorCSAqIDEuIHNldCBmcmFtZSBz ZWN0aW9uIHBhcmFtZXRlcnMKKwkgKiAyLiBzZXQgZnJhbWUgc3BlY2lmaWMgcGFyYW1ldGVycwor CSAqIDMuIGNvbm5lY3QgbGNkIHRvIG1pcGkKKwkgKiA0LiBtdWx0aSBjaGFubmVsIGZpZm8gY2Zn CisJICogNS4gc2V0IG1pcGl0eGNjdHJsY2ZnCisJICovCisKKwlmb3IgKGZyYW1lX2lkID0gMDsg ZnJhbWVfaWQgPCA0OyBmcmFtZV9pZCsrKSB7CisJCWZyYW1lID0gY3RybF9jZmctPnR4X2N0cmxf Y2ZnLmZyYW1lc1tmcmFtZV9pZF07CisKKwkJLyogRmluZCB2YWxpZCBmcmFtZSwgYXNzdW1lIG9u bHkgb25lIHZhbGlkIGZyYW1lICovCisJCWlmICghZnJhbWUpCisJCQljb250aW51ZTsKKworCQkv KiBGcmFtZSBTZWN0aW9uIGNvbmZpZ3VyYXRpb24gKi8KKwkJLyogVE9ETyAtIGFzc3VtZSB0aGVy ZSBpcyBvbmx5IG9uZSB2YWxpZCBzZWN0aW9uIGluIGEgZnJhbWUsCisJCSAqIHNvIGJpdHNfcGVy X3BjbGsgYW5kIHdvcmRfY291bnQgYXJlIG9ubHkgc2V0IG9uY2UKKwkJICovCisJCWZvciAoc2Vj dCA9IDA7IHNlY3QgPCBNSVBJX0NUUkxfVklSVFVBTF9DSEFOTkVMUzsgc2VjdCsrKSB7CisJCQlp ZiAoIWZyYW1lLT5zZWN0aW9uc1tzZWN0XSkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gbWlw aV90eF9mZ19zZWN0aW9uX2NmZyhrbWIsIGZyYW1lX2lkLCBzZWN0LAorCQkJCQkJICAgICBmcmFt ZS0+c2VjdGlvbnNbc2VjdF0sCisJCQkJCQkgICAgICZiaXRzX3Blcl9wY2xrLAorCQkJCQkJICAg ICAmd29yZF9jb3VudCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQkv KiBTZXQgZnJhbWUgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCQltaXBpX3R4X2ZnX2NmZyhrbWIs IGZyYW1lX2lkLCBjdHJsX2NmZy0+YWN0aXZlX2xhbmVzLAorCQkJICAgICAgIGJpdHNfcGVyX3Bj bGssIHdvcmRfY291bnQsCisJCQkgICAgICAgY3RybF9jZmctPmxhbmVfcmF0ZV9tYnBzLCBmcmFt ZSk7CisKKwkJYWN0aXZlX3ZjaGFubmVscysrOworCisJCS8qIFN0b3AgaXRlcmF0aW5nIGFzIG9u bHkgb25lIHZpcnR1YWwgY2hhbm5lbAorCQkgKiBzaGFsbCBiZSB1c2VkIGZvciBMQ0QgY29ubmVj dGlvbgorCQkgKi8KKwkJYnJlYWs7CisJfQorCisJaWYgKGFjdGl2ZV92Y2hhbm5lbHMgPT0gMCkK KwkJcmV0dXJuIC1FSU5WQUw7CisJLyogTXVsdGktQ2hhbm5lbCBGSUZPIENvbmZpZ3VyYXRpb24g Ki8KKwltaXBpX3R4X211bHRpY2hhbm5lbF9maWZvX2NmZyhrbWIsIGN0cmxfY2ZnLT5hY3RpdmVf bGFuZXMsIGZyYW1lX2lkKTsKKworCS8qIEZyYW1lIEdlbmVyYXRvciBFbmFibGUgKi8KKwltaXBp X3R4X2N0cmxfY2ZnKGttYiwgZnJhbWVfaWQsIGN0cmxfY2ZnKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIHRlc3RfbW9kZV9zZW5kKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmtt YiwgdTMyIGRwaHlfbm8sCisJCQkgICB1MzIgdGVzdF9jb2RlLCB1MzIgdGVzdF9kYXRhKQorewor CS8qIFN0ZXBzIHRvIHNlbmQgdGVzdCBjb2RlOgorCSAqIC0gc2V0IHRlc3RjbGsgSElHSAorCSAq IC0gc2V0IHRlc3RkaW4gd2l0aCB0ZXN0IGNvZGUKKwkgKiAtIHNldCB0ZXN0ZW4gSElHSAorCSAq IC0gc2V0IHRlc3RjbGsgTE9XCisJICogLSBzZXQgdGVzdGVuIExPVworCSAqLworCisJLyogU2V0 IHRlc3RjbGsgaGlnaCAqLworCVNFVF9EUEhZX1RFU1RfQ1RSTDFfQ0xLKGttYiwgZHBoeV9ubyk7 CisKKwkvKiBTZXQgdGVzdGRpbiAqLworCVNFVF9URVNUX0RJTjBfMyhrbWIsIGRwaHlfbm8sIHRl c3RfY29kZSk7CisKKwkvKiBTZXQgdGVzdGVuIGhpZ2ggKi8KKwlTRVRfRFBIWV9URVNUX0NUUkwx X0VOKGttYiwgZHBoeV9ubyk7CisKKwkvKiBTZXQgdGVzdGNsayBsb3cgKi8KKwlDTFJfRFBIWV9U RVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCisJLyogU2V0IHRlc3RlbiBsb3cgKi8KKwlD TFJfRFBIWV9URVNUX0NUUkwxX0VOKGttYiwgZHBoeV9ubyk7CisKKwlpZiAodGVzdF9jb2RlKSB7 CisJCS8qICBTdGVwcyB0byBzZW5kIHRlc3QgZGF0YToKKwkJICogLSBzZXQgdGVzdGVuIExPVwor CQkgKiAtIHNldCB0ZXN0Y2xrIExPVworCQkgKiAtIHNldCB0ZXN0ZGluIHdpdGggZGF0YQorCQkg KiAtIHNldCB0ZXN0Y2xrIEhJR0gKKwkJICovCisKKwkJLyogU2V0IHRlc3RlbiBsb3cgKi8KKwkJ Q0xSX0RQSFlfVEVTVF9DVFJMMV9FTihrbWIsIGRwaHlfbm8pOworCisJCS8qIFNldCB0ZXN0Y2xr IGxvdyAqLworCQlDTFJfRFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCisJCS8q IFNldCBkYXRhIGluIHRlc3RkaW4gKi8KKwkJa21iX3dyaXRlX21pcGkoa21iLAorCQkJICAgICAg IERQSFlfVEVTVF9ESU4wXzMgKyAoKGRwaHlfbm8gLyAweDQpICogMHg0KSwKKwkJCSAgICAgICB0 ZXN0X2RhdGEgPDwgKChkcGh5X25vICUgNCkgKiA4KSk7CisKKwkJLyogU2V0IHRlc3RjbGsgaGln aCAqLworCQlTRVRfRFBIWV9URVNUX0NUUkwxX0NMSyhrbWIsIGRwaHlfbm8pOworCX0KK30KKwor c3RhdGljIGlubGluZSB2b2lkCisJc2V0X3Rlc3RfbW9kZV9zcmNfb3NjX2ZyZXFfdGFyZ2V0X2xv d19iaXRzKHN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiwKKwkJCQkJCSAgIHUzMiBkcGh5X25v LAorCQkJCQkJICAgdTMyIGZyZXEpCit7CisJLyogVHlwaWNhbCByaXNlL2ZhbGwgdGltZT0xNjYs IHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2ssCisJICogc3Jfb3NjX2ZyZXFfdGFyZ2V0Wzc6MF0K KwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9TTEVXX1JBVEVf RERMX0NZQ0xFUywKKwkJICAgICAgIChmcmVxICYgMHg3ZikpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQKKwlzZXRfdGVzdF9tb2RlX3NyY19vc2NfZnJlcV90YXJnZXRfaGlfYml0cyhzdHJ1Y3Qg a21iX2RybV9wcml2YXRlICprbWIsCisJCQkJCQkgIHUzMiBkcGh5X25vLAorCQkJCQkJICB1MzIg ZnJlcSkKK3sKKwl1MzIgZGF0YTsKKworCS8qIEZsYWcgdGhpcyBhcyBoaWdoIG5pYmJsZSAqLwor CWRhdGEgPSAoKGZyZXEgPj4gNikgJiAweDFmKSB8ICgxIDw8IDcpOworCisJLyogVHlwaWNhbCBy aXNlL2ZhbGwgdGltZT0xNjYsIHJlZmVyIFRhYmxlIDEyMDcgZGF0YWJvb2ssCisJICogc3Jfb3Nj X2ZyZXFfdGFyZ2V0WzExOjddCisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBU RVNUX0NPREVfU0xFV19SQVRFX0RETF9DWUNMRVMsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBt aXBpX3R4X2dldF92Y29fcGFyYW1zKHN0cnVjdCB2Y29fcGFyYW1zICp2Y28pCit7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2Y29fdGFibGUpOyBpKyspIHsKKwkJaWYg KHZjby0+ZnJlcSA8IHZjb190YWJsZVtpXS5mcmVxKSB7CisJCQkqdmNvID0gdmNvX3RhYmxlW2ld OworCQkJcmV0dXJuOworCQl9CisJfQorCisJV0FSTl9PTkNFKDEsICJJbnZhbGlkIHZjbyBmcmVx ID0gJXUgZm9yIFBMTCBzZXR1cFxuIiwgdmNvLT5mcmVxKTsKK30KKworc3RhdGljIHZvaWQgbWlw aV90eF9wbGxfc2V0dXAoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywK KwkJCSAgICAgIHUzMiByZWZfY2xrX21oeiwgdTMyIHRhcmdldF9mcmVxX21oeikKK3sKKwl1MzIg YmVzdF9uID0gMCwgYmVzdF9tID0gMDsKKwl1MzIgbiA9IDAsIG0gPSAwLCBkaXYgPSAwLCBkZWx0 YSwgZnJlcSA9IDAsIHRfZnJlcTsKKwl1MzIgYmVzdF9mcmVxX2RlbHRhID0gMzAwMDsKKworCS8q IHBsbF9yZWZfY2xrOiAtIHZhbGlkIHJhbmdlOiAyfjY0IE1IejsgVHlwaWNhbGx5IDI0IE1Iegor CSAqIEZ2Y286IC0gdmFsaWQgcmFuZ2U6IDMyMH4xMjUwIE1IeiAoR2VuMyBELVBIWSkKKwkgKiBG b3V0OiAtIHZhbGlkIHJhbmdlOiA0MH4xMjUwIE1IeiAoR2VuMyBELVBIWSkKKwkgKiBuOiAtIHZh bGlkIHJhbmdlIFswIDE1XQorCSAqIE46IC0gTiA9IG4gKyAxCisJICogICAgICAtdmFsaWQgcmFu Z2U6IFsxIDE2XQorCSAqICAgICAgLWNvbmRpdGlvbnM6IC0gKHBsbF9yZWZfY2xrIC8gTikgPj0g MiBNSHoKKwkgKiAgICAgICAgICAgICAgLShwbGxfcmVmX2NsayAvIE4pIDw9IDggTUh6CisJICog bTogdmFsaWQgcmFuZ2UgWzYyIDYyM10KKwkgKiBNOiAtIE0gPSBtICsgMgorCSAqICAgICAgLXZh bGlkIHJhbmdlIFs2NCA2MjVdCisJICogICAgICAtRnZjbyA9IChNL04pICogcGxsX3JlZl9jbGsK KwkgKi8KKwlzdHJ1Y3QgdmNvX3BhcmFtcyB2Y29fcCA9IHsKKwkJLnJhbmdlID0gMCwKKwkJLmRp dmlkZXIgPSAxLAorCX07CisKKwl2Y29fcC5mcmVxID0gdGFyZ2V0X2ZyZXFfbWh6OworCW1pcGlf dHhfZ2V0X3Zjb19wYXJhbXMoJnZjb19wKTsKKworCS8qIFNlYXJjaCBwbGwgbiBwYXJhbWV0ZXIg Ki8KKwlmb3IgKG4gPSBQTExfTl9NSU47IG4gPD0gUExMX05fTUFYOyBuKyspIHsKKwkJLyogQ2Fs Y3VsYXRlIHRoZSBwbGwgaW5wdXQgZnJlcXVlbmN5IGRpdmlzaW9uIHJhdGlvCisJCSAqIG11bHRp cGx5IGJ5IDEwMDAgZm9yIHByZWNpc2lvbiAtCisJCSAqIG5vIGZsb2F0aW5nIHBvaW50LCBhZGQg biBmb3Igcm91bmRpbmcKKwkJICovCisJCWRpdiA9ICgocmVmX2Nsa19taHogKiAxMDAwKSArIG4p IC8gKG4gKyAxKTsKKworCQkvKiBGb3VuZCBhIHZhbGlkIG4gcGFyYW1ldGVyICovCisJCWlmICgo ZGl2IDwgMjAwMCB8fCBkaXYgPiA4MDAwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNlYXJjaCBw bGwgbSBwYXJhbWV0ZXIgKi8KKwkJZm9yIChtID0gUExMX01fTUlOOyBtIDw9IFBMTF9NX01BWDsg bSsrKSB7CisJCQkvKiBDYWxjdWxhdGUgdGhlIEZ2Y28oRFBIWSBQTEwgb3V0cHV0IGZyZXF1ZW5j eSkKKwkJCSAqIHVzaW5nIHRoZSBjdXJyZW50IG4sbSBwYXJhbXMKKwkJCSAqLworCQkJZnJlcSA9 IGRpdiAqIChtICsgMik7CisJCQlmcmVxIC89IDEwMDA7CisKKwkJCS8qIFRyaW0gdGhlIHBvdGVu dGlhbCBwbGwgZnJlcSB0byBtYXggc3VwcG9ydGVkICovCisJCQlpZiAoZnJlcSA+IFBMTF9GVkNP X01BWCkKKwkJCQljb250aW51ZTsKKworCQkJZGVsdGEgPSBhYnMoZnJlcSAtIHRhcmdldF9mcmVx X21oeik7CisKKwkJCS8qIFNlbGVjdCB0aGUgYmVzdCAoY2xvc2VzdCB0byB0YXJnZXQgcGxsIGZy ZXEpCisJCQkgKiBuLG0gcGFyYW1ldGVycyBzbyBmYXIKKwkJCSAqLworCQkJaWYgKGRlbHRhIDwg YmVzdF9mcmVxX2RlbHRhKSB7CisJCQkJYmVzdF9uID0gbjsKKwkJCQliZXN0X20gPSBtOworCQkJ CWJlc3RfZnJlcV9kZWx0YSA9IGRlbHRhOworCQkJfQorCQl9CisJfQorCisJLyogUHJvZ3JhbSB2 Y29fY250cmwgcGFyYW1ldGVyCisJICogUExMX1ZDT19Db250cm9sWzU6MF0gPSBwbGxfdmNvX2Nu dHJsX292ciwKKwkgKiBQTExfVkNPX0NvbnRyb2xbNl0gICA9IHBsbF92Y29fY250cmxfb3ZyX2Vu CisJICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX1ZDT19D VFJMLCAodmNvX3AucmFuZ2UKKwkJCQkJCQkJfCAoMSA8PCA2KSkpOworCisJLyogUHJvZ3JhbSBt LCBuIHBsbCBwYXJhbWV0ZXJzICovCisJZHJtX2RiZygma21iLT5kcm0sICJtID0gJWQgbiA9ICVk XG4iLCBiZXN0X20sIGJlc3Rfbik7CisKKwkvKiBQTExfSW5wdXRfRGl2aWRlcl9SYXRpb1szOjBd ID0gcGxsX25fb3ZyICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVf UExMX0lOUFVUX0RJVklERVIsCisJCSAgICAgICAoYmVzdF9uICYgMHgwZikpOworCisJLyogbSAt IGxvdyBuaWJibGUgUExMX0xvb3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21fb3ZyWzQ6 MF0KKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfRkVF REJBQ0tfRElWSURFUiwKKwkJICAgICAgIChiZXN0X20gJiAweDFmKSk7CisKKwkvKiBtIC0gaGln aCBuaWJibGUgUExMX0xvb3BfRGl2aWRlcl9SYXRpb1s0OjBdCisJICogcGxsX21fb3ZyWzk6NV0K KwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9QTExfRkVFREJB Q0tfRElWSURFUiwKKwkJICAgICAgICgoYmVzdF9tID4+IDUpICYgMHgxZikgfCBQTExfRkVFREJB Q0tfRElWSURFUl9ISUdIKTsKKworCS8qIEVuYWJsZSBvdmVyd3JpdGUgb2YgbixtIHBhcmFtZXRl cnMgOnBsbF9uX292cl9lbiwgcGxsX21fb3ZyX2VuICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBk cGh5X25vLCBURVNUX0NPREVfUExMX09VVFBVVF9DTEtfU0VMLAorCQkgICAgICAgKFBMTF9OX09W Ul9FTiB8IFBMTF9NX09WUl9FTikpOworCisJLyogUHJvZ3JhbSBDaGFyZ2UtUHVtcCBwYXJhbWV0 ZXJzICovCisKKwkvKiBwbGxfcHJvcF9jbnRybC1maXhlZCB2YWx1ZXMgZm9yIHByb3BfY250cmwg ZnJvbSBEUEhZIGRvYyAqLworCXRfZnJlcSA9IHRhcmdldF9mcmVxX21oeiAqIHZjb19wLmRpdmlk ZXI7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLAorCQkgICAgICAgVEVTVF9DT0RFX1BM TF9QUk9QT1JUSU9OQUxfQ0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAgICgodF9mcmVxID4gMTE1 MCkgPyAweDBDIDogMHgwQikpOworCisJLyogcGxsX2ludF9jbnRybC1maXhlZCB2YWx1ZSBmb3Ig aW50X2NudHJsIGZyb20gRFBIWSBkb2MgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8s IFRFU1RfQ09ERV9QTExfSU5URUdSQUxfQ0hBUkdFX1BVTVBfQ1RSTCwKKwkJICAgICAgIDB4MDAp OworCisJLyogcGxsX2dtcF9jbnRybC1maXhlZCB2YWx1ZSBmb3IgZ21wX2NudHJsIGZyb20gRFBI WSBkb2NpICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCBURVNUX0NPREVfUExMX0dN UF9DVFJMLCAweDEwKTsKKworCS8qIHBsbF9jcGJpYXNfY250cmwtZml4ZWQgdmFsdWUgZm9yIGNw Ymlhc19jbnRybCBmcm9tIERQSFkgZG9jICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25v LCBURVNUX0NPREVfUExMX0NIQVJHRV9QVU1QX0JJQVMsIDB4MTApOworCisJLyogcGxsX3RoMSAt TG9jayBEZXRlY3RvciBQaGFzZSBlcnJvciB0aHJlc2hvbGQsCisJICogZG9jdW1lbnQgZ2l2ZXMg Zml4ZWQgdmFsdWUKKwkgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09E RV9QTExfUEhBU0VfRVJSX0NUUkwsIDB4MDIpOworCisJLyogUExMIExvY2sgQ29uZmlndXJhdGlv biAqLworCisJLyogcGxsX3RoMiAtIExvY2sgRmlsdGVyIGxlbmd0aCwgZG9jdW1lbnQgZ2l2ZXMg Zml4ZWQgdmFsdWUgKi8KKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9Q TExfTE9DS19GSUxURVIsIDB4NjApOworCisJLyogcGxsX3RoMy0gUExMIFVubG9ja2luZyBmaWx0 ZXIsIGRvY3VtZW50IGdpdmVzIGZpeGVkIHZhbHVlICovCisJdGVzdF9tb2RlX3NlbmQoa21iLCBk cGh5X25vLCBURVNUX0NPREVfUExMX1VOTE9DS19GSUxURVIsIDB4MDMpOworCisJLyogcGxsX2xv Y2tfc2VsLVBMTCBMb2NrIERldGVjdG9yIFNlbGVjdGlvbiwKKwkgKiBkb2N1bWVudCBnaXZlcyBm aXhlZCB2YWx1ZQorCSAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgVEVTVF9DT0RF X1BMTF9MT0NLX0RFVEVDVE9SLCAweDAyKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3NsZXdyYXRl X2d0XzE1MDAoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubykKK3sKKwl1 MzIgdGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMDsKKwkvKiBCeXBhc3Mgc2xldyByYXRlIGNh bGlicmF0aW9uIGFsZ29yaXRobQorCSAqIGJpdHNbMTowfSBzcmNhbF9lbl9vdnJfZW4sIHNyY2Fs X2VuX292cgorCSAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfT1ZFUlJJREVf Q1RSTDsKKwl0ZXN0X2RhdGEgPSAweDAyOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywg dGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJLyogRGlzYWJsZSBzbGV3IHJhdGUgY2FsaWJyYXRp b24gKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RETF9MT09QX0NUUkw7CisJ dGVzdF9kYXRhID0gMHgwMDsKKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29k ZSwgdGVzdF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3NsZXdyYXRlX2d0XzEwMDAoc3Ry dWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubykKK3sKKwl1MzIgdGVzdF9jb2Rl ID0gMCwgdGVzdF9kYXRhID0gMDsKKworCS8qIEJpdFJhdGU6ID4gMSBHYnBzICYmIDw9IDEuNSBH YnBzOiAtIHNsZXcgcmF0ZSBjb250cm9sIE9OCisJICogdHlwaWNhbCByaXNlL2ZhbGwgdGltZXM6 IDE2NiBwcworCSAqLworCisJLyogRG8gbm90IGJ5cGFzcyBzbGV3IHJhdGUgY2FsaWJyYXRpb24g YWxnb3JpdGhtCisJICogYml0c1sxOjB9PXNyY2FsX2VuX292cl9lbiwgc3JjYWxfZW5fb3ZyLCBi aXRbNl09c3JfcmFuZ2UKKwkgKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX09W RVJSSURFX0NUUkw7CisJdGVzdF9kYXRhID0gKDB4MDMgfCAoMSA8PCA2KSk7CisJdGVzdF9tb2Rl X3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBFbmFibGUg c2xldyByYXRlIGNhbGlicmF0aW9uICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFU RV9ERExfTE9PUF9DVFJMOworCXRlc3RfZGF0YSA9IDB4MDE7CisJdGVzdF9tb2RlX3NlbmQoa21i LCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7CisKKwkvKiBTZXQgc3Jfb3NjX2ZyZXFf dGFyZ2V0WzY6MF0gbG93IG5pYmJsZQorCSAqIHR5cGljYWwgcmlzZS9mYWxsIHRpbWU9MTY2LCBy ZWZlciBUYWJsZSAxMjA3IGRhdGFib29rCisJICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1NM RVdfUkFURV9ERExfQ1lDTEVTOworCXRlc3RfZGF0YSA9ICgweDcyZiAmIDB4N2YpOworCXRlc3Rf bW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJLyogU2V0 IHNyX29zY19mcmVxX3RhcmdldFsxMTo3XSBoaWdoIG5pYmJsZQorCSAqIFR5cGljYWwgcmlzZS9m YWxsIHRpbWU9MTY2LCByZWZlciBUYWJsZSAxMjA3IGRhdGFib29rCisJICovCisJdGVzdF9jb2Rl ID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfQ1lDTEVTOworCXRlc3RfZGF0YSA9ICgoMHg3MmYg Pj4gNikgJiAweDFmKSB8ICgxIDw8IDcpOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywg dGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2xld3JhdGVfbHRf MTAwMChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIHUzMiBkcGh5X25vKQoreworCXUzMiB0 ZXN0X2NvZGUgPSAwLCB0ZXN0X2RhdGEgPSAwOworCisJLyogbGFuZV9yYXRlX21icHMgPD0gMTAw MCBNYnBzCisJICogQml0UmF0ZTogIDw9IDEgR2JwczoKKwkgKiAtIHNsZXcgcmF0ZSBjb250cm9s IE9OCisJICogLSB0eXBpY2FsIHJpc2UvZmFsbCB0aW1lczogMjI1IHBzCisJICovCisKKwkvKiBE byBub3QgYnlwYXNzIHNsZXcgcmF0ZSBjYWxpYnJhdGlvbiBhbGdvcml0aG0gKi8KKwl0ZXN0X2Nv ZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX09WRVJSSURFX0NUUkw7CisJdGVzdF9kYXRhID0gKDB4 MDMgfCAoMSA8PCA2KSk7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUs IHRlc3RfZGF0YSk7CisKKwkvKiBFbmFibGUgc2xldyByYXRlIGNhbGlicmF0aW9uICovCisJdGVz dF9jb2RlID0gVEVTVF9DT0RFX1NMRVdfUkFURV9ERExfTE9PUF9DVFJMOworCXRlc3RfZGF0YSA9 IDB4MDE7CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0 YSk7CisKKwkvKiBUeXBpY2FsIHJpc2UvZmFsbCB0aW1lPTI1NSwgcmVmZXIgVGFibGUgMTIwNyBk YXRhYm9vayAqLworCXRlc3RfY29kZSA9IFRFU1RfQ09ERV9TTEVXX1JBVEVfRERMX0NZQ0xFUzsK Kwl0ZXN0X2RhdGEgPSAoMHg1MjMgJiAweDdmKTsKKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlf bm8sIHRlc3RfY29kZSwgdGVzdF9kYXRhKTsKKworCS8qIFNldCBzcl9vc2NfZnJlcV90YXJnZXRb MTE6N10gaGlnaCBuaWJibGUgKi8KKwl0ZXN0X2NvZGUgPSBURVNUX0NPREVfU0xFV19SQVRFX0RE TF9DWUNMRVM7CisJdGVzdF9kYXRhID0gKCgweDUyMyA+PiA2KSAmIDB4MWYpIHwgKDEgPDwgNyk7 CisJdGVzdF9tb2RlX3NlbmQoa21iLCBkcGh5X25vLCB0ZXN0X2NvZGUsIHRlc3RfZGF0YSk7Cit9 CisKK3N0YXRpYyB2b2lkIHNldHVwX3BsbChzdHJ1Y3Qga21iX2RybV9wcml2YXRlICprbWIsIHUz MiBkcGh5X25vLAorCQkgICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2NmZyAqY2ZnKQoreworCXUzMiB0 ZXN0X2NvZGUgPSAwLCB0ZXN0X2RhdGEgPSAwOworCisJLyogU2V0IFBMTCByZWd1bGF0b3IgaW4g YnlwYXNzICovCisJdGVzdF9jb2RlID0gVEVTVF9DT0RFX1BMTF9BTkFMT0dfUFJPRzsKKwl0ZXN0 X2RhdGEgPSAweDAxOworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0 ZXN0X2RhdGEpOworCisJLyogUExMIFBhcmFtZXRlcnMgU2V0dXAgKi8KKwltaXBpX3R4X3BsbF9z ZXR1cChrbWIsIGRwaHlfbm8sIGNmZy0+cmVmX2Nsa19raHogLyAxMDAwLAorCQkJICBjZmctPmxh bmVfcmF0ZV9tYnBzIC8gMik7CisKKwkvKiBTZXQgY2xrc2VsICovCisJa21iX3dyaXRlX2JpdHNf bWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMSwgUExMX0NMS1NFTF8wLCAyLCAweDAxKTsKKworCS8q IFNldCBwbGxfc2hhZG93X2NvbnRyb2wgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGttYiwgRFBIWV9J TklUX0NUUkwxLCBQTExfU0hBRE9XX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBzZXRfbGFuZV9k YXRhX3JhdGUoc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubywKKwkJCSAg ICAgICBzdHJ1Y3QgbWlwaV9jdHJsX2NmZyAqY2ZnKQoreworCXUzMiBpLCB0ZXN0X2NvZGUgPSAw LCB0ZXN0X2RhdGEgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1JUElfRFBIWV9ERUZBVUxUX0JJ VF9SQVRFUzsgaSsrKSB7CisJCWlmIChtaXBpX2hzX2ZyZXFfcmFuZ2VbaV0uZGVmYXVsdF9iaXRf cmF0ZV9tYnBzIDwKKwkJICAgIGNmZy0+bGFuZV9yYXRlX21icHMpCisJCQljb250aW51ZTsKKwor CQkvKiBTZW5kIHRoZSB0ZXN0IGNvZGUgYW5kIGRhdGEgKi8KKwkJLyogYml0WzY6MF0gPSBoc2Zy ZXFyYW5nZV9vdnIgYml0WzddID0gaHNmcmVxcmFuZ2Vfb3ZyX2VuICovCisJCXRlc3RfY29kZSA9 IFRFU1RfQ09ERV9IU19GUkVRX1JBTkdFX0NGRzsKKwkJdGVzdF9kYXRhID0gKG1pcGlfaHNfZnJl cV9yYW5nZVtpXS5oc2ZyZXFyYW5nZV9jb2RlICYgMHg3ZikgfAorCQkgICAgKDEgPDwgNyk7CisJ CXRlc3RfbW9kZV9zZW5kKGttYiwgZHBoeV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCQli cmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwaHlfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qga21i X2RybV9wcml2YXRlICprbWIsCisJCQkgICAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZywg dTMyIGRwaHlfbm8sCisJCQkgICAgICAgaW50IGFjdGl2ZV9sYW5lcywgZW51bSBkcGh5X21vZGUg bW9kZSkKK3sKKwl1MzIgdGVzdF9jb2RlID0gMCwgdGVzdF9kYXRhID0gMCwgdmFsOworCisJLyog U2V0IEQtUEhZIGluIHNodXRkb3duIG1vZGUgKi8KKwkvKiBBc3NlcnQgUlNUWiBzaWduYWwgKi8K KwlDTFJfRFBIWV9JTklUX0NUUkwwKGttYiwgZHBoeV9ubywgUkVTRVRaKTsKKworCS8qIEFzc2Vy dCBTSFVURE9XTlogc2lnbmFsICovCisJQ0xSX0RQSFlfSU5JVF9DVFJMMChrbWIsIGRwaHlfbm8s IFNIVVRET1dOWik7CisJdmFsID0ga21iX3JlYWRfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMCk7 CisKKwkvKiBJbml0IEQtUEhZX24KKwkgKiBQdWxzZSB0ZXN0Y2xlYXIgc2lnbmFsIHRvIG1ha2Ug c3VyZSB0aGUgZC1waHkgY29uZmlndXJhdGlvbgorCSAqIHN0YXJ0cyBmcm9tIGEgY2xlYW4gYmFz ZQorCSAqLworCUNMUl9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25vKTsKKwluZGVsYXkoMTUp OworCVNFVF9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25vKTsKKwluZGVsYXkoMTUpOworCUNM Ul9EUEhZX1RFU1RfQ1RSTDAoa21iLCBkcGh5X25vKTsKKwluZGVsYXkoMTUpOworCisJLyogU2V0 IG1hc3Rlcm1hY3JvIGJpdCAtIE1hc3RlciBvciBzbGF2ZSBtb2RlICovCisJdGVzdF9jb2RlID0g VEVTVF9DT0RFX01VTFRJUExFX1BIWV9DVFJMOworCisJLyogRFBIWSBoYXMgaXRzIG93biBjbG9j ayBsYW5lIGVuYWJsZWQgKG1hc3RlcikgKi8KKwlpZiAobW9kZSA9PSBNSVBJX0RQSFlfTUFTVEVS KQorCQl0ZXN0X2RhdGEgPSAweDAxOworCWVsc2UKKwkJdGVzdF9kYXRhID0gMHgwMDsKKworCS8q IFNlbmQgdGhlIHRlc3QgY29kZSBhbmQgZGF0YSAqLworCXRlc3RfbW9kZV9zZW5kKGttYiwgZHBo eV9ubywgdGVzdF9jb2RlLCB0ZXN0X2RhdGEpOworCisJLyogU2V0IHRoZSBsYW5lIGRhdGEgcmF0 ZSAqLworCXNldF9sYW5lX2RhdGFfcmF0ZShrbWIsIGRwaHlfbm8sIGNmZyk7CisKKwkvKiBIaWdo LVNwZWVkIFR4IFNsZXcgUmF0ZSBDYWxpYnJhdGlvbgorCSAqIEJpdFJhdGU6ID4gMS41IEdicHMg JiYgPD0gMi41IEdicHM6IHNsZXcgcmF0ZSBjb250cm9sIE9GRgorCSAqLworCWlmIChjZmctPmxh bmVfcmF0ZV9tYnBzID4gMTUwMCkKKwkJc2V0X3NsZXdyYXRlX2d0XzE1MDAoa21iLCBkcGh5X25v KTsKKwllbHNlIGlmIChjZmctPmxhbmVfcmF0ZV9tYnBzID4gMTAwMCkKKwkJc2V0X3NsZXdyYXRl X2d0XzEwMDAoa21iLCBkcGh5X25vKTsKKwllbHNlCisJCXNldF9zbGV3cmF0ZV9sdF8xMDAwKGtt YiwgZHBoeV9ubyk7CisKKwkvKiBTZXQgY2ZnY2xrZnJlcXJhbmdlICovCisJdmFsID0gKCgoY2Zn LT5jZmdfY2xrX2toeiAvIDEwMDApIC0gMTcpICogNCkgJiAweDNmOworCVNFVF9EUEhZX0ZSRVFf Q1RSTDBfMyhrbWIsIGRwaHlfbm8sIHZhbCk7CisKKwkvKiBFbmFibGUgY29uZmlnIGNsayBmb3Ig dGhlIGNvcnJlc3BvbmRpbmcgZC1waHkgKi8KKwlrbWJfc2V0X2JpdF9taXBpKGttYiwgRFBIWV9D RkdfQ0xLX0VOLCBkcGh5X25vKTsKKworCS8qIFBMTCBzZXR1cCAqLworCWlmIChtb2RlID09IE1J UElfRFBIWV9NQVNURVIpCisJCXNldHVwX3BsbChrbWIsIGRwaHlfbm8sIGNmZyk7CisKKwkvKiBT ZW5kIE5PUk1BTCBPUEVSQVRJT04gdGVzdCBjb2RlICovCisJdGVzdF9jb2RlID0gMHgwOworCXRl c3RfZGF0YSA9IDB4MDsKKwl0ZXN0X21vZGVfc2VuZChrbWIsIGRwaHlfbm8sIHRlc3RfY29kZSwg dGVzdF9kYXRhKTsKKworCS8qIENvbmZpZ3VyZSBCQVNFRElSIGZvciBkYXRhIGxhbmVzCisJICog Tk9URTogYmFzZWRpciBvbmx5IGFwcGxpZXMgdG8gTEFORV8wIG9mIGVhY2ggRC1QSFkuCisJICog VGhlIG90aGVyIGxhbmVzIGtlZXAgdGhlaXIgZGlyZWN0aW9uIGJhc2VkIG9uIHRoZSBELVBIWSB0 eXBlLAorCSAqIGVpdGhlciBSeCBvciBUeC4KKwkgKiBiaXRzWzU6MF0gIC0gQmFzZURpcjogMSA9 IFJ4CisJICogYml0c1s5OjZdIC0gQmFzZURpcjogMCA9IFR4CisJICovCisJa21iX3dyaXRlX2Jp dHNfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMiwgMCwgOSwgMHgwM2YpOworCW5kZWxheSgxNSk7 CisKKwkvKiBFbmFibGUgQ0xPQ0sgTEFORQorCSAqIENsb2NrIGxhbmUgc2hvdWxkIGJlIGVuYWJs ZWQgcmVnYXJkbGVzcyBvZiB0aGUgZGlyZWN0aW9uCisJICogc2V0IGZvciB0aGUgRC1QSFkgKFJ4 L1R4KQorCSAqLworCWttYl9zZXRfYml0X21pcGkoa21iLCBEUEhZX0lOSVRfQ1RSTDIsIDEyICsg ZHBoeV9ubyk7CisKKwkvKiBFbmFibGUgREFUQSBMQU5FUyAqLworCWttYl93cml0ZV9iaXRzX21p cGkoa21iLCBEUEhZX0VOQUJMRSwgZHBoeV9ubyAqIDIsIDIsCisJCQkgICAgKCgxIDw8IGFjdGl2 ZV9sYW5lcykgLSAxKSk7CisKKwluZGVsYXkoMTUpOworCisJLyogVGFrZSBELVBIWSBvdXQgb2Yg c2h1dGRvd24gbW9kZSAqLworCS8qIERlYXNzZXJ0IFNIVVRET1dOWiBzaWduYWwgKi8KKwlTRVRf RFBIWV9JTklUX0NUUkwwKGttYiwgZHBoeV9ubywgU0hVVERPV05aKTsKKwluZGVsYXkoMTUpOwor CisJLyogRGVhc3NlcnQgUlNUWiBzaWduYWwgKi8KKwlTRVRfRFBIWV9JTklUX0NUUkwwKGttYiwg ZHBoeV9ubywgUkVTRVRaKTsKK30KKworc3RhdGljIHZvaWQgZHBoeV93YWl0X2ZzbShzdHJ1Y3Qg a21iX2RybV9wcml2YXRlICprbWIsIHUzMiBkcGh5X25vLAorCQkJICBlbnVtIGRwaHlfdHhfZnNt IGZzbV9zdGF0ZSkKK3sKKwllbnVtIGRwaHlfdHhfZnNtIHZhbCA9IERQSFlfVFhfUE9XRVJEV047 CisJaW50IGkgPSAwOworCWludCBzdGF0dXMgPSAxOworCisJZG8geworCQl0ZXN0X21vZGVfc2Vu ZChrbWIsIGRwaHlfbm8sIFRFU1RfQ09ERV9GU01fQ09OVFJPTCwgMHg4MCk7CisKKwkJdmFsID0g R0VUX1RFU1RfRE9VVDRfNyhrbWIsIGRwaHlfbm8pOworCQlpKys7CisJCWlmIChpID4gVElNRU9V VCkgeworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodmFsICE9IGZz bV9zdGF0ZSk7CisKKwlkcm1fZGJnKCZrbWItPmRybSwgIiVzOiBkcGh5ICVkIHZhbCA9ICV4Iiwg X19mdW5jX18sIGRwaHlfbm8sIHZhbCk7CisJZHJtX2RiZygma21iLT5kcm0sICIqIERQSFkgJWQg V0FJVF9GU00gJXMgKiIsCisJCWRwaHlfbm8sIHN0YXR1cyA/ICJTVUNDRVNTIiA6ICJGQUlMRUQi KTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9pbml0X2RvbmUoc3RydWN0IGttYl9kcm1fcHJpdmF0 ZSAqa21iLCB1MzIgZHBoeV9ubywKKwkJCSAgIHUzMiBhY3RpdmVfbGFuZXMpCit7CisJdTMyIHN0 b3BzdGF0ZWRhdGEgPSAwOworCXUzMiBkYXRhX2xhbmVzID0gKDEgPDwgYWN0aXZlX2xhbmVzKSAt IDE7CisJaW50IGkgPSAwLCB2YWw7CisJaW50IHN0YXR1cyA9IDE7CisKKwlkbyB7CisJCXZhbCA9 IGttYl9yZWFkX21pcGkoa21iLCBNSVBJX0RQSFlfU1RBVDRfNyk7CisJCXN0b3BzdGF0ZWRhdGEg PSBHRVRfU1RPUFNUQVRFX0RBVEEoa21iLCBkcGh5X25vKSAmIGRhdGFfbGFuZXM7CisKKwkJLyog VE9ETy1uZWVkIHRvIGFkZCBhIHRpbWUgb3V0IGFuZCByZXR1cm4gZmFpbHVyZSAqLworCQlpKys7 CisKKwkJaWYgKGkgPiBUSU1FT1VUKSB7CisJCQlzdGF0dXMgPSAwOworCQkJZHJtX2RiZygma21i LT5kcm0sCisJCQkJIiEgV0FJVF9JTklUX0RPTkU6IFRJTUlORyBPVVQhKGVycl9zdGF0PSVkKSIs CisJCQkJa21iX3JlYWRfbWlwaShrbWIsIE1JUElfRFBIWV9FUlJfU1RBVDZfNykpOworCQkJYnJl YWs7CisJCX0KKwl9IHdoaWxlIChzdG9wc3RhdGVkYXRhICE9IGRhdGFfbGFuZXMpOworCisJZHJt X2RiZygma21iLT5kcm0sICIqIERQSFkgJWQgSU5JVCAtICVzICoiLAorCQlkcGh5X25vLCBzdGF0 dXMgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfcGxsX2xv Y2soc3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iLCB1MzIgZHBoeV9ubykKK3sKKwlpbnQgaSA9 IDA7CisJaW50IHN0YXR1cyA9IDE7CisKKwlkbyB7CisJCS8qIFRPRE8tbmVlZCB0byBhZGQgYSB0 aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgKi8KKwkJaSsrOworCQlpZiAoaSA+IFRJTUVPVVQp IHsKKwkJCXN0YXR1cyA9IDA7CisJCQlkcm1fZGJnKCZrbWItPmRybSwgIiVzOiB0aW1pbmcgb3V0 IiwgX19mdW5jX18pOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghR0VUX1BMTF9MT0NLKGtt YiwgZHBoeV9ubykpOworCisJZHJtX2RiZygma21iLT5kcm0sICIqIFBMTCBMb2NrZWQgZm9yIERQ SFkgJWQgLSAlcyAqIiwKKwkJZHBoeV9ubywgc3RhdHVzID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIp OworfQorCitzdGF0aWMgdTMyIG1pcGlfdHhfaW5pdF9kcGh5KHN0cnVjdCBrbWJfZHJtX3ByaXZh dGUgKmttYiwKKwkJCSAgICAgc3RydWN0IG1pcGlfY3RybF9jZmcgKmNmZykKK3sKKwl1MzIgZHBo eV9ubyA9IE1JUElfRFBIWTY7CisKKwkvKiBNdWx0aXBsZSBELVBIWXMgbmVlZGVkICovCisJaWYg KGNmZy0+YWN0aXZlX2xhbmVzID4gTUlQSV9EUEhZX0RfTEFORVMpIHsKKwkJLyoKKwkJICpJbml0 aWFsaXphdGlvbiBmb3IgVHggYWdncmVnYXRpb24gbW9kZSBpcyBkb25lIGFjY29yZGluZyB0bwor CQkgKmEuIHN0YXJ0IGluaXQgUEhZMQorCQkgKmIuIHBvbGwgZm9yIFBIWTEgRlNNIHN0YXRlIExP Q0sKKwkJICogICBiMS4gcmVnIGFkZHIgMHgwM1szOjBdIC0gc3RhdGVfbWFpblszOjBdID09IDUg KExPQ0spCisJCSAqYy4gcG9sbCBmb3IgUEhZMSBjYWxpYnJhdGlvbnMgZG9uZSA6CisJCSAqICAg YzEuIHRlcm1pbmF0aW9uIGNhbGlicmF0aW9uIGxvd2VyIHNlY3Rpb246IGFkZHIgMHgyMls1XQor CQkgKiAgIC0gcmVzY2FsX2RvbmUKKwkJICogICBjMi4gc2xld3JhdGUgY2FsaWJyYXRpb24gKGlm IGRhdGEgcmF0ZSA8ID0gMTUwMCBNYnBzKToKKwkJICogICAgIGFkZHIgMHhBN1szOjJdIC0gc3Jj YWxfZG9uZSwgc3JfZmluaXNoZWQKKwkJICpkLiBzdGFydCBpbml0IFBIWTAKKwkJICplLiBwb2xs IGZvciBQSFkwIHN0b3BzdGF0ZQorCQkgKmYuIHBvbGwgZm9yIFBIWTEgc3RvcHN0YXRlCisJCSAq LworCQkvKiBQSFkgI04rMSAoJ3NsYXZlJykgKi8KKworCQlkcGh5X2luaXRfc2VxdWVuY2Uoa21i LCBjZmcsIGRwaHlfbm8gKyAxLAorCQkJCSAgIChjZmctPmFjdGl2ZV9sYW5lcyAtIE1JUElfRFBI WV9EX0xBTkVTKSwKKwkJCQkgICBNSVBJX0RQSFlfU0xBVkUpOworCQlkcGh5X3dhaXRfZnNtKGtt YiwgZHBoeV9ubyArIDEsIERQSFlfVFhfTE9DSyk7CisKKwkJLyogUEhZICNOIG1hc3RlciAqLwor CQlkcGh5X2luaXRfc2VxdWVuY2Uoa21iLCBjZmcsIGRwaHlfbm8sIE1JUElfRFBIWV9EX0xBTkVT LAorCQkJCSAgIE1JUElfRFBIWV9NQVNURVIpOworCisJCS8qIFdhaXQgZm9yIERQSFkgaW5pdCB0 byBjb21wbGV0ZSAqLworCQl3YWl0X2luaXRfZG9uZShrbWIsIGRwaHlfbm8sIE1JUElfRFBIWV9E X0xBTkVTKTsKKwkJd2FpdF9pbml0X2RvbmUoa21iLCBkcGh5X25vICsgMSwKKwkJCSAgICAgICBj ZmctPmFjdGl2ZV9sYW5lcyAtIE1JUElfRFBIWV9EX0xBTkVTKTsKKwkJd2FpdF9wbGxfbG9jayhr bWIsIGRwaHlfbm8pOworCQl3YWl0X3BsbF9sb2NrKGttYiwgZHBoeV9ubyArIDEpOworCQlkcGh5 X3dhaXRfZnNtKGttYiwgZHBoeV9ubywgRFBIWV9UWF9JRExFKTsKKwl9IGVsc2UgewkJLyogU2lu Z2xlIERQSFkgKi8KKwkJZHBoeV9pbml0X3NlcXVlbmNlKGttYiwgY2ZnLCBkcGh5X25vLCBjZmct PmFjdGl2ZV9sYW5lcywKKwkJCQkgICBNSVBJX0RQSFlfTUFTVEVSKTsKKwkJZHBoeV93YWl0X2Zz bShrbWIsIGRwaHlfbm8sIERQSFlfVFhfSURMRSk7CisJCXdhaXRfaW5pdF9kb25lKGttYiwgZHBo eV9ubywgY2ZnLT5hY3RpdmVfbGFuZXMpOworCQl3YWl0X3BsbF9sb2NrKGttYiwgZHBoeV9ubyk7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbm5lY3RfbGNkX3RvX21pcGko c3RydWN0IGttYl9kcm1fcHJpdmF0ZSAqa21iKQoreworCS8qIERJU0FCTEUgTUlQSS0+Q0lGIENP Tk5FQ1RJT04gKi8KKwlrbWJfd3JpdGVfbXNzY2FtKGttYiwgTVNTX01JUElfQ0lGX0NGRywgMCk7 CisKKwkvKiBFTkFCTEUgTENELT5NSVBJIENPTk5FQ1RJT04gKi8KKwlrbWJfd3JpdGVfbXNzY2Ft KGttYiwgTVNTX0xDRF9NSVBJX0NGRywgMSk7CisKKwkvKiBESVNBQkxFIExDRC0+Q0lGIExPT1BC QUNLICovCisJa21iX3dyaXRlX21zc2NhbShrbWIsIE1TU19MT09QQkFDS19DRkcsIDApOworfQor CitpbnQga21iX2RzaV9od19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBrbWJfZHJtX3ByaXZhdGUgKmttYiA9IHRv X2ttYihkZXYpOworCXU2NCBkYXRhX3JhdGU7CisKKwltaXBpX3R4X2luaXRfY2ZnLmFjdGl2ZV9s YW5lcyA9IE1JUElfVFhfQUNUSVZFX0xBTkVTOworCisJbWlwaV90eF9mcmFtZTBfc2VjdF9jZmcu d2lkdGhfcGl4ZWxzID0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKKwltaXBpX3R4X2ZyYW1lMF9zZWN0 X2NmZy5oZWlnaHRfbGluZXMgPSBtb2RlLT5jcnRjX3ZkaXNwbGF5OworCW1pcGl0eF9mcmFtZTBf Y2ZnLnZzeW5jX3dpZHRoID0KKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3Zz eW5jX3N0YXJ0OworCW1pcGl0eF9mcmFtZTBfY2ZnLnZfYmFja3BvcmNoID0KKwkJbW9kZS0+Y3J0 Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX2VuZDsKKwltaXBpdHhfZnJhbWUwX2NmZy52X2Zy b250cG9yY2ggPQorCQltb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y192ZGlzcGxh eTsKKwltaXBpdHhfZnJhbWUwX2NmZy5oc3luY193aWR0aCA9CisJCW1vZGUtPmNydGNfaHN5bmNf ZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKKwltaXBpdHhfZnJhbWUwX2NmZy5oX2JhY2tw b3JjaCA9CisJCW1vZGUtPmNydGNfaHRvdGFsIC0gbW9kZS0+Y3J0Y19oc3luY19lbmQ7CisJbWlw aXR4X2ZyYW1lMF9jZmcuaF9mcm9udHBvcmNoID0KKwkJbW9kZS0+Y3J0Y19oc3luY19zdGFydCAt IG1vZGUtPmNydGNfaGRpc3BsYXk7CisKKwkvKiBMYW5lIHJhdGUgPSAodnRvdGFsKmh0b3RhbCpm cHMqYnBwKS80IC8gMTAwMDAwMAorCSAqIHRvIGNvbnZlcnQgdG8gTWJwcworCSAqLworCWRhdGFf cmF0ZSA9ICgoKCh1MzIpbW9kZS0+Y3J0Y192dG90YWwgKgkodTMyKW1vZGUtPmNydGNfaHRvdGFs KSAqCisJCQkodTMyKShkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgKgorCQkJTUlQSV9UWF9CUFAp IC8gbWlwaV90eF9pbml0X2NmZy5hY3RpdmVfbGFuZXMpIC8JMTAwMDAwMDsKKworCWRybV9kYmco JmttYi0+ZHJtLCAiZGF0YV9yYXRlPSV1IGFjdGl2ZV9sYW5lcz0lZFxuIiwKKwkJKHUzMilkYXRh X3JhdGUsIG1pcGlfdHhfaW5pdF9jZmcuYWN0aXZlX2xhbmVzKTsKKworCS8qIFdoZW4gbGF0ZSBy YXRlIDwgODAwLCBtb2Rlc2V0IGZhaWxzIHdpdGggNCBsYW5lcywKKwkgKiBzbyBzd2l0Y2ggdG8g MiBsYW5lcworCSAqLworCWlmIChkYXRhX3JhdGUgPCA4MDApIHsKKwkJbWlwaV90eF9pbml0X2Nm Zy5hY3RpdmVfbGFuZXMgPSAyOworCQltaXBpX3R4X2luaXRfY2ZnLmxhbmVfcmF0ZV9tYnBzID0g ZGF0YV9yYXRlICogMjsKKwl9IGVsc2UgeworCQltaXBpX3R4X2luaXRfY2ZnLmxhbmVfcmF0ZV9t YnBzID0gZGF0YV9yYXRlOworCX0KKworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9FTkFCTEUs IDApOworCWttYl93cml0ZV9taXBpKGttYiwgRFBIWV9JTklUX0NUUkwwLCAwKTsKKwlrbWJfd3Jp dGVfbWlwaShrbWIsIERQSFlfSU5JVF9DVFJMMSwgMCk7CisJa21iX3dyaXRlX21pcGkoa21iLCBE UEhZX0lOSVRfQ1RSTDIsIDApOworCisJLyogSW5pdGlhbGl6ZSBtaXBpIGNvbnRyb2xsZXIgKi8K KwltaXBpX3R4X2luaXRfY250cmwoa21iLCAmbWlwaV90eF9pbml0X2NmZyk7CisKKwkvKiBEcGh5 IGluaXRpYWxpemF0aW9uICovCisJbWlwaV90eF9pbml0X2RwaHkoa21iLCAmbWlwaV90eF9pbml0 X2NmZyk7CisKKwljb25uZWN0X2xjZF90b19taXBpKGttYik7CisKKwlkcm1faW5mbygma21iLT5k cm0sICJtaXBpIGh3X2luaXRpYWxpemVkIik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGttYl9k c2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQoreworCXN0cnVjdCBrbWJfZHNpICprbWJfZHNpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBrbWJfZHNp X2hvc3QgKmhvc3Q7CisJaW50IHJldCA9IDA7CisKKwlrbWJfZHNpID0ga3phbGxvYyhzaXplb2Yo KmttYl9kc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWttYl9kc2kpIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gYWxsb2NhdGUga21iX2RzaVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CWhvc3QgPSBrbWJfZHNpX2hvc3RfaW5pdChkZXYsIGttYl9kc2kpOworCWlmICghaG9zdCkgewor CQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBob3N0XG4iKTsKKwkJa2ZyZWUoa21iX2Rz aSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWttYl9kc2ktPmRzaV9ob3N0ID0gaG9zdDsK KwllbmNvZGVyID0gJmttYl9kc2ktPmJhc2U7CisJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAx OworCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CisKKwlkcm1fZW5jb2Rlcl9pbml0KGRl diwgZW5jb2RlciwgJmttYl9kc2lfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfRFNJLAorCQkJICJN SVBJLURTSSIpOworCisJLyogTGluayBkcm1fYnJpZGdlIHRvIGVuY29kZXIgKi8KKwlyZXQgPSBk cm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLCBicmlkZ2UsIE5VTEwsIDApOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGJyaWRnZSB0byBNSVBJXG4iKTsKKwkJZHJt X2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2luZm8o ZGV2LCAiQnJpZGdlIGF0dGFjaGVkIDogU1VDQ0VTUyIpOworCWNvbm5lY3RvciA9IGRybV9icmlk Z2VfY29ubmVjdG9yX2luaXQoZGV2LCBlbmNvZGVyKTsKKwlpZiAoSVNfRVJSKGNvbm5lY3Rvcikp IHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIGJyaWRnZSBjb25uZWN0b3IiKTsKKwkJ ZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKKwkJcmV0dXJuIFBUUl9FUlIoY29ubmVjdG9y KTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIp OworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0va21iL2ttYl9k c2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9rbWIva21iX2RzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmZjNDM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0va21iL2ttYl9kc2kuaApAQCAtMCwwICsxLDM1MCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5LTIwMjAgSW50ZWwg Q29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9fS01CX0RTSV9IX18KKyNkZWZpbmUgX19LTUJf RFNJX0hfXworCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9t aXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4KKyNpbmNsdWRlICJrbWJfZHJ2 LmgiCisKKy8qIE1JUEkgVFggQ0ZHKi8KKyNkZWZpbmUgTUlQSV9UWF9MQU5FX0RBVEFfUkFURV9N QlBTIDg5MQorI2RlZmluZSBNSVBJX1RYX1JFRl9DTEtfS0haICAgICAgICAgMjQwMDAKKyNkZWZp bmUgTUlQSV9UWF9DRkdfQ0xLX0tIWiAgICAgICAgIDI0MDAwCisjZGVmaW5lIE1JUElfVFhfQlBQ CQkgICAgMjQKKworLyogRFBIWSBUeCB0ZXN0IGNvZGVzKi8KKyNkZWZpbmUgVEVTVF9DT0RFX0ZT TV9DT05UUk9MCQkJCTB4MDMKKyNkZWZpbmUgVEVTVF9DT0RFX01VTFRJUExFX1BIWV9DVFJMCQkJ MHgwQworI2RlZmluZSBURVNUX0NPREVfUExMX1BST1BPUlRJT05BTF9DSEFSR0VfUFVNUF9DVFJM CTB4MEUKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9JTlRFR1JBTF9DSEFSR0VfUFVNUF9DVFJMCQkw eDBGCisjZGVmaW5lIFRFU1RfQ09ERV9QTExfVkNPX0NUUkwJCQkJMHgxMgorI2RlZmluZSBURVNU X0NPREVfUExMX0dNUF9DVFJMCQkJCTB4MTMKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9QSEFTRV9F UlJfQ1RSTAkJCTB4MTQKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9MT0NLX0ZJTFRFUgkJCTB4MTUK KyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9VTkxPQ0tfRklMVEVSCQkJMHgxNgorI2RlZmluZSBURVNU X0NPREVfUExMX0lOUFVUX0RJVklERVIJCQkweDE3CisjZGVmaW5lIFRFU1RfQ09ERV9QTExfRkVF REJBQ0tfRElWSURFUgkJCTB4MTgKKyNkZWZpbmUgICBQTExfRkVFREJBQ0tfRElWSURFUl9ISUdI CQkJQklUKDcpCisjZGVmaW5lIFRFU1RfQ09ERV9QTExfT1VUUFVUX0NMS19TRUwJCQkweDE5Cisj ZGVmaW5lICAgUExMX05fT1ZSX0VOCQkJCQlCSVQoNCkKKyNkZWZpbmUgICBQTExfTV9PVlJfRU4J CQkJCUJJVCg1KQorI2RlZmluZSBURVNUX0NPREVfVk9EX0xFVkVMCQkJCTB4MjQKKyNkZWZpbmUg VEVTVF9DT0RFX1BMTF9DSEFSR0VfUFVNUF9CSUFTCQkJMHgxQworI2RlZmluZSBURVNUX0NPREVf UExMX0xPQ0tfREVURUNUT1IJCQkweDFECisjZGVmaW5lIFRFU1RfQ09ERV9IU19GUkVRX1JBTkdF X0NGRwkJCTB4NDQKKyNkZWZpbmUgVEVTVF9DT0RFX1BMTF9BTkFMT0dfUFJPRwkJCTB4MUYKKyNk ZWZpbmUgVEVTVF9DT0RFX1NMRVdfUkFURV9PVkVSUklERV9DVFJMCQkweEEwCisjZGVmaW5lIFRF U1RfQ09ERV9TTEVXX1JBVEVfRERMX0xPT1BfQ1RSTAkJMHhBMworI2RlZmluZSBURVNUX0NPREVf U0xFV19SQVRFX0RETF9DWUNMRVMJCQkweEE0CisKKy8qIERQSFkgcGFyYW1zICovCisjZGVmaW5l IFBMTF9OX01JTgkwCisjZGVmaW5lIFBMTF9OX01BWAkxNQorI2RlZmluZSBQTExfTV9NSU4JNjIK KyNkZWZpbmUgUExMX01fTUFYCTYyMworI2RlZmluZSBQTExfRlZDT19NQVgJMTI1MAorCisjZGVm aW5lIFRJTUVPVVQJCTYwMAorCisjZGVmaW5lIE1JUElfVFhfRlJBTUVfR0VOCQkJCTQKKyNkZWZp bmUgTUlQSV9UWF9GUkFNRV9HRU5fU0VDVElPTlMJCQk0CisjZGVmaW5lIE1JUElfQ1RSTF9WSVJU VUFMX0NIQU5ORUxTCQkJNAorI2RlZmluZSBNSVBJX0RfTEFORVNfUEVSX0RQSFkJCQkJMgorI2Rl ZmluZSBNSVBJX0NUUkxfMkxBTkVfTUFYX01DX0ZJRk9fTE9DCQkJMjU1CisjZGVmaW5lIE1JUElf Q1RSTF80TEFORV9NQVhfTUNfRklGT19MT0MJCQk1MTEKKy8qIDIgRGF0YSBMYW5lcyBwZXIgRC1Q SFkgKi8KKyNkZWZpbmUgTUlQSV9EUEhZX0RfTEFORVMJCQkJMgorI2RlZmluZSBNSVBJX0RQSFlf REVGQVVMVF9CSVRfUkFURVMJCQk2MworCisjZGVmaW5lIHRvX2ttYl9jb25uZWN0b3IoeCkgY29u dGFpbmVyX29mKHgsIHN0cnVjdCBrbWJfY29ubmVjdG9yLCBiYXNlKQorI2RlZmluZSB0b19rbWJf aG9zdCh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGttYl9kc2lfaG9zdCwgYmFzZSkKKyNkZWZp bmUgdG9fa21iX2RzaSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGttYl9kc2ksIGJhc2UpCisK K3N0cnVjdCBrbWJfY29ubmVjdG9yOworc3RydWN0IGttYl9kc2lfaG9zdDsKKworc3RydWN0IGtt Yl9kc2kgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNlOworCXN0cnVjdCBrbWJfZHNpX2hvc3Qg KmRzaV9ob3N0OworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cit9OworCitzdHJ1Y3Qga21i X2RzaV9ob3N0IHsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqYmFzZTsKKwlzdHJ1Y3Qga21iX2Rz aSAqa21iX2RzaTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2U7Cit9OworCitzdHJ1 Y3Qga21iX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKwlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmZpeGVkX21v ZGU7Cit9OworCisvKiBEUEhZIFR4IHRlc3QgY29kZXMgKi8KKworZW51bSBtaXBpX2N0cmxfbnVt IHsKKwlNSVBJX0NUUkwwID0gMCwKKwlNSVBJX0NUUkwxLAorCU1JUElfQ1RSTDIsCisJTUlQSV9D VFJMMywKKwlNSVBJX0NUUkw0LAorCU1JUElfQ1RSTDUsCisJTUlQSV9DVFJMNiwKKwlNSVBJX0NU Ukw3LAorCU1JUElfQ1RSTDgsCisJTUlQSV9DVFJMOSwKKwlNSVBJX0NUUkxfTkEKK307CisKK2Vu dW0gbWlwaV9kcGh5X251bSB7CisJTUlQSV9EUEhZMCA9IDAsCisJTUlQSV9EUEhZMSwKKwlNSVBJ X0RQSFkyLAorCU1JUElfRFBIWTMsCisJTUlQSV9EUEhZNCwKKwlNSVBJX0RQSFk1LAorCU1JUElf RFBIWTYsCisJTUlQSV9EUEhZNywKKwlNSVBJX0RQSFk4LAorCU1JUElfRFBIWTksCisJTUlQSV9E UEhZX05BCit9OworCitlbnVtIG1pcGlfZGlyIHsKKwlNSVBJX1JYLAorCU1JUElfVFgKK307CisK K2VudW0gbWlwaV9jdHJsX3R5cGUgeworCU1JUElfRFNJLAorCU1JUElfQ1NJCit9OworCitlbnVt IG1pcGlfZGF0YV9pZiB7CisJTUlQSV9JRl9ETUEsCisJTUlQSV9JRl9QQVJBTExFTAorfTsKKwor ZW51bSBtaXBpX2RhdGFfbW9kZSB7CisJTUlQSV9EQVRBX01PREUwLAorCU1JUElfREFUQV9NT0RF MSwKKwlNSVBJX0RBVEFfTU9ERTIsCisJTUlQSV9EQVRBX01PREUzCit9OworCitlbnVtIG1pcGlf ZHNpX3ZpZGVvX21vZGUgeworCURTSV9WSURFT19NT0RFX05PX0JVUlNUX1BVTFNFLAorCURTSV9W SURFT19NT0RFX05PX0JVUlNUX0VWRU5ULAorCURTSV9WSURFT19NT0RFX0JVUlNUCit9OworCitl bnVtIG1pcGlfZHNpX2JsYW5raW5nX21vZGUgeworCVRSQU5TSVRJT05fVE9fTE9XX1BPV0VSLAor CVNFTkRfQkxBTktfUEFDS0VUCit9OworCitlbnVtIG1pcGlfZHNpX2VvdHAgeworCURTSV9FT1RQ X0RJU0FCTEVELAorCURTSV9FT1RQX0VOQUJMRVMKK307CisKK2VudW0gbWlwaV9kc2lfZGF0YV90 eXBlIHsKKwlEU0lfU1BfRFRfUkVTRVJWRURfMDAgPSAweDAwLAorCURTSV9TUF9EVF9WU1lOQ19T VEFSVCA9IDB4MDEsCisJRFNJX1NQX0RUX0NPTE9SX01PREVfT0ZGID0gMHgwMiwKKwlEU0lfU1Bf RFRfR0VORVJJQ19TSE9SVF9XUiA9IDB4MDMsCisJRFNJX1NQX0RUX0dFTkVSSUNfUkQgPSAweDA0 LAorCURTSV9TUF9EVF9EQ1NfU0hPUlRfV1IgPSAweDA1LAorCURTSV9TUF9EVF9EQ1NfUkQgPSAw eDA2LAorCURTSV9TUF9EVF9FT1RQID0gMHgwOCwKKwlEU0lfTFBfRFRfTlVMTCA9IDB4MDksCisJ RFNJX0xQX0RUX1JFU0VSVkVEXzBBID0gMHgwYSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMEIgPSAw eDBiLAorCURTSV9MUF9EVF9MUFBTX1lDQkNSNDIyXzIwQiA9IDB4MGMsCisJRFNJX0xQX0RUX1BQ U19SR0IxMDEwMTBfMzBCID0gMHgwZCwKKwlEU0lfTFBfRFRfUFBTX1JHQjU2NV8xNkIgPSAweDBl LAorCURTSV9MUF9EVF9SRVNFUlZFRF8wRiA9IDB4MGYsCisKKwlEU0lfU1BfRFRfUkVTRVJWRURf MTAgPSAweDEwLAorCURTSV9TUF9EVF9WU1lOQ19FTkQgPSAweDExLAorCURTSV9TUF9EVF9DT0xP Ul9NT0RFX09OID0gMHgxMiwKKwlEU0lfU1BfRFRfR0VORVJJQ19TSE9SVF9XUl8xUEFSID0gMHgx MywKKwlEU0lfU1BfRFRfR0VORVJJQ19SRF8xUEFSID0gMHgxNCwKKwlEU0lfU1BfRFRfRENTX1NI T1JUX1dSXzFQQVIgPSAweDE1LAorCURTSV9TUF9EVF9SRVNFUlZFRF8xNiA9IDB4MTYsCisJRFNJ X1NQX0RUX1JFU0VSVkVEXzE3ID0gMHgxNywKKwlEU0lfU1BfRFRfUkVTRVJWRURfMTggPSAweDE4 LAorCURTSV9MUF9EVF9CTEFOSyA9IDB4MTksCisJRFNJX0xQX0RUX1JFU0VSVkVEXzFBID0gMHgx YSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfMUIgPSAweDFiLAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0 MjJfMjRCID0gMHgxYywKKwlEU0lfTFBfRFRfUFBTX1JHQjEyMTIxMl8zNkIgPSAweDFkLAorCURT SV9MUF9EVF9QUFNfUkdCNjY2XzE4QiA9IDB4MWUsCisJRFNJX0xQX0RUX1JFU0VSVkVEXzFGID0g MHgxZiwKKworCURTSV9TUF9EVF9SRVNFUlZFRF8yMCA9IDB4MjAsCisJRFNJX1NQX0RUX0hTWU5D X1NUQVJUID0gMHgyMSwKKwlEU0lfU1BfRFRfU0hVVF9ET1dOX1BFUklQSF9DTUQgPSAweDIyLAor CURTSV9TUF9EVF9HRU5FUklDX1NIT1JUX1dSXzJQQVIgPSAweDIzLAorCURTSV9TUF9EVF9HRU5F UklDX1JEXzJQQVIgPSAweDI0LAorCURTSV9TUF9EVF9SRVNFUlZFRF8yNSA9IDB4MjUsCisJRFNJ X1NQX0RUX1JFU0VSVkVEXzI2ID0gMHgyNiwKKwlEU0lfU1BfRFRfUkVTRVJWRURfMjcgPSAweDI3 LAorCURTSV9TUF9EVF9SRVNFUlZFRF8yOCA9IDB4MjgsCisJRFNJX0xQX0RUX0dFTkVSSUNfTE9O R19XUiA9IDB4MjksCisJRFNJX0xQX0RUX1JFU0VSVkVEXzJBID0gMHgyYSwKKwlEU0lfTFBfRFRf UkVTRVJWRURfMkIgPSAweDJiLAorCURTSV9MUF9EVF9QUFNfWUNCQ1I0MjJfMTZCID0gMHgyYywK KwlEU0lfTFBfRFRfUkVTRVJWRURfMkQgPSAweDJkLAorCURTSV9MUF9EVF9MUFBTX1JHQjY2Nl8x OEIgPSAweDJlLAorCURTSV9MUF9EVF9SRVNFUlZFRF8yRiA9IDB4MmYsCisKKwlEU0lfU1BfRFRf UkVTRVJWRURfMzAgPSAweDMwLAorCURTSV9TUF9EVF9IU1lOQ19FTkQgPSAweDMxLAorCURTSV9T UF9EVF9UVVJOX09OX1BFUklQSF9DTUQgPSAweDMyLAorCURTSV9TUF9EVF9SRVNFUlZFRF8zMyA9 IDB4MzMsCisJRFNJX1NQX0RUX1JFU0VSVkVEXzM0ID0gMHgzNCwKKwlEU0lfU1BfRFRfUkVTRVJW RURfMzUgPSAweDM1LAorCURTSV9TUF9EVF9SRVNFUlZFRF8zNiA9IDB4MzYsCisJRFNJX1NQX0RU X1NFVF9NQVhfUkVUVVJOX1BLVF9TSVpFID0gMHgzNywKKwlEU0lfU1BfRFRfUkVTRVJWRURfMzgg PSAweDM4LAorCURTSV9MUF9EVF9EU0NfTE9OR19XUiA9IDB4MzksCisJRFNJX0xQX0RUX1JFU0VS VkVEXzNBID0gMHgzYSwKKwlEU0lfTFBfRFRfUkVTRVJWRURfM0IgPSAweDNiLAorCURTSV9MUF9E VF9SRVNFUlZFRF8zQyA9IDB4M2MsCisJRFNJX0xQX0RUX1BQU19ZQ0JDUjQyMF8xMkIgPSAweDNk LAorCURTSV9MUF9EVF9QUFNfUkdCODg4XzI0QiA9IDB4M2UsCisJRFNJX0xQX0RUX1JFU0VSVkVE XzNGID0gMHgzZgorfTsKKworZW51bSBtaXBpX3R4X2hzX3RwX3NlbCB7CisJTUlQSV9UWF9IU19U UF9XSE9MRV9GUkFNRV9DT0xPUjAgPSAwLAorCU1JUElfVFhfSFNfVFBfV0hPTEVfRlJBTUVfQ09M T1IxLAorCU1JUElfVFhfSFNfVFBfVl9TVFJJUEVTLAorCU1JUElfVFhfSFNfVFBfSF9TVFJJUEVT LAorfTsKKworZW51bSBkcGh5X21vZGUgeworCU1JUElfRFBIWV9TTEFWRSA9IDAsCisJTUlQSV9E UEhZX01BU1RFUgorfTsKKworZW51bSBkcGh5X3R4X2ZzbSB7CisJRFBIWV9UWF9QT1dFUkRXTiA9 IDAsCisJRFBIWV9UWF9CR1BPTiwKKwlEUEhZX1RYX1RFUk1DQUwsCisJRFBIWV9UWF9URVJNQ0FM VVAsCisJRFBIWV9UWF9PRkZTRVRDQUwsCisJRFBIWV9UWF9MT0NLLAorCURQSFlfVFhfU1JDQUws CisJRFBIWV9UWF9JRExFLAorCURQSFlfVFhfVUxQLAorCURQSFlfVFhfTEFORVNUQVJULAorCURQ SFlfVFhfQ0xLQUxJR04sCisJRFBIWV9UWF9ERExUVU5OSU5HLAorCURQSFlfVFhfVUxQX0ZPUkNF X1BMTCwKKwlEUEhZX1RYX0xPQ0tfTE9TUworfTsKKworc3RydWN0IG1pcGlfZGF0YV90eXBlX3Bh cmFtcyB7CisJdTggc2l6ZV9jb25zdHJhaW50X3BpeGVsczsKKwl1OCBzaXplX2NvbnN0cmFpbnRf Ynl0ZXM7CisJdTggcGl4ZWxzX3Blcl9wY2xrOworCXU4IGJpdHNfcGVyX3BjbGs7Cit9OworCitz dHJ1Y3QgbWlwaV90eF9kc2lfY2ZnIHsKKwl1OCBoZnBfYmxhbmtfZW47CS8qaG9yaXpvbnRhbCBm cm9udCBwb3JjaCBibGFua2luZyBlbmFibGUgKi8KKwl1OCBlb3RwX2VuOwkvKkVuZCBvZiB0cmFu c21pc3Npb24gcGFja2V0IGVuYWJsZSAqLworCS8qbGFzdCB2ZXJ0aWNhbCBmcm9udCBwb3JjaCBi bGFua2luZyBtb2RlICovCisJdTggbHBtX2xhc3RfdmZwX2xpbmU7CisJLypmaXJzdCB2ZXJ0aWNh bCBzeW5jIGFjdGl2ZSBibGFua2luZyBtb2RlICovCisJdTggbHBtX2ZpcnN0X3ZzYV9saW5lOwor CXU4IHN5bmNfcHVsc2VfZXZlbnRuOwkvKnN5bmMgdHlwZSAqLworCXU4IGhmcF9ibGFua2luZzsJ Lypob3Jpem9udGFsIGZyb250IHBvcmNoIGJsYW5raW5nIG1vZGUgKi8KKwl1OCBoYnBfYmxhbmtp bmc7CS8qaG9yaXpvbnRhbCBiYWNrIHBvcmNoIGJsYW5raW5nIG1vZGUgKi8KKwl1OCBoc2FfYmxh bmtpbmc7CS8qaG9yaXpvbnRhbCBzeW5jIGFjdGl2ZSBibGFua2luZyBtb2RlICovCisJdTggdl9i bGFua2luZzsJLyp2ZXJ0aWNhbCB0aW1pbmcgYmxhbmtpbmcgbW9kZSAqLworfTsKKworc3RydWN0 IG1pcGlfdHhfZnJhbWVfc2VjdGlvbl9jZmcgeworCXUzMiBkbWFfdl9zdHJpZGU7CisJdTE2IGRt YV92X3NjYWxlX2NmZzsKKwl1MTYgd2lkdGhfcGl4ZWxzOworCXUxNiBoZWlnaHRfbGluZXM7CisJ dTggZG1hX3BhY2tlZDsKKwl1OCBicHA7CisJdTggYnBwX3VucGFja2VkOworCXU4IGRtYV9oX3N0 cmlkZTsKKwl1OCBkYXRhX3R5cGU7CisJdTggZGF0YV9tb2RlOworCXU4IGRtYV9mbGlwX3JvdGF0 ZV9zZWw7Cit9OworCitzdHJ1Y3QgbWlwaV90eF9mcmFtZV90aW1pbmdfY2ZnIHsKKwl1MzIgYnBw OworCXUzMiBsYW5lX3JhdGVfbWJwczsKKwl1MzIgaHN5bmNfd2lkdGg7CisJdTMyIGhfYmFja3Bv cmNoOworCXUzMiBoX2Zyb250cG9yY2g7CisJdTMyIGhfYWN0aXZlOworCXUxNiB2c3luY193aWR0 aDsKKwl1MTYgdl9iYWNrcG9yY2g7CisJdTE2IHZfZnJvbnRwb3JjaDsKKwl1MTYgdl9hY3RpdmU7 CisJdTggYWN0aXZlX2xhbmVzOworfTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfc2VjdF9waGNm ZyB7CisJdTMyIHdjOworCWVudW0gbWlwaV9kYXRhX21vZGUgZGF0YV9tb2RlOworCWVudW0gbWlw aV9kc2lfZGF0YV90eXBlIGRhdGFfdHlwZTsKKwl1OCB2Y2hhbm5lbDsKKwl1OCBkbWFfcGFja2Vk OworfTsKKworc3RydWN0IG1pcGlfdHhfZnJhbWVfY2ZnIHsKKwlzdHJ1Y3QgbWlwaV90eF9mcmFt ZV9zZWN0aW9uX2NmZyAqc2VjdGlvbnNbTUlQSV9UWF9GUkFNRV9HRU5fU0VDVElPTlNdOworCXUz MiBoc3luY193aWR0aDsJLyppbiBwaXhlbHMgKi8KKwl1MzIgaF9iYWNrcG9yY2g7CS8qaW4gcGl4 ZWxzICovCisJdTMyIGhfZnJvbnRwb3JjaDsJLyppbiBwaXhlbHMgKi8KKwl1MTYgdnN5bmNfd2lk dGg7CS8qaW4gbGluZXMgKi8KKwl1MTYgdl9iYWNrcG9yY2g7CS8qaW4gbGluZXMgKi8KKwl1MTYg dl9mcm9udHBvcmNoOwkvKmluIGxpbmVzICovCit9OworCitzdHJ1Y3QgbWlwaV90eF9jdHJsX2Nm ZyB7CisJc3RydWN0IG1pcGlfdHhfZnJhbWVfY2ZnICpmcmFtZXNbTUlQSV9UWF9GUkFNRV9HRU5d OworCXN0cnVjdCBtaXBpX3R4X2RzaV9jZmcgKnR4X2RzaV9jZmc7CisJdTggbGluZV9zeW5jX3Br dF9lbjsKKwl1OCBsaW5lX2NvdW50ZXJfYWN0aXZlOworCXU4IGZyYW1lX2NvdW50ZXJfYWN0aXZl OworCXU4IHR4X2hzY2xra2lkbGVfY250OworCXU4IHR4X2hzZXhpdF9jbnQ7CisJdTggdHhfY3Jj X2VuOworCXU4IHR4X2hhY3Rfd2FpdF9zdG9wOworCXU4IHR4X2Fsd2F5c191c2VfaGFjdDsKKwl1 OCB0eF93YWl0X3RyaWc7CisJdTggdHhfd2FpdF9hbGxfc2VjdDsKK307CisKKy8qY29uZmlndXJh dGlvbiBzdHJ1Y3R1cmUgZm9yIE1JUEkgY29udHJvbCAqLworc3RydWN0IG1pcGlfY3RybF9jZmcg eworCXU4IGFjdGl2ZV9sYW5lczsJLyogIyBhY3RpdmUgbGFuZXMgcGVyIGNvbnRyb2xsZXIgMi80 ICovCisJdTMyIGxhbmVfcmF0ZV9tYnBzOwkvKk1CUFMgKi8KKwl1MzIgcmVmX2Nsa19raHo7CisJ dTMyIGNmZ19jbGtfa2h6OworCXN0cnVjdCBtaXBpX3R4X2N0cmxfY2ZnIHR4X2N0cmxfY2ZnOwor fTsKKworc3RydWN0IGRybV9icmlkZ2UgKmttYl9kc2lfaG9zdF9icmlkZ2VfaW5pdChzdHJ1Y3Qg ZGV2aWNlICpkZXYpOworaW50IGttYl9kc2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKK3ZvaWQga21iX2RzaV9ob3N0X3VucmVnaXN0ZXIo dm9pZCk7CitpbnQga21iX2RzaV9od19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKKyNlbmRpZiAvKiBfX0tNQl9EU0lfSF9fICovCi0t IAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==